ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTY1ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzODQ5ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLWF4aXMuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NTQ4NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVkMDQ0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU2F0IERlYyAyMiAxOTo1MDoyNCBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZkMTA0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mjk6MTQgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzA0MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozOSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVkODIyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDQucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSJbMS42LjUsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGI1NjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19idWphdmEucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBTY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gImNsaWVudCIgc2NlbmFyaW8uCi1TY2VuYXJpb1R5cGU9c2VydmljZQotCi0hLS0gSW5pdGlhbFNlbGVjdGlvbiBSRVFVSVJFRC4gIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gdGhlIGlucHV0IFdTREwgb3IgSmF2YQotSW5pdGlhbFNlbGVjdGlvbj0vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9wYWNrYWdlbmFtZS9teVNlcnZpY2UuamF2YQotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbGlkIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIFNlcnZpY2UuUnVudGltZUlkLCBTZXJ2aWNlLlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIS0tICBTZXJ2aWNlLlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1TZXJ2aWNlLlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS0gU2VydmljZS5TZXJ2ZXJJZCAtICBJRCBvZiB0YXJnZXQgc2VydmVyIAotU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MAotIS0tIFNlcnZpY2UuVHlwZUlkIC0gICJUb3AgRG93biBFSkIiIG9yICJCb3R0b20gVXAgRUpCIiAgCi0hLS0gSmF2YSBCZWFuIGlzIGRlZmF1bHQgZm9yIGJvdGggVG9wIERvd24gYW5kIEJvdHRvbSBVcAotIS0tIFNlcnZpY2UuVHlwZUlkPVRvcCBEb3duIEVKQgotCi0hLS0gU2VydmljZVByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZyAgICAKLSEtLVNlcnZpY2VQcm9qZWN0TmFtZT1zZXJ2aWNlUHJvamVjdE5hbWUKLSEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZwotIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQotCi0hLS0gTWFwcGluZ3MKLSEtLSBUb3AgZG93biBvciBib3R0b20gdXAgc2NlbmFyaW8uIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLgotIS0tIFRvcCBEb3duOiBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSB0ZW1wbGF0ZSBjbGFzc2VzLgotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlICAKLSEtLSBCb3R0b20gVXA6IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZSAKLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tIEphdmFPdXRwdXQKLSEtLSBUb3AgZG93biAtIFN0cmluZzogdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgZm9yIGEgSmF2YSBzb3VyY2UgZm9sZGVyIGZvciB0aGUgZ2VuZXJhdGVkIEphdmEgY29kZSAtIG11c3QgYmUgZXhpc3Rpbmcgd29ya3NwYWNlIHNvdXJjZSBmb2xkZXIKLSEtLUphdmFPdXRwdXQ9L3Byb2plY3ROYW1lL0phdmFTb3VyY2UKLQotIS0tIE1ldGhvZHMKLSEtLSBCb3R0b20gdXAgLSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzIChpLmUuIG1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMikpIHRvIGJlIGV4cG9zZWQgaW4gb3V0cHV0IFdTREwuICBJZiBubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4KLSEtLSBNZXRob2RzPQotCi0hLS0gU3R5bGUKLSEtLSBCb3R0b20gdXAgLSBTdHJpbmc6IG9uZSBvZjogUlBDLCBET0NVTUVOVCwgV1JBUFBFRAotIS0tU3R5bGU9RE9DVU1FTlQKLQotIS0tIFVzZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBMSVRFUkFMLCBFTkNPREVEIAotIS0tVXNlPUxJVEVSQUwKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkPXRydWUKLQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSBjcmVhdGUgZm9sZGVycyBuZWNlc3NhcnkgZHVyaW5nIGZpbGUgZ2VuZXJhdGlvbiB0eXBlOmJvb2xlYW4KLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfYnVqYXZhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmOTQyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfYnVqYXZhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuIj4KLQotPGVjaG8gbWVzc2FnZT0icHVsbGluZyBpbiBwcm9wZXJ0eSBmaWxlcyIvPgotPHByb3BlcnR5IGZpbGU9ImF4aXNfYnVqYXZhLnByb3BlcnRpZXMiLz4KLQkKLTxlY2hvIG1lc3NhZ2U9ImNhbGxpbmcgdGhlIHdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrOiBheGlzX2J1amF2YSIvPgotIDx0YXJnZXQgbmFtZT0ibWFpbiIgPgotICAJIDx3c2dlbi8+Ci0gIDwvdGFyZ2V0PgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19jbGllbnQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19jbGllbnQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIzY2E0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfY2xpZW50LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0hLS1TY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gInNlcnZpY2UiIHNjZW5hcmlvLgotU2NlbmFyaW9UeXBlPWNsaWVudAotCi0hLS1Jbml0aWFsU2VsZWN0aW9uIFJFUVVJUkVELiAgV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgaW5wdXQgV1NETCBvciBKYXZhLgotSW5pdGlhbFNlbGVjdGlvbj0vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvd3NkbC9teVNlcnZpY2Uud3NkbAotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIENsaWVudC5SdW50aW1lSWQsIENsaWVudC5TZXJ2ZXJJZCAKLUxpc3RSdW50aW1lcz10cnVlCi1MaXN0U2VydmVycz10cnVlCi0hLS0gVmVyYm9zZSB3aWxsIGxpc3QgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBhcyB3ZWxsIGFzIGVycm9ycyBpZiBzZXQgdG8gdHJ1ZQotVmVyYm9zZT10cnVlCi0KLSAKLSEtLUNsaWVudC5SdW50aW1lSWQgLSBJRCBvZiB3ZWIgc2VydmljZSBydW50aW1lIAotQ2xpZW50LlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS1DbGllbnQuU2VydmVySWQgLSBJRCBvZiB0YXJnZXQgc2VydmVyIAotQ2xpZW50LlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwCi0KLSEtLUNsaWVudFByb2plY3ROYW1lIC0gbmFtZSBvZiBDbGllbnQgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgY2xpZW50IHByb2plY3QgYSAKLSEtLSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0hLS1DbGllbnRQcm9qZWN0TmFtZT1jbGllbnRQcm9qZWN0TmFtZQotCi0hLS1DbGllbnRFYXJQcm9qZWN0TmFtZS0gbmFtZSBvZiBDbGllbnQgRUFSIHByb2plY3QgLSBzZXQgb25seSBpZiBhcHBsaWNhYmxlIGZvciBzZWxlY3RlZCBzZXJ2ZXIgdHlwZQotIS0tQ2xpZW50RWFyUHJvamVjdE5hbWU9Y2xpZW50RUFSUHJvamVjdE5hbWUKLQotIS0tQ2xpZW50Q29tcG9uZW50VHlwZSAtIHR5cGUgb2YgQ2xpZW50IHByb2plY3QgLSB0aGUgZm9sbG93aW5nIGFyZSB2YWxpZCBBeGlzIHRlbXBsYXRlczogdGVtcGxhdGUuanN0LndlYiBhbmQgdGVtcGxhdGUuanN0LnV0aWxpdHkKLSEtLUNsaWVudENvbXBvbmVudFR5cGU9dGVtcGxhdGUuanN0LndlYgotCi0hLS0gQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MgLSBzZXQgdG8gdHJ1ZSB0byBzdXBwbHkgcGFja2FnZS1uYW1lc3BhY2UgbWFwcGluZ3MgdHlwZTogYm9vbGVhbgotIS0tQ3VzdG9taXplQ2xpZW50TWFwcGluZ3M9ZmFsc2UgIAotICAgIAotIS0tIE1hcHBpbmdzIAotIS0tIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzCi0hLS0gTWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkIEphdmEgY2xhc3Nlcy4KLSEtLSBOZWVkIG5vdCBiZSBzZXQgaWYgQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MgaXMgZmFsc2UgIAotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2UgPSBuYW1lc3BhY2UuCi0hLS1NYXBwaW5ncz0vdGVzdFByb2ovbWFwcGluZ3MvbWFwcGluZ3MudHh0Ci0KLSEtLU92ZXJ3cml0ZUZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIG92ZXJ3cml0ZSBmaWxlcyB0aGF0IGFscmVhZHkgZXhpc3QuIHR5cGU6Ym9vbGVhbiAKLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLSBPdmVyd3JpdGVGaWxlc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DcmVhdGVGb2xkZXJzRW5hYmxlZCAtIHNldCB0byB0cnVlIGNyZWF0ZSBmb2xkZXJzIG5lY2Vzc2FyeSBkdXJpbmcgZmlsZSBnZW5lcmF0aW9uIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIENyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIENoZWNrb3V0RmlsZXNFbmFibGVkPXRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19jbGllbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2NsaWVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYmZlMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2NsaWVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgZGVmYXVsdD0ibWFpbiIgYmFzZWRpcj0iLiI+Ci0KLTxlY2hvIG1lc3NhZ2U9InB1bGxpbmcgaW4gcHJvcGVydHkgZmlsZXMiLz4KLTxwcm9wZXJ0eSBmaWxlPSJheGlzX2NsaWVudC5wcm9wZXJ0aWVzIi8+Ci0JCi08ZWNobyBtZXNzYWdlPSJjYWxsaW5nIHRoZSB3ZWIgc2VydmljZXMgZ2VuZXJhdGlvbiBhbnQgdGFzazogYXhpc19jbGllbnQiLz4KLSA8dGFyZ2V0IG5hbWU9Im1haW4iID4KLSAgCSA8d3NnZW4vPgotICA8L3RhcmdldD4KLSAgCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNGE2ZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX3RkamF2YS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tIFNjZW5hcmlvVHlwZSBSRVFVSVJFRC4gRGlmZmVyZW50aWF0ZXMgZnJvbSAiY2xpZW50IiBzY2VuYXJpby4KLVNjZW5hcmlvVHlwZT1zZXJ2aWNlCi0KLSEtLSBJbml0aWFsU2VsZWN0aW9uIFJFUVVJUkVELiAgV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgaW5wdXQgV1NETCBvciBKYXZhCi1Jbml0aWFsU2VsZWN0aW9uPS9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC9teVNlcnZpY2Uud3NkbAotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbGlkIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIFNlcnZpY2UuUnVudGltZUlkLCBTZXJ2aWNlLlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIS0tICBTZXJ2aWNlLlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1TZXJ2aWNlLlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS0gU2VydmljZS5TZXJ2ZXJJZCAtICBJRCBvZiB0YXJnZXQgc2VydmVyIAotU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MAotIS0tIFNlcnZpY2UuVHlwZUlkIC0gICJUb3AgRG93biBFSkIiIG9yICJCb3R0b20gVXAgRUpCIiAgCi0hLS0gSmF2YSBCZWFuIGlzIGRlZmF1bHQgZm9yIGJvdGggVG9wIERvd24gYW5kIEJvdHRvbSBVcAotIS0tIFNlcnZpY2UuVHlwZUlkPVRvcCBEb3duIEVKQgotCi0hLS0gU2VydmljZVByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZyAgICAKLSEtLVNlcnZpY2VQcm9qZWN0TmFtZT1zZXJ2aWNlUHJvamVjdE5hbWUKLSEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZwotIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQotCi0hLS0gTWFwcGluZ3MKLSEtLSBUb3AgZG93biBvciBib3R0b20gdXAgc2NlbmFyaW8uIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLgotIS0tIFRvcCBEb3duOiBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSB0ZW1wbGF0ZSBjbGFzc2VzLgotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlICAKLSEtLSBCb3R0b20gVXA6IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZSAKLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tIEphdmFPdXRwdXQKLSEtLSBUb3AgZG93biAtIFN0cmluZzogdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgZm9yIGEgSmF2YSBzb3VyY2UgZm9sZGVyIGZvciB0aGUgZ2VuZXJhdGVkIEphdmEgY29kZSAtIG11c3QgYmUgZXhpc3Rpbmcgd29ya3NwYWNlIHNvdXJjZSBmb2xkZXIKLSEtLUphdmFPdXRwdXQ9L3Byb2plY3ROYW1lL0phdmFTb3VyY2UKLQotIS0tIE1ldGhvZHMKLSEtLSBCb3R0b20gdXAgLSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzIChpLmUuIG1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMikpIHRvIGJlIGV4cG9zZWQgaW4gb3V0cHV0IFdTREwuICBJZiBubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4KLSEtLSBNZXRob2RzPQotCi0hLS0gU3R5bGUKLSEtLSBCb3R0b20gdXAgLSBTdHJpbmc6IG9uZSBvZjogUlBDLCBET0NVTUVOVCwgV1JBUFBFRAotIS0tU3R5bGU9RE9DVU1FTlQKLQotIS0tIFVzZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBMSVRFUkFMLCBFTkNPREVEIAotIS0tVXNlPUxJVEVSQUwKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkPXRydWUKLQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSBjcmVhdGUgZm9sZGVycyBuZWNlc3NhcnkgZHVyaW5nIGZpbGUgZ2VuZXJhdGlvbiB0eXBlOmJvb2xlYW4KLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX3RkamF2YS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5MTRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuIj4KLQotPGVjaG8gbWVzc2FnZT0icHVsbGluZyBpbiBwcm9wZXJ0eSBmaWxlcyIvPgotPHByb3BlcnR5IGZpbGU9ImF4aXNfdGRqYXZhLnByb3BlcnRpZXMiLz4KLQkKLTxlY2hvIG1lc3NhZ2U9ImNhbGxpbmcgdGhlIHdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrOiBheGlzX3RkamF2YSIvPgotIDx0YXJnZXQgbmFtZT0ibWFpbiIgPgotICAJIDx3c2dlbi8+Ci0gIDwvdGFyZ2V0PgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTJiYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwODAzMDEgICAyMjA4Nzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFudC8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NmNmU2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBzZXJ2aWNlIEF4aXMgQ29uc3VtcHRpb24gQ29yZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLXhwV1NERENvbnRlbnRUeXBlID0gQXhpcyBXZWIgU2VydmljZSBEZXBsb3ltZW50IERlc2NyaXB0b3IKLQotWF9XRUJfU0VSVklDRV9MT0NBVE9SX0FYSVM9QXBhY2hlIEF4aXMgV2ViIFNlcnZpY2UgTG9jYXRvcgotWF9XRUJfU0VSVklDRV9MT0NBVE9SX0NBVEVHT1JZX0FYSVM9QXBhY2hlIEF4aXMgQ29tcG9uZW50cwotCi0KLSNydW50aW1lIGxhYmVscwotCi1MQUJFTF9SVU5USU1FX0FYSVM9QXBhY2hlIEF4aXMKLQotI3NjZW5hcmlvIGxhYmVscwotCi1MQUJFTF9CT1RUT01fVVBfSkFWQV9CRUFOPUJvdHRvbSB1cCBKYXZhIGJlYW4gV2ViIFNlcnZpY2UKLUxBQkVMX1RPUF9ET1dOX0pBVkFfQkVBTj1Ub3AgZG93biBKYXZhIGJlYW4gV2ViIFNlcnZpY2UKLUxBQkVMX0NMSUVOVD1DbGllbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjM4ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24ud3NmaW5kZXIiPgotICAgICAgPHdzZmluZGVyCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS53c2ZpbmRlci5XU0ZpbmRlckF4aXMiCi0gICAgICAgICAgICBuYW1lPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyI+Ci0gICAgICA8L3dzZmluZGVyPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gRXh0ZW5zaW9uIHByb3ZpZGluZyB3b3Jrc3BhY2UgV1NETCBkaXNjb3ZlcnkgLS0+ICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciI+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlTG9jYXRvckNhdGVnb3J5Ci0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9DQVRFR09SWV9BWElTIi8+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlTG9jYXRvcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvci5BeGlzV2ViU2VydmljZUxvY2F0b3IiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmF4aXMiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9BWElTIj4KLSAgICAgIDwvd2ViU2VydmljZUxvY2F0b3I+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0KLSAgIDwhLS0gZGVmaW5lIGEgd3NkZCBmaWxlIHR5cGUgZm9yIEF4aXMgV2ViIFNlcnZpY2UgRGVwbG95bWVudCBEZXNjcmlwdG9ycyAtLT4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnRlYW0uY29yZS5maWxlVHlwZXMiPgotICAgICAgPGZpbGVUeXBlcwotICAgICAgICAgICAgdHlwZT0idGV4dCIKLSAgICAgICAgICAgIGV4dGVuc2lvbj0id3NkZCI+Ci0gICAgICA8L2ZpbGVUeXBlcz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tIGRlZmluZSBhIHdzZGQgY29udGVudCB0eXBlIGZvciBBeGlzIFdlYiBTZXJ2aWNlIERlcGxveW1lbnQgRGVzY3JpcHRvcnMgLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4KLSAgICAgIDxjb250ZW50LXR5cGUKLSAgICAgICAgICAgIHByaW9yaXR5PSJoaWdoIgotICAgICAgICAgICAgbmFtZT0iJXhwV1NERENvbnRlbnRUeXBlIgotICAgICAgICAgICAgaWQ9IndzZGRzb3VyY2UiCi0gICAgICAgICAgICBiYXNlLXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0gICAgICAgICAgICBkZWZhdWx0LWNoYXJzZXQ9IlVURi04IgotICAgICAgICAgICAgZmlsZS1leHRlbnNpb25zPSJ3c2RkIiAvPgotICAgPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIAotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLmFudGZpbGVzIj4KLSAgCQk8YW50ZmlsZXMKLSAgICAJCWlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUVG9wSmF2YSIKLSAgICAJCXJ1bnRpbWVpZD0iYXhpcyIKLSAgICAJCXBsdWdpbmxvY2F0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIgotICAgIAkJcGF0aD0iYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMiCi0gICAgCQl3c2dlbnBhdGg9ImFudC9heGlzX3RkamF2YS54bWwiCi0gICAgCQlydW50aW1lbGFiZWw9IiVMQUJFTF9SVU5USU1FX0FYSVMiCi0gICAgCQlzY2VuYXJpb2xhYmVsPSIlTEFCRUxfVE9QX0RPV05fSkFWQV9CRUFOIj4KLSAgCQk8L2FudGZpbGVzPgotICAJCTxhbnRmaWxlcwotICAgIAkJaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlRCVUphdmEiCi0gICAgCQlydW50aW1laWQ9ImF4aXMiCi0gICAgCQlwbHVnaW5sb2NhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZSIKLSAgICAJCXBhdGg9ImFudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzIgotICAgIAkJd3NnZW5wYXRoPSJhbnQvYXhpc19idWphdmEueG1sIgotICAgIAkJcnVudGltZWxhYmVsPSIlTEFCRUxfUlVOVElNRV9BWElTIgotICAgIAkJc2NlbmFyaW9sYWJlbD0iJUxBQkVMX0JPVFRPTV9VUF9KQVZBX0JFQU4iPgotICAJCTwvYW50ZmlsZXM+Ci0gIAkJPGFudGZpbGVzCi0gICAgCQlpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVENsaWVudCIKLSAgICAJCXJ1bnRpbWVpZD0iYXhpcyIKLSAgICAJCXBsdWdpbmxvY2F0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIgotICAgIAkJcGF0aD0iYW50L2F4aXNfY2xpZW50LnByb3BlcnRpZXMiCi0gICAgCQl3c2dlbnBhdGg9ImFudC9heGlzX2NsaWVudC54bWwiCi0gICAgCQlydW50aW1lbGFiZWw9IiVMQUJFTF9SVU5USU1FX0FYSVMiCi0gICAgCQlzY2VuYXJpb2xhYmVsPSIlTEFCRUxfQ0xJRU5UIj4KLSAgCQk8L2FudGZpbGVzPgotICAJPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvQXhpc0NvbnN1bXB0aW9uQ29yZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTgzZmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA0MTIgICAxNzcwMDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGZvciBBeGlzRGVwbG95Q29tbWFuZAotIwotTVNHX0VSUk9SX1BST0pFQ1RfVVJMX1BBUkFNX05PVF9TRVQ9SVdBQjAwNTRFIFdlYiBwcm9qZWN0IFVSTCBmb3IgZGVwbG95bWVudCBvZiBXZWIgc2VydmljZSBpcyBub3Qgc2V0IGluIEF4aXNEZXBsb3lDb21tYW5kCi1NU0dfRVJST1JfREVQTE9ZX0ZJTEVfUEFSQU1fTk9UX1NFVD1JV0FCMDQ4OEUgTG9jYXRpb24gb2YgQXhpcyBkZXBsb3ltZW50IGZpbGUgaXMgbm90IHNldCBpbiBBeGlzRGVwbG95Q29tbWFuZAotTVNHX0VSUk9SX0FYSVNfREVQTE9ZPUlXQUIwNDg5RSBFcnJvciB3aGVuIGRlcGxveWluZyBXZWIgc2VydmljZSB0byBBeGlzIHJ1bnRpbWUKLU1TR19BWElTX0RFUExPWT1EZXBsb3lpbmcgV2ViIHNlcnZpY2UgdG8gQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudAotCi0jCi0jIE1lc3NhZ2VzIGZvciBKYXZhMldTRExDb21tYW5kCi0jCi1NU0dfR0VORVJBVEVfV1NETD1HZW5lcmF0aW5nIFdTREwgZmlsZTogezB9Ci1NU0dfRVJST1JfSkFWQV9XU0RMX0dFTkVSQVRFPUlXQUIwMzk4RSBFcnJvciBpbiBnZW5lcmF0aW5nIFdTREwgZnJvbSBKYXZhOiAKLQotIwotIyBNZXNzYWdlcyBmb3IgV1NETDJKYXZhQ29tbWFuZAotIwotTVNHX1BBUlNJTkdfV1NETD1QYXJzaW5nIFdTREwgZmlsZTogezB9Ci1NU0dfRVJST1JfV1NETF9KQVZBX0dFTkVSQVRFPUlXQUIwMzk5RSBFcnJvciBpbiBnZW5lcmF0aW5nIEphdmEgZnJvbSBXU0RMOiAKLU1TR19FUlJPUl9NT1ZFX1JFU09VUkNFPUlXQUIwNTIzRSBFcnJvciBtb3ZpbmcgcmVzb3VyY2U6IHswfQotTVNHX0VSUk9SX0NSRUFURV9URU1QX0RJUj1FcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5Ci0KLSMKLSMgTWVzc2FnZXMgY29tbW9uIGZvciBhbGwKLSMKLU1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVD1JV0FCMDM5N0UgSmF2YVdTRExQYXJhbSBub3Qgc2V0Ci1NU0dfRVJST1JfRk9MREVSX05PVF9GT1VORD1PdXRwdXQgZm9sZGVyOiB7MH0gd2FzIG5vdCBmb3VuZC4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmRhODk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX1VSTF9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9ERVBMT1lfRklMRV9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BWElTX0RFUExPWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQVhJU19ERVBMT1k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0dFTkVSQVRFX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfV1NETF9HRU5FUkFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfUEFSU0lOR19XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0RMX0pBVkFfR0VORVJBVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9NT1ZFX1JFU09VUkNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DUkVBVEVfVEVNUF9ESVI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5EOwotICAKLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0F4aXNEZXBsb3lDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9BeGlzRGVwbG95Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTBhMWFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0F4aXNEZXBsb3lDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMjI3ICAgMTE5OTY0IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkFkbWluQ2xpZW50OwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy50b29scy5hbnQuYXhpcy5BZG1pbkNsaWVudFRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXJnZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuZmlsdGVycy5TdHJpbmdJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLS8qKgotICogQ29tbWFuZHMgYXJlIGV4ZWN1dGFibGUsIHVuZG9hYmxlLCByZWRvYWJsZSBvYmplY3RzLiBFdmVyeSBDb21tYW5kIGhhcyBhIG5hbWUgYW5kIGEgZGVzY3JpcHRpb24uCi0gKi8KLQotcHVibGljIGNsYXNzIEF4aXNEZXBsb3lDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzL0FkbWluU2VydmljZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX0NPTkZJRyA9ICJzZXJ2ZXItY29uZmlnLndzZGQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotICBwcml2YXRlIFN0cmluZyBwcm9qZWN0XzsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXhpc0RlcGxveUNvbW1hbmQuCi0gICAqIEBwYXJhbSBTdHJpbmcgZGVzY3JpcHRpb24KLSAgICogQHBhcmFtIFN0cmluZyBuYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIEF4aXNEZXBsb3lDb21tYW5kKCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgQXhpc0RlcGxveUNvbW1hbmQoU3RyaW5nIHByb2plY3QgKXsKLQkgIHRoaXMucHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIGlmIChqYXZhV1NETFBhcmFtID09IG51bGwpCi0gICAgeyAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgaWYgKGphdmFXU0RMUGFyYW0uZ2V0UHJvamVjdFVSTCgpID09IG51bGwgfHwgamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkuZXF1YWxzKCIiKSkKLSAgICB7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfVVJMX1BBUkFNX05PVF9TRVQpOwotICAgIH0KLQotICAgIGlmIChqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpID09IG51bGwgfHwgamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKS5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9ERVBMT1lfRklMRV9QQVJBTV9OT1RfU0VUKTsKLSAgICB9Ci0KLSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0FYSVNfREVQTE9ZKTsKLQotICAgIElTdGF0dXMgc3RhdHVzID0gZXhlY3V0ZUFudFRhc2sobW9uaXRvcik7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICB7Ci0gICAgCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgcHJvdGVjdGVkIElTdGF0dXMgZXhlY3V0ZUFudFRhc2soSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotICB7Ci0gICAgZmluYWwgY2xhc3MgRGVwbG95VGFzayBleHRlbmRzIEFkbWluQ2xpZW50VGFzawotICAgIHsKLSAgICAgIHB1YmxpYyBEZXBsb3lUYXNrKCkKLSAgICAgIHsKLQkJc3VwZXIuc2V0UHJvamVjdChuZXcgUHJvamVjdCgpKTsKLQkJc3VwZXIuZ2V0UHJvamVjdCgpLmluaXQoKTsKLQkJc3VwZXIuc2V0VGFza1R5cGUoImF4aXMiKTsgLy8kTk9OLU5MUy0xJAotCQlzdXBlci5zZXRUYXNrTmFtZSgiYXhpcy1hZG1pbiIpOyAvLyROT04tTkxTLTEkCi0JCXN1cGVyLnNldE93bmluZ1RhcmdldChuZXcgVGFyZ2V0KCkpOwotICAgICAgfQotICAgIH0KLQotICAgIERlcGxveVRhc2sgYWRtaW5DbGllbnQgPSBuZXcgRGVwbG95VGFzaygpOwotICAgIFN0cmluZyB1cmwgPSBqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKSArIFNFUlZJQ0VfRVhUOwotICAgIGFkbWluQ2xpZW50LnNldFVybCh1cmwpOwotICAgIGFkbWluQ2xpZW50LnNldFhtbEZpbGUobmV3IEZpbGUoamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKVswXSkpOwotCi0gICAgLy8gU2luY2UgdGhlIGFkbWluIHNlcnZlciBtYXkgbm90IGJlIGF2YWlsYWJsZSByaWdodCBhd2F5IHdlIHdpbGwgdHJ5Ci0gICAgLy8gc2V2ZXJhbCB0aW1lcyB0byBleGVjdXRlIGl0LgotICAgIHRyeQotICAgIHsKLSAgICAgIEJ1aWxkRXhjZXB0aW9uIGxhc3RFeGNlcHRpb24gPSBudWxsOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgMjA7IGluZGV4KysgKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGxhc3RFeGNlcHRpb24gPSBudWxsOwotICAgICAgICAgIGFkbWluQ2xpZW50LmV4ZWN1dGUoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggQnVpbGRFeGNlcHRpb24gZXhjICkKLSAgICAgICAgewotICAgICAgICAgIGxhc3RFeGNlcHRpb24gPSBleGM7Ci0gICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgVGhyZWFkLnNsZWVwKCAyMDAgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIHRocmVhZEV4Y2VwdGlvbiAgKQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIElmIG5vIGV4Y2VwdGlvbiBvY2N1cmVkIHRoZW4gd2Ugc2hvdWxkIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KLSAgICAgICAgaWYoIGxhc3RFeGNlcHRpb24gPT0gbnVsbCApIGJyZWFrOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBJZiBhZnRlciBtYW55IHRyaWVzIHdlIHN0aWxsIGdldCBhbiBleGNlcHRpb24sIHRoZW4gd2Ugd2lsbCByZSB0aHJvdyBpdC4KLSAgICAgIGlmKCBsYXN0RXhjZXB0aW9uICE9IG51bGwgKSB0aHJvdyBsYXN0RXhjZXB0aW9uOwotICAgICAgCi0gICAgICByZXR1cm4gY3JlYXRlQ29uZmlnRmlsZShtb25pdG9yLCB1cmwpOwotICAgIH0KLSAgICBjYXRjaCAoQnVpbGRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGlmIChlLmdldENhdXNlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGUuZ2V0Q2F1c2UoKS50b1N0cmluZygpOwotICAgICAgfQotICAgICAgCi0gICAgICBJU3RhdHVzW10gY2hpbGRTdGF0dXMgPSBuZXcgU3RhdHVzWzFdOwotICAgICAgY2hpbGRTdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggbWVzc2FnZSk7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9BWElTX0RFUExPWSwgY2hpbGRTdGF0dXMpOwotICAgIH0KLSAgfQotCi0gIC8qKiBDcmVhdGVzICdzZXJ2ZXItY29uZmlnLndzZGQnIGluIHRoZSBXZWJDb250ZW50IGZvbGRlciBpbiB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgcHJvamVjdCAKLSAgICogQHBhcmFtIG1vbml0b3IKLSAgICogQHBhcmFtIHVybAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIElTdGF0dXMgY3JlYXRlQ29uZmlnRmlsZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIFN0cmluZyB1cmwpIHsKLQlBZG1pbkNsaWVudCBsaXN0QWRtaW4gPSBuZXcgQWRtaW5DbGllbnQoKTsKLQlTdHJpbmcgY29uZmlnID0gIiI7Ci0gICAgdHJ5IHsKLQkJY29uZmlnID0gbGlzdEFkbWluLnByb2Nlc3MobmV3IFN0cmluZ1tdIHsgIi1sIiArIHVybCwgImxpc3QiIH0pOwotCi0JCUlQYXRoIHdlYkluZlBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aChSZXNvdXJjZXNQbHVnaW4KLQkJCQkJLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKSk7Ci0JCUlQYXRoIHJlbGF0aXZlU2VydmVyQ29uZmlnUGF0aCA9IHdlYkluZlBhdGguYXBwZW5kKFNFUlZFUl9DT05GSUcpOwotCQlJU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gZ2V0RW52aXJvbm1lbnQoKS5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0JCVJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpCi0JCQkJCS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCByZWxhdGl2ZVNlcnZlckNvbmZpZ1BhdGgsCi0JCQkJCW5ldyBTdHJpbmdJbnB1dFN0cmVhbShjb25maWcpLCBtb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0JICAgIGlmIChlLmdldENhdXNlKCkgIT0gbnVsbCkKLQkgICAgewotCSAgICAgICBtZXNzYWdlID0gZS5nZXRDYXVzZSgpLnRvU3RyaW5nKCk7Ci0JICAgIH0KLQkgICAgICAKLQkgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLQkgICAgY2hpbGRTdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggbWVzc2FnZSk7Ci0JICAgIHJldHVybiBTdGF0dXNVdGlscy5tdWx0aVN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0FYSVNfREVQTE9ZLCBjaGlsZFN0YXR1cyk7Ci0JfQotCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0gIHsKLSAgICB0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0dlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0dlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1NWEzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9HZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZDsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnNlcnZlci5BeGlzU2VydmVyOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy50b29scy5hbnQuYXhpcy5BZG1pbkNsaWVudFRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkNsYXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQ29tbWFuZHMgYXJlIGV4ZWN1dGFibGUsIHVuZG9hYmxlLCByZWRvYWJsZSBvYmplY3RzLiBFdmVyeSBDb21tYW5kIGhhcyBhIG5hbWUgYW5kIGEgZGVzY3JpcHRpb24uCi0gKi8KLQotcHVibGljIGNsYXNzIEdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLQotICBwcml2YXRlIFN0cmluZyBwcm9qZWN0TmFtZV87Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBWElTX1NFUlZFUl9DT05GSUdfRklMRSA9ICJheGlzLlNlcnZlckNvbmZpZ0ZpbGUiOwotICAKLSAgSUZvbGRlciBvdXRwdXRSb290OwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kLgotICogQHBhcmFtIFN0cmluZyBwcm9qZWN0TmFtZQotICAgKiAKLSAgICovCi0gIHB1YmxpYyBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kKFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgaWYgKGphdmFXU0RMUGFyYW0uZ2V0UHJvamVjdFVSTCgpID09IG51bGwgfHwgamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkuZXF1YWxzKCIiKSkKLSAgICB7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfVVJMX1BBUkFNX05PVF9TRVQpOwotICAgIH0KLQotICAgIGlmIChqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpID09IG51bGwgfHwgamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKS5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0gICAgICBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0RFUExPWV9GSUxFX1BBUkFNX05PVF9TRVQpOwotICAgIH0KLQotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfQVhJU19ERVBMT1kpOwotCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBleGVjdXRlQWRtaW5UYXNrKCk7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICB7Ci0gICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgIH0gICAgCi0gICAgCi0gICAgc3RhdHVzID0gZXhlY3V0ZUFudFRhc2soKTsKLSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVN0YXR1cyBleGVjdXRlQW50VGFzaygpCi0gIHsKLSAgICBmaW5hbCBjbGFzcyBEZXBsb3lUYXNrIGV4dGVuZHMgQWRtaW5DbGllbnRUYXNrCi0gICAgewotICAgICAgcHVibGljIERlcGxveVRhc2soKQotICAgICAgewotICAgICAgICBzdXBlci5zZXRQcm9qZWN0KG5ldyBQcm9qZWN0KCkpOwotCQlzdXBlci5nZXRQcm9qZWN0KCkuaW5pdCgpOwotCQlzdXBlci5zZXRUYXNrVHlwZSgiYXhpcyIpOyAvLyROT04tTkxTLTEkCi0JCXN1cGVyLnNldFRhc2tOYW1lKCJheGlzLWFkbWluIik7IC8vJE5PTi1OTFMtMSQKLQkJc3VwZXIuc2V0T3duaW5nVGFyZ2V0KG5ldyBUYXJnZXQoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgRGVwbG95VGFzayBhZG1pbkNsaWVudCA9IG5ldyBEZXBsb3lUYXNrKCk7Ci0gICAgU3RyaW5nIHVybCA9IGphdmFXU0RMUGFyYW0uZ2V0UHJvamVjdFVSTCgpICsgQXhpc0RlcGxveUNvbW1hbmQuU0VSVklDRV9FWFQ7Ci0gICAgYWRtaW5DbGllbnQuc2V0VXJsKHVybCk7Ci0gICAgYWRtaW5DbGllbnQuc2V0WG1sRmlsZShuZXcgRmlsZShqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpWzBdKSk7Ci0KLSAgICAvLyBTaW5jZSB0aGUgYWRtaW4gc2VydmVyIG1heSBub3QgYmUgYXZhaWxhYmxlIHJpZ2h0IGF3YXkgd2Ugd2lsbCB0cnkKLSAgICAvLyBzZXZlcmFsIHRpbWVzIHRvIGV4ZWN1dGUgaXQuCi0gICAgdHJ5Ci0gICAgewotICAgICAgQnVpbGRFeGNlcHRpb24gbGFzdEV4Y2VwdGlvbiA9IG51bGw7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCAyMDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgbGFzdEV4Y2VwdGlvbiA9IG51bGw7Ci0gICAgICAgICAgYWRtaW5DbGllbnQuZXhlY3V0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBCdWlsZEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgbGFzdEV4Y2VwdGlvbiA9IGV4YzsKLSAgICAgICAgICAKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoIDIwMCApOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gdGhyZWFkRXhjZXB0aW9uICApCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSWYgbm8gZXhjZXB0aW9uIG9jY3VyZWQgdGhlbiB3ZSBzaG91bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgotICAgICAgICBpZiggbGFzdEV4Y2VwdGlvbiA9PSBudWxsICkgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIElmIGFmdGVyIG1hbnkgdHJpZXMgd2Ugc3RpbGwgZ2V0IGFuIGV4Y2VwdGlvbiwgdGhlbiB3ZSB3aWxsIHJlIHRocm93IGl0LgotICAgICAgaWYoIGxhc3RFeGNlcHRpb24gIT0gbnVsbCApIHRocm93IGxhc3RFeGNlcHRpb247Ci0gICAgfQotICAgIGNhdGNoIChCdWlsZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBTdHJpbmcgbWVzc2FnZSA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgaWYgKGUuZ2V0Q2F1c2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZS5nZXRDYXVzZSgpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElTdGF0dXNbXSBjaGlsZFN0YXR1cyA9IG5ldyBTdGF0dXNbMV07Ci0gICAgICBjaGlsZFN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBtZXNzYWdlKTsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5tdWx0aVN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0FYSVNfREVQTE9ZLCBjaGlsZFN0YXR1cyk7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAKLQotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVN0YXR1cyBleGVjdXRlQWRtaW5UYXNrKCl7Ci0gICAgCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIC8vIGNoZWNrIGlmIHNlcnZlci1jb25maWcud3NkZCBleGlzdHMKLSAgICBJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBKMkVFVXRpbHMuZ2V0VmlydHVhbENvbXBvbmVudCggcHJvamVjdE5hbWVfICk7Ci0gICAgb3V0cHV0Um9vdCA9IEoyRUVVdGlscy5nZXRPdXRwdXRDb250YWluZXJSb290KCBjb21wb25lbnQgKTsKLSAgICBJUGF0aCBwYXRoID0gbmV3IFBhdGgoICJXRUItSU5GIiApLmFwcGVuZCggInNlcnZlci1jb25maWcud3NkZCIgKTsgICAgCi0gICAgSUZpbGUgZGVzY3JpcHRvckZpbGUgPSBvdXRwdXRSb290LmdldEZpbGUoIHBhdGggKTsKLSAgICAKLSAgICBpZiAoIWRlc2NyaXB0b3JGaWxlLmV4aXN0cygpKXsKLSAgICAgIHN0YXR1cyA9IGNyZWF0ZVNlcnZlckNvbmZpZ0ZpbGUoKTsKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICAvLyBjaGVjayBpZiBkZXBsb3kud3NkZCBleGlzdHMKLSAgICBTdHJpbmcgZGVwbG95V1NERCA9IGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKClbMF07Ci0gICAgRmlsZSBkZXBsb3lGaWxlID0gbmV3IEZpbGUoZGVwbG95V1NERCk7Ci0gICAgaWYgKGRlcGxveUZpbGU9PW51bGwgfHwgIWRlcGxveUZpbGUuZXhpc3RzKCkpewotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIC8vIGdldCBDbGFzc3BhdGgKLSAgICAgIFN0cmluZyBqYXJzQ1AgPSBuZXcgU3RyaW5nKCk7Ci0gICAgICAvLyBjbGFzc2VzIGRpcgotICAgICAgSVBhdGggY2xhc3Nlc1BhdGggPSBuZXcgUGF0aCgiV0VCLUlORiIpLmFwcGVuZCgiY2xhc3NlcyIpOwotICAgICAgSUZpbGUgY2xhc3Nlc0RpciA9IG91dHB1dFJvb3QuZ2V0RmlsZShjbGFzc2VzUGF0aCk7Ci0gICAgICBqYXJzQ1AgPSAiXCIiK2NsYXNzZXNEaXIuZ2V0UmF3TG9jYXRpb24oKS50b09TU3RyaW5nKCkrIlwiIjsKLSAgICAgIAotICAgICAgLy8gbGliIEpBUnMKLSAgICAgIElQYXRoIGxpYlBhdGggPSBuZXcgUGF0aCgiV0VCLUlORiIpLmFwcGVuZCgibGliIik7Ci0gICAgICBJRmlsZSBsaWJFbnRyeSA9IG91dHB1dFJvb3QuZ2V0RmlsZShsaWJQYXRoKTsKLSAgICAgIElGb2xkZXIgbGliRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UobGliRW50cnkuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgICBJUmVzb3VyY2VbXSBKQVJmaWxlcyA9IGxpYkZvbGRlci5tZW1iZXJzKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxKQVJmaWxlcy5sZW5ndGg7aSsrKXsKLSAgICAgICAgSVJlc291cmNlIHJlcyA9IEpBUmZpbGVzW2ldOwotICAgICAgICBpZiAocmVzLmdldEZpbGVFeHRlbnNpb24oKS5lcXVhbHMoImphciIpKXsKLSAgICAgICAgICBqYXJzQ1AgPSBqYXJzQ1AgKyAiO1wiIisgcmVzLmdldFJhd0xvY2F0aW9uKCkudG9PU1N0cmluZygpKyJcIiI7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gZm9ybSBhbmQgcnVuIHV0aWxzLkFkbWluIGNvbW1hbmQKLSAgICAgIFN0cmluZyBhZG1pbkNvbW1hbmQgPSBuZXcgU3RyaW5nKCJqYXZhIC1EYXhpcy5TZXJ2ZXJDb25maWdGaWxlPSIrIGRlc2NyaXB0b3JGaWxlLmdldFJhd0xvY2F0aW9uKCkudG9PU1N0cmluZygpIAotICAgICAgICAgICsiIC1jcCAiK2phcnNDUCsiIG9yZy5hcGFjaGUuYXhpcy51dGlscy5BZG1pbiBzZXJ2ZXIgIitkZXBsb3lGaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7Ci0gICAgICBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKGFkbWluQ29tbWFuZCk7Ci0KLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgU3lzdGVtLnNldFByb3BlcnR5KEFYSVNfU0VSVkVSX0NPTkZJR19GSUxFLCJzZXJ2ZXItY29uaWZnLndzZGQiKTsgICAgICAKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBTdHJpbmcgbWVzc2FnZSA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgaWYgKGUuZ2V0Q2F1c2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZS5nZXRDYXVzZSgpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElTdGF0dXNbXSBjaGlsZFN0YXR1cyA9IG5ldyBTdGF0dXNbMV07Ci0gICAgICBjaGlsZFN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBtZXNzYWdlKTsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5tdWx0aVN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0FYSVNfREVQTE9ZLCBjaGlsZFN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIC8qKnQKLSAgICogQ3JlYXRlcyB0aGUgaW5pdGlhbCBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSBmcm9tIGEgdGVtcGxhdGUgaW4gQXhpcwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIElTdGF0dXMgY3JlYXRlU2VydmVyQ29uZmlnRmlsZSgpewotICAgIHRyeXsKLQotICAgICAgLy8gc2VydmVyLWNvbmZpZy53c2RkIGZpbGUKLSAgICAgIElQYXRoICAgICAgICAgICAgIHBhdGggICAgICAgICAgID0gbmV3IFBhdGgoICJXRUItSU5GIiApLmFwcGVuZCggInNlcnZlci1jb25maWcud3NkZCIgKTsgICAgCi0gICAgICBJRmlsZSAgICAgICAgICAgICBkZXNjcmlwdG9yRmlsZSA9IG91dHB1dFJvb3QuZ2V0RmlsZSggcGF0aCApOyAgICAgIAotCi0gICAgICAvLyBjcmVhdGUgdGhlIGluaXRpYWwgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUKLSAgICAgIEF4aXNFbmdpbmUgcHJlRW5naW5lID0gbmV3IEF4aXNTZXJ2ZXIoKTsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gQ2xhc3NVdGlscy5nZXRSZXNvdXJjZUFzU3RyZWFtKHByZUVuZ2luZS5nZXRDbGFzcygpLCAic2VydmVyLWNvbmZpZy53c2RkIik7Ci0gICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc2NyaXB0b3JGaWxlLmdldFJhd0xvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLSAgICAgIFJlc291cmNlVXRpbHMuY29weVN0cmVhbShpcywgZm9zKTsKLSAgICAgIGZvcy5jbG9zZSgpOwotICAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLQotICAgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLSAgICAgIGNoaWxkU3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UpOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0gIHsKLSAgICB0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0phdmEyV1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0phdmEyV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxYWJlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9KYXZhMldTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTA2ICAgMTIxMTk5IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIE34bGxlcgotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDgxMyAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnRvb2xzLmFudC53c2RsLkphdmEyV3NkbEFudFRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnRvb2xzLmFudC53c2RsLk5hbWVzcGFjZU1hcHBpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LkF4aXNFbWl0dGVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJEZWZhdWx0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQ29tbWFuZHMgYXJlIGV4ZWN1dGFibGUsIHVuZG9hYmxlLCByZWRvYWJsZSBvYmplY3RzLgotICogRXZlcnkgQ29tbWFuZCBoYXMgYSBuYW1lIGFuZCBhIGRlc2NyaXB0aW9uLgotICovCi0KLXB1YmxpYyBjbGFzcyBKYXZhMldTRExDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBGaWxlIHRlbXBPdXRwdXRXc2RsRmlsZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBURU1QID0gInRlbXAiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NETF9FWFQgPSAiLndzZGwiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgSmF2YTJXU0RMQ29tbWFuZCgpIHsKLQl9CQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBKYXZhMldTRExDb21tYW5kLgotCSAqLwotCXB1YmxpYyBKYXZhMldTRExDb21tYW5kKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5qYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJSVN0YXR1cyBzdGF0dXM7Ci0JCWlmIChqYXZhV1NETFBhcmFtXyA9PSBudWxsKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCi0JCWlmIChqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19HRU5FUkFURV9XU0RMLCBqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpICkpOwotCi0JCXJldHVybiBleGVjdXRlQW50VGFzayhlbnZpcm9ubWVudCwgbW9uaXRvcik7Ci0JfQotCi0JcHJvdGVjdGVkIElTdGF0dXMgZXhlY3V0ZUFudFRhc2soSUVudmlyb25tZW50IGVudmlyb25tZW50LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQotCQlmaW5hbCBjbGFzcyBFbWl0dGVyIGV4dGVuZHMgSmF2YTJXc2RsQW50VGFzayB7Ci0JCQlwdWJsaWMgRW1pdHRlcigpIHsKLQkJCQlzdXBlci5zZXRQcm9qZWN0KG5ldyBQcm9qZWN0KCkpOwotCQkJCXN1cGVyLmdldFByb2plY3QoKS5pbml0KCk7Ci0JCQkJc3VwZXIuc2V0VGFza1R5cGUoImF4aXMiKTsgLy8kTk9OLU5MUy0xJAotCQkJCXN1cGVyLnNldFRhc2tOYW1lKCJheGlzLWphdmEyd3NkbCIpOyAvLyROT04tTkxTLTEkCi0JCQkJc3VwZXIuc2V0T3duaW5nVGFyZ2V0KG5ldyBUYXJnZXQoKSk7Ci0JCQl9Ci0JCX0KLQotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCUlMb2cgZW52TG9nID0gZW52aXJvbm1lbnQuZ2V0TG9nKCk7Ci0JCUVtaXR0ZXIgZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7Ci0JCWVtaXR0ZXIuY3JlYXRlQ2xhc3NwYXRoKCkuc2V0UGF0aChqYXZhV1NETFBhcmFtXy5nZXRDbGFzc3BhdGgoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDA4LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiQ2xhc3MgUGF0aCA9ICIrIGphdmFXU0RMUGFyYW1fLmdldENsYXNzcGF0aCgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0UG9ydFR5cGVOYW1lKGphdmFXU0RMUGFyYW1fLmdldFBvcnRUeXBlTmFtZSgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMDksIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJQb3J0IFR5cGUgTmFtZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldFBvcnRUeXBlTmFtZSgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0U2VydmljZUVsZW1lbnROYW1lKGphdmFXU0RMUGFyYW1fLmdldFNlcnZpY2VOYW1lKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxMCwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIlNlcnZpY2UgTmFtZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldFNlcnZpY2VOYW1lKCkpOwotCQkKLQkJZW1pdHRlci5zZXRMb2NhdGlvbihqYXZhV1NETFBhcmFtXy5nZXRVcmxMb2NhdGlvbigpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTEsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJVUkwgTG9jYXRpb24gPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRVcmxMb2NhdGlvbigpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0TWV0aG9kcyhqYXZhV1NETFBhcmFtXy5nZXRNZXRob2RTdHJpbmcoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDEyLCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiTWV0aG9kcyA9ICIrIGphdmFXU0RMUGFyYW1fLmdldE1ldGhvZFN0cmluZygpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0U3R5bGUoamF2YVdTRExQYXJhbV8uZ2V0U3R5bGUoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDEzLCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiU3R5bGUgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRTdHlsZSgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0VXNlKGphdmFXU0RMUGFyYW1fLmdldFVzZSgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTQsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJVc2UgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRVc2UoKSk7Ci0JCQkJCi0JCS8vIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHVzZSBhcyBvdXRwdXQgZGlyZWN0b3J5IGZvciBqYXZhMndzZGwKLQkJSVBhdGggcGx1Z2luU3RhdGVMb2MgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKTsKLQkJRmlsZSB0ZW1wRGlyID0gbmV3IEZpbGUocGx1Z2luU3RhdGVMb2MudG9TdHJpbmcoKSk7Ci0JCUZpbGUgbmV3VGVtcEZpbGUgPSBudWxsOwotCQl0cnkgewotCQkJbmV3VGVtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKFRFTVAsIFdTRExfRVhULCB0ZW1wRGlyKTsKLQkJCXRlbXBPdXRwdXRXc2RsRmlsZSA9IG5ld1RlbXBGaWxlOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJdGVtcE91dHB1dFdzZGxGaWxlID0gbmV3IEZpbGUgKHBsdWdpblN0YXRlTG9jLmFwcGVuZChURU1QK1dTRExfRVhUKS50b1N0cmluZygpKTsKLQkJfQotCi0JCWVtaXR0ZXIuc2V0T3V0cHV0KHRlbXBPdXRwdXRXc2RsRmlsZSk7Ci0JCQotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxNSwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIldTREwgTG9jYXRpb24gPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRPdXRwdXRXc2RsTG9jYXRpb24oKSk7Ci0JCQotCQllbWl0dGVyLnNldE5hbWVzcGFjZShqYXZhV1NETFBhcmFtXy5nZXROYW1lc3BhY2UoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDE2LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiTmFtZSBTcGFjZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldE5hbWVzcGFjZSgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0Q2xhc3NOYW1lKGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxNywgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIkJlYW4gbmFtZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCkpOwotCQkKLQkJZW1pdHRlci5zZXRJbXBsQ2xhc3MoamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0JCQotCSAgICBBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QXhpc0VtaXR0ZXJDb250ZXh0KCk7Ci0JICAgIAotCSAgICBpZiAoY29udGV4dC5pc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkgIT0gQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRVc2VJbmhlcml0ZWRNZXRob2RzRGVmYXVsdCgpKQotCSAgICB7Ci0JICAgIAllbWl0dGVyLnNldFVzZUluaGVyaXRlZE1ldGhvZHMoY29udGV4dC5pc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkpOwotCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwOTksIHRoaXMsICJleGVjdXRlQW50VGFzayIsICIgc2V0IFVzZUluaGVyaXRlZE1ldGhvZHMgOiAiICsgY29udGV4dC5pc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkgKTsKLQkgICAgfQotCQkKLQkJSGFzaE1hcCBtYXBwaW5ncyA9IGphdmFXU0RMUGFyYW1fLmdldE1hcHBpbmdzKCk7Ci0JCWlmKG1hcHBpbmdzICE9IG51bGwpewotCQkJSXRlcmF0b3Iga2V5cyA9IG1hcHBpbmdzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZShrZXlzLmhhc05leHQoKSl7Ci0JCQkJU3RyaW5nIHBha2FnZSA9IChTdHJpbmcpa2V5cy5uZXh0KCk7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IChTdHJpbmcpbWFwcGluZ3MuZ2V0KHBha2FnZSk7Ci0JCQkJTmFtZXNwYWNlTWFwcGluZyBtYXAgPSBuZXcgTmFtZXNwYWNlTWFwcGluZygpOwotCQkJCW1hcC5zZXRQYWNrYWdlKHBha2FnZSk7Ci0JCQkJbWFwLnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotCQkJCWVtaXR0ZXIuYWRkTWFwcGluZyhtYXApOwkJCi0JCQl9Ci0JCX0KLQkJCi0JCi0JCXRyeSB7Ci0JCQllbWl0dGVyLmV4ZWN1dGUoKTsKLQkJCXN0YXR1cyA9IG1vdmVHZW5lcmF0ZWRXU0RMKGVudmlyb25tZW50LCBtb25pdG9yKTsKLQkJfSBjYXRjaCAoQnVpbGRFeGNlcHRpb24gZSkgewotCQkJZW52TG9nLmxvZyhJTG9nLkVSUk9SLCA1MDE4LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCBlKTsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotCQkJQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfR0VORVJBVEUgKyAiICIgLy8kTk9OLU5MUy0xJAotCQkJK2UuZ2V0Q2F1c2UoKS50b1N0cmluZygpLCBlLmdldENhdXNlKCkpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCX0gZmluYWxseSB7Ci0JCWlmICh0ZW1wT3V0cHV0V3NkbEZpbGUuZXhpc3RzKCkpIHsKLQkJCXRlbXBPdXRwdXRXc2RsRmlsZS5kZWxldGUoKTsKLQkJfQotCX0KLQkJcmV0dXJuIHN0YXR1czsKLQotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBtb3ZlR2VuZXJhdGVkV1NETChJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlGaWxlSW5wdXRTdHJlYW0gZmluU3RyZWFtID0gbnVsbDsKLQkJCi0gICAgUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgICAgPSAoKEJhc2VFY2xpcHNlRW52aXJvbm1lbnQpZW52aXJvbm1lbnQpLmdldFJlc291cmNlQ29udGV4dCgpOyAgICAgICAgCi0JCUlTdGF0dXNIYW5kbGVyICBzdGF0dXNIYW5kbGVyID0gZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpOwotCQkKLQkJU3RyaW5nIG91dHB1dFdzZGxMb2NhdGlvbiA9IGphdmFXU0RMUGFyYW1fLmdldE91dHB1dFdzZGxMb2NhdGlvbigpOwotCQlJUGF0aCB0YXJnZXRQYXRoID0gbmV3IFBhdGgob3V0cHV0V3NkbExvY2F0aW9uKTsKLQkJdHJ5IHsKLQkJCWZpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0odGVtcE91dHB1dFdzZGxGaWxlKTsKLQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCUZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGVBdExvY2F0aW9uKGNvbnRleHQsIHRhcmdldFBhdGgubWFrZUFic29sdXRlKCksIGZpblN0cmVhbSwKLQkJCQkJCW1vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9NT1ZFX1JFU09VUkNFLG5ldyBTdHJpbmdbXXtlLmdldExvY2FsaXplZE1lc3NhZ2UoKX0pLCBlKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQl9IGZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpZiAoZmluU3RyZWFtICE9IG51bGwpIHsKLQkJCQkJZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotCXB1YmxpYyBTdGF0dXMgdW5kbyhJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0YXR1cyByZWRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEByZXR1cm4gSmF2YVdTRExQYXJhbWV0ZXIKLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW1fOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbV8gPSBqYXZhV1NETFBhcm07Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0JewotCSAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZ2V0SmF2YVdTRExQYXJhbSgpLmdldE91dHB1dFdzZGxMb2NhdGlvbigpKTsgCi0JICAgIFN0cmluZyB1cmwgPSAiIjsKLQkJICB0cnkgewotCSAgICAJdXJsID0gZmlsZS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0JICAgIH0KLQkJICBjYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKXt9Ci0JCXJldHVybiB1cmw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvV1NETDJKYXZhQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvV1NETDJKYXZhQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzU3NGIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL1dTREwySmF2YUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MDQwNCAgIDEzNDc5MSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwODEzICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwOTI3ICAgMjA0NjQ5IGtlbHZpbmhjQGNhLmlibS5jb20gLSBLZWx2aW4gQ2hldW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy53c2RsLnRvSmF2YS5FbWl0dGVyOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy53c2RsLnRvSmF2YS5HZW5lcmF0ZWRGaWxlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckRlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VFY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETDJKYXZhQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFUExPWV9UWVBFID0gImRlcGxveSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBVTkRFUExPWV9UWVBFID0gInVuZGVwbG95IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFRFTVAgPSAidGVtcCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQlwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkOwotCXByaXZhdGUgTGlzdCBkZXBsb3lGaWxlczsKLQlwcml2YXRlIExpc3QgamF2YUZpbGVzOwotCXByaXZhdGUgRmlsZSB0ZW1wT3V0cHV0RmlsZTsKLQotCXB1YmxpYyBXU0RMMkphdmFDb21tYW5kKCkgewotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJSUxvZyBlbnZMb2cgPSBlbnZpcm9ubWVudC5nZXRMb2coKTsKLQkJSVN0YXR1cyBzdGF0dXM7Ci0JCWlmIChqYXZhV1NETFBhcmFtID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotCQkJCQlBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQkKLQkJaWYgKHdzZGxVUkkgIT0gbnVsbCkgLy9ib3R0b20gdXAgY2FzZSBoYXMgYWxyZWFkeSBoYXMgdGhlIGNvcnJlY3QgV1NETCBvbiBqYXZhV1NETFBhcmFtCi0JCXsKLQkJCWphdmFXU0RMUGFyYW0uc2V0SW5wdXRXc2RsTG9jYXRpb24od3NkbFVSSSk7Ci0JCX0KLQkJamF2YVdTRExQYXJhbS5zZXRIVFRQVXNlcm5hbWUoaHR0cEJhc2ljQXV0aFVzZXJuYW1lKTsKLQkJamF2YVdTRExQYXJhbS5zZXRIVFRQUGFzc3dvcmQoaHR0cEJhc2ljQXV0aFBhc3N3b3JkKTsKLQkJCi0JCUVtaXR0ZXIgd3NkbDJKYXZhID0gbmV3IEVtaXR0ZXIoKTsKLQkJaWYgKGVudkxvZy5pc0VuYWJsZWQoImVtaXR0ZXIiKSkgewotCQkJd3NkbDJKYXZhLnNldFZlcmJvc2UodHJ1ZSk7Ci0JCX0gZWxzZSB7Ci0JCQl3c2RsMkphdmEuc2V0VmVyYm9zZShmYWxzZSk7Ci0JCX0KLQkJYm9vbGVhbiBzZXJ2ZXJTaWRlID0gamF2YVdTRExQYXJhbS5nZXRTZXJ2ZXJTaWRlKCkgPT0gSmF2YVdTRExQYXJhbWV0ZXIuU0VSVkVSX1NJREVfQkVBTjsKLQkJd3NkbDJKYXZhLnNldFNlcnZlclNpZGUoc2VydmVyU2lkZSk7Ci0JCWlmIChzZXJ2ZXJTaWRlKSB7Ci0JCQl3c2RsMkphdmEuc2V0U2tlbGV0b25XYW50ZWQoamF2YVdTRExQYXJhbS5pc1NrZWxldG9uRGVwbG95KCkpOwotCQl9Ci0JCQotCQkvLyBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB1c2UgYXMgb3V0cHV0IGRpcmVjdG9yeSBmb3Igd3NkbDJqYXZhCi0JCXRlbXBPdXRwdXRGaWxlID0gY3JlYXRlVGVtcERpcigpOwotCQl3c2RsMkphdmEuc2V0T3V0cHV0RGlyKHRlbXBPdXRwdXRGaWxlLnRvU3RyaW5nKCkpOwotCQkKLQkJdHJ5IHsKLQkJCWlmIChqYXZhV1NETFBhcmFtLmlzTWV0YUluZk9ubHkoKSkgewotCQkJCS8vIGZvciB0aGUgY2FzZSBKYXZhMldTREwtV1NETDJKYXZhCi0JCQkJSGFzaE1hcCBwY2sybnNNYXAgPSBqYXZhV1NETFBhcmFtLmdldE1hcHBpbmdzKCk7Ci0JCQkJaWYgKHBjazJuc01hcCAhPSBudWxsKSB7Ci0JCQkJCUhhc2hNYXAgbnMycGNrTWFwID0gbmV3IEhhc2hNYXAoKTsKLQkJCQkJSXRlcmF0b3Iga2V5cyA9IHBjazJuc01hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQkJCQl3aGlsZSAoa2V5cy5oYXNOZXh0KCkpIHsKLQkJCQkJCVN0cmluZyBwYWthZ2UgPSAoU3RyaW5nKSBrZXlzLm5leHQoKTsKLQkJCQkJCVN0cmluZyBuYW1lc3BhY2UgPSAoU3RyaW5nKSBwY2sybnNNYXAuZ2V0KHBha2FnZSk7Ci0JCQkJCQluczJwY2tNYXAucHV0KG5hbWVzcGFjZSwgcGFrYWdlKTsKLQkJCQkJfQotCQkJCQl3c2RsMkphdmEuc2V0TmFtZXNwYWNlTWFwKG5zMnBja01hcCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvLyAgZm9yIHRoZSBjYXNlIFdTREwySmF2YQkJCQotCQkJCWlmIChqYXZhV1NETFBhcmFtLmdldE1hcHBpbmdzKCkgIT0gbnVsbCkgewotCQkJCQl3c2RsMkphdmEuc2V0TmFtZXNwYWNlTWFwKGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKSk7Ci0JCQkJfQotCQkJfQotCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTksIHRoaXMsICJleGVjdXRlIiwgIkphdmEgb3V0cHV0ID0gIiArIGphdmFXU0RMUGFyYW0uZ2V0SmF2YU91dHB1dCgpKTsKLQkJCWlmIChqYXZhV1NETFBhcmFtLmdldEhUVFBQYXNzd29yZCgpICE9IG51bGwpIHsKLQkJCQl3c2RsMkphdmEuc2V0UGFzc3dvcmQoamF2YVdTRExQYXJhbS5nZXRIVFRQUGFzc3dvcmQoKSk7Ci0JCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwODEsIHRoaXMsICJleGVjdXRlIiwgInBhc3N3b3JkOiAiICsgamF2YVdTRExQYXJhbS5nZXRIVFRQUGFzc3dvcmQoKSk7Ci0JCQl9Ci0JCQlpZiAoamF2YVdTRExQYXJhbS5nZXRIVFRQVXNlcm5hbWUoKSAhPSBudWxsKSB7Ci0JCQkJd3NkbDJKYXZhLnNldFVzZXJuYW1lKGphdmFXU0RMUGFyYW0uZ2V0SFRUUFVzZXJuYW1lKCkpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDgyLCB0aGlzLCAiZXhlY3V0ZSIsICJ1c2VybmFtZTogIiArIGphdmFXU0RMUGFyYW0uZ2V0SFRUUFVzZXJuYW1lKCkpOwotCQkJfQotCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMjAsIHRoaXMsICJleGVjdXRlIiwgIldTREwgTG9jYXRpb24gPSAiICsgamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpKTsKLQkJCQotCQkJLy8gSWYgdGltZW91dCBpcyBub3Qgc2V0LCB0aGUgZGVmYXVsdCB0aW1lb3V0IGZvciB3c2RsMmphdmEgaXMgNDUgc2Vjb25kcy4gIAotCQkJLy8gVGhlIHVzZXIgY2FuIGNoYW5nZSB0aGUgdGltZW91dCB2YWx1ZSBieSBzZXR0aW5nIAotCQkJLy8gIi1EQXhpc1dzZGwySmF2YVRpbWVvdXQ9PHRpbWVvdXRfdmFsdWVfaW5fbWlsbGlzZWNvbmRzPiIgYXMgVk0gYXJndW1lbnQKLQkJCS8vIHdoZW4gc3RhcnRpbmcgdGhlIEVjbGlwc2Ugd29ya2JlbmNoLgotCQkJLy8KLQkJCS8vIEZvciBleGFtcGxlLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gc3RhcnQgdGhlIEVjbGlwc2Ugd29ya2JlbmNoIAotCQkJLy8gaW4gb3JkZXIgdG8gc2V0IHRoZSBBeGlzIFdTREwgdG8gSmF2YSBlbWl0dGVyIHRpbWVvdXQgdG8gNjAgc2Vjb25kczoKLQkJCS8vCi0JCQkvLyAJCWVjbGlwc2UgLXZtYXJncyAiLURBeGlzV3NkbDJKYXZhVGltZW91dD02MDAwMCIKLQkJCS8vCi0JCQkvLyBXaGVuIEF4aXNXc2RsMkphdmFUaW1lb3V0IGlzIHNldCwgdGhlIEF4aXMgZW1pdHRlciBwcmVmZXJlbmNlIHBhZ2UgdGltZW91dCBzZXR0aW5nIGlzIGlnbm9yZWQKLQkJICAgIEF4aXNFbWl0dGVyQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRBeGlzRW1pdHRlckNvbnRleHQoKTsKLQkJCVN0cmluZyB3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIkF4aXNXc2RsMkphdmFUaW1lb3V0Iik7Ci0JCQlsb25nIHRpbWVvdXQ7Ci0JCQlpZiAod3NkbDJKYXZhVGltZW91dFByb3BlcnR5ICE9IG51bGwpIHsKLQkJCQl0aW1lb3V0ID0gbmV3IEludGVnZXIod3NkbDJKYXZhVGltZW91dFByb3BlcnR5KS5sb25nVmFsdWUoKTsKLQkJCQl3c2RsMkphdmEuc2V0VGltZW91dCh0aW1lb3V0KTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTA5MSwgdGhpcywgImV4ZWN1dGUiLCAiQXhpc1dzZGwySmF2YVRpbWVvdXQgPSAiICsgdGltZW91dCk7CQkJCQotCQkJfQotCQkJZWxzZSBpZihjb250ZXh0LmdldFRpbWVPdXQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCkpCi0JCQl7Ci0JCQkJdGltZW91dCA9IGNvbnRleHQuZ2V0VGltZU91dCgpID09IC0xID8gLTEgOiBjb250ZXh0LmdldFRpbWVPdXQoKSogMTAwMDsgCi0JCQkJd3NkbDJKYXZhLnNldFRpbWVvdXQodGltZW91dCk7Ci0JCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUxMDAsIHRoaXMsICJleGVjdXRlIiwgIlRpbWVvdXQgPSAiICsgdGltZW91dCk7Ci0JCQl9Ci0JCSAgICBpZiAoY29udGV4dC5nZXREZXBsb3lTY29wZVR5cGUoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldERlcGxveVNjb3BlRGVmYXVsdCgpKQotCQkgICAgewotCQkgICAgCXN3aXRjaCAoY29udGV4dC5nZXREZXBsb3lTY29wZVR5cGUoKSkKLQkJICAgIAl7Ci0JCSAgICAJCWNhc2UgQXhpc0VtaXR0ZXJDb250ZXh0LkRFUExPWV9TQ09QRV9UWVBFX0FQUExJQ0FUSU9OOgotCQkgICAgCQkJd3NkbDJKYXZhLnNldFNjb3BlKFNjb3BlLkFQUExJQ0FUSU9OKTsKLQkJCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTAxLCB0aGlzLCAiZXhlY3V0ZSIsICIgRGVwbG95IFNjb3BlOiBBcHBsaWNhdGlvbiIgKTsKLQkJICAgIAkJCWJyZWFrOwotCQkgICAgCQljYXNlIEF4aXNFbWl0dGVyQ29udGV4dC5ERVBMT1lfU0NPUEVfVFlQRV9SRVFVRVNUOgotCQkgICAgCQkJd3NkbDJKYXZhLnNldFNjb3BlKFNjb3BlLlJFUVVFU1QpOwotCQkJCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUxMDIsIHRoaXMsICJleGVjdXRlIiwgIiBEZXBsb3kgU2NvcGU6IFJlcXVlc3QiICk7Ci0JCSAgICAJCQlicmVhazsKLQkJICAgIAkJY2FzZSBBeGlzRW1pdHRlckNvbnRleHQuREVQTE9ZX1NDT1BFX1RZUEVfU0VTU1RJT046Ci0JCSAgICAJCQl3c2RsMkphdmEuc2V0U2NvcGUoU2NvcGUuU0VTU0lPTik7Ci0JCQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwMywgdGhpcywgImV4ZWN1dGUiLCAiIERlcGxveSBTY29wZTogU2Vzc2lvbiIgKTsKLQkJICAgIAkJCWJyZWFrOwotCQkgICAgCQlkZWZhdWx0OgotCQkgICAgCX0KLQkJICAgIH0KLQkJICAgIAotCQkgICAgaWYgKGNvbnRleHQuaXNBbGxXYW50ZWRFbmFibGVkKCkgIT0gQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRBbGxXYW50ZWREZWZhdWx0KCkpCi0JCSAgICB7Ci0JCSAgICAJd3NkbDJKYXZhLnNldEFsbFdhbnRlZChjb250ZXh0LmlzQWxsV2FudGVkRW5hYmxlZCgpKTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwNCwgdGhpcywgImV4ZWN1dGUiLCAiIHNldCBBbGxXYW50ZWQgOiAiICsgY29udGV4dC5pc0FsbFdhbnRlZEVuYWJsZWQoKSApOwotCQkgICAgfQotCi0JCSAgICBpZiAoY29udGV4dC5pc0hlbHBlcldhbnRlZEVuYWJsZWQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldEhlbHBlcldhbnRlZERlZmF1bHQoKSkKLQkJICAgIHsKLQkJICAgIAl3c2RsMkphdmEuc2V0SGVscGVyV2FudGVkKGNvbnRleHQuaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTA1LCB0aGlzLCAiZXhlY3V0ZSIsICIgc2V0IEhlbHBlcldhbnRlZCA6ICIgKyBjb250ZXh0LmlzSGVscGVyV2FudGVkRW5hYmxlZCgpICk7Ci0JCQl9Ci0JCSAgICBpZiAoY29udGV4dC5pc1dyYXBBcnJheXNFbmFibGVkKCkgIT0gQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRXcmFwQXJyYXlzRGVmYXVsdCgpKQotCQkgICAgewotCQkgICAgCXdzZGwySmF2YS5zZXRXcmFwQXJyYXlzKGNvbnRleHQuaXNXcmFwQXJyYXlzRW5hYmxlZCgpKTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwNiwgdGhpcywgImV4ZWN1dGUiLCAiIHNldCBXcmFwQXJyYXlzIDogIiArIGNvbnRleHQuaXNXcmFwQXJyYXlzRW5hYmxlZCgpICk7Ci0JCSAgICB9Ci0JCQkKLQkJCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfUEFSU0lOR19XU0RMLCBqYXZhV1NETFBhcmFtLmdldElucHV0V3NkbExvY2F0aW9uKCkgKSApOwotCQkJCi0JCQl3c2RsMkphdmEucnVuKGphdmFXU0RMUGFyYW0uZ2V0SW5wdXRXc2RsTG9jYXRpb24oKSk7Ci0JCQkKLQkJCWphdmFGaWxlcyA9IHdzZGwySmF2YS5nZXRHZW5lcmF0ZWRGaWxlTmFtZXMoKTsKLQkJCQotCQkJZGVwbG95RmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlpZiAoc2VydmVyU2lkZSkgewotCQkJCS8vIHNldCBkZXBsb3ltZW50IGZpbGVzCi0JCQkJTGlzdCBkZXBsb3ltZW50RmlsZXMxID0gd3NkbDJKYXZhLmdldEdlbmVyYXRlZEZpbGVJbmZvKCkuZmluZFR5cGUoREVQTE9ZX1RZUEUpOwotCQkJCUxpc3QgZGVwbG95bWVudEZpbGVzMiA9IHdzZGwySmF2YS5nZXRHZW5lcmF0ZWRGaWxlSW5mbygpLmZpbmRUeXBlKFVOREVQTE9ZX1RZUEUpOwotCQkJCWlmIChkZXBsb3ltZW50RmlsZXMxICE9IG51bGwgJiYgZGVwbG95bWVudEZpbGVzMiAhPSBudWxsKSB7Ci0JCQkJCWRlcGxveW1lbnRGaWxlczEuYWRkQWxsKGRlcGxveW1lbnRGaWxlczIpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGRlcGxveW1lbnRGaWxlczEuc2l6ZSgpOyBpKyspIHsKLQkJCQkJCUdlbmVyYXRlZEZpbGVJbmZvLkVudHJ5IGVudHJ5ID0gKEdlbmVyYXRlZEZpbGVJbmZvLkVudHJ5KSBkZXBsb3ltZW50RmlsZXMxLmdldChpKTsKLQkJCQkJCWRlcGxveUZpbGVzLmFkZChlbnRyeS5maWxlTmFtZSk7Ci0JCQkJCX0KLQkJCQl9CQotCQkJCWphdmFGaWxlcy5yZW1vdmVBbGwoZGVwbG95RmlsZXMpOwotCQkJfQotCQkJCi0JCQlzdGF0dXMgPSBtb3ZlR2VuZXJhdGVkRmlsZXMoZW52aXJvbm1lbnQsIG1vbml0b3IpOwotCQkJCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllbnZMb2cubG9nKElMb2cuRVJST1IsIDUwMjEsIHRoaXMsICJleGVjdXRlIiwgZSk7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCQkJQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9XU0RMX0pBVkFfR0VORVJBVEUgKyAiICIgLy8kTk9OLU5MUy0xJAotCQkJCQkrIGUudG9TdHJpbmcoKSwgZSk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWRlbGV0ZURpcih0ZW1wT3V0cHV0RmlsZSk7IAkJCQotCQl9Ci0JCXJldHVybiBzdGF0dXM7CQotCX0KLQkgIAotCXB1YmxpYyBJU3RhdHVzIG1vdmVHZW5lcmF0ZWRGaWxlcyggSUVudmlyb25tZW50IGVudmlyb25tZW50LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSAKLQl7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJSVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKTsJCQotCQlGaWxlSW5wdXRTdHJlYW0gZmluU3RyZWFtID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQlTdHJpbmcgb3V0cHV0RGlyLCBqYXZhT3V0cHV0OwotCQkJb3V0cHV0RGlyID0gcmVtb3ZlRmlsZVByb3RvY29sKGphdmFXU0RMUGFyYW0uZ2V0T3V0cHV0KCkpOwotCQkJamF2YU91dHB1dCA9IHJlbW92ZUZpbGVQcm90b2NvbChqYXZhV1NETFBhcmFtLmdldEphdmFPdXRwdXQoKSk7Ci0JCQkKLQkJCVJlc291cmNlQ29udGV4dCBjb250ZXh0ICAgID0gKChCYXNlRWNsaXBzZUVudmlyb25tZW50KWVudmlyb25tZW50KS5nZXRSZXNvdXJjZUNvbnRleHQoKTsJCQkJCi0JCQlJUGF0aCAgICAgICAgICAgb3V0cHV0UGF0aCA9IG5ldyBQYXRoIChvdXRwdXREaXIpOwotCQkJCi0JCQlTdHJpbmcgZmlsZU5hbWU7Ci0JCQlJUGF0aCB0YXJnZXRQYXRoPW51bGw7Ci0KLQkJCVN0cmluZyBkZXBsb3lGaWxlOwotCQkJSXRlcmF0b3IgaXRlcmF0b3I7Ci0JCQkKLQkJCVN0cmluZyB0ZW1wT3V0cHV0RGlyID0gdGVtcE91dHB1dEZpbGUudG9TdHJpbmcoKTsKLQkJCVN0cmluZyBbXSBtb3ZlZERlcGxveUZpbGVzID0gbmV3IFN0cmluZyBbZGVwbG95RmlsZXMuc2l6ZSgpXTsKLQkJCWl0ZXJhdG9yID0gZGVwbG95RmlsZXMuaXRlcmF0b3IoKTsKLQkJCWludCBpID0gMDsKLQkJCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCQlkZXBsb3lGaWxlID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotCQkJCUZpbGUgc291cmNlID0gbmV3IEZpbGUoZGVwbG95RmlsZSk7Ci0JCQkJZmluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzb3VyY2UpOwotCQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpZiAoZGVwbG95RmlsZS5zdGFydHNXaXRoKHRlbXBPdXRwdXREaXIpKSB7Ci0JCQkJCQlmaWxlTmFtZSA9IGRlcGxveUZpbGUuc3Vic3RyaW5nKHRlbXBPdXRwdXREaXIubGVuZ3RoKCkpOwotCQkJCQkJdGFyZ2V0UGF0aCA9IG91dHB1dFBhdGguYXBwZW5kKGZpbGVOYW1lKS5tYWtlQWJzb2x1dGUoKTsgIAotCQkJCQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZUF0TG9jYXRpb24oY29udGV4dCwgIAotCQkJCQkJCQl0YXJnZXRQYXRoLAotCQkJCQkJCQlmaW5TdHJlYW0sCi0JCQkJCQkJCW1vbml0b3IsCi0JCQkJCQkJCXN0YXR1c0hhbmRsZXIpOwotCQkJCQkJbW92ZWREZXBsb3lGaWxlc1tpKytdPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlRm9yTG9jYXRpb24odGFyZ2V0UGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJCQl9Ci0JCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJamF2YVdTRExQYXJhbS5zZXREZXBsb3ltZW50RmlsZXMobW92ZWREZXBsb3lGaWxlcyk7Ci0JCQkKLQkJCUlQYXRoIGphdmFPdXRwdXRQYXRoID0gbmV3IFBhdGggKGphdmFPdXRwdXQpOwotCQkJCi0JCQlTdHJpbmcgamF2YUZpbGU7Ci0JCQlTdHJpbmcgZnVsbENsYXNzTmFtZSA9IG51bGw7Ci0JCQlTdHJpbmcgW10gbW92ZWRKYXZhRmlsZXMgPSAgbmV3IFN0cmluZyBbamF2YUZpbGVzLnNpemUoKV07Ci0JCQlpdGVyYXRvciA9IGphdmFGaWxlcy5pdGVyYXRvcigpOwotCQkJaSA9IDA7Ci0JCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJamF2YUZpbGUgPSAoU3RyaW5nKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJRmlsZSBzb3VyY2UgPSBuZXcgRmlsZShqYXZhRmlsZSk7Ci0JCQkJZmluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzb3VyY2UpOwotCQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQkvLyBmb3IgdGhlIGNhc2UgSmF2YTJXU0RMLVdTREwySmF2YSwgbm8gbmVlZCB0byBtb3ZlIEphdmEgZmlsZXMsIGp1c3QgZGVsZXRlIHRoZW0KLQkJCQkJaWYgKCFqYXZhV1NETFBhcmFtLmlzTWV0YUluZk9ubHkoKSkgewotCQkJCQkJLy8gZm9yIHRoZSBjYXNlIFdTREwySmF2YSwgbW92ZSBKYXZhIGZpbGVzIHRvIEphdmEgb3V0cHV0IGRpcmVjdG9yeQotCQkJCQkJaWYgKGphdmFGaWxlLnN0YXJ0c1dpdGgodGVtcE91dHB1dERpcikpIHsKLQkJCQkJCQlmdWxsQ2xhc3NOYW1lID0gamF2YUZpbGUuc3Vic3RyaW5nKHRlbXBPdXRwdXREaXIubGVuZ3RoKCkpOwotCQkJCQkJCXRhcmdldFBhdGggPSBqYXZhT3V0cHV0UGF0aC5hcHBlbmQoZnVsbENsYXNzTmFtZSkubWFrZUFic29sdXRlKCk7IAotCQkJCQkJCUlGaWxlIGZpbGUgPSBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlQXRMb2NhdGlvbihjb250ZXh0LCAgCi0JCQkJCQkJCQl0YXJnZXRQYXRoLAotCQkJCQkJCQkJZmluU3RyZWFtLAotCQkJCQkJCQkJbW9uaXRvciwKLQkJCQkJCQkJCXN0YXR1c0hhbmRsZXIpOwotCQkJCQkJCWZpbGUuc2V0Q2hhcnNldCgiVVRGLTgiLCBtb25pdG9yKTsKLQkJCQkJCQltb3ZlZEphdmFGaWxlc1tpKytdPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlRm9yTG9jYXRpb24odGFyZ2V0UGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCQotCQkJCQlmaW5TdHJlYW0uY2xvc2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlqYXZhV1NETFBhcmFtLnNldEphdmFGaWxlcyhtb3ZlZEphdmFGaWxlcyk7Ci0JCQkKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfTU9WRV9SRVNPVVJDRSxuZXcgU3RyaW5nW117ZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCl9KSwgZSk7Ci0JCQlzdGF0dXNIYW5kbGVyLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCQl9CQkJCi0JCX0KLQkJCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yaWVzIHVuZGVyIGRpci4gCi0JICogSnVzdCBpZ25vcmUgYW5kIGtlZXAgZ29pbmcgaWYgZGVsZXRlIGlzIG5vdCBzdWNjZXNzZnVsCi0JICogCi0JICogQHBhcmFtIGRpciBkaXJlY3RvcnkgdG8gZGVsZXRlCi0JICovCi0JcHVibGljIHZvaWQgZGVsZXRlRGlyKEZpbGUgZGlyKSB7Ci0JCWlmIChkaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJU3RyaW5nW10gY2hpbGRyZW4gPSBkaXIubGlzdCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCWRlbGV0ZURpcihuZXcgRmlsZShkaXIsIGNoaWxkcmVuW2ldKSk7Ci0JCQl9Ci0JCX0KLQkJLy8gVGhlIGRpcmVjdG9yeSBpcyBub3cgZW1wdHkgc28gZGVsZXRlIGl0Ci0JCWRpci5kZWxldGUoKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdW5kZXIgdGhlIHBsdWdpbidzIHN0YXRlIGxvY2F0aW9uIChpLmUuCi0JICogLm1ldGFkYXRhLy5wbHVnaW4gZGlyZWN0b3J5KQotCSAqIAotCSAqIEByZXR1cm4gRmlsZQotCSAqLwotCXByaXZhdGUgRmlsZSBjcmVhdGVUZW1wRGlyKCkgewotCQlTdHJpbmcgcGx1Z2luVGVtcERpciA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luCi0JCS5nZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKS50b1N0cmluZygpOwotCQlGaWxlIHRlbXBEaXIgPSBuZXcgRmlsZShwbHVnaW5UZW1wRGlyKTsKLQkJRmlsZSBuZXdUZW1wRGlyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW5ld1RlbXBEaXIgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKFRFTVAsICIiLCB0ZW1wRGlyKTsKLQkJCS8vIGRlbGV0ZSB0aGUgdGVtcCBmaWxlIGFuZCBjcmVhdGUgYSB0ZW1wIGRpcmVjdG9yeSBpbnN0ZWFkCi0JCQlpZiAobmV3VGVtcERpci5kZWxldGUoKSkgewotCQkJCWlmIChuZXdUZW1wRGlyLm1rZGlyKCkpIHsKLQkJCQkJdGVtcERpciA9IG5ld1RlbXBEaXI7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHRlbXBEaXI7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gdGVtcERpcjsKLQkJfQotCX0KLQkJCi0JLyoKLQkgKiBIYWNrOiBBeGlzIGRvZXNuJ3QgbGlrZSBmaWxlIFVSTHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyByZW1vdmVGaWxlUHJvdG9jb2woU3RyaW5nIHMpIHsKLQkJaWYgKHMuc3RhcnRzV2l0aCgiZmlsZToiKSkgewotCQkJU3RyaW5nIG5ld1MgPSBzLnN1YnN0cmluZyg1LCBzLmxlbmd0aCgpKTsKLQkJCWludCBpID0gbmV3Uy5pbmRleE9mKCc6Jyk7Ci0JCQlpZiAoaSAhPSAtMSkgewotCQkJCVN0cmluZyBwcm90b2NvbCA9IG5ld1Muc3Vic3RyaW5nKDAsIGkpOwotCQkJCWludCBqID0gcHJvdG9jb2wuaW5kZXhPZignLycpOwotCQkJCWludCBrID0gcHJvdG9jb2wuaW5kZXhPZignXFwnKTsKLQkJCQlpbnQgbWF4ID0gTWF0aC5tYXgoaiwgayk7Ci0JCQkJaWYgKG1heCAhPSAtMSkKLQkJCQkJbmV3UyA9IG5ld1Muc3Vic3RyaW5nKG1heCArIDEsIG5ld1MubGVuZ3RoKCkpOwotCQkJfQotCQkJcmV0dXJuIG5ld1M7Ci0JCX0KLQkJcmV0dXJuIHM7Ci0JfQotCi0JcHVibGljIFN0YXR1cyB1bmRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RhdHVzIHJlZG8oSUVudmlyb25tZW50IGVudmlyb25tZW50KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFVzZXJuYW1lCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFVzZXJuYW1lIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtTW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFmYzQzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uaW50ZXJuYWwuZW52aXJvbm1lbnQuZWNsaXBzZS5GaWxlUmVzb3VyY2VVdGlsczsKLQotcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1Nb2RpZmllciBpbXBsZW1lbnRzIEJlYW5Nb2RpZmllciB7Ci0KLQlwdWJsaWMgdm9pZCBtb2RpZnkoT2JqZWN0IGJlYW4sIE9iamVjdCBwcm9wZXJ0eUhvbGRlcikKLQl7Ci0JCUphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JCWlmIChiZWFuICE9IG51bGwpCi0JCXsKLQkJCWphdmFXU0RMUGFyYW0gPSAoSmF2YVdTRExQYXJhbWV0ZXIpYmVhbjsJCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQlqYXZhV1NETFBhcmFtID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JCX0KLQkJIAotCQkvL2xvb2sgZm9yIGVhY2gga25vd24ga2V5IGluIHRoZSBtYXAgJiBpZiB0aGVyZSwgY29udmVydCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IG9uIGphdmFXU0RMUGFyYW0KLQkJaWYgKHByb3BlcnR5SG9sZGVyIGluc3RhbmNlb2YgTWFwKQotCQl7CQotCQkJTWFwIHByb3BlcnR5TWFwID0gKE1hcClwcm9wZXJ0eUhvbGRlcjsKLQkJCQotCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJVc2UiKSkKLQkJCXsJCQkJCi0JCQkgICBqYXZhV1NETFBhcmFtLnNldFVzZSgoU3RyaW5nKXByb3BlcnR5TWFwLmdldCgiVXNlIikpOwkKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiU3R5bGUiKSkKLQkJCXsKLQkJCQlqYXZhV1NETFBhcmFtLnNldFN0eWxlKChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJTdHlsZSIpKTsKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiSmF2YU91dHB1dCIpKQotCQkJewkJCQkgCi0gICAgICAgIFN0cmluZyBvdXRwdXRMb2NhdGlvbiA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJKYXZhT3V0cHV0Iik7Ci0gICAgICAgIGludCAgICBpbmRleCAgICAgICAgICA9IG91dHB1dExvY2F0aW9uLmluZGV4T2YoICc6JyApOwotICAgICAgICAKLSAgICAgICAgaWYoIGluZGV4ID09IC0xICkKLSAgICAgICAgewotICAgICAgICAgIC8vIEEgY29sb24gd2FzIG5vdCBmb3VuZCBpbiB0aGUgc3RyaW5nIHNvIHdlIHdpbGwgYXNzdW1lIHRoYXQKLSAgICAgICAgICAvLyBpdCBpcyBhIHdvcmtzcGFjZSByZWxhdGl2ZSB1cmkgZm9yIG5vdy4KLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIG5ldyBQYXRoKCBvdXRwdXRMb2NhdGlvbiApICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIHJlc291cmNlID09IG51bGwgfHwgcmVzb3VyY2UuZ2V0TG9jYXRpb24oKSA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuYmluZCggQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dExvY2F0aW9uICkgKTsgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIG91dHB1dExvY2F0aW9uID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIAotCQkJCWphdmFXU0RMUGFyYW0uc2V0SmF2YU91dHB1dCggb3V0cHV0TG9jYXRpb24gKTsKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiTWV0aG9kcyIpKQotCQkJewotCQkJCS8vZ2V0IE1ldGhvZCBsaXN0IGZyb20gdGhlIG1hcAotCQkJCVN0cmluZyBtZXRob2RMaXN0ID0gKFN0cmluZylwcm9wZXJ0eU1hcC5nZXQoIk1ldGhvZHMiKTsKLQkJCQkKLQkJCQkvL3Rva2VuaXplIHRoZSBtZXRob2QgbGlzdAotCQkJCVN0cmluZ1Rva2VuaXplciB0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG1ldGhvZExpc3QsICIgIik7Ci0JCQkJSGFzaHRhYmxlIG1ldGhvZHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQkJd2hpbGUgKHRvay5oYXNNb3JlVG9rZW5zKCkpCi0JCQkJewotICAgICAgICAgIFN0cmluZyBtZXRob2QgPSAoU3RyaW5nKXRvay5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggbWV0aG9kLmluZGV4T2YoICcoJyApID09IC0xICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtZXRob2QgPSBtZXRob2QgKyAiKCkiOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLQkJCQkJbWV0aG9kcy5wdXQoIG1ldGhvZCwgbmV3IEJvb2xlYW4odHJ1ZSkpOwotCQkJCX0JCQkJCi0JCQkJamF2YVdTRExQYXJhbS5zZXRNZXRob2RzKG1ldGhvZHMpOwotCQkJfQotCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJNYXBwaW5ncyIpKQotCQkJewotCQkJCS8vZ2V0IG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBoYXMgdGhlIG1hcHBpbmdzIGluIGl0IGZyb20gdGhlIG1hcAotCQkJCVN0cmluZyBmaWxlbmFtZSA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJNYXBwaW5ncyIpOwotICAgICAgICAKLQkJCQkvL2dldCB0aGUgbGlzdCBvZiBtYXBwaW5nIGZyb20gdGhlIGZpbGUKLQkJCQlIYXNoTWFwIG1hcHBpbmdzID0gcmVhZE1hcHBpbmdzRnJvbUZpbGUoZmlsZW5hbWUpOwotICAgICAgICAKLQkJCQlqYXZhV1NETFBhcmFtLnNldE1hcHBpbmdzKG1hcHBpbmdzKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBiZWFuTmFtZSA9IGphdmFXU0RMUGFyYW0uZ2V0QmVhbk5hbWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBiZWFuTmFtZSAhPSBudWxsICYmICFiZWFuTmFtZS5lcXVhbHMoIiIpICkKLSAgICAgICAgewotICAgICAgICAgIGludCAgICBsYXN0RG90ICAgICA9IGJlYW5OYW1lLmxhc3RJbmRleE9mKCAnLicgKTsKLSAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBsYXN0RG90ID09IC0xID8gbnVsbCA6IGJlYW5OYW1lLnN1YnN0cmluZyggMCwgbGFzdERvdCApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBtYXBwaW5ncyAhPSBudWxsICYmIHBhY2thZ2VOYW1lICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0bnMgPSAoU3RyaW5nKW1hcHBpbmdzLmdldCggcGFja2FnZU5hbWUgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYoIHRucyAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgamF2YVdTRExQYXJhbS5zZXROYW1lc3BhY2UodG5zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgCi0gICAgICAgIH0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIEhhc2hNYXAgcmVhZE1hcHBpbmdzRnJvbUZpbGUoU3RyaW5nIGZpbGVuYW1lKQotCSAgewotCQlIYXNoTWFwIGhhc2htYXAgPSBuZXcgSGFzaE1hcCgpOwotCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlbmFtZSkpOwotCQkKLQkJaWYgKHJlc291cmNlICE9IG51bGwgKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCQlwcm9wcy5sb2FkKHJlc291cmNlLmdldENvbnRlbnRzKCkpOwkJCQotCQkJaGFzaG1hcC5wdXRBbGwocHJvcHMpOwkJCQkJCQotCQkgIH0KLQkJICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgewotCQkgICAgLy8gVE9ETyBSZXBvcnQgc29tZSBlcnJvciBoZXJlLgotCQkgIH0KLQkJfQkKLQkJcmV0dXJuIGhhc2htYXA7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1ldGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1ldGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZmExZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtZXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLQotcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1ldGVyIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBTRVJWRVJfU0lERV9OT05FID0gMDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgU0VSVkVSX1NJREVfQkVBTiA9IDE7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFNFUlZFUl9TSURFX0VKQiA9IDI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9SUEMgPSAiUlBDIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0RPQ1VNRU5UID0gIkRPQ1VNRU5UIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX1dSQVBQRUQgPSAiV1JBUFBFRCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9MSVRFUkFMID0gIkxJVEVSQUwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0VOQ09ERUQgPSAiRU5DT0RFRCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgU3RyaW5nIGJlYW5OYW1lID0gbnVsbDsgLy8gVGhlIG5hbWUgb2YgdGhlIEphdmEgYmVhbgotCXByaXZhdGUgU3RyaW5nIGNsYXNzcGF0aCA9IG51bGw7Ci0JLy8gVGhlIGNsYXNzIHBhdGggZm9yIGxvYWRpbmcgdGhlIGJlYW4gYW5kIGNvbW1hbmQgZXhlY3V0aW9uCi0JcHJpdmF0ZSBTdHJpbmcgYmVhblBhY2thZ2UgPSBudWxsOyAvLyBUaGUgcGFja2FnZSBsb2NhdGlvbiBvZiB0aGUgYmVhbgotCXByaXZhdGUgU3RyaW5nIHBvcnRUeXBlTmFtZSA9IG51bGw7IC8vIFRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgZWxlbWVudAotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VOYW1lID0gbnVsbDsgLy8gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgZWxlbWVudAotCXByaXZhdGUgU3RyaW5nIG91dHB1dFdzZGxMb2NhdGlvbiA9IG51bGw7Ci0JLy8gVGhlIG91dHB1dCBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlCi0JcHJpdmF0ZSBTdHJpbmcgaW5wdXRXc2RsTG9jYXRpb24gPSBudWxsOwotCS8vIFRoZSBpbnB1dCBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlCi0JcHJpdmF0ZSBTdHJpbmcgdXJsTG9jYXRpb24gPSBudWxsOyAvLyBUaGUgVVJMIGxvY2F0aW9uIG9mIHRoZSB3ZWIgc2VydmljZQotCXByaXZhdGUgSGFzaHRhYmxlIG1ldGhvZHMgPSBudWxsOyAvLyBUaGUgYXJyYXkgb2YgbWV0aG9kIG5hbWVzCi0JcHJpdmF0ZSBTdHJpbmcgbWV0aG9kU3RyaW5nXyA9ICIiOyAvLyROT04tTkxTLTEkCi0JIC8vVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0aG9kIGFycmF5Ci0JcHJpdmF0ZSBTdHJpbmcgc3R5bGUgPSBudWxsOwotCS8vIFRoZSBzdHlsZSAoUlBDIHwgRE9DVU1FTlQgfCBXUkFQUEVEKSBhdHRyaWJ1dGUgZm9yIHRoZSBnZW5lcmF0ZWQgV1NETAotCXByaXZhdGUgU3RyaW5nIHVzZSA9IG51bGw7Ci0JLy8gVGhlIHVzZSAoTElURVJBTCB8IEVOQ09ERUQpIGF0dHJpYnR1ZSBmb3IgdGhlIGdlbmVyYXRlZCBXU0RMCi0JcHJpdmF0ZSBTdHJpbmcgb3V0cHV0ID0gbnVsbDsKLQkvLyBUaGUgb3V0cHV0IGxvY2F0aW9uIGZvciBkZXBsb3ltZW50IGRlc2NyaXB0b3JzICYgSmF2YSBjb2RlIChvdXRwdXQgZnJvbSBXU0RMMkphdmEgY29tbWFuZCkKLQlwcml2YXRlIFN0cmluZyBqYXZhT3V0cHV0ID0gbnVsbDsKLQkvLyBUaGUgb3V0cHV0IGxvY2F0aW9uIGZvciBKYXZhIGNvZGUgKG91dHB1dCBmcm9tIFdTREwySmF2YSBjb21tYW5kKQotCXByaXZhdGUgYm9vbGVhbiBtZXRhSW5mT25seSA9IGZhbHNlOyAvLyBNRVRBLUlORi1PTkxZIGZsYWcKLQlwcml2YXRlIGJ5dGUgc2VydmVyU2lkZSA9IFNFUlZFUl9TSURFX05PTkU7Ci0JLy8gc2VydmVyLXNpZGUgZmxhZyAoU0VSVkVSX1NJREVfTk9ORSB8IFNFUlZFUl9TSURFX0JFQU4gfCBTRVJWRVJfU0lERV9FSkIpCi0JcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gc2tlbGV0b25EZXBsb3kgPSB0cnVlOwotCXByaXZhdGUgU3RyaW5nIGNvbnRhaW5lciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmdbXSBkZXBsb3ltZW50RmlsZXMgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nW10gamF2YUZpbGVzID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBwcm9qZWN0VVJMID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZ3Vlc3NQcm9qZWN0VVJMID0gZmFsc2U7Ci0JcHJpdmF0ZSBIYXNoTWFwIG1hcHBpbmdQYWlyczsKLQlwcml2YXRlIFN0cmluZyBodHRwVXNlcm5hbWVfID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBodHRwUGFzc3dvcmRfID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIHNldENvbnRhaW5lcihTdHJpbmcgY29udGFpbmVyKSB7Ci0JCXRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGFpbmVyKCkgewotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBKYXZhV1NETFBhcmFtZXRlci4KLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIoKSB7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYmVhbk5hbWUuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEJlYW5OYW1lKCkgewotCQlyZXR1cm4gYmVhbk5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRCZWFuUGFja2FnZSgpIHsKLQkJcmV0dXJuIGJlYW5QYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBvcnRUeXBlTmFtZS4KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UG9ydFR5cGVOYW1lKCkgewotCQlyZXR1cm4gcG9ydFR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlcnZpY2VOYW1lLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTmFtZSgpIHsKLQkJcmV0dXJuIHNlcnZpY2VOYW1lOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG91dHB1dC4KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0KCkgewotCQlyZXR1cm4gb3V0cHV0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGhvZHMuCi0JICogQHJldHVybiBTdHJpbmdbXQotCSAqLwotCXB1YmxpYyBIYXNodGFibGUgZ2V0TWV0aG9kcygpIHsKLQkJcmV0dXJuIG1ldGhvZHM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29tbWEgc2VwZXJhdGVkIHN0cmluZyByZXByZXNldGF0aW9uIG9mIHRoZSBtZXRob2RzLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRNZXRob2RTdHJpbmcoKSB7Ci0JCWlmIChtZXRob2RTdHJpbmdfLmVxdWFscygiIikpCi0JCXsJCQotCQkJRW51bWVyYXRpb24gZSA9IG1ldGhvZHMua2V5cygpOwotCSAJCWZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotCSAgICAJewotCQotCQkJCVN0cmluZyBzaWduYXR1cmUgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7Ci0JCQkJaWYgKCgoQm9vbGVhbikgbWV0aG9kcy5nZXQoc2lnbmF0dXJlKSkuYm9vbGVhblZhbHVlKCkpewotCQkJCQkJCQlpbnQgaW5kZXggPSBzaWduYXR1cmUuaW5kZXhPZignKCcpOwotCQkJCQkJCQlTdHJpbmcgbmFtZSA9IHNpZ25hdHVyZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCQkJCQltZXRob2RTdHJpbmdfICs9IG5hbWU7Ci0JCQkJfQotCQkgICAgCWlmIChpICE9IG1ldGhvZHMuc2l6ZSgpIC0xKSAvLyB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcnJheSBpdGVtCQotCQkJCXsKLQkJCQkJbWV0aG9kU3RyaW5nXyArPSAiLCI7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBtZXRob2RTdHJpbmdfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBtZXRob2RzCSAqCi0JICovCi0JcHVibGljIHZvaWQgc2V0TWV0aG9kU3RyaW5nKFN0cmluZyBtZXRob2RzKQotCXsKLQkJbWV0aG9kU3RyaW5nXyA9IG1ldGhvZHM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3R5bGUgYXR0cmlidXRlLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHlsZSgpIHsKLQkJcmV0dXJuIHN0eWxlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVybExvY2F0aW9uLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRVcmxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIHVybExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVzZSBhdHRyaWJ1dGUuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFVzZSgpIHsKLQkJcmV0dXJuIHVzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBvdXRwdXRXc2RsTG9jYXRpb24uCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dFdzZGxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIG91dHB1dFdzZGxMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBiZWFuTmFtZS4KLQkgKiBAcGFyYW0gYmVhbk5hbWUgVGhlIGJlYW5OYW1lIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJlYW5OYW1lKFN0cmluZyBiZWFuTmFtZSkgewotCQl0aGlzLmJlYW5OYW1lID0gYmVhbk5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QmVhblBhY2thZ2UoU3RyaW5nIGJlYW5QYWNrYWdlKSB7Ci0JCXRoaXMuYmVhblBhY2thZ2UgPSBiZWFuUGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBwb3J0VHlwZU5hbWUuCi0JICogQHBhcmFtIHBvcnRUeXBlTmFtZSBUaGUgcG9ydFR5cGVOYW1lIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFBvcnRUeXBlTmFtZShTdHJpbmcgcG9ydFR5cGVOYW1lKSB7Ci0JCXRoaXMucG9ydFR5cGVOYW1lID0gcG9ydFR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHNlcnZpY2VOYW1lLgotCSAqIEBwYXJhbSBzZXJ2aWNlTmFtZSBUaGUgc2VydmljZU5hbWUgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmljZU5hbWUoU3RyaW5nIHNlcnZpY2VOYW1lKSB7Ci0JCXRoaXMuc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBvdXRwdXQuCi0JICogQHBhcmFtIG91dHB1dCBUaGUgb3V0cHV0IHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dChTdHJpbmcgb3V0cHV0KSB7Ci0JCXRoaXMub3V0cHV0ID0gb3V0cHV0OwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIG1ldGhvZHMuCi0JICogQHBhcmFtIG1ldGhvZHMgVGhlIG1ldGhvZHMgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0TWV0aG9kcyhIYXNodGFibGUgbWV0aG9kcykgewotCQl0aGlzLm1ldGhvZHMgPSBtZXRob2RzOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHN0eWxlLgotCSAqIEBwYXJhbSBzdHlsZSBUaGUgc3R5bGUgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0U3R5bGUoU3RyaW5nIHN0eWxlKSB7Ci0JCXRoaXMuc3R5bGUgPSBzdHlsZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB1cmxMb2NhdGlvbi4KLQkgKiBAcGFyYW0gdXJsTG9jYXRpb24gVGhlIHVybExvY2F0aW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVybExvY2F0aW9uKFN0cmluZyB1cmxMb2NhdGlvbikgewotCQl0aGlzLnVybExvY2F0aW9uID0gdXJsTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgdXNlLgotCSAqIEBwYXJhbSB1c2UgVGhlIHVzZSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVc2UoU3RyaW5nIHVzZSkgewotCQl0aGlzLnVzZSA9IHVzZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBvdXRwdXRXc2RsTG9jYXRpb24uCi0JICogQHBhcmFtIG91dHB1dFdzZGxMb2NhdGlvbiBUaGUgb3V0cHV0V3NkbExvY2F0aW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dFdzZGxMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKSB7Ci0JCXRoaXMub3V0cHV0V3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGFJbmZPbmx5LgotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzTWV0YUluZk9ubHkoKSB7Ci0JCXJldHVybiBtZXRhSW5mT25seTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBtZXRhSW5mT25seS4KLQkgKiBAcGFyYW0gbWV0YUluZk9ubHkgVGhlIG1ldGFJbmZPbmx5IHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE1ldGFJbmZPbmx5KGJvb2xlYW4gbWV0YUluZk9ubHkpIHsKLQkJdGhpcy5tZXRhSW5mT25seSA9IG1ldGFJbmZPbmx5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlcnZlclNpZGUuCi0JICogQHJldHVybiBieXRlCi0JICovCi0JcHVibGljIGJ5dGUgZ2V0U2VydmVyU2lkZSgpIHsKLQkJcmV0dXJuIHNlcnZlclNpZGU7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgc2VydmVyU2lkZS4KLQkgKiBAcGFyYW0gc2VydmVyU2lkZSBUaGUgc2VydmVyU2lkZSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJTaWRlKGJ5dGUgc2VydmVyU2lkZSkgewotCQl0aGlzLnNlcnZlclNpZGUgPSBzZXJ2ZXJTaWRlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGlucHV0V3NkbExvY2F0aW9uLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJbnB1dFdzZGxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIGlucHV0V3NkbExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGlucHV0V3NkbExvY2F0aW9uLgotCSAqIEBwYXJhbSBpbnB1dFdzZGxMb2NhdGlvbiBUaGUgaW5wdXRXc2RsTG9jYXRpb24gdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0SW5wdXRXc2RsTG9jYXRpb24oU3RyaW5nIGlucHV0V3NkbExvY2F0aW9uKSB7Ci0JCXRoaXMuaW5wdXRXc2RsTG9jYXRpb24gPSBpbnB1dFdzZGxMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBuYW1lc3BhY2UuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIG5hbWVzcGFjZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBuYW1lc3BhY2UuCi0JICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKSB7Ci0JCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmEgb3V0cHV0LgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRKYXZhT3V0cHV0KCkgewotCQlyZXR1cm4gamF2YU91dHB1dDsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhT3V0cHV0LgotCSAqIEBwYXJhbSBqYXZhT3V0cHV0IFRoZSBKYXZhIG91dHB1dCB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRKYXZhT3V0cHV0KFN0cmluZyBqYXZhT3V0cHV0KSB7Ci0JCXRoaXMuamF2YU91dHB1dCA9IGphdmFPdXRwdXQ7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NwYXRoKCkgewotCQlyZXR1cm4gY2xhc3NwYXRoOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGFzc3BhdGgoU3RyaW5nIHN0cmluZykgewotCQljbGFzc3BhdGggPSBzdHJpbmc7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU2tlbGV0b25EZXBsb3koKSB7Ci0JCXJldHVybiBza2VsZXRvbkRlcGxveTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gYgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNrZWxldG9uRGVwbG95KGJvb2xlYW4gYikgewotCQlza2VsZXRvbkRlcGxveSA9IGI7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXREZXBsb3ltZW50RmlsZXMoKSB7Ci0JCXJldHVybiBkZXBsb3ltZW50RmlsZXM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3ltZW50RmlsZXMoU3RyaW5nW10gc3RyaW5ncykgewotCQlkZXBsb3ltZW50RmlsZXMgPSBzdHJpbmdzOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0SmF2YUZpbGVzKCkgewotCQlyZXR1cm4gamF2YUZpbGVzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmdzCi0JICovCi0JcHVibGljIHZvaWQgc2V0SmF2YUZpbGVzKFN0cmluZ1tdIHN0cmluZ3MpIHsKLQkJamF2YUZpbGVzID0gc3RyaW5nczsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm9qZWN0VVJMKCkgewotCQlyZXR1cm4gcHJvamVjdFVSTDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdFVSTChTdHJpbmcgc3RyaW5nKSB7Ci0JCXByb2plY3RVUkwgPSBzdHJpbmc7Ci0JfQotCQotCXB1YmxpYyBIYXNoTWFwIGdldE1hcHBpbmdzKCkKLQl7Ci0JCQlyZXR1cm4gbWFwcGluZ1BhaXJzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1hcHBpbmdzKEhhc2hNYXAgbWFwKQotCXsKLQkJCW1hcHBpbmdQYWlycyA9IG1hcDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdXNlciBuYW1lIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEhUVFBVc2VybmFtZSgpCi0JewotCSAgcmV0dXJuIGh0dHBVc2VybmFtZV87Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgdXNlciBuYW1lIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCi0JICogQHBhcmFtIFN0cmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhUVFBVc2VybmFtZShTdHJpbmcgaHR0cFVzZXJuYW1lKQotCXsKLQkgIGh0dHBVc2VybmFtZV8gPSBodHRwVXNlcm5hbWU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFzc3dvcmQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SFRUUFBhc3N3b3JkKCkKLQl7Ci0JICByZXR1cm4gaHR0cFBhc3N3b3JkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHVibGljIHZvaWQgc2V0SFRUUFBhc3N3b3JkKFN0cmluZyBodHRwUGFzc3dvcmQpIHsKLQkJaHR0cFBhc3N3b3JkXyA9IGh0dHBQYXNzd29yZDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0d1ZXNzUHJvamVjdFVSTCgpIHsKLQkJcmV0dXJuIGd1ZXNzUHJvamVjdFVSTDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRHdWVzc1Byb2plY3RVUkwoYm9vbGVhbiBndWVzc1Byb2plY3RVUkwpIHsKLQkJdGhpcy5ndWVzc1Byb2plY3RVUkwgPSBndWVzc1Byb2plY3RVUkw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL05hbWVNYXBwaW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vTmFtZU1hcHBpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjFmZGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vTmFtZU1hcHBpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkphdmFVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC50b0phdmEuVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lTWFwcGluZ1V0aWxzIHsKLQotICBwcml2YXRlIE5hbWVNYXBwaW5nVXRpbHMoKSB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTdHJpbmcgbmFtZXNwYWNlLCBNYXAgbnMycGtnTWFwKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuczJwa2dNYXAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IHBrZyA9IG5zMnBrZ01hcC5nZXQobmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyoqCi0gICAqIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZQotICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJCi0gICAqIEByZXR1cm4gcGFja2FnZSBuYW1lIGJhc2VkIG9uIG5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgCXJldHVybiBVdGlscy5tYWtlUGFja2FnZU5hbWUobmFtZXNwYWNlVVJJKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIHhtbE5hbWVUb0phdmFDbGFzcwotICAgKiBAcGFyYW0geG1sbmFtZQotICAgKiBAcmV0dXJuIEphdmEgY2xhc3MgbmFtZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgeG1sTmFtZVRvSmF2YUNsYXNzKFN0cmluZyB4bWxuYW1lKQotICB7Ci0gIAlyZXR1cm4gVXRpbHMueG1sTmFtZVRvSmF2YUNsYXNzKHhtbG5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogZ2V0UG9ydE5hbWUKLSAgICogQHBhcmFtIHBhcnROYW1lCi0gICAqIEByZXR1cm4gcG9ydCBuYW1lIHVzZWQgYnkgdGhlIEF4aXMgZW1pdHRlcgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydE5hbWUoU3RyaW5nIHBvcnROYW1lKSAKLSAgewotICAJaWYgKCFKYXZhVXRpbHMuaXNKYXZhSWQocG9ydE5hbWUpKSAKLSAgICAgICAgcG9ydE5hbWUgPSB4bWxOYW1lVG9KYXZhQ2xhc3MocG9ydE5hbWUpOwotICAJcmV0dXJuIHBvcnROYW1lOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9BeGlzRW1pdHRlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhMjgxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9BeGlzRW1pdHRlckNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dDsKLQotcHVibGljIGludGVyZmFjZSBBeGlzRW1pdHRlckNvbnRleHQgewotCS8qKgotCSAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhbGxfd2FudGVkIGdlbmVyYWwgcHJlZmVyZW5jZQotCSAqIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9BTExfV0FOVEVEID0gImFsbFdhbnRlZCI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgaGVscGVyX3dhbnRlZCBnZW5lcmFsCi0JICogcHJlZmVyZW5jZSBmcm9tIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRCA9ICJoZWxwZXJXYW50ZWQiOwotCi0JLyoqCi0JICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIHdyYXBfYXJyYXlzIGdlbmVyYWwgcHJlZmVyZW5jZQotCSAqIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9XUkFQX0FSUkFZUyA9ICJ3cmFwQXJyYXlzIjsKLQotCS8qKgotCSAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBkZXBsb3lfc2NvcGUgZ2VuZXJhbAotCSAqIHByZWZlcmVuY2UgZnJvbSB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0RFUExPWV9TQ09QRSA9ICJkZXBsb3lTY29wZSI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdGltZV9vdXQgZ2VuZXJhbCBwcmVmZXJlbmNlCi0JICogZnJvbSB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1RJTUVfT1VUID0gInRpbWVPdXQiOwotCi0JLyoKLQkgKiBFbnN1cmUgdGhlIG9yZGVyIGlzIHRoZSBzYW1lIGFzIGl0IGluIGRlcGxveVNjb3BlVHlwZXMuc2V0SXRlbXMoLi4uKSBmb3IKLQkgKiBjbGFzcwotCSAqIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLkF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZX1NDT1BFX1RZUEVfQVBQTElDQVRJT04gPSAwOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZX1NDT1BFX1RZUEVfUkVRVUVTVCA9IDE7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVBMT1lfU0NPUEVfVFlQRV9TRVNTVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdXNlX2luaGVyaXRlZF9tZXRob2RzIGdlbmVyYWwKLQkgKiBwcmVmZXJlbmNlIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9VU0VfSU5IRVJJVEVEX01FVEhPRFMgPSAidXNlSW5oZXJpdGVkTWV0aG9kcyI7Ci0JCi0JLyoqCi0JICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlICJ2YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQyIKLQkgKiBwcmVmZXJlbmNlIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9WQUxJREFURV9BR0FJTlNUX0pBWFJQQyA9ICJ2YWxpZGF0ZUFnYWluc3RKQVhSUEMiOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVuYWJsZQotCSAqICAgICAgICAgICAgc2V0IHdoZXRoZXIgZ2VuZXJhdGluZyBjb2RlIGZvciBhbGwgZWxlbWVudHMgaXMgZW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBbGxXYW50ZWRFbmFibGVkKGJvb2xlYW4gZW5hYmxlKTsKLQotCS8qKgotCSAqIAotCSAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIGdlbmVyYXRpbmcgY29kZSBmb3IgYWxsIGVsZW1lbnRzIGlzIGVuYWJsZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBbGxXYW50ZWRFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciBlbWl0dGluZyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YSBkYXRhIGlzCi0JICogICAgICAgICAgICBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhlbHBlcldhbnRlZEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHJldHVybnMKLQkgKiAgICAgICAgICAgIHdoZXRoZXIgZW1pdHRpbmcgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGEgZGF0YSBpcwotCSAqICAgICAgICAgICAgZW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0hlbHBlcldhbnRlZEVuYWJsZWQoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbmFibGUKLQkgKiAgICAgICAgICAgIHNldCB3aGV0aGVyIHdyYXBwaW5nIGFycmF5cyBpcyBlbmFibGVkLgotCSAqLwotCi0JcHVibGljIHZvaWQgc2V0V3JhcEFycmF5c0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHJldHVybnMKLQkgKiAgICAgICAgICAgIHdoZXRoZXIgd3JhcHBpbmcgYXJyYXlzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1dyYXBBcnJheXNFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciB1c2luZyBpbmhlcml0ZWQgbWV0aG9kcyBpcyBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSByZXR1cm5zCi0JICogICAgICAgICAgICB3aGV0aGVyIHVzaW5nIGluaGVyaXRlZCBtZXRob2RzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciBKQVgtUlBDIGFuYWx5c2lzIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGlzIGVuYWJsZWQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsaWRhdGVBZ2FpbnN0SkFYUlBDRW5hYmxlZChib29sZWFuIGVuYWJsZSk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgd2hldGhlciBKQVgtUlBDIGFuYWx5c2lzIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBzZWxlY3Rpb24KLQkgKiAgICAgICAgICAgIHNldCB0aGUgZGVwbG95IHNjb3BlIHR5cGUuCi0JICovCi0KLQlwdWJsaWMgdm9pZCBzZWxlY3REZXBsb3lTY29wZVR5cGUoaW50IHNlbGVjdGlvbik7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgdGhlIGRlcGxveSBzY29wZSB0eXBlLgotCSAqLwotCi0JcHVibGljIGludCBnZXREZXBsb3lTY29wZVR5cGUoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBzZWNvbmRzCi0JICogICAgICAgICAgICBzZXQgdGhlIHRpbWUgb3V0LgotCSAqLwotCi0JcHVibGljIHZvaWQgc2V0VGltZU91dChpbnQgc2Vjb25kcyk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgdGhlIHRpbWUgb3V0LgotCSAqLwotCi0JcHVibGljIGludCBnZXRUaW1lT3V0KCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgQXhpc0VtaXR0ZXJDb250ZXh0LgotCSAqLwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJEZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWFkYzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L0F4aXNFbWl0dGVyRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCAgIGJ1ZyAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgQXhpc0VtaXR0ZXJEZWZhdWx0cwotewotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9BTExfV0FOVEVEX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRF9ERUZBVUxUID0gZmFsc2U7Ci0gcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUkVGRVJFTkNFX1dSQVBfQVJSQVlTX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMgPSB0cnVlOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVBMT1lfU0NPUEVfREVGQVVMVCA9IEF4aXNFbWl0dGVyQ29udGV4dC5ERVBMT1lfU0NPUEVfVFlQRV9SRVFVRVNUOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FX09VVF9ERUZBVUxUID0gNDU7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIGdlbmVyYXRpbmcgY29kZSBmb3IgYWxsIGVsZW1lbnRzLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRBbGxXYW50ZWREZWZhdWx0ICgpCi0gewotIAlyZXR1cm4gUFJFRkVSRU5DRV9BTExfV0FOVEVEX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBlbWl0dGluZyBzZXBlcmF0ZSBoZWxwc2VyIGNsYXNzIGZvciBtZXRhZGF0YS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0SGVscGVyV2FudGVkRGVmYXVsdCAoKQotIHsgCi0JcmV0dXJuIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRF9ERUZBVUxUOwotIH0KLQotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXRpbmcgZm9yIHdyYXBwaW5nIGFycmF5cy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0V3JhcEFycmF5c0RlZmF1bHQoKQotIHsKLQlyZXR1cm4gUFJFRkVSRU5DRV9XUkFQX0FSUkFZU19ERUZBVUxUOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgdXNpbmcgaW5oZXJpdGVkIG1ldGhvZHMuCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkKLSB7Ci0JcmV0dXJuIFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBKQVgtUlBDIHZhbGlkYXRpb24gb2YgdGhlIHNlcnZpY2UgY2xhc3MuCi0gICogTm90ZTogVGhpcyBpcyBub3QgYSB0cnVlIEF4aXMgZW1pdHRlciBwcmVmZXJlbmNlLiBUaGlzIHByZWZlcmVuY2UgY29udHJvbHMgd2hldGhlcgotICAqIHRoZSBBeGlzIFdlYiBzZXJ2aWNlIGJvdHRvbS11cCBzY2VuYXJpbyBhbmFseXplcyB0aGUgc2VydmljZSBjbGFzcyBmb3IgY29tcGxpYW5jZQotICAqIHRvIEpBWC1SUEMgc29tZSB0aW1lIGJlZm9yZSBjYWxsaW5nIHRoZSBlbWl0dGVycy4gCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFZhbGlkYXRlQWdhaW5zdEpBWFJQQygpCi0gewotCXJldHVybiBQUkVGRVJFTkNFX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgZGVwbG95IHNjb3BlIHR5cGUuCi0gICovCi0gcHVibGljIHN0YXRpYyBpbnQgZ2V0RGVwbG95U2NvcGVEZWZhdWx0KCkKLSB7Ci0JIHJldHVybiBERVBMT1lfU0NPUEVfREVGQVVMVDsKLSB9Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHRpbWUgb3V0LgotICAqLwotIHB1YmxpYyBzdGF0aWMgaW50IGdldFRpbWVPdXREZWZhdWx0KCkKLSB7Ci0JIHJldHVybiBUSU1FX09VVF9ERUZBVUxUOwotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L1BlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L1BlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1NDNlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9QZXJzaXN0ZW50QXhpc0VtaXR0ZXJDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dCBpbXBsZW1lbnRzCUF4aXNFbWl0dGVyQ29udGV4dAotewotCXByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dF8gPSBudWxsOwotCi0JcHVibGljIHN0YXRpYyBQZXJzaXN0ZW50QXhpc0VtaXR0ZXJDb250ZXh0IGdldEluc3RhbmNlKCkgCi0JewotCQlpZiAoY29udGV4dF8gPT0gbnVsbCkgewotCQkJY29udGV4dF8gPSBuZXcgUGVyc2lzdGVudEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCQkJY29udGV4dF8ubG9hZCgpOwotCQl9Ci0KLQkJcmV0dXJuIGNvbnRleHRfOwotCX0KLQotCXByaXZhdGUgUGVyc2lzdGVudEF4aXNFbWl0dGVyQ29udGV4dCgpIAotCXsKLQkJc3VwZXIoV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgbG9hZCgpIAotCXsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX0FMTF9XQU5URUQsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0QWxsV2FudGVkRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX0hFTFBFUl9XQU5URUQsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0SGVscGVyV2FudGVkRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX1dSQVBfQVJSQVlTLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFdyYXBBcnJheXNEZWZhdWx0KCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VmFsaWRhdGVBZ2FpbnN0SkFYUlBDKCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfREVQTE9ZX1NDT1BFLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldERlcGxveVNjb3BlRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX1RJTUVfT1VULCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFsbFdhbnRlZEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpIAotCXsKLQkJc2V0VmFsdWUoUFJFRkVSRU5DRV9BTExfV0FOVEVELCBlbmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQWxsV2FudGVkRW5hYmxlZCgpIAotCXsKLQkJcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfQUxMX1dBTlRFRCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SGVscGVyV2FudGVkRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX0hFTFBFUl9XQU5URUQsIGVuYWJsZSk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkgCi0JewotCQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9IRUxQRVJfV0FOVEVEKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXcmFwQXJyYXlzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1dSQVBfQVJSQVlTLCBlbmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzV3JhcEFycmF5c0VuYWJsZWQoKSAKLQl7Ci0JCXJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1dSQVBfQVJSQVlTKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1VTRV9JTkhFUklURURfTUVUSE9EUywgZW5hYmxlKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkgCi0JewotCQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9VU0VfSU5IRVJJVEVEX01FVEhPRFMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDLCBlbmFibGUpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKQotCXsKLQkJcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdERlcGxveVNjb3BlVHlwZShpbnQgc2VsZWN0aW9uKSB7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfREVQTE9ZX1NDT1BFLCBzZWxlY3Rpb24pOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0RGVwbG95U2NvcGVUeXBlKCkgewotCQlyZXR1cm4gZ2V0VmFsdWVBc0ludChQUkVGRVJFTkNFX0RFUExPWV9TQ09QRSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGltZU91dChpbnQgc2Vjb25kcykgewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1RJTUVfT1VULCBzZWNvbmRzKTsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFRpbWVPdXQoKSB7Ci0JCXJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfVElNRV9PVVQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNTZXJ2aWNlc1NheEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNTZXJ2aWNlc1NheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2NTIxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmljZXNTYXhIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQwODMyIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2aWNlc1NheEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotewotCXByaXZhdGUgVmVjdG9yIHdlYlNlcnZpY2VzTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRzKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JewotCQlpZiAobG9jYWxOYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygic2VydmljZSIpKQotCQl7CQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0JCQl7Ci0JCQkJaWYgKGF0dHMuZ2V0TG9jYWxOYW1lKGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygibmFtZSIpKQotCQkJCXsKLQkJCQkJU3RyaW5nIHNlcnZpY2VOYW1lID0gYXR0cy5nZXRWYWx1ZShpKTsKLQkJICAgICAgICAgICAgd2ViU2VydmljZXNOYW1lcy5hZGQoc2VydmljZU5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlc05hbWVzKCkKLQl7Ci0JCXJldHVybiB0aGlzLndlYlNlcnZpY2VzTmFtZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2xvY2F0b3IvQXhpc1NlcnZsZXRTYXhIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmxldFNheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4YmNjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmxldFNheEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTcgICAxNDA4MzIgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2bGV0U2F4SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi17Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFYSVNfU0VSVkxFVF9DTEFTU19OQU1FID0gIm9yZy5hcGFjaGUuYXhpcy50cmFuc3BvcnQuaHR0cC5BeGlzU2VydmxldCI7Ci0JCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNFUlZMRVRfQ0xBU1NfTkFNRSA9ICJzZXJ2bGV0LWNsYXNzIjsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNUaGVyZUF4aXNTZXJ2bGV0ID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgY3VycmVudEVsZW1lbnQgPSBudWxsOwotCQotCXB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotCXsKLQkJY3VycmVudEVsZW1lbnQgPSBsb2NhbE5hbWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24KLQl7Ci0JCWlmICggIWlzVGhlcmVBeGlzU2VydmxldCAmJiBTRVJWTEVUX0NMQVNTX05BTUUuZXF1YWxzKGN1cnJlbnRFbGVtZW50LnRyaW0oKSkgJiYgU3RyaW5nLnZhbHVlT2YoY2gpLmluZGV4T2YoQVhJU19TRVJWTEVUX0NMQVNTX05BTUUpID4gLTEpCi0JCXsKLQkJCWlzVGhlcmVBeGlzU2VydmxldCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNUaGVyZUF4aXNTZXJ2bGV0KCkKLQl7Ci0JCXJldHVybiB0aGlzLmlzVGhlcmVBeGlzU2VydmxldDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzV2ViU2VydmljZUxvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzVhZjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA1MTcgICAxNDA4MzIgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNjIwICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MTIxNCAgIDE2NTcxNiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2UgZmluZGVyIGRvZXMgbm90IGxvY2F0ZSBBeGlzIFdlYiBzZXJ2aWNlIGRlcGxveWVkIG9uIGNlcnRhaW4gc2VydmVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGVIaWVyYXJjaHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUphdmFDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJQb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGUgQXhpcyBXZWIgc2VydmljZSBsb2NhdG9yIHBsdWdzIGl0c2VsZiBpbnRvIHRoZQotICogV2ViIFNlcnZpY2VzIEZpbmRlciBmcmFtZXdvcmsgYW5kIGRvZXMgdGhlIGpvYiBvZgotICogbG9jYXRpbmcgQXhpcyBjbGllbnRzIGFuZCBzZXJ2aWNlcy4KLSAqLwotcHVibGljIGNsYXNzIEF4aXNXZWJTZXJ2aWNlTG9jYXRvciBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IKLXsKLQlwcml2YXRlIFN0cmluZyBBWElTX1NUVUIgPSAib3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViIjsKLQkKLQkvKioKLQkgKiBTZWFyY2hlcyB0aGUgd29ya3NwYWNlIGZvciBBeGlzIGNsaWVudHMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IG5vbi1zdHViIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQKLQkgKiBTRUlzIHRoYXQgYXJlIGltcGxlbWVudGVkIGJ5IHN0dWJzIHRoYXQgaW1wbGVtZW50Ci0JICogb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgcG9zc2libHkgbnVsbC4KLQkgKiBAcmV0dXJuIEEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzIChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSUphdmFNb2RlbCBqYXZhTW9kZWwgPSBKYXZhQ29yZS5jcmVhdGUocm9vdCk7Ci0JCXRyeQotCQl7Ci0JCQlqYXZhTW9kZWwub3Blbihtb25pdG9yKTsKLQkJCUlKYXZhUHJvamVjdFtdIGphdmFQcm9qZWN0cyA9IGphdmFNb2RlbC5nZXRKYXZhUHJvamVjdHMoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxqYXZhUHJvamVjdHMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJLy8gV2UncmUgb25seSBpbnRlcmVzdGVkIGluIEphdmEgcHJvamVjdHMgd2l0aGluIHdoaWNoCi0JCQkJLy8gdGhlIEF4aXMgcnVudGltZSdzIGNsaWVudCAiU3R1YiIgY2xhc3MgaXMgbG9hZGFibGU6Ci0JCQkJSVR5cGUgYXhpc1N0dWIgPSBqYXZhUHJvamVjdHNbaV0uZmluZFR5cGUoQVhJU19TVFVCKTsKLQkJCQlpZiAoYXhpc1N0dWIgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCS8vIEZpbmQgIlByb3h5IiBjbGFzc2VzIGluIHRoZSBwcm9qZWN0IGFuZCBhZGQgdG8gdGhlIGxpc3QuCi0JCQkJCWFkZEF4aXNQcm94aWVzKGphdmFQcm9qZWN0c1tpXSxheGlzU3R1YixsaXN0LG1vbml0b3IpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFNb2RlbC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogU2VhcmNoZXMgdGhlIHdvcmtzcGFjZSBmb3IgQXhpcyBjbGllbnRzIGFzCi0JICogaWRlbnRpZmllZCBieSBub24tc3R1YiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50Ci0JICogU0VJcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieSBzdHVicyB0aGF0IGltcGxlbWVudAotCSAqIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1Yi4KLQkgKiBAcGFyYW0gcHJvamVjdHMgVGhlIHByb2plY3RzIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCB0by4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJaWYgKHByb2plY3RzID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50cyhtb25pdG9yKTsKLQkJfQotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSUphdmFNb2RlbCBqYXZhTW9kZWwgPSBKYXZhQ29yZS5jcmVhdGUocm9vdCk7Ci0JCXRyeQotCQl7Ci0JCQlqYXZhTW9kZWwub3Blbihtb25pdG9yKTsKLQkJCWZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJCXsKLQkJCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBqYXZhTW9kZWwuZ2V0SmF2YVByb2plY3QocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLQkJCQkvLyBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gSmF2YSBwcm9qZWN0cyB3aXRoaW4gd2hpY2gKLQkJCQkvLyB0aGUgQXhpcyBydW50aW1lJ3MgY2xpZW50ICJTdHViIiBjbGFzcyBpcyBsb2FkYWJsZToKLQkJCQlJVHlwZSBheGlzU3R1YiA9IGphdmFQcm9qZWN0LmZpbmRUeXBlKEFYSVNfU1RVQik7Ci0JCQkJaWYgKGF4aXNTdHViICE9IG51bGwpCi0JCQkJewotCQkJCQkvLyBGaW5kICJQcm94eSIgY2xhc3NlcyBpbiB0aGUgcHJvamVjdCBhbmQgYWRkIHRvIHRoZSBsaXN0LgotCQkJCQlhZGRBeGlzUHJveGllcyhqYXZhUHJvamVjdCxheGlzU3R1YixsaXN0LG1vbml0b3IpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFNb2RlbC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogVHJpZXMgdG8gZmluZCBBeGlzICJQcm94eSIgY2xhc3NlcyByZWxhdGVkIHRoZSBnaXZlbiBTdHViLgotCSAqIEBwYXJhbSBheGlzU3R1YiBUaGUgQXhpcyBjbGllbnQgIlN0dWIiIGZyb20gd2hpY2ggdG8gc2VhcmNoLgotCSAqIEBwYXJhbSBsaXN0IEEgbGlzdCB0byB3aGljaCB3ZSdsbCBhZGQgYW5kIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyBmb3IgIlByb3h5IiBjbGFzc2VzIHdlIGZpbmQgaW4gdGhlIHNlYXJjaC4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZEF4aXNQcm94aWVzIChJSmF2YVByb2plY3QgamF2YVByb2plY3QsIElUeXBlIGF4aXNTdHViLCBMaXN0IGxpc3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCXRyeQotCQl7Ci0JCQkvLyBDb21wdXRlIGEgaGllcmFyY2h5IHRvIGhlbHAgdXMgZmluZCBhbGwgdGhlCi0JCQkvLyBnZW5lcmF0ZWQgU3R1YiBzdWJjbGFzc2VzIG9mIHRoZSBBeGlzICJTdHViIgotCQkJLy8gY2xhc3MgYWNyb3NzIHRoZSBlbnRpcmUgd29ya3NwYWNlOgotCQkJSVR5cGVIaWVyYXJjaHkgYXhpc1N0dWJIaWVyYXJjaHkgPSBheGlzU3R1Yi5uZXdUeXBlSGllcmFyY2h5KGphdmFQcm9qZWN0LG1vbml0b3IpOwotCQkJSVR5cGVbXSBzdHVicyA9IGF4aXNTdHViSGllcmFyY2h5LmdldFN1YnR5cGVzKGF4aXNTdHViKTsKLQkJCWZvciAoaW50IHM9MDsgczxzdHVicy5sZW5ndGg7IHMrKykKLQkJCXsKLQkJCQkvLyBGb3IgZWFjaCBzdHViLCBmaW5kIGFsbCBpdHMgc3VwZXItaW50ZXJmYWNlcyBvZiB3aGljaAotCQkJCS8vIHRoZXJlIHNob3VsZCBiZSBvbmUsIG5hbWVseSB0aGUgZ2VuZXJhdGVkIFNFSToKLQkJCQlJVHlwZSBzZWlzW10gPSBheGlzU3R1YkhpZXJhcmNoeS5nZXRTdXBlckludGVyZmFjZXMoc3R1YnNbc10pOwotCQkJCWZvciAoaW50IGk9MDsgaTxzZWlzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJdHJ5Ci0JCQkJCXsKLQkJCQkJCS8vIENvbXB1dGUgYSBoaWVyYXJjaHkgdG8gaGVscCB1cyBmaW5kIGFsbCB0aGUKLQkJCQkJCS8vIGdlbmVyYXRlZCBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoZSBTRUkKLQkJCQkJCS8vIGNvbmZpbmVkIHRvIHRoZSBjdXJyZW50IHByb2plY3Q6Ci0JCQkJCQlJVHlwZUhpZXJhcmNoeSBzZWlIaWVyYXJjaHkgPSBzZWlzW2ldLm5ld1R5cGVIaWVyYXJjaHkoamF2YVByb2plY3QsbW9uaXRvcik7Ci0JCQkJCQlJVHlwZVtdIHByb3hpZXMgPSBzZWlIaWVyYXJjaHkuZ2V0U3VidHlwZXMoc2Vpc1tpXSk7Ci0JCQkJCQlmb3IgKGludCBwPTA7IHA8cHJveGllcy5sZW5ndGg7IHArKykKLQkJCQkJCXsKLQkJCQkJCQkvLyBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyB3ZSBzaG91bGQgZmluZCB0d28gc3ViY2xhc3NlczoKLQkJCQkJCQkvLyAxLiBUaGUgZ2VuZXJhdGVkIHN0dWIgdGhhdCBnb3QgdXMgaGVyZSAodHdvIGxvb3BzIGFib3ZlKS4KLQkJCQkJCQkvLyAyLiBUaGUgZ2VuZXJhdGVkICJQcm94eSIgdGhhdCB3ZSdyZSBsb29raW5nIGZvci4KLQkJCQkJCQkvLyBTa2lwICMxIGFuZCBjYXB0dXJlICMyOgotCQkJCQkJCWlmICghcHJveGllc1twXS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKS5lcXVhbHMoc3R1YnNbc10uZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpKQotCQkJCQkJCXsKLQkJCQkJCQkJV2ViU2VydmljZUNsaWVudEluZm8gd3NjSW5mbyA9IG5ld1dlYlNlcnZpY2VDbGllbnRJbmZvKHByb3hpZXNbcF0pOwotCQkJCQkJCQlpZiAod3NjSW5mbyAhPSBudWxsKQotCQkJCQkJCQl7Ci0JCQkJCQkJCQlsaXN0LmFkZCh3c2NJbmZvKTsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQkJCXsKLQkJCQkJCS8vIFdlJ2xsIGxhbmQgaGVyZSBpZiB0aGUgSkRUIHdhcyB1bmFibGUgdG8gY29tcHV0ZQotCQkJCQkJLy8gYSB0eXBlIGhpZXJhcmNoeSBmb3IgdGhlIGN1cnJlbnQgU0VJLgotCQkJCQkJLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywKLQkJCQkJCS8vIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGV4Y2VwdCBieXBhc3MgdGhlIFNFSQotCQkJCQkJLy8gYW5kIGxvb3Agb24gdG8gdGhlIG5leHQgb25lLgotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gV2UnbGwgbGFuZCBoZXJlIGlmIEpEVCB3YXMgdW5hYmxlIHRvIGNvbXB1dGUKLQkJCS8vIGEgdHlwZSBoaWVyYXJjaHkgZm9yIHRoZSBBeGlzIGNsaWVudCAiU3R1YiIgY2xhc3MuCi0JCQkvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLAotCQkJLy8gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gZXhjZXB0IGJhaWwgb3V0LCBoYXZpbmcKLQkJCS8vIGFkZGVkIG5vdGhpbmcgdG8gdGhlIGxpc3QuCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgZm9yIGEKLQkgKiBKRFQgSVR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGdlbmVyYXRlZCBQcm94eS4KLQkgKiBAcGFyYW0gYXhpc1Byb3h5IFRoZSBJVHlwZSBvZiB0aGUgZ2VuZXJhdGVkIFByb3h5LgotCSAqIEByZXR1cm4gQSBuZXcgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIFByb3h5LAotCSAqIG9yIG51bGwgaWYgdGhlIElUeXBlIGRvZXMgbm90IGFwcGVhciB0byBkZXNjcmliZSBhIG5vcm1hbCBQcm94eS4gCi0JICovCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBuZXdXZWJTZXJ2aWNlQ2xpZW50SW5mbyAoSVR5cGUgYXhpc1Byb3h5KQotCXsKLQkJV2ViU2VydmljZUphdmFDbGllbnRJbmZvIHdzY0luZm8gPSBudWxsOwotCQl0cnkKLQkJewotCQkJSVJlc291cmNlIHJlc291cmNlID0gYXhpc1Byb3h5LmdldFVuZGVybHlpbmdSZXNvdXJjZSgpOwotCQkJaWYgKHJlc291cmNlICE9IG51bGwpCi0JCQl7Ci0JCQkJSVBhdGggcHJveHlQYXRoID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKTsKLQkJCQlpZiAocHJveHlQYXRoICE9IG51bGwpCi0JCQkJewotCQkJCQlTdHJpbmcgcHJveHlVUkwgPSBwcm94eVBhdGgudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotCQkJCQl3c2NJbmZvID0gbmV3IFdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbygpOwotCQkJCQl3c2NJbmZvLnNldFR5cGUoYXhpc1Byb3h5KTsKLQkJCQkJd3NjSW5mby5zZXRJbXBsVVJMKHByb3h5VVJMKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBXZSdsbCBsYW5kIGhlcmUgaWYgd2UgY291bGQgbm90IGNvbnZlcnQgdGhlIElUeXBlCi0JCQkvLyBpbnRvIGFuIElSZXNvdXJjZSwgb3IgaWYgd2UgY291bGQgbm90IGNvbXB1dGUgYSBVUkwKLQkJCS8vIGZyb20gdGhhdCByZXNvdXJjZS4gRWl0aGVyIHdheSwgaXQgZGVmaW5pdGVseSBpc24ndAotCQkJLy8gYSBub3JtYWwgZ2VuZXJhdGVkIFByb3h5LCBzbyBnZXQgb3V0IGFuZCByZXR1cm4gbnVsbC4KLQkJfQotCQlyZXR1cm4gd3NjSW5mbzsJCQotCX0KLQotCS8qKgotCSAqIFNlYXJjaGVzIHRoZSB3b3Jrc3BhY2UgZm9yIEF4aXMgc2VydmljZXMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IHNlcnZlci1jb25maWcud3NkZCA8c2VydmljZT4gZWxlbWVudHMKLQkgKiBpbiBwcm9qZWN0cyB3aXRoIGFuIEF4aXMgc2VydmxldCByZWdpc3RlcmVkCi0JICogaW4gdGhlIHdlYi54bWwgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzKG51bGwsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFNlYXJjaGVzIHRoZSB3b3Jrc3BhY2UgZm9yIEF4aXMgc2VydmljZXMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IHNlcnZlci1jb25maWcud3NkZCA8c2VydmljZT4gZWxlbWVudHMKLQkgKiBpbiBwcm9qZWN0cyB3aXRoIGFuIEF4aXMgc2VydmxldCByZWdpc3RlcmVkCi0JICogaW4gdGhlIHdlYi54bWwgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gcHJvamVjdHMgVGhlIHByb2plY3RzIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCB0by4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJVmVjdG9yIHdlYlNlcnZpY2VzID0gbmV3IFZlY3RvcigpOwotCQlpZiAocHJvamVjdHMgPT0gbnVsbCkKLQkJewotCQkJcHJvamVjdHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7Ci0JCX0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJewotCQkJLy8gd2UgYXJlIG9ubHkgaW50ZXJzdGVkIGluIGR5bmFtaWMgd2ViIHByb2plY3QKLQkJCWlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdHNbaV0pKQotCQkJewotCQkJCXRyeSAKLQkJCQl7Ci0JCQkJCXdlYlNlcnZpY2VzLmFkZEFsbChnZXRXZWJTZXJ2aWNlc0Zyb21Qcm9qZWN0KHByb2plY3RzW2ldLCBtb25pdG9yKSk7Ci0JCQkJfSAKLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIAotCQkJCXsKLQkJCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJCQl9IAotCQkJfQotCQl9Ci0JCXJldHVybiB3ZWJTZXJ2aWNlczsKLQl9Ci0JCi0JLyoqCi0JICogU2VhcmNoZXMgZm9yIGEgcGFydGljdWxhciB3ZWIgcHJvamVjdCBmb3IgQXhpcyBzZXJ2aWNlcyBhcwotCSAqIGlkZW50aWZpZWQgYnkgc2VydmVyLWNvbmZpZy53c2RkIDxzZXJ2aWNlPiBlbGVtZW50cwotCSAqIHdpdGggYW4gQXhpcyBzZXJ2bGV0IHJlZ2lzdGVyZWQKLQkgKiBpbiB0aGUgd2ViLnhtbCBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgcG9zc2libHkgbnVsbC4KLQkgKiBAcmV0dXJuIEEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotCSAqLwotCXByaXZhdGUgTGlzdCBnZXRXZWJTZXJ2aWNlc0Zyb21Qcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLQl7CQotCQkvLyBTZWFyY2ggdGhlIHdlYi54bWwgaW4gZml4ZWQgbG9jYXRpb24KLQkJSVBhdGggd2ViRGVzY3JpcHRvclBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aChwcm9qZWN0KS5hcHBlbmQoIi93ZWIueG1sIik7Ci0JCUlGaWxlIHdlYlhtbEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUod2ViRGVzY3JpcHRvclBhdGgpOwotCQkKLQkJaWYgKHdlYlhtbEZpbGUgIT0gbnVsbCAmJiBpc0F4aXNTZXJ2bGV0RXhpc3RlZCh3ZWJYbWxGaWxlLCBtb25pdG9yKSkKLQkJewotCQkJLy8gU2VhcmNoIGZvciBhbGwgc2VydmVyLWNvbmZpZy53c2RkIGluc2lkZSB0aGlzIHByb2plY3QKLQkJCVNlcnZlckNvbmZpZ1dTRERWaXNpdG9yIHZpc2l0b3IgPSBuZXcgU2VydmVyQ29uZmlnV1NERFZpc2l0b3IoKTsKLQkJCXByb2plY3QuYWNjZXB0KHZpc2l0b3IpOwkJCi0JCQl2aXNpdG9yLnZpc2l0KHByb2plY3QpOwotCQkJVmVjdG9yIHdzZGRGaWxlcyA9IHZpc2l0b3IuZ2V0V3NkZEZpbGVzKCk7Ci0JCQlWZWN0b3Igc2VydmljZXNOYW1lcyA9IG5ldyBWZWN0b3IoKTsgCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHdzZGRGaWxlcy5zaXplKCk7IGkrKykKLQkJCXsKLQkJCQlzZXJ2aWNlc05hbWVzLmFkZEFsbChnZXRXZWJTZXJ2aWNlc05hbWVzRnJvbUF4aXNDb25maWcoKElGaWxlKXdzZGRGaWxlcy5nZXQoaSksIG1vbml0b3IpKTsKLQkJCX0KLQkJCXJldHVybiBnZXRXZWJTZXJ2aWNlcyhwcm9qZWN0LCBzZXJ2aWNlc05hbWVzLCBtb25pdG9yKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJldHVybiBuZXcgVmVjdG9yKCk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZWIueG1sIGNvbnRhaW5zIGF4aXMgc2VydmxldAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0F4aXNTZXJ2bGV0RXhpc3RlZChJRmlsZSBmaWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0JewotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJQXhpc1NlcnZsZXRTYXhIYW5kbGVyIGhhbmRsZXIgPSBuZXcgQXhpc1NlcnZsZXRTYXhIYW5kbGVyKCk7Ci0JCXBhcnNlci5wYXJzZShpbnB1dFN0cmVhbSwgaGFuZGxlcik7Ci0JCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCXJldHVybiBoYW5kbGVyLmlzVGhlcmVBeGlzU2VydmxldCgpOwotCX0KLQkKLQkvKgotCSAqIEdpdmVuIGEgbGlzdCBvZiBzZXJ2aWNlcywgZmluZCB0aGUgc2VydmVycyB0aGlzIHByb2plY3QgaXMgYXNzb2NpYXRlZCwKLQkgKiBDb21iaW5lIHRoZW0gYW5kIGZvcm0gdmFyaW91cyBlbmQgcG9pbnQKLQkgKi8KLQlwcml2YXRlIExpc3QgZ2V0V2ViU2VydmljZXMoSVByb2plY3QgcHJvamVjdCwgTGlzdCBzZXJ2aWNlc05hbWVzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlWZWN0b3Igd2ViU2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoU2VydmVyVXRpbC5nZXRNb2R1bGUocHJvamVjdCksbW9uaXRvcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLQkJewotCQkJU3RyaW5nIGhvc3QgPSBzZXJ2ZXJzW2ldLmdldEhvc3QoKTsKLQkJCVNlcnZlclBvcnQgaHR0cFBvcnQgPSBnZXRIdHRwUG9ydChzZXJ2ZXJzW2ldLmdldFNlcnZlclBvcnRzKG1vbml0b3IpKTsKLQkJCWlmIChodHRwUG9ydCAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgc2VydmljZXNOYW1lcy5zaXplKCk7IGorKykKLQkJCQl7Ci0JCQkJCVdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCQkJCQlTdHJpbmcgZW5kUG9pbnRVUkwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgaHR0cFBvcnQuZ2V0UG9ydCgpICsgIi8iICsgSjJFRVV0aWxzLmdldEZpcnN0V2ViTW9kdWxlTmFtZShwcm9qZWN0KSArICIvc2VydmljZXMvIiArIChTdHJpbmcpc2VydmljZXNOYW1lcy5nZXQoaik7Ci0JCQkJCXdzSW5mby5zZXRFbmRQb2ludFVSTChlbmRQb2ludFVSTCk7Ci0JCQkJCXdzSW5mby5zZXRXc2RsVVJMKGVuZFBvaW50VVJMKyI/d3NkbCIpOwotCQkgICAgICAgICAgICB3ZWJTZXJ2aWNlcy5hZGQod3NJbmZvKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdlYlNlcnZpY2VzOwotCX0KLQkKLQkvKgotCSAqIFBhcnNlIHRoZSBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSwgcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBvZiB3ZWIgc2VydmljZXMgCi0JICovCi0JcHJpdmF0ZSBMaXN0IGdldFdlYlNlcnZpY2VzTmFtZXNGcm9tQXhpc0NvbmZpZyhJRmlsZSBmaWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0JewotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJQXhpc1NlcnZpY2VzU2F4SGFuZGxlciBoYW5kbGVyID0gbmV3IEF4aXNTZXJ2aWNlc1NheEhhbmRsZXIoKTsKLQkJcGFyc2VyLnBhcnNlKGlucHV0U3RyZWFtLCBoYW5kbGVyKTsKLQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJcmV0dXJuIGhhbmRsZXIuZ2V0V2ViU2VydmljZXNOYW1lcygpOwkKLQl9Ci0JCi0JLyoKLQkgKiBmaW5kIHRoZSByaWdodCBwb3J0IChodHRwKSBmcm9tIGEgbGlzdCBvciBwb3J0cwotCSAqLwotCXByaXZhdGUgU2VydmVyUG9ydCBnZXRIdHRwUG9ydChTZXJ2ZXJQb3J0W10gcG9ydHMpCi0JewotCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlTdHJpbmcgcHJvdG9jb2wgPSBwb3J0c1tpXS5nZXRQcm90b2NvbCgpOyAKLQkJCWlmICggcHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC50cmltKCkudG9Mb3dlckNhc2UoKS5lcXVhbHMoImh0dHAiKSkgcmV0dXJuIHBvcnRzW2ldOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL1NlcnZlckNvbmZpZ1dTRERWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9TZXJ2ZXJDb25maWdXU0REVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTRkMTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL1NlcnZlckNvbmZpZ1dTRERWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQwODMyIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVZpc2l0b3I7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJDb25maWdXU0REVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZVZpc2l0b3IKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVhJU19TRVJWRVJfQ09ORklHX0ZJTEVfTkFNRSA9ICJTZXJ2ZXItY29uZmlnLndzZGQiOwotCVZlY3RvciB3c2RkRmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlIHJlc291cmNlKQotICAgIHsKLQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkJeyAgICAgCi0JCQlpZiAocmVzb3VyY2UuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoQVhJU19TRVJWRVJfQ09ORklHX0ZJTEVfTkFNRSkpCi0JCQl7Ci0JCQkJd3NkZEZpbGVzLmFkZCgoSUZpbGUpcmVzb3VyY2UpOwotCQkJfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotCXB1YmxpYyBWZWN0b3IgZ2V0V3NkZEZpbGVzKCkKLQl7Ci0JCXJldHVybiB3c2RkRmlsZXM7IAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjZjdjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LlBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgdG8gdGhlCi0qIFdlYiBTZXJ2aWNlcyBydW50aW1lIGZvdW5kIGluIG9yZy5lY2xpcHNlLmpzdC53cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLQotCS8qKgotCSogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLQkqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0KLQkJIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiOwotCi0JLyoqCi0JKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0JKi8KLQlwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbiBpbnN0YW5jZV87Ci0JcHJpdmF0ZSBJTG9nIGxvZ187Ci0KLQlwcml2YXRlIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgYXhpc0VtaXR0ZXJDb250ZXh0XzsKLQkvKioKLQkqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotCSogVGhlICJwbHVnaW4iIGVsZW1lbnQgaW4gcGx1Z2luLnhtbCBzaG91bGQgaW5jbHVkZSB0aGUgYXR0cmlidXRlCi0JKiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIi4KLQkqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotCSovCi0JcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLQkJCWluc3RhbmNlXyA9IHRoaXM7Ci0JCX0KLQkJbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0KLQl9Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGtlZXAgdGhlIGxvZ2dpbmcgZnJvbSBibG93aW5nIHVwLgotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBJRDsgIAotICB9Ci0gIAotCS8qKgotCSogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLQkqIChXZWJTZXJ2aWNlV2FzQ29uc3VtcHRpb25QbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3Mud2FzLnY1LnRwIik7Ci0JKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbiBzaW5nbGV0b24uCi0JKi8KLQlzdGF0aWMgcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQkKLQlwdWJsaWMgQXhpc0VtaXR0ZXJDb250ZXh0IGdldEF4aXNFbWl0dGVyQ29udGV4dCgpCi0JewotCQlpZiAoYXhpc0VtaXR0ZXJDb250ZXh0XyA9PSBudWxsKSAKLQkgIAkJYXhpc0VtaXR0ZXJDb250ZXh0XyA9IFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJcmV0dXJuIGF4aXNFbWl0dGVyQ29udGV4dF87Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyBmaXJzdCBsb2FkZWQuCi0JKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc3RhcnQuCi0JKi8KLQlwdWJsaWMgdm9pZCBzdGFydCggQnVuZGxlQ29udGV4dCBidW5kbGUgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWxvZ18ubG9nKElMb2cuSU5GTywgNTA4NywgdGhpcywgInN0YXJ0IiwgIlN0YXJ0aW5nIHBsdWdpbiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIik7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotCQkgIHN1cGVyLnN0YXJ0KCBidW5kbGUgKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGxvZ18ubG9nKCBJTG9nLkVSUk9SLCA1MDg4LCB0aGlzLCAic3RhcnQiLCBleGMgKTsKLSAgICB9Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyB1bmxvYWRlZC4KLQkqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGlzIHBsdWdpbiBmYWlscyB0byBzaHV0ZG93bi4KLQkqLwotCXB1YmxpYyB2b2lkIHN0b3AoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJbG9nXy5sb2coSUxvZy5JTkZPLCA1MDg5LCB0aGlzLCAic2h1dGRvd24iLCAiU2h1dHRpbmcgcGx1Z2luIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwOTAsIHRoaXMsICJzdG9wIiwgZXhjICk7ICAgICAgCi0gICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5YTAzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLWF4aXMtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJkYWM4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliNzNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNUaHUgTWF5IDMxIDEzOjEwOjE4IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiYjU1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozNCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmIxMjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAzLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmFwYWNoZS5heGlzO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NzJiNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNDkyN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2Vic2VydmljZSBBeGlzIENvbnN1bXB0aW9uIFVJCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotV0VCU0VSVklDRUNMSUVOVFRZUEVfTkFNRV9KQVZBX0FYSVM9SmF2YSBwcm94eQotTEFCRUxfUlVOVElNRV9BWElTXzExPUFwYWNoZSBBeGlzCi1ERVNDX1JVTlRJTUVfQVhJU18xMT1BcGFjaGUgQXhpcwotIwotIwlXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBDYXRlZ29yaWVzCi1QUkVGRVJFTkNFX0NBVEVHT1JZX0FYSVNfRU1JVFRFUj1BeGlzIEVtaXR0ZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1MGMxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Ij4KLSAgICAgICA8d2lkZ2V0RmFjdG9yeSAgIAotICAgICAgICAgICAgIGlkPSJBeGlzQ2xpZW50Q29uZmlnIgotICAgICAgICAgICAgIGluc2VydEJlZm9yZUNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53c3J0LkF4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5Ii8+Ci0gICAgPC9leHRlbnNpb24+IAotICAgICAgICAgIDxleHRlbnNpb24KLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hbnREYXRhTWFwcGluZyI+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnRQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFByb2plY3QiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MiLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAJCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJNYXBwaW5ncyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkNsaWVudENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICA8L2V4dGVuc2lvbj4gCi0gICAgIDxleHRlbnNpb24KLSAgICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPiAgICAgCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfQVhJU19FTUlUVEVSIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5uYW1lIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLkF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL0F4aXNDb25zdW1wdGlvblVJLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YWE4NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjAyMTYgICAxMjY5ODkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0jIDIwMDYwNDI0ICAgMTIwMTM3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLQotTVNHX0VSUk9SX0RFRkFVTFRfQkVBTj1JV0FCMDQ5MUUgRXJyb3IgZW5jb3VudGVyZWQgd2hpbGUgc2V0dGluZyB1cCBkZWZhdWx0IHZhbHVlcyBmb3IgSmF2YSBiZWFuCi1NU0dfRVJST1JfV1NETF9OT19ERUZJTklUSU9OPUlXQUIwNDk1RSBXU0RMIGZpbGUgYXQgezB9IGhhcyBubyBkZWZpbml0aW9uIGVsZW1lbnQKLU1TR19FUlJPUl9XU0RMX05PX1BPUlQ9SVdBQjA0OTZFIFdTREwgZmlsZSBhdCB7MH0gaGFzIG5vIHBvcnQgZWxlbWVudAotTVNHX0VSUk9SX1dSSVRFX1dTREw9SVdBQjA0OTdFIEVycm9yIGluIHdyaXRpbmcgV1NETCBmaWxlIHswfQotCi0jCi0jIE1lc3NhZ2VzIGZvciBDb3B5Q2xpZW50V1NETFRhc2sKLSMKLU1TR19FUlJPUl9JTVBPUlRfV1NETD1JV0FCMDUzMUUgRXJyb3IgaW4gcmVzb2x2aW5nIFdTREwgZmlsZSB7MH0sIGltcG9ydCBXU0RMIGZpbGUgbXVzdCBoYXZlIGFic29sdXRlIFVSTCBvciByZWxhdGl2ZSBVUkwgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Ci0KLQotIwotI0RlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kCi0jCi1NU0dfRVJST1JfV1NETF9MT0NBVElPTl9OT1RfU0VUPUlXQUIwNTAxRSBXU0RMIGxvY2F0aW9uIG5vdCBzZXQuCi0KLSMKLSNBZGRKYXJzVG9Qcm9qZWN0QnVpbGRQYXRoVGFzawotIwotTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkU9SVdBQjA1MDJXIFRoZSBwcm9qZWN0IGlzIG5vdCBhIEphdmEgcHJvamVjdC4KLU1TR19FUlJPUl9CQURfQlVJTERQQVRIPUlXQUIwNTAzRSBVbmFibGUgdG8gdXBkYXRlIEphdmEgYnVpbGQgcGF0aC4gUGxlYXNlIGNoZWNrIHlvdXIgc3lzdGVtIGVudmlyb25tZW50LgotCi0jCi0jQ29weUF4aXNKYXJDb21tYW5kCi0jCi1QUk9HUkVTU19JTkZPX0NPUFlfQVhJU19DRkc9SVdBQjA1MDVJIENvcHlpbmcgQXhpcyBqYXIgZmlsZXMgdG8gd2ViIHByb2plY3QuCi1NU0dfRVJST1JfRklMRUNPUFk9SVdBQjA1MDZFIEVycm9yIHdoZW4gY29weWluZyBBeGlzIGphciBmaWxlcyB0byB3ZWIgcHJvamVjdAotCi0jCi0jUmVmcmVzaFByb2plY3RUYXNrCi0jCi1NU0dfRVJST1JfUkVGUkVTSF9QUk9KRUNUPUlXQUIwNTA4RSBVbmFibGUgdG8gcmVmcmVzaCBwcm9qZWN0LgotCi0jCi0jV2ViU2VydmljZUF4aXNQcm94eVBhZ2UKLSMKLVRPT0xUSVBfUFdKQl9QQUdFPVBhZ2UKLVRPT0xUSVBfUFdKQl9URVhUX0ZPTERFUj1Gb2xkZXIgZm9yIHByb3h5IHRvIGJlIGdlbmVyYXRlZCBmb3IgdGhlIHNlbGVjdGVkIGJpbmRpbmcuCi1UT09MVElQX1BXSkJfQ0hFQ0tCT1hfR0VOUFJPWFk9Q2hlY2sgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgYSBwcm94eS4KLQotUEFHRV9USVRMRV9XU19BWElTX1BST1hZPVdlYiBTZXJ2aWNlIFByb3h5IFBhZ2UKLVBBR0VfREVTQ19XU19BWElTX1BST1hZPVNlbGVjdCBnZW5lcmF0ZSBwcm94eSBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBwcm94eSBmb3IgeW91ciBzZXJ2aWNlLgotQ0hFQ0tCT1hfR0VOUFJPWFk9R2VuZXJhdGUgcHJveHkKLUxBQkVMX0ZPTERFUl9OQU1FPU91dHB1dCBmb2xkZXIKLQotIwotIyBNZXNzYWdlcyBmb3IgV2ViU2VyaXZjZUF4aXNNYXBwaW5nc1BhZ2UKLSMKLVBBR0VfVElUTEVfV1NfQkVBTjJYTUw9V2ViIFNlcnZpY2UgUGFja2FnZSB0byBOYW1lc3BhY2UgTWFwcGluZwotUEFHRV9USVRMRV9XU19YTUwyUFJPWFk9V2ViIFNlcnZpY2UgQ2xpZW50IE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmcKLVBBR0VfREVTQ19QMk5fTUFQUElOR1M9RGVmaW5lIGN1c3RvbSBtYXBwaW5nIGZvciBwYWNrYWdlIHRvIG5hbWVzcGFjZS4KLQotCi1MQUJFTF9NQVBQSU5HX1BBSVJTPU1hcHBpbmcgcGFpcnMKLVRBQkxFX0NPTFVNTl9MQUJFTF9QQUNLQUdFPXBhY2thZ2UKLVRBQkxFX0NPTFVNTl9MQUJFTF9OQU1FU1BBQ0U9bmFtZXNwYWNlCi1MQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOPURlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2UuCi1UT09MVElQX04yUF9TSE9XX01BUFBJTkdTPURlZmluZSBuYW1lc3BhY2UgdG8gcGFja2FnZSBtYXBwaW5nIGZvciBjdXN0b21pemF0aW9uLgotCi0jIE1lc3NhZ2VzIGZvciBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlCi1UT09MVElQX1BQQUVfUEFHRT1TZXQgcHJlZmVyZW5jZXMgdGhhdCBjb250cm9sIEF4aXMgRW1pdHRlci4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVEPUJ5IGRlZmF1bHQsIGNvZGUgaXMgZ2VuZXJhdGVkIG9ubHkgZm9yIHJlZmVyZW5jZWQgZWxlbWVudHMuIFxuQ2FsbCBiR2VuZXJhdGVBbGwodHJ1ZSkgYW5kIFdTREwySmF2YSB3aWxsIGdlbmVyYXRlIGNvZGUgXG5mb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBzY29wZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUgcmVmZXJlbmNlZC4gXG5TY29wZSBtZWFuczogYnkgZGVmYXVsdCwgYWxsIFdTREwgZmlsZXM7IGlmIGdlbmVyYXRlSW1wb3J0cyhmYWxzZSksXG50aGVuIG9ubHkgdGhlIGltbWVkaWF0ZSBXU0RMIGZpbGUuCi1UT09MVElQX1BQQUVfQ0hFQ0tCT1hfSEVMUEVSX1dBTlRFRD1FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YSBkYXRhLgotVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTPVByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciB3cmFwcGVkIFhNTCBhcnJheSB0eXBlcy4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFM9SWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZSBKYXZhMldTREwgcGFyc2VyIHdpbGwgbG9vayBpbnRvIGV4dGVuZGVkIGNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gZXhwb3J0IGludG8gdGhlIFdTREwgZmlsZS4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9WQUxJREFURV9BR0FJTlNUX0pBWFJQQz1JZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMgdmFsdWUgdHlwZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHNhdGlzZmllcyBpbXBvcnRhbnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uICAgIAotVE9PTFRJUF9QUEFFX0NPTUJPX0RFUExPWV9TQ09QRT1BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQuCi1UT09MVElQX1BQQUVfRklFTERfVElNRV9PVVQ9VGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0IGlzIDQ1LCBzcGVjaWZ5IC0xIHRvIGRpc2FibGUpLgotVE9PTFRJUF9QUEFFX0dST1VQX1dTREwySkFWQT1TZXQgcHJlZmVyZW5jZXMgZm9yIHdzZGwyamF2YS4KLVRPT0xUSVBfUFBBRV9HUk9VUF9KQVZBMldTREw9U2V0IHByZWZlcmVuY2VzIGZvciBqYXZhMndzZGwuCi1CVVRUT05fQUxMX1dBTlRFRD0mR2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzLCBldmVuIHVucmVmZXJlbmNlZCBvbmVzCi1CVVRUT05fSEVMUEVSX1dBTlRFRD1FbWl0cyBzZXBhcmF0ZSAmaGVscGVyIGNsYXNzZXMgZm9yIG1ldGEgZGF0YQotQlVUVE9OX1dSQVBfQVJSQVlTPVByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciAmd3JhcHBlZCBYTUwgYXJyYXkgdHlwZXMKLUJVVFRPTl9VU0VfSU5IRVJJVEVEX01FVEhPRFM9TG9vayBmb3IgYWxsb3dlZCAmbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3MKLUJVVFRPTl9WQUxJREFURV9BR0FJTlNUX0pBWFJQQz1BbmFseXplIHRoZSBzZXJ2aWNlIGNsYXNzIGZvciBjb21wbGlhbmNlIHRvIEpBWC1SUEMgYmVmb3JlIGdlbmVyYXRpbmcgY29kZQotTEFCRUxfREVQTE9ZX1NDT1BFPUFkZCAmc2NvcGUgdG8gZGVwbG95LndzZGQ6Ci1MQUJFTF9USU1FX09VVD0mVGltZW91dCBpbiBzZWNvbmRzOgotR1JPVVBfV1NETDJKQVZBX05BTUU9V3NkbDJKYXZhCi1HUk9VUF9KQVZBMldTRExfTkFNRT1KYXZhMldzZGwKLURFUExPWV9TQ09QRV9BUFBMSUNBVElPTj1BcHBsaWNhdGlvbgotREVQTE9ZX1NDT1BFX1JFUVVFU1Q9UmVxdWVzdAotREVQTE9ZX1NDT1BFX1NFU1NJT049U2Vzc2lvbgotTVNHX0VSUk9SX0lOVkFMSURfVElNRV9PVVQ9SW52YWxpZCB0aW1lb3V0ISBUaW1lb3V0IHNob3VsZCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIC0xIHRvIGRpc2FibGUuCi1NU0dfVVNFX0pWTV9BUkdVTUVOVF9GT1JfVElNRV9PVVQ9VXNpbmcgdGltZW91dCB2YWx1ZSAoaW4gbWlsbGlzZWNvbmRzKSBmcm9tIEpWTSBhcmd1bWVudHMgQXhpc1dzZGwySmF2YVRpbWVvdXQKLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDAzOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA0MjQgICAxMjAxMzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfREVGQVVMVF9CRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0RMX05PX0RFRklOSVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfTk9fUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV1JJVEVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU1QT1JUX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfTE9DQVRJT05fTk9UX1NFVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9OT19KQVZBX05BVFVSRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQkFEX0JVSUxEUEFUSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9HUkVTU19JTkZPX0NPUFlfQVhJU19DRkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJTEVDT1BZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9SRUZSRVNIX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV0pCX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV0pCX1RFWFRfRk9MREVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX0FYSVNfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX0FYSVNfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfR0VOUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRk9MREVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19CRUFOMlhNTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1hNTDJQUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfUDJOX01BUFBJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01BUFBJTkdfUEFJUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX0xBQkVMX1BBQ0tBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX0xBQkVMX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfTjJQX1NIT1dfTUFQUElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DT01CT19ERVBMT1lfU0NPUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0ZJRUxEX1RJTUVfT1VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9HUk9VUF9XU0RMMkpBVkE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0dST1VQX0pBVkEyV1NETDsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0FMTF9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0hFTFBFUl9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1dSQVBfQVJSQVlTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9VU0VfSU5IRVJJVEVEX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0RFUExPWV9TQ09QRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9USU1FX09VVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHUk9VUF9XU0RMMkpBVkFfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHUk9VUF9KQVZBMldTRExfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBERVBMT1lfU0NPUEVfQVBQTElDQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVQTE9ZX1NDT1BFX1JFUVVFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVQTE9ZX1NDT1BFX1NFU1NJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOVkFMSURfVElNRV9PVVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1VTRV9KVk1fQVJHVU1FTlRfRk9SX1RJTUVfT1VUOwotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDIxYjgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldTRExQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0vKioKLSAqIAotICogQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGllbnRTY2VuYXJpb18gID0gdHJ1ZTsKLQlwcml2YXRlIGJvb2xlYW4gY3VzdG9taXplTWFwcGluZ3NfID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIGdlbmVyYXRlUHJveHlfID0gdHJ1ZTsKLQlwcml2YXRlIFN0cmluZyBjbGllbnRSdW50aW1lSWRfOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm94eVByb2plY3RfID0gbnVsbDsKLQlwcml2YXRlIElQcm9qZWN0IGNsaWVudFByb2plY3RFQVJfID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJMXzsKLQlwcml2YXRlIGJvb2xlYW4gdGVzdFByb3h5U2VsZWN0ZWRfOwotCXByaXZhdGUgSVNlcnZlciBjbGllbnRFeGlzdGluZ1NlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgY2xpZW50U2VydmVyXzsKLQlwcml2YXRlIGJvb2xlYW4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlQcm9qZWN0Rm9sZGVyXzsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQlwdWJsaWMgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kKCApIAotCXsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCQotCQljbGllbnRFeGlzdGluZ1NlcnZlcl8gPSBnZXRTZXJ2ZXJGcm9tU2VydmVyTGFiZWwoKTsKLS8vCQlpZiAoY2xpZW50RXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpIHsKLS8vCQkJLy9UT0RPIFRoZSBmb2xsb3dpbmcgbGluZSBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4KLS8vCQkJY2xpZW50RXhpc3RpbmdTZXJ2ZXJfLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotLy8JCX0gZWxzZSB7Ci0vLwkJCS8vVE9ETyBnZXQgdGhlIGZhY3RvcnkgaWQgZm9yIHRoZSB0eXBlLgotLy8JCX0KLQkJLy9qYXZhV1NETFBhcmFtCi0JCWphdmFXU0RMUGFyYW1fID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JCQotCQkvLyBwcm94eVByb2plY3RGb2xiZXJfCi0JCQotCQl3ZWJTZXJ2aWNlc1BhcnNlcl8gPSBXU0RMUGFyc2VyRmFjdG9yeS5nZXRXU0RMUGFyc2VyKCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50UnVudGltZUlEKFN0cmluZyBjbGllbnRSdW50aW1lSWQpIHsKLQkJY2xpZW50UnVudGltZUlkXyA9IGNsaWVudFJ1bnRpbWVJZDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJRCgpIHsKLQkJcmV0dXJuIHRoaXMuY2xpZW50UnVudGltZUlkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudFByb2plY3QuCi0JICovCi0JcHVibGljIElQcm9qZWN0IGdldENsaWVudFByb2plY3QoKSB7Ci0JCXJldHVybiBwcm94eVByb2plY3RfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbGllbnRQcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgY2xpZW50UHJvamVjdCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KSB7Ci0JCXRoaXMucHJveHlQcm9qZWN0XyA9IGNsaWVudFByb2plY3Q7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRQcm9qZWN0RUFSLgotCSAqLwotCXB1YmxpYyBJUHJvamVjdCBnZXRDbGllbnRQcm9qZWN0RUFSKCkgewotCQlyZXR1cm4gY2xpZW50UHJvamVjdEVBUl87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNsaWVudFByb2plY3RFQVIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRQcm9qZWN0RUFSIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0RUFSKElQcm9qZWN0IGNsaWVudFByb2plY3RFQVIpIHsKLQkJdGhpcy5jbGllbnRQcm9qZWN0RUFSXyA9IGNsaWVudFByb2plY3RFQVI7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSB0ZXN0UHJveHlTZWxlY3RlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0UHJveHlTZWxlY3RlZCgpIHsKLQkJcmV0dXJuIHRlc3RQcm94eVNlbGVjdGVkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGVzdFByb3h5U2VsZWN0ZWQKLQkgKiAgICAgICAgICAgIFRoZSB0ZXN0UHJveHlTZWxlY3RlZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGVzdFByb3h5U2VsZWN0ZWQoYm9vbGVhbiB0ZXN0UHJveHlTZWxlY3RlZCkgewotCQl0aGlzLnRlc3RQcm94eVNlbGVjdGVkXyA9IHRlc3RQcm94eVNlbGVjdGVkOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NkbFVSTC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkwoKSB7Ci0JICByZXR1cm4gd3NkbFVSTF87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHdzZGxVUkwKLQkgKiAgICAgICAgICAgIFRoZSB3c2RsVVJMIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJMKFN0cmluZyB3c2RsVVJMKSB7Ci0JCXRoaXMud3NkbFVSTF8gPSB3c2RsVVJMOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50U2VydmVyLgotCSAqLwotCXB1YmxpYyBJU2VydmVyIGdldENsaWVudEV4aXN0aW5nU2VydmVyKCkgewotCQlyZXR1cm4gY2xpZW50RXhpc3RpbmdTZXJ2ZXJfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbGllbnRTZXJ2ZXIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRTZXJ2ZXIgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldENsaWVudFNlcnZlcihTdHJpbmcgY2xpZW50U2VydmVyKSB7Ci0JCXRoaXMuY2xpZW50U2VydmVyXyA9IGNsaWVudFNlcnZlcjsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNDbGllbnRJc0V4aXN0aW5nU2VydmVyKCkgewotCQlyZXR1cm4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcl87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRJc0V4aXN0aW5nU2VydmVyIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnRJc0V4aXN0aW5nU2VydmVyKGJvb2xlYW4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcikgewotCQl0aGlzLmNsaWVudElzRXhpc3RpbmdTZXJ2ZXJfID0gY2xpZW50SXNFeGlzdGluZ1NlcnZlcjsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncygpIHsKLQkJcmV0dXJuIGN1c3RvbWl6ZU1hcHBpbmdzXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncyhib29sZWFuIHZhbHVlKSB7Ci0JCWN1c3RvbWl6ZU1hcHBpbmdzXyA9IHZhbHVlOwotCX0KLQotCXByaXZhdGUgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tU2VydmVyTGFiZWwoKSB7Ci0JCWlmICh0cnVlKQotCQkvLyByc2sgcmV2aXNpdCBpZiAoY2xpZW50SXNFeGlzdGluZ1NlcnZlcl8pCi0JCXsKLQkJCS8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIFdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZVJlZ2lzdHJ5Ci0JCQl7Ci0JCQkJSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLQkJCQlpZiAoc2VydmVycyAhPSBudWxsICYmIHNlcnZlcnMubGVuZ3RoIT0wKSB7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykgewotCQkJCQkJSVNlcnZlciBzZXJ2ZXIgPSAoSVNlcnZlcikgc2VydmVyc1tpXTsKLQkJCQkJCWlmICgoc2VydmVyLmdldE5hbWUoKSkuZXF1YWxzKGNsaWVudFNlcnZlcl8pKQotCQkJCQkJCXJldHVybiBzZXJ2ZXI7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkvLwotCQl9IGVsc2UgewotCQkJLy9UT0RPIGNyZWF0ZSB0aGUgc2VydmVyCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlQcm9qZWN0Rm9sZGVyLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlQcm9qZWN0Rm9sZGVyKCkgewotCQlpZiAocHJveHlQcm9qZWN0XyE9bnVsbCkgewotCQkJcHJveHlQcm9qZWN0Rm9sZGVyXyA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb3h5UHJvamVjdF8gKS50b1N0cmluZygpOwotCQl9CQkKLQkJcmV0dXJuIHByb3h5UHJvamVjdEZvbGRlcl87ICAKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpIHsKLQkJcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlcl8gPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQl9Ci0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBnZW5lcmF0ZVByb3h5LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKSB7Ci0JCXJldHVybiBnZW5lcmF0ZVByb3h5XzsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIGdlbmVyYXRlUHJveHkgVGhlIGdlbmVyYXRlUHJveHkgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KSB7Ci0JCXRoaXMuZ2VuZXJhdGVQcm94eV8gPSBnZW5lcmF0ZVByb3h5OwotCX0KLQkKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzQ2xpZW50U2NlbmFyaW9fLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGdldElzQ2xpZW50U2NlbmFyaW8oKQotICAgIHsKLSAgICAgIHJldHVybiBpc0NsaWVudFNjZW5hcmlvXzsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGlzQ2xpZW50U2NlbmFyaW9fIFRoZSBpc0NsaWVudFNjZW5hcmlvXyB0byBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SXNDbGllbnRTY2VuYXJpbyhib29sZWFuIGlzQ2xpZW50U2NlbmFyaW8pCi0gICAgewotICAgICAgaXNDbGllbnRTY2VuYXJpb18gPSBpc0NsaWVudFNjZW5hcmlvOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0gc2V0RW5kcG9pbnRNZXRob2QgVGhlIHNldEVuZHBvaW50TWV0aG9kIHRvIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNldEVuZHBvaW50TWV0aG9kKCkKLSAgICB7Ci0gICAgICByZXR1cm4gInNldEVuZHBvaW50IjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRJbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudElucHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzllZGYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudElucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50SW5wdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd3NjXzsKLQotCQlwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0XyA9IG51bGw7Ci0JCXByaXZhdGUgU3RyaW5nIHdzZGxVUkxfOwotCQlwcml2YXRlIFN0cmluZyBjbGllbnRTZXJ2ZXJfOwotCQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIEF4aXNDbGllbnRJbnB1dENvbW1hbmQoKSB7Ci0JCX0KLQkJCi0JCXB1YmxpYyBBeGlzQ2xpZW50SW5wdXRDb21tYW5kKElXZWJTZXJ2aWNlQ2xpZW50IHdzYywgSUNvbnRleHQgY29udGV4dCwgU3RyaW5nIHByb2plY3QpIHsKLQkJCXdzY18gPSB3c2M7Ci0JCQljbGllbnRQcm9qZWN0XyA9IHByb2plY3Q7IAotCQl9Ci0JCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7CSAgICAKLQkJd3NkbFVSTF8gPSB3c2NfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0V3NkbFVSTCgpOwotCQljbGllbnRTZXJ2ZXJfID0gd3NjXy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgfQotCi0JcHVibGljIFN0cmluZyBnZXRDbGllbnRTZXJ2ZXIoKSB7Ci0JCXJldHVybiBjbGllbnRTZXJ2ZXJfOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdCgpIHsKLQkJcmV0dXJuIGNsaWVudFByb2plY3RfOwotCX0KLQotCXB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpIHsKLQkJcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkwoKSB7Ci0JCXJldHVybiB3c2RsVVJMXzsKLQl9Ci0JICAKLQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNzI5ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BeGlzQ2xpZW50T3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQkKLQlwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdzY187Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuXzsKLQlwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50XzsKLQkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIEF4aXNDbGllbnRPdXRwdXRDb21tYW5kKCkgewotCQl9Ci0JCQotCQlwdWJsaWMgQXhpc0NsaWVudE91dHB1dENvbW1hbmQoSVdlYlNlcnZpY2VDbGllbnQgd3NjLCBJQ29udGV4dCBjb250ZXh0KSB7Ci0JCQl3c2NfID0gd3NjOwotCQl9Ci0JCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7CQotCQl3c2NfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuc2V0SW1wbFVSTChwcm94eUJlYW5fKTsKLQkJd3NjXy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLnNldFByb3h5RW5kcG9pbnQocHJveHlFbmRwb2ludF8pOwotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQotCXB1YmxpYyB2b2lkIHNldFByb3h5QmVhbihTdHJpbmcgcHJveHlCZWFuKSB7Ci0JCXRoaXMucHJveHlCZWFuXyA9IHByb3h5QmVhbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm94eUVuZHBvaW50KFN0cmluZyBwcm94eUVuZHBvaW50KSB7Ci0JCXRoaXMucHJveHlFbmRwb2ludF8gPSBwcm94eUVuZHBvaW50OwotCX0KLQkgIAotCQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQ29weUNsaWVudFdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NvcHlDbGllbnRXU0RMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTkyNzdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQ29weUNsaWVudFdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwODE1ICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb3B5Q2xpZW50V1NETENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTF87Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFdTRExQYXRoTmFtZV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd3NQYXJzZXJfOwotICAKLSAgcHVibGljIENvcHlDbGllbnRXU0RMQ29tbWFuZCgpCi0gIHsKLSAgIAotICB9Ci0gIAotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBEZWZpbml0aW9uIGRlZiA9IHdzUGFyc2VyXy5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMXyk7Ci0gICAgaWYoZGVmPT1udWxsKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XU0RMX05PX0RFRklOSVRJT04sIG5ldyBTdHJpbmdbXXt3c2RsVVJMX30pKTsKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIElQYXRoIGNsaWVudFdTRExQYXRoID0gbmV3IFBhdGgoY2xpZW50V1NETFBhdGhOYW1lXyk7Ci0gICAgSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlUm9vdCA9IEZpbGVSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKTsKLSAgICBzdGF0dXMgPSByZXNvbHZlV1NETCh3b3Jrc3BhY2VSb290LCBkZWYsIGNsaWVudFdTRExQYXRoLCBlbnYsIG1vbml0b3IpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotCXByaXZhdGUgSVN0YXR1cyByZXNvbHZlV1NETCgKLQkJSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlLAotCQlEZWZpbml0aW9uIHdzZGxEZWYsCi0JCUlQYXRoIHdzZGxQYXRoLAotCQlJRW52aXJvbm1lbnQgZW52LCAKLQkJSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCXRyeSB7Ci0JCQl3cml0ZVdTRExGaWxlKHdvcmtzcGFjZSwgd3NkbERlZiwgd3NkbFBhdGgsIGVudiwgbW9uaXRvcik7Ci0JCQlNYXAgaW1wb3J0RGVmcyA9IHdzZGxEZWYuZ2V0SW1wb3J0cygpOwotCQkJU2V0IGtleXNTZXQgPSBpbXBvcnREZWZzLmtleVNldCgpOwotCQkJZm9yIChJdGVyYXRvciBlID0ga2V5c1NldC5pdGVyYXRvcigpOyBlLmhhc05leHQoKTspIHsKLQkJCQlPYmplY3Qga2V5TmFtZSA9IGUubmV4dCgpOwotCQkJCVZlY3RvciB2ZWN0b3IgPSAoVmVjdG9yKSBpbXBvcnREZWZzLmdldChrZXlOYW1lKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7IGkrKykgewotCQkJCQlJbXBvcnQgaW1wb3J0RGVmID0gKEltcG9ydCkgdmVjdG9yLmdldChpKTsKLQkJCQkJRGVmaW5pdGlvbiBkZWYgPSBpbXBvcnREZWYuZ2V0RGVmaW5pdGlvbigpOwotCQkJCQlTdHJpbmcgbmV3UGF0aFN0cmluZyA9Ci0JCQkJCQl3c2RsUGF0aC50b1N0cmluZygpLnN1YnN0cmluZygKLQkJCQkJCQkwLAotCQkJCQkJCXdzZGxQYXRoLnRvU3RyaW5nKCkubGFzdEluZGV4T2YoIi8iKSArIDEpOwkgLy8kTk9OLU5MUy0xJAotCQkJCQlpZiAoaXNJbnZhbGlkSW1wb3J0V1NETChpbXBvcnREZWYuZ2V0TG9jYXRpb25VUkkoKSkpIHsKLQkJCQkJICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSU1QT1JUX1dTREwsbmV3IFN0cmluZ1tde2ltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpfSkpOwotCQkJCQl9Ci0JCQkJCUlQYXRoIG5ld1BhdGggPQotCQkJCQkJbmV3IFBhdGgobmV3UGF0aFN0cmluZyArIGltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpKTsKLQkJCQkJSVN0YXR1cyBzdGF0dXMgPSByZXNvbHZlV1NETCh3b3Jrc3BhY2UsIGRlZiwgbmV3UGF0aCwgZW52LCBtb25pdG9yKTsKLQkJCQkJaWYgKHN0YXR1cyAhPSBudWxsCi0JCQkJCQkmJiBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJCXJldHVybiBzdGF0dXM7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTREwsbmV3IFN0cmluZ1tdIHsgd3NkbFBhdGgudG9TdHJpbmcoKSB9KSwgZSk7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzSW52YWxpZEltcG9ydFdTREwoU3RyaW5nIHdzZGxQYXRoKSB7Ci0KLQkJLy8gcmVsYXRpdmUgdXJsCi0JCWlmICghd3NkbFBhdGgudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJodHRwOi8vIikpIHsgLy8kTk9OLU5MUy0xJAotCi0JCQlpZiAod3NkbFBhdGguaW5kZXhPZigiLyIpICE9IC0xKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAoIXdzZGxQYXRoLnN0YXJ0c1dpdGgoIi4vIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHdyaXRlV1NETEZpbGUoCi0JCUlXb3Jrc3BhY2VSb290IHdvcmtzcGFjZSwKLQkJRGVmaW5pdGlvbiB3c2RsRGVmLAotCQlJUGF0aCB3c2RsUGF0aCwKLQkJSUVudmlyb25tZW50IGVudiwgCi0JCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCS8vV1NETEZhY3Rvcnkgd3NkbEZhY3RvcnkgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkvL1dTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLQkJV1NETFdyaXRlciB3c2RsV3JpdGVyID0gKG5ldyBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGwoKSkubmV3V1NETFdyaXRlcigpOwotCQl3c2RsV3JpdGVyLndyaXRlV1NETCh3c2RsRGVmLCBiYW9zKTsKLQkJYnl0ZVtdIGIgPSBiYW9zLnRvQnl0ZUFycmF5KCk7Ci0JCUJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYik7Ci0KLSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9ICgoQmFzZUVjbGlwc2VFbnZpcm9ubWVudCllbnYpLmdldFJlc291cmNlQ29udGV4dCgpOyAgICAKLSAgICAKLQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZSgKLQkJCWNvbnRleHQsCi0JCQl3c2RsUGF0aC5tYWtlQWJzb2x1dGUoKSwKLQkJCWJhaXMsCi0JCQltb25pdG9yLAotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0KLQkJYmFvcy5jbG9zZSgpOwotCQliYWlzLmNsb3NlKCk7Ci0KLQl9ICAKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gY2xpZW50V1NETFBhdGhOYW1lXyBUaGUgY2xpZW50V1NETFBhdGhOYW1lXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRXU0RMUGF0aE5hbWUoU3RyaW5nIGNsaWVudFdTRExQYXRoTmFtZSkKLSAgewotICAgIHRoaXMuY2xpZW50V1NETFBhdGhOYW1lXyA9IGNsaWVudFdTRExQYXRoTmFtZTsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHdzZGxVUkxfIFRoZSB3c2RsVVJMXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJMKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgdGhpcy53c2RsVVJMXyA9IHdzZGxVUkw7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c1BhcnNlcl8gVGhlIHdzUGFyc2VyXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3c1BhcnNlcikKLSAgewotICAgIHRoaXMud3NQYXJzZXJfID0gd3NQYXJzZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNWVjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0RlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTAzICAgMTI2ODE5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwODAxMjIgICAyMTU4NjYgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5QbGF0Zm9ybVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLk1vZHVsZUNvcmVOYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyCWphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3QJCQkJCXByb3h5UHJvamVjdF87Ci0JcHJpdmF0ZSBTdHJpbmcJCQkJCQlXU0RMU2VydmljZVVSTF87Ci0JcHJpdmF0ZSBTdHJpbmcJCQkJCQlXU0RMU2VydmljZVBhdGhuYW1lXzsKLQlwcml2YXRlIFN0cmluZwkJCQkJCW91dHB1dEZvbGRlcl87Ci0KLQlwdWJsaWMgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQoKQotCXsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlJU3RhdHVzIHN0YXR1czsKLQkJCi0JCWlmKCBvdXRwdXRGb2xkZXJfID09IG51bGwgKQotCQl7Ci0JCQlJUGF0aFtdIHBhdGhzID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKHByb3h5UHJvamVjdF8pOwotCQkJb3V0cHV0Rm9sZGVyXyA9IHBhdGhzWzBdLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCWlmIChqYXZhV1NETFBhcmFtXyA9PSBudWxsKQotCQl7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscwotCQkJCQkuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJamF2YVdTRExQYXJhbV8uc2V0TWV0YUluZk9ubHkoZmFsc2UpOwotCQlqYXZhV1NETFBhcmFtXy5zZXRTZXJ2ZXJTaWRlKEphdmFXU0RMUGFyYW1ldGVyLlNFUlZFUl9TSURFX05PTkUpOwotCQlNb2R1bGVDb3JlTmF0dXJlIG1uID0gTW9kdWxlQ29yZU5hdHVyZS5nZXRNb2R1bGVDb3JlTmF0dXJlKHByb3h5UHJvamVjdF8pOwotCQlpZiAobW4gIT0gbnVsbCkKLQkJewotCQkJSVBhdGggd2ViTW9kdWxlU2VydmVyUm9vdCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb3h5UHJvamVjdF8pOwotCQkJLy8gU3RyaW5nIG91dHB1dCA9IFBsYXRmb3JtVXRpbHMuZ2V0UGxhdGZvcm1VUkwod2ViTW9kdWxlU2VydmVyUm9vdCk7Ci0JCQlTdHJpbmcgb3V0cHV0ID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod2ViTW9kdWxlU2VydmVyUm9vdCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJLy8gU3RyaW5nIG91dHB1dCA9Ci0JCQkvLyBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGb2xkZXIod2ViTW9kdWxlU2VydmVyUm9vdCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJSVBhdGggamF2YU91dHB1dCA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKCBuZXcgUGF0aCggb3V0cHV0Rm9sZGVyXyApKS5nZXRMb2NhdGlvbigpOwotCQkJamF2YVdTRExQYXJhbV8uc2V0SmF2YU91dHB1dChqYXZhT3V0cHV0LnRvU3RyaW5nKCkpOwotCQkJCi0KLQkJCUlQYXRoIHdlYk1vZHVsZVBhdGggPSBSZXNvdXJjZVV0aWxzLmdldFdlYkNvbXBvbmVudFNlcnZlclJvb3RQYXRoKHByb3h5UHJvamVjdF8pOwotCQkJLy8gb3V0cHV0ID0gUGxhdGZvcm1VdGlscy5nZXRQbGF0Zm9ybVVSTCh3ZWJNb2R1bGVQYXRoKTsKLQkJCUlSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3ZWJNb2R1bGVQYXRoKTsKLQkJCWlmIChyZXMgIT0gbnVsbCkgewotCQkJCW91dHB1dCA9IHJlcy5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCQlqYXZhV1NETFBhcmFtXy5zZXRPdXRwdXQob3V0cHV0KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8vIENoZWNrIGlmIGl0J3MgYSBwbGFpbiBvbGQgSmF2YSBwcm9qZWN0Ci0JCQlpZiAoUmVzb3VyY2VVdGlscy5pc0phdmFQcm9qZWN0KHByb3h5UHJvamVjdF8pKQotCQkJewotCQkJCUlQYXRoIG91dHB1dCA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKCBuZXcgUGF0aCggb3V0cHV0Rm9sZGVyXyApKS5nZXRMb2NhdGlvbigpOwotCQkJCWphdmFXU0RMUGFyYW1fLnNldEphdmFPdXRwdXQob3V0cHV0LnRvU3RyaW5nKCkpOwotCQkJCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dChvdXRwdXQudG9TdHJpbmcoKSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLy8gTm90IGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHByb2plY3QKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX05PX0pBVkFfTkFUVVJFKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQl9Ci0JCWlmIChXU0RMU2VydmljZVBhdGhuYW1lXyA9PSBudWxsKQotCQl7Ci0JCQlpZiAoV1NETFNlcnZpY2VVUkxfID09IG51bGwpCi0JCQl7Ci0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9MT0NBVElPTl9OT1RfU0VUKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJV1NETFNlcnZpY2VVUkxfID0gUGxhdGZvcm1VdGlscy5nZXRGaWxlRnJvbVBsYXRmb3JtKFdTRExTZXJ2aWNlUGF0aG5hbWVfKTsKLQkJfQotCQlqYXZhV1NETFBhcmFtXy5zZXRJbnB1dFdzZGxMb2NhdGlvbihXU0RMU2VydmljZVVSTF8pOwotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIAotCSAqIEByZXR1cm4gSmF2YVdTRExQYXJhbWV0ZXIKLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0JewotCQlyZXR1cm4gamF2YVdTRExQYXJhbV87Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiAKLQkgKiBAcGFyYW0gamF2YVdTRExQYXJhbQotCSAqICAgICAgICAgIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLQl7Ci0JCXRoaXMuamF2YVdTRExQYXJhbV8gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwcm94eVByb2plY3RfCi0JICogICAgICAgICAgVGhlIHByb3h5UHJvamVjdF8gdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFByb3h5UHJvamVjdChJUHJvamVjdCBwcm94eVByb2plY3QpCi0JewotCQl0aGlzLnByb3h5UHJvamVjdF8gPSBwcm94eVByb2plY3Q7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHNlcnZpY2VVUkxfCi0JICogICAgICAgICAgVGhlIHdTRExTZXJ2aWNlVVJMXyB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0V1NETFNlcnZpY2VVUkwoU3RyaW5nIHNlcnZpY2VVUkwpCi0JewotCQlXU0RMU2VydmljZVVSTF8gPSBzZXJ2aWNlVVJMOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2aWNlUGF0aG5hbWVfCi0JICogICAgICAgICAgVGhlIHdTRExTZXJ2aWNlUGF0aG5hbWVfIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXU0RMU2VydmljZVBhdGhuYW1lKFN0cmluZyBzZXJ2aWNlUGF0aG5hbWUpCi0JewotCQlXU0RMU2VydmljZVBhdGhuYW1lXyA9IHNlcnZpY2VQYXRobmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dEZvbGRlcigpCi0JewotCSAgcmV0dXJuIG91dHB1dEZvbGRlcl87CQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRPdXRwdXRGb2xkZXIoU3RyaW5nIG91dHB1dEZvbGRlcikKLQl7Ci0JCW91dHB1dEZvbGRlcl8gPSBvdXRwdXRGb2xkZXI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzMwYmRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbiBleHRlbmRzIFBsdWdpbgotewotCi0JLyoqCi0JKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotCSovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPQotCQkib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiOwotCi0JLyoqCi0JKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0JKi8KLQlwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4gaW5zdGFuY2VfOwotCXByaXZhdGUgSUxvZyBsb2dfOwotCi0JLyoqCi0JKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLQkqIFRoZSAicGx1Z2luIiBlbGVtZW50IGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZQotCSogY2xhc3MgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luIi4KLQkqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotCSovCi0JcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZV8gPSB0aGlzOwotCQl9Ci0JCWxvZ18gPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCi0JfQotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBsb2dnaW5nIGZyb20gYmxvd2luZyB1cC4KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gSUQ7ICAKLSAgfQotICAKLQkvKioKLQkqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0JKiAoV2ViU2VydmljZVdhc0NvbnN1bXB0aW9uUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2UuanN0LndzLndhcy52NS50cCIpOwotCSogQHJldHVybiBUaGUgV2ViU2VydmljZVdhc0NvbnN1bXB0aW9uUGx1Z2luIHNpbmdsZXRvbi4KLQkqLwotCXN0YXRpYyBwdWJsaWMgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQotCS8qKgotCSogQ2FsbGVkIG9uY2UgYnkgdGhlIHBsYXRmb3JtIHdoZW4gdGhpcyBwbHVnaW4gaXMgZmlyc3QgbG9hZGVkLgotCSogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoaXMgcGx1Z2luIGZhaWxzIHRvIHN0YXJ0LgotCSovCi0JcHVibGljIHZvaWQgc3RhcnQoIEJ1bmRsZUNvbnRleHQgYnVuZGxlICkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjYsIHRoaXMsICJzdGFydCIsICJTdGFydGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RhcnQoIGJ1bmRsZSApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjYsIHRoaXMsICJzdGFydCIsIGV4YyApOwotICAgIH0KLQl9Ci0KLQkvKioKLQkqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIHVubG9hZGVkLgotCSogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoaXMgcGx1Z2luIGZhaWxzIHRvIHNodXRkb3duLgotCSovCi0JcHVibGljIHZvaWQgc3RvcCggQnVuZGxlQ29udGV4dCBjb250ZXh0ICkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjcsIHRoaXMsICJzaHV0ZG93biIsICJTaHV0dGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjYsIHRoaXMsICJzdG9wIiwgZXhjICk7ICAgICAgCi0gICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL0F4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL0F4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI4YjIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9BeGlzRW1pdHRlclByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckRlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci0KLQotCi1wdWJsaWMgY2xhc3MgQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi17Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwMSBmb3IgdGhlIEF4aXMgRW1pdHRlciBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfUEFHRSA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFBBRTAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBhbGxXYW50ZWQ7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwMiBmb3IgdGhlIGFsbCB3YW50ZWQgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDAyIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gaGVscGVyV2FudGVkOwotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDMgZm9yIGhlbHBlciB3YW50ZWQgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDAzIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gd3JhcEFycmF5czsKLSAgLypDT05URVhUX0lEIFBQQUUwMDA0IGZvciB0aGUgd3JhcCBhcnJheXMgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwNCI7Ci0KLSAgcHJpdmF0ZSBDb21ibyBkZXBsb3lTY29wZVR5cGVzOwotICAvLypDT05URVhUX0lEIFBQQUUwMDA1IGZvciB0aGUgZGVwbG95IHNjb3BlIHR5cGUgY29tYm8gYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DT01CT19ERVBMT1lfU0NPUEUgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDA1IjsKLSAgCi0gIHByaXZhdGUgU3RhY2tMYXlvdXQgdGltZU91dFN1YkNvbXBvc2l0ZVN0YWNrTGF5b3V0OwotICAKLSAgcHJpdmF0ZSBUZXh0IHRpbWVPdXRGaWVsZDsKLSAgaW50IHRpbWVPdXQ7Ci0gIFN0cmluZyB3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIkF4aXNXc2RsMkphdmFUaW1lb3V0Iik7Ci0gIAotICBwcml2YXRlIFRleHQgdGltZU91dE1zZ1RleHQ7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwNiBmb3IgdGhlIHRpbWUgb3V0IGZpZWxkIG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0ZJRUxEX1RJTUVfT1VUID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwNiI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gdXNlSW5oZXJpdGVkTWV0aG9kczsKLSAgLypDT05URVhUX0lEIFBQQUUwMDA3IGZvciB0aGUgdXNlIGluaGVyaXRlZCBtZXRob2RzIGNoZWNrIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFMgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDA3IjsKLQotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZUFnYWluc3RKQVhSUEM7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAxMCBmb3IgdGhlICJ2YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQy4uLiIgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAxMCI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDggZm9yIHRoZSB3c2RsMmphdmEgZ3JvdXAgb24gdGhlIEF4aXMgRW1pdHRlciBQcmVmZXJlbmNlIHBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfR1JPVVBfV1NETDJKQVZBID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwOCI7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwOSBmb3IgdGhlIGphdmEyd3NkbCBncm91cCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9HUk9VUF9KQVZBMldTREwgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDA5IjsKLS8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0JVUlVdGlscyB1dGlscyA9IG5ldyBVSVV0aWxzKCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKTsKLSAgCUlXb3JrYmVuY2hIZWxwU3lzdGVtIGhlbHBTeXN0ZW0gPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKTsKLSAgCQotICAgIENvbXBvc2l0ZSAgIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHN1cGVycGFyZW50LCBTV1QuTk9ORSApOwkKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9QQUdFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAocGFyZW50LCBJTkZPUE9QX1BQQUVfUEFHRSk7Ci0gICAgR3JvdXAgd3NkbDJKYXZhR3JvdXAgPSB1dGlscy5jcmVhdGVHcm91cChwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuR1JPVVBfV1NETDJKQVZBX05BTUUsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0dST1VQX1dTREwySkFWQSwgSU5GT1BPUF9QUEFFX0dST1VQX1dTREwySkFWQSwgMiwgMTAsMTApOwotICAgIGFsbFdhbnRlZCA9IGNyZWF0ZUNoZWNrQm94KHdzZGwySmF2YUdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9BTExfV0FOVEVELEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQpOwotCi0gICAgaGVscGVyV2FudGVkICA9IGNyZWF0ZUNoZWNrQm94KHdzZGwySmF2YUdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9IRUxQRVJfV0FOVEVELEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQpOwotCi0gICAgd3JhcEFycmF5cyA9IGNyZWF0ZUNoZWNrQm94KHdzZGwySmF2YUdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XUkFQX0FSUkFZUyxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DSEVDS0JPWF9XUkFQX0FSUkFZUyxJTkZPUE9QX1BQQUVfQ0hFQ0tCT1hfV1JBUF9BUlJBWVMpOyAgICAKLSAgICAKLSAgICBkZXBsb3lTY29wZVR5cGVzID0gdXRpbHMuY3JlYXRlQ29tYm8od3NkbDJKYXZhR3JvdXAsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfREVQTE9ZX1NDT1BFLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DT01CT19ERVBMT1lfU0NPUEUsIElORk9QT1BfUFBBRV9DT01CT19ERVBMT1lfU0NPUEUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSk7Ci0gICAgLyogCi0gICAgICogRW5zdXJlIHRoZSBvcmRlciBpcyB0aGUgc2FtZSBhcyBpdCBpbiB0aGUgZmllbGRzIGZvciBjbGFzcwotICAgICAqIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQKLSAgICAgKi8KLSAgICBkZXBsb3lTY29wZVR5cGVzLnNldEl0ZW1zKG5ldyBTdHJpbmcgW117QXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5ERVBMT1lfU0NPUEVfQVBQTElDQVRJT04sIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuREVQTE9ZX1NDT1BFX1JFUVVFU1QsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5ERVBMT1lfU0NPUEVfU0VTU0lPTn0pOwotICAgIAotICAgIExhYmVsIHRpbWVvdXRMYWJlbCA9IG5ldyBMYWJlbCh3c2RsMkphdmFHcm91cCwgU1dULldSQVApOwotICAgIHRpbWVvdXRMYWJlbC5zZXRUZXh0KEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVElNRV9PVVQpOwotICAgIHRpbWVvdXRMYWJlbC5zZXRUb29sVGlwVGV4dChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9GSUVMRF9USU1FX09VVCk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIHRpbWVPdXRTdWJDb21wb3NpdGUgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUod3NkbDJKYXZhR3JvdXAsIDEpOwotICAgIHRpbWVPdXRTdWJDb21wb3NpdGVTdGFja0xheW91dCA9IG5ldyBTdGFja0xheW91dCgpOwotICAgIHRpbWVPdXRTdWJDb21wb3NpdGUuc2V0TGF5b3V0KHRpbWVPdXRTdWJDb21wb3NpdGVTdGFja0xheW91dCk7Ci0gICAgCi0gICAgLy8gb25seSBvbmUgb2YgdGhpcyBpcyBkaXNwbGF5ZWQgYXQgb25lIHRpbWUsIHRoZXkgc2hhcmUgaW5mb3BvcCBhbmQgdG9vbHRpcCB0ZXh0Ci0gICAgdGltZU91dEZpZWxkID0gY3JlYXRlVGV4dEZpZWxkKHRpbWVPdXRTdWJDb21wb3NpdGUsIG51bGwgLEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0ZJRUxEX1RJTUVfT1VULElORk9QT1BfUFBBRV9GSUVMRF9USU1FX09VVCk7Ci0gICAgdGltZU91dE1zZ1RleHQgPSBjcmVhdGVUZXh0RmllbGQodGltZU91dFN1YkNvbXBvc2l0ZSwgbnVsbCAsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfRklFTERfVElNRV9PVVQsSU5GT1BPUF9QUEFFX0ZJRUxEX1RJTUVfT1VUKTsKLSAgICAKLSAgICB0aW1lT3V0TXNnVGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7Ci0gICAgCi0gICAgR3JvdXAgamF2YTJXc2RsR3JvdXAgPSB1dGlscy5jcmVhdGVHcm91cChwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuR1JPVVBfSkFWQTJXU0RMX05BTUUsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0dST1VQX0pBVkEyV1NETCwgSU5GT1BPUF9QUEFFX0dST1VQX0pBVkEyV1NETCwgMiwgMTAsMTApOwotICAgIHVzZUluaGVyaXRlZE1ldGhvZHMgPSBjcmVhdGVDaGVja0JveChqYXZhMldzZGxHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fVVNFX0lOSEVSSVRFRF9NRVRIT0RTLEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1VTRV9JTkhFUklURURfTUVUSE9EUyxJTkZPUE9QX1BQQUVfQ0hFQ0tCT1hfVVNFX0lOSEVSSVRFRF9NRVRIT0RTKTsKLSAgICB2YWxpZGF0ZUFnYWluc3RKQVhSUEMgPSBjcmVhdGVDaGVja0JveChqYXZhMldzZGxHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfQ0hFQ0tCT1hfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDKTsKLQotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOyAgICAKLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGNoZWNrYm94IHdpdGggaG9yaXpvbnRhbFNwYW4gPSAyIGluIGl0cyBncmlkIGRhdGEgaW4gb3JkZXIgdG8KLSAgICogbWF0Y2ggdGhlIGdyaWQgbGF5b3V0IGZvciBjb21ibyAKLSAgICovCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUNoZWNrQm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwgU1dULkNIRUNLICk7Ci0gICAgYnV0dG9uLnNldFRleHQobGFiZWxOYW1lKTsKLSAgICBidXR0b24uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggYnV0dG9uLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLiIgKyBpbmZvcG9wICk7Ci0JR3JpZERhdGEgZ2Q9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7Ci0JZ2QuaG9yaXpvbnRhbFNwYW49IDI7Ci0JYnV0dG9uLnNldExheW91dERhdGEoZ2QpOwkKLSAgICByZXR1cm4gYnV0dG9uOwotICB9Ci0gICAgIAotICBwcml2YXRlIFRleHQgY3JlYXRlVGV4dEZpZWxkKENvbXBvc2l0ZSBwYXJlbnQsU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wKSAKLSAgeyB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gbGFiZWxOYW1lIDogdG9vbHRpcDsKLQlpZiggbGFiZWxOYW1lICE9IG51bGwgKQotICAgIHsKLSAgICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKCBwYXJlbnQsIFNXVC5XUkFQKTsKLSAgICAgIGxhYmVsLnNldFRleHQoIGxhYmVsTmFtZSApOwotICAgICAgbGFiZWwuc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICB9Ci0gICAgIFRleHQgdGV4dCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgICB0ZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgIHRleHQuc2V0VG9vbFRpcFRleHQodG9vbHRpcCk7Ci0gICAgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCB0ZXh0LCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLiIgKyBpbmZvcG9wICk7Ci0gICAgIAotICAgICB0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKCBuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJbnVtYmVyRmllbGRDaGFuZ2VkKChUZXh0KSBlLndpZGdldCk7Ci0JCX0KLQkgfQotICAgICApOwotICAgICByZXR1cm4gdGV4dDsKLSAgfQotCi0gIC8qKgotICAgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkKLSAgewotICAgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotICAgIGluaXRpYWxpemVEZWZhdWx0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICogIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0gIHsKLSAgICBpZih2YWxpZGF0ZU51bWJlcih0aW1lT3V0RmllbGQuZ2V0VGV4dCgpKS5pc09LKCkpCi0gICAgCXN0b3JlVmFsdWVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotICB7Ci0gICAgcGVyZm9ybU9rKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICB7IH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB1c2luZyBkZWZhdWx0IHZhbHVlcwotICAgKiBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgYWxsV2FudGVkLnNldFNlbGVjdGlvbiggQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRBbGxXYW50ZWREZWZhdWx0KCkpOwotICAgIGhlbHBlcldhbnRlZC5zZXRTZWxlY3Rpb24oIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0SGVscGVyV2FudGVkRGVmYXVsdCgpKTsKLSAgICB3cmFwQXJyYXlzLnNldFNlbGVjdGlvbiggQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRXcmFwQXJyYXlzRGVmYXVsdCgpKTsKLSAgICBkZXBsb3lTY29wZVR5cGVzLnNlbGVjdChBeGlzRW1pdHRlckRlZmF1bHRzLmdldERlcGxveVNjb3BlRGVmYXVsdCgpKTsKLSAgICBpZiAod3NkbDJKYXZhVGltZW91dFByb3BlcnR5ICE9IG51bGwpIHRpbWVPdXRGaWVsZC5zZXRUZXh0KCIiKyBnZXRUaW1lT3V0VmFsdWVXaXRoUHJvcGVydHkoKSk7Ci0gICAgZWxzZSB0aW1lT3V0RmllbGQuc2V0VGV4dCgiIiArIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VGltZU91dERlZmF1bHQoKSk7CQotICAgIHVzZUluaGVyaXRlZE1ldGhvZHMuc2V0U2VsZWN0aW9uKEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VXNlSW5oZXJpdGVkTWV0aG9kc0RlZmF1bHQoKSk7Ci0gICAgdmFsaWRhdGVBZ2FpbnN0SkFYUlBDLnNldFNlbGVjdGlvbihBeGlzRW1pdHRlckRlZmF1bHRzLmdldFZhbGlkYXRlQWdhaW5zdEpBWFJQQygpKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0gIHsKLSAgICAvLyBnZXQgdGhlIHBlcnNpc3RlbnQgY29udGV4dCBmcm9tIHRoZSBwbHVnaW4KLSAgICBBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QXhpc0VtaXR0ZXJDb250ZXh0KCk7Ci0gICAgYWxsV2FudGVkLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0FsbFdhbnRlZEVuYWJsZWQoKSk7Ci0gICAgaGVscGVyV2FudGVkLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0hlbHBlcldhbnRlZEVuYWJsZWQoKSk7Ci0gICAgd3JhcEFycmF5cy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNXcmFwQXJyYXlzRW5hYmxlZCgpKTsKLSAgICBkZXBsb3lTY29wZVR5cGVzLnNlbGVjdChjb250ZXh0LmdldERlcGxveVNjb3BlVHlwZSgpKTsKLSAgICB1c2VJbmhlcml0ZWRNZXRob2RzLnNldFNlbGVjdGlvbiggY29udGV4dC5pc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkpOwotICAgIHZhbGlkYXRlQWdhaW5zdEpBWFJQQy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNWYWxpZGF0ZUFnYWluc3RKQVhSUENFbmFibGVkKCkgKTsKLSAgICBpZiAod3NkbDJKYXZhVGltZW91dFByb3BlcnR5ICE9IG51bGwpIAotICAgIHsJdGltZU91dD1nZXRUaW1lT3V0VmFsdWVXaXRoUHJvcGVydHkoKTsKLSAgICAJLy90aW1lT3V0RmllbGQuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgCXRpbWVPdXRTdWJDb21wb3NpdGVTdGFja0xheW91dC50b3BDb250cm9sID0gdGltZU91dE1zZ1RleHQ7Ci0gICAgICAgIHRpbWVPdXRNc2dUZXh0LnNldFRleHQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfVVNFX0pWTV9BUkdVTUVOVF9GT1JfVElNRV9PVVQpOwkJCi0gICAgfQotCWVsc2UKLQl7Ci0JICAgIHRpbWVPdXQgPSBjb250ZXh0LmdldFRpbWVPdXQoKTsKLQkgICAgdGltZU91dFN1YkNvbXBvc2l0ZVN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSB0aW1lT3V0RmllbGQ7Ci0JfQotICAgIHRpbWVPdXRGaWVsZC5zZXRUZXh0KCIiKyB0aW1lT3V0KTsKLSAgIH0KLQotICAvKioKLSAgICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc3RvcmVWYWx1ZXMoKQotICB7Ci0gICAgLy8gZ2V0IHRoZSBwZXJzaXN0ZW50IGNvbnRleHQgZnJvbSB0aGUgcGx1Z2luCi0gICAgQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0QWxsV2FudGVkRW5hYmxlZCggYWxsV2FudGVkLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRIZWxwZXJXYW50ZWRFbmFibGVkKCBoZWxwZXJXYW50ZWQuZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICBjb250ZXh0LnNldFdyYXBBcnJheXNFbmFibGVkKCB3cmFwQXJyYXlzLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZWxlY3REZXBsb3lTY29wZVR5cGUoZGVwbG95U2NvcGVUeXBlcy5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLSAgICB0aW1lT3V0ID0gSW50ZWdlci5wYXJzZUludCh0aW1lT3V0RmllbGQuZ2V0VGV4dCgpLnRyaW0oKSk7Ci0gICAgY29udGV4dC5zZXRUaW1lT3V0KHRpbWVPdXQpOwotICAgIGNvbnRleHQuc2V0VXNlSW5oZXJpdGVkTWV0aG9kc0VuYWJsZWQoIHVzZUluaGVyaXRlZE1ldGhvZHMuZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICBjb250ZXh0LnNldFZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoIHZhbGlkYXRlQWdhaW5zdEpBWFJQQy5nZXRTZWxlY3Rpb24oKSApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbnVtYmVyRmllbGRDaGFuZ2VkKFRleHQgdGV4dENvbnRyb2wpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSB2YWxpZGF0ZU51bWJlcih0ZXh0Q29udHJvbC5nZXRUZXh0KCkpOwotCQlzZXRWYWxpZCghc3RhdHVzLm1hdGNoZXMoSVN0YXR1cy5FUlJPUikpOwotCQlhcHBseVRvU3RhdHVzTGluZSh0aGlzLHN0YXR1cyk7CQotIH0KLSAgCi0gIHByaXZhdGUgaW50IGdldFRpbWVPdXRWYWx1ZVdpdGhQcm9wZXJ0eSgpIAotICB7Ci0JICBpZiAod3NkbDJKYXZhVGltZW91dFByb3BlcnR5ICE9IG51bGwpCi0JICB7CXRyeSB7Ci0JCSAgbG9uZyB0aW1lT3V0UHJvcGVydHkgPSBMb25nLnBhcnNlTG9uZyh3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkpOwotCQkgIGlmICh0aW1lT3V0UHJvcGVydHkgPCAwKSByZXR1cm4gLTE7IC8vIHRpbWVvdXQgPSAtMSBlcXVhbHMgbmV2ZXIgdGltZSBvdXQ7IHRyZWF0aW5nIGFsbCBuZWdhdGl2ZSBudW1iZXIgYXMgLTEKLQkJICBlbHNlIHJldHVybiAoaW50KU1hdGguY2VpbCh0aW1lT3V0UHJvcGVydHkvMTAwMC4wKTsKLQkgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpewotCSAgICAgIFN5c3RlbS5lcnIucHJpbnQoIkF4aXNXU0RMMkphdmFUaW1lb3V0IGlzIG5vdCBhIHZhbGlkIG51bWJlciIpOwotCSAgICAgIHJldHVybiBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCk7Ci0JICAgIH0KLQkgIH0KLQkgIGVsc2UgcmV0dXJuIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VGltZU91dERlZmF1bHQoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIHZhbGlkYXRlTnVtYmVyKFN0cmluZyBudW1iZXJTdHJpbmcpCi0gIHsKLQkgICAgSVN0YXR1cyBzdGF0dXM7Ci0JCXRyeSAKLQkJewotCQkJaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQobnVtYmVyU3RyaW5nKTsKLQkJCWlmIChudW1iZXIgPD0gMCAmJiBudW1iZXIgIT0gLTEpCi0JCQl7Ci0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9JTlZBTElEX1RJTUVfT1VULCBudWxsKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsJdGltZU91dCA9IG51bWJlcjsKLQkJCQlzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQkJCS8vd2Ugc2V0IHBhcmFtOm1lc3NhZ2U9IiIgaGVyZSwgTGF0ZXIgaW4gCi0JCQkJLy9hcHBseVRvU3RhdHVzTGluZSgpLCB3ZSBkbyBwYWdlLnNldE1lc3NhZ2UobnVsbCx0eXBlKSAKLQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwgSVN0YXR1cy5PSywgIiIsbnVsbCk7Ci0JCQl9Ci0JCX0gCi0JCWNhdGNoIAotCQkoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIAotCQl7Ci0JCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwgSVN0YXR1cy5FUlJPUiwKLQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9USU1FX09VVCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsgCi0gIAl9Ci0gIAotCXByaXZhdGUgdm9pZCBhcHBseVRvU3RhdHVzTGluZShEaWFsb2dQYWdlIHBhZ2UsIElTdGF0dXMgc3RhdHVzKSB7Ci0JCVN0cmluZyBtZXNzYWdlPSBzdGF0dXMuZ2V0TWVzc2FnZSgpOwotCQlzd2l0Y2ggKHN0YXR1cy5nZXRTZXZlcml0eSgpKSB7Ci0JCQljYXNlIElTdGF0dXMuT0s6Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG51bGwsIElNZXNzYWdlUHJvdmlkZXIuTk9ORSk7Ci0JCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElTdGF0dXMuV0FSTklORzoKLQkJCQlwYWdlLnNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKTsKLQkJCQlwYWdlLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJCQlicmVhazsJCQkJCi0JCQljYXNlIElTdGF0dXMuSU5GTzoKLQkJCQlwYWdlLnNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5JTkZPUk1BVElPTik7Ci0JCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQkJYnJlYWs7CQkJCi0JCQlkZWZhdWx0OgotCQkJCWlmIChtZXNzYWdlLmxlbmd0aCgpID09IDApIHsKLQkJCQkJbWVzc2FnZT0gbnVsbDsKLQkJCQl9Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG51bGwpOwotCQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotCQkJCWJyZWFrOwkJCi0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NsaWVudENvZGVHZW5PcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2VjYmUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwOSAgIDEyNTA5NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE1ICAgMTE1MjI1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQuV1NETDJKYXZhQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIENsaWVudENvZGVHZW5PcGVyYXRpb24gZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwcml2YXRlIENvcHlBeGlzSmFyQ29tbWFuZCBjb3B5QXhpc0phckNvbW1hbmQgPSBudWxsOwotCQotCXByaXZhdGUgV1NETDJKYXZhQ29tbWFuZCB3c2RsMkphdmFDb21tYW5kID0gbnVsbDsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQkKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0JCi0JcHJpdmF0ZSBTdHViMkJlYW5Db21tYW5kIHN0dWIyQmVhbkNvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0JcHJpdmF0ZSBTdHJpbmcgb3V0cHV0Rm9sZGVyOwotCXByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLQlwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50OwotCQotCXByaXZhdGUgUmVmcmVzaFByb2plY3RDb21tYW5kIHJlZnJlc2hQcm9qZWN0Q29tbWFuZCA9IG51bGw7Ci0KLQlwdWJsaWMgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbigpewotCQljb3B5QXhpc0phckNvbW1hbmQgPSBuZXcgQ29weUF4aXNKYXJDb21tYW5kKCk7Ci0JCXdzZGwySmF2YUNvbW1hbmQgPSBuZXcgV1NETDJKYXZhQ29tbWFuZCgpOwotCQlzdHViMkJlYW5Db21tYW5kID0gbmV3IFN0dWIyQmVhbkNvbW1hbmQoKTsKLQkJcmVmcmVzaFByb2plY3RDb21tYW5kID0gbmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB7Ci0KLQkJSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0JCUNsaWVudFdTTW9kaWZ5T3BlcmF0aW9uIGJ1T3BlcmF0aW9uID0gbmV3IENsaWVudFdTTW9kaWZ5T3BlcmF0aW9uKGluZm8sIGVudik7Ci0JCXRyeSB7Ci0JCQlidU9wZXJhdGlvbi5leGVjdXRlKG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoKENvcmVFeGNlcHRpb24gY2UpewotCQkJSVN0YXR1cyBzdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0KLQl9Ci0KLQkKLQlwcml2YXRlIGNsYXNzIENsaWVudFdTTW9kaWZ5T3BlcmF0aW9uIGV4dGVuZHMgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIHsKLQkJCi0JCSAgcHJpdmF0ZSBJQWRhcHRhYmxlIGluZm8gPSBudWxsOwotCQkgIHByaXZhdGUgSUVudmlyb25tZW50IGVudiA9IG51bGw7Ci0KLQkJICAKLQkJICBwcm90ZWN0ZWQgQ2xpZW50V1NNb2RpZnlPcGVyYXRpb24oSUFkYXB0YWJsZSBhZGFwdGFibGUsIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCl7Ci0JCQkgIGluZm8gPSBhZGFwdGFibGU7Ci0JCQkgIGVudiA9IGVudmlyb25tZW50OwotCQkgIH0KLQkJICAKLQkJICBwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb257Ci0JCSAgCi0JCQkgICAgSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCi0JCQkgICAgLy8gQ29weUF4aXNKYXJDb21tYW5kCi0JCQkgICAgY29weUF4aXNKYXJDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkgICAgY29weUF4aXNKYXJDb21tYW5kLnNldFByb2plY3QocHJvamVjdCk7Ci0JCQkgICAgc3RhdHVzID0gY29weUF4aXNKYXJDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JCQkgICAgCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkgICAgfQotCQkJCQotCQkJCS8vIFdTREwySmF2YUNvbW1hbmQKLQkJCQl3c2RsMkphdmFDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0V3NkbFVSSSh3c2RsVVJJKTsKLQkJCQlzdGF0dXMgPSB3c2RsMkphdmFDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQkKLQkJCQkvLyBTdHViMkJlYW5Db21tYW5kCi0JCQkJc3R1YjJCZWFuQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0V2ViU2VydmljZXNQYXJzZXIod2ViU2VydmljZXNQYXJzZXIpOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0T3V0cHV0Rm9sZGVyKG91dHB1dEZvbGRlcik7Ci0JCQkJc3R1YjJCZWFuQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0Q2xpZW50UHJvamVjdChwcm9qZWN0KTsKLQkJCQlzdGF0dXMgPSBzdHViMkJlYW5Db21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQlwcm94eUJlYW4gPSBzdHViMkJlYW5Db21tYW5kLmdldFByb3h5QmVhbigpOwotCQkJCXByb3h5RW5kcG9pbnQgPSBzdHViMkJlYW5Db21tYW5kLmdldFByb3h5RW5kcG9pbnQoKTsKLQkJCSAgCi0JCQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldFByb2plY3QocHJvamVjdCk7Ci0JCQkJc3RhdHVzID0gcmVmcmVzaFByb2plY3RDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQkKLQkJICB9Ci0JCQotCX0KLQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0Rm9sZGVyKFN0cmluZyBvdXRwdXRGb2xkZXIpIHsKLQkJdGhpcy5vdXRwdXRGb2xkZXIgPSBvdXRwdXRGb2xkZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpIHsKLQkJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLQl9Ci0JCQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkgewotCQlyZXR1cm4gcHJveHlCZWFuOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByb3h5RW5kcG9pbnQoKSB7Ci0JCXJldHVybiBwcm94eUVuZHBvaW50OwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ29weUF4aXNKYXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NvcHlBeGlzSmFyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmQwZmMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ29weUF4aXNKYXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjM0MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjgJICAxNTU0MzkgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDUwMSAgIDE4NDUwNSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDIgICAxODQ1MDUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFVwZGF0ZSBKQVIgc2l6ZXMKLSAqIDIwMDcxMTAyICAgMjA4NjIwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBVcGRhdGUgSkFSIHNpemVzCi0gKiAyMDA3MTEwMiAgIDIwMjIyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAxMjIgICAyMTYxNjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjI0MTQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZSBzY2VuYXJpb3MgYnJva2UgaW4gbGF0ZXN0IGJ1aWxkcyB3aXRoIEVxdWlub3ggcDIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uLkJ1bmRsZVV0aWxzOwotCi0KLXB1YmxpYyBjbGFzcyBDb3B5QXhpc0phckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBWElTX0pBUiA9ICJheGlzLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBWElTX1JVTlRJTUVfUExVR0lOX0lEID0gIm9yZy5hcGFjaGUuYXhpcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NT05fRElTQ09WRVJZX1BMVUdJTl9JRCA9ICJvcmcuYXBhY2hlLmNvbW1vbnMuZGlzY292ZXJ5IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTU1PTl9ESVNDT1ZFUllfSkFSID0gImNvbW1vbnMtZGlzY292ZXJ5LTAuMi5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfWE1MX1JQQ19QTFVHSU5fSUQgPSAiamF2YXgueG1sLnJwYyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9YTUxfUlBDX0pBUiA9ICJqYXhycGMuamFyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFYX1hNTF9TT0FQX1BMVUdJTl9JRCA9ICJqYXZheC54bWwuc29hcCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9YTUxfU09BUF9KQVIgPSAic2Fhai5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfV1NETF9QTFVHSU5fSUQgPSAiamF2YXgud3NkbCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9XU0RMX0pBUiA9ICJ3c2RsNGouamFyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTU1PTl9MT0dHSU5HX1BMVUdJTl9JRCA9ICJvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NT05fTE9HR0lOR19KQVIgPSAiY29tbW9ucy1sb2dnaW5nLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBsb25nIEFYSVNfSkFSX1NJWkUgPSAxNTg4MDYzTDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIENPTU1PTl9ESVNDT1ZFUllfSkFSX1NJWkUgPSA3MTQ1MUw7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBKQVZBWF9YTUxfUlBDX0pBUl9TSVpFID0gMzIzNjFMOwotCXByaXZhdGUgc3RhdGljIGxvbmcgSkFWQVhfWE1MX1NPQVBfSkFSX1NJWkUgPSAxOTU4Mkw7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBKQVZBWF9XU0RMX0pBUl9TSVpFID0gMTM0MDg1TDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIENPTU1PTl9MT0dHSU5HX0pBUl9TSVpFID0gMzkzNTNMOwotCi0vLyBXZWIgU2VydmljZXMgSmFycyBVc2VkIGluIHByZXZpb3VzIFZlcnNpb25zIG9mIFdUUCBidXQgbm93IG9ic29sZXRlCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gT0JTT0xFVEVfSkFSUyA9IG5ldyBTdHJpbmdbXXsiY29tbW9ucy1kaXNjb3ZlcnkuamFyIiwgImNvbW1vbnMtbG9nZ2luZy0xLjAuNC5qYXIiLCAibG9nNGotMS4yLjQuamFyIiwgImxvZzRqLTEuMi44LmphciIsICJ3c2RsNGotMS41LjEuamFyIiwgImF4aXMtYW50LmphciJ9OwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFUSF9UT19KQVJTX0lOX1BMVUdJTiA9ICJsaWIvIjsKLQotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQlwcml2YXRlIEJvb2xlYW4gcHJvamVjdFJlc3RhcnRSZXF1aXJlZF8gPSBCb29sZWFuLkZBTFNFOwotCXByaXZhdGUgSUNsYXNzcGF0aEVudHJ5W10gb2xkQ2xhc3NwYXRoOwotCXByaXZhdGUgQXJyYXlMaXN0IG5ld0phck5hbWVzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCS8qKgotCSAqIERlZmF1bHQgQ1RPUjsKLQkgKi8KLQlwdWJsaWMgQ29weUF4aXNKYXJDb21tYW5kKCkgewotCX0KLQotCS8qKgotCSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpIHsKLQotCQlJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBST0dSRVNTX0lORk9fQ09QWV9BWElTX0NGRyk7Ci0KLQkJaWYgKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChwcm9qZWN0KSkgewotCQkJY29weUF4aXNKYXJzVG9Qcm9qZWN0KHByb2plY3QsIHN0YXR1cywgZW52LCBtb25pdG9yKTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIENoZWNrIGlmIGl0J3MgYSBwbGFpbiBvbGQgSmF2YSBwcm9qZWN0Ci0JCQlpZiAoSjJFRVV0aWxzLmlzSmF2YUNvbXBvbmVudChwcm9qZWN0KSkgewotCQkJCXN0YXR1cyA9IGFkZEF4aXNKYXJzVG9CdWlsZFBhdGgocHJvamVjdCwgZW52LCBtb25pdG9yKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQkJcmV0dXJuIHN0YXR1czsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX05PX0pBVkFfTkFUVVJFKTsKLQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJcmV0dXJuIHN0YXR1czsKLQkJCX0KLQotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBjb3B5QXhpc0phcnNUb1Byb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVN0YXR1cyBzdGF0dXMsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCi0JCUlQYXRoIHdlYk1vZHVsZVBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7Ci0JCWlmICh3ZWJNb2R1bGVQYXRoID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWRlbGV0ZU9ic29sZXRlSmFycyh3ZWJNb2R1bGVQYXRoKTsKLQotCi0JCWNvcHlJRmlsZShBWElTX1JVTlRJTUVfUExVR0lOX0lELCAibGliLyIgKyBBWElTX0pBUiwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBBWElTX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29weUlGaWxlKENPTU1PTl9ESVNDT1ZFUllfUExVR0lOX0lELCAibGliLyIgKyBDT01NT05fRElTQ09WRVJZX0pBUiwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBDT01NT05fRElTQ09WRVJZX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29weUlGaWxlKEpBVkFYX1hNTF9SUENfUExVR0lOX0lELCAibGliLyIgKyBKQVZBWF9YTUxfUlBDX0pBUiwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBKQVZBWF9YTUxfUlBDX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29weUlGaWxlKEpBVkFYX1hNTF9TT0FQX1BMVUdJTl9JRCwgImxpYi8iICsgSkFWQVhfWE1MX1NPQVBfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIEpBVkFYX1hNTF9TT0FQX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29weVBsdWdpbkphcihKQVZBWF9XU0RMX1BMVUdJTl9JRCwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBKQVZBWF9XU0RMX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQljb3B5UGx1Z2luSmFyKENPTU1PTl9MT0dHSU5HX1BMVUdJTl9JRCwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBDT01NT05fTE9HR0lOR19KQVIsIHN0YXR1cywgZW52LCBtb25pdG9yKTsKLQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHZvaWQgY29weUlGaWxlKFN0cmluZyBwbHVnaW5JZCwgU3RyaW5nIHNvdXJjZSwgSVBhdGggdGFyZ2V0UGF0aCwgU3RyaW5nIHRhcmdldEZpbGUsIElTdGF0dXMgc3RhdHVzLCBJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVBhdGggdGFyZ2V0ID0gdGFyZ2V0UGF0aC5hcHBlbmQobmV3IFBhdGgodGFyZ2V0RmlsZSkpOwotCQlQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fQ09QWUlOR19GSUxFKTsKLQotCQl0cnkgewotCQkJUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0JCQljb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCh0cnVlKTsKLQkJCWNvbnRleHQuc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQodHJ1ZSk7Ci0JCQljb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotCQkJVVJMIHNvdXJjZVVSTCA9IEJ1bmRsZVV0aWxzLmdldFVSTEZyb21CdW5kbGUocGx1Z2luSWQsIHNvdXJjZSk7Ci0JCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUodGFyZ2V0KTsKLQkJCWlmICghcmVzb3VyY2UuZXhpc3RzKCkpIHsKLQkJCQlJRmlsZSBmaWxlID0gRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCB0YXJnZXQsIHNvdXJjZVVSTC5vcGVuU3RyZWFtKCksIG1vbml0b3IsIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotCQkJCWlmICgocHJvamVjdFJlc3RhcnRSZXF1aXJlZF8uYm9vbGVhblZhbHVlKCkgPT0gZmFsc2UpICYmIGZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJcHJvamVjdFJlc3RhcnRSZXF1aXJlZF8gPSBCb29sZWFuLlRSVUU7Ci0JCQkJfQotCi0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWSwgZSk7Ci0JCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0KLQkJfQotCX0KLQotCS8qKgotCSAqIENvcHkgcGx1Z2lucyB0aGF0IGhhcyBiZWVuIEpBUmVkCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNvcHlQbHVnaW5KYXIoU3RyaW5nIHBsdWdpbklkLCBJUGF0aCB0YXJnZXRQYXRoLCBTdHJpbmcgdGFyZ2V0RmlsZSwgSVN0YXR1cyBzdGF0dXMsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlJUGF0aCB0YXJnZXQgPSB0YXJnZXRQYXRoLmFwcGVuZChuZXcgUGF0aCh0YXJnZXRGaWxlKSk7Ci0JCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZSU5HX0ZJTEUpOwotCi0JCXRyeSB7Ci0JCQlSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLQkJCWNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotCQkJY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLQkJCWNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0KLQkJCUZpbGUgamFyRmlsZSA9IEZpbGVMb2NhdG9yLmdldEJ1bmRsZUZpbGUoUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbklkKSk7Ci0JCQlpZiAoamFyRmlsZSAhPSBudWxsICYmIGphckZpbGUuaXNGaWxlKCkpIHsKLQkJCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUodGFyZ2V0KTsKLQotCQkJCWlmICghcmVzb3VyY2UuZXhpc3RzKCkpIHsKLQkJCQkJSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGphckZpbGUpOwotCQkJCQlJRmlsZSBmaWxlID0gRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCB0YXJnZXQsIGlzLCBtb25pdG9yLCBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpKTsKLQkJCQkJaWYgKChwcm9qZWN0UmVzdGFydFJlcXVpcmVkXy5ib29sZWFuVmFsdWUoKSA9PSBmYWxzZSkgJiYgZmlsZS5leGlzdHMoKSkgewotCQkJCQkJcHJvamVjdFJlc3RhcnRSZXF1aXJlZF8gPSBCb29sZWFuLlRSVUU7Ci0JCQkJCX0KLQotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVDT1BZLCBlKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQotCQl9Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBmb3IgYW55IG9ic29sZXRlIEphcnMgaW4gV0VCLUlORi9saWIgZm9sZGVyIE9ic29sZXRlIGphcnMgd291bGQKLQkgKiBiZSBmb3VuZCBpbiBwcm9qZWN0cyBtaWdyYXRlZCBmcm9tIG9sZGVyIHZlcnNpb25zIG9mIFdUUAotCSAqLwotCXByaXZhdGUgdm9pZCBkZWxldGVPYnNvbGV0ZUphcnMoSVBhdGggd2ViTW9kdWxlUGF0aCkgewotCQkvLyBGaXJzdCBjaGVjayBmb3IgQW55IGphcnMgdGhhdCBoYXZlIG5hbWVzIHRoYXQgYXJlIGtub3duIHRvIGJlCi0JCS8vIG9ic29sZXRlCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgT0JTT0xFVEVfSkFSUy5sZW5ndGg7IGkrKykgewotCQkJSVBhdGggcGF0aCA9IHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgT0JTT0xFVEVfSkFSU1tpXSk7Ci0KLQkJCUlGaWxlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShwYXRoKTsKLQkJCWlmIChyZXNvdXJjZS5leGlzdHMoKSkgewotCQkJCWRlbGV0ZVJlc291cmNlKHJlc291cmNlKTsKLQkJCX0KLQkJfQotCi0JCS8vIGRlbGV0ZSBvbGRlciBKQVJzIG9mIHRoZSBzYW1lIG5hbWUKLQkJZGVsZXRlT2xkSmFyKHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgQVhJU19KQVIpLCBBWElTX0pBUl9TSVpFKTsKLQkJZGVsZXRlT2xkSmFyKHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgQ09NTU9OX0RJU0NPVkVSWV9KQVIpLCBDT01NT05fRElTQ09WRVJZX0pBUl9TSVpFKTsKLQkJZGVsZXRlT2xkSmFyKHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgSkFWQVhfWE1MX1JQQ19KQVIpLCBKQVZBWF9YTUxfUlBDX0pBUl9TSVpFKTsKLQkJZGVsZXRlT2xkSmFyKHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgSkFWQVhfWE1MX1NPQVBfSkFSKSwgSkFWQVhfWE1MX1NPQVBfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBKQVZBWF9XU0RMX0pBUiksIEpBVkFYX1dTRExfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBDT01NT05fTE9HR0lOR19KQVIpLCBDT01NT05fTE9HR0lOR19KQVJfU0laRSk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZGVsZXRlT2xkSmFyKElQYXRoIGphclBhdGgsIGxvbmcgamFyU2l6ZSkgewotCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUoamFyUGF0aCk7Ci0JCWlmIChyZXNvdXJjZS5leGlzdHMoKSkgewotCQkJLy8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSByZXNvdXJjZSBieSBnZXR0aW5nIHRoZSBqYXZhLmlvLkZpbGUKLQkJCWxvbmcgZmlsZVNpemUgPSByZXNvdXJjZS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLmxlbmd0aCgpOwotCQkJaWYgKGZpbGVTaXplICE9IGphclNpemUpIHsKLQkJCQlkZWxldGVSZXNvdXJjZShyZXNvdXJjZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZGVsZXRlUmVzb3VyY2UoSUZpbGUgcmVzb3VyY2UpIHsgLy8gZGVsZXRlIHRoZSByZXNvdXJjZQotCQl0cnkgewotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJPYnNvbGV0ZSBKYXIhISAiICsgcmVzb3VyY2UuZ2V0TmFtZSgpKTsKLQkJCXJlc291cmNlLmRlbGV0ZSh0cnVlLCBudWxsKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCi0JLyoqCi0JICogQWRkZXMgQXhpcyBKQVJzIHRvIHRoZSBidWlsZCBwYXRoIG9mIEphdmEgcHJvamVjdAotCSAqIAotCSAqIEBwYXJhbSBlbnYKLQkgKiBAcGFyYW0gbW9uaXRvcgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhZGRBeGlzSmFyc1RvQnVpbGRQYXRoKElQcm9qZWN0IHByb2plY3QsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCi0JCUlTdGF0dXMgc3RhdHVzOwotCi0JCXRyeSB7Ci0JCQlnZXRKYXZhUHJvamVjdENsYXNzcGF0aChlbnYsIG1vbml0b3IpOwotCi0JCQlhZGROZXdKYXJFbnRyeShQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgQVhJU19KQVIsIGdldFRoZUphclBhdGgoQVhJU19SVU5USU1FX1BMVUdJTl9JRCwgUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIEFYSVNfSkFSKSk7Ci0JCQlhZGROZXdKYXJFbnRyeShQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgQ09NTU9OX0RJU0NPVkVSWV9KQVIsIGdldFRoZUphclBhdGgoQ09NTU9OX0RJU0NPVkVSWV9QTFVHSU5fSUQsIFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBDT01NT05fRElTQ09WRVJZX0pBUikpOwotCQkJYWRkTmV3SmFyRW50cnkoUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIEpBVkFYX1hNTF9SUENfSkFSLCBnZXRUaGVKYXJQYXRoKEpBVkFYX1hNTF9SUENfUExVR0lOX0lELCBQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgSkFWQVhfWE1MX1JQQ19KQVIpKTsKLQkJCWFkZE5ld0phckVudHJ5KFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBKQVZBWF9YTUxfU09BUF9KQVIsIGdldFRoZUphclBhdGgoSkFWQVhfWE1MX1NPQVBfUExVR0lOX0lELCBQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgSkFWQVhfWE1MX1NPQVBfSkFSKSk7Ci0KLQkJCUlQYXRoIGphdmF4V3NkbEphclBhdGggPSBCdW5kbGVVdGlscy5nZXRKYXJyZWRQbHVnaW5QYXRoKEpBVkFYX1dTRExfUExVR0lOX0lEKTsKLQkJCWlmIChqYXZheFdzZGxKYXJQYXRoICE9IG51bGwpIHsKLQkJCQlhZGROZXdKYXJFbnRyeShqYXZheFdzZGxKYXJQYXRoLnRvU3RyaW5nKCksIGphdmF4V3NkbEphclBhdGgpOwotCQkJfQotCQkJCi0JCQlJUGF0aCBjb21tb25Mb2dnaW5nSmFyUGF0aCA9IEJ1bmRsZVV0aWxzLmdldEphcnJlZFBsdWdpblBhdGgoQ09NTU9OX0xPR0dJTkdfUExVR0lOX0lEKTsKLQkJCWlmIChjb21tb25Mb2dnaW5nSmFyUGF0aCAhPSBudWxsKSB7Ci0JCQkJYWRkTmV3SmFyRW50cnkoY29tbW9uTG9nZ2luZ0phclBhdGgudG9TdHJpbmcoKSwgY29tbW9uTG9nZ2luZ0phclBhdGgpOwotCQkJfQotCQkJdXBkYXRlQ2xhc3NwYXRoKG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQkFEX0JVSUxEUEFUSCwgZSk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGVudgotCSAqIEBwYXJhbSBtb25pdG9yCi0JICogQHJldHVybiBUaGUgSmF2YSBwcm9qZWN0IGNsYXNzcGF0aAotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBJU3RhdHVzIGdldEphdmFQcm9qZWN0Q2xhc3NwYXRoKElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiB7Ci0KLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdF8gPSBudWxsOwotCQlvbGRDbGFzc3BhdGggPSBudWxsOwotCQlqYXZhUHJvamVjdF8gPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0KLQkJb2xkQ2xhc3NwYXRoID0gamF2YVByb2plY3RfLmdldFJhd0NsYXNzcGF0aCgpOwotCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JLyoqCi0JICogU3RvcmUgbmV3IEpBUiBuYW1lIGluIG5ld0phck5hbWVzTGlzdCBpZiBpdCdzIG5vdCBhbHJlYWR5IG9uIGJ1aWxkIHBhdGgKLQkgKiAKLQkgKiBAcGFyYW0gamFyTmFtZQotCSAqICAgICAgICAgICAgbmFtZSBvZiB0aGUgSkFSCi0JICogQHBhcmFtIGphclBhdGgKLQkgKiAgICAgICAgICAgIEFic29sdXRlIHBhdGggdG8gdGhlIEpBUgotCSAqLwotCXByaXZhdGUgdm9pZCBhZGROZXdKYXJFbnRyeShTdHJpbmcgamFyTmFtZSwgSVBhdGggamFyUGF0aCkgewotCi0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRDbGFzc3BhdGgubGVuZ3RoOyBpKyspIHsKLQkJCWZvdW5kID0gb2xkQ2xhc3NwYXRoW2ldLmdldFBhdGgoKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoamFyTmFtZS50b0xvd2VyQ2FzZSgpKTsKLQkJCWlmIChmb3VuZCkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKCFmb3VuZCkgewotCQkJbmV3SmFyTmFtZXNMaXN0LmFkZChuZXcgSmFyRW50cnkoamFyTmFtZSwgamFyUGF0aCkpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBVcGRhdGUgdGhlIEphdmEgcHJvamVjdCBjbGFzc3BhdGggYWRkaW5nIGNsYXNzcGF0aCBmcm9tIG5ld0phck5hbWVzTGlzdAotCSAqIHRvIG9sZENsYXNzcGF0aAotCSAqIAotCSAqIEBwYXJhbSBtb25pdG9yCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBJU3RhdHVzIHVwZGF0ZUNsYXNzcGF0aChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCi0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotCQlpZiAobmV3SmFyTmFtZXNMaXN0LnNpemUoKSA+IDApIHsKLQkJCUphckVudHJ5W10gbmV3SmFyRW50cmllcyA9IChKYXJFbnRyeVtdKSBuZXdKYXJOYW1lc0xpc3QudG9BcnJheShuZXcgSmFyRW50cnlbXXt9KTsKLQotCQkJSUNsYXNzcGF0aEVudHJ5W10gbmV3Q2xhc3NwYXRoID0gbmV3IElDbGFzc3BhdGhFbnRyeVtvbGRDbGFzc3BhdGgubGVuZ3RoICsgbmV3SmFyRW50cmllcy5sZW5ndGhdOwotCQkJaW50IGkgPSAwOwotCQkJLy8gQWRkIG9sZENsYXNzcGF0aCBlbnRyaWVzCi0JCQl3aGlsZSAoaSA8IG9sZENsYXNzcGF0aC5sZW5ndGgpIHsKLQkJCQluZXdDbGFzc3BhdGhbaV0gPSBvbGRDbGFzc3BhdGhbaV07Ci0JCQkJaSsrOwotCQkJfQotCi0JCQlpbnQgbSA9IDA7Ci0JCQl3aGlsZSAoaSA8IG5ld0NsYXNzcGF0aC5sZW5ndGgpIHsKLQkJCQluZXdDbGFzc3BhdGhbaV0gPSBKYXZhQ29yZS5uZXdMaWJyYXJ5RW50cnkobmV3SmFyRW50cmllc1ttXS5nZXRKYXJQYXRoKCksIG51bGwsIG51bGwpOwotCQkJCW0rKzsKLQkJCQlpKys7Ci0JCQl9Ci0KLQkJCS8vCi0JCQkvLyBUaGVuIHVwZGF0ZSB0aGUgcHJvamVjdCBjbGFzc3BhdGguCi0JCQkvLwotCi0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlqYXZhUHJvamVjdC5zZXRSYXdDbGFzc3BhdGgobmV3Q2xhc3NwYXRoLCBtb25pdG9yKTsKLQotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQotCX0KLQotCS8vCi0JLy8gUmV0dXJucyB0aGUgbG9jYWwgbmF0aXZlIHBhdGhuYW1lIG9mIHRoZSBqYXIuCi0JLy8KLQlwcml2YXRlIElQYXRoIGdldFRoZUphclBhdGgoU3RyaW5nIHBsdWdpbklkLCBTdHJpbmcgdGhlSmFyKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwbHVnaW5JZCAhPSBudWxsKSB7Ci0JCQlVUkwgbG9jYWxVUkwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKEJ1bmRsZVV0aWxzLmdldFVSTEZyb21CdW5kbGUocGx1Z2luSWQsIHRoZUphcikpOwotCQkJcmV0dXJuIG5ldyBQYXRoKGxvY2FsVVJMLmdldEZpbGUoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gbmV3IFBhdGgodGhlSmFyKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0UHJvamVjdFJlc3RhcnRSZXF1aXJlZCgpIHsKLQkJcmV0dXJuIHByb2plY3RSZXN0YXJ0UmVxdWlyZWRfLmJvb2xlYW5WYWx1ZSgpOwotCX0KLQotCXB1YmxpYyBjbGFzcyBKYXJFbnRyeSB7Ci0JCXByaXZhdGUgU3RyaW5nIGphck5hbWU7Ci0JCXByaXZhdGUgSVBhdGggamFyUGF0aDsKLQotCQlwdWJsaWMgSmFyRW50cnkoU3RyaW5nIG5hbWUsIElQYXRoIHBhdGgpIHsKLQkJCWphck5hbWUgPSBuYW1lOwotCQkJamFyUGF0aCA9IHBhdGg7Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldEphck5hbWUoKSB7Ci0JCQlyZXR1cm4gamFyTmFtZTsKLQkJfQotCi0JCXB1YmxpYyBJUGF0aCBnZXRKYXJQYXRoKCkgewotCQkJcmV0dXJuIGphclBhdGg7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDc4OTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c2lsLkRpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VFbnRpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLQotcHVibGljIGNsYXNzIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3c2RsU2VydmljZVVSTDsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCi0gIHB1YmxpYyBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsgICAKLSAgICBpZiAod3NkbFNlcnZpY2VVUkwgIT0gbnVsbCAmJiB3c2RsU2VydmljZVVSTC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgaWYgKHdlYlNlcnZpY2VzUGFyc2VyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gICAgICAgIC8vd3NlLnNldFdTUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLSAgICAgIH0KLSAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NkbFNlcnZpY2VVUkwpOwotICAgICAgaWYgKHdzRW50aXR5ID09IG51bGwgfHwgIXdzRW50aXR5LmlzRW50aXR5UmVzb2x2ZWQoKSkKLSAgICAgIHsKLSAgICAgICAgd2ViU2VydmljZXNQYXJzZXIuc2V0VVJJKHdzZGxTZXJ2aWNlVVJMKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9OT05FKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gd3d3YWUpCi0gICAgICAgIHsKLSAgICAgICAgICBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbiBkaWFsb2cgPSBuZXcgRGlhbG9nV1dXQXV0aGVudGljYXRpb24oUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLSAgICAgICAgICBkaWFsb2cuaGFuZGxlV1dXQXV0aGVudGljYXRpb24od3d3YWUpOwotICAgICAgICAgIFN0cmluZyB1c2VybmFtZSA9IGRpYWxvZy5nZXRVc2VybmFtZSgpOwotICAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IGRpYWxvZy5nZXRQYXNzd29yZCgpOwotICAgICAgICAgIGlmICh1c2VybmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgd2ViU2VydmljZXNQYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKHVzZXJuYW1lKTsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChwYXNzd29yZCk7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgd2ViU2VydmljZXNQYXJzZXIucGFyc2UoV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfTk9ORSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUobnVsbCk7Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQobnVsbCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHdzRW50aXR5ID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzZGxTZXJ2aWNlVVJMKTsKLSAgICAgIH0KLSAgICAgIGlmICh3c0VudGl0eSAhPSBudWxsICYmIHdzRW50aXR5LmdldFR5cGUoKSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGh0dHBVc2VybmFtZSA9IHdzRW50aXR5LmdldEhUVFBVc2VybmFtZSgpOwotICAgICAgICBTdHJpbmcgaHR0cFBhc3N3b3JkID0gd3NFbnRpdHkuZ2V0SFRUUFBhc3N3b3JkKCk7Ci0gICAgICAgIGlmIChodHRwVXNlcm5hbWUgIT0gbnVsbCAmJiBodHRwUGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGphdmFXU0RMUGFyYW0uc2V0SFRUUFVzZXJuYW1lKGh0dHBVc2VybmFtZSk7Ci0gICAgICAgICAgamF2YVdTRExQYXJhbS5zZXRIVFRQUGFzc3dvcmQoaHR0cFBhc3N3b3JkKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0gICAgdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd3NkbFNlcnZpY2VVUkwgVGhlIHdzZGxTZXJ2aWNlVVJMIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxTZXJ2aWNlVVJMKFN0cmluZyB3c2RsU2VydmljZVVSTCkgewotICAgIHRoaXMud3NkbFNlcnZpY2VVUkwgPSB3c2RsU2VydmljZVVSTDsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svUmVmcmVzaFByb2plY3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1JlZnJlc2hQcm9qZWN0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTBiNTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svUmVmcmVzaFByb2plY3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLQotcHVibGljIGNsYXNzIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCi0JcHVibGljIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpCi0JewotCX0KLQotCS8qKgotCSogRXhlY3V0ZSBSZWZyZXNoUHJvamVjdFRhc2sKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQl0cnkKLQkJewotCQkJaWYgKHByb2plY3QhPW51bGwpCi0JCQlwcm9qZWN0LnJlZnJlc2hMb2NhbChJUHJvamVjdC5ERVBUSF9JTkZJTklURSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJewotCQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1JFRlJFU0hfUFJPSkVDVCwgZSk7Ci0JCSAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgIHJldHVybiBzdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQl0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svU3R1YjJCZWFuQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiY2VlNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTAzICAgMTI2ODE5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTUgICAxMTgzMTUgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5OYW1lTWFwcGluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuTW9kdWxlQ29yZU5hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi1wdWJsaWMgY2xhc3MgU3R1YjJCZWFuQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0gIHByaXZhdGUgU3RyaW5nIGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lOwotICBwcml2YXRlIFZlY3RvciBwb3J0VHlwZXNfOwotICBwcml2YXRlIFN0cmluZyBwcm94eUJlYW5fOwotICBwcml2YXRlIFN0cmluZyBvdXRwdXRGb2xkZXJfOwotICBwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50XzsKLSAgCi0gIHByaXZhdGUgSVByb2plY3QgY2xpZW50UHJvamVjdF87Ci0gIAotICBwdWJsaWMgU3R1YjJCZWFuQ29tbWFuZCgpewotCSAgc3VwZXIoKTsKLQkgIHBvcnRUeXBlc18gPSBuZXcgVmVjdG9yKCk7CSAgCi0gIH0KLQotICAvKioKLSAgKiBFeGVjdXRlCi0gICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsgICAgICAgCi0gICAgU3RyaW5nIGlucHV0V3NkbExvY2F0aW9uID0gamF2YVdTRExQYXJhbV8uZ2V0SW5wdXRXc2RsTG9jYXRpb24oKTsKLSAgICBEZWZpbml0aW9uIGRlZiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKGlucHV0V3NkbExvY2F0aW9uKTsKLSAgICAvKgotICAgICogSGFjazogQXhpcyBpcyBub3QgdXNpbmcgYSBwcm9wZXIgamF2YS5uZXQuVVJMIGFzIGl0cyBpbnB1dFdzZGxMb2NhdGlvbi4KLSAgICAqIFdlIG5lZWQgdG8gY29udmVydCBpdCB0byBhIHByb3BlciBmaWxlIFVSTC4KLSAgICAqLwotICAgIGlmIChkZWYgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShpbnB1dFdzZGxMb2NhdGlvbik7Ci0gICAgICBpZiAoZmlsZS5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBkZWYgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbihmaWxlLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vRW5zdXJlIHRoZSBjbGllbnQgcHJvamVjdCBpcyBlaXRoZXIgYSBmbGV4aWJsZSBwcm9qZWN0IG9yIGEgSmF2YSBwcm9qZWN0Ci0gICAgTW9kdWxlQ29yZU5hdHVyZSBtbiA9IE1vZHVsZUNvcmVOYXR1cmUuZ2V0TW9kdWxlQ29yZU5hdHVyZShjbGllbnRQcm9qZWN0Xyk7Ci0gICAgaWYgKG1uPT1udWxsKQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIHBsYWluIG9sZCBKYXZhIHByb2plY3QgICAgCi0JCWlmICghUmVzb3VyY2VVdGlscy5pc0phdmFQcm9qZWN0KGNsaWVudFByb2plY3RfKSkKLQkJewotCSAJCSAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkUpOwkKLQkgCQkgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkgCQkgICByZXR1cm4gc3RhdHVzOwotCQl9ICAgIAkKLSAgICB9Ci0gICAgCi0gICAgTWFwIHBrZzJuc01hcHBpbmcgPSBqYXZhV1NETFBhcmFtXy5nZXRNYXBwaW5ncygpOwotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZi5nZXRTZXJ2aWNlcygpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWl0Lm5leHQoKTsKLSAgICAgIFN0cmluZyBzZXJ2aWNlUGtnTmFtZSA9IE5hbWVNYXBwaW5nVXRpbHMuZ2V0UGFja2FnZU5hbWUoc2VydmljZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBwa2cybnNNYXBwaW5nKTsKLSAgICAgIFN0cmluZyBzZXJ2aWNlQ2xhc3NOYW1lID0gY29tcHV0ZUNsYXNzTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgU3RyaW5nIGpuZGlOYW1lID0gc2VydmljZUNsYXNzTmFtZTsKLSAgICAgIE1hcCBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQyID0gcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIGlmIChzZXJ2aWNlQ2xhc3NOYW1lLmVxdWFscyhjb21wdXRlQ2xhc3NOYW1lKCgoUG9ydClpdDIubmV4dCgpKS5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlQ2xhc3NOYW1lID0gc2VydmljZUNsYXNzTmFtZSArICJfU2VydmljZSI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZvciAoSXRlcmF0b3IgaXQyID0gcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWl0Mi5uZXh0KCk7Ci0gICAgICAgIGlmIChkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZSAhPSBudWxsICYmICFkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZS5lcXVhbHMocG9ydC5nZXROYW1lKCkpKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IG51bGw7Ci0gICAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50cyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBpdDMgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsgaXQzLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGl0My5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKW9iamVjdDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzb2FwQWRkcmVzcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcHJveHlFbmRwb2ludF8gPSBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gcG9ydC5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKTsKLSAgICAgICAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKTsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgcG9ydFR5cGVJRCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBwb3J0VHlwZUlELmFwcGVuZChwb3J0VHlwZVFOYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgICBwb3J0VHlwZUlELmFwcGVuZCgiIyIpOwotICAgICAgICAgIHBvcnRUeXBlSUQuYXBwZW5kKHBvcnRUeXBlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICAgIGlmICghcG9ydFR5cGVzXy5jb250YWlucyhwb3J0VHlwZUlELnRvU3RyaW5nKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBvcnRUeXBlc18uYWRkKHBvcnRUeXBlSUQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBTdHViMkJlYW5JbmZvIHN0dWIyQmVhbkluZm8gPSBuZXcgU3R1YjJCZWFuSW5mbygpOwotICAgICAgICAgICAgc3R1YjJCZWFuSW5mby5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFByb2plY3RfKTsKLSAgICAgICAgICAgIHN0dWIyQmVhbkluZm8uc2V0T3V0cHV0Rm9sZGVyKCBvdXRwdXRGb2xkZXJfICk7Ci0gICAgICAgICAgICBTdHJpbmcgcG9ydFR5cGVQa2dOYW1lID0gTmFtZU1hcHBpbmdVdGlscy5nZXRQYWNrYWdlTmFtZShwb3J0VHlwZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBwa2cybnNNYXBwaW5nKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIElmIHRoZSBwYWNrYWdlIG5hbWUgYW5kIG1ldGhvZCBuYW1lIGFyZSB0aGUgc2FtZSB0aGUgQXhpcwotICAgICAgICAgICAgICogd3NkbDJKYXZhIEVtaXR0ZXIgYWRkcyBhICJfcGtnIiBzdWZmaXggdG8gdGhlIHBhY2thZ2UgbmFtZQotICAgICAgICAgICAgICogb2YgZ2VuZXJhdGVkIGNvZGUuCi0gICAgICAgICAgICAgKiAKLSAgICAgICAgICAgICAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwcm94eSBnZXQncyBwdXQgaW4gdGhpcyBzYW1lIHBhY2thZ2UKLSAgICAgICAgICAgICAqIGlmIGFuIG9wZXJhdGlvbiBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCi0gICAgICAgICAgICAgKiAoTWFyayBIdXRjaGluc29uIC0gQnVnIDExODMxNSkKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgICAgICAgSXRlcmF0b3Igb3Blckl0ZXIgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICBib29sZWFuIGFkZFN1ZmZpeCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKG9wZXJJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilvcGVySXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAJaWYgKG9wZXJhdGlvbi5nZXROYW1lKCkuZXF1YWxzKHBvcnRUeXBlUGtnTmFtZSkpCi0gICAgICAgICAgICAJewotICAgICAgICAgICAgCQlhZGRTdWZmaXggPSB0cnVlOyAgICAgICAgICAgIAkKLSAgICAgICAgICAgIAl9Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYWRkU3VmZml4KSB7Ci0gICAgICAgICAgICAJcG9ydFR5cGVQa2dOYW1lID0gcG9ydFR5cGVQa2dOYW1lICsgIl9wa2ciOwotICAgICAgICAgICAgCXNlcnZpY2VQa2dOYW1lID0gc2VydmljZVBrZ05hbWUgKyAiX3BrZyI7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBwb3J0VHlwZUNsYXNzTmFtZSA9IGNvbXB1dGVDbGFzc05hbWUocG9ydFR5cGVRTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgICBzdHViMkJlYW5JbmZvLnNldFBhY2thZ2UocG9ydFR5cGVQa2dOYW1lKTsKLSAgICAgICAgICAgIHN0dWIyQmVhbkluZm8uc2V0Q2xhc3MocG9ydFR5cGVDbGFzc05hbWUgKyAiUHJveHkiKTsKLSAgICAgICAgICAgIHByb3h5QmVhbl8gPSBwb3J0VHlwZVBrZ05hbWUrIi4iK3BvcnRUeXBlQ2xhc3NOYW1lKyJQcm94eSI7Ci0gICAgICAgICAgICBpZiAoam5kaU5hbWUuZXF1YWxzKHBvcnRUeXBlQ2xhc3NOYW1lKSkKLSAgICAgICAgICAgICAgcG9ydFR5cGVDbGFzc05hbWUgPSBwb3J0VHlwZUNsYXNzTmFtZSArICJfUG9ydFR5cGUiOwotICAgICAgICAgICAgc3R1YjJCZWFuSW5mby5hZGRTRUkocG9ydFR5cGVQa2dOYW1lLCBwb3J0VHlwZUNsYXNzTmFtZSwgc2VydmljZVBrZ05hbWUsIHNlcnZpY2VDbGFzc05hbWUsIGpuZGlOYW1lLCBOYW1lTWFwcGluZ1V0aWxzLmdldFBvcnROYW1lKHBvcnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgICBzdHViMkJlYW5JbmZvLndyaXRlKCBtb25pdG9yLCBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkgKTsKLSAgICAgICAgICAgICAgaWYgKGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgZGlzY292ZXJlZCBwb3J0IHdhcyBwcm9jZXNzZWQuIElnbm9yZSBhbGwgb3RoZXIgcG9ydHMgYW5kIHNlcnZpY2VzLgotICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZUNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKQotICB7Ci0JICByZXR1cm4gTmFtZU1hcHBpbmdVdGlscy54bWxOYW1lVG9KYXZhQ2xhc3MoY2xhc3NOYW1lKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHJldHVybiBKYXZhV1NETFBhcmFtZXRlcgotICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbV87Ci0gIH0KLQotICAvKioKLSAgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0gIHsKLSAgICBqYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd2ViU2VydmljZXNQYXJzZXIuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKSB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBAcGFyYW0gZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUgVGhlIGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lKFN0cmluZyBkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZSkgewotICAgIHRoaXMuZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUgPSBkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qKgotCSogQHBhcmFtIGNsaWVudFByb2plY3QgVGhlIGNsaWVudFByb2plY3QgdG8gc2V0LgotCSovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoSVByb2plY3QgY2xpZW50UHJvamVjdCkgewotCQl0aGlzLmNsaWVudFByb2plY3RfID0gY2xpZW50UHJvamVjdDsKLSAgfQotCQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlCZWFuLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkgewotCQlyZXR1cm4gcHJveHlCZWFuXzsKLQl9CQotCQotCXB1YmxpYyB2b2lkIHNldE91dHB1dEZvbGRlciggU3RyaW5nIG91dHB1dEZvbGRlciApCi0JewotCQlvdXRwdXRGb2xkZXJfID0gb3V0cHV0Rm9sZGVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlFbmRwb2ludCgpIHsKLQkJcmV0dXJuIHByb3h5RW5kcG9pbnRfOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svU3R1YjJCZWFuSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5JbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ODA1YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5JbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwMjE2ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTE3ICAgMTQxNDgxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzEzICAgMTc2NTgwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBHZW5lcmF0ZSBhIENsaWVudCBXUyBQcm94eSBhY2NlcHRpbmcgVVJMCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhVmlzaWJpbGl0eUtpbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSmF2YU1PRlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgU3R1YjJCZWFuSW5mbwotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBORVdfTElORSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotICBwcml2YXRlIGludCBpbmRlbnRDb3VudDsKLQotICBwcml2YXRlIFN0cmluZyBwYWNrYWdlXzsKLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgaW1wb3J0c187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIHNlaXNfOwotICBwcml2YXRlIFN0cmluZ0J1ZmZlciBzZXJ2aWNlc187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIGpuZGlOYW1lc187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIHBvcnRzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xhc3NfOwotICBwcml2YXRlIFZlY3RvciB1c2VkTmFtZXM7Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGNsaWVudFByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgIG91dHB1dEZvbGRlcl87Ci0gIAotICBwdWJsaWMgU3R1YjJCZWFuSW5mbygpCi0gIHsKLSAgICBpbmRlbnRDb3VudCA9IDA7Ci0gICAgcGFja2FnZV8gPSBudWxsOwotICAgIGltcG9ydHNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNlaXNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNlcnZpY2VzXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBqbmRpTmFtZXNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHBvcnRzXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBjbGFzc18gPSAiU0VJQmVhbiI7Ci0gICAgdXNlZE5hbWVzID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KSB7Ci0gIAl0aGlzLmNsaWVudFByb2plY3RfID0gIGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE91dHB1dEZvbGRlciggU3RyaW5nIG91dHB1dEZvbGRlciApCi0gIHsKLSAgCW91dHB1dEZvbGRlcl8gPSBvdXRwdXRGb2xkZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFBhY2thZ2UoU3RyaW5nIHBrZ05hbWUpCi0gIHsKLQkgIHBhY2thZ2VfID0gcGtnTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEltcG9ydHMoU3RyaW5nIHBrZ05hbWUsIFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLSAgICBpbXBvcnRzXy5hcHBlbmQodG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShwa2dOYW1lLCBjbGFzc05hbWUpKTsKLSAgICBpbXBvcnRzXy5hcHBlbmQoIjsiKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNFSShTdHJpbmcgc2VpUGtnTmFtZSwgU3RyaW5nIHNlaUNsYXNzTmFtZSwgU3RyaW5nIHNlcnZpY2VQa2dOYW1lLCBTdHJpbmcgc2VydmljZUNsYXNzTmFtZSwgU3RyaW5nIHBvcnROYW1lKQotICB7Ci0gICAgYWRkU0VJKHNlaVBrZ05hbWUsIHNlaUNsYXNzTmFtZSwgc2VydmljZVBrZ05hbWUsIHNlcnZpY2VDbGFzc05hbWUsIHNlcnZpY2VDbGFzc05hbWUsIHBvcnROYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNFSShTdHJpbmcgc2VpUGtnTmFtZSwgU3RyaW5nIHNlaUNsYXNzTmFtZSwgU3RyaW5nIHNlcnZpY2VQa2dOYW1lLCBTdHJpbmcgc2VydmljZUNsYXNzTmFtZSwgU3RyaW5nIGpuZGlOYW1lLCBTdHJpbmcgcG9ydE5hbWUpCi0gIHsKLSAgICBzZWlzXy5hcHBlbmQodG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShzZWlQa2dOYW1lLCBzZWlDbGFzc05hbWUpKTsKLSAgICBzZWlzXy5hcHBlbmQoIjsiKTsKLSAgICBzZXJ2aWNlc18uYXBwZW5kKHRvRnVsbHlRdWFsaWZpZWRDbGFzc05hbWUoc2VydmljZVBrZ05hbWUsIHNlcnZpY2VDbGFzc05hbWUpKTsKLSAgICBzZXJ2aWNlc18uYXBwZW5kKCI7Iik7Ci0gICAgam5kaU5hbWVzXy5hcHBlbmQoam5kaU5hbWUpOwotICAgIGpuZGlOYW1lc18uYXBwZW5kKCI7Iik7Ci0gICAgcG9ydHNfLmFwcGVuZChwb3J0TmFtZSk7Ci0gICAgcG9ydHNfLmFwcGVuZCgiOyIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xhc3MoU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotCSAgY2xhc3NfID0gY2xhc3NOYW1lOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgdG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShTdHJpbmcgcGtnTmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBzYi5hcHBlbmQocGtnTmFtZSk7Ci0gICAgc2IuYXBwZW5kKCIuIik7Ci0gICAgc2IuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTdHJpbmcgcW5hbWUpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBxbmFtZS5sYXN0SW5kZXhPZigiLiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiBxbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBxbmFtZTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldENsYXNzTmFtZShTdHJpbmcgcW5hbWUpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBxbmFtZS5sYXN0SW5kZXhPZigiLiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiBxbmFtZS5zdWJzdHJpbmcoaW5kZXgrMSwgcW5hbWUubGVuZ3RoKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBxbmFtZTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGZpcnN0Q2hhclRvTG93ZXJDYXNlKFN0cmluZyBzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZChzLnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpKTsKLSAgICBzYi5hcHBlbmQocy5zdWJzdHJpbmcoMSwgcy5sZW5ndGgoKSkpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RnVsbHlRdWFsaWZpZWROYW1lKEphdmFIZWxwZXJzIGphdmFIZWxwZXJzKQotICB7Ci0gICAgaWYgKGphdmFIZWxwZXJzLmlzUHJpbWl0aXZlKCkpCi0gICAgICByZXR1cm4gamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gamF2YUhlbHBlcnMuZ2V0UXVhbGlmaWVkTmFtZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgd3JpdGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsIElTdGF0dXNIYW5kbGVyIHN0YXR1c01vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSVBhdGggICAgICAgIG91dHB1dFBhdGggPSBuZXcgUGF0aCggb3V0cHV0Rm9sZGVyXyApOwotICAgIElQcm9qZWN0ICAgICBwcm9qZWN0ICAgID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YoIG91dHB1dFBhdGggKTsKLSAgICBTdHJpbmdXcml0ZXIgc3cgICAgICAgICA9IG5ldyBTdHJpbmdXcml0ZXIoMjA0OCk7Ci0gICAgCi0gICAgd3JpdGVQYWNrYWdlKHN3KTsKLSAgICB3cml0ZUltcG9ydHMoc3cpOwotICAgIHdyaXRlQ2xhc3Moc3cpOwotICAgIHN3LmNsb3NlKCk7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gc3cuZ2V0QnVmZmVyKCkudG9TdHJpbmcoKS5nZXRCeXRlcyggcHJvamVjdC5nZXREZWZhdWx0Q2hhcnNldCgpICk7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChwYWNrYWdlXyAhPSBudWxsICYmIHBhY2thZ2VfLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQocGFja2FnZV8pOwotICAgICAgc2IuYXBwZW5kKCIuIik7Ci0gICAgfQotICAgIHNiLmFwcGVuZChjbGFzc18pOwotICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihzYi50b1N0cmluZygpLnJlcGxhY2UoJy4nLCAnLycpKTsKLSAgICBzYi5hcHBlbmQoIi5qYXZhIik7Ci0KLSAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVzKTsKLSAgICAKLSAgICBJUGF0aCBuZXdGaWxlUGF0aCA9IG5ldyBQYXRoKG91dHB1dEZvbGRlcl8pLmFwcGVuZCggc2IudG9TdHJpbmcoKSApOwotICAgIAotICAgIEZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpLCBuZXdGaWxlUGF0aCwgYmFpcywgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVBhY2thZ2UoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHBhY2thZ2VfICE9IG51bGwgJiYgcGFja2FnZV8ubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIHcud3JpdGUoInBhY2thZ2UgIik7Ci0gICAgICB3LndyaXRlKHBhY2thZ2VfKTsKLSAgICAgIHcud3JpdGUoIjsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlSW1wb3J0cyhXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGltcG9ydHNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKCJpbXBvcnQgIik7Ci0gICAgICB3LndyaXRlKHN0Lm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIjsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlQ2xhc3MoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgY2xhc3MgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIiAiKTsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHcud3JpdGUoImltcGxlbWVudHMgIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKHN0Lm5leHRUb2tlbigpKTsKLSAgICAgIGlmIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgfQotICAgIHcud3JpdGUoIiB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3cml0ZUZpZWxkc0RlY2xhcmF0aW9ucyh3KTsKLSAgICB3cml0ZUNvbnN0cnVjdG9yKHcpOwotICAgIHdyaXRlSW5pdCh3KTsKLSAgICAvKgotICAgICogQ2Fubm90IHVzZSBKTkRJIGxvb2t1cCBmb3IgQVhJUwotICAgICoKLSAgICB3cml0ZVVzZUpOREkodyk7Ci0gICAgKi8KLSAgICB3cml0ZUdldFNldEVuZHBvaW50KHcpOwotICAgIHdyaXRlU0VJR2V0dGVycyh3KTsKLSAgICB3cml0ZVNFSU1ldGhvZHModyk7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVGaWVsZHNEZWNsYXJhdGlvbnMoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLyoKLSAgICAqIENhbm5vdCB1c2UgSk5ESSBsb29rdXAgZm9yIEFYSVMKLSAgICAqCi0gICAgdy53cml0ZSgicHJpdmF0ZSBib29sZWFuIF91c2VKTkRJID0gdHJ1ZTsiKTsKLSAgICBuZXdMaW5lKHcpOwotICAgICovCi0gICAgdy53cml0ZSgicHJpdmF0ZSBTdHJpbmcgX2VuZHBvaW50ID0gbnVsbDsiKTsKLSAgICB1c2VkTmFtZXMuYWRkKCJfZW5kcG9pbnQiKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIHcud3JpdGUoInByaXZhdGUgIik7Ci0gICAgICBTdHJpbmcgc2VpID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB3LndyaXRlKHNlaSk7Ci0gICAgICB3LndyaXRlKCIgIik7Ci0gICAgICBTdHJpbmcgc3R1Yk5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc2VpKSk7Ci0gICAgICB3LndyaXRlKHN0dWJOYW1lKTsKLSAgICAgIHVzZWROYW1lcy5hZGQoc3R1Yk5hbWUpOwotICAgICAgdy53cml0ZSgiID0gbnVsbDsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlQ29uc3RydWN0b3IoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIigpIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIl9pbml0Iik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIigpOyIpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgCi0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIihTdHJpbmcgZW5kcG9pbnQpIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIl9lbmRwb2ludCA9IGVuZHBvaW50OyIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZUluaXQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwcml2YXRlIHZvaWQgX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgidHJ5IHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIC8qCi0gICAgKiBDYW5ub3QgdXNlIEpOREkgbG9va3VwIGZvciBBWElTCi0gICAgKgotICAgIHcud3JpdGUoImlmIChfdXNlSk5ESSkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgKi8KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHNlcnZpY2VUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlcnZpY2VzXy50b1N0cmluZygpLCAiOyIpOwotICAgIC8vU3RyaW5nVG9rZW5pemVyIGpuZGlOYW1lVG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihqbmRpTmFtZXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHBvcnRUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHBvcnRzXy50b1N0cmluZygpLCAiOyIpOwotICAgIC8qCi0gICAgaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKCJqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOyIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKGZpcnN0Q2hhclRvTG93ZXJDYXNlKGdldENsYXNzTmFtZShzdC5uZXh0VG9rZW4oKSkpKTsKLSAgICAgIHcud3JpdGUoIiA9ICgoIik7Ci0gICAgICB3LndyaXRlKHNlcnZpY2VUb2tlbnMubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiKWN0eC5sb29rdXAoXCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvIik7Ci0gICAgICB3LndyaXRlKGpuZGlOYW1lVG9rZW5zLm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIlwiKSkuZ2V0Iik7Ci0gICAgICB3LndyaXRlKG1hbmdsZUNsYXNzTmFtZShwb3J0VG9rZW5zLm5leHRUb2tlbigpKSk7Ci0gICAgICB3LndyaXRlKCIoKTsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiZWxzZSB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBzZXJ2aWNlVG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZXJ2aWNlc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBwb3J0VG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihwb3J0c18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICAqLwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaU5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc3QubmV4dFRva2VuKCkpKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIgPSAobmV3ICIpOwotICAgICAgdy53cml0ZShzZXJ2aWNlVG9rZW5zLm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIkxvY2F0b3IoKSkuZ2V0Iik7Ci0gICAgICB3LndyaXRlKHBvcnRUb2tlbnMubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgiaWYgKCIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIiAhPSBudWxsKSB7Iik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJpZiAoX2VuZHBvaW50ICE9IG51bGwpIik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCIoKGphdmF4LnhtbC5ycGMuU3R1YikiKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIpLl9zZXRQcm9wZXJ0eShcImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzXCIsIF9lbmRwb2ludCk7Iik7Ci0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJlbHNlIik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJfZW5kcG9pbnQgPSAoU3RyaW5nKSgoamF2YXgueG1sLnJwYy5TdHViKSIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIikuX2dldFByb3BlcnR5KFwiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3NcIik7Iik7Ci0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoIn0iKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICAgIC8qCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgKi8KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIC8qCi0gICAgdy53cml0ZSgiY2F0Y2ggKGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb24gbmFtaW5nRXhjZXB0aW9uKSB7fSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgKi8KLSAgICB3LndyaXRlKCJjYXRjaCAoamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHNlcnZpY2VFeGNlcHRpb24pIHt9Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVNldFByb3BlcnR5RW5kcG9pbnQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZWlzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaU5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc3QubmV4dFRva2VuKCkpKTsKLSAgICAgIHcud3JpdGUoImlmICgiKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIgIT0gbnVsbCkiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoIigoamF2YXgueG1sLnJwYy5TdHViKSIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIikuX3NldFByb3BlcnR5KFwiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3NcIiwgX2VuZHBvaW50KTsiKTsKLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotIAotICBwcml2YXRlIHZvaWQgd3JpdGVTRUlHZXR0ZXJzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzZWkgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIFN0cmluZyBzZWlDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUoc2VpKTsKLSAgICAgIFN0cmluZyBzZWlGaWVsZE5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShzZWlDbGFzc05hbWUpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoInB1YmxpYyAiKTsKLSAgICAgIHcud3JpdGUoc2VpKTsKLSAgICAgIHcud3JpdGUoIiBnZXQiKTsKLSAgICAgIHcud3JpdGUoc2VpQ2xhc3NOYW1lKTsKLSAgICAgIHcud3JpdGUoIigpIHsiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoImlmICgiKTsKLSAgICAgIHcud3JpdGUoc2VpRmllbGROYW1lKTsKLSAgICAgIHcud3JpdGUoIiA9PSBudWxsKSIpOwotICAgICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICAgIHcud3JpdGUoY2xhc3NfKTsKLSAgICAgIHcud3JpdGUoIigpOyIpOwotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgicmV0dXJuICIpOwotICAgICAgdy53cml0ZShzZWlGaWVsZE5hbWUpOwotICAgICAgdy53cml0ZSgiOyIpOwotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgifSIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVTRUlNZXRob2RzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgewotICAgIG5ld0xpbmUodyk7Ci0gICAgLy9XZWJTZXJ2aWNlRWxlbWVudCB3c2UgPSBXZWJTZXJ2aWNlRWxlbWVudC5nZXRXZWJTZXJ2aWNlRWxlbWVudChtb2RlbF8pOwotICAgIGlmIChjbGllbnRQcm9qZWN0XyA9PSBudWxsKSByZXR1cm47Ly93c2UuZ2V0UHJveHlQcm9qZWN0KCk7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZWlzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IEphdmFNT0ZVdGlscy5nZXRKYXZhQ2xhc3MoZ2V0UGFja2FnZU5hbWUoc2VpKSwgZ2V0Q2xhc3NOYW1lKHNlaSksIGNsaWVudFByb2plY3RfKTsKLSAgICAgIGlmIChqYXZhQ2xhc3MgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBtZXRob2RzID0gamF2YUNsYXNzLmdldE1ldGhvZHMoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1ldGhvZHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIE1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKWl0Lm5leHQoKTsKLSAgICAgICAgICBpZiAoIW1ldGhvZC5pc0NvbnN0cnVjdG9yKCkgJiYgIW1ldGhvZC5pc05hdGl2ZSgpICYmIG1ldGhvZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gSmF2YVZpc2liaWxpdHlLaW5kLlBVQkxJQykKLSAgICAgICAgICAgIHdyaXRlU0VJTWV0aG9kcyh3LCBqYXZhQ2xhc3MsIG1ldGhvZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVTRUlNZXRob2RzKFdyaXRlciB3LCBKYXZhQ2xhc3MgamF2YUNsYXNzLCBNZXRob2QgbWV0aG9kKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHcud3JpdGUoInB1YmxpYyAiKTsKLSAgICAvLyBpc1ZvaWQKLSAgICBpZiAobWV0aG9kLmlzVm9pZCgpKQotICAgICAgdy53cml0ZSgidm9pZCAiKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgdy53cml0ZShnZXRGdWxseVF1YWxpZmllZE5hbWUobWV0aG9kLmdldFJldHVyblR5cGUoKSkpOwotICAgICAgdy53cml0ZSgiICIpOwotICAgIH0KLSAgICAvLyBtZXRob2QgbmFtZQotICAgIHcud3JpdGUobWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgdy53cml0ZSgiKCIpOwotICAgIC8vIGlucHV0IHBhcmFtZXRlcnMKLSAgICBKYXZhUGFyYW1ldGVyW10gaW5wdXRQYXJhbXMgPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dFBhcmFtcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSA+IDApCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgICBKYXZhSGVscGVycyBqYXZhSGVscGVycyA9IGlucHV0UGFyYW1zW2ldLmdldEphdmFUeXBlKCk7Ci0gICAgICB3LndyaXRlKGdldEZ1bGx5UXVhbGlmaWVkTmFtZShqYXZhSGVscGVycykpOwotICAgICAgdy53cml0ZSgiICIpOwotICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IGdldENsYXNzTmFtZShpbnB1dFBhcmFtc1tpXS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgdy53cml0ZShnZXRVbnVzZWROYW1lKHBhcmFtTmFtZSkpOwotICAgIH0KLSAgICB3LndyaXRlKCIpIik7Ci0gICAgLy8gZXhjZXB0aW9ucwotICAgIExpc3QgZXhjZXB0aW9ucyA9IG1ldGhvZC5nZXRKYXZhRXhjZXB0aW9ucygpOwotICAgIGlmICghZXhjZXB0aW9ucy5pc0VtcHR5KCkpCi0gICAgICB3LndyaXRlKCIgdGhyb3dzICIpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBleGNlcHRpb25zLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgSmF2YUNsYXNzIGV4Y2VwdGlvbiA9IChKYXZhQ2xhc3MpaXQubmV4dCgpOwotICAgICAgdy53cml0ZShleGNlcHRpb24uZ2V0UXVhbGlmaWVkTmFtZUZvclJlZmxlY3Rpb24oKSk7Ci0gICAgICBpZiAoaXQuaGFzTmV4dCgpKQotICAgICAgICB3LndyaXRlKCIsICIpOwotICAgIH0KLSAgICAvLyBtZXRob2QgYm9keQotICAgIHcud3JpdGUoInsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIFN0cmluZyBzdHViTmFtZSA9IGZpcnN0Q2hhclRvTG93ZXJDYXNlKGphdmFDbGFzcy5nZXROYW1lKCkpOwotICAgIHcud3JpdGUoImlmICgiKTsKLSAgICB3LndyaXRlKHN0dWJOYW1lKTsKLSAgICB3LndyaXRlKCIgPT0gbnVsbCkiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIl9pbml0Iik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIigpOyIpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgaWYgKCFtZXRob2QuaXNWb2lkKCkpCi0gICAgICB3LndyaXRlKCJyZXR1cm4gIik7Ci0gICAgdy53cml0ZShzdHViTmFtZSk7Ci0gICAgdy53cml0ZSgiLiIpOwotICAgIHcud3JpdGUobWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgdy53cml0ZSgiKCIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRQYXJhbXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGkgPiAwKQotICAgICAgICB3LndyaXRlKCIsICIpOwotICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IGdldENsYXNzTmFtZShpbnB1dFBhcmFtc1tpXS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgdy53cml0ZShnZXRVbnVzZWROYW1lKHBhcmFtTmFtZSkpOwotICAgIH0KLSAgICB3LndyaXRlKCIpOyIpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZUdldFNldEVuZHBvaW50KFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgicHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoInJldHVybiBfZW5kcG9pbnQ7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoInB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2VuZHBvaW50ID0gZW5kcG9pbnQ7Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3cml0ZVNldFByb3BlcnR5RW5kcG9pbnQodyk7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbmNyZW1lbnRJbmRlbnQoKQotICB7Ci0gICAgaW5kZW50Q291bnQrKzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkZWNyZW1lbnRJbmRlbnQoKQotICB7Ci0gICAgaW5kZW50Q291bnQtLTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbmRlbnQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRlbnRDb3VudDsgaSsrKQotICAgICAgdy53cml0ZSgiICAiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBuZXdMaW5lKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHcud3JpdGUoTkVXX0xJTkUpOwotICAgIGluZGVudCh3KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VW51c2VkTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGlmICh1c2VkTmFtZXMuY29udGFpbnMobmFtZSkpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5ld05hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcihuYW1lKSkuYXBwZW5kKFN0cmluZy52YWx1ZU9mKGkpKS50b1N0cmluZygpOwotICAgICAgICBpZiAoIXVzZWROYW1lcy5jb250YWlucyhuZXdOYW1lKSkKLSAgICAgICAgICByZXR1cm4gbmV3TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svVmFsaWRhdGVXU0RMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9WYWxpZGF0ZVdTRExDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxY2I5OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9WYWxpZGF0ZVdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLQotcHVibGljIGNsYXNzIFZhbGlkYXRlV1NETENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotCi0gIHB1YmxpYyBWYWxpZGF0ZVdTRExDb21tYW5kKCkKLSAgewotICB9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlpZiAod3NkbFVSSSAhPSBudWxsICYmIHdzZGxVUkkubGVuZ3RoKCkgPiAwKQotCQl7Ci0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpCi0JCQl7Ci0JCQkJaW50IG51bVNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnNpemUoKTsKLQkJCQlpZiAobnVtU2VydmljZXMgPCAxKQotCQkJCXsKLQkJCQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XU0RMX0hBU19OT19TRVJWSUNFX0VMRU1FTlQsIG5ldyBPYmplY3RbXSB7d3NkbFVSSX0pLCBudWxsKTsKLQkJCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJCXJldHVybiBzdGF0dXM7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJJIFRoZSB3c2RsVVJJIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9DbGFzc3BhdGhVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9DbGFzc3BhdGhVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk0Yzc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvQ2xhc3NwYXRoVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDMgICAxMjY0MTgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxSZXNvdXJjZTsKLQotcHVibGljIGNsYXNzIENsYXNzcGF0aFV0aWxzIHsKLQotCS8vCUNvcHlyaWdodAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAzLiI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIENsYXNzcGF0aFV0aWxzIGluc3RhbmNlXzsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBET1RfSkFSID0gIi5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEpBUiA9ICJqYXIiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFdFQklORl9MSUIgPSAiL1dFQi1JTkYvbGliIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBDbGFzc3BhdGhVdGlscygpIHsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIENsYXNzcGF0aFV0aWxzIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpCi0JCQlpbnN0YW5jZV8gPSBuZXcgQ2xhc3NwYXRoVXRpbHMoKTsKLQkJcmV0dXJuIGluc3RhbmNlXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRDbGFzc3BhdGhTdHJpbmcoSVByb2plY3QgcHJvamVjdCkgewotCQlTdHJpbmdCdWZmZXIgY2xhc3NwYXRoID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlTdHJpbmdbXSBjbGFzc3BhdGhFbnRyaWVzID0gZ2V0Q2xhc3NwYXRoKHByb2plY3QsIGZhbHNlKTsKLQotCQlWZWN0b3IgY2xhc3NwYXRoVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzcGF0aEVudHJpZXMubGVuZ3RoOyBpKyspIHsKLQkJCWlmICghY2xhc3NwYXRoVmVjdG9yLmNvbnRhaW5zKGNsYXNzcGF0aEVudHJpZXNbaV0pKSB7Ci0JCQkJY2xhc3NwYXRoVmVjdG9yLmFkZChjbGFzc3BhdGhFbnRyaWVzW2ldKTsKLQkJCQljbGFzc3BhdGguYXBwZW5kKGNsYXNzcGF0aEVudHJpZXNbaV0pOwotCQkJCWNsYXNzcGF0aC5hcHBlbmQoIjsiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JCXJldHVybiBjbGFzc3BhdGgudG9TdHJpbmcoKTsKLQl9Ci0KLQkJCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRDbGFzc3BhdGgoSVByb2plY3QgcHJvamVjdCwgYm9vbGVhbiBpc0RlcGVuZGVudCkgewotCQlTdHJpbmdbXSBtb2R1bGVDbGFzc3BhdGggPSBuZXcgU3RyaW5nWzBdOwotCQlBcnJheUxpc3QgcHJvamVjdENsYXNzcGF0aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYm9vbGVhbiBuZWVkSmF2YUNsYXNzcGF0aCA9IGZhbHNlOwotCQkKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlpZiAoY29tcCAhPSBudWxsKSB7Ci0JCQkvLyBnZXQgdGhlIG1vZHVsZSdzIGNsYXNzcGF0aAotCQkJCi0JCQlpZiAoSjJFRVV0aWxzLmlzRUFSQ29tcG9uZW50KGNvbXApKSB7Ci0JCQkJbW9kdWxlQ2xhc3NwYXRoID0gZ2V0Q2xhc3NwYXRoRm9yRUFSUHJvamVjdChwcm9qZWN0LCBjb21wLmdldE5hbWUoKSk7Ci0vLwkJCQkgYWRkIG1vZHVsZSBjbGFzc3BhdGggdG8gcHJvamVjdCBjbGFzc3BhdGgKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IG1vZHVsZUNsYXNzcGF0aC5sZW5ndGg7IGorKykgewotCQkJCQlwcm9qZWN0Q2xhc3NwYXRoLmFkZChtb2R1bGVDbGFzc3BhdGhbal0pOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KGNvbXApIHx8IEoyRUVVdGlscy5pc0phdmFDb21wb25lbnQoY29tcCkpIHsKLQkJCQluZWVkSmF2YUNsYXNzcGF0aCA9IHRydWU7Ci0JCQkJCi0JCQkJSUNvbnRhaW5lciBvdXRwdXRDb250YWluZXIgPSBudWxsOwotCQkJCUlSZXNvdXJjZSBmcmFnbWVudFJvb3QgPSBudWxsOwotCQkJCUlQYWNrYWdlRnJhZ21lbnRSb290W10gcGtnRnJhZ21lbnRSb290ID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMocHJvamVjdCk7Ci0JCQkJQXJyYXlMaXN0IHdlYk1vZHVsZUNsYXNzcGF0aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQl0cnkgewotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHBrZ0ZyYWdtZW50Um9vdC5sZW5ndGg7IGkrKykgewotCQkJCQkJZnJhZ21lbnRSb290ID0gcGtnRnJhZ21lbnRSb290W2ldLmdldENvcnJlc3BvbmRpbmdSZXNvdXJjZSgpOwotCQkJCQkJaWYgKGZyYWdtZW50Um9vdCAhPSBudWxsCi0JCQkJCQkJCSYmIChmcmFnbWVudFJvb3QuZ2V0UHJvamVjdCgpLmVxdWFscyhwcm9qZWN0KSkKLQkJCQkJCQkJJiYgKGZyYWdtZW50Um9vdC5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpKSB7CQkJCQkKLQkJCQkJCQlvdXRwdXRDb250YWluZXIgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRPdXRwdXRDb250YWluZXIocHJvamVjdCwgcGtnRnJhZ21lbnRSb290W2ldKTsKLQkJCQkJCQlpZiAob3V0cHV0Q29udGFpbmVyICE9IG51bGwpIHsgCi0JCQkJCQkJCXdlYk1vZHVsZUNsYXNzcGF0aC5hZGQob3V0cHV0Q29udGFpbmVyLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJCX0KLQkJCQkKLQkJCQkvLyBhZGQgV2ViIG1vZHVsZSBjbGFzc3BhdGggdG8gcHJvamVjdCBjbGFzc3BhdGgKLQkJCQlJdGVyYXRvciBpdGVyID0gd2ViTW9kdWxlQ2xhc3NwYXRoLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJCXByb2plY3RDbGFzc3BhdGguYWRkKChTdHJpbmcpIGl0ZXIubmV4dCgpKTsKLQkJCQl9CQkKLQkJCX0KLQkJCQotCQkJaWYgKCFpc0RlcGVuZGVudCkgewotCQkJCWlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY29tcCkpIHsKLQkJCQkJbmVlZEphdmFDbGFzc3BhdGggPSB0cnVlOwotCQkJCQltb2R1bGVDbGFzc3BhdGggPSBnZXRXRUJJTkZMaWIocHJvamVjdCk7Ci0JCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbW9kdWxlQ2xhc3NwYXRoLmxlbmd0aDsgaisrKSB7Ci0JCQkJCQlwcm9qZWN0Q2xhc3NwYXRoLmFkZChtb2R1bGVDbGFzc3BhdGhbal0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJCi0JCX0gZWxzZSB7Ci0JCQluZWVkSmF2YUNsYXNzcGF0aCA9IHRydWU7Ci0JCX0KLQkJCi0JCS8vIElmIHRoZXJlIGFyZSBXZWIgb3IgSmF2YSBtb2R1bGUgaW4gdGhlIHByb2plY3QsIGdldCB0aGUgcHJvamVjdCdzIEphdmEgY2xhc3NwYXRoCi0JCWlmIChuZWVkSmF2YUNsYXNzcGF0aCkgewotCQkJU3RyaW5nW10gamF2YUNsYXNzcGF0aDsKLQkJCXRyeSB7Ci0JCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qID0gKElKYXZhUHJvamVjdCkgcHJvamVjdC5nZXROYXR1cmUoSmF2YUNvcmUuTkFUVVJFX0lEKTsKLQkJCQlpZiAoamF2YVByb2ogIT0gbnVsbCkgewotCQkJCQlqYXZhQ2xhc3NwYXRoID0gZ2V0Q2xhc3NwYXRoRm9ySmF2YVByb2plY3QoamF2YVByb2opOwotCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGphdmFDbGFzc3BhdGgubGVuZ3RoOyBqKyspIHsKLQkJCQkJCXByb2plY3RDbGFzc3BhdGguYWRkKGphdmFDbGFzc3BhdGhbal0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gbm90IGFibGUgdG8gZ2V0IEphdmEgY2xhc3NwYXRoLCBqdXN0IGlnbm9yZQotCQkJfQkKLQkJfQotCQkKLQkJcmV0dXJuIChTdHJpbmdbXSkgcHJvamVjdENsYXNzcGF0aC50b0FycmF5KG5ldyBTdHJpbmdbcHJvamVjdENsYXNzcGF0aC5zaXplKCldKTsKLQl9Ci0KLQkvLyBOZWVkIHRvIGdldCBhbGwgbW9kdWxlcyBpbiB0aGUgcHJvamVjdC4gSWYgdGhlcmUncyBhIEVBUiBtb2R1bGUsIGdldCB0aGUgdXRpbGl0eSBKQVJzIAotCXByaXZhdGUgU3RyaW5nW10gZ2V0VXRpbGl0eUphckNsYXNzcGF0aChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN0cmluZ1tdIHV0aWxpdHlKYXJTdHJpbmcgPSBuZXcgU3RyaW5nWzBdOwotCQlTdHJpbmdbXSBtb2R1bGVDbGFzc3BhdGggPSBuZXcgU3RyaW5nWzBdOwotCQlBcnJheUxpc3QgdXRpbGl0eUphcnNDbGFzc3BhdGggPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlTdHJpbmcgbW9kdWxlOwotCQlJVmlydHVhbENvbXBvbmVudCBjb21wID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCWlmIChjb21wICE9IG51bGwpIHsKLQkJCW1vZHVsZSA9IGNvbXAuZ2V0TmFtZSgpOwotCQkJaWYgKEoyRUVVdGlscy5pc0VBUkNvbXBvbmVudChjb21wKSkgewotCQkJCW1vZHVsZUNsYXNzcGF0aCA9IGdldENsYXNzcGF0aEZvckVBUlByb2plY3QocHJvamVjdCwgbW9kdWxlKTsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IG1vZHVsZUNsYXNzcGF0aC5sZW5ndGg7IGorKykgewotCQkJCQl1dGlsaXR5SmFyc0NsYXNzcGF0aC5hZGQobW9kdWxlQ2xhc3NwYXRoW2pdKTsKLQkJCQl9Ci0JCQkJdXRpbGl0eUphclN0cmluZyA9IChTdHJpbmdbXSkgdXRpbGl0eUphcnNDbGFzc3BhdGgudG9BcnJheShuZXcgU3RyaW5nW3V0aWxpdHlKYXJzQ2xhc3NwYXRoLnNpemUoKV0pOwotCQkJfQotCQl9IAotCi0JCXJldHVybiB1dGlsaXR5SmFyU3RyaW5nOwotCX0KLQkKLQlwcml2YXRlIFN0cmluZ1tdIGdldENsYXNzcGF0aEZvckVBUlByb2plY3QoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIG1vZHVsZSkgewotCQlJUGF0aCBwcm9qZWN0UGF0aCA9Ci0JCQlwcm9qZWN0LmdldFByb2plY3QoKS5nZXRMb2NhdGlvbigpLmFkZFRyYWlsaW5nU2VwYXJhdG9yKCkuYXBwZW5kKG1vZHVsZSkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKTsKLQkJcmV0dXJuIGdldERpcmVjdG9yeUphckZpbGVzKHByb2plY3RQYXRoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGdldERpcmVjdG9yeUphckZpbGVzKElQYXRoIGlQYXRoKSB7Ci0JCUZpbGUgZGlyID0gaVBhdGgudG9GaWxlKCk7Ci0JCVZlY3RvciBqYXJzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCQlpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlTdHJpbmdbXSBmaWxlbmFtZXMgPSBkaXIubGlzdCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoZmlsZW5hbWVzW2ldLmVuZHNXaXRoKERPVF9KQVIpKQotCQkJCQlqYXJzVmVjdG9yLmFkZChwYXRoMlN0cmluZyhpUGF0aCkgKyBmaWxlbmFtZXNbaV0pOwotCQkJfQotCQl9Ci0JCVN0cmluZ1tdIGphcnMgPSBuZXcgU3RyaW5nW2phcnNWZWN0b3Iuc2l6ZSgpXTsKLQkJamFyc1ZlY3Rvci5jb3B5SW50byhqYXJzKTsKLQkJcmV0dXJuIGphcnM7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRXRUJJTkZMaWIoSVByb2plY3QgcHJvamVjdCkgewotCQlTdHJpbmdbXSB3ZWJpbmZMaWJKYXJzID0gbmV3IFN0cmluZ1swXTsKLQkJQXJyYXlMaXN0IGFuQXJyYXlMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnkgewkJCQotCQkJCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQkJaWYgKGNvbXBvbmVudCAhPSBudWxsKSB7Ci0JCQkJCQkKLQkJCQkJCUlWaXJ0dWFsRm9sZGVyIHdlYkluZkxpYiA9IGNvbXBvbmVudC5nZXRSb290Rm9sZGVyKCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKAotCQkJCQkJCQlXRUJJTkZfTElCKSk7Ci0JCQkJCQlpZiAod2ViSW5mTGliICE9IG51bGwpIHsKLQkJCQkJCQlJVmlydHVhbFJlc291cmNlW10gcmVzb3VyY2VzID0gd2ViSW5mTGliLm1lbWJlcnMoKTsKLQkJCQkJCQlJUmVzb3VyY2UgYVJlc291cmNlID0gbnVsbDsKLQkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHJlc291cmNlcy5sZW5ndGg7IGkrKykgewotCQkJCQkJCQlhUmVzb3VyY2UgPSByZXNvdXJjZXNbaV0uZ2V0VW5kZXJseWluZ1Jlc291cmNlKCk7Ci0JCQkJCQkJCWlmIChKQVIuZXF1YWxzSWdub3JlQ2FzZShhUmVzb3VyY2UuZ2V0RmlsZUV4dGVuc2lvbigpKSkKLQkJCQkJCQkJCWFuQXJyYXlMaXN0LmFkZCggYVJlc291cmNlLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJCQl9Ci0JCQkJCQkJaWYgKGFuQXJyYXlMaXN0LnNpemUoKSAhPSAwKQotCQkJCQkJCQl3ZWJpbmZMaWJKYXJzID0gKFN0cmluZ1tdKSBhbkFycmF5TGlzdC50b0FycmF5KG5ldyBTdHJpbmdbYW5BcnJheUxpc3Quc2l6ZSgpXSk7Ci0JCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJfQotCQlyZXR1cm4gd2ViaW5mTGliSmFyczsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGdldENsYXNzcGF0aEZvckphdmFQcm9qZWN0KElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCkgewotCQlBcnJheUxpc3QgcHJvamVjdENsYXNzcGF0aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlDbGFzc3BhdGhFbnRyeVtdIGJ1aWxkUGF0aCA9Ci0JCQkJamF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgodHJ1ZSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGJ1aWxkUGF0aC5sZW5ndGg7IGkrKykgewotCQkJCVN0cmluZ1tdIGJ1aWxkUGF0aFN0cmluZyA9Ci0JCQkJCWNsYXNzcGF0aEVudHJ5MlN0cmluZygKLQkJCQkJCWJ1aWxkUGF0aFtpXSwKLQkJCQkJCWphdmFQcm9qZWN0LmdldFByb2plY3QoKSk7Ci0JCQkJZm9yIChpbnQgaiA9IDA7IGogPCBidWlsZFBhdGhTdHJpbmcubGVuZ3RoOyBqKyspIHsKLQkJCQkJcHJvamVjdENsYXNzcGF0aC5hZGQoYnVpbGRQYXRoU3RyaW5nW2pdKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpIHsKLQkJfQotCi0JCVN0cmluZ1tdIHV0aWxpdHlKYXJzQ2xhc3NwYXRoOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gamF2YVByb2plY3QuZ2V0UHJvamVjdCgpOwotCQlJUHJvamVjdFtdIHJlZmVyZW5jaW5nUHJvamVjdHMgPSBwcm9qZWN0LmdldFJlZmVyZW5jaW5nUHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWZlcmVuY2luZ1Byb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQl1dGlsaXR5SmFyc0NsYXNzcGF0aCA9IGdldFV0aWxpdHlKYXJDbGFzc3BhdGgocmVmZXJlbmNpbmdQcm9qZWN0c1tpXSk7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IHV0aWxpdHlKYXJzQ2xhc3NwYXRoLmxlbmd0aDsgaisrKSB7Ci0JCQkJcHJvamVjdENsYXNzcGF0aC5hZGQodXRpbGl0eUphcnNDbGFzc3BhdGhbal0pOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIChTdHJpbmdbXSkgcHJvamVjdENsYXNzcGF0aC50b0FycmF5KG5ldyBTdHJpbmdbcHJvamVjdENsYXNzcGF0aC5zaXplKCldKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGNsYXNzcGF0aEVudHJ5MlN0cmluZygKLQkJSUNsYXNzcGF0aEVudHJ5IGVudHJ5LAotCQlJUHJvamVjdCBwcm9qZWN0KSAKLQl7Ci0JCXN3aXRjaCAoZW50cnkuZ2V0RW50cnlLaW5kKCkpIHsKLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZIDoKLQkJCXsKLQkJCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsgcGF0aDJTdHJpbmcoZW50cnkuZ2V0UGF0aCgpKX07CQotCQkJfQotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1BST0pFQ1QgOgotCQkJewkJCQotCQkJCXJldHVybiBnZXRDbGFzc3BhdGgoCi0JCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgKLQkJCQkJCWVudHJ5LmdldFBhdGgoKS5sYXN0U2VnbWVudCgpKSwgdHJ1ZSk7Ci0JCQl9Ci0JCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfU09VUkNFIDoKLQkJCQl7Ci0JCQkJCUlQYXRoIHBhdGggPSBlbnRyeS5nZXRQYXRoKCk7Ci0JCQkJCWlmIChwYXRoLnNlZ21lbnQoMCkuZXF1YWxzKHByb2plY3QuZ2V0TmFtZSgpKSkKLQkJCQkJCXBhdGggPSBwYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMoMSk7Ci0JCQkJCXJldHVybiBuZXcgU3RyaW5nW10gewotCQkJCQkJcGF0aDJTdHJpbmcoCi0JCQkJCQkJcHJvamVjdAotCQkJCQkJCQkuZ2V0TG9jYXRpb24oKQotCQkJCQkJCQkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKQotCQkJCQkJCQkuYXBwZW5kKAotCQkJCQkJCQlwYXRoKSl9OwotCQkJCX0KLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9WQVJJQUJMRSA6Ci0JCQl7Ci0JCQkJcmV0dXJuIGNsYXNzcGF0aEVudHJ5MlN0cmluZygKLQkJCQkJSmF2YUNvcmUuZ2V0UmVzb2x2ZWRDbGFzc3BhdGhFbnRyeShlbnRyeSksCi0JCQkJCXByb2plY3QpOwotCQkJfQotCQkJZGVmYXVsdCA6Ci0JCQl7Ci0JCQkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7IHBhdGgyU3RyaW5nKGVudHJ5LmdldFBhdGgoKSl9OwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcGF0aDJTdHJpbmcoSVBhdGggcGF0aCkgewotCQlyZXR1cm4gcGF0aC50b09TU3RyaW5nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9GaWxlVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmRiYjhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci0KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbAotewotICBwdWJsaWMgRmlsZVV0aWwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RmlsZShTdHJpbmcgc3JjLCBTdHJpbmcgZGVzdCkKLSAgewotICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKLSAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNyYyk7Ci0gICAgICBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0KTsKLSAgICAgIGludCBjID0gMDsKLSAgICAgIGJ5dGVbXSBhcnJheSA9IG5ldyBieXRlWzEwMjRdOwotICAgICAgd2hpbGUgKChjID0gaXMucmVhZChhcnJheSkpID49IDApCi0gICAgICB7Ci0gICAgICAgIGZvcy53cml0ZShhcnJheSwgMCwgYyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZm9zLmNsb3NlKCk7Ci0gICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBGaWxlIGNyZWF0ZUZpbGVBbmRQYXJlbnREaXJlY3RvcmllcyhTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lKTsKLSAgICBGaWxlIHBhcmVudCA9IGZpbGUuZ2V0UGFyZW50RmlsZSgpOwotICAgIGlmICghcGFyZW50LmV4aXN0cygpKQotICAgIHsKLSAgICAgIHBhcmVudC5ta2RpcnMoKTsKLSAgICB9Ci0gICAgZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0gICAgcmV0dXJuIGZpbGU7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgZGVsZXRlRGlyZWN0b3JpZXMoRmlsZSBkaXIpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIEZpbGVbXSBjaGlsZHJlbiA9IGRpci5saXN0RmlsZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChjaGlsZHJlbltpXS5saXN0KCkgIT0gbnVsbCAmJiBjaGlsZHJlbltpXS5saXN0KCkubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgZGVsZXRlRGlyZWN0b3JpZXMoY2hpbGRyZW5baV0pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBjaGlsZHJlbltpXS5kZWxldGUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZGlyLmRlbGV0ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBmb2xkZXIgYW5kIGFsbCBwYXJlbnQgZm9sZGVycyBpZiBub3QgZXhpc3RpbmcgUHJvamVjdCBtdXN0IGV4aXN0Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlRm9sZGVyKElGb2xkZXIgZm9sZGVyLCBib29sZWFuIGZvcmNlLCBib29sZWFuIGxvY2FsKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFmb2xkZXIuZXhpc3RzKCkpCi0gICAgewotICAgICAgSUNvbnRhaW5lciBwYXJlbnQgPSBmb2xkZXIuZ2V0UGFyZW50KCk7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSUZvbGRlcikKLSAgICAgIHsKLSAgICAgICAgY3JlYXRlRm9sZGVyKChJRm9sZGVyKXBhcmVudCwgZm9yY2UsIGxvY2FsKTsKLSAgICAgIH0KLSAgICAgIGZvbGRlci5jcmVhdGUoZm9yY2UsIGxvY2FsLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlVGFyZ2V0RmlsZShTdHJpbmcgc291cmNlRmlsZU5hbWUsIFN0cmluZyB0YXJnZXRGaWxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgY3JlYXRlVGFyZ2V0RmlsZShzb3VyY2VGaWxlTmFtZSwgdGFyZ2V0RmlsZU5hbWUsIGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVUYXJnZXRGaWxlKFN0cmluZyBzb3VyY2VGaWxlTmFtZSwgU3RyaW5nIHRhcmdldEZpbGVOYW1lLCBib29sZWFuIG92ZXJ3cml0ZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZSBpZGVhbFJlc3VsdEZpbGUgPSBuZXcgRmlsZSh0YXJnZXRGaWxlTmFtZSk7Ci0gICAgaWYgKG92ZXJ3cml0ZSB8fCAhaWRlYWxSZXN1bHRGaWxlLmV4aXN0cygpKQotICAgIHsKLSAgICAgIEZpbGVVdGlsLmNyZWF0ZUZpbGVBbmRQYXJlbnREaXJlY3Rvcmllcyh0YXJnZXRGaWxlTmFtZSk7Ci0gICAgICBGaWxlVXRpbC5jb3B5RmlsZShzb3VyY2VGaWxlTmFtZSwgdGFyZ2V0RmlsZU5hbWUpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9QbGF0Zm9ybVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1BsYXRmb3JtVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFmMGUzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1BsYXRmb3JtVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbDsKLQotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLXB1YmxpYyBjbGFzcyBQbGF0Zm9ybVV0aWxzIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQVRGT1JNX1JPT1QgPSAicGxhdGZvcm06L3Jlc291cmNlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSU5fRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExOWF9GSUxFX1BST1RPQ09MID0gImZpbGU6Ly8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQVRGT1JNID0gInBsYXRmb3JtIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNPVVJDRSA9ICIvcmVzb3VyY2UiOwotCi0JcHJpdmF0ZSBQbGF0Zm9ybVV0aWxzKCkgewotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHBsYXRmb3JtIFVSTCBnaXZlbiBhbiBJUGF0aAotCSogQHBhcmFtIElQYXRoIHBhdGgKLQkqIEByZXR1cm4gU3RyaW5nIHBsYXRmb3JtVVJMCi0JKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQbGF0Zm9ybVVSTChJUGF0aCBwYXRoKSB7Ci0JCVN0cmluZyBwbGF0Zm9ybVVSTDsKLQkJcGxhdGZvcm1VUkwgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShwYXRoLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7Ci0JCS8vIG9sZCBtZXRob2Q6IGZpbGUgc3lzdGVtIHJlcHJlc2VudGF0aW9uCi0JCS8vIAlwbGF0Zm9ybVVSTCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCXJldHVybiBwbGF0Zm9ybVVSTDsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIFVSTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgUGxhdGZvcm0gVVJMIGdpdmVuIGFuIElQYXRoCi0JKiBUaGUgUGxhdGZvcm1SZXNvdXJjZU1hbmFnZXIgdW5kZXJkc3RhbmRzIHRoaXMgZm9ybWF0IGFuZCB0aGVyZWZvcmUKLQkqIHRoaXMgaXMgc3VpdGVkIGZvciBjb21tYW5kIFVSTCdzCi0JKiBAcGFyYW0gSVBhdGggcGF0aAotCSogQHJldHVybiBVUkwgUGxhdGZvcm0gVVJMCi0JKi8KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRDb21tYW5kUGxhdGZvcm1VUkwoSVBhdGggcGF0aCkgewotCQlVUkwgdXJsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXVybCA9IG5ldyBVUkwoUExBVEZPUk0sIG51bGwsIFJFU09VUkNFICsgcGF0aC50b1N0cmluZygpKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiB1cmw7Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBwYXRoIGdpdmVuIHBsYXRmb3JtIFVSTCBzdHJpbmcKLQkqIEBwYXJhbSBTdHJpbmcgcGxhdGZvcm0gVVJMIHN0cmluZwotCSogQHJldHVybiBTdHJpbmcgcGF0aCBzdHJpbmcKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhdGhGcm9tUGxhdGZvcm0oU3RyaW5nIHBsYXRmb3JtU3RyKSB7Ci0JCVN0cmluZyBwYXRoU3RyID0gcGxhdGZvcm1TdHI7Ci0KLQkJU3RyaW5nIHJvb3RMb2NhdGlvbjsKLQkJcm9vdExvY2F0aW9uID0gUExBVEZPUk1fUk9PVDsKLQkJLy8gb2xkIG1ldGhvZDogZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb24KLQkJLy8Jcm9vdExvY2F0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCWlmIChwbGF0Zm9ybVN0ci5zdGFydHNXaXRoKHJvb3RMb2NhdGlvbikpCi0JCQlwYXRoU3RyID0gcGxhdGZvcm1TdHIuc3Vic3RyaW5nKHJvb3RMb2NhdGlvbi5sZW5ndGgoKSk7Ci0JCXJldHVybiBwYXRoU3RyOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHBsYXRmb3JtIFVSTCBnaXZlbiB0aGUgcGF0aCBzdHJpbmcKLQkqIEBwYXJhbSBTdHJpbmcgcGF0aCBzdHJpbmcKLQkqIEByZXR1cm4gU3RyaW5nIHBsYXRmb3JtIFVSTCBzdHJpbmcKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsYXRmb3JtRnJvbVBhdGgoU3RyaW5nIHBhdGhTdHIpIHsKLQkJU3RyaW5nIHBsYXRmb3JtU3RyID0gcGF0aFN0cjsKLQotCQlTdHJpbmcgcm9vdExvY2F0aW9uOwotCQlyb290TG9jYXRpb24gPSBQTEFURk9STV9ST09UOwotCQkvLyBvbGQgbWV0aG9kOiBmaWxlIHN5c3RlbSByZXByZXNlbnRhdGlvbgotCQkvLwlyb290TG9jYXRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJcGxhdGZvcm1TdHIgPSByb290TG9jYXRpb24gKyBwYXRoU3RyOwotCQlyZXR1cm4gcGxhdGZvcm1TdHI7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxvY2FsIGZpbGUgc3lzdGVtIGZpbGUgZ2l2ZW4gcGxhdGZvcm0gVVJMIHN0cmluZwotCSogQHBhcmFtIFN0cmluZyBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcmV0dXJuIFN0cmluZyBmaWxlIHN0cmluZwotCSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZUZyb21QbGF0Zm9ybShTdHJpbmcgcGxhdGZvcm1TdHIpIHsKLQkJU3RyaW5nIGZpbGVTdHIgPSBwbGF0Zm9ybVN0cjsKLQkJU3RyaW5nIHBhdGhTdHIgPSBnZXRQYXRoRnJvbVBsYXRmb3JtKHBsYXRmb3JtU3RyKTsKLQotCQlmaWxlU3RyID0KLQkJCVJlc291cmNlc1BsdWdpbgotCQkJCS5nZXRXb3Jrc3BhY2UoKQotCQkJCS5nZXRSb290KCkKLQkJCQkuZ2V0RmlsZShuZXcgUGF0aChwYXRoU3RyKSkKLQkJCQkuZ2V0TG9jYXRpb24oKQotCQkJCS50b1N0cmluZygpOwotCi0JCS8vIG9sZCBtZXRob2Q6IGZpbGUgc3lzdGVtIHJlcHJlc2VudGF0aW9uCi0JCS8vCURvIG5vdGhpbmcKLQotCQlyZXR1cm4gZmlsZVN0cjsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIGZpbGUgcHJvdG9jb2wgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxvY2FsIGZpbGUgc3lzdGVtIGZpbGUgZ2l2ZW4gcGxhdGZvcm0gVVJMIHN0cmluZwotCSogQHBhcmFtIFN0cmluZyBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcmV0dXJuIFN0cmluZyB0aGUgZmlsZSBwcm90b2NvbCB1cmkKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpbGVVUkxGcm9tUGxhdGZvcm0oU3RyaW5nIHBsYXRmb3JtU3RyKSB7Ci0JCVN0cmluZyBmaWxlU3RyID0gcGxhdGZvcm1TdHI7Ci0JCVN0cmluZyBwYXRoU3RyID0gZ2V0UGF0aEZyb21QbGF0Zm9ybShwbGF0Zm9ybVN0cik7Ci0JCXRyeSB7Ci0JCQlmaWxlU3RyID0KLQkJCQlSZXNvdXJjZXNQbHVnaW4KLQkJCQkJLmdldFdvcmtzcGFjZSgpCi0JCQkJCS5nZXRSb290KCkKLQkJCQkJLmdldEZpbGUobmV3IFBhdGgocGF0aFN0cikpCi0JCQkJCS5nZXRMb2NhdGlvbigpCi0JCQkJCS50b0ZpbGUoKQotCQkJCQkudG9VUkwoKQotCQkJCQkudG9TdHJpbmcoKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKSB7Ci0JCQlmaWxlU3RyID0gZ2V0RmlsZVVSTEZyb21QYXRoKG5ldyBQYXRoKHBhdGhTdHIpKTsKLQkJfQotCQlyZXR1cm4gZmlsZVN0cjsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIGZpbGUgcHJvdG9jb2wgcmVwcmVzZW50YXRpb24gb2YgYSBsb2NhbCBmaWxlCi0JKiBAcGFyYW0gSVBhdGggdGhlIFBhdGggb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZmlsZQotCSogQHJldHVybiBTdHJpbmcgdGhlIGZpbGUgcHJvdG9jb2wgdXJpCi0JKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaWxlVVJMRnJvbVBhdGgoSVBhdGggcGF0aCkgewotCi0JCVN0cmluZyBmaWxlID0gbnVsbDsKLQkJaWYgKHBhdGggIT0gbnVsbCkgewotCQkJaWYgKCFwYXRoLmlzQWJzb2x1dGUoKSkgewotCQkJCWZpbGUgPQotCQkJCQlSZXNvdXJjZXNQbHVnaW4KLQkJCQkJCS5nZXRXb3Jrc3BhY2UoKQotCQkJCQkJLmdldFJvb3QoKQotCQkJCQkJLmdldEZpbGUocGF0aCkKLQkJCQkJCS5nZXRMb2NhdGlvbigpCi0JCQkJCQkudG9TdHJpbmcoKTsKLQkJCQlpZiAoZmlsZS5jaGFyQXQoMCkgPT0gSVBhdGguU0VQQVJBVE9SKSB7Ci0JCQkJCWZpbGUgPSBMTlhfRklMRV9QUk9UT0NPTCArIGZpbGU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmlsZSA9IFdJTl9GSUxFX1BST1RPQ09MICsgZmlsZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWZpbGUgPSBwYXRoLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCQlpZiAoZmlsZSAhPSBudWxsICYmIGZpbGUuY2hhckF0KDApID09IElQYXRoLlNFUEFSQVRPUikgewotCQkJCWZpbGUgPSBMTlhfRklMRV9QUk9UT0NPTCArIGZpbGU7Ci0JCQl9IGVsc2UgewotCQkJCWZpbGUgPSBXSU5fRklMRV9QUk9UT0NPTCArIGZpbGU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGUgPT0gbnVsbCA/IG51bGwgOiBmaWxlOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9XU0RMVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvV1NETFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYjM2NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9XU0RMVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy53c2RsLnRvSmF2YS5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5Db2xsYXRvcjsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotcHVibGljIGNsYXNzIFdTRExVdGlscyB7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERPVCA9ICIuIjsKLQotICAvKioKLSAgKiBUaGVzZSBhcmUgamF2YSBrZXl3b3JkcyBhcyBzcGVjaWZpZWQgYXQgdGhlIGZvbGxvd2luZyBVUkwgKHNvcnRlZCBhbHBoYWJldGljYWxseSkuCi0gICogaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL2pscy9zZWNvbmRfZWRpdGlvbi9odG1sL2xleGljYWwuZG9jLmh0bWwjMjI5MzA4Ci0gICogTm90ZSB0aGF0IGZhbHNlLCB0cnVlLCBhbmQgbnVsbCBhcmUgbm90IHN0cmljdGx5IGtleXdvcmRzOyB0aGV5IGFyZSBsaXRlcmFsIHZhbHVlcywKLSAgKiBidXQgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGFycmF5LCB0aGV5IGNhbiBiZSB0cmVhdGVkIGFzIGxpdGVyYWxzLgotICAqLwotICBzdGF0aWMgZmluYWwgU3RyaW5nIGtleXdvcmRzW10gPQotICB7Ci0gICAgICAiYWJzdHJhY3QiLCAgImJvb2xlYW4iLCAgICAgICJicmVhayIsICAgICAgImJ5dGUiLCAgICAgICJjYXNlIiwKLSAgICAgICJjYXRjaCIsICAgICAiY2hhciIsICAgICAgICAgImNsYXNzIiwgICAgICAiY29uc3QiLCAgICAgImNvbnRpbnVlIiwKLSAgICAgICJkZWZhdWx0IiwgICAiZG8iLCAgICAgICAgICAgImRvdWJsZSIsICAgICAiZWxzZSIsICAgICAgImV4dGVuZHMiLAotICAgICAgImZhbHNlIiwgICAgICJmaW5hbCIsICAgICAgICAiZmluYWxseSIsICAgICJmbG9hdCIsICAgICAiZm9yIiwKLSAgICAgICJnb3RvIiwgICAgICAiaWYiLCAgICAgICAgICAgImltcGxlbWVudHMiLCAiaW1wb3J0IiwgICAgImluc3RhbmNlb2YiLAotICAgICAgImludCIsICAgICAgICJpbnRlcmZhY2UiLCAgICAibG9uZyIsICAgICAgICJuYXRpdmUiLCAgICAibmV3IiwKLSAgICAgICJudWxsIiwgICAgICAicGFja2FnZSIsICAgICAgInByaXZhdGUiLCAgICAicHJvdGVjdGVkIiwgInB1YmxpYyIsCi0gICAgICAicmV0dXJuIiwgICAgInNob3J0IiwgICAgICAgICJzdGF0aWMiLCAgICAgInN0cmljdGZwIiwgICJzdXBlciIsCi0gICAgICAic3dpdGNoIiwgICAgInN5bmNocm9uaXplZCIsICJ0aGlzIiwgICAgICAgInRocm93IiwgICAgICJ0aHJvd3MiLAotICAgICAgInRyYW5zaWVudCIsICJ0cnVlIiwgICAgICAgICAidHJ5IiwgICAgICAgICJ2b2lkIiwgICAgICAidm9sYXRpbGUiLAotICAgICAgIndoaWxlIgotICB9OwotCi0gIC8qKiBDb2xsYXRvciBmb3IgY29tcGFyaW5nIHRoZSBzdHJpbmdzICovCi0gIHN0YXRpYyBmaW5hbCBDb2xsYXRvciBlbmdsaXNoQ29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRU5HTElTSCk7Ci0KLSAgLyoqIFVzZSB0aGlzIGNoYXJhY3RlciBhcyBzdWZmaXggKi8KLSAgc3RhdGljIGZpbmFsIGNoYXIga2V5d29yZFByZWZpeCA9ICdfJzsKLQotICBwcml2YXRlIFdTRExVdGlscygpIHsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHNlcnZpY2UgZWxlbWVudCBpbiB0aGUgV1NETCBkZWZpbml0aW9uLgotICAqIEByZXR1cm4gU3RyaW5nIHNlcnZpY2UgZWxlbWVudCBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZpY2VFbGVtZW50TmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gIAlyZXR1cm4gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcG9ydCB0eXBlIGVsZW1lbnQgcG9pbnRzIHRvIGJ5IHRoZSBmaXJzdCBzZXJ2aWNlIGFuZCBwb3J0IGVsZW1lbnQgaW4gdGhlIFdTREwgZGVmaW5pdGlvbi4KLSAgKiBAcmV0dXJuIFN0cmluZyBwb3J0IHR5cGUgZWxlbWVudCBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBvcnRUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgCi0gICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8cG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCk7aSsrKSB7Ci0gICAgICAgIGlmIChwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldChpKSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7Ci0gICAgICAgICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotICAgICAgICAgICByZXR1cm4gYmluZGluZy5nZXRQb3J0VHlwZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuICIiOwotICAKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBvcnQgZWxlbWVudCBpbiB0aGUgV1NETCBkZWZpbml0aW9uLgotICAqIEByZXR1cm4gU3RyaW5nIHBvcnQgbmFtZQotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQb3J0TmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgCi0gICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8cG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCk7aSsrKSB7Ci0gICAgICAgIGlmIChwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldChpKSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSAKLSAgICAgICAgICByZXR1cm4gcG9ydC5nZXROYW1lKCk7Ci0gICAgICB9ICAKLSAgICB9Ci0gICAgIHJldHVybiAiIjsKLSAgfQotCi0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBtYWtlTmFtZXNwYWNlIChTdHJpbmcgY2xzTmFtZSkgewotCSAgcmV0dXJuIG1ha2VOYW1lc3BhY2UoY2xzTmFtZSwgImh0dHAiKTsKLSAgfQotCi0gIC8qKgotICAgKiBNYWtlIG5hbWVzcGFjZSBmcm9tIGEgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUKLSAgICogYW5kIHRoZSBnaXZlbiBwcm90b2NvbAotICAgKgotICAgKiBAcGFyYW0gY2xzTmFtZSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZQotICAgKiBAcGFyYW0gcHJvdG9jb2wgcHJvdG9jb2wgU3RyaW5nCi0gICAqIEByZXR1cm4gbmFtZXNwYWNlIG5hbWVzcGFjZSBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG1ha2VOYW1lc3BhY2UgKFN0cmluZyBjbHNOYW1lLCBTdHJpbmcgcHJvdG9jb2wpIHsKLQkgIGlmIChjbHNOYW1lLmxhc3RJbmRleE9mKCcuJykgPT0gLTEpCi0JCSAgcmV0dXJuIHByb3RvY29sICsgIjovLyIgKyAiRGVmYXVsdE5hbWVzcGFjZSI7Ci0JICBTdHJpbmcgcGFja2FnZU5hbWUgPSBjbHNOYW1lLnN1YnN0cmluZygwLCBjbHNOYW1lLmxhc3RJbmRleE9mKCcuJykpOwotCSAgcmV0dXJuIG1ha2VOYW1lc3BhY2VGcm9tUGFja2FnZU5hbWUocGFja2FnZU5hbWUsIHByb3RvY29sKTsgICAgICAgCi0gIH0KLQotICAgIAotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbWFrZU5hbWVzcGFjZUZyb21QYWNrYWdlTmFtZShTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBwcm90b2NvbCkgewotCSAgaWYgKHBhY2thZ2VOYW1lID09IG51bGwgfHwgcGFja2FnZU5hbWUuZXF1YWxzKCIiKSkKLQkJICByZXR1cm4gcHJvdG9jb2wgKyAiOi8vIiArICJEZWZhdWx0TmFtZXNwYWNlIjsKLQkgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoIHBhY2thZ2VOYW1lLCAiLiIgKTsKLQkgIFN0cmluZ1tdIHdvcmRzID0gbmV3IFN0cmluZ1sgc3QuY291bnRUb2tlbnMoKSBdOwotCSAgZm9yKGludCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKQotCQkgIHdvcmRzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0KLQkgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoODApOwotCSAgZm9yKGludCBpID0gd29yZHMubGVuZ3RoLTE7IGkgPj0gMDsgLS1pKSB7Ci0JCSAgU3RyaW5nIHdvcmQgPSB3b3Jkc1tpXTsKLQkJICAvLyBzZXBlcmF0ZSB3aXRoIGRvdAotCQkgIGlmKCBpICE9IHdvcmRzLmxlbmd0aC0xICkKLQkJCSAgc2IuYXBwZW5kKCcuJyk7Ci0JCSAgc2IuYXBwZW5kKCB3b3JkICk7Ci0JICB9Ci0JICByZXR1cm4gcHJvdG9jb2wgKyAiOi8vIiArIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm4gYSBEZWZpbml0aW9uIGZvciB0aGUgd3NkbCB1cmwgZ2l2ZW4gCi0gICoKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBEZWZpbml0aW9uIGdldFdTRExEZWZpbml0aW9uKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgaWYod3NkbFVSTCA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQotICAgIFdTRExGYWN0b3J5IHdzZGxGYWN0b3J5OwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgdHJ5IHsKLSAgICAgIHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICAgICAgV1NETFJlYWRlciB3c2RsUmVhZGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgICAgZGVmaW5pdGlvbiA9IHdzZGxSZWFkZXIucmVhZFdTREwod3NkbFVSTCk7Ci0gICAgfSAKLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gY2FuIGJlIFdTRExFeGNlcHRpb24gb3IgSU9FeGNlcHRpb24KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKG5hbWVzcGFjZSk7Ci0gICAgIH0KLSAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChQb3J0IHBvcnQsIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAocG9ydCAhPSBudWxsICYmIG5zMnBrZ01hcCAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotICAgICAgUU5hbWUgYm5kUU5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCk7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gYm5kUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBPYmplY3QgcGtnID0gbnMycGtnTWFwLmdldChuYW1lc3BhY2UpOwotICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICByZXR1cm4gKFN0cmluZylwa2c7Ci0gICAgfQotICAgIHJldHVybiBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKHBvcnQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChEZWZpbml0aW9uIGRlZmluaXRpb24sIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsICYmIG5zMnBrZ01hcCAhPSBudWxsKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgcmV0dXJuIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwocG9ydCwgbnMycGtnTWFwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwoZGVmaW5pdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIH0KLSAgICByZXR1cm4gZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChwb3J0KTsKLSAgfQotCi0vLyBUaGlzIGlzIHlldCBhbm90aGVyIG5hbWluZyBhbGdvcml0aG0gYmFzZWQgb24gd2Vic2VydmljZXMuamFyCi0vLyBUaGV5IGFsd2F5cyB1c2UgdGhlIGJpbmRpbmcgbmFtZXNwYWNlIGFzIHRoZSBwYWNrYWdlIG5hbWUKLS8vIG9mIHRoZSBCaW5kaW5nSW1wbCBjbGFzcy4KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwoUG9ydCBwb3J0KQotewotICAgaWYgKHBvcnQgIT0gbnVsbCkKLSAgIHsKLQkgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotLy8JICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKTsKLQkgIFFOYW1lIGJuZFFOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpOwotCSAgU3RyaW5nIG5hbWVzcGFjZSA9IGJuZFFOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCSAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgfQotICAgcmV0dXJuICIiOwotfQotCi0vKioKLSogR2V0IHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBQb3J0IFR5cGUKLSogCi0qLwotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydFR5cGVOYW1lc3BhY2UoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotewotICBTdHJpbmcgbmFtZXNwYWNlID0gIiI7Ci0gIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gIHsKLQlTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IAotCXdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSl7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgaXRlcmF0b3IubmV4dCgpOwotICAgICAgZm9yIChpbnQgaT0wOyBpPHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpO2krKykgewotICAgICAgICBpZiAocG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5nZXQoaSkgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcyl7IAotCSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gcG9ydC5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKTsKLQkgICAgICBRTmFtZSBibmRRTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7Ci0JICAgICAgbmFtZXNwYWNlID0gYm5kUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAJfSAgCi0JICB9Ci0gIAl9Ci0gIH0gIAotICByZXR1cm4gbmFtZXNwYWNlOwotfQotCi0vLyBUaGlzIGlzIHlldCBhbm90aGVyIG5hbWluZyBhbGdvcml0aG0gYmFzZWQgb24gd2Vic2VydmljZXMuamFyCi0vLyBUaGV5IGFsd2F5cyB1c2UgdGhlIHBvcnR0eXBlIG5hbWVzcGFjZSBhcyB0aGUgcGFja2FnZSBuYW1lCi0vLyBvZiB0aGUgSmF2YSBjbGFzcyAoaW4gZWpiKS4KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lRm9yUG9ydFR5cGUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotewotICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgIHsKLQkgIFN0cmluZyBuYW1lc3BhY2UgPSBnZXRQb3J0VHlwZU5hbWVzcGFjZShkZWZpbml0aW9uKTsKLQkgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuICIiOwotfQotCi0gIC8qKgotICAqIGNoZWNrcyBpZiB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgdmFsaWQgamF2YSBrZXl3b3JkLgotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlL2ZhbHNlCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0phdmFLZXl3b3JkKFN0cmluZyBrZXl3b3JkKSB7Ci0gICAgcmV0dXJuIChBcnJheXMuYmluYXJ5U2VhcmNoKGtleXdvcmRzLCBrZXl3b3JkLCBlbmdsaXNoQ29sbGF0b3IpID49IDApOwotICB9Ci0KLSAgLyoqCi0gICogVHVybiBhIGphdmEga2V5d29yZCBzdHJpbmcgaW50byBhIG5vbi1KYXZhIGtleXdvcmQgc3RyaW5nLiAgKFJpZ2h0IG5vdwotICAqIHRoaXMgc2ltcGx5IG1lYW5zIGFwcGVuZGluZyBhbiB1bmRlcnNjb3JlLikKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbWFrZU5vbkphdmFLZXl3b3JkKFN0cmluZyBrZXl3b3JkKXsKLSAgICByZXR1cm4gIGtleXdvcmRQcmVmaXggKyBrZXl3b3JkOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RnVsbHlRdWFsaWZpZWRQb3J0VHlwZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJlYW5OYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGJlYW5OYW1lLmFwcGVuZChnZXRQYWNrYWdlTmFtZUZvclBvcnRUeXBlKGRlZmluaXRpb24pKTsgCi0gICAgYmVhbk5hbWUuYXBwZW5kKERPVCk7Ci0gICAgYmVhbk5hbWUuYXBwZW5kKGdldFBvcnRUeXBlTmFtZShkZWZpbml0aW9uKSk7Ci0gICAgcmV0dXJuIGJlYW5OYW1lLnRvU3RyaW5nKCk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBnZXROYW1lCi0gICAqIEBwYXJhbSB1cmkgU3RyaW5nCi0gICAqIEByZXR1cm4gZ2V0IHRoZSBmaWxlIG5hbWUgYWZ0ZXIgdGhlIGxhc3QgXCBhbmQgLwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShTdHJpbmcgdXJpKSB7Ci0KLQkvLyBHZXQgZXZlcnl0aGluZyBhZnRlciBsYXN0IHNsYXNoIG9yIGJhY2tzbGFzaAotCWludCBic2xhc2ggPSB1cmkubGFzdEluZGV4T2YoIlxcIik7Ci0JaW50IHNsYXNoID0gdXJpLmxhc3RJbmRleE9mKCIvIik7Ci0JaW50IGkgPSAgYnNsYXNoID4gc2xhc2ggPyBic2xhc2ggOiBzbGFzaDsKLQlTdHJpbmcgZmlsZU5hbWUgPSB1cmkuc3Vic3RyaW5nKGkrMSkucmVwbGFjZSgnPycsICcuJyk7Ci0KLQlyZXR1cm4gZmlsZU5hbWU7Ci0gIH0KLQotCi0vKioKLSAqIGdldFdTRExOYW1lCi0gKiBAcGFyYW0gdXJpIFN0cmluZwotICogQHJldHVybiBnZXQgdGhlIGZpbGUgbmFtZSBhZnRlciB0aGUgbGFzdCBcIGFuZCAvLCB0cmltbWVkLCBkZWZhdWx0ZWQgdG8KLSAqICAgICAgICAgImRlZmF1bHQud3NkbCIgaWYgdGhlcmUgaXMgbm8gbmFtZSwgYW5kIGVuZGluZyB3aXRoICIud3NkbCIuCi0gKi8KLSBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0RMTmFtZShTdHJpbmcgdXJpKSB7Ci0KLQkvLyBHZXQgZXZlcnl0aGluZyBhZnRlciBsYXN0IHNsYXNoIG9yIGJhY2tzbGFzaCBmcm9tIGlucHV0IFVSSQotCS8vIHdpdGggbm8gd2hpdGVzcGFjZS4KLQlTdHJpbmcgV1NETE5hbWUgPSBnZXROYW1lKHVyaSkudHJpbSgpOwotCi0JLy8gaWYgZW1wdHksIHJldHVybiB0aGUgZGVmYXVsdCAiZGVmYXVsdC53c2RsIgotCWlmICggV1NETE5hbWUuZXF1YWxzKCAiIiApICkgewotCQlXU0RMTmFtZSA9ICJkZWZhdWx0LndzZGwiOwotCX0KLQotCS8vIG1ha2Ugc3VyZSBuYW1lIGVuZHMgd2l0aCAiLndzZGwiLCBsb3dlciBjYXNlLgotCWVsc2UgewotCQlpZiAoICEgV1NETE5hbWUuZW5kc1dpdGgoICIud3NkbCIgKSApIHsKLQkJCWlmICggV1NETE5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCggIi53c2RsIiApICkgewotCQkJCWludCBsYXN0RG90ID0gV1NETE5hbWUubGFzdEluZGV4T2YoIi4iKTsKLQkJCQlXU0RMTmFtZSA9IFdTRExOYW1lLnN1YnN0cmluZyggMCwgbGFzdERvdCApICsgIi53c2RsIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVdTRExOYW1lID0gV1NETE5hbWUgKyAiLndzZGwiOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIFdTRExOYW1lOwotIH0KLQotIC8qKgotICAqIGdldFBvcnRUeXBlTmFtZUZyb21CZWFuTmFtZQotICAqIEBwYXJhbSBiZWFubmFtZSBTdHJpbmcKLSAgKiBAcmV0dXJuIGdldCB0aGUgcG9ydCB0eXBlIG5hbWUgYmFzZWQgb24gdGhlIGJlYW4gbmFtZQotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQb3J0VHlwZU5hbWVGcm9tQmVhbk5hbWUoU3RyaW5nIGJlYW5OYW1lKSB7Ci0gICAgcmV0dXJuIGJlYW5OYW1lLnN1YnN0cmluZyhiZWFuTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSk7CQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoU2VydmljZSBzZXJ2aWNlLCBNYXAgbnMycGtnTWFwKQotICB7Ci0gICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gc2VydmljZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5zMnBrZ01hcCAhPSBudWxsKQotICAgICAgewotICAgICAgICBPYmplY3QgcGtnID0gbnMycGtnTWFwLmdldChuYW1lc3BhY2UpOwotICAgICAgICBpZiAocGtnICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIChTdHJpbmcpcGtnOwotICAgICAgfQotICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gIiI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShQb3J0IHBvcnQsIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAocG9ydCAhPSBudWxsKQotICAgICAgcmV0dXJuIGdldFBhY2thZ2VOYW1lKHBvcnQuZ2V0QmluZGluZygpLCBuczJwa2dNYXApOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAiIjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKEJpbmRpbmcgYmluZGluZywgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGlmIChuczJwa2dNYXAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IHBrZyA9IG5zMnBrZ01hcC5nZXQobmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoUG9ydFR5cGUgcG9ydFR5cGUsIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGlmIChuczJwa2dNYXAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IHBrZyA9IG5zMnBrZ01hcC5nZXQobmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLQotICAvKioKLSAgICogbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkKLSAgICogQHJldHVybiBwYWNrYWdlIG5hbWUgYmFzZWQgb24gbmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUoU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgewotICAJLyoqCi0gIAkgKiBUT0RPOiAgVGhlIG1ha2VQYWNrYWdlTmFtZSBtZXRob2QgZnJvbSAKLSAgCSAqIG9yZy5hcGFjaGUuYXhpcy53c2RsLnRvSmF2YS5VdGlscyBpbiBheGlzLTFfMSBpcyBjYWxsZWQgdG8gbWFwIG5hbWVzcGFjZSB0byBwYWNrYWdlIG5hbWUuICAKLSAgCSAqIFRoaXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGFuIGV4dGVuc2lvbiBwb2ludCB0byBwbHVnIGluIHJ1bnRpbWUgZW1pdHRlciBzcGVjaWZpYyBuYW1lc3BhY2UgdG8gCi0gIAkgKiBwYWNrYWdlIG1hcHBpbmcgYWxnb3JpdGhtIAotICAJICovCi0gIAlyZXR1cm4gVXRpbHMubWFrZVBhY2thZ2VOYW1lKG5hbWVzcGFjZVVSSSk7Ci0gIAkKLS8vICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoODApOwotLy8gICAgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsICYmIG5hbWVzcGFjZVVSSS5sZW5ndGgoKSA+IDApCi0vLyAgICB7Ci0vLyAgICAgIFN0cmluZyBob3N0bmFtZSA9IG51bGw7Ci0vLyAgICAgIHRyeQotLy8gICAgICB7Ci0vLyAgICAgICAgaG9zdG5hbWUgPSBuZXcgVVJMKG5hbWVzcGFjZVVSSSkuZ2V0SG9zdCgpOwotLy8gICAgICB9Ci0vLyAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLS8vICAgICAgewotLy8gICAgICAgIGludCBpbmRleCA9IG5hbWVzcGFjZVVSSS5pbmRleE9mKCI6Iik7Ci0vLyAgICAgICAgaWYgKGluZGV4ID4gLTEpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgaG9zdG5hbWUgPSBuYW1lc3BhY2VVUkkuc3Vic3RyaW5nKGluZGV4KzEpOwotLy8gICAgICAgICAgaW5kZXggPSBob3N0bmFtZS5pbmRleE9mKCIvIik7Ci0vLyAgICAgICAgICBpZiAoaW5kZXggPiAtMSkKLS8vICAgICAgICAgICAgaG9zdG5hbWUgPSBob3N0bmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotLy8gICAgICAgIH0KLS8vICAgICAgICBlbHNlCi0vLyAgICAgICAgICBob3N0bmFtZSA9IG5hbWVzcGFjZVVSSTsKLS8vICAgICAgfQotLy8gICAgICAKLS8vCSAgLy8gaWYgd2UgZGlkbid0IGZpbGUgYSBob3N0bmFtZSwgYmFpbAotLy8JICBpZiAoaG9zdG5hbWUgPT0gbnVsbCkgewotLy8JCSAgcmV0dXJuIG51bGw7Ci0vLwkgIH0KLS8vCi0vLyAgICAgIC8vY29udmVydCBpbGxlZ2FsIGphdmEgaWRlbnRpZmllcgotLy8gICAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoJy0nLCAnXycpOwotLy8gICAgICAvLyB0b2tlbml6ZSB0aGUgaG9zdG5hbWUgYW5kIHJldmVyc2UgaXQKLS8vICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihob3N0bmFtZSwgIi4iKTsKLS8vICAgICAgU3RyaW5nW10gd29yZHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotLy8gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKQotLy8gICAgICAgIHdvcmRzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0vLyAgICAgIGZvcihpbnQgaSA9IHdvcmRzLmxlbmd0aC0xOyBpID49IDA7IC0taSkKLS8vICAgICAgewotLy8gICAgICAgIFN0cmluZyB3b3JkID0gd29yZHNbaV07Ci0vLyAgICAgICAgaWYgKGlzSmF2YUtleXdvcmQod29yZCkpCi0vLyAgICAgICAgICB3b3JkID0gbWFrZU5vbkphdmFLZXl3b3JkKHdvcmQpOwotLy8gICAgICAgIC8vIHNlcGVyYXRlIHdpdGggZG90Ci0vLyAgICAgICAgaWYgKGkgIT0gd29yZHMubGVuZ3RoLTEpCi0vLyAgICAgICAgICBzYi5hcHBlbmQoJy4nKTsKLS8vICAgICAgICAvLyBjb252ZXJ0IGRpZ2l0cyB0byB1bmRlcnNjb3JlcwotLy8gICAgICAgIGlmIChDaGFyYWN0ZXIuaXNEaWdpdCh3b3JkLmNoYXJBdCgwKSkpCi0vLyAgICAgICAgICBzYi5hcHBlbmQoJ18nKTsKLS8vICAgICAgICAgIHNiLmFwcGVuZCh3b3JkKTsKLS8vICAgICAgfQotLy8gICAgfQotLy8gICAgcmV0dXJuIG5vcm1hbGl6ZVBhY2thZ2VOYW1lKHNiLnRvU3RyaW5nKCksIERPVC5jaGFyQXQoMCkpOwotICB9Ci0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlc29sdmVEb3RJblBvcnROYW1lKFN0cmluZyBuYW1lKSB7Ci0JaWYobmFtZS5pbmRleE9mKCIuIik8MCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgYm9vbGVhbiBhZnRlckRvdCA9IGZhbHNlOwotICAgIGZvcihpbnQgaT0wOyBpPG5hbWUubGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgCWlmKG5hbWUuY2hhckF0KGkpPT0nLicpCi0gICAgCXsKLSAgICAJCWFmdGVyRG90ID0gdHJ1ZTsKLSAgICAJfQotICAgIAllbHNlIGlmKGFmdGVyRG90KQotICAgIAl7Ci0gICAgCQlzYi5hcHBlbmQobmFtZS5zdWJzdHJpbmcoaSxpKzEpLnRvVXBwZXJDYXNlKCkpOwotICAgIAkJYWZ0ZXJEb3Q9ZmFsc2U7Ci0gICAgCX0KLSAgICAJZWxzZQotICAgIAl7Ci0gICAgCQlzYi5hcHBlbmQobmFtZS5jaGFyQXQoaSkpOwotICAgIAl9Ci0gICAgfQotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc0ZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc0ZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZDM0YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzTWFwcGluZ3NGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgQXhpc01hcHBpbmdzRnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBib29sZWFuIHNob3dNYXBwaW5nc187Ci0KLSAgcHVibGljIEF4aXNNYXBwaW5nc0ZyYWdtZW50KCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgc2V0VHJ1ZUZyYWdtZW50KCBuZXcgU2ltcGxlRnJhZ21lbnQoICJBeGlzTWFwcGluZ3NXaWRnZXQiICkpOwotICAgIHNldENvbmRpdGlvbiggbmV3IENvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaG93TWFwcGluZ3NfOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9ICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNob3dNYXBwaW5nKCBib29sZWFuIHNob3dNYXBwaW5ncyApCi0gIHsKLSAgICBzaG93TWFwcGluZ3NfID0gc2hvd01hcHBpbmdzOwotICB9ICAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc1dpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzTWFwcGluZ3NXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1MTU5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc1dpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuVGFibGVWaWV3ZXJXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzTWFwcGluZ3NXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpIjsKLSAgCi0gIHByaXZhdGUgVGFibGVWaWV3ZXJXaWRnZXQgbWFwcGluZ3NfOwotCi0gIHByaXZhdGUgYnl0ZSBtb2RlXzsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhUGFyYW1ldGVyXzsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9CRUFOMlhNTCA9IChieXRlKTA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX1hNTDJCRUFOID0gKGJ5dGUpMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfWE1MMlBST1hZID0gKGJ5dGUpMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfWE1MMkVKQiA9IChieXRlKTM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX0VKQjJYTUwgPSAoYnl0ZSk0OwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9QQUNLQUdFID0gImRlZmF1bHQuamF2YXBhY2thZ2UiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX05BTUVTUEFDRSA9ICJodHRwOi8vZGVmYXVsdC5uYW1lc3BhY2UiOwotICAKLSAgLypDT05URVhUX0lEIFBXSk0wMDAxIGZvciB0aGUgV1NETCB0byBKYXZhIE1hcHBpbmdzIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXSk1fUEFHRSA9ICJQV0pNMDAwMSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBBeGlzTWFwcGluZ3NXaWRnZXQoIGJ5dGUgbW9kZSApCi0gIHsKLSAgICBtb2RlXyA9IG1vZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsKLSAgICAgICAgCi0gICAgLy8gVE9ETyBUaGUgVE9PTFRJUF9QV0pNX1BBR0Uga2V5IGRvZXNuJ3Qgc2VlbSB0byBleGlzdCBhbnl3aGVyZT8/PwotCS8vcGFyZW50LnNldFRvb2xUaXBUZXh0KCBtc2dVdGlscy5nZXRNZXNzYWdlKCAiVE9PTFRJUF9QV0pNX1BBR0UiICkgKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBwYXJlbnQsIHBsdWdpbklkXyArICIuIiArIElORk9QT1BfUFdKTV9QQUdFICk7Ci0gICAgCi0gICAgVGV4dCBtYXBwaW5nTGFiZWwgPSBuZXcgVGV4dCggcGFyZW50LCBTV1QuUkVBRF9PTkxZIHwgU1dULldSQVAgKTsKLSAgICBtYXBwaW5nTGFiZWwuc2V0VGV4dCggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9NQVBQSU5HX1BBSVJTICk7Ci0gICAgbWFwcGluZ0xhYmVsLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgTGlzdCBpbml0VmFsdWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIGlmKCBtb2RlXyA9PSBNT0RFX0JFQU4yWE1MIHx8IG1vZGVfID09IE1PREVfRUpCMlhNTCkgCi0gICAgewotCQlTdHJpbmdbXSBjb2x1bW5zID0geyBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9MQUJFTF9QQUNLQUdFLAotCQkJCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX0xBQkVMX05BTUVTUEFDRX07Ci0JCW1hcHBpbmdzXyA9IG5ldyBUYWJsZVZpZXdlcldpZGdldCggY29sdW1ucywgaW5pdFZhbHVlcywgbmV3IFN0cmluZ1tdIHtERUZBVUxUX1BBQ0tBR0UsIERFRkFVTFRfTkFNRVNQQUNFfSwgVGFibGVWaWV3ZXJXaWRnZXQuTUFQX09ORV9UT19PTkUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCWVsc2UgCi0JewotICAgICAgCVN0cmluZ1tdIGNvbHVtbnMgPSB7IEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX0xBQkVMX05BTUVTUEFDRSwKLSAgICAgIAkJCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX0xBQkVMX1BBQ0tBR0V9OwotCQltYXBwaW5nc18gPSBuZXcgVGFibGVWaWV3ZXJXaWRnZXQoIGNvbHVtbnMsIGluaXRWYWx1ZXMsIG5ldyBTdHJpbmdbXSB7REVGQVVMVF9OQU1FU1BBQ0UsIERFRkFVTFRfUEFDS0FHRSB9LCBUYWJsZVZpZXdlcldpZGdldC5NQVBfTUFOWV9UT19PTkUpOyAvLyROT04tTkxTLTEkCi0JfQotICAgIAotCW1hcHBpbmdzXy5hZGRDb250cm9scyggcGFyZW50LCBzdGF0dXNMaXN0ZW5lciApOwotICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gbWFwcGluZ3NfLmdldFN0YXR1cygpOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEphdmFQYXJhbWV0ZXIoIEphdmFXU0RMUGFyYW1ldGVyIHBhcmFtZXRlciApCi0gIHsKLSAgICBqYXZhUGFyYW1ldGVyXyA9IHBhcmFtZXRlcjsKLSAgfQotICAKLSAgcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFQYXJhbWV0ZXIoKQotICB7Ci0gICAgaWYoIG1vZGVfID09IE1PREVfQkVBTjJYTUwgfHwgbW9kZV8gPT0gTU9ERV9FSkIyWE1MIHx8IG1vZGVfID09IE1PREVfWE1MMkJFQU4gfHwgbW9kZV8gPT0gTU9ERV9YTUwyUFJPWFkpCi0gICAgewotICAgICAgLy9TZXQgdGhlIG1hcHBpbmdzIG9uIGphdmFQYXJhbWV0ZXIKLSAgICAgIFRhYmxlSXRlbVtdIHBhaXJzID0gbWFwcGluZ3NfLmdldEl0ZW1zKCk7Ci0gIAkgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgCSAgZm9yIChpbnQgaT0wOyBpPHBhaXJzLmxlbmd0aDsgaSsrKQotICAJICB7Ci0gIAkJbWFwLnB1dChwYWlyc1tpXS5nZXRUZXh0KDApLHBhaXJzW2ldLmdldFRleHQoMSkpOwotICAJICB9Ci0gIAkgIGphdmFQYXJhbWV0ZXJfLnNldE1hcHBpbmdzKG1hcCk7Ci0gIAkgIAotICAJICAvL1NldCB0aGUgbmFtZXNwYWNlIG9uIHRoZSBqYXZhUGFyYW1ldGVyCi0gIAkgIFN0cmluZyBiZWFuTmFtZSA9IGphdmFQYXJhbWV0ZXJfLmdldEJlYW5OYW1lKCk7Ci0JICBpZihiZWFuTmFtZSAhPSBudWxsICYmICFiZWFuTmFtZS5lcXVhbHMoIiIpKQotCSAgewotCQlTdHJpbmcgcGFja2FnZU5hbWUgPSBiZWFuTmFtZS5zdWJzdHJpbmcoMCwgYmVhbk5hbWUubGFzdEluZGV4T2YoJy4nKSk7Ci0JCWlmKG1hcC5jb250YWluc0tleShwYWNrYWdlTmFtZSkpCi0JCXsKLQkJICBTdHJpbmcgdG5zID0gKFN0cmluZyltYXAuZ2V0KHBhY2thZ2VOYW1lKTsKLQkJICBqYXZhUGFyYW1ldGVyXy5zZXROYW1lc3BhY2UodG5zKTsKLQkJfQkJCi0JICB9Ci0KLSAgICB9Ci0gICAgcmV0dXJuIGphdmFQYXJhbWV0ZXJfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNQcm94eVdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzUHJveHlXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMwOGJmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNQcm94eVdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDExNTE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIEF4aXNQcm94eVdpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiOwotICAKLSAgLypDT05URVhUX0lEIFBXSkIwMDAxIGZvciB0aGUgV1NETCB0byBKYXZhIEJpbmRpbmdzIFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BXSkJfUEFHRSA9ICJQV0pCMDAwMSI7CS8vJE5PTi1OTFMtMSQKLQkJCi0gIHByaXZhdGUgQ29tYm8gb3V0cHV0Rm9sZGVyQ29tYm9fOwotICAvKkNPTlRFWFRfSUQgUFdKQjAwMDMgZm9yIHRoZSBGb2xkZXIgZmllbGQgb2YgdGhlIFdTREwgdG8gSmF2YSBCaW5kaW5ncyBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QV0pCX1RFWFRfRk9MREVSID0gIlBXSkIwMDAzIjsJLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgQnV0dG9uIGdlblByb3h5Q2hlY2tib3hfOwotICAvKkNPTlRFWFRfSUQgUFdKQjAwMDkgSW5kaWNhdGVzIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBwcm94eSBvciBub3QuICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWSA9ICJQV0pCMDAwOSI7CS8vJE5PTi1OTFMtMSQKLQkJCi0gIHByaXZhdGUgQnV0dG9uIHNob3dNYXBwaW5nc0NoZWNrYm94XzsKLSAgLypDT05URVhUX0lEIFBXSkIwMDE2IGZvciB0aGUgU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX04yUF9TSE9XX01BUFBJTkdTID0gIlBXSkIwMDE2IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotICAgIFVJVXRpbHMgICAgICB1aVV0aWxzICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsKLSAgICAKLQlwYXJlbnQuc2V0VG9vbFRpcFRleHQoIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV0pCX1BBR0UgKTsKLQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBwYXJlbnQsIHBsdWdpbklkXyArICIuIiArICBJTkZPUE9QX1BXSkJfUEFHRSk7Ci0gICAgCi0gICAgZ2VuUHJveHlDaGVja2JveF8gPSB1aVV0aWxzLmNyZWF0ZUNoZWNrYm94KCBwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfR0VOUFJPWFksCi0gICAgCQkJCQkJCQkJCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWSApOwotICAgIGdlblByb3h5Q2hlY2tib3hfLmFkZExpc3RlbmVyKCBTV1QuU2VsZWN0aW9uLCBzdGF0dXNMaXN0ZW5lciApOwotICAgIGdlblByb3h5Q2hlY2tib3hfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZW5Qcm94eSgpOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAKLSAgICBDb21wb3NpdGUgdGV4dEdyb3VwID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMiwgNSwgMCApOwotICAgIAotICAgIG91dHB1dEZvbGRlckNvbWJvXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8oIHRleHRHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9GT0xERVJfTkFNRSwKLSAgICAJCQkJCQkJCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdKQl9URVhUX0ZPTERFUiwKLSAgICAJCQkJCQkJCQlJTkZPUE9QX1BXSkJfVEVYVF9GT0xERVIsCi0gICAgCQkJCQkJCQkJU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0gICAgCi0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfID0gdWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0VYUExPUkVfTUFQUElOR1NfWE1MMkJFQU4sCi0gICAgCQkJCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX04yUF9TSE9XX01BUFBJTkdTLAotICAgIAkJCQkJCQkJCUlORk9QT1BfTjJQX1NIT1dfTUFQUElOR1MgKTsKLSAgICAvLyBTaW5jZSB0aGlzIHdpZGdldCBhZmZlY3RzIHdoZXRoZXIgdGhlIG5leHQgcGFnZSBpcyBzaG93biBvciBub3Qgd2UKLSAgICAvLyBuZWVkIHRvIGFkZCB0aGUgc3RhdHVzTGlzdGVuZXIuCi0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfLmFkZExpc3RlbmVyKCBTV1QuU2VsZWN0aW9uLCBzdGF0dXNMaXN0ZW5lciApOwotICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlR2VuUHJveHkoKQotICB7Ci0gICAgYm9vbGVhbiBlbmFibGVkID0gZ2VuUHJveHlDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgCi0gICAgb3V0cHV0Rm9sZGVyQ29tYm9fLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8uc2V0RW5hYmxlZCggZW5hYmxlZCApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KElQcm9qZWN0IGNsaWVudFByb2plY3QpCi0gIHsgIAkKLSAgICBJUGF0aFtdIHBhdGhzID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKGNsaWVudFByb2plY3QpOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoIDsgaSsrKQotICAgIHsKLSAgICAgIG91dHB1dEZvbGRlckNvbWJvXy5hZGQocGF0aHNbaV0udG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIAotICAgIGlmKCBwYXRocy5sZW5ndGggPiAwICkKLSAgICB7Ci0gICAgCW91dHB1dEZvbGRlckNvbWJvXy5zZWxlY3QoMCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE91dHB1dEZvbGRlcigpCi0gIHsKLSAgCXJldHVybiBvdXRwdXRGb2xkZXJDb21ib18uZ2V0VGV4dCgpOwotICB9Ci0gICAgICAgIAotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KCBCb29sZWFuIGdlblByb3h5ICkKLSAgewotICAgIGdlblByb3h5Q2hlY2tib3hfLnNldFNlbGVjdGlvbiggZ2VuUHJveHkuYm9vbGVhblZhbHVlKCkgKTsKLSAgfSAgICAKLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZW5Qcm94eUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSApOwotICB9ICAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncyggYm9vbGVhbiBzaG93TWFwcGluZ3MgKQotICB7Ci0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfLnNldFNlbGVjdGlvbiggc2hvd01hcHBpbmdzICk7Ci0gIH0gICAgICAgICAgICAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzKCkKLSAgewotICAgIHJldHVybiBzaG93TWFwcGluZ3NDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkgJiYgZ2VuUHJveHlDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCk7Ci0gIH0gICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzQ2xpZW50U2NlbmFyaW8oIGJvb2xlYW4gaXNDbGllbnRTY2VuYXJpbyApCi0gIHsKLSAgICBnZW5Qcm94eUNoZWNrYm94Xy5zZXRFbmFibGVkKCAhaXNDbGllbnRTY2VuYXJpbyApOyAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aXphcmQvY2xpZW50L1dlYlNlcnZpY2VDbGllbnRBeGlzVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2l6YXJkL2NsaWVudC9XZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ4NTFhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aXphcmQvY2xpZW50L1dlYlNlcnZpY2VDbGllbnRBeGlzVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDExNTE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUyMyAgIDE0MzI4NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkRlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ2xpZW50Q29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkRlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5WYWxpZGF0ZVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQXhpc01hcHBpbmdzV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQXhpc1Byb3h5V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLS8qKgotICAqIERldmVsb3BlcnMgd2hvIGFyZSBhZGRpbmcgd2ViIHNlcnZpY2UgY2xpZW50cyBpbnRvIHRoZSB3aXphcmQgc2hvdWxkIGNyZWF0ZQotICAqIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLiAgCi0qKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGUgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZyAKLXsKLQotCQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0gIAkvLyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQgIAkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MiLCBBeGlzUHJveHlXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJveHlQcm9qZWN0Rm9sZGVyIiwgQXhpc1Byb3h5V2lkZ2V0LmNsYXNzLCAiUHJveHlGb2xkZXIiLCBudWxsICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBBeGlzUHJveHlXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNDbGllbnRTY2VuYXJpbyIsIEF4aXNQcm94eVdpZGdldC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgQXhpc1Byb3h5V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgbnVsbCk7Ci0gICAgCi0gICAgLy8gQXhpc1Byb3h5V2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNQcm94eVdpZGdldC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNQcm94eVdpZGdldC5jbGFzcywgIk91dHB1dEZvbGRlciIsIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmNsYXNzICk7Ci0gICAgCi0gICAgLy9BeGlzTWFwcGluZ3NXaWRnZXQKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsgLy9PSwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsgLy9PSwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAvL09LCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7IC8vT0sKLQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpIAotICB7Ci0gICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJBeGlzQ2xpZW50U3RhcnQiLCAKLSAgICAgICAgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX0FYSVNfUFJPWFksCi0gICAgICAgIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX0FYSVNfUFJPWFksCi0gICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBBeGlzUHJveHlXaWRnZXQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJBeGlzQ2xpZW50QmVhbk1hcHBpbmciLCAKLSAgICAgICAgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1hNTDJQUk9YWSwKLSAgICAgICAgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOLAotICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQXhpc01hcHBpbmdzV2lkZ2V0KEF4aXNNYXBwaW5nc1dpZGdldC5NT0RFX1hNTDJQUk9YWSApOwotICAgICAgICAgIH0KLSAgICAgICAgfSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAvL2RlYWQgY29kZSAtIGRvZXNuJ3QgbWF0dGVyIHdoYXQgZ2V0cyByZXR1cm5lZCBoZXJlLgotICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW1wbGVGcmFnbWVudCgpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkgCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzQ2xpZW50Q29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzQ2xpZW50Q29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGI3ZTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dzcnQvQXhpc0NsaWVudENvbmZpZ1dpZGdldEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzUHJveHlXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5XZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEF4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHsKLQotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgcHJveHlDb25maWdXaWRnZXRfOwotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgbWFwcGluZ3NXaWRnZXRfOwotCXByaXZhdGUgQXhpc1Byb3h5V2lkZ2V0ICAgICAgICAgICAgICAgICAgICAgcHJveHlXaWRnZXRfOwotCXByaXZhdGUgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIgYWRhcHRlcl87Ci0JCi0JcHVibGljIEF4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5KCkKLQl7Ci0JICBhZGFwdGVyXyA9IG5ldyBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciggbmV3IFdlYlNlcnZpY2VDbGllbnRBeGlzVHlwZSgpICk7Ci0JICAKLQkgIHByb3h5Q29uZmlnV2lkZ2V0XyA9IGFkYXB0ZXJfLmdldFdpZGdldCggIkF4aXNDbGllbnRTdGFydCIgKTsKLQkgIHByb3h5V2lkZ2V0XyAgICAgICA9IChBeGlzUHJveHlXaWRnZXQpcHJveHlDb25maWdXaWRnZXRfLmdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpLmNyZWF0ZSgpOwotCSAgbWFwcGluZ3NXaWRnZXRfICAgPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJBeGlzQ2xpZW50QmVhbk1hcHBpbmciICk7Ci0JfQotCQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXRGaXJzdE5hbWVkV2lkZ2V0KCkgCi0JewotCSAgcmV0dXJuIHByb3h5Q29uZmlnV2lkZ2V0XzsKLQl9Ci0KLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0TmV4dE5hbWVkV2lkZ2V0KCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXRDb250cmlidXRvcikgCi0JewotCSAgcmV0dXJuIHdpZGdldENvbnRyaWJ1dG9yID09IHByb3h5Q29uZmlnV2lkZ2V0XyAmJiBwcm94eVdpZGdldF8uZ2V0Q3VzdG9taXplQ2xpZW50TWFwcGluZ3MoKSA/IG1hcHBpbmdzV2lkZ2V0XyA6IG51bGw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLQl7Ci0JICBhZGFwdGVyXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5ICk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZUNsaWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZUNsaWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjQ1MDk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VDbGllbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MDkgICAxMjUwOTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1LCBVc2UgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudElucHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkF4aXNDbGllbnRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5DbGllbnRDb2RlR2VuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLlZhbGlkYXRlV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkJ1aWxkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci0KLXB1YmxpYyBjbGFzcyBBeGlzV2ViU2VydmljZUNsaWVudCBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUNsaWVudAotewkJCi0KLQlwdWJsaWMgQXhpc1dlYlNlcnZpY2VDbGllbnQoV2ViU2VydmljZUNsaWVudEluZm8gaW5mbykKLQl7Ci0JCXN1cGVyKGluZm8pOwotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwKLQkJCUlTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotICAgIEVjbGlwc2VFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IChFY2xpcHNlRW52aXJvbm1lbnQpZW52OwotCQlyZWdpc3RlckRhdGFNYXBwaW5ncyggZW52aXJvbm1lbnQuZ2V0Q29tbWFuZE1hbmFnZXIoKS5nZXRNYXBwaW5nUmVnaXN0cnkoKSk7Ci0JCQotCQlWZWN0b3IgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgQXhpc0NsaWVudElucHV0Q29tbWFuZCh0aGlzLCBjdHgsIHByb2plY3QpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQoKSk7Ci0vLwkJY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiQXhpc0NsaWVudFN0YXJ0IikpOwotLy8JCWNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIkF4aXNDbGllbnRCZWFuTWFwcGluZyIpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kKCkpOwotLy8JCWNvbW1hbmRzLmFkZChuZXcgQ29weUF4aXNKYXJDb21tYW5kKCkpOwotCQljb21tYW5kcy5hZGQobmV3IERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kKCkpOwotCQljb21tYW5kcy5hZGQobmV3IFZhbGlkYXRlV1NETENvbW1hbmQoKSk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbigpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZCh0aGlzLGN0eCkpOwotCQljb21tYW5kcy5hZGQobmV3IEJ1aWxkUHJvamVjdENvbW1hbmQoKSk7Ci0JCXJldHVybiBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoY29tbWFuZHMpOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBydW4oSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQkJCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSkgCi0JewotCQkvLyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50SW5wdXRDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLAotCQkJCW5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWUiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRSdW50aW1lSUQiLAotLy8JCQkJbnVsbCk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywKLS8vCQkJCSJDbGllbnRQcm9qZWN0RUFSIiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50SW5wdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSTCIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IC8vIFVSSQotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gdG8KLQkJLy8gVVJMCi0JCS8vIHRyYW5zZm9ybWVyCi0JCS8vIHJlcSdkPz8KLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFByb3h5U2VsZWN0ZWQiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsCi0vLwkJCQkiVGVzdFByb3h5U2VsZWN0ZWQiLCBudWxsKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50SW5wdXRDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVyIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNDbGllbnRTY2VuYXJpbyIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudElucHV0Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCQkvLyBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kKCkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5jbGFzcyk7IC8vT0sKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJMIiwgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5jbGFzcywgIldzZGxTZXJ2aWNlVVJMIiwgbnVsbCk7IC8vT0sKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuY2xhc3MpOyAvL09LICAgIAotCQkKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBDb3B5QXhpc0phckNvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCk7Ci0KLQkJLy8gRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQoKSAvLyBqYXZhUGFyYW1fLCBtb2RlbF8KLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywgIlByb3h5UHJvamVjdCIsCi0JCQkJbnVsbCk7Ci0JCS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkwiLAotCQkvLyBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywiV1NETFNlcnZpY2VQYXRobmFtZSIsbnVsbCk7Ci0JCS8vIC8vCi0JCS8vIFVSTCB0byBVUkw/PwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkwiLCBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywgIldTRExTZXJ2aWNlVVJMIiwgbnVsbCk7IC8vIFVSSQotCQkvLyB0bwotCQkvLyBVUkw/PwotCQkvLyBWYWxpZGF0ZVdTRExDb21tYW5kKCkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgVmFsaWRhdGVXU0RMQ29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFNlcnZpY2VVUkwiLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MpOwotCi0JCS8vIFdTREwySmF2YUNvbW1hbmQoKSAvLyBqYXZhUGFyYW1fCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkwiLCBDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiV3NkbFVSSSIsIG51bGwpOwotCi0JCS8vIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJQcm9qZWN0IiwgbnVsbCk7CQkKLQkJCi0JCS8vIFN0dWIyQmVhbkNvbW1hbmQoKQotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MsICJPdXRwdXRGb2xkZXIiLCBDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzICk7Ci0JCQotCQkvLyBCdWlsZFByb2plY3RDb21tYW5kKCkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBudWxsKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJGb3JjZUJ1aWxkIiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVmFsaWRhdGlvbk1hbmFnZXIiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkJCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIlByb3h5QmVhbiIsIEF4aXNDbGllbnRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgbnVsbCk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIlByb3h5RW5kcG9pbnQiLCBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXRFbmRwb2ludE1ldGhvZCIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcyNmMzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NzLWF4aXMtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzllOTNhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2ZGQ4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBTZXAgMjYgMDY6Mjg6MjcgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYzNjIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNUaHUgTWF5IDMxIDEzOjExOjE2IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRkYmJhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozMCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjA5NjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzA1LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuYmVhbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQuYmVhbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQud3NkbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbTtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb247YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxZmVlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBkZXBsb3kueHNsLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvZGVwbG95LnhzbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvZGVwbG95LnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkZjE2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2RlcGxveS54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgIHZlcnNpb249IjEuMCIKLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiCi0gICAgeG1sbnM6bnMxPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvYXhpcy93c2RkLyIKLSAgICB4bWxuczpqYXZhPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvYXhpcy93c2RkL3Byb3ZpZGVycy9qYXZhIj4KLSAgICA8eHNsOm91dHB1dCBtZXRob2Q9InhtbCIgZW5jb2Rpbmc9IlVURi04Ii8+Ci0gIAotICAgPHhzbDpwYXJhbSBuYW1lPSJuZXdDbGFzc05hbWUiIHNlbGVjdD0ic3MiLz4KLSAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9uczE6ZGVwbG95bWVudC9uczE6c2VydmljZS9uczE6cGFyYW1ldGVyW0BuYW1lPSdjbGFzc05hbWUnXSI+Ci0gICAgPHhzbDpjb3B5PgotICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPmNsYXNzTmFtZTwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAJIDx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj4gCQotICAJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG5ld0NsYXNzTmFtZSIvPiAgCSAJCi0gICAgICAgCSA8L3hzbDphdHRyaWJ1dGU+Ci0gICAgICAgCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KLSAgICAgICAJPC94c2w6Y29weT4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJAKnxub2RlKCkiPgotICAgIAk8eHNsOmNvcHk+Ci0gICAgCQk8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkAqfG5vZGUoKSIvPgotICAgIAk8L3hzbDpjb3B5PgotICAgIDwveHNsOnRlbXBsYXRlPgotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2FhMGJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYnNlcnZpY2UgQXhpcyBDcmVhdGlvbiBVSQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLUxBQkVMX1JVTlRJTUVfQVhJU18xMT1BcGFjaGUgQXhpcwotREVTQ19SVU5USU1FX0FYSVNfMTE9QXBhY2hlIEF4aXMKLQotIwotI1dTV1NETEF4aXNUeXBlCi0jCi1XU19OQU1FX1dTRExBWElTPVNrZWxldG9uIEphdmEgYmVhbiBBeGlzIFdlYiBzZXJ2aWNlCi0KLSMKLSNXU0JlYW5BeGlzVHlwZQotIwotV1NfTkFNRV9CRUFOQVhJUz1KYXZhIGJlYW4gQXhpcyBXZWIgc2VydmljZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmU5YTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgCi0gICA8IS0tIFNlcnZlciBEZWZhdWx0ZXJzIC0tPgotICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uc2VydmVyRGVmYXVsdGVyIj4KLSAgICAgIDxzZXJ2ZXJEZWZhdWx0ZXIKLSAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkF4aXNTZXJ2ZXJEZWZhdWx0ZXIiPgotICAgICAgPC9zZXJ2ZXJEZWZhdWx0ZXI+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLQotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndlYlNlcnZpY2VSdW50aW1lIj4KLSAgCTx3ZWJTZXJ2aWNlUnVudGltZQotICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIgotICAgIGxhYmVsPSIlTEFCRUxfUlVOVElNRV9BWElTXzExIgotICAgIHNlcnZpY2VUeXBlcz0ib3JnLmVjbGlwc2UuanN0LndzLnNlcnZpY2VUeXBlLmphdmEiCi0gICAgY2xpZW50VHlwZXM9Im9yZy5lY2xpcHNlLmpzdC53cy5jbGllbnRUeXBlLmphdmEud2ViT25seSIKLSAgICBzZXJ2bGV0TGV2ZWxzPSIyMyAyNCIKLSAgICBqMmVlTGV2ZWxzPSIxMyAxNCIKLSAgICBzZXJ2ZXJzPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlcm9uaW1vLjEwIgotICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlUnVudGltZSI+Ci0gIAk8L3dlYlNlcnZpY2VSdW50aW1lPgotCTwvZXh0ZW5zaW9uPiAKLSAgIC0tPgotICAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Ij4KLSAgICAgICA8d2lkZ2V0RmFjdG9yeSAgIAotICAgICAgICAgICAgIGlkPSJBeGlzQmVhbkNvbmZpZyIKLSAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suQlVDb25maWdDb21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNCZWFuQ29uZmlnV2lkZ2V0RmFjdG9yeSIvPgotICAgIDwvZXh0ZW5zaW9uPiAKLSAgICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0UmVnaXN0cnkiPgotICAgICAgIDx3aWRnZXRGYWN0b3J5ICAgCi0gICAgICAgICAgICAgaWQ9IkF4aXNTa2VsZXRvbkNvbmZpZyIKLSAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suVERDb25maWdDb21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNTa2VsZXRvbkNvbmZpZ1dpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4gCi0gICAgCi0gICAgPCEtLSBNOSBleHRlbnNpb25zIC0tPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5ydW50aW1lcyI+Ci0gICAgICA8cnVudGltZQotICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICAgICAgbGFiZWw9IiVMQUJFTF9SVU5USU1FX0FYSVNfMTEiCi0gICAgICAgIHNlcnZlclJlcXVpcmVkPSJmYWxzZSIvPgotICAgIDwvZXh0ZW5zaW9uPgotCi0gICAgPCEtLSBkZWZpbmUgc3VwcG9ydCBmb3IgQXhpcyBKYXZhIGJlYW4gYm90dG9tIHVwIGFuZCB0b3AtZG93biBzdXBwb3J0IGluIHdlYiBwcm9qZWN0cyAtLT4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuc2VydmljZVJ1bnRpbWVzIj4KLSAgICAgIDxzZXJ2aWNlUnVudGltZQotICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uamF2YSIKLSAgICAgICAgc2VydmljZUltcGxlbWVudGF0aW9uVHlwZUlkPSJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiCi0gICAgICAgIHJ1bnRpbWVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICAgICAgcnVudGltZUNoZWNrZXI9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQuQXhpc1dlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciIKLSAgICAgICAgYm90dG9tVXA9InRydWUiCi0gICAgICAgIHRvcERvd249InRydWUiCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlUnVudGltZSI+Ci0KLSAgICAgICAgPHJlcXVpcmVkLWZhY2V0LXZlcnNpb24gZmFjZXQ9ImpzdC53ZWIiIHZlcnNpb249IjIuMyIgYWxsb3ctbmV3ZXI9InRydWUiLz4KLQotICAgICAgPC9zZXJ2aWNlUnVudGltZT4KLSAgICA8L2V4dGVuc2lvbj4gICAKLQotICAgIDwhLS0gZGVmaW5lIHN1cHBvcnQgZm9yIEF4aXMgSmF2YSBjbGllbnRzIGluIEphdmEgcHJvamVjdHMgLS0+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFJ1bnRpbWVzIj4KLSAgICAgIDxjbGllbnRSdW50aW1lCi0gICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5qYXZhIgotICAgICAgICBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiCi0gICAgICAgIHJ1bnRpbWVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQuQXhpc1dlYlNlcnZpY2VSdW50aW1lIj4KLQotICAgICAgICA8cmVxdWlyZWQtZmFjZXQtdmVyc2lvbiBmYWNldD0ianN0LnV0aWxpdHkiIHZlcnNpb249IjEuMCIgYWxsb3ctbmV3ZXI9InRydWUiLz4KLQotICAgICAgPC9jbGllbnRSdW50aW1lPgotICAgIDwvZXh0ZW5zaW9uPiAgICAKLSAgICAKLSAgICA8IS0tIGRlZmluZSBzdXBwb3J0IGZvciBBeGlzIEphdmEgY2xpZW50cyBpbiBXZWIgcHJvamVjdHMgLS0+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFJ1bnRpbWVzIj4KLSAgICAgIDxjbGllbnRSdW50aW1lCi0gICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi53ZWIiCi0gICAgICAgIGNsaWVudEltcGxlbWVudGF0aW9uVHlwZUlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSIKLSAgICAgICAgcnVudGltZUlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIgotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZVJ1bnRpbWUiPgotCi0gICAgICAgIDxyZXF1aXJlZC1mYWNldC12ZXJzaW9uIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSIyLjMiIGFsbG93LW5ld2VyPSJ0cnVlIi8+Ci0KLSAgICAgIDwvY2xpZW50UnVudGltZT4KLSAgICA8L2V4dGVuc2lvbj4gICAgICAgIAotICAgIAotICAgIDwhLS0gZXh0ZW5kIFdlYlNlcnZpY2VTYW1wbGVUZXN0IHRvIHN1cHBvcnQgdGhlIEF4aXMgY2xpZW50IHJ1bnRpbWVzIC0tPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS50ZXN0ZXIiPgotICAgICAgPHRlc3RlcgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZVNhbXBsZVRlc3QiCi0gICAgICAgICBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcz0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24ud2ViIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEiPgotICAgICAgPC90ZXN0ZXI+Ci0gICAgPC9leHRlbnNpb24+Ci0gICAgCi0gICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYW50RGF0YU1hcHBpbmciPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLkRlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iT2JqZWN0U2VsZWN0aW9uIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJKYXZhT3V0cHV0IgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1hcHBpbmdzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1ldGhvZHMiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU3R5bGUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iVXNlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4gICAKLSAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkphdmFPdXRwdXQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iTWFwcGluZ3MiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iTWV0aG9kcyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+ICAgCi0JCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJTdHlsZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+ICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJVc2UiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAotICA8L2V4dGVuc2lvbj4gCi0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL0F4aXNDcmVhdGlvblVJLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGIwZjUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL0F4aXNDcmVhdGlvblVJLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwMjE2ICAgMTI2OTg5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwNjAzMjkJIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tICAtIEthdGh5IENoYW4KLSMgMjAwNjAzMjkJIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tICAtIEthdGh5IENoYW4KLSMgMjAwNjA2MDcgICAxNDQ5Nzgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotCi0jCi0jIEVycm9yIG1lc3NhZ2VzIHVzZWQgaW4gdGhpcyBwbHVnaW4KLSMKLU1TR19FUlJPUl9QUk9KRUNUX1VSTD1JV0FCMDUxNEUgVW5hYmxlIHRvIGdldCBVUkwgZm9yIHByb2plY3QgezB9Ci1NU0dfRVJST1JfQ0FOTk9UX05PX0pBVkFfQkVBTj1JV0FCMDAxNUUgQSBKYXZhIGJlYW4gd2FzIG5vdCBzZWxlY3RlZAotTVNHX0VSUk9SX05PX1BST0pFQ1Q9SVdBQjAwMTZFIEEgcHJvamVjdCB3YXMgbm90IHNlbGVjdGVkCi1NU0dfRVJST1JfQ0FOTk9UX0xPQURfSkFWQV9CRUFOPUlXQUIwMDE3RSBUaGUgSmF2YSBiZWFuLCB7MH0sIGNhbm5vdCBiZSBsb2FkZWQgZnJvbSB7MX0KLU1TR19FUlJPUl9KQVZBX01PRl9SRUZMRUNUX0ZBSUxFRD1JV0FCMDUyMUUgRmFpbGVkIHRvIGFuYWx5emUgdGhlIEphdmEgYmVhbjogezB9LgotTVNHX0VSUk9SX1JFQURfQkVBTj1JV0FCMDUyMkUgRXJyb3IgaW4gcmVhZGluZyBtZXRob2RzIGZyb20gSmF2YSBiZWFuLgotTVNHX0VSUk9SX1VQREFURV9BWElTX1dTREQ9SVdBQjA1MjRFIEVycm9yIHVwZGF0aW5nIEF4aXMgZGVwbG95LndzZGQgZmlsZQotCi0jCi0jSmF2YVRvV1NETE1ldGhvZENvbW1hbmQKLSMKLU1TR19FUlJPUl9KQVZBX1RPX01FVEhPRD1JV0FCMDAxOUUgRXJyb3IgaW4gZ2V0dGluZyBtZXRob2QgZnJvbSBKYXZhIGJlYW4uCi0KLSMKLSNVcGRhdGVXRUJYTUxDb21tYW5kCi0jCi1NU0dfRVJST1JfVVBEQVRFX1dFQl9YTUw9SVdBQjAwMjBFIEVycm9yIGluIGFkZGluZyBzZXJ2bGV0IGluIHdlYi54bWwuCi0KLSMKLSNVcGRhdGVBeGlzV1NEREZpbGVUYXNrCi0jCi1NU0dfUExVR0lOX0ZJTEVfVVJMPVByb2JsZW0gbG9jYXRpbmcgcGx1Z2luIGZpbGUKLQotIwotI1dlYlNlcnZpY2VXU0RMQXhpc1NlbGVjdGlvblBhZ2UKLSMKLVBBR0VfTVNHX05PX0ZJTEVfU1BFQ0lGSUVEPU5vIGZpbGUgc3BlY2lmaWVkLgotUEFHRV9NU0dfTk9fTUVUSE9EX1NFTEVDVEVEPU5vIG1ldGhvZHMgc2VsZWN0ZWQuCi0KLSMKLSNXZWJTZXJ2aWNlU2tlbGV0b25BeGlzQ29uZmlnUGFnZQotIwotVE9PTFRJUF9QQlNDX1BBR0U9Ci1UT09MVElQX1BCQ0ZfVEVYVF9VUkk9VGhlIFNPQVAgYm9keSBuYW1lc3BhY2UgYW5kIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBXZWIgc2VydmljZS4KLVRPT0xUSVBfUEJDRl9URVhUX1dTRExfRk9MREVSPVRoZSBmb2xkZXIgb2YgdGhlIFdTREwgZmlsZS4KLVRPT0xUSVBfUEJDRl9URVhUX1dTRExfRklMRT1UaGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlLgotTEFCRUxfVVJJPVdlYiBzZXJ2aWNlIFVSSToKLUxBQkVMX09VVFBVVF9GT0xERVJfTkFNRT1XU0RMIGZvbGRlcjoKLUxBQkVMX09VVFBVVF9GSUxFX05BTUU9V1NETCBmaWxlOgotCi0jCi0jV2ViU2VydmljZUF4aXNCZWFuQ2xhc3NQYWdlCi0jCi1QQUdFX1RJVExFX1dTQkVBTl9DTEFTUz1XZWIgU2VydmljZSBKYXZhIEJlYW4gU2VsZWN0aW9uCi1QQUdFX0RFU0NfV1NCRUFOX0NMQVNTPVNlbGVjdCBhIEphdmEgYmVhbgotTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19CRUFOMlhNTD1EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIHBhY2thZ2UgdG8gbmFtZXNwYWNlLgotVE9PTFRJUF9QMk5fU0hPV19NQVBQSU5HUz1EZWZpbmUgcGFja2FnZSB0byBuYW1lc3BhY2UgbWFwcGluZyBmb3IgY3VzdG9taXphdGlvbi4KLQotIwotI1dlYlNlcnZpY2VBeGlzQmVhbkNvbmZpZ1BhZ2UKLSMKLVRPT0xUSVBfUEJDRl9QQUdFPQotVE9PTFRJUF9QQk1FX1RSRUVfTUVUSE9EUz1KYXZhIGJlYW4gbWV0aG9kcyB0byBpbmNsdWRlLgotUEFHRV9USVRMRV9XU0JFQU5fQ09ORklHPVdlYiBTZXJ2aWNlIEphdmEgQmVhbiBJZGVudGl0eQotUEFHRV9ERVNDX1dTQkVBTl9DT05GSUc9Q29uZmlndXJlIHRoZSBKYXZhIGJlYW4gYXMgYSBXZWIgc2VydmljZS4KLUxBQkVMX1NUWUxFX1VTRT1TdHlsZSBhbmQgdXNlCi1TVFlMRV9SUENfTElURVJBTD1kb2N1bWVudC9saXRlcmFsCi1TVFlMRV9ET0NfTElURVJBTD1kb2N1bWVudC9saXRlcmFsICh3cmFwcGVkKQotU1RZTEVfUlBDX0VOQ09ERUQ9UlBDL2VuY29kZWQKLQotIwotIyBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZAotIwotTVNHX0VSUk9SX0NPTVBJTEVSX0xFVkVMX05PVF9DT01QQVRJQkxFPVRoZSB3b3JrYmVuY2ggaXMgcnVubmluZyBvbiBKYXZhIFZNIHZlcnNpb24gezB9LCBob3dldmVyLCB0aGUgY29tcGlsZXIgY29tcGxpYW5jZSBsZXZlbCBvZiBcCi10aGUgcHJvamVjdCAiezF9IiBpcyBzZXQgdG8gSmF2YSB2ZXJzaW9uIHsyfS4gIFwKLUdlbmVyYXRpb24gb2YgYSBXZWIgc2VydmljZSBmcm9tIEphdmEgY2Fubm90IHByb2NlZWQgYmVjYXVzZSB0aGUgdG9vbHMgd2lsbCBiZSB1bmFibGUgdG8gcHJvY2VzcyB0aGUgY2xhc3MgZmlsZSBjb21waWxlZCB3aXRoaW4gdGhlIHByb2plY3QuICBcCi1UbyBjb3JyZWN0IHRoZSBwcm9ibGVtLCB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnM6IFwKLVxuMS4gT3BlbiBwcm9qZWN0IHByb3BlcnRpZXMsIHNlbGVjdCBQcm9qZWN0IEZhY2V0cywgYW5kIHVzZSBBZGQvUmVtb3ZlIFByb2plY3QgRmFjZXQgdG8gY2hhbmdlIEphdmEgdmVyc2lvbiB0byB7MH0gb3IgbG93ZXIuXAotXG4yLiBSZXN0YXJ0IHRoZSB3b3JrYmVuY2ggb24gYSB2ZXJzaW9uIHsyfSBKYXZhIFZNLgotCi0jCi0jIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kCi0jCi1NU0dfRVJST1JfTU9ESUZZX0VORFBPSU5UPUVycm9yIGluIG1vZGlmeWluZyB0aGUgc29hcDphZGRyZXNzIGxvY2F0aW9uIFVSSSBmb3IgV1NETCBmaWxlIHswfS4KLQotIwotIyBNZXNzYWdlcyBmb3IgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZAotIwotV1NJX0lOQ09NUExJQU5DRV9SUENfRU5DT0RFRD1SUEMgRW5jb2RlZCBpcyBzZWxlY3RlZAotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMzdlYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5CSAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAgLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDMyOQkgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MDcgIDE0NDk3OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUFJPSkVDVF9VUkw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9OT19KQVZBX0JFQU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX05PX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9MT0FEX0pBVkFfQkVBTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSkFWQV9NT0ZfUkVGTEVDVF9GQUlMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1JFQURfQkVBTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVVBEQVRFX0FYSVNfV1NERDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSkFWQV9UT19NRVRIT0Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VQREFURV9XRUJfWE1MOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19QTFVHSU5fRklMRV9VUkw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfTk9fRklMRV9TUEVDSUZJRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfTk9fTUVUSE9EX1NFTEVDVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJTQ19QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDRl9URVhUX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0ZfVEVYVF9XU0RMX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0ZfVEVYVF9XU0RMX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVVJJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX09VVFBVVF9GT0xERVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9PVVRQVVRfRklMRV9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NCRUFOX0NMQVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU0JFQU5fQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19CRUFOMlhNTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1AyTl9TSE9XX01BUFBJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDRl9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJNRV9UUkVFX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU0JFQU5fQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU0JFQU5fQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NUWUxFX1VTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTVFlMRV9SUENfTElURVJBTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTVFlMRV9ET0NfTElURVJBTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTVFlMRV9SUENfRU5DT0RFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ09NUElMRVJfTEVWRUxfTk9UX0NPTVBBVElCTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX01PRElGWV9FTkRQT0lOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfSU5DT01QTElBTkNFX1JQQ19FTkNPREVEOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODM2M2VkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgc2VydmljZSBiZWFuIGlzIG5vdCBhdCBhIGNvbXBpbGVyIGNvbXBsaWFuY2Ugc2V0dGluZwotICogdGhhdCdzIGhpZ2hlciB0aGFuIHRoZSBKYXZhIFZNIHRoZSB3b3JrYmVuY2ggaXMgbGF1bmNoZWQgd2l0aC4gCi0gKi8KLXB1YmxpYyBjbGFzcyBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3RfOwotCi0JLyoqCi0JICogRGVmYXVsdCBDVE9SCi0JICovCi0JcHVibGljIEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kKCkgewotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMub3BlcmF0aW9ucy5JVW5kb2FibGVPcGVyYXRpb24jZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvciwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUpCi0JICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSB7Ci0JCQotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCVN0cmluZyBqYXZhU3BlY1ZlcnNpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuc3BlY2lmaWNhdGlvbi52ZXJzaW9uIik7Ci0JCWlmIChqYXZhU3BlY1ZlcnNpb24gIT0gbnVsbCkKLQkJewotCQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0Xyk7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7ICAgIAotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIHByb2plY3RDb21waWxlckxldmVsID0gamF2YVByb2plY3QuZ2V0T3B0aW9uKCJvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlIiwgZmFsc2UpOwotCQkJCWlmIChwcm9qZWN0Q29tcGlsZXJMZXZlbCA9PSBudWxsKQotCQkJCXsKLQkJCQkJcHJvamVjdENvbXBpbGVyTGV2ZWwgPSAoU3RyaW5nKUphdmFDb3JlLmdldERlZmF1bHRPcHRpb25zKCkuZ2V0KCJvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlIik7Ci0JCQkJfQotCQkJCWlmIChwcm9qZWN0Q29tcGlsZXJMZXZlbCAhPSBudWxsKQotCQkJCXsKLQkJCQkJaWYgKCFjb21waWxlckxldmVsc0NvbXBhdGlibGUoamF2YVNwZWNWZXJzaW9uLCBwcm9qZWN0Q29tcGlsZXJMZXZlbCkpIHsKLQkJCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DT01QSUxFUl9MRVZFTF9OT1RfQ09NUEFUSUJMRSwgbmV3IFN0cmluZ1tdIHtqYXZhU3BlY1ZlcnNpb24sIHNlcnZlclByb2plY3RfLCBwcm9qZWN0Q29tcGlsZXJMZXZlbH0pKTsKLQkJCQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJCX0JCQkKLQkJCQl9IAkKLQkJCX0KLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgSmF2YSBzcGVjaWZpY2F0aW9uIGxldmVsCi0JICogb2YgdGhlIEVjbGlwc2UgSlJFICg8Y29kZT5qYXZhU3BlY1ZlcnNpb248L2NvZGU+IGlzIG5vdAotCSAqIGxvd2VyIHRoYW4gdGhlIEphdmEgc3BlY2lmaWNhdGlvbiBsZXZlbCBvZiB0aGUgY29tcGlsZXIKLQkgKiAoPGNvZGU+cHJvamVjdENvbXBpbGVyTGV2ZWw8L2NvZGU+LiAKLQkgKiBAcGFyYW0gamF2YVNwZWNWZXJzaW9uIFRoZSBKYXZhIFNwZWNpZmljYXRpb24gVmVyc2lvbiBvZiB0aGUgSlJFLgotCSAqIEBwYXJhbSBwcm9qZWN0Q29tcGlsZXJMZXZlbCBUaGUgSmF2YSBwcm9qZWN0J3MgY29tcGlsZXIgbGV2ZWwuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBKYXZhIHNwZWNpZmljYXRpb24gbGV2ZWwgb2YgdGhlIHByb2plY3QncwotCSAqIGNvbXBpbGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgSmF2YSBzcGVjaWZpY2F0aW9uIGxldmVsIG9mIHRoZQotCSAqIEpSRSB0aGF0IEVjbGlwc2UgaXMgcnVubmluZyBvbiwgYW5kIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gY29tcGlsZXJMZXZlbHNDb21wYXRpYmxlKFN0cmluZyBqYXZhU3BlY1ZlcnNpb24sIFN0cmluZyBwcm9qZWN0Q29tcGlsZXJMZXZlbCkgewotCQlyZXR1cm4gKGphdmFTcGVjVmVyc2lvbi5jb21wYXJlVG8ocHJvamVjdENvbXBpbGVyTGV2ZWwpID49IDApOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHByb2plY3Qgd2hvc2UgY29tcGlsZXIgbGV2ZWwgc2hvdWxkIGJlIGNoZWNrZWQuCi0JICogQHBhcmFtIHNlcnZlclByb2plY3QgVGhlIHByb2plY3Qgd2hvc2UgY29tcGlsZXIgbGV2ZWwgc2hvdWxkIGJlIGNoZWNrZWQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmVyUHJvamVjdCkgewotCQlzZXJ2ZXJQcm9qZWN0XyA9IHNlcnZlclByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzT3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzT3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTZkYTNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc091dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQuQXhpc1dlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIEF4aXNPdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBBeGlzV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLQotCXByaXZhdGUgU3RyaW5nICAgICAgICAgICAgd3NkbFVSSV87Ci0JICAJICAKLQkJLyoqCi0JCSogRGVmYXVsdCBDVE9SCi0JCSovCi0JCXB1YmxpYyBBeGlzT3V0cHV0Q29tbWFuZCgpIHsKLQkJfQotCQkKLQkJcHVibGljIEF4aXNPdXRwdXRDb21tYW5kKEF4aXNXZWJTZXJ2aWNlIHdzKSB7Ci0JCQl3c18gPSB3czsKLQkJfQotCQkKLQkJcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCQl7Ci0JCSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsgIAkKLQkJICAJd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuc2V0V3NkbFVSTCh3c2RsVVJJXyk7Ci0JCQlBeGlzV2ViU2VydmljZUluZm8gYXhpc1dTSW5mbyA9IG5ldyBBeGlzV2ViU2VydmljZUluZm8oKTsKLQkJCWF4aXNXU0luZm8uc2V0SmF2YVdTRExQYXJhbWV0ZXIoamF2YVdTRExQYXJhbV8pOwotCQkJd3NfLnNldEF4aXNXZWJTZXJ2aWNlSW5mbyhheGlzV1NJbmZvKTsJCSAgICAKLQkJICAJCi0JCSAgCXJldHVybiBzdGF0dXM7ICAgICAgCQotCQkgIH0KLQotCQkgIC8qKgotCQkgICAqIEBwYXJhbSB3c2RsVVJJCi0JCSAgICogICAgICAgICAgICBUaGUgd3NkbFVSSSB0byBzZXQuCi0JCSAgICovCi0JCSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLQkJICB7Ci0JCSAgICB3c2RsVVJJXyA9IHdzZGxVUkk7Ci0JCSAgfQotCi0JCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0gKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fKSB7Ci0JCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbV87Ci0JCX0KLQkJICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1J1bklucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzUnVuSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Njc0ODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzUnVuSW5wdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBBeGlzUnVuSW5wdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb257Ci0JCi0JcHJpdmF0ZSBBeGlzV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJQcm9qZWN0XzsgCi0JcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJZF87IAotCXByaXZhdGUgU3RyaW5nIHNlcnZlckZhY3RvcnlJZF87Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0JCi0JcHVibGljIEF4aXNSdW5JbnB1dENvbW1hbmQoKSB7Ci0JfQotCQotCXB1YmxpYyBBeGlzUnVuSW5wdXRDb21tYW5kKEF4aXNXZWJTZXJ2aWNlIHdzLCBTdHJpbmcgcHJvamVjdCkgewotCQl3c18gPSB3czsKLQkJc2VydmVyUHJvamVjdF8gPSBwcm9qZWN0OyAKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkgCWphdmFXU0RMUGFyYW1fID0gd3NfLmdldEF4aXNXZWJTZXJ2aWNlSW5mbygpLmdldEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JIAlzZXJ2ZXJJbnN0YW5jZUlkXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkgCXNlcnZlckZhY3RvcnlJZF8gPSB3c18uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkgCXdzZGxVUklfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0V3NkbFVSTCgpOwotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0JCi0JIC8qKgotCSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJQcm9qZWN0LgotCSAgICovCi0JICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclByb2plY3QoKQotCSAgewotCQkgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkgIH0KLQkgIAotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbV87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUlkKCkgewotCQlyZXR1cm4gc2VydmVySW5zdGFuY2VJZF87Ci0JfQkKLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckZhY3RvcnlJZCgpIHsKLQkJcmV0dXJuIHNlcnZlckZhY3RvcnlJZF87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQlyZXR1cm4gd3NkbFVSSV87Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1NlcnZlckRlZmF1bHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzU2VydmVyRGVmYXVsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNzhiNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzU2VydmVyRGVmYXVsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSVNlcnZlckRlZmF1bHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlNlcnZlckluZm87Ci0KLQotCi1wdWJsaWMgY2xhc3MgQXhpc1NlcnZlckRlZmF1bHRlciBpbXBsZW1lbnRzIElTZXJ2ZXJEZWZhdWx0ZXIKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSVNlcnZlckRlZmF1bHRlciNyZWNvbW1lbmREZWZhdWx0U2VydmVyKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KQotICAgKi8KLSAgcHVibGljIFNlcnZlckluZm8gcmVjb21tZW5kRGVmYXVsdFNlcnZlcihJUHJvamVjdCBwcm9qZWN0KQotICB7ICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0JVQXhpc0lucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUF4aXNJbnB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5M2UyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0JVQXhpc0lucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW4uV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkpBWFJQQ1dlYlNlcnZpY2VBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi0KLXB1YmxpYyBjbGFzcyBCVUF4aXNJbnB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBJV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUHJvamVjdF87IAotCXByaXZhdGUgU3RyaW5nIGphdmFCZWFuTmFtZV87Ci0KLQkgIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotCSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBudWxsOwotCSAgCi0JCS8qKgotCQkqIERlZmF1bHQgQ1RPUgotCQkqLwotCQlwdWJsaWMgQlVBeGlzSW5wdXRDb21tYW5kKCkgewotCQl9Ci0JCQotCQlwdWJsaWMgQlVBeGlzSW5wdXRDb21tYW5kKElXZWJTZXJ2aWNlIHdzLCBTdHJpbmcgcHJvamVjdCkgewotCQkJd3NfID0gd3M7Ci0JCQlzZXJ2ZXJQcm9qZWN0XyA9IHByb2plY3Q7IAotCQl9Ci0JCQotCQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JCXsKLQkgICAgICAgCi0JCVN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCWphdmFCZWFuTmFtZV8gPSB3c18uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRJbXBsVVJMKCk7Ci0JCQotCQkvLyBUaGUgZm9sbG93aW5nICJpZiIgYmxvY2sgZHJpdmVzIHZhbGlkYXRpb24gb2YgdGhlIGdpdmVuCi0JCS8vIEphdmEgc2VydmljZSBjbGFzcyAoamF2YUJlYW5OYW1lXykgYWdhaW5zdCBKQVgtUlBDIGlmIHRoZQotCQkvLyBKQVgtUlBDIHZhbGlkYXRpb24gcHJlZmVyZW5jZSBpcyBzd2l0Y2hlZCBvbi4KLQkJLy8gRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBKQVgtUlBDIGFuYWx5emVyIHJldHVybnMgd2FybmluZ3MKLQkJLy8gZm9yIHZpb2xhdGlvbnMgb2YgdGhlIEpBWC1SUEMgc3BlYywgYW5kIGVycm9ycyBvbmx5IGlmCi0JCS8vIGFjdHVhbCBKRFQgbW9kZWwgbmF2aWdhdGlvbiBmYWlscyBkdWUgdG8gYmFkIGNsYXNzcGF0aHMuCi0JCS8vIFRoaXMgYWxsb3dzIHVzZXJzIHRoZSBjaG9pY2Ugb2YgaGVlZGluZyBvciBpZ25vcmluZyB0aGUKLQkJLy8gbWVzc2FnZXMgcmV0dXJuZWQgYnkgdGhlIGFuYWx5emVyLgotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QXhpc0VtaXR0ZXJDb250ZXh0KCk7Ci0JCWlmIChqYXZhQmVhbk5hbWVfICE9IG51bGwgJiYgY29udGV4dC5pc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKSkKLQkJewotCQkJSkFYUlBDV2ViU2VydmljZUFuYWx5emVyIGFuYWx5emVyID0gbmV3IEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplcigpOwotCQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0Xyk7IAotCQkJaWYgKHByb2plY3QgIT0gbnVsbCkKLQkJCXsKLQkJCQlJU3RhdHVzIHN0YXR1cyA9IGFuYWx5emVyLmFuYWx5emUocHJvamVjdCxqYXZhQmVhbk5hbWVfLG1vbml0b3IpOwotCQkJCWlmICghc3RhdHVzLmlzT0soKSkKLQkJCQl7Ci0JCQkJCXRyeQotCQkJCQl7Ci0JCQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBlKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIiIsbnVsbCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChzZXJ2ZXJJbnN0YW5jZUlkICE9IG51bGwpIHsgLy8gc2VydmVyIGV4aXN0cwotCSAgICAJc2VydmljZUV4aXN0aW5nU2VydmVyXyA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2ZXJJbnN0YW5jZUlkKTsKLQkJCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpCi0JCSAgICB7Ci0JCSAgICAgIHNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmljZUV4aXN0aW5nU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkJICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgCXNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmVyRmFjdG9yeUlkOwotCSAgICB9Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQkgIAotCQkvKioKLQkJICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclByb2plY3QuCi0JCSAgICovCi0JCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJQcm9qZWN0KCkKLQkJICB7Ci0JCQkgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkJICB9Ci0KLQkJICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoKQotCQkgIHsKLQkJICAgIHJldHVybiBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLQkJICB9Ci0KLQkJcHVibGljIFN0cmluZyBnZXRKYXZhQmVhbk5hbWUoKSB7Ci0JCQlyZXR1cm4gamF2YUJlYW5OYW1lXzsKLQkJfQotCQkKLQkJcHVibGljIElTZXJ2ZXIgZ2V0U2VydmljZUV4aXN0aW5nU2VydmVyKCkKLQkJICB7Ci0JCSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLQkJICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0JVQ29kZUdlbk9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUNvZGVHZW5PcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlMjI1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0JVQ29kZUdlbk9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgIAotICogMjAwNjA1MDkgICAxMjUwOTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1LCBVc2UgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE3ICAgMTQyMzI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLkphdmEyV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLldTREwySmF2YUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5Db3B5QXhpc0phckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5SZWZyZXNoUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5VcGRhdGVBeGlzV1NEREZpbGVUYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBCVUNvZGVHZW5PcGVyYXRpb24gZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQkvLyBDb3B5QXhpc0phckNvbW1hbmQKLQlwcml2YXRlIENvcHlBeGlzSmFyQ29tbWFuZCBjb3B5QXhpc0phckNvbW1hbmQgPSBudWxsOwotCQotCS8vIEphdmEyV1NETENvbW1hbmQKLQlwcml2YXRlIEphdmEyV1NETENvbW1hbmQgamF2YTJXU0RMQ29tbWFuZCA9IG51bGw7Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOyAgCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsgCi0JCi0JLy8gd3NkbDJKYXZhQ29tbWFuZAotCXByaXZhdGUgV1NETDJKYXZhQ29tbWFuZCB3c2RsMkphdmFDb21tYW5kID0gbnVsbDsKLQkJCi0JLy8gVXBkYXRlQXhpc1dTRERGaWxlVGFzawotCXByaXZhdGUgVXBkYXRlQXhpc1dTRERGaWxlVGFzayB1cGRhdGVBeGlzV3NkZENvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3Q7Ci0JCi0JLy8gVXBkYXRlV0VCWE1MQ29tbWFuZAotCXByaXZhdGUgVXBkYXRlV0VCWE1MQ29tbWFuZCB1cGRhdGVXZWJYTUxDb21tYW5kID0gbnVsbDsKLQkKLQkvLyBSZWZyZXNoUHJvamVjdENvbW1hbmQKLQlwcml2YXRlIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCByZWZyZXNoUHJvamVjdENvbW1hbmQgPSBudWxsOwotCi0JLyoqCi0JICogVGhpcyBjb21tYW5kIHJ1bnMgdGhlIGNvbW1hbmRzIGluIHRoZSBjb25zdHJ1Y3RvciBpbiBhIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbi4KLQkgKiBUaGUgY29tbWFuZHMgYXJlIGxpc3RlZCBhYm92ZSwgYWxvbmcgd2l0aCB0aGVpciByZWxldmFudCBkYXRhIHJlZ2lzdHJ5IHBhcmFtZXRlcnMgCi0JICogQHBhcmFtIGphdmEyV1NETAotCSAqIEBwYXJhbSB3c2RsMkphdmEKLQkgKiBAcGFyYW0gdXBkYXRlQXhpc1dzZGQKLQkgKiBAcGFyYW0gdXBkYXRlV2ViWE1MCi0JICovCi0JcHVibGljIEJVQ29kZUdlbk9wZXJhdGlvbigpewotCQljb3B5QXhpc0phckNvbW1hbmQgPSBuZXcgQ29weUF4aXNKYXJDb21tYW5kKCk7Ci0JCWphdmEyV1NETENvbW1hbmQgPSBuZXcgSmF2YTJXU0RMQ29tbWFuZCgpOwotCQl3c2RsMkphdmFDb21tYW5kID0gbmV3IFdTREwySmF2YUNvbW1hbmQoKTsKLQkJdXBkYXRlQXhpc1dzZGRDb21tYW5kID0gbmV3IFVwZGF0ZUF4aXNXU0RERmlsZVRhc2soKTsKLQkJdXBkYXRlV2ViWE1MQ29tbWFuZCA9IG5ldyBVcGRhdGVXRUJYTUxDb21tYW5kKCk7Ci0JCXJlZnJlc2hQcm9qZWN0Q29tbWFuZCA9IG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB7Ci0KLQkJSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0JCUJvdHRvbVVwV1NNb2RpZnlPcGVyYXRpb24gYnVPcGVyYXRpb24gPSBuZXcgQm90dG9tVXBXU01vZGlmeU9wZXJhdGlvbihpbmZvLCBlbnYpOwotCQl0cnkgewotCQkJYnVPcGVyYXRpb24uZXhlY3V0ZShtb25pdG9yKTsKLQkJfQotCQljYXRjaChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCUlTdGF0dXMgc3RhdHVzID0gY2UuZ2V0U3RhdHVzKCk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JfQotCi0JcHJpdmF0ZSBjbGFzcyBCb3R0b21VcFdTTW9kaWZ5T3BlcmF0aW9uIGV4dGVuZHMgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIHsKLQkJCi0JCSAgcHJpdmF0ZSBJQWRhcHRhYmxlIGluZm8gPSBudWxsOwotCQkgIHByaXZhdGUgSUVudmlyb25tZW50IGVudiA9IG51bGw7Ci0KLQkJICAKLQkJICBwcm90ZWN0ZWQgQm90dG9tVXBXU01vZGlmeU9wZXJhdGlvbihJQWRhcHRhYmxlIGFkYXB0YWJsZSwgSUVudmlyb25tZW50IGVudmlyb25tZW50KXsKLQkJCSAgaW5mbyA9IGFkYXB0YWJsZTsKLQkJCSAgZW52ID0gZW52aXJvbm1lbnQ7Ci0JCSAgfQotCQkgIAotCQkgIHByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbnsKLQkJICAKLQkJCSAgICBJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCQkgIAotCQkJICAgIC8vIENvcHlBeGlzSmFyQ29tbWFuZAotCQkJICAgIGNvcHlBeGlzSmFyQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJICAgIGNvcHlBeGlzSmFyQ29tbWFuZC5zZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KTsKLQkJCSAgICBzdGF0dXMgPSBjb3B5QXhpc0phckNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLQkJCSAgICAJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCSAgICB9Ci0JCQkgICAgCi0JCQkgIAkvLyBKYXZhMldTRExDb21tYW5kCi0JCQkJamF2YTJXU0RMQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCWphdmEyV1NETENvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCQlzdGF0dXMgPSBqYXZhMldTRExDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQl3c2RsVVJJID0gamF2YTJXU0RMQ29tbWFuZC5nZXRXc2RsVVJJKCk7Ci0JCQkJCi0JCQkJLy8gV1NETDJKYXZhQ29tbWFuZAotCQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQl3c2RsMkphdmFDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQkJc3RhdHVzID0gd3NkbDJKYXZhQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJamF2YVdTRExQYXJhbSA9IHdzZGwySmF2YUNvbW1hbmQuZ2V0SmF2YVdTRExQYXJhbSgpOwotCQkJCQotCQkJCS8vIFVwZGF0ZUF4aXNXc2RkQ29tbWFuZAotCQkJCXVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5zZXRTZXJ2aWNlUHJvamVjdChzZXJ2aWNlUHJvamVjdCk7Ci0JCQkJc3RhdHVzID0gdXBkYXRlQXhpc1dzZGRDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQlqYXZhV1NETFBhcmFtID0gdXBkYXRlQXhpc1dzZGRDb21tYW5kLmdldEphdmFXU0RMUGFyYW0oKTsKLQkJCQkKLQkJCQkvLyBVcGRhdGVXZWJYTUxDb21tYW5kCi0JCQkJdXBkYXRlV2ViWE1MQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXVwZGF0ZVdlYlhNTENvbW1hbmQuc2V0U2VydmVyUHJvamVjdChzZXJ2aWNlUHJvamVjdCk7Ci0JCQkJc3RhdHVzID0gdXBkYXRlV2ViWE1MQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJCi0JCQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldFByb2plY3Qoc2VydmljZVByb2plY3QpOwotCQkJCXN0YXR1cyA9IHJlZnJlc2hQcm9qZWN0Q29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0KLQkJCSAgCi0JCSAgfQotCQkKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKSB7Ci0JCXJldHVybiB3c2RsVVJJOwotCX0KLQkKLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpIHsKLQkJdGhpcy5zZXJ2aWNlUHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0OwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Db3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NDdlMTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Db3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTMwNzU1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MTIyMSAgIDE2ODc4NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA4MTUgICAxODg5OTkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbEZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbEZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLklNb2R1bGVQdWJsaXNoSGVscGVyOwotCi0vKioKLSAqIAotICogVGhpcyBjb21tYW5kIGNvcGllcyB0aGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgdG8gaXQncyBwcm9wZXIgbG9jYXRpb24gaW4gdGhlIG1vZHVsZS4KLSAqIAotICovCi0KLXB1YmxpYyBjbGFzcyBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXRUJfSU5GID0gIldFQi1JTkYiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9DT05GSUcgPSAic2VydmVyLWNvbmZpZy53c2RkIjsKLSAgICBwcml2YXRlIFN0cmluZyBwcm9qZWN0TmFtZV87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgRUFSUHJvamVjdE5hbWVfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLgotICogQHBhcmFtIFN0cmluZyBkZXNjcmlwdGlvbgotICogQHBhcmFtIFN0cmluZyBuYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQoIFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIGVhclByb2plY3ROYW1lICkKLSAgeyAKLSAgICBwcm9qZWN0TmFtZV8gICA9IHByb2plY3ROYW1lOwotICAgIEVBUlByb2plY3ROYW1lXyAgID0gZWFyUHJvamVjdE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JICAKLQkgIEZpbGVJbnB1dFN0cmVhbSBmaW5TdHJlYW0gPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gSjJFRVV0aWxzLmdldFZpcnR1YWxDb21wb25lbnQoIHByb2plY3ROYW1lXyApOwotCQkgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKCBzZXJ2ZXJJbnN0YW5jZUlkXyApOwotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWVfKTsKLQkJICBJTW9kdWxlIHByb2plY3RNb2R1bGUgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZShwcm9qZWN0KTsKLQkJICAKLQkJICBpZiAoc2VydmVyICE9IG51bGwgJiYgY29tcG9uZW50ICE9IG51bGwgJiYgcHJvamVjdE1vZHVsZSAhPSBudWxsKSB7Ci0JCQkgIElNb2R1bGVQdWJsaXNoSGVscGVyIHB1Ymxpc2hIZWxwZXIgPSAoSU1vZHVsZVB1Ymxpc2hIZWxwZXIpIAotCQkJICAJc2VydmVyLmxvYWRBZGFwdGVyKElNb2R1bGVQdWJsaXNoSGVscGVyLmNsYXNzLCBtb25pdG9yKTsKLQkJCSAgaWYgKHB1Ymxpc2hIZWxwZXIgIT0gbnVsbCkgewotCQkJCSAgSU1vZHVsZVtdIHNlcnZlck1vZHVsZXM7Ci0JCQkJICBpZiAoRUFSUHJvamVjdE5hbWVfID09IG51bGwpIHsKLQkJCQkJICBzZXJ2ZXJNb2R1bGVzID0gbmV3IElNb2R1bGUgW10ge3Byb2plY3RNb2R1bGV9OwotCQkJCSAgfSBlbHNlIHsKLQkJCQkJICBJUHJvamVjdCBFQVJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KEVBUlByb2plY3ROYW1lXyk7Ci0JCQkJCSAgSU1vZHVsZSBFQVJQcm9qZWN0TW9kdWxlID0gU2VydmVyVXRpbC5nZXRNb2R1bGUoRUFSUHJvamVjdCk7Ci0JCQkJCSAgc2VydmVyTW9kdWxlcyA9IG5ldyBJTW9kdWxlIFtdIHtFQVJQcm9qZWN0TW9kdWxlLCBwcm9qZWN0TW9kdWxlfTsKLQkJCQkgIH0KLQkJCQkgIElQYXRoIHB1Ymxpc2hEaXJQYXRoID0gcHVibGlzaEhlbHBlci5nZXRQdWJsaXNoRGlyZWN0b3J5KHNlcnZlck1vZHVsZXMpOwotCQkJCSAgCi0JCQkJICBpZiAocHVibGlzaERpclBhdGggIT0gbnVsbCkgewotCQkJCQkgIElWaXJ0dWFsRm9sZGVyIHJvb3RGb2xkZXIgPSBjb21wb25lbnQuZ2V0Um9vdEZvbGRlcigpOwotCQkJCQkgIElQYXRoIHJvb3RGb2xkZXJQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShyb290Rm9sZGVyLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpKS5nZXRMb2NhdGlvbigpOwotCQkJCQkgIGlmIChyb290Rm9sZGVyUGF0aCAhPSBudWxsKSB7Ci0JCQkJCQkgIEZpbGUgcm9vdEZvbGRlckZpbGUgPSByb290Rm9sZGVyUGF0aC50b0ZpbGUoKTsKLQkJCQkJCSAgRmlsZSBwdWJsaXNoRGlyRmlsZSA9IHB1Ymxpc2hEaXJQYXRoLnRvRmlsZSgpOwotCQkJCQkJICBpZiAoIXJvb3RGb2xkZXJGaWxlLmVxdWFscyhwdWJsaXNoRGlyRmlsZSkpIHsKLQkJCQkJCQkgIC8vIGNvcHkgdGhlIHNlcnZlci1jb25maWcud3NkZCBpZiB0aGUgcHVibGlzaCBkaXJlY3RvcnkgaXMgbm90IGluIHRoZSBzYW1lIGFzIHRoZSBwcm9qZWN0IHJvb3QgZm9sZGVyCi0JCQkJCQkJICBJUGF0aCBwYXRoID0gbmV3IFBhdGgoIFdFQl9JTkYgKS5hcHBlbmQoIFNFUlZFUl9DT05GSUcgKTsKLQkJCQkJCQkgIElQYXRoIHNlcnZlckNvbmZpZ1BhdGggPSBwdWJsaXNoRGlyUGF0aC5hcHBlbmQocGF0aCk7Ci0JCQkJCQkJICBpZiAoc2VydmVyQ29uZmlnUGF0aCAhPSBudWxsKSB7CQkJICAKLQkJCQkJCQkJICBJVmlydHVhbEZpbGUgbmV3TG9jYXRpb24gPSByb290Rm9sZGVyLmdldEZpbGUocGF0aCk7Ci0JCQkJCQkJCSAgSVBhdGggdGFyZ2V0UGF0aCA9IG5ld0xvY2F0aW9uLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkJCQkJCQkgIGlmICh0YXJnZXRQYXRoICE9IG51bGwpIHsKLQkJCQkJCQkJCSAgZmluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzZXJ2ZXJDb25maWdQYXRoLnRvU3RyaW5nKCkpOwotCQkJCQkJCQkJICBpZiAoZmluU3RyZWFtICE9IG51bGwpIAotCQkJCQkJCQkJICB7Ci0JCQkJCQkJCQkJICBJU3RhdHVzSGFuZGxlciAgc3RhdHVzSGFuZGxlciA9IGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKTsKLQkJCQkJCQkJCSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCAgICAgICA9ICgoQmFzZUVjbGlwc2VFbnZpcm9ubWVudCllbnZpcm9ubWVudCkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0JCQkJCQkJCQkgICAgCi0JCQkJCQkJCQkJICBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsICAKLQkJCQkJCQkJCQkJCSAgdGFyZ2V0UGF0aCwKLQkJCQkJCQkJCQkJCSAgZmluU3RyZWFtLAotCQkJCQkJCQkJCQkJICBtb25pdG9yLAotCQkJCQkJCQkJCQkJICBzdGF0dXNIYW5kbGVyKTsKLQkJCQkJCQkJCQkgIGZpblN0cmVhbS5jbG9zZSgpOwotCQkJCQkJCQkJICB9Ci0JCQkJCQkJCSAgfQotCQkJCQkJCSAgfQotCQkJCQkJICB9Ci0JCQkJCSAgfQotCQkJCSAgfSAgCi0JCQkgIH0gCSAgCQkgIAotCQkgIH0JICAKLQkgIH0KLQkgIGNhdGNoKCBUaHJvd2FibGUgZSApCi0JICB7Ci0JCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9NT1ZFX1JFU09VUkNFLCBuZXcgU3RyaW5nW117ZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCl9KSwgZSk7Ci0JCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICB9IGZpbmFsbHkgewotCQkgIGlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJICB0cnkgewotCQkJCSAgZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQkgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCSAgfQotCQkgIH0JCQkKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHN0YXR1czsKLQkgIAotICB9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKSB7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZF8gPSBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzNDE4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0phdmFUb1dTRExNZXRob2RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIEphdmFUb1dTRExNZXRob2RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEpBVkFfRVhURU5TSU9OID0gIi5qYXZhIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBDTEFTU19FWFRFTlNJT04gPSAiLmNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBIYXNodGFibGUgZk1ldGhvZE5hbWVzOwotCXByaXZhdGUgU3RyaW5nIGZDbGFzc05hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZmJlYW5CYXNlTmFtZTsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCi0JLyoqCi0JKiBEZWZhdWx0IENUT1IKLQkqLwotCXB1YmxpYyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCgpIHsKLQl9Ci0JLyoqCi0JKiBEZWZhdWx0IENUT1IKLQkqLwotCXB1YmxpYyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCgKLQkJSmF2YVdTRExQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciwKLQkJSVByb2plY3Qgc2VydmljZVByb2plY3QpIHsKLQkJamF2YVdTRExQYXJhbV8gPSBqYXZhUGFyYW1ldGVyOwotCQlzZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLQotCX0KLQotCS8qKgotCSogSmF2YVRvVG9XU0RMTWV0aG9kIGV4ZWN1dGUKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkJZmJlYW5CYXNlTmFtZSA9IGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCk7Ci0JCWVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLklORk8sIDUwNzAsIHRoaXMsICJleGVjdXRlIiwgImJlYW5CYXNlTmFtZSA9ICIrZmJlYW5CYXNlTmFtZSk7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQl0cnkgewotCQkJLy9HZXQgdGhlIHF1YWxpZmllZCBiZWFuIG5hbWU7IG15LnBhY2thZ2UuTXlDbGFzcwotCQkJZk1ldGhvZE5hbWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCQkJSGFzaHRhYmxlIG9sZE1ldGhvZHNOYW1lcyA9IGphdmFXU0RMUGFyYW1fLmdldE1ldGhvZHMoKTsKLQkJCVN0cmluZyBxTmFtZSA9IGZiZWFuQmFzZU5hbWU7Ci0KLQkJCWlmIChxTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKEpBVkFfRVhURU5TSU9OKQotCQkJCXx8IHFOYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoQ0xBU1NfRVhURU5TSU9OKSkgewotCQkJCXFOYW1lID0gcU5hbWUuc3Vic3RyaW5nKDAsIHFOYW1lLmxhc3RJbmRleE9mKCcuJykpOwotCQkJfQotCi0JCQlKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhxTmFtZSwgc2VydmljZVByb2plY3RfKTsKLQkJCQotCQkJaWYgKCFqYXZhQ2xhc3MuaXNFeGlzdGluZ1R5cGUoKSkgewotCQkJCWVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLkVSUk9SLCA1MDIyLCB0aGlzLCAiZXhlY3V0ZSIsIAotCQkJCQkJTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9NT0ZfUkVGTEVDVF9GQUlMRUQsCi0JCQkJCQluZXcgU3RyaW5nW10geyBxTmFtZSB9KSk7Ci0JCQkJCi0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0JCQkJCQlOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX01PRl9SRUZMRUNUX0ZBSUxFRCwKLQkJCQkJbmV3IFN0cmluZ1tdIHsgcU5hbWUgfSkpOwotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0KLQkJCS8vIEdldCB0aGUgcXVhbGlmaWVkIG5hbWUKLQkJCWZDbGFzc05hbWUgPSBqYXZhQ2xhc3MuZ2V0UXVhbGlmaWVkTmFtZSgpOwotCQkJU3RyaW5nIGJlYW5OYW1lOwotCQkJaWYgKGZDbGFzc05hbWUubGFzdEluZGV4T2YoJy4nKSAhPSAtMSkgewotCQkJCWJlYW5OYW1lID0KLQkJCQkJZkNsYXNzTmFtZS5zdWJzdHJpbmcoCi0JCQkJCQlmQ2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxLAotCQkJCQkJZkNsYXNzTmFtZS5sZW5ndGgoKSk7Ci0JCQl9IGVsc2UKLQkJCQliZWFuTmFtZSA9IGZDbGFzc05hbWU7Ci0KLQkJCS8vIFdhbGsgdGhlIGphdmEgY2xhc3MgYW5kIGdldCB0aGUgbWV0aG9kIG5hbWVzCi0JCQlnYXRoZXJNZXRob2RzKGphdmFDbGFzcywgYmVhbk5hbWUsIG9sZE1ldGhvZHNOYW1lcyk7Ci0JCQkvKgotCQkJSXRlcmF0b3IgbSA9IGphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzRXh0ZW5kZWQoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKG0uaGFzTmV4dCgpKSB7Ci0JCQkJTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpIG0ubmV4dCgpOyAgCi0JCQkJaWYgKCAhIG1ldGhvZC5pc0NvbnN0cnVjdG9yKCkpeyAKLQkJCQlpZiAoIWJlYW5OYW1lLmVxdWFscyhtZXRob2QuZ2V0TmFtZSgpKQotCQkJCQkmJiAhKGlzRHVwbGljYXRlTWV0aG9kTmFtZShtZXRob2QKLQkJCQkJCS5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpKQotCQkJCQkmJiAhKG1ldGhvZAotCQkJCQkJLmdldENvbnRhaW5pbmdKYXZhQ2xhc3MoKQotCQkJCQkJLmdldEphdmFOYW1lKCkKLQkJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZheC5lamIuRUpCT2JqZWN0IikpCS8vJE5PTi1OTFMtMSQKLQkJCQkJJiYgIShtZXRob2QKLQkJCQkJCS5nZXRDb250YWluaW5nSmF2YUNsYXNzKCkKLQkJCQkJCS5nZXRKYXZhTmFtZSgpCi0JCQkJCQkuZXF1YWxzSWdub3JlQ2FzZSgiamF2YXguZWpiLkVKQk9iamVjdFtdIikpCS8vJE5PTi1OTFMtMSQKLQkJCQkJJiYgIShtZXRob2QKLQkJCQkJCS5nZXRDb250YWluaW5nSmF2YUNsYXNzKCkKLQkJCQkJCS5nZXRKYXZhTmFtZSgpCi0JCQkJCQkuZXF1YWxzSWdub3JlQ2FzZSgiamF2YS5sYW5nLk9iamVjdCIpKQkvLyROT04tTkxTLTEkCi0JCQkJCSYmICEobWV0aG9kCi0JCQkJCQkuZ2V0Q29udGFpbmluZ0phdmFDbGFzcygpCi0JCQkJCQkuZ2V0SmF2YU5hbWUoKQotCQkJCQkJLmVxdWFsc0lnbm9yZUNhc2UoImphdmEubGFuZy5PYmplY3RbXSIpKSkgewkvLyROT04tTkxTLTEkCi0JCQkJCS8vIGFkZCB0aGUgbWV0aG9kIG5hbWUgdG8gb3VyIGxpc3Qgb2YgbWV0aG9kIG5hbWVzCi0JCQkJCVN0cmluZyBtZXRob2ROYW1lID1tZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpOwotCQkgICAgICAgICAgQm9vbGVhbiBpc1NlbGVjdGVkID0gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgICAgIAkJICBpZiAob2xkTWV0aG9kc05hbWVzICE9IG51bGwgJiYgb2xkTWV0aG9kc05hbWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUpKQotICAgICAgICAgIAkJCWlzU2VsZWN0ZWQgPSAoQm9vbGVhbilvbGRNZXRob2RzTmFtZXMuZ2V0KG1ldGhvZE5hbWUpOwotCQkgICAgICAgICAgZk1ldGhvZE5hbWVzLnB1dChtZXRob2ROYW1lLCBpc1NlbGVjdGVkKTsKLQkJCQl9IAotCQkJCX0KLQkJCX0KLQkJCSovCi0JCQlqYXZhV1NETFBhcmFtXy5zZXRNZXRob2RzKGZNZXRob2ROYW1lcyk7Ci0JCQkKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllbnZpcm9ubWVudC5nZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgNTAyMywgdGhpcywgImV4ZWN1dGUiLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9SRUFEX0JFQU4pOwotCQkKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfVE9fTUVUSE9ELCBlKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0KLQotICBwcml2YXRlIHZvaWQgZ2F0aGVyTWV0aG9kcyhKYXZhQ2xhc3MgamF2YUNsYXNzLCBTdHJpbmcgYmVhbk5hbWUsIEhhc2h0YWJsZSBvbGRNZXRob2RzTmFtZXMpCi0gIHsKLSAgICBTdHJpbmcgamF2YU5hbWUgPSBqYXZhQ2xhc3MuZ2V0SmF2YU5hbWUoKTsKLSAgICBpZiAoIWphdmFDbGFzcy5pc0ludGVyZmFjZSgpCi0gICAgICAgICYmICFqYXZhTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZheC5lamIuRUpCT2JqZWN0W10iKQotICAgICAgICAmJiAhamF2YU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiamF2YXguZWpiLkVKQk9iamVjdCIpCi0gICAgICAgICYmICFqYXZhTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZhLmxhbmcuT2JqZWN0W10iKQotICAgICAgICAmJiAhamF2YU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiamF2YS5sYW5nLk9iamVjdCIpKQotICAgIHsKLSAgICAgIExpc3QgcHVibGljTWV0aG9kcyA9IGphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcHVibGljTWV0aG9kcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClpdC5uZXh0KCk7Ci0gICAgICAgIGlmICghbWV0aG9kLmlzQ29uc3RydWN0b3IoKQotICAgICAgICAgICAgJiYgIWJlYW5OYW1lLmVxdWFscyhtZXRob2QuZ2V0TmFtZSgpKQotICAgICAgICAgICAgJiYgIShpc0R1cGxpY2F0ZU1ldGhvZE5hbWUobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gYWRkIHRoZSBtZXRob2QgbmFtZSB0byBvdXIgbGlzdCBvZiBtZXRob2QgbmFtZXMKLSAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCk7Ci0gICAgICAgICAgQm9vbGVhbiBpc1NlbGVjdGVkID0gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgICAgICAgaWYgKG9sZE1ldGhvZHNOYW1lcyAhPSBudWxsICYmIG9sZE1ldGhvZHNOYW1lcy5jb250YWluc0tleShtZXRob2ROYW1lKSkKLSAgICAgICAgICAgIGlzU2VsZWN0ZWQgPSAoQm9vbGVhbilvbGRNZXRob2RzTmFtZXMuZ2V0KG1ldGhvZE5hbWUpOwotICAgICAgICAgIGZNZXRob2ROYW1lcy5wdXQobWV0aG9kTmFtZSwgaXNTZWxlY3RlZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdhdGhlck1ldGhvZHMoamF2YUNsYXNzLmdldFN1cGVydHlwZSgpLCBiZWFuTmFtZSwgb2xkTWV0aG9kc05hbWVzKTsKLSAgICB9Ci0gIH0KLQkgIAotCS8vUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBtZXRob2QgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgCi0JLy9mTWV0aG9kTmFtZXMgdmVjdG9yLiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRldGVjdCBvdmVybG9hZGVkIAotCS8vbWV0aG9kcyBpbiBCZWFucyBhbmQgRUpCcywgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4KLQlwcml2YXRlIGJvb2xlYW4gaXNEdXBsaWNhdGVNZXRob2ROYW1lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0JCXJldHVybiAoZk1ldGhvZE5hbWVzID09IG51bGwgPyBmYWxzZTogZk1ldGhvZE5hbWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUpKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpCi0JewotCSAgc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Nb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Nb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjRmMDI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyRmFjdG9yeUlkOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3Q7Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzLyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpICB7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQl0cnkgewotCQkJLy8gdGhlIGNvcnJlY3QgcHJvamVjdCBVUkwgaGFzIGFscmVhZHkgYmVlbiBvYnRhaW5lZCwgbm8gbmVlZCB0byBtb2RpZnkgPHNvYXA6YWRkcmVzcz4gbG9jYXRpb24gVVJJCi0JCQlpZiAoIWphdmFXU0RMUGFyYW0uaXNHdWVzc1Byb2plY3RVUkwoKSkgeyAKLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQotCQkJU3RyaW5nIHByb2plY3RVUkwgPSBudWxsOwkJCi0KLQkJCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJCWlmKHNlcnZlckluc3RhbmNlSWQhPW51bGwpIHsKLQkJCQlzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0JCQl9Ci0KLQkJCWlmKHNlcnZlciE9bnVsbCkgewotCQkJCXByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlcik7Ci0JCQl9IGVsc2UgewotCQkJCXByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJfQotCi0JCQlpZihwcm9qZWN0VVJMPT1udWxsIHx8IHByb2plY3RVUkwudHJpbSgpLmxlbmd0aCgpPT0wKSB7Ci0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9VUkwsIG5ldyBTdHJpbmdbXSB7c2VydmljZVByb2plY3QuZ2V0TmFtZSgpfSkpOwotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0KLQkJCWlmIChqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKSA9PSBwcm9qZWN0VVJMKSB7Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9IAotCi0JCQlqYXZhV1NETFBhcmFtLnNldFByb2plY3RVUkwocHJvamVjdFVSTCk7ICAvLyBwcm9qZWN0IFVSTCBuZWVkZWQgZm9yIEF4aXMgZGVwbG95Ci0KLQkJCS8vIG1vZGlmeSB0aGUgPHNvYXA6YWRkcmVzcz4gbG9jYXRpb24gVVJJIHRvIHJlZmxlY3QgdGhlIGNvcnJlY3QgcHJvamVjdCBVUkwKLQkJCWlmKHdzZGxVUkkhPW51bGwpIHsJCQkJCQkJCi0JCQkJYm9vbGVhbiBtb2RpZmllZCA9IGZhbHNlOwkJCQkJCQkKLQkJCQlpZiAod2ViU2VydmljZXNQYXJzZXIgPT0gbnVsbCkgewotCQkJCQl3ZWJTZXJ2aWNlc1BhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotCQkJCX0KLQkJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLQkJCQlNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0JCQkJZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLQkJCQkJU2VydmljZSBzZXIgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0JCQkJCU1hcCBwb3J0cyA9IHNlci5nZXRQb3J0cygpOwotCQkJCQlmb3IgKEl0ZXJhdG9yIGl0MiA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Mi5oYXNOZXh0KCk7KSB7Ci0JCQkJCQlQb3J0IHAgPSAoUG9ydClpdDIubmV4dCgpOwotCQkJCQkJZm9yIChJdGVyYXRvciBpdDMgPSBwLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGl0My5oYXNOZXh0KCk7KSB7Ci0JCQkJCQkJT2JqZWN0IG9iaiA9IGl0My5uZXh0KCk7Ci0JCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7Ci0JCQkJCQkJCVNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKW9iajsKLQkJCQkJCQkJU3RyaW5nIHdzZGxTb2FwQWRkcmVzcyA9IHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0KLQkJCQkJCQkJLy8gY2hlY2sgaWYgdGhlIFdTREwgU09BUCBhZGRyZXNzIGhhcyB0aGUgcmlnaHQgcHJvamVjdCBVUkwsIGlmIG5vdCwgdXBkYXRlIGl0Ci0JCQkJCQkJCWlmKHdzZGxTb2FwQWRkcmVzcyE9bnVsbCkgewotCQkJCQkJCQkJaWYgKCF3c2RsU29hcEFkZHJlc3Muc3RhcnRzV2l0aChwcm9qZWN0VVJMKSkgewotCQkJCQkJCQkJCS8vIGUuZy4gImh0dHA6Ly90ZW1wdXJpLm9yZy9zZXJ2aWNlcy9TZXJ2aWNlTmFtZSIgYmVjb21lcyAiL3NlcnZpY2VzL1NlcnZpY2VOYW1lIiAKLQkJCQkJCQkJCQlTdHJpbmcgc2VydmljZXNTdHJpbmcgPSB3c2RsU29hcEFkZHJlc3Muc3Vic3RyaW5nKHdzZGxTb2FwQWRkcmVzcy5pbmRleE9mKFNFUlZJQ0VfRVhUKSk7Ci0JCQkJCQkJCQkJc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkocHJvamVjdFVSTCArIHNlcnZpY2VzU3RyaW5nKTsKLQkJCQkJCQkJCQltb2RpZmllZCA9IHRydWU7Ci0JCQkJCQkJCQl9Ci0KLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChtb2RpZmllZCkgewotCQkJCQkvLyB1cGRhdGUgdGhlIFdTREwgZmlsZSBhbmQgcmVmcmVzaCBpbiB3b3Jrc3BhY2UKLQkJCQkJV1NETEZhY3Rvcnkgd3NkbEZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0JCQkJCVdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLQkJCQkJT3V0cHV0U3RyZWFtIG9zID0gZW52aXJvbm1lbnQuZ2V0VVJJRmFjdG9yeSgpLm5ld1VSSSh3c2RsVVJJLnRvU3RyaW5nKCkpLmdldE91dHB1dFN0cmVhbSgpOwotCQkJCQl3c2RsV3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBvcyk7Ci0JCQkJCW9zLmNsb3NlKCk7Ci0KLQkJCQkJVVJMIHdzZGxVUkwgPSBuZXcgVVJMICh3c2RsVVJJKTsKLQkJCQkJSVJlc291cmNlIHdzZGxGaWxlID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2VBdExvY2F0aW9uKHdzZGxVUkwuZ2V0UGF0aCgpLCBzZXJ2aWNlUHJvamVjdCk7Ci0JCQkJCWlmICh3c2RsRmlsZSAhPSBudWxsKSB7Ci0JCQkJCQl3c2RsRmlsZS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX1pFUk8sIG1vbml0b3IpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RJRllfRU5EUE9JTlQsIG5ldyBTdHJpbmdbXSB7d3NkbFVSSX0pKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01PRElGWV9FTkRQT0lOVCwgbmV3IFN0cmluZ1tdIHt3c2RsVVJJfSkpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJZCkgewotCQl0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJGYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQl0aGlzLnNlcnZlckZhY3RvcnlJZCA9IHNlcnZlckZhY3RvcnlJZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkgewotCQl0aGlzLnNlcnZpY2VQcm9qZWN0ID0gc2VydmljZVByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkgewotCQl0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcikgewotCQl3ZWJTZXJ2aWNlc1BhcnNlciA9IHBhcnNlcjsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLQl7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKQotCXsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQXhpc0lucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9UREF4aXNJbnB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRlZDY4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQXhpc0lucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi0KLXB1YmxpYyBjbGFzcyBUREF4aXNJbnB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBJV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUHJvamVjdF87IAotCi0JICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJTZXJ2ZXJfOwotICAgICAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRF87IAotCSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBudWxsOwotCSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0JICBwcml2YXRlIFdlYlNlcnZpY2VJbmZvIHdlYlNlcnZpY2VJbmZvXzsKLQkgIAkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIFREQXhpc0lucHV0Q29tbWFuZCgpIHsKLQkJfQotCQkKLQkJcHVibGljIFREQXhpc0lucHV0Q29tbWFuZChJV2ViU2VydmljZSB3cywgU3RyaW5nIHByb2plY3QpIHsKLQkJCXdzXyA9IHdzOwotCQkJc2VydmVyUHJvamVjdF8gPSBwcm9qZWN0OwotCQl9Ci0JCQotCQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JCXsJICAgIAotCQlzZXJ2ZXJTZXJ2ZXJfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCi0JCVN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCWlmIChzZXJ2ZXJJbnN0YW5jZUlkICE9IG51bGwpIHsgLy8gc2VydmVyIGV4aXN0cwotCSAgICAJc2VydmljZUV4aXN0aW5nU2VydmVyXyA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2ZXJJbnN0YW5jZUlkKTsKLQkJCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpCi0JCSAgICB7Ci0JCSAgICAgIHNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmljZUV4aXN0aW5nU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkJICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgCXNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmVyRmFjdG9yeUlkOwotCSAgICB9Ci0JCQotCQl3c2RsVVJJXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFdzZGxVUkwoKTsKLQkJd2ViU2VydmljZUluZm9fID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCk7Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQkgIAotCQkvKioKLQkJICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclByb2plY3QuCi0JCSAgICovCi0JCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJQcm9qZWN0KCkKLQkJICB7Ci0JCQkgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkJICB9Ci0KLQkJICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclNlcnZlcigpCi0JCSAgewotCQkgICAgcmV0dXJuIHNlcnZlclNlcnZlcl87Ci0JCSAgfQotICAgICAgICAgIAotICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlclR5cGVJRCgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotICAgICAgICAgIH0gICAgICAgICAgCi0KLQkJcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQkJcmV0dXJuIHdzZGxVUklfOwotCQl9Ci0KLQkJcHVibGljIFdlYlNlcnZpY2VJbmZvIGdldFdlYlNlcnZpY2VJbmZvKCkgewotCQkJcmV0dXJuIHdlYlNlcnZpY2VJbmZvXzsKLQkJfQotCQkKLQkJcHVibGljIElTZXJ2ZXIgZ2V0U2VydmljZUV4aXN0aW5nU2VydmVyKCkKLQkJICB7Ci0JCSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLQkJICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVERDb2RlR2VuT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQ29kZUdlbk9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGFiOTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVERDb2RlR2VuT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjMyNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5XU0RMMkphdmFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ29weUF4aXNKYXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suUmVmcmVzaFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suQmFja3VwU2tlbEltcGxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suU2tlbGV0b24yV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLXB1YmxpYyBjbGFzcyBURENvZGVHZW5PcGVyYXRpb24gZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQkvLyBDb3B5QXhpc0phckNvbW1hbmQKLQlwcml2YXRlIENvcHlBeGlzSmFyQ29tbWFuZCBjb3B5QXhpc0phckNvbW1hbmQgPSBudWxsOwotCQotCS8vIEJhY2t1cFNrZWxJbXBsQ29tbWFuZAotCXByaXZhdGUgQmFja3VwU2tlbEltcGxDb21tYW5kIGJhY2t1cFNrZWxJbXBsQ29tbWFuZCA9IG51bGw7Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mbzsKLQkKLQkvLyBXU0RMMkphdmFDb21tYW5kCi0JcHJpdmF0ZSBXU0RMMkphdmFDb21tYW5kIHdzZGwySmF2YUNvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0JcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotCXByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQkKLQkvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCXByaXZhdGUgU2tlbGV0b24yV1NETENvbW1hbmQgc2tlbGV0b24yV1NETENvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEOwotCXByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7Ci0JICAKLQkvLyBVcGRhdGVXZWJYTUxDb21tYW5kCi0JcHJpdmF0ZSBVcGRhdGVXRUJYTUxDb21tYW5kIHVwZGF0ZVdlYlhNTENvbW1hbmQgPSBudWxsOwotCi0JLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JcHJpdmF0ZSBSZWZyZXNoUHJvamVjdENvbW1hbmQgcmVmcmVzaFByb2plY3RDb21tYW5kID0gbnVsbDsKLQkKLQkvKioKLQkgKiBUaGlzIGNvbW1hbmQgcnVucyB0aGUgY29tbWFuZHMgcGFzc2VkIGJ5IHRoZSBjb25zdHJ1Y3RvciBpbiBhIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbi4KLQkgKiBUaGUgY29tbWFuZHMgYXJlIGxpc3RlZCBhYm92ZSwgd2l0aCBvbmx5IHNvbWUgb2YgdGhlaXIgZGF0YSByZWdpc3RyeSBwYXJhbWV0ZXJzIHNpbmNlIHNvbWUgYXBwZWFyIAotCSAqIHRvIG92ZXJsYXAgdGhlIGNvbW1hbmRzLgotCSAqIEBwYXJhbSBiYWNrdXBTa2VsSW1wbAotCSAqIEBwYXJhbSB3c2RsMkphdmEKLQkgKiBAcGFyYW0gc2tlbGV0b24yV1NETAotCSAqIEBwYXJhbSB1cGRhdGVXZWJYTUwKLQkgKi8KLQlwdWJsaWMgVERDb2RlR2VuT3BlcmF0aW9uKCkgeyAKLQkJY29weUF4aXNKYXJDb21tYW5kID0gbmV3IENvcHlBeGlzSmFyQ29tbWFuZCgpOwotCQliYWNrdXBTa2VsSW1wbENvbW1hbmQgPSBuZXcgQmFja3VwU2tlbEltcGxDb21tYW5kKCk7Ci0JCXdzZGwySmF2YUNvbW1hbmQgPSBuZXcgV1NETDJKYXZhQ29tbWFuZCgpOwotCQlza2VsZXRvbjJXU0RMQ29tbWFuZCA9IG5ldyBTa2VsZXRvbjJXU0RMQ29tbWFuZCgpOwotCQl1cGRhdGVXZWJYTUxDb21tYW5kID0gbmV3IFVwZGF0ZVdFQlhNTENvbW1hbmQoKTsKLQkJcmVmcmVzaFByb2plY3RDb21tYW5kID0gbmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlUb3BEb3duV1NNb2RpZnlPcGVyYXRpb24gdGRPcGVyYXRpb24gPSBuZXcgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uKGluZm8sIGVudik7Ci0JCXRyeSB7Ci0JCQl0ZE9wZXJhdGlvbi5leGVjdXRlKG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoKENvcmVFeGNlcHRpb24gY2UpewotCQkJSVN0YXR1cyBzdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCQotCQotCXByaXZhdGUgY2xhc3MgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uIGV4dGVuZHMgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIHsKLQotCQlwcml2YXRlIElBZGFwdGFibGUgaW5mbyA9IG51bGw7Ci0JCXByaXZhdGUgSUVudmlyb25tZW50IGVudiA9IG51bGw7Ci0JCQotCQlwcm90ZWN0ZWQgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uKElBZGFwdGFibGUgYWRhcHRhYmxlLCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpewotCQkJaW5mbyA9IGFkYXB0YWJsZTsKLQkJCWVudiA9IGVudmlyb25tZW50OwotCQl9Ci0JCQotCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCi0JCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCQkKLQkJICAgIC8vIENvcHlBeGlzSmFyQ29tbWFuZAotCQkgICAgY29weUF4aXNKYXJDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQkJICAgIHN0YXR1cyA9IGNvcHlBeGlzSmFyQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JCSAgICAJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJICAgIH0KLQkJCQotCQkJLy8gYmFja3VwU2tlbEltcGxDb21tYW5kCi0JCQliYWNrdXBTa2VsSW1wbENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCWJhY2t1cFNrZWxJbXBsQ29tbWFuZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcih3ZWJTZXJ2aWNlc1BhcnNlcik7Ci0JCQliYWNrdXBTa2VsSW1wbENvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCWJhY2t1cFNrZWxJbXBsQ29tbWFuZC5zZXRXZWJTZXJ2aWNlSW5mbyh3ZWJTZXJ2aWNlSW5mbyk7Ci0JCQlzdGF0dXMgPSBiYWNrdXBTa2VsSW1wbENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCi0JCQkvLyB3c2RsMkphdmFDb21tYW5kCi0JCQl3c2RsMkphdmFDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQl3c2RsMkphdmFDb21tYW5kLnNldFdzZGxVUkkod3NkbFVSSSk7Ci0JCQl3c2RsMkphdmFDb21tYW5kLnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoaHR0cEJhc2ljQXV0aFBhc3N3b3JkKTsKLQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCXN0YXR1cyA9IHdzZGwySmF2YUNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCQkJamF2YVdTRExQYXJhbSA9IHdzZGwySmF2YUNvbW1hbmQuZ2V0SmF2YVdTRExQYXJhbSgpOwotCQkJCi0JCQkvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCQkJc2tlbGV0b24yV1NETENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldFdlYlNlcnZpY2VzUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQlza2VsZXRvbjJXU0RMQ29tbWFuZC5zZXRTZXJ2ZXJQcm9qZWN0KHNlcnZlclByb2plY3QpOwotCQkJc2tlbGV0b24yV1NETENvbW1hbmQuc2V0U2VydmljZVNlcnZlclR5cGVJRChzZXJ2aWNlU2VydmVyVHlwZUlEKTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpOwotCQkJc3RhdHVzID0gc2tlbGV0b24yV1NETENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCQkJd3NkbFVSSSA9IHNrZWxldG9uMldTRExDb21tYW5kLmdldFdzZGxVUkkoKTsKLQkJCi0JCQkvLyBVcGRhdGVXZWJYTUxDb21tYW5kCi0JCQl1cGRhdGVXZWJYTUxDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQl1cGRhdGVXZWJYTUxDb21tYW5kLnNldFNlcnZlclByb2plY3Qoc2VydmVyUHJvamVjdCk7Ci0JCQlzdGF0dXMgPSB1cGRhdGVXZWJYTUxDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQkJCQotCQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JCQlyZWZyZXNoUHJvamVjdENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRQcm9qZWN0KHNlcnZlclByb2plY3QpOwotCQkJc3RhdHVzID0gcmVmcmVzaFByb2plY3RDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQkJCQotCQl9Ci0JCi0JfQotCi0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLQkJdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlSW5mbyhXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mbykgewotCQl0aGlzLndlYlNlcnZpY2VJbmZvID0gd2ViU2VydmljZUluZm87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFVzZXJuYW1lCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFVzZXJuYW1lIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQlyZXR1cm4gd3NkbFVSSTsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHNlcnZlclByb2plY3QgVGhlIHNlcnZlclByb2plY3QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoSVByb2plY3Qgc2VydmVyUHJvamVjdCkgewotCSAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gc2VydmVyUHJvamVjdDsKLQl9Ci0JCSAgCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgaWQpIHsKLQkgIHRoaXMuc2VydmljZVNlcnZlclR5cGVJRCA9IGlkOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2ZXIpIHsKLQkJICB0aGlzLnNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IHNlcnZlcjsKLQkJfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1VwZGF0ZVdFQlhNTENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVXBkYXRlV0VCWE1MQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWZlYTY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVXBkYXRlV0VCWE1MQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTI4ICAgMTg2MDU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuSU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuTW9kZWxQcm92aWRlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uU2VydmxldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0TWFwcGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uV2ViYXBwbGljYXRpb25GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuY29yZS5EaXNwbGF5TmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmNvcmUuSmF2YWVlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmNvcmUuVXJsUGF0dGVyblR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlV0VCWE1MQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLQotICBwdWJsaWMgVXBkYXRlV0VCWE1MQ29tbWFuZCggKQotICB7Ci0gIH0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCWlmIChzZXJ2ZXJQcm9qZWN0ICE9IG51bGwpIHsKLQkJCUlTdGF0dXMgc3RhdHVzID0gbnVsbDsKLQkJCXN0YXR1cyA9IGFkZFNlcnZsZXQoc2VydmVyUHJvamVjdCwgZ2V0QXhpc1NlcnZsZXREZXNjcmlwdG9yKCkpOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCQlhZGRTZXJ2bGV0KHNlcnZlclByb2plY3QsIGdldEFkbWludFNlcnZsZXREZXNjcmlwdG9yKCkpOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBTZXJ2bGV0RGVzY3JpcHRvciBnZXRBeGlzU2VydmxldERlc2NyaXB0b3IoKSB7Ci0KLQkJU2VydmxldERlc2NyaXB0b3Igc2QgPSBuZXcgU2VydmxldERlc2NyaXB0b3IoKTsKLQkJc2QuX25hbWUgPSAiQXhpc1NlcnZsZXQiOyAvLyROT04tTkxTLTEkCi0JCXNkLl9kaXNwbGF5TmFtZSA9ICJBcGFjaGUtQXhpcyBTZXJ2bGV0IjsgLy8kTk9OLU5MUy0xJAotCQlzZC5fY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuYXhpcy50cmFuc3BvcnQuaHR0cC5BeGlzU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX21hcHBpbmdzID0gbmV3IFN0cmluZ1tdIHsgIi9zZXJ2bGV0L0F4aXNTZXJ2bGV0IiwgLy8kTk9OLU5MUy0xJAotCQkJCQkJCQkJCSIqLmp3cyIsIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQkJCQkiL3NlcnZpY2VzLyoiIH07IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIHNkOwotCX0KLQotCXByaXZhdGUgU2VydmxldERlc2NyaXB0b3IgZ2V0QWRtaW50U2VydmxldERlc2NyaXB0b3IoKSB7Ci0JCVNlcnZsZXREZXNjcmlwdG9yIHNkID0gbmV3IFNlcnZsZXREZXNjcmlwdG9yKCk7Ci0JCXNkLl9uYW1lID0gIkFkbWluU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX2Rpc3BsYXlOYW1lID0gIkF4aXMgQWRtaW4gU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX2NsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmF4aXMudHJhbnNwb3J0Lmh0dHAuQWRtaW5TZXJ2bGV0IjsgLy8kTk9OLU5MUy0xJAotCQlzZC5fbWFwcGluZ3MgPSBuZXcgU3RyaW5nW10geyAiL3NlcnZsZXQvQWRtaW5TZXJ2bGV0IiB9OyAvLyROT04tTkxTLTEkCi0JCXNkLl9sb2FkT25TdGFydHVwID0gbmV3IEludGVnZXIoMTAwKTsKLQkJcmV0dXJuIHNkOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBhZGRTZXJ2bGV0KGZpbmFsIElQcm9qZWN0IHdlYlByb2plY3QsIGZpbmFsIFNlcnZsZXREZXNjcmlwdG9yIHNlcnZsZXREZXNjcmlwdG9yKSB7Ci0JCi0JCXRyeSB7Ci0JCQkKLQkJCWZpbmFsIElNb2RlbFByb3ZpZGVyIHByb3ZpZGVyID0gTW9kZWxQcm92aWRlck1hbmFnZXIuZ2V0TW9kZWxQcm92aWRlcih3ZWJQcm9qZWN0KTsKLQkJCQotCQkJcHJvdmlkZXIubW9kaWZ5KG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCU9iamVjdCBvYmplY3QgPSBwcm92aWRlci5nZXRNb2RlbE9iamVjdCgpOwotCQkJCQlpZiAob2JqZWN0IGluc3RhbmNlb2Ygb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViQXBwKSB7Ci0JCQkJCQlvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5XZWJBcHAgamF2YWVlV2ViQXBwID0gKG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUud2ViLldlYkFwcCkgb2JqZWN0OwotCQkJCQkJYWRkSmF2YWVlU2VydmxldCh3ZWJQcm9qZWN0LCBzZXJ2bGV0RGVzY3JpcHRvciwgamF2YWVlV2ViQXBwKTsKLQkJCQkJfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHApIHsKLQkJCQkJCVdlYkFwcCB3ZWJBcHAgPSAoV2ViQXBwKSBvYmplY3Q7Ci0JCQkJCQlhZGRTZXJ2bGV0KHdlYlByb2plY3QsIHNlcnZsZXREZXNjcmlwdG9yLCB3ZWJBcHApOwotCQkJCQl9Ci0JCQkJCQotCQkJCX0KLQkJCX0KLQkJCQksIG51bGwpOwotCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCi0JCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VUERBVEVfV0VCX1hNTCwKLQkJCQllKTsKLQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFNlcnZsZXQoSVByb2plY3Qgd2ViUHJvamVjdCwgU2VydmxldERlc2NyaXB0b3Igc2VydmxldERlc2NyaXB0b3IsIFdlYkFwcCB3ZWJhcHApIHsKLQotCQlMaXN0IHRoZVNlcnZsZXRzID0gd2ViYXBwLmdldFNlcnZsZXRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhlU2VydmxldHMuc2l6ZSgpOyBpKyspIHsKLQkJCVNlcnZsZXQgYVNlcnZsZXQgPSAoU2VydmxldCkgdGhlU2VydmxldHMuZ2V0KGkpOwotCQkJaWYgKGFTZXJ2bGV0LmdldFNlcnZsZXROYW1lKCkuZXF1YWxzKHNlcnZsZXREZXNjcmlwdG9yLl9uYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCVdlYmFwcGxpY2F0aW9uRmFjdG9yeSBmYWN0b3J5ID0gV2ViYXBwbGljYXRpb25GYWN0b3J5LmVJTlNUQU5DRTsKLQotCQlTZXJ2bGV0IHNlcnZsZXQgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXQoKTsKLQkJU2VydmxldFR5cGUgc2VydmxldFR5cGUgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXRUeXBlKCk7Ci0JCXNlcnZsZXQuc2V0V2ViVHlwZShzZXJ2bGV0VHlwZSk7Ci0JCXNlcnZsZXQuc2V0U2VydmxldE5hbWUoc2VydmxldERlc2NyaXB0b3IuX25hbWUpOwotCQlzZXJ2bGV0VHlwZS5zZXRDbGFzc05hbWUoc2VydmxldERlc2NyaXB0b3IuX2NsYXNzTmFtZSk7Ci0JCWlmKHNlcnZsZXREZXNjcmlwdG9yLl9kaXNwbGF5TmFtZSAhPSBudWxsKXsKLQkJCXNlcnZsZXQuc2V0RGlzcGxheU5hbWUoc2VydmxldERlc2NyaXB0b3IuX2Rpc3BsYXlOYW1lKTsKLQkJfQotCQlpZihzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCAhPSBudWxsKXsKLQkJCXNlcnZsZXQuc2V0TG9hZE9uU3RhcnR1cChzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCk7Ci0JCX0KLQkJaWYoc2VydmxldERlc2NyaXB0b3IuX3BhcmFtcyAhPSBudWxsKXsKLQkJCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IHNlcnZsZXQuZ2V0UGFyYW1zQXNQcm9wZXJ0aWVzKCk7Ci0JCQlwcm9wZXJ0aWVzLnB1dEFsbChzZXJ2bGV0RGVzY3JpcHRvci5fcGFyYW1zKTsKLQkJfQotCQl3ZWJhcHAuZ2V0U2VydmxldHMoKS5hZGQoc2VydmxldCk7Ci0KLQkJaWYoc2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzICE9IG51bGwpewotCQkJZm9yKGludCBpPTA7IGk8c2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzLmxlbmd0aDsgaSsrKXsKLQkJCQlTZXJ2bGV0TWFwcGluZyBzZXJ2bGV0TWFwcGluZyA9IGZhY3RvcnkuY3JlYXRlU2VydmxldE1hcHBpbmcoKTsKLQkJCQlzZXJ2bGV0TWFwcGluZy5zZXRTZXJ2bGV0KHNlcnZsZXQpOwotCQkJCXNlcnZsZXRNYXBwaW5nLnNldFVybFBhdHRlcm4oc2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzW2ldKTsKLQkJCQl3ZWJhcHAuZ2V0U2VydmxldE1hcHBpbmdzKCkuYWRkKHNlcnZsZXRNYXBwaW5nKTsJCQkJCQotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhZGRKYXZhZWVTZXJ2bGV0KElQcm9qZWN0IHdlYlByb2plY3QsIFNlcnZsZXREZXNjcmlwdG9yIHNlcnZsZXREZXNjcmlwdG9yLCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5XZWJBcHAgd2ViYXBwKSB7Ci0KLQkJTGlzdCB0aGVTZXJ2bGV0cyA9IHdlYmFwcC5nZXRTZXJ2bGV0cygpOwotCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhlU2VydmxldHMuc2l6ZSgpOyBpKyspIHsKLQkJb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldCBhU2VydmxldCA9IChvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5TZXJ2bGV0KSB0aGVTZXJ2bGV0cy5nZXQoaSk7Ci0JCWlmIChhU2VydmxldC5nZXRTZXJ2bGV0TmFtZSgpLmVxdWFscyhzZXJ2bGV0RGVzY3JpcHRvci5fbmFtZSkpIHsKLQkJCXJldHVybjsKLQkJIH0KLQkgICB9Ci0JICAgCi0JICAgV2ViRmFjdG9yeSBmYWN0b3J5ID0gV2ViRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLQkgICBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5TZXJ2bGV0IHNlcnZsZXQgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXQoKTsKLQotCSAgIHNlcnZsZXQuc2V0U2VydmxldE5hbWUoc2VydmxldERlc2NyaXB0b3IuX25hbWUpOwotCSAgIHNlcnZsZXQuc2V0U2VydmxldENsYXNzKHNlcnZsZXREZXNjcmlwdG9yLl9jbGFzc05hbWUpOwotCSAgIAotCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9kaXNwbGF5TmFtZSAhPSBudWxsKXsKLQkJICAgRGlzcGxheU5hbWUgZGlzcGxheU5hbWVPYmogPSBKYXZhZWVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEaXNwbGF5TmFtZSgpOwotCQkJZGlzcGxheU5hbWVPYmouc2V0VmFsdWUoc2VydmxldERlc2NyaXB0b3IuX2Rpc3BsYXlOYW1lKTsKLQkJCXNlcnZsZXQuZ2V0RGlzcGxheU5hbWVzKCkuYWRkKGRpc3BsYXlOYW1lT2JqKTsgIAotCSAgIH0KLQkgICBpZihzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCAhPSBudWxsKXsKLQkJICBzZXJ2bGV0LnNldExvYWRPblN0YXJ0dXAoc2VydmxldERlc2NyaXB0b3IuX2xvYWRPblN0YXJ0dXApOwotCSAgIH0KLS8vCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9wYXJhbXMgIT0gbnVsbCl7Ci0vLwkJICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBzZXJ2bGV0LmdldFBhcmFtc0FzUHJvcGVydGllcygpOwotLy8JCSAgcHJvcGVydGllcy5wdXRBbGwoc2VydmxldERlc2NyaXB0b3IuX3BhcmFtcyk7Ci0vLwkgICB9Ci0JICAgd2ViYXBwLmdldFNlcnZsZXRzKCkuYWRkKHNlcnZsZXQpOwotCQotCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9tYXBwaW5ncyAhPSBudWxsKXsKLQkJICBmb3IoaW50IGk9MDsgaTxzZXJ2bGV0RGVzY3JpcHRvci5fbWFwcGluZ3MubGVuZ3RoOyBpKyspewotCQkJb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldE1hcHBpbmcgc2VydmxldE1hcHBpbmcgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXRNYXBwaW5nKCk7CQkJCi0JCQlzZXJ2bGV0TWFwcGluZy5zZXRTZXJ2bGV0TmFtZShzZXJ2bGV0LmdldFNlcnZsZXROYW1lKCkpOwotCQkJVXJsUGF0dGVyblR5cGUgdXJsID0gSmF2YWVlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVXJsUGF0dGVyblR5cGUoKTsKLQkJCXVybC5zZXRWYWx1ZShzZXJ2bGV0RGVzY3JpcHRvci5fbWFwcGluZ3NbaV0pOwotCQkJc2VydmxldE1hcHBpbmcuZ2V0VXJsUGF0dGVybnMoKS5hZGQodXJsKTsKLQkJCXdlYmFwcC5nZXRTZXJ2bGV0TWFwcGluZ3MoKS5hZGQoc2VydmxldE1hcHBpbmcpOwkJCQkJCi0JCSAgfQotCSAgIH0KLX0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoSVByb2plY3Qgc2VydmVyUHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmVyUHJvamVjdCA9IHNlcnZlclByb2plY3Q7Ci0gIH0KLQotCXB1YmxpYyBjbGFzcyBTZXJ2bGV0RGVzY3JpcHRvciB7Ci0JCVN0cmluZyBfbmFtZTsKLQkJU3RyaW5nIF9jbGFzc05hbWU7Ci0JCVN0cmluZyBfZGlzcGxheU5hbWU7Ci0JCU1hcCBfcGFyYW1zOwotCQlTdHJpbmdbXSBfbWFwcGluZ3M7Ci0JCUludGVnZXIgX2xvYWRPblN0YXJ0dXA7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1ZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTU2MzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjA3ICAgMTQ0OTc4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VVdGlsczsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0gPSBudWxsOwotICAgcHJpdmF0ZSBWZWN0b3Igc3RhdHVzID0gbnVsbDsKLSAgIHByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfID0gbnVsbDsKLQotICAgcHVibGljIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQoKSB7Ci0gIH0KLQotICAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkKLSAgewotIAotCSAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkgICBpZiAoamF2YVdTRExQYXJhbSA9PSBudWxsKSB7Ci0JCSAgIElTdGF0dXMgc2ltcGxlU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc2ltcGxlU3RhdHVzKTsKLQkJICAgcmV0dXJuIHNpbXBsZVN0YXR1czsKLQkgICB9CQkKLQkKLSAgICBzdGF0dXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpQ29udGV4dCA9IG5ldyBQZXJzaXN0ZW50V1NJQ29udGV4dCgpOwotICAgIGludCBzZXZlcml0eSA9IFdTSUNvbXBsaWFuY2VVdGlscy5nZXRXU0lTZXZlcml0eShzZXJ2aWNlUHJvamVjdF8sIHdzaUNvbnRleHQpOwotICAgIGNoZWNrUlBDRW5jb2RlZChzZXZlcml0eSk7Ci0gICAgU3RhdHVzW10gc3RhdHVzZXMgPSAoU3RhdHVzW10pIHN0YXR1cy50b0FycmF5KG5ldyBTdGF0dXNbc3RhdHVzLnNpemUoKV0pOwotCi0gICAgaWYgKHN0YXR1c2VzLmxlbmd0aCA9PSAwIHx8Ci0gICAgCQlXU0lDb21wbGlhbmNlVXRpbHMuY2hlY2tXU0lDb21wbGlhbmNlIChlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCksIHN0YXR1c2VzLCBzZXJ2aWNlUHJvamVjdF8sIHdzaUNvbnRleHQpKQotICAgIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBlbHNlIHsKLSAgICAJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCIiKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tSUENFbmNvZGVkKGludCBzZXZlcml0eSkKLSAgewotICAJCWlmIChKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9SUEMuZXF1YWxzKGphdmFXU0RMUGFyYW0uZ2V0U3R5bGUoKSkgJiYgCi0gIAkJICAgSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0VOQ09ERUQuZXF1YWxzKGphdmFXU0RMUGFyYW0uZ2V0VXNlKCkpKQotICAJCSAgIHN0YXR1cy5hZGQgKG5ldyBTdGF0dXMoc2V2ZXJpdHksICJWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kIiwgMCwgCi0gIAkJCQkgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5XU0lfSU5DT01QTElBTkNFX1JQQ19FTkNPREVELCBudWxsKSk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotICAgKiBwbHVnaW4ucHJvcGVydGllcy4KLSAgICogQHJldHVybiBUaGUgU3RyaW5nIG1lc3NhZ2UuCi0gICAqLwotCi0vKioKLSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAqIEB0b2RvIEdlbmVyYXRlZCBjb21tZW50Ci0gKi8KLXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci19Ci0KLS8qKgotICogQHBhcmFtIHNlcnZpY2VQcm9qZWN0XyBUaGUgc2VydmljZVByb2plY3RfIHRvIHNldC4KLSAqIEB0b2RvIEdlbmVyYXRlZCBjb21tZW50Ci0gKi8KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XykgewotCXRoaXMuc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3RfOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWRkZDJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSI7CS8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBpbnN0YW5jZV87Ci0gIHByaXZhdGUgSUxvZyBsb2dfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAqIFRoZSAicGx1Z2luIiBlbGVtZW50IGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZQotICAqIGNsYXNzID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVBsdWdpbiIuCi0gICogQHBhcmFtIGRlc2NyaXB0b3IgVGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gdGhpczsKLSAgICB9Ci0gICAgbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0KLSAgfQotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBsb2dnaW5nIGZyb20gYmxvd2luZyB1cC4KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gSUQ7ICAKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgKiAoV2ViU2VydmljZVdhc0NyZWF0aW9uVUlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3Mud2FzLnY1LnRwLnVpIik7Ci0gICogQHJldHVybiBUaGUgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBzdGF0aWMgcHVibGljIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIGZpcnN0IGxvYWRlZC4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc3RhcnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KCBCdW5kbGVDb250ZXh0IGNvbnRleHQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gIAlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjgsIHRoaXMsICJzdGFydCIsICJTdGFydGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5zdGFydCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjgsIHRoaXMsICJzdGFydCIsIGV4YyApOyAgCi0gICAgfQotICAgIAotICAgIHNldFByZWZlcmVuY2VzKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyB1bmxvYWRlZC4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc2h1dGRvd24uCi0gICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgCWxvZ18ubG9nKElMb2cuSU5GTywgNTA2OSwgdGhpcywgInN0b3AiLCAiU2h1dHRpbmcgcGx1Z2luIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpIik7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjgsIHRoaXMsICJzdGFydCIsIGV4YyApOyAgICAgICAgCi0gICAgfQotICB9Ci0KLQotICAvKioKLSAgICogU2V0cyB0aGUgZ2VuZXJhbCBwcmVmZXJlbmNlcyB0byB0aGUgdmFsdWVzIGluIHRoZSBwcmVmZXJlbmNlcyBzdG9yZS4KLSAgKiovCi0gIHB1YmxpYyB2b2lkIHNldFByZWZlcmVuY2VzKCkKLSAgewotICAgLy8gc2V0RGlhbG9nc1ByZWZlcmVuY2VzKCk7Ci0gIH0KLQotIC8qKgotICAgKiBAc2VlIEFic3RyYWN0VUlQbHVnaW4jaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcwotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcyhJUHJlZmVyZW5jZVN0b3JlIHByZWZlcmVuY2VTdG9yZSkgewotCi0JLy8gU2V0IHRoZSBkZWZhdWx0cyBQcmVmZXJlbmNlCi0vLwlBY3Rpb25EaWFsb2dzUHJlZmVyZW5jZUhlbHBlci5pbml0aWFsaXplRGVmYXVsdHMocHJlZmVyZW5jZVN0b3JlKTsKLSAgfQotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9CVUNvbmZpZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQlVDb25maWdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOGVmNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9CVUNvbmZpZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIEJVQ29uZmlnQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQlwdWJsaWMgQlVDb25maWdDb21tYW5kKCkgewotCX0KLQotCS8qCi0JICogVGhlIGV4ZWN1dGUgbWV0aG9kIG9mIHRoaXMgY29tbWFuZCBkbyBub3RoaW5nLiAgSXQgaXMgbWVyZWx5IGFuIGFuY2hvciBwb2ludCBmb3IgVUkgcGFnZQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkgewotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQmFja3VwU2tlbEltcGxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0JhY2t1cFNrZWxJbXBsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzA2MzIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQmFja3VwU2tlbEltcGxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzMwIDEyODgyNyAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQwMyAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjQgMTI3MzQzICAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDExNiAxNjkxMzggICBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24JCi0gKiAyMDA3MDgxNSAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTExMyAgIDIwOTA3NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLlBsYXRmb3JtVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLXB1YmxpYyBjbGFzcyBCYWNrdXBTa2VsSW1wbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTVBMID0gIkltcGwiOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERPVCA9ICIuIjsJLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBID0gImphdmEiOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsgCi0gIAotICBwcml2YXRlIFdlYlNlcnZpY2VJbmZvIHdlYlNlcnZpY2VJbmZvOwotCi0gIHB1YmxpYyBCYWNrdXBTa2VsSW1wbENvbW1hbmQoICkgewotICB9Ci0gIAotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0JICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLQkgIHsKLQkJICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgIHJldHVybiBzdGF0dXM7Ci0JICB9Ci0JICAKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIC8vIFJlYWQgV1NETAotCSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQkgIFN0cmluZyB3c2RsVVJMID0gamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpOwotCSAgdHJ5Ci0JICB7Ci0JCSAgVVJMIHVybCA9IG5ldyBVUkwod3NkbFVSTCk7Ci0JCSAgZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHVybC50b1N0cmluZygpKTsKLQkgIH0KLQkgIGNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCSAgewotCQkgIHdzZGxVUkwgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChuZXcgUGF0aCh3c2RsVVJMKSk7Ci0JCSAgZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotCSAgfQotCSAgCi0JICAvLyBDb21wdXRlIHRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgSmF2YSBiZWFuIHNrZWxldG9uCi0JICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotCSAgUG9ydCBwb3J0ID0gbnVsbDsKLQkgIEFycmF5TGlzdCBpbXBsVVJMTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIGlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJICBTdHJpbmdCdWZmZXIgYmVhbk5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCSAgCi0JCSAgLy9maXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG1hcHBpbmcgZm9yIHRoaXMgbmFtZXNwYWNlIHRvIGEgcGFja2FnZSBuYW1lCi0JCSAgLy9pZiBub3QgdGhlbiBjb21wdXRlIHBhY2thZ2UgbmFtZSBmcm9tIG5hbWVzcGFjZQotCQkgIFN0cmluZyBiZWFuUGFja2FnZU5hbWUgPSBudWxsOwotCQkgIE1hcCBtYXBwaW5ncyA9IGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKTsKLQkJICBpZiAobWFwcGluZ3MgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJICBiZWFuUGFja2FnZU5hbWUgPSAoU3RyaW5nKW1hcHBpbmdzLmdldCh0YXJnZXROYW1lc3BhY2UpOwotCQkgIH0KLQkJICBpZiAoYmVhblBhY2thZ2VOYW1lID09IG51bGwpCi0JCSAgewotCQkJICBiZWFuUGFja2FnZU5hbWUgPSBXU0RMVXRpbHMuZ2V0UGFja2FnZU5hbWUoZGVmaW5pdGlvbik7Ci0JCSAgfQkJICAKLQkJICAKLQkJICBqYXZhV1NETFBhcmFtLnNldEJlYW5QYWNrYWdlKGJlYW5QYWNrYWdlTmFtZSk7CQkgIAotCQkgIGJlYW5OYW1lLmFwcGVuZChiZWFuUGFja2FnZU5hbWUpOwotCQkgIGJlYW5OYW1lLmFwcGVuZChET1QpOwotCQkgIAotCQkgIHNlcnZpY2UgPSAoU2VydmljZSkgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCQkgIHBvcnQgPSAoUG9ydCkgc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCQkgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCQkgIAotCQkgIFN0cmluZyBxTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsJCSAgCi0JCSAgYmVhbk5hbWUuYXBwZW5kKHFOYW1lLnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkpOy8vRml4IGZvciBidWcgMTY5MTM4LCBuZWVkIHRvIGVuc3VyZSBmaXJzdCBjaGFyIGlzIHVwcGVyY2FzZQotCQkgIGJlYW5OYW1lLmFwcGVuZChxTmFtZS5zdWJzdHJpbmcoMSkpOwotCi0JCSAgYmVhbk5hbWUuYXBwZW5kKElNUEwpOwotCQkgIFN0cmluZyBiZWFuTmFtZVN0cmluZyA9IGJlYW5OYW1lLnRvU3RyaW5nKCk7Ci0JCSAgamF2YVdTRExQYXJhbS5zZXRCZWFuTmFtZShiZWFuTmFtZVN0cmluZyk7Ci0JCSAgCi0JCSAgLy8gRGVmZWN0IDIwOTA3NSAtIERvIG5vdCBiYWNrIHVwIGFueW1vcmUgc2luY2Ugc2tlbGV0b24gbWVyZ2UgaXMgZGVmYXVsdGVkIHRvIG9uLgotCQkgIAotCQkgIFN0cmluZyBiZWFuTmFtZVBhdGhTdHJpbmcgPSBiZWFuTmFtZVN0cmluZy5yZXBsYWNlKCcuJyxJUGF0aC5TRVBBUkFUT1IpOwotCQkgIElQYXRoIHNrZWxJbXBsUGF0aCA9IG5ldyBQYXRoIChqYXZhV1NETFBhcmFtLmdldEphdmFPdXRwdXQoKSkuYXBwZW5kKG5ldyBQYXRoIChiZWFuTmFtZVBhdGhTdHJpbmcpKS5hZGRGaWxlRXh0ZW5zaW9uKEpBVkEpOwotCQkgIAotCQkgIC8vIHN0b3JlIHRoZSBuYW1lIG9mIHRoZSBpbXBsVVJMCi0JCSAgU3RyaW5nIGltcGxVUkxTdHJpbmc7Ci0JCSAgdHJ5IHsKLQkJCSAgaW1wbFVSTFN0cmluZyA9IHNrZWxJbXBsUGF0aC50b0ZpbGUoKS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0JCSAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUxKSB7Ci0JCQkgIGltcGxVUkxTdHJpbmcgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChza2VsSW1wbFBhdGgpOwotCQkgIH0KLQkJICBpbXBsVVJMTGlzdC5hZGQoIGltcGxVUkxTdHJpbmcgKTsKLQkJICAKLQkJICBTdHJpbmdbXSBpbXBsVVJMQXJyYXkgPSBuZXcgU3RyaW5nW2ltcGxVUkxMaXN0LnNpemUoKV07Ci0JCSAgd2ViU2VydmljZUluZm8uc2V0SW1wbFVSTHMoIChTdHJpbmdbXSkgKGltcGxVUkxMaXN0LnRvQXJyYXkoaW1wbFVSTEFycmF5KSkpOwotCi0JICB9IAotCSAgZWxzZSB7Ci0JCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfTk9fREVGSU5JVElPTiwgbmV3IFN0cmluZ1tdIHt3c2RsVVJMfSkpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgfSAgCi0JICAKLQkgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLSAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0gICAgdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLQotcHVibGljIHZvaWQgc2V0V2ViU2VydmljZUluZm8oV2ViU2VydmljZUluZm8gd2ViU2VydmljZUluZm8pIHsKLQl0aGlzLndlYlNlcnZpY2VJbmZvID0gd2ViU2VydmljZUluZm87Ci19Ci0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNTYzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyNCAgIDEyODYwMSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5DbGFzc3BhdGhVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuUGxhdGZvcm1VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV8gPSBudWxsOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nIGphdmFCZWFuTmFtZV87IC8vIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGJ5IHRoZSBleHRlbnNpb24gd2l0aCBpbml0aWFsIHNlbGVjdGlvbgotCXByaXZhdGUgU3RyaW5nIFdTRExTZXJ2aWNlVVJMXzsKLQlwcml2YXRlIFN0cmluZyBXU0RMU2VydmljZVBhdGhuYW1lXzsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIFdTUGFyc2VyXzsKLSAgICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLQkKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUiA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzLyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0VYVCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBieXRlIE1PREVfQkVBTiA9IChieXRlKSAwOwotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9OQU1FX0VYVCA9ICJTZXJ2aWNlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFRFTVBfVVJJID0gImh0dHA6Ly90ZW1wdXJpLm9yZy8iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsKLQotCXB1YmxpYyBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCggKSAKLQl7Ci0JfQotCQotCi0JLyoqCi0JKiBFeGVjdXRlIERlZmF1bHRzRm9ySmF2YVRvV1NETFRhc2sKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkJSVN0YXR1cyBzdGF0dXM7Ci0JCWlmIChqYXZhV1NETFBhcmFtXyA9PSBudWxsKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJCi0JCWlmIChqYXZhQmVhbk5hbWVfID09IG51bGwpIHsgIC8vIGVpdGhlciBzZXQgYnkgZXh0ZW5zaW9uIHBvaW50IG9yIGJlYW4gY2xhc3MgcGFnZQotCQkJamF2YUJlYW5OYW1lXyA9IGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCk7Ci0JCQlpZiAoamF2YUJlYW5OYW1lXyA9PSBudWxsKSB7Ci0JCQkJLy9ybSBqYXZhQmVhbk5hbWVfID0gaXNkRWxlbWVudC5nZXRKYXZhQmVhbk5hbWUoKTsKLQkJCQlqYXZhV1NETFBhcmFtXy5zZXRCZWFuTmFtZShqYXZhQmVhbk5hbWVfKTsKLQkJCX0KLQkJfQotCQkvLyBybSBXU1BhcnNlcl8gPQkoV2ViU2VydmljZXNQYXJzZXIpIHdzZV8uZ2V0V1NQYXJzZXIoKTsKLQkJCi0JCWphdmFXU0RMUGFyYW1fLnNldFNlcnZlclNpZGUoSmF2YVdTRExQYXJhbWV0ZXIuU0VSVkVSX1NJREVfQkVBTik7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFNrZWxldG9uRGVwbG95KGZhbHNlKTsKLQotCQlqYXZhV1NETFBhcmFtXy5zZXRCZWFuTmFtZShqYXZhQmVhbk5hbWVfKTsKLQkJU3RyaW5nIGNsYXNzcGF0aCA9IENsYXNzcGF0aFV0aWxzLmdldEluc3RhbmNlKCkuZ2V0Q2xhc3NwYXRoU3RyaW5nKHNlcnZpY2VQcm9qZWN0Xyk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldENsYXNzcGF0aChjbGFzc3BhdGgpOwotCi0JCVN0cmluZyBzaW1wbGVCZWFuTmFtZSA9IGphdmFCZWFuTmFtZV87Ci0JCWlmIChqYXZhQmVhbk5hbWVfICE9IG51bGwpIHsKLQkJCWludCBpbmRleCA9IGphdmFCZWFuTmFtZV8ubGFzdEluZGV4T2YoJy4nKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCXNpbXBsZUJlYW5OYW1lID0gamF2YUJlYW5OYW1lXy5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgbmFtZXNwYWNlID0gV1NETFV0aWxzLm1ha2VOYW1lc3BhY2UoamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldFBvcnRUeXBlTmFtZShzaW1wbGVCZWFuTmFtZSk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFNlcnZpY2VOYW1lKHNpbXBsZUJlYW5OYW1lICsgU0VSVklDRV9OQU1FX0VYVCk7Ci0KLQkJSVBhdGggbW9kdWxlU2VydmVyUm9vdCA9IG51bGw7Ci0KLQkJSVBhdGggbW9kdWxlUGF0aCA9IHNlcnZpY2VQcm9qZWN0Xy5nZXRGdWxsUGF0aCgpOwotCQlJUGF0aCB3ZWJpbmZQYXRoID0gc2VydmljZVByb2plY3RfLmdldEZ1bGxQYXRoKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHNlcnZpY2VQcm9qZWN0XykpewotCQkJCW1vZHVsZVNlcnZlclJvb3QgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbihzZXJ2aWNlUHJvamVjdF8pOwotCQkJCW1vZHVsZVBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgoc2VydmljZVByb2plY3RfKTsKLQkJCQl3ZWJpbmZQYXRoID0gSjJFRVV0aWxzLmdldFdlYkluZlBhdGgoIHNlcnZpY2VQcm9qZWN0XyApOwkJCQkKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9ICBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfREVGQVVMVF9CRUFOLCBlICk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlJUGF0aCB3c2RsUGF0aCA9Ci0JCQltb2R1bGVQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikuYXBwZW5kKHNpbXBsZUJlYW5OYW1lKS5hZGRGaWxlRXh0ZW5zaW9uKFdTRExfRVhUKTsKLQotCQl0cnl7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZvbGRlcihtb2R1bGVQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikpOwotCQkJRmlsZVV0aWwuY3JlYXRlRm9sZGVyKGZvbGRlciwgdHJ1ZSwgdHJ1ZSk7Ci0JCQotCQl9Ci0JCWNhdGNoKENvcmVFeGNlcHRpb24gZSl7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NETCwgZSApOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCQotCQlTdHJpbmcgd3NkbExvY2F0aW9uID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZSh3c2RsUGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dFdzZGxMb2NhdGlvbih3c2RsTG9jYXRpb24pOwotCQlqYXZhV1NETFBhcmFtXy5zZXRJbnB1dFdzZGxMb2NhdGlvbihuZXcgRmlsZSh3c2RsTG9jYXRpb24pLnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCVdTRExTZXJ2aWNlUGF0aG5hbWVfID0gd3NkbFBhdGgudG9TdHJpbmcoKTsKLQotCQlpZiAod3NkbFBhdGggIT0gbnVsbCkgewotCQkJU3RyaW5nIHdzZGxVUkwgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChuZXcgUGF0aCh3c2RsTG9jYXRpb24pKTsKLQkJCVdTRExTZXJ2aWNlVVJMXyA9IHdzZGxVUkw7Ci0JCQkvLyBzZXQgcGFyc2VyIAotCQkJaWYgKHdzZGxVUkwgPT0gbnVsbCB8fCB3c2RsVVJMLmxlbmd0aCgpIDw9IDApIHsKLQkJCQlJUmVzb3VyY2UgcmVzID0KLQkJCQkJUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoV1NETFNlcnZpY2VQYXRobmFtZV8pOwotCQkJCWlmIChyZXMgIT0gbnVsbCkKLQkJCQkJd3NkbFVSTCA9IChuZXcgVXRpbHMoKSkudG9GaWxlU3lzdGVtVVJJKHJlcyk7Ci0JCQl9Ci0JCQlpZiAod3NkbFVSTCAhPSBudWxsICYmIHdzZGxVUkwubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJaWYgKFdTUGFyc2VyXyA9PSBudWxsKSB7Ci0JCQkJCVdTUGFyc2VyXyA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWphdmFXU0RMUGFyYW1fLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1dSQVBQRUQpOwotCQlqYXZhV1NETFBhcmFtXy5zZXRVc2UoSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0xJVEVSQUwpOwotCi0gICAgICAgIFN0cmluZyBwcm9qZWN0VVJMID0gbnVsbDsKLSAgICAgICAgaWYgKHNlcnZpY2VTZXJ2ZXJUeXBlSURfICE9IG51bGwgJiYgc2VydmljZVNlcnZlclR5cGVJRF8ubGVuZ3RoKCk+MCkKLSAgICAgICAgewotCQkgIHByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0Xywgc2VydmljZVNlcnZlclR5cGVJRF8sIHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGlmIChwcm9qZWN0VVJMID09IG51bGwpIC8vIGVpdGhlciBubyBzZXJ2ZXIgdHlwZSBkZWZpbmVkIG9yIHNlcnZlciBub3QgYWJsZSB0byBnZXQgcHJvamVjdCBVUkwKLSAgICAgICAgeyAKLSAgICAgICAgICBwcm9qZWN0VVJMID0gVEVNUF9VUkkgKyBzZXJ2aWNlUHJvamVjdF8uZ2V0TmFtZSgpOyAKLSAgICAgICAgICBqYXZhV1NETFBhcmFtXy5zZXRHdWVzc1Byb2plY3RVUkwodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgamF2YVdTRExQYXJhbV8uc2V0UHJvamVjdFVSTChwcm9qZWN0VVJMKTsKLQkJU3RyaW5nIHNlcnZpY2VVUkwgPSBwcm9qZWN0VVJMICsgU0VSVklDRV9FWFQgKyBzaW1wbGVCZWFuTmFtZTsKLQkJamF2YVdTRExQYXJhbV8uc2V0VXJsTG9jYXRpb24oc2VydmljZVVSTCk7Ci0JCQotCQlqYXZhV1NETFBhcmFtXy5zZXRNZXRhSW5mT25seSh0cnVlKTsKLQotCQlTdHJpbmcgamF2YU91dHB1dCA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKG1vZHVsZVNlcnZlclJvb3QpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkKLQkJU3RyaW5nIHNlcnZpY2VOYW1lID0gamF2YVdTRExQYXJhbV8uZ2V0U2VydmljZU5hbWUoKTsKLQkJSVBhdGggb3V0cHV0UGF0aCA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdlYmluZlBhdGgpLmdldExvY2F0aW9uKCk7Ci0JCVN0cmluZyBvdXRwdXQgPSBzZXJ2aWNlUHJvamVjdF8uZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQlpZiAob3V0cHV0UGF0aCE9bnVsbCkKLQkJIG91dHB1dCA9IG91dHB1dFBhdGguYXBwZW5kKHNlcnZpY2VOYW1lKS50b1N0cmluZygpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldEphdmFPdXRwdXQoamF2YU91dHB1dCk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dChvdXRwdXQpOwotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkgewotCQl0aGlzLnNlcnZpY2VQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRKYXZhQmVhbk5hbWUoU3RyaW5nIGphdmFCZWFuTmFtZSkgewotCQl0aGlzLmphdmFCZWFuTmFtZV8gPSBqYXZhQmVhbk5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0V1NETFNlcnZpY2VVUkwoKSB7Ci0JCXJldHVybiBXU0RMU2VydmljZVVSTF87Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0V1NETFNlcnZpY2VQYXRobmFtZSgpIHsKLQkJcmV0dXJuIFdTRExTZXJ2aWNlUGF0aG5hbWVfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd3NQYXJzZXIpIHsKLQkJdGhpcy5XU1BhcnNlcl8gPSB3c1BhcnNlcjsKLQl9Ci0JCi0JcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFBhcnNlcigpIHsKLQkJcmV0dXJuIFdTUGFyc2VyXzsKLQl9Ci0KLSAgcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIGlmIChvYmplY3RTZWxlY3Rpb24gIT0gbnVsbCAmJiAhb2JqZWN0U2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gb2JqZWN0U2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgc2V0SmF2YUJlYW5OYW1lKChTdHJpbmcpb2JqZWN0KTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIGlkKQotICB7Ci0gICAgc2VydmljZVNlcnZlclR5cGVJRF8gPSBpZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgZXhpc3RpbmdTZXJ2ZXIpIHsKLQkJc2VydmljZUV4aXN0aW5nU2VydmVyID0gZXhpc3RpbmdTZXJ2ZXI7Ci0JfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svU2tlbGV0b24yV1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svU2tlbGV0b24yV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhmNmM0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1NrZWxldG9uMldTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICogMjAwNzAxMTIgICAxNjU3MjEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTREwgaW1wb3J0IGNhbm5vdCB1c2UgcmVsYXRpdmUgaW1wb3J0IHdpdGggdG8gcGFyZW50IGRpcmVjdG9yaWVzCi0gKiAyMDA3MDEyNSAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKiAyMDA3MDQwOSAgIDE4MTYzNSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETENvcGllciB1dGlsaXR5IHNob3VsZCBjcmVhdGUgdGFyZ2V0IGZvbGRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5QbGF0Zm9ybVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLldTRExDb3BpZXI7Ci0KLXB1YmxpYyBjbGFzcyBTa2VsZXRvbjJXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfRVhUID0gIi9zZXJ2aWNlcy8iOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VYVCA9ICJ3c2RsIjsJLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUiA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0gIHByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRF87ICAKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBURU1QX1VSSSA9ICJodHRwOi8vdGVtcHVyaS5vcmcvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBTa2VsZXRvbjJXU0RMQ29tbWFuZCggKSB7Ci0gIH0KLQotICAvKioKLSAgKiBFeGVjdXRlIFNrZWxldG9uMldTRExDb21tYW5kCi0gICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLQkJewotCQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCi0gIC8vIFJlYWQgV1NETAotICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCVN0cmluZyB3c2RsVVJMID0gamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpOwotCXRyeQotCXsKLQkJVVJMIHVybCA9IG5ldyBVUkwod3NkbFVSTCk7Ci0JCWRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih1cmwudG9TdHJpbmcoKSk7Ci0JfQotCWNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCXsKLQkJd3NkbFVSTCA9IFBsYXRmb3JtVXRpbHMuZ2V0RmlsZVVSTEZyb21QYXRoKG5ldyBQYXRoKHdzZGxVUkwpKTsKLQkJZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotCX0KLQotICAgIC8vIENvbXB1dGUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBKYXZhIGJlYW4gc2tlbGV0b24KLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkgewotICAgIAkKLSAgICAJLy8gYmVhbk5hbWUgYW5kIGJlYW5QYWNrYWdlTmFtZSBhcmUgbm93IHNldCBpbiBCYWNrdXBTa2VsSW1wbENvbW1hbmQKLSAgICAJCi0gICAgCXNlcnZpY2UgPSAoU2VydmljZSkgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIAlwb3J0ID0gKFBvcnQpIHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAJCi0gICAgCWphdmFXU0RMUGFyYW0uc2V0UG9ydFR5cGVOYW1lKFdTRExVdGlscy5nZXRQb3J0VHlwZU5hbWUoZGVmaW5pdGlvbikpOwotICAgIAlqYXZhV1NETFBhcmFtLnNldFNlcnZpY2VOYW1lKFdTRExVdGlscy5nZXRTZXJ2aWNlRWxlbWVudE5hbWUoZGVmaW5pdGlvbikpOwotCi0gICAgfSAKLSAgICBlbHNlIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfTk9fREVGSU5JVElPTiwgbmV3IFN0cmluZ1tdIHt3c2RsVVJMfSkpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIC8vIE1vZGlmeSBXU0RMIGVuZHBvaW50Ci0gICAgaWYgKHBvcnQgPT0gbnVsbCkgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9OT19QT1JULCBuZXcgU3RyaW5nW10ge3dzZGxVUkx9KSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIHNlcnZpY2VzSXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBzZXJ2aWNlc0l0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzID0gKFNlcnZpY2Upc2VydmljZXNJdC5uZXh0KCk7Ci0gICAgICBNYXAgcG9ydHMgPSBzLmdldFBvcnRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIHBvcnRzSXQgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBwb3J0c0l0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcCA9IChQb3J0KXBvcnRzSXQubmV4dCgpOwotICAgICAgICBtb2RpZnlFbmRwb2ludChwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgV1NETCBmaWxlIG5hbWU6IGphdmFXU0RMUGFyYW0uc2V0T3V0cHV0V3NkbExvY2F0aW9uKCk7Ci0gICAgSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQotICAgIFN0cmluZyB3c2RsTG9jYXRpb24gPSBqYXZhV1NETFBhcmFtLmdldE91dHB1dFdzZGxMb2NhdGlvbigpOwotICAgIElQYXRoIHdzZGxQYXRoID0gbnVsbDsKLSAgICBJRmlsZSBvdXRwdXRGaWxlID0gbnVsbDsKLSAgICB0cnkgewotICAgICBpZih3c2RsTG9jYXRpb24gIT0gbnVsbCl7Ci0JCW91dHB1dEZpbGUgPSB3b3Jrc3BhY2UuZ2V0RmlsZUZvckxvY2F0aW9uKCBuZXcgUGF0aCh3c2RsTG9jYXRpb24pKTsKLSAgICAgfQotICAgICBlbHNlewotLy8JCXdzZGxQYXRoID0gc2VydmVyUHJvamVjdC5nZXRGdWxsUGF0aCgpOwotLy8JCQotLy8JCWlmIChzZXJ2ZXJQcm9qZWN0Lmhhc05hdHVyZShJV2ViTmF0dXJlQ29uc3RhbnRzLkoyRUVfTkFUVVJFX0lEKSkgewotLy8JCQkgICBKMkVFV2ViTmF0dXJlUnVudGltZSB3ZWJQcm9qZWN0ID0KLS8vCQkJCSAoSjJFRVdlYk5hdHVyZVJ1bnRpbWUpIHNlcnZlclByb2plY3QuZ2V0TmF0dXJlKAotLy8JCQkJICAgSVdlYk5hdHVyZUNvbnN0YW50cy5KMkVFX05BVFVSRV9JRCk7Ci0vLwkJCSAgIHdzZGxQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKCBzZXJ2ZXJQcm9qZWN0LCBtb2R1bGVOYW1lXyApOwotLy8JCQkgICAvL3dzZGxQYXRoID0gd3NkbFBhdGguYXBwZW5kKHdlYlByb2plY3QuZ2V0V0VCSU5GUGF0aCgpKTsKLS8vCQkJIH0KLS8vCQllbHNlIGlmIChzZXJ2ZXJQcm9qZWN0Lmhhc05hdHVyZShJRUpCTmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCkpCi0vLwkJewotLy8JCQlFSkJOYXR1cmVSdW50aW1lIGVqYlByb2plY3QgPSBFSkJOYXR1cmVSdW50aW1lLmdldFJ1bnRpbWUoc2VydmVyUHJvamVjdCk7Ci0vLwkJCXdzZGxQYXRoID0gd3NkbFBhdGguYXBwZW5kKGVqYlByb2plY3QuZ2V0TWV0YUZvbGRlcigpLmdldFByb2plY3RSZWxhdGl2ZVBhdGgoKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpKTsKLS8vCQl9CQkKLS8vIFRPRE86ICBoYW5kbGUgRUpCIGNhc2UKLQkJICAgICB3c2RsUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aCggc2VydmVyUHJvamVjdCApOwotCQkJIElQYXRoIHdzZGxGaWxlUGF0aCA9IHdzZGxQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikuYXBwZW5kKHBvcnQuZ2V0TmFtZSgpKS5hZGRGaWxlRXh0ZW5zaW9uKFdTRExfRVhUKTsKLQkJICAgICBJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlVXRpbHMKLQkJCQkJCQkJLmdldFdvcmtzcGFjZVJvb3QoKQotCQkJCQkJCQkuZ2V0Rm9sZGVyKHdzZGxQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikpOwotCQkJIEZpbGVVdGlsLmNyZWF0ZUZvbGRlcihmb2xkZXIsIHRydWUsIHRydWUpOwkKLQkJICAgICBvdXRwdXRGaWxlID0gd29ya3NwYWNlLmdldEZpbGUod3NkbEZpbGVQYXRoKTsKLQkJCSB3c2RsTG9jYXRpb24gPSBvdXRwdXRGaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJCSBqYXZhV1NETFBhcmFtLnNldE91dHB1dFdzZGxMb2NhdGlvbih3c2RsTG9jYXRpb24pOwotCQkJIAotICAgICB9Ci0KLSAgICAgU3RyaW5nIGZvbGRlciAgID0gb3V0cHV0RmlsZS5nZXRQYXJlbnQoKS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgU3RyaW5nIGZpbGVuYW1lID0gb3V0cHV0RmlsZS5nZXROYW1lKCk7Ci0JCi0gICAgIFdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIod2ViU2VydmljZXNQYXJzZXIpOwotICAgICBjb3BpZXIuc2V0U291cmNlVVJJKHdzZGxVUkwsIGRlZmluaXRpb24pOwotICAgICBjb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlcik7Ci0gICAgIGNvcGllci5zZXRUYXJnZXRGaWxlbmFtZShmaWxlbmFtZSk7Ci0JCi0gICAgIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbW9uaXRvcik7Ci0JCi0gICAgIFN0cmluZyBuZXdQYXRoID0gb3V0cHV0RmlsZS5nZXRQYXJlbnQoKS5nZXRMb2NhdGlvbigpLmFwcGVuZChjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkpLnRvU3RyaW5nKCk7Ci0gICAgIGphdmFXU0RMUGFyYW0uc2V0T3V0cHV0V3NkbExvY2F0aW9uKG5ld1BhdGgpOyAgICAgCi0gICAgfSAKLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTREwsIG5ldyBTdHJpbmdbXSB7IHdzZGxMb2NhdGlvbiB9KSwgZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHJpdmF0ZSBJU3RhdHVzIG1vZGlmeUVuZHBvaW50KFBvcnQgcG9ydCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gbnVsbDsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpdC5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB7Ci0gICAgICAgIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKW9iajsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChzb2FwQWRkcmVzcyAhPSBudWxsKQotICAgIHsKLSAgICAgIAotICAgICAgU3RyaW5nIHByb2plY3RVUkwgPSBudWxsOwotICAgICAgaWYgKHNlcnZpY2VTZXJ2ZXJUeXBlSURfICE9IG51bGwgJiYgc2VydmljZVNlcnZlclR5cGVJRF8ubGVuZ3RoKCk+MCkKLSAgICAgIHsKLQkgICAgcHJvamVjdFVSTCA9IFNlcnZlclV0aWxzLmdldEVuY29kZWRXZWJDb21wb25lbnRVUkwoc2VydmVyUHJvamVjdCwgc2VydmljZVNlcnZlclR5cGVJRF8sIHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChwcm9qZWN0VVJMID09IG51bGwpIC8vIGVpdGhlciBubyBzZXJ2ZXIgdHlwZSBkZWZpbmVkIG9yIHNlcnZlciBub3QgYWJsZSB0byBnZXQgcHJvamVjdCBVUkwKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdFVSTCA9IFRFTVBfVVJJICsgc2VydmVyUHJvamVjdC5nZXROYW1lKCk7IAotICAgICAgICBqYXZhV1NETFBhcmFtLnNldEd1ZXNzUHJvamVjdFVSTCh0cnVlKTsKLSAgICAgIH0KLSAgICAgIGphdmFXU0RMUGFyYW0uc2V0UHJvamVjdFVSTChwcm9qZWN0VVJMKTsKLSAgICAgIFN0cmluZ0J1ZmZlciBzZXJ2aWNlVVJMID0gbmV3IFN0cmluZ0J1ZmZlcihwcm9qZWN0VVJMKTsKLSAgICAgIHNlcnZpY2VVUkwuYXBwZW5kKFNFUlZJQ0VfRVhUKS5hcHBlbmQocG9ydC5nZXROYW1lKCkpOwotICAgICAgamF2YVdTRExQYXJhbS5zZXRVcmxMb2NhdGlvbihzZXJ2aWNlVVJMLnRvU3RyaW5nKCkpOwotICAgICAgc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoc2VydmljZVVSTC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHJldHVybiBKYXZhV1NETFBhcmFtZXRlcgotICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotICAgIHRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHNlcnZlclByb2plY3QgVGhlIHNlcnZlclByb2plY3QgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChJUHJvamVjdCBzZXJ2ZXJQcm9qZWN0KSB7Ci0gICAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gc2VydmVyUHJvamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0gIAlGaWxlIGZpbGUgPSBuZXcgRmlsZShnZXRKYXZhV1NETFBhcmFtKCkuZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCkpOyAKLSAgICBTdHJpbmcgdXJsID0gIiI7Ci0JICB0cnkgewotICAgIAl1cmwgPSBmaWxlLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICB9Ci0JICBjYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKXt9Ci0JcmV0dXJuIHVybDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgaWQpCi0gIHsKLSAgICBzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IGlkOwotICB9Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihJU2VydmVyIGV4aXN0aW5nU2VydmVyKSB7Ci0Jc2VydmljZUV4aXN0aW5nU2VydmVyID0gZXhpc3RpbmdTZXJ2ZXI7Ci19ICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9URENvbmZpZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svVERDb25maWdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNDEyZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9URENvbmZpZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFREQ29uZmlnQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICBwdWJsaWMgVERDb25maWdDb21tYW5kKCkgCi0gIHsKLSAgfQotICAKLSAgLyoKLSAgICogVGhlIGV4ZWN1dGUgbWV0aG9kIG9mIHRoaXMgY29tbWFuZCBkbyBub3RoaW5nLiAgSXQgaXMgbWVyZWx5IGFuIGFuY2hvciBwb2ludCBmb3IgVUkgcGFnZQotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSB7Ci0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9VcGRhdGVBeGlzV1NEREZpbGVUYXNrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1VwZGF0ZUF4aXNXU0RERmlsZVRhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyNWNiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1VwZGF0ZUF4aXNXU0RERmlsZVRhc2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MTcgICAxMzQxMDQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMDMwICAgMTI4NDE5IGtlbHZpbmhjQGNhLmlibS5jb20gLSBLZWx2aW4gSC4gQ2hldW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFVwZGF0ZUF4aXNXU0RERmlsZVRhc2sgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVQTE9ZX1hTTCA9ICJkZXBsb3kueHNsIjsJLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFUExPWV9CQUsgPSAiZGVwbG95LndzZGQuYmFrIjsJCS8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTEFTU05BTUVfUEFSQU0gPSAibmV3Q2xhc3NOYW1lIjsJCS8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotICAgIAotCXB1YmxpYyBVcGRhdGVBeGlzV1NEREZpbGVUYXNrKCkgCi0JewotCX0KLQkKLQkvKioKLQkqIEV4ZWN1dGUgVXBkYXRlQXhpc1dTRERGaWxlVGFzawotCSovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsgICAgCi0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsJCQotCQlpZiAoamF2YVdTRExQYXJhbV8gPT0gbnVsbCkgewotCQkgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgIHJldHVybiBzdGF0dXM7CQkgIAotCQl9Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0XzsKLSAgICAgICAgCi0JCVN0cmluZyBvdXRwdXRMb2NhdGlvbiA9IGphdmFXU0RMUGFyYW1fLmdldEphdmFPdXRwdXQoKTsKLQkJaWYgKG91dHB1dExvY2F0aW9uID09IG51bGwpIHsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlTdHJpbmcgd2ViQ29udGVudFBhdGggPQlKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lciggcHJvamVjdCApLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJdHJ5IHsKLQotCQkJaWYgKGphdmFXU0RMUGFyYW1fLmdldERlcGxveW1lbnRGaWxlcygpICE9IG51bGwKLQkJCQkmJiBqYXZhV1NETFBhcmFtXy5nZXREZXBsb3ltZW50RmlsZXMoKS5sZW5ndGggPiAwKSB7Ci0KLQkJCQlTdHJpbmcgd3NkZF9kZXBsb3kgPSBqYXZhV1NETFBhcmFtXy5nZXREZXBsb3ltZW50RmlsZXMoKVswXTsKLQkJCQlJUGF0aCBkZXBsb3lQYXRoID0gbmV3IFBhdGgod3NkZF9kZXBsb3kpOwotCQkJCVN0cmluZyBkZXBsb3lCYWNrdXAgPQotCQkJCQlkZXBsb3lQYXRoCi0JCQkJCQkucmVtb3ZlTGFzdFNlZ21lbnRzKDEpCi0JCQkJCQkuYXBwZW5kKERFUExPWV9CQUspCi0JCQkJCQkudG9TdHJpbmcoKTsKLQkJCQlGaWxlVXRpbC5jcmVhdGVUYXJnZXRGaWxlKHdzZGRfZGVwbG95LCBkZXBsb3lCYWNrdXAsIHRydWUpOwotCi0JCQkJVHJhbnNmb3JtZXJGYWN0b3J5IHRGYWN0b3J5ID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLQkJCQkvLyBVc2UgdGhlIFRyYW5zZm9ybWVyRmFjdG9yeSB0byBpbnN0YW50aWF0ZSBhIFRyYW5zZm9ybWVyIHRoYXQgd2lsbCB3b3JrIHdpdGggIAotCQkJCS8vIHRoZSBzdHlsZXNoZWV0IHlvdSBzcGVjaWZ5LiBUaGlzIG1ldGhvZCBjYWxsIGFsc28gcHJvY2Vzc2VzIHRoZSBzdHlsZXNoZWV0Ci0JCQkJLy8gaW50byBhIGNvbXBpbGVkIFRlbXBsYXRlcyBvYmplY3QuCi0JCQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPQotCQkJCQl0RmFjdG9yeS5uZXdUcmFuc2Zvcm1lcihuZXcgU3RyZWFtU291cmNlKGdldFBsdWdpbkZpbGVBc0lucHV0U3RyZWFtKERFUExPWV9YU0wpKSk7Ci0JCQkJdHJhbnNmb3JtZXIuc2V0UGFyYW1ldGVyKENMQVNTTkFNRV9QQVJBTSwgamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0KLQkJCQkvLyBVc2UgdGhlIFRyYW5zZm9ybWVyIHRvIGFwcGx5IHRoZSBhc3NvY2lhdGVkIFRlbXBsYXRlcyBvYmplY3QgdG8gYW4gWE1MIGRvY3VtZW50Ci0JCQkJLy8gKGZvby54bWwpIGFuZCB3cml0ZSB0aGUgb3V0cHV0IHRvIGEgZmlsZSAoZm9vLm91dCkuCi0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gd3NkZFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCB3c2RkX2RlcGxveSApOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLQkJCQkgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSggbmV3IFN0cmVhbVNvdXJjZShkZXBsb3lCYWNrdXApLCBuZXcgU3RyZWFtUmVzdWx0KHdzZGRTdHJlYW0pICk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgd3NkZFN0cmVhbS5jbG9zZSgpOwotICAgICAgICB9Ci0KLQotICAgICAgICBJUmVzb3VyY2UgZGVwbG95RmlsZSA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlQXRMb2NhdGlvbih3c2RkX2RlcGxveSwgcHJvamVjdCk7Ci0gICAgICAgIGlmKCBkZXBsb3lGaWxlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgIAlkZXBsb3lGaWxlLnJlZnJlc2hMb2NhbCggSVJlc291cmNlLkRFUFRIX1pFUk8sIG1vbml0b3IgKTsKLSAgICAgICAgfQotCi0JCX0KLQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkgICAgU3RyaW5nW10gZXJyb3JNc2dTdHJpbmdzID0gbmV3IFN0cmluZ1tde3Byb2plY3QudG9TdHJpbmcoKSwgb3V0cHV0TG9jYXRpb24udG9TdHJpbmcoKSwgd2ViQ29udGVudFBhdGgudG9TdHJpbmcoKX07IAotCQkgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVVBEQVRFX0FYSVNfV1NERCwgZXJyb3JNc2dTdHJpbmdzKSwgZSk7Ci0JCSAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJICAgIHJldHVybiBzdGF0dXM7CQkgIAkJICAKLQkJfQotCQkKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JCi0JcHJpdmF0ZSBJbnB1dFN0cmVhbSBnZXRQbHVnaW5GaWxlQXNJbnB1dFN0cmVhbShTdHJpbmcgcGx1Z2luZmlsZU5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUlucHV0U3RyZWFtIGlzID0gV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkocGx1Z2luZmlsZU5hbWUpLm9wZW5TdHJlYW0oKTsKLQkJCi0JCQlyZXR1cm4gaXM7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotCQkJCW5ldyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzKAotCQkJCQlJU3RhdHVzLldBUk5JTkcsCi0JCQkJCVdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5JRCwKLQkJCQkJMCwKLQkJCQkJQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfUExVR0lOX0ZJTEVfVVJMLAotCQkJCQllKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0JKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQKLQkqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQlqYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0JfQotCQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLQl7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9CQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpCi0JewotCSAgc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0JfQotCSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yjc5NWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIAotICAvL1Byb3ZpZGUKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0gIHByaXZhdGUgU3RyaW5nIGphdmFCZWFuTmFtZV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyXzsKLSAgcHJpdmF0ZSBib29sZWFuIGZvcmNlQnVpbGRfID0gdHJ1ZTsKLSAgcHJpdmF0ZSBCb29sZWFuIElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQgPSBCb29sZWFuLlRSVUU7IC8vIHJzayByZXZpc2l0Ci0gIHByaXZhdGUgVmFsaWRhdGlvbk1hbmFnZXIgdmFsaWRhdGlvbk1hbmFnZXJfOwotICBwcml2YXRlIGJvb2xlYW4gY3VzdG9taXplU2VydmljZU1hcHBpbmdzXyA9IGZhbHNlOwotICAKLSAgLy9UaGlzIGlzIHByb3h5IGFuZCBjbGllbnQgcmVsYXRlZCBpbmZvcm1hdGlvbgotICAvL3doaWNoIGNhbiBiZSBudWxsZWQgZm9yIGNvbW1hbmRzIGRlYWxpbmcKLSAgLy93aXRoIHNlcnZpY2UgY3JlYXRpb24uCi0gIC8vcnNrIHJldmlzaXQKLSAgcHJpdmF0ZSBCb29sZWFuIGlzUHJveHlQcm9qZWN0XyA9IEJvb2xlYW4uRkFMU0U7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFJ1bnRpbWVJRF8gPSBudWxsOwotICBwcml2YXRlIElQcm9qZWN0IHByb3h5UHJvamVjdF8gPSBudWxsOwotICBwcml2YXRlIElQcm9qZWN0IHNhbXBsZVByb2plY3RfID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEXyA9IG51bGw7Ci0gIHByaXZhdGUgSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcl8gPSBudWxsOwotICAKLSAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0JSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLQkvL2phdmFXU0RMUGFyYW0KLQlqYXZhV1NETFBhcmFtXyA9IG5ldyBKYXZhV1NETFBhcmFtZXRlcigpOwotICAgIAotCWlmIChqYXZhQmVhbk5hbWVfID09IG51bGwpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfTk9fSkFWQV9CRUFOKTsKLQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotICAgIAotICAgIC8vcGFyc2VyCi0gICAgcGFyc2VyXyA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAgIAotICAgIC8vdmFsaWRhdGlvbk1hbmFnZXIKLSAgICB2YWxpZGF0aW9uTWFuYWdlcl8gPSBuZXcgVmFsaWRhdGlvbk1hbmFnZXIoKTsKLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLQkKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UnVudGltZUlEXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUlEKCkKLSAgewotICAgIHJldHVybiBjbGllbnRSdW50aW1lSURfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGZvcmNlQnVpbGRfLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Rm9yY2VCdWlsZCgpCi0gIHsKLSAgICByZXR1cm4gZm9yY2VCdWlsZF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaXNQcm94eVByb2plY3RfLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0SXNQcm94eVByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGlzUHJveHlQcm9qZWN0XzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBqYXZhQmVhbk5hbWVfLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRKYXZhQmVhbk5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGphdmFCZWFuTmFtZV87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbV8uCi0gICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbV87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcGFyc2VyXy4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRQYXJzZXIoKQotICB7Ci0gICAgcmV0dXJuIHBhcnNlcl87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlQcm9qZWN0Xy4KLSAgICovCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm94eVByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHByb3h5UHJvamVjdF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfLgotICAgKi8KLSAgcHVibGljIElTZXJ2ZXIgZ2V0U2FtcGxlRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZUV4aXN0aW5nU2VydmVyXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzYW1wbGVQcm9qZWN0Xy4KLSAgICovCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRTYW1wbGVQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBzYW1wbGVQcm9qZWN0XzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzYW1wbGVTZXJ2ZXJUeXBlSURfLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZVNlcnZlclR5cGVJRF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdmFsaWRhdGlvbk1hbmFnZXJfLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NYW5hZ2VyIGdldFZhbGlkYXRpb25NYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiB2YWxpZGF0aW9uTWFuYWdlcl87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8uCi0gICAqLwotICBwdWJsaWMgSVNlcnZlciBnZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0gIH0KLSAgCi0gCi0gIHB1YmxpYyBib29sZWFuIGdldEN1c3RvbWl6ZVNlcnZpY2VNYXBwaW5ncygpCi0gIHsKLSAgICByZXR1cm4gY3VzdG9taXplU2VydmljZU1hcHBpbmdzXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0SXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCgpCi0gIHsKLSAgICByZXR1cm4gSXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZDsKLSAgfQotCi1wdWJsaWMgdm9pZCBzZXRKYXZhQmVhbk5hbWUoU3RyaW5nIGphdmFCZWFuTmFtZSkgewotCXRoaXMuamF2YUJlYW5OYW1lXyA9IGphdmFCZWFuTmFtZTsKLX0KLSAgCi0vLyAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykKLS8vICB7Ci0vLyAgICBzZXJ2aWNlSWRzXyA9IGlkczsKLS8vICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQmVhbkNvbmZpZ1dpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL0JlYW5Db25maWdXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4ZjcyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQmVhbkNvbmZpZ1dpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyMSAgIDEyODgyNyBqb2FuIC0gSm9hbiBIYWdnYXJ0eSwgcmVtb3ZlIHJlZHVuZGFudCB3c2RsIFVSSSwgZm9sZGVyIGFuZCBmaWxlIGNvbnRyb2xzCi0gKiAyMDA2MDUyNCAgIDEyODYwMSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIEJlYW5Db25maWdXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgCi17Ci0KLSAgcHJpdmF0ZSBCdXR0b24gICBycGNFbmNvZGVkQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gICBycGNMaXRlcmFsQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gICBkb2NMaXRlcmFsQnV0dG9uXzsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotICAKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhUGFyYW1ldGVyXzsKLSAgCi0gIC8qIENPTlRFWFRfSUQgUEJDRjAwMDEgZm9yIHRoZSBCZWFuIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUEJDRl9QQUdFID0gIlBCQ0YwMDAxIjsgLy8kTk9OLU5MUy0xJAotCQotICBwcml2YXRlIFN0cmluZyB3c2RsRm9sZGVyXzsKLSAgCi0gIHByaXZhdGUgVGV4dCB3c2RsRmlsZVRleHRfOwotICAvKiBDT05URVhUX0lEIFBCQ0YwMDA3IGZvciB0aGUgV1NETCBGaWxlIGZpZWxkIG9mIHRoZSBCZWFuIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUEJDRl9URVhUX1dTRExfRklMRSA9ICJQQkNGMDAwNyI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJpdmF0ZSBUcmVlIG1ldGhvZHNUcmVlXzsKLSAgLyogQ09OVEVYVF9JRCBQQk1FMDAwMiBmb3IgdGhlIE1ldGhvZHMgdHJlZSBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX1RSRUVfTUVUSE9EUyA9ICJQQk1FMDAwMiI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJpdmF0ZSBCdXR0b24gc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl87Ci0gIC8qIENPTlRFWFRfSUQgUEJNRTAwMTAgZm9yIHRoZSBTZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX0JVVFRPTl9TRUxFQ1RfQUxMID0gIlBCTUUwMDEwIjsgLy8kTk9OLU5MUy0xJAotCQotICBwcml2YXRlIEJ1dHRvbiBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fOwotICAvKiBDT05URVhUX0lEIFBCTUUwMDExIGZvciB0aGUgRGVzZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEwgPSAiUEJNRTAwMTEiOyAvLyROT04tTkxTLTEkCi0JCi0gIHByaXZhdGUgQnV0dG9uIHNob3dNYXBwaW5nc0NoZWNrYm94XzsKLSAgLyogQ09OVEVYVF9JRCBQQkNGMDAxNiBmb3IgdGhlIFNob3cgTWFwcGluZ3MgY2hlY2tib3ggb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlICovICAgCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUDJOX1NIT1dfTUFQUElOR1MgPSAiUEJDRjAwMTYiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotCVN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiOwkgIAotCi0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgICAgICAgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotICAgIFVJVXRpbHMgICAgICBiYXNlQ29uVWlVdGlscyA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsKLSAgICAKLSAgICBzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsgICAgCi0JcGFyZW50LnNldFRvb2xUaXBUZXh0KCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJDRl9QQUdFICApOwotCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QQkNGX1BBR0UgKTsKLSAgICAKLSAgICBDb21wb3NpdGUgY29uZmlnR3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAyICk7ICAgIAotICAgIAotICAgIHdzZGxGaWxlVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGNvbmZpZ0dyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLkxBQkVMX09VVFBVVF9GSUxFX05BTUUsCi0gICAgCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJDRl9URVhUX1dTRExfRklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCQ0ZfVEVYVF9XU0RMX0ZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgICk7Ci0gICAgd3NkbEZpbGVUZXh0Xy5hZGRMaXN0ZW5lciggU1dULk1vZGlmeSwgc3RhdHVzTGlzdGVuZXIgKTsKLSAgICAKLSAgICAvLyBUT0RPIHRoaXMgZ3JvdXAgaGFzIG5vIFRPT0xUSVAgb3IgSU5GT1BPUC4KLSAgICBHcm91cCAgICBtZXRob2RzR3JvdXAgPSBiYXNlQ29uVWlVdGlscy5jcmVhdGVHcm91cCggcGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfTUVUSE9EUywgbnVsbCwgbnVsbCApOwotCW1ldGhvZHNHcm91cC5zZXRMYXlvdXREYXRhKCB1aVV0aWxzLmNyZWF0ZUZpbGxBbGwoKSApOwotCQotCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCW1ldGhvZHNHcm91cC5zZXRMYXlvdXQoIGxheW91dCApOwotCQotCW1ldGhvZHNUcmVlXyA9IHVpVXRpbHMuY3JlYXRlVHJlZSggbWV0aG9kc0dyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJNRV9UUkVFX01FVEhPRFMsIAotCQkJCQkJCQkJCUlORk9QT1BfUEJNRV9UUkVFX01FVEhPRFMsCi0JICAgICAgICAgICAgICAgICAgIAkJCQkgICBTV1QuTVVMVEkgfCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMCXwgU1dULkNIRUNLICk7Ci0JbWV0aG9kc1RyZWVfLmFkZExpc3RlbmVyKCBTV1QuU2VsZWN0aW9uLCBzdGF0dXNMaXN0ZW5lciApOwotCi0gICAgQ29tcG9zaXRlIHNlbGVjdEJ1dHRvbnMgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggbWV0aG9kc0dyb3VwLCAyICk7Ci0gICAgCi0gICAgc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8gCi0gICAgICA9IGJhc2VDb25VaVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHNlbGVjdEJ1dHRvbnMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fU0VMRUNUX0FMTCwgCi0gICAgCQkgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QQk1FX0JVVFRPTl9TRUxFQ1RfQUxMICk7Ci0gICAgc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBbGwoIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIGRlc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8gCi0gICAgICA9IGJhc2VDb25VaVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHNlbGVjdEJ1dHRvbnMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fREVTRUxFQ1RfQUxMLCAKLSAgICAJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJNRV9CVVRUT05fREVTRUxFQ1RfQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJNRV9CVVRUT05fREVTRUxFQ1RfQUxMICk7Ci0gICAgZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWxsKCBmYWxzZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIC8vIFRPRE8gdGhpcyBncm91cCBoYXMgbm8gVE9PTFRJUCBvciBJTkZPUE9QLgotICAgIEdyb3VwIHN0eWxlR3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUdyb3VwKCBwYXJlbnQsIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RZTEVfVVNFLCBudWxsLCBudWxsICk7Ci0gICAgCi0gICAgLy8gVE9ETyByYWRpbyBidXR0b25zIGhhdmUgbm8gVE9PTFRJUCBvciBJTkZPUE9QLgotICAgIGRvY0xpdGVyYWxCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbiggc3R5bGVHcm91cCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5TVFlMRV9ET0NfTElURVJBTCwgbnVsbCwgbnVsbCApOwotICAgIHJwY0xpdGVyYWxCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbiggc3R5bGVHcm91cCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5TVFlMRV9SUENfTElURVJBTCwgbnVsbCwgbnVsbCApOwotICAgIHJwY0VuY29kZWRCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbiggc3R5bGVHcm91cCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5TVFlMRV9SUENfRU5DT0RFRCwgbnVsbCwgbnVsbCApOwotICAgIAotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94XyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3goIHBhcmVudCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5MQUJFTF9FWFBMT1JFX01BUFBJTkdTX0JFQU4yWE1MLAotICAgIAkJQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5UT09MVElQX1AyTl9TSE9XX01BUFBJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUDJOX1NIT1dfTUFQUElOR1MgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVNlbGVjdEFsbCggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLQlUcmVlSXRlbVtdIGl0ZW1zID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0JCi0JZm9yKCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyApIAotCXsKLQkgIGl0ZW1zW2ldLnNldENoZWNrZWQodmFsdWUpOwotCX0KLQkKLQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQoIG51bGwgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q3VzdG9taXplU2VydmljZU1hcHBpbmdzKCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIHZhbHVlICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEN1c3RvbWl6ZVNlcnZpY2VNYXBwaW5ncygpCi0gIHsKLSAgICByZXR1cm4gc2hvd01hcHBpbmdzQ2hlY2tib3hfID09IG51bGwgPyBmYWxzZSA6IHNob3dNYXBwaW5nc0NoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SmF2YVBhcmFtZXRlciggSmF2YVdTRExQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciApCi0gIHsKLSAgICBqYXZhUGFyYW1ldGVyXyA9IGphdmFQYXJhbWV0ZXI7Ci0gICAgCi0JU3RyaW5nIHdzZGxMb2NhdGlvbiA9IGphdmFQYXJhbWV0ZXIuZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCk7Ci0JSVBhdGggd3NkbFBhdGggPSBuZXcgUGF0aCggd3NkbExvY2F0aW9uICk7Ci0JCi0Jd3NkbEZvbGRlcl8gPSB3c2RsUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSkudG9TdHJpbmcoKTsgICAgCi0Jd3NkbEZpbGVUZXh0Xy5zZXRUZXh0KHdzZGxQYXRoLmxhc3RTZWdtZW50KCkpOwotICAgIAotCW1ldGhvZHNUcmVlXy5yZW1vdmVBbGwoKTsKLQlIYXNodGFibGUgbWV0aG9kcyA9IGphdmFQYXJhbWV0ZXIuZ2V0TWV0aG9kcygpOwotCUVudW1lcmF0aW9uIGUgPSBtZXRob2RzLmtleXMoKTsKLQkKLQl3aGlsZSggZS5oYXNNb3JlRWxlbWVudHMoKSApCi0JewotCSAgU3RyaW5nICAgbmFtZSA9IChTdHJpbmcpIGUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFRyZWVJdGVtIGl0ZW0gPSBuZXcgVHJlZUl0ZW0obWV0aG9kc1RyZWVfLCBTV1QuTlVMTCk7Ci0gICAgICAKLSAgIAkgIGl0ZW0uc2V0RGF0YShuYW1lKTsKLSAgICAgIGl0ZW0uc2V0VGV4dChuYW1lKTsKLSAgICAgIGl0ZW0uc2V0Q2hlY2tlZCgoKChCb29sZWFuKSBtZXRob2RzLmdldChuYW1lKSkuYm9vbGVhblZhbHVlKCkpKTsKLQl9Ci0JCi0JVHJlZUl0ZW1bXSBpdGVtcyA9IG1ldGhvZHNUcmVlXy5nZXRJdGVtcygpOwotCQotCWlmKCBpdGVtcy5sZW5ndGggPiAwICkgCi0JewotCSAgbWV0aG9kc1RyZWVfLnNldFNlbGVjdGlvbiggbmV3IFRyZWVJdGVtW117IGl0ZW1zWzBdIH0gKTsKLQl9Ci0JCi0JU3RyaW5nIHN0eWxlID0gamF2YVBhcmFtZXRlci5nZXRTdHlsZSgpOwotCQotCWlmKCBzdHlsZS5lcXVhbHMoIEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1JQQyApICkKLQl7Ci0JICBycGNFbmNvZGVkQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JfQotCWVsc2UgaWYoIHN0eWxlLmVxdWFscyggSmF2YVdTRExQYXJhbWV0ZXIuU1RZTEVfRE9DVU1FTlQgKSApCi0JewotCSAgcnBjTGl0ZXJhbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOwkgIAotCX0KLQllbHNlCi0JewotCSAgZG9jTGl0ZXJhbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOyAgCi0JfQotICB9Ci0gIAotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVBhcmFtZXRlcigpCi0gIHsKLSAgICAKLSAgICBJUGF0aCB3c2RsUGF0aCAKLSAgICA9IG5ldyBQYXRoKCB3c2RsRm9sZGVyXy50cmltKCkgKS5hcHBlbmQoIHdzZGxGaWxlVGV4dF8uZ2V0VGV4dCgpLnRyaW0oKSApOwotICAgIAotCS8vIFRPRE8gRG8gd2UgbmVlZCB0byBnbyB0byB0aGUgZWNsaXBzZSBmaWxlIHN5c3RlbT8/Ci0JLy9TdHJpbmcgd3NkbExvY2F0aW9uID0gd29ya3NwYWNlLmdldEZpbGUod3NkbFBhdGgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQlTdHJpbmcgd3NkbExvY2F0aW9uID0gd3NkbFBhdGgudG9TdHJpbmcoKTsKLQkKLQlqYXZhUGFyYW1ldGVyXy5zZXRPdXRwdXRXc2RsTG9jYXRpb24od3NkbExvY2F0aW9uKTsKLQlqYXZhUGFyYW1ldGVyXy5zZXRJbnB1dFdzZGxMb2NhdGlvbihuZXcgRmlsZSh3c2RsTG9jYXRpb24pLnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCi0JSGFzaHRhYmxlIG1ldGhvZHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLQlUcmVlSXRlbVtdIGl0ZW1zID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0JCi0JZm9yKCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyApIAotCXsKLQkgIFRyZWVJdGVtIGl0ZW0gPSBpdGVtc1tpXTsKLQkgIG1ldGhvZHMucHV0KChTdHJpbmcpaXRlbS5nZXREYXRhKCksIG5ldyBCb29sZWFuKGl0ZW0uZ2V0Q2hlY2tlZCgpKSk7Ci0JfQotCQotCWphdmFQYXJhbWV0ZXJfLnNldE1ldGhvZHMobWV0aG9kcyk7Ci0JCi0JaWYoIHJwY0VuY29kZWRCdXR0b25fLmdldFNlbGVjdGlvbigpKSAKLQl7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRTdHlsZShKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9SUEMpOwotCSAgamF2YVBhcmFtZXRlcl8uc2V0VXNlKEphdmFXU0RMUGFyYW1ldGVyLlVTRV9FTkNPREVEKTsKLQl9IAotCWVsc2UgaWYoIHJwY0xpdGVyYWxCdXR0b25fLmdldFNlbGVjdGlvbigpKSAKLQl7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRTdHlsZShKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9ET0NVTUVOVCk7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRVc2UoSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0xJVEVSQUwpOwotCX0gCi0JZWxzZSAKLQl7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRTdHlsZShKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9XUkFQUEVEKTsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFVzZShKYXZhV1NETFBhcmFtZXRlci5VU0VfTElURVJBTCk7Ci0JfQotICAgIAotCXJldHVybiBqYXZhUGFyYW1ldGVyXzsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yI2dldFN0YXR1cygpCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSAKLSAgewotICAgIElTdGF0dXMgICAgICAgcmVzdWx0ICAgPSBudWxsOwotICAgIAotICAgIGlmKCB3c2RsRmlsZVRleHRfLmdldFRleHQoKS5lcXVhbHMoICIiICkgKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX05PX0ZJTEVfU1BFQ0lGSUVEICk7IAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgVHJlZUl0ZW1bXSBpdGVtcyAgICAgICAgPSBtZXRob2RzVHJlZV8uZ2V0SXRlbXMoKTsKLSAgICAgIGJvb2xlYW4gICAgaXRlbVNlbGVjdGVkID0gZmFsc2U7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBpZiggaXRlbXNbaW5kZXhdLmdldENoZWNrZWQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmKCAhaXRlbVNlbGVjdGVkICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfTk9fTUVUSE9EX1NFTEVDVEVEICk7IAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYzA3NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL1ZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkphdmFNT0ZVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5KYXZhUmVzb3VyY2VGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgSkFWQV9FWFRFTlNJT04gPSAiLmphdmEiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgU3RyaW5nIENMQVNTX0VYVEVOU0lPTiA9ICIuY2xhc3MiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWU7Ci0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuIGNhbiBiZSBsb2FkZWQgZnJvbSB0aGUgc2VydmljZSBwcm9qZWN0LiBJZiBpdCBjYW4ndCwgYW4gZXJyb3IgaXMgZGlzcGxheWVkLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAvL01ha2Ugc3VyZSBhIGJlYW4gaXMgc2VsZWN0ZWQKLSAgICBTdHJpbmcgamF2YUJlYW5OYW1lID0gbnVsbDsKLSAgICBpZiAob2JqZWN0U2VsZWN0aW9uICE9IG51bGwgJiYgIW9iamVjdFNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgT2JqZWN0IG9iamVjdCA9IG9iamVjdFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICB7Ci0gICAgICAgIGphdmFCZWFuTmFtZSA9ICgoU3RyaW5nKW9iamVjdCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJLy9UaGUgT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IG5ldmVyIGFwcGVhcmVkIGFuZCBzbyB0aGUgSVN0dWN0dXJlZFNlbGVjdGlvbiBmcm9tIAotICAgICAgCS8vT2JqZWN0U2VsZWN0aW9uV2lkZ2V0T3V0cHV0Q29tbWFuZCBpcyB0aGUgaW5pdGlhbCBzZWxlY3Rpb24uIAotICAgICAgCS8vR2V0IHRoZSBKYXZhIGJlYW4gbmFtZSBmcm9tIHRoZSBzZWxlY3Rpb24uCi0gICAgICAJdHJ5Ci0JCXsKLSAgICAgIAkgIFN5c3RlbS5vdXQucHJpbnRsbihvYmplY3QuZ2V0Q2xhc3MoKS50b1N0cmluZygpKTsKLSAgICAgIAkgIGphdmFCZWFuTmFtZSA9IGdldEphdmFCZWFuRnJvbU9iamVjdFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotCQl7Ci0JCSAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0NBTk5PVF9OT19KQVZBX0JFQU4pOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCSAgcmV0dXJuIGVycm9yU3RhdHVzOwkJCQotCQl9Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgICAKLSAgICBpZiAoamF2YUJlYW5OYW1lPT1udWxsIHx8IGphdmFCZWFuTmFtZS5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ0FOTk9UX05PX0pBVkFfQkVBTik7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOwotICAgIH0KLSAgICAKLSAgICAvL01ha2Ugc3VyZSBhIHByb2plY3QgaXMgc2VsZWN0ZWQKLSAgICBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWUpOwotICAgIGlmIChzZXJ2aWNlUHJvamVjdD09bnVsbCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTk9fUFJPSkVDVCk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOyAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL01ha2Ugc3VyZSB0aGUgc2VsZWN0ZWQgYmVhbiBjYW4gYmUgbG9hZGVkIGZyb20gdGhlIHNlbGVjdGVkIHByb2plY3QKLQlpZiAoamF2YUJlYW5OYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoSkFWQV9FWFRFTlNJT04pCi0JCXx8IGphdmFCZWFuTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKENMQVNTX0VYVEVOU0lPTikpIHsKLQkJamF2YUJlYW5OYW1lID0gamF2YUJlYW5OYW1lLnN1YnN0cmluZygwLCBqYXZhQmVhbk5hbWUubGFzdEluZGV4T2YoJy4nKSk7Ci0JfQotCQotICAgIHRyeQotICAgIHsKLQkgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBKYXZhTU9GVXRpbHMuZ2V0SmF2YUNsYXNzKGphdmFCZWFuTmFtZSwgc2VydmljZVByb2plY3QpOyAKLQkgIGlmICghamF2YUNsYXNzLmlzRXhpc3RpbmdUeXBlKCkpIAotCSAgewkJCi0JCUlTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ0FOTk9UX0xPQURfSkFWQV9CRUFOLCBuZXcgU3RyaW5nW10geyBqYXZhQmVhbk5hbWUsIHNlcnZpY2VQcm9qZWN0TmFtZSB9KSk7Ci0JCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCXJldHVybiBlcnJvclN0YXR1czsKLQkgIH0KLSAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgIHsKLQkgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ0FOTk9UX0xPQURfSkFWQV9CRUFOLCBuZXcgU3RyaW5nW10geyBqYXZhQmVhbk5hbWUsIHNlcnZpY2VQcm9qZWN0TmFtZSB9KSk7Ci0JICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOyAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2aWNlUHJvamVjdE5hbWUgVGhlIHNlcnZpY2VQcm9qZWN0TmFtZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuc2VydmljZVByb2plY3ROYW1lID0gc2VydmljZVByb2plY3ROYW1lOwotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIG9iamVjdFNlbGVjdGlvbiBUaGUgb2JqZWN0U2VsZWN0aW9uIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLm9iamVjdFNlbGVjdGlvbiA9IG9iamVjdFNlbGVjdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldEphdmFCZWFuRnJvbU9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgYmVhbkNsYXNzID0gIiI7Ci0gICAgSmF2YVJlc291cmNlRmlsdGVyIGZpbHRlciA9IG5ldyBKYXZhUmVzb3VyY2VGaWx0ZXIoKTsgCi0gICAgLy9JU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBpbml0aWFsU2VsZWN0aW9uXzsKLSAgICAvLwotICAgIGlmIChvYmplY3RTZWxlY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gb2JqZWN0U2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBnZXQgdGhlIElSZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGUgc2VsZWN0aW9uCi0gICAgICAgIElSZXNvdXJjZSByZXMgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgcmVzID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChmaWx0ZXIuYWNjZXB0cyhyZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZ2V0IHRoZSBwYWNrYWdlLXF1YWxpZmllZCBjbGFzcyBuYW1lIHdpdGhvdXQgZmlsZSBleHRlbnNpb25zCi0gICAgICAgICAgU3RyaW5nIGJlYW5QYWNrYWdlID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShyZXMuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgICAgICAgaWYgKGJlYW5QYWNrYWdlPT1udWxsKQotICAgICAgICAgICAgYmVhblBhY2thZ2UgPSAiIjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBiZWFuUGFja2FnZSA9IGJlYW5QYWNrYWdlICsgIi4iOwotCi0gICAgICAgICAgYmVhbkNsYXNzID0gYmVhblBhY2thZ2UgKyByZXMuZ2V0TmFtZSgpOwotCi0gICAgICAgICAgaWYgKGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuamF2YSIpIHx8IGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuY2xhc3MiKSkgewotICAgICAgICAgICAgYmVhbkNsYXNzID0gYmVhbkNsYXNzLnN1YnN0cmluZygwLGJlYW5DbGFzcy5sYXN0SW5kZXhPZignLicpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8KLSAgICByZXR1cm4gYmVhbkNsYXNzOwotICB9ICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9BeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9BeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NiMWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldTRExQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbjsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLSAgCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLSAgICBqYXZhV1NETFBhcmFtID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0gICAgamF2YVdTRExQYXJhbS5zZXRTZXJ2ZXJTaWRlKEphdmFXU0RMUGFyYW1ldGVyLlNFUlZFUl9TSURFX0JFQU4pOwotICAgIGphdmFXU0RMUGFyYW0uc2V0U2tlbGV0b25EZXBsb3kodHJ1ZSk7Ci0gICAgamF2YVdTRExQYXJhbS5zZXRNZXRhSW5mT25seShmYWxzZSk7Ci0gICAgamF2YVdTRExQYXJhbS5zZXRJbnB1dFdzZGxMb2NhdGlvbih3c2RsVVJJXyk7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikKLSAgewotICAgIHRoaXMuaW5pdGlhbFNlbGVjdGlvbiA9IGluaXRpYWxTZWxlY3Rpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRPYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgaWYgKHdlYlNlcnZpY2VzUGFyc2VyID09IG51bGwpCi0JCXdlYlNlcnZpY2VzUGFyc2VyID0gV1NETFBhcnNlckZhY3RvcnkuZ2V0V1NETFBhcnNlcigpOwotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0gIHsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3QgZmlyc3RFbGVtZW50ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChmaXJzdEVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgICAgSUZpbGUgaWZpbGUgPSAoSUZpbGUpZmlyc3RFbGVtZW50OwotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IGlmaWxlLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24uZXF1YWxzKCJ3c2RsIikgfHwKLSAgICAgICAgICAgIGZpbGVFeHRlbnNpb24uZXF1YWxzKCJ3c2lsIikgfHwKLSAgICAgICAgICAgIGZpbGVFeHRlbnNpb24uZXF1YWxzKCJodG1sIikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaWZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOyAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0JICByZXR1cm4gd3NkbFVSSV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLQkgIHdzZGxVUklfID0gd3NkbFVSSTsKLQkgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5XU0lMKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2lsVVJJKCkKLSAgewotICAgIFN0cmluZyB3c1VSSSA9IGdldFdzZGxVUkkoKTsKLSAgICBpbnQgaW5kZXggPSB3c1VSSS5sYXN0SW5kZXhPZignLicpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHdzVVJJLnN1YnN0cmluZygwLCBpbmRleCkpOwotICAgICAgc2IuYXBwZW5kKCIud3NpbCIpOwotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKQotICB7Ci0gICAgcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V2ViU2VydmljZXNQYXJzZXIoKS5nZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpLmdldEhUVFBCYXNpY0F1dGhVc2VybmFtZSgpOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTYwMzA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vU2tlbGV0b25Db25maWdXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMDYgICAxMjExOTkgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgTfhsbGVyCi0gKiAyMDA2MDMyMSAgIDEyODgyNyBqb2FuIC0gSm9hbiBIYWdnYXJ0eSwgcmVtb3ZlIHJlZHVuZGFudCB3c2RsIFVSSSwgZm9sZGVyIGFuZCBmaWxlIGNvbnRyb2xzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgU2tlbGV0b25Db25maWdXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCi0gIC8qIENPTlRFWFRfSUQgUEJTQzAwMDEgZm9yIHRoZSBTa2VsZXRvbiBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQlNDX1BBR0UgPSAiUEJTQzAwMDEiOyAvLyROT04tTkxTLTEkCi0gIAotICAvLyBwcml2YXRlIFRleHQgdXJpVGV4dF87Ci0gIC8qIENPTlRFWFRfSUQgUEJDRjAwMDIgZm9yIHRoZSBVUkkgZmllbGQgb2YgdGhlIEJlYW4gQ29uZmlnIFBhZ2UgKi8KLSAgLy9wcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCQ0ZfVEVYVF9VUkkgPSAiUEJDRjAwMDIiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIENvbWJvIHNrZWxldG9uRm9sZGVyVGV4dF87Ci0gIC8qIENPTlRFWFRfSUQgUEJTQzAwMDQgZm9yIHRoZSBTa2VsZXRvbiBGb2xkZXIgZmllbGQgb2YgdGhlIFNrZWxldG9uIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCU0NfVEVYVF9TS0VMRVRPTl9GT0xERVIgPSAiUEJTQzAwMDQiOyAvLyROT04tTkxTLTEkCi0KLQotICAvKiBDT05URVhUX0lEIFBCU0MwMDA1IGZvciB0aGUgU2tlbGV0b24gRm9sZGVyIEJyb3dzZSBidXR0b24gb2YgdGhlIFNrZWxldG9uIENvbmZpZyBQYWdlICovCi0gIC8vIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCU0NfQlVUVE9OX1NLRUxFVE9OX0ZPTERFUl9CUk9XU0UgPSAiUEJTQzAwMDUiOyAvLyROT04tTkxTLTEkCi0gIC8vIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MVElQX1BCU0NfQlVUVE9OX1NLRUxFVE9OX0ZPTERFUl9CUk9XU0UgPSAiVE9PTFRJUF9QQlNDX0JVVFRPTl9TS0VMRVRPTl9GT0xERVJfQlJPV1NFIjsKLSAgCi0gIHByaXZhdGUgQnV0dG9uIHNob3dNYXBwaW5nc0NoZWNrYm94XzsKLSAgLyogQ09OVEVYVF9JRCBQQlNDMDAxNiBmb3IgdGhlIFNob3cgTWFwcGluZ3MgY2hlY2tib3ggb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX04yUF9TSE9XX01BUFBJTkdTID0gIlBCU0MwMDE2IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBzZXJ2ZXJQcm9qZWN0XzsKLQkKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gICAgU3RyaW5nICAgICAgIHBsdWdpbklkICAgICAgICA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSI7Ci0gICAgCi0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgICAgICAgICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZCApOwotICAgIFVJVXRpbHMgICAgICBjb25VaVV0aWxzICAgICAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWQgKTsKLSAgICBVSVV0aWxzICAgICAgYmFzZUNvblVpVXRpbHMgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkICk7Ci0KLSAgCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWQgKyAiLiIgKyAgSU5GT1BPUF9QQlNDX1BBR0UgKTsKLSAgCXBhcmVudC5zZXRUb29sVGlwVGV4dCggQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCU0NfUEFHRSApOwotICAgIAotICAgIENvbXBvc2l0ZSB0ZXh0R3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAyLCAwLCAwICk7Ci0KLSAgICAvKgotICAgIHVyaVRleHRfID0gdWlVdGlscy5jcmVhdGVUZXh0KCB0ZXh0R3JvdXAsICJMQUJFTF9VUkkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUT09MVElQX1BCQ0ZfVEVYVF9VUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDRl9URVhUX1VSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0gICAgKi8KLSAgICAKLSAgICBza2VsZXRvbkZvbGRlclRleHRfID0gYmFzZUNvblVpVXRpbHMuY3JlYXRlQ29tYm8oIHRleHRHcm91cCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NLRUxFVE9OX1JPT1RfTkFNRSwKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCU0NfVEVYVF9TS0VMRVRPTl9GT0xERVIsCi0gICAgICAgIElORk9QT1BfUEJTQ19URVhUX1NLRUxFVE9OX0ZPTERFUiwKLSAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0KLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8gPSBjb25VaVV0aWxzLmNyZWF0ZUNoZWNrYm94KCBwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19YTUwyQkVBTiwKLSAgICAJCQkJCQkJCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX04yUF9TSE9XX01BUFBJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfTjJQX1NIT1dfTUFQUElOR1MgKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50VVJJKFN0cmluZyBlbmRwb2ludFVSSSkKLSAgewotICAJLyoKLSAgICBpZiAoZW5kcG9pbnRVUkkgIT0gbnVsbCkKLSAgICAgIHVyaVRleHRfLnNldFRleHQoZW5kcG9pbnRVUkkpOwotICAgICovCi0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgc2V0T3V0cHV0SmF2YUZvbGRlcihTdHJpbmcgb3V0cHV0SmF2YUZvbGRlcikKLSAgewotICAgIGlmIChvdXRwdXRKYXZhRm9sZGVyICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gc2tlbGV0b25Gb2xkZXJUZXh0Xy5pbmRleE9mKG91dHB1dEphdmFGb2xkZXIpOwotICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICBza2VsZXRvbkZvbGRlclRleHRfLnNlbGVjdChpbmRleCk7Ci0gICAgICBlbHNlIGlmIChza2VsZXRvbkZvbGRlclRleHRfLmdldEl0ZW1Db3VudCgpIDw9IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByb290ID0gZ2V0V29ya3NwYWNlUm9vdExvY2F0aW9uKCk7Ci0gICAgICAgIGlmIChvdXRwdXRKYXZhRm9sZGVyLnN0YXJ0c1dpdGgocm9vdCkpCi0gICAgICAgICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5zZXRUZXh0KG91dHB1dEphdmFGb2xkZXIuc3Vic3RyaW5nKHJvb3QubGVuZ3RoKCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNrZWxldG9uRm9sZGVyVGV4dF8uc2V0VGV4dChvdXRwdXRKYXZhRm9sZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNob3dNYXBwaW5nKGJvb2xlYW4gc2hvd01hcHBpbmcpCi0gIHsKLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8uc2V0U2VsZWN0aW9uKHNob3dNYXBwaW5nKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd01hcHBpbmcoKQotICB7Ci0gICAgcmV0dXJuIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQotLy8JICBEbyBub3QgYmFzZSBKYXZhIG91dHB1dCBkaXJlY3Rvcnkgb24gd29ya3NwYWNlIHJvb3Qgc2luY2UgdGhlIHByb2plY3QgY291bGQgYmUgbm90IAotLy8JICBwaHlzaWNhbGx5IGxvY2F0ZWQgaW4gdGhlIHdvcmtzcGFjZSByb290LCBnZXQgdGhlIHByb2plY3Qgc3BlY2lmaWMgcm9vdCBpbnN0ZWFkCi0JICAKLQkgIFN0cmluZyBwcm9qZWN0U3BlY2lmaWNSb290ID0gc2VydmVyUHJvamVjdF8uZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCSAgU3RyaW5nIHNrZWxldG9uRm9sZGVyID0gc2tlbGV0b25Gb2xkZXJUZXh0Xy5nZXRUZXh0KCk7Ci0JICBTdHJpbmcgcHJvamVjdFBhdGhTdHJpbmcgPSBzZXJ2ZXJQcm9qZWN0Xy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JICBpZiAoc2tlbGV0b25Gb2xkZXIuc3RhcnRzV2l0aChwcm9qZWN0UGF0aFN0cmluZykpIHsKLQkJICBza2VsZXRvbkZvbGRlciA9IHNrZWxldG9uRm9sZGVyLnN1YnN0cmluZyhwcm9qZWN0UGF0aFN0cmluZy5sZW5ndGgoKSk7Ci0JICB9Ci0JICBqYXZhV1NETFBhcmFtLnNldEphdmFPdXRwdXQocHJvamVjdFNwZWNpZmljUm9vdCArIHNrZWxldG9uRm9sZGVyKTsKLQkgIHJldHVybiBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCSAgdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkKLSAgewotCSAgc2VydmVyUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLSAgICBTdHJpbmcgb3JpZ2luYWxTa2VsZXRvbkZvbGRlciA9IHNrZWxldG9uRm9sZGVyVGV4dF8uZ2V0VGV4dCgpOwotICAgIHNrZWxldG9uRm9sZGVyVGV4dF8ucmVtb3ZlQWxsKCk7Ci0gICAgSVBhdGhbXSBwYXRocyA9IFJlc291cmNlVXRpbHMuZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyhzZXJ2aWNlUHJvamVjdCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGggOyBpKyspCi0gICAgICBza2VsZXRvbkZvbGRlclRleHRfLmFkZChwYXRoc1tpXS50b1N0cmluZygpKTsKLSAgICBpbnQgaW5kZXggPSBza2VsZXRvbkZvbGRlclRleHRfLmluZGV4T2Yob3JpZ2luYWxTa2VsZXRvbkZvbGRlcik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5zZWxlY3QoaW5kZXgpOwotICAgIGVsc2UKLSAgICAgIHNrZWxldG9uRm9sZGVyVGV4dF8uc2VsZWN0KDApOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXb3Jrc3BhY2VSb290TG9jYXRpb24oKQotICB7Ci0gIAlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpLnJlbW92ZVRyYWlsaW5nU2VwYXJhdG9yKCkudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL1NrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiZTg4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL1NrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBJUHJvamVjdCBzZXJ2ZXJQcm9qZWN0OwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotCi0gIHB1YmxpYyBTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kKCApCi0gIHsKLSAgfQotICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQkKLQkJU3RyaW5nIG91dHB1dERpciA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKEoyRUVVdGlscy5nZXRXZWJJbmZQYXRoKCBzZXJ2ZXJQcm9qZWN0ICkpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJamF2YVdTRExQYXJhbS5zZXRPdXRwdXQoIG91dHB1dERpciApOwotLy8JCURvIG5vdCBiYXNlIEphdmEgb3V0cHV0IGRpcmVjdG9yeSBvbiB3b3Jrc3BhY2Ugcm9vdCBzaW5jZSB0aGUgcHJvamVjdCBjb3VsZCBiZSBub3QgcGh5c2ljYWxseSBsb2NhdGVkIGluIHRoZSB3b3Jrc3BhY2Ugcm9vdAotLy8JCWphdmFXU0RMUGFyYW0uc2V0SmF2YU91dHB1dChnZXRSb290VVJMKCkgKyBnZXRPdXRwdXRKYXZhRm9sZGVyKCkpOyAKLQkJU3RyaW5nIGphdmFPdXRwdXQgPQlSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShnZXRPdXRwdXRKYXZhRm9sZGVyKCkpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJamF2YVdTRExQYXJhbS5zZXRKYXZhT3V0cHV0KGphdmFPdXRwdXQpOwotCQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmVyUHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmVyUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kcG9pbnRVUkkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0V1NETEZvbGRlcigpCi0gIHsKLQkgIElQYXRoIHdzZGxQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHNlcnZlclByb2plY3QgKS5hcHBlbmQoIndzZGwiKTsKLSAgICAgIHJldHVybiB3c2RsUGF0aC50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE91dHB1dFdTRExGaWxlKCkKLSAgewotICAgIGludCBpbmRleCA9IHdzZGxVUkkubGFzdEluZGV4T2YoJy8nKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICBpbmRleCA9IHdzZGxVUkkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgcmV0dXJuIHdzZGxVUkkuc3Vic3RyaW5nKGluZGV4KzEsIHdzZGxVUkkubGVuZ3RoKCkpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE91dHB1dEphdmFGb2xkZXIoKQotICB7Ci0gICAgaWYgKHNlcnZlclByb2plY3QhPW51bGwpewotICAgICAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHNlcnZlclByb2plY3QpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd01hcHBpbmcoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1Nob3dNYXBwaW5nKCkKLSAgewotICAgIHJldHVybiBnZXRTaG93TWFwcGluZygpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0gIHsKLSAgCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLSAgCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLSAgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtOwotICB9Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlclR5cGVJRCgpIHsKLQlyZXR1cm4gc2VydmljZVNlcnZlclR5cGVJRF87Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQpIHsKLQl0aGlzLnNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmljZVNlcnZlclR5cGVJRDsKLX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpemFyZC9iZWFucy9XU0JlYW5BeGlzVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL2JlYW5zL1dTQmVhbkF4aXNUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NGJjZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL2JlYW5zL1dTQmVhbkF4aXNUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTIwMTM3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyMyAgIDE0MzI4NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNjA1ICAgMTQ1NDA3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA2MDcgICAxNDQ5Nzgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQuYmVhbnM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzTWFwcGluZ3NXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkJVQ29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkphdmFUb1dTRExNZXRob2RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLkRlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuYmVhbi5CZWFuQ29uZmlnV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgY2xhc3MgZm9yIHRoZQotKiBBeGlzIGJvdHRvbSB1cCBKYXZhIEJlYW4gc2NlbmFyaW8KLSogCi0qLwotcHVibGljIGNsYXNzIFdTQmVhbkF4aXNUeXBlIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsJCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZlck5hbWVfOwotICBwcml2YXRlIFN0cmluZyBydW50aW1lTmFtZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1dlYk1vZHVsZVJlcXVpcmVkXzsKLQotCi0gIC8qKgotICAqIFJldHVybnMgYSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBTZXJ2ZXIgc3VwcG9ydGVkIGJ5IHRoaXMgV2ViIFNlcnZpY2UgdHlwZQotICAqIEByZXR1cm4gQSBsb2NhbGUgc3BlY2lmaWMgc2VydmVyIGxhYmVsIGZyb20gc2VydmVyIHBsdWdpbnMKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJMYWJlbCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmVyTmFtZV87Ci0gIH0KLQotICAvKioKLSAgKiBTZXRzIHRoZSBzZXJ2ZXIgbGFiZWwgdG8gdGhlIGFwcHJvcHJpYXRlIG5hbWUgZm91bmQgaW4gdGhlIHNlcnZlciBwbHVnaW5zLgotICAqIEBwYXJhbSBzZXJ2ZXIgbmFtZQotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJMYWJlbChTdHJpbmcgc2VydmVyTGFiZWwpCi0gIHsKLSAgICBzZXJ2ZXJOYW1lXyA9IHNlcnZlckxhYmVsOwotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIGEgbG9jYWxlIHNwZWNpZmljIGxhYmVsIGZvciB0aGUgZGVwbG95bWVudCBydW50aW1lIG9mIHRoaXMgV2ViIFNlcnZpY2UgdHlwZQotICAqIEByZXR1cm4gQSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBkZXBsb3ltZW50IHJ1bnRpbWUKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVOYW1lXzsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIHJ1bnRpbWUgbGFiZWwgZm9yIHRoZSBhcHByb3ByaWF0ZSBydW50aW1lCi0gICogQHBhcmFtIHNlcnZlciBuYW1lCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFJ1bnRpbWVMYWJlbChTdHJpbmcgcnVudGltZUxhYmVsKQotICB7Ci0gICAgcnVudGltZU5hbWVfID0gcnVudGltZUxhYmVsOwotICB9Ci0KLQotICAvKioKLSAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgV2ViIE1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhpcyBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUKLSAgKiBAcmV0dXJuIHRydWUgaWYgcmVxdWlyZVdlYk1vZHVsZQotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dlYk1vZHVsZVJlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiBpc1dlYk1vZHVsZVJlcXVpcmVkXzsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIGJvb2xlYW4gdmFsdWUgYXQgcnVudGltZSBhY2NvcmRpbmcgdG8gcmVxdWlyZVdlYk1vZHVsZSBhdHRyaWJ1dGUgZnJvbSB0aGUgbWFuaWZlc3QgZmlsZQotICAqIEBwYXJhbSByZXF1aXJlV2ViTW9kdWxlIAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJNb2R1bGVSZXF1aXJlZChib29sZWFuIHJlcXVpcmVXZWJNb2R1bGUpCi0gIHsKLSAgICBpc1dlYk1vZHVsZVJlcXVpcmVkXyA9IHJlcXVpcmVXZWJNb2R1bGU7Ci0gIH0KLQotICAKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLldlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSNpc0VKQk1vZHVsZVJlcXVpcmVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0VKQk1vZHVsZVJlcXVpcmVkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5XZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUjc2V0RUpCTW9kdWxlUmVxdWlyZWQoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFSkJNb2R1bGVSZXF1aXJlZChib29sZWFuIGFyZzApIHsKLQkJcmV0dXJuOwotCi0JfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSAKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0gICAgLyoKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ3VycmVudFBhZ2VDb21tYW5kLmNsYXNzLCAiQ3VycmVudFBhZ2UiLCBCZWFuQ2xhc3NXaWRnZXQuY2xhc3MgKTsKLSAgICAvL0JlYW5DbGFzc1dpZGdldCAtIGFzIHRhcmdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YUJlYW5OYW1lIiwgQmVhbkNsYXNzV2lkZ2V0LmNsYXNzLCAiQmVhbkNsYXNzTmFtZSIsIG51bGwpOwotICAgIC8vQmVhbkNsYXNzV2lkZ2V0IC0gYXMgc291cmNlCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNsYXNzV2lkZ2V0LmNsYXNzLCAiQmVhbkNsYXNzTmFtZSIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzLCAiSmF2YUJlYW5OYW1lIiwgbnVsbCk7ICAgIC8vQmVhbkNvbmZpZ1dpZGdldAotICAgICovCi0gICAgLy8gT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vQmVhbkNvbmZpZ1dpZGdldCAtIGFzIHRhcmdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEphdmFUb1dTRExNZXRob2RDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEJlYW5Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgbnVsbCApOwotICAgIC8vQmVhbkNvbmZpZ1dpZGdldCAtIGFzIHNvdXJjZQotCi0gICAgLy8gIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsKLQotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBKYXZhMldTRExDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAgICAgICAKLSAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJlYW5Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgV1NETDJKYXZhQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsQlVDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotICAgIC8vQXhpc01hcHBpbmdzV2lkZ2V0IC0gYXMgdGFyZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vQXhpc01hcHBpbmdzV2lkZ2V0IC0gYXMgc291cmNlCi0KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgQlVDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAgICAgICAKLSAgCi0gICAgCi0gICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggRGVmYXVsdHNGb3JDb25maWcuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgQmVhbkNvbmZpZ1dpZGdldC5jbGFzcyApOwotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIERlZmF1bHRzRm9yQ29uZmlnLmNsYXNzLCAiQ3VzdG9taXplU2VydmljZU1hcHBpbmdzIiwgQmVhbkNvbmZpZ1dpZGdldC5jbGFzcyApOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgCi0gIHsKLSAgIAotICAgIC8qCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQmVhblNlbGVjdGlvbiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTQkVBTl9DTEFTUywKLSAgICAgICAgICAgICAgICAgICAgICAgIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTQkVBTl9DTEFTUywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmVhbkNsYXNzV2lkZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAqLwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQmVhbkNvbmZpZyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTQkVBTl9DT05GSUcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU0JFQU5fQ09ORklHLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCZWFuQ29uZmlnV2lkZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLQotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQXhpc1NlcnZpY2VCZWFuTWFwcGluZyIsIAotICAgIAkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX0JFQU4yWE1MLAotICAgIAkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfUDJOX01BUFBJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBeGlzTWFwcGluZ3NXaWRnZXQoQXhpc01hcHBpbmdzV2lkZ2V0Lk1PREVfQkVBTjJYTUwgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICB7Ci0gICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICB7Ci0gICAgICAgICAgLy9kZWFkIGNvZGUgLSBkb2Vzbid0IG1hdHRlciB3aGF0IGdldHMgcmV0dXJuZWQgaGVyZS4KLSAgICAJICByZXR1cm4gbmV3IFNpbXBsZUZyYWdtZW50KCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotICAgIAotfQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL3dzZGwvV1NXU0RMQXhpc1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpemFyZC93c2RsL1dTV1NETEF4aXNUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxM2RiODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL3dzZGwvV1NXU0RMQXhpc1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjEgICAxMjg4Mjcgam9hbiAtIEpvYW4gSGFnZ2FydHksIHJlbW92ZSByZWR1bmRhbnQgd3NkbCBVUkksIGZvbGRlciBhbmQgZmlsZSBjb250cm9scwotICogMjAwNjA1MjMgICAxNDMyODQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDYwNSAgIDE0NTQwNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzTWFwcGluZ3NGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzLkF4aXNNYXBwaW5nc1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uLkF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b24uU2tlbGV0b25Db25maWdXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YS5Qcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGNsYXNzIGZvciB0aGUgQXhpcyBXZWIgc2VydmljZSB0eXBlLgotKi8KLXB1YmxpYyBjbGFzcyBXU1dTRExBeGlzVHlwZSBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nIAotewotCXByaXZhdGUgU3RyaW5nIHNlcnZlck5hbWVfOwotCXByaXZhdGUgU3RyaW5nIHJ1bnRpbWVOYW1lXzsKLQlwcml2YXRlIGJvb2xlYW4gaXNXZWJNb2R1bGVSZXF1aXJlZF87Ci0KLQkvKioKLQkqIFJldHVybnMgYSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBTZXJ2ZXIgc3VwcG9ydGVkIGJ5IHRoaXMgV2ViIFNlcnZpY2UgdHlwZQotCSogQHJldHVybiBBIGxvY2FsZSBzcGVjaWZpYyBzZXJ2ZXIgbGFiZWwgZnJvbSBzZXJ2ZXIgcGx1Z2lucwotCSovCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJMYWJlbCgpIHsKLQkJcmV0dXJuIHNlcnZlck5hbWVfOwotCX0KLQotCS8qKgotCSogU2V0cyB0aGUgc2VydmVyIGxhYmVsIHRvIHRoZSBhcHByb3ByaWF0ZSBuYW1lIGZvdW5kIGluIHRoZSBzZXJ2ZXIgcGx1Z2lucy4KLQkqIEBwYXJhbSBzZXJ2ZXIgbmFtZQotCSovCi0JcHVibGljIHZvaWQgc2V0U2VydmVyTGFiZWwoU3RyaW5nIHNlcnZlckxhYmVsKSB7Ci0JCXNlcnZlck5hbWVfID0gc2VydmVyTGFiZWw7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIGEgbG9jYWxlIHNwZWNpZmljIGxhYmVsIGZvciB0aGUgZGVwbG95bWVudCBydW50aW1lIG9mIHRoaXMgV2ViIFNlcnZpY2UgdHlwZQotCSogQHJldHVybiBBIGxvY2FsZSBzcGVjaWZpYyBsYWJlbCBmb3IgdGhlIGRlcGxveW1lbnQgcnVudGltZQotCSovCi0JcHVibGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoKSB7Ci0JCXJldHVybiBydW50aW1lTmFtZV87Ci0JfQotCi0JLyoqCi0JKiBTZXRzIHRoZSBydW50aW1lIGxhYmVsIGZvciB0aGUgYXBwcm9wcmlhdGUgcnVudGltZQotCSogQHBhcmFtIHNlcnZlciBuYW1lCi0JKi8KLQlwdWJsaWMgdm9pZCBzZXRSdW50aW1lTGFiZWwoU3RyaW5nIHJ1bnRpbWVMYWJlbCkgewotCQlydW50aW1lTmFtZV8gPSBydW50aW1lTGFiZWw7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgV2ViIE1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhpcyBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUKLQkqIEByZXR1cm4gdHJ1ZSBpZiByZXF1aXJlV2ViTW9kdWxlCi0JKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1dlYk1vZHVsZVJlcXVpcmVkKCkgewotCQlyZXR1cm4gaXNXZWJNb2R1bGVSZXF1aXJlZF87Ci0JfQotCi0JLyoqCi0JKiBTZXRzIHRoZSBib29sZWFuIHZhbHVlIGF0IHJ1bnRpbWUgYWNjb3JkaW5nIHRvIHJlcXVpcmVXZWJNb2R1bGUgYXR0cmlidXRlIGZyb20gdGhlIG1hbmlmZXN0IGZpbGUKLQkqIEBwYXJhbSByZXF1aXJlV2ViTW9kdWxlIAotCSovCi0JcHVibGljIHZvaWQgc2V0V2ViTW9kdWxlUmVxdWlyZWQoYm9vbGVhbiByZXF1aXJlV2ViTW9kdWxlKSB7Ci0JCWlzV2ViTW9kdWxlUmVxdWlyZWRfID0gcmVxdWlyZVdlYk1vZHVsZTsKLQl9Ci0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlI2lzRUpCTW9kdWxlUmVxdWlyZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRUpCTW9kdWxlUmVxdWlyZWQoKSB7Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5XZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUjc2V0RUpCTW9kdWxlUmVxdWlyZWQoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFSkJNb2R1bGVSZXF1aXJlZChib29sZWFuIGFyZzApIHsKLQkJcmV0dXJuOwotCi0JfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSAKLSAgewotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0gIHsKLSAgICAvLyBTa2VsZXRvbkNvbmZpZ1dpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIG5ldyBQcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW5kcG9pbnRVUkkiLCBTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIk91dHB1dEphdmFGb2xkZXIiLCBTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNob3dNYXBwaW5nIiwgU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MpOwotCi0gICAgLy8gIEJhY2t1cFNrZWxJbXBsQ29tbWFuZCAgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotICAgIAotICAgIC8vIEF4aXNNYXBwaW5nc0ZyYWdtZW50Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNob3dNYXBwaW5nIiwgQXhpc01hcHBpbmdzRnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzLCAiU2hvd01hcHBpbmciLCBBeGlzTWFwcGluZ3NGcmFnbWVudC5jbGFzcyk7Ci0KLSAgICAvLyBBeGlzTWFwcGluZ3NXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgbnVsbCk7Ci0KLSAgICAvLyBXU0RMMkphdmFDb21tYW5kCi0gICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFdTREwySmF2YUNvbW1hbmQuY2xhc3MpOwotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgV1NETDJKYXZhQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgCi0gIHsKLSAgIAotICAgIC8qCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiV1NETFNlbGVjdGlvbiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfU0VMRUNUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19TRUxFQ1RJT04sCi0JCSAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkJICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0JCSAgICAgICAgICAgICAgICAgIHsKLQkJICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdTRExTZWxlY3Rpb25XaWRnZXQoKTsKLQkJICAgICAgICAgICAgICAgICAgfQotCQkgICAgICAgICAgICAgICAgfSApOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiV1NETFNlbGVjdGlvblRyZWVXaWRnZXQiLCAKLSAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NETF9TRUxFQ1RJT04sCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NETF9TRUxFQ1RJT04sCi0gICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgV1NETFNlbGVjdGlvblRyZWVXaWRnZXQoKTsKLSAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAqLwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiU2tlbGV0b25Db25maWciLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTU0tFTF9DT05GSUcsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTU0tFTF9DT05GSUcsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNrZWxldG9uQ29uZmlnV2lkZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkF4aXNNYXBwaW5nc1dpZGdldCIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfWE1MMkJFQU4sCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX04yUF9NQVBQSU5HUywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXhpc01hcHBpbmdzV2lkZ2V0KEF4aXNNYXBwaW5nc1dpZGdldC5NT0RFX1hNTDJCRUFOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICB7Ci0gICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICB7Ci0gICAgICAgICAgLy9kZWFkIGNvZGUgLSBkb2Vzbid0IG1hdHRlciB3aGF0IGdldHMgcmV0dXJuZWQgaGVyZS4gCi0gICAgCSAgcmV0dXJuIG5ldyBTaW1wbGVGcmFnbWVudCgpOwotICAgICAgfQotICAgIH07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc0JlYW5Db25maWdXaWRnZXRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNCZWFuQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2U2YjU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc0JlYW5Db25maWdXaWRnZXRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuYmVhbi5CZWFuQ29uZmlnV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpemFyZC5iZWFucy5XU0JlYW5BeGlzVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQXhpc0JlYW5Db25maWdXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHsKLQotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgYmVhbkNvbmZpZ1dpZGdldF87Ci0JcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvciAgICAgICAgICAgICBtYXBwaW5nc1dpZGdldF87Ci0JcHJpdmF0ZSBCZWFuQ29uZmlnV2lkZ2V0ICAgICAgICAgICAgICAgICAgICBiZWFuV2lkZ2V0XzsKLQlwcml2YXRlIFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyIGFkYXB0ZXJfOwotCQotCXB1YmxpYyBBeGlzQmVhbkNvbmZpZ1dpZGdldEZhY3RvcnkoKQotCXsKLQkgIGFkYXB0ZXJfID0gbmV3IFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyKCBuZXcgV1NCZWFuQXhpc1R5cGUoKSApOwotCSAgCi0JICBiZWFuQ29uZmlnV2lkZ2V0XyA9IGFkYXB0ZXJfLmdldFdpZGdldCggIkJlYW5Db25maWciICk7Ci0JICBiZWFuV2lkZ2V0XyAgICAgICA9IChCZWFuQ29uZmlnV2lkZ2V0KWJlYW5Db25maWdXaWRnZXRfLmdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpLmNyZWF0ZSgpOwotCSAgbWFwcGluZ3NXaWRnZXRfICAgPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJBeGlzU2VydmljZUJlYW5NYXBwaW5nIiApOwotCX0KLQkKLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0Rmlyc3ROYW1lZFdpZGdldCgpIAotCXsKLQkgIHJldHVybiBiZWFuQ29uZmlnV2lkZ2V0XzsKLQl9Ci0KLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0TmV4dE5hbWVkV2lkZ2V0KCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXRDb250cmlidXRvcikgCi0JewotCSAgcmV0dXJuIHdpZGdldENvbnRyaWJ1dG9yID09IGJlYW5Db25maWdXaWRnZXRfICYmIGJlYW5XaWRnZXRfLmdldEN1c3RvbWl6ZVNlcnZpY2VNYXBwaW5ncygpID8gbWFwcGluZ3NXaWRnZXRfIDogbnVsbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotCXsKLQkgIGFkYXB0ZXJfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhUmVnaXN0cnkgKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNTa2VsZXRvbkNvbmZpZ1dpZGdldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1NrZWxldG9uQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDhiOGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1NrZWxldG9uQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uLlNrZWxldG9uQ29uZmlnV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpemFyZC53c2RsLldTV1NETEF4aXNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHsKLQotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgc2tlbENvbmZpZ1dpZGdldF87Ci0JcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvciAgICAgICAgICAgICBtYXBwaW5nc1dpZGdldF87Ci0JcHJpdmF0ZSBTa2VsZXRvbkNvbmZpZ1dpZGdldCAgICAgICAgICAgICAgICBza2VsV2lkZ2V0XzsKLQlwcml2YXRlIFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyIGFkYXB0ZXJfOwotCQotCXB1YmxpYyBBeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5KCkKLQl7Ci0JICBhZGFwdGVyXyA9IG5ldyBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciggbmV3IFdTV1NETEF4aXNUeXBlKCkgKTsKLQkgIAotCSAgc2tlbENvbmZpZ1dpZGdldF8gPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJTa2VsZXRvbkNvbmZpZyIgKTsKLQkgIHNrZWxXaWRnZXRfICAgICAgID0gKFNrZWxldG9uQ29uZmlnV2lkZ2V0KXNrZWxDb25maWdXaWRnZXRfLmdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpLmNyZWF0ZSgpOwotCSAgbWFwcGluZ3NXaWRnZXRfICAgPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJBeGlzTWFwcGluZ3NXaWRnZXQiICk7Ci0JfQotCQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXRGaXJzdE5hbWVkV2lkZ2V0KCkgCi0JewotCSAgcmV0dXJuIHNrZWxDb25maWdXaWRnZXRfOwotCX0KLQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yKSAKLQl7Ci0JICByZXR1cm4gd2lkZ2V0Q29udHJpYnV0b3IgPT0gc2tlbENvbmZpZ1dpZGdldF8gJiYgc2tlbFdpZGdldF8uZ2V0U2hvd01hcHBpbmcoKSA/IG1hcHBpbmdzV2lkZ2V0XyA6IG51bGw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLQl7Ci0JICBhZGFwdGVyXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5ICk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzU2MzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwMzMwICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MDkgICAxMjUwOTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1LCBVc2UgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE3ICAgMTQyMzI3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MjQgICAxMzA3NTUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA3ICAgMTQ0OTc4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgxMCAgIDEzNTM5NSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRW5hYmxlIFdUUCBXZWIgc2VydmljZSBmcmFtZXdvcmsgb3BlbmluZyBKYXZhIGVkaXRvcgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKiAyMDA4MDIyNyAgIDExOTk2NCB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQuQXhpc0RlcGxveUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLkdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5SZWZyZXNoUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5WYWxpZGF0ZVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5BeGlzT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkF4aXNSdW5JbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUF4aXNJbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5Db3B5RGVwbG95bWVudEZpbGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuSmF2YVRvV1NETE1ldGhvZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5Nb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQXhpc0lucHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5CVUNvbmZpZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLlREQ29uZmlnQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW4uQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5BeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uLlNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkJ1aWxkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YS5Qcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uV2FpdEZvckF1dG9CdWlsZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuQWJzdHJhY3RXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2UgZXh0ZW5kcyBBYnN0cmFjdFdlYlNlcnZpY2UKLXsKLQlwcml2YXRlIEF4aXNXZWJTZXJ2aWNlSW5mbyBheGlzV2ViU2VydmljZUluZm9fOwotCi0JcHVibGljIEF4aXNXZWJTZXJ2aWNlKFdlYlNlcnZpY2VJbmZvIGluZm8pCi0JewotCQlzdXBlcihpbmZvKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwKLQkJCUlTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQkKLQkJVmVjdG9yIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotICAgIEVjbGlwc2VFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IChFY2xpcHNlRW52aXJvbm1lbnQpZW52OwotCQkKLQkJaWYgKGN0eC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKSB7Ci0JCQkKLQkJCXJlZ2lzdGVyQlVEYXRhTWFwcGluZ3MoIGVudmlyb25tZW50LmdldENvbW1hbmRNYW5hZ2VyKCkuZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkpOwotCQkJCi0JCQljb21tYW5kcy5hZGQobmV3IEJVQXhpc0lucHV0Q29tbWFuZCh0aGlzLCBwcm9qZWN0KSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kKCkpOwotLy8JCQljb21tYW5kcy5hZGQobmV3IFZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCgpKTsKLQkJCS8vIGNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJCZWFuQ29uZmlnIiApKTsKLQkJCS8vIGNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJBeGlzU2VydmljZUJlYW5NYXBwaW5nIiApKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQlVDb25maWdDb21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQlVDb2RlR2VuT3BlcmF0aW9uKCkpOwotLy8JCQljb21tYW5kcy5hZGQobmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQnVpbGRQcm9qZWN0Q29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQXhpc091dHB1dENvbW1hbmQodGhpcykpOwotCQkJCi0JCX0gZWxzZSBpZiAoY3R4LmdldFNjZW5hcmlvKCkuZ2V0VmFsdWUoKSA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikgewotCQkJCi0JCQlyZWdpc3RlclRERGF0YU1hcHBpbmdzKCBlbnZpcm9ubWVudC5nZXRDb21tYW5kTWFuYWdlcigpLmdldE1hcHBpbmdSZWdpc3RyeSgpKTsKLQkJCQotCQkJY29tbWFuZHMuYWRkKG5ldyBUREF4aXNJbnB1dENvbW1hbmQodGhpcywgcHJvamVjdCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZCgpKTsKLQkJICAgIGNvbW1hbmRzLmFkZChuZXcgVmFsaWRhdGVXU0RMQ29tbWFuZCgpKTsKLQkJICAgIGNvbW1hbmRzLmFkZChuZXcgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpKTsKLS8vCQkJY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCggIlNrZWxldG9uQ29uZmlnIiApKTsKLS8vCQkJY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCggIkF4aXNNYXBwaW5nc1dpZGdldCIgKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IFREQ29uZmlnQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgVERDb2RlR2VuT3BlcmF0aW9uKCkpOwotLy8JCSAgICBjb21tYW5kcy5hZGQobmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpKTsKLQkJICAgIGNvbW1hbmRzLmFkZChuZXcgQnVpbGRQcm9qZWN0Q29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQXhpc091dHB1dENvbW1hbmQodGhpcykpOwotCQkJCi0JCX0gZWxzZSB7Ci0JCQkvL1RPRE86IFJlbW92ZSBwcmludGxuIGFuZCByZWFzc2VzcyB0aGlzICJlcnJvciIuCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIC0gV2ViU2VydmljZVNjZW5hcmlvIHNob3VsZCBub3QgYmUgQ2xpZW50IGZvciBBeGlzV2ViU2VydmljZSIpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJCi0JCQotCQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgcnVuKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlWZWN0b3IgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJaWYgKGN0eC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVCkgewotCQkJLy9UT0RPOiBSZW1vdmUgcHJpbnRsbiBhbmQgcmVhc3Nlc3MgdGhpcyAiZXJyb3IiLgotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciAtIFdlYlNlcnZpY2VTY2VuYXJpbyBzaG91bGQgbm90IGJlIENsaWVudCBmb3IgQXhpc1dlYlNlcnZpY2UiKTsKLQkJCXJldHVybiBudWxsOwotCQl9IGVsc2Ugey8vIEZvciBCT1RUT01fVVAgYW5kIFRPUF9ET1dOCi0JCQljb21tYW5kcy5hZGQobmV3IEF4aXNSdW5JbnB1dENvbW1hbmQodGhpcywgcHJvamVjdCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZCgpKTsKLQkJICAgIGNvbW1hbmRzLmFkZChuZXcgQXhpc0RlcGxveUNvbW1hbmQocHJvamVjdCkpOwotCi0JCQljb21tYW5kcy5hZGQobmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpKTsKLQotCQkJcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJCVURhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KSAKLQkgIHsKLQkJLy9CVUF4aXNJbnB1dENvbW1hbmQKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJUeXBlSUQiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhQmVhbk5hbWUiLCBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotCQkKLQkgICAgLy9WYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBWYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MpOwotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZC5jbGFzcywiU2VydmljZVByb2plY3ROYW1lIiwgbnVsbCApOwotCSAgICAKLQkgICAgLy9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotLy9LU0MgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0JICAgIAkgICAgCi0JCS8vIEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kLmNsYXNzKTsKLQkJCi0JICAgIC8vQlVBeGlzQ29tbWFuZHMyIC0gdGhlc2UgcnVuIGFmdGVyIEJlYW5DbGFzc1dpZGdldAotCSAgICAvL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLSAgICAgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyVHlwZUlEIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOyAKLSAgICAgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcyk7ICAgICAgICAKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFCZWFuTmFtZSIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlBhcnNlciIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vSmF2YVdTRExNZXRob2RDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQotCSAgICAvLyBCVUF4aXNDb21tYW5kczMgLSB0aGVzZSBydW4gYWZ0ZXIgQmVhbkNvbmZpZ1dpZGdldAotICAgIAkgICAgCi0JICAgIC8vQ29weUF4aXNKYXJDb21tYW5kCi0JICAgIC8vcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ29weUF4aXNKYXJDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIAkgICAgCi0JICAgIC8vIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICAgIC8vSmF2YTJXU0RMQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEphdmFUb1dTRExNZXRob2RDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvL1JlZnJlc2hQcm9qZWN0Q29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBSZWZyZXNoUHJvamVjdENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICAgIC8vVXBkYXRlV0VCWE1MQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIAotCSAgICAvL0J1aWxkUHJvamVjdENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRm9yY2VCdWlsZCIsIEJ1aWxkUHJvamVjdENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVmFsaWRhdGlvbk1hbmFnZXIiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vU3RhcnRQcm9qZWN0Q29tbWFuZAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFN0YXJ0UHJvamVjdENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7ICAgIAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0vL0tTQyAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyVHlwZUlEIiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0vLwkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNhbXBsZVNlcnZlclR5cGVJRCIsIFN0YXJ0UHJvamVjdENvbW1hbmQuY2xhc3MpOwotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2FtcGxlRXhpc3RpbmdTZXJ2ZXIiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCIsU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0JICAgICAgICAKLQkJLy8gQXhpc091dHB1dENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJXc2RsVVJJIiwgQXhpc091dHB1dENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7CSAgICAKLSAgIAotCQkKLQkJLy8gUnVuIGV4dGVuc2lvbgotCQkKLS8vCQlNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJGYWN0b3J5SWQiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlBhcnNlciIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBudWxsKTsKLQotCQkvLyBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZC5jbGFzcyk7CQkKLQkgICAgCi0JCS8vQXhpc0RlcGxveUNvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzRGVwbG95Q29tbWFuZC5jbGFzcyk7Ci0JCQotCSAgICAvLyBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vUmVmcmVzaFByb2plY3RDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBSZWZyZXNoUHJvamVjdENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICB9Ci0KLQlwdWJsaWMgdm9pZCByZWdpc3RlclRERGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotCSAgewotCSAgICAvLyBUcmFuc2Zvcm1lcnMKLQkgICAgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lciBwcm9qZWN0VHJhbnNmb3JtZXIgPSBuZXcgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lcigpOwotCi0JCS8vIFRPRE86ICBtYXAgIkluaXRpYWxTZWxlY3Rpb24iIGFuZCAiT2JqZWN0U2VsZWN0aW9uIiBmcm9tIFREQXhpc0lucHV0Q29tbWFuZAotCQkKLS8vCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLS8vCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotLy8JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JICAgIC8vIFZhbGlkYXRlV1NETENvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlclR5cGVJRCIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICAgICAKLQkgICAgLy8gQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJIdHRwQmFzaWNBdXRoVXNlcm5hbWUiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkh0dHBCYXNpY0F1dGhQYXNzd29yZCIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvLyBDb3B5QXhpc0phckNvbW1hbmQKLQkgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ29weUF4aXNKYXJDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIHByb2plY3RUcmFuc2Zvcm1lcik7Ci0KLQkgICAgLy8gQmFja3VwU2tlbEltcGxDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOyAgICAgIAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlSW5mbyIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIHByb2plY3RUcmFuc2Zvcm1lcik7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJUeXBlSUQiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwkKLQotCSAgICAvLyBSZWZyZXNoUHJvamVjdENvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFJlZnJlc2hQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBwcm9qZWN0VHJhbnNmb3JtZXIpOwotCSAgICAKLQkgICAgLy8gQnVpbGRQcm9qZWN0Q29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBwcm9qZWN0VHJhbnNmb3JtZXIpOwotCi0JICAgIC8vCU1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVySW5zdGFuY2VJZCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckZhY3RvcnlJZCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0KLQkgICAgLy8gR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIEF4aXNEZXBsb3lDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNEZXBsb3lDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIEF4aXNPdXRwdXRDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIldzZGxVUkkiLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7IAotCSAgfQotCXB1YmxpYyBBeGlzV2ViU2VydmljZUluZm8gZ2V0QXhpc1dlYlNlcnZpY2VJbmZvKCkgewotCQlyZXR1cm4gYXhpc1dlYlNlcnZpY2VJbmZvXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBeGlzV2ViU2VydmljZUluZm8oQXhpc1dlYlNlcnZpY2VJbmZvIGF4aXNXZWJTZXJ2aWNlSW5mbykgewotCQlheGlzV2ViU2VydmljZUluZm9fID0gYXhpc1dlYlNlcnZpY2VJbmZvOwotCX0KLX0JCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTdmNzhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2VJbmZvIHsKLQkKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1ldGVyOwotCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW1ldGVyKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbWV0ZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbWV0ZXIoSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbWV0ZXIpIHsKLQkJdGhpcy5qYXZhV1NETFBhcmFtZXRlciA9IGphdmFXU0RMUGFyYW1ldGVyOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYmQxMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud3NydC5BeGlzV2ViU2VydmljZUNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2VSdW50aW1lIGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZQotewotCi0JcHVibGljIElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbykKLQl7Ci0gICAgcmV0dXJuIG5ldyBBeGlzV2ViU2VydmljZShpbmZvKTsKLQl9Ci0KLQlwdWJsaWMgSVdlYlNlcnZpY2VDbGllbnQgZ2V0V2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBpbmZvKQotCXsKLQkJcmV0dXJuIG5ldyBBeGlzV2ViU2VydmljZUNsaWVudChpbmZvKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VSdW50aW1lQ2hlY2tlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MWE0MWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAzMjYgICAxOTg0Mzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LkFic3RyYWN0V2ViU2VydmljZVJ1bnRpbWVDaGVja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci0KLXB1YmxpYyBjbGFzcyBBeGlzV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIGV4dGVuZHMKLQkJQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgaW1wbGVtZW50cyBJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIHsKLQkKLQlwdWJsaWMgSVN0YXR1cyBjaGVja1NlcnZpY2VDbGllbnRDb21wYXRpYmlsaXR5KGJvb2xlYW4gc2VydmljZU5lZWRFQVIsCi0JCQlTdHJpbmcgc2VydmljZUVBUk5hbWUsIFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUsCi0JCQlib29sZWFuIGNsaWVudE5lZWRFQVIsIFN0cmluZyBjbGllbnRFQVJOYW1lLAotCQkJU3RyaW5nIGNsaWVudFByb2plY3ROYW1lKSB7Ci0KLQkJaWYgKHNlcnZpY2VQcm9qZWN0TmFtZSAhPSBudWxsICYmIHNlcnZpY2VQcm9qZWN0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKGNsaWVudFByb2plY3ROYW1lKSkgewotCQkJcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TQU1FX0NMSUVOVF9BTkRfU0VSVklDRV9QUk9KRUNUUyk7Ci0JCX0KLQkJaWYgKHNlcnZpY2VOZWVkRUFSICYmIGNsaWVudE5lZWRFQVIpIHsKLQkJCWlmIChzZXJ2aWNlRUFSTmFtZSAhPSBudWxsICYmIHNlcnZpY2VFQVJOYW1lLmVxdWFscyhjbGllbnRFQVJOYW1lKSkgewotCQkJCXJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TQU1FX0NMSUVOVF9BTkRfU0VSVklDRV9FQVJTLAotCQkJCQkJbmV3IFN0cmluZ1tdIHsgIkVBUiIgfSkpOwotCQkJfQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NmQ0OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZjQ1NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13c2MtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTAyNjA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0MDJlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIE5vdiAxOSAxMzo1OTo1NiBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUzZWRkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDE6MjAgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTBjN2FhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmFudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZWxlY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3Jlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjguMCwzLjAuMCkiLCAKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb247YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamVtO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbWY7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW1md29ya2JlbmNoLmludGVncmF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2U7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2UudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmZvcm1zO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYjhjYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSBzY2hlbWEvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfYXNzZW1ibGUuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2Fzc2VtYmxlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY3NjY3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfYXNzZW1ibGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2RlcGxveS5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfZGVwbG95LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NmYzg2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfZGVwbG95LmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9kZXZlbG9wLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9kZXZlbG9wLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1OWUyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfZGV2ZWxvcC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfaW5zdGFsbC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfaW5zdGFsbC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MjI1MDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2luc3RhbGwuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X25vbmUuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X25vbmUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWM4ZmE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9ub25lLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9ydW4uanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X3J1bi5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2M2FjNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X3J1bi5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfdGVzdC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfdGVzdC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2Yjk0NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X3Rlc3QuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L2NvbmZpZ3VyZV9oYW5kbGVycy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvY29uZmlndXJlX2hhbmRsZXJzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTExM2M4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvY29uZmlndXJlX2hhbmRsZXJzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9nZW5lcmF0ZWRfc2FtcGxlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9nZW5lcmF0ZWRfc2FtcGxlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiYTUxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvZ2VuZXJhdGVkX3NhbXBsZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvbmV3Y2xpZW50X3dlYnNlcnZfd2l6LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9uZXdjbGllbnRfd2Vic2Vydl93aXouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWUwNWZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9uZXdjbGllbnRfd2Vic2Vydl93aXouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9kdG9vbC9jb25maWd1cmVfaGFuZGxlcnMuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9kdG9vbC9jb25maWd1cmVfaGFuZGxlcnMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDYwZGQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvZHRvb2wvY29uZmlndXJlX2hhbmRsZXJzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvZHRvb2wvZ2VuZXJhdGVkX3NhbXBsZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2R0b29sL2dlbmVyYXRlZF9zYW1wbGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTBkMzk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvZHRvb2wvZ2VuZXJhdGVkX3NhbXBsZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9jb25maWdfaGFuZGxlcl93aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vY29uZmlnX2hhbmRsZXJfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxMTg5Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9jb25maWdfaGFuZGxlcl93aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vZ2VuX3NhbXBsZV93aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vZ2VuX3NhbXBsZV93aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWJhZmM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2dlbl9zYW1wbGVfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2ltcG9ydC13c2lsX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9pbXBvcnQtd3NpbF93aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjliZGIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2ltcG9ydC13c2lsX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9pbXBvcnRfd3Nfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2ltcG9ydF93c193aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzc4ZWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2ltcG9ydF93c193aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNjbGllbnRfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzY2xpZW50X3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMjMzNWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNjbGllbnRfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2ltcG9ydF93cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9pbXBvcnRfd3MuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDFmZTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2ltcG9ydF93cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9yZWdpc3RyeS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9yZWdpc3RyeS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDNjYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvcmVnaXN0cnkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUwX2Jncm91bmQuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUwX2Jncm91bmQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGE1Y2EwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMF9iZ3JvdW5kLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMV9iZ3JvdW5kLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMV9iZ3JvdW5kLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYxMjA3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTFfYmdyb3VuZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTJfYmdyb3VuZC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTJfYmdyb3VuZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NDFmZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUyX2Jncm91bmQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUzX2Jncm91bmQuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUzX2Jncm91bmQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWQ0ZTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlM19iZ3JvdW5kLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNF9iZ3JvdW5kLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNF9iZ3JvdW5kLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJiYmQ1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTRfYmdyb3VuZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTVfYmdyb3VuZC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTVfYmdyb3VuZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwODA2ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU1X2Jncm91bmQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU2X2Jncm91bmQuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU2X2Jncm91bmQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MThiY2ZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNl9iZ3JvdW5kLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NlcnZlcnMvZXhpc3Rpbmdfc2VydmVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zZXJ2ZXJzL2V4aXN0aW5nX3NlcnZlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmI2Y2I3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NlcnZlcnMvZXhpc3Rpbmdfc2VydmVyX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zZXJ2ZXJzL3NlcnZlcnNfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NlcnZlcnMvc2VydmVyc19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmI2Y2I3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NlcnZlcnMvc2VydmVyc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC9odG1sLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvaHRtbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZTdkYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC9odG1sLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvaW1wb3J0X3dzaWwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC9pbXBvcnRfd3NpbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOGE5NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC9pbXBvcnRfd3NpbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL3dzZGwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC93c2RsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZiODQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL3dzZGwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC93c2lsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvd3NpbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTkxNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC93c2lsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ODA3MDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNTE1ICAgMTQxNTM2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwNzA4MjAgICAxOTE1ODUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA3MDkxNyAgIDIwMjMwMyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDgwMzI1ICAgMTg0NzYxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIENvbnN1bXB0aW9uIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLUZFQVRVUkVfREVTQ1JJUFRJT049V2ViIHNlcnZpY2VzCi1XRUJTRVJWSUNFU19DQVRFR09SWT1XZWIgc2VydmljZXMKLQotWFBfd3NJbXBsPVdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9ucwotWFBfd3NDbGllbnRJbXBsPVdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbnMKLVhQX3J1bnRpbWVzPVdlYiBzZXJ2aWNlIHJ1bnRpbWVzCi1YUF9zZXJ2aWNlUnVudGltZXM9Q29tYmluYXRpb24gb2YgYSBXZWIgc2VydmljZSBydW5pbWUsIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSwgYW5kIHJlcXVpcmVkIGZhY2V0cwotWFBfY2xpZW50UnVudGltZXM9Q29tYmluYXRpb24gb2YgYSBXZWIgc2VydmljZSBydW5pbWUsIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLCBhbmQgcmVxdWlyZWQgZmFjZXRzCi1YUF90ZXN0ZXI9V2ViIHNlcnZpY2UgdGVzdCBmYWNpbGl0aWVzCi0KLVhQX1BVQkxJQ19VRERJX1JFR0lTVFJZX1RZUEVTPVB1YmxpYyBVRERJIFJlZ2lzdHJ5IFR5cGVzCi1YUF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVM9UHJpdmF0ZSBVRERJIFJlZ2lzdHJ5IFR5cGVzCi1YUF9XRUJfU0VSVklDRV9DTElFTlRfVFlQRVM9V2ViIFNlcnZpY2UgQ2xpZW50IFR5cGVzCi1YUF9XRUJfU0VSVklDRV9URVNUPVdlYiBTZXJ2aWNlIFRlc3QKLVhQX1dFQl9TRVJWSUNFX1NFUlZFUl9SVU5USU1FX1RZUEVTPVdlYiBTZXJ2aWNlIFNlcnZlciBSdW50aW1lIFR5cGVzCi1YUF9XRUJfU0VSVklDRV9DTElFTlRfUFJPSkVDVF9UWVBFPWNsaWVudFByb2plY3RUeXBlCi1YUF9PQkpFQ1RfU0VMRUNUSU9OX1dJREdFVD1vYmplY3RTZWxlY3Rpb25XaWRnZXQKLQotIwotIyBXaXphcmRzLgotIwotV0laQVJEX1RJVExFX1dTQz1XZWIgU2VydmljZSBDbGllbnQKLQotUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19DTElFTlQ9V2ViIFNlcnZpY2UgQ2xpZW50Ci1QTFVHSU5fSU1QT1JUX1dJWkFSRF9OQU1FX1dTPVdlYiBTZXJ2aWNlCi1QTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX0NMSUVOVD1BY2Nlc3MgYW4gZXhpc3RpbmcgWE1MIHdlYiBzZXJ2aWNlCi1QTFVHSU5fSU1QT1JUX1dJWkFSRF9ERVNDX1dTPUEgd2l6YXJkIGZvciBpbXBvcnRpbmcgYSB3ZWIgc2VydmljZQotSU1QT1JUX1dJWkFSRF9ERVNDX1dTSUw9SW1wb3J0IFdTREwgcmVmZXJlbmNlcyB0byBhIFdTSUwgZG9jdW1lbnQKLQotIwotIyBXZWIgU2FtcGxlcyBJRHMKLSMKLVNBTVBMRV9UWVBFX1dFQlNFUlZJQ0VTX0lEPVdlYiBTZXJ2aWNlIFNhbXBsZSBKU1BzCi0KLSMKLSMgUG9wLXVwIGFjdGlvbnMKLSMKLUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZPUdlbmVyYXRlIENsaWVudAotQUNUSU9OX0dFTl9TQU1QTEU9R2VuZXJhdGUgSkFYLVJQQyBKU1BzCi0KLSMKLSMgRGlhbG9ncwotIwotQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9KQVZBX1BST1hZX0RJQUxPRz1IaWRlICZHZW5lcmF0ZSBKYXZhIGJlYW4gUHJveHkgRGlhbG9nCi1DSEVDS0JPWF9TSE9XX1BST1hZMlNBTVBMRV9ESUFMT0c9SGlkZSAmUHJveHkgVG8gU2FtcGxlIEdlbmVyYXRpb24gRGlhbG9nCi1UT09MVElQX1BQQURfQ0hFQ0tCT1hfV1NETDJQUk9YWT1IaWRlIHRoZSBkaWFsb2cgZm9yIGdlbmVyYXRpbmcgdGhlIEphdmEgYmVhbiBwcm94eSBhY3Rpb24uCi1UT09MVElQX1BQQURfQ0hFQ0tCT1hfUFJPWFkyU0FNUExFPUhpZGUgdGhlIGRpYWxvZyBmb3IgZ2VuZXJhdGluZyB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uIGFjdGlvbi4KLQotIwotIyAgICAgICBXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBDYXRlZ29yaWVzCi0KLVBSRUZFUkVOQ0VfQ0FURUdPUllfU0VSVkVSX1JVTlRJTUU9U2VydmVyIGFuZCBSdW50aW1lCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1BST0pFQ1RfVE9QT0xPR1k9UHJvamVjdCBUb3BvbG9neQotUFJFRkVSRU5DRV9DQVRFR09SWV9URVNUX0ZBQ0lMSVRZPVRlc3QgRmFjaWxpdHkgRGVmYXVsdHMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfRElBTE9HUz1Qb3B1cCBEaWFsb2cgU2VsZWN0aW9uCi0KLQotIwotIyBXZWJTZXJ2aWNlVGVzdFBhZ2UKLSMKLVdTRVhQTE9SRVJfSUQ9V2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0KLSMKLSMgUHVibGljVURESVJlZ2lzdHJ5VHlwZQotIwotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUD1TQVAgVURESSBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUF9URVNUPVNBUCBVRERJIFRlc3QgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9YTUVUSE9EUz1YTWV0aG9kcyBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX05UVENPTU09TlRUIENvbW11bmljYXRpb25zIFJlZ2lzdHJ5Ci0KLSMKLSMgV1NJTCBwcm94eQotIwotSU1QT1JUX1dJWkFSRF9OQU1FX1dTSUw9V1NJTAotUE9QVVBfR0VORVJBVEVfV1NJTD1HZW5lcmF0ZSBXU0lMCi0KLSMKLSMgV2ViIFNlcnZpY2UgU2VydmVyIFJ1bnRpbWUgVHlwZQotIwotV0VCU0VSVklDRVRZUEVfTkFNRV9XU0RMPVNrZWxldG9uIEphdmEgYmVhbiBXZWIgU2VydmljZQotV0VCU0VSVklDRVRZUEVfTkFNRV9KQVZBPUphdmEgYmVhbiBXZWIgU2VydmljZQotCi0jCi0jIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCi0jCi1KQVZBX1BST1hZPUphdmEgUHJveHkKLSMKLSMgQ2xpZW50IHByb2plY3QgdHlwZQotIwotTEFCRUxfQ0xJRU5UX1RZUEVfV0VCPVdlYgotTEFCRUxfQ0xJRU5UX1RZUEVfRUpCPUVKQgotTEFCRUxfQ0xJRU5UX1RZUEVfQVBQX0NMSUVOVD1BcHBsaWNhdGlvbiBDbGllbnQKLUxBQkVMX0NMSUVOVF9UWVBFX0NPTlRBSU5FUkxFU1M9SmF2YQotCi0jCi0jIEhhbmRsZXJzIENvbmZpZ3VyYXRpb24gd2l6YXJkIHBhZ2UKLSMKLVBPUFVQX0FERF9IQU5ETEVSUz1Db25maWd1cmUgSGFuZGxlcnMKLVBPUFVQX0NPTkZJR19DTElFTlRfSEFORExFUlM9Q29uZmlndXJlIENsaWVudCBIYW5kbGVycwotTEFCRUxfSEFORExFUlNfQ09ORklHPUNvbmZpZ3VyZSBIYW5kbGVycwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNDE2MWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJwdWJsaWNVRERJUmVnaXN0cnlUeXBlIgotICAgICAgbmFtZT0iJVhQX1BVQkxJQ19VRERJX1JFR0lTVFJZX1RZUEVTIi8+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIGxpa2VseSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludAotICAgICAgaWQ9InByaXZhdGVVRERJUmVnaXN0cnlUeXBlIgotICAgICAgbmFtZT0iJVhQX1BSSVZBVEVfVURESV9SRUdJU1RSWV9UWVBFUyIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJ3ZWJTZXJ2aWNlVGVzdCIKLSAgICAgIG5hbWU9IiVYUF9XRUJfU0VSVklDRV9URVNUIgotICAgICAgc2NoZW1hPSJzY2hlbWEvd2ViU2VydmljZVRlc3QuZXhzZCIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsLCB0aG91Z2ggbGlrZWx5IHRvIGJlIG1hZGUgcHVibGljIHdpdGggY2hhbmdlcyBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJvYmplY3RTZWxlY3Rpb25XaWRnZXQiCi0gICAgICBuYW1lPSIlWFBfT0JKRUNUX1NFTEVDVElPTl9XSURHRVQiCi0gICAgICBzY2hlbWE9InNjaGVtYS9vYmplY3RTZWxlY3Rpb25XaWRnZXQuZXhzZCIvPgotCi0gICA8IS0tIFVEREkgUmVnaXN0cnkgVHlwZXMgLS0+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucHVibGljVURESVJlZ2lzdHJ5VHlwZSI+Ci0gICAgICA8cHVibGljVURESVJlZ2lzdHJ5VHlwZQotICAgICAgICAgICAgbmFtZT0iJVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5U0FQVGVzdCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5U0FQVGVzdCI+Ci0gICAgICA8L3B1YmxpY1VERElSZWdpc3RyeVR5cGU+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5wdWJsaWNVRERJUmVnaXN0cnlUeXBlIj4KLSAgICAgIDxwdWJsaWNVRERJUmVnaXN0cnlUeXBlCi0gICAgICAgICAgICBuYW1lPSIlUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5U0FQIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQudWRkaS5QdWJsaWNVRERJUmVnaXN0cnlTQVAiPgotICAgICAgPC9wdWJsaWNVRERJUmVnaXN0cnlUeXBlPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucHVibGljVURESVJlZ2lzdHJ5VHlwZSI+Ci0gICAgICA8cHVibGljVURESVJlZ2lzdHJ5VHlwZQotICAgICAgICAgICAgbmFtZT0iJVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9YTUVUSE9EUyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5WE1ldGhvZHMiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzIj4KLSAgICAgIDwvcHVibGljVURESVJlZ2lzdHJ5VHlwZT4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnB1YmxpY1VERElSZWdpc3RyeVR5cGUiPgotICAgICAgPHB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfTlRUQ09NTSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbSI+Ci0gICAgICA8L3B1YmxpY1VERElSZWdpc3RyeVR5cGU+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSBUZXN0IEZhY2lsaXRpZXMgLS0+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2ViU2VydmljZVRlc3QiPgotCi0gICAgICA8d2ViU2VydmljZVRlc3QKLSAgICAgICAgICAgIG1ldGhvZHNuZWVkZWQ9InRydWUiCi0gICAgICAgICAgICBuYW1lPSIlU0FNUExFX1RZUEVfV0VCU0VSVklDRVNfSUQiCi0gICAgICAgICAgICBqYXZhPSJ0cnVlIgotICAgICAgICAgICAgY29kZWdlbj0idHJ1ZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0Lndzc2FtcGxlLldlYlNlcnZpY2VXU1NhbXBsZUV4ZWN1dGFibGUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XZWJTZXJ2aWNlU2FtcGxlVGVzdCI+Ci0gICAgICA8L3dlYlNlcnZpY2VUZXN0PgotCi0gICAgICA8d2ViU2VydmljZVRlc3QKLSAgICAgICAgICAgIG1ldGhvZHNuZWVkZWQ9ImZhbHNlIgotICAgICAgICAgICAgbmFtZT0iJVdTRVhQTE9SRVJfSUQiCi0gICAgICAgICAgICBqYXZhPSJmYWxzZSIKLSAgICAgICAgICAgIGNvZGVnZW49ImZhbHNlIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuZXhwbG9yZXIuV2ViU2VydmljZUV4cGxvcmVyRXhlY3V0YWJsZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LmV4cGxvcmVyLldlYlNlcnZpY2VFeHBsb3JlckV4ZWN1dGFibGUiPgotICAgICAgPC93ZWJTZXJ2aWNlVGVzdD4KLQotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gRHluYW1pYyBXaXphcmRzIC0tPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19DTElFTlQiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N0b29sMTYvbmV3Y2xpZW50X3dlYnNlcnZfd2l6LmdpZiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICVQTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX0NMSUVOVAotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgICAgIDxzZWxlY3Rpb24KLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiPgotICAgICAgICAgPC9zZWxlY3Rpb24+Ci0gICAgICA8L3dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiPgotICAgICAgPGR5bmFtaWNXaXphcmQKLSAgICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzY2xpZW50X3dpei5wbmciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZy5DbGllbnRXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgdGl0bGU9IiVXSVpBUkRfVElUTEVfV1NDIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9nZW5fc2FtcGxlX3dpei5wbmciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZy5HZW5TYW1wbGVXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgdGl0bGU9IiVXSVpBUkRfVElUTEVfV1NDIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmdlbnNhbXBsZXdpemFyZCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSBIYW5kbGVyIGV4dGVuc2lvbnMgLS0+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiPgotICAgICAgPGR5bmFtaWNXaXphcmQKLSAgICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL2NvbmZpZ19oYW5kbGVyX3dpei5wbmciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZy5Db25maWdTZXJ2aWNlSGFuZGxlcnNXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgdGl0bGU9IiVMQUJFTF9IQU5ETEVSU19DT05GSUciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5zZXJ2aWNlIj4KLSAgICAgIDwvZHluYW1pY1dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiPgotICAgICAgPGR5bmFtaWNXaXphcmQKLSAgICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL2NvbmZpZ19oYW5kbGVyX3dpei5wbmciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZy5Db25maWdDbGllbnRIYW5kbGVyc1dpZGdldEJpbmRpbmciCi0gICAgICAgICAgICB0aXRsZT0iJUxBQkVMX0hBTkRMRVJTX0NPTkZJRyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmNsaWVudCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9jb25maWdfaGFuZGxlcl93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ29uZmlndXJlSGFuZGxlcnNXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgdGl0bGU9IiVMQUJFTF9IQU5ETEVSU19DT05GSUciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycyI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4gIAotICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmltcG9ydFdpemFyZHMiPgotICAgICAgPGNhdGVnb3J5Ci0gICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydC5jYXRlZ29yeSIKLSAgICAgICAgICAgICBuYW1lPSIlV0VCU0VSVklDRVNfQ0FURUdPUlkiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuaW1wb3J0V2l6YXJkcyI+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX0lNUE9SVF9XSVpBUkRfTkFNRV9XUyIKLSAgICAgICAgICAgIGljb249Imljb25zL2ltcG9ydF93cy5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaW1wb3J0LmNhdGVnb3J5IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaW1wb3J0Ij4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICVQTFVHSU5fSU1QT1JUX1dJWkFSRF9ERVNDX1dTCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9pbXBvcnRfd3Nfd2l6LnBuZyIKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fSU1QT1JUX1dJWkFSRF9OQU1FX1dTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuSW1wb3J0V1NXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmltcG9ydFdpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJUlNUE9SVF9XSVpBUkRfTkFNRV9XU0lMIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvd3NpbC9pbXBvcnRfd3NpbC5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaW1wb3J0LmNhdGVnb3J5IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaWxpbXBvcnQiPgotICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgICAgJUlNUE9SVF9XSVpBUkRfREVTQ19XU0lMCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9pbXBvcnQtd3NpbF93aXoucG5nIgotICAgICAgICAgICAgbmFtZT0iJUlNUE9SVF9XSVpBUkRfTkFNRV9XU0lMIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuSW1wb3J0V1NJTFdpZGdldEJpbmRpbmciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaWxpbXBvcnQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gUHJlZmVyZW5jZSBQYWdlcyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+Ci0KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9DQVRFR09SWV9TRVJWRVJfUlVOVElNRSIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5TZXJ2ZXJSdW50aW1lUHJlZmVyZW5jZVBhZ2UiPiAgICAgICAgICAgIAotICAgICAgPC9wYWdlPgotICAgICAgCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfRElBTE9HUyIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nc1ByZWZlcmVuY2VQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkiPgotICAgICAgPC9wYWdlPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfVEVTVF9GQUNJTElUWSIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuVGVzdEZhY2lsaXR5RGVmYXVsdHNQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuVGVzdEZhY2lsaXR5RGVmYXVsdHNQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9DQVRFR09SWV9QUk9KRUNUX1RPUE9MT0dZIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5uYW1lIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5Qcm9qZWN0VG9wb2xvZ3lQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UiPgotICAgICAgPC9wYWdlPgotICAgICAgCi0gICA8L2V4dGVuc2lvbj4KLQotCi0gICA8IS0tICJEb24ndCBTaG93IE1lIiBFeHRlbnNpb25zIC0tPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIj4KLQotICAgICAgPGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gICAgICAgICAgICBzaG93Y2hlY2tib3g9InRydWUiCi0gICAgICAgICAgICBuYW1lPSIlQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9KQVZBX1BST1hZX0RJQUxPRyIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IgotICAgICAgICAgICAgdG9vbHRpcD0iJVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9XU0RMMlBST1hZIgotICAgICAgICAgICAgaW5mb3BvcD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLlBQQUQwMDA0IgotICAgICAgICAgICAgYWx3YXlzaGlkZT0iZmFsc2UiCi0gICAgICAgICAgICBvYmplY3RpZHM9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC53c2RsIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC53c2lsIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC5zZXJ2aWNlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC53c2RsLnJlc291cmNlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC5zZXJ2aWNlcmVmIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICA8L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlPgotCi0gICAgICA8YWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX1BST1hZMlNBTVBMRV9ESUFMT0ciCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfUFJPWFkyU0FNUExFIgotICAgICAgICAgICAgaW5mb3BvcD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLlBQQUQwMDA1IgotICAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW5zYW1wbGV3aXphcmQuZmlsZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW5zYW1wbGV3aXphcmQuamF2YSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW5zYW1wbGV3aXphcmQiPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZT4KLQotICAgICAgPGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gICAgICAgICAgICBzaG93Y2hlY2tib3g9ImZhbHNlIgotICAgICAgICAgICAgYWx3YXlzaGlkZT0iZmFsc2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vud3NpbCI+Ci0gICAgICA8L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlPgotCi0gICAgICA8IS0tIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gICAgICAgICAgICBzaG93Y2hlY2tib3g9ImZhbHNlIgotICAgICAgICAgICAgYWx3YXlzaGlkZT0iZmFsc2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5lZGl0b3IiPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSAtLT4KLQotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gUG9wdXBzIC0tPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW53c2lsIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfR0VORVJBVEVfV1NJTCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NpbGltcG9ydCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkLndzZGwiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2lsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC53c2lsIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IiouamF2YSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW5zYW1wbGV3aXphcmQuZmlsZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5fU0FNUExFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmdlbnNhbXBsZXdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuQ29tcGlsYXRpb25Vbml0IgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi5qYXZhIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmdlbnNhbXBsZXdpemFyZC5qYXZhIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTl9TQU1QTEUiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuc2VydmljZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW53c2lsLnNlcnZpY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9HRU5FUkFURV9XU0lMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaWxpbXBvcnQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0id2Vic2VydmljZXMueG1sIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9BRERfSEFORExFUlMiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5zZXJ2aWNlIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci5zZXJ2aWNlIgotICAgICAgICAgICAgYWRhcHRhYmxlPSJ0cnVlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQUREX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5zZXJ2aWNlIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgCi0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWJzZXJ2aWNlLldlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5lZGl0b3IubmF2R3JvdXAiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9BRERfSEFORExFUlMiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgPHZpc2liaWxpdHk+Ci0JCQk8b2JqZWN0U3RhdGUKLSAgICAgICAgICAgICAgICAgIG5hbWU9InR5cGUiCi0gICAgICAgICAgICAgICAgICB2YWx1ZT0iSGFuZGxlcnMiPgotICAgICAgICAgICAgPC9vYmplY3RTdGF0ZT4KLSAgICAgICAgIDwvdmlzaWJpbGl0eT4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgICAgCi0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLndzZGxSZXMiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9BRERfSEFORExFUlMiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLnNlcnZpY2UiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAgICAgICAKLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0id2Vic2VydmljZXNjbGllbnQueG1sIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLnhtbGZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9DT05GSUdfQ0xJRU5UX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuY2xpZW50Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9ImVqYi1qYXIueG1sIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLmVqYmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9DT05GSUdfQ0xJRU5UX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuY2xpZW50Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgIAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSJ3ZWIueG1sIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLndlYmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9DT05GSUdfQ0xJRU5UX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuY2xpZW50Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAKLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci5hcHBmaWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQ09ORklHX0NMSUVOVF9IQU5ETEVSUyIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmNsaWVudCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAKLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5lZGl0b3Iuc2VydmljZXJlZiIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0NPTkZJR19DTElFTlRfSEFORExFUlMiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmNsaWVudCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgICAgIAotICAgICAgCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NkbC5yZXNvdXJjZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWYiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC5zZXJ2aWNlcmVmIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbCIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vud3NpbC53c2RsLnJlc291cmNlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfR0VORVJBVEVfV1NJTCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2lsaW1wb3J0Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWYiCi0gICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmdlbndzaWwuc2VydmljZXJlZiI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0dFTkVSQVRFX1dTSUwiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NpbGltcG9ydCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gT2JqZWN0IFNlbGVjdGlvbiBXaWRnZXRzIC0tPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLm9iamVjdFNlbGVjdGlvbldpZGdldCI+Ci0gICAgICA8b2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSmF2YUJlYW5TZWxlY3Rpb25MYXVuY2hhYmxlIgotICAgICAgICAgICAgZXh0ZXJuYWxfbW9kaWZ5PSJ0cnVlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5KYXZhQmVhblNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIHRyYW5zZm9ybWVyPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSmF2YUJlYW5TZWxlY3Rpb25UcmFuc2Zvcm1lciI+Ci0gICAgICA8L29iamVjdFNlbGVjdGlvbldpZGdldD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLm9iamVjdFNlbGVjdGlvbldpZGdldCI+Ci0gICAgICA8b2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkVKQlNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIGV4dGVybmFsX21vZGlmeT0iZmFsc2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkVKQlNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIHRyYW5zZm9ybWVyPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uVHJhbnNmb3JtZXIiPgotICAgICAgPC9vYmplY3RTZWxlY3Rpb25XaWRnZXQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5vYmplY3RTZWxlY3Rpb25XaWRnZXQiPgotICAgICAgPG9iamVjdFNlbGVjdGlvbldpZGdldAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uV2lkZ2V0IgotICAgICAgICAgICAgZXh0ZXJuYWxfbW9kaWZ5PSJ0cnVlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uV2lkZ2V0IgotICAgICAgICAgICAgdHJhbnNmb3JtZXI9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uVHJhbnNmb3JtZXIiPgotICAgICAgPC9vYmplY3RTZWxlY3Rpb25XaWRnZXQ+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBtYWRlIHB1YmxpYyB3aXRoIGNoYW5nZXMgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJ3c0ltcGwiIG5hbWU9IiVYUF93c0ltcGwiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBtYWRlIHB1YmxpYyB3aXRoIGNoYW5nZXMgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJ3c0NsaWVudEltcGwiIG5hbWU9IiVYUF93c0NsaWVudEltcGwiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBtYWRlIHB1YmxpYyB3aXRoIGNoYW5nZXMgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJydW50aW1lcyIgbmFtZT0iJVhQX3J1bnRpbWVzIiAvPgotICAgCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsLCB0aG91Z2ggbGlrZWx5IHRvIGJlIG1hZGUgcHVibGljIHdpdGggY2hhbmdlcyBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InNlcnZpY2VSdW50aW1lcyIgbmFtZT0iJVhQX3NlcnZpY2VSdW50aW1lcyIgLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBtYWRlIHB1YmxpYyB3aXRoIGNoYW5nZXMgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJjbGllbnRSdW50aW1lcyIgbmFtZT0iJVhQX2NsaWVudFJ1bnRpbWVzIiAvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsLCB0aG91Z2ggbGlrZWx5IHRvIGJlIG1hZGUgcHVibGljIHdpdGggY2hhbmdlcyBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InRlc3RlciIgbmFtZT0iJVhQX3Rlc3RlciIvPgotCi08IS0tIFRlc3QgRXh0ZW5zaW9ucyBiZWdpbm5pbmcgIC0tPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkudGVzdGVyIj4KLSAgPHRlc3RlcgotICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VTYW1wbGVUZXN0IgotICAgIGxhYmVsPSIlU0FNUExFX1RZUEVfV0VCU0VSVklDRVNfSUQiCi0gICAgdGVzdFdTREw9Im5vIgotICAgIHRlc3RKYXZhUHJveHk9InllcyIKLSAgICB3c0NsaWVudEltcGxJZHM9Im9yZy5lY2xpcHNlLmpzdC53cy5jbGllbnQudHlwZS5qYXZhIgotICAgIG1vZHVsZXR5cGVzPSJ3ZWJtb2R1bGUiCi0gICAgbWV0aG9kc25lZWRlZD0idHJ1ZSIKLSAgICBjb2RlR2VuZXJhdGVkPSJ0cnVlIgotICAgIHNlcnZlclJlcXVpcmVkPSJ0cnVlIgotICAgIGlzZGVmYXVsdGpheHJwYz0idHJ1ZSIKLSAgICBhbGxvd0NsaWVudFJ1bnRpbWVzUmVzdHJpY3Rpb249InRydWUiCi0gICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGUuR1NUQ1dlYlNlcnZpY2VUZXN0ZXIiPgotICA8L3Rlc3Rlcj4KLTwvZXh0ZW5zaW9uPgotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnRlc3RlciI+Ci0gIDx0ZXN0ZXIKLSAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3Jlci5XZWJTZXJ2aWNlRXhwbG9yZXIiCi0gICAgbGFiZWw9IiVXU0VYUExPUkVSX0lEIgotICAgIHRlc3RXU0RMPSJ5ZXMiCi0gICAgdGVzdEphdmFQcm94eT0ibm8iCi0gICAgd3NDbGllbnRJbXBsSWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSIKLSAgICBtb2R1bGV0eXBlcz0id2VibW9kdWxlIgotICAgIG1ldGhvZHNuZWVkZWQ9ImZhbHNlIgotICAgIGNvZGVHZW5lcmF0ZWQ9ImZhbHNlIgotICAgIHNlcnZlclJlcXVpcmVkPSJmYWxzZSIKLSAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3Jlci5XU0VXZWJTZXJ2aWNlVGVzdGVyIj4KLSAgPC90ZXN0ZXI+Ci08L2V4dGVuc2lvbj4KLQotPCEtLSBUZXN0IEV4dGVuc2lvbnMgZW5kICAtLT4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzSW1wbCI+Ci0gIDx3ZWJTZXJ2aWNlSW1wbAotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSIKLSAgICAgICAgICAgIGxhYmVsPSIlV0VCU0VSVklDRVRZUEVfTkFNRV9KQVZBIgotICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YWRhdGE9IkZpbGUgSVJlc291cmNlIENvbXBpbGF0aW9uVW5pdCIKLSAgICAgICAgICAgIGV4dGVuc2lvbk1ldGFkYXRhPSIuamF2YSAuY2xhc3MiCi0gICAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5KYXZhQmVhblNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIG1lcmdlckNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkphdmFNZXJnZXIiPgotICA8L3dlYlNlcnZpY2VJbXBsPgotPC9leHRlbnNpb24+ICAgCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NDbGllbnRJbXBsIj4KLSAgPHdlYlNlcnZpY2VDbGllbnRJbXBsCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiCi0gICAgICAgICAgICBsYWJlbD0iJUpBVkFfUFJPWFkiPgotICA8L3dlYlNlcnZpY2VDbGllbnRJbXBsPgotPC9leHRlbnNpb24+ICAgCi0KLSAgIAk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0UmVnaXN0cnkiPgotICAgICAgIDx3aWRnZXRGYWN0b3J5ICAgCi0gICAgICAgICAgICAgaWQ9IlN0YXJ0Q2xpZW50U2VydmVyIgotICAgICAgICAgICAgIGluc2VydEJlZm9yZUNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnRSdW5Db21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyLlN0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeSIvPgotICAgIDwvZXh0ZW5zaW9uPgotICAgIAotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hbnRTY2VuYXJpbyI+Ci0gICAgICAgIDxhbnRTY2VuYXJpbwotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hbnQuQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudCIKLSAgICAgICAgICAgIHNjZW5hcmlvVHlwZT0iY2xpZW50Ii8+Ci0gICAgIDwvZXh0ZW5zaW9uPgotICAgICAKLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFudERhdGFNYXBwaW5nIj4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJJbml0aWFsSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIiLz4KLQotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50LlJ1bnRpbWVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnQuU2VydmVySWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLQotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50LlR5cGVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iVGVzdFNlcnZpY2UiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlRlc3RTZXJ2aWNlIi8+Ci0KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1vbml0b3JTZXJ2aWNlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJNb25pdG9yU2VydmljZSIvPiAgICAgICAgICAgICAgCi0KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5SdW50aW1lSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnQuVHlwZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+ICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudFByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRQcm9qZWN0TmFtZSIvPiAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnRQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLkNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFByb2plY3ROYW1lIi8+ICAgICAgICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudEVhclByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRFYXJQcm9qZWN0TmFtZSIvPiAgICAgICAgIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50Q29tcG9uZW50VHlwZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50Q29tcG9uZW50VHlwZSIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50LlJ1bnRpbWVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50IgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgICAgICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50IgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgICAgICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5UeXBlSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25GcmFnbWVudCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIAotICAgICAgICAgPCEtLSBtYXBwaW5ncyBmb3IgbGlzdGluZyBvcHRpb25zIC0tPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iTGlzdFJ1bnRpbWVzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkxpc3RPcHRpb25zQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9Ikxpc3RSdW50aW1lcyIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50LlN0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIiCi0gICAgICAgICAgICAgIC8+IAotCi0gIAkJPG1hcAotICAgICAgICAgICAgICBrZXk9Ikxpc3RTZXJ2ZXJzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkxpc3RPcHRpb25zQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9Ikxpc3RTZXJ2ZXJzIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQuU3RyaW5nMkJvb2xlYW5UcmFuc2Zvcm1lciIKLSAgICAgICAgICAgICAgLz4gIAkKLSAgICAgIDwvZXh0ZW5zaW9uPiAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL2NsaWVudFByb2plY3RUeXBlLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvY2xpZW50UHJvamVjdFR5cGUuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0MGRiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvY2xpZW50UHJvamVjdFR5cGUuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9ImNsaWVudFByb2plY3RUeXBlIiBuYW1lPSJDbGllbnQgUHJvamVjdCBUeXBlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGRlZmluZXMgY2xpZW50IGNvbnRhaW5lciB0eXBlcy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY2xpZW50UHJvamVjdFR5cGUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJjbGllbnRQcm9qZWN0VHlwZSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImluY2x1ZGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgYSBibGFuayBkZWxpbWl0ZWQgbGlzdCBvZiBQcm9qZWN0IE5hdHVyZSBJZHMuICBUaGUgbGlzdGVkIElEcyBpbmRpY2F0ZSB0aGF0IHRoaXMgdHlwZSBvbmx5IHdvcmtzIHdpdGggdGhlc2UgcGFydGljdWxhciBwcm9qZWN0IHR5cGVzLiAgRm9yIGV4YW1wbGUsIGlmIHRoaXMgdHlwZSBvbmx5IHdvcmtzIHdpdGggd2ViIHByb2plY3RzIGFuIElEIG9mIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi5XZWJOYXR1cmUgd291bGQgYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgYSBibGFuayBkZWxpbWl0ZWQgbGlzdCBvZiBQcm9qZWN0IE5hdHVyZSBJZHMuICBUaGUgbGlzdGVkIElEcyBpbmRpY2F0ZSB0aGF0IHRoaXMgdHlwZSBET0VTIE5PVCB3b3JrIHdpdGggdGhlc2UgcGFydGljdWxhciBwcm9qZWN0IHR5cGVzLiAgRm9yIGV4YW1wbGUsIGlmIHRoaXMgdHlwZSBkb2VzIG5vdCB3b3JrIHdpdGggd2ViIHByb2plY3RzIGFuIElEIG9mIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi5XZWJOYXR1cmUgd291bGQgYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgbGFiZWwgcmVwcmVzZW50cyB0aGlzIGNsaWVudCBwcm9qZWN0IHR5cGUuICBJdCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgc28gaXQgbXVzdCBiZSB0cmFuc2xhdGVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgY2xpZW50IHByb2plY3QgdHlwZS4gIFRoaXMgaWRlbnRpZmllciBpcyByZWZlcmVuY2VkIGluIHRoZSBjbGllbnRQcm9qZWN0VHlwZSBhdHRyaWJ1dGUgb2YgdGhlIHdlYlNlcnZpY2VDbGllbnRUeXBlIGVsZW1lbnQgb2YgYW4gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndlYlNlcnZpY2VDbGllbnRUeXBlIGV4dGVuc2lvbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL29iamVjdFNlbGVjdGlvbldpZGdldC5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL29iamVjdFNlbGVjdGlvbldpZGdldC5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTJkNDI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS9vYmplY3RTZWxlY3Rpb25XaWRnZXQuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9Im9iamVjdFNlbGVjdGlvbldpZGdldCIgbmFtZT0iT2JqZWN0IFNlbGVjdGlvbiBXaWRnZXQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9Im9iamVjdFNlbGVjdGlvbldpZGdldCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9Im9iamVjdFNlbGVjdGlvbldpZGdldCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZW50cnkgYWxsb3dzIGFuIGV4dGVuZGVyIHRvIGFkZCBuZXcgd2F5cyBvZiBicm93c2luZy9maW5kaW5nIGFydGlmYWN0cyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgZGVmaW5lcyBTZWxlY3Rpb24gV2lkZ2V0IHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgT2JqZWN0IFNlbGVjdGlvbiBwYWdlIG9mIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcy4gIFRoaXMgY2xhc3MgbXVzdCBpbXBsZW1lbnQgdGhlIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5JT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGludGVyZmFjZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlkIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBvYmplY3RTZWxlY3Rpb25XaWRnZXQgZWxlbWVudC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0cmFuc2Zvcm1lciIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBjbGFzcyB0aGF0IG11c3QgaW1wbGVtZW50IHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyIGludGVyZmFjZS4gIFRoaXMgaW50ZXJmYWNlIGNvbnRhaW5zIGEgdHJhbnNmb3JtIG1ldGhvZC4gIEV2ZW4gdGhvdWdoIHRoZSB0eXBlIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXIgYW5kIHRoZSByZXR1cm4gdmFsdWUgYXJlIG9mIHR5cGUgT2JqZWN0IGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhleSB3aWxsIGJlIHVzZWQgd2l0aCB0aGUgdHlwZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbiBtZXRob2QgYWxsb3dzIHRoZSBleHRlbmRlciB0byBtb2RpZnkgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHRvIGFuIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdCB0aGF0IGlzIG1vcmUgcmVhZGlseSB1c2FibGUgYnkgdGhlIHJ1bnRpbWUgc2VydmVyIHR5cGUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZXh0ZXJuYWxfbW9kaWZ5IiB0eXBlPSJib29sZWFuIiB1c2U9ImRlZmF1bHQiIHZhbHVlPSJmYWxzZSI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIG9iamVjdCBzZWxlY3Rpb24gY2FuIGJlIHNwZWNpZmllZCBvdXRzaWRlIHRoZSBvYmplY3Qgc2VsZWN0aW9uIHdpZGdldC4gIEFuIGV4YW1wbGUsIG9mIHRoaXMgd291bGQgYmUgb24gcGFnZSBvbmUgb2YgdGhlIHdlYiBzZXJ2aWNlIHdpZGdldCBieSB0eXBpbmcgaW4gYSB0ZXh0IGZpZWxkLiAgSWYgc2V0IHRvIHRydWUsIHRoZSBleHRlbmRlciBvZiBPYmplY3RTZWxlY3Rpb25XaWRnZXQgbXVzdCBwcm92aWRlIGEgdmFsaWRhdGUoU3RyaW5nKSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgYW55IG5lY2Vzc2FyeSB2YWxpZGF0aW9uIGFuZCBzZXRzIHRoZSBvYmplY3Qgc2VsZWN0aW9uIG9uIHRoZSB3aWRnZXQuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyBmYWxzZS4gIEFueSB0ZXh0IGZpZWxkcyB3aWxsIGJlIHNldCB0byBSRUFEX09OTFkgc3R5bGUgc28gdGhlIG9iamVjdCBzZWxlY3Rpb24gY2FuIG9ubHkgYmUgbW9kaWZpZWQgd2l0aCBvYmplY3Qgc2VsZWN0aW9uIHdpZGdldCBpbXBsZW1lbnRhdGlvbiBkaXJlY3RseS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VDbGllbnRUeXBlLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZUNsaWVudFR5cGUuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiZGQzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZUNsaWVudFR5cGUuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9IndlYlNlcnZpY2VDbGllbnRUeXBlIiBuYW1lPSJXZWIgU2VydmljZSBDbGllbnQgVHlwZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZGVmaW5lcyBXZWIgU2VydmljZSBDbGllbnQgdHlwZXMuICBUaGlzIGlzIGRvbmUgYnkgZGVmaW5pbmcgd2ViU2VydmljZUNsaWVudFR5cGUgZWxlbWVudHMuICBUaGVzZSBlbGVtZW50cyByZWZlciB0byBhIHNlcnZlciBhbmQgYSBXZWIgU2VydmljZSBydW50aW1lLiAgVGhlc2UgYXJlIHJlc3BlY3RpdmVseSBkZWZpbmVkIGluIHRoZSB3ZWJTZXJ2aWNlU2VydmVyIGVsZW1lbnQgYW5kIHRoZSB3ZWJTZXJ2aWNlUnVudGltZSBlbGVtZW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlU2VydmVyIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VSdW50aW1lIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VDbGllbnRUeXBlIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id2ViU2VydmljZVNlcnZlciI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgc2VydmVyIHR5cGUuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImZhY3RvcnlJZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBmYWN0b3J5IGlkIGZvciBhIHNlcnZlci4gIFRoaXMgaWQgaXMgZGVmaW5lZCBieQotdGhlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5zZXJ2ZXJUeXBlcyBleHRlbnNpb24gcG9pbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaXNEZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgaWYgdGhpcyBzZXJ2ZXIgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgc2VydmVyLiAgTm90ZTogIHRoaXMgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIGluIHRoZSBhYnNlbmNlIG9mIG90aGVyIGluZm9ybWF0aW9uLiAgSWYgdGhlIHVzZXIgaGFzIGRlZmluZWQgYSBwYXJ0aWN1bGFyIHNlcnZlciBhcyB0aGVpciBkZWZhdWx0IHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gIFNob3VsZCBjb250YWluIGEgdmFsdWUgb2YgZWl0aGVyICZxdW90O3RydWUmcXVvdDsgb3IgJnF1b3Q7ZmFsc2UmcXVvdDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGxvY2FsIElEIGZvciB0aGlzIHNlcnZlci4gIFRoZSBzZXJ2ZXIgYXR0cmlidXRlIG9mIHRoZSB3ZWJzZXJ2aWNlQ2xpZW50VHlwZSBlbGVtZW50IHJlZmVycyB0byB0aGlzIElELgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJ1bnRpbWVUeXBlSWRzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGlzIGN1cnJlbnRseSBhIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGRldmVsb3BtZW50LiAgUGxlYXNlLCBkbyBub3QgdXNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlUnVudGltZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgbGFiZWwgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGZvciB0aGlzIHJ1bnRpbWUuICBUaGVyZWZvcmUsIGlzIG11c3QgYmUgdHJhbnNsYXRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoaXMgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaXNEZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgaWYgdGhpcyBydW50aW1lIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHJ1bnRpbWUuICBOb3RlOiAgdGhpcyBkZWZhdWx0IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGFic2VuY2Ugb2Ygb3RoZXIgaW5mb3JtYXRpb24uICBJZiB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIHBhcnRpY3VsYXIgcnVudGltZSBhcyB0aGVpciBkZWZhdWx0IHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gIFNob3VsZCBjb250YWluIGEgdmFsdWUgb2YgZWl0aGVyICZxdW90O3RydWUmcXVvdDsgb3IgJnF1b3Q7ZmFsc2UmcXVvdDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iajJlZXZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBKMkVFIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGlzIHJ1bnRpbWUuICBUaGUgYWxsb3dhYmxlIHZhbHVlcyBhcmUgMTIsIDEzLCBhbmQgMTQuICBJZiBtb3JlIHRoYW4gb25lIEoyRUUgdmVyc2lvbiBpcyBzdXBwb3J0ZWQgZWFjaCBKMkVFIGxldmVsIHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aCBhIGJsYW5rIGRlbGltaXRlci4oZWcuIGlmIEoyRUUgdmVyc2lvbiAxLjIgYW5kIDEuMyBhcmUgc3VwcG9ydGVkIHRoZW4gdGhpcyBhdHRyaWJ1dGUgc3RyaW5nIHdvdWxkIGJlICZxdW90OzEyIDEzJnF1b3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlQ2xpZW50VHlwZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgV2ViIFNlcnZpY2VzIGNsaWVudCB0eXBlLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBJRCBmb3IgdGhpcyBXZWIgU2VydmljZSBDbGllbnQgdHlwZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIG5hbWUgZm9yIHRoaXMgV2ViIFNlcnZpY2UgQ2xpZW50IHR5cGUuICBJdCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgc28gaXQgbXVzdCBiZSB0cmFuc2xhdGVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsaWVudFR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUga2luZCBvZiBXZWIgU2VydmljZSBDbGllbnQgdHlwZSBiZWluZyBkZWZpbmVkLiAoaWUuIHRoZSB2YWx1ZSBvZiB0aGUgSmF2YSBjbGllbnQgaXMgb3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icnVudGltZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBydW50aW1lIElEIGZvciB0aGlzIFdlYiBTZXJ2aWNlIGNsaWVudCB0eXBlLiAgVGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyB3ZWJTZXJ2aWNlUnVudGltZSBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InNlcnZlciIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHNlcnZlciBmb3IgdGhpcyBXZWIgU2VydmljZSBjbGllbnQgdHlwZS4gIFRoZXJlIHNob3VsZCBiZSBhIGNvcnJlc3BvbmRpbmcgd2ViU2VydmljZVNlcnZlciBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsaWVudFByb2plY3RUeXBlIiB0eXBlPSJzdHJpbmciIHVzZT0iZGVmYXVsdCIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRQcm9qZWN0VHlwZS5XZWIiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc3BhY2UgZGVsaW1pdGVkIGxpc3Qgb2YgY2xpZW50IHByb2plY3QgdHlwZSBpZHMgc3VwcG9ydGVkIGJ5IHRoaXMgYnkgdGhpcyB3ZWJTZXJ2aWNlQ2xpZW50VHlwZSBlbGVtZW50LiAgVGhlIGNsaWVudCBwcm9qZWN0IHR5cGUgaWRzIGFyZSBkZWZpbmVkIGJ5IHRoZSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UHJvamVjdFR5cGUgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRldmVsb3BCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGRldmVsb3BtZW50IHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBmaXJzdCBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFzc2VtYmx5QmluZGluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcy4gIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIHRoZSBDb21tYW5kcyBhbmQgVUkgZWxlbWVudHMgYXNzb2NpYXRlIHdpdGggSjJFRSBhc3NlbWJseSBwaGFzZS4gIFRoZSBDb21tYW5kIGFuZCBVSSBlbGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgYWx3YXlzIGNvbWUgYWZ0ZXIgdGhlIGRldmVsb3BtZW50IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXBsb3lCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGRlcGxveSBwaGFzZS4gIFRoZSBDb21tYW5kIGFuZCBVSSBlbGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgYWx3YXlzIGNvbWUgYWZ0ZXIgdGhlIGFzc2VtYmx5IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbnN0YWxsQmluZGluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcy4gIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIHRoZSBDb21tYW5kcyBhbmQgVUkgZWxlbWVudHMgYXNzb2NpYXRlIHdpdGggSjJFRSBpbnN0YWxsIHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBhZnRlciB0aGUgZGVwbG95IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZS5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmRkNzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS93ZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9IndlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSIgbmFtZT0iV2ViIFNlcnZpY2UgU2VydmVyIFJ1bnRpbWUgVHlwZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZGVmaW5lcyBXZWIgU2VydmljZSBTZXJ2ZXIgdHlwZXMuICBUaGlzIGlzIGRvbmUgYnkgZGVmaW5pbmcgd2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlIGVsZW1lbnRzLiAgVGhlc2UgZWxlbWVudHMgcmVmZXIgdG8gYSBzZXJ2ZXIgYW5kIGEgV2ViIFNlcnZpY2UgcnVudGltZS4gIFRoZXNlIGFyZSByZXNwZWN0aXZlbHkgZGVmaW5lZCBpbiB0aGUgd2ViU2VydmljZVNlcnZlciBlbGVtZW50IGFuZCB0aGUgd2ViU2VydmljZVJ1bnRpbWUgZWxlbWVudC4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZVNlcnZlciIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlUnVudGltZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZVR5cGUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlU2VydmVyIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgc3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBzZXJ2ZXIgdHlwZS4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZmFjdG9yeUlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGZhY3RvcnkgaWQgZm9yIGEgc2VydmVyLiAgVGhpcyBpZCBpcyBkZWZpbmVkIGJ5Ci10aGUgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnNlcnZlclR5cGVzIGV4dGVuc2lvbiBwb2ludC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc0RlZmF1bHQiIHR5cGU9ImJvb2xlYW4iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGluZGljYXRlcyBpZiB0aGlzIHNlcnZlciBzaG91bGQgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzZXJ2ZXIuICBOb3RlOiAgdGhpcyBkZWZhdWx0IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGFic2VuY2Ugb2Ygb3RoZXIgaW5mb3JtYXRpb24uICBJZiB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIHBhcnRpY3VsYXIgc2VydmVyIGFzIHRoZWlyIGRlZmF1bHQgdGhlbiB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLiAgU2hvdWxkIGNvbnRhaW4gYSB2YWx1ZSBvZiBlaXRoZXIgJnF1b3Q7dHJ1ZSZxdW90OyBvciAmcXVvdDtmYWxzZSZxdW90Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgbG9jYWwgSUQgZm9yIHRoaXMgc2VydmVyLiAgVGhlIHNlcnZlciBhdHRyaWJ1dGUgb2YgdGhlIHdlYnNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSBlbGVtZW50IHJlZmVycyB0byB0aGlzIElELgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJ1bnRpbWVUeXBlSWRzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGlzIGN1cnJlbnRseSBhIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGRldmVsb3BtZW50LiAgUGxlYXNlLCBkbyBub3QgdXNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlUnVudGltZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgbGFiZWwgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGZvciB0aGlzIHJ1bnRpbWUuICBUaGVyZWZvcmUsIGlzIG11c3QgYmUgdHJhbnNsYXRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoaXMgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaXNEZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgaWYgdGhpcyBydW50aW1lIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHJ1bnRpbWUuICBOb3RlOiAgdGhpcyBkZWZhdWx0IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGFic2VuY2Ugb2Ygb3RoZXIgaW5mb3JtYXRpb24uICBJZiB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIHBhcnRpY3VsYXIgcnVudGltZSBhcyB0aGVpciBkZWZhdWx0IHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gIFNob3VsZCBjb250YWluIGEgdmFsdWUgb2YgZWl0aGVyICZxdW90O3RydWUmcXVvdDsgb3IgJnF1b3Q7ZmFsc2UmcXVvdDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iajJlZXZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBKMkVFIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGlzIHJ1bnRpbWUuICBUaGUgYWxsb3dhYmxlIHZhbHVlcyBhcmUgMTIsIDEzLCBhbmQgMTQuICBJZiBtb3JlIHRoYW4gb25lIEoyRUUgdmVyc2lvbiBpcyBzdXBwb3J0ZWQgZWFjaCBKMkVFIGxldmVsIHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aCBhIGJsYW5rIGRlbGltaXRlci4oZWcuIGlmIEoyRUUgdmVyc2lvbiAxLjIgYW5kIDEuMyBhcmUgc3VwcG9ydGVkIHRoZW4gdGhpcyBhdHRyaWJ1dGUgc3RyaW5nIHdvdWxkIGJlICZxdW90OzEyIDEzJnF1b3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZWxlbWVudCBzcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIFdlYiBTZXJ2aWNlcyBzZXJ2ZXIgcnVudGltZSB0eXBlLiAgQW4gZW50cnkgZm9yIHRoaXMgZWxlbWVudCBkZWZpbmVzIGEgdmFsaWQgY29tYmluYXRpb24gb2Ygc2VydmVyLCBydW50aW1lLCBhbmQgd2Vic2VydmljZSB0eXBlLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBJRCBmb3IgdGhpcyBXZWIgU2VydmljZSBTZXJ2ZXIgUnVudGltZSB0eXBlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgbmFtZSBmb3IgdGhpcyBXZWIgU2VydmljZSBTZXJ2ZXIgUnVudGltZSB0eXBlLiAgSXQgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIHNvIGl0IG11c3QgYmUgdHJhbnNsYXRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJydW50aW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIHJ1bnRpbWUgSUQgZm9yIHRoaXMgV2ViIFNlcnZpY2UgU2VydmVyIFJ1bnRpbWUgdHlwZS4gIFRoZXJlIHNob3VsZCBiZSBhIGNvcnJlc3BvbmRpbmcgd2ViU2VydmljZVJ1bnRpbWUgZWxlbWVudCB3aXRoIGFuIGF0dHJpYnV0ZSBjYWxsZWQgaWQgdGhhdCBoYXMgdGhpcyB2YWx1ZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzZXJ2ZXIiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBzZXJ2ZXIgZm9yIHRoaXMgV2ViIFNlcnZpY2UgU2VydmVyIFJ1bnRpbWUgdHlwZS4gIFRoZXJlIHNob3VsZCBiZSBhIGNvcnJlc3BvbmRpbmcgd2ViU2VydmljZVNlcnZlciBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUga2luZCBvZiBXZWIgU2VydmljZSBSdW50aW1lIHR5cGUgYmVpbmcgZGVmaW5lZC4gKGVnLiB0aGUgdmFsdWUgb2YgYSBKYXZhIEJlYW4gV2Vic2VydmljZSBpcyBvcmcuZWNsaXBzZS5qc3Qud3MudHlwZS5qYXZhKQotVGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyB3ZWJTZXJ2aWNlVHlwZSBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRldmVsb3BCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGRldmVsb3BtZW50IHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBmaXJzdCBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFzc2VtYmx5QmluZGluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcy4gIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIHRoZSBDb21tYW5kcyBhbmQgVUkgZWxlbWVudHMgYXNzb2NpYXRlIHdpdGggSjJFRSBhc3NlbWJseSBwaGFzZS4gIFRoZSBDb21tYW5kIGFuZCBVSSBlbGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgYWx3YXlzIGNvbWUgYWZ0ZXIgdGhlIGRldmVsb3BtZW50IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXBsb3lCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGRlcGxveSBwaGFzZS4gIFRoZSBDb21tYW5kIGFuZCBVSSBlbGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgYWx3YXlzIGNvbWUgYWZ0ZXIgdGhlIGFzc2VtYmx5IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbnN0YWxsQmluZGluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcy4gIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIHRoZSBDb21tYW5kcyBhbmQgVUkgZWxlbWVudHMgYXNzb2NpYXRlIHdpdGggSjJFRSBpbnN0YWxsIHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBhZnRlciB0aGUgZGVwbG95IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlRUpCTW9kdWxlIiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBJZiB0aGUgV2Vic2VydmljZSBmb3IgdGhpcyBTZXJ2ZXIgUnVudGltZSBUeXBlIGlzIHJlcXVpcmVkIHRvIGJlIGluIGFuIEVKQiBtb2R1bGUgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRydWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVxdWlyZVdlYk1vZHVsZSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgSWYgdGhlIFdlYnNlcnZpY2UgZm9yIHRoaXMgU2VydmVyIFJ1bnRpbWUgVHlwZSBpcyByZXF1aXJlZCB0byBiZSBpbiBhbiBXZWIgbW9kdWxlIHRoZW4gdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHNob3VsZCBiZSB0cnVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlVHlwZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IGRlZmluZXMgYSBwYXJ0aWN1bGFyIFdlYiBzZXJ2aWNlIGtpbmQuICBTdWNoIGFzIGEgSmF2YSBCZWFuIHdlYiBzZXJ2aWNlLCBhIFNrZWxldG9uIFdlYiBzZXJ2aWNlLCBhbiBFSkIgIFdlYiBzZXJ2aWNlLCBldGMuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYSB1bmlxdWUgSUQgZm9yIHRoaXMgV2ViIHNlcnZpY2UgdHlwZS4gIEl0IGlzIHJlZmVyZW5jZWQgaW4gdGhlIHdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSBlbGVtZW50IHdpdGggdGhlIHR5cGUgYXR0cmlidXRlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSB0cmFuc2xhdGFibGUgbGFiZWwgZm9yIHRoaXMgd2ViIHNlcnZpY2UgdHlwZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXNvdXJjZVR5cGVNZXRhZGF0YSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGJsYW5rIGRlbGltaXRlZCBsaXN0IGNsYXNzIE5hbWVzLiAoaWUuTm8gcGFja2FnZSBwcmVmaXgpICBUaGUgY2xhc3NlcyBsaXN0ZWQgZGVmaW5lIHRoZSBhbGxvd2FibGUgRWNsaXBzZSByZXNvdXJjZXMgdGhhdCB0aGlzIHdlYiBzZXJ2aWNlIHR5cGUgdW5kZXJzdGFuZHMgYW5kIHR1cm4gaW50byBhIFdlYiBzZXJ2aWNlLiAgRm9yIGV4YW1wbGUsIGlmIGEgdXNlciBzZWxlY3RzIGEgSmF2YSBzb3VyY2UgZmlsZSBpbiB0aGUgcGFja2FnZSBleHBsb3JlciB2aWV3IGFuZCB0aGVuIHN0YXJ0cyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCBhIENvbXBpbGF0aW9uVW5pdCBvYmplY3Qgd2lsbCBiZSBwYXNzZWQgaW4gYXMgcGFydCBvZiBhbiBJU3RydWN0dXJlZFNlbGVjdGlvbi4gIEJ5IHB1dHRpbmcgJnF1b3Q7Q29tcGlsYXRpb25Vbml0JnF1b3Q7IGFzIG9uZSBvZiB0aGUgY2xhc3NlcyBpbiB0aGlzIGF0dHJpYnV0ZSBpdCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHR5cGUgY2FuIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIGZyb20gdGhlIENvbXBpbGF0aW9uVW5pdC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJleHRlbnNpb25NZXRhZGF0YSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBhbGxvd3MgdGhpcyBXZWIgc2VydmljZSB0eXBlIHRvIHJlc3RyaWN0IG5hbWVzIG9mIHRoZSBpbnB1dCBmaWxlcyB0aGF0IGl0IHVuZGVyc3RhbmRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB2YWx1ZSBpcyBzZXQgdG8gJnF1b3Q7LmphdmEgLmNsYXNzJnF1b3Q7IGl0IGluZGljYXRlcyB0aGF0IHRoaXMgV2ViIHNlcnZpY2UgdHlwZSBvbmx5IHVuZGVyc3RhbmRzIHJlc291cmNlIG5hbWVzIHRoYXQgZW5kIHdpdGggLmphdmEgb3IgZW5kIHdpdGggLmNsYXNzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im9iamVjdFNlbGVjdGlvbldpZGdldCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPbiBwYWdlIDIgb2YgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZCB0aGVyZSBpcyBhbiBPYmplY3Qgc2VsZWN0aW9uIHBhZ2UuICBUaGlzIHNlbGVjdGlvbiBwYWdlIGNhbiBiZSBjdXN0b21pemVkIHVzaW5nIHRoaXMgYXR0cmlidXRlLCBzaW5jZSBkaWZmZXJlbnQgV2ViIHNlcnZpY2UgdHlwZXMgbWF5IG5lZWQgZGlmZmVyZW50IG1ldGhvZHMgb2Ygc2VsZWN0aW5nIHRoZW0uICBUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRoZSBpZCBvZiBhIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5vYmplY3RTZWxlY3Rpb25XaWRnZXQgZXh0ZW5zaW9uLiAgVGhlIHByZWRlZmluZWQgaWQgZm9yIGEgSmF2YSBzZWxlY3Rpb24gd2lkZ2V0IGlzIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5KYXZhQmVhblNlbGVjdGlvbldpZGdldC4gIFRoZSBwcmVkZWZpbmVkIGlkIGZvciBhIFdTREwgc2VsZWN0aW9uIHdpZGdldCBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldC4gIFRoZSBwcmVkZWZpbmVkIGlkIGZvciBhbiBFSkIgc2VsZWN0aW9uIHdpZGdldCBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uV2lkZ2V0LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImluY2x1ZGVOYXR1cmVzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgYmxhbmsgZGVsaW1pdGVkIGxpc3Qgb2YgUHJvamVjdCBOYXR1cmUgSWRzLiAgVGhlIGxpc3RlZCBJRHMgaW5kaWNhdGUgdGhhdCB0aGlzIHR5cGUgb25seSB3b3JrcyB3aXRoIHRoZXNlIHBhcnRpY3VsYXIgcHJvamVjdCB0eXBlcy4gIEZvciBleGFtcGxlLCBpZiB0aGlzIHR5cGUgb25seSB3b3JrcyB3aXRoIHdlYiBwcm9qZWN0cyBhbiBJRCBvZiBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIuV2ViTmF0dXJlIHdvdWxkIGJlIHNwZWNpZmllZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJleGNsdWRlTmF0dXJlcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGJsYW5rIGRlbGltaXRlZCBsaXN0IG9mIFByb2plY3QgTmF0dXJlIElkcy4gIFRoZSBsaXN0ZWQgSURzIGluZGljYXRlIHRoYXQgdGhpcyB0eXBlIERPRVMgTk9UIHdvcmsgd2l0aCB0aGVzZSBwYXJ0aWN1bGFyIHByb2plY3QgdHlwZXMuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB0eXBlIGRvZXMgbm90IHdvcmsgd2l0aCB3ZWIgcHJvamVjdHMgYW4gSUQgb2Ygb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViLldlYk5hdHVyZSB3b3VsZCBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS93ZWJTZXJ2aWNlVGVzdC5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VUZXN0LmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYmY2MzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VUZXN0LmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiIGlkPSJ3ZWJTZXJ2aWNlVGVzdCIgbmFtZT0iV2ViIFNlcnZpY2UgVGVzdCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBkZWZpbmVzIFdlYiBzZXJ2aWNlIHRlc3QgZmFjaWxpdGllcyB0aGF0IGNhbiBiZSBwbHVnZ2VkIGludG8gdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlVGVzdCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VUZXN0Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibWV0aG9kc25lZWRlZCIgdHlwZT0iYm9vbGVhbiI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIGlmIHRoaXMgdGVzdCBmYWNpbGl0eSBuZWVkIHRvIG1ldGhvZHMgZnJvbSBhIHByb3h5IGJlYW4uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGZvciB0aGlzIHRlc3QgZmFjaWxpdHkuICBJdCBtdXN0IGJlIHRyYW5zbGF0ZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iamF2YSIgdHlwZT0iYm9vbGVhbiI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyB0ZXN0IGZhY2lsaXR5IGlzIGludGVuZGVkIGZvciBjbGllbnRzIHRoYXQgZ2VuZXJhdGUgYSBKYXZhIGJlYW4gYXMgb3V0cHV0LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvZGVnZW4iIHR5cGU9ImJvb2xlYW4iPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGluZGljYXRlcyBpZiB0aGlzIHRlc3QgZmFjaWxpdHkgZ2VuZXJhdGVzIGNvZGUgb3Igbm90LCBzdWNoIGFzIEpTUCBmaWxlcy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGNsYXNzIG5hbWUuICBUaGUgY2xhc3MgbXVzdCBpbXBsZW1lbnQgb3JnLmVjbGlwc2UuanN0LndzLmV4dC5XZWJTZXJ2aWNlRXhlY3V0YWJsZS4gIFRoaXMgY2xhc3MgYWxsb3dzIHRoZSBleHRlbmRlciB0byBwcm92aWRlIHRoZSBDb21tYW5kcyB0aGF0IHdpbGwgZXhlY3V0ZSBmb3IgdGhpcyB0ZXN0IGZhY2lsaXR5LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyB0ZXN0IGZhY2lsaXR5LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL0NvbnN1bXB0aW9uVUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzIzYjMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNjUzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAgMjAwNjAyMDQgMTI0MTQzICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0jICAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotIyAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjAzMjEgICAxMjg4Mjcgam9hbiAtIEpvYW4gSGFnZ2FydHkKLSMgMjAwNjAzMjkgICAxMjgwNjkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0jIDIwMDYwNDA3ICAgMTM1NDQzIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSMgMjAwNjA0MTEgICAxMzYxMzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNjA0MTcgICAxMzYzOTAgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjA0MTggICAxMzYzMzUgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA2MDQyMCAgIDEzNjE1OCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjA0MjAgICAxMjA3MTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA2MDUxMCAgIDE0MTExNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjA1MDkgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA2MDYwMiAgIDE0NTA1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA3MDQyNyAgIDE3NzM2MCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDcxMDMxICAgMTQwNTE4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSMgMjAwODAzMTggICAyMTMzMzAgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIE5vbi1jb252ZW50aW9uYWwgSmF2YSBuYW1pbmcgcHJldmVudHMgY3JlYXRpbmcgV2ViIFNlcnZpY2VzIChjbGllbnQpCi0jIDIwMDgwMzI2ICAgMTcxNzA1IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBpbXByb3ZlIEFudFRhc2sgZXJyb3JzIHJlcG9ydAotIyAyMDA4MDMyNSAgIDE4NDc2MSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0jIDIwMDgwMzMxICAgMjI1MDMyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFcnJvciBtc2cgcmVmZXJlbmNlcyByZW5hbWVkIGNhdGVnb3J5Ci0jIDIwMDgwNDE2ICAgMjE1MDg0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotCi1QTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX0NMSUVOVD1XZWIgU2VydmljZSBDbGllbnQKLSMKLSMgV2ViIHNlcnZpY2VzICJJbnRlcm5ldCIgcHJlZmVyZW5jZXMgZXh0ZW5zaW9uLgotIwotCi0jCi0jIFdlYiBTYW1wbGVzIElEcwotIwotCi0jCi0jIFBvcC11cCBhY3Rpb25zCi0jCi1BQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWT1HZW5lcmF0ZSBDbGllbnQKLQotIwotIyBEaWFsb2dzCi0jCi1DSEVDS0JPWF9TSE9XX0dFTkVSQVRFX0pBVkFfUFJPWFlfRElBTE9HPVNob3cgR2VuZXJhdGUgSmF2YSBiZWFuIFByb3h5IERpYWxvZwotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1dTREwyUFJPWFk9U2hvdyB0aGUgZGlhbG9nIGZvciBnZW5lcmF0aW5nIHRoZSBKYXZhIGJlYW4gcHJveHkgYWN0aW9uLgotCi0jCi0jICAgICAgIFdlYiBTZXJ2aWNlcyBQcmVmZXJhbmNlIFBhZ2VzCi0jCi0jIENhdGVnb3JpZXMKLSMKLQotIwotIyBQcmVmZXJlbmNlcyBUb29sdGlwcwotIwotCi0jCi0jU2VydmVyIFJ1bnRpbWUgUHJlZmVyZW5jZXMKLSMKLVRPT0xUSVBfU1JQRl9DT01CT19TRVJWRVI9VGhlIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZQotVE9PTFRJUF9TUlBGX0NPTUJPX1JVTlRJTUU9VGhlIHByZWZlcnJlZCBXZWIgc2VydmljZSBydW50aW1lCi1UT09MVElQX1NSUEZfQ09NQk9fSjJFRT1UaGUgcHJlZmVycmVkIEoyRUUgdmVyc2lvbgotCi0jCi0jIEdlbmVyYWwgbWVzc2FnZXMuCi0jCi1NU0dfRVJST1JfVEFTS19FWENFUFRFRD1JV0FCMDIzNEUgQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQuIERldGFpbHM6IHswfQotTVNHX0VSUk9SX05PX1NFUlZFUl9SVU5USU1FPU5vIHN1aXRhYmxlIHNlcnZlciBjYW4gYmUgZm91bmQgZm9yIHRoZSB7MH0gV2ViIHNlcnZpY2UgcnVudGltZS4gR28gdG8gV2luZG93ID4gUHJlZmVyZW5jZXMuIFNlbGVjdCBTZXJ2ZXIgPiBSdW50aW1lIEVudmlyb25tZW50cyBhbmQgY29uZmlndXJlIGEgc2VydmVyIHJ1bnRpbWUuCi1NU0dfRVJST1JfTk9fU0VSVkVSX1JVTlRJTUVfSU5TVEFMTEVEPXswfSBpcyBub3QgaW5zdGFsbGVkLiBHbyB0byBXaW5kb3cgPiBQcmVmZXJlbmNlcy4gU2VsZWN0IFNlcnZlciA+IFJ1bnRpbWUgRW52aXJvbm1lbnRzIGFuZCBjb25maWd1cmUgYSBzZXJ2ZXIgcnVudGltZS4KLQotCi0jCi0jIFdpemFyZCBwYWdlIHRhc2sgbGFiZWxzIGFuZCBkZXNjcmlwdGlvbnMKLSMgKHVzZWQgb25seSBmb3IgcHJvZ3Jlc3MgaW5kaWNhdGlvbikuCi0jCi0KLSMKLSMgQ29tbW9uIHdpemFyZCBzdHJpbmdzLgotIwotTEFCRUxfRk9MREVSX05BTUU9Rm9sZGVyOgotTEFCRUxfSlNQX0ZPTERFUl9OQU1FPUpTUCBmb2xkZXI6Ci1MQUJFTF9XRUJfUFJPSkVDVF9OQU1FPVdlYiBwcm9qZWN0OgotTEFCRUxfV0VCU0VSVklDRVRZUEU9JldlYiBzZXJ2aWNlIHR5cGU6Ci1MQUJFTF9XRUJTRVJWSUNFSU1QTD1TZXJ2aWNlIGltcGxlbWVudGF0aW9uOgotTEFCRUxfV0VCU0VSVklDRURFRj1TZXJ2aWNlIGRlZmluaXRpb246Ci1MQUJFTF9KMkVFX1ZFUlNJT049SjJFRSB2ZXJzaW9uOgotTEFCRUxfTkE9Ti9BCi0KLUJVVFRPTl9CUk9XU0U9QiZyb3dzZS4uLgotQlVUVE9OX0JST1dTRV9GSUxFUz1Ccm93c2UgZmlsZXMuLi4KLQotQk9UVE9NVVBfTEFCRUw9Qm90dG9tIHVwCi1UT1BET1dOX0xBQkVMPVRvcCBkb3duCi1DTElFTlRfTEFCRUw9Q2xpZW50Ci1DT01CSU5FRF9UWVBFX0FORF9SVU5USU1FX0xBQkVMPXswfSB7MX0KLQotIwotIyBXaXphcmRzLgotIwotV0laQVJEX1RJVExFX1dTQz1XZWIgU2VydmljZSBDbGllbnQKLQotIwotIyBXZWJTZXJ2aWNlUHJvamVjdFBhZ2UKLSMKLVBBR0VfVElUTEVfV1NfUFJPSkVDVD1XZWIgU2VydmljZXMKLVBBR0VfREVTQ19XU19TRVJWSUNFPVNlbGVjdCBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gb3IgZGVmaW5pdGlvbiBhbmQgbW92ZSB0aGUgc2xpZGVycyB0byBzZXQgdGhlIGxldmVsIG9mIHNlcnZpY2UgYW5kIGNsaWVudCBnZW5lcmF0aW9uLgotUEFHRV9ERVNDX1dTX0NMSUVOVD1TZWxlY3QgYSBzZXJ2aWNlIGRlZmluaXRpb24gYW5kIG1vdmUgdGhlIHNsaWRlciB0byBzZXQgdGhlIGxldmVsIG9mIGNsaWVudCBnZW5lcmF0aW9uLgotQlVUVE9OX1NUQVJUX1dFQl9QUk9KRUNUPSZTdGFydCBXZWIgc2VydmljZSBpbiBXZWIgcHJvamVjdAotI0JVVFRPTl9ERVBMT1lfV0VCX1BST0pFQ1Q9RGVwbG95IFdlYiBzZXJ2aWNlIHRvIGEgc2VydmVyIHR5cGUKLUJVVFRPTl9JTlNUQUxMX1NFUlZJQ0VfV0VCX1BST0pFQ1Q9Jkluc3RhbGwgV2ViIHNlcnZpY2Ugb24gc2VydmVyCi1CVVRUT05fSU5TVEFMTF9DTElFTlRfV0VCX1BST0pFQ1Q9SW5zdGFsbCBXZWIgc2VydmljZSAmY2xpZW50IG9uIHNlcnZlciAobWFuYWdlZCBjbGllbnRzIG9ubHkpCi1HUk9VUF9TQ0VOQVJJT19TRVJWSUNFPVNlcnZpY2UKLUdST1VQX1NDRU5BUklPX0NMSUVOVD1DbGllbnQgcHJveHkKLUxBQkVMX1dFQlNFUlZJQ0VDTElFTlRUWVBFPSZDbGllbnQgdHlwZToKLQotVE9PTFRJUF9XU1dTQ0VOX1NFUlZJQ0VQUk9KRUNUX0xJTks9Q2xpY2sgb24gdGhlIGxpbmsgdG8gZWRpdCBzZXJ2aWNlIHByb2plY3QgYW5kIEVBUiBzZXR0aW5ncy4KLVRPT0xUSVBfV1NXU0NFTl9DTElFTlRQUk9KRUNUX0xJTks9Q2xpY2sgb24gdGhlIGxpbmsgdG8gZWRpdCBjbGllbnQgcHJvamVjdCBhbmQgRUFSIHNldHRpbmdzLgotCi1ESUFMT0dfVElUSUxFX1NFUlZJQ0VfSU1QTF9TRUxFQ1RJT049U2VsZWN0IFNlcnZpY2UgSW1wbGVtZW50YXRpb24KLURJQUxPR19USVRJTEVfU0VSVklDRV9ERUZfU0VMRUNUSU9OPVNlbGVjdCBTZXJ2aWNlIERlZmluaXRpb24KLURJQUxPR19USVRJTEVfU0VSVklDRV9QUk9KRUNUX1NFVFRJTkdTPVNwZWNpZnkgU2VydmljZSBQcm9qZWN0IFNldHRpbmdzCi1ESUFMT0dfVElUSUxFX0NMSUVOVF9QUk9KRUNUX1NFVFRJTkdTPVNwZWNpZnkgQ2xpZW50IFByb2plY3QgU2V0dGluZ3MKLQotIyBJdGVtcyBjb21tb24gdG8gV2ViU2VydmljZVJ1bnRpbWVTZWxlY3Rpb25QYWdlIGFuZCBXZWJTZXJ2aWNlQ2xpZW50UnVudGltZVNlbGVjdGlvblBhZ2UKLSMgV2ViU2VydmljZVJ1bnRpbWVTZWxlY3Rpb25QYWdlCi1MQUJFTF9TVU1NQVJZPUNvbmZpZ3VyYXRpb246Ci1MQUJFTF9TVU1NQVJZX05PX0NMSUVOVD1Db25maWd1cmF0aW9uOiBObyBjbGllbnQgZ2VuZXJhdGlvbi4KLVBBR0VfVElUTEVfV1NfUlVOVElNRV9TRUxFQ1RJT049U2VydmljZSBEZXBsb3ltZW50IENvbmZpZ3VyYXRpb24KLVBBR0VfREVTQ19XU19SVU5USU1FX1NFTEVDVElPTj1DaG9vc2UgZnJvbSB0aGUgbGlzdCBvZiBydW50aW1lcyBhbmQgZGVwbG95bWVudCBzZXJ2ZXJzLCBvciB1c2UgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCi1MQUJFTF9SVU5USU1FU19MSVNUPVdlYiBzZXJ2aWNlIHJ1bnRpbWU6Ci1MQUJFTF9TRVJWRVJTX0xJU1Q9U2VydmVyOgotTEFCRUxfRURJVF9CVVRUT049RWRpdC4uLgotTEFCRUxfU0VSVklDRV9FQVJfTU9EVUxFPVNlcnZpY2UgRUFSIG1vZHVsZToKLUxBQkVMX0NMSUVOVF9FQVJfTU9EVUxFPUNsaWVudCBFQVIgbW9kdWxlOgotTEFCRUxfQ0xJRU5UX01PRFVMRT1DbGllbnQgbW9kdWxlOgotTEFCRUxfU0VSVklDRV9NT0RVTEU9U2VydmljZSBtb2R1bGU6Ci1MQUJFTF9DTElFTlRfUFJPSkVDVD1DbGllbnQgcHJvamVjdDoKLUxBQkVMX1NFUlZJQ0VfUFJPSkVDVD1TZXJ2aWNlIHByb2plY3Q6Ci1MQUJFTF9DTElFTlRfRUFSX1BST0pFQ1Q9Q2xpZW50IEVBUiBwcm9qZWN0OgotTEFCRUxfU0VSVklDRV9FQVJfUFJPSkVDVD1TZXJ2aWNlIEVBUiBwcm9qZWN0OgotCi0jCi0jIENsaWVudCBjb21wb25lbnQgdHlwZSBsYWJlbHMKLSMKLUxBQkVMX0NMSUVOVF9DT01QX1RZUEVfV0VCPVdlYgotTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9FSkI9RUpCCi1MQUJFTF9DTElFTlRfQ09NUF9UWVBFX0FQUF9DTElFTlQ9QXBwbGljYXRpb24gQ2xpZW50Ci1MQUJFTF9DTElFTlRfQ09NUF9UWVBFX0NPTlRBSU5FUkxFU1M9SmF2YQotCi0KLVRPT0xUSVBfUFdSU19URVhUX1JVTlRJTUU9Q2xpY2sgb24gdGhlIGxpbmsgdG8gc3BlY2lmeSB0aGUgd2ViIHNlcnZpY2UgcnVudGltZS4KLVRPT0xUSVBfUFdSU19URVhUX1NFUlZFUj1DbGljayBvbiB0aGUgbGluayB0byBzcGVjaWZ5IGEgc2VydmVyLgotVE9PTFRJUF9QV1JTX0oyRUVfVkVSU0lPTj1KMkVFIHZlcnNpb24gdG8gYmUgdXNlZC4KLQotTEFCRUxfU0VMRUNUSU9OX1ZJRVdfVElUTEU9U2VydmVyLVNpZGUgRGVwbG95bWVudCBTZWxlY3Rpb246Ci1MQUJFTF9TRUxFQ1RJT05fVklFV19SVU5USU1FPUNob29zZSBXZWIgc2VydmljZSBydW50aW1lIGZpcnN0Ci1MQUJFTF9TRUxFQ1RJT05fVklFV19TRVJWRVI9Q2hvb3NlIHNlcnZlciBmaXJzdAotTEFCRUxfU0VMRUNUSU9OX1ZJRVdfRVhQTE9SRT1FeHBsb3JlIG9wdGlvbnMKLQotTEFCRUxfVFJFRV9FWElTVElOR19TRVJWRVJTPUV4aXN0aW5nIFNlcnZlcnMKLUxBQkVMX1RSRUVfU0VSVkVSX1RZUEVTPVNlcnZlciBUeXBlcwotCi1NU0dfTk9fT0JKRUNUX1NFTEVDVElPTj1TZWxlY3QgYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uLgotTVNHX05PX1NFUlZJQ0VfU0VMRUNUSU9OPVNlbGVjdCBhIHNlcnZpY2UgZGVmaW5pdGlvbi4KLU1TR19XQVJOX1NFUlZJQ0VfSU1QTF9OQU1JTkdfQ09OVkVOVElPTj1UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBzZWxlY3RlZCBkb2VzIG5vdCBmb2xsb3cgSmF2YSBuYW1pbmcgY29udmVudGlvbnMuCi1NU0dfSU5WQUxJRF9TRVJWSUNFX0lNUEw9VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gc2VsZWN0ZWQgaXMgaW52YWxpZC4KLU1TR19JTlZBTElEX1NFUlZJQ0VfREVGPVRoZSBzZXJ2aWNlIGRlZmluaXRpb24gc2VsZWN0ZWQgaXMgaW52YWxpZC4KLU1TR19JTlZBTElEX1NSVF9TRUxFQ1RJT05TPXswfSBkb2VzIG5vdCBzdXBwb3J0IHRoZSB7MX0gV2ViIHNlcnZpY2UgcnVudGltZS4gQ2hvb3NlIGEgZGlmZmVyZW50IHNlcnZlciBvciBydW50aW1lIHRvIHByb2NlZWQgdGhyb3VnaCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZC4KLU1TR19OT19SVU5USU1FPU5vIHJ1bnRpbWUgc3BlY2lmaWVkIGZvciB0aGUgezB9IHNjZW5hcmlvLgotTVNHX05PX1NFUlZFUj1ObyBzZXJ2ZXIgc3BlY2lmaWVkIGZvciB0aGUgezB9IHNjZW5hcmlvLgotTVNHX0VSUk9SX1NUVUJfT05MWT17MH0gaGFzIG9ubHkgc3R1YiBydW50aW1lcyBhc3NvY2lhdGVkIHdpdGggaXQuIENob29zZSBhIGRpZmZlcmVudCBzZXJ2ZXIgb3IgY29uZmlndXJlIGEgbm9uLXN0dWIgcnVudGltZSBpbiB0aGUgc2VydmVyIHByZWZlcmVuY2VzLiAKLU1TR19XQVJOX1NUVUJfT05MWT17MH0gaGFzIG9ubHkgc3R1YiBydW50aW1lcyBhc3NvY2lhdGVkIHdpdGggaXQgc28gdGhlIHNlcnZlciB3aWxsIG5vdCBiZSBjcmVhdGVkIG9yIHN0YXJ0ZWQuCi1NU0dfV0FSTl9OT19TRVJWSUNFX1NFUlZFUj1ObyBzZXJ2ZXIgaGFzIGJlZW4gc2VsZWN0ZWQuIFRoZSBXZWIgc2VydmljZSB3aWxsIG5vdCBiZSBkZXBsb3llZCwgaW5zdGFsbGVkLCBvciBydW4uCi1NU0dfV0FSTl9OT19DTElFTlRfU0VSVkVSPU5vIHNlcnZlciBoYXMgYmVlbiBzZWxlY3RlZC4gVGhlIFdlYiBzZXJ2aWNlIGNsaWVudCB3aWxsIG5vdCBiZSBkZXBsb3llZCwgaW5zdGFsbGVkLCBvciBydW4uCi0KLU1TR19TRVJWRVJfVEFSR0VUX01JU01BVENIPVRoZSBwcm9qZWN0LCB7MH0sIGhhcyBhIHNlcnZlciB0YXJnZXQgd2hpY2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgc2VsZWN0ZWQgc2VydmVyIHR5cGUKLU1TR19KMkVFX01JU01BVENIPVRoZSBwcm9qZWN0LCB7MH0sIGhhcyBhIGRpZmZlcmVudCBKMkVFIGxldmVsIGZyb20gdGhlIHNlbGVjdGVkIEoyRUUgbGV2ZWwKLU1TR19TRVJWSUNFX1BST0pFQ1RfRU1QVFk9VGhlIHNlcnZpY2UgcHJvamVjdCB7MH0gY2Fubm90IGJlIGVtcHR5LiBTZWxlY3QgYSBzZXJ2aWNlIHByb2plY3QgezB9LgotTVNHX1NFUlZJQ0VfUFJPSkVDVF9UWVBFX0VNUFRZPVNlbGVjdCBhIHNlcnZpY2UgcHJvamVjdCB0eXBlLgotTVNHX1NFUlZJQ0VfRUFSX0VNUFRZPVRoZSBzZXJ2aWNlIEVBUiB7MH0gY2Fubm90IGJlIGVtcHR5LiBTZWxlY3QgYSBzZXJ2aWNlIEVBUiB7MH0uCi1NU0dfQ0xJRU5UX1BST0pFQ1RfRU1QVFk9VGhlIGNsaWVudCBwcm9qZWN0IHswfSBjYW5ub3QgYmUgZW1wdHkuIFNlbGVjdCBhIGNsaWVudCBwcm9qZWN0IHswfS4KLU1TR19DTElFTlRfUFJPSkVDVF9UWVBFX0VNUFRZPVNlbGVjdCBhIGNsaWVudCBwcm9qZWN0IHR5cGUuCi1NU0dfQ0xJRU5UX0VBUl9FTVBUWT1UaGUgY2xpZW50IEVBUiB7MH0gY2Fubm90IGJlIGVtcHR5LiBTZWxlY3QgYSBjbGllbnQgRUFSIHswfS4KLQotTVNHX0lOVkFMSURfRUpCX1BST0pFQ1Q9ezB9IGlzIG5vdCBhbiBFSkIgcHJvamVjdC4gQ2hvb3NlIGFuIEVKQiBwcm9qZWN0LCBvciBlbnRlciBhIG5ldyBFSkIgcHJvamVjdCBuYW1lLgotTVNHX0lOVkFMSURfV0VCX1BST0pFQ1Q9ezB9IGlzIG5vdCBhIFdlYiBwcm9qZWN0LiBDaG9vc2UgYSBXZWIgcHJvamVjdCwgb3IgZW50ZXIgYSBuZXcgV2ViIHByb2plY3QgbmFtZS4KLU1TR19JTlZBTElEX1BST0pFQ1RfVFlQRT17MH0gaXMgbm90IGEgezF9IHByb2plY3QuIENob29zZSBhIHsxfSBwcm9qZWN0LCBvciBlbnRlciBhIG5ldyBwcm9qZWN0IG5hbWUuCi1NU0dfTU9EVUxFPW1vZHVsZQotTVNHX01PRFVMRV9OQU1FX0FORF9QUk9KRUNUX05BTUVfTk9UX1RIRV9TQU1FPVRoZSBmbGV4aWJsZSBwcm9qZWN0IHByZWZlcmVuY2UgaXMgb2ZmLiBUaGVyZWZvcmUsIHByb2plY3QgbmFtZXMgYW5kIG1vZHVsZSBuYW1lcyBtdXN0IGJlIHRoZSBzYW1lIGZvciBuZXcgbW9kdWxlcy4KLQotTVNHX1NFUlZJQ0VfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1Q9VGhlIHswfSBXZWIgc2VydmljZSBydW50aW1lIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlcnZpY2UgcHJvamVjdCB7MX0uCi1NU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNUPVRoZSB7MH0gc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlcnZpY2UgcHJvamVjdCB7MX0uCi1NU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9KQVZBUFJPSkVDVD1UaGUgezB9IHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBKYXZhIHByb2plY3QgezF9LgotTVNHX1NFUlZJQ0VfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFPVRoZSB7MH0gV2ViIHNlcnZpY2UgcnVudGltZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZXJ2aWNlIHByb2plY3QgdHlwZSB7MX0uCi1NU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURT1UaGUgezB9IHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZXJ2aWNlIHByb2plY3QgdHlwZSB7MX0uCi0KLU1TR19DTElFTlRfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1Q9VGhlIHswfSBXZWIgc2VydmljZSBydW50aW1lIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNsaWVudCBwcm9qZWN0IHsxfS4KLU1TR19DTElFTlRfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVD1UaGUgezB9IHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjbGllbnQgcHJvamVjdCB7MX0uCi1NU0dfQ0xJRU5UX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURT1UaGUgezB9IFdlYiBzZXJ2aWNlIHJ1bnRpbWUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY2xpZW50IHByb2plY3QgdHlwZSB7MX0uCi1NU0dfQ0xJRU5UX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFPVRoZSB7MH0gc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNsaWVudCBwcm9qZWN0IHR5cGUgezF9LgotCi1NU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfRUFSUz1Zb3VyIHNlbGVjdGVkIHNlcnZpY2UgYW5kIGNsaWVudCB7MH0gbW9kdWxlcyBoYXZlIHRoZSBzYW1lIG5hbWUuICBQcm9jZWVkaW5nIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIG1heSByZXN1bHQgaW4gcnVudGltZSBlcnJvcnMuCi1NU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfQ09NUE9ORU5UUz1Zb3VyIHNlbGVjdGVkIHNlcnZpY2UgYW5kIGNsaWVudCB7MH0gbW9kdWxlcyBoYXZlIHRoZSBzYW1lIG5hbWUuICBQcm9jZWVkaW5nIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIHJ1bnRpbWUgZXJyb3JzLgotTVNHX1NBTUVfQ0xJRU5UX0FORF9TRVJWSUNFX1BST0pFQ1RTPVlvdXIgc2VsZWN0ZWQgc2VydmljZSBhbmQgY2xpZW50IHByb2plY3RzIGFyZSB0aGUgc2FtZS4gIFByb2NlZWRpbmcgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gd2lsbCByZXN1bHQgaW4gZXJyb3JzLgotTVNHX1dST05HX0NMSUVOVF9QUk9KRUNUX1RZUEU9VGhlIHNlbGVjdGVkIGNsaWVudCBwcm9qZWN0LCB7MH0sIGlzIG5vdCBhIHsxfSBwcm9qZWN0LiBQbGVhc2Ugc2VsZWN0IGEgezF9IHByb2plY3Qgb3IgZW50ZXIgYSBuZXcgcHJvamVjdCBuYW1lLgotTVNHX0NMSUVOVF9TVUI9Y2xpZW50Ci1NU0dfU0VSVklDRV9TVUI9c2VydmljZQotTVNHX0dFTkVSQUxfUFJPSkVDVF9BTkRfRUFSPVNlbGVjdCB0aGUgezB9IHByb2plY3QgYW5kIHRoZSBFQVIgcHJvamVjdCB3aXRoIHdoaWNoIHlvdSB3YW50IGl0IHRvIGJlIGFzc29jaWF0ZWQuCi1NU0dfRUFSX1BST0pFQ1RfV0lMTF9CRV9DUkVBVEVEPUlmIGFuIEVBUiBvciBwcm9qZWN0IGRvZXMgbm90IGV4aXN0IG9yIGlzIGN1cnJlbnRseSB1bmFzc29jaWF0ZWQsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgXG5hc3NvY2lhdGVkIGFzIHJlcXVpcmVkIHdoZW4geW91IGNsaWNrIE5leHQuCi0KLU1TR19FQVJfV0lMTF9CRV9BU1NPQ0lBVEVEPVRoZSBzZWxlY3RlZCB7MH0gcHJvamVjdCB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSIHByb2plY3QuCi1NU0dfUFJPSkVDVF9XSUxMX0JFX0NSRUFURUQ9VGhlIHswfSBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQVIgcHJvamVjdC4KLU1TR19FQVJfV0lMTF9CRV9DUkVBVEVEPVRoZSB7MH0gRUFSIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2plY3QuCi1NU0dfUFJPSkVDVF9BTkRfRUFSX0NSRUFURUQ9VGhlIHswfSBwcm9qZWN0IGFuZCBFQVIgcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCBvbmUgYW5vdGhlci4KLQotTVNHX0NMSUVOVF9DQU5OT1RfQVNTT0NJQVRFPVRoZSBjbGllbnQgcHJvamVjdCwgezB9LCBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQVIsIHsxfS4gQ2hvb3NlIGFuIEVBUiB3aXRoIGEgSjJFRSBsZXZlbCBvZiB7Mn0gb3IgaGlnaGVyLgotTVNHX1NFUlZJQ0VfQ0FOTk9UX0FTU09DSUFURT1UaGUgc2VydmljZSBwcm9qZWN0LCB7MH0sIGNhbm5vdCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIEVBUiwgezF9LiBDaG9vc2UgYW4gRUFSIHdpdGggYSBKMkVFIGxldmVsIG9mIHsyfSBvciBoaWdoZXIuCi0KLU1TR19QUk9KRUNUX01VU1RfRVhJU1Q9Tm8gc2VydmVyIGNhbiBiZSBmb3VuZCBhbmQgezB9IGRvZXMgbm90IGV4aXN0LiBDaG9vc2UgYW4gZXhpc3RpbmcgcHJvamVjdCBvciB1c2UgdGhlIHByZWZlcmVuY2VzIHRvIGNvbmZpZ3VyZSBhIHNlcnZlciBydW50aW1lLiAgCi0KLQotIyBXZWJTZXJ2aWNlQ2xpZW50UnVudGltZVNlbGVjdGlvblBhZ2UKLVBBR0VfVElUTEVfV1NfQ0xJRU5UX1JVTlRJTUVfU0VMRUNUSU9OPUNsaWVudCBFbnZpcm9ubWVudCBDb25maWd1cmF0aW9uCi1QQUdFX0RFU0NfV1NfQ0xJRU5UX1JVTlRJTUVfU0VMRUNUSU9OPUNob29zZSBmcm9tIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBydW50aW1lcyBhbmQgc2VydmVycyBmb3IgdGhlIGNsaWVudCBlbnZpcm9ubWVudCwgb3IgdXNlIHRoZSBkZWZhdWx0IHNldHRpbmdzLgotCi1MQUJFTF9DTElFTlRfU0VMRUNUSU9OX1ZJRVdfVElUTEU9Q2xpZW50LVNpZGUgRW52aXJvbm1lbnQgU2VsZWN0aW9uOgotTEFCRUxfQ0xJRU5UX1RZUEU9Q2xpZW50IFByb2plY3QgdHlwZToKLUxBQkVMX1NFUlZJQ0VfVFlQRT1TZXJ2aWNlIFByb2plY3QgdHlwZToKLUxBQkVMX1dFQj1XZWIKLUxBQkVMX0VKQj1FSkIKLUxBQkVMX05PX0xBQkVMPQotCi0jCi0jIEl0ZW1zIGNvbW1vbiB0byBXZWJTZXJ2aWNlTWFwcGluZ3NQYWdlLCBXZWJTZXJ2aWNlTWFwcGluZ3NQYWdlIChjbGllbnQpLCBhbmQgV2ViU2VydmljZVNPQVBCaW5kaW5nUGFnZQotIwotUEFHRV9NU0dfVkFMSURBVElPTl9JTlRFUk5BTF9FUlJPUj1BbiBpbnRlcm5hbCBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFnZSB2YWxpZGF0aW9uLiBTZWUgbG9ncyBmb3IgZGV0YWlscy4KLQotIwotIyBXZWJTZXJ2aWNlTWFwcGluZ3NQYWdlCi0jCi1QQUdFX1RJVExFX1dTX1hNTDJCRUFOPVdlYiBTZXJ2aWNlIFNrZWxldG9uIFhNTCB0byBKYXZhIE1hcHBpbmdzCi1QQUdFX0RFU0NfTjJQX01BUFBJTkdTPURlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2UuCi1NU0dfTUFQUElOR19EVVBMSUNBVEVfRU5UUklFUz1EdXBsaWNhdGUgezB9IG1hcHBlZCB0byB0aGUgc2FtZSB7MX0uCi0KLQotIwotIyBUaGUgdHdvIElURU1fKiBzdHJpbmdzIGFyZSBlbnRyaWVzIGluIGEgbGlzdCBib3ggb2YgbWFwcGluZ3MuCi0jIFRoZXJlIGFyZSB0d28gZm9ybXMsIG9uZSB3aGVuIHRoZSBwYWdlIGlzIGluIEphdmEtdG8tWE1MIG1vZGU6Ci0jICAgPGphdmEtYmVhbi1uYW1lPiwgPGVuY29kaW5nLXN0eWxlPgotIyBhbmQgb25lIHdoZW4gdGhlIHBhZ2UgaXMgaW4gWE1MLXRvLUphdmEgbW9kZToKLSMgICA8eG1sLW5hbWVzcGFjZS11cmk+Ojx4bWwtc2hvcnQtbmFtZT4sIDxlbmNvZGluZy1zdHlsZT4KLSMgd2hlcmU6Ci0jICAgPGphdmEtYmVhbi1uYW1lPiBpcyBhIGZ1bGx5LXF1YWxpZmllZCBKYXZhIGNsYXNzIG5hbWUKLSMgICA8eG1sLW5hbWVzcGFjZS11cmk+IGlzIHRoZSBuYW1lc3BhY2Ugb2YgYW4gWE1MIHR5cGUKLSMgICA8eG1sLXNob3J0LW5hbWU+IGlzIHRoZSBYTUwgdHlwZSBuYW1lIHdpdGhpbiB0aGUgbmFtZXNwYWNlCi0jICAgPGVuY29kaW5nLXN0eWxlPiBpcyB0aGUgZW5jb2Rpbmcgc3R5bGUgKFNPQVAgb3IgTGl0ZXJhbCBYTUwpCi0jCi0KLSMKLSMgV2ViU2VydmljZVByb3h5UGFnZQotIwotQlVUVE9OX0dFTkVSQVRFX1BST1hZPSZHZW5lcmF0ZSBhIHByb3h5Ci0KLSMKLSMgV2ViU2VydmljZVNrZWxldG9uQ29uZmlnUGFnZQotIwotUEFHRV9ERVNDX1dTU0tFTF9DT05GSUc9RGVmaW5lIGEgc2tlbGV0b24gSmF2YSBiZWFuIGFzIGEgV2ViIHNlcnZpY2UuCi1QQUdFX1RJVExFX1dTU0tFTF9DT05GSUc9V2ViIFNlcnZpY2UgU2tlbGV0b24gSmF2YSBCZWFuIENvbmZpZ3VyYXRpb24KLVRPT0xUSVBfUEJTQ19URVhUX1NLRUxFVE9OX0ZPTERFUj1Gb2xkZXIgZm9yIGdlbmVyYXRlZCBKYXZhIHNrZWxldG9uLgotVE9PTFRJUF9QQlNDX0JVVFRPTl9TS0VMRVRPTl9GT0xERVJfQlJPV1NFPUJyb3dzZSBmb2xkZXJzLgotTEFCRUxfU0tFTEVUT05fUk9PVF9OQU1FPVNrZWxldG9uIGZvbGRlcjoKLQotIwotIyBXZWJTZXJ2aWNlQmVhbkNsYXNzUGFnZQotIwotTEFCRUxfQkVBTl9DTEFTU19OQU1FPUJlYW46Ci1QQUdFX01TR19CRUFOX0NBTk5PVF9CRV9FTVBUWT1QbGVhc2Ugc2VsZWN0IGEgSmF2YSBiZWFuIGNsYXNzLgotQlVUVE9OX0JST1dTRV9DTEFTU0VTPUJyb3dzZSBjbGFzc2VzLi4uCi0KLQotIwotIyBXZWJTZXJ2aWNlVGVzdFBhZ2UKLSMKLVBBR0VfVElUTEVfV1NURVNUPVRlc3QgV2ViIFNlcnZpY2UKLVBBR0VfREVTQ19XU1RFU1Q9U2VsZWN0IGEgdGVzdCBmYWNpbGl0eQotQ0hFQ0tCT1hfVEVTVF9XRUJTRVJWSUNFPSZUZXN0IHRoZSBXZWIgc2VydmljZQotQ0hFQ0tCT1hfTU9OSVRPUl9XRUJTRVJWSUNFPSZNb25pdG9yIHRoZSBXZWIgc2VydmljZQotQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTPSZPdmVyd3JpdGUgZmlsZXMgd2l0aG91dCB3YXJuaW5nCi1NU0dfRVJST1JfVU5BQkxFX1RPX0xBVU5DSF9XU0RMX1RFU1Q9QW4gZXJyb3Igb2NjdXJyZWQuIFVuYWJsZSB0byBsYXVuY2ggV1NETCB0ZXN0IGZhY2lsaXR5LgotCi0jCi0jIFdlYlNlcnZpY2VFeHBsb3JlclBhZ2UKLSMKLUJVVFRPTl9MQVVOQ0hfU0VSVklDRV9URVNUPUxhdW5jaAotCi0jCi0jIFdlYlNlcnZpY2VDbGllbnRUZXN0UGFnZQotIwotUEFHRV9USVRMRV9XU19TQU1QTEU9V2ViIFNlcnZpY2UgQ2xpZW50IFRlc3QKLVBBR0VfREVTQ19XU19TQU1QTEU9RG8geW91IHdhbnQgdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5PwotQlVUVE9OX1RFU1Q9VGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5Ci1MQUJFTF9URVNUX1RZUEVTPVRlc3QgZmFjaWxpdHkKLUJVVFRPTl9SVU5fVEVTVD1SdW4gdGVzdCBvbiBzZXJ2ZXIKLUxBQkVMX01FVEhPRFM9TWV0aG9kcwotTEFCRUxfSlNQX1BST0pFQ1RfTkFNRT1KU1AgcHJvamVjdDoKLU1TR19FUlJPUl9KVFNfUFJPWFlfTk9UX0NPTVBJTEVEPUlXQUIwMzU3RSBUaGUgR2VuZXJhdGVkIHByb3h5IHdhcyBub3QgZm91bmQuIFdlYlNlcnZpY2Ugc2FtcGxlIGpzcHMgY2Fubm90IGJlIGdlbmVyYXRlZC4KLU1TR19FUlJPUl9NQUxGT1JNRURfVVJMPUlXQUIwMzU4RSBUZXN0IGNsaWVudCBVUkwgaXMgbWFsZm9ybWVkLgotTVNHX0VSUk9SX01PRFVMRV9ERVBFTkRFTkNZPVVuYWJsZSB0byBlc3RhYmxpc2ggbW9kdWxlIGRlcGVuZGVuY3kgZnJvbSB7MH0gdG8gezF9LgotCi0jCi0jIFdlYlNlcnZpY2VCZWFuTWV0aG9kc1BhZ2UKLSMKLUJVVFRPTl9TRUxFQ1RfQUxMPVNlbGVjdCBBbGwKLUJVVFRPTl9ERVNFTEVDVF9BTEw9RGVzZWxlY3QgQWxsCi1UT09MVElQX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEw9U2VsZWN0IGFsbCBtZXRob2RzCi1UT09MVElQX1BCTUVfQlVUVE9OX0RFU0VMRUNUX0FMTD1EZXNlbGVjdCBhbGwgbWV0aG9kcwotCi0jCi0jIFdlYlNlcnZpY2VXU0RMU2VsZWN0aW9uUGFnZQotIwotUEFHRV9USVRMRV9XU0RMX1NFTEVDVElPTj1XZWIgU2VydmljZSBXU0RMIEZpbGUgU2VsZWN0aW9uCi1QQUdFX0RFU0NfV1NETF9TRUxFQ1RJT049U2VsZWN0IGEgV1NETCBmaWxlLgotCi0jCi0jIFdlYlNlcnZpY2VQdWJsaXNoUGFnZQotIwotUEFHRV9USVRMRV9XU19QVUJMSVNIPVdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uCi1QQUdFX0RFU0NfV1NfUFVCTElTSD1EbyB5b3Ugd2FudCB0byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2U/Ci1QQUdFX1RJVExFX1dTX0ZJTkQ9RmluZCBhIFdlYiBzZXJ2aWNlCi1QQUdFX0RFU0NfV1NfRklORD1EbyB5b3Ugd2FudCB0byBmaW5kIGEgV2ViIHNlcnZpY2U/Ci1CVVRUT05fV1NfUFVCTElTSD0mTGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gcHVibGlzaCB0aGlzIFdlYiBzZXJ2aWNlIHRvIGEgVURESSBSZWdpc3RyeQotQlVUVE9OX1dTX1BVQkxJU0hfUFJJVkFURV9VRERJPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHB1Ymxpc2ggdGhpcyBXZWIgc2VydmljZSB0byB0aGUgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLUJVVFRPTl9XU19GSU5EPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGZpbmQgYSBXZWIgc2VydmljZSBmcm9tIGEgVURESSBSZWdpc3RyeQotQlVUVE9OX1dTX0ZJTkRfUFJJVkFURV9VRERJPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGZpbmQgYSBXZWIgc2VydmljZSBmcm9tIHRoZSBVbml0IFRlc3QgVURESSBSZWdpc3RyeQotTEFCRUxfUFVCTElDX1VERElfUkVHSVNUUklFUz1QdWJsaWMgVURESSBSZWdpc3RyeQotCi0jCi0jIEVKQiBVSSBzdHJpbmdzCi0jCi1MQUJFTF9FSkJfQkVBTl9OQU1FPUVKQiBiZWFuCi1UQUJMRV9USVRMRV9FSkJfQkVBTl9OQU1FUz1TdGF0ZWxlc3MgRUpCIGJlYW5zCi1UQUJMRV9USVRMRV9FSkJfUFJPSkVDVF9OQU1FPUVKQiBwcm9qZWN0Ci1MQUJFTF9FQVJfUFJPSkVDVFM9RUFSIHByb2plY3RzCi1UT09MVElQX0VBUl9QUk9KRUNUUz1FbnRlcnByaXNlIGFwcGxpY2F0aW9uIHByb2plY3RzLgotVE9PTFRJUF9UQUJMRV9CRUFOX05BTUVTPVNlbGVjdCBhbiBFSkIuCi1MQUJFTF9TSE9XX0FMTF9TVEFURUxFU1NfU0VTU0lPTl9FSkJTPTw8U2hvdyBhbGwgc3RhdGVsZXNzIHNlc3Npb24gRUpCcz4+Ci0KLSMKLSMgVG9vbHRpcHMgZm9yIFdlYlNlcnZpY2VXU0RMU2VsZWN0aW9uUGFnZQotIwotVE9PTFRJUF9QV1dTX1BBR0U9Ci0KLSMKLSMgVG9vbHRpcHMgZm9yIFdlYiBTZXJ2aWNlIFdpemFyZCBTY2VuYXJpbyBQYWdlCi0jCi1CVVRUT05fV1NXU0NFTl9QVUJMSVNIPSZQdWJsaXNoIHRoZSBXZWIgc2VydmljZQotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1A9RGV2ZWxvcAotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0FTU0VNQkxFPUFzc2VtYmxlCi1UT09MVElQX1dTV1NDRU5fU0NBTEVfREVQTE9ZPURlcGxveQotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEw9SW5zdGFsbAotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1JVTj1TdGFydAotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1RFU1Q9VGVzdAotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0U9TW92ZSB0aGUgc2xpZGVyIHRvIHNldCB0aGUgbGV2ZWwgb2Ygc2VydmljZSBnZW5lcmF0aW9uLgotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVD1Nb3ZlIHRoZSBzbGlkZXIgdG8gc2V0IHRoZSBsZXZlbCBvZiBjbGllbnQgZ2VuZXJhdGlvbi4gU2VydmljZSBtdXN0IGJlIHN0YXJ0ZWQgdG8gZW5hYmxlIGNsaWVudCBnZW5lcmF0aW9uLgotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVF9PTkxZPU1vdmUgdGhlIHNsaWRlciB0byBzZXQgdGhlIGxldmVsIG9mIGNsaWVudCBnZW5lcmF0aW9uLiAKLVRPT0xUSVBfV1NXU0NFTl9URVhUX0lNUEw9SW1wbGVtZW50YXRpb24gZm9yIHRoZSB3ZWIgc2VydmljZS4KLVRPT0xUSVBfV1NXU0NFTl9CVVRUT05fQlJPV1NFX0lNUEw9QnJvd3NlIGltcGxlbWVudGF0aW9uIGZpbGVzIGZvciBzcGVjaWZpZWQgc2VydmljZSB0eXBlLgotVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9PVkVSV1JJVEVfRklMRVM9RXhpc3RpbmcgZmlsZXMgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIG5vIHdhcm5pbmcgZHVyaW5nIGdlbmVyYXRpb24uCi0KLSMKLSMgVG9vbHRpcHMgZm9yIGJlYW5zLldlYlNlcnZpY2VCZWFuQ2xhc3NQYWdlCi0jCi1UT09MVElQX1BCQ0xfUEFHRT0KLVRPT0xUSVBfUEJDTF9URVhUX0JFQU5fQ0xBU1M9U2VsZWN0ZWQgSmF2YSBiZWFuLgotVE9PTFRJUF9QQkNMX0JVVFRPTl9CRUFOX0NMQVNTX0JST1dTRT1Ccm93c2UgY2xhc3Nlcy4KLVRPT0xUSVBfUEJDTF9CVVRUT05fQkVBTl9SRVNPVVJDRV9CUk9XU0U9QnJvd3NlIEphdmEgZmlsZXMuCi0KLSMKLSMgVG9vbHRpcHMgZm9yIGJlYW5zLldlYlNlcnZpY2VUZXN0UGFnZQotIwotVE9PTFRJUF9QU1RQX0NPTUJPQk9YX1RFU1Q9VGVzdCBmYWNpbGl0aWVzIGF2YWlsYWJsZSB0byB0ZXN0IHRoZSBzZXJ2aWNlLgotVE9PTFRJUF9QU1RQX0xBVU5DSF9CVVRUT049TGF1bmNoIHRoZSBzZWxlY3RlZCB0ZXN0IGZhY2lsaXR5LgotCi0jCi0jIFRvb2x0aXBzIGZvciBXZWJTZXJ2aWNlUnVudGltZVNlbGVjdGlvblBhZ2UKLSMKLVRPT0xUSVBfUFdSU19QQUdFPQotVE9PTFRJUF9QV1JTX0xJU1RfUlVOVElNRVM9U2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBkZXBsb3ltZW50IHJ1bnRpbWUocykuCi1UT09MVElQX1BXUlNfTElTVF9TRVJWRVJTPVNlbGVjdCBmcm9tIGFwcGxpY2F0aW9uIHNlcnZlcihzKS4KLVRPT0xUSVBfUFdSU19SQURJT19TRVJWRVI9U2VydmVyIG9yaWVudGVkIHNlbGVjdGlvbi4KLVRPT0xUSVBfUFdSU19SQURJT19SVU5USU1FPVJ1bnRpbWUgb3JpZW50ZWQgc2VsZWN0aW9uLgotVE9PTFRJUF9QV1JTX1JBRElPX0VYUExPUkU9RXhwbG9yZSBjb21iaW5hdGlvbnMuCi0KLSMKLSMgVG9vbHRpcHMgZm9yIFdlYlNlcnZpY2VDbGllbnRSdW50aW1lU2VsZWN0aW9uUGFnZQotIwotVE9PTFRJUF9QV0NSX0NPTUJPX0NMSUVOVF9UWVBFPUNsaWVudCBwcm9qZWN0IHR5cGUuCi1UT09MVElQX1BXQ1JfQ09NQk9fU0VSVklDRV9UWVBFPVNlcnZpY2UgcHJvamVjdCB0eXBlLgotCi0jCi0jIFRvb2x0aXBzIGZvciBXZWJTZXJ2aWNlUHJvamVjdFBhZ2UKLSMKLVRPT0xUSVBfUFdQUl9DT01CT19UWVBFPVdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUuCi1UT09MVElQX1BXUFJfR1JPVVBfU0NFTkFSSU9fU0VSVklDRT1TZXJ2aWNlIGRlZmF1bHRzIGZvciB0aGlzIHdpemFyZCBzY2VuYXJpby4KLVRPT0xUSVBfUFdQUl9DSEVDS0JPWF9HRU5FUkFURV9QUk9YWT1FbmFibGUvZGlzYWJsZSBwcm94eSBnZW5lcmF0aW9uIGZvciB0aGlzIHNjZW5hcmlvLgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX1NUQVJUX1dFQl9QUk9KRUNUPVN0YXJ0IFdlYiBzZXJ2aWNlIGluIFdlYiBwcm9qZWN0IGZvciB0aGlzIHNjZW5hcmlvLgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0lOU1RBTExfU0VSVklDRV9XRUJfUFJPSkVDVD1JbnN0YWxsIHRoZSBXZWIgc2VydmljZSBvbiB0aGUgc2VydmVyIGZvciB0aGlzIHNjZW5hcmlvLgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0lOU1RBTExfQ0xJRU5UX1dFQl9QUk9KRUNUPUluc3RhbGwgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCBvbiB0aGUgc2VydmVyIGZvciB0aGlzIHNjZW5hcmlvIChtYW5hZ2VkIGNsaWVudCBvbmx5KS4gCi1UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTEFVTkNIX1dTPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlIGluIHRoaXMgc2NlbmFyaW8gdG8gYSBVRERJIFJlZ2lzdHJ5LgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX1RFU1RfU0VSVklDRT1TZWxlY3QgdGhpcyB0byBleHBsb3JlIHRoZSBXZWIgc2VydmljZSBjcmVhdGVkLgotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX01PTklUT1JfU0VSVklDRT1TZWxlY3QgdGhpcyB0byBtb25pdG9yIHRoZSBTT0FQIHRyYWZmaWMgb2YgdGhpcyBXZWIgc2VydmljZS4KLVRPT0xUSVBfUFdQUl9HUk9VUF9TQ0VOQVJJT19DTElFTlQ9Q2xpZW50IHByb3h5IGRlZmF1bHRzIGZvciB0aGlzIHdpemFyZCBzY2VuYXJpby4KLVRPT0xUSVBfUFdQUl9DT01CT19DTElFTlRUWVBFPUNsaWVudCBwcm94eSBzZWxlY3Rpb24gdHlwZS4KLQotIwotIyBUb29sdGlwcyBmb3IgV2ViU2VydmljZVB1Ymxpc2hQYWdlCi0jCi1UT09MVElQX1BXUEJfUEFHRT0KLVRPT0xUSVBfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0g9UHVibGlzaCB0aGUgV2ViIHNlcnZpY2UuCi0KLSMKLSMgV1NJTCBwcm94eQotIwotUEFHRV9XU0lMX0lNUE9SVD1XU0lMIEltcG9ydCBQYWdlCi1USVRMRV9XU0lMX0lNUE9SVD1XU0lMIEltcG9ydAotREVTQ19XU0lMX0lNUE9SVD1JbXBvcnQgV1NETCByZWZlcmVuY2VzIHRvIGEgV1NJTCBkb2N1bWVudAotUEFHRV9USVRMRV9XU19TRUxFQ1RJT049V2ViIFNlcnZpY2UgU2VsZWN0aW9uIFBhZ2UKLVBBR0VfREVTQ19XU19TRUxFQ1RJT049RW50ZXIgYSB3ZWIgc2VydmljZSBVUkkuCi0KLVBBR0VfTVNHX0xPQURJTkdfV0VCX1NFUlZJQ0VfVVJJPUxvYWRpbmcgV2ViIHNlcnZpY2UgVVJJLi4uCi1QQUdFX01TR19JTlZBTElEX1dFQl9TRVJWSUNFX1VSST1JbnZhbGlkIFdlYiBzZXJ2aWNlIFVSSS4gIEVudGVyIGEgVVJJIHRvIGEgV1NETCwgV1NJTCBvciBIVE1MIGRvY3VtZW50LgotUEFHRV9NU0dfTk9fU1VDSF9GSUxFPUZpbGUgInswfSIgZG9lcyBub3QgZXhpc3QuCi1QQUdFX01TR19TRUxFQ1RJT05fTVVTVF9CRV9XU0RMPVNlbGVjdGlvbiBtdXN0IGJlIFdTREwuCi1QQUdFX01TR19JTlZBTElEX1dTSUxfRklMRV9OQU1FPUludmFsaWQgV1NJTCBmaWxlIG5hbWUuICBXU0lMIGZpbGUgbmFtZSBtdXN0IGVuZCB3aXRoIC53c2lsCi0KLU1TR19FUlJPUl9VUklfTk9UX1JFU09MVkFCTEU9SVdBQjA0NjlFICJ7MH0iIGlzIG5vdCByZXNvbHZhYmxlLgotTVNHX0VSUk9SX1dTRExfSEFTX05PX1NFUlZJQ0VfRUxFTUVOVD1JV0FCMDU1MUUgV1NETCBmaWxlIGF0IHswfSBoYXMgbm8gc2VydmljZSBlbGVtZW50LgotCi1MQUJFTF9XU0lMX1VSST1XU0lMIFVSSToKLUxBQkVMX0JST1dTRT1Ccm93c2UKLUxBQkVMX1dTREw9V1NETDoKLUxBQkVMX1dTRExfVVJJPVdTREwgVVJJCi1MQUJFTF9JTVBPUlQ9SW1wb3J0Li4uCi1MQUJFTF9BREQ9QWRkCi1MQUJFTF9SRU1PVkU9UmVtb3ZlCi1MQUJFTF9XU19TRUxFQ1RJT049RW50ZXIgYSBVUkkgdG8gYSBXU0RMLCBXU0lMIG9yIEhUTUwgZG9jdW1lbnQ6Ci1MQUJFTF9TRUxFQ1RfV1NETD1TZWxlY3QgYSBXU0RMCi1MQUJFTF9WQUxJREFURV9NRVNTQUdFUz1XU0RMIHZhbGlkYXRpb24gbWVzc2FnZXM6Ci0KLVRPT0xUSVBfV1NJTF9JTVBPUlRfUEFHRT1UaGlzIHBhZ2UgYWxsb3dzIHlvdSB0byBhZGQgV1NETCByZWZlcmVuY2VzIHRvIGEgV1NJTCBkb2N1bWVudC4KLVRPT0xUSVBfV1NJTF9URVhUX1dTSUw9RW50ZXIgdGhlIGxvY2F0aW9uIG9mIGEgbmV3IG9yIGV4aXN0aW5nIFdTSUwgZG9jdW1lbnQuCi1UT09MVElQX1dTSUxfQlVUVE9OX0JST1dTRV9XU0lMPUJyb3dzZSBmb3IgYSBXU0lMIGRvY3VtZW50LgotVE9PTFRJUF9XU0lMX1RBQkxFX1dTREw9RW50ZXIgdGhlIFVSSXMgb2YgdGhlIFdTRExzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGFkZGVkIGFzIHNlcnZpY2UgcmVmZXJlbmNlcy4KLVRPT0xUSVBfUENPTl9QQUdFPVNlbGVjdCBhIHdlYiBzZXJ2aWNlIGZvciBjb25zdW1wdGlvbi4KLVRPT0xUSVBfUENPTl9URVhUX1dTPUVudGVyIGEgVVJJIHRvIGEgV1NETCwgV1NJTCBvciBIVE1MIGRvY3VtZW50LgotVE9PTFRJUF9QQ09OX0JVVFRPTl9CUk9XU0VfV1M9QnJvd3NlIGZvciBhIHdlYiBzZXJ2aWNlIHJlc291cmNlLgotVE9PTFRJUF9WQUxJREFURV9URVhUX01FU1NBR0U9TWVzc2FnZXMgZnJvbSBXU0RMIHZhbGlkYXRpb24uCi1UT09MVElQX1RBQkxFX1ZBTElEQVRFX01FU1NBR0U9VXNlIHRoZSBXZWIgU2VydmljZSBQcm9maWxlIENvbXBsaWFuY2UgYW5kIFZhbGlkYXRpb24gcHJlZmVyZW5jZSB0byBlbmFibGUgb3IgZGlzYWJsZSBXU0RMIHZhbGlkYXRpb24uCi0KLSMKLSMgVGFibGUgY29sdW1uIGhlYWRpbmcgZm9yIFZhbGlkYXRpb25NZXNzYWdlVmlld2VyV2lkZ2V0Ci0jCi1UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9TRVZFUklUWT1TZXZlcml0eQotVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTElORT1MaW5lCi1UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9DT0xVTU49Q29sdW1uCi1UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9NRVNTQUdFPU1lc3NhZ2UKLSMKLSMgVG9vbHRpcHMgZm9yIGNsaWVudC5XZWJTZXJ2aWNlQ2xpZW5UZXN0UGFnZQotIwotVE9PTFRJUF9QV1NNX1BBR0U9Ci1UT09MVElQX1BXU01fQ0hFQ0tCT1hfVEVTVD1FbmFibGUvZGlzYWJsZSBUZXN0LgotVE9PTFRJUF9QV1NNX0NPTUJPQk9YX1RFU1Q9U2VsZWN0IHRoZSB0ZXN0IHR5cGUuCi1UT09MVElQX1BXU01fQ0hFQ0tCT1hfTEFVTkNIPVJ1biB0ZXN0IG9uIGEgc2VydmVyLgotVE9PTFRJUF9QV1NNX1RFWFRfSlNQX0ZPTERFUj1EZXN0aW5hdGlvbiBmb2xkZXIgb2YgZ2VuZXJhdGVkIHNhbXBsZSBmaWxlcy4KLVRPT0xUSVBfUFdTTV9CVVRUT05fSlNQX0ZPTERFUl9CUk9XU0U9QnJvd3NlIGZvbGRlcnMuCi1UT09MVElQX1BXU01fQlVUVE9OX1NFTEVDVF9BTEw9U2VsZWN0IGFsbCBtZXRob2RzLgotVE9PTFRJUF9QV1NNX0JVVFRPTl9ERVNFTEVDVF9BTEw9RGVzZWxlY3QgYWxsIG1ldGhvZHMuCi1UT09MVElQX1BXU01fQ09NQk9fUFJPSkVDVD1XZWIgcHJvamVjdCBmb3IgZ2VuZXJhdGVkIHNhbXBsZS4KLVRPT0xUSVBfUFdTTV9URVhUX1NBTVBMRV9GT0xERVI9RGVzdGluYXRpb24gZm9sZGVyIG9mIGdlbmVyYXRlZCBzYW1wbGUgZmlsZXMuCi1UT09MVElQX1BXU01fVFJFRV9NRVRIT0RTPU1ldGhvZHMgdG8gZ2VuZXJhdGUgaW50byB0aGUgc2FtcGxlLgotVE9PTFRJUF9QV1NNX0VBUl9QUk9KRUNUPUVBUiBwcm9qZWN0IGZvciB0aGUgZ2VuZXJhdGVkIHNhbXBsZS4KLQotIwotIyBIVFRQIEJhc2ljIEF1dGgKLSMKLURJQUxPR19USVRMRV9IVFRQX0JBU0lDX0FVVEg9SFRUUCBCYXNpYyBBdXRoZW50aWNhdGlvbgotTEFCRUxfVVJMPVVSTDoKLUxBQkVMX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRT1Vc2VyIG5hbWU6Ci1MQUJFTF9IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQ9UGFzc3dvcmQ6Ci0KLVRPT0xUSVBfSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FPUVudGVyIHlvdXIgSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiB1c2VyIG5hbWUuCi1UT09MVElQX0hUVFBfQkFTSUNfQVVUSF9QQVNTV09SRD1FbnRlciB5b3VyIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gcGFzc3dvcmQuCi0KLSMKLSMgR2VuZXJhdGUgSGFuZGxlciBTa2VsZXRvbgotIwotTVNHX0VSUk9SX0dFTkVSQVRFX0hBTkRMRVJfU0tFTEVUT049SVdBQjAzNTlFIEVycm9yIGluIGdlbmVyYXRpbmcgaGFuZGxlciBza2VsZXRvbi4KLU1TR19FUlJPUl9XUklURV9GSUxFPUlXQUIwMzYwRSBFcnJvciBpbiB3cml0aW5nIGZpbGUgezB9LgotCi0jCi0jIEhhbmRsZXJzIENvbmZpZ3VyYXRpb24gd2l6YXJkIHBhZ2UKLSMKLUxBQkVMX0hBTkRMRVJTX0NPTkZJRz1IYW5kbGVyIGNvbmZpZ3VyYXRpb24KLUxBQkVMX0JVVFRPTl9BREQ9QWRkCi1MQUJFTF9CVVRUT05fUkVNT1ZFPVJlbW92ZQotTEFCRUxfQlVUVE9OX01PVkVfVVA9TW92ZSB1cAotTEFCRUxfQlVUVE9OX01PVkVfRE9XTj1Nb3ZlIGRvd24KLUxBQkVMX0JVVFRPTl9HRU5fU0tFTEVUT049R2VuZXJhdGUgc2tlbGV0b24gY2xhc3NlcyBmb3IgbmV3IGhhbmRsZXJzCi1MQUJFTF9DT01CT19TT1VSQ0VfTE9DPU91dHB1dCBmb2xkZXI6Ci1MQUJFTF9DT01CT19XU19DTElFTlRfUkVGPUNsaWVudCBTZXJ2aWNlIFJlZmVyZW5jZXM6Ci1MQUJFTF9DT01CT19XU19TRVJWSUNFX0RFU0M9U2VydmljZSBEZXNjcmlwdGlvbnM6Ci1NU0dfVEVYVF9OVU1fT0ZfU0VSVklDRVM9WW91IGhhdmUgc2VsZWN0ZWQgezB9IHNlcnZpY2VzLgotTVNHX1RFWFRfTlVNX09GX0NMSUVOVFM9WW91IGhhdmUgc2VsZWN0ZWQgezB9IGNsaWVudCBzZXJ2aWNlcy4KLSAKLUxBQkVMX0hBTkRMRVJfTkFNRT1OYW1lCi1MQUJMRV9IQU5ETEVSX0NMQVNTPUNsYXNzIG5hbWUKLUxBQkVMX0hBTkRMRVJfUE9SVD1Qb3J0IG5hbWUKLSAKLURJQUxPR19USVRMRV9XU19BRERfSEFORExFUj1BZGQgTmV3IEhhbmRsZXIKLUxBQkVMX1RFWFRfSEFORExFUl9OQU1FPU5hbWU6Ci1MQUJFTF9URVhUX0hBTkRMRVJfQ0xBU1M9Q2xhc3MgbmFtZToKLUxBQkVMX1RFWFRfSEFORExFUl9QT1JUPVBvcnQgbmFtZToKLSAKLVBBR0VfVElUTEVfU0VSVklDRV9IRExSX0NPTkZJRz1TZXJ2aWNlIEhhbmRsZXJzIENvbmZpZ3VyYXRpb24KLVBBR0VfREVTQ19TRVJWSUNFX0hETFJfQ09ORklHPUNvbmZpZ3VyZSBzZXJ2aWNlLXNpZGUgaGFuZGxlcnMKLVBBR0VfVElUTEVfQ0xJRU5UX0hETFJfQ09ORklHPUNsaWVudCBIYW5kbGVycyBDb25maWd1cmF0aW9uCi1QQUdFX0RFU0NfQ0xJRU5UX0hETFJfQ09ORklHPUNvbmZpZ3VyZSBjbGllbnQtc2lkZSBoYW5kbGVycwotUEFHRV9ERVNDX01VTFRJUExFX1NFUlZJQ0VTX0NPTkZJRz1BZGQgaGFuZGxlcnMgdG8gbXVsdGlwbGUgV2ViIHNlcnZpY2VzLgotUEFHRV9ERVNDX01VTFRJUExFX0NMSUVOVFNfQ09ORklHPUFkZCBoYW5kbGVycyB0byBtdWx0aXBsZSBXZWIgc2VydmljZSBjbGllbnRzLgotIAotVE9PTFRJUF9FRElUX1dTX0hBTkRMRVJTPUNvbmZpZ3VyZSBXZWIgU2VydmljZSBIYW5kbGVycwotVE9PTFRJUF9CVVRUT05fR0VOX1NLRUxFVE9OPVNlbGVjdCB0byBnZW5lcmF0ZSBza2VsZXRvbiBjbGFzc2VzIGZvciBuZXcgaGFuZGxlcnMuCi1UT09MVElQX0NPTUJPX1NPVVJDRV9MT0M9U2VsZWN0IHRoZSBvdXRwdXQgbG9jYXRpb24gZm9yIGZpbGUgZ2VuZXJhdGlvbi4KLVRPT0xUSVBfVEVYVF9IQU5ETEVSX05BTUU9SGFuZGxlciBuYW1lCi1UT09MVElQX1RFWFRfSEFORExFUl9DTEFTUz1IYW5kbGVyIGNsYXNzIG5hbWUKLVRPT0xUSVBfVEVYVF9IQU5ETEVSX1BPUlQ9SGFuZGxlciBwb3J0IGNvbXBvbmVudCBuYW1lCi1UT09MVElQX1dTX0NMSUVOVF9SRUY9U2VsZWN0IGEgY2xpZW50IHNlcnZpY2UtcmVmZXJlbmNlIHRvIHNob3cgaXRzIGhhbmRsZXJzLgotVE9PTFRJUF9XU19TRVJWSUNFX0RFU0M9U2VsZWN0IGEgc2VydmljZSBkZXNjcmlwdGlvbiB0byBzaG93IGl0cyBoYW5kbGVycy4KLSAKLSMKLSMgQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotIwotTVNHX0VSUk9SX1dFQl9TRVJWSUNFX0NMSUVOVFNfTk9UX0ZPVU5EPU5vIFdlYiBzZXJ2aWNlIGNsaWVudHMgd2VyZSBmb3VuZC4gQ3JlYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IGJlZm9yZSBjb25maWd1cmluZyBXZWIgc2VydmljZSBjbGllbnQgaGFuZGxlcnMuCi0gCi0jCi0jIFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kCi0jCi1NU0dfRVJST1JfV0VCX1NFUlZJQ0VTX05PVF9GT1VORD1ObyBXZWIgc2VydmljZXMgd2VyZSBmb3VuZC4gIENyZWF0ZSBhIFdlYiBzZXJ2aWNlIGJlZm9yZSBjb25maWd1cmluZyBXZWIgc2VydmljZSBoYW5kbGVycy4KLU1TR19FUlJPUl9XU0REX05PVF9GT1VORD1VbmFibGUgdG8gbGF1bmNoIGhhbmRsZXIgd2l6YXJkLiAgTm8gZGVwbG95bWVudCBkZXNjcmlwdG9yIHdhcyBmb3VuZCBmb3IgdGhpcyBXZWIgc2VydmljZS4KLU1TR19FUlJPUl9JTlZBTElEX01VTFRJUExFX1NFUlZJQ0VfU0VMRUNUPUludmFsaWQgbXVsdGlwbGUgc2VsZWN0aW9uIG9mIFNlcnZpY2VzLiAgRW5zdXJlIGFsbCBzZWxlY3Rpb25zIGFyZSBTZXJ2aWNlcy4jCi0KLSMgT3BlbkphdmFFZGl0b3JDb21tYW5kCi0jCi1NU0dfRVJST1JfVU5BQkxFX1RPX09QRU5fSkFWQV9FRElUT1I9SVdBQjAwMjlFIFVuYWJsZSB0byBvcGVuIGNsYXNzIHswfSBmcm9tIHByb2plY3QgezF9IGluIHRoZSBKYXZhIGVkaXRvci4KLQotIwotIyBDaGVja0lmU2VydmljZVByb2plY3QKLSMKLU1TR19XQVJOX0lTX1NFUlZJQ0VfUFJPSkVDVD1UaGUgc2VsZWN0ZWQgY2xpZW50IHByb2plY3QsIHswfSwgY29udGFpbnMgdGhlIFdlYiBzZXJ2aWNlLiBQcm9jZWVkaW5nIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIG1heSByZXN1bHQgaW4gcnVudGltZSBlcnJvcnMgd2hlbiBpbnZva2luZyB0aGUgV2ViIHNlcnZpY2UuIFdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/Ci1NU0dfVVNFUl9BQk9SVEVEPVVzZXIgcHJlc3NlZCBjYW5jZWwgaW4gd2FybmluZyBkaWFsb2cgd2hpY2ggd2FybmVkIGFib3V0IHRoZSBzZWxlY3RlZCBjbGllbnQgcHJvamVjdCBiZWluZyB0aGUgc2VydmljZSBwcm9qZWN0LgotCi0jCi0jIE1pc3NpbmcgdGhpcmQgcGFydHkgZmlsZSBlcnJvciBtZXNzYWdlCi0jCi1NU0dfTUlTU0lOR19USElSRF9QQVJUWV9GSUxFUz1NaXNzaW5nIHRoaXJkIHBhcnR5IGZpbGVzLiAgUmVmZXIgdG8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy93cy9kb3dubG9hZF9pbnN0cnVjdGlvbnNfZm9yX2phcnMuaHRtbAotCi0jCi0jIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kCi0jCi1NU0dfV0FSTklOR19OT19TRVJWSUNFX0VMRU1FTlQ9VGhlIFdTREwgZmlsZSBkb2VzIG5vdCBjb250YWluIGEgU2VydmljZSBlbGVtZW50LiAgVGhlcmVmb3JlIGEgc2VydmljZSBpbnRlcmZhY2UgYW5kIEphdmEgcHJveHkgd2lsbCBub3QgYmUgZ2VuZXJhdGVkIGFuZCBhcyBhIHJlc3VsdCwgYSBKYXZhIHRlc3QgY2xpZW50IHdpbGwgbm90IGJlIGxhdW5jaGVkLiAgQ2xpY2sgT0sgdG8gcHJvY2VlZCwgb3IgY2xpY2sgQ2FuY2VsIHRvIHNlbGVjdCBhbm90aGVyIFdTREwgZmlsZS4gIEFsdGVybmF0ZWx5LCBleGl0IHRoZSB3aXphcmQgYW5kIHVzZSB0aGUgV1NETCBlZGl0b3IgdG8gY3JlYXRlIGEgU2VydmljZSBXU0RMIGRvY3VtZW50LgotCi0jCi0jIENoZWNrV1NETFZhbGlkYXRpb25Db21tYW5kCi0jCi1TVElMTF9WQUxJREFUSU5HX1dTREw9V2l6YXJkIFdTREwgdmFsaWRhdGlvbiBpbiBQcm9ncmVzcy4gIFxuLSBDbGljayBDYW5jZWwgdG8gY2FuY2VsIHRoZSBjdXJyZW50IFdTREwgdmFsaWRhdGlvbiBhbmQgY29udGludWUuIFxuLSBDbGljayBDYW5jZWwgYW5kIFVwZGF0ZSB0byB1cGRhdGUgdGhlIHByZWZlcmVuY2UgdG8gYWx3YXlzIGNhbmNlbCBpbmNvbXBsZXRlIFdTREwgdmFsaWRhdGlvbiB3aGlsZSB0cmF2ZXJzaW5nIHRoZSB3aXphcmQuICBcbi0gQ2xpY2sgV2FpdCB0byB3YWl0IGZvciBXU0RMIHZhbGlkYXRpb24gdG8gY29tcGxldGUuCi1DQU5DRUxfVkFMSURBVElPTl9MQUJFTD1DYW5jZWwKLUNBTkNFTF9WQUxJREFUSU9OX0RFU0NSSVBUSU9OPUNhbmNlbCB0aGUgY3VycmVudCBXU0RMIHZhbGlkYXRpb24gYW5kIGNvbnRpbnVlCi1DQU5DRUxfQUxMX1ZBTElEQVRJT05fTEFCRUw9Q2FuY2VsIGFuZCBVcGRhdGUKLUNBTkNFTF9BTExfVkFMSURBVElPTl9ERVNDUklQVElPTj1VcGRhdGUgdGhlIHByZWZlcmVuY2UgdG8gYWx3YXlzIGNhbmNlbCBpbmNvbXBsZXRlIFdTREwgdmFsaWRhdGlvbiB3aGlsZSB0cmF2ZXJzaW5nIHRoZSB3aXphcmQuCi1XQUlUX1ZBTElEQVRJT05fTEFCRUw9V2FpdAotV0FJVF9WQUxJREFUSU9OX0RFU0NSSVBUSU9OPVdhaXQgZm9yIFdTREwgdmFsaWRhdGlvbiB0byBjb21wbGV0ZQotVEFTS19MQUJFTF9DSEVDS19XU0RMX1ZBTElEQVRJT049Q2hlY2sgZm9yIFdTREwgdmFsaWRhdGlvbgotVEFTS19ERVNDX0NIRUNLX1dTRExfVkFMSURBVElPTj1DaGVjayBpZiBXU0RMIHZhbGlkYXRpb24gaGFzIGNvbXBsZXRlZAotCi0jCi0jIFdTRExWYWxpZGF0aW9uIG1lc3NhZ2VzCi0jCi1NRVNTQUdFX1ZBTElEQVRFX05PX1dTREw9V2l6YXJkIFdTREwgdmFsaWRhdGlvbiBpcyBkaXNhYmxlZC4KLU1FU1NBR0VfVkFMSURBVEVfUkVNT1RFX1dTREw9V2l6YXJkIFdTREwgdmFsaWRhdGlvbiBpcyBvbmx5IGVuYWJsZWQgZm9yIHJlbW90ZSBmaWxlcy4KLU1FU1NBR0VfVkFMSURBVEVfQUxMX1dTREw9V2l6YXJkIFdTREwgdmFsaWRhdGlvbiBpcyBlbmFibGVkLgotTUVTU0FHRV9WQUxJREFURV9JTl9QUk9HUkVTUz1XU0RMIHZhbGlkYXRpb24gaW4gcHJvZ3Jlc3MgLi4uCi1FUlJPUl9NRVNTQUdFU19JTl9WQUxJREFUSU9OPVRoZSBXU0RMIGZpbGUgY29udGFpbnMgdmFsaWRhdGlvbiBlcnJvcihzKS4KLVdBUk5JTkdfTUVTU0FHRVNfSU5fVkFMSURBVElPTj1UaGUgV1NETCBmaWxlIGNvbnRhaW5zIHZhbGlkYXRpb24gd2FybmluZyhzKS4KLVdBUk5JTkdfSUZfQ09OVElOVUU9Q29udGludWluZyB3aXRoIHRoZSB3aXphcmQgbWF5IHJlc3VsdCBpbiBnZW5lcmF0aW9uIG9yIHJ1bnRpbWUgcHJvYmxlbS4KLVZBTElEQVRJT05fQ09NUExFVEVEPVdTREwgdmFsaWRhdGlvbiBjb21wbGV0ZXMgd2l0aCBubyB3YXJuaW5nIG9yIGVycm9yLgotVE9PTFRJUF9WQUxJREFURV9URVhUX01FU1NBR0VfU1VNTUFSWT1XU0RMIHZhbGlkYXRpb24gcHJlZmVyZW5jZSBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIFByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbiBwcmVmZXJlbmNlLgotCi1MQUJFTF9CVVRUT05fU1RPUF9XU0RMX1ZBTElEQVRJT049U3RvcCBWYWxpZGF0aW9uCi1UT09MVElQX1NUT1BfVkFMSURBVElPTl9CVVRUT049U3RvcHMgdGhlIGN1cnJlbnQgV1NETCB2YWxpZGF0aW9uIG9wZXJhdGlvbi4KLQotCi0jCi0jIFN0YXJ0IHNlcnZlciBwYWdlCi0jCi1QQUdFX1RJVExFX1dTX1NUQVJUX1NFUlZFUj1TZXJ2ZXIgc3RhcnR1cAotUEFHRV9ERVNDX1dTX1NUQVJUX1NFUlZFUj1TdGFydCB0aGUgc2VydmVyIGZyb20gdGhpcyBwYWdlLgotTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQxPUluIG9yZGVyIHRvIHByb2NlZWQgdGhlIHNlcnZlciAiezB9IiBtdXN0IGJlIHN0YXJ0ZWQuCi1MQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDI9T25jZSB0aGUgc2VydmVyIGlzIHN0YXJ0ZWQgdGhlICJuZXh0IiBidXR0b24gd2lsbCBiZSBlbmFibGVkLgotTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQzPVRoZSAiYmFjayIgYnV0dG9uIGNhbiBiZSB1c2VkIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgc3RhcnRpbmcgdG8KLUxBQkVMX1NUQVJUX1NFUlZFUl9URVhUND1jaGFuZ2UgYW55IHByZXZpb3VzIHNldHRpbmdzIGluIHRoaXMgd2l6YXJkLgotTEFCRUxfU1RBUlRfU0VSVkVSX0JVVFRPTj0mU3RhcnQgc2VydmVyCi1UT09MVElQX1NUQVJUX1NFUlZFUl9CVVRUT049U3RhcnQgdGhlIHNlcnZlcgotVEVYVF9TRVJWRVJfU1RBVFVTPUN1cnJlbnRseSB0aGUgc2VydmVyIGlzIHswfS4KLVRFWFRfU0VSVkVSX01TRz1TZXJ2ZXIgezB9Ci1URVhUX1NFUlZFUl9TVEFSVEVEPXN0YXJ0ZWQKLVRFWFRfU0VSVkVSX1NUQVJUSU5HPXN0YXJ0aW5nCi1URVhUX1NFUlZFUl9TVE9QUEVEPXN0b3BwZWQKLQotIwotIyBXYXJuaW5ncwotIwotCi1NU0dfU0VSVkVSX05PVF9GT1VORF9XQVJOSU5HPUEgc3VpdGFibGUgc2VydmVyIHdhcyBub3QgZm91bmQuIFRoZSBzYW1wbGUgY2FuIGJlIGdlbmVyYXRlZCBidXQgY2Fubm90IGJlIGxhdW5jaGVkLgotCi0KLSMKLSMgQW50IHRhc2sgTGlzdCBvcHRpb25zCi0jCi0KLSMgTm90ZSB0byB0cmFuc2xhdGlvbiBkbyBub3QgdHJhbnNsYXRlIGtleXdvcmQgUnVudGltZUlkCi1NU0dfSU5GT19BTlRfUlVOVElNRV9IRUFESU5HPVdlYiBTZXJ2aWNlIFJ1bnRpbWUgSURzIChSdW50aW1lSWQpCi1NU0dfSU5GT19BTlRfU0VSVkVSX1JVTlRJTUU9U2VydmVyIHJ1bnRpbWU6IHswfQotTVNHX0lORk9fQU5UX0NMSUVOVF9SVU5USU1FPUNsaWVudCBydW50aW1lOiB7MH0gCi0KLSMgTm90ZSB0byB0cmFuc2xhdGlvbiBkbyBub3QgdHJhbnNsYXRlIGtleXdvcmQgU2VydmVySWQKLU1TR19JTkZPX0FOVF9TRVJWRVJfSEVBRElORz1TZXJ2ZXIgSURzIChTZXJ2ZXJJZCkKLU1TR19JTkZPX0FOVF9TRVJWRVI9U2VydmVyOiB7MH0KLQotTVNHX0lORk9fV1NETF9PUEVSQVRJT05fVElNRURfT1VUPUNvdWxkIG5vdCByZXRyaWV2ZSB0aGUgV1NETCBmaWxlIHswfS4gIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlIHRvIHdhaXQgZm9yIHRoaXMgZmlsZT8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjljOTdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0IDEyNDE0MyAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwMjA0IDEyNDQwOCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIyMSAxMTkxMTEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzI5IDEyODA2OSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1IAotICogMjAwNjA0MTEgICAxMzYxMzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDE3ICAgMTM2MzkwLzEzNjE1OSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDE4ICAgMTM2MzM1IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDIwICAgMTM2MTU4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMjA3MTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDIwICAgMTM1OTEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDI2ICAgMTM4NjQ3IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTEwICAgMTQxMTE1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MDkgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA3MTkgICAxMzk5Nzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMDMxICAgMTQwNTE4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDgwMzE4ICAgMjEzMzMwIHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBOb24tY29udmVudGlvbmFsIEphdmEgbmFtaW5nIHByZXZlbnRzIGNyZWF0aW5nIFdlYiBTZXJ2aWNlcyAoY2xpZW50KQotICogMjAwODAzMjYgICAxNzE3MDUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIGltcHJvdmUgQW50VGFzayBlcnJvcnMgcmVwb3J0Ci0gKiAyMDA4MDMyNSAgIDE4NDc2MSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDQxNiAgIDIxNTA4NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIENvbnN1bXB0aW9uVUlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUkiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgQ29uc3VtcHRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX0NMSUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDSEVDS0JPWF9TSE9XX0dFTkVSQVRFX0pBVkFfUFJPWFlfRElBTE9HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRF9DSEVDS0JPWF9XU0RMMlBST1hZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfU1JQRl9DT01CT19TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9TUlBGX0NPTUJPX1JVTlRJTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9TUlBGX0NPTUJPX0oyRUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX05PX1NFUlZFUl9SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRV9JTlNUQUxMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRk9MREVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSlNQX0ZPTERFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQl9QUk9KRUNUX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV0VCU0VSVklDRVRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV0VCU0VSVklDRUlNUEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV0VCU0VSVklDRURFRjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9KMkVFX1ZFUlNJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTkE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fQlJPV1NFX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJPVFRPTVVQX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPUERPV05fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0xJRU5UX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTUJJTkVEX1RZUEVfQU5EX1JVTlRJTUVfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0laQVJEX1RJVExFX1dTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX1NFUlZJQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX0NMSUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fU1RBUlRfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0lOU1RBTExfU0VSVklDRV9XRUJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fSU5TVEFMTF9DTElFTlRfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgR1JPVVBfU0NFTkFSSU9fU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHUk9VUF9TQ0VOQVJJT19DTElFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV0VCU0VSVklDRUNMSUVOVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19SVU5USU1FX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NfUlVOVElNRV9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU1VNTUFSWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVU1NQVJZX05PX0NMSUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9SVU5USU1FU19MSVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFUlZFUlNfTElTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FRElUX0JVVFRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWSUNFX0VBUl9NT0RVTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX0VBUl9NT0RVTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX01PRFVMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWSUNFX01PRFVMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWSUNFX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX0VBUl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFUlZJQ0VfRUFSX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9XRUI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9FSkI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9BUFBfQ0xJRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9DT01QX1RZUEVfQ09OVEFJTkVSTEVTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUlNfVEVYVF9SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19URVhUX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUlNfSjJFRV9WRVJTSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFTEVDVElPTl9WSUVXX1RJVExFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFTEVDVElPTl9WSUVXX1JVTlRJTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VMRUNUSU9OX1ZJRVdfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFTEVDVElPTl9WSUVXX0VYUExPUkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVFJFRV9FWElTVElOR19TRVJWRVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1RSRUVfU0VSVkVSX1RZUEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19OT19PQkpFQ1RfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19OT19TRVJWSUNFX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9TRVJWSUNFX0RFRjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9TRVJWSUNFX0lNUEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fU0VSVklDRV9JTVBMX05BTUlOR19DT05WRU5USU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19OT19SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19OT19TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1NUVUJfT05MWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9TVFVCX09OTFk7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fTk9fU0VSVklDRV9TRVJWRVI7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fTk9fQ0xJRU5UX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVkVSX1RBUkdFVF9NSVNNQVRDSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSjJFRV9NSVNNQVRDSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9QUk9KRUNUX0VNUFRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TRVJWSUNFX1BST0pFQ1RfVFlQRV9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9FQVJfRU1QVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9QUk9KRUNUX0VNUFRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19DTElFTlRfUFJPSkVDVF9UWVBFX0VNUFRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19DTElFTlRfRUFSX0VNUFRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTlZBTElEX0VKQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTlZBTElEX1dFQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTlZBTElEX1BST0pFQ1RfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTU9EVUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19NT0RVTEVfTkFNRV9BTkRfUFJPSkVDVF9OQU1FX05PVF9USEVfU0FNRTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9KQVZBUFJPSkVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNUOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TRVJWSUNFX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNUOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19DTElFTlRfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TQU1FX0NMSUVOVF9BTkRfU0VSVklDRV9FQVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TQU1FX0NMSUVOVF9BTkRfU0VSVklDRV9DT01QT05FTlRTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TQU1FX0NMSUVOVF9BTkRfU0VSVklDRV9QUk9KRUNUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV1JPTkdfQ0xJRU5UX1BST0pFQ1RfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX1NVQjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9TVUI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0dFTkVSQUxfUFJPSkVDVF9BTkRfRUFSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FQVJfUFJPSkVDVF9XSUxMX0JFX0NSRUFURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VBUl9XSUxMX0JFX0FTU09DSUFURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1BST0pFQ1RfV0lMTF9CRV9DUkVBVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FQVJfV0lMTF9CRV9DUkVBVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19QUk9KRUNUX0FORF9FQVJfQ1JFQVRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX0NMSUVOVF9SVU5USU1FX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NfQ0xJRU5UX1JVTlRJTUVfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9TRUxFQ1RJT05fVklFV19USVRMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWSUNFX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV0VCOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0VKQjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9OT19MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19WQUxJREFUSU9OX0lOVEVSTkFMX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NfWE1MMkJFQU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX04yUF9NQVBQSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTUFQUElOR19EVVBMSUNBVEVfRU5UUklFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fR0VORVJBVEVfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTU0tFTF9DT05GSUc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU1NLRUxfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJTQ19URVhUX1NLRUxFVE9OX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCU0NfQlVUVE9OX1NLRUxFVE9OX0ZPTERFUl9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0tFTEVUT05fUk9PVF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0JFQU5fQ0xBU1NfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19CRUFOX0NBTk5PVF9CRV9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fQlJPV1NFX0NMQVNTRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU1RFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDSEVDS0JPWF9URVNUX1dFQlNFUlZJQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfTU9OSVRPUl9XRUJTRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkFCTEVfVE9fTEFVTkNIX1dTRExfVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fTEFVTkNIX1NFUlZJQ0VfVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1NBTVBMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NfU0FNUExFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9URVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1RFU1RfVFlQRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1JVTl9URVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSlNQX1BST0pFQ1RfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSlRTX1BST1hZX05PVF9DT01QSUxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfTUFMRk9STUVEX1VSTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fU0VMRUNUX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fREVTRUxFQ1RfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJNRV9CVVRUT05fU0VMRUNUX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCTUVfQlVUVE9OX0RFU0VMRUNUX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTRExfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU0RMX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1BVQkxJU0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX1BVQkxJU0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19GSU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19GSU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9XU19QVUJMSVNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9XU1dTQ0VOX1BVQkxJU0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1dTX1BVQkxJU0hfUFJJVkFURV9VRERJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9XU19GSU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9XU19GSU5EX1BSSVZBVEVfVURESTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9QVUJMSUNfVURESV9SRUdJU1RSSUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0VKQl9CRUFOX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfVElUTEVfRUpCX0JFQU5fTkFNRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfVElUTEVfRUpCX1BST0pFQ1RfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FQVJfUFJPSkVDVFM7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0hPV19BTExfU1RBVEVMRVNTX1NFU1NJT05fRUpCUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDSEVDS0JPWF9PVkVSV1JJVEVfRklMRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVElMRV9TRVJWSUNFX1BST0pFQ1RfU0VUVElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVElMRV9DTElFTlRfUFJPSkVDVF9TRVRUSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUSUxFX1NFUlZJQ0VfSU1QTF9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVElMRV9TRVJWSUNFX0RFRl9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NFUlZJQ0VQUk9KRUNUX0xJTks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX0NMSUVOVFBST0pFQ1RfTElOSzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfREVWRUxPUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfQVNTRU1CTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFUExPWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfSU5TVEFMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfUlVOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9URVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9TRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVF9PTkxZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9URVhUX0lNUEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9PVkVSV1JJVEVfRklMRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9CUk9XU0VfSU1QTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0VBUl9QUk9KRUNUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1RBQkxFX0JFQU5fTkFNRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1dTX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQkNMX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQkNMX1RFWFRfQkVBTl9DTEFTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fQ0xBU1NfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDTF9CVVRUT05fQkVBTl9SRVNPVVJDRV9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QU1RQX0NPTUJPQk9YX1RFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QU1RQX0xBVU5DSF9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1JTX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1JTX0xJU1RfUlVOVElNRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1JTX0xJU1RfU0VSVkVSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUlNfUkFESU9fU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19SQURJT19SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19SQURJT19FWFBMT1JFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdDUl9DT01CT19DTElFTlRfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXQ1JfQ09NQk9fU0VSVklDRV9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9DT01CT19UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9HUk9VUF9TQ0VOQVJJT19TRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9DSEVDS0JPWF9HRU5FUkFURV9QUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ0hFQ0tCT1hfU1RBUlRfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0lOU1RBTExfU0VSVklDRV9XRUJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ0hFQ0tCT1hfSU5TVEFMTF9DTElFTlRfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0xBVU5DSF9XUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ0hFQ0tCT1hfVEVTVF9TRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0dST1VQX1NDRU5BUklPX0NMSUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ09NQk9fQ0xJRU5UVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUEJfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUEJfQ0hFQ0tCT1hfV1NfTEFVTkNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfV1NJTF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVElUTEVfV1NJTF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVTQ19XU0lMX0lNUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfTVNHX0xPQURJTkdfV0VCX1NFUlZJQ0VfVVJJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfTVNHX0lOVkFMSURfV0VCX1NFUlZJQ0VfVVJJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfTVNHX05PX1NVQ0hfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19TRUxFQ1RJT05fTVVTVF9CRV9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfTVNHX0lOVkFMSURfV1NJTF9GSUxFX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VSSV9OT1RfUkVTT0xWQUJMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV1NETF9IQVNfTk9fU0VSVklDRV9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTSUxfVVJJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExfVVJJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0lNUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9BREQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfUkVNT1ZFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRUxFQ1RfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9WQUxJREFURV9NRVNTQUdFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTSUxfSU1QT1JUX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU0lMX1RFWFRfV1NJTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTSUxfQlVUVE9OX0JST1dTRV9XU0lMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NJTF9UQUJMRV9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUENPTl9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUENPTl9URVhUX1dTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUENPTl9CVVRUT05fQlJPV1NFX1dTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfVkFMSURBVEVfVEVYVF9NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfVEFCTEVfVkFMSURBVEVfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQUJMRV9DT0xVTU5fVkFMSURBVElPTl9TRVZFUklUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQUJMRV9DT0xVTU5fVkFMSURBVElPTl9MSU5FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX0NPTFVNTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQUJMRV9DT0xVTU5fVkFMSURBVElPTl9NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9DSEVDS0JPWF9URVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9DT01CT0JPWF9URVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9DSEVDS0JPWF9MQVVOQ0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX1RFWFRfSlNQX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQlVUVE9OX0pTUF9GT0xERVJfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9CVVRUT05fU0VMRUNUX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQlVUVE9OX0RFU0VMRUNUX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQ09NQk9fUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fVEVYVF9TQU1QTEVfRk9MREVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9UUkVFX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX0VBUl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRMRV9IVFRQX0JBU0lDX0FVVEg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVVJMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0dFTkVSQVRFX0hBTkRMRVJfU0tFTEVUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dSSVRFX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSEFORExFUlNfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0JVVFRPTl9BREQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQlVUVE9OX1JFTU9WRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CVVRUT05fTU9WRV9VUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CVVRUT05fTU9WRV9ET1dOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0JVVFRPTl9HRU5fU0tFTEVUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ09NQk9fU09VUkNFX0xPQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DT01CT19XU19DTElFTlRfUkVGOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NPTUJPX1dTX1NFUlZJQ0VfREVTQzsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfVEVYVF9OVU1fT0ZfU0VSVklDRVM7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1RFWFRfTlVNX09GX0NMSUVOVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSEFORExFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkxFX0hBTkRMRVJfQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSEFORExFUl9QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRMRV9XU19BRERfSEFORExFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9URVhUX0hBTkRMRVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9URVhUX0hBTkRMRVJfQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVEVYVF9IQU5ETEVSX1BPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9TRVJWSUNFX0hETFJfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19TRVJWSUNFX0hETFJfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfQ0xJRU5UX0hETFJfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19DTElFTlRfSERMUl9DT05GSUc7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX01VTFRJUExFX1NFUlZJQ0VTX0NPTkZJRzsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfTVVMVElQTEVfQ0xJRU5UU19DT05GSUc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9FRElUX1dTX0hBTkRMRVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfQlVUVE9OX0dFTl9TS0VMRVRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0NPTUJPX1NPVVJDRV9MT0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9URVhUX0hBTkRMRVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1RFWFRfSEFORExFUl9DTEFTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1RFWFRfSEFORExFUl9QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NfQ0xJRU5UX1JFRjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTX1NFUlZJQ0VfREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5BQkxFX1RPX09QRU5fSkFWQV9FRElUT1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fSVNfU0VSVklDRV9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19VU0VSX0FCT1JURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX01JU1NJTkdfVEhJUkRfUEFSVFlfRklMRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5JTkdfTk9fU0VSVklDRV9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNUSUxMX1ZBTElEQVRJTkdfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDQU5DRUxfVkFMSURBVElPTl9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDQU5DRUxfVkFMSURBVElPTl9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDQU5DRUxfQUxMX1ZBTElEQVRJT05fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0FOQ0VMX0FMTF9WQUxJREFUSU9OX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBSVRfVkFMSURBVElPTl9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXQUlUX1ZBTElEQVRJT05fREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFTS19MQUJFTF9DSEVDS19XU0RMX1ZBTElEQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFTS19ERVNDX0NIRUNLX1dTRExfVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNRVNTQUdFX1ZBTElEQVRFX05PX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0FHRV9WQUxJREFURV9SRU1PVEVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNRVNTQUdFX1ZBTElEQVRFX0FMTF9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1FU1NBR0VfVkFMSURBVEVfSU5fUFJPR1JFU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfTUVTU0FHRVNfSU5fVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXQVJOSU5HX01FU1NBR0VTX0lOX1ZBTElEQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FSTklOR19JRl9DT05USU5VRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBWQUxJREFUSU9OX0NPTVBMRVRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1ZBTElEQVRFX1RFWFRfTUVTU0FHRV9TVU1NQVJZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0JVVFRPTl9TVE9QX1dTRExfVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1NUT1BfVkFMSURBVElPTl9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19TVEFSVF9TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX1NUQVJUX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQyOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NUQVJUX1NFUlZFUl9URVhUMzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU1RBUlRfU0VSVkVSX0JVVFRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1NUQVJUX1NFUlZFUl9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEVYVF9TRVJWRVJfU1RBVFVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFWFRfU0VSVkVSX01TRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBURVhUX1NFUlZFUl9TVEFSVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFWFRfU0VSVkVSX1NUQVJUSU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFWFRfU0VSVkVSX1NUT1BQRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fQU5UX1JVTlRJTUVfSEVBRElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19BTlRfU0VSVkVSX1JVTlRJTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fQU5UX0NMSUVOVF9SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX0FOVF9TRVJWRVJfSEVBRElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19BTlRfU0VSVkVSOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XRUJfU0VSVklDRV9DTElFTlRTX05PVF9GT1VORDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV0VCX1NFUlZJQ0VTX05PVF9GT1VORDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV1NERF9OT1RfRk9VTkQ7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9DQU5OT1RfQVNTT0NJQVRFOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TRVJWSUNFX0NBTk5PVF9BU1NPQ0lBVEU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1BST0pFQ1RfTVVTVF9FWElTVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU5WQUxJRF9NVUxUSVBMRV9TRVJWSUNFX1NFTEVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfTU9EVUxFX0RFUEVOREVOQ1k7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fV1NETF9PUEVSQVRJT05fVElNRURfT1VUOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TRVJWRVJfTk9UX0ZPVU5EX1dBUk5JTkc7Ci0KLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9hbnQvQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9hbnQvQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGUwZDM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvYW50L0FudENsaWVudFJvb3RDb21tYW5kRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MzAgICAxNDQzNTgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTMwICAgMTQ0MzUwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKiAyMDA3MDUwMSAgIDE3ODEyOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd29ya3NwYWNlIHJlcG9ydHMgImNyYXNoIGRldGVjdGVkIiBhZnRlciBydW5uaW5nIFdTIGFudCB0YXNrIChjbWRsaW5lKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5BbnREZWZhdWx0aW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkFudFJlc3RvcmluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuTGlzdE9wdGlvbnNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRmluaXNoRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5TY2VuYXJpb0NsZWFudXBDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uQ2xpZW50Um9vdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLkNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hEZWZhdWx0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5Bc3NlbWJsZUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRlcGxveUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRldmVsb3BDbGllbnRGcmFnbWVudDsKLQotLyoqCi0gKiAKLSAqIENvbW1hbmQgZnJhZ21lbnQgZm9yIGdlbmVyYXRpbmcgYSB3ZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2suCi0gKiBSdW4gaGVhZGxlc3MgRWNsaXBzZSBvciB3aXRoaW4gd29ya3NwYWNlIHVzaW5nIFJ1biBhcyBBbnQgQnVpbGQuICBUaGlzIGZyYWdtZW50IGVsaW1pbmF0ZXMgYW55IFVJIHNwZWNpZmljIAotICogY29tbWFuZHMgYW5kIGRhdGEgbWFwcGluZ3MgYmV0d2VlbiBjb21tYW5kcyBhbmQgd2lkZ2V0cy4gIFdpZGdldCB0byBjb21tYW5kIG1hcHBpbmdzIGFyZQotICogcmVwbGFjZWQgYnkgQW50IHByb3BlcnR5IGZpbGUgdG8gY29tbWFuZCBtYXBwaW5ncyB3aGljaCBhcmUgZW5hYmxlZCBieSBhIGFudERhdGFNYXBwaW5nIGV4dGVuc2lvbiAKLSAqIHBvaW50IGluIHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYgcGx1Z2luLgotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIEFudENsaWVudFJvb3RDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50ewotCQotICBwdWJsaWMgQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudCgpCi0gIHsJIAotCSAgICAKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IExpc3RPcHRpb25zQ29tbWFuZCgpLCAiIikpOwotICBhZGQgKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQW50RGVmYXVsdGluZ09wZXJhdGlvbigpLCAiIikpOwotICAKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCh0cnVlKSwgIiIgKSApOwotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gIAotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kKCksICIiKSk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gIAotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCB0cnVlICksICIiKSk7Ci0gIGFkZCggbmV3IENsaWVudFJvb3RGcmFnbWVudCgpICk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCgpLCAiIiApICk7Ci0gCi0gIGFkZChuZXcgRmluaXNoRnJhZ21lbnQoKSk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQW50UmVzdG9yaW5nQ29tbWFuZCgpLCAiIiApKTsKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEFudFdvcmtzcGFjZVNhdmVDb21tYW5kKCksICIiKSk7Ci0gCi0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwucHJvdmlzaW9uYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1bnRpbWUyQ2xpZW50VHlwZXMiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SjJFRVZlcnNpb24iLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVudGltZTJDbGllbnRUeXBlcyIsIENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotLy8gICAgTWFwIEFudERlZmF1bHRpbmdPcGVyYXRpb24gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJDbGllbnRJZHNGaXhlZCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJEZXBsb3lDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgICAgCi0gICAgICAvLyBNYXAgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5XU0lMIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NpbFVSSSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VVUkkiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBuZXcgRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyKCkpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNvbXBvbmVudE5hbWUiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbFByb2plY3QiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkNvbXBvbmVudE5hbWUiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsQ29tcG9uZW50TmFtZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuY2xhc3MpOyAgICAgIAotCSAgCi0gICAgICAvLyBTZXR1cCB0aGUgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOyAgICAgICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdFR5cGUiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0JICAKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgbnVsbCk7ICAgICAgCi0JICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZUNsaWVudCIsIG51bGwgKTsKLQkJCQotICAgICAgLy8gTWFwIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQuY2xhc3MpOyAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCBjb21tYW5kLgotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIC8vIE1BUCBwb3N0IHNlcnZlciBjb25maWcgY2FsbCAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkVhclByb2plY3ROYW1lIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlckluc3RhbmNlIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkV4aXN0aW5nU2VydmVySWQiLCBudWxsKTsgICAgIAotICAgICAgICAgICAgCi0gICAgICAvL01hcHBpbmdzIHRvIGVuYWJsZSBwZWVrLWFoZWFkIGZvciBQYWdlIDMgb2YgdGhlIGNsaWVudCB3aXphcmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcywgIlByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsgIAotICAgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIlJlbmRlcmVyVmFsaWRhdGlvbiIsIEFudFJlc3RvcmluZ0NvbW1hbmQuY2xhc3MpOyAgICAgICAgICAKLSAgIH0gICAgICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudERlZmF1bHRpbmdPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BbnREZWZhdWx0aW5nT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYmY1N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudERlZmF1bHRpbmdPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYxMDExICAgMTU5MjgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBwcm9qZWN0IG5vdCBhc3NvY2lhdGVkIHRvIEVBUiB3aGVuIHVzaW5nIGFudCBvbiBjb21tYW5kLWxpbmUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmludGVybmFsLmVtZi5yZXNvdXJjZS5SZW5kZXJlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBBbnREZWZhdWx0aW5nT3BlcmF0aW9uIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb257Ci0KLQlwcml2YXRlIGJvb2xlYW4gcmVuZGVyZXJWYWxpZGF0aW9uOwotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLQkJcmVuZGVyZXJWYWxpZGF0aW9uID0gUmVuZGVyZXJGYWN0b3J5LmdldERlZmF1bHRSZW5kZXJlckZhY3RvcnkoKS5pc1ZhbGlkYXRpbmcoKTsJCQotCQlSZW5kZXJlckZhY3RvcnkuZ2V0RGVmYXVsdFJlbmRlcmVyRmFjdG9yeSgpLnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCXB1YmxpYyBJU3RhdHVzIHVuZG8oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkKLQkJUmVuZGVyZXJGYWN0b3J5LmdldERlZmF1bHRSZW5kZXJlckZhY3RvcnkoKS5zZXRWYWxpZGF0aW5nKHJlbmRlcmVyVmFsaWRhdGlvbik7Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0U2VydmljZUlkc0ZpeGVkKCkKLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldENsaWVudElkc0ZpeGVkKCkKLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKQotCXsKLQkJcmV0dXJuIGZhbHNlOwkKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFNlcnZpY2UoKQotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lTZXJ2aWNlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0UmVuZGVyZXJWYWxpZGF0aW9uKCkKLSAgICB7Ci0gICAgCXJldHVybiByZW5kZXJlclZhbGlkYXRpb247Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudFJlc3RvcmluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BbnRSZXN0b3JpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNzM5MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudFJlc3RvcmluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5pbnRlcm5hbC5lbWYucmVzb3VyY2UuUmVuZGVyZXJGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgQW50UmVzdG9yaW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uewotCi0JcHJpdmF0ZSBib29sZWFuIHJlbmRlcmVyVmFsaWRhdGlvbjsKLQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQotCQlSZW5kZXJlckZhY3RvcnkuZ2V0RGVmYXVsdFJlbmRlcmVyRmFjdG9yeSgpLnNldFZhbGlkYXRpbmcocmVuZGVyZXJWYWxpZGF0aW9uKTsKLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgc2V0UmVuZGVyZXJWYWxpZGF0aW9uKGJvb2xlYW4gcmVuZGVyZXJWYWxpZGF0aW9uKQotICAgIHsKLSAgICAJdGhpcy5yZW5kZXJlclZhbGlkYXRpb24gPSByZW5kZXJlclZhbGlkYXRpb247Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudFdvcmtzcGFjZVNhdmVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwMDA5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwMSAgIDE3ODEyOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd29ya3NwYWNlIHJlcG9ydHMgImNyYXNoIGRldGVjdGVkIiBhZnRlciBydW5uaW5nIFdTIGFudCB0YXNrIChjbWRsaW5lKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIEFudFdvcmtzcGFjZVNhdmVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQl0cnkgewotCQkJLy8gYXR0ZW1wdCB0byBzYXZlIHRoZSBzdGF0ZSBvZiB0aGUgd29ya3NwYWNlCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBtb25pdG9yKTsKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBFeGVjdXRpb25FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotCQl9Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9DaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNTY3NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uVmFsaWRhdGlvblV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLS8qKgotICogVGhpcyBjb21tYW5kIGNoZWNrcyB0byBzZWUgaWYgdGhlIHNlbGVjdGVkIGNsaWVudCBwcm9qZWN0IGlzIHRoZQotICogc2VydmljZSBwcm9qZWN0LiBJZiBzbywgdGhlIHVzZXIgaXMgd2FybmVkLgotICovCi1wdWJsaWMgY2xhc3MgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAvL1NlbGVjdGlvbkxpc3RDaG9pY2VzIHJ1bnRpbWUyQ2xpZW50VHlwZXM7Ci0gIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZTsKLSAgU3RyaW5nIHdzZGxVUkk7Ci0gIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICAgIAotICBwdWJsaWMgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQoKQotICB7Ci0gIH0KLSAgCi0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBjbGllbnRQcm9qZWN0TmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgCi0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUuQ29tbWFuZCNleGVjdXRlKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5FbnZpcm9ubWVudCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaWYgKGNsaWVudFByb2plY3ROYW1lPT1udWxsIHx8IHdzZGxVUkk9PW51bGwgfHwgd3NkbFVSSS5sZW5ndGgoKT09MCB8fCB3ZWJTZXJ2aWNlc1BhcnNlcj09bnVsbCkKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gICAgaWYgKGNsaWVudFByb2plY3ROYW1lPT1udWxsIHx8IGNsaWVudFByb2plY3ROYW1lLmxlbmd0aCgpPT0wKQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICBJUHJvamVjdCBjbGllbnRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGNsaWVudFByb2plY3ROYW1lKTsKLSAgICBWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0gICAgYm9vbGVhbiBpc1NlcnZpY2VQcm9qZWN0ID0gdnUuaXNQcm9qZWN0U2VydmljZVByb2plY3QoY2xpZW50UHJvamVjdCwgd3NkbFVSSSwgd2ViU2VydmljZXNQYXJzZXIpOwotICAgIGlmIChpc1NlcnZpY2VQcm9qZWN0KQotICAgIHsKLSAgICAgIElTdGF0dXMgd1N0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTl9JU19TRVJWSUNFX1BST0pFQ1QsIG5ldyBTdHJpbmdbXXtjbGllbnRQcm9qZWN0TmFtZX0pICk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydCh3U3RhdHVzKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpCi0gICAgICB7Ci0gICAgICAgIC8vVXNlciBkZWNpZGVkIHRvIGFib3J0LiBSZXR1cm4gYW4gZXJyb3Igc3RhdHVzCi0gICAgICAgIElTdGF0dXMgZVN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1VTRVJfQUJPUlRFRCApOwotICAgICAgICByZXR1cm4gZVN0YXR1czsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0dlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0dlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODc4MjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9HZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0ICAgMTM0OTEzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgIAotICogMjAwNjA1MTcgICAxNDIwMjcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk11bHRpU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyU2VydmljZVJlZkhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVudmlyb25tZW50VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElQYXRoIG91dHB1dExvY2F0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGdlblNrZWxldG9uXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaGFuZGxlck5hbWVGb3JFZGl0XyA9IG51bGw7Ci0gIAotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICBwcml2YXRlIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXzsKLSAgCi0gIHB1YmxpYyBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQoKQotICB7Ci0gIH0KLSAgCi0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgCi0gICAgSVN0YXR1cyAgICAgcmV0dXJuU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotICAJaWYgKCFnZW5Ta2VsZXRvbl8pCXJldHVybiByZXR1cm5TdGF0dXM7IAotICAJCi0gICAgICAvLyBmb3JtIHRoZSBtYXAgb2YgY2xhc3NuYW1lIHRvIGxvY2F0aW9ucwotICAgICAgaWYgKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8hPW51bGwpewotICAgICAgICBmb3IgKGludCBpPTA7aTxoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLmxlbmd0aDtpKyspewotICAgICAgICAgIEhhc2h0YWJsZSBoYW5kbGVyVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgICAgSVBhdGggb3V0UGF0aCA9IGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0uZ2V0U291cmNlT3V0cHV0UGF0aCgpOwotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfW2ldLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgICAgZm9yIChpbnQgaj0wO2o8aGFuZGxlcnMuc2l6ZSgpO2orKyl7Ci0gICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKWhhbmRsZXJzLmdldChqKTsKLSAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpOwotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSE9bnVsbCAmJiBvdXRQYXRoIT1udWxsKQotICAgICAgICAgICAgICBoYW5kbGVyVGFibGUucHV0KGNsYXNzTmFtZSwgb3V0UGF0aCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVyblN0YXR1cyA9IGdlbkhhbmRsZXJzQ2xhc3NlcyhoYW5kbGVyVGFibGUsIG1vbml0b3IpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXy5sZW5ndGg7aSsrKXsKLSAgICAgICAgICBIYXNodGFibGUgaGFuZGxlclRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICAgIElQYXRoIG91dFBhdGggPSBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uZ2V0U291cmNlT3V0cHV0UGF0aCgpOwotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgICBmb3IgKGludCBqPTA7ajxoYW5kbGVycy5zaXplKCk7aisrKXsKLSAgICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0paGFuZGxlcnMuZ2V0KGopOwotICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lIT1udWxsICYmIG91dFBhdGghPW51bGwpCi0gICAgICAgICAgICAgIGhhbmRsZXJUYWJsZS5wdXQoY2xhc3NOYW1lLCBvdXRQYXRoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuU3RhdHVzID0gZ2VuSGFuZGxlcnNDbGFzc2VzKGhhbmRsZXJUYWJsZSwgbW9uaXRvcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAKLSAKLSAgICByZXR1cm4gcmV0dXJuU3RhdHVzOwotCi0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBnZW5IYW5kbGVyc0NsYXNzZXMoSGFzaHRhYmxlIGhhbmRsZXJzRm9yR2VuLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpewotICAgIElFbnZpcm9ubWVudCBlbnYgICAgICAgICAgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIE11bHRpU3RhdHVzIHN0YXR1cyAgICAgICA9IG51bGw7Ci0gICAgSVN0YXR1cyAgICAgcmV0dXJuU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBib29sZWFuIGVycm9yID0gZmFsc2U7Ci0gICAgCi0gICAgSVN0YXR1cyB3cml0ZVN0YXR1czsgICAgCi0gICAgRW51bWVyYXRpb24ga2V5cyA9IGhhbmRsZXJzRm9yR2VuLmtleXMoKTsKLSAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIHdyaXRlU3RhdHVzID0gd3JpdGVGaWxlKGVudiwgY2xhc3NOYW1lLCAoSVBhdGgpaGFuZGxlcnNGb3JHZW4uZ2V0KGNsYXNzTmFtZSksIG1vbml0b3IgKTsKLSAgICAgICAgLy8gaGFuZGxlIHN0YXR1cyByZXR1cm4KLSAgICAgICAgaWYgKHdyaXRlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7ICAvLyB3cml0ZSBzdGF0dXMgaXMgT0sgb3IgRVJST1IKLSAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0dFTkVSQVRFX0hBTkRMRVJfU0tFTEVUT04sIG5ldyBJU3RhdHVzWzBdICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0dXMuYWRkKHdyaXRlU3RhdHVzKTsKLSAgICAgICAgfSAKLSAgICB9Ci0gICAgCi0gICAgaWYgKGVycm9yKSAKLSAgICB7Ci0gICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgIHJldHVyblN0YXR1cyA9IHN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJldHVyblN0YXR1czsKLSAgICAKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgSVN0YXR1cyB3cml0ZUZpbGUgKElFbnZpcm9ubWVudCBlbnYsIFN0cmluZyBjbGFzc05hbWUsIElQYXRoIG91dHB1dExvY2F0aW9uLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSAKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJaW50IGluZGV4OwotICAJCi0gIAlTdHJpbmcgc2ltcGxlQ2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAJU3RyaW5nIHBhY2thZ2VOYW1lID0gbnVsbDsKLSAgCUlQYXRoIGZpbGVQYXRoID0gb3V0cHV0TG9jYXRpb247Ci0gIAlpZiAoY2xhc3NOYW1lICE9IG51bGwpIHsKLSAgCQlpbmRleCA9IGNsYXNzTmFtZS5sYXN0SW5kZXhPZignLicpOwotICAJCWlmIChpbmRleCAhPSAtMSkgewotICAJCQlzaW1wbGVDbGFzc05hbWUgPSBjbGFzc05hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gIAkJCXBhY2thZ2VOYW1lID0gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gIAkJCQotICAJCSAgCVN0cmluZyBwYWNrYWdlU2VnbWVudCA9IHBhY2thZ2VOYW1lOwotICAJCSAgCWludCBqID0gMDsKLSAgCQkgIAlqID0gcGFja2FnZVNlZ21lbnQuaW5kZXhPZignLicpOwotICAJCSAgCXdoaWxlIChqICE9IC0xKSB7Ci0gIAkJICAJCWZpbGVQYXRoID0gZmlsZVBhdGguYXBwZW5kKHBhY2thZ2VTZWdtZW50LnN1YnN0cmluZygwLCBqKSk7Ci0gIAkJICAJCXBhY2thZ2VTZWdtZW50ID0gcGFja2FnZVNlZ21lbnQuc3Vic3RyaW5nKGogKyAxKTsKLSAgCQkgIAkJaiA9IHBhY2thZ2VTZWdtZW50LmluZGV4T2YoJy4nKTsKLSAgCQkgIAl9Ci0gIAkJICAgIGZpbGVQYXRoID0gZmlsZVBhdGguYXBwZW5kKHBhY2thZ2VTZWdtZW50KTsKLSAgCQl9Ci0gIAkJZWxzZSB7Ci0gIAkJICBwYWNrYWdlTmFtZSA9ICIiOwotICAJCX0KLSAgCX0KLSAgCQotICAJZmlsZVBhdGggPSBmaWxlUGF0aC5hcHBlbmQoc2ltcGxlQ2xhc3NOYW1lKTsKLSAgCQotICAJZmlsZVBhdGggPSBmaWxlUGF0aC5hZGRGaWxlRXh0ZW5zaW9uKCJqYXZhIik7Ci0KLSAgCS8vIGNoZWNrIGlmIEhhbmRsZXIgYWxyZWFkeSBleGlzdHM7IGRvIG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgSGFuZGxlcnMKLSAgCUlSZXNvdXJjZSB3b3Jrc3BhY2VSZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShmaWxlUGF0aCk7Ci0gIAlpZiAod29ya3NwYWNlUmVzIT1udWxsICYmIHdvcmtzcGFjZVJlcy5leGlzdHMoKSkgewotICAJCXJldHVybiBzdGF0dXM7Ci0gIAl9Ci0gIAkKLSAgCWlmIChoYW5kbGVyTmFtZUZvckVkaXRfID09IG51bGwpewotICAJCWhhbmRsZXJOYW1lRm9yRWRpdF8gPSBjbGFzc05hbWU7Ci0gICAgICAgIG91dHB1dExvY2F0aW9uXyA9IG91dHB1dExvY2F0aW9uOwotICAJfQotICAJCi0gIAlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gRmlsZVJlc291cmNlVXRpbHMubmV3RmlsZU91dHB1dFN0cmVhbSggRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwgZmlsZVBhdGgsIG1vbml0b3IsIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotICAJLy8gY3JlYXRlIGJ1ZmZlcmVkIHdyaXRlciBmb3Igd3JpdGluZyBmaWxlCi0gIAlCdWZmZXJlZFdyaXRlciBidyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSkpOwotICAJdHJ5IHsKLSAgCQlpZiAocGFja2FnZU5hbWUubGVuZ3RoKCkgIT0gMCkgewotICAJCQlidy53cml0ZSgicGFja2FnZSAiICtwYWNrYWdlTmFtZSsiOyIpOwotICAJCQlidy5uZXdMaW5lKCk7Ci0gIAkJCWJ3Lm5ld0xpbmUoKTsKLSAgCQl9Ci0gIAkJYncud3JpdGUoImltcG9ydCBqYXZheC54bWwucnBjLmhhbmRsZXIuR2VuZXJpY0hhbmRsZXI7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCJpbXBvcnQgamF2YXgueG1sLnJwYy5oYW5kbGVyLk1lc3NhZ2VDb250ZXh0OyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQkKLSAgCQlidy53cml0ZSgicHVibGljIGNsYXNzICIrc2ltcGxlQ2xhc3NOYW1lKyIgZXh0ZW5kcyBHZW5lcmljSGFuZGxlciIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgieyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJCi0gIAkJYncud3JpdGUoIiAgIHB1YmxpYyBRTmFtZVtdIGdldEhlYWRlcnMgKCkiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIHsiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIC8vIEZpbGwgaW4gbWV0aG9kIGJvZHkiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIHJldHVybiBudWxsOyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgfSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQgKSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgeyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgLy8gRmlsbCBpbiBtZXRob2QgYm9keSBvciBkZWxldGUgbWV0aG9kIHRvIHVzZSBHZW5lcmljSGFuZGxlciIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgcmV0dXJuIHRydWU7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICB9Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVzcG9uc2UoIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQgKSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgeyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgLy8gRmlsbCBpbiBtZXRob2QgYm9keSBvciBkZWxldGUgbWV0aG9kIHRvIHVzZSBHZW5lcmljSGFuZGxlciAiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIHJldHVybiB0cnVlOyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgfSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KCBNZXNzYWdlQ29udGV4dCBjb250ZXh0ICkiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIHsiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIC8vIEZpbGwgaW4gbWV0aG9kIGJvZHkgb3IgZGVsZXRlIG1ldGhvZCB0byB1c2UgR2VuZXJpY0hhbmRsZXIiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIHJldHVybiB0cnVlOyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgfSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQkKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIn0iKTsKLSAgCQlidy5jbG9zZSgpOwotICAJCXN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7CQotICAJfSAKLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgCi0gICAgewotICAJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX0ZJTEUsIG5ldyBTdHJpbmdbXXsgY2xhc3NOYW1lIH0pLCBlICk7Ci0gIAkJaWYgKGJ3ICE9IG51bGwpIHsKLSAgCQkJdHJ5IHsKLSAgCQkJCWJ3LmNsb3NlKCk7Ci0gIAkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUxKSB7Ci0gIAkJCX0KLSAgCQl9Ci0gIAl9Ci0gIAlyZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRHZW5Ta2VsZXRvbkVuYWJsZWQoYm9vbGVhbiBnZW5Ta2VsZXRvbikKLSAgewotICAJdGhpcy5nZW5Ta2VsZXRvbl8gPSBnZW5Ta2VsZXRvbjsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKXsKLSAgCUlQcm9qZWN0IHByb2plY3QgPSBudWxsOwotICAJaWYgKG91dHB1dExvY2F0aW9uXyE9bnVsbCl7Ci0gIAkJcHJvamVjdCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKG91dHB1dExvY2F0aW9uXyk7Ci0gIAl9Ci0gIAlyZXR1cm4gcHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0Q2xhc3NOYW1lcygpewotICAJTGlzdCBjbGFzc2VzID0gbmV3IEFycmF5TGlzdCgpOwotICAJaWYgKGhhbmRsZXJOYW1lRm9yRWRpdF8hPW51bGwpewotICAJCWNsYXNzZXMuYWRkKGhhbmRsZXJOYW1lRm9yRWRpdF8pOwotICAJfQotICAJcmV0dXJuIGNsYXNzZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfID0gaGFuZGxlckhvbGRlcnM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9IGhhbmRsZXJIb2xkZXJzOwotICB9Ci0gIAotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0xpc3RPcHRpb25zQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0xpc3RPcHRpb25zQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFhN2MyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9MaXN0T3B0aW9uc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLS8qKgotICogQ29tbWFuZCBsaXN0cyB2YWxpZCBwcm9wZXJ0eSB2YWx1ZXMgd2hlcmUgcmVxdWVzdGVkLgotICogUmVxdWVzdHMgbWFkZSB2aWEgYSBBbnQgcHJvcGVydHkgdmFsdWUgc2V0dGluZyB3aGljaCBpcyBtYXBwZWQgdG8gdGhpcyBjb21tYW5kIGluIHRoZSBwbHVnaW4ueG1sIAotICovCi0KLXB1YmxpYyBjbGFzcyBMaXN0T3B0aW9uc0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gcnVudGltZXNfID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIHNlcnZlcnNfID0gZmFsc2U7Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykKLQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkJCSAgCQotCQlpZiAocnVudGltZXNfKQotCQl7CQkJCQotCQkJCVN0cmluZ1tdIHR5cGVJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlVHlwZUxhYmVscygpLmdldElkc18oKTsKLQkJCSAgICBWZWN0b3IgcnVudGltZUlkcyA9IG5ldyBWZWN0b3IoKTsKLQkJCQkJZm9yIChpbnQgayA9IDA7IGsgPCB0eXBlSWRzLmxlbmd0aDsgaysrKSB7Ci0JCQkJCQkKLQkJCQkJCVN0cmluZyB0eXBlSWQgPSB0eXBlSWRzW2tdOwkJCQkJCQotCQkJCSAgICAJU3RyaW5nW10gcnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lc0J5U2VydmljZVR5cGUodHlwZUlkKTsJCQkJICAgIAkKLQkJCQkJCQkJICAgIAotCQkJCSAgICAJZm9yIChpbnQgaiA9IDA7IGogPCBydW50aW1lcy5sZW5ndGg7IGorKykgewotCQkJCSAgICAJCVN0cmluZyBydW50aW1lID0gcnVudGltZXNbal07Ci0JCQkJICAgIAkJaWYgKCFydW50aW1lSWRzLmNvbnRhaW5zKHJ1bnRpbWUpKQotCQkJCSAgICAJCXsKLQkJCQkgICAgCQkJcnVudGltZUlkcy5hZGQocnVudGltZSk7CQotCQkJCSAgICAJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkKLQkJCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCAKLQkJCQkJCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwKLQkJCQkJCQlJU3RhdHVzLk9LLAotCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5GT19BTlRfUlVOVElNRV9IRUFESU5HLCAKLQkJCQkJCQludWxsKTsJCQkJCQotCQkJCQlnZXRFbnZpcm9ubWVudCgpLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRJbmZvKHN0YXR1c09iaik7Ci0JCQkJCQotCSAgICAgICAgCi0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gcnVudGltZUlkcy5pdGVyYXRvcigpOyBpdGVyYXRvcgotCQkJCQkuaGFzTmV4dCgpOykgewkJCQotCQkJCSAgZ2V0RW52aXJvbm1lbnQoKS5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0SW5mbyhuZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgCi0JCQkJCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwKLQkJCQkJCUlTdGF0dXMuT0ssIAotCQkJCQkJTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTkZPX0FOVF9TRVJWRVJfUlVOVElNRSwKLQkJCQkJCQkJaXRlcmF0b3IubmV4dCgpKSwgbnVsbCkpOwotCQkJfQotCQkJCQotCQkJCi0JCSAgICBTdHJpbmdbXSBjbGllbnRSdW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldEFsbFJ1bnRpbWVzRm9yQ2xpZW50U2lkZSgpOwotCQkgICAgCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNsaWVudFJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7CQkJCQotCQkJCQotCQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8obmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQkJV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQsCi0JCQkJCQlJU3RhdHVzLk9LLCAKLQkJCQkJCU5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5GT19BTlRfQ0xJRU5UX1JVTlRJTUUsCi0JCQkJCQkJCWNsaWVudFJ1bnRpbWVzW2ldKSwgbnVsbCkpOwotCQkJfQotCQl9Ci0JCQotCQlpZiAoc2VydmVyc18pCi0JCXsJCQkKLQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8obmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwKLQkJCQkJSVN0YXR1cy5PSywgCi0JCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5GT19BTlRfU0VSVkVSX0hFQURJTkcsIG51bGwpKTsKLQkJCQotCQkJSVNlcnZlclR5cGVbXSBzZXJ2ZXJUeXBlcyA9IFNlcnZlckNvcmUuZ2V0U2VydmVyVHlwZXMoKTsKLQkJICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZlclR5cGVzLmxlbmd0aDsgaSsrKQotCQkgICAgICB7CQkgICAgICAgIAotCQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8obmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQkJV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQsCi0JCQkJCQlJU3RhdHVzLk9LLCAKLQkJCQkJCU5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5GT19BTlRfU0VSVkVSLAotCQkJCQkJCQlzZXJ2ZXJUeXBlc1tpXS5nZXRJZCgpKSwgbnVsbCkpOwotCi0JCSAgICAgIH0KLQkJfSAgCi0JCSAgCi0JCXJldHVybiBPS19TVEFUVVM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldExpc3RSdW50aW1lcyhib29sZWFuIHZhbHVlKQotCXsJCQotCQlydW50aW1lc189dmFsdWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldExpc3RTZXJ2ZXJzKGJvb2xlYW4gdmFsdWUpCi0JewkJCi0JCXNlcnZlcnNfPXZhbHVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9PcGVuSmF2YUVkaXRvckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9PcGVuSmF2YUVkaXRvckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiZWRkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvT3BlbkphdmFFZGl0b3JDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAxMzQ5MTMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLkphdmFVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5VSUpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBPcGVuSmF2YUVkaXRvckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIExpc3QgY2xhc3NOYW1lczsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotICBwcml2YXRlIGJvb2xlYW4gaXNFbmFibGVkXyA9IHRydWU7ICAvLyBpcyB0cnVlIGJ5IGRlZmF1bHQKLQotICBwdWJsaWMgT3BlbkphdmFFZGl0b3JDb21tYW5kKCkKLSAgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBpZiAoaXNFbmFibGVkXykgewotICAgICAgT3BlbkphdmFFZGl0b3JKb2Igam9iID0gbmV3IE9wZW5KYXZhRWRpdG9ySm9iKGNsYXNzTmFtZXMsIHByb2plY3QpOwotICAgICAgam9iLnNldFByaW9yaXR5KEpvYi5MT05HKTsKLSAgICAgIGpvYi5zY2hlZHVsZSgpOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZXMoTGlzdCBjbGFzc05hbWVzKQotICB7Ci0gICAgdGhpcy5jbGFzc05hbWVzID0gY2xhc3NOYW1lczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzRW5hYmxlZChib29sZWFuIGlzRW5hYmxlZCl7Ci0gICAgdGhpcy5pc0VuYWJsZWRfID0gaXNFbmFibGVkOwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIE9wZW5KYXZhRWRpdG9ySm9iIGV4dGVuZHMgVUlKb2IKLSAgewotICAgIHByaXZhdGUgTGlzdCBjbGFzc05hbWVzOwotICAgIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQotICAgIHB1YmxpYyBPcGVuSmF2YUVkaXRvckpvYihMaXN0IGNsYXNzTmFtZXMsIElQcm9qZWN0IHByb2plY3QpCi0gICAgewotICAgICAgc3VwZXIoIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLk9wZW5KYXZhRWRpdG9ySm9iIik7Ci0gICAgICB0aGlzLmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzOwotICAgICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIElTdGF0dXMgcnVuSW5VSVRocmVhZChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gICAgewotICAgICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiBjbGFzc05hbWVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGNsYXNzTmFtZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSAoU3RyaW5nKWl0Lm5leHQoKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJVHlwZSB0eXBlID0gamF2YVByb2plY3QuZmluZFR5cGUoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIEphdmFVSS5vcGVuSW5FZGl0b3IodHlwZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXMob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cy5FUlJPUiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIDAsIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX09QRU5fSkFWQV9FRElUT1IsIG5ldyBTdHJpbmdbXXtjbGFzc05hbWUsIHByb2plY3QuZ2V0TmFtZSgpfSksIHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHByb2plY3QhPW51bGwgfHwgY2xhc3NOYW1lcy5pc0VtcHR5KCkpewotICAgICAgICAvLyBkbyBub3RoaW5nIDsgbm90aGluZyB0byBvcGVuCi0gICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXMob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cy5FUlJPUiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIDAsIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX09QRU5fSkFWQV9FRElUT1IsIG5ldyBTdHJpbmdbXXtjbGFzc05hbWVzICE9IG51bGwgPyBjbGFzc05hbWVzLnRvU3RyaW5nKCkgOiAiIiwgcHJvamVjdCAhPSBudWxsID8gcHJvamVjdC5nZXROYW1lKCkgOiAiIn0pLCBudWxsKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9TdGFydFNlcnZlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9TdGFydFNlcnZlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhMzAyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvU3RhcnRTZXJ2ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDI2ICAgMTYyMjg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2ZXIgcHVibGlzaCBjYW5jZWwgYnV0dG9uIHVuYXZhaWxhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlNlcnZlcjsKLQotLyoqCi0gKiAoUmUpU3RhcnRzIGFuZCBwdWJsaXNoZXMgdGhlIHNlcnZlciBzcGVjaWZlZCBieSB0aGUgc2VydmVySW5zdGFuY2VJZCBhdHRyaWJ1dGUuCi0gKiAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGFydFNlcnZlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElMb2cgbG9nOwotICBwcml2YXRlIGJvb2xlYW4gZG9Bc3luY1B1Ymxpc2hfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJZDsKLQkKLSAgCi0gIHB1YmxpYyBTdGFydFNlcnZlckNvbW1hbmQoKQotICB7Ci0gICAgbG9nICAgICAgICAgICAgID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgICBkb0FzeW5jUHVibGlzaF8gPSB0cnVlOwotICB9Ci0JIAotICBwdWJsaWMgU3RhcnRTZXJ2ZXJDb21tYW5kKCBib29sZWFuIGRvQXN5bmNQdWJsaXNoICkKLSAgewotICAgIHRoaXMoKTsKLSAgICAKLSAgICBkb0FzeW5jUHVibGlzaF8gPSBkb0FzeW5jUHVibGlzaDsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgSVNlcnZlciBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0gICAgaWYgKHNlcnZlciA9PSBudWxsKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0lOU1RBTkNFX05PVF9GT1VORCk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIGludCBzZXJ2ZXJTdGF0ZSA9IHNlcnZlci5nZXRTZXJ2ZXJTdGF0ZSgpOwotCi0gICAgLy8gIFB1Ymxpc2ggaWYgcmVxdWlyZWQKLSAgICBpZiAoKChTZXJ2ZXIpc2VydmVyKS5zaG91bGRQdWJsaXNoKCkpIHsKLSAgICAJaWYgKHNlcnZlci5jYW5QdWJsaXNoKCkuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLk9LKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gcHVibGlzaChzZXJ2ZXIsIElTZXJ2ZXIuUFVCTElTSF9JTkNSRU1FTlRBTCwgbW9uaXRvciApOwotICAgICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgICAgewotICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gIHN0YXJ0L3Jlc3RhcnQgc2VydmVyIGlmIHJlcXVpcmVkCi0gICAgCQotICAgIHN3aXRjaCAoc2VydmVyU3RhdGUpCi0gICAgewotICAgICAgY2FzZSBJU2VydmVyLlNUQVRFX1NUT1BQRUQ6Ci0gICAgICAgIGlmIChzZXJ2ZXIuY2FuU3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUpLmdldFNldmVyaXR5KCk9PUlTdGF0dXMuT0spCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSBzdGFydChzZXJ2ZXIsIG1vbml0b3IgKTsKLSAgICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgICAgfSAgICAgICAKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSVNlcnZlci5TVEFURV9TVEFSVEVEOiAgICAJCi0gICAgCWJvb2xlYW4gc2hvdWxkUmVzdGFydCA9ICgoU2VydmVyKXNlcnZlcikuc2hvdWxkUmVzdGFydCgpOyAgICAJCi0gICAgCQotICAgIAlpZiAoc2hvdWxkUmVzdGFydCAmJiBzZXJ2ZXIuY2FuUmVzdGFydChJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSkuZ2V0U2V2ZXJpdHkoKT09SVN0YXR1cy5PSykKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1cyA9IHJlc3RhcnQoc2VydmVyLCBtb25pdG9yICk7Ci0gICAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgIH0gICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBwdWJsaXNoKGZpbmFsIElTZXJ2ZXIgc2VydmVyLCBmaW5hbCBpbnQga2luZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBmaW5hbCBJU3RhdHVzW10gaXN0YXR1cyA9IG5ldyBJU3RhdHVzWzFdOyAKLSAgICBtb25pdG9yLnN1YlRhc2soQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1BVQkxJU0hJTkdfU0VSVkVSKTsKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQl7Ci0gIAkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3Igc2hlbGxNb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLQkJewotICAJCQlpc3RhdHVzWzBdID0gc2VydmVyLnB1Ymxpc2goa2luZCwgc2hlbGxNb25pdG9yKTsKLQkJfSAgCQkKLQl9OwotCQotCXRyeQotCXsKLQkJaWYoIGRvQXN5bmNQdWJsaXNoXyApCi0JCXsJCi0JCSAgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIGRpYWxvZyA9IG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2cobnVsbCk7Ci0JCSAgZGlhbG9nLnJ1bih0cnVlLCB0cnVlLCBydW5uYWJsZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCSAgcnVubmFibGUucnVuKCBtb25pdG9yICk7Ci0JCX0KLQkJCi0JfQotCWNhdGNoKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKQotCXsKLQkgIGlzdGF0dXNbMF0gPSBuZXcgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cyggSVN0YXR1cy5FUlJPUiwgImlkIiwgMCwgaXRlLmdldE1lc3NhZ2UoKSwgaXRlICk7Ci0JICBpdGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCWNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKQotCXsKLQkgIGlzdGF0dXNbMF0gPSBuZXcgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cyggSVN0YXR1cy5FUlJPUiwgImlkIiwgMCwgaWUuZ2V0TWVzc2FnZSgpLCBpZSApOwotCSAgaWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotICAgIAotICAgIAotCWlmIChpc3RhdHVzWzBdLmdldFNldmVyaXR5KCkgIT0gSVN0YXR1cy5PSykKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBpc3RhdHVzWzBdOwotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuQ0FOQ0VMKQotICAgIAkgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCIiKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIAotICAgIGxvZy5sb2coSUxvZy5JTkZPLCA1MDUxLCB0aGlzLCAicHVibGlzaFByb2plY3QiLCAiSVNlcnZlcj0iICsgc2VydmVyICsgIiwgUHVibGlzaCBjb21tYW5kIGNvbXBsZXRlZCIpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwcml2YXRlIElTdGF0dXMgcmVzdGFydChJU2VydmVyIHNlcnZlciwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtb25pdG9yLnN1YlRhc2soQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1NUQVJUSU5HX1NFUlZFUik7Ci0gICAgICBzZXJ2ZXIuc3luY2hyb25vdXNSZXN0YXJ0KElMYXVuY2hNYW5hZ2VyLlJVTl9NT0RFLCBtb25pdG9yKTsKLSAgICAgIGxvZy5sb2coSUxvZy5JTkZPLCA1MDUyLCB0aGlzLCAiZXhlY3V0ZSIsICJJU2VydmVyPSIgKyBzZXJ2ZXIgKyAiLCBSZXN0YXJ0IGNvbW1hbmQgY29tcGxldGVkIik7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGUpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBzdGFydChJU2VydmVyIHNlcnZlciwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtb25pdG9yLnN1YlRhc2soQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1NUQVJUSU5HX1NFUlZFUik7Ci0gICAgICBzZXJ2ZXIuc3luY2hyb25vdXNTdGFydChJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSwgbW9uaXRvcik7Ci0gICAgICBsb2cubG9nKElMb2cuSU5GTywgNTA1MywgdGhpcywgImV4ZWN1dGUiLCAiSVNlcnZlcj0iICsgc2VydmVyICsgIiwgU3RhcnQgY29tbWFuZCBjb21wbGV0ZWQiKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgZSk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWQpCi0gIHsKLSAgICB0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwotICB9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL1dTSU5vbkNvbXBsaWFudFJ1bnRpbWVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvV1NJTm9uQ29tcGxpYW50UnVudGltZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA3Y2RhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvV1NJTm9uQ29tcGxpYW50UnVudGltZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEyMDcxNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQVBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJU1NCUENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VVdGlsczsKLQotCi0KLXB1YmxpYyBjbGFzcyBXU0lOb25Db21wbGlhbnRSdW50aW1lQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdF87Ci0JCi0gIHB1YmxpYyBXU0lOb25Db21wbGlhbnRSdW50aW1lQ29tbWFuZCgpCi0gIHsKLSAgfSAKLSAgCi0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAJUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0IHdzaVNTQlBDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpOyAKLSAgCVBlcnNpc3RlbnRXU0lBUENvbnRleHQgd3NpQVBDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKTsgCi0gICAgVmVjdG9yIHN0YXR1c1NTQlAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgc3RhdHVzU1NCUC5hZGQoIG5ldyBTdGF0dXMoIFdTSUNvbXBsaWFuY2VVdGlscy5nZXRXU0lTZXZlcml0eShzZXJ2aWNlUHJvamVjdF8sIHdzaVNTQlBDb250ZXh0KSwgImlkIiwgMCwKLSAgICAgICAgV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfU1NCUF9JTkNPTVBMSUFOVF9SVU5USU1FLCBudWxsICkgKTsKLSAgICBTdGF0dXNbXSBzdGF0dXNlc1NTQlAgPSAoU3RhdHVzW10pIHN0YXR1c1NTQlAudG9BcnJheShuZXcgU3RhdHVzW3N0YXR1c1NTQlAuc2l6ZSgpXSk7Ci0gICAgCi0gICAgVmVjdG9yIHN0YXR1c0FQID0gbmV3IFZlY3RvcigpOwotICAgIHN0YXR1c0FQLmFkZCggbmV3IFN0YXR1cyggV1NJQ29tcGxpYW5jZVV0aWxzLmdldFdTSVNldmVyaXR5KHNlcnZpY2VQcm9qZWN0Xywgd3NpQVBDb250ZXh0KSwgImlkIiwgMCwgCi0gICAgCQlXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9BUF9JTkNPTVBMSUFOVF9SVU5USU1FLCBudWxsICkpOwotICAgIFN0YXR1c1tdIHN0YXR1c2VzQVAgPSAoU3RhdHVzW10pIHN0YXR1c0FQLnRvQXJyYXkobmV3IFN0YXR1c1tzdGF0dXNBUC5zaXplKCldKTsKLQotICAgIGlmIChXU0lDb21wbGlhbmNlVXRpbHMuY2hlY2tXU0lDb21wbGlhbmNlIChlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCksIHN0YXR1c2VzQVAsIHNlcnZpY2VQcm9qZWN0Xywgd3NpQVBDb250ZXh0KSkgCi0gICAgewotICAgIAlpZiAoV1NJQ29tcGxpYW5jZVV0aWxzLmNoZWNrV1NJQ29tcGxpYW5jZSAoZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLCBzdGF0dXNlc1NTQlAsIHNlcnZpY2VQcm9qZWN0Xywgd3NpU1NCUENvbnRleHQpKSAKLSAgICAgIHsKLSAgICAJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAl9IAotICAgICAgZWxzZSAKLSAgICAgIHsKLSAgICAJICAvLyBTZXQgbWVzc2FnZSB0byBlbXB0eSBzdHJpbmcgc28gdGhhdCBhbiBlcnJvciBkaWFsb2cgZG9lcwotICAgIAkgIC8vIG5vdCBwb3AtdXAgdGVsbGluZyB0aGUgdXNlciB0aGF0IHRoZXkgY2Fubm90IGNvbnRpbnVlCi0gICAgCSAgLy8gYmVjYXVzZSB0aGV5IGNob29zZSBub3QgdG8gaWdub3JlIHRoZSBXUy1JIG5vbi1jb21wbGlhbmNlIHdhcm5pbmcuCi0gICAgCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoICIiICk7Ci0gICAgCX0KLSAgICB9IAotICAgIGVsc2UgCi0gICAgewotICAgIAkvLyBTZXQgbWVzc2FnZSB0byBlbXB0eSBzdHJpbmcgc28gdGhhdCBhbiBlcnJvciBkaWFsb2cgZG9lcwotICAJICAJLy8gbm90IHBvcC11cCB0ZWxsaW5nIHRoZSB1c2VyIHRoYXQgdGhleSBjYW5ub3QgY29udGludWUKLSAgCSAgCS8vIGJlY2F1c2UgdGhleSBjaG9vc2Ugbm90IHRvIGlnbm9yZSB0aGUgV1MtSSBub24tY29tcGxpYW5jZSB3YXJuaW5nLgotCQkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLQl9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KSB7Ci0JdGhpcy5zZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9FY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EzNWUzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9FY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotCi1wdWJsaWMgY2xhc3MgRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgU3RyaW5nIHMgPSB2YWx1ZS50b1N0cmluZygpOwotICAgIGlmIChzLmluZGV4T2YoIjoiKSA8IDApCi0gICAgewotICAgICAgSVJlc291cmNlIHJlcyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcih2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgIGlmIChyZXMuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcyA9IHJlcy5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1Byb2plY3ROYW1lMklQcm9qZWN0VHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1Byb2plY3ROYW1lMklQcm9qZWN0VHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2NWY0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9Qcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMjQzMDIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwcm9qZWN0ID0gKFN0cmluZykgdmFsdWU7Ci0gICAgICBpbnQgc2xhc2hJbmRleCA9IHByb2plY3QuaW5kZXhPZignLycpOwotICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gcHJvamVjdDsKLQotICAgICAgaWYgKHNsYXNoSW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIHByb2plY3ROYW1lID0gcHJvamVjdC5zdWJzdHJpbmcoMCwgc2xhc2hJbmRleCk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIH0gZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvU2VydmVySW5zdFRvSVNlcnZlclRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9TZXJ2ZXJJbnN0VG9JU2VydmVyVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY4ODFjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9TZXJ2ZXJJbnN0VG9JU2VydmVyVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gQXByIDIwLCAyMDA0Ci0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLS8qCi0gKiBUcmFuc2Zvcm1zIGEgc2VydmVyIGluc3RhbmNlIGlkIHRvIGFuIElTZXJ2ZXIKLSAqLwotcHVibGljIGNsYXNzIFNlcnZlckluc3RUb0lTZXJ2ZXJUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIHsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lciN0cmFuc2Zvcm0oamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkgewotICAgIAotICAgIFN0cmluZyBleGlzdGluZ1NlcnZlckluc3RJZCA9IChTdHJpbmcpdmFsdWU7Ci0gICAgSVNlcnZlciBzZXJ2ZXJJbnN0ID0gbnVsbDsKLSAgICBpZiAoZXhpc3RpbmdTZXJ2ZXJJbnN0SWQgIT0gbnVsbCkgewotICAgIAlzZXJ2ZXJJbnN0ID0gU2VydmVyQ29yZS5maW5kU2VydmVyKGV4aXN0aW5nU2VydmVySW5zdElkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZlckluc3Q7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvU2VydmVyTmFtZTJJU2VydmVyVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1NlcnZlck5hbWUySVNlcnZlclRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNWQ3OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvU2VydmVyTmFtZTJJU2VydmVyVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotcHVibGljIGNsYXNzIFNlcnZlck5hbWUySVNlcnZlclRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgewotICAgICAgU3RyaW5nIHNlcnZlck5hbWUgPSB2YWx1ZS50b1N0cmluZygpOwotICAgICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLSAgICAgIGlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGghPTApCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIElTZXJ2ZXIgc2VydmVyID0gKElTZXJ2ZXIpc2VydmVyc1tpXTsKLSAgICAgICAgICBpZiAoKHNlcnZlci5nZXROYW1lKCkpLmVxdWFscyhzZXJ2ZXJOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzZXJ2ZXI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0RlZmF1bHRpbmdVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vRGVmYXVsdGluZ1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYTMyYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vRGVmYXVsdGluZ1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM4MDU4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDcwNzIzICAgMTk0NDM0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBDaGVjayBmb3Igbm9uLWV4aXN0aW5nIEVBUiB3aXRoIGNvbnRlbnQgbm90IGRlbGV0ZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIERlZmF1bHRpbmdVdGlscyB7Ci0JCi0JcHVibGljIERlZmF1bHRpbmdVdGlscygpCi0JewotCQkJCi0JfQotCQotCS8qKgotCSAqIAotCSAqIFVzZXMgdGhlIGZvbGxvd2luZyBzdGVwcyB0byBkZXRlcm1pbmUgYSB2YWxpZCBkZWZhdWx0IEVBUiBwcm9qZWN0IG5hbWU6Ci0JICogIAotCSAqIDEuIElmIHByb2plY3QgZG9lcyBleGlzdDoKLQkgKiAJCWEgLSBsb29rIGZvciBhbiBleGlzdGluZywgcmVmZXJlbmNpbmcgRUFSIGNvbXBvbmVudCwgaWYgb25lIGV4aXN0cyByZXR1cm4gdGhhdCBFQVIgbmFtZQotCSAqIAkJYiAtIGxvb2sgZm9yIGFuIGV4aXN0aW5nIEVBUiBjb21wb25lbnQgd2l0aCB0aGUgc2FtZSBKMkVFIHZlcnNpb24gYXMgdGhlIHByb2plY3QKLQkgKiAyLiBJZiBjYW4ndCBmaW5kIGFuIGFwcHJvcHJpYXRlIGV4aXN0aW5nIEVBUiBjb21wb25lbnQgb3IgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgCi0JICogICAgIHdvcmtzcGFjZSwgcmV0dXJuIGEgbmV3IEVBUiBuYW1lIG9mIGZvcm0gcHJvamVjdE5hbWVFQVIKLQkgKiAzLiBJZiBwcm9qZWN0IG5hbWUgaXMgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJuIHRoZSBkZWZhdWx0IEVBUiBuYW1lCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBmb3IgdGhlIHNlcnZpY2UKLQkgKiBAcmV0dXJuIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgRUFSIHByb2plY3QgbmFtZSBmb3IgdGhlIHByb2plY3QgbmFtZSBwcm92aWRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUpCi0JewotCi0JCWlmIChwcm9qZWN0TmFtZSAhPSBudWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCkgewotCQkJCi0JCQlJUHJvamVjdCBwcm9qID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQotCQkJaWYgKHByb2ouZXhpc3RzKCkpIHsKLQkJCQkKLQkJCQkvL1N0ZXAgMWEgLSByZXR1cm4gYSByZWZlcmVuY2luZyBFQVIgcHJvamVjdAotCQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gZWFycyA9IEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ0VBUkNvbXBvbmVudHMocHJvaik7Ci0JCQkJaWYgKGVhcnMgIT0gbnVsbCAmJiBlYXJzLmxlbmd0aCA+IDApIHsKLQkJCQkJcmV0dXJuIGVhcnNbMF0uZ2V0TmFtZSgpOwotCQkJCX0KLQkJCQkKLQkJCQkvL1N0ZXAgMWIgLSByZXR1cm4gYW4gYXBwcm9wcmlhdGUgZXhpc3RpbmcgRUFSIHByb2plY3QKLQkJCSAgICBJVmlydHVhbENvbXBvbmVudFtdIGFsbEVhckNvbXBzID0gSjJFRVV0aWxzLmdldEFsbEVBUkNvbXBvbmVudHMoKTsJCQkgICAgICAKLQotCQkJICAgIGlmIChhbGxFYXJDb21wcy5sZW5ndGggPiAwKQotCQkJICAgIHsJCQkgICAgICAKLQkJCSAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYWxsRWFyQ29tcHMubGVuZ3RoOyBpKyspCi0JCQkgICAgICAgIHsKLQkJCSAgICAgICAgICBJUHJvamVjdCBlYXJQcm9qZWN0ID0gYWxsRWFyQ29tcHNbaV0uZ2V0UHJvamVjdCgpOwotCQkJICAgICAgICAgIElTdGF0dXMgYXNzb2NpYXRpb25TdGF0dXMgPSBKMkVFVXRpbHMuY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKHByb2osIGVhclByb2plY3QpOwotCQkJICAgICAgICAgIGlmIChhc3NvY2lhdGlvblN0YXR1cy5nZXRTZXZlcml0eSgpPT1JU3RhdHVzLk9LKQotCQkJICAgICAgICAgIHsKLQkJCSAgICAgICAgICAgIHJldHVybiBhbGxFYXJDb21wc1tpXS5nZXROYW1lKCk7IAotCQkJICAgICAgICAgIH0KLQkJCSAgICAgICAgfQkJCSAgICAgIAkJCSAgICAgIAotCQkJICAgIH0KLQkJCX0KLQkJCQotCQkJCi0JCQlTdHJpbmcgYmFzZUVBUk5hbWUgPSBwcm9qZWN0TmFtZSArIFJlc291cmNlVXRpbHMuZ2V0RGVmYXVsdEVBUkV4dGVuc2lvbigpOwotCQkJU3RyaW5nIGVhck5hbWUgPSBiYXNlRUFSTmFtZTsKLQotCQkJYm9vbGVhbiBmb3VuZEVBUiA9IGZhbHNlOwotCQkJaW50IGkgPSAxOwotCQkJCi0JCQl3aGlsZSAoIWZvdW5kRUFSKSB7Ci0JCQkJLy8gMTk0NDM0IC0gQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50cyB0aGF0J3Mgbm90IGRlbGV0ZWQgcHJldmlvdXNseQotCQkJCUlTdGF0dXMgY2FuQ3JlYXRlRUFSU3RhdHVzID0gSjJFRVV0aWxzLmNhbkNyZWF0ZUVBUihQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyTmFtZSkpOwotCQkJCWlmIChjYW5DcmVhdGVFQVJTdGF0dXMuaXNPSygpKSB7Ci0JCQkJCWZvdW5kRUFSID0gdHJ1ZTsKLQkJCQl9IGVsc2UgewotCQkJCQllYXJOYW1lID0gYmFzZUVBUk5hbWUgKyBpOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQkKLQkJCS8vU3RlcCAyIC0gcmV0dXJuIHByb2plY3QgbmFtZSB3aXRoIEVBUiBvbiB0aGUgZW5kCi0JCQlyZXR1cm4gZWFyTmFtZTsJCQkKLQkJfQotCQkKLQkJLy9TdGVwIDMgLSByZXR1cm4gdGhlIGRlZmF1bHQgRUFSIHByb2plY3QgbmFtZQotCQlyZXR1cm4gUmVzb3VyY2VVdGlscy5nZXREZWZhdWx0U2VydmljZUVBUlByb2plY3ROYW1lKCk7CQkKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9GaW5pc2hGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vRmluaXNoRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q4ZTcwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9GaW5pc2hGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQ3JlYXRlZCBvbiBNYXkgNCwgMjAwNAotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgZmlsZSBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuRmluaXNoVGVzdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wdWJsaWMgY2xhc3MgRmluaXNoRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci0gIHB1YmxpYyBGaW5pc2hGcmFnbWVudCgpCi0gIHsJCi0JYWRkKG5ldyBGaW5pc2hUZXN0RnJhZ21lbnQoKSApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9IYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTYzYmJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogMjAwNjA0MDQgMTM0OTEzICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLQotCi0KLXB1YmxpYyBjbGFzcyBIYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIgewotCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSBIYW5kbGVyRGVzY3JpcHRvckhvbGRlciBnaXZlbiB0aGUgbmFtZQotICAgKiBAcGFyYW0gaGRocwotICAgKiBAcGFyYW0gZGVzY05hbWUKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgZ2V0Rm9yRGVzY3JpcHRpb25OYW1lKEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdIGhkaHMsIFN0cmluZyBkZXNjTmFtZSl7Ci0gICAgZm9yIChpbnQgaT0wO2k8aGRocy5sZW5ndGg7aSsrKXsKLSAgICAgIFN0cmluZyBuYW1lID0gaGRoc1tpXS5nZXREZXNjcmlwdGlvbk5hbWUoKTsKLSAgICAgIGlmIChuYW1lIT1udWxsICYmIG5hbWUuZXF1YWxzKGRlc2NOYW1lKSl7Ci0gICAgICAgIHJldHVybiBoZGhzW2ldOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXR0aW5nIGFsbCBkZXNjcmlwdGlvbiBuYW1lcwotICAgKiBAcGFyYW0gaGRocwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbERlc2NyaXB0aW9uTmFtZXMoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGRocyl7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBuZXcgU3RyaW5nW2hkaHMubGVuZ3RoXTsKLSAgICBmb3IoaW50IGk9MDtpPGhkaHMubGVuZ3RoO2krKyl7Ci0gICAgICBuYW1lc1tpXT1oZGhzW2ldLmdldERlc2NyaXB0aW9uTmFtZSgpOwotICAgIH0KLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbEhhbmRsZXJDbGFzc05hbWVzKEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdIGhkaHMpewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPGhkaHMubGVuZ3RoO2krKyl7Ci0gICAgICBMaXN0IGxpc3QgPSBoZGhzW2ldLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICBpZiAobGlzdCE9bnVsbCAmJiAhbGlzdC5pc0VtcHR5KCkpewotICAgICAgICBmb3IgKGludCBqPTA7ajxsaXN0LnNpemUoKTtqKyspewotICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pbGlzdC5nZXQoaik7Ci0gICAgICAgICAgdi5hZGQoaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmdbXSl2LnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJEZXNjcmlwdGlvbkhvbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwY2JhZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxOCAxNDI1NTQgc2VuZ3BsQGNhLmlibS5jb20gIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV3NkZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLmludGVybmFsLmltcGwuV3NkZEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotCi0KLXB1YmxpYyBjbGFzcyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgewotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb25OYW1lOwotICBwcml2YXRlIExpc3QgaGFuZGxlckxpc3Q7Ci0gIHByaXZhdGUgV2ViU2VydmljZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uT2JqZWN0OwotICBwcml2YXRlIElQYXRoIHNvdXJjZU91dHB1dFBhdGg7Ci0gIAotICAgIAotICBwdWJsaWMgSVBhdGggZ2V0U291cmNlT3V0cHV0UGF0aCgpIHsKLSAgICByZXR1cm4gc291cmNlT3V0cHV0UGF0aDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U291cmNlT3V0cHV0UGF0aChJUGF0aCBzb3VyY2VPdXRwdXRQYXRoKSB7Ci0gICAgdGhpcy5zb3VyY2VPdXRwdXRQYXRoID0gc291cmNlT3V0cHV0UGF0aDsKLSAgfQotCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCl7Ci0gICAgaWYgKGRlc2NyaXB0aW9uT2JqZWN0IT1udWxsKQotICAgICAgcmV0dXJuIFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChkZXNjcmlwdGlvbk9iamVjdCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIGdldCB0aGUgV2ViU2VydmljZURlc2NyaXB0aW9uIG9iamVjdCAKLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gZ2V0RGVzY3JpcHRpb25PYmplY3QoKSB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uT2JqZWN0OwotICB9Ci0gIAotICAvKioKLSAgICogc2V0IFdlYlNlcnZpY2VEZXNjcmlwdGlvbiBvYmplY3QKLSAgICogQHBhcmFtIGRlc2NyaXB0aW9uT2JqZWN0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbk9iamVjdChXZWJTZXJ2aWNlRGVzY3JpcHRpb24gZGVzY3JpcHRpb25PYmplY3QpIHsKLSAgICB0aGlzLmRlc2NyaXB0aW9uT2JqZWN0ID0gZGVzY3JpcHRpb25PYmplY3Q7Ci0gIH0KLQotICAvKioKLSAgICogZ2V0IERlc2NyaXB0aW9uIG5hbWUKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbk5hbWUoKSB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uTmFtZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIHNldCBEZXNjcmlwdGlvbiBuYW1lCi0gICAqIEBwYXJhbSBkZXNjcmlwdGlvbk5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uTmFtZShTdHJpbmcgZGVzY3JpcHRpb25OYW1lKSB7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbk5hbWUgPSBkZXNjcmlwdGlvbk5hbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBnZXQgTGlzdCBvZiBIYW5kbGVyVGFibGVJdGVtIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgZGVzY3JpcHRpb24KLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0SGFuZGxlckxpc3QoKSB7Ci0gICAgcmV0dXJuIGhhbmRsZXJMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIHNldCBMaXN0IG9mIEhhbmRsZXJUYWJsZUl0ZW0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmljZSBkZXNjcmlwdGlvbgotICAgKiBAcGFyYW0gaGFuZGxlckxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJMaXN0KExpc3QgaGFuZGxlckxpc3QpIHsKLSAgICB0aGlzLmhhbmRsZXJMaXN0ID0gaGFuZGxlckxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEhhbmRsZXJUb0FsbFBvcnRzKCl7Ci0gICAgCi0gICAgaWYgKGhhbmRsZXJMaXN0IT1udWxsICYmICFoYW5kbGVyTGlzdC5pc0VtcHR5KCkpewotICAgICAgCi0gICAgICBmb3IgKGludCB6PTA7ejxoYW5kbGVyTGlzdC5zaXplKCk7eisrKXsKLSAgICAgICAgSGFuZGxlclRhYmxlSXRlbSBodGkgPSAoSGFuZGxlclRhYmxlSXRlbSloYW5kbGVyTGlzdC5nZXQoeik7ICAKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uT2JqZWN0IT1udWxsKSB7Ci0gICAgICAgICAgTGlzdCBwb3J0Q29tcG9uZW50cyA9IGRlc2NyaXB0aW9uT2JqZWN0LmdldFBvcnRDb21wb25lbnRzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgeD0wO3g8cG9ydENvbXBvbmVudHMuc2l6ZSgpO3grKyl7Ci0gICAgICAgICAgICBQb3J0Q29tcG9uZW50IHdzUG9ydCA9IChQb3J0Q29tcG9uZW50KSBwb3J0Q29tcG9uZW50cy5nZXQoeCk7Ci0gICAgICAgICAgICBMaXN0IHdzSGFuZGxlcnMgPSB3c1BvcnQuZ2V0SGFuZGxlcnMoKTsKLSAgICAgICAgICAgIGlmICh3c0hhbmRsZXJzIT1udWxsKXsKLSAgICAgICAgICAgICAgYm9vbGVhbiBhbHJlYWR5RXhpc3RzID0gZmFsc2U7Ci0gICAgICAgICAgICAgIGZvciAoaW50IHk9MDt5PHdzSGFuZGxlcnMuc2l6ZSgpO3krKyl7Ci0gICAgICAgICAgICAgICAgSGFuZGxlciBoYW5kbGVyID0gKEhhbmRsZXIpd3NIYW5kbGVycy5nZXQoeSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuZ2V0SGFuZGxlckNsYXNzKCkuZXF1YWxzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpKXsKLSAgICAgICAgICAgICAgICAgIGFscmVhZHlFeGlzdHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgICAgICBpZiAoIWFscmVhZHlFeGlzdHMpIHsKLSAgICAgICAgICAgICAgICAvL2NyZWF0ZSBpdCBhbmQgYWRkIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAgV3NkZEZhY3Rvcnkgd3NkZEZhY3RvcnkgPSBuZXcgV3NkZEZhY3RvcnlJbXBsKCk7Ci0gICAgICAgICAgICAgICAgSGFuZGxlciBuZXdIYW5kbGVyID0gd3NkZEZhY3RvcnkuY3JlYXRlSGFuZGxlcigpOwotICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc2V0SGFuZGxlck5hbWUoaHRpLmdldEhhbmRsZXJOYW1lKCkpOwotICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc2V0SGFuZGxlckNsYXNzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpOwotICAgICAgICAgICAgICAgIHdzSGFuZGxlcnMuYWRkKG5ld0hhbmRsZXIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9IYW5kbGVyU2VydmljZVJlZkhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGFmZjNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAyMDA2MDQwNCAxMzQ5MTMgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAKLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLQotCi1wdWJsaWMgY2xhc3MgSGFuZGxlclNlcnZpY2VSZWZIZWxwZXIgewotCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSBIYW5kbGVyU2VydmljZVJlZkhvbGRlciBnaXZlbiB0aGUgbmFtZQotICAgKiBAcGFyYW0gaHNyaAotICAgKiBAcGFyYW0gZGVzY05hbWUKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBIYW5kbGVyU2VydmljZVJlZkhvbGRlciBnZXRGb3JTZXJ2aWNlUmVmTmFtZShIYW5kbGVyU2VydmljZVJlZkhvbGRlcltdIGhzcmgsIFN0cmluZyBkZXNjTmFtZSl7Ci0gICAgZm9yIChpbnQgaT0wO2k8aHNyaC5sZW5ndGg7aSsrKXsKLSAgICAgIFN0cmluZyBuYW1lID0gaHNyaFtpXS5nZXRTZXJ2aWNlUmVmTmFtZSgpOwotICAgICAgaWYgKG5hbWUhPW51bGwgJiYgbmFtZS5lcXVhbHMoZGVzY05hbWUpKXsKLSAgICAgICAgcmV0dXJuIGhzcmhbaV07Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAgbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldHMgYWxsIHRoZSBoYW5kbGVyIENsYXNzIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHNlcnZpY2UgcmVmCi0gICAqIEBwYXJhbSBoc3JoCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0QWxsSGFuZGxlckNsYXNzTmFtZXMoSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoc3JoKXsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTxoc3JoLmxlbmd0aDtpKyspewotICAgICAgTGlzdCBsaXN0ID0gaHNyaFtpXS5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgaWYgKGxpc3QhPW51bGwgJiYgIWxpc3QuaXNFbXB0eSgpKXsKLSAgICAgICAgZm9yIChpbnQgaj0wO2o8bGlzdC5zaXplKCk7aisrKXsKLSAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKWxpc3QuZ2V0KGopOwotICAgICAgICAgIHYuYWRkKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nW10pdi50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGFsbCB0aGUgc2VydmljZSBSZWYgbmFtZXMKLSAgICogQHBhcmFtIGhzcmgKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2aWNlUmVmTmFtZXMoSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoc3JoKXsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbaHNyaC5sZW5ndGhdOwotICAgIGZvcihpbnQgaT0wO2k8aHNyaC5sZW5ndGg7aSsrKXsKLSAgICAgIG5hbWVzW2ldPWhzcmhbaV0uZ2V0U2VydmljZVJlZk5hbWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjAwNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgICAxMzQ5MTNzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE3ICAgMTQyMzM5IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5XZWJzZXJ2aWNlX2NsaWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5pbnRlcm5hbC5pbXBsLldlYnNlcnZpY2VfY2xpZW50RmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci0KLQotcHVibGljIGNsYXNzIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIHsKLQotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUmVmTmFtZTsKLSAgcHJpdmF0ZSBMaXN0IGhhbmRsZXJMaXN0OwotICBwcml2YXRlIFNlcnZpY2VSZWYgc2VydmljZVJlZjsKLSAgcHJpdmF0ZSBJUGF0aCBzb3VyY2VPdXRwdXRQYXRoOwotICAKLSAgcHVibGljIElQYXRoIGdldFNvdXJjZU91dHB1dFBhdGgoKSB7Ci0gICAgcmV0dXJuIHNvdXJjZU91dHB1dFBhdGg7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNvdXJjZU91dHB1dFBhdGgoSVBhdGggc291cmNlT3V0cHV0UGF0aCkgewotICAgIHRoaXMuc291cmNlT3V0cHV0UGF0aCA9IHNvdXJjZU91dHB1dFBhdGg7Ci0gIH0gIAotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0gICAgaWYgKHNlcnZpY2VSZWYhPW51bGwpCi0gICAgICByZXR1cm4gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VSZWYpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0SGFuZGxlckxpc3QoKSB7Ci0gICAgcmV0dXJuIGhhbmRsZXJMaXN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyTGlzdChMaXN0IGhhbmRsZXJMaXN0KSB7Ci0gICAgdGhpcy5oYW5kbGVyTGlzdCA9IGhhbmRsZXJMaXN0OwotICB9Ci0gIAotICBwdWJsaWMgU2VydmljZVJlZiBnZXRTZXJ2aWNlUmVmKCkgewotICAgIHJldHVybiBzZXJ2aWNlUmVmOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUmVmKFNlcnZpY2VSZWYgc2VydmljZVJlZikgewotICAgIHRoaXMuc2VydmljZVJlZiA9IHNlcnZpY2VSZWY7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJlZk5hbWUoKSB7Ci0gICAgcmV0dXJuIHNlcnZpY2VSZWZOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUmVmTmFtZShTdHJpbmcgc2VydmljZVJlZk5hbWUpIHsKLSAgICB0aGlzLnNlcnZpY2VSZWZOYW1lID0gc2VydmljZVJlZk5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEhhbmRsZXJUb1NlcnZpY2VSZWYoKXsKLSAgICBpZiAoaGFuZGxlckxpc3QhPW51bGwgJiYgIWhhbmRsZXJMaXN0LmlzRW1wdHkoKSl7Ci0gICAgICAKLSAgICAgIGZvciAoaW50IHg9MDt4PGhhbmRsZXJMaXN0LnNpemUoKTt4KyspewotICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKWhhbmRsZXJMaXN0LmdldCh4KTsKLSAgICAgICAgaWYgKHNlcnZpY2VSZWYhPW51bGwpewotICAgICAgICAgIExpc3QgZXhpc3RpbmdIYW5kbGVycyA9IHNlcnZpY2VSZWYuZ2V0SGFuZGxlcnMoKTsKLSAgICAgICAgICBib29sZWFuIGFscmVhZHlFeGlzdHMgPSBmYWxzZTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxleGlzdGluZ0hhbmRsZXJzLnNpemUoKTtpKyspewotICAgICAgICAgICAgSGFuZGxlciBoYW5kbGVyID0gKEhhbmRsZXIpZXhpc3RpbmdIYW5kbGVycy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlci5nZXRIYW5kbGVyQ2xhc3MoKS5nZXRKYXZhTmFtZSgpLmVxdWFscyhodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpKSl7Ci0gICAgICAgICAgICAgIGFscmVhZHlFeGlzdHMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoIWFscmVhZHlFeGlzdHMpIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2Vic2VydmljZV9jbGllbnRGYWN0b3J5IHdzQ2xpZW50RmFjdG9yeSA9IG5ldyBXZWJzZXJ2aWNlX2NsaWVudEZhY3RvcnlJbXBsKCk7Ci0gICAgICAgICAgICBIYW5kbGVyIG5ld0hhbmRsZXIgPSB3c0NsaWVudEZhY3RvcnkuY3JlYXRlSGFuZGxlcigpOwotICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyTmFtZShodGkuZ2V0SGFuZGxlck5hbWUoKSk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VSZWYpOwotICAgICAgICAgICAgICBpZiAocHJvamVjdCE9bnVsbCkgewotICAgICAgICAgICAgICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBKYXZhTU9GVXRpbHMuZ2V0SmF2YUNsYXNzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCksIHByb2plY3QpOwotICAgICAgICAgICAgICAgIGlmIChqYXZhQ2xhc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyQ2xhc3MoamF2YUNsYXNzKTsKLSAgICAgICAgICAgICAgICB9ICAgIAotICAgICAgICAgICAgICAgIGV4aXN0aW5nSGFuZGxlcnMuYWRkKG5ld0hhbmRsZXIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0gICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9TY2VuYXJpb0NsZWFudXBDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9TY2VuYXJpb0NsZWFudXBDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YjQ0ZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vU2NlbmFyaW9DbGVhbnVwQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODI1ICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uV1NETFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCB0byBjbGVhbiB1cCBkYXRhIGFmdGVyIGVpdGhlciB0aGUKLSAqICBjbGllbnQgb3Igc2VydmljZSB3aXphcmRzLiAgQ3VycmVudGx5IGlzIGp1c3QgcmVzZXRzIHRoZQotICogIHBhcnNlciBmYWN0b3J5LiAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTY2VuYXJpb0NsZWFudXBDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgV1NETFBhcnNlckZhY3Rvcnkua2lsbFBhcnNlcigpOwotICAgIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuY2xlYW51cCgpOwotCQotCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICAKLSAgcHVibGljIElTdGF0dXMgdW5kbyggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkgIC8vIEV2ZW4gaWYgdGhlIHVzZXIgY2FuY2VscyBvdXQgb2YgdGhlIHdpemFyZCB3ZSB3YW50IHRvCi0JICAvLyBraWxsIHRoZSBwYXJzZXIuCi0JICBXU0RMUGFyc2VyRmFjdG9yeS5raWxsUGFyc2VyKCk7Ci0gICAgT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5jbGVhbnVwKCk7Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1NlcnZlclNlbGVjdGlvblV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9TZXJ2ZXJTZWxlY3Rpb25VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRmYWIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1NlcnZlclNlbGVjdGlvblV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI0ICAgMTE2NzUwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNzAxMTkgICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSVNlcnZlckRlZmF1bHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlNlcnZlckluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZlclNlbGVjdGlvblV0aWxzCi17Ci0KLSAgcHVibGljIHN0YXRpYyBJUnVudGltZSBnZXRSdW50aW1lVGFyZ2V0KFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAJaWYoIHByb2plY3ROYW1lICE9IG51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCkgPiAwICl7IC8vJE5PTi1OTFMtMSQKLSAgCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgCQlpZiggcHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkgKXsKLSAgCQkJcmV0dXJuIFNlcnZlckNvcmUuZ2V0UHJvamVjdFByb3BlcnRpZXMocHJvamVjdCkuZ2V0UnVudGltZVRhcmdldCgpOyAKLSAgCQl9Ci0gIAl9Ci0gIAlyZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU2VydmVyIGdldEZpcnN0RXhpc3RpbmdTZXJ2ZXJGcm9tRmFjdG9yeUlkKFN0cmluZyBmYWN0b3J5SWQpCi0gIHsKLSAgCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0gIAlpZiAoc2VydmVycz09bnVsbCB8fCBzZXJ2ZXJzLmxlbmd0aCE9MCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gIAllbHNlCi0gIAl7Ci0gIAkgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJzLmxlbmd0aDsgaSsrKQotICAJICB7Ci0gIAkgICAgSVNlcnZlciBzZXJ2ZXIgPSAoSVNlcnZlcilzZXJ2ZXJzW2ldOwotICAJICAgIGlmIChzZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKGZhY3RvcnlJZCkpCi0gIAkgICAgewotICAJICAgICAgcmV0dXJuIHNlcnZlcjsKLSAgCSAgICB9Ci0gIAkgIH0KLSAgCX0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU2VydmVyW10gZ2V0Q29tcGF0aWJsZUV4aXN0aW5nU2VydmVycyhJUnVudGltZSBydW50aW1lKQotICB7Ci0gICAgaWYgKHJ1bnRpbWUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0gICAgaWYgKHNlcnZlcnM9PW51bGwgfHwgc2VydmVycy5sZW5ndGg9PTApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBBcnJheUxpc3QgY29tcGF0aWJsZVNlcnZlcnNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIElSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLSAgICBpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgCVN0cmluZyBydW50aW1lSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCQlmb3IgKGludCBpPTA7IGk8c2VydmVycy5sZW5ndGg7IGkrKykKLQkJewotCQkgIElTZXJ2ZXIgc2VydmVyID0gKElTZXJ2ZXIpc2VydmVyc1tpXTsKLQkJICBJUnVudGltZVR5cGUgcnVudGltZVR5cGUyID0gc2VydmVyLmdldFJ1bnRpbWUoKS5nZXRSdW50aW1lVHlwZSgpOwotCQkgIGlmIChydW50aW1lVHlwZTIgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIFN0cmluZyBzZXJ2ZXJSdW50aW1lSWQgPSBydW50aW1lVHlwZTIuZ2V0SWQoKTsKLQkJCSAgaWYgKHNlcnZlclJ1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLQkJCSAgICBjb21wYXRpYmxlU2VydmVyc0xpc3QuYWRkKHNlcnZlcik7Ci0JCSAgfQotCQkgIAotCQl9Ci0gICAgfQotICAgIGlmIChjb21wYXRpYmxlU2VydmVyc0xpc3Quc2l6ZSgpPDEpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICAKLSAgICBPYmplY3RbXSBjb21wYXRpYmxlU2VydmVyc0FycmF5ID0gY29tcGF0aWJsZVNlcnZlcnNMaXN0LnRvQXJyYXkoKTsKLSAgICBJU2VydmVyW10gY29tcGF0aWJsZVNlcnZlcnMgPSBuZXcgSVNlcnZlcltjb21wYXRpYmxlU2VydmVyc0FycmF5Lmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaj0wOyBqPGNvbXBhdGlibGVTZXJ2ZXJzQXJyYXkubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgY29tcGF0aWJsZVNlcnZlcnNbal0gPSAoSVNlcnZlciljb21wYXRpYmxlU2VydmVyc0FycmF5W2pdOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29tcGF0aWJsZVNlcnZlcnM7Ci0gIH0KLSAgICAKLSAgcHVibGljIHN0YXRpYyBTZXJ2ZXJJbmZvIGdldEV4dGVuZGVyUmVjb21tZW5kYXRpb24oSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiIsICJzZXJ2ZXJEZWZhdWx0ZXIiKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgT2JqZWN0IHNlcnZlckRlZmF1bHRlck9iamVjdCA9IGVsZW1lbnRzW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICBpZiAoc2VydmVyRGVmYXVsdGVyT2JqZWN0IGluc3RhbmNlb2YgSVNlcnZlckRlZmF1bHRlcikKLSAgICAgIHsKLSAgICAgICAgSVNlcnZlckRlZmF1bHRlciBzZXJ2ZXJEZWZhdWx0ZXIgPSAoSVNlcnZlckRlZmF1bHRlcilzZXJ2ZXJEZWZhdWx0ZXJPYmplY3Q7Ci0gICAgICAgIFNlcnZlckluZm8gc2VydmVySW5mbyA9IHNlcnZlckRlZmF1bHRlci5yZWNvbW1lbmREZWZhdWx0U2VydmVyKHByb2plY3QpOwotICAgICAgICBpZiAoc2VydmVySW5mbyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiBzZXJ2ZXJJbmZvOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9WYWxpZGF0aW9uVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1ZhbGlkYXRpb25VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjVkMTBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1ZhbGlkYXRpb25VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMTU4MzQgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2MTU4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzY3MDUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMSAgIDEzNjc2MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI1ICAgMTM3ODMxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjcgICAxMjY3ODAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAgIDEzODA1OCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDkwNSAgIDE1NjIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgSGFuZGxpbmcgcHJvamVjdHMgd2l0aCBubyB0YXJnZXQgcnVudGltZQotICogMjAwNzAxMTkgICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDcyMyAgIDE5NDQzNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50IG5vdCBkZWxldGVkCi0gKiAyMDA3MTEwNyAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMjA1ICAgMTcwMTQxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDQxNiAgIDIxNTA4NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDQxNyAgIDIyNzU5OSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Xb3JrYmVuY2hSZXNvdXJjZUhlbHBlckJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLmludGVybmFsLldlYlNlcnZpY2VDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldTRExQb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Xc2RkUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5SdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3RDaG9pY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Db21wb25lbnRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC51dGlsLklNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5WZXJzaW9uRm9ybWF0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRpb25VdGlscwotewotCS8vQ29uc3RhbnRzIHRvIGhlbHAgZGVjaWRlIGhvdyBtdWNoIHZhbGlkYXRpb24gdG8gZG8uCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVEVfTk9ORSA9IDA7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVEVfQUxMID0gMTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTID0gMjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMgPSAzOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRFX1NDQUxFX0NIQU5HRVMgPSA0OwotCi0gIC8qKgotICAgKiAKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uVXRpbHMoKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IHZhbGlkYXRpb24gc3RhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBzdGF0ZQotICAgKiBhbmQgdGhlIHJlcXVlc3RlZCB2YWxpZGF0aW9uIHN0YXRlLiBJZiB0aGUgcmVxdWVzdGVkIHZhbGlkYXRpb24gc3RhdGUKLSAgICogZG9lcyBub3QgY292ZXIgYWxsIHRoZSB2YWxpZGF0aW9uIGNvdmVyZWQgYnkgdGhlIGN1cnJlbnQgdmFsaWRhdGlvbgotICAgKiBzdGF0ZSwgVkFMSURBVEVfQUxMIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIHRoZSByZXF1ZXN0ZWQgdmFsaWRhdGlvbgotICAgKiBzdGF0ZSBpcyByZXR1cm5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBjdXJyZW50VmFsaWRhdGlvblN0YXRlIHRoZSB2YWxpZGF0b24gc3RhdGUgYXQgdGhlIHRpbWUgdGhlIGNhbGxlcidzIHJlcXVlc3RzIGEgY2hhbmdlCi0gICAqIEBwYXJhbSByZXF1ZXN0ZWRWYWxpZGF0aW9uU3RhdGUgdGhlIHZhbGlkYXRpb24gc3RhdGUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuCi0gICAqIEByZXR1cm4gUmV0dXJucyBWQUxJREFURV9BTEwgaWYgdGhlIHJlcXVlc3RlZCB2YWxpZGF0aW9uIHN0YXRlCi0gICAqIGRvZXMgbm90IGNvdmVyIGFsbCB0aGUgdmFsaWRhdGlvbiBjb3ZlcmVkIGJ5IHRoZSBjdXJyZW50IHZhbGlkYXRpb24KLSAgICogc3RhdGUuIFJldHVybmVkIHJlcXVlc3RlZFZhbGlkYXRpb25TdGF0ZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldE5ld1ZhbGlkYXRpb25TdGF0ZShpbnQgY3VycmVudFZhbGlkYXRpb25TdGF0ZSwgaW50IHJlcXVlc3RlZFZhbGlkYXRpb25TdGF0ZSkgewotCQlpbnQgbmV3VmFsaWRhdGlvblN0YXRlOwotCQlpZiAoY3VycmVudFZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9OT05FCi0JCQkJfHwgY3VycmVudFZhbGlkYXRpb25TdGF0ZSA9PSByZXF1ZXN0ZWRWYWxpZGF0aW9uU3RhdGUpIHsKLQkJCW5ld1ZhbGlkYXRpb25TdGF0ZSA9IHJlcXVlc3RlZFZhbGlkYXRpb25TdGF0ZTsKLQkJfSBlbHNlIHsKLQkJCW5ld1ZhbGlkYXRpb25TdGF0ZSA9IFZBTElEQVRFX0FMTDsKLQkJfQotCi0JCXJldHVybiBuZXdWYWxpZGF0aW9uU3RhdGU7Ci0KLQl9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBJU3RhdHVzIHJlc3VsdGluZyBmcm9tIGNoZWNraW5nIGZvciBlbXB0eSBmaWVsZHMuIFVzZWQgZm9yIHZhbGlkYXRpb24gb2YgcGFnZSAxIG9mIHRoZQotICAgKiBXZWIgc2VydmljZS9jbGllbnQgd2l6YXJkcy4KLSAgICogQHBhcmFtIHZhbGlkYXRpb25TdGF0ZSBvbmUgb2YgVkFMSURBVEVfTk9ORSwgVkFMSURBVEVfQUxMLCBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTLCBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMsIFZBTElEQVRFX1NDQUxFX0NIQU5HRVMKLSAgICogQHBhcmFtIHR5cGVJZCBXZWIgc2VydmljZSB0eXBlIGlkIChpc0NsaWVudD1mYWxzZSkgb3IgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaWQgKGlzQ2xpZW50PXRydWUpIAotICAgKiBAcGFyYW0gc2VydmljZUltcGwgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3Qgc2VsZWN0aW9uIGZyb20gcGFnZSAxCi0gICAqIEBwYXJhbSBydW50aW1lSWQgV2ViIHNlcnZpY2UgcnVudGltZSBpZAotICAgKiBAcGFyYW0gc2VydmVySWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgcHJvamVjdAotICAgKiBAcGFyYW0gbmVlZEVhciBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIEVBUiBpcyByZXF1aXJlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4KLSAgICogQHBhcmFtIGVhclByb2plY3ROYW1lIG5hbWUgb2YgRUFSIHByb2plY3QKLSAgICogQHBhcmFtIHByb2plY3RUeXBlSWQgdGVtcGxhdGUgaWQKLSAgICogQHBhcmFtIGlzQ2xpZW50IGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgZm9yIGNsaWVudCBzaWRlIHZhbGlkYXRpb24sIAotICAgKiA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIHNlcnZpY2Ugc2lkZSB2YWxpZGF0aW9uLgotICAgKiBAcmV0dXJuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLk9LIGlmIGFsbCBtYW5kYXRvcnkgZmllbGRzIGFyZSBub24tbnVsbCBhbmQgbm9uLWVtcHR5LiAKLSAgICogSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuRVJST1Igb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoaW50IHZhbGlkYXRpb25TdGF0ZSwgU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHNlcnZpY2VJbXBsLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgc2VydmVySWQsCi0JCQlTdHJpbmcgcHJvamVjdE5hbWUsIGJvb2xlYW4gbmVlZEVhciwgU3RyaW5nIGVhclByb2plY3ROYW1lLCBTdHJpbmcgcHJvamVjdFR5cGVJZCwKLQkJCWJvb2xlYW4gaXNDbGllbnQpCi0gIHsKLQkJLy8gT2JqZWN0IHNlbGVjdGlvbgkgIAotCSAgaWYgKHZhbGlkYXRpb25TdGF0ZT09VkFMSURBVEVfQUxMICYmICFpc0NsaWVudCkKLQkgIHsKLQkJaWYgKHNlcnZpY2VJbXBsLmxlbmd0aCgpID09IDApIHsKLQkJCWludCBzY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpOwotCQkJaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkKLQkJCXsKLQkJCSAgcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCS5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX09CSkVDVF9TRUxFQ1RJT04pOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJICByZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fU0VSVklDRV9TRUxFQ1RJT04pOwkJCQkKLQkJCX0KLQkJfQotCSAgfQotCi0JCS8vIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLQkgICAgaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMpIHsKLQkJCWlmIChydW50aW1lSWQgPT0gbnVsbCB8fCBydW50aW1lSWQubGVuZ3RoKCkgPT0gMCkgewotCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19SVU5USU1FLAotCQkJCQkJCW5ldyBTdHJpbmdbXSB7IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1NVQiB9KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fUlVOVElNRSwKLQkJCQkJCQluZXcgU3RyaW5nW10geyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU1VCIH0pKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCSAgICBpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKSB7Ci0JCQkvLyBQcm9qZWN0Ci0JCQlpZiAocHJvamVjdE5hbWUgPT0gbnVsbCB8fCBwcm9qZWN0TmFtZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9QUk9KRUNUX0VNUFRZLCBuZXcgU3RyaW5nW10geyAiIiB9KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9QUk9KRUNUX0VNUFRZLCBuZXcgU3RyaW5nW10geyAiIiB9KSk7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBQcm9qZWN0IHR5cGUgKGlmIHByb2plY3QgZG9lcyBub3QgZXhpc3QpCi0JCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCWlmIChwcm9qZWN0VHlwZUlkID09IG51bGwgfHwgcHJvamVjdFR5cGVJZC5sZW5ndGgoKSA9PSAwKSB7Ci0KLQkJCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJCQkJLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1BST0pFQ1RfVFlQRV9FTVBUWSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJCQkJLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9QUk9KRUNUX1RZUEVfRU1QVFkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBFYXIgKGlmIG5lZWQgZWFyKQotCQkJaWYgKG5lZWRFYXIpIHsKLQkJCQlpZiAoZWFyUHJvamVjdE5hbWUgPT0gbnVsbCB8fCBlYXJQcm9qZWN0TmFtZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9FQVJfRU1QVFksIG5ldyBTdHJpbmdbXSB7ICIiIH0pKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX0VBUl9FTVBUWSwgbmV3IFN0cmluZ1tdIHsgIiIgfSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JICAgIAotCQkvLyBTZXJ2ZXIgKGlmIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgcmVxdWlyZXMgYSBzZXJ2ZXIgb3IgcHJvamVjdCBkb2VzIG5vdAotCQkvLyBleGlzdCkKLQkgICAgaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMKLQkJCQl8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKSB7Ci0JCQlpZiAoc2VydmVySWQgPT0gbnVsbCB8fCBzZXJ2ZXJJZC5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHJ1bnRpbWVJZCk7Ci0JCQkJaWYgKGRlc2MuZ2V0U2VydmVyUmVxdWlyZWQoKSkgewotCQkJCQlpZiAoaXNDbGllbnQpIHsKLQkJCQkJCVN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fU0VSVkVSLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9TVUIgfSkpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19TRVJWRVIsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TVUIgfSkpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1BST0pFQ1RfTVVTVF9FWElTVCwKLQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSkpOwotCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBJU3RhdHVzIHJlc3VsdGluZyBmcm9tIGNoZWNraW5nIGZvciBlcnJvcnMuIFVzZWQgZm9yIHZhbGlkYXRpb24gb2YgcGFnZSAxIG9mIHRoZQotICAgKiBXZWIgc2VydmljZS9jbGllbnQgd2l6YXJkcy4KLSAgICogQHBhcmFtIHZhbGlkYXRpb25TdGF0ZSBvbmUgb2YgVkFMSURBVEVfTk9ORSwgVkFMSURBVEVfQUxMLCBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTLCBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMsIFZBTElEQVRFX1NDQUxFX0NIQU5HRVMKLSAgICogQHBhcmFtIHR5cGVJZCBXZWIgc2VydmljZSB0eXBlIGlkIChpc0NsaWVudD1mYWxzZSkgb3IgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaWQgKGlzQ2xpZW50PXRydWUpCi0gICAqIEBwYXJhbSBydW50aW1lSWQgV2ViIHNlcnZpY2UgcnVudGltZSBpZAotICAgKiBAcGFyYW0gc2VydmVySWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIHNlcnZlckluc3RhbmNlSWQgc2VydmVyIGluc3RhbmNlIGlkCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIHByb2plY3QKLSAgICogQHBhcmFtIG5lZWRFYXIgYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiBFQVIgaXMgcmVxdWlyZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuCi0gICAqIEBwYXJhbSBlYXJQcm9qZWN0TmFtZSBuYW1lIG9mIEVBUiBwcm9qZWN0Ci0gICAqIEBwYXJhbSBwcm9qZWN0VHlwZUlkIHRlbXBsYXRlIGlkCi0gICAqIEBwYXJhbSBpc0NsaWVudCBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIGZvciBjbGllbnQgc2lkZSB2YWxpZGF0aW9uLCAKLSAgICogPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciBzZXJ2aWNlIHNpZGUgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5PSyBpZiBubyBlcnJvcnMgYXJlIHByZXNlbnQsCi0gICAqIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLkVSUk9SIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGNoZWNrRXJyb3JTdGF0dXMoaW50IHZhbGlkYXRpb25TdGF0ZSwgU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHNlcnZlcklkLAotCQkJU3RyaW5nIHNlcnZlckluc3RhbmNlSWQsIFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIGluaXRpYWxQcm9qZWN0TmFtZSwgYm9vbGVhbiBuZWVkRWFyLCBTdHJpbmcgZWFyUHJvamVjdE5hbWUsIFN0cmluZyBwcm9qZWN0VHlwZUlkLAotCQkJYm9vbGVhbiBpc0NsaWVudCkgewotCQotCSAgCS8vIEVuc3VyZSBzZXJ2ZXIsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsIGFuZCBXZWIgc2VydmljZSB0eXBlIGFyZQotCQkvLyBjb21wYXRpYmxlCi0KLQkJLy8gTGFiZWxzCi0JICAgIFN0cmluZyBzZXJ2ZXJMYWJlbCA9ICIiOwotCSAgICBpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKT4wKQotCSAgICB7Ci0JICAgIAlzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0JICAgIH0KLQkJU3RyaW5nIHJ1bnRpbWVMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVMYWJlbEJ5SWQocnVudGltZUlkKTsKLQkJCi0JICAgIGlmICh2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfQUxMIHx8IHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTKSB7Ci0JICAgIAlpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKSA+IDApIHsKLQkJCQlpZiAoaXNDbGllbnQpIHsKLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotCQkJCQkJCS5pc1NlcnZlckNsaWVudFJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlcnZlcklkLAotCQkJCQkJCQkJcnVudGltZUlkLCB0eXBlSWQpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJCQkJLmVycm9yU3RhdHVzKE5MUwotCQkJCQkJCQkJCS5iaW5kKAotCQkJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NSVF9TRUxFQ1RJT05TLAotCQkJCQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsCi0JCQkJCQkJCQkJCQkJCXJ1bnRpbWVMYWJlbCB9KSk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoIVdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyCi0JCQkJCQkJLmlzU2VydmVyUnVudGltZVR5cGVTdXBwb3J0ZWQoc2VydmVySWQsIHJ1bnRpbWVJZCwKLQkJCQkJCQkJCXR5cGVJZCkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscwotCQkJCQkJCQkuZXJyb3JTdGF0dXMoTkxTCi0JCQkJCQkJCQkJLmJpbmQoCi0JCQkJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlMsCi0JCQkJCQkJCQkJCQluZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwKLQkJCQkJCQkJCQkJCQkJcnVudGltZUxhYmVsIH0pKTsKLQkJCQkJfQotCQkJCQotCQkJCQlpZiAoaW5pdGlhbFByb2plY3ROYW1lICE9ICIiICYmIHNlcnZlcklkICE9IG51bGwgJiYgIXByb2plY3ROYW1lLmVxdWFscyhpbml0aWFsUHJvamVjdE5hbWUpICYmCi0JCQkJICAgIAkJKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkgJiYKLQkJCQkgICAgCQlKMkVFVXRpbHMuaXNKYXZhQ29tcG9uZW50KFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChpbml0aWFsUHJvamVjdE5hbWUpKSl7Ci0JCQkJICAgIAkJCi0JCQkJICAgIAkJU2V0IGphdmFTZXQgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QoaW5pdGlhbFByb2plY3ROYW1lKTsKLQkJCQkgICAgCQlpZighZG9lc1NlcnZlclN1cHBvcnRGYWNldHMoc2VydmVySWQsamF2YVNldCkpewotCQkJCSAgICAJICAgIAlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX0pBVkFQUk9KRUNULAotCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLCBpbml0aWFsUHJvamVjdE5hbWUgfSkpOwotCQkJCSAgCQkgICAgfQotCQkJCSAgICAJfQotCQkJCX0KLQkJCX0KLQkgICAgCQotCQl9Ci0JICAgIAotCQkvLyBJZiB0aGUgcHJvamVjdCBleGlzdHMsIGVuc3VyZSBpdCBzdXBwb3J0cyB0aGUgV2ViIHNlcnZpY2UgdHlwZSwgV2ViCi0JCS8vIHNlcnZpY2UgcnVudGltZSwgYW5kIHNlcnZlci4gSWYgdGhlIEVhciBhbHNvIGV4aXN0cyBhbmQgdGhlIHByb2plY3QKLQkJLy8gYW5kIEVhciBhcmUgbm90IGFscmVhZHkgYXNzb2NpYXRlZCwgZW5zdXJlIHRoZXkgY2FuIGJlLgotCQkvLyBJZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCwgZW5zdXJlIHRoZSBwcm9qZWN0IHR5cGUgc3VwcG9ydHMgdGhlCi0JCS8vIFdlYiBzZXJ2aWNlIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsIGFuZCBzZXJ2ZXIKLQkJaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMKLQkJCQl8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKSB7Ci0JCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCWlmIChwcm9qZWN0LmV4aXN0cygpKSB7Ci0KLQkJCQlpZiAoaXNDbGllbnQpIHsKLQkJCQkJLy8gQ2hlY2sgaWYgdGhlIHJ1bnRpbWUgc3VwcG9ydHMgaXQuCi0JCQkJCWlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QoCi0JCQkJCQkJdHlwZUlkLCBydW50aW1lSWQsIHByb2plY3ROYW1lKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVCwKLQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgcnVudGltZUxhYmVsLCBwcm9qZWN0TmFtZSB9KSk7Ci0JCQkJCX0KLQotCQkJCQkvLyBDaGVjayBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIGl0LgotCQkJCQlpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKSA+IDApIHsKLQkJCQkJCWlmICghdmFsVXRpbHMuZG9lc1NlcnZlclN1cHBvcnRQcm9qZWN0KHNlcnZlcklkLCBwcm9qZWN0TmFtZSkpIHsKLQkJCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVCwKLQkJCQkJCQkJCQkJCQluZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwgcHJvamVjdE5hbWUgfSkpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gQ2hlY2sgaWYgdGhlIHJ1bnRpbWUgc3VwcG9ydHMgaXQuCi0JCQkJCWlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VUeXBlQW5kUnVudGltZVN1cHBvcnRQcm9qZWN0KAotCQkJCQkJCXR5cGVJZCwgcnVudGltZUlkLCBwcm9qZWN0TmFtZSkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNULAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBydW50aW1lTGFiZWwsIHByb2plY3ROYW1lIH0pKTsKLQkJCQkJfQotCi0JCQkJCS8vIENoZWNrIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQuCi0JCQkJCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpID4gMCkKLQkJCQkJewotCQkJCQkgIGlmICghdmFsVXRpbHMuZG9lc1NlcnZlclN1cHBvcnRQcm9qZWN0KHNlcnZlcklkLCBwcm9qZWN0TmFtZSkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1QsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLCBwcm9qZWN0TmFtZSB9KSk7Ci0JCQkJCSAgfQotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvLyBMb29rIGF0IHRoZSBwcm9qZWN0IHR5cGUgdG8gZW5zdXJlIHRoYXQgaXQgaXMgc3VpdGFibGUgZm9yCi0JCQkJLy8gdGhlCi0JCQkJLy8gc2VsZWN0ZWQgcnVudGltZSBhbmQgc2VydmVyLgotCQkJCVN0cmluZyB0ZW1wbGF0ZUlkID0gcHJvamVjdFR5cGVJZDsKLQkJCQlTdHJpbmcgdGVtcGxhdGVMYWJlbCA9IEZhY2V0VXRpbHMuZ2V0VGVtcGxhdGVMYWJlbEJ5SWQodGVtcGxhdGVJZCk7Ci0KLQkJCQlpZiAoaXNDbGllbnQpIHsKLQkJCQkJLy8gQ2hlY2sgaWYgdGhlIHJ1bnRpbWUgc3VwcG9ydHMgaXQuCi0JCQkJCWlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFR5cGVBbmRSdW50aW1lU3VwcG9ydFRlbXBsYXRlKAotCQkJCQkJCXR5cGVJZCwgcnVudGltZUlkLCB0ZW1wbGF0ZUlkKSkgewotCi0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURSwKLQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgcnVudGltZUxhYmVsLCB0ZW1wbGF0ZUxhYmVsIH0pKTsKLQkJCQkJfQotCi0JCQkJCS8vIENoZWNrIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQuCi0JCQkJCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpPjApCi0JCQkJCXsKLQkJCQkJICBpZiAoIXZhbFV0aWxzLmRvZXNTZXJ2ZXJTdXBwb3J0VGVtcGxhdGUoc2VydmVySWQsIHRlbXBsYXRlSWQpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwgdGVtcGxhdGVMYWJlbCB9KSk7Ci0JCQkJCSAgfQotCQkJCQl9Ci0KLQkJCQl9IGVsc2UgewotCQkJCQkvLyBDaGVjayBpZiB0aGUgcnVudGltZSBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFRlbXBsYXRlKAotCQkJCQkJCXR5cGVJZCwgcnVudGltZUlkLCB0ZW1wbGF0ZUlkKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCQkJCS5lcnJvclN0YXR1cyhOTFMKLQkJCQkJCQkJCQkuYmluZCgKLQkJCQkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEUsCi0JCQkJCQkJCQkJCQluZXcgU3RyaW5nW10geyBydW50aW1lTGFiZWwsIHRlbXBsYXRlTGFiZWwgfSkpOwotCQkJCQl9Ci0KLQkJCQkJLy8gQ2hlY2sgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCk+MCkKLQkJCQkJewotCQkJCQkgIGlmICghdmFsVXRpbHMuZG9lc1NlcnZlclN1cHBvcnRUZW1wbGF0ZShzZXJ2ZXJJZCwgdGVtcGxhdGVJZCkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwgdGVtcGxhdGVMYWJlbCB9KSk7Ci0JCQkJCSAgfQotCQkJCQl9Ci0JCQkJfQotCi0JCQl9CQkJCQkJCi0JCQkKLQkJfQotCQkKLQkgICAgaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUykgewotCQkJLy8gQ2hlY2sgaWYgcHJvamVjdC9FQVIgYXNzb2NpYXRpb24gaXMgZ29vZC4KLQkJCWlmIChuZWVkRWFyKSB7Ci0JCQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQkJSVByb2plY3QgZXAgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyUHJvamVjdE5hbWUpOwotCQkJCQotCQkJCS8vIDE5NDQzNCAtIENoZWNrIGZvciBub24tZXhpc3RpbmcgRUFSIHdpdGggY29udGVudHMgdGhhdCdzIG5vdCBkZWxldGVkIHByZXZpb3VzbHkKLQkJCQlJU3RhdHVzIGNhbkNyZWF0ZUVBUlN0YXR1cyA9IEoyRUVVdGlscy5jYW5DcmVhdGVFQVIoZXApOwotCQkJCWlmICghY2FuQ3JlYXRlRUFSU3RhdHVzLmlzT0soKSkgewotCQkJCQlyZXR1cm4gY2FuQ3JlYXRlRUFSU3RhdHVzOwotCQkJCX0KLQkJCQotCQkJCWlmIChwcm9qZWN0LmV4aXN0cygpICYmIGVwLmV4aXN0cygpKSB7Ci0JCQkJCWlmICghSjJFRVV0aWxzLmlzQ29tcG9uZW50QXNzb2NpYXRlZChlcCwgcHJvamVjdCkpIHsKLQkJCQkJCUlTdGF0dXMgYXNzb2NpYXRlU3RhdHVzID0gSjJFRVV0aWxzLmNhbkFzc29jaWF0ZVByb2plY3RUb0VBUihwcm9qZWN0LCBlcCk7Ci0JCQkJCQlpZiAoYXNzb2NpYXRlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfQ0FOTk9UX0FTU09DSUFURSwKLQkJCQkJCQkJCQluZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSwgZXAuZ2V0TmFtZSgpLAotCQkJCQkJCQkJCQkJYXNzb2NpYXRlU3RhdHVzLmdldE1lc3NhZ2UoKSB9KSk7Ci0JCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9DQU5OT1RfQVNTT0NJQVRFLAotCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lLCBlcC5nZXROYW1lKCksCi0JCQkJCQkJCQkJCQlhc3NvY2lhdGVTdGF0dXMuZ2V0TWVzc2FnZSgpIH0pKTsKLQkJCQkJCQl9Ci0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQkJCi0KLQkgICAgLy8gRGVmZWN0IDIwMzgyNiAtIEdpdmUgZXh0ZW5kZXIgYSB3YXkgdG8gdmV0byBzZXJ2ZXIsIHByb2plY3QsIHByb2plY3QgdHlwZSBhbmQgRUFSIGNob2ljZXMKLQkgICAgaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMKLQkJCQl8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKSB7CQotCSAgICAJVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JICAgIAl0cnMuc2V0VHlwZUlkKHR5cGVJZCk7Ci0JICAgIAl0cnMuc2V0UnVudGltZUlkKHJ1bnRpbWVJZCk7Ci0JICAgIAl0cnMuc2V0U2VydmVySWQoc2VydmVySWQpOwotCSAgICAJSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciBydW50aW1lQ2hlY2tlciA9IG51bGw7Ci0JICAgIAlpZiAoaXNDbGllbnQpIHsKLQkgICAgCQlTdHJpbmcgY2xpZW50UnVudGltZUlkID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKHRycywgcHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQpOwotCSAgICAJCXJ1bnRpbWVDaGVja2VyID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUNoZWNrZXIoY2xpZW50UnVudGltZUlkKTsKLQkgICAgCQkKLQkgICAgCX0gZWxzZSB7Ci0JICAgIAkJU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZUlkKHRycywgcHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQpOwotCSAgICAJCXJ1bnRpbWVDaGVja2VyID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVDaGVja2VyKHNlcnZpY2VSdW50aW1lSWQpOwotCSAgICAJfQotCSAgICAJaWYgKHJ1bnRpbWVDaGVja2VyICE9IG51bGwpIHsKLQkgICAgCQlyZXR1cm4gcnVudGltZUNoZWNrZXIuY2hlY2tSdW50aW1lQ29tcGF0aWJpbGl0eShzZXJ2ZXJJZCwgc2VydmVySW5zdGFuY2VJZCwgcHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIGVhclByb2plY3ROYW1lKTsKLQkJICAgIH0KLQkgICAgfQotCSAgICAJICAgIAotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotCX0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIElTdGF0dXMgcmVzdWx0aW5nIGZyb20gY2hlY2tpbmcgZm9yIHdhcm5pbmdzLiBVc2VkIGZvciB2YWxpZGF0aW9uIG9mIHBhZ2UgMSBvZiB0aGUKLSAgICogV2ViIHNlcnZpY2UvY2xpZW50IHdpemFyZHMuIAotICAgKiBAcGFyYW0gdmFsaWRhdGlvblN0YXRlIG9uZSBvZiBWQUxJREFURV9OT05FLCBWQUxJREFURV9BTEwsIFZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMsIFZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUywgVkFMSURBVEVfU0NBTEVfQ0hBTkdFUwotICAgKiBAcGFyYW0gc2NhbGVTZXR0aW5nIG9uZSBvZiA8QlIvPgotICAgKiBTY2VuYXJpb0NvbnRleHQuV1NfVEVTVDxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVDxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19JTlNUQUxMPEJSLz4KLSAgICogU2NlbmFyaW9Db250ZXh0LldTX0RFUExPWTxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRTxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QPEJSLz4KLSAgICogU2NlbmFyaW9Db250ZXh0LldTX05PTkUKLSAgICogQHBhcmFtIHNlcnZlcklkIHNlcnZlciB0eXBlIGlkCi0gICAqIEBwYXJhbSBzZXJ2ZXJJZCBzZXJ2ZXIgaW5zdGFuY2UgaWQKLSAgICogQHBhcmFtIGlzQ2xpZW50IGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgZm9yIGNsaWVudCBzaWRlIHZhbGlkYXRpb24sIAotICAgKiA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIHNlcnZpY2Ugc2lkZSB2YWxpZGF0aW9uLgotICAgKiBAcmV0dXJuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLk9LIGlmIG5vIGVycm9ycyBhcmUgcHJlc2VudCwKLSAgICogSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuV0FSTklORyBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBjaGVja1dhcm5pbmdTdGF0dXMoaW50IHZhbGlkYXRpb25TdGF0ZSwgaW50IHNjYWxlU2V0dGluZywgU3RyaW5nIHNlcnZlcklkLAotCQkJU3RyaW5nIHNlcnZlckluc3RhbmNlSWQsIGJvb2xlYW4gaXNDbGllbnQpIHsKLQkJLy8gUmV0dXJuIGEgd2FybmluZyBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIgc2VsZWN0aW9uIGFuZCBzY2FsZSBzZXR0aW5nIGlzCi0JCS8vIGFueXRoaW5nIGJleW9uZCBhc3NlbWJsZS4KLQkJaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1NDQUxFX0NIQU5HRVMKLQkJCQl8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUykgewotCQkJaWYgKHNlcnZlcklkID09IG51bGwgfHwgc2VydmVySWQubGVuZ3RoKCkgPT0gMCkgewotCQkJCWlmIChzY2FsZVNldHRpbmcgPCBTY2VuYXJpb0NvbnRleHQuV1NfQVNTRU1CTEUpIHsKLQkJCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX05PX0NMSUVOVF9TRVJWRVIsIG5ldyBTdHJpbmdbMF0pKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fTk9fU0VSVklDRV9TRVJWRVIsIG5ldyBTdHJpbmdbMF0pKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLy8gUmV0dXJuIGEgd2FybmluZyBpZiB0aGUgc2VsZWN0ZWQgc2VydmVyIGhhcyBvbmx5IHN0dWIKLQkJCQkvLyBydW50aW1lcwotCQkJCS8vIGFuZCB0aGUgc2NhbGUgc2V0dGluZyBpcyBhbnl0aGluZyBiZXlvbmQgZGVwbG95LgotCQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlcklkKTsKLQkJCQlpZiAoc2VydmVyVHlwZSAhPSBudWxsKSB7Ci0JCQkJCS8vIEZpbmQgYSBSdW50aW1lIHdoaWNoIGlzIG5vdCBhIHN0dWIKLQkJCQkJSVJ1bnRpbWUgbm9uU3R1YlJ1bnRpbWUgPSBTZXJ2ZXJVdGlscy5nZXROb25TdHViUnVudGltZShzZXJ2ZXJJZCk7Ci0JCQkJCWlmICgoc2NhbGVTZXR0aW5nIDwgU2NlbmFyaW9Db250ZXh0LldTX0RFUExPWSkgJiYgbm9uU3R1YlJ1bnRpbWUgPT0gbnVsbCAmJiBzZXJ2ZXJJbnN0YW5jZUlkID09IG51bGwpIHsKLQkJCQkJCVN0cmluZyBzZXJ2ZXJ0eXBlTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotCQkJCQkJCQkuZ2V0U2VydmVyTGFiZWxCeUlkKHNlcnZlcklkKTsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fU1RVQl9PTkxZLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBzZXJ2ZXJ0eXBlTGFiZWwgfSkpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotCX0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZmFjZXQgdmVyc2lvbnMgb24gdGhlIHByb3ZpZGVkIHByb2plY3QKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBzZXJ2ZXIgdHlwZSBpZAotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhIHByb2plY3QgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdC4KLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+Ci0gICAqIDx1bD4gCi0gICAqIDxsaT5pZiB0aGUgc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGZhY2V0IHZlcnNpb25zIG9uIHRoZSBwcm9qZWN0IG9yPC9saT4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGlzIG5vdCBhIGZhY2V0ZWQgcHJvamVjdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC48L2xpPgotICAgKiA8L3VsPgotICAgKiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBkb2VzU2VydmVyU3VwcG9ydFByb2plY3QoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0ID0gbnVsbDsKLSAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChmUHJvamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBTZXQgZmFjZXRzID0gZlByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICByZXR1cm4gZG9lc1NlcnZlclN1cHBvcnRGYWNldHMoc2VydmVyRmFjdG9yeUlkLCBmYWNldHMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvL0lmIGl0J3Mgbm90IGEgZmFjZXRlZCBwcm9qZWN0LCB3ZSBoYXZlIG5vdGhpbmcgdG8gY29tcGFyZSB0byAtIGFzc3VtZSBpdCdzIGdvb2QuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy9JZiB0aGUgcHJvamVjdCBkb2Vzbid0IGV4aXN0LCB3ZSBoYXZlIG5vdGhpbmcgdG8gY29tcGFyZSB0byAtIGFzc3VtZSBpdCdzIGdvb2QuCi0gICAgICByZXR1cm4gdHJ1ZTsgICAgICAKLSAgICB9Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGZhY2V0IHZlcnNpb25zIGluIHRoZSBwcm92aWRlZCBzZXQuCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIGZhY2V0cyBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZmFjZXQgdmVyc2lvbnMgaW4gdGhlIHByb3ZpZGVkIHNldCwKLSAgICogPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvZXNTZXJ2ZXJTdXBwb3J0RmFjZXRzKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFNldCBmYWNldHMpCi0gIHsKLSAgICBTZXQgcnVudGltZXMgPSBGYWNldFV0aWxzLmdldFJ1bnRpbWVzKG5ldyBTZXRbXXtmYWNldHN9KTsKLSAgICBJdGVyYXRvciBpdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotICAgIElTZXJ2ZXJUeXBlIHN0ID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOyAgICAgICAgCi0gICAgU3RyaW5nIHJ1bnRpbWVUeXBlSWQgPSBzdC5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0gICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IChvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lKWl0ci5uZXh0KCk7Ci0gICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLSAgICAgIGlmIChzUnVudGltZSAhPSBudWxsKQotICAgICAgewotCSAgICAgIElSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JICAgICAgaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwgJiYgcnVudGltZVR5cGVJZC5lcXVhbHMocnVudGltZVR5cGUuZ2V0SWQoKSkpCi0JICAgICAgewotCSAgICAgICAgLy9mb3VuZCBhIG1hdGNoCi0JICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyBhdCBsZWFzdCBvbmUgdmVyc2lvbiBvZgotICAgKiBlYWNoIG9mIHRoZSBmaXhlZCBmYWNldHMgb24gdGhlIHByb3ZpZGVkIHRlbXBsYXRlCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc2VydmVyIHR5cGUgc3VwcG9ydHMgYXQgbGVhc3Qgb25lIHZlcnNpb24gb2YKLSAgICogZWFjaCBvZiB0aGUgZml4ZWQgZmFjZXRzIG9uIHRoZSBwcm92aWRlZCB0ZW1wbGF0ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvZXNTZXJ2ZXJTdXBwb3J0VGVtcGxhdGUoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIFNldCB0ZW1wbGF0ZUZhY2V0cyA9IHRlbXBsYXRlLmdldEZpeGVkUHJvamVjdEZhY2V0cygpOwotICAgIEl0ZXJhdG9yIHRlbXBsYXRlRmFjZXRzSXRyID0gdGVtcGxhdGVGYWNldHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAodGVtcGxhdGVGYWNldHNJdHIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2VydmVyU3VwcG9ydHNUaGlzT25lID0gZmFsc2U7Ci0gICAgICBJUHJvamVjdEZhY2V0IGZpeGVkRmFjZXQgPSAoSVByb2plY3RGYWNldCl0ZW1wbGF0ZUZhY2V0c0l0ci5uZXh0KCk7ICAgICAgCi0gICAgICBMaXN0IHZlcnNpb25zID0gbnVsbDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB2ZXJzaW9ucyA9IGZpeGVkRmFjZXQuZ2V0U29ydGVkVmVyc2lvbnModHJ1ZSk7Ci0gICAgICB9IGNhdGNoIChWZXJzaW9uRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZml4ZWRGYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICBJdGVyYXRvciBpdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZml4ZWRGYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICBJdGVyYXRvciBpdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9IAotICAgICAgSXRlcmF0b3IgdmVyc2lvbnNJdHIgPSB2ZXJzaW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUodmVyc2lvbnNJdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pdmVyc2lvbnNJdHIubmV4dCgpOwotICAgICAgICBTZXQgcGZ2cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIHBmdnMuYWRkKHBmdik7Ci0gICAgICAgIGlmIChkb2VzU2VydmVyU3VwcG9ydEZhY2V0cyhzZXJ2ZXJGYWN0b3J5SWQsIHBmdnMpKQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmVyU3VwcG9ydHNUaGlzT25lID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmICghc2VydmVyU3VwcG9ydHNUaGlzT25lKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgcHJvamVjdCBvciBwcm9qZWN0IHR5cGUgKGlmIHRoZSBwcm9qZWN0IGlzIG51bGwgb3IgZG9lcyBub3QgZXhpc3QpCi0gICAqIHJ1bGVzIG91dCB0aGUgbmVlZCBmb3IgYW4gRUFSLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhIHByb2plY3QKLSAgICogQHBhcmFtIHByb2plY3RUeXBlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9LiBNdXN0IGJlIG5vbi1lbXB0eSBpZiB0aGUgcHJvamVjdCBpcyBudWxsIG9yCi0gICAqIGRvZXMgbm90IGV4aXN0LiAKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBuZWVkIGZvciBhbiBFQVIgaXMgbm90IHJ1bGVkIG91dCwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0JcHVibGljIGJvb2xlYW4gcHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcihTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyBwcm9qZWN0VHlwZUlkKQotCXsKLQkJLy8gSWYgdGhlIHByb2plY3QgaXMgYSBzaW1wbGUgSmF2YSBwcm9qZWN0IG9yIHRoZSBwcm9qZWN0IHR5cGUgaXMKLQkJLy8gSmF2YSB1dGlsaXR5IHJldHVybiBmYWxzZS4KLQkJaWYgKHByb2plY3ROYW1lICE9IG51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCkgPiAwKSB7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQlpZiAocHJvamVjdC5leGlzdHMoKSkgewotCQkJCWlmIChGYWNldFV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpIHsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8vIFByb2plY3QgZGlkbid0IHJ1bGUgb3V0IHRoZSBuZWVkIGZvciBhbiBFQVIKLQkJLy8gc28gY2hlY2sgdGhlIHByb2VjdCB0eXBlCi0JCVN0cmluZyB0ZW1wbGF0ZUlkID0gcHJvamVjdFR5cGVJZDsKLQkJaWYgKHRlbXBsYXRlSWQgIT0gbnVsbCAmJiB0ZW1wbGF0ZUlkLmxlbmd0aCgpID4gMCkgewotCQkJaWYgKEZhY2V0VXRpbHMuaXNVdGlsaXR5VGVtcGxhdGUodGVtcGxhdGVJZCkpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhbiBKMkVFIDEuMyBFQVIgcHJvamVjdCBjYW4gYmUgaW5zdGFsbGVkIG9uIGEgc2VydmVyIG9mCi0JICogdGhlIHByb3ZpZGVkIHNlcnZlciB0eXBlLgotCSAqIEBwYXJhbSBzZXJ2ZXJUeXBlSWQgc2VydmVyIHR5cGUgaWQKLQkgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSBKMkVFIDEuMyBFQVIgcHJvamVjdCBjYW4gYmUgaW5zdGFsbGVkIG9uIGEgc2VydmVyIG9mCi0JICogdGhlIHByb3ZpZGVkIHNlcnZlciB0eXBlLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLiAKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzZXJ2ZXJOZWVkc0VBUihTdHJpbmcgc2VydmVyVHlwZUlkKQotCXsKLQkJaWYgKHNlcnZlclR5cGVJZCA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkgICAgaWYgKHNlcnZlclR5cGVJZC5sZW5ndGgoKSA+IDApIHsKLQkJCVN0cmluZyB0YXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVyVHlwZUlkKTsKLQkJCWlmICh0YXJnZXRJZCAhPSBudWxsICYmIHRhcmdldElkLmxlbmd0aCgpID4gMCkgewotCQkJCWlmICghU2VydmVyVXRpbHMuaXNUYXJnZXRWYWxpZEZvckVBUih0YXJnZXRJZCwgIjEzIikpIC8vIHJtIGoyZWUKLQkJCQl7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlUHJvamVjdFRhcmdldEFuZEoyRUUoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgY29tcE5hbWUsIFN0cmluZyBlYXJOYW1lLCBTdHJpbmcgZWFyQ29tcE5hbWUsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFN0cmluZyBqMmVlTGV2ZWwpCi0gIHsKLSAgICBJUHJvamVjdCBwID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBJUHJvamVjdCBlYXJQID0gbnVsbDsKLSAgICBpZiAoZWFyTmFtZSE9bnVsbCAmJiAhZWFyTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCIiKSkgewotICAgIAllYXJQID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhck5hbWUpOwotICAgIH0KLSAgICBJU3RhdHVzIHRhcmdldFN0YXR1cyA9IGRvZXNQcm9qZWN0VGFyZ2V0TWF0Y2hTZXJ2ZXJUeXBlKHAsIHNlcnZlckZhY3RvcnlJZCk7Ci0gICAgaWYgKGVhclAhPW51bGwgJiYgdGFyZ2V0U3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5PSykKLSAgICB7Ci0gICAgICAvL2NoZWNrIHRoZSBFQVIgICAgICAKLSAgICAgIElTdGF0dXMgZWFyVGFyZ2V0U3RhdHVzID0gZG9lc1Byb2plY3RUYXJnZXRNYXRjaFNlcnZlclR5cGUoZWFyUCwgc2VydmVyRmFjdG9yeUlkKTsKLSAgICAgIGlmKGVhclRhcmdldFN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBlYXJUYXJnZXRTdGF0dXM7Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gdGFyZ2V0U3RhdHVzOwotICAgIH0KLSAgICAKLQotICAgIC8vVmFsaWRhdGUgc2VydmljZSBzaWRlIEoyRUUgbGV2ZWwgICAgCi0gICAgSVN0YXR1cyBqMmVlU3RhdHVzID0gZG9lc1Byb2plY3RNYXRjaEoyRUVMZXZlbChwLCBjb21wTmFtZSwgajJlZUxldmVsKTsKLSAgICBpZihlYXJQIT1udWxsICYmIGoyZWVTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLk9LKQotICAgIHsKLSAgICAgIElTdGF0dXMgZWFySjJFRVN0YXR1cyA9IGRvZXNQcm9qZWN0TWF0Y2hKMkVFTGV2ZWwoZWFyUCwgZWFyQ29tcE5hbWUsIGoyZWVMZXZlbCk7Ci0gICAgICBpZihlYXJKMkVFU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGVhckoyRUVTdGF0dXM7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gajJlZVN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8vVE9ETzogVGhpcyBtZXRob2QgaXMgb2JzZWxldGUgLSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgcHJpdmF0ZSBJU3RhdHVzIGRvZXNQcm9qZWN0VGFyZ2V0TWF0Y2hTZXJ2ZXJUeXBlKElQcm9qZWN0IHAsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpCi0gIHsKLSAgICBpZiAocCE9bnVsbCAmJiBwLmV4aXN0cygpKQotICAgIHsKLSAgICAgIElSdW50aW1lIHByb2plY3RUYXJnZXQgPSBTZXJ2ZXJTZWxlY3Rpb25VdGlscy5nZXRSdW50aW1lVGFyZ2V0KHAuZ2V0TmFtZSgpKTsKLSAgICAgIGlmIChwcm9qZWN0VGFyZ2V0IT1udWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgcHJvamVjdFRhcmdldElkID0gcHJvamVjdFRhcmdldC5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJUYXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVyRmFjdG9yeUlkKTsKLSAgICAgICAgaWYgKHNlcnZlclRhcmdldElkIT1udWxsICYmIHNlcnZlclRhcmdldElkLmxlbmd0aCgpPjApCi0gICAgICAgIHsKLSAgICAgICAgICBpZighcHJvamVjdFRhcmdldElkLmVxdWFscyhzZXJ2ZXJUYXJnZXRJZCkpCi0gICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWRVJfVEFSR0VUX01JU01BVENILG5ldyBTdHJpbmdbXXtwLmdldE5hbWUoKX0pICk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgICAgICAgCi0gIH0KLQotICAvL1RPRE86IFRoaXMgbWV0aG9kIGlzIG9ic2VsZXRlIC0gc2hvdWxkIGJlIHJlbW92ZWQuCi0gIHByaXZhdGUgSVN0YXR1cyBkb2VzUHJvamVjdE1hdGNoSjJFRUxldmVsKElQcm9qZWN0IHAsIFN0cmluZyBjb21wTmFtZSwgU3RyaW5nIGoyZWVMZXZlbCkKLSAgewotCi0gICAgdHJ5IHsKLQkJaWYgKHAhPW51bGwgJiYgcC5leGlzdHMoKSkKLQkJewotICAJICBpbnQgcHJvamVjdEoyRUVMZXZlbCA9IEoyRUVVdGlscy5nZXRKMkVFVmVyc2lvbihwKTsKLQkJICBpZiAocHJvamVjdEoyRUVMZXZlbCE9LTEpCi0JCSAgewotCQkgICAgU3RyaW5nIHByb2plY3RKMkVFTGV2ZWxTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihwcm9qZWN0SjJFRUxldmVsKTsKLQkJICAgIGlmIChqMmVlTGV2ZWwhPW51bGwgJiYgajJlZUxldmVsLmxlbmd0aCgpPjApCi0JCSAgICB7Ci0JCSAgICAgIGlmICghcHJvamVjdEoyRUVMZXZlbFN0cmluZy5lcXVhbHMoajJlZUxldmVsKSkKLQkJICAgICAgewotCQkgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19KMkVFX01JU01BVENILG5ldyBTdHJpbmdbXXtwLmdldE5hbWUoKX0pICk7Ci0JCSAgICAgIH0KLQkJICAgIH0KLQkJICB9Ci0JCX0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKLSAgICAKLSAgfQotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgICAgICAgCi0gIH0KLSAgCi0gIC8vVE9ETzogVGhpcyBtZXRob2QgaXMgb2JzZWxldGUgLSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVQcm9qZWN0VHlwZShTdHJpbmcgcHJvamVjdE5hbWUsIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHJ1bnRpbWUyQ2xpZW50VHlwZXMpCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSVByb2plY3QgcCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgaWYgKHA9PW51bGwgfHwgIXAuZXhpc3RzKCkpCi0gICAgewotICAgICAgLy9Qcm9qZWN0IGRvZXMgbm90IGV4aXN0IHdoaWNoIG1lYW5zIGEgbmV3IHByb2plY3Qgb2YgdGhlIGNvcnJlY3QgdHlwZSB3aWxsIGJlIGNyZWF0ZWQKLSAgICAgIC8vV2UncmUgZG9uZS4gQWxsIGlzIGdvb2QuCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAgIAotICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCB3ZSBzaG91bGQgc2VlIGl0IGluIHRoZSBwcm9qZWN0IGxpc3QgZm9yIHRoZSBzZWxlY3RlZCBjbGllbnQKLSAgICAvL3Byb2plY3QgdHlwZS4KLSAgICBTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSBydW50aW1lMkNsaWVudFR5cGVzLmdldENob2ljZSgpLmdldENob2ljZSgpLmdldExpc3QoKS5nZXRMaXN0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAocHJvamVjdE5hbWUuZXF1YWxzKHByb2plY3ROYW1lc1tpXSkpCi0gICAgICB7Ci0gICAgICAgIC8vRm91bmQgdGhlIHByb2plY3QuIEFsbCBpcyBnb29kLgotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL0RpZG4ndCBmaW5kIHRoZSBwcm9qZWN0LiBSZXR1cm4gYW4gZXJyb3IuCi0gICAgLy9HZXQgdGhlIGxhYmVsIGZvciB0aGUgY2xpZW50IHR5cGUgaWQKLSAgICBTdHJpbmcgY2xpZW50VHlwZUxhYmVsID0gZ2V0Q2xpZW50VHlwZUxhYmVsKHJ1bnRpbWUyQ2xpZW50VHlwZXMuZ2V0Q2hvaWNlKCkuZ2V0TGlzdCgpLmdldFNlbGVjdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV1JPTkdfQ0xJRU5UX1BST0pFQ1RfVFlQRSxuZXcgU3RyaW5nW117cHJvamVjdE5hbWUsIGNsaWVudFR5cGVMYWJlbH0pOwotICAgIElTdGF0dXMgZVN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBtZXNzYWdlICk7Ci0gICAgcmV0dXJuIGVTdGF0dXM7Ci0gICAgCi0gIH0KLSAgCi0gIC8vVE9ETzogVGhpcyBtZXRob2QgaXMgb2JzZWxldGUgLSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q2xpZW50VHlwZUxhYmVsKCBTdHJpbmcgdHlwZSApCi0gIHsJICAKLQkgIGlmICh0eXBlLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKSkKLQkgIHsKLQkJICByZXR1cm4gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9DT01QX1RZUEVfV0VCOwotCSAgfQotCSAgZWxzZSBpZiAodHlwZS5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSkpCi0JICB7Ci0JCSAgcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfQ09NUF9UWVBFX0VKQjsKLQkgIH0KLQkgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUpKQotCSAgewotCQkgIHJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9BUFBfQ0xJRU5UOwotCSAgfQotCSAgZWxzZSBpZiAodHlwZS5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9NT0RVTEUpKQotCSAgewotCQkgIHJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9DT05UQUlORVJMRVNTOwotCSAgfQotCSAgZWxzZQotCSAgewotCQkgIC8vTm8ga25vd24gbGFiZWwsIHJldHVybiB0aGUgdHlwZUlkIGl0c2VsZi4gCi0JCSAgcmV0dXJuIHR5cGU7Ci0JICB9CSAgCSAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhpcyBwcm9qZWN0IGlzIGxpa2VseSBob3N0aW5nIGFueSBvZiB0aGUgc2VydmljZXMKLSAgICogaW4gdGhlIHByb3ZpZGVkIFdTREwgYXMgYSBKMkVFIFdlYiBzZXJ2aWNlLgotICAgKiBAcGFyYW0gcCBJUHJvamVjdCBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEBwYXJhbSB3c2RsVVJMIFVSTCBvZiBhIFdTREwgZG9jdW1lbnQKLSAgICogQHBhcmFtIHBhcnNlcgotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3QgY29udGFpbnMgYSB3ZWJzZXJ2aWNlcy54bWwgCi0gICAqIGRlcGxveW1lbnQgZGVzY3JpcHRvciB0aGF0IHBvaW50cyB0byBhdCBsZWFzdCBvbmUgb2YgdGhlIHBvcnRzIGluIHRoZSBwcm92aWRlZCBXU0RMLiAKLSAgICogUmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQcm9qZWN0U2VydmljZVByb2plY3QoSVByb2plY3QgcCwgU3RyaW5nIHdzZGxVUkwsIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcikKLSAgewotICAgIGlmIChwPT1udWxsIHx8IHdzZGxVUkw9PW51bGwgfHwgd3NkbFVSTC5sZW5ndGgoKT09MCB8fCBwYXJzZXI9PW51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSVJlc291cmNlIHdzWE1MID0gZ2V0V2ViU2VydmNlc1hNTChwKTsKLSAgICBpZiAod3NYTUw9PW51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgCi0gICAgLy9NYWtlIGEgbGlzdCBvZiBhbGwgdGhlIHdzZGwtcG9ydCdzIGluIHdlYnNlcnZpY2VzLnhtbAotICAgIGlmICghKHdzWE1MIGluc3RhbmNlb2YgSUZpbGUpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgIAotICAgIFJlc291cmNlIHJlcyA9IFdvcmtiZW5jaFJlc291cmNlSGVscGVyQmFzZS5nZXRSZXNvdXJjZSgoSUZpbGUpd3NYTUwsIHRydWUpOwotICAgIFdzZGRSZXNvdXJjZSB3c2RkUmVzID0gKFdzZGRSZXNvdXJjZSlyZXM7ICAgIAotICAgIFdlYlNlcnZpY2VzIHdlYlNlcnZpY2VzID0gd3NkZFJlcy5nZXRXZWJTZXJ2aWNlcygpOwotICAgIEl0ZXJhdG9yIHdzRGVzY3MgPSB3ZWJTZXJ2aWNlcy5nZXRXZWJTZXJ2aWNlRGVzY3JpcHRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICBBcnJheUxpc3Qgd3NkbFBvcnRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHdoaWxlKHdzRGVzY3MuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c0Rlc2MgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKXdzRGVzY3MubmV4dCgpOwotICAgICAgSXRlcmF0b3IgcGNzID0gd3NEZXNjLmdldFBvcnRDb21wb25lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKHBjcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBvcnRDb21wb25lbnQgcGMgPSAoUG9ydENvbXBvbmVudClwY3MubmV4dCgpOwotICAgICAgICBXU0RMUG9ydCB3c2RsUG9ydCA9IHBjLmdldFdzZGxQb3J0KCk7Ci0gICAgICAgIHdzZGxQb3J0TGlzdC5hZGQobmV3IFF1YWxpZmllZE5hbWUod3NkbFBvcnQuZ2V0TmFtZXNwYWNlVVJJKCksIHdzZGxQb3J0LmdldExvY2FsUGFydCgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIEFycmF5TGlzdCBwb3J0TGlzdCA9IGdldFBvcnROYW1lc0Zyb21Xc2RsKHdzZGxVUkwsIHBhcnNlcik7Ci0KLSAgICAvL0lmIGFueSBvZiB0aGUgUXVhbGlmaWVkTmFtZXMgaW4gcG9ydExpc3QgZXF1YWxzIGFueSBvZiB0aGUgUXVhbGlmaWVkTmFtZXMKLSAgICAvL2luIHdzZGxQb3J0TGlzdCwgdGhpcyBpcyB0aGUgc2VydmljZSBwcm9qZWN0LiBSZXR1cm4gdHJ1ZS4KLSAgICBPYmplY3RbXSBwb3J0cyA9IHBvcnRMaXN0LnRvQXJyYXkoKTsKLSAgICBPYmplY3RbXSB3c2RsUG9ydHMgPSB3c2RsUG9ydExpc3QudG9BcnJheSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgUXVhbGlmaWVkTmFtZSBwb3J0TmFtZSA9IChRdWFsaWZpZWROYW1lKSBwb3J0c1tpXTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd3NkbFBvcnRzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBRdWFsaWZpZWROYW1lIHdzZGxQb3J0TmFtZSA9IChRdWFsaWZpZWROYW1lKSB3c2RsUG9ydHNbal07Ci0gICAgICAgIGlmIChwb3J0TmFtZS5lcXVhbHMod3NkbFBvcnROYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgSVJlc291cmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYnNlcnZpY2VzLnhtbCBpbiB0aGUgcHJvdmlkZWQgcHJvamVjdC4KLSAgICogQHBhcmFtIHAgYW4gSVByb2plY3QgaW4gdGhlIHdvcmtzcGFjZS4KLSAgICogQHJldHVybiBJUmVzb3VyY2UgY29ycmVzcG9uZGluZyB0byB0aGUgd2Vic2VydmljZXMueG1sIGluIHRoZSBwcm92aWRlZCBwcm9qZWN0LAotICAgKiBudWxsIGlmIHRoZXJlIGlzIG5vIHdlYnNlcnZpY2VzLnhtbCBpbiB0aGUgcHJvamVjdC4KLSAgICovCi0gIHByaXZhdGUgSVJlc291cmNlIGdldFdlYlNlcnZjZXNYTUwoSVByb2plY3QgcCkKLSAgewotICAgIC8vR2V0IHRoZSBtb2R1bGUgcm9vdC4gICAgCi0gICAgSVJlc291cmNlIG1vZHVsZVJvb3QgPSBnZXRNb2R1bGVSb290KHApOwotICAgIGlmICghKG1vZHVsZVJvb3QgaW5zdGFuY2VvZiBJQ29udGFpbmVyKSkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgSVJlc291cmNlIHdlYlNlcnZpY2VzWE1MID0gbnVsbDsKLSAgICBpZiAoSjJFRVByb2plY3RVdGlsaXRpZXMuaXNEeW5hbWljV2ViUHJvamVjdChwKSkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgd3NQYXRoID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgd3NQYXRoLmFwcGVuZCgiV0VCLUlORi8iKTsKLSAgICAgIHdzUGF0aC5hcHBlbmQoV2ViU2VydmljZUNvbnN0YW50cy5XRUJTRVJWSUNFX0REX1NIT1JUX05BTUUpOwotICAgICAgd2ViU2VydmljZXNYTUwgPSAoKElDb250YWluZXIpIG1vZHVsZVJvb3QpLmZpbmRNZW1iZXIod3NQYXRoLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHdzUGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHdzUGF0aC5hcHBlbmQoIk1FVEEtSU5GLyIpOwotICAgICAgd3NQYXRoLmFwcGVuZChXZWJTZXJ2aWNlQ29uc3RhbnRzLldFQlNFUlZJQ0VfRERfU0hPUlRfTkFNRSk7Ci0gICAgICB3ZWJTZXJ2aWNlc1hNTCA9ICgoSUNvbnRhaW5lcikgbW9kdWxlUm9vdCkuZmluZE1lbWJlcih3c1BhdGgudG9TdHJpbmcoKSk7ICAgICAgCi0gICAgfQotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1hNTDsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUmVzb3VyY2UgZ2V0TW9kdWxlUm9vdChJUHJvamVjdCBwKQotICB7Ci0gICAgSVBhdGggbW9kdWxlUGF0aCA9IG51bGw7Ci0gICAgdHJ5IAotICAgIHsKLSAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocCk7Ci0gICAgICBpZiAodmMgIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIG1vZHVsZVBhdGggPSB2Yy5nZXRSb290Rm9sZGVyKCkuZ2V0V29ya3NwYWNlUmVsYXRpdmVQYXRoKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICAKLSAgICB9IAotICAgIAotICAgIElSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShtb2R1bGVQYXRoKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIGxpc3Qgb2YgV1NETCBwb3J0cyBpbiB0aGUgcHJvdmlkZWQgV1NETAotICAgKiBAcGFyYW0gd3NkbFVSTCBVUkwgb2YgYSBXU0RMIGRvY3VtZW50Ci0gICAqIEBwYXJhbSBwYXJzZXIgCi0gICAqIEByZXR1cm4gQXJyYXlMaXN0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgUXVhbGlmaWVkTmFtZX0KLSAgICovCi0gIHByaXZhdGUgQXJyYXlMaXN0IGdldFBvcnROYW1lc0Zyb21Xc2RsKFN0cmluZyB3c2RsVVJMLCBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpCi0gIHsKLSAgCUFycmF5TGlzdCBwb3J0TmFtZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAlEZWZpbml0aW9uIGRlZiA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICBNYXAgc2VydmljZXMgPSBkZWYuZ2V0U2VydmljZXMoKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHNlcnZpY2UgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gc2VydmljZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgTWFwIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdDIgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgIAlQb3J0IHBvcnQgPSAoUG9ydClpdDIubmV4dCgpOwotICAgICAgCXBvcnROYW1lTGlzdC5hZGQobmV3IFF1YWxpZmllZE5hbWUobmFtZXNwYWNlLCBwb3J0LmdldE5hbWUoKSkpOwotICAgICAgfQotICAgIH0gICAgICAgIAotICAJCi0gIAlyZXR1cm4gcG9ydE5hbWVMaXN0OwotICAJCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgUXVhbGlmaWVkTmFtZQotICB7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSTsKLQotICAgIFN0cmluZyBsb2NhbFBhcnQ7Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJCi0gICAgICogQHBhcmFtIGxvY2FsUGFydAotICAgICAqLwotICAgIHB1YmxpYyBRdWFsaWZpZWROYW1lKFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbFBhcnQpCi0gICAgewotICAgICAgc3VwZXIoKTsKLSAgICAgIHRoaXMubmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgICAgdGhpcy5sb2NhbFBhcnQgPSBsb2NhbFBhcnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBSZXR1cm5zIHRoZSBsb2NhbFBhcnQuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRMb2NhbFBhcnQoKQotICAgIHsKLSAgICAgIHJldHVybiBsb2NhbFBhcnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGxvY2FsUGFydAotICAgICAqICAgICAgICAgIFRoZSBsb2NhbFBhcnQgdG8gc2V0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldExvY2FsUGFydChTdHJpbmcgbG9jYWxQYXJ0KQotICAgIHsKLSAgICAgIHRoaXMubG9jYWxQYXJ0ID0gbG9jYWxQYXJ0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgbmFtZXNwYWNlVVJJLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkKLSAgICAgKiAgICAgICAgICBUaGUgbmFtZXNwYWNlVVJJIHRvIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgICB7Ci0gICAgICB0aGlzLm5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoUXVhbGlmaWVkTmFtZSBxbikKLSAgICB7Ci0gICAgICByZXR1cm4gKHFuLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhuYW1lc3BhY2VVUkkpICYmIHFuLmdldExvY2FsUGFydCgpCi0gICAgICAgICAgLmVxdWFscyhsb2NhbFBhcnQpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL0NsaWVudFJvb3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vQ2xpZW50Um9vdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNGZlYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vQ2xpZW50Um9vdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EYXRhT2JqZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5Bc3NlbWJsZUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRlcGxveUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRldmVsb3BDbGllbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JbnN0YWxsQ2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuUnVuQ2xpZW50RnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRSb290RnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50IAotewotICBwdWJsaWMgQ2xpZW50Um9vdEZyYWdtZW50KCkKLSAgewotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IERldmVsb3BDbGllbnRGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlQ2xpZW50RGVwbG95Q29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgRGVwbG95Q2xpZW50RnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IEluc3RhbGxDbGllbnRGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVDbGllbnRSdW5Db21tYW5kKCksIAotICAgIAkgIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50UnVuQ29tbWFuZCIgKSApOwotICAgIGFkZCggbmV3IFJ1bkNsaWVudEZyYWdtZW50KCkgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpIAotICB7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAkKLQkvLyBNYXAgdGhlIFByZUNsaWVudERldmVsb3BDb21tYW5kIGludG8gdGhlIGRhdGFPYmplY3QuCi0JcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJEYXRhT2JqZWN0IiwgRGF0YU9iamVjdENvbW1hbmQuY2xhc3MgKTsKLQkJCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0JCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0JCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgCi0gICAgLy9NYXBwaW5ncyBmcm9tIGZyYW1ld29yayB0byBmcmFtZXdvcmsgY29tbWFuZHMKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZUNsaWVudERlcGxveUNvbW1hbmQuY2xhc3MgKTsKLSAgICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gICAgCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZUNsaWVudEluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFByZUNsaWVudEluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5jbGFzcyApOyAgIAotCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlQ2xpZW50UnVuQ29tbWFuZC5jbGFzcyApOyAgICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBQcmVDbGllbnRSdW5Db21tYW5kLmNsYXNzICk7Ci0JCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZTVkNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNSAgIDIyMjQ3MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIEVBUiB2ZXJzaW9uIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIG1vZHVsZXMgdG8gYmUgYWRkZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wbHVnaW4uSUoyRUVNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCAgICAgICB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICBtb2R1bGVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgIGVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgIGVhcl87Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgICAgICAgCSAgY29udGV4dF87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JICBpZiAoY29udGV4dF8gIT0gbnVsbCAmJiBjb250ZXh0Xy5nZXRBc3NlbWJsZSgpKSB7Ci0JCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQkgIC8vIENoZWNrIGlmIEVBUiBtb2R1bGUgaXMgcmVxJ2QsIGllLiAhPW51bGwKLQkJICBpZiAoZWFyUHJvamVjdF89PW51bGwpCi0JCQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCSAgLy8gIENyZWF0ZSB0aGUgY2xpZW50IEVBUiBtb2R1bGUKLQkJICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKGVhclByb2plY3RfKTsKLQkJICBjb21tYW5kLnNldFRlbXBsYXRlSWQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9URU1QTEFURSk7Ci0KLQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhGYWNldFV0aWxzLmdldFJlcXVpcmVkRUFSRmFjZXRWZXJzaW9ucyhwcm9qZWN0KSk7IAotCi0JCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKSk7Ci0JCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJICBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwotCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCSAgewotCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkJICByZXR1cm4gc3RhdHVzOwotCQkgIH0gICAgICAgIAotCi0KLQkJICAvL0Fzc29jaWF0ZSB0aGUgY2xpZW50IG1vZHVsZSBhbmQgc2VydmljZSBFQVIKLQkJICBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCBhc3NvY2lhdGVDb21tYW5kID0gbmV3IEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldE1vZHVsZShtb2R1bGVfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldEVBUlByb2plY3QoZWFyUHJvamVjdF8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RWFyKGVhcl8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCSAgc3RhdHVzID0gYXNzb2NpYXRlQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJICB7Ci0JCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggIHN0YXR1cyApOyAgICAgCi0JCSAgfSAgICAgCi0KLQkgIH0KLQkgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoIFN0cmluZyBwcm9qZWN0ICkKLSAgewotICAgIHByb2plY3RfID0gcHJvamVjdDsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0gICAgbW9kdWxlXyA9IG1vZHVsZTsKLSAgfSAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoIFN0cmluZyBlYXJQcm9qZWN0ICkKLSAgewotICAgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotICAgIGVhcl8gPSBlYXI7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudCApCi0gIHsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50XyA9IHdlYlNlcnZpY2VDbGllbnQ7ICAKLSAgfSAgIAotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCAoSUNvbnRleHQgY29udGV4dCkgewotCSAgY29udGV4dF8gPSBjb250ZXh0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXBsb3lDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXBsb3lDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTcxZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50RGVwbG95Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnREZXBsb3lDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgY29udGV4dF87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIGlmIChjb250ZXh0XyAhPSBudWxsICYmIGNvbnRleHRfLmdldERlcGxveSgpKQotICAgIHsKLSAgICAgIC8vSWYgYW5kIHdoZW4gdGhlcmUgYXJlIGZyYW1ld29yayBzcGVjaWZpYyBkZXBsb3kgdGhpbmdzIHRvIGJlIGRvbmUsCi0gICAgICAvL2RvIHRoZW0gaGVyZS4KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotICAgICAgY29udGV4dF89Y29udGV4dDsKLSAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERldmVsb3BDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXZlbG9wQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmUyMjg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERldmVsb3BDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTE2ICAgMTI2OTY1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAxMjMgICAxNjc0ODcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDcwNDAzICAgMTczNjU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDIyMTM2NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbi5IVFRQVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5TaW1wbGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU3RhdGU7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnREZXZlbG9wQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgY2xpZW50UnVudGltZUlkXzsKLSAgcHJpdmF0ZSBJQ29udGV4dCAgICAgICAgICBjb250ZXh0XzsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uICAgICAgICBzZWxlY3Rpb25fOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIG1vZHVsZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgbW9kdWxlVHlwZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyUHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyXzsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBqMmVlTGV2ZWxfOwotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCAgIHJlc291cmNlQ29udGV4dF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGV2ZWxvcF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgYXNzZW1ibGVfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGRlcGxveV87Ci0gIHByaXZhdGUgYm9vbGVhbgkJCXRlc3RfOwotICBwcml2YXRlIGJvb2xlYW4JCQlpbnN0YWxsXzsKLSAgcHJpdmF0ZSBib29sZWFuCQkJcnVuXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICB3c2RsVVJJXzsKLSAgcHJpdmF0ZSBPYmplY3QgICAgICAgICAgICBkYXRhT2JqZWN0XzsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgCi0JICBpZiAoZGV2ZWxvcF8pIHsKLQkJICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCi0JCSAgLy8gU3BsaXQgdXAgdGhlIHByb2plY3QgYW5kIG1vZHVsZQotCQkgIGludCBpbmRleCA9IG1vZHVsZV8uaW5kZXhPZigiLyIpOwotCQkgIGlmIChpbmRleCE9LTEpewotCQkJICBwcm9qZWN0XyA9IG1vZHVsZV8uc3Vic3RyaW5nKDAsaW5kZXgpOwotCQkJICBtb2R1bGVfID0gbW9kdWxlXy5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0JCSAgfQotCi0JCSAgaWYgKGVhcl8hPW51bGwgJiYgZWFyXy5sZW5ndGgoKT4wKQotCQkgIHsKLQkJCSAgaW50IGVhckluZGV4ID0gZWFyXy5pbmRleE9mKCIvIik7Ci0JCQkgIGlmIChlYXJJbmRleCE9LTEpIHsKLQkJCQkgIGVhclByb2plY3RfID0gZWFyXy5zdWJzdHJpbmcoMCxlYXJJbmRleCk7Ci0JCQkJICBlYXJfID0gZWFyXy5zdWJzdHJpbmcoZWFySW5kZXgrMSk7Ci0JCQkgIH0KLQkJICB9ICAgIAotCi0JCSAgZW52aXJvbm1lbnQuZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgIndzX2ZyYW1ld29yayIsIDUxMDgsIHRoaXMsICJQcmVDbGllbnREZXZlbG9wQ29tbWFuZCIsICJjbGllbnRSdW50aW1lSWRfID0gIisgY2xpZW50UnVudGltZUlkXyk7Ci0JCSAgSVdlYlNlcnZpY2VSdW50aW1lIHdzcnQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotCQkgIC5nZXRDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZF8pOwotCQkgIFdlYlNlcnZpY2VDbGllbnRJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW5mbygpOwotCi0JCSAgd3NJbmZvLnNldFNlcnZlckZhY3RvcnlJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0U2VydmVySWQoKSk7Ci0JCSAgd3NJbmZvLnNldFNlcnZlckluc3RhbmNlSWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCSAgd3NJbmZvLnNldFN0YXRlKFdlYlNlcnZpY2VTdGF0ZS5VTktOT1dOX0xJVEVSQUwpOwotCQkgIHdzSW5mby5zZXRXZWJTZXJ2aWNlUnVudGltZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRSdW50aW1lSWQoKSk7Ci0JCSAgCi0JCSAgLy8gY2hlY2sgZm9yIHJlZGlyZWN0aW9uIGluIHRoZSB3c2RsCi0JCSAgSFRUUFV0aWxpdHkgaHR0cFV0aWwgPSBuZXcgSFRUUFV0aWxpdHkoKTsJCSAgCi0JCSAgd3NJbmZvLnNldFdzZGxVUkwoaHR0cFV0aWwuaGFuZGxlUmVkaXJlY3Qod3NkbFVSSV8pKTsKLQotCQkgIHdlYlNlcnZpY2VDbGllbnRfID0gd3NydC5nZXRXZWJTZXJ2aWNlQ2xpZW50KHdzSW5mbyk7Ci0JCSAgV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvID0gV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVF9MSVRFUkFMOwotCQkgIGNvbnRleHRfID0gbmV3IFNpbXBsZUNvbnRleHQoZGV2ZWxvcF8sIGFzc2VtYmxlXywgZGVwbG95XywgaW5zdGFsbF8sIHJ1bl8sIHRydWUsIHRlc3RfLAotCQkJCSAgZmFsc2UsIHNjZW5hcmlvLCByZXNvdXJjZUNvbnRleHRfLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCksCi0JCQkJICByZXNvdXJjZUNvbnRleHRfLmlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSwgcmVzb3VyY2VDb250ZXh0XwotCQkJCSAgLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0KLQkJICAvLyBDcmVhdGUgdGhlIGNsaWVudCBtb2R1bGUgaWYgbmVlZGVkLgotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdF8pOwotCQkgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZF8pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotCQkgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJICB7Ci0JCQkgIGJvb2xlYW4gbWF0Y2hlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFRlbXBsYXRlKGNsaWVudFJ1bnRpbWVJZF8sIG1vZHVsZVR5cGVfKTsKLQkJCSAgaWYgKG1hdGNoZXMpCi0JCQkgIHsgIAotCQkJCSAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0JCQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKHByb2plY3RfKTsKLQkJCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChtb2R1bGVUeXBlXyk7Ci0JCQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhyZnYpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkJCSAgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLQkJCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCQkJICB7Ci0JCQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkJCQkJICByZXR1cm4gc3RhdHVzOwotCQkJCSAgfSAgICAgICAgCi0JCQkgIH0gICAgICAgICAgICAKLQkJICB9IGVsc2UgewotCQkJCS8vIGFkZCBmYWNldHMgcmVxdWlyZWQgYnkgV2ViIHNlcnZpY2UgcnVudGltZQotCQkgICAgICAgIGlmIChyZnYubGVuZ3RoICE9IDApIHsKLQkJICAgICAgICAJc3RhdHVzID0gRmFjZXRVdGlscy5hZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChwcm9qZWN0LCByZnYsIG1vbml0b3IpOwotCQkgICAgICAgIAlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotCQkgICAgICAgIAl7Ci0JCSAgICAgICAgCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkgICAgICAgIAkJcmV0dXJuIHN0YXR1czsKLQkJICAgICAgICAJfSAgICAgIAotCQkgICAgICAgIH0KLQkJICB9ICAgICAgICAKLQkgIH0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIgKQotICB7Ci0JdHlwZVJ1bnRpbWVTZXJ2ZXJfID0gdHlwZVJ1bnRpbWVTZXJ2ZXI7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UnVudGltZUlkKCBTdHJpbmcgaWQpCi0gIHsKLSAgICBjbGllbnRSdW50aW1lSWRfID0gaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEoyRUVWZXJzaW9uKCBTdHJpbmcgajJlZUxldmVsICkKLSAgewotCWoyZWVMZXZlbF8gPSBqMmVlTGV2ZWw7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKMmVlTGV2ZWwoKQotICB7Ci0gICAgcmV0dXJuIGoyZWVMZXZlbF87ICAKLSAgfQotICAKLSAgcHVibGljIElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2UoKQotICB7Ci0JcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJQ29udGV4dCBnZXRDb250ZXh0KCkKLSAgewotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ICkKLSAgewotICAgIHJlc291cmNlQ29udGV4dF8gPSByZXNvdXJjZUNvbnRleHQ7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsJICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKCBJU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsKLQlzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHByb2plY3RfOyAgICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRNb2R1bGUoKQotICB7Ci0gICAgcmV0dXJuIG1vZHVsZV87CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQltb2R1bGVfID0gbW9kdWxlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGVUeXBlKCBTdHJpbmcgbW9kdWxlVHlwZSkKLSAgewotICAgIG1vZHVsZVR5cGVfID0gbW9kdWxlVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWFyUHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gZWFyUHJvamVjdF87ICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWFyKCkKLSAgewotCXJldHVybiBlYXJfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gIHsKLQllYXJfID0gZWFyOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wQ2xpZW50KSB7Ci0JICBkZXZlbG9wXyA9IGRldmVsb3BDbGllbnQ7Ci0gIH0JCi0KLSAgcHVibGljIHZvaWQgc2V0QXNzZW1ibGVDbGllbnQoYm9vbGVhbiBhc3NlbWJsZUNsaWVudCkgewotCSAgYXNzZW1ibGVfID0gYXNzZW1ibGVDbGllbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3lDbGllbnQpCi0gIHsKLSAgICAgIGRlcGxveV8gPSBkZXBsb3lDbGllbnQ7Ci0gIH0KLQkKLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudChib29sZWFuIGluc3RhbGxDbGllbnQpCi0gIHsKLQlpbnN0YWxsXyA9IGluc3RhbGxDbGllbnQ7Ci0gIH0JCi0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShib29sZWFuIHRlc3RTZXJ2aWNlKQotICB7Ci0JdGVzdF8gPSB0ZXN0U2VydmljZTsKLSAgfQkJCi0gIAotICBwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoYm9vbGVhbiBzdGFydFNlcnZpY2UpCi0gIHsKLQkgIHJ1bl8gPSBzdGFydFNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHdzZGxVUklfID0gdXJpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREYXRhT2JqZWN0KCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGRhdGFPYmplY3RfID0gb2JqZWN0OwkgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldERhdGFPYmplY3QoKQotICB7Ci0JT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0JCi0gICAgaWYoIGRhdGFPYmplY3RfICE9IG51bGwgJiYgZGF0YU9iamVjdF8gaW5zdGFuY2VvZiBJV2ViU2VydmljZSApCi0JewotCSAgLy8gVGhlIGRhdGEgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gc2V0IHdpdGggYW4gSVdlYlNlcnZpY2UKLQkgIC8vIHNvIHdlIHdpbGwga2VlcCB0aGlzIHZhbHVlLgotCSAgcmVzdWx0ID0gZGF0YU9iamVjdF87Ci0JfQotICAgIGVsc2UKLQl7Ci0JICByZXN1bHQgPSB3ZWJTZXJ2aWNlQ2xpZW50XzsJCi0JfQotCQotCXJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudEluc3RhbGxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjhjZTZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudEluc3RhbGxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDgxNSAgIDE5OTYyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5BZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZVNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZUNsaWVudDsKLQotcHVibGljIGNsYXNzIFByZUNsaWVudEluc3RhbGxDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgbW9kdWxlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBlYXJQcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBlYXJfOwotICBwcml2YXRlIElDb250ZXh0CQkJY29udGV4dF87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewkgIAotCSAgaWYgKGNvbnRleHRfICE9IG51bGwgJiYgY29udGV4dF8uZ2V0SW5zdGFsbCgpKQotCSAgeyAgCi0JICAgICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkgICAgICAKLQkgICAgICBpZiAod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk9PW51bGwpCi0JICAgICAgewotCSAgICAgICAgQ3JlYXRlU2VydmVyQ29tbWFuZCBjcmVhdGVTZXJ2ZXJDb21tYW5kID0gbmV3IENyZWF0ZVNlcnZlckNvbW1hbmQoKTsKLQkgICAgICAgIGNyZWF0ZVNlcnZlckNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeWlkKHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCkpOwotCSAgICAgICAgY3JlYXRlU2VydmVyQ29tbWFuZC5zZXRTZXJ2ZXJSdW50aW1lSWQod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJSdW50aW1lSWQoKSk7Ci0JICAgICAgICBjcmVhdGVTZXJ2ZXJDb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCSAgICAgICAgSVN0YXR1cyBjcmVhdGVTZXJ2ZXJTdGF0dXMgPSBjcmVhdGVTZXJ2ZXJDb21tYW5kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0JICAgICAgICBpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5PSykKLQkgICAgICAgIHsKLQkgICAgICAgICAgd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNyZWF0ZVNlcnZlckNvbW1hbmQuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgICAgICAgICAgd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5zZXRTZXJ2ZXJDcmVhdGVkKHRydWUpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZQotCSAgICAgICAgewotCSAgICAgICAgICBpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggY3JlYXRlU2VydmVyU3RhdHVzICk7Ci0JICAgICAgICAgIH0gICAgICAgICAgICAgICAKLQkgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNlcnZlclN0YXR1czsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgCi0JICAgICAgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kKCk7Ci0JICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgICAgICBpZiAoZWFyUHJvamVjdF8gIT0gbnVsbCAmJiBlYXJQcm9qZWN0Xy5sZW5ndGgoKT4wICYmIGVhcl8hPSBudWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkgICAgICB7Ci0JICAgICAgICBjb21tYW5kLnNldFByb2plY3QoZWFyUHJvamVjdF8pOwotCSAgICAgICAgY29tbWFuZC5zZXRNb2R1bGUoZWFyXyk7Ci0JICAgICAgfQotCSAgICAgIGVsc2UKLQkgICAgICB7Ci0JICAgICAgICBjb21tYW5kLnNldFByb2plY3QocHJvamVjdF8pOwotCSAgICAgICAgY29tbWFuZC5zZXRNb2R1bGUobW9kdWxlXyk7ICAgICAgIAotCSAgICAgIH0KLQkKLQkgICAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCSAgICAgIElTdGF0dXMgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0JICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JICAgICAgewotCSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkgICAgICB9ICAgICAKLQkgICAgICByZXR1cm4gc3RhdHVzOwotCSAgIH0KLQkgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KCBTdHJpbmcgcHJvamVjdCApCi0gICAgewotICAgICAgcHJvamVjdF8gPSBwcm9qZWN0OwotICAgIH0KLSAgICAgIAotICAgIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gICAgewotICAgICAgbW9kdWxlXyA9IG1vZHVsZTsKLSAgICB9IAotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoIFN0cmluZyBlYXJQcm9qZWN0ICkKLSAgICB7Ci0gICAgICBlYXJQcm9qZWN0XyA9IGVhclByb2plY3Q7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gICAgewotICAgICAgZWFyXyA9IGVhcjsgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50ICkKLSAgICB7Ci0gICAgICB3ZWJTZXJ2aWNlQ2xpZW50XyA9IHdlYlNlcnZpY2VDbGllbnQ7ICAKLSAgICB9ICAgIAotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgCWNvbnRleHRfID0gY29udGV4dDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRSdW5Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRSdW5Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MzE1YmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50UnVuQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuU3RhcnRTZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnRSdW5Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudF87Ci0gIHByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgCi0JICBpZiAoY29udGV4dF8gIT0gbnVsbCAmJiBjb250ZXh0Xy5nZXRSdW4oKSkKLQkgIHsKLQkgICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsgICAKLQkgICAgCi0JICAgIFN0YXJ0U2VydmVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFN0YXJ0U2VydmVyQ29tbWFuZCgpOwotCSAgICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCSAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCSAgICBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JICAgIHsKLQkgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOyAgICAgICAKLQkgICAgfSAKLQkgIH0KLQkgIAotICAgIHJldHVybiBzdGF0dXM7CSAgCi0gIH0KLQkgIAotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnQgKQotICB7Ci0gICAgd2ViU2VydmljZUNsaWVudF8gPSB3ZWJTZXJ2aWNlQ2xpZW50OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotCSAgY29udGV4dF89Y29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTkzNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUwNCAgIDEzNjExOCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUGVyc2lzdGVudFByb2plY3RUb3BvbG9neUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUHJvamVjdFRvcG9sb2d5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotCi0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbiBpbnN0YW5jZV87Ci0KLSAgcHJpdmF0ZSBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgc2VydmVyUnVudGltZUNvbnRleHRfOwotICBwcml2YXRlIFBlcnNpc3RlbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHByb2plY3RUb3BvbG9neUNvbnRleHRfOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbiAoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZV8gPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgKiAoV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3MudWkiKTsKLSAgKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4gZ2V0SW5zdGFuY2UgKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgcmVzb3VyY2UKLSAgICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIEFuIGltYWdlIGRlc2NyaXB0b3IsIHBvc3NpYmx5IG51bGwuCi0gICAqLwotICAgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yICggU3RyaW5nIG5hbWUgKQotICAgewotIAl0cnkKLSAgICAgewkKLSAgICAgCVVSTCBpbWFnZVVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoaW5zdGFuY2VfLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiJG5sJC8iK25hbWUpLCBudWxsKTsKLSAgICAgCXJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0gICAgIH0KLSAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICB7Ci0gICAgICAgcmV0dXJuIG51bGw7Ci0gICAgIH0KLSAgIH0KLQotICBwdWJsaWMgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBnZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCkKLSAgewotICAgIGlmIChwcm9qZWN0VG9wb2xvZ3lDb250ZXh0XyA9PSBudWxsKQotICAgIHsKLSAgICAgIHByb2plY3RUb3BvbG9neUNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgICBwcm9qZWN0VG9wb2xvZ3lDb250ZXh0Xy5sb2FkKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcm9qZWN0VG9wb2xvZ3lDb250ZXh0XzsKLSAgfQotCi0gIHB1YmxpYyBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKSAKLQl7Ci0JICBpZiAoc2VydmVyUnVudGltZUNvbnRleHRfID09IG51bGwpCi0JICAJewotCSAgCQlzZXJ2ZXJSdW50aW1lQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0JICAJCXNlcnZlclJ1bnRpbWVDb250ZXh0Xy5sb2FkKCk7Ci0JICAJfQotCSAgcmV0dXJuIHNlcnZlclJ1bnRpbWVDb250ZXh0XzsKLQl9ICAKLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjYyZTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFByb2plY3RUb3BvbG9neUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDIgICAxMTk3ODAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgUHJvamVjdFRvcG9sb2d5Q29udGV4dAotewotCi0gIHB1YmxpYyBQZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCAoKSAKLSAgewotCSAgc3VwZXIoIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBsb2FkKCkgCi0gIHsKLSAgICAvL0xvYWQgdGhlIHNlcnZpY2UgcHJvamVjdCB0eXBlcwotICAgIFN0cmluZ1tdIHNlcnZpY2VJZHMgPSBQcm9qZWN0VG9wb2xvZ3lEZWZhdWx0cy5nZXRTZXJ2aWNlVHlwZXMoKTsKLSAgICBTdHJpbmdCdWZmZXIgc2VydmljZVNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZUlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSAhPSAwKQotICAgICAgICBzZXJ2aWNlU2IuYXBwZW5kKCIgIik7Ci0gICAgICBzZXJ2aWNlU2IuYXBwZW5kKHNlcnZpY2VJZHNbaV0pOwotICAgIH0KLSAgICBzZXREZWZhdWx0U3RyaW5nSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9TRVJWSUNFX1RZUEVTLCBzZXJ2aWNlU2IudG9TdHJpbmcoKSk7Ci0gICAgCi0gICAgLy9Mb2FkIHRoZSBjbGllbnQgcHJvamVjdCB0eXBlcwotICAgIFN0cmluZ1tdIGlkcyA9IFByb2plY3RUb3BvbG9neURlZmF1bHRzLmdldENsaWVudFR5cGVzKCk7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpICE9IDApCi0gICAgICAgIHNiLmFwcGVuZCgiICIpOwotICAgICAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0gICAgfQotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX0NMSUVOVF9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1VTRV9UV09fRUFSUywgUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuaXNVc2VUd29FQVJzKCkpOwotIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZXMoU3RyaW5nW10gaWRzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpICE9IDApCi0gICAgICAgIHNiLmFwcGVuZCgiICIpOwotICAgICAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0gICAgfQotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfU0VSVklDRV9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0U2VydmljZVR5cGVzKCkKLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX1NFUlZJQ0VfVFlQRVMpKTsKLSAgICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspCi0gICAgICBzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0U2VydmljZVR5cGVzKCkKLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX1NFUlZJQ0VfVFlQRVMpKTsKLSAgICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspCi0gICAgICBzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgcmV0dXJuIHM7ICAgICAgICAKLSAgfQotICAgIAotIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVzKFN0cmluZ1tdIGlkcykKLSB7Ci0gICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykKLSAgIHsKLSAgICAgaWYgKGkgIT0gMCkKLSAgICAgICBzYi5hcHBlbmQoIiAiKTsKLSAgICAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0gICB9Ci0gICBzZXRWYWx1ZShQUkVGRVJFTkNFX0NMSUVOVF9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gfQotCi0gcHVibGljIFN0cmluZ1tdIGdldENsaWVudFR5cGVzKCkKLSB7Ci0gICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGdldFZhbHVlQXNTdHJpbmcoUFJFRkVSRU5DRV9DTElFTlRfVFlQRVMpKTsKLSAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKQotICAgICBzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICByZXR1cm4gczsKLSB9Ci0gCi0gcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRDbGllbnRUeXBlcygpCi0gewotICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihnZXREZWZhdWx0U3RyaW5nKFBSRUZFUkVOQ0VfQ0xJRU5UX1RZUEVTKSk7Ci0gICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykKLSAgICAgc1tpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgcmV0dXJuIHM7ICAgICAgICAKLSB9IAotCi0gcHVibGljIHZvaWQgc2V0VXNlVHdvRUFScyhib29sZWFuIHVzZSkKLSB7Ci0gICBzZXRWYWx1ZShQUkVGRVJFTkNFX1VTRV9UV09fRUFSUywgdXNlKTsKLSB9Ci0gcHVibGljIGJvb2xlYW4gaXNVc2VUd29FQVJzKCkKLSB7Ci0gICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9VU0VfVFdPX0VBUlMpOwotIH0KLQotIHB1YmxpYyBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvcHkoKSB7Ci0gCVRyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQgY29udGV4dCA9IG5ldyBUcmFuc2llbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgY29udGV4dC5zZXRTZXJ2aWNlVHlwZXMoZ2V0U2VydmljZVR5cGVzKCkpOwotICAgIGNvbnRleHQuc2V0RGVmYXVsdFNlcnZpY2VUeXBlcyhnZXREZWZhdWx0U2VydmljZVR5cGVzKCkpOwotCWNvbnRleHQuc2V0Q2xpZW50VHlwZXMoZ2V0Q2xpZW50VHlwZXMoKSk7Ci0gICAgY29udGV4dC5zZXREZWZhdWx0Q2xpZW50VHlwZXMoZ2V0RGVmYXVsdENsaWVudFR5cGVzKCkpOwotCWNvbnRleHQuc2V0VXNlVHdvRUFScyhpc1VzZVR3b0VBUnMoKSk7Ci0JcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDhmMTk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwNDE1ICAgMjI3MTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBOZWVkIGEgd2F5IHRvIHNwZWNpZnkgYSBiYWNrdXAgV2ViIHNlcnZpY2UgcnVudGltZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLQotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQgewotCQotCXByaXZhdGUgU3RyaW5nIFBSRUZFUkVOQ0VfU0VSVkVSID0gIlBSRUZFUkVOQ0VfU0VSVkVSIjsKLQlwcml2YXRlIFN0cmluZyBQUkVGRVJFTkNFX1JVTlRJTUUgPSAiUFJFRkVSRU5DRV9SVU5USU1FIjsKLQlwcml2YXRlIFN0cmluZyBGQUxMQkFDS19SVU5USU1FID0gIkZBTExCQUNLX1JVTlRJTUUiOyAgLy8gV2ViIHNlcnZpY2UgcnVudGltZSB0byBmYWxsYmFjayB0byBpZiBwcmVmZXJyZWQgcnVudGltZSBpcyBub3Qgc3VpdGFibGUKLQkvL3ByaXZhdGUgU3RyaW5nIFBSRUZFUkVOQ0VfSjJFRV9WRVJTSU9OID0gIlBSRUZFUkVOQ0VfSjJFRV9WRVJTSU9OIjsKLQkKLQlwcml2YXRlIFN0cmluZyBTRVJWRVJfRkFDVE9SWV9JRF9ERUZBVUxUID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIjsKLQlwcml2YXRlIFN0cmluZyBSVU5USU1FX0lEX0RFRkFVTFQgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCI7Ci0JCi0JcHVibGljIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpCi0JewotCQlzdXBlcihXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuQ29udGV4dCNsb2FkKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBsb2FkKCkgewotCQkvL0RlZmF1bHRzIHdpbGwgYmUgc2V0IHZpYSB0aGUgLmluaSBjdXN0b21pemF0aW9uLiBUaGV5IGFyZSBoYXJkIGNvZGVkIHRvIGRlZmF1bHQgdmFsdWVzIGluIHRoZQotCQkvL2Fic2VuY2Ugb2YgYSAuaW5pIGZpbGUuCi0JCVN0cmluZyBzZXJ2ZXJEZWZhdWx0ID0gZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX1NFUlZFUik7Ci0JCWlmIChzZXJ2ZXJEZWZhdWx0PT1udWxsIHx8IHNlcnZlckRlZmF1bHQubGVuZ3RoKCk9PTApCi0JCXsKLQkJICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfU0VSVkVSLCBTRVJWRVJfRkFDVE9SWV9JRF9ERUZBVUxUKTsKLQkJfQotCi0JCVN0cmluZyBydW50aW1lRGVmYXVsdCA9IGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9SVU5USU1FKTsKLQkJaWYgKHJ1bnRpbWVEZWZhdWx0PT1udWxsIHx8IHJ1bnRpbWVEZWZhdWx0Lmxlbmd0aCgpPT0wKQotCQl7Ci0JCSAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1JVTlRJTUUsIFJVTlRJTUVfSURfREVGQVVMVCk7Ci0JCX0KLQkJCQkKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0U2VydmVyRmFjdG9yeUlkKCkKLQl7Ci0JCXJldHVybiBnZXREZWZhdWx0U3RyaW5nKFBSRUZFUkVOQ0VfU0VSVkVSKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRSdW50aW1lSWQoKQotCXsKLQkJcmV0dXJuIGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9SVU5USU1FKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEZhbGxiYWNrUnVudGltZUlkKCkKLQl7Ci0JCXJldHVybiBnZXREZWZhdWx0U3RyaW5nKEZBTExCQUNLX1JVTlRJTUUpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckZhY3RvcnlJZCgpCi0JewotCQlTdHJpbmcgdmFsdWUgPSBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfU0VSVkVSKTsgCi0JCS8qCi0JCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS5sZW5ndGgoKT09MCkKLQkJewotCQkJdmFsdWUgPSBTRVJWRVJfRkFDVE9SWV9JRF9ERUZBVUxUOyAKLQkJCXNldFNlcnZlckZhY3RvcnlJZCh2YWx1ZSk7Ci0JCX0KLQkJKi8KLQkJcmV0dXJuIHZhbHVlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVJZCgpCi0JewotCQlTdHJpbmcgdmFsdWUgPSBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfUlVOVElNRSk7Ci0JCS8qCi0JCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS5sZW5ndGgoKT09MCkKLQkJewotCQkJdmFsdWUgPSBSVU5USU1FX0lEX0RFRkFVTFQ7IAotCQkJc2V0UnVudGltZUlkKHZhbHVlKTsKLQkJfQotCQkqLwotCQlyZXR1cm4gdmFsdWU7CQkKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgc2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBpZCkKLQl7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfU0VSVkVSLGlkKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UnVudGltZUlkKFN0cmluZyBpZCkKLQl7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfUlVOVElNRSwgaWQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMjFjNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUHJvamVjdFRvcG9sb2d5Q29udGV4dCAKLXsKLSAgLyoqCi0gICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgcHJlZmVycmVkIG9yZGVyIG9mIHRoZSBkaWZmZXJlbnQgY2xpZW50IHR5cGVzCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0NMSUVOVF9UWVBFUyA9ICJjbGllbnRUeXBlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfU0VSVklDRV9UWVBFUyA9ICJzZXJ2aWNlVHlwZXMiOwotICAKLSAgLyoqCi0gICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdHdvIEVBUiBvcHRpb24KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfVVNFX1RXT19FQVJTID0gInVzZVR3b0VBUnMiOwotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVzKFN0cmluZ1tdIGlkcyk7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXRTZXJ2aWNlVHlwZXMoKTsKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRTZXJ2aWNlVHlwZXMoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVzKFN0cmluZ1tdIGlkcyk7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXRDbGllbnRUeXBlcygpOwotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdENsaWVudFR5cGVzKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0VXNlVHdvRUFScyhib29sZWFuIHVzZSk7Ci0gIHB1YmxpYyBib29sZWFuIGlzVXNlVHdvRUFScygpOwotCi0gIHB1YmxpYyBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvcHkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5ZTFmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1Byb2plY3RUb3BvbG9neURlZmF1bHRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLQotcHVibGljIGNsYXNzIFByb2plY3RUb3BvbG9neURlZmF1bHRzCi17Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGdldFNlcnZpY2VUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0QWxsU2VydmljZVByb2plY3RUeXBlcygpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGdldENsaWVudFR5cGVzKCkKLSAgewotICAgIHJldHVybiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRBbGxDbGllbnRQcm9qZWN0VHlwZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1VzZVR3b0VBUnMoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2NWIyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1Byb2plY3RUb3BvbG9neVByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTUgICAxNDEzOTggY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VG9wb2xvZ3lQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotICAvKkNPTlRFWFRfSUQgUFRQUDAwMDEgZm9yIHRoZSBQcm9qZWN0IFRvcG9sb2d5IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFRQUF9QQUdFID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5QVFBQMDAwMSI7Ci0KLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciBzZXJ2aWNlVHlwZVZpZXdlcl87Ci0gIHByaXZhdGUgQnV0dG9uIHNlcnZpY2VNb3ZlVXBfOwotICBwcml2YXRlIEJ1dHRvbiBzZXJ2aWNlTW92ZURvd25fOwotICBwcml2YXRlIFZlY3RvciBzZXJ2aWNlVHlwZXNfOwotICAKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciBjbGllbnRUeXBlVmlld2VyXzsKLSAgcHJpdmF0ZSBCdXR0b24gbW92ZVVwXzsKLSAgcHJpdmF0ZSBCdXR0b24gbW92ZURvd25fOwotICBwcml2YXRlIFZlY3RvciBjbGllbnRUeXBlc187Ci0KLSAgcHJpdmF0ZSBCdXR0b24gdHdvRUFSXzsKLQotIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlICAgcGFyZW50ID0gbmV3IENvbXBvc2l0ZSggc3VwZXJwYXJlbnQsIFNXVC5OT05FICk7CQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgcGFyZW50LnNldExheW91dCggbGF5b3V0ICk7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BUUFBfUEFHRSk7Ci0gICAgcGFyZW50LnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCxJTkZPUE9QX1BUUFBfUEFHRSk7ICAKLQotICAgIEdyb3VwIHNlcnZpY2VUeXBlQ29tcG9zaXRlID0gbmV3IEdyb3VwKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgR3JpZExheW91dCBzZXJ2aWNlZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIHNlcnZpY2VnbC5udW1Db2x1bW5zID0gMjsKLSAgICAvL3NlcnZpY2VnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIC8vc2VydmljZWdsLm1hcmdpbldpZHRoID0gMDsKLSAgICBzZXJ2aWNlVHlwZUNvbXBvc2l0ZS5zZXRMYXlvdXQoc2VydmljZWdsKTsKLSAgICBzZXJ2aWNlVHlwZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApKTsKLSAgICBzZXJ2aWNlVHlwZUNvbXBvc2l0ZS5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9TRVJWSUNFX1RZUEVfTkFNRSk7Ci0gICAgCi0gICAgVGFibGUgc2VydmljZVRhYmxlPSBuZXcgVGFibGUoc2VydmljZVR5cGVDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLSAgICBHcmlkRGF0YSBzZXJ2aWNlZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMIHwgR3JpZERhdGEuRklMTF9WRVJUSUNBTCk7Ci0gICAgc2VydmljZWdkLndpZHRoSGludCA9IDI1NjsKLSAgICBzZXJ2aWNlVGFibGUuc2V0TGF5b3V0RGF0YShzZXJ2aWNlZ2QpOwotICAgIHNlcnZpY2VUYWJsZS5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9TRVJWSUNFX1RZUEVfVEFCTEVfVklFV0VSKTsKLQotICAgIHNlcnZpY2VUeXBlc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2VydmljZVR5cGVWaWV3ZXJfID0gbmV3IFRhYmxlVmlld2VyKHNlcnZpY2VUYWJsZSk7Ci0gICAgc2VydmljZVR5cGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgQ2xpZW50VHlwZUNvbnRlbnRQcm92aWRlcigpKTsKLSAgICBzZXJ2aWNlVHlwZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgQ2xpZW50VHlwZUxhYmVsUHJvdmlkZXIoKSk7Ci0gICAgc2VydmljZVR5cGVWaWV3ZXJfLnNldElucHV0KHNlcnZpY2VUeXBlc18pOwotCi0gICAgVGFibGVMYXlvdXQgc2VydmljZVRhYmxlTGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0gICAgVGFibGVDb2x1bW4gc2VydmljZVRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHNlcnZpY2VUYWJsZSwgU1dULk5PTkUpOwotICAgIHNlcnZpY2VUYWJsZUNvbHVtbi5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9TRVJWSUNFX1RZUEVfTkFNRSk7Ci0gICAgQ29sdW1uV2VpZ2h0RGF0YSBzZXJ2aWNlQ29sdW1uRGF0YSA9IG5ldyBDb2x1bW5XZWlnaHREYXRhKDI1NiwgMjU2LCBmYWxzZSk7Ci0gICAgc2VydmljZVRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoc2VydmljZUNvbHVtbkRhdGEpOwotICAgIHNlcnZpY2VUYWJsZS5zZXRMYXlvdXQoc2VydmljZVRhYmxlTGF5b3V0KTsKLSAgICAKLSAgICBDb21wb3NpdGUgc2VydmljZWMgPSBuZXcgQ29tcG9zaXRlKHNlcnZpY2VUeXBlQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgc2VydmljZWdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBzZXJ2aWNlZ2wubnVtQ29sdW1ucyA9IDE7Ci0gICAgLy9zZXJ2aWNlZ2wubWFyZ2luSGVpZ2h0ID0gMTA7Ci0gICAgc2VydmljZWdsLm1hcmdpbldpZHRoID0gMDsKLSAgICBzZXJ2aWNlYy5zZXRMYXlvdXQoc2VydmljZWdsKTsKLSAgICBzZXJ2aWNlYy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQotICAgIHNlcnZpY2VNb3ZlVXBfID0gbmV3IEJ1dHRvbihzZXJ2aWNlYywgU1dULlBVU0gpOwotICAgIHNlcnZpY2VNb3ZlVXBfLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX01PVkVfVVApOwotICAgIHNlcnZpY2VNb3ZlVXBfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIHNlcnZpY2VNb3ZlVXBfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHNlcnZpY2VNb3ZlVXBfLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX01PVkVfVVApOwotCi0gICAgc2VydmljZU1vdmVEb3duXyA9IG5ldyBCdXR0b24oc2VydmljZWMsIFNXVC5QVVNIKTsKLSAgICBzZXJ2aWNlTW92ZURvd25fLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX01PVkVfRE9XTik7Ci0gICAgc2VydmljZU1vdmVEb3duXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBzZXJ2aWNlTW92ZURvd25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHNlcnZpY2VNb3ZlRG93bl8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfTU9WRV9ET1dOKTsKLQotICAgIHNlcnZpY2VUYWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgVGFibGVTZWxlY3Rpb25MaXN0ZW5lcihzZXJ2aWNlTW92ZVVwXywgc2VydmljZU1vdmVEb3duXywgc2VydmljZVRhYmxlKSk7Ci0KLSAgICBHcm91cCBjbGllbnRUeXBlQ29tcG9zaXRlID0gbmV3IEdyb3VwKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgLy9nbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIC8vZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIGNsaWVudFR5cGVDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICBjbGllbnRUeXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkpOwotICAgIGNsaWVudFR5cGVDb21wb3NpdGUuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRSk7Ci0KLSAgICBUYWJsZSBjbGllbnRUYWJsZT0gbmV3IFRhYmxlKGNsaWVudFR5cGVDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBnZC53aWR0aEhpbnQgPSAyNTY7Ci0gICAgY2xpZW50VGFibGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgY2xpZW50VGFibGUuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSKTsKLQotICAgIGNsaWVudFR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBjbGllbnRUeXBlVmlld2VyXyA9IG5ldyBUYWJsZVZpZXdlcihjbGllbnRUYWJsZSk7Ci0gICAgY2xpZW50VHlwZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBDbGllbnRUeXBlQ29udGVudFByb3ZpZGVyKCkpOwotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IENsaWVudFR5cGVMYWJlbFByb3ZpZGVyKCkpOwotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnNldElucHV0KGNsaWVudFR5cGVzXyk7Ci0KLSAgICBUYWJsZUxheW91dCB0YWJsZUxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotICAgIFRhYmxlQ29sdW1uIHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKGNsaWVudFRhYmxlLCBTV1QuTk9ORSk7Ci0gICAgdGFibGVDb2x1bW4uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRSk7Ci0gICAgQ29sdW1uV2VpZ2h0RGF0YSBjb2x1bW5EYXRhID0gbmV3IENvbHVtbldlaWdodERhdGEoMjU2LCAyNTYsIGZhbHNlKTsKLSAgICB0YWJsZUxheW91dC5hZGRDb2x1bW5EYXRhKGNvbHVtbkRhdGEpOwotICAgIGNsaWVudFRhYmxlLnNldExheW91dCh0YWJsZUxheW91dCk7Ci0KLSAgICBDb21wb3NpdGUgYyA9IG5ldyBDb21wb3NpdGUoY2xpZW50VHlwZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMTsKLSAgICAvL2dsLm1hcmdpbkhlaWdodCA9IDEwOwotICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICBjLnNldExheW91dChnbCk7Ci0gICAgYy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQotICAgIG1vdmVVcF8gPSBuZXcgQnV0dG9uKGMsIFNXVC5QVVNIKTsKLSAgICBtb3ZlVXBfLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX01PVkVfVVBfMik7Ci0gICAgbW92ZVVwXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBtb3ZlVXBfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIG1vdmVVcF8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfTU9WRV9VUCk7Ci0KLSAgICBtb3ZlRG93bl8gPSBuZXcgQnV0dG9uKGMsIFNXVC5QVVNIKTsKLSAgICBtb3ZlRG93bl8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfTU9WRV9ET1dOXzIpOwotICAgIG1vdmVEb3duXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBtb3ZlRG93bl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgbW92ZURvd25fLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX01PVkVfRE9XTik7Ci0KLSAgICBjbGllbnRUYWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgVGFibGVTZWxlY3Rpb25MaXN0ZW5lcihtb3ZlVXBfLCBtb3ZlRG93bl8sIGNsaWVudFRhYmxlKSk7Ci0KLSAgICB0d29FQVJfID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5DSEVDSyB8IFNXVC5XUkFQICk7Ci0gICAgdHdvRUFSXy5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9FTkFCTEVfVFdPX0VBUlMpOwotICAgIHR3b0VBUl8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfRU5BQkxFX1RXT19FQVJTKTsKLQotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOyAgICAKLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkKLSAgewotICAgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotICAgIGluaXRpYWxpemVEZWZhdWx0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICogIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0gIHsKLSAgICBzdG9yZVZhbHVlcygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLSAgewotICAgIHBlcmZvcm1PaygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSAgeyB9Ci0KLSAgCi0gIC8qKgotICAgKiBBZGRzIHRoZSBTdHJpbmcgZWxlbWVudHMgb2YgYXJyYXkgYSBpbnRvIFZlY3RvciB2LiBJZiBTdHJpbmcgYXJyYXkgYiBjb250YWlucyBhbnkgZWxlbWVudHMKLSAgICogdGhhdCBhcmUgbm90IGFscmVhZHkgaW4gYXJyYXkgYSwgYXBwZW5kcyB0aGVzZSBlbGVtZW50cyBmcm9tIGFycmF5IGIgdG8gdGhlIGVuZCBvZiBWZWN0b3Igdi4gCi0gICAqIEBwYXJhbSBhIGEgU3RyaW5nIGFycmF5Ci0gICAqIEBwYXJhbSBiIGEgU3RyaW5nIGFycmF5Ci0gICAqIEBwYXJhbSB2IGEgbm9uLW51bGwgVmVjdG9yCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2V0VmVjdG9yQ29udGVudHNGcm9tVHdvQXJyYXlzKFN0cmluZ1tdIGEsIFN0cmluZ1tdIGIsIFZlY3RvciB2KQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFbaV0pOwotICAgIH0KLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHYuaW5kZXhPZihiW2ldKSA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdi5hZGQoYltpXSk7Ci0gICAgICB9Ci0gICAgfSAgIAotICB9Ci0gIAotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB0byB0aGVpciBidXJuZWQtaW4gZGVmYXVsdHMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIHNlcnZpY2VUeXBlc18uY2xlYXIoKTsKLSAgICBTdHJpbmdbXSBkZWZhdWx0U2VydmljZVR5cGVzID0gY29udGV4dC5nZXREZWZhdWx0U2VydmljZVR5cGVzKCk7Ci0gICAgU3RyaW5nW10gYWxsU2VydmljZVR5cGVzID0gUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgc2V0VmVjdG9yQ29udGVudHNGcm9tVHdvQXJyYXlzKGRlZmF1bHRTZXJ2aWNlVHlwZXMsIGFsbFNlcnZpY2VUeXBlcywgc2VydmljZVR5cGVzXyk7ICAgIAotICAgIHNlcnZpY2VUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgCi0gICAgY2xpZW50VHlwZXNfLmNsZWFyKCk7Ci0gICAgU3RyaW5nW10gZGVmYXVsdENsaWVudFR5cGVzID0gY29udGV4dC5nZXREZWZhdWx0Q2xpZW50VHlwZXMoKTsKLSAgICBTdHJpbmdbXSBhbGxDbGllbnRUeXBlcyA9IFByb2plY3RUb3BvbG9neURlZmF1bHRzLmdldENsaWVudFR5cGVzKCk7Ci0gICAgc2V0VmVjdG9yQ29udGVudHNGcm9tVHdvQXJyYXlzKGRlZmF1bHRDbGllbnRUeXBlcywgYWxsQ2xpZW50VHlwZXMsIGNsaWVudFR5cGVzXyk7ICAgICAgICAgCi0gICAgY2xpZW50VHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgIAotICAgIHR3b0VBUl8uc2V0U2VsZWN0aW9uKHRydWUpOwotICB9Ci0gIAotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlIGhlbHBlci4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLSAgewotICAgIC8vSW5pdGlhbCBzZXJ2aWNlIHByb2plY3QgdHlwZXMuCi0gICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgU3RyaW5nW10gc2VydmljZVR5cGVzRnJvbUNvbnRleHQgPSBjb250ZXh0LmdldFNlcnZpY2VUeXBlcygpOwotICAgIFN0cmluZ1tdIGFsbFNlcnZpY2VUeXBlcyA9IFByb2plY3RUb3BvbG9neURlZmF1bHRzLmdldFNlcnZpY2VUeXBlcygpOwotICAgIHNldFZlY3RvckNvbnRlbnRzRnJvbVR3b0FycmF5cyhzZXJ2aWNlVHlwZXNGcm9tQ29udGV4dCwgYWxsU2VydmljZVR5cGVzLCBzZXJ2aWNlVHlwZXNfKTsKLSAgICBpZiAoYWxsU2VydmljZVR5cGVzLmxlbmd0aCA+IHNlcnZpY2VUeXBlc0Zyb21Db250ZXh0Lmxlbmd0aCkKLSAgICB7Ci0gICAgICBTdHJpbmdbXSBzZXJ2aWNlVHlwZXNBcnJheSA9IG5ldyBTdHJpbmdbc2VydmljZVR5cGVzXy5zaXplKCldOwotICAgICAgc2VydmljZVR5cGVzXy5jb3B5SW50byhzZXJ2aWNlVHlwZXNBcnJheSk7Ci0gICAgICBjb250ZXh0LnNldFNlcnZpY2VUeXBlcyhzZXJ2aWNlVHlwZXNBcnJheSk7Ci0gICAgfQotICAgIC8vIHJlZnJlc2ggdmlld2VyCi0gICAgc2VydmljZVR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAKLSAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaW4gdGhpcyB0YWJsZQotICAgIGlmIChzZXJ2aWNlVHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5nZXRJdGVtQ291bnQoKSA+IDApewotICAgIAlzZXJ2aWNlVHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5zZXRTZWxlY3Rpb24oMCk7Ci0gICAgCXNlcnZpY2VUeXBlVmlld2VyXy5nZXRUYWJsZSgpLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0gICAgfQotCi0gICAgLy9Jbml0aWFsaXplIGNsaWVudCBwcm9qZWN0IHR5cGVzLgotICAgIFN0cmluZ1tdIGNsaWVudFR5cGVzRnJvbUNvbnRleHQgPSBjb250ZXh0LmdldENsaWVudFR5cGVzKCk7Ci0gICAgU3RyaW5nW10gYWxsQ2xpZW50VHlwZXMgPSBQcm9qZWN0VG9wb2xvZ3lEZWZhdWx0cy5nZXRDbGllbnRUeXBlcygpOwotICAgIHNldFZlY3RvckNvbnRlbnRzRnJvbVR3b0FycmF5cyhjbGllbnRUeXBlc0Zyb21Db250ZXh0LCBhbGxDbGllbnRUeXBlcywgY2xpZW50VHlwZXNfKTsKLSAgICBpZiAoYWxsQ2xpZW50VHlwZXMubGVuZ3RoID4gY2xpZW50VHlwZXNGcm9tQ29udGV4dC5sZW5ndGgpCi0gICAgewotICAgICAgU3RyaW5nW10gY2xpZW50VHlwZXNBcnJheSA9IG5ldyBTdHJpbmdbY2xpZW50VHlwZXNfLnNpemUoKV07Ci0gICAgICBjbGllbnRUeXBlc18uY29weUludG8oY2xpZW50VHlwZXNBcnJheSk7Ci0gICAgICBjb250ZXh0LnNldENsaWVudFR5cGVzKGNsaWVudFR5cGVzQXJyYXkpOwotICAgIH0KLSAgICAKLSAgICAvLyByZWZyZXNoIHZpZXdlcgotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAKLSAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaW4gdGhpcyB0YWJsZQotICAgIFRhYmxlIHRhYmxlID0gY2xpZW50VHlwZVZpZXdlcl8uZ2V0VGFibGUoKTsKLQlpZiAodGFibGUuZ2V0SXRlbUNvdW50KCkgPiAwKXsKLSAgICAJdGFibGUuc2V0U2VsZWN0aW9uKDApOwotICAgIAl0YWJsZS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotICAgIH0KLSAgICAKLSAgICB0d29FQVJfLnNldFNlbGVjdGlvbihjb250ZXh0LmlzVXNlVHdvRUFScygpKTsKLSAgIH0KLQotICAvKioKLSAgICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2UgaGVscGVyLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIFN0cmluZ1tdIHNlcnZpY2VUeXBlc0FycmF5ID0gbmV3IFN0cmluZ1tzZXJ2aWNlVHlwZXNfLnNpemUoKV07Ci0gICAgc2VydmljZVR5cGVzXy5jb3B5SW50byhzZXJ2aWNlVHlwZXNBcnJheSk7Ci0gICAgY29udGV4dC5zZXRTZXJ2aWNlVHlwZXMoc2VydmljZVR5cGVzQXJyYXkpOyAgICAKLSAgICBTdHJpbmdbXSB0eXBlcyA9IG5ldyBTdHJpbmdbY2xpZW50VHlwZXNfLnNpemUoKV07Ci0gICAgY2xpZW50VHlwZXNfLmNvcHlJbnRvKHR5cGVzKTsKLSAgICBjb250ZXh0LnNldENsaWVudFR5cGVzKHR5cGVzKTsKLSAgICBjb250ZXh0LnNldFVzZVR3b0VBUnModHdvRUFSXy5nZXRTZWxlY3Rpb24oKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICAgIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZVVwXyB8fCBlLndpZGdldCA9PSBzZXJ2aWNlTW92ZURvd25fKQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IHNlcnZpY2VUeXBlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZVVwXyAmJiBpbmRleCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gc2VydmljZVR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgIHNlcnZpY2VUeXBlc18uaW5zZXJ0RWxlbWVudEF0KG9iamVjdCwgaW5kZXgtMSk7Ci0gICAgICAgICAgc2VydmljZVR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZURvd25fICYmIGluZGV4IDwgc2VydmljZVR5cGVzXy5zaXplKCktMSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBzZXJ2aWNlVHlwZXNfLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgc2VydmljZVR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleCsxKTsKLSAgICAgICAgICBzZXJ2aWNlVHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgICB9Ci0gICAgICAgIHNlcnZpY2VUeXBlVmlld2VyXy5nZXRUYWJsZSgpLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGUud2lkZ2V0ID09IG1vdmVVcF8gfHwgZS53aWRnZXQgPT0gbW92ZURvd25fKQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IGNsaWVudFR5cGVWaWV3ZXJfLmdldFRhYmxlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGUud2lkZ2V0ID09IG1vdmVVcF8gJiYgaW5kZXggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGNsaWVudFR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgIGNsaWVudFR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleCAtIDEpOwotICAgICAgICAgIGNsaWVudFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfSBlbHNlIGlmIChlLndpZGdldCA9PSBtb3ZlRG93bl8gJiYgaW5kZXggPCBjbGllbnRUeXBlc18uc2l6ZSgpIC0gMSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBjbGllbnRUeXBlc18ucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICBjbGllbnRUeXBlc18uaW5zZXJ0RWxlbWVudEF0KG9iamVjdCwgaW5kZXggKyAxKTsKLSAgICAgICAgICBjbGllbnRUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2xpZW50VHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgQ2xpZW50VHlwZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0gIHsKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgdmFsdWUpIAotICAgIHsKLSAgICAgIHJldHVybiAoKFZlY3Rvcil2YWx1ZSkudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChWaWV3ZXIsIE9iamVjdCwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgYXJnMCwgT2JqZWN0IGFyZzEsIE9iamVjdCBhcmcyKSAKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDbGllbnRUeXBlTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyBDbGllbnRUeXBlTGFiZWxQcm92aWRlcigpCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKE9iamVjdCkKLSAgICAqLwotICAgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgYXJnMCkgCi0gICAgeyAKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KE9iamVjdCkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IHZhbHVlKSAKLSAgICB7Ci0gICAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKCAoU3RyaW5nKXZhbHVlICk7Ci0gICAgICAKLSAgICAgIHJldHVybiB0ZW1wbGF0ZS5nZXRMYWJlbCgpOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIGNsYXNzIFRhYmxlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHJpdmF0ZSBCdXR0b24gZG93bjsKLSAgICBwcml2YXRlIEJ1dHRvbiB1cDsKLSAgICBwcml2YXRlIFRhYmxlICB0YWJsZTsKLQotICAgIHB1YmxpYyBUYWJsZVNlbGVjdGlvbkxpc3RlbmVyKEJ1dHRvbiB1cCwgQnV0dG9uIGRvd24sIFRhYmxlIG93bmVyVGFibGUpCi0gICAgewotICAgICAgdGhpcy51cCA9IHVwOwotICAgICAgdGhpcy5kb3duID0gZG93bjsKLSAgICAgIHRoaXMudGFibGUgPSBvd25lclRhYmxlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgaW50IGkgPSB0YWJsZS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgaWYgKGkgPT0gdGFibGUuZ2V0SXRlbUNvdW50KCkgLSAxKSBkb3duLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgZWxzZSBpZiAoaSA+IC0xKSBkb3duLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICBpZiAoaSA9PSAwKSB1cC5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgIGVsc2UgaWYgKGkgPiAtMSkgdXAuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1NlcnZlclJ1bnRpbWVQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTlmNTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4CSAgMTUxNzIzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAxMDkgICAxMzA5NjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0Q2hvaWNlczsKLQotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJSdW50aW1lUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSwgTGlzdGVuZXIgCi17Ci0JcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQkKLQkvKiBDT05URVhUX0lEIFNSUEYwMDAxIGZvciBzZXJ2ZXIgcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9TUlBGX1NFUlZFUl9QUkVGID0gcGx1Z2luSWRfICsgIi5TUlBGMDAwMSI7Ci0JcHJpdmF0ZSBDb21ibyBzZXJ2ZXJfOwotCi0JLyogQ09OVEVYVF9JRCBTUlBGMDAwMiBmb3IgcnVudGltZSBwcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIgcnVudGltZSBwcmVmZXJlbmNlIHBhZ2UgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1NSUEZfUlVOVElNRV9QUkVGID0gcGx1Z2luSWRfICsgIi5TUlBGMDAwMiI7Ci0JcHJpdmF0ZSBDb21ibyBydW50aW1lXzsJCi0KLQkvKiBDT05URVhUX0lEIFNSUEYwMDAzIGZvciBKMkVFIHZlcnNpb24gcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0gICAgLyoKLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1NSUEZfSjJFRV9QUkVGID0gcGx1Z2luSWRfICsgIi5TUlBGMDAwMyI7Ci0JcHJpdmF0ZSBDb21ibyBqMmVlVmVyc2lvbl87Ci0gICAgKi8KLQkKLQlTZWxlY3Rpb25MaXN0Q2hvaWNlcyBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotCQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICAgeyB9CQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2UjY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqLwotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIAotCXsKLQkgIFVJVXRpbHMgdWlVdGlscyA9IG5ldyBVSVV0aWxzKHBsdWdpbklkXyk7Ci0JICAKLQkgIENvbXBvc2l0ZSBwYWdlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotCSAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0JICBwYWdlLnNldExheW91dChnbCk7Ci0JICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLQkgIHBhZ2Uuc2V0TGF5b3V0RGF0YShnZCk7Ci0JICAKLQkgIHNlcnZlcl8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhZ2UsQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVCwKLQkJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1JQRl9DT01CT19TRVJWRVIsCi0JCQkJCQkJCQlJTkZPUE9QX1NSUEZfU0VSVkVSX1BSRUYsCi0JCQkJCQkJCQlTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7Ci0JICAKLQkgIHJ1bnRpbWVfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYWdlLENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SVU5USU1FU19MSVNULAotCQkJICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9TUlBGX0NPTUJPX1JVTlRJTUUsCi0JCQkJCQkJCQkgSU5GT1BPUF9TUlBGX1JVTlRJTUVfUFJFRiwKLQkJCQkJCQkJCSBTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7Ci0KLS8qCi0JICBqMmVlVmVyc2lvbl8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhZ2UsQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0oyRUVfVkVSU0lPTiwKLQkJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1JQRl9DT01CT19KMkVFLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1NSUEZfSjJFRV9QUkVGLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7CSAgCi0qLwotCi0JICBpbml0aWFsaXplVmFsdWVzKCk7Ci0JICBzdGFydExpc3RlbmluZygpOwotCSAgYXBwbHlEaWFsb2dGb250KHBhZ2UpOwotCSAgcmV0dXJuIHBhZ2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotCXsKLQkJUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICAgIHNlcnZlclRvUnVudGltZVRvSjJFRV8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJUb1J1bnRpbWVUb0oyRUUoKTsKLQotCi0JCXNldFNlcnZlckl0ZW1zKHNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0TGlzdCgpLmdldExpc3QoKSk7Ci0JCVN0cmluZyBkZWZhdWx0U2VydmVyVGV4dCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCXNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0TGlzdCgpLnNldFNlbGVjdGlvblZhbHVlKGRlZmF1bHRTZXJ2ZXJUZXh0KTsKLQkJc2V0U2VydmVyU2VsZWN0aW9uKGRlZmF1bHRTZXJ2ZXJUZXh0KTsKLQkJCi0JCXNldFJ1bnRpbWVJdGVtcyhzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5nZXRMaXN0KCkpOwotCQlTdHJpbmcgZGVmYXVsdFJ1bnRpbWVUZXh0ID0gY29udGV4dC5nZXRSdW50aW1lSWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFJ1bnRpbWVUZXh0KTsKLQkJc2V0UnVudGltZVNlbGVjdGlvbihkZWZhdWx0UnVudGltZVRleHQpOwkJCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChzZXJ2ZXJfID09IGV2ZW50LndpZGdldCkKLQkJewotCQkJaGFuZGxlU2VydmVyU2VsZWN0ZWQoKTsKLQkJfQotCQllbHNlIGlmIChydW50aW1lXyA9PSBldmVudC53aWRnZXQpCi0JCXsKLQkJCWhhbmRsZVJ1bnRpbWVTZWxlY3RlZCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGhhbmRsZVNlcnZlclNlbGVjdGVkKCkKLQl7Ci0JCXN0b3BMaXN0ZW5pbmcoKTsKLQkJCi0JCVN0cmluZyBzZWxlY3RlZFRleHQgPSBnZXRTZXJ2ZXJTZWxlY3Rpb24oKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoc2VsZWN0ZWRUZXh0KTsKLQkJCi0JCS8vIFRPRE8gKHNlZSBidWcgMTE2MDI1KSAtIFNpbmNlIHRoZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgc2V0IGluIHNlcnZlclRvUnVudGltZVRvSjJFRSBpcyBqdXN0IHRoZSBsaXN0IG9mIAotCQkvLyBhbGwgc2VydmVycyBhbmQgYWxsIHJ1bnRpbWUgKGkuZS4gbm8gdmFsaWRhdGlvbiBjaGVja2luZyBpcyBiZWluZyBkb25lKSwgbm8gbmVlZCB0byB1cGRhdGUgdGhlIHJ1bnRpbWUsCi0JCS8vIGp1c3Qga2VlcCB0aGUgb3JpZ2luYWwgdmFsdWUuCi0JCS8vVXBkYXRlIHRoZSBydW50aW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCQlzZXRSdW50aW1lSXRlbXMoc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0TGlzdCgpKTsKLS8vCQlpZiAoc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0TGlzdCgpLmxlbmd0aCA+IDApCi0vLwkJICBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5zZXRJbmRleCgwKTsKLS8vCQkKLS8vCQlTdHJpbmcgbmV3UnVudGltZVRleHQgPSBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5nZXRTZWxlY3Rpb24oKTsKLS8vCQlpZiAobmV3UnVudGltZVRleHQhPW51bGwgJiYgbmV3UnVudGltZVRleHQubGVuZ3RoKCk+MCkKLS8vCQkJc2V0UnVudGltZVNlbGVjdGlvbihuZXdSdW50aW1lVGV4dCk7CQkKLQkJCi0JCXN0YXJ0TGlzdGVuaW5nKCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBoYW5kbGVSdW50aW1lU2VsZWN0ZWQoKQotCXsKLQkJc3RvcExpc3RlbmluZygpOwotCQkKLQkJU3RyaW5nIHNlbGVjdGVkVGV4dCA9IGdldFJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoc2VsZWN0ZWRUZXh0KTsJCQkJCQkKLQkJc3RhcnRMaXN0ZW5pbmcoKTsJCQotCX0KLQkKLQotICAgIC8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotCXsKLQkgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotCSAgc2V0VG9EZWZhdWx0cygpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VG9EZWZhdWx0cygpCi0JewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQotCQlTdHJpbmcgZGVmYXVsdFNlcnZlclRleHQgPSBjb250ZXh0LmdldERlZmF1bHRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFNlcnZlclRleHQpOwotCQlzZXRTZXJ2ZXJTZWxlY3Rpb24oZGVmYXVsdFNlcnZlclRleHQpOwotCQkKLQkJc2V0UnVudGltZUl0ZW1zKHNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0Q2hvaWNlKCkuZ2V0TGlzdCgpLmdldExpc3QoKSk7Ci0JCVN0cmluZyBkZWZhdWx0UnVudGltZVRleHQgPSBjb250ZXh0LmdldERlZmF1bHRSdW50aW1lSWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFJ1bnRpbWVUZXh0KTsKLQkJc2V0UnVudGltZVNlbGVjdGlvbihkZWZhdWx0UnVudGltZVRleHQpOwotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0JewotCSAgc3RvcmVWYWx1ZXMoKTsKLQkgIHJldHVybiB0cnVlOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0JewotICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICBjb250ZXh0LnNldFNlcnZlckZhY3RvcnlJZChnZXRTZXJ2ZXJTZWxlY3Rpb24oKSk7Ci0gICAgICBjb250ZXh0LnNldFJ1bnRpbWVJZChnZXRSdW50aW1lU2VsZWN0aW9uKCkpOyAgICAgIAotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotCXsKLQkgIHBlcmZvcm1PaygpOwotCX0KLQkKLSAgCQotCXByaXZhdGUgdm9pZCBzdGFydExpc3RlbmluZygpCi0JewotCSAgc2VydmVyXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLHRoaXMpOwotCSAgcnVudGltZV8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbix0aGlzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RvcExpc3RlbmluZygpCi0JewotCSAgc2VydmVyXy5yZW1vdmVMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLQkgIHJ1bnRpbWVfLnJlbW92ZUxpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRTZXJ2ZXJJdGVtcyhTdHJpbmdbXSBmYWN0b3J5SWRzKQotCXsKLQkgIAotCSAgaWYgKGZhY3RvcnlJZHMgIT0gbnVsbCkKLQkgIHsKLQkgICAgQXJyYXlMaXN0IHNlcnZlckxhYmVsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCSAgZm9yIChpbnQgaT0wO2k8ZmFjdG9yeUlkcy5sZW5ndGg7aSsrKQotCQkgIHsKLQkJCSAgLy9TdHJpbmcgdGhpc1NlcnZlckxhYmVsID0gV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJMYWJlbChmYWN0b3J5SWRzW2ldKTsKLSAgICAgICAgU3RyaW5nIHRoaXNTZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChmYWN0b3J5SWRzW2ldKTsKLQkJCSAgaWYgKHRoaXNTZXJ2ZXJMYWJlbCE9bnVsbCAmJiB0aGlzU2VydmVyTGFiZWwubGVuZ3RoKCk+MCkKLQkJCSAgewotCQkJICAgIHNlcnZlckxhYmVsc0xpc3QuYWRkKHRoaXNTZXJ2ZXJMYWJlbCk7Ci0JCQkgIH0KLQkJCQotCQkgIH0KLQkJICBTdHJpbmdbXSBzZXJ2ZXJMYWJlbHMgPSBjb252ZXJ0VG9TdHJpbmdBcnJheShzZXJ2ZXJMYWJlbHNMaXN0LnRvQXJyYXkoKSk7IAotCQkgIHNlcnZlcl8uc2V0SXRlbXMoc2VydmVyTGFiZWxzKTsKLQkgIH0KLQkJCi0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRSdW50aW1lSXRlbXMoU3RyaW5nW10gaWRzKQotCXsKLQkgIGlmIChpZHMgIT0gbnVsbCkKLQkgIHsKLQkJU3RyaW5nW10gcnVudGltZUxhYmVscyA9IG5ldyBTdHJpbmdbaWRzLmxlbmd0aF07Ci0JCWZvciAoaW50IGk9MDtpPGlkcy5sZW5ndGg7aSsrKQotCQl7Ci0JCSAgLy9ydW50aW1lTGFiZWxzW2ldID0gV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRSdW50aW1lTGFiZWwoaWRzW2ldKTsKLSAgICAgIHJ1bnRpbWVMYWJlbHNbaV0gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKGlkc1tpXSk7Ci0JCX0KLQotCQkvL3NvcnQgdGhlIGxhYmVscyAoYnVnIDE1MTcyMykKLQkJQXJyYXlzLnNvcnQocnVudGltZUxhYmVscyk7Ci0JCXJ1bnRpbWVfLnNldEl0ZW1zKHJ1bnRpbWVMYWJlbHMpOwotCSAgfQotCQkKLQl9Ci0JCi0gICAgLyoKLSAgICBwcml2YXRlIHZvaWQgc2V0SjJFRUl0ZW1zKFN0cmluZ1tdIHZlcnNpb25zKQotICAgIHsKLSAgICAgIGlmICh2ZXJzaW9ucyAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSBqMmVlTGFiZWxzID0gbmV3IFN0cmluZ1t2ZXJzaW9ucy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlcnNpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGxhYmVsID0gSjJFRVV0aWxzLmdldExhYmVsRnJvbUoyRUVWZXJzaW9uKHZlcnNpb25zW2ldKTsKLSAgICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCAmJiBsYWJlbC5sZW5ndGgoKT4wKQotICAgICAgICAgICAgajJlZUxhYmVsc1tpXSA9IGxhYmVsOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGoyZWVMYWJlbHNbaV0gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfTkE7Ci0gICAgICAgIH0KLSAgICAgICAgajJlZVZlcnNpb25fLnNldEl0ZW1zKGoyZWVMYWJlbHMpOwotICAgICAgICAKLSAgICAgICAgLy9EaXNhYmxlIHRoZSBjb21ibyBpZiBpdCBoYXMgbm8gaXRlbXMuCi0gICAgICAgIGlmIChqMmVlTGFiZWxzLmxlbmd0aCA+IDApCi0gICAgICAgICAgajJlZVZlcnNpb25fLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBqMmVlVmVyc2lvbl8uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICB9Ci0gICAgICAgIAotICAgIH0KLSAgICAqLwotCQotCXByaXZhdGUgU3RyaW5nIGdldFNlcnZlclNlbGVjdGlvbigpCi0JewotCSAgU3RyaW5nIHNlcnZlckxhYmVsID0gc2VydmVyXy5nZXRUZXh0KCk7Ci0JICAvL3JldHVybiBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJMYWJlbCk7Ci0gICAgcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJMYWJlbCk7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldFJ1bnRpbWVTZWxlY3Rpb24oKQotCXsKLSAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBydW50aW1lXy5nZXRUZXh0KCk7Ci0JICAvL3JldHVybiBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFJ1bnRpbWVJZChydW50aW1lTGFiZWwpOwotICAgICAgcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVJZChydW50aW1lTGFiZWwpOwotCX0KLQkKLSAgICAvKgotCXByaXZhdGUgU3RyaW5nIGdldEoyRUVTZWxlY3Rpb24oKQotCXsKLQkgIFN0cmluZyBqMmVlTGFiZWwgPSBqMmVlVmVyc2lvbl8uZ2V0VGV4dCgpOwotCSAgcmV0dXJuIEoyRUVVdGlscy5nZXRKMkVFVmVyc2lvbkZyb21MYWJlbChqMmVlTGFiZWwpOwkJCi0JfQotICAgICovCi0JCi0JcHJpdmF0ZSB2b2lkIHNldFNlcnZlclNlbGVjdGlvbihTdHJpbmcgZmFjdG9yeUlkKQotCXsKLQkJLy9TdHJpbmcgbGFiZWwgPSBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFNlcnZlckxhYmVsKGZhY3RvcnlJZCk7Ci0gICAgU3RyaW5nIGxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKGZhY3RvcnlJZCk7Ci0JCXNldFNlbGVjdGlvbihzZXJ2ZXJfLGxhYmVsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFJ1bnRpbWVTZWxlY3Rpb24oU3RyaW5nIGlkKQotCXsKLQkJLy9TdHJpbmcgbGFiZWwgPSBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFJ1bnRpbWVMYWJlbChpZCk7Ci0gICAgU3RyaW5nIGxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChpZCk7Ci0JCXNldFNlbGVjdGlvbihydW50aW1lXyxsYWJlbCk7CQkKLQl9Ci0JCi0gICAgLyoKLQlwcml2YXRlIHZvaWQgc2V0SjJFRVNlbGVjdGlvbihTdHJpbmcgdmVyc2lvbikKLQl7Ci0JICBTdHJpbmcgbGFiZWwgPSBKMkVFVXRpbHMuZ2V0TGFiZWxGcm9tSjJFRVZlcnNpb24odmVyc2lvbik7Ci0gICAgICBzZXRTZWxlY3Rpb24oajJlZVZlcnNpb25fLCBsYWJlbCk7Ci0JfQotICAgICovCi0JCi0JcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvbihDb21ibyBjb21ibywgU3RyaW5nIHMpCi0JewotCQlTdHJpbmdbXSBpdGVtcyA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0JCWZvciAoaW50IGk9MDsgaTxpdGVtcy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKGl0ZW1zW2ldLmVxdWFscyhzKSkKLQkJCXsKLQkJCQljb21iby5zZWxlY3QoaSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nW10gY29udmVydFRvU3RyaW5nQXJyYXkoT2JqZWN0W10gYSkKLQl7Ci0JICBpZiAoYT09bnVsbCkgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0JICAJCi0JICBpbnQgbGVuZ3RoID0gYS5sZW5ndGg7Ci0JICBTdHJpbmdbXSBzYSA9IG5ldyBTdHJpbmdbbGVuZ3RoXTsKLQkgIGZvciAoaW50IGk9MDsgaTxsZW5ndGg7IGkrKykKLQkgIHsKLQkgIAlPYmplY3Qgb2JqID0gYVtpXTsKLQkgIAlpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKQotCSAgCXsKLQkgICAgICBzYVtpXSA9IChTdHJpbmcpb2JqOwotCSAgCX0KLQkgIH0KLQkgIHJldHVybiBzYTsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9UcmFuc2llbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1RyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwMjczMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1RyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyNyAgIDEyNDM5MiByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotCi1wdWJsaWMgY2xhc3MgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCBpbXBsZW1lbnRzIFByb2plY3RUb3BvbG9neUNvbnRleHQKLXsKLSBwcml2YXRlIFN0cmluZ1tdIHNlcnZpY2VUeXBlczsKLSBwcml2YXRlIFN0cmluZ1tdIGRlZmF1bHRTZXJ2aWNlVHlwZXM7Ci0gCi0gcHJpdmF0ZSBTdHJpbmdbXSBjbGllbnRUeXBlczsKLSBwcml2YXRlIFN0cmluZ1tdIGRlZmF1bHRDbGllbnRUeXBlczsKLSAKLSBwcml2YXRlIGJvb2xlYW4gdHdvRUFSczsKLSAKLSBwdWJsaWMgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCAoKSB7fQotCi0gcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVzKFN0cmluZ1tdIHNlcnZpY2VUeXBlcykKLSB7Ci0gICB0aGlzLnNlcnZpY2VUeXBlcyA9IHNlcnZpY2VUeXBlczsKLSB9Ci0gcHVibGljIFN0cmluZ1tdIGdldFNlcnZpY2VUeXBlcygpCi0gewotICAgcmV0dXJuIHNlcnZpY2VUeXBlczsKLSB9Ci0gCi0gcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZXMoU3RyaW5nW10gY2xpZW50VHlwZXMpCi0gewotICAgdGhpcy5jbGllbnRUeXBlcyA9IGNsaWVudFR5cGVzOwotIH0KLSBwdWJsaWMgU3RyaW5nW10gZ2V0Q2xpZW50VHlwZXMoKQotIHsKLSAgIHJldHVybiBjbGllbnRUeXBlczsKLSB9Ci0KLSBwdWJsaWMgdm9pZCBzZXRVc2VUd29FQVJzKGJvb2xlYW4gdXNlKQotIHsKLSAgIHRoaXMudHdvRUFScyA9IHVzZTsKLSB9Ci0gcHVibGljIGJvb2xlYW4gaXNVc2VUd29FQVJzKCkKLSB7Ci0gICByZXR1cm4gdHdvRUFSczsKLSB9Ci0KLSBwdWJsaWMgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBjb3B5KCkgewotIAlUcmFuc2llbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0U2VydmljZVR5cGVzKGdldFNlcnZpY2VUeXBlcygpKTsKLSAgICBjb250ZXh0LnNldERlZmF1bHRTZXJ2aWNlVHlwZXMoZ2V0RGVmYXVsdFNlcnZpY2VUeXBlcygpKTsKLQljb250ZXh0LnNldENsaWVudFR5cGVzKGdldENsaWVudFR5cGVzKCkpOwotICAgIGNvbnRleHQuc2V0RGVmYXVsdENsaWVudFR5cGVzKGdldERlZmF1bHRDbGllbnRUeXBlcygpKTsKLQljb250ZXh0LnNldFVzZVR3b0VBUnMoaXNVc2VUd29FQVJzKCkpOwotCXJldHVybiBjb250ZXh0OwotIH0KLQotIAotcHVibGljIHZvaWQgc2V0RGVmYXVsdFNlcnZpY2VUeXBlcyhTdHJpbmdbXSBkZWZhdWx0U2VydmljZVR5cGVzKQotewotICB0aGlzLmRlZmF1bHRTZXJ2aWNlVHlwZXMgPSBkZWZhdWx0U2VydmljZVR5cGVzOwotfQotCi1wdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdFNlcnZpY2VUeXBlcygpCi17Ci0gIHJldHVybiBkZWZhdWx0U2VydmljZVR5cGVzOwotCi19Ci0KLQotcHVibGljIHZvaWQgc2V0RGVmYXVsdENsaWVudFR5cGVzKFN0cmluZ1tdIGRlZmF1bHRDbGllbnRUeXBlcykKLXsKLSAgdGhpcy5kZWZhdWx0Q2xpZW50VHlwZXMgPSBkZWZhdWx0Q2xpZW50VHlwZXM7Ci19Ci0KLXB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0Q2xpZW50VHlwZXMoKQotewotICByZXR1cm4gZGVmYXVsdENsaWVudFR5cGVzOwotCi19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlbGVjdGlvbi9TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZWxlY3Rpb24vU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM5N2YyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlbGVjdGlvbi9TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIAotewotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIAotICB7Ci0JSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5TZWxlY3Rpb24gID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlOwotCVNlbGVjdGlvbiAgICAgICAgICAgIG91dFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTsKLQkKLQlpZiAoaW5TZWxlY3Rpb24gIT0gbnVsbCkKLQl7Ci0JCW91dFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oIGluU2VsZWN0aW9uLnRvQXJyYXkoKSApOwkKLQl9Ci0JCi0JcmV0dXJuIG91dFNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRDbGllbnRXaWRnZXRDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRDbGllbnRXaWRnZXRDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTVhNzZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydENsaWVudFdpZGdldENvbnRyaWJ1dG9yIGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIHByaXZhdGUgSVNlcnZlciAgICAgIHNlcnZlcl87Ci0JICAKLSAgcHVibGljIFN0YXJ0Q2xpZW50V2lkZ2V0Q29udHJpYnV0b3IoIElTZXJ2ZXIgc2VydmVyICkKLSAgewotCXNlcnZlcl8gPSBzZXJ2ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSAKLSAgewotCXJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NUQVJUX1NFUlZFUjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIAotICB7Ci0JcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIAotICB7Ci0JcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NUQVJUX1NFUlZFUjsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgCi0gIHsKLQlyZXR1cm4gbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JICAgICAgIHsKLQkJCSBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkgCi0JCQkgewotCQkJCXJldHVybiBuZXcgU3RhcnRTZXJ2ZXJXaWRnZXQoIHNlcnZlcl8gKTsKLSAJCQkgfQotCSAgICAgICB9OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlcnZlci9TdGFydENsaWVudFdpZGdldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U1OTcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnREZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi1wdWJsaWMgY2xhc3MgU3RhcnRDbGllbnRXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IAotewotICBwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdlYnNlcnZpY2VDbGllbnRfOwotICBwcml2YXRlIElDb250ZXh0IGNvbnRleHRfOwotICAKLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKSAKLSAgewotICAgIElTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLSAgICAKLSAgICBpZiggd2Vic2VydmljZUNsaWVudF8gIT0gbnVsbCAgJiYgY29udGV4dF8uZ2V0UnVuKCkpCi0gICAgewotICAgICAgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHdlYnNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpICk7Ci0gICAgfQotICAgIAotICAgIGlmKCBzZXJ2ZXIgIT0gbnVsbCAmJiBzZXJ2ZXIuZ2V0U2VydmVyU3RhdGUoKSAhPSBJU2VydmVyLlNUQVRFX1NUQVJURUQgKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhcnRDbGllbnRXaWRnZXRDb250cmlidXRvciggc2VydmVyICk7Ci0gICAgfQotICAgIAotCXJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldE5leHROYW1lZFdpZGdldCggSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0Q29udHJpYnV0b3IpIAotICB7Ci0JcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0gIHsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgU3RhcnRDbGllbnRXaWRnZXRGYWN0b3J5LmNsYXNzICk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFN0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5jbGFzcyApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZUNsaWVudCB3ZWJzZXJ2aWNlQ2xpZW50ICkKLSAgewotICAgIHdlYnNlcnZpY2VDbGllbnRfID0gd2Vic2VydmljZUNsaWVudDsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0ICggSUNvbnRleHQgY29udGV4dCApCi0gIHsKLSAgICBjb250ZXh0XyA9IGNvbnRleHQ7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNjJmZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlcnZlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLklKb2JDaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5JSm9iTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iQ2hhbmdlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuUHJvZ3Jlc3NNb25pdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLlN0YXJ0U2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGNsYXNzIFN0YXJ0U2VydmVyV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIAotewotICBwcml2YXRlIElTZXJ2ZXIgICAgICAgICAgICAgc2VydmVyXzsKLSAgcHJpdmF0ZSBJU3RhdHVzICAgICAgICAgICAgICBzdGF0dXNfOwotICBwcml2YXRlIExpc3RlbmVyICAgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIEJ1dHRvbiAgICAgICAgICAgICAgYnV0dG9uXzsKLSAgcHJpdmF0ZSBKb2JDaGFuZ2VBZGFwdGVyICAgIGpvYkNoYW5nZUFkYXB0ZXJfOwotICBwcml2YXRlIFRleHQgICAgICAgICAgICAgICAgc2VydmVyU3RhdGVUZXh0XzsKLSAgcHJpdmF0ZSBQcm9ncmVzc01vbml0b3JQYXJ0IHByb2dyZXNzTW9uaXRvcl87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICBwbHVnaW5JZF87Ci0gIHByaXZhdGUgQ29tcG9zaXRlICAgICAgICAgICBidXR0b25Hcm91cF87Ci0gICAgCi0gIC8qQ09OVEVYVF9JRCBTU1dQMDAwMSBTdGFydCB0aGUgc2VydmVyIGJ1dHRvbi4gKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9TU1dQX1NFUlZFUl9CVVRUT04gPSAiU1NXUDAwMDEiOwotICAKLSAgcHVibGljIFN0YXJ0U2VydmVyV2lkZ2V0KCBJU2VydmVyIHNlcnZlciApCi0gIHsKLQlwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQkJCi0gICAgc2VydmVyXyA9IHNlcnZlcjsKLSAgICAKLSAgICBqb2JDaGFuZ2VBZGFwdGVyXyA9IG5ldyBKb2JDaGFuZ2VBZGFwdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZG9uZShmaW5hbCBJSm9iQ2hhbmdlRXZlbnQgZXZlbnQpIAotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgCQkJICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSAKLQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvZ3Jlc3NNb25pdG9yXy5pc0Rpc3Bvc2VkKCkgKQotCSAgICAgICAgCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlcnZlclN0YXRlKCk7CQotCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NNb25pdG9yXy5kb25lKCk7Ci0JCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcklmUmVxdWlyZWQoIChTdGFydFNlcnZlckpvYilldmVudC5nZXRKb2IoKSApOwotCSAgICAgICAgCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCQkJICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gIH0KLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKSAKLSAgewotCXN0YXR1c0xpc3RlbmVyXyA9IHN0YXR1c0xpc3RlbmVyOwotCQotCVVJVXRpbHMgICAgICB1aVV0aWxzICAgICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsKLQlDb21wb3NpdGUgICAgZ3JvdXAgICAgICAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAxICk7Ci0JCi0JVGV4dCAgICAgICAgIHRleHQxICAgICAgICA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQl0ZXh0MS5zZXRUZXh0KCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQxLCBuZXcgU3RyaW5nW117IHNlcnZlcl8uZ2V0TmFtZSgpIH0gKSk7Ci0JCi0JVGV4dCAgICAgICAgIHRleHQyICAgICAgICA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQl0ZXh0Mi5zZXRUZXh0KCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQyLCBuZXcgU3RyaW5nW117IHNlcnZlcl8uZ2V0TmFtZSgpIH0gKSk7Ci0JCi0JVGV4dCAgICAgICAgIHRleHQzICAgICAgICA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQl0ZXh0My5zZXRUZXh0KCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQzLCBuZXcgU3RyaW5nW117IHNlcnZlcl8uZ2V0TmFtZSgpIH0gKSk7Ci0JCi0JVGV4dCAgICAgICAgIHRleHQ0ICAgICAgICA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQl0ZXh0NC5zZXRUZXh0KCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQ0LCBuZXcgU3RyaW5nW117IHNlcnZlcl8uZ2V0TmFtZSgpIH0gKSk7IAotCQotCWJ1dHRvbkdyb3VwXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBncm91cCwgMiwtMSwgMCApOwotCXNlcnZlclN0YXRlVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGJ1dHRvbkdyb3VwXywgbnVsbCwgbnVsbCwgbnVsbCwgU1dULlJFQURfT05MWSApOwotCXNlcnZlclN0YXRlVGV4dF8uc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCkgKTsKLQkJCi0JYnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggYnV0dG9uR3JvdXBfLCAKLQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVEFSVF9TRVJWRVJfQlVUVE9OLAotCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1RBUlRfU0VSVkVSX0JVVFRPTiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1NTV1BfU0VSVkVSX0JVVFRPTiApOwotCQotCWJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJCSAgICAgICAgICAgICAgICAgICAgICB7Ci0JCQkJCQkJCQkgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotCQkJICAgICAgICAgICAgICAgICAgICAgICAJICAgc2VydmVyU3RhdGVUZXh0Xy5zZXRUZXh0KCBnZXRTdGF0ZU1lc3NhZ2UoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5URVhUX1NFUlZFUl9TVEFUVVMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5URVhUX1NFUlZFUl9TVEFSVElORyApICk7Ci0JCQkgICAgICAgICAgICAgICAgICAgIAkgICBwcm9ncmVzc01vbml0b3JfLmJlZ2luVGFzayggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfTVNHLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBUlRJTkcgKSwgSVByb2dyZXNzTW9uaXRvci5VTktOT1dOICk7Ci0JCQkgICAgICAgICAgICAgICAgICAgIAkgICBidXR0b25fLnNldEVuYWJsZWQoIGZhbHNlICk7Ci0JCQkgICAgICAgICAgICAgICAgICAgIAkgICBidXR0b25Hcm91cF8ucGFjaygpOwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTZXJ2ZXJKb2IoKTsKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkgICAgICAgICAgICAgICAgICAgICAgfSApOwkKLQkKLQlwcm9ncmVzc01vbml0b3JfID0gbmV3IFByb2dyZXNzTW9uaXRvclBhcnQoIGdyb3VwLCBuZXcgR3JpZExheW91dCgpICk7Ci0JcHJvZ3Jlc3NNb25pdG9yXy5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApKTsKLQkKLQlzZXRTZXJ2ZXJTdGF0ZSgpOwotCXJldHVybiB0aGlzOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkgCi0gIHsKLQlyZXR1cm4gc3RhdHVzXzsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldFNlcnZlclN0YXRlKCkKLSAgewotCWludCBzdGF0ZSA9IHNlcnZlcl8uZ2V0U2VydmVyU3RhdGUoKTsKLQkKLQlzd2l0Y2goIHN0YXRlICkKLQl7Ci0JICBjYXNlIElTZXJ2ZXIuU1RBVEVfU1RBUlRFRDoKLQkgIHsKLQkJc3RhdHVzXyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCWJ1dHRvbl8uc2V0RW5hYmxlZCggZmFsc2UgKTsKLQkJc2VydmVyU3RhdGVUZXh0Xy5zZXRUZXh0KCBnZXRTdGF0ZU1lc3NhZ2UoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5URVhUX1NFUlZFUl9TVEFUVVMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5URVhUX1NFUlZFUl9TVEFSVEVEICkgKTsKLQkJCi0JICAgIGJyZWFrOwkgIAotCSAgfQotCSAgCi0JICBjYXNlIElTZXJ2ZXIuU1RBVEVfU1RBUlRJTkc6Ci0JICB7Ci0JCXN0YXR1c18gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLQkJYnV0dG9uXy5zZXRFbmFibGVkKCBmYWxzZSApOyAgCi0JCXNlcnZlclN0YXRlVGV4dF8uc2V0VGV4dCggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBVFVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBUlRJTkcgKSApOwotCQlwcm9ncmVzc01vbml0b3JfLmJlZ2luVGFzayggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfTVNHLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBUlRJTkcgKSwgSVByb2dyZXNzTW9uaXRvci5VTktOT1dOICk7Ci0JCQotCQkvLyBUaGUgc2VydmVyIGlzIHN0aWxsIHN0YXJ0aW5nIHNvIHdlIG5lZWQgdG8gcmVjb25uZWN0IHRvIHRoZSBqb2IKLQkJLy8gdGhhdCBpcyBzdGFydGluZyBpdC4KLQkJc3RhcnRTZXJ2ZXJKb2IoKTsKLQkgICAgYnJlYWs7CSAgCi0JICB9Ci0JICAKLQkgIGRlZmF1bHQ6Ci0JICB7Ci0JCXN0YXR1c18gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLSAgICAgICAgYnV0dG9uXy5zZXRFbmFibGVkKCB0cnVlICk7Ci0JCXNlcnZlclN0YXRlVGV4dF8uc2V0VGV4dCggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBVFVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RPUFBFRCApICk7Ci0JCWJyZWFrOyAgCi0JICB9Ci0JfTsKLQkKLQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQoIG51bGwgKTsKLQlidXR0b25Hcm91cF8ucGFjaygpOwotICB9ICAKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFN0YXRlTWVzc2FnZSggU3RyaW5nIG1haW5LZXksIFN0cmluZyBzdWJLZXkgKQotICB7Ci0JcmV0dXJuIE5MUy5iaW5kKCBtYWluS2V5LCBuZXcgU3RyaW5nW117IHN1YktleSB9ICk7Ci0gIH0KLSAgCi0gIC8vIENvbm5lY3QgdG8gYW4gZXhpc3Rpbmcgc2VydmVyIHRocmVhZCBvdGhlcndpc2Ugc3RhcnQgYSBuZXcgb25lLgotICBwcml2YXRlIHZvaWQgc3RhcnRTZXJ2ZXJKb2IoKQotICB7Ci0JSUpvYk1hbmFnZXIgICAgam9iTWFuYWdlciAgICAgPSBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCk7Ci0JSm9iW10gICAgICAgICAgam9icyAgICAgICAgICAgPSBqb2JNYW5hZ2VyLmZpbmQoIFN0YXJ0U2VydmVyRmFtaWx5ICk7Ci0JU3RhcnRTZXJ2ZXJKb2Igc3RhcnRTZXJ2ZXJKb2IgPSBudWxsOwotCQotCS8vIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIGpvYiBzdGFydGluZyBmb3IgZGlmZmVyZW50IHNlcnZlcnMuCi0JLy8gVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIG9uZSBmb3Igb3VyIHNlcnZlciBpZiBpdCBpcyBhdmFpbGFibGUuCi0JZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGpvYnMubGVuZ3RoOyBpbmRleCsrICkKLQl7Ci0JICBTdGFydFNlcnZlckpvYiBqb2JGb3VuZCA9IChTdGFydFNlcnZlckpvYilqb2JzW2luZGV4XTsKLQkgIAotCSAgaWYoIGpvYkZvdW5kLmdldFNlcnZlcigpID09IHNlcnZlcl8gKQotCSAgewotCSAgICBzdGFydFNlcnZlckpvYiA9IGpvYkZvdW5kOwotCSAgICBicmVhazsKLQkgIH0KLQl9Ci0JCi0JaWYoIHN0YXJ0U2VydmVySm9iICE9IG51bGwgKQotCXsKLQkgIHN5bmNocm9uaXplZCggU3RhcnRTZXJ2ZXJGYW1pbHkgKSAKLQkgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBzdGFydFNlcnZlckpvYi5nZXRTdGF0dXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGFyZSB1c2luZyBzdGF0dXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBqb2IgaGFzIGNvbXBsZXRlZCBvciBub3QuCi0gICAgICAgIC8vIE5vcm1hbGx5LCB3ZSB3b3VsZCBub3QgZ2V0IGhlcmUgaWYgdGhlIGpvYiBoYWQgYWxyZWFkeSBjb21wbGV0ZWQsCi0gICAgICAgIC8vIGJ1dCB0aGVyZSBpcyBhIHNsaW0gd2luZG93IHdoZXJlIHRoZSBqb2IgbWFuYWdlciBnaXZlcyB1cyB0aGUgam9iCi0gICAgICAgIC8vIGFuZCB0aGVuIGl0IGltbWVkaWF0ZWx5IGNvbXBsZXRlcy4KLSAgICAgICAgaWYoIHN0YXR1cyA9PSBudWxsICkKLSAgICAgICAgeyAgICAgICAgCi0gICAgICAgICAgLy8gVGhlIGpvYiBoYWQgbm90IGNvbXBsZXRlZCB5ZXQgc28gd2Ugd2lsbCBhZGQgYSBqb2IgY2hhbmdlIGxpc3RlbmVyLgotICAgICAgICAgIC8vIFdlIGFyZSBhZGRpbmcgdGhlIGpvYiBsaXN0ZW5lciBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBhc3N1bWUKLSAgICAgICAgICAvLyB0aGF0IHRoaXMgaW5zdGFuY2Ugb2YgdGhpcyB3aWRnZXQgaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGluc3RhbmNlLgotICAgICAgICAgIC8vIElmIHN0YXJ0U2VydmVySm9iIGFscmVhZHkgaGFzICJqb2JDaGFuZ2VBZGFwdGVyXyIgYWRkZWQgdG8gaXQgdGhpcwotICAgICAgICAgIC8vIG1ldGhvZCBjYWxsIHdpbGwgbm90IGhhdmUgYW4gZWZmZWN0LihXaGljaCBpcyB3aGF0IHdlIHdhbnQuKQotICAgICAgICAgIHN0YXJ0U2VydmVySm9iLmFkZEpvYkNoYW5nZUxpc3RlbmVyKCBqb2JDaGFuZ2VBZGFwdGVyXyApOyAKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBOb3RlOiB0aGlzIGpvYiB3YXMgcmVwb3J0aW5nIHByb2dyZXNzIHRvIGRpZmZlcmVudCBwcm9ncmVzc01vbml0b3JfCi0gICAgICAgICAgLy8gICAgICAgY29udHJvbC4gIFdlIG5lZWQgdG8gdGVsbCB0aGUgam9iIHRoYXQgaXQgc2hvdWxkIHJlcG9ydCBwcm9ncmVzcwotICAgICAgICAgIC8vICAgICAgIHRvIG91ciBuZXcgcHJvZ3Jlc3NNb25pdG9yXyBjb250cm9sIG9uIHRoaXMgd2l6YXJkIHBhZ2UuCi0gICAgICAgICAgUHJvZ3Jlc3NNb25pdG9yV3JhcHBlciBtb25pdG9yID0gKFByb2dyZXNzTW9uaXRvcldyYXBwZXIpc3RhcnRTZXJ2ZXJKb2IuZ2V0TW9uaXRvcigpOwotICAgICAgICAgIG1vbml0b3Iuc2V0TW9uaXRvciggcHJvZ3Jlc3NNb25pdG9yXyApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIFRoZSBqb2IgY29tcGxldGVkIGJlZm9yZSB3ZSBoYWQgYSBjaGFuY2UgdG8gYWRkIHRoZSBqb2IgY2hhbmdlIGxpc3RlbmVyCi0gICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB3aWxsIGp1c3QgY2FsbCBqb2JDaGFuZ2VBZGFwdGVyXyBkaXJlY3RseSB0byBub3RpZnkKLSAgICAgICAgICAvLyB0aGUgVUkgdGhhdCB0aGUgam9iIGhhcyBjb21wbGV0ZWQuCi0gICAgICAgICAgam9iQ2hhbmdlQWRhcHRlcl8uZG9uZSggbnVsbCApOwotICAgICAgICB9Ci0JICB9Ci0JfQotCWVsc2UKLQl7Ci0JICBzdGFydFNlcnZlckpvYiA9IG5ldyBTdGFydFNlcnZlckpvYigpOwkKLQkgIHN0YXJ0U2VydmVySm9iLmFkZEpvYkNoYW5nZUxpc3RlbmVyKCBqb2JDaGFuZ2VBZGFwdGVyXyApOwotCSAgc3RhcnRTZXJ2ZXJKb2Iuc2NoZWR1bGUoKTsKLQl9Ci0gIH0KLSAgICAgCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcklmUmVxdWlyZWQoIFN0YXJ0U2VydmVySm9iIHNlcnZlckpvYiApCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gc2VydmVySm9iLmdldFN0YXR1cygpOwotCQotCSAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUiApCi0JICB7Ci0JICAgIFNoZWxsICAgICAgICAgICAgICAgIHNoZWxsICAgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0gICAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCBzaGVsbCApOwotICAgICAgCi0gICAgICBoYW5kbGVyLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkgIH0KLSAgfQotICAKLSAgZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nICBTdGFydFNlcnZlckZhbWlseSA9ICJTdGFydFNlcnZlckZhbWlseSI7Ci0gIAotICAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc3RhcnQgdXAgdGhlIHNlcnZlciBpbiBhbiBFY2xpcHNlIGpvYi4KLSAgcHJpdmF0ZSBjbGFzcyBTdGFydFNlcnZlckpvYiBleHRlbmRzIEpvYgotICB7Ci0JICBwcml2YXRlIElTdGF0dXMgICAgICAgICAgICAgICAgc3RhdHVzXyA9IG51bGw7Ci0JICBwcml2YXRlIFByb2dyZXNzTW9uaXRvcldyYXBwZXIgZW52TW9uaXRvcl87Ci0JCi0JICBwdWJsaWMgU3RhcnRTZXJ2ZXJKb2IoKQotCSAgewotCSAgICBzdXBlciggIlN0YXJ0U2VydmVySm9iIiApOwotCSAgCi0JICAgIGVudk1vbml0b3JfID0gbmV3IFByb2dyZXNzTW9uaXRvcldyYXBwZXIoIHByb2dyZXNzTW9uaXRvcl8gKTsKLQkgIH0KLQkKLQkgIHB1YmxpYyBJU2VydmVyIGdldFNlcnZlcigpCi0JICB7Ci0JICAgIHJldHVybiBzZXJ2ZXJfOwkKLQkgIH0KLQkKLQkgIHB1YmxpYyBQcm9ncmVzc01vbml0b3JXcmFwcGVyIGdldE1vbml0b3IoKQotCSAgewotCSAgICByZXR1cm4gZW52TW9uaXRvcl87CQotCSAgfQotCQotCSAgcHVibGljIGJvb2xlYW4gYmVsb25nc1RvKE9iamVjdCBmYW1pbHkpIAotCSAgewotCSAgICByZXR1cm4gZmFtaWx5ID09IFN0YXJ0U2VydmVyRmFtaWx5OwotCSAgfQotCi0JICBwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSAKLQkgIHsKLQkgICAgQmFzZVN0YXR1c0hhbmRsZXIgICAgICAgIGhhbmRsZXIgICAgICAgICA9IG5ldyBCYXNlU3RhdHVzSGFuZGxlcigpOwotCSAgICBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotCSAgICBFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgZW52aXJvbm1lbnQgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCxyZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIgKTsKLQkgICAgU3RhcnRTZXJ2ZXJDb21tYW5kICAgICAgIHNlcnZlckNvbW1hbmQgICA9IG5ldyBTdGFydFNlcnZlckNvbW1hbmQoIGZhbHNlICk7Ci0JICAgIAotCSAgICBzZXJ2ZXJDb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQoIHNlcnZlcl8uZ2V0SWQoKSApOwotICAgICAgc2VydmVyQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnQgKTsKLQkgICAgCi0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc2V0U3RhdHVzKCBzZXJ2ZXJDb21tYW5kLmV4ZWN1dGUoIGVudk1vbml0b3JfLCBudWxsICkgKTsJCQotCSAgICB9Ci0JICAgIGNhdGNoKCBUaHJvd2FibGUgZXhjICkKLQkgICAgewotCQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAgIHNldFN0YXR1cyggU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIGV4YyApICk7Ci0JICAgIH0KLQkgIAkKLQkgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0JCi0JICAvLyBDYWxscyB0byB0aGlzIG1ldGhvZCBuZWVkIHRvIGZpcnN0IHN5bmNocm9uaXplIG9uIHRoZQotCSAgLy8gU3RhcnRTZXJ2ZXJGYW1pbHkgb2JqZWN0LgotCSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLQkgIHsKLQkgICAgcmV0dXJuIHN0YXR1c187Ci0JICB9Ci0JCi0JICBwcml2YXRlIHZvaWQgc2V0U3RhdHVzKCBJU3RhdHVzIHN0YXR1cyApCi0JICB7Ci0JICAgIHN5bmNocm9uaXplZCggU3RhcnRTZXJ2ZXJGYW1pbHkgKSAKLQkgICAgewotICAgICAgICBzdGF0dXNfID0gc3RhdHVzOwotCSAgICB9Ci0JICB9Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSBjbGFzcyBQcm9ncmVzc01vbml0b3JXcmFwcGVyIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvcgotICB7Ci0gICAgcHJpdmF0ZSBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3JfID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLSAgCSAgCQotICAgIHB1YmxpYyBQcm9ncmVzc01vbml0b3JXcmFwcGVyKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICAgIHsKLSAgICAgIG1vbml0b3JfID0gbW9uaXRvcjsgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICAgIHsKLSAgICAgIG1vbml0b3JfID0gbW9uaXRvcjsJCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGJlZ2luVGFzayhmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgaW50IHRvdGFsV29yaykgCi0gICAgewotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvZ3Jlc3NNb25pdG9yXy5pc0Rpc3Bvc2VkKCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgIG1vbml0b3JfLmJlZ2luVGFzayggbmFtZSwgdG90YWxXb3JrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkb25lKCkgCi0gICAgewotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yXy5kb25lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZmluYWwgZG91YmxlIHdvcmspIAotICAgIHsKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvcl8uaW50ZXJuYWxXb3JrZWQoIHdvcmsgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGVkKCkgCi0gICAgewotICAgICAgcmV0dXJuIHByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpID8gZmFsc2UgOiBtb25pdG9yXy5pc0NhbmNlbGVkKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q2FuY2VsZWQoYm9vbGVhbiB2YWx1ZSkgCi0gICAgewotICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICB7Ci0gIAkgICAgbW9uaXRvcl8uc2V0Q2FuY2VsZWQoIHZhbHVlICk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGFza05hbWUoZmluYWwgU3RyaW5nIG5hbWUpIAotICAgIHsKLSAgCSAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yXy5zZXRUYXNrTmFtZSggbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN1YlRhc2soIGZpbmFsIFN0cmluZyBuYW1lKSAKLSAgICB7Ci0gIAkgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvcl8uc3ViVGFzayggbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdvcmtlZChmaW5hbCBpbnQgd29yaykgCi0gICAgewotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yXy53b3JrZWQoIHdvcmsgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BYnN0cmFjdEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NtZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0Fic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MmY2YWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0Fic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAxMzQ5MTMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIEFic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kCi0gKgotICogSW5pdGlhbGl6ZSBhbmQgbG9hZCB0aGUgaGFuZGxlcnMgZGF0YQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDbWQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgCi0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbl87IAotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gaW5pdGlhbFNlbGVjdGlvbl87Ci0gICAgaWYgKHNlbGVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVEICk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOyAgICAgICAgIAotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICAgIAotICB9Ci0gIAotCi0gIHB1YmxpYyBMaXN0IGdldENsaWVudEhhbmRsZXJzKCl7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRTZWxlY3Rpb24pewotICAgIHRoaXMuaW5pdGlhbFNlbGVjdGlvbl8gPSBpbml0U2VsZWN0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpewotICAgIHJldHVybiB0aGlzLmluaXRpYWxTZWxlY3Rpb25fOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVJlc291cmNlIGdldFJlc291cmNlRnJvbUluaXRpYWxTZWxlY3Rpb24oKQotICB7Ci0gICAgaWYgKGluaXRpYWxTZWxlY3Rpb25fICE9IG51bGwgJiYgaW5pdGlhbFNlbGVjdGlvbl8uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IGluaXRpYWxTZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICByZXR1cm4gcmVzb3VyY2U7Ci0gICAgICAgIH0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgIAotIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpewotICAgIAotICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IGdldFJlc291cmNlRnJvbUluaXRpYWxTZWxlY3Rpb24oKTsKLQlpZiAocmVzb3VyY2UgIT0gbnVsbCkKLQl7Ci0JICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YoIHJlc291cmNlLmdldEZ1bGxQYXRoKCkgKTsKLQl9Ci0JIAotCXJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKXsKLSAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZUZyb21Jbml0aWFsU2VsZWN0aW9uKCk7Ci0gICAgaWYgKHJlc291cmNlIT1udWxsKSB7Ci0gICAgICBJUGF0aCBhYnNvbHV0ZVBhdGggPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotICAgICAgaWYgKGFic29sdXRlUGF0aC5pc0Fic29sdXRlKCkpIHsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlUGF0aC5zZWdtZW50KDEpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLS8vICBwdWJsaWMgV2ViU2VydmljZUVkaXRNb2RlbCBnZXRXZWJTZXJ2aWNlRWRpdE1vZGVsKCkgewotLy8gICAgV2ViU2VydmljZXNNYW5hZ2VyIHdzbSA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLS8vICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KCk7Ci0vLyAgICByZXR1cm4gd3NtLmdldFdTRWRpdE1vZGVsKHByb2plY3QpOyAgICAKLS8vICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0Fic3RyYWN0T2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0Fic3RyYWN0T2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzAwY2NhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BYnN0cmFjdE9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIGltcGxlbWVudHMgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgewotCi0JcHVibGljIGludCBsYXVuY2goU2hlbGwgc2hlbGwpIHsJCQotCQlyZXR1cm4gLTE7Ci0JfQotCQotCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikgewotCQkgLy8gIHN1YmNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZAotCQkgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCXB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKSB7Ci0JCSAvLyAgc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0JCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHsKLQkJIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQl9CQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKQotCXsKLQkJIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQkJcmV0dXJuICIiOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgcykgewotCQkvLyBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQkJcmV0dXJuIHRydWU7Ci0JfSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BZGRIYW5kbGVyRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQWRkSGFuZGxlckRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDVhYTM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BZGRIYW5kbGVyRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgICAKLSAqIDIwMDYwNTI5ICAgMTQzNTE4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLQotCi0KLXB1YmxpYyBjbGFzcyBBZGRIYW5kbGVyRGlhbG9nIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgTGlzdGVuZXIgewotCi0gIHByaXZhdGUgU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotCi0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZU9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzTXVsdGlwbGVTZXJ2aWNlc187Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXNzTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VsZWN0ZWRQb3J0TmFtZTsKLSAgCi0gIHByaXZhdGUgVGV4dCBjbGFzc05hbWVUZXh0OwotICBwcml2YXRlIFRleHQgbmFtZVRleHQ7Ci0gIHByaXZhdGUgQ29tYm8gcG9ydE5hbWVDb21ibzsKLSAgCi0gIC8vIC0tLS1UT09MVElQUyBTZWN0aW9uLS0tLQotICAvKiBDT05URVhUX0lEIEFIREwwMDAxIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1RFWFRfSEFORExFUl9OQU1FICA9ICJBSERMMDAwMSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8qIENPTlRFWFRfSUQgQUhETDAwMDIgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfVEVYVF9IQU5ETEVSX0NMQVNTICA9ICJBSERMMDAwMiI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8qIENPTlRFWFRfSUQgQUhETDAwMDEgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfVEVYVF9IQU5ETEVSX1BPUlQgID0gIkFIREwwMDAzIjsgLy8kTk9OLU5MUy0xJAotICAgIAotICBwcml2YXRlIEJ1dHRvbiBiZWFuQ2xhc3NCcm93c2VCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUEJDTDAwMDMgZm9yIHRoZSBCZWFuIENsYXNzIEJyb3dzZSBidXR0b24gb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BCQ0xfQlVUVE9OX0JFQU5fQ0xBU1NfQlJPV1NFID0gIlBCQ0wwMDAzIjsKLSAgCi0gIHB1YmxpYyBBZGRIYW5kbGVyRGlhbG9nKCBTaGVsbCBzaGVsbCwgYm9vbGVhbiBpc0NsaWVudEhhbmRsZXIpCi0gIHsKLSAgICBzdXBlcihzaGVsbCk7Ci0gICAgc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLSAgICBpc0NsaWVudF8gPSBpc0NsaWVudEhhbmRsZXI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7Ci0gICAgQ29tcG9zaXRlIGNvbXAgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotICAgIHBhcmVudC5nZXRTaGVsbCgpLnBhY2soKTsKLSAgICByZXR1cm4gY29tcDsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotICAgIHZhbGlkYXRlT25fID0gZmFsc2U7Ci0gICAgVUlVdGlscyB1aVV0aWxzID0gbmV3IFVJVXRpbHMocGx1Z2luSWRfKTsKLSAgICAKLSAgICBTaGVsbCB0aGlzU2hlbGwgPSBwYXJlbnQuZ2V0U2hlbGwoKTsKLSAgICBpZiAodGhpc1NoZWxsID09IG51bGwpIHsKLSAgICAgIHRoaXNTaGVsbCA9IGNyZWF0ZVNoZWxsKCk7Ci0gICAgfQotICAgIHRoaXNTaGVsbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUTEVfV1NfQUREX0hBTkRMRVIpOwotICAgIAotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7ICAgIAotICAgIAotICAgIENvbXBvc2l0ZSBzb3VyY2VMb2NhdGlvbkNvbXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShjb21wb3NpdGUsIDMpOwotICAgIAotICAgIGNsYXNzTmFtZVRleHQgPSB1aVV0aWxzLmNyZWF0ZVRleHQoc291cmNlTG9jYXRpb25Db21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVEVYVF9IQU5ETEVSX0NMQVNTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9URVhUX0hBTkRMRVJfQ0xBU1MsIElORk9QT1BfVEVYVF9IQU5ETEVSX0NMQVNTLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgY2xhc3NOYW1lVGV4dC5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LHRoaXMpOwotICAgIAotICAgIGJlYW5DbGFzc0Jyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHNvdXJjZUxvY2F0aW9uQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9CUk9XU0VfQ0xBU1NFUywKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fQ0xBU1NfQlJPV1NFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9DTEFTU19CUk9XU0UgKTsKLSAgICBiZWFuQ2xhc3NCcm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBoYW5kbGVCcm93c2VDbGFzc2VzKCk7ICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICAKLSAgICBuYW1lVGV4dCA9IHVpVXRpbHMuY3JlYXRlVGV4dChzb3VyY2VMb2NhdGlvbkNvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9URVhUX0hBTkRMRVJfTkFNRSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVEVYVF9IQU5ETEVSX05BTUUsIElORk9QT1BfVEVYVF9IQU5ETEVSX05BTUUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSICk7Ci0gICAgbmFtZVRleHQuYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0gICAgCi0gICAgLy8gZHVtbXkgbGFiZWwgZm9yIGNvbHVtbiAzLgotICAgIG5ldyBMYWJlbCggc291cmNlTG9jYXRpb25Db21wLCBTV1QuTk9ORSApOwotICAgIAotICAgIGlmICghaXNDbGllbnRfICYmICFpc011bHRpcGxlU2VydmljZXNfKXsKLSAgICAgIHBvcnROYW1lQ29tYm8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHNvdXJjZUxvY2F0aW9uQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RFWFRfSEFORExFUl9QT1JULCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9URVhUX0hBTkRMRVJfUE9SVCwgSU5GT1BPUF9URVhUX0hBTkRMRVJfUE9SVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICAgIHBvcnROYW1lQ29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0gICAgICAKLSAgICAgIC8vIGR1bW15IGxhYmVsIGZvciBjb2x1bW4gMy4KLSAgICAgIG5ldyBMYWJlbCggc291cmNlTG9jYXRpb25Db21wLCBTV1QuTk9ORSApOwotICAgIH0KLSAgICB2YWxpZGF0ZU9uXyA9IHRydWU7Ci0gICByZXR1cm4gY29tcG9zaXRlOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlQnJvd3NlQ2xhc3NlcygpCi0gIHsKLSAgICBTaGVsbCBzaGVsbCA9IGdldFNoZWxsKCk7Ci0gICAgSVR5cGUgaXR5cGUgPSBEaWFsb2dVdGlscy5icm93c2VDbGFzc2VzQXNJVHlwZShzaGVsbCwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0cygpLCBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKHNoZWxsKSk7Ci0gICAgCi0gICAgaWYoIGl0eXBlICE9IG51bGwgKQotICAgIHsKLSAgICAgIGNsYXNzTmFtZVRleHQuc2V0VGV4dChpdHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7ICAgICAgCi0gICAgfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXIjaGFuZGxlRXZlbnQob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgewotICAgIGlmICghdmFsaWRhdGVPbl8pCi0gICAgICByZXR1cm47Ci0gICAgaWYgKGNsYXNzTmFtZVRleHQgPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVDbGFzc05hbWVUZXh0RXZlbnQoKTsKLSAgICAgIHZhbGlkYXRlVGV4dEZpZWxkRW50cmllcygpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobmFtZVRleHQgPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVOYW1lVGV4dEV2ZW50KCk7Ci0gICAgICB2YWxpZGF0ZVRleHRGaWVsZEVudHJpZXMoKTsgICAgICAKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHBvcnROYW1lQ29tYm8gPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVQb3J0TmFtZVRleHRFdmVudCgpOwotICAgICAgdmFsaWRhdGVUZXh0RmllbGRFbnRyaWVzKCk7ICAgICAgCi0gICAgICByZXR1cm47Ci0gICAgfSAgICAKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVDbGFzc05hbWVUZXh0RXZlbnQoKXsKLSAgICBjbGFzc05hbWUgPSBjbGFzc05hbWVUZXh0LmdldFRleHQoKTsKLSAgICBpZiAoY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuamF2YSIpICE9IC0xKXsKLSAgICAgIG5hbWVUZXh0LnNldFRleHQoY2xhc3NOYW1lLnN1YnN0cmluZygwLCBjbGFzc05hbWUubGFzdEluZGV4T2YoIi5qYXZhIikpKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBuYW1lVGV4dC5zZXRUZXh0KGNsYXNzTmFtZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChjbGFzc05hbWUubGFzdEluZGV4T2YoIi4iKSAhPSAtMSl7Ci0gICAgICBuYW1lVGV4dC5zZXRUZXh0KGNsYXNzTmFtZS5zdWJzdHJpbmcoY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuIikrMSwgY2xhc3NOYW1lLmxlbmd0aCgpKSk7Ci0gICAgfQotICAgIG5hbWUgPSBuYW1lVGV4dC5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVOYW1lVGV4dEV2ZW50KCkgewotICAgbmFtZSA9IG5hbWVUZXh0LmdldFRleHQoKTsgCi0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVBvcnROYW1lVGV4dEV2ZW50KCl7Ci0gICAgc2VsZWN0ZWRQb3J0TmFtZSA9IHBvcnROYW1lQ29tYm8uZ2V0VGV4dCgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZGlzYWJsZU9LQnV0dG9uKCkgewotICAgIGlmIChnZXRCdXR0b24oMCkgIT0gbnVsbCkKLSAgICAgIGdldEJ1dHRvbigwKS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBlbmFibGVPS0J1dHRvbigpIHsKLSAgICBpZiAoZ2V0QnV0dG9uKDApICE9IG51bGwpCi0gICAgICBnZXRCdXR0b24oMCkuc2V0RW5hYmxlZCh0cnVlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlVGV4dEZpZWxkRW50cmllcygpewotICAJaWYgKGNsYXNzTmFtZVRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpewotICAJCWRpc2FibGVPS0J1dHRvbigpOwotICAJCXJldHVybjsKLSAgCX0KLSAgCWlmIChuYW1lVGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSl7Ci0gIAkJZGlzYWJsZU9LQnV0dG9uKCk7Ci0gIAkJcmV0dXJuOwotICAJfQotICAJaWYgKCFpc0NsaWVudF8gJiYgIWlzTXVsdGlwbGVTZXJ2aWNlc18pewotICAJCWlmIChwb3J0TmFtZUNvbWJvLmdldFRleHQoKSE9bnVsbCAmJiBwb3J0TmFtZUNvbWJvLmdldFRleHQoKS5lcXVhbHMoIiIpKXsKLSAgCQkJZGlzYWJsZU9LQnV0dG9uKCk7Ci0gIAkJCXJldHVybjsKLSAgCQl9Ci0gIAkJZWxzZSBpZiAocG9ydE5hbWVDb21iby5nZXRUZXh0KCk9PW51bGwpIHsKLSAgCQkJZGlzYWJsZU9LQnV0dG9uKCk7Ci0gIAkJCXJldHVybjsKLSAgCQl9Ci0gIAl9Ci0gIAkKLSAgCWVuYWJsZU9LQnV0dG9uKCk7Ci0gIAkKLQkKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xhc3NOYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7Ci0gICAgaWYgKGNsYXNzTmFtZS5sYXN0SW5kZXhPZigiLmphdmEiKSAhPSAtMSl7Ci0gICAgICByZXR1cm4gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBjbGFzc05hbWUubGFzdEluZGV4T2YoIi5qYXZhIikpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHJldHVybiBjbGFzc05hbWU7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzc05hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBuYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwb3J0TmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE5hbWUoKSB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkUG9ydE5hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBwb3J0TmFtZSBUaGUgcG9ydE5hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UG9ydE5hbWVzKFN0cmluZ1tdIHBvcnROYW1lcykgewotICAgIHBvcnROYW1lQ29tYm8uc2V0SXRlbXMocG9ydE5hbWVzKTsKLSAgICBwb3J0TmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SXNNdWx0aXBsZVNlcnZpY2VzKGJvb2xlYW4gaXNNdWx0aXBsZVNlcnZpY2VzKXsKLSAgICB0aGlzLmlzTXVsdGlwbGVTZXJ2aWNlc18gPSBpc011bHRpcGxlU2VydmljZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DaGVja1dTRExWYWxpZGF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NoZWNrV1NETFZhbGlkYXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjJkODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NoZWNrV1NETFZhbGlkYXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDIwICAgMTIwNzE0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5JSm9iTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuVmFsaWRhdGVXU0RMSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIENoZWNrV1NETFZhbGlkYXRpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsJICAKLQkKLQlwdWJsaWMgQ2hlY2tXU0RMVmFsaWRhdGlvbkNvbW1hbmQgKCkgewotCX0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgSUpvYk1hbmFnZXIgICAgam9iTWFuYWdlciAgICAgPSBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCk7Ci0JICBKb2JbXSAgICAgICAgICBqb2JzICAgICAgICAgICA9IGpvYk1hbmFnZXIuZmluZCggVmFsaWRhdGVXU0RMSm9iLlZBTElEQVRFX1dTRExfSk9CX0ZBTUlMWSApOwotCSAgVmFsaWRhdGVXU0RMSm9iIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iID0gbnVsbDsKLQkgIAotCSAgaWYoIGpvYnMubGVuZ3RoID4gMCApCi0JICB7Ci0JCSAgZm9yIChpbnQgaT0wOyBpPGpvYnMubGVuZ3RoOyBpKyspIHsKLQkJCSAgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IgPSAoVmFsaWRhdGVXU0RMSm9iKWpvYnNbaV07Ci0JCQkgIAotCQkJICBpZiAoZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IuZ2V0U3RhdGUoKSAhPSBKb2IuTk9ORSkgeyAKLQkJCQkgIGlmIChpZ25vcmVXU0RMVmFsaWRhdGlvbihlbnYpKSB7Ci0JCQkJCSAgLy8gaWYgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciB2YWxpZGF0aW9uLCBjYW5jZWwgZXhpc3RpbmcgdmFsaWRhdGlvbiBqb2IKLQkJCQkJICBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYi5jYW5jZWwoKTsKLQkJCQkJICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQkgIH0gZWxzZSB7Ci0JCQkJCSAgLy8gU2V0dGluZyB0aGUgZXJyb3Igc3RyaW5nIHRvIGFuIGVtcHR5IHN0cmluZyBzbyB0aGF0IHRoZSBjb21tYW5kIGVuZ2luZSB3b3VsZCBub3QKLQkJCQkJICAvLyBwb3AtdXAgYW5vdGhlciBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgZGVjaWRlZCB0byB3YWl0IGZvciBXU0RMIHZhbGlkYXRpb24uCi0JCQkJCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCAiIiApOwotCQkJCSAgfQotCQkJICB9Ci0JCSAgfQotCSAgfQotCSAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIAotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaWdub3JlV1NETFZhbGlkYXRpb24oSUVudmlyb25tZW50IGVudikgewotCSAgaWYgKCFXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQoKS5nZXRQZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uKCkpIAotCQkgIHJldHVybiB0cnVlOyAvLyBkbyBub3Qgd2FudCB0byB3YWl0IGZvciBXU0RMIHZhbGlkYXRpb24sIGkuZS4gSWdub3JlIGFsbAotCQkgIAotCQkvLyBnaXZlIGEgd2FybmluZyBtZXNzYWdlIHdpdGggdGhlIG9wdGlvbnMgdG8gc3RvcCwgaWdub3JlIHRoaXMgb25lLCBvcgotCQkvLyBpZ25vcmUgYWxsIGNvbWluZyBtZXNzYWdlcwotCQlJU3RhdHVzIHN0YXR1c18gPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuU1RJTExfVkFMSURBVElOR19XU0RMICk7Ci0JCS8vIGFkZGluZyBhbGwgbWVzc2FnZXMgZnJvbSBXU0kgSW5jb21wbGlhbmNlcwotCi0JCUNob2ljZSBpZ25vcmVDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkNBTkNFTF9WQUxJREFUSU9OX0xBQkVMLCAKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0FOQ0VMX1ZBTElEQVRJT05fREVTQ1JJUFRJT04pOwotCQlDaG9pY2UgaWdub3JlQWxsQ2hvaWNlID0gbmV3IENob2ljZSgnQScsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5DQU5DRUxfQUxMX1ZBTElEQVRJT05fTEFCRUwsIAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5DQU5DRUxfQUxMX1ZBTElEQVRJT05fREVTQ1JJUFRJT04pOwotCQlDaG9pY2UgY2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnVycsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5XQUlUX1ZBTElEQVRJT05fTEFCRUwsIAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5XQUlUX1ZBTElEQVRJT05fREVTQ1JJUFRJT04pOwotCi0JCUNob2ljZSByZXN1bHQgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXNfLAotCQkJCW5ldyBDaG9pY2VbXSB7IGlnbm9yZUNob2ljZSwgaWdub3JlQWxsQ2hvaWNlLCBjYW5jZWxDaG9pY2UgfSk7Ci0KLQkJLy8gaWYgdGhlIHVzZXIgY2xvc2VzIHRoZSBtZXNzYWdlIGJveCBvciBzZWxlY3RzIGlnbm9yZSBjb250aW51ZQotCQlpZiAocmVzdWx0ID09IG51bGwKLQkJCQl8fCAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKGlnbm9yZUNob2ljZS5nZXRMYWJlbCgpKSkpIHsKLQkJCXJldHVybiB0cnVlOwotCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIGlnbm9yZSBhbGwsIGNoYW5nZSB0aGUgcHJlZmVyZW5jZQotCQl9IGVsc2UgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVBbGxDaG9pY2UuZ2V0TGFiZWwoKSkpIHsKLQkJCS8vIHVwZGF0ZSBpZ25vcmUgV1NETCB2YWxpZGF0aW9uIHByZWZlcmVuY2UKLQkJCVdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCgpLnNldFdhaXRGb3JXU0RMVmFsaWRhdGlvbihmYWxzZSk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIHRvIGNhbmNlbCAsIGRvIG5vdCBjb250aW51ZSB3aXRoIHRoZSBjb21tYW5kCi0JCWVsc2UgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhjYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmYjkyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Xb3JrYmVuY2hSZXNvdXJjZUhlbHBlckJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcHBsaWNhdGlvbmNsaWVudC5jb21wb25lbnRjb3JlLnV0aWwuQXBwQ2xpZW50QXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNsaWVudC5BcHBsaWNhdGlvbkNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5jbGllbnQuQXBwbGljYXRpb25DbGllbnRSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCSmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuaW50ZXJuYWwubW9kdWxlY29yZS51dGlsLkVKQkFydGlmYWN0RWRpdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWJzZXJ2aWNlLldlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2Vic2VydmljZS5oZWxwZXIuV2ViU2VydmljZXNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi5jb21wb25lbnRjb3JlLnV0aWwuV2ViQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYmFwcGxpY2F0aW9uLldlYkFwcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHBSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuV2ViU2VydmljZXNSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlclNlcnZpY2VSZWZIb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Db21wb25lbnRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLS8qKgotICogQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotICoKLSAqIEluaXRpYWxpemUgYW5kIGxvYWQgdGhlIGhhbmRsZXJzIGRhdGEKLSAqLwotcHVibGljIGNsYXNzIENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NtZCB7Ci0KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc01hbmFnZXIgd2ViU2VydmljZXNNYW5hZ2VyXzsKLQotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3RfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVJlZk5hbWVfID0gbnVsbDsKLSAgCi0gIHByaXZhdGUgTGlzdCB3c1NlcnZpY2VSZWZzXzsKLSAgCi0gIHByaXZhdGUgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl87Ci0gIHByaXZhdGUgU3RyaW5nIGVycm9yU3RhdHVzTXNnXyA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VsZWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIHdlYlNlcnZpY2VzTWFuYWdlcl8gPSBXZWJTZXJ2aWNlc01hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGdldEluaXRpYWxTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uID09IG51bGwpIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQgKTsKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNlbGVjdGlvbi5zaXplKCk+MSl7Ci0gICAgICBzdGF0dXMgPSBwcm9jZXNzTXVsdGlwbGVIYW5kbGVycygpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBzdGF0dXMgPSBwcm9jZXNzSGFuZGxlcnMoKTsKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIH0KLQotICAvKioKLSAgICogRm9yIHByb2Nlc3NpbmcgaGFuZGxlcnMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgcHJvY2Vzc0hhbmRsZXJzKCkgewotICAgIHRyeSB7Ci0KLSAgICAgIENvbGxlY3Rpb24gc2VsZWN0ZWRTZXJ2aWNlUmVmcyA9IGdldFdTU2VydmljZVJlZnNGcm9tU2VsZWN0aW9uKCk7IC8vIGdldCBpbml0aWFsIHNlbGVjdGlvbiB2YWx1ZXMKLSAgICAgIGlmIChzZWxlY3RlZFNlcnZpY2VSZWZzPT1udWxsIHx8IHNlbGVjdGVkU2VydmljZVJlZnMuaXNFbXB0eSgpKXsKLSAgICAgICAgLy9yZXBvcnQgbm8gV2ViIHNlcnZpY2UgY2xpZW50IGlzIGF2YWlsYWJsZQotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV0VCX1NFUlZJQ0VfQ0xJRU5UU19OT1RfRk9VTkQpOwotICAgICAgfQotICAgICAgd3NTZXJ2aWNlUmVmc18gPSB3ZWJTZXJ2aWNlc01hbmFnZXJfLmdldEFsbFdvcmtzcGFjZVNlcnZpY2VSZWZzKCk7IAotCi0gICAgICBpZiAod3NTZXJ2aWNlUmVmc18gIT0gbnVsbCkgewotICAgICAgICBpbnQgbnVtYmVyT2ZTZXJ2aWNlUmVmcyA9IHdzU2VydmljZVJlZnNfLnNpemUoKTsKLSAgICAgICAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfID0gbmV3IEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW251bWJlck9mU2VydmljZVJlZnNdOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlNlcnZpY2VSZWZzOyBpKyspIHsKLSAgICAgICAgICBTZXJ2aWNlUmVmIHdzU2VydmljZVJlZiA9IChTZXJ2aWNlUmVmKSB3c1NlcnZpY2VSZWZzXy5nZXQoaSk7Ci0gICAgICAgICAgVmVjdG9yIGhhbmRsZXJzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIExpc3Qgd3NIYW5kbGVycyA9IHdzU2VydmljZVJlZi5nZXRIYW5kbGVycygpOwotICAgICAgCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCB3c0hhbmRsZXJzLnNpemUoKTsgaysrKSB7Ci0KLSAgICAgICAgICAgIEhhbmRsZXIgd3NIYW5kbGVyID0gKEhhbmRsZXIpIHdzSGFuZGxlcnMuZ2V0KGspOwotCi0gICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGhhbmRsZXJJdGVtID0gbmV3IEhhbmRsZXJUYWJsZUl0ZW0oKTsKLSAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXIod3NIYW5kbGVyKTsKLSAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXJOYW1lKHdzSGFuZGxlci5nZXRIYW5kbGVyTmFtZSgpKTsKLSAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXJDbGFzc05hbWUod3NIYW5kbGVyLmdldEhhbmRsZXJDbGFzcygpLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRXc0Rlc2NSZWYod3NTZXJ2aWNlUmVmKTsKLQotICAgICAgICAgICAgaGFuZGxlcnMuYWRkKGhhbmRsZXJJdGVtKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgU3RyaW5nIHdzU2VydmljZVJlZk5hbWUgPSB3c1NlcnZpY2VSZWYuZ2V0U2VydmljZVJlZk5hbWUoKTsKLSAgICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0gPSBuZXcgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIoKTsKLSAgICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uc2V0SGFuZGxlckxpc3QoaGFuZGxlcnMpOwotICAgICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5zZXRTZXJ2aWNlUmVmKHdzU2VydmljZVJlZik7Ci0gICAgICAgICAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2ldLnNldFNlcnZpY2VSZWZOYW1lKHdzU2VydmljZVJlZk5hbWUpOwotICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVELCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBwcm9jZXNzTXVsdGlwbGVIYW5kbGVycygpewotICAgICAgU2VydmljZVJlZltdIHNlcnZpY2VSZWZzID0gZ2V0U2VydmljZVJlZnMoKTsKLSAgICAgIGlmIChlcnJvclN0YXR1c01zZ18gIT0gbnVsbCl7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGVycm9yU3RhdHVzTXNnXyk7Ci0gICAgICB9Ci0gICAgICBpc011bHRpcGxlU2VsZWN0aW9uXyA9IHRydWU7Ci0gICAgICAKLSAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXyA9IG5ldyBIYW5kbGVyU2VydmljZVJlZkhvbGRlcltzZXJ2aWNlUmVmcy5sZW5ndGhdOwotICAgICAgVmVjdG9yIGhhbmRsZXJzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZVJlZnMubGVuZ3RoO2krKyl7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgcmVmTmFtZSA9IHNlcnZpY2VSZWZzW2ldLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXSA9IG5ldyBIYW5kbGVyU2VydmljZVJlZkhvbGRlcigpOwotICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uc2V0SGFuZGxlckxpc3QoaGFuZGxlcnMpOwotICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uc2V0U2VydmljZVJlZk5hbWUocmVmTmFtZSk7Ci0gICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5zZXRTZXJ2aWNlUmVmKHNlcnZpY2VSZWZzW2ldKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0dlblNrZWxldG9uRW5hYmxlZF8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5Ta2VsZXRvbkVuYWJsZWQoKSB7Ci0gICAgaWYgKGlzTXVsdGlwbGVTZWxlY3Rpb25fKQotICAgICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUmVmTmFtZSgpIHsKLSAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUmVmTmFtZV87Ci0gIH0KLQotICBwdWJsaWMgSVByb2plY3QgZ2V0Q2xpZW50UHJvamVjdCgpIHsKLSAgICByZXR1cm4gcHJvamVjdF87Ci0gIH0KLSAgCi0gIHByaXZhdGUgU2VydmljZVJlZltdIGdldFNlcnZpY2VSZWZzKCl7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0U2VsID0gZ2V0SW5pdGlhbFNlbGVjdGlvbigpOwotICAgICAgU2VydmljZVJlZltdIHNlcnZpY2VSZWZzID0gbmV3IFNlcnZpY2VSZWZbaW5pdFNlbC5zaXplKCldOwotICAgICAgSXRlcmF0b3IgaXRlciA9IGluaXRTZWwuaXRlcmF0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGluaXRTZWwuc2l6ZSgpO2krKykgewotICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVyLm5leHQoKTsKLSAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgU2VydmljZVJlZil7Ci0gICAgICAgICAgICAgIHNlcnZpY2VSZWZzW2ldID0gKFNlcnZpY2VSZWYpb2JqOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICBlcnJvclN0YXR1c01zZ18gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfTVVMVElQTEVfU0VSVklDRV9TRUxFQ1Q7Ci0gICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBzZXJ2aWNlUmVmczsKLX0KLQotICBwcml2YXRlIENvbGxlY3Rpb24gZ2V0V1NTZXJ2aWNlUmVmc0Zyb21TZWxlY3Rpb24oKSB7Ci0KLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0U2VsID0gZ2V0SW5pdGlhbFNlbGVjdGlvbigpOwotICAgIGlmIChpbml0U2VsICE9IG51bGwgJiYgaW5pdFNlbC5zaXplKCkgPT0gMSkgewotICAgICAgT2JqZWN0IG9iaiA9IGluaXRTZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBTZXJ2aWNlUmVmIHNlcnZpY2VSZWYgPSBudWxsOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpIHsKLSAgICAgICAgLy8gQ2xpZW50IFNlcnZpY2VSZWYKLSAgICAgICAgc2VydmljZVJlZiA9IChTZXJ2aWNlUmVmKSBvYmo7Ci0gICAgICAgIHNlcnZpY2VSZWZOYW1lXyA9IHNlcnZpY2VSZWYuZ2V0U2VydmljZVJlZk5hbWUoKTsKLSAgICAgICAgcHJvamVjdF8gPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZVJlZik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSB7Ci0gICAgICAgIFdlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUgd3NuZ3QgPSAoV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSkgb2JqOwotICAgICAgICBzZXJ2aWNlUmVmID0gd3NuZ3QuZ2V0U2VydmljZVJlZigpOwotICAgICAgICBzZXJ2aWNlUmVmTmFtZV8gPSBzZXJ2aWNlUmVmLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgIHByb2plY3RfID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VSZWYpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSUZpbGUpewotICAgICAgICAgIFJlc291cmNlIHJlcyA9IFdvcmtiZW5jaFJlc291cmNlSGVscGVyQmFzZS5nZXRSZXNvdXJjZSgoSUZpbGUpb2JqLCB0cnVlKTsKLSAgICAgICAgICBDb2xsZWN0aW9uIHNlcnZpY2VSZWZzID0gbnVsbDsKLSAgICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgV2ViU2VydmljZXNSZXNvdXJjZSkgewotICAgICAgICAgICAgICAvLyB3ZWJzZXJ2aWNlc2NsaWVudC54bWwgZm9yIEoyRUUgMS4zCi0gICAgICAgICAgICAgIFdlYlNlcnZpY2VzUmVzb3VyY2Ugd3NSZXMgPSAoV2ViU2VydmljZXNSZXNvdXJjZSlyZXM7Ci0gICAgICAgICAgICAgIHNlcnZpY2VSZWZzID0gd3NSZXMuZ2V0V2ViU2VydmljZXNDbGllbnQoKS5nZXRTZXJ2aWNlUmVmcygpOwotICAgICAgICAgICAgICBpZiAoIXNlcnZpY2VSZWZzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFNlcnZpY2VSZWYgcmVmID0gKFNlcnZpY2VSZWYpKChMaXN0KXNlcnZpY2VSZWZzKS5nZXQoMCk7Ci0gICAgICAgICAgICAgICAgc2VydmljZVJlZk5hbWVfID0gcmVmLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgICAgICAgICAgcHJvamVjdF8gPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocmVmKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZVJlZnM7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICBpZihyZXMgaW5zdGFuY2VvZiBXZWJBcHBSZXNvdXJjZSl7Ci0gICAgICAgICAgICAgICAgICAvLyB3ZWIueG1sIGZvciBKMkVFIDEuNAotICAgICAgICAgICAgICAgICAgV2ViQXBwUmVzb3VyY2Ugd2ViQXBwUmVzID0gKFdlYkFwcFJlc291cmNlKXJlczsKLSAgICAgICAgICAgICAgICAgIHNlcnZpY2VSZWZzID0gd2ViQXBwUmVzLmdldFdlYkFwcCgpLmdldFNlcnZpY2VSZWZzKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAocmVzIGluc3RhbmNlb2YgRUpCUmVzb3VyY2UpewotICAgICAgICAgICAgICAgICAgRUpCUmVzb3VyY2UgZWpiUmVzID0gKEVKQlJlc291cmNlKXJlczsKLSAgICAgICAgICAgICAgICAgIHNlcnZpY2VSZWZzID0gd2ViU2VydmljZXNNYW5hZ2VyXy5nZXRTZXJ2aWNlUmVmcyhlamJSZXMuZ2V0RUpCSmFyKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIEFwcGxpY2F0aW9uQ2xpZW50UmVzb3VyY2UpewotICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DbGllbnRSZXNvdXJjZSBhcHBDbGllbnRSZXMgPSAoQXBwbGljYXRpb25DbGllbnRSZXNvdXJjZSlyZXM7Ci0gICAgICAgICAgICAgICAgICBzZXJ2aWNlUmVmcyA9IHdlYlNlcnZpY2VzTWFuYWdlcl8uZ2V0U2VydmljZVJlZnMoYXBwQ2xpZW50UmVzLmdldEFwcGxpY2F0aW9uQ2xpZW50KCkpOy8vYXBwQ2xpZW50UmVzLmdldEFwcGxpY2F0aW9uQ2xpZW50KCkuZ2V0U2VydmljZVJlZnMoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoc2VydmljZVJlZnMhPW51bGwgJiYgc2VydmljZVJlZnMuc2l6ZSgpPjApIHsKLSAgICAgICAgICAgICAgICAgIFNlcnZpY2VSZWYgcmVmID0gKFNlcnZpY2VSZWYpKChMaXN0KXNlcnZpY2VSZWZzKS5nZXQoMCk7Ci0gICAgICAgICAgICAgICAgICBzZXJ2aWNlUmVmTmFtZV8gPSByZWYuZ2V0U2VydmljZVJlZk5hbWUoKTsKLSAgICAgICAgICAgICAgICAgIHByb2plY3RfID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHJlZik7IAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlUmVmczsgICAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gVGhpcyBzZWN0aW9uIGlzIGZvciBvYnRhaW5pbmcgYWxsIHRoZSBzZXJ2aWNlUmVmcyBmcm9tIHRoZSBwcm9qZWN0LCBnaXZlbiB0aGF0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgICAgLy8gd2FzIGZyb20gdGhlIEoyRUUgdmlldyAoU2VydmljZVJlZiBvciBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSwgaXQgd2lsbCBzZWxlY3QgdGhlIHJpZ2h0IHNlcnZpY2VSZWYKLSAgICAgIGlmIChwcm9qZWN0Xz09bnVsbCl7Ci0gICAgICAgIHByb2plY3RfID0gZ2V0UHJvamVjdCgpOwotICAgICAgfQotICAgICAgaWYgKHByb2plY3RfPT1udWxsKXsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9ICAgICAKLSAgICAgICAKLSAgICAgIGlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdF8pKSB7Ci0gICAgICAgIFdlYkFydGlmYWN0RWRpdCB3ZWJFZGl0ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3RfKTsgICAgICAgICAgCi0gICAgICAgICAgd2ViRWRpdCA9IFdlYkFydGlmYWN0RWRpdC5nZXRXZWJBcnRpZmFjdEVkaXRGb3JSZWFkKHZjKTsKLSAgICAgICAgICBpZiAod2ViRWRpdCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFdlYkFwcCB3ZWJBcHAgPSAoV2ViQXBwKSB3ZWJFZGl0LmdldERlcGxveW1lbnREZXNjcmlwdG9yUm9vdCgpOwotICAgICAgICAgICAgaWYgKHdlYkFwcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc01hbmFnZXJfLmdldFNlcnZpY2VSZWZzKHdlYkFwcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHl7Ci0gICAgICAgICAgaWYod2ViRWRpdCE9bnVsbCkKLSAgICAgICAgICAgIHdlYkVkaXQuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChKMkVFVXRpbHMuaXNFSkJDb21wb25lbnQocHJvamVjdF8pKXsKLQotICAgIAlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3RfKTsKLSAgICAJRUpCSmFyIGVqYkphciA9IEVKQkFydGlmYWN0RWRpdFV0aWxpdGllcy5nZXRFSkJKYXIodmMpOwotICAgICAgICBpZiAoZWpiSmFyIT1udWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gd2ViU2VydmljZXNNYW5hZ2VyXy5nZXRTZXJ2aWNlUmVmcyhlamJKYXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChKMkVFVXRpbHMuaXNBcHBDbGllbnRDb21wb25lbnQocHJvamVjdF8pKXsKLSAgICAJICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3RfKTsKLSAgICAJICBBcHBDbGllbnRBcnRpZmFjdEVkaXQgYXBwRWRpdCA9IG51bGw7Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgYXBwRWRpdCA9IEFwcENsaWVudEFydGlmYWN0RWRpdC5nZXRBcHBDbGllbnRBcnRpZmFjdEVkaXRGb3JSZWFkKHZjKTsKLSAgICAgICAgICBpZiAoYXBwRWRpdCE9bnVsbCl7Ci0gICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2xpZW50IGFwcENsaWVudCA9IGFwcEVkaXQuZ2V0QXBwbGljYXRpb25DbGllbnQoKTsKLSAgICAgICAgICAgICAgaWYgKGFwcENsaWVudCAhPW51bGwpewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYlNlcnZpY2VzTWFuYWdlcl8uZ2V0U2VydmljZVJlZnMoYXBwQ2xpZW50KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZmluYWxseXsKLSAgICAgICAgICAgICAgaWYoYXBwRWRpdCE9bnVsbCl7Ci0gICAgICAgICAgICAgICAgICBhcHBFZGl0LmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgIAotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldFdzU2VydmljZVJlZnMoKXsKLSAgICByZXR1cm4gdGhpcy53c1NlcnZpY2VSZWZzXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldElzTXVsdGlwbGVTZWxlY3Rpb24oKXsKLSAgICAgIHJldHVybiB0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25fOwotICB9Ci0gIAotICBwdWJsaWMgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBnZXRIYW5kbGVyU2VydmljZVJlZkhvbGRlcigpewotICAgIHJldHVybiB0aGlzLmhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2VlMThhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAKLSAqIDIwMDYwNTE3ICAgMTQyMzM5IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmFwcGxpY2F0aW9uY2xpZW50LmNvbXBvbmVudGNvcmUudXRpbC5BcHBDbGllbnRBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLmNvbXBvbmVudGNvcmUudXRpbC5FSkJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViLmNvbXBvbmVudGNvcmUudXRpbC5XZWJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LldlYnNlcnZpY2VfY2xpZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LmludGVybmFsLmltcGwuV2Vic2VydmljZV9jbGllbnRGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkphdmFNT0ZVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlclNlcnZpY2VSZWZIb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5BcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmludGVybmFsLmVtZi51dGlsaXRpZXMuRXRvb2xzQ29weVV0aWxpdHk7Ci0KLS8qCi0gKiBQcm92aWRlIGEgd2F5IHRvIGV4dGVybmFsaXplIHRoZSBlZGl0ZWQgZmllbGRzIGFuZCBjcmVhdGUgbmV3IGhhbmRsZXJzCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICBwcml2YXRlIEhhc2h0YWJsZSBvbGRXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgbmV3V1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV87Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VsZWN0aW9uXzsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIHRyeSB7Ci0gICAgICAKLSAgICAgIGlmIChpc011bHRpcGxlU2VsZWN0aW9uXykgewotICAgICAgICBpZiAoaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfICE9IG51bGwpIHsKLSAgICAgICAgICAvLyBhZGQgbmV3IGhhbmRsZXIgdG8gaW50ZXJuYWwgbW9kZWwgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5hZGRIYW5kbGVyVG9TZXJ2aWNlUmVmKCk7Ci0gICAgICAgICAgICBzYXZlRWRpdE1vZGVsKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5nZXRQcm9qZWN0KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBvbGRXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgbmV3V1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfICE9IG51bGwpIHsKLSAgCi0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8ubGVuZ3RoOyBpKyspIHsKLSAgCi0gICAgICAgICAgICBTZXJ2aWNlUmVmIHdzU2VydmljZVJlZiA9aGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2ldLmdldFNlcnZpY2VSZWYoKTsgCi0gICAgICAgIAotICAgICAgICAgICAgTGlzdCB3c0hhbmRsZXJzID0gd3NTZXJ2aWNlUmVmLmdldEhhbmRsZXJzKCk7Ci0gICAgICAgICAgICBvbGRXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5wdXQod3NTZXJ2aWNlUmVmLCB3c0hhbmRsZXJzKTsKLSAgICAgICAgICAgIG5ld1dTU2VydmljZVJlZnNUb0hhbmRsZXJzVGFibGVfLnB1dCh3c1NlcnZpY2VSZWYsIG5ldyBBcnJheUxpc3QoKSk7Ci0gICAgICAgICAgfQotICAKLSAgICAgICAgICAvL0VudW1lcmF0aW9uIGUgPSBoYW5kbGVyc1RhYmxlXy5rZXlzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaj0wO2o8aGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfLmxlbmd0aDtqKyspIHsKLQotICAgICAgICAgICAgTGlzdCBoYW5kbGVyVGFibGVJdGVtc18gPSAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2pdLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlclRhYmxlSXRlbXNfICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgLy8gZm9ybSBIYW5kbGVyIHRhYmxlcwotICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhhbmRsZXJUYWJsZUl0ZW1zXy5zaXplKCk7IGkrKykgewotICAKLSAgICAgICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKSBoYW5kbGVyVGFibGVJdGVtc18uZ2V0KGkpOwotICAgICAgICAgICAgICAgIE9iamVjdCB3c01vZGVsUmVmID0gaHRpLmdldFdzRGVzY1JlZigpOwotICAgICAgICAgICAgICAgIGlmICh3c01vZGVsUmVmICE9IG51bGwgJiYgd3NNb2RlbFJlZiBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpIHsKLSAgICAgICAgICAgICAgICAgIFNlcnZpY2VSZWYgd3NSZWYgPSAoU2VydmljZVJlZikgd3NNb2RlbFJlZjsKLSAgCi0gICAgICAgICAgICAgICAgICBPYmplY3QgaGFuZGxlciA9IGh0aS5nZXRIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNsb25lIGl0Ci0gICAgICAgICAgICAgICAgICAgIEhhbmRsZXIgY2xvbmVkSGFuZGxlciA9IChIYW5kbGVyKSBFdG9vbHNDb3B5VXRpbGl0eS5jcmVhdGVDb3B5KChIYW5kbGVyKSBoYW5kbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgKChMaXN0KSBuZXdXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5nZXQod3NSZWYpKS5hZGQoY2xvbmVkSGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGl0Ci0gICAgICAgICAgICAgICAgICAgIFdlYnNlcnZpY2VfY2xpZW50RmFjdG9yeSB3c0NsaWVudEZhY3RvcnkgPSBuZXcgV2Vic2VydmljZV9jbGllbnRGYWN0b3J5SW1wbCgpOwotICAgICAgICAgICAgICAgICAgICBIYW5kbGVyIG5ld0hhbmRsZXIgPSB3c0NsaWVudEZhY3RvcnkuY3JlYXRlSGFuZGxlcigpOwotICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLnNldEhhbmRsZXJOYW1lKGh0aS5nZXRIYW5kbGVyTmFtZSgpKTsKLSAgCi0gICAgICAgICAgICAgICAgICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBKYXZhTU9GVXRpbHMuZ2V0SmF2YUNsYXNzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCksIHByb2plY3RfKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGphdmFDbGFzcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyQ2xhc3MoamF2YUNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAKLSAgICAgICAgICAgICAgICAgICAgKChMaXN0KSBuZXdXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5nZXQod3NSZWYpKS5hZGQobmV3SGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gIAotICAgICAgICAgICAgICAgIH0KLSAgCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gCi0gICAgICAgICAgLy8gYWRkIGhhbmRsZXJzIHRvIHBvcnRzCi0gICAgICAgICAgYWRkSGFuZGxlcnNUb1NlcnZpY2VSZWZzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIHNhdmUgdGhlIGFydGlmYWN0IGVkaXQgbW9kZWwKLSAgICAgICAgc2F2ZUVkaXRNb2RlbCgpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwgZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzYXZlRWRpdE1vZGVsKCkgewotICAgICAgQXJ0aWZhY3RFZGl0IGFydGlmYWN0RWRpdCA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICAgIGlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdF8pKSB7Ci0gICAgICAgICAgICAgICAgYXJ0aWZhY3RFZGl0ID0gV2ViQXJ0aWZhY3RFZGl0LmdldFdlYkFydGlmYWN0RWRpdEZvcldyaXRlKHByb2plY3RfKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoSjJFRVV0aWxzLmlzRUpCQ29tcG9uZW50KHByb2plY3RfKSl7Ci0gICAgICAgICAgICAgICAgYXJ0aWZhY3RFZGl0ID0gRUpCQXJ0aWZhY3RFZGl0LmdldEVKQkFydGlmYWN0RWRpdEZvcldyaXRlKHByb2plY3RfKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChKMkVFVXRpbHMuaXNBcHBDbGllbnRDb21wb25lbnQocHJvamVjdF8pKXsKLSAgICAgICAgICAgICAgICBhcnRpZmFjdEVkaXQgPSBBcHBDbGllbnRBcnRpZmFjdEVkaXQuZ2V0QXBwQ2xpZW50QXJ0aWZhY3RFZGl0Rm9yV3JpdGUocHJvamVjdF8pOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZpbmFsbHkgewotICAgICAgICAgIGlmIChhcnRpZmFjdEVkaXQhPW51bGwpIHsKLSAgICAgICAgICAgICAgYXJ0aWZhY3RFZGl0LnNhdmUobnVsbCk7Ci0gICAgICAgICAgICAgIGFydGlmYWN0RWRpdC5kaXNwb3NlKCk7Ci0gICAgICAgICAgfQotICAgICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2F2ZUVkaXRNb2RlbChJUHJvamVjdCBwcm9qZWN0KXsKLQkgIHByb2plY3RfID0gcHJvamVjdDsKLQkgIHNhdmVFZGl0TW9kZWwoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZEhhbmRsZXJzVG9TZXJ2aWNlUmVmcygpIHsKLSAgICB0cnkgewotICAgICAgRW51bWVyYXRpb24gcmVmc1RvSGFuZGxlcnMgPSBuZXdXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5rZXlzKCk7Ci0gICAgICB3aGlsZSAocmVmc1RvSGFuZGxlcnMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgU2VydmljZVJlZiBzZXJ2aWNlUmVmID0gKFNlcnZpY2VSZWYpIHJlZnNUb0hhbmRsZXJzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlUmVmICE9IG51bGwpIHsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gKExpc3QpIG5ld1dTU2VydmljZVJlZnNUb0hhbmRsZXJzVGFibGVfLmdldChzZXJ2aWNlUmVmKTsKLSAgICAgICAgICBMaXN0IG1vZGVsSGFuZGxlcnMgPSAoTGlzdCkgb2xkV1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8uZ2V0KHNlcnZpY2VSZWYpOwotICAgICAgICAgIG1vZGVsSGFuZGxlcnMuY2xlYXIoKTsKLSAgICAgICAgICBtb2RlbEhhbmRsZXJzLmFkZEFsbChoYW5kbGVycyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0gICAgdGhpcy5wcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfID0gaGFuZGxlckhvbGRlcnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzTXVsdGlwbGVTZWxlY3Rpb24oYm9vbGVhbiBpc011bGl0cGxlU2VsZWN0aW9uKSB7Ci0gICAgdGhpcy5pc011bHRpcGxlU2VsZWN0aW9uXyA9IGlzTXVsaXRwbGVTZWxlY3Rpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTk3Mjk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDcgICAxMzU0MTUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxNyAgIDEzNjM5MC8xMzYxNTkgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTMgICAxMzU1ODEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyNCAgIDEzODA1MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjUgICAxMzc4MzEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUwOSAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MTIgICAxNDUwODEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA3MjUgICAxNDkzNTEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIERlbGV0ZWQgc2VydmljZSBkZWZpbml0aW9uIGtlZXBzIHJlYXBwZWFyaW5nCi0gKiAyMDA2MDgwMyAgIDE1MjQ4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVHlwaW5nIFdTREwgaW4gU2VydmljZSBkZWZpbml0aW9uIGZpZWxkIGlzIHZlcnkgc2xvdwotICogMjAwNjA4MTcgICAxNDAwMTcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGxvbmdlciBwcm9qZWN0IG9yIHNlcnZlci9ydW50aW1lIHN0cmluZ3MgZG8gbm90IHJlc2l6ZSB3aXphcmQKLSAqIDIwMDYwODI1ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICogMjAwNjA5MDcgICAxNTYyMTEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlbGVjdGluZyBzZXJ2aWNlIGRlZmluaXRpb24gaW52YWxpZGF0ZWQgcHJvamVjdCBjb25maWcgd2hlbiBjcmVhdGluZyB3ZWIgc2VydmljZSBqYXZhIGNsaWVudAotICogMjAwNjEyMTIgICAxNTk5MTEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGNoYW5naW5nIHNlcnZpY2UgZGVmaW5pdGlvbiByZXNldHMgc29tZSBjb25maWd1cmF0aW9uIGZpZWxkcwotICogMjAwNjAxMjUgICAxNTk5MTEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFJlbW92ZSB1bnVzZWQgbWV0aG9kIGFuZCBpbXBvcnRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uV1NETFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLkVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuVGltZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlBhZ2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFdpemFyZFdpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvciBpbXBsZW1lbnRzIFJ1bm5hYmxlCi17ICAKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldCBjbGllbnRXaWRnZXRfOwotICBwcml2YXRlIEJ1dHRvbiBvdmVyd3JpdGVCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiBtb25pdG9yU2VydmljZV87Ci0KLSAgcHJpdmF0ZSBUZXh0IHNlcnZpY2VJbXBsXzsKLSAgcHJpdmF0ZSBCdXR0b24gYnJvd3NlQnV0dG9uXzsKLSAgcHJpdmF0ZSBXU0RMU2VsZWN0aW9uRGlhbG9nIHdzZGxEaWFsb2dfOwotICBwcml2YXRlIFN0cmluZyBjb21wb25lbnROYW1lXzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgd2ViU2VydmljZVVSSV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyXzsKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0XzsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIE1vZGlmeUxpc3RlbmVyIG9iamVjdE1vZGlmeUxpc3RlbmVyXyA7Ci0gIHByaXZhdGUgaW50IHZhbGlkYXRpb25TdGF0ZV87Ci0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSB0cnVlOwotICBwcml2YXRlIFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyIHdzZGxWYWxpZGF0b3JXaWRnZXRfOwotCi0gIHByaXZhdGUgVGltZXIgdGltZXJfID0gbnVsbDsKLSAgCi0gIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjAgZm9yIHRoZSBTZXJ2aWNlIEltcGxlbWVuYXRpb24gdGV4dCBmaWVsZCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fVEVYVF9TRVJWSUNFX0lNUEwgPSAiV1NXU0NFTjAwMjAiOwotCi0gIAotICAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDE0IGZvciB0aGUgbW9uaXRvciBzZXJ2aWNlIGNoZWNrYm94IG9mIHRoZSBTY2VuYXJpbyBwYWdlICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0UgPSAiV1NXU0NFTjAwMTQiOwkKLSAgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAzMCBmb3IgdGhlIE92ZXJ3cml0ZSBGaWxlcyBjaGVja2JveCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfT1ZFUldSSVRFID0gIldTV1NDRU4wMDMwIjsJCi0gIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMDEgZm9yIHRoZSBTY2VuYXJpbyBQYWdlICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9QQUdFID0gIldTV1NDRU4wMDAxIjsKLSAgCi0gIC8qKgotICAgKiBSdW4gdGhpcyBDbGllbnRXaXphcmRXaWRnZXQsIHdoaWNoIHZhbGlkYXRlcyB0aGUgZW50cnkgZmllbGQgdmFsdWVzLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkgIHZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCSAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotCSAgaWYgKHZhbGlkT2JqZWN0U2VsZWN0aW9uXykKLQkJICBjYWxsT2JqZWN0VHJhbnNmb3JtYXRpb24ocHJvamVjdF8sIAotCQkJCSAgd3NkbFZhbGlkYXRvcldpZGdldF8uZ2V0Q29tcG9uZW50TmFtZSgpLCAKLQkJCQkgIHdzZGxWYWxpZGF0b3JXaWRnZXRfLmdldFdzZGxVUkkoKSk7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAgIFN0cmluZyAgICAgICBwbHVnaW5JZCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotICAgIFVJVXRpbHMgICAgICB1dGlscyAgICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZCApOwotICAgIHV0aWxzLmNyZWF0ZUluZm9Qb3AocGFyZW50LCBJTkZPUE9QX1dTV1NDRU5fUEFHRSk7Ci0KLSAgICBzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsKLQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLSAgCS8vIENyZWF0ZSB0ZXh0IGZpZWxkIGFuZCBicm93c2UgZm9yIHNlcnZpY2Ugc2VsZWN0aW9uCi0gIAlDb21wb3NpdGUgdHlwZUNvbXBvc2l0ZSA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnQsIDMpOwotCXNlcnZpY2VJbXBsXyA9IHV0aWxzLmNyZWF0ZVRleHQodHlwZUNvbXBvc2l0ZSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VERUYsIAotCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9URVhUX0lNUEwsCi0JCQlJTkZPUE9QX1dTV1NDRU5fVEVYVF9TRVJWSUNFX0lNUEwsIFNXVC5MRUZUIHwgU1dULkJPUkRFUiApOwotCQotCW9iamVjdE1vZGlmeUxpc3RlbmVyXyA9IG5ldyBNb2RpZnlMaXN0ZW5lcigpewotCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCWlmIChzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpLmluZGV4T2YoJzonKSA+IDApIHsKLQkJICAgICAgICB0aW1lcl8gPSBUaW1lci5uZXdJbnN0YW5jZSh0aW1lcl8sIERpc3BsYXkuZ2V0Q3VycmVudCgpLCBDbGllbnRXaXphcmRXaWRnZXQudGhpcyk7Ci0JCSAgICAgICAgdGltZXJfLnN0YXJ0VGltZXIoKTsKLQkJCX0KLQkJICAgIGVsc2UKLQkJICAgICAgICBydW4oKTsKLQkJfQotCX07Ci0JCi0Jc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCi0JYnJvd3NlQnV0dG9uXyA9IHV0aWxzLmNyZWF0ZVB1c2hCdXR0b24odHlwZUNvbXBvc2l0ZSwKLQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fQlJPV1NFLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9CUk9XU0VfSU1QTCwgbnVsbCk7Ci0JCi0JSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotICAgIHdzZGxEaWFsb2dfID0gbmV3IFdTRExTZWxlY3Rpb25EaWFsb2cod29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIAotCQkgIAkJCQkJCW5ldyBQYWdlSW5mbyhDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVElMRV9TRVJWSUNFX0lNUExfU0VMRUNUSU9OLCAiIiwgCi0JCSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkgIAkJCQkJCXsJCi0JCSAgCQkJCQkJCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkgIAkJCQkJCQl7CSAgCQkJCQkJIAotCQkgIAkJCQkJCQkgICByZXR1cm4gbmV3IFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKCk7Ci0JCSAgCQkJCQkJCX0KLQkJICAJCQkJCQl9KSk7CQkKLQlicm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBXU0RMQnJvd3NlTGlzdGVuZXIoKSk7Ci0JCi0JdXRpbHMuY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDEpOwotCQotCUNvbXBvc2l0ZSBjbGllbnRDb21wb3NpdGUgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSwgMCwgMCApOwotCQotICAgIGNsaWVudFdpZGdldF8gPSBuZXcgV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQodHJ1ZSk7Ci0gICAgY2xpZW50V2lkZ2V0Xy5hZGRDb250cm9scyhjbGllbnRDb21wb3NpdGUgLCBzdGF0dXNMaXN0ZW5lciApOwotICAgCi0gICAgLy8gIENyZWF0ZSB0ZXN0IHNlcnZpY2UgY2hlY2sgYm94LgotICAgIENvbXBvc2l0ZSBidXR0b25Hcm91cCA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShjbGllbnRDb21wb3NpdGUsMSk7Ci0gICAgCi0gICAgLy8gQ3JlYXRlIG1vbml0b3Igc2VydmljZSBjaGVjayBib3guCi0gICAgbW9uaXRvclNlcnZpY2VfID0gdXRpbHMuY3JlYXRlQ2hlY2tib3goYnV0dG9uR3JvdXAgLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfTU9OSVRPUl9XRUJTRVJWSUNFLAotICAgIAkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFLAotICAgIAkJCQkJCQkJCUlORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0UpOwotCi0gICAgLy9zaG93IG92ZXJ3cml0ZSBpZiBpdCBpcyBlbmFibGVkIGluIHRoZSBwcmVmZXJlbmNlcwotICAgIGlmIChnZXRSZXNvdXJjZUNvbnRleHQoKS5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKSB7Ci0JCUxhYmVsIHByZWZTZXBhcmF0b3IgPSB1dGlscy5jcmVhdGVIb3Jpem9udGFsU2VwYXJhdG9yKHBhcmVudCwgMSk7Ci0JCXByZWZTZXBhcmF0b3Iuc2V0VGV4dCgiRmlsZSBPcHRpb25zIik7Ci0JCUNvbXBvc2l0ZSBwcmVmQnV0dG9uUGFuZWwgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxKTsKLQkJb3ZlcndyaXRlQnV0dG9uXyA9IHV0aWxzLmNyZWF0ZUNoZWNrYm94KHByZWZCdXR0b25QYW5lbCwKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTLCAKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9PVkVSV1JJVEVfRklMRVMsIAotCQkJCUlORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9PVkVSV1JJVEUpOwotCQlvdmVyd3JpdGVCdXR0b25fLnNldFNlbGVjdGlvbihnZXRSZXNvdXJjZUNvbnRleHQoKQotCQkJCS5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKTsKLQl9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dCggUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgKQotICB7ICAgIAotCSAgcmVzb3VyY2VDb250ZXh0XyA9IGNvbnRleHQ7Ci0gIH0KLSAgIAotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpCi0gIHsgICAKLSAgICBpZiAocmVzb3VyY2VDb250ZXh0XyA9PSBudWxsKSB7Ci0JCXJlc291cmNlQ29udGV4dF8gPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkKLQkJCQkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0JfQotCXJldHVybiByZXNvdXJjZUNvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzICkKLSAgewkgIAotICAgIGNsaWVudFdpZGdldF8uc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoIGlkcyApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotCSAgY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRQcm9qZWN0TmFtZShuYW1lKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUobmFtZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudENvbXBvbmVudFR5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50Q29tcG9uZW50VHlwZShuYW1lKTsJICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50TmVlZEVBUihib29sZWFuIGIpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50TmVlZEVBUihiKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSWQoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRSdW50aW1lSWQoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpCi0gIHsKLQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudEVhclByb2plY3ROYW1lKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdE5hbWUoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRQcm9qZWN0TmFtZSgpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudENvbXBvbmVudFR5cGUoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRDb21wb25lbnRUeXBlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldENsaWVudE5lZWRFQVIoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnROZWVkRUFSKCk7Ci0gIH0KLSAgCi0gcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgdXJpKQotIHsKLSAgICAgd2ViU2VydmljZVVSSV8gPSB1cmk7ICAgIAotIH0KLSAKLXB1YmxpYyB2b2lkIGludGVybmFsaXplKCkgewkJCi0KLQlpZiAod2ViU2VydmljZVVSSV8gPT0gbnVsbCB8fCB3ZWJTZXJ2aWNlVVJJXy5sZW5ndGgoKSA9PSAwKQotCQlyZXR1cm47Ci0KLQlzZXJ2aWNlSW1wbF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQlzZXJ2aWNlSW1wbF8uc2V0VGV4dCh3ZWJTZXJ2aWNlVVJJXyk7ICAgIAkgCi0Jc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQotCUVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IG5ldyBFY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIoKTsKLQl3ZWJTZXJ2aWNlVVJJXyA9IChTdHJpbmcpIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSh3ZWJTZXJ2aWNlVVJJXyk7ICAgIAotfQotIAotIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSB7Ci0gICAgIHByb2plY3RfID0gcHJvamVjdDsKLSB9Ci0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgIGNvbXBvbmVudE5hbWVfID0gbmFtZTsgICAgICAKLSAgfSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0gIHsKLSAgICAgIHJldHVybiB3ZWJTZXJ2aWNlVVJJXyA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLQkgIHJldHVybiBnZXRXZWJTZXJ2aWNlVVJJKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAgICAgcmV0dXJuIHByb2plY3RfOwotICB9Ci0gIAotICAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgIHsKLSAgICAgICByZXR1cm4gY29tcG9uZW50TmFtZV8gOwotICAgfQotICAKLSAgIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0JewotCQlyZXR1cm4gV1NETFBhcnNlckZhY3RvcnkuZ2V0V1NETFBhcnNlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpCi0JewotCQlwYXJzZXJfID0gZ2V0V2ViU2VydmljZXNQYXJzZXIoKTsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRXZWJTZXJ2aWNlc1BhcnNlcihwYXJzZXJfKTsKLQl9Ci0gICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldFR5cGVSdW50aW1lU2VydmVyKCk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudCggQm9vbGVhbiBpbnN0YWxsKQotICB7Ci0gICAgY2xpZW50V2lkZ2V0Xy5zZXRJbnN0YWxsQ2xpZW50KCBpbnN0YWxsICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxDbGllbnQoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRJbnN0YWxsQ2xpZW50KCk7ICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0VGVzdENsaWVudCgpOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIEJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgICBjbGllbnRXaWRnZXRfLnNldFRlc3RDbGllbnQodmFsdWUpOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0Q2xpZW50R2VuZXJhdGlvbigpCi0gIHsKLQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudEdlbmVyYXRpb24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50R2VuZXJhdGlvbihpbnQgdmFsdWUpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50R2VuZXJhdGlvbih2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wKSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0RGV2ZWxvcENsaWVudCggZGV2ZWxvcCApOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3BDbGllbnQoKSB7CQkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0RGV2ZWxvcENsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlKSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0QXNzZW1ibGVDbGllbnQoIGFzc2VtYmxlICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGVDbGllbnQoKSB7CQkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0QXNzZW1ibGVDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGVwbG95Q2xpZW50KGJvb2xlYW4gZGVwbG95KSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0RGVwbG95Q2xpZW50KCBkZXBsb3kgKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lDbGllbnQoKSB7CQkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0RGVwbG95Q2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFN0YXJ0Q2xpZW50KEJvb2xlYW4gc3RhcnQpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRTdGFydENsaWVudCggc3RhcnQgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRTdGFydENsaWVudCgpIHsJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldFN0YXJ0Q2xpZW50KCk7Ci0JfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0TW9uaXRvclNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKG1vbml0b3JTZXJ2aWNlXy5nZXRTZWxlY3Rpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBtb25pdG9yU2VydmljZV8uc2V0U2VsZWN0aW9uKHZhbHVlLmJvb2xlYW5WYWx1ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLQkJCQkKLQkJdmFsaWRPYmplY3RTZWxlY3Rpb25fID0gZmFsc2U7CS8vIGFzc3VtZSBmYWxzZSBhdCBmaXJzdAotCi0JCUlTdGF0dXMgbWlzc2luZ0ZpZWxkU3RhdHVzID0gY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoKTsKLQkJaWYgKG1pc3NpbmdGaWVsZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBtaXNzaW5nRmllbGRTdGF0dXM7Ci0JCX0KLQotCQlJU3RhdHVzIGludmFsaWRTZXJ2aWNlSW1wbFN0YXR1cyA9IGNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCk7Ci0JCWlmIChpbnZhbGlkU2VydmljZUltcGxTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gaW52YWxpZFNlcnZpY2VJbXBsU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBwb3NzaWJsZUVycm9yU3RhdHVzID0gY2hlY2tFcnJvclN0YXR1cygpOwotCQlpZiAocG9zc2libGVFcnJvclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBwb3NzaWJsZUVycm9yU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBwb3NzaWJsZVdhcm5pbmdTdGF0dXMgPSBjaGVja1dhcm5pbmdTdGF0dXMoKTsKLQkJaWYgKHBvc3NpYmxlV2FybmluZ1N0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykgewotCQkJcmV0dXJuIHBvc3NpYmxlV2FybmluZ1N0YXR1czsKLQkJfQotCi0JCS8vIGlmIG5vIGVycm9ycyBvciB3YXJuaW5ncyB3ZXJlIGZvdW5kLCBjbGVhciB0aGUgdmFsaWRhdGlvbiBzdGF0ZS4KLQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9OT05FOwotCQljbGllbnRXaWRnZXRfLnNldFZhbGlkYXRpb25TdGF0ZShWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfTk9ORSk7Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCXByaXZhdGUgSVN0YXR1cyBjaGVja01pc3NpbmdGaWVsZFN0YXR1cygpIHsKLQotCQlpZiAodmFsaWRhdGlvblN0YXRlXyA9PSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMKSB7Ci0JCQlpZiAoc2VydmljZUltcGxfLmdldFRleHQoKS50cmltKCkubGVuZ3RoKCkgPT0gMCkgewotCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX1NFUlZJQ0VfU0VMRUNUSU9OLCBuZXcgU3RyaW5nW117Q29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VJTVBMfSkpOwotCQkJfQotCQl9Ci0JCQotCQlJU3RhdHVzIGNsaWVudE1pc3NpbmdGaWVsZHNTdGF0dXMgPSBjbGllbnRXaWRnZXRfLmNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKCk7Ci0JCWlmIChjbGllbnRNaXNzaW5nRmllbGRzU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuIGNsaWVudE1pc3NpbmdGaWVsZHNTdGF0dXM7Ci0JCX0KLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JfQotCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrRXJyb3JTdGF0dXMoKSB7Ci0JCUlTdGF0dXMgY2xpZW50U2lkZUVycm9yU3RhdHVzID0gY2xpZW50V2lkZ2V0Xy5jaGVja0Vycm9yU3RhdHVzKCk7Ci0JCWlmIChjbGllbnRTaWRlRXJyb3JTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gY2xpZW50U2lkZUVycm9yU3RhdHVzOwotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXByaXZhdGUgSVN0YXR1cyBjaGVja1dhcm5pbmdTdGF0dXMoKSB7Ci0JCUlTdGF0dXMgY2xpZW50V2FybmluZ1N0YXR1cyA9IGNsaWVudFdpZGdldF8uY2hlY2tXYXJuaW5nU3RhdHVzKCk7Ci0JCWlmIChjbGllbnRXYXJuaW5nU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7Ci0JCQlyZXR1cm4gY2xpZW50V2FybmluZ1N0YXR1czsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9CQotCQotCS8qY2FsbCB2YWxpZGF0aW9uIGNvZGUgaW4gdGhlIG9iamVjdCBzZWxlY3Rpb24gd2lkZ2V0IHRvIGVuc3VyZQotCSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VydmljZUltcGxfIGZpZWxkIGFyZSB2YWxpZCovCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCkgewotCQkKLQkJU3RyaW5nIGZpZWxkVGV4dCA9IHNlcnZpY2VJbXBsXy5nZXRUZXh0KCkudHJpbSgpOwotCi0JCWlmICh3c2RsVmFsaWRhdG9yV2lkZ2V0XyA9PSBudWxsKQotCQkJd3NkbFZhbGlkYXRvcldpZGdldF8gPSBuZXcgV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIoKTsKLQkJCi0JCXZhbGlkT2JqZWN0U2VsZWN0aW9uXyA9IHdzZGxWYWxpZGF0b3JXaWRnZXRfLnZhbGlkYXRlKGZpZWxkVGV4dCk7Ci0JCQkJCi0JCWlmICghdmFsaWRPYmplY3RTZWxlY3Rpb25fKQotCQl7Ci0JCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NFUlZJQ0VfREVGKTsJCQkKLQkJfQkJCi0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGNhbGxPYmplY3RUcmFuc2Zvcm1hdGlvbihJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgY29tcG9uZW50TmFtZSwKLQkJCVN0cmluZyB3c2RsVVJJKQotCXsKLQkJICAgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQgd3NkbE91dHB1dENvbW1hbmQgPSBuZXcgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQoKTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0Q29tcG9uZW50TmFtZShjb21wb25lbnROYW1lKTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0UHJvamVjdChwcm9qZWN0KTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0V3NkbFVSSSh3c2RsVVJJKTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0VGVzdFNlcnZpY2UoZ2V0VGVzdFNlcnZpY2UoKS5ib29sZWFuVmFsdWUoKSk7Ci0JCSAgIHdzZGxPdXRwdXRDb21tYW5kLnNldFdlYlNlcnZpY2VzUGFyc2VyKGdldFdlYlNlcnZpY2VzUGFyc2VyKCkpOwotCQkKLSAgICAgICAgICAgd3NkbE91dHB1dENvbW1hbmQuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICAgIAotICAgICAgICAgICBzZXRDb21wb25lbnROYW1lKHdzZGxPdXRwdXRDb21tYW5kLmdldENvbXBvbmVudE5hbWUoKSk7Ci0gICAgICAgICAgIHNldFByb2plY3Qod3NkbE91dHB1dENvbW1hbmQuZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgICAgc2V0V2ViU2VydmljZXNQYXJzZXIod3NkbE91dHB1dENvbW1hbmQuZ2V0V2ViU2VydmljZXNQYXJzZXIoKSk7Ci0gICAgICAgICAgIHNldFdlYlNlcnZpY2VVUkkod3NkbE91dHB1dENvbW1hbmQuZ2V0V3NkbFVSSSgpKTsKLSAgICAgICAgICAgCi0gICAgICAgICAgIC8vIGJ1ZyAxNTk5MTE6IG91ciBzdGFydGluZyBwb2ludCBpcyBhIHdzZGwsIHdlIHNob3VsZCBub3QgbmVlZCB0bwotICAgICAgICAgICAvLyByZWZyZXNoIHRoZSBydW50aW1lIGV2ZXJ5dGltZSB0aGUgdXNlciBzcGVjaWZ5IGEgbmV3IHdzZGwgcGF0aAotICAgICAgICAgICAvLyByZWZyZXNoQ2xpZW50UnVudGltZVNlbGVjdGlvbigpOwotICAgICB9Ci0JCi0gIHByaXZhdGUgY2xhc3MgV1NETEJyb3dzZUxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkKLQl9Ci0JICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCSAgCi0JCSAgIHdzZGxEaWFsb2dfLnNldENvbXBvbmVudE5hbWUoZ2V0Q29tcG9uZW50TmFtZSgpKTsKLQkJICAgd3NkbERpYWxvZ18uc2V0UHJvamVjdChnZXRQcm9qZWN0KCkpOwotCQkgICB3c2RsRGlhbG9nXy5zZXRXZWJTZXJ2aWNlVVJJKCBzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpICk7CQkKLQkJICAgCi0JCSAgIGludCByZXN1bHQgPSB3c2RsRGlhbG9nXy5vcGVuKCk7Ci0JCSAgIAotCQkgICBpZiAocmVzdWx0ID09IERpYWxvZy5PSykKLQkJICAgewotCQkJICAgc2VydmljZUltcGxfLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkgICBzZXJ2aWNlSW1wbF8uc2V0VGV4dCh3c2RsRGlhbG9nXy5nZXREaXNwbGF5YWJsZVNlbGVjdGlvblN0cmluZygpKTsKLQkJCSAgIHNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJICAgCi0JCQkgICAvLyBjYWxsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHRvIGNhcnJ5IG91dCBhbnkgdHJhbnNmb3JtYXRpb24gb24gdGhlIG9iamVjdFNlbGVjdGlvbgotCSAgICAgICAgICAgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKHByb2plY3RfLAotCSAgICAgICAgCQkJd3NkbERpYWxvZ18uZ2V0Q29tcG9uZW50TmFtZSgpLCB3c2RsRGlhbG9nXy5nZXRXZWJTZXJ2aWNlVVJJKCkpOwotCSAgICAgICAgICAgCi0JCSAgICAgICB2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJICAgICAgIGNsaWVudFdpZGdldF8uc2V0VmFsaWRhdGlvblN0YXRlKFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEwpOwotCQkgICAgICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOyAvL3ZhbGlkYXRlIHRoZSBwYWdlCi0JCSAgIH0KLQkgIH0KLQl9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxN2U2MTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNzI4ICAgMTUwNTYwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyOCAgIDE1MTA3OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA0MDIgICAyMjUzNzggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENsaWVudCB3aXphcmQgcnVudGltZS9zZXJ2ZXIgZGVmYXVsdGluZyBpcyBub3QgcmVzcGVjdGluZyB0aGUgcHJlZmVyZW5jZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsgICAgCi0JcHJpdmF0ZSBpbnQgY2xpZW50R2VuZXJhdGlvbl87Ci0JcHJpdmF0ZSBib29sZWFuIGRldmVsb3BDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiBhc3NlbWJsZUNsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuIGRlcGxveUNsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuIGluc3RhbGxDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiBzdGFydENsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuIHRlc3RDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiBjbGllbnRPbmx5XyA9IGZhbHNlOwotCSAgCi0JcHVibGljIENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kKCkgewotCX0KLQkKLQkKLQkvKioKLQkgKiBAcGFyYW0gY2xpZW50T25seSAgU2V0IHRvIHRydWUgZm9yIGlmIGNhbGxlZCBmcm9tIENsaWVudFdpZGdldFdpemFyZAotCSAqLwotCXB1YmxpYyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZChib29sZWFuIGNsaWVudE9ubHkpIHsKLQkJY2xpZW50T25seV8gPSBjbGllbnRPbmx5OwotCX0KLQkKLSAgcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRUZXN0V2ViU2VydmljZSgpICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldE1vbml0b3JTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbGxDbGllbnRfOyAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0UnVuVGVzdENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NlbmFyaW9Db250ZXh0KCkuaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkgOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0Q2xpZW50R2VuZXJhdGlvbigpCi0gIHsKLQkgIHJldHVybiBjbGllbnRHZW5lcmF0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLSAgeyAKLSAgICByZXR1cm4gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotICB9Ci0gIAotICAvLyBDdXJyZW50IFNjZW5hcmlvQ29udGV4dCBpcyB1c2VkIHRvIGRlZmF1bHQgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHdpemFyZC4gIFRoZSAKLSAgLy8gcHJvcGVydGllcyBpbiBTY2VuYXJpb0NvbnRleHQgYXJlIG1hcHBlZCBpbmRpdmlkdWFsLiAgVGhlcmVmb3JlLCBTY2VuYXJpb0NvbnRleHQKLSAgLy8gc2hvdWxkIG5vdCBhbHNvIGJlIG1hcHBlZC4KLSAgcHJvdGVjdGVkIFNjZW5hcmlvQ29udGV4dCBnZXRTY2VuYXJpb0NvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLSAgfQotICAKLSAgLy8gVE9ETyBTZXQgY2xpZW50IG5hbWUgZGVmYXVsdHMgaGVyZS4gIAotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7Ci0gICAgU3RyaW5nIHR5cGUgPSBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpOwotCVN0cmluZyBydW50aW1lICA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldERlZmF1bHRDbGllbnRSdW50aW1lVmFsdWVGb3IodHlwZSk7Ci0gICAgU3RyaW5nIGZhY3RvcnlJRCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldERlZmF1bHRDbGllbnRTZXJ2ZXJWYWx1ZUZvcih0eXBlKTsKLSAgICBUeXBlUnVudGltZVNlcnZlciByZXN1bHQgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLSAgICAKLSAgICByZXN1bHQuc2V0VHlwZUlkKCB0eXBlICk7Ci0gICAgcmVzdWx0LnNldFJ1bnRpbWVJZCggcnVudGltZSApOwotICAgIHJlc3VsdC5zZXRTZXJ2ZXJJZCggZmFjdG9yeUlEICk7IAotICAgIAotICAgIHJldHVybiByZXN1bHQ7ICAKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotCSAgZGVmYXVsdENsaWVudFNjYWxlKCk7Ci0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZGVmYXVsdENsaWVudFNjYWxlKCkgewotCSAgY2xpZW50R2VuZXJhdGlvbl8gPSBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRHZW5lcmF0ZUNsaWVudCgpOwotCSAgCi0JICBpZiAoY2xpZW50T25seV8gJiYgY2xpZW50R2VuZXJhdGlvbl8gPT0gU2NlbmFyaW9Db250ZXh0LldTX05PTkUpIHsKLQkJICBkZXZlbG9wQ2xpZW50XyA9IHRydWU7Ci0JCSAgYXNzZW1ibGVDbGllbnRfID0gdHJ1ZTsKLQkJICBkZXBsb3lDbGllbnRfID0gdHJ1ZTsKLQkJICBjbGllbnRHZW5lcmF0aW9uXyA9IFNjZW5hcmlvQ29udGV4dC5XU19ERVBMT1k7Ci0JICB9IGVsc2UgewotCQkgIGRldmVsb3BDbGllbnRfID0gY2xpZW50R2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A7Ci0JCSAgYXNzZW1ibGVDbGllbnRfID0gY2xpZW50R2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX0FTU0VNQkxFOwotCQkgIGRlcGxveUNsaWVudF8gPSBjbGllbnRHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZOwotCSAgfQotCSAgaW5zdGFsbENsaWVudF8gPSBjbGllbnRHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfSU5TVEFMTDsKLQkgIHN0YXJ0Q2xpZW50XyA9IGNsaWVudEdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVDsKLQkgIHRlc3RDbGllbnRfID0gY2xpZW50R2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX1RFU1Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldERldmVsb3BDbGllbnQoKSB7Ci0JICByZXR1cm4gZGV2ZWxvcENsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlQ2xpZW50KCkgewotCSAgcmV0dXJuIGFzc2VtYmxlQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewotCSAgcmV0dXJuIGRlcGxveUNsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0Q2xpZW50KCkgewotCSAgcmV0dXJuIHN0YXJ0Q2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdENsaWVudCgpIHsKLQkgIHJldHVybiB0ZXN0Q2xpZW50XzsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTUxMWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgoteyAgICAKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuIG1vbml0b3JTZXJ2aWNlOwotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCAgIHJlc291cmNlQ29udGV4dF87Ci0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgY2xpZW50SWRzXzsKLSAgcHJpdmF0ZSBib29sZWFuIGluc3RhbGxDbGllbnRfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgd2ViU2VydmljZVVSSV87Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nIGNvbXBvbmVudE5hbWVfOwotICBwcml2YXRlIGJvb2xlYW4gcnVuVGVzdENsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiBkZXZlbG9wQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGRlcGxveUNsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiBzdGFydENsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0Q2xpZW50XzsgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gdGVzdFNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIGJvb2xlYW4gdGVzdFNlcnZpY2UgKQotICB7Ci0gICAgdGVzdFNlcnZpY2VfID0gdGVzdFNlcnZpY2U7ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0UnVuVGVzdENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gcnVuVGVzdENsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KCBib29sZWFuIHJ1blRlc3RDbGllbnQgKQotICB7Ci0gICAgcnVuVGVzdENsaWVudF8gPSBydW5UZXN0Q2xpZW50OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoIGJvb2xlYW4gaW5zdGFsbENsaWVudCkKLSAgewotICAgIGluc3RhbGxDbGllbnRfID0gaW5zdGFsbENsaWVudDsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotCXJldHVybiBpbnN0YWxsQ2xpZW50XzsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wQ2xpZW50KCkgewotCQlyZXR1cm4gZGV2ZWxvcENsaWVudF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcENsaWVudChib29sZWFuIGRldmVsb3BDbGllbnQpIHsKLQkJdGhpcy5kZXZlbG9wQ2xpZW50XyA9IGRldmVsb3BDbGllbnQ7Ci0JfQkKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlQ2xpZW50XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlQ2xpZW50KSB7Ci0JCXRoaXMuYXNzZW1ibGVDbGllbnRfID0gYXNzZW1ibGVDbGllbnQ7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldERlcGxveUNsaWVudCgpIHsKLQkJcmV0dXJuIGRlcGxveUNsaWVudF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVwbG95Q2xpZW50KGJvb2xlYW4gZGVwbG95Q2xpZW50KSB7Ci0JCXRoaXMuZGVwbG95Q2xpZW50XyA9IGRlcGxveUNsaWVudDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRDbGllbnQoKSB7Ci0JCXJldHVybiBzdGFydENsaWVudF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U3RhcnRDbGllbnQoYm9vbGVhbiBzdGFydENsaWVudCkgewotCQl0aGlzLnN0YXJ0Q2xpZW50XyA9IHN0YXJ0Q2xpZW50OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0Q2xpZW50KCkgewotCQlyZXR1cm4gdGVzdENsaWVudF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGVzdENsaWVudChib29sZWFuIHRlc3RDbGllbnQpIHsKLQkJdGhpcy50ZXN0Q2xpZW50XyA9IHRlc3RDbGllbnQ7Ci0JfQotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKGJvb2xlYW4gbW9uaXRvclNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JTZXJ2aWNlID0gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLSAgewotICAgIAotICAgIHJldHVybiByZXNvdXJjZUNvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoIFJlc291cmNlQ29udGV4dCBjb250ZXh0ICkKLSAgewotICAgIHJlc291cmNlQ29udGV4dF8gPSBjb250ZXh0OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpCi0gIHsgICAgCi0gICAgcmV0dXJuIGNsaWVudElkc187ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoIFR5cGVSdW50aW1lU2VydmVyIGNsaWVudElkcyApCi0gIHsKLSAgICBjbGllbnRJZHNfID0gY2xpZW50SWRzOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgICAgIHJldHVybiB3ZWJTZXJ2aWNlVVJJXyA7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgICAgd2ViU2VydmljZVVSSV8gPSB1cmk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgICAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICAgIHJldHVybiBwcm9qZWN0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgICAgY29tcG9uZW50TmFtZV8gPSBuYW1lOwotICB9IAotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWVfIDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9Db25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MTVjY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICogMjAwNjA0MjYgICAxMzU2MTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyU2VydmljZVJlZkhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLS8qKgotICogQ29uZmlnQ2xpZW50SGFuZGxlcnNUcmVlV2lkZ2V0Ci0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIHsKLQotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQotICBwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnRfOwotICBwcml2YXRlIFN0cmluZyBvdXRwdXRMb2NhdGlvbl87Ci0gIHByaXZhdGUgQ29tcG9zaXRlIHdlYlNlcnZpY2VSZWZDb21wXzsKLSAgcHJpdmF0ZSBDb21ibyB3ZWJTZXJ2aWNlUmVmQ29tYm9fOwotICBwcml2YXRlIFRleHQgd2ViU2VydmljZURlc2NUZXh0XyA9IG51bGw7Ci0gIHByaXZhdGUgVGFibGUgaGFuZGxlcnNUYWJsZV87Ci0gIHByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXJfOwotICBwcml2YXRlIEJ1dHRvbiBhZGRCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiByZW1vdmVCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXzsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgc291cmNlTG9jYXRpb25Db21wXzsKLSAgcHJpdmF0ZSBDb21ibyBzb3VyY2VMb2NhdGlvbkNvbWJvXzsKLQotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIGN1cnJlbnRIU1JIXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcGF0aHNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VsZWN0aW9uXyA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNHZW5Ta2VsZXRvbkVuYWJsZWRfOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUmVmTmFtZV87Ci0gIHByaXZhdGUgaW50IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gMTUwOwotCi0gIC8vIC0tLS1UT09MVElQUyBTZWN0aW9uLS0tLQotICAvKiBDT05URVhUX0lEIEhETFIwMDAxIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0hETFJfV1NfSEFORExFUlMgPSAiSERMUjAwMDEiOyAvLyROT04tTkxTLTEkCi0KLSAgLyogQ09OVEVYVF9JRCBIRExSMDAwMiBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9IRExSX0dFTl9TS0VMRVRPTiA9ICJIRExSMDAwMiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKiBDT05URVhUX0lEIEhETFIwMDAzIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0NPTUJPX1NPVVJDRV9MT0MgPSAiSERMUjAwMDMiOyAvLyROT04tTkxTLTEkCi0KLSAgLyogQ09OVEVYVF9JRCBIRExSMDAwNCBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9XU19DTElFTlRfUkVGID0gIkhETFIwMDA0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHB1YmxpYyBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0KCkgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikgewotCi0gICAgVUlVdGlscyB1aVV0aWxzID0gbmV3IFVJVXRpbHMocGx1Z2luSWRfKTsKLQotICAgIHBhcmVudF8gPSBwYXJlbnQ7Ci0KLSAgICAvLyBXZWIgc2VydmljZSByZWZlcmVuY2UgY29tYm8KLSAgICB3ZWJTZXJ2aWNlUmVmQ29tcF8gPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnRfLCAyKTsKLQotICAgIENvbXBvc2l0ZSBkaXNwbGF5Q29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50XywgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLSAgICBkaXNwbGF5Q29tcC5zZXRMYXlvdXQoZ3JpZGxheW91dCk7Ci0gICAgZGlzcGxheUNvbXAuc2V0TGF5b3V0RGF0YSh1aVV0aWxzLmNyZWF0ZUZpbGxBbGwoKSk7Ci0KLSAgICBmaW5hbCBDb21wb3NpdGUgaGFuZGxlcnNDb21wID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoZGlzcGxheUNvbXAsIDEpOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8R3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HIAotICAgICAgICAgICAgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCB8IEdyaWREYXRhLkZJTExfVkVSVElDQUwpOwotICAgIGhhbmRsZXJzQ29tcC5zZXRMYXlvdXREYXRhKGdyaWRkYXRhKTsKLSAgICBoYW5kbGVyc0NvbXAuc2V0U2l6ZSgxMzAsIDYwMCk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIGJ1dHRvbnNDb21wID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoZGlzcGxheUNvbXAsIDEpOwotICAgIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORyk7Ci0gICAgYnV0dG9uc0NvbXAuc2V0TGF5b3V0RGF0YShncmlkZGF0YSk7Ci0KLSAgICBUZXh0IGhhbmRsZXJzVGV4dCA9IG5ldyBUZXh0KGhhbmRsZXJzQ29tcCwgU1dULlJFQURfT05MWSk7Ci0gICAgaGFuZGxlcnNUZXh0LnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0hBTkRMRVJTX0NPTkZJRyk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLSAgICBnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0gICAgaGFuZGxlcnNUZXh0LnNldExheW91dERhdGEoZ2QpOwotCi0gICAgaGFuZGxlcnNUYWJsZV8gPSB1aVV0aWxzLmNyZWF0ZVRhYmxlKGhhbmRsZXJzQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfRURJVF9XU19IQU5ETEVSUywgSU5GT1BPUF9IRExSX1dTX0hBTkRMRVJTLCBTV1QuTVVMVEkgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuQk9SREVSKTsKLSAgICBoYW5kbGVyc1RhYmxlXy5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotICAgIGhhbmRsZXJzVGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQotICAgIC8vIGVtcHR5IHNwYWNlCi0gICAgTGFiZWwgd3NMYWJlbCA9IG5ldyBMYWJlbChidXR0b25zQ29tcCwgU1dULk5PTkUpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIHdzTGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBCdXR0b24gbW92ZVVwQnV0dG9uID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX01PVkVfVVAsIG51bGwsIG51bGwpOwotICAgIEdyaWREYXRhIG11R3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBQb2ludCBtdXNpemUgPSBtb3ZlVXBCdXR0b24uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICBtb3ZlVXBCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVNb3ZlVXBCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgfQotICAgIH0pOwotCi0gICAgQnV0dG9uIG1vdmVEb3duQnV0dG9uID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX01PVkVfRE9XTiwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgbWRHcmlkZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIFBvaW50IG1kc2l6ZSA9IG1vdmVEb3duQnV0dG9uLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgbW92ZURvd25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVNb3ZlRG93bkJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICAvLyBlbXB0eSBzcGFjZQotICAgIHdzTGFiZWwgPSBuZXcgTGFiZWwoYnV0dG9uc0NvbXAsIFNXVC5OT05FKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMjsKLSAgICB3c0xhYmVsLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgYWRkQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbihidXR0b25zQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9BREQsIG51bGwsIG51bGwpOwotICAgIEdyaWREYXRhIGFkZEdyaWRkYXRhID0gbmV3IEdyaWREYXRhKCk7IAotICAgIFBvaW50IGFkZFNpemUgPSBhZGRCdXR0b25fLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgYWRkQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZW1vdmVCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX1JFTU9WRSwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgcmVtR3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBQb2ludCByZW1TaXplID0gcmVtb3ZlQnV0dG9uXy5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgIHJlbW92ZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVSZW1vdmVCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgfQotICAgIH0pOwotICAgIGVuYWJsZVJlbW92ZShmYWxzZSk7Ci0KLSAgICAvLyBzZXQgdGhlIHdpZHRoIHRvIHRoZSBtYXggb2YgdGhlIGJ1dHRvbiBsYWJlbHMKLSAgICBpbnQgd2lkdGhIaW50ID0gMDsKLSAgICBpbnRbXSBzaXplcyA9IG5ldyBpbnRbXXttdXNpemUueCwgbWRzaXplLngsIGFkZFNpemUueCwgcmVtU2l6ZS54LCAxMDB9OwotICAgIGZvcihpbnQgaiA9IDA7IGogPCBzaXplcy5sZW5ndGg7IGorKykgewotICAgIAlpZiAoc2l6ZXNbal0gPiB3aWR0aEhpbnQpCi0gICAgCXdpZHRoSGludCA9IHNpemVzW2pdOwotICAgIH0KLSAgICBtdUdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICBtZEdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICBhZGRHcmlkZGF0YS53aWR0aEhpbnQgPSB3aWR0aEhpbnQ7Ci0gICAgcmVtR3JpZGRhdGEud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIAotICAgIG1vdmVVcEJ1dHRvbi5zZXRMYXlvdXREYXRhKG11R3JpZGRhdGEpOwotICAgIG1vdmVEb3duQnV0dG9uLnNldExheW91dERhdGEobWRHcmlkZGF0YSk7Ci0gICAgYWRkQnV0dG9uXy5zZXRMYXlvdXREYXRhKGFkZEdyaWRkYXRhKTsKLSAgICByZW1vdmVCdXR0b25fLnNldExheW91dERhdGEocmVtR3JpZGRhdGEpOwotICAgIAotICAgIC8vIHRhYmxlIHN0dWZmCi0gICAgU3RyaW5nW10gY29sdW1uc18gPSBuZXcgU3RyaW5nW10geyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSEFORExFUl9OQU1FLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCTEVfSEFORExFUl9DTEFTU307Ci0KLSAgICBmaW5hbCBUYWJsZUNvbHVtbltdIHRhYmxlQ29scyA9IG5ldyBUYWJsZUNvbHVtbltjb2x1bW5zXy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uc18ubGVuZ3RoOyBpKyspIHsKLSAgICAgIFRhYmxlQ29sdW1uIHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKGhhbmRsZXJzVGFibGVfLCBpKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFRleHQoY29sdW1uc19baV0pOwotICAgICAgdGFibGVDb2x1bW4uc2V0QWxpZ25tZW50KFNXVC5MRUZUKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFdpZHRoKERFRkFVTFRfQ09MVU1OX1dJRFRIKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKLSAgICAgIHRhYmxlQ29sc1tpXSA9IHRhYmxlQ29sdW1uOwotICAgIH0KLQotICAgIGhhbmRsZXJzQ29tcC5hZGRDb250cm9sTGlzdGVuZXIobmV3IENvbnRyb2xBZGFwdGVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZSkgewotICAgICAgICAgIFJlY3RhbmdsZSBhcmVhID0gaGFuZGxlcnNDb21wLmdldENsaWVudEFyZWEoKTsKLSAgICAgICAgICBQb2ludCBwcmVmZXJyZWRTaXplID0gaGFuZGxlcnNUYWJsZV8uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICAgICAgICBpbnQgd2lkdGggPSBhcmVhLndpZHRoIC0gMipoYW5kbGVyc1RhYmxlXy5nZXRCb3JkZXJXaWR0aCgpLTEwOwotICAgICAgICAgIGlmIChwcmVmZXJyZWRTaXplLnkgPiBhcmVhLmhlaWdodCArIGhhbmRsZXJzVGFibGVfLmdldEhlYWRlckhlaWdodCgpKSB7Ci0gICAgICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgc2Nyb2xsYmFyIHdpZHRoIGZyb20gdGhlIHRvdGFsIGNvbHVtbiB3aWR0aAotICAgICAgICAgICAgLy8gaWYgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgd2lsbCBiZSByZXF1aXJlZAotICAgICAgICAgICAgUG9pbnQgdkJhclNpemUgPSBoYW5kbGVyc1RhYmxlXy5nZXRWZXJ0aWNhbEJhcigpLmdldFNpemUoKTsKLSAgICAgICAgICAgIHdpZHRoIC09IHZCYXJTaXplLng7Ci0gICAgICAgICAgfQotICAgICAgICAgIFBvaW50IG9sZFNpemUgPSBoYW5kbGVyc1RhYmxlXy5nZXRTaXplKCk7Ci0gICAgICAgICAgaWYgKG9sZFNpemUueCA+IGFyZWEud2lkdGgpIHsKLSAgICAgICAgICAgIC8vIHRhYmxlIGlzIGdldHRpbmcgc21hbGxlciBzbyBtYWtlIHRoZSBjb2x1bW5zIAotICAgICAgICAgICAgLy8gc21hbGxlciBmaXJzdCBhbmQgdGhlbiByZXNpemUgdGhlIHRhYmxlIHRvCi0gICAgICAgICAgICAvLyBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLSAgICAgICAgICAgIHRhYmxlQ29sc1swXS5zZXRXaWR0aCh3aWR0aC8yKTsKLSAgICAgICAgICAgIHRhYmxlQ29sc1sxXS5zZXRXaWR0aCh3aWR0aCAtIHRhYmxlQ29sc1swXS5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIGhhbmRsZXJzVGFibGVfLnNldFNpemUoYXJlYS53aWR0aCwgYXJlYS5oZWlnaHQpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyB0YWJsZSBpcyBnZXR0aW5nIGJpZ2dlciBzbyBtYWtlIHRoZSB0YWJsZSAKLSAgICAgICAgICAgIC8vIGJpZ2dlciBmaXJzdCBhbmQgdGhlbiBtYWtlIHRoZSBjb2x1bW5zIHdpZGVyCi0gICAgICAgICAgICAvLyB0byBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLSAgICAgICAgICAgICAgaGFuZGxlcnNUYWJsZV8uc2V0U2l6ZShhcmVhLndpZHRoLCBhcmVhLmhlaWdodCk7Ci0gICAgICAgICAgICAgIHRhYmxlQ29sc1swXS5zZXRXaWR0aCh3aWR0aC8yKTsKLSAgICAgICAgICAgICAgdGFibGVDb2xzWzFdLnNldFdpZHRoKHdpZHRoIC0gdGFibGVDb2xzWzBdLmdldFdpZHRoKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7ICAgIAotICAgIAotICAgIHRhYmxlVmlld2VyXyA9IG5ldyBUYWJsZVZpZXdlcihoYW5kbGVyc1RhYmxlXyk7Ci0gICAgQ29udHJvbCBjb250cm9sID0gdGFibGVWaWV3ZXJfLmdldENvbnRyb2woKTsKLQotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgY29udHJvbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgdGFibGVWaWV3ZXJfLnNldENvbHVtblByb3BlcnRpZXMoY29sdW1uc18pOwotICAgIHRhYmxlVmlld2VyXy5zZXRDb250ZW50UHJvdmlkZXIobmV3IExpc3RDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgdGFibGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IExpc3RMYWJlbFByb3ZpZGVyKCkpOwotICAgIHRhYmxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGVuYWJsZVJlbW92ZSh0cnVlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgIAotICAgIC8vIGdlbiBza2VsZXRvbiBjaGVjayBib3gKLSAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3gocGFyZW50XywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9HRU5fU0tFTEVUT04sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX0JVVFRPTl9HRU5fU0tFTEVUT04sIElORk9QT1BfSERMUl9HRU5fU0tFTEVUT04pOwotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgaGFuZGxlR2VuU2tlbGV0b25SYWRpb0J1dHRvbigpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgLy8gc291cmNlIGxvY2F0aW9uIGNvbWJvCi0gICAgc291cmNlTG9jYXRpb25Db21wXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKHBhcmVudF8sIDIpOwotICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyhzb3VyY2VMb2NhdGlvbkNvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ09NQk9fU09VUkNFX0xPQywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfQ09NQk9fU09VUkNFX0xPQywgSU5GT1BPUF9DT01CT19TT1VSQ0VfTE9DLAotICAgICAgICBTV1QuUkVBRF9PTkxZKTsKLSAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZ0KSB7Ci0gICAgICAgIGhhbmRsZVNvdXJjZUxvY2F0aW9uQ29tYm8oZXZ0KTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLy8gQ2FsbGVkIGF0IHN0YXJ0Ci0gIHByaXZhdGUgdm9pZCBwb3B1bGF0ZUhhbmRsZXJzVGFibGUoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIFVJVXRpbHMgdWlVdGlscyA9IG5ldyBVSVV0aWxzKHBsdWdpbklkXyk7Ci0KLSAgICAgIC8vIHByb2Nlc3MgZm9yIG11bHRpcGxlIHNlcnZpY2Ugc2VsZWN0aW9uCi0gICAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pIHsKLSAgICAgICAgd2ViU2VydmljZURlc2NUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dCh3ZWJTZXJ2aWNlUmVmQ29tcF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DT01CT19XU19DTElFTlRfUkVGLCAKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTX0NMSUVOVF9SRUYsIElORk9QT1BfV1NfQ0xJRU5UX1JFRiwgU1dULlJFQURfT05MWSk7Ci0gICAgICAgIGlmIChoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8hPW51bGwpewotICAgICAgICAgIGN1cnJlbnRIU1JIXyA9IGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1swXTsKLSAgICAgICAgICBTdHJpbmcgdGV4dCA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfVEVYVF9OVU1fT0ZfQ0xJRU5UUywgSW50ZWdlci50b1N0cmluZyhoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8ubGVuZ3RoKSk7ICAgICAgICAgIAotICAgICAgICAgIHdlYlNlcnZpY2VEZXNjVGV4dF8uc2V0VGV4dCh0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21wXy5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgcmVmcmVzaCgpOwotCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgCi0gICAgICAgIHdlYlNlcnZpY2VSZWZDb21ib18gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHdlYlNlcnZpY2VSZWZDb21wXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NPTUJPX1dTX0NMSUVOVF9SRUYsIAotICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NfQ0xJRU5UX1JFRiwgSU5GT1BPUF9XU19DTElFTlRfUkVGLCBTV1QuUkVBRF9PTkxZKTsKLSAgICAgICAgd2ViU2VydmljZVJlZkNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLSAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgICAgIGhhbmRsZVdlYlNlcnZpY2VSZWZDb21ibyhldnQpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgU3RyaW5nW10gd3NSZWZOYW1lcyA9IEhhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmdldEFsbFNlcnZpY2VSZWZOYW1lcyhoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8pOyAKLSAgICAgICAgd2ViU2VydmljZVJlZkNvbWJvXy5zZXRJdGVtcyh3c1JlZk5hbWVzKTsKLSAgCi0gICAgICAgIGlmIChoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8ubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHdlYlNlcnZpY2VSZWZDb21ib18uc2VsZWN0KDApOwotICAgICAgICAgIHdlYlNlcnZpY2VSZWZDb21ib18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgaWYgKHNlcnZpY2VSZWZOYW1lXyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSB3ZWJTZXJ2aWNlUmVmQ29tYm9fLmluZGV4T2Yoc2VydmljZVJlZk5hbWVfKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgd2ViU2VydmljZVJlZkNvbWJvXy5zZWxlY3QoaW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB3ZWJTZXJ2aWNlUmVmQ29tYm9fLnNlbGVjdCgwKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gc2V0IGhhbmRsZXIgdGFibGUKLSAgICAgICAgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIgaHNyaCA9IEhhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmdldEZvclNlcnZpY2VSZWZOYW1lKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXywgd2ViU2VydmljZVJlZkNvbWJvXy5nZXRUZXh0KCkpOwotICAgICAgICBpZiAoaHNyaCAhPSBudWxsKSB7Ci0gICAgICAgICAgY3VycmVudEhTUkhfID0gaHNyaDsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gaHNyaC5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICAgIHRhYmxlVmlld2VyXy5zZXRJbnB1dChoYW5kbGVycyk7Ci0gICAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gc2V0IG91dHB1dCBmb2xkZXIKLSAgICAgICAgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIHBhcmVudF8uZ2V0U2hlbGwoKS5zZXRTaXplKDUzMCwgNjUwKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjZ2V0U3RhdHVzKCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLSAgICBJU3RhdHVzIGZpbmFsU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuaW5mb1N0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX01VTFRJUExFX0NMSUVOVFNfQ09ORklHKTsKLSAgICByZXR1cm4gZmluYWxTdGF0dXM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBZGRCdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCi0gICAgQWRkSGFuZGxlckRpYWxvZyBkaWFsb2cgPSBuZXcgQWRkSGFuZGxlckRpYWxvZyhwYXJlbnRfLmdldFNoZWxsKCksIHRydWUpOwotICAgIGRpYWxvZy5jcmVhdGUoKTsKLSAgICBkaWFsb2cuZ2V0U2hlbGwoKS5zZXRTaXplKCA1MDAsIDIwMCApOwotICAgIAotICAgIGludCByZXN1bHQgPSBkaWFsb2cub3BlbigpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBXaW5kb3cuT0spIHsKLSAgICAgIFN0cmluZyBuYW1lID0gZGlhbG9nLmdldE5hbWUoKTsKLSAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBkaWFsb2cuZ2V0Q2xhc3NOYW1lKCk7Ci0KLSAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaGkgPSBuZXcgSGFuZGxlclRhYmxlSXRlbSgpOwotICAgICAgaGkuc2V0SGFuZGxlck5hbWUobmFtZSk7Ci0gICAgICBoaS5zZXRIYW5kbGVyQ2xhc3NOYW1lKGNsYXNzTmFtZSk7Ci0gICAgICAKLSAgICAgIFNlcnZpY2VSZWYgc2VydmljZVJlZiA9IGN1cnJlbnRIU1JIXy5nZXRTZXJ2aWNlUmVmKCk7Ci0gICAgICBoaS5zZXRXc0Rlc2NSZWYoc2VydmljZVJlZik7Ci0gICAgICBjdXJyZW50SFNSSF8uZ2V0SGFuZGxlckxpc3QoKS5hZGQoaGkpOwotICAgIH0KLQotICAgIHJlZnJlc2goKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlbW92ZUJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlTW92ZVVwQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGludCBpbmRleCA9IHRhYmxlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICBpZiAoaW5kZXggPiAwKSB7Ci0gICAgICAgIGlmIChjdXJyZW50SFNSSF8hPW51bGwpIHsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhTUkhfLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGhhbmRsZXJzLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgaGFuZGxlcnMuYWRkKCBpbmRleCAtIDEsIG9iamVjdCk7Ci0gICAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlTW92ZURvd25CdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCi0gICAgaW50IGluZGV4ID0gdGFibGVWaWV3ZXJfLmdldFRhYmxlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpIHsKLSAgICAgIGlmIChjdXJyZW50SFNSSF8hPW51bGwpewotICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhTUkhfLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgIGlmIChpbmRleCA8IGhhbmRsZXJzLnNpemUoKSAtIDEpIHsKLSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaGFuZGxlcnMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICBoYW5kbGVycy5hZGQoaW5kZXggKyAxLCBvYmplY3QpOwotICAgICAgICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVNvdXJjZUxvY2F0aW9uQ29tYm8oU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICBvdXRwdXRMb2NhdGlvbl8gPSBzb3VyY2VMb2NhdGlvbkNvbWJvXy5nZXRUZXh0KCk7Ci0gICAgSVBhdGggb3V0cHV0UGF0aCA9IChJUGF0aCkgcGF0aHNUYWJsZV8uZ2V0KG91dHB1dExvY2F0aW9uXyk7Ci0gICAgY3VycmVudEhTUkhfLnNldFNvdXJjZU91dHB1dFBhdGgob3V0cHV0UGF0aCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVHZW5Ta2VsZXRvblJhZGlvQnV0dG9uKCkgewotICAgIGlmIChnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5pc0VuYWJsZWQoKSkgewotICAgICAgaWYgKGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmdldFNlbGVjdGlvbigpKSB7Ci0gICAgICAgIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfID0gdHJ1ZTsKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICB0aGlzLmlzR2VuU2tlbGV0b25FbmFibGVkXyA9IGZhbHNlOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVXZWJTZXJ2aWNlUmVmQ29tYm8oU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGlmICh3ZWJTZXJ2aWNlUmVmQ29tYm9fIT1udWxsICYmIHdlYlNlcnZpY2VSZWZDb21ib18uaXNFbmFibGVkKCkpIHsKLSAgICAgIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIGhzcmggPSBIYW5kbGVyU2VydmljZVJlZkhlbHBlci5nZXRGb3JTZXJ2aWNlUmVmTmFtZShoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8sIHdlYlNlcnZpY2VSZWZDb21ib18uZ2V0VGV4dCgpKTsKLSAgICAgIGN1cnJlbnRIU1JIXyA9IGhzcmg7ICAgICAgCi0gICAgICByZWZyZXNoKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChpc0dlblNrZWxldG9uRW5hYmxlZF8pewotICAgICAgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKTsKLSAgICB9Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0dlblNrZWxldG9uRW5hYmxlZF8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0dlblNrZWxldG9uRW5hYmxlZF8oKSB7Ci0gICAgcmV0dXJuIGlzR2VuU2tlbGV0b25FbmFibGVkXzsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMaXN0TGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyIHsKLQotICAgIHB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbkluZGV4KSB7Ci0KLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBIYW5kbGVyVGFibGVJdGVtKSB7Ci0gICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pIG9iamVjdDsKLSAgICAgICAgaWYgKGNvbHVtbkluZGV4ID09IDApIHsKLQotICAgICAgICAgIHJldHVybiBodGkuZ2V0SGFuZGxlck5hbWUoKSAhPSBudWxsID8gaHRpLmdldEhhbmRsZXJOYW1lKCkgOiAiIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjb2x1bW5JbmRleCA9PSAxKSB7IHJldHVybiBodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpICE9IG51bGwgPyBodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpIDogIiI7IH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZVJlbW92ZShib29sZWFuIGVuYWJsZWQpIHsKLSAgICByZW1vdmVCdXR0b25fLnNldEVuYWJsZWQoZW5hYmxlZCAmJiAhdGFibGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdENvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyIHsKLQotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgZWxlbWVudCkgewotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBWZWN0b3IpIHsgcmV0dXJuICgoVmVjdG9yKSBlbGVtZW50KS50b0FycmF5KCk7IH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGQsIE9iamVjdCBuZXdvYmopIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0RlbGV0ZWQoT2JqZWN0IG9iamVjdCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZURlbGV0ZUtleVByZXNzZWQoKSB7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0YWJsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikpIHsKLSAgICAgIGludCBzZWxlY3Rpb25JbmRleCA9IGhhbmRsZXJzVGFibGVfLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoY3VycmVudEhTUkhfIT1udWxsKXsKLSAgICAgICAgY3VycmVudEhTUkhfLmdldEhhbmRsZXJMaXN0KCkucmVtb3ZlKHNlbGVjdGlvbkluZGV4KTsKLSAgICAgIH0KLSAgICAgIHJlZnJlc2goKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotICAgIAotICAgIHRyeSB7Ci0gICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQobnVsbCk7Ci0gICAgICBpZiAoY3VycmVudEhTUkhfIT1udWxsKXsKLSAgICAgICAgTGlzdCBoYW5kbGVycyA9IGN1cnJlbnRIU1JIXy5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQoaGFuZGxlcnMpOwotICAgICAgICB0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOyAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRHZW5Ta2VsZXRvbkVuYWJsZWQoYm9vbGVhbiBpc0dlblNrZWxldG9uRW5hYmxlZCkgewotICAgIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfID0gaXNHZW5Ta2VsZXRvbkVuYWJsZWQ7Ci0gICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0U2VsZWN0aW9uKGlzR2VuU2tlbGV0b25FbmFibGVkKTsKLQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuU2tlbGV0b25FbmFibGVkKCkgewotICAgIHJldHVybiB0aGlzLmlzR2VuU2tlbGV0b25FbmFibGVkXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRTb3VyY2VPdXRwdXRMb2NhdGlvbigpewotICAgIGlmIChjdXJyZW50SFNSSF8hPW51bGwpeyAgICAKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBjdXJyZW50SFNSSF8uZ2V0UHJvamVjdCgpOwotICAgICAgaWYgKHByb2plY3QhPW51bGwpewotICAgICAgICBJUGF0aFtdbG9jYXRpb25zID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKHByb2plY3QpOwotICAgICAgICBTdHJpbmdbXSBwYXRocyA9IG5ldyBTdHJpbmdbbG9jYXRpb25zLmxlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgcGF0aHNbaV0gPSBsb2NhdGlvbnNbaV0udG9TdHJpbmcoKTsKLSAgICAgICAgICBwYXRoc1RhYmxlXy5wdXQocGF0aHNbaV0sIGxvY2F0aW9uc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0SXRlbXMocGF0aHMpOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZWxlY3QoMCk7ICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gc2V0IGluIG1vZGVsCi0gICAgICBvdXRwdXRMb2NhdGlvbl8gPSBzb3VyY2VMb2NhdGlvbkNvbWJvXy5nZXRUZXh0KCk7Ci0gICAgICBJUGF0aCBvdXRwdXRQYXRoID0gKElQYXRoKSBwYXRoc1RhYmxlXy5nZXQob3V0cHV0TG9jYXRpb25fKTsKLSAgICAgIGN1cnJlbnRIU1JIXy5zZXRTb3VyY2VPdXRwdXRQYXRoKG91dHB1dFBhdGgpOyAgICAgIAotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIAotICAgKi8KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKXsKLSAgICBwb3B1bGF0ZUhhbmRsZXJzVGFibGUoKTsKLSAgfSAKLSAgCi0gIC8qKgotICAgKiBJbml0aWFsIHNlbGVjdGlvbgotICAgKiBAcGFyYW0gd3NSZWZOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUmVmTmFtZShTdHJpbmcgd3NSZWZOYW1lKSB7Ci0gICAgc2VydmljZVJlZk5hbWVfID0gd3NSZWZOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIHRydWUgaWYgbXVsdGlwbGUgY2xpZW50cyBhcmUgc2VsZWN0ZWQKLSAgICogQHBhcmFtIGlzTXVsaXRwbGVTZWxlY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElzTXVsdGlwbGVTZWxlY3Rpb24oYm9vbGVhbiBpc011bGl0cGxlU2VsZWN0aW9uKSB7Ci0gICAgdGhpcy5pc011bHRpcGxlU2VsZWN0aW9uXyA9IGlzTXVsaXRwbGVTZWxlY3Rpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfID0gaGFuZGxlckhvbGRlcnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBIYW5kbGVyU2VydmljZVJlZkhvbGRlcltdIGdldEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKCl7Ci0gICAgcmV0dXJuIHRoaXMuaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdiMTVlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICogMjAwNjA0MjYgICAxMzU2MTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUyOSAgIDE0MzUxOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Qb3J0Q29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyRGVzY3JpcHRpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotLyoqCi0gKiBDb25maWdTZXJ2aWNlSGFuZGxlcnNUcmVlV2lkZ2V0Ci0gKiAKLSAqLwotcHVibGljIGNsYXNzIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIHsKLQotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudF87Ci0gIHByaXZhdGUgVGFibGUgaGFuZGxlcnNUYWJsZV87Ci0gIHByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXJfOwotICBwcml2YXRlIENvbXBvc2l0ZSB3ZWJTZXJ2aWNlRGVzY0NvbXBfOwotICBwcml2YXRlIENvbWJvIHdlYlNlcnZpY2VEZXNjQ29tYm9fID0gbnVsbDsKLSAgcHJpdmF0ZSBUZXh0IHdlYlNlcnZpY2VEZXNjVGV4dF8gPSBudWxsOwotICBwcml2YXRlIEJ1dHRvbiBhZGRCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiByZW1vdmVCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXzsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgc291cmNlTG9jYXRpb25Db21wXzsKLSAgcHJpdmF0ZSBDb21ibyBzb3VyY2VMb2NhdGlvbkNvbWJvXzsKLSAgCi0gIHByaXZhdGUgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXzsKLSAgcHJpdmF0ZSBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgY3VycmVudEhESF87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHBhdGhzVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOyAgLy8gYXZhaWxhYmxlIHBhdGhzIGZvciBjb21ibyAgCi0gIHByaXZhdGUgU3RyaW5nIG91dHB1dExvY2F0aW9uXzsgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgcGF0aCBmcm9tIGNvbWJvCi0gIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uTmFtZV8gPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gaXNNdWx0aXBsZVNlbGVjdGlvbl8gPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzR2VuU2tlbGV0b25FbmFibGVkXzsKLQotICBwcml2YXRlIGludCBERUZBVUxUX0NPTFVNTl9XSURUSCA9IDEwMDsKLQotICAvLyAtLS0tVE9PTFRJUFMgU2VjdGlvbi0tLS0KLSAgLyogQ09OVEVYVF9JRCBTSExEMDAwMSBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9IRExSX1dTX0hBTkRMRVJTID0gIlNIREwwMDAxIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qIENPTlRFWFRfSUQgU0hETDAwMDIgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfSERMUl9HRU5fU0tFTEVUT04gPSAiU0hETDAwMDIiOyAvLyROT04tTkxTLTEkCi0KLSAgLyogQ09OVEVYVF9JRCBTSERMMDAwMyBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9DT01CT19TT1VSQ0VfTE9DID0gIlNIREwwMDAzIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qIENPTlRFWFRfSUQgU0hETDAwMDQgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfV1NfU0VSVklDRV9ERVNDID0gIlNIREwwMDA0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHB1YmxpYyBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldCgpIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpIHsKLSAgICBVSVV0aWxzIHVpVXRpbHMgPSBuZXcgVUlVdGlscyhwbHVnaW5JZF8pOwotCi0gICAgcGFyZW50XyA9IHBhcmVudDsKLQotICAgIC8vIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNvbXBvc2l0ZSAoY29tYm8vdGV4dCB0byBiZSBjcmVhdGVkIGxhdGVyKQotICAgIHdlYlNlcnZpY2VEZXNjQ29tcF8gPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnRfLCAyKTsKLSAgICAKLSAgICBDb21wb3NpdGUgZGlzcGxheUNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudF8sIFNXVC5OT05FKTsKLQotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLSAgICBkaXNwbGF5Q29tcC5zZXRMYXlvdXQoZ3JpZGxheW91dCk7Ci0gICAgZGlzcGxheUNvbXAuc2V0TGF5b3V0RGF0YSh1aVV0aWxzLmNyZWF0ZUZpbGxBbGwoKSk7Ci0KLSAgICBmaW5hbCBDb21wb3NpdGUgaGFuZGxlcnNDb21wID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoZGlzcGxheUNvbXAsIDEpOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORwotICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMIHwgR3JpZERhdGEuRklMTF9WRVJUSUNBTCk7Ci0gICAgaGFuZGxlcnNDb21wLnNldExheW91dERhdGEoZ3JpZGRhdGEpOwotICAgIGhhbmRsZXJzQ29tcC5zZXRTaXplKDEzMCwgNjAwKTsKLSAgICAKLSAgICBDb21wb3NpdGUgYnV0dG9uc0NvbXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShkaXNwbGF5Q29tcCwgMSk7Ci0gICAgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKTsKLSAgICBidXR0b25zQ29tcC5zZXRMYXlvdXREYXRhKGdyaWRkYXRhKTsKLQotICAgIFRleHQgaGFuZGxlcnNUZXh0ID0gbmV3IFRleHQoaGFuZGxlcnNDb21wLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBoYW5kbGVyc1RleHQuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSEFORExFUlNfQ09ORklHKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMjsKLSAgICBoYW5kbGVyc1RleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgCi0gICAgaGFuZGxlcnNUYWJsZV8gPSB1aVV0aWxzLmNyZWF0ZVRhYmxlKGhhbmRsZXJzQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfRURJVF9XU19IQU5ETEVSUywgSU5GT1BPUF9IRExSX1dTX0hBTkRMRVJTLCBTV1QuTVVMVEkKLSAgICAgICAgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuQk9SREVSKTsKLSAgICBoYW5kbGVyc1RhYmxlXy5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotICAgIGhhbmRsZXJzVGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQotICAgIC8vIGVtcHR5IHNwYWNlCi0gICAgTGFiZWwgd3NMYWJlbCA9IG5ldyBMYWJlbChidXR0b25zQ29tcCwgU1dULk5PTkUpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIHdzTGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBCdXR0b24gbW92ZVVwQnV0dG9uID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX01PVkVfVVAsIG51bGwsIG51bGwpOwotICAgIEdyaWREYXRhIG11R3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBQb2ludCBtdXNpemUgPSBtb3ZlVXBCdXR0b24uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICBtb3ZlVXBCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVNb3ZlVXBCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgfQotICAgIH0pOwotCi0gICAgQnV0dG9uIG1vdmVEb3duQnV0dG9uID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX01PVkVfRE9XTiwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgbWRHcmlkZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIFBvaW50IG1kc2l6ZSA9IG1vdmVEb3duQnV0dG9uLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgbW92ZURvd25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVNb3ZlRG93bkJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICAvLyBlbXB0eSBzcGFjZQotICAgIHdzTGFiZWwgPSBuZXcgTGFiZWwoYnV0dG9uc0NvbXAsIFNXVC5OT05FKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMjsKLSAgICB3c0xhYmVsLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgYWRkQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbihidXR0b25zQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9BREQsIG51bGwsIG51bGwpOwotICAgIEdyaWREYXRhIGFkZEdyaWRkYXRhID0gbmV3IEdyaWREYXRhKCk7IAotICAgIFBvaW50IGFkZFNpemUgPSBhZGRCdXR0b25fLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgYWRkQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZW1vdmVCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX1JFTU9WRSwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgcmVtR3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBQb2ludCByZW1TaXplID0gcmVtb3ZlQnV0dG9uXy5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgIHJlbW92ZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVSZW1vdmVCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgfQotICAgIH0pOwotICAgIGVuYWJsZVJlbW92ZShmYWxzZSk7Ci0KLSAgICBpbnQgd2lkdGhIaW50ID0gMDsKLSAgICBpbnRbXSBzaXplcyA9IG5ldyBpbnRbXXttdXNpemUueCwgbWRzaXplLngsIGFkZFNpemUueCwgcmVtU2l6ZS54LCAxMDB9OwotICAgIGZvcihpbnQgaiA9IDA7IGogPCBzaXplcy5sZW5ndGg7IGorKykgewotICAgIAlpZiAoc2l6ZXNbal0gPiB3aWR0aEhpbnQpCi0gICAgCXdpZHRoSGludCA9IHNpemVzW2pdOwotICAgIH0KLSAgICBtdUdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICBtZEdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICBhZGRHcmlkZGF0YS53aWR0aEhpbnQgPSB3aWR0aEhpbnQ7Ci0gICAgcmVtR3JpZGRhdGEud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIAotICAgIG1vdmVVcEJ1dHRvbi5zZXRMYXlvdXREYXRhKG11R3JpZGRhdGEpOwotICAgIG1vdmVEb3duQnV0dG9uLnNldExheW91dERhdGEobWRHcmlkZGF0YSk7Ci0gICAgYWRkQnV0dG9uXy5zZXRMYXlvdXREYXRhKGFkZEdyaWRkYXRhKTsKLSAgICByZW1vdmVCdXR0b25fLnNldExheW91dERhdGEocmVtR3JpZGRhdGEpOwotICAgIAotICAgIC8vIHRhYmxlIHN0dWZmIGhlcmUKLSAgICBTdHJpbmdbXSBjb2x1bW5zXyA9IG5ldyBTdHJpbmdbXSB7IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9IQU5ETEVSX05BTUUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJMRV9IQU5ETEVSX0NMQVNTLAotICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSEFORExFUl9QT1JUfTsKLQotICAgIGZpbmFsIFRhYmxlQ29sdW1uW10gdGFibGVDb2xzID0gbmV3IFRhYmxlQ29sdW1uW2NvbHVtbnNfLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zXy5sZW5ndGg7IGkrKykgewotICAgICAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4oaGFuZGxlcnNUYWJsZV8sIFNXVC5MRUZUKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFRleHQoY29sdW1uc19baV0pOwotICAgICAgdGFibGVDb2x1bW4uc2V0QWxpZ25tZW50KFNXVC5MRUZUKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFdpZHRoKERFRkFVTFRfQ09MVU1OX1dJRFRIKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKLSAgICAgIHRhYmxlQ29sc1tpXSA9IHRhYmxlQ29sdW1uOwotICAgIH0KLSAgICBoYW5kbGVyc0NvbXAuYWRkQ29udHJvbExpc3RlbmVyKG5ldyBDb250cm9sQWRhcHRlcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGUpIHsKLSAgICAgICAgUmVjdGFuZ2xlIGFyZWEgPSBoYW5kbGVyc0NvbXAuZ2V0Q2xpZW50QXJlYSgpOwotICAgICAgICBQb2ludCBwcmVmZXJyZWRTaXplID0gaGFuZGxlcnNUYWJsZV8uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICAgICAgaW50IHdpZHRoID0gYXJlYS53aWR0aCAtIDIgKiBoYW5kbGVyc1RhYmxlXy5nZXRCb3JkZXJXaWR0aCgpIC0gMTA7Ci0gICAgICAgIGlmIChwcmVmZXJyZWRTaXplLnkgPiBhcmVhLmhlaWdodCArIGhhbmRsZXJzVGFibGVfLmdldEhlYWRlckhlaWdodCgpKSB7Ci0gICAgICAgICAgLy8gU3VidHJhY3QgdGhlIHNjcm9sbGJhciB3aWR0aCBmcm9tIHRoZSB0b3RhbCBjb2x1bW4gd2lkdGgKLSAgICAgICAgICAvLyBpZiBhIHZlcnRpY2FsIHNjcm9sbGJhciB3aWxsIGJlIHJlcXVpcmVkCi0gICAgICAgICAgUG9pbnQgdkJhclNpemUgPSBoYW5kbGVyc1RhYmxlXy5nZXRWZXJ0aWNhbEJhcigpLmdldFNpemUoKTsKLSAgICAgICAgICB3aWR0aCAtPSB2QmFyU2l6ZS54OwotICAgICAgICB9Ci0gICAgICAgIFBvaW50IG9sZFNpemUgPSBoYW5kbGVyc1RhYmxlXy5nZXRTaXplKCk7Ci0gICAgICAgIGlmIChvbGRTaXplLnggPiBhcmVhLndpZHRoKSB7Ci0gICAgICAgICAgLy8gdGFibGUgaXMgZ2V0dGluZyBzbWFsbGVyIHNvIG1ha2UgdGhlIGNvbHVtbnMKLSAgICAgICAgICAvLyBzbWFsbGVyIGZpcnN0IGFuZCB0aGVuIHJlc2l6ZSB0aGUgdGFibGUgdG8KLSAgICAgICAgICAvLyBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLSAgICAgICAgICB0YWJsZUNvbHNbMF0uc2V0V2lkdGgod2lkdGggLyAzKTsKLSAgICAgICAgICB0YWJsZUNvbHNbMV0uc2V0V2lkdGgod2lkdGggLyAzKTsKLSAgICAgICAgICB0YWJsZUNvbHNbMl0uc2V0V2lkdGgod2lkdGggLSAodGFibGVDb2xzWzBdLmdldFdpZHRoKCkgKyB0YWJsZUNvbHNbMV0uZ2V0V2lkdGgoKSkpOwotICAgICAgICAgIGhhbmRsZXJzVGFibGVfLnNldFNpemUoYXJlYS53aWR0aCwgYXJlYS5oZWlnaHQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIC8vIHRhYmxlIGlzIGdldHRpbmcgYmlnZ2VyIHNvIG1ha2UgdGhlIHRhYmxlCi0gICAgICAgICAgLy8gYmlnZ2VyIGZpcnN0IGFuZCB0aGVuIG1ha2UgdGhlIGNvbHVtbnMgd2lkZXIKLSAgICAgICAgICAvLyB0byBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLSAgICAgICAgICBoYW5kbGVyc1RhYmxlXy5zZXRTaXplKGFyZWEud2lkdGgsIGFyZWEuaGVpZ2h0KTsKLSAgICAgICAgICB0YWJsZUNvbHNbMF0uc2V0V2lkdGgod2lkdGggLyAzKTsKLSAgICAgICAgICB0YWJsZUNvbHNbMV0uc2V0V2lkdGgod2lkdGggLyAzKTsKLSAgICAgICAgICB0YWJsZUNvbHNbMl0uc2V0V2lkdGgod2lkdGggLSAodGFibGVDb2xzWzBdLmdldFdpZHRoKCkgKyB0YWJsZUNvbHNbMV0uZ2V0V2lkdGgoKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0YWJsZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIoaGFuZGxlcnNUYWJsZV8pOwotICAgIENvbnRyb2wgY29udHJvbCA9IHRhYmxlVmlld2VyXy5nZXRDb250cm9sKCk7Ci0KLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIHRhYmxlVmlld2VyXy5zZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbHVtbnNfKTsKLSAgICB0YWJsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBMaXN0Q29udGVudFByb3ZpZGVyKCkpOwotICAgIHRhYmxlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMaXN0TGFiZWxQcm92aWRlcigpKTsKLSAgICB0YWJsZVZpZXdlcl8uYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotICAgICAgICBlbmFibGVSZW1vdmUodHJ1ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3gocGFyZW50XywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9HRU5fU0tFTEVUT04sCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX0JVVFRPTl9HRU5fU0tFTEVUT04sIElORk9QT1BfSERMUl9HRU5fU0tFTEVUT04pOwotICAgIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORyB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwpOwotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLnNldExheW91dERhdGEoZ3JpZGRhdGEpOwotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgaGFuZGxlR2VuU2tlbGV0b25SYWRpb0J1dHRvbigpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgc291cmNlTG9jYXRpb25Db21wXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKHBhcmVudF8sIDIpOwotICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyhzb3VyY2VMb2NhdGlvbkNvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ09NQk9fU09VUkNFX0xPQywKLSAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfQ09NQk9fU09VUkNFX0xPQywgSU5GT1BPUF9DT01CT19TT1VSQ0VfTE9DLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZ0KSB7Ci0gICAgICAgIGhhbmRsZVNvdXJjZUxvY2F0aW9uQ29tYm8oZXZ0KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8vIENhbGxlZCBhdCBzdGFydCBhbmQgb25seSBmb3Igc2luZ2xlIHNlcnZpY2Ugc2VsZWN0aW9uIAotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVIYW5kbGVyc1RhYmxlKCkgewotICAgIHRyeSB7Ci0gICAgICBVSVV0aWxzIHVpVXRpbHMgPSBuZXcgVUlVdGlscyhwbHVnaW5JZF8pOwotICAgICAKLSAgICAgIC8vIHByb2Nlc3MgZm9yIG11bHRpcGxlIHNlcnZpY2Ugc2VsZWN0aW9uCi0gICAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pIHsKLSAgICAgICAgcGFyZW50Xy5nZXRTaGVsbCgpLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19NVUxUSVBMRV9TRVJWSUNFU19DT05GSUcpOwotICAgICAgICAKLSAgICAgICAgd2ViU2VydmljZURlc2NUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dCh3ZWJTZXJ2aWNlRGVzY0NvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ09NQk9fV1NfU0VSVklDRV9ERVNDLCAKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTX1NFUlZJQ0VfREVTQywgSU5GT1BPUF9XU19TRVJWSUNFX0RFU0MsIFNXVC5SRUFEX09OTFkpOwotICAgICAgICBpZiAoaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyE9bnVsbCl7Ci0gICAgICAgICAgY3VycmVudEhESF8gPSBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfWzBdOwotICAgICAgICAgIFN0cmluZyB0ZXh0ID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19URVhUX05VTV9PRl9TRVJWSUNFUywgSW50ZWdlci50b1N0cmluZyhoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLmxlbmd0aCkpOwotICAgICAgICAgIHdlYlNlcnZpY2VEZXNjVGV4dF8uc2V0VGV4dCh0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbXBfLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICByZWZyZXNoKCk7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvLyBwb3B1bGF0ZSB0aGUgdGFibGUgZm9yIGEgc2luZ2xlIHNlcnZpY2Ugc2VsZWN0aW9uCi0gICAgICAgIAotICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8od2ViU2VydmljZURlc2NDb21wXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NPTUJPX1dTX1NFUlZJQ0VfREVTQywKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTX1NFUlZJQ0VfREVTQywgSU5GT1BPUF9XU19TRVJWSUNFX0RFU0MsIFNXVC5SRUFEX09OTFkpOwotICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLSAgICAKLSAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgICAgIGhhbmRsZVdlYlNlcnZpY2VEZXNjQ29tYm8oZXZ0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nW10gd3NEZXNjTmFtZXMgPSBIYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIuZ2V0QWxsRGVzY3JpcHRpb25OYW1lcyhoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfKTsKLSAgICAgICAgd2ViU2VydmljZURlc2NDb21ib18uc2V0SXRlbXMod3NEZXNjTmFtZXMpOwotCi0gICAgICAgIGlmIChoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5zZWxlY3QoMCk7Ci0gICAgICAgICAgd2ViU2VydmljZURlc2NDb21ib18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgaWYgKGRlc2NyaXB0aW9uTmFtZV8gIT0gbnVsbCkgewotICAgICAgICAgICAgaW50IGluZGV4ID0gd2ViU2VydmljZURlc2NDb21ib18uaW5kZXhPZihkZXNjcmlwdGlvbk5hbWVfKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgd2ViU2VydmljZURlc2NDb21ib18uc2VsZWN0KGluZGV4KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgd2ViU2VydmljZURlc2NDb21ib18uc2VsZWN0KDApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBzZXQgRGVzY3JpcHRpb25zCi0gICAgICAgIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlciBoZGggPSBIYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIuZ2V0Rm9yRGVzY3JpcHRpb25OYW1lKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8sIHdlYlNlcnZpY2VEZXNjQ29tYm9fLmdldFRleHQoKSk7Ci0gICAgICAgIGlmIChoZGghPW51bGwpewotICAgICAgICAgIGN1cnJlbnRIREhfID0gaGRoOwotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBoZGguZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQoaGFuZGxlcnMpOwotICAgICAgICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gc2V0IG91dHB1dCBmb2xkZXIKLSAgICAgICAgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKTsgIAotICAgICAgfQotICAgICAgcGFyZW50Xy5nZXRTaGVsbCgpLnNldFNpemUoNTMwLCA2NTApOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCi0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yI2dldFN0YXR1cygpCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSB7Ci0gICAgSVN0YXR1cyBmaW5hbFN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaWYgKGlzTXVsdGlwbGVTZWxlY3Rpb25fKQotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmluZm9TdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19NVUxUSVBMRV9TRVJWSUNFU19DT05GSUcpOwotICAgIHJldHVybiBmaW5hbFN0YXR1czsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgQWRkSGFuZGxlckRpYWxvZyBkaWFsb2cgPSBuZXcgQWRkSGFuZGxlckRpYWxvZyhwYXJlbnRfLmdldFNoZWxsKCksIGZhbHNlKTsKLSAgICBkaWFsb2cuc2V0SXNNdWx0aXBsZVNlcnZpY2VzKGlzTXVsdGlwbGVTZWxlY3Rpb25fKTsKLSAgICBkaWFsb2cuY3JlYXRlKCk7Ci0gICAgCi0gICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHNlcnZpY2VEZXNjID0gbnVsbDsKLSAgICBpZiAoIWlzTXVsdGlwbGVTZWxlY3Rpb25fICl7Ci0gICAgICBpZiAoY3VycmVudEhESF8hPW51bGwpIHsKLSAgICAgICAgc2VydmljZURlc2MgPSAgY3VycmVudEhESF8uZ2V0RGVzY3JpcHRpb25PYmplY3QoKTsKLSAgICAgICAgU3RyaW5nW10gcG9ydE5hbWVzID0gZ2V0UG9ydENvbXBvbmVudE5hbWVzKHNlcnZpY2VEZXNjKTsKLSAgICAgICAgZGlhbG9nLnNldFBvcnROYW1lcyhwb3J0TmFtZXMpOwotICAgICAgfQotICAgIH0KLQotICAgIGRpYWxvZy5nZXRTaGVsbCgpLnNldFNpemUoNTAwLCAyMzApOwotICAgIAotICAgIGludCByZXN1bHQgPSBkaWFsb2cub3BlbigpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBXaW5kb3cuT0spIHsKLSAgICAgIFN0cmluZyBuYW1lID0gZGlhbG9nLmdldE5hbWUoKTsKLSAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBkaWFsb2cuZ2V0Q2xhc3NOYW1lKCk7Ci0gICAgICBTdHJpbmcgcG9ydCA9IGRpYWxvZy5nZXRQb3J0TmFtZSgpOwotICAgICAgaWYgKHBvcnQgPT0gbnVsbCkKLSAgICAgICAgcG9ydCA9ICIqIjsKLQotICAgICAgSGFuZGxlclRhYmxlSXRlbSBoaSA9IG5ldyBIYW5kbGVyVGFibGVJdGVtKCk7Ci0gICAgICBoaS5zZXRIYW5kbGVyTmFtZShuYW1lKTsKLSAgICAgIGhpLnNldEhhbmRsZXJDbGFzc05hbWUoY2xhc3NOYW1lKTsKLSAgICAgIGhpLnNldFBvcnROYW1lKHBvcnQpOwotCi0gICAgICBpZiAoc2VydmljZURlc2MhPW51bGwpewotICAgICAgICBoaS5zZXRXc0Rlc2NSZWYoc2VydmljZURlc2MpOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoY3VycmVudEhESF8hPW51bGwpewotICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhESF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgaGFuZGxlcnMuYWRkKGhpKTsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHJlZnJlc2goKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nW10gZ2V0UG9ydENvbXBvbmVudE5hbWVzKFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3ZWJTZXJ2aWNlRGVzYykgewotCi0gICAgTGlzdCBwb3J0cyA9IHdlYlNlcnZpY2VEZXNjLmdldFBvcnRDb21wb25lbnRzKCk7Ci0gICAgaWYgKHBvcnRzICE9IG51bGwpIHsKLSAgICAgIFN0cmluZ1tdIHBvcnROYW1lcyA9IG5ldyBTdHJpbmdbcG9ydHMuc2l6ZSgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgUG9ydENvbXBvbmVudCBwYyA9IChQb3J0Q29tcG9uZW50KSBwb3J0cy5nZXQoaSk7Ci0gICAgICAgIFN0cmluZyBwY05hbWUgPSBwYy5nZXRQb3J0Q29tcG9uZW50TmFtZSgpOwotICAgICAgICBwb3J0TmFtZXNbaV0gPSBwY05hbWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcG9ydE5hbWVzOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlbW92ZUJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlTW92ZVVwQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGludCBpbmRleCA9IHRhYmxlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICBpZiAoaW5kZXggPiAwKSB7Ci0gICAgICAgIGlmIChjdXJyZW50SERIXyE9bnVsbCl7Ci0gICAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhESF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBoYW5kbGVycy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgICAgaGFuZGxlcnMuYWRkKGluZGV4IC0gMSwgb2JqZWN0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVNb3ZlRG93bkJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0KLSAgICBpbnQgaW5kZXggPSB0YWJsZVZpZXdlcl8uZ2V0VGFibGUoKS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmIChpbmRleCAhPSAtMSkgewotICAgICAgaWYgKGN1cnJlbnRIREhfIT1udWxsKXsKLSAgICAgICAgTGlzdCBoYW5kbGVycyA9IGN1cnJlbnRIREhfLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgIGlmIChpbmRleCA8IGhhbmRsZXJzLnNpemUoKSAtIDEpIHsKLSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaGFuZGxlcnMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICBoYW5kbGVycy5hZGQoaW5kZXgrMSwgb2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICB0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlU291cmNlTG9jYXRpb25Db21ibyhTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgIG91dHB1dExvY2F0aW9uXyA9IHNvdXJjZUxvY2F0aW9uQ29tYm9fLmdldFRleHQoKTsKLSAgICBJUGF0aCBvdXRwdXRQYXRoID0gKElQYXRoKSBwYXRoc1RhYmxlXy5nZXQob3V0cHV0TG9jYXRpb25fKTsKLSAgICBjdXJyZW50SERIXy5zZXRTb3VyY2VPdXRwdXRQYXRoKG91dHB1dFBhdGgpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZUdlblNrZWxldG9uUmFkaW9CdXR0b24oKSB7Ci0gICAgaWYgKGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmlzRW5hYmxlZCgpKSB7Ci0gICAgICBpZiAoZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpIHsKLSAgICAgICAgdGhpcy5pc0dlblNrZWxldG9uRW5hYmxlZF8gPSB0cnVlOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRFbmFibGVkKHRydWUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfID0gZmFsc2U7Ci0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVdlYlNlcnZpY2VEZXNjQ29tYm8oU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGlmICh3ZWJTZXJ2aWNlRGVzY0NvbWJvXyE9bnVsbCAmJiB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5pc0VuYWJsZWQoKSkgewotICAgICAgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyIGhkaCA9IEhhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5nZXRGb3JEZXNjcmlwdGlvbk5hbWUoaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXywgd2ViU2VydmljZURlc2NDb21ib18uZ2V0VGV4dCgpKTsKLSAgICAgIGN1cnJlbnRIREhfID0gaGRoOyAgICAgIAotICAgICAgcmVmcmVzaCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZW5Ta2VsZXRvbkVuYWJsZWRfKXsKLSAgICAgIHNldFNvdXJjZU91dHB1dExvY2F0aW9uKCk7Ci0gICAgfQotICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaXNHZW5Ta2VsZXRvbkVuYWJsZWRfLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNHZW5Ta2VsZXRvbkVuYWJsZWRfKCkgewotICAgIHJldHVybiBpc0dlblNrZWxldG9uRW5hYmxlZF87Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdExhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlciB7Ci0KLSAgICBwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBvYmplY3QsIGludCBjb2x1bW5JbmRleCkgewotCi0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSGFuZGxlclRhYmxlSXRlbSkgewotICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKSBvYmplY3Q7Ci0gICAgICAgIGlmIChjb2x1bW5JbmRleCA9PSAwKSB7Ci0gICAgICAgICAgcmV0dXJuIGh0aS5nZXRIYW5kbGVyTmFtZSgpICE9IG51bGwgPyBodGkuZ2V0SGFuZGxlck5hbWUoKSA6ICIiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvbHVtbkluZGV4ID09IDEpIHsKLSAgICAgICAgICByZXR1cm4gaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSAhPSBudWxsID8gaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSA6ICIiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHJldHVybiBodGkuZ2V0UG9ydE5hbWUoKSAhPSBudWxsID8gaHRpLmdldFBvcnROYW1lKCkgOiAiIjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgZW5hYmxlUmVtb3ZlKGJvb2xlYW4gZW5hYmxlZCkgewotICAgIHJlbW92ZUJ1dHRvbl8uc2V0RW5hYmxlZChlbmFibGVkICYmICF0YWJsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMaXN0Q29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIgewotCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBlbGVtZW50KSB7Ci0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFZlY3RvcikgeyByZXR1cm4gKChWZWN0b3IpIGVsZW1lbnQpLnRvQXJyYXkoKTsgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZCwgT2JqZWN0IG5ld29iaikgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRGVsZXRlZChPYmplY3Qgb2JqZWN0KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpIHsKLSAgICAvLyBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkgewotICAgICAgaW50IHNlbGVjdGlvbkluZGV4ID0gaGFuZGxlcnNUYWJsZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChjdXJyZW50SERIXyE9bnVsbCl7Ci0gICAgICAgIGN1cnJlbnRIREhfLmdldEhhbmRsZXJMaXN0KCkucmVtb3ZlKHNlbGVjdGlvbkluZGV4KTsKLSAgICAgIH0KLSAgICAgIHJlZnJlc2goKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotICAgIHRyeSB7Ci0gICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQobnVsbCk7Ci0gICAgICBpZiAoY3VycmVudEhESF8hPW51bGwpewotICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhESF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgdGFibGVWaWV3ZXJfLnNldElucHV0KGhhbmRsZXJzKTsKLSAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0R2VuU2tlbGV0b25FbmFibGVkKGJvb2xlYW4gaXNHZW5Ta2VsZXRvbkVuYWJsZWQpIHsKLSAgICB0aGlzLmlzR2VuU2tlbGV0b25FbmFibGVkXyA9IGlzR2VuU2tlbGV0b25FbmFibGVkOwotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLnNldFNlbGVjdGlvbihpc0dlblNrZWxldG9uRW5hYmxlZCk7Ci0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEdlblNrZWxldG9uRW5hYmxlZCgpIHsKLSAgICByZXR1cm4gdGhpcy5pc0dlblNrZWxldG9uRW5hYmxlZF87Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKXsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3VycmVudEhESF8uZ2V0UHJvamVjdCgpOwotICAgIGlmIChwcm9qZWN0IT1udWxsKXsKLSAgICAgIElQYXRoW10gbG9jYXRpb25zID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKHByb2plY3QpOwotICAgICAgCi0gICAgICBTdHJpbmdbXSBwYXRocyA9IG5ldyBTdHJpbmdbbG9jYXRpb25zLmxlbmd0aF07Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICBwYXRoc1tpXSA9IGxvY2F0aW9uc1tpXS50b1N0cmluZygpOwotICAgICAgICBwYXRoc1RhYmxlXy5wdXQocGF0aHNbaV0sIGxvY2F0aW9uc1tpXSk7Ci0gICAgICB9Ci0gICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRJdGVtcyhwYXRocyk7Ci0gICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZWxlY3QoMCk7Ci0gICAgfQotICAgIAotICAgIC8vIHNldCBpbiBtb2RlbAotICAgIG91dHB1dExvY2F0aW9uXyA9IHNvdXJjZUxvY2F0aW9uQ29tYm9fLmdldFRleHQoKTsKLSAgICBJUGF0aCBvdXRwdXRQYXRoID0gKElQYXRoKSBwYXRoc1RhYmxlXy5nZXQob3V0cHV0TG9jYXRpb25fKTsKLSAgICBjdXJyZW50SERIXy5zZXRTb3VyY2VPdXRwdXRQYXRoKG91dHB1dFBhdGgpOyAgCi0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9IGhhbmRsZXJIb2xkZXJzOwotICB9Ci0gIAotICBwdWJsaWMgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gZ2V0SGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycygpewotICAgIHJldHVybiB0aGlzLmhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBGb3IgZ2V0dGluZyB0aGUgaGFuZGxlcnMgdG8gYXBwbHkgZm9yIG11bHRpcGxlIHNlcnZpY2VzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEhhbmRsZXJzTGlzdCgpewotICAgIGlmIChoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfWzBdIT1udWxsKQotICAgICAgcmV0dXJuIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9bMF0uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25OYW1lKFN0cmluZyB3c0Rlc2NOYW1lKSB7Ci0gICAgZGVzY3JpcHRpb25OYW1lXyA9IHdzRGVzY05hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJc011bHRpcGxlU2VsZWN0aW9uKGJvb2xlYW4gaXNNdWxpdHBsZVNlbGVjdGlvbikgewotICAgIHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbl8gPSBpc011bGl0cGxlU2VsZWN0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKXsKLSAgICBwb3B1bGF0ZUhhbmRsZXJzVGFibGUoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0hhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRhMjEyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYnNlcnZpY2UuV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0vKioKLSAqIEhhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQKLSAqIAotICogRGV0ZXJtaW5lIGlmIEhhbmRsZXJzIGJlbG9uZ3MgdG8gc2VydmljZSBvciBjbGllbnQgc2lkZQotICovCi1wdWJsaWMgY2xhc3MgSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kIAotewotICBwcml2YXRlIGJvb2xlYW4gaXNDbGllbnRIYW5kbGVyXyA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNTZXJ2aWNlSGFuZGxlcl8gPSBmYWxzZTsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBnZXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkgewotICAgICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCi0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSB7Ci0gICAgICAgICAgV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSB3c25ndCA9IChXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSBvYmo7Ci0gICAgICAgICAgaWYgKHdzbmd0LmdldFdzZGxTZXJ2aWNlKCkhPW51bGwpewotICAgICAgICAgIAlpc1NlcnZpY2VIYW5kbGVyXyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmICh3c25ndC5nZXRTZXJ2aWNlUmVmKCkhPW51bGwpewotICAgICAgICAgIAlpc0NsaWVudEhhbmRsZXJfID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgfQotICAgIGVsc2UgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCApOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIH0KLQotICAKLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0NsaWVudEhhbmRsZXJfLgotICovCi1wdWJsaWMgYm9vbGVhbiBnZXRJc0NsaWVudEhhbmRsZXIoKSB7Ci0JcmV0dXJuIGlzQ2xpZW50SGFuZGxlcl87Ci19Ci0vKioKLSAqIEByZXR1cm4gUmV0dXJucyB0aGUgaXNTZXJ2aWNlSGFuZGxlcl8uCi0gKi8KLXB1YmxpYyBib29sZWFuIGdldElzU2VydmljZUhhbmRsZXIoKSB7Ci0JcmV0dXJuIGlzU2VydmljZUhhbmRsZXJfOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0lPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5YWQ2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotCi1wdWJsaWMgaW50ZXJmYWNlIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIHsKLQkgIC8qKgotCSAgICogVGhlIGZyYW1ld29yayB3aWxsIGNhbGwgdGhpcyBtZXRob2QgdG8gc2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotCSAgICogdmFsdWUgdGhhdCB0aGUgdXNlciBoYXMgc3BlY2lmaWVkLgotCSAgICogCi0JICAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gdGhlIHVzZXIgc3BlY2lmaWVkLgotCSAgICovCi0JICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pOwotCSAgCi0JICAvKioKLQkgICAqIFRoZSBpbnRlbnQgb2YgdGhlIE9iamVjdCBTZWxlY3Rpb24gV2lkZ2V0IGlzIHRoYXQgdGhlIHVzZXIgaGFzCi0JICAgKiB0aGUgb3Bwb3J0dW5pdHkgY2hhbmdlL2ZpbmQgdGhlIG9iamVjdCB0aGF0IHRoZXkgd2FudCB0byB0dXJuIGludG8KLQkgICAqIGEgV2ViIHNlcnZpY2UuCi0JICAgKiAKLQkgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgYW4gSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0IHRoYXQgdGhlIHVzZXIKLQkgICAqIHdhbnQgdG8gdHVybiBpbnRvIGEgV2ViIHNlcnZpY2UuICBUaGlzIG9iamVjdCBtYXkgYmUgZGlmZmVyZW50IHRoYW4KLQkgICAqIHRoZSBpbml0aWFsU2VsZWN0aW9uIHBhc3NlZCBpbiBieSB0aGUgc2V0SW5pdGlhbFNlbGVjdGlvbiBtZXRob2QuCi0JICAgKi8KLQkgIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKTsKLQkgIAotCSAgLyoqCi0JICAgKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgb2JqZWN0U2VsZWN0aW9uIHBhcmFtZXRlciBpcyB2YWxpZCBmb3IKLQkgICAqIHRoaXMgT2JqZWN0IHNlbGVjdGlvbiB3aWRnZXQuICBBbiBlcnJvciBzdGF0dXMgc2hvdWxkIGJlIHJldHVybmVkCi0JICAgKiBpZiB0aGlzIG9iamVjdCBpcyBub3QgdmFsdWUuICBPdGhlcndpc2UsIGFuZCBvayBzdGF0dXMgc2hvdWxkIGJlCi0JICAgKiByZXR1cm5lZAotCSAgICogCi0JICAgKiBAcGFyYW0gb2JqZWN0U2VsZWN0aW9uIHRoZSBvYmplY3QgdG8gYmUgdmFsaWRhdGVkLgotCSAgICogQHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSB2YWxpZGF0aW9uLgotCSAgICovCi0JICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pOwotCSAKLQkgIC8qKgotCSAgICogCi0JICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElQcm9qZWN0IHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGlvbgotCSAgICogb2JqZWN0IHRoYXQgdGhlIHVzZXIgaGFzIGNob3NlbiB3aXRoIHRoaXMgd2lkZ2V0LiAgVGhlIHZhbHVlIGNhbiBiZSAKLQkgICAqIG51bGwgaWYgdGhlcmUgaXMgbm8gSVByb2plY3QgZm9yIHRoaXMgb2JqZWN0LgotCSAgICovCi0JICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpOwotCSAgCi0JICAvKioKLQkgICAqIAotCSAgICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBJVmlydHVhbENvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3Rpb24KLQkgICAqIG9iamVjdCB0aGF0IHRoZSB1c2VyIGhhcyBjaG9zZW4gd2l0aCB0aGlzIHdpZGdldC4gIFRoZSB2YWx1ZSBjYW4gYmUgCi0JICAgKiBudWxsIGlmIHRoZXJlIGlzIG5vIElWaXJ0dWFsQ29tcG9uZW50IGZvciB0aGlzIG9iamVjdAotCSAgICovCi0JICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKTsKLQkgIAotCSAgLyoqCi0JICAgKiBDYWxsZWQgdG8gbGF1bmNoIGEgZGlhbG9nIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBtYWtlIGFuIG9iamVjdCBzZWxlY3Rpb24uCi0JICAgKiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIGltcGxlbWVudGluZyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZSBkaWFsb2cgZnJhbWV3b3JrLgotCSAgICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHNob3VsZCBjYWxsIHRoZSBuZWNlc3NhcnkgZ2V0dGVycyBvbiB0aGUgZGlhbG9nIHRvIHVwZGF0ZSB0aGUgCi0JICAgKiBvYmplY3Qgc2VsZWN0aW9uLiAKLQkgICAqIAotCSAgICogQHJldHVybiB0aGUgc3RhdHVzIG9mIGNvbXBsZXRpbmcgdGhlIGRpYWxvZyBsYXVuY2gKLQkgICAqLwotCSAgcHVibGljIGludCBsYXVuY2goU2hlbGwgc2hlbGwpOwotCSAgCi0JICAvKioKLQkgICAqIAotCSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzdHJpbmcgdG8gZGlzcGxheWVkIGluIHRoZSBVSSBmb3IgdGhlIHNlbGVjdGVkIG9iamVjdAotCSAgICovCi0JICBwdWJsaWMgIFN0cmluZyBnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOwotCSAgCi0JICAvKioKLQkgICAqIAotCSAgICogQHBhcmFtIHMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBzZWxlY3Rpb24KLQkgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgYSB2YWxpZCBvYmplY3Qgc2VsZWN0aW9uLgotICAgICAgICogIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBzaG91bGQgc2V0IHRoZSB3aWRnZXQgb2JqZWN0IHNlbGVjdGlvbgotCSAgICogIGFjY29yZGluZyB0byB0aGUgaW5wdXQgc3RyaW5nIHNvIHRoYXQgYSBzdWJzZXF1ZW50IGNhbGwgdG8gZ2V0T2JqZWN0U2VsZWN0aW9uCi0JICAgKiAgd2lsbCByZXRyaWV2ZSB0aGUgY29ycmVjdCBvYmplY3QuCi0JICAgKi8gIAotCSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0lQYWNrYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0lQYWNrYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjAwYmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JUGFja2FibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgyOSAgIDE1NTQ0MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd2ViIHNlcnZpY2Ugd2l6YXJkIGhhbmdzIGR1cmluZyByZXNpemUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgdGhhdCBtYXJrcyBhbiBVSSBlbGVtZW50IGFzIGhhdmluZyBzb21lIGN1c3RvbSBwYWNraW5nIGNvZGUuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVBhY2thYmxlIHsKLQkKLQkvKioKLQkgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHNob3VsZCBjYXVzZSB0aGUgVUkgZWxlbWVudCB0byBwYWNrIGl0c2VsZi4gIE5vdGUgdGhhdAotCSAqIHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgcGFjaygpIG1ldGhvZCBpbiBTV1QuCi0JICovCi0Jdm9pZCBwYWNrSXQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JbXBvcnRXU0lMV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSW1wb3J0V1NJTFdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzVlZjdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JbXBvcnRXU0lMV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c2lsLkFyZ3VtZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbC5UYWJsZVZpZXdlckVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLkRpYWxvZ1Jlc291cmNlQnJvd3NlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLkZpbGVFeHRlbnNpb25GaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5JV29ya2JlbmNoSGVscFN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzaWwuQWRkV1NETFRvV1NJTENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLS8qKgotKiBQYWdlIGZvciBpbXBvcnRpbmcgV1NETCByZWZlcmVuY2VzIGludG8gYSBXU0lMIGluIHRoZSB3b3JrYmVuY2guCi0qLwotcHVibGljIGNsYXNzIEltcG9ydFdTSUxXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgLypDT05URVhUX0lEIFdTSUwwMDAxIGZvciB0aGUgV1NJTCBJbXBvcnQgUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfV1NJTF9JTVBPUlRfUEFHRSA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5XU0lMMDAwMSI7Ci0KLSAgLypDT05URVhUX0lEIFdTSUwwMDAyIGZvciB0aGUgV1NJTCB0ZXh0IGZpZWxkKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9XU0lMX1RFWFRfV1NJTCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5XU0lMMDAwMiI7Ci0KLSAgLypDT05URVhUX0lEIFdTSUwwMDAzIGZvciB0aGUgV1NJTCBicm93c2UgYnV0dG9uKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9XU0lMX0JVVFRPTl9CUk9XU0VfV1NJTCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5XU0lMMDAwMyI7Ci0KLSAgLypDT05URVhUX0lEIFdTSUwwMDA0IGZvciB0aGUgV1NETCB0YWJsZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfV1NJTF9UQUJMRV9XU0RMID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLldTSUwwMDA0IjsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTlNQRUNUSU9OX1dTSUwgPSAiaW5zcGVjdGlvbi53c2lsIjsKLQotICBwcml2YXRlIFRleHQgd3NpbF87Ci0gIHByaXZhdGUgQnV0dG9uIGJyb3dzZV87Ci0gIHByaXZhdGUgVGFibGVWaWV3ZXJFZGl0b3Igd3NkbHNfOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyBwYWdlLgotICAqLwotICBwdWJsaWMgSW1wb3J0V1NJTFdpZGdldCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gIAlJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gIAkKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NJTF9JTVBPUlRfUEFHRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9XU0lMX0lNUE9SVF9QQUdFKTsKLQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAzOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkdSQUJfVkVSVElDQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5XUkFQKTsKLSAgICBsYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XU0lMX1VSSSk7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0KLSAgICB3c2lsXyA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULldSQVAgfCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICBnZC53aWR0aEhpbnQgPSAyNTY7Ci0gICAgd3NpbF8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgd3NpbF8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgc3RhdHVzTGlzdGVuZXIpOwotICAgIHdzaWxfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTSUxfVEVYVF9XU0lMKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAod3NpbF8sIElORk9QT1BfV1NJTF9URVhUX1dTSUwpOwotCi0gICAgYnJvd3NlXyA9IG5ldyBCdXR0b24oY29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0gICAgYnJvd3NlXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CUk9XU0UpOwotICAgIGJyb3dzZV8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgYnJvd3NlXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLAotICAgICAgbmV3IExpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVCcm93c2VFdmVudChldmVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIGJyb3dzZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NJTF9CVVRUT05fQlJPV1NFX1dTSUwpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChicm93c2VfLCBJTkZPUE9QX1dTSUxfQlVUVE9OX0JST1dTRV9XU0lMKTsKLQotICAgIENvbXBvc2l0ZSB3c2RsQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICB3c2RsQ29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMzsKLSAgICB3c2RsQ29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotICAgIGxhYmVsID0gbmV3IExhYmVsKHdzZGxDb21wb3NpdGUsIFNXVC5XUkFQKTsKLSAgICBsYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XU0RMKTsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBTdHJpbmdbXSBjb2x1bW5zID0ge0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XU0RMX1VSSX07Ci0gICAgd3NkbHNfID0gbmV3IFRhYmxlVmlld2VyRWRpdG9yKHdzZGxDb21wb3NpdGUsIGNvbHVtbnMsIG5ldyBBcnJheUxpc3QoKSwgImh0dHA6Ly8iKTsKLSAgICB3c2Rsc18uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NJTF9UQUJMRV9XU0RMKTsKLSAgICB3c2Rsc18uc2V0SW5mb3BvcChJTkZPUE9QX1dTSUxfVEFCTEVfV1NETCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVCcm93c2VFdmVudChFdmVudCBldmVudCkKLSAgewotICAgIERpYWxvZ1Jlc291cmNlQnJvd3NlciBkaWFsb2cgPSBuZXcgRGlhbG9nUmVzb3VyY2VCcm93c2VyKGJyb3dzZV8uZ2V0U2hlbGwoKSwgbnVsbCwgbmV3IEZpbGVFeHRlbnNpb25GaWx0ZXIobmV3IFN0cmluZ1tdIHsid3NpbCJ9KSk7Ci0gICAgZGlhbG9nLm9wZW4oKTsKLSAgICBJUmVzb3VyY2UgcmVzID0gZGlhbG9nLmdldEZpcnN0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHJlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgICAgd3NpbF8uc2V0VGV4dChyZXMuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgd3NpbF8uc2V0VGV4dChyZXMuZ2V0RnVsbFBhdGgoKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpLmFwcGVuZChJTlNQRUNUSU9OX1dTSUwpLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICBpZiAoIXdzaWxfLmdldFRleHQoKS5lbmRzV2l0aCgiLndzaWwiKSkKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX0lOVkFMSURfV1NJTF9GSUxFX05BTUUgKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXQubmV4dCgpOwotICAgICAgICBpZiAoKG9iamVjdCBpbnN0YW5jZW9mIElGaWxlKSAmJiAoKElGaWxlKW9iamVjdCkuZ2V0RmlsZUV4dGVuc2lvbigpICE9IG51bGwgJiYgKChJRmlsZSlvYmplY3QpLmdldEZpbGVFeHRlbnNpb24oKS5lcXVhbHMoIndzZGwiKSkKLSAgICAgICAgICBsaXN0LmFkZCgoKElGaWxlKW9iamVjdCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsKQotICAgICAgICAgIGxpc3QuYWRkKEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0lMUGF0aCgoKFNlcnZpY2VJbXBsKShvYmplY3QpKSkpOwkKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpCi0gICAgICAgICAgbGlzdC5hZGQoSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTSUxQYXRoKCgoU2VydmljZVJlZikob2JqZWN0KSkpKTsJCQotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgICAgICBsaXN0LmFkZChKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NJTFBhdGgoKChXU0RMUmVzb3VyY2VJbXBsKShvYmplY3QpKSkpOwkKLSAgICAgIH0KLSAgICB9Ci0gICAgd3NkbHNfLnNldElucHV0KGxpc3QpOwotICAgIHdzZGxzXy5yZWZyZXNoKCk7Ci0gICAgaWYgKGxpc3Quc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIobGlzdC5nZXQoMCkudG9TdHJpbmcoKSk7Ci0gICAgICAvLyBjaGFuZ2UgZXh0ZW5zaW9uIGZyb20gLndzZGwgdG8gLndzaWwKLSAgICAgIGludCBsZW5ndGggPSBwYXRoLmxlbmd0aCgpOwotICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShsZW5ndGgtNCwgbGVuZ3RoLCAid3NpbCIpOwotICAgICAgd3NpbF8uc2V0VGV4dChwYXRoLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIEFyZ3VtZW50cyBnZXRHZW5XU0lMQXJndW1lbnRzKCkKLSAgewotICAgIEFyZ3VtZW50cyBhcmdzID0gbmV3IEFyZ3VtZW50cygpOwotICAgIFN0cmluZyB3c2lsUGF0aCA9IHdzaWxfLmdldFRleHQoKTsKLSAgICBpZiAod3NpbFBhdGguaW5kZXhPZignOicpIDwgMCkKLSAgICAgIGFyZ3MuYWRkKEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19XU0lMLCBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSSh3c2lsXy5nZXRUZXh0KCkpLnRvU3RyaW5nKCkpOwotICAgIGVsc2UKLSAgICAgIGFyZ3MuYWRkKEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19XU0lMLCB3c2lsUGF0aCk7Ci0gICAgVGFibGVJdGVtW10gaXRlbXMgPSB3c2Rsc18uZ2V0SXRlbXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyB1cmkgPSBpdGVtc1tpXS5nZXRUZXh0KDApOwotICAgICAgaWYgKHVyaS5pbmRleE9mKCc6JykgPCAwKQotICAgICAgewotICAgICAgICBJUmVzb3VyY2UgcmVzID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UodXJpKTsKLSAgICAgICAgaWYgKHJlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgdXJpID0gcmVzLmdldExvY2F0aW9uKCkudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgICAgIHsKLSAgICAgICAgICAJbXVybGUuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYXJncy5hZGQoQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1dTREwsIHVyaSk7Ci0gICAgfQotICAgIGFyZ3MuYWRkKEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19SRVNPTFZFX1dTREwsIG51bGwpOwotICAgIHJldHVybiBhcmdzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSmF2YUJlYW5TZWxlY3Rpb25MYXVuY2hhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSmF2YUJlYW5TZWxlY3Rpb25MYXVuY2hhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMzZmNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0phdmFCZWFuU2VsZWN0aW9uTGF1bmNoYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDcxOSAgIDE0OTM1MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwODI2ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDcwMzEzICAgMTcwMTI2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBCVUphdmEgc2NlbmFyaW8gZG9lc24ndCBjYXRjaCBpbXByb3BlciBzZXJ2aWNlIGRlZmluaXRpb24KLSAqIDIwMDgwMzEwICAgMjIyMDc1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDYW5ub3QgbGF1bmNoIFdlYiBTZXJ2aWNlIHdpemFyZCBvbiBhbiBJVHlwZQotICogMjAwODAzMTggICAyMTMzMzAgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIE5vbi1jb252ZW50aW9uYWwgSmF2YSBuYW1pbmcgcHJldmVudHMgY3JlYXRpbmcgV2ViIFNlcnZpY2VzIChjbGllbnQpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvbnZlbnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuQmVhbkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLmludGVybmFsLmltcGwuUG9ydENvbXBvbmVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLmludGVybmFsLmltcGwuU2VydmljZUltcGxCZWFuSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuZGlhbG9nLkRpYWxvZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotCi1wdWJsaWMgY2xhc3MgSmF2YUJlYW5TZWxlY3Rpb25MYXVuY2hhYmxlIGV4dGVuZHMgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIHsKLQotCSAgcHJpdmF0ZSBJUHJvamVjdCAgICAgICAgICAgc2VydmVyUHJvamVjdF8gPSBudWxsOwotCSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBudWxsOwkgIAotCSAgcHJpdmF0ZSBTdHJpbmcgYmVhbkNsYXNzU3RyaW5nXz0iIjsKLQkgIHByaXZhdGUgSVN0YXR1cyB2YWxpZGF0aW9uU3RhdHVzOwotCQkgICAKLQkgIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikKLQkgIHsKLQkgICAgaWYgKGluaXRpYWxTZWxlY3Rpb24gIT0gbnVsbCAmJiAhaW5pdGlhbFNlbGVjdGlvbi5pc0VtcHR5KCkpCi0JICAgIHsKLQkgICAgICBPYmplY3Qgb2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUZpbGUpCi0JICAgICAgewotCSAgICAgIAlJRmlsZSBpRmlsZSA9IChJRmlsZSlvYmplY3Q7Ci0JICAgICAgCVN0cmluZyBmaWxlRXh0ID0gaUZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpLnRvTG93ZXJDYXNlKCk7Ci0JICAgICAgCWlmIChmaWxlRXh0LmVxdWFscygiamF2YSIpIHx8IGZpbGVFeHQuZXF1YWxzKCJjbGFzcyIpKQotCSAgICAgICAgICBzZXRCZWFuQ2xhc3MoaUZpbGUpOwotCSAgICAgIH0KLQkgICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJVHlwZSkKLQkgICAgCXNldEJlYW5DbGFzcygoSVR5cGUpIG9iamVjdCk7Ci0JICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLQkgICAgICAJc2V0QmVhbkNsYXNzKCgoSUNvbXBpbGF0aW9uVW5pdClvYmplY3QpLmdldFJlc291cmNlKCkpOwotCSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbkltcGwpCi0JICAgICAgCXNldEJlYW5DbGFzcygoU2VydmljZUltcGxCZWFuSW1wbClvYmplY3QpOwotCSAgICAgIGVsc2UgaWYob2JqZWN0IGluc3RhbmNlb2YgQmVhbkxpbmspCi0JICAgICAgCXNldEJlYW5DbGFzcygoQmVhbkxpbmspb2JqZWN0KTsKLQkgICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpCi0JICAgIAliZWFuQ2xhc3NTdHJpbmdfID0gKFN0cmluZykgb2JqZWN0OyAvLyB1c2UgZm9yIGRpc3BsYXlhYmxlIHN0cmluZwotCSAgICB9Ci0JICB9Ci0KLQkgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0JICB7CQkgCi0JICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihiZWFuQ2xhc3NTdHJpbmdfKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotCSAgewotCSAgICByZXR1cm4gc2VydmVyUHJvamVjdF87Ci0JICB9Ci0KLQkgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0JICB7Ci0JICAgIHJldHVybiBzZXJ2ZXJDb21wb25lbnROYW1lXzsKLQkgIH0KLQotCXB1YmxpYyBpbnQgbGF1bmNoKFNoZWxsIHNoZWxsKSB7CQkKLQkJICAgCi0JCSAgICBJVHlwZSBpdHlwZSA9IERpYWxvZ1V0aWxzLmJyb3dzZUNsYXNzZXNBc0lUeXBlKHNoZWxsLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCksIG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coc2hlbGwpKTsKLQkJICAgIHJldHVybiBzZXRCZWFuQ2xhc3MoaXR5cGUpOwotCX0KLQkJICAJCi0JcHJpdmF0ZSBpbnQgc2V0QmVhbkNsYXNzKElUeXBlIGl0eXBlKSB7Ci0JCSAgICBpZiAoaXR5cGUgIT0gbnVsbCkKLQkJICAgIHsKLQkJICAgICAgIGJlYW5DbGFzc1N0cmluZ18gPSBpdHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJICAgICAgdHJ5Ci0JCSAgICAgIHsKLQkJICAgICAgICBJUmVzb3VyY2UgcmVzID0gaXR5cGUuZ2V0VW5kZXJseWluZ1Jlc291cmNlKCk7Ci0JCSAgICAgICAgaWYgKHJlcyAhPSBudWxsKQotCQkgICAgICAgIHsKLQkJICAgICAgICAgIHNlcnZlclByb2plY3RfID0gcmVzLmdldFByb2plY3QoKTsKLQkJICAgICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXAgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKHJlcyk7Ci0JCSAgICAgICAgICBpZiAoY29tcCE9bnVsbCkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBjb21wLmdldE5hbWUoKTsKLQkJICAgICAgICAgIH0KLQkJICAgICAgICB9Ci0JCSAgICAgICAgZWxzZQotCQkgICAgICAgIHsKLQkJICAgICAgICAgIHNlcnZlclByb2plY3RfID0gbnVsbDsKLQkJICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gbnVsbDsKLQkJICAgICAgICB9Ci0JCSAgICAgICAgcmV0dXJuIFN0YXR1cy5PSzsKLQkJICAgICAgfQotCQkgICAgICBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGptZSkKLQkJICAgICAgewotCQkgICAgICAgIHNlcnZlclByb2plY3RfID0gbnVsbDsKLQkJICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7Ci0JCSAgICAgICAgcmV0dXJuIFN0YXR1cy5FUlJPUjsKLQkJICAgICAgfQotCQkgICAgfQkJCSAgICAKLQkJcmV0dXJuIFN0YXR1cy5DQU5DRUw7Ci0JfQkKLSAgCQotCSAgcHJpdmF0ZSB2b2lkIHNldEJlYW5DbGFzcyhJUmVzb3VyY2UgcmVzb3VyY2UpCi0JICB7Ci0JICAgIGlmKCByZXNvdXJjZSAhPSBudWxsICYmIHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUgKQotCSAgICB7Ci0JICAgICAgSVBhdGggIHBhdGggICAgID0gcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKTsKLQkgICAgICBTdHJpbmcgYmFzZW5hbWUgPSBwYXRoLmxhc3RTZWdtZW50KCk7Ci0JICAgICAgCi0JICAgICAgaWYoIGJhc2VuYW1lICE9IG51bGwgJiYgYmFzZW5hbWUubGVuZ3RoKCkgPiAwICkKLQkgICAgICB7Ci0JICAgICAgICBTdHJpbmcgYmVhblBhY2thZ2UgPSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHMuZ2V0SmF2YVJlc291cmNlUGFja2FnZU5hbWUocGF0aCk7Ci0JICAgICAgICBTdHJpbmcgYmVhbkNsYXNzID0gKGJlYW5QYWNrYWdlID09IG51bGwgfHwgYmVhblBhY2thZ2UubGVuZ3RoKCkgPT0gMCA/IGJhc2VuYW1lIDogKGJlYW5QYWNrYWdlICsgIi4iICsgYmFzZW5hbWUpKTsKLQkgICAgICAgIAotCSAgICAgICAgaWYoIGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuamF2YSIpIHx8IGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuY2xhc3MiICkgKQotCSAgICAgICAgewotCSAgICAgICAgICBiZWFuQ2xhc3MgPSBiZWFuQ2xhc3Muc3Vic3RyaW5nKCAwLCBiZWFuQ2xhc3MubGFzdEluZGV4T2YoJy4nKSApOwotCSAgICAgICAgfQotCSAgICAgICAgCi0JICAgICAgICBiZWFuQ2xhc3NTdHJpbmdfID0gYmVhbkNsYXNzOwotCSAgICAgICAgc2VydmVyUHJvamVjdF8gPSAgUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YocGF0aCk7Ci0JICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXNvdXJjZSk7Ci0JICAgICAgICAKLQkgICAgICAgIGlmIChjb21wIT1udWxsKQotCSAgICAgICAgewkKLQkgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBjb21wLmdldE5hbWUoKTsKLQkgICAgICAgIH0gICAgICAgIAotCSAgICAgICAgCi0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0KLQkgIHByaXZhdGUgdm9pZCBzZXRCZWFuQ2xhc3MoU2VydmljZUltcGxCZWFuSW1wbCBzZXJ2aWNlSW1wbCkKLQkgIHsKLQkgICAgaWYoIHNlcnZpY2VJbXBsICE9IG51bGwgKQotCSAgICB7Ci0JICAgICAgRU9iamVjdCBlT2JqZWN0ID0gc2VydmljZUltcGwuZUNvbnRhaW5lcigpOwotCSAgICAgIGlmKGVPYmplY3QgaW5zdGFuY2VvZiBQb3J0Q29tcG9uZW50SW1wbCl7Ci0JICAgICAgCVBvcnRDb21wb25lbnRJbXBsIHBjaSA9IChQb3J0Q29tcG9uZW50SW1wbCllT2JqZWN0OwotCSAgICAgIAliZWFuQ2xhc3NTdHJpbmdfID0gcGNpLmdldFNlcnZpY2VFbmRwb2ludEludGVyZmFjZSgpOwkgICAgICAJCi0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgdm9pZCBzZXRCZWFuQ2xhc3MoQmVhbkxpbmsgc2VydmljZUltcGwpCi0JICB7Ci0JICAgIGlmKCBzZXJ2aWNlSW1wbCAhPSBudWxsICkKLQkgICAgewotCSAgICAgIEVPYmplY3QgZU9iamVjdCA9IHNlcnZpY2VJbXBsLmVDb250YWluZXIoKTsKLQkgICAgICBpZihlT2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuSW1wbCl7Ci0JICAgICAgCXNldEJlYW5DbGFzcygoU2VydmljZUltcGxCZWFuSW1wbCllT2JqZWN0KTsKLQkgICAgICB9Ci0JICAgIH0KLQkgIH0KLQkgIAotCSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLQkgIHsKLQkJaWYgKGJlYW5DbGFzc1N0cmluZ18ubGVuZ3RoKCkgPD0gMCkKLQkgICAgewotCSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfQkVBTl9DQU5OT1RfQkVfRU1QVFkpOwotCSAgICB9Ci0JICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0JICB7Ci0JCWlmICh2YWxpZGF0aW9uU3RhdHVzID09IG51bGwpCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCi0JCXJldHVybiB2YWxpZGF0aW9uU3RhdHVzOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgewkJICAKLQkJCSAgcmV0dXJuIGJlYW5DbGFzc1N0cmluZ187Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBzKSB7Ci0JCSAgYmVhbkNsYXNzU3RyaW5nXyA9IHM7Ci0JCSAgU3RyaW5nIHNvdXJjZUxldmVsID0gSmF2YUNvcmUuZ2V0T3B0aW9uKEphdmFDb3JlLkNPTVBJTEVSX1NPVVJDRSk7Ci0JCSAgU3RyaW5nIGNvbXBsaWFuY2VMZXZlbCA9IEphdmFDb3JlLmdldE9wdGlvbihKYXZhQ29yZS5DT01QSUxFUl9DT01QTElBTkNFKTsKLQkJICB2YWxpZGF0aW9uU3RhdHVzID0gSmF2YUNvbnZlbnRpb25zLnZhbGlkYXRlSmF2YVR5cGVOYW1lKHMsIHNvdXJjZUxldmVsLCBjb21wbGlhbmNlTGV2ZWwpOwotCQkgIHJldHVybiB2YWxpZGF0aW9uU3RhdHVzLmlzT0soKTsKLQkgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1ByZWZlcmVuY2VzU2VsZWN0aW9uV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHJlZmVyZW5jZXNTZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjNDY0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHJlZmVyZW5jZXNTZWxlY3Rpb25XaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIFByZWZlcmVuY2VzU2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17ICAgIAotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCBjb250ZXh0XzsKLSAgCi0gIC8qQ09OVEVYVF9JRCBQV1BSMDAwMyBmb3IgdGhlIE92ZXJ3cml0ZSBGaWxlcyBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdQUl9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMgPSAiUFdQUjAwMDMiOwotICBwcml2YXRlIEJ1dHRvbiBvdmVyd3JpdGVGaWxlc0NoZWNrYm94XzsKLSAgCi0gIC8qQ09OVEVYVF9JRCBQV1BSMDAwNCBmb3IgdGhlIENyZWF0ZSBGb2xkZXJzIGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1BSX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTID0gIlBXUFIwMDA0IjsKLSAgcHJpdmF0ZSBCdXR0b24gY3JlYXRlRm9sZGVyc0NoZWNrYm94XzsKLSAgCi0gIC8qQ09OVEVYVF9JRCBQV1BSMDAxNSBmb3IgdGhlIENoZWNrIE91dCBGaWxlcyBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdQUl9DSEVDS0JPWF9DSEVDS09VVF9GSUxFUyA9ICJQV1BSMDAxNSI7ICAKLSAgcHJpdmF0ZSBCdXR0b24gY2hlY2tvdXRGaWxlc0NoZWNrYm94XzsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvciNhZGRDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyKQotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gICAgU3RyaW5nICAgICAgIGNvblBsdWdpbklkID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0gIAlVSVV0aWxzICAgICAgdXRpbHMgICAgICAgPSBuZXcgVUlVdGlscyggY29uUGx1Z2luSWQgKTsKLSAgCQotICAgIENvbXBvc2l0ZSByZXNvdXJjZXNHcm91cCA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAxICk7Ci0gICAgCi0gICAgb3ZlcndyaXRlRmlsZXNDaGVja2JveF8gPSB1dGlscy5jcmVhdGVDaGVja2JveCggcmVzb3VyY2VzR3JvdXAsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fT1ZFUldSSVRFX0ZJTEVTLAotICAgIAkJV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdQUl9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBjcmVhdGVGb2xkZXJzQ2hlY2tib3hfID0gdXRpbHMuY3JlYXRlQ2hlY2tib3goIHJlc291cmNlc0dyb3VwLCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX0NSRUFURV9GT0xERVJTLAotICAgIAkJV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1BSX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBjaGVja291dEZpbGVzQ2hlY2tib3hfID0gdXRpbHMuY3JlYXRlQ2hlY2tib3goIHJlc291cmNlc0dyb3VwLCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX0NIRUNLT1VUX0ZJTEVTLAotICAgIAkJV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1BSX0NIRUNLQk9YX0NIRUNLT1VUX0ZJTEVTICk7Ci0gICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoIFJlc291cmNlQ29udGV4dCBjb250ZXh0ICkKLSAgeyAKLSAgICBvdmVyd3JpdGVGaWxlc0NoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSApOwotICAgIGNyZWF0ZUZvbGRlcnNDaGVja2JveF8uc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSApOwotICAgIGNoZWNrb3V0RmlsZXNDaGVja2JveF8uc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSApOyAKLSAgICAKLSAgICBjb250ZXh0XyA9IGNvbnRleHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkgCi0gIHsgICAgCi0gICAgY29udGV4dF8uc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKCBvdmVyd3JpdGVGaWxlc0NoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSApOwotICAgIGNvbnRleHRfLnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKCBjcmVhdGVGb2xkZXJzQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dF8uc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoIGNoZWNrb3V0RmlsZXNDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICAKLSAgICByZXR1cm4gY29udGV4dF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9Qcm9qZWN0U2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHJvamVjdFNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDkxNmYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9Qcm9qZWN0U2VsZWN0aW9uRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA4MDIgICAxNDg3MzEgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLlByb2plY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuUGFnZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlRGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIFNpbXBsZURpYWxvZyB7Ci0KLQlTdHJpbmcgdGl0bGVUZXh0Xz0iIjsKLQlTdHJpbmcgcHJvamVjdE5hbWVfPSIiOwotCVN0cmluZyBlYXJQcm9qZWN0TmFtZV89IiI7Ci0JU3RyaW5nIGNvbXBvbmVudFR5cGVfPSIiOwotCVR5cGVSdW50aW1lU2VydmVyIHRyc187Ci0JYm9vbGVhbiBuZWVkRUFSXzsKLQkKLQlwdWJsaWMgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyhTaGVsbCBzaGVsbCwgUGFnZUluZm8gcGFnZUluZm8pCi0JewotCQlzdXBlcihzaGVsbCwgcGFnZUluZm8pOwotCQl0aXRsZVRleHRfID0gcGFnZUluZm8uZ2V0UGFnZU5hbWUoKTsKLQl9CQotCQotCXByb3RlY3RlZCB2b2lkIGNhbGxTZXR0ZXJzKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCVByb2plY3RTZWxlY3Rpb25XaWRnZXQgcHJvaldpZGdldCA9IChQcm9qZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpOwkJCi0JCXByb2pXaWRnZXQuc2V0RWFyUHJvamVjdE5hbWUoZWFyUHJvamVjdE5hbWVfKTsKLQkJcHJvaldpZGdldC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZV8pOwotCQlwcm9qV2lkZ2V0LnNldENvbXBvbmVudFR5cGUoY29tcG9uZW50VHlwZV8pOwotCQlwcm9qV2lkZ2V0LnNldE5lZWRFQVIobmVlZEVBUl8pOwotCQlwcm9qV2lkZ2V0LnNldFR5cGVSdW50aW1lU2VydmVyKHRyc18pOwotCQkKLQkJcHJvaldpZGdldC5yZWZyZXNoUHJvamVjdEl0ZW1zKCk7Ci0JfQotCQotCSAgcHJvdGVjdGVkIFBvaW50IGdldEluaXRpYWxTaXplKCkKLQkgIHsKLQkgICAgcmV0dXJuIHRoaXMuZ2V0U2hlbGwoKS5jb21wdXRlU2l6ZSgyNTAsIFNXVC5ERUZBVUxULCB0cnVlKTsgCi0JICB9Ci0KLQotCSAgcHJvdGVjdGVkIHZvaWQgc2V0U2hlbGxTdHlsZShpbnQgbmV3U2hlbGxTdHlsZSkKLQkgIHsKLQkgICAgc3VwZXIuc2V0U2hlbGxTdHlsZSggbmV3U2hlbGxTdHlsZSB8IFNXVC5SRVNJWkUgKTsgIAotCSAgfQotCi0JICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTaGVsbChTaGVsbCBuZXdTaGVsbCkKLQkgIHsKLQkgICAgbmV3U2hlbGwuc2V0VGV4dCh0aXRsZVRleHRfKTsgICAKLQkgICAgc3VwZXIuY29uZmlndXJlU2hlbGwobmV3U2hlbGwpOwotCSAgfQkKLQkJCi0JCXB1YmxpYyB2b2lkIHNldFByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotCQkgIHsKLQkJCQlwcm9qZWN0TmFtZV8gPSBuYW1lOwotCQkgIH0KLQkJCi0JCXB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdE5hbWUoKQotCQkgIHsKLQkJCQlyZXR1cm4gcHJvamVjdE5hbWVfOwotCQkgIH0KLQkJCi0JCSBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkJICB7CQkJCi0JCQkJZWFyUHJvamVjdE5hbWVfID0gbmFtZTsKLQkJICB9IAotCQkgCi0JCSBwdWJsaWMgU3RyaW5nIGdldEVhclByb2plY3ROYW1lKCkKLQkJIHsKLQkJCSByZXR1cm4gZWFyUHJvamVjdE5hbWVfOwotCQkgfQotCQkgCi0JCSBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0Q29tcG9uZW50VHlwZSggU3RyaW5nIHR5cGUgKQotCQkgIHsKLQkJCSAgICBjb21wb25lbnRUeXBlXyA9IHR5cGU7Ci0JCSAgfQotCi0JCSBwdWJsaWMgU3RyaW5nIGdldFByb2plY3RDb21wb25lbnRUeXBlKCkKLQkJICB7Ci0JCQkgcmV0dXJuIGNvbXBvbmVudFR5cGVfOwotCQkgIH0KLQkJIAotCQkgcHVibGljIHZvaWQgc2V0TmVlZEVBUihib29sZWFuIGIpCi0JCSAgewotCQkJICAgIG5lZWRFQVJfID0gYjsJCQkgICAgCi0JCSAgfQotCQkgCi0JCSBwdWJsaWMgYm9vbGVhbiBnZXROZWVkRUFSKCkKLQkJICB7Ci0JCQkgICAgcmV0dXJuIG5lZWRFQVJfOwkJCQkKLQkJICB9Ci0JCSAKLQkJIHB1YmxpYyB2b2lkIHNldFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHRycykKLQkJIHsKLQkJCSAgICB0cnNfID0gdHJzOyAKLQkJIH0KLQkJIAotCQkgcHVibGljIGJvb2xlYW4gY2xvc2UoKSB7Ci0KLQkJCXByb2plY3ROYW1lXyA9ICgoUHJvamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0UHJvamVjdE5hbWUoKTsKLQkJCWVhclByb2plY3ROYW1lXyA9ICgoUHJvamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0RWFyUHJvamVjdE5hbWUoKTsgCi0JCQluZWVkRUFSXyA9ICgoUHJvamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0TmVlZEVBUigpOwotCQkJY29tcG9uZW50VHlwZV8gPSAoKFByb2plY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldENvbXBvbmVudFR5cGUoKTsKLQkJCXJldHVybiBzdXBlci5jbG9zZSgpOwotCQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9QdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODExMzhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9QdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhTWFwcGluZ1JlZ2lzdHJ5OwotICBwcml2YXRlIENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5OwotICBwcml2YXRlIGJvb2xlYW4gcHVibGlzaFRvUHJpdmF0ZVVEREk7Ci0gIHByaXZhdGUgQ29tbWFuZFdpZGdldEJpbmRpbmcgcHJpdmF0ZVVERElCaW5kaW5nOwotICAKLSAgcHVibGljIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50KCkKLSAgewotICAgIHN1cGVyKG51bGwsICIiKTsKLSAgICBwcml2YXRlVURESUJpbmRpbmcgPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKS5nZXRCaW5kaW5nKCk7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgKgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7Ci0gICAgaWYgKHByaXZhdGVVRERJQmluZGluZyAhPSBudWxsICYmIHB1Ymxpc2hUb1ByaXZhdGVVRERJICYmICFQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkKLSAgICB7Ci0gICAgICBwcml2YXRlVURESUJpbmRpbmcucmVnaXN0ZXJDYW5GaW5pc2goY2FuRmluaXNoUmVnaXN0cnkpOwotICAgICAgcHJpdmF0ZVVERElCaW5kaW5nLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFNYXBwaW5nUmVnaXN0cnkpOwotICAgICAgcHJpdmF0ZVVERElCaW5kaW5nLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mod2lkZ2V0UmVnaXN0cnkpOwotICAgICAgcmV0dXJuIHByaXZhdGVVRERJQmluZGluZy5jcmVhdGUoKS5jcmVhdGUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudChDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgCXJldHVybiBudWxsOwotICB9Ci0gIAotICAvKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgCWRhdGFNYXBwaW5nUmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jYW5GaW5pc2hSZWdpc3RyeSA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgIHRoaXMud2lkZ2V0UmVnaXN0cnkgPSB3aWRnZXRSZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgICogQWxsIHdpemFyZCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAgIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ID0gbmV3IFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50KCk7Ci0gIAlmcmFnbWVudC5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgCWZyYWdtZW50LnJlZ2lzdGVyQ2FuRmluaXNoKGNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgCWZyYWdtZW50LnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mod2lkZ2V0UmVnaXN0cnkpOwotICAJZnJhZ21lbnQuc2V0UHVibGlzaFRvUHJpdmF0ZVVEREkocHVibGlzaFRvUHJpdmF0ZVVEREkpOwotICAJcmV0dXJuIGZyYWdtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFRvUHJpdmF0ZVVEREkoYm9vbGVhbiBwdWJsaXNoKQotICB7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVEREkgPSBwdWJsaXNoOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHVibGlzaFdTV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHVibGlzaFdTV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMzY4M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1B1Ymxpc2hXU1dpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQudWRkaS5QdWJsaWNVRERJUmVnaXN0cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS51ZGRpLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uczsKLQotCi1wdWJsaWMgY2xhc3MgUHVibGlzaFdTV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIC8qIENPTlRFWFRfSUQgUFdQQjAwMDEgZm9yIHRoZSBVRERJIFB1Ymxpc2ggUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUEJfUEFHRSA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QV1BCMDAwMSI7Ci0gIC8qIENPTlRFWFRfSUQgUFdQQjAwMDIgZm9yIHRoZSBVRERJIExhdW5jaCBjaGVjayBib3ggb2YgdGhlIFVEREkgUHVibGlzaCBQYWdlICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0ggPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFdQQjAwMDIiOwotICBwcml2YXRlIEJ1dHRvbiBsYXVuY2hVRERJQ2hlY2tib3hfOwotICBwcml2YXRlIEJ1dHRvbiBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94XzsKLSAgcHJpdmF0ZSBMYWJlbCBwdWJpbGNVRERJUmVnQ29tYm9MYWJlbF87Ci0gIHByaXZhdGUgQ29tYm8gcHVibGljVURESVJlZ0NvbWJvXzsKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBCb29sZWFuIHB1Ymxpc2g7Ci0KLSAgcHVibGljIFB1Ymxpc2hXU1dpZGdldChib29sZWFuIHB1Ymxpc2gpCi0gIHsKLQkgIHRoaXMucHVibGlzaCA9IG5ldyBCb29sZWFuKHB1Ymxpc2gpOwotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICB0aGlzLnN0YXR1c0xpc3RlbmVyID0gc3RhdHVzTGlzdGVuZXI7Ci0gICAgTGlzdGVuZXIgc2VsTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBoYW5kbGVTZWxlY3Rpb25FdmVudChldmVudCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdQQl9QQUdFKTsKLSAgICBJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9QV1BCX1BBR0UpOwotICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5DSEVDSyk7Ci0gICAgaWYgKHB1Ymxpc2guYm9vbGVhblZhbHVlKCkpCi0gICAgICBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fV1NfUFVCTElTSF9QUklWQVRFX1VEREkpOwotICAgIGVsc2UKLSAgICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XU19GSU5EX1BSSVZBVEVfVURESSk7Ci0gICAgbGF1bmNoUHJpdmF0ZVVERElDaGVja2JveF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0gpOwotICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHNlbExpc3RlbmVyKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAobGF1bmNoUHJpdmF0ZVVERElDaGVja2JveF8sIElORk9QT1BfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0gpOwotICAgIGxhdW5jaFVERElDaGVja2JveF8gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULkNIRUNLKTsKLSAgICBpZiAocHVibGlzaC5ib29sZWFuVmFsdWUoKSkKLSAgICAgIGxhdW5jaFVERElDaGVja2JveF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1dTX1BVQkxJU0gpOwotICAgIGVsc2UKLSAgICAgIGxhdW5jaFVERElDaGVja2JveF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1dTX0ZJTkQpOwotICAgIGxhdW5jaFVERElDaGVja2JveF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdQQl9DSEVDS0JPWF9XU19MQVVOQ0gpOwotICAgIGxhdW5jaFVERElDaGVja2JveF8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgc2VsTGlzdGVuZXIpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChsYXVuY2hVRERJQ2hlY2tib3hfLCBJTkZPUE9QX1BXUEJfQ0hFQ0tCT1hfV1NfTEFVTkNIKTsKLSAgICBDb21wb3NpdGUgYyA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDM7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgYy5zZXRMYXlvdXQoZ2wpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgYy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBuZXcgTGFiZWwoYywgU1dULldSQVApOwotICAgIHB1YmlsY1VERElSZWdDb21ib0xhYmVsXyA9IG5ldyBMYWJlbChjLCBTV1QuV1JBUCk7Ci0gICAgcHViaWxjVURESVJlZ0NvbWJvTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1BVQkxJQ19VRERJX1JFR0lTVFJJRVMpOwotICAgIHB1YmxpY1VERElSZWdDb21ib18gPSBuZXcgQ29tYm8oYywgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkpOwotICAgIHB1YmxpY1VERElSZWdDb21ib18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgaW5pdFB1YmxpY1VEREkoKTsKLSAgICBpbml0UHJpdmF0ZVVEREkoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0UHVibGljVURESSgpCi0gIHsKLSAgICBQdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgcmVnID0gUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgUHVibGljVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzID0gcmVnLmdldEFsbFB1YmxpY1VERElSZWdpc3RyeVR5cGVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAocHVibGlzaC5ib29sZWFuVmFsdWUoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWdub3JlIHJlYWQtb25seSByZWdpc3RyaWVzLgotICAgICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHR5cGVzW2ldLmdldFB1Ymxpc2hVUkwoKTsKLSAgICAgICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCB8fCBwdWJsaXNoVVJMLmluZGV4T2YoIjovLyIpID09IC0xKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgcHVibGljVURESVJlZ0NvbWJvXy5hZGQodHlwZXNbaV0uZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgaWYgKHR5cGVzLmxlbmd0aCA+IDApCi0gICAgICBwdWJsaWNVRERJUmVnQ29tYm9fLnNldFRleHQocHVibGljVURESVJlZ0NvbWJvXy5nZXRJdGVtKDApKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0UHJpdmF0ZVVEREkoKQotICB7Ci0gICAgaWYgKCFwdWJsaXNoLmJvb2xlYW5WYWx1ZSgpICYmICFQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkKLSAgICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLnNldEVuYWJsZWQoZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNlbGVjdGlvbkV2ZW50KEV2ZW50IGV2ZW50KQotICB7Ci0gICAgaWYgKGxhdW5jaFVERElDaGVja2JveF8gPT0gZXZlbnQud2lkZ2V0KQotICAgICAgcHVibGljVURESVJlZ0NvbWJvXy5zZXRFbmFibGVkKGxhdW5jaFVERElDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkpOwotICAgIHN0YXR1c0xpc3RlbmVyLmhhbmRsZUV2ZW50KGV2ZW50KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1B1YmxpY1VEREkoYm9vbGVhbiBwdWJsaXNoKQotICB7Ci0gICAgbGF1bmNoVURESUNoZWNrYm94Xy5zZXRTZWxlY3Rpb24ocHVibGlzaCk7Ci0gICAgcHVibGljVURESVJlZ0NvbWJvXy5zZXRFbmFibGVkKHB1Ymxpc2gpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFRvUHVibGljVURESShCb29sZWFuIHB1Ymxpc2gpCi0gIHsKLSAgICBzZXRQdWJsaXNoVG9QdWJsaWNVRERJKHB1Ymxpc2guYm9vbGVhblZhbHVlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFRvUHJpdmF0ZVVEREkoYm9vbGVhbiBwdWJsaXNoKQotICB7Ci0gICAgbGF1bmNoUHJpdmF0ZVVERElDaGVja2JveF8uc2V0U2VsZWN0aW9uKHB1Ymxpc2gpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFRvUHJpdmF0ZVVEREkoQm9vbGVhbiBwdWJsaXNoKQotICB7Ci0gICAgc2V0UHVibGlzaFRvUHJpdmF0ZVVEREkocHVibGlzaC5ib29sZWFuVmFsdWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRQdWJsaXNoVG9QdWJsaWNVRERJKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hVRERJQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0UHVibGlzaFRvUHJpdmF0ZVVEREkoKQotICB7Ci0gICAgcmV0dXJuIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0Rm9yY2VMYXVuY2hPdXRzaWRlSURFKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBMYXVuY2hPcHRpb25bXSBnZXRMYXVuY2hPcHRpb25zKCkKLSAgewotICAgIFZlY3RvciBsYXVuY2hPcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWYgKGxhdW5jaFVERElDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IHJlZyA9IFB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgICAgaW50IFVERElSZWdTZWxlY3Rpb25JbmRleCA9IHB1YmxpY1VERElSZWdDb21ib18uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChVRERJUmVnU2VsZWN0aW9uSW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gcHVibGljVURESVJlZ0NvbWJvXy5nZXRJdGVtKFVERElSZWdTZWxlY3Rpb25JbmRleCk7Ci0gICAgICAgIFN0cmluZyBpZCA9IHJlZy5nZXRQdWJsaWNVRERJUmVnaXN0cnlUeXBlSURCeU5hbWUobmFtZSk7Ci0gICAgICAgIFB1YmxpY1VERElSZWdpc3RyeVR5cGUgdHlwZSA9IHJlZy5nZXRQdWJsaWNVRERJUmVnaXN0cnlUeXBlQnlJRChpZCk7Ci0gICAgICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLklOUVVJUllfVVJMLCB0eXBlLmdldElucXVpcnlVUkwoKSkpOwotICAgICAgICBsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5QVUJMSVNIX1VSTCwgdHlwZS5nZXRQdWJsaXNoVVJMKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgcHJpdmF0ZVJlZyA9IFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHByaXZhdGVUeXBlID0gcHJpdmF0ZVJlZy5nZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSgpOwotICAgICAgU3RyaW5nW10gcHJpdmF0ZUlucXVpcnlVUkwgPSBwcml2YXRlVHlwZS5nZXRQcml2YXRlVURESVJlZ2lzdHJ5SW5xdWlyeUFQSSgpOwotICAgICAgU3RyaW5nW10gcHJpdmF0ZVB1Ymxpc2hVUkwgPSBwcml2YXRlVHlwZS5nZXRQcml2YXRlVURESVJlZ2lzdHJ5UHVibGlzaEFQSSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcml2YXRlSW5xdWlyeVVSTC5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuSU5RVUlSWV9VUkwsIHByaXZhdGVJbnF1aXJ5VVJMW2ldKSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlBVQkxJU0hfVVJMLCBwcml2YXRlUHVibGlzaFVSTFtpXSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKExhdW5jaE9wdGlvbltdKSBsYXVuY2hPcHRpb25WZWN0b3IudG9BcnJheShuZXcgTGF1bmNoT3B0aW9uWzBdKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1NlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVlYWIyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgICAxMzQ5MTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgCi0gKiAyMDA2MDUxNyAgIDE0MjAyNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE4ICAgMTQyNTU0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guV29ya2JlbmNoUmVzb3VyY2VIZWxwZXJCYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2Vic2VydmljZS5XZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYnNlcnZpY2UuaGVscGVyLldlYlNlcnZpY2VzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuUG9ydENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV2ViU2VydmljZURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV3NkZFJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotCi0vKioKLSAqIFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kCi0gKiAKLSAqIEluaXRpYWxpemUgYW5kIGxvYWQgdGhlIGhhbmRsZXJzIGRhdGEKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDbWQgewotCi0gIHByaXZhdGUgV3NkZFJlc291cmNlW10gd3NkZFJlc291cmNlXyA9IG51bGw7Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uTmFtZV8gPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBlcnJvclN0YXR1c01zZ18gPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gaXNNdWx0aXBsZVNlbGVjdGlvbl87Ci0gIHByaXZhdGUgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXzsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gZ2V0SW5pdGlhbFNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb24gPT0gbnVsbCkgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCApOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2VsZWN0aW9uLnNpemUoKT4xKXsKLSAgICAJc3RhdHVzID0gcHJvY2Vzc011bHRpcGxlSGFuZGxlcnMoZW52KTsKLSAgICAJcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBzdGF0dXMgPSBwcm9jZXNzSGFuZGxlcnMoZW52KTsKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBwcm9jZXNzSGFuZGxlcnMoSUVudmlyb25tZW50IGVudikgewotICAgIHRyeSB7Ci0gICAgICBXZWJTZXJ2aWNlc01hbmFnZXIgd2ViU2VydmljZXNNYW5hZ2VyID0gbmV3IFdlYlNlcnZpY2VzTWFuYWdlcigpOwotICAgICAgTGlzdCBhbGxXU0RMU2VydmljZXMgPSB3ZWJTZXJ2aWNlc01hbmFnZXIuZ2V0QWxsV1NETFNlcnZpY2VzKCk7Ci0gICAgICBpbnQgc2VydmljZXNTaXplID0gYWxsV1NETFNlcnZpY2VzLnNpemUoKTsKLQotICAgICAgd3NkZFJlc291cmNlXz0gbmV3IFdzZGRSZXNvdXJjZVtzZXJ2aWNlc1NpemVdOwotICAgICAgd3NkZFJlc291cmNlX1swXSA9IGdldFdzZGRSZXNvdXJjZUZyb21TZWxlY3Rpb24oKTsKLSAgICAgIGlmICh3c2RkUmVzb3VyY2VfWzBdID09IG51bGwpIHsKLSAgICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XU0REX05PVF9GT1VORCk7Ci0gICAgICB9Ci0gICAgIAotICAgICAgLy8gY2hlY2sgZm9yIGFub3RoZXIgd3NkZFJlc291cmNlIG9mIGFub3RoZXIgSjJFRSBsZXZlbAotICAgICAgaW50IHggPSAwOwotICAgICAgd2hpbGUgKHg8c2VydmljZXNTaXplKSB7Ci0gICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlIClhbGxXU0RMU2VydmljZXMuZ2V0KHgpOwotICAgICAgICBXc2RkUmVzb3VyY2Ugd3NkZFJlcyA9IHdlYlNlcnZpY2VzTWFuYWdlci5nZXRXc2RkUmVzb3VyY2Uoc2VydmljZSk7Ci0gICAgICAgIGJvb2xlYW4gaXNVbmlxdWVXc2RkID0gdHJ1ZTsKLSAgICAgICAgZm9yIChpbnQgdz0wO3c8d3NkZFJlc291cmNlXy5sZW5ndGg7dysrKXsKLSAgICAgICAgCWlmICh3c2RkUmVzLmVxdWFscyh3c2RkUmVzb3VyY2VfW3ddKSl7Ci0gICAgICAgIAkJaXNVbmlxdWVXc2RkID0gZmFsc2U7Ci0gICAgICAgIAkJYnJlYWs7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChpc1VuaXF1ZVdzZGQpIHsKLSAgICAgICAgICB3c2RkUmVzb3VyY2VfW3hdID0gd3NkZFJlczsKLSAgICAgICAgfQotICAgICAgICB4Kys7Ci0gICAgICB9Ci0KLSAgICAgIC8vIGRldGVybWluZSB0b3RhbCAjIGZvciBkZXNjcmlwdGlvbnMKLSAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8gPSBuZXcgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW2dldE51bWJlcm9mU2VydmljZXMod3NkZFJlc291cmNlXyldOwotICAgICAgCi0gICAgICBpbnQgZGVzY0NvdW50ZXIgPSAwOwotICAgICAgZm9yIChpbnQgeT0wO3k8d3NkZFJlc291cmNlXy5sZW5ndGg7eSsrKSB7Ci0gICAgICAgIGlmICh3c2RkUmVzb3VyY2VfW3ldICE9bnVsbCkgewotCSAgICAgICAgV2ViU2VydmljZXMgd2ViU2VydmljZXMgPSB3c2RkUmVzb3VyY2VfW3ldLmdldFdlYlNlcnZpY2VzKCk7Ci0JICAgICAgICBpZiAod2ViU2VydmljZXMgIT0gbnVsbCkgewotCSAgICAgICAgICBMaXN0IHdzRGVzY3JpcHRpb25zID0gd2ViU2VydmljZXMuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9ucygpOwotCSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzRGVzY3JpcHRpb25zLnNpemUoKSA7IGkrKykgewotCSAKLQkgICAgICAgICAgICBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gd3NEZXNjcmlwdGlvbiA9IChXZWJTZXJ2aWNlRGVzY3JpcHRpb24pIHdzRGVzY3JpcHRpb25zLmdldChpKTsKLQkgICAgICAgICAgICBWZWN0b3IgaGFuZGxlcnMgPSBuZXcgVmVjdG9yKCk7ICAKLQkgICAgICAgICAgICBMaXN0IHdzUG9ydENvbXBvbmVudHMgPSB3c0Rlc2NyaXB0aW9uLmdldFBvcnRDb21wb25lbnRzKCk7Ci0JICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3c1BvcnRDb21wb25lbnRzLnNpemUoKTsgaisrKSB7Ci0JICAgICAgICAgICAgICBQb3J0Q29tcG9uZW50IHdzUG9ydCA9IChQb3J0Q29tcG9uZW50KSB3c1BvcnRDb21wb25lbnRzLmdldChqKTsKLQkgICAgICAgICAgICAgIFN0cmluZyBwb3J0TmFtZSA9IHdzUG9ydC5nZXRQb3J0Q29tcG9uZW50TmFtZSgpOwotCSAgICAgICAgICAgICAgTGlzdCB3c0hhbmRsZXJzID0gd3NQb3J0LmdldEhhbmRsZXJzKCk7Ci0JICAgICAKLQkgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd3NIYW5kbGVycy5zaXplKCk7IGsrKykgewotCSAgCi0JICAgICAgICAgICAgICAgIEhhbmRsZXIgd3NIYW5kbGVyID0gKEhhbmRsZXIpIHdzSGFuZGxlcnMuZ2V0KGspOwotCSAgCi0JICAgICAgICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaGFuZGxlckl0ZW0gPSBuZXcgSGFuZGxlclRhYmxlSXRlbSgpOwotCSAgICAgICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRIYW5kbGVyKHdzSGFuZGxlcik7Ci0JICAgICAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXJOYW1lKHdzSGFuZGxlci5nZXRIYW5kbGVyTmFtZSgpKTsKLQkgICAgICAgICAgICAgICAgaGFuZGxlckl0ZW0uc2V0SGFuZGxlckNsYXNzTmFtZSh3c0hhbmRsZXIuZ2V0SGFuZGxlckNsYXNzKCkpOwotCSAgICAgICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRQb3J0KHdzUG9ydCk7Ci0JICAgICAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldFBvcnROYW1lKHBvcnROYW1lKTsKLQkgICAgICAgICAgICAgICAgaGFuZGxlckl0ZW0uc2V0V3NEZXNjUmVmKHdzRGVzY3JpcHRpb24pOwotCSAgICAgICAgICAgICAgICAKLQkgICAgICAgICAgICAgICAgaGFuZGxlcnMuYWRkKGhhbmRsZXJJdGVtKTsKLQkgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgU3RyaW5nIHdzRGVzY05hbWUgPSB3c0Rlc2NyaXB0aW9uLmdldFdlYlNlcnZpY2VEZXNjcmlwdGlvbk5hbWUoKTsKLQkgICAgICAgICAgICBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfW2Rlc2NDb3VudGVyXSA9IG5ldyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIoKTsKLQkgICAgICAgICAgICBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfW2Rlc2NDb3VudGVyXS5zZXRIYW5kbGVyTGlzdChoYW5kbGVycyk7Ci0JICAgICAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tkZXNjQ291bnRlcl0uc2V0RGVzY3JpcHRpb25PYmplY3Qod3NEZXNjcmlwdGlvbik7Ci0JICAgICAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tkZXNjQ291bnRlcl0uc2V0RGVzY3JpcHRpb25OYW1lKHdzRGVzY05hbWUpOwotCSAgICAgICAgICAgIGRlc2NDb3VudGVyKys7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfID09IG51bGwpewotICAgICAgICAgIC8vcmVwb3J0IG5vIFdlYiBzZXJ2aWNlIGlzIGF2YWlsYWJsZQotICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dFQl9TRVJWSUNFU19OT1RfRk9VTkQpOyAgICAgICAgCi0gICAgICB9ICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVELCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICAvKioKLSAgICogRm9yIHByb2Nlc3NpbmcgbXVsdGlwbGUgc2VydmljZSBzZWxlY3Rpb247IG9ubHkgcHJlcGFyZSB0YWJsZSBvZiBzZXJ2aWNlIGRlc2NyaXB0aW9uIG5hbWVzCi0gICAqIGRlc2NyaXB0aW9uIG9iamVjdHMgd2lsbCBiZSBwcm9jZXNzZWQgbGF0ZXIgYnkgdGhlIG91dHB1dCBjb21tYW5kIAotICAgKiBAcGFyYW0gZW52Ci0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgSVN0YXR1cyBwcm9jZXNzTXVsdGlwbGVIYW5kbGVycyhJRW52aXJvbm1lbnQgZW52KXsKLQotCSAgU2VydmljZVtdIHNlcnZpY2VzID0gZ2V0U2VsZWN0ZWRTZXJ2aWNlcygpOwotICAgICAgaWYgKGVycm9yU3RhdHVzTXNnXyAhPSBudWxsKXsKLSAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoZXJyb3JTdGF0dXNNc2dfKTsKLSAgICAgIH0KLSAgICAgIGlzTXVsdGlwbGVTZWxlY3Rpb25fID0gdHJ1ZTsKLQotICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9IG5ldyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJbc2VydmljZXMubGVuZ3RoXTsKLSAgICAgIFZlY3RvciBoYW5kbGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VzLmxlbmd0aDtpKyspewotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGRlc2NOYW1lID0gc2VydmljZXNbaV0uZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzRGVzY3JpcHRpb24gPSBnZXRTZXJ2aWNlRGVzY3JpcHRpb24oc2VydmljZXNbaV0sIGRlc2NOYW1lKTsKLSAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tpXSA9IG5ldyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIoKTsKLSAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tpXS5zZXRIYW5kbGVyTGlzdChoYW5kbGVycyk7Ci0gICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0uc2V0RGVzY3JpcHRpb25OYW1lKGRlc2NOYW1lKTsKLSAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tpXS5zZXREZXNjcmlwdGlvbk9iamVjdCh3c0Rlc2NyaXB0aW9uKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICAvKioKLSAgICogTWF0Y2hlcyB0aGUgc2VydmljZU5hbWUgd2l0aCB0aGUgU2VydmljZURlc2NyaXB0aW9uTmFtZSB0byBnZXQgdGhlIFdlYlNlcnZpY2VEZXNjcmlwdGlvbgotICAgKiBAcGFyYW0gc2VydmljZQotICAgKiBAcGFyYW0gc2VydmljZU5hbWUKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gZ2V0U2VydmljZURlc2NyaXB0aW9uKFNlcnZpY2Ugc2VydmljZSwgU3RyaW5nIHNlcnZpY2VOYW1lKXsKLSAgICBXZWJTZXJ2aWNlc01hbmFnZXIgd2ViU2VydmljZXNNYW5hZ2VyID0gbmV3IFdlYlNlcnZpY2VzTWFuYWdlcigpOwotICAgIFdzZGRSZXNvdXJjZSB3c2RkUmVzb3VyY2UgPSB3ZWJTZXJ2aWNlc01hbmFnZXIuZ2V0V3NkZFJlc291cmNlKHNlcnZpY2UpOwotICAgIGlmICh3c2RkUmVzb3VyY2UhPW51bGwpIHsKLSAgICAgIFdlYlNlcnZpY2VzIHNlcnZpY2VzID0gd3NkZFJlc291cmNlLmdldFdlYlNlcnZpY2VzKCk7Ci0gICAgICBpZiAoc2VydmljZXMhPW51bGwpIHsKLSAgICAgICAgTGlzdCBkZXNjcmlwdGlvbnMgID0gc2VydmljZXMuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9ucygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbnMuc2l6ZSgpO2krKyl7Ci0gICAgICAgICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzZCA9IChXZWJTZXJ2aWNlRGVzY3JpcHRpb24pZGVzY3JpcHRpb25zLmdldChpKTsKLSAgICAgICAgICBpZiAod3NkIT1udWxsICYmIHdzZC5nZXRXZWJTZXJ2aWNlRGVzY3JpcHRpb25OYW1lKCkuZXF1YWxzKHNlcnZpY2VOYW1lKSl7Ci0gICAgICAgICAgICByZXR1cm4gd3NkOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SXNNdWx0aXBsZVNlbGVjdGlvbigpewotCSAgcmV0dXJuIHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbl87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzR2VuU2tlbGV0b25FbmFibGVkXy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEdlblNrZWxldG9uRW5hYmxlZCgpIHsKLSAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzb3VyY2VPdXRwdXRMb2NhdGlvbl8uCi0gICAqLwotICBwdWJsaWMgSVBhdGhbXSBnZXRTb3VyY2VPdXRwdXRMb2NhdGlvbigpIHsKLSAgICBJUGF0aFtdIGxvY2F0aW9ucyA9IG51bGw7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoKTsKLQotICAgIGlmIChwcm9qZWN0ICE9IG51bGwpIHsKLSAgICAgIGxvY2F0aW9ucyA9IFJlc291cmNlVXRpbHMuZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyhwcm9qZWN0KTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdF87Ci0gICAgICBpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0gICAgICAgIGxvY2F0aW9ucyA9IFJlc291cmNlVXRpbHMuZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyhwcm9qZWN0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxvY2F0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBXc2RkUmVzb3VyY2UKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIFdzZGRSZXNvdXJjZVtdIGdldFdzZGRSZXNvdXJjZSgpIHsKLSAgICByZXR1cm4gd3NkZFJlc291cmNlXzsKLSAgfQotCi0gIHByaXZhdGUgV3NkZFJlc291cmNlIGdldFdzZGRSZXNvdXJjZUZyb21TZWxlY3Rpb24oKSB7Ci0gICAgV2ViU2VydmljZXNNYW5hZ2VyIHdlYlNlcnZpY2VzTWFuYWdlciA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLQotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRTZWwgPSBnZXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0gICAgaWYgKGluaXRTZWwgIT0gbnVsbCAmJiBpbml0U2VsLnNpemUoKSA9PSAxKSB7Ci0gICAgICBPYmplY3Qgb2JqID0gaW5pdFNlbC5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbCkgewotICAgICAgICAvLyBTZXJ2aWNlIG9iamVjdAotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgb2JqOwotICAgICAgICBkZXNjcmlwdGlvbk5hbWVfID0gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICBwcm9qZWN0XyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlKTsKLSAgICAgICAgcmV0dXJuIHdlYlNlcnZpY2VzTWFuYWdlci5nZXRXc2RkUmVzb3VyY2Uoc2VydmljZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKSB7Ci0gICAgICAgIC8vIFdTREwgcmVzb3VyY2UKLSAgICAgICAgV1NETFJlc291cmNlSW1wbCByZXMgPSAoV1NETFJlc291cmNlSW1wbCkgb2JqOwotICAgICAgICBwcm9qZWN0XyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChyZXMpOwotICAgICAgICBMaXN0IHdzZGxSZXNvdXJjZXMgPSB3ZWJTZXJ2aWNlc01hbmFnZXIuZ2V0V1NETFNlcnZpY2VzKHJlcyk7Ci0gICAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc01hbmFnZXIuZ2V0V3NkZFJlc291cmNlKChTZXJ2aWNlKSB3c2RsUmVzb3VyY2VzLmdldCgwKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSB7Ci0gICAgICAgIFdlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUgd3NuZ3QgPSAoV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSkgb2JqOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSl3c25ndC5nZXRXc2RsU2VydmljZSgpOwotICAgICAgICBkZXNjcmlwdGlvbk5hbWVfID0gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOyAgICAgICAgCi0gICAgICAgIHByb2plY3RfID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2UpOwotICAgICAgICByZXR1cm4gd2ViU2VydmljZXNNYW5hZ2VyLmdldFdzZGRSZXNvdXJjZShzZXJ2aWNlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIElGaWxlKXsKLSAgICAJICAvLyB3ZWJzZXJ2aWNlcy54bWwgZmlsZQotICAgIAkgIFJlc291cmNlIHJlcyA9IFdvcmtiZW5jaFJlc291cmNlSGVscGVyQmFzZS5nZXRSZXNvdXJjZSgoSUZpbGUpb2JqLCB0cnVlKTsKLSAgICAJICBXc2RkUmVzb3VyY2Ugd3NkZFJlcyA9IChXc2RkUmVzb3VyY2UpcmVzOwotICAgICAgICAgIFdlYlNlcnZpY2VzIHdlYlNlcnZpY2VzID0gd3NkZFJlcy5nZXRXZWJTZXJ2aWNlcygpOwotICAgICAgICAgIGlmICh3ZWJTZXJ2aWNlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBMaXN0IHdzRGVzY3JpcHRpb25zID0gd2ViU2VydmljZXMuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9ucygpOwotICAgICAgICAgICAgaWYgKHdzRGVzY3JpcHRpb25zIT1udWxsKSB7Ci0gICAgICAgICAgICAgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c2QgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKXdzRGVzY3JpcHRpb25zLmdldCgwKTsKLSAgICAgICAgICAgICAgZGVzY3JpcHRpb25OYW1lXyA9IHdzZC5nZXRXZWJTZXJ2aWNlRGVzY3JpcHRpb25OYW1lKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgIAkgIHByb2plY3RfID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHJlcyk7Ci0gICAgCSAgcmV0dXJuIHdzZGRSZXM7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxsOwotCi0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdG90YWwgbnVtYmVyIG9mIFNlcnZpY2VEZXNjcmlwdGlvbnMgZ2l2ZW4gMTQgYW5kIDEzIHNlcnZpY2VzCi0gICAqIEBwYXJhbSB3c2RkUmVzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgaW50IGdldE51bWJlcm9mU2VydmljZXMoV3NkZFJlc291cmNlW10gd3NkZFJlcyl7Ci0gICAgaW50IG51bT0gMDsKLSAgICBmb3IgKGludCBpPTA7aTx3c2RkUmVzLmxlbmd0aDtpKyspewotICAgIAlpZiAod3NkZFJlc1tpXSE9bnVsbCkgewotICAgIAkJV2ViU2VydmljZXMgd3MgPSB3c2RkUmVzW2ldLmdldFdlYlNlcnZpY2VzKCk7Ci0gICAgCQlpZiAod3MhPW51bGwpewotICAgIAkJCW51bSArPSB3cy5nZXRXZWJTZXJ2aWNlRGVzY3JpcHRpb25zKCkuc2l6ZSgpOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICAgIHJldHVybiBudW07Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogRm9yIG11bHRpcGxlIHNlbGVjdGlvbiBvZiBTZXJ2aWNlcwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIFNlcnZpY2VbXSBnZXRTZWxlY3RlZFNlcnZpY2VzKCl7Ci0JICBXZWJTZXJ2aWNlc01hbmFnZXIgd3NNYW5hZ2VyID0gbmV3IFdlYlNlcnZpY2VzTWFuYWdlcigpOwotCSAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdFNlbCA9IGdldEluaXRpYWxTZWxlY3Rpb24oKTsKLSAgCSAgU2VydmljZVtdIHNlcnZpY2VzID0gbmV3IFNlcnZpY2VbaW5pdFNlbC5zaXplKCldOwotICAJICB3c2RkUmVzb3VyY2VfID0gbmV3IFdzZGRSZXNvdXJjZVtpbml0U2VsLnNpemUoKV07Ci0gIAkgIEl0ZXJhdG9yIGl0ZXIgPSBpbml0U2VsLml0ZXJhdG9yKCk7Ci0gIAkgIGZvciAoaW50IGk9MDtpPGluaXRTZWwuc2l6ZSgpO2krKykgewotICAJCSAgT2JqZWN0IG9iaiA9IGl0ZXIubmV4dCgpOwotICAJCSAgaWYgKG9iaiBpbnN0YW5jZW9mIFNlcnZpY2UpewotICAJCQkgIHNlcnZpY2VzW2ldID0gKFNlcnZpY2Upb2JqOwotICAJCQkgIHdzZGRSZXNvdXJjZV9baV0gPSB3c01hbmFnZXIuZ2V0V3NkZFJlc291cmNlKHNlcnZpY2VzW2ldKTsKLSAgCQkgIH0KLSAgCQkgIGVsc2V7Ci0gIAkJCSAgZXJyb3JTdGF0dXNNc2dfID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9JTlZBTElEX01VTFRJUExFX1NFUlZJQ0VfU0VMRUNUOwotICAJCQkgIHJldHVybiBudWxsOwotICAJCSAgfQotICAJICB9Ci0gIAkgIHJldHVybiBzZXJ2aWNlczsKLSAgfQotICAKLQotICAKLSAgLyoqCi0gICAqIEdldCBEZXNjcmlwdGlvbiBOYW1lIGZvciBzaW5nbGUgV2ViIHNlcnZpY2VzIHNlbGVjdGVkCi0gICAqIG51bGwgaWYgbXVsaXRwbGUgc2VydmljZXMgYXJlIHNlbGVjdGVkCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb25OYW1lKCl7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uTmFtZV87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJbXSBnZXRIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzKCl7Ci0gICAgcmV0dXJuIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl87Ci0gIH0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1NlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjhjNjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1NlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0ICAgMTM0OTEzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgIAotICogMjAwNjA1MTcgICAxNDIwMjcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV3NkZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldzZGRSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuaW50ZXJuYWwuaW1wbC5Xc2RkRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyRGVzY3JpcHRpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmludGVybmFsLmVtZi51dGlsaXRpZXMuRXRvb2xzQ29weVV0aWxpdHk7Ci0KLS8qCi0gKiBQcm92aWRlIGEgd2F5IHRvIGV4dGVybmFsaXplIHRoZSBlZGl0ZWQgZmllbGRzIGFuZCBjcmVhdGUgbmV3IGhhbmRsZXJzCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwcml2YXRlIFdzZGRSZXNvdXJjZVtdIHdzZGRSZXNvdXJjZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJbXSBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfOwotCi0gIC8qKgotICAgKiBGb3IgZWFjaCBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIsIHRoZSB1c2VyIHNlbGVjdGVkIEhhbmRsZXJzIGFyZQotICAgKiBzeW5jJ2QgdXAgd2l0aCB0aGUgaW50ZXJuYWwgbW9kZWwKLSAgICogRm9yIG11bHRpcGxlIHNlcnZpY2VzLCBoYW5kbGVycyBhcmUgYWRkZWQgKG5vdCByZW1vdmVkKSB0byBlYWNoIHBvcnQuCi0gICAqIAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgdHJ5IHsKLSAgICAgIGlmIChpc011bHRpcGxlU2VsZWN0aW9uXyl7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLmxlbmd0aDtpKyspewotICAgICAgICAgICAKLSAgICAgICAgICBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfW2ldLmFkZEhhbmRsZXJUb0FsbFBvcnRzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvLyBhZGQgaGFuZGxlcihzKSBmb3Igc2luZ2xlIHNlcnZpY2Ugc2VsZWN0ZWQKLSAgICAgICAgZm9yIChpbnQgaD0wO2g8aGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXy5sZW5ndGg7aCsrKXsKLSAgCi0gICAgICAgICAgSGFzaHRhYmxlIHdzUG9ydHNUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgICBIYXNodGFibGUgd3NQb3J0VG9IYW5kbGVyVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIAotICAgICAgICAgIFN0cmluZyBzZXJ2aWNlRGVzY05hbWUgPSBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfW2hdLmdldERlc2NyaXB0aW9uTmFtZSgpOwotICAgICAgICAgIC8vIGxvYWQgUG9ydE5hbWUgLT4gUG9ydENvbXBvbmVudCB0YWJsZQotICAgICAgICAgIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlciBoZGggPSBIYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIuZ2V0Rm9yRGVzY3JpcHRpb25OYW1lKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8sIHNlcnZpY2VEZXNjTmFtZSk7Ci0gICAgICAgICAgaWYgKGhkaCE9bnVsbCkgewotICAgICAgICAgICAgCi0gICAgICAgICAgICBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gd3NEZXNjcmlwdGlvbl8gPSAgaGRoLmdldERlc2NyaXB0aW9uT2JqZWN0KCk7ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHdzRGVzY3JpcHRpb25fICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgTGlzdCB3c1BvcnRzID0gd3NEZXNjcmlwdGlvbl8uZ2V0UG9ydENvbXBvbmVudHMoKTsKLSAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCB3c1BvcnRzLnNpemUoKTsgaysrKSB7Ci0gICAgICAgICAgICAgICAgUG9ydENvbXBvbmVudCBwb3J0ID0gKFBvcnRDb21wb25lbnQpIHdzUG9ydHMuZ2V0KGspOwotICAgICAgICAgICAgICAgIHdzUG9ydHNUYWJsZS5wdXQocG9ydC5nZXRQb3J0Q29tcG9uZW50TmFtZSgpLCBwb3J0KTsKLSAgICAgICAgICAgICAgICB3c1BvcnRUb0hhbmRsZXJUYWJsZS5wdXQocG9ydC5nZXRQb3J0Q29tcG9uZW50TmFtZSgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExpc3QgaGFuZGxlclRhYmxlSXRlbXMgPSBoZGguZ2V0SGFuZGxlckxpc3QoKTsgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFuZGxlclRhYmxlSXRlbXMgIT0gbnVsbCkgewotICAKLSAgICAgICAgICAgICAgV3NkZEZhY3Rvcnkgd3NkZEZhY3RvcnkgPSBuZXcgV3NkZEZhY3RvcnlJbXBsKCk7Ci0gIAotICAgICAgICAgICAgICAvL2Zvcm0gcG9ydCBjb21wb25lbnRzIHRhYmxlcyBmaXJzdAotICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhhbmRsZXJUYWJsZUl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gIAotICAgICAgICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pIGhhbmRsZXJUYWJsZUl0ZW1zLmdldChpKTsKLSAgICAgICAgICAgICAgICBQb3J0Q29tcG9uZW50IHdzUG9ydCA9IChQb3J0Q29tcG9uZW50KSBodGkuZ2V0UG9ydCgpOwotICAgICAgICAgICAgICAgIGlmICh3c1BvcnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vZmluZCBpdAotICAgICAgICAgICAgICAgICAgaWYgKHdzUG9ydHNUYWJsZS5nZXQoaHRpLmdldFBvcnROYW1lKCkpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHdzUG9ydCA9IChQb3J0Q29tcG9uZW50KSB3c1BvcnRzVGFibGUuZ2V0KGh0aS5nZXRQb3J0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgaXQ7IHNob3VsZCBub3QgZ2V0IGludG8gaGVyZQotICAgICAgICAgICAgICAgICAgICB3c1BvcnQgPSB3c2RkRmFjdG9yeS5jcmVhdGVQb3J0Q29tcG9uZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIHdzUG9ydC5zZXRQb3J0Q29tcG9uZW50TmFtZShodGkuZ2V0UG9ydE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdzUG9ydHNUYWJsZS5wdXQod3NQb3J0LmdldFBvcnRDb21wb25lbnROYW1lKCksIHdzUG9ydCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdzUG9ydFRvSGFuZGxlclRhYmxlLnB1dCh3c1BvcnQuZ2V0UG9ydENvbXBvbmVudE5hbWUoKSwgbmV3IEFycmF5TGlzdCgpKTsKLSAgICAgICAgICAgICAgfQotICAKLSAgICAgICAgICAgICAgLy8gZm9ybSBIYW5kbGVyIGFuZCBwb3J0cyB0YWJsZQotICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhhbmRsZXJUYWJsZUl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgCi0gICAgICAgICAgICAgICAgSGFuZGxlclRhYmxlSXRlbSBodGkgPSAoSGFuZGxlclRhYmxlSXRlbSkgaGFuZGxlclRhYmxlSXRlbXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBwb3J0TmFtZSA9IGh0aS5nZXRQb3J0TmFtZSgpOwotICAgIAotICAgICAgICAgICAgICAgIFBvcnRDb21wb25lbnQgcG9ydCA9IChQb3J0Q29tcG9uZW50KSB3c1BvcnRzVGFibGUuZ2V0KHBvcnROYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAocG9ydCA9PSBudWxsKSByZXR1cm4gc3RhdHVzOwotICAgIAotICAgICAgICAgICAgICAgIExpc3QgZXhpc3RpbmdIYW5kbGVycyA9IHBvcnQuZ2V0SGFuZGxlcnMoKTsKLSAgICAKLSAgICAgICAgICAgICAgICBPYmplY3QgaGFuZGxlciA9IGh0aS5nZXRIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0hhbmRsZXJzLmNvbnRhaW5zKGhhbmRsZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgaXQKLSAgICAgICAgICAgICAgICAgIEhhbmRsZXIgbmV3SGFuZGxlciA9IHdzZGRGYWN0b3J5LmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc2V0SGFuZGxlck5hbWUoaHRpLmdldEhhbmRsZXJOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyQ2xhc3MoaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAoKExpc3QpIHdzUG9ydFRvSGFuZGxlclRhYmxlLmdldChwb3J0TmFtZSkpLmFkZChuZXdIYW5kbGVyKTsKLSAgICAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFuZGxlciBpbnN0YW5jZW9mIEhhbmRsZXIpIHsKLSAgICAgICAgICAgICAgICAgIC8vIGNsb25lIGl0Ci0gICAgICAgICAgICAgICAgICBFdG9vbHNDb3B5VXRpbGl0eSBjb3B5VXRpbCA9IG5ldyBFdG9vbHNDb3B5VXRpbGl0eSgpOwotICAgICAgICAgICAgICAgICAgY29weVV0aWwuc2V0Q29weUFkYXB0ZXJzKHRydWUpOwotICAgICAgICAgICAgICAgICAgSGFuZGxlciBjbG9uZWRIYW5kbGVyID0gKEhhbmRsZXIpIGNvcHlVdGlsLmNvcHkoKEhhbmRsZXIpIGhhbmRsZXIpOwotICAgICAgICAgICAgICAgICAgKChMaXN0KSB3c1BvcnRUb0hhbmRsZXJUYWJsZS5nZXQocG9ydE5hbWUpKS5hZGQoY2xvbmVkSGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICAvLyByZW1vdmUgZXhpc3RpbmcgaGFuZGxlcnMgZnJvbSBwb3J0cwotICAgICAgICAgICAgcmVtb3ZlRXhpc3RpbmdIYW5kbGVycyh3c1BvcnRzVGFibGUsIHdzUG9ydFRvSGFuZGxlclRhYmxlKTsKLSAgICAKLSAgICAgICAgICAgIC8vIGFkZCBwb3J0cyB0byB3c0Rlc2NyaXB0aW9uCi0gICAgICAgICAgICBhZGRQb3J0c1RvRGVzY3JpcHRpb25zKHdzUG9ydHNUYWJsZSwgd3NEZXNjcmlwdGlvbl8pOwotICAgIAotICAgICAgICAgICAgLy8gYWRkIGhhbmRsZXJzIHRvIHBvcnRzCi0gICAgICAgICAgICBhZGRIYW5kbGVyc1RvUG9ydHMod3NQb3J0c1RhYmxlLCB3c1BvcnRUb0hhbmRsZXJUYWJsZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIHNhdmUKLSAgICAgIGlmICh3c2RkUmVzb3VyY2VfICE9IG51bGwpIHsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8d3NkZFJlc291cmNlXy5sZW5ndGg7aSsrKSB7Ci0gICAgICAgIAlpZiAod3NkZFJlc291cmNlX1tpXSE9bnVsbCkKLSAgICAgICAgCQl3c2RkUmVzb3VyY2VfW2ldLnNhdmUobmV3IEhhc2hNYXAoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgCi0gICAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZUV4aXN0aW5nSGFuZGxlcnMoSGFzaHRhYmxlIHBvcnRzVGFibGUsIEhhc2h0YWJsZSBwb3J0c1RvSGFuZGxlcnNUYWJsZSkgewotICAgIHRyeSB7Ci0gICAgICBFbnVtZXJhdGlvbiBwb3J0cyA9IHBvcnRzVG9IYW5kbGVyc1RhYmxlLmtleXMoKTsKLSAgICAgIHdoaWxlIChwb3J0cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICBTdHJpbmcgcG9ydE5hbWUgPSAoU3RyaW5nKSBwb3J0cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBPYmplY3QgcG9ydCA9IHBvcnRzVGFibGUuZ2V0KHBvcnROYW1lKTsKLSAgICAgICAgaWYgKHBvcnQgIT0gbnVsbCAmJiBwb3J0IGluc3RhbmNlb2YgUG9ydENvbXBvbmVudCkgewotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSAoKFBvcnRDb21wb25lbnQpIHBvcnQpLmdldEhhbmRsZXJzKCk7Ci0gICAgICAgICAgaGFuZGxlcnMuY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFBvcnRzVG9EZXNjcmlwdGlvbnMoSGFzaHRhYmxlIHBvcnRzVGFibGUsIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c0Rlc2NyaXB0aW9uXykgewotICAgIHRyeSB7Ci0gICAgICBFbnVtZXJhdGlvbiBwb3J0cyA9IHBvcnRzVGFibGUua2V5cygpOwotICAgICAgd2hpbGUgKHBvcnRzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgIFN0cmluZyBwb3J0TmFtZSA9IChTdHJpbmcpIHBvcnRzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIC8vIG5ld2x5IGVkaXRlZCBwb3J0Ci0gICAgICAgIE9iamVjdCBwb3J0ID0gcG9ydHNUYWJsZS5nZXQocG9ydE5hbWUpOwotICAgICAgICAKLSAgICAgICAgLy8gZXhpc3RpbmcgcG9ydAotICAgICAgICBMaXN0IGVtZlBvcnRzID0gd3NEZXNjcmlwdGlvbl8uZ2V0UG9ydENvbXBvbmVudHMoKTsKLSAgICAgICAgaWYgKCFlbWZQb3J0cy5jb250YWlucyhwb3J0KSAmJiBwb3J0ICE9IG51bGwgJiYgcG9ydCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnQpIHsKLSAgICAgICAgICBlbWZQb3J0cy5hZGQoKFBvcnRDb21wb25lbnQpIHBvcnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRIYW5kbGVyc1RvUG9ydHMoSGFzaHRhYmxlIHBvcnRzVGFibGUsIEhhc2h0YWJsZSBwb3J0c1RvSGFuZGxlcnNUYWJsZSkgewotICAgIHRyeSB7Ci0gICAgICBFbnVtZXJhdGlvbiBwb3J0cyA9IHBvcnRzVG9IYW5kbGVyc1RhYmxlLmtleXMoKTsKLSAgICAgIHdoaWxlIChwb3J0cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICBTdHJpbmcgcG9ydE5hbWUgPSAoU3RyaW5nKSBwb3J0cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBPYmplY3QgcG9ydCA9IHBvcnRzVGFibGUuZ2V0KHBvcnROYW1lKTsKLSAgICAgICAgaWYgKHBvcnQgIT0gbnVsbCAmJiBwb3J0IGluc3RhbmNlb2YgUG9ydENvbXBvbmVudCkgewotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSAoTGlzdCkgcG9ydHNUb0hhbmRsZXJzVGFibGUuZ2V0KHBvcnROYW1lKTsKLQotICAgICAgICAgIExpc3QgbW9kZWxIYW5kbGVycyA9ICgoUG9ydENvbXBvbmVudCkgcG9ydCkuZ2V0SGFuZGxlcnMoKTsKLSAgICAgICAgICBtb2RlbEhhbmRsZXJzLmFkZEFsbChoYW5kbGVycyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIKLSAgICogQHBhcmFtIGhkaHMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGRocyl7Ci0gICAgdGhpcy5oYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfID0gaGRoczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SXNNdWx0aXBsZVNlbGVjdGlvbihib29sZWFuIGlzTXVsaXRwbGVTZWxlY3Rpb24pIHsKLSAgICB0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25fID0gaXNNdWxpdHBsZVNlbGVjdGlvbjsKLSAgfQotCi0KLSAgcHVibGljIHZvaWQgc2V0V3NkZFJlc291cmNlKFdzZGRSZXNvdXJjZVtdIHdzZGRSZXMpIHsKLSAgICB0aGlzLndzZGRSZXNvdXJjZV8gPSB3c2RkUmVzOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGFibGVWaWV3ZXJXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9UYWJsZVZpZXdlcldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmMyNTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9UYWJsZVZpZXdlcldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwNSAgIDEzOTkxOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlByb3BlcnRpZXNSZXNvdXJjZUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uVGFibGVFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Gb2N1c0FkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Gb2N1c0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlRyYXZlcnNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotCi0KLXB1YmxpYyBjbGFzcyBUYWJsZVZpZXdlcldpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIGludCBERUZBVUxUX1RBQkxFX0hFSUdIVF9ISU5UID0gMTAwOwotICBwcml2YXRlIGludCBERUZBVUxUX0NPTFVNTl9XSURUSCA9IDgwOwotCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZSBNQVBfT05FX1RPX09ORSA9IDM7Ci0gIHB1YmxpYyBzdGF0aWMgYnl0ZSBNQVBfTUFOWV9UT19PTkUgPSAxOwotICBwdWJsaWMgc3RhdGljIGJ5dGUgTUFQX01BTllfVE9fTUFOWSA9IDA7Ci0KLSAgcHJpdmF0ZSBTdHJpbmdbXSBjb2x1bW5zXzsKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcl87Ci0gIHByaXZhdGUgVGFibGUgdGFibGVfOwotICBwcml2YXRlIFRhYmxlRWRpdG9yIGVkaXRvcl87Ci0gIHByaXZhdGUgVGFibGVFZGl0b3JMaXN0ZW5lciB0YWJsZUVkaXRvckxpc3RlbmVyXzsKLSAgcHJpdmF0ZSBUZXh0IHRleHRfOwotICBwcml2YXRlIEJ1dHRvbiBpbXBvcnRfOwotICBwcml2YXRlIEJ1dHRvbiBhZGRfOwotICBwcml2YXRlIEJ1dHRvbiByZW1vdmVfOwotICAKLSAgcHJpdmF0ZSBDb21wb3NpdGUgcGFyZW50XzsKLSAgcHJpdmF0ZSBMaXN0ZW5lciAgc3RhdHVzTGlzdGVuZXJfOwotCi0gIHByaXZhdGUgU3RyaW5nIG1lc3NhZ2UgPSBudWxsOwotICBwcml2YXRlIGJ5dGUgcmVzY3JpY3Rpb24gPSBNQVBfTUFOWV9UT19NQU5ZOwotCi0gIHByaXZhdGUgTGlzdCB2YWx1ZXNfOwotICBwcml2YXRlIE9iamVjdCBkZWZhdWx0VmFsdWVfOwotCi0gIHByaXZhdGUgUHJvcGVydGllc1Jlc291cmNlRmlsdGVyIGZpbHRlcl8gPSBuZXcgUHJvcGVydGllc1Jlc291cmNlRmlsdGVyKCk7Ci0KLSAgcHVibGljIFRhYmxlVmlld2VyV2lkZ2V0KFN0cmluZ1tdIGNvbHVtbnMsIExpc3QgaW5pdFZhbHVlcywgT2JqZWN0IGRlZmF1bHRWYWx1ZSwgYnl0ZSByZXNjcmljdGlvbikKLSAgewotCWNvbHVtbnNfID0gY29sdW1uczsKLQl2YWx1ZXNfID0gbmV3IEFycmF5TGlzdCgpOwotCWlmIChpbml0VmFsdWVzICE9IG51bGwgJiYgaW5pdFZhbHVlcy5zaXplKCkgPiAwKQotCSAgdmFsdWVzXy5hZGRBbGwoaW5pdFZhbHVlcyk7Ci0JZGVmYXVsdFZhbHVlXyA9IChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgPyBkZWZhdWx0VmFsdWUgOiBuZXcgU3RyaW5nKCIiKTsKLQl0aGlzLnJlc2NyaWN0aW9uID0gcmVzY3JpY3Rpb247Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7IAotICAgIHBhcmVudF8gICAgICAgICA9IHBhcmVudDsKLSAgICBzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsKLSAgICAKLQlDb21wb3NpdGUgIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JR3JpZExheW91dCBnbCAgICAgICAgPSBuZXcgR3JpZExheW91dCgpOwotCQotCWdsLm1hcmdpbkhlaWdodCA9IDA7Ci0JZ2wubWFyZ2luV2lkdGggPSAwOwotCWNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCXRhYmxlXyA9IG5ldyBUYWJsZShjb21wb3NpdGUsIFNXVC5TSU5HTEUgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuQk9SREVSKTsKLQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotCWdkLmhlaWdodEhpbnQgPSBERUZBVUxUX1RBQkxFX0hFSUdIVF9ISU5UOwotCXRhYmxlXy5zZXRMYXlvdXREYXRhKGdkKTsKLQl0YWJsZV8uc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQl0YWJsZV8uc2V0TGluZXNWaXNpYmxlKHRydWUpOwotCVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0JaW50IG1heFdpZHRoID0gREVGQVVMVF9DT0xVTU5fV0lEVEg7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zXy5sZW5ndGg7IGkrKykKLQl7Ci0JICBUYWJsZUNvbHVtbiB0YWJsZUNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZV8sIFNXVC5OT05FKTsKLQkgIHRhYmxlQ29sdW1uLnNldFRleHQoY29sdW1uc19baV0pOwotCSAgdGFibGVDb2x1bW4ucGFjaygpOwotCSAgaW50IHRhYmxlQ29sdW1uV2lkdGggPSBNYXRoLm1heChERUZBVUxUX0NPTFVNTl9XSURUSCwgdGFibGVDb2x1bW4uZ2V0V2lkdGgoKSk7Ci0JICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLCB0YWJsZUNvbHVtbldpZHRoKTsKLQkgIENvbHVtbldlaWdodERhdGEgY29sdW1uRGF0YSA9IG5ldyBDb2x1bW5XZWlnaHREYXRhKHRhYmxlQ29sdW1uV2lkdGgsIHRhYmxlQ29sdW1uV2lkdGgsIHRydWUpOwotCSAgdGFibGVMYXlvdXQuYWRkQ29sdW1uRGF0YShjb2x1bW5EYXRhKTsKLQl9Ci0JdGFibGVfLnNldExheW91dCh0YWJsZUxheW91dCk7Ci0JLy8gaW5pdGlhbGl6ZSB0aGUgdGFibGUgZWRpdG9yCi0JZWRpdG9yXyA9IG5ldyBUYWJsZUVkaXRvcih0YWJsZV8pOwotCS8vIFRoZSBlZGl0b3IgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGNlbGwgYW5kIG11c3QKLQkvLyBub3QgYmUgYW55IHNtYWxsZXIgdGhhbiA1MCBwaXhlbHMuCi0JZWRpdG9yXy5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkxFRlQ7Ci0JZWRpdG9yXy5ncmFiSG9yaXpvbnRhbCA9IHRydWU7Ci0JZWRpdG9yXy5taW5pbXVtV2lkdGggPSBtYXhXaWR0aDsKLQl0YWJsZUVkaXRvckxpc3RlbmVyXyA9IG5ldyBUYWJsZUVkaXRvckxpc3RlbmVyKCk7Ci0JdGFibGVfLmFkZE1vdXNlTGlzdGVuZXIodGFibGVFZGl0b3JMaXN0ZW5lcl8pOwotCXRhYmxlVmlld2VyXyA9IG5ldyBUYWJsZVZpZXdlcih0YWJsZV8pOwotCXRhYmxlVmlld2VyXy5nZXRDb250cm9sKCkuYWRkS2V5TGlzdGVuZXIoCi0JICBuZXcgS2V5TGlzdGVuZXIoKQotCSAgewotCQlwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGUpCi0JCXsKLQkJICBpbnQgYXNjaWlEZWwgPSAoaW50KWUuY2hhcmFjdGVyOwotCQkgIC8vIERlbAotCQkgIGlmIChhc2NpaURlbCA9PSAxMjcpIAotCQkJaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpOwotICAgICAgICAgICAgICAgIC8vIEVudGVyIG9yIHNwYWNlCi0gICAgICAgICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAxMyB8fCAoKGludCllLmNoYXJhY3RlcikgPT0gMzIpCi0gICAgICAgICAgICAgICAgICB0YWJsZUVkaXRvckxpc3RlbmVyXy5lZGl0U2VsZWN0aW9uKCk7Ci0JCX0KLQkJcHVibGljIHZvaWQga2V5UmVsZWFzZWQoS2V5RXZlbnQgZSkKLQkJewotCQl9Ci0JICB9Ci0JKTsKLQl0YWJsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBMaXN0Q29udGVudFByb3ZpZGVyKCkpOwotCXRhYmxlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMaXN0TGFiZWxQcm92aWRlcigpKTsKLQl0YWJsZVZpZXdlcl8uc2V0SW5wdXQodmFsdWVzXyk7Ci0JdGFibGVWaWV3ZXJfLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLQkgIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLQkgIHsKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCXsKLQkJICBlbmFibGVSZW1vdmUodHJ1ZSk7Ci0JCX0KLQkgIH0KLQkpOwotCi0JQ29tcG9zaXRlIGJ1dHRvbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JZ2wgPSBuZXcgR3JpZExheW91dCgpOwotCWdsLm51bUNvbHVtbnMgPSAzOwotCWdsLm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7Ci0JYnV0dG9uQ29tcG9zaXRlLnNldExheW91dChnbCk7Ci0JYnV0dG9uQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0KLQlpbXBvcnRfID0gbmV3IEJ1dHRvbihidXR0b25Db21wb3NpdGUsIFNXVC5QVVNIKTsKLQlpbXBvcnRfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0lNUE9SVCk7Ci0JaW1wb3J0Xy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQlpbXBvcnRfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotCSAgbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkKLQkgIHsKLQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0JCXsKLQkJICBoYW5kbGVJbXBvcnRCdXR0b25TZWxlY3RlZChldmVudCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCQl7Ci0JCX0KLQkgIH0KLQkpOwotCQotCWFkZF8gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXBvc2l0ZSwgU1dULlBVU0gpOwotCWFkZF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQUREKTsKLQlhZGRfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotCWFkZF8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoCi0JICBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKQotCSAgewotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLQkJewotCQkgIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLQkJfQotCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0JCXsKLQkJfQotCSAgfQotCSk7Ci0KLQkKLQlyZW1vdmVfID0gbmV3IEJ1dHRvbihidXR0b25Db21wb3NpdGUsIFNXVC5QVVNIKTsKLQlyZW1vdmVfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1JFTU9WRSk7Ci0JcmVtb3ZlXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQlyZW1vdmVfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotCSAgbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkKLQkgIHsKLQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0JCXsKLQkJICBoYW5kbGVSZW1vdmVCdXR0b25TZWxlY3RlZChldmVudCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCQl7Ci0JCX0KLQkgIH0KLQkpOwotCWVuYWJsZVJlbW92ZShmYWxzZSk7Ci0JCi0JcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZW5hYmxlUmVtb3ZlKGJvb2xlYW4gZW5hYmxlZCkKLSAgewotCXJlbW92ZV8uc2V0RW5hYmxlZChlbmFibGVkICYmICF0YWJsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVJbXBvcnRCdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotCUlSZXNvdXJjZSByZXNvdXJjZSA9IERpYWxvZ1V0aWxzLmJyb3dzZVJlc291cmNlcygKLQkgIHBhcmVudF8uZ2V0U2hlbGwoKSwKLQkgIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLAotCSAgbnVsbCwKLQkgIGZpbHRlcl8KLQkpOwotCWlmIChyZXNvdXJjZSAhPSBudWxsICYmIHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUpCi0JewotCSAgdHJ5Ci0JICB7Ci0JCVByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCQlwcm9wcy5sb2FkKCgoSUZpbGUpcmVzb3VyY2UpLmdldENvbnRlbnRzKCkpOwotCQlTZXQgc2V0ID0gcHJvcHMuZW50cnlTZXQoKTsKLQkJamF2YS51dGlsLkxpc3QgbGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCUl0ZXJhdG9yIGkgPSBzZXQuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCSAgTWFwLkVudHJ5IG1lID0gKE1hcC5FbnRyeSlpLm5leHQoKTsKLQkJICBTdHJpbmcga2V5ID0gKFN0cmluZyltZS5nZXRLZXkoKTsKLQkJICBTdHJpbmcgdmFsID0gKFN0cmluZyltZS5nZXRWYWx1ZSgpOwotCQkgIGxpc3QuYWRkKG5ldyBTdHJpbmdbXSB7a2V5LHZhbH0pOwotCQl9Ci0JCXZhbHVlc18uYWRkQWxsKGxpc3QpOwotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgewotCSAgICAvLyBUT0RPIFJlcG9ydCBzb21lIGVycm9yIGhlcmUuCi0JICB9Ci0JfQotCXJlZnJlc2goKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVBZGRCdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotCXZhbHVlc18uYWRkKGRlZmF1bHRWYWx1ZV8pOwotCXJlZnJlc2goKTsKLQlzZXRTZWxlY3Rpb25Bc09iamVjdCh2YWx1ZXNfLmdldCh0YWJsZV8uZ2V0SXRlbUNvdW50KCktMSkpOwotCXRhYmxlRWRpdG9yTGlzdGVuZXJfLmVkaXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVSZW1vdmVCdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotCWhhbmRsZURlbGV0ZUtleVByZXNzZWQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVEZWxldGVLZXlQcmVzc2VkKCkKLSAgewotCWludGVybmFsRGlzcG9zZSgpOwotCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gdGFibGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpOwotCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pKQotCXsKLQkgIGludCBzZWxlY3Rpb25JbmRleCA9IHRhYmxlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotCSAgaW50IHNlbGVjdGlvbkNvdW50ID0gdGFibGVfLmdldEl0ZW1Db3VudCgpOwotCSAgdmFsdWVzXy5yZW1vdmUoc2VsZWN0aW9uSW5kZXgpOwotCSAgaWYgKHNlbGVjdGlvbkluZGV4IDwgc2VsZWN0aW9uQ291bnQtMSkKLQkJc2V0U2VsZWN0aW9uQXNPYmplY3QodmFsdWVzXy5nZXQoc2VsZWN0aW9uSW5kZXgpKTsKLQkgIGVsc2UgaWYgKHNlbGVjdGlvbkNvdW50IC0yID49IDApCi0JCXNldFNlbGVjdGlvbkFzT2JqZWN0KHZhbHVlc18uZ2V0KHNlbGVjdGlvbkNvdW50LTIpKTsKLQkgIHJlZnJlc2goKTsKLQl9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW50ZXJuYWxSZWZyZXNoKCkKLSAgewotCS8vIHN5bmNocm9uaXplIHRleHQgZmllbGQsIHByZXZpb3VzbHkgc2VsZWN0ZWQgdGFibGUgY2VsbCBhbmQgbW9kZWwgKGlucHV0T2JqZWN0KQotCWlmICh0ZXh0XyAhPSBudWxsKQotCXsKLQkgIFRhYmxlSXRlbSBvbGRUYWJsZUl0ZW0gPSBlZGl0b3JfLmdldEl0ZW0oKTsKLQkgIGludCBvbGRDb2x1bW5JbmRleCA9IGVkaXRvcl8uZ2V0Q29sdW1uKCk7Ci0JICBpZiAob2xkVGFibGVJdGVtICE9IG51bGwgJiYgb2xkQ29sdW1uSW5kZXggPj0gMCAmJiBvbGRDb2x1bW5JbmRleCA8IGNvbHVtbnNfLmxlbmd0aCkKLQkgIHsKLQkJU3RyaW5nIG9sZFRleHQgPSB0ZXh0Xy5nZXRUZXh0KCk7Ci0JCW9sZFRhYmxlSXRlbS5zZXRUZXh0KG9sZENvbHVtbkluZGV4LCBvbGRUZXh0KTsKLQkJaW50IG9sZFJvd0luZGV4ID0gdGFibGVfLmluZGV4T2Yob2xkVGFibGVJdGVtKTsKLQkJdmFsdWVzXy5zZXQob2xkUm93SW5kZXgsIG5ldyBTdHJpbmdbXSB7b2xkVGFibGVJdGVtLmdldFRleHQoMCksIG9sZFRhYmxlSXRlbS5nZXRUZXh0KDEpfSk7Ci0JICB9Ci0JfQotCWNoZWNrTWFwcGluZ0NvbnN0cmFpbnRzKCk7Ci0Jc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KCBudWxsICk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tNYXBwaW5nQ29uc3RyYWludHMoKSB7Ci0KLQlIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAKLQlmb3IoaW50IGNudD0wOyBjbnQ8dmFsdWVzXy5zaXplKCk7IGNudCsrKXsKLQkJU3RyaW5nW10gdmFsdWUgPSAoU3RyaW5nW10pdmFsdWVzXy5nZXQoY250KTsKLQkJaWYobWFwLmNvbnRhaW5zS2V5KHZhbHVlWzBdKSAmJiAoKHJlc2NyaWN0aW9uICYgMSkhPTApKXsKLQkJCW1lc3NhZ2UgPU5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTUFQUElOR19EVVBMSUNBVEVfRU5UUklFUywgbmV3IFN0cmluZ1tde2NvbHVtbnNfWzBdLGNvbHVtbnNfWzFdfSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYobWFwLmNvbnRhaW5zVmFsdWUodmFsdWVbMV0pICYmICgocmVzY3JpY3Rpb24gJiAyKSE9MCkpewotCQkJbWVzc2FnZSA9TkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19NQVBQSU5HX0RVUExJQ0FURV9FTlRSSUVTLCBuZXcgU3RyaW5nW117Y29sdW1uc19bMV0sY29sdW1uc19bMF19KTsKLQkJCXJldHVybjsKLQkJfQotCQltYXAucHV0KHZhbHVlWzBdLHZhbHVlWzFdKTsKLQotCX0KLQltZXNzYWdlID0gbnVsbDsKLQotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlID09IG51bGwgPyBTdGF0dXMuT0tfU1RBVFVTIDogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBtZXNzYWdlICk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0U2VsZWN0aW9uQXNPYmplY3QoT2JqZWN0IG9iamVjdCkKLSAgewotCXRhYmxlVmlld2VyXy5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob2JqZWN0KSwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCkKLSAgewotCWludGVybmFsUmVmcmVzaCgpOwotCXRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gIH0KLQotICBwdWJsaWMgVGFibGVJdGVtW10gZ2V0SXRlbXMoKQotICB7Ci0JLy9pbnRlcm5hbFJlZnJlc2goKTsKLQlyZXR1cm4gdGFibGVfLmdldEl0ZW1zKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkKLSAgewotCWFkZF8uc2V0RW5hYmxlZChlbmFibGVkKTsKLQllbmFibGVSZW1vdmUoZW5hYmxlZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotCWludGVybmFsRGlzcG9zZSgpOwotCWlmIChlZGl0b3JfICE9IG51bGwpCi0JICBlZGl0b3JfLmRpc3Bvc2UoKTsKLQlpZiAodGFibGVfICE9IG51bGwpCi0JICB0YWJsZV8uZGlzcG9zZSgpOwotCWlmIChhZGRfICE9IG51bGwpCi0JICBhZGRfLmRpc3Bvc2UoKTsKLQlpZiAocmVtb3ZlXyAhPSBudWxsKQotCSAgcmVtb3ZlXy5kaXNwb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW50ZXJuYWxEaXNwb3NlKCkKLSAgewotCWlmICh0ZXh0XyAhPSBudWxsKQotCSAgdGV4dF8uZGlzcG9zZSgpOwotCXRleHRfID0gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBUYWJsZUVkaXRvckxpc3RlbmVyIGltcGxlbWVudHMgTW91c2VMaXN0ZW5lcgotICB7Ci0JcHJpdmF0ZSBpbnQgY3VyclNlbGVjdGlvbkluZGV4XzsKLSAgICBwcml2YXRlIGludCBlZGl0Um93XzsKLSAgICBwcml2YXRlIGludCBlZGl0Q29sdW1uXzsKLQotCXB1YmxpYyBUYWJsZUVkaXRvckxpc3RlbmVyKCkKLQl7Ci0JICBzdXBlcigpOwotCSAgY3VyclNlbGVjdGlvbkluZGV4XyA9IC0xOwotICAgICAgICAgZWRpdFJvd18gPSAtMTsKLSAgICAgICAgIGVkaXRDb2x1bW5fID0gLTE7Ci0JfQotCi0JcHVibGljIHZvaWQgbW91c2VEb3VibGVDbGljayhNb3VzZUV2ZW50IGUpCi0JewotCSAgbW91c2VEb3duKGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIG1vdXNlRG93bihNb3VzZUV2ZW50IGUpCi0JewotCSAgLy8gcmVmcmVzaCB0YWJsZQotCSAgaW50ZXJuYWxSZWZyZXNoKCk7Ci0JICAvLyBDbGVhbiB1cCBwcmV2aW91cyB0ZXh0IGVkaXRvciBjb250cm9sCi0JICBpbnRlcm5hbERpc3Bvc2UoKTsKLQkgIC8vIHVwZGF0ZSB0YWJsZQotCSAgaWYgKHRhYmxlXy5pc0ZvY3VzQ29udHJvbCgpKQotCSAgewotCQlpbnQgc2VsZWN0ZWRSb3dJbmRleCA9IGdldFNlbGVjdGVkUm93KHRhYmxlXywgZS55KTsKLQkJaWYgKGN1cnJTZWxlY3Rpb25JbmRleF8gIT0gLTEgJiYgc2VsZWN0ZWRSb3dJbmRleCAhPSAtMSAmJiBjdXJyU2VsZWN0aW9uSW5kZXhfID09IHNlbGVjdGVkUm93SW5kZXgpCi0JCXsKLQkJICBUYWJsZUl0ZW0gdGFibGVJdGVtID0gdGFibGVfLmdldEl0ZW0oc2VsZWN0ZWRSb3dJbmRleCk7Ci0JCSAgaW50IHNlbGVjdGVkQ29sdW1uSW5kZXggPSBnZXRTZWxlY3RlZENvbHVtbih0YWJsZUl0ZW0sIGUueCwgZS55KTsKLQkJICBpZiAoc2VsZWN0ZWRDb2x1bW5JbmRleCAhPSAtMSAmJiAodGV4dF8gPT0gbnVsbCB8fCB0ZXh0Xy5pc0Rpc3Bvc2VkKCkgfHwgc2VsZWN0ZWRDb2x1bW5JbmRleCAhPSBlZGl0b3JfLmdldENvbHVtbigpKSkKLQkJCWVkaXRTZWxlY3Rpb24oc2VsZWN0ZWRSb3dJbmRleCwgc2VsZWN0ZWRDb2x1bW5JbmRleCk7Ci0JCX0KLQkJY3VyclNlbGVjdGlvbkluZGV4XyA9IHNlbGVjdGVkUm93SW5kZXg7Ci0JICB9Ci0JfQotCi0JcHVibGljIHZvaWQgbW91c2VVcChNb3VzZUV2ZW50IGUpCi0JewotCX0KLQotCXByaXZhdGUgaW50IGdldFNlbGVjdGVkUm93KFRhYmxlIHRhYmxlLCBpbnQgeSkKLQl7Ci0JICBUYWJsZUl0ZW1bXSB0YWJsZUl0ZW1zID0gdGFibGUuZ2V0SXRlbXMoKTsKLQkgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFibGVJdGVtcy5sZW5ndGg7IGkrKykKLQkgIHsKLQkJUmVjdGFuZ2xlIHJlY3RhbmdsZSA9IHRhYmxlSXRlbXNbaV0uZ2V0Qm91bmRzKDApOwotCQlpZiAocmVjdGFuZ2xlICE9IG51bGwgJiYgeSA+PSByZWN0YW5nbGUueSAmJiB5IDwgKHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCkpCi0JCSAgcmV0dXJuIGk7Ci0JICB9Ci0JICByZXR1cm4gLTE7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgZ2V0U2VsZWN0ZWRDb2x1bW4oVGFibGVJdGVtIHRhYmxlSXRlbSwgaW50IHgsIGludCB5KQotCXsKLQkgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uc18ubGVuZ3RoOyBpKyspCi0JICB7Ci0JCWlmICh0YWJsZUl0ZW0uZ2V0Qm91bmRzKGkpLmNvbnRhaW5zKHgsIHkpKQotCQkgIHJldHVybiBpOwotCSAgfQotCSAgcmV0dXJuIC0xOwotCX0KLQotCXByaXZhdGUgdm9pZCBlZGl0U2VsZWN0aW9uKGludCByb3csIGludCBjb2x1bW4pCi0JewotICAgICAgICAgZWRpdFJvd18gPSByb3c7Ci0gICAgICAgICBlZGl0Q29sdW1uXyA9IGNvbHVtbjsKLQkgIFRhYmxlSXRlbSB0YWJsZUl0ZW0gPSB0YWJsZV8uZ2V0SXRlbShyb3cpOwotCSAgLy8gU2V0dXAgYWRhcHRlciBmb3IgdGhlIG5ldyBzZWxlY3Rpb24KLQkgIHRleHRfID0gbmV3IFRleHQodGFibGVfLCBTV1QuTk9ORSk7Ci0JICBTdHJpbmcgdGV4dCA9IHRhYmxlSXRlbS5nZXRUZXh0KGNvbHVtbik7Ci0JICB0ZXh0Xy5zZXRUZXh0KCh0ZXh0ICE9IG51bGwpID8gdGV4dCA6ICIiKTsKLSAgICAgICAgIHRleHRfLmFkZEtleUxpc3RlbmVyKG5ldyBLZXlMaXN0ZW5lcigpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGUpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgLy8gRXNjCi0gICAgICAgICAgICAgICBpZiAoKChpbnQpZS5jaGFyYWN0ZXIpID09IDI3KQotICAgICAgICAgICAgICAgICBjYW5jZWxTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgcHVibGljIHZvaWQga2V5UmVsZWFzZWQoS2V5RXZlbnQgZSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICB9Ci0gICAgICAgICApOwotICAgICAgICAgdGV4dF8uYWRkVHJhdmVyc2VMaXN0ZW5lcihuZXcgVHJhdmVyc2VMaXN0ZW5lcigpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgdm9pZCBrZXlUcmF2ZXJzZWQoVHJhdmVyc2VFdmVudCBlKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChlLmRldGFpbCA9PSBTV1QuVFJBVkVSU0VfVEFCX05FWFQpCi0gICAgICAgICAgICAgICAgIHRyYXZlcnNlVGFiTmV4dCgpOwotICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1RBQl9QUkVWSU9VUykKLSAgICAgICAgICAgICAgICAgdHJhdmVyc2VUYWJQcmV2aW91cygpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfQotICAgICAgICAgKTsKLSAgICAgICAgIAotICAgIHRleHRfLmFkZEZvY3VzTGlzdGVuZXIoIG5ldyBGb2N1c0FkYXB0ZXIoKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBmb2N1c0xvc3QoRm9jdXNFdmVudCBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgCi0JICBlZGl0b3JfLnNldEVkaXRvcih0ZXh0XywgdGFibGVJdGVtLCBjb2x1bW4pOwotCSAgdGV4dF8uc2V0Rm9jdXMoKTsKLQkgIHRleHRfLnNlbGVjdEFsbCgpOwotCX0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRyYXZlcnNlVGFiTmV4dCgpCi0gICAgewotICAgICAgaW50ZXJuYWxSZWZyZXNoKCk7Ci0gICAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICAgIGlmICghKGVkaXRSb3dfID09IHRhYmxlXy5nZXRJdGVtcygpLmxlbmd0aC0xICYmIGVkaXRDb2x1bW5fID09IGNvbHVtbnNfLmxlbmd0aC0xKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVkaXRDb2x1bW5fIDwgY29sdW1uc18ubGVuZ3RoLTEpCi0gICAgICAgICAgZWRpdENvbHVtbl8rKzsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZWRpdENvbHVtbl8gPSAwOwotICAgICAgICAgIGVkaXRSb3dfKys7Ci0gICAgICAgICAgdGFibGVfLnNlbGVjdChlZGl0Um93Xyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWRpdFNlbGVjdGlvbihlZGl0Um93XywgZWRpdENvbHVtbl8pOwotICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRyYXZlcnNlVGFiUHJldmlvdXMoKQotICAgIHsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpZiAoIShlZGl0Um93XyA9PSAwICYmIGVkaXRDb2x1bW5fID09IDApKQotICAgICAgewotICAgICAgICBpZiAoZWRpdENvbHVtbl8gPiAwKQotICAgICAgICAgIGVkaXRDb2x1bW5fLS07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGVkaXRDb2x1bW5fID0gY29sdW1uc18ubGVuZ3RoLTE7Ci0gICAgICAgICAgZWRpdFJvd18tLTsKLSAgICAgICAgICB0YWJsZV8uc2VsZWN0KGVkaXRSb3dfKTsKLSAgICAgICAgfQotICAgICAgICBlZGl0U2VsZWN0aW9uKGVkaXRSb3dfLCBlZGl0Q29sdW1uXyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2FuY2VsU2VsZWN0aW9uKCkKLSAgICB7Ci0gICAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgIH0KLQotCXB1YmxpYyB2b2lkIGVkaXRTZWxlY3Rpb24oKQotCXsKLQkgIGludCBzZWxlY3RlZFJvd0luZGV4ID0gdGFibGVfLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JICBpZiAoc2VsZWN0ZWRSb3dJbmRleCAhPSAtMSAmJiBjb2x1bW5zXy5sZW5ndGggPiAwKQotCSAgewotCQkvLyByZWZyZXNoIHRhYmxlCi0JCWludGVybmFsUmVmcmVzaCgpOwotCQkvLyBDbGVhbiB1cCBhbnkgcHJldmlvdXMgZWRpdG9yIGNvbnRyb2wKLQkJaW50ZXJuYWxEaXNwb3NlKCk7Ci0JCWVkaXRTZWxlY3Rpb24oc2VsZWN0ZWRSb3dJbmRleCwgMCk7Ci0JICB9Ci0JICBjdXJyU2VsZWN0aW9uSW5kZXhfID0gc2VsZWN0ZWRSb3dJbmRleDsKLQl9Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdENvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0gIHsKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCXsKLQkgIHRhYmxlVmlld2VyXy5hZGQoZ2V0RWxlbWVudHMobmV3SW5wdXQpKTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLQl7Ci0JICBpZiAoaW5wdXRFbGVtZW50IGluc3RhbmNlb2YgTGlzdCkKLQkgIHsKLQkJTGlzdCBsaXN0ID0gKExpc3QpaW5wdXRFbGVtZW50OwotCQlPYmplY3RbXSBvYmplY3RzID0gbmV3IE9iamVjdFtsaXN0LnNpemUoKV07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykKLQkJICBvYmplY3RzW2ldID0gbGlzdC5nZXQoaSk7Ci0JCXJldHVybiBvYmplY3RzOwotCSAgfQotCSAgZWxzZQotCQlyZXR1cm4gbmV3IE9iamVjdFswXTsKLQl9Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyCi0gIHsKLQlwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLQl7Ci0JICByZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLQl7Ci0JCXJldHVybiAoKFN0cmluZ1tdKWVsZW1lbnQpW2NvbHVtbkluZGV4XTsJICAJCi0JfQotCi0JcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikKLQl7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0JewotCSAgcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLSAgfQotIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9UaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTZiNmUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9UaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDQgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb24uVGltZWRPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotcHVibGljIGNsYXNzIFRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBpbXBsZW1lbnRzIENvbmRpdGlvbgotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyAgICAgICAgICAgICAgICAgIFRJTUVPVVRfUFJFRkVSRU5DRSA9ICJ3c2RsVGltZU91dCI7Ci0gIHByaXZhdGUgV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQgc2VsZWN0aW9uQ29tbWFuZDsKLSAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lT3V0VmFsdWU7Ci0gIAotICBwdWJsaWMgVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCgpCi0gIHsKLSAgICBzZWxlY3Rpb25Db21tYW5kID0gbmV3IFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kKCk7Ci0gICAgCi0gICAgSVByZWZlcmVuY2VTdG9yZSBwcmVmU3RvcmUgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotICAgIAotICAgIHRpbWVPdXRWYWx1ZSA9IHByZWZTdG9yZS5nZXREZWZhdWx0U3RyaW5nKFRJTUVPVVRfUFJFRkVSRU5DRSkuZXF1YWxzKCIiKSA/IDEwMDAwIDogcHJlZlN0b3JlLmdldEludCggVElNRU9VVF9QUkVGRVJFTkNFICk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAgIHNlbGVjdGlvbkNvbW1hbmQuc2V0V2ViU2VydmljZXNQYXJzZXIoIHdlYlNlcnZpY2VzUGFyc2VyICk7Ci0gIH0KLQotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbkNvbW1hbmQuZ2V0V2ViU2VydmljZXNQYXJzZXIoKTsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBTdHJpbmcgICAgICAgICB0aW1lT3V0TWVzc2FnZSA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5iaW5kKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lORk9fV1NETF9PUEVSQVRJT05fVElNRURfT1VULCBnZXRXZWJTZXJ2aWNlVVJJKCkgKTsKLSAgICAKLSAgICBUaW1lZE9wZXJhdGlvbiB0aW1lZE9wZXJhdGlvbiA9IG5ldyBUaW1lZE9wZXJhdGlvbiggc2VsZWN0aW9uQ29tbWFuZCwgdGltZU91dFZhbHVlLCB0aW1lT3V0TWVzc2FnZSApOwotICAgIAotICAgIHJldHVybiB0aW1lZE9wZXJhdGlvbi5leGVjdXRlKG1vbml0b3IsIGFkYXB0YWJsZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25Db21tYW5kLmV2YWx1YXRlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VVUkkoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbkNvbW1hbmQuZ2V0V2ViU2VydmljZVVSSSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgd2ViU2VydmljZVVSSSkKLSAgewotICAgIHNlbGVjdGlvbkNvbW1hbmQuc2V0V2ViU2VydmljZVVSSSh3ZWJTZXJ2aWNlVVJJKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotICAgIHJldHVybiBnZXRXZWJTZXJ2aWNlVVJJKCk7Ci0gIH0KLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBodHRwQmFzaWNBdXRoUGFzc3dvcmQuCi0gKi8KLXB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKCkgewotCXJldHVybiBzZWxlY3Rpb25Db21tYW5kLmdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpOwotfQotLyoqCi0gKiBAcmV0dXJuIFJldHVybnMgdGhlIGh0dHBCYXNpY0F1dGhVc2VybmFtZS4KLSAqLwotcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKSB7Ci0JcmV0dXJuIHNlbGVjdGlvbkNvbW1hbmQuZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCk7Ci19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjYwNDlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbC5EaWFsb2dXV1dBdXRoZW50aWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VFbnRpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGltcGxlbWVudHMgQ29uZGl0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdlYlNlcnZpY2VVUkk7Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkOwotICBwcml2YXRlIGJvb2xlYW4gbmVlZFdTRExTZWxlY3Rpb25UcmVlV2lkZ2V0OwotICAKLSAgcHVibGljIFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kKCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gIAlpZiAod2ViU2VydmljZXNQYXJzZXIgPT0gbnVsbCkKLSAgCSAgd2ViU2VydmljZXNQYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLSAgCXJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgCW5lZWRXU0RMU2VsZWN0aW9uVHJlZVdpZGdldCA9IGZhbHNlOwotICAJV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyID0gZ2V0V2ViU2VydmljZXNQYXJzZXIoKTsKLSAgCXBhcnNlci5zZXRVUkkod2ViU2VydmljZVVSSSk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcGFyc2VyLnBhcnNlKFdlYlNlcnZpY2VzUGFyc2VyLlBBUlNFX1dTSUwgfCBXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9ESVNDTyB8IFdlYlNlcnZpY2VzUGFyc2VyLlBBUlNFX0xJTktTKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHd3d2FlKQotICAgIHsKLSAgICAgIERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uIGRpYWxvZyA9IG5ldyBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotICAgICAgZGlhbG9nLmhhbmRsZVdXV0F1dGhlbnRpY2F0aW9uKHd3d2FlKTsKLSAgICAgIFN0cmluZyB1c2VybmFtZSA9IGRpYWxvZy5nZXRVc2VybmFtZSgpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gZGlhbG9nLmdldFBhc3N3b3JkKCk7Ci0gICAgICBodHRwQmFzaWNBdXRoVXNlcm5hbWUgPSB1c2VybmFtZTsKLSAgICAgIGh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IHBhc3N3b3JkOwotICAgICAgaWYgKHVzZXJuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VyLnNldEhUVFBCYXNpY0F1dGhVc2VybmFtZSh1c2VybmFtZSk7Ci0gICAgICAgIHBhcnNlci5zZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQocGFzc3dvcmQpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHBhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9XU0lMIHwgV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfRElTQ08gfCBXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9MSU5LUyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1VSSV9OT1RfUkVTT0xWQUJMRSwgbmV3IE9iamVjdFtdIHt3ZWJTZXJ2aWNlVVJJfSksIHQpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgIHBhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUobnVsbCk7Ci0gICAgICAgICAgcGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChudWxsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1VSSV9OT1RfUkVTT0xWQUJMRSwgbmV3IE9iamVjdFtdIHt3ZWJTZXJ2aWNlVVJJfSksIHQpOwotICAgIH0KLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzRW50aXR5ID0gcGFyc2VyLmdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3ZWJTZXJ2aWNlVVJJKTsKLSAgICBpZiAod3NFbnRpdHkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgdHlwZSA9IHdzRW50aXR5LmdldFR5cGUoKTsKLSAgICAgIGlmICh0eXBlICE9IFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKQotICAgICAgCW5lZWRXU0RMU2VsZWN0aW9uVHJlZVdpZGdldCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmVlZFdTRExTZWxlY3Rpb25UcmVlV2lkZ2V0OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVVJJKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgd2ViU2VydmljZVVSSSkKLSAgewotICAgIHRoaXMud2ViU2VydmljZVVSSSA9IHdlYlNlcnZpY2VVUkk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V2ViU2VydmljZVVSSSgpOwotICB9Ci0vKioKLSAqIEByZXR1cm4gUmV0dXJucyB0aGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkLgotICovCi1wdWJsaWMgU3RyaW5nIGdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpIHsKLQlyZXR1cm4gaHR0cEJhc2ljQXV0aFBhc3N3b3JkOwotfQotLyoqCi0gKiBAcmV0dXJuIFJldHVybnMgdGhlIGh0dHBCYXNpY0F1dGhVc2VybmFtZS4KLSAqLwotcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKSB7Ci0JcmV0dXJuIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjQyNzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjUgICAxNDIyODEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkFic3RyYWN0U2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlBhZ2VJbmZvOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uRGlhbG9nIHsKLQkKLQlwcml2YXRlIFN0cmluZyB0aXRsZVRleHRfOwotCXByaXZhdGUgU3RyaW5nIHdzVXJpXzsKLQlwcml2YXRlIFN0cmluZyBjb21wb25lbnROYW1lXzsKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3RfOwotCQotCXB1YmxpYyBXU0RMU2VsZWN0aW9uRGlhbG9nKFNoZWxsIHBhcmVudCwgUGFnZUluZm8gcGFnZUluZm8pIHsKLQkJc3VwZXIocGFyZW50LCBwYWdlSW5mbyk7Ci0JCXRpdGxlVGV4dF8gPSBwYWdlSW5mby5nZXRQYWdlTmFtZSgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNhbGxTZXR0ZXJzKCkKLQl7CQkKLQkJKChXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcilnZXRXaWRnZXQoKSkuc2V0Q29tcG9uZW50TmFtZShjb21wb25lbnROYW1lXyk7Ci0JCSgoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIpZ2V0V2lkZ2V0KCkpLnNldFByb2plY3QocHJvamVjdF8pOwotCQkoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5zZXRXZWJTZXJ2aWNlVVJJKHdzVXJpXyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0JewotICAgICAgICAgY29tcG9uZW50TmFtZV8gPSBjb21wb25lbnROYW1lOyAgICAgIAkgICAKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLQl7Ci0gICAgICAgICByZXR1cm4gY29tcG9uZW50TmFtZV8gOyAgICAgIAkgICAKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KQotCXsKLQkJcHJvamVjdF8gPSBwcm9qZWN0OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVVJJKFN0cmluZyB3c1VyaSkKLQl7Ci0JCXdzVXJpXyA9IHdzVXJpOwotCX0JCi0JIAotCSAgcHJvdGVjdGVkIHZvaWQgc2V0U2hlbGxTdHlsZShpbnQgbmV3U2hlbGxTdHlsZSkKLQkgIHsKLQkgICAgc3VwZXIuc2V0U2hlbGxTdHlsZSggbmV3U2hlbGxTdHlsZSB8IFNXVC5SRVNJWkUgKTsgIAotCSAgfQotCi0JICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTaGVsbChTaGVsbCBuZXdTaGVsbCkKLQkgIHsKLQkgICAgbmV3U2hlbGwuc2V0VGV4dCh0aXRsZVRleHRfKTsgICAKLQkgICAgc3VwZXIuY29uZmlndXJlU2hlbGwobmV3U2hlbGwpOwotCSAgfQotCi0JICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlhYmxlU2VsZWN0aW9uU3RyaW5nKCkgewotCQkgIAotCQkgcmV0dXJuICgoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIpZ2V0V2lkZ2V0KCkpLmdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCk7Ci0JfQotCSAgCi0JICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkgewotCQkgIHJldHVybiAoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLQl9Ci0JIAotCSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVVJJKCkKLQkgIHsKLQkJICByZXR1cm4gd3NVcmlfOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpewotCQkgIHJldHVybiBwcm9qZWN0XzsKLQkgIH0KLQotICAgICAgcHVibGljIGJvb2xlYW4gY2xvc2UoKSB7Ci0gICAgICAgIHNldENvbXBvbmVudE5hbWUoKChXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcilnZXRXaWRnZXQoKSkuZ2V0Q29tcG9uZW50TmFtZSgpKTsKLSAgICAgICAgc2V0UHJvamVjdCgoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5nZXRQcm9qZWN0KCkpOwotICAgICAgICBzZXRXZWJTZXJ2aWNlVVJJKCgoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIpZ2V0V2lkZ2V0KCkpLmdldFdlYlNlcnZpY2VVUkkoKSk7Ci0gICAgCXJldHVybiBzdXBlci5jbG9zZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MTMxMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBjb21wb25lbnROYW1lOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RTZXJ2aWNlOwotICAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RTZXJ2aWNlKCkgewotICAgIHJldHVybiB0ZXN0U2VydmljZTsKLSAgfQotCi0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShib29sZWFuIHRlc3RTZXJ2aWNlKSB7Ci0gICAgdGhpcy50ZXN0U2VydmljZSA9IHRlc3RTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJvamVjdC4KLSAgICovCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBwcm9qZWN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqICAgICAgICAgIFRoZSBwcm9qZWN0IHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIAotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIHJldHVybiBjb21wb25lbnROYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50TmFtZShTdHJpbmcgY29tcG9uZW50TmFtZSkKLSAgewotICAgIHRoaXMuY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxVUkk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlc1BhcnNlciAhPSBudWxsKQotICAgICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgICAgIAotICAgIGlmICh3c2RsVVJJICE9IG51bGwgJiYgZ2V0V2ViU2VydmljZXNQYXJzZXIoKS5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKSAhPSBudWxsKSB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7ICAgICAKLSAgICAgIE1hcCBzZXJ2aWNlcyA9IGdldFdlYlNlcnZpY2VzUGFyc2VyKCkuZ2V0V1NETERlZmluaXRpb24od3NkbFVSSSkuZ2V0U2VydmljZXMoKTsKLSAgICAgIGlmIChzZXJ2aWNlcy5pc0VtcHR5KCkpewotICAgICAgICBpZiAodGVzdFNlcnZpY2U9PXRydWUpewotICAgICAgICAgICAgdGVzdFNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTklOR19OT19TRVJWSUNFX0VMRU1FTlQgKTsKLSAgICAgICAgICAgIHRyeXsKLSAgICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzKTsKLSAgICAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7Ci0gICAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5JTkdfTk9fU0VSVklDRV9FTEVNRU5UICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfU0VMRUNUSU9OX01VU1RfQkVfV1NETCApOwotICAgICAgaWYgKGVudiAhPSBudWxsKQotICAgICAgewotICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25UcmVlV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvblRyZWVXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhjYzE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvblRyZWVXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTggICAxMzY3MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNzAxMzEgICAxNjg3ODYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdzZGwgdXJsIG9uIHdlYiBzZXJ2aWNlIHdpemFyZCBwYWdlIDEgaXMgbm90IHJlZmxlY3RlZCBpbiBicm93c2UgZGlhbG9nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VFbnRpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLS8qKgotKiBUaGlzIHdpemFyZCBwYWdlIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgdGhlIFdTREwgVVJJIGZvciBjb25zdW1wdGlvbgotKi8KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uVHJlZVdpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQotICAvKkNPTlRFWFRfSUQgUFdXUzAwMDEgZm9yIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QV1dTX1BBR0UgPSAiLlBXV1MwMDAxIjsKLQotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3ZWJTZXJ2aWNlVVJJOwotICAKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBUcmVlVmlld2VyIHRyZWVWaWV3ZXJfOwotICBwcml2YXRlIFRyZWVDb250ZW50UHJvdmlkZXIgdHJlZUNvbnRlbnRQcm92aWRlcjsKLSAgcHJpdmF0ZSBUcmVlIHRyZWVfOwotICBwcml2YXRlIGludCBwYWdlV2lkdGhfOwotICBwcml2YXRlIFdlYlNlcnZpY2VFbnRpdHkgZW50aXR5XzsKLQotICAvKioKLSAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAqLwotICBwdWJsaWMgV1NETFNlbGVjdGlvblRyZWVXaWRnZXQoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0gIAl0aGlzLnN0YXR1c0xpc3RlbmVyID0gc3RhdHVzTGlzdGVuZXI7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXV1NfUEFHRSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsIHBsdWdpbklkXyArIElORk9QT1BfUFdXU19QQUdFKTsKLQotICAgIExhYmVsIHdzZGxMYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5XUkFQKTsKLSAgICB3c2RsTGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VMRUNUX1dTREwpOwotICAgIHdzZGxMYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQotICAgIHRyZWVfID0gbmV3IFRyZWUocGFyZW50LCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLSAgICBnZC5oZWlnaHRIaW50ID0gMjAwOwotICAgIHRyZWVfLnNldExheW91dERhdGEoZ2QpOwotICAgIHBhZ2VXaWR0aF8gPSB0cmVlXy5nZXRTaGVsbCgpLmdldFNpemUoKS54OwotICAgIHRyZWVWaWV3ZXJfID0gbmV3IFRyZWVWaWV3ZXIodHJlZV8pOwotICAgIHRyZWVDb250ZW50UHJvdmlkZXIgPSBuZXcgVHJlZUNvbnRlbnRQcm92aWRlcigpOwotICAgIHRyZWVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcih0cmVlQ29udGVudFByb3ZpZGVyKTsKLSAgICB0cmVlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBUcmVlTGFiZWxQcm92aWRlcigpKTsKLSAgICB0cmVlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCi0gICAgICBuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgIAloYW5kbGVUcmVlU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KGV2ZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVUcmVlU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLSAgewotICAJc3RhdHVzTGlzdGVuZXIuaGFuZGxlRXZlbnQobmV3IEV2ZW50KCkpOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3ZWJTZXJ2aWNlc1BhcnNlci4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgCXJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICAJdHJlZVZpZXdlcl8uc2V0SW5wdXQodGhpcy53ZWJTZXJ2aWNlc1BhcnNlcik7Ci0gIAlyZWZyZXNoVHJlZVZpZXdlcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgd3NVUkkpCi0gIHsKLSAgCXdlYlNlcnZpY2VVUkkgPSB3c1VSSTsKLSAgCWlmICghdHJlZV8uaXNEaXNwb3NlZCgpKSB7Ci0gIAkJdHJlZUNvbnRlbnRQcm92aWRlci5zZXRXZWJTZXJ2aWNlVVJJKHdlYlNlcnZpY2VVUkkpOwotICAJCXJlZnJlc2hUcmVlVmlld2VyKCk7Ci0gIAl9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoVHJlZVZpZXdlcigpCi0gIHsKLSAgCWlmICh3ZWJTZXJ2aWNlc1BhcnNlciAhPSBudWxsICYmIHdlYlNlcnZpY2VVUkkgIT0gbnVsbCkKLSAgCXsKLSAgCSAgdHJlZVZpZXdlcl8ucmVmcmVzaCgpOwotICAJICBDb250cm9sIHNoZWxsID0gdHJlZV8uZ2V0U2hlbGwoKTsKLSAgCSAgaWYgKHRyZWVfLmdldFNpemUoKS54ID4gcGFnZVdpZHRoXyB8fCBzaGVsbC5nZXRTaXplKCkueCA+IHBhZ2VXaWR0aF8pCi0gIAkgIHsKLSAgCSAgICB0cmVlXy5zZXRTaXplKHBhZ2VXaWR0aF8sIHRyZWVfLmdldFNpemUoKS55KTsKLSAgCSAgICBzaGVsbC5zZXRTaXplKHBhZ2VXaWR0aF8sIHNoZWxsLmdldFNpemUoKS55KTsKLSAgCSAgICBzaGVsbC5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAJICAgIHNoZWxsLnJlZHJhdygpOwotICAJICB9Ci0gIAl9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKQotICB7Ci0gICAgdHJlZV8uc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkKLSAgewotICAgIHJldHVybiB0cmVlXy5pc0VuYWJsZWQoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewkgIAotCSAgCWlmIChlbnRpdHlfICE9IG51bGwpCi0JICAJICByZXR1cm4gZW50aXR5Xy5nZXRVUkkoKTsKLQkgIAllbHNlCi0JICAJICByZXR1cm4gd2ViU2VydmljZVVSSTsKLSAgfQotICAKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlRW50aXR5IGdldFNlbGVjdGlvbkFzV2ViU2VydmljZUVudGl0eSgpCi0gIHsKLSAgCWlmICh0cmVlVmlld2VyXyAhPSBudWxsKQotICAJewotICAgICAgSVNlbGVjdGlvbiBzZWwgPSB0cmVlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgIGlmICghc2VsLmlzRW1wdHkoKSAmJiAoc2VsIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pKQotICAgICAgewotICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbDsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IHNzZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlRW50aXR5KQotICAgICAgICAgIHJldHVybiAoV2ViU2VydmljZUVudGl0eSlvYmplY3Q7Ci0gICAgICB9Ci0gIAl9Ci0gICAgcmV0dXJuIG51bGw7ICAJCi0gIH0KLSAgICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgeyAgICAKLQllbnRpdHlfID0gZ2V0U2VsZWN0aW9uQXNXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgaWYgKGVudGl0eV8gPT0gbnVsbCB8fCBlbnRpdHlfLmdldFR5cGUoKSAhPSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1NFTEVDVElPTl9NVVNUX0JFX1dTREwgKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgVHJlZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElUcmVlQ29udGVudFByb3ZpZGVyCi0gIHsKLSAgCXByaXZhdGUgU3RyaW5nIHdlYlNlcnZpY2VVUkk7Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoaW5wdXRFbGVtZW50IGluc3RhbmNlb2YgV2ViU2VydmljZXNQYXJzZXIpCi0gICAgICB7Ci0gICAgICAJV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyID0gKFdlYlNlcnZpY2VzUGFyc2VyKWlucHV0RWxlbWVudDsKLSAgICAgICAgT2JqZWN0IHdzRW50aXR5ID0gcGFyc2VyLmdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3ZWJTZXJ2aWNlVVJJKTsKLSAgICAgICAgaWYgKHdzRW50aXR5ICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXSB7d3NFbnRpdHl9OwotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBwYXJlbnRFbGVtZW50KQotICAgIHsKLSAgICAgIGlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgV2ViU2VydmljZUVudGl0eSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gKChXZWJTZXJ2aWNlRW50aXR5KXBhcmVudEVsZW1lbnQpLmdldENoaWxkcmVuKCk7Ci0gICAgICAgIE9iamVjdFtdIG9iamVjdHMgPSBuZXcgT2JqZWN0W2xpc3Quc2l6ZSgpXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIG9iamVjdHNbaV0gPSBsaXN0LmdldChpKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdHM7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3IE9iamVjdFswXTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFdlYlNlcnZpY2VFbnRpdHkpCi0gICAgICAgIHJldHVybiAoKFdlYlNlcnZpY2VFbnRpdHkpZWxlbWVudCkuZ2V0UGFyZW50KCk7Ci0gICAgICByZXR1cm4gbmV3IE9iamVjdFswXTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gKGdldENoaWxkcmVuKGVsZW1lbnQpLmxlbmd0aCA+IDApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVVJJKFN0cmluZyB3c1VSSSkKLSAgICB7Ci0gICAgICB3ZWJTZXJ2aWNlVVJJID0gd3NVUkk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBUcmVlTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgc3dpdGNoICgoKFdlYlNlcnZpY2VFbnRpdHkpZWxlbWVudCkuZ2V0VHlwZSgpKQotICAgICAgewotICAgICAgICBjYXNlIFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9IVE1MOgotICAgICAgICAgIHJldHVybiBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3dzaWwvaHRtbC5naWYiKS5jcmVhdGVJbWFnZSgpOwotICAgICAgICBjYXNlIFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0lMOgotICAgICAgICAgIHJldHVybiBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3dzaWwvd3NpbC5naWYiKS5jcmVhdGVJbWFnZSgpOwotICAgICAgICBjYXNlIFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMOgotICAgICAgICAgIHJldHVybiBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3dzaWwvd3NkbC5naWYiKS5jcmVhdGVJbWFnZSgpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gKChXZWJTZXJ2aWNlRW50aXR5KWVsZW1lbnQpLmdldFVSSSgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YzZTAwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTE2ICAgMTU5NjE4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQcm9qZWN0IGFuZCBFQVIgbm90IGRlZmF1bHRlZCBwcm9wZXJseSB3aGVuIHdpemFyZCBsYXVuY2hlZCBmcm9tIEpTUi0xMDkgV2ViIHNlcnZpY2VzIGJyYW5jaCBpbiBKMkVFIFByb2plY3QgRXhwbG9yZXIKLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDEyNSAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKiAyMDA3MDQxMCAgIDE4MTgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAyMjAgICAyMTk1MzcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gIHByaXZhdGUgU3RyaW5nIHVyaV87Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VVUkkoKQotICB7Ci0JaWYgKHVyaV8gIT0gbnVsbCkKLQkJcmV0dXJuIHVyaV87Ci0JICAKLSAgICB1cmlfID0gIiI7Ci0gICAgCi0gIAlpZiAoc2VsZWN0aW9uXyAhPSBudWxsICYmICFzZWxlY3Rpb25fLmlzRW1wdHkoKSkKLSAgCXsKLSAgCSAgT2JqZWN0IGZpcnN0U2VsID0gc2VsZWN0aW9uXy5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgCSAgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgSUZpbGUpCi0gIAkgIHsKLSAgCSAgICBJRmlsZSBpZmlsZSA9IChJRmlsZSlmaXJzdFNlbDsKLSAgCSAgICBTdHJpbmcgZXh0ID0gaWZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpOwotICAJICAgIGlmIChleHQgIT0gbnVsbCAmJiAoZXh0LmVxdWFscygid3NkbCIpIHx8IGV4dC5lcXVhbHMoIndzaWwiKSB8fCBleHQuZXF1YWxzKCJodG1sIikpKQotICAJICAgIHsKLSAgCSAgICAgIHVyaV8gPSBpZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gIAkgICAgfQotICAJICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsID0gKFNlcnZpY2VJbXBsKWZpcnN0U2VsOwotICAgICAgICB1cmlfID0gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoc2VydmljZUltcGwpOwotICAgICAgfSBlbHNlIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpCi0gICAgICB7Ci0gIAkgICAgU2VydmljZVJlZiBzZXJ2aWNlUmVmID0gKFNlcnZpY2VSZWYpZmlyc3RTZWw7Ci0gICAgICAgIHVyaV8gPSBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSShzZXJ2aWNlUmVmKTsKLSAgICAgIH0gZWxzZSBpZiAoZmlyc3RTZWwgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKQotICAJICB7Ci0gIAkgICAgV1NETFJlc291cmNlSW1wbCB3c2RsUkkgPSAoV1NETFJlc291cmNlSW1wbClmaXJzdFNlbDsKLSAgCSAgICB1cmlfID0gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkod3NkbFJJKTsKLSAgCSAgfSBlbHNlIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIFN0cmluZykKLSAgCSAgewotICAJICAgIHVyaV8gPSAoU3RyaW5nKWZpcnN0U2VsOwotICAJICB9IGVsc2UgewotICAJCVN0cmluZyBhZGFwdGVkVXJpID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRXU0RMKGZpcnN0U2VsKTsKLSAgCQlpZiAoYWRhcHRlZFVyaSAhPSBudWxsKSB7Ci0gIAkJCXVyaV8gPSBhZGFwdGVkVXJpOwotICAJCX0KLSAgCSAgfQotICAJICAKLSAgCSAgdXJpXyA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b1BhdGgodXJpXyk7Ci0gIAl9Ci0gICAgcmV0dXJuIHVyaV87Ci0gIH0KLSAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbiggSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotICAgIHNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAgCi0gICAgdXJpXyA9IG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbldTSUwoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVUkkoKQotICB7Ci0gIAlTdHJpbmcgd3NVUkkgPSBnZXRXZWJTZXJ2aWNlVVJJKCk7Ci0gIAlpZiAod3NVUkkgIT0gbnVsbCAmJiB3c1VSSS5sZW5ndGgoKSA+IDAgJiYgd3NVUkkuZW5kc1dpdGgoIndzZGwiKSkKLSAgCXsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIod3NVUkkuc3Vic3RyaW5nKDAsIHdzVVJJLmxlbmd0aCgpLTQpKTsKLSAgICAgIHNiLmFwcGVuZCgid3NpbCIpOwotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIAl9Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgCUlQcm9qZWN0IHAgPSBnZXRQcm9qZWN0RnJvbUluaXRpYWxTZWxlY3Rpb24oc2VsZWN0aW9uXyk7Ci0gIAlyZXR1cm4gcDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIFN0cmluZyBjbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tSW5pdGlhbFNlbGVjdGlvbihzZWxlY3Rpb25fKTsKLSAgICByZXR1cm4gY25hbWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNQcm90b2NvbChTdHJpbmcgdXJsKSB7CSAgCi0gICAgcmV0dXJuIHVybC5pbmRleE9mKCI6IikgIT0gLTE7CSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21Jbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKG9iaik7Ci0gICAgICAgICAgaWYgKHJlc291cmNlPT1udWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJpID0gZ2V0V2ViU2VydmljZVVSSSgpOwotICAgICAgICAgICAgaWYgKGhhc1Byb3RvY29sKHVyaSkpIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKG5ldyBQYXRoKHVyaSkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YocmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgICAgIH0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZUZyb21Jbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKG9iaik7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcDsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyB1cmkgPSBnZXRXZWJTZXJ2aWNlVVJJKCk7Ci0gICAgICAgICAgICBpZiAoaGFzUHJvdG9jb2wodXJpKSkgcmV0dXJuIG51bGw7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbXAgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKG5ldyBQYXRoKHVyaSkpIDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIGNvbXAgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKHJlc291cmNlKTsKLSAgICAgICAgICBpZiAoY29tcCE9bnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcC5nZXROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9ICAgIAotICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YTlhNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDIwICAgMTM1OTEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uV3JhcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBXU0RMU2VsZWN0aW9uV2lkZ2V0IHdzZGxTZWxlY3Rpb25XaWRnZXQ7Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY29tcG9uZW50TmFtZTsKLSAgCi0gIHB1YmxpYyBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcigpCi0gIHsKLQkgIHdzZGxTZWxlY3Rpb25XaWRnZXQgPSBuZXcgV1NETFNlbGVjdGlvbldpZGdldCgpOwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgeyAgICAKLSAgICB3c2RsU2VsZWN0aW9uV2lkZ2V0LmFkZENvbnRyb2xzKHBhcmVudCwgc3RhdHVzTGlzdGVuZXIpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxTZWxlY3Rpb25XaWRnZXQuZ2V0U3RhdHVzKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VVUkkoU3RyaW5nIHdzVXJpKQotICB7Ci0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsOwotICAgIGlmICh3c1VyaSAhPSBudWxsKQotICAgICAgc2VsID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24od3NVcmkpOwotICAgIGVsc2UKLSAgICAgIHNlbCA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKCk7Ci0gICAgd3NkbFNlbGVjdGlvbldpZGdldC5zZXRJbml0aWFsU2VsZWN0aW9uKHNlbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0gIHsKLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgICAgPSB3c2RsU2VsZWN0aW9uV2lkZ2V0LmdldE9iamVjdFNlbGVjdGlvbigpOwotICAgIE9iamVjdCAgICAgICAgICAgICAgIG9iamVjdCA9IHNlbC5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmIChvYmplY3QgIT0gbnVsbCApCi0gICAgewotICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIFdTRExTZWxlY3Rpb25XcmFwcGVyICkKLSAgICAgIHsgICAgCi0gICAgICAgIC8vIEdldCBhdCB0aGUgaW5uZXIgc3RydWN0dXJlZCBzZWxlY3Rpb24gb2JqZWN0LgotICAgICAgICBXU0RMU2VsZWN0aW9uV3JhcHBlciB3cmFwcGVyICAgICAgICA9IChXU0RMU2VsZWN0aW9uV3JhcHBlcilvYmplY3Q7Ci0gICAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGlubmVyU2VsZWN0aW9uID0gd3JhcHBlci53c2RsU2VsZWN0aW9uOwotICAgICAgICBPYmplY3QgICAgICAgICAgICAgICBpbm5lck9iamVjdCAgICA9IGlubmVyU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gaW5uZXJPYmplY3QgPT0gbnVsbCA/IG51bGwgOiBpbm5lck9iamVjdC50b1N0cmluZygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBvYmplY3QudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotICAJcmV0dXJuIGdldFdlYlNlcnZpY2VVUkkoKTsKLSAgfQotICAKLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIHJldHVybiB3c2RsU2VsZWN0aW9uV2lkZ2V0LmdldFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAJdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gIAlJUHJvamVjdCBwID0gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRQcm9qZWN0KCk7Ci0gIAlpZiAocD09bnVsbCkKLSAgCXsKLSAgCSAgcmV0dXJuIHByb2plY3Q7Ci0gIAl9Ci0gIAllbHNlCi0gIAkgIHJldHVybiBwOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIFN0cmluZyBjbmFtZSA9IHdzZGxTZWxlY3Rpb25XaWRnZXQuZ2V0Q29tcG9uZW50TmFtZSgpOwotICAgIGlmIChjbmFtZT09bnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29tcG9uZW50TmFtZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGNuYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50TmFtZShTdHJpbmcgY29tcG9uZW50TmFtZSkKLSAgewotICAgIHRoaXMuY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKSB7Ci0JICBpZiAod3NkbFNlbGVjdGlvbldpZGdldCAhPSBudWxsKQotCSAgewotCQkgIHJldHVybiB3c2RsU2VsZWN0aW9uV2lkZ2V0LmdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCk7ICAKLQkgIH0KLQkgIGVsc2UgcmV0dXJuICIiOyAKLSAgfQotICAKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpIHsKLQkgIHJldHVybiB3c2RsU2VsZWN0aW9uV2lkZ2V0LmdldE9iamVjdFNlbGVjdGlvbigpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgcykKLSAgewotCSAgcmV0dXJuIHdzZGxTZWxlY3Rpb25XaWRnZXQudmFsaWRhdGUocyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dlYlNlcnZpY2VDbGllbnRUeXBlV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNTRjYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dlYlNlcnZpY2VDbGllbnRUeXBlV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNyAgIDEzNTQ0MyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMCAgIDEzNTQ0MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMCAgIDEzNjAzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MTEgICAxMzYxNjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDE3ICAgMTM2MzkwIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzYxNTggcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNjcwNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIxICAgMTM2NzYxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjQgICAxMzgwNTIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDI1ICAgMTM3ODMxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjYgICAxMzc2MjIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjcgICAxMzgwNTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MDQgICAxMzgwMzUgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA3ICAgMTQ0ODI2IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjA3ICAgMTQ0MDQ5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjE0ICAgMTQ2MjcwIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNzE3ICAgMTUwNTc3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA2MDcyNiAgIDE1MDg2NSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwODE3ICAgMTQwMDE3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBsb25nZXIgcHJvamVjdCBvciBzZXJ2ZXIvcnVudGltZSBzdHJpbmdzIGRvIG5vdCByZXNpemUgd2l6YXJkCi0gKiAyMDA2MDgyOSAgIDE1NTQ0MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd2ViIHNlcnZpY2Ugd2l6YXJkIGhhbmdzIGR1cmluZyByZXNpemUKLSAqIDIwMDcwMTI2ICAgMTM4NDg0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAyMDUgICAxNzAxNDEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzEyICAgMTQ3NDQyIHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKiAyMDA4MDMxMSAgIDIyMjEwMyB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgQ2hhbmdpbmcgc2VydmljZSBzY2FsZSBkb2Vzbid0IHVwZGF0ZSBjb21wbGV0ZWx5IG5vbi1VSSBwYXJ0IG9mIGNsaWVudCBzY2FsZQotICogMjAwODAzMjcgICAyMjQ0NTIgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqIDIwMDgwNDE2ICAgMjE1MDg0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuUHJvamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLlJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLkxhYmVsc0FuZElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVDb250cm9sQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY2FsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuSHlwZXJsaW5rR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuSHlwZXJsaW5rU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkh5cGVybGlua0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5IeXBlcmxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuUGFnZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBJUGFja2FibGUKLXsgICAgCi0JIC8vIElORk9QT1BTCSAKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyMiBmb3IgdGhlIFNlcnZlciBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19TRVJWRVIgPSAiV1NXU0NFTjAwMjIiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIzIGZvciB0aGUgUnVudGltZSBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19SVU5USU1FID0gIldTV1NDRU4wMDIzIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyNCBmb3IgdGhlUHJvamVjdHMgaHlwZXJsaW5rIG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0gICAgIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfUFJPSkVDVFMgID0gIldTV1NDRU4wMDI0IjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyNSBmb3IgdGhlQ2xpZW50IFR5cGUgY29tYm8gYm94IG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DT01CT19DTElFTlRUWVBFID0gIldTV1NDRU4wMDI1IjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyNiBmb3IgdGhlQ2xpZW50IFNsaWRlciBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fU0NBTEVfQ0xJRU5UID0gIldTV1NDRU4wMDI2IjsKLQkKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfMD0iaWNvbnMvY2xpZW50X3Rlc3QuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfMT0iaWNvbnMvY2xpZW50X3J1bi5qcGciOyAgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfMj0iaWNvbnMvY2xpZW50X2luc3RhbGwuanBnIjsgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBHUkFQSElDX0NMSUVOVF8zPSJpY29ucy9jbGllbnRfZGVwbG95LmpwZyI7IC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfND0iaWNvbnMvY2xpZW50X2Fzc2VtYmxlLmpwZyI7IC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfNT0iaWNvbnMvY2xpZW50X2RldmVsb3AuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19DTElFTlRfNj0iaWNvbnMvY2xpZW50X25vbmUuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgCi0gIHByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMD0iaWNvbnMvc2NhbGUwX2Jncm91bmQuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18xPSJpY29ucy9zY2FsZTFfYmdyb3VuZC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzI9Imljb25zL3NjYWxlMl9iZ3JvdW5kLmpwZyI7ICAvLyROT04tTkxTLU4kCi0gIHByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMz0iaWNvbnMvc2NhbGUzX2Jncm91bmQuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR180PSJpY29ucy9zY2FsZTRfYmdyb3VuZC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzU9Imljb25zL3NjYWxlNV9iZ3JvdW5kLmpwZyI7ICAvLyROT04tTkxTLU4kCi0gIHByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfNj0iaWNvbnMvc2NhbGU2X2Jncm91bmQuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIGNsaWVudENvbXBvc2l0ZV87Ci0gIHByaXZhdGUgQ29tcG9zaXRlIGhDb21wQ2xpZW50XzsKLSAgcHJpdmF0ZSBTaGVsbCBzaGVsbF87Ci0gIHByaXZhdGUgQ29tYm8gIGNsaWVudFR5cGVDb21ib187ICAKLSAgcHJpdmF0ZSBTY2FsZSBjbGllbnRTY2FsZV87ICAKLSAgcHJpdmF0ZSBMYWJlbCB0b3BvbG9neVNwb3RfOwotICBwcml2YXRlIExhYmVsIGNsaWVudERldGFpbHNMYWJlbF87ICAKLSAgcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtDbGllbnRSdW50aW1lXzsKLSAgcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtDbGllbnRTZXJ2ZXJfOwotICBwcml2YXRlIEh5cGVybGluayBoTGlua0NsaWVudFByb2plY3RfOwotICBwcml2YXRlIEh5cGVybGluayBoTGlua0NsaWVudEVBUl87Ci0gIHByaXZhdGUgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyBwcm9qZWN0RGlhbG9nXzsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBkZXZlbG9wQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGRlcGxveUNsaWVudF87Ci0JCi0gIHByaXZhdGUgQm9vbGVhbiB0ZXN0Q2xpZW50XzsKLSAgcHJpdmF0ZSBCb29sZWFuIGluc3RhbGxDbGllbnRfOwotICBwcml2YXRlIEJvb2xlYW4gc3RhcnRDbGllbnRfOyAgICAKLSAgICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciBpZHNfOwotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBlbmFibGVQcm94eV87ICAvL3NlcnZpY2Ugc2NhbGUgaXMgc2V0IHRvIGEgbGV2ZWwgdGhhdCB0aGUgY2xpZW50IHNjYWxlIGNhbiBiZSBlbmFibGVkCi0gIHByaXZhdGUgYm9vbGVhbiBjbGllbnRPbmx5Xz1mYWxzZTsKLSAgcHJpdmF0ZSBpbnQgY2xpZW50U2NhbGVTZXR0aW5nXzsKLSAgcHJpdmF0ZSBJbWFnZVJlZ2lzdHJ5IGltYWdlUmVnXzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXJfOwotICBwcml2YXRlIFN0cmluZyBlYXJQcm9qZWN0TmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIHByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBib29sZWFuIG5lZWRFYXJfOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRDb21wb25lbnRUeXBlXzsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIGludCB2YWxpZGF0aW9uU3RhdGVfOwotICAKLSAgcHJpdmF0ZSBTY2FsZVNlbGVjdGlvbkxpc3RlbmVyIHNjYWxlU2VsZWN0aW9uTGlzdGVuZXIgPSBuZXcgU2NhbGVTZWxlY3Rpb25MaXN0ZW5lcigpOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1JVTlRJTUVfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1JVTlRJTUVTX0xJU1QgOyAKLSAgcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1NFUlZFUl9QUkVGSVggPSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVDsKLSAgcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1BST0pFQ1RfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9QUk9KRUNUOwotICBwcml2YXRlIFN0cmluZyBDTElFTlRfRUFSX1BSRUZJWCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfRUFSX1BST0pFQ1Q7Ci0gIAotICBwcml2YXRlIENvbXBvc2l0ZSBjbGllbnRHcm91cENvbXBvc2l0ZV8gOwotCQotICBwcml2YXRlIFVJVXRpbHMgdXRpbHNfID0gbmV3IFVJVXRpbHMoIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIpOwotICBwcml2YXRlIElQYWNrYWJsZSBwYWNrYWJsZV8gPSBudWxsOyAgCi0gIHByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsSWRzXzsKLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldChib29sZWFuIGNsaWVudE9ubHkpIHsKLQkgICAgY2xpZW50T25seV8gPSBjbGllbnRPbmx5OwotCQlpbml0SW1hZ2VSZWdpc3RyeSgpOwotCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQl9Ci0gICAKLSAgICAvKioKLSAgICAgKiBHaXZlIHRoaXMgd2lkZ2V0IGEgaGFuZGxlIHRvIGFuIElQYWNrYWJsZSBpbnN0YW5jZSwgd2hpY2ggd2lsbCBhbHNvIGJlCi0gICAgICogcGFja2VkIHdoZW4gdGhpcyB3aWRnZXQncyBwYWNrSXQoKSBpcyBjYWxsZWQuCi0gICAgICogCi0gICAgICogQHBhcmFtIHBhY2thYmxlIFRoZSBJUGFja2FibGUgaW5zdGFuY2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UGFja2FibGUoSVBhY2thYmxlIHBhY2thYmxlKSB7Ci0gICAgCXBhY2thYmxlXyA9IHBhY2thYmxlOwotICAgIH0KLSAgCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSVBhY2thYmxlI3BhY2tJdCgpCi0JICovCi0JcHVibGljIHZvaWQgcGFja0l0KCkgewotCQljbGllbnRHcm91cENvbXBvc2l0ZV8ucGFjayh0cnVlKTsJCQotCQl1dGlsc18uaG9yaXpvbnRhbFJlc2l6ZShjbGllbnRHcm91cENvbXBvc2l0ZV8uZ2V0U2hlbGwoKSwgY2xpZW50R3JvdXBDb21wb3NpdGVfLCBVSVV0aWxzLkRFRkFVTFRfUEFERElORyk7Ci0JCWlmICghY2xpZW50T25seV8gJiYgcGFja2FibGVfICE9IG51bGwpCi0JCQlwYWNrYWJsZV8ucGFja0l0KCk7Ci0JfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yI2FkZENvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXIpCi0gICAqLwotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICBzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsKLSAgICBDb21wb3NpdGUgY2xpZW50VHlwZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JR3JpZExheW91dCBjY2xheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JY2NsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JY2NsYXlvdXQubWFyZ2luVG9wPTM7Ci0JY2xpZW50VHlwZUNvbXBvc2l0ZS5zZXRMYXlvdXQoIGNjbGF5b3V0ICk7Ci0gICAgR3JpZERhdGEgY2NHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOyAKLSAgICBjbGllbnRUeXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoY2NHcmlkRGF0YSk7Ci0gICAgCi0gICAgaW50IGNvbWJvU3R5bGUgPSBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFk7Ci0gICAgY2xpZW50VHlwZUNvbWJvXyA9IHV0aWxzXy5jcmVhdGVDb21ibyggY2xpZW50VHlwZUNvbXBvc2l0ZSwgCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV0VCU0VSVklDRUNMSUVOVFRZUEUsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1BSX0NPTUJPX0NMSUVOVFRZUEUsIAotICAgIAkJSU5GT1BPUF9XU1dTQ0VOX0NPTUJPX0NMSUVOVFRZUEUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYm9TdHlsZSApOwotICAgIEdyaWREYXRhIGNvbWJvR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICBjbGllbnRUeXBlQ29tYm9fLnNldExheW91dERhdGEoY29tYm9HcmlkRGF0YSk7Ci0JY2xpZW50VHlwZUNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJU3RyaW5nIG9sZFR5cGVJZCA9IGlkc18uZ2V0VHlwZUlkKCk7Ci0JCQkJaW50IGN1cnJlbnRTZWxlY3Rpb25JZHggPSBjbGllbnRUeXBlQ29tYm9fLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JCQkJU3RyaW5nIGN1cnJlbnRUeXBlSWQgPSBsYWJlbElkc18uZ2V0SWRzXygpW2N1cnJlbnRTZWxlY3Rpb25JZHhdOwotCQkJCWlmICghb2xkVHlwZUlkLmVxdWFscyhjdXJyZW50VHlwZUlkKSkgewkJCi0JCQkJCS8vIGhhbmRsZSBjaGFuZ2luZyBjbGllbnQgdHlwZQotCQkJCQlpZHNfLnNldFR5cGVJZChjdXJyZW50VHlwZUlkKTsKLQkJCQkJcmVmcmVzaFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotCQkJfQotCi0JCX0pOyAgICAKLSAgICAKLSAgICBjbGllbnRHcm91cENvbXBvc2l0ZV8gPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyAgICAKLQlHcmlkTGF5b3V0IGdjbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQlnY2xheW91dC5udW1Db2x1bW5zID0gMjsKLQlnY2xheW91dC5ob3Jpem9udGFsU3BhY2luZz0wOwkJCi0JZ2NsYXlvdXQubWFyZ2luSGVpZ2h0PTA7CQkKLQlnY2xheW91dC5tYXJnaW5Cb3R0b209NTsKLQljbGllbnRHcm91cENvbXBvc2l0ZV8uc2V0TGF5b3V0KCBnY2xheW91dCApOwotICAgIEdyaWREYXRhIGdjR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoU1dULkJFR0lOTklORywgU1dULkJFR0lOTklORywgdHJ1ZSwgdHJ1ZSk7IAotICAgIGNsaWVudEdyb3VwQ29tcG9zaXRlXy5zZXRMYXlvdXREYXRhKGdjR3JpZERhdGEpOwotICAgIAotICAgIGNsaWVudEdyb3VwQ29tcG9zaXRlXy5hZGRDb250cm9sTGlzdGVuZXIobmV3IENvbnRyb2xMaXN0ZW5lcigpCi0JewotCQlwdWJsaWMgdm9pZCBjb250cm9sTW92ZWQoQ29udHJvbEV2ZW50IGUpIHsKLQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCQotCQl9Ci0JCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBlKSB7Ci0JCQljbGllbnRHcm91cENvbXBvc2l0ZV8ucGFjayh0cnVlKTsKLQkJfQotCX0pOwotICAgIAotICAgICAgIAotCWNsaWVudENvbXBvc2l0ZV8gPSAgbmV3IENvbXBvc2l0ZShjbGllbnRHcm91cENvbXBvc2l0ZV8sIFNXVC5OT05FKTsKLQlHcmlkTGF5b3V0IGdyaWRsYXlvdXQgICA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ3JpZGxheW91dC5udW1Db2x1bW5zICAgPSAyOwotICAgIGdyaWRsYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmc9MDsKLSAgICBncmlkbGF5b3V0Lm1hcmdpbkhlaWdodD0wOwotICAgIGNsaWVudENvbXBvc2l0ZV8uc2V0TGF5b3V0KCBncmlkbGF5b3V0ICk7Ci0gICAgR3JpZERhdGEgc2NHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGNsaWVudENvbXBvc2l0ZV8uc2V0TGF5b3V0RGF0YShzY0dyaWREYXRhKTsKLSAgICAKLSAgICBjbGllbnRTY2FsZV8gPSBuZXcgU2NhbGUoY2xpZW50Q29tcG9zaXRlXyAsIFNXVC5WRVJUSUNBTCB8IFNXVC5CT1JERVIpOwkJCi0JdXRpbHNfLmNyZWF0ZUluZm9Qb3AoY2xpZW50U2NhbGVfLCBJTkZPUE9QX1dTV1NDRU5fU0NBTEVfQ0xJRU5UKTsJCi0JY2xpZW50U2NhbGVfLnNldE1pbmltdW0oMCk7Ci0JY2xpZW50U2NhbGVfLnNldE1heGltdW0oNik7Ci0JY2xpZW50U2NhbGVfLnNldEluY3JlbWVudCgxKTsKLQljbGllbnRTY2FsZV8uc2V0UGFnZUluY3JlbWVudCgxKTsKLQljbGllbnRTY2FsZV8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoc2NhbGVTZWxlY3Rpb25MaXN0ZW5lcik7CQkKLQlzZXRDbGllbnRTY2FsZShnZXRDbGllbnRHZW5lcmF0aW9uKCkpOwotCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVCk7Ci0JCi0JQWNjZXNzaWJsZSBhY2Nlc3NpYmxlU2NhbGUgPSBjbGllbnRTY2FsZV8uZ2V0QWNjZXNzaWJsZSgpOwotCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIobmV3IEFjY2Vzc2libGVBZGFwdGVyKCl7Ci0JCS8vIHJldHVybiBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB3aGF0IHRvIGRvIHdpdGggdGhlIHNsaWRlcgotCQkvLyAgdGhpcyBpcyByZWFkIGJ5IHRoZSBzY3JlZW4gcmVhZGVyIHdoZW4gdGhlIHNsaWRlciBmaXJzdCBnZXRzIGZvY3VzCi0JCXB1YmxpYyB2b2lkIGdldE5hbWUoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQ7CQkJCi0JCX0JCQkKLQl9KTsKLQlhY2Nlc3NpYmxlU2NhbGUuYWRkQWNjZXNzaWJsZUNvbnRyb2xMaXN0ZW5lcihuZXcgQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyKCl7Ci0JCS8vIHJldHVybiBhIG1lYW5pbmdmdWwgc3RyaW5nIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIKLQkJLy8gYXR0ZW1wdHMgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzZXJ2aWNlIHNjYWxlCi0JCXB1YmxpYyB2b2lkIGdldFZhbHVlKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJaW50IHNlbGVjdGlvbiA9IGNsaWVudFNjYWxlXy5nZXRTZWxlY3Rpb24oKTsKLQkJCXN3aXRjaCAoc2VsZWN0aW9uKSB7Ci0JCQljYXNlIDA6Ci0JCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1RFU1Q7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1JVTjsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfSU5TVEFMTDsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzoKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVQTE9ZOwotCQkJCWJyZWFrOwotCQkJY2FzZSA0OgotCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9BU1NFTUJMRTsKLQkJCQlicmVhazsKLQkJCWNhc2UgNToKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVWRUxPUDsKLQkJCQlicmVhazsKLQkJCWNhc2UgNjoJCQkJCi0JCQkJaWYgKGNsaWVudE9ubHlfKQotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UX09OTFk7Ci0JCQkJZWxzZQotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UOwkJCQkKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9CQkJCQkJCQkKLQkJfQotCX0pOwotCQotCUdyaWREYXRhIGxheW91dERhdGExID0gbmV3IEdyaWREYXRhKCk7Ci0JbGF5b3V0RGF0YTEuaG9yaXpvbnRhbEFsaWdubWVudD1TV1QuQ0VOVEVSOwotCWxheW91dERhdGExLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkJFR0lOTklORzsKLQlSZWN0YW5nbGUgc2NhbGVSID0gKGltYWdlUmVnXy5nZXQoSUNPTl9TQ0FMRV9CR18wKSkuZ2V0Qm91bmRzKCk7CQotCWxheW91dERhdGExLmhlaWdodEhpbnQ9c2NhbGVSLmhlaWdodDsKLQlsYXlvdXREYXRhMS53aWR0aEhpbnQ9c2NhbGVSLndpZHRoKzE7Ci0JY2xpZW50U2NhbGVfLnNldExheW91dERhdGEobGF5b3V0RGF0YTEpOwotCQkKLQl0b3BvbG9neVNwb3RfID0gbmV3IExhYmVsKGNsaWVudENvbXBvc2l0ZV8gLCBTV1QuQ0VOVEVSIHwgU1dULkJPUkRFUiApOwotCXRvcG9sb2d5U3BvdF8uc2V0QmFja2dyb3VuZChEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfV0hJVEUpKTsKLQlpZiAoY2xpZW50T25seV8pCi0JCXRvcG9sb2d5U3BvdF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlRfT05MWSk7Ci0JZWxzZQotCXRvcG9sb2d5U3BvdF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQpOwotCQotCUdyaWREYXRhIGxheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQlsYXlvdXREYXRhLnZlcnRpY2FsQWxpZ25tZW50PVNXVC5CRUdJTk5JTkc7Ci0JbGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50PVNXVC5CRUdJTk5JTkc7Ci0JUmVjdGFuZ2xlIHRvcFIgPSAoaW1hZ2VSZWdfLmdldChHUkFQSElDX0NMSUVOVF82KSkuZ2V0Qm91bmRzKCk7Ci0JbGF5b3V0RGF0YS53aWR0aEhpbnQ9dG9wUi53aWR0aDsKLQlsYXlvdXREYXRhLmhlaWdodEhpbnQ9dG9wUi5oZWlnaHQ7Ci0JdG9wb2xvZ3lTcG90Xy5zZXRMYXlvdXREYXRhKGxheW91dERhdGEpOwkJCi0JCi0Jc2V0R3JhcGhpY3MoZ2V0Q2xpZW50R2VuZXJhdGlvbigpKTsKLQkJCi0JaENvbXBDbGllbnRfID0gdXRpbHNfLmNyZWF0ZUNvbXBvc2l0ZShjbGllbnRHcm91cENvbXBvc2l0ZV8sIDEpOwotCQotCWNsaWVudERldGFpbHNMYWJlbF8gPSBuZXcgTGFiZWwoaENvbXBDbGllbnRfLCBTV1QuTk9ORSk7Ci0JY2xpZW50RGV0YWlsc0xhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVU1NQVJZKTsKLQkKLQloTGlua0NsaWVudFNlcnZlcl89IG5ldyBIeXBlcmxpbmsoaENvbXBDbGllbnRfLCBTV1QuTlVMTCk7Ci0JdXRpbHNfLmNyZWF0ZUluZm9Qb3AoaExpbmtDbGllbnRTZXJ2ZXJfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1NFUlZFUik7Ci0JaExpbmtDbGllbnRTZXJ2ZXJfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfVEVYVF9TRVJWRVIpOwotCWhMaW5rQ2xpZW50U2VydmVyXy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCi0JCQlsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKHRydWUsIHRydWUpOwkJCQkKLQkJfQotCQlwdWJsaWMgdm9pZCBsaW5rRW50ZXJlZChIeXBlcmxpbmtFdmVudCBlKXt9Ci0JCXB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQkJCQotCX0pOwotCQotCWhMaW5rQ2xpZW50UnVudGltZV8gPSBuZXcgSHlwZXJsaW5rKGhDb21wQ2xpZW50XywgU1dULk5VTEwpOwotCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rQ2xpZW50UnVudGltZV8sIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfUlVOVElNRSk7Ci0JaExpbmtDbGllbnRSdW50aW1lXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1RFWFRfUlVOVElNRSk7Ci0JaExpbmtDbGllbnRSdW50aW1lXy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCi0JCQlsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKHRydWUpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpe30KLQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JfSk7Ci0JCi0JSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCXByb2plY3REaWFsb2dfID0gbmV3IFByb2plY3RTZWxlY3Rpb25EaWFsb2cod29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIAotCQkJbmV3IFBhZ2VJbmZvKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUSUxFX0NMSUVOVF9QUk9KRUNUX1NFVFRJTkdTLCAiIiwgCi0gICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkJCQkJewkKLQkJCQkJCQlwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJCQkJCQl7CSAgCQkJCQkJIAotCQkJCQkJCSAgIHJldHVybiBuZXcgUHJvamVjdFNlbGVjdGlvbldpZGdldCh0cnVlKTsKLQkJCQkJCQl9Ci0JCQkJCQl9KSk7Ci0JCi0JaExpbmtDbGllbnRQcm9qZWN0XyA9IG5ldyBIeXBlcmxpbmsoaENvbXBDbGllbnRfLCBTV1QuTlVMTCk7Ci0JdXRpbHNfLmNyZWF0ZUluZm9Qb3AoaExpbmtDbGllbnRSdW50aW1lXywgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19QUk9KRUNUUyk7Ci0JaExpbmtDbGllbnRQcm9qZWN0Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0NMSUVOVFBST0pFQ1RfTElOSyk7Ci0JaExpbmtDbGllbnRQcm9qZWN0Xy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCi0JCQlsYXVuY2hQcm9qZWN0RGlhbG9nKCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQlwdWJsaWMgdm9pZCBsaW5rRXhpdGVkKEh5cGVybGlua0V2ZW50IGUpe30JCQkKLQl9KTsKLQkKLQloTGlua0NsaWVudEVBUl8gPSBuZXcgSHlwZXJsaW5rKGhDb21wQ2xpZW50XywgU1dULk5VTEwpOwkKLQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua0NsaWVudFJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQloTGlua0NsaWVudEVBUl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9DTElFTlRQUk9KRUNUX0xJTkspOwotCWhMaW5rQ2xpZW50RUFSXy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCi0JCQlsYXVuY2hQcm9qZWN0RGlhbG9nKCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQlwdWJsaWMgdm9pZCBsaW5rRXhpdGVkKEh5cGVybGlua0V2ZW50IGUpe30JCQkKLQl9KTsKLQkKLQloTGlua0NsaWVudFNlcnZlcl8uc2V0VGV4dChDTElFTlRfU0VSVkVSX1BSRUZJWCk7IAotCWhMaW5rQ2xpZW50UnVudGltZV8uc2V0VGV4dChDTElFTlRfUlVOVElNRV9QUkVGSVgpOwotCWhMaW5rQ2xpZW50UHJvamVjdF8uc2V0VGV4dChDTElFTlRfUFJPSkVDVF9QUkVGSVgpOwotCWhMaW5rQ2xpZW50RUFSXy5zZXRUZXh0KENMSUVOVF9FQVJfUFJFRklYKTsJCi0JCi0JSHlwZXJsaW5rR3JvdXAgc2VydmVyUnVudGltZUdyb3VwID0gbmV3IEh5cGVybGlua0dyb3VwKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rQ2xpZW50U2VydmVyXyk7Ci0Jc2VydmVyUnVudGltZUdyb3VwLmFkZChoTGlua0NsaWVudFJ1bnRpbWVfKTsKLQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rQ2xpZW50UHJvamVjdF8pOwotCXNlcnZlclJ1bnRpbWVHcm91cC5hZGQoaExpbmtDbGllbnRFQVJfKTsKLQlzZXJ2ZXJSdW50aW1lR3JvdXAuc2V0SHlwZXJsaW5rVW5kZXJsaW5lTW9kZShIeXBlcmxpbmtTZXR0aW5ncy5VTkRFUkxJTkVfQUxXQVlTKTsKLSAgICAKLQllbmFibGVDbGllbnRTbGlkZXIoZ2V0R2VuZXJhdGVQcm94eSgpKTsKLQkKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZW5hYmxlQ2xpZW50U2xpZGVyKCBib29sZWFuIGVuYWJsZSApCi0gIHsKLQllbmFibGVQcm94eV8gPSBlbmFibGU7Ci0JY2xpZW50U2NhbGVfLnNldEVuYWJsZWQoZW5hYmxlKTsKLQlpbnQgc2VsZWN0aW9uID0gZ2V0Q2xpZW50R2VuZXJhdGlvbigpOwotCWlmIChlbmFibGUpCi0JewkJCQkKLQkJc2V0R3JhcGhpY3Moc2VsZWN0aW9uKTsKLQl9Ci0JZWxzZQotCXsKLQkJc2V0Q2xpZW50U2NhbGUoU2NlbmFyaW9Db250ZXh0LldTX05PTkUpOwotCQl1cGRhdGVGaWVsZHMoU2NlbmFyaW9Db250ZXh0LldTX05PTkUpOwotCQlzZXRHcmFwaGljcyhTY2VuYXJpb0NvbnRleHQuV1NfTk9ORSk7Ci0JCWNsaWVudFNjYWxlXy5zZXRCYWNrZ3JvdW5kSW1hZ2UobnVsbCk7ICAvL292ZXJyaWRlIGJhY2tncm91bmQgZm9yIGRpc2FibGUgdG8gZ3JleQkJCi0JfQkKLQlzaG93U3VtbWFyeShlbmFibGUgJiYgKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUZpZWxkcyhpbnQgc2VsZWN0aW9uKSB7Ci0JCXNldERldmVsb3BDbGllbnQoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsKLQkJc2V0QXNzZW1ibGVDbGllbnQoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRSk7Ci0JCXNldERlcGxveUNsaWVudChzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0RFUExPWSk7Ci0JCXNldFRlc3RDbGllbnQobmV3IEJvb2xlYW4oc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19URVNUKSk7Ci0JCXNldEluc3RhbGxDbGllbnQobmV3IEJvb2xlYW4oc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19JTlNUQUxMKSk7Ci0JCXNldFN0YXJ0Q2xpZW50KG5ldyBCb29sZWFuKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfU1RBUlQpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzaG93U3VtbWFyeShib29sZWFuIHNob3cpCi0gIHsKLQkgIGlmIChjbGllbnRPbmx5XykKLQkJICBzaG93ID0gdHJ1ZTsgIC8vc2hvcnQgY2lyY3VpdCB0byBlbGltaW5hdGUgZmxpY2tlci4uLgkgIAotCSAgCi0JICBoTGlua0NsaWVudEVBUl8uc2V0VmlzaWJsZShzaG93ICYmIG5lZWRFYXJfKTsKLQkgIGhMaW5rQ2xpZW50UHJvamVjdF8uc2V0VmlzaWJsZShzaG93KTsKLQkgIGhMaW5rQ2xpZW50UnVudGltZV8uc2V0VmlzaWJsZShzaG93KTsKLQkgIGhMaW5rQ2xpZW50U2VydmVyXy5zZXRWaXNpYmxlKHNob3cpOwotCSAgCi0JICBpZiAoc2hvdykKLQkgIHsKLQkJICBjbGllbnREZXRhaWxzTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NVTU1BUlkpOwotCSAgfQotCSAgZWxzZQotCSAgewotCQkgIGlmIChjbGllbnRPbmx5XykKLQkJCSAgaENvbXBDbGllbnRfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UX09OTFkpOwotCQkJZWxzZQotCQkgIGhDb21wQ2xpZW50Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVCk7Ci0JCSAgY2xpZW50RGV0YWlsc0xhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVU1NQVJZX05PX0NMSUVOVCk7CQkgIAotCSAgfQkgIAotCSAgY2xpZW50RGV0YWlsc0xhYmVsXy5wYWNrKHRydWUpOwotCSAgaExpbmtDbGllbnRQcm9qZWN0Xy5wYWNrKHRydWUpOwotCSAgaExpbmtDbGllbnRFQVJfLnBhY2sodHJ1ZSk7Ci0JICBwYWNrSXQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0JTGFiZWxzQW5kSWRzICAgICAgICAgICAgICAgICBsYWJlbElkcyAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50VHlwZUxhYmVscygpOwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICA9IDA7Ci0gICAgU3RyaW5nW10gICAgICAgICAgICAgICAgICAgICBjbGllbnRJZHMgID0gbGFiZWxJZHMuZ2V0SWRzXygpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJZCA9IGlkcy5nZXRUeXBlSWQoKTsKLSAgICAKLSAgICBsYWJlbElkc18gPSBsYWJlbElkczsKLQkvLyByc2tyZWcKLSAgICBjbGllbnRUeXBlQ29tYm9fLnNldEl0ZW1zKCBsYWJlbElkcy5nZXRMYWJlbHNfKCkgKTsKLSAgICAKLSAgICAvLyBOb3cgZmluZCB0aGUgc2VsZWN0ZWQgb25lLgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGllbnRJZHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBpZiggc2VsZWN0ZWRJZC5lcXVhbHMoIGNsaWVudElkc1tpbmRleCBdKSApCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvbiA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgY2xpZW50VHlwZUNvbWJvXy5zZWxlY3QoIHNlbGVjdGlvbiApOyAgICAKLQlpZHNfID0gaWRzOwotCQotCWlmIChpZHNfICE9IG51bGwpCi0JewotCQlTdHJpbmcgY2xpZW50U2VydmVyVGV4dCA9ICIiOwotCQlTdHJpbmcgc2VydmVySWQgPSBpZHNfLmdldFNlcnZlcklkKCk7Ci0JCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpPjApCi0JCXsKLQkJCWNsaWVudFNlcnZlclRleHQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotCQl9IAotCQlTdHJpbmcgY2xpZW50UnVudGltZVRleHQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKGlkc18uZ2V0UnVudGltZUlkKCkpOwotCQkKLQkJU3RyaW5nIGN1cnJlbnRTZXJ2ZXJUZXh0ID0gaExpbmtDbGllbnRTZXJ2ZXJfLmdldFRleHQoKTsKLQkJU3RyaW5nIGN1cnJlbnRSdW50aW1lVGV4dCA9IGhMaW5rQ2xpZW50UnVudGltZV8uZ2V0VGV4dCgpOwotCQlTdHJpbmcgbmV3U2VydmVyVGV4dCA9IENMSUVOVF9TRVJWRVJfUFJFRklYICsgIiAiICsgY2xpZW50U2VydmVyVGV4dDsKLQkJU3RyaW5nIG5ld1J1bnRpbWVUZXh0ID0gQ0xJRU5UX1JVTlRJTUVfUFJFRklYICsgIiAiICsgY2xpZW50UnVudGltZVRleHQ7Ci0JCWhMaW5rQ2xpZW50U2VydmVyXy5zZXRUZXh0KG5ld1NlcnZlclRleHQpOwotCQloTGlua0NsaWVudFJ1bnRpbWVfLnNldFRleHQobmV3UnVudGltZVRleHQpOwotCQkKLQkJLypjaGVjayB0byBzZWUgaWYgdGV4dCBoYXMgY2hhbmdlZCBmb3Igc2VydmVyIG9yIHJ1bnRpbWUKLQkJaWYgc28sIHJlcGFpbnQgbGlua3MgKi8KLQkJaWYgKCFuZXdTZXJ2ZXJUZXh0LmVxdWFscyhjdXJyZW50U2VydmVyVGV4dCkpCi0JCXsKLQkJCWhMaW5rQ2xpZW50U2VydmVyXy5wYWNrKHRydWUpOwotCQkJcGFja0l0KCk7Ci0JCX0JCQkKLQkJCi0JCWlmICghbmV3UnVudGltZVRleHQuZXF1YWxzKGN1cnJlbnRSdW50aW1lVGV4dCkpCi0JCXsKLQkJCWhMaW5rQ2xpZW50UnVudGltZV8ucGFjayh0cnVlKTsKLQkJCXBhY2tJdCgpOwotCQl9IAkKLQl9Ci0JCi0gICAgaWYgKHByb2plY3REaWFsb2dfICE9IG51bGwpCi0gICAgCXByb2plY3REaWFsb2dfLnNldFR5cGVSdW50aW1lU2VydmVyKGlkc18pOwotICAgIAotCS8vV2hlbiB0aGUgc2VydmVyIGNoYW5nZXMsIHRoZSBzdGF0ZSBvZiBuZWVkRWFyIGNvdWxkIGNoYW5nZS4KLQkvL0lmIHRoZSB0aGUgc2VydmVyIGNoYW5nZSByZXN1bHRzIGluIGEgY2hhbmdlIGluIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLAotCS8vdXBkYXRlIG5lZWRFYXIgYW5kIGNsaWVudEVhclByb2plY3ROYW1lLiAgICAKLSAgICAKLQlWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JYm9vbGVhbiBvbGROZWVkRWFyID0gZ2V0Q2xpZW50TmVlZEVBUigpOwotCWJvb2xlYW4gY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcjsKLQotCWlmICghb2xkTmVlZEVhcikgewotCQkJLy8gSWYgYW4gRUFSIHdhcyBub3QgbmVlZGVkIHByZXZpb3VzbHkgaXQgY291bGQgaGF2ZSBiZWVuIGJlY2F1c2Ugb2YKLQkJCS8vIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZSBvciB0aGUgc2VydmVyLgotCQkJLy8gSWYgaXQgd2FzIGJlY2F1c2Ugb2YgdGhlIHByb2plY3QvcHJvamVjdCB0eXBlLCBjaGFuZ2luZyB0aGUKLQkJCS8vIHNlcnZlciBzaG91bGQgaGF2ZSBubyBpbXBhY3QKLQkJCS8vIG9uIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLgotCQkJY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhciA9IHZ1LnByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIoZ2V0Q2xpZW50UHJvamVjdE5hbWUoKSwKLQkJCQkJZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpKTsKLQkJfSBlbHNlIHsKLQkJCWNsaWVudFByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB0cnVlOwotCQl9Ci0KLQkJLy8gYm9vbGVhbiBjbGllbnRQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyID0KLQkJLy8gdnUucHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcihnZXRDbGllbnRQcm9qZWN0TmFtZSgpLAotCQkvLyBnZXRDbGllbnRDb21wb25lbnRUeXBlKCkpOwotCQlpZiAoY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcikgewotCQkJLy8gQ291bGQgbm90IHJ1bGUgb3V0IG5lZWQgZm9yIGFuIEVhciBmcm9tIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZQotCQkJLy8gc28gY2hhbmdpbmcgdGhlIHNlcnZlcgotCQkJLy8gbWF5IGltcGFjdCB0aGUgbmVlZCBmb3IgYW4gRWFyLgotCQkJYm9vbGVhbiBjdXJyZW50U2VydmVyTmVlZHNFYXIgPSB2dS5zZXJ2ZXJOZWVkc0VBUihnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCkpOwotCQkJaWYgKG9sZE5lZWRFYXIgIT0gY3VycmVudFNlcnZlck5lZWRzRWFyKSB7Ci0JCQkJLy8gVXBkYXRlIG5lZWRFYXIgYW5kIHNlcnZpY2VFYXJQcm9qZWN0TmFtZS4KLQkJCQlpZiAoY3VycmVudFNlcnZlck5lZWRzRWFyKSB7Ci0JCQkJCS8vIENhbGN1bGF0ZSBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgdGhlIEVhciBwcm9qZWN0IG5hbWUKLQkJCQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gRGVmYXVsdGluZ1V0aWxzLmdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShnZXRDbGllbnRQcm9qZWN0TmFtZSgpKTsKLQkJCQkJc2V0Q2xpZW50TmVlZEVBUihjdXJyZW50U2VydmVyTmVlZHNFYXIpOwotCQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShlYXJQcm9qZWN0TmFtZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2V0Q2xpZW50TmVlZEVBUihjdXJyZW50U2VydmVyTmVlZHNFYXIpOwotCQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgiIik7Ci0JCQkJfQotCi0JCQl9Ci0JCX0JCSAgICAKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBpZHNfOyAgCi0gIH0KLSAgICAgIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotCSAgcmV0dXJuIGdldENsaWVudEdlbmVyYXRpb24oKSA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsKLQkgIHJldHVybiBkZXZlbG9wQ2xpZW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wQ2xpZW50KSB7Ci0JICB0aGlzLmRldmVsb3BDbGllbnRfID0gZGV2ZWxvcENsaWVudDsKLSAgfQkKLQotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsKLQkgIHJldHVybiBhc3NlbWJsZUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlQ2xpZW50KSB7Ci0JICB0aGlzLmFzc2VtYmxlQ2xpZW50XyA9IGFzc2VtYmxlQ2xpZW50OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewotCSAgcmV0dXJuIGRlcGxveUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3lDbGllbnQpIHsKLQkgIHRoaXMuZGVwbG95Q2xpZW50XyA9IGRlcGxveUNsaWVudDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdENsaWVudChCb29sZWFuIHZhbHVlKQotICB7Ci0JICB0ZXN0Q2xpZW50XyA9IHZhbHVlOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRUZXN0Q2xpZW50KCkKLSAgewotCSAgcmV0dXJuIHRlc3RDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotCSAgcmV0dXJuIGluc3RhbGxDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRTdGFydENsaWVudCgpCi0gIHsKLQkgIHJldHVybiBzdGFydENsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoIEJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgICBpbnN0YWxsQ2xpZW50XyA9IHZhbHVlOyAgICAKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRTdGFydENsaWVudCggQm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICAgIHN0YXJ0Q2xpZW50XyA9IHZhbHVlOyAgICAKLSAgfQotCi0gIAotCXByaXZhdGUgdm9pZCBsYXVuY2hQcm9qZWN0RGlhbG9nKCkKLQl7Ci0JCVN0cmluZyBjdXJyZW50UHJvamVjdE5hbWUgPSBnZXRDbGllbnRQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgY3VycmVudEVhclByb2plY3ROYW1lID0gZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIGN1cnJlbnRQcm9qZWN0VHlwZSA9IGdldENsaWVudENvbXBvbmVudFR5cGUoKTsKLQkJYm9vbGVhbiBjdXJyZW50TmVlZEVhciA9IGdldENsaWVudE5lZWRFQVIoKTsKLQkJCi0JCXByb2plY3REaWFsb2dfLnNldFByb2plY3ROYW1lKGN1cnJlbnRQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldEVhclByb2plY3ROYW1lKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldE5lZWRFQVIoY3VycmVudE5lZWRFYXIpOwkKLQkJcHJvamVjdERpYWxvZ18uc2V0UHJvamVjdENvbXBvbmVudFR5cGUoY3VycmVudFByb2plY3RUeXBlKTsKLQkJCi0JCWludCBzdGF0dXMgPSBwcm9qZWN0RGlhbG9nXy5vcGVuKCk7Ci0JCQotCQlpZiAoc3RhdHVzID09IFdpbmRvdy5PSykKLQkJewotCQkJU3RyaW5nIG5ld1Byb2plY3ROYW1lID0gcHJvamVjdERpYWxvZ18uZ2V0UHJvamVjdE5hbWUoKTsKLQkJCVN0cmluZyBuZXdFYXJQcm9qZWN0TmFtZSA9IHByb2plY3REaWFsb2dfLmdldEVhclByb2plY3ROYW1lKCk7Ci0JCQlTdHJpbmcgbmV3UHJvamVjdFR5cGUgPSBwcm9qZWN0RGlhbG9nXy5nZXRQcm9qZWN0Q29tcG9uZW50VHlwZSgpOwotCQkJYm9vbGVhbiBuZXdOZWVkRWFyID0gcHJvamVjdERpYWxvZ18uZ2V0TmVlZEVBUigpOwkKLQkJCQotCQkJLy9VcGRhdGUgcHJvamVjdCBzZXR0aW5ncyBhbmQgdmFsaWRhdGUgcGFnZSBpZiBzZWxlY3Rpb25zIGNoYW5nZWQuCi0JCQlpZiAoIW5ld1Byb2plY3ROYW1lLmVxdWFscyhjdXJyZW50UHJvamVjdE5hbWUpCi0JCQkJCXx8ICFuZXdFYXJQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudEVhclByb2plY3ROYW1lKQotCQkJCQl8fCAhbmV3UHJvamVjdFR5cGUuZXF1YWxzKGN1cnJlbnRQcm9qZWN0VHlwZSkKLQkJCQkJfHwgbmV3TmVlZEVhciAhPSBjdXJyZW50TmVlZEVhcikgewotCQkJCXNldENsaWVudFByb2plY3ROYW1lKG5ld1Byb2plY3ROYW1lKTsKLQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShuZXdFYXJQcm9qZWN0TmFtZSk7Ci0JCQkJc2V0Q2xpZW50TmVlZEVBUihuZXdOZWVkRWFyKTsKLQkJCQlzZXRDbGllbnRDb21wb25lbnRUeXBlKG5ld1Byb2plY3RUeXBlKTsJCQkJCi0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IChuZXcgVmFsaWRhdGlvblV0aWxzKCkpLmdldE5ld1ZhbGlkYXRpb25TdGF0ZSh2YWxpZGF0aW9uU3RhdGVfLCBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKTsKLQkJCQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0JCQl9Ci0JCQkKLQkJCS8qY2hlY2sgdG8gc2VlIGlmIHRleHQgaGFzIGNoYW5nZWQgZm9yIHByb2plY3Qgb3IgRUFSCi0JCQlpZiBzbywgcmVwYWludCBsaW5rcyAqLwotCQkJaWYgKCFuZXdQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudFByb2plY3ROYW1lKSkKLQkJCXsKLQkJCQloTGlua0NsaWVudFByb2plY3RfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja0l0KCk7Ci0JCQl9Ci0JCQlpZiAoIW5ld0VhclByb2plY3ROYW1lLmVxdWFscyhjdXJyZW50RWFyUHJvamVjdE5hbWUpKQotCQkJewotCQkJCWhMaW5rQ2xpZW50RUFSXy5wYWNrKHRydWUpOwotCQkJCXBhY2tJdCgpOwotCQkJfQotCQl9CQkKLQl9Ci0gIAotICBwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQpIHsKLQkgIGxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coY2xpZW50Q29udGV4dCwgZmFsc2UpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQsIGJvb2xlYW4gc2VsZWN0U2VydmVyRmlyc3QpCi0JewotCSAgICBUeXBlUnVudGltZVNlcnZlciBjdXJyZW50Q2xpZW50VFJTID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgICAgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZyByc3NkID0gbmV3IFJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2coc2hlbGxfLCAoYnl0ZSkxLCBnZXRUeXBlUnVudGltZVNlcnZlcigpLCAiMTQiKTsKLQkgICAgcnNzZC5zZXRTZWxlY3RTZXJ2ZXJGaXJzdChzZWxlY3RTZXJ2ZXJGaXJzdCk7Ci0JICAgIGludCBzdGF0dXMgPSByc3NkLm9wZW4oKTsKLQkJaWYgKHN0YXR1cyA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCVR5cGVSdW50aW1lU2VydmVyIG5ld0NsaWVudFRSUyA9IHJzc2QuZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsJCQkKLQkJCWlmICghY3VycmVudENsaWVudFRSUy5lcXVhbHMobmV3Q2xpZW50VFJTKSkKLQkJCXsKLQkJCQlzZXRUeXBlUnVudGltZVNlcnZlcihyc3NkLmdldFR5cGVSdW50aW1lU2VydmVyKCkpOwotCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSAobmV3IFZhbGlkYXRpb25VdGlscygpKS5nZXROZXdWYWxpZGF0aW9uU3RhdGUodmFsaWRhdGlvblN0YXRlXywgVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMpOwotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsgLy92YWxpZGF0ZSB0aGUgcGFnZQotCQkJfQotCQl9CQkKLQl9Ci0gIAotICAvL1ByaXZhdGUgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGNsaWVudFNjYWxlXyBzZXR0aW5nIGlzIGNoYW5nZWQKLSAgLy9pbnN0ZWFkIG9mIGNhbGxpbmcgY2xpZW50U2NhbGVfLnNldFNlbGVjdGlvbiBkaXJlY3RseS4KLSAgcHJpdmF0ZSB2b2lkIHNldENsaWVudFNjYWxlKGludCBzZXR0aW5nKQotICB7Ci0JICBjbGllbnRTY2FsZV8uc2V0U2VsZWN0aW9uKHNldHRpbmcpOwotCSAgY2xpZW50U2NhbGVTZXR0aW5nXyA9IHNldHRpbmc7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGluaXRJbWFnZVJlZ2lzdHJ5KCkKLQl7Ci0JCWltYWdlUmVnXyA9IG5ldyBJbWFnZVJlZ2lzdHJ5KERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCi0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18wLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18wKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18xLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18xKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18yLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18yKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18zLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18zKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR180LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR180KSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR181LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR181KSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR182LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR182KSk7Ci0JCQotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfQ0xJRU5UXzAsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX0NMSUVOVF8wKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfMSwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzEpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX0NMSUVOVF8yLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19DTElFTlRfMikpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfQ0xJRU5UXzMsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX0NMSUVOVF8zKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfNCwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzQpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX0NMSUVOVF81LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19DTElFTlRfNSkpOwkJCi0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfNiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzYpKTsKLQl9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0R3JhcGhpY3MoaW50IHNlbGVjdGlvbikKLSAgewotICAgICBTdHJpbmcgaWNvbkltYWdlID0gIiI7Ci0gICAgIFN0cmluZyB0b3BvbG9neUltYWdlID0gIiI7Ci0gICAgIAotCSAgc3dpdGNoIChzZWxlY3Rpb24pIHsKLQkgICAgY2FzZSBTY2VuYXJpb0NvbnRleHQuV1NfVEVTVDoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzA7Ci0JCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzA7Ci0JCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9URVNUKTsKLQkJCWJyZWFrOwotCSAgICBjYXNlIFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVDoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzE7Ci0JCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzE7Ci0JCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9SVU4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgU2NlbmFyaW9Db250ZXh0LldTX0lOU1RBTEw6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18yOwotCQkJdG9wb2xvZ3lJbWFnZT1HUkFQSElDX0NMSUVOVF8yOwotCQkJY2xpZW50U2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfSU5TVEFMTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMzsKLQkJCXRvcG9sb2d5SW1hZ2U9R1JBUEhJQ19DTElFTlRfMzsKLQkJCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFUExPWSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTY2VuYXJpb0NvbnRleHQuV1NfQVNTRU1CTEU6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR180OwotCQkJdG9wb2xvZ3lJbWFnZT1HUkFQSElDX0NMSUVOVF80OwotCQkJY2xpZW50U2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQVNTRU1CTEUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR181OwotCQkJdG9wb2xvZ3lJbWFnZT1HUkFQSElDX0NMSUVOVF81OwotCQkJY2xpZW50U2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVWRUxPUCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTY2VuYXJpb0NvbnRleHQuV1NfTk9ORToJCQkKLQkJCWlmICghY2xpZW50T25seV8pCi0JCQl7Ci0JCQkJaWYgKGVuYWJsZVByb3h5XykgIC8vaWYgc2VydmljZSBpcyBzdGFydCBvciB0ZXN0Li4uCi0JCQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzY7ICAKLQkJCQllbHNlCi0JCQkJCWljb25JbWFnZT1udWxsOwotCQkJCXRvcG9sb2d5SW1hZ2U9R1JBUEhJQ19DTElFTlRfNjsKLQkJCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCXNldENsaWVudFNjYWxlKFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsgLy8ibm8gc2VsZWN0aW9uIiBpcyBub3QgYWxsb3dlZC4uLm11c3QgZGV2ZWxvcCBjbGllbnQgQCBtaW5pbXVtCi0JCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfNTsKLQkJCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzU7CQkJCQotCQkJCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1ApOwkJCQotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQljbGllbnRTY2FsZV8uc2V0QmFja2dyb3VuZEltYWdlKGltYWdlUmVnXy5nZXQoaWNvbkltYWdlKSk7Ci0JCXRvcG9sb2d5U3BvdF8uc2V0SW1hZ2UoaW1hZ2VSZWdfLmdldCh0b3BvbG9neUltYWdlKSk7CQotICB9Ci0gIAotCXB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKQotCXsKLQkJcmV0dXJuIG9iamVjdFNlbGVjdGlvbl87CQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0gICAgICAgIG9iamVjdFNlbGVjdGlvbl8gPSBzZWxlY3Rpb247Ci0JfQotCQotICBwdWJsaWMgaW50IGdldENsaWVudEdlbmVyYXRpb24oKQotICB7Ci0JICByZXR1cm4gY2xpZW50U2NhbGVTZXR0aW5nXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50R2VuZXJhdGlvbihpbnQgdmFsdWUpCi0gIHsKLQkgIGlmIChjbGllbnRPbmx5XyAmJiB2YWx1ZSA9PSBTY2VuYXJpb0NvbnRleHQuV1NfTk9ORSkgewotCQkgIHZhbHVlID0gU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A7Ci0JCSAgc2V0RGV2ZWxvcENsaWVudCh0cnVlKTsKLQkgIH0KLQotCSAgc2V0Q2xpZW50U2NhbGUodmFsdWUpOwotCSAgCSAgCi0JICBzZXRHcmFwaGljcyh2YWx1ZSk7Ci0JICBzaG93U3VtbWFyeSh2YWx1ZSA8IFNjZW5hcmlvQ29udGV4dC5XU19OT05FKTsKLQkgIHVwZGF0ZUZpZWxkcyh2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotCSAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLQkgIHJldHVybiBwcm9qZWN0XzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSWQoKQotICB7Ci0JICAvLyBjYWxjdWxhdGUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgY2xpZW50UnVudGltZUlkIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3MuCi0JICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKGdldFR5cGVSdW50aW1lU2VydmVyKCksIGdldENsaWVudFByb2plY3ROYW1lKCksIGdldENsaWVudENvbXBvbmVudFR5cGUoKSk7ICAgCi0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50Q29tcG9uZW50VHlwZShTdHJpbmcgdHlwZSkKLSAgewotCSAgY2xpZW50Q29tcG9uZW50VHlwZV89IHR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudENvbXBvbmVudFR5cGUoKQotICB7Ci0JICByZXR1cm4gY2xpZW50Q29tcG9uZW50VHlwZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHByb2plY3ROYW1lXyA9IG5hbWU7ICAgICAgCi0JaExpbmtDbGllbnRQcm9qZWN0Xy5zZXRUZXh0KENMSUVOVF9QUk9KRUNUX1BSRUZJWCArICIgIiArIHByb2plY3ROYW1lXyk7CQotCWhMaW5rQ2xpZW50UHJvamVjdF8ucGFjayh0cnVlKTsgICAKLQlwYWNrSXQoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0TmFtZSgpCi0gIHsgIAotCSAgaWYgKHByb2plY3ROYW1lXyA9PSBudWxsKQotCQkgIHJldHVybiAiIjsKLQkgIHJldHVybiBwcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZWFyUHJvamVjdE5hbWVfID0gbmFtZTsgIAotICAgIHJlZnJlc2hFQVJMaW5rKCk7Ci0gICAJCSAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoRUFSTGluaygpCi0gIHsKLQkgIGhMaW5rQ2xpZW50RUFSXy5zZXRWaXNpYmxlKG5lZWRFYXJfICYmIGdldEdlbmVyYXRlUHJveHkoKSk7Ci0JICBpZiAobmVlZEVhcl8pCi0JICB7ICAgIAkKLQkJICBoTGlua0NsaWVudEVBUl8uc2V0VGV4dChDTElFTlRfRUFSX1BSRUZJWCArICIgIiArIGVhclByb2plY3ROYW1lXyk7Ci0JCSAgaExpbmtDbGllbnRFQVJfLnBhY2sodHJ1ZSk7IAotCQkgIHBhY2tJdCgpOwotCSAgfSAgCi0gIH0KLQkgICAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKQotICB7Ci0JICBpZiAoZWFyUHJvamVjdE5hbWVfID09IG51bGwpCi0JCSAgcmV0dXJuICIiOwotICAgICByZXR1cm4gZWFyUHJvamVjdE5hbWVfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBiKQotICB7Ci0gICAgIG5lZWRFYXJfID0gYjsKLSAgICAgcmVmcmVzaEVBUkxpbmsoKTsKLSAgfSAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldENsaWVudE5lZWRFQVIoKQotICB7Ci0gICAgIHJldHVybiBuZWVkRWFyXzsKLSAgfSAKLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0JewotCQlyZXR1cm4gcGFyc2VyXzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyKQotCXsKLQkJcGFyc2VyXyA9IHBhcnNlcjsJCQotCX0KLSAgCi0gICAgLy9mb3IgdGhlIHB1cnBvc2VzIG9mIGRpc2FibGluZyB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlcyBkaWFsb2cKLQlwdWJsaWMgdm9pZCBkaXNhYmxlTm9uUHJlZmVyZW5jZVdpZGdldHMoKQotCXsKLQkJaWYgKGhDb21wQ2xpZW50XyAhPSBudWxsKQotCQl7Ci0JCQloQ29tcENsaWVudF8uc2V0VmlzaWJsZShmYWxzZSk7CQkJCi0JCX0KLQl9Ci0JCi0JcHVibGljIGludCBnZXRWYWxpZGF0aW9uU3RhdGUoKQotCXsKLQkJcmV0dXJuIHZhbGlkYXRpb25TdGF0ZV87Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25TdGF0ZShpbnQgc3RhdGUpCi0JewotCQl2YWxpZGF0aW9uU3RhdGVfID0gc3RhdGU7Ci0JfQotCQkKLQlwdWJsaWMgSVN0YXR1cyBjaGVja01pc3NpbmdGaWVsZFN0YXR1cygpIHsKLQotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCVN0cmluZyBydW50aW1lSWQgPSBnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCk7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9IGdldENsaWVudFByb2plY3ROYW1lKCk7Ci0JCWJvb2xlYW4gbmVlZEVhciA9IGdldENsaWVudE5lZWRFQVIoKTsKLQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIHByb2plY3RUeXBlSWQgPSBnZXRDbGllbnRDb21wb25lbnRUeXBlKCk7Ci0JCUlTdGF0dXMgbWlzc2luZ0ZpZWxkU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tNaXNzaW5nRmllbGRTdGF0dXModmFsaWRhdGlvblN0YXRlXywgbnVsbCwgbnVsbCwgcnVudGltZUlkLCBzZXJ2ZXJJZCwKLQkJCQlwcm9qZWN0TmFtZSwgbmVlZEVhciwgZWFyUHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIHRydWUpOwotCQlyZXR1cm4gbWlzc2luZ0ZpZWxkU3RhdHVzOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGNoZWNrRXJyb3JTdGF0dXMoKSB7Ci0KLQkJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotCQlTdHJpbmcgcnVudGltZUlkID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRSdW50aW1lSWQoKTsKLQkJU3RyaW5nIHNlcnZlcklkID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpOwotCQlTdHJpbmcgc2VydmVySW5zdGFuY2VJZCA9IGdldFR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlTdHJpbmcgdHlwZUlkID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRUeXBlSWQoKTsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gZ2V0Q2xpZW50UHJvamVjdE5hbWUoKTsKLQkJYm9vbGVhbiBuZWVkRWFyID0gZ2V0Q2xpZW50TmVlZEVBUigpOwotCQlTdHJpbmcgZWFyUHJvamVjdE5hbWUgPSBnZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgcHJvamVjdFR5cGVJZCA9IGdldENsaWVudENvbXBvbmVudFR5cGUoKTsKLQkJLy8gRGVmZWN0IDIxNTA4NCAtIG5vIG5lZWQgdG8gcGFzcyBpbml0aWFsIHByb2plY3QgZm9yIGNsaWVudCBzY2VuYXJpbwotCQlJU3RhdHVzIHBvc3NpYmxlRXJyb3JTdGF0dXMgPSB2YWxVdGlscy5jaGVja0Vycm9yU3RhdHVzKHZhbGlkYXRpb25TdGF0ZV8sIHR5cGVJZCwgcnVudGltZUlkLCBzZXJ2ZXJJZCwKLQkJCQlzZXJ2ZXJJbnN0YW5jZUlkLCBwcm9qZWN0TmFtZSwiIiwgbmVlZEVhciwgZWFyUHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIHRydWUpOwotCQlyZXR1cm4gcG9zc2libGVFcnJvclN0YXR1czsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBjaGVja1dhcm5pbmdTdGF0dXMoKSB7Ci0JCVZhbGlkYXRpb25VdGlscyB2YWxVdGlscyA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLQotCQlpbnQgc2NhbGVTZXR0aW5nID0gZ2V0Q2xpZW50R2VuZXJhdGlvbigpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCk7Ci0JCUlTdGF0dXMgd2FybmluZ1N0YXR1cyA9IHZhbFV0aWxzLmNoZWNrV2FybmluZ1N0YXR1cyh2YWxpZGF0aW9uU3RhdGVfLCBzY2FsZVNldHRpbmcsIHNlcnZlcklkLCBnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlckluc3RhbmNlSWQoKSwgdHJ1ZSk7Ci0JCXJldHVybiB3YXJuaW5nU3RhdHVzOwotCX0JCi0JCi0JCi0gIHByaXZhdGUgY2xhc3MgU2NhbGVTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0JewotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkgICAgaW50IG9sZENsaWVudFNjYWxlU2V0dGluZyA9IGNsaWVudFNjYWxlU2V0dGluZ187Ci0JCQkgICAgCQkJCQotCQkJCWludCBzZWxlY3Rpb24gPSBjbGllbnRTY2FsZV8uZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJCi0JCQkJLy9XQVJOSU5HOiBObyBzY2FsZSBjaGFuZ2Ugc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgdGhlIGxpbmUgYmVsb3csICdzZWxlY3Rpb24nIG1pZ2h0IG5vdCBoYXZlIHRoZSBjb3JyZWN0IHZhbHVlCi0JCQkJc2V0Q2xpZW50R2VuZXJhdGlvbihzZWxlY3Rpb24pOwotCQkJCQotCQkJCS8vV2hlbiBjbGllbnQgc2xpZGVyIG1vdmVzIG91dCBvZiB0aGUgIldTX05PTkUiIHN0YXRlLCBWQUxJREFURV9BTEwgc2hvdWxkIGJlIGRvbmUuIAotCQkJCS8vT3RoZXJ3aXNlLCBWQUxJREFURV9TQ0FMRV9DSEFOR0VTIGlzIHN1ZmZpY2llbnQuCi0JCQkJaWYgKG9sZENsaWVudFNjYWxlU2V0dGluZz09U2NlbmFyaW9Db250ZXh0LldTX05PTkUgJiYgY2xpZW50U2NhbGVTZXR0aW5nXyE9U2NlbmFyaW9Db250ZXh0LldTX05PTkUpCi0JCQkJewotCQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJdmFsaWRhdGlvblN0YXRlXyA9IChuZXcgVmFsaWRhdGlvblV0aWxzKCkpLmdldE5ld1ZhbGlkYXRpb25TdGF0ZSh2YWxpZGF0aW9uU3RhdGVfLCBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfU0NBTEVfQ0hBTkdFUyk7CQotCQkJCX0JCQkJCi0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOyAvL3ZhbGlkYXRlIHRoZSBwYWdlCi0JCQl9Ci0JCQotCi0JCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQl3aWRnZXRTZWxlY3RlZChlKTsKLQkJfQotCX0gCi0gIAotICBwcml2YXRlIHZvaWQgcmVmcmVzaFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKQotCXsJCQotCQkvL25ldyB1cCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLQkJQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNsaWVudFJURGVmYXVsdENtZCA9IG5ldyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKTsKLQkJCi0JCSAgLy9jYWxsIHNldHRlcnMgb2YgbmV3IGRlZmF1bHRpbmcgY29tbWFuZDoKLQkJICBjbGllbnRSVERlZmF1bHRDbWQuc2V0Q2xpZW50SW5pdGlhbFNlbGVjdGlvbihnZXRPYmplY3RTZWxlY3Rpb24oKSk7Ci0JCSAgY2xpZW50UlREZWZhdWx0Q21kLnNldENsaWVudEluaXRpYWxQcm9qZWN0KGdldFByb2plY3QoKSk7CSAgICAgIAotCSAgICAgIGNsaWVudFJURGVmYXVsdENtZC5zZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcihnZXRUeXBlUnVudGltZVNlcnZlcigpKTsKLQkJICBjbGllbnRSVERlZmF1bHRDbWQuc2V0V2ViU2VydmljZXNQYXJzZXIoZ2V0V2ViU2VydmljZXNQYXJzZXIoKSk7ICAgICAKLQkgICAgICBjbGllbnRSVERlZmF1bHRDbWQuc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKSk7Ci0JCSAgCQkgIAotCQkgIGNsaWVudFJURGVmYXVsdENtZC5leGVjdXRlKG51bGwsIG51bGwpOwotCQkgIAotCQkgIC8vcGVyZm9ybSBtYXBwaW5ncyBmcm9tIHRoZSBkZWZhdWx0aW5nIGNvbW1hbmQgdG8gdGhlIHByb2plY3Qgc2V0dGluZ3MuLi4JCi0JCSAgc2V0Q2xpZW50UHJvamVjdE5hbWUoY2xpZW50UlREZWZhdWx0Q21kLmdldENsaWVudFByb2plY3ROYW1lKCkpOwotCQkgIHNldENsaWVudEVhclByb2plY3ROYW1lKGNsaWVudFJURGVmYXVsdENtZC5nZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpKTsKLQkJICBzZXRDbGllbnRDb21wb25lbnRUeXBlKGNsaWVudFJURGVmYXVsdENtZC5nZXRDbGllbnRDb21wb25lbnRUeXBlKCkpOwotCQkgIHNldFR5cGVSdW50aW1lU2VydmVyKGNsaWVudFJURGVmYXVsdENtZC5nZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpKTsKLSAgICAgICAgICBzZXRDbGllbnROZWVkRUFSKGNsaWVudFJURGVmYXVsdENtZC5nZXRDbGllbnROZWVkRUFSKCkpOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ2xpZW50V2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ2xpZW50V2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjFiODI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NsaWVudFdpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDQgMTI0NDA4ICAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwMjA0IDEyMTYwNSAgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjIxIDExOTExMSAgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjIzIDEyOTAyMCAgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDA2IDEzNTM1MCAgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MDcgMTM1NDE1ICAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjUgMTM4MDUyICAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUxNyAxNDE4ODAgICAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTMwICAgMTQ0MzU4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUzMCAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MTcgICAxNDYzMzIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgyMSAgIDE1MzgzMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWxsb3cgdGhlIFdlYiBTZXJ2aWNlIFRlc3QgZXh0ZW5zaW9uIHBvaW50IHRvIHNwZWNpZnkgdGhlIHN1cHBvcnRlZCBjbGllbnQgcnVudGltZQotICogMjAwNjA4MjUgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MDIgICAxODAzMDQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzEwMzEgICAxNDA1MTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uR2V0TW9uaXRvckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5DaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLkVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkZpbmlzaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uU2NlbmFyaW9DbGVhbnVwQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uLkNsaWVudFJvb3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uLlByZUNsaWVudERldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudFdpemFyZFdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLldTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hEZWZhdWx0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkZpbmlzaFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LlRlc3REZWZhdWx0aW5nRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNlbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkFzc2VtYmxlQ2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGVwbG95Q2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGV2ZWxvcENsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkluc3RhbGxDbGllbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5SdW5DbGllbnRGcmFnbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgQ2xpZW50V2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17ICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZXR1cm4gbmV3IENsaWVudFJvb3RDb21tYW5kRnJhZ21lbnQoKTsgIAotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsgCi0JICAvL2p2aCBtYXBwaW5nIGZvciBpbml0aWFsc2VsZWN0aW9uPz8/PwotCSAgCi0gICAgLy8gQmVmb3JlIENsaWVudFdpemFyZFdpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyApOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRHZW5lcmF0aW9uIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICAKLSAgICAvLyBBZnRlciBDbGllbnRXaXphcmRXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiU3RhcnRDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLQotICAgIC8vanZoIGFkZGVkLi4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJQcm9qZWN0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAgICAgICAKLSAgICAvL2p2aCAtIHJlcm91dGVkIHRoZSBkZWZhdWx0aW5nIGNvbW1hbmQgdG8gdGhlIENsaWVudFdpemFyZFdpZGdldCAKLSAgICAvLyBCZWZvcmUgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgCi0gICAgLy9qdmggLSByZXJvdXRlZCBmcm9tIENsaWVudFdpemFyZFdpZGdldCBpbnN0ZWFkIG9mIHJ1bnRpbWVzZXJ2ZXJ3aWRnZXQtIGFkZCBnZXR0ZXJzIHRvIENsaWVudFdpemFyZFdpZGdldCBmb3IgdGhlbQotICAgIC8vIEFmdGVyIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRSdW50aW1lSWQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgCi0gICAgLy8gQmVmb3JlIFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyCi0gICAgLy8ganZoIC0gcmVyb3V0ZWQgdGhlc2UgdG8gQ2xpZW50V2l6YXJkV2lkZ2V0ICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlVVJJIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNvbXBvbmVudE5hbWUiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MgKTsKLSAgICAKLS8qICAgIC8vIEFmdGVyIFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyCi0gICAgLy9qdmggLSByZXJvdXRlIHRoZXNlIGZyb20gdGhlIGRpYWxvZyB0byBDbGllbnRXaXphcmRXaWRnZXQgLSBjYWxsIHNldHRlcnMgb24gdGhlIG90aGVyIGRpYWxvZ3MuLi4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlci5jbGFzcywgIldzZGxVUkkiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlci5jbGFzcywgIlByb2plY3QiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIuY2xhc3MsICJDb21wb25lbnROYW1lIiwgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotKi8gICAgCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IixUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzKTsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0JCi0gICAgLy8gQmVmb3JlIENsaWVudCBUZXN0IHdpZGdldC4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2FuUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdEVBUiIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotCi0gICAgLy8gQWZ0ZXIgdGhlIGNsaWVudCB0ZXN0IHdpZGdldCAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlNhbXBsZVByb2plY3QiLEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiUnVuVGVzdENsaWVudCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIkNhblJ1blRlc3RDbGllbnQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJUZXN0SUQiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIklzVGVzdFdpZGdldCIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgICAgIAotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkNsaWVudFdpemFyZFdpZGdldCIsIAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfUFJPSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfQ0xJRU5ULAotCQkJCSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkJCSAgICAgICAgICB7Ci0JCQkJICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRXaXphcmRXaWRnZXQoKTsKLQkJCQkgICAgICAgICAgfQotCQkJCSAgICAgICAgfSApOwotICAgIAotICAgIC8vanZoCi0gICAgLyp3aWRnZXRSZWdpc3RyeS5hZGQoICJDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX0NMSUVOVF9SVU5USU1FX1NFTEVDVElPTiwKLQkJCQkJCW5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotCQkJCQkJICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJCQkJCSAgewotCQkJCQkJICAgIHJldHVybiBuZXcgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldCgpOwotCQkJCQkJICB9Ci0JCQkJCQl9ICk7Ki8KLSAgICAKLSAgICAvL2p2aAotICAgIC8qd2lkZ2V0UmVnaXN0cnkuYWRkKCAiV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NFTEVDVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU0VMRUNUSU9OLAotCQkgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0JCSAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkgICAgICAgICAgICAgICAgICB7Ci0JCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcigpOwotCQkgICAgICAgICAgICAgICAgICB9Ci0JCSAgICAgICAgICAgICAgICB9ICk7Ki8KLSAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJDbGllbnRUZXN0V2lkZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19TQU1QTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NBTVBMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2xpZW50VGVzdFdpZGdldCgpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgQ2xpZW50Um9vdENvbW1hbmRGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLSAgewotICAgIHB1YmxpYyBDbGllbnRSb290Q29tbWFuZEZyYWdtZW50KCkKLSAgICB7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICAKLSAgICAgIC8vYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDaGVja0Zvck1pc3NpbmdGaWxlcygpLCAiIiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kKHRydWUpLCAiIiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOyAvL2p2aCBtb3ZlZCB0aGlzIHVwCi0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOyAgLy9qdmggbW92ZWQgdGhpcyB1cCAgICAgIAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoICJDbGllbnRXaXphcmRXaWRnZXQiICkgKTsKLQkgIC8vYWRkKCBuZXcgVGVzdENvbW1hbmRGYWN0b3J5RnJhZ21lbnQoKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgCi0gICAgICAvL2FkZCggbmV3IFRlc3RDb21tYW5kRmFjdG9yeUZyYWdtZW50MigpICk7Ci0gICAgICAvL2FkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoIHRydWUgKSwgIiIpKTsKLSAgICAgIC8vYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ2xpZW50U2VydmVyRGVwbG95YWJsZUNvbmZpZ0NvbW1hbmQoZmFsc2UpLCAiIikpOyAvL05vdGU6IGFkZGVkIGhlcmUgZm9yIGNsaWVudCAgICAgIAotICAgICAgLy9hZGQoIG5ldyBDbGllbnRFeHRlbnNpb25GcmFnbWVudCgpICk7Ci0JICBhZGQoIG5ldyBDbGllbnRSb290RnJhZ21lbnQoKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kKCksICIiICkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KG5ldyBHZXRNb25pdG9yQ29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IFRlc3REZWZhdWx0aW5nRnJhZ21lbnQoKSwiIikpOwotICAgICAgYWRkKCBuZXcgQ2xpZW50VGVzdEZyYWdtZW50KCAiQ2xpZW50VGVzdFdpZGdldCIpICk7IAotICAgICAgYWRkKG5ldyBGaW5pc2hGcmFnbWVudCgpKTsKLSAgICAgIAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIC8vTWFwIFNlbGVjdGlvbkNvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbEluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLQotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBHZXRNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZCAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW50aW1lMkNsaWVudFR5cGVzIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBNYXAgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxQcm9qZWN0IiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlVVJJIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIG5ldyBFY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbldTSUwiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2lsVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9qdmggLSByZXJvdXRlZCB0aGVzZSB0byB0aGUgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VVUkkiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIG5ldyBFY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb21wb25lbnROYW1lIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kCi0gICAgICAvL2p2aCAtIHJlcm91dGVkIHRoZXNlIGZyb20gQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBHZXRNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBHZXRNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmNsYXNzKTsKLQotICAgICAgCi0gICAgICAvL2p2aCAtIGFkZCBjb2RlIHRvIHdpZGdldCBzbyB0aGF0IHRoZSBhcHByb3ByaWF0ZSBzZXRzIGhhcHBlbiBhbmQgZGVmYXVsdGluZyBvY2N1cnMgYWdhaW4gYWZ0ZXIgb2JqZWN0IHNlbGVjdGlvbgotICAgICAgLypkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsUHJvamVjdCIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyovCi0gICAgICAKLQkgIC8vIFNldHVwIHRoZSBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIG51bGwpOyAgICAgIAotCi0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7CQkJCQkJCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRKMkVFVmVyc2lvbiIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RUeXBlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGVUeXBlIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICAKLQkJCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZUNsaWVudCIsIG51bGwgKTsKLQkJCQotICAgICAgLy8gTWFwIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQuY2xhc3MpOwotICAgICAgICAgICAKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlByb3h5QmVhbiIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyApOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzLCJDbGllbnRFYXJDb21wb25lbnROYW1lIiwgbnVsbCk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlciIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7IAotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5RW5kcG9pbnQiLCBHZXRNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ2FuR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ2FuR2VuZXJhdGVQcm94eSIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2V0RW5kcG9pbnRNZXRob2QiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotCi0JICAKLSAgICAgIC8vIEdldE1vbml0b3JDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZXRNb25pdG9yQ29tbWFuZC5jbGFzcywgIkVuZHBvaW50cyIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCi0gICAgICAvLyBNQVAgcG9zdCBzZXJ2ZXIgY29uZmlnIGNhbGwgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRTZXJ2ZXJJbnN0YW5jZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFeGlzdGluZ1NlcnZlcklkIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5DbGllbnRUZXN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgICAgICAgCi0gICAgICAvL01hcHBpbmdzIHRvIGVuYWJsZSBwZWVrLWFoZWFkIGZvciBQYWdlIDMgb2YgdGhlIGNsaWVudCB3aXphcmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzLCAiUHJvamVjdCIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzLCAiUHJvamVjdCIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcywgIlByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXIiLCBudWxsICk7ICAgICAgCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9Db25maWdDbGllbnRIYW5kbGVyc1dpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ0NsaWVudEhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmIzZmE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ0NsaWVudEhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAgIDEzNDkxMyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKiAyMDA2MDUxNyAgIDE0MjMzOSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5HZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuT3BlbkphdmFFZGl0b3JDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotLyoqCi0gKiAKLSAqIEhhbmRsZXIgQ29uZmlndXJhdGlvbiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlCi0gKiBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIENvbmZpZ0NsaWVudEhhbmRsZXJzV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nIAotewotICAKLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgewotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0IiwgCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX0NMSUVOVF9IRExSX0NPTkZJRywgCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfQ0xJRU5UX0hETFJfQ09ORklHLCAKLSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpIHsKLQotICAgICAgCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKSB7Ci0gICAgICAJICByZXR1cm4gbmV3IENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQoKTsKLSAgICAgIAl9Ci0gICAgfSk7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIHsKLSAgICAKLSAgICAvLyB3aWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJIYW5kbGVyU2VydmljZVJlZkhvbGRlciIsIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJTZXJ2aWNlUmVmTmFtZSIsIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIG91dHB1dAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkNsaWVudFByb2plY3QiLCBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIiwgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBnZW4gc2tlbGV0b24KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJIYW5kbGVyU2VydmljZVJlZkhvbGRlciIsIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLQotICAgIC8vIG9wZW4gaW4gZWRpdG9yCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzLCJQcm9qZWN0IiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIkNsYXNzTmFtZXMiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIE9wZW5KYXZhRWRpdG9yQ29tbWFuZC5jbGFzcywiSXNFbmFibGVkIiwgbnVsbCk7Ci0gICAgCi0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpIHsKLQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpIHsKLQotICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKSB7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRIYW5kbGVyc0NvbmZpZ0NvbW1hbmRGcmFnbWVudCgpOwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIENsaWVudEhhbmRsZXJzQ29uZmlnQ29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudHsKLSAgIAotICAgIHB1YmxpYyBDbGllbnRIYW5kbGVyc0NvbmZpZ0NvbW1hbmRGcmFnbWVudCgpCi0gICAgewotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiICkpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoICJDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0IiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IE9wZW5KYXZhRWRpdG9yQ29tbWFuZCgpLCAiIikpOwotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIldzU2VydmljZVJlZnMiLCBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiQ2xpZW50UHJvamVjdCIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgfQotIAotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlnU2VydmljZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlnU2VydmljZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2I3YzdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ1NlcnZpY2VIYW5kbGVyc1dpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5HZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuT3BlbkphdmFFZGl0b3JDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotLyoqCi0gKiAKLSAqIEhhbmRsZXIgQ29uZmlndXJhdGlvbiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlCi0gKiBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1dpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZyB7Ci0gIAotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSB7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IiwgCi0gICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1NFUlZJQ0VfSERMUl9DT05GSUcsIAotICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1NFUlZJQ0VfSERMUl9DT05GSUcsIAotICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgewotCi0gICAgICAJcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIHsKLSAgICAgIAkgIHJldHVybiBuZXcgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQoKTsKLSAgICAgIAl9Ci0gICAgfSk7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIHsKLSAgICAKLQkvLyB3aWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiRGVzY3JpcHRpb25OYW1lIiwgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIG91dHB1dCBjb21tYW5kIChhZGRzL3JlbW92ZXMgZnJvbSBtb2RlbCkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNNdWx0aXBsZVNlbGVjdGlvbiIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJXc2RkUmVzb3VyY2UiLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsgICAgCi0KLSAgICAvLyBnZW4gc2tlbGV0b24gY29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcyk7Ci0gCi0gICAgLy8gb3BlbiBKYXZhIGVkaXRvciAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzLCJQcm9qZWN0IiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIkNsYXNzTmFtZXMiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MsIklzRW5hYmxlZCIsIG51bGwpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSB7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKSB7Ci0KLSAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkgewotCi0gICAgICAgIHJldHVybiBuZXcgU2VydmljZUhhbmRsZXJzQ29uZmlnQ29tbWFuZEZyYWdtZW50KCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgU2VydmljZUhhbmRsZXJzQ29uZmlnQ29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudHsKLSAgIAotICAgIHB1YmxpYyBTZXJ2aWNlSGFuZGxlcnNDb25maWdDb21tYW5kRnJhZ21lbnQoKQotICAgIHsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggIkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBPcGVuSmF2YUVkaXRvckNvbW1hbmQoKSwgIiIpKTsKLQotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGRSZXNvdXJjZSIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAKLSAgICB9Ci0gCi0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9Db25maWd1cmVIYW5kbGVyc1dpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzk2OWI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5PcGVuSmF2YUVkaXRvckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5Db25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5IYW5kbGVyc0RlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotcHVibGljIGNsYXNzIENvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nIHsKLQotCi0gIHB1YmxpYyBDb25maWd1cmVIYW5kbGVyc1dpZGdldEJpbmRpbmcoKSB7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKSB7Ci0KLSAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IEhhbmRsZXJzQ29tbWFuZEZyYWdtZW50KCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkgewotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSwKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIHsKLQotICAgIC8vIE1hcCBjbGllbnQtc2lkZSB3aWRnZXRzIHRvIGNvbW1hbmRzCi0gICAgLy8gd2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIiLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJJc011bHRpcGxlU2VsZWN0aW9uIiwgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiU2VydmljZVJlZk5hbWUiLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICAKLSAgICAvLyBvdXRwdXQKLQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIiwgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBnZW4gc2tlbGV0b24KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJIYW5kbGVyU2VydmljZVJlZkhvbGRlciIsIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLQotICAgIC8vIG9wZW4gaW4gZWRpdG9yCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzLCJJc0VuYWJsZWQiLCBudWxsKTsKLSAgCi0gCi0gICAgLy8gTWFwIHNlcnZpY2Utc2lkZSB3aWRnZXRzIHRvIGNvbW1hbmRzCi0gICAgLy8gd2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMiLCBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc011bHRpcGxlU2VsZWN0aW9uIiwgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkRlc2NyaXB0aW9uTmFtZSIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICAKLSAgICAvLyBvdXRwdXQgY29tbWFuZCAoYWRkcy9yZW1vdmVzIGZyb20gbW9kZWwpCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMiLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLQotICAgIC8vIGdlbiBza2VsZXRvbiBjb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMiLCBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLSAKLSAgICAvLyBvcGVuIEphdmEgZWRpdG9yICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzLCJJc0VuYWJsZWQiLCBudWxsKTsKLQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgewotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldCIsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1NFUlZJQ0VfSERMUl9DT05GSUcsIAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19TRVJWSUNFX0hETFJfQ09ORklHLCBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgewotCi0gICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIkNvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQiLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9DTElFTlRfSERMUl9DT05GSUcsIAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19DTElFTlRfSERMUl9DT05GSUcsIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSB7Ci0KLSAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldCgpOwotICAgICAgfQotICAgIH0pOwotCi0gIH0KLQotICBwcml2YXRlIGNsYXNzIEhhbmRsZXJzQ29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudCB7Ci0KLSAgICBwdWJsaWMgSGFuZGxlcnNDb21tYW5kRnJhZ21lbnQoKSB7Ci0KLSAgICAgIGFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IEhhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLQotICAgICAgYWRkKG5ldyBTZXJ2aWNlSGFuZGxlcnNGcmFnbWVudCgpKTsKLSAgICAgIGFkZChuZXcgQ2xpZW50SGFuZGxlcnNGcmFnbWVudCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgewotCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIEhhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhIYW5kbGVyc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNDbGllbnRIYW5kbGVyIiwgQ2xpZW50SGFuZGxlcnNGcmFnbWVudC5jbGFzcywgIkNsaWVudEhhbmRsZXJzRW5hYmxlZCIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIklzU2VydmljZUhhbmRsZXIiLCBTZXJ2aWNlSGFuZGxlcnNGcmFnbWVudC5jbGFzcywgIlNlcnZpY2VIYW5kbGVyc0VuYWJsZWQiLCBudWxsKTsKLQotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSXNNdWx0aXBsZVNlbGVjdGlvbiIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIlByb2plY3QiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzLCJDbGFzc05hbWVzIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzKTsKLSAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc011bHRpcGxlU2VsZWN0aW9uIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiV3NkZFJlc291cmNlIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIlByb2plY3QiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzLCJDbGFzc05hbWVzIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzKTsgICAgICAKLQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSB7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDbGllbnRIYW5kbGVyc0ZyYWdtZW50IGV4dGVuZHMgQm9vbGVhbkZyYWdtZW50IHsKLQotICAgIGJvb2xlYW4gaXNDbGllbnRfID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgQ2xpZW50SGFuZGxlcnNGcmFnbWVudCgpIHsKLSAgICAgIHNldENvbmRpdGlvbihuZXcgQ29uZGl0aW9uKCkgewotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkgewotICAgICAgICAgIHJldHVybiBpc0NsaWVudF87Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgICBTZXF1ZW5jZUZyYWdtZW50IGNsaWVudEhhbmRsZXJzUm9vdEZyYWdtZW50ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLQotICAgICAgY2xpZW50SGFuZGxlcnNSb290RnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotCi0gICAgICBjbGllbnRIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCJDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0IikpOwotICAgICAgY2xpZW50SGFuZGxlcnNSb290RnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiKSk7Ci0gICAgICBjbGllbnRIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQoKSwgIiIpKTsKLQotICAgICAgc2V0VHJ1ZUZyYWdtZW50KGNsaWVudEhhbmRsZXJzUm9vdEZyYWdtZW50KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDbGllbnRIYW5kbGVyc0VuYWJsZWQoYm9vbGVhbiBpc0NsaWVudCkgewotICAgICAgaXNDbGllbnRfID0gaXNDbGllbnQ7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAobm9uLUphdmFkb2MpCi0gICAgICogCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSB7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICB9Ci0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgU2VydmljZUhhbmRsZXJzRnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQgewotCi0gICAgYm9vbGVhbiBpc1NlcnZpY2VfID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgU2VydmljZUhhbmRsZXJzRnJhZ21lbnQoKSB7Ci0gICAgICBzZXRDb25kaXRpb24obmV3IENvbmRpdGlvbigpIHsKLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpIHsKLSAgICAgICAgICByZXR1cm4gaXNTZXJ2aWNlXzsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICAgIFNlcXVlbmNlRnJhZ21lbnQgc2VydmljZUhhbmRsZXJzUm9vdEZyYWdtZW50ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgIHNlcnZpY2VIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotCi0gICAgICBTZXF1ZW5jZUZyYWdtZW50IHNlcnZpY2VIYW5kbGVyc0ZyYWdtZW50ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgIHNlcnZpY2VIYW5kbGVyc0ZyYWdtZW50LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IikpOwotICAgICAgc2VydmljZUhhbmRsZXJzRnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIikpOwotICAgICAgc2VydmljZUhhbmRsZXJzRnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kKCksICIiKSk7Ci0KLSAgICAgIHNlcnZpY2VIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQoc2VydmljZUhhbmRsZXJzRnJhZ21lbnQpOwotCi0gICAgICBzZXRUcnVlRnJhZ21lbnQoc2VydmljZUhhbmRsZXJzUm9vdEZyYWdtZW50KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSGFuZGxlcnNFbmFibGVkKGJvb2xlYW4gaXNTZXJ2aWNlKSB7Ci0gICAgICBpc1NlcnZpY2VfID0gaXNTZXJ2aWNlOwotICAgIH0KLQotICAgIC8qCi0gICAgICogKG5vbi1KYXZhZG9jKQotICAgICAqIAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgewotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkZFJlc291cmNlIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICB9Ci0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0dlblNhbXBsZVdpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0dlblNhbXBsZVdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMzNTBlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9HZW5TYW1wbGVXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MTcgICAxNDYzMzIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDcwNTE2ICAgMTg2MjMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcwODE1ICAgMTk5NjI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNSAgIDE4NDc2MSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDMzMSAgIDIyNDk1MyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDQxNSAgIDIyNzIzNyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5jb21tb24uSjJFRVZlcnNpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuc2VydmVydGFyZ2V0LklTZXJ2ZXJUYXJnZXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5KYXZhRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5BZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZVNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLkVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkZpbmlzaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLldTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hEZWZhdWx0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkZpbmlzaFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LlRlc3REZWZhdWx0aW5nRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5UZXN0V2ViU2VydmljZUNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTdGF0ZTsKLQotCi1wdWJsaWMgY2xhc3MgR2VuU2FtcGxlV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17ICAKLQotCQotCQotLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZXR1cm4gbmV3IEdlblNhbXBsZVJvb3RDb21tYW5kRnJhZ21lbnQoKTsgIAotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldExlZ2l0VGVzdEZhY2lsaXR5KCkKLSAgewotICAgCVNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCkuY29weSgpOwotICAJU3RyaW5nW10gdGVzdFR5cGVzID0gc2NlbmFyaW9Db250ZXh0LmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsJICAKLSAgCUxpc3QgbmV3VGVzdFR5cGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLSAgCWZvcihpbnQgaSA9IDA7aTx0ZXN0VHlwZXMubGVuZ3RoO2krKyl7Ci0gIAkJV2ViU2VydmljZVRlc3RFeHRlbnNpb24gZXh0ZW5zaW9uID0KLSAgCQkJKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCkKLSAgCQkJLmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKHRlc3RUeXBlc1tpXSk7Ci0JCSAgCi0gIAkJaWYoZXh0ZW5zaW9uLnRlc3RKYXZhUHJveHkoKSl7Ci0gIAkJCWJvb2xlYW4gZGVmYXVsdEpheHJwYyA9IGV4dGVuc2lvbi5pc0RlZmF1bHRKQVhSUEMoKTsKLSAgCQkJaWYoZGVmYXVsdEpheHJwYyl7Ci0gIAkJCQluZXdUZXN0VHlwZXMuYWRkKHRlc3RUeXBlc1tpXSk7IAotICAgIAkJCX0KLSAgCQl9Ci0gIAl9CQotICAJU3RyaW5nW10gdGVtcEFycmF5ID0gbmV3IFN0cmluZ1tuZXdUZXN0VHlwZXMuc2l6ZSgpXTsKLSAgCXJldHVybiBuZXcgU2VsZWN0aW9uTGlzdCgoU3RyaW5nW10pIG5ld1Rlc3RUeXBlcy50b0FycmF5KHRlbXBBcnJheSksIDApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7ICAgICAgICAgICAgICAgICAgICAKLSAgICAvLyBCZWZvcmUgQ2xpZW50IFRlc3Qgd2lkZ2V0LgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIkNhblJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3QiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkpzcEZvbGRlciIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotCi0gICAgLy8gQWZ0ZXIgdGhlIGNsaWVudCB0ZXN0IHdpZGdldCAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIkpzcEZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJUZXN0SUQiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIklzVGVzdFdpZGdldCIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgICAgICAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJDbGllbnRUZXN0V2lkZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19TQU1QTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NBTVBMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2xpZW50VGVzdFdpZGdldCgpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi0gIHsKLSAgICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0JcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBwcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgIG1vZHVsZV87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBlYXJQcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhcl87Ci0JcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50XzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHdzZGxVUklfOwotCXByaXZhdGUgYm9vbGVhbiBjYW5SdW5UZXN0Q2xpZW50XzsKLSAgICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLQl7ICAgIAotCQlJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwkKLQkgIAotCSAgICAvLyBTcGxpdCB1cCB0aGUgcHJvamVjdCBhbmQgbW9kdWxlCi0JICAgIGludCBpbmRleCA9IG1vZHVsZV8uaW5kZXhPZigiLyIpOwotCSAgICBpZiAoaW5kZXghPS0xKXsKLQkgICAgCXByb2plY3RfID0gbW9kdWxlXy5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIAltb2R1bGVfID0gbW9kdWxlXy5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0JICAgIH0KLQotCSAgICAKLQkgICAgaWYgKGVhcl8hPW51bGwgJiYgZWFyXy5sZW5ndGgoKT4wKQotCSAgICB7Ci0JICAgIAlpbnQgZWFySW5kZXggPSBlYXJfLmluZGV4T2YoIi8iKTsKLQkgICAgCWlmIChlYXJJbmRleCE9LTEpIHsKLQkgICAgCQllYXJQcm9qZWN0XyA9IGVhcl8uc3Vic3RyaW5nKDAsZWFySW5kZXgpOwotCSAgICAJCWVhcl8gPSBlYXJfLnN1YnN0cmluZyhlYXJJbmRleCsxKTsKLQkgICAgCX0KLQkgICAgfSAgICAKLQkgIAotCSAgICBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gbmV3IFdlYlNlcnZpY2VDbGllbnRJbmZvKCk7Ci0JICAgIGNsaWVudEluZm8uc2V0SW1wbFVSTChnZXRQcm94eUJlYW4oKSk7Ci0JICAgIC8vY2xpZW50SW5mby5zZXRKMmVlTGV2ZWwoajJlZUxldmVsXyk7Ci0JICAgIGNsaWVudEluZm8uc2V0U2VydmVyRmFjdG9yeUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJZCgpKTsKLQkgIAljbGllbnRJbmZvLnNldFNlcnZlckluc3RhbmNlSWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JICAJY2xpZW50SW5mby5zZXRTdGF0ZShXZWJTZXJ2aWNlU3RhdGUuVU5LTk9XTl9MSVRFUkFMKTsKLQkgIAljbGllbnRJbmZvLnNldFdlYlNlcnZpY2VSdW50aW1lSWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFJ1bnRpbWVJZCgpKTsKLQkgIAljbGllbnRJbmZvLnNldFdzZGxVUkwod3NkbFVSSV8pOwotCSAgCWlmIChjbGllbnRJbmZvLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCkKLQkgIAl7Ci0JICAJCUNyZWF0ZVNlcnZlckNvbW1hbmQgY3JlYXRlU2VydmVyQ29tbWFuZCA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0JICAJCWNyZWF0ZVNlcnZlckNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeWlkKGNsaWVudEluZm8uZ2V0U2VydmVyRmFjdG9yeUlkKCkpOwotCSAgCQljcmVhdGVTZXJ2ZXJDb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgIAkJSVN0YXR1cyBjcmVhdGVTZXJ2ZXJTdGF0dXMgPSBjcmVhdGVTZXJ2ZXJDb21tYW5kLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLQkgIAkJaWYgKGNyZWF0ZVNlcnZlclN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuT0spewotCSAgCQkJY2xpZW50SW5mby5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNyZWF0ZVNlcnZlckNvbW1hbmQuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgIAkJCWNsaWVudEluZm8uc2V0U2VydmVyQ3JlYXRlZCh0cnVlKTsKLQkgIAkJCWNhblJ1blRlc3RDbGllbnRfID0gdHJ1ZTsKLQkgIAkJfQotCSAgCQllbHNlIGlmIChjcmVhdGVTZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKXsKLQkgIAkJCWNhblJ1blRlc3RDbGllbnRfID0gZmFsc2U7Ci0JICAJCX0gICAgICAgICAgICAgICAKLQkgIAl9Ci0JICAJZWxzZSB7Ci0JICAJCWNhblJ1blRlc3RDbGllbnRfID0gdHJ1ZTsKLQkgIAl9Ci0JICAJCi0JICAJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0Xyk7Ci0JICAJSVByb2plY3RbXSBlYXJwcm9qZWN0ID0gSjJFRVByb2plY3RVdGlsaXRpZXMuZ2V0UmVmZXJlbmNpbmdFQVJQcm9qZWN0cyhwcm9qZWN0KTsKLQkgIAlib29sZWFuIGVhck51bGwgPSBmYWxzZTsKLQkgIAlpZiAoZWFycHJvamVjdC5sZW5ndGg8MSkgZWFyTnVsbCA9IHRydWU7Ci0JICAJCQotCSAgCWJvb2xlYW4gajJlZVByb2plY3QgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5pc0pFRVByb2plY3QocHJvamVjdCk7Ci0JICAJCi0JICAJaWYgKGoyZWVQcm9qZWN0ICYmIGVhck51bGwpCi0JICAJCWNhblJ1blRlc3RDbGllbnRfID0gZmFsc2U7Ci0JICAJCQotCSAgCQotCQlpZiAoIWVhck51bGwgJiYgY2xpZW50SW5mby5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkgIT0gbnVsbCl7Ci0JICAJCQotCSAgCQlBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQoKTsKLQkgIAkJY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNsaWVudEluZm8uZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgIAkJY29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3RfKTsKLQkgIAkJY29tbWFuZC5zZXRNb2R1bGUobW9kdWxlXyk7Ci0JICAJCWNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCSAgCQlzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkgIAkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JICAJCXsKLQkgIAkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkgIAkJfSAgICAgCi0JICAJfQotCSAgCXdlYlNlcnZpY2VDbGllbnRfID0gbmV3IFRlc3RXZWJTZXJ2aWNlQ2xpZW50KGNsaWVudEluZm8pOwotCSAgCXJldHVybiBzdGF0dXM7Ci0gIAl9Ci0JCi0JCQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkKLSAgICB7Ci0JCVN0cmluZyBwcm94eUJlYW4gPSAiIjsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgCUlSZXNvdXJjZSByZXNvdXJjZSAgICA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKCBzZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpICk7Ci0gICAgICAgIAlTdHJpbmcgICAgYmVhblBhY2thZ2UgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKCByZXNvdXJjZS5nZXRGdWxsUGF0aCgpICk7Ci0gICAgICAgIAotICAgICAgICAJaWYoIGJlYW5QYWNrYWdlPT1udWxsICkKLSAgICAgICAgCQliZWFuUGFja2FnZSA9ICIiOwotICAgICAgICAJZWxzZQotICAgICAgICAJCWJlYW5QYWNrYWdlID0gYmVhblBhY2thZ2UgKyAiLiI7Ci0KLSAgICAgICAgCXByb3h5QmVhbiA9IGJlYW5QYWNrYWdlICsgcmVzb3VyY2UuZ2V0TmFtZSgpOwotCi0gICAgICAgIAlpZiggcHJveHlCZWFuLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5qYXZhIikgfHwgcHJveHlCZWFuLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5jbGFzcyIpKSAKLSAgICAgICAgCXsKLSAgICAgICAgCQlwcm94eUJlYW4gPSBwcm94eUJlYW4uc3Vic3RyaW5nKDAscHJveHlCZWFuLmxhc3RJbmRleE9mKCcuJykpOwotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsgICAgICAgIAotICAgICAgICB9Ci0gICAgICAKLSAgICAgICAgcmV0dXJuIHByb3h5QmVhbjsKLSAgICB9Ci0gICAgCi0JcHVibGljIElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2VDbGllbnQoKQotCXsKLQkgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50XzsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0Q2FuUnVuVGVzdENsaWVudCgpewotCQlyZXR1cm4gY2FuUnVuVGVzdENsaWVudF87Ci0JfQotCQotICAgIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRDYW5HZW5lcmF0ZVByb3h5KCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldFRlc3RGYWNpbGl0eSgpCi0gICAgewotICAgIAlyZXR1cm4gZ2V0TGVnaXRUZXN0RmFjaWxpdHkoKTsKLSAgICB9Ci0gICAgCi0gICAgCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoIFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyICkKLQl7Ci0gICAgICB0eXBlUnVudGltZVNlcnZlcl8gPSB0eXBlUnVudGltZVNlcnZlcjsgIAotCX0KLQkgIAotCXB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0JewotCSAgbW9kdWxlXyA9IG1vZHVsZTsKLQl9Ci0JICAKLQlwdWJsaWMgdm9pZCBzZXRNb2R1bGVUeXBlKCBTdHJpbmcgbW9kdWxlVHlwZSkKLQl7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dCggUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCApCi0JewotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICAgIHsKLSAgICAgIHNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgR2VuU2FtcGxlUm9vdENvbW1hbmRGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLSAgewotICAgIHB1YmxpYyBHZW5TYW1wbGVSb290Q29tbWFuZEZyYWdtZW50KCkKLSAgICB7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kKHRydWUpLCAiIiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoIHRydWUgKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCgpLCAiIiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFRlc3REZWZhdWx0aW5nRnJhZ21lbnQoKSwiIikpOwotICAgICAgYWRkKCBuZXcgQ2xpZW50VGVzdEZyYWdtZW50KCAiQ2xpZW50VGVzdFdpZGdldCIpICk7IAotICAgICAgYWRkKCBuZXcgRmluaXNoRnJhZ21lbnQoKSApOwotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIC8vTWFwIFNlbGVjdGlvbkNvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbFNlbGVjdGlvbiIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzICk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIG5ldyBGb3JjZVRydWUoKSApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50VHlwZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgCi0gICAgICAvLyBNYXAgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuV1NJTCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzaWxVUkkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgbmV3IEVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcigpKTsKLSAgICAgICAgICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkZyYWdtZW50LmNsYXNzKTsKLSAgICAgICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzICk7ICAgICAKLQotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcywiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVySW5zdGFuY2VJZCIsIEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RUeXBlIiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzICk7Ci0JICAKLQkgIAotCSAgCi0JICAKLSAgICAgIC8vIE1hcCBJbml0aWFsaXplUHJveHlDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZUNsaWVudCIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MsICJDYW5HZW5lcmF0ZVByb3h5IiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MsICJDYW5SdW5UZXN0Q2xpZW50IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0JICAKLSAgICAgIC8vIE1BUCBwb3N0IHNlcnZlciBjb25maWcgY2FsbCAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkVBUlByb2plY3ROYW1lIiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVySW5zdGFuY2UiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiRXhpc3RpbmdTZXJ2ZXJJZCIsIG51bGwpOwotICAgICAgICAgICAgCi0gICAgICAKLSAgICAgIC8vIE1hcCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIEZvcmNlVHJ1ZSBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi0gIHsKLSAgICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIAotICAgIHsKLSAgICAgIHJldHVybiBuZXcgQm9vbGVhbih0cnVlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0ltcG9ydFdTSUxXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9JbXBvcnRXU0lMV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDdlZjM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0ltcG9ydFdTSUxXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSW1wb3J0V1NJTFdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbC5BZGRXU0RMVG9XU0lMV3JhcHBlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotcHVibGljIGNsYXNzIEltcG9ydFdTSUxXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgcHVibGljIEltcG9ydFdTSUxXaWRnZXRCaW5kaW5nKCkKLSAgewotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgU2VxdWVuY2VGcmFnbWVudCByb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiSW1wb3J0V1NJTFdpZGdldCIpKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kKCksICIiKSk7Ci0gICAgICAgICAgICAgICByZXR1cm4gcm9vdDsgIAotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsgICAgCi0gICAgLy8gSW1wb3J0V1NJTFdpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgSW1wb3J0V1NJTFdpZGdldC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSW1wb3J0V1NJTFdpZGdldC5jbGFzcywgIkdlbldTSUxBcmd1bWVudHMiLCBBZGRXU0RMVG9XU0lMV3JhcHBlckNvbW1hbmQuY2xhc3MsICJBcmdzIiwgbnVsbCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpCi0gIHsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCgiSW1wb3J0V1NJTFdpZGdldCIsIAotICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRJVExFX1dTSUxfSU1QT1JULAotICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRFU0NfV1NJTF9JTVBPUlQsCi0gICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbmV3IEltcG9ydFdTSUxXaWRnZXQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0ltcG9ydFdTV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvSW1wb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NWNkNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvSW1wb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlB1Ymxpc2hXU1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci0KLQotcHVibGljIGNsYXNzIEltcG9ydFdTV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHByaXZhdGUgQ2FuRmluaXNoUmVnaXN0cnkgICBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgIHdpZGdldFJlZ2lzdHJ5OwotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YU1hcHBpbmdSZWdpc3RyeTsKLSAgcHJpdmF0ZSBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWc7Ci0KLSAgcHVibGljIEltcG9ydFdTV2lkZ2V0QmluZGluZygpCi0gIHsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcgPSBuZXcgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQoKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIFNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgICAgICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIldTSW1wb3J0IikpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQocHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpLCAiIikpOwotICAgICAgICAgICAgICAgcmV0dXJuIHJvb3Q7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuY2FuRmluaXNoUmVnaXN0cnkgPSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJDYW5GaW5pc2godGhpcy5jYW5GaW5pc2hSZWdpc3RyeSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmRhdGFNYXBwaW5nUmVnaXN0cnkgPSBkYXRhUmVnaXN0cnk7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKHRoaXMuZGF0YU1hcHBpbmdSZWdpc3RyeSk7Ci0gICAgCi0gICAgLy8gUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHJpdmF0ZVVEREkiLCBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gTGF1bmNoV2ViU2VydmljZXNFeHBsb3JlckNvbW1hbmQKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiRm9yY2VMYXVuY2hPdXRzaWRlSURFIiwgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIkxhdW5jaE9wdGlvbnMiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgIHRoaXMud2lkZ2V0UmVnaXN0cnkgPSB3aWRnZXRSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh0aGlzLndpZGdldFJlZ2lzdHJ5KTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCgiV1NJbXBvcnQiLCAKLSAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19GSU5ELAotICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfRklORCwKLSAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgewotICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBuZXcgUHVibGlzaFdTV2lkZ2V0KGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzVlZmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0IDEyNDQwOCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODE4ICAgMTU0NDAyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODMwICAgMTUxMDkxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBDbGllbnQgc2lkZSBzdGlsbCBlbmFibGVkIHdoZW4gdGhlcmUncyBvbmx5IHN0dWIgc2VydmVyCi0gKiAyMDA4MDIwNSAgIDE3MDE0MSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuUnVudGltZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIC8vIENsaWVudFdpemFyZFdpZGdldAotCQotCXByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGV2ZWxvcENsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBhc3NlbWJsZUNsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXBsb3lDbGllbnRfOwotCQotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyICAgIGNsaWVudElkc187Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgY2xpZW50UnVudGltZUlkXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICB0ZXN0U2VydmljZTsKLSAgcHJpdmF0ZSBCb29sZWFuICAgICAgICAgICAgICBpbnN0YWxsQ2xpZW50OwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgIHN0YXJ0Q2xpZW50OwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgIHJ1blRlc3RDbGllbnQ7Ci0gIHByaXZhdGUgUmVzb3VyY2VDb250ZXh0ICAgICAgcmVzb3VyY2VDb250ZXh0OwotICAKLSAgLy8gQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldAotICAvL3ByaXZhdGUgU2VsZWN0aW9uTGlzdENob2ljZXMgY2xpZW50Q2hvaWNlc187Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RWFyUHJvamVjdE5hbWVfOwotICAvL3ByaXZhdGUgU3RyaW5nIGNsaWVudENvbXBvbmVudE5hbWVfOwotICAvL3ByaXZhdGUgU3RyaW5nIGNsaWVudEVhckNvbXBvbmVudE5hbWVfOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRDb21wb25lbnRUeXBlXzsKLSAgLy9wcml2YXRlIFN0cmluZyBqMmVlVmVyc2lvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGNsaWVudE5lZWRFQVJfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlckZhY3RvcnlJZF87Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkXzsKLSAgCi0gIC8vIFdTRExTZWxlY3Rpb25XaWRnZXQKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBnZW5XU0lMOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHdzaWxVUkk7Ci0gIAotICAvLyBXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZAotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICAKLSAgLy8gV1NETFNlbGVjdGlvblRyZWVXaWRnZXQKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICB3c2RsVVJJOwotICAKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBpc0NsaWVudFNjZW5hcmlvXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBnZW5Qcm94eV8gPSB0cnVlOwotICBwcml2YXRlIFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgCi0gIC8vU2VydmVyRGVwbG95YWJsZUNvbmZpZ3VyYXRpb25Db21tYW5kCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RJZF87Ci0gIAotICBwdWJsaWMgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoIGJvb2xlYW4gaXNDbGllbnRTY2VuYXJpbyApCi0gIHsKLSAgICBpc0NsaWVudFNjZW5hcmlvXyA9IGlzQ2xpZW50U2NlbmFyaW87Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoaXMgY29tbWFuZCBpcyBydW5uaW5nIGluIHRoZSBjbGllbnQgd2l6YXJkIGFuZAotICAgKiBmYWxzZSBpZiB0aGlzIGNvbW1hbmQgaXMgcnVubmluZyBpbiB0aGUgY3JlYXRlIHdlYiBzZXJ2aWNlIHdpemFyZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldElzQ2xpZW50U2NlbmFyaW8oKQotICB7Ci0gICAgcmV0dXJuIGlzQ2xpZW50U2NlbmFyaW9fOyAKLSAgfQotICAKLSAgLyoKLSAgcHVibGljIHZvaWQgc2V0UnVudGltZTJDbGllbnRUeXBlcyggU2VsZWN0aW9uTGlzdENob2ljZXMgY2hvaWNlcyApCi0gIHsKLSAgICBjbGllbnRDaG9pY2VzXyA9IGNob2ljZXM7ICAKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBnZXRSdW50aW1lMkNsaWVudFR5cGVzKCkKLSAgewotICAgIHJldHVybiBjbGllbnRDaG9pY2VzXzsgIAotICB9Ci0gICovCi0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBpZHMpCi0gIHsKLSAgICBjbGllbnRJZHNfID0gaWRzOwotICB9Ci0gIAotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7Ci0JaWYgKGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpPT1udWxsIHx8IGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpLmxlbmd0aCgpPT0wKQotCXsKLQkJLy9TZXQgdGhlIGluc3RhbmNlIGlkIGZyb20gdGhlIHNlcnZpY2Ugc2lkZSBpZiB0aGUgZmFjdG9yeSBpZHMgbWF0Y2gKLQkJaWYgKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkXyE9bnVsbCAmJiBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZF8ubGVuZ3RoKCk+MCkKLQkJewotCQkJaWYgKHNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWRfIT1udWxsICYmIHNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWRfLmxlbmd0aCgpPjApCi0JCQl7Ci0JCQkJaWYgKHNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWRfLmVxdWFscyhjbGllbnRJZHNfLmdldFNlcnZlcklkKCkpKQotCQkJCXsKLQkJCQkJY2xpZW50SWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkXyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotICAgIHJldHVybiBjbGllbnRJZHNfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRSdW50aW1lSWQoU3RyaW5nIGlkKQotICB7Ci0gICAgY2xpZW50UnVudGltZUlkXyA9IGlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJZCgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UnVudGltZUlkXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVySW5zdElkKFN0cmluZyBzZXJ2ZXJJbnN0SWQpIHsKLSAgCXRoaXMuc2VydmVySW5zdElkXyA9IHNlcnZlckluc3RJZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJJbnN0SWQoKXsKLSAgCXJldHVybiB0aGlzLnNlcnZlckluc3RJZF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0NsaWVudElzRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpICE9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRQcm9qZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0KCkKLSAgewotCSAgLy9yZXR1cm4gY2xpZW50UHJvamVjdE5hbWVfICsgIi8iICsgY2xpZW50Q29tcG9uZW50TmFtZV87Ci0gICAgICByZXR1cm4gY2xpZW50UHJvamVjdE5hbWVfICsgIi8iICsgY2xpZW50UHJvamVjdE5hbWVfOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UHJvamVjdEVBUi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdEVBUigpCi0gIHsKLSAgICBpZiAoY2xpZW50RWFyUHJvamVjdE5hbWVfIT1udWxsICYmIGNsaWVudEVhclByb2plY3ROYW1lXy5sZW5ndGgoKT4wKQotICAgIHsKLQkgICAgLy9yZXR1cm4gY2xpZW50RWFyUHJvamVjdE5hbWVfICsgIi8iICsgY2xpZW50RWFyQ29tcG9uZW50TmFtZV87Ci0gICAgICByZXR1cm4gY2xpZW50RWFyUHJvamVjdE5hbWVfICsgIi8iICsgY2xpZW50RWFyUHJvamVjdE5hbWVfOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgfQotICAKLSAgLyoKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TW9kdWxlUHJvamVjdE5hbWUoIFN0cmluZyBwcm9qZWN0TmFtZSApCi0gIHsKLQlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0JCi0JaWYoIHByb2plY3ROYW1lICE9IG51bGwgJiYgIXByb2plY3ROYW1lLmVxdWFscygiIikgKQotCXsKLQkgIElQYXRoICAgIHByb2plY3RQYXRoID0gbmV3IFBhdGgoIHByb2plY3ROYW1lICk7Ci0JICBJUHJvamVjdCBwcm9qZWN0ICAgICA9IChJUHJvamVjdClSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSggcHJvamVjdFBhdGggKTsKLQkgIFN0cmluZyAgIG1vZHVsZU5hbWUgID0gSjJFRVV0aWxzLmdldEZpcnN0V2ViTW9kdWxlTmFtZSggcHJvamVjdCApOwotCSAgCi0JICByZXN1bHQgPSBwcm9qZWN0TmFtZSArICIvIiArIG1vZHVsZU5hbWU7Ci0JfQotCQotCXJldHVybiByZXN1bHQ7Ci0gIH0KLSAgKi8KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UHJvamVjdFR5cGUuCi0gICAqLwotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0VHlwZSgpCi0gIHsKLSAgICAvL3JldHVybiBjbGllbnRDaG9pY2VzXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIGNsaWVudENvbXBvbmVudFR5cGVfOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRSdW50aW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lKCkKLSAgewotICAgIHJldHVybiBjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50U2VydmVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudElkc18uZ2V0U2VydmVySWQoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRTZXJ2ZXJJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50SWRzXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7ICAgIAotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0SWQpewotICAgIAotICAgIGlmIChjbGllbnRJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCkKLSAgICAgIGNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJJbnN0SWQpOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBnZW5XU0lMLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNHZW5XU0lMKCkKLSAgewotICAgIHJldHVybiBnZW5XU0lMOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBnZW5XU0lMCi0gICAqICAgICAgICAgICAgVGhlIGdlbldTSUwgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R2VuV1NJTChib29sZWFuIGdlbldTSUwpCi0gIHsKLSAgICB0aGlzLmdlbldTSUwgPSBnZW5XU0lMOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcmVzb3VyY2VDb250ZXh0LgotICAgKi8KLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHJlc291cmNlQ29udGV4dDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gcmVzb3VyY2VDb250ZXh0Ci0gICAqICAgICAgICAgICAgVGhlIHJlc291cmNlQ29udGV4dCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCkKLSAgewotICAgIHRoaXMucmVzb3VyY2VDb250ZXh0ID0gcmVzb3VyY2VDb250ZXh0OwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdGVzdFByb3h5U2VsZWN0ZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHRlc3RQcm94eVNlbGVjdGVkCi0gICAqICAgICAgICAgICAgVGhlIHRlc3RQcm94eVNlbGVjdGVkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKGJvb2xlYW4gdGVzdFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlID0gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB0ZXN0UHJveHlTZWxlY3RlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIHJ1blRlc3RDbGllbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHRlc3RQcm94eVNlbGVjdGVkCi0gICAqICAgICAgICAgICAgVGhlIHRlc3RQcm94eVNlbGVjdGVkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJ1blRlc3RDbGllbnQoYm9vbGVhbiBydW5UZXN0Q2xpZW50KQotICB7Ci0gICAgdGhpcy5ydW5UZXN0Q2xpZW50ID0gcnVuVGVzdENsaWVudDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsKLQkgIHJldHVybiBkZXZlbG9wQ2xpZW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wQ2xpZW50KSB7Ci0JICB0aGlzLmRldmVsb3BDbGllbnRfID0gZGV2ZWxvcENsaWVudDsKLSAgfQkKLQotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsKLQkgIHJldHVybiBhc3NlbWJsZUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlQ2xpZW50KSB7Ci0JICB0aGlzLmFzc2VtYmxlQ2xpZW50XyA9IGFzc2VtYmxlQ2xpZW50OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewotCSAgcmV0dXJuIGRlcGxveUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3lDbGllbnQpIHsKLQkgIHRoaXMuZGVwbG95Q2xpZW50XyA9IGRlcGxveUNsaWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaW5zdGFsbENsaWVudC4KLSAgICovCi0gIHB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbGxDbGllbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGluc3RhbGxDbGllbnQKLSAgICogICAgICAgICAgICBUaGUgaW5zdGFsbENsaWVudCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsQ2xpZW50KEJvb2xlYW4gaW5zdGFsbENsaWVudCkKLSAgewotICAgIHRoaXMuaW5zdGFsbENsaWVudCA9IGluc3RhbGxDbGllbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHN0YXJ0Q2xpZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIHN0YXJ0Q2xpZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBzdGFydENsaWVudAotICAgKiAgICAgICAgICAgIFRoZSBzdGFydENsaWVudCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydENsaWVudChib29sZWFuIHN0YXJ0Q2xpZW50KQotICB7Ci0gICAgdGhpcy5zdGFydENsaWVudCA9IHN0YXJ0Q2xpZW50OwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2RsVVJJLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotICAgIHJldHVybiB3c2RsVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJJCi0gICAqICAgICAgICAgICAgVGhlIHdzZGxVUkkgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2lsVVJJLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXc2lsVVJJKCkKLSAgewotICAgIHJldHVybiB3c2lsVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2lsVVJJCi0gICAqICAgICAgICAgICAgVGhlIHdzaWxVUkkgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NpbFVSSShTdHJpbmcgd3NpbFVSSSkKLSAgewotICAgIHRoaXMud3NpbFVSSSA9IHdzaWxVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3ZWJTZXJ2aWNlc1BhcnNlci4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZXNQYXJzZXIgIT0gbnVsbCkKLSAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyCi0gICAqICAgICAgICAgICAgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgajJlZVZlcnNpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEoyRUVWZXJzaW9uKCkKLSAgewotCSAgcmV0dXJuICIxNCI7IC8vcm0gajJlZQotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBqMmVlVmVyc2lvbiB0byBzZXQuCi0gICAqLwotICAvKgotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRKMkVFVmVyc2lvbihTdHJpbmcgdmVyc2lvbikKLSAgewotCSAgajJlZVZlcnNpb24gPSB2ZXJzaW9uOwotICB9Ci0gICovCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgYSBwcm94eSBzaG91bGQgYmUgZ2VuZXJhdGVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAgIHJldHVybiBnZW5Qcm94eV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoIGJvb2xlYW4gZ2VuUHJveHkgKQotICB7Ci0gICAgZ2VuUHJveHlfID0gZ2VuUHJveHk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZShTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUpCi0gIHsKLSAgCXRoaXMubGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGZhY2lsaXR5IHRvIGxhdW5jaC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUoKQotICB7Ci0gIAlyZXR1cm4gbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIGNsaWVudCBwcm9qZWN0IG5lZWRzIGFuIEVBUiBwcm9qZWN0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50TmVlZEVBUl87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBjbGllbnROZWVkRUFSKQotICB7Ci0gICAgY2xpZW50TmVlZEVBUl8gPSBjbGllbnROZWVkRUFSOwotICB9Ci0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudENvbXBvbmVudFR5cGUoU3RyaW5nIGNsaWVudENvbXBvbmVudFR5cGUpCi0gIHsKLSAgICB0aGlzLmNsaWVudENvbXBvbmVudFR5cGVfID0gY2xpZW50Q29tcG9uZW50VHlwZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3ROYW1lKFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdE5hbWVfID0gY2xpZW50UHJvamVjdE5hbWU7Ci0gIH0KLQotICAvKgotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRDb21wb25lbnROYW1lKFN0cmluZyBjbGllbnRDb21wb25lbnROYW1lKQotICB7Ci0gICAgdGhpcy5jbGllbnRDb21wb25lbnROYW1lXyA9IGNsaWVudENvbXBvbmVudE5hbWU7Ci0gIH0KLSAgKi8KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBjbGllbnRFYXJQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuY2xpZW50RWFyUHJvamVjdE5hbWVfID0gY2xpZW50RWFyUHJvamVjdE5hbWU7Ci0gIH0KLSAgCi0gIC8qCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhckNvbXBvbmVudE5hbWUoU3RyaW5nIGNsaWVudEVhckNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmNsaWVudEVhckNvbXBvbmVudE5hbWVfID0gY2xpZW50RWFyQ29tcG9uZW50TmFtZTsKLSAgfQotICAqLwotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50RWFyUHJvamVjdE5hbWVfOwotICB9Ci0gIAotICAvKgotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEVhckNvbXBvbmVudE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudEVhckNvbXBvbmVudE5hbWVfOwotICB9Ci0gICovCi0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVyRmFjdG9yeUlkKFN0cmluZyBpZCkKLSAgewotICAJc2VydmljZVNlcnZlckZhY3RvcnlJZF8gPSBpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBpZCkKLSAgewotICAJc2VydmljZVNlcnZlckluc3RhbmNlSWRfID0gaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldENhblJ1blRlc3RDbGllbnQoKXsKLQkgIGlmKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkXyAhPSBudWxsIHx8IGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpICE9IG51bGwpIHJldHVybiB0cnVlOwotCSAgCi0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAvL0RvIHNvbWUgYmFzaWMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIHNlcnZlci9ydW50aW1lL3R5cGUgY29tYmluYXRpb24gaXMgc3VwcG9ydGVkLgotICAgIC8vVGhpcyBpcyBuZWVkZWQgdG8gY2F0Y2ggcHJvYmxlbXMgaW4gdGhlIGRlZmF1bHRpbmcKLSAgICAvL3doZW4gdGhlIHVzZXIgY2xpY2tzIEZpbmlzaCBwcmlvciB0byBwYWdlIDMgb2YgdGhlIHdpemFyZC4KLSAgICAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgIAotICAgIFN0cmluZyBzY2VuYXJpbyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1NVQjsKLQotICAgIC8vRW5zdXJlIHNlcnZlciBhbmQgcnVudGltZSBhcmUgbm9uLW51bGwKLSAgICBTdHJpbmcgcnVudGltZUlkID0gY2xpZW50SWRzXy5nZXRSdW50aW1lSWQoKTsKLSAgICBTdHJpbmcgc2VydmVySWQgPSBjbGllbnRJZHNfLmdldFNlcnZlcklkKCk7Ci0gICAgU3RyaW5nIHR5cGVJZCA9IGNsaWVudElkc18uZ2V0VHlwZUlkKCk7Ci0gICAgCi0gICAgaWYoIHJ1bnRpbWVJZCA9PSBudWxsIHx8IHJ1bnRpbWVJZC5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX1JVTlRJTUUsIG5ldyBTdHJpbmdbXXsgc2NlbmFyaW8gfSApICk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIGlmKCBzZXJ2ZXJJZCA9PSBudWxsIHx8IHNlcnZlcklkLmxlbmd0aCgpPT0wKQotICAgIHsKLSAgICAgIC8vUG9wdXAgYW5kIGVycm9yIGlmIHRoZSBzZWxlY3RlZCBjbGllbnQgcHJvamVjdCBkb2VzIG5vdCBleGlzdC4KLSAgICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWVfKTsKLSAgICAgIGlmICghY2xpZW50UHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJ1bnRpbWVMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVMYWJlbEJ5SWQocnVudGltZUlkKTsKLSAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRSwgbmV3IFN0cmluZ1tde3J1bnRpbWVMYWJlbCB9ICkgKTsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUJ5SWQocnVudGltZUlkKTsKLQotICAgICAgICBpZiAoZGVzYy5nZXRTZXJ2ZXJSZXF1aXJlZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19TRVJWRVIsIG5ldyBTdHJpbmdbXSB7IHNjZW5hcmlvIH0pKTsKLSAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIH0gCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE5vIHNlcnZlciBoYXMgYmVlbiBzZWxlY3RlZCBhbmQgdGhlIHNlbGVjdGVkIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICAgICAgICAvLyBkb2VzIG5vdAotICAgICAgICAgIC8vIHJlcXVpcmUgYSBzZXJ2ZXIuIFNldCBkZXBsb3ksIGluc3RhbGwsIHJ1biwgYW5kIHRlc3QgdG8gZmFsc2UuCi0gICAgICAgICAgZGVwbG95Q2xpZW50XyA9IGZhbHNlOwotICAgICAgICAgIGluc3RhbGxDbGllbnQgPSBCb29sZWFuLkZBTFNFOwotICAgICAgICAgIHN0YXJ0Q2xpZW50ID0gZmFsc2U7Ci0gICAgICAgICAgLy90ZXN0U2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gSWYgdGhlIHNlcnZlciBpcyBub24tbnVsbCwgZW5zdXJlIHRoZXJlIGlzIGFuIGluc3RhbGxlZCBzZXJ2ZXIgd2l0aCBJRCB0aGUgc2FtZSBhcyAnc2VydmVySUQnIHJlZ2lzdGVyZWQgaW4gRWNsaXBzZQotICAgIFN0cmluZ1tdIHJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0QWxsU2VydmVyRmFjdG9yeUlkc1dpdGhSdW50aW1lcygpOwotICAgIGJvb2xlYW4gbm9SdW50aW1lSW5zdGFsbGVkID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCWlmIChydW50aW1lc1tpXS5lcXVhbHMoc2VydmVySWQpKXsKLQkJCW5vUnVudGltZUluc3RhbGxlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0gICAgaWYgKG5vUnVudGltZUluc3RhbGxlZCl7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0gICAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTk9fU0VSVkVSX1JVTlRJTUVfSU5TVEFMTEVELCBuZXcgU3RyaW5nW10ge3NlcnZlckxhYmVsfSkpOwotICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIC8vSWYgdGhlIHNlcnZlciBpcyBub24tbnVsbCBhbmQgaXMgaW5zdGFsbGVkIGluIEVjbGlwc2UsIGVuc3VyZSB0aGUgc2VydmVyLCBydW50aW1lLCBhbmQgdHlwZSBhcmUgY29tcGF0aWJsZQotICAgIGlmICghbm9SdW50aW1lSW5zdGFsbGVkICYmIHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIGlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuaXNTZXJ2ZXJDbGllbnRSdW50aW1lVHlwZVN1cHBvcnRlZChzZXJ2ZXJJZCwgcnVudGltZUlkLCB0eXBlSWQpKQotICAgICAgewotICAgICAgICBTdHJpbmcgc2VydmVyTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotICAgICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChydW50aW1lSWQpOwotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlMsIG5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLAotICAgICAgICAgICAgcnVudGltZUxhYmVsIH0pKTsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHNlbGVjdGVkIHNlcnZlciB0eXBlIGhhcyBvbmx5IHN0dWIgcnVudGltZXMgYXNzb2NpYXRlZAotICAgICAgLy8gd2l0aCBpdCBhbmQgaWYgYSBzZXJ2ZXIgaW5zdGFuY2UgaXMgbm90IHNlbGVjdGVkLgotICAgICAgLy8gSWYgc28sIHNldCBpbnN0YWxsIGFuZCB0ZXN0IHRvIGZhbHNlIGluIHRoZSBjb250ZXh0LgotICAgICAgSVJ1bnRpbWUgbm9uU3R1YlJ1bnRpbWUgPSBTZXJ2ZXJVdGlscy5nZXROb25TdHViUnVudGltZShzZXJ2ZXJJZCk7Ci0gICAgICBpZiAobm9uU3R1YlJ1bnRpbWUgPT0gbnVsbCAmJiBjbGllbnRJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKSA9PSBudWxsKQotICAgICAgewotICAgICAgICBpbnN0YWxsQ2xpZW50ID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgICAgc3RhcnRDbGllbnQgPSBmYWxzZTsKLSAgICAgICAgLy90ZXN0U2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICB9Ci0gICAgfQotCi0JICAvLyBjYWxjdWxhdGUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgY2xpZW50UnVudGltZUlkIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3MuCi0JICBjbGllbnRSdW50aW1lSWRfID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKGNsaWVudElkc18sIGNsaWVudFByb2plY3ROYW1lXywgY2xpZW50Q29tcG9uZW50VHlwZV8pOyAgIAotCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTA1ZDA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkV4dGVuc2lvbkZyYWdtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBDbGllbnRFeHRlbnNpb25GcmFnbWVudCBleHRlbmRzIEV4dGVuc2lvbkZyYWdtZW50Ci17ICAKLSAgcHVibGljIENsaWVudEV4dGVuc2lvbkZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQoIENsaWVudEV4dGVuc2lvbkZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0gICAgc2V0RXh0ZW5zaW9uSWRzKCBuZXcgU3RyaW5nW117IGlkcy5nZXRUeXBlSWQoKSwgaWRzLmdldFJ1bnRpbWVJZCgpLCBpZHMuZ2V0U2VydmVySWQoKSB9ICk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2Nsb25lKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotICAgIHJldHVybiBuZXcgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQoIHRoaXMgKTsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNjMxZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDUwMiAgIDE4MDMwNCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHByb3h5QmVhbi4KLSAgICovCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldFByb3h5QmVhbigpCi0gIHsKLSAgICByZXR1cm4gd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRJbXBsVVJMKCk7Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2FuR2VuZXJhdGVQcm94eSgpCi0gIHsKLQlyZXR1cm4gISh3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldEltcGxVUkwoKSA9PSBudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2V0RW5kcG9pbnRNZXRob2QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNldEVuZHBvaW50TWV0aG9kKCkKLSAgewotCXJldHVybiAic2V0RW5kcG9pbnQiOwotICB9Ci0gIAkKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZUNsaWVudChJV2ViU2VydmljZUNsaWVudCB3c2MpCi0gIHsKLQl3ZWJTZXJ2aWNlQ2xpZW50XyA9IHdzYzsKLSAgfQotCQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKQotICB7Ci0JcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotICB9Ci0JCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKCkKLSAgewotCXJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlFbmRwb2ludC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJveHlFbmRwb2ludCgpIHsKLSAgCXJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFByb3h5RW5kcG9pbnQoKTsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDdiZTFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0IDEyNDQwOCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODIzICAgMTU0OTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMjA1ICAgMTcwMTQxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDE3MTcwNSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgaW1wcm92ZSBBbnRUYXNrIGVycm9ycyByZXBvcnQKLSAqIDIwMDgwNDA5ICAgMjE5MTIxIHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5SdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGRldmVsb3BTZXJ2aWNlXzsKLQlwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGFzc2VtYmxlU2VydmljZV87Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXBsb3lTZXJ2aWNlXzsKLQotICBwcml2YXRlIEJvb2xlYW4gICAgICAgICAgICAgIGluc3RhbGxTZXJ2aWNlOwotICBwcml2YXRlIEJvb2xlYW4gICAgICAgICAgICAgIHN0YXJ0U2VydmljZTsKLSAgcHJpdmF0ZSBCb29sZWFuICAgICAgICAgICAgICB0ZXN0U2VydmljZTsKLSAgcHJpdmF0ZSBCb29sZWFuICAgICAgICAgICAgICBwdWJsaXNoU2VydmljZTsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciAgICBzZXJ2aWNlSWRzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICBzZXJ2aWNlUnVudGltZUlkXzsKLSAgLy9wcml2YXRlIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHNlcnZpY2VDaG9pY2VzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgc2VydmljZUNvbXBvbmVudFR5cGVfOwotICAvL3ByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgc2VydmljZUNvbXBvbmVudE5hbWVfOwotICAvL3ByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgc2VydmljZUVhckNvbXBvbmVudE5hbWVfOwotICAvL3ByaXZhdGUgU3RyaW5nIGoyZWVWZXJzaW9uOwotICBwcml2YXRlIGJvb2xlYW4gc2VydmljZU5lZWRFQVJfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdzZGxQYXJzZXJfOwotICAKLQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykKLSAgewotICAgIHNlcnZpY2VJZHNfID0gaWRzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdElkKXsKLSAgICAKLSAgICBpZiAoc2VydmljZUlkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpPT1udWxsKQotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJJbnN0SWQpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgVHlwZVJ1bnRpbWVTZXJ2aWNlIG9iamVjdCB0aGF0IHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBvbgotICAgKiBwYWdlIDMgb2YgdGhlIHdpemFyZC4KLSAgICovCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUnVudGltZUlkKFN0cmluZyBpZCkKLSAgewotICAgIHNlcnZpY2VSdW50aW1lSWRfID0gaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJ1bnRpbWVJZCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZVJ1bnRpbWVJZF87Ci0gIH0KLQotICAvKgotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdDJFQVJQcm9qZWN0KFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNob2ljZXMpCi0gIHsKLSAgICBzZXJ2aWNlQ2hvaWNlc18gPSBjaG9pY2VzOwotICB9Ci0gICovCi0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHVibGlzaFNlcnZpY2UuCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRQdWJsaXNoU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gcHVibGlzaFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHB1Ymxpc2hTZXJ2aWNlCi0gICAqICAgICAgICAgICAgVGhlIHB1Ymxpc2hTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hTZXJ2aWNlKEJvb2xlYW4gcHVibGlzaFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLnB1Ymxpc2hTZXJ2aWNlID0gcHVibGlzaFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJJc0V4aXN0aW5nU2VydmVyLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmVySXNFeGlzdGluZ1NlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUlkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpICE9IG51bGw7Ci0gIH0KLQotICAvKioKLQotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlckluc3RhbmNlSWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyUHJvamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZVByb2plY3ROYW1lXyArICIvIiArIHNlcnZpY2VQcm9qZWN0TmFtZV87IAotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJQcm9qZWN0RUFSLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJQcm9qZWN0RUFSKCkKLSAgewotICAgIGlmIChzZXJ2aWNlRWFyUHJvamVjdE5hbWVfIT1udWxsICYmIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8ubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2VydmljZUVhclByb2plY3ROYW1lXyArICIvIiArIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyUnVudGltZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUnVudGltZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUlkc18uZ2V0UnVudGltZUlkKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJTZXJ2ZXIuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclNlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUlkc18uZ2V0U2VydmVySWQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZpY2VTY2VuYXJpb0lkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlU2NlbmFyaW9JZCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUlkc18uZ2V0VHlwZUlkKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wU2VydmljZSgpIHsKLQkgIHJldHVybiBkZXZlbG9wU2VydmljZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXZlbG9wU2VydmljZShib29sZWFuIGRldmVsb3BTZXJ2aWNlKSB7Ci0JICB0aGlzLmRldmVsb3BTZXJ2aWNlXyA9IGRldmVsb3BTZXJ2aWNlOwotICB9CQotCi0gIHB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlU2VydmljZSgpIHsKLQkgIHJldHVybiBhc3NlbWJsZVNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QXNzZW1ibGVTZXJ2aWNlKGJvb2xlYW4gYXNzZW1ibGVTZXJ2aWNlKSB7Ci0JICB0aGlzLmFzc2VtYmxlU2VydmljZV8gPSBhc3NlbWJsZVNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lTZXJ2aWNlKCkgewotCSAgcmV0dXJuIGRlcGxveVNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVwbG95U2VydmljZShib29sZWFuIGRlcGxveVNlcnZpY2UpIHsKLQkgIHRoaXMuZGVwbG95U2VydmljZV8gPSBkZXBsb3lTZXJ2aWNlOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpbnN0YWxsU2VydmljZS4KLSAgICovCi0gIHB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsU2VydmljZTsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGluc3RhbGxTZXJ2aWNlCi0gICAqICAgICAgICAgICAgU3BlY2lmaWVzIGlmIHNlcnZpY2Ugc2hvdWxkIGJlIGluc3RhbGxlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxTZXJ2aWNlKEJvb2xlYW4gaW5zdGFsbFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLmluc3RhbGxTZXJ2aWNlID0gaW5zdGFsbFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzdGFydFNlcnZpY2UuCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHN0YXJ0U2VydmljZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBzdGFydFNlcnZpY2UKLSAgICogICAgICAgICAgICBUaGUgc3RhcnRTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShCb29sZWFuIHN0YXJ0U2VydmljZSkKLSAgewotICAgIHRoaXMuc3RhcnRTZXJ2aWNlID0gc3RhcnRTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdGVzdFNlcnZpY2UuCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRUZXN0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHRlc3RTZXJ2aWNlCi0gICAqICAgICAgICAgICAgVGhlIHRlc3RTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKEJvb2xlYW4gdGVzdFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlID0gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgQm9vbGVhbiBnZXRQdWJsaXNoKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbih0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGoyZWVWZXJzaW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlSjJFRVZlcnNpb24oKQotICB7Ci0gIAlyZXR1cm4gIjE0IjsgLy9ybSBqMmVlCi0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHdlYiBzZXJ2aWNlIHByb2plY3QgbmVlZHMgdG8gYmUgaW4gYW4gRUFSIHByb2plY3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTZXJ2aWNlTmVlZEVBUigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZU5lZWRFQVJfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTmVlZEVBUihib29sZWFuIHNlcnZpY2VOZWVkRUFSKQotICB7Ci0gICAgc2VydmljZU5lZWRFQVJfID0gc2VydmljZU5lZWRFQVI7Ci0gIH0gICAgCi0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2RsUGFyc2VyXy4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiggd3NkbFBhcnNlcl8gPT0gbnVsbCApCi0gICAgewotICAgICAgd3NkbFBhcnNlcl8gPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd3NkbFBhcnNlcl87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsUGFyc2VyXyBUaGUgd3NkbFBhcnNlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd3NkbFBhcnNlciApCi0gIHsKLSAgICB3c2RsUGFyc2VyXyA9IHdzZGxQYXJzZXI7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuc2VydmljZVByb2plY3ROYW1lXyA9IHNlcnZpY2VQcm9qZWN0TmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZShTdHJpbmcgc2VydmljZUVhclByb2plY3ROYW1lKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlRWFyUHJvamVjdE5hbWVfID0gc2VydmljZUVhclByb2plY3ROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlQ29tcG9uZW50VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMuc2VydmljZUNvbXBvbmVudFR5cGVfID0gdHlwZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUNvbXBvbmVudFR5cGVfOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgLy9EbyBzb21lIGJhc2ljIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBzZXJ2ZXIvcnVudGltZS90eXBlIGNvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZC4KLSAgICAvL1RoaXMgaXMgbmVlZGVkIHRvIGNhdGNoIHByb2JsZW1zIGluIHRoZSBkZWZhdWx0aW5nCi0gICAgLy93aGVuIHRoZSB1c2VyIGNsaWNrcyBGaW5pc2ggcHJpb3IgdG8gcGFnZSAzIG9mIHRoZSB3aXphcmQuCi0gICAgCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgIAotICAgIFN0cmluZyBzY2VuYXJpbyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TVUI7Ci0KLSAgICAvL0Vuc3VyZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgYXJlIG5vbi1udWxsCi0gICAgU3RyaW5nIHJ1bnRpbWVJZCA9IHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpOwotICAgIFN0cmluZyBzZXJ2ZXJJZCA9IHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCk7Ci0gICAgU3RyaW5nIHR5cGVJZCA9IHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpOwotICAgIAotICAgIGlmKCBydW50aW1lSWQgPT0gbnVsbCB8fCBydW50aW1lSWQubGVuZ3RoKCk9PTApCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19SVU5USU1FLCBuZXcgU3RyaW5nW117IHNjZW5hcmlvIH0gKSApOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICBpZiggc2VydmVySWQgPT0gbnVsbCB8fCBzZXJ2ZXJJZC5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICAvL1BvcHVwIGFuZCBlcnJvciBpZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0LgotICAgICAgSVByb2plY3Qgc2VydmljZVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lXyk7Ci0gICAgICBpZiAoIXNlcnZpY2VQcm9qZWN0LmV4aXN0cygpKSAgICAgICAgCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTk9fU0VSVkVSX1JVTlRJTUUsIG5ldyBTdHJpbmdbXXsgcnVudGltZUxhYmVsIH0gKSApOwotICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0KLSAgICAgICAgUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICAgIGlmIChkZXNjLmdldFNlcnZlclJlcXVpcmVkKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX1NFUlZFUiwgbmV3IFN0cmluZ1tdIHsgc2NlbmFyaW8gfSkpOwotICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTm8gc2VydmVyIGhhcyBiZWVuIHNlbGVjdGVkIGFuZCB0aGUgc2VsZWN0ZWQgV2ViIHNlcnZpY2UgcnVudGltZQotICAgICAgICAgIC8vIGRvZXMgbm90IHJlcXVpcmUgYSBzZXJ2ZXIuIFNldCBkZXBsb3ksIGluc3RhbGwsIHJ1biwgYW5kIHRlc3QgdG8gZmFsc2UuCi0gICAgICAgICAgZGVwbG95U2VydmljZV8gPSBmYWxzZTsKLSAgICAgICAgICBpbnN0YWxsU2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgICAgc3RhcnRTZXJ2aWNlID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgICAgICB0ZXN0U2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gSWYgdGhlIHNlcnZlciBpcyBub24tbnVsbCwgZW5zdXJlIHRoZXJlIGlzIGFuIGluc3RhbGxlZCBzZXJ2ZXIgd2l0aCBJRCB0aGUgc2FtZSBhcyAnc2VydmVySUQnIHJlZ2lzdGVyZWQgaW4gRWNsaXBzZQotICAgIFN0cmluZ1tdIHJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0QWxsU2VydmVyRmFjdG9yeUlkc1dpdGhSdW50aW1lcygpOwotICAgIGJvb2xlYW4gbm9SdW50aW1lSW5zdGFsbGVkID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCWlmIChydW50aW1lc1tpXS5lcXVhbHMoc2VydmVySWQpKXsKLQkJCW5vUnVudGltZUluc3RhbGxlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0gICAgaWYgKG5vUnVudGltZUluc3RhbGxlZCl7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0gICAgICAgIGlmIChzZXJ2ZXJMYWJlbCA9PSBudWxsKSAvLyBDYW5ub3QgdHJhbnNsYXRlIGZyb20gaWQgdG8gbGFiZWwsIHNvIGxldCdzIGp1c3QgdXNlIHRoZSBpZAotICAgICAgICAJc2VydmVyTGFiZWwgPSBzZXJ2ZXJJZDsKLSAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRV9JTlNUQUxMRUQsIG5ldyBTdHJpbmdbXSB7c2VydmVyTGFiZWx9KSk7Ci0gICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgLy9JZiB0aGUgc2VydmVyIGlzIG5vbi1udWxsIGFuZCBpcyBpbnN0YWxsZWQgaW4gRWNsaXBzZSwgZW5zdXJlIHRoZSBzZXJ2ZXIsIHJ1bnRpbWUsIGFuZCB0eXBlIGFyZSBjb21wYXRpYmxlCi0gICAgaWYgKCFub1J1bnRpbWVJbnN0YWxsZWQgJiYgc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5pc1NlcnZlclJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlcnZlcklkLCBydW50aW1lSWQsIHR5cGVJZCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0gICAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5WQUxJRF9TUlRfU0VMRUNUSU9OUywgbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsCi0gICAgICAgICAgICBydW50aW1lTGFiZWwgfSkpOwotICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiB0aGUgc2VsZWN0ZWQgc2VydmVyIHR5cGUgaGFzIG9ubHkgc3R1YiBydW50aW1lcyBhc3NvY2lhdGVkCi0gICAgICAvLyB3aXRoIGl0IGFuZCBpZiBhIHNlcnZlciBpbnN0YW5jZSBpcyBub3Qgc2VsZWN0ZWQuCi0gICAgICAvLyBJZiBzbywgc2V0IGluc3RhbGwsIHJ1biwgYW5kIHRlc3QgdG8gZmFsc2UgaW4gdGhlIGNvbnRleHQuCi0gICAgICBJUnVudGltZSBub25TdHViUnVudGltZSA9IFNlcnZlclV0aWxzLmdldE5vblN0dWJSdW50aW1lKHNlcnZlcklkKTsKLSAgICAgIGlmIChub25TdHViUnVudGltZSA9PSBudWxsICYmIHNlcnZpY2VJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKSA9PSBudWxsKQotICAgICAgewotICAgICAgICBpbnN0YWxsU2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgIHN0YXJ0U2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgIHRlc3RTZXJ2aWNlID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0KLQkvLyBjYWxjdWxhdGUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgY2xpZW50UnVudGltZUlkIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3MuCi0Jc2VydmljZVJ1bnRpbWVJZF8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZUlkKCBzZXJ2aWNlSWRzXywgc2VydmljZVByb2plY3ROYW1lXywgc2VydmljZUNvbXBvbmVudFR5cGVfKTsgICAKLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAwYTQ5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5FeHRlbnNpb25GcmFnbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQgZXh0ZW5kcyBFeHRlbnNpb25GcmFnbWVudAoteyAgCi0gIHB1YmxpYyBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudCgpCi0gIHsKLQotICB9Ci0gIAotICBwcm90ZWN0ZWQgU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQoIFNlcnZlckV4dGVuc2lvbkZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzICkKLSAgewotICAgIHNldEV4dGVuc2lvbklkcyggbmV3IFN0cmluZ1tdeyBpZHMuZ2V0VHlwZUlkKCksIGlkcy5nZXRSdW50aW1lSWQoKSwgaWRzLmdldFNlcnZlcklkKCkgfSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNjbG9uZSgpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLSAgICByZXR1cm4gbmV3IFNlcnZlckV4dGVuc2lvbkZyYWdtZW50KCB0aGlzICk7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTgzY2QyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIC8vcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICB3c2RsVVJJXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3c2RsUGFyc2VyXzsKLQlwcml2YXRlIElXZWJTZXJ2aWNlIAkJCXdlYlNlcnZpY2VfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfID0gZmFsc2U7Ci0gICAgCi0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2RsVVJJLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFdzZGxVUkwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd3NkbFVSSQotICAgKiAgICAgICAgICAgIFRoZSB3c2RsVVJJIHRvIHNldC4KLSAgICovCi0JLyoKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHdzZGxVUklfID0gd3NkbFVSSTsKLSAgfQotICAqLwotCQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoSVdlYlNlcnZpY2Ugd3MpCi0JewotCQl3ZWJTZXJ2aWNlXyA9IHdzOwotCX0KLQkKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NkbFBhcnNlcl8uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgaWYoIHdzZGxQYXJzZXJfID09IG51bGwgKQotICAgIHsKLSAgICAgIHdzZGxQYXJzZXJfID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7ICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdzZGxQYXJzZXJfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gd3NkbFBhcnNlcl8gVGhlIHdzZGxQYXJzZXJfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdzZGxQYXJzZXJfKQotICB7Ci0gICAgdGhpcy53c2RsUGFyc2VyXyA9IHdzZGxQYXJzZXJfOwotICB9Ci0vKioKLSAqIEBwYXJhbSBlYXJQcm9qZWN0TmFtZSBUaGUgZWFyUHJvamVjdE5hbWUgdG8gc2V0LgotICovCi1wdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0TmFtZShTdHJpbmcgZWFyUHJvamVjdE5hbWUpIHsKLX0KLS8qKgotICogQHBhcmFtIGV4aXN0aW5nU2VydmVySWQgVGhlIGV4aXN0aW5nU2VydmVySWQgdG8gc2V0LgotICovCi1wdWJsaWMgdm9pZCBzZXRFeGlzdGluZ1NlcnZlcklkKFN0cmluZyBleGlzdGluZ1NlcnZlcklkKSB7Ci19Ci0KLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBpc1Jlc3RhcnRQcm9qZWN0TmVlZGVkLgotICovCi1wdWJsaWMgYm9vbGVhbiBnZXRJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkKCkgewotCXJldHVybiBpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXzsKLX0KLS8qKgotICogQHBhcmFtIGlzUmVzdGFydFByb2plY3ROZWVkZWQgVGhlIGlzUmVzdGFydFByb2plY3ROZWVkZWQgdG8gc2V0LgotICovCi1wdWJsaWMgdm9pZCBzZXRJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkKGJvb2xlYW4gaXNSZXN0YXJ0UHJvamVjdE5lZWRlZCkgewotCXRoaXMuaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF8gPSBpc1Jlc3RhcnRQcm9qZWN0TmVlZGVkOwotfQotCi1wdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWQoKQotewotCXJldHVybiB3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpOwotfQotCi1wdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKCkKLXsKLQlyZXR1cm4gd2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci19Ci0KLXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLXsKLSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0Fic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0Fic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNWM5NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9BYnN0cmFjdE9iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEwICAgMTM1NDQxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDIwICAgMTM1OTEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIGltcGxlbWVudHMgSU9iamVjdFNlbGVjdGlvbldpZGdldAotewotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICAvLyBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLSAgfQotCi0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKQotICB7Ci0gICAgLy8gc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0gICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgICAvLyAgc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICAvLyAgc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gICBwdWJsaWMgIFN0cmluZyBnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpCi0gICB7Ci0JICAgIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQkgIHJldHVybiAiIjsKLSAgIH0KLSAgIAotICAgcHVibGljIFBvaW50IGdldFdpZGdldFNpemUoKQotICAgewotICAgICAgLy8gc3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgd2l0aCBhbiBhcHByb3ByaWF0ZSBkZWZhdWx0IGRpYWxvZyBzaXplIGZvciB0aGlzIHdpZGdldAkgIAotIAkgIHJldHVybiBudWxsOyAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBzKSB7Ci0gICAgLy8gc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0JcmV0dXJuIHRydWU7Ci0gICAgfSAgCi0gIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkODNmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0VKQlNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMTYgICAxNTk2MTggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFByb2plY3QgYW5kIEVBUiBub3QgZGVmYXVsdGVkIHByb3Blcmx5IHdoZW4gd2l6YXJkIGxhdW5jaGVkIGZyb20gSlNSLTEwOSBXZWIgc2VydmljZXMgYnJhbmNoIGluIEoyRUUgUHJvamVjdCBFeHBsb3JlcgotICogMjAwODAyMTIgICAyMDg3OTUgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgV1Mgd2l6YXJkIGZyYW1ld29yayBzaG91bGQgc3VwcG9ydCBFSkIgMy4wCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRW50ZXJwcmlzZUJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkVKQkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZpY2VJbXBsQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5TZXNzaW9uQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgRUpCU2VsZWN0aW9uVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lcgotewotCi0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotICAgIHsKLSAgICAgIE9iamVjdCBzZWwgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlKS5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChzZWwgaW5zdGFuY2VvZiBFbnRlcnByaXNlQmVhbikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKCgoRW50ZXJwcmlzZUJlYW4pc2VsKS5nZXROYW1lKCkpOwotICAgICAgfSAKLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIFNlc3Npb25CZWFuKSAKLSAgICAgIHsKLSAgICAJICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKChTZXNzaW9uQmVhbilzZWwpLmdldEVqYk5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRCZWFuTmFtZSgoU2VydmljZUltcGxCZWFuKSBzZWwpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIEVKQkxpbmspCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRCZWFuTmFtZSgoRUpCTGluaykgc2VsKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmVhbk5hbWUoU2VydmljZUltcGxCZWFuIGJlYW4pIHsKLQkgIEVPYmplY3QgZU9iamVjdCA9IGJlYW4uZUNvbnRhaW5lcigpOwotCSAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBQb3J0Q29tcG9uZW50KSB7Ci0JCSAgUG9ydENvbXBvbmVudCBwYyA9IChQb3J0Q29tcG9uZW50KSBlT2JqZWN0OwotCQkgIHJldHVybiBwYy5nZXRQb3J0Q29tcG9uZW50TmFtZSgpOwkgICAgICAJCi0JICB9Ci0JICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEJlYW5OYW1lKEVKQkxpbmsgbGluaykgewotCSAgRU9iamVjdCBlT2JqZWN0ID0gbGluay5lQ29udGFpbmVyKCk7Ci0JICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLQkJICByZXR1cm4gZ2V0QmVhbk5hbWUoKFNlcnZpY2VJbXBsQmVhbikgZU9iamVjdCk7Ci0JICByZXR1cm4gIiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCU2VsZWN0aW9uV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0VKQlNlbGVjdGlvbldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWYyODQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCU2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5ICAgMTI4MDY5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MTggICAxMzYxODAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI0ICAgMTQxMTk0IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwODI1ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDgwMjEyICAgMjA4Nzk1IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIFdTIHdpemFyZCBmcmFtZXdvcmsgc2hvdWxkIHN1cHBvcnQgRUpCIDMuMAotICogMjAwODAyMjkgICAyMTg2OTYgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgQVBJcyB1c2luZyBFSkJBcnRpZmFjdEVkaXQgbm90IGFibGUgdG8gZGVhbCB3aXRoIHNvbWUgRUpCIDMuMCBiZWFucyBwcm9wZXJseQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQkphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLlNlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLmNvbXBvbmVudGNvcmUudXRpbC5FSkJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5tb2RlbC5JTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5tb2RlbC5Nb2RlbFByb3ZpZGVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FbnRlcnByaXNlQmVhbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuU2Vzc2lvbkJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5Db21wb25lbnRVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIEVKQlNlbGVjdGlvbldpZGdldCBleHRlbmRzIEFic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGltcGxlbWVudHMgSU9iamVjdFNlbGVjdGlvbldpZGdldAotewotCi0gIHByaXZhdGUgQ29tYm8gZWFyTGlzdDsKLSAgcHJpdmF0ZSBFSkJUYWJsZVZpZXdlciBiZWFuTGlzdDsKLSAgcHJpdmF0ZSBJVmlydHVhbENvbXBvbmVudFtdIGVhckNvbXBvbmVudHM7Ci0gIHByaXZhdGUgSW50ZWdlciBzZWxlY3RlZEJlYW5JbmRleCA9IG51bGw7Ci0gIHByaXZhdGUgVmVjdG9yIGVqYkJlYW5OYW1lczsKLSAgcHJpdmF0ZSBWZWN0b3IgZWpiQ29tcG9uZW50TmFtZXM7Ci0gIHByaXZhdGUgVmVjdG9yIGVqYkNvbXBvbmVudFByb2plY3ROYW1lczsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZWpiVmFsdWVzQnlFQVJTZWxlY3Rpb25DYWNoZTsKLSAgcHJpdmF0ZSBMaXN0ZW5lciAgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIFN0cmluZyBkaXNwbGF5U3RyaW5nXyA9ICIiOwotICAvKiBDT05URVhUX0lEIFBFQkQwMDAxIGZvciB0aGUgRUFSIFByb2plY3RzIGRyb3AtZG93biBib3ggKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QRUJEX0VBUl9QUk9KRUNUUyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuUEVCRDAwMDEiOwotICAvKiBDT05URVhUX0lEIFBFQkQwMDAyIGZvciB0aGUgdGFibGUgY29udGFpbmluZyBhbGwgb2YgdGhlIGJlYW4gbmFtZXMgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QRUJEX1RBQkxFX0JFQU5fTkFNRVMgPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLlBFQkQwMDAyIjsKLQotICBwdWJsaWMgRUpCU2VsZWN0aW9uV2lkZ2V0KCkKLSAgewotCWVhckNvbXBvbmVudHMgPSBKMkVFVXRpbHMuZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotICAgIGVqYlZhbHVlc0J5RUFSU2VsZWN0aW9uQ2FjaGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdGVkQmVhbigpCi0gIHsKLSAgICBpZiAoc2VsZWN0ZWRCZWFuSW5kZXggIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gKFN0cmluZykgKGVqYkJlYW5OYW1lcy5lbGVtZW50QXQoc2VsZWN0ZWRCZWFuSW5kZXguaW50VmFsdWUoKSkpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0ZWRQcm9qZWN0KCkKLSAgewotICAgIGlmIChzZWxlY3RlZEJlYW5JbmRleCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoU3RyaW5nKSAoZWpiQ29tcG9uZW50UHJvamVjdE5hbWVzLmVsZW1lbnRBdChzZWxlY3RlZEJlYW5JbmRleC5pbnRWYWx1ZSgpKSk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICBzdGF0dXNMaXN0ZW5lcl8gID0gc3RhdHVzTGlzdGVuZXI7Ci0gICAgVUlVdGlscyB1dGlscyA9IG5ldyBVSVV0aWxzKElORk9QT1BfUEVCRF9FQVJfUFJPSkVDVFMpOwotICAgIAotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxLCAwLCAwKTsKLSAgICAKLSAgICBDb21wb3NpdGUgcHJvamVjdENvbXBvc2l0ZSA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShjb21wb3NpdGUsIDIpOwotICAgIG5ldyBMYWJlbChwcm9qZWN0Q29tcG9zaXRlLCBTV1QuTlVMTCkuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRUFSX1BST0pFQ1RTKTsKLSAgICBlYXJMaXN0ID0gbmV3IENvbWJvKHByb2plY3RDb21wb3NpdGUsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICBlYXJMaXN0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotICAgIGVhckxpc3QuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkKLSAgICAgIHsKLSAgICAgICAgQ29tYm8gd2lkZ2V0ID0gKENvbWJvKSAoZXZ0LndpZGdldCk7Ci0gICAgICAgIGludCBlYXJMaXN0U2VsZWN0aW9uSW5kZXggPSB3aWRnZXQuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgICAgaWYgKGVhckxpc3RTZWxlY3Rpb25JbmRleCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRCZWFuTGlzdChlYXJDb21wb25lbnRzW2Vhckxpc3RTZWxlY3Rpb25JbmRleC0xXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgc2V0QmVhbkxpc3QobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VsZWN0ZWRCZWFuSW5kZXggPSBudWxsOwotICAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgYWRkRUFSTmFtZXNUb0xpc3QoKTsKLSAgICBlYXJMaXN0LnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX0VBUl9QUk9KRUNUUyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChlYXJMaXN0LCBJTkZPUE9QX1BFQkRfRUFSX1BST0pFQ1RTKTsKLSAgICAKLSAgICBHcm91cCBiZWFuQ29tcG9zaXRlID0gdXRpbHMuY3JlYXRlR3JvdXAoY29tcG9zaXRlLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRUpCX0JFQU5fTkFNRSwgIiIsICIiKTsKLSAgICBiZWFuTGlzdCA9IG5ldyBFSkJUYWJsZVZpZXdlcihiZWFuQ29tcG9zaXRlKTsgICAgCi0gICAgVGFibGUgYmVhblRhYmxlID0gYmVhbkxpc3QuZ2V0VGFibGUoKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBnZC5oZWlnaHRIaW50ID0gMTAwOwotICAgIGJlYW5UYWJsZS5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBiZWFuVGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkKLSAgICAgIHsKLSAgICAgICAgVGFibGUgdGFibGUgPSAoVGFibGUpIChldnQud2lkZ2V0KTsKLSAgICAgICAgc2VsZWN0ZWRCZWFuSW5kZXggPSBuZXcgSW50ZWdlcih0YWJsZS5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLSAgICAgICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotICAgICAgfQotICAgIH0pOwotICAgIGJlYW5UYWJsZS5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9UQUJMRV9CRUFOX05BTUVTKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGJlYW5UYWJsZSwgSU5GT1BPUF9QRUJEX1RBQkxFX0JFQU5fTkFNRVMpOwotICAgIAotICAgIGlmIChlYXJDb21wb25lbnRzICE9IG51bGwgJiYgZWFyQ29tcG9uZW50cy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIHNldEJlYW5MaXN0KGVhckNvbXBvbmVudHNbMF0pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0QmVhbkxpc3QobnVsbCk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgaXMgYSBkdW1teSBsYWJlbCB0aGF0IGZvcmNlcyB0aGUgc3RhdHVzIGxhYmVsIGludG8gdGhlIHNlY29uZAotICAgIC8vIGNvbHVtbi4KLSAgICBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTlVMTCkuc2V0VGV4dCgiIik7Ci0gICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZEVBUk5hbWVzVG9MaXN0KCkKLSAgewotICAgIGVhckxpc3QuYWRkKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TSE9XX0FMTF9TVEFURUxFU1NfU0VTU0lPTl9FSkJTKTsKLSAgICBpZiAoZWFyQ29tcG9uZW50cyAhPSBudWxsICYmIGVhckNvbXBvbmVudHMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZWFyQ29tcG9uZW50cy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGVhckxpc3QuYWRkKGVhckNvbXBvbmVudHNbaW5kZXhdLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBlYXJMaXN0LnNldFRleHQoZWFyTGlzdC5nZXRJdGVtKDEpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0QmVhbkxpc3QoSVZpcnR1YWxDb21wb25lbnQgZWFyQ29tcG9uZW50KQotICB7ICAgIAotICAgIFN0cmluZyBjYWNoZUtleSA9IChlYXJDb21wb25lbnQgPT0gbnVsbCk/IGVhckxpc3QuZ2V0SXRlbSgwKTogZWFyQ29tcG9uZW50LmdldE5hbWUoKTsKLSAgICAKLSAgICAvL0NoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgY2FjaGVkIHJlc3VsdHMgZm9yIHRoaXMgY2FzZS4gSWYgc28sIHVzZSB0aGUKLSAgICAvL2NhY2hlZCB2YWx1ZXMgYW5kIHJldHVybi4gSWYgbm90LCBjb250aW51ZS4KLSAgICBFSkJUYWJsZVZhbHVlcyBjYWNoZWRWYWx1ZXMgPSAoRUpCVGFibGVWYWx1ZXMpZWpiVmFsdWVzQnlFQVJTZWxlY3Rpb25DYWNoZS5nZXQoY2FjaGVLZXkpOwotICAgIGlmIChjYWNoZWRWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBlamJCZWFuTmFtZXMgPSBjYWNoZWRWYWx1ZXMuY2FjaGVkRWpiQmVhbk5hbWVzOwotICAgICAgZWpiQ29tcG9uZW50TmFtZXMgPSBjYWNoZWRWYWx1ZXMuY2FjaGVkRWpiQ29tcG9uZW50TmFtZXM7Ci0gICAgICBlamJDb21wb25lbnRQcm9qZWN0TmFtZXMgPSBjYWNoZWRWYWx1ZXMuY2FjaGRlZEVqYkNvbXBvbmVudFByb2plY3ROYW1lczsKLSAgICAgIGJlYW5MaXN0LnNldERhdGEoZWpiQmVhbk5hbWVzLCBlamJDb21wb25lbnROYW1lcyk7Ci0gICAgICBiZWFuTGlzdC5zZXRJbnB1dChlamJCZWFuTmFtZXMpOyAgICAKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgSVZpcnR1YWxDb21wb25lbnRbXSBlamJDb21wb25lbnRzQXJyYXkgPSBudWxsOwotICAgIGlmIChlYXJDb21wb25lbnQgPT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGVqYkNvbXBvbmVudHNBcnJheSA9IEoyRUVVdGlscy5nZXRBbGxFSkJDb21wb25lbnRzKCk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlamJDb21wb25lbnRzQXJyYXkgPSBKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdFSkJDb21wb25lbnRzRnJvbUVBUihlYXJDb21wb25lbnQuZ2V0UHJvamVjdCgpKTsKLSAgICB9Ci0gICAgCi0gICAgVGFibGUgYmVhblRhYmxlID0gYmVhbkxpc3QuZ2V0VGFibGUoKTsKLSAgICBiZWFuVGFibGUucmVtb3ZlQWxsKCk7Ci0gICAgZWpiQmVhbk5hbWVzID0gbmV3IFZlY3RvcigpOwotICAgIGVqYkNvbXBvbmVudE5hbWVzID0gbmV3IFZlY3RvcigpOwotICAgIGVqYkNvbXBvbmVudFByb2plY3ROYW1lcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZWpiQ29tcG9uZW50c0FycmF5Lmxlbmd0aDsgaW5kZXgrKykKLSAgICB7Ci0gICAgCUlQcm9qZWN0IHByb2plY3QgPSBlamJDb21wb25lbnRzQXJyYXlbaW5kZXhdLmdldFByb2plY3QoKTsKLSAgICAgICAgVmVjdG9yIGJlYW5zID0gSjJFRVV0aWxzLmdldEJlYW5OYW1lcyhwcm9qZWN0KTsKLSAgICAgICAgU3RyaW5nIGNvbXBvbmVudE5hbWUgPSBlamJDb21wb25lbnRzQXJyYXlbaW5kZXhdLmdldE5hbWUoKTsKLSAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gZWpiQ29tcG9uZW50c0FycmF5W2luZGV4XS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpOwotICAgICAgICBlamJCZWFuTmFtZXMuYWRkQWxsKGJlYW5zKTsKLSAgICAgICAgZWpiQ29tcG9uZW50TmFtZXMuYWRkQWxsKENvbGxlY3Rpb25zLm5Db3BpZXMoYmVhbnMuc2l6ZSgpLCBjb21wb25lbnROYW1lKSk7Ci0gICAgICAgIGVqYkNvbXBvbmVudFByb2plY3ROYW1lcy5hZGRBbGwoQ29sbGVjdGlvbnMubkNvcGllcyhiZWFucy5zaXplKCksIHByb2plY3ROYW1lKSk7ICAgICAgICAgICAgICAgIAotICAgCi0gICAgfQotICAgIGJlYW5MaXN0LnNldERhdGEoZWpiQmVhbk5hbWVzLCBlamJDb21wb25lbnROYW1lcyk7Ci0gICAgYmVhbkxpc3Quc2V0SW5wdXQoZWpiQmVhbk5hbWVzKTsKLSAgICAKLSAgICAvL0NhY2hlIHRoZSByZXN1bHRzIGZvciBuZXh0IHRpbWUKLSAgICBFSkJUYWJsZVZhbHVlcyBlamJUYWJsZVZhbHVlcyA9IG5ldyBFSkJUYWJsZVZhbHVlcygpOwotICAgIGVqYlRhYmxlVmFsdWVzLmNhY2hlZEVqYkJlYW5OYW1lcyA9IGVqYkJlYW5OYW1lczsKLSAgICBlamJUYWJsZVZhbHVlcy5jYWNoZWRFamJDb21wb25lbnROYW1lcyA9IGVqYkNvbXBvbmVudE5hbWVzOwotICAgIGVqYlRhYmxlVmFsdWVzLmNhY2hkZWRFamJDb21wb25lbnRQcm9qZWN0TmFtZXMgPSBlamJDb21wb25lbnRQcm9qZWN0TmFtZXM7Ci0gICAgZWpiVmFsdWVzQnlFQVJTZWxlY3Rpb25DYWNoZS5wdXQoY2FjaGVLZXksIGVqYlRhYmxlVmFsdWVzKTsgICAgICAgIAotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikKLSAgewotICAgIGlmIChpbml0aWFsU2VsZWN0aW9uICE9IG51bGwgJiYgIWluaXRpYWxTZWxlY3Rpb24uaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBpbml0aWFsU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlc3Npb24pCi0gICAgICB7Ci0gICAgICAgIFNlc3Npb24gc2Vzc2lvbiA9IChTZXNzaW9uKSBvYmplY3Q7Ci0gICAgICAgIEVKQkphciBqYXIgPSBzZXNzaW9uLmdldEVqYkphcigpOwotICAgICAgICBpZiAoamFyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVhckNvbXBvbmVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotCQkJICAgICAgSVZpcnR1YWxDb21wb25lbnRbXSBlamJDb21wb25lbnRzID0gSjJFRVV0aWxzLmdldFJlZmVyZW5jaW5nRUpCQ29tcG9uZW50c0Zyb21FQVIoZWFyQ29tcG9uZW50c1tpXS5nZXRQcm9qZWN0KCkpOwotCQkJICAgICAgZm9yIChpbnQgaj0wOyBqIDxlamJDb21wb25lbnRzLmxlbmd0aDsgaisrKQotCQkJICAgICAgewotICAgICAgICAgICAgICBFSkJBcnRpZmFjdEVkaXQgIGVqYkVkaXQgPSBudWxsOwotICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGVqYkVkaXQgPSBFSkJBcnRpZmFjdEVkaXQuZ2V0RUpCQXJ0aWZhY3RFZGl0Rm9yUmVhZChlamJDb21wb25lbnRzW2pdKTsKLSAgICAgICAgICAgICAgICBFSkJSZXNvdXJjZSBlamJSZXMgPSBlamJFZGl0LmdldEVKQkphclhtaVJlc291cmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVqYlJlcy5nZXRFSkJKYXIoKSA9PSBqYXIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZWFyTGlzdC5zZXRUZXh0KGVhckNvbXBvbmVudHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgIHNldEJlYW5MaXN0KGVhckNvbXBvbmVudHNbaV0pOwotICAgICAgICAgICAgICAgICAgYmVhbkxpc3Quc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG5ldyBJbnRlZ2VyW117bmV3IEludGVnZXIoZWpiQmVhbk5hbWVzLmluZGV4T2Yoc2Vzc2lvbi5nZXROYW1lKCkpKX0pKTsKLSAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQmVhbkluZGV4ID0gbmV3IEludGVnZXIoZWpiQmVhbk5hbWVzLmluZGV4T2Yoc2Vzc2lvbi5nZXROYW1lKCkpKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAotCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVqYkVkaXQhPW51bGwpCi0gICAgICAgICAgICAgICAgICBlamJFZGl0LmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgfQotCQkJCQotCQkJICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICAvL0hhdmVuJ3QgcmV0dXJuZWQgeWV0IHNvIHdlIGRpZCBub3QgZmluZCBhbiBFQVIgdGhhdCBjb250YWlucyB0aGlzIEVKQi4gSW5pdGlhbGl6ZSB0aGUgcGFnZSBhY2NvcmRpbmdseS4KLSAgICAgICAgICBlYXJMaXN0LnNldFRleHQoZWFyTGlzdC5nZXRJdGVtKDApKTsKLSAgICAgICAgICBzZXRCZWFuTGlzdChudWxsKTsKLSAgICAgICAgICBiZWFuTGlzdC5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obmV3IEludGVnZXJbXXtuZXcgSW50ZWdlcihlamJCZWFuTmFtZXMuaW5kZXhPZihzZXNzaW9uLmdldE5hbWUoKSkpfSkpOwotICAgICAgICAgIHNlbGVjdGVkQmVhbkluZGV4ID0gbmV3IEludGVnZXIoZWpiQmVhbk5hbWVzLmluZGV4T2Yoc2Vzc2lvbi5nZXROYW1lKCkpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKQotICAgIAkgIGRpc3BsYXlTdHJpbmdfID0gKFN0cmluZykgb2JqZWN0OyAvLyBzYXZlIGZvciBkaXNwbGF5IHVzZQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKQotICB7Ci0JCVN0cmluZyBzZWxFSkJOYW1lID0gKFN0cmluZykgZWpiQmVhbk5hbWVzLmdldChzZWxlY3RlZEJlYW5JbmRleAotCQkJCS5pbnRWYWx1ZSgpKTsKLQkJaWYgKHNlbEVKQk5hbWUgIT0gbnVsbCkgewotCQkJLy8gR2V0IHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGJlYW4gdG8gZ2V0IHRoZSBjb3JyZXNwb25kaW5nCi0JCQkvLyBTZXNzaW9uIG9iamVjdC4KLQkJCS8vIFRoZW4gcmV0dXJuIHRoZSBTZXNzaW9uIG9iamVjdCBpbiBhbiBJU3RydWN0dXJlZFNlbGVjdGlvbi4KLQkJCVN0cmluZyBlamJDb21wb25lbnROYW1lID0gKFN0cmluZykgZWpiQ29tcG9uZW50TmFtZXMKLQkJCQkJLmdldChzZWxlY3RlZEJlYW5JbmRleC5pbnRWYWx1ZSgpKTsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50IGVqYkNvbXBvbmVudCA9IENvbXBvbmVudFV0aWxpdGllcwotCQkJCQkuZ2V0Q29tcG9uZW50KGVqYkNvbXBvbmVudE5hbWUpOwotCQkJSVByb2plY3QgcHJvamVjdCA9IGVqYkNvbXBvbmVudC5nZXRQcm9qZWN0KCk7Ci0JCQlJTW9kZWxQcm92aWRlciBwcm92aWRlciA9IE1vZGVsUHJvdmlkZXJNYW5hZ2VyCi0JCQkJCS5nZXRNb2RlbFByb3ZpZGVyKHByb2plY3QpOwotCQkJT2JqZWN0IG1vZGVsT2JqZWN0ID0gcHJvdmlkZXIuZ2V0TW9kZWxPYmplY3QoKTsKLQkJCUxpc3Qgc2Vzc2lvbnMgPSBuZXcgVmVjdG9yKCk7Ci0JCQlib29sZWFuIGlzSjJFRTUgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5pc0pFRVByb2plY3QocHJvamVjdCk7Ci0JCQlpZiAoaXNKMkVFNSkgewotCSAgICAJCS8vYSBKRUU1IHByb2plY3QKLQkgICAgCQlFbnRlcnByaXNlQmVhbnMgZUJlYW5zID0gKChvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FSkJKYXIpbW9kZWxPYmplY3QpLmdldEVudGVycHJpc2VCZWFucygpOwotCSAgICAJCWlmIChlQmVhbnMgIT1udWxsKQotCSAgICAJCQlzZXNzaW9ucyA9IGVCZWFucy5nZXRTZXNzaW9uQmVhbnMoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2Vzc2lvbnMgPSAoKEVKQkphcikgbW9kZWxPYmplY3QpLmdldFNlc3Npb25CZWFucygpOwotCQkJfQotCQkJZm9yIChJdGVyYXRvciBpdDIgPSBzZXNzaW9ucy5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykgewotCQkJCU9iamVjdCBuZXh0ID0gKGl0Mi5uZXh0KCkpOwotCQkJCWlmIChpc0oyRUU1KSB7Ci0JCQkJCVNlc3Npb25CZWFuIHNlc3Npb24gPSAoU2Vzc2lvbkJlYW4pIG5leHQ7Ci0JCQkJCWlmIChzZWxFSkJOYW1lLmVxdWFscyhzZXNzaW9uLmdldEVqYk5hbWUoKSkpCi0JCQkJCQlyZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oCi0JCQkJCQkJCW5ldyBTZXNzaW9uQmVhbltdIHsgc2Vzc2lvbiB9KTsKLQotCQkJCX0gZWxzZSB7Ci0JCQkJCVNlc3Npb24gc2Vzc2lvbiA9IChTZXNzaW9uKSBuZXh0OwotCQkJCQlpZiAoc2VsRUpCTmFtZS5lcXVhbHMoc2Vzc2lvbi5nZXROYW1lKCkpKQotCQkJCQkJcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKAotCQkJCQkJCQluZXcgU2Vzc2lvbltdIHsgc2Vzc2lvbiB9KTsKLQkJCQl9Ci0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obmV3IE9iamVjdFswXSk7Ci0JfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgU3RyaW5nIHByb2plY3ROYW1lID0gZ2V0U2VsZWN0ZWRQcm9qZWN0KCk7Ci0gICAgaWYgKHByb2plY3ROYW1lICE9IG51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCkgPiAwKQotICAgICAgcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBpZiAoc2VsZWN0ZWRCZWFuSW5kZXggIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gKFN0cmluZykgKGVqYkNvbXBvbmVudE5hbWVzLmVsZW1lbnRBdChzZWxlY3RlZEJlYW5JbmRleC5pbnRWYWx1ZSgpKSk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9ICAgIAotICAKLSAgcHVibGljIFN0cmluZyBnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpIHsKLQkgIAotCSAgaWYgKGVqYkJlYW5OYW1lcyA9PSBudWxsKQotCQkgIHJldHVybiBkaXNwbGF5U3RyaW5nXzsKLQkgIAotCSAgaW50IGluZGV4ID0gc2VsZWN0ZWRCZWFuSW5kZXggPT0gbnVsbCA/IDAgOiBzZWxlY3RlZEJlYW5JbmRleC5pbnRWYWx1ZSgpOwotCSAgU3RyaW5nIGJlYW4gPSAoU3RyaW5nKSBlamJCZWFuTmFtZXMuZ2V0KGluZGV4KTsKLQkgIHJldHVybiBiZWFuID09IG51bGwgPyBkaXNwbGF5U3RyaW5nXyA6IGJlYW47Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7ICAJCi0gICAgaWYgKHNlbGVjdGVkQmVhbkluZGV4ID09IG51bGwpCi0gICAgewotICAgIAlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoICIiICk7Ci0gICAgfQotICAgIAotICAJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQb2ludCBnZXRXaWRnZXRTaXplKCkgewotCXJldHVybiBuZXcgUG9pbnQoNDUwLCAzNTApOwotICB9IAotICAgIAotICBwcml2YXRlIGNsYXNzIEVKQlRhYmxlVmFsdWVzCi0gIHsKLSAgICBWZWN0b3IgY2FjaGVkRWpiQmVhbk5hbWVzOwotICAgIFZlY3RvciBjYWNoZWRFamJDb21wb25lbnROYW1lczsKLSAgICBWZWN0b3IgY2FjaGRlZEVqYkNvbXBvbmVudFByb2plY3ROYW1lczsgCi0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0VKQlRhYmxlVmlld2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0VKQlRhYmxlVmlld2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NWI0ZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJUYWJsZVZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDE0MTE5NCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotCi1wdWJsaWMgY2xhc3MgRUpCVGFibGVWaWV3ZXIgZXh0ZW5kcyBUYWJsZVZpZXdlcgotewotICBwcml2YXRlIFZlY3RvciBiZWFuTmFtZXM7Ci0gIHByaXZhdGUgVmVjdG9yIHByb2plY3ROYW1lczsKLQotICBwdWJsaWMgRUpCVGFibGVWaWV3ZXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIHN1cGVyKHBhcmVudCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuRlVMTF9TRUxFQ1RJT04pOwotICAgIAotICAgIFN0cmluZyBjb2x1bW5Qcm9wZXJ0aWVzW10gPSB7Q29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX1RJVExFX0VKQl9CRUFOX05BTUVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfVElUTEVfRUpCX1BST0pFQ1RfTkFNRX07Ci0gICAgaW50IGNvbHVtbnNXaWR0aFtdID0gezYwLCAyMH07Ci0gICAgaW50IGNvbHVtbk1pbnNbXSA9IHsxNzUsIDEyNX07Ci0gICAgCi0gICAgVGFibGUgdGFibGUgPSBnZXRUYWJsZSgpOwotICAgIHRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0gICAgdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOwotICAgIFRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uUHJvcGVydGllcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBUYWJsZUNvbHVtbiBjb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FLCBpKTsKLSAgICAgIGNvbHVtbi5zZXRUZXh0KGNvbHVtblByb3BlcnRpZXNbaV0pOwotICAgICAgY29sdW1uLnBhY2soKTsKLSAgICAgIGxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKGNvbHVtbnNXaWR0aFtpXSwgY29sdW1uTWluc1tpXSwgdHJ1ZSkpOyAgICAgIAotICAgIH0KLSAgICB0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBzZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbHVtblByb3BlcnRpZXMpOwotICAgIHNldENvbnRlbnRQcm92aWRlcihuZXcgRUpCQ29udGVudFByb3ZpZGVyKCkpOwotICAgIHNldExhYmVsUHJvdmlkZXIobmV3IEVKQkxhYmVsUHJvdmlkZXIoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERhdGEoVmVjdG9yIGJlYW5OYW1lcywgVmVjdG9yIHByb2plY3ROYW1lcykKLSAgewotICAgIHRoaXMuYmVhbk5hbWVzID0gYmVhbk5hbWVzOwotICAgIHRoaXMucHJvamVjdE5hbWVzID0gcHJvamVjdE5hbWVzOwotICB9Ci0gIHByaXZhdGUgY2xhc3MgRUpCTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbkluZGV4KQotICAgIHsKLSAgICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEludGVnZXIpCi0gICAgICB7Ci0gICAgICAgIGludCBpbmRleCA9ICgoSW50ZWdlcikgb2JqZWN0KS5pbnRWYWx1ZSgpOwotICAgICAgICBpZiAoY29sdW1uSW5kZXggPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiAoU3RyaW5nKSAoYmVhbk5hbWVzLmVsZW1lbnRBdChpbmRleCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvbHVtbkluZGV4ID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKFN0cmluZykgKHByb2plY3ROYW1lcy5lbGVtZW50QXQoaW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbkluZGV4KQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotICBwdWJsaWMgY2xhc3MgRUpCQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoYmVhbk5hbWVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGludCBzaXplID0gYmVhbk5hbWVzLnNpemUoKTsKLSAgICAgICAgT2JqZWN0W10gcmVzdWx0ID0gbmV3IE9iamVjdFtzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHRbaW5kZXhdID0gbmV3IEludGVnZXIoaW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGQsIE9iamVjdCBuZXdvYmopCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRGVsZXRlZChPYmplY3Qgb2JqZWN0KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSGFuZGxlclRhYmxlSXRlbS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9IYW5kbGVyVGFibGVJdGVtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YmU2ZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9IYW5kbGVyVGFibGVJdGVtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Qb3J0Q29tcG9uZW50OwotCi0KLQotcHVibGljIGNsYXNzIEhhbmRsZXJUYWJsZUl0ZW0gewotICAKLSAgcHJpdmF0ZSBTdHJpbmcgaGFuZGxlckNsYXNzTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgaGFuZGxlck5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIHBvcnROYW1lOwotICBwcml2YXRlIGludCBpbmRleDsKLSAgCi0gIHByaXZhdGUgUG9ydENvbXBvbmVudCBwb3J0OwotICBwcml2YXRlIE9iamVjdCBoYW5kbGVyOwotICBwcml2YXRlIE9iamVjdCB3c0Rlc2NSZWY7Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaGFuZGxlckNsYXNzTmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SGFuZGxlckNsYXNzTmFtZSgpIHsKLSAgICByZXR1cm4gaGFuZGxlckNsYXNzTmFtZTsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGhhbmRsZXJDbGFzc05hbWUgVGhlIGhhbmRsZXJDbGFzc05hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGFuZGxlckNsYXNzTmFtZShTdHJpbmcgaGFuZGxlckNsYXNzTmFtZSkgewotICAgIHRoaXMuaGFuZGxlckNsYXNzTmFtZSA9IGhhbmRsZXJDbGFzc05hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaGFuZGxlck5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhhbmRsZXJOYW1lKCkgewotICAgIHJldHVybiBoYW5kbGVyTmFtZTsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGhhbmRsZXJOYW1lIFRoZSBoYW5kbGVyTmFtZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyTmFtZShTdHJpbmcgaGFuZGxlck5hbWUpIHsKLSAgICB0aGlzLmhhbmRsZXJOYW1lID0gaGFuZGxlck5hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcG9ydC4KLSAgICovCi0gIHB1YmxpYyBQb3J0Q29tcG9uZW50IGdldFBvcnQoKSB7Ci0gICAgcmV0dXJuIHBvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBwb3J0IFRoZSBwb3J0IHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBvcnQoUG9ydENvbXBvbmVudCBwb3J0KSB7Ci0gICAgdGhpcy5wb3J0ID0gcG9ydDsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBoYW5kbGVyLgotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRIYW5kbGVyKCkgewotICAgIHJldHVybiBoYW5kbGVyOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gaGFuZGxlciBUaGUgaGFuZGxlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyKE9iamVjdCBoYW5kbGVyKSB7Ci0gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwb3J0TmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE5hbWUoKSB7Ci0gICAgcmV0dXJuIHBvcnROYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gcG9ydE5hbWUgVGhlIHBvcnROYW1lIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBvcnROYW1lKFN0cmluZyBwb3J0TmFtZSkgewotICAgIHRoaXMucG9ydE5hbWUgPSBwb3J0TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGluZGV4LgotICAgKi8KLSAgcHVibGljIGludCBnZXRJbmRleCgpIHsKLSAgICByZXR1cm4gaW5kZXg7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5kZXgoaW50IGluZGV4KSB7Ci0gICAgdGhpcy5pbmRleCA9IGluZGV4OwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdzRGVzY1JlZi4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0V3NEZXNjUmVmKCkgewotICAgIHJldHVybiB3c0Rlc2NSZWY7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c0Rlc2NSZWYgVGhlIHdzRGVzY1JlZiB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXc0Rlc2NSZWYoT2JqZWN0IHdzRGVzY1JlZikgewotICAgIHRoaXMud3NEZXNjUmVmID0gd3NEZXNjUmVmOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0lPYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSU9iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjgwYzM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSU9iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEwICAgMTM1NDQxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDIwICAgMTM1OTEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhQ29udHJpYnV0b3I7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBleHRyYSBtZXRob2RzIHRoYXQgT2JqZWN0IFNlbGVjdGlvbiBXaWRnZXRzCi0gKiBuZWVkIHRvIGltcGxlbWVudC4gIE9iamVjdCBTZWxlY3Rpb24gV2lkZ2V0cyBhcmUgZGlzcGxheWVkIG9uIHBhZ2UgMgotICogb2YgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSU9iamVjdFNlbGVjdGlvbldpZGdldCBleHRlbmRzIFdpZGdldERhdGFDb250cmlidXRvcgotewotICAvKioKLSAgICogVGhlIGZyYW1ld29yayB3aWxsIGNhbGwgdGhpcyBtZXRob2QgdG8gc2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKiB2YWx1ZSB0aGF0IHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gdGhlIHVzZXIgc3BlY2lmaWVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKTsKLSAgCi0gIC8qKgotICAgKiBUaGUgaW50ZW50IG9mIHRoZSBPYmplY3QgU2VsZWN0aW9uIFdpZGdldCBpcyB0aGF0IHRoZSB1c2VyIGhhcwotICAgKiB0aGUgb3Bwb3J0dW5pdHkgY2hhbmdlL2ZpbmQgdGhlIG9iamVjdCB0aGF0IHRoZXkgd2FudCB0byB0dXJuIGludG8KLSAgICogYSBXZWIgc2VydmljZS4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgYW4gSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0IHRoYXQgdGhlIHVzZXIKLSAgICogd2FudCB0byB0dXJuIGludG8gYSBXZWIgc2VydmljZS4gIFRoaXMgb2JqZWN0IG1heSBiZSBkaWZmZXJlbnQgdGhhbgotICAgKiB0aGUgaW5pdGlhbFNlbGVjdGlvbiBwYXNzZWQgaW4gYnkgdGhlIHNldEluaXRpYWxTZWxlY3Rpb24gbWV0aG9kLgotICAgKi8KLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpOwotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSBvYmplY3RTZWxlY3Rpb24gcGFyYW1ldGVyIGlzIHZhbGlkIGZvcgotICAgKiB0aGlzIE9iamVjdCBzZWxlY3Rpb24gd2lkZ2V0LiAgQW4gZXJyb3Igc3RhdHVzIHNob3VsZCBiZSByZXR1cm5lZAotICAgKiBpZiB0aGlzIG9iamVjdCBpcyBub3QgdmFsdWUuICBPdGhlcndpc2UsIGFuZCBvayBzdGF0dXMgc2hvdWxkIGJlCi0gICAqIHJldHVybmVkCi0gICAqIAotICAgKiBAcGFyYW0gb2JqZWN0U2VsZWN0aW9uIHRoZSBvYmplY3QgdG8gYmUgdmFsaWRhdGVkLgotICAgKiBAcmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElQcm9qZWN0IHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGlvbgotICAgKiBvYmplY3QgdGhhdCB0aGUgdXNlciBoYXMgY2hvc2VuIHdpdGggdGhpcyB3aWRnZXQuICBUaGUgdmFsdWUgY2FuIGJlIAotICAgKiBudWxsIGlmIHRoZXJlIGlzIG5vIElQcm9qZWN0IGZvciB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgSVZpcnR1YWxDb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0aW9uCi0gICAqIG9iamVjdCB0aGF0IHRoZSB1c2VyIGhhcyBjaG9zZW4gd2l0aCB0aGlzIHdpZGdldC4gIFRoZSB2YWx1ZSBjYW4gYmUgCi0gICAqIG51bGwgaWYgdGhlcmUgaXMgbm8gSVZpcnR1YWxDb21wb25lbnQgZm9yIHRoaXMgb2JqZWN0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzdHJpbmcgdG8gZGlzcGxheWVkIGluIHRoZSBVSSBmb3IgdGhlIHNlbGVjdGVkIG9iamVjdAotICAgKi8KLSAgcHVibGljICBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IGluaXRpYWwgc2l6ZSBmb3IgdGhlIHdpZGdldCB0byBiZSBjYWxsZWQgZnJvbSBnZXRJbml0aWFsU2l6ZSBmcm9tIGFueSBwYXJlbnQgZGlhbG9nCi0gICAqLwotICBwdWJsaWMgUG9pbnQgZ2V0V2lkZ2V0U2l6ZSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gcyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IHNlbGVjdGlvbgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgdmFsaWQgb2JqZWN0IHNlbGVjdGlvbgotICAgKi8gIAotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgcyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0phdmFCZWFuU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSmF2YUJlYW5TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTc2Yjg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSmF2YUJlYW5TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDExNiAgIDE1OTYxOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUHJvamVjdCBhbmQgRUFSIG5vdCBkZWZhdWx0ZWQgcHJvcGVybHkgd2hlbiB3aXphcmQgbGF1bmNoZWQgZnJvbSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggaW4gSjJFRSBQcm9qZWN0IEV4cGxvcmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ29tcGlsYXRpb25Vbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5pbnRlcm5hbC5pbXBsLlBvcnRDb21wb25lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhQmVhblNlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgewotICAgICAgT2JqZWN0IHNlbCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pdmFsdWUpLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKHNlbCBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oY29tcHV0ZUZ1bGx5UXVhbGlmaWVkSmF2YU5hbWUoKElGaWxlKXNlbCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLSAgICAgIHsKLSAgICAgICAgSVJlc291cmNlIHJlcyA9ICgoSUNvbXBpbGF0aW9uVW5pdClzZWwpLmdldFJlc291cmNlKCk7Ci0gICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oY29tcHV0ZUZ1bGx5UXVhbGlmaWVkSmF2YU5hbWUoKElGaWxlKXJlcykpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0QmVhbk5hbWUoKFNlcnZpY2VJbXBsQmVhbikgc2VsKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHNlbCBpbnN0YW5jZW9mIFNlcnZsZXRMaW5rKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0QmVhbk5hbWUoKFNlcnZsZXRMaW5rKSBzZWwpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZUZ1bGx5UXVhbGlmaWVkSmF2YU5hbWUoSUZpbGUgcmVzb3VyY2UpCi0gIHsKLSAgICBJUGF0aCBwYXRoID0gcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKTsKLSAgICBTdHJpbmcgYmFzZW5hbWUgPSBwYXRoLmxhc3RTZWdtZW50KCk7Ci0gICAgU3RyaW5nIGJlYW5DbGFzcyA9ICIiOwotICAgIGlmIChiYXNlbmFtZSAhPSBudWxsICYmIGJhc2VuYW1lLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYmVhblBhY2thZ2UgPSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHMuZ2V0SmF2YVJlc291cmNlUGFja2FnZU5hbWUocGF0aCk7Ci0gICAgICBiZWFuQ2xhc3MgPSAoYmVhblBhY2thZ2UgPT0gbnVsbCB8fCBiZWFuUGFja2FnZS5sZW5ndGgoKSA9PSAwID8gYmFzZW5hbWUgOiAoYmVhblBhY2thZ2UgKyAiLiIgKyBiYXNlbmFtZSkpOwotICAgICAgaWYgKGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuamF2YSIpIHx8IGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuY2xhc3MiKSkKLSAgICAgICAgYmVhbkNsYXNzID0gYmVhbkNsYXNzLnN1YnN0cmluZygwLCBiZWFuQ2xhc3MubGFzdEluZGV4T2YoJy4nKSk7Ci0gICAgfQotICAgIHJldHVybiBiZWFuQ2xhc3M7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEJlYW5OYW1lKFNlcnZpY2VJbXBsQmVhbiBiZWFuKSB7Ci0gICAgRU9iamVjdCBlT2JqZWN0ID0gYmVhbi5lQ29udGFpbmVyKCk7Ci0gICAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBQb3J0Q29tcG9uZW50SW1wbCkgewotICAgICAgUG9ydENvbXBvbmVudEltcGwgcGNpID0gKFBvcnRDb21wb25lbnRJbXBsKSBlT2JqZWN0OwotICAgICAgcmV0dXJuIHBjaS5nZXRTZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UoKTsJICAgICAgCQotICAgIH0KLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEJlYW5OYW1lKFNlcnZsZXRMaW5rIGxpbmspIHsgICAgCi0gICAgRU9iamVjdCBlT2JqZWN0ID0gbGluay5lQ29udGFpbmVyKCk7Ci0gICAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pCi0gICAgICByZXR1cm4gZ2V0QmVhbk5hbWUoKFNlcnZpY2VJbXBsQmVhbikgZU9iamVjdCk7Ci0gICAgcmV0dXJuICIiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0phdmFCZWFuU2VsZWN0aW9uV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0phdmFCZWFuU2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZDQwMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9KYXZhQmVhblNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5CZWFuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuaW50ZXJuYWwuaW1wbC5Qb3J0Q29tcG9uZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbEJlYW5JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkphdmFSZXNvdXJjZUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuZGlhbG9nLkRpYWxvZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhQmVhblNlbGVjdGlvbldpZGdldCBleHRlbmRzIEFic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGltcGxlbWVudHMgSU9iamVjdFNlbGVjdGlvbldpZGdldAotewotICBwcml2YXRlIElQcm9qZWN0ICAgICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gbnVsbDsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgICAgICAgICAgcGFyZW50XyA9IG51bGw7Ci0gIHByaXZhdGUgSmF2YVJlc291cmNlRmlsdGVyIGZpbHRlcl8gPSBuZXcgSmF2YVJlc291cmNlRmlsdGVyKCk7Ci0gIHByaXZhdGUgSVJlc291cmNlICAgICAgICAgIGluaXRpYWxSZXNvdXJjZV8gPSBudWxsOwotICBwcml2YXRlIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyOwotICAKLSAgLypDT05URVhUX0lEIFBCQ0wwMDAxIGZvciB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUEJDTF9QQUdFID0gIlBCQ0wwMDAxIjsKLSAgCi0gIHByaXZhdGUgVGV4dCBiZWFuQ2xhc3NUZXh0XzsKLSAgLypDT05URVhUX0lEIFBCQ0wwMDAyIGZvciB0aGUgQmVhbiBTZWxlY3Rpb24gZmllbGQgb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BCQ0xfVEVYVF9CRUFOX0NMQVNTID0gIlBCQ0wwMDAyIjsKLQotICBwcml2YXRlIEJ1dHRvbiBiZWFuQ2xhc3NCcm93c2VCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUEJDTDAwMDMgZm9yIHRoZSBCZWFuIENsYXNzIEJyb3dzZSBidXR0b24gb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BCQ0xfQlVUVE9OX0JFQU5fQ0xBU1NfQlJPV1NFID0gIlBCQ0wwMDAzIjsKLQotICBwcml2YXRlIEJ1dHRvbiBiZWFuUmVzb3VyY2VCcm93c2VCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUEJDTDAwMDQgZm9yIHRoZSBCZWFuIFJlc291cmNlIEJyb3dzZSBidXR0b24gb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BCQ0xfQlVUVE9OX0JFQU5fUkVTT1VSQ0VfQlJPV1NFID0gIlBCQ0wwMDA0IjsKLSAgIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0JU3RyaW5nICAgICAgIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwkgIAotICAgIHRoaXMuc3RhdHVzTGlzdGVuZXIgPSBzdGF0dXNMaXN0ZW5lcjsKLSAgICBVSVV0aWxzICAgICAgdWlVdGlscyAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWRfICk7IAotICAgIAotICAgIHBhcmVudF8gPSBwYXJlbnQ7Ci0gICAgCi0gICAgQ29tcG9zaXRlIGdyb3VwID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgNCApOwotICAgIAotICAgIGdyb3VwLnNldFRvb2xUaXBUZXh0KCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQkNMX1BBR0UgKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBncm91cCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QQkNMX1BBR0UgKTsKLSAgICAKLSAgICBiZWFuQ2xhc3NUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CRUFOX0NMQVNTX05BTUUsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQkNMX1RFWFRfQkVBTl9DTEFTUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QQkNMX1RFWFRfQkVBTl9DTEFTUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIGJlYW5DbGFzc1RleHRfLmFkZE1vZGlmeUxpc3RlbmVyKAotICAgICAgbmV3IE1vZGlmeUxpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKQotICAgICAgICB7Ci0gICAgICAgICAgaGFuZGxlTW9kaWZ5QmVhbkNsYXNzVGV4dCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICAKLSAgICBiZWFuQ2xhc3NCcm93c2VCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCBncm91cCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9CUk9XU0VfQ0xBU1NFUywKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fQ0xBU1NfQlJPV1NFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9DTEFTU19CUk9XU0UgKTsKLSAgICBiZWFuQ2xhc3NCcm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJyb3dzZUNsYXNzZXMoKTsgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAKLSAgICBiZWFuUmVzb3VyY2VCcm93c2VCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCBncm91cCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9CUk9XU0VfRklMRVMsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQkNMX0JVVFRPTl9CRUFOX1JFU09VUkNFX0JST1dTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCQ0xfQlVUVE9OX0JFQU5fUkVTT1VSQ0VfQlJPV1NFICk7Ci0gICAgYmVhblJlc291cmNlQnJvd3NlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVCcm93c2VGaWxlcygpOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlTW9kaWZ5QmVhbkNsYXNzVGV4dCgpCi0gIHsKLSAgICBzdGF0dXNMaXN0ZW5lci5oYW5kbGVFdmVudChudWxsKTsKLSAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0gICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZUJyb3dzZUNsYXNzZXMoKQotICB7Ci0gICAgU2hlbGwgc2hlbGwgPSBwYXJlbnRfLmdldFNoZWxsKCk7Ci0gICAgSVR5cGUgaXR5cGUgPSBEaWFsb2dVdGlscy5icm93c2VDbGFzc2VzQXNJVHlwZShzaGVsbCwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0cygpLCBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKHNoZWxsKSk7Ci0gICAgaWYgKGl0eXBlICE9IG51bGwpCi0gICAgewotICAgICAgYmVhbkNsYXNzVGV4dF8uc2V0VGV4dChpdHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSVJlc291cmNlIHJlcyA9IGl0eXBlLmdldENvcnJlc3BvbmRpbmdSZXNvdXJjZSgpOwotICAgICAgICBpZiAocmVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IHJlcy5nZXRQcm9qZWN0KCk7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzKTsKLSAgICAgICAgICBpZiAoY29tcCE9bnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0gICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGptZSkKLSAgICAgIHsKLSAgICAgICAgc2VydmVyUHJvamVjdF8gPSBudWxsOwotICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlQnJvd3NlRmlsZXMoKQotICB7Ci0gICAgSVJlc291cmNlIHRvcFJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCk7Ci0gICAgSVJlc291cmNlIHJlc291cmNlID0gRGlhbG9nVXRpbHMuYnJvd3NlUmVzb3VyY2VzKCBwYXJlbnRfLmdldFNoZWxsKCksIHRvcFJlc291cmNlLCBpbml0aWFsUmVzb3VyY2VfLCBmaWx0ZXJfICk7Ci0gICAgc2V0QmVhbkNsYXNzKHJlc291cmNlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldEJlYW5DbGFzcyhJUmVzb3VyY2UgcmVzb3VyY2UpCi0gIHsKLSAgICBpZiggcmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlICkKLSAgICB7Ci0gICAgICBJUGF0aCAgcGF0aCAgICAgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotICAgICAgU3RyaW5nIGJhc2VuYW1lID0gcGF0aC5sYXN0U2VnbWVudCgpOwotICAgICAgCi0gICAgICBpZiggYmFzZW5hbWUgIT0gbnVsbCAmJiBiYXNlbmFtZS5sZW5ndGgoKSA+IDAgKQotICAgICAgewotICAgICAgICBTdHJpbmcgYmVhblBhY2thZ2UgPSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHMuZ2V0SmF2YVJlc291cmNlUGFja2FnZU5hbWUocGF0aCk7Ci0gICAgICAgIFN0cmluZyBiZWFuQ2xhc3MgPSAoYmVhblBhY2thZ2UgPT0gbnVsbCB8fCBiZWFuUGFja2FnZS5sZW5ndGgoKSA9PSAwID8gYmFzZW5hbWUgOiAoYmVhblBhY2thZ2UgKyAiLiIgKyBiYXNlbmFtZSkpOwotICAgICAgICAKLSAgICAgICAgaWYoIGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuamF2YSIpIHx8IGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuY2xhc3MiICkgKQotICAgICAgICB7Ci0gICAgICAgICAgYmVhbkNsYXNzID0gYmVhbkNsYXNzLnN1YnN0cmluZyggMCwgYmVhbkNsYXNzLmxhc3RJbmRleE9mKCcuJykgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYmVhbkNsYXNzVGV4dF8uc2V0VGV4dChiZWFuQ2xhc3MpOwotICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9ICBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihwYXRoKTsKLSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbXAhPW51bGwpCi0gICAgICAgIHsJCi0gICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBjb21wLmdldE5hbWUoKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRCZWFuQ2xhc3MoU2VydmljZUltcGxCZWFuSW1wbCBzZXJ2aWNlSW1wbCkKLSAgewotICAgIGlmKCBzZXJ2aWNlSW1wbCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBFT2JqZWN0IGVPYmplY3QgPSBzZXJ2aWNlSW1wbC5lQ29udGFpbmVyKCk7Ci0gICAgICBpZihlT2JqZWN0IGluc3RhbmNlb2YgUG9ydENvbXBvbmVudEltcGwpewotICAgICAgCVBvcnRDb21wb25lbnRJbXBsIHBjaSA9IChQb3J0Q29tcG9uZW50SW1wbCllT2JqZWN0OwotICAgICAgCVN0cmluZyBiZWFuQ2xhc3MgPSBwY2kuZ2V0U2VydmljZUVuZHBvaW50SW50ZXJmYWNlKCk7Ci0gICAgICAJYmVhbkNsYXNzVGV4dF8uc2V0VGV4dChiZWFuQ2xhc3MpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldEJlYW5DbGFzcyhCZWFuTGluayBzZXJ2aWNlSW1wbCkKLSAgewotICAgIGlmKCBzZXJ2aWNlSW1wbCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBFT2JqZWN0IGVPYmplY3QgPSBzZXJ2aWNlSW1wbC5lQ29udGFpbmVyKCk7Ci0gICAgICBpZihlT2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuSW1wbCl7Ci0gICAgICAJc2V0QmVhbkNsYXNzKChTZXJ2aWNlSW1wbEJlYW5JbXBsKWVPYmplY3QpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKGluaXRpYWxTZWxlY3Rpb24gIT0gbnVsbCAmJiAhaW5pdGlhbFNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgT2JqZWN0IG9iamVjdCA9IGluaXRpYWxTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAJSUZpbGUgaUZpbGUgPSAoSUZpbGUpb2JqZWN0OwotICAgICAgCVN0cmluZyBmaWxlRXh0ID0gaUZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAJaWYgKGZpbGVFeHQuZXF1YWxzKCJqYXZhIikgfHwgZmlsZUV4dC5lcXVhbHMoImNsYXNzIikpCi0gICAgICAgICAgc2V0QmVhbkNsYXNzKGlGaWxlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElDb21waWxhdGlvblVuaXQpCi0gICAgICAJc2V0QmVhbkNsYXNzKCgoSUNvbXBpbGF0aW9uVW5pdClvYmplY3QpLmdldFJlc291cmNlKCkpOwotICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuSW1wbCkKLSAgICAgIAlzZXRCZWFuQ2xhc3MoKFNlcnZpY2VJbXBsQmVhbkltcGwpb2JqZWN0KTsKLSAgICAgIGVsc2UgaWYob2JqZWN0IGluc3RhbmNlb2YgQmVhbkxpbmspCi0gICAgICAJc2V0QmVhbkNsYXNzKChCZWFuTGluaylvYmplY3QpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oYmVhbkNsYXNzVGV4dF8uZ2V0VGV4dCgpKTsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlclByb2plY3RfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIHJldHVybiBzZXJ2ZXJDb21wb25lbnROYW1lXzsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIFN0cmluZyBiZWFuQ2xhc3NOYW1lID0gYmVhbkNsYXNzVGV4dF8uZ2V0VGV4dCgpLnRyaW0oKTsKLSAgICBpZiAoYmVhbkNsYXNzTmFtZSA9PSBudWxsIHx8IGJlYW5DbGFzc05hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX0JFQU5fQ0FOTk9UX0JFX0VNUFRZKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgewotCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICByZXR1cm4gIkphdmEgYmVhbiBzdHJpbmcgIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzc3ZGM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvT2JqZWN0U2VsZWN0aW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotCi1wdWJsaWMgY2xhc3MgT2JqZWN0U2VsZWN0aW9uRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50IGltcGxlbWVudHMgQ29uZGl0aW9uCi17Ci0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXI7Ci0gIHByaXZhdGUgYm9vbGVhbiBoYXNPYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci0KLSAgcHVibGljIE9iamVjdFNlbGVjdGlvbkZyYWdtZW50KCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgQm9vbGVhbkZyYWdtZW50IGJvb2xGcmFnbWVudCA9IG5ldyBCb29sZWFuRnJhZ21lbnQobmV3IFNpbXBsZUZyYWdtZW50KCJPYmplY3RTZWxlY3Rpb25XaWRnZXQiKSwgbmV3IFNpbXBsZUZyYWdtZW50KCIiKSwgdGhpcyk7Ci0gICAgYWRkKGJvb2xGcmFnbWVudCk7Ci0gICAgYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCgpLCAiIikpOwotICAgIGhhc09iamVjdFNlbGVjdGlvbldpZGdldCA9IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBPYmplY3RTZWxlY3Rpb25XaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25GcmFnbWVudC5jbGFzcywgIlR5cGVSdW50aW1lU2VydmVyIiwgT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25GcmFnbWVudC5jbGFzcywgIlR5cGVSdW50aW1lU2VydmVyIiwgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiUHJvamVjdCIsIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbldpZGdldC5jbGFzcywgIkNvbXBvbmVudE5hbWUiLCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgewotICAgIHJldHVybiBoYXNPYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci0gIH0KLQotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHR5cGVSdW50aW1lU2VydmVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB0eXBlUnVudGltZVNlcnZlciBUaGUgdHlwZVJ1bnRpbWVTZXJ2ZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIpCi0gIHsKLSAgICB0aGlzLnR5cGVSdW50aW1lU2VydmVyID0gdHlwZVJ1bnRpbWVTZXJ2ZXI7Ci0gICAgaWYgKHR5cGVSdW50aW1lU2VydmVyICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHdzdCA9IHR5cGVSdW50aW1lU2VydmVyLmdldFR5cGVJZCgpOwotCi0gICAgICBpbnQgc2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQod3N0KTsKLSAgICAgIFN0cmluZyBpbXBsSWQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZCh3c3QpOwotICAgICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotICAgICAgewotICAgICAgICAvL011c3QgaGF2ZSBXU0RMIG9iamVjdCBzZWxlY3Rpb24uIE5vIGNob2ljZS4KLSAgICAgICAgaGFzT2JqZWN0U2VsZWN0aW9uV2lkZ2V0PXRydWU7ICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxCeUlkKGltcGxJZCk7Ci0gICAgICAgIGlmICh3c2ltcGwhPW51bGwpCi0gICAgICAgIHsgIAotICAgICAgICAgIFN0cmluZyBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9IHdzaW1wbC5nZXRPYmplY3RTZWxlY3Rpb25XaWRnZXQoKTsgCi0gICAgICAgICAgaGFzT2JqZWN0U2VsZWN0aW9uV2lkZ2V0ID0gb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgIT0gbnVsbCAmJiBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZC5sZW5ndGgoKSA+IDA7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNzhlMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODMwICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFVwZGF0ZWQgcGF0Y2ggZm9yIHRoaXMgZGVmZWN0LgotICogMjAwNzAxMTYgICAxNTk2MTggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFByb2plY3QgYW5kIEVBUiBub3QgZGVmYXVsdGVkIHByb3Blcmx5IHdoZW4gd2l6YXJkIGxhdW5jaGVkIGZyb20gSlNSLTEwOSBXZWIgc2VydmljZXMgYnJhbmNoIGluIEoyRUUgUHJvamVjdCBFeHBsb3JlcgotICogMjAwNzAzMjYgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWwuVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotCi1wdWJsaWMgY2xhc3MgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZF87Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gICBvYmplY3RTZWxlY3Rpb25fOwotICBwcml2YXRlIElPYmplY3RTZWxlY3Rpb25XaWRnZXQgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLSAgcHJpdmF0ZSBJUHJvamVjdCAgICAgICAgICAgICAgIHByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgICAgICBwYXJzZXJfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICAgIHRvcERvd25fID0gZmFsc2U7Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgICAvLyBUcmFuc2Zvcm1hdGlvbgotICAgIGlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRJZF8gIT0gbnVsbCAmJiBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZF8ubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyICAgICAgICAgID0gT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUcmFuc2Zvcm1lcihvYmplY3RTZWxlY3Rpb25XaWRnZXRJZF8pOwotICAgICAgT2JqZWN0ICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSB0cmFuc2Zvcm1lciA9PSBudWxsID8gbnVsbCA6IHRyYW5zZm9ybWVyLnRyYW5zZm9ybShvYmplY3RTZWxlY3Rpb25fKTsKLSAgICAgIAotICAgICAgaWYgKHRyYW5zZm9ybWVkU2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgICB7Ci0gICAgICAgIG9iamVjdFNlbGVjdGlvbl8gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pdHJhbnNmb3JtZWRTZWxlY3Rpb247Ci0gICAgICB9Ci0gICAgfQotCQotICAgIC8vIFZhbGlkYXRpb24KLSAgICBJU3RhdHVzIHN0YXR1cyA9IChvYmplY3RTZWxlY3Rpb25XaWRnZXRfICE9IG51bGwpID8gb2JqZWN0U2VsZWN0aW9uV2lkZ2V0Xy52YWxpZGF0ZVNlbGVjdGlvbihnZXRPYmplY3RTZWxlY3Rpb24oKSkgOiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBTdGF0dXMuT0sgJiYgZW52ICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIHNlKQotICAgICAgewotICAgICAgfQotICAgIH0KLQkKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB0eXBlUnVudGltZVNlcnZlciBUaGUgdHlwZVJ1bnRpbWVTZXJ2ZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIpCi0gIHsKLSAgICBpZiAodHlwZVJ1bnRpbWVTZXJ2ZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3N0ID0gdHlwZVJ1bnRpbWVTZXJ2ZXIuZ2V0VHlwZUlkKCk7Ci0KLSAgICAgIGludCBzY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh3c3QpOwotICAgICAgU3RyaW5nIGltcGxJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHdzdCk7Ci0KLSAgICAgIFdlYlNlcnZpY2VJbXBsIHdzaW1wbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsQnlJZChpbXBsSWQpOwotCSAgICAvL0lXZWJTZXJ2aWNlVHlwZSB3c3QgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlVHlwZUJ5SWQodHlwZVJ1bnRpbWVTZXJ2ZXIuZ2V0VHlwZUlkKCkpOwotCi0gICAgICBpZiAod3NpbXBsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9IG51bGw7Ci0gICAgICAgIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikKLSAgICAgICAgewotICAgICAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uV2lkZ2V0IjsKLSAgICAgICAgICB0b3BEb3duXyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSB3c2ltcGwuZ2V0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0KCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICAKLQkJICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkXyA9IG9iamVjdFNlbGVjdGlvbldpZGdldElkOwotICAgICAgICAKLQkJICAgIE9iamVjdCBvYmplY3QgPSBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFNlbGVjdGlvbldpZGdldChvYmplY3RTZWxlY3Rpb25XaWRnZXRJZF8pOwotICAgICAgICAKLSAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25XaWRnZXQgKQotICAgICAgICB7Ci0gICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9IChJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KW9iamVjdDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlbGVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIG9iamVjdFNlbGVjdGlvbl87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZWxlY3Rpb24gVGhlIHNlbGVjdGlvbiB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gICAgb2JqZWN0U2VsZWN0aW9uXyA9IG9iamVjdFNlbGVjdGlvbjsKLSAgICAKLSAgICAvL1NldCB0aGUgcHJvamVjdCBpZiB5b3UgY2FuCi0gICAgaWYgKHByb2plY3RfPT1udWxsKQotICAgIHsKLSAgICAgIHByb2plY3RfID0gZ2V0UHJvamVjdEZyb21PYmplY3RTZWxlY3Rpb24ob2JqZWN0U2VsZWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgLy9TZXQgdGhlIGNvbXBvbmVudE5hbWUgaWYgeW91IGNhbgotICAgIGlmIChjb21wb25lbnROYW1lXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGNvbXBvbmVudE5hbWVfID0gZ2V0Q29tcG9uZW50TmFtZUZyb21PYmplY3RTZWxlY3Rpb24ob2JqZWN0U2VsZWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIFdTREwgc2VsZWN0aW9uIG9iamVjdC4gIElmIGl0IGlzIHdlIG5lZWQKLSAgICAvLyB0byB1bndyYXAgaXQuCi0gICAgaWYoIG9iamVjdFNlbGVjdGlvbiAhPSBudWxsICYmICFvYmplY3RTZWxlY3Rpb24uaXNFbXB0eSgpICkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gb2JqZWN0U2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgCi0gICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgV1NETFNlbGVjdGlvbldyYXBwZXIgKQotICAgICAgewotICAgICAgICBXU0RMU2VsZWN0aW9uV3JhcHBlciB3c2RsV3JhcHBlciA9IChXU0RMU2VsZWN0aW9uV3JhcHBlcilvYmplY3Q7Ci0gICAgICAgIAotICAgICAgICBvYmplY3RTZWxlY3Rpb25fID0gd3NkbFdyYXBwZXIud3NkbFNlbGVjdGlvbjsKLSAgICAgICAgcGFyc2VyXyAgICAgICAgICA9IHdzZGxXcmFwcGVyLnBhcnNlcjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAgIGlmIChwcm9qZWN0XyA9PSBudWxsICYmIHRvcERvd25fKQotICAgICAgcHJvamVjdF8gPSBnZXRQcm9qZWN0RnJvbVRyYW5zZm9ybWVkU2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHByb2plY3RfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICB0aGlzLnByb2plY3RfID0gcHJvamVjdDsKLSAgfSAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKQotICB7Ci0gICAgaWYgKGNvbXBvbmVudE5hbWVfID09IG51bGwgJiYgdG9wRG93bl8pCi0gICAgICBjb21wb25lbnROYW1lXyA9IGdldENvbXBvbmVudE5hbWVGcm9tVHJhbnNmb3JtZWRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gY29tcG9uZW50TmFtZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDb21wb25lbnROYW1lKFN0cmluZyBjb21wb25lbnROYW1lKQotICB7Ci0gICAgdGhpcy5jb21wb25lbnROYW1lXyA9IGNvbXBvbmVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwYXJzZXJfLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIHJldHVybiBwYXJzZXJfOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzUHJvdG9jb2woU3RyaW5nIHVybCkgeyAKLSAgICByZXR1cm4gdXJsLmluZGV4T2YoIjoiKSAhPSAtMTsgIAotICB9Ci0gIAotICBwcml2YXRlIElSZXNvdXJjZSBmaW5kUmVzb3VyY2VGcm9tU2VsZWN0aW9uKE9iamVjdCBzZWxlY3Rpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkgIAotICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24oc2VsZWN0aW9uKTsgCi0JICAKLSAgICAgIC8vIHRyeSBmaW5kaW5nIGF0IGxlYXN0IHRoZSBwcm9qZWN0IHVzaW5nIHRoZSBFTUYgd2F5Ci0gICAgICBpZiAocmVzb3VyY2UgPT0gbnVsbCAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBFT2JqZWN0KQotICAgICAgICAgIHJlc291cmNlID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlbGVjdGlvbik7Ci0JICAKLSAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbVRyYW5zZm9ybWVkU2VsZWN0aW9uKCkgewotICAgIGlmIChvYmplY3RTZWxlY3Rpb25fICE9IG51bGwgJiYgb2JqZWN0U2VsZWN0aW9uXy5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gb2JqZWN0U2VsZWN0aW9uXy5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgICAgU3RyaW5nIHN0ciA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b1BhdGgoKFN0cmluZykgb2JqKTsKLSAgICAgICAgaWYgKGhhc1Byb3RvY29sKHN0cikpIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YobmV3IFBhdGgoc3RyKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwkgIAotICB9Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGdldFByb2plY3RGcm9tT2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IGZpbmRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpCi0gICAgICAgIAlyZXR1cm4gKElQcm9qZWN0KSByZXNvdXJjZTsKLSAgICAgICAgICBJUHJvamVjdCBwID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YocmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgICAgICAgcmV0dXJuIHA7Ci0gICAgICAgIH0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbXBvbmVudE5hbWVGcm9tVHJhbnNmb3JtZWRTZWxlY3Rpb24oKSB7Ci0gICAgaWYgKG9iamVjdFNlbGVjdGlvbl8gIT0gbnVsbCAmJiBvYmplY3RTZWxlY3Rpb25fLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBvYmplY3RTZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFN0cmluZykgeyAKLSAgICAgICAgU3RyaW5nIHN0ciA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b1BhdGgoKFN0cmluZykgb2JqKTsKLSAgICAgICAgaWYgKGhhc1Byb3RvY29sKHN0cikpIHJldHVybiBudWxsOwotICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihuZXcgUGF0aChzdHIpKTsKLSAgICAgICAgcmV0dXJuIGNvbXAgPT0gbnVsbCA/IG51bGwgOiBjb21wLmdldE5hbWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7CSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbXBvbmVudE5hbWVGcm9tT2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IGZpbmRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgIAotICAgICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXAgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKHJlc291cmNlKTsKLSAgICAgCi0gICAgICAgICAgaWYgKGNvbXAhPW51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YjI5MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDgzMCAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBVcGRhdGVkIHBhdGNoIGZvciB0aGlzIGRlZmVjdC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLklPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeQotewotICBwcml2YXRlIHN0YXRpYyBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeSBpbnN0YW5jZTsKLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAgICAgICAgZWxlbWVudHM7Ci0gIHByaXZhdGUgSGFzaHRhYmxlICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZFNlbGVjdGlvbldpZGdldHM7Ci0gIAotICBwcml2YXRlIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5KCkKLSAgewotICAgIGVsZW1lbnRzID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJvYmplY3RTZWxlY3Rpb25XaWRnZXQiKTsKLSAgICBjYWNoZWRTZWxlY3Rpb25XaWRnZXRzID0gbmV3IEhhc2h0YWJsZSgpOyAgICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGlkIGlmIHRoZSBzZWxlY3Rpb24gd2lkZ2V0IG9iamVjdC4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lciBjbGFzcyBpZiBoYXMgYmVlbiBzcGVjaWZpZWQuICBPdGhlcndpc2UKLSAgICogbnVsbCBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBUcmFuc2Zvcm1lciBnZXRUcmFuc2Zvcm1lciggU3RyaW5nIGlkICkKLSAgewotICAgIFRhYmxlRW50cnkgIGVudHJ5ICA9IGdldFRhYmxlRW50cnkoIGlkICk7Ci0gICAgVHJhbnNmb3JtZXIgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiggZW50cnkgIT0gbnVsbCApCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBlbnRyeS5lbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oInRyYW5zZm9ybWVyIik7Ci0gICAgICAgIAotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgVHJhbnNmb3JtZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gKFRyYW5zZm9ybWVyKW9iamVjdDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICl7fSAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGlkIGlmIHRoZSBzZWxlY3Rpb24gd2lkZ2V0IG9iamVjdC4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZXh0ZXJuYWwgbW9kaWZ5IGF0dHJpYnV0ZSBpZgotICAgKiBpdCBoYXMgYmVlbiBzcGVjaWZpZWQuICBPdGhlcndpc2UgZmFsc2UgaXMgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRFeHRlcm5hbE1vZGlmeSggU3RyaW5nIGlkICkKLSAgewotICAgIFRhYmxlRW50cnkgZW50cnkgID0gZ2V0VGFibGVFbnRyeSggaWQgKTsKLSAgICBib29sZWFuICAgIHJlc3VsdCA9IGZhbHNlOwotICAgIAotICAgIGlmKCBlbnRyeSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBTdHJpbmcgbW9kaWZ5U3RyaW5nID0gZW50cnkuZWxlbWVudC5nZXRBdHRyaWJ1dGUoImV4dGVybmFsX21vZGlmeSIpOyAKLSAgICAgIAotICAgICAgcmVzdWx0ID0gbmV3IEJvb2xlYW4oIG1vZGlmeVN0cmluZyApLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICAvKioKLSAgICogR2V0cyB0aGUgSU9iamVjdFNlbGVjdGlvbldpZGdldCBiYXNlZCBvbiB0aGUgc2VsZWN0aW9uSWQuICBJZiBvbmUgaXMKLSAgICogbm90IGZvdW5kIG51bGwgaXMgcmV0dXJuZWQuCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0aW9uSWQgdGhlIElEIG9mIHRoZSBzZWxlY3Rpb24gd2lkZ2V0LgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgSU9iamVjdFNlbGVjdGlvbldpZGdldCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldFNlbGVjdGlvbldpZGdldCggU3RyaW5nIHNlbGVjdGlvbklkICkKLSAgewotICAgIFRhYmxlRW50cnkgZW50cnkgPSBnZXRUYWJsZUVudHJ5KCBzZWxlY3Rpb25JZCApOwotICAgIAotICAgIHJldHVybiBlbnRyeSA9PSBudWxsID8gbnVsbCA6IGVudHJ5Lm9iamVjdFNlbGVjdGlvbjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgY2xlYW51cCgpCi0gIHsKLSAgICBpbnN0YW5jZSA9IG51bGw7Ci0gICAgZWxlbWVudHMgPSBudWxsOwotICAgIGNhY2hlZFNlbGVjdGlvbldpZGdldHMgPSBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIFRhYmxlRW50cnkgZ2V0VGFibGVFbnRyeSggU3RyaW5nIGlkICkKLSAgewotICAgIGlmKCBpZCA9PSBudWxsICkgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgVGFibGVFbnRyeSBlbnRyeSA9IChUYWJsZUVudHJ5KWNhY2hlZFNlbGVjdGlvbldpZGdldHMuZ2V0KCBpZCApOwotICAgIAotICAgIGlmKCBlbnRyeSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBlbGVtZW50c1tpbmRleF07Ci0gICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBlbGVtSWQgID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoICJpZCIgKTsKLSAgICAgIAotICAgICAgICBpZiggaWQuZXF1YWxzKCBlbGVtSWQgKSApCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gZWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbldpZGdldCB8fCBvYmplY3QgaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGVudHJ5ID0gbmV3IFRhYmxlRW50cnkoKTsKLSAgICAgICAgICAgICAgZW50cnkuZWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgIGVudHJ5Lm9iamVjdFNlbGVjdGlvbiA9IG9iamVjdDsKLSAgICAgICAgICAgICAgY2FjaGVkU2VsZWN0aW9uV2lkZ2V0cy5wdXQoIGlkLCBlbnRyeSApOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICl7fQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBlbnRyeTsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBUYWJsZUVudHJ5Ci0gIHsKLSAgICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50ICBlbGVtZW50OwotICAgIHB1YmxpYyBPYmplY3QgICAgICAgICAgICAgICAgIG9iamVjdFNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWE1OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjQgICAxMjkzODcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA4MjUgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjEyMjAgICAxNjEyMzIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0LnNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgY2FsbGVkIHR3aWNlIGVhY2ggdGltZSBCcm93c2UgcHJlc3NlZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLQotcHVibGljIGNsYXNzIE9iamVjdFNlbGVjdGlvbldpZGdldCBleHRlbmRzIEFic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGltcGxlbWVudHMgSU9iamVjdFNlbGVjdGlvbldpZGdldAotewotICBwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnQ7Ci0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXI7Ci0gIHByaXZhdGUgQ29tcG9zaXRlIGNvbXBvc2l0ZTsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBjb21wb25lbnROYW1lOwotICBwcml2YXRlIElPYmplY3RTZWxlY3Rpb25XaWRnZXQgY2hpbGQ7Ci0gIHByaXZhdGUgUG9pbnQgd2lkZ2V0U2l6ZV87Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50Q29tcG9zaXRlLCBMaXN0ZW5lciBzdGF0TGlzdGVuZXIpCi0gIHsKLSAgICB0aGlzLnBhcmVudCA9IHBhcmVudENvbXBvc2l0ZTsKLSAgICB0aGlzLnN0YXR1c0xpc3RlbmVyID0gc3RhdExpc3RlbmVyOwotICAgIGNvbXBvc2l0ZSA9IG51bGw7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb250cm9sIGdldENvbnRyb2woKXsKLQkgIHJldHVybiBjb21wb3NpdGU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gdHlwZVJ1bnRpbWVTZXJ2ZXIgVGhlIHR5cGVSdW50aW1lU2VydmVyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyKQotICB7Ci0gICAgaWYgKGNvbXBvc2l0ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGNvbXBvc2l0ZS5kaXNwb3NlKCk7Ci0gICAgICBjaGlsZCA9IG51bGw7Ci0gICAgfQotICAgIGlmICh0eXBlUnVudGltZVNlcnZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB3c3QgPSB0eXBlUnVudGltZVNlcnZlci5nZXRUeXBlSWQoKTsKLSAgICAgIGludCBzY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh3c3QpOwotICAgICAgU3RyaW5nIGltcGxJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHdzdCk7Ci0gICAgICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbEJ5SWQoaW1wbElkKTsKLSAgICAgIAotCSAgICAvL0lXZWJTZXJ2aWNlVHlwZSB3c3QgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzLmdldFdlYlNlcnZpY2VUeXBlQnlJZCh0eXBlUnVudGltZVNlcnZlci5nZXRUeXBlSWQoKSk7Ci0gICAgICBpZiAod3NpbXBsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9IG51bGw7Ci0gICAgICAgIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikKLSAgICAgICAgewotICAgICAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5XU0RMU2VsZWN0aW9uV2lkZ2V0IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9IHdzaW1wbC5nZXRPYmplY3RTZWxlY3Rpb25XaWRnZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIE9iamVjdCBvYmplY3QgPSBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFNlbGVjdGlvbldpZGdldCggb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0ICkKLSAgICAgICAgewotICAgICAgICAgIGNoaWxkID0gKElPYmplY3RTZWxlY3Rpb25XaWRnZXQpb2JqZWN0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggY2hpbGQgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBDb250cm9sIHNoZWxsID0gcGFyZW50LmdldFNoZWxsKCk7Ci0gICAgICAgICAgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICAgICAgICBHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICAgICAgICBnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgICAgICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICAgICAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotICAgICAgICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotICAgICAgICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICAgICAgICBjaGlsZC5hZGRDb250cm9scyhjb21wb3NpdGUsIHN0YXR1c0xpc3RlbmVyKTsKLQotICAgICAgICAgIFBvaW50IG9yaWdTaXplID0gc2hlbGwuZ2V0U2l6ZSgpOwotICAgICAgICAgIFBvaW50IGNvbXBTaXplID0gY29tcG9zaXRlLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgICAgICAgaW50ICAgbmV3WCAgICAgPSBvcmlnU2l6ZS54OwotICAgICAgICAgIGludCAgIG5ld1kgICAgID0gb3JpZ1NpemUueTsKLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIC8vIE5vdGU6IHdlIGFyZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhlcmUgaWYgdGhlIHdpemFyZCBwYWdlIHNob3VsZAotICAgICAgICAgIC8vICAgICAgIGJlIHJlc2l6ZWQgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wgdGhhdCBpcwotICAgICAgICAgIC8vICAgICAgIGdpdmVuIHRvIHVzIGJ5IHRoZSBleHRlbnNpb24uICBUaGUgaGFyZCBjb2RlZCBjb25zdGFudHMKLSAgICAgICAgICAvLyAgICAgICBiZWxvdyByZXByZXNlbnQgdGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHBpeGVscyB0aGF0IG5lZWQKLSAgICAgICAgICAvLyAgICAgICB0byBnbyBhcm91bmQgb2JqZWN0IHNlbGVjdGlvbiBjb250cm9sLiAgSG9wZWZ1bGx5LCBhIG1vcmUKLSAgICAgICAgICAvLyAgICAgICBwcm9ncmFtYXRpYyBtZXRob2Qgb2YgZG9pbmcgdGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICBpZiggY29tcFNpemUueCArIDIwID4gb3JpZ1NpemUueCApCi0gICAgICAgICAgewotICAgICAgICAgICAgbmV3WCA9IGNvbXBTaXplLnggKyAyMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICBpZiggY29tcFNpemUueSArIDIwNSA+IG9yaWdTaXplLnkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ld1kgPSBjb21wU2l6ZS55ICsgMjA1OwotICAgICAgICAgIH0KLSAgIAotICAgICAgICAgIHdpZGdldFNpemVfID0gbmV3IFBvaW50KG5ld1gsIG5ld1kpOyAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7Ci0gICAgcmV0dXJuIChjaGlsZCAhPSBudWxsKSA/IGNoaWxkLmdldFN0YXR1cygpIDogU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikKLSAgewotICAgIHByb2plY3QgPSBnZXRQcm9qZWN0RnJvbUluaXRpYWxTZWxlY3Rpb24oaW5pdGlhbFNlbGVjdGlvbik7Ci0gICAgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tSW5pdGlhbFNlbGVjdGlvbihpbml0aWFsU2VsZWN0aW9uKTsKLSAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLSAgICAgIGNoaWxkLnNldEluaXRpYWxTZWxlY3Rpb24oaW5pdGlhbFNlbGVjdGlvbik7Ci0gIH0KLSAgICAKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gKGNoaWxkICE9IG51bGwpID8gY2hpbGQuZ2V0T2JqZWN0U2VsZWN0aW9uKCkgOiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgICByZXR1cm4gKGNoaWxkICE9IG51bGwpID8gY2hpbGQudmFsaWRhdGVTZWxlY3Rpb24ob2JqZWN0U2VsZWN0aW9uKSA6IFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAgIGlmIChjaGlsZCAhPSBudWxsKQotICAgIHsKLSAgICAgIElQcm9qZWN0IHAgPSBjaGlsZC5nZXRQcm9qZWN0KCk7Ci0gICAgICBpZiAocCAhPSBudWxsKQotICAgICAgICByZXR1cm4gcDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHByb2plY3Q7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgY25hbWUgPSBjaGlsZC5nZXRDb21wb25lbnROYW1lKCk7Ci0gICAgICBpZiAoY25hbWUgIT0gbnVsbCAmJiBjbmFtZS5sZW5ndGgoKT4wKQotICAgICAgICByZXR1cm4gY25hbWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBjb21wb25lbnROYW1lOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSAgICAKLQkgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21Jbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKG9iaik7Ci0gICAgICAgICAgaWYgKHJlc291cmNlPT1udWxsKSAKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIElQcm9qZWN0IHAgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihyZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKLSAgICAgICAgICByZXR1cm4gcDsKLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRDb21wb25lbnROYW1lRnJvbUluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgCi0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzb3VyY2UpOwotICAgICAgICAgIGlmIChjb21wICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbXAuZ2V0TmFtZSgpOyAgCi0gICAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpIHsKLQlyZXR1cm4gY2hpbGQuZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKTsgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBQb2ludCBnZXRXaWRnZXRTaXplKCkKLSAgewotCSAgUG9pbnQgY2hpbGRXaWRnZXRTaXplID0gY2hpbGQuZ2V0V2lkZ2V0U2l6ZSgpOwotCSAgaWYgKGNoaWxkV2lkZ2V0U2l6ZSA9PSBudWxsKQotCQkgIAkgIHJldHVybiB3aWRnZXRTaXplXzsKLQkgIHJldHVybiBjaGlsZFdpZGdldFNpemU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvVGltZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvVGltZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1MDY3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1RpbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MDMgICAxNTI0ODYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFR5cGluZyBXU0RMIGluIFNlcnZpY2UgZGVmaW5pdGlvbiBmaWVsZCBpcyB2ZXJ5IHNsb3cKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLQotcHVibGljIGNsYXNzIFRpbWVyIGV4dGVuZHMgVGhyZWFkCi17Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBPTkVfU0VDT05EID0gMTAwMDsKLSAgcHJpdmF0ZSBsb25nIHJlZnJlc2hUaW1lOwotICBwcml2YXRlIGJvb2xlYW4gaXNSdW5uaW5nID0gdHJ1ZTsKLSAgcHJpdmF0ZSBEaXNwbGF5IGRpc3BsYXk7Ci0gIHByaXZhdGUgUnVubmFibGUgcnVubmFibGU7Ci0KLSAgcHJpdmF0ZSBUaW1lcihEaXNwbGF5IGRpc3BsYXksIFJ1bm5hYmxlIHJ1bm5hYmxlKQotICB7Ci0gICAgdGhpcy5kaXNwbGF5ID0gZGlzcGxheTsKLSAgICB0aGlzLnJ1bm5hYmxlID0gcnVubmFibGU7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBUaW1lciBuZXdJbnN0YW5jZShUaW1lciB0aW1lciwgRGlzcGxheSBkaXNwbGF5LCBSdW5uYWJsZSBydW5uYWJsZSkKLSAgewotICAgIGlmICghVGltZXIuaXNSdW5uaW5nKHRpbWVyKSkKLSAgICAgIHJldHVybiBuZXcgVGltZXIoZGlzcGxheSwgcnVubmFibGUpOwotICAgIAotICAgIHJldHVybiB0aW1lcjsKLSAgfQotICAKLSAgcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgYm9vbGVhbiBpc1J1bm5pbmcoVGltZXIgdGltZXIpCi0gIHsKLSAgICByZXR1cm4gdGltZXIgIT0gbnVsbCAmJiB0aW1lci5pc1J1bm5pbmc7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc3RhcnRUaW1lcigpCi0gIHsKLSAgICByZWZyZXNoVGltZSA9IGdldEN1cnJlbnRUaW1lKCkgKyBPTkVfU0VDT05EOwotICAgIGlmICghaXNBbGl2ZSgpKQotICAgICAgdGhpcy5zdGFydCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBsb25nIGdldEN1cnJlbnRUaW1lKCkKLSAgewotICAgIHJldHVybiBDYWxlbmRhci5nZXRJbnN0YW5jZSgpLmdldFRpbWUoKS5nZXRUaW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgbG9uZyBjdXJyVGltZSA9IGdldEN1cnJlbnRUaW1lKCk7Ci0gICAgd2hpbGUgKGN1cnJUaW1lIDwgcmVmcmVzaFRpbWUpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHNsZWVwKHJlZnJlc2hUaW1lIC0gY3VyclRpbWUpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKQotICAgICAgewotICAgICAgfQotICAgICAgY3VyclRpbWUgPSBnZXRDdXJyZW50VGltZSgpOwotICAgIH0KLSAgICBpc1J1bm5pbmcgPSBmYWxzZTsKLSAgICBkaXNwbGF5LnN5bmNFeGVjKHJ1bm5hYmxlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9WYWxpZGF0ZVdTRExKb2IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvVmFsaWRhdGVXU0RMSm9iLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyN2VlMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9WYWxpZGF0ZVdTRExKb2IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwotCi0KLQotcHVibGljIGNsYXNzIFZhbGlkYXRlV1NETEpvYiBleHRlbmRzIEpvYiB7Ci0JCi0JZmluYWwgcHVibGljIHN0YXRpYyBTdHJpbmcgVkFMSURBVEVfV1NETF9KT0JfRkFNSUxZID0gIlZhbGlkYXRlV1NETEpvYkphbWlseSI7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV8gPSBudWxsOwotCXByaXZhdGUgSVZhbGlkYXRpb25NZXNzYWdlW10gdmFsaWRhdGlvbk1lc3NhZ2VzXyA9IG51bGw7Ci0JcHJpdmF0ZSBpbnQgdmFsaWRhdGlvbk1lc3NhZ2VTZXZlcml0eV8gPSAtMTsgLy8gZGVmYXVsdCB2YWx1ZQotCi0JcHVibGljIFZhbGlkYXRlV1NETEpvYihTdHJpbmcgd3NkbFVSSSkgewotCQlzdXBlcigiVmFsaWRhdGVXU0RMSm9iIik7Ci0JCXdzZGxVUklfID0gd3NkbFVSSTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCVdTRExWYWxpZGF0b3Igd3NkbFZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQkgICAgSVZhbGlkYXRpb25SZXBvcnQgdmFsUmVwb3J0ID0gd3NkbFZhbGlkYXRvci52YWxpZGF0ZSh3c2RsVVJJXyk7Ci0JICAgIHZhbGlkYXRpb25NZXNzYWdlc18gPSB2YWxSZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0JICAgIHJlcG9ydFN1bW1hcnkoKTsKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCS8vIGNhbGN1bGF0ZSB0aGUgaGlnaGVyIHNldmVyaXR5IGZvciBhbGwgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMKLQlwcml2YXRlIHZvaWQgcmVwb3J0U3VtbWFyeSgpIHsKLQkJaW50IGk7Ci0JCWludCBzZXZlcml0eTsKLQkJaW50IGVycm9yQ291bnQgPSAwOwotCQlpbnQgd2FybmluZ0NvdW50ID0gMDsKLQkJZm9yIChpPTA7IGk8dmFsaWRhdGlvbk1lc3NhZ2VzXy5sZW5ndGggJiYgZXJyb3JDb3VudCA9PSAwOyBpKyspIHsKLQkJCXNldmVyaXR5ID0gdmFsaWRhdGlvbk1lc3NhZ2VzX1tpXS5nZXRTZXZlcml0eSgpOwotCQkJc3dpdGNoIChzZXZlcml0eSkgewotCQkJY2FzZSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SOgotCQkJCWVycm9yQ291bnQrKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HOgotCQkJCXdhcm5pbmdDb3VudCsrOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3JDb3VudCA+IDApIHsKLQkJCXZhbGlkYXRpb25NZXNzYWdlU2V2ZXJpdHlfID0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUjsKLQkJfSBlbHNlIGlmICh3YXJuaW5nQ291bnQgPiAwKSB7Ci0JCQl2YWxpZGF0aW9uTWVzc2FnZVNldmVyaXR5XyA9IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORzsKLQkJfQotCQkKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBiZWxvbmdzVG8oT2JqZWN0IGZhbWlseSkKLQl7Ci0JCXJldHVybiBmYW1pbHkgPT0gVkFMSURBVEVfV1NETF9KT0JfRkFNSUxZOwotCX0KLQkKLQlwdWJsaWMgSVZhbGlkYXRpb25NZXNzYWdlW10gZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkgewotCQlyZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VzXzsKLQl9Ci0JCi0JcHVibGljIGludCBnZXRWYWxpZGF0aW9uTWVzc2FnZVNldmVyaXR5KCkgewotCQlyZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VTZXZlcml0eV87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQlyZXR1cm4gd3NkbFVSSV87Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9WYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9WYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzdmNWRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvVmFsaWRhdGlvbk1lc3NhZ2VWaWV3ZXJXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTAgICAxMzEzNTIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA0MTEgICAxMzYxMzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDIwICAgMTM2MjIxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNoYXJlZEltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VWaWV3ZXJXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVCA9IDEwMDsKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcl87Ci0gIHByaXZhdGUgVGFibGUgdGFibGVfOwotICBwcml2YXRlIFN0cmluZyBtZXNzYWdlID0gbnVsbDsKLSAgc3RhdGljIGZpbmFsIFN0cmluZyBjb2x1bW5zX1tdID0ge0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9TRVZFUklUWSwKLQkgIAkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX0xJTkUsCi0JICAJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9DT0xVTU4sCi0JICAJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fVkFMSURBVElPTl9NRVNTQUdFfTsKLSAgc3RhdGljIGZpbmFsIGludCBjb2x1bW5zV2lkdGhfW10gPSB7MTIsIDEwLCAxMCwgNjB9OwotICBzdGF0aWMgZmluYWwgaW50IGNvbHVtbk1pbnNfW10gPSB7NjAsIDUwLCA1MCwgMzAwfTsKLQotICAKLQotICBwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VWaWV3ZXJXaWRnZXQoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7IAotICAgCi0JQ29tcG9zaXRlICBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCUdyaWRMYXlvdXQgZ2wgICAgICAgID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkKLQlnbC5tYXJnaW5IZWlnaHQgPSAwOwotCWdsLm1hcmdpbldpZHRoID0gMDsKLQljb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCi0gICAgVGV4dCBtZXNzYWdlTGFiZWwgPSBuZXcgVGV4dCggY29tcG9zaXRlLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBtZXNzYWdlTGFiZWwuc2V0VGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1ZBTElEQVRFX01FU1NBR0VTKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIG1lc3NhZ2VMYWJlbC5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBtZXNzYWdlTGFiZWwuc2V0VG9vbFRpcFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1ZBTElEQVRFX1RFWFRfTUVTU0FHRSApOwotCi0JdGFibGVfID0gbmV3IFRhYmxlKGNvbXBvc2l0ZSwgU1dULlNJTkdMRSB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5CT1JERVIpOwotCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JZ2QuaGVpZ2h0SGludCA9IERFRkFVTFRfVEFCTEVfSEVJR0hUX0hJTlQ7Ci0JdGFibGVfLnNldExheW91dERhdGEoZ2QpOwotCXRhYmxlXy5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotCXRhYmxlXy5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0JdGFibGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1RBQkxFX1ZBTElEQVRFX01FU1NBR0UgKTsKLQlUYWJsZUxheW91dCB0YWJsZUxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uc18ubGVuZ3RoOyBpKyspCi0JewotCSAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGVfLCBTV1QuTk9ORSk7Ci0JICB0YWJsZUNvbHVtbi5zZXRUZXh0KGNvbHVtbnNfW2ldKTsKLQkgIHRhYmxlQ29sdW1uLnBhY2soKTsKLQkgIENvbHVtbldlaWdodERhdGEgY29sdW1uRGF0YSA9IG5ldyBDb2x1bW5XZWlnaHREYXRhKGNvbHVtbnNXaWR0aF9baV0sIGNvbHVtbk1pbnNfW2ldLCB0cnVlKTsKLQkgIHRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoY29sdW1uRGF0YSk7Ci0JfQotCXRhYmxlXy5zZXRMYXlvdXQodGFibGVMYXlvdXQpOwotCi0JdGFibGVWaWV3ZXJfID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlXyk7Ci0KLQl0YWJsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBMaXN0Q29udGVudFByb3ZpZGVyKCkpOwotCXRhYmxlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMaXN0TGFiZWxQcm92aWRlcigpKTsKLQotCXJldHVybiB0aGlzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5wdXQoSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMpCi0gIHsKLSAgCXRhYmxlVmlld2VyXy5zZXRJbnB1dChtZXNzYWdlcyk7Ci0gIAl0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjbGVhcklucHV0KCkKLSAgewotCSAgSVZhbGlkYXRpb25NZXNzYWdlIGVtcHR5TWVzc2FnZXNbXSA9IHt9OwotCSAgdGhpcy5zZXRJbnB1dChlbXB0eU1lc3NhZ2VzKTsKLSAgfQotICAKLSAgcHVibGljIElDb250ZW50UHJvdmlkZXIgZ2V0Q29udGVudFByb3ZpZGVyKCkKLSAgewotCSAgcmV0dXJuIHRhYmxlVmlld2VyXy5nZXRDb250ZW50UHJvdmlkZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZSA9PSBudWxsID8gU3RhdHVzLk9LX1NUQVRVUyA6IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhtZXNzYWdlICk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCkKLSAgewotCXRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gIH0KLQotICBwdWJsaWMgVGFibGVJdGVtW10gZ2V0SXRlbXMoKQotICB7Ci0JLy9pbnRlcm5hbFJlZnJlc2goKTsKLQlyZXR1cm4gdGFibGVfLmdldEl0ZW1zKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsJCi0JaWYgKHRhYmxlXyAhPSBudWxsKQotCSAgdGFibGVfLmRpc3Bvc2UoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMaXN0Q29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIKLSAgewotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JewotCSAgdGFibGVWaWV3ZXJfLmFkZChnZXRFbGVtZW50cyhuZXdJbnB1dCkpOwotCX0KLQotCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KQotCXsKLQkJaWYgKGlucHV0RWxlbWVudCBpbnN0YW5jZW9mIElWYWxpZGF0aW9uTWVzc2FnZVtdKQotCSAgewotCQkJSVZhbGlkYXRpb25NZXNzYWdlW10gdmFsTWVzc2FnZXMgPSAoSVZhbGlkYXRpb25NZXNzYWdlW10pIGlucHV0RWxlbWVudDsKLQkJICByZXR1cm4gdmFsTWVzc2FnZXM7Ci0JICB9Ci0JICBlbHNlCi0JCXJldHVybiBuZXcgT2JqZWN0WzBdOwotCX0KLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMaXN0TGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElUYWJsZUxhYmVsUHJvdmlkZXIKLSAgewotCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KQotCXsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJVmFsaWRhdGlvbk1lc3NhZ2UpCi0JCXsKLQkJCUlWYWxpZGF0aW9uTWVzc2FnZSBtc2cgPSAoSVZhbGlkYXRpb25NZXNzYWdlKSBlbGVtZW50OwotCQkJCi0JCQlpZiAoY29sdW1uSW5kZXggPT0gMCkKLQkJCXsJCi0JCQkJaW50IHNldmVyaXR5ID0gbXNnLmdldFNldmVyaXR5KCk7Ci0JCQkJaWYgKHNldmVyaXR5ID09IDApIHsKLQkJCQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuZ2V0SW1hZ2UoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19FUlJPUl9UU0spOwotCQkJCX0gZWxzZSBpZiAoc2V2ZXJpdHkgPT0gMSkgewotCQkJCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpTX1dBUk5fVFNLKTsKLQkJCQl9IGVsc2UgaWYgKHNldmVyaXR5ID09IDIpIHsKLQkJCQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuZ2V0SW1hZ2UoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19JTkZPX1RTSyk7Ci0JCQkJfQotCQkJfQotCQl9CQotCSAgcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JewotCQlTdHJpbmcgdGV4dCA9ICIiOwotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElWYWxpZGF0aW9uTWVzc2FnZSkKLQkJewotCQkJSVZhbGlkYXRpb25NZXNzYWdlIG1zZyA9IChJVmFsaWRhdGlvbk1lc3NhZ2UpIGVsZW1lbnQ7Ci0JCQkKLQkJCXN3aXRjaCAoY29sdW1uSW5kZXgpIHsKLQkJCWNhc2UgMDoJCQotCQkJCS8vIG5vIHRleHQgdG8gZGlzcGxheSwgb25seSBkaXNwbGF5IHNldmVyaXR5IGFzIGltYWdlCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJdGV4dCA9IChuZXcgSW50ZWdlcihtc2cuZ2V0TGluZSgpKSkudG9TdHJpbmcoKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQl0ZXh0ID0gKG5ldyBJbnRlZ2VyKG1zZy5nZXRDb2x1bW4oKSkpLnRvU3RyaW5nKCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6Ci0JCQkJdGV4dCA9IG1zZy5nZXRNZXNzYWdlKCk7Ci0JCQkJYnJlYWs7CQkKLQkJCQkKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9IAotCQl9Ci0JCXJldHVybiB0ZXh0OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotCXsKLQkgIHJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQl9Ci0gIH0KLSB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZmMTYxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDExNiAgIDE1OTYxOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUHJvamVjdCBhbmQgRUFSIG5vdCBkZWZhdWx0ZWQgcHJvcGVybHkgd2hlbiB3aXphcmQgbGF1bmNoZWQgZnJvbSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggaW4gSjJFRSBQcm9qZWN0IEV4cGxvcmVyCi0gKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA3MTMgICAxOTEzNTcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LmludGVybmFsLmltcGwuU2VydmljZVJlZkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkJlYW5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS51dGlscy5BZGFwdGVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lcgotewotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbil2YWx1ZTsKLSAgICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgIAotICAgICAgT2JqZWN0IHNlbCA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChzZWwgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKCgoSVJlc291cmNlKXNlbCkuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKS50b1VSTCgpLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSSgoU2VydmljZUltcGwpc2VsKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBTZXJ2aWNlUmVmSW1wbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKChTZXJ2aWNlUmVmSW1wbClzZWwpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSSgoV1NETFJlc291cmNlSW1wbClzZWwpKTsKLSAgICAgIH0KLSAgICAgIC8qCi0gICAgICAgKiBUT0RPIC0gUmVtb3ZlIHRoZSBjYXNlcyBiZWxvdyBhZnRlciBidWcgMTcwODM0IGlzIGZpeGVkCi0gICAgICAgKiAKLSAgICAgICAqIFdTRExTZWxlY3Rpb25UcmFuc2Zvcm1lciBzaG91bGQgbm90IG5lZWQgdG8gaGFuZGxlIFNlcnZpY2VJbXBsQmVhbiBhbmQgQmVhbkxpbmsgd2hpY2gKLSAgICAgICAqIHJlcHJlc2VudCBzZXJ2aWNlIGNsYXNzZXMuICBUaGVzZSBjYXRjaGVzIGFyZSBoZXJlIGZvciBub3cgc2luY2Ugd2UgaW5jb3JyZWN0bHkgYWxsb3cKLSAgICAgICAqIHRoZSB3aXphcmQgdG8gZGVmYXVsdCB0byB0b3AtZG93biBzY2VhbnJpbyB3aGVuIGxhdW5jaCBmcm9tIHRoZXNlIG9iamVjdHMgaW4gdGhlIEpTUi0xMDkKLSAgICAgICAqIGJyYW5jaC4gCi0gICAgICAgKi8KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGdldFdTRExVUkkoKFNlcnZpY2VJbXBsQmVhbikgc2VsKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBCZWFuTGluaykKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGdldFdTRExVUkkoKEJlYW5MaW5rKSBzZWwpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgCSAgU3RyaW5nIHdzZGxVUkkgPSBBZGFwdGVyVXRpbHMuZ2V0QWRhcHRlZFdTREwoc2VsKTsKLSAgICAJICBpZiAod3NkbFVSSSAhPSBudWxsKSB7Ci0gICAgCQkgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih3c2RsVVJJKTsKLSAgICAJICB9Ci0gICAgICB9Ci0gICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXU0RMVVJJKFNlcnZpY2VJbXBsQmVhbiBiZWFuKSB7Ci0JICBFT2JqZWN0IGVPYmplY3QgPSBiZWFuLmVDb250YWluZXIoKTsKLQkgIGlmIChlT2JqZWN0ID09IG51bGwpCi0JCSAgcmV0dXJuICIiOwotICAgICAgICAgIAotCSAgZU9iamVjdCA9IGVPYmplY3QuZUNvbnRhaW5lcigpOwotICAgICAgCi0JICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFdlYlNlcnZpY2VEZXNjcmlwdGlvbikgewotCQkgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c2QgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKSBlT2JqZWN0OwotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qod3NkKTsgICAgCSAgCi0gICAgCSAgCi0JCSAgLy8gZ2V0V2ViQ29udGVudFBhdGggcmV0dXJucyB0aGUgIldlYkNvbnRlbnQiIGZvbGRlciBwYXRoIGZvciBXZWIgcHJvamVjdHMKLQkJICAvLyBmb3IgRUpCIHByb2plY3RzLCBpdCByZXR1cm5zIHRoZSAiZWJqTW9kdWxlIiBmb2xkZXIgcGF0aAotCQkgIElQYXRoIHBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7ICAgIAkgCi0JCSAgcGF0aCA9IHBhdGguYXBwZW5kKHdzZC5nZXRXc2RsRmlsZSgpKTsgCi0gICAgCSAgCi0JCSAgcmV0dXJuIHBhdGgudG9TdHJpbmcoKTsgICAgCSAgICAKLQkgIH0KLQkgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V1NETFVSSShCZWFuTGluayBsaW5rKSB7Ci0JICBFT2JqZWN0IGVPYmplY3QgPSBsaW5rLmVDb250YWluZXIoKTsKLQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuKQotCQkgIHJldHVybiBnZXRXU0RMVVJJKChTZXJ2aWNlSW1wbEJlYW4pIGVPYmplY3QpOwotCSAgcmV0dXJuICIiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRlMDQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxMCAgIDEzNTQ0MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMCAgIDEzNjAxMSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MDQgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MjUgICAxNDIyODEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA2MDcgICAxNDQ5MzIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjEyICAgMTQ1MDgxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNzE5ICAgMTM5OTc3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgwMyAgIDE1MjcwMSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA4MDMgICAxNTI0ODYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFR5cGluZyBXU0RMIGluIFNlcnZpY2UgZGVmaW5pdGlvbiBmaWVsZCBpcyB2ZXJ5IHNsb3cKLSAqIDIwMDYwODI1ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDYwODMxICAgMTU1ODgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBzZXJ2aWNlIGltcGwgZmllbGQgZG9lc24ndCB3b3JrIGFmdGVyIHN3aXRjaGluZyBmcm9tIEJVIHRvIFRECi0gKiAyMDA2MTEwNiAgIDE0MjUwMCBkYXZpZC5zY2huZWlkZXJAdW5pc3lzLmNvbSAtIERhdmlkIFNjaG5laWRlciwgV1RQIHByb3BlcnRpZXMgcGFnZXMgZm9udHMgZG9uJ3QgZm9sbG93IEVjbGlwc2UgcHJlZmVyZW5jZXMKLSAqIDIwMDYxMjExICAgMTYxNTg5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBOUEUgaW4gc2VydmljZSBnZW5lcmF0aW9uIGFmdGVyIG9wZW5pbmcgYW5kIGNhbmNlbGxpbmcgZnJvbSBicm93c2UgZGlhbG9nCi0gKiAyMDA3MDEzMSAgIDE2ODc4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd3NkbCB1cmwgb24gd2ViIHNlcnZpY2Ugd2l6YXJkIHBhZ2UgMSBpcyBub3QgcmVmbGVjdGVkIGluIGJyb3dzZSBkaWFsb2cKLSAqIDIwMDcwMzI2ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgcHVibGljIHV0aWxpdHkgbWV0aG9kIGZvciBjb3B5aW5nIFdTREwgZmlsZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSUpvYkNoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLklKb2JNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2JDaGFuZ2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5XU0RMUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuV1NETFNlbGVjdGlvblRyZWVXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5EaWFsb2dSZXNvdXJjZUJyb3dzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5GaWxlRXh0ZW5zaW9uRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VFbnRpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWwuVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbldpZGdldCBleHRlbmRzIEFic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGltcGxlbWVudHMgSU9iamVjdFNlbGVjdGlvbldpZGdldCwgUnVubmFibGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgIHBsdWdpbklkXzsKLSAgcHJpdmF0ZSBGaWxlRXh0ZW5zaW9uRmlsdGVyIHdzRmlsdGVyXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0gIAotICBwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnRfOwotICBwcml2YXRlIExpc3RlbmVyICBzdGF0dXNMaXN0ZW5lcl87Ci0gIHByaXZhdGUgTW9kaWZ5TGlzdGVuZXIgbW9kaWZ5TGlzdGVuZXJfOwotICBwcml2YXRlIFdTRExTZWxlY3Rpb25UcmVlV2lkZ2V0IHRyZWU7Ci0gIAotICBwcml2YXRlIFRpbWVyIHRpbWVyXyA9IG51bGw7Ci0gIAotICAvKkNPTlRFWFRfSUQgUENPTjAwMDEgZm9yIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQ09OX1BBR0UgPSAiUENPTjAwMDEiOwotCi0gIC8qQ09OVEVYVF9JRCBQQ09OMDAwMiBmb3IgdGhlIFdTREwgRG9jdW1lbnQgdGV4dCBmaWVsZCBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUENPTl9URVhUX1dTREwgPSAiUENPTjAwMDIiOwotICBwcml2YXRlIFRleHQgd2ViU2VydmljZVVSSTsKLQotICAvKkNPTlRFWFRfSUQgUENPTjAwMDMgZm9yIHRoZSBXU0RMIFJlc291cmNlIEJyb3dzZSBidXR0b24gb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BDT05fQlVUVE9OX0JST1dTRV9XU0RMID0gIlBDT04wMDAzIjsKLSAgcHJpdmF0ZSBCdXR0b24gd3NCcm93c2VCdXR0b25fOwotICAKLSAgLypDT05URVhUX0lEIFBDT04wMDA0IGZvciB0aGUgV2l6YXJkIFdTREwgVmFsaWRhdGlvbiB0YWJsZSBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgVmFsaWRhdGlvbk1lc3NhZ2VWaWV3ZXJXaWRnZXQgbXNnVmlld2VyXzsKLSAgcHJpdmF0ZSBWYWxpZGF0ZVdTRExKb2IgdmFsaWRhdGVXU0RMSm9iXzsKLSAgcHJpdmF0ZSBKb2JDaGFuZ2VBZGFwdGVyICAgIGpvYkNoYW5nZUFkYXB0ZXJfOwotICAKLSAgLypDT05URVhUX0lEIFBDT04wMDA1IGZvciB0aGUgV2l6YXJkIFdTREwgVmFsaWRhdGlvbiBzdW1tYXJ5IG1lc3NhZ2Ugb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIFRleHQgdmFsaWRhdGlvblN1bW1hcnlUZXh0XzsKLSAgcHJpdmF0ZSBUZXh0IHZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfOwotICAKLSAgLypDT05URVhUX0lEIFBDT04wMDA2IGZvciB0aGUgU3RvcCBXaXphcmQgV1NETCBWYWxpZGF0aW9uIGJ1dHRvbiBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgQnV0dG9uIHN0b3BWYWxpZGF0aW9uQnV0dG9uXzsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQ09OX0JVVFRPTl9TVE9QX1ZBTElEQVRJT04gPSAiUENPTjAwMDYiOwotICAKLSAgcHVibGljIFdTRExTZWxlY3Rpb25XaWRnZXQoKQotICB7Ci0gICAgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0gICAgd3NGaWx0ZXJfID0gbmV3IEZpbGVFeHRlbnNpb25GaWx0ZXIobmV3IFN0cmluZ1tdIHsid3NkbCIsICJ3c2lsIiwgImh0bWwifSk7Ci0gICAgd2ViU2VydmljZXNQYXJzZXIgPSBXU0RMUGFyc2VyRmFjdG9yeS5nZXRXU0RMUGFyc2VyKCk7Ci0gICAgCi0gICAgZmluYWwgUnVubmFibGUgaGFuZGxlVmFsaWRhdGlvbk1lc3NhZ2VzID0gbmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0JICBwdWJsaWMgdm9pZCBydW4oKSAKLSAgICAgIHsKLQkJICBtc2dWaWV3ZXJfLnNldElucHV0KHZhbGlkYXRlV1NETEpvYl8uZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkpOwotCQkgIHVwZGF0ZVZhbGlkYXRpb25TdW1tYXJ5KHZhbGlkYXRlV1NETEpvYl8uZ2V0VmFsaWRhdGlvbk1lc3NhZ2VTZXZlcml0eSgpKTsKLQkJICBzZXRWYWxpZGF0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBqb2JDaGFuZ2VBZGFwdGVyXyA9IG5ldyBKb2JDaGFuZ2VBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBkb25lKElKb2JDaGFuZ2VFdmVudCBldmVudCkgCi0gICAgICB7ICAgCQotICAgIAkgIGlmIChtc2dWaWV3ZXJfIT0gbnVsbCAmJiBtc2dWaWV3ZXJfLmdldENvbnRlbnRQcm92aWRlcigpICE9IG51bGwpIHsKLSAgICAJCSAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBoYW5kbGVWYWxpZGF0aW9uTWVzc2FnZXMgKTsKLQkJICB9Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotICAgIFVJVXRpbHMgdWlVdGlscyAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWRfICk7Ci0gICAgcGFyZW50XyAgICAgICAgICA9IHBhcmVudDsKLSAgICBzdGF0dXNMaXN0ZW5lcl8gID0gc3RhdHVzTGlzdGVuZXI7Ci0KLQkgIHBhcmVudC5zZXRUb29sVGlwVGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUENPTl9QQUdFICk7Ci0JICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBwYXJlbnQsIHBsdWdpbklkXyArICIuIiArIElORk9QT1BfUENPTl9QQUdFICk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIHdzZGxHcm91cCA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIDIsIDUsIDAgKTsKLSAgICAKLSAgICBMYWJlbCB3c0xhYmVsID0gbmV3IExhYmVsKCB3c2RsR3JvdXAsIFNXVC5XUkFQKTsKLSAgICB3c0xhYmVsLnNldFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XU19TRUxFQ1RJT04pOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIHdzTGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgd3NMYWJlbC5zZXRUb29sVGlwVGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUENPTl9URVhUX1dTICk7Ci0gICAgCi0gICAgd2ViU2VydmljZVVSSSA9IHVpVXRpbHMuY3JlYXRlVGV4dCggd3NkbEdyb3VwLCBudWxsLCAKLSAgICAJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQ09OX1RFWFRfV1MsIAotICAgIAkJCQkJCUlORk9QT1BfUENPTl9URVhUX1dTREwsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSICk7Ci0gICAgbW9kaWZ5TGlzdGVuZXJfID0KLSAgICAgIG5ldyBNb2RpZnlMaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVXZWJTZXJ2aWNlVVJJTW9kaWZ5RXZlbnQoKTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAKLSAgICB3ZWJTZXJ2aWNlVVJJLmFkZE1vZGlmeUxpc3RlbmVyKG1vZGlmeUxpc3RlbmVyXyk7Ci0gICAgCi0vLyAgICB3ZWJTZXJ2aWNlVVJJLmFkZExpc3RlbmVyKCBTV1QuTW9kaWZ5LCBzdGF0dXNMaXN0ZW5lciApOwotCi0gICAgd3NCcm93c2VCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCB3c2RsR3JvdXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fQlJPV1NFLCAKLSAgICAJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BDT05fQlVUVE9OX0JST1dTRV9XUywgCi0gICAgCQkJCQkJCQlJTkZPUE9QX1BDT05fQlVUVE9OX0JST1dTRV9XU0RMICk7Ci0gICAgd3NCcm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotICAgICAgbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgaGFuZGxlV1NETEJ1dHRvbigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICAgIGhhbmRsZVdTRExCdXR0b24oKTsKLSAgICAgICAgfSAKLSAgICAgIH0pOwotCi0gICAgdHJlZSA9IG5ldyBXU0RMU2VsZWN0aW9uVHJlZVdpZGdldCgpOwotICAgIHRyZWUuYWRkQ29udHJvbHMocGFyZW50LCBzdGF0dXNMaXN0ZW5lcik7Ci0gICAgdHJlZS5zZXRXZWJTZXJ2aWNlc1BhcnNlcih3ZWJTZXJ2aWNlc1BhcnNlcik7ICAgIAotICAgIAotICAgIG1zZ1ZpZXdlcl8gPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VWaWV3ZXJXaWRnZXQoKTsKLSAgICBtc2dWaWV3ZXJfLmFkZENvbnRyb2xzKHBhcmVudCwgc3RhdHVzTGlzdGVuZXIpOwotICAgIAotICAgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dF8gPSBuZXcgVGV4dCggcGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRFZGl0YWJsZShmYWxzZSk7Ci0gICAgR3JpZERhdGEgZ2QxID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgZmFsc2UsIGZhbHNlKTsKLSAgICB2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldExheW91dERhdGEoZ2QxKTsKLSAgICB2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldFRvb2xUaXBUZXh0KCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9WQUxJREFURV9URVhUX01FU1NBR0VfU1VNTUFSWSApOwotICAgIAotICAgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfID0gbmV3IFRleHQoIHBhcmVudCwgU1dULldSQVApOwotICAgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfLnNldEVkaXRhYmxlKGZhbHNlKTsKLSAgICB2YWxpZGF0aW9uU3VtbWFyeVRleHQyXy5zZXRMYXlvdXREYXRhKGdkMSk7Ci0gICAgCi0gICAgc3RvcFZhbGlkYXRpb25CdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKHBhcmVudCwgCi0gICAgCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9TVE9QX1dTRExfVkFMSURBVElPTiwgCi0gICAgCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1RPUF9WQUxJREFUSU9OX0JVVFRPTiwgCi0gICAgCQkJSU5GT1BPUF9QQ09OX0JVVFRPTl9TVE9QX1ZBTElEQVRJT04pOwotICAgIHNldFZhbGlkYXRpb25JblByb2dyZXNzKGZhbHNlKTsKLSAgICAKLSAgICBzdG9wVmFsaWRhdGlvbkJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoCi0gICAgCQluZXcgU2VsZWN0aW9uTGlzdGVuZXIoKQotICAgIAkJewotICAgIAkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgICAJCQl7Ci0gICAgCQkJCWhhbmRsZVN0b3BWYWxpZGF0aW9uQnV0dG9uKCk7Ci0gICAgCQkJfQotCi0gICAgCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gICAgCQkJewotICAgIAkJCQloYW5kbGVTdG9wVmFsaWRhdGlvbkJ1dHRvbigpOwotICAgIAkJCX0gCi0gICAgCQl9KTsKLSAgICAKLSAgICBzZXRNZXNzYWdlU3VtbWFyeSgpOwotICAgIERpYWxvZy5hcHBseURpYWxvZ0ZvbnQocGFyZW50KTsgICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXRNZXNzYWdlU3VtbWFyeSgpIHsKLQkgIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN1bW1hcnkgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTUVTU0FHRV9WQUxJREFURV9OT19XU0RMOwotCSAgUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dCB3c2RsVmFsaWRhdGlvbkNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpOwotCSAgU3RyaW5nIHZhbGlkYXRpb25TZWxlY3Rpb24gPSB3c2RsVmFsaWRhdGlvbkNvbnRleHQuZ2V0UGVyc2lzdGVudFdTRExWYWxpZGF0aW9uKCk7Ci0JICBpZiAoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9SRU1PVEVfV1NETC5lcXVhbHModmFsaWRhdGlvblNlbGVjdGlvbikpIHsKLQkJICB2YWxpZGF0aW9uTWVzc2FnZVN1bW1hcnkgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTUVTU0FHRV9WQUxJREFURV9SRU1PVEVfV1NETDsKLQkgIH0gZWxzZSBpZiAoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9BTExfV1NETC5lcXVhbHModmFsaWRhdGlvblNlbGVjdGlvbikpIHsKLQkJICB2YWxpZGF0aW9uTWVzc2FnZVN1bW1hcnkgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTUVTU0FHRV9WQUxJREFURV9BTExfV1NETDsKLQkgIH0KLQkgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0VGV4dCggdmFsaWRhdGlvbk1lc3NhZ2VTdW1tYXJ5ICk7Ci0JICB2YWxpZGF0aW9uU3VtbWFyeVRleHQyXy5zZXRUZXh0KCIgIik7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVXZWJTZXJ2aWNlVVJJTW9kaWZ5RXZlbnQoKQotICB7Ci0gICAgaWYgKHdlYlNlcnZpY2VVUkkuZ2V0VGV4dCgpLmluZGV4T2YoJzonKSA+IDApIHsKLSAgICAgIHRpbWVyXyA9IFRpbWVyLm5ld0luc3RhbmNlKHRpbWVyXywgRGlzcGxheS5nZXRDdXJyZW50KCksIHRoaXMpOwotICAgICAgdGltZXJfLnN0YXJ0VGltZXIoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgaGFuZGxlV2ViU2VydmljZVVSSSgpOwotICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVdlYlNlcnZpY2VVUkkoKSB7Ci0JICBoYW5kbGVXZWJTZXJ2aWNlVVJJKHdlYlNlcnZpY2VVUkkuZ2V0VGV4dCgpKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVdlYlNlcnZpY2VVUkkoU3RyaW5nIHdzVVJJKQotICB7ICAgIAotICAgIGlmICh3c1VSSS5pbmRleE9mKCc6JykgPCAwKQotICAgIHsKLSAgICAgIElGaWxlIGZpbGUgPSB1cmkySUZpbGUod3NVUkkpOwotICAgICAgaWYgKGZpbGUgIT0gbnVsbCkKLSAgICAgICAgd3NVUkkgPSBpRmlsZTJVUkkoZmlsZSk7Ci0gICAgfQotICAgIGlmICh3c1VSSSAhPSBudWxsICYmIHdzVVJJLmluZGV4T2YoJzonKSA+PSAwICYmIHdlYlNlcnZpY2VzUGFyc2VyLmdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3c1VSSSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIGNtZCA9IG5ldyBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kKCk7Ci0gICAgICBjbWQuc2V0V2ViU2VydmljZXNQYXJzZXIod2ViU2VydmljZXNQYXJzZXIpOwotICAgICAgY21kLnNldFdlYlNlcnZpY2VVUkkod3NVUkkpOwotICAgICAgY21kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0gICAgfQotICAgIFdlYlNlcnZpY2VFbnRpdHkgZW50aXR5ID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzVVJJKTsKLSAgICBpZiAoZW50aXR5ICE9IG51bGwgJiYgZW50aXR5LmdldFR5cGUoKSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKLSAgICAgIHRyZWUuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgdHJlZS5zZXRFbmFibGVkKHRydWUpOwotICAgIHRyZWUuc2V0V2ViU2VydmljZVVSSSh3c1VSSSk7Ci0gICAgdHJlZS5yZWZyZXNoVHJlZVZpZXdlcigpOyAgCi0gICAgd3NkbFVSSV8gPSB3c1VSSTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGhhbmRsZVdlYlNlcnZpY2VVUkkoKTsKLSAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlV1NETEJ1dHRvbigpCi0gIHsKLSAgICBEaWFsb2dSZXNvdXJjZUJyb3dzZXIgZGlhbG9nID0gbmV3IERpYWxvZ1Jlc291cmNlQnJvd3NlciggcGFyZW50Xy5nZXRTaGVsbCgpLCBudWxsLCB3c0ZpbHRlcl8pOwotICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgSVJlc291cmNlIHJlcyA9IGRpYWxvZy5nZXRGaXJzdFNlbGVjdGlvbigpOwotICAgIGlmKCByZXMgIT0gbnVsbCApCi0gICAgewotICAgIAl3c2RsVVJJXyA9IHJlcy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgCXdlYlNlcnZpY2VVUkkuc2V0VGV4dCggd3NkbFVSSV8gKTsgICAgCQotICAgIH0KLSAgICAJCi0gICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0VmFsaWRhdGlvbkluUHJvZ3Jlc3MoYm9vbGVhbiB2YWxpZGF0aW5nKSB7Ci0JICBzdG9wVmFsaWRhdGlvbkJ1dHRvbl8uc2V0RW5hYmxlZCh2YWxpZGF0aW5nKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVN0b3BWYWxpZGF0aW9uQnV0dG9uKCkKLSAgewotCSAgSUpvYk1hbmFnZXIgICAgam9iTWFuYWdlciAgICAgPSBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCk7Ci0JICBKb2JbXSAgICAgICAgICBqb2JzICAgICAgICAgICA9IGpvYk1hbmFnZXIuZmluZCggVmFsaWRhdGVXU0RMSm9iLlZBTElEQVRFX1dTRExfSk9CX0ZBTUlMWSApOwotCSAgVmFsaWRhdGVXU0RMSm9iIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iID0gbnVsbDsKLQkgIAotCSAgaWYoIGpvYnMubGVuZ3RoID4gMCApCi0JICB7Ci0JCSAgZm9yIChpbnQgaT0wOyBpPGpvYnMubGVuZ3RoOyBpKyspIHsKLQkJCSAgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IgPSAoVmFsaWRhdGVXU0RMSm9iKWpvYnNbaV07Ci0KLQkJCSAgaWYgKGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iLmdldFN0YXRlKCkgIT0gSm9iLk5PTkUpIHsgCi0JCQkJICBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYi5jYW5jZWwoKTsKLQkJCSAgfQotCQkgIH0KLQkgIH0KLQkgIGNsZWFyVmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0JICBzZXRWYWxpZGF0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBjbGVhclZhbGlkYXRpb25NZXNzYWdlcygpIHsKLQkgIG1zZ1ZpZXdlcl8uY2xlYXJJbnB1dCgpOwotCSAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRUZXh0KCIgIiApOwotCSAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8uc2V0VGV4dCgiICIpOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7Ci0gICAgLy8gVGltZXIgdmFsaWRhdGlvbgotICAgIC8qCi0gICAgICogQ29tbWVudGluZyBvdXQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGJsb2NrIGZhc3QgdHlwZXJzIGZyb20gaGl0dGluZyBOZXh0L0ZpbmlzaCAKLSAgICBpZiAoVGltZXIuaXNSdW5uaW5nKCkpCi0gICAgICByZXR1cm4gbmV3IFNpbXBsZVN0YXR1cygiIiwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX0xPQURJTkdfV0VCX1NFUlZJQ0VfVVJJLCBTdGF0dXMuRVJST1IpOwotICAgICovCi0JCi0gICAgLy8gVmFsaWRhdGUgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgV2ViIHNlcnZpY2UgVVJJCi0gICAgLy8gRm9yIGV4YW1wbGUsIGlzIGl0IHBvaW50aW5nIHRvIGFuIGV4aXN0aW5nIHJlc291cmNlIGluIHRoZSB3b3Jrc3BhY2U/Ci0gICAgU3RyaW5nIHdzUGF0aCAgPSB3ZWJTZXJ2aWNlVVJJLmdldFRleHQoKTsKLSAgICBpZiggd3NQYXRoID09IG51bGwgfHwgd3NQYXRoLmxlbmd0aCgpIDw9IDAgKSB7Ci0gICAgCWNsZWFyVmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX0lOVkFMSURfV0VCX1NFUlZJQ0VfVVJJICk7Ci0gICAgfQotICAgIGVsc2UgaWYoIHdzUGF0aC5pbmRleE9mKCc6JykgPCAwICkKLSAgICB7Ci0gICAgCUlSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3c1BhdGgpOwotICAgIAlpZiggcmVzID09IG51bGwgKSB7Ci0gICAgCQljbGVhclZhbGlkYXRpb25NZXNzYWdlcygpOwotICAgIAkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfTk9fU1VDSF9GSUxFLCBuZXcgT2JqZWN0W10ge3dzUGF0aH0pICk7Ci0gICAgCX0KLSAgICAJZWxzZSBpZiggcmVzLmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSApIHsKLSAgICAJCWNsZWFyVmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19JTlZBTElEX1dFQl9TRVJWSUNFX1VSSSApOwotICAgIAl9Ci0gICAgfQotCi0gICAgCi0gICAgLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnQgb2YgdGhlIFdlYiBzZXJ2aWNlIFVSSQotICAgIC8vIEZvciBleGFtcGxlLCBpcyBzZWxlY3Rpb24gYSBXU0RMIFVSST8KLSAgICBpZiAoIVRpbWVyLmlzUnVubmluZyh0aW1lcl8pICYmIHRyZWUuaXNFbmFibGVkKCkpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSB0cmVlLmdldFN0YXR1cygpOwotICAgICAgaWYgKHN0YXR1cyAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsKLSAgICAgICAgaWYgKHNldmVyaXR5ID09IFN0YXR1cy5FUlJPUiB8fCBzZXZlcml0eSA9PSBTdGF0dXMuV0FSTklORykgewotICAgICAgICAJY2xlYXJWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAJaWYoIHdzUGF0aC5pbmRleE9mKCc6JykgPCAwICkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB3c2RsVVJJID0gaUZpbGUyVVJJKChJRmlsZSlSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3c1BhdGgpKTsKLSAgICAgICAgICBpZiAod2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSSSkgPT0gbnVsbCkgewotICAgICAgICAJICBjbGVhclZhbGlkYXRpb25NZXNzYWdlcygpOwotICAgICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1NFTEVDVElPTl9NVVNUX0JFX1dTREwgKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgaWYgKCFUaW1lci5pc1J1bm5pbmcodGltZXJfKSkgewotICAgIAlTdHJpbmcgd3NkbFVSSTEgPSB3c1BhdGg7Ci0gICAgCSBib29sZWFuIGlzUmVtb3RlID0gdHJ1ZTsKLSAgICAJaWYgKHRyZWUuaXNFbmFibGVkKCkpIHsgLy8gaXMgd3NpbAotICAgIAkJd3NkbFVSSTEgPSB0cmVlLmdldFdzZGxVUkkoKTsKLSAgICAJCWlmICh3c2RsVVJJMS5zdGFydHNXaXRoKCJmaWxlOiIpIHx8IHdzZGxVUkkxLnN0YXJ0c1dpdGgoInBsYXRmb3JtOiIpKQotICAgIAkJewotICAgIAkJCWlzUmVtb3RlID0gZmFsc2U7Ci0gICAgCQl9Ci0gICAgCX0gZWxzZSB7Ci0gICAgCQlpZiAod3NQYXRoLmluZGV4T2YoJzonKSA8IDApCi0gICAgCQl7Ci0gICAgCQkJaXNSZW1vdGUgPSBmYWxzZTsKLSAgICAJCQl3c2RsVVJJMSA9IGlGaWxlMlVSSSgoSUZpbGUpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod3NQYXRoKSk7Ci0gICAgCQl9Ci0gICAgCQllbHNlIGlmICh3c1BhdGguc3RhcnRzV2l0aCgiZmlsZToiKSB8fCB3c1BhdGguc3RhcnRzV2l0aCgicGxhdGZvcm06IikpCi0gICAgCQl7Ci0gICAgCQkJaXNSZW1vdGUgPSBmYWxzZTsKLSAgICAJCX0KLSAgICAJfQotICAJICAKLSAgICAgIHNldE1lc3NhZ2VTdW1tYXJ5KCk7Ci0JICBtc2dWaWV3ZXJfLmNsZWFySW5wdXQoKTsKLSAgCSAgdmFsaWRhdGVXU0RMKHdzZGxVUkkxLCBpc1JlbW90ZSk7Ci0gICAgfQotICAgIAotCi0gICAgLy8gT0sgc3RhdHVzCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCB2YWxpZGF0ZVdTREwgKFN0cmluZyB3c2RsVVJJLCBib29sZWFuIGlzUmVtb3RlKSB7Ci0KLQkgIFN0cmluZyB2YWxpZGF0aW9uU2VsZWN0aW9uID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVmFsaWRhdGlvbkNvbnRleHQoKS5nZXRQZXJzaXN0ZW50V1NETFZhbGlkYXRpb24oKTs7Ci0JICBpZiAoKFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfQUxMX1dTREwuZXF1YWxzKHZhbGlkYXRpb25TZWxlY3Rpb24pKSB8fAotCQkJICAoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9SRU1PVEVfV1NETC5lcXVhbHModmFsaWRhdGlvblNlbGVjdGlvbikgJiYgaXNSZW1vdGUpKSB7Ci0KLQkJICBJSm9iTWFuYWdlciAgICBqb2JNYW5hZ2VyICAgICA9IFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKTsKLQkJICBKb2JbXSAgICAgICAgICBqb2JzICAgICAgICAgICA9IGpvYk1hbmFnZXIuZmluZCggVmFsaWRhdGVXU0RMSm9iLlZBTElEQVRFX1dTRExfSk9CX0ZBTUlMWSApOwotCQkgIFZhbGlkYXRlV1NETEpvYiBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYiA9IG51bGw7Ci0JCSAgCi0JCSAgYm9vbGVhbiBzdGFydFdTRExWYWxpZGF0aW9uID0gdHJ1ZTsKLQkJICB2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NRVNTQUdFX1ZBTElEQVRFX0lOX1BST0dSRVNTICk7Ci0JCSAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8uc2V0VGV4dCgiICIpOwotCQkgIGlmKCBqb2JzLmxlbmd0aCA+IDAgKQotCQkgIHsKLQkJCSAgZm9yIChpbnQgaT0wOyBpPGpvYnMubGVuZ3RoOyBpKyspIHsKLQkJCQkgIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iID0gKFZhbGlkYXRlV1NETEpvYilqb2JzW2ldOwotCQkJCSAgCi0JCQkJICBpZiAoZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IuZ2V0U3RhdGUoKSAhPSBKb2IuTk9ORSkgeyAKLQkJCQkJICAvLyBKb2IgcnVubmluZyBvciB0byBiZSBydW4KLQkJCQkJICAvLyBJZiB0aGUgam9iIGlzIHZhbGlkYXRpbmcgdGhlIHNhbWUgd3NkbFVSSSwgbGV0IGl0IGZpbmlzaCBydW5uaW5nIGFuZCBpZ25vcmUgdGhpcyBvbmUuCi0JCQkJCSAgLy8gSXQgaXMgbm90IGZvciB0aGUgc2FtZSB3c2RsVVJJLCBjYW5jZWwgdGhlIGpvYiBhbmQgc2NoZWR1bGUgdGhpcyBvbmUuCi0KLQkJCQkJICBpZiAoIXdzZGxVUkkuZXF1YWxzKGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iLmdldFdzZGxVUkkoKSkpIHsKLQkJCQkJCSAgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IuY2FuY2VsKCk7Ci0JCQkJCQkgIHNldFZhbGlkYXRpb25JblByb2dyZXNzKGZhbHNlKTsKLQkJCQkJICB9IGVsc2UgewkJCQkJCSAgCi0JCQkJCQkgIHN0YXJ0V1NETFZhbGlkYXRpb24gPSBmYWxzZTsKLQkJCQkJICB9Ci0JCQkJICB9IAotCQkJICB9Ci0JCSAgfSAKLQkJICAKLQkJICBpZiAoc3RhcnRXU0RMVmFsaWRhdGlvbikgewotCQkJICBzdGFydFdTRExWYWxpZGF0aW9uSm9iKHdzZGxVUkkpOwotCQkgIH0KLQkgIH0KLQkgIHJldHVybjsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0V1NETFZhbGlkYXRpb25Kb2IgKFN0cmluZyB3c2RsVVJJKSB7Ci0JICB2YWxpZGF0ZVdTRExKb2JfID0gbmV3IFZhbGlkYXRlV1NETEpvYih3c2RsVVJJKTsKLQkgIHZhbGlkYXRlV1NETEpvYl8uYWRkSm9iQ2hhbmdlTGlzdGVuZXIoIGpvYkNoYW5nZUFkYXB0ZXJfICk7Ci0JICB2YWxpZGF0ZVdTRExKb2JfLnNjaGVkdWxlKCk7Ci0JICBzZXRWYWxpZGF0aW9uSW5Qcm9ncmVzcyh0cnVlKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdXBkYXRlVmFsaWRhdGlvblN1bW1hcnkoaW50IG1lc3NhZ2VTZXZlcml0eSkKLSAgewotICAJCi0gIAlzd2l0Y2ggKG1lc3NhZ2VTZXZlcml0eSkgewotICAJY2FzZSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SOgotCQl2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkVSUk9SX01FU1NBR0VTX0lOX1ZBTElEQVRJT04pOwotCQl2YWxpZGF0aW9uU3VtbWFyeVRleHQyXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5XQVJOSU5HX0lGX0NPTlRJTlVFKTsKLQkJYnJlYWs7Ci0JY2FzZSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkc6Ci0JCXZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuV0FSTklOR19NRVNTQUdFU19JTl9WQUxJREFUSU9OKTsKLQkJdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuV0FSTklOR19JRl9DT05USU5VRSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVkFMSURBVElPTl9DT01QTEVURUQpOwotCQl2YWxpZGF0aW9uU3VtbWFyeVRleHQyXy5zZXRUZXh0KCIgIik7Ci0JCWJyZWFrOwotCX0KLSAgfQotICAKLSAgcHJpdmF0ZSBJRmlsZSB1cmkySUZpbGUoU3RyaW5nIHVyaSkKLSAgewotICAgIElSZXNvdXJjZSByZXMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIodXJpKTsKLSAgICAKLSAgICBpZiAocmVzIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICByZXR1cm4gKElGaWxlKXJlczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgaUZpbGUyVVJJKElGaWxlIGZpbGUpCi0gIHsKLSAgCUZpbGUgZiA9IGZpbGUuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gZi50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gZi50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKGluaXRpYWxTZWxlY3Rpb24gIT0gbnVsbCAmJiAhaW5pdGlhbFNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgT2JqZWN0IG9iamVjdCA9IGluaXRpYWxTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBTdHJpbmcgd3NkbFVSSSA9IHRvV3NkbFVSSShvYmplY3QpOyAgCi0gICAgICB3c2RsVVJJXyA9IHdzZGxVUkk7Ci0gICAgICAKLSAgICAgIGlmICh3c2RsVVJJICE9IG51bGwgJiYgd2ViU2VydmljZVVSSSAhPSBudWxsKQotICAgICAgewotICAgICAgICBoYW5kbGVXZWJTZXJ2aWNlVVJJKHdzZGxVUkkpOwotICAgIAkKLSAgICAgICAgd2ViU2VydmljZVVSSS5yZW1vdmVNb2RpZnlMaXN0ZW5lcihtb2RpZnlMaXN0ZW5lcl8pOwotICAgICAgICB3ZWJTZXJ2aWNlVVJJLnNldFRleHQoZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKSk7ICAgICAgIAotICAgICAgICB3ZWJTZXJ2aWNlVVJJLmFkZE1vZGlmeUxpc3RlbmVyKG1vZGlmeUxpc3RlbmVyXyk7Ci0gICAgICB9Ci0gICAgfSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIHRvV3NkbFVSSShPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsKQotICAgICAgcmV0dXJuIEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKChTZXJ2aWNlSW1wbClvYmplY3QpOwotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCi0gICAgICByZXR1cm4gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoKFdTRExSZXNvdXJjZUltcGwpb2JqZWN0KTsKLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlUmVmKQotICAgICAgcmV0dXJuIEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKChTZXJ2aWNlUmVmKW9iamVjdCk7Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICByZXR1cm4gKChJRmlsZSlvYmplY3QpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICByZXR1cm4gKFN0cmluZylvYmplY3Q7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKQotICB7Ci0JICBTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNzOyAKLQkgIGlmICh0cmVlICE9IG51bGwgJiYgdHJlZS5nZXRXc2RsVVJJKCkgIT0gbnVsbCkKLQkJICBzcyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRyZWUuZ2V0V3NkbFVSSSgpKTsKLQkgIGVsc2UKLQkJICBzcyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHdzZGxVUklfKTsKLQlyZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oIAotICAgICAgICAgICAgICAgbmV3IFdTRExTZWxlY3Rpb25XcmFwcGVyKCB3ZWJTZXJ2aWNlc1BhcnNlciwgc3MpKTsKLSAgfQotICAKLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotCVN0cmluZyB3c2RsVVJJOwotCi0JaWYgKHRyZWUgIT0gbnVsbCkKLSAgICAgICB3c2RsVVJJID0gdHJlZS5nZXRXc2RsVVJJKCk7Ci0JZWxzZQotCQl3c2RsVVJJID0gd3NkbFVSSV87Ci0JCi0gICAgaWYgKHdzZGxVUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJUHJvamVjdCBwID0gZ2V0UHJvamVjdEZyb21VUkkod3NkbFVSSSk7Ci0gICAgICBpZiAocCE9bnVsbCAmJiBwLmV4aXN0cygpKQotICAgICAgICByZXR1cm4gcDsKLSAgICAgIAotICAgICAgU3RyaW5nIHdzUmVsUGF0aCA9IHdzZGxVUklfOwotICAgICAgSVJlc291cmNlIHdzUmVzID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod3NSZWxQYXRoKTsKLSAgICAgIGlmICh3c1JlcyE9bnVsbCAmJiB3c1JlcyBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgewotICAgICAgICBJUHJvamVjdCBwMiA9ICgoSUZpbGUpd3NSZXMpLmdldFByb2plY3QoKTsKLSAgICAgICAgcmV0dXJuIHAyOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKQotICB7Ci0JIAotICAgIFN0cmluZyB3c2RsVVJJOwotICAgIGlmICh0cmVlICE9IG51bGwpCi0gICAgCXdzZGxVUkkgPSB0cmVlLmdldFdzZGxVUkkoKTsKLSAgICBlbHNlIAotICAgIAl3c2RsVVJJID0gd3NkbFVSSV87Ci0gICAgCi0gICAgaWYgKHdzZGxVUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgY25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVVSSSh3c2RsVVJJKTsKLSAgICAgIGlmIChjbmFtZSE9bnVsbCAmJiBjbmFtZS5sZW5ndGgoKT4wKQotICAgICAgICByZXR1cm4gY25hbWU7Ci0gICAgICAKLSAgICAgIFN0cmluZyB3c1JlbFBhdGggPSB3c2RsVVJJXzsKLSAgICAgIElSZXNvdXJjZSB3c1JlcyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdzUmVsUGF0aCk7Ci0gICAgICBpZiAod3NSZXMhPW51bGwgJiYgd3NSZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2Yod3NSZXMpOwotICAgICAgICBpZiAoY29tcCE9bnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBjb21wLmdldE5hbWUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGdldFByb2plY3RGcm9tVVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICBJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICBTdHJpbmcgd2tzcGNSb290TG9jID0gcm9vdC5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0gICAgaW50IGlkeCA9IHVyaS5pbmRleE9mKHdrc3BjUm9vdExvYyk7Ci0gICAgaWYgKGlkeCAhPSAtMSkgCi0gICAgewotICAgICAgU3RyaW5nIHJlbFBhdGggPSB1cmkuc3Vic3RyaW5nKHdrc3BjUm9vdExvYy5sZW5ndGgoKStpZHgpOwotICAgICAgSVJlc291cmNlIHJlcyA9IHJvb3QuZmluZE1lbWJlcihuZXcgUGF0aChyZWxQYXRoKSk7Ci0gICAgICBpZiAocmVzIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0IHAgPSAoKElGaWxlKXJlcykuZ2V0UHJvamVjdCgpOwotICAgICAgICByZXR1cm4gcDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbXBvbmVudE5hbWVGcm9tVVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICBJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICBTdHJpbmcgd2tzcGNSb290TG9jID0gcm9vdC5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0gICAgaW50IGlkeCA9IHVyaS5pbmRleE9mKHdrc3BjUm9vdExvYyk7Ci0gICAgaWYgKGlkeCAhPSAtMSkgCi0gICAgewotICAgICAgU3RyaW5nIHJlbFBhdGggPSB1cmkuc3Vic3RyaW5nKHdrc3BjUm9vdExvYy5sZW5ndGgoKStpZHgpOwotICAgICAgSVJlc291cmNlIHJlcyA9IHJvb3QuZmluZE1lbWJlcihuZXcgUGF0aChyZWxQYXRoKSk7Ci0gICAgICBpZiAocmVzIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXAgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKHJlcyk7Ci0gICAgICAgIGlmIChjb21wIT1udWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgCi0gIHsJCi0gICAgaWYgKHRyZWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvUGF0aCh0cmVlLmdldFdzZGxVUkkoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0JICAgIHJldHVybiBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9QYXRoKHdzZGxVUklfKTsKLSAgICB9Ci0JfQotICAKLSAgcHVibGljIFBvaW50IGdldFdpZGdldFNpemUoKSB7CQotCSAgcmV0dXJuIG5ldyBQb2ludCggNTgwLCA1ODApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBzKSB7Ci0JICBTdHJpbmcgd3NVUkkgPSBzOwotCSAgICAKLQkgICAgaWYgKHdzVVJJLmluZGV4T2YoJzonKSA8IDApCi0JICAgIHsKLQkgICAgICBJRmlsZSBmaWxlID0gdXJpMklGaWxlKHdzVVJJKTsKLQkgICAgICBpZiAoZmlsZSAhPSBudWxsKQotCSAgICAgICAgd3NVUkkgPSBpRmlsZTJVUkkoZmlsZSk7Ci0JICAgIH0KLQkgICAgaWYgKHdzVVJJICE9IG51bGwgJiYgd3NVUkkuaW5kZXhPZignOicpID49IDAgJiYgd2ViU2VydmljZXNQYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzVVJJKSA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCBjbWQgPSBuZXcgVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCgpOwotCSAgICAgIGNtZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcih3ZWJTZXJ2aWNlc1BhcnNlcik7Ci0JICAgICAgY21kLnNldFdlYlNlcnZpY2VVUkkod3NVUkkpOwotCSAgICAgIGNtZC5leGVjdXRlKG51bGwsIG51bGwpOwotCSAgICB9Ci0JCQotCSAgICAvLyBwcmltZSB3aWRnZXQgYmFzZWQgb24gdGhlIHN0cmluZwotCSAgICB3c2RsVVJJXyA9IHdzVVJJOwotCSAgICBpZiAodHJlZSAhPSBudWxsKQotCSAgICAJdHJlZS5zZXRXZWJTZXJ2aWNlVVJJKHdzVVJJKTsKLQkgICAgCi0JICAgIFdlYlNlcnZpY2VFbnRpdHkgZW50aXR5ID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzVVJJKTsKLQkgICAgaWYgKGVudGl0eSAhPSBudWxsICYmIGVudGl0eS5nZXRUeXBlKCkgPT0gV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpCi0gICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIGVsc2UKLQkgICAgCXJldHVybiBmYWxzZTsKLQkgICAgCi0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25XcmFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25XcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYTZjMTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYSB2ZXJ5IHNpbXBsZSB3cmFwcGVyIHRoYXQgYmluZHMgYSBXU0RMIHBhcnNlciB3aXRoCi0gKiBhIHdzZGxTZWxlY3Rpb24gb2JqZWN0LgotICovCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbldyYXBwZXIgCi17Ci0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciAgICBwYXJzZXI7Ci0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiB3c2RsU2VsZWN0aW9uOwotICAKLSAgcHVibGljIFdTRExTZWxlY3Rpb25XcmFwcGVyKCBXZWJTZXJ2aWNlc1BhcnNlciAgICBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotICAgIHRoaXMucGFyc2VyICAgICAgICA9IHBhcnNlcjsKLSAgICB0aGlzLndzZGxTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL0NsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ODgwYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJQk0gQ29ycG9yYXRpb24uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAyMDA3MDUyMyAgIDE1ODIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjYgICAxNzE3MDUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIGltcHJvdmUgQW50VGFzayBlcnJvcnMgcmVwb3J0Ci0gKiAyMDA4MDMyNiAgIDIyMTM2NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA0MDIgICAyMjUwMzIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDgwNDE1ICAgMjI3MTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBOZWVkIGEgd2F5IHRvIHNwZWNpZnkgYSBiYWNrdXAgV2ViIHNlcnZpY2UgcnVudGltZQotICogMjAwODA0MjEgICAyMjgwNTQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5QRSBpbiBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5GYWNldFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldE1hdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlByb2plY3RUb3BvbG9neUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuQ2xpZW50UnVudGltZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuRmFjZXRNYXRjaENhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0Q2hvaWNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlNpbXBsZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTdGF0ZTsKLQotcHVibGljIGNsYXNzIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17ICAgCi0gIHByaXZhdGUgU3RyaW5nIERFRkFVTFRfQ0xJRU5UX0VBUl9QUk9KRUNUX0VYVCA9ICJFQVIiOwotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyICAgIGNsaWVudElkc187Ci0gIHByaXZhdGUgYm9vbGVhbiBjbGllbnRJZHNGaXhlZF8gPSBmYWxzZTsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UnVudGltZUlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdE5hbWVfOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRFYXJQcm9qZWN0TmFtZV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGNsaWVudE5lZWRFQVJfID0gdHJ1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50Q29tcG9uZW50VHlwZV87Ci0gIHByaXZhdGUgRmFjZXRNYXRjaGVyIGNsaWVudEZhY2V0TWF0Y2hlcl87Ci0gIAotICBwcml2YXRlIElDb250ZXh0ICAgICAgICAgIGNvbnRleHRfOwotICBwcml2YXRlIElTZWxlY3Rpb24gICAgICAgIHNlbGVjdGlvbl87Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudF87Ci0gIHByaXZhdGUgUmVzb3VyY2VDb250ZXh0ICAgcmVzb3VyY2VDb250ZXh0XzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICB0ZXN0XzsKLSAgCi0gIC8vQSBub3RlIG9uIGluaXRpYWwgcHJvamVjdHMgLi4uCi0gIC8vVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBjbGllbnRJbml0aWFsUHJvamVjdF8gYW5kIGluaXRpYWxQcm9qZWN0XyBpcyB0aGF0Ci0gIC8vY2xpZW50SW5pdGlhbFByb2plY3RfIGNvbWVzIGZyb20gdGhlIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQgd2hpbGUgaW5pdGlhbFByb2plY3RfCi0gIC8vY29tZXMgZnJvbSBTZWxlY3Rpb25Db21tYW5kIChpLmUuIGl0IGlzIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHRoaW5nIHRoYXQgd2FzIHNlbGVjdGVkIGJlZm9yZSAKLSAgLy90aGUgd2l6YXJkIHdhcyBsYXVuY2hlZCkuIEluIHRoZSBkZWZhdWx0aW5nIGFsZ29yaXRobSwgY2xpZW50SW5pdGlhbFByb2plY3RfIHdpbGwgCi0gIC8vYmUgZ2l2ZW4gZmlyc3QgcHJpb3JpdHkuIElmLCBob3dldmVyLCBpdCBpcyBkZWVtZWQgdGhhdCBjbGllbnRJbml0aWFsUHJvamVjdF8gaXMgbm90IGEgdmFsaWQgcHJvamVjdCAKLSAgLy9iZWNhdXNlIGl0IGNvbnRhaW5zIHRoZSBKMkVFIFdlYiBzZXJ2aWNlIGZvciB3aGljaCB3ZSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIGNsaWVudCwgaW5pdGlhbFByb2plY3RfCi0gIC8vd2lsbCBiZSBnaXZlbiBzZWNvbmQgcHJpb3JpdHkuCi0gIHByaXZhdGUgSVByb2plY3QgaW5pdGlhbFByb2plY3RfOyAvL1RoaXMgaXMgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIHByaW9yIHRvIHRoZSB3aXphcmQgYmVpbmcgbGF1bmNoZWQuCi0gIHByaXZhdGUgSVByb2plY3QgY2xpZW50SW5pdGlhbFByb2plY3RfOyAvL1RoaXMgaXMgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgb2JqZWN0IHNlbGVjdGlvbiBmcm9tIHBhZ2UgMi4KLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyXzsgIAotCi0gIHB1YmxpYyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoIFR5cGVSdW50aW1lU2VydmVyIGlkcyApCi0gIHsKLSAgICBjbGllbnRJZHNfID0gaWRzOwotICB9Ci0gIAotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudElkc187IAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRJZHNGaXhlZChib29sZWFuIGIpCi0gIHsKLSAgICBjbGllbnRJZHNGaXhlZF8gPSBiOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUlkKCkKLSAgewotICAgIHJldHVybiBjbGllbnRSdW50aW1lSWRfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3ROYW1lKCkKLSAgewotICAgIHJldHVybiBjbGllbnRQcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudEVhclByb2plY3ROYW1lXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBjbGllbnRFYXJQcm9qZWN0TmFtZV8gPSBuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudENvbXBvbmVudFR5cGUoKQotICB7Ci0gICAgcmV0dXJuICBjbGllbnRDb21wb25lbnRUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRfOyAgCi0gIH0KLSAgICAKLSAgcHVibGljIElDb250ZXh0IGdldENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHRfOwotICB9ICAKLSAgCi0gIHB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBEZWZhdWx0cyB0aGUgZm9sbG93aW5nIGJpdHMgb2YgaW5mb3JtYXRpb24gaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKLSAgICogY2xpZW50UnVudGltZUlkXyA6IHRoZSBjbGllbnRSdW50aW1lSWQuIE11c3QgYmUgZGVmYXVsdGVkIHRvIG5vbi1lbXB0eSBTdHJpbmcuCi0gICAqIGNsaWVudElkc18ucnVudGltZUlkXzogdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWQuIE11c3QgYmUgZGVmYXVsdGVkIHRvIG5vbi1lbXB0eSBTdHJpbmcuCi0gICAqIGNsaWVudFByb2plY3ROYW1lXyA6IHRoZSBuYW1lIG9mIHRoZSBjbGllbnQgcHJvamVjdC4gTXVzdCBiZSBub24tZW1wdHkuIE1heSBvciBtYXkgbm90IGV4aXN0LgotICAgKiBjbGllbnRDb21wb25lbnRUeXBlXzogdGhlIGlkIG9mIHRoZSBjbGllbnQgcHJvamVjdCB0ZW1wbGF0ZS4gTXVzdCBiZSBlbXB0eSBpZiB0aGUgY2xpZW50Ci0gICAqICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCBleGlzdHMuIE11c3QgYmUgbm9uLWVtcHR5IG9mIHRoZSBjbGllbnQgcHJvamVjdCBkb2VzIG5vdCBleGlzdC4KLSAgICogY2xpZW50SWRzXy5zZXJ2ZXJJZF86IHRoZSBzZXJ2ZXIgdHlwZSBpZC4gTWF5IGJlIGFuIGVtcHR5IFN0cmluZyBpZiB0aGUgZGVmYXVsdGVkIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCByZXF1aXJlIGEgc2VydmVyLgotICAgKiBjbGllbnRJZHNfLnNlcnZlckluc3RhbmNlSWRfOiB0aGUgc2VydmVyIGlkLiBNYXkgYmUgbnVsbCBvciBhbiBlbXB0eSBTdHJpbmcuCi0gICAqIGNsaWVudE5lZWRFQVJfOiB0cnVlIGlmIGFuIEVBUiBpcyBuZWVkZWQuIEZhbHNlIG90aGVyd2lzZS4KLSAgICogY2xpZW50RWFyUHJvamVjdE5hbWVfOiB0aGUgY2xpZW50IEVBUiBwcm9qZWN0LiBNdXN0IGJlIGVtcHR5IGlmIHRoZSBjbGllbnROZWVkRUFSXyBpcyBmYWxzZS4KLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBub24tZW1wdHkgaWYgdGhlIGNsaWVudE5lZWRFQVJfIGlzIHRydWUuCi0gICAqIHdlYlNlcnZpY2VDbGllbnRfIDogdGhlIElXZWJTZXJ2aWNlQ2xpZW50IGJhc2VkIG9uIHRoZSBjYWxjdWxhdGVkIGRlZmF1bHRzLiBNdXN0IGJlIG5vbi1udWxsIGZvciAiTmV4dCIKLSAgICogICAgICAgICAgICAgICAgICAgICBidXR0b24gdG8gYmUgZW5hYmxlZCBvbiB0aGUgcGFnZSBmb2xsb3dpbmcgdGhpcyBjb21tYW5kLgotICAgKiBjb250ZXh0XyA6IGFuIElDb250ZXh0LiBNdXN0IGJlIG5vbi1udWxsIGZvciAiTmV4dCIgYnV0dG9uIHRvIGJlIGVuYWJsZWQgb24gdGhlIHBhZ2UgZm9sbG93aW5nIHRoaXMgY29tbWFuZC4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAqLyAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkKLSAgewotCi0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAKLSAgICAgIC8vKipTdGVwIDEqKiBEZWZhdWx0IHRoZSBXZWIgc2VydmljZSBydW50aW1lLgotICAgIAkKLSAgICAgIC8vY2xpZW50SWRzRml4ZWRfIGlzIHNldCB0byB0cnVlIGZvciB0aGUgQW50IHNjZW5hcmlvLiBJdCdzIGFsd2F5cyBmYWxzZSBmb3IgdGhlIHdpemFyZAotICAgICAgLy9zY2VuYXJpb3MuCi0gICAgICBpZiAoY2xpZW50SWRzRml4ZWRfICYmIChjbGllbnRQcm9qZWN0TmFtZV8gPT0gbnVsbCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCB0aGUgY2xpZW50UnVudGltZSBiYXNlZCBvbiB0aGUgcnVudGltZSwgc2VydmVyLCBhbmQgaW5pdGlhbAotICAgICAgICAvLyBzZWxlY3Rpb24uCi0gICAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBnZXREZWZhdWx0Q2xpZW50UnVudGltZUZvckZpeGVkUnVudGltZUFuZFNlcnZlcihjbGllbnRJbml0aWFsUHJvamVjdF8pOwotICAgICAgICBjbGllbnRGYWNldE1hdGNoZXJfID0gZHJ0LmdldEZhY2V0TWF0Y2hlcigpOwotICAgICAgICBjbGllbnRQcm9qZWN0TmFtZV8gPSBkcnQuZ2V0UHJvamVjdE5hbWUoKTsKLSAgICAgICAgY2xpZW50UnVudGltZUlkXyA9IGRydC5nZXRSdW50aW1lSWQoKTsgICAgICAgIAotICAgICAgfSAKLSAgICAgIGVsc2UgICAgICAKLSAgICAgIHsJCi0gICAgICAgIFZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFNldCB0aGUgcnVudGltZSBiYXNlZCBvbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBvYmplY3Qgc2VsZWN0aW9uL2luaXRpYWwgc2VsZWN0aW9uLgotICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGlmICghdnUuaXNQcm9qZWN0U2VydmljZVByb2plY3QoY2xpZW50SW5pdGlhbFByb2plY3RfLCB3c2RsVVJJXywgcGFyc2VyXykgJiYgIWNsaWVudElkc0ZpeGVkXykKLSAgICAgICAgewotICAgICAgICAgIC8vSWYgY2xpZW50SW50aWFsUHJvamVjdF8gZG9lcyBub3QgY29udGFpbiB0aGUgSjJFRSBXZWIgc2VydmljZSwgY2hvb3NlIGEgY2xpZW50UnVudGltZSBiYXNlZCBvbiBpdC4KLSAgICAgICAgICBkcnQgPSBnZXREZWZhdWx0UnVudGltZShjbGllbnRJbml0aWFsUHJvamVjdF8sIGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRydWUsIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgY2xpZW50RmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgICAgICAgICBjbGllbnRQcm9qZWN0TmFtZV8gPSBkcnQuZ2V0UHJvamVjdE5hbWUoKTsgCi0gICAgICAgICAgY2xpZW50UnVudGltZUlkXyA9IGRydC5nZXRSdW50aW1lSWQoKTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9jbGllbnRJbml0aWFsUHJvamVjdF8gY29udGFpbnMgdGhlIEoyRUUgV2ViIHNlcnZpY2Ugc28gZG9uJ3QgdXNlIGl0LgotICAgICAgICAgIC8vVHJ5IHVzaW5nIHRoZSBpbml0YWxQcm9qZWN0XyBpbnN0ZWFkLgotICAgICAgICAgIGlmICghdnUuaXNQcm9qZWN0U2VydmljZVByb2plY3QoaW5pdGlhbFByb2plY3RfLCB3c2RsVVJJXywgcGFyc2VyXykgJiYgIWNsaWVudElkc0ZpeGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL0lmIGludGlhbFByb2plY3RfIGRvZXMgbm90IGNvbnRhaW4gdGhlIEoyRUUgV2ViIHNlcnZpY2UsIGNob29zZSBhIGNsaWVudFJ1bnRpbWUgYmFzZWQgb24gaXQuCi0gICAgICAgICAgICBkcnQgPSBnZXREZWZhdWx0UnVudGltZShpbml0aWFsUHJvamVjdF8sIGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRydWUsIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgICBjbGllbnRGYWNldE1hdGNoZXJfID0gZHJ0LmdldEZhY2V0TWF0Y2hlcigpOwotICAgICAgICAgICAgY2xpZW50UHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgICAgICAgICBjbGllbnRSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9Cb3RoIGNsaWVudEludGlhbFByb2plY3RfIGFuZCBpbml0aWFsUHJvamVjdF8gY29udGFpbiB0aGUgSjJFRSBXZWIgc2VydmljZQotICAgICAgICAgICAgLy9hbmQgY2Fubm90IGJlIHVzZWQgdG8gaW5mbHVlbmNlIGNsaWVudFJ1bnRpbWUgZGVmYXVsdGluZy4KLSAgICAgICAgICAgIC8vQ2hvb3NlIGEgY2xpZW50UnVudGltZSBidXQgZG9uJ3QgY2hvb3NlIGNsaWVudEluaXRpYWxQcm9qZWN0XwotICAgICAgICAgICAgLy9hcyB0aGUgY2xpZW50UHJvamVjdC4KLSAgICAgICAgICAgIGRydCA9IGdldERlZmF1bHRSdW50aW1lKG51bGwsIGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRydWUsIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgICBjbGllbnRSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvL1NldCB0aGUgV2ViIHNlcnZpY2UgcnVudGltZSBpZCBmcm9tIHRoZSBjbGllbnRSdW50aW1lCi0gICAgICAgIGNsaWVudElkc18uc2V0UnVudGltZUlkKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChjbGllbnRSdW50aW1lSWRfKS5nZXRSdW50aW1lKCkKLSAgICAgICAgICAgIC5nZXRJZCgpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8qKlN0ZXAgMioqIERlZmF1bHQgdGhlIGNsaWVudCBwcm9qZWN0IGlmIGl0IHdhcyBub3QgYWxyZWFkeSBkZWZhdWx0ZWQgCi0gICAgICAvL2FzIHBhcnQgb2YgZGVmYXVsdGluZyB0aGUgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICAgIGlmIChjbGllbnRQcm9qZWN0TmFtZV8gPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gUHJvamVjdCBuYW1lIGRpZCBub3QgZ2V0IHNldCB3aGVuIHRoZSBydW50aW1lIHdhcyBzZXQsIHNvIHNldCBpdCBub3cKLSAgICAgICAgY2xpZW50UHJvamVjdE5hbWVfID0gZ2V0RGVmYXVsdENsaWVudFByb2plY3ROYW1lKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vKipTdGVwIDMqKiBEZWZhdWx0IHRoZSBjbGllbnQgcHJvamVjdCB0eXBlLiAgICAgIAotICAgICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgICAgaWYgKCFjbGllbnRQcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICAvLyBTZXQgdGhlIHByb2plY3QgdGVtcGxhdGUKLSAgICAgICAgY2xpZW50Q29tcG9uZW50VHlwZV8gPSBnZXREZWZhdWx0Q2xpZW50UHJvamVjdFRlbXBsYXRlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU2V0IGl0IHRvIGFuIGVtcHR5IFN0cmluZwotICAgICAgICBjbGllbnRDb21wb25lbnRUeXBlXyA9ICIiOwotICAgICAgfQotCi0KLSAgICAgIC8vKipTdGVwIDQqKiBEZWZhdWx0IHRoZSBjbGllbnQgc2VydmVyIGlmIHRoaXMgaXMgbm90IGFuIEFudCBzY2VuYXJpby4KLSAgICAgIGlmICghY2xpZW50SWRzRml4ZWRfKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHNlcnZlclN0YXR1cyA9IHNldENsaWVudERlZmF1bHRTZXJ2ZXIoKTsKLSAgICAgICAgaWYgKHNlcnZlclN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc2VydmVyU3RhdHVzKTsKLSAgICAgICAgICByZXR1cm4gc2VydmVyU3RhdHVzOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vKipTdGVwIDUqKiBEZWZhdWx0IGNsaWVudE5lZWRFQVIgYW5kIGNsaWVudCBFQVIgaWYgYW4gRUFSIGlzIG5lZWRlZAotICAgICAgc2V0RGVmYXVsdENsaWVudEVhclByb2plY3QoKTsgICAgICAKLSAgICAgIAotICAgICAgCi0gICAgICAvLyoqU3RlcCA2KiogQ2FsY3VsYXRlIGRlZmF1bHQgSVdlYlNlcnZpY2VDbGllbnQuIFRoaXMgaXMgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAotICAgICAgLy8gTmV4dCBpcyBlbmFibGVkIG9uIHRoZSBwYWdlIGZvbGxvd2luZyB0aGlzIGNvbW1hbmQuCi0gICAgICBzZXREZWZhdWx0c0ZvckV4dGVuc2lvbihlbnYpOwotCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIAotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIENhdGNoIGFsbCBFeGNlcHRpb25zIGluIG9yZGVyIHRvIGdpdmUgc29tZSBmZWVkYmFjayB0byB0aGUgdXNlcgotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwKLSAgICAgICAgICBuZXcgU3RyaW5nW10geyBlLmdldE1lc3NhZ2UoKSB9KSwgZSk7Ci0gICAgICAgIAotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBoYXMgbm8gZXJyb3IgbXNnLCBpdCdzIGtpbmQgb2YgdXNlbGVzcyB0byB0aGUgdXNlciBzbyBsZXQncyBsb2cgaXQKLSAgICAgIGlmICggZS5nZXRNZXNzYWdlKCkgPT0gbnVsbCl7Ci0gICAgICAgIElMb2cgcGx1Z2lubG9nID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRMb2coKTsKLSAgICAgICAgcGx1Z2lubG9nLmxvZyhlcnJvclN0YXR1cyk7Ci0gICAgICAgIAkgIAotICAgICAgICAvLyBjcmVhdGUgYSBuZXcgSVN0YXR1cyB3aGljaCBoYXMgYSBub24tbnVsbCBtc2csIHRoaXMgaXMgdG8gYmUgdGhyb3duIHRvIHRoZSB1c2VyLgotICAgICAgICBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwKLSAgICAgIAkgICAgICAgbmV3IFN0cmluZ1tdIHsgV1NVSVBsdWdpbk1lc3NhZ2VzLk1TR19TRUVfRVJST1JfTE9HIH0pLCBlKTsgIAotICAgICAgfQotICAgICAgICAgIAotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0RGVmYXVsdENsaWVudEVhclByb2plY3QoKQotICB7ICAgIAotICAgIC8vRG9uJ3QgbmVlZCBhbiBlYXIgaWYgdGhpcyBpcyBhIEphdmEgcHJvamVjdCwgb3IgaWYgdGhlIHNlbGVjdGVkIHRlbXBsYXRlIGlzIGpzdC51dGlsaXR5Ci0gICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgIGlmIChjbGllbnRQcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIGNsaWVudE5lZWRFQVJfID0gIShGYWNldFV0aWxzLmlzSmF2YVByb2plY3QoY2xpZW50UHJvamVjdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY2xpZW50TmVlZEVBUl8gPSAhKEZhY2V0VXRpbHMuaXNVdGlsaXR5VGVtcGxhdGUoY2xpZW50Q29tcG9uZW50VHlwZV8pKTsgIAotICAgIH0KLSAgICAKLSAgICAvL0lmIGNsaWVudE5lZWRFQVJfIGlzIHN0aWxsIHRydWUsIGl0IG1lYW5zIHRoYXQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIEphdmEgcHJvamVjdAotICAgIC8vb3IgSmF2YSBwcm9qZWN0IHR5cGUuIENoZWNrIHRoZSBzZXJ2ZXIuCi0gICAgaWYgKGNsaWVudE5lZWRFQVJfKQotICAgIHsKLSAgICAgIC8vIERldGVybWluZSBpZiBhbiBlYXIgc2VsZWN0aW9uIGlzIG5lZWRlZCBiYXNlZCBvbiB0aGUgc2VydmVyIHR5cGUuCi0KLSAgICAgIFN0cmluZyBzZXJ2ZXJJZCA9IGNsaWVudElkc18uZ2V0U2VydmVySWQoKTsKLSAgICAgIGlmIChzZXJ2ZXJJZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBVc2UgdGhlIHNlcnZlciB0eXBlCi0gICAgICAgIFN0cmluZyBzZXJ2ZXJUYXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVySWQpOwotICAgICAgICBpZiAoc2VydmVyVGFyZ2V0SWQgIT0gbnVsbCAmJiBzZXJ2ZXJUYXJnZXRJZC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIVNlcnZlclV0aWxzLmlzVGFyZ2V0VmFsaWRGb3JFQVIoc2VydmVyVGFyZ2V0SWQsICIxMyIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIERlZmF1bHQgdGhlIEVBUiBzZWxlY3Rpb24gdG8gYmUgZW1wdHkKLSAgICAgICAgICAgIGNsaWVudE5lZWRFQVJfID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgeyAgLy8gc2VydmVySWQgPT0gbnVsbCwgYXNzdW1lIHRoYXQgaXQgZG9lcyBub3QgbmVlZCBFQVIKLSAgICAJICBjbGllbnROZWVkRUFSXyA9IGZhbHNlOwotICAgIAkgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoY2xpZW50TmVlZEVBUl8pCi0gICAgewotICAgIAljbGllbnRFYXJQcm9qZWN0TmFtZV8gPSBEZWZhdWx0aW5nVXRpbHMuZ2V0RGVmYXVsdEVBUlByb2plY3ROYW1lKGNsaWVudFByb2plY3ROYW1lXyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbGllbnRFYXJQcm9qZWN0TmFtZV8gPSAiIjsKLSAgICB9ICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBzZXRDbGllbnREZWZhdWx0U2VydmVyKCkKLSAgewotICAgIC8vQ2hvb3NlIGFuIGV4aXN0aW5nIHNlcnZlciB0aGUgbW9kdWxlIGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGlmIHBvc3NpYmxlCi0gICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgIElTZXJ2ZXJbXSBjb25maWd1cmVkU2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKFNlcnZlclV0aWxzLmdldE1vZHVsZShjbGllbnRQcm9qZWN0KSwgbnVsbCk7Ci0gICAgCi0gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJzIT1udWxsICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aD4wICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGNsaWVudElkc18uc2V0U2VydmVySWQoY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7ICAgICAgICAgICAgCQotICAgIH0KLSAgICAKLSAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgY2hvb3NlIGEgc3VpdGFibGUgc2VydmVyIG9yIHNlcnZlciB0eXBlIGJhc2VkIG9uIHRoZSBleGlzdGluZyBwcm9qZWN0J3MgcnVudGltZSBvciBmYWNldHMKLSAgICBpZiAoY2xpZW50UHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21Qcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXywgY2xpZW50RmFjZXRNYXRjaGVyXyk7Ci0gICAgICBpZiAoc2VydmVyICE9IG51bGwgJiYgc2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7Ci0gICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gZ2V0U2VydmVyVHlwZUZyb21Qcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXywgY2xpZW50RmFjZXRNYXRjaGVyXyk7Ci0gICAgICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlclR5cGUuZ2V0SWQoKSk7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvL0hhdmVuJ3QgcGlja2VkIGEgc2VydmVyL3NlcnZlciB0eXBlIG9uIHRoZSBiYXNpcyBvZiB0aGUgcHJvamVjdC4gUGljayBhIHNlcnZlci9zZXJ2ZXIgdHlwZQotICAgIC8vdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNsaWVudFJ1bnRpbWVJZC4KLSAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21DbGllbnRSdW50aW1lSWQoKTsKLSAgICBpZiAoc2VydmVyIT1udWxsICYmIHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICBjbGllbnRJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVyLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotICAgIAotICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBnZXRTZXJ2ZXJUeXBlRnJvbUNsaWVudFJ1bnRpbWVJZCgpOwotICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfSAgICAKLSAgICAKLSAgICAvLyBObyBzdWl0YWJsZSBzZXJ2ZXIgd2FzIGZvdW5kLiBQb3B1cCBhbiBlcnJvciBpZiB0aGUgZGVmYXVsdCBXZWIgc2VydmljZQotICAgIC8vIHJ1bnRpbWUgcmVxdWlyZXMgYSBzZXJ2ZXIuCi0gICAgUnVudGltZURlc2NyaXB0b3IgcnVudGltZURlc2NyaXB0b3IgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZChjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICBpZiAocnVudGltZURlc2NyaXB0b3IuZ2V0U2VydmVyUmVxdWlyZWQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRSwgbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICBydW50aW1lTGFiZWx9KSk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU2VydmVyIGdldFNlcnZlckZyb21DbGllbnRSdW50aW1lSWQoKQotICB7Ci0gICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLSAgICBpZiAoc2VydmVycyAhPSBudWxsICYmIHNlcnZlcnMubGVuZ3RoID4gMCkgewotICAgIAkKLSAgICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICAgIFN0cmluZyBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQgPSBjb250ZXh0LmdldFNlcnZlckZhY3RvcnlJZCgpOwotICAgICAgICAKLSAgICAgICAgLy9JZiBhIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIGlzIHByZXNlbnQsIGNoZWNrIHRoYXQgb25lIGZpcnN0Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmVycy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChzZXJ2ZXJzW2pdICE9IG51bGwgJiYgc2VydmVyc1tqXS5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0JICAgICAgICAgIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotCSAgICAgICAgICBpZiAoc2VydmVyRmFjdG9yeUlkLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihjbGllbnRSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2pdOwotCSAgICAgICAgICAgIH0KLQkgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy9BIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIGNvdWxkIG5vdCBiZSBmb3VuZCBvciBkaWQgbm90IG1hdGNoLiBDaGVjayBhbGwgdGhlIGV4aXN0aW5nIHNlcnZlcnMuICAgIAotICAgIAkKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAJaWYgKHNlcnZlcnNbaV0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIAl7Ci0JICAgICAgICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRTZXJ2ZXIoY2xpZW50UnVudGltZUlkXywgc2VydmVyRmFjdG9yeUlkKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgcmV0dXJuIHNlcnZlcnNbaV07Ci0JICAgICAgICB9Ci0JICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21DbGllbnRSdW50aW1lSWQoKQotICB7Ci0gICAgU3RyaW5nW10gc2VydmVyVHlwZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZF8pOwotICAgIGlmIChzZXJ2ZXJUeXBlcyE9bnVsbCAmJiBzZXJ2ZXJUeXBlcy5sZW5ndGg+MCkKLSAgICB7Ci0gICAgICAvL1JldHVybiB0aGUgcHJlZmVycmVkIG9uZSBpZiBpdCBpcyBpbiB0aGUgbGlzdAotICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZlclR5cGVzW2ldLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZXNbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlclR5cGVzWzBdKTsKLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUsIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXIpCi0gIHsKLSAgICBJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0gICAgCi0gICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLSAgICAKLSAgICBpZiAoc2VydmVycy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotICAgICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0gICAgICAgIAotICAgICAgLy8gR2V0IHRoZSBydW50aW1lLgotICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBudWxsOwotCi0gICAgICBpZiAocHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgICAgaWYgKGZQcm9qZWN0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAJICBmUnVudGltZSA9IGZQcm9qZWN0LmdldFByaW1hcnlSdW50aW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IGFuIGV4aXN0aW5nIHNlcnZlciB0aGF0IGhhcyB0aGUgc2FtZSBydW50aW1lLgotICAgICAgICBJU2VydmVyIGZpcnN0TWF0Y2hpbmdTZXJ2ZXIgPSBudWxsOyAgICAJICAKLSAgICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIElTZXJ2ZXIgdGhpc1NlcnZlciA9IHNlcnZlcnNbaV07Ci0gICAgICAgICAgSVJ1bnRpbWUgdGhpc1NlcnZlclJ1bnRpbWUgPSB0aGlzU2VydmVyLmdldFJ1bnRpbWUoKTsKLSAgICAgICAgICBpZiAoIHRoaXNTZXJ2ZXJSdW50aW1lICE9IG51bGwgJiYgc1J1bnRpbWUgIT0gbnVsbCAmJiB0aGlzU2VydmVyUnVudGltZS5nZXRJZCgpLmVxdWFscyhzUnVudGltZS5nZXRJZCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZmlyc3RNYXRjaGluZ1NlcnZlcj09bnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZmlyc3RNYXRjaGluZ1NlcnZlciA9IHRoaXNTZXJ2ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRoaXNTZXJ2ZXIgIT0gbnVsbCAmJiB0aGlzU2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsICYmIHRoaXNTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgIAkgIAotICAgICAgICAgICAgICBzZXJ2ZXIgPSB0aGlzU2VydmVyOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgLy9JZiBhIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIHdhcyBub3QgZm91bmQgYnV0Ci0gICAgICAgIC8vdGhlcmUgd2FzIGEgc2VydmVyIHRoYXQgbWF0Y2hlZCwgcmV0dXJuIHRoYXQgb25lLgotICAgICAgICBpZiAoc2VydmVyID09IG51bGwgJiYgZmlyc3RNYXRjaGluZ1NlcnZlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmVyID0gZmlyc3RNYXRjaGluZ1NlcnZlcjsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0KLSAgICAgIC8vIElmIGFuIGV4aXN0aW5nIHNlcnZlciBjb3VsZCBub3QgYmUgY2hvc2VuIG9uIHRoZSBiYXNpcyBvZiB0aGUgcHJvamVjdCdzCi0gICAgICAvLyBydW50aW1lLAotICAgICAgLy8gdHJ5IHRvIGZpbmQgYW4gZXhpc3Rpbmcgc2VydmVyIHVzaW5nIHRoZSBwcm9qZWN0J3MgZmFjZXRzIGFuZCB0aGUKLSAgICAgIC8vIGZhY2V0c1RvQWRkLgotICAgICAgaWYgKHNlcnZlciA9PSBudWxsKQotICAgICAgewotICAgICAgICBpZiAocHJvamVjdCE9bnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgU2V0IGZhY2V0cyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgaWYgKGZhY2V0cyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNldCBmYWNldHNDbG9uZSA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgICBmYWNldHNDbG9uZS5hZGRBbGwoZmFjZXRzKTsgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChmYWNldE1hdGNoZXIgIT0gbnVsbCAmJiBmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVyYXRvciBpdHIgPSBmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZhY2V0c0Nsb25lLmFkZChpdHIubmV4dCgpKTsgIAotICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXJ2ZXIgPSBnZXRTZXJ2ZXJGcm9tRmFjZXRzKGZhY2V0c0Nsb25lKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZlcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElTZXJ2ZXIgZ2V0U2VydmVyRnJvbUZhY2V0cyhTZXQgZmFjZXRzKQotICB7Ci0JICAgIElTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkgICAgU2V0IHJ1bnRpbWVzID0gRmFjZXRVdGlscy5nZXRSdW50aW1lcyhuZXcgU2V0W117ZmFjZXRzfSk7Ci0JICAgIEl0ZXJhdG9yIGl0ciA9IHJ1bnRpbWVzLml0ZXJhdG9yKCk7Ci0JICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0JICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCSAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkgICAgCi0JICAgIC8vSWYgb25lIG9mIHRoZSBzZXJ2ZXJzIGlzIG9mIHRoZSBwcmVmZXJyZWQgdHlwZSwgYW5kIGl0cyBydW50aW1lCi0JICAgIC8vaXMgaW4gdGhlIHNldCBvZiBtYXRjaGluZyBydW50aW1lcywgcmV0dXJuIHRoYXQgc2VydmVyLgotCSAgICBmb3IgKGludCBqPTA7IGo8c2VydmVycy5sZW5ndGg7IGorKykgICAgICAKLQkgICAgewotCSAgICAgIElTZXJ2ZXIgdGhpc1NlcnZlciA9IHNlcnZlcnNbal07Ci0JICAgICAgaWYgKHRoaXNTZXJ2ZXIgIT0gbnVsbCAmJiB0aGlzU2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsICYmIHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpICE9IG51bGwgJiYgdGhpc1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKLQkgICAgICB7Ci0JICAgIAlJUnVudGltZSB0aGlzU2VydmVyUnVudGltZSA9IHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpOwotCSAgICAgICAgLy9DaGVjayB0byBzZWUgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgdGhlIHJ1bnRpbWVzLgotCSAgICAgICAgSXRlcmF0b3IgcnVudGltZXNJdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotCSAgICAgICAgd2hpbGUocnVudGltZXNJdHIuaGFzTmV4dCgpKQotCSAgICAgICAgewotCSAgICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpcnVudGltZXNJdHIubmV4dCgpOwotCSAgICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLQkgICAgICAgICAgaWYgKHNSdW50aW1lICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWUuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWUuZ2V0SWQoKSkpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBzZXJ2ZXIgPSB0aGlzU2VydmVyOwotCSAgICAgICAgICB9ICAgICAgICAgIAotCSAgICAgICAgfQotCSAgICAgIH0gICAgICAgICAgICAKLQkgICAgfQotCSAgICAKLQkgICAgaWYgKHNlcnZlciA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgb3V0ZXI6IHdoaWxlIChpdHIuaGFzTmV4dCgpKQotCSAgICAgIHsKLQkgICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSAob3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSkgaXRyCi0JICAgICAgICAgICAgLm5leHQoKTsKLQkgICAgICAgIElSdW50aW1lIHNSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoZlJ1bnRpbWUpOwotCSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKQotCSAgICAgICAgewotCSAgICAgICAgICBJU2VydmVyIHRoaXNTZXJ2ZXIgPSBzZXJ2ZXJzW2ldOwotCSAgICAgICAgICBJUnVudGltZSB0aGlzU2VydmVyUnVudGltZSA9IHRoaXNTZXJ2ZXIuZ2V0UnVudGltZSgpOwotCSAgICAgICAgICBpZiAodGhpc1NlcnZlclJ1bnRpbWUgIT0gbnVsbCAmJiBzUnVudGltZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJSdW50aW1lLmdldElkKCkuZXF1YWxzKHNSdW50aW1lLmdldElkKCkpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgc2VydmVyID0gdGhpc1NlcnZlcjsKLQkgICAgICAgICAgICBicmVhayBvdXRlcjsKLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCi0JICAgIHJldHVybiBzZXJ2ZXI7Ci0KLSAgfQotICAKLSAgcHJvdGVjdGVkIElTZXJ2ZXJUeXBlIGdldFNlcnZlclR5cGVGcm9tUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUsIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXIpCi0gIHsKLQkgICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IG51bGw7Ci0JICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCSAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkgICAgCi0JICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCSAgICBJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCSAgICAKLQkgICAgLy9HZXQgdGhlIHJ1bnRpbWUuCi0JICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSBudWxsOwotCSAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBudWxsOwotCSAgICAKLQkgICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotCSAgICB7Ci0JICAgICAgdHJ5Ci0JICAgICAgewotCSAgICAgICAgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0JICAgICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgIAlmUnVudGltZSA9IGZQcm9qZWN0LmdldFByaW1hcnlSdW50aW1lKCk7Ci0JICAgICAgICB9Ci0JICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkgICAgICB7Ci0JICAgICAgICAKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0JICAgIGlmIChmUnVudGltZSAhPSBudWxsKQotCSAgICB7Ci0JICAgICAgLy9HZXQgYSBzZXJ2ZXIgdHlwZSB0aGF0IGhhcyB0aGUgc2FtZSBydW50aW1lIHR5cGUuCi0JICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7IAotCSAgICAgIGlmIChzUnVudGltZSAhPSBudWxsKQotCSAgICAgIHsKLQkJICAgICAgSVJ1bnRpbWVUeXBlIHNSdW50aW1lVHlwZSA9IHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCSAgICAgIElTZXJ2ZXJUeXBlIGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlID0gbnVsbDsKLQkJICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZlclR5cGVzLmxlbmd0aDsgaSsrKQotCQkgICAgICB7Ci0JCSAgICAgICAgSVNlcnZlclR5cGUgdGhpc1NlcnZlclR5cGUgPSBzZXJ2ZXJUeXBlc1tpXTsKLQkJICAgICAgICBJUnVudGltZVR5cGUgdGhpc1NlcnZlclJ1bnRpbWVUeXBlID0gdGhpc1NlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKTsKLQkJICAgICAgICBpZiAoc1J1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWVUeXBlLmdldElkKCkuZXF1YWxzKHNSdW50aW1lVHlwZS5nZXRJZCgpKSkKLQkJICAgICAgICB7Ci0JCSAgICAgICAgICBpZiAoZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgPT0gbnVsbCkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgZmlyc3RNYXRjaGluZ1NlcnZlclR5cGUgPSB0aGlzU2VydmVyVHlwZTsKLQkJICAgICAgICAgIH0KLQkJICAgICAgICAgIGlmICh0aGlzU2VydmVyVHlwZS5nZXRJZCgpLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBzZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7Ci0JCSAgICAgICAgICAgIGJyZWFrOwotCQkgICAgICAgICAgfQotCQkgICAgICAgIH0gICAgIAotCQkgICAgICB9Ci0JCSAgICAgIAotCQkgICAgICAvL0lmIHRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUgd2FzIG5vdCBmb3VuZCBidXQKLQkJICAgICAgLy90aGVyZSB3YXMgYSBzZXJ2ZXIgdHlwZSB0aGF0IG1hdGNoZWQsIHJldHVybiB0aGF0IG9uZS4gICAgICAgIAotCQkgICAgICBpZiAoc2VydmVyVHlwZSA9PSBudWxsICYmIGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlICE9IG51bGwpCi0JCSAgICAgIHsgICAgICAgIAotCQkgICAgICAgIHNlcnZlclR5cGUgPSBmaXJzdE1hdGNoaW5nU2VydmVyVHlwZTsKLQkJICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCi0JICAgIC8vSWYgYSBzZXJ2ZXIgdHlwZSBjb3VsZCBub3QgYmUgY2hvc2VuIG9uIHRoZSBiYXNpcyBvZiB0aGUgcHJvamVjdCdzIHJ1bnRpbWUsCi0JICAgIC8vdHJ5IHRvIGZpbmQgYSBzZXJ2ZXIgdHlwZSB1c2luZyB0aGUgcHJvamVjdCdzIGZhY2V0cyBhbmQgdGhlIGZhY2V0c1RvQWRkLgotCSAgICBpZiAoc2VydmVyVHlwZSA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotCSAgICAgIHsKLQkgICAgICAgIFNldCBmYWNldHMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdC5nZXROYW1lKCkpOwotCSAgICAgICAgaWYgKGZhY2V0cyAhPSBudWxsKQotCSAgICAgICAgewotCSAgICAgICAgICBTZXQgZmFjZXRzQ2xvbmUgPSBuZXcgSGFzaFNldCgpOwotCSAgICAgICAgICBmYWNldHNDbG9uZS5hZGRBbGwoZmFjZXRzKTsgICAgICAgICAgCi0JICAgICAgICAgIGlmIChmYWNldE1hdGNoZXIgIT0gbnVsbCAmJiBmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKSAhPSBudWxsKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSXRlcmF0b3IgaXRyID0gZmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCkuaXRlcmF0b3IoKTsKLQkgICAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLQkgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICBmYWNldHNDbG9uZS5hZGQoaXRyLm5leHQoKSk7ICAKLQkgICAgICAgICAgICB9ICAgICAgICAgICAgCi0JICAgICAgICAgIH0KLQkgICAgICAgICAgc2VydmVyVHlwZSA9IGdldFNlcnZlclR5cGVGcm9tRmFjZXRzKGZhY2V0c0Nsb25lKTsgICAgICAgICAgCi0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIAotCSAgICByZXR1cm4gc2VydmVyVHlwZTsKLQotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21GYWNldHMoU2V0IGZhY2V0cykKLSAgewotCSAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gbnVsbDsKLQkgICAgU2V0IHJ1bnRpbWVzID0gRmFjZXRVdGlscy5nZXRSdW50aW1lcyhuZXcgU2V0W117ZmFjZXRzfSk7Ci0JICAgIEl0ZXJhdG9yIGl0ciA9IHJ1bnRpbWVzLml0ZXJhdG9yKCk7Ci0JICAgIElTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0JICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCSAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsgICAgCi0KLQkgICAgLy9JZiBvbmUgb2YgdGhlIHNlcnZlciB0eXBlcyBpcyBvZiB0aGUgcHJlZmVycmVkIHR5cGUsIGFuZCBpdHMgcnVudGltZQotCSAgICAvL2lzIGluIHRoZSBzZXQgb2YgbWF0Y2hpbmcgcnVudGltZXMsIHJldHVybiB0aGF0IHNlcnZlciB0eXBlLgotCSAgICBmb3IgKGludCBqPTA7IGo8c2VydmVyVHlwZXMubGVuZ3RoOyBqKyspICAgICAgCi0JICAgIHsKLQkgICAgICBJU2VydmVyVHlwZSB0aGlzU2VydmVyVHlwZSA9IHNlcnZlclR5cGVzW2pdOwotCSAgICAgIElSdW50aW1lVHlwZSB0aGlzU2VydmVyVHlwZVJ1bnRpbWVUeXBlID0gdGhpc1NlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKTsKLQkgICAgICBpZiAodGhpc1NlcnZlclR5cGVSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlLmdldElkKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgewotCSAgICAgICAgLy9DaGVjayB0byBzZWUgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgdGhlIHJ1bnRpbWVzLgotCSAgICAgICAgSXRlcmF0b3IgcnVudGltZXNJdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotCSAgICAgICAgd2hpbGUocnVudGltZXNJdHIuaGFzTmV4dCgpKQotCSAgICAgICAgewotCSAgICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpcnVudGltZXNJdHIubmV4dCgpOwotCSAgICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLQkgICAgICAgICAgaWYgKHNSdW50aW1lICE9IG51bGwpCi0JICAgICAgICAgIHsKLQkgICAgICAgIAkgIElSdW50aW1lVHlwZSBzUnVudGltZVR5cGUgPSBzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkgICAgICAgICAgaWYgKHNSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWVUeXBlLmdldElkKCkpKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBzZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7Ci0JCSAgICAgICAgICB9ICAgICAgICAgIAotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfSAgICAgICAgICAgIAotCSAgICB9Ci0JICAgIAotCSAgICAKLQkgICAgaWYgKHNlcnZlclR5cGUgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIG91dGVyOiB3aGlsZSAoaXRyLmhhc05leHQoKSkKLQkgICAgICB7Ci0JICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpIGl0cgotCSAgICAgICAgICAgIC5uZXh0KCk7Ci0JICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLQkgICAgICAgIGlmIChzUnVudGltZSAhPSBudWxsKQotCSAgICAgICAgewotCQkgICAgICAgIElSdW50aW1lVHlwZSBzUnVudGltZVR5cGUgPSBzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVyVHlwZXMubGVuZ3RoOyBpKyspCi0JCSAgICAgICAgewotCQkgICAgICAgICAgSVNlcnZlclR5cGUgdGhpc1NlcnZlclR5cGUgPSBzZXJ2ZXJUeXBlc1tpXTsKLQkJICAgICAgICAgIGlmICh0aGlzU2VydmVyVHlwZSAhPSBudWxsKQotCQkgICAgICAgICAgewotCQkJICAgICAgICAgIElSdW50aW1lVHlwZSB0aGlzU2VydmVyVHlwZVJ1bnRpbWVUeXBlID0gdGhpc1NlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKTsKLQkJCSAgICAgICAgICBpZiAoc1J1bnRpbWVUeXBlICE9IG51bGwgJiYgdGhpc1NlcnZlclR5cGVSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWVUeXBlLmdldElkKCkpKQotCQkJICAgICAgICAgIHsKLQkJCSAgICAgICAgICAgIHNlcnZlclR5cGUgPSB0aGlzU2VydmVyVHlwZTsKLQkJCSAgICAgICAgICAgIGJyZWFrIG91dGVyOwotCQkJICAgICAgICAgIH0KLQkJICAgICAgICAgIH0KLQkJICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0KLQkgICAgcmV0dXJuIHNlcnZlclR5cGU7Ci0KLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tUHJvamVjdFR5cGUoU3RyaW5nIHRlbXBsYXRlSWQsIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXIpCi0gIHsKLSAgICBJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0gICAgU2V0IGZhY2V0cyA9IEZhY2V0VXRpbHMuZ2V0SW5pdGlhbEZhY2V0VmVyc2lvbnNGcm9tVGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgaWYgKGZhY2V0TWF0Y2hlci5nZXRGYWNldHNUb0FkZCgpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRyID0gZmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBmYWNldHMuYWRkKGl0ci5uZXh0KCkpOyAgCi0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIHNlcnZlciA9IGdldFNlcnZlckZyb21GYWNldHMoZmFjZXRzKTsKLSAgICByZXR1cm4gc2VydmVyOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21Qcm9qZWN0VHlwZShTdHJpbmcgdGVtcGxhdGVJZCwgRmFjZXRNYXRjaGVyIGZhY2V0TWF0Y2hlcikKLSAgewotICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBudWxsOwotICAgIFNldCBmYWNldHMgPSBGYWNldFV0aWxzLmdldEluaXRpYWxGYWNldFZlcnNpb25zRnJvbVRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIGlmIChmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IGZhY2V0TWF0Y2hlci5nZXRGYWNldHNUb0FkZCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgZmFjZXRzLmFkZChpdHIubmV4dCgpKTsgIAotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICAvL1RPRE8gSW5zdGVhZCBvZiBwYXNzaW5nIGluIGEgc2luZ2xlIHNldCBvZiBmYWNldHMsIHBhc3MgaW4gbXVsdGlwbGUgc2V0cywgaWYgdGhlCi0gICAgLy9qc3QuamF2YSBmYWNldCBpcyBvbmUgb2YgdGhlbSBhbmQgdGhlIGNsaWVudFJ1bnRpbWVJZCBhbGxvd3MgbmV3ZXIuCi0gICAgc2VydmVyVHlwZSA9IGdldFNlcnZlclR5cGVGcm9tRmFjZXRzKGZhY2V0cyk7Ci0gICAgcmV0dXJuIHNlcnZlclR5cGU7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0Q2xpZW50UHJvamVjdFRlbXBsYXRlKCkKLSAgewotICAgIFN0cmluZ1tdIHRlbXBsYXRlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFByb2plY3RUZW1wbGF0ZXMoY2xpZW50SWRzXy5nZXRUeXBlSWQoKSwgY2xpZW50SWRzXy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgCi0gICAgLy9XYWxrIHRoZSBsaXN0IG9mIGNsaWVudCBwcm9qZWN0IHR5cGVzIGluIHRoZSBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2UKLSAgICBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHB0Yz0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgU3RyaW5nW10gcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0Q2xpZW50VHlwZXMoKTsKLSAgICBmb3IgKGludCBqPTA7IGo8cHJlZmVycmVkVGVtcGxhdGVJZHMubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgZm9yIChpbnQgaT0wOyBpPHRlbXBsYXRlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgIHsKLSAgICAgICAgICAKLSAgICAgICAgICBib29sZWFuIG1hdGNoZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRUZW1wbGF0ZShjbGllbnRSdW50aW1lSWRfLCB0ZW1wbGF0ZUlkKTsKLSAgICAgICAgICBpZiAobWF0Y2hlcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGVzW2ldOyAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgfSAgICAgIAotICAgIH0KLQotICAgIC8vU2luY2UgdGhlIHByZWZlcnJlZFRlbXBsYXRlSWRzIGNvbnRhaW5zIHRoZSB1bmlvbiBvZiBhbGwgcHJvamVjdCB0eXBlcyBmb3IgYWxsIGNsaWVudCBydW50aW1lcywgd2UgYXJlCi0gICAgLy9ndWFyYW50ZWVkIHRvIGhhdmUgcmV0dXJuZWQgYnkgbm93LCBzbyB0aGUgY29kZSBiZWxvdyB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIHVuZGVyIG5vcm1hbAotICAgIC8vY2lyY3Vtc3RhbmNlcy4gSnVzdCByZXR1cm4gc29tZXRoaW5nIHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyLiAgICAKLSAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA+IDApCi0gICAgICByZXR1cm4gdGVtcGxhdGVzWzBdOwotICAgIAotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudFByb2plY3ROYW1lKCkKLSAgewotICAgIFZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gRmFjZXRVdGlscy5nZXRBbGxQcm9qZWN0cygpOwotICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZUlkXyk7Ci0gICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnZzID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAKLSAgICAvL0NoZWNrIGVhY2ggcHJvamVjdCBhbmQgaXRzIGZhY2V0UnVudGltZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBjbGllbnRSdW50aW1lCi0gICAgZm9yIChpbnQgaT0wOyBpPHByb2plY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICghdnUuaXNQcm9qZWN0U2VydmljZVByb2plY3QocHJvamVjdHNbaV0sIHdzZGxVUklfLCBwYXJzZXJfKSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGZhY2V0VmVyc2lvbnMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBmUnVudGltZU5hbWUgPSBudWxsOwotICAgICAgICBmUnVudGltZSA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRSdW50aW1lRm9yUHJvamVjdChwcm9qZWN0c1tpXS5nZXROYW1lKCkpOwotICAgICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZSdW50aW1lTmFtZSA9IGZSdW50aW1lLmdldE5hbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmYWNldFZlcnNpb25zICE9IG51bGwpCi0gICAgICAgIHsKLQotICAgICAgICAgIC8vIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0VXRpbHMubWF0Y2gocmZ2cywgZmFjZXRWZXJzaW9ucyk7Ci0gICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KHRydWUsIGNsaWVudFJ1bnRpbWVJZF8sIHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgICAgYm9vbGVhbiBmYWNldFJ1bnRpbWVNYXRjaGVzID0gdHJ1ZTsKLSAgICAgICAgICBpZiAoZlJ1bnRpbWVOYW1lICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFjZXRSdW50aW1lTWF0Y2hlcyA9IEZhY2V0VXRpbHMuaXNGYWNldFJ1bnRpbWVTdXBwb3J0ZWQocmZ2cywgZlJ1bnRpbWVOYW1lKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpICYmIGZhY2V0UnVudGltZU1hdGNoZXMpCi0gICAgICAgICAgewotICAgICAgICAgICAgY2xpZW50RmFjZXRNYXRjaGVyXyA9IGZtOwotICAgICAgICAgICAgcmV0dXJuIHByb2plY3RzW2ldLmdldE5hbWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9ObyBwcm9qZWN0IHdhcyBzdWl0YWJsZSwgcmV0dXJuIGEgbmV3IHByb2plY3QgbmFtZQotICAgIHJldHVybiBSZXNvdXJjZVV0aWxzLmdldERlZmF1bHRXZWJQcm9qZWN0TmFtZSgpOwotICAgIAotICB9Ci0gIAotICBwcml2YXRlIERlZmF1bHRSdW50aW1lVHJpcGxldCBnZXREZWZhdWx0Q2xpZW50UnVudGltZUZvckZpeGVkUnVudGltZUFuZFNlcnZlcihJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0gICAgU3RyaW5nW10gY2xpZW50UnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lc0J5VHlwZShjbGllbnRJZHNfLmdldFR5cGVJZCgpKTsKLSAgICBBcnJheUxpc3QgdmFsaWRDbGllbnRSdW50aW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8Y2xpZW50UnVudGltZXMubGVuZ3RoOyBpKysgKQotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZXNbaV0pOwotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKGNsaWVudElkc18uZ2V0UnVudGltZUlkKCkpKQotICAgICAgewotICAgICAgICAvL0NoZWNrIGlmIHRoaXMgY2xpZW50IHJ1bnRpbWUgc3VwcG9ydHMgdGhlIHNlcnZlcgotICAgICAgICBpZiAoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0U2VydmVyKGRlc2MuZ2V0SWQoKSwgY2xpZW50SWRzXy5nZXRTZXJ2ZXJJZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHZhbGlkQ2xpZW50UnVudGltZXMuYWRkKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnYgPSBkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICAgICAgICAgU2V0IGZhY2V0VmVyc2lvbnMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgaWYgKGZhY2V0VmVyc2lvbnMgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9GYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJmdiwgZmFjZXRWZXJzaW9ucyk7Ci0gICAgICAgICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdCh0cnVlLCBjbGllbnRSdW50aW1lc1tpXSwgcHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKGZtKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGRydC5zZXRSdW50aW1lSWQoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZHJ0OyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICAKLSAgICBpZiAodmFsaWRDbGllbnRSdW50aW1lcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIC8vV2UgY291bGRuJ3QgbWF0Y2ggdG8gdGhlIGluaXRpYWxseSBzZWxlY3RlZCBwcm9qZWN0IHNvIHJldHVybiB0aGUgZmlyc3QgdmFsaWQgcnVudGltZS4KLSAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKG51bGwpOwotICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgZHJ0LnNldFJ1bnRpbWVJZCgoKFN0cmluZ1tdKXZhbGlkQ2xpZW50UnVudGltZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKSlbMF0pOwotICAgICAgcmV0dXJuIGRydDsgICAgICAgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vVGhlcmUgYXJlIG5vIGNsaWVudCBydW50aW1lcyB0aGF0IG1hdGNoIHRoZSBmaXhlZCBydW50aW1lIGFuZCBzZXJ2ZXIuIEZhbGwgYmFjayB0byBvcmlnaW5hbCBhbGdvcml0aG0KLSAgICAgIGNsaWVudElkc0ZpeGVkXyA9IGZhbHNlOwotICAgICAgcmV0dXJuIGdldERlZmF1bHRSdW50aW1lKHByb2plY3QsIGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRydWUsIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgfQotICB9ICAKLSAgICAKLSAgcHJvdGVjdGVkIERlZmF1bHRSdW50aW1lVHJpcGxldCBnZXREZWZhdWx0UnVudGltZShJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgdHlwZUlkLCBib29sZWFuIGlzQ2xpZW50LCBTdHJpbmcgcnVudGltZVByZWZlcnJlZFNlcnZlcikKLSAgewotICAgIFN0cmluZ1tdIHJ1bnRpbWVzID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnQpCi0gICAgewotICAgICAgcnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lc0J5VHlwZSh0eXBlSWQsIHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCwgcnVudGltZVByZWZlcnJlZFNlcnZlcik7Ci0gICAgfQotICAgICAgICAKLSAgICAvL1NwbGl0IHRoZSBhcnJheSBvZiBzZXJ2aWNlL2NsaWVudCBydW50aW1lcyBpbnRvIG9uZSBjb250YWluaW5nIHRoZSBwcmVmZXJyZWQgc2V0IGFuZCBvbmUgY29udGFpbmluZyB0aGUgcmVzdC4KLSAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLSAgICBTdHJpbmcgcHJlZmVycmVkUnVudGltZUlkID0gY29udGV4dC5nZXRSdW50aW1lSWQoKTsKLSAgICBTdHJpbmcgZmFsbGJhY2tSdW50aW1lSWQgPSBjb250ZXh0LmdldEZhbGxiYWNrUnVudGltZUlkKCk7Ci0gICAgQXJyYXlMaXN0IHByZWZlcnJlZFJ1bnRpbWVJZHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEFycmF5TGlzdCBvdGhlclJ1bnRpbWVJZHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGs9MDsgazxydW50aW1lcy5sZW5ndGg7IGsrKyApCi0gICAgewotICAgICAgU3RyaW5nIGRlc2NSdW50aW1lSWQgPSBudWxsOwotICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgewotICAgICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKHJ1bnRpbWVzW2tdKTsKLSAgICAgICAgZGVzY1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChydW50aW1lc1trXSk7Ci0gICAgICAgIGRlc2NSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoZGVzY1J1bnRpbWVJZC5lcXVhbHMocHJlZmVycmVkUnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVycmVkUnVudGltZUlkc0xpc3QuYWRkKHJ1bnRpbWVzW2tdKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGRlc2NSdW50aW1lSWQuZXF1YWxzKGZhbGxiYWNrUnVudGltZUlkKSkgCi0gICAgICB7Ci0gICAgCW90aGVyUnVudGltZUlkc0xpc3QuYWRkKDAsIHJ1bnRpbWVzW2tdKTsgIC8vIGFkZCB0byBiZWdpbm5pbmcgb2Ygb3RoZXJSdW50aW1lSWRzTGlzdAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBvdGhlclJ1bnRpbWVJZHNMaXN0LmFkZChydW50aW1lc1trXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIFN0cmluZ1tdIHByZWZlcnJlZFJ1bnRpbWVJZHMgPSAoU3RyaW5nW10pcHJlZmVycmVkUnVudGltZUlkc0xpc3QudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICBTdHJpbmdbXSBvdGhlclJ1bnRpbWVJZHMgPSAoU3RyaW5nW10pb3RoZXJSdW50aW1lSWRzTGlzdC50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgIAotICAgIFNldCBmYWNldFZlcnNpb25zID0gbnVsbDsKLSAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gbnVsbDsKLSAgICBTdHJpbmcgZlJ1bnRpbWVOYW1lID0gbnVsbDsKLSAgICAKLSAgICAvL0lmIHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgcHJvamVjdCBleGlzdHMgYW5kIGZhY2V0cyBjYW4gYmUgaW5mZXJyZWQgZnJvbSBpdCwgbG9vayBmb3IKLSAgICAvL2Egc2VydmljZS9jbGllbnQgcnVudGltZSB0aGF0IG1hdGNoZXMgdGhlIHByb2plY3QncyBmYWNldHMgYW5kIGFsc28sIGlmIHBvc3NpYmxlLCBpdHMgZmFjZXQgcnVudGltZS4KLSAgICAvL1ByZWZlcmVuY2Ugc2hvdWxkIGJlIGdpdmVuIHRvIHRoZSBwcmVmZXJyZWQgc2VydmljZS9jbGllbnQgcnVudGltZXMuIAotICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgIGZSdW50aW1lID0gRmFjZXRVdGlscy5nZXRGYWNldFJ1bnRpbWVGb3JQcm9qZWN0KHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgIGZSdW50aW1lTmFtZSA9IG51bGw7Ci0gICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZlJ1bnRpbWVOYW1lID0gZlJ1bnRpbWUuZ2V0TmFtZSgpOyAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChmYWNldFZlcnNpb25zICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vMS4gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIG9uZSBvZiB0aGUgcHJlZmVycmVkIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWVzIG1hdGNoZXMgdGhlIGV4aXN0aW5nCi0gICAgICAgIC8vcHJvamVjdCdzIGZhY2V0cyBhbmQgcnVudGltZS4KLSAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBwcmVmZXJyZWRSdW50aW1lSWRzLmxlbmd0aDsgcCsrKQotICAgICAgICB7Ci0gICAgICAgICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSBwcmZ2ID0gbnVsbDsKLSAgICAgICAgICBpZiAoaXNDbGllbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJmdiA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChwcmVmZXJyZWRSdW50aW1lSWRzW3BdKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByZnYgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHByZWZlcnJlZFJ1bnRpbWVJZHNbcF0pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICAvL0ZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0VXRpbHMubWF0Y2gocHJmdiwgZmFjZXRWZXJzaW9ucyk7Ci0gICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGlzQ2xpZW50LCBwcmVmZXJyZWRSdW50aW1lSWRzW3BdLCBwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgYm9vbGVhbiBmYWNldFJ1bnRpbWVNYXRjaGVzID0gdHJ1ZTsKLSAgICAgICAgICBpZiAoZlJ1bnRpbWVOYW1lICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFjZXRSdW50aW1lTWF0Y2hlcyA9IEZhY2V0VXRpbHMuaXNGYWNldFJ1bnRpbWVTdXBwb3J0ZWQocHJmdiwgZlJ1bnRpbWVOYW1lKTsgIAotICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSAmJiBmYWNldFJ1bnRpbWVNYXRjaGVzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKGZtKTsKLSAgICAgICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBkcnQuc2V0UnVudGltZUlkKHByZWZlcnJlZFJ1bnRpbWVJZHNbcF0pOwotICAgICAgICAgICAgcmV0dXJuIGRydDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vMi4gU2Vjb25kLCBjaGVjayB0byBzZWUgaWYgb25lIG9mIHRoZSBvdGhlciBjbGllbnRSdW50aW1lcyBtYXRjaGVzIHRoZSBleGlzdGluZwotICAgICAgICAvL3Byb2plY3QncyBmYWNldHMgYW5kIHJ1bnRpbWUuICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPG90aGVyUnVudGltZUlkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgeyAgICAgICAgCi0gICAgICAgICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnYgPSBudWxsOwotICAgICAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZnYgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQob3RoZXJSdW50aW1lSWRzW2ldKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcmZ2ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChvdGhlclJ1bnRpbWVJZHNbaV0pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRNYXRjaEZvclByb2plY3QoaXNDbGllbnQsIG90aGVyUnVudGltZUlkc1tpXSwgcHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgIGJvb2xlYW4gZmFjZXRSdW50aW1lTWF0Y2hlcyA9IHRydWU7Ci0gICAgICAgICAgaWYgKGZSdW50aW1lTmFtZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhY2V0UnVudGltZU1hdGNoZXMgPSBGYWNldFV0aWxzLmlzRmFjZXRSdW50aW1lU3VwcG9ydGVkKHJmdiwgZlJ1bnRpbWVOYW1lKTsgIAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSAmJiBmYWNldFJ1bnRpbWVNYXRjaGVzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKGZtKTsKLSAgICAgICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBkcnQuc2V0UnVudGltZUlkKG90aGVyUnVudGltZUlkc1tpXSk7Ci0gICAgICAgICAgICByZXR1cm4gZHJ0OwotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8zLiBUaGlyZCwgY2hlY2sgdG8gc2VlIGlmIG9uZSBvZiB0aGUgcHJlZmVycmVkIGNsaWVudFJ1bnRpbWVzIG1hdGNoZXMgdGhlIGV4aXN0aW5nCi0gICAgICAgIC8vcHJvamVjdCdzIGZhY2V0cy4KLSAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBwcmVmZXJyZWRSdW50aW1lSWRzLmxlbmd0aDsgcCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRNYXRjaEZvclByb2plY3QoaXNDbGllbnQsIHByZWZlcnJlZFJ1bnRpbWVJZHNbcF0sIHByb2plY3QuZ2V0TmFtZSgpKTsgCi0gICAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKGZtKTsKLSAgICAgICAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChwcmVmZXJyZWRSdW50aW1lSWRzW3BdKTsKLSAgICAgICAgICAgICAgcmV0dXJuIGRydDsKLSAgICAgICAgICAgIH0gICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy80LiBGb3VydGgsIGNoZWNrIHRvIHNlZSBpZiB0aGUgb25lIHRoZSBvdGhlciBjbGllbnRSdW50aW1lcyBtYXRjaGVzIHRoZSBleGlzdGluZwotICAgICAgICAvL3Byb2plY3QncyBmYWNldHMuICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPG90aGVyUnVudGltZUlkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGlzQ2xpZW50LCBvdGhlclJ1bnRpbWVJZHNbaV0sIHByb2plY3QuZ2V0TmFtZSgpKTsgCi0gICAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKGZtKTsKLSAgICAgICAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChvdGhlclJ1bnRpbWVJZHNbaV0pOwotICAgICAgICAgICAgICByZXR1cm4gZHJ0OwotICAgICAgICAgICAgfSAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0hhdmVuJ3QgcmV0dXJuZWQgeWV0IHNvIHRoaXMgbWVhbnMgdGhhdCB0aGUgaW50aXRpYWxseSBzZWxlY3RlZCBwcm9qZWN0IGNhbm5vdCBiZSB1c2VkCi0gICAgLy90byBpbmZsdWVuY2UgdGhlIHNlbGVjdGlvbiBvZiB0aGUgc2VydmljZS9jbGllbnQgcnVudGltZS4gCi0gICAgCi0gICAgICAvL1VzZSB0aGUgcHJlZmVycmVkIHByb2plY3QgdHlwZXMgdG8gaW5mbHVlbmNlIHRoZSBzZWxlY3Rpb24gb2YgYSBydW50aW1lLgotICAgICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBwdGMgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICAgIFN0cmluZ1tdIHByZWZlcnJlZFRlbXBsYXRlSWRzID0gbnVsbDsKLSAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0Q2xpZW50VHlwZXMoKTsgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IHB0Yy5nZXRTZXJ2aWNlVHlwZXMoKTsKLSAgICAgIH0KLSAgICAgIAotICAgIAotICAgICAgZm9yIChpbnQgbj0wOyBuPHByZWZlcnJlZFRlbXBsYXRlSWRzLmxlbmd0aDsgbisrKQotICAgICAgewotICAgICAgICBTdHJpbmcgcHJlZmVycmVkVGVtcGxhdGVJZCA9IHByZWZlcnJlZFRlbXBsYXRlSWRzW25dOwotCi0gICAgICAgIGZvciAoaW50IG09MDsgbTxwcmVmZXJyZWRSdW50aW1lSWRzLmxlbmd0aDsgbSsrKQotICAgICAgICB7Ci0gICAgICAgICAgLy9JZiB0aGlzIGNsaWVudCBvciBzZXJ2aWNlIHJ1bnRpbWUgc3VwcG9ydHMgdGhpcyB0ZW1wbGF0ZSwgY2hvb3NlIGl0IGFuZCBleGl0LiAgICAgICAgCi0gICAgICAgICAgYm9vbGVhbiBtYXRjaGVzID0gZmFsc2U7Ci0gICAgICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG1hdGNoZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRUZW1wbGF0ZShwcmVmZXJyZWRSdW50aW1lSWRzW21dLCBwcmVmZXJyZWRUZW1wbGF0ZUlkKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG1hdGNoZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUocHJlZmVycmVkUnVudGltZUlkc1ttXSwgcHJlZmVycmVkVGVtcGxhdGVJZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmIChtYXRjaGVzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKG51bGwpOwotICAgICAgICAgICAgLy9JZiB0aGUgcHJvamVjdCBkb2Vzbid0IGV4aXN0LCB1c2UgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdGhhdCB3YXMgcGFzc2VkIGluLgotICAgICAgICAgICAgLy9JZiB0aGUgcHJvamVjdCBleGlzdHMsIGl0IG1lYW5zIHRoYXQgcHJldmlvdXMgY29kZSBpbiB0aGlzIG1ldGhvZAotICAgICAgICAgICAgLy9kZXRlcm1pbmVkIGl0IHRvIG5vdCBiZSBhIHN1aXRhYmxlIHByb2plY3QuIENsZWFyIHRoZSBwcm9qZWN0IG5hbWUuCi0gICAgICAgICAgICBpZiAocHJvamVjdD09bnVsbCB8fCBwcm9qZWN0LmV4aXN0cygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUobnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkcnQuc2V0UnVudGltZUlkKHByZWZlcnJlZFJ1bnRpbWVJZHNbbV0pOwotICAgICAgICAgICAgcmV0dXJuIGRydDsgICAgICAgICAgICAKLSAgICAgICAgICB9ICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIAotICAgIAotICAgIC8vU3RpbGwgaGF2ZW4ndCByZXR1cm5lZC4gUmV0dXJuIHRoZSBmaXJzdCBwcmVmZXJyZWQgc2VydmljZS9jbGllbnQgcnVudGltZSBpZC4KLSAgICBpZiAocHJlZmVycmVkUnVudGltZUlkcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKG51bGwpOwotICAgICAgLy9JZiB0aGUgcHJvamVjdCBkb2Vzbid0IGV4aXN0LCB1c2UgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdGhhdCB3YXMgcGFzc2VkIGluLgotICAgICAgLy9JZiB0aGUgcHJvamVjdCBleGlzdHMsIGl0IG1lYW5zIHRoYXQgcHJldmlvdXMgY29kZSBpbiB0aGlzIG1ldGhvZAotICAgICAgLy9kZXRlcm1pbmVkIGl0IHRvIG5vdCBiZSBhIHN1aXRhYmxlIHByb2plY3QuIENsZWFyIHRoZSBwcm9qZWN0IG5hbWUuICAgICAgCi0gICAgICBpZiAocHJvamVjdD09bnVsbCB8fCBwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUobnVsbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBkcnQuc2V0UnVudGltZUlkKHByZWZlcnJlZFJ1bnRpbWVJZHNbMF0pOwotICAgICAgcmV0dXJuIGRydDsgICAgICAKLSAgICB9Ci0gICAgICAKLSAgICBpZiAocnVudGltZXMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihudWxsKTsKLSAgICAgIC8vSWYgdGhlIHByb2plY3QgZG9lc24ndCBleGlzdCwgdXNlIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgd2FzIHBhc3NlZCBpbi4KLSAgICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCBpdCBtZWFucyB0aGF0IHByZXZpb3VzIGNvZGUgaW4gdGhpcyBtZXRob2QKLSAgICAgIC8vZGV0ZXJtaW5lZCBpdCB0byBub3QgYmUgYSBzdWl0YWJsZSBwcm9qZWN0LiBDbGVhciB0aGUgcHJvamVjdCBuYW1lLgotICAgICAgaWYgKHByb2plY3Q9PW51bGwgfHwgcHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgfQotICAgICAgZHJ0LnNldFJ1bnRpbWVJZChydW50aW1lc1swXSk7Ci0gICAgICByZXR1cm4gZHJ0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgIGRydC5zZXRGYWNldE1hdGNoZXIobnVsbCk7Ci0gICAgICAvL0lmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QsIHVzZSB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IHdhcyBwYXNzZWQgaW4uCi0gICAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgaXQgbWVhbnMgdGhhdCBwcmV2aW91cyBjb2RlIGluIHRoaXMgbWV0aG9kCi0gICAgICAvL2RldGVybWluZWQgaXQgdG8gbm90IGJlIGEgc3VpdGFibGUgcHJvamVjdC4gQ2xlYXIgdGhlIHByb2plY3QgbmFtZS4KLSAgICAgIGlmIChwcm9qZWN0PT1udWxsIHx8IHByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShudWxsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGRydC5zZXRSdW50aW1lSWQobnVsbCk7Ci0gICAgICByZXR1cm4gZHJ0OwotICAgIH0gICAgCi0gIH0KLSAgLyoqCi0gKiAKLSAqIEBwYXJhbSBwcm9qZWN0Ci0gKiBAcmV0dXJuCi0gKi8KLSAgcHJvdGVjdGVkIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGdldFByb2plY3RFQVJDaG9pY2UoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIFN0cmluZ1tdIGZsZXhQcm9qZWN0cyA9IGdldEFsbEZsZXhpYmxlUHJvamVjdHMoKTsKLSAgICBTZWxlY3Rpb25MaXN0IGxpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdChmbGV4UHJvamVjdHMsIDApOwotICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMobGlzdCwgbnVsbCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTZWxlY3Rpb25MaXN0IGdldEVBUlByb2plY3RzKCkKLSAgewotICAgIFN0cmluZ1tdIGZsZXhQcm9qZWN0cyA9IGdldEFsbEZsZXhpYmxlUHJvamVjdHMoKTsKLSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3QoZmxleFByb2plY3RzLCAwKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElSZXNvdXJjZSBnZXRSZXNvdXJjZUZyb21Jbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKG9iaik7Ci0gICAgICAgICAgcmV0dXJuIHJlc291cmNlOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIAotICAgICAgCi0gIC8qCi0gICAqIFNldCBkZWZhdWx0cyBmb3IgdGhlIGNsaWVudC1zaWRlIGZyb20gdGhlIHNlcnZpY2Utc2lkZSBpZiBwb3NzaWJsZS4KLSAgICogU2V0cyBjbGllbnRQcm9qZWN0TmFtZV8gdG8gYSB2YWx1ZSBiYXNlZCBvbiB0aGUgc2VydmljZSBwcm9qZWN0IG5hbWUuCi0gICAqIAotICAgKiBSZXR1cm5zIGFuIElTdGF0dXMuT0sgaWYgdGhlIHNlcnZpY2Ugc2lkZSB2YWx1ZXMgZm9yIHNlcnZlciBhbmQgV2ViIAotICAgKiBzZXJ2aWNlIHJ1bnRpbWUgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSB2YWx1ZXMgZm9yIGNsaWVudFJ1bnRpbWVJZF8sCi0gICAqIGNsaWVudENvbXBvbmVudFR5cGVfLCBhbGwgdGhlIHZhbHVlcyBpbiBjbGllbnRJZHNfLCBhbmQgY2xpZW50RWFyUHJvamVjdE5hbWVfLgotICAgKiAKLSAgICogUmV0dXJucyBhbiBJU3RhdHVzLkVSUk9SIG90aGVyd2lzZSwgbGVhdmluZyBvbmx5IHRoZSBjbGllbnRQcm9qZWN0TmFtZV8gc2V0LiAKLSAgICovCi0gIHByb3RlY3RlZCBJU3RhdHVzIGRlZmF1bHRDbGllbnRTaWRlRnJvbVNlcnZpY2VTaWRlKFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUsIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VJZHMsIGJvb2xlYW4gc2VydmljZU5lZWRFQVIsIFN0cmluZyBzZXJ2aWNlRWFyUHJvamVjdE5hbWUpCi0gIHsKLSAgICAvLzEuIFN0YXJ0IHdpdGggc2V0dGluZyB0aGUgZGVmYXVsdCBjbGllbnQgcHJvamVjdCBuYW1lIGJhc2VkIG9uIHRoZSBzZXJ2aWNlIHByb2plY3QgbmFtZS4KLSAgICBib29sZWFuIGlzRUpCID0gZmFsc2U7Ci0gICAgU3RyaW5nIGltcGxJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHNlcnZpY2VJZHMuZ2V0VHlwZUlkKCkpOwotICAgIGlzRUpCID0gKGltcGxJZC5lcXVhbHMoIm9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuZWpiIikpOwotICAgIFN0cmluZ1tdIHVwZGF0ZWROYW1lcyA9IFJlc291cmNlVXRpbHMuZ2V0Q2xpZW50UHJvamVjdENvbXBvbmVudE5hbWUoc2VydmljZVByb2plY3ROYW1lLCBzZXJ2aWNlUHJvamVjdE5hbWUsIGlzRUpCKTsKLSAgICBjbGllbnRQcm9qZWN0TmFtZV8gPSB1cGRhdGVkTmFtZXNbMF07Ci0gICAgCi0gICAgLy8yLiBJZGVhbGx5LCB0aGUgc2VydmVyIGFuZCBydW50aW1lIG9uIHRoZSBjbGllbnQtc2lkZSB3aWxsIGJlIGRlZmF1bHRlZAotICAgIC8vICAgdG8gdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSBzZXJ2aWNlIHNpZGUuIElmIGEgY2xpZW50IHJ1bnRpbWUgaWQgdGhhdCAKLSAgICAvLyAgIHN1cHBvcnRzIGNsaWVudFByb2plY3ROYW1lXyBhbmQgdGhlIHNlcnZpY2Utc2lkZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgZGVmYXVsdHMKLSAgICAvLyAgIGNhbiBiZSBmb3VuZCwgY2hvb3NlIGl0LgotICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWVfKTsKLSAgICBUeXBlUnVudGltZVNlcnZlciB0ZXN0SWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0gICAgdGVzdElkcy5zZXRUeXBlSWQoY2xpZW50SWRzXy5nZXRUeXBlSWQoKSk7Ci0gICAgdGVzdElkcy5zZXRSdW50aW1lSWQoc2VydmljZUlkcy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgdGVzdElkcy5zZXRTZXJ2ZXJJZChzZXJ2aWNlSWRzLmdldFNlcnZlcklkKCkpOwotICAgIHRlc3RJZHMuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2aWNlSWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0gICAgCi0gICAgaWYgKGNsaWVudFByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgY2xpZW50Q29tcG9uZW50VHlwZV8gPSAiIjsKLSAgICAgIGNsaWVudFJ1bnRpbWVJZF8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lSWQodGVzdElkcywgc2VydmljZVByb2plY3ROYW1lLCBjbGllbnRDb21wb25lbnRUeXBlXyk7Ci0gICAgICBpZiAoY2xpZW50UnVudGltZUlkXyAhPSBudWxsICYmIGNsaWVudFJ1bnRpbWVJZF8ubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgY2xpZW50SWRzXy5zZXRSdW50aW1lSWQoc2VydmljZUlkcy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySWQoc2VydmljZUlkcy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZpY2VJZHMuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU2VlIGlmIHRoZXJlIGlzIGEgY2xpZW50IHByb2plY3QgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBzZXJ2aWNlLXNpZGUKLSAgICAgIC8vc2VydmVyIGFuZCBydW50aW1lIGRlZmF1bHRzLiBQaWNrIGEgY2xpZW50IHByb2plY3QgdHlwZSBiYXNlZCBvbiBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2VzLgotICAgICAgLy9DaG9vc2UgdGhlIGNsaWVudFJ1bnRpbWVJZF8gYWNjb3JkaW5nbHkuCi0gICAgICBTdHJpbmdbXSB0ZW1wbGF0ZUlkcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFByb2plY3RUZW1wbGF0ZXMoY2xpZW50SWRzXy5nZXRUeXBlSWQoKSwgdGVzdElkcy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgICBpZiAodGVtcGxhdGVJZHMgIT0gbnVsbCAmJiB0ZW1wbGF0ZUlkcy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHB0YyA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgICAgICBTdHJpbmdbXSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IHB0Yy5nZXRDbGllbnRUeXBlcygpOwotICAgICAgICBvdXRlcjogZm9yIChpbnQgaiA9IDA7IGogPCBwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcGxhdGVJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZUlkc1tpXTsKLSAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEdldCBhIGNsaWVudFJ1bnRpbWVJZCBmb3IgdGhpcyB0ZW1wbGF0ZQotICAgICAgICAgICAgICBTdHJpbmcgbmV3Q2xpZW50UnVudGltZUlkID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKHRlc3RJZHMsIGNsaWVudFByb2plY3ROYW1lXywKLSAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQpOwotICAgICAgICAgICAgICBpZiAobmV3Q2xpZW50UnVudGltZUlkLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNsaWVudFJ1bnRpbWVJZF8gPSBuZXdDbGllbnRSdW50aW1lSWQ7Ci0gICAgICAgICAgICAgICAgY2xpZW50Q29tcG9uZW50VHlwZV8gPSB0ZW1wbGF0ZUlkOwotICAgICAgICAgICAgICAgIGNsaWVudElkc18uc2V0UnVudGltZUlkKHNlcnZpY2VJZHMuZ2V0UnVudGltZUlkKCkpOwotICAgICAgICAgICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySWQoc2VydmljZUlkcy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICAgICAgICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmljZUlkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBicmVhayBvdXRlcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gCi0gICAgCi0gICAgLy8zLiBJZiBzdGVwIDIgd2FzIHN1Y2Nlc3NmdWwsIGNsaWVudFJ1bnRpbWVJZF8gc2hvdWxkIG5vdyBiZSBzZXQsIGFsb25nIHdpdGggY2xpZW50UHJvamVjdE5hbWVfLAotICAgIC8vICAgY2xpZW50Q29tcG9uZW50VHlwZV8sIGFuZCBhbGwgdGhlIHZhbHVlcyBpbiBjbGllbnRJZHNfLiBBbGwgdGhhdCByZW1haW5zIGlzIHNldHRpbmcgdGhlIEVBUi4KLSAgICBpZiAoY2xpZW50UnVudGltZUlkXyAhPSBudWxsICYmIGNsaWVudFJ1bnRpbWVJZF8ubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICBzZXREZWZhdWx0Q2xpZW50RWFyUHJvamVjdCgpOwotICAgICAgLy9VcGRhdGUgdGhlIGNsaWVudCBzaWRlIEVBUiBmcm9tIHRoZSBzZXJ2aWNlIHNpZGUgRUFSIGlmIG5lY2Vzc2FyeS4KLSAgICAgIGlmIChzZXJ2aWNlTmVlZEVBUikKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdENsaWVudEVhckZyb21TZXJ2aWNlRWFyKHNlcnZpY2VQcm9qZWN0TmFtZSwgc2VydmljZUVhclByb2plY3ROYW1lKTsgCi0gICAgICB9Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU3RlcCAyIHdhcyBub3Qgc3VjY2Vzc2Z1bC4gQ2xpZW50IHNpZGUgZGVmYXVsdGluZyBjYW5ub3QgYmUgZG9uZSB1c2luZyB0aGUgc2VydmljZSBzaWRlIHNlcnZlcgotICAgICAgLy9hbmQgd2ViIHNlcnZpY2UgcnVudGltZSBkZWZhdWx0cy4gUmV0dXJuIGFuIGVycm9yIHN0YXR1cy4KLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygiIik7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBkZWZhdWx0Q2xpZW50RWFyRnJvbVNlcnZpY2VFYXIoU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSwgU3RyaW5nIHNlcnZpY2VFYXJQcm9qZWN0TmFtZSkKLSAgewotICAgIC8vQ2xpZW50IHNpZGUKLSAgICBpZiAoY2xpZW50TmVlZEVBUl8pCi0gICAgewotICAgICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgICAgaWYoY2xpZW50UHJvamVjdD09bnVsbCB8fCAhY2xpZW50UHJvamVjdC5leGlzdHMoKSAKLSAgICAgICAgfHwgIShjbGllbnRFYXJQcm9qZWN0TmFtZV8uZXF1YWxzSWdub3JlQ2FzZShzZXJ2aWNlRWFyUHJvamVjdE5hbWUpKSkKLSAgICAgIHsKLSAgICAgICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBwdGM9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOyAgICAgICAgIAotICAgICAgICBpZiAoIXB0Yy5pc1VzZVR3b0VBUnMoKSkgCi0gICAgICAgIHsKLSAgICAgICAgICBjbGllbnRFYXJQcm9qZWN0TmFtZV8gPSBzZXJ2aWNlRWFyUHJvamVjdE5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAKLSAgICAgICAgewotICAgICAgICAgIElQcm9qZWN0IHByb3h5RUFSUHJvamVjdCA9IGdldFVuaXF1ZUNsaWVudEVBUihjbGllbnRFYXJQcm9qZWN0TmFtZV8sIHNlcnZpY2VFYXJQcm9qZWN0TmFtZSwgY2xpZW50UHJvamVjdE5hbWVfLCBzZXJ2aWNlUHJvamVjdE5hbWUpOwotICAgICAgICAgIGNsaWVudEVhclByb2plY3ROYW1lXyA9IHByb3h5RUFSUHJvamVjdC5nZXROYW1lKCk7Ci0gICAgICAgIH0gICAgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRVbmlxdWVDbGllbnRFQVIoU3RyaW5nIGVhclByb2plY3ROYW1lLCBTdHJpbmcgc2VydmljZUVBUlByb2plY3QsIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSwgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSkgewotCi0gICAgU3RyaW5nIHByb2plY3ROYW1lID0gbmV3IFN0cmluZygpOwotICAgIC8vSWYgdGhlIGNsaWVudCBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QgYW5kIHRoZSBzZXJ2aWNlIHByb2plY3QgZG9lcywgZW5zdXJlIHRoZQotICAgIC8vdGhlIGNsaWVudCBzaWRlIEVBUidzIEoyRUUgbGV2ZWwgaXMgc3VjaCB0aGF0IHRoZSBzZXJ2aWNlIHByb2plY3QgY291bGQgYmUgYWRkZWQgdG8gaXQuCi0gICAgLy9UaGlzIHdpbGwgZW5zdXJlIHdlIGRvbid0IGRlZmF1bHQgdGhlIHBhZ2Ugd2l0aCBhIGNsaWVudCBwcm9qZWN0IEVBUiBhdCBhIGxvd2VyCi0gICAgLy9KMkVFIGxldmVsIHRoYW4gdGhlIHNlcnZpY2Ugc2lkZS4KLSAgICBib29sZWFuIGdvb2RKMkVFTGV2ZWwgPSB0cnVlOwotICAgIGlmICghZWFyUHJvamVjdE5hbWUuZXF1YWxzSWdub3JlQ2FzZShzZXJ2aWNlRUFSUHJvamVjdCkpCi0gICAgewotICAgICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZSk7Ci0gICAgICBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWUpOwotICAgICAgSVByb2plY3QgZWFyUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlYXJQcm9qZWN0TmFtZSk7Ci0gICAgICBpZiAoIWNsaWVudFByb2plY3QuZXhpc3RzKCkgJiYgc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXMgYXNzb2NpYXRpb25TdGF0dXMgPSBKMkVFVXRpbHMuY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKHNlcnZpY2VQcm9qZWN0LCBlYXJQcm9qZWN0KTsKLSAgICAgICAgZ29vZEoyRUVMZXZlbCA9IChhc3NvY2lhdGlvblN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuT0spOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoIWVhclByb2plY3ROYW1lLmVxdWFsc0lnbm9yZUNhc2Uoc2VydmljZUVBUlByb2plY3QpICYmIGdvb2RKMkVFTGV2ZWwpIHsKLSAgICAgIHByb2plY3ROYW1lID0gZWFyUHJvamVjdE5hbWU7Ci0gICAgfSAgICAKLSAgICBlbHNlIHsKLSAgICAgIHByb2plY3ROYW1lID0gY2xpZW50UHJvamVjdE5hbWUrREVGQVVMVF9DTElFTlRfRUFSX1BST0pFQ1RfRVhUOwotICAgICAgaW50IGk9MTsgICAgICAKLSAgICAgIHdoaWxlIChwcm9qZWN0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHNlcnZpY2VFQVJQcm9qZWN0KSkgewotICAgICAgICBwcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lK2k7Ci0gICAgICAgIGkrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb2plY3ROYW1lLmVxdWFscygiIikgPyBudWxsIDogUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXREZWZhdWx0c0ZvckV4dGVuc2lvbihJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgSVdlYlNlcnZpY2VSdW50aW1lIHdzcnQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZF8pOwotICAgIGlmICh3c3J0ICE9IG51bGwpCi0gICAgewotICAgICAgV2ViU2VydmljZUNsaWVudEluZm8gd3NJbmZvID0gbmV3IFdlYlNlcnZpY2VDbGllbnRJbmZvKCk7ICAgICAgCi0gICAgICB3c0luZm8uc2V0U2VydmVyRmFjdG9yeUlkKGNsaWVudElkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICB3c0luZm8uc2V0U2VydmVySW5zdGFuY2VJZChjbGllbnRJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0gICAgICB3c0luZm8uc2V0U3RhdGUoV2ViU2VydmljZVN0YXRlLlVOS05PV05fTElURVJBTCk7Ci0gICAgICB3c0luZm8uc2V0V2ViU2VydmljZVJ1bnRpbWVJZChjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgIHdzSW5mby5zZXRXc2RsVVJMKHdzZGxVUklfKTsKLQotICAgICAgd2ViU2VydmljZUNsaWVudF8gPSB3c3J0LmdldFdlYlNlcnZpY2VDbGllbnQod3NJbmZvKTsKLSAgICAgIFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbyA9IFdlYlNlcnZpY2VTY2VuYXJpby5DTElFTlRfTElURVJBTDsKLSAgICAgIGlmIChyZXNvdXJjZUNvbnRleHRfICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvbnRleHRfID0gbmV3IFNpbXBsZUNvbnRleHQodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdGVzdF8sIGZhbHNlLCBzY2VuYXJpbywgcmVzb3VyY2VDb250ZXh0Xy5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpLCByZXNvdXJjZUNvbnRleHRfCi0gICAgICAgICAgICAuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpLCByZXNvdXJjZUNvbnRleHRfLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoY2xpZW50SW5pdGlhbFByb2plY3RfID09IG51bGwpCi0gICAgewotICAgICAgY2xpZW50SW5pdGlhbFByb2plY3RfID0gZ2V0UHJvamVjdEZyb21Jbml0aWFsU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgfQotICB9Ci0gIAotICAvLyBUaGlzIGlzIGZvciB0aGUgQW50IHNjZW5hcmlvIHdoZXJlIHRoZSBjbGllbnQgcHJvamVjdCBuYW1lIGNhbiBiZSBzZXQgaW4gdGhlIHByb3BlcnR5IGZpbGUuCi0gIC8vIElmIHRoZSB1c2VyIGhhcyBzZXQgdGhlIENsaWVudFByb2plY3ROYW1lIHVzZSBpdCBmb3IgZGVmYXVsdGluZyBwdXJwb3NlcwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotCSAgY2xpZW50UHJvamVjdE5hbWVfID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEluaXRpYWxQcm9qZWN0KElQcm9qZWN0IGNsaWVudEluaXRpYWxQcm9qZWN0KQotICB7Ci0gICAgY2xpZW50SW5pdGlhbFByb2plY3RfID0gY2xpZW50SW5pdGlhbFByb2plY3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gaW5pdGlhbEluaXRpYWxTZWxlY3Rpb25fIFRoZSBpbml0aWFsSW5pdGlhbFNlbGVjdGlvbl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbEluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICBpbml0aWFsUHJvamVjdF8gPSBnZXRQcm9qZWN0RnJvbUluaXRpYWxTZWxlY3Rpb24oaW5pdGlhbEluaXRpYWxTZWxlY3Rpb24pOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRDbGllbnROZWVkRUFSKCkKLSAgewotICAgIHJldHVybiBjbGllbnROZWVkRUFSXzsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gcGFyc2VyXyBUaGUgcGFyc2VyXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpIHsKLSAgICBwYXJzZXJfID0gcGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgd3NkbFVSSV8gPSB3c2RsVVJJOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShib29sZWFuIHRlc3RTZXJ2aWNlKQotICB7Ci0gICAgdGVzdF8gPSB0ZXN0U2VydmljZTsKLSAgfSAgIAotICAKLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ICkKLSAgewotICAgIHJlc291cmNlQ29udGV4dF8gPSByZXNvdXJjZUNvbnRleHQ7ICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbUluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgSVByb2plY3QgcCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHJlc291cmNlLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRBbGxGbGV4aWJsZVByb2plY3RzKCkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoIXByb2plY3RzW2ldLmdldE5hbWUoKS5lcXVhbHMoIlNlcnZlcnMiKSAmJiAhcHJvamVjdHNbaV0uZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkKLSAgICAgIHsKLSAgICAgICAgdi5hZGQocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pdi50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgY2xhc3MgRmFjZXRSdW50aW1lTWF0Y2hlcgotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZhY2V0TWF0Y2hlcjsKLSAgICBib29sZWFuIHJ1bnRpbWVNYXRjaGVzOwotICAgIAotICAgIHB1YmxpYyBGYWNldE1hdGNoZXIgZ2V0RmFjZXRNYXRjaGVyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFjZXRNYXRjaGVyOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRGYWNldE1hdGNoZXIoRmFjZXRNYXRjaGVyIGZhY2V0TWF0Y2hlcikKLSAgICB7Ci0gICAgICB0aGlzLmZhY2V0TWF0Y2hlciA9IGZhY2V0TWF0Y2hlcjsKLSAgICB9Ci0gICAgcHVibGljIGJvb2xlYW4gaXNSdW50aW1lTWF0Y2hlcygpCi0gICAgewotICAgICAgcmV0dXJuIHJ1bnRpbWVNYXRjaGVzOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lTWF0Y2hlcyhib29sZWFuIHJ1bnRpbWVNYXRjaGVzKQotICAgIHsKLSAgICAgIHRoaXMucnVudGltZU1hdGNoZXMgPSBydW50aW1lTWF0Y2hlczsKLSAgICB9ICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBjbGFzcyBEZWZhdWx0UnVudGltZVRyaXBsZXQKLSAgewotICAgIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXJfOwotICAgIFN0cmluZyBwcm9qZWN0TmFtZV87Ci0gICAgU3RyaW5nIHJ1bnRpbWVJZF87Ci0gICAgCi0gICAgCi0gICAgcHVibGljIERlZmF1bHRSdW50aW1lVHJpcGxldCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgRmFjZXRNYXRjaGVyIGdldEZhY2V0TWF0Y2hlcigpCi0gICAgewotICAgICAgcmV0dXJuIGZhY2V0TWF0Y2hlcl87Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIHNldEZhY2V0TWF0Y2hlcihGYWNldE1hdGNoZXIgZmFjZXRNYXRjaGVyXykKLSAgICB7Ci0gICAgICB0aGlzLmZhY2V0TWF0Y2hlcl8gPSBmYWNldE1hdGNoZXJfOwotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3ROYW1lKCkKLSAgICB7Ci0gICAgICByZXR1cm4gcHJvamVjdE5hbWVfOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWVfKQotICAgIHsKLSAgICAgIHRoaXMucHJvamVjdE5hbWVfID0gcHJvamVjdE5hbWVfOwotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVJZCgpCi0gICAgewotICAgICAgcmV0dXJuIHJ1bnRpbWVJZF87Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIHNldFJ1bnRpbWVJZChTdHJpbmcgcnVudGltZUlkXykKLSAgICB7Ci0gICAgICB0aGlzLnJ1bnRpbWVJZF8gPSBydW50aW1lSWRfOwotICAgIH0gICAgICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViY2I0YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvUHJvamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQxNDMgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDIyMSAgIDEyMjY2MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjIzICAgMTI5MDIwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI3ICAgMTM4MDU4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTEwICAgMTQwODY4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MjQgICAxNDEwMjQgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA4MjkgICAxNDU0NDkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBzZXJ2aWNlIGNsaWVudCBwcm9qZWN0IHR5cGUgZHJvcGRvd24gZGlzYWJsZWQgYWZ0ZXIgc2VsZWN0aW5nIGNsaWVudCBwcm9qZWN0Ci0gKiAyMDA2MDgyOSAgIDE4MDgzMyBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCAgTmV3IFdlYiBTZXJ2aWNlIHdpemFyZCBzZXJ2aWNlIHNldHRpbmdzIGRpYWxvZyBoYXMgdW5sYWJlbGxlZCBlbmFibGVkIHRleHQgZmllbGRzCi0gKiAyMDA4MDQwOSAgIDIyNjA0NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotCi1wdWJsaWMgY2xhc3MgUHJvamVjdFNlbGVjdGlvbldpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvciB7Ci0KLQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0gIAotICAvL3ByaXZhdGUgU2VsZWN0aW9uTGlzdENob2ljZXMgcHJvamVjdHNfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIG5lZWRFQVJfOwotICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0cnNJZHNfOwotCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotCi0gIHByaXZhdGUgVGV4dCBtZXNzYWdlVGV4dF87Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2xpZW50XyA9IGZhbHNlOwotCi0gIHByaXZhdGUgYnl0ZSBDUkVBVEVfUFJPSkVDVCA9IChieXRlKSAxOwotCi0gIHByaXZhdGUgYnl0ZSBDUkVBVEVfRUFSID0gKGJ5dGUpIDI7Ci0KLSAgcHJpdmF0ZSBieXRlIEFERF9FQVJfQVNTT0NJQVRJT04gPSAoYnl0ZSkgNDsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudF87Ci0gIHByaXZhdGUgQ29tYm8gbW9kdWxlUHJvamVjdF87Ci0gIHByaXZhdGUgQ29tYm8gZWFyUHJvamVjdF87Ci0gIHByaXZhdGUgQ29tYm8gcHJvamVjdFR5cGVfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmdbXSB0ZW1wbGF0ZXNfOwotCi0gIC8vcHJpdmF0ZSBTdHJpbmcgICBjb21wb25lbnRUeXBlXzsKLSAgCi0gIHByaXZhdGUgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFR5cGVMaXN0ZW5lcl87Ci0gIHByaXZhdGUgTW9kaWZ5TGlzdGVuZXIgbW9kdWxlUHJvamVjdExpc3RlbmVyXzsKLSAgcHJpdmF0ZSBNb2RpZnlMaXN0ZW5lciBlYXJQcm9qZWN0TGlzdGVuZXJfOwotCi0gIC8qCi0gICAqIENPTlRFWFRfSUQgUFdSUzAwMTYgZm9yIHRoZSBzZXJ2aWNlLXNpZGUgV2ViIHByb2plY3QgY29tYm8gYm94IG9mIHRoZQotICAgKiBydW50aW1lIHNlbGVjdGlvbiBQYWdlCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCA9IHBsdWdpbklkXyArICIuUFdSUzAwMTYiOwotCi0gIC8vcHJpdmF0ZSBDb21ibyBtb2R1bGVfOwotCi0gIC8qIENPTlRFWFRfSUQgUFdSUzAwMTggZm9yIHRoZSBjbGllbnQgcHJvamVjdCB0eXBlIGNvbWJvIGJveCBvZiB0aGUgcnVudGltZSBzZWxlY3Rpb24gUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfQ09NQk9fQ0xJRU5UX1BST0pFQ1RfVFlQRSA9IHBsdWdpbklkXyArICIuUFdSUzAwMTgiOwotICAKLSAgLyogQ09OVEVYVF9JRCBQV1JTMDAyMCBmb3IgdGhlIHNlcnZpY2UgcHJvamVjdCB0eXBlIGNvbWJvIGJveCBvZiB0aGUgcnVudGltZSBzZWxlY3Rpb24gUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfQ09NQk9fU0VSVklDRV9QUk9KRUNUX1RZUEUgPSBwbHVnaW5JZF8gKyAiLlBXUlMwMDIwIjsgICAgCi0KLSAgLy9wcml2YXRlIENvbWJvIGVhck1vZHVsZV87Ci0KLSAgLyoKLSAgICogRGVmYXVsdCBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIFByb2plY3RTZWxlY3Rpb25XaWRnZXQoKSB7Ci0gIH0KLQotICAvKgotICAgKiBQcm9qZWN0U2VsZWN0aW9uV2lkZ2V0IEBwYXJhbSBpc0NsaWVudAotICAgKi8KLSAgcHVibGljIFByb2plY3RTZWxlY3Rpb25XaWRnZXQoYm9vbGVhbiBpc0NsaWVudCkgewotICAgIHRoaXMuaXNDbGllbnRfID0gaXNDbGllbnQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpIHsKLQkgIAotICAgIHBhcmVudF8gPSBwYXJlbnQ7Ci0gICAgVUlVdGlscyB1aVV0aWxzID0gbmV3IFVJVXRpbHMocGx1Z2luSWRfKTsKLQotICAgIHN0YXR1c0xpc3RlbmVyXyA9IHN0YXR1c0xpc3RlbmVyOwotCQkKLSAgICBpZiAoaXNDbGllbnRfKQotCXsKLQkgIG1vZHVsZVByb2plY3RfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfUFJPSkVDVCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9QUk9KRUNULCBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICAgIHByb2plY3RUeXBlXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1RZUEUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXQ1JfQ09NQk9fQ0xJRU5UX1RZUEUsIElORk9QT1BfUFdSU19DT01CT19DTElFTlRfUFJPSkVDVF9UWVBFLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8U1dULlJFQURfT05MWSk7ICAgICAgCi0JICBlYXJQcm9qZWN0XyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0VBUl9QUk9KRUNULCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0VBUl9QUk9KRUNULCBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICB9Ci0gICAgZWxzZSAKLQl7ICAgICAgCi0JICBtb2R1bGVQcm9qZWN0XyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9QUk9KRUNULCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9QUk9KRUNULCBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICAgIHByb2plY3RUeXBlXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9UWVBFLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV0NSX0NPTUJPX1NFUlZJQ0VfVFlQRSwgSU5GT1BPUF9QV1JTX0NPTUJPX1NFUlZJQ0VfUFJPSkVDVF9UWVBFLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkpOyAgICAgIAotCSAgZWFyUHJvamVjdF8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhcmVudCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VfRUFSX1BST0pFQ1QsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWSUNFX0VBUl9QUk9KRUNULCBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICB9Ci0gICAgCi0gICAgLy9UZW1wb3JhcmlseSByZW1vdmUgdGhlIGxpc3RlbmVycwotICAgIAotICAgIHByb2plY3RUeXBlTGlzdGVuZXJfID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGV2dCkgCi0gICAgICB7Ci0gICAgICAgIGhhbmRsZVByb2plY3RUeXBlQ2hhbmdlZCgpOwotICAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQoIG51bGwgKTsKLSAgICAgIH0KLSAgICB9OyAgICAKLSAgICAKLQltb2R1bGVQcm9qZWN0TGlzdGVuZXJfID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZXZ0KSAKLQkJCQkJICAgICAgICAgICB7Ci0JCQkJCSAgICAgICAgICAgICBoYW5kbGVQcm9qZWN0Q2hhbmdlZCgpOwotCQkJCQkgICAgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KCBudWxsICk7Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgIAotCWVhclByb2plY3RMaXN0ZW5lcl8gPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBldnQpIAotCQkJCSAgICAgICAgICAgIHsKLQkJCQkgICAgICAgICAgICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudCggbnVsbCApOwotCSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgCQkJCQkgIAotICAgIC8vIG1lc3NhZ2UgYXJlYQotICAgIG1lc3NhZ2VUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dChwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9OT19MQUJFTCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX05PX0xBQkVMLCBudWxsLCBTV1QuV1JBUCB8IFNXVC5NVUxUSSB8IFNXVC5SRUFEX09OTFkpOwotICAgIG1lc3NhZ2VUZXh0Xy5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXRCYWNrZ3JvdW5kKCkpOwotICAgIHNldEVhclByb2plY3RJdGVtcygpOwotICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxpc3RlbmVyc09uKCkKLSAgewotCXByb2plY3RUeXBlXy5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VHlwZUxpc3RlbmVyXyk7Ci0JbW9kdWxlUHJvamVjdF8uYWRkTW9kaWZ5TGlzdGVuZXIoIG1vZHVsZVByb2plY3RMaXN0ZW5lcl8gKTsKLQllYXJQcm9qZWN0Xy5hZGRNb2RpZnlMaXN0ZW5lciggZWFyUHJvamVjdExpc3RlbmVyXyApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbGlzdGVuZXJzT2ZmKCkKLSAgewotICAgIHByb2plY3RUeXBlXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VHlwZUxpc3RlbmVyXyk7Ci0gICAgbW9kdWxlUHJvamVjdF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIoIG1vZHVsZVByb2plY3RMaXN0ZW5lcl8gKTsKLSAgICBlYXJQcm9qZWN0Xy5yZW1vdmVNb2RpZnlMaXN0ZW5lciggZWFyUHJvamVjdExpc3RlbmVyXyApOyAgCi0gIH0KLSAgICAKLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0TmFtZSgpCi0gIHsKLQlyZXR1cm4gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZSggU3RyaW5nIG5hbWUgKQotICB7Ci0JbGlzdGVuZXJzT2ZmKCk7Ci0gICAgbW9kdWxlUHJvamVjdF8uc2V0VGV4dCggbmFtZSApOwotICAgIGhhbmRsZVByb2plY3RDaGFuZ2VkKCk7Ci0gICAgdXBkYXRlRUFSU3RhdGUoKTsKLQlsaXN0ZW5lcnNPbigpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEVhclByb2plY3ROYW1lKCkKLSAgewotICAgIHJldHVybiBlYXJQcm9qZWN0Xy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3ROYW1lKCBTdHJpbmcgbmFtZSApCi0gIHsgCi0JbGlzdGVuZXJzT2ZmKCk7Ci0JZWFyUHJvamVjdF8uc2V0VGV4dCggbmFtZSApOwotCWxpc3RlbmVyc09uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudFR5cGUoIFN0cmluZyB0eXBlICkKLSAgewotICAgIGxpc3RlbmVyc09mZigpOwotICAgIGlmICh0eXBlICE9IG51bGwgJiYgdHlwZS5sZW5ndGgoKT4wKQotICAgIHsKLSAgICAgIFN0cmluZyBsYWJlbCA9IEZhY2V0VXRpbHMuZ2V0VGVtcGxhdGVMYWJlbEJ5SWQodHlwZSk7Ci0JICBwcm9qZWN0VHlwZV8uc2V0VGV4dChsYWJlbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHByb2plY3RUeXBlXy5zZXRUZXh0KCIiKTsKLSAgICAKLSAgICBoYW5kbGVQcm9qZWN0VHlwZUNoYW5nZWQoKTsKLSAgICBsaXN0ZW5lcnNPbigpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudFR5cGUoKQotICB7Ci0gICAgaW50IGlkeCA9IHByb2plY3RUeXBlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmICh0ZW1wbGF0ZXNfICE9IG51bGwgJiYgaWR4ID4gLTEpCi0gICAgewotICAgICAgcmV0dXJuIHRlbXBsYXRlc19baWR4XTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyB0ZW1wbGF0ZUxhYmVsID0gcHJvamVjdFR5cGVfLmdldFRleHQoKTsKLSAgICAgIFN0cmluZyB0ZW1wbGF0ZUlkID0gRmFjZXRVdGlscy5nZXRUZW1wbGF0ZUlkQnlMYWJlbCh0ZW1wbGF0ZUxhYmVsKTsKLSAgICAgIHJldHVybiB0ZW1wbGF0ZUlkOwotICAgIH0KLQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXROZWVkRUFSKCkKLSAgewotICAgIHJldHVybiBuZWVkRUFSXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmVlZEVBUihib29sZWFuIGIpCi0gIHsKLSAgICBsaXN0ZW5lcnNPZmYoKTsKLSAgICBuZWVkRUFSXyA9IGI7Ci0gICAgaWYgKG5lZWRFQVJfKQotICAgIHsKLSAgICAgZWFyUHJvamVjdF8uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgcG9wdWxhdGVFQVJDb21ib3MoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVhclByb2plY3RfLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgZWFyUHJvamVjdF8uc2V0VGV4dCgiIik7Ci0gICAgfQotICAgIGxpc3RlbmVyc09uKCk7Ci0gIH0gICAgCi0KLSAgcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzKQotICB7Ci0gICAgdHJzSWRzXyA9IHRyczsKLSAgICBpZiAoZWFyUHJvamVjdF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgCWxpc3RlbmVyc09mZigpOwotICAgICAgICB1cGRhdGVFQVJTdGF0ZSgpOwotICAgICAgICBsaXN0ZW5lcnNPbigpOwkKLSAgICB9CQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoUHJvamVjdEl0ZW1zKCkKLSAgewotICAgIGxpc3RlbmVyc09mZigpOwotICAgIFN0cmluZyBzZWxlY3RlZE1vZHVsZVByb2plY3QgPSBtb2R1bGVQcm9qZWN0Xy5nZXRUZXh0KCk7ICAgIAotICAgIFN0cmluZyBydW50aW1lSWQgPSB0cnNJZHNfLmdldFJ1bnRpbWVJZCgpOwotICAgIFN0cmluZyB0eXBlSWQgPSB0cnNJZHNfLmdldFR5cGVJZCgpOwotICAgIAotICAgIC8vR2V0IGFsbCB0aGUgcHJvamVjdHMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0eXBlIGFuZCBydW50aW1lCi0gICAgU3RyaW5nW10gcHJvamVjdE5hbWVzID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnRfKQotICAgIHsKLSAgICAgIHByb2plY3ROYW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yQ2xpZW50VHlwZUFuZFJ1bnRpbWUodHlwZUlkLCBydW50aW1lSWQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvamVjdE5hbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JTZXJ2aWNlVHlwZUFuZFJ1bnRpbWUodHlwZUlkLCBydW50aW1lSWQpOwotICAgIH0KLSAgICAKLSAgICBtb2R1bGVQcm9qZWN0Xy5zZXRJdGVtcyhwcm9qZWN0TmFtZXMpOwotICAgIG1vZHVsZVByb2plY3RfLnNldFRleHQoc2VsZWN0ZWRNb2R1bGVQcm9qZWN0KTsKLSAgICBoYW5kbGVQcm9qZWN0Q2hhbmdlZCgpOwotICAgIHVwZGF0ZUVBUlN0YXRlKCk7Ci0gICAgbGlzdGVuZXJzT24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdEl0ZW1zKCkKLSAgewotICAgIElWaXJ0dWFsQ29tcG9uZW50W10gZWFycyA9IEoyRUVVdGlscy5nZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0gICAgU3RyaW5nW10gZWFyUHJvamVjdE5hbWVzID0gbmV3IFN0cmluZ1tlYXJzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaT0wOyBpPGVhclByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBlYXJQcm9qZWN0TmFtZXNbaV09ZWFyc1tpXS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpOwotICAgIH0KLSAgICBlYXJQcm9qZWN0Xy5zZXRJdGVtcyhlYXJQcm9qZWN0TmFtZXMpOwotICAgIAotICAgIGlmIChlYXJQcm9qZWN0TmFtZXMubGVuZ3RoID4gMCkKLSAgICAgIGVhclByb2plY3RfLnNlbGVjdCgwKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVByb2plY3RUeXBlQ2hhbmdlZCgpCi0gIHsKLSAgICB1cGRhdGVFQVJTdGF0ZSgpOyAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVByb2plY3RDaGFuZ2VkKCkKLSAgeyAKLSAgICB1cGRhdGVUZW1wbGF0ZXMoKTsgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVUZW1wbGF0ZXMoKQotICB7Ci0gICAgU3RyaW5nIHByb2plY3ROYW1lID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIGlmIChwcm9qZWN0TmFtZSAhPSBudWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpPjApCi0gICAgewotICAgICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdFR5cGVfLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBwcm9qZWN0VHlwZV8uZGVzZWxlY3RBbGwoKTsgICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwb3B1bGF0ZVByb2plY3RUeXBlQ29tYm8oKTsKLSAgICAgICAgcHJvamVjdFR5cGVfLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVQcm9qZWN0VHlwZUNvbWJvKCkKLSAgewotICAgIC8vR2V0IHRoZSBvbGQgdmFsdWUgaWYgdGhlcmUgd2FzIG9uZS4KLSAgICBTdHJpbmcgb2xkVGVtcGxhdGVJZCA9IGdldENvbXBvbmVudFR5cGUoKTsKLSAgICAKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZXMgPSBudWxsOwotICAgIGlmICh0cnNJZHNfICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGlzQ2xpZW50XykKLSAgICAgIHsKLSAgICAgICAgdGVtcGxhdGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UHJvamVjdFRlbXBsYXRlcyh0cnNJZHNfLmdldFR5cGVJZCgpLCB0cnNJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGVtcGxhdGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVByb2plY3RUZW1wbGF0ZXModHJzSWRzXy5nZXRUeXBlSWQoKSwgdHJzSWRzXy5nZXRSdW50aW1lSWQoKSk7ICAgICAgCi0gICAgICB9Ci0gICAgCi0gICAgICBTdHJpbmdbXSB0ZW1wbGF0ZUxhYmVscyA9IEZhY2V0VXRpbHMuZ2V0VGVtcGxhdGVMYWJlbHModGVtcGxhdGVzKTsKLSAgICAgIHByb2plY3RUeXBlXy5zZXRJdGVtcyh0ZW1wbGF0ZUxhYmVscyk7Ci0gICAgICB0ZW1wbGF0ZXNfID0gdGVtcGxhdGVzOwotICAgICAgCi0gICAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAKLSAgICAgICAgLy9TZWxlY3QgdGhlIHByZXZpb3VzIHRlbXBsYXRlIHNlbGVjdGlvbiBpZiB0aGF0IG9uZSBpcyBpbiB0aGUgbGlzdC4KLSAgICAgICAgaW50IGlkeCA9IGdldEluZGV4T2ZUZW1wbGF0ZUlkKHRlbXBsYXRlcywgb2xkVGVtcGxhdGVJZCk7Ci0gICAgICAgIGlmIChpZHggPiAtMSkgICAgICAgIAotICAgICAgICB7Ci0gICAgICAgICAgcHJvamVjdFR5cGVfLnNlbGVjdChpZHgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIFNlbGVjdCB0aGUgcHJlZmVycmVkIGNsaWVudCBwcm9qZWN0IHR5cGUuCi0gICAgICAgICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBwdGMgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICAgICAgICBTdHJpbmdbXSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IG51bGw7Ci0gICAgICAgICAgaWYgKGlzQ2xpZW50XykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IHB0Yy5nZXRDbGllbnRUeXBlcygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGJvb2xlYW4gc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICBvdXRlcjogZm9yIChpbnQgaiA9IDA7IGogPCBwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm9qZWN0VHlwZV8uc2VsZWN0KGkpOwotICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhayBvdXRlcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghc2VsZWN0ZWQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJvamVjdFR5cGVfLnNlbGVjdCgwKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0KLSAgcHJpdmF0ZSBpbnQgZ2V0SW5kZXhPZlRlbXBsYXRlSWQoU3RyaW5nW10gdGVtcGxhdGVJZHMsIFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHRlbXBsYXRlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh0ZW1wbGF0ZUlkc1tpXS5lcXVhbHModGVtcGxhdGVJZCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gLTE7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgdXBkYXRlRUFSU3RhdGUoKQotICB7Ci0gICAgICBpZighcHJvamVjdE5lZWRzRUFSKG1vZHVsZVByb2plY3RfLmdldFRleHQoKSkpCi0gICAgICB7Ci0JICAgIGVhclByb2plY3RfLnNldEVuYWJsZWQoZmFsc2UpOyAgIAotICAgICAgICBlYXJQcm9qZWN0Xy5zZXRUZXh0KCIiKTsKLSAgICAgICAgbmVlZEVBUl8gPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbmVlZEVBUl8gPSB0cnVlOwotICAgICAgICBlYXJQcm9qZWN0Xy5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICBwb3B1bGF0ZUVBUkNvbWJvcygpOwotICAgICAgfQotICAgIAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRUFSQ29tYm9zKCkKLSAgewotICAgIGVhclByb2plY3RfLnJlbW92ZUFsbCgpOyAgICAKLSAgICBzZXRFYXJQcm9qZWN0SXRlbXMoKTsgCi0gICAgCi0gICAgU3RyaW5nIGVhck5hbWUgPSBEZWZhdWx0aW5nVXRpbHMuZ2V0RGVmYXVsdEVBUlByb2plY3ROYW1lKG1vZHVsZVByb2plY3RfLmdldFRleHQoKSk7Ci0gICAgZWFyUHJvamVjdF8uc2V0VGV4dChlYXJOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9qZWN0TmVlZHNFQVIoU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgLy9JZiB0aGUgcHJvamVjdCBpcyBhIHNpbXBsZSBKYXZhIHByb2plY3Qgb3IgdGhlIHByb2plY3QgdHlwZSBpcyAKLSAgICAvL0phdmEgdXRpbGl0eSByZXR1cm4gZmFsc2UuCi0gICAgaWYgKHByb2plY3ROYW1lICE9IG51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgIGlmIChwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBpZiAoRmFjZXRVdGlscy5pc0phdmFQcm9qZWN0KHByb2plY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy9Qcm9qZWN0IGRpZG4ndCBydWxlIG91dCB0aGUgbmVlZCBmb3IgYW4gRUFSCi0gICAgLy9zbyBjaGVjayB0aGUgcHJvZWN0IHR5cGUKLSAgICBTdHJpbmcgdGVtcGxhdGVJZCA9IGdldENvbXBvbmVudFR5cGUoKTsKLSAgICBpZiAodGVtcGxhdGVJZCAhPSBudWxsICYmIHRlbXBsYXRlSWQubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICBpZiAoRmFjZXRVdGlscy5pc1V0aWxpdHlUZW1wbGF0ZSh0ZW1wbGF0ZUlkKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAgICAgCi0JLy9Qcm9qZWN0IG9yIHByb2plY3QgdHlwZSBkaWRuJ3QgcnVsZSBvdXQgdGhlIG5lZWQgZm9yIGFuIEVBUgotICAgIC8vc28gY2hlY2sgdGhlIHNlcnZlciB0eXBlLgotICAgIGlmICh0cnNJZHNfICE9IG51bGwgJiYgdHJzSWRzXy5nZXRTZXJ2ZXJJZCgpICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHRhcmdldElkID0gU2VydmVyVXRpbHMuZ2V0UnVudGltZVRhcmdldElkRnJvbUZhY3RvcnlJZCh0cnNJZHNfLmdldFNlcnZlcklkKCkpOwotICAJICBpZiAodGFyZ2V0SWQhPW51bGwgJiYgdGFyZ2V0SWQubGVuZ3RoKCk+MCkKLSAgCSAgewotICAJICAgIGlmICghU2VydmVyVXRpbHMuaXNUYXJnZXRWYWxpZEZvckVBUih0YXJnZXRJZCwiMTMiKSkgLy9ybSBqMmVlCi0gIAkgICAgewotICAJICAgICAgcmV0dXJuIGZhbHNlOwotICAJICAgIH0KLSAgCSAgfQotICAgIH0KLSAgCSAKLSAgCXJldHVybiB0cnVlOyAgICAKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBoYW5kbGVTZXRNZXNzYWdlVGV4dCgpIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgdHJ5IHsKLSAgICAgIGJ5dGUgcmVzdWx0ID0gKGJ5dGUpIDA7Ci0gICAgICBpZiAobW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpLmxlbmd0aCgpICE9IDAgJiYgZWFyUHJvamVjdF8uZ2V0VGV4dCgpLmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgU3RyaW5nIHByb2plY3RUZXh0ID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgICAgICBTdHJpbmcgZWFyVGV4dCA9IGVhclByb2plY3RfLmdldFRleHQoKTsKLSAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdFRleHQpOwotICAgICAgICBJUHJvamVjdCBlYXIgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KGVhclRleHQpOwotICAgICAgICBpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0gICAgICAgICAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAoYnl0ZSkgKHJlc3VsdCB8IENSRUFURV9QUk9KRUNUKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFlYXIuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IChieXRlKSAocmVzdWx0IHwgQ1JFQVRFX0VBUik7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHByb2plY3QuZXhpc3RzKCkgJiYgSjJFRVV0aWxzLmV4aXN0cyhwcm9qZWN0KSAmJiBlYXIuZXhpc3RzKCkgJiYgSjJFRVV0aWxzLmV4aXN0cyhlYXIpKSB7Ci0gICAgICAgICAgICBpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZWFyLCBwcm9qZWN0KSkgcmVzdWx0ID0gKGJ5dGUpIChyZXN1bHQgfCBBRERfRUFSX0FTU09DSUFUSU9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChpc0NsaWVudF8pIHsKLSAgICAgICAgbWVzc2FnZVRleHRfLnNldFRleHQoZ2V0VmFsaWRhdGlvbk1lc3NhZ2UocmVzdWx0LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9TVUIpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBtZXNzYWdlVGV4dF8uc2V0VGV4dChnZXRWYWxpZGF0aW9uTWVzc2FnZShyZXN1bHQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TVUIpKTsKLSAgICAgIH0KLSAgICAgIHBhcmVudF8ubGF5b3V0KCk7ICAvL2ZvcmNlIG1lc3NhZ2UgYXJlYSByZXNpemUvd3JhcAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1ZBTElEQVRJT05fSU5URVJOQUxfRVJST1IsIGUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UoYnl0ZSByZXN1bHQsIFN0cmluZyBzZXJ2aWNlT3JDbGllbnQpIHsKLSAgICBTdHJpbmcgbXNnID0gbnVsbDsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgMDoKLSAgICAgIHJldHVybiAiIjsKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSA1OgotICAgICAgbXNnID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19QUk9KRUNUX1dJTExfQkVfQ1JFQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICBjYXNlIDY6Ci0gICAgICBtc2cgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VBUl9XSUxMX0JFX0NSRUFURUQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgY2FzZSA3OgotICAgICAgbXNnID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19QUk9KRUNUX0FORF9FQVJfQ1JFQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgIG1zZyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRUFSX1dJTExfQkVfQVNTT0NJQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gbXNnICE9IG51bGwgPyBOTFMuYmluZChtc2csIG5ldyBPYmplY3RbXSB7IHNlcnZpY2VPckNsaWVudH0pIDogIiI7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSAKLSAgewotICAgIElTdGF0dXMgZmluYWxTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGhhbmRsZVNldE1lc3NhZ2VUZXh0KCk7Ci0gICAgU3RyaW5nIHByb2plY3RUZXh0ID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIFN0cmluZyBlYXJUZXh0ID0gZWFyUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIAotICAgIGlmIChwcm9qZWN0VGV4dD09bnVsbCB8fCBwcm9qZWN0VGV4dC5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICBpZiAoaXNDbGllbnRfKQotICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1BST0pFQ1RfRU1QVFksIG5ldyBTdHJpbmdbXXsiIn0gKSApOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9QUk9KRUNUX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5lZWRFQVJfICYmIChlYXJUZXh0PT1udWxsIHx8IGVhclRleHQubGVuZ3RoKCk9PTApKQotICAgIHsKLSAgICAgIGlmIChpc0NsaWVudF8pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfRUFSX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfRUFSX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9JZiB0aGUgcHJvamVjdCBhbmQgRUFSIGJvdGggZXhpc3QgYW5kIHRoZSBwcm9qZWN0IGlzIG5vdCBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSLCBlbnN1cmUKLSAgICAvL3RoZXkgY2FuIGJlIGFzc29jaWF0ZWQuCi0gICAgaWYgKG5lZWRFQVJfKQotICAgIHsKLSAgICAgIElQcm9qZWN0IHAgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdFRleHQudHJpbSgpKTsKLSAgICAgIElQcm9qZWN0IGVwID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhclRleHQudHJpbSgpKTsKLSAgICAgIGlmIChwLmV4aXN0cygpICYmIGVwLmV4aXN0cygpKQotICAgICAgewotICAgICAgICBpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZXAscCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RhdHVzIGFzc29jaWF0ZVN0YXR1cyA9IEoyRUVVdGlscy5jYW5Bc3NvY2lhdGVQcm9qZWN0VG9FQVIocCwgZXApOwotICAgICAgICAgIGlmIChhc3NvY2lhdGVTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0NsaWVudF8pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfQ0FOTk9UX0FTU09DSUFURSwgbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpLCBlcC5nZXROYW1lKCksIGFzc29jaWF0ZVN0YXR1cy5nZXRNZXNzYWdlKCl9ICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfQ0FOTk9UX0FTU09DSUFURSwgbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpLCBlcC5nZXROYW1lKCksIGFzc29jaWF0ZVN0YXR1cy5nZXRNZXNzYWdlKCl9ICkgKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpbmFsU3RhdHVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NDJmYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlRlc3RJbmZvOwotCi0KLS8qCi0qIFRoZSBKU1BHZW5lcmF0aW9uIHRhc2sgcnVucyB0aGUganNwIGdlbmVyYXRpb24gZW5naW5lIGZvdW5kIGluIHRoZSAKLSogSkJXaXphcmQgUGx1Z2luCi0qCi0qCi0qLwotcHVibGljIGNsYXNzIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgdGVzdFJlZ2lzdHJ5OwotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgdGVzdEZhY2lsaXRpZXM7Ci0gIHByaXZhdGUgU3RyaW5nIGpzcEZvbGRlcjsKLSAgcHJpdmF0ZSBCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kczsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEOwotICBwcml2YXRlIElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLSAgcHJpdmF0ZSBib29sZWFuIHJ1blRlc3RDbGllbnQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBjYW5SdW5UZXN0Q2xpZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlUDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50QzsKLSAgcHJpdmF0ZSBib29sZWFuIGNsaWVudE5lZWRFQVI7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudEVhclByb2plY3ROYW1lOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRFYXJDb21wb25lbnROYW1lOwotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHNlcnZlcklkczsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VQOwotICBwcml2YXRlIFN0cmluZyB3c2RsU2VydmljZVVSTDsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVGVzdFdpZGdldCA9IGZhbHNlOwotICBwcml2YXRlIFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZDsKLSAgcHJpdmF0ZSBMaXN0IGVuZHBvaW50czsKLQotICBwdWJsaWMgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZCAoKQotICB7Ci0gICAgdGVzdFJlZ2lzdHJ5ID0gV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsgICAgCi0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAlTdHJpbmcgY2xpZW50VGVzdElEID0gdGVzdEZhY2lsaXRpZXMuZ2V0U2VsZWN0aW9uKCk7Ci0gIAkKLQkvL0dldCB0aGUgd2Vic2VydmljZSBleHRlbnNpb24KLQkKLQlXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3c2N0ZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbil0ZXN0UmVnaXN0cnkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoY2xpZW50VGVzdElEKTsKLSAgICBJV2ViU2VydmljZVRlc3RlciBpd3N0ID0gKElXZWJTZXJ2aWNlVGVzdGVyKXdzY3RlLmdldFdlYlNlcnZpY2VFeGVjdXRhYmxlRXh0ZW5zaW9uKCk7Ci0JVGVzdEluZm8gdGVzdEluZm8gPSBnZXRUZXN0SW5mbygpOwotCQotCXN0YXR1cyA9IGNvbW1hbmRGYWN0b3J5RXhlY3V0aW9uKGl3c3QuZ2VuZXJhdGUodGVzdEluZm8pLGVudiwgbW9uaXRvciApOwotCWlmKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JICByZXR1cm4gc3RhdHVzOwkKLQl9Ci0JCi0JdGVzdEluZm8uc2V0UnVuVGVzdENsaWVudChydW5UZXN0Q2xpZW50KTsKLQkKLQlpZihjYW5SdW5UZXN0Q2xpZW50KXsKLQkJc3RhdHVzID0gY29tbWFuZEZhY3RvcnlFeGVjdXRpb24oaXdzdC5sYXVuY2godGVzdEluZm8pLGVudiwgbW9uaXRvciApOwotCQlpZihzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpewotCQkJcmV0dXJuIHN0YXR1czsJCi0JCX0KLQl9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIGNvbW1hbmRGYWN0b3J5RXhlY3V0aW9uKElDb21tYW5kRmFjdG9yeSBjb21tYW5kRmFjdG9yeSxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOyAgCQotCQotCXdoaWxlKGNvbW1hbmRGYWN0b3J5Lmhhc05leHQoKSkKLSAgewotICAgIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbW1hbmRGYWN0b3J5LmdldE5leHRDb21tYW5kKCk7Ci0gICAgb3BlcmF0aW9uLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBvcGVyYXRpb24uZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIGV4YyApOyAgCi0gICAgfQotICAgIAotCSAgaWYoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLQkgICAgSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotCQlzSGFuZGxlci5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCSAgfQotICAgIH0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICAKLSAgLy9IZWxwZXIgbWV0aG9kIHdoaWNoIHNldHMgdXAgdGhlIFRlc3RJbmZvIGRhdGEgc3RydWN0dXJlCi0gIHByaXZhdGUgVGVzdEluZm8gZ2V0VGVzdEluZm8oKQotICB7Ci0JSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBudWxsOwotCVN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEID0gbnVsbDsKLQkJCi0JLy9zZXJ2aWNlIHNlcnZlciBpbmZvCi0JaWYoc2VydmVySWRzICE9IG51bGwpewotCSAgaWYgKHNlcnZlcklkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkgIT0gbnVsbCkgCi0JICAgIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2ZXJJZHMuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQl9CQotCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgIT0gbnVsbCkKLSAgICAgIHNlcnZpY2VTZXJ2ZXJUeXBlSUQgPSBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0gICAgCi0JCi0JaWYoY2xpZW50UHJvamVjdCAhPSBudWxsKXsKLSAgCSAgaW50IGluZGV4ID0gY2xpZW50UHJvamVjdC5pbmRleE9mKCIvIik7Ci0gICAgICBpZiAoaW5kZXghPS0xKXsKLSAgICAgICAgY2xpZW50UCA9IGNsaWVudFByb2plY3Quc3Vic3RyaW5nKDAsaW5kZXgpOwotICAgICAgICBjbGllbnRDID0gY2xpZW50UHJvamVjdC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICAgIH0KLSAgCX0KLQotICAKLQlpZihzYW1wbGVQcm9qZWN0ICE9IG51bGwpewotCSAgaW50IGluZGV4ID0gc2FtcGxlUHJvamVjdC5pbmRleE9mKCIvIik7Ci0gICAgICBpZiAoaW5kZXghPS0xKXsKLSAgICAgICAgc2FtcGxlUCA9IHNhbXBsZVByb2plY3Quc3Vic3RyaW5nKDAsaW5kZXgpOwotICAgICAgfQotCX0KLQkKLQlUZXN0SW5mbyB0ZXN0SW5mbyA9IG5ldyBUZXN0SW5mbygpOyAgCi0JdGVzdEluZm8uc2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXIoc2FtcGxlRXhpc3RpbmdTZXJ2ZXIpOwotCXRlc3RJbmZvLnNldENsaWVudFNlcnZlclR5cGVJRChzYW1wbGVTZXJ2ZXJUeXBlSUQpOwotCXRlc3RJbmZvLnNldEpzcEZvbGRlcihqc3BGb2xkZXIpOwotCXRlc3RJbmZvLnNldEV4dGVybmFsQnJvd3NlcihmYWxzZSk7Ci0JdGVzdEluZm8uc2V0RW5kcG9pbnQoZW5kcG9pbnRzKTsKLQl0ZXN0SW5mby5zZXRHZW5lcmF0aW9uUHJvamVjdChzYW1wbGVQKTsKLQl0ZXN0SW5mby5zZXRQcm94eUJlYW4ocHJveHlCZWFuKTsKLQl0ZXN0SW5mby5zZXRTZXRFbmRwb2ludE1ldGhvZChzZXRFbmRwb2ludE1ldGhvZCk7Ci0JdGVzdEluZm8uc2V0Q2xpZW50UHJvamVjdChjbGllbnRQKTsKLQl0ZXN0SW5mby5zZXRDbGllbnRNb2R1bGUoY2xpZW50Qyk7Ci0JdGVzdEluZm8uc2V0Q2xpZW50TmVlZEVBUihjbGllbnROZWVkRUFSKTsKLQl0ZXN0SW5mby5zZXRDbGllbnRFQVJQcm9qZWN0KGNsaWVudEVhclByb2plY3ROYW1lKTsKLQl0ZXN0SW5mby5zZXRDbGllbnRFQVJNb2R1bGUoY2xpZW50RWFyQ29tcG9uZW50TmFtZSk7Ci0JdGVzdEluZm8uc2V0TWV0aG9kcyhtZXRob2RzKTsKLQkKLQkvL2lmIHRoaXMgaXMgYSBjbGllbnQgc2NlbmFyaW8gdGhlIHNlcnZpY2Ugc3R1ZmYgaXMgZW1wdHkKLQlpZihzZXJ2aWNlU2VydmVyVHlwZUlEID09IG51bGwpewotCSAgc2VydmljZVNlcnZlclR5cGVJRCA9IHNhbXBsZVNlcnZlclR5cGVJRDsKLQkgIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IHNhbXBsZUV4aXN0aW5nU2VydmVyOwotCX0KLQkKLQkKLQl0ZXN0SW5mby5zZXRTZXJ2aWNlU2VydmVyVHlwZUlEKHNlcnZpY2VTZXJ2ZXJUeXBlSUQpOwotCXRlc3RJbmZvLnNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpOwotCS8vd3NkbCBzdHVmZgotCXRlc3RJbmZvLnNldFNlcnZpY2VQcm9qZWN0KGdldFdTRExQcm9qZWN0KCkpOwotCXRlc3RJbmZvLnNldFdzZGxTZXJ2aWNlVVJMKHdzZGxTZXJ2aWNlVVJMKTsKLQlyZXR1cm4gdGVzdEluZm87Ci0gIH0KLSAgIAotCi0gIAotICAvL1RoZSB0ZXN0IGZhY2lsaXRpZXMgcmV0cmlldmVkIGZyb20gdGhlIGV4dGVuc2lvbgotICAvL3BsdXMgdGhlIGRlZmF1bHQKLSAgcHVibGljIHZvaWQgc2V0VGVzdEZhY2lsaXR5KFNlbGVjdGlvbkxpc3Qgc2VsZWN0aW9uKQotICB7Ci0gICAgdGVzdEZhY2lsaXRpZXMgPSBzZWxlY3Rpb247Ci0gIH0gCi0gIAotICBwdWJsaWMgdm9pZCBzZXRGb2xkZXIoU3RyaW5nIGZvbGRlcikKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRKc3BGb2xkZXIoU3RyaW5nIGpzcEZvbGRlcikKLSAgewotICAJdGhpcy5qc3BGb2xkZXIgPSBqc3BGb2xkZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMpCi0gIHsKLSAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzOyAgCi0gIH0KLSAKLSAgcHVibGljIHZvaWQgc2V0UnVuVGVzdENsaWVudChib29sZWFuIHJ1blRlc3RDbGllbnQpCi0gIHsKLSAgICB0aGlzLnJ1blRlc3RDbGllbnQgPSBydW5UZXN0Q2xpZW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbikKLSAgewotICAJdGhpcy5wcm94eUJlYW4gPSBwcm94eUJlYW47Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3QoU3RyaW5nIHNhbXBsZVByb2plY3QpCi0gIHsKLSAgCXRoaXMuc2FtcGxlUHJvamVjdCA9IHNhbXBsZVByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpCi0gIHsKLSAgCXRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNjZW5hcmlvQ29udGV4dChTY2VuYXJpb0NvbnRleHQgc2NlbmFyaW9Db250ZXh0KQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFRlc3RSZWdpc3RyeShXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHRlc3RSZWdpc3RyeSkKLSAgewotICAJdGhpcy50ZXN0UmVnaXN0cnkgPSB0ZXN0UmVnaXN0cnk7Ci0gIH0KLSAgIAotICBwdWJsaWMgdm9pZCBzZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNhbXBsZVNlcnZlclR5cGVJRCkKLSAgewotICAJdGhpcy5zYW1wbGVTZXJ2ZXJUeXBlSUQgPSBzYW1wbGVTZXJ2ZXJUeXBlSUQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNhbXBsZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXIpCi0gIHsKLSAgCXRoaXMuc2FtcGxlRXhpc3RpbmdTZXJ2ZXIgPSBzYW1wbGVFeGlzdGluZ1NlcnZlcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzKQotICB7Ci0gICAgc2VydmVySWRzID0gaWRzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNhbXBsZVNlcnZlclR5cGVJRCgpCi0gIHsKLSAgCXJldHVybiBzYW1wbGVTZXJ2ZXJUeXBlSUQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU2VydmVyIGdldFNhbXBsZUV4aXN0aW5nU2VydmVyKCkKLSAgewotICAJcmV0dXJuIHNhbXBsZUV4aXN0aW5nU2VydmVyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50U2VydmVyKFN0cmluZyBjbGllbnRTZXJ2ZXIpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmljZVByb2plY3QpCi0gIHsKLSAgCXRoaXMuc2VydmljZVByb2plY3QgPSBzZXJ2aWNlUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXU0RMUHJvamVjdCgpCi0gIHsKLSAgCSBpZihzZXJ2aWNlUHJvamVjdCAhPSBudWxsKXsKLQkgICAgIGludCBpbmRleCA9IHNlcnZpY2VQcm9qZWN0LmluZGV4T2YoIi8iKTsKLSAgICAgICBpZiAoaW5kZXghPS0xKSB7Ci0JCSAgICAgc2VydmljZVAgPSBzZXJ2aWNlUHJvamVjdC5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgICAgIHJldHVybiBzZXJ2aWNlUDsKLSAgICAgICB9Ci0gIAl9CQotCQotICAJcmV0dXJuIGNsaWVudFA7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxTZXJ2aWNlVVJMKQotICB7Ci0gICAgdGhpcy53c2RsU2VydmljZVVSTCA9IHdzZGxTZXJ2aWNlVVJMOwotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldElzVGVzdFdpZGdldCgpCi0gIHsKLSAgCXJldHVybiBpc1Rlc3RXaWRnZXQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShTdHJpbmcgY2xpZW50RWFyUHJvamVjdE5hbWUpCi0gIHsKLSAgICAgdGhpcy5jbGllbnRFYXJQcm9qZWN0TmFtZSA9IGNsaWVudEVhclByb2plY3ROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFYXJDb21wb25lbnROYW1lKFN0cmluZyBjbGllbnRFYXJDb21wb25lbnROYW1lKQotICB7Ci0JdGhpcy5jbGllbnRFYXJDb21wb25lbnROYW1lID0gY2xpZW50RWFyQ29tcG9uZW50TmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2FuUnVuVGVzdENsaWVudChib29sZWFuIGNhblJ1blRlc3RDbGllbnQpewotCSAgdGhpcy5jYW5SdW5UZXN0Q2xpZW50ID0gY2FuUnVuVGVzdENsaWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBzZXRFbmRwb2ludE1ldGhvZCBUaGUgc2V0RW5kcG9pbnRNZXRob2QgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2V0RW5kcG9pbnRNZXRob2QoU3RyaW5nIHNldEVuZHBvaW50TWV0aG9kKQotICB7Ci0gICAgdGhpcy5zZXRFbmRwb2ludE1ldGhvZCA9IHNldEVuZHBvaW50TWV0aG9kOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gZW5kcG9pbnQgVGhlIGVuZHBvaW50IHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkKLSAgewotICAgIGlmIChlbmRwb2ludCAhPSBudWxsICYmIGVuZHBvaW50Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHYuYWRkKGVuZHBvaW50KTsKLSAgICAgIHNldEVuZHBvaW50cyh2KTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50cyhMaXN0IGVuZHBvaW50cykKLSAgewotICAgIHRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRDbGllbnROZWVkRUFSKCkgewotCQlyZXR1cm4gY2xpZW50TmVlZEVBUjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnROZWVkRUFSKGJvb2xlYW4gY2xpZW50TmVlZEVBUikgewotCQl0aGlzLmNsaWVudE5lZWRFQVIgPSBjbGllbnROZWVkRUFSOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NjM4YWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjcgICAxNDQzNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTAyICAgMTgwMzA0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFRlc3RGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotewotICBwcml2YXRlIGJvb2xlYW4gdGVzdFNlcnZpY2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBnZW5Qcm94eTsgIC8vIFRoaXMgYWN0dWFsbHkgcmVwcmVzZW50IHdoZXRoZXIgY2xpZW50IHRlc3QgaXMgcmVxdWVzdGVkCi0gIHByaXZhdGUgYm9vbGVhbiBsYXVuY2hlZFRlc3QgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNhbkdlblByb3h5OwotICAKLSAgcHVibGljIENsaWVudFRlc3RGcmFnbWVudCggU3RyaW5nIGlkICkKLSAgewotICAgIFNlcXVlbmNlRnJhZ21lbnQgY2xpZW50VGVzdFJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgIENvbmRpdGlvbiAgICAgICAgY29uZGl0aW9uICAgICAgPSBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFNlcnZpY2UgJiYgZ2VuUHJveHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgIHNldENvbmRpdGlvbiggY29uZGl0aW9uICk7Ci0gICAgCi0gICAgCi0gICAgQ29uZGl0aW9uIGpzcENvbmRpdGlvbiAgICAgID0gbmV3IENvbmRpdGlvbigpCi0gICAgewotICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgewotICAgICAgICByZXR1cm4gY2FuR2VuUHJveHk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIFNpbXBsZUZyYWdtZW50IHNpbXBsZUpTUEZyYWdtZW50ID0gbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZCgpLCAiIiApOwotICAgIEJvb2xlYW5GcmFnbWVudCBjaG9pY2VKU1BGcmFnbWVudCA9IG5ldyBCb29sZWFuRnJhZ21lbnQoKTsKLSAgICBjaG9pY2VKU1BGcmFnbWVudC5zZXRUcnVlRnJhZ21lbnQoc2ltcGxlSlNQRnJhZ21lbnQpOwotICAgIGNob2ljZUpTUEZyYWdtZW50LnNldENvbmRpdGlvbihqc3BDb25kaXRpb24pOwotICAgIGNsaWVudFRlc3RSb290LmFkZChjaG9pY2VKU1BGcmFnbWVudCk7Ci0gICAgCi0gICAgY2xpZW50VGVzdFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIGlkICkgKTsKLSAgICBzZXRUcnVlRnJhZ21lbnQoIGNsaWVudFRlc3RSb290ICk7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoIGJvb2xlYW4gZ2VuUHJveHkgKQotICB7Ci0gICAgdGhpcy5nZW5Qcm94eSA9IGdlblByb3h5OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENhbkdlbmVyYXRlUHJveHkoIGJvb2xlYW4gY2FuR2VuUHJveHkgKQotICB7Ci0gICAgdGhpcy5jYW5HZW5Qcm94eSA9IGNhbkdlblByb3h5OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKCBCb29sZWFuIHRlc3RTZXJ2aWNlICkKLSAgewotICAgIHRoaXMudGVzdFNlcnZpY2UgPSB0ZXN0U2VydmljZS5ib29sZWFuVmFsdWUoKTsgIAotICB9IAotCi0gCi0gICAgCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaGVkVGVzdCgpCi0gIHsKLSAgCXJldHVybiBsYXVuY2hlZFRlc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBjZWUyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0V2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwODE1ICAgMTA0ODcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBlbmFibGUvZGlzYWJsZSB0ZXN0IHBhZ2UgY29udHJvbHMgYmFzZSBvbiBzZXR0aW5ncyBpbiB0ZXN0IGZhY2lsaXR5IGV4dGVuc2lvbgotICogMjAwNjA4MTUgICAxNTM5MDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEJyb3dzZSBkb2VzIG5vdCB3b3JrIGluIGdlbmVyYXRlIGNsaWVudCB0ZXN0IHBhZ2UKLSAqIDIwMDgwMzI1ICAgMTg0NzYxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRm9sZGVyUmVzb3VyY2VGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFRlc3RXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0KLSAgLypDT05URVhUX0lEIFBXU00wMDAxIGZvciB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fUEFHRSA9ICAiUFdTTTAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiB0ZXN0Q2hlY2tib3hfOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMDIgZm9yIHRoZSBUZXN0IGNoZWNrIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fQ0hFQ0tCT1hfVEVTVCA9ICJQV1NNMDAwMiI7Ci0KLSAgcHJpdmF0ZSBDb21ibyB0ZXN0VHlwZUNvbWJvXzsKLSAgIC8qQ09OVEVYVF9JRCBQV1NNMDAwMyBmb3IgdGhlIFRlc3QgVHlwZSBDb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX0NPTUJPQk9YX1RFU1QgPSAiUFdTTTAwMDMiOwotCi0gIHByaXZhdGUgVGV4dCAganNwRm9sZGVyVGV4dF87Ci0gIC8qQ09OVEVYVF9JRCBQV1NNMDAwOCBmb3IgdGhlIEpTUCBGb2xkZXIgZmllbGQgb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX1RFWFRfSlNQX0ZPTERFUiA9ICJQV1NNMDAwOCI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gc2FtcGxlRm9sZGVyQnJvd3NlQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBXU00wMDA5IGZvciB0aGUgSlNQIEZvbGRlciBCcm93c2UgYnV0dG9uIG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9CVVRUT05fSlNQX0ZPTERFUl9CUk9XU0UgPSAiUFdTTTAwMDkiOwotCi0gIHByaXZhdGUgQ29tYm8gcHJvamVjdENvbWJvXzsKLSAgLypDT05URVhUX0lEIFBXU00wMDEwIGZvciB0aGUgUHJvamVjdCBjb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX0NPTUJPX1BST0pFQ1QgPSAiUFdTTTAwMTAiOwotCi0gIHByaXZhdGUgVHJlZSBtZXRob2RzVHJlZV87Ci0KLSAgcHJpdmF0ZSBCdXR0b24gc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQV1NNMDAwNiBmb3IgdGhlIFNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9CVVRUT05fU0VMRUNUX0FMTCA9ICJQV1NNMDAwNiI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBXU00wMDA3IGZvciB0aGUgRGVzZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fQlVUVE9OX0RFU0VMRUNUX0FMTCA9ICJQV1NNMDAwNyI7Ci0KLSAgcHJpdmF0ZSBUZXh0IHNhbXBsZUZvbGRlclRleHRfOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMTQgZm9yIHRoZSBGb2xkZXIgZmllbGQgb2YgdGhlIFNhbXBsZSBQYWdlKi8gICAKLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX1RFWFRfU0FNUExFX0ZPTERFUiA9ICJQV1NNMDAxNCI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIHJ1blRlc3RDaGVja2JveF87ICAKLSAgLypDT05URVhUX0lEIFBXU00wMDE1IGZvciB0aGUgcnVuIHRlc3QgY2hlY2sgYm94IG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9DSEVDS0JPWF9MQVVOQ0ggPSAiUFdTTTAwMTUiOwotICAvLwotICBwcml2YXRlIENvbWJvIGVhckNvbWJvXzsKLSAgLypDT05URVhUX0lEIFBXU00wMDE2IGZvciB0aGUgRUFSIGNvbWJvIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fRUFSX0NPTUJPID0gIlBXU00wMDE2IjsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlICAgICAgICAgICAgY29tYm9Hcm91cF87IAotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgICAgICAgIHRlc3RGYWNpbGl0aWVzXzsKLSAgcHJpdmF0ZSBGb2xkZXJSZXNvdXJjZUZpbHRlciBmb2xkZXJGaWx0ZXJfID0gbmV3IEZvbGRlclJlc291cmNlRmlsdGVyKCk7Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1Rlc3RXaWRnZXQgPSBmYWxzZTsKLSAgCi0gIHByaXZhdGUgSVBhdGggd2ViQ29udGVudFBhdGhfOwotICBwcml2YXRlIElSZXNvdXJjZSB3ZWJDb250ZW50XzsKLSAgICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotICAgIGlzVGVzdFdpZGdldCA9IHRydWU7Ci0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotICAgICAgICAKLQlwYXJlbnQuc2V0VG9vbFRpcFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fUEFHRSApOwotCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QV1NNX1BBR0UgKTsKLSAgICAKLSAgICB0ZXN0Q2hlY2tib3hfID0gdWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1RFU1QsCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0NIRUNLQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9DSEVDS0JPWF9URVNUICk7Ci0gICAgdGVzdENoZWNrYm94Xy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUZXN0QnV0dG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgY29tYm9Hcm91cF8gPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAzLCA1LCAwICk7Ci0gICAgCi0gICAgdGVzdFR5cGVDb21ib18gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKCBjb21ib0dyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RFU1RfVFlQRVMsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9DT01CT0JPWF9URVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1NNX0NPTUJPQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLSAgICB0ZXN0VHlwZUNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLSAgICAJCW5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotICAgIAkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLSAgICAJCQkJaGFuZGxlVGVzdEZhY2lsaXR5U2VsZWN0aW9uKCk7Ci0gICAgCQkJfQotICAgIAkJfQotICAgICk7ICAgIAotICAgIAotICAgIG5ldyBMYWJlbCggY29tYm9Hcm91cF8sIFNXVC5OT05FICk7Ci0gICAgCi0gICAgcHJvamVjdENvbWJvXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8oIGNvbWJvR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSlNQX1BST0pFQ1RfTkFNRSwKLSAgICAJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0NPTUJPX1BST0pFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fQ09NQk9fUFJPSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotICAgIHByb2plY3RDb21ib18uc2V0RW5hYmxlZCggZmFsc2UgKTsKLSAgICBuZXcgTGFiZWwoIGNvbWJvR3JvdXBfLCBTV1QuTk9ORSApOwotICAgIAotICAgIAotICAgIGVhckNvbWJvXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8oIGNvbWJvR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRUFSX1BST0pFQ1RTLAotICAgIAkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9FQVJfUFJPSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fRUFSX0NPTUJPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotICAgIGVhckNvbWJvXy5zZXRFbmFibGVkKCBmYWxzZSApOwotICAgIG5ldyBMYWJlbCggY29tYm9Hcm91cF8sIFNXVC5OT05FICk7Ci0gICAgCi0gICAgCi0gICAgCi0gICAgc2FtcGxlRm9sZGVyVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGNvbWJvR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRk9MREVSX05BTUUsCi0gICAgCQkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fVEVYVF9TQU1QTEVfRk9MREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fVEVYVF9TQU1QTEVfRk9MREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiApOwotICAgIAotICAgIHNhbXBsZUZvbGRlclRleHRfLmFkZE1vZGlmeUxpc3RlbmVyKCBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoIE1vZGlmeUV2ZW50IGV2dCApCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVGb2xkZXJUZXh0KCk7IAotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAKLSAgICAgICAKLSAgICBzYW1wbGVGb2xkZXJCcm93c2VCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCBjb21ib0dyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9CUk9XU0UsIAotICAgIAkJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9CVVRUT05fSlNQX0ZPTERFUl9CUk9XU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1NNX0JVVFRPTl9KU1BfRk9MREVSX0JST1dTRSApOwotICAgIHNhbXBsZUZvbGRlckJyb3dzZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2FtcGxlQnJvd3NlKCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIGpzcEZvbGRlclRleHRfID0gdWlVdGlscy5jcmVhdGVUZXh0KCBjb21ib0dyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0pTUF9GT0xERVJfTkFNRSwKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fVEVYVF9KU1BfRk9MREVSLAotICAgICAgICAgICAgSU5GT1BPUF9QV1NNX1RFWFRfSlNQX0ZPTERFUiwKLSAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotICAgIGpzcEZvbGRlclRleHRfLnNldEVuYWJsZWQoIGZhbHNlICk7Ci0gICAgCi0gICAgR3JvdXAgbWV0aG9kc0dyb3VwID0gdWlVdGlscy5jcmVhdGVHcm91cCggcGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfTUVUSE9EUywgIAotICAgIAkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX1RSRUVfTUVUSE9EUywgbnVsbCApOwotICAgIAotCW1ldGhvZHNHcm91cC5zZXRMYXlvdXREYXRhKCB1aVV0aWxzLmNyZWF0ZUZpbGxBbGwoKSApOwotCQotCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCW1ldGhvZHNHcm91cC5zZXRMYXlvdXQoIGxheW91dCApOwotCQotCS8vIFRPRE8gTm8gaW5mb3BvcCBmb3IgdGhpcyB0cmVlLgotCW1ldGhvZHNUcmVlXyA9IHVpVXRpbHMuY3JlYXRlVHJlZSggbWV0aG9kc0dyb3VwLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX1RSRUVfTUVUSE9EUywgCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotCSAgICAgICAgICAgICAgICAgICAJCQkJICAgU1dULk1VTFRJIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTAl8IFNXVC5DSEVDSyApOwotCi0gICAgQ29tcG9zaXRlIHNlbGVjdEJ1dHRvbnMgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggbWV0aG9kc0dyb3VwLCAyICk7Ci0gICAgCi0gICAgc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8gCi0gICAgICA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggc2VsZWN0QnV0dG9ucywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9TRUxFQ1RfQUxMLCAKLSAgICAJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9CVVRUT05fU0VMRUNUX0FMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fQlVUVE9OX1NFTEVDVF9BTEwgKTsKLSAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFsbCggdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXyAKLSAgICAgID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCBzZWxlY3RCdXR0b25zLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0RFU0VMRUNUX0FMTCwgCi0gICAgCQkgIAkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9CVVRUT05fREVTRUxFQ1RfQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9CVVRUT05fREVTRUxFQ1RfQUxMICk7Ci0gICAgZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWxsKCBmYWxzZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIHJ1blRlc3RDaGVja2JveF8gPSB1aVV0aWxzLmNyZWF0ZUNoZWNrYm94KCBwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fUlVOX1RFU1QsCi0gICAgCQkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fQ0hFQ0tCT1hfTEFVTkNILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fQ0hFQ0tCT1hfTEFVTkNIICk7Ci0gICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVGb2xkZXJUZXh0KCkKLSAgewotCS8vIHdlYkNvbnRlbnRQYXRoXyBpcyBzZXQgd2hlbiBqc3BGb2xkZXJUZXh0XyBpcyBzZXQgZm9yIHRoZSBmaXJzdCB0aW1lLiAgVGhlcmVmb3JlLAotCS8vIGlmIHdlYkNvbnRlbnRQYXRoXyBpcyBzdGlsbCBudWxsLCB0aGVyZSBpcyBubyBuZWVkIHRvIHRvdWNoIGpzcEZvbGRlclRleHRfIHlldC4KLQkgIAotCWlmICh3ZWJDb250ZW50UGF0aF8gPT0gbnVsbCkKLQkJcmV0dXJuOwotCSAgCi0gIAlTdHJpbmcgZm9sZGVyID0gc2FtcGxlRm9sZGVyVGV4dF8uZ2V0VGV4dCgpOwkKLSAgICBqc3BGb2xkZXJUZXh0Xy5zZXRUZXh0KHdlYkNvbnRlbnRQYXRoXy50b1N0cmluZygpICsgSVBhdGguU0VQQVJBVE9SICsgZm9sZGVyKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNhbXBsZUJyb3dzZSgpCi0gIHsKLSAgICBJUGF0aCAgICAgIHNlbGVjdGVkUGF0aCAgICAgICA9IG51bGw7Ci0gICAgSVJlc291cmNlICBpbml0aWFsUmVzb3VyY2UgICAgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGluaXRpYWxSZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKCBpbml0aWFsU2VsZWN0aW9uXyApOwotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsgIAotICAgIH0KLSAgICAKLSAgICBpZiggaW5pdGlhbFJlc291cmNlID09IG51bGwgKWluaXRpYWxSZXNvdXJjZSA9IHdlYkNvbnRlbnRfOwotICAgIAotICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IERpYWxvZ1V0aWxzLmJyb3dzZVJlc291cmNlcyggY29tYm9Hcm91cF8uZ2V0U2hlbGwoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJDb250ZW50XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxSZXNvdXJjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJGaWx0ZXJfICk7Ci0gICAgCi0gICAgaWYoIHJlc291cmNlICE9IG51bGwgKQotICAgIHsKLSAgICAgIHNlbGVjdGVkUGF0aCA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCk7ICAgCi0gICAgCi0gICAgICBpbnQgd2ViTW9kdWxlU2VnbWVudHMgPSBzZWxlY3RlZFBhdGgubWF0Y2hpbmdGaXJzdFNlZ21lbnRzKHdlYkNvbnRlbnRQYXRoXyk7Ci0gICAgICAKLSAgICAgIGlmICggd2ViTW9kdWxlU2VnbWVudHMgPCB3ZWJDb250ZW50UGF0aF8uc2VnbWVudENvdW50KCkgKQotICAgICAgewotICAgICAgICBzYW1wbGVGb2xkZXJUZXh0Xy5zZXRUZXh0KCIiKTsKLSAgICAgICAgaGFuZGxlRm9sZGVyVGV4dCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzYW1wbGVGb2xkZXJUZXh0Xy5zZXRUZXh0KHNlbGVjdGVkUGF0aC5yZW1vdmVGaXJzdFNlZ21lbnRzKHdlYk1vZHVsZVNlZ21lbnRzKS50b1N0cmluZygpKTsKLSAgICAgICAgaGFuZGxlRm9sZGVyVGV4dCgpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVRlc3RCdXR0b24oKQotICB7Ci0gICAgYm9vbGVhbiBlbmFibGVkID0gdGVzdENoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgICAKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gICAgCi0gICAgaWYgKGVuYWJsZWQgJiYgdGVzdEZhY2lsaXRpZXNfICE9IG51bGwpIHsKLSAgICAJaGFuZGxlVGVzdEZhY2lsaXR5U2VsZWN0aW9uKCk7Ci0gICAgCXJldHVybjsKLSAgICB9ICAgIAotCi0gICAgc2FtcGxlRm9sZGVyVGV4dF8uc2V0RW5hYmxlZCggZW5hYmxlZCApOwotICAgIG1ldGhvZHNUcmVlXy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gICAgaWYoY2FuUnVuVGVzdENsaWVudF8pCi0gICAgCXJ1blRlc3RDaGVja2JveF8uc2V0RW5hYmxlZCggZW5hYmxlZCApOwotICAgIHNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICBzYW1wbGVGb2xkZXJCcm93c2VCdXR0b25fLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVRlc3RGYWNpbGl0eVNlbGVjdGlvbigpIHsKLQkgIAotCSAgU3RyaW5nIGNsaWVudFRlc3RJRCA9IGdldFRlc3RGYWNpbGl0eSgpLmdldFNlbGVjdGlvbigpOwotCSAgCQotCSAgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gdGVzdEV4dGVuc2lvbiA9IAotCQkgIChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpCi0JCSAgLmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKGNsaWVudFRlc3RJRCk7Ci0JICAgIAotICAgICAgYm9vbGVhbiBoYXNDb2RlR2VuID0gdGVzdEV4dGVuc2lvbi5pc0NvZGVHZW5OZWVkZWQoKTsKLSAgICAgIAotICAgICAgLy8gZm9sZGVyIHNlbGVjdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHRlc3QgZmFjaWxpdGllcyB3aXRoIGNvZGVnZW4KLSAgICAgIHNhbXBsZUZvbGRlclRleHRfLnNldEVuYWJsZWQoIGhhc0NvZGVHZW4gKTsKLSAgICAgIHNhbXBsZUZvbGRlckJyb3dzZUJ1dHRvbl8uc2V0RW5hYmxlZCggaGFzQ29kZUdlbiAmJiB3ZWJDb250ZW50XyAhPSBudWxsICk7Ci0gICAgICAKLSAgICAgIGJvb2xlYW4gaGFzTWV0aG9kcyA9IHRlc3RFeHRlbnNpb24uYXJlTWV0aG9kc05lZWRlZCgpOwotICAgICAgCi0gICAgICAvLyBtZXRob2Qgc2VsZWN0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgdGVzdCBmYWNpbGl0aWVzIHdpdGggbWV0aG9kcwotICAgICAgbWV0aG9kc1RyZWVfLnNldEVuYWJsZWQoIGhhc01ldGhvZHMgKTsgICAgICAKLSAgICAgIHNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLnNldEVuYWJsZWQoIGhhc01ldGhvZHMgKTsKLSAgICAgIGRlc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8uc2V0RW5hYmxlZCggaGFzTWV0aG9kcyApOwotICAgICAgCi0gICAgICAvLyBydW4gb24gc2VydmVyIG9ubHkgYXBwbGljYWJsZSBmb3IgdGVzdCBmYWNpbGl0aWVzIHRoYXQgbmVlZHMgbGF1bmNoaW5nCi0gICAgICBpZihjYW5SdW5UZXN0Q2xpZW50XykKLSAgICAJICBydW5UZXN0Q2hlY2tib3hfLnNldEVuYWJsZWQoIHRlc3RFeHRlbnNpb24uaXNTZXJ2ZXJOZWVkZWQoKSApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlU2VsZWN0QWxsKCBib29sZWFuIHZhbHVlICkKLSAgewotCVRyZWVJdGVtW10gaXRlbXMgPSBtZXRob2RzVHJlZV8uZ2V0SXRlbXMoKTsKLQkKLQlmb3IoIGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkgCi0JewotCSAgaXRlbXNbaV0uc2V0Q2hlY2tlZCh2YWx1ZSk7Ci0JfQotICB9IAotICAKLSAgLy8gSGVyZSBhcmUgdGhlIGdldHRlcnMgYW5kIHNldHRlcnMgZm9yIHRoaXMgd2lkZ2V0LgotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZSggQm9vbGVhbiB0ZXN0U2VydmljZSApCi0gIHsKLSAgICB0ZXN0Q2hlY2tib3hfLnNldFNlbGVjdGlvbiggdGVzdFNlcnZpY2UuYm9vbGVhblZhbHVlKCkgKTsKLSAgICBoYW5kbGVUZXN0QnV0dG9uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggdGVzdENoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0RmFjaWxpdHkoIFNlbGVjdGlvbkxpc3QgdGVzdEZhY2lsaXRpZXMgKQotICB7Ci0gICAgdGVzdEZhY2lsaXRpZXNfID0gdGVzdEZhY2lsaXRpZXM7Ci0gICAgdGVzdFR5cGVDb21ib18uc2V0SXRlbXMoIHRlc3RGYWNpbGl0aWVzLmdldExpc3QoKSApOwotICAgIHRlc3RUeXBlQ29tYm9fLnNlbGVjdCggdGVzdEZhY2lsaXRpZXMuZ2V0SW5kZXgoKSApOwotICAgIGhhbmRsZVRlc3RGYWNpbGl0eVNlbGVjdGlvbigpOwotICB9Ci0gIAotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCBnZXRUZXN0RmFjaWxpdHkoKQotICB7Ci0gICAgdGVzdEZhY2lsaXRpZXNfLnNldEluZGV4KCB0ZXN0VHlwZUNvbWJvXy5nZXRTZWxlY3Rpb25JbmRleCgpICk7Ci0gICAgcmV0dXJuIHRlc3RGYWNpbGl0aWVzXzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRUZXN0SUQoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RUeXBlQ29tYm9fLmdldFRleHQoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdpdmVuIGEgcHJvamVjdCBuYW1lIHdoaWNoIG1heSBiZSBvZiB0aGUgKG9ic29sZXRlKSBmb3JtYXQgInByb2plY3QvbW9kdWxlIiwKLSAgICogcmV0dXJuIG9ubHkgdGhlIHByb2plY3QgcGFydCBvZiB0aGUgbmFtZQotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgbmFtZS4KLSAgICogQHJldHVybiBJZiB0aGUgbmFtZSBoYXMgdGhlIGZvcm1hdCAicHJvamVjdC9tb2R1bGUiLCByZXR1cm5zIG9ubHkgInByb2plY3QiLCAKLSAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIG5hbWUgYXMgaXMuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBleHRyYWN0UHJvamVjdE5hbWUoU3RyaW5nIHByb2plY3QpIHsKLQkgIAotCSAgaW50IGluZGV4ID0gcHJvamVjdC5pbmRleE9mKCIvIik7Ci0JICAKLQkgIGlmIChpbmRleCAhPSAtMSkKLQkJICBwcm9qZWN0ID0gcHJvamVjdC5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCSAgCi0JICByZXR1cm4gcHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkgCi0gIHsKLQlwcm9qZWN0Q29tYm9fLnNldEl0ZW1zKCBuZXcgU3RyaW5nW117IGV4dHJhY3RQcm9qZWN0TmFtZShjbGllbnRQcm9qZWN0KSB9ICk7Ci0JcHJvamVjdENvbWJvXy5zZWxlY3QoMCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3RFQVIoU3RyaW5nIGNsaWVudFByb2plY3RFQVIpIAotICB7Ci0gICAgZWFyQ29tYm9fLnNldEl0ZW1zKCBuZXcgU3RyaW5nW117IGV4dHJhY3RQcm9qZWN0TmFtZShjbGllbnRQcm9qZWN0RUFSKSB9ICk7Ci0gICAgZWFyQ29tYm9fLnNlbGVjdCgwKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRGb2xkZXIoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZUZvbGRlclRleHRfLmdldFRleHQoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Rm9sZGVyKCBTdHJpbmcgZm9sZGVyICkKLSAgewotICAgIHNhbXBsZUZvbGRlclRleHRfLnNldFRleHQoIGZvbGRlciApOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJc1Rlc3RXaWRnZXQoKQotICB7Ci0gIAlyZXR1cm4gaXNUZXN0V2lkZ2V0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRKc3BGb2xkZXIoIFN0cmluZyBmb2xkZXIgKQotICB7Ci0Jd2ViQ29udGVudFBhdGhfID0gKG5ldyBQYXRoKGZvbGRlcikpLnJlbW92ZUxhc3RTZWdtZW50cygxKTsKLQl3ZWJDb250ZW50XyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdlYkNvbnRlbnRQYXRoXyk7CQotCXNhbXBsZUZvbGRlckJyb3dzZUJ1dHRvbl8uc2V0RW5hYmxlZCh3ZWJDb250ZW50XyAhPSBudWxsKTsKLQkgIAotICAgIGpzcEZvbGRlclRleHRfLnNldFRleHQoIGZvbGRlciApOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEpzcEZvbGRlcigpCi0gIHsKLSAgICByZXR1cm4ganNwRm9sZGVyVGV4dF8uZ2V0VGV4dCgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSAoU3RyaW5nIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIHJ1blRlc3RDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJ1blRlc3RDbGllbnQoIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0JICBydW5UZXN0Q2hlY2tib3hfLnNldFNlbGVjdGlvbiggdmFsdWUgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNhblJ1blRlc3RDbGllbnRfOwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2FuUnVuVGVzdENsaWVudChib29sZWFuIGNhblJ1blRlc3RDbGllbnQpewotCSAgY2FuUnVuVGVzdENsaWVudF8gPSBjYW5SdW5UZXN0Q2xpZW50OwotCSAgaWYoIWNhblJ1blRlc3RDbGllbnRfKQotCSAgcnVuVGVzdENoZWNrYm94Xy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2FuUnVuVGVzdENsaWVudCgpCi0gIHsKLQkgIHJldHVybiBjYW5SdW5UZXN0Q2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW5TZWxlY3Rpb25bXSBnZXRNZXRob2RzKCkKLSAgewotICAgIFRyZWVJdGVtW10gICAgICAgICBpdGVtcyAgID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0gICAgQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMgPSBuZXcgQm9vbGVhblNlbGVjdGlvbltpdGVtcy5sZW5ndGhdOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIG1ldGhvZHNbaW5kZXhdID0gbmV3IEJvb2xlYW5TZWxlY3Rpb24oIGl0ZW1zW2luZGV4XS5nZXRUZXh0KCksIGl0ZW1zW2luZGV4XS5nZXRDaGVja2VkKCkgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1ldGhvZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoIEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzICkKLSAgewotICAgIG1ldGhvZHNUcmVlXy5yZW1vdmVBbGwoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGlmKG1ldGhvZHNbaW5kZXhdID09IG51bGwpY29udGludWU7Ci0gICAgICBUcmVlSXRlbSBpdGVtID0gbmV3IFRyZWVJdGVtKCBtZXRob2RzVHJlZV8sIFNXVC5OVUxMICk7Ci0gICAgICBpdGVtLnNldFRleHQoIG1ldGhvZHNbaW5kZXhdLmdldFZhbHVlKCkgKTsKLSAgICAgIGl0ZW0uc2V0Q2hlY2tlZCggbWV0aG9kc1tpbmRleF0uaXNTZWxlY3RlZCgpICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0gICAgaW5pdGlhbFNlbGVjdGlvbl8gPSBzZWxlY3Rpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLQkgIGlmKCFjYW5SdW5UZXN0Q2xpZW50XykKLQkJICByZXR1cm4gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZFUl9OT1RfRk9VTkRfV0FSTklORyk7Ci0gIAotCSAgcmV0dXJuICBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9Db3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg3ZDI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9Db3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MTIgICAxNTcwMzkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIG5ldyB3ZWJzZXJ2aWNldXRpbHMuamFyIG5vdCBjb3BpZWQgaW4gY2xpZW50IGdlbmVyYXRpb24KLSAqIDIwMDYxMDI1ICAgMTYxMjUwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBJbnN0YWxsYXRpb25zIG9yIHdvcmtzcGFjZSBwYXRocyB3aXRoIHNwYWNlcyBicmVhayBTYW1wbGUgR2VuIGFuZCBKYXZhIEVkaXRvciBMYXVuY2gKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlRyYW5zaWVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbi5CdW5kbGVVdGlsczsKLQotCi1wdWJsaWMgY2xhc3MgQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlUHJvamVjdDsKLQkKLS8qKgotICogRGVmYXVsdCBDVE9SOwotICovCi0KLQotcHVibGljIENvcHlXZWJTZXJ2aWNlVXRpbHNKYXJDb21tYW5kKCkKLXsKLQotfQotCi0vKioKLSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAqLwotcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi17Ci0gIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAKLSAgdHJ5Ci0gIHsKLSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydCggbW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX0NPUFlfV0VCU0VSVklDRV9VVElMUyApOwotICAgIElQcm9qZWN0IHNhbXBsZUlQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNhbXBsZVByb2plY3QpOyAgICAKLSAgICBJUGF0aCB3ZWJNb2R1bGVQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHNhbXBsZUlQcm9qZWN0KTsJCi0gICAgaWYgKHdlYk1vZHVsZVBhdGggPT0gbnVsbCkKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9OT1RfRk9VTkQgKTsKLSAgICAgIAotICAgIElTdGF0dXMgc3RhdHVzID0gY29weUlGaWxlKCJ3ZWJzZXJ2aWNldXRpbHMuamFyIix3ZWJNb2R1bGVQYXRoLCJXRUItSU5GL2xpYi93ZWJzZXJ2aWNldXRpbHMuamFyIiwgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLmdldEluc3RhbmNlKCksZW52LCBtb25pdG9yKTsKLSAgICBpZihzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpewotICAgICAgSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTICk7Ci0gICAgICBzSGFuZGxlci5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7CQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgfQotICAgICAgCi0gICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBJU3RhdHVzSGFuZGxlciBzSGFuZGxlciA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVDT1BZX1dFQlNFUlZJQ0VfVVRJTFMgKTsKLSAgICAgIHNIYW5kbGVyLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsJCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVDT1BZX1dFQlNFUlZJQ0VfVVRJTFMsIGUpOwotICAgIH0KLSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci19Ci0KLS8qKgotICoKLSAqLwotcHJpdmF0ZSBJU3RhdHVzIGNvcHlJRmlsZShTdHJpbmcgc291cmNlLCBJUGF0aCB0YXJnZXRQYXRoLCBTdHJpbmcgdGFyZ2V0RmlsZSwgUGx1Z2luIHBsdWdpbixJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotewotICAgIAotICBpZiAocGx1Z2luICE9IG51bGwpCi0gIHsKLSAgICBJUGF0aCB0YXJnZXQgPSB0YXJnZXRQYXRoLmFwcGVuZChuZXcgUGF0aCh0YXJnZXRGaWxlKSk7Ci0gICAgCi0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQoIG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZSU5HX0ZJTEUgKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAgUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgICAgY29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLSAgICAgICBjb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IEZpbGVSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh0YXJnZXQpOwotICAgICAgIFVSTCBzb3VyY2VVUkwgPSBCdW5kbGVVdGlscy5nZXRVUkxGcm9tQnVuZGxlKCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsIHNvdXJjZSApOyAgICAgICAKLSAgICAgICBpZihyZXNvdXJjZSAhPSBudWxsKSB7ICAgIAkgICAgICAJICAgCi0gICAgCSAgIEZpbGUgc291cmNlRmlsZSA9IG5ldyBGaWxlKEZpbGVMb2NhdG9yLnRvRmlsZVVSTChzb3VyY2VVUkwpLmdldFBhdGgoKSk7ICAgCi0gICAgCSAgIGlmIChyZXNvdXJjZS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLmxlbmd0aCgpID09IHNvdXJjZUZpbGUubGVuZ3RoKCkpCi0gICAgCQkgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICB9Ci0gICAgICAgRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCAKLSAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMLm9wZW5TdHJlYW0oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVDT1BZX1dFQlNFUlZJQ0VfVVRJTFMgLGUpOwotICAgIH0KLSAgfQotICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLX0KLQotcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChTdHJpbmcgc2FtcGxlUHJvamVjdCkKLXsKLSAgdGhpcy5zYW1wbGVQcm9qZWN0ID0gc2FtcGxlUHJvamVjdDsgIAotfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0ZpbmlzaERlZmF1bHRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hEZWZhdWx0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTczOTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0ZpbmlzaERlZmF1bHRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi0KLS8qCi0qIFRoZSBKU1BHZW5lcmF0aW9uIHRhc2sgcnVucyB0aGUganNwIGdlbmVyYXRpb24gZW5naW5lIGZvdW5kIGluIHRoZSAKLSogSkJXaXphcmQgUGx1Z2luCi0qCi0qCi0qLwotcHVibGljIGNsYXNzIEZpbmlzaERlZmF1bHRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEOwotICBwcml2YXRlIElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVNlcnZlckluc3RhbmNlSWQ7Ci0KLSAgCi0gIHB1YmxpYyBGaW5pc2hEZWZhdWx0Q29tbWFuZCAoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJaWYoc2FtcGxlU2VydmVySW5zdGFuY2VJZCAhPSBudWxsKXsKLSAgCSAgc2FtcGxlRXhpc3RpbmdTZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2FtcGxlU2VydmVySW5zdGFuY2VJZCk7Ci0gIAlpZiAoc2FtcGxlRXhpc3RpbmdTZXJ2ZXIgIT0gbnVsbCkKLSAgICAgIHNhbXBsZVNlcnZlclR5cGVJRCA9IHNhbXBsZUV4aXN0aW5nU2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotICAgICAgCi0gIAl9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWQpCi0gIHsKLQl0aGlzLnNhbXBsZVNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNhbXBsZVNlcnZlclR5cGVJRCgpCi0gIHsKLSAgCXJldHVybiBzYW1wbGVTZXJ2ZXJUeXBlSUQ7Ci0JCi0gIH0KLSAgCi0gIHB1YmxpYyBJU2VydmVyIGdldFNhbXBsZUV4aXN0aW5nU2VydmVyKCkKLSAgewotICAJcmV0dXJuIHNhbXBsZUV4aXN0aW5nU2VydmVyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RXhpc3RpbmdTZXJ2ZXJJZChTdHJpbmcgZXhpc3RpbmdTZXJ2ZXJJZCkKLSAgewotICB9ICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoSmF2YVRlc3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoSmF2YVRlc3RGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGNhMzQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0ZpbmlzaEphdmFUZXN0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQnVpbGRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotCi0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIEZpbmlzaEphdmFUZXN0RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQgCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZVByb3h5OwotCQotICBwdWJsaWMgRmluaXNoSmF2YVRlc3RGcmFnbWVudCgpCi0gIHsKLSAgCVNlcXVlbmNlRnJhZ21lbnQgamF2YVRlc3RSb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgCUNvbmRpdGlvbiBjb25kaXRpb24gPSBuZXcgQ29uZGl0aW9uKCkKLQl7Ci0JICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0JICB7Ci0JICAgIHJldHVybiBnZW5lcmF0ZVByb3h5OyAKLQkgIH0KLQl9OwotICAgIHNldENvbmRpdGlvbihjb25kaXRpb24pOwotICAgIGphdmFUZXN0Um9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBUZXN0Q2xpZW50RGVwYXJ0dXJlSW5pdENvbW1hbmQoKSwgIiIpKTsKLSAgICBqYXZhVGVzdFJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQnVpbGRQcm9qZWN0Q29tbWFuZCgpLCAiIikpOwotICAgIHNldFRydWVGcmFnbWVudChqYXZhVGVzdFJvb3QpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlbmVyYXRlUHJveHkpCi0gIHsKLSAgCXRoaXMuZ2VuZXJhdGVQcm94eSA9IGdlbmVyYXRlUHJveHk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzSlNQR2VuKGJvb2xlYW4ganNwR2VuKQotICB7Ci0gIAkKLSAgfQotICAKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoVGVzdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hUZXN0RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzllYjE2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hUZXN0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjcgICAxNDQzNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTAyICAgMTgwMzA0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBGaW5pc2hUZXN0RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnR7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzVGVzdFdpZGdldDsJCi0gIHByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZVByb3h5OyAgLy8gVGhpcyBhY3R1YWxseSByZXByZXNlbnQgd2hldGhlciBjbGllbnQgdGVzdCBpcyByZXF1ZXN0ZWQKLSAgcHJpdmF0ZSBTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0U2VydmljZTsKLSAgcHJpdmF0ZSBTdHJpbmcgdGVzdElEOwotICBwdWJsaWMgRmluaXNoVGVzdEZyYWdtZW50KCkKLSAgewotICAgIENvbmRpdGlvbiBjb25kaXRpb24gPSBuZXcgQ29uZGl0aW9uKCkKLQl7Ci0JICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0JICB7Ci0JICAgIGlmKCF0ZXN0U2VydmljZSkgcmV0dXJuIGZhbHNlOwotCSAgCWlmKGxhdW5jaGVkU2VydmljZVRlc3ROYW1lID09IG51bGwpIHJldHVybiB0cnVlOwotCSAgICBpZihsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSAhPSBudWxsKQotCSAgICAgIGlmKCghbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUuZXF1YWxzKCIiKSAmJiAgKCFpc1ByZWZlcmVkQVdTRExUZXN0KCkgfHwgKGlzVGVzdFdpZGdldCAmJiBpc0NsaWVudFRlc3RKYXZhKCkpKSAmJiBnZW5lcmF0ZVByb3h5KSB8fCBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZS5lcXVhbHMoIiIpKSByZXR1cm4gdHJ1ZTsJCi0JICAgIAotCSAgCXJldHVybiBmYWxzZTsgCi0JICB9Ci0JfTsKLQkgICAKLQlzZXRUcnVlRnJhZ21lbnQobmV3IFdlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQoKSk7Ci0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gIH0KLQkgICAgCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaGVkU2VydmljZVRlc3ROYW1lKFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSkKLSAgewotCXRoaXMubGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgfQotCSAgCi0gIHB1YmxpYyBib29sZWFuIGlzUHJlZmVyZWRBV1NETFRlc3QoKQotICB7Ci0gICAgU2NlbmFyaW9Db250ZXh0IHNjZW5hcmlvQ29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKS5jb3B5KCk7Ci0JU3RyaW5nW10gdGVzdFR5cGVzID0gc2NlbmFyaW9Db250ZXh0LmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsKLQlXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHdzdHRSZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQlXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3c2N0ZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbil3c3R0UmVnaXN0cnkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUodGVzdFR5cGVzWzBdKTsgIAkKLQlpZih3c2N0ZS50ZXN0V1NETCgpKQkKLQkgIHJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQ2xpZW50VGVzdEphdmEoKQotICB7Ci0gIAlpZih0ZXN0SUQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB3c3R0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd3NjdGUgPSAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pd3N0dFJlZ2lzdHJ5LmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKHRlc3RJRCk7ICAJCi0JaWYoIXdzY3RlLnRlc3RXU0RMKCkpCQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOyAgIAkKLSAgfQotICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKGJvb2xlYW4gdGVzdFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlID0gdGVzdFNlcnZpY2U7CSAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENhbkdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KQotICB7Ci0gICAgdGhpcy5nZW5lcmF0ZVByb3h5ID0gZ2VuZXJhdGVQcm94eTsJIAotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VGVzdElEKFN0cmluZyB0ZXN0SUQpCi0gIHsKLSAgICB0aGlzLnRlc3RJRCA9IHRlc3RJRDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElzVGVzdFdpZGdldChib29sZWFuIGlzVGVzdFdpZGdldCkKLSAgewotICAJdGhpcy5pc1Rlc3RXaWRnZXQgPSBpc1Rlc3RXaWRnZXQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3RDbGllbnREZXBhcnR1cmVJbml0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZjJmNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1hciAyNSwgMjAwNAotICoKLSAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlIGFuZCBDb21tZW50cwotICovCi1wdWJsaWMgY2xhc3MgVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gZm9yY2VCdWlsZDsJCi0JCi0gIHB1YmxpYyBUZXN0Q2xpZW50RGVwYXJ0dXJlSW5pdENvbW1hbmQoKQotICB7Ci0gIAlmb3JjZUJ1aWxkID0gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEZvcmNlQnVpbGQoKQotICB7Ci0gIAlyZXR1cm4gZm9yY2VCdWlsZDsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdERlZmF1bHRpbmdGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdERlZmF1bHRpbmdGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjQ2ZTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3REZWZhdWx0aW5nRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjcgICAxNDQzNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKiAyMDA2MDkwNyAgIDE1NjYwNiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgbm8gc2FtcGxlIEpTUCBpbiB0aGUgcG9wLXVwIGFjdGlvbiBvZiBHZW5lcmF0ZSBTYW1wbGUgSlNQcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQ3JlYXRlZCBvbiBNYXkgNCwgMjAwNAotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgZmlsZSBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wdWJsaWMgY2xhc3MgVGVzdERlZmF1bHRpbmdGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIAotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgdGVzdEZhY2lsaXRpZXM7Ci0gIHByaXZhdGUgU3RyaW5nIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICBwcml2YXRlIFNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHQ7CQotICBwcml2YXRlIGJvb2xlYW4gZ2VuZXJhdGVQcm94eTsgIC8vIFRoaXMgYWN0dWFsbHkgcmVwcmVzZW50IHdoZXRoZXIgY2xpZW50IHRlc3QgaXMgcmVxdWVzdGVkCi0gIAotICBwcml2YXRlIFN0cmluZyBjbGllbnRSdW50aW1lSWRfOwotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotICAJc2NlbmFyaW9Db250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpLmNvcHkoKTsKLSAgCS8vICB0ZXN0IGZhY2lsaXRpZXMKLSAgICBzZWxlY3RUZXN0RmFjaWxpdHkoKTsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0JCi0gIC8vIFRoZSB0ZXN0IGZhY2lsaXRpZXMgcmV0cmlldmVkIGZyb20gdGhlIGV4dGVuc2lvbgotICAvLyBwbHVzIHRoZSBkZWZhdWx0Ci0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldFRlc3RGYWNpbGl0eSgpCi0gIHsKLSAgICByZXR1cm4gdGVzdEZhY2lsaXRpZXM7Ci0gIH0gCi0JICAKLSAgCi0gIAotICAvLwkqKioqKioqKioqKioqKioqKioqKioqKiAKLSAgLy8gVGhpcyBtZXRob2QgdXNlcyB0aGUgcHJlZmVyZW5jZSB0byAKLSAgLy8gc2VsZWN0IHRoZSBjb3JyZWN0IHRlc3QgZmFjaWxpdHkgCi0gIC8vIAotICAvLyoqKioqKioqKioqKioqKioqKioqKioqCi0gIHByaXZhdGUgdm9pZCBzZWxlY3RUZXN0RmFjaWxpdHkoKQotICB7Ci0gICAgLy9pZiB3ZSBmaW5kIHNvbWV0aGluZyB3ZSBsYXVuY2hlZCBlYXJsaWVyIAotICAgIC8vcHV0IGl0IG9uIHRoZSBib3R0b20KLSAgICBTdHJpbmdbXSB0ZXN0VHlwZXMgPSBzY2VuYXJpb0NvbnRleHQuZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpOwkgIAotICAgIExpc3QgbmV3VGVzdFR5cGVzID0gbmV3IEFycmF5TGlzdCgpOwotCVN0cmluZ1tdIHdzZGxDYXNlcyA9IHNjZW5hcmlvQ29udGV4dC5nZXROb25KYXZhVGVzdFNlcnZpY2UoKTsKLQlib29sZWFuIGxhdW5jaGVkID0gZmFsc2U7Ci0JCi0gICAgZm9yKGludCBpID0gMDtpPHRlc3RUeXBlcy5sZW5ndGg7aSsrKXsKLSAgICAJCi0gICAgICBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiBleHRlbnNpb24gPQotICAgIAkgIChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpCi0gICAgCSAgLmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKHRlc3RUeXBlc1tpXSk7Ci0JCSAgCi0gICAgICBpZiAoY2xpZW50UnVudGltZUlkXyAhPSBudWxsICYmICFleHRlbnNpb24uc3VwcG9ydHNSdW50aW1lKGNsaWVudFJ1bnRpbWVJZF8pKQotICAgIAkgIGNvbnRpbnVlOwotICAgIAkKLQkgIGlmKHRlc3RUeXBlc1tpXS5lcXVhbHMobGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUpKQotCSAgICBsYXVuY2hlZCA9IHRydWU7Ci0JICBlbHNlewotCSAgICAgbmV3VGVzdFR5cGVzLmFkZCh0ZXN0VHlwZXNbaV0pOyAKLQkgIH0KLQl9Ci0JICAgCQotICAgIGlmKGxhdW5jaGVkKQotCSAgbmV3VGVzdFR5cGVzLmFkZChsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSk7Ci0gICAgCi0JCi0JaWYoIWdlbmVyYXRlUHJveHkpCi0gICAgICB0ZXN0RmFjaWxpdGllcyA9IG5ldyBTZWxlY3Rpb25MaXN0KHdzZGxDYXNlcywwKTsJCi0JZWxzZSB7Ci0JICBTdHJpbmdbXSB0ZW1wQXJyYXkgPSBuZXcgU3RyaW5nW25ld1Rlc3RUeXBlcy5zaXplKCldOwotCSAgdGVzdEZhY2lsaXRpZXMgPSBuZXcgU2VsZWN0aW9uTGlzdCgoU3RyaW5nW10pIG5ld1Rlc3RUeXBlcy50b0FycmF5KHRlbXBBcnJheSksIDApOwotCX0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaGVkU2VydmljZVRlc3ROYW1lKFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSkKLSAgewotICAJdGhpcy5sYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSA9IGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gZ2VuZXJhdGVQcm94eSkKLSAgewotICAJdGhpcy5nZW5lcmF0ZVByb3h5ID0gZ2VuZXJhdGVQcm94eTsKLSAgfQotICAgIAotICAvKioKLSAgICogU2V0cyB0aGUgY2xpZW50IHJ1bnRpbWUgSUQuCi0gICAqIAotICAgKiBAcGFyYW0gY2xpZW50UnVudGltZUlkIFRoZSBjbGllbnQgcnVudGltZSBJRC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFJ1bnRpbWVJZChTdHJpbmcgY2xpZW50UnVudGltZUlkKSB7Ci0JICBjbGllbnRSdW50aW1lSWRfID0gY2xpZW50UnVudGltZUlkOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3RXZWJTZXJ2aWNlQ2xpZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9UZXN0V2ViU2VydmljZUNsaWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGVmYWFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3RXZWJTZXJ2aWNlQ2xpZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5BYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW5mbzsKLQotcHVibGljIGNsYXNzIFRlc3RXZWJTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50IHsKLSAgCi0gIHB1YmxpYyBUZXN0V2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBjbGllbnRJbmZvKXsKLQlzdXBlcihjbGllbnRJbmZvKTsgIAotICB9Ci0gIAotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwkgIAotICB9Ci0JCQkKLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCl7Ci0gICAgcmV0dXJuIG51bGw7CSAgCi0gIH0KLQkJCQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkgICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwkgIAotICB9Ci0JCQkJCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkgICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwotICB9Ci0JCQkKLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkgICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwkgIAotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV1NETEZpbmlzaEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XU0RMRmluaXNoRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ1NTNlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XU0RMRmluaXNoRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIFdTRExGaW5pc2hGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudHsKLSAgCi0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XU0RMVGVzdExhdW5jaENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dTRExUZXN0TGF1bmNoQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDZhNzJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dTRExUZXN0TGF1bmNoQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlRlc3RJbmZvOwotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIFdTRExUZXN0TGF1bmNoQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIHRlc3RJRDsgCi0gIHByaXZhdGUgU3RyaW5nIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VpZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlck1vZHVsZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBib29sZWFuIGV4dGVybmFsQnJvd3NlcjsKLSAgcHJpdmF0ZSBMaXN0IGVuZHBvaW50czsKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IG51bGw7Ci0JCi0gIHB1YmxpYyBXU0RMVGVzdExhdW5jaENvbW1hbmQoKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJCi0gIAlXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHRlc3RSZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgCVdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzY3RlID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKXRlc3RSZWdpc3RyeS5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSh0ZXN0SUQpOwotCUlXZWJTZXJ2aWNlVGVzdGVyIGl3c3QgPSAoSVdlYlNlcnZpY2VUZXN0ZXIpd3NjdGUuZ2V0V2ViU2VydmljZUV4ZWN1dGFibGVFeHRlbnNpb24oKTsKLQlUZXN0SW5mbyB0ZXN0SW5mbyA9IGdldFRlc3RJbmZvKCk7Ci0JCi0JCi0Jc3RhdHVzID0gY29tbWFuZEZhY3RvcnlFeGVjdXRpb24oaXdzdC5sYXVuY2godGVzdEluZm8pLGVudiwgbW9uaXRvcik7Ci0JCi0gICAgLy9Eb250IG5lZWQgdG8gc2h1dCBldmVyeXRoaW5nIGRvd24gYmVjYXVzZSB0aGUgd3NkbCB0ZXN0IGRvZXNudCB3b3JrCi0gICAgaWYoc3RhdHVzLmdldFNldmVyaXR5KCkgIT0gU3RhdHVzLk9LKXsKLSAgICAgIElTdGF0dXNIYW5kbGVyIHNIYW5kbGVyID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgIElTdGF0dXMgaW5mb1N0YXR1cyA9IFN0YXR1c1V0aWxzLmluZm9TdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX0xBVU5DSF9XU0RMX1RFU1QgKTsKLSAgICAgIHNIYW5kbGVyLnJlcG9ydEluZm8oaW5mb1N0YXR1cyk7Ci0gICAgICByZXR1cm4gaW5mb1N0YXR1czsJCi0gICAgfQotICAgcmV0dXJuIHN0YXR1czsKLSAgCQotICB9Ci0KLSAgcHJpdmF0ZSBJU3RhdHVzIGNvbW1hbmRGYWN0b3J5RXhlY3V0aW9uKElDb21tYW5kRmFjdG9yeSBjb21tYW5kRmFjdG9yeSxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gIHsKLQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7ICAJCi0Jd2hpbGUoY29tbWFuZEZhY3RvcnkuaGFzTmV4dCgpKQotICB7IAotCSAgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tbWFuZEZhY3RvcnkuZ2V0TmV4dENvbW1hbmQoKTsKLSAgICAKLQkgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgICAgICBzdGF0dXMgPSBvcGVyYXRpb24uZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZXhjICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotCSAgaWYoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLQkgICAgSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotCQlzSGFuZGxlci5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCSAgfQotICAgIH0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICAKLSAgcHJpdmF0ZSBUZXN0SW5mbyBnZXRUZXN0SW5mbygpCi0gIHsKLSAgICAvLwlnZXQgdGhlIHNlcnZlciBzdHVmZgotICAgIGlmIChzZXJ2aWNlaWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsKSAKLQkgIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2aWNlaWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0gICAgZWxzZSBpZiAoc2VydmljZVNlcnZlckluc3RhbmNlSWQhPW51bGwpCi0JCXNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCk7Ci0JCi0JaWYgKHNlcnZpY2VFeGlzdGluZ1NlcnZlciAhPSBudWxsKQotCSAgc2VydmljZVNlcnZlclR5cGVJRCA9IHNlcnZpY2VFeGlzdGluZ1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQllbHNlCi0JICBzZXJ2aWNlU2VydmVyVHlwZUlEID0gc2VydmljZWlkcy5nZXRTZXJ2ZXJJZCgpOwotCS8vIHNlcnZlciB3aWxsIGJlIGNyZWF0ZWQgaW4gU2VydmVyRGVwbG95YWJsZUNvbmZpZ3VyYXRpb25Db21tYW5kCi0gIAotICAgIFRlc3RJbmZvIHRlc3RJbmZvID0gbmV3IFRlc3RJbmZvKCk7Ci0JaWYgKHNlcnZpY2VFeGlzdGluZ1NlcnZlciE9bnVsbCkKLQkJdGVzdEluZm8uc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7Ci0gICAgdGVzdEluZm8uc2V0U2VydmljZVNlcnZlclR5cGVJRChzZXJ2aWNlU2VydmVyVHlwZUlEKTsKLQl0ZXN0SW5mby5zZXRTZXJ2aWNlUHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQl0ZXN0SW5mby5zZXRXc2RsU2VydmljZVVSTCh3c2RsVVJJKTsKLQl0ZXN0SW5mby5zZXRFeHRlcm5hbEJyb3dzZXIoZXh0ZXJuYWxCcm93c2VyKTsKLQl0ZXN0SW5mby5zZXRFbmRwb2ludChlbmRwb2ludHMpOwotCXJldHVybiB0ZXN0SW5mbzsKLQkKLSAgfQotICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RJRChTdHJpbmcgdGVzdElEKQotICB7Ci0gIAl0aGlzLnRlc3RJRCA9IHRlc3RJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwkKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gIAl0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoU3RyaW5nIHNlcnZlclByb2plY3QpCi0gIHsKLSAgICB0aGlzLnNlcnZlclByb2plY3QgPSBzZXJ2ZXJQcm9qZWN0OwotICB9Ci0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBzZXJ2aWNlaWRzKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlaWRzID0gc2VydmljZWlkczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVybmFsQnJvd3Nlcihib29sZWFuIGV4dGVybmFsQnJvd3NlcikKLSAgewotCSAgdGhpcy5leHRlcm5hbEJyb3dzZXIgPSBleHRlcm5hbEJyb3dzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KExpc3QgZW5kcG9pbnRzKQotICB7Ci0gICAgdGhpcy5lbmRwb2ludHMgPSBlbmRwb2ludHM7Ci0gIH0KLQotcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJNb2R1bGUoKSB7Ci0JcmV0dXJuIHNlcnZlck1vZHVsZTsKLX0KLQotcHVibGljIHZvaWQgc2V0U2VydmVyTW9kdWxlKFN0cmluZyBzZXJ2ZXJNb2R1bGUpIHsKLQl0aGlzLnNlcnZlck1vZHVsZSA9IHNlcnZlck1vZHVsZTsKLX0KLQotcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNzSW5zdGFuY2VJZCl7Ci0JdGhpcy5zZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IHNzSW5zdGFuY2VJZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2Q2NTU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MDggICAxNDQ1MDAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDgxOCAgIDE1MzkwMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQnJvd3NlIGRvZXMgbm90IHdvcmsgaW4gZ2VuZXJhdGUgY2xpZW50IHRlc3QgcGFnZQotICogMjAwNjA5MDYgICAxNTQ1NDggZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cywgVGhpcyBmaXhlcyBuYW1lIGNvbGxpc2lvbnMgd2hlbiBjcmVhdGluZyBhIHNhbXBsZSBwcm9qZWN0Ci0gKiAyMDA2MDkyMiAgIDE1ODE3NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgTlBFIHdoZW4gY3JlYXRpbmcgd2ViIHNlcnZpY2UgY2xpZW50IGludG8gZXhpc3RpbmcgSmF2YSBwcm9qZWN0IHdpdGggdGVzdAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5Cb29sZWFuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSogVGhpcyB0YXNrIHNldHMgdXAgYWxsIHRoZSBkZWZhdWx0cyBmb3IgdGhlIHdlYnNlcnZpY2UgdGVzdAotKiBjbGllbnQgcGFnZQotKgotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9XRUJfTU9EVUxFX1JPT1QgPSAiV2ViQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU0FNUExFX1dFQl9QUk9KRUNUX0VYVCA9ICJTYW1wbGUiOwotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNBTVBMRV9ESVIgPSAic2FtcGxlIjsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3RFQVI7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFA7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudEM7Ci0gIHByaXZhdGUgSVByb2plY3QgY2xpZW50SVByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIGZvbGRlcjsKLSAgcHJpdmF0ZSBTdHJpbmcganNwRm9sZGVyOwotICBwcml2YXRlIEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzOwotICBwcml2YXRlIFN0cmluZyBwcm94eUJlYW47Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVA7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZUM7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVByb2plY3RFQVI7Ci0KLSAgCi0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbFRhc2sgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGxhYmVsIGFuZCBkZXNjcmlwdGlvbi4KLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQgKCkKLSAgewotCi0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAJCi0JSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJCi0Jc2FtcGxlUHJvamVjdEFuZEVhclNldHVwKGVudik7Ci0JSVBhdGggd2ViY29udGVudFBhdGggPSBudWxsOwotCi0JLy8gKm5lZWQqIHRvIGRvdWJsZS1jaGVjayB0aGF0IGNsaWVudElQcm9qZWN0IGlzIGEgd2ViIHByb2plY3QKLQlpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KGNsaWVudElQcm9qZWN0KSkKLQkJd2ViY29udGVudFBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgoY2xpZW50SVByb2plY3QpOwotCQotICAgIC8vR2V0IHRoZSBzYW1wbGUgRm9sZGVyIHJlYWR5Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIAotICAgIGlmICh3ZWJjb250ZW50UGF0aCAhPSBudWxsKQotICAgIHsJCi0gICAgCVN0cmluZyBwYXRoID0gd2ViY29udGVudFBhdGgudG9TdHJpbmcoKTsKLSAgICAJc2IuYXBwZW5kKHBhdGgpLmFwcGVuZCgiLyIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewkvL3RoZW4ganVzdCB1c2UgdGhlIGRlZmF1bHQKLSAgICAJc2IuYXBwZW5kKCIvIikuYXBwZW5kKHNhbXBsZUMpLmFwcGVuZCgiLyIpLmFwcGVuZChERUZBVUxUX1dFQl9NT0RVTEVfUk9PVCkuYXBwZW5kKCIvIik7Ci0gICAgfQotICAgIGZvbGRlciA9IFNBTVBMRV9ESVIgKyBnZXRCZWFuKCk7IAotICAgICAgICAKLSAgICBzYi5hcHBlbmQoZm9sZGVyKTsKLSAgICBqc3BGb2xkZXIgPSBzYi50b1N0cmluZygpOwotICAgIAotICAgIC8vZ2V0IHRoZSBtZXRob2QgbmFtZXMgcmVhZHkKLSAgICAvL2ZpbmQgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgZmlsZSBpbiB0aGUgcHJvamVjdAotICAgIC8qCi0gICAgKiBHZXR0aW5nIHRoZSBtZXRob2QgbmFtZXMgdXNpbmcgamF2YW1vZiBpbnRyb3NwZWN0aW9uCi0gICAgKi8KLSAgICBpZihwcm94eUJlYW4gPT0gbnVsbCl7Ci0gICAgICBJU3RhdHVzSGFuZGxlciBzSGFuZGxlciA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSlRTX1BST1hZX05PVF9DT01QSUxFRCApOwotICAgICAgc0hhbmRsZXIucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOwotICAgICAgCi0gICAgfSAJCi0gICAgCi0gICAgCi0gICAgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIGphdmFtb2Zjb21tYW5kID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOyAKLSAgICBqYXZhbW9mY29tbWFuZC5zZXRQcm94eUJlYW4ocHJveHlCZWFuKTsKLSAgICBqYXZhbW9mY29tbWFuZC5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFApOwotICAgIGphdmFtb2Zjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAKLSAgICAKLSAgICAKLSAgICB0cnl7IAotICAgICAgSVN0YXR1cyBtb2ZTdGF0dXMgPSBqYXZhbW9mY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsKTsKLSAgICAgIGlmKG1vZlN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgIAlyZXR1cm4gbW9mU3RhdHVzOwotICAgIH1jYXRjaChFeGNlcHRpb24gZXhjKXsKLSAgICAJSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgICAgICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSlRTX1BST1hZX05PVF9DT01QSUxFRCApOwotICAgICAgICBzSGFuZGxlci5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBlcnJvclN0YXR1czsKLSAgICB9ICAKLSAgICBKYXZhSGVscGVycyBqYXZhSGVscGVycyA9IGphdmFtb2Zjb21tYW5kLmdldEphdmFDbGFzcygpOwotICAgIGlmIChqYXZhSGVscGVycyA9PSBudWxsKSByZXR1cm4gc3RhdHVzOwotICAgICAgCi0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IG51bGw7IAotICAgIGlmKGphdmFIZWxwZXJzIGluc3RhbmNlb2YgSmF2YUNsYXNzKSAKLSAgICAgamF2YUNsYXNzID0gKEphdmFDbGFzcylqYXZhSGVscGVyczsgCi0gICAgZWxzZSByZXR1cm4gc3RhdHVzOyAKLSAgICBMaXN0IG1ldGhvZExpc3QgPSBqYXZhQ2xhc3MuZ2V0UHVibGljTWV0aG9kcygpOwotIAlCb29sZWFuU2VsZWN0aW9uW10gdGVtcE1ldGhvZHMgPSBuZXcgQm9vbGVhblNlbGVjdGlvblttZXRob2RMaXN0LnNpemUoKV07Ci0gICAgTGlzdEl0ZXJhdG9yIGxpc3RJdGVyYXRvciA9IG1ldGhvZExpc3QubGlzdEl0ZXJhdG9yKCk7Ci0gICAgCi0gICAgaW50IGogPSAwOwotIAl3aGlsZSAobGlzdEl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClsaXN0SXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYobWV0aG9kLmlzQ29uc3RydWN0b3IoKSkgY29udGludWU7Ci0gICAgICAKLSAgICAgIHRlbXBNZXRob2RzW2pdID0gbmV3IEJvb2xlYW5TZWxlY3Rpb24oIG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCksIHRydWUpOyAgICAgIAotICAgICAgaisrOwotICAgIH0gCi0gICAgbWV0aG9kcyA9IHRlbXBNZXRob2RzOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TQU1QTEVfRUFSX1BST0pFQ1RfRVhUID0gIkVBUiI7Ci0gIAotICBwcml2YXRlIHZvaWQgc2FtcGxlUHJvamVjdEFuZEVhclNldHVwKElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLQlpZihjbGllbnRQcm9qZWN0ID09IG51bGwpIHJldHVybjsKLSAgCWVsc2V7Ci0JICBpbnQgaW5kZXggPSBjbGllbnRQcm9qZWN0LmluZGV4T2YoIi8iKTsKLQkgIGNsaWVudFAgPSBjbGllbnRQcm9qZWN0LnN1YnN0cmluZygwLGluZGV4KTsKLQkgIGNsaWVudEMgPSBjbGllbnRQcm9qZWN0LnN1YnN0cmluZyhpbmRleCArIDEpOwotICAJfQotCSAgCi0JY2xpZW50SVByb2plY3QgPSAoSVByb2plY3QpUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGNsaWVudFApOwotICAJCi0gIAlpZihKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY2xpZW50SVByb2plY3QpKXsKLSAgICAgIHNhbXBsZVByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotCSAgc2FtcGxlUCA9IGNsaWVudFA7Ci0JICBzYW1wbGVDID0gY2xpZW50QzsKLSAJfSAgCQotICAJZWxzZXsgCi0gIAkgIHNhbXBsZVAgPSBjbGllbnRQICsgREVGQVVMVF9TQU1QTEVfV0VCX1BST0pFQ1RfRVhUOwotCSAgc2FtcGxlQyA9IGNsaWVudEMgKyBERUZBVUxUX1NBTVBMRV9XRUJfUFJPSkVDVF9FWFQ7Ci0JICBzYW1wbGVQcm9qZWN0ID0gc2FtcGxlUCArICIvIiArIHNhbXBsZUM7Ci0JICAKLQkgIFN0cmluZyBzYW1wbGVUZW1wID0gc2FtcGxlUDsKLQkgIAotCSAgYm9vbGVhbiBuYW1lRm91bmQgPSBmYWxzZTsKLQkgIGludCBpID0gMTsKLQkgIHdoaWxlKCFuYW1lRm91bmQpewotCQkgIElQcm9qZWN0IHNhbXBsZUlQcm9qZWN0ID0gKElQcm9qZWN0KVByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzYW1wbGVUZW1wKTsKLQkJICBpZihzYW1wbGVJUHJvamVjdC5leGlzdHMoKSAmJiAhSjJFRVByb2plY3RVdGlsaXRpZXMuaXNEeW5hbWljV2ViUHJvamVjdChzYW1wbGVJUHJvamVjdCkpewotCQkJICBzYW1wbGVUZW1wID0gc2FtcGxlUCArIEludGVnZXIudG9TdHJpbmcoaSk7Ci0JCQkgIHNhbXBsZVByb2plY3QgPSBzYW1wbGVUZW1wICsgIi8iICsgc2FtcGxlQzsKLQkJICAgICAgCi0JCSAgfQotCQkgIGVsc2UKLQkJCSAgbmFtZUZvdW5kID0gdHJ1ZTsgCi0JCSAgCi0JCSAgaSsrOwotCSAgfQotCSAgc2FtcGxlUCA9IHNhbXBsZVRlbXA7Ci0gICAgCi0gIAl9ICAKLQkKLSAgCQotICAJCi0gIAkKLSAgCXNhbXBsZVByb2plY3RFQVIgPSBjbGllbnRQcm9qZWN0RUFSOwotCWlmIChzYW1wbGVQcm9qZWN0RUFSID09IG51bGwgfHwgc2FtcGxlUHJvamVjdEVBUi5sZW5ndGgoKT09MCl7Ci0JICBzYW1wbGVQcm9qZWN0RUFSID0gc2FtcGxlUCArIERFRkFVTFRfU0FNUExFX0VBUl9QUk9KRUNUX0VYVCArICIvIiArIHNhbXBsZUMgKyBERUZBVUxUX1NBTVBMRV9FQVJfUFJPSkVDVF9FWFQ7CQotCX0KLQkKLSAgfQotICAgIAotICAvL2dldHRlcnMgYW5kIHNldHRlcnMKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEJlYW4oKQotICB7Ci0gIAlpbnQgaW5kZXggPSBwcm94eUJlYW4ubGFzdEluZGV4T2YoIi4iKTsKLSAgCVN0cmluZyBlbmQgPSAiIjsKLSAgCWlmKGluZGV4ICE9IC0xKXsKLSAgCSAgZW5kID0gcHJveHlCZWFuLnN1YnN0cmluZyhpbmRleCArIDEpOyAgCQotICAJfQotICAJU3RyaW5nIGJlYW4gPSBlbmQuc3Vic3RyaW5nKDAsZW5kLmxlbmd0aCgpKTsKLSAgICAKLSAgCXJldHVybiBiZWFuOwotICB9Ci0gIAotICAKLSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9sZGVyKCkKLSAgewotICAJcmV0dXJuIGZvbGRlcjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKc3BGb2xkZXIoKQotICB7Ci0gIAlyZXR1cm4ganNwRm9sZGVyOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhblNlbGVjdGlvbltdIGdldE1ldGhvZHMoKQotICB7Ci0gICAgcmV0dXJuIG1ldGhvZHM7ICAKLSAgfQotICAgIAotICBwdWJsaWMgU3RyaW5nIGdldFNhbXBsZVByb2plY3QoKQotICB7Ci0gIAlyZXR1cm4gc2FtcGxlUHJvamVjdDsKLSAgfQotICAgICAgIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgfQotICAKLSAgICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdEVBUihTdHJpbmcgY2xpZW50UHJvamVjdEVBUikKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdEVBUiA9IGNsaWVudFByb2plY3RFQVI7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbikKLSAgewotICAJdGhpcy5wcm94eUJlYW4gPSBwcm94eUJlYW47Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2FtcGxlUHJvamVjdEVBUigpCi0gIHsKLSAgICByZXR1cm4gc2FtcGxlUHJvamVjdEVBUjsKLSAgfQotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3RDbGllbnREZXBhcnR1cmVGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3RDbGllbnREZXBhcnR1cmVGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDk0NWE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWFyIDI1LCAyMDA0Ci0gKgotICogVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgZmlsZSBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBHZW5lcmF0aW9uIC0gQ29kZSBhbmQgQ29tbWVudHMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkJ1aWxkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZS5BZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotCi0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBHZW5lcmF0aW9uIC0gQ29kZSBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50IAotewotICBwdWJsaWMgV2ViU2VydmljZVRlc3RDbGllbnREZXBhcnR1cmVGcmFnbWVudCgpCi0gIHsKLSAgCWFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IEZpbmlzaERlZmF1bHRDb21tYW5kKCksIiIpKTsKLSAgIAlhZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kKCksIiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7Ci0gIAlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0Q2xpZW50RGVwYXJ0dXJlSW5pdENvbW1hbmQuY2xhc3MsICJGb3JjZUJ1aWxkIixCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzLCAiU2FtcGxlU2VydmVyVHlwZUlEIixBZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzLCAiU2FtcGxlRXhpc3RpbmdTZXJ2ZXIiLEFkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQuY2xhc3MpOwotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MsICJTYW1wbGVTZXJ2ZXJUeXBlSUQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MsICJTYW1wbGVFeGlzdGluZ1NlcnZlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gIAkgICAgCi0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvRXhwbG9yZXJTZXJ2aWNlVGVzdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL0V4cGxvcmVyU2VydmljZVRlc3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZTdiNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvRXhwbG9yZXJTZXJ2aWNlVGVzdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuZXhwbG9yZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldTRExUZXN0RmluaXNoQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLQotcHVibGljIGNsYXNzIEV4cGxvcmVyU2VydmljZVRlc3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gaW1wbGVtZW50cyBXU0RMVGVzdEZpbmlzaENvbW1hbmQKLXsKLQotICBwcml2YXRlIGJvb2xlYW4gZXh0ZXJuYWxCcm93c2VyID0gdHJ1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFNlcnZpY2VVUkw7Ci0gIHByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IFdlYlNlcnZpY2VFeHBsb3JlckxhdW5jaCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbGFiZWwgYW5kIGRlc2NyaXB0aW9uLgotICAqLwotICBwdWJsaWMgRXhwbG9yZXJTZXJ2aWNlVGVzdENvbW1hbmQgKCkKLSAgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAKLSAgICBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kIGxhdW5jaENvbW1hbmQgPSBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpOwotICAgIGxhdW5jaENvbW1hbmQuc2V0Rm9yY2VMYXVuY2hPdXRzaWRlSURFKGV4dGVybmFsQnJvd3Nlcik7Ci0gICAgVmVjdG9yIGxhdW5jaE9wdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQlTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpOwotCVN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCWxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OLHN0YXRlTG9jYXRpb24pKTsKLQlsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pKTsKLSAgICBsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XU0RMX1VSTCx3c2RsU2VydmljZVVSTCkpOwotICAgIGlmIChlbmRwb2ludHMgIT0gbnVsbCkKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBlbmRwb2ludHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuV0VCX1NFUlZJQ0VfRU5EUE9JTlQsIGl0Lm5leHQoKS50b1N0cmluZygpKSk7Ci0gICAgbGF1bmNoQ29tbWFuZC5zZXRMYXVuY2hPcHRpb25zKChMYXVuY2hPcHRpb25bXSlsYXVuY2hPcHRpb25WZWN0b3IudG9BcnJheShuZXcgTGF1bmNoT3B0aW9uWzBdKSk7Ci0gICAgbGF1bmNoQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgc3RhdHVzID0gbGF1bmNoQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVybmFsQnJvd3Nlcihib29sZWFuIGV4dGVybmFsQnJvd3NlcikKLSAgewotICAJdGhpcy5leHRlcm5hbEJyb3dzZXIgPSBleHRlcm5hbEJyb3dzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxTZXJ2aWNlVVJMKFN0cmluZyB3c2RsU2VydmljZVVSTCkKLSAgewotICAJdGhpcy53c2RsU2VydmljZVVSTCA9IHdzZGxTZXJ2aWNlVVJMOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQpCi0gIHsKLSAgICAvL1RPRE86IFR5cGUgbWFwcGluZ3MgdG8gdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpCi0gIHsKLSAgICAvL1RPRE86IFR5cGUgbWFwcGluZ3MgdG8gdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoU3RyaW5nIHNlcnZpY2VQcm9qZWN0KQotICB7Ci0gICAgLy9UT0RPOiBUeXBlIG1hcHBpbmdzIHRvIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIHJlbW92ZWQuCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KExpc3QgZW5kcG9pbnRzKQotICB7Ci0gICAgdGhpcy5lbmRwb2ludHMgPSBlbmRwb2ludHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dTRUdlbmVyYXRlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV1NFR2VuZXJhdGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZDZlZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV1NFR2VuZXJhdGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3JlcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotcHVibGljIGNsYXNzIFdTRUdlbmVyYXRlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCi0gIHByaXZhdGUgVGVzdEluZm8gdGVzdEluZm87Ci0JICAKLSAgcHVibGljIFdTRUdlbmVyYXRlQ29tbWFuZChUZXN0SW5mbyB0ZXN0SW5mbyl7Ci0gICAgdGhpcy50ZXN0SW5mbyA9IHRlc3RJbmZvOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAKLSAgICBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kIGxhdW5jaENvbW1hbmQgPSBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpOwotICAgIGxhdW5jaENvbW1hbmQuc2V0Rm9yY2VMYXVuY2hPdXRzaWRlSURFKHRlc3RJbmZvLmdldEV4dGVybmFsQnJvd3NlcigpKTsKLSAgICBWZWN0b3IgbGF1bmNoT3B0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCVN0cmluZyBzdGF0ZUxvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCk7Ci0JU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKCk7Ci0JbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04sc3RhdGVMb2NhdGlvbikpOwotCWxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLkRFRkFVTFRfRkFWT1JJVEVTX0xPQ0FUSU9OLGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbikpOwotICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLldTRExfVVJMLHRlc3RJbmZvLmdldFdzZGxTZXJ2aWNlVVJMKCkpKTsKLSAgICBpZiAodGVzdEluZm8uZ2V0RW5kcG9pbnQoKSAhPSBudWxsKQotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHRlc3RJbmZvLmdldEVuZHBvaW50KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuV0VCX1NFUlZJQ0VfRU5EUE9JTlQsIGl0Lm5leHQoKS50b1N0cmluZygpKSk7Ci0gICAgbGF1bmNoQ29tbWFuZC5zZXRMYXVuY2hPcHRpb25zKChMYXVuY2hPcHRpb25bXSlsYXVuY2hPcHRpb25WZWN0b3IudG9BcnJheShuZXcgTGF1bmNoT3B0aW9uWzBdKSk7Ci0gICAgbGF1bmNoQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgc3RhdHVzID0gbGF1bmNoQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV1NFV2ViU2VydmljZVRlc3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV1NFV2ViU2VydmljZVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmExMTZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dTRVdlYlNlcnZpY2VUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LmV4cGxvcmVyOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotcHVibGljIGNsYXNzIFdTRVdlYlNlcnZpY2VUZXN0ZXIgaW1wbGVtZW50cyBJV2ViU2VydmljZVRlc3RlciAgewotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2VuZXJhdGUoVGVzdEluZm8gdGVzdEluZm8pewotICAgIFZlY3RvciBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsKLSAgfQotCSAgCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgbGF1bmNoKFRlc3RJbmZvIHRlc3RJbmZvKXsKLSAgICBWZWN0b3IgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0JY29tbWFuZHMuYWRkKG5ldyBXU0VHZW5lcmF0ZUNvbW1hbmQodGVzdEluZm8pKTsKLQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsJCi0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV2ViU2VydmljZUV4cGxvcmVyRXhlY3V0YWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvZXhwbG9yZXIvV2ViU2VydmljZUV4cGxvcmVyRXhlY3V0YWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmZjOWFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dlYlNlcnZpY2VFeHBsb3JlckV4ZWN1dGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuZXhwbG9yZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeGVjdXRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYSBraW5kIG9mCi0qIFdlYiBTZXJ2aWNlLVNlcnZlci1SdW50aW1lIGFydGlmYWN0LiBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIGEgV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlCi0qIG9iamVjdCBpcyB0byBtYW51ZmFjdHVyZSB0aGUgd2l6YXJkIHBhZ2VzIHRoYXQgc3VwcG9ydCB0aGUgdHlwZSwgc2VydmVyLCBhbmQgcnVudGltZSBjb25maWd1cmF0aW9uLgotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRXhwbG9yZXJFeGVjdXRhYmxlIGltcGxlbWVudHMgV2ViU2VydmljZUV4ZWN1dGFibGUKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gICAKLSAgCi0gIHB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBnZXRGaW5pc2hDb21tYW5kKCkKLSAgewotICAgIHJldHVybiBuZXcgRXhwbG9yZXJTZXJ2aWNlVGVzdENvbW1hbmQoKTsKLSAgfQotICAKLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9BZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9BZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YmVjNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyNCAgIDEyMjc5OSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTAzICAgMTM4NDc4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTAgICAxNDExMTUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA3MTIxMgkgIDIwMDE5MyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDIxMSAgIDExNzkyNCB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNsYXNzcGF0aGRlcC5VcGRhdGVDbGFzc3BhdGhBdHRyaWJ1dGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnBsdWdpbi5JSjJFRU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5Bc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5TdGFydFNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5WYWxpZGF0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotcHVibGljIGNsYXNzIEFkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAKLSAgcHJpdmF0ZSBUZXN0SW5mbyB0ZXN0SW5mbzsJCi0JCi0gIHByaXZhdGUgSVByb2plY3Qgc2FtcGxlSVByb2plY3Q7Ci0gIHByaXZhdGUgSVByb2plY3QgY2xpZW50SVByb2plY3Q7Ci0gIHByaXZhdGUgSVByb2plY3Qgc2FtcGxlRUFSSVByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZUVBUlByb2plY3Q7Ci0gIAotICBwdWJsaWMgQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZChUZXN0SW5mbyB0ZXN0SW5mbykKLSAgewotICAgIHRoaXMudGVzdEluZm8gPSB0ZXN0SW5mbzsKLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlIFdlYlNlcnZlckRlZmF1bHRpbmdUYXNrIFNldCB0aGUgZGVmYXVsdCBzZXJ2ZXIgbmFtZSBhbmQgaWQgZ2l2ZW4gYQotICAgKiBkZXBsb3lhYmxlLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgLy8xLiBDcmVhdGUgYSBXZWIgcHJvamVjdCBmb3IgdGhlIHNhbXBsZSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KLQkgIHNhbXBsZUlQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotCSAgYm9vbGVhbiBjcmVhdGVkU2FtcGxlUHJvamVjdCA9IGZhbHNlOwotICAgICAgaWYgKCFzYW1wbGVJUHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsgICAgCQotICAgICAgICAgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotICAgICAgICAgIGNvbW1hbmQuc2V0UHJvamVjdE5hbWUodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0gICAgICAgICAgY29tbWFuZC5zZXRUZW1wbGF0ZUlkKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUpOyAgICAgICAgICAKLSAgICAgICAgICAvLyBSZXF1aXJlZEZhY2V0VmVyc2lvbnMgaXMgc2V0IHRvIGFuIGVtcHR5IGFycmF5IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBpbXBvc2UgYW55IGFkZGl0aW9uYWwgY29uc3RyYWludHMuCi0gICAgICAgICAgLy8gV2UganVzdCB3YW50IHRvIGNyZWF0ZSB0aGUgaGlnaGVzdCBsZXZlbCBvZiBXZWIgcHJvamVjdCB0aGF0IHRoZSBzZWxlY3RlZCBzZXJ2ZXIgc3VwcG9ydHMuCi0gICAgICAgICAgY29tbWFuZC5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMobmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uWzBdKTsgICAgICAgICAgIAotICAgICAgICAgIGNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeUlkKHRlc3RJbmZvLmdldENsaWVudFNlcnZlclR5cGVJRCgpKTsKLSAgICAgICAgICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQodGVzdEluZm8uZ2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXIoKS5nZXRJZCgpKTsKLSAgICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgYWRhcHRhYmxlICk7Ci0gICAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCSAgCi0gICAgICAgICAgY3JlYXRlZFNhbXBsZVByb2plY3QgPSB0cnVlOwotICAgICAgfQotCSAgCi0JICAvLzIuIElmIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgcmVxdWlyZXMgYW4gRUFSIGFuZCBubyBFQVIgbmFtZQotCSAgLy9oYXMgYmVlbiBwcm92aWRlZCwgY2hvb3NlIGFuIEVBUiBuYW1lIGFuZCBjcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdC4KLSAgICAgIFZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLSAgICAgIGJvb2xlYW4gc2VydmVyTmVlZHNFQVIgPSB2dS5zZXJ2ZXJOZWVkc0VBUih0ZXN0SW5mby5nZXRDbGllbnRTZXJ2ZXJUeXBlSUQoKSk7Ci0gICAgICBpZiAoc2VydmVyTmVlZHNFQVIpIHsKLQkJCWlmICh0ZXN0SW5mby5nZXRDbGllbnRFQVJQcm9qZWN0KCkgPT0gbnVsbAotCQkJCQl8fCB0ZXN0SW5mby5nZXRDbGllbnRFQVJQcm9qZWN0KCkubGVuZ3RoKCkgPT0gMCkgewotCQkJCXNhbXBsZUVBUlByb2plY3QgPSB0ZXN0SW5mby5nZXRHZW5lcmF0aW9uUHJvamVjdCgpICsgREVGQVVMVF9TQU1QTEVfRUFSX1BST0pFQ1RfRVhUOwotCQkJfSBlbHNlIHsKLQkJCQlzYW1wbGVFQVJQcm9qZWN0ID0gdGVzdEluZm8uZ2V0Q2xpZW50RUFSUHJvamVjdCgpOwotCQkJfQotCQkJc2FtcGxlRUFSSVByb2plY3QgID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNhbXBsZUVBUlByb2plY3QpOwotCQkJaWYgKHNhbXBsZUVBUklQcm9qZWN0ID09IG51bGwgfHwgIXNhbXBsZUVBUklQcm9qZWN0LmV4aXN0cygpKQotCQkJewotCQkgICAgICAgICAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0JCSAgICAgICAgICBjb21tYW5kLnNldFByb2plY3ROYW1lKHNhbXBsZUVBUlByb2plY3QpOwotCQkgICAgICAgICAgY29tbWFuZC5zZXRUZW1wbGF0ZUlkKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfVEVNUExBVEUpOyAgICAgICAgICAKLQkJICAgICAgICAgIC8vIFJlcXVpcmVkRmFjZXRWZXJzaW9ucyBpcyBzZXQgdG8gYW4gZW1wdHkgYXJyYXkgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGltcG9zZSBhbnkgYWRkaXRpb25hbCBjb25zdHJhaW50cy4KLQkJICAgICAgICAgIC8vIFdlIGp1c3Qgd2FudCB0byBjcmVhdGUgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgV2ViIHByb2plY3QgdGhhdCB0aGUgc2VsZWN0ZWQgc2VydmVyIHN1cHBvcnRzLgotCQkgICAgICAgICAgY29tbWFuZC5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMobmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uWzBdKTsgICAgICAgICAgIAotCQkgICAgICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQodGVzdEluZm8uZ2V0Q2xpZW50U2VydmVyVHlwZUlEKCkpOwotCQkgICAgICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSk7Ci0JCSAgICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgYWRhcHRhYmxlICk7Ci0JCSAgICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkJICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLQkJICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAkgIAkJCQkKLQkJCX0KLQkJCQotCSAgfQotIAotCSAgLy8gMy4gSWYgdGhlIHNlbGVjdGVkIHNlcnZlciByZXF1aXJlcyBhbiBFQVIsIGFuZCB0aGUgc2FtcGxlIHByb2plY3QgaGFzCi0JCS8vIG5vdCBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIEVBUiwgYWRkIGl0LgotICAgICAgaWYgKHNlcnZlck5lZWRzRUFSKQotICAgICAgewotICAJICAgIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kIGFzc29jaWF0ZUNvbW1hbmQgPSBuZXcgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQoKTsKLQkgICAgYXNzb2NpYXRlQ29tbWFuZC5zZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotCSAgICBhc3NvY2lhdGVDb21tYW5kLnNldEVBUlByb2plY3Qoc2FtcGxlRUFSUHJvamVjdCk7Ci0JICAgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RWFyKHNhbXBsZUVBUlByb2plY3QpOwotCQlhc3NvY2lhdGVDb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgICAgSVN0YXR1cyBzdGF0dXMgPSBhc3NvY2lhdGVDb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JICAgIHsKLQkgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7ICAgICAKLQkgICAgfSAgICAgIAkgIAotICAgICAgfQotCSAgCi0KLSAgICAgIAotCSAgCi0JICAvLyA0LiBJZiBzZXJ2ZXIgcmVxdWlyZXMgYW4gRUFSLCBhbmQgdGhlIHNhbXBsZSBFQVIgaGFzIG5vdCBhbHJlYWR5IGJlZW4KLQkJLy8gYWRkZWQgdG8gdGhlIHNlcnZlciwgYWRkIGl0LgotCSAgLy8gICBJZiBubyBFQVIgaXMgcmVxdWlyZWQsIGFuZCBzYW1wbGUgcHJvamVjdCBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlIHNlcnZlciBhZGQgaXQuCi0gICAgICBpZiAoc2VydmVyTmVlZHNFQVIpCi0gICAgICB7Ci0gICAgCS8vQWRkIHNhbXBsZUVBUklQcm9qZWN0IHRvIHRoZSBzZXJ2ZXIgaWYgbmVlZGVkLgotICAJCUFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCBtb2RUb1NlcnZlciA9IG5ldyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQoKTsKLQkJbW9kVG9TZXJ2ZXIuc2V0TW9kdWxlKHNhbXBsZUVBUlByb2plY3QpOwotCQltb2RUb1NlcnZlci5zZXRQcm9qZWN0KHNhbXBsZUVBUlByb2plY3QpOwotCQltb2RUb1NlcnZlci5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSk7Ci0JCW1vZFRvU2VydmVyLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkJSVN0YXR1cyBzdGF0dXMgPSBtb2RUb1NlcnZlci5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCSAgICB7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOyAgICAgCi0JICAgIH0gICAgICAgICAJICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAJICAvL2FkZCBzYW1wbGVJUHJvamVjdCBkaXJlY3RseSB0byB0aGUgc2VydmVyIGlmIG5lZWRlZC4KLSAgICAJICBpZih0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpIT0gbnVsbCl7Ci0gICAgCQkgIEFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCBhZGRUb1NlcnZlciA9IG5ldyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQoKTsKLSAgICAJCSAgYWRkVG9TZXJ2ZXIuc2V0TW9kdWxlKHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotICAgIAkJICBhZGRUb1NlcnZlci5zZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotICAgIAkJICBhZGRUb1NlcnZlci5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSk7Ci0gICAgCQkgIGFkZFRvU2VydmVyLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAJCSAgSVN0YXR1cyBzdGF0dXMgPSBhZGRUb1NlcnZlci5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotICAgIAkJICB7Ci0gICAgCQkJICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7ICAgICAKLSAgICAJCSAgfSAgICAgICAgICAgICAgICAgIAkgICAgICAJICAKLSAgICAJICB9ICAKLSAgICB9Ci0JICAKLQkgIC8vNS4gQ2FsbCBTdGFydFNlcnZlckNvbW1hbmQgaWYgdGhpcyBjb21tYW5kIGhhZCB0byBjcmVhdGUgdGhlIHNhbXBsZSBwcm9qZWN0LgotICAgICAgaWYgKGNyZWF0ZWRTYW1wbGVQcm9qZWN0KQotICAgICAgewotCQlTdGFydFNlcnZlckNvbW1hbmQgc3RhcnRTZXJ2ZXIgPSBuZXcgU3RhcnRTZXJ2ZXJDb21tYW5kKHRydWUpOwotCQlzdGFydFNlcnZlci5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSk7Ci0JCXN0YXJ0U2VydmVyLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkJSVN0YXR1cyBzdGF0dXMgPSBzdGFydFNlcnZlci5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCSAgICB7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOyAgICAgCi0JICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgCi0JICAvLzYuIEVzdGFibGlzaCBhbGwgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIGNsaWVudCBwcm9qZWN0LCBzYW1wbGUgcHJvamVjdCwgYW5kIEVBUgotICAgICAgCi0JICBjbGllbnRJUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh0ZXN0SW5mby5nZXRDbGllbnRQcm9qZWN0KCkpOwotCi0JCWlmIChjbGllbnRJUHJvamVjdCAhPSBudWxsICYmICFKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY2xpZW50SVByb2plY3QpKSB7Ci0JCQlpZiAoSjJFRVV0aWxzLmlzSmF2YUNvbXBvbmVudChjbGllbnRJUHJvamVjdCkpIHsJCQkJCi0JCQkJSjJFRVV0aWxzLmFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SmFyKGNsaWVudElQcm9qZWN0LCBzYW1wbGVFQVJJUHJvamVjdCwgbW9uaXRvcik7Ci0JCQkJSjJFRVV0aWxzLmFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SmFyKGNsaWVudElQcm9qZWN0LCBzYW1wbGVJUHJvamVjdCxtb25pdG9yKTsKLQkJCX0KLQotCQkJCXRyeQotCQkJCXsKLQkJCQkgIFN0cmluZyB1cmkgPSBjbGllbnRJUHJvamVjdC5nZXROYW1lKCkgKyAiLmphciI7Ci0JCQkJICBKMkVFVXRpbHMuYWRkSkFST3JNb2R1bGVEZXBlbmRlbmN5KHNhbXBsZUlQcm9qZWN0LCB1cmkpOwotCQkJCSAgCi0JCQkJICAvLyBBZGRpbmcgdGhlIGF0dHJpYnV0ZSB0byB0aGUgcmVmZXJlbmNlZCBwcm9qZWN0J3MgY2xhc3NwYXRoIGVudHJpZXMgb2YgJ2xpYicga2luZAotCQkJCSAgLy8gc28gdGhhdCB0aGVzZSBsaWJzIHdpbGwgYmUgYnVuZGxlZCBhbG9uZyB3aXRoIHRoZSBwcm9qZWN0IHdoZW4gZXhwb3J0ZWQKLQkJCQkgIElDbGFzc3BhdGhFbnRyeVtdIGNsYXNzUGF0aCA9IEphdmFDb3JlLmNyZWF0ZShjbGllbnRJUHJvamVjdCkuZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCQkJICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzUGF0aC5sZW5ndGg7IGkrKykgewotCQkJCQlJQ2xhc3NwYXRoRW50cnkgY2xhc3NwYXRoRW50cnkgPSBjbGFzc1BhdGhbaV07Ci0JCQkJCWlmICggY2xhc3NwYXRoRW50cnkuZ2V0RW50cnlLaW5kKCkgPT0gSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZICl7Ci0JCQkJCQlVcGRhdGVDbGFzc3BhdGhBdHRyaWJ1dGVVdGlsLmFkZERlcGVuZGVuY3lBdHRyaWJ1dGUobW9uaXRvciwgY2xpZW50SVByb2plY3QuZ2V0TmFtZSgpLCBjbGFzc3BhdGhFbnRyeSk7Ci0JCQkJCX0KLQkJCQkgIH0KLQkJCQkgIAotCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JCQkJewotCQkJCQlTdHJpbmcgZXJyb3JNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RVTEVfREVQRU5ERU5DWSwgbmV3IFN0cmluZ1tde3NhbXBsZUlQcm9qZWN0LmdldE5hbWUoKSwgY2xpZW50SVByb2plY3QuZ2V0TmFtZSgpfSk7Ci0JCQkJCUlTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlcnJvck1lc3NhZ2UpOwotCQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0JCQkJewotCQkJCQlTdHJpbmcgZXJyb3JNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RVTEVfREVQRU5ERU5DWSwgbmV3IFN0cmluZ1tde3NhbXBsZUlQcm9qZWN0LmdldE5hbWUoKSwgY2xpZW50SVByb2plY3QuZ2V0TmFtZSgpfSk7Ci0JCQkJCUlTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlcnJvck1lc3NhZ2UpOwotCQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsJCQkJCQotCQkJCX0gY2F0Y2ggKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9CQkJCQkJCQotCQkJCi0JCQkKLQkJfSAgICAgIAkgIAotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotIAotCi0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NBTVBMRV9FQVJfUFJPSkVDVF9FWFQgPSAiRUFSIjsKLSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENHZW5lcmF0ZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENHZW5lcmF0ZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdkOTFkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9HU1RDR2VuZXJhdGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5JbnB1dEZpbGVHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLk1ldGhvZEZpbGVHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLlJlc3VsdEZpbGVHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLlRlc3RDbGllbnRGaWxlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbWFuZC5HZW5lcmF0ZVBhZ2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbWFuZC5KYXZhVG9Nb2RlbENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5Db3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FbnZpcm9ubWVudFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotcHVibGljIGNsYXNzIEdTVENHZW5lcmF0ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBJTlBVVCAgICAgICA9ICJJbnB1dC5qc3AiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBURVNUX0NMSUVOVCA9ICJUZXN0Q2xpZW50LmpzcCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFU1VMVCAgICAgID0gIlJlc3VsdC5qc3AiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNRVRIT0QgICAgICA9ICJNZXRob2QuanNwIjsKLQkKLSAgcHJpdmF0ZSBUZXN0SW5mbyB0ZXN0SW5mbzsKLSAgcHJpdmF0ZSBNb2RlbCBwcm94eU1vZGVsOwotICBwcml2YXRlIFN0cmluZyBqc3Bmb2xkZXI7Ci0gIAotICBwdWJsaWMgR1NUQ0dlbmVyYXRlQ29tbWFuZChUZXN0SW5mbyB0ZXN0SW5mbyl7Ci0gIAl0aGlzLnRlc3RJbmZvID0gdGVzdEluZm87Ci0gIH0KLQkKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQgY29weSA9IG5ldyBDb3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZCgpOyAgICAKLQljb3B5LnNldFNhbXBsZVByb2plY3QodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0gICAgY29weS5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0Jc3RhdHVzID0gY29weS5leGVjdXRlKCBtb25pdG9yLCBudWxsKTsKLQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSByZXR1cm4gc3RhdHVzOwotCXNldEpTUEZvbGRlcigpOwotCXN0YXR1cyA9IGNyZWF0ZU1vZGVsKGVudiwgbW9uaXRvcik7Ci0JaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLQlzdGF0dXMgPSBnZW5lcmF0ZVBhZ2VzKGVudik7Ci0JaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLQlyZXR1cm4gc3RhdHVzOyAgIAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEpTUEZvbGRlcigpewotICAgIC8vaWYgdGhlIGNsaWVudCBpcyBub3QgYSB3ZWJjb21wb25lbnQgdGhlbiB0aGUgCi0JLy9zYW1wbGUgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCwgd2UgbXVzdCBub3cgZmFjdG9yIGluIAotCS8vZmxleGlibGUgcHJvamVjdHMgIAotCSAgCi0JSVByb2plY3QgY2xpZW50SVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0Q2xpZW50UHJvamVjdCgpKTsKLSAgICBpZiAoY2xpZW50SVByb2plY3QgIT0gbnVsbCAmJiAhSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KGNsaWVudElQcm9qZWN0KSl7ICAgCi0JICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotCSAgSVBhdGggcGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkgIGludCBpbmRleCA9IHRlc3RJbmZvLmdldEpzcEZvbGRlcigpLmxhc3RJbmRleE9mKCIvIik7Ci0JICBTdHJpbmcganNwID0gdGVzdEluZm8uZ2V0SnNwRm9sZGVyKCkuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0JICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CQotCSAgc2IuYXBwZW5kKCIvIikuYXBwZW5kKHBhdGgudG9TdHJpbmcoKSkuYXBwZW5kKCIvIikuYXBwZW5kKGpzcCk7CSAgCi0JICBqc3Bmb2xkZXIgPSBzYi50b1N0cmluZygpOwotCX0gCi0gICAgZWxzZQotCSAganNwZm9sZGVyID0gdGVzdEluZm8uZ2V0SnNwRm9sZGVyKCk7CQotICAKLSAgCi0gIH0KLSAgCi0gIC8vY3JlYXRlIHRoZSBtb2RlbCBmcm9tIHRoZSByZXNvdXJjZQotICBwcml2YXRlIElTdGF0dXMgY3JlYXRlTW9kZWwoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgewotICAgIEphdmFUb01vZGVsQ29tbWFuZCBqdG1jID0gbmV3IEphdmFUb01vZGVsQ29tbWFuZCgpOwotCWp0bWMuc2V0TWV0aG9kcyh0ZXN0SW5mby5nZXRNZXRob2RzKCkpOwotCWp0bWMuc2V0Q2xpZW50UHJvamVjdCh0ZXN0SW5mby5nZXRDbGllbnRQcm9qZWN0KCkpOwotCWp0bWMuc2V0UHJveHlCZWFuKHRlc3RJbmZvLmdldFByb3h5QmVhbigpKTsKLQlqdG1jLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQlJU3RhdHVzIHN0YXR1cyA9IGp0bWMuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCk7Ci0JaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLSAgICBwcm94eU1vZGVsID0ganRtYy5nZXRKYXZhRGF0YU1vZGVsKCk7Ci0JcmV0dXJuIHN0YXR1czsKLSAgfSAKLSAgCi0gICAvKioKLSAgICogR2VuZXJhdGUgdGhlIGZvdXIganNwcyB0aGF0IG1ha2UgdXAgdGhpcwotICAgKiBzYW1wbGUgYXBwLgotICAgKi8KLSAgIHByaXZhdGUgSVN0YXR1cyBnZW5lcmF0ZVBhZ2VzKElFbnZpcm9ubWVudCBlbnYpCi0gICB7Ci0gICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCUlQYXRoIGZEZXN0aW5hdGlvbkZvbGRlclBhdGggPSBuZXcgUGF0aChqc3Bmb2xkZXIpOwotICAgIGZEZXN0aW5hdGlvbkZvbGRlclBhdGggPSBmRGVzdGluYXRpb25Gb2xkZXJQYXRoLm1ha2VBYnNvbHV0ZSgpOyAgICAKLSAgICBJV29ya3NwYWNlUm9vdCBmV29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQotICAgICBJUGF0aCBwYXRoVGVzdCA9IGZEZXN0aW5hdGlvbkZvbGRlclBhdGguYXBwZW5kKFRFU1RfQ0xJRU5UKTsKLSAgICAgSUZpbGUgZmlsZVRlc3QgPSBmV29ya3NwYWNlLmdldEZpbGUocGF0aFRlc3QpOwotICAgICBHZW5lcmF0ZVBhZ2VDb21tYW5kIGdwY1Rlc3QgPSBuZXcgR2VuZXJhdGVQYWdlQ29tbWFuZChFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBwcm94eU1vZGVsLAotICAgICAgIG5ldyBUZXN0Q2xpZW50RmlsZUdlbmVyYXRvcihJTlBVVCxNRVRIT0QsUkVTVUxUKSxmaWxlVGVzdCk7Ci0gICAgIC8vZ3BjVGVzdC5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgIGdwY1Rlc3Quc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICBzdGF0dXMgPSBncGNUZXN0LmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUiApCi0gICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAKLQotICAgICAvL2lucHV0IGNvZGVnZW4KLSAgICAgSVBhdGggcGF0aElucHV0ID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5hcHBlbmQoSU5QVVQpOwotICAgICBJRmlsZSBmaWxlSW5wdXQgPSBmV29ya3NwYWNlLmdldEZpbGUocGF0aElucHV0KTsKLSAgICAgSW5wdXRGaWxlR2VuZXJhdG9yIGlucHV0R2VuZXJhdG9yID0gbmV3IElucHV0RmlsZUdlbmVyYXRvcihSRVNVTFQpOwotICAgICBHZW5lcmF0ZVBhZ2VDb21tYW5kIGdwY0lucHV0ID0gbmV3IEdlbmVyYXRlUGFnZUNvbW1hbmQoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwgcHJveHlNb2RlbCwKLSAgICAgICBpbnB1dEdlbmVyYXRvcixmaWxlSW5wdXQpOwotICAgICAvL2dwY0lucHV0LnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICAgZ3BjSW5wdXQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICBzdGF0dXMgPSBncGNJbnB1dC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IgKQotICAgICAJcmV0dXJuIHN0YXR1czsKLQotICAgICAvL21ldGhvZCBjb2RlZ2VuCi0gICAgIElQYXRoIHBhdGhNZXRob2QgPSBmRGVzdGluYXRpb25Gb2xkZXJQYXRoLmFwcGVuZChNRVRIT0QpOwotICAgICBJRmlsZSBmaWxlTWV0aG9kID0gZldvcmtzcGFjZS5nZXRGaWxlKHBhdGhNZXRob2QpOwotICAgICBNZXRob2RGaWxlR2VuZXJhdG9yIG1ldGhvZEdlbmVyYXRvciA9IG5ldyBNZXRob2RGaWxlR2VuZXJhdG9yKElOUFVUKTsKLSAgICAgbWV0aG9kR2VuZXJhdG9yLnNldENsaWVudEZvbGRlclBhdGgoanNwZm9sZGVyKTsKLSAgICAgR2VuZXJhdGVQYWdlQ29tbWFuZCBncGNNZXRob2QgPSBuZXcgR2VuZXJhdGVQYWdlQ29tbWFuZChFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBwcm94eU1vZGVsLAotICAgICAgIG1ldGhvZEdlbmVyYXRvcixmaWxlTWV0aG9kKTsKLSAgICAgLy9ncGNNZXRob2Quc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICBncGNNZXRob2Quc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICBzdGF0dXMgPSBncGNNZXRob2QuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SICkKLSAgICAgCXJldHVybiBzdGF0dXM7ICAgIAotCi0KLSAgICAgLy9yZXN1bHQgY29kZWdlbgotICAgICBJUGF0aCBwYXRoUmVzdWx0ID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5hcHBlbmQoUkVTVUxUKTsKLSAgICAgSUZpbGUgZmlsZVJlc3VsdCA9IGZXb3Jrc3BhY2UuZ2V0RmlsZShwYXRoUmVzdWx0KTsKLSAgICAgUmVzdWx0RmlsZUdlbmVyYXRvciByZmcgPSBuZXcgUmVzdWx0RmlsZUdlbmVyYXRvcigpOwotICAgICByZmcuc2V0Q2xpZW50Rm9sZGVyUGF0aChqc3Bmb2xkZXIpOwotICAgICByZmcuc2V0U2V0RW5kcG9pbnRNZXRob2QodGVzdEluZm8uZ2V0U2V0RW5kcG9pbnRNZXRob2QoKSk7Ci0gICAgIEdlbmVyYXRlUGFnZUNvbW1hbmQgZ3BjUmVzdWx0ID0gbmV3IEdlbmVyYXRlUGFnZUNvbW1hbmQoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwgcHJveHlNb2RlbCwKLSAgICAgICByZmcsZmlsZVJlc3VsdCk7Ci0gICAgIGdwY1Jlc3VsdC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgIHN0YXR1cyA9IGdwY1Jlc3VsdC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgIAotICAgICByZXR1cm4gc3RhdHVzOwotICAgfQotCi0gICAKLQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENMYXVuY2hDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9HU1RDTGF1bmNoQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWJmYzhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENMYXVuY2hDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE4ICAgMTM0MzIyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjQgICAxMjQzNjgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5TdGFydFNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5icm93c2VyLklXZWJCcm93c2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmJyb3dzZXIuSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotcHVibGljIGNsYXNzIEdTVENMYXVuY2hDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBJTlBVVCAgICAgICA9ICJJbnB1dC5qc3AiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBURVNUX0NMSUVOVCA9ICJUZXN0Q2xpZW50LmpzcCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFU1VMVCAgICAgID0gIlJlc3VsdC5qc3AiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNRVRIT0QgICAgICA9ICJNZXRob2QuanNwIjsKLQkJCi0gIHByaXZhdGUgVGVzdEluZm8gdGVzdEluZm87Ci0gIHByaXZhdGUgU3RyaW5nIGpzcGZvbGRlcjsKLSAgCi0gIHB1YmxpYyBHU1RDTGF1bmNoQ29tbWFuZChUZXN0SW5mbyB0ZXN0SW5mbyl7Ci0gICAgdGhpcy50ZXN0SW5mbyA9IHRlc3RJbmZvOwotICB9Ci0JCQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgICBzZXRKU1BGb2xkZXIoKTsKLSAgICAKLQkgIHJldHVybiBsYXVuY2hTYW1wbGUoZW52LCBtb25pdG9yKTsKLSAgfQotICBwcml2YXRlIHZvaWQgc2V0SlNQRm9sZGVyKCl7Ci0JICAgIC8vaWYgdGhlIGNsaWVudCBpcyBub3QgYSB3ZWJjb21wb25lbnQgdGhlbiB0aGUgCi0JCS8vc2FtcGxlIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQsIHdlIG11c3Qgbm93IGZhY3RvciBpbiAKLQkJLy9mbGV4aWJsZSBwcm9qZWN0cyAgCi0JCSAgCi0JCUlQcm9qZWN0IGNsaWVudElQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHRlc3RJbmZvLmdldENsaWVudFByb2plY3QoKSk7Ci0JICAgIGlmIChjbGllbnRJUHJvamVjdCAhPSBudWxsICYmICFKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY2xpZW50SVByb2plY3QpKXsgICAKLQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotCQkgIElQYXRoIHBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7Ci0JCSAgaW50IGluZGV4ID0gdGVzdEluZm8uZ2V0SnNwRm9sZGVyKCkubGFzdEluZGV4T2YoIi8iKTsKLQkJICBTdHJpbmcganNwID0gdGVzdEluZm8uZ2V0SnNwRm9sZGVyKCkuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0JCSAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwkKLQkJICBzYi5hcHBlbmQoIi8iKS5hcHBlbmQocGF0aC50b1N0cmluZygpKS5hcHBlbmQoIi8iKS5hcHBlbmQoanNwKTsJICAKLQkJICBqc3Bmb2xkZXIgPSBzYi50b1N0cmluZygpOwotCQl9IAotCSAgICBlbHNlCi0JCSAganNwZm9sZGVyID0gdGVzdEluZm8uZ2V0SnNwRm9sZGVyKCk7CQotCSAgCi0JICAKLQkgIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBsYXVuY2hTYW1wbGUgKElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JSVBhdGggZkRlc3RpbmF0aW9uRm9sZGVyUGF0aCA9IG5ldyBQYXRoKGpzcGZvbGRlcik7Ci0JZkRlc3RpbmF0aW9uRm9sZGVyUGF0aCA9IGZEZXN0aW5hdGlvbkZvbGRlclBhdGgubWFrZUFic29sdXRlKCk7ICAgIAotCSB0cnkgCi0JIHsKLQkgICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotCSB9IAotCSBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjICkgCi0JIHsKLQkgICAvLyBVSVN5bmNocm9uaXplci5zeW5jRXhlYyBzZWVtcyB0byBpbnRlcnJ1cHQgdGhlIFVJIHRyZWFkIHdoZW4gdGhlIGF1dG9idWlsZGVyIGlzIGRvbmUuICBOb3Qgc3VyZSwgd2h5LgotCSAgIC8vIEknbSBhc3N1bWluZyBoZXJlIHRoYXQgdGhlIGF1dG9idWlsZGVyIGhhcyBhY3R1YWxseSBjb21wbGV0ZWQgaXRzIHN0dWZmLiAKLQkgfQotCi0JU3RhcnRTZXJ2ZXJDb21tYW5kIHNlcnZlckNvbW1hbmQgPSBuZXcgU3RhcnRTZXJ2ZXJDb21tYW5kKCB0cnVlICk7Ci0Jc2VydmVyQ29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKCB0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpLmdldElkKCkgKTsKLQlzZXJ2ZXJDb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkKLQlzdGF0dXMgPSBzZXJ2ZXJDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0JaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLQkKLQlJUHJvamVjdCBzYW1wbGVQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotCVN0cmluZyAgIG5ld1BhdGggPSBTZXJ2ZXJVdGlscy5nZXRXZWJDb21wb25lbnRVUkwoc2FtcGxlUHJvamVjdCwgdGVzdEluZm8uZ2V0Q2xpZW50U2VydmVyVHlwZUlEKCksdGVzdEluZm8uZ2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXIoKSk7Ci0JaW50IGNvdW50ID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHNhbXBsZVByb2plY3QpLnNlZ21lbnRDb3VudCgpOwotCQotCW5ld1BhdGggPSBuZXdQYXRoICsgIi8iICsgZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5yZW1vdmVGaXJzdFNlZ21lbnRzKGNvdW50KTsKLQlTdHJpbmdCdWZmZXIgdXJsU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlciggbmV3UGF0aCArICIvIiArIFRFU1RfQ0xJRU5UICk7Ci0JaWYgKHRlc3RJbmZvLmdldEVuZHBvaW50KCkgIT0gbnVsbCAmJiAhdGVzdEluZm8uZ2V0RW5kcG9pbnQoKS5pc0VtcHR5KCkpCi0JewotCSAgdXJsU3RyaW5nLmFwcGVuZCgiP2VuZHBvaW50PSIpOwotCSAgdXJsU3RyaW5nLmFwcGVuZCh0ZXN0SW5mby5nZXRFbmRwb2ludCgpLmdldCgwKS50b1N0cmluZygpKTsKLQl9Ci0JICAgIAotCXRyeXsKLQkgICAgICBVUkwgdXJsOwotCSAgICAgIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICAgICAKLSAgICAgICAgSW5wdXRTdHJlYW0gcmVzdWx0U3RyZWFtID0gbnVsbDsKLSAgICAgICAgSW5wdXRTdHJlYW0gbWV0aG9kU3RyZWFtID0gbnVsbDsKLSAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gID0gbnVsbDsKLSAgICAgICAgSW5wdXRTdHJlYW0gY2xpZW50U3RyZWFtID0gbnVsbDsKLQotCSAgICAgIGZvciggaW50IHJldHJpZXMgPSAwOyByZXRyaWVzIDwgMTA7IHJldHJpZXMrKyApCi0JICAgICAgewotCSAgICAgICAgdHJ5Ci0JICAgICAgICB7Ci0JICAgICAgICAgIC8vIFRlc3QgdGhlIFVSTHMKLSAgICAgICAgICAgIAotCSAgICAgICAgICByZXN1bHRTdHJlYW0gPSBuZXcgVVJMKG5ld1BhdGggKyAiLyIgKyBSRVNVTFQpLm9wZW5TdHJlYW0oKTsKLQkgICAgICAgICAgbWV0aG9kU3RyZWFtID0gbmV3IFVSTChuZXdQYXRoICsgIi8iICsgTUVUSE9EKS5vcGVuU3RyZWFtKCk7Ci0JICAgICAgICAgIGlucHV0U3RyZWFtICA9IG5ldyBVUkwobmV3UGF0aCArICIvIiArIElOUFVUKS5vcGVuU3RyZWFtKCk7Ci0JICAgICAgICAgIGNsaWVudFN0cmVhbSA9IG5ldyBVUkwobmV3UGF0aCArICIvIiArIFRFU1RfQ0xJRU5UKS5vcGVuU3RyZWFtKCk7Ci0gICAgICAgICAgICAKLQkgICAgICAgICAgLy8gTG9va3MgZ29vZCwgZXhpdCBsb29wCi0JICAgICAgICAgIGJyZWFrOwotCSAgICAgICAgfQotCSAgICAgICAgY2F0Y2goIElPRXhjZXB0aW9uIGlvZSApCi0JICAgICAgICB7Ci0JICAgICAgICAgIHRyeQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwotCSAgICAgICAgICB9Ci0JICAgICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkge30gCSAgCSAgICAgICAgICAKLQkgICAgICAgIH0KLSAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmKCByZXN1bHRTdHJlYW0gIT0gbnVsbCApIHJlc3VsdFN0cmVhbS5jbG9zZSgpOwotICAgICAgICAgICAgICBpZiggbWV0aG9kU3RyZWFtICE9IG51bGwgKSBtZXRob2RTdHJlYW0uY2xvc2UoKTsKLSAgICAgICAgICAgICAgaWYoIGlucHV0U3RyZWFtICE9IG51bGwgKSBpbnB1dFN0cmVhbS5jbG9zZSgpOwotICAgICAgICAgICAgICBpZiggY2xpZW50U3RyZWFtICE9IG51bGwgKSBjbGllbnRTdHJlYW0uY2xvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBJT0V4Y2VwdGlvbiBleGMgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQkgICAgICB9Ci0KLQkJCUlXb3JrYmVuY2hCcm93c2VyU3VwcG9ydCBicm93c2VyU3VwcG9ydCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QnJvd3NlclN1cHBvcnQoKTsKLQkJCUlXZWJCcm93c2VyIGJyb3dzZXIgPSBicm93c2VyU3VwcG9ydC5jcmVhdGVCcm93c2VyKElXb3JrYmVuY2hCcm93c2VyU3VwcG9ydC5MT0NBVElPTl9CQVIsIG51bGwsIG51bGwsIG51bGwpOwotCQkJYnJvd3Nlci5vcGVuVVJMKHVybCk7Ci0JICAgICAgcmV0dXJuIHN0YXR1czsKLQkJIH1jYXRjaChQYXJ0SW5pdEV4Y2VwdGlvbiBleGMpewotCQkJZW52LmdldExvZygpLmxvZyhJTG9nLkVSUk9SLCA1MDQ4LCB0aGlzLCAibGF1bmNoU2FtcGxlIiwgZXhjKTsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGV4Yy5nZXRNZXNzYWdlKCksIGV4Yyk7Ci0JCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICAgIAlyZXR1cm4gc3RhdHVzOwotCSAgICB9Y2F0Y2goTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGV4Yyl7Ci0JICAgIAllbnYuZ2V0TG9nKCkubG9nKElMb2cuV0FSTklORywgNTA0OCwgdGhpcywgImxhdW5jaFNhbXBsZSIsIGV4Yyk7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01BTEZPUk1FRF9VUkwsIGV4YyApOwotCQkJdHJ5IHsKLQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMpOwotCQkJfSBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIGUpIHsKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NQUxGT1JNRURfVVJMLCBlICk7Ci0JCQl9Ci0JICAgIAlyZXR1cm4gc3RhdHVzOwotCSAgICB9Ci0gICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENXZWJTZXJ2aWNlVGVzdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9HU1RDV2ViU2VydmljZVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTA2ODU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENXZWJTZXJ2aWNlVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MDggICAxNDU1Mjkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlRlc3RJbmZvOwotCi1wdWJsaWMgY2xhc3MgR1NUQ1dlYlNlcnZpY2VUZXN0ZXIgaW1wbGVtZW50cyBJV2ViU2VydmljZVRlc3RlciAgewotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2VuZXJhdGUoVGVzdEluZm8gdGVzdEluZm8pewotICAgIFZlY3RvciBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLQljb21tYW5kcy5hZGQobmV3IEFkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQodGVzdEluZm8pKTsKLQljb21tYW5kcy5hZGQobmV3IEdTVENHZW5lcmF0ZUNvbW1hbmQodGVzdEluZm8pKTsKLQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsKLSAgfQotICAKLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBsYXVuY2goVGVzdEluZm8gdGVzdEluZm8pewotCVZlY3RvciBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLQlpZiAodGVzdEluZm8uZ2V0UnVuVGVzdENsaWVudCgpKSB7Ci0JCWNvbW1hbmRzLmFkZChuZXcgR1NUQ0xhdW5jaENvbW1hbmQodGVzdEluZm8pKTsKLQl9Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7CQotICB9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMDBkYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnVkZGkuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIHByaXZhdGUgc3RhdGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgaW5zdGFuY2VfOwotCi0gIHByaXZhdGUgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSgpIHsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIFdlYlNlcnZpY2VDbGllbnRUeXBlUmVnaXN0cnkgb2JqZWN0LgotICAqLwotICBwdWJsaWMgc3RhdGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCkgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByaXZhdGVVRERJUmVnaXN0cnlUeXBlIik7Ci0KLSAgICB0cnkgewotICAgICAgT2JqZWN0IGNvbmZpZ0VsZW1lbnQgPSAoKGNvbmZpZy5sZW5ndGggPiAwKSA/IGNvbmZpZ1swXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpIDogbnVsbCk7Ci0gICAgICBpZihjb25maWdFbGVtZW50ICE9IG51bGwgJiYgY29uZmlnRWxlbWVudCBpbnN0YW5jZW9mIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKSAKLSAgICAgICAgcmV0dXJuIChQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSljb25maWdFbGVtZW50OyAKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9QdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNmOTQyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9QdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMi4iOwotCi0gIHByaXZhdGUgc3RhdGljIFB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeSBpbnN0YW5jZV87Ci0gIHByaXZhdGUgVmVjdG9yIHR5cGVzXzsKLSAgcHJpdmF0ZSBWZWN0b3IgY29uZmlnRWxlbWVudHNfOwotCi0gIHByaXZhdGUgUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCkgewotICAgIHR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBjb25maWdFbGVtZW50c18gPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBpbml0KCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICogQHJldHVybiBBIHNpbmdsZXRvbiBXZWJTZXJ2aWNlQ2xpZW50VHlwZVJlZ2lzdHJ5IG9iamVjdC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KCkgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1YmxpY1VERElSZWdpc3RyeVR5cGUiKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB0cnkgewotICAgICAgICBPYmplY3QgY29uZmlnRWxlbWVudCA9IGNvbmZpZ1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotCi0gICAgICAgIGlmKCBjb25maWdFbGVtZW50IGluc3RhbmNlb2YgUHVibGljVURESVJlZ2lzdHJ5VHlwZSkgIHsKLSAgICAgICAgICB0eXBlc18uYWRkKGNvbmZpZ0VsZW1lbnQpOwotICAgICAgICAgIGNvbmZpZ0VsZW1lbnRzXy5hZGQoY29uZmlnW2ldKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkge30KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUHVibGljVURESVJlZ2lzdHJ5VHlwZVtdIGdldEFsbFB1YmxpY1VERElSZWdpc3RyeVR5cGVzKCkgewotICAgIFB1YmxpY1VERElSZWdpc3RyeVR5cGVbXSB0eXBlcyA9IG5ldyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlW3R5cGVzXy5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNfLnNpemUoKTsgaSsrKSB7Ci0gICAgICB0eXBlc1tpXSA9IChQdWJsaWNVRERJUmVnaXN0cnlUeXBlKXR5cGVzXy5lbGVtZW50QXQoaSk7Ci0gICAgfQotICAgIHJldHVybiB0eXBlczsKLSAgfQotCi0gIHB1YmxpYyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlIGdldFB1YmxpY1VERElSZWdpc3RyeVR5cGVCeUlEKFN0cmluZyBpZCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnRWxlbWVudHNfLnNpemUoKTsgaSsrKSB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgYyA9IChJQ29uZmlndXJhdGlvbkVsZW1lbnQpY29uZmlnRWxlbWVudHNfLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChjLmdldEF0dHJpYnV0ZSgiaWQiKS5lcXVhbHMoaWQpKQotICAgICAgICByZXR1cm4gKFB1YmxpY1VERElSZWdpc3RyeVR5cGUpdHlwZXNfLmVsZW1lbnRBdChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFB1YmxpY1VERElSZWdpc3RyeVR5cGVJREJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNfLnNpemUoKTsgaSsrKSB7Ci0gICAgICBQdWJsaWNVRERJUmVnaXN0cnlUeXBlIHR5cGUgPSAoUHVibGljVURESVJlZ2lzdHJ5VHlwZSl0eXBlc18uZWxlbWVudEF0KGkpOwotICAgICAgaWYgKHR5cGUuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKLSAgICAgICAgcmV0dXJuICgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KWNvbmZpZ0VsZW1lbnRzXy5lbGVtZW50QXQoaSkpLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzkyODZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1J1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMyNyAgIDEzMTYwNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNzE3ICAgMTUwNTc3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA2MDcyNiAgIDE1MDg2NSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNzI2ICAgMTUwODY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA3MjgJICAxNTE3MjMgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDgwMiAgIDE0ODczMSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDcxMTI5CSAgMjA2MDgwIHppbmFAY2EuaWJtLmNvbQktIFppbmEgTW9zdGFmaWEgU2VydmljZSBEZXBsb3ltZW50IENvbmZpZyBEaWFsb2cgZ3JvdXAgbmFtZSB0cnVuY2F0ZWQgaW4gTkwgVGVzdGluZwotICogMjAwNzExMjkJICAyMDU1ODMgemluYUBjYS5pYm0uY29tCS0gWmluYSBNb3N0YWZpYSBTZWxlY3RlZCBTZXJ2ZXIgb3IgU2VydmVyIFR5cGUgaXMgbm90IGhpZ2hsaWdodGVkIGluIFNlcnZpY2UgRGVwLkNvbmZpZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyVUlDb3JlOwotCi1wdWJsaWMgY2xhc3MgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIERpYWxvZyB7Ci0KLQlwcml2YXRlIFNoZWxsIHRoaXNTaGVsbDsKLQlwcml2YXRlIFRleHQgbWVzc2FnZUJhbm5lcl87Ci0JcHJpdmF0ZSBDb21wb3NpdGUgcHJpbWFyeUdyb3VwXzsKLQlwcml2YXRlIEdyb3VwIHJ1bnRpbWVzR3JvdXBfOwotCXByaXZhdGUgR3JvdXAgc2VydmVyc0dyb3VwXzsKLQlwcml2YXRlIFRyZWUgcnVudGltZXNMaXN0XzsKLQlwcml2YXRlIFRyZWUgc2VydmVyTGlzdF87Ci0JcHJpdmF0ZSBCdXR0b24gdmlld1NlbGVjdGlvbkJ5UnVudGltZUJ1dHRvbl87Ci0JcHJpdmF0ZSBCdXR0b24gdmlld1NlbGVjdGlvbkJ5U2VydmVyQnV0dG9uXzsKLQlwcml2YXRlIEJ1dHRvbiB2aWV3U2VsZWN0aW9uQnlFeHBsb3JlQnV0dG9uXzsKLQlwcml2YXRlIElMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXJfOwotCXByaXZhdGUgSW1hZ2Ugc2VydmVyVHlwZXNJY29uOwotCXByaXZhdGUgSW1hZ2UgZXhpc3RpbmdTZXJ2ZXJzSWNvbjsKLQotCS8qCi0JICogQ09OVEVYVF9JRCBQV1JTMDAwMSBmb3IgdGhlIHNlbGVjdGlvbiBvZiBydW50aW1lLCBzZXJ2ZXIgYW5kIHByb2plY3QgY29tYmluYXRpb24KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfRElBTE9HID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBXUlMwMDAxIjsKLQkvKiBDT05URVhUX0lEIFBXUlMwMDAyIGZvciB0aGUgcnVudGltZSBzZWxlY3Rpb24gb24gaW4gdGhlIGRhaWxvZyAqLwotCXByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19MSVNUX1JVTlRJTUVTID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBXUlMwMDAyIjsKLQkvKiBDT05URVhUX0lEIFBXUlMwMDAzIGZvciB0aGUgc2VydmVyIHNlbGVjdGlvbiBpbiB0aGUgZGlhbG9nICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1JTX0xJU1RfU0VSVkVSUyA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QV1JTMDAwMyI7Ci0JLyoKLQkgKiBDT05URVhUX0lEIFBXUlMwMDA0IGZvciB0aGUgRUpCIFByb2plY3QgY29tYm8gYm94IG9mIHRoZSBydW50aW1lIHNlbGVjdGlvbiBkaWFsb2cKLQkgKi8KLQkvLyAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1JTX0VKQl9QUk9KRUNUID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQKLQkvLyArICIuUFdSUzAwMDQiOwotCS8qCi0JICogQ09OVEVYVF9JRCBQV1JTMDAwNSBmb3IgdGhlIHJ1bnRpbWUgdmlldyByYWRpbyBidXR0b24gb2YgdGhlIHJ1bnRpbWUgc2VsZWN0aW9uIGRpYWxvZwotCSAqLwotCXByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19SQURJT19SVU5USU1FID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBXUlMwMDA1IjsKLQkvKgotCSAqIENPTlRFWFRfSUQgUFdSUzAwMDYgZm9yIHRoZSBzZXJ2ZXIgdmlldyByYWRpbyBidXR0b24gb2YgdGhlIHJ1bnRpbWUgc2VsZWN0aW9uIGRpYWxvZwotCSAqLwotCXByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19SQURJT19TRVJWRVIgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFdSUzAwMDYiOwotCS8qCi0JICogQ09OVEVYVF9JRCBQV1JTMDAwNyBmb3IgdGhlIGV4cGxvcmUgdmlldyByYWRpbyBidXR0b24gb2YgdGhlIHJ1bnRpbWUgc2VsZWN0aW9uIGRpYWxvZwotCSAqLwotCXByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19SQURJT19FWFBMT1JFID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBXUlMwMDA3IjsKLQlwcml2YXRlIEhhc2h0YWJsZTxTdHJpbmcsIFN0cmluZz4gc2VydmVyTGFiZWxzXzsKLQlwcml2YXRlIEhhc2h0YWJsZSA8U3RyaW5nLCBJU2VydmVyPmV4aXN0aW5nU2VydmVyc1RhYmxlXzsKLQlwcml2YXRlIFN0cmluZyBkZWZhdWx0U2VydmVyXzsKLQlwcml2YXRlIFN0cmluZyBkZWZhdWx0UnVudGltZV87Ci0JcHJpdmF0ZSBTdHJpbmcgdHlwZUlkXzsKLQotCXByaXZhdGUgUnVudGltZURlc2NyaXB0b3Igc2VsZWN0ZWRSdW50aW1lXzsKLQotCXByaXZhdGUgSVNlcnZlciBzZWxlY3RlZFNlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgc2VsZWN0ZWRTZXJ2ZXJMYWJlbF87Ci0JcHJpdmF0ZSBTdHJpbmcgc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfOwotCXByaXZhdGUgYm9vbGVhbiBpc0V4aXN0aW5nU2VydmVyXzsKLQlwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVPbl8gPSBmYWxzZTsKLQlwcml2YXRlIGJ5dGUgc2VsZWN0aW9uTW9kZV87Ci0JcHJpdmF0ZSBmaW5hbCBieXRlIE1PREVfU0VSVklDRSA9IChieXRlKSAwOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9UWVBFU19JQ09OID0gImljb25zL3NlcnZlcnMvc2VydmVyc19vYmouZ2lmIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBFWElTVElOR19TRVJWRVJTX0lDT04gPSAiaWNvbnMvc2VydmVycy9leGlzdGluZ19zZXJ2ZXJfb2JqLmdpZiI7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJRF87Ci0KLQlwcml2YXRlIGJvb2xlYW4gc2VsZWN0U2VydmVyRmlyc3RfID0gZmFsc2U7Ci0KLQlwdWJsaWMgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZyhTaGVsbCBzaGVsbCwgYnl0ZSBtb2RlLCBUeXBlUnVudGltZVNlcnZlciBpZHMsIFN0cmluZyBqMmVlVmVyc2lvbikgewotCQlzdXBlcihzaGVsbCk7Ci0JCXNlbGVjdGlvbk1vZGVfID0gbW9kZTsKLQkJdHlwZUlkXyA9IGlkcy5nZXRUeXBlSWQoKTsKLQkJZGVmYXVsdFJ1bnRpbWVfID0gaWRzLmdldFJ1bnRpbWVJZCgpOwotCQlkZWZhdWx0U2VydmVyXyA9IGlkcy5nZXRTZXJ2ZXJJZCgpOwotCQlzZXJ2ZXJJbnN0YW5jZUlEXyA9IGlkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JCXNldElzRXhpc3RpbmdTZXJ2ZXIoaWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsKTsKLQkJc2VydmVyTGFiZWxzXyA9IG5ldyBIYXNodGFibGU8U3RyaW5nLFN0cmluZz4oKTsKLQkJZXhpc3RpbmdTZXJ2ZXJzVGFibGVfID0gbmV3IEhhc2h0YWJsZTxTdHJpbmcsIElTZXJ2ZXI+KCk7Ci0JCWxhYmVsUHJvdmlkZXJfID0gU2VydmVyVUlDb3JlLmdldExhYmVsUHJvdmlkZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3RTZXJ2ZXJGaXJzdChib29sZWFuIHNlbGVjdFNlcnZlckZpcnN0KSB7Ci0JCXNlbGVjdFNlcnZlckZpcnN0XyA9IHNlbGVjdFNlcnZlckZpcnN0OwotCX0KLQotCXByb3RlY3RlZCBQb2ludCBnZXRJbml0aWFsU2l6ZSgpCi0JewotCQlyZXR1cm4gdGhpcy5nZXRTaGVsbCgpLmNvbXB1dGVTaXplKDU1MCwgU1dULkRFRkFVTFQsIHRydWUpOwotCX0KLQotCXB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRUeXBlUnVudGltZVNlcnZlcigpIHsKLQkJVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0KLQkJaWRzLnNldFR5cGVJZCh0eXBlSWRfKTsKLQkJaWYgKHNlbGVjdGVkUnVudGltZV8gIT0gbnVsbCkKLQkJCWlkcy5zZXRSdW50aW1lSWQoc2VsZWN0ZWRSdW50aW1lXy5nZXRJZCgpKTsKLQotCQlpZiggc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfID09IG51bGwgKQotCQl7Ci0JCQlpZHMuc2V0U2VydmVySWQoIGRlZmF1bHRTZXJ2ZXJfICk7Ci0JCQlpZHMuc2V0U2VydmVySW5zdGFuY2VJZCggc2VydmVySW5zdGFuY2VJRF8gKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWlkcy5zZXRTZXJ2ZXJJZChzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8pOwotCi0JCQlpZiAoaXNFeGlzdGluZ1NlcnZlcl8gJiYgc2VsZWN0ZWRTZXJ2ZXJfICE9IG51bGwpIAotCQkJewotCQkJCWlkcy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlbGVjdGVkU2VydmVyXy5nZXRJZCgpKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBpZHM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGdldElzRXhpc3RpbmdTZXJ2ZXIoKSB7Ci0JCXJldHVybiBpc0V4aXN0aW5nU2VydmVyXzsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0SXNFeGlzdGluZ1NlcnZlcihib29sZWFuIGlzRXhpc3RpbmcpIHsKLQkJaXNFeGlzdGluZ1NlcnZlcl8gPSBpc0V4aXN0aW5nOwotCX0KLQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIGNvbXAgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOyAgCi0JCWNvbXAucGFjaygpOyAKLQotCQlpZiAoc2VsZWN0U2VydmVyRmlyc3RfKSB7Ci0JCQl2aWV3U2VsZWN0aW9uQnlTZXJ2ZXJCdXR0b25fLnNldFNlbGVjdGlvbih0cnVlKTsgIAotCQkJaGFuZGxlU2VydmVyVmlld1NlbGVjdGlvbkV2ZW50KCk7Ci0JCX0KLQkJZWxzZQotCQkJdmlld1NlbGVjdGlvbkJ5UnVudGltZUJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOwotCi0JCXJldHVybiBjb21wOwotCX0gCi0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRTaGVsbFN0eWxlKGludCBuZXdTaGVsbFN0eWxlKQotCXsKLQkJc3VwZXIuc2V0U2hlbGxTdHlsZSggbmV3U2hlbGxTdHlsZSB8IFNXVC5SRVNJWkUgKTsgIAotCX0KLQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQl2YWxpZGF0ZU9uXyA9IGZhbHNlOwotCQl0aGlzU2hlbGwgPSBwYXJlbnQuZ2V0U2hlbGwoKTsKLQkJaWYgKHRoaXNTaGVsbCA9PSBudWxsKSB7Ci0JCQl0aGlzU2hlbGwgPSBjcmVhdGVTaGVsbCgpOwotCQl9Ci0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0KLQkJVUlVdGlscyB1aVV0aWxzID0gbmV3IFVJVXRpbHMoV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQpOwotCQkvLyBXaW5kb3cgdGl0bGUKLQkJaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkKLQkJCXRoaXNTaGVsbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1JVTlRJTUVfU0VMRUNUSU9OKTsKLQkJZWxzZQotCQkJdGhpc1NoZWxsLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfQ0xJRU5UX1JVTlRJTUVfU0VMRUNUSU9OKTsKLQkJSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotCQloZWxwU3lzdGVtLnNldEhlbHAodGhpc1NoZWxsLCBJTkZPUE9QX1BXUlNfRElBTE9HKTsKLQotCQkvLyBEaWFsb2cgZGVzY3JpcHRpb24gYmFubmVyCi0JCW1lc3NhZ2VCYW5uZXJfID0gbmV3IFRleHQoY29tcG9zaXRlLCBTV1QuUkVBRF9PTkxZIHwgU1dULldSQVApOwotCQltZXNzYWdlQmFubmVyXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfUlVOVElNRV9TRUxFQ1RJT04gKyAiXG4iICsgIiAgICAgICIpOyAvLyByZXNlcnZlcyBhIHNlY29uZCBsaW5lIGZvciBtZXNzYWdlIGRpc3BsYXkKLQkJbWVzc2FnZUJhbm5lcl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19SVU5USU1FX1NFTEVDVElPTik7Ci0KLQkJLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQkJbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkhPUklaT05UQUwpOwotCQkvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCQkvLyBTZWxlY3Rpb24KLQkJdGhpc1NoZWxsLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfUEFHRSk7Ci0KLQkJU3RyaW5nIGdyb3VwTmFtZSA9KHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgPyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VMRUNUSU9OX1ZJRVdfVElUTEU6Ci0JCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1NFTEVDVElPTl9WSUVXX1RJVExFOwotCQlHcm91cCB2aWV3U2VsZWN0aW9uR3JvdXBfID0gdWlVdGlscy5jcmVhdGVHcm91cChjb21wb3NpdGUsIGdyb3VwTmFtZSwgbnVsbCwgbnVsbCk7Ci0KLQkJQ29tcG9zaXRlIHZpZXdTZWxlY3Rpb25Db21wXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKHZpZXdTZWxlY3Rpb25Hcm91cF8sIDEpOwotCQl2aWV3U2VsZWN0aW9uQnlTZXJ2ZXJCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbih2aWV3U2VsZWN0aW9uQ29tcF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRUxFQ1RJT05fVklFV19TRVJWRVIsIAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfUkFESU9fU0VSVkVSLCBJTkZPUE9QX1BXUlNfUkFESU9fU0VSVkVSKTsKLQkJdmlld1NlbGVjdGlvbkJ5U2VydmVyQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlciAoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJaWYgKCF2YWxpZGF0ZU9uXykJICAgICAgcmV0dXJuOwotCQkJCWVuYWJsZU9LQnV0dG9uKCk7Ci0JCQkJaGFuZGxlU2VydmVyVmlld1NlbGVjdGlvbkV2ZW50KCk7Ci0JCQl9CQotCQl9KTsKLQotCQl2aWV3U2VsZWN0aW9uQnlSdW50aW1lQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUmFkaW9CdXR0b24odmlld1NlbGVjdGlvbkNvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VMRUNUSU9OX1ZJRVdfUlVOVElNRSwKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1JBRElPX1JVTlRJTUUsIElORk9QT1BfUFdSU19SQURJT19SVU5USU1FKTsKLQkJdmlld1NlbGVjdGlvbkJ5UnVudGltZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJaWYgKCF2YWxpZGF0ZU9uXykJICAgICAgcmV0dXJuOwotCQkJCWVuYWJsZU9LQnV0dG9uKCk7Ci0JCQkJaGFuZGxlUnVudGltZVZpZXdTZWxlY3Rpb25FdmVudCgpOwotCQkJfQotCQl9KTsKLQotCQl2aWV3U2VsZWN0aW9uQnlFeHBsb3JlQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUmFkaW9CdXR0b24odmlld1NlbGVjdGlvbkNvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VMRUNUSU9OX1ZJRVdfRVhQTE9SRSwKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1JBRElPX0VYUExPUkUsIElORk9QT1BfUFdSU19SQURJT19FWFBMT1JFKTsKLQkJdmlld1NlbGVjdGlvbkJ5RXhwbG9yZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJaWYgKCF2YWxpZGF0ZU9uXykJICAgICAgcmV0dXJuOwotCQkJCWVuYWJsZU9LQnV0dG9uKCk7Ci0JCQkJaGFuZGxlRXhwbG9yZVZpZXdTZWxlY3Rpb25FdmVudCgpOwotCQkJCXN1cGVyLndpZGdldFNlbGVjdGVkKGUpOwotCQkJfQotCQl9KTsKLQotCQlwcmltYXJ5R3JvdXBfID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoY29tcG9zaXRlLCAxKTsKLQkJcnVudGltZXNHcm91cF8gPSB1aVV0aWxzLmNyZWF0ZUdyb3VwKCBwcmltYXJ5R3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfUlVOVElNRVNfTElTVCwgCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19MSVNUX1JVTlRJTUVTLCBJTkZPUE9QX1BXUlNfTElTVF9SVU5USU1FUyk7Ci0JCXJ1bnRpbWVzR3JvdXBfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkZJTExfVkVSVElDQUwpKTsKLQkJcnVudGltZXNMaXN0XyA9IHVpVXRpbHMuY3JlYXRlVHJlZShydW50aW1lc0dyb3VwXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19MSVNUX1JVTlRJTUVTLCAKLQkJCQlJTkZPUE9QX1BXUlNfTElTVF9SVU5USU1FUywgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotCQlydW50aW1lc0xpc3RfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWlmICghdmFsaWRhdGVPbl8pCSAgICAgIHJldHVybjsKLQkJCQllbmFibGVPS0J1dHRvbigpOwotCQkJCVRyZWVJdGVtW10gcnVudGltZVNlbCA9IHJ1bnRpbWVzTGlzdF8uZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJcHJvY2Vzc1J1bnRpbWVMaXN0U2VsZWN0aW9uKHJ1bnRpbWVTZWxbMF0uZ2V0VGV4dCgpKTsKLQkJCQl2YWxpZGF0ZVNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJCX0KLQkJfSk7Ci0KLQkJLy8gIFNlcnZlciBsYWJlbHMgY29udHJvbAotCQlzZXJ2ZXJzR3JvdXBfID0gdWlVdGlscy5jcmVhdGVHcm91cChwcmltYXJ5R3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVkVSU19MSVNULCAKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX0xJU1RfU0VSVkVSUywgbnVsbCk7Ci0JCXNlcnZlcnNHcm91cF8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMIHwgR3JpZERhdGEuRklMTF9WRVJUSUNBTCkpOwotCQlzZXJ2ZXJMaXN0XyA9IHVpVXRpbHMuY3JlYXRlVHJlZShzZXJ2ZXJzR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX0xJU1RfU0VSVkVSUywgSU5GT1BPUF9QV1JTX0xJU1RfU0VSVkVSUywKLQkJCQlTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0JCXNlcnZlckxpc3RfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkZJTExfVkVSVElDQUwpKTsKLQkJc2VydmVyTGlzdF8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJaWYgKCF2YWxpZGF0ZU9uXykJICAgICAgcmV0dXJuOwotCQkJCWVuYWJsZU9LQnV0dG9uKCk7Ci0JCQkJcHJvY2Vzc1NlcnZlckxpc3RTZWxlY3Rpb24oKTsKLQkJCQl2YWxpZGF0ZVNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJCX0JCi0JCX0pOwotCi0JCVNlcnZlcnNMaXN0IHNlcnZlckxpc3QgPSBuZXcgU2VydmVyc0xpc3QoKTsKLQkJc2VydmVyTGlzdC5zZXRTZXJ2ZXJUcmVlSXRlbXMoc2VydmVyTGlzdF8pOwotCi0JCXNldFJ1bnRpbWVzR3JvdXAoKTsKLQkJLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQkJbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkhPUklaT05UQUwpOwotCQl2YWxpZGF0ZU9uXyA9IHRydWU7Ci0JCW9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotCQlyZXR1cm4gY29tcG9zaXRlOwotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIHZhbGlkYXRlU2VydmVyUnVudGltZVNlbGVjdGlvbigpIHsKLQotCQlpZiAoc2VsZWN0aW9uTW9kZV8gPT0gTU9ERV9TRVJWSUNFKSB7Ci0JCQlpZiAoc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfICE9IG51bGwgJiYgc2VsZWN0ZWRSdW50aW1lXyAhPSBudWxsKSAKLQkJCXsKLQotCQkJCWlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5pc1NlcnZlclJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXywgc2VsZWN0ZWRSdW50aW1lXy5nZXRJZCgpLAotCQkJCQkJdHlwZUlkXykpCi0JCQkJewotCQkJCQlzZXRPS1N0YXR1c01lc3NhZ2UoKTsKLQkJCQl9IGVsc2UKLQkJCQl7Ci0JCQkJCVN0cmluZyBzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8pOwotCQkJCQlTdHJpbmcgcnVudGltZUxhYmVsID0gc2VsZWN0ZWRSdW50aW1lXy5nZXRMYWJlbCgpOwotCQkJCQlzZXRFUlJPUlN0YXR1c01lc3NhZ2UoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NSVF9TRUxFQ1RJT05TLCBuZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwKLQkJCQkJCQlydW50aW1lTGFiZWwgfSkpOwotCQkJCQkvLyBGb3VuZCBhbiBlcnJvciAtIHNvIHJldHVybi4KLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQotCQkJaWYgKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyAhPSBudWxsICYmIHNlbGVjdGVkUnVudGltZV8gIT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgY2xpZW50SWQgPSB0eXBlSWRfOwotCQkJCWlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5pc1NlcnZlckNsaWVudFJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXywgc2VsZWN0ZWRSdW50aW1lXwotCQkJCQkJLmdldElkKCksIGNsaWVudElkKSkKLQkJCQl7Ci0JCQkJCXNldE9LU3RhdHVzTWVzc2FnZSgpOwotCQkJCX0gZWxzZQotCQkJCXsKLQkJCQkJU3RyaW5nIHNlcnZlckxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyk7Ci0JCQkJCVN0cmluZyBydW50aW1lTGFiZWwgPSBzZWxlY3RlZFJ1bnRpbWVfLmdldExhYmVsKCk7Ci0JCQkJCXNldEVSUk9SU3RhdHVzTWVzc2FnZShOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlMsIG5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLAotCQkJCQkJCXJ1bnRpbWVMYWJlbCB9KSk7Ci0JCQkJCS8vIEZvdW5kIGFuIGVycm9yIC0gc28gcmV0dXJuLgotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8vIERpc2FibGUgT0sgYnV0dG9uIGlmIHRoZSBydW50aW1lIHNlbGVjdGlvbiBpcyBpbnZhbGlkCi0JCVRyZWVJdGVtW10gcnVudGltZVNlbCA9IHJ1bnRpbWVzTGlzdF8uZ2V0U2VsZWN0aW9uKCk7Ci0JCWlmIChydW50aW1lU2VsID09IG51bGwgfHwgcnVudGltZVNlbC5sZW5ndGggPD0gMCB8fCBydW50aW1lU2VsWzBdLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQlkaXNhYmxlT0tCdXR0b24oKTsKLQkJfQotCQkvLyBEaXNhYmxlIE9LIGJ1dHRvbiBpZiBzZXJ2ZXIgc2VsZWN0aW9uIGlzIGludmFsaWQKLQkJVHJlZUl0ZW1bXSBzZXJ2ZXJTZWwgPSBzZXJ2ZXJMaXN0Xy5nZXRTZWxlY3Rpb24oKTsKLQkJU3RyaW5nIGN1cnJlbnRTZWxlY3Rpb24gPSAoc2VydmVyU2VsICE9IG51bGwgJiYgc2VydmVyU2VsLmxlbmd0aCA+IDApID8gc2VydmVyU2VsWzBdLmdldFRleHQoKSA6ICIiOwotCQlpZiAoc2VydmVyU2VsID09IG51bGwgfHwgY3VycmVudFNlbGVjdGlvbi5sZW5ndGgoKSA9PSAwKSB7Ci0JCQlkaXNhYmxlT0tCdXR0b24oKTsKLQkJfQotCQlpZiAoIXNlcnZlckxhYmVsc18uY29udGFpbnNLZXkoY3VycmVudFNlbGVjdGlvbikgfHwgIWV4aXN0aW5nU2VydmVyc1RhYmxlXy5jb250YWluc0tleShjdXJyZW50U2VsZWN0aW9uKSkgewotCQkJZGlzYWJsZU9LQnV0dG9uKCk7Ci0JCQlzZXRPS1N0YXR1c01lc3NhZ2UoKTsKLQkJfQotCQkvLyBEaXNhYmxlIE9LIGJ1dHRvbiBpZiBjYXRlZ29yeSBpcyBzZWxlY3RlZCByYXRoZXIgdGhhbiBhIHNlcnZlcgotCQlpZiAoc2VydmVyU2VsLmxlbmd0aCA+IDAgJiYgc2VydmVyU2VsWzBdLmdldEl0ZW1Db3VudCgpIT0wKSB7Ci0JCQlkaXNhYmxlT0tCdXR0b24oKTsKLQkJfQotCQllbHNlIHsKLQkJCWVuYWJsZU9LQnV0dG9uKCk7Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRPS1N0YXR1c01lc3NhZ2UoKSB7Ci0JCW1lc3NhZ2VCYW5uZXJfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19SVU5USU1FX1NFTEVDVElPTik7Ci0JCW1lc3NhZ2VCYW5uZXJfLnNldEZvcmVncm91bmQoRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0JMQUNLKSk7Ci0JCWVuYWJsZU9LQnV0dG9uKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldEVSUk9SU3RhdHVzTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkgewotCQltZXNzYWdlQmFubmVyXy5zZXRUZXh0KG1lc3NhZ2UpOwotCQltZXNzYWdlQmFubmVyXy5zZXRGb3JlZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9SRUQpKTsKLQkJZGlzYWJsZU9LQnV0dG9uKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRpc2FibGVPS0J1dHRvbigpIHsKLQkJaWYgKGdldEJ1dHRvbigwKSAhPSBudWxsKQotCQkJZ2V0QnV0dG9uKDApLnNldEVuYWJsZWQoZmFsc2UpOwotCX0KLQotCXByaXZhdGUgdm9pZCBlbmFibGVPS0J1dHRvbigpIHsKLQkJaWYgKGdldEJ1dHRvbigwKSAhPSBudWxsKQotCQkJZ2V0QnV0dG9uKDApLnNldEVuYWJsZWQodHJ1ZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQlpZiAobGFiZWxQcm92aWRlcl8hPW51bGwpCi0JCQlsYWJlbFByb3ZpZGVyXy5kaXNwb3NlKCk7Ci0JCWlmIChleGlzdGluZ1NlcnZlcnNJY29uIT1udWxsKQotCQkJZXhpc3RpbmdTZXJ2ZXJzSWNvbi5kaXNwb3NlKCk7Ci0JCWlmIChzZXJ2ZXJUeXBlc0ljb24hPW51bGwpCi0JCQlzZXJ2ZXJUeXBlc0ljb24uZGlzcG9zZSgpOwotCQlzZXRSZXR1cm5Db2RlKE9LKTsKLQkJY2xvc2UoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjYW5jZWxQcmVzc2VkKCkgewotCQlpZiAobGFiZWxQcm92aWRlcl8hPW51bGwpCi0JCQlsYWJlbFByb3ZpZGVyXy5kaXNwb3NlKCk7Ci0JCWlmIChleGlzdGluZ1NlcnZlcnNJY29uIT1udWxsKQotCQkJZXhpc3RpbmdTZXJ2ZXJzSWNvbi5kaXNwb3NlKCk7Ci0JCWlmIChzZXJ2ZXJUeXBlc0ljb24hPW51bGwpCi0JCQlzZXJ2ZXJUeXBlc0ljb24uZGlzcG9zZSgpOwkKLQkJc2V0UmV0dXJuQ29kZShDQU5DRUwpOwotCQljbG9zZSgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBoYW5kbGVSdW50aW1lVmlld1NlbGVjdGlvbkV2ZW50KCkgewotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ2wubnVtQ29sdW1ucyA9IDE7Ci0JCWdsLm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCXByaW1hcnlHcm91cF8uc2V0TGF5b3V0KGdsKTsKLQkJcHJpbWFyeUdyb3VwXy5zZXRMYXlvdXREYXRhKGdkKTsKLQkJcnVudGltZXNHcm91cF8ubW92ZUFib3ZlKHNlcnZlcnNHcm91cF8pOwotCQlwcmltYXJ5R3JvdXBfLmxheW91dCgpOwotCi0JCS8vIFRPRE86IFNob3cgYWxsIHJ1bnRpbWVzLCBhbmQgb25seSBzZXJ2ZXJzIHN1cHBvcnRlZCBieSBjdXJyZW50IHR5cGUgaWQKLQl9Ci0KLQkvLyAKLQkvLyBDYWxsZWQgYnkgaGFuZGxlRXZlbnQoKSB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgdGhlIGxheW91dCB0byB2aWV3Ci0JLy8KLQlwdWJsaWMgdm9pZCBoYW5kbGVTZXJ2ZXJWaWV3U2VsZWN0aW9uRXZlbnQoKSB7Ci0JCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotCQlnbC5udW1Db2x1bW5zID0gMTsKLQkJZ2wubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJcHJpbWFyeUdyb3VwXy5zZXRMYXlvdXQoZ2wpOwotCQlwcmltYXJ5R3JvdXBfLnNldExheW91dERhdGEoZ2QpOwotCQlzZXJ2ZXJzR3JvdXBfLm1vdmVBYm92ZShydW50aW1lc0dyb3VwXyk7Ci0JCXByaW1hcnlHcm91cF8ubGF5b3V0KCk7Ci0KLQkJLy8gVE9ETzogU2hvdyBhbGwgc2VydmVycywgYW5kIG9ubHkgcnVudGltZXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IHR5cGUgaWQKLQl9Ci0KLQkvLyAKLQkvLyBDYWxsZWQgYnkgaGFuZGxlRXZlbnQoKSB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgdGhlIGxheW91dCB0byB2aWV3Ci0JLy8KLQlwcml2YXRlIHZvaWQgaGFuZGxlRXhwbG9yZVZpZXdTZWxlY3Rpb25FdmVudCgpIHsKLQkJR3JpZExheW91dCBnbDsKLQkJZ2wgPSAoR3JpZExheW91dCkgcHJpbWFyeUdyb3VwXy5nZXRMYXlvdXQoKTsKLQkJZ2wubnVtQ29sdW1ucyA9IDI7Ci0JCWdsLm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCXByaW1hcnlHcm91cF8uc2V0TGF5b3V0KGdsKTsKLQkJcHJpbWFyeUdyb3VwXy5zZXRMYXlvdXREYXRhKGdkKTsKLQkJcnVudGltZXNHcm91cF8ubW92ZUFib3ZlKHNlcnZlcnNHcm91cF8pOwotCQlwcmltYXJ5R3JvdXBfLmxheW91dCgpOwotCi0JCS8vIFRPRE86IFNob3cgYWxsIHNlcnZlcnMgYW5kIHJ1bnRpbWVzIGZyb20gdGhlIHR5cGUgaWQKLQotCX0KLQotCXByaXZhdGUgdm9pZCBwcm9jZXNzUnVudGltZUxpc3RTZWxlY3Rpb24oU3RyaW5nIHJ1bnRpbWVOYW1lKSB7Ci0KLQkJaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgewotCQkJc2VsZWN0ZWRSdW50aW1lXyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUxhYmVsKHJ1bnRpbWVOYW1lKTsKLQkJfQotCQllbHNlIHsKLQkJCXNlbGVjdGVkUnVudGltZV8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlMYWJlbChydW50aW1lTmFtZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc1NlcnZlckxpc3RTZWxlY3Rpb24oKSB7Ci0JCVN0cmluZyBjdXJyZW50U2VsZWN0aW9uOwotCQlUcmVlSXRlbVtdIHNlcnZlclNlbCA9IHNlcnZlckxpc3RfLmdldFNlbGVjdGlvbigpOwotCQlpZiAoc2VydmVyU2VsICE9IG51bGwgJiYgc2VydmVyU2VsLmxlbmd0aCA+IDApIHsKLQkJCWN1cnJlbnRTZWxlY3Rpb24gPSBzZXJ2ZXJTZWxbMF0uZ2V0VGV4dCgpOwotCQkJaWYgKHNlcnZlckxhYmVsc18uY29udGFpbnNLZXkoY3VycmVudFNlbGVjdGlvbikgfHwgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmNvbnRhaW5zS2V5KGN1cnJlbnRTZWxlY3Rpb24pKSB7Ci0JCQkJaWYgKGV4aXN0aW5nU2VydmVyc1RhYmxlXy5jb250YWluc0tleShjdXJyZW50U2VsZWN0aW9uKSkgewotCQkJCQlzZWxlY3RlZFNlcnZlcl8gPSAoSVNlcnZlcikgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmdldChjdXJyZW50U2VsZWN0aW9uKTsKLQkJCQkJc2VsZWN0ZWRTZXJ2ZXJMYWJlbF8gPSBjdXJyZW50U2VsZWN0aW9uOwotCQkJCQlzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8gPSBzZWxlY3RlZFNlcnZlcl8uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHNlcnZlckxhYmVsc18uY29udGFpbnNLZXkoY3VycmVudFNlbGVjdGlvbikpIHsKLQkJCQkJVHJlZUl0ZW0gcGFyZW50SXRlbSA9IHNlcnZlclNlbFswXS5nZXRQYXJlbnRJdGVtKCk7Ci0JCQkJCWlmIChwYXJlbnRJdGVtICE9IG51bGwgJiYgIXBhcmVudEl0ZW0uZ2V0VGV4dCgpLmVxdWFsc0lnbm9yZUNhc2UoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RSRUVfRVhJU1RJTkdfU0VSVkVSUykpIHsKLQkJCQkJCXNlbGVjdGVkU2VydmVyTGFiZWxfID0gY3VycmVudFNlbGVjdGlvbjsKLQkJCQkJCXNlbGVjdGVkU2VydmVyXyA9IG51bGw7Ci0JCQkJCQlzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8gPSAoU3RyaW5nKSBzZXJ2ZXJMYWJlbHNfLmdldChjdXJyZW50U2VsZWN0aW9uKTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCS8vIGNoZWNrIGlmIGlzRXhpc3RpbmdTZXJ2ZXIgb3IgbmV3IFNlcnZlclR5cGUKLQkJCQlUcmVlSXRlbSBwYXJlbnRJdGVtID0gc2VydmVyU2VsWzBdLmdldFBhcmVudEl0ZW0oKTsKLQkJCQlpZiAocGFyZW50SXRlbSAhPSBudWxsICYmIHBhcmVudEl0ZW0uZ2V0VGV4dCgpLmVxdWFsc0lnbm9yZUNhc2UoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RSRUVfRVhJU1RJTkdfU0VSVkVSUykpIHsKLQkJCQkJc2V0SXNFeGlzdGluZ1NlcnZlcih0cnVlKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCXNldElzRXhpc3RpbmdTZXJ2ZXIoZmFsc2UpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCXNlbGVjdGVkU2VydmVyXyA9IG51bGw7Ci0JCQkJc2VsZWN0ZWRTZXJ2ZXJMYWJlbF8gPSBudWxsOwotCQkJCXNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyA9IG51bGw7Ci0JCQkJc2V0SXNFeGlzdGluZ1NlcnZlcihmYWxzZSk7Ci0JCQkJcmV0dXJuOwotCQkJfSAgICAgIAotCQl9Ci0JfQotCi0vLwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcga2V5KSB7Ci0vLwlyZXR1cm4gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0TWVzc2FnZShrZXkpOwotLy8JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFJ1bnRpbWVzR3JvdXAoKSB7Ci0JCXJ1bnRpbWVzTGlzdF8ucmVtb3ZlQWxsKCk7Ci0JCVN0cmluZ1tdIHJ1bnRpbWVzID0gbnVsbDsKLQotCQlpZiAoc2VsZWN0aW9uTW9kZV8gPT0gTU9ERV9TRVJWSUNFKSB7Ci0JCQlydW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWRfKTsKLQkJfQotCQllbHNlIHsKLQkJCXJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZXNCeUNsaWVudFR5cGUodHlwZUlkXyk7Ci0JCX0KLQotCQkvL3NvcnQgdGhlIHJ1bnRpbWVzIGJhc2VkIG9uIHRoZSBydW50aW1lIG5hbWUgKGJ1ZyAxNTE3MjMpCi0JCUNvbXBhcmF0b3I8U3RyaW5nPiBjb21wYXJhdG9yID0gbmV3IFJ1bnRpbWVOYW1lQ29tcGFyYXRvcigpOwotCQlBcnJheXMuc29ydChydW50aW1lcywgY29tcGFyYXRvcik7Ci0KLQkJVHJlZUl0ZW1bXSBydW50aW1lTmFtZSA9IG5ldyBUcmVlSXRlbVtydW50aW1lcy5sZW5ndGhdOwotCi0JCWlmIChydW50aW1lcyAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIHJ1bnRpbWVMYWJlbCA9IGdldFJ1bnRpbWVMYWJlbChydW50aW1lc1tpXSk7Ci0JCQkJcnVudGltZU5hbWVbaV0gPSBuZXcgVHJlZUl0ZW0ocnVudGltZXNMaXN0XywgU1dULk5PTkUpOwotCQkJCXJ1bnRpbWVOYW1lW2ldLnNldFRleHQocnVudGltZUxhYmVsKTsKLQotCQkJCWlmIChydW50aW1lc1tpXS5lcXVhbHNJZ25vcmVDYXNlKGRlZmF1bHRSdW50aW1lXykpIHsKLQkJCQkJcnVudGltZXNMaXN0Xy5zZXRTZWxlY3Rpb24obmV3IFRyZWVJdGVtW10geyBydW50aW1lTmFtZVtpXX0pOwotCQkJCQlzZWxlY3RlZFJ1bnRpbWVfID0gZ2V0UnVudGltZShydW50aW1lc1tpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSAgCi0KLQlwcml2YXRlIGNsYXNzIFJ1bnRpbWVOYW1lQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IgPFN0cmluZz4KLQl7Ci0JCXB1YmxpYyBSdW50aW1lTmFtZUNvbXBhcmF0b3IoKQotCQl7CQkKLQkJfQotCQkvL0NvbXBhcmUgdG8gcnVudGltZSBJRCBzdHJpbmdzIGJ5IHRoZWlyIGxhYmVscy4gIFVzZWQgZm9yIHNvcnRpbmcuCi0JCXB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgaXRlbTEsIFN0cmluZyBpdGVtMikgewotCQkJdHJ5IHsKLQkJCQlTdHJpbmcgcnVudGltZTEgPSAoU3RyaW5nKWl0ZW0xOwotCQkJCVN0cmluZyBydW50aW1lMiA9IChTdHJpbmcpaXRlbTI7CQkKLQotCQkJCXJldHVybiBnZXRSdW50aW1lTGFiZWwocnVudGltZTEpLmNvbXBhcmVUb0lnbm9yZUNhc2UoZ2V0UnVudGltZUxhYmVsKHJ1bnRpbWUyKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQl7IC8vSnVzdCBpbiBjYXNlIG9mIGNsYXNzIGNhc3QgZXhjZXB0aW9uIG9yIE5QRS4gIHNob3VsZCBuZXZlciBoYXBwZW4KLQkJCX0JCQotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoU3RyaW5nIHR5cGUpIHsKLQkJcmV0dXJuIGdldFJ1bnRpbWUodHlwZSkuZ2V0TGFiZWwoKTsKLQl9Ci0KLQlwcml2YXRlIFJ1bnRpbWVEZXNjcmlwdG9yIGdldFJ1bnRpbWUoU3RyaW5nIHR5cGUpIHsKLQkJaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgewotCQkJcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHR5cGUpOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHR5cGUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogCi0JICogU2VydmVyc0xpc3QgY2xhc3MKLQkgKiAKLQkgKiBDbGFzcyB3aGljaCBlYXNpbHkgY3JlYXRlcyB0aGUgVHJlZSBzdHJ1Y3R1cmUgYW5kIGVudHJpZXMgZm9yIGV4aXN0aW5nIHNlcnZlcnMgYW5kIHNlcnZlciB0eXBlcwotCSAqLwotCXB1YmxpYyBjbGFzcyBTZXJ2ZXJzTGlzdCB7Ci0KLQkJcHJpdmF0ZSBUcmVlSXRlbVtdIGV4aXN0aW5nU2VydmVyc1RyZWU7Ci0JCWJvb2xlYW4gZXhpc3RpbmdTZXJ2ZXIgPSBmYWxzZTsKLQotCQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJUcmVlSXRlbXMoVHJlZSBzZXJ2ZXJzTGlzdCkgewotCQkJdGhpcy5zZXRFeGlzdGluZ1NlcnZlcnNUcmVlKHNlcnZlcnNMaXN0KTsKLQkJCXRoaXMuc2V0U2VydmVyVHlwZXNUcmVlKHNlcnZlcnNMaXN0KTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVyc1RyZWUoVHJlZSBzZXJ2ZXJMaXN0KSB7Ci0JCQlTdHJpbmdbXSBzZXJ2ZXJJZHMgPSB0aGlzLmdldEFsbEV4aXN0aW5nU2VydmVycygpOwotCQkJZXhpc3RpbmdTZXJ2ZXJzVHJlZSA9IG5ldyBUcmVlSXRlbVsxXTsKLQkJCVRyZWVJdGVtW10gZXhpc3RpbmdTZXJ2ZXJJdGVtcyA9IG5ldyBUcmVlSXRlbVtzZXJ2ZXJJZHMubGVuZ3RoXTsKLQkJCWV4aXN0aW5nU2VydmVyc1RyZWVbMF0gPSBuZXcgVHJlZUl0ZW0oc2VydmVyTGlzdCwgU1dULk5PTkUpOwotCQkJZXhpc3RpbmdTZXJ2ZXJzVHJlZVswXS5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9UUkVFX0VYSVNUSU5HX1NFUlZFUlMpOwotCQkJSW1hZ2VEZXNjcmlwdG9yIGlkID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKEVYSVNUSU5HX1NFUlZFUlNfSUNPTik7Ci0JCQlpZiAoaWQgIT0gbnVsbCkgewotCQkJCWV4aXN0aW5nU2VydmVyc0ljb24gPSBpZC5jcmVhdGVJbWFnZSgpOwotCQkJCWV4aXN0aW5nU2VydmVyc1RyZWVbMF0uc2V0SW1hZ2UoZXhpc3RpbmdTZXJ2ZXJzSWNvbik7Ci0JCQl9Ci0JCQlmb3IgKGludCBrID0gMDsgayA8IHNlcnZlcklkcy5sZW5ndGg7IGsrKykgewotCQkJCVN0cmluZyBzZXJ2ZXJJRCA9ICgoSVNlcnZlcikgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmdldChzZXJ2ZXJJZHNba10pKS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkJCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZSgoKElTZXJ2ZXIpIGV4aXN0aW5nU2VydmVyc1RhYmxlXy5nZXQoc2VydmVySWRzW2tdKSkuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotCQkJCWlmIChzZXJ2ZXJUeXBlICE9IG51bGwpIHsKLQkJCQkJZXhpc3RpbmdTZXJ2ZXJJdGVtc1trXSA9IG5ldyBUcmVlSXRlbShleGlzdGluZ1NlcnZlcnNUcmVlWzBdLCBTV1QuTk9ORSk7Ci0JCQkJCWV4aXN0aW5nU2VydmVySXRlbXNba10uc2V0VGV4dChzZXJ2ZXJJZHNba10pOwotCQkJCQlpZiAoc2VydmVySUQuZXF1YWxzSWdub3JlQ2FzZShkZWZhdWx0U2VydmVyXykgJiYgZ2V0SXNFeGlzdGluZ1NlcnZlcigpKSB7Ci0JCQkJCQlleGlzdGluZ1NlcnZlcnNUcmVlWzBdLnNldEV4cGFuZGVkKHRydWUpOwotCQkJCQkJc2VydmVyTGlzdC5zZXRTZWxlY3Rpb24obmV3IFRyZWVJdGVtW10geyBleGlzdGluZ1NlcnZlckl0ZW1zW2tdfSk7Ci0JCQkJCQlleGlzdGluZ1NlcnZlciA9IHRydWU7Ci0JCQkJCQlSdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nLnRoaXMuc2V0SXNFeGlzdGluZ1NlcnZlcih0cnVlKTsKLQkJCQkJCXNlbGVjdGVkU2VydmVyXyA9IChJU2VydmVyKSBleGlzdGluZ1NlcnZlcnNUYWJsZV8uZ2V0KHNlcnZlcklkc1trXSk7Ci0JCQkJCQlzZWxlY3RlZFNlcnZlckxhYmVsXyA9IHNlcnZlcklkc1trXTsKLQkJCQkJCXNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyA9IHNlbGVjdGVkU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkJCQkJfQotCQkJCQlleGlzdGluZ1NlcnZlckl0ZW1zW2tdLnNldEltYWdlKGxhYmVsUHJvdmlkZXJfLmdldEltYWdlKHNlcnZlclR5cGUpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJUeXBlc1RyZWUoVHJlZSBzZXJ2ZXJMaXN0KSB7Ci0KLQkJCVRyZWVJdGVtW10gc2VydmVyVHlwZXNUcmVlID0gbmV3IFRyZWVJdGVtWzFdOwotCQkJc2VydmVyVHlwZXNUcmVlWzBdID0gbmV3IFRyZWVJdGVtKHNlcnZlckxpc3QsIFNXVC5OT05FKTsKLQkJCXNlcnZlclR5cGVzVHJlZVswXS5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9UUkVFX1NFUlZFUl9UWVBFUyk7Ci0JCQlJbWFnZURlc2NyaXB0b3IgaWQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoU0VSVkVSX1RZUEVTX0lDT04pOwotCQkJaWYgKGlkICE9IG51bGwpIHsKLQkJCQlzZXJ2ZXJUeXBlc0ljb24gPSBpZC5jcmVhdGVJbWFnZSgpOwotCQkJCXNlcnZlclR5cGVzVHJlZVswXS5zZXRJbWFnZShzZXJ2ZXJUeXBlc0ljb24pOwotCQkJfQotCQkJSGFzaHRhYmxlIDxJU2VydmVyVHlwZSwgSVJ1bnRpbWVUeXBlPiBjYXRlZ29yaWVzXyA9IG5ldyBIYXNodGFibGU8SVNlcnZlclR5cGUsIElSdW50aW1lVHlwZT4oKTsKLQkJCUhhc2h0YWJsZSA8SVJ1bnRpbWVUeXBlLCBUcmVlSXRlbT5jYXRlZ29yeVRyZWVJdGVtID0gbmV3IEhhc2h0YWJsZTxJUnVudGltZVR5cGUsIFRyZWVJdGVtPigpOwotCQkJU3RyaW5nW10gc2VydmVySWRzID0gbnVsbDsKLQkJCS8vIHJtIFN0cmluZyB3c3QgPSB3c2UuZ2V0V2ViU2VydmljZVR5cGUoKTsKLQkJCWlmIChzZWxlY3Rpb25Nb2RlXyA9PSBNT0RFX1NFUlZJQ0UpIHsKLQkJCQlzZXJ2ZXJJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJGYWN0b3J5SWRzQnlTZXJ2aWNlVHlwZSh0eXBlSWRfKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNlcnZlcklkcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldEFsbENsaWVudFNlcnZlckZhY3RvcnlJZHMoKTsKLQkJCX0KLQkJCS8vIHJtIHNlcnZlcklkID0KLQkJCS8vIHdzc3J0UmVnaXN0cnkuZ2V0U2VydmVyRmFjdG9yeUlkc0J5VHlwZSh3c2UuZ2V0V2ViU2VydmljZVR5cGUoKSk7Ci0JCQlpZiAoc2VydmVySWRzID09IG51bGwpIHsKLQkJCQlzZXJ2ZXJJZHMgPSBnZXRBbGxTZXJ2ZXJUeXBlcygpOwotCQkJfQotCQkJVHJlZUl0ZW1bXSBwYXJlbnQgPSBuZXcgVHJlZUl0ZW1bc2VydmVySWRzLmxlbmd0aF07Ci0JCQlUcmVlSXRlbVtdIGl0ZW0gPSBuZXcgVHJlZUl0ZW1bc2VydmVySWRzLmxlbmd0aF07Ci0JCQlpZiAoc2VydmVySWRzICE9IG51bGwpIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcklkcy5sZW5ndGg7IGkrKykgewotCQkJCQlTdHJpbmcgc2VydmVyID0gU2VydmVyVXRpbHMuZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJMYWJlbEZvcklkKHNlcnZlcklkc1tpXSk7Ci0JCQkJCWlmIChzZXJ2ZXIgIT0gbnVsbCkgewotCQkJCQkJUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy50aGlzLnNlcnZlckxhYmVsc18ucHV0KHNlcnZlciwgc2VydmVySWRzW2ldKTsKLQkJCQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlcklkc1tpXSk7Ci0JCQkJCQlJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQkJCQlpZiAoIWNhdGVnb3JpZXNfLmNvbnRhaW5zS2V5KHNlcnZlclR5cGUpICYmIHJ1bnRpbWVUeXBlICE9IG51bGwpIHsKLQkJCQkJCQljYXRlZ29yaWVzXy5wdXQoc2VydmVyVHlwZSwgcnVudGltZVR5cGUpOwotCQkJCQkJCWlmIChjYXRlZ29yeVRyZWVJdGVtLmdldChydW50aW1lVHlwZSkgPT0gbnVsbCkgewotCQkJCQkJCQlTdHJpbmcgY2F0ZWdvcnlUZXh0ID0gcnVudGltZVR5cGUuZ2V0TmFtZSgpOwotCQkJCQkJCQlJbWFnZSBjYXRlZ29yeUltYWdlID0gbGFiZWxQcm92aWRlcl8uZ2V0SW1hZ2UocnVudGltZVR5cGUpOwotCQkJCQkJCQlwYXJlbnRbaV0gPSBuZXcgVHJlZUl0ZW0oc2VydmVyVHlwZXNUcmVlWzBdLCBTV1QuTk9ORSk7Ci0JCQkJCQkJCXBhcmVudFtpXS5zZXRUZXh0KGNhdGVnb3J5VGV4dCk7Ci0JCQkJCQkJCXBhcmVudFtpXS5zZXRJbWFnZShjYXRlZ29yeUltYWdlKTsKLQkJCQkJCQkJY2F0ZWdvcnlUcmVlSXRlbS5wdXQocnVudGltZVR5cGUsIHBhcmVudFtpXSk7Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UgewotCQkJCQkJCQlwYXJlbnRbaV0gPSAoVHJlZUl0ZW0pIGNhdGVnb3J5VHJlZUl0ZW0uZ2V0KHJ1bnRpbWVUeXBlKTsKLQkJCQkJCQl9Ci0JCQkJCQkJU3RyaW5nIGZhY3RvcnlUZXh0ID0gc2VydmVyVHlwZS5nZXROYW1lKCk7Ci0JCQkJCQkJSW1hZ2UgZmFjdG9yeUltYWdlID0gbGFiZWxQcm92aWRlcl8uZ2V0SW1hZ2Uoc2VydmVyVHlwZSk7Ci0JCQkJCQkJaXRlbVtpXSA9IG5ldyBUcmVlSXRlbShwYXJlbnRbaV0sIFNXVC5OT05FKTsKLQkJCQkJCQlpdGVtW2ldLnNldFRleHQoZmFjdG9yeVRleHQpOwotCQkJCQkJCWl0ZW1baV0uc2V0SW1hZ2UoZmFjdG9yeUltYWdlKTsKLQkJCQkJCQlpdGVtW2ldLnNldERhdGEoc2VydmVyVHlwZSk7Ci0JCQkJCQkJaWYgKHNlcnZlcklkc1tpXS5lcXVhbHMoZGVmYXVsdFNlcnZlcl8pICYmICFleGlzdGluZ1NlcnZlcikgewotCQkJCQkJCQlzZXJ2ZXJMaXN0LnNldFNlbGVjdGlvbihuZXcgVHJlZUl0ZW1bXSB7IGl0ZW1baV19KTsKLQkJCQkJCQkJc2VsZWN0ZWRTZXJ2ZXJfID0gbnVsbDsKLQkJCQkJCQkJc2VsZWN0ZWRTZXJ2ZXJMYWJlbF8gPSBmYWN0b3J5VGV4dDsKLQkJCQkJCQkJc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfID0gKFN0cmluZykgc2VydmVyTGFiZWxzXy5nZXQoc2VsZWN0ZWRTZXJ2ZXJMYWJlbF8pOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQl9Ci0KLQkJLyoqCi0JCSAqIEdldCBhbGwgc2VydmVycyBpbiB0aGUgd29ya3NwYWNlCi0JCSAqIAotCQkgKiBAcmV0dXJuIFN0cmluZ1tdIG9mIGV4aXN0aW5nIHNlcnZlciBuYW1lcwotCQkgKi8KLQkJcHJpdmF0ZSBTdHJpbmdbXSBnZXRBbGxFeGlzdGluZ1NlcnZlcnMoKSB7Ci0JCQlWZWN0b3I8U3RyaW5nPiBzZXJ2ZXJJZHMgPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLQkJCXsKLQkJCQlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotCQkJCWlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGghPTApIHsKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQlJU2VydmVyIHNlcnZlciA9IChJU2VydmVyKSBzZXJ2ZXJzW2ldOwotCQkJCQkJc2VydmVySWRzLmFkZChzZXJ2ZXIuZ2V0TmFtZSgpKTsKLQkJCQkJCWV4aXN0aW5nU2VydmVyc1RhYmxlXy5wdXQoc2VydmVyLmdldE5hbWUoKSwgc2VydmVyKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAoU3RyaW5nW10pIHNlcnZlcklkcy50b0FycmF5KG5ldyBTdHJpbmdbc2VydmVySWRzLnNpemUoKV0pOwotCQl9Ci0KLQkJLyoqCi0JCSAqIEdldCBhbGwgc2VydmVyIHR5cGVzIGF2YWlsYWJsZSBmb3IgY3JlYXRpb24KLQkJICogCi0JCSAqIEByZXR1cm4gU3RyaW5nW10gb2Ygc2VydmVyIG5hbWVzCi0JCSAqLwotCQlwcml2YXRlIFN0cmluZ1tdIGdldEFsbFNlcnZlclR5cGVzKCkgewotCQkJVmVjdG9yPFN0cmluZz5zZXJ2ZXJUeXBlc18gPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLQkJCUlTZXJ2ZXJUeXBlW10gZGVmYXVsdFNlcnZlcnNMaXN0ID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZhdWx0U2VydmVyc0xpc3QubGVuZ3RoOyBpKyspIHsKLQkJCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gKElTZXJ2ZXJUeXBlKSBkZWZhdWx0U2VydmVyc0xpc3RbaV07Ci0JCQkJc2VydmVyVHlwZXNfLmFkZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotCQkJfQotCQkJcmV0dXJuIChTdHJpbmdbXSkgc2VydmVyVHlwZXNfLnRvQXJyYXkobmV3IFN0cmluZ1tzZXJ2ZXJUeXBlc18uc2l6ZSgpXSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uRmlsdGVyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvVHlwZVNlbGVjdGlvbkZpbHRlcjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE5MDA3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uRmlsdGVyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwNiAgIDEwNTA0NSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24gICAgICAgICAgCi0gKiAyMDA3MDMyOCAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuQmVhbkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZpY2VJbXBsQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0KLXB1YmxpYyBjbGFzcyBUeXBlU2VsZWN0aW9uRmlsdGVyMgotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVR5cGVCeUluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbiwgQXJyYXlMaXN0IHdlYlNlcnZpY2VUeXBlTGlzdCkKLSAgewotICAgICAgICAKLSAgICBBcnJheUxpc3Qgc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKGluaXRpYWxTZWxlY3Rpb24gIT0gbnVsbCAmJiBpbml0aWFsU2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIAotICAgICAgLy8gQ2hlY2sgZm9yIG51bGwgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICAgIE9iamVjdCBpbml0aWFsT2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChpbml0aWFsT2JqZWN0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgLy8gTWF0Y2ggdXAgcmVzb3VyY2UgdHlwZSBtZXRhZGF0YSB3aXRoIGluaXRpYWwgc2VsZWN0aW9uCi0gICAgICBJdGVyYXRvciBpdGVyID0gd2ViU2VydmljZVR5cGVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB3c3QgPSAoU3RyaW5nKWl0ZXIubmV4dCgpOwotICAgICAgICBTdHJpbmcgc2NlbmFyaW8gPSB3c3Quc3Vic3RyaW5nKDAsd3N0LmluZGV4T2YoIi8iKSk7Ci0gICAgICAgIFN0cmluZyBpbXBsSWQgPSB3c3Quc3Vic3RyaW5nKHdzdC5pbmRleE9mKCIvIikrMSk7ICAgICAgICAKLSAgICAgICAgLy9JV2ViU2VydmljZVR5cGUgd3N0ID0gKElXZWJTZXJ2aWNlVHlwZSlpdGVyLm5leHQoKTsKLSAgICAgICAgLy9TdHJpbmcgdHlwZUlkID0gKFN0cmluZyl3c3QuZ2V0SWQoKTsKLSAgICAgICAgaWYgKHNjZW5hcmlvLmVxdWFscyhTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApKSAmJiAhc3VwcG9ydGVkVHlwZXMuY29udGFpbnMod3N0KSkKLSAgICAgICAgewotCi0gICAgICAgICAgCi0gICAgICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxCeUlkKGltcGxJZCk7Ci0gICAgICAgICAgU3RyaW5nW10gcmVzb3VyY2VUeXBlcyA9IHdzaW1wbC5nZXRSZXNvdXJjZVR5cGVNZXRhZGF0YSgpOwotICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxyZXNvdXJjZVR5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGVzW2ldIT1udWxsKQotICAgICAgICAgICAgeyAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIGlmICgoaW5pdGlhbE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSkuZW5kc1dpdGgocmVzb3VyY2VUeXBlc1tpXSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24oaW5pdGlhbE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElDb250YWluZXIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbmFtZSA9IGluaXRpYWxPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYoIHJlc291cmNlICE9IG51bGwgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBuYW1lID0gaW5pdGlhbE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nW10gZXh0ZW5zaW9ucyA9IHdzaW1wbC5nZXRFeHRlbnNpb25NZXRhZGF0YSgpOwotICAgICAgICAgICAgICAgIGlmIChhY2NlcHRzTmFtZShuYW1lLCBleHRlbnNpb25zKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcy5hZGQod3N0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIC8vVE9ETzogQnVnIDE3OTc1MSAtIE5lZWQgdG8gbWFrZSBjaGVja2luZyBmb3IgdHlwZXMgcmVjb2duaXplZCBhcyBib3R0b20tdXAgdG8gYmUgbW9yZSBleHRlbnNpYmxlICAgICAgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgaWYgKHN1cHBvcnRlZFR5cGVzLmlzRW1wdHkoKSkgewotICAgICAgICAJICBpZiAoaW5pdGlhbE9iamVjdCBpbnN0YW5jZW9mIEJlYW5MaW5rIHx8IGluaXRpYWxPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pIHsKLSAgICAgICAgCQkgIHN1cHBvcnRlZFR5cGVzLmFkZCh3c3QpOwotICAgICAgICAJICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vSWYgbm8gd3NJbXBscyBoYXZlIGFjY2VwdGVkIHRoaXMgc2VsZWN0aW9uLCBjaGVjayBpZiB0aGlzIGlzIFdTREwuIElmIGl0IGlzLAotICAgICAgLy9hZGQgdGhlIHRvcC1kb3duIEphdmEgc2VydmljZSB0eXBlIHRvIHRoZSBsaXN0LgotICAgICAgaWYgKHN1cHBvcnRlZFR5cGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nW10gcmVzb3VyY2VUeXBlcyA9IHsiRmlsZSIsICJJUmVzb3VyY2UiLCAiU3RyaW5nIiwgIlNlcnZpY2VJbXBsIiwgIlNlcnZpY2VSZWZJbXBsIiwgIldTRExSZXNvdXJjZUltcGwifTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPHJlc291cmNlVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlc1tpXSE9bnVsbCkKLSAgICAgICAgICB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgoaW5pdGlhbE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSkuZW5kc1dpdGgocmVzb3VyY2VUeXBlc1tpXSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24oaW5pdGlhbE9iamVjdCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc291cmNlID0gbnVsbDsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElDb250YWluZXIpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYW1lID0gaW5pdGlhbE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmKCByZXNvdXJjZSAhPSBudWxsICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAoaW5pdGlhbE9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgICAgICAgeyAvL3RoZSBpbml0aWFsT2JqZWN0IGNvdWxkIGJlIGEgcGF0aCBuYW1lIHRoYXQgaXMgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICAvL2J1ZyAxMDUwNDUKLSAgICAgICAgICAgIAluYW1lID0gKFN0cmluZylpbml0aWFsT2JqZWN0OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5hbWUgPSBpbml0aWFsT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICB9ICAgIAotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgU3RyaW5nW10gZXh0ZW5zaW9ucyA9IHsiLndzZGwiLCAiLndzaWwiLCAiLmh0bWwiLCAiLlNlcnZpY2VJbXBsIiwgIi5TZXJ2aWNlUmVmSW1wbCIsICIuV1NETFJlc291cmNlSW1wbCJ9OwotICAgICAgICAgICAgICBpZiAoYWNjZXB0c05hbWUobmFtZSwgZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pKTsKLSAgICAgICAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7Ci0gICAgICAgICAgICAgICAgZW50cnlidWZmLmFwcGVuZCgib3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5qYXZhIik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzLmFkZChlbnRyeSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgIAotICAgICAgfQotICAgICAgCi0gICAgfSAgICAKLSAgCi0KLSAgICAKLSAgICBpZiAoc3VwcG9ydGVkVHlwZXMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIC8vSXQncyBub3QgYSByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgbm90IFdTREwgc28gcmV0dXJuIG51bGw7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiAoU3RyaW5nW10pc3VwcG9ydGVkVHlwZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICB9Ci0gIH0KLSAgLy8KLSAgLy8gQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIGlzIGFjY2VwdGFibGUgYmFzZWQgdXBvbiBpdHMgZXh0ZW5zaW9uCi0gIC8vCi0gIHByaXZhdGUgYm9vbGVhbiBhY2NlcHRzTmFtZSAoIFN0cmluZyBuYW1lLCBTdHJpbmdbXSBleHRlbnNpb25zKQotICB7Ci0gICAgLy9SZXR1cm4gdHJ1ZSBpZiAiYWxsIiBleHRlbnNpb25zIGFyZSBzdXBwb3J0ZWQuCi0KLSAgICBpZiAoZXh0ZW5zaW9uc1swXSE9bnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZXh0ZW5zaW9uc1swXS5lcXVhbHMoImFsbCIpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8ZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZXh0ZW5zaW9uc1tpXSE9bnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5hbWUuZW5kc1dpdGgoZXh0ZW5zaW9uc1tpXSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1R5cGVTZWxlY3Rpb25NZXRhZGF0YS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvVHlwZVNlbGVjdGlvbk1ldGFkYXRhLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNzVhY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvVHlwZVNlbGVjdGlvbk1ldGFkYXRhLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZDsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi0KLSAgLy8KLSAgLy8gVGhpcyBjbGFzcyBob2xkcyB0aGUgc2V0IG9mIGRpc3Rpbmd1aXNoaW5nIGZhY3RvcnMgaW4gZGV0ZXJtaW5pbmcgCi0gIC8vIHRoZSBkZWZhdWx0IFdlYiBzZXJ2aWNlIHR5cGUuICBUaGUgZGVmYXVsdCBXZWIgU2VydmljZSB0eXBlIHdpbGwgYmUgZGV0ZXJtaW5lZAotICAvLyBieSBwYXR0ZXJuIG1hdGNoaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbiB3aXRoIHRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9uIAotICAvLyBhbmQgdGhlIHJlc291cmNlIHR5cGUgbWV0YWRhdGEgc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdCBmaWxlLgotICAvLwotICBwdWJsaWMgY2xhc3MgVHlwZVNlbGVjdGlvbk1ldGFkYXRhCi0gIHsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZXh0ZW5zaW9uTWV0YTsKLSAgICBwdWJsaWMgU3RyaW5nW10gcmVzb3VyY2VUeXBlTWV0YTsKLQotICAgIHB1YmxpYyBUeXBlU2VsZWN0aW9uTWV0YWRhdGEoU3RyaW5nIGV4dGVuc2lvbk1ELCBTdHJpbmcgcmVzb3VyY2VUeXBlTUQpCi0gICAgewotICAgICAgc2V0RXh0ZW5zaW9uTWV0YWRhdGEoZXh0ZW5zaW9uTUQpOwotICAgICAgc2V0UmVzb3VyY2VUeXBlTWV0YWRhdGEocmVzb3VyY2VUeXBlTUQpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRFeHRlbnNpb25NZXRhZGF0YShTdHJpbmcgZXh0ZW5zaW9uTWV0YWRhdGEpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihleHRlbnNpb25NZXRhZGF0YSk7Ci0gICAgICBleHRlbnNpb25NZXRhID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICAgIGludCBpPTA7Ci0gICAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBleHRlbiA9IChTdHJpbmcpc3QubmV4dFRva2VuKCk7Ci0gICAgICAgIGlmIChleHRlbiE9bnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGV4dGVuc2lvbk1ldGFbaV09ZXh0ZW47Ci0gICAgICAgIH0KLSAgICAgICAgaSsrOwotICAgICAgfQotCi0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEV4dGVuc2lvbk1ldGFkYXRhKCkKLSAgICB7Ci0gICAgICByZXR1cm4gZXh0ZW5zaW9uTWV0YTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VUeXBlTWV0YWRhdGEoU3RyaW5nIHJlc291cmNlVHlwZU1ldGFkYXRhKQotICAgIHsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmVzb3VyY2VUeXBlTWV0YWRhdGEpOwotICAgICAgcmVzb3VyY2VUeXBlTWV0YSA9IG5ldyBTdHJpbmdbc3QuY291bnRUb2tlbnMoKV07Ci0gICAgICBpbnQgaT0wOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVzb3VyY2VUeXBlID0gKFN0cmluZylzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgaWYgKHJlc291cmNlVHlwZSE9bnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlc291cmNlVHlwZU1ldGFbaV09cmVzb3VyY2VUeXBlOwotICAgICAgICB9Ci0gICAgICAgIGkrKzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UmVzb3VyY2VUeXBlTWV0YWRhdGEoKQotICAgIHsKLSAgICAgIHJldHVybiByZXNvdXJjZVR5cGVNZXRhOwotICAgIH0KLQotICB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1dlYlNlcnZpY2VJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9XZWJTZXJ2aWNlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGJjNTUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1dlYlNlcnZpY2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZDsKLQotCi0vKioKLSogVGhpcyB0eXBlIGlzIHVzZWQgdG8gaG9sZCB1c2VyIG9yIGNhbGN1bGF0ZWQgCi0qIGRhdGEgdG8gYmUgdXNlIGJ5IGZpbnNpaCB0YXNrcwotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2ViU2VydmljZUluZm8KLXsKLQotfQotCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeU5UVENvbW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTNlZmJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5QbHVnaW5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFB1YmxpY1VERElSZWdpc3RyeU5UVENvbW0gaW1wbGVtZW50cyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlCi17Ci0KLSAgICAvLyBDb3B5cmlnaHQKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMi4iOwotCi0gICAgcHVibGljIFB1YmxpY1VERElSZWdpc3RyeU5UVENvbW0oKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gUGx1Z2luTWVzc2FnZXMuUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX05UVENPTU07Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHA6Ly93d3cudWRkaS5uZS5qcC91YnIvaW5xdWlyeWFwaSI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHBzOi8vd3d3LnVkZGkubmUuanAvdWJyL3B1Ymxpc2hhcGkiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHA6Ly93d3cubnR0LmNvbS91ZGRpLyI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVNBUC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlTQVAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcyZjRmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVNBUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5QbHVnaW5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFB1YmxpY1VERElSZWdpc3RyeVNBUCBpbXBsZW1lbnRzIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLXsKLQotICAgIC8vIENvcHlyaWdodAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0KLSAgICBwdWJsaWMgUHVibGljVURESVJlZ2lzdHJ5U0FQKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIFBsdWdpbk1lc3NhZ2VzLlBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVA7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHA6Ly91ZGRpLnNhcC5jb20vVURESS9hcGkvaW5xdWlyeS8iOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVibGlzaFVSTCgpIHsKLSAgICAgICAgcmV0dXJuICJodHRwczovL3VkZGkuc2FwLmNvbS9VRERJL2FwaS9wdWJsaXNoLyI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3VkZGkuc2FwLmNvbS8iOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlTQVBUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYyNjdkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQudWRkaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIuUGx1Z2luTWVzc2FnZXM7Ci0KLXB1YmxpYyBjbGFzcyBQdWJsaWNVRERJUmVnaXN0cnlTQVBUZXN0IGltcGxlbWVudHMgUHVibGljVURESVJlZ2lzdHJ5VHlwZQotewotCi0gICAgLy8gQ29weXJpZ2h0Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIuIjsKLQotICAgIHB1YmxpYyBQdWJsaWNVRERJUmVnaXN0cnlTQVBUZXN0KCkgewotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIFBsdWdpbk1lc3NhZ2VzLlBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3VkZGl0ZXN0LnNhcC5jb20vVURESS9hcGkvaW5xdWlyeS8iOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVibGlzaFVSTCgpIHsKLSAgICAgICAgcmV0dXJuICJodHRwczovL3VkZGl0ZXN0LnNhcC5jb20vVURESS9hcGkvcHVibGlzaC8iOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHA6Ly91ZGRpdGVzdC5zYXAuY29tLyI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGQ5ZTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQudWRkaTsKLQotcHVibGljIGludGVyZmFjZSBQdWJsaWNVRERJUmVnaXN0cnlUeXBlCi17Ci0KLSAgICAvLyBDb3B5cmlnaHQKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMi4iOwotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gICAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCk7Ci0gICAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCk7Ci0gICAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2JhY2YxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5WE1ldGhvZHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQudWRkaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIuUGx1Z2luTWVzc2FnZXM7Ci0KLXB1YmxpYyBjbGFzcyBQdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcyBpbXBsZW1lbnRzIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLXsKLQotICAgIC8vIENvcHlyaWdodAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0KLSAgICBwdWJsaWMgUHVibGljVURESVJlZ2lzdHJ5WE1ldGhvZHMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gUGx1Z2luTWVzc2FnZXMuUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1hNRVRIT0RTOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICAgICAgLy9yZXR1cm4gImh0dHA6Ly91ZGRpLnhtZXRob2RzLm5ldC9pbnF1aXJlIjsKLSAgICAgICAgcmV0dXJuICJodHRwOi8vdWRkaS54bWV0aG9kcy5uZXQvaW5xdWlyZTIiOwotICAgIH0KLQotICAgIC8vIFJlYWQtb25seSByZWdpc3RyeS4gVGhlIHB1Ymxpc2ggYW5kIHJlZ2lzdHJhdGlvbiBVUkxzIGRvbid0IGV4aXN0LgotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHVibGlzaFVSTCgpIHsKLSAgICAgICAgcmV0dXJuICJodHRwczovL3VkZGkueG1ldGhvZHMubmV0L3B1Ymxpc2gyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpIHsKLSAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3LnhtZXRob2RzLm5ldC92ZTIvUmVnaXN0ZXIucG8/ZXZlbnQ9cmVnaXN0ZXJPcmciOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0FkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0FkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTU3ODc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9BZGRXU0RMVG9XU0lMV3JhcHBlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c2lsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzaWwuQWRkV1NETFRvV1NJTENvbW1hbmQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBBZGRXU0RMVG9XU0lMQ29tbWFuZCBjb21tYW5kOwotICBwcml2YXRlIEFyZ3VtZW50cyBhcmdzOwotCi0gIHB1YmxpYyBBZGRXU0RMVG9XU0lMV3JhcHBlckNvbW1hbmQoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIGlmIChjb21tYW5kID09IG51bGwpCi0gICAgICBjb21tYW5kID0gbmV3IEFkZFdTRExUb1dTSUxDb21tYW5kKCk7Ci0gICAgaWYgKCFhcmdzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBjb21tYW5kLnNldEFyZ3VtZW50cyhhcmdzLmdldFN0cmluZ0FyZ3VtZW50cygpKTsKLSAgICAgIGNvbW1hbmQuc2V0V1dXQXV0aGVudGljYXRpb25IYW5kbGVyKG5ldyBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpKTsKLSAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICAgcmV0dXJuIGNvbW1hbmQuZXhlY3V0ZSggbnVsbCwgbnVsbCk7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gYXJncyBUaGUgYXJncyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBcmdzKEFyZ3VtZW50cyBhcmdzKQotICB7Ci0gICAgdGhpcy5hcmdzID0gYXJnczsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gY29tbWFuZCBUaGUgY29tbWFuZCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tYW5kKEFkZFdTRExUb1dTSUxDb21tYW5kIGNvbW1hbmQpCi0gIHsKLSAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9Bcmd1bWVudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9Bcmd1bWVudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ExNzdjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvQXJndW1lbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQXJndW1lbnRzCi17Ci0gIHByaXZhdGUgVmVjdG9yIGFyZ3NfOwotCi0gIHB1YmxpYyBBcmd1bWVudHMoKQotICB7Ci0gICAgYXJnc18gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgYXJnc18uYWRkKGtleSk7Ci0gICAgaWYgKHZhbHVlICE9IG51bGwpCi0gICAgICBhcmdzXy5hZGQodmFsdWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlKFN0cmluZyBrZXkpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBhcmdzXy5pbmRleE9mKGtleSk7Ci0gICAgaWYgKGluZGV4ID49IDApCi0gICAgewotICAgICAgYXJnc18ucmVtb3ZlKGluZGV4KTsKLSAgICAgIGFyZ3NfLnJlbW92ZShpbmRleCsxKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldChTdHJpbmcga2V5KQotICB7Ci0gICAgaW50IGluZGV4ID0gYXJnc18uaW5kZXhPZihrZXkpOwotICAgIGlmIChpbmRleCA+PSAwKQotICAgICAgcmV0dXJuIGFyZ3NfLmdldChpbmRleCsxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsZWFyKCkKLSAgewotICAgIGFyZ3NfLmNsZWFyKCk7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0W10gZ2V0QXJndW1lbnRzKCkKLSAgewotICAgIE9iamVjdFtdIGFyZ3MgPSBuZXcgT2JqZWN0W2FyZ3NfLnNpemUoKV07Ci0gICAgYXJnc18uY29weUludG8oYXJncyk7Ci0gICAgcmV0dXJuIGFyZ3M7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0U3RyaW5nQXJndW1lbnRzKCkKLSAgewotICAgIFN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nW2FyZ3NfLnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKQotICAgICAgYXJnc1tpXSA9IGFyZ3NfLmdldChpKS50b1N0cmluZygpOwotICAgIHJldHVybiBhcmdzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpCi0gIHsKLSAgICByZXR1cm4gYXJnc18uaXNFbXB0eSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvRGlhbG9nV1dXQXV0aGVudGljYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9EaWFsb2dXV1dBdXRoZW50aWNhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA3NTBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9EaWFsb2dXV1dBdXRoZW50aWNhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c2lsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25IYW5kbGVyOwotCi0KLXB1YmxpYyBjbGFzcyBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbiBleHRlbmRzIERpYWxvZyBpbXBsZW1lbnRzIFdXV0F1dGhlbnRpY2F0aW9uSGFuZGxlcgotewotCi0gIC8qQ09OVEVYVF9JRCBEQkFTMDAwMSBmb3IgdGhlIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gdXNlciBuYW1lKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9EQkFTX1VTRVJOQU1FID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLkRCQVMwMDAxIjsKLQotICAvKkNPTlRFWFRfSUQgREJBUzAwMDIgZm9yIHRoZSBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9EQkFTX1BBU1NXT1JEID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLkRCQVMwMDAyIjsKLQotICBwcml2YXRlIFN0cmluZyB1c2VybmFtZVN0cmluZ187Ci0gIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkU3RyaW5nXzsKLQotICBwcml2YXRlIFRleHQgdXNlcm5hbWVfOwotICBwcml2YXRlIFRleHQgcGFzc3dvcmRfOwotCi0gIHByaXZhdGUgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gd3d3YWVfOwotCi0gIHB1YmxpYyBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbihTaGVsbCBzaGVsbCkKLSAgewotICAgIHN1cGVyKHNoZWxsKTsKLSAgICB1c2VybmFtZVN0cmluZ18gPSBudWxsOwotICAgIHBhc3N3b3JkU3RyaW5nXyA9IG51bGw7Ci0gICAgd3d3YWVfID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIHRoZSBDYW5jZWwgYnV0dG9uIGlzIHByZXNzZWQuCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIGNhbmNlbFByZXNzZWQoKQotICB7Ci0gICAgdXNlcm5hbWVTdHJpbmdfID0gbnVsbDsKLSAgICBwYXNzd29yZFN0cmluZ18gPSBudWxsOwotICAgIHN1cGVyLmNhbmNlbFByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIHRoZSBPSyBidXR0b24gaXMgcHJlc3NlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkKLSAgewotICAgIFN0cmluZyB1c2VybmFtZVN0cmluZyA9IHVzZXJuYW1lXy5nZXRUZXh0KCk7Ci0gICAgdXNlcm5hbWVTdHJpbmdfID0gKHVzZXJuYW1lU3RyaW5nLmxlbmd0aCgpID4gMCkgPyB1c2VybmFtZVN0cmluZyA6IG51bGw7Ci0gICAgU3RyaW5nIHBhc3N3b3JkU3RyaW5nID0gcGFzc3dvcmRfLmdldFRleHQoKTsKLSAgICBwYXNzd29yZFN0cmluZ18gPSAocGFzc3dvcmRTdHJpbmcubGVuZ3RoKCkgPiAwKSA/IHBhc3N3b3JkU3RyaW5nIDogbnVsbDsKLSAgICBzZXRSZXR1cm5Db2RlKERpYWxvZy5PSyk7Ci0gICAgc3VwZXIub2tQcmVzc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgKiBTZWUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3cjY29uZmlndXJlU2hlbGx9LgotICAqIEBwYXJhbSBzaGVsbCBUaGUgc2hlbGwuCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIHNoZWxsKQotICB7Ci0gICAgc3VwZXIuY29uZmlndXJlU2hlbGwoc2hlbGwpOwotICAgIHNoZWxsLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRMRV9IVFRQX0JBU0lDX0FVVEgpOwotICB9Ci0KLSAgLyoqIAotICAqIENyZWF0ZXMgdGhlIGRpYWxvZyBhcmVhLgotICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb21wb3NpdGUuCi0gICogQHJldHVybiBUaGUgY29udHJvbCBhcmVhLgotICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGdkLndpZHRoSGludCA9IDQwMDsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgIGdsLnZlcnRpY2FsU3BhY2luZyA9IDE1OwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotCi0gICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVVJMKTsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQotICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULldSQVApOwotICAgIGxhYmVsLnNldFRleHQod3d3YWVfLmdldFVSTCgpKTsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULldSQVApOwotICAgIGxhYmVsLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSk7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0KLSAgICB1c2VybmFtZV8gPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5CT1JERVIpOwotICAgIHVzZXJuYW1lXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLSAgICB1c2VybmFtZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHVzZXJuYW1lXywgSU5GT1BPUF9EQkFTX1VTRVJOQU1FKTsKLQotICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULldSQVApOwotICAgIGxhYmVsLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0hUVFBfQkFTSUNfQVVUSF9QQVNTV09SRCk7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0KLSAgICBwYXNzd29yZF8gPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5CT1JERVIpOwotICAgIHBhc3N3b3JkXy5zZXRFY2hvQ2hhcignKicpOwotICAgIHBhc3N3b3JkXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLSAgICBwYXNzd29yZF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHVzZXJuYW1lXywgSU5GT1BPUF9EQkFTX1BBU1NXT1JEKTsKLQotICAgIHJldHVybiBjb21wb3NpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVXV1dBdXRoZW50aWNhdGlvbihXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZSkKLSAgewotICAgIHVzZXJuYW1lU3RyaW5nXyA9IG51bGw7Ci0gICAgcGFzc3dvcmRTdHJpbmdfID0gbnVsbDsKLSAgICB3d3dhZV8gPSB3d3dhZTsKLSAgICBvcGVuKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiB1c2VybmFtZVN0cmluZ187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBwYXNzd29yZFN0cmluZ187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9UYWJsZVZpZXdlckVkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL1RhYmxlVmlld2VyRWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YTQ1ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL1RhYmxlVmlld2VyRWRpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5UYWJsZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLQotcHVibGljIGNsYXNzIFRhYmxlVmlld2VyRWRpdG9yIGV4dGVuZHMgQ29tcG9zaXRlCi17Ci0gIHByaXZhdGUgaW50IERFRkFVTFRfVEFCTEVfSEVJR0hUX0hJTlQgPSAxMDA7Ci0gIHByaXZhdGUgaW50IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gODA7Ci0KLSAgcHJpdmF0ZSBTdHJpbmdbXSBjb2x1bW5zXzsKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcl87Ci0gIHByaXZhdGUgVGFibGUgdGFibGVfOwotICBwcml2YXRlIFRhYmxlRWRpdG9yIGVkaXRvcl87Ci0gIHByaXZhdGUgVGFibGVFZGl0b3JMaXN0ZW5lciB0YWJsZUVkaXRvckxpc3RlbmVyXzsKLSAgcHJpdmF0ZSBUZXh0IHRleHRfOwotICBwcml2YXRlIEJ1dHRvbiBhZGRfOwotICBwcml2YXRlIEJ1dHRvbiByZW1vdmVfOwotCi0gIHByaXZhdGUgTGlzdCB2YWx1ZXNfOwotICBwcml2YXRlIE9iamVjdCBkZWZhdWx0VmFsdWVfOwotCi0gIHB1YmxpYyBUYWJsZVZpZXdlckVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBTdHJpbmdbXSBjb2x1bW5zLCBMaXN0IGluaXRWYWx1ZXMsIE9iamVjdCBkZWZhdWx0VmFsdWUpCi0gIHsKLSAgICBzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBjb2x1bW5zXyA9IGNvbHVtbnM7Ci0gICAgdmFsdWVzXyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoaW5pdFZhbHVlcyAhPSBudWxsICYmIGluaXRWYWx1ZXMuc2l6ZSgpID4gMCkKLSAgICAgIHZhbHVlc18uYWRkQWxsKGluaXRWYWx1ZXMpOwotICAgIGRlZmF1bHRWYWx1ZV8gPSAoZGVmYXVsdFZhbHVlICE9IG51bGwpID8gZGVmYXVsdFZhbHVlIDogbmV3IFN0cmluZygiIik7Ci0gICAgY3JlYXRlUGFydENvbnRyb2wodGhpcyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIHNldExheW91dChnbCk7Ci0gICAgc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgY29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCi0gICAgdGFibGVfID0gbmV3IFRhYmxlKGNvbXBvc2l0ZSwgU1dULlNJTkdMRSB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5CT1JERVIpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgZ2QuaGVpZ2h0SGludCA9IERFRkFVTFRfVEFCTEVfSEVJR0hUX0hJTlQ7Ci0gICAgdGFibGVfLnNldExheW91dERhdGEoZ2QpOwotICAgIHRhYmxlXy5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotICAgIHRhYmxlXy5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0gICAgVGFibGVMYXlvdXQgdGFibGVMYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKLSAgICBpbnQgbWF4V2lkdGggPSBERUZBVUxUX0NPTFVNTl9XSURUSDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbnNfLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFRhYmxlQ29sdW1uIHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlXywgU1dULk5PTkUpOwotICAgICAgdGFibGVDb2x1bW4uc2V0VGV4dChjb2x1bW5zX1tpXSk7Ci0gICAgICB0YWJsZUNvbHVtbi5wYWNrKCk7Ci0gICAgICBpbnQgdGFibGVDb2x1bW5XaWR0aCA9IE1hdGgubWF4KERFRkFVTFRfQ09MVU1OX1dJRFRILCB0YWJsZUNvbHVtbi5nZXRXaWR0aCgpKTsKLSAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRhYmxlQ29sdW1uV2lkdGgpOwotICAgICAgQ29sdW1uV2VpZ2h0RGF0YSBjb2x1bW5EYXRhID0gbmV3IENvbHVtbldlaWdodERhdGEodGFibGVDb2x1bW5XaWR0aCwgdGFibGVDb2x1bW5XaWR0aCwgdHJ1ZSk7Ci0gICAgICB0YWJsZUxheW91dC5hZGRDb2x1bW5EYXRhKGNvbHVtbkRhdGEpOwotICAgIH0KLSAgICB0YWJsZV8uc2V0TGF5b3V0KHRhYmxlTGF5b3V0KTsKLSAgICAvLyBpbml0aWFsaXplIHRoZSB0YWJsZSBlZGl0b3IKLSAgICBlZGl0b3JfID0gbmV3IFRhYmxlRWRpdG9yKHRhYmxlXyk7Ci0gICAgLy8gVGhlIGVkaXRvciBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgY2VsbCBhbmQgbXVzdAotICAgIC8vIG5vdCBiZSBhbnkgc21hbGxlciB0aGFuIDUwIHBpeGVscy4KLSAgICBlZGl0b3JfLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuTEVGVDsKLSAgICBlZGl0b3JfLmdyYWJIb3Jpem9udGFsID0gdHJ1ZTsKLSAgICBlZGl0b3JfLm1pbmltdW1XaWR0aCA9IG1heFdpZHRoOwotICAgIHRhYmxlRWRpdG9yTGlzdGVuZXJfID0gbmV3IFRhYmxlRWRpdG9yTGlzdGVuZXIoKTsKLSAgICB0YWJsZV8uYWRkTW91c2VMaXN0ZW5lcih0YWJsZUVkaXRvckxpc3RlbmVyXyk7Ci0gICAgdGFibGVWaWV3ZXJfID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlXyk7Ci0gICAgdGFibGVWaWV3ZXJfLmdldENvbnRyb2woKS5hZGRLZXlMaXN0ZW5lcigKLSAgICAgIG5ldyBLZXlMaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIGtleVByZXNzZWQoS2V5RXZlbnQgZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIERlbAotICAgICAgICAgIGlmICgoKGludCllLmNoYXJhY3RlcikgPT0gMTI3KSAKLSAgICAgICAgICAgIGhhbmRsZURlbGV0ZUtleVByZXNzZWQoKTsKLSAgICAgICAgICAvLyBFbnRlciBvciBzcGFjZQotICAgICAgICAgIGlmICgoKGludCllLmNoYXJhY3RlcikgPT0gMTMgfHwgKChpbnQpZS5jaGFyYWN0ZXIpID09IDMyKQotICAgICAgICAgICAgdGFibGVFZGl0b3JMaXN0ZW5lcl8uZWRpdFNlbGVjdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgICk7Ci0gICAgdGFibGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgTGlzdENvbnRlbnRQcm92aWRlcigpKTsKLSAgICB0YWJsZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgTGlzdExhYmVsUHJvdmlkZXIoKSk7Ci0gICAgdGFibGVWaWV3ZXJfLnNldElucHV0KHZhbHVlc18pOwotICAgIHRhYmxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCi0gICAgICBuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgZW5hYmxlUmVtb3ZlKHRydWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLQotICAgIENvbXBvc2l0ZSBidXR0b25Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMjsKLSAgICBnbC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOwotICAgIGJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotICAgIGJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORykpOwotCi0gICAgYWRkXyA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0gICAgYWRkXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9BREQpOwotICAgIGFkZF8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgYWRkXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLSAgICAgIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgaGFuZGxlQWRkQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLQotICAgIHJlbW92ZV8gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXBvc2l0ZSwgU1dULlBVU0gpOwotICAgIHJlbW92ZV8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfUkVNT1ZFKTsKLSAgICByZW1vdmVfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIHJlbW92ZV8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoCi0gICAgICBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICAgIGhhbmRsZVJlbW92ZUJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgICAgfQotICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgICk7Ci0gICAgZW5hYmxlUmVtb3ZlKGZhbHNlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBlbmFibGVSZW1vdmUoYm9vbGVhbiBlbmFibGVkKQotICB7Ci0gICAgcmVtb3ZlXy5zZXRFbmFibGVkKGVuYWJsZWQgJiYgIXRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICB7Ci0gICAgdmFsdWVzXy5hZGQoZGVmYXVsdFZhbHVlXyk7Ci0gICAgcmVmcmVzaCgpOwotICAgIHNldFNlbGVjdGlvbkFzT2JqZWN0KHZhbHVlc18uZ2V0KHRhYmxlXy5nZXRJdGVtQ291bnQoKS0xKSk7Ci0gICAgdGFibGVFZGl0b3JMaXN0ZW5lcl8uZWRpdFNlbGVjdGlvbigpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVJlbW92ZUJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICB7Ci0gICAgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZURlbGV0ZUtleVByZXNzZWQoKQotICB7Ci0gICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0YWJsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikpCi0gICAgewotICAgICAgaW50IHNlbGVjdGlvbkluZGV4ID0gdGFibGVfLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpbnQgc2VsZWN0aW9uQ291bnQgPSB0YWJsZV8uZ2V0SXRlbUNvdW50KCk7Ci0gICAgICB2YWx1ZXNfLnJlbW92ZShzZWxlY3Rpb25JbmRleCk7Ci0gICAgICBpZiAoc2VsZWN0aW9uSW5kZXggPCBzZWxlY3Rpb25Db3VudC0xKQotICAgICAgICBzZXRTZWxlY3Rpb25Bc09iamVjdCh2YWx1ZXNfLmdldChzZWxlY3Rpb25JbmRleCkpOwotICAgICAgZWxzZSBpZiAoc2VsZWN0aW9uQ291bnQgLTIgPj0gMCkKLSAgICAgICAgc2V0U2VsZWN0aW9uQXNPYmplY3QodmFsdWVzXy5nZXQoc2VsZWN0aW9uQ291bnQtMikpOwotICAgICAgcmVmcmVzaCgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbnRlcm5hbFJlZnJlc2goKQotICB7Ci0gICAgLy8gc3luY2hyb25pemUgdGV4dCBmaWVsZCwgcHJldmlvdXNseSBzZWxlY3RlZCB0YWJsZSBjZWxsIGFuZCBtb2RlbCAoaW5wdXRPYmplY3QpCi0gICAgaWYgKHRleHRfICE9IG51bGwpCi0gICAgewotICAgICAgVGFibGVJdGVtIG9sZFRhYmxlSXRlbSA9IGVkaXRvcl8uZ2V0SXRlbSgpOwotICAgICAgaW50IG9sZENvbHVtbkluZGV4ID0gZWRpdG9yXy5nZXRDb2x1bW4oKTsKLSAgICAgIGlmIChvbGRUYWJsZUl0ZW0gIT0gbnVsbCAmJiBvbGRDb2x1bW5JbmRleCA+PSAwICYmIG9sZENvbHVtbkluZGV4IDwgY29sdW1uc18ubGVuZ3RoKQotICAgICAgewotICAgICAgICBTdHJpbmcgb2xkVGV4dCA9IHRleHRfLmdldFRleHQoKTsKLSAgICAgICAgb2xkVGFibGVJdGVtLnNldFRleHQob2xkQ29sdW1uSW5kZXgsIG9sZFRleHQpOwotICAgICAgICBpbnQgb2xkUm93SW5kZXggPSB0YWJsZV8uaW5kZXhPZihvbGRUYWJsZUl0ZW0pOwotICAgICAgICB2YWx1ZXNfLnNldChvbGRSb3dJbmRleCwgb2xkVGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvbkFzT2JqZWN0KE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICB0YWJsZVZpZXdlcl8uc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG9iamVjdCksIHRydWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VG9vbFRpcFRleHQoU3RyaW5nIHN0cmluZykKLSAgewotICAgIHRhYmxlXy5zZXRUb29sVGlwVGV4dChzdHJpbmcpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5mb3BvcChTdHJpbmcgc3RyaW5nKQotICB7Ci0gIAlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHRhYmxlXywgc3RyaW5nKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5wdXQoTGlzdCBsaXN0KQotICB7Ci0gICAgdmFsdWVzXy5jbGVhcigpOwotICAgIHZhbHVlc18uYWRkQWxsKGxpc3QpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaCgpCi0gIHsKLSAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICB0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOwotICB9Ci0KLSAgcHVibGljIFRhYmxlSXRlbVtdIGdldEl0ZW1zKCkKLSAgewotICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgIHJldHVybiB0YWJsZV8uZ2V0SXRlbXMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKQotICB7Ci0gICAgc3VwZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICBhZGRfLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gICAgZW5hYmxlUmVtb3ZlKGVuYWJsZWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLSAgICBzdXBlci5kaXNwb3NlKCk7Ci0gICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgaWYgKGVkaXRvcl8gIT0gbnVsbCkKLSAgICAgIGVkaXRvcl8uZGlzcG9zZSgpOwotICAgIGlmICh0YWJsZV8gIT0gbnVsbCkKLSAgICAgIHRhYmxlXy5kaXNwb3NlKCk7Ci0gICAgaWYgKGFkZF8gIT0gbnVsbCkKLSAgICAgIGFkZF8uZGlzcG9zZSgpOwotICAgIGlmIChyZW1vdmVfICE9IG51bGwpCi0gICAgICByZW1vdmVfLmRpc3Bvc2UoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbnRlcm5hbERpc3Bvc2UoKQotICB7Ci0gICAgaWYgKHRleHRfICE9IG51bGwpCi0gICAgICB0ZXh0Xy5kaXNwb3NlKCk7Ci0gICAgdGV4dF8gPSBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIFRhYmxlRWRpdG9yTGlzdGVuZXIgaW1wbGVtZW50cyBNb3VzZUxpc3RlbmVyCi0gIHsKLSAgICBwcml2YXRlIGludCBjdXJyU2VsZWN0aW9uSW5kZXhfOwotICAgIHByaXZhdGUgaW50IGVkaXRSb3dfOwotICAgIHByaXZhdGUgaW50IGVkaXRDb2x1bW5fOwotCi0gICAgcHVibGljIFRhYmxlRWRpdG9yTGlzdGVuZXIoKQotICAgIHsKLSAgICAgIHN1cGVyKCk7Ci0gICAgICBjdXJyU2VsZWN0aW9uSW5kZXhfID0gLTE7Ci0gICAgICBlZGl0Um93XyA9IC0xOwotICAgICAgZWRpdENvbHVtbl8gPSAtMTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBtb3VzZURvdWJsZUNsaWNrKE1vdXNlRXZlbnQgZSkKLSAgICB7Ci0gICAgICBtb3VzZURvd24oZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbW91c2VEb3duKE1vdXNlRXZlbnQgZSkKLSAgICB7Ci0gICAgICAvLyByZWZyZXNoIHRhYmxlCi0gICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICAgIC8vIENsZWFuIHVwIHByZXZpb3VzIHRleHQgZWRpdG9yIGNvbnRyb2wKLSAgICAgIGludGVybmFsRGlzcG9zZSgpOwotICAgICAgLy8gdXBkYXRlIHRhYmxlCi0gICAgICBpZiAodGFibGVfLmlzRm9jdXNDb250cm9sKCkpCi0gICAgICB7Ci0gICAgICAgIGludCBzZWxlY3RlZFJvd0luZGV4ID0gZ2V0U2VsZWN0ZWRSb3codGFibGVfLCBlLnkpOwotICAgICAgICBpZiAoY3VyclNlbGVjdGlvbkluZGV4XyAhPSAtMSAmJiBzZWxlY3RlZFJvd0luZGV4ICE9IC0xICYmIGN1cnJTZWxlY3Rpb25JbmRleF8gPT0gc2VsZWN0ZWRSb3dJbmRleCkKLSAgICAgICAgewotICAgICAgICAgIFRhYmxlSXRlbSB0YWJsZUl0ZW0gPSB0YWJsZV8uZ2V0SXRlbShzZWxlY3RlZFJvd0luZGV4KTsKLSAgICAgICAgICBpbnQgc2VsZWN0ZWRDb2x1bW5JbmRleCA9IGdldFNlbGVjdGVkQ29sdW1uKHRhYmxlSXRlbSwgZS54LCBlLnkpOwotICAgICAgICAgIGlmIChzZWxlY3RlZENvbHVtbkluZGV4ICE9IC0xICYmICh0ZXh0XyA9PSBudWxsIHx8IHRleHRfLmlzRGlzcG9zZWQoKSB8fCBzZWxlY3RlZENvbHVtbkluZGV4ICE9IGVkaXRvcl8uZ2V0Q29sdW1uKCkpKQotICAgICAgICAgICAgZWRpdFNlbGVjdGlvbihzZWxlY3RlZFJvd0luZGV4LCBzZWxlY3RlZENvbHVtbkluZGV4KTsKLSAgICAgICAgfQotICAgICAgICBjdXJyU2VsZWN0aW9uSW5kZXhfID0gc2VsZWN0ZWRSb3dJbmRleDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBtb3VzZVVwKE1vdXNlRXZlbnQgZSkKLSAgICB7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0U2VsZWN0ZWRSb3coVGFibGUgdGFibGUsIGludCB5KQotICAgIHsKLSAgICAgIFRhYmxlSXRlbVtdIHRhYmxlSXRlbXMgPSB0YWJsZS5nZXRJdGVtcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YWJsZUl0ZW1zLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBSZWN0YW5nbGUgcmVjdGFuZ2xlID0gdGFibGVJdGVtc1tpXS5nZXRCb3VuZHMoMCk7Ci0gICAgICAgIGlmIChyZWN0YW5nbGUgIT0gbnVsbCAmJiB5ID49IHJlY3RhbmdsZS55ICYmIHkgPCAocmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0KSkKLSAgICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRTZWxlY3RlZENvbHVtbihUYWJsZUl0ZW0gdGFibGVJdGVtLCBpbnQgeCwgaW50IHkpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zXy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHRhYmxlSXRlbS5nZXRCb3VuZHMoaSkuY29udGFpbnMoeCwgeSkpCi0gICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVkaXRTZWxlY3Rpb24oaW50IHJvdywgaW50IGNvbHVtbikKLSAgICB7Ci0gICAgICBlZGl0Um93XyA9IHJvdzsKLSAgICAgIGVkaXRDb2x1bW5fID0gY29sdW1uOwotICAgICAgVGFibGVJdGVtIHRhYmxlSXRlbSA9IHRhYmxlXy5nZXRJdGVtKHJvdyk7Ci0gICAgICAvLyBTZXR1cCBhZGFwdGVyIGZvciB0aGUgbmV3IHNlbGVjdGlvbgotICAgICAgdGV4dF8gPSBuZXcgVGV4dCh0YWJsZV8sIFNXVC5OT05FKTsKLSAgICAgIFN0cmluZyB0ZXh0ID0gdGFibGVJdGVtLmdldFRleHQoY29sdW1uKTsKLSAgICAgIHRleHRfLnNldFRleHQoKHRleHQgIT0gbnVsbCkgPyB0ZXh0IDogIiIpOwotICAgICAgdGV4dF8uYWRkS2V5TGlzdGVuZXIobmV3IEtleUxpc3RlbmVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVByZXNzZWQoS2V5RXZlbnQgZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBFc2MKLSAgICAgICAgICAgIGlmICgoKGludCllLmNoYXJhY3RlcikgPT0gMjcpCi0gICAgICAgICAgICAgIGNhbmNlbFNlbGVjdGlvbigpOwotICAgICAgICAgIH0KLSAgICAgICAgICBwdWJsaWMgdm9pZCBrZXlSZWxlYXNlZChLZXlFdmVudCBlKQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICk7Ci0gICAgICB0ZXh0Xy5hZGRUcmF2ZXJzZUxpc3RlbmVyKG5ldyBUcmF2ZXJzZUxpc3RlbmVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVRyYXZlcnNlZChUcmF2ZXJzZUV2ZW50IGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9UQUJfTkVYVCkKLSAgICAgICAgICAgICAgdHJhdmVyc2VUYWJOZXh0KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLmRldGFpbCA9PSBTV1QuVFJBVkVSU0VfVEFCX1BSRVZJT1VTKQotICAgICAgICAgICAgICB0cmF2ZXJzZVRhYlByZXZpb3VzKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICApOwotICAgICAgZWRpdG9yXy5zZXRFZGl0b3IodGV4dF8sIHRhYmxlSXRlbSwgY29sdW1uKTsKLSAgICAgIHRleHRfLnNldEZvY3VzKCk7Ci0gICAgICB0ZXh0Xy5zZWxlY3RBbGwoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB0cmF2ZXJzZVRhYk5leHQoKQotICAgIHsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpZiAoIShlZGl0Um93XyA9PSB0YWJsZV8uZ2V0SXRlbXMoKS5sZW5ndGgtMSAmJiBlZGl0Q29sdW1uXyA9PSBjb2x1bW5zXy5sZW5ndGgtMSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChlZGl0Q29sdW1uXyA8IGNvbHVtbnNfLmxlbmd0aC0xKQotICAgICAgICAgIGVkaXRDb2x1bW5fKys7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGVkaXRDb2x1bW5fID0gMDsKLSAgICAgICAgICBlZGl0Um93XysrOwotICAgICAgICAgIHRhYmxlXy5zZWxlY3QoZWRpdFJvd18pOwotICAgICAgICB9Ci0gICAgICAgIGVkaXRTZWxlY3Rpb24oZWRpdFJvd18sIGVkaXRDb2x1bW5fKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB0cmF2ZXJzZVRhYlByZXZpb3VzKCkKLSAgICB7Ci0gICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICAgIGludGVybmFsRGlzcG9zZSgpOwotICAgICAgaWYgKCEoZWRpdFJvd18gPT0gMCAmJiBlZGl0Q29sdW1uXyA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVkaXRDb2x1bW5fID4gMCkKLSAgICAgICAgICBlZGl0Q29sdW1uXy0tOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBlZGl0Q29sdW1uXyA9IGNvbHVtbnNfLmxlbmd0aC0xOwotICAgICAgICAgIGVkaXRSb3dfLS07Ci0gICAgICAgICAgdGFibGVfLnNlbGVjdChlZGl0Um93Xyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWRpdFNlbGVjdGlvbihlZGl0Um93XywgZWRpdENvbHVtbl8pOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNhbmNlbFNlbGVjdGlvbigpCi0gICAgewotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBlZGl0U2VsZWN0aW9uKCkKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0ZWRSb3dJbmRleCA9IHRhYmxlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgaWYgKHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgY29sdW1uc18ubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgLy8gcmVmcmVzaCB0YWJsZQotICAgICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICAgICAgLy8gQ2xlYW4gdXAgYW55IHByZXZpb3VzIGVkaXRvciBjb250cm9sCi0gICAgICAgIGludGVybmFsRGlzcG9zZSgpOwotICAgICAgICBlZGl0U2VsZWN0aW9uKHNlbGVjdGVkUm93SW5kZXgsIDApOwotICAgICAgfQotICAgICAgY3VyclNlbGVjdGlvbkluZGV4XyA9IHNlbGVjdGVkUm93SW5kZXg7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLSAgICB7Ci0gICAgICB0YWJsZVZpZXdlcl8uYWRkKGdldEVsZW1lbnRzKG5ld0lucHV0KSk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGlucHV0RWxlbWVudCBpbnN0YW5jZW9mIExpc3QpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IChMaXN0KWlucHV0RWxlbWVudDsKLSAgICAgICAgT2JqZWN0W10gb2JqZWN0cyA9IG5ldyBPYmplY3RbbGlzdC5zaXplKCldOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgb2JqZWN0c1tpXSA9IGxpc3QuZ2V0KGkpOwotICAgICAgICByZXR1cm4gb2JqZWN0czsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgcmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgICB7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmI0OWVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci0KLQotcHVibGljIGNsYXNzIFV0aWxzCi17Ci0gIHB1YmxpYyBVdGlscygpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9GaWxlU3lzdGVtVVJJKFN0cmluZyByZWxhdGl2ZVBsYXRmb3JtVVJJKQotICB7Ci0gICAgaWYgKHJlbGF0aXZlUGxhdGZvcm1VUkkgIT0gbnVsbCkKLSAgICAgIHJldHVybiB0b0ZpbGVTeXN0ZW1VUkkoUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UocmVsYXRpdmVQbGF0Zm9ybVVSSSkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b0ZpbGVTeXN0ZW1VUkkoSVJlc291cmNlIHJlcykKLSAgewotICAgIGlmIChyZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJUGF0aCBwYXRoID0gcmVzLmdldExvY2F0aW9uKCk7Ci0gICAgICBpZiAocGF0aCAhPSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBwYXRoLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9DbGllbnRSdW50aW1lRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NsaWVudFJ1bnRpbWVEZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYjA5MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NsaWVudFJ1bnRpbWVEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTA3IDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDIyMTM2NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyOwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50UnVudGltZURlc2NyaXB0b3IKLXsKLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbTsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsV2ViU2VydmljZUNsaWVudEltcGxzOwotICBwcml2YXRlIEhhc2h0YWJsZSBhbGxSdW50aW1lczsKLSAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gIHByaXZhdGUgV2ViU2VydmljZUNsaWVudEltcGwgY2xpZW50SW1wbGVtZW50YXRpb25UeXBlOwotICBwcml2YXRlIFJ1bnRpbWVEZXNjcmlwdG9yIHJ1bnRpbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFJ1bnRpbWVDbGFzc05hbWU7Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VSdW50aW1lIHdlYlNlcnZpY2VSdW50aW1lOwotICBwcml2YXRlIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmVxdWlyZWRGYWNldFZlcnNpb25zOwotICBwcml2YXRlIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9uczsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIHdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgcnVudGltZVByZWZlcnJlZFNlcnZlclR5cGU7Ci0gIAotICBwdWJsaWMgQ2xpZW50UnVudGltZURlc2NyaXB0b3IoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0sIEhhc2h0YWJsZSBhbGxXZWJTZXJ2aWNlQ2xpZW50SW1wbHMsIEhhc2h0YWJsZSBhbGxSdW50aW1lcykKLSAgewotICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gICAgdGhpcy5hbGxXZWJTZXJ2aWNlQ2xpZW50SW1wbHMgPSBhbGxXZWJTZXJ2aWNlQ2xpZW50SW1wbHM7Ci0gICAgdGhpcy5hbGxSdW50aW1lcyA9IGFsbFJ1bnRpbWVzOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUNsaWVudEltcGwgZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCkKLSAgewotICAgIGlmIChjbGllbnRJbXBsZW1lbnRhdGlvblR5cGUgPT0gbnVsbCkKLSAgICB7Ci0gICAgIFN0cmluZyBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZCA9IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZCIpOwotICAgICBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGUgPSAoV2ViU2VydmljZUNsaWVudEltcGwpYWxsV2ViU2VydmljZUNsaWVudEltcGxzLmdldChjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZCk7Ci0gICAgfQotICAgIHJldHVybiBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUNsYXNzTmFtZSgpCi0gIHsKLSAgICBpZiAoY2xpZW50UnVudGltZUNsYXNzTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGNsaWVudFJ1bnRpbWVDbGFzc05hbWUgPSBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsaWVudFJ1bnRpbWVDbGFzc05hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgaWYgKGlkID09IG51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBpZDsKLSAgfQotICAKLSAgcHVibGljIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkKLSAgewotICAgIGlmIChyZXF1aXJlZEZhY2V0VmVyc2lvbnMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBBcnJheUxpc3QgcmVxdWlyZWRGYWNldFZlcnNpb25MaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZmFjZXRFbGVtcyA9IGVsZW0uZ2V0Q2hpbGRyZW4oInJlcXVpcmVkLWZhY2V0LXZlcnNpb24iKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFjZXRFbGVtcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgUmVxdWlyZWRGYWNldFZlcnNpb24gcmZ2ID0gbmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uKCk7Ci0gICAgICAgIElQcm9qZWN0RmFjZXQgcHJvamVjdEZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KGZhY2V0RWxlbXNbaV0uZ2V0QXR0cmlidXRlKCJmYWNldCIpKTsgICAgICAgIAotICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXRWZXJzaW9uID0gcHJvamVjdEZhY2V0LmdldFZlcnNpb24oZmFjZXRFbGVtc1tpXS5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSk7Ci0gICAgICAgIHJmdi5zZXRQcm9qZWN0RmFjZXRWZXJzaW9uKHByb2plY3RGYWNldFZlcnNpb24pOwotICAgICAgICBTdHJpbmcgYWxsb3dOZXdlclZhbHVlID0gZmFjZXRFbGVtc1tpXS5nZXRBdHRyaWJ1dGUoImFsbG93LW5ld2VyIik7Ci0gICAgICAgIGlmIChhbGxvd05ld2VyVmFsdWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJmdi5zZXRBbGxvd05ld2VyKGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZnYuc2V0QWxsb3dOZXdlcihCb29sZWFuLnZhbHVlT2YoYWxsb3dOZXdlclZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdC5hZGQocmZ2KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmVxdWlyZWRGYWNldFZlcnNpb25zID0gKFJlcXVpcmVkRmFjZXRWZXJzaW9uW10pcmVxdWlyZWRGYWNldFZlcnNpb25MaXN0LnRvQXJyYXkobmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uW117fSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXF1aXJlZEZhY2V0VmVyc2lvbnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZXQgZ2V0UHJvamVjdEZhY2V0VmVyc2lvbnMoKQotICB7Ci0gICAgaWYgKHByb2plY3RGYWNldFZlcnNpb25zID09IG51bGwpCi0gICAgewotICAgICBwcm9qZWN0RmFjZXRWZXJzaW9ucyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgIGZvciAoaW50IGk9MDsgaTxyZnYubGVuZ3RoOyBpKyspCi0gICAgIHsKLSAgICAgICBwcm9qZWN0RmFjZXRWZXJzaW9ucy5hZGQocmZ2W2ldLmdldFByb2plY3RGYWNldFZlcnNpb24oKSk7Ci0gICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHByb2plY3RGYWNldFZlcnNpb25zOyAgICAKLSAgfSAgCi0gIAotICBwdWJsaWMgUnVudGltZURlc2NyaXB0b3IgZ2V0UnVudGltZSgpCi0gIHsKLSAgICBpZiAocnVudGltZSA9PSBudWxsKQotICAgIHsKLSAgICAgU3RyaW5nIHJ1bnRpbWVJZCA9IGVsZW0uZ2V0QXR0cmlidXRlKCJydW50aW1lSWQiKTsKLSAgICAgcnVudGltZSA9IChSdW50aW1lRGVzY3JpcHRvcilhbGxSdW50aW1lcy5nZXQocnVudGltZUlkKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBydW50aW1lOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lIGdldFdlYlNlcnZpY2VSdW50aW1lKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlUnVudGltZSA9PSBudWxsKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VSdW50aW1lID0gKElXZWJTZXJ2aWNlUnVudGltZSllbGVtLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciBnZXRDbGllbnRSdW50aW1lQ2hlY2tlcigpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZVJ1bnRpbWVDaGVja2VyID09IG51bGwpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAJaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCJydW50aW1lQ2hlY2tlciIpICE9IG51bGwgKSB7Ci0gICAgICAgIAkJd2ViU2VydmljZVJ1bnRpbWVDaGVja2VyID0gKElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIpZWxlbS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJydW50aW1lQ2hlY2tlciIpOwotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB3ZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci0gIH0gCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCkKLSAgewotICAgIGlmIChydW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSA9PSBudWxsKQotICAgIHsKLSAgICAJcnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUgPSBlbGVtLmdldEF0dHJpYnV0ZSgicnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NsaWVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjNGI1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRUeXBlIHsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgd2ViU2VydmljZUNsaWVudEltcGxzXzsKLSAgICAKLQlwcml2YXRlIFN0cmluZyBpZDsKLQlwcml2YXRlIFdlYlNlcnZpY2VDbGllbnRJbXBsIHdlYlNlcnZpY2VDbGllbnRJbXBsOwotCXByaXZhdGUgU3RyaW5nW10gbW9kdWxlVHlwZXNJbmNsdWRlOwotICBwcml2YXRlIFN0cmluZ1tdIG1vZHVsZVR5cGVzRXhjbHVkZTsKLQkKLSAgCi0gIAotCXB1YmxpYyBDbGllbnRUeXBlKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXywgSGFzaHRhYmxlIHdlYlNlcnZpY2VDbGllbnRJbXBsc18pCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHRoaXMuZWxlbV8gPSBlbGVtXzsKLSAgICB0aGlzLndlYlNlcnZpY2VDbGllbnRJbXBsc18gPSB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfOwotICB9Ci0KLQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgaWYgKGlkPT1udWxsKQotICAgIHsKLSAgICAgIGlkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0KLQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRNb2R1bGVUeXBlc0V4Y2x1ZGUoKQotICB7Ci0gICAgaWYgKG1vZHVsZVR5cGVzRXhjbHVkZT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgibW9kdWxlVHlwZXNFeGNsdWRlIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIG1vZHVsZVR5cGVzRXhjbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kdWxlVHlwZXNFeGNsdWRlLmxlbmd0aDsgaSsrKQotICAgICAgICAgIG1vZHVsZVR5cGVzRXhjbHVkZVtpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbW9kdWxlVHlwZXNFeGNsdWRlOwotICB9Ci0gIAotCi0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0TW9kdWxlVHlwZXNJbmNsdWRlKCkKLSAgewotICAgIGlmIChtb2R1bGVUeXBlc0luY2x1ZGU9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoIm1vZHVsZVR5cGVzSW5jbHVkZSIpOwotICAgICAgaWYgKGF0dHIgIT0gbnVsbCAmJiBhdHRyLmxlbmd0aCgpPjApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYXR0ciwgIiAiKTsKLSAgICAgICAgaW50IHNpemUgPSBzdC5jb3VudFRva2VucygpOwotICAgICAgICBtb2R1bGVUeXBlc0luY2x1ZGUgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1vZHVsZVR5cGVzSW5jbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICBtb2R1bGVUeXBlc0luY2x1ZGVbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1vZHVsZVR5cGVzSW5jbHVkZTsKLSAgfQotICAKLQotCi0KLSAgcHVibGljIFdlYlNlcnZpY2VDbGllbnRJbXBsIGdldFdlYlNlcnZpY2VDbGllbnRJbXBsKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlQ2xpZW50SW1wbD09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3NjaW1wbElkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJpbXBsSWQiKTsKLSAgICAgIHdlYlNlcnZpY2VDbGllbnRJbXBsID0gKFdlYlNlcnZpY2VDbGllbnRJbXBsKXdlYlNlcnZpY2VDbGllbnRJbXBsc18uZ2V0KHdzY2ltcGxJZCk7Ci0gICAgfQotICAgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50SW1wbDsKLSAgfQotICAKLQotCi0gIC8qCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZUNsaWVudFR5cGVJZCgpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZUNsaWVudFR5cGVJZD09bnVsbCkKLSAgICB7Ci0gICAgICB3ZWJTZXJ2aWNlQ2xpZW50VHlwZUlkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJ3ZWJTZXJ2aWNlQ2xpZW50VHlwZUlkIik7Ci0gICAgfQotICAgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50VHlwZUlkOwotICB9Ci0gICovCi0KLQotCQotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNGE2ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0vKioKLSAqIEBhdXRob3IgcnNpbmhhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wdWJsaWMgY2xhc3MgQ29udGV4dCBpbXBsZW1lbnRzIElDb250ZXh0IHsJCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW87Ci0JcHJpdmF0ZSBib29sZWFuIGRldmVsb3A7Ci0JcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlOwotCXByaXZhdGUgYm9vbGVhbiBkZXBsb3k7Ci0JcHJpdmF0ZSBib29sZWFuIGluc3RhbGw7Ci0JcHJpdmF0ZSBib29sZWFuIHJ1bjsKLQlwcml2YXRlIGJvb2xlYW4gY2xpZW50OwotCXByaXZhdGUgYm9vbGVhbiB0ZXN0OwotCXByaXZhdGUgYm9vbGVhbiBwdWJsaXNoOwotCXByaXZhdGUgYm9vbGVhbiBvdmVyV3JpdGVGaWxlczsKLQlwcml2YXRlIGJvb2xlYW4gY3JlYXRlRm9sZGVyczsKLQlwcml2YXRlIGJvb2xlYW4gY2hlY2tPdXRGaWxlczsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZSgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRDaGVja091dEZpbGVzKCkgewotCQlyZXR1cm4gY2hlY2tPdXRGaWxlczsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50KCkgewotCQlyZXR1cm4gY2xpZW50OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRDcmVhdGVGb2xkZXJzKCkgewotCQlyZXR1cm4gY3JlYXRlRm9sZGVyczsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95KCkgewotCQlyZXR1cm4gZGVwbG95OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wKCkgewotCQlyZXR1cm4gZGV2ZWxvcDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbCgpIHsKLQkJcmV0dXJuIGluc3RhbGw7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldE92ZXJXcml0ZUZpbGVzKCkgewotCQlyZXR1cm4gb3ZlcldyaXRlRmlsZXM7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2goKSB7Ci0JCXJldHVybiBwdWJsaXNoOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRSdW4oKSB7Ci0JCXJldHVybiBydW47Ci0JfQotCQotCXB1YmxpYyBXZWJTZXJ2aWNlU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKSB7Ci0JCXJldHVybiBzY2VuYXJpbzsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIHRlc3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QXNzZW1ibGUoYm9vbGVhbiBhc3NlbWJsZSkgewotCQl0aGlzLmFzc2VtYmxlID0gYXNzZW1ibGU7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0Q2hlY2tPdXRGaWxlcyhib29sZWFuIGNoZWNrT3V0RmlsZXMpIHsKLQkJdGhpcy5jaGVja091dEZpbGVzID0gY2hlY2tPdXRGaWxlczsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnQoYm9vbGVhbiBjbGllbnQpIHsKLQkJdGhpcy5jbGllbnQgPSBjbGllbnQ7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVycyhib29sZWFuIGNyZWF0ZUZvbGRlcnMpIHsKLQkJdGhpcy5jcmVhdGVGb2xkZXJzID0gY3JlYXRlRm9sZGVyczsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3koYm9vbGVhbiBkZXBsb3kpIHsKLQkJdGhpcy5kZXBsb3kgPSBkZXBsb3k7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcChib29sZWFuIGRldmVsb3ApIHsKLQkJdGhpcy5kZXZlbG9wID0gZGV2ZWxvcDsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRJbnN0YWxsKGJvb2xlYW4gaW5zdGFsbCkgewotCQl0aGlzLmluc3RhbGwgPSBpbnN0YWxsOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldE92ZXJXcml0ZUZpbGVzKGJvb2xlYW4gb3ZlcldyaXRlRmlsZXMpIHsKLQkJdGhpcy5vdmVyV3JpdGVGaWxlcyA9IG92ZXJXcml0ZUZpbGVzOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldFB1Ymxpc2goYm9vbGVhbiBwdWJsaXNoKSB7Ci0JCXRoaXMucHVibGlzaCA9IHB1Ymxpc2g7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0UnVuKGJvb2xlYW4gcnVuKSB7Ci0JCXRoaXMucnVuID0gcnVuOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldFNjZW5hcmlvKFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbykgewotCQl0aGlzLnNjZW5hcmlvID0gc2NlbmFyaW87Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0VGVzdChib29sZWFuIHRlc3QpIHsKLQkJdGhpcy50ZXN0ID0gdGVzdDsKLQl9CQkKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9GYWNldE1hdGNoQ2FjaGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9GYWNldE1hdGNoQ2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzZDlmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvRmFjZXRNYXRjaENhY2hlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAoaW5pdGlhbCBjcmVhdGlvbikKLSAqIDIwMDYwNDI2ICAgMTM4MDUxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNyAgIDEyNjc4MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWU7Ci0KLS8qKgotICogRmFjZXRNYXRjaENhY2hlIGNhY2hlcyByZXN1bHRzIG9mIGNhbGN1bGF0aW9ucyBtYWRlIHJlc3BlY3RpbmcKLSAqIHRoZSBzdWl0YWJpbGl0eSBvZiBwcm9qZWN0cyBhbmQgcHJvamVjdCB0eXBlcyBmb3Igc2VydmljZVJ1bnRpbWVzCi0gKiBhbmQgY2xpZW50UnVudGltZXMuCi0gKiAKLSAqIDxici8+PGJyLz4KLSAqIFRlbWlub2xvZ3kgdXNlZCBpbiB0aGUgamF2YWRvYyBpbiB0aGlzIGNsYXNzOgotICogPHVsPgotICogPGxpPjxiPnNlcnZpY2VSdW50aW1lPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjwvbGk+Ci0gKiA8bGk+PGI+Y2xpZW50UnVudGltZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LkNsaWVudFJ1bnRpbWVEZXNjcmlwdG9yPC9saT4KLSAqIDwvdWw+Ci0gKgotICovCi1wdWJsaWMgY2xhc3MgRmFjZXRNYXRjaENhY2hlIGltcGxlbWVudHMgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIKLXsKLSAgLy9zaW5nbGUgaW5zdGFuY2UgcGVyIHdvcmtiZW5jaAotICBwcml2YXRlIHN0YXRpYyBGYWNldE1hdGNoQ2FjaGUgaW5zdGFuY2VfOwotICAKLSAgCi0gIC8vVGFibGVzIHJlbGF0ZWQgdG8gZXhpc3RpbmcgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZQotICAKLSAgLy9zZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXzogCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBGb3J3YXJkIHNsYXNoIHNlcGFyYXRlZCBjb25jYXRlbmF0aW9uIG9mIGEgc2VydmljZVJ1bnRpbWVJZCBhbmQgYSBwcm9qZWN0TmFtZSAKLSAgLy8gICAgIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmphdmEvd3ApLgotICAvL3ZhbHVlOiBPYmplY3Qgb2YgdHlwZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0TWF0Y2hlci4KLSAgLy8gICAgICAgVGhlIEZhY2V0TWF0Y2hlciBjb250YWlucyB0aGUgbWF0Y2hpbmcgY2hhcmFjdGVyaXN0aWNzIGNhbGN1bGF0ZWQgZm9yIHRoZSAKLSAgLy8gICAgICAgc2VydmljZVJ1bnRpbWUgYW5kIHByb2plY3QgaW4gdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV87Ci0gIAotICAvL3NlcnZpY2VUYWJsZUtleXNCeVByb2plY3ROYW1lXzogCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBwcm9qZWN0IG5hbWUgKGUuZy4gd3ApCi0gIC8vdmFsdWU6IFNldCBvZiBlbGVtZW50cyBvZiB0eXBlIFN0cmluZy4gVGhlIFN0cmluZ3MgaW4gdGhlIFNldCBhcmUga2V5cyBmcm9tIHRoZSBzZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXyAKLSAgLy8gICAgICAgdGhhdCBjb250YWluIHRoZSBwcm9qZWN0IG5hbWUgKGUuZy4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uamF2YS93cCkuIFVzZWQgdG8gcmFwaWRseQotICAvLyAgICAgICBkZWxldGUgZW50cmllcyBmcm9tIHNlcnZpY2VGYWNldE1hdGNoVGFibGVfIGFmdGVyIGEgcHJvamVjdCBpcyBkZWxldGVkIGZyb20gdGhlIHdvcmtzcGFjZS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfOwotICAKLSAgLy9jbGllbnRGYWNldE1hdGNoVGFibGVfOwotICAvL2tleTogT2JqZWN0IG9mIHR5cGUgU3RyaW5nLgotICAvLyAgICAgZm9yd2FyZCBzbGFzaCBzZXBhcmF0ZWQgY29uY2F0ZW5hdGlvbiBvZiBhIGNsaWVudFJ1bnRpbWVJZCBhbmQgYSBwcm9qZWN0TmFtZSAKLSAgLy8gICAgIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEvd3ApCi0gIC8vdmFsdWU6IE9iamVjdCBvZiB0eXBlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyCi0gIC8vICAgICAgIFRoZSBGYWNldE1hdGNoZXIgY29udGFpbnMgdGhlIG1hdGNoaW5nIGNoYXJhY3RlcmlzdGljcyBjYWxjdWxhdGVkIGZvciB0aGUgCi0gIC8vICAgICAgIGNsaWVudFJ1bnRpbWUgYW5kIHByb2plY3QgaW4gdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgY2xpZW50RmFjZXRNYXRjaFRhYmxlXzsKLSAgCi0gIC8vY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV8KLSAgLy9rZXk6IE9iamVjdCBvZiB0eXBlIFN0cmluZy4KLSAgLy8gICAgIHByb2plY3QgbmFtZSAoZS5nLiB3cCkKLSAgLy92YWx1ZTogU2V0IG9mIGVsZW1lbnRzIG9mIHR5cGUgU3RyaW5nLiBUaGUgU3RyaW5ncyBpbiB0aGUgU2V0IGFyZSBrZXlzIGZyb20gdGhlIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8gCi0gIC8vICAgICAgIHRoYXQgY29udGFpbiB0aGUgcHJvamVjdCBuYW1lIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEvd3ApLiBVc2VkIHRvIHJhcGlkbHkKLSAgLy8gICAgICAgZGVsZXRlIGVudHJpZXMgZnJvbSBjbGllbnRGYWNldE1hdGNoVGFibGVfIGFmdGVyIGEgcHJvamVjdCBpcyBkZWxldGVkIGZyb20gdGhlIHdvcmtzcGFjZS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV87Ci0gIAotICAvL3Byb2plY3RFbnRyaWVzVG9EZWxldGVfOiBlbGVtZW50cyBvZiB0eXBlIFN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBwcm9qZWN0cyB0aGF0IGhhdmUKLSAgLy9iZWVuIGRlbGV0ZWQgZnJvbSB0aGUgd29ya3NwYWNlIGJ1dCB0aGVpciBjb3JyZXNwb25kaW5nIGVudHJpZXMgZnJvbSBzZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXyAKLSAgLy9hbmQgY2xpZW50RmFjZXRNYXRjaFRhYmxlXyBoYXZlIHlldCB0byBiZSBkZWxldGVkLgotICBwcml2YXRlIExpc3QgcHJvamVjdEVudHJpZXNUb0RlbGV0ZV87Ci0gICAgCi0gIAotICAKLSAgLy9UYWJsZXMgcmVsYXRlZCB0byB0ZW1wbGF0ZXMgIAotICAKLSAgLy90ZW1wbGF0ZXNCeVNlcnZpY2VSdW50aW1lSWRfOgotICAvL2tleTogT2JqZWN0IG9mIHR5cGUgU3RyaW5nLgotICAvLyAgICAgc2VydmljZVJ1bnRpbWUgaWQKLSAgLy92YWx1ZTogU2V0IG9mIGVsZW1lbnRzIG9mIHR5cGUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgICAKLSAgLy8gICAgICAgVGhpcyB0aGUgc2V0IG9mIHRlbXBsYXRlcyB0aGF0IHN1cHBvcnQgdGhlIHNlcnZpY2VSdW50aW1lIGlkZW50aWZpZWQgYnkgdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgdGVtcGxhdGVzQnlTZXJ2aWNlUnVudGltZUlkXzsKLSAgCi0gIC8vdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBjbGllbnRSdW50aW1lIGlkCi0gIC8vdmFsdWU6IFNldCBvZiBlbGVtZW50cyBvZiB0eXBlIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlCi0gIC8vICAgICAgIFRoaXMgdGhlIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdCBzdXBwb3J0IHRoZSBjbGllbnRSdW50aW1lIGlkZW50aWZpZWQgYnkgdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfOwotICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIEZhY2V0TWF0Y2hDYWNoZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBGYWNldE1hdGNoQ2FjaGUgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBGYWNldE1hdGNoQ2FjaGUoKTsKLSAgICAgIGluc3RhbmNlXy5sb2FkKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7ICAgIAotICAgIGNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHByb2plY3RFbnRyaWVzVG9EZWxldGVfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHRlbXBsYXRlc0J5Q2xpZW50UnVudGltZUlkXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0ZW1wbGF0ZXNCeVNlcnZpY2VSdW50aW1lSWRfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAotICAgIC8vTGlzdGVuIGZvciBkZWxldGlvbnMgb2YgcHJvamVjdHMgaW4gb3JkZXIgdG8gZGVsZXRlIGFsbCBlbnRyaWVzIGluCi0gICAgLy9IYXNodGFibGVzIGZvciB0aGUgZGVsZXRlZCBwcm9qZWN0LgotICAgIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHRoaXMsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBSRV9ERUxFVEUpOwotICB9Ci0gIAotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIEZhY2V0TWF0Y2hlciByZXN1bHRpbmcgZnJvbSBtYXRjaGluZyBhIHNlcnZpY2VSdW50aW1lIG9yIGNsaWVudFJ1bnRpbWUgd2l0aCBhbiBleGlzdGluZyBwcm9qZWN0LgotICAgKiBAcGFyYW0gaXNDbGllbnQgdHJ1ZSBpZiBydW50aW1lSWQgaXMgYSBjbGllbnRSdW50aW1lSWQuIGZhbHNlIGlmIHJ1bnRpbWVJZCBpcyBhIHNlcnZpY2VSdW50aW1lSWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgdGhlIGlkIG9mIGEgY2xpZW50UnVudGltZSBpZiBpc0NsaWVudCBpcyB0cnVlIG9yIHRoZSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIGlmCi0gICAqIGlzQ2xpZW50IGlzIGZhbHNlLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcHJvamVjdC4KLSAgICogCi0gICAqIEByZXR1cm5zIEZhY2V0TWF0Y2hlciByZXN1bHRpbmcgZnJvbSBjYWxsaW5nIEZhY2V0VXRpbHMubWF0Y2goLi4pIHVzaW5nIHRoZSBzZXJ2aWNlUnVudGltZSBvciBjbGllbnRSdW50aW1lIGlkCi0gICAqIGFuZCB0aGUgcHJvamVjdCBuYW1lLiBSZXR1cm5zIG51bGwgaWYgdGhlIHByb2plY3QgZG9lc24ndCBleGlzdC4gTm9uLWZhY2V0ZWQgZXhpc3RpbmcgcHJvamVjdHMgd2lsbCBhbHdheXMgcmVzdWx0Ci0gICAqIGluIGEgRmFjZXRNYXRjaGVyIHdpdGggaXNNYXRjaCgpIGVxdWFsIHRvIGZhbHNlICh3aXRoIHRoZSBleGNlcHRpb24gb2YgSmF2YSBwcm9qZWN0cyB3aGljaCBhcmUgYSBzcGVjaWFsIGNhc2UgCi0gICAqIC0gc2VlIEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdCgpKS4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgRmFjZXRNYXRjaGVyIGdldE1hdGNoRm9yUHJvamVjdChib29sZWFuIGlzQ2xpZW50LCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsgICAgCi0gICAgLy9EZWxldGUgZW50cmllcyBmcm9tIHRhYmxlcyBpZiB0aGVyZSBhcmUgZGVsZXRpb25zIHBlbmRpbmcuCi0gICAgaWYgKHByb2plY3RFbnRyaWVzVG9EZWxldGVfLnNpemUoKSA+IDApCi0gICAgewotICAgICAgSXRlcmF0b3IgcHJvamVjdEl0ciA9IHByb2plY3RFbnRyaWVzVG9EZWxldGVfLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShwcm9qZWN0SXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lVG9EZWxldGUgPSAoU3RyaW5nKXByb2plY3RJdHIubmV4dCgpOwotICAgICAgIAotICAgICAgICAvL0RlbGV0ZSBlbnRyaWVzIGZyb20gY2xpZW50IHRhYmxlCi0gICAgICAgIHJlbW92ZVRhYmxlRW50cmllc0ZvclByb2plY3QodHJ1ZSwgcHJvamVjdE5hbWVUb0RlbGV0ZSk7Ci0gICAgICAgIAotICAgICAgICAvL0RlbGV0ZSBlbnRyaWVzIGZyb20gc2VydmljZSB0YWJsZQotICAgICAgICByZW1vdmVUYWJsZUVudHJpZXNGb3JQcm9qZWN0KGZhbHNlLCBwcm9qZWN0TmFtZVRvRGVsZXRlKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9DbGVhciB0aGUgcHJvamVjdEVudHJpZXNUb0RlbGV0ZSBsaXN0Ci0gICAgICBwcm9qZWN0RW50cmllc1RvRGVsZXRlXy5jbGVhcigpOwotICAgIH0KLSAgICAKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBGYWNldE1hdGNoZXIgZm0gPSBudWxsOwotICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcga2V5ID0gZ2V0S2V5KHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOwotICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgewotICAgICAgICBmbSA9IChGYWNldE1hdGNoZXIpIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8uZ2V0KGtleSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGZtID0gKEZhY2V0TWF0Y2hlcikgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8uZ2V0KGtleSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChmbSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUaGlzIGNvbWJpbmF0aW9uIGhhcyBub3QgeWV0IGJlZW4gY2FsY3VsYXRlZCBhbmQgY2FjaGVkIHNvIGNhbGN1bGF0ZSBpdCBhbmQgY2FjaGUgaXQuICAgICAgICAKLSAgICAgICAgZm0gPSBjYWxjdWxhdGVGYWNldE1hdGNoZXIoaXNDbGllbnQsIHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOyAgICAgICAgIAotICAgICAgICBpZiAoaXNDbGllbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBjbGllbnRGYWNldE1hdGNoVGFibGVfLnB1dChrZXksZm0pOyAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8ucHV0KGtleSwgZm0pOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVRhYmxlT2ZLZXlzKGlzQ2xpZW50LCBrZXksIHByb2plY3ROYW1lKTsKLSAgICAgICAgCi0gICAgICB9IGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHByb2plY3QncyBmYWNldHMgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlCi0gICAgICAgIC8vIGZhY2V0cyB3ZXJlIGNhbGN1bGF0ZWQsIHJlZnJlc2ggdGhlIGZhY2V0TWF0Y2hlci4gICAgICAgIAotICAgICAgICBTZXQgY3VycmVudEZhY2V0VmVyc2lvbnMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBTZXQgcHJldmlvdXNGYWNldFZlcnNpb25zID0gZm0uZ2V0RmFjZXRzVGVzdGVkKCk7Ci0gICAgICAgIGlmICghY3VycmVudEZhY2V0VmVyc2lvbnMuZXF1YWxzKHByZXZpb3VzRmFjZXRWZXJzaW9ucykpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3JlY2FsY3VsYXRlIGFuZCBjYWNoZSB0aGUgRmFjZXRNYXRjaGVyCi0gICAgICAgICAgZm0gPSBjYWxjdWxhdGVGYWNldE1hdGNoZXIoaXNDbGllbnQsIHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOwotICAgICAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjbGllbnRGYWNldE1hdGNoVGFibGVfLnB1dChrZXksZm0pOyAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8ucHV0KGtleSwgZm0pOwotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmbTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBVcGRhdGVzIHNlcnZpY2VUYWJsZUtleXNCeVByb2plY3ROYW1lXyBvciBjbGllbnRUYWJsZUtleXNCeVByb2plY3ROYW1lXyB3aXRoCi0gICAqIHRoZSBwcm92aWRlZCBwcm9qZWN0IG5hbWUgYW5kIGtleS4gVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgZW50cnkgaXMgCi0gICAqIGFkZGVkIHRvIHNlcnZpY2VGYWNldE1hdGNoVGFibGVfIG9yIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8uCi0gICAqIEBwYXJhbSBpc0NsaWVudCB0cnVlIGlmIHJ1bnRpbWVJZCBpcyBhIGNsaWVudFJ1bnRpbWVJZC4gZmFsc2UgaWYgcnVudGltZUlkIGlzIGEgc2VydmljZVJ1bnRpbWVJZC4KLSAgICogQHBhcmFtIGtleSAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lCi0gICAqLwotICBwcml2YXRlIHZvaWQgdXBkYXRlVGFibGVPZktleXMoYm9vbGVhbiBpc0NsaWVudCwgU3RyaW5nIGtleSwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU2V0IHNldE9mS2V5c0ZvclByb2plY3ROYW1lID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnQpCi0gICAgewotICAgICAgc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUgPSAoU2V0KWNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9IChTZXQpc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vQWRkIGFuIGVudHJ5IGluIHRoZSB0YWJsZSBmb3IgdGhpcyBwcm9qZWN0LgotICAgICAgU2V0IGtleXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAga2V5cy5hZGQoa2V5KTsKLSAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgIHsKLSAgICAgICAgY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV8ucHV0KHByb2plY3ROYW1lLCBrZXlzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLnB1dChwcm9qZWN0TmFtZSwga2V5cyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1VwZGF0ZSB0aGUgZW50cnkgaW4gdGhlIHRhYmxlIGZvciB0aGlzIHByb2plY3QuCi0gICAgICBzZXRPZktleXNGb3JQcm9qZWN0TmFtZS5hZGQoa2V5KTsgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgRmFjZXRNYXRjaGVyfSBjYWxjdWxhdGVkIGZvciB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUgb3IgY2xpZW50UnVudGltZSBhbmQgcHJvamVjdAotICAgKiBAcGFyYW0gaXNDbGllbnQgdHJ1ZSBpZiBydW50aW1lSWQgaXMgYSBjbGllbnRSdW50aW1lSWQuIGZhbHNlIGlmIHJ1bnRpbWVJZCBpcyBhIHNlcnZpY2VSdW50aW1lSWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgdGhlIGlkIG9mIGEgY2xpZW50UnVudGltZSBpZiBpc0NsaWVudCBpcyB0cnVlIG9yIHRoZSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIGlmCi0gICAqIGlzQ2xpZW50IGlzIGZhbHNlLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcHJvamVjdC4KLSAgICogQHJldHVybiBGYWNldE1hdGNoZXIgcmVzdWx0aW5nIGZyb20gY2FsbGluZyBGYWNldFV0aWxzLm1hdGNoKC4uKSB1c2luZyB0aGUgc2VydmljZVJ1bnRpbWUgb3IgY2xpZW50UnVudGltZSBpZAotICAgKiBhbmQgdGhlIHByb2plY3QgbmFtZS4gUmV0dXJucyBudWxsIGlmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QuIE5vbi1mYWNldGVkIGV4aXN0aW5nIHByb2plY3RzIHdpbGwgYWx3YXlzIHJlc3VsdAotICAgKiBpbiBhIEZhY2V0TWF0Y2hlciB3aXRoIGlzTWF0Y2goKSBlcXVhbCB0byBmYWxzZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIEphdmEgcHJvamVjdHMgd2hpY2ggYXJlIGEgc3BlY2lhbCBjYXNlIAotICAgKiAtIHNlZSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QoKSkuCi0gICAqLwotICBwcml2YXRlIEZhY2V0TWF0Y2hlciBjYWxjdWxhdGVGYWNldE1hdGNoZXIoYm9vbGVhbiBpc0NsaWVudCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZtID0gbnVsbDsKLSAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdnMgPSBudWxsOwotICAgIGlmIChpc0NsaWVudCkKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICByZnZzID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChydW50aW1lSWQpOwotICAgICAgcmZ2cyA9IGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgfQotICAgIAotICAgIFNldCBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZiAoZmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIGZtID0gbmV3IEZhY2V0TWF0Y2hlcigpOwotICAgICAgZm0uc2V0TWF0Y2goZmFsc2UpOwotICAgICAgcmV0dXJuIGZtOwotICAgIH0gICAgCi0gICAgCi0gICAgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJmdnMsIGZhY2V0VmVyc2lvbnMpOwotICAgIAotICAgIC8vIENoZWNrIGlmIHRoZSBmYWNldCBydW50aW1lIHJlcXVpcmVkIGJ5IHRoZSByZXF1aXJlZCBmYWNldCBpcyBzdXBwb3J0ZWQKLSAgICAvLyBieSB0aGUgcHJvamVjdCB3aXRob3V0IGNoYW5pbmcgaXQncyBjdXJyZW50IGZhY2V0IHJ1bnRpbWUKLSAgICAKLSAgICBJUnVudGltZSBmUHJvamVjdFJ1bnRpbWUgPSBGYWNldFV0aWxzLmdldEZhY2V0UnVudGltZUZvclByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGlmIChmUHJvamVjdFJ1bnRpbWUgIT0gbnVsbCkgewotICAgIAlTdHJpbmcgZlByb2plY3RSdW50aW1lTmFtZSA9IGZQcm9qZWN0UnVudGltZS5nZXROYW1lKCk7Ci0gICAgCWJvb2xlYW4gcHJvamVjdFN1cHBvcnRSZXF1aXJlZEZhY2V0UnVudGltZSA9IGZhbHNlOwotICAgIAlTZXQgcnRzID0gRmFjZXRVdGlscy5nZXRSdW50aW1lcyhyZnZzKTsKLSAgICAJZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHJ0cy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCkgJiYgIXByb2plY3RTdXBwb3J0UmVxdWlyZWRGYWNldFJ1bnRpbWU7KSB7Ci0gICAgCQlJUnVudGltZSBmUmVxdWlyZWRSdW50aW1lID0gKElSdW50aW1lKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgCQlpZiAoZlJlcXVpcmVkUnVudGltZSAhPSBudWxsKSB7Ci0gICAgCQkJaWYgKGZSZXF1aXJlZFJ1bnRpbWUuZ2V0TmFtZSgpLmVxdWFscyhmUHJvamVjdFJ1bnRpbWVOYW1lKSkgewotICAgIAkJCQlwcm9qZWN0U3VwcG9ydFJlcXVpcmVkRmFjZXRSdW50aW1lID0gdHJ1ZTsKLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLQotICAgIAkvLyBpZiBwcm9qZWN0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIGZhY2V0IHJ1bnRpbWUsIHNldCBGYWNldE1hdGNoIG1hdGNoIHRvIGZhbHNlCi0gICAgCWlmICghcHJvamVjdFN1cHBvcnRSZXF1aXJlZEZhY2V0UnVudGltZSkgewotICAgIAkJZm0uc2V0TWF0Y2goZmFsc2UpOwotICAgIAl9Ci0gICAgfQotICAgIHJldHVybiBmbTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldEtleShTdHJpbmcgYSwgU3RyaW5nIGIpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIga2V5c2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAga2V5c2IuYXBwZW5kKGEpOwotICAgIGtleXNiLmFwcGVuZCgiLyIpOwotICAgIGtleXNiLmFwcGVuZChiKTsgICAgCi0gICAgcmV0dXJuIGtleXNiLnRvU3RyaW5nKCk7ICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGFsbCB0YWJsZSBlbnRyaWVzIGluIHRoaXMgY2FjaGUgZm9yIHRoZSBnaXZlbiBwcm9qZWN0Ci0gICAqIEBwYXJhbSBpc0NsaWVudCB0cnVlIHRvIHJlbW92ZSBlbnRyaWVzIGZyb20gY2xpZW50IHNpZGUgdGFibGVzLiBmYWxzZSB0byByZW1vdmUgZW50cmllcyBmcm9tIHNlcnZpY2Ugc2lkZSB0YWJsZXMKLSAgICogQHBhcmFtIHByb2plY3ROYW1lCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVtb3ZlVGFibGVFbnRyaWVzRm9yUHJvamVjdChib29sZWFuIGlzQ2xpZW50LCBTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgICAvL0ZpcnN0IHJlbW92ZSB0aGUgZW50cmllcyBmcm9tIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8gb3Igc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8KLSAgICAvL3RoYXQgaGF2ZSBrZXlzIGNvbnRhaW5pbmcgdGhpcyBwcm9qZWN0IG5hbWUuCi0gICAgU2V0IHNldE9mS2V5c0ZvclByb2plY3ROYW1lID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnQpCi0gICAgewotICAgICAgc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUgPSAoU2V0KWNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9IChTZXQpc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChzZXRPZktleXNGb3JQcm9qZWN0TmFtZSAhPSBudWxsKQotICAgIHsgCi0gICAgICBJdGVyYXRvciBrZXlzSXRyID0gc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChrZXlzSXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5c0l0ci5uZXh0KCk7Ci0gICAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgICAgeyAKLSAgICAgICAgICBjbGllbnRGYWNldE1hdGNoVGFibGVfLnJlbW92ZShrZXkpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXy5yZW1vdmUoa2V5KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvL1NlY29uZCwgcmVtb3ZlIHRoZSBlbnRyeSBpbiBjbGllbnRUYWJsZUtleXNCeVByb2plY3ROYW1lXyBvciBzZXJ2aWNlVGFibGVLZXlzQnlQcm9qZWN0TmFtZV8KLSAgICAgIC8vd2l0aCB0aGlzIHByb2plY3ROYW1lIGFzIHRoZSBrZXkuCi0gICAgICBpZiAoaXNDbGllbnQpCi0gICAgICB7Ci0gICAgICAgIGNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLnJlbW92ZShwcm9qZWN0TmFtZSk7ICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLnJlbW92ZShwcm9qZWN0TmFtZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHNldCBvZiB0ZW1wbGF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBnaXZlbiBjbGllbnRSdW50aW1lCi0gICAqIEBwYXJhbSBjbGllbnRSdW50aW1lSWQgaWQgb2YgYSBjbGllbnRSdW50aW1lCi0gICAqIEByZXR1cm5zIFNldCAoZWxlbWVudHR5cGU6IElGYWNldGVkUHJvamVjdFRlbXBsYXRlKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCBTZXQgZ2V0VGVtcGxhdGVzRm9yQ2xpZW50UnVudGltZShTdHJpbmcgY2xpZW50UnVudGltZUlkKQotICB7Ci0gICAgU2V0IHRlbXBsYXRlcyA9IChTZXQpdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfLmdldChjbGllbnRSdW50aW1lSWQpOwotICAgIGlmICh0ZW1wbGF0ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvL1JldHVybiB0aGUgY2FjaGVkIHNldCBvZiB0ZW1wbGF0ZXMuCi0gICAgICByZXR1cm4gdGVtcGxhdGVzOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy9DYWxjdWxhdGUgdGhlIHRlbXBsYXRlcywgY2FjaGUgdGhlbSBmb3IgbGF0ZXIgdXNlLCBhbmQgcmV0dXJuIHRoZW0uCi0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgICBTZXQgdmFsaWRUZW1wbGF0ZXMgPSBnZXRUZW1wbGF0ZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICB0ZW1wbGF0ZXNCeUNsaWVudFJ1bnRpbWVJZF8ucHV0KGNsaWVudFJ1bnRpbWVJZCwgdmFsaWRUZW1wbGF0ZXMpOwotICAgICAgcmV0dXJuIHZhbGlkVGVtcGxhdGVzOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzZXQgb2YgdGVtcGxhdGVzIHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUKLSAgICogQHBhcmFtIHNlcnZpY2VSdW50aW1lSWQgaWQgb2YgYSBzZXJ2aWNlUnVudGltZQotICAgKiBAcmV0dXJucyBTZXQgKGVsZW1lbnR0eXBlOiBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSkKLSAgICovICAKLSAgcHVibGljIHN5bmNocm9uaXplZCBTZXQgZ2V0VGVtcGxhdGVzRm9yU2VydmljZVJ1bnRpbWUoU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQpCi0gIHsKLSAgICBTZXQgdGVtcGxhdGVzID0gKFNldCl0ZW1wbGF0ZXNCeVNlcnZpY2VSdW50aW1lSWRfLmdldChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICBpZiAodGVtcGxhdGVzICE9IG51bGwpCi0gICAgewotICAgICAgLy9SZXR1cm4gdGhlIGNhY2hlZCBzZXQgb2YgdGVtcGxhdGVzLgotICAgICAgcmV0dXJuIHRlbXBsYXRlczsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vQ2FsY3VsYXRlIHRoZSB0ZW1wbGF0ZXMsIGNhY2hlIHRoZW0gZm9yIGxhdGVyIHVzZSwgYW5kIHJldHVybiB0aGVtLgotICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgICAgU2V0IHZhbGlkVGVtcGxhdGVzID0gZ2V0VGVtcGxhdGVzKGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkpOwotICAgICAgdGVtcGxhdGVzQnlTZXJ2aWNlUnVudGltZUlkXy5wdXQoc2VydmljZVJ1bnRpbWVJZCwgdmFsaWRUZW1wbGF0ZXMpOwotICAgICAgcmV0dXJuIHZhbGlkVGVtcGxhdGVzOwotICAgIH0KLSAgfQotIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdCBzdXBwb3J0ZWQgdGhlIGdpdmVuIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLgotICAgKiBAcGFyYW0gcmVxdWlyZWRGYWNldFZlcnNpb25zCi0gICAqIEByZXR1cm4gU2V0IGNvbnRhaW5pbmcgZWxlbWV0cyBvZiB0eXBlIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uCi0gICAqLwotICBwcml2YXRlIFNldCBnZXRUZW1wbGF0ZXMoUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICBTZXQgdGVtcGxhdGVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAKLSAgICBmb3IoIEl0ZXJhdG9yIGl0ciA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlcygpLml0ZXJhdG9yKCk7IGl0ci5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICAgIGZpbmFsIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gKElGYWNldGVkUHJvamVjdFRlbXBsYXRlKSBpdHIubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGVtcGxhdGVJZCA9IHRlbXBsYXRlLmdldElkKCk7Ci0gICAgICAgIGlmICh0ZW1wbGF0ZUlkLmluZGV4T2YoImVhciIpID09IC0xICYmIHRlbXBsYXRlSWQuaW5kZXhPZigid3N0LndlYiIpID09IC0xKSAvL0Rvbid0IGluY2x1ZGUgdGhlIEVBUnMhIQotICAgICAgICB7ICAgICAgICAgICAKLSAgICAgICAgICBTZXRbXSBjb21iaW5hdGlvbnMgPSBGYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRGYWNldFZlcnNpb25Db21iaW5hdGlvbnNGcm9tVGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNvbWJpbmF0aW9ucy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJlcXVpcmVkRmFjZXRWZXJzaW9ucywgY29tYmluYXRpb25zW2ldKTsKLSAgICAgICAgICAgIGlmIChmbS5pc01hdGNoKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vRm91bmQgYSBjb21iaW5hdGlvbiB0aGF0IHdvcmtlZC4gQWRkIHRoZSB0ZW1wbGF0ZSB0byB0aGUgbGlzdCBhbmQgbW92ZSBvbi4KLSAgICAgICAgICAgICAgdGVtcGxhdGVzLmFkZCh0ZW1wbGF0ZSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gICAgCi0gICAgCi0gICAgcmV0dXJuIHRlbXBsYXRlczsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkKLSAgewotICAgIGlmIChldmVudC5nZXRUeXBlKCkgPT0gSVJlc291cmNlQ2hhbmdlRXZlbnQuUFJFX0RFTEVURSkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2UgcHJvamVjdFJlc291cmNlID0gZXZlbnQuZ2V0UmVzb3VyY2UoKTsKLSAgICAgIGlmIChwcm9qZWN0UmVzb3VyY2UhPW51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3RSZXNvdXJjZS5nZXROYW1lKCk7Ci0gICAgICAgIAotICAgICAgICAvL0FkZCB0aGlzIHByb2plY3QgbmFtZSB0byB0aGUgbGlzdCBvZiBwcm9qZWN0IGVudHJpZXMKLSAgICAgICAgLy90byBkZWxldGUuIE5leHQgdGltZSBnZXRNYXRjaEZvclByb2plY3QgaXMgY2FsbGVkIGFsbAotICAgICAgICAvL2VudHJpZXMgZm9yIHRoaXMgcHJvamVjdCBmcm9tIGFsbCB0YWJsZXMgaW4gdGhpcyBjYWNoZSAKLSAgICAgICAgLy93aWxsIGJlIGRlbGV0ZWQuCi0gICAgICAgIHByb2plY3RFbnRyaWVzVG9EZWxldGVfLmFkZChwcm9qZWN0TmFtZSk7Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvUnVudGltZURlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9SdW50aW1lRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzJiYjM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9SdW50aW1lRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUnVudGltZURlc2NyaXB0b3IKLXsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtOwotICBwcml2YXRlIFN0cmluZyBpZDsKLSAgcHJpdmF0ZSBTdHJpbmcgbGFiZWw7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlclJlcXVpcmVkU3RyaW5nOwotICBwcml2YXRlIGJvb2xlYW4gc2VydmVyUmVxdWlyZWQ7Ci0gIAotCi0gIHB1YmxpYyBSdW50aW1lRGVzY3JpcHRvcihJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSkKLSAgewotICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgaWYgKGlkID09IG51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkKLSAgewotICAgIGlmIChsYWJlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIGxhYmVsID0gZWxlbS5nZXRBdHRyaWJ1dGUoImxhYmVsIik7Ci0gICAgfQotICAgIHJldHVybiBsYWJlbDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEoyZWVMZXZlbHMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmdbXXsiMTMiLCAiMTQifTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmVyUmVxdWlyZWQoKQotICB7Ci0gICAgaWYgKHNlcnZlclJlcXVpcmVkU3RyaW5nID09IG51bGwpCi0gICAgeyAgICAgCi0gICAgICAvL0RlZmF1bHRzIHRvIHRydWUgaWYgdGhlIGV4dGVuc2lvbiBvbWl0cyB0aGlzIGF0dHJpYnV0ZQotICAgICAgc2VydmVyUmVxdWlyZWQgPSB0cnVlOwotCi0gICAgICBzZXJ2ZXJSZXF1aXJlZFN0cmluZyA9IGVsZW0uZ2V0QXR0cmlidXRlKCJzZXJ2ZXJSZXF1aXJlZCIpOwotICAgICAgaWYgKHNlcnZlclJlcXVpcmVkU3RyaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNlcnZlclJlcXVpcmVkID0gQm9vbGVhbi52YWx1ZU9mKHNlcnZlclJlcXVpcmVkU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAKLSAgICB9ICAgIAotICAgIHJldHVybiBzZXJ2ZXJSZXF1aXJlZDsgICAgCi0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvU2VsZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvU2VsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMTQ1NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlbGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFNlbGVjdGlvbiBpbXBsZW1lbnRzIElTZWxlY3Rpb24gewotCi0JcHJpdmF0ZSBPYmplY3RbXSBzZWxlY3Rpb247Ci0JCi0JcHVibGljIE9iamVjdFtdIGdldFNlbGVjdGlvbigpIAotCXsKLQkJcmV0dXJuIHNlbGVjdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKE9iamVjdFtdIHNlbGVjdGlvbikKLQl7Ci0JCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlcnZpY2VSdW50aW1lRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlcnZpY2VSdW50aW1lRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2UzNGVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlUnVudGltZURlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MDIgICAxNTIxNTAgbWFodXRjaEBjYS5pYm0uY29tCi0gKiAyMDA3MTEwNyAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjIxMzY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcgotewotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtOwotICBwcml2YXRlIEhhc2h0YWJsZSBhbGxXZWJTZXJ2aWNlSW1wbHM7Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGFsbFJ1bnRpbWVzOwotICBwcml2YXRlIFN0cmluZyBpZDsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlSW1wbCBzZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlOwotICBwcml2YXRlIFJ1bnRpbWVEZXNjcmlwdG9yIHJ1bnRpbWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBib3R0b21VcCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdG9wRG93biA9IGZhbHNlOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUnVudGltZUNsYXNzTmFtZTsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZVJ1bnRpbWUgd2ViU2VydmljZVJ1bnRpbWU7Ci0gIHByaXZhdGUgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnM7Ci0gIHByaXZhdGUgU2V0IHByb2plY3RGYWNldFZlcnNpb25zOwotICBwcml2YXRlIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgd2ViU2VydmljZVJ1bnRpbWVDaGVja2VyOwotICBwcml2YXRlIFN0cmluZyBydW50aW1lUHJlZmVycmVkU2VydmVyVHlwZTsKLSAgCi0gIHB1YmxpYyBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0sIEhhc2h0YWJsZSBhbGxXZWJTZXJ2aWNlSW1wbHMsIEhhc2h0YWJsZSBhbGxSdW50aW1lcykKLSAgewotICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gICAgdGhpcy5hbGxXZWJTZXJ2aWNlSW1wbHMgPSBhbGxXZWJTZXJ2aWNlSW1wbHM7Ci0gICAgdGhpcy5hbGxSdW50aW1lcyA9IGFsbFJ1bnRpbWVzOwotCi0gICAgYm90dG9tVXAgPSAoQm9vbGVhbi52YWx1ZU9mKGVsZW0uZ2V0QXR0cmlidXRlKCJib3R0b21VcCIpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgdG9wRG93biA9IChCb29sZWFuLnZhbHVlT2YoZWxlbS5nZXRBdHRyaWJ1dGUoInRvcERvd24iKSkpLmJvb2xlYW5WYWx1ZSgpOyAgICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Qm90dG9tVXAoKQotICB7ICAgIAotICAgIHJldHVybiBib3R0b21VcDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZCA9IGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgUmVxdWlyZWRGYWNldFZlcnNpb25bXSBnZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKQotICB7Ci0gICAgaWYgKHJlcXVpcmVkRmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIEFycmF5TGlzdCByZXF1aXJlZEZhY2V0VmVyc2lvbkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBmYWNldEVsZW1zID0gZWxlbS5nZXRDaGlsZHJlbigicmVxdWlyZWQtZmFjZXQtdmVyc2lvbiIpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYWNldEVsZW1zLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgIAlTdHJpbmcgZmFjZXRJRCA9IGZhY2V0RWxlbXNbaV0uZ2V0QXR0cmlidXRlKCJmYWNldCIpOwotICAgIAlpZiAoUHJvamVjdEZhY2V0c01hbmFnZXIuaXNQcm9qZWN0RmFjZXREZWZpbmVkKGZhY2V0SUQpKQotICAgIAl7Ci0JICAgICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZnYgPSBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb24oKTsKLQkgICAgICAgIElQcm9qZWN0RmFjZXQgcHJvamVjdEZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KGZhY2V0SUQpOyAgICAgICAgCi0JICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXRWZXJzaW9uID0gcHJvamVjdEZhY2V0LmdldFZlcnNpb24oZmFjZXRFbGVtc1tpXS5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSk7Ci0JICAgICAgICByZnYuc2V0UHJvamVjdEZhY2V0VmVyc2lvbihwcm9qZWN0RmFjZXRWZXJzaW9uKTsKLQkgICAgICAgIFN0cmluZyBhbGxvd05ld2VyVmFsdWUgPSBmYWNldEVsZW1zW2ldLmdldEF0dHJpYnV0ZSgiYWxsb3ctbmV3ZXIiKTsKLQkgICAgICAgIGlmIChhbGxvd05ld2VyVmFsdWUgPT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgcmZ2LnNldEFsbG93TmV3ZXIoZmFsc2UpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZQotCSAgICAgICAgewotCSAgICAgICAgICByZnYuc2V0QWxsb3dOZXdlcihCb29sZWFuLnZhbHVlT2YoYWxsb3dOZXdlclZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0JICAgICAgICB9Ci0JICAgICAgICAKLQkgICAgICAgIHJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdC5hZGQocmZ2KTsKLSAgICAJfSAgICAJCi0gICAgICB9Ci0gICAgICAKLSAgICAgIHJlcXVpcmVkRmFjZXRWZXJzaW9ucyA9IChSZXF1aXJlZEZhY2V0VmVyc2lvbltdKXJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdC50b0FycmF5KG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvbltde30pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVxdWlyZWRGYWNldFZlcnNpb25zOwotICB9Ci0gIAotICBwdWJsaWMgU2V0IGdldFByb2plY3RGYWNldFZlcnNpb25zKCkKLSAgewotICAgIGlmIChwcm9qZWN0RmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgcHJvamVjdEZhY2V0VmVyc2lvbnMgPSBuZXcgSGFzaFNldCgpOwotICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IGdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICBmb3IgKGludCBpPTA7IGk8cmZ2Lmxlbmd0aDsgaSsrKQotICAgICB7Ci0gICAgICAgcHJvamVjdEZhY2V0VmVyc2lvbnMuYWRkKHJmdltpXS5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCkpOwotICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcm9qZWN0RmFjZXRWZXJzaW9uczsgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBSdW50aW1lRGVzY3JpcHRvciBnZXRSdW50aW1lKCkKLSAgewotICAgIGlmIChydW50aW1lID09IG51bGwpCi0gICAgewotICAgICBTdHJpbmcgcnVudGltZUlkID0gZWxlbS5nZXRBdHRyaWJ1dGUoInJ1bnRpbWVJZCIpOwotICAgICBydW50aW1lID0gKFJ1bnRpbWVEZXNjcmlwdG9yKWFsbFJ1bnRpbWVzLmdldChydW50aW1lSWQpOyAgICAgCi0gICAgfQotICAgIHJldHVybiBydW50aW1lOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUltcGwgZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpCi0gIHsKLSAgICBpZiAoc2VydmljZUltcGxlbWVudGF0aW9uVHlwZSA9PSBudWxsKQotICAgIHsgICAgICAKLSAgICAgIFN0cmluZyBzZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlSWQgPSBlbGVtLmdldEF0dHJpYnV0ZSgic2VydmljZUltcGxlbWVudGF0aW9uVHlwZUlkIik7Ci0gICAgICBzZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlID0gKFdlYlNlcnZpY2VJbXBsKWFsbFdlYlNlcnZpY2VJbXBscy5nZXQoc2VydmljZUltcGxlbWVudGF0aW9uVHlwZUlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VJbXBsZW1lbnRhdGlvblR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJ1bnRpbWVDbGFzc05hbWUoKQotICB7Ci0gICAgaWYgKHNlcnZpY2VSdW50aW1lQ2xhc3NOYW1lID09IG51bGwpCi0gICAgewotICAgICAgc2VydmljZVJ1bnRpbWVDbGFzc05hbWUgPSBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VSdW50aW1lQ2xhc3NOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUb3BEb3duKCkKLSAgewotICAgIHJldHVybiB0b3BEb3duOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lIGdldFdlYlNlcnZpY2VSdW50aW1lKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlUnVudGltZSA9PSBudWxsKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VSdW50aW1lID0gKElXZWJTZXJ2aWNlUnVudGltZSllbGVtLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lOwotICB9ICAKLSAgCi0gIHB1YmxpYyBJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIGdldFNlcnZpY2VSdW50aW1lQ2hlY2tlcigpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZVJ1bnRpbWVDaGVja2VyID09IG51bGwpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAJaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCJydW50aW1lQ2hlY2tlciIpICE9IG51bGwgKSB7Ci0gICAgICAgIAkJd2ViU2VydmljZVJ1bnRpbWVDaGVja2VyID0gKElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIpZWxlbS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJydW50aW1lQ2hlY2tlciIpOwotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB3ZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci0gIH0gCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCkKLSAgewotICAgIGlmIChydW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSA9PSBudWxsKQotICAgIHsKLSAgICAJcnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUgPSBlbGVtLmdldEF0dHJpYnV0ZSgicnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvU2VydmljZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTdjYzI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVR5cGUgewotCi0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fOwotICBwcml2YXRlIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlSW1wbHNfOwotICBwcml2YXRlIFN0cmluZyBpZDsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlSW1wbCB3ZWJTZXJ2aWNlSW1wbDsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZTsKLSAgcHJpdmF0ZSBTdHJpbmdbXSB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlOwotICBwcml2YXRlIFN0cmluZ1tdIGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlOwotICBwcml2YXRlIFN0cmluZ1tdIHRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0KLSAgCi0KLSAgCi0gIHB1YmxpYyBTZXJ2aWNlVHlwZShJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbV8sIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlSW1wbHNfKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmVsZW1fID0gZWxlbV87Ci0gICAgdGhpcy53ZWJTZXJ2aWNlSW1wbHNfID0gd2ViU2VydmljZUltcGxzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRCb3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZSgpCi0gIHsKLSAgICBpZiAoYm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGU9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImJ1TW9kdWxlVHlwZXNFeGNsdWRlIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBib3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICBib3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZVtpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlKFN0cmluZ1tdIGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlKQotICB7Ci0gICAgdGhpcy5ib3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZSA9IGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0Qm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUoKQotICB7Ci0gICAgaWYgKGJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlPT1udWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJidU1vZHVsZVR5cGVzSW5jbHVkZSIpOwotICAgICAgaWYgKGF0dHIgIT0gbnVsbCAmJiBhdHRyLmxlbmd0aCgpPjApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYXR0ciwgIiAiKTsKLSAgICAgICAgaW50IHNpemUgPSBzdC5jb3VudFRva2VucygpOwotICAgICAgICBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUubGVuZ3RoOyBpKyspCi0gICAgICAgICAgYm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGVbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRCb3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZShTdHJpbmdbXSBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSkKLSAgewotICAgIHRoaXMuYm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUgPSBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQ9PW51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgdGhpcy5pZCA9IGlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0VG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZSgpCi0gIHsKLSAgICBpZiAodG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgidGRNb2R1bGVUeXBlc0V4Y2x1ZGUiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgdG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICB0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUb3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlKFN0cmluZ1tdIHRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGUpCi0gIHsKLSAgICB0aGlzLnRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGUgPSB0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0VG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSgpCi0gIHsKLSAgICBpZiAodG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgidGRNb2R1bGVUeXBlc0luY2x1ZGUiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgdG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUb3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlKFN0cmluZ1tdIHRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGUpCi0gIHsKLSAgICB0aGlzLnRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGUgPSB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUltcGwgZ2V0V2ViU2VydmljZUltcGwoKQotICB7Ci0gICAgaWYgKHdlYlNlcnZpY2VJbXBsID09IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHdzaW1wbElkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJpbXBsSWQiKTsKLSAgICAgIHdlYlNlcnZpY2VJbXBsID0gKFdlYlNlcnZpY2VJbXBsKXdlYlNlcnZpY2VJbXBsc18uZ2V0KHdzaW1wbElkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VJbXBsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlSW1wbDEoV2ViU2VydmljZUltcGwgd2ViU2VydmljZUltcGwpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VJbXBsID0gd2ViU2VydmljZUltcGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzU2NlbmFyaW8oaW50IHNjZW5hcmlvKQotICB7Ci0gICAgc3dpdGNoKHNjZW5hcmlvKQotICAgIHsKLSAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUDoKLSAgICAgIFN0cmluZ1tdIGJ1cyA9IGdldEJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlKCk7Ci0gICAgICBpZiAoYnVzIT1udWxsICYmIGJ1cy5sZW5ndGg+MCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOOgotICAgICAgU3RyaW5nW10gdGRzID0gZ2V0VG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSgpOwotICAgICAgaWYgKHRkcyE9bnVsbCAmJiB0ZHMubGVuZ3RoPjApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLQlwdWJsaWMgU3RyaW5nW10gZ2V0TW9kdWxlVHlwZXNJbmNsdWRlKGludCBzY2VuYXJpbykKLSAgewotICAgIHN3aXRjaChzY2VuYXJpbykKLSAgICB7Ci0gICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVA6Ci0gICAgICByZXR1cm4gZ2V0Qm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUoKTsKLSAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOOgotICAgICAgcmV0dXJuIGdldFRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGUoKTsKLSAgICBkZWZhdWx0OiAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBudWxsOyAgICAKLSAgfQotICAKLQkKLQkKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VDbGllbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxODdiM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VDbGllbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDbGllbnRJbXBsIHsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXzsgCi0JcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbGFiZWw7Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUNsaWVudEltcGwoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmVsZW1fID0gZWxlbV87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIGlmIChpZD09bnVsbCkKLSAgICB7Ci0gICAgICBpZCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKQotICB7Ci0gICAgaWYgKGxhYmVsPT1udWxsKQotICAgIHsKLSAgICAgIGxhYmVsID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwotICAgIH0KLSAgICByZXR1cm4gbGFiZWw7Ci0gIH0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2FmMWFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JTWVyZ2VyOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlSW1wbCB7Ci0JCi0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fOwotCXByaXZhdGUgU3RyaW5nIGlkOwotCXByaXZhdGUgU3RyaW5nIGxhYmVsOwotCXByaXZhdGUgU3RyaW5nW10gcmVzb3VyY2VUeXBlTWV0YWRhdGE7Ci0JcHJpdmF0ZSBTdHJpbmdbXSBleHRlbnNpb25NZXRhZGF0YTsKLQlwcml2YXRlIFN0cmluZyBvYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci0JcHJpdmF0ZSBJTWVyZ2VyIG1lcmdlckNsYXNzOwotICAKLSAgcHVibGljIFdlYlNlcnZpY2VJbXBsKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXykKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgdGhpcy5lbGVtXyA9IGVsZW1fOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEV4dGVuc2lvbk1ldGFkYXRhKCkKLSAgewotICAgIGlmIChleHRlbnNpb25NZXRhZGF0YT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiZXh0ZW5zaW9uTWV0YWRhdGEiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgZXh0ZW5zaW9uTWV0YWRhdGEgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbk1ldGFkYXRhLmxlbmd0aDsgaSsrKQotICAgICAgICAgIGV4dGVuc2lvbk1ldGFkYXRhW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBleHRlbnNpb25NZXRhZGF0YTsKLSAgfQotICAKLQotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIGlmIChpZD09bnVsbCkKLSAgICB7Ci0gICAgICBpZCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKQotICB7Ci0gICAgaWYgKGxhYmVsPT1udWxsKQotICAgIHsKLSAgICAgIGxhYmVsID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwotICAgIH0KLSAgICByZXR1cm4gbGFiZWw7Ci0gIH0gCi0gIAotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRSZXNvdXJjZVR5cGVNZXRhZGF0YSgpCi0gIHsKLSAgICBpZiAocmVzb3VyY2VUeXBlTWV0YWRhdGE9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoInJlc291cmNlVHlwZU1ldGFkYXRhIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIHJlc291cmNlVHlwZU1ldGFkYXRhID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXNvdXJjZVR5cGVNZXRhZGF0YS5sZW5ndGg7IGkrKykKLSAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhZGF0YVtpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICByZXR1cm4gcmVzb3VyY2VUeXBlTWV0YWRhdGE7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbldpZGdldCgpCi0gIHsKLSAgICBpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0PT1udWxsKQotICAgIHsKLSAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgib2JqZWN0U2VsZWN0aW9uV2lkZ2V0Iik7Ci0gICAgfQotICAgIHJldHVybiBvYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci0gIH0KLSAgCi1wdWJsaWMgSU1lcmdlciBnZXRNZXJnZXJDbGFzcygpIHsKLQlpZiAobWVyZ2VyQ2xhc3MgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBtZXJnZXJDbGFzcyA9IChJTWVyZ2VyKSBlbGVtXy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJtZXJnZXJDbGFzcyIpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgfQkKLQlyZXR1cm4gbWVyZ2VyQ2xhc3M7Ci19Ci0gIAotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzU4ZGVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeSBpbnN0YW5jZV87Ci0KLSAgSGFzaE1hcCB3ZWJTZXJ2aWNlVHlwZXNfOwotICAKLSAgQXJyYXlMaXN0IHdlYlNlcnZpY2VUeXBlc0xpc3RfOwotICAKLSAgQXJyYXlMaXN0IHdlYlNlcnZpY2VDbGllbnRUeXBlc0xpc3RfOwotCi0gIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlSW1wbHNfOwotCi0gIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfOwotCi0gIEhhc2h0YWJsZSBzZXJ2aWNlVHlwZXNfOwotCi0gIEhhc2h0YWJsZSBjbGllbnRUeXBlc187Ci0KLSAgSGFzaHRhYmxlIHdlYlNlcnZpY2VSdW50aW1lc187Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSBzaW5nbGV0b24gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0gICAgLy8gQ2FuJ3QgZ2V0IHJpZCBvZiB3ZWJTZXJ2aWNlVHlwZXMgaW4gTTQKLSAgICB3ZWJTZXJ2aWNlVHlwZXNfID0gbmV3IEhhc2hNYXAoKTsKLSAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB3ZWJTZXJ2aWNlSW1wbHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHdlYlNlcnZpY2VDbGllbnRJbXBsc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgc2VydmljZVR5cGVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBjbGllbnRUeXBlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgd2ViU2VydmljZVJ1bnRpbWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLQotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIAotICAgIC8vTG9hZCBXZWJTZXJ2aWNlSW1wbHMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB3c0ltcGxFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJ3c0ltcGwiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8d3NJbXBsRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHdzSW1wbEV4dHNbaWR4XTsKLQotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJ3ZWJTZXJ2aWNlSW1wbCIpKQotICAgICAgICB7Ci0gICAgICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gbmV3IFdlYlNlcnZpY2VJbXBsKGVsZW0pOwotICAgICAgICAgIHdlYlNlcnZpY2VJbXBsc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCB3c2ltcGwpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIFdlYlNlcnZpY2VDbGllbnRJbXBscwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHdzQ2xpZW50SW1wbEV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgIndzQ2xpZW50SW1wbCIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDx3c0NsaWVudEltcGxFeHRzLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gd3NDbGllbnRJbXBsRXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoIndlYlNlcnZpY2VDbGllbnRJbXBsIikpCi0gICAgICAgIHsKLSAgICAgICAgICBXZWJTZXJ2aWNlQ2xpZW50SW1wbCB3c0NsaWVudEltcGwgPSBuZXcgV2ViU2VydmljZUNsaWVudEltcGwoZWxlbSk7Ci0gICAgICAgICAgd2ViU2VydmljZUNsaWVudEltcGxzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIHdzQ2xpZW50SW1wbCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0xvYWQgU2VydmljZVR5cGVzCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gc2VydmljZVR5cGVFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJzZXJ2aWNlVHlwZSIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxzZXJ2aWNlVHlwZUV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBzZXJ2aWNlVHlwZUV4dHNbaWR4XTsKLQotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJzZXJ2aWNlVHlwZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVR5cGUgc3QgPSBuZXcgU2VydmljZVR5cGUoZWxlbSx3ZWJTZXJ2aWNlSW1wbHNfKTsKLSAgICAgICAgICBzZXJ2aWNlVHlwZXNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgc3QpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIENsaWVudFR5cGVzCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY2xpZW50VHlwZUV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgImNsaWVudFR5cGUiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y2xpZW50VHlwZUV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBjbGllbnRUeXBlRXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoImNsaWVudFR5cGUiKSkKLSAgICAgICAgewotICAgICAgICAgIENsaWVudFR5cGUgY3QgPSBuZXcgQ2xpZW50VHlwZShlbGVtLHdlYlNlcnZpY2VDbGllbnRJbXBsc18pOwotICAgICAgICAgIGNsaWVudFR5cGVzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIGN0KTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTG9hZCBXZWJTZXJpdmNlUnVudGltZXMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB3c3J0RXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAid2ViU2VydmljZVJ1bnRpbWUiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8d3NydEV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSB3c3J0RXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoIndlYlNlcnZpY2VSdW50aW1lIikpCi0gICAgICAgIHsKLSAgICAgICAgICBXZWJTZXJ2aWNlUnVudGltZUluZm8gd3NydEluZm8gPSBuZXcgV2ViU2VydmljZVJ1bnRpbWVJbmZvKGVsZW0sIHNlcnZpY2VUeXBlc18sIGNsaWVudFR5cGVzXyk7Ci0gICAgICAgICAgd2ViU2VydmljZVJ1bnRpbWVzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIHdzcnRJbmZvKTsKLSAgICAgICAgICAKLSAgICAgICAgICAvL1VwZGF0ZSB0aGUgdHlwZSBsaXN0cwotICAgICAgICAgIHVwZGF0ZVdlYlNlcnZpY2VUeXBlTGlzdCh3c3J0SW5mbyk7Ci0gICAgICAgICAgdXBkYXRlV2ViU2VydmljZUNsaWVudFR5cGVMaXN0KHdzcnRJbmZvKTsKLSAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICB9ICAKLSAgICAKLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVdlYlNlcnZpY2VUeXBlTGlzdChXZWJTZXJ2aWNlUnVudGltZUluZm8gd3NydEluZm8pCi0gIHsKLSAgICBTZXJ2aWNlVHlwZVtdIHN0cyA9IHdzcnRJbmZvLmdldFNlcnZpY2VUeXBlcygpOwotICAgIGlmIChzdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGltcGxJZCA9IHN0c1tqXS5nZXRXZWJTZXJ2aWNlSW1wbCgpLmdldElkKCk7Ci0gICAgICAgIFN0cmluZ1tdIGJ1cyA9IHN0c1tqXS5nZXRCb3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSgpOwotICAgICAgICBTdHJpbmdbXSB0ZHMgPSBzdHNbal0uZ2V0VG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSgpOwotICAgICAgICBpZiAoYnVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKSk7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZCgiLyIpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoaW1wbElkKTsKLSAgICAgICAgICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsKLSAgICAgICAgICBpZiAoIXdlYlNlcnZpY2VUeXBlc0xpc3RfLmNvbnRhaW5zKGVudHJ5KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0Xy5hZGQoZW50cnkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodGRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pKTsKLSAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZChpbXBsSWQpOwotICAgICAgICAgIFN0cmluZyBlbnRyeSA9IGVudHJ5YnVmZi50b1N0cmluZygpOwotICAgICAgICAgIGlmICghd2ViU2VydmljZVR5cGVzTGlzdF8uY29udGFpbnMoZW50cnkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VUeXBlc0xpc3RfLmFkZChlbnRyeSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgdXBkYXRlV2ViU2VydmljZUNsaWVudFR5cGVMaXN0KFdlYlNlcnZpY2VSdW50aW1lSW5mbyB3c3J0SW5mbykKLSAgewotICAgIENsaWVudFR5cGVbXSBjdHMgPSB3c3J0SW5mby5nZXRDbGllbnRUeXBlcygpOwotICAgIGlmIChjdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGN0cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGltcGxJZCA9IGN0c1tqXS5nZXRXZWJTZXJ2aWNlQ2xpZW50SW1wbCgpLmdldElkKCk7Ci0gICAgICAgIFN0cmluZ1tdIG1vZHMgPSBjdHNbal0uZ2V0TW9kdWxlVHlwZXNJbmNsdWRlKCk7Ci0gICAgICAgIGlmIChtb2RzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVCkpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKGltcGxJZCk7Ci0gICAgICAgICAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgaWYgKCF3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0Xy5jb250YWlucyhlbnRyeSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgd2ViU2VydmljZUNsaWVudFR5cGVzTGlzdF8uYWRkKGVudHJ5KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjJkZjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNjc4MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5MgotewotCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyIGluc3RhbmNlXzsKLQotICAvL3dlYlNlcnZpY2VJbXBsc186IAotICAvL2tleTogaWQgYXR0cmlidXRlIG9mIGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NJbXBsCi0gIC8vdmFsdWU6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsIAotICBIYXNodGFibGUgd2ViU2VydmljZUltcGxzXzsKLQotICAvL3dlYlNlcnZpY2VDbGllbnRJbXBsc186IAotICAvL2tleTogaWQgYXR0cmlidXRlIG9mIGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NDbGllbnRJbXBsCi0gIC8vdmFsdWU6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VDbGllbnRJbXBsICAKLSAgSGFzaHRhYmxlIHdlYlNlcnZpY2VDbGllbnRJbXBsc187Ci0KLSAgLy9ydW50aW1lc186IAotICAvL2tleTogaWQgYXR0cmlidXRlIG9mIGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucnVudGltZXMKLSAgLy92YWx1ZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuUnVudGltZURlc2NyaXB0b3IKLSAgSGFzaHRhYmxlIHJ1bnRpbWVzXzsKLSAgCi0gIC8vc2VydmljZVJ1bnRpbWVzXzogCi0gIC8va2V5OiBpZCBhdHRyaWJ1dGUgb2YgZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMKLSAgLy92YWx1ZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yCi0gIEhhc2h0YWJsZSBzZXJ2aWNlUnVudGltZXNfOwotICAKLSAgLy9jbGllbnRSdW50aW1lc186IAotICAvL2tleTogaWQgYXR0cmlidXRlIG9mIGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMKLSAgLy92YWx1ZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuQ2xpZW50UnVudGltZURlc2NyaXB0b3IgIAotICBIYXNodGFibGUgY2xpZW50UnVudGltZXNfOwotICAKLSAgLy93ZWJTZXJ2aWNlVHlwZXNMaXN0XyBjb250YWlucyBhIGxpc3Qgb2YgU3RyaW5nIHZhbHVlcyBpbiB0aGlzIGZvcm06ICJzY2VuYXJpby93ZWJTZXJ2aWNlSW1wbElkIiwKLSAgLy93aGVyZSBzY2VhbnJpbyB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG9uZSBvZiAKLSAgLy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQIG9yIAotICAvL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpby5UT1BfRE9XTgotICAvL2FuZCB3ZWJTZXJ2aWNlSW1wbElkIGlzIHRoZSBpZCBhdHRyaWJ1dGUgb2YgYW4gZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwKLSAgLy9UaGlzIGxpc3QgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGl0ZW1zIGRpc3BsYXllZCBpbiB0aGUgV2ViU2VydmljZVR5cGUgY29tYm8tYm94IG9mIHBhZ2UgMSBvZiB0aGUgCi0gIC8vV2ViIHNlcml2Y2Ugd2l6YXJkLgotICBBcnJheUxpc3Qgd2ViU2VydmljZVR5cGVzTGlzdF87Ci0gIAotICAvL1RPRE86IE5vdCB1c2VkLiBSZW1vdmUgdGhpcyBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gaXQgaW4gdGhpcyBjbGFzcy4KLSAgQXJyYXlMaXN0IHdlYlNlcnZpY2VDbGllbnRUeXBlc0xpc3RfOyAgCi0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSBzaW5nbGV0b24gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeTIgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5MiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gbmV3IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyKCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0gICAgd2ViU2VydmljZUltcGxzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHJ1bnRpbWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBzZXJ2aWNlUnVudGltZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGNsaWVudFJ1bnRpbWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICAKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAKLS8vICBMb2FkIFdlYlNlcnZpY2VJbXBscyBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB3c0ltcGxFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJ3c0ltcGwiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8d3NJbXBsRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHdzSW1wbEV4dHNbaWR4XTsgICAgICAgIAotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJ3ZWJTZXJ2aWNlSW1wbCIpKQotICAgICAgICB7Ci0gICAgICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gbmV3IFdlYlNlcnZpY2VJbXBsKGVsZW0pOyAgICAgICAgICAKLSAgICAgICAgICB3ZWJTZXJ2aWNlSW1wbHNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgd3NpbXBsKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTG9hZCBXZWJTZXJ2aWNlQ2xpZW50SW1wbHMgYnkgcmVhZGluZyBhbGwgZXh0ZW5zaW9ucyB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NDbGllbnRJbXBsCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gd3NDbGllbnRJbXBsRXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAid3NDbGllbnRJbXBsIik7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PHdzQ2xpZW50SW1wbEV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSB3c0NsaWVudEltcGxFeHRzW2lkeF07Ci0KLSAgICAgICAgaWYgKGVsZW0uZ2V0TmFtZSgpLmVxdWFscygid2ViU2VydmljZUNsaWVudEltcGwiKSkKLSAgICAgICAgewotICAgICAgICAgIFdlYlNlcnZpY2VDbGllbnRJbXBsIHdzQ2xpZW50SW1wbCA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW1wbChlbGVtKTsKLSAgICAgICAgICB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgd3NDbGllbnRJbXBsKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTG9hZCBydW50aW1lcyBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5ydW50aW1lcwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHJ1bnRpbWVFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJydW50aW1lcyIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxydW50aW1lRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHJ1bnRpbWVFeHRzW2lkeF07Ci0KLSAgICAgICAgaWYgKGVsZW0uZ2V0TmFtZSgpLmVxdWFscygicnVudGltZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgUnVudGltZURlc2NyaXB0b3IgcmQgPSBuZXcgUnVudGltZURlc2NyaXB0b3IoZWxlbSk7Ci0gICAgICAgICAgcnVudGltZXNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgcmQpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIHNlcnZpY2VSdW50aW1lcyBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBzZXJ2aWNlUnVudGltZUV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgInNlcnZpY2VSdW50aW1lcyIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxzZXJ2aWNlUnVudGltZUV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBzZXJ2aWNlUnVudGltZUV4dHNbaWR4XTsKLQotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJzZXJ2aWNlUnVudGltZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIHJkID0gbmV3IFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcihlbGVtLCB3ZWJTZXJ2aWNlSW1wbHNfLCBydW50aW1lc18pOwotICAgICAgICAgIHNlcnZpY2VSdW50aW1lc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCByZCk7ICAgICAgICAgIAotICAgICAgICAgIHVwZGF0ZVdlYlNlcnZpY2VUeXBlTGlzdChyZCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0xvYWQgY2xpZW50UnVudGltZXMgYnkgcmVhZGluZyBhbGwgZXh0ZW5zaW9ucyB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjbGllbnRSdW50aW1lRXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAiY2xpZW50UnVudGltZXMiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y2xpZW50UnVudGltZUV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBjbGllbnRSdW50aW1lRXh0c1tpZHhdOwotCi0gICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJjbGllbnRSdW50aW1lIikpCi0gICAgICB7Ci0gICAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIHJkID0gbmV3IENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKGVsZW0sIHdlYlNlcnZpY2VDbGllbnRJbXBsc18sIHJ1bnRpbWVzXyk7Ci0gICAgICAgIGNsaWVudFJ1bnRpbWVzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIHJkKTsKLSAgICAgICAgdXBkYXRlV2ViU2VydmljZUNsaWVudFR5cGVMaXN0KHJkKTsKLSAgICAgICAgICAKLSAgICAgIH0gICAgICAgIAotICAgIH0KLSAgfSAgCi0gICAgCi0gIC8qKgotICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIFdlYiBzZXJ2aWNlIHR5cGVzIHdpdGggdGhlIHByb3ZpZGVkIHNlcnZpY2UgcnVudGltZSdzIGNvbnRyaWJ1dGlvbiBvZgotICAgKiBzY2VuYXJpby93ZWJTZXJ2aWNlSW1wbCBjb21iaW5hdGlvbi4KLSAgICogQHBhcmFtIGRlc2NyaXB0b3IKLSAgICovCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVXZWJTZXJ2aWNlVHlwZUxpc3QoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCi0gIHsKLSAgICBTdHJpbmcgc2VydmljZUltcGxJZCA9IGRlc2NyaXB0b3IuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCk7Ci0gICAgYm9vbGVhbiBib3R0b21VcCA9IGRlc2NyaXB0b3IuZ2V0Qm90dG9tVXAoKTsKLSAgICBib29sZWFuIHRvcERvd24gPSBkZXNjcmlwdG9yLmdldFRvcERvd24oKTsKLSAgICBpZiAoYm90dG9tVXApCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIGVudHJ5YnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKSk7Ci0gICAgICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7Ci0gICAgICBlbnRyeWJ1ZmYuYXBwZW5kKHNlcnZpY2VJbXBsSWQpOwotICAgICAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAoIXdlYlNlcnZpY2VUeXBlc0xpc3RfLmNvbnRhaW5zKGVudHJ5KSkKLSAgICAgIHsKLSAgICAgICAgd2ViU2VydmljZVR5cGVzTGlzdF8uYWRkKGVudHJ5KTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKHRvcERvd24pCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIGVudHJ5YnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoc2VydmljZUltcGxJZCk7Ci0gICAgICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsKLSAgICAgIGlmICghd2ViU2VydmljZVR5cGVzTGlzdF8uY29udGFpbnMoZW50cnkpKQotICAgICAgewotICAgICAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0Xy5hZGQoZW50cnkpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVdlYlNlcnZpY2VDbGllbnRUeXBlTGlzdChDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICB7Ci0gICAgU3RyaW5nIGNsaWVudEltcGxJZCA9IGRlc2NyaXB0b3IuZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKTsKLSAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVCkpOwotICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICBlbnRyeWJ1ZmYuYXBwZW5kKGNsaWVudEltcGxJZCk7Ci0gICAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7Ci0gICAgaWYgKCF3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0Xy5jb250YWlucyhlbnRyeSkpCi0gICAgewotICAgICAgd2ViU2VydmljZUNsaWVudFR5cGVzTGlzdF8uYWRkKGVudHJ5KTsKLSAgICB9ICAgIAotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM0YjAzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMjQgICAxMTY3NTAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAgIDEyNjc4MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDcwMTE5ICAgMTU5NDU4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzExMDcgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjIxMzY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDQwMiAgIDIyNTM3OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ2xpZW50IHdpemFyZCBydW50aW1lL3NlcnZlciBkZWZhdWx0aW5nIGlzIG5vdCByZXNwZWN0aW5nIHRoZSBwcmVmZXJlbmNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0TWF0Y2hlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLlR5cGVTZWxlY3Rpb25GaWx0ZXIyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLkxhYmVsc0FuZElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0Q2hvaWNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuU2VydmVyVUlDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIG51bWVyb3VzIHV0aWxpdHkgbWV0aG9kcyB0aGF0Ci0gKiBwcm9jZXNzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCB0aHJvdWdoIGV4dGVuc2lvbiBwb2ludHMKLSAqIHdoaWNoIGFyZSByZWFkIGluIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyOgotICogPHVsPgotICogPGxpPiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NJbXBsIDwvbGk+Ci0gKiA8bGk+IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0NsaWVudEltcGwgPC9saT4KLSAqIDxsaT4gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnJ1bnRpbWVzIDwvbGk+Ci0gKiA8bGk+IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMgPC9saT4KLSAqIDxsaT4gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFJ1bnRpbWVzIDwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiB0byBwcm92aWRlIGFuc3dlcnMgdG8gY29tbW9uIHF1ZXN0aW9ucyByZWdhcmRpbmcgd2hpY2ggc2VydmVycywKLSAqIHByb2plY3RzLCBhbmQgcHJvamVjdCB0eXBlcyBhIHBhcnRpY3VsYXIgV2ViIHNlcnZpY2UgcnVudGltZQotICogc3VwcG9ydHMuCi0gKiA8YnIvPjxici8+Ci0gKiBUZW1pbm9sb2d5IHVzZWQgaW4gdGhlIGphdmFkb2MgaW4gdGhpcyBjbGFzczoKLSAqIDx1bD4KLSAqIDxsaT48Yj5XZWIgc2VydmljZSBzY2VuYXJpbzwvYj46IE9uZSBvZiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQIG9yIFdlYlNlcnZpY2VTY2VuYXJpby5UT1BfRE9XTi48L2xpPiAKLSAqIDxsaT48Yj5XZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsLjwvbGk+Ci0gKiA8bGk+PGI+V2ViIHNlcnZpY2UgdHlwZTwvYj46IEZvcndhcmQgc2xhc2ggc2VwYXJhdGVkIGNvbmNhdGVuYXRpb24gb2YgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbgotICogb2YgYSBXZWIgc2VydmljZSBzY2VuYXJpbyBhbmQgYSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICogRm9yIGV4YW1wbGUsICIwL29yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSIsIHJlcHJlc2VudHMgdGhlIGJvdHRvbSB1cCBKYXZhIGJlYW4gV2ViIHNlcnZpY2UgdHlwZS48L2xpPgotICogPGxpPjxiPldlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0NsaWVudEltcGwuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VDbGllbnRJbXBsLjwvbGk+Ci0gKiA8bGk+PGI+V2ViIHNlcnZpY2UgcnVudGltZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucnVudGltZXMuIAotICogVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5SdW50aW1lRGVzY3JpcHRvcjwvbGk+IAotICogPGxpPjxiPnNlcnZpY2VSdW50aW1lPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjwvbGk+Ci0gKiA8bGk+PGI+Y2xpZW50UnVudGltZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LkNsaWVudFJ1bnRpbWVEZXNjcmlwdG9yPC9saT4KLSAqIDxsaT48Yj5zZXJ2ZXIgdHlwZTwvYj46IFRoaXMgaXMgYSBzZXJ2ZXIgdG9vbHMgYXJ0aWZhY3QuIFlvdSBzZWUgYSBsaXN0IG9mIHRoZXNlIHdoZW4gY3JlYXRpbmcgYSBuZXcgc2VydmVyCi0gKiBpbiB0aGUgdG9vbC48L2xpPgotICogPGxpPjxiPnNlcnZlciBydW50aW1lPC9iPjogVGhpcyBpcyBhIHNlcnZlciB0b29scyBhcnRpZmFjdC4gWW91IHNlZSBhIGxpc3Qgb2YgdGhlc2UgaWYgeW91IGdvIHRvIFByZWZlcmVuY2VzLCAKLSAqIFNlcnZlciA+IEluc3RhbGxlZCBSdW50aW1lcyBpbiB0aGUgdG9vbC4gVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU8L2xpPgotICogPGxpPjxiPmZhY2V0IHJ1bnRpbWU8L2I+OiBUaGUgZmFjZXQgZXF1aXZhbGVudCBvZiBhIHNlcnZlciBydW50aW1lLiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIAotICogb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZS4gb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbAotICogcHJvdmlkZXMgbWV0aG9kcyB0byB0cmFuc2xhdGUgZnJvbSBhIHNlcnZlciBydW50aW1lIHRvIGEgZmFjZXQgcnVudGltZSBhbmQgdmljZS12ZXJzYS48L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyCi17Ci0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyIHJlZ2lzdHJ5ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeTIuZ2V0SW5zdGFuY2UoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBSdW50aW1lRGVzY3JpcHRvciByZXByZXNlbnRpbmcgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogd2l0aCBhbiBpZCBhdHRyaWJ1dGUgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIGlkCi0gICAqIEBwYXJhbSBpZAotICAgKiBAcmV0dXJuIFJ1bnRpbWVEZXNjcmlwdG9yIHJlcHJlc2VudGluZyB0aGUgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiB3aXRoIGFuIGlkIGF0dHJpYnV0ZSBlcXVhbCB0byB0aGUgcHJvdmlkZWQgaWQuIFJldHVybnMgbnVsbAotICAgKiBpZiBzdWNoIGEgUnVudGltZURlc2NyaXB0b3IgY2Fubm90IGJlIGZvdW5kLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFJ1bnRpbWVEZXNjcmlwdG9yIGdldFJ1bnRpbWVCeUlkKFN0cmluZyBpZCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSByZWdpc3RyeS5ydW50aW1lc18uZ2V0KGlkKTsKLSAgICBpZiAocmVzdWx0IT1udWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoUnVudGltZURlc2NyaXB0b3IpcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgdW5pb24gb2YgYWxsIHByb2plY3QgdHlwZXMgc3VwcG9ydGVkIGJ5IGFsbCBzZXJ2aWNlUnVudGltZXMuIFVzZWQgYnkgdGhlCi0gICAqIFByb2plY3RUb3BvbG9neSBwcmVmZXJlbmNlIHBhZ2UuIAotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IG9mIHRlbXBsYXRlIGlkcy4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbFNlcnZpY2VQcm9qZWN0VHlwZXMoKQotICB7Ci0gICAgQXJyYXlMaXN0IGZpbmFsVGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLQotICAgIC8vTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VydmljZVJ1bnRpbWVzCi0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIAotICAgICAgLy9HZXQgdGhlIHRlbXBsYXRlcyBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZQotICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAKLSAgICAgIC8vQWRkIHRoZSB0ZW1wbGF0ZSBpZHMgdG8gdGhlIGxpc3QgaWYgdGhleSBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gYWRkZWQKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IHRlbXBsYXRlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gKElGYWNldGVkUHJvamVjdFRlbXBsYXRlKWl0ci5uZXh0KCk7Ci0gICAgICAgIGlmICghZmluYWxUZW1wbGF0ZUlkTGlzdC5jb250YWlucyh0ZW1wbGF0ZS5nZXRJZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIGZpbmFsVGVtcGxhdGVJZExpc3QuYWRkKHRlbXBsYXRlLmdldElkKCkpOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pZmluYWxUZW1wbGF0ZUlkTGlzdC50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHVuaW9uIG9mIGFsbCBwcm9qZWN0IHR5cGVzIHN1cHBvcnRlZCBieSBhbGwgY2xpZW50UnVudGltZXMuIFVzZWQgYnkgdGhlCi0gICAqIFByb2plY3RUb3BvbG9neSBwcmVmZXJlbmNlIHBhZ2UuIAotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IG9mIHRlbXBsYXRlIGlkcy4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbENsaWVudFByb2plY3RUeXBlcygpCi0gIHsKLSAgICBBcnJheUxpc3QgZmluYWxUZW1wbGF0ZUlkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAvL0xvb3AgdGhyb3VnaCBhbGwgdGhlIGNsaWVudFJ1bnRpbWVzCi0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoQ2xpZW50UnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICAKLSAgICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgY2xpZW50UnVudGltZQotICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoZGVzYy5nZXRJZCgpKTsKLSAgICAgIAotICAgICAgLy9BZGQgdGhlIHRlbXBsYXRlIGlkcyB0byB0aGUgbGlzdCBpZiB0aGV5IGhhdmUgbm90IGFscmVhZHkgYmVlbiBhZGRlZAotICAgICAgSXRlcmF0b3IgaXRyID0gdGVtcGxhdGVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpaXRyLm5leHQoKTsKLSAgICAgICAgaWYgKCFmaW5hbFRlbXBsYXRlSWRMaXN0LmNvbnRhaW5zKHRlbXBsYXRlLmdldElkKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZmluYWxUZW1wbGF0ZUlkTGlzdC5hZGQodGVtcGxhdGUuZ2V0SWQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlmaW5hbFRlbXBsYXRlSWRMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1tde30pOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGFiZWwgb2YgYSBXZWIgc2VydmljZSBydW50aW1lIGdpdmVuIGl0cyBpZAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbGFiZWwgb2YgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgd2l0aCBhbiBpZCBlcXVhbCB0byBydW50aW1lSWQuCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgV2ViIHNlcnZpY2UgcnVudGltZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWxCeUlkKFN0cmluZyBydW50aW1lSWQpIAotICB7Ci0gICAgUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFJ1bnRpbWVCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgaWYgKGRlc2MgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIHJldHVybiBkZXNjLmdldExhYmVsKCk7Ci0gIH0gICAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgUnVudGltZURlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgV2ViIHNlcnZpY2UgcnVudGltZSB3aXRoIHRoZSBwcm92aWRlZCBsYWJlbAotICAgKiBAcGFyYW0gbGFiZWwgbGFiZWwgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEByZXR1cm4gUnVudGltZURlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgV2ViIHNlcnZpY2UgcnVudGltZSB3aXRoIHRoZSBwcm92aWRlZCBsYWJlbAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBSdW50aW1lRGVzY3JpcHRvciBnZXRSdW50aW1lQnlMYWJlbChTdHJpbmcgbGFiZWwpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkucnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSAoUnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICBpZiAoZGVzY3JpcHRvciE9bnVsbCkgewotICAgICAgICBpZiAobGFiZWwuZXF1YWxzKGRlc2NyaXB0b3IuZ2V0TGFiZWwoKSkpCi0gICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgIAotICB9ICAgICAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVsIG9mIGFuIHNlcnZlciB0eXBlIGdpdmVuIGl0cyBpZAotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHJldHVybiBTdHJpbmcgbGFiZWwgb2YgdGhlIHNlcnZlciB0eXBlIHdpdGggYW4gaWQgZXF1YWwgdG8gc2VydmVyRmFjdG9yeUlkLgotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIHNlcnZlciB0eXBlIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlckxhYmVsQnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsKLSAgICBpZiAoc2VydmVyVHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgU3RyaW5nIHNlcnZlckxhYmVsID0gU2VydmVyVUlDb3JlLmdldExhYmVsUHJvdmlkZXIoKS5nZXRUZXh0KHNlcnZlclR5cGUpOyAgIAotICAgIHJldHVybiBzZXJ2ZXJMYWJlbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVsIG9mIGFuIElTZXJ2ZXIgZ2l2ZW4gaXRzIGlkCi0gICAqIEBwYXJhbSBpbnN0YW5jZUlkIGlkIG9mIGFuIElTZXJ2ZXIKLSAgICogQHJldHVybiBTdHJpbmcgbGFiZWwgb2YgdGhlIElTZXJ2ZXIgd2l0aCBhbiBpZCBlcXVhbCB0byBpbnN0YW5jZUlkLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUxhYmVsRnJvbUluc3RhbmNlSWQoIFN0cmluZyBpbnN0YW5jZUlkICkKLSAgewotICAgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKCBpbnN0YW5jZUlkICk7ICAgIAotICAgIHJldHVybiBzZXJ2ZXIuZ2V0TmFtZSgpOwotICB9ICAKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdW5pb24gb2YgYWxsIHNlcnZlciB0eXBlIGlkcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYWNldCBydW50aW1lcwotICAgKiBpbiB0aGUgcHJvdmlkZWQgc2V0LgotICAgKiBAcGFyYW0gZmFjZXRSdW50aW1lcyBhIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElSdW50aW1lfS4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBJU2VydmVyVHlwZSBpZHMuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkc0J5RmFjZXRSdW50aW1lcyhTZXQgZmFjZXRSdW50aW1lcykKLSAgewotICAgIAotICAgIEFycmF5TGlzdCBzdXBwb3J0ZWRTZXJ2ZXJGYWN0b3J5SWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVJZHMgPSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzV2l0aFJ1bnRpbWVzKCk7Ci0gICAgSXRlcmF0b3IgaXRyID0gZmFjZXRSdW50aW1lcy5pdGVyYXRvcigpOwotICAgIHdoaWxlKGl0ci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSVJ1bnRpbWUgZlJ1bnRpbWUgPSAoSVJ1bnRpbWUpaXRyLm5leHQoKTsKLSAgICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlSWRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWRzW2ldKTsKLSAgICAgICAgSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpOwotICAgICAgICBpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLSAgICAgICAgewotCSAgICAgICAgU3RyaW5nIHJ1bnRpbWVUeXBlSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCSAgICAgICAgaWYgKHNSdW50aW1lICE9IG51bGwgJiYgc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKSAhPSBudWxsICYmIHJ1bnRpbWVUeXBlSWQuZXF1YWxzKHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKSkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIHN1cHBvcnRlZFNlcnZlckZhY3RvcnlJZHMuYWRkKHNlcnZlclR5cGVJZHNbaV0pOyAgICAgICAgICAKLQkgICAgICAgIH0gICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXN1cHBvcnRlZFNlcnZlckZhY3RvcnlJZHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICAKLSAgICAvL1RlbXBvcmFyaWx5IHJldHVybiBhbGwgZmFjdG9yeSBpZHMgd2l0aCBydW50aW1lcwotICAgIC8vcmV0dXJuIGdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsgICAgCi0gIH0KLSAgCi0gIC8vU2VydmljZS1zaWRlIHV0aWxpdGllcwotICAvKioKLSAgICogUmV0dXJucyBhIFdlYlNlcnZpY2VJbXBsIGdpdmVuIHRoZSBpZCBvZiBhIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBpZCAKLSAgICogQHJldHVybiBXZWJTZXJ2aWNlSW1wbCB3aXRoIHRoZSBnaXZlbiBpZAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIFdlYlNlcnZpY2VJbXBsIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZUltcGwgZ2V0V2ViU2VydmljZUltcGxCeUlkKFN0cmluZyBpZCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSByZWdpc3RyeS53ZWJTZXJ2aWNlSW1wbHNfLmdldChpZCk7Ci0gICAgaWYgKHJlc3VsdCE9bnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gKFdlYlNlcnZpY2VJbXBsKXJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHtAbGluayBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3J9IGdpdmVuIHRoZSBpZCBvZiBhIHNlcnZpY1J1bnRpbWUuCi0gICAqIEBwYXJhbSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEByZXR1cm4gU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuIGlkCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18uZ2V0KGlkKTsKLSAgICBpZiAocmVzdWx0IT1udWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yKXJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgICAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUge0BsaW5rIElXZWJTZXJ2aWNlUnVudGltZX0gb2YgdGhlIGdpdmVuIHNlcnZpY2VSdW50aW1lLiBFeHRlbmRlcnMgcHJvdmlkZSB0aGUgZnVsbHkgCi0gICAqIHF1YWxpZmllZCBuYW1lIG9mIGEgY29uY3JldGUgSVdlYlNlcnZpY2VSdW50aW1lIGluIHRoZSBjbGFzcyBhdHRyaWJ1dGUgb2YgYSBzZXJ2aWNlUnVudGltZXMgZXh0ZW5zaW9uLgotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEByZXR1cm4gSVdlYlNlcnZpY2VSdW50aW1lCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElXZWJTZXJ2aWNlUnVudGltZSBnZXRTZXJ2aWNlUnVudGltZSggU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgKQotICB7Ci0gICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIElXZWJTZXJ2aWNlUnVudGltZSAgICB3ZWJzZXJ2aWNlUnVudGltZSAgICAgPSBudWxsOwotICAgIGlmIChkZXNjcmlwdG9yICE9IG51bGwpCi0gICAgewotICAgICAgICB3ZWJzZXJ2aWNlUnVudGltZSA9IGRlc2NyaXB0b3IuZ2V0V2ViU2VydmljZVJ1bnRpbWUoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYnNlcnZpY2VSdW50aW1lOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2aWNlUnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBwcm92aWRlZCBXZWIgc2VydmljZSB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLAotICAgKiBzZXJ2ZXIgdHlwZS9zZXJ2ZXIgaW5zdGFuY2UgKGlmIHByZXNlbnQpLCBwcm9qZWN0IG9yIHByb2plY3QgdHlwZS4KLSAgICogQHBhcmFtIHRycyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgVHlwZVJ1bnRpbWVTZXJ2ZXJ9IGNvbnRhaW5pbmcgYSBXZWIgc2VydmljZSB0eXBlIGlkLCBXZWIgc2VydmljZSBydW50aW1lIGlkLAotICAgKiBzZXJ2ZXIgdHlwZSBpZCBhbmQgc2VydmVyIGluc3RhbmNlIGlkLiBUaGUgV2ViIHNlcnZpY2UgdHlwZSBpZCBhbmQgV2ViIHNlcnZpY2UgcnVudGltZSBpZCBtdXN0IGJlIG5vbi1udWxsIAotICAgKiBhbmQgbm9uLWVtcHR5LiBUaGUgc2VydmVyIHR5cGUgaWQgYW5kIHNlcnZlciBpbnN0YW5jZSBpZCBtYXkgYmUgbnVsbCBvciBlbXB0eS4KLSAgICogQHBhcmFtIHByb2plY3ROYW1lIHRoZSBuYW1lIG9mIGFuIElQcm9qZWN0IHRoYXkgbWF5IG9yIG1hdCBub3QgZXhpc3QgaW4gdGhlIHdvcmtzcGFjZS4gTXVzdCBiZSBub24tbnVsbCBhbmQgCi0gICAqIG5vbi1lbXB0eS4KLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgdGhlIGlkIG9mIGFuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uIE11c3QgYmUgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSBpZgotICAgKiBhbiBJUHJvamVjdCB3aXRoIHRoZSBuYW1lIHByb2plY3ROYW1lIGRvZXMgbm90IGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UuIAotICAgKiBAcmV0dXJuIFN0cmluZyBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsCi0gICAqIHNlcnZlciB0eXBlL3NlcnZlciBpbnN0YW5jZSAoaWYgcHJlc2VudCksIHByb2plY3Qgb3IgcHJvamVjdCB0eXBlLiBSZXR1cm5zIGFuIGVtcHR5IFN0cmluZyBpZiBubyAKLSAgICogc3VjaCBzZXJ2aWNlUnVudGltZSBjb3VsZCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZpY2VSdW50aW1lSWQoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzLCBTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgYm9vbGVhbiBzZXJ2ZXJTZWxlY3RlZCA9ICh0cnMuZ2V0U2VydmVySWQoKSAhPSBudWxsKSAmJiAodHJzLmdldFNlcnZlcklkKCkubGVuZ3RoKCkgPiAwKTsgCi0gICAgLy9GaW5kIHRoZSBmaXJzdCBzZXJ2aWNlUnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlLCBydW50aW1lLCBzZXJ2ZXIsIGFuZCBwcm9qZWN0Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHRycy5nZXRUeXBlSWQoKSwgdHJzLmdldFNlcnZlcklkKCkpOwotICAgIGZvciAoaW50IGk9MDsgaTxkZXNjcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoZGVzY3NbaV0pOyAgICAgIAotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHRycy5nZXRSdW50aW1lSWQoKSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChzZXJ2ZXJTZWxlY3RlZCkKLSAgICAgICAgewotICAgICAgICAgIGJvb2xlYW4gc3VwcG9ydHNTZXJ2ZXIgPSBkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKGRlc2MuZ2V0SWQoKSwgdHJzLmdldFNlcnZlcklkKCkpOwotICAgICAgICAgIGlmICghc3VwcG9ydHNTZXJ2ZXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgaWYgKHByb2plY3QuZXhpc3RzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFByb2plY3QoZGVzYy5nZXRJZCgpLCBwcm9qZWN0TmFtZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0SWQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9DaGVjayBpZiB0ZW1wbGF0ZSBpcyBzdXBwb3J0ZWQKLSAgICAgICAgICBpZiAoZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFRlbXBsYXRlKGRlc2MuZ2V0SWQoKSwgdGVtcGxhdGVJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0SWQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICIiOwotICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBXZWIgc2VydmljZSBzY2VuYXJpbyBmcm9tIHRoZSBXZWIgc2VydmljZSB0eXBlLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHJldHVybiBpbnQgc2NlbmFyaW8gKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCBvciBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QX0RPV04pCi0gICAqLyAgICAgICAgCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFNjZW5hcmlvRnJvbVR5cGVJZChTdHJpbmcgdHlwZUlkKQotICB7Ci0gICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQodHlwZUlkLnN1YnN0cmluZygwLHR5cGVJZC5pbmRleE9mKCIvIikpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVuYXRpb24gdHlwZSBpZCBmcm9uIHRoZSBXZWIgc2VydmljZSB0eXBlIGlkLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHJldHVybiBTdHJpbmcgdGhlIFdlYlNlcnZpY2VJbXBsIGlkLgotICAgKi8gICAgICAgIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZChTdHJpbmcgdHlwZUlkKQotICB7Ci0gICAgcmV0dXJuIHR5cGVJZC5zdWJzdHJpbmcodHlwZUlkLmluZGV4T2YoIi8iKSsxKTsKLSAgfSAgICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIFdlYiBzZXJ2aWNlIHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIFdlYiBzZXJ2aWNlIHJ1bnRpbWVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZS4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFJ1bnRpbWVzQnlTZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkKSAKLSAgewotICAgIGludCBzY2VuYXJpbyA9IGdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpOwotICAgIFN0cmluZyBpbXBsSWQgPSBnZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZCh0eXBlSWQpOyAgICAKLSAgICBBcnJheUxpc3QgaWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vQ2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZQotICAgICAgaWYgKGRlc2MuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCkuZXF1YWxzKGltcGxJZCkpCi0gICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2NlbmFyaW8pCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUDoKLSAgICAgICAgICAgIGlmIChkZXNjLmdldEJvdHRvbVVwKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBydW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOyAKLSAgICAgICAgICAgICAgaWYgKCFpZHMuY29udGFpbnMocnVudGltZUlkKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlkcy5hZGQocnVudGltZUlkKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTjoKLSAgICAgICAgICAgIGlmIChkZXNjLmdldFRvcERvd24oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHJ1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7IAotICAgICAgICAgICAgICBpZiAoIWlkcy5jb250YWlucyhydW50aW1lSWQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWRzLmFkZChydW50aW1lSWQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKWlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgc2VydmljZVJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybnMgU3RyaW5nW10gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIGFsbCBzZXJ2aWNlUnVudGltZXMgdGhhdAotICAgKiBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkKSAKLSAgewotICAgIGludCBzY2VuYXJpbyA9IGdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpOwotICAgIFN0cmluZyBpbXBsSWQgPSBnZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZCh0eXBlSWQpOyAgICAKLSAgICBBcnJheUxpc3QgaWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vQ2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZQotICAgICAgaWYgKGRlc2MuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCkuZXF1YWxzKGltcGxJZCkpCi0gICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2NlbmFyaW8pCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUDoKLSAgICAgICAgICAgIGlmIChkZXNjLmdldEJvdHRvbVVwKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlUnVudGltZUlkID0gZGVzYy5nZXRJZCgpOyAKLSAgICAgICAgICAgICAgaWRzLmFkZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV046Ci0gICAgICAgICAgICBpZiAoZGVzYy5nZXRUb3BEb3duKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlUnVudGltZUlkID0gZGVzYy5nZXRJZCgpOyAKLSAgICAgICAgICAgICAgaWRzLmFkZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10paWRzLnRvQXJyYXkobmV3IFN0cmluZ1tde30pOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIHNlcnZpY2VSdW50aW1lcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUsIHdpdGggcHJlZmVycmVkIHNlcnZlciAKLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybnMgU3RyaW5nW10gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIGFsbCBzZXJ2aWNlUnVudGltZXMgdGhhdAotICAgKiBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSAKLSAgewotCS8vICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkvLwkJCS5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0JLy8JU3RyaW5nIHByZWZlcnJlZFJ1bnRpbWVJZCA9IGNvbnRleHQuZ2V0UnVudGltZUlkKCk7Ci0JLy8JU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0KLSAgICBpbnQgc2NlbmFyaW8gPSBnZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZUlkKTsKLSAgICBTdHJpbmcgaW1wbElkID0gZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQodHlwZUlkKTsgICAgCi0gICAgQXJyYXlMaXN0IGlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBBcnJheUxpc3QgaWRzUHJlZmVycmVkQnlTZXJ2ZXIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpICAgCi0gICAgewotICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2VSdW50aW1lIHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAgICBpZiAoZGVzYy5nZXRTZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKS5lcXVhbHMoaW1wbElkKSkKLSAgICAgIHsKLSAgICAgICAgc3dpdGNoIChzY2VuYXJpbykKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQOgotICAgICAgICAgICAgaWYgKGRlc2MuZ2V0Qm90dG9tVXAoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgPSBkZXNjLmdldElkKCk7IAotICAgICAgICAgICAgICBpZiAoZGVzYy5nZXRSdW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSgpICE9IG51bGwgJiYgZGVzYy5nZXRSdW50aW1lUHJlZmVycmVkU2VydmVyVHlwZSgpLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICAgICAgCSAgaWRzUHJlZmVycmVkQnlTZXJ2ZXIuYWRkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgCSAgaWRzLmFkZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV046Ci0gICAgICAgICAgICBpZiAoZGVzYy5nZXRUb3BEb3duKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlUnVudGltZUlkID0gZGVzYy5nZXRJZCgpOyAKLSAgICAgICAgICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUoKSAhPSBudWxsICYmIGRlc2MuZ2V0UnVudGltZVByZWZlcnJlZFNlcnZlclR5cGUoKS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKLSAgICAgICAgICAgIAkgIGlkc1ByZWZlcnJlZEJ5U2VydmVyLmFkZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIAkgIGlkcy5hZGQoc2VydmljZVJ1bnRpbWVJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBhcHBlbmQgcHJlZmVycmVkUnVudGltZSBhZnRlciBwcmVmZXJyZWRSdW50aW1lSWRzTGlzdFByZWZlcnJlZEJ5U2VydmVyCi0gICAgU3RyaW5nW10gcHJlZmVycmVkUnVudGltZUlkcyA9IG5ldyBTdHJpbmdbaWRzUHJlZmVycmVkQnlTZXJ2ZXIuc2l6ZSgpK2lkcy5zaXplKCldOwotICAgIEl0ZXJhdG9yIGl0cjEgPSBpZHNQcmVmZXJyZWRCeVNlcnZlci5pdGVyYXRvcigpOwotICAgIGludCBwcmVmZXJyZWRSVENvdW50ZXIgPSAwOwotICAgIHdoaWxlIChpdHIxLmhhc05leHQoKSkgewotCQlTdHJpbmcgcnVudGltZUlkID0gKFN0cmluZykgaXRyMS5uZXh0KCk7Ci0JCXByZWZlcnJlZFJ1bnRpbWVJZHNbcHJlZmVycmVkUlRDb3VudGVyKytdID0gcnVudGltZUlkOwotCX0KLSAgICAKLSAgICBJdGVyYXRvciBpdHIyID0gaWRzLml0ZXJhdG9yKCk7ICAKLSAgICAgCi0gICAgd2hpbGUgKGl0cjIuaGFzTmV4dCgpKSB7Ci0JCVN0cmluZyBydW50aW1lSWQgPSAoU3RyaW5nKSBpdHIyLm5leHQoKTsKLQkJcHJlZmVycmVkUnVudGltZUlkc1twcmVmZXJyZWRSVENvdW50ZXIrK10gPSBydW50aW1lSWQ7CQkKLQl9Ci0KLSAgICByZXR1cm4gcHJlZmVycmVkUnVudGltZUlkczsKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgcnVudGltZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUuCi0gICAqIAotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSB0eXBlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8gCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1J1bnRpbWVTdXBwb3J0ZWRGb3JTZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkKQotICB7Ci0gICAgU3RyaW5nW10gc2VydmljZVJ1bnRpbWVJZHMgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgaWYgKHNlcnZpY2VSdW50aW1lSWRzIT1udWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNlcnZpY2VSdW50aW1lSWRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZHNbaV0pOwotICAgICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWRzIG9mIGFsbCBzZXJ2ZXIgdHlwZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBXZWIgc2VydmljZSB0eXBlLgotICAgKiAKLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcmV0dXJucyBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0Ci0gICAqIHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVR5cGUoU3RyaW5nIHR5cGVJZCkKLSAgewotICAgIEFycmF5TGlzdCBzZXJ2ZXJGYWN0b3J5SWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZ1tdIHNydHMgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgaWYgKHNydHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNydHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIC8vR2V0IHRoZSBydW50aW1lcyB0aGF0IHdvcmsgZm9yIHRoZSBmYWNldHMgcmVxdWlyZWQgZm9yIHRoaXMgc2VydmljZVJ1bnRpbWUgICAgICAgIAotICAgICAgICBTdHJpbmdbXSBmSWRzID0gZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVJ1bnRpbWUoc3J0c1tpXSk7Ci0gICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFzZXJ2ZXJGYWN0b3J5SWRzLmNvbnRhaW5zKGZJZHNbal0pKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNlcnZlckZhY3RvcnlJZHMuYWRkKGZJZHNbal0pOyAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXNlcnZlckZhY3RvcnlJZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gICAgCi0gICAgLy9UZW1wb3JhcmlseSByZXR1cm4gYWxsIHNlcnZlciB0eXBlIGlkcy4KLSAgICAvL3JldHVybiBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzV2l0aFJ1bnRpbWVzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUuCi0gICAqIAotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgaWQgb2YgYSBzZXJ2ZXIgdHlwZQotICAgKiAKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUuIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXJ2ZXJTdXBwb3J0ZWRGb3JDaG9zZW5TZXJ2aWNlVHlwZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgaWYgKGZJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wO2k8Zklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQuZXF1YWxzKGZJZHNbaV0pKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWRzIG9mIGFsbCBzZXJ2ZXIgdHlwZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBzZXJ2aWNlUnVudGltZS4KLSAgICogCi0gICAqIEBwYXJhbSBzZXJ2aWNlUnVudGltZUlkIGlkIG9mIGEgc2VydmljZVJ1bnRpbWUKLSAgICogCi0gICAqIEByZXR1cm5zIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiAKLSAgICovICAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVJ1bnRpbWUoU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQpCi0gIHsgICAgICAgCi0gICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIFNldCBmYWNldFJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgICAgICAKLSAgICAvL1RlbXBvcmFyaWx5IHJldHVybiBhbGwgc2VydmVyIHR5cGVzCi0gICAgLy9yZXR1cm4gZ2V0QWxsU2VydmVyRmFjdG9yeUlkc1dpdGhSdW50aW1lcygpOwotICAgIHJldHVybiBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICB9IAotICAKLQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogc2VydmljZVJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgaWQgb2YgYSBzZXJ2ZXIgdHlwZQotICAgKiAKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIHNlcnZpY2VSdW50aW1lLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFNlcnZlcihTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIFN0cmluZ1tdIHNlcnZlcklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeVNlcnZpY2VSdW50aW1lKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHNlcnZlcklkc1tpXS5lcXVhbHMoc2VydmVyRmFjdG9yeUlkKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAgIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGFiZWxzIGFuZCBpZHMgb2YgYWxsIFdlYiBzZXJ2aWNlIHR5cGVzLiBVc2VkIHRvIHBvcHVsYXRlIHRoZSBXZWIgc2VydmljZSB0eXBlIGNvbWJvIGJveCBvbgotICAgKiBwYWdlIDEgb2YgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZC4KLSAgICogQHJldHVybiB7QGxpbmsgTGFiZWxzQW5kSWRzfQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBMYWJlbHNBbmRJZHMgZ2V0U2VydmljZVR5cGVMYWJlbHMoKQotICB7ICAgCi0gICAgTGFiZWxzQW5kSWRzIGxhYmVsSWRzID0gbmV3IExhYmVsc0FuZElkcygpOwotICAgIEl0ZXJhdG9yICAgICBpdGVyYXRvciA9IHJlZ2lzdHJ5LndlYlNlcnZpY2VUeXBlc0xpc3RfLml0ZXJhdG9yKCk7Ci0gICAgaW50ICAgICAgICAgIHNpemUgICAgID0gcmVnaXN0cnkud2ViU2VydmljZVR5cGVzTGlzdF8uc2l6ZSgpOwotICAgIFN0cmluZ1tdICAgICBsYWJlbHMgICA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgU3RyaW5nW10gICAgIGlkcyAgICAgID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICBpbnQgICAgICAgICAgaW5kZXggICAgPSAwOwotICAgIAotICAgIGxhYmVsSWRzLnNldExhYmVsc18oIGxhYmVscyApOwotICAgIGxhYmVsSWRzLnNldElkc18oIGlkcyApOwotICAgIAotICAgIHdoaWxlKCBpdGVyYXRvci5oYXNOZXh0KCkgKSAKLSAgICB7Ci0gICAgICBTdHJpbmcgd3N0ID0gKFN0cmluZylpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBpbnQgc2NlbmFyaW8gPSBnZXRTY2VuYXJpb0Zyb21UeXBlSWQod3N0KTsKLSAgICAgIFN0cmluZyBpbXBsSWQgPSBnZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZCh3c3QpOwotICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gZ2V0V2ViU2VydmljZUltcGxCeUlkKGltcGxJZCk7Ci0gICAgICBTdHJpbmcgaW1wbGxhYmVsID0gd3NpbXBsLmdldExhYmVsKCk7Ci0gICAgICBpZHNbaW5kZXhdICAgID0gd3N0OwotICAgICAgU3RyaW5nIHNjZW5MYWJlbCA9ICIiOwotICAgICAgc3dpdGNoKHNjZW5hcmlvKQotICAgICAgewotICAgICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVA6Ci0gICAgICAgIHNjZW5MYWJlbCA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CT1RUT01VUF9MQUJFTCwgbmV3IFN0cmluZ1swXSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTjoKLSAgICAgICAgc2NlbkxhYmVsID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPUERPV05fTEFCRUwsIG5ldyBTdHJpbmdbMF0pOwotICAgICAgICBicmVhazsgCi0gICAgICBkZWZhdWx0OgotICAgICAgfQotICAgICAgbGFiZWxzW2luZGV4XSA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5DT01CSU5FRF9UWVBFX0FORF9SVU5USU1FX0xBQkVMLCBuZXcgU3RyaW5nW117IHNjZW5MYWJlbCwgaW1wbGxhYmVsIH0pOwotICAgICAgaW5kZXgrKzsKLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiBsYWJlbElkczsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLgotICAgKiAgCi0gICAqIEBwYXJhbSB0eXBlSWQgd2lsbCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUuIAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFJ1bnRpbWVWYWx1ZUZvcihTdHJpbmcgdHlwZUlkKQotICB7Ci0gICAgU3RyaW5nW10gc3JJZHMgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgaWYgKHNySWRzID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotICAgIFN0cmluZyBwcmVmZXJyZWRSdW50aW1lSWQgPSBjb250ZXh0LmdldFJ1bnRpbWVJZCgpOwotICAgIAotICAgIFN0cmluZyBydW50aW1lSWQ7Ci0gICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcklkcy5sZW5ndGg7IGkrKykgewotCQlydW50aW1lSWQgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNySWRzW2ldKS5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLQkJaWYgKHJ1bnRpbWVJZC5lcXVhbHMocHJlZmVycmVkUnVudGltZUlkKSkgewotCQkJcmV0dXJuIHJ1bnRpbWVJZDsKLQkJfQotCX0KLSAgICAKLSAgICAvLyBUaGUgcHJlZmVycmVkIHJ1bnRpbWUgZG9lcyBub3Qgc3VwcG9ydCB0eXBlSWQuICBKdXN0IHJldHVybiB0aGUgZmlyc3Qgc2VydmljZSBydW50aW1lIHRoYXQgZG9lcyBzdXBwb3J0IHR5cGVJZC4KLSAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc3JJZHNbMF0pOwotICAgIHJldHVybiBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICB9ICAgICAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IHJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IHR5cGUuCi0gICAqICAKLSAgICogQHBhcmFtIHR5cGVJZCBUaGUgY2xpZW50IHR5cGUgSUQuIAotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgcnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgdHlwZS4gCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgV2ViIHNlcnZpY2UgY2xpZW50IHJ1bnRpbWUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudFJ1bnRpbWVWYWx1ZUZvcihTdHJpbmcgdHlwZUlkKQotICB7Ci0gICAgU3RyaW5nW10gY3JJZHMgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZSh0eXBlSWQpOyAgICAgCQotICAgIGlmIChjcklkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLSAgICBTdHJpbmcgcHJlZmVycmVkUnVudGltZUlkID0gY29udGV4dC5nZXRSdW50aW1lSWQoKTsKLSAgICAKLSAgICBTdHJpbmcgcnVudGltZUlkOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3JJZHMubGVuZ3RoOyBpKyspIHsKLQkJcnVudGltZUlkID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzW2ldKS5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLQkJaWYgKHJ1bnRpbWVJZC5lcXVhbHMocHJlZmVycmVkUnVudGltZUlkKSkgewotCQkJcmV0dXJuIHJ1bnRpbWVJZDsKLQkJfQotCX0KLSAgICAKLSAgICAvLyBUaGUgcHJlZmVycmVkIHJ1bnRpbWUgZG9lcyBub3Qgc3VwcG9ydCB0eXBlSWQuICBKdXN0IHJldHVybiB0aGUgZmlyc3Qgc2VydmljZSBydW50aW1lIHRoYXQgZG9lcyBzdXBwb3J0IHR5cGVJZC4KLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzWzBdKTsKLSAgICByZXR1cm4gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIG9mIGEgc2VydmVyIHR5cGUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogUmV0dXJucyB0aGUgc2VydmVyIHR5cGUgSUQgZnJvbSB0aGUgcHJlZmVyZW5jZSBpZiBpdCBzdXBwb3J0cyB0aGUgdHlwZUlkLgotICAgKiAgCi0gICAqIEBwYXJhbSB0eXBlSWQgd2lsbCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBpZCBvZiBhIHNlcnZlciB0eXBlIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUuIAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIHNlcnZlciB0eXBlIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovICAgIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0U2VydmVyVmFsdWVGb3IoU3RyaW5nIHR5cGVJZCkKLSAgewotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChmSWRzPT1udWxsIHx8IGZJZHMubGVuZ3RoPT0wKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmSWRzLmxlbmd0aDsgaSsrKSB7Ci0JCVN0cmluZyBzZXJ2ZXJUeXBlSWQgPSBmSWRzW2ldOwotCQlpZiAoc2VydmVyVHlwZUlkLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKSB7Ci0JCQlyZXR1cm4gc2VydmVyVHlwZUlkOwotCQl9Ci0JfQotICAgIHJldHVybiBmSWRzWzBdOwotICB9ICAgIAotIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgdHlwZS4KLSAgICogUmV0dXJucyB0aGUgc2VydmVyIHR5cGUgSUQgZnJvbSB0aGUgcHJlZmVyZW5jZSBpZiBpdCBzdXBwb3J0cyB0aGUgdHlwZUlkLgotICAgKiAgCi0gICAqIEBwYXJhbSB0eXBlSWQgVGhlIGNsaWVudCB0eXBlIElELgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBpZCBvZiBhIHNlcnZlciB0eXBlIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIGNsaWVudCB0eXBlLiAKLSAgICogUmV0dXJucyBudWxsIGlmIHN1Y2ggYSBzZXJ2ZXIgdHlwZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLyAgICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudFNlcnZlclZhbHVlRm9yKFN0cmluZyB0eXBlSWQpCi0gIHsKLSAgICBTdHJpbmdbXSBmSWRzID0gZ2V0U2VydmVyRmFjdG9yeUlkc0J5Q2xpZW50VHlwZSh0eXBlSWQpOwotICAgIGlmIChmSWRzPT1udWxsIHx8IGZJZHMubGVuZ3RoPT0wKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmSWRzLmxlbmd0aDsgaSsrKSB7Ci0JCVN0cmluZyBzZXJ2ZXJUeXBlSWQgPSBmSWRzW2ldOwotCQlpZiAoc2VydmVyVHlwZUlkLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKSB7Ci0JCQlyZXR1cm4gc2VydmVyVHlwZUlkOwotCQl9Ci0JfQotICAgIHJldHVybiBmSWRzWzBdOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCBhbmQgV2ViIHNlcnZpY2UgdHlwZSBpcwotICAgKiBzdXBwb3J0ZWQuIFVzZWQgZm9yIHZhbGlkYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHR5cGVJZCB3aWxsIGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCBhbmQgV2ViIHNlcnZpY2UgdHlwZSBpcwotICAgKiBzdXBwb3J0ZWQuIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXJ2ZXJSdW50aW1lVHlwZVN1cHBvcnRlZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdHlwZUlkKSAgCi0gIHsKLSAgICAvL0Vuc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc2VydmljZVJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gdHlwZQotICAgIFN0cmluZ1tdIHNlcnZpY2VSdW50aW1lcyA9IGdldFNlcnZpY2VSdW50aW1lc0J5U2VydmljZVR5cGUodHlwZUlkKTsKLSAgICBpZiAoc2VydmljZVJ1bnRpbWVzIT1udWxsICYmIHNlcnZpY2VSdW50aW1lcy5sZW5ndGg+MCkKLSAgICB7Ci0gICAgICAvL0Vuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBzZXJ2ZXIgcnVudGltZXMgc3VwcG9ydHMgdGhlIGdpdmVuIHNlcnZlcgotICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZpY2VSdW50aW1lcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lc1tpXSk7Ci0gICAgICAgIGlmIChkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy9NYXRjaGVzIHRoZSB0eXBlIGFuZCB0aGUgcnVudGltZS4gQ2hlY2sgaWYgaXQgbWF0Y2hlcyB0aGUgc2VydmVyCi0gICAgICAgICAgU2V0IHJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMocnVudGltZXMpOwotICAgICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChmSWRzW2pdLmVxdWFscyhzZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9kaWRuJ3QgZmluZCBhIG1hdGNoLiByZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFdlYiBzZXJ2aWNlIHR5cGUgaWRzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciB0aGUgcHJvdmlkZWQgc2VsZWN0aW9uLgotICAgKiBVc2VkIHRvIGRlZmF1bHQgdGhlIFdlYiBzZXJ2aWNlIHR5cGUgY29tYm8gYm94IG9uIHBhZ2UgMSBvZiB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkCi0gICAqIGJhc2VkIG9uIHRoZSB1c2VyJ3MgaW5pdGlhbCBzZWxlY3Rpb24uCi0gICAqIEBwYXJhbSBzZWxlY3Rpb24KLSAgICogQHJldHVybiBTdHJpbmdbXSBhbiBhcnJheSBvZiBXZWIgc2VydmljZSB0eXBlIGlkcyB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgdGhlIHByb3ZpZGVkIHNlbGVjdGlvbi4KLSAgICogUmV0dXJucyBudWxsIGlmIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHkgb3Igbm8gc3VpdGFibGUgV2ViIHNlcnZpY2UgdHlwZXMgYXJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlVHlwZUJ5U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIFR5cGVTZWxlY3Rpb25GaWx0ZXIyIHRzZiA9IG5ldyBUeXBlU2VsZWN0aW9uRmlsdGVyMigpOwotICAgIFN0cmluZ1tdIHdzdCA9IHRzZi5nZXRXZWJTZXJ2aWNlVHlwZUJ5SW5pdGlhbFNlbGVjdGlvbihzZWxlY3Rpb24sIHJlZ2lzdHJ5LndlYlNlcnZpY2VUeXBlc0xpc3RfKTsKLSAgICByZXR1cm4gd3N0ID09IG51bGwgPyBudWxsIDogd3N0OwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIDogaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEBwYXJhbSBmYWN0b3J5SWQgOiBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBydW50aW1lIGZvciB0aGUgc2VydmljZSBzaWRlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNSdW50aW1lU3VwcG9ydFNlcnZlckZvclNlcnZpY2VTaWRlKFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBmYWN0b3J5SWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcnMgdGhhdCBwb2ludCB0byB0aGlzIHJ1bnRpbWVJZAotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vY2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBwb2ludHMgdG8gcnVudGltZUlkCi0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLSAgICAgICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMoZmFjZXRSdW50aW1lcyk7Ci0gICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGZJZHNbal0uZXF1YWxzKGZhY3RvcnlJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgICAKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9ObyBzZXJ2aWNlUnVudGltZSBtYXRjaGVkLiBSZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIG9uIHRoZSBzZXJ2aWNlIHNpZGUuCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIHNlcnZlciB0eXBlIGNhbm5vdCBiZSBmb3VuZC4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaXJzdFN1cHBvcnRlZFNlcnZlckZvclNlcnZpY2VTaWRlKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcnMgdGhhdCBwb2ludCB0byB0aGlzIHJ1bnRpbWVJZAotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vY2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBwb2ludHMgdG8gcnVudGltZUlkCi0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLSAgICAgICAgU3RyaW5nW10gZmFjdG9yeUlkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMoZmFjZXRSdW50aW1lcyk7Ci0gICAgICAgIGlmIChmYWN0b3J5SWRzIT1udWxsICYmIGZhY3RvcnlJZHMubGVuZ3RoID4wKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhY3RvcnlJZHNbMF07Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9kaWRuJ3QgZ2V0IGEgc2luZ2xlIHN1aXRhYmxlIHNlcnZlciB0eXBlIGlkLCByZXR1cm4gbnVsbC4KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2Ugd2hpY2ggc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZQotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgb2YgcHJvamVjdCBuYW1lcy4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFByb2plY3RzRm9yU2VydmljZVR5cGVBbmRSdW50aW1lKFN0cmluZyB0eXBlSWQsIFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gRmFjZXRVdGlscy5nZXRBbGxQcm9qZWN0cygpOwotICAgIEFycmF5TGlzdCB2YWxpZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChkb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QodHlwZUlkLCBydW50aW1lSWQsIHByb2plY3RzW2ldLmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldLmdldE5hbWUoKSk7ICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSl2YWxpZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwcm9qZWN0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgYW4gSVByb2plY3QgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUgYW5kIAotICAgKiBXZWIgc2VydmljZSBydW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZSBhbmQgV2ViIHNlcnZpY2UgcnVudGltZSBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiBwcm9qZWN0TmFtZSBpcyBudWxsIG9yIGVtcHR5PC9saT4KLSAgICogPC91bD4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QoU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXNjcy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoZGVzY3Nbal0pOwotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0UHJvamVjdChkZXNjc1tqXSwgcHJvamVjdE5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcHJvamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUnVudGltZUlkIGlkIG9mIGEgc2VydmljZVJ1bnRpbWUKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgYW4gSVByb2plY3QgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuCi0gICAqIHNlcnZpY2VSdW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgcHJvamVjdE5hbWUgaXMgbnVsbCBvciBlbXB0eTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0UHJvamVjdChTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGZhbHNlLCBzZXJ2aWNlUnVudGltZUlkLCBwcm9qZWN0TmFtZSk7Ci0gICAgaWYgKGZtICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZtLmlzTWF0Y2goKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9ICAgIAotICB9ICAKLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2Yge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBpZHMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlCi0gICAqIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IGlkcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUKLSAgICogYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiBSZXR1cm5zIG51bGwgaWYgbm8gc2VydmljZVJ1bnRpbWVzIHN1cHBvcnRpbmcKLSAgICogdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUgY291bGQgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZpY2VQcm9qZWN0VGVtcGxhdGVzKFN0cmluZyB0eXBlSWQsIFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICBTdHJpbmdbXSBzcklkcyA9IGdldFNlcnZpY2VSdW50aW1lc0J5U2VydmljZVR5cGUodHlwZUlkKTsKLSAgICBpZiAoc3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBBcnJheUxpc3QgdGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc3JJZHNbaV0pOwotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2VydmljZVJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgIAotICAgICAgICAvL0FkZCB0aGUgdGVtcGxhdGUgaWRzIHRvIHRoZSBsaXN0IGlmIHRoZXkgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFkZGVkCi0gICAgICAgIEl0ZXJhdG9yIGl0ciA9IHRlbXBsYXRlcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gKElGYWNldGVkUHJvamVjdFRlbXBsYXRlKWl0ci5uZXh0KCk7Ci0gICAgICAgICAgaWYgKCF0ZW1wbGF0ZUlkTGlzdC5jb250YWlucyh0ZW1wbGF0ZS5nZXRJZCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZUlkTGlzdC5hZGQodGVtcGxhdGUuZ2V0SWQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9ICAKLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXRlbXBsYXRlSWRMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1tde30pOyAgICAKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlCi0gICAqIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc1NlcnZpY2VUeXBlQW5kUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIFN0cmluZ1tdIHNySWRzID0gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChzcklkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNySWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzcklkc1tpXSk7Ci0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgLy9HZXQgdGhlIHRlbXBsYXRlcyBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZQotICAgICAgICBTZXQgdGVtcGxhdGVzID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGVzRm9yU2VydmljZVJ1bnRpbWUoc3JJZHNbaV0pOwotICAgICAgICAKLSAgICAgICAgLy9DaGVjayBpZiBhbnkgb2YgdGhlIHRlbXBsYXRlIGlkcyBtYXRjaCB0aGUgZ2l2ZW4gb25lLgotICAgICAgICBJdGVyYXRvciBpdHIgPSB0ZW1wbGF0ZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IChJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSlpdHIubmV4dCgpOwotICAgICAgICAgIGlmICh0ZW1wbGF0ZS5nZXRJZCgpLmVxdWFscyh0ZW1wbGF0ZUlkKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgfSAgCi0gICAgCi0gICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gc3VwcG9ydHMgdGhlIGdpdmVuIHNlcnZpY2VSdW50aW1lLgotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIGlkIG9mIGEge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBzZXJ2aWNlUnVudGltZS4gUmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCwgU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIHNlcnZpY2VSdW50aW1lCi0gICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIGNoZWNraW5nVGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLSAgICByZXR1cm4gdGVtcGxhdGVzLmNvbnRhaW5zKGNoZWNraW5nVGVtcGxhdGUpOwotICB9ICAKLSAgCi0gIC8vQ2xpZW50LXNpZGUgdXRpbGl0aWVzCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgV2ViU2VydmljZUNsaWVudEltcGwgZ2l2ZW4gdGhlIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBpZCAKLSAgICogQHJldHVybiB7QGxpbmsgV2ViU2VydmljZUNsaWVudEltcGx9IHdpdGggdGhlIGdpdmVuIGlkCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgV2ViU2VydmljZUNsaWVudEltcGwgY2Fubm90IGJlIGZvdW5kLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VDbGllbnRJbXBsIGdldFdlYlNlcnZpY2VDbGllbnRJbXBsQnlJZChTdHJpbmcgaWQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gcmVnaXN0cnkud2ViU2VydmljZUNsaWVudEltcGxzXy5nZXQoaWQpOwotICAgIGlmIChyZXN1bHQhPW51bGwpCi0gICAgewotICAgICAgcmV0dXJuIChXZWJTZXJ2aWNlQ2xpZW50SW1wbClyZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSB7QGxpbmsgQ2xpZW50UnVudGltZURlc2NyaXB0b3J9IGdpdmVuIHRoZSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUuCi0gICAqIEBwYXJhbSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHJldHVybiBDbGllbnRSdW50aW1lRGVzY3JpcHRvciB3aXRoIHRoZSBnaXZlbiBpZAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy5nZXQoaWQpOwotICAgIGlmIChyZXN1bHQhPW51bGwpCi0gICAgewotICAgICAgcmV0dXJuIChDbGllbnRSdW50aW1lRGVzY3JpcHRvcilyZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgICAgCi0gIH0gICAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUge0BsaW5rIElXZWJTZXJ2aWNlUnVudGltZX0gb2YgdGhlIGdpdmVuIGNsaWVudFJ1bnRpbWUuIEV4dGVuZGVycyBwcm92aWRlIHRoZSBmdWxseSAKLSAgICogcXVhbGlmaWVkIG5hbWUgb2YgYSBjb25jcmV0ZSBJV2ViU2VydmljZVJ1bnRpbWUgaW4gdGhlIGNsYXNzIGF0dHJpYnV0ZSBvZiBhIGNsaWVudFJ1bnRpbWVzIGV4dGVuc2lvbi4KLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHJldHVybiBJV2ViU2VydmljZVJ1bnRpbWUKLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBJV2ViU2VydmljZVJ1bnRpbWUgZ2V0Q2xpZW50UnVudGltZSggU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCApCi0gIHsKLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgSVdlYlNlcnZpY2VSdW50aW1lICAgIHdlYnNlcnZpY2VSdW50aW1lICAgICA9IG51bGw7Ci0gICAgaWYgKGRlc2NyaXB0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIHdlYnNlcnZpY2VSdW50aW1lID0gZGVzY3JpcHRvci5nZXRXZWJTZXJ2aWNlUnVudGltZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd2Vic2VydmljZVJ1bnRpbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgcHJvdmlkZWQgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsCi0gICAqIHNlcnZlciB0eXBlL3NlcnZlciBpbnN0YW5jZSAoaWYgcHJlc2VudCksIHByb2plY3Qgb3IgcHJvamVjdCB0eXBlLgotICAgKiBAcGFyYW0gdHJzIGFuIGluc3RhbmNlIG9mIHtAbGluayBUeXBlUnVudGltZVNlcnZlcn0gY29udGFpbmluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLCBXZWIgc2VydmljZSBydW50aW1lIGlkLAotICAgKiBzZXJ2ZXIgdHlwZSBpZCBhbmQgc2VydmVyIGluc3RhbmNlIGlkLiBUaGUgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaWQgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWQgbXVzdCBiZSBub24tbnVsbCAKLSAgICogYW5kIG5vbi1lbXB0eS4gVGhlIHNlcnZlciB0eXBlIGlkIGFuZCBzZXJ2ZXIgaW5zdGFuY2UgaWQgbWF5IGJlIG51bGwgb3IgZW1wdHkuCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSB0aGUgbmFtZSBvZiBhbiBJUHJvamVjdCB0aGF5IG1heSBvciBtYXQgbm90IGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UuIE11c3QgYmUgbm9uLW51bGwgYW5kIAotICAgKiBub24tZW1wdHkuCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIHRoZSBpZCBvZiBhbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9LiBNdXN0IGJlIG5vbi1udWxsIGFuZCBub24tZW1wdHkgaWYKLSAgICogYW4gSVByb2plY3Qgd2l0aCB0aGUgbmFtZSBwcm9qZWN0TmFtZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd29ya3NwYWNlLiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBjbGllbnRSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLAotICAgKiBzZXJ2ZXIgdHlwZS9zZXJ2ZXIgaW5zdGFuY2UgKGlmIHByZXNlbnQpLCBwcm9qZWN0IG9yIHByb2plY3QgdHlwZS4gUmV0dXJucyBhbiBlbXB0eSBTdHJpbmcgaWYgbm8gCi0gICAqIHN1Y2ggY2xpZW50UnVudGltZSBjb3VsZCBiZSBmb3VuZC4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUlkKFR5cGVSdW50aW1lU2VydmVyIHRycywgU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIGJvb2xlYW4gc2VydmVyU2VsZWN0ZWQgPSAodHJzLmdldFNlcnZlcklkKCkhPW51bGwpICYmICh0cnMuZ2V0U2VydmVySWQoKS5sZW5ndGgoKT4wKTsKLSAgICAvL0ZpbmQgdGhlIGZpcnN0IGNsaWVudFJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZSwgcnVudGltZSwgc2VydmVyLCBhbmQgcHJvamVjdAotICAgIFN0cmluZ1tdIGRlc2NzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUodHJzLmdldFR5cGVJZCgpLCB0cnMuZ2V0U2VydmVySWQoKSk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGRlc2NzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoZGVzY3NbaV0pOyAgICAgIAotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHRycy5nZXRSdW50aW1lSWQoKSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChzZXJ2ZXJTZWxlY3RlZCkKLSAgICAgICAgewotICAgICAgICAgIGJvb2xlYW4gc3VwcG9ydHNTZXJ2ZXIgPSBkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRTZXJ2ZXIoZGVzYy5nZXRJZCgpLCB0cnMuZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgaWYgKCFzdXBwb3J0c1NlcnZlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRQcm9qZWN0KGRlc2MuZ2V0SWQoKSwgcHJvamVjdE5hbWUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBkZXNjLmdldElkKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vQ2hlY2sgaWYgdGVtcGxhdGUgaXMgc3VwcG9ydGVkCi0gICAgICAgICAgaWYgKGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFRlbXBsYXRlKGRlc2MuZ2V0SWQoKSwgdGVtcGxhdGVJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0SWQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICIiOwotICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgV2ViIHNlcnZpY2UgcnVudGltZSBpZHMgZm9yIHRoZSBjbGllbnQgc2lkZS4KLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiBXZWIgc2VydmljZSBydW50aW1lIGlkcyBmb3IgdGhlIGNsaWVudCBzaWRlLgotICAgKiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbFJ1bnRpbWVzRm9yQ2xpZW50U2lkZSgpIAotICB7Ci0gICAgQXJyYXlMaXN0IHJ1bnRpbWVJZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOyAKLSAgICAgIGlmICghcnVudGltZUlkcy5jb250YWlucyh0aGlzUnVudGltZUlkKSkKLSAgICAgIHJ1bnRpbWVJZHMuYWRkKHRoaXNSdW50aW1lSWQpOwotICAgIH0gICAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXJ1bnRpbWVJZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIGNsaWVudFJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJucyBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIGNsaWVudFJ1bnRpbWVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZShTdHJpbmcgY2xpZW50SW1wbElkKSAKLSAgewotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2VSdW50aW1lIHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAgICBpZiAoZGVzYy5nZXRDbGllbnRJbXBsZW1lbnRhdGlvblR5cGUoKS5nZXRJZCgpLmVxdWFscyhjbGllbnRJbXBsSWQpKQotICAgICAgewotICAgICAgICBpZHMuYWRkKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10paWRzLnRvQXJyYXkobmV3IFN0cmluZ1tde30pOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIGNsaWVudFJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgYW5kIHRoZSBwcmVmZXJyZWQgc2VydmVyCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJucyBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIGNsaWVudFJ1bnRpbWVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZShTdHJpbmcgY2xpZW50SW1wbElkLCBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSAKLSAgewotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQXJyYXlMaXN0IGlkc1ByZWZlcnJlZEJ5U2VydmVyID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5jbGllbnRSdW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpICAgCi0gICAgewotICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChDbGllbnRSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vQ2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZQotICAgICAgaWYgKGRlc2MuZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKS5lcXVhbHMoY2xpZW50SW1wbElkKSkKLSAgICAgIHsKLSAgICAJICBTdHJpbmcgY2xpZW50UnVudGltZUlkID0gZGVzYy5nZXRJZCgpOwotICAgIAkgIGlmIChkZXNjLmdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCAmJiBkZXNjLmdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpIHsKLSAgICAJCSAgaWRzUHJlZmVycmVkQnlTZXJ2ZXIuYWRkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgCSAgfSBlbHNlIHsKLSAgICAJCSAgaWRzLmFkZChjbGllbnRSdW50aW1lSWQpOwotICAgIAkgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gLy8gYXBwZW5kIHByZWZlcnJlZFJ1bnRpbWUgYWZ0ZXIgcHJlZmVycmVkUnVudGltZUlkc0xpc3RQcmVmZXJyZWRCeVNlcnZlcgotICAgIFN0cmluZ1tdIHByZWZlcnJlZFJ1bnRpbWVJZHMgPSBuZXcgU3RyaW5nW2lkc1ByZWZlcnJlZEJ5U2VydmVyLnNpemUoKStpZHMuc2l6ZSgpXTsKLSAgICBJdGVyYXRvciBpdHIxID0gaWRzUHJlZmVycmVkQnlTZXJ2ZXIuaXRlcmF0b3IoKTsKLSAgICBpbnQgcHJlZmVycmVkUlRDb3VudGVyID0gMDsKLSAgICB3aGlsZSAoaXRyMS5oYXNOZXh0KCkpIHsKLQkJU3RyaW5nIHJ1bnRpbWVJZCA9IChTdHJpbmcpIGl0cjEubmV4dCgpOwotCQlwcmVmZXJyZWRSdW50aW1lSWRzW3ByZWZlcnJlZFJUQ291bnRlcisrXSA9IHJ1bnRpbWVJZDsKLQl9Ci0gICAgCi0gICAgSXRlcmF0b3IgaXRyMiA9IGlkcy5pdGVyYXRvcigpOyAgCi0gICAgIAotICAgIHdoaWxlIChpdHIyLmhhc05leHQoKSkgewotCQlTdHJpbmcgcnVudGltZUlkID0gKFN0cmluZykgaXRyMi5uZXh0KCk7Ci0JCXByZWZlcnJlZFJ1bnRpbWVJZHNbcHJlZmVycmVkUlRDb3VudGVyKytdID0gcnVudGltZUlkOwkJCi0JfQotCi0gICAgcmV0dXJuIHByZWZlcnJlZFJ1bnRpbWVJZHM7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgV2ViIHNlcnZpY2UgcnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4KLSAgICogQHBhcmFtIGNsaWVudEltcGxJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIGFsbCBXZWIgc2VydmljZSBydW50aW1lcyB0aGF0Ci0gICAqIHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UnVudGltZXNCeUNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCkgCi0gIHsKLSAgICBBcnJheUxpc3QgcnVudGltZUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoQ2xpZW50UnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICAvL0NoZWNrIGlmIHRoaXMgc2VydmljZVJ1bnRpbWUgc3VwcG9ydHMgdGhlIGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICAgIGlmIChkZXNjLmdldENsaWVudEltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCkuZXF1YWxzKGNsaWVudEltcGxJZCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghcnVudGltZUlkcy5jb250YWlucyhkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJ1bnRpbWVJZHMuYWRkKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pcnVudGltZUlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4KLSAgICogQHBhcmFtIGNsaWVudEltcGxJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgcnVudGltZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUnVudGltZVN1cHBvcnRlZEZvckNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHJ1bnRpbWVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNsaWVudFJ1bnRpbWVJZHMgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZShjbGllbnRJbXBsSWQpOwotICAgIGlmIChjbGllbnRSdW50aW1lSWRzIT1udWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDsgaSA8IGNsaWVudFJ1bnRpbWVJZHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZUlkc1tpXSk7Ci0gICAgICAgIGlmIChkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgc2VydmVyIHR5cGUgaWRzIHdpdGggY29uZmlndXJlZCBzZXJ2ZXIgcnVudGltZXMuCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgb2Ygc2VydmVyIHR5cGUgaWRzLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0QWxsQ2xpZW50U2VydmVyRmFjdG9yeUlkcygpIAotICB7ICAgIAotICAgIC8vSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIC8vd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIC8vewotICAgICAgLy9UT0RPIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIHNlcnZlciB0eXBlcyBhbmQgc2VlIGlmIHRoZWlyIHJ1bnRpbWUgdHlwZXMgaGF2ZSBhbgotICAgICAgLy9pZCB0aGF0IG1hdGNoZXMgdGhlIHJ1bnRpbWUgdHlwZSBvZiBhbnkgb2YgdGhlIHJ1bnRpbWVzLiAgICAgICAgICAgIAotICAgICAgLy8gQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChDbGllbnRSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vIFNldCBydW50aW1lcyA9IGdldFJ1bnRpbWVzKGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkpOwotICAgICAgLy8gSVNlcnZlclR5cGVbXSBhbGxTZXJ2ZXJUeXBlcyA9IFNlcnZlckNvcmUuZ2V0U2VydmVyVHlwZXMoKTsKLSAgICAvL30KLSAgICAvL3JldHVybiAoU3RyaW5nW10pc2VydmVyRmFjdG9yeUlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgICAvL1RlbXBvcmFyaWx5IHJldHVybiBhbGwgc2VydmVyIHR5cGVzCi0gICAgcmV0dXJuIGdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLgotICAgKiAgCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRUeXBlKFN0cmluZyBjbGllbnRJbXBsSWQpCi0gIHsKLSAgICBBcnJheUxpc3Qgc2VydmVyRmFjdG9yeUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmdbXSBjcnRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3J0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgLy9HZXQgdGhlIHJ1bnRpbWVzIHRoYXQgd29yayBmb3IgdGhlIGZhY2V0cyByZXF1aXJlZCBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZSAgICAgICAgCi0gICAgICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGNydHNbaV0pOwotICAgICAgICBmb3IgKGludCBqPTA7IGo8Zklkcy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGlmICghc2VydmVyRmFjdG9yeUlkcy5jb250YWlucyhmSWRzW2pdKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzZXJ2ZXJGYWN0b3J5SWRzLmFkZChmSWRzW2pdKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXNlcnZlckZhY3RvcnlJZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NlcnZlclN1cHBvcnRlZEZvckNob3NlbkNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRUeXBlKGNsaWVudEltcGxJZCk7Ci0gICAgaWYgKGZJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wO2k8Zklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQuZXF1YWxzKGZJZHNbaV0pKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIGNsaWVudFJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gY2xpZW50UnVudGltZUlkIGlkIG9mIGEgY2xpZW50UnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gY2xpZW50UnVudGltZS4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZlckZhY3RvcnlJZHNCeUNsaWVudFJ1bnRpbWUoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkKLSAgeyAgICAgICAKLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLQotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgIHJldHVybiBmSWRzOyAgICAKLSAgfSAgICAKLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBjbGllbnRSdW50aW1lLgotICAgKiAKLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBjbGllbnRSdW50aW1lLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihTdHJpbmcgY2xpZW50UnVudGltZUlkLCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgU3RyaW5nW10gc2VydmVySWRzID0gZ2V0U2VydmVyRmFjdG9yeUlkc0J5Q2xpZW50UnVudGltZShjbGllbnRSdW50aW1lSWQpOwotICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHNlcnZlcklkc1tpXS5lcXVhbHMoc2VydmVyRmFjdG9yeUlkKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcGFyYW0gZmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgZm9yIHRoZSBjbGllbnQgc2lkZS4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzUnVudGltZVN1cHBvcnRTZXJ2ZXJGb3JDbGllbnRTaWRlKFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBmYWN0b3J5SWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9ycyB0aGF0IHBvaW50IHRvIHRoaXMgcnVudGltZUlkCi0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9jaGVjayBpZiB0aGlzIGNsaWVudFJ1bnRpbWUgcG9pbnRzIHRvIHJ1bnRpbWVJZAotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIFNldCBmYWNldFJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8Zklkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChmSWRzW2ldLmVxdWFscyhmYWN0b3J5SWQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL05vIG1hdGNoLgotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIHNlcnZlciB0eXBlIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogb24gdGhlIGNsaWVudCBzaWRlLgotICAgKiAKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmcgdGhlIGlkIG9mIGEgc2VydmVyIHR5cGUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBvbiB0aGUgY2xpZW50IHNpZGUuIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgc2VydmVyIHR5cGUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Rmlyc3RTdXBwb3J0ZWRTZXJ2ZXJGb3JDbGllbnRTaWRlKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9ycyB0aGF0IHBvaW50IHRvIHRoaXMgcnVudGltZUlkCi0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9jaGVjayBpZiB0aGlzIGNsaWVudFJ1bnRpbWUgcG9pbnRzIHRvIHJ1bnRpbWVJZAotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIFNldCBmYWNldFJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgIFN0cmluZ1tdIGZhY3RvcnlJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgICAgICBpZiAoZmFjdG9yeUlkcyE9bnVsbCAmJiBmYWN0b3J5SWRzLmxlbmd0aCA+MCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBmYWN0b3J5SWRzWzBdOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTm8gc3VpdGFibGUgc2VydmVycyBmb3VuZC4gUmV0dXJuIG51bGwuCi0gICAgcmV0dXJuIG51bGw7Ci0KLSAgfQotICAKLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2Ygc2VydmVyIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsIGFuZCAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaXMgc3VwcG9ydGVkLiBVc2VkIGZvciB2YWxpZGF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCAKLSAgICogYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGlzIHN1cHBvcnRlZC4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NlcnZlckNsaWVudFJ1bnRpbWVUeXBlU3VwcG9ydGVkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBjbGllbnRJbXBsSWQpICAKLSAgewotICAgIC8vRW5zdXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjbGllbnRSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIHR5cGUKLSAgICBTdHJpbmdbXSBjbGllbnRSdW50aW1lcyA9IGdldENsaWVudFJ1bnRpbWVzQnlUeXBlKGNsaWVudEltcGxJZCk7Ci0gICAgaWYgKGNsaWVudFJ1bnRpbWVzIT1udWxsICYmIGNsaWVudFJ1bnRpbWVzLmxlbmd0aD4wKQotICAgIHsKLSAgICAgIC8vRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIHNlcnZlciBydW50aW1lcyBzdXBwb3J0cyB0aGUgZ2l2ZW4gc2VydmVyCi0gICAgICBmb3IgKGludCBpPTA7IGk8Y2xpZW50UnVudGltZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZXNbaV0pOwotICAgICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgICAgewotICAgICAgICAgIC8vTWF0Y2hlZCB0eXBlIGFuZCBydW50aW1lLiBDaGVjayB0aGUgc2VydmVyLgotICAgICAgICAgIFN0cmluZ1tdIGZhY3RvcnlJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGZhY3RvcnlJZHMubGVuZ3RoOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGZhY3RvcnlJZHNbal0uZXF1YWxzKHNlcnZlckZhY3RvcnlJZCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL05vIG1hdGNoIGZvdW5kLiByZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2Yge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBpZHMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IG9mIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gaWRzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiBSZXR1cm5zIG51bGwgaWYgbm8gY2xpZW50UnVudGltZXMgc3VwcG9ydGluZwotICAgKiB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgY291bGQgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldENsaWVudFByb2plY3RUZW1wbGF0ZXMoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHJ1bnRpbWVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNySWRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBBcnJheUxpc3QgdGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzW2ldKTsKLSAgICAgIFN0cmluZyB0aGlzUnVudGltZUlkID0gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgICAgIGlmICh0aGlzUnVudGltZUlkLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgewotICAgICAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIGNsaWVudFJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vQWRkIHRoZSB0ZW1wbGF0ZSBpZHMgdG8gdGhlIGxpc3QgaWYgdGhleSBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gYWRkZWQKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gdGVtcGxhdGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpaXRyLm5leHQoKTsKLSAgICAgICAgICBpZiAoIXRlbXBsYXRlSWRMaXN0LmNvbnRhaW5zKHRlbXBsYXRlLmdldElkKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRlbXBsYXRlSWRMaXN0LmFkZCh0ZW1wbGF0ZS5nZXRJZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgIH0gIAotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pdGVtcGxhdGVJZExpc3QudG9BcnJheShuZXcgU3RyaW5nW117fSk7ICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gY2xpZW50SW1wbElkIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGFuZCBXZWIgc2VydmljZSBydW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNDbGllbnRUeXBlQW5kUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgY2xpZW50SW1wbElkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNySWRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzW2ldKTsKLSAgICAgIFN0cmluZyB0aGlzUnVudGltZUlkID0gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgICAgIGlmICh0aGlzUnVudGltZUlkLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgewotICAgICAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIGNsaWVudFJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoY3JJZHNbaV0pOwotICAgICAgICAKLSAgICAgICAgLy9DaGVjayBpZiB0aGUgdGVtcGxhdGUgaWRzIGNvbnRhaW5zIHRoZSB0ZW1wbGF0ZSB3ZSdyZSBjaGVja2luZyBmb3IKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gdGVtcGxhdGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpaXRyLm5leHQoKTsKLSAgICAgICAgICBpZiAodGVtcGxhdGUuZ2V0SWQoKS5lcXVhbHModGVtcGxhdGVJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9ICAKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7ICAgIAotICB9ICAKLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gCi0gICAqIHN1cHBvcnRzIHRoZSBnaXZlbiBjbGllbnRSdW50aW1lCi0gICAqICAKLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIGNsaWVudFJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgY2xpZW50UnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgY2xpZW50UnVudGltZQotICAgIFNldCB0ZW1wbGF0ZXMgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgY2hlY2tpbmdUZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIHJldHVybiB0ZW1wbGF0ZXMuY29udGFpbnMoY2hlY2tpbmdUZW1wbGF0ZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsYWJlbHMgYW5kIGlkcyBvZiBhbGwgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGVzLiAKLSAgICogVXNlZCB0byBwb3B1bGF0ZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHR5cGUgY29tYm8gYm94IG9uCi0gICAqIHBhZ2UgMSBvZiB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFuZCBXZWIgc2VydmljZSBjbGllbnQgd2l6YXJkLgotICAgKiBAcmV0dXJuIHtAbGluayBMYWJlbHNBbmRJZHN9Ci0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgTGFiZWxzQW5kSWRzIGdldENsaWVudFR5cGVMYWJlbHMoKQotICB7Ci0gICAgCi0gICAgTGFiZWxzQW5kSWRzIGxhYmVsSWRzID0gbmV3IExhYmVsc0FuZElkcygpOwotICAgIFN0cmluZ1tdIGlkc0FycmF5ID0gbmV3IFN0cmluZ1swXTsKLSAgICBTdHJpbmdbXSBsYWJlbHNBcnJheSA9IG5ldyBTdHJpbmdbMF07Ci0gICAgbGFiZWxJZHMuc2V0SWRzXyhpZHNBcnJheSk7Ci0gICAgbGFiZWxJZHMuc2V0TGFiZWxzXyhsYWJlbHNBcnJheSk7Ci0gIAotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQXJyYXlMaXN0IGxhYmVscyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gICAgSXRlcmF0b3IgaXRyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ci5uZXh0KCk7Ci0gICAgICBXZWJTZXJ2aWNlQ2xpZW50SW1wbCB0aGlzQ2xpZW50SW1wbCA9IGRlc2MuZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCk7Ci0gICAgICBpZiAoIWlkcy5jb250YWlucyh0aGlzQ2xpZW50SW1wbC5nZXRJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgaWRzLmFkZCh0aGlzQ2xpZW50SW1wbC5nZXRJZCgpKTsKLSAgICAgICAgbGFiZWxzLmFkZCh0aGlzQ2xpZW50SW1wbC5nZXRMYWJlbCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaWRzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgaWRzQXJyYXkgPSAoU3RyaW5nW10pIGlkcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgICAgbGFiZWxzQXJyYXkgPSAoU3RyaW5nW10pIGxhYmVscy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgICAgbGFiZWxJZHMuc2V0SWRzXyhpZHNBcnJheSk7Ci0gICAgICBsYWJlbElkcy5zZXRMYWJlbHNfKGxhYmVsc0FycmF5KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGFiZWxJZHM7Ci0KLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgc2VydmVyIHR5cGUgaWRzIGZvciB3aGljaCB0aGVyZSBhcmUgY29uZmlndXJlZCBzZXJ2ZXIgcnVudGltZXMKLSAgICogcHJlc2VudCBpbiB0aGUgd29ya3NwYWNlLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiBzZXJ2ZXIgdHlwZSBpZHMgZm9yIHdoaWNoIHRoZXJlIGFyZSBjb25maWd1cmVkIHNlcnZlciBydW50aW1lcwotICAgKiBwcmVzZW50IGluIHRoZSB3b3Jrc3BhY2UuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzV2l0aFJ1bnRpbWVzKCkKLSAgewotICAgIEFycmF5TGlzdCBmaWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIElTZXJ2ZXJUeXBlW10gc3RzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVtdIHJ0cyA9IFNlcnZlckNvcmUuZ2V0UnVudGltZXMoKTsKLSAgICAKLSAgICBmb3IgKGludCBpPTA7IGk8c3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIElTZXJ2ZXJUeXBlIHN0ID0gc3RzW2ldOwotICAgICAgZm9yIChpbnQgaj0wOyBqPHJ0cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAJaWYgKHN0ID09IG51bGwgfHwgc3QuZ2V0UnVudGltZVR5cGUoKSA9PSBudWxsKSBicmVhazsgICAgCSAgCi0gICAgICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZSBydCA9IHJ0c1tqXTsKLSAgICAgICAgLy8gSWYgdGhlIHNlcnZlciB0eXBlIGhhcyB0aGUgc2FtZSBydW50aW1lIHR5cGUgYXMgdGhpcyBydW50aW1lLCBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAgICAgU3RyaW5nIHNlcnZlclR5cGVSdW50aW1lVHlwZUlkID0gc3QuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgCUlSdW50aW1lVHlwZSBydFR5cGUgPSBydC5nZXRSdW50aW1lVHlwZSgpOwotICAgICAgICAJaWYgKHJ0VHlwZSAhPSBudWxsKQotICAgICAgICAJewotCQkgICAgICAgIFN0cmluZyBydW50aW1lUnVudGltZVR5cGVJZCA9IHJ0VHlwZS5nZXRJZCgpOwotCQkgICAgICAgIGlmIChzZXJ2ZXJUeXBlUnVudGltZVR5cGVJZC5lcXVhbHMocnVudGltZVJ1bnRpbWVUeXBlSWQpKQotCQkgICAgICAgIHsKLQkJICAgICAgICAgIGlmICghZmlkcy5jb250YWlucyhzdC5nZXRJZCgpKSkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgZmlkcy5hZGQoc3QuZ2V0SWQoKSk7Ci0JCSAgICAgICAgICB9Ci0JCSAgICAgICAgfQotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlmaWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZSB3aGljaCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgCi0gICAqIGltcGxlbWVudGF0aW9uIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdHlwZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiBwcm9qZWN0IG5hbWVzLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UHJvamVjdHNGb3JDbGllbnRUeXBlQW5kUnVudGltZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkKQotICB7Ci0gICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IEZhY2V0VXRpbHMuZ2V0QWxsUHJvamVjdHMoKTsKLSAgICBBcnJheUxpc3QgdmFsaWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICBmb3IgKGludCBpPTA7IGk8cHJvamVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoZG9lc0NsaWVudFR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QodHlwZUlkLCBydW50aW1lSWQsIHByb2plY3RzW2ldLmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldLmdldE5hbWUoKSk7ICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSl2YWxpZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIAotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhbiBJUHJvamVjdCBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJvamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZSBhbmQgCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+Ci0gICAqIDx1bD4gCi0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZSBhbmQgCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgcHJvamVjdE5hbWUgaXMgbnVsbCBvciBlbXB0eTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc0NsaWVudFR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QoU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZSh0eXBlSWQpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3MubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChkZXNjc1tqXSk7Ci0gICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFByb2plY3QoZGVzY3Nbal0sIHByb2plY3ROYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAKLSAgfSAgCi0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIGNsaWVudFJ1bnRpbWUuCi0gICAqIEBwYXJhbSBjbGllbnRSdW50aW1lSWQgaWQgb2YgYSBjbGllbnRSdW50aW1lCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIGFuIElQcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBwcm9qZWN0IHN1cHBvcnRzIHRoZSBnaXZlbgotICAgKiBjbGllbnRSdW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gY2xpZW50UnVudGltZSBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiBwcm9qZWN0TmFtZSBpcyBudWxsIG9yIGVtcHR5PC9saT4KLSAgICogPC91bD4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRQcm9qZWN0KFN0cmluZyBjbGllbnRSdW50aW1lSWQsIFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdCh0cnVlLCBjbGllbnRSdW50aW1lSWQsIHByb2plY3ROYW1lKTsKLSAgICBpZiAoZm0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZm0uaXNNYXRjaCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICAKLSAgLy9VdGlsaXRpZXMgdXNlZCBieSB0aGUgU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlCi0gIAotICBwcml2YXRlIHN0YXRpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgc2VydmVyRmFjdG9yeUlkQnlMYWJlbF87Ci0gIHByaXZhdGUgc3RhdGljIEhhc2h0YWJsZSBydW50aW1lSWRCeUxhYmVsXzsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgU2VsZWN0aW9uTGlzdENob2ljZXN9IGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgCi0gICAqIHNlcnZlciB0eXBlID4gV2ViIHNlcnZpY2UgcnVudGltZSA+IEoyRUUgY2FzY2FkaW5nIGxpc3RzIC4KLSAgICoge0BsaW5rIFNlbGVjdGlvbkxpc3RDaG9pY2VzfSBpcyBhIGRhdGEgc3RydWN0dXJlICB3aGljaCBpcyBsaWtlIGEgY2FzY2FkaW5nCi0gICAqIHNldCBvZiBsaXN0cyB1c2VmdWwgZm9yIHBvcHVsYXRpbmcgYSBncm91cCBvZiBjb21ibyBib3hlcyBpbiB3aGljaCB0aGUgCi0gICAqIHNlbGVjdGlvbiBpbiBhIGdpdmVuIGNvbWJvIGJveCBkZXRlcm1pbmVzIHRoZSBsaXN0IG9mIGl0ZW1zIHVzZWQgdG8gcG9wdWxhdGUKLSAgICogdGhlIGNvbWJvIGJveCBiZWxvdyBpdC4gVGhlIFNlcnZlciBSdW50aW1lIHByZWZlcmVuY2UgcGFnZSBjb250YWlucyB0d28gY29tYm8KLSAgICogYm94ZXM6IG9uZSBmb3Igc2VydmVyIHR5cGVzIGFuZCwgYmVsb3cgaXQsIG9uZSBmb3IgV2ViIHNlcnZpY2UgcnVudGltZXMuCi0gICAqIFRoZSBzZXJ2ZXIgdHlwZSBjb21ibyBib3ggaXMgbWVhbnQgdG8gY29udGFpbiB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNlcnZlciB0eXBlcwotICAgKiB0aGF0IHN1cHBvcnQgYXQgbGVhc3Qgb25lIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgb24gZWl0aGVyIHRoZSBjbGllbnQgb3Igc2VydmljZSBzaWRlLiAKLSAgICogVGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgY29tYm8gYm94IGlzIG1lYW50IHRvIGNvbnRhaW4gdGhlIHN1YnNldCBvZiBXZWIgc2VydmljZSBydW50aW1lcwotICAgKiBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciB0eXBlIHNlbGVjdGVkIGluIHRoZSBzZXJ2ZXIgdHlwZSBjb21ibyBib3guCi0gICAqIFRoZSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBoYXMgdGhyZWUgbGlzdHM6IHNlcnZlciB0eXBlcywgV2ViIHNlcnZpY2UgcnVudGltZXMsCi0gICAqIGFuZCBKMkVFIGxldmVscy4gVGhlIGZpcnN0IHR3byBsaXN0cyBjb3JyZXNwb25kIHRvIHRoZSBjb21ibyBib3hlcyBvbiB0aGUgcHJlZmVyZW5jZQotICAgKiBwYWdlIGFuZCBhcmUgdXNlZCB0byBwb3B1bGF0ZSB0aGVtLiBUaGUgSjJFRSBsZXZlbHMgbGlzdCBpcyBhIGhpc3RvcmljYWwgcmVtbmFudCBmcm9tCi0gICAqIHdoZW4gSjJFRSBsZXZlbHMgdXNlZCB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHByZWZlcmVuY2UgcGFnZS4gSXQgcmVtYWlucyBpbiB0aGlzIAotICAgKiBkYXRhIHN0cnVjdHVyZSB3aXRoIHNvbWUgaGFyZC1jb2RlZCB2YWx1ZXMgYnV0IGlzIG5vdCByZW5kZXJlZCB0byB0aGUgdXNlci4gCi0gICAqIAotICAgKiBAcmV0dXJuIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHJlcHJlc2VudGluZyB0aGUgc2VydmVyIHR5cGUgPiBXZWIgc2VydmljZSBydW50aW1lID4gSjJFRSBjYXNjYWRpbmcgbGlzdHMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0U2VydmVyVG9SdW50aW1lVG9KMkVFKCkKLSAgewotICAgIGlmIChzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfIT1udWxsKQotICAgIHsKLSAgICAgIHJldHVybiBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICAgIH0KLSAgICAKLSAgICAvL1RPRE8gKHNlZSBidWcgMTE2MDI1KTogSW5zdGVhZCBvZiBhbGwgc2VydmVyIHR5cGUgaWRzLCB3ZSBzaG91bGQgYmUgY2FsY3VsYXRpbmcgdGhlIHNldCBvZiBzZXJ2ZXIKLSAgICAvL3R5cGVzIHRoYXQgc3VwcG9ydCBhdCBsZWFzdCBvbmUgV2ViIHNlcnZpY2UgcnVudGltZSBvbiBlaXRoZXIgdGhlIGNsaWVudCBvciBzZXJ2aWNlIHNpZGUuCi0gICAgLy9HZXR0aW5nIGFsbCBzZXJ2ZXIgdHlwZXMgZm9yIG5vdy4KLSAgICBTdHJpbmdbXSBzZXJ2ZXJzID0gZ2V0QWxsU2VydmVyRmFjdG9yeUlkcygpOwotICAgIAotICAgIFNlbGVjdGlvbkxpc3Qgc2VydmVyc0xpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdChzZXJ2ZXJzLCAwKTsKLSAgICBWZWN0b3IgY2hvaWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8c2VydmVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBjaG9pY2VzLmFkZChnZXRSdW50aW1lQ2hvaWNlcyhzZXJ2ZXJzW2ldKSk7Ci0gICAgfQotICAgIHNlcnZlclRvUnVudGltZVRvSjJFRV8gPSBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoc2VydmVyc0xpc3QsIGNob2ljZXMpOwotICAgIHJldHVybiBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICAgIAotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0UnVudGltZUNob2ljZXMoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotCS8vVE9ETyAoc2VlIGJ1ZyAxMTYwMjUpOiBJbnN0ZWFkIG9mIGFsbCBXZWIgc2VydmljZSBydW50aW1lcywgd2Ugc2hvdWxkIGJlIAotCS8vY2FsY3VsYXRpbmcgdGhlIHN1YnNldCBvZiBXZWIgc2VydmljZSBydW50aW1lcyBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciB0eXBlCi0JLy93aXRoIGlkIGVxdWFsIHRvIHNlcnZlckZhY3RvcnlJZC4gR2V0dGluZyBhbGwgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWVzIGZvciBub3cuCi0gICAgU2V0IHJ1bnRpbWVzID0gcmVnaXN0cnkucnVudGltZXNfLmtleVNldCgpOwotICAgIEl0ZXJhdG9yIGl0ciA9IHJlZ2lzdHJ5LnJ1bnRpbWVzXy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZ1tdIHJ1bnRpbWVJZHMgPSBuZXcgU3RyaW5nW3J1bnRpbWVzLnNpemUoKV07ICAgIAotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcnVudGltZUlkID0gKFN0cmluZylpdHIubmV4dCgpOwotICAgICAgcnVudGltZUlkc1tpXSA9IHJ1bnRpbWVJZDsKLSAgICAgIGkrKzsgICAgIAotICAgIH0KLQotICAgIFNlbGVjdGlvbkxpc3QgcnVudGltZXNMaXN0ID0gbmV3IFNlbGVjdGlvbkxpc3QocnVudGltZUlkcywgMCk7Ci0gICAgVmVjdG9yIGNob2ljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaj0wOyBqPHJ1bnRpbWVJZHMubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgY2hvaWNlcy5hZGQoZ2V0SjJFRUNob2ljZXMocnVudGltZUlkc1tqXSkpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKHJ1bnRpbWVzTGlzdCwgY2hvaWNlcyk7ICAgIAotICB9ICAKLSAgCi0gIHByaXZhdGUgc3RhdGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGdldEoyRUVDaG9pY2VzKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0oyRUUgbGV2ZWxzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIFNlcnZlciBSdW50aW1lIHByZWZlcmVuY2UgcGFnZS4KLSAgICAvL1JldHVybiBzb21lIGhhcmQgY29kZWQgdmFsdWVzLiBUaGVzZSB3aWxsIG5vdCBiZSByZW5kZXJlZCBvbiB0aGUgcHJlZmVyZW5jZSBwYWdlLgotICAgIFN0cmluZ1tdIGoyZWVWZXJzaW9ucyA9IG5ldyBTdHJpbmdbXXsiMTMiLCAiMTQifTsKLSAgICBTZWxlY3Rpb25MaXN0IGoyZWVWZXJzaW9uc0xpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdChqMmVlVmVyc2lvbnMsIDApOwotICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoajJlZVZlcnNpb25zTGlzdCwgbnVsbCk7ICAgICAgICAKLSAgfSAgCi0gIAotICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzKCkKLSAgewotICAgIC8vVE9ETyAoc2VlIGJ1ZyAxMTYwMjUpOiBJbnN0ZWFkIG9mIGFsbCBzZXJ2ZXIgdHlwZSBpZHMsIHdlIHNob3VsZCBiZSBjYWxjdWxhdGluZyB0aGUgc2V0IG9mIHNlcnZlcgotCS8vdHlwZXMgdGhhdCBzdXBwb3J0IGF0IGxlYXN0IG9uZSBXZWIgc2VydmljZSBydW50aW1lIG9uIGVpdGhlciB0aGUgY2xpZW50IG9yIHNlcnZpY2Ugc2lkZS4KLQkvL1JldHVybiBhbGwgc2VydmVyIHR5cGUgaWRzIGZvciBub3cuCi0gICAgQXJyYXlMaXN0IGlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoc2VydmVyRmFjdG9yeUlkQnlMYWJlbF8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIElTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8c2VydmVyVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpZCA9IHNlcnZlclR5cGVzW2ldLmdldElkKCk7Ci0gICAgICAgIFN0cmluZyBsYWJlbCA9IGdldFNlcnZlckxhYmVsQnlJZChpZCk7Ci0gICAgICAgIHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLnB1dChsYWJlbCwgaWQpOwotICAgICAgICBpZHMuYWRkKGlkKTsKLSAgICAgIH0gICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBJdGVyYXRvciBmaWRzID0gIHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZmlkcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBmaWQgPSAoU3RyaW5nKWZpZHMubmV4dCgpOwotICAgICAgICBpZHMuYWRkKGZpZCk7Ci0gICAgICB9ICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlkcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIHNlcnZlckZhY3RvcnlJZHMgPSAoU3RyaW5nW10paWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgICByZXR1cm4gc2VydmVyRmFjdG9yeUlkczsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0gIAotICAgIAotICAvKioKLSAgICogUmV0dXJucyBhIHNlcnZlciB0eXBlIGlkIGdpdmVuIHRoZSBzZXJ2ZXIgdHlwZSdzIGxhYmVsCi0gICAqIEBwYXJhbSBsYWJlbCBzZXJ2ZXIgdHlwZSBsYWJlbAotICAgKiBAcmV0dXJuIHNlcnZlciB0eXBlIGlkIG9yIG51bGwgaWYgbm8gc2VydmVyIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gCi0gICAqIGxhYmVsIGlzIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBsYWJlbCkKLSAgewotICAgIGlmIChsYWJlbD09bnVsbCB8fCBsYWJlbC5sZW5ndGgoKT09MCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGdldEFsbFNlcnZlckZhY3RvcnlJZHMoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLmNvbnRhaW5zS2V5KGxhYmVsKSkKLSAgICB7Ci0gICAgICByZXR1cm4gKFN0cmluZylzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXy5nZXQobGFiZWwpOyAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9ICAgICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgV2ViIHNlcnZpY2UgcnVudGltZSdzIGlkIGdpdmVuIGl0cyBsYWJlbCAKLSAgICogQHBhcmFtIGxhYmVsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgbGFiZWwKLSAgICogQHJldHVybiBXZWIgc2VydmljZSBydW50aW1lIGlkIG9yIG51bGwgaWYgbm8KLSAgICogV2ViIHNlcnZpY2UgcnVudGltZSB3aXRoIHRoZSBnaXZlbiBsYWJlbCBpcyBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJ1bnRpbWVJZChTdHJpbmcgbGFiZWwpCi0gIHsKLSAgICAKLSAgICBpZiAobGFiZWw9PW51bGwgfHwgbGFiZWwubGVuZ3RoKCk9PTApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBpZiAocnVudGltZUlkQnlMYWJlbF8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBydW50aW1lSWRCeUxhYmVsXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5ydW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgICAgcnVudGltZUlkQnlMYWJlbF8ucHV0KGRlc2MuZ2V0TGFiZWwoKSwgZGVzYy5nZXRJZCgpKTsgICAgICAgIAotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZylydW50aW1lSWRCeUxhYmVsXy5nZXQobGFiZWwpOyAgICAKLSAgfSAgICAKLSAgCi0gICAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIEBwYXJhbSByZXF1aXJlZEZhY2V0VmVyc2lvbnMgYW4gYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBSZXF1aXJlZEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBTZXQgc2V0IG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4gcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIChlbGVtZW50IHR5cGU6IHtAbGluayBJUnVudGltZX0pIAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU2V0IGdldFJ1bnRpbWVzKFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmVxdWlyZWRGYWNldFZlcnNpb25zKQotICB7Ci0gICAgcmV0dXJuIEZhY2V0VXRpbHMuZ2V0UnVudGltZXMocmVxdWlyZWRGYWNldFZlcnNpb25zKTsKLSAgfQotICAKLS8qKgotICogR2V0IHRoZSBzZXJ2aWNlIHJ1bnRpbWUgY2hlY2tlciBjbGFzcwotICogQHBhcmFtIHNlcnZpY2VSdW50aW1lSWQgc2VydmljZSBydW50aW1lIElECi0gKiBAcmV0dXJuCi0gKi8KLSAgcHVibGljIHN0YXRpYyBJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIGdldFNlcnZpY2VSdW50aW1lQ2hlY2tlcihTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCkgewotCSAgcmV0dXJuIGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZCkuZ2V0U2VydmljZVJ1bnRpbWVDaGVja2VyKCk7Ci0JICAKLSAgfQotCi0vKioKLSAqIEdldCB0aGUgY2xpZW50IHJ1bnRpbWUgY2hlY2tlciBjbGFzcwotICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZAotICogQHJldHVybgotICovCi1wdWJsaWMgc3RhdGljIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgZ2V0Q2xpZW50UnVudGltZUNoZWNrZXIoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkgewotCSAgcmV0dXJuIGdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChjbGllbnRSdW50aW1lSWQpLmdldENsaWVudFJ1bnRpbWVDaGVja2VyKCk7Ci0JICAKLSAgfQotCi0vKioKLSAqIEdldCB0aGUgc2VydmljZSBydW50aW1lIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZQotICogQHBhcmFtIHNlcnZpY2VSdW50aW1lSWQgc2VydmljZSBydW50aW1lIElECi0gKiBAcmV0dXJuCi0gKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmljZVByZWZlcnJlZFNlcnZlclR5cGUoU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQpIHsKLQkgIHJldHVybiBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpLmdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCk7Ci0JICAKLSAgfQotCi0vKioKLSAqIEdldCB0aGUgY2xpZW50IHJ1bnRpbWUgcHJlZmVycmVkIHNlcnZlciB0eXBlCi0gKiBAcGFyYW0gY2xpZW50UnVudGltZUlkCi0gKiBAcmV0dXJuCi0gKi8KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENsaWVudFByZWZlcnJlZFNlcnZlclR5cGUoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkgewotCSAgcmV0dXJuIGdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChjbGllbnRSdW50aW1lSWQpLmdldFJ1bnRpbWVQcmVmZXJyZWRTZXJ2ZXJUeXBlKCk7Ci0JICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGUyNTYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVJ1bnRpbWVJbmZvIHsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsU2VydmljZVR5cGVzXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsQ2xpZW50VHlwZXNfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gIHByaXZhdGUgU3RyaW5nIGxhYmVsOwotCXByaXZhdGUgU2VydmljZVR5cGVbXSBzZXJ2aWNlVHlwZXM7Ci0JcHJpdmF0ZSBDbGllbnRUeXBlW10gY2xpZW50VHlwZXM7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nW10gc2VydmxldExldmVsczsKLQlwcml2YXRlIGphdmEubGFuZy5TdHJpbmdbXSBqMmVlTGV2ZWxzOwotCXByaXZhdGUgamF2YS5sYW5nLlN0cmluZ1tdIHJ1bnRpbWVJZHM7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nW10gc2VydmVyRmFjdG9yeUlkczsKLQlwcml2YXRlIFN0cmluZyBjbGFzc05hbWU7Ci0JcHJpdmF0ZSBJV2ViU2VydmljZVJ1bnRpbWUgd2ViU2VydmljZVJ1bnRpbWVfOwotICAKLSAgcHVibGljIFdlYlNlcnZpY2VSdW50aW1lSW5mbyhJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbV8sIEhhc2h0YWJsZSBhbGxTZXJ2aWNlVHlwZXNfLCBIYXNodGFibGUgYWxsQ2xpZW50VHlwZXNfKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmVsZW1fID0gZWxlbV87Ci0gICAgdGhpcy5hbGxTZXJ2aWNlVHlwZXNfID0gYWxsU2VydmljZVR5cGVzXzsKLSAgICB0aGlzLmFsbENsaWVudFR5cGVzXyA9IGFsbENsaWVudFR5cGVzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkKLSAgewotICAgIGlmIChjbGFzc05hbWU9PW51bGwpCi0gICAgewotICAgICAgY2xhc3NOYW1lPWVsZW1fLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgfQotICAKLQotICBwdWJsaWMgQ2xpZW50VHlwZVtdIGdldENsaWVudFR5cGVzKCkKLSAgewotICAgIGlmIChjbGllbnRUeXBlcz09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiY2xpZW50VHlwZXMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgY2xpZW50VHlwZXMgPSBuZXcgQ2xpZW50VHlwZVtzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGllbnRUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjdGlkID0gc3QubmV4dFRva2VuKCk7ICAgICAgICAgIAotICAgICAgICAgIGNsaWVudFR5cGVzW2ldID0gKENsaWVudFR5cGUpYWxsQ2xpZW50VHlwZXNfLmdldChjdGlkKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY2xpZW50VHlwZXM7Ci0gIH0KLSAgCi0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQ9PW51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLSAgfQotICAKLQotICBwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkKLSAgewotICAgIGlmIChsYWJlbD09bnVsbCkKLSAgICB7Ci0gICAgICBsYWJlbCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgibGFiZWwiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxhYmVsOwotICB9ICAgCi0KLSAgCi0gIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0SjJlZUxldmVscygpCi0gIHsKLSAgICBpZiAoajJlZUxldmVscyA9PSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJqMmVlTGV2ZWxzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGoyZWVMZXZlbHMgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGoyZWVMZXZlbHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgajJlZUxldmVsc1tpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0gICAgICAKLSAgICAKLSAgICByZXR1cm4gajJlZUxldmVsczsKLSAgfQotICAKLQotICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFJ1bnRpbWVJZHMoKQotICB7Ci0gICAgaWYgKHJ1bnRpbWVJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgicnVudGltZXMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgcnVudGltZUlkcyA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZUlkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBydW50aW1lSWRzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfSAgICAgIAotICAgIAotICAgIHJldHVybiBydW50aW1lSWRzOwotICB9Ci0gIAotCi0gIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkcygpCi0gIHsKLSAgICBpZiAoc2VydmVyRmFjdG9yeUlkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJzZXJ2ZXJzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIHNlcnZlckZhY3RvcnlJZHMgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlckZhY3RvcnlJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgc2VydmVyRmFjdG9yeUlkc1tpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICByZXR1cm4gc2VydmVyRmFjdG9yeUlkczsKLSAgfQotICAKLQotICBwdWJsaWMgU2VydmljZVR5cGVbXSBnZXRTZXJ2aWNlVHlwZXMoKQotICB7Ci0gICAgaWYgKHNlcnZpY2VUeXBlcz09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgic2VydmljZVR5cGVzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIHNlcnZpY2VUeXBlcyA9IG5ldyBTZXJ2aWNlVHlwZVtzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgY3RpZCA9IHN0Lm5leHRUb2tlbigpOyAgICAgICAgICAKLSAgICAgICAgICBzZXJ2aWNlVHlwZXNbaV0gPSAoU2VydmljZVR5cGUpYWxsU2VydmljZVR5cGVzXy5nZXQoY3RpZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VUeXBlczsKLSAgfQotICAKLQotICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFNlcnZsZXRMZXZlbHMoKQotICB7Ci0gICAgaWYgKHNlcnZsZXRMZXZlbHM9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoInNlcnZsZXRMZXZlbHMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgc2VydmxldExldmVscyA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmxldExldmVscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBzZXJ2bGV0TGV2ZWxzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBzZXJ2bGV0TGV2ZWxzOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lIGdldFdlYlNlcnZpY2VSdW50aW1lKCkKLSAgewotCWlmICh3ZWJTZXJ2aWNlUnVudGltZV8gPT0gbnVsbCkKLQl7Ci0JCXRyeQotCQl7Ci0JCQl3ZWJTZXJ2aWNlUnVudGltZV8gPSAoSVdlYlNlcnZpY2VSdW50aW1lKWVsZW1fLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0JCX0KLQkJY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLQkJewotCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lXzsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODVjODk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IndlYnNlcnZpY2V1dGlscyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMDlkOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13ZWJzZXJ2aWNldXRpbHMuamFyCi13c2MuamFyCi13ZWJzZXJ2aWNldXRpbHNzcmMuemlwCi13c2NzcmMuemlwCi1qYXZhQ29tcGlsZXIud2Vic2VydmljZXV0aWxzLmphci5hcmdzCi1qYXZhQ29tcGlsZXIud3NjLmphci5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzU4OTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQyNmJlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNTo1MSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzU1MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjI1IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVkNzNhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzA0LnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogd3NjLmphciwKLSB3ZWJzZXJ2aWNldXRpbHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1hbmQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi53c2ZpbmRlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuamVtO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS54c2Q7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNjBlOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDUwMSAgIDE4NDUwNSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLndzYy5qYXIgPSBzcmMvCi1zb3VyY2Uud2Vic2VydmljZXV0aWxzLmphciA9IHdlYnNlcnZpY2V1dGlscy8KLWphcnMuY29tcGlsZS5vcmRlciA9IHdzYy5qYXIsXAotICAgICAgICAgICAgICAgICAgICAgd2Vic2VydmljZXV0aWxzLmphcgotYmluLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c2MuamFyLFwKLSAgICAgICAgICAgICAgIHdlYnNlcnZpY2V1dGlscy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuZXh0cmEuY2xhc3NwYXRoID0gLi4vamF2YXgueG1sLnNvYXAvbGliL3NhYWouamFyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmMxYmFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgQ29uc3VtcHRpb24KLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotWFBfV1NGSU5ERVI9b3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLndzZmluZGVyCi1YUF9XRUJfU0VSVklDRV9TVEFSVF9TRVJWRVJfVFlQRT1XZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlCi1YUF9TRVJWRVJfREVGQVVMVEVSPVNlcnZlciBEZWZhdWx0ZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjY0MGFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJ3c2ZpbmRlciIKLSAgICAgIG5hbWU9IiVYUF9XU0ZJTkRFUiIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJ3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlIgotICAgICAgbmFtZT0iJVhQX1dFQl9TRVJWSUNFX1NUQVJUX1NFUlZFUl9UWVBFIi8+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIGxpa2VseSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludAotICAgICAgaWQ9InNlcnZlckRlZmF1bHRlciIKLSAgICAgIG5hbWU9IiVYUF9TRVJWRVJfREVGQVVMVEVSIi8+Ci0KLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi53ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlIj4KLSAgICAgIDx3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlCi0gICAgICAgICAgICBmYWN0b3J5SWQ9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjMyIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5TdGFydFRvbWNhdFNlcnZlciIKLSAgICAgICAgICAgIGlkPSJTRVJWRVJfSURfVE9NQ0FUMzJfTE9DQUwiPgotICAgICAgPC93ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlPgotICAgICAgPHdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUKLSAgICAgICAgICAgIGZhY3RvcnlJZD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDAiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLlN0YXJ0VG9tY2F0U2VydmVyIgotICAgICAgICAgICAgaWQ9IlNFUlZFUl9JRF9UT01DQVQ0MF9MT0NBTCI+Ci0gICAgICA8L3dlYlNlcnZpY2VTdGFydFNlcnZlclR5cGU+Ci0gICAgICA8d2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZQotICAgICAgICAgICAgZmFjdG9yeUlkPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uU3RhcnRUb21jYXRTZXJ2ZXIiCi0gICAgICAgICAgICBpZD0iU0VSVkVSX0lEX1RPTUNBVDQxX0xPQ0FMIj4KLSAgICAgIDwvd2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZT4KLSAgICAgIDx3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlCi0gICAgICAgICAgICBmYWN0b3J5SWQ9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5TdGFydFRvbWNhdFNlcnZlciIKLSAgICAgICAgICAgIGlkPSJTRVJWRVJfSURfVE9NQ0FUNTBfTE9DQUwiPgotICAgICAgPC93ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlPgotICAgICAgPHdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUKLSAgICAgICAgICAgIGZhY3RvcnlJZD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZXJvbmltby4xMCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uU3RhcnRUb21jYXRTZXJ2ZXIiCi0gICAgICAgICAgICBpZD0iU0VSVkVSX0lEX0dFUk9OSU1PMTBfTE9DQUwiPgotICAgICAgIDwvd2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZT4gCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vQ29uc3VtcHRpb24ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vQ29uc3VtcHRpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU5NjE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL0NvbnN1bXB0aW9uLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwMjE3ICAgMTI2NzU3IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotIyAyMDA2MDQwMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA4MDMzMSAgIDIyNTAzMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRXJyb3IgbXNnIHJlZmVyZW5jZXMgcmVuYW1lZCBjYXRlZ29yeQotIyAyMDA4MDQwMiAgIDIyMjQwOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA4MDQwMiAgIDIyNDQzMyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgUHJvcGVydGllcyBmaWxlIGNoYW5nZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIFNhbXBsZSBtZXNzYWdlcwotIwotTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fTUVUSE9EUz1JV0FCMDE3OUUgVW5hYmxlIHRvIGNyZWF0ZSBhIHNhbXBsZSB0byB0aGUgcHJveHkgYmVjYXVzZSB0aGUgcHJveHkgZG9lcyBub3QgY29udGFpbiBtZXRob2RzLgotTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fREVGQVVMVD1JV0FCMDE4MEUgVW5hYmxlIHRvIGNyZWF0ZSBhIHNhbXBsZSB0byB0aGUgcHJveHkgYmVjYXVzZSB0aGUgcHJveHkgaXMgbm90IGEgYmVhbiAoaS5lLi4gdGhlIHNhbXBsZSBkb2VzIG5vdCBoYXZlIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yKS4KLU1TR19FUlJPUl9KVFNfTk9fUFJPWFlfTUVUSE9EU19QUk9DRVNTRUQ9SVdBQjAxODFFIFVuYWJsZSB0byBjcmVhdGUgYSBzYW1wbGUgdG8gdGhlIHByb3h5IGJlY2F1c2Ugbm9uZSBvZiB0aGUgbWV0aG9kcyBpbiB0aGUgcHJveHkgd2VyZSBwcm9jZXNzZWQuCi1NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRT1JV0FCMDE4MlcgVGhlIFNhbXBsZSBKU1AgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvbGxvd2luZyB0eXBlOiB7MH0KLU1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9JTkRFWEVEX1BST1BFUlRJRVM9SVdBQjAxODdXIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IEluZGV4ZWQgcHJvcGVydGllczogezB9Ci1NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19BUlJBWVM9SVdBQjAyMzdXIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IGFycmF5czogezB9Ci1NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19JTlBVVFM9SVdBQjAxMjRXIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IGlucHV0IHBhcmFtZXRlcnMgdGhhdCBhcmUgbm90IGJlYW5zOiB7MH0KLU1TR19FUlJPUl9KVFNfQ1lDTElDX0JFQU49SVdBQjAxODhFIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IGJlYW5zIGNvbnRhaW5pbmcgYXR0cmlidXRlcyB0aGF0IHJlZmVyZW5jZSB0aGUgYmVhbnM6IHswfQotTVNHX1dBUk5fSlRTX1BST1hZX01FVEhPRFNfT01JVFRFRD1JV0FCMDE4OVcgVGhlIFNhbXBsZSBKU1AgY2xpZW50IG9taXR0ZWQgc29tZSBtZXRob2RzIGJlY2F1c2UgdGhleSBjb250YWluZWQgdW5zdXBwb3J0ZWQgdHlwZXMuCi1NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEPUlXQUIwMDIxRSBTYW1wbGUgY3JlYXRpb24gd2FzIGNhbmNlbGVkCi1NU0dfV0FSTl9VTkFCTEVfVE9fRklORF9QUk9YWT1JV0FCMDAyMlcgVGhlIFByb3h5IFJlc291cmNlIGNvdW5kIG5vdCBub3QgYmUgZm91bmQuCi1NU0dfRVJST1JfUFJPWFlfTk9UX0ZPVU5EX0lOX1BST0pFQ1Q9VGhlIEphdmEgcHJveHkgezB9IGNvdWxkIG5vdCBiZSBmb3VuZCBpbiBwcm9qZWN0IHsxfS4KLU1TR19FUlJPUl9KVFNfSlNQX0dFTj1FcnJvciBpbiBnZW5lcmF0aW5nIHNhbXBsZSBKU1AKLQotIyBOb3QgdXNlZAotI01TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0NPTVBPTkVOVD1UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGNhbm5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBjb21wb25lbnQgInswfSIuIENhbmNlbCB0aGUgd2l6YXJkIGFuZCBjcmVhdGUgdGhlIGNvbXBvbmVudCBtYW51YWxseS4KLQotCi0jCi0jIEZpbHRlcnMKLSMKLUZJTFRFUl9NU0dfRVJST1JfTlVMTF9PQkpFQ1Q9SVdBQjAwOTdFIE5vIG9iamVjdCBoYXMgYmVlbiBwcm92aWRlZC4KLUZJTFRFUl9NU0dfRVJST1JfTk9UX0ZJTEU9SVdBQjAwOThFIFRoZSBvYmplY3QgInswfSIgaXMgbm90IGEgZmlsZS4KLUZJTFRFUl9NU0dfRVJST1JfTk9UX0ZPTERFUj1JV0FCMDEzN0UgVGhlIG9iamVjdCAiezB9IiBpcyBub3QgYSBmb2xkZXIuCi0KLUpBVkFfRklMVEVSX05BTUU9SmF2YSBmaWxlcwotSkFWQV9GSUxURVJfREVTQz1GaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLmphdmEiIG9yICIuY2xhc3MiLgotSkFWQV9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTj1JV0FCMDEwMkUgVGhlIGZpbGUgInswfSIgZG9lcyBub3QgZW5kIGluICIuamF2YSIgb3IgIi5jbGFzcyIuCi0KLVdTRExfRklMVEVSX05BTUU9V1NETCBmaWxlcwotV1NETF9GSUxURVJfREVTQz1GaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLndzZGwiLgotV1NETF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTj1JV0FCMDEwM0UgVGhlIGZpbGUgInswfSIgZG9lcyBub3QgZW5kIGluICIud3NkbCIuCi0KLUlTRF9GSUxURVJfTkFNRT1JU0QgZmlsZXMKLUlTRF9GSUxURVJfREVTQz1GaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLmlzZCIuCi1JU0RfRklMVEVSX01TR19FUlJPUl9XUk9OR19FWFRFTlNJT049SVdBQjAwOTVFIFRoZSBmaWxlICJ7MH0iIGRvZXMgbm90IGVuZCBpbiAiLmlzZCIuCi0KLVBST1BFUlRJRVNfRklMVEVSX05BTUU9UHJvcGVydGllcyBmaWxlcwotUFJPUEVSVElFU19GSUxURVJfREVTQz1GaWxlcyB3aXRoIG5hbWVzIGVuZGluZyBpbiAiLnByb3BlcnRpZXMiCi1QUk9QRVJUSUVTX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OPSBUaGUgZmlsZSAiezB9IiBkb2VzIG5vdCBlbmQgaW4gIi5wcm9wZXJ0aWVzIi4KLQotRk9MREVSX0ZJTFRFUl9OQU1FPUZvbGRlcnMKLUZPTERFUl9GSUxURVJfREVTQz1Gb2xkZXJzLgotCi0jCi0jIERlcGxveW1lbnQgc3RhdHVzCi0jCi1QUk9HUkVTU19JTkZPX0NPUFlfV0VCU0VSVklDRV9VVElMUz1JV0FCMDAyM0kgQ29weWluZyB0aGUgd2Vic2VydmljZSB1dGlsaXRpZXMuCi1QUk9HUkVTU19JTkZPX0NPUFlJTkdfRklMRT1JV0FCMDE5N0kgQ29weWluZyBTT0FQIHJ1bi10aW1lIGZpbGUuCi1QUk9HUkVTU19JTkZPX1NUQVJUX1dFQl9QUk9KRUNUPUlXQUIwMTk4SSBTdGFydGluZyBXZWIgcHJvamVjdC4KLVBST0dSRVNTX0lORk9fUFVCTElTSElOR19TRVJWRVI9SVdBQjAxOTlJIFB1Ymxpc2hpbmcgc2VydmVyLgotUFJPR1JFU1NfSU5GT19TVEFSVElOR19TRVJWRVI9SVdBQjAyMDBJIFN0YXJ0aW5nIHNlcnZlci4KLVBST0dSRVNTX0lORk9fUFVCTElTSF9XRUJfUFJPSkVDVD1JV0FCMDIwNUkgUHVibGlzaGluZyBXZWIgcHJvamVjdC4KLQotCi0jCi0jIERlcGxveW1lbnQgbWVzc2FnZXMKLSMKLU1TR19FUlJPUl9QUk9KRUNUX05PVF9GT1VORD1JV0FCMDIwN0UgV2ViIHByb2plY3Qgd2FzIG5vdCBmb3VuZC4KLU1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTPUlXQUIwMDI0RSBFcnJvciBpbiBjb3B5aW5nIFdlYnNlcnZpY2UgVXRpbGl0eSBmaWxlLgotTVNHX0VSUk9SX0lOU1RBTkNFX05PVF9GT1VORD1JV0FCMDIxMkUgU2VydmVyIHdhcyBub3QgZm91bmQuCi1NU0dfRVJST1JfU0VSVkVSPUlXQUIwMjEzRSBFcnJvciBpbiBzdGFydGluZyBzZXJ2ZXIuCi1NU0dfRVJST1JfUFVCTElTSD1JV0FCMDIxN0UgRXJyb3IgaW4gcHVibGlzaGluZyBXZWIgcHJvamVjdC4KLU1TR19FUlJPUl9BRERfTU9EVUxFPUVycm9yIG9jY3VyZWQgd2hlbiBhZGRpbmcgdGhlIG1vZHVsZSwgezB9LCB0byB0aGUgc2VydmVyCi0KLU1TR19FUlJPUl9DUkVBVEVfU0VSVkVSPUlXQUIwMDI1RSBVbmFibGUgdG8gY3JlYXRlIHNlcnZlci4KLU1TR19FUlJPUl9TVFVCX09OTFk9VW5hYmxlIHRvIGNyZWF0ZSBzZXJ2ZXIgYmVjYXVzZSBvbmx5IHN0dWIgcnVudGltZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHswfSBzZXJ2ZXIgdHlwZS4gR28gdG8gV2luZG93ID4gUHJlZmVyZW5jZXMuIFNlbGVjdCBTZXJ2ZXIgPiBSdW50aW1lIEVudmlyb25tZW50cyB0byBpbnN0YWxsIGEgbm9uLXN0dWIgcnVudGltZS4KLQotIwotIyBFSkIgbWVzc2FnZXMKLSMgNCB1bnVzZWQgbWVzc2FnZXMgaW4ganN0LndzIGFuZCB3c3Qud3MKLVRBU0tfTEFCRUxfQ1JFQVRFX0VKQl9QUk9KRUNUPUNyZWF0ZUVKQlByb2plY3RUYXNrCi1UQVNLX0RFU0NfQ1JFQVRFX0VKQl9QUk9KRUNUPUNyZWF0ZSBhbiBFSkIgUHJvamVjdC4KLU1TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0VKQl9QUk9KRUNUPUlXQUIwNDMyRSBVbmFibGUgdG8gY3JlYXRlIEVKQiBwcm9qZWN0LgotTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfQVBQX0NMSUVOVF9QUk9KRUNUPUlXQUIwMDI2RSBVbmFibGUgdG8gY3JlYXRlIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHswfS4KLQotTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfSkFWQV9QUk9KRUNUPUlXQUIwMDI3RSBVbmFibGUgdG8gY3JlYXRlIEphdmEgcHJvamVjdCB7MH0uCi1NU0dfRVJST1JfQ0FOTk9UX0NSRUFURV9FQVJfUFJPSkVDVD1JV0FCMDA2MkUgVW5hYmxlIHRvIGNyZWF0ZSBFQVIgcHJvamVjdCB7MH0uCi0KLSMKLSMgVmFsaWRhdG9yIHRhc2sgZGVzY3JpcHRpb25zCi0jCi1UQVNLX0xBQkVMX1dFQlNFUlZJQ0VfRElTQUJMRV9WQUxJREFUSU9OPURpc2FibGUgdmFsaWRhdG9ycy4KLVRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfVkFMSURBVElPTj1UZW1wb3JhcmlseSBkaXNhYmxpbmcgdmFsaWRhdG9ycy4KLVRBU0tfTEFCRUxfV0VCU0VSVklDRV9SRVNUT1JFX1ZBTElEQVRJT049UmVzdG9yZSB2YWxpZGF0b3JzLgotVEFTS19ERVNDX1dFQlNFUlZJQ0VfUkVTVE9SRV9WQUxJREFUSU9OPVJlc3RvcmluZyBzdGF0ZXMgb2YgdmFsaWRhdG9ycy4KLVRBU0tfTEFCRUxfV0VCU0VSVklDRV9ESVNBQkxFX0JVSUxEPURpc2FibGUgYXV0byBidWlsZC4KLVRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfQlVJTEQ9VGVtcG9yYXJpbHkgZGlzYWJsaW5nIGF1dG8gYnVpbGQuCi1UQVNLX0xBQkVMX1dFQlNFUlZJQ0VfUkVTVE9SRV9CVUlMRD1SZXN0b3JlIGF1dG8gYnVpbGQuCi1UQVNLX0RFU0NfV0VCU0VSVklDRV9SRVNUT1JFX0JVSUxEPVJlc3RvcmluZyBzdGF0ZSBvZiBhdXRvIGJ1aWxkLgotCi0jCi0jIE1JU0MKLSMKLU1TR19FUlJPUl9XRUJfUFJPSkVDVF9DUkVBVEU9SVdBQjAzMTBFIEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjcmVhdGlvbiBvZiB0aGUgV2ViIFByb2plY3QuCi0KLSMKLSMgQ2hlY2tQcm9qZWN0T0tDb21tYW5kCi0jCi1NU0dfRVJST1JfU0VSVkVSX1ZJRVdfT1BFTj1JV0FCMDEyNkUgVGhlIHNlcnZlciBjb25maWd1cmF0aW9uIGVkaXRvciBpcyBvcGVuIGZvciB7MH0uICBDbG9zZSBpdCBhbmQgcmVzdGFydCB0aGUgd2l6YXJkLgotCi0KLSMKLSMJRGV0ZWN0Tm9uSmF2YUNoYXJzQ29tbWFuZAotIwotTVNHX1dBUk5fSkFWQV9NRVRIT0RfU1RBUlRfV0lUSF9VUFBFUl9DQVNFPUlXQUIwMTI5VyBKYXZhIG1ldGhvZCB7MH0gaW4gY2xhc3MgezF9IHN0YXJ0cyB3aXRoIGFuIHVwcGVyIGNhc2UgbGV0dGVyLiBNZXRob2QgbmFtZXMgc2hvdWxkIGJlZ2luIHdpdGggbG93ZXIgY2FzZSBsZXR0ZXJzLgotTVNHX1dBUk5fTUVUSE9EX05BTUVfSU5WQUxJRD1JV0FCMDEzMVcgSmF2YSBtZXRob2QgezB9IG5hbWUgY29udGFpbnMgdW5kZXJzY29yZSBvciBudW1lcmljIGRpZ2l0cyBmb2xsb3dlZCBieSBhIGxvd2VyIGNhc2UgbGV0dGVyLlwKLU1ldGhvZCBuYW1lcyBzaG91bGQgbm90IGNvbnRhaW4gbG93ZXIgY2FzZSBsZXR0ZXJzIGFmdGVyIGEgbnVtZXJpYyBvciB1bmRlcnNjb3JlLgotTVNHX1dBUk5fQk9PTEVBTl9QUk9QRVJUWV9BQ0NFU1NPUlM9SVdBQjAxMzJXIEJvb2xlYW4gcHJvcGVydHkgYWNjZXNzb3IgezB9IGluIGJlYW4gezF9IGJlZ2lucyB3aXRoICJnZXQiLiBCb29sZWFuIGdldHRlciBtZXRob2RzIHNob3VsZCBiZWdpbiB3dGggImlzIi4KLU1TR19XQVJOX1BBQ0tBR0VfTkFNRV9IQVNfVVBQRVJfQ0FTRT1JV0FCMDEzM1cgVGhlIHBhY2thZ2UgbmFtZSB7MH0gb2YgY2xhc3MgezF9IGluY2x1ZGVzIHVwcGVyIGNhc2UgbGV0dGVycy4gUGFja2FnZSBuYW1lcyBzaG91bGQgY29uc2lzdCBvZiBsb3dlciBjYXNlIGxldHRlcnMgb25seS4KLQotV0FSTl9CRUFOX05BTUVfU1RBUlRTX1dJVEhfTE9XRVJfQ0FTRQotCi0jCi0jIEphdmFUb01vZGVsQ29tbWFuZAotIwotTEFCRUxfT0s9T0sKLURFU0NSSVBUSU9OX09LPVNlbGVjdCBPSyB0byBjb250aW51ZQotCi1MQUJFTF9DQU5DRUw9Q2FuY2VsCi1ERVNDUklQVElPTl9DQU5DRUw9U2VsZWN0IENhbmNlbCB0byBjYW5jZWwKLQotIwotIyBDcmVhdGVNb25pdG9yQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SPUlXQUIwMDAxRSBVbmFibGUgdG8gbW9uaXRvciBwb3J0IHswfSBvZiB7MX0uCi1NU0dfSU5GT19NT05JVE9SSU5HX05PVF9TVVBQT1JURUQ9SVdBQjAwMDJJIHswfSBkb2VzIG5vdCBzdXBwb3J0IHBvcnQgbW9uaXRvcmluZy4KLQotIwotIyBDb3B5V1NETENvbW1hbmQKLSMKLUNPTU1BTkRfTEFCRUxfQ09QWV9XU0RMPUNvcHlpbmcgV1NETAotQ09NTUFORF9ERVNDX0NPUFlfV1NETD1Db3B5aW5nIFdTREwgaW50byB0aGUgd29ya3NwYWNlIGZvciBXZWIgc2VydmljZSBkZXBsb3ltZW50Ci1NU0dfRVJST1JfQ09QWV9XU0RMPUlXQUIwMDI4RSBGYWlsZWQgdG8gY29weSBXU0RMIHswfSB0byB7MX0KLQotIwotIyBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19BU1NPQ0lBVEU9VW5hYmxlIHRvIGFzc29jaWF0ZSBjb21wb25lbnQgezB9IHRvIGVhciBjb21wb25lbnQgezF9LgotCi0jCi0jIENyZWF0ZU1vZHVsZUNvbW1hbmQKLSMKLU1TR19FUlJPUl9DUkVBVEVfRkxFWF9QUk9KRVQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgZmxleGlibGUgcHJvamVjdCB7MH0uCi1NU0dfRVJST1JfQ1JFQVRFX0VKQl9DT01QT05FTlQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgRUpCIGNvbXBvbmVudCB7MH0uCi1NU0dfRVJST1JfQ1JFQVRFX0FQUENMSUVOVF9DT01QT05FTlQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgQXBwbGljYXRpb24gQ2xpZW50IGNvbXBvbmVudCB7MH0uCi1NU0dfRVJST1JfQ09NUE9ORU5UX0NSRUFUSU9OPVVuYWJsZSB0byBjcmVhdGUgcHJvamVjdCB7MH0gYW5kL29yIGNvbXBvbmVudCB7MX0uCi0KLQotIwotIyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQKLSMKLU1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OPVVuYWJsZSB0byBjcmVhdGUgcHJvamVjdCB7MH0uCi0KLQotIwotIyBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQKLSMKLU1TR19FUlJPUl9QUk9KRUNUX0RPRVNfTk9UX0VYSVNUPVRoZSBwcm9qZWN0IHswfSBkb2VzIG5vdCBleGlzdC4KLU1TR19FUlJPUl9QUk9KRUNUX0lTX05PVF9PUEVOPVRoZSBwcm9qZWN0IHswfSBpcyBub3Qgb3Blbi4KLQotIwotIyBTUEVDSUFMIE5PVEUgVE8gVFJBTlNMQVRPUlM6IFN1YnN0aXR1dGlvbiB7MX0gaW4gTVNHX0VSUk9SX0FERElOR19GQUNFVFNfVE9fUFJPSkVDVCBhbmQKLSMgTVNHX0VSUk9SX0ZJWEVEX0ZBQ0VUUyB3aWxsIGJlIGEgZGVsaW1pdGVkIGxpc3Qgb2YgdHJhbnNsYXRlZCBsYWJlbHMuIFRoZSBsaXN0IGlzIGZvcm1lZCAKLSMgdGhyb3VnaCByZXBlYXRlZCB1c2Ugb2YgTVNHX0ZBQ0VUUy4KLSMKLU1TR19FUlJPUl9BRERJTkdfRkFDRVRTX1RPX1BST0pFQ1Q9VW5hYmxlIHRvIGFkZCB0aGUgZm9sbHdpbmcgZmFjZXRzIHRvIHByb2plY3QgezB9OiB7MX0uCi1NU0dfRVJST1JfRklYRURfRkFDRVRTPVVuYWJsZSB0byBzZXQgdGhlIGZvbGxvd2luZyBmYWNldHMgYXMgZml4ZWQgb24gcHJvamVjdCB7MH06IHsxfS4KLU1TR19GQUNFVFM9ezB9LCB7MX0KLQotTVNHX0VSUk9SX1NFVFRJTkdfUlVOVElNRT1VbmFibGUgdG8gYmluZCBwcm9qZWN0IHswfSB0byB0aGUgezF9IHJ1bnRpbWUuCi0KLSMKLSMgU2tlbGV0b24gTWVyZ2UgTWVzc2FnZXMKLSMKLU1TR19FUlJPUl9GSUxFX01FUkdFPUVycm9yIGluIG1lcmdpbmcgZmlsZSB7MH0uCi1NU0dfRVJST1JfRklMRV9NRVJHRV9MT0FEPUVycm9yIGluIGxvYWRpbmcgZmlsZSB7MH0gZm9yIG1lcmdlLiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vQ29uc3VtcHRpb25NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9Db25zdW1wdGlvbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZGMyYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9Db25zdW1wdGlvbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE3ICAgMTI2NzU3IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDAyICAgMjI0NDMzIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBQcm9wZXJ0aWVzIGZpbGUgY2hhbmdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIENvbnN1bXB0aW9uTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbiI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBDb25zdW1wdGlvbk1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSlRTX1BST1hZX0hBU19OT19NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9KVFNfUFJPWFlfSEFTX05PX0RFRkFVTFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pUU19OT19QUk9YWV9NRVRIT0RTX1BST0NFU1NFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfSU5ERVhFRF9QUk9QRVJUSUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9QQVJBTUVURVJTX0FSUkFZUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19JTlBVVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pUU19DWUNMSUNfQkVBTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KVFNfUFJPWFlfTUVUSE9EU19PTUlUVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fVU5BQkxFX1RPX0ZJTkRfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST1hZX05PVF9GT1VORF9JTl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9KVFNfSlNQX0dFTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGSUxURVJfTVNHX0VSUk9SX05VTExfT0JKRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEZJTFRFUl9NU0dfRVJST1JfTk9UX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRklMVEVSX01TR19FUlJPUl9OT1RfRk9MREVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQV9GSUxURVJfREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9GSUxURVJfREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElTRF9GSUxURVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJU0RfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSVNEX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19GSUxURVJfREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUl9GSUxURVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVJfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPR1JFU1NfSU5GT19DT1BZX1dFQlNFUlZJQ0VfVVRJTFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPR1JFU1NfSU5GT19DT1BZSU5HX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPR1JFU1NfSU5GT19TVEFSVF9XRUJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9HUkVTU19JTkZPX1BVQkxJU0hJTkdfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0dSRVNTX0lORk9fU1RBUlRJTkdfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0dSRVNTX0lORk9fUFVCTElTSF9XRUJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUFJPSkVDVF9OT1RfRk9VTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJTEVDT1BZX1dFQlNFUlZJQ0VfVVRJTFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOU1RBTkNFX05PVF9GT1VORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QVUJMSVNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BRERfTU9EVUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DUkVBVEVfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TVFVCX09OTFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFTS19MQUJFTF9DUkVBVEVfRUpCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFTS19ERVNDX0NSRUFURV9FSkJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ0FOTk9UX0NSRUFURV9FSkJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ0FOTk9UX0NSRUFURV9BUFBfQ0xJRU5UX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfSkFWQV9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0VBUl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfTEFCRUxfV0VCU0VSVklDRV9ESVNBQkxFX1ZBTElEQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFTS19ERVNDX1dFQlNFUlZJQ0VfRElTQUJMRV9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfTEFCRUxfV0VCU0VSVklDRV9SRVNUT1JFX1ZBTElEQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFTS19ERVNDX1dFQlNFUlZJQ0VfUkVTVE9SRV9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfTEFCRUxfV0VCU0VSVklDRV9ESVNBQkxFX0JVSUxEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfQlVJTEQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFTS19MQUJFTF9XRUJTRVJWSUNFX1JFU1RPUkVfQlVJTEQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFTS19ERVNDX1dFQlNFUlZJQ0VfUkVTVE9SRV9CVUlMRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV0VCX1BST0pFQ1RfQ1JFQVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TRVJWRVJfVklFV19PUEVOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0pBVkFfTUVUSE9EX1NUQVJUX1dJVEhfVVBQRVJfQ0FTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9NRVRIT0RfTkFNRV9JTlZBTElEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0JPT0xFQU5fUFJPUEVSVFlfQUNDRVNTT1JTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX1BBQ0tBR0VfTkFNRV9IQVNfVVBQRVJfQ0FTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXQVJOX0JFQU5fTkFNRV9TVEFSVFNfV0lUSF9MT1dFUl9DQVNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX09LOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERFU0NSSVBUSU9OX09LOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NBTkNFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBERVNDUklQVElPTl9DQU5DRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX01PTklUT1JJTkdfTk9UX1NVUFBPUlRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NQU5EX0xBQkVMX0NPUFlfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NQU5EX0RFU0NfQ09QWV9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DT1BZX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VOQUJMRV9UT19BU1NPQ0lBVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NSRUFURV9GTEVYX1BST0pFVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ1JFQVRFX0VKQl9DT01QT05FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NSRUFURV9BUFBDTElFTlRfQ09NUE9ORU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DT01QT05FTlRfQ1JFQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT047Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST0pFQ1RfRE9FU19OT1RfRVhJU1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST0pFQ1RfSVNfTk9UX09QRU47Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FERElOR19GQUNFVFNfVE9fUFJPSkVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRklYRURfRkFDRVRTOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19GQUNFVFM7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1NFVFRJTkdfUlVOVElNRTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRklMRV9NRVJHRV9MT0FEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GSUxFX01FUkdFOwotICAgIAotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQ29uc3VtcHRpb25NZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL0dlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL0dlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTI3NzRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9HZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODExICAgMTUzNDgyIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIGdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmF0b3IgaW1wbGVtZW50cyBWaXNpdG9yQWN0aW9uCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICAvKioKLSAgKiBUaGUgU3RyaW5nQnVmZmVyIHRoYXQgaG9sZHMgdGhlIGNvZGVnZW4gCi0gICogKi8KLSAgcHJvdGVjdGVkIFN0cmluZ0J1ZmZlciBmYnVmZmVyOyAKLQotICAvKioKLSAgKiBUaGUgVmlzaXRvciB0aGF0IGNhbGxzIHRoZSB2aXNpdCBtZXRob2QgCi0gICogKi8KLSAgcHJvdGVjdGVkIFZpc2l0b3IgZlZpc2l0b3I7IAotCi0gIC8qKgotICAqIFZlY3RvciB0aGF0IGhvbGRzIHN0YXRlIGRhdGEgZm9yIHRoaXMgIGdlbmVyYXRvciAKLSAgKiAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGZSZXNpZGVudFZlY3RvcjsKLSAKLSAgLyoKLSAgKiBUaGlzIGludCBob2xkcyB0aGUgY3VycmVudCBudW1iZXIgCi0gICovCi0gIHByb3RlY3RlZCBpbnQgZlVuaXF1ZU51bWJlciA9MDsKLSAKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGZDbGllbnRGb2xkZXJQYXRoOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBQ1RPUlkgPSAiRmFjdG9yeSI7IAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBQiA9ICIgICAgIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9VQkxFX1RBQiA9ICIgICAgICAgICI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQUNFID0gIiAiOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0gIHB1YmxpYyBHZW5lcmF0b3IgKCkKLSAgewotICAgICAgZmJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZSZXNpZGVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsgCi0gICAgCi0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBAcGFyYW0gU3RyaW5nQnVmZmVyIFRha2VzIHRoZSBidWZmZXIgaXQgd2lsbCB3cml0ZSBjb2RlIHRvCi0gICovCi0gIHB1YmxpYyBHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIGZidWZmZXIgPSBidWZmZXI7Ci0gICAgICBmUmVzaWRlbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7IAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN0cmluZyByZXNpZGVudCkKLSAgewotICAgIC8vbm90aGluZyB0byBiZSBkb25lIGJ1dCBtdXN0IGJlIGltcGxlbWVudGVkCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50Rm9sZGVyUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gZkNsaWVudEZvbGRlclBhdGg7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRGb2xkZXJQYXRoKFN0cmluZyBmQ2xpZW50Rm9sZGVyUGF0aF8pCi0gIHsKLSAgICBmQ2xpZW50Rm9sZGVyUGF0aCA9IGZDbGllbnRGb2xkZXJQYXRoXzsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgc2VydmljZU5hbWUgPSAiIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBwb3J0TmFtZSA9ICIiOwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhY2thZ2VOYW1lID0gIiI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcHJveHlCYXNlTmFtZSA9ICIiOwotCi0gIHB1YmxpYyB2b2lkIHNldEluZm8oU3RyaW5nIHNlcnZpY2UsIFN0cmluZyBwb3J0LCBTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBwcm94eUJhc2UpCi0gIHsKLSAgICBzZXJ2aWNlTmFtZSA9IHNlcnZpY2U7Ci0gICAgcG9ydE5hbWUgPSBwb3J0OwotICAgIHRoaXMucGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsgCi0gICAgcHJveHlCYXNlTmFtZSA9IHByb3h5QmFzZTsgIAotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBVTkRFUlNDT1JFID0gJ18nOwotICBwdWJsaWMgU3RyaW5nIGdldFNlc3Npb25CZWFuSWQoKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBnZXRDbGllbnRGb2xkZXJQYXRoKCk7Ci0gICAgaW50IGluZGV4ID0gbmFtZS5sYXN0SW5kZXhPZigiLyIpOwotICAgIGluZGV4Kys7Ci0gICAgU3RyaW5nQnVmZmVyIG5ld05hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKG5hbWUuc3Vic3RyaW5nKGluZGV4KSk7Ci0gICAgCi0gICAgLy9XZSBuZWVkIHRvIG1ha2UgdGhpcyBhIHZhbGlkIGphdmEgaWRlbnRpZmllcgotICAgIC8vVG8gZG8gdGhpcyB3ZSB3aWxsIHJlcGxhY2UgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB2YWxpZCB3aXRoIGFuIHVuZGVyc2NvcmUKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld05hbWUubGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgCWNoYXIgYyA9IG5ld05hbWUuY2hhckF0KGkpOwotICAgIAlpZiAoaSA9PSAwICYmICFDaGFyYWN0ZXIuaXNKYXZhSWRlbnRpZmllclN0YXJ0KGMpIHx8ICFDaGFyYWN0ZXIuaXNKYXZhSWRlbnRpZmllclBhcnQoYykpCi0gICAgCXsKLSAgICAJCW5ld05hbWUuc2V0Q2hhckF0KGksVU5ERVJTQ09SRSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgcmV0dXJuIG5ld05hbWUgKyAiaWQiOwotICB9Ci0KLSAgLyoKLSAgKiBUaGUgTnVtYmVyIEZhY3RvcnkgaXMgaGVyZSBmb3IgbmFtaW5nIHB1cnBvc2VzLiBJbiAKLSAgKiB0aGlzIHdheSB3ZSBpbnN1cmUgbm8gbmFtZXMgd2UgY3JlYXRlIGluIGEgcGllY2Ugb2YKLSAgKiBjb2RlIGdlbiBhcmUgdGhlIHNhbWUuIFdlIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlcnMKLSAgKiB1c2VkIGFuZCB3ZSBoYW5kIGJhY2sgdGhlIG5leHQgb25lLiBMaWtlIHRha2UgYSBudW1iZXIgCi0gICogYnVkZHkKLSAgKiBAcGFyYW0gaW50IG51bWJlciB3ZSBhcmUgYXQgYXMgdGhlIHN0YXRlIGRhdGEgaGFzIHRvIGJlIHNldHRhYmxlCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE51bWJlckZhY3RvcnkoaW50IG51bWJlcikKLSAgewotICAgICBmVW5pcXVlTnVtYmVyID0gbnVtYmVyOwotICB9Ci0KLQotICAvKgotICAqIFRoaXMgaXMgYSB1bmlxdWUgbnVtYmVyIGZvciBzdGF0ZSBwdXJwb3NlcwotICAqIEByZXR1cm4gaW50IAotICAqLwotICBwdWJsaWMgaW50IGdldE51bWJlckZhY3RvcnkoKQotICB7Ci0gICAgIHJldHVybiBmVW5pcXVlTnVtYmVyOyAKLSAgfQotICAvKgotICAqIFRoaXMgaXMgYSB1bmlxdWUgbnVtYmVyIGZvciBuYW1pbmcgcHVycG9zZXMKLSAgKiBAcmV0dXJuIGludCAKLSAgKi8KLSAgcHVibGljIGludCBnZXRVbmlxdWVOdW1iZXIoKQotICB7Ci0gICAgIHJldHVybiBmVW5pcXVlTnVtYmVyKys7Ci0gIH0KLQotCi0gIC8qKgotICAqIHJldHVybnMgdGhlIGN1cnJlbnQgU3RyaW5nQnVmZmVyCi0gICogQHJldHVybiBTdHJpbmdCdWZmZXIgVGFrZXMgdGhlIGJ1ZmZlciBpdCB3aWxsIHdyaXRlIGNvZGUgdG9vCi0gICovCi0gIHB1YmxpYyBTdHJpbmdCdWZmZXIgZ2V0U3RyaW5nQnVmZmVyICgpCi0gIHsKLSAgICAgIHJldHVybiBmYnVmZmVyOwotICB9Ci0KLSAgCi0gIC8qKgotICAqIHJldHVybnMgdGhlIFZpc2l0b3IgdGhhdCBjYWxsZWQgdGhpcyBnZW5lcmF0b3IKLSAgKiBAcmV0dXJuIFZpc2l0b3IgCi0gICovCi0gIHB1YmxpYyBWaXNpdG9yIGdldFZpc2l0b3IgKCkKLSAgewotICAgICAgcmV0dXJuIGZWaXNpdG9yOwotICB9Ci0gIAotCi0KLQotICAvKioKLSAgKiB2ZWN0b3IgdXNlZCB0byBob2xkIHN0YXRlIGRhdGEgCi0gICogQHBhcmFtZXRlciBWaXNpdG9yIAotICAqLwotICBwdWJsaWMgdm9pZCBwdXRSZXNpZGVudFZlY3RvciAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICAgZlJlc2lkZW50VmVjdG9yLmFkZEVsZW1lbnQob2JqZWN0KTsKLSAgfQotICAKLQotICAvKioKLSAgKiB2ZWN0b3IgdXNlZCB0byBob2xkIHN0YXRlIGRhdGEgCi0gICogQHBhcmFtZXRlciBWaXNpdG9yIAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXNpZGVudFZlY3RvciAoVmVjdG9yIHZlY3RvcikKLSAgewotICAgICAgZlJlc2lkZW50VmVjdG9yID0gdmVjdG9yOwotICB9Ci0gIAotCi0gIC8qKgotICAqIHJldHVybnMgdGhlIHJlc2lkZW50IHZlY3RvcgotICAqIEByZXR1cm4gVmlzaXRvciAKLSAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRSZXNpZGVudFZlY3RvciAoKQotICB7Ci0gICAgICByZXR1cm4gZlJlc2lkZW50VmVjdG9yOwotICB9Ci0gIAotCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIGFueSBzdGF0ZSBhIGdlbmVyYXRvciBtYXkgaGF2ZQotICAqCi0gICoqLwotCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKQotICB7Ci0gICAgIC8vdG8gYmUgaW1wbGVtZW50ZWQgaW4gc3VibGFzc2VzCi0gIH0KLQotCi0gICAvKioKLSAgKiBzZXRzIHRoZSB2aXNpdG9yIHRoYXQgY2FsbHMgdGhlIHZpc2l0Ci0gICogQHBhcmFtZXRlciBWaXNpdG9yIAotICAqLwotCi0gIHB1YmxpYyB2b2lkIHNldFZpc2l0b3IoVmlzaXRvciB2aXNpdG9yKQotICB7Ci0gICAgICBmVmlzaXRvciA9IHZpc2l0b3I7Ci0gIH0KLQotCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAvL2ltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMKLSAgCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vUmVsVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1JlbFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVjOWZkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vUmVsVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW47Ci0gICAgICAKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qIFRoaXMgdmlzdG9yIHdpbGwgdmlzaXQgZWxlbWVudHMgaW4gYSBtb2RlbCBnaXZlbiBhIAotKiBwYXJ0aWN1bGFyIHJlbAotKiAqLwotcHVibGljIGNsYXNzIFJlbFZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIHByaXZhdGUgaW50IGZFbGVtZW50Q291bnRlcjsKLSAgcHJpdmF0ZSBpbnQgZlRvdGFsRWxlbWVudHM7Ci0gIHByaXZhdGUgU3RyaW5nIGZyZWxOYW1lOwotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotCi0gIHB1YmxpYyBSZWxWaXNpdG9yIChTdHJpbmcgcmVsTmFtZSkKLSAgewotICAgICBmcmVsTmFtZSA9IHJlbE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0VG90YWxFbGVtZW50c1RvVmlzaXQoKQotICB7Ci0gICAgIHJldHVybiBmVG90YWxFbGVtZW50czsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzTGFzdEVsZW1lbnQoKQotICB7Ci0gICAgIGlmKGdldFRvdGFsRWxlbWVudHNUb1Zpc2l0KCkgLSBwcmVzZW50RWxlbWVudCgpID09IDApIHJldHVybiB0cnVlOwotICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgaW50IHByZXNlbnRFbGVtZW50KCkKLSAgewotICAgICByZXR1cm4gZkVsZW1lbnRDb3VudGVyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFZpc2l0b3JBY3Rpb24gdmEpCi0gIHsKLSAgICAvL2ltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMKLSAgfSAgCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoT2JqZWN0IHNvdXJjZUVsZW1lbnQsVmlzaXRvckFjdGlvbiB2QWN0aW9uKQotICB7Ci0gIAkgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgICBpbml0aWFsaXplKHZBY3Rpb24pOwotICAKLSAgICAgICAgdkFjdGlvbi5zZXRWaXNpdG9yKHRoaXMpOwotICAgICAgICBSZWwgcmVsID0gKChCYXNpY0VsZW1lbnQpc291cmNlRWxlbWVudCkuZ2V0UmVsKGZyZWxOYW1lKTsKLSAgICAgICAgLy9zZXQgc29tZSBzdGF0ZSBkYXRhCi0gICAgICAgIGZUb3RhbEVsZW1lbnRzID0gcmVsLmdldE51bWJlck9mVGFyZ2V0RWxlbWVudHMoKTsKLSAgICAgICAgZkVsZW1lbnRDb3VudGVyID0gMDsgIAotICAgICAgICAKLSAgICAgICAgRW51bWVyYXRpb24gZSA9IHJlbC5nZXRUYXJnZXRFbGVtZW50cygpOwotICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSl7Ci0gICAgICAgICAgIEJhc2ljRWxlbWVudCB0YXJnZXRFbGVtZW50ID0gKEJhc2ljRWxlbWVudCllLm5leHRFbGVtZW50KCk7IAotICAgICAgICAgICBmRWxlbWVudENvdW50ZXIrKzsKLSAgICAgICAgICAgaW5pdGlhbGl6ZSh2QWN0aW9uKTsKLSAgICAgICAgICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdCh0YXJnZXRFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RhdHVzOwotICB9IAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1Zpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhNzA0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgaW50ZXJmYWNlIFZpc2l0b3IgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoT2JqZWN0IG9iamVjdCwgVmlzaXRvckFjdGlvbiB2QWN0aW9uKTsKLSAgICAgICAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9WaXNpdG9yQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTQxMjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9WaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgVmlzaXRvckFjdGlvbi4KLSogVGhlIHZpc2l0b3Igd2Fsa3MgdGhlIG1vZGVsIGFuZCB0aGUgVmlzaXRvckFjdGlvbiAKLSogZG9lcyB0aGUgYWN0aW9uCi0qICovCi1wdWJsaWMgaW50ZXJmYWNlIFZpc2l0b3JBY3Rpb24gCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpOwotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFZpc2l0b3IgdmlzaXRvcik7Ci0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoU3RyaW5nIHJlc2lkZW50U3RyaW5nKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL0F0dHJpYnV0ZVZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL0F0dHJpYnV0ZVZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNmYzYyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9BdHRyaWJ1dGVWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5SZWxWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLklucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlVmlzaXRvciBleHRlbmRzIFJlbFZpc2l0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHJpdmF0ZSBWZWN0b3IgZlJlc2lkZW50VmVjdG9yMTsKLSAgcHJpdmF0ZSBWZWN0b3IgZlJlc2lkZW50VmVjdG9yMjsKLQotICAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0KLSAgcHVibGljIEF0dHJpYnV0ZVZpc2l0b3IgKCkKLSAgewotICAgIHN1cGVyKFR5cGVFbGVtZW50LlJFTF9BVFRSSUJVVEVTKTsKLSAgfQotCi0gIHB1YmxpYyBBdHRyaWJ1dGVWaXNpdG9yIChTdHJpbmcgcmVsKQotICB7Ci0gICAgc3VwZXIocmVsKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRTdHJpbmcoU3RyaW5nIHJlc2lkZW50KQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZXNpZGVudFZlY3RvcjEoVmVjdG9yIHJlc2lkZW50KQotICB7Ci0gICAgZlJlc2lkZW50VmVjdG9yMSA9IHJlc2lkZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRWZWN0b3IyKFZlY3RvciByZXNpZGVudCkKLSAgewotICAgIGZSZXNpZGVudFZlY3RvcjIgPSByZXNpZGVudDsKLSAgfQotCi0gIAotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFZpc2l0b3JBY3Rpb24gdkFjdGlvbikKLSAgewotICAgICAvL2hhY2sgZm9yIDE5NzcyNgotCi0gICAgIGlmKHZBY3Rpb24gaW5zdGFuY2VvZiBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IpewotICAgICAgIGlmKGZSZXNpZGVudFZlY3RvcjEgPT0gbnVsbCkgZlJlc2lkZW50VmVjdG9yMT1uZXcgVmVjdG9yKCk7Ci0gICAgICAgaWYoZlJlc2lkZW50VmVjdG9yMiA9PSBudWxsKSBmUmVzaWRlbnRWZWN0b3IyPW5ldyBWZWN0b3IoKTsKLSAgICAgICAoKElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcil2QWN0aW9uKS5zZXRQYXJlbnRHZXR0ZXJzKGZSZXNpZGVudFZlY3RvcjEsZlJlc2lkZW50VmVjdG9yMik7Ci0gICAgIH0KLSAgfQotIAotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vRmllbGRWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9GaWVsZFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc1YmU1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9GaWVsZFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLklucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgRmllbGRWaXNpdG9yIGV4dGVuZHMgQXR0cmlidXRlVmlzaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcml2YXRlIFZlY3RvciBmUmVzaWRlbnRWZWN0b3IxOwotICBwcml2YXRlIFZlY3RvciBmUmVzaWRlbnRWZWN0b3IyOwotCi0gICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLQotICBwdWJsaWMgRmllbGRWaXNpdG9yICgpCi0gIHsKLSAgICBzdXBlcihUeXBlRWxlbWVudC5SRUxfRklFTERTKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRTdHJpbmcoU3RyaW5nIHJlc2lkZW50KQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZXNpZGVudFZlY3RvcjEoVmVjdG9yIHJlc2lkZW50KQotICB7Ci0gICAgZlJlc2lkZW50VmVjdG9yMSA9IHJlc2lkZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRWZWN0b3IyKFZlY3RvciByZXNpZGVudCkKLSAgewotICAgIGZSZXNpZGVudFZlY3RvcjIgPSByZXNpZGVudDsKLSAgfQotCi0gIAotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFZpc2l0b3JBY3Rpb24gdkFjdGlvbikKLSAgewotICAgICAvL2hhY2sgZm9yIDE5NzcyNgotCi0gICAgIGlmKHZBY3Rpb24gaW5zdGFuY2VvZiBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IpewotICAgICAgIGlmKGZSZXNpZGVudFZlY3RvcjEgPT0gbnVsbCkgZlJlc2lkZW50VmVjdG9yMT1uZXcgVmVjdG9yKCk7Ci0gICAgICAgaWYoZlJlc2lkZW50VmVjdG9yMiA9PSBudWxsKSBmUmVzaWRlbnRWZWN0b3IyPW5ldyBWZWN0b3IoKTsKLSAgICAgICAoKElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcil2QWN0aW9uKS5zZXRQYXJlbnRHZXR0ZXJzKGZSZXNpZGVudFZlY3RvcjEsZlJlc2lkZW50VmVjdG9yMik7Ci0gICAgIH0KLSAgfQotIAotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vTWV0aG9kVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vTWV0aG9kVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDY2NDYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL01ldGhvZFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uUmVsVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgTWV0aG9kVmlzaXRvciBleHRlbmRzIFJlbFZpc2l0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0KLSAgcHVibGljIE1ldGhvZFZpc2l0b3IgKCkKLSAgewotICAgICBzdXBlcihCZWFuRWxlbWVudC5SRUxfTUVUSE9EUyk7Ci0gIH0KLSAgCi0gICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vUGFyYW1ldGVyVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vUGFyYW1ldGVyVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzQ5MzEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1BhcmFtZXRlclZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uUmVsVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5NZXRob2RFbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdmlzaXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJWaXNpdG9yIGV4dGVuZHMgUmVsVmlzaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLQotICBwdWJsaWMgUGFyYW1ldGVyVmlzaXRvciAoKQotICB7Ci0gICAgIHN1cGVyKE1ldGhvZEVsZW1lbnQuUkVMX1BBUkFNRVRFUlMpOwotICB9Ci0gIAotICAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1JldHVyblBhcmFtZXRlclZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1JldHVyblBhcmFtZXRlclZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2MjA3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9SZXR1cm5QYXJhbWV0ZXJWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlJlbFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuTWV0aG9kRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUmV0dXJuUGFyYW1ldGVyVmlzaXRvciBleHRlbmRzIFJlbFZpc2l0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0KLSAgcHVibGljIFJldHVyblBhcmFtZXRlclZpc2l0b3IgKCkKLSAgewotICAgICBzdXBlcihNZXRob2RFbGVtZW50LlJFTF9SRVRVUk5fUEFSQU1FVEVSUyk7Ci0gIH0KLSAgCi0gICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vVHlwZVZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1R5cGVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNTQ2MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vVHlwZVZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uUmVsVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgVHlwZVZpc2l0b3IgZXh0ZW5kcyBSZWxWaXNpdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotCi0gIHB1YmxpYyBUeXBlVmlzaXRvciAoKQotICB7Ci0gICAgc3VwZXIoVHlwZUVsZW1lbnQuUkVMX1RZUEUpOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzk2ZTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzQmVhblZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZk1ldGhvZFZpc2l0b3I7Ci0KLQotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLgotKiBUaGlzIFZpc2l0b3JBY3Rpb24gd2lsbCBjcmVhdGUgYSBCZWFuRWxlbWVudCB1c2luZyB0aGUKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgdGhlIG1ldGhvZHMgaW4gdGhlIEphdmFDbGFzcwotKiAqLwotcHVibGljIGNsYXNzIERldGVjdE5vbkphdmFDaGFyc0JlYW5WaXNpdG9yQWN0aW9uIGV4dGVuZHMgVmlzaXRvckFjdGlvbkltcGwKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhciBVTkRFUlNDT1JFID0gJ18nOwotCi0gIHB1YmxpYyBEZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbiAoIFZlY3RvciBtZXNzYWdlcywgVmVjdG9yIGJlYW5zKQotICAJewotICAJCXN1cGVyIChtZXNzYWdlcywgYmVhbnMpOwotICAJfQotCi0gIC8qKgotICAqIFRoZSB2aXNpdCB3aWxsIGNyZWF0ZSB0aGUgYmVhbgotICAqIFdhbGsgdGhlIG1ldGhvZHMKLSAgKiBAcGFyYW0gSmF2YUNsYXNzIHRoZSBjbGFzcyB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYmVhbiBtb2RlbAotICAqKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBqYXZhY2xhc3MpCi0gIHsKLSAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gKEphdmFDbGFzcylqYXZhY2xhc3M7Ci0gICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gamF2YUNsYXNzLmdldEphdmFQYWNrYWdlKCkuZ2V0UGFja2FnZU5hbWUoKTsKLSAgICBTdHJpbmcgYmVhbk5hbWUgPSBqYXZhQ2xhc3MuZ2V0TmFtZSgpOwotCi0gICAgaWYgKCFpc0JlYW5WaXNpdGVkKGphdmFDbGFzcykpIHsKLSAgICAgIAlhZGRWaXNpdGVkQmVhbihqYXZhQ2xhc3MpOwotCQkvLyBjaGVjayB0aGUgYmVhbiBuYW1lCi0JCWNoZWNrQmVhbk5hbWUoYmVhbk5hbWUpOwotCQljaGVja1BhY2thZ2VOYW1lKHBhY2thZ2VOYW1lLCBiZWFuTmFtZSk7Ci0JICAJRGV0ZWN0Tm9uSmF2YUNoYXJzTWV0aG9kVmlzaXRvckFjdGlvbiBtZXRob2RWaXNpdG9yQWN0aW9uID0gbmV3IERldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24oZ2V0TWVzc2FnZXMoKSwgZ2V0QmVhbnNWaXNpdGVkKCkpOwotICAgICAgCUphdmFNb2ZNZXRob2RWaXNpdG9yIG1ldGhvZFZpc2l0b3IgPSBuZXcgSmF2YU1vZk1ldGhvZFZpc2l0b3IoKTsKLSAgICAJbWV0aG9kVmlzaXRvci5ydW4oamF2YUNsYXNzLG1ldGhvZFZpc2l0b3JBY3Rpb24pOwotICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICB9Ci0KLSAgIHByaXZhdGUgdm9pZCBjaGVja0JlYW5OYW1lKFN0cmluZyBiZWFuTmFtZSkKLSAgIAl7Ci0JIAotCSAvLyBjaGVjayBpZiB0aGUgYmVhbiBzdGFydHMgd2l0aCBhIGxvd2VyIGNhc2UKLQkgaWYgKCBDaGFyYWN0ZXIuaXNMb3dlckNhc2UoYmVhbk5hbWUuY2hhckF0KDApKSkKLSAgICAJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLldBUk5fQkVBTl9OQU1FX1NUQVJUU19XSVRIX0xPV0VSX0NBU0UsIG5ldyBTdHJpbmdbXXtiZWFuTmFtZX0pOyAgCi0KLQkKLSAgICAgLy9jaGVjayBpZiB0aGUgbmFtZSBoYXMgYW4gdW5kZXJzY29yZSwgdGhlbiBuZXh0IGxldHRlciBzaG91bGQgYmUgdXBwZXIgY2FzZQotICAgICBpbnQgdW5kZXJTY29yZUluZGV4ID0gYmVhbk5hbWUuaW5kZXhPZihVTkRFUlNDT1JFKTsKLQkgU3RyaW5nIHRlbXBOYW1lID0gYmVhbk5hbWU7Ci0JIHdoaWxlKHVuZGVyU2NvcmVJbmRleCAhPS0xKSB7Ci0JCXRlbXBOYW1lID0gdGVtcE5hbWUuc3Vic3RyaW5nKHVuZGVyU2NvcmVJbmRleCsxKTsKLQkJaWYgKCBDaGFyYWN0ZXIuaXNMb3dlckNhc2UodGVtcE5hbWUuY2hhckF0KDApKSkgewotICAgICAgCQlhZGRNZXNzYWdlKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fTUVUSE9EX05BTUVfSU5WQUxJRCwgbmV3IFN0cmluZ1tdIHsgYmVhbk5hbWUgfSk7ICAKLSAgICAgIAkJYnJlYWs7Ci0JCQl9Ci0JCWVsc2UKLQkJCXVuZGVyU2NvcmVJbmRleCA9IHRlbXBOYW1lLmluZGV4T2YoVU5ERVJTQ09SRSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tQYWNrYWdlTmFtZShTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBiZWFuTmFtZSkKLQkJewotCQkJaWYgKCFwYWNrYWdlTmFtZS5lcXVhbHMocGFja2FnZU5hbWUudG9Mb3dlckNhc2UoKSkpCi0JCQkJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX1BBQ0tBR0VfTkFNRV9IQVNfVVBQRVJfQ0FTRSwgbmV3IFN0cmluZ1tdIHsgcGFja2FnZU5hbWUsIGJlYW5OYW1lIH0pOwotCQl9Ci0gfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNNZXRob2RWaXNpdG9yQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0RldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ2MGJmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0RldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9ycy5KYXZhTW9mUGFyYW1ldGVyVmlzaXRvcjsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQmVhbkVsZW1lbnQgdXNpbmcgdGhlIAotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayB0aGUgbWV0aG9kcyBpbiB0aGUgSmF2YUNsYXNzCi0qICovCi1wdWJsaWMgY2xhc3MgRGV0ZWN0Tm9uSmF2YUNoYXJzTWV0aG9kVmlzaXRvckFjdGlvbiBleHRlbmRzIFZpc2l0b3JBY3Rpb25JbXBsIAotewotICBwcml2YXRlIHN0YXRpYyBjaGFyIFVOREVSU0NPUkUgPSAnXyc7Ci0gIHByaXZhdGUgYm9vbGVhbiBzZXJ2aWNlQmVhbiA9IGZhbHNlOwotCi0gICBwdWJsaWMgRGV0ZWN0Tm9uSmF2YUNoYXJzTWV0aG9kVmlzaXRvckFjdGlvbiAoIFZlY3RvciBtZXNzYWdlcywgVmVjdG9yIGJlYW5zKQotICAJewotICAJCXN1cGVyIChtZXNzYWdlcywgYmVhbnMpOwotICAJCWlmICggYmVhbnMuc2l6ZSgpID09IDEpCi0gIAkJCXNlcnZpY2VCZWFuID0gdHJ1ZTsKLSAgCX0KLQotICAvKioKLSAgKiBDcmVhdGUgYSBtZXRob2QgZWxlbWVudCBmcm9tIHRoZSBtZXRob2QgCi0gICogQHBhcmFtIE1ldGhvZCB0aGUgY2xhc3MgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIG1ldGhvZAotICAqKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBpbWV0aG9kKQotICB7Ci0gICAgCi0gICAgTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpaW1ldGhvZDsKLSAgICBTdHJpbmcgIGNsYXNzTmFtZSA9IG1ldGhvZC5nZXRDb250YWluaW5nSmF2YUNsYXNzKCkuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBuYW1lID0gbWV0aG9kLmdldE5hbWUoKTsKLQotCWlmICggc2VydmljZUJlYW4gJiYgIW1ldGhvZC5pc0NvbnN0cnVjdG9yKCkgKQotCQljaGVja1VwcGVyQ2FzZShuYW1lLCBjbGFzc05hbWUpOwotCQotCS8vIGZvciBzZXJ2aWNlIGJlYW4gb3IgYW55IHJlZmVyZW5jZWQgYmVhbiBwcm9wZXJ0eSBhY2Nlc3NvcnMKLQkgaWYgKCBzZXJ2aWNlQmVhbiB8fCBuYW1lLnN0YXJ0c1dpdGgoImdldCIpIHx8IG5hbWUuc3RhcnRzV2l0aCgic2V0IikgfHwgbmFtZS5zdGFydHNXaXRoKCJpcyIpKSAKLQkgewotCSAgICBjaGVja1VuZGVyU2NvcmUobmFtZSwgY2xhc3NOYW1lKTsKLQkgICAgY2hlY2tOdW1lcmljRGlnaXRzKG5hbWUsIGNsYXNzTmFtZSk7Ci0JICAgIGNoZWNrQm9vbGVhblByb3BlcnRpZXMobWV0aG9kLCBjbGFzc05hbWUpOwotCQkgIAkKLQkgCURldGVjdE5vbkphdmFDaGFyc1BhcmFtZXRlclZpc2l0b3JBY3Rpb24gcGFyYW1ldGVyVmlzaXRvckFjdGlvbiA9IG5ldyBEZXRlY3ROb25KYXZhQ2hhcnNQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uKGdldE1lc3NhZ2VzKCksIGdldEJlYW5zVmlzaXRlZCgpKTsKLQkgCS8vIHJzayBQYXNzaW5nIGluIG51bGwgZm9yIHRoZSBlbnZpcm9ubWVudC4gRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbiBhbHdheXMgcmV0dXJucyBhbiBPSyBzdGF0dXMuCi0gICAgCUphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yIHBhcmFtZXRlclZpc2l0b3IgPSBuZXcgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3IobnVsbCk7Ci0gICAgCXBhcmFtZXRlclZpc2l0b3IucnVuKG1ldGhvZCwgcGFyYW1ldGVyVmlzaXRvckFjdGlvbik7ICAgCi0JICB9Ci0JIAotCSByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrVXBwZXJDYXNlKFN0cmluZyBuYW1lLCBTdHJpbmcgY2xhc3NOYW1lKQotICB7Ci0gIAkgLy8gaW4gYSBzZXJ2aWNlIGJlYW4gY2hlY2sgaWYgYW55IG1ldGhvZCBzdGFydHMgd2l0aCB1cHBlciBjYXNlIGxldHRlcgotCSBpZiAoIENoYXJhY3Rlci5pc1VwcGVyQ2FzZShuYW1lLmNoYXJBdCgwKSkpCi0gICAgCQlhZGRNZXNzYWdlKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSkFWQV9NRVRIT0RfU1RBUlRfV0lUSF9VUFBFUl9DQVNFLCBuZXcgU3RyaW5nW117bmFtZSwgY2xhc3NOYW1lfSk7ICAKLQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrVW5kZXJTY29yZShTdHJpbmcgbmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotICAgICAvL2NoZWNrIGlmIHRoZSBuYW1lIGhhcyBhbiB1bmRlcnNjb3JlLCB0aGVuIG5leHQgbGV0dGVyIHNob3VsZCBiZSB1cHBlciBjYXNlCi0gICAgIGludCB1bmRlclNjb3JlSW5kZXggPSBuYW1lLmluZGV4T2YoVU5ERVJTQ09SRSk7Ci0JIFN0cmluZyB0ZW1wTmFtZSA9IG5hbWU7Ci0JIHdoaWxlKHVuZGVyU2NvcmVJbmRleCAhPS0xKSB7Ci0JCXRlbXBOYW1lID0gdGVtcE5hbWUuc3Vic3RyaW5nKHVuZGVyU2NvcmVJbmRleCsxKTsKLQkJaWYgKCBDaGFyYWN0ZXIuaXNMb3dlckNhc2UodGVtcE5hbWUuY2hhckF0KDApKSkgewotICAgIAkJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX01FVEhPRF9OQU1FX0lOVkFMSUQsIG5ldyBTdHJpbmdbXXtuYW1lLCBjbGFzc05hbWV9KTsgIAotICAgICAJCWJyZWFrOwotCQl9Ci0JCWVsc2UKLQkJCXVuZGVyU2NvcmVJbmRleCA9IHRlbXBOYW1lLmluZGV4T2YoVU5ERVJTQ09SRSk7Ci0JICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrTnVtZXJpY0RpZ2l0cyhTdHJpbmcgbmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotICAgICAvL2NoZWNrIGlmIHRoZSBuYW1lIGhhcyBhIG51bWVyaWMsIHRoZW4gbmV4dCBsZXR0ZXIgc2hvdWxkIGJlIHVwcGVyIGNhc2UKLSAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKQotICAgICAJewotICAgICAJCWlmICggQ2hhcmFjdGVyLmlzRGlnaXQobmFtZS5jaGFyQXQoaSkpKQotICAgICAJCQl7Ci0gICAgIAkJCQlpZiAoQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKG5hbWUuY2hhckF0KGkrMSkpKSB7Ci0JCQkgICAgCQlhZGRNZXNzYWdlKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fTUVUSE9EX05BTUVfSU5WQUxJRCwgbmV3IFN0cmluZ1tde25hbWUsIGNsYXNzTmFtZX0pOyAgCi0JCQkgICAgIAkJYnJlYWs7Ci0gCQkJCQl9Ci0JCX0KLSAgICAgfQotICB9Ci0gIHByaXZhdGUgdm9pZCBjaGVja0Jvb2xlYW5Qcm9wZXJ0aWVzKE1ldGhvZCBtZXRob2QsIFN0cmluZyBjbGFzc05hbWUpCi0gIAl7Ci0gIAkJaWYgKCFzZXJ2aWNlQmVhbiAmJiBtZXRob2QuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImdldCIpICYmIAotICAJCQkobWV0aG9kLmdldFJldHVyblR5cGUoKS5nZXROYW1lKCkuZXF1YWxzKCJib29sZWFuIikgfHwKLSAgCQkJIG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZ2V0TmFtZSgpLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkpCi0gIAkJCWFkZE1lc3NhZ2UoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9CT09MRUFOX1BST1BFUlRZX0FDQ0VTU09SUywgbmV3IFN0cmluZ1tde21ldGhvZC5nZXROYW1lKCksIGNsYXNzTmFtZX0pOyAgCi0gIAl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZTI4YTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuQXJyYXlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9ycy5KYXZhTW9mQmVhblZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQmVhbkVsZW1lbnQgdXNpbmcgdGhlIAotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayB0aGUgbWV0aG9kcyBpbiB0aGUgSmF2YUNsYXNzCi0qICovCi1wdWJsaWMgY2xhc3MgRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbiBleHRlbmRzIFZpc2l0b3JBY3Rpb25JbXBsIAotewotCi0gIHB1YmxpYyBEZXRlY3ROb25KYXZhQ2hhcnNQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uICggVmVjdG9yIG1lc3NhZ2VzLCBWZWN0b3IgYmVhbnMpCi0gIAl7Ci0gIAkJc3VwZXIgKG1lc3NhZ2VzLCBiZWFucyk7Ci0gIAl9Ci0KLSAgLyoqCi0gICogQ3JlYXRlIGEgbWV0aG9kIGVsZW1lbnQgZnJvbSB0aGUgbWV0aG9kIAotICAqIEBwYXJhbSBNZXRob2QgdGhlIGNsYXNzIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgaWphdmFQYXJhbWV0ZXIpCi0gIHsKLSAgICAKLSAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXIgPSAoSmF2YVBhcmFtZXRlcikgaWphdmFQYXJhbWV0ZXI7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IG51bGw7Ci0gICAgaWYgKCBqYXZhUGFyYW1ldGVyLmdldEphdmFUeXBlKCkgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpIAotICAgIAl7Ci0gICAgCWphdmFDbGFzcyA9IChKYXZhQ2xhc3MpIGphdmFQYXJhbWV0ZXIuZ2V0SmF2YVR5cGUoKTsKLSAgICAJaWYgKGphdmFDbGFzcy5pc0FycmF5KCkpCi0gICAgCSAgewotICAgIAkgICAgSmF2YUhlbHBlcnMgY29tcG9uZW50VHlwZSA9ICgoQXJyYXlUeXBlKWphdmFDbGFzcykuZ2V0Q29tcG9uZW50VHlwZUFzSGVscGVyKCk7Ci0gICAgCSAgICBpZiAoY29tcG9uZW50VHlwZSBpbnN0YW5jZW9mIEphdmFDbGFzcykKLSAgICAJICAgICAgewotICAgIAkgICAgICAgIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpY29tcG9uZW50VHlwZTsKLSAgICAJICAgICAgfQotICAgIAkgICAgZWxzZQotICAgIAkgICAgICB7Ci0gICAgCSAgICAgICAgamF2YUNsYXNzID0gbnVsbDsgLy9UaGUgYXJyYXkgY29udGFpbnMgcHJpbWl0aXZlIHR5cGVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBmdXJ0aGVyIGNoZWNraW5nLgotICAgIAkgICAgICB9Ci0gICAgCSAgfQotICAgIAl9Ci0gICAJaWYgKHRvQmVWaXNpdGVkKGphdmFDbGFzcykpICAgIHsKLQkJCURldGVjdE5vbkphdmFDaGFyc0JlYW5WaXNpdG9yQWN0aW9uIGJlYW5WaXNpdG9yQWN0aW9uID0gbmV3IERldGVjdE5vbkphdmFDaGFyc0JlYW5WaXNpdG9yQWN0aW9uKGdldE1lc3NhZ2VzKCksIGdldEJlYW5zVmlzaXRlZCgpKTsKLQkJCUphdmFNb2ZCZWFuVmlzaXRvciBiZWFuVmlzaXRvciA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3IoKTsKLQkJCWJlYW5WaXNpdG9yLnJ1bihqYXZhQ2xhc3MsYmVhblZpc2l0b3JBY3Rpb24pOwotICAJICAJfQotICAgCQotICAgCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotCi0gIHByaXZhdGUgYm9vbGVhbiB0b0JlVmlzaXRlZCAoSmF2YUNsYXNzIGphdmFDbGFzcykKLSAgewotCS8vY2hlY2sgZm9yIHJlY29nbml6ZWQgdHlwZXMgCi0JaWYoIGphdmFDbGFzcyA9PSBudWxsCXx8Ci0JICAgamF2YUNsYXNzLmlzUHJpbWl0aXZlKCkgfHwKLQkgICBqYXZhQ2xhc3MuZ2V0SmF2YU5hbWUoKS5zdGFydHNXaXRoKCJqYXZheCIpIHx8Ci0gICAgICAgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4oamF2YUNsYXNzLmdldEphdmFOYW1lKCkpKQotCSAgICAJcmV0dXJuIGZhbHNlOwotCWVsc2UKLQkJICAJcmV0dXJuIHRydWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mQXR0cmlidXRlVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mQXR0cmlidXRlVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjNjYTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9ycy5KYXZhTW9mVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuTW9kZWxFbGVtZW50c0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb21tb24uU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLgotKiBUaGlzIFZpc2l0b3JBY3Rpb24gd2lsbCBjcmVhdGUgYSBBdHRyaWJ1dGVFbGVtZW50IHVzaW5nIHRoZQotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayBhIGNvbXBsZXggdHlwZQotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yQWN0aW9uIGV4dGVuZHMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uCi17Ci0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24oRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmcgcHJvamVjdCwgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHN1cGVyKHBhcmVudEVsZW1lbnQscHJvamVjdCwgZW52KTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgcHJvcGVydHlEZWNvcmF0b3IpCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCSAgCQotICAgIC8vUHJvcGVydHlEZWNvcmF0b3IgcGQgPSAoUHJvcGVydHlEZWNvcmF0b3IpcHJvcGVydHlEZWNvcmF0b3I7Ci0gICAgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gKFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcilwcm9wZXJ0eURlY29yYXRvcjsgIAotICAgIAotICAgIAotICAgIHRyeXsKLSAgICAgICAvL2lmIHRoZSB0eXBlIG9mIHRoaXMgYXR0cmlidXRlIGlzIHVuc3VwcG9ydGVkIGRvbnQgbWFrZSBhbiBBdHRyaWJ1dGUKLSAgICAgIGlmKCEoZ2V0UmV0dXJuUGFyYW0oKSAmJiBUeXBlRmFjdG9yeS5pc1JlY29nbml6ZWRSZXR1cm5UeXBlKChKYXZhSGVscGVycylwZC5nZXRQcm9wZXJ0eVR5cGUoKSkpIAotICAgICAgCSYmIChUeXBlRmFjdG9yeS5pc1VuU3VwcG9ydGVkVHlwZSgoSmF2YUhlbHBlcnMpcGQuZ2V0UHJvcGVydHlUeXBlKCkpKSl7Ci0gICAgICAJICBzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9UWVBFICsgKChKYXZhSGVscGVycylwZC5nZXRQcm9wZXJ0eVR5cGUoKSkuZ2V0SmF2YU5hbWUoKSApOwotCSAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyggbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsCi0JICAgICAgLy9Db25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9UWVBFICsgKChKYXZhSGVscGVycylwZC5nZXRQcm9wZXJ0eVR5cGUoKSkuZ2V0SmF2YU5hbWUoKSxudWxsKSk7Ci0JICAgICAgcmV0dXJuIHN0YXR1czsKLQkgIH0JCi0KLSAgICAgIE1ldGhvZCBzZXRNZXRob2QgPSBwZC5nZXRXcml0ZU1ldGhvZCgpOwotICAgICAgTWV0aG9kIGdldE1ldGhvZCA9IHBkLmdldFJlYWRNZXRob2QoKTsKLSAgICAgIGlmKHNldE1ldGhvZCAhPSBudWxsKXsKLSAgICAgIAlpZihzZXRNZXRob2QuaXNTdGF0aWMoKSl7Ci0gICAgICAgICAgc2V0TWV0aG9kPW51bGw7IAotICAgICAgCX0KLSAgICAgIH0KLSAgICAgIGlmKGdldE1ldGhvZCAhPSBudWxsKXsKLSAgICAgIAlpZihnZXRNZXRob2QuaXNTdGF0aWMoKSl7Ci0gICAgICAgICAgZ2V0TWV0aG9kPW51bGw7Ci0gICAgICAJfQotICAgICAgfQotICAgICAgaWYocGQuaXNmU3RhdGljKCkpewotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgfQotICAgICAgCi0gICAgICBBdHRyaWJ1dGVFbGVtZW50IGF0dHJpYnV0ZUVsZW1lbnQgPSAoQXR0cmlidXRlRWxlbWVudClCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudChwcm9wZXJ0eURlY29yYXRvcixmUGFyZW50RWxlbWVudCk7Ci0KLSAgICAgIGlmKGF0dHJpYnV0ZUVsZW1lbnQgIT0gbnVsbCl7Ci0gICAgICAgIAotICAgICAgICAvL2xldHMgY2hlY2sgYW5kIHNlZSBpZiB0aGUgZ2V0dGVyIHRha2VzIGlucHV0IHBhcmFtcwotICAgICAgICAvL2lmIHNvIHRocm93IGFuIGVycm9yCi0gICAgICAgIC8vbm93IHRoZSBpbnB1dHMKLSAgICAgICAgaWYoZ2V0TWV0aG9kICE9IG51bGwpewotCSAgICAgIEphdmFQYXJhbWV0ZXIgamF2YVBhcmFtZXRlcltdID0gZ2V0TWV0aG9kLmxpc3RQYXJhbWV0ZXJzV2l0aG91dFJldHVybigpOwotCSAgICAgICAgaWYoamF2YVBhcmFtZXRlci5sZW5ndGggPiAwKXsKLQkgICAgICAgICAgaWYoZ2V0UmV0dXJuUGFyYW0oKSkgcmV0dXJuIHN0YXR1czsKLQkgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfSU5ERVhFRF9QUk9QRVJUSUVTICsgZ2V0TWV0aG9kLmdldE5hbWUoKSApOwotCSAgICAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMgKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotCSAgICAgICAgICAvLwkJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfSU5ERVhFRF9QUk9QRVJUSUVTICsgZ2V0TWV0aG9kLmdldE5hbWUoKSxudWxsKSk7Ci0JICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0JICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYoc2V0TWV0aG9kICE9IG51bGwpIGF0dHJpYnV0ZUVsZW1lbnQuc2V0U2V0dGVyTWV0aG9kKHNldE1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpOwotICAgICAgICBpZihnZXRNZXRob2QgIT0gbnVsbCkgYXR0cmlidXRlRWxlbWVudC5zZXRHZXR0ZXJNZXRob2QoZ2V0TWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSk7Ci0KLSAgICAgICAgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uIHR5cGVWaXNpdG9yQWN0aW9uID0gbmV3IEphdmFNb2ZUeXBlVmlzaXRvckFjdGlvbihhdHRyaWJ1dGVFbGVtZW50LGNsaWVudFByb2plY3QsIGVudl8pOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgICAgIHR5cGVWaXNpdG9yQWN0aW9uLnNldEJlYW5zQ3JlYXRlZChnZXRCZWFuc0NyZWF0ZWQoKSk7Ci0gICAgICAgIHR5cGVWaXNpdG9yQWN0aW9uLnNldFJldHVyblBhcmFtKGdldFJldHVyblBhcmFtKCkpOyAKLSAgICAgICAgSmF2YU1vZlR5cGVWaXNpdG9yIHR5cGVWaXNpdG9yID0gbmV3IEphdmFNb2ZUeXBlVmlzaXRvcihlbnZfKTsKLSAgICAgICAgdHlwZVZpc2l0b3Iuc2V0Q2xpZW50UHJvamVjdChnZXRQcm9qZWN0KCkpOwotICAgICAgICBzdGF0dXMgPSB0eXBlVmlzaXRvci5ydW4ocGQsdHlwZVZpc2l0b3JBY3Rpb24pOwotICAgICAgIAotICAgICAgfQotICAgIAotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAllbnZfLmdldExvZygpLmxvZyhJTG9nLldBUk5JTkcsIDUwNTQsIHRoaXMsICJ2aXNpdCIsIGUpOwotICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKAlDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9KVFNfSlNQX0dFTiwgZSk7Ci0gICAgCXRyeSB7Ci0JCQllbnZfLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzKTsKLQkJfSBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIGUxKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9KVFNfSlNQX0dFTik7Ci0JCX0KLSAgICAJcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgLy9lbnYuTG9nLndyaXRlKHRoaXMsInZpc2l0IixJTG9nLk9LLGUpO30KLQotICB9Ci0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZlYzY0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTMgICAxNzY1ODAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEdlbmVyYXRlIGEgQ2xpZW50IFdTIFByb3h5IGFjY2VwdGluZyBVUkwKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tYW5kLk51bGxTdGF0dXNNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tYW5kLlN0YXR1c01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9ycy5KYXZhTW9mQXR0cmlidXRlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkZpZWxkVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uQm9vbGVhblNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uCi0qIFRoaXMgVmlzaXRvckFjdGlvbiB3aWxsIGNyZWF0ZSBhIEJlYW5FbGVtZW50IHVzaW5nIHRoZQotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayB0aGUgbWV0aG9kcyBpbiB0aGUgSmF2YUNsYXNzCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uIGltcGxlbWVudHMgVmlzaXRvckFjdGlvbgotewotCi0gIHByb3RlY3RlZCBJRW52aXJvbm1lbnQgZW52XzsKLSAgcHJvdGVjdGVkIFZpc2l0b3IgZlZpc2l0b3I7Ci0KLSAgLyoKLSAgKiBUaGUgcHJvamVjdCB0aGF0IGRlZmluZXMgdGhlIGNvbnRleHQKLSAgKiovCi0gIHByb3RlY3RlZCBTdHJpbmcgY2xpZW50UHJvamVjdDsKLQotICAvKgotICAqIFRoZSBTdGF0dXMgbW9uaXRvcgotICAqKi8KLSAgcHJvdGVjdGVkIFN0YXR1c01vbml0b3IgbW9uaXRvcl87Ci0KLSAgLyoKLSAgKiBUaGUgbW9kZWwgdGhhdCB3aWxsIGJlIGNyZWF0ZWQKLSAgKiovCi0gIHByb3RlY3RlZCBNb2RlbCBmTW9kZWw7Ci0KLSAgLyoKLSAgKiBUaGlzIGlzIHRoZSBwYXJlbnQgZWxlbWVudCB1c2VkIHdoZW4gY3JlYXRpbmcgYQotICAqIG5ldyBlbGVtZW50Ci0gICovCi0gIHByb3RlY3RlZCBFbGVtZW50IGZQYXJlbnRFbGVtZW50OwotCi0gIC8qCi0gICogTWV0aG9kcyBwcm9jZXNzZWQgZnJvbSBwcm94eQotICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGZCZWFuc0NyZWF0ZWQ7Ci0KLSAgcHJpdmF0ZSBCb29sZWFuU2VsZWN0aW9uW10gZk1ldGhvZHNTZWxlY3RlZDsKLQotICAvKgotICAqIHRoaXMgYm9vbGVhbiB0ZWxscyB3ZXRoZXIgdGhlIGJlYW4gaXMgYSByZXR1cm4gcGFyYW1ldGVyIG9yIGFuIGlucHV0IHBhcmFtZXRlcgotICAqIHVzdWFsbHkgdGhpcyBzaG91bGQgYmUgc2V0IGFyb3VuZCB0aGUgcGFyYW1ldGVydmlzaXRvcmFjdGlvbiwgYW5kIHBhc3NlZCBvbiBmcm9tIHRoZXJlCi0gICovCi0gIHByb3RlY3RlZCBib29sZWFuIGZSZXR1cm5QYXJhbT1mYWxzZTsKLQotICBwdWJsaWMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKFN0cmluZyBjbGllbnRQcm9qZWN0LEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzLCBJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgICBmTWV0aG9kc1NlbGVjdGVkID0gbWV0aG9kczsKLQllbnZfID0gZW52OwotICB9Ci0KLQotCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqIEBwYXJhbSBNb2RlbCBtb2RlbCBpcyB0aGUgTW9kZWwgdGhhdCB0aGlzIGJlYW4gd2lsbCBiZSBwbGFjZWQgaW4KLSAgKiBAcGFyYW0gSVByb2plY3QgdXNlZCBpbiBuYXR1cmUKLSAgKiovCi0gIHB1YmxpYyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24oTW9kZWwgbW9kZWwsIFN0cmluZyBjbGllbnRQcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgICBmTW9kZWwgPSBtb2RlbDsKLQllbnZfID0gZW52OwotICB9Ci0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICogQHBhcmFtIEVsZW1lbnQgdGhlIHBhcmVudCBlbGVtZW50IHRoYXQgdGhpcyBlbGVtZW50IHdpbGwgYmUgYWRkZWQgdG9vCi0gICogQHBhcmFtIElQcm9qZWN0IHVzZWQgaW4gbmF0dXJlCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGNsaWVudFByb2plY3QsIElFbnZpcm9ubWVudCBlbnYgKQotICB7Ci0gICAgZlBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50OwotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0JZW52XyA9IGVudjsKLSAgfQotCi0gIC8qKgotICAqIFRoZSB2aXNpdCB3aWxsIGNyZWF0ZSB0aGUgYmVhbgotICAqIFdhbGsgdGhlIG1ldGhvZHMKLSAgKiBAcGFyYW0gSmF2YUNsYXNzIHRoZSBjbGFzcyB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYmVhbiBtb2RlbAotICAqKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBqYXZhY2xhc3MpCi0gIHsKLSAgCUNob2ljZSBPS0Nob2ljZSA9IG5ldyBDaG9pY2UoJ08nLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX09LLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX09LKTsKLSAgCUNob2ljZSBDYW5jZWxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9DQU5DRUwsIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fQ0FOQ0VMKTsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gKEphdmFDbGFzcylqYXZhY2xhc3M7Ci0gICAgCi0gICAgCi0gICAgQmVhbkVsZW1lbnQgYmVhbkVsZW1lbnQgPSAoQmVhbkVsZW1lbnQpQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQoamF2YUNsYXNzLGZQYXJlbnRFbGVtZW50LGZNb2RlbCk7Ci0gICAgaWYoYmVhbkVsZW1lbnQuaXNPd25lclBhcmFtZXRlcigpKSB7Ci0gICAgICAgIHJlc2V0QmVhbnNDcmVhdGVkKCk7Ci0gICAgfQotICAgIGZNb2RlbCA9IGJlYW5FbGVtZW50LmdldE1vZGVsKCk7Ci0KLSAgICAvL3RoaXMgZm9yIHRoZSBzdWJzZXF1ZW50IGJlYW5zIHRoYXQgcmVwcmVzZW50IHR5cGVzCi0gICAgLy9maXJzdCBkbyB0aGUgYXR0cmlidXRlcwotICAgIC8vaWYgd2UgYXJlIG5vdCBvbiB0aGUgcm9vdAotICAgIGlmICghKGJlYW5FbGVtZW50ID09IGZNb2RlbC5nZXRSb290RWxlbWVudCgpKSl7Ci0gICAgICAgRW51bWVyYXRpb24gZSA9IGdldEJlYW5zQ3JlYXRlZCgpLmVsZW1lbnRzKCk7Ci0gICAgICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSl7Ci0gICAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICBpZihuYW1lLmVxdWFscyhqYXZhQ2xhc3MuZ2V0TmFtZSgpKSl7Ci0gICAgICAgICAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19DWUNMSUNfQkVBTiApOwotICAgICAgICAgICAgLy9nZXRTdGF0dXNNb25pdG9yKCkucmVwb3J0U3RhdHVzKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgICAgICAgCQkJLy9XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uZ2V0TWVzc2FnZSggIiVNU0dfRVJST1JfSlRTX0NZQ0xJQ19CRUFOIiApLG51bGwpKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgICAgfQotICAgICAgIH0KLSAgICAgICAKLSAgICAgICBKYXZhTW9mQXR0cmlidXRlVmlzaXRvckFjdGlvbiBhdHRyaWJ1dGVWaXNpdG9yQWN0aW9uID0gbmV3IEphdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yQWN0aW9uKGJlYW5FbGVtZW50LGNsaWVudFByb2plY3QsIGVudl8pOwotICAgICAgIC8vYXR0cmlidXRlVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgICAgVmVjdG9yIGNoaWxkVmVjdG9yID0gKChWZWN0b3IpZ2V0QmVhbnNDcmVhdGVkKCkuY2xvbmUoKSk7Ci0gICAgICAgY2hpbGRWZWN0b3IuYWRkRWxlbWVudChqYXZhQ2xhc3MuZ2V0TmFtZSgpKTsgIAotICAgICAgIGF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24uc2V0QmVhbnNDcmVhdGVkKGNoaWxkVmVjdG9yKTsKLSAgICAgICBhdHRyaWJ1dGVWaXNpdG9yQWN0aW9uLnNldFJldHVyblBhcmFtKGdldFJldHVyblBhcmFtKCkpOwotICAgICAgIEphdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yIGF0dHJpYnV0ZVZpc2l0b3IgPSBuZXcgSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3IoKTsKLSAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnNldFJldHVyblBhcmFtZXRlcihnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnNldFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnNldEVudmlyb25tZW50KGVudl8pOwotICAgICAgIHN0YXR1cyA9IGF0dHJpYnV0ZVZpc2l0b3IucnVuKGphdmFDbGFzcyxhdHRyaWJ1dGVWaXNpdG9yQWN0aW9uKTsKLSAgICAgICAvLwotICAgICAgIGludCBzZXZlcml0eSA9IHN0YXR1cy5nZXRTZXZlcml0eSgpOyAKLSAgICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5FUlJPUikKLSAgICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgICAKLSAgICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5XQVJOSU5HKQotICAgICAgIHsKLSAgICAgICAgIENob2ljZSByZXN1bHQgPSBlbnZfLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzLCBuZXcgQ2hvaWNlW117T0tDaG9pY2UsIENhbmNlbENob2ljZX0pOwotICAgICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgICB7Ci0gICAgICAgICAJIC8vcmV0dXJuIGFuIGVycm9yIHN0YXR1cyBzaW5jZSB0aGUgdXNlciBjYW5jZWxlZAotICAgICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgICAgfQotICAgICAgICAgCQotICAgICAgIH0KLSAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgICAgSmF2YU1vZkZpZWxkVmlzaXRvckFjdGlvbiBmaWVsZFZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZkZpZWxkVmlzaXRvckFjdGlvbihiZWFuRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgICAvL2ZpZWxkVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgICAgVmVjdG9yIGNoaWxkVmVjdG9yMiA9ICgoVmVjdG9yKWdldEJlYW5zQ3JlYXRlZCgpLmNsb25lKCkpOwotICAgICAgIGNoaWxkVmVjdG9yMi5hZGRFbGVtZW50KGphdmFDbGFzcy5nZXROYW1lKCkpOyAgCi0gICAgICAgZmllbGRWaXNpdG9yQWN0aW9uLnNldEJlYW5zQ3JlYXRlZChjaGlsZFZlY3RvcjIpOwotICAgICAgIGZpZWxkVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgICBKYXZhTW9mRmllbGRWaXNpdG9yIGZpZWxkVmlzaXRvciA9IG5ldyBKYXZhTW9mRmllbGRWaXNpdG9yKCk7Ci0gICAgICAgZmllbGRWaXNpdG9yLnNldFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICAgICBzdGF0dXMgPSBmaWVsZFZpc2l0b3IucnVuKGphdmFDbGFzcyxmaWVsZFZpc2l0b3JBY3Rpb24pOwotICAgICAgIC8vCi0gICAgICAgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsgCi0gICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgCi0gICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgICBDaG9pY2UgcmVzdWx0ID0gZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICAgewotICAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICAgICB9Ci0gICAgICAgICAJCi0gICAgICAgfQotICAgICAgIC8vICAgICAgIAotICAgICAgIAotICAgfQotCi0gICAgLy90aGlzIGlzIHRvIGluc3VyZSB3ZSBhcmUgb24gdGhlIHByb3h5Ci0gICAgLy9ub3cgZG8gdGhlIG1ldGhvZHMKLSAgICBpZiAoYmVhbkVsZW1lbnQgPT0gZk1vZGVsLmdldFJvb3RFbGVtZW50KCkpewotICAgICAgLy9maXJzdCBsZXRzIG1ha2Ugc3VyZSB0aGUgcHJveHkgaXMgaW4gZ29vZCBmb3JtCi0gICAgICAvLy1pdCBoYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgICAvLy1pdCBoYXMgYXQgbGVhc3Qgb25lIG1ldGhvZAotICAgICAgLy9vdGhlcndpc2UgcmV0dXJuIHRoZSBwcm9ibGVtIGluIHRoZSBmb3JtIG9mIGEgc3RhdHVzCi0KLSAgICAgIGlmICghcHJveHlDaGVjayhqYXZhQ2xhc3MsIHN0YXR1cykpIHJldHVybiBzdGF0dXM7Ci0gICAgICBKYXZhTW9mTWV0aG9kVmlzaXRvckFjdGlvbiBtZXRob2RWaXNpdG9yQWN0aW9uID0gbmV3IEphdmFNb2ZNZXRob2RWaXNpdG9yQWN0aW9uKGJlYW5FbGVtZW50LGNsaWVudFByb2plY3QsIGVudl8pOwotICAgICAgCi0gICAgICAvL21ldGhvZFZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgSmF2YU1vZk1ldGhvZFZpc2l0b3IgbWV0aG9kVmlzaXRvciA9IG5ldyBKYXZhTW9mTWV0aG9kVmlzaXRvcigpOwotICAgICAgbWV0aG9kVmlzaXRvci5zZXRNZXRob2RTZWxlY3Rpb24oZk1ldGhvZHNTZWxlY3RlZCk7Ci0gICAgICBzdGF0dXMgPSBtZXRob2RWaXNpdG9yLnJ1bihqYXZhQ2xhc3MsbWV0aG9kVmlzaXRvckFjdGlvbik7Ci0KLSAgICAgIC8vCi0gICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsgCi0gICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5FUlJPUikKLSAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgCi0gICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5XQVJOSU5HKQotICAgICAgewotICAgICAgICBDaG9pY2UgcmVzdWx0ID0gZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgIHsKLSAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICAgfQotICAgICAgICAJCi0gICAgICB9Ci0gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIC8vVGhpcyBpcyB3aGVyZSB3ZSBjaGVjayBmb3Igc2V2ZXJhbCB0aGluZ3M6Ci0gICAgICAvLy1pZiBubyBtZXRob2RzIHdlcmUgcHJvY2Vzc2VkIGJlY2F1c2Ugb2YgdW5zdXBwb3J0ZWQgdHlwZXMgdGhlbiB3ZSBzZW5kIGJhY2sgdGhhdCByZXN1bHQKLSAgICAgIC8vLWlmIHRoZXJlIHdlcmUgYW55IG1ldGhvZHMgb21pdHRlZCB3ZSBzaG91bGQgd2FybiB0aGVtCi0KLSAgICAgIC8vZmlyc3Qgbm8gbWV0aG9kcwotICAgICAgaWYgKCFtZXRob2RWaXNpdG9yQWN0aW9uLndlcmVNZXRob2RzUHJvY2Vzc2VkKCkpewotICAgICAgICAvL3RoaXMgaGFzIHRvIGJlIGRvbmUgdG8gaW5zdXJlIHRoZSBkaWFsb2cgaXMgYW4gZXJyb3IKLSAgICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX05PX1BST1hZX01FVEhPRFNfUFJPQ0VTU0VEICk7Ci0gICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgICAgLy9nZXRTdGF0dXNNb25pdG9yKCkucmVwb3J0U3RhdHVzKCBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsCi0gICAgICAgIC8vCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uZ2V0TWVzc2FnZSggIiVNU0dfRVJST1JfSlRTX05PX1BST1hZX01FVEhPRFNfUFJPQ0VTU0VEIiApLG51bGwpKTsKLSAgICAgIH0gICAgICAgIAkKLSAgICAgIC8vbm93IG1ldGhvZHMgb21pdHRlZAotICAgICAgZWxzZSBpZihtZXRob2RWaXNpdG9yQWN0aW9uLndlcmVNZXRob2RzT21pdHRlZCgpKXsKLSAgICAgICAgLy9UaGUgZGlhbG9nIGlzIGFscmVhZHkgYSB3YXJuaW5nIHNvIHdlIGp1c3QgbmVlZCB0byBzZXQgdGhlIG92ZXJhbGwgbWVzc2FnZQotICAgICAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1BST1hZX01FVEhPRFNfT01JVFRFRCApOwotICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyggbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsCi0gICAgICAgIC8vCQlDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19QUk9YWV9NRVRIT0RTX09NSVRURUQsbnVsbCkpOwotICAgICAgfQkKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoU3RyaW5nIHJlc2lkZW50KQotICB7Ci0gICAgLy9ub3RoaW5nIHRvIGJlIGRvbmUgYnV0IG11c3QgYmUgaW1wbGVtZW50ZWQKLSAgfQotCi0KLSAgLyoKLSAgKiBSZXR1cm4gdGhlIG1vZGVsIHRoYXQgd2FzIGNyZWF0ZWQKLSAgKiBAcmV0dXJuIE1vZGVsIHRoZSBiZWFuIG1vZGVsIHRoYXQgd2FzIGNyZWF0ZWQKLSAgKi8KLSAgcHVibGljIE1vZGVsIGdldE1vZGVsKCkKLSAgewotICAgIHJldHVybiBmTW9kZWw7Ci0gIH0KLQotICAvKgotICAqIFRoZSBwcm94eSBjaGVjayBpbnN1cmVzIHRoZXJlIGlzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQKLSAgKiBhdCBMZWFzdCBvbmUgbWV0aG9kCi0gICogQHBhcmFtIEphdmFDbGFzcyBqYXZhQ2xhc3MgaXMgdXNlZCB0byB0cmF2ZXJzZSB0aGUgbWV0aG9kcyBvbiB0aGUgcHJveHkKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJveHlDaGVjayhKYXZhQ2xhc3MgamF2YUNsYXNzLCBJU3RhdHVzIHN0YXR1cykKLSAgewotICAgICAvLyBmaXJzdCBjaGVjayBmb3IgYSBtZXRob2QKLSAgICAgSXRlcmF0b3IgbT1qYXZhQ2xhc3MuZ2V0UHVibGljTWV0aG9kcygpLml0ZXJhdG9yKCk7Ci0gICAgIGlmICghbS5oYXNOZXh0KCkpewotICAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fTUVUSE9EUyApOwotICAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyggbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgIC8vCQkJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX1BST1hZX0hBU19OT19NRVRIT0RTLG51bGwpKTsKLSAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgIH0JCi0gICAgIC8vbm93IGNoZWNrIGZvciBhIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgICAgd2hpbGUgKG0uaGFzTmV4dCgpKSB7Ci0gICAgICAgTWV0aG9kIG1ldGhvZD0oTWV0aG9kKW0ubmV4dCgpOwotICAgICAgIGlmIChqYXZhQ2xhc3MuZ2V0TmFtZSgpLmVxdWFscyhtZXRob2QuZ2V0TmFtZSgpKSl7Ci0gICAgICAgICAgLy9ub3cgdGhlIGlucHV0cwotICAgICAgICAgIEphdmFQYXJhbWV0ZXIgamF2YVBhcmFtZXRlcltdID0gbWV0aG9kLmxpc3RQYXJhbWV0ZXJzV2l0aG91dFJldHVybigpOwotICAgICAgICAgIGlmIChqYXZhUGFyYW1ldGVyLmxlbmd0aCA9PSAwKQotICAgICAgICAJICByZXR1cm4gdHJ1ZTsKLSAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLQotICB9Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBzdGF0dXMgbW9uaXRvciB0aGF0IHRoaXMgYWN0aW9uIHdpbGwgdXNlIHRvIHJlcG9ydCBzdGF0dXMgdGhhdCBvY2NyZXMgd2hpbGUgZXhlY3V0aW5nIHRoZSBBY3Rpb24uCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1c01vbml0b3IgKCBTdGF0dXNNb25pdG9yIG1vbml0b3IgKQotICB7Ci0JbW9uaXRvcl8gPSBtb25pdG9yOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc3RhdHVzIG1vbml0b3IgdGhhdCB0aGlzIHRhc2sgaXMgdXNpbmcgdG8gcmVwb3J0IHN0YXR1cy4KLSAgKi8KLSAgcHVibGljIFN0YXR1c01vbml0b3IgZ2V0U3RhdHVzTW9uaXRvciAoKQotICB7Ci0gICAgaWYgKG1vbml0b3JfID09IG51bGwpCi0gICAgewotICAgICAgbW9uaXRvcl8gPSBuZXcgTnVsbFN0YXR1c01vbml0b3IoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1vbml0b3JfOwotICB9Ci0KLQotICAgLyoqCi0gICogY2hlY2sgaWYgdGhlIGFjdGlvbiBoYXMgZmluaXNoZWQgc3Vjc2Vzc2Z1bGx5IAotICAqLwotICAvKgotICBwdWJsaWMgYm9vbGVhbiBpc1N1Y2Nlc3NmdWwgKCkKLSAgewotICAgCXJldHVybiBnZXRTdGF0dXNNb25pdG9yKCkuY2FuQ29udGludWUoKTsKLSAgfQotICAqLyAKLSAgcHVibGljIHZvaWQgcmVzZXRCZWFuc0NyZWF0ZWQoKQotICB7Ci0gICAgZkJlYW5zQ3JlYXRlZCA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVudmlyb25tZW50KElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgCWVudl8gPSBlbnY7Ci0gIH0KLSAgCi0gIC8qCi0gICogVGhlIGNvbW1hbmQgdGhhdCBjYWxsZWQgdGhpcyB3aWxsIGdldCB0aGUgcmVzdWx0cyBvZiB0aGUgb3BlcmF0aW9uIGluIHRoZSBmb3JtCi0gICogb2YgYSBzdGF0dXMuCi0gICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0QmVhbnNDcmVhdGVkICgpCi0gIHsKLSAgICBpZihmQmVhbnNDcmVhdGVkID09IG51bGwpIGZCZWFuc0NyZWF0ZWQgPSBuZXcgVmVjdG9yKCk7Ci0gICAgcmV0dXJuIGZCZWFuc0NyZWF0ZWQ7Ci0gIH0KLQotICAvKgotICAqIFRoZSBjb21tYW5kIHRoYXQgY2FsbGVkIHRoaXMgd2lsbCBnZXQgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbiBpbiB0aGUgZm9ybQotICAqIG9mIGEgc3RhdHVzLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRCZWFuc0NyZWF0ZWQgKFZlY3RvciBiZWFuc0NyZWF0ZWQpCi0gIHsKLSAgICBmQmVhbnNDcmVhdGVkID0gYmVhbnNDcmVhdGVkOwotICB9Ci0KLSAgIC8qCi0gICogVGhpcyBib29sZWFuIHRlbGxzIHdldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcmV0dXJuIHBhcmFtIAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRSZXR1cm5QYXJhbSAoKQotICB7Ci0gICAgcmV0dXJuIGZSZXR1cm5QYXJhbTsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBib29sZWFuIHRlbGxzIHdldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcmV0dXJuIHBhcmFtIAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXR1cm5QYXJhbSAoYm9vbGVhbiByZXR1cm5wYXJhbSkKLSAgewotICAgIGZSZXR1cm5QYXJhbSA9IHJldHVybnBhcmFtOwotICB9Ci0KLSAgIC8qCi0gICogVGhpcyBib29sZWFuIHRlbGxzIHdldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcmV0dXJuIHBhcmFtIAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3QgKCkKLSAgewotICAgIHJldHVybiBjbGllbnRQcm9qZWN0OwotICB9Ci0KLSAgLyoKLSAgKiBUaGlzIGJvb2xlYW4gdGVsbHMgd2V0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSByZXR1cm4gcGFyYW0gCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QgKFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgfQotCi0KLSAgLyoqCi0gICogc2V0cyB0aGUgdmlzaXRvciB0aGF0IGNhbGxzIHRoZSB2aXNpdAotICAqIEBwYXJhbWV0ZXIgVmlzaXRvcgotICAqLwotCi0gIHB1YmxpYyB2b2lkIHNldFZpc2l0b3IoVmlzaXRvciB2aXNpdG9yKQotICB7Ci0gICAgICBmVmlzaXRvciA9IHZpc2l0b3I7Ci0gIH0KLQotICAvKgotICAqIFNldHMgdGhlIHBhcmVudCBlbGVtZW50IHRoZSBjaGlsZCB0aGVuIGtub3dzIHdoZXJlIHRvCi0gICogYWRkIGl0c2VsZiB0byB0aGUgbW9kZWwKLSAgKiBAcGFyYW0gRWxlbWVudCBwYXJlbnQgZWxlbWVudAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGZQYXJlbnRFbGVtZW50ID0gZWxlbWVudDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mRmllbGRWaXNpdG9yQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZGaWVsZFZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY0MjU3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZGaWVsZFZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZUeXBlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuTW9kZWxFbGVtZW50c0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRmllbGRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLgotKiBUaGlzIFZpc2l0b3JBY3Rpb24gd2lsbCBjcmVhdGUgYSBBdHRyaWJ1dGVFbGVtZW50IHVzaW5nIHRoZQotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayBhIGNvbXBsZXggdHlwZQotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZGaWVsZFZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24KLXsKLQotICAvKgotICAqQ29uc3RydWN0b3IKLSAgKiovCi0gIHB1YmxpYyBKYXZhTW9mRmllbGRWaXNpdG9yQWN0aW9uKEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIHByb2plY3QsIElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgICBzdXBlcihwYXJlbnRFbGVtZW50LHByb2plY3QsIGVudik7Ci0gIH0KLQotCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgZmllbGRfKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgRmllbGQgZmllbGQgPSAoRmllbGQpZmllbGRfOwotICAgICAKLSAgICB0cnl7Ci0gICAgICAgLy9pZiB0aGUgdHlwZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyB1bnN1cHBvcnRlZCBkb250IG1ha2UgYW4gQXR0cmlidXRlCi0gICAgICBpZighKGdldFJldHVyblBhcmFtKCkgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZSgoSmF2YUhlbHBlcnMpZmllbGQuZ2V0SmF2YUNsYXNzKCkpKSAKLSAgICAgIAkmJiAoVHlwZUZhY3RvcnkuaXNVblN1cHBvcnRlZFR5cGUoKEphdmFIZWxwZXJzKWZpZWxkLmdldEphdmFDbGFzcygpKSkpewotICAgICAgCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRSArICgoSmF2YUhlbHBlcnMpZmllbGQuZ2V0SmF2YUNsYXNzKCkpLmdldEphdmFOYW1lKCkgKTsKLQkgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMoIG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotCSAgICAgIC8vQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRSArICgoSmF2YUhlbHBlcnMpZmllbGQuZ2V0SmF2YUNsYXNzKCkpLmdldEphdmFOYW1lKCksbnVsbCkpOwotCSAgICAgIHJldHVybiBzdGF0dXM7Ci0JICB9CQotCi0KLSAgICAgIEZpZWxkRWxlbWVudCBmaWVsZEVsZW1lbnQgPSAoRmllbGRFbGVtZW50KUJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KGZpZWxkLGZQYXJlbnRFbGVtZW50KTsKLQotICAgICAgaWYoZmllbGRFbGVtZW50ICE9IG51bGwpewotICAgICAgICAvL2xldHMgY2hlY2sgYW5kIHNlZSBpZiB0aGUgZ2V0dGVyIHRha2VzIGlucHV0IHBhcmFtcwotICAgICAgICAvL2lmIHNvIHRocm93IGFuIGVycm9yCi0gICAgICAgIC8vbm93IHRoZSBpbnB1dHMKLSAgICAgICAgCi0gICAgICAgIEphdmFNb2ZUeXBlVmlzaXRvckFjdGlvbiB0eXBlVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24oZmllbGRFbGVtZW50LGNsaWVudFByb2plY3QsIGVudl8pOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgICAgIHR5cGVWaXNpdG9yQWN0aW9uLnNldEJlYW5zQ3JlYXRlZChnZXRCZWFuc0NyZWF0ZWQoKSk7Ci0gICAgICAgIHR5cGVWaXNpdG9yQWN0aW9uLnNldFJldHVyblBhcmFtKGdldFJldHVyblBhcmFtKCkpOyAKLSAgICAgICAgSmF2YU1vZlR5cGVWaXNpdG9yIHR5cGVWaXNpdG9yID0gbmV3IEphdmFNb2ZUeXBlVmlzaXRvcihlbnZfKTsKLSAgICAgICAgdHlwZVZpc2l0b3Iuc2V0Q2xpZW50UHJvamVjdChnZXRQcm9qZWN0KCkpOwotICAgICAgICBzdGF0dXMgPSB0eXBlVmlzaXRvci5ydW4oZmllbGQsdHlwZVZpc2l0b3JBY3Rpb24pOwotICAgICAgIAotICAgICAgfQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpCi0JewotICAgIAllbnZfLmdldExvZygpLmxvZyhJTG9nLldBUk5JTkcsIDUwNTUsIHRoaXMsICJ2aXNpdCIsIGUpOwotICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKAlDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9KVFNfSlNQX0dFTiwgZSk7Ci0gICAgCXRyeSB7Ci0gICAgCQllbnZfLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzKTsKLSAgICAJfSAKLSAgICAgIGNhdGNoIChTdGF0dXNFeGNlcHRpb24gZTEpIAotICAgICAgewotICAgIAkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX0pTUF9HRU4sIGUxICk7Ci0gICAgCX0KLSAgICAJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLSAgfQotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mTWV0aG9kVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mTWV0aG9kVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTUxNjY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9ycy5KYXZhTW9mUGFyYW1ldGVyVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuTW9kZWxFbGVtZW50c0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuTWV0aG9kRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLgotKiBUaGlzIFZpc2l0b3JBY3Rpb24gd2lsbCBjcmVhdGUgYSBCZWFuRWxlbWVudCB1c2luZyB0aGUgCi0qIEphdmFDbGFzcyBhbmQgdGhlIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeQotKiBJdCB3aWxsIGFsc28gYXV0b21hdGljYWxseSB3YWxrIHRoZSBtZXRob2RzIGluIHRoZSBKYXZhQ2xhc3MKLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mTWV0aG9kVmlzaXRvckFjdGlvbiBleHRlbmRzIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbiAKLXsKLQotICBwdWJsaWMgU3RyaW5nIGZVbnN1cHBvcnRlZFBhcmFtZXRlck5hbWU7Ci0KLSAvKgotICAqIE1ldGhvZHMgb21pdHRlZCBmcm9tIHRoZSBwcm94eQotICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGZNZXRob2RzT21pdHRlZDsKLQotICAvKgotICAqIE1ldGhvZHMgcHJvY2Vzc2VkIGZyb20gcHJveHkKLSAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBmTWV0aG9kc1Byb2Nlc3NlZDsKLQotICAgICAKLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24oRWxlbWVudCBwYXJlbnRFbGVtZW50LFN0cmluZyBwcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgc3VwZXIocGFyZW50RWxlbWVudCxwcm9qZWN0LCBlbnYpOwotICAgIGZNZXRob2RzT21pdHRlZCA9IG5ldyBWZWN0b3IoKTsKLSAgICBmTWV0aG9kc1Byb2Nlc3NlZCA9IG5ldyBWZWN0b3IoKTsKLQotICB9Ci0gICAKLSAgLyoqCi0gICogQ3JlYXRlIGEgbWV0aG9kIGVsZW1lbnQgZnJvbSB0aGUgbWV0aG9kIAotICAqIEBwYXJhbSBNZXRob2QgdGhlIGNsYXNzIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgaW1ldGhvZCkKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIE1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKWltZXRob2Q7Ci0gICAgICAgICAgIAotICAgIGlmIChtZXRob2RDaGVjayhtZXRob2QpKXsKLSAgICAgIC8vdGhpcyBpcyB0byBjaGVjayBpbW1lZGlhdGUgaW5wdXQgYW5kIHJldHVybiBwYXJhbWV0ZXJzCi0gICAgICAvL2lmIHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgaW4gdGhlc2Ugd2UgY2FuIHJlYWN0IGltbWVkaWF0ZWx5Ci0gICAgICAvL3dlIGFkZCBpdCB0byB0aGUgb21pdHRlZCBtZXRob2RzIGFuIGdvIHRvIHRoZSBuZXh0IG9uZQotICAgICAgaWYoIXBhcmFtZXRlckNoZWNrKG1ldGhvZCkpewotICAgICAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19BUlJBWVMgKyBmVW5zdXBwb3J0ZWRQYXJhbWV0ZXJOYW1lICk7Ci0gICAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyAobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsCi0gICAgICAgIC8vCQlDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9QQVJBTUVURVJTX0FSUkFZUyArIGZVbnN1cHBvcnRlZFBhcmFtZXRlck5hbWUsbnVsbCkpOwotICAgICAgICBmTWV0aG9kc09taXR0ZWQuYWRkRWxlbWVudChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICAgIGlmKCFudWxsQ29uc3RydWN0b3IobWV0aG9kKSl7Ci0gICAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19JTlBVVFMgKyBmVW5zdXBwb3J0ZWRQYXJhbWV0ZXJOYW1lICk7Ci0gICAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyAobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsCi0gICAgICAgCS8vCUNvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1BBUkFNRVRFUlNfSU5QVVRTICsgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSxudWxsKSk7Ci0gICAgICAgIGZNZXRob2RzT21pdHRlZC5hZGRFbGVtZW50KG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgCi0gICAgICB9Ci0KLSAgICAgIC8vY2Fycnkgb24gYWxsIHBhcmFtZXRlcnMgc3VwcG9ydGVkCi0gICAgICBNZXRob2RFbGVtZW50IG1ldGhvZEVsZW1lbnQgPSAoTWV0aG9kRWxlbWVudClCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudChtZXRob2QsZlBhcmVudEVsZW1lbnQpOwotICAgICAgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3JBY3Rpb24gcGFyYW1ldGVyVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mUGFyYW1ldGVyVmlzaXRvckFjdGlvbihtZXRob2RFbGVtZW50LGNsaWVudFByb2plY3QsZW52Xyk7Ci0gICAgICBwYXJhbWV0ZXJWaXNpdG9yQWN0aW9uLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICAgIEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yIHBhcmFtZXRlclZpc2l0b3IgPSBuZXcgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3IoZW52Xyk7Ci0gICAgICBzdGF0dXMgPSBwYXJhbWV0ZXJWaXNpdG9yLnJ1bihtZXRob2QscGFyYW1ldGVyVmlzaXRvckFjdGlvbik7ICAgCi0gICAgICAvL3NvbWV0aGluZyBtYXkgaGF2ZSBnb25lIHdyb25nIHdpdGggYW4gaW50ZXJuYWwgdHlwZQotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpIT1TdGF0dXMuT0spewotICAgICAgICAvL1RoaXMgbWV0aG9kIGhhcyB0byBiZSBvbWl0dGVkCi0gICAgICAgIGZNZXRob2RzT21pdHRlZC5hZGRFbGVtZW50KG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpOwotICAgICAgICBtZXRob2RFbGVtZW50LnNldE1ldGhvZE9tbWlzc2lvbih0cnVlKTsgIAotICAgICAgfQkKLSAgICAgIGVsc2UgewotICAgICAgICBmTWV0aG9kc1Byb2Nlc3NlZC5hZGRFbGVtZW50KG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpOwotICAgICAgfQkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotIAotICAvKgotICAqIFRlbGxzIHdldGhlciBhbnkgbWV0aG9kcyB3ZXJlIHByb2Nlc3NlZCAKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBhbnkgbWV0aG9kcyB3ZXJlIHByb2Nlc3NlZCAKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gd2VyZU1ldGhvZHNQcm9jZXNzZWQoKQotICB7Ci0gICAgaWYoZk1ldGhvZHNQcm9jZXNzZWQuaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKgotICAqIFRlbGxzIHdldGhlciB0aGVyZSB3ZXJlIG1ldGhvZHMgb21pdHRlZCBiZWNhdXNlIG9mIHVuc3VwcG9ydGVkIHR5cGVzCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgbWV0aG9kcyB3ZXJlIG9taXR0ZWQKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gd2VyZU1ldGhvZHNPbWl0dGVkKCkKLSAgewotICAgIGlmKGZNZXRob2RzT21pdHRlZC5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICogVGhlcmUgbWF5IGJlIG1ldGhvZHMgdGhhdCB3ZSBkb250IHN1cHBvcnQKLSAgKiBhbmQgZG9udCB3YW50IGluIHRoZSBtb2RlbAotICAqIEBwYXJhbSBib29sZWFuIHRydWUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIGZpbmUKLSAgKiovCi0gIHB1YmxpYyBib29sZWFuIG1ldGhvZENoZWNrKE1ldGhvZCBtZXRob2QpCi0gIHsKLSAgICBib29sZWFuIG9rID0gdHJ1ZTsKLSAgICAvLyBpZiB3ZSBoYXZlIGEgY29uc3RydWN0b3Igd2UgcmV0dXJuIGZhbHNlCi0gICAgaWYgKG1ldGhvZC5pc0NvbnN0cnVjdG9yKCkpIHJldHVybiBmYWxzZTsKLQotICAgICAgIAotICAgIHJldHVybiBvazsKLSAgfQotCi0gIC8qKgotICAqIFRoZXJlIG1heSBiZSBwYXJhbWV0ZXJzIG9mIHRoaXMgbWV0aG9kIHRoYXQgaGF2ZSB0eXBlcwotICAqIG5vdCB5ZXQgc3VwcG9ydGVkIHJldHVybiBmYWxzZSBpZiB3ZSBmaW5kIGFueQotICAqIEBwYXJhbSBib29sZWFuIHRydWUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIGZpbmUKLSAgKiovCi0gIHB1YmxpYyBib29sZWFuIHBhcmFtZXRlckNoZWNrKE1ldGhvZCBtZXRob2QpCi0gIHsKLQotICAgIGJvb2xlYW4gb2sgPSB0cnVlOwotICAgIAotICAgIC8vbm93IHRoZSBpbnB1dHMKLSAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsgCi0gICAgZm9yIChpbnQgaSA9IDA7aTxqYXZhUGFyYW1ldGVyLmxlbmd0aDtpKyspIHsKLSAgICAgIEphdmFQYXJhbWV0ZXIgcGFyYW09amF2YVBhcmFtZXRlcltpXTsKLSAgICAgIEphdmFIZWxwZXJzIGphdmFIZWxwZXIxID0gcGFyYW0uZ2V0SmF2YVR5cGUoKTsKLSAgICAgIGlmKFR5cGVGYWN0b3J5LmlzVW5TdXBwb3J0ZWRUeXBlKGphdmFIZWxwZXIxKSkgewotICAgICAgICBmVW5zdXBwb3J0ZWRQYXJhbWV0ZXJOYW1lID0gcGFyYW0uZ2V0TmFtZSgpOyAKLSAgICAJcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAKLSAgICB9Ci0gIHJldHVybiBvazsKLSAgfQotCi0gCi0gIC8qKgotICAqIFRoZXJlIG1heSBiZSBwYXJhbWV0ZXJzIG9mIHRoaXMgbWV0aG9kIHRoYXQgaGF2ZSB0eXBlcwotICAqIG5vdCB5ZXQgc3VwcG9ydGVkIHJldHVybiBmYWxzZSBpZiB3ZSBmaW5kIGFueQotICAqIEBwYXJhbSBib29sZWFuIHRydWUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIGZpbmUKLSAgKiovCi0gIHB1YmxpYyBib29sZWFuIG51bGxDb25zdHJ1Y3RvcihNZXRob2QgbWV0aG9kKQotICB7Ci0gICAgCi0gICAgYm9vbGVhbiBvayA9IHRydWU7Ci0gICAgLy9ub3cgdGhlIGlucHV0cwotICAgIEphdmFQYXJhbWV0ZXIgamF2YVBhcmFtZXRlcltdID0gbWV0aG9kLmxpc3RQYXJhbWV0ZXJzV2l0aG91dFJldHVybigpOyAKLSAgICBmb3IgKGludCBpID0gMDtpPGphdmFQYXJhbWV0ZXIubGVuZ3RoO2krKykgewotICAgICAgSmF2YVBhcmFtZXRlciBwYXJhbT1qYXZhUGFyYW1ldGVyW2ldOwotICAgICAgSmF2YUhlbHBlcnMgamF2YUhlbHBlcjEgPSBwYXJhbS5nZXRKYXZhVHlwZSgpOwotICAgICAgaWYoamF2YUhlbHBlcjEgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpewotICAgICAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gKEphdmFDbGFzcylqYXZhSGVscGVyMTsKLSAgICAgICAgaWYoVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4oamF2YUNsYXNzLmdldEphdmFOYW1lKCkpKXJldHVybiB0cnVlOwotICAgICAgICAgIEl0ZXJhdG9yIG09amF2YUNsYXNzLmdldE1ldGhvZHMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChtLmhhc05leHQoKSkgewotICAgICAgICAgICAgTWV0aG9kIG1ldGhvZDI9KE1ldGhvZCltLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChqYXZhQ2xhc3MuZ2V0TmFtZSgpLmVxdWFscyhtZXRob2QyLmdldE5hbWUoKSkpewotICAgICAgICAgICAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgICAgICAgICAgIEphdmFQYXJhbWV0ZXIgamF2YVBhcmFtW10gPSBtZXRob2QyLmxpc3RQYXJhbWV0ZXJzV2l0aG91dFJldHVybigpOwotICAgICAgICAgICAgICBpZiAoamF2YVBhcmFtLmxlbmd0aCA+IDApewotICAgICAgICAgICAgICAgIC8vdGhlbiB3ZSBoYXZlIG5vIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgICAgICAgICAgICAgICBmVW5zdXBwb3J0ZWRQYXJhbWV0ZXJOYW1lID0gcGFyYW0uZ2V0TmFtZSgpOyAKLSAgICAJICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgICAgICB9ICAgIAotICAgICAgICAgICAgICBlbHNlIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgcmV0dXJuIG9rOwotICB9Ci0KLSAKLQotCi0KLQotCi0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZjU0MWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZlR5cGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5QYXJhbWV0ZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgcGFyYW1ldGVyRWxlbWVudCB1c2luZyB0aGUgCi0qIEphdmFDbGFzcyBhbmQgdGhlIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeQotKiBJdCB3aWxsIGFsc28gYXV0b21hdGljYWxseSB3YWxrIHRvIGl0cyB0eXBlCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gCi17Ci0KLQotICAvKgotICAqQ29uc3RydWN0b3IKLSAgKiovCi0gIHB1YmxpYyBKYXZhTW9mUGFyYW1ldGVyVmlzaXRvckFjdGlvbihFbGVtZW50IHBhcmVudEVsZW1lbnQsU3RyaW5nIHByb2plY3QsIElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgICBzdXBlcihwYXJlbnRFbGVtZW50LHByb2plY3QsIGVudik7Ci0gIH0KLSAgIAotICAvKioKLSAgKiBDcmVhdGUgYSBwYXJhbWV0ZXIgZWxlbWVudCBmcm9tIHRoZSBtZXRob2QgCi0gICogQHBhcmFtIEphdmFQYXJhbWV0ZXIgdGhlIG1vZiBlbGVtZW50IHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBQYXJhbWV0ZXIKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgaWphdmFQYXJhbWV0ZXIpCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCUNob2ljZSBPS0Nob2ljZSA9IG5ldyBDaG9pY2UoJ08nLENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfT0ssIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fT0spOwotICAJQ2hvaWNlIENhbmNlbENob2ljZSA9IG5ldyBDaG9pY2UoJ0MnLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX0NBTkNFTCwgQ29uc3VtcHRpb25NZXNzYWdlcy5ERVNDUklQVElPTl9DQU5DRUwpOwotICAJCi0gICAgUGFyYW1ldGVyRWxlbWVudCBwYXJhbWV0ZXJFbGVtZW50ID0gKFBhcmFtZXRlckVsZW1lbnQpQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQoaWphdmFQYXJhbWV0ZXIsZlBhcmVudEVsZW1lbnQpOwotICAgIEphdmFNb2ZUeXBlVmlzaXRvckFjdGlvbiB0eXBlVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24ocGFyYW1ldGVyRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAvL3R5cGVWaXNpdG9yQWN0aW9uLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShwYXJhbWV0ZXJFbGVtZW50LmlzUmV0dXJuKCkpOwotICAgIEphdmFNb2ZUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3IoZW52Xyk7Ci0gICAgdHlwZVZpc2l0b3Iuc2V0Q2xpZW50UHJvamVjdChnZXRQcm9qZWN0KCkpOwotICAgIHN0YXR1cyA9IHR5cGVWaXNpdG9yLnJ1bihpamF2YVBhcmFtZXRlcix0eXBlVmlzaXRvckFjdGlvbik7Ci0gICAgLy8KLSAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsgCi0gICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgCXJldHVybiBzdGF0dXM7Ci0gICAgCi0gICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICB7Ci0gICAgICBDaG9pY2UgcmVzdWx0ID0gZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgewotICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICB9Ci0gICAgICAJCi0gICAgfQotICAgIC8vICAgICAgICAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZUeXBlVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY5OGZiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZUeXBlVmlzaXRvckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTAgICAxODA5NTIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNhbXBsZSBKU1AgZ2VuZXJhdG9yIGNob2tlcyBvbiBpbnRlcmZhY2VzIGFuZCBhYnN0cmFjdCBjbGFzc2VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhVmlzaWJpbGl0eUtpbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9ycy5KYXZhTW9mQmVhblZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLgotKiBUaGlzIFZpc2l0b3JBY3Rpb24gd2lsbCBjcmVhdGUgYSBUeXBlRWxlbWVudCB1c2luZyB0aGUKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgYSBjb21wbGV4IHR5cGUKLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24KLXsKLQotICAvKgotICAqQ29uc3RydWN0b3IKLSAgKiovCi0gIHB1YmxpYyBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24oRWxlbWVudCBwYXJlbnRFbGVtZW50LFN0cmluZyBwcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgc3VwZXIocGFyZW50RWxlbWVudCxwcm9qZWN0LCBlbnYpOwotICB9Ci0KLSAgLyoqCi0gICogQ3JlYXRlIGEgdHlwZSBlbGVtZW50IGZyb20gdGhlIEphdmFIZWxwZXIKLSAgKiBAcGFyYW0gSmF2YUhlbHBlciB0aGUgbW9mIGVsZW1lbnQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIFR5cGUKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgdHlwZU5hdmlnYXRvcikKLSAgewotICAJIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgIAkgQ2hvaWNlIE9LQ2hvaWNlID0gbmV3IENob2ljZSgnTycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfT0ssIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fT0spOwotICAJIENob2ljZSBDYW5jZWxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9DQU5DRUwsIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fQ0FOQ0VMKTsgIAkgCi0KLSAgICAgLy9pZiBiZWFuCi0JIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBudWxsOwotCSBpZih0eXBlTmF2aWdhdG9yIGluc3RhbmNlb2YgSmF2YUNsYXNzKXsKLQkgICAgamF2YUNsYXNzID0gKEphdmFDbGFzcyl0eXBlTmF2aWdhdG9yOwotCSB9Ci0KLQotICAgICAvKiBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcmV0dXJuIHBhcmFtZXRlciB0aGVuIHdlIG5lZWQgdG8gdHJlYXQgdGhpcyBkaWZmZXJlbnRseSB0aGVuIGlmIGl0IGlzIGFuIGlucHV0IAotICAgICAqICBwYXJhbWV0ZXIuCi0gICAgICogIFdlIG5lZWQgdG8gZmlyc3Qgc2VlIGlmIGl0IGlzIGEgc3BlY2lhbCBjYXNlIGZvciByZXR1cm4gdHlwZXMgaWYgbm90IHdlIHRyZWF0IGl0IHRoZSBzYW1lIGFzIGV2ZXJ5dGhpbmcKLSAgICAgKiAgZWxzZS4KLSAgICAgKi8KLSAgICAgaWYoZ2V0UmV0dXJuUGFyYW0oKSAmJiBUeXBlRmFjdG9yeS5pc1JlY29nbml6ZWRSZXR1cm5UeXBlKChKYXZhSGVscGVycyl0eXBlTmF2aWdhdG9yKSkKLSAgICAgewotICAgICAgIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KHR5cGVOYXZpZ2F0b3IsZlBhcmVudEVsZW1lbnQpOwotICAgICB9CQotICAgICBlbHNlewotCSAgICBpZihUeXBlRmFjdG9yeS5pc1VuU3VwcG9ydGVkVHlwZSgoSmF2YUhlbHBlcnMpdHlwZU5hdmlnYXRvcikpewotCSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1RZUEUgKyAoKEphdmFIZWxwZXJzKXR5cGVOYXZpZ2F0b3IpLmdldEphdmFOYW1lKCkgKTsJICAgIAkKLQkgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMoIG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgICAgICAgICAvL0NvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1RZUEUgKyAoKEphdmFIZWxwZXJzKXR5cGVOYXZpZ2F0b3IpLmdldEphdmFOYW1lKCksbnVsbCkpOwotCSAgICAgIHJldHVybiBzdGF0dXM7Ci0JICAgIH0JCi0JICAgIAotCSAgICAvL2lmIGphdmFjbGFzcyBpcyBudWxsIHRoZW4gd2UgaGF2ZSBhIHNpbXBsZSB0eXBlIAotCSAgICBpZigoamF2YUNsYXNzID09IG51bGwpIHx8IFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGphdmFDbGFzcy5nZXRKYXZhTmFtZSgpKSkKLSAgICAgIHsKLQkgICAgICBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudCh0eXBlTmF2aWdhdG9yLGZQYXJlbnRFbGVtZW50KTsKLQkgICAgfQotCSAgICBlbHNlIGlmIChqYXZhQ2xhc3MgIT0gbnVsbCAmJiAhZ2V0UmV0dXJuUGFyYW0oKSAmJgotCQkJCS8vIHRoZSBmb2xsb3dpbmcgY2FzZXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBmb3IgaW5wdXQKLQkJCQkoamF2YUNsYXNzLmlzSW50ZXJmYWNlKCkgfHwgamF2YUNsYXNzLmlzQWJzdHJhY3QoKSB8fCAhaGFzRGVmYXVsdENvbnN0cnVjdG9yKGphdmFDbGFzcykpKSB7Ci0JICAgIAkKLQkgICAgCUVsZW1lbnQgZWxlbWVudCA9IEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KHR5cGVOYXZpZ2F0b3IsZlBhcmVudEVsZW1lbnQpOwotCSAgICAJZWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFR5cGVFbGVtZW50Lk5PTl9JTlNUQU5USUFCTEUsIEJvb2xlYW4uVFJVRSk7Ci0JICAgIH0KLQkgICAgZWxzZXsKLQkgICAgICBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gYmVhblZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKGZQYXJlbnRFbGVtZW50LGNsaWVudFByb2plY3QsIGVudl8pOwotCSAgICAgIGJlYW5WaXNpdG9yQWN0aW9uLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLQkgICAgICBiZWFuVmlzaXRvckFjdGlvbi5zZXRCZWFuc0NyZWF0ZWQoZ2V0QmVhbnNDcmVhdGVkKCkpOwotICAgICAgICAgIGJlYW5WaXNpdG9yQWN0aW9uLnNldFJldHVyblBhcmFtKGdldFJldHVyblBhcmFtKCkpOwotCQkgIEphdmFNb2ZCZWFuVmlzaXRvciBiZWFuVmlzaXRvciA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3IoKTsKLQkgICAgICBzdGF0dXMgPSBiZWFuVmlzaXRvci5ydW4oamF2YUNsYXNzLGJlYW5WaXNpdG9yQWN0aW9uKTsKLQkgICAgfQotICAgICB9Ci0gICAgIAotICAgICAvLwotICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsgCi0gICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgCi0gICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgIHsKLSAgICAgICBDaG9pY2UgcmVzdWx0ID0gZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgICB7Ci0gICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgIH0KLSAgICAgICAJCi0gICAgIH0KLSAgICAgLy8KLSAgICAgcmV0dXJuIHN0YXR1czsKLSAgIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBqYXZhQ2xhc3MgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGphdmFDbGFzcyBUaGUgamF2YSBjbGFzcwotICAgKiBAcmV0dXJuIHRydWUgaWYgamF2YUNsYXNzIGhhcyBhIGRlZmF1bHQgY29uc3RydWN0b3IsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0RlZmF1bHRDb25zdHJ1Y3RvcihKYXZhQ2xhc3MgamF2YUNsYXNzKSB7Ci0JICAgCi0JICBMaXN0IG1ldGhvZHMgPSBqYXZhQ2xhc3MuZ2V0TWV0aG9kcygpOwotCSAgSXRlcmF0b3IgaXRlciA9IG1ldGhvZHMuaXRlcmF0b3IoKTsKLQkgICAKLQkgIGJvb2xlYW4gZm91bmRDb25zdHJ1Y3RvciA9IGZhbHNlOwotCSAgIAotCSAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCSAgTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpIGl0ZXIubmV4dCgpOwotCQkgICAKLQkJICBpZiAobWV0aG9kLmdldE5hbWUoKS5lcXVhbHMoamF2YUNsYXNzLmdldE5hbWUoKSkpIHsKLQkJCSAgaWYgKG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKS5sZW5ndGggPT0gMCkKLQkJCQkgIHJldHVybiBtZXRob2QuZ2V0SmF2YVZpc2liaWxpdHkoKS5nZXRWYWx1ZSgpID09IEphdmFWaXNpYmlsaXR5S2luZC5QVUJMSUM7Ci0JCQkgIGZvdW5kQ29uc3RydWN0b3IgPSB0cnVlOwotCQkgIH0KLQkgIH0KLQkgICAKLQkgIC8vIGlmIG5vIGNvbnN0cnVjdG9yIGlzIGZvdW5kIGF0IHRoaXMgcG9pbnQsIGEgZGVmYXVsdCBvbmUgaXMgaW1wbGljaXRseSBwcm92aWRlZAotCSAgcmV0dXJuICFmb3VuZENvbnN0cnVjdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL1Zpc2l0b3JBY3Rpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL1Zpc2l0b3JBY3Rpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNGEyZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9WaXNpdG9yQWN0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFZpc2l0b3JBY3Rpb24uCi0qIEl0IHdpbGwgYXV0b21hdGljYWxseSB3YWxrIHRoZSBtZXRob2RzIGluIHRoZSBKYXZhQ2xhc3MKLSogKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBWaXNpdG9yQWN0aW9uSW1wbCBpbXBsZW1lbnRzIFZpc2l0b3JBY3Rpb24gCi17Ci0KLSAgcHJpdmF0ZSBWZWN0b3IgYmVhbnNWaXNpdGVkID0gbnVsbDsKLSAgcHJpdmF0ZSBWZWN0b3IgbWVzc2FnZXMgPSBudWxsOwotCi0gIHB1YmxpYyBWaXNpdG9yQWN0aW9uSW1wbCggVmVjdG9yIG1lc3NhZ2VzLCBWZWN0b3IgYmVhbnNWaXNpdGVkKQotICAJewotICAJIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlczsKLSAgCSB0aGlzLmJlYW5zVmlzaXRlZCA9IGJlYW5zVmlzaXRlZDsKLSAgCX0KLSAgCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoU3RyaW5nIHJlc2lkZW50KQotICB7Ci0gICAgLy9ub3RoaW5nIHRvIGJlIGRvbmUgYnV0IG11c3QgYmUgaW1wbGVtZW50ZWQKLSAgfQotCi0gLyoqCi0gICogUmV0dXJucyB0aGUgdmVjdG9yIG9mIGFsbCBtZXNzYWdlcyBmb3VuZAotICAqLwotICBwdWJsaWMgVmVjdG9yIGdldE1lc3NhZ2VzICgpCi0gIHsKLSAgCWlmIChtZXNzYWdlcyA9PSBudWxsKSAKLSAgCQltZXNzYWdlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICByZXR1cm4gbWVzc2FnZXM7Ci0gIH0KLQotICBwdWJsaWMgVmVjdG9yIGdldEJlYW5zVmlzaXRlZCgpCi0gIAl7Ci0JCWlmICggYmVhbnNWaXNpdGVkID09IG51bGwpCi0gIAkJCWJlYW5zVmlzaXRlZCA9IG5ldyBWZWN0b3IoKTsgCi0gICAgICAgIHJldHVybiBiZWFuc1Zpc2l0ZWQ7Ci0gICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkVmlzaXRlZEJlYW4oIEphdmFDbGFzcyBiZWFuKQotICAJewotICAJCWlmICggYmVhbnNWaXNpdGVkID09IG51bGwpCi0gIAkJCWJlYW5zVmlzaXRlZCA9IG5ldyBWZWN0b3IoKTsKLSAgCQliZWFuc1Zpc2l0ZWQuYWRkKGJlYW4pOwotICAJfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQmVhblZpc2l0ZWQgKEphdmFDbGFzcyBiZWFuKQotICAJewotICAJCXJldHVybiAoYmVhbnNWaXNpdGVkICE9IG51bGwgJiYgYmVhbnNWaXNpdGVkLmNvbnRhaW5zKGJlYW4pKTsKLSAgCX0KLQotICAvKioKLSAgKiBzZXRzIHRoZSB2aXNpdG9yIHRoYXQgY2FsbHMgdGhlIHZpc2l0Ci0gICogQHBhcmFtZXRlciBWaXNpdG9yCi0gICovCi0KLSAgcHVibGljIHZvaWQgc2V0VmlzaXRvcihWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZE1lc3NhZ2UgKCBTdHJpbmcga2V5ICkKLSAgewotICAgIGdldE1lc3NhZ2VzKCkuYWRkKGtleSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRNZXNzYWdlICggU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncyApCi0gIHsKLSAgICBnZXRNZXNzYWdlcygpLmFkZChOTFMuYmluZChrZXksYXJncykpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE0NjhiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5GaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5KYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb21tb24uU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdmlzaXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mQXR0cmlidXRlVmlzaXRvciBpbXBsZW1lbnRzIFZpc2l0b3IgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0OwotICBwcml2YXRlIGJvb2xlYW4gcmV0dXJuUGFyYW1ldGVyOwotICBwcml2YXRlIElFbnZpcm9ubWVudCBlbnY7Ci0gIAotICAKLSAgcHVibGljIHZvaWQgc2V0RW52aXJvbm1lbnQoSUVudmlyb25tZW50IGVudikKLSAgewotICAJdGhpcy5lbnYgPSBlbnY7Ci0gIH0KLSAgCi0gIC8qCi0gICogVXNlIHRoaXMgdG8gcmVmbGVjdCAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLQotICAgLyoKLSAgKiBVc2UgdGhpcyB0byByZWZsZWN0IAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudFByb2plY3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZXR1cm5QYXJhbWV0ZXIoYm9vbGVhbiByZXR1cm5QYXJhbWV0ZXIpCi0gIHsKLSAgICB0aGlzLnJldHVyblBhcmFtZXRlciA9IHJldHVyblBhcmFtZXRlcjsKLSAgfQotIAotICAKLSAgLyoKLSAgKiBHZXQgdGhlIGF0dHJpYnV0ZSBiZWxvbmdpbmcgdG8gdGhpcyBjb21wbGV4IHR5cGUgCi0gICogQHBhcmFtIEphdmFQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciB0aGF0IG93bnMgdGhlIHR5cGUKLSAgKiBAcGFyYW0gVmlzaXRvckFjdGlvbiBBY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGVhY2ggbWV0aG9kCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyBydW4gKCBPYmplY3QgamF2YWNsYXNzLCBWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gKEphdmFDbGFzcylqYXZhY2xhc3M7ICAgICAKLQotICAgIEhhc2h0YWJsZSBzcGRNYXAgPSBuZXcgSGFzaHRhYmxlKCk7ICAKLSAgICBmb3IgKEl0ZXJhdG9yIG09amF2YUNsYXNzLmdldFB1YmxpY01ldGhvZHMoKS5pdGVyYXRvcigpOyBtLmhhc05leHQoKTsgKSB7Ci0gICAgICBNZXRob2QgbWV0aG9kPShNZXRob2QpbS5uZXh0KCk7Ci0gICAgICBpZiAoKChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoImdldCIpIAotICAgICAgCXx8IG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkuc3RhcnRzV2l0aCgiaXMiKSkgCi0gICAgICAgICYmIG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKS5sZW5ndGggPT0gMCApCi0gICAgICAgIHx8IChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoInNldCIpIAotICAgICAgICAmJiBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCkubGVuZ3RoID4gMCkpIHsKLSAgICAgICAgaW50IHN1YiA9IDM7Ci0gICAgICAgIGlmKG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkuc3RhcnRzV2l0aCgiaXMiKSkKLSAgICAgICAgICBzdWIgPSAyOwkKLSAgICAgICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkuc3Vic3RyaW5nKHN1Yik7ICAgIAotICAgICAgICBTdHJpbmcgbG93ZXIgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsMSkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgU3RyaW5nIHJlbWFpbmRlciA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMSk7IAotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBsb3dlciArIHJlbWFpbmRlcjsKLSAgICAgICAgaW50IGluZGV4ID0gcHJvcGVydHlOYW1lLmxhc3RJbmRleE9mKCIoIik7Ci0gICAgICAgIFN0cmluZyB0ZW1wID0gcHJvcGVydHlOYW1lOwotICAgICAgICBwcm9wZXJ0eU5hbWUgPSB0ZW1wLnN1YnN0cmluZygwLGluZGV4KTsgCi0gICAgICAgIAotICAgICAgICAvL2ZpbmQgdGhlIHByb3BlcnR5ZGVzY3JpcHRvcgotICAgICAgICBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Igc3BkID0gKFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcilzcGRNYXAuZ2V0KHByb3BlcnR5TmFtZSk7IAotICAgICAgICBpZihzcGQgPT0gbnVsbCl7Ci0gICAgICAgICAgc3BkID0gbmV3IFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcihwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgIHNwZE1hcC5wdXQocHJvcGVydHlOYW1lLHNwZCk7IAotICAgICAgICB9Ci0gICAgICAgIGlmKG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkuc3RhcnRzV2l0aCgic2V0IikpCi0gICAgICAgICAgc3BkLnNldFdyaXRlTWV0aG9kKG1ldGhvZCk7Ci0gICAgICAgIGVsc2UgCi0gICAgICAgICAgc3BkLnNldFJlYWRNZXRob2QobWV0aG9kKTsKLQotICAgICAgICBGaWVsZCBmaWVsZCA9IGphdmFDbGFzcy5nZXRGaWVsZE5hbWVkKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEphdmFIZWxwZXJzIHByb3BlcnR5VHlwZSA9IG51bGw7IAotICAgICAgICBpZihmaWVsZCAhPSBudWxsKXsKLSAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSAoSmF2YUhlbHBlcnMpZmllbGQuZ2V0RVR5cGUoKTsKLSAgICAgICAgICBzcGQuc2V0ZlN0YXRpYyhmaWVsZC5pc1N0YXRpYygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgIGlmKG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkuc3RhcnRzV2l0aCgiZ2V0IikgfHwgbWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKS5zdGFydHNXaXRoKCJpcyIpKQotICAgICAgICAgIAlwcm9wZXJ0eVR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotICAgICAgICAgIGVsc2V7Ci0gICAgICAgICAgICAgSmF2YVBhcmFtZXRlciBwYXJhbXNbXSA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsgCi0gICAgICAgICAgICAgcHJvcGVydHlUeXBlID0gcGFyYW1zWzBdLmdldEphdmFUeXBlKCk7Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0KLSAgICAgICAgICAJCi0gICAgICAgIHNwZC5zZXRQcm9wZXJ0eVR5cGUocHJvcGVydHlUeXBlKTsgCi0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICBFbnVtZXJhdGlvbiBzcGRFbnVtID0gc3BkTWFwLmVsZW1lbnRzKCk7Ci0gICAgd2hpbGUoc3BkRW51bS5oYXNNb3JlRWxlbWVudHMoKSl7Ci0gICAgICBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Igc3BkID0gKFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcilzcGRFbnVtLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZihzcGRDaGVjayhzcGQpKQotICAgICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KHNwZCk7ICAgCi0gICAgfSAKLSAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHNwZENoZWNrKFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvciBzcGQpCi0gIHsgIAotICAgIC8vY2hlY2sgZm9yIGluZGV4ZWQgcHJvcGVydGllcwotICAJTWV0aG9kIHdyaXRlTWV0aG9kID0gc3BkLmdldFdyaXRlTWV0aG9kKCk7Ci0gIAlpZih3cml0ZU1ldGhvZCAhPSBudWxsKQotICAJICBpZih3cml0ZU1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKS5sZW5ndGggPiAxKSByZXR1cm4gZmFsc2U7Ci0gIAkKLSAgCWlmKHNwZC5nZXRQcm9wZXJ0eVR5cGUoKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgaWYoc3BkLmdldFByb3BlcnR5VHlwZSgpLmlzUHJpbWl0aXZlKCkpIHJldHVybiB0cnVlOwotICAgIGlmKHJldHVyblBhcmFtZXRlciAmJiBUeXBlRmFjdG9yeS5pc1JlY29nbml6ZWRSZXR1cm5UeXBlKHNwZC5nZXRQcm9wZXJ0eVR5cGUoKSkpIHJldHVybiB0cnVlOwotICAgIGlmKCFyZXR1cm5QYXJhbWV0ZXIgJiYgVHlwZUZhY3RvcnkuaXNVblN1cHBvcnRlZFR5cGUoc3BkLmdldFByb3BlcnR5VHlwZSgpKSkgcmV0dXJuIHRydWU7Ci0gICAgaWYoIWNoZWNrUG9sYXJpdHkoc3BkKSkgcmV0dXJuIGZhbHNlOyAgIAotICAgICAgIAotICAgIC8vIHNvIGl0cyBhIGJlYW4gbWFrZSBzdXJlIGl0IGhhcyBhIGRlZmF1bHQgY29uc3RydWN0b3IgICAgICAgCi0gICAgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIGphdmFNb2ZSZWYgPSBuZXcgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kKCk7Ci0gICAgamF2YU1vZlJlZi5zZXRDbGllbnRQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0gICAgamF2YU1vZlJlZi5zZXRQcm94eUJlYW4oKChKYXZhSGVscGVycylzcGQuZ2V0UHJvcGVydHlUeXBlKCkpLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgamF2YU1vZlJlZi5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgamF2YU1vZlJlZi5leGVjdXRlKG51bGwsIG51bGwpOwotICAgIGlmKGphdmFNb2ZSZWYuZ2V0SmF2YUNsYXNzKCkgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpewotICAgICAgIGlmKFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGphdmFNb2ZSZWYuZ2V0SmF2YUNsYXNzKCkuZ2V0SmF2YU5hbWUoKSkpIHJldHVybiB0cnVlOwotICAgICAgIHJldHVybiBkZWZhdWx0Q2hlY2soKEphdmFDbGFzcylqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpKTsKLSAgICAgICAgICAgICAgIAotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjaGVja1BvbGFyaXR5KFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvciBzcGQpewotICAgIAotICAJTWV0aG9kIHJlYWRNZXRob2QgPSBzcGQuZ2V0UmVhZE1ldGhvZCgpOwotICAJTWV0aG9kIHdyaXRlTWV0aG9kID0gc3BkLmdldFdyaXRlTWV0aG9kKCk7Ci0gIAlpZigocmVhZE1ldGhvZCA9PSBudWxsICYmIHdyaXRlTWV0aG9kICE9IG51bGwpIHx8IChyZWFkTWV0aG9kICE9IG51bGwgJiYgd3JpdGVNZXRob2QgPT0gbnVsbCkpCi0gIAkgIHJldHVybiB0cnVlOwkKLSAgCWlmKHJlYWRNZXRob2QgPT0gbnVsbCAmJiB3cml0ZU1ldGhvZCA9PSBudWxsKQotICAJICByZXR1cm4gZmFsc2U7CQotICAJICAJCi0gIAlKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IHdyaXRlTWV0aG9kLmxpc3RQYXJhbWV0ZXJzV2l0aG91dFJldHVybigpOwotICAgIGZvcihpbnQgaSA9IDA7aTwgamF2YVBhcmFtZXRlci5sZW5ndGg7aSsrKXsKLSAgICAgIEphdmFQYXJhbWV0ZXIganAgPSBqYXZhUGFyYW1ldGVyW2ldOyAJCi0gICAgICBqcC5nZXRKYXZhVHlwZSgpLmdldEphdmFOYW1lKCk7Ci0gICAgICByZWFkTWV0aG9kLmdldFJldHVyblR5cGUoKS5nZXRKYXZhTmFtZSgpOwotICAgICAgaWYoanAuZ2V0SmF2YVR5cGUoKS5nZXRKYXZhTmFtZSgpLmVxdWFscyhyZWFkTWV0aG9kLmdldFJldHVyblR5cGUoKS5nZXRKYXZhTmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IAotICAgIH0KLSAgCXJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGRlZmF1bHRDaGVjayhKYXZhQ2xhc3MgamF2YUNsYXNzKXsKLSAgICAKLSAgICAgICBJdGVyYXRvciBtPWphdmFDbGFzcy5nZXRNZXRob2RzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgLy9ub3cgY2hlY2sgZm9yIGEgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgICBib29sZWFuIGRlZmF1bHRDb25zdCA9IHRydWU7Ci0gICAgICAgIHdoaWxlIChtLmhhc05leHQoKSkgewotICAgICAgICAgIE1ldGhvZCBtZXRob2Q9KE1ldGhvZCltLm5leHQoKTsKLSAgICAgICAgICBpZiAoamF2YUNsYXNzLmdldE5hbWUoKS5lcXVhbHMobWV0aG9kLmdldE5hbWUoKSkpewotICAgICAgICAgICAgICAgIC8vbm93IHRoZSBpbnB1dHMKLSAgICAgICAgICAgICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICAgICAgICAgICAgICBpZiAoamF2YVBhcmFtZXRlci5sZW5ndGggPiAwKXsKLSAgICAgICAgICAgICAgICAgICAgICAvL3RoZW4gd2UgaGF2ZSBubyBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnN0ID0gZmFsc2U7IAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmKGphdmFQYXJhbWV0ZXIubGVuZ3RoID09IDApewotICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgCi0gICAgICAgcmV0dXJuIGRlZmF1bHRDb25zdDsKLSAgfQotICAgICAgICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mQmVhblZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkJlYW5WaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2FiYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mQmVhblZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci0KLQotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdmlzaXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mQmVhblZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkJlYW5WaXNpdG9yKCkKLSAgewotICB9Ci0gCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoIE9iamVjdCBqYXZhQ2xhc3MsIFZpc2l0b3JBY3Rpb24gdkFjdGlvbikKLSAgewotICAgIHJldHVybiB2QWN0aW9uLnZpc2l0KChKYXZhQ2xhc3MpamF2YUNsYXNzKTsgICAKLSAgfQotICAgICAgICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZGaWVsZFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkZpZWxkVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjBmMGViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkZpZWxkVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVZpc2liaWxpdHlLaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZkZpZWxkVmlzaXRvciBpbXBsZW1lbnRzIFZpc2l0b3IgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0OwotCi0gIC8qCi0gICogQ29uc3RydWN0b3IKLSAgKiovCi0gIHB1YmxpYyBKYXZhTW9mRmllbGRWaXNpdG9yKCkKLSAgewotICB9Ci0KLSAgLyoKLSAgKiBVc2UgdGhpcyB0byByZWZsZWN0IAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgfQotCi0gICAvKgotICAqIFVzZSB0aGlzIHRvIHJlZmxlY3QgCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdDsKLSAgfQotCi0gIC8qCi0gICogR2V0IHRoZSBhdHRyaWJ1dGUgYmVsb25naW5nIHRvIHRoaXMgY29tcGxleCB0eXBlIAotICAqIEBwYXJhbSBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXIgdGhhdCBvd25zIHRoZSB0eXBlCi0gICogQHBhcmFtIFZpc2l0b3JBY3Rpb24gQWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBlYWNoIG1ldGhvZAotICAqKi8KLSAgcHVibGljIElTdGF0dXMgcnVuICggT2JqZWN0IGphdmFjbGFzcywgVmlzaXRvckFjdGlvbiB2QWN0aW9uKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YWNsYXNzOyAgICAgCi0KLSAgICBib29sZWFuIGhvbGRlckNsYXNzID0gZmFsc2U7Ci0gICAgRUxpc3QgaW1wbGVtZW50ZWQgPSBqYXZhQ2xhc3MuZ2V0SW1wbGVtZW50c0ludGVyZmFjZXMoKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IGltcGxlbWVudGVkLnNpemUoKTsgaSsrKSB7Ci0JICBKYXZhQ2xhc3MgYW5JbnRlcmZhY2UgPSAoSmF2YUNsYXNzKSBpbXBsZW1lbnRlZC5nZXQoaSk7Ci0JICBpZiAoYW5JbnRlcmZhY2UuZ2V0UXVhbGlmaWVkTmFtZSgpLmVxdWFscygiamF2YXgueG1sLnJwYy5ob2xkZXJzLkhvbGRlciIpKQotCSAgICBob2xkZXJDbGFzcyA9IHRydWU7Ci0JfSAgICAgIAotCi0gICAgIC8vYmVhbmluZm8gY29kZQotICAgIGlmKGhvbGRlckNsYXNzKXsgICAgIAotICAgICAgRUxpc3QgZSAgPSBqYXZhQ2xhc3MuZ2V0RmllbGRzKCk7Ci0gICAgICBMaXN0SXRlcmF0b3IgbGlzdCA9IGUubGlzdEl0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShsaXN0Lmhhc05leHQoKSl7Ci0gICAgICAgIEZpZWxkIGZpZWxkID0gKEZpZWxkKWxpc3QubmV4dCgpOyAgICAgCi0gICAgICAgIGlmKGZpZWxkLmdldEphdmFWaXNpYmlsaXR5KCkuZ2V0VmFsdWUoKSA9PSBKYXZhVmlzaWJpbGl0eUtpbmQuUFVCTElDICYmICFmaWVsZC5pc0ZpbmFsKCkgJiYgIWZpZWxkLmlzU3RhdGljKCkpewotICAgICAgICAgIGlmKGZpZWxkQ2hlY2soZmllbGQpKQotICAgICAgICAgICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdChmaWVsZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfSAgICAgICAKLSAgcHJpdmF0ZSBib29sZWFuIGZpZWxkQ2hlY2soRmllbGQgZmllbGQpCi0gIHsKLSAgICAvLyBzbyBpdHMgYSBiZWFuIG1ha2Ugc3VyZSBpdCBoYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yIAotICAgIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCBqYXZhTW9mUmVmID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOwotICAgIGphdmFNb2ZSZWYuc2V0UHJveHlCZWFuKCgoSmF2YUhlbHBlcnMpZmllbGQuZ2V0RVR5cGUoKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKLSAgICBqYXZhTW9mUmVmLnNldENsaWVudFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICBqYXZhTW9mUmVmLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0gICAgaWYoamF2YU1vZlJlZi5nZXRKYXZhQ2xhc3MoKSBpbnN0YW5jZW9mIEphdmFDbGFzcyl7Ci0gICAgICBpZihUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpLmdldEphdmFOYW1lKCkpKSByZXR1cm4gdHJ1ZTsKLSAgICAgIHJldHVybiBkZWZhdWx0Q2hlY2soKEphdmFDbGFzcylqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgICAgICAgCi0gcHJpdmF0ZSBib29sZWFuIGRlZmF1bHRDaGVjayhKYXZhQ2xhc3MgamF2YUNsYXNzKXsKLSAgICAKLSAgIEl0ZXJhdG9yIG09amF2YUNsYXNzLmdldE1ldGhvZHMoKS5pdGVyYXRvcigpOwotICAgLy9ub3cgY2hlY2sgZm9yIGEgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgYm9vbGVhbiBkZWZhdWx0Q29uc3QgPSB0cnVlOwotICAgd2hpbGUgKG0uaGFzTmV4dCgpKSB7Ci0gICAgTWV0aG9kIG1ldGhvZD0oTWV0aG9kKW0ubmV4dCgpOwotICAgIGlmIChqYXZhQ2xhc3MuZ2V0TmFtZSgpLmVxdWFscyhtZXRob2QuZ2V0TmFtZSgpKSl7Ci0gICAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICAgIGlmIChqYXZhUGFyYW1ldGVyLmxlbmd0aCA+IDApewotICAgICAgICAvL3RoZW4gd2UgaGF2ZSBubyBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgICAgIGRlZmF1bHRDb25zdCA9IGZhbHNlOyAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoamF2YVBhcmFtZXRlci5sZW5ndGggPT0gMCl7Ci0gICAgICAgIGlmIChtZXRob2QuZ2V0SmF2YVZpc2liaWxpdHkoKS5nZXRWYWx1ZSgpID09IDApCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UgaWYobWV0aG9kLmdldEphdmFWaXNpYmlsaXR5KCkuZ2V0VmFsdWUoKSA9PSAxKSAKLSAgICAgICAgICBkZWZhdWx0Q29uc3QgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgICAKLSAgcmV0dXJuIGRlZmF1bHRDb25zdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mTWV0aG9kVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mTWV0aG9kVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjFlMDM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZk1ldGhvZFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5Cb29sZWFuU2VsZWN0aW9uOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdmlzaXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mTWV0aG9kVmlzaXRvciBpbXBsZW1lbnRzIFZpc2l0b3IgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIHB1YmxpYyBTdHJpbmcgU0VUX0VORFBPSU5UID0gInNldEVuZFBvaW50IjsKLSAgcHVibGljIFN0cmluZyBHRVRfRU5EUE9JTlQgPSAiZ2V0RW5kUG9pbnQiOwotICBwcml2YXRlIEJvb2xlYW5TZWxlY3Rpb25bXSBmTWV0aG9kc1NlbGVjdGVkOwotCi0KLSAgLyoKLSAgKiBDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZNZXRob2RWaXNpdG9yKCkKLSAgewotICB9Ci0gCi0gIHB1YmxpYyBTdHJpbmcgVU5ERVJfU0NPUkUgPSAiXyI7Ci0KLSAgLyoKLSAgKiBSdW4gdGhyb3VnaCBhbGwgdGhlIG1ldGhvZHMgaW4gdGhpcyBiZWFuCi0gICogQHBhcmFtIEphdmFDbGFzcyBqYXZhY2xhc3MgdGhhdCBob2xkcyB0aGUgbWV0aG9kcwotICAqIEBwYXJhbSBWaXNpdG9yQWN0aW9uIEFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZWFjaCBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoIE9iamVjdCBqYXZhY2xhc3MsIFZpc2l0b3JBY3Rpb24gdkFjdGlvbikKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSAoSmF2YUNsYXNzKWphdmFjbGFzczsKLSAgICBmb3IgKEl0ZXJhdG9yIG09amF2YUNsYXNzLmdldFB1YmxpY01ldGhvZHMoKS5pdGVyYXRvcigpOyBtLmhhc05leHQoKTsgKSB7Ci0gICAgICBNZXRob2QgbWV0aG9kPShNZXRob2QpbS5uZXh0KCk7Ci0gICAgICBpZihmTWV0aG9kc1NlbGVjdGVkICE9IG51bGwpICB7Ci0gICAgICAgIGJvb2xlYW4gbWV0aG9kU2VsZWN0ZWQgPSBmYWxzZTsKLSAgICAgIAlmb3IoaW50IGkgPTA7aSA8IGZNZXRob2RzU2VsZWN0ZWQubGVuZ3RoO2krKyl7Ci0gICAgICAgICAgaWYoZk1ldGhvZHNTZWxlY3RlZFtpXSA9PSBudWxsKSBjb250aW51ZTsKLSAgICAgICAgICBpZiAoIGZNZXRob2RzU2VsZWN0ZWRbaV0uZ2V0VmFsdWUoKS5lcXVhbHMobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSkpCi0gICAgICAgICAgICBtZXRob2RTZWxlY3RlZCA9IChib29sZWFuKSBmTWV0aG9kc1NlbGVjdGVkW2ldLmlzU2VsZWN0ZWQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbWV0aG9kLmdldE5hbWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKG1ldGhvZFNlbGVjdGVkKQotICAgICAgICAgIHN0YXR1cyA9IHZBY3Rpb24udmlzaXQobWV0aG9kKTsgIAotICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KG1ldGhvZCk7ICAgCi0gICAgICB9Ci0KLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZFNlbGVjdGlvbihCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kU2VsZWN0ZWQpCi0gIHsKLSAgICBmTWV0aG9kc1NlbGVjdGVkID0gbWV0aG9kU2VsZWN0ZWQ7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OTA0YjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdmlzaXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mUGFyYW1ldGVyVmlzaXRvciBpbXBsZW1lbnRzIFZpc2l0b3IgCi17Ci0gIHByaXZhdGUgSUVudmlyb25tZW50IGVudl87Ci0KLSAgLyoKLSAgKiBDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yKElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgCWVudl8gPSBlbnY7Ci0gIH0KLSAgCi0gIC8qCi0gICogUnVuIHRocm91Z2ggYWxsIHRoZSBwYXJhbWV0ZXJzIGluIHRoaXMgbWV0aG9kCi0gICogQHBhcmFtIEphdmFDbGFzcyBqYXZhY2xhc3MgdGhhdCBob2xkcyB0aGUgcGFyYW1ldGVycwotICAqIEBwYXJhbSBWaXNpdG9yQWN0aW9uIEFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZWFjaCBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoIE9iamVjdCBpbWV0aG9kLCBWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCUNob2ljZSBPS0Nob2ljZSA9IG5ldyBDaG9pY2UoJ08nLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX09LLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX09LKTsKLSAgCUNob2ljZSBDYW5jZWxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9DQU5DRUwsIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fQ0FOQ0VMKTsgIAkKLSAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClpbWV0aG9kOwotICAgCi0gICAgSmF2YUhlbHBlcnMgamF2YVJldHVyblBhcmFtZXRlciA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0gICAgLy9wZ20gVGhpcyB2aXNpdG9yIHVzZWQgdG8gdGFrZSBhIEphdmFQYXJhbWV0ZXIgdHlwZSBhbmQgbm93IGl0IGlzIGJlaW5nIGNhbGxlZAotICAgIC8vICAgIHdpdGggYSBKYXZhSGVscGVycyB0eXBlLiAgR2lsLCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhpcyBpcyBPay4KLSAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KGphdmFSZXR1cm5QYXJhbWV0ZXIpOwotICAgIC8vCi0gICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgIAlyZXR1cm4gc3RhdHVzOwotICAgIAotICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgewotICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgIHsKLSAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgfQotICAgICAgCQotICAgIH0KLSAgICAvLyAgICAgICAgICAgCi0KLSAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgTGlzdCBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlcnMoKTsgCi0gICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpbmRleCsrKSAKLSAgICB7Ci0gICAgICBKYXZhUGFyYW1ldGVyIHBhcmFtPShKYXZhUGFyYW1ldGVyKXBhcmFtZXRlcnMuZ2V0KGluZGV4KTsKLSAgICAgIHN0YXR1cyA9IHZBY3Rpb24udmlzaXQocGFyYW0pOwotICAgICAgLy8KLSAgICAgIHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgIHsKLSAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICB7Ci0gICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICAgIH0KLSAgICAgICAgCQotICAgICAgfQotICAgICAgLy8gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgfQotICAKLSAgICAgICAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mVHlwZVZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZlR5cGVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOGZjODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mVHlwZVZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5GaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbW9uLlNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdmlzaXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mVHlwZVZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgSUVudmlyb25tZW50IGVudl87Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLQotICAvKgotICAqIENvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZlR5cGVWaXNpdG9yKElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgCWVudl8gPSBlbnY7Ci0gIH0KLQotICAgLyoKLSAgKiBVc2UgdGhpcyB0byByZWZsZWN0IAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgfQotCi0gICAvKgotICAqIFVzZSB0aGlzIHRvIHJlZmxlY3QgCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdDsKLSAgfQotICAKLSAgLyoKLSAgKiBHZXQgdGhlIHR5cGUgYmVsb25naW5nIHRvIHRoZSBwYXJhbWV0ZXIKLSAgKiBAcGFyYW0gSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyIHRoYXQgb3ducyB0aGUgdHlwZQotICAqIEBwYXJhbSBWaXNpdG9yQWN0aW9uIEFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZWFjaCBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoIE9iamVjdCB0eXBlTmF2aWdhdG9yLCBWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpZiAodHlwZU5hdmlnYXRvciBpbnN0YW5jZW9mIEphdmFQYXJhbWV0ZXIpewotCi0gICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXIgPSAoSmF2YVBhcmFtZXRlcil0eXBlTmF2aWdhdG9yOwotICAgICAgSmF2YUhlbHBlcnMgamF2YUhlbHBlcnMgPSBqYXZhUGFyYW1ldGVyLmdldEphdmFUeXBlKCk7Ci0gICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KGphdmFIZWxwZXJzKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZU5hdmlnYXRvciBpbnN0YW5jZW9mIEphdmFIZWxwZXJzKXsKLSAgICAJc3RhdHVzID0gdkFjdGlvbi52aXNpdCh0eXBlTmF2aWdhdG9yKTsJCi0gICAgfQotICAgIGVsc2UgaWYgKHR5cGVOYXZpZ2F0b3IgaW5zdGFuY2VvZiBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IpewotICAgICAgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gKFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcil0eXBlTmF2aWdhdG9yOwotICAgICAgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIGphdmFNb2ZSZWYgPSBuZXcgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kKCk7Ci0gICAgICBqYXZhTW9mUmVmLnNldENsaWVudFByb2plY3QoY2xpZW50UHJvamVjdCk7Ci0gICAgICBqYXZhTW9mUmVmLnNldFByb3h5QmVhbigoKEphdmFIZWxwZXJzKXBkLmdldFByb3BlcnR5VHlwZSgpKS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgamF2YU1vZlJlZi5zZXRFbnZpcm9ubWVudCggZW52XyApOwotICAgICAgc3RhdHVzID0gamF2YU1vZlJlZi5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLSAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgCi0gICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KGphdmFNb2ZSZWYuZ2V0SmF2YUNsYXNzKCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlTmF2aWdhdG9yIGluc3RhbmNlb2YgRmllbGQpewotICAgICAgRmllbGQgZmllbGQgPSAoRmllbGQpdHlwZU5hdmlnYXRvcjsKLSAgICAgIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCBqYXZhTW9mUmVmID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOwotICAgICAgamF2YU1vZlJlZi5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFByb2plY3QpOwotICAgICAgamF2YU1vZlJlZi5zZXRQcm94eUJlYW4oKChKYXZhSGVscGVycylmaWVsZC5nZXRFVHlwZSgpKS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgamF2YU1vZlJlZi5zZXRFbnZpcm9ubWVudCggZW52XyApOwotICAgICAKLSAgICAgIHN0YXR1cyA9IGphdmFNb2ZSZWYuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdChqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgICAgICAgCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Fic3RyYWN0U3RhcnRTZXJ2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQWJzdHJhY3RTdGFydFNlcnZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzMxMWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQWJzdHJhY3RTdGFydFNlcnZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFN0YXJ0U2VydmVyIHsKLSAKLXByb3RlY3RlZCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3I7Ci1wcml2YXRlIElMb2cgbG9nXzsKLQotcHVibGljIEFic3RyYWN0U3RhcnRTZXJ2ZXIoKQotewotCWxvZ18gPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotfQotCi0vKioKLSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAqLwotcHVibGljIHZvaWQgU3RhcnRTZXJ2ZXIgKElQcm9qZWN0IHByb2plY3QsIElTZXJ2ZXIgc2VydmVyLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIGJvb2xlYW4gcmVzdGFydCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLXsKLQl0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotCi0gICB0cnkKLSAgewotICAgCQotLy8gICAgSUphdmFTZXJ2ZXIgamF2YVNlcnZlciA9IChJSmF2YVNlcnZlcikgc2VydmVyLmdldERlbGVnYXRlKCk7Ci0vLyAgICBhZGRKYXJzVG9DbGFzc1BhdGgoamF2YVNlcnZlcik7Ci0gICAgdmFsaWRhdGVSZW1vdGVTZXJ2ZXJQYXRoKHNlcnZlcik7Ci0KLSAgICBpZiAoc2VydmVyLmdldFNlcnZlclN0YXRlKCkgIT0gSVNlcnZlci5TVEFURV9TVE9QUEVEKSAgLy8gVGhlIFNlcnZlciBpcyBydW5uaW5nCi0gICAgeyAKLSAgICAgIGlmIChzZXJ2ZXIuZ2V0U2VydmVyUmVzdGFydFN0YXRlKCkpCi0gICAgICB7ICAgIAotICAgICAgCQotICAgICAgICBzZXJ2ZXIuc3luY2hyb25vdXNTdG9wKGZhbHNlKTsKLSAgICAgICAgbG9nXy5sb2coSUxvZy5JTkZPLCA1MDUwLCB0aGlzLCAiU3RhcnRTZXJ2ZXIiLCAicHJvamVjdD0iK3Byb2plY3QrIiwgU3RvcCBjb21tYW5kIGNvbXBsZXRlZCwgcmVzdGFydCBuZWVkZWQiKTsKLSAgICAgICAgcHVibGlzaFByb2plY3Qoc2VydmVyKTsKLSAgICAJc3RhcnRQcm9qZWN0KHNlcnZlcik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJCi0gICAgICAgIGlmIChyZXN0YXJ0KSAvLyBXRUItSU5GXGxpYiBuZWVkIHRvIGJlIHJlbG9hZGVkCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaXNoUHJvamVjdChzZXJ2ZXIpOyAgICAgIAotICAgICAgICAgIHJlc3RhcnRQcm9qZWN0KHByb2plY3QsIHNlcnZlcik7Ci0gICAgICAgIH0gICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAJCi0gICAgCQlwdWJsaXNoUHJvamVjdChzZXJ2ZXIpOwotICAgIAkJc3RhcnRQcm9qZWN0KHNlcnZlcik7Ci0gICAgCX0KLX0KLQotICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotICAJdGhyb3cgY2U7Ci0gIAl9Ci0gIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCxDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsZSkpOwotICB9Ci19Ci0KLXByb3RlY3RlZCB2b2lkIHB1Ymxpc2hQcm9qZWN0KElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotewotICAgICAgbW9uaXRvci5zdWJUYXNrKCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fUFVCTElTSElOR19TRVJWRVIgKTsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gc2VydmVyLnB1Ymxpc2goSVNlcnZlci5QVUJMSVNIX0lOQ1JFTUVOVEFMLCBtb25pdG9yKTsKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBJU3RhdHVzLk9LKQotICAgICAgCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0gICAgICBsb2dfLmxvZyhJTG9nLklORk8sIDUwNTEsIHRoaXMsICJwdWJsaXNoUHJvamVjdCIsICJJU2VydmVyPSIrc2VydmVyKyIsIFB1Ymxpc2ggY29tbWFuZCBjb21wbGV0ZWQiKTsKLSB9Ci0KLXByb3RlY3RlZCB2b2lkIHN0YXJ0UHJvamVjdChJU2VydmVyIHNlcnZlcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLXsKLSAgdHJ5Ci0gIHsKLSAgICBtb25pdG9yLnN1YlRhc2soIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19TVEFSVElOR19TRVJWRVIgKTsgICAgCi0gICAgc2VydmVyLnN5bmNocm9ub3VzU3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUsIG1vbml0b3IpOwotICAgIGxvZ18ubG9nKElMb2cuSU5GTywgNTA1MiwgdGhpcywgInN0YXJ0UHJvamVjdCIsICJJU2VydmVyPSIrc2VydmVyKyIsIFN0YXJ0IGNvbW1hbmQgY29tcGxldGVkIik7Ci0gICAgCi0gIH0KLSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUixlKSk7Ci0gIH0gIAotfQotCi1wcm90ZWN0ZWQgdm9pZCByZXN0YXJ0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJU2VydmVyIHNlcnZlcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLXsKLSAgLy9EbyBub3RoaW5nCi19Ci0KLXB1YmxpYyB2b2lkIHJ1blByZVNlcnZlckNvbmZpZyhJU2VydmVyIHNlcnZlciwgSVByb2plY3QgRUFSUHJvamVjdCl7Ci0KLQlyZXR1cm47Ci0JCi19Ci0KLXB1YmxpYyB2b2lkIHJ1blBvc3RTZXJ2ZXJDb25maWcoSVNlcnZlciBzZXJ2ZXIsIElQcm9qZWN0IEVBUlByb2plY3QpewotCi0JcmV0dXJuOwotfQotCi0KLXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGFkZEphcnNUb0NsYXNzUGF0aChJU2VydmVyIHNlcnZlcikgdGhyb3dzIENvcmVFeGNlcHRpb247Ci1wcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB2YWxpZGF0ZVJlbW90ZVNlcnZlclBhdGgoSVNlcnZlciBzZXJ2ZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgdm9pZCBzdG9wU2VydmVyKElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0KLQlpZiAoc2VydmVyICE9IG51bGwpIHsKLQotCQlpZiAoc2VydmVyLmdldFNlcnZlclN0YXRlKCkgIT0gSVNlcnZlci5TVEFURV9TVE9QUEVEKSB7Ci0JCQlzZXJ2ZXIuc3luY2hyb25vdXNTdG9wKGZhbHNlKTsKLQkJfQotCX0JCi0JCi19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0FkZE1vZHVsZVRvU2VydmVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTBlNTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTIxIFsxNTgyMTBdIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBDYWxsaW5nIGluY3JlbWVudGFsIGJ1aWxkIG9uIHRoZSBwcm9qZWN0IGJlZm9yZSBhZGRpbmcgdG8gc2VydmVyCi0gKiAyMDA4MDQxNSAgIDIyNzIzNyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJZDsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgbW9kdWxlOwotCQotCXB1YmxpYyBBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQoKQotCXsKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0JewotICAgICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgICAKLQkgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwkgICAgCi0JICAgIElTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkgICAgaWYoIShzZXJ2ZXJJbnN0YW5jZUlkID09IG51bGwpKQotCSAgICAJc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNlcnZlckluc3RhbmNlSWQpOwotCSAgICBpZiAoc2VydmVyID09IG51bGwpCi0JICAgIHsKLQkgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSU5TVEFOQ0VfTk9UX0ZPVU5EICk7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgICAgIHJldHVybiBzdGF0dXM7Ci0JICAgIH0KLQkgICAKLQkgICAgSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcndjID0gbnVsbDsKLQkgICAgCi0JICAgIHRyeQotCSAgICB7Ci0JICAgIC8vRW5zdXJlIHRoZSBtb2R1bGUgaXMgbm90IGEgSmF2YSB1dGlsaXR5Ci0JICAgIElQcm9qZWN0IGlwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3QpOwotCSAgICBpZiAoIUoyRUVVdGlscy5pc0phdmFDb21wb25lbnQoaXByb2plY3QpKQotCSAgICB7ICAgICAgCi0JICAgIAlJTW9kdWxlIGltb2R1bGUgPSBTZXJ2ZXJVdGlscy5nZXRNb2R1bGUoaXByb2plY3QpOwotCSAgICAJLy8gVE9ETzogIFRoaXMgd29ya2Fyb3VuZCBmb3IgMTU2NzY4IHNob3VsZCBiZSByZW1vdmVkIG9uY2UgdGhlIGRlZmVjdCBpcyBmaXhlZAotCSAgICAJaWYgKGltb2R1bGUgPT0gbnVsbCkgewotCSAgICAJICAgIC8vIGNhbGxpbmcgaW5jcmVtZW50YWwgYnVpbGQgb24gdGhlIHByb2plY3QgYmVmb3JlIHRyeWluZyBhZ2FpbgotCSAgICAJCWlwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsbnVsbCk7Ci0JICAgIAkJLy8gd2FpdCBmb3IgdGhlIGluY3JlbWVudGFsIGJ1aWxkIHRvIGNvbXBsZXRlIGJlZm9yZSB0cnlpbmcgYWdhaW4KLQkgICAgCQl0cnkgCi0JICAgIAkJewotCSAgICAJCQlQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotCSAgICAJCX0gCi0JICAgIAkJY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGV4YyApIAotCSAgICAJCXsKLQkgICAgCQkJLy8gQXNzdW1pbmcgdGhhdCB0aGUgYXV0b2J1aWxkZXIgaGFzIGFjdHVhbGx5IGNvbXBsZXRlZC4JCi0JICAgIAkJfQotCSAgICAJCWltb2R1bGUgPSBTZXJ2ZXJVdGlscy5nZXRNb2R1bGUoaXByb2plY3QpOwotCSAgICAJCWlmIChpbW9kdWxlID09IG51bGwpIHsgIAotCSAgICAJCQkvLyByZXR1cm4gZXJyb3IgaWYgbW9kdWxlIGlzIHN0aWxsIG51bGwgYWZ0ZXIgMSByZXRyeQotCSAgICAJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQUREX01PRFVMRSwgbmV3IFN0cmluZ1tde21vZHVsZX0pICk7Ci0JICAgIAkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkgICAgCQkJcmV0dXJuIHN0YXR1czsKLQkgICAgCQl9Ci0JICAgIAl9Ci0JICAgIAkvLyBlbmQgb2Ygd29ya2Fyb3VuZCBmb3IgMTU2NzY4Ci0JICAgIAkKLQkgICAgICBpZiAoIVNlcnZlclV0aWwuY29udGFpbnNNb2R1bGUoc2VydmVyLCBpbW9kdWxlLCBudWxsKSkKLQkgICAgICB7Ci0JICAgICAgICBJTW9kdWxlW10gaW1vZHVsZXMgPSBuZXcgSU1vZHVsZVtde2ltb2R1bGV9OwotCSAgICAgICAgc2VydmVyd2MgPSBzZXJ2ZXIuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkgICAgICAgIFNlcnZlclV0aWwubW9kaWZ5TW9kdWxlcyhzZXJ2ZXJ3YywgaW1vZHVsZXMsIG51bGwsIG51bGwpOwotCSAgICAgIH0KLQotCSAgICB9Ci0JICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkgICAgewotCSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9BRERfTU9EVUxFLCBuZXcgU3RyaW5nW117bW9kdWxlfSksIGUpOwotCSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkgICAgICByZXR1cm4gc3RhdHVzOyAgICAgIAotCSAgICB9IGZpbmFsbHkKLQkgICAgewotCSAgICAgIHRyeQotCSAgICAgIHsKLQkgICAgICAgIGlmIChzZXJ2ZXJ3YyAhPSBudWxsKQotCSAgICAgICAgewotCSAgICAgICAgICBzZXJ2ZXJ3Yy5zYXZlKHRydWUsIG51bGwpOwotCSAgICAgICAgfQotCSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JICAgICAgewotCSAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0FERF9NT0RVTEUsIG5ldyBTdHJpbmdbXSB7IG1vZHVsZSB9KSwgY2UpOwotCSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgICAgICAgcmV0dXJuIHN0YXR1czsKLQkgICAgICB9ICAgICAgCi0JICAgIH0KLQkgICAgCi0JCXJldHVybiBzdGF0dXM7Ci0JICAgIAotCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNb2R1bGUoU3RyaW5nIG1vZHVsZSkKLQl7Ci0JCXRoaXMubW9kdWxlID0gbW9kdWxlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFByb2plY3QoU3RyaW5nIHByb2plY3QpCi0JewotCQl0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWQpCi0JewotCQl0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0JCi0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhYjhhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Fzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIFN0cmluZyBwcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZyBtb2R1bGVfOwotCXByaXZhdGUgU3RyaW5nIGVhclByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nIGVhcl87Ci0JCi0KLSAgcHVibGljIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCl7Ci0KLSAgfQotICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLQl7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJSVByb2plY3QgbW9kdWxlUHJvamVjdCA9IG51bGw7Ci0JCUlQcm9qZWN0IGVhclByb2plY3QgPSBudWxsOwotCi0JCS8vIGdldCBwcm9qZWN0cwotCQlpZiAocHJvamVjdF8hPW51bGwpCi0JCQltb2R1bGVQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJaWYgKGVhclByb2plY3RfIT1udWxsKQotCQkJZWFyUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCQotCQkvLyBhc3NvY2lhdGUgbW9kdWxlcyBpZiBub3QgYWxyZWFkeSBhc3NvY2lhdGVkCi0JCWlmIChtb2R1bGVQcm9qZWN0IT1udWxsICYmIGVhclByb2plY3QhPW51bGwpIHsKLQkJCWlmICghSjJFRVV0aWxzLmlzQ29tcG9uZW50QXNzb2NpYXRlZChlYXJQcm9qZWN0LCBtb2R1bGVQcm9qZWN0KSkKLQkJCQlKMkVFVXRpbHMuYXNzb2NpYXRlQ29tcG9uZW50VG9FQVIobW9kdWxlUHJvamVjdCwgZWFyUHJvamVjdCk7Ci0JCX0KLQkJCi0JCS8vIGVuc3VyZSBtb2R1bGVzIGFyZSBhc3NvY2lhdGVkIG90aGVyd2lzZSByZXBvcnQgZXJyb3IKLQkJaWYgKCFKMkVFVXRpbHMuaXNDb21wb25lbnRBc3NvY2lhdGVkKGVhclByb2plY3QsIG1vZHVsZVByb2plY3QpKXsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9VTkFCTEVfVE9fQVNTT0NJQVRFLCBuZXcgU3RyaW5nW117bW9kdWxlXywgZWFyX30pICk7Ci0JCQlpZiAoZW52IT1udWxsKQotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJICAgIHJldHVybiBzdGF0dXM7IAotCQl9Ci0JCQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQkKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QgKQotICB7Ci0JICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLQkgIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0JICBtb2R1bGVfID0gbW9kdWxlOwotICB9CQotCQotICBwdWJsaWMgdm9pZCBzZXRFQVJQcm9qZWN0KCBTdHJpbmcgZWFyUHJvamVjdCApCi0gIHsKLQkgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCSAgZWFyXyA9IGVhcjsgIAotICB9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9CdWlsZFByb2plY3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkUHJvamVjdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiZjdiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkUHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLkluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLnZhbGlkYXRlLlZhbGlkYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIEJ1aWxkUHJvamVjdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBWYWxpZGF0aW9uTWFuYWdlciB2YWxpZGF0aW9uTWFuYWdlcjsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBib29sZWFuIGZvcmNlQnVpbGRfOwotICAvLyBybSBwcml2YXRlIE1vZGVsIG1vZGVsOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IENUT1I7Ci0gICAqLwotICBwdWJsaWMgQnVpbGRQcm9qZWN0Q29tbWFuZCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChmb3JjZUJ1aWxkXykKLSAgICAgICAgcHJvamVjdF8uYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5JTkNSRU1FTlRBTF9CVUlMRCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTWFuYWdlciA9PSBudWxsKQotICAgICAgICBwcm9qZWN0Xy5idWlsZChJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyLklOQ1JFTUVOVEFMX0JVSUxELCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgIGVsc2UgaWYgKHZhbGlkYXRpb25NYW5hZ2VyLmdldFdvcmtzcGFjZUF1dG9CdWlsZFByZWZlcmVuY2UoKSkKLSAgICAgICAgcHJvamVjdF8uYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5JTkNSRU1FTlRBTF9CVUlMRCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7ICAgCi0gICAgfQotICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkKLSAgICB7Ci0gICAgICAvLyBjb250aW51ZSBleGVjdXRpb24KLSAgICB9Ci0gICAgY2F0Y2ggKE9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uIG9jZSkKLSAgICB7Ci0gICAgICAvLyBjb250aW51ZSBleGVjdXRpb24KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBmb3JjZUJ1aWxkIFRoZSBmb3JjZUJ1aWxkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZvcmNlQnVpbGQoYm9vbGVhbiBmb3JjZUJ1aWxkKSB7Ci0gICAgdGhpcy5mb3JjZUJ1aWxkXyA9IGZvcmNlQnVpbGQ7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0gICAgdGhpcy5wcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHZhbGlkYXRpb25NYW5hZ2VyIFRoZSB2YWxpZGF0aW9uTWFuYWdlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWFuYWdlcihWYWxpZGF0aW9uTWFuYWdlciB2YWxpZGF0aW9uTWFuYWdlcikgewotICAgIHRoaXMudmFsaWRhdGlvbk1hbmFnZXIgPSB2YWxpZGF0aW9uTWFuYWdlcjsKLSAgfQotCi0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NoZWNrUHJvamVjdE9LQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DaGVja1Byb2plY3RPS0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxZjNiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NoZWNrUHJvamVjdE9LQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi1wdWJsaWMgY2xhc3MgQ2hlY2tQcm9qZWN0T0tDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJZF87Ci0KLQotICAvKioKLSAgICogRGVmYXVsdCBDVE9SCi0gICAqLwotICBwdWJsaWMgQ2hlY2tQcm9qZWN0T0tDb21tYW5kKCkgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsgCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotICAgIFN0cmluZyB0eXBlaWQgPSBzZXJ2aWNlU2VydmVyVHlwZUlkXzsKLSAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotLy8gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2ZXJzLml0ZXJhdG9yKCk7Ci0gICAgYm9vbGVhbiB2aWV3T3BlbiA9IGZhbHNlOwotICAgIFN0cmluZyBzZXJ2ZXJOYW1lID0gbnVsbDsKLQotICAgIGZvciAoaW50IGk9MDtpPHNlcnZlcnMubGVuZ3RoO2krKykgewotICAgICAgSVNlcnZlciBzZXJ2ZXIgPSAoSVNlcnZlcikgc2VydmVyc1tpXTsKLQotICAgICAgLy8gSWYgdGhlIGNvbmZpZ3VyYXRpb24gZWRpdG9yIGlzIG9wZW4gZm9yIHRoZSBzZXJ2ZXIgdGhhdCB3ZSBhcmUKLSAgICAgIC8vIGRlcGxveWluZwotICAgICAgLy8gdG8gd2Ugd2lsbCBwcm9tcHQgdGhlIHVzZXIgdG8gY2xvc2UgaXQuCi0gICAgICBpZiAoc2VydmVyICE9IG51bGwgJiYgc2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpLmVxdWFscyh0eXBlaWQpKSB7Ci0gICAgICAgIHZpZXdPcGVuID0gdHJ1ZTsKLSAgICAgICAgc2VydmVyTmFtZSA9IHNlcnZlci5nZXROYW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh2aWV3T3BlbikgewotICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUl9WSUVXX09QRU4sIG5ldyBTdHJpbmdbXSB7IHNlcnZlck5hbWV9KTsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZXJyb3JNZXNzYWdlICk7Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gc2VydmljZVNlcnZlcklkCi0gICAqICAgICAgICAgICAgVGhlIHNlcnZpY2VTZXJ2ZXIgZmFjdG9yeSBJZCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVyVHlwZUlEKFN0cmluZyBzZXJ2aWNlU2VydmVySWQpIHsKLSAgICB0aGlzLnNlcnZpY2VTZXJ2ZXJUeXBlSWRfID0gc2VydmljZVNlcnZlcklkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NvbXB1dGVFbmRwb2ludENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTYzNzI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIENvbXB1dGVFbmRwb2ludENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotICBwcml2YXRlIEJvb2xlYW4gbW9uaXRvclNlcnZpY2U7Ci0gIHByaXZhdGUgSW50ZWdlciBtb25pdG9yZWRQb3J0OwotCi0gIHB1YmxpYyBDb21wdXRlRW5kcG9pbnRDb21tYW5kKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBtb25pdG9yZWRQb3J0IFRoZSBtb25pdG9yZWRQb3J0IHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JlZFBvcnQoSW50ZWdlciBtb25pdG9yZWRQb3J0KQotICB7Ci0gICAgdGhpcy5tb25pdG9yZWRQb3J0ID0gbW9uaXRvcmVkUG9ydDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIG1vbml0b3JTZXJ2aWNlIFRoZSBtb25pdG9yU2VydmljZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yU2VydmljZShCb29sZWFuIG1vbml0b3JTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5tb25pdG9yU2VydmljZSA9IG1vbml0b3JTZXJ2aWNlOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gd3NkbFVSSSBUaGUgd3NkbFVSSSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpCi0gIHsKLSAgICBpZiAobW9uaXRvclNlcnZpY2UgIT0gbnVsbCAmJiBtb25pdG9yU2VydmljZS5ib29sZWFuVmFsdWUoKSAmJiBtb25pdG9yZWRQb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWYgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLSAgICAgIGlmIChkZWYgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGRlZi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBpdDIgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQyLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaXQyLm5leHQoKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpdDMuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0My5uZXh0KCk7Ci0gICAgICAgICAgICAgIGlmIChleHQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhdGlvbiA9ICgoU09BUEFkZHJlc3MpZXh0KS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgIHVybCA9IG5ldyBVUkwodXJsLmdldFByb3RvY29sKCksIHVybC5nZXRIb3N0KCksIG1vbml0b3JlZFBvcnQuaW50VmFsdWUoKSwgdXJsLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaW50IHByb3RvY29sSW5kZXggPSBsb2NhdGlvbi5pbmRleE9mKCI6Ly8iKTsKLSAgICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbEluZGV4ICE9IC0xKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgcHJvdG9jb2xJbmRleCszKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGhvc3RQb3J0SW5kZXggPSBsb2NhdGlvbi5pbmRleE9mKCcvJywgcHJvdG9jb2xJbmRleCszKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChob3N0UG9ydEluZGV4ID09IC0xKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgaG9zdFBvcnRJbmRleCA9IGxvY2F0aW9uLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGxvY2F0aW9uLnN1YnN0cmluZyhob3N0UG9ydEluZGV4LCBsb2NhdGlvbi5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBob3N0UG9ydCA9IGxvY2F0aW9uLnN1YnN0cmluZyhwcm90b2NvbEluZGV4KzMsIGhvc3RQb3J0SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgaG9zdEluZGV4ID0gaG9zdFBvcnQuaW5kZXhPZignOicpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaG9zdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RJbmRleCAhPSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICBob3N0ID0gaG9zdFBvcnQuc3Vic3RyaW5nKDAsIGhvc3RJbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0UG9ydCArICc6JzsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1BvcnQgPSBTdHJpbmcudmFsdWVPZihtb25pdG9yZWRQb3J0LmludFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgZW5kcG9pbnQgPSBuZXcgU3RyaW5nQnVmZmVyKHByb3RvY29sKTsKLSAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuYXBwZW5kKGhvc3QpOwotICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC5hcHBlbmQobmV3UG9ydCk7Ci0gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LmFwcGVuZChmaWxlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZHBvaW50LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDAxNGU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgQm9vbGVhbiBtb25pdG9yU2VydmljZTsKLSAgcHJpdmF0ZSBJbnRlZ2VyIG1vbml0b3JlZFBvcnQ7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5RW5kcG9pbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIGVuZHBvaW50OwotCi0gIHB1YmxpYyBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIG1vbml0b3JlZFBvcnQgVGhlIG1vbml0b3JlZFBvcnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TW9uaXRvcmVkUG9ydChJbnRlZ2VyIG1vbml0b3JlZFBvcnQpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JlZFBvcnQgPSBtb25pdG9yZWRQb3J0OwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbW9uaXRvclNlcnZpY2UgVGhlIG1vbml0b3JTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKEJvb2xlYW4gbW9uaXRvclNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JTZXJ2aWNlID0gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kcG9pbnQoKQotICB7Ci0gIAlpZiAobW9uaXRvclNlcnZpY2UgIT0gbnVsbCAmJiBtb25pdG9yU2VydmljZS5ib29sZWFuVmFsdWUoKSAmJiBtb25pdG9yZWRQb3J0ICE9IG51bGwpCi0gIAl7Ci0gIAkJLy8gVXNlIHRoZSBlbmRwb2ludCB0aGF0IG1hdGNoZXMgd2l0aCB0aGUgcHJveHkgdGhlIGV4dGVuc2lvbiBwYXNzZXMgdG8gdXMgaWYgaXQgaXMgc2V0Ci0gIAkJaWYgKHByb3h5RW5kcG9pbnQgIT0gbnVsbCkgewotICAJCQlTdHJpbmcgbG9jYXRpb24gPSBwcm94eUVuZHBvaW50OwotICAJCQl0cnkKLQkJCXsKLSAgCQkJCVVSTCB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgCQkJCXVybCA9IG5ldyBVUkwodXJsLmdldFByb3RvY29sKCksIHVybC5nZXRIb3N0KCksIG1vbml0b3JlZFBvcnQuaW50VmFsdWUoKSwgdXJsLmdldEZpbGUoKSk7Ci0gIAkJCQlyZXR1cm4gdXJsLnRvU3RyaW5nKCk7Ci0JCQl9Ci0gIAkJCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0JCQl7Ci0gIAkJCQlpbnQgcHJvdG9jb2xJbmRleCA9IGxvY2F0aW9uLmluZGV4T2YoIjovLyIpOwotICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbEluZGV4ICE9IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IGxvY2F0aW9uLnN1YnN0cmluZygwLCBwcm90b2NvbEluZGV4KzMpOwotICAgICAgICAgICAgICAgICAgaW50IGhvc3RQb3J0SW5kZXggPSBsb2NhdGlvbi5pbmRleE9mKCcvJywgcHJvdG9jb2xJbmRleCszKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlOwotICAgICAgICAgICAgICAgICAgaWYgKGhvc3RQb3J0SW5kZXggPT0gLTEpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGhvc3RQb3J0SW5kZXggPSBsb2NhdGlvbi5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgZmlsZSA9ICIiOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBmaWxlID0gbG9jYXRpb24uc3Vic3RyaW5nKGhvc3RQb3J0SW5kZXgsIGxvY2F0aW9uLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBob3N0UG9ydCA9IGxvY2F0aW9uLnN1YnN0cmluZyhwcm90b2NvbEluZGV4KzMsIGhvc3RQb3J0SW5kZXgpOwotICAgICAgICAgICAgICAgICAgaW50IGhvc3RJbmRleCA9IGhvc3RQb3J0LmluZGV4T2YoJzonKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBob3N0OwotICAgICAgICAgICAgICAgICAgaWYgKGhvc3RJbmRleCAhPSAtMSkKLSAgICAgICAgICAgICAgICAgICAgaG9zdCA9IGhvc3RQb3J0LnN1YnN0cmluZygwLCBob3N0SW5kZXgrMSk7Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0UG9ydCArICc6JzsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXdQb3J0ID0gU3RyaW5nLnZhbHVlT2YobW9uaXRvcmVkUG9ydC5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBlbmRwb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIocHJvdG9jb2wpOwotICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuYXBwZW5kKGhvc3QpOwotICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuYXBwZW5kKG5ld1BvcnQpOwotICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuYXBwZW5kKGZpbGUpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZHBvaW50LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotCQkJfQotICAJCX0gZWxzZSB7Ci0gIAkJCXJldHVybiBlbmRwb2ludDsKLSAgCQl9Ci0gIAl9Ci0gIAlyZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIHByb3h5RW5kcG9pbnQgVGhlIHByb3h5RW5kcG9pbnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJveHlFbmRwb2ludChTdHJpbmcgcHJveHlFbmRwb2ludCkgewotICAJdGhpcy5wcm94eUVuZHBvaW50ID0gcHJveHlFbmRwb2ludDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGVuZHBvaW50IFRoZSBlbmRwb2ludCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpIHsKLSAgCXRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29weVdTRExDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MzQ5NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjEyMTMgICAxNjU3MjMga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYxMjEzICAgMTY1NzI1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExXcml0ZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5VUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIENvcHlXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uVVJJOwotICBwcml2YXRlIERlZmluaXRpb24gZGVmOwotICBwcml2YXRlIFZlY3RvciBpZ25vcmVMaXN0OwotCi0gIHB1YmxpYyBDb3B5V1NETENvbW1hbmQoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZSB0aGUgY29tbWFuZAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBDb3B5V1NETFJ1bm5hYmxlIGNvcHlXU0RMUnVubmFibGUgPSBuZXcgQ29weVdTRExSdW5uYWJsZShlbnYpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlKCkucnVuKGNvcHlXU0RMUnVubmFibGUsIG51bGwpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gIH0KLQotICAgCi0gIHByaXZhdGUgY2xhc3MgQ29weVdTRExSdW5uYWJsZSBpbXBsZW1lbnRzIElXb3Jrc3BhY2VSdW5uYWJsZSB7Ci0gIAkKLSAgCXByaXZhdGUgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gbnVsbDsKLSAgCQotICAJcHJvdGVjdGVkIENvcHlXU0RMUnVubmFibGUoSUVudmlyb25tZW50IGVudil7Ci0gIAkJZW52aXJvbm1lbnQgPSBlbnY7Ci0gIAl9Ci0gIAlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBwbSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotICAJCWlnbm9yZUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gIAkJaWYgKGRlZiA9PSBudWxsKQotICAJCQlkZWYgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLSAgCQl0cnkgewotICAJCQljb3B5V1NETChlbnZpcm9ubWVudCwgd3NkbFVSSSwgZ2V0QmFzZVVSSShkZXN0aW5hdGlvblVSSSksIGdldExvY2FsbmFtZShkZXN0aW5hdGlvblVSSSksIGRlZik7Ci0gIAkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKLSAgCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0NPUFlfV1NETCwgbmV3IFN0cmluZ1tde3dzZGxVUkksIGRlc3RpbmF0aW9uVVJJfSksIGUpKTsKLSAgCQl9Ci0gIAl9Ci0gIH0KLSAgcHJpdmF0ZSB2b2lkIGNvcHlXU0RMKElFbnZpcm9ubWVudCBlbnYsIFN0cmluZyB1cmksIFN0cmluZyBkZXN0VVJJLCBTdHJpbmcgZGVzdExvY2FsbmFtZSkgdGhyb3dzIFdTRExFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgVVJJRXhjZXB0aW9uCi0gIHsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbjsKLQkKLQl0cnkgewotCQlkZWZpbml0aW9uID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHVyaSk7Ci0JCWNvcHlXU0RMKGVudiwgdXJpLCBkZXN0VVJJLCBkZXN0TG9jYWxuYW1lLCBkZWZpbml0aW9uKTsJCi0JfSBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKSB7Ci0JCWNvcHlYTUxTY2hlbWEoZW52LCB1cmksIGRlc3RVUkkpOwotCX0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjb3B5V1NETChJRW52aXJvbm1lbnQgZW52LCBTdHJpbmcgdXJpLCBTdHJpbmcgZGVzdFVSSSwgU3RyaW5nIGRlc3RMb2NhbG5hbWUsIERlZmluaXRpb24gZGVmaW5pdGlvbikgdGhyb3dzIFdTRExFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgVVJJRXhjZXB0aW9uCi0gIHsKLQl1cmkgPSBub3JtYWxpemUodXJpKTsKLQlpZiAoIW5lZWRUb0NvcHkodXJpKSkgewotCSAgIAlyZXR1cm47Ci0JfQotCWRlc3RVUkkgPSBub3JtYWxpemUoZGVzdFVSSSk7Ci0gICAgU3RyaW5nIGJhc2VVUkkgPSBnZXRCYXNlVVJJKHVyaSk7Ci0gICAgaWYgKGRlc3RMb2NhbG5hbWUgPT0gbnVsbCB8fCBkZXN0TG9jYWxuYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgICBkZXN0TG9jYWxuYW1lID0gZ2V0TG9jYWxuYW1lKHVyaSk7Ci0gICAgCi0gICAgLy8gY29weSBXU0RMCi0gICAgU3RyaW5nQnVmZmVyIGRlc3RpbmF0aW9uRmlsZVVSSSA9IG5ldyBTdHJpbmdCdWZmZXIoYWRkVHJhaWxpbmdTZXBhcmF0b3IoZGVzdFVSSSkpOwotICAgIGRlc3RpbmF0aW9uRmlsZVVSSS5hcHBlbmQoZGVzdExvY2FsbmFtZSk7Ci0gICAgV1NETEZhY3Rvcnkgd3NkbEZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0gICAgV1NETFdyaXRlciB3c2RsV3JpdGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFdyaXRlcigpOwotICAgIE91dHB1dFN0cmVhbSBvcyA9IGVudi5nZXRVUklGYWN0b3J5KCkubmV3VVJJKGRlc3RpbmF0aW9uRmlsZVVSSS50b1N0cmluZygpKS5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICB3c2RsV3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBvcyk7Ci0gICAgb3MuY2xvc2UoKTsKLSAgICAvLyBjb3B5IDx3c2RsOmltcG9ydD5zCi0gICAgTWFwIGltcG9ydHMgPSBkZWZpbml0aW9uLmdldEltcG9ydHMoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gaW1wb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIExpc3QgbGlzdCA9IChMaXN0KWl0Lm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgbGlzdEl0ID0gbGlzdC5pdGVyYXRvcigpOyBsaXN0SXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IHdzZGxJbXBvcnQgPSAoSW1wb3J0KWxpc3RJdC5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyB3c2RsSW1wb3J0VVJJID0gd3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICBpZiAoaXNSZWxhdGl2ZSh3c2RsSW1wb3J0VVJJKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBpbXBvcnRCYXNlVVJJID0gKG5ldyBTdHJpbmdCdWZmZXIoYmFzZVVSSSkpLmFwcGVuZCh3c2RsSW1wb3J0VVJJKS50b1N0cmluZygpOwotICAgICAgICAgIFN0cmluZyB3c2RsSW1wb3J0QmFzZVVSSSA9IGdldEJhc2VVUkkod3NkbEltcG9ydFVSSSk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIGltcG9ydERlc3RVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGRlc3RVUkkpOwotICAgICAgICAgIGlmICh3c2RsSW1wb3J0QmFzZVVSSSAhPSBudWxsKQotICAgICAgICAgICAgaW1wb3J0RGVzdFVSSS5hcHBlbmQod3NkbEltcG9ydEJhc2VVUkkpOwotICAgICAgICAgIGNvcHlXU0RMKGVudiwgaW1wb3J0QmFzZVVSSSwgaW1wb3J0RGVzdFVSSS50b1N0cmluZygpLCBnZXRMb2NhbG5hbWUod3NkbEltcG9ydFVSSSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3Qgc2NoZW1hcyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNjaGVtYXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IHNjaGVtYUVsZW1lbnQgPSAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1lbnQ7Ci0gICAgICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IG51bGw7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgeHNkU2NoZW1hID0gWFNEU2NoZW1hSW1wbC5jcmVhdGVTY2hlbWEoc2NoZW1hRWxlbWVudC5nZXRFbGVtZW50KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gaWdub3JlIGFueSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoYXQgY2Fubm90IGJlIHBhcnNlZCBpbnRvIGEKLSAgICAgICAgICAgIC8vIFhTRFNjaGVtYSBpbnN0YW5jZQotICAgICAgICAgIH0KLSAgICAgICAgICBjb3B5WE1MU2NoZW1hKGVudiwgeHNkU2NoZW1hLCBiYXNlVVJJLCBkZXN0VVJJKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIHNjaGVtYUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dEVsZW1lbnQ7Ci0gICAgICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IG51bGw7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgeHNkU2NoZW1hID0gWFNEU2NoZW1hSW1wbC5jcmVhdGVTY2hlbWEoc2NoZW1hRWxlbWVudC5nZXRFbGVtZW50KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gaWdub3JlIGFueSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoYXQgY2Fubm90IGJlIHBhcnNlZCBpbnRvIGEKLSAgICAgICAgICAgIC8vIFhTRFNjaGVtYSBpbnN0YW5jZQotICAgICAgICAgIH0KLSAgICAgICAgICBjb3B5WE1MU2NoZW1hKGVudiwgeHNkU2NoZW1hLCBiYXNlVVJJLCBkZXN0VVJJKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldEJhc2VVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIGludCBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCdcXCcpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiB1cmkuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRMb2NhbG5hbWUoU3RyaW5nIHVyaSkKLSAgewotICAgIGludCBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCdcXCcpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiB1cmkuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHVyaTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGFkZFRyYWlsaW5nU2VwYXJhdG9yKFN0cmluZyBzKQotICB7Ci0gICAgaWYgKCEocy5lbmRzV2l0aCgiLyIpIHx8IHMuZW5kc1dpdGgoIlxcIikpKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIocyk7Ci0gICAgICBzYi5hcHBlbmQoJy8nKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gczsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1JlbGF0aXZlKFN0cmluZyB1cmkpCi0gIHsKLSAgICByZXR1cm4gKHVyaS5pbmRleE9mKCc6JykgPT0gLTEpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvcHlYTUxTY2hlbWEoSUVudmlyb25tZW50IGVudiwgU3RyaW5nIHVyaSwgU3RyaW5nIGRlc3RVUkkpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgVVJJRXhjZXB0aW9uCi0gIHsKLQkgIHVyaSA9IG5vcm1hbGl6ZSh1cmkpOwotCSAgaWYgKCFuZWVkVG9Db3B5KHVyaSkpIHsKLQkgICAgCXJldHVybjsKLQkgICAgfQotCSAgZGVzdFVSSSA9IG5vcm1hbGl6ZShkZXN0VVJJKTsKLSAgICAvLyBsb2FkIGFzIGEgY2FjaGVkIHNjaGVtYQotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYSh1cmkpOwotICAgIC8vIGlmIHNjaGVtYSBpcyBub3QgY2FjaGVkLCBwYXJzZSBpdAotICAgIGlmICh4c2RTY2hlbWEgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RQYXJzZXIgcCA9IG5ldyBYU0RQYXJzZXIoKTsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gTmV0VXRpbHMuZ2V0VVJMSW5wdXRTdHJlYW0odXJpKTsKLSAgICAgIGlmIChpcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBwLnBhcnNlKGlzKTsKLSAgICAgICAgeHNkU2NoZW1hID0gcC5nZXRTY2hlbWEoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHhzZFNjaGVtYSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIGNvcHkgc2NoZW1hCi0gICAgICBFbGVtZW50IGUgPSB4c2RTY2hlbWEuZ2V0RWxlbWVudCgpOwotICAgICAgRE9NU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZSk7Ci0gICAgICBUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLSAgICAgIHNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLSAgICAgIHNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi04Iik7Ci0gICAgICBzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICIyIik7Ci0gICAgICBPdXRwdXRTdHJlYW0gb3MgPSBlbnYuZ2V0VVJJRmFjdG9yeSgpLm5ld1VSSSgobmV3IFN0cmluZ0J1ZmZlcihkZXN0VVJJKSkuYXBwZW5kKGdldExvY2FsbmFtZSh1cmkpKS50b1N0cmluZygpKS5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICAgIHNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvcykpOwotICAgICAgb3MuY2xvc2UoKTsKLSAgICAgIC8vIGNvcHkgPHhzZDppbXBvcnQ+cyBhbmQgPHhzZDppbmNsdWRlPnMKLSAgICAgIGNvcHlYTUxTY2hlbWEoZW52LCB4c2RTY2hlbWEsIGdldEJhc2VVUkkodXJpKSwgZGVzdFVSSSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvcHlYTUxTY2hlbWEoSUVudmlyb25tZW50IGVudiwgWFNEU2NoZW1hIHhzZFNjaGVtYSwgU3RyaW5nIGJhc2VVUkksIFN0cmluZyBkZXN0VVJJKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFVSSUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHhzZFNjaGVtYSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIGNvcHkgPHhzZDppbXBvcnQ+cyBhbmQgPHhzZDppbmNsdWRlPnMKLSAgICAgIEVMaXN0IHhzZFNjaGVtYUNvbnRlbnRzID0geHNkU2NoZW1hLmdldENvbnRlbnRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0geHNkU2NoZW1hQ29udGVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGNvbnRlbnQgPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hRGlyZWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEU2NoZW1hRGlyZWN0aXZlIHhzZFNjaGVtYURpcmVjdGl2ZSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpY29udGVudDsKLSAgICAgICAgICBTdHJpbmcgeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24gPSB4c2RTY2hlbWFEaXJlY3RpdmUuZ2V0U2NoZW1hTG9jYXRpb24oKTsKLSAgICAgICAgICBpZiAoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24gIT0gbnVsbCAmJiBpc1JlbGF0aXZlKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgZGlyZWN0aXZlVVJJID0gKG5ldyBTdHJpbmdCdWZmZXIoYmFzZVVSSSkpLmFwcGVuZCh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbikudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIFN0cmluZyBkaXJlY3RpdmVCYXNlVVJJID0gZ2V0QmFzZVVSSSh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbik7Ci0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0aXZlRGVzdFVSSSA9IG5ldyBTdHJpbmdCdWZmZXIoZGVzdFVSSSk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aXZlQmFzZVVSSSAhPSBudWxsKQotICAgICAgICAgICAgICBkaXJlY3RpdmVEZXN0VVJJLmFwcGVuZChkaXJlY3RpdmVCYXNlVVJJKTsKLSAgICAgICAgICAgIGNvcHlYTUxTY2hlbWEoZW52LCBkaXJlY3RpdmVVUkksIGRpcmVjdGl2ZURlc3RVUkkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIG5lZWRUb0NvcHkgKFN0cmluZyBub3JtYWxpemVkVVJJKSB7CQotCSAgaWYgKGlnbm9yZUxpc3QuY29udGFpbnMobm9ybWFsaXplZFVSSSkpCi0JCSAgcmV0dXJuIGZhbHNlOwotCSAgaWdub3JlTGlzdC5hZGQobm9ybWFsaXplZFVSSSk7Ci0JICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLS8vbm9ybWFsaXplIHRoZSB1cmkgdG8gcmVtb3ZlIHJlbGF0aXZlIGFkZHJlc3NpbmcgIi8uLiIKLSAgcHJpdmF0ZSBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyB1cmkgKQotICB7Ci0gIAlib29sZWFuIG5vcm1hbGl6ZWQgPSBmYWxzZTsKLSAgCXdoaWxlKCFub3JtYWxpemVkKXsKLSAgCSAgaW50IGRpciA9IHVyaS5pbmRleE9mKCIvLi4iKTsKLSAgCSAgaWYoZGlyID09IC0xKQotICAJICAJbm9ybWFsaXplZCA9IHRydWU7Ci0gIAkgIGVsc2V7Ci0gIAkgIAlTdHJpbmcgZmlyc3QgPSB1cmkuc3Vic3RyaW5nKDAsZGlyKTsKLSAgCSAgICBTdHJpbmcgc2Vjb25kID0gdXJpLnN1YnN0cmluZyhkaXIgKyAzKTsKLSAgCSAgICBpbnQgbmV3SW5kZXggPSBmaXJzdC5sYXN0SW5kZXhPZigiLyIpOwotICAJICAgIGlmKG5ld0luZGV4ID09IC0xKXsKLSAgCSAgICAJbm9ybWFsaXplZCA9IHRydWU7Ci0gIAkgICAgfSBlbHNlIHsKLSAgCSAgICAJZmlyc3QgPSBmaXJzdC5zdWJzdHJpbmcoMCxuZXdJbmRleCk7Ci0gIAkgICAgCXVyaSA9IGZpcnN0ICsgc2Vjb25kOwotICAJICAgIH0KLSAgCSAgfQotICAJfQotICAJcmV0dXJuIHVyaTsKLSAgCi0gIH0KLQkgIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25VUkkoU3RyaW5nIGRlc3RpbmF0aW9uVVJJKQotICB7Ci0gICAgdGhpcy5kZXN0aW5hdGlvblVSSSA9IGRlc3RpbmF0aW9uVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHRoaXMuZGVmID0gZGVmOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NvcHlXU0RMVHJlZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29weVdTRExUcmVlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmVkYjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29weVdTRExUcmVlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDExMiAgIDE2NTcyMSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETCBpbXBvcnQgY2Fubm90IHVzZSByZWxhdGl2ZSBpbXBvcnQgd2l0aCB0byBwYXJlbnQgZGlyZWN0b3JpZXMKLSAqIDIwMDcwMTI1ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgcHVibGljIHV0aWxpdHkgbWV0aG9kIGZvciBjb3B5aW5nIFdTREwgZmlsZXMKLSAqIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIHV0aWxpdHkgc2hvdWxkIGNyZWF0ZSB0YXJnZXQgZm9sZGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWwuV1NETENvcGllcjsKLQotLyoqCi0gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIFdTRExDb3BpZXJ9IGluc3RlYWQuIAotICovCi1wdWJsaWMgY2xhc3MgQ29weVdTRExUcmVlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uVVJJOwotICBwcml2YXRlIERlZmluaXRpb24gZGVmOwotICBwcml2YXRlIFN0cmluZyB3c2RsUmVsUGF0aDsKLSAgCi0gIC8qKgotICAgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIod2ViU2VydmljZXNQYXJzZXIpOyAgICAgICAgCi0gICAgICBjb3BpZXIuc2V0U291cmNlVVJJKHdzZGxVUkksIGRlZik7Ci0gICAgICBjb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGdldEJhc2VVUkkoZGVzdGluYXRpb25VUkkpKTsKLSAgICAgIGNvcGllci5zZXRUYXJnZXRGaWxlbmFtZShnZXRMb2NhbG5hbWUoZGVzdGluYXRpb25VUkkpKTsKLSAgICAgICAgCi0gICAgICBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG1vbml0b3IpOwotICAgICAgICAKLSAgICAgIHdzZGxSZWxQYXRoID0gY29waWVyLmdldFJlbGF0aXZlUGF0aCgpLnRvU3RyaW5nKCk7Ci0KLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIH0KLSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gY2UuZ2V0U3RhdHVzKCk7Ci0JCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmFzZVVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgcmV0dXJuIHVyaS5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldExvY2FsbmFtZShTdHJpbmcgdXJpKQotICB7Ci0gICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgcmV0dXJuIHVyaS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdXJpOwotICB9Ci0gCSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblVSSShTdHJpbmcgZGVzdGluYXRpb25VUkkpCi0gIHsKLSAgICB0aGlzLmRlc3RpbmF0aW9uVVJJID0gZGVzdGluYXRpb25VUkk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgdGhpcy5kZWYgPSBkZWY7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFJlbFBhdGgoKSB7Ci0gICAgcmV0dXJuIHdzZGxSZWxQYXRoOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmZjgwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAxMjEwNzEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotICogMjAwNjAyMDQgMTI0NDA4ICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgCi0gKiAyMDA2MDIxNyAxMjY3NTcgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjIxIDExOTExMSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjcgMTI2NzgwICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUxNyAxMjY5NjUgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA5MDUgICAxNTYyMzAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEhhbmRsaW5nIHByb2plY3RzIHdpdGggbm8gdGFyZ2V0IHJ1bnRpbWUKLSAqIDIwMDcwNTA1ICAgMTg0NzcyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMwNSAgIDIyMDM3MSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMDUgICAyMjAzNzEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4gLSByZXZlcnRpbmcgcHJldmlvdXMgY2hhbmdlIHRvIDIyMDM3MQotICogMjAwODAzMjYgICAyMjAzNzEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4gLSByZS1hcHBseWluZyAyMjAzNzEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIC8vbmFtZSBvZiB0aGUgcHJvamVjdCB0byBiZSBjcmVhdGVkCi0gIHByaXZhdGUgU3RyaW5nICAgcHJvamVjdE5hbWU7IAotCi0gIC8vaWQgb2YgdGhlIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoaXMgcHJvamVjdC4KLSAgcHJpdmF0ZSBTdHJpbmcgICB0ZW1wbGF0ZUlkOwotICAKLSAgLy9yZXF1aXJlZCBmYWNldCB2ZXJzaW9ucyB0aGF0IG11c3QgYmUgc2F0aXNmaWVkIHdoZW4gY3JlYXRpbmcgdGhlIHByb2plY3QgKHRoaXMgY29tZXMgZnJvbQotICAvL3RoZSBzZWxlY3RlZCBzZXJ2ZXJSdW50aW1lIG9yIGNsaWVudFJ1bnRpbWUgaW4gdGhlIGNhbGxpbmcgc2NlbmFyaW8pCi0gIHByaXZhdGUgUmVxdWlyZWRGYWNldFZlcnNpb25bXSAgIHJlcXVpcmVkRmFjZXRWZXJzaW9uczsKLQotICAvL3NlcnZlciB0eXBlIGlkIC0gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZhY2V0IHJ1bnRpbWUgdGhlIGNyZWF0ZWQgcHJvamVjdCB3aWxsIGJlIGJvdW5kIHRvCi0gIC8vaWYgc2VydmVySW5zdGFuY2VJZCBpcyBudWxsIG9yIGVtcHR5Ci0gIHByaXZhdGUgU3RyaW5nICAgc2VydmVyRmFjdG9yeUlkOwotCi0gIC8vc2VydmVyIGlkIC0gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZhY2V0IHJ1bnRpbWUgdGhlIGNyZWF0ZWQgcHJvamVjdCB3aWxsIGJlIGJvdW5kIHRvLiBNYXkKLSAgLy9iZSBudWxsIG9yIGVtcHR5LgotICBwcml2YXRlIFN0cmluZyAgIHNlcnZlckluc3RhbmNlSWQ7Ci0gIAotICAvL2ZhY2V0IHJ1bnRpbWUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkIG9yIHNlcnZlckZhY3RvcnlJZAotICBwcml2YXRlIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZmFjZXRSdW50aW1lOwotICAKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgLy8gY2hlY2sgaWYgZGF0YSByZWFkeQotICAgIHN0YXR1cyA9IGNoZWNrRGF0YVJlYWR5KCk7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgewotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuY3JlYXRlTmV3RmFjZXRlZFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIElQcm9qZWN0IGNyZWF0ZWRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGNyZWF0ZWRQcm9qZWN0KTsKLSAgICAgICAgCi0gICAgICAgIC8vR2V0IHRoZSBmYWNldCB2ZXJzaW9ucyB0byBpbnN0YWxsLiAKLSAgICAgICAgU2V0IGZhY2V0c1RvQWRkID0gZ2V0RmFjZXRzVG9BZGQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vSW5zdGFsbCB0aGUgZmFjZXQgdmVyc2lvbnMKLSAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5hZGRGYWNldHNUb1Byb2plY3QoZnByb2plY3QsIGZhY2V0c1RvQWRkKTsKLSAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vU2V0IHRoZSBpbnN0YWxsZWQgZmFjZXQgdmVyc2lvbnMgYXMgZml4ZWQuCi0gICAgICAgIFNldCBuZXdGYWNldFZlcnNpb25zID0gZnByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICBTZXQgZml4ZWRGYWNldHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBuZXdGYWNldFZlcnNpb25zLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZmFjZXRWZXJzaW9uID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKSBpdGVyLm5leHQoKTsKLSAgICAgICAgICAgIGZpeGVkRmFjZXRzLmFkZChmYWNldFZlcnNpb24uZ2V0UHJvamVjdEZhY2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuc2V0Rml4ZWRGYWNldHNPblByb2plY3QoZnByb2plY3QsIGZpeGVkRmFjZXRzKTsKLSAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vU2V0IHRoZSBydW50aW1lICAgICAgICAKLSAgICAgICAgaWYgKGZhY2V0UnVudGltZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5zZXRGYWNldFJ1bnRpbWVPblByb2plY3QoZnByb2plY3QsIGZhY2V0UnVudGltZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBhZGQgZmFjZXRzIHJlcXVpcmVkIGJ5IFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICAgICAgaWYgKHJlcXVpcmVkRmFjZXRWZXJzaW9ucy5sZW5ndGggIT0gMCkgewotICAgICAgICAJc3RhdHVzID0gRmFjZXRVdGlscy5hZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChwcm9qZWN0LCByZXF1aXJlZEZhY2V0VmVyc2lvbnMsIG1vbml0b3IpOwotICAgICAgICAJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgICAgCXsKLSAgICAgICAgCQlyZXR1cm4gc3RhdHVzOwotICAgICAgICAJfSAgICAgIAotICAgICAgICB9Ci0gICAgICAgICAgICAgCi0gICAgICAgIGlmIChmYWNldFJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAJLy8gYWRkIHRoZSBkZWZhdWx0IGZhY2V0cyB0aGF0J3Mgbm90IGluIGNvbmZsaWN0IHdpdGggdGhlIGV4aXN0aW5nIGZhY2V0cwotICAgICAgICAJU2V0IHByb2plY3RGYWNldFZlcnNpb25TZXQgPSBmcHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgIAlTZXQgcHJvamVjdEZhY2V0U2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgCS8vIGdldCB0aGUgcHJvamVjdCBmYWNldCBmcm9tIHRoZSBwcm9qZWN0IGZhY2V0IHZlcnNpb24gd2UgY2FsY3VsYXRlZAotICAgICAgICAJZm9yIChJdGVyYXRvciBpdGVyID0gcHJvamVjdEZhY2V0VmVyc2lvblNldC5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgICAgICAgCQlJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0ZXIubmV4dCgpOwotICAgICAgICAJCXByb2plY3RGYWNldFNldC5hZGQocGZ2LmdldFByb2plY3RGYWNldCgpKTsKLSAgICAgICAgCX0KLSAgICAgICAgCXRyeSB7Ci0gICAgICAgIAkJU2V0IGRlZmF1bHRQcm9qZWN0RmFjZXRWZXJzaW9uU2V0ID0gZmFjZXRSdW50aW1lLmdldERlZmF1bHRGYWNldHMocHJvamVjdEZhY2V0U2V0KTsKLSAgICAgICAgCQkvLyBUaGUgcmV0dXJuZWQgZGVmYXVsdEZhY2V0U2V0IGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBwcm9qZWN0RmFjZXRTZXQgcGFzc2VkIGludG8gZ2V0RGVmYXVsdEZhY2V0cwotICAgICAgICAJCS8vIHBsdXMgYW55IGRlZmF1bHQgZmFjZXRzIHRoYXQgYXJlIG5vdCBpbiBjb25mbGljdCB3aXRoIHRoZSBvcmlnaW5hbCBwcm9qZWN0RmFjZXRTZXQuCi0gICAgICAgIAkJLy8gQWRkIHRvIGZhY2V0c1RvQWRkIGlmIHRoZSB0aGUgZGVmYXVsdCBmYWNldCBpcyBub3QgaW4gdGhlIG9yaWdpbmFsIHNldC4KLSAgICAgICAgCQlTZXQgZGVmYXVsdEZhY2V0c1RvQWRkID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgCQlmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBkZWZhdWx0UHJvamVjdEZhY2V0VmVyc2lvblNldC5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgICAgICAgCQkJSVByb2plY3RGYWNldFZlcnNpb24gZGVmYXVsdFByb2pGYWNldFZlcnNpb24gPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0ZXIubmV4dCgpOwotICAgICAgICAJCQlpZiggISBwcm9qZWN0RmFjZXRTZXQuY29udGFpbnMoIGRlZmF1bHRQcm9qRmFjZXRWZXJzaW9uLmdldFByb2plY3RGYWNldCgpICkgKQotICAgICAgICAJCQl7Ci0gICAgICAgIAkJCQlkZWZhdWx0RmFjZXRzVG9BZGQuYWRkKGRlZmF1bHRQcm9qRmFjZXRWZXJzaW9uKTsKLSAgICAgICAgCQkJfQotICAgICAgICAJCX0KLSAgICAgICAgCQlpZiAoIWRlZmF1bHRGYWNldHNUb0FkZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgCQkJc3RhdHVzID0gRmFjZXRVdGlscy5hZGRGYWNldHNUb1Byb2plY3QoZnByb2plY3QsIGRlZmF1bHRGYWNldHNUb0FkZCk7Ci0gICAgICAgIAkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICAJCQl7Ci0gICAgICAgIAkJCQlyZXR1cm4gc3RhdHVzOwotICAgICAgICAJCQl9ICAgIAotICAgICAgICAJCX0KLSAgICAgICAgCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotICAgICAgICAJCS8vIElmIHRoZXJlJ3MgYW55IGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBnZXQgdGhlIGRlZmF1bHQgZmFjZXQsIGp1c3QgaWdub3JlIHRoZSBkZWZhdWx0IGZhY2V0Ci0gICAgICAgIAkJLy8gYW5kIHJldHVybiB0aGUgb3JpZ2luYWwgZmFjZXRzVG9BZGQuCi0gICAgICAgIAl9Ci0gICAgICAgIAkvLyBlbmQgb2YgYWRkaW5nIGRlZmF1bHQgZmFjZXRzCi0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSB9KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSBJU3RhdHVzIGNoZWNrRGF0YVJlYWR5KCkKLSAgewotCi0JaWYgKHByb2plY3ROYW1lID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7cHJvamVjdE5hbWV9KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgZmFjZXRzIHRvIGluc3RhbGwgb24gdGhlIG5ldyBwcm9qZWN0LiBUaGUgc2V0IHdpbGwgY29uc2lzdAotICAgKiBvZiB0aGUgaGlnaGVzdCB2ZXJzaW9uIG9mIGVhY2ggb2YgdGhlIHRlbXBsYXRlJ3MgZml4ZWQgZmFjZXRzIHRoYXQgc2F0aWZpZXMKLSAgICogYm90aCB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgYW5kIHRoZSBmYWNldCBydW50aW1lLgotICAgKiBAcmV0dXJuIFNldCBhIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUgSVByb2plY3RGYWNldFZlcnNpb24uCi0gICAqLwotICBwcml2YXRlIFNldCBnZXRGYWNldHNUb0FkZCgpCi0gIHsKLSAgICBTZXQgZmFjZXRzID0gbnVsbDsKLSAgICAKLSAgICAvL1NldCB0aGUgZmFjZXQgcnVudGltZS4KLSAgICBzZXRGYWNldFJ1bnRpbWUoKTsKLSAgICAvL0dldCBhbGwgZmFjZXQgdmVyc2lvbiBjb21iaW5hdGlvbnMgZm9yIHRoZSB0ZW1wbGF0ZSBpbiBvcmRlciBvZiBhc2NlbmRpbmcgdmVyc2lvbiBudW1iZXJzLgotICAgIFNldFtdIGFsbENvbWJpbmF0aW9ucyA9IEZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZS5nZXRJbnN0YW5jZSgpLmdldEZhY2V0VmVyc2lvbkNvbWJpbmF0aW9uc0Zyb21UZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLSAgICBpbnQgbiA9IGFsbENvbWJpbmF0aW9ucy5sZW5ndGg7Ci0gICAgaWYgKGZhY2V0UnVudGltZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vV2FsayB0aGUgZmFjZXQgdmVyc2lvbiBjb21iaW5hdGlvbnMgaW4gb3JkZXIgb2YgZGVzY2VuZGluZyB2ZXJzaW9uIG51bWJlcnMuCi0gICAgICBmb3IgKGludCBpPW4tMTsgaT49MDsgaS0tKQotICAgICAgewotICAgICAgICAvL0NoZWNrIHRoaXMgdGVtcGxhdGUgY29tYmluYXRpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCBib3RoIHRoZSAKLSAgICAgICAgLy9yZXF1aXJlZCBmYWNldCB2ZXJzaW9ucyBhbmQgdGhlIHNlcnZlciBydW50aW1lLiBJZiBpdCBpcywgY2hvb3NlIGl0LgotICAgICAgICBTZXQgY29tYmluYXRpb24gPSBhbGxDb21iaW5hdGlvbnNbaV07Ci0gICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0VXRpbHMubWF0Y2gocmVxdWlyZWRGYWNldFZlcnNpb25zLCBjb21iaW5hdGlvbik7Ci0gICAgICAgIGlmIChmbS5pc01hdGNoKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvL0NoZWNrIGFnYWluc3QgUnVudGltZQotICAgICAgICAgIGlmIChGYWNldFV0aWxzLmRvZXNSdW50aW1lU3VwcG9ydEZhY2V0cyhmYWNldFJ1bnRpbWUsIGNvbWJpbmF0aW9uKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL1dlIGhhdmUgYSBtYXRjaC4gVXNlIHRoaXMgY29tYmluYXRpb24gb2YgZmFjZXQgdmVyc2lvbnMgZm9yIHByb2plY3QgY3JlYXRpb24uCi0gICAgICAgICAgICBmYWNldHMgPSBjb21iaW5hdGlvbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZm9yIChpbnQgaT1uLTE7IGk+PTA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgLy9DaGVjayB0aGlzIHRlbXBsYXRlIGNvbWJpbmF0aW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggYm90aCB0aGUgCi0gICAgICAgIC8vc2VydmljZS9jbGllbnQgcnVudGltZSBhbmQgdGhlIHNlcnZlciBydW50aW1lLiBJZiBpdCBpcywgY2hvb3NlIGl0LgotICAgICAgICBTZXQgY29tYmluYXRpb24gPSBhbGxDb21iaW5hdGlvbnNbaV07Ci0gICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0VXRpbHMubWF0Y2gocmVxdWlyZWRGYWNldFZlcnNpb25zLCBjb21iaW5hdGlvbik7Ci0gICAgICAgIGlmIChmbS5pc01hdGNoKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vV2UgaGF2ZSBhIG1hdGNoLiBVc2UgdGhpcyBjb21iaW5hdGlvbiBvZiBmYWNldCB2ZXJzaW9ucyBmb3IgcHJvamVjdCBjcmVhdGlvbi4KLSAgICAgICAgICAgIGZhY2V0cyA9IGNvbWJpbmF0aW9uOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgCi0gICAgICB9ICAgICAgCi0gICAgfQotICAgCi0gICAgLy9Vbmxpa2VseSB0byBnZXQgdG8gdGhpcyBwb2ludCBpbiB0aGUgY29kZSwgYnV0IGlmIHdlIGRvLCBjaG9vc2UgdGhlIGhpZ2hlc3QgdmVyc2lvbgotICAgIC8vb2YgZWFjaCBmaXhlZCBmYWNldCBpbiB0aGUgdGVtcGxhdGUuCi0gICAgaWYgKGZhY2V0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGZhY2V0cyA9IEZhY2V0VXRpbHMuZ2V0SW5pdGlhbEZhY2V0VmVyc2lvbnNGcm9tVGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgfQotICAgICAKLSAgICByZXR1cm4gZmFjZXRzOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGZhY2V0UnVudGltZSBhdHRyaWJ1dGUgYmFzZWQgb24gdGhlIHNlcnZlckluc3RhbmNlSWQgb3Igc2VydmVyRmFjdG9yeUlkCi0gICAqIFByZWZlcmVuY2UgaXMgZ2l2ZW4gdG8gbm9uLXN0dWIgZmFjZXQgcnVudGltZXMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2V0RmFjZXRSdW50aW1lKCkKLSAgewotICAgIAotCSAgaWYgKHNlcnZlckluc3RhbmNlSWQgIT0gbnVsbCAmJiBzZXJ2ZXJJbnN0YW5jZUlkLmxlbmd0aCgpPjApCi0JICB7Ci0JCSAgSVNlcnZlciBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0JCSAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBzZXJ2ZXIuZ2V0UnVudGltZSgpOwotCQkgIGZhY2V0UnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKHNSdW50aW1lKTsgICAgICAKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLQkJICBpZiAoc2VydmVyRmFjdG9yeUlkICE9IG51bGwgJiYgc2VydmVyRmFjdG9yeUlkLmxlbmd0aCgpID4gMCkKLQkJICB7Ci0JCQkgIC8vRmluZCBhIG5vbiBTdHViIHJ1bnRpbWUgdGhhdCBtYXRjaGVzIHRoaXMgc2VydmVyIHR5cGUKLQkJCSAgSVJ1bnRpbWUgc2VydmVyUnVudGltZSA9IFNlcnZlclV0aWxzLmdldE5vblN0dWJSdW50aW1lKHNlcnZlckZhY3RvcnlJZCk7Ci0JCQkgIGlmIChzZXJ2ZXJSdW50aW1lICE9IG51bGwpCi0JCQkgIHsKLQkJCQkgIGZhY2V0UnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKHNlcnZlclJ1bnRpbWUpOwotCQkJICB9Ci0JCQkgIGVsc2UKLQkJCSAgewotCQkJCSAgLy9BY2NlcHQgc3R1YiBydW50aW1lLgotCQkJCSAgSVNlcnZlclR5cGUgc3QgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0JCQkJICBTdHJpbmcgcnVudGltZVR5cGVJZCA9IHN0LmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsgICAKLQkJCQkgIC8vRmluZCB0aGUgZmFjZXQgcnVudGltZQotCQkJCSAgSVJ1bnRpbWVbXSBydW50aW1lcyA9IFNlcnZlckNvcmUuZ2V0UnVudGltZXMoKTsKLQkJCQkgIGZvciAoaW50IGk9MDsgaTxydW50aW1lcy5sZW5ndGg7IGkrKykKLQkJCQkgIHsKLQkJCQkJICBJUnVudGltZSBzUnVudGltZSA9IHJ1bnRpbWVzW2ldOwotCQkJCQkgIGlmIChzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCkuZXF1YWxzKHJ1bnRpbWVUeXBlSWQpKQotCQkJCQkgIHsKLQkJCQkJCSAgZmFjZXRSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoc1J1bnRpbWUpOwotCQkJCQkgIH0KLQkJCQkgIH0gICAgICAgICAgICAgICAgCi0JCQkgIH0KLQkJICB9Ci0JICB9Ci0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdE5hbWUoU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgdGhpcy5wcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lOwotICB9ICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRlbXBsYXRlSWQoU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICB0aGlzLnRlbXBsYXRlSWQgPSB0ZW1wbGF0ZUlkOwotICB9ICAgIAotCi0gIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJlcXVpcmVkRmFjZXRWZXJzaW9ucykKLSAgewotICAgIHRoaXMucmVxdWlyZWRGYWNldFZlcnNpb25zID0gcmVxdWlyZWRGYWNldFZlcnNpb25zOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpCi0gIHsKLSAgICB0aGlzLnNlcnZlckZhY3RvcnlJZCA9IHNlcnZlckZhY3RvcnlJZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWQpCi0gIHsKLSAgICB0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwotICB9Ci0KLSAgCi0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZUphdmFQcm9qZWN0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVKYXZhUHJvamVjdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5MDM0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZUphdmFQcm9qZWN0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkphdmFSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlSmF2YVByb2plY3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJvamVjdE5hbWVfOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IENUT1IKLSAgICovCi0gIHB1YmxpYyBDcmVhdGVKYXZhUHJvamVjdENvbW1hbmQoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWVfKTsKLSAgICAKLSAgICBpZiAocHJvamVjdCAhPSBudWxsICYmICFwcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBwcm9qZWN0LmNyZWF0ZShSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKSwgbW9uaXRvcik7Ci0gICAgICAgIHByb2plY3Qub3Blbihtb25pdG9yKTsKLSAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOwotICAgICAgICBkZXNjLnNldE5hdHVyZUlkcyhuZXcgU3RyaW5nW10ge0phdmFDb3JlLk5BVFVSRV9JRH0pOwotICAgICAgICBJQ29tbWFuZCBjbWQgPSBkZXNjLm5ld0NvbW1hbmQoKTsKLSAgICAgICAgY21kLnNldEJ1aWxkZXJOYW1lKEphdmFDb3JlLkJVSUxERVJfSUQpOwotICAgICAgICBkZXNjLnNldEJ1aWxkU3BlYyhuZXcgSUNvbW1hbmRbXSB7Y21kfSk7Ci0gICAgICAgIHByb2plY3Quc2V0RGVzY3JpcHRpb24oZGVzYywgbW9uaXRvcik7Ci0gICAgICAgIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgUGF0aCBwcm9qZWN0Um9vdCA9IG5ldyBQYXRoKFBhdGguUk9PVC5hcHBlbmQobmV3IFBhdGgocHJvamVjdC5nZXROYW1lKCkpKS50b1N0cmluZygpKTsKLSAgICAgICAgamF2YVByb2plY3Quc2V0UmF3Q2xhc3NwYXRoKG5ldyBJQ2xhc3NwYXRoRW50cnlbXSB7SmF2YUNvcmUubmV3U291cmNlRW50cnkocHJvamVjdFJvb3QpLCBKYXZhQ29yZS5uZXdDb250YWluZXJFbnRyeShuZXcgUGF0aChKYXZhUnVudGltZS5KUkVfQ09OVEFJTkVSKSl9LCBtb25pdG9yKTsKLSAgICAgICAgamF2YVByb2plY3Quc2V0T3V0cHV0TG9jYXRpb24ocHJvamVjdFJvb3QsIG1vbml0b3IpOwotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfSkFWQV9QUk9KRUNULCBuZXcgU3RyaW5nW10ge3Byb2plY3ROYW1lX30pLCBjZSk7Ci0gICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3ROYW1lKFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIHByb2plY3ROYW1lXyA9IHByb2plY3ROYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZU1vbml0b3JDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZU1vbml0b3JDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0Yjg4NmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVNb25pdG9yQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLklNb25pdG9yZWRTZXJ2ZXJQb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JU2VydmVyTW9uaXRvck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlNlcnZlck1vbml0b3JNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlTW9uaXRvckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXRUJfU0VSVklDRVMgPSAiV2ViIHNlcnZpY2VzIjsKLQotICBwcml2YXRlIEJvb2xlYW4gbW9uaXRvclNlcnZpY2U7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlckluc3RhbmNlSWQ7Ci0KLSAgcHJpdmF0ZSBJbnRlZ2VyIG1vbml0b3JlZFBvcnQ7Ci0KLSAgcHVibGljIENyZWF0ZU1vbml0b3JDb21tYW5kKCkgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgICBpZiAobW9uaXRvclNlcnZpY2UgIT0gbnVsbCAmJiBtb25pdG9yU2VydmljZS5ib29sZWFuVmFsdWUoKSkgewotICAgICAgSVNlcnZlciBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmljZVNlcnZlckluc3RhbmNlSWQpOwotICAgICAgaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0KLSAgICAgICAgLy8gSU1vbml0b3JhYmxlU2VydmVyIG1vbml0b3JhYmxlU2VydmVyID0gKElNb25pdG9yYWJsZVNlcnZlcikKLSAgICAgICAgLy8gc2VydmVyRGVsZWdhdGU7Ci0gICAgICAgIFNlcnZlclBvcnRbXSBwb3J0cyA9IHNlcnZlci5nZXRTZXJ2ZXJQb3J0cyhudWxsKTsKLSAgICAgICAgU2VydmVyUG9ydCBwb3J0ID0gbnVsbDsKLSAgICAgICAgZm9yIChpbnQgaXQgPSAwOyBpdCA8IHBvcnRzLmxlbmd0aDsgaXQrKykgewotICAgICAgICAgIFNlcnZlclBvcnQgcCA9IHBvcnRzW2l0XTsKLSAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBwLmdldFByb3RvY29sKCk7Ci0gICAgICAgICAgaWYgKHByb3RvY29sICE9IG51bGwgJiYgcHJvdG9jb2wudHJpbSgpLnRvTG93ZXJDYXNlKCkuZXF1YWxzKCJodHRwIikpIHsKLSAgICAgICAgICAgIHBvcnQgPSBwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3J0ICE9IG51bGwpIHsKLSAgICAgICAgICBJU2VydmVyTW9uaXRvck1hbmFnZXIgc2VydmVyTW9uaXRvck1hbmFnZXIgPSBTZXJ2ZXJNb25pdG9yTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotICAgICAgICAgIElNb25pdG9yZWRTZXJ2ZXJQb3J0W10gbW9uaXRvcmVkUG9ydHMgPSBzZXJ2ZXJNb25pdG9yTWFuYWdlci5nZXRNb25pdG9yZWRQb3J0cyhzZXJ2ZXIpOwotICAgICAgICAgIGZvciAoaW50IGl0MiA9IDA7IGl0MiA8IG1vbml0b3JlZFBvcnRzLmxlbmd0aDsgaXQyKyspIHsKLSAgICAgICAgICAgIElNb25pdG9yZWRTZXJ2ZXJQb3J0IGltc1BvcnQgPSBtb25pdG9yZWRQb3J0c1tpdDJdOwotICAgICAgICAgICAgaWYgKHBvcnQuZ2V0UG9ydCgpID09IGltc1BvcnQuZ2V0U2VydmVyUG9ydCgpLmdldFBvcnQoKSAmJiBoYXNDb250ZW50V2ViU2VydmljZXMoaW1zUG9ydCkpIC8vIHBvcnQKLSAgICAgICAgICAgIC8vIGFscmVhZHkKLSAgICAgICAgICAgIC8vIGJlaW5nCi0gICAgICAgICAgICAvLyBtb25pdG9yZWQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCFpbXNQb3J0LmlzU3RhcnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgIHNlcnZlck1vbml0b3JNYW5hZ2VyLnN0YXJ0TW9uaXRvcihpbXNQb3J0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLSAgICAgICAgICAgICAgICAgIElTdGF0dXMgZXJyb3IgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IFN0cmluZy52YWx1ZU9mKHBvcnQuZ2V0UG9ydCgpKSwgc2VydmVyLmdldE5hbWUoKX0pLCBjZSk7Ci0gICAgICAgICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgbW9uaXRvcmVkUG9ydCA9IG5ldyBJbnRlZ2VyKGltc1BvcnQuZ2V0TW9uaXRvclBvcnQoKSk7Ci0gICAgICAgICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgSU1vbml0b3JlZFNlcnZlclBvcnQgaW1zUG9ydCA9IHNlcnZlck1vbml0b3JNYW5hZ2VyLmNyZWF0ZU1vbml0b3Ioc2VydmVyLCBwb3J0LCAtMSwgbmV3IFN0cmluZ1tdIHsgV0VCX1NFUlZJQ0VTfSk7Ci0gICAgICAgICAgICBzZXJ2ZXJNb25pdG9yTWFuYWdlci5zdGFydE1vbml0b3IoaW1zUG9ydCk7Ci0gICAgICAgICAgICBtb25pdG9yZWRQb3J0ID0gbmV3IEludGVnZXIoaW1zUG9ydC5nZXRNb25pdG9yUG9ydCgpKTsKLSAgICAgICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotICAgICAgICAgICAgSVN0YXR1cyBlcnJvciA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUiwgbmV3IE9iamVjdFtdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2YocG9ydC5nZXRQb3J0KCkpLCBzZXJ2ZXIuZ2V0TmFtZSgpfSksIGNlKTsKLSAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGVsc2UgewotICAgICAgICAgIElTdGF0dXMgaW5mbyA9IFN0YXR1c1V0aWxzLmluZm9TdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0lORk9fTU9OSVRPUklOR19OT1RfU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IHNlcnZlci5nZXROYW1lKCl9KSApOwotICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0SW5mbyhpbmZvKTsKLSAgICAgICAgICByZXR1cm4gaW5mbzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNDb250ZW50V2ViU2VydmljZXMoSU1vbml0b3JlZFNlcnZlclBvcnQgaW1zUG9ydCkgewotICAgIFN0cmluZ1tdIGNvbnRlbnRzID0gaW1zUG9ydC5nZXRDb250ZW50VHlwZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRzLmxlbmd0aDsgaSsrKQotICAgICAgaWYgKFdFQl9TRVJWSUNFUy5lcXVhbHMoY29udGVudHNbaV0pKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIpIHsKLSAgICB0aGlzLnNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkID0gdHlwZVJ1bnRpbWVTZXJ2ZXIuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKSB7Ci0gICAgdGhpcy5zZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkOwotICB9Ci0KLSAgcHVibGljIEludGVnZXIgZ2V0TW9uaXRvcmVkUG9ydCgpIHsKLSAgICByZXR1cm4gbW9uaXRvcmVkUG9ydDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpIHsKLSAgICBtb25pdG9yU2VydmljZSA9IHZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZVNlcnZlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlU2VydmVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDU4NzNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlU2VydmVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEzMCAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzEyMTAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBDcmVhdGVTZXJ2ZXJDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUnVudGltZUlkOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIHNlcnZlciBvZiB0aGUgZmFjdG9yeSBpZCB1c2luZyB0aGUgc2VydmVyIHJ1bnRpbWUgSWQgaWYgcHJvdmlkZWQKLQkgKiBOb3RlMTogQ2hlY2tpbmcgZm9yIHNlcnZlciBpbnN0YW5jZSA9PSBudWxsIGlzIGRvbmUgaW4gdGhlIFByZVNlcnZpY2UvQ2xpZW50SW5zdGFsbENvbW1hbmRzCi0JICogTm90ZTI6IFJlcG9ydGluZyBvZiBlcnJvcnMgaXMgZG9uZSBpbiBQcmVTZXJ2aWNlL0NsaWVudEluc3RhbGxDb21tYW5kczsgc2ltcGx5IHJldHVybiB0aGUgc3RhdHVzLgotCSAqLwotCXB1YmxpYyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCl7Ci0JfQotCQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCQotCQlpZiAoc2VydmVyRmFjdG9yeUlkPT1udWxsKXsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0NSRUFURV9TRVJWRVIgKTsKLQkJCXJldHVybiBzdGF0dXM7CQkJCi0JCX0KLQkJCi0JCUlTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXQyA9IG51bGw7Ci0JCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0JCQlpZiAoc2VydmVyVHlwZSE9bnVsbCkgewotCQkJCQotCQkJCUlSdW50aW1lIHNlcnZlclJ1bnRpbWUgPSBudWxsOwotCQkJCWlmIChzZXJ2ZXJSdW50aW1lSWQgIT0gbnVsbCkgewotCQkJCQlzZXJ2ZXJSdW50aW1lID0gU2VydmVyQ29yZS5maW5kUnVudGltZShzZXJ2ZXJSdW50aW1lSWQpOyAgLy8gbWF5IHJldHVybiBudWxsIGlmIG5vIHJ1bnRpbWUgaXMgZm91bmQKLQkJCQl9Ci0JCQkJCi0JCQkJaWYgKHNlcnZlclJ1bnRpbWUgPT0gbnVsbCkgeyAvLyBlaXRoZXIgc2VydmVyUnVudGltZUlkIGlzIG51bGwgb3IgZGlkIG5vdCBmaW5kIGEgcnVudGltZSB3aXRoIHRoYXQgSWQKLQkJCQkJLy9DaG9vc2UgYSBSdW50aW1lIHdoaWNoIGlzIG5vdCBhIHN0dWIKLQkJCQkJSVJ1bnRpbWUgbm9uU3R1YlJ1bnRpbWUgPSBudWxsOwotCQkJCQlJUnVudGltZVtdIHJ1bnRpbWVzID0gU2VydmVyVXRpbC5nZXRSdW50aW1lcyhudWxsLCBudWxsKTsKLQkJCQkJU3RyaW5nIHNlcnZlclJ1bnRpbWVUeXBlSWQgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5sZW5ndGg7IGkrKykgewotCQkJCQkJSVJ1bnRpbWUgcnVudGltZSA9IHJ1bnRpbWVzW2ldOwotCQkJCQkJU3RyaW5nIHRoaXNSdW50aW1lVHlwZUlkID0gcnVudGltZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0JCQkJCQlpZiAodGhpc1J1bnRpbWVUeXBlSWQuZXF1YWxzKHNlcnZlclJ1bnRpbWVUeXBlSWQpICYmICFydW50aW1lLmlzU3R1YigpKSB7Ci0JCQkJCQkJLy9Gb3VuZCBhbiBhcHByb3ByaWF0ZSBJUnVudGltZSB0aGF0IGlzIG5vdCBhIHN0dWIKLQkJCQkJCQlub25TdHViUnVudGltZSA9IHJ1bnRpbWU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0JCQkJCi0KLQkJCQkJaWYgKG5vblN0dWJSdW50aW1lPT1udWxsKQotCQkJCQl7CQkJCQkKLQkJCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TVFVCX09OTFksbmV3IFN0cmluZ1tde3NlcnZlckZhY3RvcnlJZH0pICk7Ci0JCQkJCQlyZXR1cm4gc3RhdHVzOwkJCQkJCi0JCQkJCX0KLQotCQkJCQlzZXJ2ZXJSdW50aW1lID0gbm9uU3R1YlJ1bnRpbWU7Ci0JCQkJfSAKLQkJCQkKLQkJCQlpZiAoZW52IT1udWxsKQotCQkJCXsKLQkJCQkJc2VydmVyV0MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihudWxsLCBudWxsLCBzZXJ2ZXJSdW50aW1lLCBtb25pdG9yICk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7CQkJCQkKLQkJCQkJc2VydmVyV0MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihudWxsLCBudWxsLCBzZXJ2ZXJSdW50aW1lLCBudWxsKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYgKHNlcnZlcldDICE9IG51bGwpIHsKLQkJCQkJaWYgKGVudiE9bnVsbCkKLQkJCQkJCXNlcnZlciA9IHNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbW9uaXRvciApOwotCQkJCQllbHNlCi0JCQkJCQlzZXJ2ZXIgPSBzZXJ2ZXJXQy5zYXZlQWxsKHRydWUsIG51bGwpOwotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0NSRUFURV9TRVJWRVIsIGNlKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJCi0JCS8vIHNldCBzZXJ2ZXJJbnN0YW5jZUlkCi0JCWlmIChzZXJ2ZXIhPW51bGwpCi0JCQlzZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVyLmdldElkKCk7Ci0JCWVsc2UgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0NSRUFURV9TRVJWRVIgKTsJCQkKLQkJfQotCQkKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJGYWN0b3J5aWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLQl7Ci0JCXRoaXMuc2VydmVyRmFjdG9yeUlkID0gc2VydmVyRmFjdG9yeUlkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZlclJ1bnRpbWVJZChTdHJpbmcgc2VydmVyUnVudGltZUlkKQotCXsKLQkJdGhpcy5zZXJ2ZXJSdW50aW1lSWQgPSBzZXJ2ZXJSdW50aW1lSWQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpCi0JewotCQlyZXR1cm4gc2VydmVySW5zdGFuY2VJZDsKLQl9Ci0JCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Rpc2FibGVCdWlsZENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vRGlzYWJsZUJ1aWxkQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTJjY2JmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vRGlzYWJsZUJ1aWxkQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLnZhbGlkYXRlLlZhbGlkYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotCi1wdWJsaWMgY2xhc3MgRGlzYWJsZUJ1aWxkQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCi0gIHByaXZhdGUgVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlcl87Ci0gIC8qKgotICAgKiBDVE9SOwotICAgKi8KLSAgcHVibGljIERpc2FibGVCdWlsZENvbW1hbmQoKQotICB7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydCggbW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5UQVNLX0RFU0NfV0VCU0VSVklDRV9ESVNBQkxFX0JVSUxEKTsKLQotICAgIGlmIChtYW5hZ2VyXyE9bnVsbCkgewotICAgICAgbWFuYWdlcl8uZGlzYWJsZUF1dG9CdWlsZCgpOwotICAgIH0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgbW9kZWwKLSAgICogCi0gICAqIEBwYXJhbSBtb2RlbAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TW9kZWwoTW9kZWwgbW9kZWwpIHsKLSAgfSAgCi0gIAotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBtYW5hZ2VyXyBUaGUgbWFuYWdlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1hbmFnZXIoVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlcikgewotICAgIHRoaXMubWFuYWdlcl8gPSBtYW5hZ2VyOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vRGlzYWJsZVZhbGlkYXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Rpc2FibGVWYWxpZGF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDVkZmNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vRGlzYWJsZVZhbGlkYXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGUuVmFsaWRhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgRGlzYWJsZVZhbGlkYXRpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0KLSAgcHJpdmF0ZSBWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyXzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdF87Ci0KLSAgLyoqCi0gICAqIENUT1I7Ci0gICAqLwotICBwdWJsaWMgRGlzYWJsZVZhbGlkYXRpb25Db21tYW5kKCkgewotICB9Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5UQVNLX0RFU0NfV0VCU0VSVklDRV9ESVNBQkxFX1ZBTElEQVRJT04pOwotCi0gICAgSVByb2plY3QgcHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0XzsKLSAgICBpZiAocHJvamVjdCAhPSBudWxsKSBtYW5hZ2VyXy5kaXNhYmxlVmFsaWRhdGlvbkZvclByb2plY3QocHJvamVjdCk7Ci0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBtYW5hZ2VyXwotICAgKiAgICAgICAgICAgIFRoZSBtYW5hZ2VyXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWFuYWdlcihWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyKSB7Ci0gICAgdGhpcy5tYW5hZ2VyXyA9IG1hbmFnZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KXsKLSAgICB0aGlzLnNlcnZpY2VQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0dldE1vbml0b3JDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0dldE1vbml0b3JDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MGNkNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9HZXRNb25pdG9yQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYxMiAgIDE0NjU2NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLS8vIFRPRE86IEdldCByaWQgb2YgdGhpcy4gQSByZXBsYWNlbWVudCBpcyBpbiBvcmcuZWNsaXBzZS53c3Qud3MuCi0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uV1NETFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vbml0b3JXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLk1vbml0b3JDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS51dGlsLlNvY2tldFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgR2V0TW9uaXRvckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIGJvb2xlYW4gbW9uaXRvclNlcnZpY2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGU7Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5RW5kcG9pbnQ7Ci0KLSAgcHVibGljIEdldE1vbml0b3JDb21tYW5kKCkKLSAgewotICAgIG1vbml0b3JTZXJ2aWNlID0gdHJ1ZTsKLSAgICBjcmVhdGUgPSB0cnVlOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgICBlbmRwb2ludHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWYgKG1vbml0b3JTZXJ2aWNlICYmIHdzZGxVUkkgIT0gbnVsbCAmJiB3c2RsVVJJLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgCXdlYlNlcnZpY2VzUGFyc2VyID0gV1NETFBhcnNlckZhY3RvcnkuZ2V0V1NETFBhcnNlcigpOwotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSSSk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3Igc2VydmljZXNJdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IHNlcnZpY2VzSXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKXNlcnZpY2VzSXQubmV4dCgpOwotICAgICAgICAgIE1hcCBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIHBvcnRzSXQgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBwb3J0c0l0Lmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgUG9ydCB3c2RsUG9ydCA9IChQb3J0KXBvcnRzSXQubmV4dCgpOwotICAgICAgICAgICAgTGlzdCBleHRFbGVtZW50cyA9IHdzZGxQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBleHRFbGVtZW50c0l0ID0gZXh0RWxlbWVudHMuaXRlcmF0b3IoKTsgZXh0RWxlbWVudHNJdC5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1lbnRzSXQubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgZW5kcG9pbnQgPSBudWxsOwotICAgICAgICAgICAgICBVUkwgZW5kcG9pbnRVUkwgPSBudWxsOwotICAgICAgICAgICAgICBpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gKChTT0FQQWRkcmVzcylleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICAgICAgICBlbHNlIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgICAgICAgICAgICAgZW5kcG9pbnQgPSAoKEhUVFBBZGRyZXNzKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICAgIGlmIChlbmRwb2ludCAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZW5kcG9pbnRVUkwgPSBuZXcgVVJMKGVuZHBvaW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChlbmRwb2ludFVSTCAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gZW5kcG9pbnRVUkwuZ2V0UHJvdG9jb2woKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaG9zdCA9IGVuZHBvaW50VVJMLmdldEhvc3QoKTsKLSAgICAgICAgICAgICAgICBpbnQgcG9ydCA9IGVuZHBvaW50VVJMLmdldFBvcnQoKTsKLSAgICAgICAgICAgICAgICBpZiAocG9ydCA9PSAtMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAoImh0dHAiLmVxdWFsc0lnbm9yZUNhc2UocHJvdG9jb2wpKQotICAgICAgICAgICAgICAgICAgICBwb3J0ID0gODA7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICgiaHR0cHMiLmVxdWFsc0lnbm9yZUNhc2UocHJvdG9jb2wpKQotICAgICAgICAgICAgICAgICAgICBwb3J0ID0gNDQzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC5zdGFydHNXaXRoKCJodHRwIikgJiYgaG9zdCAhPSBudWxsICYmIGhvc3QubGVuZ3RoKCkgPiAwICYmIHBvcnQgIT0gLTEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgSU1vbml0b3IgbSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICBJTW9uaXRvcltdIG1vbml0b3JzID0gTW9uaXRvckNvcmUuZ2V0TW9uaXRvcnMoKTsKLSAgICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxtb25pdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3QuZXF1YWxzSWdub3JlQ2FzZShtb25pdG9yc1tpXS5nZXRSZW1vdGVIb3N0KCkpICYmIHBvcnQgPT0gbW9uaXRvcnNbaV0uZ2V0UmVtb3RlUG9ydCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgbSA9IG1vbml0b3JzW2ldOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBpZiAobSA9PSBudWxsICYmIGNyZWF0ZSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG1vbml0b3JlZFBvcnQgPSBTb2NrZXRVdGlsLmZpbmRVbnVzZWRQb3J0KDUwMDAsIDE1MDAwKTsKLSAgICAgICAgICAgICAgICAgICAgSU1vbml0b3JXb3JraW5nQ29weSBtb25pdG9yV29ya2luZ0NvcHkgPSBNb25pdG9yQ29yZS5jcmVhdGVNb25pdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1vbml0b3JXb3JraW5nQ29weS5zZXRMb2NhbFBvcnQobW9uaXRvcmVkUG9ydCk7Ci0gICAgICAgICAgICAgICAgICAgIG1vbml0b3JXb3JraW5nQ29weS5zZXRSZW1vdGVIb3N0KGhvc3QpOwotICAgICAgICAgICAgICAgICAgICBtb25pdG9yV29ya2luZ0NvcHkuc2V0UmVtb3RlUG9ydChwb3J0KTsKLSAgICAgICAgICAgICAgICAgICAgbW9uaXRvcldvcmtpbmdDb3B5LnNldFByb3RvY29sKCJIVFRQIik7Ci0gICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgbSA9IG1vbml0b3JXb3JraW5nQ29weS5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgSVN0YXR1cyB3YXJuaW5nID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1IsIG5ldyBPYmplY3RbXXtTdHJpbmcudmFsdWVPZihwb3J0KSwgZW5kcG9pbnR9KSwgdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudiAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydCh3YXJuaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBzZSkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBpZiAobSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIAkJaWYgKCFtLmlzUnVubmluZygpKQotICAgICAgICAgICAgICAgICAgICAgIAkJCW0uc3RhcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAJCS8vIFVzZSB0aGUgZW5kcG9pbnQgdGhhdCBtYXRjaGVzIHdpdGggdGhlIHByb3h5IHRoZSBleHRlbnNpb24gcGFzc2VzIHRvIHVzIGlmIGl0IGlzIHNldAotICAgICAgICAgICAgICAgICAgICAgIAkJaWYgKHByb3h5RW5kcG9pbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgIAkJCXRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgCQkJCWVuZHBvaW50VVJMID0gbmV3IFVSTChwcm94eUVuZHBvaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAJCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgCQkJICAgICAgICAgICAgICAgIHsgCi0gICAgICAgICAgICAgICAgICAgICAgCQkJCS8vIGlnbm9yZSBwcm94eSBlbmRwb2ludCAKLSAgICAJCQkgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIAkJfQotICAgICAgICAgICAgICAgICAgICAgIAkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihlbmRwb2ludFVSTC5nZXRQcm90b2NvbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAJCXNiLmFwcGVuZCgiOi8vbG9jYWxob3N0OiIpOwotICAgICAgICAgICAgICAgICAgICAgIAkJc2IuYXBwZW5kKFN0cmluZy52YWx1ZU9mKG0uZ2V0TG9jYWxQb3J0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAJCXNiLmFwcGVuZChlbmRwb2ludFVSTC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgICAgICAgICAgIAkJZW5kcG9pbnRzLmFkZChzYi50b1N0cmluZygpKTsKLSAgICAJCQkJCX0KLSAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBJU3RhdHVzIHdhcm5pbmcgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUiwgbmV3IE9iamVjdFtde1N0cmluZy52YWx1ZU9mKHBvcnQpLCBlbmRwb2ludH0pLCB0KTsKLSAgICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW52ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHdhcm5pbmcpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIHNlKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yU2VydmljZShib29sZWFuIG1vbml0b3JTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5tb25pdG9yU2VydmljZSA9IG1vbml0b3JTZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENyZWF0ZShib29sZWFuIGNyZWF0ZSkKLSAgewotICAgIHRoaXMuY3JlYXRlID0gY3JlYXRlOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0RW5kcG9pbnRzKCkKLSAgewotICAgIHJldHVybiBlbmRwb2ludHM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gcHJveHlFbmRwb2ludCBUaGUgcHJveHlFbmRwb2ludCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm94eUVuZHBvaW50KFN0cmluZyBwcm94eUVuZHBvaW50KSB7Ci0gIAl0aGlzLnByb3h5RW5kcG9pbnQgPSBwcm94eUVuZHBvaW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0phdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9KYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVlMjkzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0phdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotCi0vL2NvcmUgc3R1ZmYKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFSZWZGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2gubmF0dXJlLkVNRk5hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoLnV0aWxpdHkuSmVtUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0qIFRoaXMgY2xhc3MgaXMgdG8gYmUgdXNlZCB0byBCdWlsZCB0aGUgZGF0YSBtb2RlbAotKiBmaXJzdCB3ZSBnZXQgdGhlIGphdmEgY2xhc3MgYW5kIHRoZW4gYnVpbGQgdGhlIG1vZGVsCi0qLwotcHVibGljIGNsYXNzIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUwgPSAiSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIjsgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIERFU0NSSVBUSU9OID0gInJlZmxlY3Rpb24gZm9yIGEgZ2l2ZW4gY2xhc3MiOyAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgT0tfTUVTU0FHRSA9ICAiVGhlIG1vZGVsIGhhcyBiZWVuIGJ1aWx0ICI7IAotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSkFWQV9FWFRFTlNJT04gPSAiLmphdmEiOwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ0xBU1NfRVhURU5TSU9OID0gIi5jbGFzcyI7Ci0gIAotICBwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0OwotICBwcml2YXRlIEphdmFIZWxwZXJzIGphdmFDbGFzczsKLSAgcHJpdmF0ZSBTdHJpbmcgcW5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLSAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQgd2l0aCB0aGUgZ2l2ZW4gbGFiZWwgYW5kIGRlc2NyaXB0aW9uCi0gICogCi0gICovCi0gIHB1YmxpYyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQoKQotICB7Ci0gIH0KLSAgCi0gIC8vIHNldHRlcnMgZm9yIHRoaXMgY29tbWFuZAotICAKLSAgICAKLSAgLyoqCi0gICogVGhlIGVuZCByZXN1bHQgb2YgdGhpcyB3aG9sZSBwcm9jZXNzIGlzIHRvIGdldCB0aGUgSmF2YSBDbGFzcwotICAqLwotICBwdWJsaWMgSmF2YUhlbHBlcnMgZ2V0SmF2YUNsYXNzKCkKLSAgewotICAgIHJldHVybiBqYXZhQ2xhc3M7Ci0gIH0KLQotICAKLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NRTmFtZSgpCi0gIHsKLSAgICAgIHFuYW1lID0gcHJveHlCZWFuOwotCSAgaWYgKHFuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoSkFWQV9FWFRFTlNJT04pKSB7Ci0JCSAgcW5hbWUgPSBxbmFtZS5zdWJzdHJpbmcoMCwocW5hbWUubGVuZ3RoKCkgLTUpKTsKLQkgIH0KLQkgIGlmIChxbmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKENMQVNTX0VYVEVOU0lPTikpIHsKLQkJICBxbmFtZSA9IHFuYW1lLnN1YnN0cmluZygwLChxbmFtZS5sZW5ndGgoKSAtNikpOwotCSAgfQotICAgfQotICAgICAgCi0gIC8qKgotICAqIEdldCB0aGUgamF2YSBtb2RlbCBmcm9tIHRoZSByZXNvdXJjZSB0aGVuIAotICAqIGJ1aWxkIHRoZSBtb2RlbCBmcm9tIHRoZSBtb2YKLSAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsgICAgCi0gCSAgLy9qdXN0IG1ha2Ugc3VyZSB0aGUgcHJvamVjdCBhbmQgcW5hbWUgYXJlIHRoZXJlCi0gIAkvL3RoZXkgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyBvcGVyYXRpb24KLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCUlQcm9qZWN0IGNsaWVudElQcm9qZWN0ID0gKElQcm9qZWN0KVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGNsaWVudFByb2plY3QpOwotICAJcHJvY2Vzc1FOYW1lKCk7Ci0gIAlpZihjbGllbnRQcm9qZWN0ID09IG51bGwgfHwgcW5hbWUgPT0gbnVsbCkKLSAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fVU5BQkxFX1RPX0ZJTkRfUFJPWFkgKTsKLSAgCQotICAgIHRyeSB7Ci0JCUVNRk5hdHVyZSBuYXR1cmUgPSBKZW1Qcm9qZWN0VXRpbGl0aWVzLmdldEpFTV9FTUZfTmF0dXJlKGNsaWVudElQcm9qZWN0LCB0cnVlKTsKLQkJamF2YUNsYXNzID0gSmF2YVJlZkZhY3RvcnkuZUlOU1RBTkNFLnJlZmxlY3RUeXBlKHFuYW1lLCBuYXR1cmUuZ2V0UmVzb3VyY2VTZXQoKSk7Ci0JfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb3h5QmVhbihTdHJpbmcgcHJveHlCZWFuKQotICB7Ci0gIAl0aGlzLnByb3h5QmVhbiA9IHByb3h5QmVhbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpCi0gIHsKLSAgCXRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9NYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9NYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGVjZTFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBjbGFzcyBNYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLQlwcml2YXRlIEJvb2xlYW4gaXNTdGFydFNlcnZpY2VFbmFibGVkXzsKLQlwcml2YXRlIEJvb2xlYW4gaXNUZXN0U2VydmljZUVuYWJsZWRfOwotCQotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSWRfOwotCXByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfOwotCQotCXByaXZhdGUgSVByb2plY3Qgc2FtcGxlUHJvamVjdF87Ci0JcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlkXzsKLQlwcml2YXRlIElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfOwotCQotCXByaXZhdGUgYm9vbGVhbiBpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXzsKLQotCS8qKgotCSAqIERlZmF1bHQgQ1RPUjsKLQkgKi8KLQlwdWJsaWMgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQoICkgewotCi0JfQotCQotCS8qKgotCSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLQkgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19TVEFSVF9XRUJfUFJPSkVDVCk7Ci0JIAotCSAgICBpZiAoaXNTdGFydFNlcnZpY2VFbmFibGVkXy5ib29sZWFuVmFsdWUoKSAmJiBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfIT1udWxsKXsKLQkgICAgCS8vU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHNlcnZpY2Ugc2VydmVyIHN0YXJ0OiAiK3NlcnZpY2VQcm9qZWN0XysiICAiK3NlcnZpY2VTZXJ2ZXJUeXBlSWRfKTsKLQkgICAgCVN0YXJ0UHJvamVjdENvbW1hbmQgc3BjID0gbmV3IFN0YXJ0UHJvamVjdENvbW1hbmQoICk7Ci0JICAgIAlzcGMuc2V0U2VydmljZVByb2plY3Qoc2VydmljZVByb2plY3RfKTsKLQkgICAgCXNwYy5zZXRTZXJ2aWNlU2VydmVyVHlwZUlEKHNlcnZpY2VTZXJ2ZXJUeXBlSWRfKTsKLQkgICAgCXNwYy5zZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoc2VydmljZUV4aXN0aW5nU2VydmVyXyk7Ci0JICAgIAlzcGMuc2V0SXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZChpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXyk7Ci0JICAgIAlzcGMuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCSAgICAJc3BjLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLQkgICAgfQotCSAgICAKLQkgICAgaWYoaXNUZXN0U2VydmljZUVuYWJsZWRfLmJvb2xlYW5WYWx1ZSgpJiYgc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfIT1udWxsICYmIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8hPW51bGwgJiYgIXNhbXBsZUV4aXN0aW5nU2VydmVyXy5lcXVhbHMoc2VydmljZUV4aXN0aW5nU2VydmVyXykpewotCSAgICAJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgY2xpZW50IHNlcnZlciBzdGFydDogIitzYW1wbGVQcm9qZWN0XysiICAiK3NhbXBsZUV4aXN0aW5nU2VydmVyX18pOwotCSAgICAJU3RhcnRQcm9qZWN0Q29tbWFuZCBzcGMgPSBuZXcgU3RhcnRQcm9qZWN0Q29tbWFuZCggKTsKLQkgICAgCXNwYy5zZXRTYW1wbGVQcm9qZWN0KHNhbXBsZVByb2plY3RfKTsKLQkgICAgCXNwYy5zZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoc2FtcGxlU2VydmVyVHlwZUlkXyk7Ci0JICAgIAlzcGMuc2V0U2FtcGxlRXhpc3RpbmdTZXJ2ZXIoc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfKTsKLQkgICAgCXNwYy5zZXRDcmVhdGlvblNjZW5hcmlvKG5ldyBCb29sZWFuKCJmYWxzZSIpKTsKLQkgICAgCXNwYy5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JICAgIAlzcGMuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwkgICAgCQotCSAgICB9Ci0JICAgIAotCSAgICByZXR1cm4gc3RhdHVzOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gaXNTdGFydFNlcnZpY2VFbmFibGVkIFRoZSBpc1N0YXJ0U2VydmljZUVuYWJsZWQgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShCb29sZWFuIGlzU3RhcnRTZXJ2aWNlRW5hYmxlZCkgewotCQl0aGlzLmlzU3RhcnRTZXJ2aWNlRW5hYmxlZF8gPSBpc1N0YXJ0U2VydmljZUVuYWJsZWQ7Ci0JfQotCS8qKgotCSAqIEBwYXJhbSBpc1Rlc3RTZXJ2aWNlRW5hYmxlZCBUaGUgaXNUZXN0U2VydmljZUVuYWJsZWQgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKEJvb2xlYW4gaXNUZXN0U2VydmljZUVuYWJsZWQpIHsKLQkJdGhpcy5pc1Rlc3RTZXJ2aWNlRW5hYmxlZF8gPSBpc1Rlc3RTZXJ2aWNlRW5hYmxlZDsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIHNlcnZpY2VFeGlzdGluZ1NlcnZlciBUaGUgc2VydmljZUV4aXN0aW5nU2VydmVyIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpIHsKLQkJdGhpcy5zZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfID0gc2VydmljZUV4aXN0aW5nU2VydmVyOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2aWNlU2VydmVyVHlwZUlkIFRoZSBzZXJ2aWNlU2VydmVyVHlwZUlkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVyVHlwZUlkKFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlkKSB7Ci0JCXRoaXMuc2VydmljZVNlcnZlclR5cGVJZF8gPSBzZXJ2aWNlU2VydmVyVHlwZUlkOwotCX0KLQkvKioKLQkgKiBAcGFyYW0gc2VydmljZVByb2plY3QgVGhlIHNlcnZpY2VQcm9qZWN0IHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkgewotCQl0aGlzLnNlcnZpY2VQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gc2FtcGxlRXhpc3RpbmdTZXJ2ZXIgVGhlIHNhbXBsZUV4aXN0aW5nU2VydmVyIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTYW1wbGVFeGlzdGluZ1NlcnZlcihJU2VydmVyIHNhbXBsZUV4aXN0aW5nU2VydmVyKSB7Ci0JCXRoaXMuc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfID0gc2FtcGxlRXhpc3RpbmdTZXJ2ZXI7Ci0JfQotCS8qKgotCSAqIEBwYXJhbSBzYW1wbGVQcm9qZWN0IFRoZSBzYW1wbGVQcm9qZWN0IHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTYW1wbGVQcm9qZWN0KElQcm9qZWN0IHNhbXBsZVByb2plY3QpIHsKLQkJdGhpcy5zYW1wbGVQcm9qZWN0XyA9IHNhbXBsZVByb2plY3Q7Ci0JfQotCS8qKgotCSAqIEBwYXJhbSBzYW1wbGVTZXJ2ZXJUeXBlSWQgVGhlIHNhbXBsZVNlcnZlclR5cGVJZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2FtcGxlU2VydmVyVHlwZUlkKFN0cmluZyBzYW1wbGVTZXJ2ZXJUeXBlSWQpIHsKLQkJdGhpcy5zYW1wbGVTZXJ2ZXJUeXBlSWRfID0gc2FtcGxlU2VydmVyVHlwZUlkOwotCX0JCi0JCi0JLyoqCi0JICogQHBhcmFtIGlzUmVzdGFydFByb2plY3ROZWVkZWQgVGhlIGlzUmVzdGFydFByb2plY3ROZWVkZWQgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQoYm9vbGVhbiBpc1Jlc3RhcnRQcm9qZWN0TmVlZGVkKSB7Ci0JCXRoaXMuaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF8gPSBpc1Jlc3RhcnRQcm9qZWN0TmVlZGVkOwotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1Jlc3RvcmVCdWlsZFN0YXRlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9SZXN0b3JlQnVpbGRTdGF0ZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExNTIzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1Jlc3RvcmVCdWlsZFN0YXRlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGUuVmFsaWRhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgUmVzdG9yZUJ1aWxkU3RhdGVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwcml2YXRlIFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXJfOwotICAKLSAgLyoqCi0gICAqIERlZmF1bHQgQ1RPUjsKLSAgICovCi0gIHB1YmxpYyBSZXN0b3JlQnVpbGRTdGF0ZUNvbW1hbmQoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZSB0aGUgY29tbWFuZAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydCggbW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5UQVNLX0RFU0NfV0VCU0VSVklDRV9SRVNUT1JFX0JVSUxEKTsKLQotICAgIG1hbmFnZXJfLnJlc3RvcmVBdXRvQnVpbGQoKTsKLQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBAcGFyYW0gbWFuYWdlcl8gVGhlIG1hbmFnZXJfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NYW5hZ2VyKFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXIpIHsKLSAgICB0aGlzLm1hbmFnZXJfID0gbWFuYWdlcjsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1Jlc3RvcmVWYWxpZGF0aW9uU3RhdGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1Jlc3RvcmVWYWxpZGF0aW9uU3RhdGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZTk3ZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9SZXN0b3JlVmFsaWRhdGlvblN0YXRlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGUuVmFsaWRhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgUmVzdG9yZVZhbGlkYXRpb25TdGF0ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyXzsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBydW5WYWxpZGF0aW9uXzsKLQotICAvKioKLSAgICogRGVmYXVsdCBDVE9SOwotICAgKi8KLSAgcHVibGljIFJlc3RvcmVWYWxpZGF0aW9uU3RhdGVDb21tYW5kKCBib29sZWFuIHJ1blZhbGlkYXRpb24gKQotICB7Ci0gICAgcnVuVmFsaWRhdGlvbl8gPSBydW5WYWxpZGF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQoIG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuVEFTS19ERVNDX1dFQlNFUlZJQ0VfUkVTVE9SRV9WQUxJREFUSU9OKTsKLQotICAgIG1hbmFnZXJfLnJlc3RvcmVWYWxpZGF0aW9uRm9yUHJvamVjdHMoIHJ1blZhbGlkYXRpb25fICk7ICAgIAotCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIEBwYXJhbSBtYW5hZ2VyIFRoZSB2YWxpZGF0aW9uIG1hbmFnZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1hbmFnZXIoVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlcikgewotICAgIHRoaXMubWFuYWdlcl8gPSBtYW5hZ2VyOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vU3RhcnRQcm9qZWN0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9TdGFydFByb2plY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NGEwZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9TdGFydFByb2plY3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydFByb2plY3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0KLXByaXZhdGUgQm9vbGVhbiBjcmVhdGlvblNjZW5hcmlvXyA9IEJvb2xlYW4uVFJVRTsKLQotcHJpdmF0ZSBib29sZWFuIGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfOwotcHJpdmF0ZSBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdF87Ci1wcml2YXRlIElQcm9qZWN0IHNhbXBsZVByb2plY3RfOwotcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRF87Ci1wcml2YXRlIFN0cmluZyBzYW1wbGVTZXJ2ZXJUeXBlSURfOwotcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci1wcml2YXRlIElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfOwotCi0KLS8qKgotICogRGVmYXVsdCBDVE9SOwotICovCi1wdWJsaWMgU3RhcnRQcm9qZWN0Q29tbWFuZCggKSB7Ci0KLX0KLQotLyoqCi0gKiBEZWZhdWx0IENUT1I7Ci0gKi8KLXB1YmxpYyBTdGFydFByb2plY3RDb21tYW5kKGJvb2xlYW4gY3JlYXRpb25TY2VuYXJpbyApIHsKLQljcmVhdGlvblNjZW5hcmlvXyA9IG5ldyBCb29sZWFuKGNyZWF0aW9uU2NlbmFyaW8pOwotfQotCi0vKioKLSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAqLwotcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi17Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7ICAgIAotICAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQoIG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19TVEFSVF9XRUJfUFJPSkVDVCk7Ci0gICAgCi0gICAgCi0gICAgSVByb2plY3QgcHJvamVjdCA9ICgoY3JlYXRpb25TY2VuYXJpb18uYm9vbGVhblZhbHVlKCkpID8gc2VydmljZVByb2plY3RfIDogc2FtcGxlUHJvamVjdF8pOwotICAgIFN0cmluZyBzZXJ2ZXJUeXBlSUQgPSAoKGNyZWF0aW9uU2NlbmFyaW9fLmJvb2xlYW5WYWx1ZSgpKSA/IHNlcnZpY2VTZXJ2ZXJUeXBlSURfIDogc2FtcGxlU2VydmVyVHlwZUlEXyk7Ci0gICAgSVNlcnZlciBzZXJ2ZXIgPSAoKGNyZWF0aW9uU2NlbmFyaW9fLmJvb2xlYW5WYWx1ZSgpKSA/IHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gOiBzYW1wbGVFeGlzdGluZ1NlcnZlcl8pOyAgIAotICAgIGlmIChzZXJ2ZXJUeXBlSUQgPT0gbnVsbCAmJiBzZXJ2ZXIhPW51bGwpIHsKLSAgICAJc2VydmVyVHlwZUlEID0gc2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotICAgIH0KLSAgICBpZiAocHJvamVjdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX05PVF9GT1VORCApOyAgCi0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0JCi0gICAgSVNlcnZlciBpbnN0YW5jZSA9IFNlcnZlclV0aWxzLmdldFNlcnZlckZvck1vZHVsZShTZXJ2ZXJVdGlscy5nZXRNb2R1bGUocHJvamVjdCksIHNlcnZlclR5cGVJRCwgc2VydmVyLCB0cnVlLCBtb25pdG9yICk7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0lOU1RBTkNFX05PVF9GT1VORCApOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgIHRyeQotICAgCXsKLSAgIAkJQWJzdHJhY3RTdGFydFNlcnZlciBzdGFydFNlcnZlckNvbW1hbmQgPSBudWxsOwotICAgCQlXZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeSByZWcgPSBXZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgICAJc3RhcnRTZXJ2ZXJDb21tYW5kID0gKEFic3RyYWN0U3RhcnRTZXJ2ZXIpcmVnLmdldFNlcnZlclN0YXJ0QnlUeXBlSWQoaW5zdGFuY2UuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotICAgIAlzdGFydFNlcnZlckNvbW1hbmQuU3RhcnRTZXJ2ZXIocHJvamVjdCwgaW5zdGFuY2UsIG1vbml0b3IsIGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfKTsKLSAgICAJcmV0dXJuIHN0YXR1czsKLSAgIAl9Ci0gIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlICkKLSAgCXsKLSAgICAJSVN0YXR1cyBlbWJlZGRlZFN0YXR1cyA9IGNlLmdldFN0YXR1cygpOwotICAgIAlzdGF0dXMgPSBlbWJlZGRlZFN0YXR1czsKLSAgICAJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAJCXJldHVybiBzdGF0dXM7Ci0gIAl9Ci0gICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAJewotICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGUpOwotICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgIAkgICByZXR1cm4gc3RhdHVzOwotICAgCX0KLSAgIAotfQotCi1wdWJsaWMgdm9pZCBzZXRDcmVhdGlvblNjZW5hcmlvKEJvb2xlYW4gY3JlYXRpb25TY2VuYXJpbykKLXsKLQljcmVhdGlvblNjZW5hcmlvXyA9IGNyZWF0aW9uU2NlbmFyaW87Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KQotewotICBzZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLX0KLQotcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChJUHJvamVjdCBzYW1wbGVQcm9qZWN0KQotewotICBzYW1wbGVQcm9qZWN0XyA9IHNhbXBsZVByb2plY3Q7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQpCi17Ci0gIHNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmljZVNlcnZlclR5cGVJRDsKLX0KLQotcHVibGljIHZvaWQgc2V0U2FtcGxlU2VydmVyVHlwZUlEKFN0cmluZyBzYW1wbGVTZXJ2ZXJUeXBlSUQpCi17Ci0gIHNhbXBsZVNlcnZlclR5cGVJRF8gPSBzYW1wbGVTZXJ2ZXJUeXBlSUQ7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcikKLXsKLSAgc2VydmljZUV4aXN0aW5nU2VydmVyXyA9IHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsKLSAgaWYgKHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gIT0gbnVsbCkKLSAgICBzZXRTZXJ2aWNlU2VydmVyVHlwZUlEKHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotfQotCi1wdWJsaWMgdm9pZCBzZXRTYW1wbGVFeGlzdGluZ1NlcnZlcihJU2VydmVyIHNhbXBsZUV4aXN0aW5nU2VydmVyKQotewotICBzYW1wbGVFeGlzdGluZ1NlcnZlcl8gPSBzYW1wbGVFeGlzdGluZ1NlcnZlcjsKLSAgaWYgKHNhbXBsZUV4aXN0aW5nU2VydmVyXyAhPSBudWxsKQotICAgIHNldFNhbXBsZVNlcnZlclR5cGVJRChzYW1wbGVFeGlzdGluZ1NlcnZlcl8uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotfQotCi1wdWJsaWMgdm9pZCBzZXRJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkKGJvb2xlYW4gd2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQpCi17Ci0gIGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfID0gd2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0TWF0Y2hlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRNYXRjaGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZmQyZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRNYXRjaGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotcHVibGljIGNsYXNzIEZhY2V0TWF0Y2hlcgotewotICBwcml2YXRlIGJvb2xlYW4gbWF0Y2g7Ci0gIHByaXZhdGUgU2V0IGZhY2V0c1Rlc3RlZDsKLSAgcHJpdmF0ZSBTZXQgZmFjZXRzVGhhdE1hdGNoZWQ7Ci0gIHByaXZhdGUgU2V0IGZhY2V0c1RvQWRkOwotICAKLSAgcHVibGljIFNldCBnZXRGYWNldHNUaGF0TWF0Y2hlZCgpCi0gIHsKLSAgICByZXR1cm4gZmFjZXRzVGhhdE1hdGNoZWQ7Ci0gIH0KLSAgcHVibGljIHZvaWQgc2V0RmFjZXRzVGhhdE1hdGNoZWQoU2V0IGZhY2V0c1RoYXRNYXRjaGVkKQotICB7Ci0gICAgdGhpcy5mYWNldHNUaGF0TWF0Y2hlZCA9IGZhY2V0c1RoYXRNYXRjaGVkOwotICB9Ci0gIHB1YmxpYyBTZXQgZ2V0RmFjZXRzVG9BZGQoKQotICB7Ci0gICAgcmV0dXJuIGZhY2V0c1RvQWRkOwotICB9Ci0gIHB1YmxpYyB2b2lkIHNldEZhY2V0c1RvQWRkKFNldCBmYWNldHNUb0FkZCkKLSAgewotICAgIHRoaXMuZmFjZXRzVG9BZGQgPSBmYWNldHNUb0FkZDsKLSAgfQotICBwdWJsaWMgYm9vbGVhbiBpc01hdGNoKCkKLSAgewotICAgIHJldHVybiBtYXRjaDsKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRNYXRjaChib29sZWFuIG1hdGNoKQotICB7Ci0gICAgdGhpcy5tYXRjaCA9IG1hdGNoOwotICB9Ci0gIHB1YmxpYyBTZXQgZ2V0RmFjZXRzVGVzdGVkKCkKLSAgewotICAgIHJldHVybiBmYWNldHNUZXN0ZWQ7Ci0gIH0KLSAgcHVibGljIHZvaWQgc2V0RmFjZXRzVGVzdGVkKFNldCBmYWNldHNUZXN0ZWQpCi0gIHsKLSAgICB0aGlzLmZhY2V0c1Rlc3RlZCA9IGZhY2V0c1Rlc3RlZDsKLSAgfQotICAKLSAgCi0KLSAgCi0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDY1MzVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAxMjEwNzEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgKGNyZWF0aW9uKQotICogMjAwNjA0MjcgICAxMjY3ODAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA3MDQwMiAxNTE5NDMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5WZXJzaW9uRm9ybWF0RXhjZXB0aW9uOwotCi0KLS8qKgotICogRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlIGNhY2hlcyB0aGUgc2V0cyBvZiBmYWNldCB2ZXJzaW9uIGNvbWJpbmF0aW9ucyBmb3IgdGVtcGxhdGVzLgotICovCi1wdWJsaWMgY2xhc3MgRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlCi17Ci0gIC8vIHNpbmdsZSBpbnN0YW5jZSBwZXIgd29ya2JlbmNoCi0gIHByaXZhdGUgc3RhdGljIEZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZSBpbnN0YW5jZV87Ci0gIAotICAvL2ZhY2V0U2V0c0J5VGVtcGxhdGVJZF86IAotICAvL2tleTogT2JqZWN0IG9mIHR5cGUgU3RyaW5nLiBTdHJpbmcgaWQgb2YgYW4gSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUuCi0gIC8vdmFsdWU6IE9iamVjdCBvZiBTZXRbXS4gQW4gYXJyYXkgb2YgU2V0cyB3aGVyZSBlYWNoIHNldCBjb250YWlucyBlbGVtZW50cyBvZiB0eXBlIElQcm9qZWN0RmFjZXRWZXJzaW9uLgotICBwcml2YXRlIEhhc2h0YWJsZSBmYWNldFNldHNCeVRlbXBsYXRlSWRfOwotICAvKioKLSAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHNpbmdsZXRvbiBGYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlKCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZCgpCi0gIHsKLSAgICBmYWNldFNldHNCeVRlbXBsYXRlSWRfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCB0aGUgdmFsaWQgZmFjZXQgdmVyc2lvbiBjb21iaW5hdGlvbnMgdGhhdCBjYW4gYmUgZGVyaXZlZCBmcm9tIHRoZSBmaXhlZCBmYWNldHMKLSAgICogb2YgdGhlIGdpdmVuIHRlbXBsYXRlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHRlbXBsYXRlIGhhcyB0d28gZml4ZWQgZmFjZXRzLCBBIGFuZCBCLAotICAgKiBhbmQgQSBoYXMgdmVyc2lvbnMgMS4wIGFuZCAyLjAsIEIgaGFzIHZlcnNpb25zIDEuMSwgMi4xLAotICAgKiB0aGUgZm9sbG93aW5nIGFycmF5IG9mIFNldHMgd2lsbCBiZSByZXR1cm5lZCAoYXNzdW1pbmcgZm9yIHRoZSBzYWtlIG9mIHRoZSBleGFtcGxlCi0gICAqIHRoYXQgYWxsIHRoZSBjb21iaW5hdGlvbnMgYXJlIHZhbGlkKTo8YnIvPgotICAgKiB7U2V0MSwgU2V0MiwgU2V0MywgU2V0NH0sIHdoZXJlPGJyLz4KLSAgICogU2V0MSA9IFtBMS4wLCBCMS4xXTxici8+Ci0gICAqIFNldDIgPSBbQTIuMCwgQjEuMV08YnIvPgotICAgKiBTZXQzID0gW0ExLjAsIEIyLjFdPGJyLz4KLSAgICogU2V0NCA9IFtBMi4wLCBCMi4xXTxici8+Ci0gICAqIDxici8+Ci0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIGlkIG9mIGFuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0KLSAgICogQHJldHVybiBTZXRbXSBBbiBhcnJheSBvZiBTZXRzIHdoZXJlIGVhY2ggc2V0IGNvbnRhaW5zIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufS4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgU2V0W10gZ2V0RmFjZXRWZXJzaW9uQ29tYmluYXRpb25zRnJvbVRlbXBsYXRlKFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0JLy9SZXR1cm4gdGhlIGNhY2hlZCBjb21iaW5hdGlvbnMgaWYgcHJlc2VudC4KLSAgICBTZXRbXSBjYWNoZWRDb21iaW5hdGlvbnMgPSAoU2V0W10pZmFjZXRTZXRzQnlUZW1wbGF0ZUlkXy5nZXQodGVtcGxhdGVJZCk7Ci0gICAgaWYgKGNhY2hlZENvbWJpbmF0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBjYWNoZWRDb21iaW5hdGlvbnM7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0KLSAgICAgIC8vQ29tYmluYXRpb25zIGhhdmUgbm90IHlldCBiZWVuIGNhY2hlZCBmb3IgdGhlIGdpdmVuIHRlbXBsYXRlLiAKLSAgICAgIC8vRGV0ZXJtaW5lIHRoZSBjb21iaW5hdGlvbnMgYW5kIGNhY2hlIHRoZW0uCi0gICAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgICAgU2V0IGZpeGVkRmFjZXRzID0gdGVtcGxhdGUuZ2V0Rml4ZWRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAKLSAgICAgIC8vQ3JlYXRlIGFuIGFycmF5IG9mIGFycmF5cy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSB3aWxsIGNvbnRhaW4gdGhlIGFycmF5Ci0gICAgICAvL29mIElQcm9qZWN0RmFjZXRWZXJzaW9ucyBmb3IgZWFjaCBJUHJvamVjdEZhY2V0IGluIHRoZSBzZXQgb2YgZml4ZWQgZmFjZXRzLgotICAgICAgSXRlcmF0b3IgaXRyID0gZml4ZWRGYWNldHMuaXRlcmF0b3IoKTsKLSAgICAgIEFycmF5TGlzdCBwcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzID0gbmV3IEFycmF5TGlzdCgpOyAgICAgIAotCi0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSVByb2plY3RGYWNldCBmYWNldCA9IChJUHJvamVjdEZhY2V0KSBpdHIubmV4dCgpOwotICAgICAgICBMaXN0IHZlcnNpb25zID0gbnVsbDsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIGZhY2V0IHZlcnNpb25zIGluIGFzY2VuZGluZyBvcmRlci4KLSAgICAgICAgICB2ZXJzaW9ucyA9IGZhY2V0LmdldFNvcnRlZFZlcnNpb25zKHRydWUpOwotICAgICAgICB9IGNhdGNoIChWZXJzaW9uRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZmFjZXQuZ2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICAgIEl0ZXJhdG9yIHZlcnNpb25TZXRJdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB2ZXJzaW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgIHdoaWxlICh2ZXJzaW9uU2V0SXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZXJzaW9ucy5hZGQoaXRyLm5leHQoKSk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotICAgICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZmFjZXQuZ2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICBJdGVyYXRvciB2ZXJzaW9uU2V0SXRyID0gdmVyc2lvblNldC5pdGVyYXRvcigpOwotICAgICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgIHdoaWxlICh2ZXJzaW9uU2V0SXRyLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHZlcnNpb25zLmFkZChpdHIubmV4dCgpKTsKLSAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgIH0gICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJzaW9ucy5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgLy9DcmVhdGUgYW4gYXJyYXkgb2YgSVByb2plY3RGYWNldFZlcnNpb25zIGZyb20gdmVyc2lvbnMuCi0gICAgICAgICAgSXRlcmF0b3IgdmVyc2lvbkl0ciA9IHZlcnNpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgQXJyYXlMaXN0IGFycmF5T2ZWZXJzaW9uc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgd2hpbGUgKHZlcnNpb25JdHIuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbil2ZXJzaW9uSXRyLm5leHQoKTsKLSAgICAgICAgICAgIGFycmF5T2ZWZXJzaW9uc0xpc3QuYWRkKHBmdik7Ci0gICAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgICAKLSAgICAgICAgICAvL0FkZCB0aGUgYXJyYXkgb2YgdmVyc2lvbnMgdG8gdGhlIGxpc3Qgb2YgYXJyYXlzLgotICAgICAgICAgIHByb2plY3RGYWNldFZlcnNpb25BcnJheXMuYWRkKChJUHJvamVjdEZhY2V0VmVyc2lvbltdKWFycmF5T2ZWZXJzaW9uc0xpc3QudG9BcnJheShuZXcgSVByb2plY3RGYWNldFZlcnNpb25bMF0pKTsKLSAgICAgICAgICAKLQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBTZXRbXSBhbGxWYWxpZENvbWJpbmF0aW9uc0FycmF5ID0gbmV3IEhhc2hTZXRbMF07Ci0gICAgICBpZiAocHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cy5zaXplKCk+MCkgewotICAgIAkgIElQcm9qZWN0RmFjZXRWZXJzaW9uW11bXSBhcnJheU9mUHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cyA9IChJUHJvamVjdEZhY2V0VmVyc2lvbltdW10pcHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cy50b0FycmF5KG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvblswXVswXSk7Ci0gICAgCSAgYWxsVmFsaWRDb21iaW5hdGlvbnNBcnJheSA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRDb21iaW5hdGlvbnMoYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMsIHRydWUpOwotICAgIAkgIGZhY2V0U2V0c0J5VGVtcGxhdGVJZF8ucHV0KHRlbXBsYXRlSWQsIGFsbFZhbGlkQ29tYmluYXRpb25zQXJyYXkpOwotICAgICAgfQotICAgICAKLSAgICAgIHJldHVybiBhbGxWYWxpZENvbWJpbmF0aW9uc0FycmF5OwotICAgIH0gICAgCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjE2MmYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbi4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MjMgICAxNTgyMzAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMjE5ICAgMjEzMzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNSAgIDIyMjQ3MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIEVBUiB2ZXJzaW9uIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIG1vZHVsZXMgdG8gYmUgYWRkZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLmNvbW1vbi5KMkVFVmVyc2lvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuZWpiLnByb2plY3Qub3BlcmF0aW9ucy5FamJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5lamIucHJvamVjdC5vcGVyYXRpb25zLklFamJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnBsdWdpbi5JSjJFRU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuSmF2YUVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5wcm9qZWN0LmZhY2V0LkFwcENsaWVudEZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuSUFwcENsaWVudEZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5JVXRpbGl0eUZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5VdGlsaXR5RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViLnByb2plY3QuZmFjZXQuSVdlYkZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViLnByb2plY3QuZmFjZXQuV2ViRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5JTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuRGF0YU1vZGVsRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLklEYXRhTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuVmVyc2lvbkZvcm1hdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3QuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdC5BY3Rpb24uVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuUnVudGltZU1hbmFnZXI7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotLyoqCi0gKiBGYWNldFV0aWxzIGNvbnRhaW5zIHV0aWxpdHkgbWV0aG9kcyByZWxhdGVkIHRvIGZhY2V0cyBhbmQgdGVtcGxhdGVzLgotICogPGJyLz48YnIvPgotICogVGVybWlub2xvZ3kgdXNlZCBpbiB0aGUgSmF2YWRvYyBpbiB0aGlzIGNsYXNzCi0gKiA8dWw+Ci0gKiA8bGk+PGI+ZmFjZXQ8L2I+OiBBbiB7QGxpbmsgSVByb2plY3RGYWNldH08L2xpPgotICogPGxpPjxiPmZhY2V0IHZlcnNpb248L2I+OiBBbiB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259IDwvbGk+Ci0gKiA8bGk+PGI+ZmFjZXQgcnVudGltZTwvYj46IEFuIHtAbGluayBJUnVudGltZX08L2xpPgotICogPGxpPjxiPmZhY2V0ZWQgcHJvamVjdDwvYj46IEFuIHtAbGluayBJRmFjZXRlZFByb2plY3R9LiBBIGZhY2V0ZWQgcHJvamVjdCBtYXkgYmUgb2J0YWluZWQKLSAqIGZyb20gYW4gSVByb2plY3QgKEBzZWUgUHJvamVjdEZhY2V0c01hbmFnZXIjY3JlYXRlKTwvbGk+Ci0gKiA8bGk+PGI+dGVtcGxhdGU8L2I+OiBBbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9LiBDb25jZXB0dWFsbHkgdGhpcyBpcyBzaW1pbGFyIHRvIGEgcHJvamVjdCB0eXBlLjwvbGk+Ci0gKiA8bGk+PGI+cmVxdWlyZWQgZmFjZXQgdmVyc2lvbjwvYj46IEEge0BsaW5rIFJlcXVpcmVkRmFjZXRWZXJzaW9ufS4gVXNlZCBieSBzZXJ2aWNlUnVudGltZXMgYW5kIGNsaWVudFJ1bnRpbWVzCi0gKiB0byBpZGVudGlmeSB3aGF0IHRoZXkgcmVxdWlyZSBpbiB0ZXJtcyBvZiBmYWNldCB2ZXJzaW9ucy48L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGNsYXNzIEZhY2V0VXRpbHMKLXsKLQotICAvKioKLSAgICogUmV0dXJucyBhbiBhcnJheSBvZiB2YWxpZCBwcm9qZWN0cy4gVmFsaWQgcHJvamVjdHMgaW5jbHVkZSBwcm9qZWN0cyB3aXRoIHRoZSBmYWNldHMgbmF0dXJlIG9yCi0gICAqIHByb2plY3RzIHdpdGggdGhlIEphdmEgbmF0dXJlLgotICAgKiBAcmV0dXJuIElQcm9qZWN0W10gYW4gYXJyYXkgb2YgdmFsaWQgcHJvamVjdHMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVByb2plY3RbXSBnZXRBbGxQcm9qZWN0cygpCi0gIHsKLSAgICAvL1JldHVybiBhbGwgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZSB0aGF0IGhhdmUgdGhlIHByb2plY3QgZmFjZXQgbmF0dXJlIG9yIHRoYXQgZG8gbm90IGhhdmUgdGhlIHByb2plY3QKLSAgICAvL2ZhY2V0IG5hdHVyZSBidXQgaGF2ZSB0aGUgSmF2YSBuYXR1cmUuCi0gICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKTsKLSAgICBBcnJheUxpc3QgdmFsaWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJRmFjZXRlZFByb2plY3QgZmFjUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0c1tpXSk7Ci0gICAgICAgIGlmIChmYWNQcm9qZWN0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvL0FkZCBpdCB0byB0aGUgbGlzdAotICAgICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdHNbaV0pKQotICAgICAgICAJewotICAgICAgICAgICAgICB2YWxpZFByb2plY3RzLmFkZChwcm9qZWN0c1tpXSk7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgeyAgICAgICAgCi0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiAoSVByb2plY3RbXSl2YWxpZFByb2plY3RzLnRvQXJyYXkobmV3IElQcm9qZWN0W117fSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWNldCB2ZXJzaW9ucyBvbiB0aGUgZ2l2ZW4gcHJvamVjdC4KLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgYW4gZXhpc3RpbmcgcHJvamVjdC4KLSAgICogQHJldHVybnMgU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259LiAKLSAgICogVGhlc2UgYXJlIHRoZSBmYWNldCB2ZXJzaW9ucyBjdXJyZW50bHkgaW5zdGFsbGVkIG9uIHRoaXMgcHJvamVjdC4gSWYgdGhlIHByb2plY3QKLSAgICogaXMgYSBKYXZhIHByb2plY3QsIGZhY2V0cyBhcmUgaW5mZXJyZWQgZnJvbSB0aGUgSmF2YSBwcm9qZWN0LiBSZXR1cm5zIG51bGwgCi0gICAqIDx1bD4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGlzIG5vdCBhIGZhY2V0ZWQgcHJvamVjdCBvciBhIEphdmEgcHJvamVjdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBpcyBudWxsPC9saT4KLSAgICogPC91bD4gIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXQgZ2V0RmFjZXRzRm9yUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IG51bGw7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgaWYgKHByb2plY3QhPW51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3QpOwotICAgICAgICBpZiAoZnByb2plY3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZhY2V0VmVyc2lvbnMgPSBmcHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9JZiB0aGlzIGlzIG5vdCBhIGZhY2V0ZWQgcHJvamVjdCwgaXQgbWF5IHN0aWxsIGJlIG9rYXkgaWYgaXQgaXMgYSBKYXZhIHByb2plY3QKLSAgICAgICAgICAvL2FuZCB0aGUgY2xpZW50IHJ1bnRpbWUgc3VwcG9ydHMgYSBKYXZhIHByb2plY3QuCi0gICAgICAgICAgSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gbnVsbDsgICAgICAgICAgICAgIAotICAgICAgICAgIGlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpCi0gICAgICAgICAgewotICAgICAgICAJamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgICAgICBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JKYXZhUHJvamVjdChqYXZhUHJvamVjdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgIAkgIC8vTGVhdmluZyB0aGUgY2F0Y2ggYmxvY2sgZW1wdHkuIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUKLSAgICAJICAvL3dlcmUgYW55IGJsb3ctdXBzIGluIHRoZSBmYWNldCBBUEkgYmVpbmcgY2FsbGVkLgotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFjZXRWZXJzaW9uczsKLSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWNldCBydW50aW1lIHRoZSBnaXZlbiBwcm9qZWN0IGlzIGJvdW5kIHRvLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhbiBleGlzdGluZyBwcm9qZWN0Ci0gICAqIEByZXR1cm4ge0BsaW5rIElSdW50aW1lfSB0aGUgcHJvamVjdCBpcyBib3VuZCB0by4gUmV0dXJucyBudWxsCi0gICAqIDx1bD4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGlzIG5vdCBib3VuZCB0byBhIGZhY2V0IHJ1bnRpbWU8L2xpPiAKLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0PC9saT4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGlzIG51bGw8L2xpPgotICAgKiA8L3VsPgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJUnVudGltZSBnZXRGYWNldFJ1bnRpbWVGb3JQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGlmIChwcm9qZWN0IT1udWxsICYmIHByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdCBmcHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgaWYgKGZwcm9qZWN0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gZnByb2plY3QuZ2V0UHJpbWFyeVJ1bnRpbWUoKTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgIHsKLSAgICAJICAvL0xlYXZpbmcgdGhlIGNhdGNoIGJsb2NrIGVtcHR5LiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlCi0gICAgCSAgLy93ZXJlIGFueSBibG93LXVwcyBpbiB0aGUgZmFjZXQgQVBJIGJlaW5nIGNhbGxlZC4KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzZXQgb2YgY29tYmluYXRpb25zIG9mIGZhY2V0IHZlcnNpb25zIGRlcml2ZWQgZnJvbSB0aGUgZmFjZXQgdmVyc2lvbnMKLSAgICogaW4gdGhlIHByb3ZpZGVkIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLiBGb3IgZXhhbXBsZSwgaWYgCi0gICAqIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzIGlzIGEgdHdvIGRpbWVuc3Rpb25hbCBhcnJheSBvZiBmYWNldCB2ZXJzaW9ucyB0aGF0IGhhcwotICAgKiBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6PGJyLz4KLSAgICoge3tGYWNldEFfdmVyc2lvbjEsIEZhY2V0QV92ZXJzaW9uMn0sPGJyLz4KLSAgICogIHtGYWNldEJfdmVyc2lvbjF9LDxici8+Ci0gICAqICB7RmFjZXRDX3ZlcnNpb24xLCBGYWNldENfdmVyc2lvbjJ9fTxici8+Ci0gICAqIHRoZSBmb2xsb3dpbmcgYXJyYXkgb2YgU2V0cyB3aWxsIGJlIHJldHVybmVkOjxici8+Ci0gICAqIHtTZXQxLCBTZXQyLCBTZXQzLCBTZXQ0fSwgd2hlcmU8YnIvPgotICAgKiBTZXQxID0gW0ZhY2V0QV92ZXJzaW9uMSwgRmFjZXRCX3ZlcnNpb24xLCBGYWNldENfdmVyc2lvbjFdPGJyLz4KLSAgICogU2V0MiA9IFtGYWNldEFfdmVyc2lvbjIsIEZhY2V0Ql92ZXJzaW9uMSwgRmFjZXRDX3ZlcnNpb24xXTxici8+Ci0gICAqIFNldDMgPSBbRmFjZXRBX3ZlcnNpb24xLCBGYWNldEJfdmVyc2lvbjEsIEZhY2V0Q192ZXJzaW9uMl08YnIvPgotICAgKiBTZXQ0ID0gW0ZhY2V0QV92ZXJzaW9uMiwgRmFjZXRCX3ZlcnNpb24xLCBGYWNldENfdmVyc2lvbjJdPGJyLz4KLSAgICogPGJyLz4KLSAgICogQHBhcmFtIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgCi0gICAqIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcGFyYW0gcmV0dXJuVmFsaWRPbmx5IGZhbHNlIGlmIGFsbCBjb21iaW5hdGlvbnMgb2YgZmFjZXQgdmVyc2lvbnMgYXJlIHRvIGJlIHJldHVybmVkLiAKLSAgICogdHJ1ZSBpZiBvbmx5IHZhbGlkIGNvbWJpbmF0aW9ucyBvZiBmYWNldCB2ZXJzaW9ucyBhcmUgdG8gYmUgcmV0dXJuZWQuICAKLSAgICogQHJldHVybiBTZXRbXSBhbiBhcnJheSBvZiBTZXRzLCB3aGVyZSBlYWNoIFNldCBjb250YWlucyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0uIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXRbXSBnZXRGYWNldENvbWJpbmF0aW9ucyhJUHJvamVjdEZhY2V0VmVyc2lvbltdW10gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMsIGJvb2xlYW4gcmV0dXJuVmFsaWRPbmx5KSAgCi0gIHsKLSAgICBBcnJheUxpc3QgYWxsQ29tYmluYXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgIC8vbWF4Q291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZiB2ZXJzaW9ucyBpbiBlYWNoIGFycmF5IG9mIElQcm9qZWN0RmFjZXRWZXJzaW9ucy4KLSAgICAvL2luaXRpYWxpemUgY291bnRlciwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG5hdmlnYXRlIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLgotICAgIGludCBuID0gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMubGVuZ3RoOwotICAgIGludFtdIG1heENvdW50ID0gbmV3IGludFtuXTsKLSAgICBpbnRbXSBjb3VudGVyID0gbmV3IGludFtuXTsKLSAgICBmb3IgKGludCBpPTA7IGk8bjsgaSsrKQotICAgIHsKLSAgICAgIG1heENvdW50W2ldID0gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXNbaV0ubGVuZ3RoIC0gMTsKLSAgICAgIGNvdW50ZXJbaV0gPSAwOwotICAgIH0gICAgICAKLSAgICAKLSAgICAvL05hdmlnYXRlIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzIHRvIGNyZWF0ZSBhbGwgcG9zc2libGUgY29tYmluYXRpb25zLgotICAgIGJvb2xlYW4gZG9uZSA9IGZhbHNlOwotICAgIHdoaWxlICghZG9uZSkKLSAgICB7Ci0gICAgICAvL0NyZWF0ZSBhIGNvbWJpbmF0aW9uIG9mIHNpemUgbiB1c2luZyBjdXJyZW50IHZhbHVlcyBpbiBjb3VudGVyLgotICAgICAgLy9BZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsIGNvbWJpbmF0aW9ucywgY2hlY2tpbmcgZmlyc3QgZm9yIHZhbGlkaXR5IGlmIHJldHVyblZhbGlkT25seSBpcyB0cnVlLgotICAgICAgU2V0IGNvbWJpbmF0aW9uID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgIGZvciAoaW50IGo9MDsgajxuOyBqKyspCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzW2pdW2NvdW50ZXJbal1dOwotICAgICAgICBjb21iaW5hdGlvbi5hZGQocGZ2KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9DaGVjayBpZiB2YWxpZC4KLSAgICAgIGlmIChyZXR1cm5WYWxpZE9ubHkpCi0gICAgICB7Ci0gICAgICAgIFNldCBhY3Rpb25zID0gZ2V0SW5zdGFsbEFjdGlvbnMoY29tYmluYXRpb24pOwotCQl0cnkgewotCQkJaWYoIFByb2plY3RGYWNldHNNYW5hZ2VyLmNoZWNrKCBuZXcgSGFzaFNldCgpLCBhY3Rpb25zICkuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLk9LICkgICAgICAgIAotCSAgICAgICAgewotCSAgICAgICAgICBhbGxDb21iaW5hdGlvbnMuYWRkKChjb21iaW5hdGlvbikpOwotCSAgICAgICAgfQotCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgewotCQkJLy8gRG8gbm90aGluZyBpZiBQcm9qZWN0RmFjZXRzTWFuYWdlci5jaGVjaygpIHRocm93cyBleGNlcHRpb24uCi0JCQkvLyBUT0RPIFRoaXMgdHJ5L2NhdGNoIHdpbGwgYmUgdW5uZWNjZXNhcnkgb25jZSBXVFAgYnVnIDEzNzU1MSBpcyBmaXhlZCBzbyB0aGF0IGFuIE9LIFN0YXR1cyAKLQkJCS8vIAkJd291bGQgbm90IGJlIHJldHVybmVkIHdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KLQkJfSAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGFsbENvbWJpbmF0aW9ucy5hZGQoKGNvbWJpbmF0aW9uKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vVXBkYXRlIHRoZSBjb3VudGVycy4KLSAgICAgIGZvciAoaW50IHA9MDsgcDxuOyBwKyspCi0gICAgICB7Ci0gICAgICAgIGlmICggKGNvdW50ZXJbcF0gKyAxKSA8PSBtYXhDb3VudFtwXSkKLSAgICAgICAgewotICAgICAgICAgIChjb3VudGVyW3BdKSsrOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGNvdW50ZXJbcF0gPSAwOwotICAgICAgICAgIGlmIChwID09IG4tMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgU2V0W10gYWxsQ29tYmluYXRpb25zQXJyYXkgPSAoU2V0W10pYWxsQ29tYmluYXRpb25zLnRvQXJyYXkobmV3IFNldFswXSk7ICAgIAotICAgIHJldHVybiBhbGxDb21iaW5hdGlvbnNBcnJheTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGZhY2V0IHZlcnNpb25zIGdpdmVuIGEgdGVtcGxhdGUuIFRoZSBoaWdoZXN0IGZhY2V0IHZlcnNpb24gb2YgZXZlcnkgZml4ZWQgCi0gICAqIGZhY2V0IGluIHRoZSB0ZW1wbGF0ZSBpcyByZXR1cm5lZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBqc3QuamF2YSBmYWNldCwgd2hlcmUgdGhlIDEuNCAKLSAgICogZmFjZXQgdmVyc2lvbiBpcyByZXR1cm5lZC4KLSAgICogCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIGlkIG9mIGEge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfQotICAgKiBAcmV0dXJuIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXQgZ2V0SW5pdGlhbEZhY2V0VmVyc2lvbnNGcm9tVGVtcGxhdGUoU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIFNldCBmaXhlZEZhY2V0cyA9IHRlbXBsYXRlLmdldEZpeGVkUHJvamVjdEZhY2V0cygpOyAKLSAgICBIYXNoU2V0IGluaXRpYWwgPSBuZXcgSGFzaFNldCgpOyAKLSAgICBmb3IgKEl0ZXJhdG9yIGl0cjIgPSBmaXhlZEZhY2V0cy5pdGVyYXRvcigpOyBpdHIyLmhhc05leHQoKTsgKSAKLSAgICB7IAotICAgICAgSVByb2plY3RGYWNldCBmYWNldCA9IChJUHJvamVjdEZhY2V0KSBpdHIyLm5leHQoKTsgCi0gICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBoaWdoZXN0RmFjZXRWZXJzaW9uID0gbnVsbDsKLSAgICAgIHRyeSB7Ci0gICAgCSAgaWYgKGlzSmF2YUZhY2V0KGZhY2V0KSkgLy9zcGVjaWFsIGNhc2UgdGhlIGphdmEgZmFjZXQgYmVjYXVzZSAxLjQgaXMgYSBiZXR0ZXIgZGVmYXVsdCB0aGFuIDUuMCBmb3Igbm93LgotICAgIAkgIHsKLSAgICAJCSAgaGlnaGVzdEZhY2V0VmVyc2lvbiA9IGZhY2V0LmdldFZlcnNpb24oIjEuNCIpOwotICAgIAkgIH0gZWxzZSB7Ci0gICAgCQkgIGhpZ2hlc3RGYWNldFZlcnNpb24gPSBmYWNldC5nZXRMYXRlc3RWZXJzaW9uKCk7Ci0gICAgCSAgfQotICAgICAgfSBjYXRjaCAoVmVyc2lvbkZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgIH0KLSAgICAgIGluaXRpYWwuYWRkKGhpZ2hlc3RGYWNldFZlcnNpb24pOyAKLSAgICB9ICAgICAgICAgICAgIAotICAgIAotICAgIHJldHVybiBpbml0aWFsOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHNldCBvZiBmYWNldCB2ZXJzaW9ucyBnaXZlbiBhIHRlbXBsYXRlLiBUaGUgZGVmYXVsdCBmYWNldCB2ZXJzaW9uIG9mIGV2ZXJ5IGZpeGVkIAotICAgKiBmYWNldCBpbiB0aGUgdGVtcGxhdGUgaXMgcmV0dXJuZWQuICBJZiB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgdmVyc2lvbnMsIGFuIGVtcHR5IHNldCB3aWxsIGJlIHJldHVybmVkLgotICAgKiAKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldCBnZXREZWZhdWx0RmFjZXRWZXJzaW9uc0Zyb21UZW1wbGF0ZShTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotCSAgSGFzaFNldCBkZWZhdWx0U2V0ID0gbmV3IEhhc2hTZXQoKTsgCi0JICB0cnkgewotCQkgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0JCSAgU2V0IGZpeGVkRmFjZXRzID0gdGVtcGxhdGUuZ2V0Rml4ZWRQcm9qZWN0RmFjZXRzKCk7IAotCQkgIGZvciAoSXRlcmF0b3IgaXRyMiA9IGZpeGVkRmFjZXRzLml0ZXJhdG9yKCk7IGl0cjIuaGFzTmV4dCgpOyApIAotCQkgIHsgCi0JCQkgIElQcm9qZWN0RmFjZXQgZmFjZXQgPSAoSVByb2plY3RGYWNldCkgaXRyMi5uZXh0KCk7IAotCQkJICBJUHJvamVjdEZhY2V0VmVyc2lvbiBkZWZhdWx0RmFjZXRWZXJzaW9uID0gbnVsbDsKLQkJCSAgZGVmYXVsdEZhY2V0VmVyc2lvbiA9IGZhY2V0LmdldERlZmF1bHRWZXJzaW9uKCk7Ci0JCQkgIGRlZmF1bHRTZXQuYWRkKGRlZmF1bHRGYWNldFZlcnNpb24pOyAKLQkJICB9ICAgICAgICAgICAgIAotCQkgIHJldHVybiBkZWZhdWx0U2V0OwotCSAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJICByZXR1cm4gZGVmYXVsdFNldDsKLQkgIH0gY2F0Y2ggKFZlcnNpb25Gb3JtYXRFeGNlcHRpb24gZSkgewotCQkgIHJldHVybiBkZWZhdWx0U2V0OwotCSAgfSAKLQkgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgdGVtcGxhdGUgbGFibGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIHRlbXBsYXRlSWRzLgotICAgKiBAcGFyYW0gdGVtcGxhdGVJZHMgYXJyYXkgb2YgdmFsaWQgdGVtcGxhdGUgaWRzLiBFYWNoIGlkIG11c3QgY29ycmVzcG9uZCB0byBhIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgb2YgdGVtcGxhdGUgbGFiZWxzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRUZW1wbGF0ZUxhYmVscyhTdHJpbmdbXSB0ZW1wbGF0ZUlkcykKLSAgewotICAgIFN0cmluZ1tdIGxhYmVscyA9IG5ldyBTdHJpbmdbdGVtcGxhdGVJZHMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpPTA7IGk8dGVtcGxhdGVJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkc1tpXSk7ICAgICAgCi0gICAgICBsYWJlbHNbaV0gPSB0ZW1wbGF0ZS5nZXRMYWJlbCgpOwotICAgIH0KLSAgICByZXR1cm4gbGFiZWxzOwotICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSB0ZW1wbGF0ZSBnaXZlbiBpdHMgbGFiZWwuIAotICAgKiAKLSAgICogQHBhcmFtIHRlbXBsYXRlTGFiZWwgbGFiZWwgb2YgYSB0ZW1wbGF0ZQotICAgKiBAcmV0dXJuIHRlbXBsYXRlIGlkIG9yIGVtcHR5IFN0cmluZyBpZiBubyB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IHdpdGggdGhlCi0gICAqIGdpdmVuIHRlbXBsYXRlTGFiZWwgY291bGQgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUZW1wbGF0ZUlkQnlMYWJlbChTdHJpbmcgdGVtcGxhdGVMYWJlbCkKLSAgewotICAgIGZvciggSXRlcmF0b3IgaXRyID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGVzKCkuaXRlcmF0b3IoKTsgaXRyLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgICAgZmluYWwgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpIGl0ci5uZXh0KCk7Ci0gICAgICAgIGlmICh0ZW1wbGF0ZS5nZXRMYWJlbCgpLmVxdWFscyh0ZW1wbGF0ZUxhYmVsKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5nZXRJZCgpOwotCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGFiZWwgb2YgYSB0ZW1wbGF0ZSBnaXZlbiBpdHMgaWQgCi0gICAqIAotICAgKiBAcGFyYW0gdGVtcGxhdGVJZCBpZCBvZiBhIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0KLSAgICogQHJldHVybiB0ZW1wbGF0ZSBsYWJlbAotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUZW1wbGF0ZUxhYmVsQnlJZChTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgcmV0dXJuIHRlbXBsYXRlLmdldExhYmVsKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGluc3RhbGwgYWN0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIGZhY2V0IHZlcnNpb24KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0RmFjZXRWZXJzaW9ucyBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBBY3Rpb259IHdpdGggdGhlIHR5cGUgYXR0cmlidXRlIHNldCB0byBUeXBlLklOU1RBTEwKLSAgICogVGhlIHNldCBjb250YWlucyBvbmUgQWN0aW9uIGZvciBlYWNoIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0gaW4gcHJvamVjdEZhY2V0VmVyc2lvbnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldCBnZXRJbnN0YWxsQWN0aW9ucyhTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICBIYXNoU2V0IGFjdGlvbnMgPSBuZXcgSGFzaFNldCgpOwotICAgIAotICAgIEl0ZXJhdG9yIGZhY2V0cyA9IHByb2plY3RGYWNldFZlcnNpb25zLml0ZXJhdG9yKCk7Ci0gICAgCi0gICAgd2hpbGUoZmFjZXRzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgCUlQcm9qZWN0RmFjZXRWZXJzaW9uIGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWZhY2V0cy5uZXh0KCk7Ci0gICAgCWlmIChmdiAhPSBudWxsKSB7Ci0gICAgCQlJUHJvamVjdEZhY2V0IHBmID0gZnYuZ2V0UHJvamVjdEZhY2V0KCk7Ci0gICAgCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbihUeXBlLklOU1RBTEwsIGZ2LCBnZXRDb25maWdPYmplY3QocGYpKTsKLSAgICAJCWFjdGlvbnMuYWRkKGFjdGlvbik7Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFjdGlvbnM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBkYXRhIG1vZGVsIGNvbmZpZyBvYmplY3QgZm9yIHRoZSBnaXZlbiBwcm9qZWN0IGZhY2V0Ci0gICAqIEZvciBKMkVFIGZhY2V0cywgc2V0IEFkZF9UT19FQVIgcHJvcGVydGllcyBvZiB0aGUgZGF0YSBtb2RlbCB0byBmYWxzZSwgCi0gICAqIGZvciBvdGhlciBmYWNldHMsIGp1c3QgcmV0dXJuIG51bGwKLSAgICogQHBhcmFtIGZhY2V0SUQKLSAgICogQHJldHVybiBkYXRhIG1vZGVsIGNvbmZpZyBvYmplY3QKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldENvbmZpZ09iamVjdChJUHJvamVjdEZhY2V0IHByb2plY3RGYWNldCkKLSAgewotCSAgCi0JICBJRGF0YU1vZGVsIGRtID0gbnVsbDsKLQkgIGlmIChwcm9qZWN0RmFjZXQgIT0gbnVsbCkgewotCQkgIFN0cmluZyBmYWNldElkID0gcHJvamVjdEZhY2V0LmdldElkKCk7Ci0JCSAgaWYgKGZhY2V0SWQgIT0gbnVsbCkgewotCQkJICAvLyBzZXQgQWRkIHRvIEVBUiB0byBmYWxzZQotCQkJICBpZiAoZmFjZXRJZC5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSkpIHsgCi0JCQkJICBkbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBXZWJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcigpKTsKLQkJCQkgIGRtLnNldEJvb2xlYW5Qcm9wZXJ0eShJV2ViRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBmYWxzZSk7Ci0JCQkgIH0gZWxzZSBpZiAoZmFjZXRJZC5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSkpIHsKLQkJCQkgIGRtID0gRGF0YU1vZGVsRmFjdG9yeS5jcmVhdGVEYXRhTW9kZWwobmV3IEVqYkZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkJCSAgZG0uc2V0Qm9vbGVhblByb3BlcnR5KElFamJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkFERF9UT19FQVIsIGZhbHNlKTsKLQkJCSAgfSBlbHNlIGlmIChmYWNldElkLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9BUFBDTElFTlRfTU9EVUxFKSkgewotCQkJCSAgZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgQXBwQ2xpZW50RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCQkJICBkbS5zZXRCb29sZWFuUHJvcGVydHkoSUFwcENsaWVudEZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuQUREX1RPX0VBUiwgZmFsc2UpOwotCQkJICB9IGVsc2UgaWYgKGZhY2V0SWQuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfTU9EVUxFKSkgewotCQkJCSAgZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgVXRpbGl0eUZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkJCSAgZG0uc2V0Qm9vbGVhblByb3BlcnR5KElVdGlsaXR5RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBmYWxzZSk7Ci0JCQkgIH0KLQkJICB9Ci0JICB9Ci0JICByZXR1cm4gZG07Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHtAbGluayBGYWNldE1hdGNoZXJ9IGNhbGN1bGF0ZWQgd2hlbiBjaGVja2luZyB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgCi0gICAqIGFnYWluc3QgdGhlIGZhY2V0IHZlcnNpb25zLgotICAgKiAKLSAgICogQHBhcmFtIHJlcXVpcmVkRmFjZXRWZXJzaW9ucyBhcnJheSBvZiByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucwotICAgKiBAcGFyYW0gcHJvamVjdEZhY2V0VmVyc2lvbnMgZmFjZXQgdmVyc2lvbnMgdG8gY2hlY2sgYWdhaW5zdC4gU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSAKLSAgICoge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcmV0dXJuIEZhY2V0TWF0Y2hlciB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzOgotICAgKiA8dWw+Ci0gICAqIDxsaT48Yj5pc01hdGNoPC9iPjogcmV0dXJucyB0cnVlIGlmIHRoZSByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucyBhbHJlYWR5IGV4aXN0IGluIHRoZSBmYWNldCB2ZXJzaW9ucwotICAgKiBvciBjYW4gYmUgYWRkZWQgdG8gdGhlIGZhY2V0IHZlcnNpb25zLiBpc01hdGNoIHdpbGwgcmV0dXJuIGZhbHNlIG90aGVyd2lzZS48L2xpPgotICAgKiA8bGk+PGI+Z2V0RmFjZXRzVGVzdGVkPC9iPjogcmV0dXJucyB0aGUgc2FtZSBzZXQgb2YgZmFjZXQgdmVyc2lvbnMgYXMgdGhlIGlucHV0IHBhcmFtZXRlciwgcHJvamVjdEZhY2V0VmVyc2lvbnM8L2xpPgotICAgKiA8bGk+PGI+Z2V0RmFjZXRzVGhhdE1hdGNoZWQ8L2I+OiBpZiBpc01hdGNoIHJldHVybnMgZmFsc2UsIGdldEZhY2V0c1RoYXRNYXRjaGVkIHJldHVybnMgbnVsbC4gSWYgaXNNYXRjaCByZXR1cm5zIHRydWUsIAotICAgKiBnZXRGYWNldHNUaGF0TWF0Y2hlZCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgZmFjZXQgdmVyc2lvbnMgaW4gdGhlIGlucHV0IHBhcmFtZXRlciwgcHJvamVjdEZhY2V0VmVyc2lvbnMsIAotICAgKiB0aGF0IG1hdGNoZWQgb25lIG9mIHRoZSByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4gVGhpcyBtYXkgYmUgYW4gZW1wdHkgc2V0LjwvbGk+Ci0gICAqIDxsaT48Yj5nZXRGYWNldHNUb0FkZDwvYj46IGlmIGlzTWF0Y2ggcmV0dXJucyBmYWxzZSwgZ2V0RmFjZXRzVG9BZGQgcmV0dXJucyBudWxsLiBJZiBpc01hdGNoIHJldHVybnMgdHJ1ZSwgCi0gICAqIGdldEZhY2V0c1RvQWRkIHJldHVybnMgdGhlIHN1YnNldCBvZiBmYWNldCB2ZXJzaW9ucyB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIGZhY2V0IHZlcnNpb25zIGluCi0gICAqIHByb2plY3RGYWNldFZlcnNpb25zIGluIG9yZGVyIHRvIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuIFRoaXMgbWF5IGJlCi0gICAqIGFuIGVtcHR5IHNldC48L2xpPgotICAgKiA8L3VsPgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBGYWNldE1hdGNoZXIgbWF0Y2goUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnMsIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9ucykKLSAgewotICAgIEZhY2V0TWF0Y2hlciBmbSA9IG5ldyBGYWNldE1hdGNoZXIoKTsKLSAgICBmbS5zZXRGYWNldHNUZXN0ZWQocHJvamVjdEZhY2V0VmVyc2lvbnMpOwotICAgIEhhc2hTZXQgZmFjZXRzVG9BZGQgPSBuZXcgSGFzaFNldCgpOwotICAgIEhhc2hTZXQgcmVxdWlyZWRGYWNldFZlcnNpb25zVG9BZGQgPSBuZXcgSGFzaFNldCgpOwotICAgIEhhc2hTZXQgZmFjZXRzVGhhdE1hdGNoZWQgPSBuZXcgSGFzaFNldCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxyZXF1aXJlZEZhY2V0VmVyc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgUmVxdWlyZWRGYWNldFZlcnNpb24gcmZ2ID0gcmVxdWlyZWRGYWNldFZlcnNpb25zW2ldOwotICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcnBmdiA9IHJmdi5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCk7Ci0gICAgICBTdHJpbmcgcmlkID0gcnBmdi5nZXRQcm9qZWN0RmFjZXQoKS5nZXRJZCgpOwotICAgICAgU3RyaW5nIHJ2ID0gcnBmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICBib29sZWFuIGZhY2V0UHJlc2VudCA9IGZhbHNlOwotCi0gICAgICAvL0lzIHRoZSBwcm9qZWN0IGZhY2V0IHByZXNlbnQ/IG9yIGEgbGF0ZXIgdmVyc2lvbiBvZiBhcHBsaWNhYmxlLgotICAgICAgSXRlcmF0b3IgaXRyID0gcHJvamVjdEZhY2V0VmVyc2lvbnMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbilpdHIubmV4dCgpOwotICAgICAgICBTdHJpbmcgaWQgPSBwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKTsKLSAgICAgICAgU3RyaW5nIHZlcnNpb24gPSBwZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICBpZiAocmlkLmVxdWFscyhpZCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocnYuZXF1YWxzKHZlcnNpb24pKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vZm91bmQgYW4gZXhhY3QgbWF0Y2gKLSAgICAgICAgICAgIGZhY2V0UHJlc2VudCA9IHRydWU7Ci0gICAgICAgICAgICBmYWNldHNUaGF0TWF0Y2hlZC5hZGQocGZ2KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZnYuZ2V0QWxsb3dOZXdlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoZ3JlYXRlclRoYW4odmVyc2lvbiwgcnYpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy9mb3VuZCBhIG1hdGNoCi0gICAgICAgICAgICAgICAgZmFjZXRQcmVzZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmYWNldHNUaGF0TWF0Y2hlZC5hZGQocGZ2KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvL05vIG5lZWQgdG8ga2VlcCBpdGVyYXRpbmcgc2luY2Ugd2UgaGl0IGEgZmFjZXQgd2l0aCB0aGUgc2FtZSBpZDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvL2lmIG5vdCBwcmVzZW50LCBwdXQgaXQgaW4gdGhlIGxpc3QgdG8gY2hlY2sgaWYgaXQgY2FuIGJlIGFkZGVkLgotICAgICAgaWYgKCFmYWNldFByZXNlbnQpCi0gICAgICB7Ci0gICAgICAgIGZhY2V0c1RvQWRkLmFkZChycGZ2KTsKLSAgICAgICAgcmVxdWlyZWRGYWNldFZlcnNpb25zVG9BZGQuYWRkKHJmdik7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9DaGVjayBpZiB0aGUgZmFjZXRzVG9BZGQgY2FuIGJlIGFkZGVkCi0gICAgaWYgKHJlcXVpcmVkRmFjZXRWZXJzaW9uc1RvQWRkLnNpemUoKSA+IDApCi0gICAgewotICAgICAgLy9UZXN0IGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZhY2V0cyB0aGF0IG5lZWQgdG8gYmUgYWRkZWQKLSAgICAgIC8vQ3JlYXRlIGFuIGFycmF5IG9mIGFycmF5cy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSB3aWxsIGNvbnRhaW4gdGhlIGFycmF5Ci0gICAgICAvL29mIHRoZSBwZXJtaXR0ZWQgSVByb2plY3RGYWNldFZlcnNpb25zIGZvciBlYWNoIHJlcXVpcmVkIGZhY2V0LgotICAgICAgYm9vbGVhbiBmYWNldHNDYW5CZUFkZGVkID0gZmFsc2U7Ci0gICAgICBJdGVyYXRvciBpdHIgPSByZXF1aXJlZEZhY2V0VmVyc2lvbnNUb0FkZC5pdGVyYXRvcigpOwotICAgICAgQXJyYXlMaXN0IHByb2plY3RGYWNldFZlcnNpb25BcnJheXMgPSBuZXcgQXJyYXlMaXN0KCk7ICAgICAgCi0KLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZXFGYWNldFZlcnNpb24gPSAoUmVxdWlyZWRGYWNldFZlcnNpb24pIGl0ci5uZXh0KCk7Ci0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uW10gdmVyc2lvbnMgPSByZXFGYWNldFZlcnNpb24uZ2V0QWxsb3dlZFByb2plY3RGYWNldFZlcnNpb25zKCk7Ci0gICAgICAgIGlmICh2ZXJzaW9ucyAhPSBudWxsICYmIHZlcnNpb25zLmxlbmd0aCA+IDApCi0gICAgICAgIHsgICAgICAgICAgCi0gICAgICAgICAgLy9BZGQgdGhlIGFycmF5IG9mIHZlcnNpb25zIHRvIHRoZSBsaXN0IG9mIGFycmF5cy4KLSAgICAgICAgICBwcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLmFkZCh2ZXJzaW9ucyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgSVByb2plY3RGYWNldFZlcnNpb25bXVtdIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uW11bXSlwcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLnRvQXJyYXkobmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uWzBdWzBdKTsKLSAgICAgIFNldFtdIGNvbWJpbmF0aW9ucyA9IGdldEZhY2V0Q29tYmluYXRpb25zKGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLCBmYWxzZSk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8Y29tYmluYXRpb25zLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICAvL0NoZWNrIGlmIHRoZSBzZXQgY2FuIGJlIGFkZGVkLiBJZiBzbywgdGhpcyBpcyBhIG1hdGNoLiBVcGRhdGUgdGhlIGZhY2V0IG1hdGNoZXIgYW5kIGJyZWFrLgotICAgICAgICBTZXQgYWN0aW9ucyA9IGdldEluc3RhbGxBY3Rpb25zKGNvbWJpbmF0aW9uc1tpXSk7Ci0gICAgICAgIHRyeSB7Ci0JCQlpZiggUHJvamVjdEZhY2V0c01hbmFnZXIuY2hlY2soIHByb2plY3RGYWNldFZlcnNpb25zLCBhY3Rpb25zICkuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLk9LICkKLQkJCXsKLQkJCSAgLy9GYWNldHMgY2FuIGJlIGFkZGVkIHNvIHRoZXJlIGlzIGEgbWF0Y2gKLQkJCSAgZmFjZXRzQ2FuQmVBZGRlZD10cnVlOwotCQkJICBmbS5zZXRNYXRjaCh0cnVlKTsKLQkJCSAgZm0uc2V0RmFjZXRzVGhhdE1hdGNoZWQoZmFjZXRzVGhhdE1hdGNoZWQpOwotCQkJICBmbS5zZXRGYWNldHNUb0FkZChjb21iaW5hdGlvbnNbaV0pOwotCQkJICBicmVhazsKLQkJCX0KLQkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKLQkJCS8vIERvIG5vdGhpbmcgaWYgUHJvamVjdEZhY2V0c01hbmFnZXIuY2hlY2soKSB0aHJvd3MgZXhjZXB0aW9uLgotCQkJLy8gVE9ETyBUaGlzIHRyeS9jYXRjaCB3aWxsIGJlIHVubmVjY2VzYXJ5IG9uY2UgV1RQIGJ1ZyAxMzc1NTEgaXMgZml4ZWQgc28gdGhhdCBhbiBPSyBTdGF0dXMgCi0JCQkvLyAJCXdvdWxkIG5vdCBiZSByZXR1cm5lZCB3aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCi0JCX0gICAgICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIAotICAgICAgaWYgKCFmYWNldHNDYW5CZUFkZGVkKQotICAgICAgewotICAgICAgICBmbS5zZXRNYXRjaChmYWxzZSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1RoZXJlIGFyZSBubyBmYWNldHMgdG8gYWRkLgotICAgICAgZm0uc2V0TWF0Y2godHJ1ZSk7Ci0gICAgICBmbS5zZXRGYWNldHNUaGF0TWF0Y2hlZChmYWNldHNUaGF0TWF0Y2hlZCk7Ci0gICAgICBmbS5zZXRGYWNldHNUb0FkZChmYWNldHNUb0FkZCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmbTsKLSAgfQotICAgIAotICAvKioKLSAgICogQWRkcyBmYWNldCB2ZXJzaW9ucyB0byB0aGUgcHJvdmlkZWQgcHJvamVjdCBpZiByZXF1aXJlZCBiYXNlZCBvbiBjaGVja2luZyBwcm92aWRlZCAKLSAgICogcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgYWdhaW5zdCB0aGUgZmFjZXQgdmVyc2lvbnMgYWxyZWFkeSBpbnN0YWxsZWQgb24gcHJvamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0IElQcm9qZWN0IHdoaWNoIGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEBwYXJhbSByZnZzIGFycmF5IG9mIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLgotICAgKiBAcGFyYW0gbW9uaXRvciBwcm9ncmVzcyBtb25pdG9yCi0gICAqIEByZXR1cm4gSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuRVJST1IKLSAgICogPHVsPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgaXMgbm90IG9wZW4gb3I8L2xpPgotICAgKiA8bGk+YW4gYXR0ZW1wdCB0byBhZGQgZmFjZXQgdmVyc2lvbnMgdG8gdGhlIHByb2plY3QgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuPC9saT4KLSAgICogPC91bD4gCi0gICAqIE90aGVyd2lzZSwgcmV0dXJucyBhbiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5PSyAgICAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBhZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdnMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAKLSAgICBTZXQgbWlzc2luZ0ZhY2V0cyA9IG51bGw7Ci0gICAgU2V0IGZhY2V0c1RvQWRkID0gbmV3IEhhc2hTZXQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU2V0IHByb2plY3RGYWNldFZlcnNpb25zID0gZlByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICBGYWNldE1hdGNoZXIgcHJvamVjdEZhY2V0TWF0Y2hlciA9IEZhY2V0VXRpbHMubWF0Y2gocmZ2cywgcHJvamVjdEZhY2V0VmVyc2lvbnMpOwotICAgICAgICBpZiAocHJvamVjdEZhY2V0TWF0Y2hlci5pc01hdGNoKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaXNzaW5nRmFjZXRzID0gcHJvamVjdEZhY2V0TWF0Y2hlci5nZXRGYWNldHNUb0FkZCgpOwotICAgICAgICAgIGlmIChtaXNzaW5nRmFjZXRzLnNpemUoKSA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgSVJ1bnRpbWUgZlJ1bnRpbWUgPSBudWxsOwotICAgICAgICAgICAgZlJ1bnRpbWUgPSBGYWNldFV0aWxzLmdldEZhY2V0UnVudGltZUZvclByb2plY3QocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgaWYgKGZSdW50aW1lICE9IG51bGwpCi0gICAgICAgICAgICB7ICAKLSAgICAgICAgICAgICAgLy9BZGQgdGhlIGhpZ2hlc3QgdmVyc2lvbiBzdXBwb3J0ZWQgYnkgdGhlIHJ1bnRpbWUgdGhlIHByb2plY3QgaXMgYm91bmQgdG8uCi0gICAgICAgICAgICAgIEl0ZXJhdG9yIG1pc3NpbmdGYWNldHNJdHIgPSBtaXNzaW5nRmFjZXRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgIHdoaWxlIChtaXNzaW5nRmFjZXRzSXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElQcm9qZWN0RmFjZXQgZmFjZXQgPSAoKElQcm9qZWN0RmFjZXRWZXJzaW9uKW1pc3NpbmdGYWNldHNJdHIubmV4dCgpKS5nZXRQcm9qZWN0RmFjZXQoKTsKLSAgICAgICAgICAgICAgICAvL0dldCB0aGUgaGlnaGVzdCBsZXZlbCBvZiB0aGlzIGZhY2V0IHN1cHBvcnRlZCBieSB0aGUgcnVudGltZS4KLSAgICAgICAgICAgICAgICBMaXN0IHZlcnNpb25zID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucyA9IGZhY2V0LmdldFNvcnRlZFZlcnNpb25zKGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChWZXJzaW9uRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgU2V0IHZlcnNpb25TZXQgPSBmYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBpdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZmFjZXQuZ2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3IgaXRyID0gdmVyc2lvblNldC5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLmFkZChpdHIubmV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvL0l0ZXJhdGUgb3ZlciB0aGUgdmVyc2lvbnMgaW4gZGVzY2VuZGluZyBvcmRlciBhbmQgcGljayB0aGUgCi0gICAgICAgICAgICAgICAgLy9maXJzdCBvbmUgdGhhdCBmUnVudGltZSBzdXBwb3J0cy4KLSAgICAgICAgICAgICAgICBJdGVyYXRvciB2ZXJzaW9uc0l0ciA9IHZlcnNpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUodmVyc2lvbnNJdHIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbil2ZXJzaW9uc0l0ci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTZXQgcGZ2cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgICAgICAgICBwZnZzLmFkZChwZnYpOwotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAvL0NoZWNrIHRoZSByZXF1aXJlZCBmYWNldHMgdG8gc2VlIGlmIHRoaXMgdmVyc2lvbiBvZiB0aGlzIGZhY2V0IGlzIHN1cHBvcnRlZC4KLSAgICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxyZnZzLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZnYgPSByZnZzW2pdOwotICAgICAgICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBycGZ2ID0gcmZ2LmdldFByb2plY3RGYWNldFZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKS5lcXVhbHMocGZ2LmdldFByb2plY3RGYWNldCgpLmdldElkKCkpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHJwZnYuZ2V0VmVyc2lvblN0cmluZygpLmVxdWFscyhwZnYuZ2V0VmVyc2lvblN0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmZ2LmdldEFsbG93TmV3ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyZWF0ZXJUaGFuKHBmdi5nZXRWZXJzaW9uU3RyaW5nKCksIHJwZnYuZ2V0VmVyc2lvblN0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgYWdhaW5zdCBSdW50aW1lCi0gICAgICAgICAgICAgICAgICAgIGlmIChGYWNldFV0aWxzLmRvZXNSdW50aW1lU3VwcG9ydEZhY2V0cyhmUnVudGltZSwgcGZ2cykpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAvL1dlIGhhdmUgYSBtYXRjaC4gQWRkIHRoaXMgb25lIHRvIHRoZSBtYXN0ZXIgc2V0LgotICAgICAgICAgICAgICAgICAgICAgIGZhY2V0c1RvQWRkLmFkZChwZnYpOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGZhY2V0c1RvQWRkID0gbWlzc2luZ0ZhY2V0czsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdHVzID0gYWRkRmFjZXRzVG9Qcm9qZWN0KGZQcm9qZWN0LCBmYWNldHNUb0FkZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICB7Ci0gICAgICAvL0Rpc3BsYXkgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB0byB0aGUgdXNlci4KLSAgICAgIC8vQSBDb3JlRXhjZXB0aW9uIGNvdWxkIGhhdmUgYmVlbiB0aHJvd24gZm9yIGFueSBvZiB0aGUgZm9sbG93aW5nIHRocmVlIHJlYXNvbnMKLSAgICAgIC8vMS4gVGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3QKLSAgICAgIC8vMi4gVGhlIHByb2plY3QgaXMgbm90IG9wZW4KLSAgICAgIC8vMy4gVGhlcmUgd2FzIGEgcHJvYmxlbSBhZGRpbmcgdGhlIGZhY2V0cyB0byB0aGUgcHJvamVjdC4KLSAgICAgIAotICAgICAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0RPRVNfTk9UX0VYSVNULCBuZXcgU3RyaW5nW10geyBwcm9qZWN0LmdldE5hbWUoKX0pKTsgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFwcm9qZWN0LmlzT3BlbigpKQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0lTX05PVF9PUEVOLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0LmdldE5hbWUoKX0pKTsgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgCi0gICAgICAgIHN0YXR1cyA9IGdldEVycm9yU3RhdHVzRm9yQWRkaW5nRmFjZXRzKHByb2plY3QuZ2V0TmFtZSgpLCBmYWNldHNUb0FkZCwgY2UpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBBZGRzIHRoZSBwcm92aWRlZCBzZXQgb2YgZmFjZXQgdmVyc2lvbnMgdG8gdGhlIHByb3ZpZGVkIGZhY2V0ZWQgcHJvamVjdAotICAgKiAKLSAgICogQHBhcmFtIGZwcm9qZWN0IEEgZmFjZXRlZCBwcm9qZWN0IHdoaWNoIGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEBwYXJhbSBwcm9qZWN0RmFjZXRWZXJzaW9ucyBBIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcmV0dXJuIEFuIElTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIElTdGF0dXMuT0sgaWYgdGhlIGZhY2V0IAotICAgKiB2ZXJzaW9ucyB3ZXJlIGFkZGVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlLCBhbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZgotICAgKiBJU3RhdHVzLkVSUk9SLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBhZGRGYWNldHNUb1Byb2plY3QoZmluYWwgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0LCBmaW5hbCBTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICBmaW5hbCBJU3RhdHVzW10gc3RhdHVzID0gbmV3IElTdGF0dXNbMV07Ci0gICAgc3RhdHVzWzBdID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBmaW5hbCBTZXQgYWN0aW9ucyA9IGdldEluc3RhbGxBY3Rpb25zKHByb2plY3RGYWNldFZlcnNpb25zKTsKLSAgICAKLSAgICAvLyBDcmVhdGUgYSBydW5uYWJsZSB0aGF0IGFwcGxpZXMgdGhlIGluc3RhbGwgYWN0aW9ucyB0byB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0gICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3Igc2hlbGxNb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmcHJvamVjdC5tb2RpZnkoYWN0aW9ucywgc2hlbGxNb25pdG9yKTsKLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JBZGRpbmdGYWNldHMoZnByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgcHJvamVjdEZhY2V0VmVyc2lvbnMsIGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsgICAgCi0gICAgICAgIAotICAgIC8vIFJ1biB0aGUgcnVubmFibGUgaW4gYW5vdGhlciB0aHJlYWQgdW5sZXNzIHRoZXJlIGlzIG5vIFVJIHRocmVhZCAoQW50IHNjZW5hcmlvcykKLSAgICBpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkKLSAgICB7ICAgIAkKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLCBmYWxzZSwgcnVubmFibGUpOwotCSAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkKLQkgICAgewotCSAgICAgIHN0YXR1c1swXSA9IGdldEVycm9yU3RhdHVzRm9yQWRkaW5nRmFjZXRzKGZwcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIHByb2plY3RGYWNldFZlcnNpb25zLCBpdGUpOwotCSAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkKLQkgICAgewotCSAgICAgIHN0YXR1c1swXSA9IGdldEVycm9yU3RhdHVzRm9yQWRkaW5nRmFjZXRzKGZwcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIHByb2plY3RGYWNldFZlcnNpb25zLCBpZSk7Ci0JICAgIH0KLQl9Ci0JZWxzZQotCXsKLQkJdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmcHJvamVjdC5tb2RpZnkoYWN0aW9ucywgbnVsbCk7Ci0gICAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c1swXSA9IGdldEVycm9yU3RhdHVzRm9yQWRkaW5nRmFjZXRzKGZwcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIHByb2plY3RGYWNldFZlcnNpb25zLCBlKTsKLSAgICAgICAgfQotCX0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzWzBdOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhbiBlcnJvciBzdGF0dXMgaW5kaWNhdGluZyB0aGF0IHRoZSBmYWNldCB2ZXJzaW9ucyBjb3VsZCBub3QgYmUKLSAgICogYWRkZWQgdG8gdGhlIGZhY2V0ZWQgcHJvamVjdAotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIGEgcHJvamVjdCBuYW1lIHRvIGluc2VydCBpbiB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgSVN0YXR1cwotICAgKiBAcGFyYW0gcHJvamVjdEZhY2V0VmVyc2lvbnMgYSBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0uCi0gICAqIFRoZSBmYWNldHMgaW4gdGhpcyBzZXQgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIElTdGF0dXMuCi0gICAqIEBwYXJhbSB0IGEgVGhyb3dhYmxlIHdoaWNoIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIElTdGF0dXMKLSAgICogQHJldHVybiBhbiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5FUlJPUgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgSVN0YXR1cyBnZXRFcnJvclN0YXR1c0ZvckFkZGluZ0ZhY2V0cyhTdHJpbmcgcHJvamVjdE5hbWUsIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9ucywgVGhyb3dhYmxlIHQpCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaW50IHNpemUgPSBwcm9qZWN0RmFjZXRWZXJzaW9ucy5zaXplKCk7Ci0gICAgaWYgKHNpemUgPiAwKQotICAgIHsgICAgICAgICAgCi0gICAgICBTZXQgZmFjZXRzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgIC8vSXRlcmF0ZSBvdmVyIHByb2plY3RGYWNldFZlcnNpb25zIHRvIGZvcm0gYSBzZXQgb2YgSVByb2plY3RGYWNldHMKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IHByb2plY3RGYWNldFZlcnNpb25zLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcHJvamVjdEZhY2V0ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWl0ci5uZXh0KCk7Ci0gICAgICAgIElQcm9qZWN0RmFjZXQgZmFjZXQgPSBwcm9qZWN0RmFjZXQuZ2V0UHJvamVjdEZhY2V0KCk7Ci0gICAgICAgIGZhY2V0cy5hZGQoZmFjZXQpOwotICAgICAgfQotICAgICAgU3RyaW5nIGZhY2V0TGlzdCA9IGdldEZhY2V0TGlzdE1lc3NhZ2VTdHJpbmcoZmFjZXRzKTsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0FERElOR19GQUNFVFNfVE9fUFJPSkVDVCwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUsIGZhY2V0TGlzdH0pLCB0KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgZmFjZXRlZCBwcm9qZWN0IHdpdGggdGhlIHByb3ZpZGVkIG5hbWUKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBBIFN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRvIGJlIGNyZWF0ZWQKLSAgICogQHJldHVybiBBbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBJU3RhdHVzLk9LIGlmIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICogd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIGlmIGEgcHJvamVjdCBvZiB0aGUgcHJvdmlkZWQgbmFtZSBhbHJlYWR5Ci0gICAqIGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLiBPdGhlcndpc2UsIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBvZgotICAgKiBJU3RhdHVzLkVSUk9SLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBjcmVhdGVOZXdGYWNldGVkUHJvamVjdChmaW5hbCBTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgICBmaW5hbCBJU3RhdHVzW10gc3RhdHVzID0gbmV3IElTdGF0dXNbMV07Ci0gICAgc3RhdHVzWzBdID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgLy8gQ3JlYXRlIGEgcnVubmFibGUgdGhhdCBjcmVhdGVzIGEgbmV3IGZhY2V0ZWQgcHJvamVjdC4KLSAgICAgIElSdW5uYWJsZVdpdGhQcm9ncmVzcyBydW5uYWJsZSA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBzaGVsbE1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3ROYW1lLCBudWxsLCBzaGVsbE1vbml0b3IpOwotICAgICAgICAgICAgaWYgKGZQcm9qZWN0ID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSksIGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfTsKLQotICAgIC8vIFJ1biB0aGUgcnVubmFibGUgaW4gYW5vdGhlciB0aHJlYWQgdW5sZXNzIHRoZXJlIGlzIG5vIFVJIHRocmVhZCAoQW50IHNjZW5hcmlvcykgICAgCSAgCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAJICBpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkKLSAgICAJICB7Ci0gICAgCQkgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkucnVuKHRydWUsIGZhbHNlLCBydW5uYWJsZSk7ICAgIAkJICAKLSAgICAJICB9Ci0gICAgCSAgZWxzZQotICAgIAkgIHsKLSAgICAJCSAgdHJ5Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotICAgICAgICAgICAgICAgIGlmIChmUHJvamVjdCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pLCBlKTsKLSAgICAgICAgICAgICAgfSAgCi0gICAgCSAgfSAgICAgICAgCi0gICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkKLSAgICAgIHsKLSAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSksIGl0ZSk7Ci0gICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkKLSAgICAgIHsKLSAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSksIGllKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzWzBdOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgcHJvdmlkZWQgc2V0IG9mIGZhY2V0cyBhcyBmaXhlZCBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0gICAqIAotICAgKiBAcGFyYW0gZlByb2plY3QgQSBmYWNldGVkIHByb2plY3Qgd2hpY2ggZXhpc3RzIGluIHRoZSB3b3Jrc3BhY2UKLSAgICogQHBhcmFtIGZpeGVkRmFjZXRzIEEgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldH0KLSAgICogQHJldHVybiBBbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBJU3RhdHVzLk9LIGlmIHRoZSBmYWNldHMgCi0gICAqIHdlcmUgc3VjY2Vzc2Z1bGx5IHNldCBhcyBmaXhlZCBmYWNldHMgb24gdGhlIGZhY2V0ZWQgcHJvamVjdC4gCi0gICAqIE90aGVyd2lzZSwgYW4gSVN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgSVN0YXR1cy5FUlJPUi4KLSAgICogCi0gICAqIEBzZWUgSUZhY2V0ZWRQcm9qZWN0I3NldEZpeGVkUHJvamVjdEZhY2V0cwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIHNldEZpeGVkRmFjZXRzT25Qcm9qZWN0KGZpbmFsIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCwgZmluYWwgU2V0IGZpeGVkRmFjZXRzKQotICB7Ci0gICAgZmluYWwgSVN0YXR1c1tdIHN0YXR1cyA9IG5ldyBJU3RhdHVzWzFdOwotICAgIHN0YXR1c1swXSA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICAvL0NyZWF0ZSBhIHJ1bm5hYmxlIHRoYXQgc2V0cyB0aGUgZml4ZWQgZmFjZXRzIG9uIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBzaGVsbE1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGZQcm9qZWN0LnNldEZpeGVkUHJvamVjdEZhY2V0cyhmaXhlZEZhY2V0cyk7Ci0gICAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c1swXSA9IGdldEVycm9yU3RhdHVzRm9yU2V0dGluZ0ZpeGVkRmFjZXRzKGZQcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIGZpeGVkRmFjZXRzLCBlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBSdW4gdGhlIHJ1bm5hYmxlIGluIGFub3RoZXIgdGhyZWFkIHVubGVzcyB0aGVyZSBpcyBubyBVSSB0aHJlYWQgKEFudCBzY2VuYXJpb3MpCi0gICAgaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpCi0gICAgewotICAgIAl0cnkKLSAgICAgICAgewotICAgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkucnVuKHRydWUsIGZhbHNlLCBydW5uYWJsZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JTZXR0aW5nRml4ZWRGYWNldHMoZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZml4ZWRGYWNldHMsIGl0ZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JTZXR0aW5nRml4ZWRGYWNldHMoZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZml4ZWRGYWNldHMsIGllKTsKLSAgICAgICAgfQkKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAJdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmUHJvamVjdC5zZXRGaXhlZFByb2plY3RGYWNldHMoZml4ZWRGYWNldHMpOwotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNbMF0gPSBnZXRFcnJvclN0YXR1c0ZvclNldHRpbmdGaXhlZEZhY2V0cyhmUHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBmaXhlZEZhY2V0cywgZSk7Ci0gICAgICAgIH0KLSAgICB9ICAgICAgIAotICAgIAotICAgIHJldHVybiBzdGF0dXNbMF07Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGVycm9yIHN0YXR1cyBpbmRpY2F0aW5nIHRoYXQgdGhlIGZhY2V0cyBjb3VsZCBub3QgYmUKLSAgICogc2V0IGFzIGZpeGVkIGZhY2V0cyBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgYSBwcm9qZWN0IG5hbWUgdG8gaW5zZXJ0IGluIHRoZSBlcnJvciBtZXNzYWdlIGluIHRoZSBJU3RhdHVzCi0gICAqIEBwYXJhbSBmYWNldHMgYSBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0fS4KLSAgICogVGhlIGZhY2V0cyBpbiB0aGlzIHNldCB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgSVN0YXR1cy4KLSAgICogQHBhcmFtIHQgYSBUaHJvd2FibGUgd2hpY2ggd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgSVN0YXR1cwotICAgKiBAcmV0dXJuIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLkVSUk9SCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBJU3RhdHVzIGdldEVycm9yU3RhdHVzRm9yU2V0dGluZ0ZpeGVkRmFjZXRzKFN0cmluZyBwcm9qZWN0TmFtZSwgU2V0IGZhY2V0cywgVGhyb3dhYmxlIHQpCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaW50IHNpemUgPSBmYWNldHMuc2l6ZSgpOwotICAgIGlmIChzaXplID4gMCkKLSAgICB7ICAgICAgICAgIAotICAgICAgU3RyaW5nIGZhY2V0TGlzdCA9IGdldEZhY2V0TGlzdE1lc3NhZ2VTdHJpbmcoZmFjZXRzKTsgICAgICAKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0ZJWEVEX0ZBQ0VUUywgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUsIGZhY2V0TGlzdH0pLCB0KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfSAgCi0gIAotICAKLSAgLyoqCi0gICAqIEJpbmRzIHRoZSBmYWNldGVkIHByb2plY3QgdG8gdGhlIGZhY2V0IHJ1bnRpbWUKLSAgICogCi0gICAqIEBwYXJhbSBmUHJvamVjdCBBIGZhY2V0ZWQgcHJvamVjdCB3aGljaCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcGFyYW0gZlJ1bnRpbWUgQSBmYWNldCBydW50aW1lCi0gICAqIEByZXR1cm4gQW4gSVN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgSVN0YXR1cy5PSyBpZiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0gICAqIHdhcyBib3VuZCB0byB0aGUgZmFjZXQgcnVudGltZSBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSwgYW4gSVN0YXR1cyB3aXRoIHNldmVyaXR5IG9mCi0gICAqIElTdGF0dXMuRVJST1IuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIHNldEZhY2V0UnVudGltZU9uUHJvamVjdChmaW5hbCBJRmFjZXRlZFByb2plY3QgZlByb2plY3QsIGZpbmFsIElSdW50aW1lIGZSdW50aW1lKQotICB7Ci0gICAgZmluYWwgSVN0YXR1c1tdIHN0YXR1cyA9IG5ldyBJU3RhdHVzWzFdOwotICAgIHN0YXR1c1swXSA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICAvL0NyZWF0ZSBhIHJ1bm5hYmxlIHRoYXQgc2V0cyB0aGUgZmFjZXQgcnVudGltZSBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0gICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3Igc2hlbGxNb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgCWZQcm9qZWN0LnNldFRhcmdldGVkUnVudGltZXMoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGZSdW50aW1lKSwgc2hlbGxNb25pdG9yKTsKLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VUVElOR19SVU5USU1FLCBuZXcgU3RyaW5nW10geyBmUHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBmUnVudGltZS5nZXROYW1lKCkgfSksIGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFJ1biB0aGUgcnVubmFibGUgaW4gYW5vdGhlciB0aHJlYWQgdW5sZXNzIHRoZXJlIGlzIG5vIFVJIHRocmVhZCAoQW50IHNjZW5hcmlvcykKLSAgICBpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgCXRyeQotICAgICAgICB7Ci0gICAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSwgZmFsc2UsIHJ1bm5hYmxlKTsKLSAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVRUSU5HX1JVTlRJTUUsIG5ldyBTdHJpbmdbXSB7IGZQcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIGZSdW50aW1lLmdldE5hbWUoKSB9KSwgaXRlKTsKLSAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVRUSU5HX1JVTlRJTUUsIG5ldyBTdHJpbmdbXSB7IGZQcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIGZSdW50aW1lLmdldE5hbWUoKSB9KSwgaWUpOwotICAgICAgICB9CQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAJdHJ5Ci0gICAgICAgIHsKLSAgICAJCWZQcm9qZWN0LnNldFRhcmdldGVkUnVudGltZXMoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGZSdW50aW1lKSwgbnVsbCk7IC8vanZoIC0gaGFwcGVucyBoZXJlLi4uCi0gICAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFVFRJTkdfUlVOVElNRSwgbmV3IFN0cmluZ1tdIHsgZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZlJ1bnRpbWUuZ2V0TmFtZSgpIH0pLCBlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgCi0gICAgcmV0dXJuIHN0YXR1c1swXTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSB0cmFuc2xhdGFibGUgZGVsaW1pdGVkIGxpc3Qgb2YgZmFjZXQgbGFiZWxzIGRlcml2ZWQgZnJvbSB0aGUgcHJvdmlkZWQKLSAgICogc2V0IG9mIGZhY2V0cwotICAgKiAKLSAgICogQHBhcmFtIGZhY2V0cyBhIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXR9Ci0gICAqIEByZXR1cm4gU3RyaW5nIGEgZGVsaW1pdGVkIGxpc3Qgb2YgZmFjZXQgbGFiZWxzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RmFjZXRMaXN0TWVzc2FnZVN0cmluZyhTZXQgZmFjZXRzKQotICB7Ci0gICAgU3RyaW5nIGZhY2V0TGlzdE1lc3NhZ2UgPSAiIjsKLSAgICBpbnQgc2l6ZSA9IGZhY2V0cy5zaXplKCk7Ci0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IGZhY2V0cy5pdGVyYXRvcigpOwotICAgICAgSVByb2plY3RGYWNldCBmaXJzdFByb2plY3RGYWNldCA9IChJUHJvamVjdEZhY2V0KWl0ci5uZXh0KCk7Ci0gICAgICBmYWNldExpc3RNZXNzYWdlID0gZmlyc3RQcm9qZWN0RmFjZXQuZ2V0TGFiZWwoKTsKLSAgICAgIAotICAgICAgLy9Db250aW51ZSBhcHBlbmRpbmcgdG8gZmFjZXRMaXN0TWVzc2FnZSB1bnRpbCBhbGwgdGhlIGZhY2V0IGxhYmVscwotICAgICAgLy9hcmUgaW4gdGhlIGxpc3QuCi0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSVByb2plY3RGYWNldCBwcm9qZWN0RmFjZXQgPSAoSVByb2plY3RGYWNldClpdHIubmV4dCgpOwotICAgICAgICBTdHJpbmcgcGZMYWJlbCA9IHByb2plY3RGYWNldC5nZXRMYWJlbCgpOwotICAgICAgICBmYWNldExpc3RNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRkFDRVRTLCBuZXcgU3RyaW5nW10ge2ZhY2V0TGlzdE1lc3NhZ2UsIHBmTGFiZWx9KTsKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiBmYWNldExpc3RNZXNzYWdlOwotICB9Ci0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNldCBvZiBmYWNldCB2ZXJzaW9ucyB3aGljaCBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgcHJvdmlkZWQgSmF2YSBwcm9qZWN0Ci0gICAqIAotICAgKiBAcGFyYW0gamF2YVByb2plY3QgYSBKYXZhIHByb2plY3QgdGhhdCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZS4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHJldHVybiBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2V0IGdldEZhY2V0c0ZvckphdmFQcm9qZWN0KElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCkKLSAgewotICAgIFNldCBmYWNldHMgPSBuZXcgSGFzaFNldCgpOwotICAgIFN0cmluZyBqZGtDb21wbGlhbmNlTGV2ZWwgPSBudWxsOwotICAgIGlmIChqYXZhUHJvamVjdCE9bnVsbCkKLSAgICB7Ci0gICAgICBqZGtDb21wbGlhbmNlTGV2ZWwgPSBqYXZhUHJvamVjdC5nZXRPcHRpb24oIm9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2UiLCBmYWxzZSk7Ci0gICAgICBpZiAoamRrQ29tcGxpYW5jZUxldmVsID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGpka0NvbXBsaWFuY2VMZXZlbCA9IEphdmFDb3JlLmdldE9wdGlvbihKYXZhQ29yZS5DT01QSUxFUl9DT01QTElBTkNFKTsKLSAgICAgICAgaWYgKGpka0NvbXBsaWFuY2VMZXZlbCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgamRrQ29tcGxpYW5jZUxldmVsID0gIjEuNCI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgSVByb2plY3RGYWNldCBqYXZhRmFjZXQgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSU1vZHVsZUNvbnN0YW50cy5KU1RfSkFWQSk7Ci0gICAgSVByb2plY3RGYWNldFZlcnNpb24gamF2YUZhY2V0VmVyc2lvbiA9IG51bGw7Ci0gICAgaWYgKGpka0NvbXBsaWFuY2VMZXZlbC5lcXVhbHMoIjEuMyIpKQotICAgIHsKLSAgICAgIGphdmFGYWNldFZlcnNpb24gPSBqYXZhRmFjZXQuZ2V0VmVyc2lvbigiMS4zIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGpka0NvbXBsaWFuY2VMZXZlbC5lcXVhbHMoIjEuNCIpKQotICAgIHsKLSAgICAgIGphdmFGYWNldFZlcnNpb24gPSBqYXZhRmFjZXQuZ2V0VmVyc2lvbigiMS40Iik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGpka0NvbXBsaWFuY2VMZXZlbC5lcXVhbHMoIjEuNSIpKQotICAgIHsKLSAgICAgIGphdmFGYWNldFZlcnNpb24gPSBqYXZhRmFjZXQuZ2V0VmVyc2lvbigiNS4wIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGpka0NvbXBsaWFuY2VMZXZlbC5lcXVhbHMoIjEuNiIpKQotICAgIHsKLSAgICAgIGphdmFGYWNldFZlcnNpb24gPSBqYXZhRmFjZXQuZ2V0VmVyc2lvbigiNi4wIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBqYXZhRmFjZXRWZXJzaW9uID0gamF2YUZhY2V0LmdldFZlcnNpb24oIjEuNCIpOwotICAgIH0KLSAKLSAgICBmYWNldHMuYWRkKGphdmFGYWNldFZlcnNpb24pOwotICAgIElQcm9qZWN0RmFjZXQgdXRpbGl0eUZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfTU9EVUxFKTsKLSAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB1dGlsaXR5RmFjZXRWZXJzaW9uID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICB1dGlsaXR5RmFjZXRWZXJzaW9uID0gdXRpbGl0eUZhY2V0LmdldExhdGVzdFZlcnNpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgewotICAgICAgCi0gICAgfQotICAgIGlmICh1dGlsaXR5RmFjZXRWZXJzaW9uICE9IG51bGwpCi0gICAgewotICAgICAgZmFjZXRzLmFkZCh1dGlsaXR5RmFjZXRWZXJzaW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhY2V0czsKLSAgfQotICAKLSAgCi0gIC8vTWV0aG9kcyByZWxhdGVkIHRvIGZhY2V0IHJ1bnRpbWVzLgotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzZXQgb2YgZmFjZXQgcnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4KLSAgICogQHBhcmFtIHJlcXVpcmVkRmFjZXRWZXJzaW9ucyBhbiBhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIFJlcXVpcmVkRmFjZXRWZXJzaW9ufQotICAgKiBAcmV0dXJuIFNldCBzZXQgb2YgZmFjZXQgcnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbiByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4KLSAgICogKGVsZW1lbnQgdHlwZToge0BsaW5rIElSdW50aW1lfSkgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldCBnZXRSdW50aW1lcyhSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJlcXVpcmVkRmFjZXRWZXJzaW9ucykKLSAgewotICAgIC8vRm9ybSB0aGUgc2V0cyBvZiBJUHJvamVjdEZhY2V0VmVyc2lvbnMgdGhlc2UgUmVxdWlyZWRGYWNldFZlcnNpb25zIHJlcHJlc2VudC4KLSAgICBBcnJheUxpc3QgbGlzdE9mRmFjZXRTZXRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIEhhc2hTZXQgZmFjZXRzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBpbnQgamF2YUZhY2V0SW5kZXggPSAtMTsKLSAgICBmb3IgKGludCBpPTA7IGk8cmVxdWlyZWRGYWNldFZlcnNpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IHJlcXVpcmVkRmFjZXRWZXJzaW9uc1tpXS5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCk7Ci0gICAgICBpZiAoRmFjZXRVdGlscy5pc0phdmFGYWNldChwZnYuZ2V0UHJvamVjdEZhY2V0KCkpKQotICAgICAgewotICAgICAgICAvL1JlbWVtYmVyIHRoZSBpbmRleAotICAgICAgICBqYXZhRmFjZXRJbmRleCA9IGk7Ci0gICAgICB9Ci0gICAgICBmYWNldHMuYWRkKHJlcXVpcmVkRmFjZXRWZXJzaW9uc1tpXS5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCkpOwotICAgIH0KLSAgICAKLSAgICBsaXN0T2ZGYWNldFNldHMuYWRkKGZhY2V0cyk7Ci0gICAgCi0gICAgLy9JZiB0aGUgamF2YSBmYWNldCB3YXMgb25lIG9mIHRoZSBmYWNldHMgaW4gdGhlIHNldCwgYW5kIG5ldyB2ZXJzaW9ucyBvZiBqYXZhIGFyZSBhbGxvd2VkLAotICAgIC8vY3JlYXRlIHNldHMgdGhhdCBjb250YWluIHRoZSBuZXdlciBwZXJtaXR0ZWQgdmVyc2lvbnMgb2YgdGhlIGphdmEgZmFjZXRzLgotICAgIGlmIChqYXZhRmFjZXRJbmRleCA+IC0xKQotICAgIHsKLSAgICAgIEFycmF5TGlzdCBwZXJtaXR0ZWRKYXZhVmVyc2lvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZnYgPSByZXF1aXJlZEZhY2V0VmVyc2lvbnNbamF2YUZhY2V0SW5kZXhdOwotICAgICAgaWYgKHJmdi5nZXRBbGxvd05ld2VyKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB2ZXJzaW9uID0gcmZ2LmdldFByb2plY3RGYWNldFZlcnNpb24oKS5nZXRWZXJzaW9uU3RyaW5nKCk7ICAgICAgCi0gICAgICAgIFNldCBhbGxWZXJzaW9ucyA9IHJmdi5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCkuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0VmVyc2lvbnMoKTsKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gYWxsVmVyc2lvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB0aGlzUGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWl0ci5uZXh0KCk7Ci0gICAgICAgICAgU3RyaW5nIHRoaXNWZXJzaW9uID0gdGhpc1Bmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgICAgaWYgKGdyZWF0ZXJUaGFuKHRoaXNWZXJzaW9uLCB2ZXJzaW9uKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwZXJtaXR0ZWRKYXZhVmVyc2lvbnMuYWRkKHRoaXNWZXJzaW9uKTsKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJpbmdbXSBqYXZhVmVyc2lvbnMgPSAoU3RyaW5nW10pcGVybWl0dGVkSmF2YVZlcnNpb25zLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBqPTA7IGo8amF2YVZlcnNpb25zLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaFNldCB0aGlzRmFjZXRTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgIAotICAgICAgICAgIGZvciAoaW50IGs9MDsgazxyZXF1aXJlZEZhY2V0VmVyc2lvbnMubGVuZ3RoOyBrKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgIGlmIChrPT1qYXZhRmFjZXRJbmRleCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSByZXF1aXJlZEZhY2V0VmVyc2lvbnNba10uZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpLmdldFByb2plY3RGYWNldCgpLmdldFZlcnNpb24oamF2YVZlcnNpb25zW2pdKTsKLSAgICAgICAgICAgICAgIHRoaXNGYWNldFNldC5hZGQocGZ2KTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IHJlcXVpcmVkRmFjZXRWZXJzaW9uc1trXS5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICB0aGlzRmFjZXRTZXQuYWRkKHBmdik7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBsaXN0T2ZGYWNldFNldHMuYWRkKHRoaXNGYWNldFNldCk7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vUmV0dXJuIHRoZSB1bmlvbiBvZiBydW50aW1lcyBmb3IgYWxsIHRoZSBmYWNldFNldHMuCi0gICAgcmV0dXJuIGdldFJ1bnRpbWVzKChTZXRbXSlsaXN0T2ZGYWNldFNldHMudG9BcnJheShuZXcgU2V0WzBdKSk7Ci0gICAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIGZhY2V0IHJ1bnRpbWUgc3VwcG9ydHMgdGhlIHByb3ZpZGVkCi0gICAqIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLgotICAgKiAKLSAgICogQHBhcmFtIHJlcXVpcmVkRmFjZXRWZXJzaW9ucyBhbiBhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIFJlcXVpcmVkRmFjZXRWZXJzaW9ufQotICAgKiBAcGFyYW0gZlJ1bnRpbWVOYW1lIG5hbWUgb2YgYSB7QGxpbmsgSVJ1bnRpbWV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZmFjZXQgcnVudGltZSBzdXBwb3J0cyB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ZhY2V0UnVudGltZVN1cHBvcnRlZChSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJlcXVpcmVkRmFjZXRWZXJzaW9ucywgU3RyaW5nIGZSdW50aW1lTmFtZSkKLSAgewotICAgIFNldCBmUnVudGltZXMgPSBnZXRSdW50aW1lcyhyZXF1aXJlZEZhY2V0VmVyc2lvbnMpOwotICAgIEl0ZXJhdG9yIGl0ciA9IGZSdW50aW1lcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIElSdW50aW1lIHJ1bnRpbWUgPSAoSVJ1bnRpbWUpaXRyLm5leHQoKTsKLSAgICAgIGlmIChydW50aW1lLmdldE5hbWUoKS5lcXVhbHMoZlJ1bnRpbWVOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAgIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgdW5pb24gb2YgZmFjZXQgcnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBwcm92aWRlZCBzZXRzIG9mIGZhY2V0IHZlcnNpb25zLgotICAgKiAKLSAgICogQHBhcmFtIGZhY2V0U2V0cyBhcnJheSBvZiBTZXRzLCB3aGVyZSBlYWNoIFNldCBjb250YWlucyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0uCi0gICAqIEByZXR1cm4gU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVJ1bnRpbWV9Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldCBnZXRSdW50aW1lcyhTZXRbXSBmYWNldFNldHMpICAKLSAgewotICAgIEhhc2hTZXQgdW5pb25TZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxmYWNldFNldHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU2V0IGZhY2V0cyA9IGZhY2V0U2V0c1tpXTsKLSAgICAgIFNldCBydW50aW1lcyA9IFJ1bnRpbWVNYW5hZ2VyLmdldFJ1bnRpbWVzKGZhY2V0cyk7Ci0gICAgICBJdGVyYXRvciBpdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElSdW50aW1lIHJ1bnRpbWUgPSAoSVJ1bnRpbWUpaXRyLm5leHQoKTsKLSAgICAgICAgaWYgKCF1bmlvblNldC5jb250YWlucyhydW50aW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHVuaW9uU2V0LmFkZChydW50aW1lKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdW5pb25TZXQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBmYWNldCBydW50aW1lIHN1cHBvcnRzIHRoZSBwcm92aWRlZCBzZXQgb2YgZmFjZXQgdmVyc2lvbnMuCi0gICAqIAotICAgKiBAcGFyYW0gZmFjZXRSdW50aW1lIGEgZmFjZXQgcnVudGltZQotICAgKiBAcGFyYW0gcHJvamVjdEZhY2V0VmVyc2lvbnMgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZmFjZXQgcnVudGltZSBzdXBwb3J0cyB0aGUgcHJvdmlkZWQgc2V0IG9mIGZhY2V0IHZlcnNpb25zLgotICAgKiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc1J1bnRpbWVTdXBwb3J0RmFjZXRzKElSdW50aW1lIGZhY2V0UnVudGltZSwgU2V0IHByb2plY3RGYWNldFZlcnNpb25zKQotICB7Ci0gICAgU2V0IHJ1bnRpbWVzID0gUnVudGltZU1hbmFnZXIuZ2V0UnVudGltZXMocHJvamVjdEZhY2V0VmVyc2lvbnMpOwotICAgIEl0ZXJhdG9yIGl0ciA9IHJ1bnRpbWVzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSVJ1bnRpbWUgcnVudGltZSA9IChJUnVudGltZSlpdHIubmV4dCgpOwotICAgICAgaWYgKHJ1bnRpbWUuZ2V0TmFtZSgpLmVxdWFscyhmYWNldFJ1bnRpbWUuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBncmVhdGVyIHRoYW4gdmVyc2lvbkIKLSAgICogCi0gICAqIEBwYXJhbSB2ZXJzaW9uQSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZm9ybSAxLjIuMwotICAgKiBAcGFyYW0gdmVyc2lvbkEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gMS4yLjMKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHZlcnNpb25BIGlzIGdyZWF0ZXIgdGhhbiB2ZXJzaW9uQiwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBncmVhdGVyVGhhbihTdHJpbmcgdmVyc2lvbkEsIFN0cmluZyB2ZXJzaW9uQikKLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdEEgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZlcnNpb25BLCAiLiIpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdEIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZlcnNpb25CLCAiLiIpOwotICAgIAotICAgIGludCBzaXplQSA9IHN0QS5jb3VudFRva2VucygpOwotICAgIGludCBzaXplQiA9IHN0Qi5jb3VudFRva2VucygpOwotICAgIAotICAgIGludCBzaXplOwotICAgIGlmIChzaXplQSA8IHNpemVCKQotICAgIHsKLSAgICAgIHNpemUgPSBzaXplQTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc2l6ZSA9IHNpemVCOwotICAgIAotICAgIGZvciAoaW50IGk9MDsgaTxzaXplOyBpKyspCi0gICAgewotICAgICAgaW50IGEgPSBJbnRlZ2VyLnBhcnNlSW50KHN0QS5uZXh0VG9rZW4oKSk7Ci0gICAgICBpbnQgYiA9IEludGVnZXIucGFyc2VJbnQoc3RCLm5leHRUb2tlbigpKTsKLSAgICAgIGlmIChhIT1iKQotICAgICAgewotICAgICAgICByZXR1cm4gYSA+IGI7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBzaXplQSA+IHNpemVCOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBmYWNldCBoYXMgYW4gaWQgb2YgImpzdC5qYXZhIgotICAgKiBAcGFyYW0gcGYgZmFjZXQKLSAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiBmYWNldCBoYXMgYW4gaWQgb2YgImpzdC5qYXZhIiwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0phdmFGYWNldChJUHJvamVjdEZhY2V0IHBmKQotICB7Ci0gICAgaWYgKHBmLmdldElkKCkuZXF1YWxzKCJqc3QuamF2YSIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgcHJvamVjdCBpcyBhIGZhY2V0ZWQgSmF2YSB1dGlsaXR5IHByb2plY3Qgb3IgYSBub24tZmFjZXRlZCBKYXZhIHByb2plY3QuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdCBhbiBJUHJvamVjdAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb3ZpZGVkIHByb2plY3QgaXMgYSBmYWNldGVkIEphdmEgdXRpbGl0eSBwcm9qZWN0IAotICAgKiBvciBhIG5vbi1mYWNldGVkIEphdmEgcHJvamVjdCwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0phdmFQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICAvL0NoZWNrIGlmIGl0J3MgYSBmYWNldGVkIHByb2plY3QKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy9SZXR1cm4gdHJ1ZSBpZiBpdCdzIGEgdXRpbGl0eSBwcm9qZWN0Ci0gICAgICAgIGlmIChKMkVFVXRpbHMuaXNKYXZhQ29tcG9uZW50KHByb2plY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9TZWUgaWYgdGhlIGphdmEgZmFjZXQgaXMgdGhlIG9ubHkgb25lIGl0IGhhcy4KLSAgICAgICAgICBTZXQgZmFjZXRzID0gZlByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICAgIGlmIChmYWNldHMuc2l6ZSgpPT0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbilmYWNldHMuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoaXNKYXZhRmFjZXQocGZ2LmdldFByb2plY3RGYWNldCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCB0ZW1wbGF0ZSBpZCBpcyBlcXVhbCB0byAidGVtcGxhdGUuanN0LnV0aWxpdHkiCi0gICAqIAotICAgKiBAcGFyYW0gdGVtcGxhdGVJZCB0ZW1wbGF0ZSBpZAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb3ZpZGVkIHRlbXBsYXRlIGlkIGlzIGVxdWFsIHRvICJ0ZW1wbGF0ZS5qc3QudXRpbGl0eSIsIAotICAgKiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVXRpbGl0eVRlbXBsYXRlKFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgaWYgKFByb2plY3RGYWNldHNNYW5hZ2VyLmlzVGVtcGxhdGVEZWZpbmVkKHRlbXBsYXRlSWQpKQotICAgIHsKLSAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscygidGVtcGxhdGUuanN0LnV0aWxpdHkiKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAgICAgCi0gIAkvKioKLSAgCSAqIFJldHVybnMgdGhlIHJlcXVpcmVkIGZhY2V0IHZlcnNpb24gb2YgYSBFQVIgdGhhdCBzaG91bGQgY29udGFpbiB0aGUgZ2l2ZW4gcHJvamVjdC4gCi0gIAkgKiAKLSAgCSAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0Ci0gIAkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLiAgSWYgbm8gY29uc3RyYWludHMgY2FuIGJlIGluZmVycmVkIGZyb20gdGhlCi0gIAkgKiBwcm9qZWN0LCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC4KLSAgCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVxdWlyZWRGYWNldFZlcnNpb25bXSBnZXRSZXF1aXJlZEVBUkZhY2V0VmVyc2lvbnMoSVByb2plY3QgcHJvamVjdCkgewotICAJCQotCQlpbnQgdmVyc2lvbiA9IDA7Ci0gIAkJCi0gIAkJaWYgKEphdmFFRVByb2plY3RVdGlsaXRpZXMuaXNEeW5hbWljV2ViUHJvamVjdChwcm9qZWN0KSkgewotICAJCQkKLSAgCQkJdmVyc2lvbiA9IEoyRUVWZXJzaW9uVXRpbC5jb252ZXJ0V2ViVmVyc2lvblN0cmluZ1RvSjJFRVZlcnNpb25JRCgKLSAgCQkJCQlKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocHJvamVjdCkpOwotICAJCX0KLSAgCQllbHNlIGlmIChKYXZhRUVQcm9qZWN0VXRpbGl0aWVzLmlzRUpCUHJvamVjdChwcm9qZWN0KSkgewotICAJCQkKLSAgCQkJdmVyc2lvbiA9IEoyRUVWZXJzaW9uVXRpbC5jb252ZXJ0RUpCVmVyc2lvblN0cmluZ1RvSjJFRVZlcnNpb25JRCgKLSAgCQkJCQlKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocHJvamVjdCkpOwotICAJCX0KLSAgCQllbHNlIGlmIChKYXZhRUVQcm9qZWN0VXRpbGl0aWVzLmlzQXBwbGljYXRpb25DbGllbnRQcm9qZWN0KHByb2plY3QpKSB7Ci0gIAkJCQotICAJCQl2ZXJzaW9uID0gSjJFRVZlcnNpb25VdGlsLmNvbnZlcnRBcHBDbGllbnRWZXJzaW9uU3RyaW5nVG9KMkVFVmVyc2lvbklEKAotICAJCQkJCUoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldEoyRUVQcm9qZWN0VmVyc2lvbihwcm9qZWN0KSk7Ci0gIAkJfQotICAJCWVsc2UKLSAgCQkJLy8gcmV0dXJuIGVtcHR5IGFycmF5LCBubyBjb25zdHJhaW50cwotICAJCQlyZXR1cm4gbmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uWzBdOwotCSAgCi0gIAkJSVByb2plY3RGYWNldCBwcm9qZWN0RmFjZXQgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUpOwotICAJCUlQcm9qZWN0RmFjZXRWZXJzaW9uIHByb2plY3RGYWNldFZlcnNpb24gPSBwcm9qZWN0RmFjZXQuZ2V0VmVyc2lvbihKMkVFVmVyc2lvblV0aWwuY29udmVydFZlcnNpb25JbnRUb1N0cmluZyh2ZXJzaW9uKSk7Ci0KLSAgCQlSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvblsxXTsKLSAgCQlyZnZbMF0gPSBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb24oKTsKLSAgCQlyZnZbMF0uc2V0QWxsb3dOZXdlcihmYWxzZSk7CSAgCi0gIAkJcmZ2WzBdLnNldFByb2plY3RGYWNldFZlcnNpb24ocHJvamVjdEZhY2V0VmVyc2lvbik7Ci0gIAkJCi0gIAkJcmV0dXJuIHJmdjsKLSAgCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZvbGRlclJlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9Gb2xkZXJSZXNvdXJjZUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmVjODMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZvbGRlclJlc291cmNlRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5BbnlGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0vKioKLSogVGhpcyBpcyBhIGtpbmQgb2YgRmlsdGVyIHRoYXQgYWNjZXB0cyBvbmx5IG9iamVjdHMKLSogd2hpY2ggaW5kaWNhdGUgYSBKYXZhIHJlc291cmNlLiBJbiBwYXJ0aWN1bGFyLCBhbnkKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0gd2hvc2UKLSogcGF0aG5hbWUsIG9yIGFueSBvYmplY3Qgd2hvc2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzCi0qIHJldHVybmVkIGJ5IDxjb2RlPnRvU3RyaW5nKCk8L2NvZGU+LCBlbmRzIGluCi0qICI8Y29kZT4uamF2YTwvY29kZT4iIG9yICI8Y29kZT4uY2xhc3M8L2NvZGU+IiB3aWxsIGJlIGFjY2VwdGVkLgotKiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHJlamVjdGVkLgotKi8KLXB1YmxpYyBjbGFzcyBGb2xkZXJSZXNvdXJjZUZpbHRlciBleHRlbmRzIEFueUZpbHRlcgotewotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICogRXF1aXZhbGVudCB0byA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXIoQUxMX0ZJTEVTKTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBGb2xkZXJSZXNvdXJjZUZpbHRlciAoKSB7IH0KLQotIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLkZPTERFUl9GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLkZPTERFUl9GSUxURVJfREVTQzsKLSAgfQotCi0gcHVibGljIElTdGF0dXMgc3RhdHVzT2YgKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0YXR1cygKLSAgICAgICAgSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAwLAotICAgICAgICBDb25zdW1wdGlvbk1lc3NhZ2VzLkZJTFRFUl9NU0dfRVJST1JfTlVMTF9PQkpFQ1QsCi0gICAgICAgIG51bGwKLSAgICAgICk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotCi0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKW9iamVjdDsKLSAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAocmVzb3VyY2UuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GT0xERVIpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAgIDAsCi0gICAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05PVF9GT0xERVIsbmV3IE9iamVjdFtdIHtuYW1lfSksCi0gICAgICAgICAgbnVsbAotICAgICAgICApOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLCIiLG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9JU2VydmVyRGVmYXVsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9JU2VydmVyRGVmYXVsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMWYxZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vSVNlcnZlckRlZmF1bHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLQotCi0vKioKLSAqIEltcGxlbWVudCB0aGlzIGludGVyZmFjZSB0byBwcm92aWRlIGxvZ2ljIHRoYXQgY2FuIGJlIHBsdWdnZWQgaW50bwotICogdGhlIHNlcnZlciBkZWZhdWx0aW5nIGFsZ29yaXRobS4gCi0gKiAoU2VlIHRoZSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uc2VydmVyRGVmYXVsdGVyIGV4dGVuc2lvbiBwb2ludCkgIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTZXJ2ZXJEZWZhdWx0ZXIKLXsKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gcHJvamVjdAotICAgKiBAcmV0dXJuIFNlcnZlckluZm8uIAotICAgKiBJZiBubyBleGlzdGluZyBzZXJ2ZXIgb3Igc2VydmVyIHR5cGUgaXMgcmVjb21tZW5kZWQsIHJldHVybiBudWxsLgotICAgKiBJZiBhIHNlcnZlciB0eXBlIGlzIHJlY29tbWVuZGVkLCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgU2VydmVySW5mbyB3aXRoIGEgbm9uLW51bGwKLSAgICogbm9uLWVtcHR5IFN0cmluZyBmb3IgdGhlIHNlcnZlckZhY3RvcnlJZCBhbmQgbnVsbCBmb3IgdGhlIHNlcnZlckluc3RhbmNlSWQuCi0gICAqIElmIGEgc2VydmVyIGluc3RhbmNlIGlzIHJlY29tbWVuZGVkLCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgU2VydmVySW5mbyB3aXRoIGEgbm9uLW51bGwKLSAgICogbm9uLWVtcHR5IFN0cmluZyBmb3IgdGhlIHNlcnZlckZhY3RvcnlJZCBhbmQgdGhlIHNlcnZlckluc3RhbmNlSWQuCi0gICAqLwotICBwdWJsaWMgU2VydmVySW5mbyByZWNvbW1lbmREZWZhdWx0U2VydmVyKElQcm9qZWN0IHByb2plY3QpOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0phdmFNZXJnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0phdmFNZXJnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQxZjJjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhTWVyZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDEyMiAgIDIxNTA0OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29kZWdlbi5tZXJnZS5qYXZhLkpDb250cm9sTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvZGVnZW4ubWVyZ2UuamF2YS5KTWVyZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuLm1lcmdlLmphdmEuZmFjYWRlLkZhY2FkZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29kZWdlbi51dGlsLkNvZGVHZW5VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudE1lcmdlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JTWVyZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0Lk1lcmdlcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKgotICogSmF2YU1lcmdlciBoYW5kbGVzIHRoZSBtZXJnaW5nIG9mIHdvcmtzcGFjZSBmaWxlcyB1c2luZyBKTWVyZ2VyLiAgSWYgdGhlIFVSSXMgc3BlY2lmaWVkIGlzIG5vdCBhIGZpbGUKLSAqIGluIHRoZSB3b3Jrc3BhY2UsIGl0IHdpbGwgYmUgaWdub3JlZC4KLSAqLwotcHVibGljIGNsYXNzIEphdmFNZXJnZXIgZXh0ZW5kcyBNZXJnZXIgaW1wbGVtZW50cyBJTWVyZ2VyIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU1RfV1MgPSAib3JnLmVjbGlwc2Uud3N0LndzIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVSR0VfWE1MID0gIm1lcmdlLnhtbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpNRVJHRVIgPSAiam1lcmdlciI7Ci0JCi0JcHJpdmF0ZSBpbnQgc2l6ZSA9IDA7IAotCXByaXZhdGUgSUZpbGVbXSB3b3Jrc3BhY2VGaWxlczsKLQlwcml2YXRlIEpNZXJnZXJbXSBtZXJnZU1vZGVsczsKLQlwcml2YXRlIEpDb250cm9sTW9kZWwgak1lcmdlQ29udHJvbE1vZGVsID0gbnVsbDsKLQlwcml2YXRlIElTdGF0dXMgbG9hZFN0YXR1czsKLQkKLQkKLQkvKgotCSAqIENvbnZlcnQgdGhlIFVSSSBzdHJpbmdzIGluIHRoZSB1cmlzIGFycmF5IHRvIEVjbGlwc2UgSUZpbGVzIGFuZCBzdG9yZSBpbiB0aGUgd29ya3NwYWNlRmlsZXMgYXJyYXkuIAotCSAqIExvYWQgdGhlIHdvcmtzcGFjZUZpbGVzIGludG8gSk1lcmdlciBhbmQgc3RvcmUgaW4gdGhlIG1lcmdlck1vZGVscyBhcnJheS4gIAotCSAqIElmIHRoZSBtZXJnZXIgbW9kZWwgY2Fubm90IGJlIG9idGFpbmVkLCBudWxsIGlzIHN0b3JlZCBpbiB0aGUgbWVyZ2VyTW9kZWxzLiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklNZXJnZXIjbG9hZChqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JCi0JcHVibGljIElTdGF0dXMgbG9hZChJRmlsZVtdIGZpbGVzKSB7Ci0JCQotCQlsb2FkU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJaWYgKGZpbGVzICE9IG51bGwpIHsKLQkJCXdvcmtzcGFjZUZpbGVzID0gZmlsZXM7Ci0JCQlQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0JCQlpZiAobWVyZ2VDb250ZXh0LmlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKSkgewotCQkJCS8vIGluaXRpYWxpemUgSk1lcmdlcgotCQkJCWluaXRpYWxpemUoKTsKLQkJCQkKLQkJCQlpZiAoak1lcmdlQ29udHJvbE1vZGVsICE9IG51bGwpIHsKLQkJCQkJLy8gSk1lcmdlciBpbml0aWFsaXplZCBwcm9wZXJseQotCQkJCQlzaXplID0gZmlsZXMubGVuZ3RoOwotCQkJCQltZXJnZU1vZGVscyA9IG5ldyBKTWVyZ2VyW3NpemVdOwotCQkJCQkKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQkJCUpNZXJnZXIgak1lcmdlciA9IG51bGw7Ci0JCQkJCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gbnVsbDsKLQkJCQkJCQotCQkJCQkJZmlsZSA9IGZpbGVzW2ldOwotCQkJCQkJaWYgKGZpbGUgIT0gbnVsbCAmJiBmaWxlLmV4aXN0cygpKSB7CQkJCQkJCQkJCQkJCQkKLQkJCQkJCQl0cnkgewotCQkJCQkJCQlpblN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCQkJCQkJaWYgKGluU3RyZWFtICE9IG51bGwpIHsKLQkJCQkJCQkJCWpNZXJnZXIgPSBuZXcgSk1lcmdlcihqTWVyZ2VDb250cm9sTW9kZWwpOwotCQkJCQkJCQkJak1lcmdlci5zZXRUYXJnZXRDb21waWxhdGlvblVuaXQoak1lcmdlci5jcmVhdGVDb21waWxhdGlvblVuaXRGb3JJbnB1dFN0cmVhbShpblN0cmVhbSkpOwotCQkJCQkJCQl9Ci0JCQkJCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJCWxvYWRTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFX01FUkdFX0xPQUQsIGZpbGUpLCBlKTsKLQkJCQkJCQl9IGZpbmFsbHkgewotCQkJCQkJCQlpZiAoaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCQlpblN0cmVhbS5jbG9zZSgpOwotCQkJCQkJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQkJCQkJCS8vIGlnbm9yZSBleGNlcHRpb25zIGluIGNsb3NpbmcgZmlsZQotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJfQkJCQkKLQkJCQkJCX0KLQkJCQkJCW1lcmdlTW9kZWxzW2ldID0gak1lcmdlcjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbG9hZFN0YXR1czsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgSk1lcmdlIG1vZGVsCi0JICogRmlsZSBtZXJnZS54bWwgaW4gV2ViU2VydmljZVBsdWdpbiBjb250YWlucyB0aGUgcnVsZXMgZm9yIHRoZSBtZXJnZS4KLQkgKiBJZiB0aGUgbWVyZ2UueG1sIGZpbGUgaXMgbm90IGZvdW5kLCBqTWVyZ2VDb250cm9sTW9kZWwgaXMgbGVhdmUgYXMgbnVsbC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQkJaWYgKGpNZXJnZUNvbnRyb2xNb2RlbCA9PSBudWxsKSB7Ci0JCQlGYWNhZGVIZWxwZXIgZmFjYWRlSGVscGVyID0gQ29kZUdlblV0aWwuaW5zdGFudGlhdGVGYWNhZGVIZWxwZXIoSk1lcmdlci5ERUZBVUxUX0ZBQ0FERV9IRUxQRVJfQ0xBU1MpOwotCQkJak1lcmdlQ29udHJvbE1vZGVsID0gbmV3IEpDb250cm9sTW9kZWwoKTsKLQotCQkJQnVuZGxlICAgICAgICB3c0J1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShXU1RfV1MpOwotCQkJSVBhdGggICAgICAgICBtZXJnZVBhdGggICAgICA9IG5ldyBQYXRoKCBKTUVSR0VSICkuYXBwZW5kKCBNRVJHRV9YTUwgKTsKLQkJCVVSTCAgICAgICAgICAgZmlsZVVSTCAgICAgICAgPSBGaWxlTG9jYXRvci5maW5kKCB3c0J1bmRsZSwgbWVyZ2VQYXRoLCBudWxsKTsKLQkJCWpNZXJnZUNvbnRyb2xNb2RlbC5pbml0aWFsaXplKGZhY2FkZUhlbHBlciwgZmlsZVVSTC50b1N0cmluZygpKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCQotCS8qKgotCSAqIE1lcmdlIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB3b3Jrc3BhY2VGaWxlcyB3aXRoIHRoZSBtZXJnZU1vZGVscyB0aGF0IGhhZCBiZWVuIHN0b3JlZCBlYXJsaWVyLiAgIAotCSAqIFRoZW4gd3JpdGUgdGhlIG1lcmdlZCBjb250ZW50cyBiYWNrIHRvIHRoZSBmaWxlLgotCSAqIEBwYXJhbSBtb25pdG9yCi0JICogQHBhcmFtIHN0YXR1c0hhbmRsZXIKLQkgKiBAcmV0dXJuIElTdGF0dXMKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBtZXJnZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIpIHsKLQkJCi0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCi0JCWlmIChsb2FkU3RhdHVzICE9IG51bGwgJiYgbG9hZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBsb2FkU3RhdHVzOwotCQl9Ci0JCQotCQlQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0JCWlmIChtZXJnZUNvbnRleHQuaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpKSB7Ci0JCQlSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQlTdHJpbmcgbWVyZ2VkQ29udGVudCA9IG51bGw7Ci0JCQkJSk1lcmdlciBqTWVyZ2VyID0gbnVsbDsKLQkJCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG51bGw7Ci0JCQkJYnl0ZVtdIGJ1ZiA9IG51bGw7Ci0JCQkJCi0JCQkJak1lcmdlciA9IG1lcmdlTW9kZWxzW2ldOwotCQkJCWZpbGUgPSB3b3Jrc3BhY2VGaWxlc1tpXTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsICYmIGpNZXJnZXIgIT0gbnVsbCAmJiBmaWxlLmV4aXN0cygpKSB7ICAKLQkJCQkJLy8gYSBKTWVyZ2VyIG1vZGVsIG9mIHRoZSBmaWxlIGV4aXN0cywgbWVyZ2UgdGhlIGNvbnRlbnRzCi0JCQkJCXRyeSB7Ci0JCQkJCQlpblN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCQkJCWpNZXJnZXIuc2V0U291cmNlQ29tcGlsYXRpb25Vbml0KGpNZXJnZXIuY3JlYXRlQ29tcGlsYXRpb25Vbml0Rm9ySW5wdXRTdHJlYW0oaW5TdHJlYW0pKTsKLQkJCQkJCWpNZXJnZXIubWVyZ2UoKTsKLQkJCQkJCW1lcmdlZENvbnRlbnQgPSBqTWVyZ2VyLmdldFRhcmdldENvbXBpbGF0aW9uVW5pdENvbnRlbnRzKCk7CQotCQkJCQkJaWYgKG1lcmdlZENvbnRlbnQgIT0gbnVsbCkgewotCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCWJ1ZiA9IG1lcmdlZENvbnRlbnQuZ2V0Qnl0ZXMoZmlsZS5nZXRDaGFyc2V0KCkpOwotCQkJCQkJCX0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJCQkJCQlidWYgPSBtZXJnZWRDb250ZW50LmdldEJ5dGVzKCk7Ci0JCQkJCQkJfQotCQkJCQkJCWluU3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ1Zik7Ci0JCQkJCQkJSVBhdGggdGFyZ2V0UGF0aCA9IGZpbGUuZ2V0TG9jYXRpb24oKTsKLQkJCQkJCQlpZiAodGFyZ2V0UGF0aCAhPSBudWxsKSB7Ci0JCQkJCQkJCUZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGVBdExvY2F0aW9uKHJlc291cmNlQ29udGV4dCwgdGFyZ2V0UGF0aC5tYWtlQWJzb2x1dGUoKSwgaW5TdHJlYW0sCi0JCQkJCQkJCQkgIG1vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFX01FUkdFLCBmaWxlKSwgZSk7Ci0JCQkJCX0gZmluYWxseSB7Ci0JCQkJCQl0cnkgewotCQkJCQkJCWlmIChpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCQkJCWluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJCQkJfQotCQkJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQkJCS8vIGlnbm9yZSBleGNlcHRpb25zIGluIGNsb3NpbmcgZmlsZQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJCi0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhUmVzb3VyY2VGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0phdmFSZXNvdXJjZUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODRkYTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0phdmFSZXNvdXJjZUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkFueUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0KLS8qKgotKiBUaGlzIGlzIGEga2luZCBvZiBGaWx0ZXIgdGhhdCBhY2NlcHRzIG9ubHkgb2JqZWN0cwotKiB3aGljaCBpbmRpY2F0ZSBhIEphdmEgcmVzb3VyY2UuIEluIHBhcnRpY3VsYXIsIGFueQotKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlfSB3aG9zZQotKiBwYXRobmFtZSwgb3IgYW55IG9iamVjdCB3aG9zZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMKLSogcmV0dXJuZWQgYnkgPGNvZGU+dG9TdHJpbmcoKTwvY29kZT4sIGVuZHMgaW4KLSogIjxjb2RlPi5qYXZhPC9jb2RlPiIgb3IgIjxjb2RlPi5jbGFzczwvY29kZT4iIHdpbGwgYmUgYWNjZXB0ZWQuCi0qIEFsbCBvdGhlciBvYmplY3RzIHdpbGwgYmUgcmVqZWN0ZWQuCi0qLwotcHVibGljIGNsYXNzIEphdmFSZXNvdXJjZUZpbHRlciBleHRlbmRzIEFueUZpbHRlcgotewotCi0gIC8qKgotICAqIEEgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiBjb25zdHJ1Y3RlZCB3aXRoIHRoaXMgdmFsdWUgd2lsbAotICAqIGFjY2VwdCAiPGNvZGU+LmphdmE8L2NvZGU+IiwgYnV0IG5vdCAiPGNvZGU+LmNsYXNzPC9jb2RlPiIsIG9iamVjdHMuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBKQVZBX0ZJTEVTID0gKGJ5dGUpMTsKLQotICAvKioKLSAgKiBBIDxjb2RlPkphdmFSZXNvdXJjZUZpbHRlcjwvY29kZT4gY29uc3RydWN0ZWQgd2l0aCB0aGlzIHZhbHVlIHdpbGwKLSAgKiBhY2NlcHQgIjxjb2RlPi5jbGFzczwvY29kZT4iLCBidXQgbm90ICI8Y29kZT4uamF2YTwvY29kZT4iLCBvYmplY3RzLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgQ0xBU1NfRklMRVMgPSAoYnl0ZSkyOwotCi0gIC8qKgotICAqIEEgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiBjb25zdHJ1Y3RlZCB3aXRoIHRoaXMgdmFsdWUgd2lsbAotICAqIGFjY2VwdCBib3RoICI8Y29kZT4uamF2YTwvY29kZT4iIGFuZCAiPGNvZGU+LmNsYXNzPC9jb2RlPiIgb2JqZWN0cy4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEFMTF9GSUxFUyA9IChieXRlKTI1NTsKLQotICBwcml2YXRlIGJ5dGUgZXh0ZW5zaW9uc187Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXI8L2NvZGU+IHRoYXQgZmlsdGVycwotICAqICI8Y29kZT4uamF2YTwvY29kZT4iIGFuZCAiPGNvZGU+LmNsYXNzPC9jb2RlPiIgb2JqZWN0cy4KLSAgKiBFcXVpdmFsZW50IHRvIDxjb2RlPkphdmFSZXNvdXJjZUZpbHRlcihBTExfRklMRVMpPC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIEphdmFSZXNvdXJjZUZpbHRlciAoKQotICB7Ci0gICAgdGhpcyhBTExfRklMRVMpOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXI8L2NvZGU+IHRoYXQgZmlsdGVycwotICAqICI8Y29kZT4uamF2YTwvY29kZT4iIG9iamVjdHMsICI8Y29kZT4uY2xhc3M8L2NvZGU+IiBvYmplY3RzLAotICAqIG9yIGJvdGggaWYgdGhlIHZhbHVlIG9mIDxjb2RlPmV4dGVuc2lvbnM8L2NvZGU+IGlzCi0gICoge0BsaW5rICNKQVZBX0ZJTEVTfSwge0BsaW5rICNDTEFTU19GSUxFU30gb3Ige0BsaW5rICNBTExfRklMRVN9Ci0gICogcmVzcGVjdGl2ZWx5LgotICAqIEBwYXJhbSBleHRlbnNpb25zIE9uZSBvZgotICAqIHtAbGluayAjSkFWQV9GSUxFU30sIHtAbGluayAjQ0xBU1NfRklMRVN9IG9yIHtAbGluayAjQUxMX0ZJTEVTfS4KLSAgKi8KLSAgcHVibGljIEphdmFSZXNvdXJjZUZpbHRlciAoIGJ5dGUgZXh0ZW5zaW9ucyApCi0gIHsKLSAgICBleHRlbnNpb25zXyA9IGV4dGVuc2lvbnM7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gQ29uc3VtcHRpb25NZXNzYWdlcy5KQVZBX0ZJTFRFUl9OQU1FOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKQotICB7Ci0gICAgcmV0dXJuIENvbnN1bXB0aW9uTWVzc2FnZXMuSkFWQV9GSUxURVJfREVTQzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGRlc2NyaWJpbmcgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4ncyBhc3Nlc3NtZW50IG9mCi0gICogdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIEFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IGlmIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+Ci0gICogcmVwcmVzZW50cyBhIEphdmEgcmVzb3VyY2UuCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHN0YXR1c09mICggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBpZiAob2JqZWN0ID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoCi0gICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwKLSAgICAgICAgMCwKLSAgICAgICAgQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05VTExfT0JKRUNULAotICAgICAgICBudWxsCi0gICAgICApOwotICAgIH0KLQotICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0gICAgewotICAgICAgSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSlvYmplY3Q7Ci0gICAgICBuYW1lID0gcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotICAgICAgaWYgKHJlc291cmNlLmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoCi0gICAgICAgICAgSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgICAgMCwKLSAgICAgICAgICBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLkZJTFRFUl9NU0dfRVJST1JfTk9UX0ZJTEUsbmV3IE9iamVjdFtdIHtuYW1lfSksCi0gICAgICAgICAgbnVsbAotICAgICAgICApOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgewotICAgICAgbmFtZSA9IG9iamVjdC50b1N0cmluZygpOwotICAgIH0KLQotICAgIGlmICghYWNjZXB0c05hbWUobmFtZSkpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoCi0gICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwKLSAgICAgICAgMCwKLSAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5KQVZBX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICBudWxsCi0gICAgICApOwotICAgIH0KLQotICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsIiIsbnVsbCk7Ci0gIH0KLQotICAvLwotICAvLyBDaGVja3MgaWYgdGhlIGdpdmVuIG5hbWUgaXMgYWNjZXB0YWJsZSBiYXNlZCB1cG9uIGl0cyBleHRlbnNpb24KLSAgLy8gYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZXh0ZW5zaW9uc18gYml0bWFzay4KLSAgLy8KLSAgcHJpdmF0ZSBib29sZWFuIGFjY2VwdHNOYW1lICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgcmV0dXJuICggCi0gICAgICAobmFtZS5lbmRzV2l0aCgiLmphdmEiKSAmJiAoKGV4dGVuc2lvbnNfICYgSkFWQV9GSUxFUykgIT0gMCkpIHx8Ci0gICAgICAobmFtZS5lbmRzV2l0aCgiLmNsYXNzIikgJiYgKChleHRlbnNpb25zXyAmIENMQVNTX0ZJTEVTKSAhPSAwKSkKLSAgICApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9NYXBwaW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL01hcHBpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzY0OGRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL01hcHBpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLQotCi0vKioKLSogVGhpcyBjbGFzcyBjb250YWlucyB1c2VmdWwgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIFNlcnZlciBwbHVnaW4gZnVuY3Rpb25zCi0qLwotcHVibGljIGZpbmFsIGNsYXNzIE1hcHBpbmdVdGlscwotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NFUlZJQ0VfRVhUID0gIlNlcnZpY2Uud3NkbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0JJTkRJTkdfRVhUID0gIkJpbmRpbmcud3NkbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1Y0X1NFUlZJQ0VfRVhUID0gIi1zZXJ2aWNlLndzZGwiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9WNF9CSU5ESU5HX0VYVCA9ICItYmluZGluZy53c2RsIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhURU5TSU9OID0gIi53c2RsIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSID0gIndzZGwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NLRUxFVE9OX1BBQ0tBR0VOQU1FID0gInNlcnZpY2UiOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIFdTREwgZm9sZGVyIHBhdGgKLSAgKiBAcGFyYW0gcHJvamVjdCB0aGUgcHJvamVjdAotICAqLwotICBwdWJsaWMgc3RhdGljIElQYXRoIGdldFdTRExGb2xkZXJQYXRoIChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgY29tcG9uZW50TmFtZSkKLSAgewotICAgIElQYXRoIHdzZGxGb2xkZXI9bnVsbDsKLS8vICAJSVBhdGggd2ViTW9kdWxlU2VydmVyUm9vdCA9IFJlc291cmNlVXRpbHMuZ2V0V2ViTW9kdWxlU2VydmVyUm9vdCggcHJvamVjdCApLmdldEZ1bGxQYXRoKCk7Ci0gIAlJUGF0aCB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QpOwotICAJaWYgKHdlYk1vZHVsZVNlcnZlclJvb3QgIT0gbnVsbCApCi0gIAkJd3NkbEZvbGRlciA9IHdlYk1vZHVsZVNlcnZlclJvb3QuYXBwZW5kKFdTRExfRk9MREVSKTsKLSAgICByZXR1cm4gd3NkbEZvbGRlcjsKLSAgfQotICAgIAotCi0gICAvKioKLSAgKiBSZXR1cm5zIHRoZSBiYXNlIG5hbWUgYmFzZWQgb24gV1NETCBmaWxlIG5hbWUKLSAgKiBAcGFyYW0gd3NkbE5hbWUgV1NETCBmaWxlIG5hbWUKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZU5hbWUgKFN0cmluZyB3c2RsTG9jYXRpb24gKQotICB7Ci0gIAlTdHJpbmcgd3NkbE5hbWU9d3NkbExvY2F0aW9uOwotICAJCi0gIAlpbnQgaW5kZXggPSB3c2RsTG9jYXRpb24ubGFzdEluZGV4T2YoJy8nKTsKLSAgICBpZiAoaW5kZXghPSAtMSkgewotICAgICAgd3NkbE5hbWUgPSB3c2RsTG9jYXRpb24uc3Vic3RyaW5nKGluZGV4KzEsd3NkbE5hbWUubGVuZ3RoKCkpOwotICAgIH0KLSAgICAKLSAgICBTdHJpbmcgYmFzZU5hbWU9d3NkbE5hbWU7Ci0gICAgaWYgKCB3c2RsTmFtZS5lbmRzV2l0aChERUZBVUxUX1NFUlZJQ0VfRVhUKSApIHsKLSAgICAgIGJhc2VOYW1lID0gd3NkbE5hbWUuc3Vic3RyaW5nKDAsKHdzZGxOYW1lLmxlbmd0aCgpIC0gREVGQVVMVF9TRVJWSUNFX0VYVC5sZW5ndGgoKSkpOwotICAgIH0gZWxzZSBpZiAoIHdzZGxOYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoREVGQVVMVF9WNF9TRVJWSUNFX0VYVCkgKSB7Ci0gICAgICBiYXNlTmFtZSA9IHdzZGxOYW1lLnN1YnN0cmluZygwLCh3c2RsTmFtZS5sZW5ndGgoKSAtIERFRkFVTFRfVjRfU0VSVklDRV9FWFQubGVuZ3RoKCkpKTsKLSAgICB9IGVsc2UgaWYgKHdzZGxOYW1lLmVuZHNXaXRoKERFRkFVTFRfQklORElOR19FWFQpKSB7Ci0gICAgICBiYXNlTmFtZSA9IHdzZGxOYW1lLnN1YnN0cmluZygwLCh3c2RsTmFtZS5sZW5ndGgoKS1ERUZBVUxUX0JJTkRJTkdfRVhULmxlbmd0aCgpKSk7Ci0gICAgfSBlbHNlIGlmICh3c2RsTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKERFRkFVTFRfVjRfQklORElOR19FWFQpKSB7Ci0gICAgICBiYXNlTmFtZSA9IHdzZGxOYW1lLnN1YnN0cmluZygwLCh3c2RsTmFtZS5sZW5ndGgoKS1ERUZBVUxUX1Y0X0JJTkRJTkdfRVhULmxlbmd0aCgpKSk7Ci0gICAgfSBlbHNlIGlmICh3c2RsTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKFdTRExfRVhURU5TSU9OKSkgewotICAgIAliYXNlTmFtZSA9IHdzZGxOYW1lLnN1YnN0cmluZygwLCh3c2RsTmFtZS5sZW5ndGgoKSAtIFdTRExfRVhURU5TSU9OLmxlbmd0aCgpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIG5vIHJlY29nbml6YWJsZSBzdWZmaXgsIGp1c3QgcmVtb3ZlIGV4dGVuc2lvbiwgaWYgYW55Ci0gICAgICBpbnQgaW5kZXg0ID0gYmFzZU5hbWUubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgIGlmIChpbmRleDQhPS0xKQotICAgICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lLnN1YnN0cmluZygwLCBpbmRleDQpOwotICAgIH0KLSAgICByZXR1cm4gYmFzZU5hbWU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUHJvcGVydGllc1Jlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9Qcm9wZXJ0aWVzUmVzb3VyY2VGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ2NzlmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9Qcm9wZXJ0aWVzUmVzb3VyY2VGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5BbnlGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0vKioKLSogVGhpcyBpcyBhIGtpbmQgb2YgRmlsdGVyIHRoYXQgYWNjZXB0cyBvbmx5IG9iamVjdHMKLSogd2hpY2ggaW5kaWNhdGUgYSBKYXZhIHJlc291cmNlLiBJbiBwYXJ0aWN1bGFyLCBhbnkKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0gd2hvc2UKLSogcGF0aG5hbWUsIG9yIGFueSBvYmplY3Qgd2hvc2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzCi0qIHJldHVybmVkIGJ5IDxjb2RlPnRvU3RyaW5nKCk8L2NvZGU+LCBlbmRzIGluCi0qICI8Y29kZT4uamF2YTwvY29kZT4iIG9yICI8Y29kZT4uY2xhc3M8L2NvZGU+IiB3aWxsIGJlIGFjY2VwdGVkLgotKiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHJlamVjdGVkLgotKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0aWVzUmVzb3VyY2VGaWx0ZXIgZXh0ZW5kcyBBbnlGaWx0ZXIKLXsKLSAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXI8L2NvZGU+IHRoYXQgZmlsdGVycwotICAqICI8Y29kZT4uamF2YTwvY29kZT4iIGFuZCAiPGNvZGU+LmNsYXNzPC9jb2RlPiIgb2JqZWN0cy4KLSAgKiBFcXVpdmFsZW50IHRvIDxjb2RlPkphdmFSZXNvdXJjZUZpbHRlcihBTExfRklMRVMpPC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIFByb3BlcnRpZXNSZXNvdXJjZUZpbHRlciAoKQotICB7Ci0gICAgCi0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9QRVJUSUVTX0ZJTFRFUl9OQU1FOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKQotICB7Ci0gICAgcmV0dXJuIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPUEVSVElFU19GSUxURVJfREVTQzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGRlc2NyaWJpbmcgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4ncyBhc3Nlc3NtZW50IG9mCi0gICogdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIEFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IGlmIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+Ci0gICogcmVwcmVzZW50cyBhIEphdmEgcmVzb3VyY2UuCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHN0YXR1c09mICggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBpZiAob2JqZWN0ID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoCi0gICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwKLSAgICAgICAgMCwKLSAgICAgICAgQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05VTExfT0JKRUNULAotICAgICAgICBudWxsCi0gICAgICApOwotICAgIH0KLQotICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0gICAgewotICAgICAgSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSlvYmplY3Q7Ci0gICAgICBuYW1lID0gcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotICAgICAgaWYgKHJlc291cmNlLmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoCi0gICAgICAgICAgSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgICAgMCwKLSAgICAgICAgICBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLkZJTFRFUl9NU0dfRVJST1JfTk9UX0ZJTEUsbmV3IE9iamVjdFtdIHtuYW1lfSksCi0gICAgICAgICAgbnVsbAotICAgICAgICApOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgewotICAgICAgbmFtZSA9IG9iamVjdC50b1N0cmluZygpOwotICAgIH0KLQotCWlmICghbmFtZS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0YXR1cygKLSAgICAgICAgSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAwLAotICAgICAgICBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLlBST1BFUlRJRVNfRklMVEVSX01TR19FUlJPUl9XUk9OR19FWFRFTlNJT04sbmV3IE9iamVjdFtdIHtuYW1lfSksCi0gICAgICAgIG51bGwKLSAgICAgICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwiIixudWxsKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9SZXF1aXJlZEZhY2V0VmVyc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUmVxdWlyZWRGYWNldFZlcnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhkMmFhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9SZXF1aXJlZEZhY2V0VmVyc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAxMjEwNzEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotCi1wdWJsaWMgY2xhc3MgUmVxdWlyZWRGYWNldFZlcnNpb24KLXsKLSAgcHJpdmF0ZSBJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXRWZXJzaW9uOwotICBwcml2YXRlIGJvb2xlYW4gYWxsb3dOZXdlcjsKLSAgcHJpdmF0ZSBJUHJvamVjdEZhY2V0VmVyc2lvbltdIGFsbG93ZWRQcm9qZWN0RmFjZXRWZXJzaW9uczsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEFsbG93TmV3ZXIoKQotICB7Ci0gICAgcmV0dXJuIGFsbG93TmV3ZXI7Ci0gIH0KLSAgcHVibGljIHZvaWQgc2V0QWxsb3dOZXdlcihib29sZWFuIGFsbG93TmV3ZXIpCi0gIHsKLSAgICB0aGlzLmFsbG93TmV3ZXIgPSBhbGxvd05ld2VyOwotICB9Ci0gIHB1YmxpYyBJUHJvamVjdEZhY2V0VmVyc2lvbiBnZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCkKLSAgewotICAgIHJldHVybiBwcm9qZWN0RmFjZXRWZXJzaW9uOwotICB9Ci0gIHB1YmxpYyB2b2lkIHNldFByb2plY3RGYWNldFZlcnNpb24oSVByb2plY3RGYWNldFZlcnNpb24gcHJvamVjdEZhY2V0VmVyc2lvbikKLSAgewotICAgIHRoaXMucHJvamVjdEZhY2V0VmVyc2lvbiA9IHByb2plY3RGYWNldFZlcnNpb247Ci0gIH0gIAotICBwdWJsaWMgSVByb2plY3RGYWNldFZlcnNpb25bXSBnZXRBbGxvd2VkUHJvamVjdEZhY2V0VmVyc2lvbnMoKSAgCi0gIHsKLSAgICBpZiAoYWxsb3dlZFByb2plY3RGYWNldFZlcnNpb25zID09IG51bGwpCi0gICAgewotICAgICAgQXJyYXlMaXN0IHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gbWlucGZ2ID0gZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpOwotICAgICAgdmVyc2lvbnMuYWRkKG1pbnBmdik7Ci0gICAgICAvL0lmIGFsbG93LW5ld2VyIGlzIHRydWUsIGFkZCBhbGwgdGhlIHZlcnNpb25zIGdyZWF0ZXIgdGhhbiB0aGUgbWluIHZlcnNpb24uCi0gICAgICBpZiAoZ2V0QWxsb3dOZXdlcigpKQotICAgICAgewotICAgICAgICBTdHJpbmcgbWluVmVyc2lvbiA9IG1pbnBmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgIEl0ZXJhdG9yIGFsbFZlcnNpb25zSXRyID0gbWlucGZ2LmdldFByb2plY3RGYWNldCgpLmdldFZlcnNpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGFsbFZlcnNpb25zSXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHRlc3RwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pYWxsVmVyc2lvbnNJdHIubmV4dCgpOwotICAgICAgICAgIFN0cmluZyB0ZXN0VmVyc2lvbiA9IHRlc3RwZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIGlmIChGYWNldFV0aWxzLmdyZWF0ZXJUaGFuKHRlc3RWZXJzaW9uLCBtaW5WZXJzaW9uKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJzaW9ucy5hZGQodGVzdHBmdik7ICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgYWxsb3dlZFByb2plY3RGYWNldFZlcnNpb25zID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uW10pdmVyc2lvbnMudG9BcnJheShuZXcgSVByb2plY3RGYWNldFZlcnNpb25bMF0pOyAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gYWxsb3dlZFByb2plY3RGYWNldFZlcnNpb25zOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vU2VydmVySW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vU2VydmVySW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjI1Y2IyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1NlcnZlckluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1hciAyNSwgMjAwNAotICoKLSAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2VydmVySW5mbwotewotICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkOwotICBTdHJpbmcgc2VydmVySW5zdGFuY2VJZDsKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyRmFjdG9yeUlkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJGYWN0b3J5SWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlckZhY3RvcnlJZDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBUaGUgc2VydmVyRmFjdG9yeUlkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVySW5zdGFuY2VJZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmVySW5zdGFuY2VJZDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHNlcnZlckluc3RhbmNlSWQgVGhlIHNlcnZlckluc3RhbmNlSWQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZCkKLSAgewotICAgIHRoaXMuc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlckluc3RhbmNlSWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1dTRExQYXJzZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XU0RMUGFyc2VyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmRkMTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1dTRExQYXJzZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotLyoqCi0gKiAKLSAqIFRoZSBmYWN0b3J5IGNsYXNzIGNhbiBiZSB1c2VkIHRvIGdldCBhdCBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUKLSAqIFdTREwgcGFyc2VyLiAgTm90ZTogIFRoaXMgY2xhc3MgaXMgdGVtcG9yYXJ5LiAgV2Ugd2lsbCBwcm9iYWJseSBjb21lCi0gKiB1cCB3aXRoIGEgYmV0dGVyIG1ldGhvZCBvZiBoYW5kbGluZyBwYXNzaW5nIGFyb3VuZCB0aGUgcGFyc2VyLgotICoKLSAqLwotLy9UT0RPIFdlIG5lZWQgdG8gZmluZCBhIGJldHRlciB3YXkgdG8gcGFzcyBhcm91bmQgdGhlIHBhcnNlciB0aGFuCi0vLyAgICAgdXNpbmcgdGhpcyBzaW5nbGV0b24gZmFjdG9yeS4gIEhvcGVmdWxseSwgd2UgY2FuIHRoZW4gZGVsZXRlCi0vLyAgICAgdGhpcyBjbGFzcy4KLXB1YmxpYyBjbGFzcyBXU0RMUGFyc2VyRmFjdG9yeSAKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZXNQYXJzZXJFeHQgcGFyc2VyXzsKLSAgCi0gIHByaXZhdGUgV1NETFBhcnNlckZhY3RvcnkoKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V1NETFBhcnNlcigpCi0gIHsKLSAgICBpZiggcGFyc2VyXyA9PSBudWxsICkKLQl7Ci0JICBwYXJzZXJfID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0JfQotCQotCXJldHVybiBwYXJzZXJfOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQga2lsbFBhcnNlcigpCi0gIHsKLSAgICBwYXJzZXJfID0gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV1NETFJlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XU0RMUmVzb3VyY2VGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkMzcyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XU0RMUmVzb3VyY2VGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5BbnlGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0vKioKLSogVGhpcyBpcyBhIGtpbmQgb2YgRmlsdGVyIHRoYXQgYWNjZXB0cyBvbmx5IG9iamVjdHMKLSogd2hpY2ggaW5kaWNhdGUgYSBXU0RMIHJlc291cmNlLiBJbiBwYXJ0aWN1bGFyLCBhbnkKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0gd2hvc2UKLSogcGF0aG5hbWUsIG9yIGFueSBvYmplY3Qgd2hvc2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzCi0qIHJldHVybmVkIGJ5IDxjb2RlPnRvU3RyaW5nKCk8L2NvZGU+LCBlbmRzIGluCi0qICI8Y29kZT4ud3NkbDwvY29kZT4iIHdpbGwgYmUgYWNjZXB0ZWQuCi0qIEFsbCBvdGhlciBvYmplY3RzIHdpbGwgYmUgcmVqZWN0ZWQuCi0qLwotcHVibGljIGNsYXNzIFdTRExSZXNvdXJjZUZpbHRlciBleHRlbmRzIEFueUZpbHRlcgotewotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPldTRExSZXNvdXJjZUZpbHRlcjwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBXU0RMUmVzb3VyY2VGaWx0ZXIgKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIENvbnN1bXB0aW9uTWVzc2FnZXMuV1NETF9GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLldTRExfRklMVEVSX0RFU0M7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBkZXNjcmliaW5nIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+J3MgYXNzZXNzbWVudCBvZgotICAqIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBBbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBpZiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPgotICAqIHJlcHJlc2VudHMgYSBXU0RMIHJlc291cmNlLgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBzdGF0dXNPZiAoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgaWYgKG9iamVjdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIENvbnN1bXB0aW9uTWVzc2FnZXMuRklMVEVSX01TR19FUlJPUl9OVUxMX09CSkVDVCwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgIHsKLSAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgbmFtZSA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAgIGlmIChyZXNvdXJjZS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAgIDAsCi0gICAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05PVF9GSUxFLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICAgIG51bGwKLSAgICAgICAgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWUgPSBvYmplY3QudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAoIW5hbWUuZW5kc1dpdGgoIi53c2RsIikpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoCi0gICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwKLSAgICAgICAgMCwKLSAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5XU0RMX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICBudWxsCi0gICAgICApOwotICAgIH0KLQotICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsIiIsbnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1dlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjA1ODU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1dlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcmVnaXN0cnkgb2YgV2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZSBvYmplY3RzLgotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeQotewotCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5IGluc3RhbmNlXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgU3RhcnRTZXJ2ZXJUeXBlczsKLQotICAvLwotICAvLyBMb2FkcyBXZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlIG9iamVjdHMgaW50byB0aGlzIHJlZ2lzdHJ5LgotICAvLyBTZWUgbWV0aG9kIGdldEluc3RhbmNlKCkuCi0gIC8vCi0gIHByaXZhdGUgdm9pZCBsb2FkICgpCi0gIHsKLSAgICBTdGFydFNlcnZlclR5cGVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUiKTsKLQotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxjb25maWcubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBjb25maWdbaWR4XTsKLSAgICAgIHRyeSAKLSAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgZmFjdG9yeUlkXyA9IGVsZW0uZ2V0QXR0cmlidXRlKCJmYWN0b3J5SWQiKTsKLQkJICBTdGFydFNlcnZlclR5cGVzLnB1dChmYWN0b3J5SWRfLCBlbGVtKTsKLQkgIAotICAgICAgfSAKLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotICAgICAgICBsb2cubG9nKElMb2cuRVJST1IsIDUwNDcsIHRoaXMsICJsb2FkIiwgZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICogQHJldHVybiBBIHNpbmdsZXRvbiBXZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeSBvYmplY3QuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkgZ2V0SW5zdGFuY2UgKCkKLSAgewotICAgIGlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkoKTsKLSAgICAgIGluc3RhbmNlXy5sb2FkKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICAgcHVibGljIE9iamVjdCBnZXRTZXJ2ZXJTdGFydEJ5VHlwZUlkIChTdHJpbmcgdHlwZUlEKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgewotICAgIGlmICh0eXBlSUQ9PW51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICByZXR1cm4gKChJQ29uZmlndXJhdGlvbkVsZW1lbnQpU3RhcnRTZXJ2ZXJUeXBlcy5nZXQodHlwZUlEKSkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLSAgfQotICAKLSAgIHB1YmxpYyBib29sZWFuIGlzUmVtb3ZlRUFSUmVxdWlyZWQoU3RyaW5nIHR5cGVJZCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotICAgCWlmICh0eXBlSWQhPW51bGwpIHsKLSAgIAkJSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSAoSUNvbmZpZ3VyYXRpb25FbGVtZW50KVN0YXJ0U2VydmVyVHlwZXMuZ2V0KHR5cGVJZCk7Ci0gICAJCWlmIChlbGVtIT1udWxsKXsKLSAgIAkJCVN0cmluZyB2YWx1ZSA9IGVsZW0uZ2V0QXR0cmlidXRlKCJyZW1vdmVFQVIiKTsKLSAgIAkJCWlmICh2YWx1ZSE9bnVsbCl7Ci0gICAJCQkJcmV0dXJuIEJvb2xlYW4udmFsdWVPZih2YWx1ZSkuYm9vbGVhblZhbHVlKCk7Ci0gICAJCQl9Ci0gICAJCX0KLSAgIAl9Ci0JcmV0dXJuIHRydWU7ICAgCQkgCi0gICB9ICAgCi19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BcnJheUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BcnJheUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNkYjk1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXJyYXlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmEgYmVhbi4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5sYW5nLkNsYXNzLCBqYXZhLmJlYW5zLkJlYW5EZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBjbGFzcyBBcnJheUVsZW1lbnQgZXh0ZW5kcyBUeXBlRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBBUlJBWV9OQU1FID0gIjEwMTAxMDEwYXJyYXkxMDEwMTAxMCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9NRVRIT0RTID0gInJlbG1ldGhvZHMiOwotIAotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gcHJvamVjdEVsZW1lbnQgVGhlIHByb2plY3QgdGhpcyBCZWFuIGJlbG9uZ3MgdG8uCi0gICovCi0gIHB1YmxpYyBBcnJheUVsZW1lbnQgKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcyhuYW1lLG5ldyBCYXNpY01vZGVsKCJQcm9qZWN0IiksdHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gcGFyYW1ldGVyRWxlbWVudCBUaGUgcGFyYW1ldGVyIHRoaXMgQmVhbiBiZWxvbmdzIHRvLgotICAqLwotICBwdWJsaWMgQXJyYXlFbGVtZW50IChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsYm9vbGVhbiBpc1Jvb3QpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsLFR5cGVFbGVtZW50LkFSUkFZKTsKLSAgICBpZihpc1Jvb3QpIG1vZGVsLnNldFJvb3RFbGVtZW50KHRoaXMpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5ST09UOwotICB9Ci0gIAotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IgZm9yIHRoZSBjYXNlIHdoZW4gdGhpcyBpcyBub3QgdGhlIHJvb3Qgb2JqZWN0Ci0gICogaGVyZSBpdCByZXByZXNlbnRzIGNvbXBsZXggdHlwZXMKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIGJlYW4gdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIGJlYW4gZWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEFycmF5RWxlbWVudCAoIFBhcmFtZXRlckVsZW1lbnQgcGFyYW1ldGVyRWxlbWVudCwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHBhcmFtZXRlckVsZW1lbnQsVHlwZUVsZW1lbnQuUkVMX09XTkVSLFR5cGVFbGVtZW50LlJFTF9UWVBFLFR5cGVFbGVtZW50LkFSUkFZKTsKLSAgICBmT3duZXJUeXBlID0gVHlwZUVsZW1lbnQuUEFSQU1FVEVSX09XTkVSOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgZm9yIHRoZSBjYXNlIHdoZW4gdGhpcyBpcyBub3QgdGhlIHJvb3Qgb2JqZWN0Ci0gICogaGVyZSBpdCByZXByZXNlbnRzIGNvbXBsZXggdHlwZXMKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIGJlYW4gdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIFBhcmFtZXRlckVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBBcnJheUVsZW1lbnQgKCBBdHRyaWJ1dGVFbGVtZW50IGF0dHJpYnV0ZUVsZW1lbnQsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxhdHRyaWJ1dGVFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5BUlJBWSk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LkFUVFJJQlVURV9PV05FUjsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIGZvciB0aGUgY2FzZSB3aGVuIHRoaXMgaXMgbm90IHRoZSByb290IG9iamVjdAotICAqIGhlcmUgaXQgcmVwcmVzZW50cyBjb21wbGV4IHR5cGVzCi0gICogQHBhcmFtIEZpZWxkRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIGJlYW4gdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIFBhcmFtZXRlckVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBBcnJheUVsZW1lbnQgKCBGaWVsZEVsZW1lbnQgZmllbGRFbGVtZW50LCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsZmllbGRFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5BUlJBWSk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LkZJRUxEX09XTkVSOwotICB9Ci0KLQotICAvKgotICAqIGRldGVybWluZSB3ZXRoZXIgdGhpcyBpcyBhbiBvYmplY3QgYXJyYXkgb3IKLSAgKiBwcmltaXRpdmUgYXJyYXkKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gQVJSQVlfTkFNRSArIGdldE5hbWUoKTsKLSAgfQotCi0gCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXJyYXlUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXJyYXlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMjUxMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0FycmF5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTIyICAgMjEwNjkyIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBBcnJheVR5cGUgZXh0ZW5kcyBSZWNvZ25pemVkUmV0dXJuVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIEFycmF5VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gIHsKLSAgICB0aGlzKFR5cGVGYWN0b3J5LkFSUkFZX05BTUUsdHlwZU5hbWUpOwotICB9Ci0KLSAgcHVibGljIEFycmF5VHlwZShTdHJpbmcgbmFtZSxTdHJpbmcgdHlwZU5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfSAKLQotIAotICAgLyoqCi0gICogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IHdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIHR5cGUgCi0gICogdXBvbiByZWNlaXZpbmcgaXQgYXMgYSByZXR1cm4gZnJvbSBhIHByb3h5IG1ldGhvZAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZGlzcGxheSBzdHJpbmcKLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSkKLSAgewotICAgICAKLSAgICBTdHJpbmcgbm9uQmVhbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wIisgZ2V0VW5pcXVlTmFtZSgpICsgIiA9IG51bGw7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAJCQkJICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiaWYoIiArIG5hbWUgKyAiICE9IG51bGwpeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgCQkJCSArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImphdmEudXRpbC5MaXN0IGxpc3QiICsgZ2V0VW5pcXVlTmFtZSgpICsgIj0gamF2YS51dGlsLkFycmF5cy5hc0xpc3QoIiArIG5hbWUgKyAiKTsiICtTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgCSAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgInRlbXAiKyBnZXRVbmlxdWVOYW1lKCkgKyIgPSBsaXN0IiArIGdldFVuaXF1ZU5hbWUoKSArICIudG9TdHJpbmcoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAJICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgCSAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgIAotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JT10ZW1wIisgZ2V0VW5pcXVlTmFtZSgpICsiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JSIrIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0KLSAgICByZXR1cm4gbm9uQmVhbjsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXR0cmlidXRlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0F0dHJpYnV0ZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM3Y2Y3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXR0cmlidXRlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhIGJlYW4gbWV0aG9kIHBhcmFtZXRlci4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5iZWFucy5QYXJhbWV0ZXJEZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVFbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50IGltcGxlbWVudHMgQXR0cmlidXRlRWxlbWVudFR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfVFlQRSA9ICJ0eXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX09XTklOR19CRUFOID0gIm93bmluZ2JlYW4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZTZXR0ZXJNZXRob2Q7Ci0gIHByaXZhdGUgU3RyaW5nIGZHZXR0ZXJNZXRob2Q7Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgdGhpcyB0YWtlcyB0aGUgb3duaW5nIGJlYW4uCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gYmVhbkVsZW1lbnQgdGhlIGJlYW4gdGhhdCBvd25zIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgQXR0cmlidXRlRWxlbWVudCAoIEJlYW5FbGVtZW50IGJlYW5FbGVtZW50LCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYmVhbkVsZW1lbnQsUkVMX09XTklOR19CRUFOLEJlYW5FbGVtZW50LlJFTF9BVFRSSUJVVEVTKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2V0dGVyTWV0aG9kKFN0cmluZyBzZXR0ZXJNZXRob2QpCi0gIHsKLSAgICBmU2V0dGVyTWV0aG9kID0gc2V0dGVyTWV0aG9kOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXR0ZXJNZXRob2QoKQotICB7Ci0gICAgcmV0dXJuIGZTZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEdldHRlck1ldGhvZCgpCi0gIHsKLSAgICByZXR1cm4gZkdldHRlck1ldGhvZDsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXRHZXR0ZXJNZXRob2QoU3RyaW5nIGdldHRlck1ldGhvZCkKLSAgewotICAgIGZHZXR0ZXJNZXRob2QgPSBnZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNldHRlclNpZ25hdHVyZShTdHJpbmcgYXR0cmlidXRlKQotICB7Ci0gICAgaW50IGJyYWNrZXQgPSBmU2V0dGVyTWV0aG9kLmluZGV4T2YoIigiKTsKLSAgICBicmFja2V0Kys7Ci0gICAgU3RyaW5nIHNldHRlciA9IGZTZXR0ZXJNZXRob2Quc3Vic3RyaW5nKDAsYnJhY2tldCk7Ci0gICAgU3RyaW5nIGZ1bGxTZXR0ZXIgPSBzZXR0ZXIgKyBhdHRyaWJ1dGUgKyAiKTsiOwotICAgCi0gICAgcmV0dXJuIGZ1bGxTZXR0ZXI7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBCZWFuIHRoYXQgb3ducyB0aGlzIEF0dHJpYnV0ZS4KLSAgKiBAcmV0dXJuIEJlYW5FbGVtZW50IFRoZSBiZWFuIHRoYXQgb3ducyB0aGlzIGF0dHJpYnV0ZS4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50IGdldE93bmluZ0JlYW5FbGVtZW50ICgpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoUkVMX09XTklOR19CRUFOKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCZWFuRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgdHlwZSB0aGF0IGlzIG93bmVkIGJ5IHRoaXMgYXR0cmlidXR0ZS4KLSAgKiBAcmV0dXJuIFR5cGVFbGVtZW50IFRoZSBUeXBlIHRoYXQgb2YgdGhpcyBhdHRyaWJ1dGUuCi0gICovCi0gIHB1YmxpYyBUeXBlRWxlbWVudCBnZXRUeXBlRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9UWVBFKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChUeXBlRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BdHRyaWJ1dGVFbGVtZW50VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0F0dHJpYnV0ZUVsZW1lbnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGI2ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0F0dHJpYnV0ZUVsZW1lbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhIGJlYW4gbWV0aG9kIHBhcmFtZXRlci4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5iZWFucy5QYXJhbWV0ZXJEZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgQXR0cmlidXRlRWxlbWVudFR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgIAotICBwdWJsaWMgdm9pZCBzZXRTZXR0ZXJNZXRob2QoU3RyaW5nIHNldHRlck1ldGhvZCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0U2V0dGVyTWV0aG9kKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0R2V0dGVyTWV0aG9kKCk7Ci0gIHB1YmxpYyB2b2lkIHNldEdldHRlck1ldGhvZChTdHJpbmcgZ2V0dGVyTWV0aG9kKTsKLSAgcHVibGljIEJlYW5FbGVtZW50IGdldE93bmluZ0JlYW5FbGVtZW50ICgpOwotICBwdWJsaWMgVHlwZUVsZW1lbnQgZ2V0VHlwZUVsZW1lbnQgKCk7Ci0gIC8qKgotICAqIFJldHVybiB0aGUgc2lnbmF0dXJlIHdpdGggdGhpcyB2YWx1ZSBhcyB0aGUgcGFybWV0ZXIKLSAgKgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNldHRlclNpZ25hdHVyZShTdHJpbmcgYXR0cmlidXRlKTsKLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CZWFuRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JlYW5FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YzlkMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JlYW5FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YSBiZWFuLgotKiBOZWFyZXN0IG1vcmFsIGVxdWl2YWxlbnRzOiBqYXZhLmxhbmcuQ2xhc3MsIGphdmEuYmVhbnMuQmVhbkRlc2NyaXB0b3IuCi0qLwotcHVibGljIGNsYXNzIEJlYW5FbGVtZW50IGV4dGVuZHMgVHlwZUVsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgU1RBVEVMRVNTX0JFQU4gPSAiMTAxMDEwMTBzdGF0ZWxlc3NiZWFuMTAxMDEwMTAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfTUVUSE9EUyA9ICJyZWxtZXRob2RzIjsKLSAgcHVibGljIHN0YXRpYyBpbnQgUkVBRE9OTFkgPSAwOwotICBwdWJsaWMgc3RhdGljIGludCBXUklURU9OTFkgPSAxOwotICBwdWJsaWMgc3RhdGljIGludCBSRUFEV1JJVEUgPSAyOwotICBwcml2YXRlIGludCBhdHRyaWIgPSAyOwotICAKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIAotICAqIEBwYXJhbSBwcm9qZWN0RWxlbWVudCBUaGUgcHJvamVjdCB0aGlzIEJlYW4gYmVsb25ncyB0by4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50IChTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMobmFtZSxuZXcgQmFzaWNNb2RlbCgiUHJvamVjdCIpLHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIHBhcmFtZXRlckVsZW1lbnQgVGhlIHBhcmFtZXRlciB0aGlzIEJlYW4gYmVsb25ncyB0by4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50IChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsYm9vbGVhbiBpc1Jvb3QpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsLFR5cGVFbGVtZW50LkJFQU4pOwotICAgIGlmKGlzUm9vdCkgbW9kZWwuc2V0Um9vdEVsZW1lbnQodGhpcyk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LlJPT1Q7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIGNhc2Ugd2hlbiB0aGlzIGlzIG5vdCB0aGUgcm9vdCBvYmplY3QKLSAgKiBoZXJlIGl0IHJlcHJlc2VudHMgY29tcGxleCB0eXBlcwotICAqIEBwYXJhbSBQYXJhbWV0ZXJFbGVtZW50IFRoZSBQYXJhbWV0ZXIgdGhhdCBvd25zIHRoaXMgYmVhbiB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgYmVhbiBlbGVtZW50LgotICAqLwotICBwdWJsaWMgQmVhbkVsZW1lbnQgKCBQYXJhbWV0ZXJFbGVtZW50IHBhcmFtZXRlckVsZW1lbnQsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxwYXJhbWV0ZXJFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5CRUFOKTsKLSAgICBmT3duZXJUeXBlID0gVHlwZUVsZW1lbnQuUEFSQU1FVEVSX09XTkVSOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgZm9yIHRoZSBjYXNlIHdoZW4gdGhpcyBpcyBub3QgdGhlIHJvb3Qgb2JqZWN0Ci0gICogaGVyZSBpdCByZXByZXNlbnRzIGNvbXBsZXggdHlwZXMKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIGJlYW4gdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIFBhcmFtZXRlckVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCAoIEF0dHJpYnV0ZUVsZW1lbnQgYXR0cmlidXRlRWxlbWVudCwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLGF0dHJpYnV0ZUVsZW1lbnQsVHlwZUVsZW1lbnQuUkVMX09XTkVSLFR5cGVFbGVtZW50LlJFTF9UWVBFLFR5cGVFbGVtZW50LkJFQU4pOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5BVFRSSUJVVEVfT1dORVI7Ci0gICAgYXR0cmliRnVuY3Rpb24oYXR0cmlidXRlRWxlbWVudCk7Ci0gIH0KLSAKLSAgcHJpdmF0ZSB2b2lkIGF0dHJpYkZ1bmN0aW9uKEF0dHJpYnV0ZUVsZW1lbnQgYXR0cmlidXRlRWxlbWVudCl7Ci0JaWYoYXR0cmlidXRlRWxlbWVudC5nZXRHZXR0ZXJNZXRob2QoKSAhPSBudWxsICYmIGF0dHJpYnV0ZUVsZW1lbnQuZ2V0U2V0dGVyTWV0aG9kKCkgIT0gbnVsbCkgYXR0cmliID0gUkVBRFdSSVRFOwotCWVsc2UgaWYoYXR0cmlidXRlRWxlbWVudC5nZXRHZXR0ZXJNZXRob2QoKSA9PSBudWxsICYmIGF0dHJpYnV0ZUVsZW1lbnQuZ2V0U2V0dGVyTWV0aG9kKCkgIT0gbnVsbCkgYXR0cmliID0gV1JJVEVPTkxZOwotCWVsc2UgaWYoYXR0cmlidXRlRWxlbWVudC5nZXRHZXR0ZXJNZXRob2QoKSAhPSBudWxsICYmIGF0dHJpYnV0ZUVsZW1lbnQuZ2V0U2V0dGVyTWV0aG9kKCkgPT0gbnVsbCkgYXR0cmliID0gUkVBRE9OTFk7Ci0gIH0KLSAgCi0gICAvKioKLSAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIGNhc2Ugd2hlbiB0aGlzIGlzIG5vdCB0aGUgcm9vdCBvYmplY3QKLSAgKiBoZXJlIGl0IHJlcHJlc2VudHMgY29tcGxleCB0eXBlcwotICAqIEBwYXJhbSBQYXJhbWV0ZXJFbGVtZW50IFRoZSBQYXJhbWV0ZXIgdGhhdCBvd25zIHRoaXMgYmVhbiB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgUGFyYW1ldGVyRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50ICggRmllbGRFbGVtZW50IGZpZWxkRWxlbWVudCwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLGZpZWxkRWxlbWVudCxUeXBlRWxlbWVudC5SRUxfT1dORVIsVHlwZUVsZW1lbnQuUkVMX1RZUEUsVHlwZUVsZW1lbnQuQkVBTik7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LkZJRUxEX09XTkVSOwotICAKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIE1ldGhvZCBvYmplY3RzIG9mIHRoaXMgQmVhbi4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIEFsbCBNZXRob2Qgb2JqZWN0cyBvZiB0aGlzIEJlYW4uCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRNZXRob2RzICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX01FVEhPRFMpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIE1ldGhvZCBvYmplY3RzIG9mIHRoaXMgQmVhbi4KLSAgKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIE1ldGhvZCBvYmplY3RzIG9mIHRoaXMgQmVhbi4KLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJPZk1ldGhvZEVsZW1lbnRzICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfTUVUSE9EUyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lKCkKLSAgewotICAgIGlmKGlzU3RhdGVMZXNzKCkpIHJldHVybiBTVEFURUxFU1NfQkVBTiArIGdldE5hbWUoKTsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRBdHRyaWIoKQotICB7Ci0gICAgcmV0dXJuIGF0dHJpYjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QXR0cmliKGludCBhdHRyaWIpCi0gIHsKLSAgICB0aGlzLmF0dHJpYiA9IGF0dHJpYjsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTdGF0ZUxlc3MoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZWEgPSBnZXRFbGVtZW50cyhUeXBlRWxlbWVudC5SRUxfQVRUUklCVVRFUyk7Ci0gICAgRW51bWVyYXRpb24gZWYgPSBnZXRFbGVtZW50cyhUeXBlRWxlbWVudC5SRUxfRklFTERTKTsKLSAgICBpZihlYS5oYXNNb3JlRWxlbWVudHMoKSB8fCBlZi5oYXNNb3JlRWxlbWVudHMoKSkgcmV0dXJuIGZhbHNlOwotICAgIGVsc2UgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzRkNmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1vbi5TYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotICogVHlwZUZhY3RvcnkKLSAqIENyZWF0aW9uIGRhdGU6ICg0LzEwLzIwMDEgMTI6NDE6NDggUE0pCi0gKiBAYXV0aG9yOiBHaWxiZXJ0IEFuZHJld3MKLSAqLwotcHVibGljIGNsYXNzIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVUVVJOX1BBUkFNX05BTUU9InJldHVybnAiOwotCi0gIHByaXZhdGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5KCl7fQotCi0gIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBnZXRCZWFuTW9kZWxFbGVtZW50KE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQob2JqZWN0LG51bGwsbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgZ2V0QmVhbk1vZGVsRWxlbWVudChPYmplY3Qgb2JqZWN0LEVsZW1lbnQgcGFyZW50RWxlbWVudCkKLSAgewotICAgIHJldHVybiBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudChvYmplY3QscGFyZW50RWxlbWVudCxudWxsKTsKLSAgfQotICAKLSAvKgotICAqIFRha2UgaW4gYW4gb2JqZWN0IGFuZCByZXR1cm4gYW4gZWxlbWVudCBkZXBlbmRpbmcgb24gd2hhdCAKLSAgKiB0eXBlIHdlIGFyZSBkZWFsaW5nIHdpdGggZnJvbSB0aGUgamF2YW1vZgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBFbGVtZW50IGdldEJlYW5Nb2RlbEVsZW1lbnQoT2JqZWN0IG9iamVjdCxFbGVtZW50IHBhcmVudEVsZW1lbnQsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgRWxlbWVudCByZXR1cm5FbGVtZW50ID0gbnVsbDsKLQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpewotICAgICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3Mpb2JqZWN0OwotICAgICAgU3RyaW5nIGphdmFOYW1lID0gamF2YUNsYXNzLmdldEphdmFOYW1lKCk7Ci0gICAgICBpZiAoIWphdmFDbGFzcy5pc0FycmF5KCkpeyAKLQkgICAgICBpZihwYXJlbnRFbGVtZW50ID09IG51bGwgJiYgbW9kZWwgPT1udWxsKSByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KGphdmFOYW1lKTsKLQkgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgPT0gbnVsbCAmJiBtb2RlbCAhPW51bGwpIHJldHVybkVsZW1lbnQgPSBuZXcgQmVhbkVsZW1lbnQoamF2YU5hbWUsbW9kZWwsZmFsc2UpOwotCSAgICAgIGVsc2V7Ci0JICAgICAgICBpZihwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgUGFyYW1ldGVyRWxlbWVudCl7IAotCSAgICAgICAgICAgUGFyYW1ldGVyRWxlbWVudCB0ZW1wRWxlbWVudCA9IChQYXJhbWV0ZXJFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLQkgICAgICAgIH0KLQkgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEF0dHJpYnV0ZUVsZW1lbnQpewotCSAgICAgICAgICAgQXR0cmlidXRlRWxlbWVudCB0ZW1wRWxlbWVudCA9IChBdHRyaWJ1dGVFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLQkgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEZpZWxkRWxlbWVudCl7Ci0gICAgICAgICAgICAgICBGaWVsZEVsZW1lbnQgdGVtcEVsZW1lbnQgPSAoRmllbGRFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIE1ldGhvZEVsZW1lbnQpewotICAgICAgICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBQYXJhbWV0ZXJFbGVtZW50KChNZXRob2RFbGVtZW50KXBhcmVudEVsZW1lbnQsUkVUVVJOX1BBUkFNX05BTUUsTWV0aG9kRWxlbWVudC5SRUxfUkVUVVJOX1BBUkFNRVRFUlMsdHJ1ZSk7Ci0gICAgICAgICAgICB9CSAgICAgICAgIAotCSAgICAgIH0KLSAgICAgIH0gCi0gICAgICBlbHNlewotICAgICAgICAgIGlmKHBhcmVudEVsZW1lbnQgPT0gbnVsbCAmJiBtb2RlbCA9PW51bGwpIHJldHVybkVsZW1lbnQgPSBuZXcgQXJyYXlFbGVtZW50KGphdmFOYW1lKTsKLQkgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgPT0gbnVsbCAmJiBtb2RlbCAhPW51bGwpIHJldHVybkVsZW1lbnQgPSBuZXcgQXJyYXlFbGVtZW50KGphdmFOYW1lLG1vZGVsLGZhbHNlKTsKLQkgICAgICBlbHNlewotCSAgICAgICAgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFBhcmFtZXRlckVsZW1lbnQpeyAKLQkgICAgICAgICAgIFBhcmFtZXRlckVsZW1lbnQgdGVtcEVsZW1lbnQgPSAoUGFyYW1ldGVyRWxlbWVudClwYXJlbnRFbGVtZW50OwotCSAgICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBBcnJheUVsZW1lbnQodGVtcEVsZW1lbnQsamF2YU5hbWUpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZSBpZihwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgQXR0cmlidXRlRWxlbWVudCl7Ci0JICAgICAgICAgICBBdHRyaWJ1dGVFbGVtZW50IHRlbXBFbGVtZW50ID0gKEF0dHJpYnV0ZUVsZW1lbnQpcGFyZW50RWxlbWVudDsKLQkgICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgQXJyYXlFbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLQkgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEZpZWxkRWxlbWVudCl7Ci0gICAgICAgICAgICAgICBGaWVsZEVsZW1lbnQgdGVtcEVsZW1lbnQgPSAoRmllbGRFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEFycmF5RWxlbWVudCh0ZW1wRWxlbWVudCxqYXZhTmFtZSk7Ci0JICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBNZXRob2RFbGVtZW50KXsKLSAgICAgICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LFJFVFVSTl9QQVJBTV9OQU1FLE1ldGhvZEVsZW1lbnQuUkVMX1JFVFVSTl9QQVJBTUVURVJTLHRydWUpOwotICAgICAgICAgICAgfQotCi0JICAgICAgfQotICAgICAgIH0KLQotICAgIH0KLSAgICBlbHNlIGlmKG9iamVjdCBpbnN0YW5jZW9mIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcil7Ci0gICAgICBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IgcGQgPSAoU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yKW9iamVjdDsKLSAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgQXR0cmlidXRlRWxlbWVudCgoQmVhbkVsZW1lbnQpcGFyZW50RWxlbWVudCxwZC5nZXROYW1lKCkpOyAgCi0gICAgfQotICAgIGVsc2UgaWYob2JqZWN0IGluc3RhbmNlb2YgRmllbGQpewotICAgICAgRmllbGQgZmllbGQgPSAoRmllbGQpb2JqZWN0OwotICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBGaWVsZEVsZW1lbnQoKEJlYW5FbGVtZW50KXBhcmVudEVsZW1lbnQsZmllbGQuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWV0aG9kKXsKLSAgICAgIE1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKW9iamVjdDsKLSAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgTWV0aG9kRWxlbWVudCgoQmVhbkVsZW1lbnQpcGFyZW50RWxlbWVudCxtZXRob2QuZ2V0TmFtZSgpLCBtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICB9Ci0gICAgLy9ub24gYmVhbmluZm8KLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpewotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKW9iamVjdDsgIAotICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBBdHRyaWJ1dGVFbGVtZW50KChCZWFuRWxlbWVudClwYXJlbnRFbGVtZW50LG5hbWUpOwotICAgIH0KLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBKYXZhUGFyYW1ldGVyKXsKLSAgICAgIEphdmFQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciA9IChKYXZhUGFyYW1ldGVyKW9iamVjdDsKLQotICAgICAgCi0gICAgICBpZiAoamF2YVBhcmFtZXRlci5pc1JldHVybigpKSAKLSAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LFJFVFVSTl9QQVJBTV9OQU1FLE1ldGhvZEVsZW1lbnQuUkVMX1JFVFVSTl9QQVJBTUVURVJTLHRydWUpOyAKLSAgICAgIGVsc2V7IAotICAgICAgICAgLy9hIGphdmEgcGFyYW1ldGVyIGdpdmVzIHVzIHRoZSBxdWFsaWZpZWQgbmFtZSB3ZSBkb250IHdhbnQgdGhpcwotICAgICAgICAgU3RyaW5nIG5hbWUgPSBqYXZhUGFyYW1ldGVyLmdldFF1YWxpZmllZE5hbWUoKTsKLSAgICAgICAgIFN0cmluZyBzaG9ydE5hbWU7Ci0gICAgICAgICBpbnQgaW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIik7Ci0gICAgICAgICBpZiAoaW5kZXggIT0gLTEpewotICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICBzaG9ydE5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCk7Ci0gICAgICAgICB9Ci0gICAgICBlbHNlIHNob3J0TmFtZSA9IG5hbWU7Ci0KLSAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LHNob3J0TmFtZSxNZXRob2RFbGVtZW50LlJFTF9QQVJBTUVURVJTLGZhbHNlKTsgCi0KLSAgICAgIH0KLSAgICAgCi0gICAgfQotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEphdmFIZWxwZXJzKXsKLSAgICAgIEphdmFIZWxwZXJzIGphdmFIZWxwZXIgPSAoSmF2YUhlbHBlcnMpb2JqZWN0OwotICAgICAgU3RyaW5nIGphdmFOYW1lOyAKLSAgICAgIGlmIChqYXZhSGVscGVyLmlzQXJyYXkoKSkgamF2YU5hbWUgPSBUeXBlRmFjdG9yeS5BUlJBWV9OQU1FOwotICAgICAgZWxzZSBqYXZhTmFtZSA9IGphdmFIZWxwZXIuZ2V0SmF2YU5hbWUoKTsKLSAgICAgIGlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgUGFyYW1ldGVyRWxlbWVudCl7Ci0gICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBTaW1wbGVFbGVtZW50KChQYXJhbWV0ZXJFbGVtZW50KXBhcmVudEVsZW1lbnQsamF2YU5hbWUsamF2YUhlbHBlci5pc1ByaW1pdGl2ZSgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEF0dHJpYnV0ZUVsZW1lbnQpewotICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgU2ltcGxlRWxlbWVudCgoQXR0cmlidXRlRWxlbWVudClwYXJlbnRFbGVtZW50LGphdmFOYW1lLGphdmFIZWxwZXIuaXNQcmltaXRpdmUoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBGaWVsZEVsZW1lbnQpewotICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgU2ltcGxlRWxlbWVudCgoRmllbGRFbGVtZW50KXBhcmVudEVsZW1lbnQsamF2YU5hbWUsamF2YUhlbHBlci5pc1ByaW1pdGl2ZSgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIE1ldGhvZEVsZW1lbnQpewotICAgICAgCXJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LFJFVFVSTl9QQVJBTV9OQU1FLE1ldGhvZEVsZW1lbnQuUkVMX1JFVFVSTl9QQVJBTUVURVJTLHRydWUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0dXJuRWxlbWVudDsKLSAgfQotICAKLSAgCi0gIAotCi0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JpZ0RlY2ltYWxUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmlnRGVjaW1hbFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkYTBjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmlnRGVjaW1hbFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBCaWdEZWNpbWFsVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgQmlnRGVjaW1hbFR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuQklHX0RFQ0lNQUxfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoIiArIG5hbWUgKyAiKTsiOwotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JpZ0ludGVnZXJUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmlnSW50ZWdlclR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNmNjAzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmlnSW50ZWdlclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBCaWdJbnRlZ2VyVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgQmlnSW50ZWdlclR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuQklHX0lOVEVHRVJfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoIiArIG5hbWUgKyAiKTsiOwotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0RhdGFUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRGF0YVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg2MWE2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRGF0YVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBjb2RlZ2VuIHByb2Nlc3MKLSogQmVjYXVzZSBjb2RlZ2VuIG1heSBiZSBwcm9jZXNzZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSB0eXBlCi0qIHdlIGNhbiBoYW5kbGUgaG93IGVhY2ggdHlwZSB3YW50cyB0aGUgY29kZSB0byBsb29rIGZvciBhIHNwZWNpZmljIHRhc2sgCi0qIGJ5IGNyZWF0aW5nIGEgZGF0YXR5cGUgYW5kIGNhbGxpbmcgZ2VuZXJpYyBtZXRob2RzIHRoYXQgYXJlIAotKiB0byBiZSBzcGVjaWFsaXplZCBpbiBzdWJjbGFzc2VzCi0qLwotcHVibGljIGludGVyZmFjZSBEYXRhVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX1RZUEUgPSAidHlwZSI7Ci0KLSAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBoYW5kcyBiYWNrIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGdvIGZyb20gdGhlIAotICAqIHN0cmluZyB0aGUgdXNlciBlbnRlcmVkIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBTdHJpbmcgdHlwZU5hbWUgdGhpcyBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHR5cGUgaWUgaW50LGJvb2xlYW4KLSAgKiBAcGFyYW0gU3RyaW5nIG5vZGVOYW1lIFRoZSBub2RlTmFtZSBpcyBqdXN0IHRoZSBhdHRyaWJ1dGVuYW1lICsgVGVtcC4gCi0gICogQHBhcmFtIFN0cmluZyB0aGUgYXR0cmlidXRlTmFtZSAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpOwotCi0gIC8qKgotICAqIE9mdGVuIHRpbWVzIGluIG9yZGVyIHRvIGNvbnZlcnQgYSB0eXBlIHRvIHN0cmluZywgc3RyaW5nIHRvIHR5cGUgb3IganVzdCBwbGFpbiBwcm92aWRlIGFuIGlucHV0IGZvcm0KLSAgKiBBIHRlbXBvcmFyeSB2YXJpYWJsZSBpcyB1c2VkLiBJZiB3ZSBydW4gaW50byBhIHNpdHV0aW9uIHdoZXJlIHR3byBvZiB0aGUgc2FtZSB0eXBlcyBhcmUgdXNlZCBpbiB0aGUgIAotICAqIHNhbWUgbWV0aG9kIHRoZXNlIHRlbXBvcmFyeSB2YXJpYWJsZXMgc2hhcmUgdGhlIHNhbWUgbmFtZSBzcGFjZS4gSXQgaXNudCBlbm91Z2ggdG8gdXNlIGEgbmFtZSAKLSAgKiBiZWNhdXNlIG9mIHdlIG1heSBoYXZlIGEgbmVzdGVkIHNjZW5hcmlvLiBUaGVyZWZvcmUgYW55IHRlbXBvcmFyeSB2YXJpYWJsZSB0aGF0IGlzIHVzZWQgaW4gYSBkYXRhVHlwZQotICAqIG11c3QgdXNlIGEgdW5pcXVlIG5hbWUgYXBlZW5kZWQgdG8gdGhlIGVuZC4gVGhpcyBuYW1lIG11c3QgYmUgcGFzc2VkIGluIGFuZCBpdCBpcyB1cCB0byB0aGUgdXNlciBvZgotICAqIERhdGFUeXBlIHRvIGluc3VyZSBpdCBpcyB1bmlxdWUuCi0gICogQHJldHVybiBVbmlxdWUgTmFtZSAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5pcXVlTmFtZShTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgbmFtZSBlYWNoIHRlbXAgdmFyaWFibGUgd2lsbCB1c2UKLSAgKiAKLSAgKgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZU5hbWUoKTsKLSAgCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gZGljdGF0ZXMgaG93IHlvdSB3YW50IHRvIHByb2Nlc3MgdGhlIAotICAqIGluY29taW5nIHN0cmluZyBmcm9tIHRoZSBpbnB1dCBqc3AuIFlvdSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhlIG1hcmt1cCAKLSAgKiBmdW5jdGlvbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUuIFRoZSBzaW1wbGUgdHlwZXMgdXNlIGl0LiBEb21FbGVtZW50IGRvZXMgbm90Ci0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGNvZGUgdG8gYmUgZ2VuZXJhdGVkCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVxdWVzdENvZGUoU3RyaW5nIG5hbWUsIFN0cmluZyBpZCk7Ci0KLQotICAvKioKLSAgKiBJbnB1dCBmb3JtIHJldHVybnMgdGhlIHVzZXIgaW5wdXQgaHRtbAotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBmb3JtIHVzZWQgdG8gY29sbGVjdCB0aGUgZGF0YQotICAqLwotICBwdWJsaWMgU3RyaW5nIGlucHV0Rm9ybShTdHJpbmcgbmFtZSk7Ci0gIAotICAvKioKLSAgKiBjb252ZXJ0cyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBwcm94eSAKLSAgKiBiYWNrIHRvIGEgc3RyaW5nIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHR5cGUgdG8gc3RyaW5nLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgKiByZXR1cm4gdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgdHlwZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRGF0ZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9EYXRlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWE5YzQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9EYXRlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTExMCAgIDIwOTA4NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgRGF0ZVR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIERhdGVUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LkJJR19ERUNJTUFMX05BTUUpOwotICB9Ci0gCi0KLSAgLyoqCi0gICogaW5wdXRGb3JtIHJldHVybnMgdGhlIHVzZXIgaW5wdXQgaHRtbAotICAqIFRoZSBzaW1wbGUgZm9ybSBpcyBqdXN0IGEgdGV4dCBpbnB1dCBib3gKLSAgKiBUaGlzIGhhcyBiZWVuIHNwZWNpYWxpemVkIHRvIHNob3cgYW4gZXhhbXBsZQotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBmb3JtIHVzZWQgdG8gY29sbGVjdCB0aGUgZGF0YQotICAqLwotICBwdWJsaWMgU3RyaW5nIGlucHV0Rm9ybShTdHJpbmcgbmFtZSkKLSAgewotICAgICBTdHJpbmcgaW5wdXRGb3JtID0gIjxURCBBTElHTj1cImxlZnRcIj48SU5QVVQgVFlQRT1cIlRFWFRcIiBOQU1FPVwiIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiXCIgU0laRT0yMD48L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICJqYXZhLnRleHQuRGF0ZUZvcm1hdCBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGphdmEudGV4dC5EYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIGdjRXhhbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICA9IG5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICJqYXZhLnV0aWwuRGF0ZSBkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGdjRXhhbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmdldFRpbWUoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiU3RyaW5nIHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIuZm9ybWF0KGRhdGUiICsgZ2V0VW5pcXVlTmFtZSgpKyAiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjxURCBBTElHTj1cImxlZnRcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjxUUj4iICArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8VEQ+IDwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8VEQgQUxJR049XCJsZWZ0XCI+IGVnLiA8JT0gdGVtcFJlc3VsdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgJT4gPC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvVFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgIHJldHVybiBpbnB1dEZvcm07Ci0gIH0KLQotCi0gIC8qCi0gICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBzcGVjaWFsaXplZAotICAqIFdlIG11c3QgdXNlIHRoZSBkYXRlIGZ1bmN0aW9uIHRvIGhlbHAKLSAgKiB1cyBjb252ZXJ0IGJhY2sgYW5kIGZvcnRoCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGNvbnZlcnNpb24gPSAgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiamF2YS50ZXh0LkRhdGVGb3JtYXQgZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBqYXZhLnRleHQuRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsiICAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIG5vZGVOYW1lICArICAiPSBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIi5wYXJzZSgiICsgYXR0cmlidXRlTmFtZSArICIpOyIgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiIiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICogdGhpcyBpcyBuZWVkZWQgZm9yIG1vc3QgY2FzZSAKLSAgKiBidXQgaXQgaXMgcGVyaXBoZXJhbCBhcyB0aGUgc3RyaW5nY29udmVyc2lvbiBuZWVkZWQgCi0gICogdG8gYmUgb3ZlcnJpZGRlbgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0KLQotICAvKioKLSAgKiBjb252ZXJ0cyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBwcm94eSAKLSAgKiBiYWNrIHRvIGEgc3RyaW5nIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHR5cGUgdG8gc3RyaW5nLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0KLSAgICBTdHJpbmcgY29udmVyc2lvbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImphdmEudGV4dC5EYXRlRm9ybWF0IGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gamF2YS50ZXh0LkRhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgCSAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gb3JnLmVjbGlwc2UuanN0LndzLnV0aWwuSnNwVXRpbHMubWFya3VwKGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmZvcm1hdCgiICsgbmFtZSArIikpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JT0gdGVtcFJlc3VsdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0KLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotCi0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZVRvU3RyaW5nKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRG9tRWxlbWVudFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9Eb21FbGVtZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDQwNmFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9Eb21FbGVtZW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgRG9tRWxlbWVudFR5cGUgaW1wbGVtZW50cyBEYXRhVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGZUeXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZVbmlxdWVOYW1lOwotCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgRG9tRWxlbWVudFR5cGUoKQotICB7Ci0gICAgZlR5cGUgPSAib3JnLnczYy5kb20uRWxlbWVudCI7Ci0gICAgZlVuaXF1ZU5hbWUgPSAiIjsKLSAgfQotCi0gIC8qKgotICAqIGlucHV0Rm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBUaGUgRG9tRWxlbWVudCBmb3JtIGlzIGEgdGV4dCBib3gKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZm9ybSB1c2VkIHRvIGNvbGxlY3QgdGhlIGRhdGEKLSAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dEZvcm0oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGlucHV0Rm9ybSA9ICI8VEQgQUxJR049XCJsZWZ0XCI+PFRFWFRBUkVBIFJvd3M9NyBDb2xzPTQ1IE5BTUU9XCIiIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICJcIj48L1RFWFRBUkVBPjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGlucHV0Rm9ybTsKLSAgfQotCi0gICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGRpY3RhdGVzIGhvdyB5b3Ugd2FudCB0byBwcm9jZXNzIHRoZSAKLSAgKiBpbmNvbWluZyBzdHJpbmcgZnJvbSB0aGUgaW5wdXQganNwLiBZb3UgbWF5IG9yIG1heSBub3QgdXNlIHRoZSBtYXJrdXAgCi0gICogZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSB0eXBlLiBUaGUgc2ltcGxlIHR5cGVzIHVzZSBpdC4gRG9tRWxlbWVudCBkb2VzIG5vdAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBjb2RlIHRvIGJlIGdlbmVyYXRlZAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcXVlc3RDb2RlKFN0cmluZyBuYW1lLCBTdHJpbmcgaWQpCi0gIHsKLSAgICAgU3RyaW5nIHJlcXVlc3RDb2RlID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIiArIEdlbmVyYXRvci5TUEFDRSAKLSAgICAgCSAgICAgICAgICAgICAgICAgICArIGlkICsgIj0gIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiIgotICAgICAJICAgICAgICAgICAgICAgICAgICsgbmFtZSArIlwiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIHJlcXVlc3RDb2RlOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBoYW5kcyBiYWNrIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGdvIGZyb20gdGhlIAotICAqIHN0cmluZyB0aGUgdXNlciBlbnRlcmVkIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBTdHJpbmcgdHlwZU5hbWUgdGhpcyBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHR5cGUgaWUgaW50LGJvb2xlYW4KLSAgKiBAcGFyYW0gU3RyaW5nIG5vZGVOYW1lIFRoZSBub2RlTmFtZSBpcyBqdXN0IHRoZSBhdHRyaWJ1dGVuYW1lICsgVGVtcC4gCi0gICogQHBhcmFtIFN0cmluZyB0aGUgYXR0cmlidXRlTmFtZSAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGNvbnZlcnNpb24gPSAgR2VuZXJhdG9yLkRPVUJMRV9UQUIgCi0gICAgICAgICAgICAgICAgICAgICAgICsgIm9yZy53M2MuZG9tLkVsZW1lbnQgIiArIG5vZGVOYW1lICsgIj0gb3JnLmVjbGlwc2UuanN0LndzLnV0aWwuRG9tRWxlbWVudEhlbHBlci5jcmVhdGVEb21FbGVtZW50RnJvbVhNTFN0cmluZygiICsgYXR0cmlidXRlTmFtZSArICIpOyIgCi0JICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGNvbnZlcnNpb247IAotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IHdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIHR5cGUgCi0gICogdXBvbiByZWNlaXZpbmcgaXQgYXMgYSByZXR1cm4gZnJvbSBhIHByb3h5IG1ldGhvZAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZGlzcGxheSBzdHJpbmcKLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyB0eXBlVG9TdHJpbmcgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJTdHJpbmcgdGVtcFJlc3VsdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbC5Eb21FbGVtZW50SGVscGVyLmRvbVdyaXRlcigiICsgbmFtZSArICIsIG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKCkiICsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLQotICAgIHJldHVybiB0eXBlVG9TdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgKiByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyB0eXBlCi0gICogQHJldHVybiBTdHJpbmcgdGhlIG5hbWUoaW5jbHVkaW5nIHBhY2thZ2UpLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGZUeXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVbmlxdWVOYW1lKCkKLSAgewotICAgIHJldHVybiBmVW5pcXVlTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVuaXF1ZU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmVW5pcXVlTmFtZSA9IG5hbWU7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRmllbGRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRmllbGRFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZmJiMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0ZpZWxkRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhIGJlYW4gbWV0aG9kIHBhcmFtZXRlci4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5iZWFucy5QYXJhbWV0ZXJEZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBjbGFzcyBGaWVsZEVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQgaW1wbGVtZW50cyBBdHRyaWJ1dGVFbGVtZW50VHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZTZXR0ZXJNZXRob2Q7Ci0gIHByaXZhdGUgU3RyaW5nIGZHZXR0ZXJNZXRob2Q7Ci0KLSAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1RZUEUgPSAidHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9PV05JTkdfQkVBTiA9ICJvd25pbmdiZWFuIjsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIHRoaXMgdGFrZXMgdGhlIG93bmluZyBiZWFuLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIGJlYW5FbGVtZW50IHRoZSBiZWFuIHRoYXQgb3ducyB0aGlzIGF0dHJpYnV0ZS4KLSAgKi8KLSAgcHVibGljIEZpZWxkRWxlbWVudCAoIEJlYW5FbGVtZW50IGJlYW5FbGVtZW50LCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYmVhbkVsZW1lbnQsUkVMX09XTklOR19CRUFOLEJlYW5FbGVtZW50LlJFTF9GSUVMRFMpOwotICAgIGZTZXR0ZXJNZXRob2QgPSBuYW1lOwotICAgIGZHZXR0ZXJNZXRob2QgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2V0dGVyTWV0aG9kKFN0cmluZyBzZXR0ZXJNZXRob2QpCi0gIHsKLSAgICBmU2V0dGVyTWV0aG9kID0gc2V0dGVyTWV0aG9kOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXR0ZXJNZXRob2QoKQotICB7Ci0gICAgcmV0dXJuIGZTZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEdldHRlck1ldGhvZCgpCi0gIHsKLSAgICByZXR1cm4gZkdldHRlck1ldGhvZDsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXRHZXR0ZXJNZXRob2QoU3RyaW5nIGdldHRlck1ldGhvZCkKLSAgewotICAgIGZHZXR0ZXJNZXRob2QgPSBnZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNldHRlclNpZ25hdHVyZShTdHJpbmcgYXR0cmlidXRlKQotICB7Ci0gICAgcmV0dXJuIGZTZXR0ZXJNZXRob2QgKyAiID0gIiArIGF0dHJpYnV0ZSArICI7IjsKLSAgfQotICAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIEJlYW4gdGhhdCBvd25zIHRoaXMgQXR0cmlidXRlLgotICAqIEByZXR1cm4gQmVhbkVsZW1lbnQgVGhlIGJlYW4gdGhhdCBvd25zIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgQmVhbkVsZW1lbnQgZ2V0T3duaW5nQmVhbkVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhSRUxfT1dOSU5HX0JFQU4pOwotICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKEJlYW5FbGVtZW50KWUubmV4dEVsZW1lbnQoKSA6IG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSB0eXBlIHRoYXQgaXMgb3duZWQgYnkgdGhpcyBhdHRyaWJ1dHRlLgotICAqIEByZXR1cm4gVHlwZUVsZW1lbnQgVGhlIFR5cGUgdGhhdCBvZiB0aGlzIGF0dHJpYnV0ZS4KLSAgKi8KLSAgcHVibGljIFR5cGVFbGVtZW50IGdldFR5cGVFbGVtZW50ICgpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoUkVMX1RZUEUpOwotICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKFR5cGVFbGVtZW50KWUubmV4dEVsZW1lbnQoKSA6IG51bGw7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0dyZWdvcmlhbkNhbGVuZGFyVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0dyZWdvcmlhbkNhbGVuZGFyVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTlkOWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9HcmVnb3JpYW5DYWxlbmRhclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMTAgICAyMDkwODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBHcmVnb3JpYW5DYWxlbmRhclR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5HUkVHT1JJQU5fQ0FMRU5EQVJfTkFNRSk7Ci0gIH0KLQotCi0gIC8qKgotICAqIGlucHV0Rm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBUaGUgc2ltcGxlIGZvcm0gaXMganVzdCBhIHRleHQgaW5wdXQgYm94Ci0gICogVGhpcyBoYXMgYmVlbiBzcGVjaWFsaXplZCB0byBzaG93IGFuIGV4YW1wbGUKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZm9ybSB1c2VkIHRvIGNvbGxlY3QgdGhlIGRhdGEKLSAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dEZvcm0oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGlucHV0Rm9ybSA9ICI8VEQgQUxJR049XCJsZWZ0XCI+PElOUFVUIFRZUEU9XCJURVhUXCIgTkFNRT1cIiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyBuYW1lICsgIlwiIFNJWkU9MjA+PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS50ZXh0LkRhdGVGb3JtYXQgZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBqYXZhLnRleHQuRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgImphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhciBnY0V4YW1wIiArIGdldFVuaXF1ZU5hbWUoKSsgIiAgPSBuZXcgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS51dGlsLkRhdGUgZGF0ZSIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBnY0V4YW1wIiArIGdldFVuaXF1ZU5hbWUoKSsgIi5nZXRUaW1lKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmZvcm1hdChkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPFREIEFMSUdOPVwibGVmdFwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8L1RSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPFRSPiIgICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjxURD4gPC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjxURCBBTElHTj1cImxlZnRcIj4gZWcuIDwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiA8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgcmV0dXJuIGlucHV0Rm9ybTsKLSAgfQotIAotIAotICAvKgotICAqIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3BlY2lhbGl6ZWQKLSAgKiBXZSBtdXN0IHVzZSB0aGUgZGF0ZSBmdW5jdGlvbiB0byBoZWxwCi0gICogdXMgY29udmVydCBiYWNrIGFuZCBmb3J0aAotICAqLwotICAgcHVibGljIFN0cmluZyBzdHJpbmdDb252ZXJzaW9uKFN0cmluZyB0eXBlTmFtZSwgU3RyaW5nIG5vZGVOYW1lLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgICBTdHJpbmcgY29udmVyc2lvbiA9ICBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJqYXZhLnRleHQuRGF0ZUZvcm1hdCBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGphdmEudGV4dC5EYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpOyIgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORSArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgICJqYXZhLnV0aWwuRGF0ZSBkYXRlVGVtcCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgID0gZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIucGFyc2UoIiArIGF0dHJpYnV0ZU5hbWUgKyAiKTsiICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORSArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgR2VuZXJhdG9yLlNQQUNFICsgbm9kZU5hbWUgKyAiID0gIiArICJuZXcgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyKCk7IiAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIG5vZGVOYW1lICsgIi5zZXRUaW1lKGRhdGVUZW1wIiArIGdldFVuaXF1ZU5hbWUoKSsgIik7IgotICAgICAgICAgICAgICAgICAgICAgICAgICsgIiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotICAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAqIHRoaXMgaXMgbmVlZGVkIGZvciBtb3N0IGNhc2UgCi0gICogYnV0IGl0IGlzIHBlcmlwaGVyYWwgYXMgdGhlIHN0cmluZ2NvbnZlcnNpb24gbmVlZGVkIAotICAqIHRvIGJlIG92ZXJyaWRkZW4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAvKioKLSAgKiBjb252ZXJ0cyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBwcm94eSAKLSAgKiBiYWNrIHRvIGEgc3RyaW5nIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHR5cGUgdG8gc3RyaW5nLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0KLSAgICBTdHJpbmcgY29udmVyc2lvbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImphdmEudGV4dC5EYXRlRm9ybWF0IGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gamF2YS50ZXh0LkRhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgCSAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiamF2YS51dGlsLkRhdGUgZGF0ZSIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSAiICsgbmFtZSArICIuZ2V0VGltZSgpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgIAkgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLkpzcFV0aWxzLm1hcmt1cChkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIi5mb3JtYXQoZGF0ZSIgKyBnZXRVbmlxdWVOYW1lKCkgKyAiKSk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLQotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLQotCi0gIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlVG9TdHJpbmcoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9IYXNodGFibGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvSGFzaHRhYmxlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWZmMmNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9IYXNodGFibGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBIYXNodGFibGVUeXBlIGV4dGVuZHMgUmVjb2duaXplZFJldHVyblR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBIYXNodGFibGVUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LkhBU0hUQUJMRV9OQU1FKTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvTWFwVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL01hcFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAzNWJmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvTWFwVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgcmVjb2duaXplZCByZXR1cm4gdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgTWFwVHlwZSBleHRlbmRzIFJlY29nbml6ZWRSZXR1cm5UeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgTWFwVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5NQVBfTkFNRSk7Ci0gIH0KLQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL01ldGhvZEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9NZXRob2RFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MWU0ZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL01ldGhvZEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmEgYmVhbiBtZXRob2QuCi0qIE5lYXJlc3QgbW9yYWwgZXF1aXZhbGVudHM6IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCwgamF2YS5iZWFucy5NZXRob2REZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBjbGFzcyBNZXRob2RFbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9CRUFOID0gImJlYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUEFSQU1FVEVSUyA9ICJwYXJhbWV0ZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1JFVFVSTl9QQVJBTUVURVJTID0gInJldHVybnBhcmFtZXRlcnMiOwotICBwcml2YXRlIFN0cmluZyBmRGlzcGxheU5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGZOYW1lOwotICBwcml2YXRlIGJvb2xlYW4gZk1ldGhvZE9taXR0ZWQ7Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIGJlYW4gVGhlIEJlYW4gdGhhdCBvd25zIHRoaXMgbWV0aG9kLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QuCi0gICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIG1ldGhvZC4KLSAgKi8KLSAgcHVibGljIE1ldGhvZEVsZW1lbnQgKCBCZWFuRWxlbWVudCBiZWFuRWxlbWVudCwgU3RyaW5nIG5hbWUsIFN0cmluZyBkaXNwbGF5TmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYmVhbkVsZW1lbnQsUkVMX0JFQU4sQmVhbkVsZW1lbnQuUkVMX01FVEhPRFMpOwotICAgIGZEaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lOwotICAgIGZOYW1lID0gbmFtZTsKLSAgICBmTWV0aG9kT21pdHRlZCA9IGZhbHNlOwotICAgIAotICB9Ci0KLSAgLyoKLSAgKiBJbiB0aGUgZXZlbnQgdGhhdCB0aGVyZSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlCi0gICogd2Ugd2lsbCBzZXQgdGhlIG9tbWlzc2lvbiBib29sZWFuIHZhcmlhYmxlCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhpcyBtZXRob2QgaXMgdG8gYmUgb21taXRlZAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRNZXRob2RPbW1pc3Npb24oKQotICB7Ci0gICAgcmV0dXJuIGZNZXRob2RPbWl0dGVkOwotICB9Ci0KLSAgLyoKLSAgKiBJbiB0aGUgZXZlbnQgdGhhdCB0aGVyZSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlCi0gICogd2Ugd2lsbCBnZXQgdGhlIG9tbWlzc2lvbiBib29sZWFuIHZhcmlhYmxlCi0gICogQHBhcmFtIGJvb2xlYW4gdHJ1ZSBpZiB0aGlzIG1ldGhvZCBpcyB0byBiZSBvbW1pdGVkCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZE9tbWlzc2lvbihib29sZWFuIGJvb2wpCi0gIHsKLSAgICBmTWV0aG9kT21pdHRlZCA9IGJvb2w7Ci0gIH0KLQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZk5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkKLSAgewotICAgIHJldHVybiBmRGlzcGxheU5hbWU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBCZWFuIHRoYXQgb3ducyB0aGlzIG1ldGhvZC4KLSAgKiBAcmV0dXJuIEJlYW4gVGhlIEJlYW4gdGhhdCBvd25zIHRoaXMgbWV0aG9kLgotICAqLwotICBwdWJsaWMgQmVhbkVsZW1lbnQgZ2V0QmVhbkVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhSRUxfQkVBTik7Ci0gICAgcmV0dXJuIGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoQmVhbkVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgdGhlIHJldHVybiBwYXJhbWV0ZXIgb2YgdGhpcyBtZXRob2QuCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBob2xkcyB0aGUgcmV0dXJuIHBhcmFtZXRlciBvZiB0aGlzIG1ldGhvZC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFJldHVyblBhcmFtZXRlckVudW0gKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfUkVUVVJOX1BBUkFNRVRFUlMpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgcmV0dXJuIHBhcmFtZXRlciBvZiB0aGlzIG1ldGhvZC4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIGhvbGRzIHRoZSByZXR1cm4gcGFyYW1ldGVyIG9mIHRoaXMgbWV0aG9kLgotICAqLwotICBwdWJsaWMgUGFyYW1ldGVyRWxlbWVudCBnZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50ICgpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0UmV0dXJuUGFyYW1ldGVyRW51bSgpOwotICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKFBhcmFtZXRlckVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIFBhcmFtZXRlciBvYmplY3RzIG9mIHRoaXMgbWV0aG9kLgotICAqIEByZXR1cm4gRW51bWVyYXRpb24gQWxsIFBhcmFtZXRlciBvYmplY3RzIG9mIHRoaXMgbWV0aG9kLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UGFyYW1ldGVyRWxlbWVudHMgKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfUEFSQU1FVEVSUyk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgUGFyYW1ldGVyIG9iamVjdHMgb2YgdGhpcyBtZXRob2QuCi0gICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBQYXJhbWV0ZXIgb2JqZWN0cyBvZiB0aGlzIG1ldGhvZC4KLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJPZlBhcmFtZXRlckVsZW1lbnRzICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfUEFSQU1FVEVSUyk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL09iamVjdFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9PYmplY3RUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZWJkZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL09iamVjdFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgyMwkgIDE0NTY0MyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24gKGNyZWF0ZWQgY2xhc3MpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIE9iamVjdFR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIE9iamVjdFR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuT0JKRUNUX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgeyAKLQkvL1dlIGNhbid0IGRlc2VyaWFsaXplIGEgU3RyaW5nIHRvIGFuIE9iamVjdAotCS8vdGhpcyBzaG91bGQgbmV2ZXIgYWN0dWFsbHkgYmUgY2FsbGVkIHNpbmNlCi0JLy9tZXRob2RzIHdpdGggT2JqZWN0cyBhcyBpbnB1dCBhcmUgb21pdHRlZC4KLSAgICByZXR1cm4gIm5ldyBqYXZhLmxhbmcuT2JqZWN0KCk7IjsKLSAgfQotCi0gIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlVG9TdHJpbmcoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gbmFtZSArICIudG9TdHJpbmcoKSI7Ci0gIH0KLSAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QYXJhbWV0ZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUGFyYW1ldGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDFjZmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QYXJhbWV0ZXJFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmEgYmVhbiBtZXRob2QgcGFyYW1ldGVyLgotKiBOZWFyZXN0IG1vcmFsIGVxdWl2YWxlbnRzOiBqYXZhLmJlYW5zLlBhcmFtZXRlckRlc2NyaXB0b3IuCi0qLwotcHVibGljIGNsYXNzIFBhcmFtZXRlckVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfTUVUSE9EID0gIm1ldGhvZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9UWVBFID0gInR5cGUiOwotCi0gIHB1YmxpYyBib29sZWFuIGZSZXR1cm5QYXJhbWV0ZXI9ZmFsc2U7Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBAcGFyYW0gbWV0aG9kIFRoZSBNZXRob2QgdGhhdCBvd25zIHRoaXMgcGFyYW1ldGVyLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuCi0gICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlci4KLSAgKi8KLSAgcHVibGljIFBhcmFtZXRlckVsZW1lbnQgKCBNZXRob2RFbGVtZW50IG1ldGhvZEVsZW1lbnQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcmVsVHlwZSxib29sZWFuIHJldHVyblBhcmFtZXRlciApCi0gIHsKLSAgICB0aGlzKG5hbWUsbWV0aG9kRWxlbWVudCxSRUxfTUVUSE9ELHJlbFR5cGUpOwotICAgIGZSZXR1cm5QYXJhbWV0ZXIgPSByZXR1cm5QYXJhbWV0ZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBtZXRob2QgVGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4KLSAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyLgotICAqLwotICBwdWJsaWMgUGFyYW1ldGVyRWxlbWVudCAoU3RyaW5nIG5hbWUsIE1ldGhvZEVsZW1lbnQgbWV0aG9kRWxlbWVudCwgU3RyaW5nIG91dFJlbCxTdHJpbmcgaW5SZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1ldGhvZEVsZW1lbnQsb3V0UmVsLGluUmVsKTsKLSAgfQotICAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICogQHJldHVybiBNZXRob2QgVGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICovCi0gIHB1YmxpYyBNZXRob2RFbGVtZW50IGdldE1ldGhvZEVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhSRUxfTUVUSE9EKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChNZXRob2RFbGVtZW50KWUubmV4dEVsZW1lbnQoKSA6IG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBNZXRob2QgdGhhdCBvd25zIHRoaXMgcGFyYW1ldGVyLgotICAqIEByZXR1cm4gTWV0aG9kIFRoZSBNZXRob2QgdGhhdCBvd25zIHRoaXMgcGFyYW1ldGVyLgotICAqLwotICBwdWJsaWMgVHlwZUVsZW1lbnQgZ2V0VHlwZUVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhSRUxfVFlQRSk7Ci0gICAgcmV0dXJuIGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoVHlwZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUmV0dXJuKCkKLSAgewotICAgIHJldHVybiBmUmV0dXJuUGFyYW1ldGVyOwotICB9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUFycmF5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUFycmF5VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODczMDYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVBcnJheVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgcmVjb2duaXplZCByZXR1cm4gdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlQXJyYXlUeXBlIGV4dGVuZHMgQXJyYXlUeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlQXJyYXlUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1JVElWRV9BUlJBWV9OQU1FLCB0eXBlTmFtZSk7Ci0gIH0KLQotICAgLyoqCi0gICogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IHdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIHR5cGUgCi0gICogdXBvbiByZWNlaXZpbmcgaXQgYXMgYSByZXR1cm4gZnJvbSBhIHByb3h5IG1ldGhvZAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZGlzcGxheSBzdHJpbmcKLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyB0cmlwcGxlVGFiID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBHZW5lcmF0b3IuVEFCOwotCi0gICAgU3RyaW5nIG5vbkJlYW4gPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJTdHJpbmcgdGVtcCIgKyBnZXRVbmlxdWVOYW1lKCkgKyAiID0gXCJbXCI7IiAKLSAgICAJICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiZm9yKGludCBpIiArIGdldFVuaXF1ZU5hbWUoKSArICI9MDtpIiArZ2V0VW5pcXVlTmFtZSgpICsgIjwgIiArIG5hbWUgCi0gICAgCSAgICAgICAgICAgICAgICAgICArICIubGVuZ3RoO2kiICsgZ2V0VW5pcXVlTmFtZSgpICsgIisrKXsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgCi0gICAgCSAgICAgICAgICAgICArIHRyaXBwbGVUYWIgKyAidGVtcCIrIGdldFVuaXF1ZU5hbWUoKSArIiA9IHRlbXAiK2dldFVuaXF1ZU5hbWUoKSArICIgKyAiICsgbmFtZSArICJbaSIgKyBnZXRVbmlxdWVOYW1lKCkgCi0gICAgCSAgICAgICAgICAgICAgICAgICArICJdICsgXCIsXCI7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJpbnQgbGVuZ3RoIiArIGdldFVuaXF1ZU5hbWUoKSArICIgPSB0ZW1wIiArIGdldFVuaXF1ZU5hbWUoKSArICIubGVuZ3RoKCk7IiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJ0ZW1wIiArIGdldFVuaXF1ZU5hbWUoKSArICIgPSB0ZW1wIitnZXRVbmlxdWVOYW1lKCkrIi5zdWJzdHJpbmcoMCwobGVuZ3RoIitnZXRVbmlxdWVOYW1lKCkrIiAtIDEpKSArIFwiXVwiOyIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAJICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSAgCi0gICAgCSAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlPXRlbXAiKyBnZXRVbmlxdWVOYW1lKCkgKyIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlIisgU3RyaW5nVXRpbHMuTkVXTElORTsKLQotICAgIHJldHVybiBub25CZWFuOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVCb29sZWFuVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUJvb2xlYW5UeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OGFkOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUJvb2xlYW5UeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVCb29sZWFuVHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlQm9vbGVhblR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTV9CT09MRUFOX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiQm9vbGVhbi52YWx1ZU9mKCIgKyBuYW1lICsgIikuYm9vbGVhblZhbHVlKCk7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQnl0ZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVCeXRlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDQ1ZDI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVCeXRlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlQnl0ZVR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFByaW1pdGl2ZUJ5dGVUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fQllURV9OQU1FKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gIkJ5dGUucGFyc2VCeXRlKCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQ2hhclR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVDaGFyVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTJmOTAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVDaGFyVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlQ2hhclR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFByaW1pdGl2ZUNoYXJUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fQ0hBUl9OQU1FKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gIiIgKyBuYW1lICsgIi5jaGFyQXQoMCk7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlRG91YmxlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZURvdWJsZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IzNjJlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlRG91YmxlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlRG91YmxlVHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlRG91YmxlVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5QUklNX0RPVUJMRV9OQU1FKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gIkRvdWJsZS5wYXJzZURvdWJsZSgiICsgbmFtZSArICIpOyI7Ci0gICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLSAgCi0gIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUZsb2F0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUZsb2F0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDBmOWQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVGbG9hdFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFByaW1pdGl2ZUZsb2F0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlRmxvYXRUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fRkxPQVRfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9ICJGbG9hdC5wYXJzZUZsb2F0KCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlSW50VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUludFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYzM2RkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlSW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlSW50VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlSW50VHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5QUklNX0lOVEVHRVJfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9ICJJbnRlZ2VyLnBhcnNlSW50KCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlSmF2YVR5cGVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlSmF2YVR5cGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MTUyMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUphdmFUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFByaW1pdGl2ZUphdmFUeXBlcyBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlSmF2YVR5cGVzKFN0cmluZyB0eXBlKQotICB7Ci0gICAgc3VwZXIodHlwZSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSBmVHlwZSArICIudmFsdWVPZigiICsgbmFtZSArICIpOyI7Ci0gICAgcmV0dXJuIGNvbnZlcnNpb247ICAgIAotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiU3RyaW5nLnZhbHVlT2YoIiArIG5hbWUgKyAiKSI7Ci0gIH0KLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVMb25nVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUxvbmdUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMGM4MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUxvbmdUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVMb25nVHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlTG9uZ1R5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTV9MT05HX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiTG9uZy5wYXJzZUxvbmcoIiArIG5hbWUgKyAiKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVTaG9ydFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVTaG9ydFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY5MWNlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlU2hvcnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVTaG9ydFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFByaW1pdGl2ZVNob3J0VHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5QUklNX1NIT1JUX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiU2hvcnQucGFyc2VTaG9ydCgiICsgbmFtZSArICIpOyI7Ci0gICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLSAgCi0gIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMTA2YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTExMCAgIDIwOTA4NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFByaW1pdGl2ZVR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFByaW1pdGl2ZVR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBzdXBlcih0eXBlKTsKLSAgfQotIAotIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBzdHJpbmdDb252ZXJzaW9uKFN0cmluZyB0eXBlTmFtZSwgU3RyaW5nIG5vZGVOYW1lLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgICBTdHJpbmcgY29udmVyc2lvbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgdHlwZU5hbWUgKyBHZW5lcmF0b3IuU1BBQ0UgKyBub2RlTmFtZSAKLSAgICAgCSAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuU1BBQ0UgKyAiID0gIiArIFN0cmluZ1RvVHlwZShhdHRyaWJ1dGVOYW1lKSAKLSAgICAgCSAgICAgICAgICAgICAgICAgKyAiIiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiU3RyaW5nLnZhbHVlT2YoIiArIG5hbWUgKyAiKSI7Ci0gIH0KLSAgCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUmVjb2duaXplZFJldHVyblR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9SZWNvZ25pemVkUmV0dXJuVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzcyMWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9SZWNvZ25pemVkUmV0dXJuVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgcmVjb2duaXplZCByZXR1cm4gdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUmVjb2duaXplZFJldHVyblR5cGUgaW1wbGVtZW50cyBEYXRhVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGZUeXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZVbmlxdWVOYW1lOwotCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUmVjb2duaXplZFJldHVyblR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBmVHlwZSA9IHR5cGU7Ci0gICAgZlVuaXF1ZU5hbWUgPSAiIjsKLSAgfQotCi0gIC8qKgotICAqIG5vdCByZWxldmFudCBhdCB0aGlzIHBvaW50IAotICAqLwotICBwdWJsaWMgU3RyaW5nIGlucHV0Rm9ybShTdHJpbmcgbmFtZSkKLSAgewotICAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAgLyoqCi0gICogYWdhaW4gbm90IHJlbGV2YW50Ci0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVxdWVzdENvZGUoU3RyaW5nIG5hbWUsIFN0cmluZyBpZCkKLSAgewotICAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRzIGJhY2sgdGhlIGNvZGUgcmVxdWlyZWQgdG8gZ28gZnJvbSB0aGUgCi0gICogc3RyaW5nIHRoZSB1c2VyIGVudGVyZWQgdG8gdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBlbGVtZW50Ci0gICogQHBhcmFtIFN0cmluZyB0eXBlTmFtZSB0aGlzIGlzIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgdHlwZSBpZSBpbnQsYm9vbGVhbgotICAqIEBwYXJhbSBTdHJpbmcgbm9kZU5hbWUgVGhlIG5vZGVOYW1lIGlzIGp1c3QgdGhlIGF0dHJpYnV0ZW5hbWUgKyBUZW1wLiAKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBhdHRyaWJ1dGVOYW1lIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlIC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBzdHJpbmdDb252ZXJzaW9uKFN0cmluZyB0eXBlTmFtZSwgU3RyaW5nIG5vZGVOYW1lLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qKgotICAqIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBmdW5jdGlvbiB0aGF0IGRpY3RhdGVzIGhvdyB3ZSB3YW50IHRvIGRpc3BsYXkgdGhpcyB0eXBlIAotICAqIHVwb24gcmVjZWl2aW5nIGl0IGFzIGEgcmV0dXJuIGZyb20gYSBwcm94eSBtZXRob2QKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHRoZSB0eXBlCi0gICogQHJldHVybiBTdHJpbmcgVGhlIGRpc3BsYXkgc3RyaW5nCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZUNvbnZlcnNpb24oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbm9uQmVhbiA9ICAgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiaWYoIiArIG5hbWUgKyAiIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgICAKLSAgICAJICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIHRlbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyIgPSAiICsgbmFtZSArICIudG9TdHJpbmcoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSAgCi0gICAgCSAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgICI8JT10ZW1wIiArIGdldFVuaXF1ZU5hbWUoKSArIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAifSI7Ci0gICAgcmV0dXJuIG5vbkJlYW47Ci0gIH0KLQotICAvKioKLSAgKiByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyB0eXBlCi0gICogQHJldHVybiBTdHJpbmcgdGhlIG5hbWUoaW5jbHVkaW5nIHBhY2thZ2UpLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGZUeXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVbmlxdWVOYW1lKCkKLSAgewotICAgIHJldHVybiBmVW5pcXVlTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVuaXF1ZU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmVW5pcXVlTmFtZSA9IG5hbWU7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU09BUEVsZW1lbnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU09BUEVsZW1lbnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4OWUwMDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1NPQVBFbGVtZW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgU09BUEVsZW1lbnRUeXBlIGltcGxlbWVudHMgRGF0YVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBmVHlwZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBmVW5pcXVlTmFtZTsKLQotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFNPQVBFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBmVHlwZSA9ICJqYXZheC54bWwuc29hcC5TT0FQRWxlbWVudCI7Ci0gICAgZlVuaXF1ZU5hbWUgPSAiIjsKLSAgfQotCi0gIC8qKgotICAqIGlucHV0Rm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBUaGUgRG9tRWxlbWVudCBmb3JtIGlzIGEgdGV4dCBib3gKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZm9ybSB1c2VkIHRvIGNvbGxlY3QgdGhlIGRhdGEKLSAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dEZvcm0oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGlucHV0Rm9ybSA9ICI8VEQgQUxJR049XCJsZWZ0XCI+PFRFWFRBUkVBIFJvd3M9NyBDb2xzPTQ1IE5BTUU9XCIiIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICJcIj48L1RFWFRBUkVBPjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGlucHV0Rm9ybTsKLSAgfQotCi0gICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGRpY3RhdGVzIGhvdyB5b3Ugd2FudCB0byBwcm9jZXNzIHRoZSAKLSAgKiBpbmNvbWluZyBzdHJpbmcgZnJvbSB0aGUgaW5wdXQganNwLiBZb3UgbWF5IG9yIG1heSBub3QgdXNlIHRoZSBtYXJrdXAgCi0gICogZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSB0eXBlLiBUaGUgc2ltcGxlIHR5cGVzIHVzZSBpdC4gRG9tRWxlbWVudCBkb2VzIG5vdAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBjb2RlIHRvIGJlIGdlbmVyYXRlZAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcXVlc3RDb2RlKFN0cmluZyBuYW1lLCBTdHJpbmcgaWQpCi0gIHsKLSAgICAgU3RyaW5nIHJlcXVlc3RDb2RlID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIiArIEdlbmVyYXRvci5TUEFDRSAKLSAgICAgCSAgICAgICAgICAgICAgICAgICArIGlkICsgIj0gIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiIgotICAgICAJICAgICAgICAgICAgICAgICAgICsgbmFtZSArIlwiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIHJlcXVlc3RDb2RlOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBoYW5kcyBiYWNrIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGdvIGZyb20gdGhlIAotICAqIHN0cmluZyB0aGUgdXNlciBlbnRlcmVkIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBTdHJpbmcgdHlwZU5hbWUgdGhpcyBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHR5cGUgaWUgaW50LGJvb2xlYW4KLSAgKiBAcGFyYW0gU3RyaW5nIG5vZGVOYW1lIFRoZSBub2RlTmFtZSBpcyBqdXN0IHRoZSBhdHRyaWJ1dGVuYW1lICsgVGVtcC4gCi0gICogQHBhcmFtIFN0cmluZyB0aGUgYXR0cmlidXRlTmFtZSAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGNvbnZlcnNpb24gPSAgR2VuZXJhdG9yLkRPVUJMRV9UQUIgCi0gICAgICAgICAgICAgICAgICAgICAgICsgImphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50ICIgKyBub2RlTmFtZSArICI9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLlNvYXBFbGVtZW50SGVscGVyLmNyZWF0ZVNPQVBFbGVtZW50RnJvbVhNTFN0cmluZygiICsgYXR0cmlidXRlTmFtZSArICIpOyIgCi0JICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZnVuY3Rpb24gdGhhdCBkaWN0YXRlcyBob3cgd2Ugd2FudCB0byBkaXNwbGF5IHRoaXMgdHlwZSAKLSAgKiB1cG9uIHJlY2VpdmluZyBpdCBhcyBhIHJldHVybiBmcm9tIGEgcHJveHkgbWV0aG9kCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZQotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBkaXNwbGF5IHN0cmluZwotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIHR5cGVUb1N0cmluZyA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLlNvYXBFbGVtZW50SGVscGVyLnNvYXBFbGVtZW50V3JpdGVyKCIgKyBuYW1lICsgIiwgbmV3IGphdmEubGFuZy5TdHJpbmdCdWZmZXIoKSIgKyAiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9IHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIHR5cGVUb1N0cmluZzsKLSAgfQotCi0gIC8qKgotICAqIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbmFtZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZlR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZVbmlxdWVOYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VW5pcXVlTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGZVbmlxdWVOYW1lID0gbmFtZTsKLSAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TaW1wbGVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU2ltcGxlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDc4MzQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TaW1wbGVFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIDEgb2YgdGhyZWUgdHlwZSBlbGVtZW50cyByZXByZXNlbnRzIHByaW1pdGl2ZXMgCi0qLwotcHVibGljIGNsYXNzIFNpbXBsZUVsZW1lbnQgZXh0ZW5kcyBUeXBlRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIHNpbXBsZSB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgc2ltcGxlIGVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBTaW1wbGVFbGVtZW50ICggUGFyYW1ldGVyRWxlbWVudCBwYXJhbWV0ZXJFbGVtZW50LCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBwcmltKQotICB7Ci0gICAgc3VwZXIobmFtZSxwYXJhbWV0ZXJFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5TSU1QTEUpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5QQVJBTUVURVJfT1dORVI7Ci0gICAgc2V0UHJpbWl0aXZlKHByaW0pOwotICB9Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgQXR0cmlidXRlIHRoYXQgb3ducyB0aGlzIHNpbXBsZSB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgQXR0cmlidXRlRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIFNpbXBsZUVsZW1lbnQgKCBBdHRyaWJ1dGVFbGVtZW50IGF0dHJpYnV0ZUVsZW1lbnQsIFN0cmluZyBuYW1lLCBib29sZWFuIHByaW0pCi0gIHsKLSAgICBzdXBlcihuYW1lLGF0dHJpYnV0ZUVsZW1lbnQsVHlwZUVsZW1lbnQuUkVMX09XTkVSLFR5cGVFbGVtZW50LlJFTF9UWVBFLFR5cGVFbGVtZW50LlNJTVBMRSk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LkFUVFJJQlVURV9PV05FUjsKLSAgICBzZXRQcmltaXRpdmUocHJpbSk7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RvciAKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgQXR0cmlidXRlIHRoYXQgb3ducyB0aGlzIHNpbXBsZSB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgQXR0cmlidXRlRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIFNpbXBsZUVsZW1lbnQgKCBGaWVsZEVsZW1lbnQgZmllbGRFbGVtZW50LCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBwcmltKQotICB7Ci0gICAgc3VwZXIobmFtZSxmaWVsZEVsZW1lbnQsVHlwZUVsZW1lbnQuUkVMX09XTkVSLFR5cGVFbGVtZW50LlJFTF9UWVBFLFR5cGVFbGVtZW50LlNJTVBMRSk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LkZJRUxEX09XTkVSOwotICAgIHNldFByaW1pdGl2ZShwcmltKTsKLSAgfQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1NpbXBsZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TaW1wbGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNmVkZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1NpbXBsZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMTAgICAyMDkwODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFNpbXBsZVR5cGUgaW1wbGVtZW50cyBEYXRhVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGZUeXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZVbmlxdWVOYW1lOwotCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgU2ltcGxlVHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIGZUeXBlID0gdHlwZTsKLSAgfQotCi0gIC8qKgotICAqIGlucHV0Rm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBUaGUgc2ltcGxlIGZvcm0gaXMganVzdCBhIHRleHQgaW5wdXQgYm94Ci0gICogQHBhcmFtIFN0cmluZyBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnB1dCBlbGVtZW50Ci0gICogQHJldHVybiBTdHJpbmcgVGhlIGZvcm0gdXNlZCB0byBjb2xsZWN0IHRoZSBkYXRhCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgaW5wdXRGb3JtKFN0cmluZyBuYW1lKQotICB7Ci0gICAgIFN0cmluZyBpbnB1dEZvcm0gPSAiPFREIEFMSUdOPVwibGVmdFwiPjxJTlBVVCBUWVBFPVwiVEVYVFwiIE5BTUU9XCIiIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICJcIiBTSVpFPTIwPjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGlucHV0Rm9ybTsKLSAgfQotCi0gICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGRpY3RhdGVzIGhvdyB5b3Ugd2FudCB0byBwcm9jZXNzIHRoZSAKLSAgKiBpbmNvbWluZyBzdHJpbmcgZnJvbSB0aGUgaW5wdXQganNwLiBZb3UgbWF5IG9yIG1heSBub3QgdXNlIHRoZSBtYXJrdXAgCi0gICogZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSB0eXBlLiBUaGUgc2ltcGxlIHR5cGVzIHVzZSBpdC4gRG9tRWxlbWVudCBkb2VzIG5vdAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBjb2RlIHRvIGJlIGdlbmVyYXRlZAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcXVlc3RDb2RlKFN0cmluZyBuYW1lLCBTdHJpbmcgaWQpCi0gIHsKLSAgICAgU3RyaW5nIHJlcXVlc3RDb2RlID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIiArIEdlbmVyYXRvci5TUEFDRSAKLSAgICAgCSAgICAgICAgICAgICAgICAgICArIGlkICsgIj0gIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiIgotICAgICAJICAgICAgICAgICAgICAgICAgICsgbmFtZSArIlwiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIHJlcXVlc3RDb2RlOwotICAgfQotIAotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRzIGJhY2sgdGhlIGNvZGUgcmVxdWlyZWQgdG8gZ28gZnJvbSB0aGUgCi0gICogc3RyaW5nIHRoZSB1c2VyIGVudGVyZWQgdG8gdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBlbGVtZW50Ci0gICogaXQgdXNlcyBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgYWxsIHN1YmNsYXNzZXMgb2YgU2ltcGxlVHlwZSBhcmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50Ci0gICogVGhlIFN0cmluZ1RvVHlwZSBmdW5jdGlvbgotICAqIEBwYXJhbSBTdHJpbmcgdHlwZU5hbWUgdGhpcyBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHR5cGUgaWUgaW50LGJvb2xlYW4KLSAgKiBAcGFyYW0gU3RyaW5nIG5vZGVOYW1lIFRoZSBub2RlTmFtZSBpcyBqdXN0IHRoZSBhdHRyaWJ1dGVuYW1lICsgVGVtcC4gCi0gICogQHBhcmFtIFN0cmluZyB0aGUgYXR0cmlidXRlTmFtZSAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGNvbnZlcnNpb24gPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIEdlbmVyYXRvci5TUEFDRSArIG5vZGVOYW1lIAotICAgICAJICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5TUEFDRSArICIgPSAiICsgU3RyaW5nVG9UeXBlKGF0dHJpYnV0ZU5hbWUpIAotICAgICAJICAgICAgICAgICAgICAgICArICIiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgKiBjb252ZXJ0cyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBwcm94eSAKLSAgKiBiYWNrIHRvIGEgc3RyaW5nIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHR5cGUgdG8gc3RyaW5nLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0KLSAgICBTdHJpbmcgY29udmVyc2lvbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLkpzcFV0aWxzLm1hcmt1cCgiICsgVHlwZVRvU3RyaW5nKG5hbWUpICsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLQotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLSAgIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBUeXBlVG9TdHJpbmcoU3RyaW5nIG5hbWUpOwotCi0gIC8qKgotICAqIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbmFtZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZlR5cGU7Ci0gIH0KLQotICAgcHVibGljIFN0cmluZyBnZXRVbmlxdWVOYW1lKCkKLSAgewotICAgIHJldHVybiBmVW5pcXVlTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVuaXF1ZU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmVW5pcXVlTmFtZSA9IG5hbWU7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RhdGVMZXNzQmVhblR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TdGF0ZUxlc3NCZWFuVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGY5ZDZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TdGF0ZUxlc3NCZWFuVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBTdGF0ZUxlc3NCZWFuVHlwZSBleHRlbmRzIFJlY29nbml6ZWRSZXR1cm5UeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgCi0gIHB1YmxpYyBTdGF0ZUxlc3NCZWFuVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlNUQVRFTEVTU19CRUFOKTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RyaW5nVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1N0cmluZ1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5OWM3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RyaW5nVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFN0cmluZ1R5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFN0cmluZ1R5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuU1RSSU5HX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gbmFtZSArICI7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsgICAgCi0gIH0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZVRvU3RyaW5nKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJTdHJpbmcudmFsdWVPZigiICsgbmFtZSArICIpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVHlwZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4MGQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVHlwZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUeXBlRWxlbWVudCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgSmF2YSBiZWFuIGZlYXR1cmVzIHRoYXQgaGF2ZSB0eXBlcy4KLSovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHlwZUVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9OX0lOU1RBTlRJQUJMRSA9ICJub25JbnN0YW50aWFibGUiOwotCi0gIHB1YmxpYyBzdGF0aWMgaW50IEJFQU4gPSAwOwotICBwdWJsaWMgc3RhdGljIGludCBTSU1QTEUgPSAxOwotICBwdWJsaWMgc3RhdGljIGludCBBUlJBWSA9IDI7Ci0KLSAgcHJpdmF0ZSBpbnQgZlR5cGU7Ci0gIHByb3RlY3RlZCBpbnQgZk93bmVyVHlwZTsKLSAgcHJpdmF0ZSBib29sZWFuIGZQcmltaXRpdmUgPSBmYWxzZTsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4gQXV0b21hdGljYWxseSBhZGRzIHRoaXMgb2JqZWN0IHRvIHRoZSBnaXZlbiBtb2RlbC4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdG8gb3duIHRoaXMgb2JqZWN0LgotICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb2JqZWN0LCBvbmUgb2YKLSAgKiA8Y29kZT5CRUFOPC9jb2RlPiwgPGNvZGU+U0lNUExFPC9jb2RlPiBvciA8Y29kZT5BUlJBWTwvY29kZT4uCi0gICovCi0gIHByb3RlY3RlZCBUeXBlRWxlbWVudCAoIFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgaW50IHR5cGUgKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgZlR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoqCi0gICovCi0gIHByb3RlY3RlZCBUeXBlRWxlbWVudCAoIFN0cmluZyBuYW1lLCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUsIFN0cmluZyBpbmJvdW5kUmVsTmFtZSwgaW50IHR5cGUgKQotICB7Ci0gICAgc3VwZXIobmFtZSxlbGVtZW50LG91dGJvdW5kUmVsTmFtZSxpbmJvdW5kUmVsTmFtZSk7Ci0gICAgZlR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoKLSAgKlRoaXMgd2lsbCB0ZWxsIHlvdSB3ZXRoZXIgdGhlIHR5cGUgaXMgYSBiZWFuCi0gICpAcGFyYW0gQm9vbGVhbiByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBiZWFuCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBpc0JlYW4oKQotICB7Ci0gICAgaWYgKGZUeXBlID09IEJFQU4pIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICpUaGlzIHdpbGwgdGVsbCB5b3Ugd2V0aGVyIHRoZSB0eXBlIGlzIGEgYmVhbgotICAqQHBhcmFtIEJvb2xlYW4gcmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYmVhbgotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQcmltaXRpdmUoKQotICB7Ci0gICAgcmV0dXJuIGZQcmltaXRpdmU7Ci0gIH0KLQotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIGJlYW4KLSAgKkBwYXJhbSBCb29sZWFuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGJlYW4KLSAgKiovCi0gIHByb3RlY3RlZCB2b2lkIHNldFByaW1pdGl2ZShib29sZWFuIHByaW0pCi0gIHsKLSAgICBmUHJpbWl0aXZlID0gcHJpbTsgCi0gIH0KLQotCi0gIC8qCi0gICogVGhpcyBpcyBtYWlubHkgbmVlZGVkIGZvciBhcnJheXMgYXMgd2l0aCBhbGwgdHlwZXMgdGhlCi0gICogbmFtZXMgY29tZSBvdXQgYXMgamF2YS51dGlsLnR5cGUsIGJ1dCB3aXRoIGFuIGFycmF5IGl0IAotICAqIGlzbnQgZXhwbGljaXQgaW4gdGVsbGluZyB1cyBpdHMgYW4gYXJyYXkKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci0gIAotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIHNpbXBsZQotICAqQHBhcmFtIEJvb2xlYW4gcmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgc2ltcGxlCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBpc1NpbXBsZSgpCi0gIHsKLSAgICBpZiAoZlR5cGUgPT0gU0lNUExFKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIGFycmF5Ci0gICpAcGFyYW0gQm9vbGVhbiByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhcnJheQotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gaXNBcnJheSgpCi0gIHsKLSAgICBpZiAoZlR5cGUgPT0gQVJSQVkpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9BVFRSSUJVVEVTID0gImF0dHJpYnV0ZXMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfRklFTERTID0gImZpZWxkcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9UWVBFID0gInR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfT1dORVIgPSAib3duZXIiOwotCi0gIHB1YmxpYyBzdGF0aWMgaW50IFBBUkFNRVRFUl9PV05FUiA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IEFUVFJJQlVURV9PV05FUiA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IEZJRUxEX09XTkVSID0gMjsKLSAgcHVibGljIHN0YXRpYyBpbnQgUk9PVCA9IDM7Ci0KLSAgLyoKLSAgKiBUaGlzIGNvdWxkIGJlIFRoZSByb290IHRlc3QgYmVhbgotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgcm9vdCBiZWFuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzUm9vdCgpCi0gIHsKLSAgICBpZihmT3duZXJUeXBlID09IFJPT1QpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBUeXBlIGNvdWxkIGJlIG93bmVkIGJ5IGEgUGFyYW1ldGVyIG9yIGFuIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgb3duZWQgYnkgYSBwYXJhbWV0ZXIKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPd25lclBhcmFtZXRlcigpCi0gIHsKLSAgICBpZihmT3duZXJUeXBlID09IFBBUkFNRVRFUl9PV05FUikgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoKLSAgKiBUaGlzIFR5cGUgY291bGQgYmUgb3duZWQgYnkgYSBQYXJhbWV0ZXIgb3IgYW4gYXR0cmlidXRlCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhpcyBpcyBvd25lZCBieSBhbiBhdHRyaWJ1dGUgCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzT3duZXJBdHRyaWJ1dGUoKQotICB7Ci0gICAgaWYoZk93bmVyVHlwZSA9PSBBVFRSSUJVVEVfT1dORVIpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBUeXBlIGNvdWxkIGJlIG93bmVkIGJ5IGEgUGFyYW1ldGVyIG9yIGFuIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgb3duZWQgYnkgYW4gYXR0cmlidXRlIAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc093bmVyRmllbGQoKQotICB7Ci0gICAgaWYoZk93bmVyVHlwZSA9PSBGSUVMRF9PV05FUikgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBUeXBlIG1heSBiZSBvd25lZCBieSBhIHBhcmFtZXRlciBvciBhbiBhdHRyaWJ1dGUgCi0gICogVXNlIHRoaXMgbWV0aG9kIGluIGNvbmp1bmN0aW9uIHdpdGggaXNPd25lclBhcmFtdGVyLCBpc093bmVyCi0gICogQHJldHVybiBCYXNpY0VsZW1lbnQgdGhlIGVsZW1lbnQgdGhhdCBvd25zIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgQmFzaWNFbGVtZW50IGdldE93bmluZ0VsZW1lbnQgKCkKLSAgewotICAgIGlmIChpc093bmVyUGFyYW1ldGVyKCkpewotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9PV05FUik7Ci0gICAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCYXNpY0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgICB9Ci0gICAgZWxzZSBpZihpc093bmVyQXR0cmlidXRlKCkpewotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9PV05FUik7Ci0gICAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCYXNpY0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgICB9Ci0gICAgZWxzZSBpZihpc093bmVyRmllbGQoKSl7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoUkVMX09XTkVSKTsKLSAgICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKEJhc2ljRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9UeXBlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZWQ2MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI2ICAgMTQ1Njc2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwODIzCSAgMTQ1NjQzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotLyoqCi0gKiBUeXBlRmFjdG9yeQotICogQ3JlYXRpb24gZGF0ZTogKDQvMTAvMjAwMSAxMjo0MTo0OCBQTSkKLSAqIEBhdXRob3I6IEdpbGJlcnQgQW5kcmV3cwotICovCi1wdWJsaWMgY2xhc3MgVHlwZUZhY3RvcnkgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUkxfTkFNRSAgICAgICAgICAgICAgICAgICA9ICJqYXZhLm5ldC5VUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfTkFNRSAgICAgICAgICAgICAgID0gImphdmEubGFuZy5TdHJpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSUdfREVDSU1BTF9OQU1FICAgICAgICAgID0gImphdmEubWF0aC5CaWdEZWNpbWFsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklHX0lOVEVHRVJfTkFNRSAgICAgICAgICA9ICJqYXZhLm1hdGguQmlnSW50ZWdlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEVfTkFNRSAgICAgICAgICAgICAgICAgPSAiamF2YS51dGlsLkRhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHUkVHT1JJQU5fQ0FMRU5EQVJfTkFNRSA9ICJqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQUxFTkRBUl9OQU1FICAgICAgICAgICAgID0gImphdmEudXRpbC5DYWxlbmRhciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJPT0xFQU5fTkFNRSAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkJvb2xlYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCWVRFX05BTUUgICAgICAgICAgICAgICAgICA9ICJqYXZhLmxhbmcuQnl0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPVUJMRV9OQU1FICAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkRvdWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMT0FUX05BTUUgICAgICAgICAgICAgICAgID0gImphdmEubGFuZy5GbG9hdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVHRVJfTkFNRSAgICAgICAgICAgICAgID0gImphdmEubGFuZy5JbnRlZ2VyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9OR19OQU1FICAgICAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkxvbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSE9SVF9OQU1FICAgICAgICAgICAgICAgICA9ICJqYXZhLmxhbmcuU2hvcnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDSEFSQUNURVJfTkFNRSAgICAgICAgICAgID0gImphdmEubGFuZy5DaGFyYWN0ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfTkFNRQkJCSAgID0gImphdmEubGFuZy5PYmplY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0JPT0xFQU5fTkFNRSAgICAgICAgID0gImJvb2xlYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0JZVEVfTkFNRSAgICAgICAgICAgID0gImJ5dGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0RPVUJMRV9OQU1FICAgICAgICAgID0gImRvdWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fRkxPQVRfTkFNRSAgICAgICAgICAgPSAiZmxvYXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0lOVEVHRVJfTkFNRSAgICAgICAgID0gImludCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fTE9OR19OQU1FICAgICAgICAgICAgPSAibG9uZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fU0hPUlRfTkFNRSAgICAgICAgICAgPSAic2hvcnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0NIQVJfTkFNRSAgICAgICAgICAgID0gImNoYXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWT0lEX05BTUUgICAgICAgICAgICAgICAgICA9ICJ2b2lkIjsKLQotICAvL3NvbWUgc3BlY2lhbCBjb21wbGV4Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPTV9FTEVNRU5UX05BTUUgICA9ICJvcmcudzNjLmRvbS5FbGVtZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNRU5UX05BTUUgPSAiamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFURUxFU1NfQkVBTiA9IEJlYW5FbGVtZW50LlNUQVRFTEVTU19CRUFOOwotCi0KLQotICBwdWJsaWMgc3RhdGljIEhhc2h0YWJsZSBqYXZhVHlwZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIAotICBwdWJsaWMgVHlwZUZhY3RvcnkoKXt9Ci0KLSAgc3RhdGljewotICAgIGphdmFUeXBlcy5wdXQoQk9PTEVBTl9OQU1FLG5ldyBQcmltaXRpdmVKYXZhVHlwZXMoQk9PTEVBTl9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChCWVRFX05BTUUsICAgbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhCWVRFX05BTUUpKTsKLSAgICBqYXZhVHlwZXMucHV0KERPVUJMRV9OQU1FLCBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKERPVUJMRV9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChGTE9BVF9OQU1FLCAgbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhGTE9BVF9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChJTlRFR0VSX05BTUUsbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhJTlRFR0VSX05BTUUpKTsKLSAgICBqYXZhVHlwZXMucHV0KExPTkdfTkFNRSwgICBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKExPTkdfTkFNRSkpOwotICAgIGphdmFUeXBlcy5wdXQoU0hPUlRfTkFNRSwgIG5ldyBQcmltaXRpdmVKYXZhVHlwZXMoU0hPUlRfTkFNRSkpOwotICAgIGphdmFUeXBlcy5wdXQoQ0hBUkFDVEVSX05BTUUsICBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKENIQVJBQ1RFUl9OQU1FKSk7Ci0gIH0KLQotCi0gIC8qCi0gICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdXMgdG8gaGFuZGxlIHJlY29nbml6ZWQgYmVhbnMgCi0gICogaW4gZGlzcGxheWluZyBhbmQgZ2VuZXJhdGluZyBjb2RlIGZvciB0aGVtIGluc3RlYWQgb2YgCi0gICogdHJlYXRpbmcgdGhlbSBhcyBjb21wbGV4IHR5cGVzCi0gICovIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVjb2duaXplZEJlYW4oU3RyaW5nIHR5cGUpCi0gIHsKLQotICAgIC8vICAgICAKLSAgICAvL2N1cnJlbnQgcmVjb2duaXplZCBiZWFucyAobW9zdGx5IGphdmEubGFuZykKLSAgICBpZiAodHlwZS5lcXVhbHMoQk9PTEVBTl9OQU1FKSAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhCWVRFX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoRE9VQkxFX05BTUUpICAgICAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKEZMT0FUX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoSU5URUdFUl9OQU1FKSAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhMT05HX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoU0hPUlRfTkFNRSkgICAgICAgICAgICAgIHx8ICAgICAgCi0gICAgICAgIHR5cGUuZXF1YWxzKENIQVJBQ1RFUl9OQU1FKSAgICAgICAgICB8fCAgICAgIAotICAgICAgICB0eXBlLmVxdWFscyhET01fRUxFTUVOVF9OQU1FKSAgICAgICAgfHwgICAgICAKLQkgICAgdHlwZS5lcXVhbHMoU09BUF9FTEVNRU5UX05BTUUpICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhCSUdfREVDSU1BTF9OQU1FKSAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKEJJR19JTlRFR0VSX05BTUUpICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoREFURV9OQU1FKSAgICAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhHUkVHT1JJQU5fQ0FMRU5EQVJfTkFNRSkgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoQ0FMRU5EQVJfTkFNRSkgICAgICAgICAgIHx8IAotICAgICAgICB0eXBlLmVxdWFscyhVUkxfTkFNRSkgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKE9CSkVDVF9OQU1FKQkJCSB8fAotICAgICAgICB0eXBlLmVxdWFscyhTVFJJTkdfTkFNRSkpICByZXR1cm4gdHJ1ZTsgICAgICAKLSAgICAgcmV0dXJuIGZhbHNlOyAKLSAgCi0gIH0KLQotICAvKgotICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIGhhbmRsZSB1bnN1cHBvcnRlZCB0eXBlcyAKLSAgKiBpZiB3ZSBkb250IHdhbnQgdG8gc3VwcG9ydCBhIHR5cGUgYW5kIHdlIHdhbnQgdG8gb21pdHQgdGhpcyAgCi0gICogbWV0aG9kIGZyb20gdGhlIHNhbXBsZXMKLSAgKiBAcGFyYW0gamF2YUhlbHBlcnMgdGhpcyBpcyB0aGUgdHlwZSB0byBiZSBldmFsdWF0ZWQKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkCi0gICovIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNVblN1cHBvcnRlZFR5cGUoSmF2YUhlbHBlcnMgamF2YUhlbHBlcnMpCi0gIHsKLSAgICAvL3dlIGFsc28gZG9udCBzdXBwb3J0IGFycmF5cwotCS8vamF2YS5sYW5nLk9iamVjdHMgYXJlIG9rIGZvciByZXR1cm4gdHlwZXMgYnV0IG5vdCBmb3IgaW5wdXQgdHlwZQotICAgIGlmIChqYXZhSGVscGVycy5pc0FycmF5KCl8fAotICAgIAkJamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoTUFQX05BTUUpfHwKLSAgICAJCWphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKFZFQ1RPUl9OQU1FKXx8Ci0gICAgCQlqYXZhSGVscGVycy5nZXRKYXZhTmFtZSgpLmVxdWFscyhEQVRBX0hBTkRMRVIpfHwKLSAgICAJCWphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKE9CSkVDVF9OQU1FKSB8fAotICAgIAkJamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5jbGFzcyIpCSkgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgSEFTSFRBQkxFX05BTUUgPSAiamF2YS51dGlsLkhhc2h0YWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1BUF9OQU1FID0gImphdmEudXRpbC5NYXAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBWRUNUT1JfTkFNRSA9ICJqYXZhLnV0aWwuVmVjdG9yIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQVJSQVlfTkFNRSA9IEFycmF5RWxlbWVudC5BUlJBWV9OQU1FOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUklNSVRJVkVfQVJSQVlfTkFNRSA9ICJwcmltaXRpdmVhcnJheSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIERBVEFfSEFORExFUiA9ICJqYXZheC5hY3RpdmF0aW9uLkRhdGFIYW5kbGVyIjsKLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSZWNvZ25pemVkUmV0dXJuVHlwZShKYXZhSGVscGVycyBqYXZhSGVscGVycykKLSAgewotICAgIC8vYXJyYXlzIAotICAgIC8vSGFzaHRhYmxlCi0gICAgLy9WZWN0b3JzCi0JLy9qYXZhLmxhbmcuT2JqZWN0cyBhcmUgb2sgZm9yIHJldHVybiB0eXBlcwotICAgIGlmIChqYXZhSGVscGVycy5pc0FycmF5KCkpIHJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKGphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKEhBU0hUQUJMRV9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIGlmIChqYXZhSGVscGVycy5nZXRKYXZhTmFtZSgpLmVxdWFscyhWRUNUT1JfTkFNRSkpcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAoamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoTUFQX05BTUUpKXJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKGphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKE9CSkVDVF9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JlY29nbml6ZWRSZXR1cm5UeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgLy9hcnJheXMgCi0gICAgLy9IYXNodGFibGUKLSAgICAvL1ZlY3RvcnMKLQkvL2phdmEubGFuZy5PYmplY3RzIGFyZSBvayBmb3IgcmV0dXJuIHR5cGVzCi0gICAgaWYgKHR5cGUuc3RhcnRzV2l0aChBUlJBWV9OQU1FKSkgcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoSEFTSFRBQkxFX05BTUUpKXJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKFZFQ1RPUl9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhNQVBfTkFNRSkpcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoT0JKRUNUX05BTUUpKSByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N0YXRlTGVzc0JlYW4oU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBpZih0eXBlLnN0YXJ0c1dpdGgoU1RBVEVMRVNTX0JFQU4pKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotCi0gIC8qKgotICAqIENyZWF0ZXMgYSB0eXBlIGJhc2VkIG9uIHRoZSBKYXZhSGVscGVyIHRoZW4gc2V0cyB0aGlzIHR5cGUgaW4gdGhlIGVsZW1lbnQKLSAgKiBAcGFyYW1zIEphdmFIZWxwZXJzIHRoaXMgaG9sZHMgdGhlIHR5cGUKLSAgKiBAcGFyYW0gVHlwZUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBob2xkIHRoZSB0eXBlIGNyZWF0ZWQKLSAgKiBAcGFyYW0gU3RyaW5nIFVuaXF1ZW5hbWUgdG8gYmUgdXNlZCB3aGVuIG5hbWluZyB0ZW1wIHZhcmlhYmxlcwotICAqLwotIAotICBwdWJsaWMgc3RhdGljIERhdGFUeXBlIGNyZWF0ZVR5cGUoU3RyaW5nIHR5cGUsIFN0cmluZyBVbmlxdWVOYW1lKQotICB7Ci0gICAgLy90aGlzIGd1eSBtaWdodCBiZSBib3RoIHN0YXRlbGVzcyBhbmQgb25lIG9mIHRoZSBiZWxvdyBlbGVtZW50cwotICAgIC8vd2Ugd291bGQgbGlrZSB0byBiZSBhcyBzcGVjaWZpYyBhcyB3ZSBjYW4sIHN0YXRlbGVzcyBpcyB0aGUgd29yc3QgY2FzZSAKLSAgICBib29sZWFuIHN0YXRlbGVzcyA9IGZhbHNlOyAgCi0gICAgaWYodHlwZS5zdGFydHNXaXRoKFNUQVRFTEVTU19CRUFOKSkgewotICAgICAgc3RhdGVsZXNzID0gdHJ1ZTsKLSAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cmluZygyOSk7IAotICAgIH0KLSAgIAotICAgIERhdGFUeXBlIGRhdGF0eXBlID0gbnVsbDsKLSAgICBpZiAgICAgICh0eXBlLmVxdWFscyhQUklNX0JPT0xFQU5fTkFNRSkpIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUJvb2xlYW5UeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoUFJJTV9CWVRFX05BTUUpKSAgICAgZGF0YXR5cGUgPSBuZXcgUHJpbWl0aXZlQnl0ZVR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0RPVUJMRV9OQU1FKSkgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZURvdWJsZVR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0ZMT0FUX05BTUUpKSAgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUZsb2F0VHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKFBSSU1fTE9OR19OQU1FKSkgICAgZGF0YXR5cGUgPSBuZXcgUHJpbWl0aXZlTG9uZ1R5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0lOVEVHRVJfTkFNRSkpIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUludFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0NIQVJfTkFNRSkpICAgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUNoYXJUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoUFJJTV9TSE9SVF9OQU1FKSkgICBkYXRhdHlwZSA9IG5ldyBQcmltaXRpdmVTaG9ydFR5cGUoKTsKLSAgICAKLQotICAgIC8vc2VlIGlmIHRoaXMgY3JpdHRlciBpcyBhIGphdmF0eXBlCi0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoQk9PTEVBTl9OQU1FKSAgICAgfHwKLSAgICAgICAgICAgIHR5cGUuZXF1YWxzKEJZVEVfTkFNRSkgICAgICAgIHx8Ci0gICAgICAgICAgICB0eXBlLmVxdWFscyhET1VCTEVfTkFNRSkgICAgICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoRkxPQVRfTkFNRSkgICAgICAgfHwKLSAgICAgICAgICAgIHR5cGUuZXF1YWxzKElOVEVHRVJfTkFNRSkgICAgIHx8Ci0gICAgICAgICAgICB0eXBlLmVxdWFscyhMT05HX05BTUUpICAgICAgICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoQ0hBUkFDVEVSX05BTUUpICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoU0hPUlRfTkFNRSkpICAgICAgICBkYXRhdHlwZSA9IChEYXRhVHlwZSlqYXZhVHlwZXMuZ2V0KHR5cGUpOyAgIAotCi0gICAgLy9zZWUgaWYgaXRzIGEgY2FzZSB3ZSBoYW5kbGUKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhTVFJJTkdfTkFNRSkpICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgU3RyaW5nVHlwZSgpOyAKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhWT0lEX05BTUUpKSAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgVm9pZFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhET01fRUxFTUVOVF9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgRG9tRWxlbWVudFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhTT0FQX0VMRU1FTlRfTkFNRSkpICAgICAgICAgZGF0YXR5cGUgPSBuZXcgU09BUEVsZW1lbnRUeXBlKCk7ICAKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhCSUdfREVDSU1BTF9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgQmlnRGVjaW1hbFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhCSUdfSU5URUdFUl9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgQmlnSW50ZWdlclR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhEQVRFX05BTUUpKSAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gbmV3IERhdGVUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoVVJMX05BTUUpKSAgICAgICAgICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBVUkxUeXBlKCk7IAotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKEdSRUdPUklBTl9DQUxFTkRBUl9OQU1FKSkgIGRhdGF0eXBlID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyVHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKENBTEVOREFSX05BTUUpKSAgZGF0YXR5cGUgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXJUeXBlKCk7Ci0KLSAgICAvL2l0IGNvdWxkIGJlIGEgcmV0dXJuIHR5cGUgd2Ugc3VwcG9ydAotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKEhBU0hUQUJMRV9OQU1FKSkgICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBIYXNodGFibGVUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoVkVDVE9SX05BTUUpKSAgICAgICAgICAgICAgIGRhdGF0eXBlID0gbmV3IFZlY3RvclR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhNQVBfTkFNRSkpICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgTWFwVHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKE9CSkVDVF9OQU1FKSkJCQkJZGF0YXR5cGUgPSBuZXcgT2JqZWN0VHlwZSgpOwotCi0gICAgLy8gbmVlZCB0byBzZWUgaWYgaXQgaXMgYW4gb2JqZWN0IGFycmF5Ci0gICAgLy9vciBhIHByaW1pdGl2ZQotICAgIGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aChBUlJBWV9OQU1FKSl7ICAgICAgICAgICAgICAKLSAgICAJU3RyaW5nIG5hbWUgPSB0eXBlLnN1YnN0cmluZygyMSk7IAotICAgICAgICBpZihuYW1lLnN0YXJ0c1dpdGgoUFJJTV9CT09MRUFOX05BTUUpIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fQllURV9OQU1FKSAgICAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9ET1VCTEVfTkFNRSkgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fRkxPQVRfTkFNRSkgICAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9MT05HX05BTUUpICAgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fSU5URUdFUl9OQU1FKSAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9DSEFSX05BTUUpICAgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fU0hPUlRfTkFNRSkpCi0gICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBQcmltaXRpdmVBcnJheVR5cGUobmFtZSk7ICAKLSAgICAgICAgZWxzZQotICAgICAgICAJZGF0YXR5cGUgPSBuZXcgQXJyYXlUeXBlKG5hbWUpOwotCi0gICAgfQotICAgIGVsc2UgaWYgKHN0YXRlbGVzcyl7Ci0gICAgICAgIGRhdGF0eXBlID0gbmV3IFN0YXRlTGVzc0JlYW5UeXBlKHR5cGUpOwotCi0gICAgfQotCi0KLSAgICBkYXRhdHlwZS5zZXRVbmlxdWVOYW1lKFVuaXF1ZU5hbWUpOwotICAgIHJldHVybiBkYXRhdHlwZTsKLSAgICAgCi0gIH0KLSAgCi0gIAotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9VUkxUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVVJMVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzBmYjI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9VUkxUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgVVJMVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgVVJMVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5VUkxfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAibmV3IGphdmEubmV0LlVSTCgiICsgbmFtZSArICIpOyI7Ci0gICAgcmV0dXJuIGNvbnZlcnNpb247ICAgIAotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZlY3RvclR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9WZWN0b3JUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDcxOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZlY3RvclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHJlY29nbml6ZWQgcmV0dXJuIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFZlY3RvclR5cGUgZXh0ZW5kcyBSZWNvZ25pemVkUmV0dXJuVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFZlY3RvclR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuVkVDVE9SX05BTUUpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9Wb2lkVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZvaWRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZGU5MWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZvaWRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBWb2lkVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBWb2lkVHlwZSgpCi0gIHsKLSAgICBzdXBlcigidm9pZCIpOwotICB9Ci0KLSAgIC8qKgotICAqIGZvciBhIHZvaWQgdGhlcmUgaXMgbm8gbmVlZCB0byByZXR1cm4gCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiU3RyaW5nLnZhbHVlT2YoIiArIG5hbWUgKyAiKSI7Ci0gIH0KLSAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvdmFsaWRhdGUvVmFsaWRhdGlvbk1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3ZhbGlkYXRlL1ZhbGlkYXRpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMDEyOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvdmFsaWRhdGUvVmFsaWRhdGlvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci0KLS8qKgotICAqIFRoaXMgY2xhc3MgbWFuYWdlcyB0aGUgdmFsaWRhdGlvbiBzdGF0ZSBvZiBwcm9qZWN0cyB0aGF0IHNvbWUgdGFza3MgbWF5IHdhbnQKLSAgKiB0byBkaXNhYmxlLiAgVGhlIG1hbmFnZXIgY2FuIHRoZW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSB2YWxpZGF0aW9uIHN0YXRlLgotKiovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbk1hbmFnZXIKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgICAqIFRoaXMgc2V0IGNvbnRhaW5zIGEgc2V0IG9mIElQcm9qZWN0cyB0aGF0IG5lZWQgdG8gYmUgdmFsaWRhdGVkLgotICAqKi8KLSAgcHJpdmF0ZSBIYXNoU2V0IHByb2plY3RzID0gbnVsbDsgICAgICAgICAgICAgIAotCi0gIC8qKgotICAgICogVGhpcyBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGoyZWUgdmFsaWRhdG9yLgotICAqKi8KLSAgLy9wZ20gcHJpdmF0ZSBWYWxpZGF0b3JNYW5hZ2VyIGoyZWVNYW5hZ2VyID0gbnVsbDsKLQotICAvKioKLSAgICAqIFRoaXMgYm9vbGVhbiBjb250YWlucyB0aGUgYXV0byBidWlsZCBzZXR0aW5nIHVuZGVyIHByZWZlcnJlbmNlCi0gICoqLwotICBwcml2YXRlIGJvb2xlYW4gaXNBdXRvQnVpbGRfOwotICBwcml2YXRlIGJvb2xlYW4gYXV0b0J1aWxkRGlzYWJsZWRfOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWFuYWdlcigpCi0gIHsKLSAgICBwcm9qZWN0cyAgICA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgLy9wZ20gajJlZU1hbmFnZXIgPSBWYWxpZGF0b3JNYW5hZ2VyLmdldE1hbmFnZXIoKTsKLSAgICBzZXRBdXRvQnVpbGRQcmVmZXJlbmNlKCk7Ci0gICAgYXV0b0J1aWxkRGlzYWJsZWRfID0gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogRGlzYWJsZXMgdGhlIHZhbGlkYXRpb24gZm9yIGEgcHJvamVjdCBpZiByZXF1aXJlZC4KLSAgKiovCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVWYWxpZGF0aW9uRm9yUHJvamVjdCggSVByb2plY3QgcHJvamVjdCApCi0gIHsgICAgCi0gICAgLy8gV2UgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgcHJvamVjdCBuZWVkcyBoYXZlIHZhbGlkYXRpb24gdHVybmVkIGJhY2sgb24uCi0gICAgcHJvamVjdHMuYWRkKCBwcm9qZWN0ICk7Ci0gICAgCi0gICAgLy9wZ20gajJlZU1hbmFnZXIuc3VzcGVuZEFsbFZhbGlkYXRpb24oIHRydWUgKTsKLSAgfQotCi0gIC8qKgotICAgICogUmVzdG9yZXMgdGhlIHZhbGlkYXRpb24gc3RhdGUgZm9yIGFsbCBuZWVkZWQgcHJvamVjdHMuCi0gICoqLwotICBwdWJsaWMgdm9pZCByZXN0b3JlVmFsaWRhdGlvbkZvclByb2plY3RzKCBib29sZWFuIHJ1blZhbGlkYXRpb24gKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtb2RpZnlBdXRvQnVpbGQoYm9vbGVhbiBpc0F1dG9CdWlsZCkgewotICAgIHRyeSB7Ci0gICAgICBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICAgIElXb3Jrc3BhY2VEZXNjcmlwdGlvbiB3b3Jrc3BhY2VEZXNjID0gd29ya3NwYWNlLmdldERlc2NyaXB0aW9uKCk7Ci0gICAgICB3b3Jrc3BhY2VEZXNjLnNldEF1dG9CdWlsZGluZyhpc0F1dG9CdWlsZCk7Ci0gICAgICB3b3Jrc3BhY2Uuc2V0RGVzY3JpcHRpb24od29ya3NwYWNlRGVzYyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVBdXRvQnVpbGQoKSB7Ci0gICAgaWYgKCFhdXRvQnVpbGREaXNhYmxlZF8pIHsKLSAgICAgIHNldEF1dG9CdWlsZFByZWZlcmVuY2UoKTsKLSAgICAgIG1vZGlmeUF1dG9CdWlsZChmYWxzZSk7Ci0gICAgICBhdXRvQnVpbGREaXNhYmxlZF8gPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVBdXRvQnVpbGQoKSB7Ci0gICAgaWYgKGF1dG9CdWlsZERpc2FibGVkXykgewotICAgICAgbW9kaWZ5QXV0b0J1aWxkKGdldEF1dG9CdWlsZFByZWZlcmVuY2UoKSk7Ci0gICAgICBhdXRvQnVpbGREaXNhYmxlZF8gPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRBdXRvQnVpbGRQcmVmZXJlbmNlKCkgewotICAgIGlzQXV0b0J1aWxkXyA9IGdldFdvcmtzcGFjZUF1dG9CdWlsZFByZWZlcmVuY2UoKTsKLSAgICByZXR1cm4gaXNBdXRvQnVpbGRfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0J1aWxkUHJlZmVyZW5jZSgpIHsKLSAgICByZXR1cm4gaXNBdXRvQnVpbGRfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0V29ya3NwYWNlQXV0b0J1aWxkUHJlZmVyZW5jZSgpIHsKLSAgICBJV29ya3NwYWNlRGVzY3JpcHRpb24gd29ya3NwYWNlRGVzYyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXREZXNjcmlwdGlvbigpOwotICAgIHJldHVybiB3b3Jrc3BhY2VEZXNjLmlzQXV0b0J1aWxkaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL0JpbmRpbmdFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvQmluZGluZ0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FiMWEyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvQmluZGluZ0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX1BPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9PUEVSQVRJT05TID0gIm9wZXJhdGlvbnMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfUE9SVF9UWVBFID0gInBvcnR0eXBlIjsKLSAgCi0gIHB1YmxpYyBCaW5kaW5nRWxlbWVudCAoUG9ydEVsZW1lbnQgcG9ydEVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHBvcnRFbGVtZW50LFJFTF9QT1JULFBvcnRFbGVtZW50LlJFTF9CSU5ESU5HKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQb3J0KCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfUE9SVCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9QT1JUX1RZUEUpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldE9wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9PUEVSQVRJT05TKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZPcGVyYXRpb25zKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9PUEVSQVRJT05TKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvRGVmaW5pdGlvbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9EZWZpbml0aW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDU0YzIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9EZWZpbml0aW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC53c2RsbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIERlZmluaXRpb25FbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfU0VSVklDRVMgPSAic2VydmljZXMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfV1NETCA9ICJ3c2RsIjsKLSAgCi0gIHB1YmxpYyBEZWZpbml0aW9uRWxlbWVudCAoV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHdzZGxFbGVtZW50LFJFTF9XU0RMLFdTRExFbGVtZW50LlJFTF9ERUZJTklUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0V1NETCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1dTREwpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFNlcnZpY2VzKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZlNlcnZpY2VzKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9TRVJWSUNFUyk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL01lc3NhZ2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvTWVzc2FnZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJlMjc4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvTWVzc2FnZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfUEFSVFMgPSAicGFydHMiOwotICAKLSAgcHVibGljIE1lc3NhZ2VFbGVtZW50IChPcGVyYXRpb25FbGVtZW50IG9wZXJhdGlvbkVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLG9wZXJhdGlvbkVsZW1lbnQsUkVMX09QRVJBVElPTixPcGVyYXRpb25FbGVtZW50LlJFTF9NRVNTQUdFUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfT1BFUkFUSU9OKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1BBUlRTKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfUEFSVFMpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9PcGVyYXRpb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvT3BlcmF0aW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDg5YzJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9PcGVyYXRpb25FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgT3BlcmF0aW9uRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9NRVNTQUdFUyA9ICJtZXNzYWdlcyI7Ci0KLSAgcHVibGljIE9wZXJhdGlvbkVsZW1lbnQgKEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxiaW5kaW5nRWxlbWVudCxSRUxfQklORElORyxCaW5kaW5nRWxlbWVudC5SRUxfT1BFUkFUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX0JJTkRJTkcpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfTUVTU0FHRVMpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZk1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9NRVNTQUdFUyk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BhcnRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUGFydEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0MDBkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUGFydEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBQYXJ0RWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gICAgCi0gIHB1YmxpYyBQYXJ0RWxlbWVudCAoTWVzc2FnZUVsZW1lbnQgbWVzc2FnZUVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1lc3NhZ2VFbGVtZW50LFJFTF9NRVNTQUdFLE1lc3NhZ2VFbGVtZW50LlJFTF9QQVJUUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX01FU1NBR0UpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9Qb3J0RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YmRhOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgUG9ydEVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9CSU5ESU5HID0gImJpbmRpbmciOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfU0VSVklDRSA9ICJzZXJ2aWNlIjsKLSAgCi0gIHB1YmxpYyBQb3J0RWxlbWVudCAoU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHNlcnZpY2VFbGVtZW50LFJFTF9TRVJWSUNFLFNlcnZpY2VFbGVtZW50LlJFTF9QT1JUUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1NFUlZJQ0UpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9CSU5ESU5HKTsKLSAgfQotIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUG9ydFR5cGVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUG9ydFR5cGVFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZDE1NjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRUeXBlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC53c2RsbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFBvcnRUeXBlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIAotICBwdWJsaWMgUG9ydFR5cGVFbGVtZW50IChCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYmluZGluZ0VsZW1lbnQsUkVMX0JJTkRJTkcsQmluZGluZ0VsZW1lbnQuUkVMX1BPUlRfVFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX0JJTkRJTkcpOwotICB9Ci0KLSAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1NlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5MWQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX1BPUlRTID0gInBvcnRzIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0RFRklOSVRJT04gPSAiZGVmaW5pdGlvbiI7Ci0gIAotICBwdWJsaWMgU2VydmljZUVsZW1lbnQgKERlZmluaXRpb25FbGVtZW50IGRlZmluaXRpb25FbGVtZW50LFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxkZWZpbml0aW9uRWxlbWVudCxSRUxfREVGSU5JVElPTixEZWZpbml0aW9uRWxlbWVudC5SRUxfU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9ERUZJTklUSU9OKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQb3J0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1BPUlRTKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZQb3J0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfUE9SVFMpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9TdHViYmVkV1NETE1vZGVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU3R1YmJlZFdTRExNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjhmYTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9TdHViYmVkV1NETE1vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBTdHViYmVkV1NETE1vZGVsCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwcm90ZWN0ZWQgTW9kZWwgZk1vZGVsOwotICBwdWJsaWMgU3R1YmJlZFdTRExNb2RlbCgpCi0gIHsKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudCgiV1NETEZpbGVzIik7Ci0gICAgZk1vZGVsID0gd3NkbEVsZW1lbnQuZ2V0TW9kZWwoKTsgICAKLSAgfQotCi0gIHB1YmxpYyBNb2RlbCBnZXRXU0RMTW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIGZNb2RlbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKQotICB7Ci0gICAgRGVmaW5pdGlvbkVsZW1lbnQgZGVmMSA9IG5ldyBEZWZpbml0aW9uRWxlbWVudCgoV1NETEVsZW1lbnQpZk1vZGVsLmdldFJvb3RFbGVtZW50KCksIlN0b2NrUXVvdGUiKTsgCi0gICAgU2VydmljZUVsZW1lbnQgc2VyMSA9IG5ldyBTZXJ2aWNlRWxlbWVudChkZWYxLCJnZXRRdW90ZSIpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcjIgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMSwic2V0UXVvdGUiKTsKLSAgICBQb3J0RWxlbWVudCBwb3J0MSA9IG5ldyBQb3J0RWxlbWVudChzZXIxLCJwb3J0MSIpOwotICAgIFBvcnRFbGVtZW50IHBvcnQyID0gbmV3IFBvcnRFbGVtZW50KHNlcjEsInBvcnQyIik7Ci0gICAgUG9ydEVsZW1lbnQgcG9ydDMgPSBuZXcgUG9ydEVsZW1lbnQoc2VyMiwicG9ydDEiKTsKLSAgICBQb3J0RWxlbWVudCBwb3J0NCA9IG5ldyBQb3J0RWxlbWVudChzZXIyLCJwb3J0MiIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQxID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQxLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQyID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQyLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQzID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQzLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQ0ID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQ0LCJiaW5kMSIpOwotICAgIE9wZXJhdGlvbkVsZW1lbnQgb3AxID0gbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDEsIm9wMSIpOwotICAgIG5ldyBPcGVyYXRpb25FbGVtZW50KGJpbmQyLCJvcDEiKTsKLSAgICBuZXcgT3BlcmF0aW9uRWxlbWVudChiaW5kMywib3AxIik7Ci0gICAgbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDQsIm9wMSIpOwotICAgIE1lc3NhZ2VFbGVtZW50IG1lMSA9IG5ldyBNZXNzYWdlRWxlbWVudChvcDEsIm1lMSIpOwotICAgIE1lc3NhZ2VFbGVtZW50IG1lMiA9IG5ldyBNZXNzYWdlRWxlbWVudChvcDEsIm1lMiIpOwotICAgIG5ldyBQYXJ0RWxlbWVudChtZTEsInBlMSIpOwotICAgIG5ldyBQYXJ0RWxlbWVudChtZTIsInBlMiIpOwotCi0gICAgRGVmaW5pdGlvbkVsZW1lbnQgZGVmMiA9IG5ldyBEZWZpbml0aW9uRWxlbWVudCgoV1NETEVsZW1lbnQpZk1vZGVsLmdldFJvb3RFbGVtZW50KCksIlRlbXBDb252ZXJzaW9uIik7IAotICAgIFNlcnZpY2VFbGVtZW50IHNlcjMgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMiwiZ2V0VGVtcCIpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcjQgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMiwic2V0VGVtcCIpOwotICAgIFBvcnRFbGVtZW50IHBvcnQ1ID0gbmV3IFBvcnRFbGVtZW50KHNlcjMsInBvcnQxIik7Ci0gICAgUG9ydEVsZW1lbnQgcG9ydDYgPSBuZXcgUG9ydEVsZW1lbnQoc2VyNCwicG9ydDEiKTsKLSAgICBCaW5kaW5nRWxlbWVudCBiaW5kNSA9IG5ldyBCaW5kaW5nRWxlbWVudChwb3J0NSwiYmluZDEiKTsKLSAgICBCaW5kaW5nRWxlbWVudCBiaW5kNiA9IG5ldyBCaW5kaW5nRWxlbWVudChwb3J0NiwiYmluZDEiKTsKLSAgICBuZXcgT3BlcmF0aW9uRWxlbWVudChiaW5kNSwib3AxIik7Ci0gICAgbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDYsIm9wMSIpOwotCi0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1dTRExFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvV1NETEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliMTQ1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvV1NETEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0RFRklOSVRJT05TID0gImRlZmluaXRpb25zIjsKLSAgCi0gIC8qCi0gICoKLSAgKiovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCAoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzKG5hbWUsbmV3IEJhc2ljTW9kZWwoIldTRExNb2RlbCIpKTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMRWxlbWVudCAoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgbW9kZWwuc2V0Um9vdEVsZW1lbnQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0RGVmaW5pdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9ERUZJTklUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE51bWJlck9mRGVmaW5pdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldE51bWJlck9mRWxlbWVudHMoUkVMX0RFRklOSVRJT05TKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVBc3NlbWJseUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVBc3NlbWJseUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MjJhYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlQXNzZW1ibHlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5mcmFnbWVudHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50UHJlQXNzZW1ibHlGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURlcGxveUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVEZXBsb3lGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjY5ZmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURlcGxveUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRQcmVEZXBsb3lGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURldmVsb3BGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZmExZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRQcmVEZXZlbG9wRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVJbnN0YWxsRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZUluc3RhbGxGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDJhMmIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZUluc3RhbGxGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5mcmFnbWVudHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50UHJlSW5zdGFsbEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUFzc2VtYmx5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVBc3NlbWJseUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3Y2VmM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUFzc2VtYmx5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVBc3NlbWJseUZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZURlcGxveUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGVwbG95RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1OGY1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGVwbG95RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVEZXBsb3lGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVEZXZlbG9wRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVEZXZlbG9wRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiNGQyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUHJlRGV2ZWxvcEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUluc3RhbGxGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUluc3RhbGxGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQ5MjQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVJbnN0YWxsRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVJbnN0YWxsRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3BsdWdpbi9XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vcGx1Z2luL1dlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDQwNjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vcGx1Z2luL1dlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGJ1bGsgb2YgdGhlIFdlYiBTZXJ2aWNlcyBydW50aW1lLgotKiBPbmx5IHRoZSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgcG9ydGlvbiBvZiB0aGUgcnVudGltZSBpcwotKiBmb3VuZCBlbHNld2hlcmUgLSBpbiB0aGUgb3JnLmVjbGlwc2UuanN0LndzLnVpIHBsdWdpbi4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4gaW5zdGFuY2VfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luICgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAqIChXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3MiKTsKLSAgKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyNWUwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZVR5cGVHZW5lcmF0b3IgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgIAotICBwcml2YXRlIGJvb2xlYW4gZlN0YXRlTGVzczsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlciwgaW50IGN1cnJlbnRMZXZlbCwgaW50IGxldmVsc0RlZXApCi0gIHsKLSAgICAgc3VwZXIoYnVmZmVyLGN1cnJlbnRMZXZlbCxsZXZlbHNEZWVwKTsKLSAgfQotCi0gCi0gIC8qCi0gICogVGFrZXMgaW4gYW4gb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24gYnkgdGhpcyB2aXNpdG9yIGFjdGlvbgotICAqIEBwYXJhbSBPYmplY3QgVGhlIG9iamVjdCB0byBiZSBhY3RlZCB1cG9uCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgIAotICAgICBBdHRyaWJ1dGVFbGVtZW50VHlwZSBhdHRyaWJ1dGVFbGVtZW50VHlwZSA9IChBdHRyaWJ1dGVFbGVtZW50VHlwZSlvYmplY3Q7Ci0gICAgIC8vaWYgaXQgaXMgYSBiZWFuIGlzIGl0IHN0YXRlbGVzcwotICAgICBhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpOyAKLSAgICAgaWYoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0U2V0dGVyTWV0aG9kKCkgPT0gbnVsbCkgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgIGlmKGF0dHJpYnV0ZUVsZW1lbnRUeXBlLmdldFR5cGVFbGVtZW50KCkuaXNCZWFuKCkpewotICAgICAgIEJlYW5FbGVtZW50IGJlYW4gPSAoQmVhbkVsZW1lbnQpYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKTsKLSAgICAgICBmU3RhdGVMZXNzID0gYmVhbi5pc1N0YXRlTGVzcygpOwotICAgICB9CSAKLQotICAgICBUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBUeXBlVmlzaXRvcigpOwotICAgICBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlVHlwZUdlbmVyYXRvcihmYnVmZmVyLGZDdXJyZW50TGV2ZWwsZkxldmVsc0RlZXApOwotICAgICBpZihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmlzQmVhbigpICYmICFUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSkgCi0gICAgIAkmJiAhKGdldFJldHVyblBhcmFtKCkgJiYgKFR5cGVGYWN0b3J5LmlzUmVjb2duaXplZFJldHVyblR5cGUoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKSB8fCBmU3RhdGVMZXNzKSkpCi0gICAgICAgICAgICAgICAgCi0gICAgIGFkZFBhcmVudEdldHRlcihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRHZXR0ZXJNZXRob2QoKSxhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IuYWRkUGFyZW50R2V0dGVyKHJldHVyblBhcmVudEdldHRlcigpLHJldHVyblBhcmVudEdldHRlclR5cGUoKSk7Ci0gICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0SW5zdGFuY2VOYW1lKGZJbnN0YW5jZU5hbWUpOwotICAgICBpbnB1dEZpbGVUeXBlR2VuZXJhdG9yLnNldFJldHVyblBhcmFtKGdldFJldHVyblBhcmFtKCkpOwotICAgICB0eXBlVmlzaXRvci5ydW4oYXR0cmlidXRlRWxlbWVudFR5cGUsaW5wdXRGaWxlVHlwZUdlbmVyYXRvcik7ICAgCi0gICAgIGZidWZmZXIgPSBpbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotICAgICAKLSAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDQ3YmIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBNZXRob2RGaWxlZ2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIElucHV0RmlsZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHB1YmxpYyBTdHJpbmcgZlJlc3VsdE5hbWU7Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogdXNlZCBkaXJlY3RseSAKLSAgKi8KLSAgcHVibGljIElucHV0RmlsZUdlbmVyYXRvciAoU3RyaW5nIHJlc3VsdCkKLSAgewotICAgICAgc3VwZXIoKTsKLSAgICAgIGZSZXN1bHROYW1lID0gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogY2FsbGVkIGZyb20gc3ViY2xhc3NlcwotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBTdHJpbmcgcmVzdWx0KQotICB7Ci0gICAgICBzdXBlcihidWZmZXIpOwotICAgICAgZlJlc3VsdE5hbWUgPSByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBjYWxsZWQgZnJvbSBzdWJjbGFzc2VzCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEZpbGVOYW1lcyhTdHJpbmcgcmVzdWx0cykKLSAgewotICAgIGZSZXN1bHROYW1lID0gcmVzdWx0czsKLSAgfQotCi0gIC8vdGFrZXMgaW4gYSBiZWFuIG5vZGUKLSAgIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICAgewotICAgICAgRWxlbWVudCBiZWFuRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIVE1MPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFRJVExFPklucHV0czwvVElUTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIMT5JbnB1dHM8L0gxPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIlN0cmluZyBtZXRob2QgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihcIm1ldGhvZFwiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiaW50IG1ldGhvZElEID0gMDsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYgKG1ldGhvZCA9PSBudWxsKSBtZXRob2RJRCA9IC0xOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJib29sZWFuIHZhbGlkID0gdHJ1ZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYobWV0aG9kSUQgIT0gLTEpIG1ldGhvZElEID0gSW50ZWdlci5wYXJzZUludChtZXRob2QpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgic3dpdGNoIChtZXRob2RJRCl7ICIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIAkKLSAgICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICAgTWV0aG9kVmlzaXRvciBtZXRob2RWaXNpdG9yID0gbmV3IE1ldGhvZFZpc2l0b3IoKTsKLSAgICAgIElucHV0RmlsZUhlbHAxR2VuZXJhdG9yIGlucHV0RmlsZUhlbHAxR2VuZXJhdG9yID0gbmV3IElucHV0RmlsZUhlbHAxR2VuZXJhdG9yKGZidWZmZXIsZlJlc3VsdE5hbWUpOyAKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LGlucHV0RmlsZUhlbHAxR2VuZXJhdG9yKTsKLSAgICAgIGZidWZmZXIgPSBpbnB1dEZpbGVIZWxwMUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgMTExMTExMTExMToiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgidmFsaWQgPSBmYWxzZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZPUk0gTUVUSE9EPVwiUE9TVFwiIEFDVElPTj1cIiIgKyBmUmVzdWx0TmFtZSArICJcIiBUQVJHRVQ9XCJyZXN1bHRcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJISURERU5cIiBOQU1FPVwibWV0aG9kXCIgVkFMVUU9XCI8JT1tZXRob2QlPlwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEFCTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxUUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFREIENPTFNQQU49XCIxXCIgQUxJR049XCJMRUZUXCI+VVJMU3RyaW5nOjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxURCBBTElHTj1cImxlZnRcIj48SU5QVVQgVFlQRT1cIlRFWFRcIiBOQU1FPVwidXJsMTExMTExMTExMVwiIFNJWkU9MjA+PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9UQUJMRT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SU5QVVQgVFlQRT1cIlNVQk1JVFwiIFZBTFVFPVwiSW52b2tlXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiUkVTRVRcIiBWQUxVRT1cIkNsZWFyXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRk9STT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiYnJlYWs7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgMTExMTExMTExMjoiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgidmFsaWQgPSBmYWxzZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZPUk0gTUVUSE9EPVwiUE9TVFwiIEFDVElPTj1cIiIgKyBmUmVzdWx0TmFtZSArICJcIiBUQVJHRVQ9XCJyZXN1bHRcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJISURERU5cIiBOQU1FPVwibWV0aG9kXCIgVkFMVUU9XCI8JT1tZXRob2QlPlwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8QlI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiU1VCTUlUXCIgVkFMVUU9XCJJbnZva2VcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJSRVNFVFwiIFZBTFVFPVwiQ2xlYXJcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9GT1JNPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJicmVhazsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAKLSAgICAgIAotCi0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsgICAgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYgKHZhbGlkKSB7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiU2VsZWN0IGEgbWV0aG9kIHRvIHRlc3QuIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuVEFCICsgInJldHVybjsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9CT0RZPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0hUTUw+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ2MTA1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAxR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlBhcmFtZXRlclZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuTWV0aG9kRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxfU1RBVEUgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSU5BTF9TVEFURSA9IDI7Ci0KLSAgcHVibGljIGludCBmc3RhdGU7Ci0gICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIGZzdGF0ZSA9IElOSVRJQUxfU1RBVEU7Ci0gIH0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIsU3RyaW5nIHJlc3VsdE5hbWUpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcixyZXN1bHROYW1lKTsKLSAgICAgIGZzdGF0ZSA9IElOSVRJQUxfU1RBVEU7Ci0gIH0KLSAgCi0gIC8qCi0gICogVGFrZXMgaW4gYW4gZWxlbWVudAotICAqIEBwYXJhbSBPYmplY3QgVGFrZXMgaW4gYW4gb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgRWxlbWVudCBtZXRob2RFbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIGlmIChtZXRob2QuZ2V0TWV0aG9kT21taXNzaW9uKCkpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgICAgUGFyYW1ldGVyVmlzaXRvciBwYXJhbWV0ZXJWaXNpdG9yID0gbmV3IFBhcmFtZXRlclZpc2l0b3IoKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgIiArIG1ldGhvZC5nZXROdW1iZXJJRCgpKyAiOiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoInZhbGlkID0gZmFsc2U7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8Rk9STSBNRVRIT0Q9XCJQT1NUXCIgQUNUSU9OPVwiIiArIGZSZXN1bHROYW1lICsgIlwiIFRBUkdFVD1cInJlc3VsdFwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiSElEREVOXCIgTkFNRT1cIm1ldGhvZFwiIFZBTFVFPVwiPCU9bWV0aG9kJT5cIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgCi0gICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvciBpbnB1dEZpbGVIZWxwMkdlbmVyYXRvciA9IG5ldyBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgIHBhcmFtZXRlclZpc2l0b3IucnVuKG1ldGhvZEVsZW1lbnQsaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IpOwotICAgICBmYnVmZmVyID0gaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgIAotICAgICBmYnVmZmVyLmFwcGVuZCgiPEJSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiU1VCTUlUXCIgVkFMVUU9XCJJbnZva2VcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8SU5QVVQgVFlQRT1cIlJFU0VUXCIgVkFMVUU9XCJDbGVhclwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRk9STT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoImJyZWFrOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIAotCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgCi0gIH0gICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiN2U2NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5UeXBlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUhlbHAxR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgLyoKLSAgKiBUaGlzIGlzIGFjdHVhbGx5IHVzZWQgYnkgdGhlIHJlc3VsdCBnZW5lcmF0b3IgdG8gc2hvdyB0aGUgCi0gICogcmVzdWx0YW50IEJlYW4KLSAgKiBUaGUgbmFtZSBpcyB0aGUgbmFtZSB0aGUgcmVzdWx0YW50IGJlYW4gaXMgdXNpbmcgYXMgaXRzIGluc3RhbmNlIG5hbWUKLSAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmSW5zdGFuY2VOYW1lOwotICBwcml2YXRlIGJvb2xlYW4gZlJldHVyblBhcmFtPWZhbHNlOwotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gICAgICBmSW5zdGFuY2VOYW1lPSIiOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRvcnMKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIHBhcmFtZXRlcnMgdHlwZSBiZWFuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbmNlTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGZJbnN0YW5jZU5hbWUgPSBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRvcnMKLSAgKiBAcmV0dXJuIFN0cmluZyBuYW1lIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXJzIHR5cGUgYmVhbgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEluc3RhbmNlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZkluc3RhbmNlTmFtZTsKLSAgfQotCi0KLSAgLyoKLSAgKiBUYWtlcyBpbiBhbiBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbiBieSB0aGlzIHZpc2l0b3IgYWN0aW9uCi0gICogQHBhcmFtIE9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgIEVsZW1lbnQgcGFyYW1ldGVyRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGdldFZpc2l0b3IoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxUQUJMRT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgIFR5cGVWaXNpdG9yIHR5cGVWaXNpdG9yID0gbmV3IFR5cGVWaXNpdG9yKCk7Ci0gICAgICBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlVHlwZUdlbmVyYXRvcihmYnVmZmVyLDApOwotICAgICAgaW5wdXRGaWxlVHlwZUdlbmVyYXRvci5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0SW5zdGFuY2VOYW1lKGZJbnN0YW5jZU5hbWUpOwotICAgICAgdHlwZVZpc2l0b3IucnVuKHBhcmFtZXRlckVsZW1lbnQsaW5wdXRGaWxlVHlwZUdlbmVyYXRvcik7Ci0gICAgICBmYnVmZmVyID0gaW5wdXRGaWxlVHlwZUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvVEFCTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRSZXR1cm5QYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gZlJldHVyblBhcmFtOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmV0dXJuUGFyYW0oYm9vbGVhbiByZXR1cm5QYXJhbSkKLSAgewotICAgIGZSZXR1cm5QYXJhbSA9IHJldHVyblBhcmFtOwotICB9IAotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlVHlwZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliOWJmNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLkF0dHJpYnV0ZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuU2ltcGxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIElucHV0RmlsZVR5cGVHZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSW5wdXRGaWxlVHlwZUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUhlbHAyR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHJvdGVjdGVkIFN0cmluZyBmUGFyZW50R2V0dGVyczsKLSAgcHJvdGVjdGVkIGludCBmTGV2ZWxzRGVlcDsKLSAgcHJvdGVjdGVkIGludCBmQ29sc3BhbjsKLSAgcHJvdGVjdGVkIGludCBmQ3VycmVudExldmVsOwotICBwcml2YXRlIGJvb2xlYW4gZklzU2ltcGxlOwotICBwcml2YXRlIGJvb2xlYW4gZlN0YXRlTGVzc0JlYW47Ci0gIHByaXZhdGUgVmVjdG9yIGZHZXR0ZXJzOwotICBwcml2YXRlIFZlY3RvciBmVHlwZXM7Ci0gIHByaXZhdGUgYm9vbGVhbiBmV3JpdGUgPSB0cnVlOwotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlVHlwZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlciwgaW50IGN1cnJlbnRMZXZlbCkKLSAgewotICAgICBzdXBlcihidWZmZXIpOwotICAgICBmQ3VycmVudExldmVsID0gY3VycmVudExldmVsOwotICAgICBmTGV2ZWxzRGVlcCA9IC0xOwotICAgICBmUGFyZW50R2V0dGVycyA9ICIiOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBpbnQgY3VycmVudExldmVsLGludCBsZXZlbHNEZWVwKQotICB7Ci0gICAgIHN1cGVyKGJ1ZmZlcik7Ci0gICAgIGZDdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7Ci0gICAgIGZMZXZlbHNEZWVwID0gbGV2ZWxzRGVlcDsKLSAgICAgZlBhcmVudEdldHRlcnMgPSAiIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEdldHRlcnMoVmVjdG9yIGdldHRlcixWZWN0b3IgdHlwZSkKLSAgewotICAgICBpZihmR2V0dGVycyAhPSBudWxsKXsKLSAgICAgICBmR2V0dGVycy5jbGVhcigpOwotICAgICAgIGZUeXBlcy5jbGVhcigpOwotICAgICB9Ci0gICAgIGFkZFBhcmVudEdldHRlcihnZXR0ZXIsdHlwZSk7Ci0gIH0KLQotCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gaG9sZHMgc29tZSBzdGF0ZSBkYXRhIHRoYXQgaXMgaW1wb3J0YW50IGluIGdldHRpbmcgdGhlIAotICAqIFN0cmluZ3MgZm9yIGRpc3BsYXkgb2YgcmVzdWx0YW50IGJlYW5zCi0gICogQHBhcmFtIFN0cmluZyBnZXR0ZXIgdGhpcyBpcyB0aGUgZ2V0dGVyIG9mIGFuIGF0dHJpYnV0ZQotICAqIFRoZSBpZGVhIGlzIHRoYXQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoZSBzaW1wbGUgdHlwZQotICAqIHdlIGhhdmUgZ2V0QWRkcmVzcygpLmdldFN0cmVldCgpLi4uLgotICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJlbnRHZXR0ZXIoU3RyaW5nIGdldHRlciwgU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBpZihmR2V0dGVycyA9PSBudWxsKSBmR2V0dGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZihmVHlwZXMgPT0gbnVsbCkgZlR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgIGZHZXR0ZXJzLmFkZEVsZW1lbnQoZ2V0dGVyKTsKLSAgICBmVHlwZXMuYWRkRWxlbWVudCh0eXBlKTsKLSAgfQotCi0gIC8qCi0gICogdGhpcyB3aWxsIGJlIHVzZWQgd2hlbiBwYXNzaW5nIGJldHdlZW4gdHdvIHZpc2l0b3JzCi0gICoKLSAgKi8KLSAgcHVibGljIHZvaWQgYWRkUGFyZW50R2V0dGVyKFZlY3RvciBnZXR0ZXJzLCBWZWN0b3IgdHlwZXMpCi0gIHsKLSAgICBpZihmR2V0dGVycyA9PSBudWxsKSBmR2V0dGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZihmVHlwZXMgPT0gbnVsbCkgZlR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgIGludCBzaXplID0gZ2V0dGVycy5zaXplKCk7ICAgIAotICAgIGZvcihpbnQgaSA9IDA7IGk8c2l6ZTsgaSsrKXsKLSAgICAgIGZHZXR0ZXJzLmFkZEVsZW1lbnQoZ2V0dGVycy5nZXQoaSkpOwotICAgICAgZlR5cGVzLmFkZEVsZW1lbnQodHlwZXMuZ2V0KGkpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIHJldHVyblBhcmVudEdldHRlcihpbnQgY291bnQpCi0gIHsKLSAgICBpZiAoZkdldHRlcnMgPT0gbnVsbCB8fCBjb3VudCA+IGZHZXR0ZXJzLnNpemUoKSkgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIChTdHJpbmcpZkdldHRlcnMuZ2V0KGNvdW50KTsgIAotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyByZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKGludCBjb3VudCkKLSAgewotICAgIGlmIChmVHlwZXMgPT0gbnVsbCB8fCBjb3VudCA+IGZUeXBlcy5zaXplKCkpIHJldHVybiBudWxsOwotICAgIHJldHVybiAoU3RyaW5nKWZUeXBlcy5nZXQoY291bnQpOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgVmVjdG9yIHJldHVyblBhcmVudEdldHRlcigpCi0gIHsKLSAgICBpZiAoZkdldHRlcnMgPT0gbnVsbCApIHJldHVybiBuZXcgVmVjdG9yKCk7Ci0gICAgcmV0dXJuIGZHZXR0ZXJzOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgVmVjdG9yIHJldHVyblBhcmVudEdldHRlclR5cGUoKQotICB7Ci0gICAgaWYgKGZUeXBlcyA9PSBudWxsICkgcmV0dXJuIG5ldyBWZWN0b3IoKTsKLSAgICByZXR1cm4gZlR5cGVzOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgaW50IGdldHRlckNvdW50KCkKLSAgewotICAgIGlmKGZHZXR0ZXJzID09IG51bGwpIHJldHVybiAwOwotICAgIHJldHVybiBmR2V0dGVycy5zaXplKCk7IAotICB9Ci0KLQotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgc29tZSBzdGF0ZSBkYXRhIHRoYXQgaXMgaW1wb3J0YW50IGluIGdldHRpbmcgdGhlIAotICAqIFN0cmluZ3MgZm9yIGRpc3BsYXkgb2YgcmVzdWx0YW50IGJlYW5zCi0gICogQHJldHVybiBTdHJpbmcgdGhlIHN0cmluZyBvZiBnZXR0ZXJzIHRvIHRoaXMgcG9pbnQKLSAgKiBUaGUgaWRlYSBpcyB0aGF0IGJ5IHRoZSB0aW1lIHdlIGdldCB0byB0aGUgc2ltcGxlIHR5cGUKLSAgKiB3ZSBoYXZlIGdldEFkZHJlc3MoKS5nZXRTdHJlZXQoKS4uLi4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRHZXR0ZXJzKCkKLSAgewotICAgIHJldHVybiBmUGFyZW50R2V0dGVyczsKLSAgfQotICAKLSAgLyoKLSAgKiBUYWtlcyBpbiBhbiBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbiBieSB0aGlzIHZpc2l0b3IgYWN0aW9uCi0gICogQHBhcmFtIE9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgVHlwZUVsZW1lbnQgZWxlbWVudCA9IChUeXBlRWxlbWVudClvYmplY3Q7Ci0gICAgICAgICAgCi0gICAgIGlmIChCb29sZWFuLlRSVUUuZXF1YWxzKGVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChUeXBlRWxlbWVudC5OT05fSU5TVEFOVElBQkxFKSkpCi0JICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaW1wbGVFbGVtZW50KSBmSXNTaW1wbGUgPSB0cnVlOwotICAgICBlbHNlIGZJc1NpbXBsZSA9IGZhbHNlOwotCi0gICAgIC8vdGhpcyBjb3VsZCBiZSBhIHN0YXRlbGVzc2JlYW4gbmVlZCB0byBrbm93Ci0gICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmVhbkVsZW1lbnQgKXsKLSAgICAgICAgQmVhbkVsZW1lbnQgYmVhbiA9IChCZWFuRWxlbWVudCllbGVtZW50OwotICAgICAgICBpZiAoYmVhbi5pc1N0YXRlTGVzcygpKSBmU3RhdGVMZXNzQmVhbiA9IHRydWU7Ci0gICAgICAgIGlmIChiZWFuLmdldEF0dHJpYigpID09IEJlYW5FbGVtZW50LlJFQURPTkxZKSBmV3JpdGUgPSBmYWxzZTsKLSAgICAgfQotCi0KLQotICAgICAvL0NvbXBsZXggdHlwZSBzdXBwb3J0Ci0gICAgIC8vZmlyc3QgSSBuZWVkIHRvIGZpbmQgb3V0IGhvdyBtYW55IGxldmVscyBkZWVwCi0gICAgIGlmKGZMZXZlbHNEZWVwID09IC0xKXsKLSAgICAgICAgQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEF0dHJpYnV0ZVZpc2l0b3IoKTsKLSAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbGR2YSA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbigpOwotICAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnJ1bihlbGVtZW50LGxkdmEpOwotICAgICAgICBmTGV2ZWxzRGVlcCA9IGxkdmEuZ2V0TGV2ZWxzRGVlcCgpOwotICAgICAgICAvL2NoZWNrIG91dCB0aGUgZmllbGRzIAotICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBsZHZhMiA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbigpOwotICAgICAgICBmaWVsZFZpc2l0b3IucnVuKGVsZW1lbnQsbGR2YTIpOwotCi0gICAgICAgIGlmKGZMZXZlbHNEZWVwIDwgbGR2YTIuZ2V0TGV2ZWxzRGVlcCgpKWZMZXZlbHNEZWVwID0gbGR2YTIuZ2V0TGV2ZWxzRGVlcCgpOyAKLSAgICAgICAgZkxldmVsc0RlZXArKzsKLSAgICAgfSAKLSAgICAgZkNvbHNwYW4gPSBmTGV2ZWxzRGVlcCAtIGZDdXJyZW50TGV2ZWw7Ci0KLSAgICAgLy9pZiB3ZSBoYXZlIGEgcmV0dXJuIHBhcmFtIHdpdGggbm8gZ2V0dGVyIG1ha2Ugc3VyZSB3ZSBhcmUgb24gdGhlIAotICAgICAvL2F0dHJpYnV0ZSBhbmQgbm90IHRoZSBwYXJhbWV0ZXIgdGhlbiByZXR1cm4KLSAgICAgaWYoZ2V0UmV0dXJuUGFyYW0oKSAmJiAgZWxlbWVudC5nZXRPd25pbmdFbGVtZW50KCkgaW5zdGFuY2VvZiBBdHRyaWJ1dGVFbGVtZW50VHlwZSAmJigoKEF0dHJpYnV0ZUVsZW1lbnRUeXBlKWVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpKS5nZXRHZXR0ZXJNZXRob2QoKSA9PSBudWxsKSApIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgIC8vQ29kZSBnZW4gZm9yIGFsbCBlbGVtZW50cwotICAgICBpZihmV3JpdGUpewotICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZkN1cnJlbnRMZXZlbDtpKyspewotICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQgV0lEVEg9XCI1JVwiPjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgIH0KLSAgICAgICBmYnVmZmVyLmFwcGVuZCgiPFREIENPTFNQQU49XCIiICsgZkNvbHNwYW4gKyAiXCIgQUxJR049XCJMRUZUXCI+IiArIGVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpLmdldE5hbWUoKSArICI6PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgCi0gICAgIH0KLSAgICAgaWYoZklzU2ltcGxlIHx8IFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGVsZW1lbnQuZ2V0TmFtZSgpKSAKLSAgICAgICAgICAgICAgICB8fCAoZ2V0UmV0dXJuUGFyYW0oKSAmJiBmU3RhdGVMZXNzQmVhbikgCi0gICAgICAgICAgICAgICAgfHwgKGdldFJldHVyblBhcmFtKCkgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZShlbGVtZW50LmdldFR5cGVOYW1lKCkpKSl7Ci0gICAgICAgIGlmKGdldEluc3RhbmNlTmFtZSgpLmVxdWFscygiIikpewotICAgICAgICAgICBpZihmV3JpdGUpewotICAgICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShlbGVtZW50LmdldE5hbWUoKSxlbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKS5nZXRNVUlEKCkpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmlucHV0Rm9ybShlbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKS5nZXRNVUlEKCkpKTsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgIGlmKGdldFJldHVyblBhcmFtKCkgJiYgKFR5cGVGYWN0b3J5LmlzUmVjb2duaXplZFJldHVyblR5cGUoZWxlbWVudC5nZXRUeXBlTmFtZSgpKSB8fCBmU3RhdGVMZXNzQmVhbikpewotICAgICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShlbGVtZW50LmdldFR5cGVOYW1lKCksZWxlbWVudC5nZXRPd25pbmdFbGVtZW50KCkuZ2V0TVVJRCgpKTsgIAotICAgICAgICAgICAgIFN0cmluZyB1bmlxdWVOYW1lID0gInR5cGUiICsgZGF0YVR5cGUuZ2V0VW5pcXVlTmFtZSgpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArICBnZXRJbnN0YW5jZU5hbWUoKSArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIFN0cmluZyBhZnRlclN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOyAKLSAgICAgICAgICAgICBTdHJpbmcgdG1wU3RyaW5nID0gInRlYmVjZSI7Ci0gICAgICAgICAgICAgU3RyaW5nIHByZXZTdHJpbmcgPSBnZXRJbnN0YW5jZU5hbWUoKTsKLSAgICAgICAgICAgICBTdHJpbmcgbmV3VG1wU3RyaW5nID0gIiI7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBuZXdUbXBTdHJpbmcgPSB0bXBTdHJpbmcgKyBpOwotICAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQocmV0dXJuUGFyZW50R2V0dGVyVHlwZShpKSArICIgIiArIG5ld1RtcFN0cmluZyArICI9IiArIHByZXZTdHJpbmcgKyAiLiIgKyByZXR1cm5QYXJlbnRHZXR0ZXIoaSkgKyAiOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICAgIHByZXZTdHJpbmcgPSBuZXdUbXBTdHJpbmc7IAotICAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoImlmKCIgKyBuZXdUbXBTdHJpbmcgKyAiICE9IG51bGwpeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICAgIGFmdGVyU3RyaW5nID0gbmV3VG1wU3RyaW5nOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChlbGVtZW50LmdldE5hbWUoKSArICIgIiArIHVuaXF1ZU5hbWUgKyAiID0gIiArIGFmdGVyU3RyaW5nICsgIi4iICsgKChBdHRyaWJ1dGVFbGVtZW50VHlwZSllbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKSkuZ2V0R2V0dGVyTWV0aG9kKCkrICI7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAgICAgICAgICAgICAKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChkYXRhVHlwZS5UeXBlQ29udmVyc2lvbih1bmlxdWVOYW1lKSk7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSIpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgfQotCi0gICAgICAgICAgIGVsc2V7IAotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArICBnZXRJbnN0YW5jZU5hbWUoKSArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIFN0cmluZyBhZnRlclN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOwotICAgICAgICAgICAgIFN0cmluZyB0bXBTdHJpbmcgPSAidGViZWNlIjsKLSAgICAgICAgICAgICBTdHJpbmcgcHJldlN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOwotICAgICAgICAgICAgIFN0cmluZyBuZXdUbXBTdHJpbmcgPSAiIjsKLSAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGdldHRlckNvdW50KCk7aSsrKXsKLSAgICAgICAgICAgICAgIG5ld1RtcFN0cmluZyA9IHRtcFN0cmluZyArIGk7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKGkpICsgIiAiICsgbmV3VG1wU3RyaW5nICsgIj0iICsgcHJldlN0cmluZyArICIuIiArIHJldHVyblBhcmVudEdldHRlcihpKSArICI7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgICAgcHJldlN0cmluZyA9IG5ld1RtcFN0cmluZzsgCi0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArIG5ld1RtcFN0cmluZyArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgICAgYWZ0ZXJTdHJpbmcgPSBuZXdUbXBTdHJpbmc7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCU9Iik7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoYWZ0ZXJTdHJpbmcgKyAiLiIgKyAoKEF0dHJpYnV0ZUVsZW1lbnRUeXBlKWVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpKS5nZXRHZXR0ZXJNZXRob2QoKSsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+Iik7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIik7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSIpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgCi0gICAgIH0KLSAgICAgICAgIAotICAgICAgLy9Ob3cgY2Fycnkgb24gZG93biB0aGUgcmVzdCBvZiB0aGUgYmVhbgotICAgICBlbHNlIHsKLSAgICAgICAgQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEF0dHJpYnV0ZVZpc2l0b3IoKTsKLSAgICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRSZXNpZGVudFZlY3RvcjEocmV0dXJuUGFyZW50R2V0dGVyKCkpOwotICAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnNldFJlc2lkZW50VmVjdG9yMihyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKCkpOwotICAgICAgICBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yID0gbmV3IElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcihmYnVmZmVyLChmQ3VycmVudExldmVsICsgMSksZkxldmVsc0RlZXApOwotICAgICAgICBpbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3Iuc2V0UmV0dXJuUGFyYW0oZ2V0UmV0dXJuUGFyYW0oKSk7Ci0gICAgICAgIGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5zZXRJbnN0YW5jZU5hbWUoZkluc3RhbmNlTmFtZSk7Ci0gICAgICAgIGF0dHJpYnV0ZVZpc2l0b3IucnVuKGVsZW1lbnQsaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKTsKLSAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAKLSAgICAgICAgLy9ub3cgZG8gZmllbGRzIHZlcnkgc2ltaWxhcgotICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICBmaWVsZFZpc2l0b3Iuc2V0UmVzaWRlbnRWZWN0b3IxKHJldHVyblBhcmVudEdldHRlcigpKTsKLSAgICAgICAgZmllbGRWaXNpdG9yLnNldFJlc2lkZW50VmVjdG9yMihyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKCkpOwotICAgICAgICBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMiA9IG5ldyBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IoZmJ1ZmZlciwoZkN1cnJlbnRMZXZlbCArIDEpLGZMZXZlbHNEZWVwKTsKLSAgICAgICAgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgICAgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXRJbnN0YW5jZU5hbWUoZkluc3RhbmNlTmFtZSk7Ci0gICAgICAgIGZpZWxkVmlzaXRvci5ydW4oZWxlbWVudCxpbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyKTsKLSAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgCi0gICAgICAgIAotCi0gICAgIH0KLQotCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9MZXZlbHNEZWVwVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9MZXZlbHNEZWVwVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjJlMWE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5BdHRyaWJ1dGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uRmllbGRWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbi4KLSogKi8KLXB1YmxpYyBjbGFzcyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBpbXBsZW1lbnRzIFZpc2l0b3JBY3Rpb24gCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwcml2YXRlIGludCBmTGV2ZWxzRGVlcDsKLSAgcHJpdmF0ZSBpbnQgZkRlZXBlc3RMZXZlbDsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50Ci0gICogCi0gICovCi0gIHB1YmxpYyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiAoKQotICB7Ci0gICAgZkxldmVsc0RlZXAgPSAwOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQKLSAgKiAKLSAgKi8KLSAgcHVibGljIExldmVsc0RlZXBWaXNpdG9yQWN0aW9uIChpbnQgY3VycmVudCxib29sZWFuIGluY3JlbWVudCkKLSAgewotICAgIGZMZXZlbHNEZWVwID0gY3VycmVudDsKLSAgICBpZihpbmNyZW1lbnQpIGZMZXZlbHNEZWVwKys7Ci0gICAgZkRlZXBlc3RMZXZlbCA9IGZMZXZlbHNEZWVwOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTdHJpbmcgcmVzaWRlbnQpCi0gIHsKLSAgICAvL25vdGhpbmcgdG8gYmUgZG9uZSBidXQgbXVzdCBiZSBpbXBsZW1lbnRlZAotICB9Ci0KLQotCi0gIC8qKgotICAqIFRoZSB2aXNpdG9yIHRoYXQgY2FsbGVkIHRoaXMgVmlzaXRvckFjdGlvbgotICAqIEBwYXJhbSB2aXNpdG9yIHRoZSB2aXNpdG9yIHRoYXQgY2FsbGVkIHRoaXMgdmlzaXRvciBhY3Rpb24KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmlzaXRvcihWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgfQotCi0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbGV2ZWwgb2YgbmVzdGluZyB3aXRoaW4gdGhpcyBiZWFuCi0gICogQHJldHVybiBpbnQgcmV0dXJucyB0aGUgaW50IG51bWJlciByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBuZXN0cyBvZiB0aGlzIGJlYW4KLSAgKi8KLSAgcHVibGljIGludCBnZXRMZXZlbHNEZWVwKCkKLSAgewotICAgICByZXR1cm4gZkRlZXBlc3RMZXZlbDsKLSAgfQotIAotCi0gIC8qKgotICAqIFRha2VzIGluIGFuIG9iamVjdCB0byBiZSBhY3RlZCB1cG9uIGJ5IHRoaXMgdmlzaXRvciBhY3Rpb24KLSAgKiBAcGFyYW0gT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbgotICAqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBdHRyaWJ1dGVFbGVtZW50IHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBUeXBlRWxlbWVudCl7Ci0gICAgICAgICBUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBUeXBlVmlzaXRvcigpOwotICAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbHZkYSA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbihmTGV2ZWxzRGVlcCx0cnVlKTsKLSAgICAgICAgIHR5cGVWaXNpdG9yLnJ1bihlbGVtZW50LGx2ZGEpOwotCi0gICAgICAgICBpZiAobHZkYS5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYS5nZXRMZXZlbHNEZWVwKCk7IAotICAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmVhbkVsZW1lbnQgJiYgIShUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihlbGVtZW50LmdldE5hbWUoKSkpKXsKLSAgICAgICAgIEF0dHJpYnV0ZVZpc2l0b3IgYXR0cmlidXRlVmlzaXRvciA9IG5ldyBBdHRyaWJ1dGVWaXNpdG9yKCk7Ci0gICAgICAgICBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBsdmRhID0gbmV3IExldmVsc0RlZXBWaXNpdG9yQWN0aW9uKGZMZXZlbHNEZWVwLGZhbHNlKTsKLSAgICAgICAgIGF0dHJpYnV0ZVZpc2l0b3IucnVuKGVsZW1lbnQsbHZkYSk7Ci0gICAgICAgICBpZiAobHZkYS5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYS5nZXRMZXZlbHNEZWVwKCk7IAotICAgCi0gICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbHZkYTIgPSBuZXcgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24oZkxldmVsc0RlZXAsZmFsc2UpOwotICAgICAgICAgZmllbGRWaXNpdG9yLnJ1bihlbGVtZW50LGx2ZGEyKTsKLSAgICAgICAgIGlmIChsdmRhMi5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYTIuZ2V0TGV2ZWxzRGVlcCgpOyAKLSAgIAotICAgICAgfQotICAgICAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgIAotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vTWV0aG9kRmlsZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZWM1MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgTWV0aG9kRmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBNZXRob2RGaWxlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHVibGljIFN0cmluZyBmSW5wdXROYW1lOwotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIE1ldGhvZEZpbGVHZW5lcmF0b3IgKFN0cmluZyBpbnB1dHMpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gIH0KLQotICAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIFN0cmluZ0J1ZmZlciBidWZmZXIgdG8gYXBwZW5kIGNvZGVnZW4gCi0gICovCi0gIHB1YmxpYyBNZXRob2RGaWxlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLFN0cmluZyBpbnB1dHMpCi0gIHsKLSAgICBzdXBlcihidWZmZXIpOwotICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHNldEZpbGVOYW1lcyhTdHJpbmcgaW5wdXRzKQotICB7Ci0gICAgZklucHV0TmFtZSA9IGlucHV0czsKLSAgfQotCi0gIC8vcHVibGljIHN0YXRpYyBTdHJpbmcgTE9DQVRPUiA9ICJMb2NhdG9yIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQkVBTiA9ICJQcm94eSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEdFVCA9ICJnZXQiOwotCi0gIAotICAvL3Rha2VzIGluIGEgYmVhbiBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICAgewotICAgICAgRWxlbWVudCBiZWFuRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+Iik7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEhUTUw+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPEhFQUQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPFRJVExFPk1ldGhvZHM8L1RJVExFPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8Qk9EWT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8SDE+TWV0aG9kczwvSDE+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPFVMPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIE1ldGhvZFZpc2l0b3IgbWV0aG9kVmlzaXRvciA9IG5ldyBNZXRob2RWaXNpdG9yKCk7Ci0gICAgICBNZXRob2RGaWxlSGVscEdlbmVyYXRvciBtZXRob2RGaWxlSGVscEdlbmVyYXRvciA9IG5ldyBNZXRob2RGaWxlSGVscEdlbmVyYXRvcihmYnVmZmVyLGZJbnB1dE5hbWUpOyAKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LG1ldGhvZEZpbGVIZWxwR2VuZXJhdG9yKTsKLSAgICAgIGZidWZmZXIgPSBtZXRob2RGaWxlSGVscEdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1VMPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIjwvQk9EWT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8L0hUTUw+Iik7Ci0gICAgICAKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL01ldGhvZEZpbGVIZWxwR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL01ldGhvZEZpbGVIZWxwR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZDBiNzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlSGVscEdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgTWV0aG9kRmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBNZXRob2RGaWxlSGVscEdlbmVyYXRvciBleHRlbmRzIE1ldGhvZEZpbGVHZW5lcmF0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqCi0gICovCi0gIHB1YmxpYyBNZXRob2RGaWxlSGVscEdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcixTdHJpbmcgaW5wdXROYW1lKQotICB7Ci0gICAgICBzdXBlcihidWZmZXIsaW5wdXROYW1lKTsKLSAgfQotCi0KLSAgLy90YWtlcyBpbiBhIE1ldGhvZCBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgICBFbGVtZW50IG1ldGhvZEVsZW1lbnQgPSAoRWxlbWVudClvYmplY3Q7Ci0gICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgICBpZiAobWV0aG9kLmdldE1ldGhvZE9tbWlzc2lvbigpKSByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxMST48QSBIUkVGPVwiIiArIGZJbnB1dE5hbWUgKyAiP21ldGhvZD0iICsgbWV0aG9kLmdldE51bWJlcklEKCkpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIlwiIFRBUkdFVD1cImlucHV0c1wiPiAiICsgbWV0aG9kLmdldERpc3BsYXlOYW1lKCkpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvQT48L0xJPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTg2NmY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlR5cGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkF0dHJpYnV0ZUVsZW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkRhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciBleHRlbmRzIFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHByaXZhdGUgVmVjdG9yIGZTZXR0ZXJWZWN0b3I7IAotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBidWZmZXIgU3RyaW5nQnVmZmVyIG9iamVjdCB0aGF0IHRoaXMgY29kZSBnZW5lcmF0b3Igd3JpdGVzIHRvIAotICAqLwotICBwdWJsaWMgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgKiBTZXR0ZXIgdmVjdG9yCi0gICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U2V0dGVyVmVjdG9yKCkKLSAgewotICAgICAgcmV0dXJuIGZTZXR0ZXJWZWN0b3I7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICogVmlzaXQgTWV0aG9kIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIFZpc2l0b3IKLSAgKiBAcGFyYW0gUGFyYW1ldGVyIHBhcmFtZXRlciBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIAotICAqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICBBdHRyaWJ1dGVFbGVtZW50VHlwZSBhdHRyaWJ1dGVFbGVtZW50VHlwZSA9IChBdHRyaWJ1dGVFbGVtZW50VHlwZSlvYmplY3Q7Ci0gICAgIGlmKGF0dHJpYnV0ZUVsZW1lbnRUeXBlLmdldFNldHRlck1ldGhvZCgpID09IG51bGwpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICBCYXNpY0VsZW1lbnQgZWxlbWVudCA9IChCYXNpY0VsZW1lbnQpb2JqZWN0OwotICAgICBpZihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmlzU2ltcGxlKCkgfHwgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4oYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkpKXsgICAgICAKLSAgICAgICAgLy9zdGFydCB0aGUgY29kZWdlbgotICAgICAgICAvL2FzayB0aGUgZGF0YXR5cGUgZm9yIGl0cyByZXF1ZXN0IGxpbmUsIGl0IG1heSBuZWVkIG1hcmsgdXAgb3Igbm90LgotICAgICAgICAvL2llIEZvciB0aGUgc2ltcGxlIHR5cGVzIHdlIG5lZWQgdGhlIG1hcmsgdXAKLSAgICAgICAgLy9mb3IgdGhlIGRvbSBlbGVtZW50IHdlIGNhbnQgdXNlIGl0LgotICAgICAgICBEYXRhVHlwZSBkYXRhVHlwZSA9IFR5cGVGYWN0b3J5LmNyZWF0ZVR5cGUoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCksZWxlbWVudC5nZXRNVUlEKCkpOwotICAgICAgICBzZXRUeXBlT3duZXJJZChpZE5hbWUoZWxlbWVudC5nZXROYW1lKCkpKTsgCi0gICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmdldFJlcXVlc3RDb2RlKGVsZW1lbnQuZ2V0TVVJRCgpLGdldFR5cGVPd25lcklkKCkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgfQotICAgICAKLSAgICAgVHlwZVZpc2l0b3IgdHlwZVZpc2l0b3IgPSBuZXcgVHlwZVZpc2l0b3IoKTsKLSAgICAgUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0gICAgIHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLnNldE51bWJlckZhY3RvcnkoZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0VHlwZU93bmVySWQoZ2V0VHlwZU93bmVySWQoKSk7Ci0gICAgIAotICAgICB0eXBlVmlzaXRvci5ydW4oYXR0cmlidXRlRWxlbWVudFR5cGUscmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IpOwotICAgICBzZXROdW1iZXJGYWN0b3J5KHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLmdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgIFZlY3RvciBzZXR0ZXJJbnB1dHMgPSByZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5nZXRSZXNpZGVudFZlY3RvcigpOyAKLSAgICAgcHV0UmVzaWRlbnRWZWN0b3IoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0U2V0dGVyU2lnbmF0dXJlKChTdHJpbmcpc2V0dGVySW5wdXRzLmZpcnN0RWxlbWVudCgpKSk7Ci0gICAgIAotICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfSAgIAotCi0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Mjc3MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTIzICAgMTQyMjk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBNZXRob2RGaWxlZ2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFJlc3VsdEZpbGVHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgCi17Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRSSVBMRV9UQUIgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIEdlbmVyYXRvci5UQUI7IAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBRVUFEX1RBQiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgR2VuZXJhdG9yLkRPVUJMRV9UQUI7Ci0gIAotICBwcml2YXRlIFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZDsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVHZW5lcmF0b3IgKCkKLSAgewotICAgICAgc3VwZXIoKTsKLSAgfQotCi0gICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gIH0KLQotICAvL3Rha2VzIGluIGEgYmVhbiBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgICBFbGVtZW50IGJlYW5FbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgQmVhbkVsZW1lbnQgYmVhbiA9IChCZWFuRWxlbWVudCliZWFuRWxlbWVudDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+IisgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUgcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhcIlVURi04XCIpOyAlPiIrIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIVE1MPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFRJVExFPlJlc3VsdDwvVElUTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIMT5SZXN1bHQ8L0gxPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8anNwOnVzZUJlYW4gaWQ9XCIiKyBnZXRTZXNzaW9uQmVhbklkKCkgKyAiXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCIiKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKGJlYW4uZ2V0TmFtZSgpICsgIlwiIC8+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgaWYgKHNldEVuZHBvaW50TWV0aG9kICE9IG51bGwgJiYgc2V0RW5kcG9pbnRNZXRob2QubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKCJpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoXCJlbmRwb2ludFwiKSAhPSBudWxsICYmIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiZW5kcG9pbnRcIikubGVuZ3RoKCkgPiAwKSIpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoZ2V0U2Vzc2lvbkJlYW5JZCgpKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIi4iKTsKLSAgICAgICAgaW50IGluZGV4ID0gc2V0RW5kcG9pbnRNZXRob2QuaW5kZXhPZignPycpOwotICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZC5zdWJzdHJpbmcoMCwgaW5kZXgpKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiKG5ldyAiKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZC5zdWJzdHJpbmcoaW5kZXgrMSwgc2V0RW5kcG9pbnRNZXRob2QubGVuZ3RoKCkpKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiZW5kcG9pbnRcIikpKTsiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZCk7Ci0gICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIihyZXF1ZXN0LmdldFBhcmFtZXRlcihcImVuZHBvaW50XCIpKTsiKTsKLSAgICAgICAgfQotICAgICAgICBmYnVmZmVyLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+Iik7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgfQotICAgICAgZmJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7IAotICAgICAgICAgICAgCi0gICAgICAvL2NhcnJ5IG9uIHdpdGggcmVndWxhciBnb3JwCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiU3RyaW5nIG1ldGhvZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwibWV0aG9kXCIpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpbnQgbWV0aG9kSUQgPSAwOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpZiAobWV0aG9kID09IG51bGwpIG1ldGhvZElEID0gLTE7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoImlmKG1ldGhvZElEICE9IC0xKSBtZXRob2RJRCA9IEludGVnZXIucGFyc2VJbnQobWV0aG9kKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7IAotICAgICAgZmJ1ZmZlci5hcHBlbmQoImJvb2xlYW4gZ290TWV0aG9kID0gZmFsc2U7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoInRyeSB7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoInN3aXRjaCAobWV0aG9kSUQpeyAiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgCi0gICAgICAvLyBnbyB0byB0aGUgbmV4dCBnZW5lcmF0b3IKLSAgICAgIE1ldGhvZFZpc2l0b3IgbWV0aG9kVmlzaXRvciA9IG5ldyBNZXRob2RWaXNpdG9yKCk7Ci0gICAgICBSZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IgcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgICByZXN1bHRGaWxlSGVscDFHZW5lcmF0b3Iuc2V0TnVtYmVyRmFjdG9yeShnZXROdW1iZXJGYWN0b3J5KCkpOwotICAgICAgcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLnNldENsaWVudEZvbGRlclBhdGgoZ2V0Q2xpZW50Rm9sZGVyUGF0aCgpKTsKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LHJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvcik7Ci0gICAgICBzZXROdW1iZXJGYWN0b3J5KHJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvci5nZXROdW1iZXJGYWN0b3J5KCkpOwotCi0gICAgICBmYnVmZmVyID0gcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIn0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7ICIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJleGNlcHRpb246IDwlPSBlICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoInJldHVybjsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpZighZ290TWV0aG9kKXsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgicmVzdWx0OiBOL0EiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0JPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSFRNTD4iKTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gc2V0RW5kcG9pbnRNZXRob2QgVGhlIHNldEVuZHBvaW50TWV0aG9kIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldEVuZHBvaW50TWV0aG9kKFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZCkKLSAgewotICAgIHRoaXMuc2V0RW5kcG9pbnRNZXRob2QgPSBzZXRFbmRwb2ludE1ldGhvZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNjc3ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlBhcmFtZXRlclZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5SZXR1cm5QYXJhbWV0ZXJWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkRhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgUmVzdWx0RmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IgZXh0ZW5kcyBSZXN1bHRGaWxlR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTF9TVEFURSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTkFMX1NUQVRFID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVRFTVAgPSAibXRlbXAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBCRUFOID0gIlByb3h5IjsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBidWZmZXIgU3RyaW5nQnVmZmVyIG9iamVjdCB0aGF0IHRoaXMgY29kZSBnZW5lcmF0b3Igd3JpdGVzIHRvIAotICAqLwotICBwdWJsaWMgUmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyKQotICB7Ci0gICAgICBzdXBlcihidWZmZXIpOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICogVmlzaXQgTWV0aG9kIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIFZpc2l0b3IKLSAgKiBAcGFyYW0gbWV0aG9kIG1ldGhvZCBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciAKLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgRWxlbWVudCBtZXRob2RFbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAKLQotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIGlmIChtZXRob2QuZ2V0TWV0aG9kT21taXNzaW9uKCkpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgIGZidWZmZXIuYXBwZW5kKCJjYXNlICIgKyBtZXRob2QuZ2V0TnVtYmVySUQoKSsgIjoiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIHZpc2l0SGVscGVyKG1ldGhvZCk7Ci0gICAgIAotICAgICBmYnVmZmVyLmFwcGVuZCgiYnJlYWs7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAKLSAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9ICAgCi0gIC8qKgotICAqIEhlbHBzIG91dCB0aGUgdmlzaXRvcgotICAqIEBwYXJhbSBtZXRob2QgbWV0aG9kIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIAotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdEhlbHBlciAoRWxlbWVudCBtZXRob2RFbGVtZW50KQotICB7Ci0KLSAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiZ290TWV0aG9kID0gdHJ1ZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIAotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICBSZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IgcmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgIHJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5zZXROdW1iZXJGYWN0b3J5KGdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgIFBhcmFtZXRlclZpc2l0b3IgcGFyYW1ldGVyVmlzaXRvciA9IG5ldyBQYXJhbWV0ZXJWaXNpdG9yKCk7Ci0gICAgIHBhcmFtZXRlclZpc2l0b3IucnVuKG1ldGhvZEVsZW1lbnQscmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yKTsKLSAgICAgZmJ1ZmZlciA9IHJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgc2V0TnVtYmVyRmFjdG9yeShyZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IuZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgLy8gd2UgbXVzdCBub3cgZ3JhYiB0aGUgc3RhdGUgZGF0YSBmcm9tIHRoZSByZXNpZGVudCB2ZWN0b3IKLSAgICAgc2V0UmVzaWRlbnRWZWN0b3IocmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yLmdldFJlc2lkZW50VmVjdG9yKCkpOwotCi0gICAgIAotICAgICAvL3RoZXJlIGlzIG5vIHJldHVybiB0eXBlIGlmIHZvaWQgb2NjdXJzICAgIAotICAgIAotICAgICAKLSAgICAgaWYgKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikpCi0gICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgZ2V0U2Vzc2lvbkJlYW5JZCgpICsgIi4iICttZXRob2QuZ2V0TmFtZSgpICsgIigiKTsKLQotICAgICBlbHNlewotICAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArIG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkgKyBHZW5lcmF0b3IuU1BBQ0UgKyBtZXRob2QuZ2V0TVVJRCgpICsgTVRFTVAgKyBHZW5lcmF0b3IuU1BBQ0UpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPSIgKyBHZW5lcmF0b3IuU1BBQ0UgKyBnZXRTZXNzaW9uQmVhbklkKCkgKyAiLiIgKyBtZXRob2QuZ2V0TmFtZSgpICsgIigiKTsKLSAgICAgfQotCi0gICAgIEVudW1lcmF0aW9uIGUgPSBmUmVzaWRlbnRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgICAgIGZidWZmZXIuYXBwZW5kKChTdHJpbmcpZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICBpZiAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiwiKTsgICAgCi0gICAgIH0KLSAgICAgZmJ1ZmZlci5hcHBlbmQoIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICBpZiAoIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikgJiYgIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5pc1ByaW1pdGl2ZSgpKXsKLSAgICAgICAgLy9pbiBjYXNlIG91ciByZXN1bHQgaXMgbnVsbAotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArIG1ldGhvZC5nZXRNVUlEKCkgKyAibXRlbXAgPT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JT0iICsgbWV0aG9kLmdldE1VSUQoKSArICJtdGVtcCAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgifWVsc2V7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICB9Ci0gICAgIAotICAgICAvL25vdyBsZXRzIGRpc3BsYXkgdGhlIHJldHVybiBiZWFuCi0gICAgIC8vIGlmIGl0IGlzIHNpbXBsZSB3ZSBkb250IG5lZWQgdG8gdXNlIHRoZSBnZW5lcmF0b3IKLSAgICAgCi0gICAgIGlmICghbWV0aG9kLmdldFJldHVyblBhcmFtZXRlckVsZW1lbnQoKS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKS5lcXVhbHMoInZvaWQiKSl7Ci0gICAgICAgIGlmIChtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuaXNTaW1wbGUoKSAKLSAgICAgICAgICAgfHwgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4obWV0aG9kLmdldFJldHVyblBhcmFtZXRlckVsZW1lbnQoKS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSkKLSAgICAgICAgICAgfHwgVHlwZUZhY3RvcnkuaXNTdGF0ZUxlc3NCZWFuKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKQotICAgICAgICAgICB8fCBUeXBlRmFjdG9yeS5pc1JlY29nbml6ZWRSZXR1cm5UeXBlKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKSl7Ci0gICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuZ2V0VHlwZU5hbWUoKSxtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldE1VSUQoKSk7Ci0gICAgICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLlR5cGVDb252ZXJzaW9uKG1ldGhvZC5nZXRNVUlEKCkgKyBNVEVNUCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0gICAgICAgICAgIGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yLnNldEluc3RhbmNlTmFtZShtZXRob2QuZ2V0TVVJRCgpICsgTVRFTVApOwotICAgICAgICAgICBpbnB1dEZpbGVIZWxwMkdlbmVyYXRvci5zZXRSZXR1cm5QYXJhbSh0cnVlKTsKLSAgICAgICAgICAgUmV0dXJuUGFyYW1ldGVyVmlzaXRvciByZXR1cm5QYXJhbWV0ZXJWaXNpdG9yID0gbmV3IFJldHVyblBhcmFtZXRlclZpc2l0b3IoKTsKLSAgICAgICAgICAgcmV0dXJuUGFyYW1ldGVyVmlzaXRvci5ydW4obWV0aG9kLGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yKTsKLSAgICAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgICAgfQotICAgICB9Ci0KLSAgICBpZiAoIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikgICYmICFtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuaXNQcmltaXRpdmUoKSkgZmJ1ZmZlci5hcHBlbmQoIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgIAotICAgIAotICB9Ci0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyMjgwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuUGFyYW1ldGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBSZXN1bHRGaWxlSGVscDJnZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHJpdmF0ZSBTdHJpbmcgZlR5cGVPd25lcklkOyAgCi0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBAcGFyYW0gYnVmZmVyIFN0cmluZ0J1ZmZlciBvYmplY3QgdGhhdCB0aGlzIGNvZGUgZ2VuZXJhdG9yIHdyaXRlcyB0byAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgKiBWaXNpdCBNZXRob2QgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoaXMgVmlzaXRvcgotICAqIEBwYXJhbSBQYXJhbWV0ZXIgcGFyYW1ldGVyIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgCi0KLSAgICAgUGFyYW1ldGVyRWxlbWVudCBwYXJhbWV0ZXJFbGVtZW50ID0gKFBhcmFtZXRlckVsZW1lbnQpb2JqZWN0OwotICAgICBwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCk7IAotICAgICBpZihwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuaXNTaW1wbGUoKSB8fCBUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuZ2V0TmFtZSgpKSl7ICAgICAgCi0gICAgICAgIC8vc3RhcnQgdGhlIGNvZGVnZW4KLSAgICAgICAgIC8vYXNrIHRoZSBkYXRhdHlwZSBmb3IgaXRzIHJlcXVlc3QgbGluZSwgaXQgbWF5IG5lZWQgbWFyayB1cCBvciBub3QuCi0gICAgICAgIC8vaWUgRm9yIHRoZSBzaW1wbGUgdHlwZXMgd2UgbmVlZCB0aGUgbWFyayB1cAotICAgICAgICAvL2ZvciB0aGUgZG9tIGVsZW1lbnQgd2UgY2FudCB1c2UgaXQuCi0gICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuZ2V0TmFtZSgpLHBhcmFtZXRlckVsZW1lbnQuZ2V0TVVJRCgpKTsKLSAgICAgICAgc2V0VHlwZU93bmVySWQoaWROYW1lKHBhcmFtZXRlckVsZW1lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmdldFJlcXVlc3RDb2RlKHBhcmFtZXRlckVsZW1lbnQuZ2V0TVVJRCgpLGdldFR5cGVPd25lcklkKCkpKTsKLSAgICAgfQotICAgICAgICAgCi0gICAgIC8vdmlzaXQgdGhlIHR5cGUgZ2VuZXJhdG9yCi0gICAgIFJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yIHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yKGZidWZmZXIpOyAKLSAgICAgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0TnVtYmVyRmFjdG9yeShnZXROdW1iZXJGYWN0b3J5KCkpOwotICAgICByZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5zZXRUeXBlT3duZXJJZChnZXRUeXBlT3duZXJJZCgpKTsKLSAgICAgVHlwZVZpc2l0b3IgVHlwZVZpc2l0b3IgPSBuZXcgVHlwZVZpc2l0b3IoKTsKLSAgICAgVHlwZVZpc2l0b3IucnVuKHBhcmFtZXRlckVsZW1lbnQscmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IpOwotICAgICBmYnVmZmVyID0gcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgIHNldE51bWJlckZhY3RvcnkocmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLmdldFJlc2lkZW50VmVjdG9yKCkuZmlyc3RFbGVtZW50KCk7Ci0gICAgIHB1dFJlc2lkZW50VmVjdG9yKG5hbWUpOyAKLSAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLQotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVPd25lcklkKCkKLSAgewotICAgICBpZiAoZlR5cGVPd25lcklkID09IG51bGwpIGZUeXBlT3duZXJJZCA9ICIiOyAKLSAgICAgcmV0dXJuIGZUeXBlT3duZXJJZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVPd25lcklkKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZlR5cGVPd25lcklkID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgaWROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIAkKLSAgICBTdHJpbmcgdW5pcXVlTnVtID0gU3RyaW5nLnZhbHVlT2YoZ2V0VW5pcXVlTnVtYmVyKCkpOwotICAgIFN0cmluZyBuZXdOYW1lID0gbmFtZS5yZXBsYWNlKCcuJywnMScpICsgIl8iICt1bmlxdWVOdW0gKyAiaWQiOwotICAgIHJldHVybiBuZXdOYW1lOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjBkODk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTAgICAxODA5NTIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNhbXBsZSBKU1AgZ2VuZXJhdG9yIGNob2tlcyBvbiBpbnRlcmZhY2VzIGFuZCBhYnN0cmFjdCBjbGFzc2VzCi0gKiAyMDA3MTExMCAgIDIwOTA4NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLkF0dHJpYnV0ZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFJlc3VsdEZpbGVIZWxwMmdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRGaWxlVHlwZUdlbmVyYXRvciBleHRlbmRzIFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0KLSAgcHVibGljIFN0cmluZyBmVHlwZUlkTmFtZTsKLSAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIGJ1ZmZlciBTdHJpbmdCdWZmZXIgb2JqZWN0IHRoYXQgdGhpcyBjb2RlIGdlbmVyYXRvciB3cml0ZXMgdG8gCi0gICovCi0gIHB1YmxpYyBSZXN1bHRGaWxlVHlwZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgfQotICAKLSAgLyoqCi0gICogVmlzaXQgTWV0aG9kIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIFZpc2l0b3IKLSAgKiBAcGFyYW0gUGFyYW1ldGVyIHBhcmFtZXRlciBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIAotICAqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICBFbGVtZW50IHR5cGVFbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICBUeXBlRWxlbWVudCB0eXBlID0gKFR5cGVFbGVtZW50KXR5cGVFbGVtZW50OyAgICAgIAotICAgICAvLyByaWdodCBub3cgd2Ugb25seSBoYXZlIHNpbXBsZSB0byB3b3JyeSBhYm91dAotICAgICBpZih0eXBlLmlzU2ltcGxlKCkgfHwgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4odHlwZS5nZXROYW1lKCkpKXsKLSAgICAgICAvLyBjcmVhdGUgdGhlIHR5cGUgdGhhdCByZXByZXNlbnRzIHRoZSBzaW1wbGUgdHlwZSBuYW1lCi0gICAgICAgRGF0YVR5cGUgZGF0YVR5cGUgPSBUeXBlRmFjdG9yeS5jcmVhdGVUeXBlKHR5cGUuZ2V0TmFtZSgpLHR5cGUuZ2V0T3duaW5nRWxlbWVudCgpLmdldE1VSUQoKSk7Ci0gIAotICAgICAgIFN0cmluZyBub2RlTmFtZSA9IGdldFR5cGVPd25lcklkKCkrICJUZW1wIjsKLSAgICAgICBpZighdHlwZS5pc1ByaW1pdGl2ZSgpKXsKLQkJICAKLQkJICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBHZW5lcmF0b3IuVEFCICsgdHlwZS5nZXROYW1lKCkgKyAiICIgKyBub2RlTmFtZSArICIgPSBudWxsOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsJICAgCQkgICAKLQkJICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiaWYoISIgKyBnZXRUeXBlT3duZXJJZCgpICsgIi5lcXVhbHMoXCJcIikpeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQkJICAgZmJ1ZmZlci5hcHBlbmQoZGF0YVR5cGUuc3RyaW5nQ29udmVyc2lvbigiIixub2RlTmFtZSxnZXRUeXBlT3duZXJJZCgpKSk7Ci0JCSAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7CQkgICAJICAgICAgIAotCSAgIH0KLSAgICAgICBlbHNlCi0gICAgCSAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLnN0cmluZ0NvbnZlcnNpb24odHlwZS5nZXROYW1lKCksbm9kZU5hbWUsZ2V0VHlwZU93bmVySWQoKSkpOwotCi0gICAgICAgcHV0UmVzaWRlbnRWZWN0b3Iobm9kZU5hbWUpOwotICAgICB9Ci0KLSAgICAgZWxzZSB7Ci0gICAgICAgLy9tdXN0IGJlIGNvbXBsZXgKLSAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlRWxlbWVudC5nZXROYW1lKCk7IAotICAgICAgIGZUeXBlSWROYW1lID0gaWROYW1lKHR5cGVOYW1lKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgaWYgKCFCb29sZWFuLlRSVUUuZXF1YWxzKHR5cGVFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoVHlwZUVsZW1lbnQuTk9OX0lOU1RBTlRJQUJMRSkpKSB7Ci0gICAgICAgCi0JICAgICAgIEF0dHJpYnV0ZVZpc2l0b3IgYXR0cmlidXRlVmlzaXRvciA9IG5ldyBBdHRyaWJ1dGVWaXNpdG9yKCk7Ci0JICAgICAgIFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciA9IG5ldyBSZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKGZidWZmZXIpOwotCSAgICAgICByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yLnNldE51bWJlckZhY3RvcnkoZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLQkgICAgICAgYXR0cmlidXRlVmlzaXRvci5ydW4odHlwZUVsZW1lbnQscmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcik7Ci0JICAgICAgIHNldE51bWJlckZhY3RvcnkocmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXROdW1iZXJGYWN0b3J5KCkpOwotCSAgICAgICBmYnVmZmVyID0gcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLQkKLQkgICAgICAgRmllbGRWaXNpdG9yIGZpZWxkVmlzaXRvciA9IG5ldyBGaWVsZFZpc2l0b3IoKTsKLQkgICAgICAgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMiA9IG5ldyBSZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKGZidWZmZXIpOwotCSAgICAgICByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXROdW1iZXJGYWN0b3J5KGdldE51bWJlckZhY3RvcnkoKSk7Ci0JICAgICAgIGZpZWxkVmlzaXRvci5ydW4odHlwZUVsZW1lbnQscmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIpOwotCSAgICAgICBzZXROdW1iZXJGYWN0b3J5KHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyLmdldE51bWJlckZhY3RvcnkoKSk7Ci0JICAgICAgIGZidWZmZXIgPSByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5nZXRTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgCi0JICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCSAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8anNwOnVzZUJlYW4gaWQ9XCIiICsgZlR5cGVJZE5hbWUgKyAiXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCIiICsgdHlwZU5hbWUgKyAiXCIgLz4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0JICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCSAgICAgICAKLQkgICAgICAgRW51bWVyYXRpb24gZSA9IHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuZ2V0UmVzaWRlbnRWZWN0b3IoKS5lbGVtZW50cygpOwotCSAgICAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKXsKLQkgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBmVHlwZUlkTmFtZSArICIuIiArIGUubmV4dEVsZW1lbnQoKSArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCSAgICAgICB9Ci0JCi0JICAgICAgIEVudW1lcmF0aW9uIGUyID0gcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0UmVzaWRlbnRWZWN0b3IoKS5lbGVtZW50cygpOwotCSAgICAgICB3aGlsZShlMi5oYXNNb3JlRWxlbWVudHMoKSl7Ci0JICAgICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgZlR5cGVJZE5hbWUgKyAiLiIgKyBlMi5uZXh0RWxlbWVudCgpICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0JICAgICAgIH0gCi0JICAgfQotICAgICAgIGVsc2UKLSAgICAJICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyB0eXBlTmFtZSArICIgIiArIGZUeXBlSWROYW1lICsgIiA9IG51bGw7IisgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgICAKLSAgICAgICAKLSAgICAgICBwdXRSZXNpZGVudFZlY3RvcihmVHlwZUlkTmFtZSk7Ci0gICAgICAgLy9lbmQgb2YgY2hhbmdlcwotICAgICAKLSAgICB9Ci0gICAgIAotICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfSAgIAotICAKLQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vVGVzdENsaWVudEZpbGVHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vVGVzdENsaWVudEZpbGVHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3MTRiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Rlc3RDbGllbnRGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgVGVzdENsaWVudEZpbGVnZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgVGVzdENsaWVudEZpbGVHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIHB1YmxpYyBTdHJpbmcgZk1ldGhvZE5hbWU7Ci0gIHB1YmxpYyBTdHJpbmcgZklucHV0TmFtZTsKLSAgcHVibGljIFN0cmluZyBmUmVzdWx0TmFtZTsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqCi0gICovCi0gIHB1YmxpYyBUZXN0Q2xpZW50RmlsZUdlbmVyYXRvciAoU3RyaW5nIGlucHV0cywgU3RyaW5nIG1ldGhvZHMsIFN0cmluZyByZXN1bHRzKQotICB7Ci0gICAgIHN1cGVyKCk7Ci0gICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gICAgIGZNZXRob2ROYW1lID0gbWV0aG9kczsKLSAgICAgZlJlc3VsdE5hbWUgPSByZXN1bHRzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RmlsZU5hbWVzKFN0cmluZyBpbnB1dHMsIFN0cmluZyBtZXRob2RzLCBTdHJpbmcgcmVzdWx0cykKLSAgewotICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gICAgZk1ldGhvZE5hbWUgPSBtZXRob2RzOwotICAgIGZSZXN1bHROYW1lID0gcmVzdWx0czsKLSAgfQotCi0gIC8vdGFrZXMgaW4gYSBiZWFuIG5vZGUKLSAgIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICAgewotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlQHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOFwiJT4iKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SFRNTD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEhFQUQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxUSVRMRT5XZWIgU2VydmljZXMgVGVzdCBDbGllbnQ8L1RJVExFPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0hFQUQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiIik7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZSQU1FU0VUICBDT0xTPVwiMjIwLCpcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZSQU1FIFNSQz1cIiIrIGZNZXRob2ROYW1lICsgIlwiIE5BTUU9XCJtZXRob2RzXCIgTUFSR0lOV0lEVEg9XCIxXCIgTUFSR0lOSEVJR0hUPVwiMVwiIFNDUk9MTElORz1cInllc1wiIEZSQU1FQk9SREVSPVwiMVwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8RlJBTUVTRVQgIFJPV1M9XCI4MCUsMjAlXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxGUkFNRSBTUkM9XCIiKyBmSW5wdXROYW1lICArICJcIiBOQU1FPVwiaW5wdXRzXCIgIE1BUkdJTldJRFRIPVwiMVwiIE1BUkdJTkhFSUdIVD1cIjFcIiBTQ1JPTExJTkc9XCJ5ZXNcIiBGUkFNRUJPUkRFUj1cIjFcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiU3RyaW5nQnVmZmVyIHJlc3VsdEpTUCA9IG5ldyBTdHJpbmdCdWZmZXIoXCIiKS5hcHBlbmQoZlJlc3VsdE5hbWUpLmFwcGVuZCgiXCIpOyIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJyZXN1bHRKU1AuYXBwZW5kKFwiP1wiKTsiKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiamF2YS51dGlsLkVudW1lcmF0aW9uIHJlc3VsdEVudW0gPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Iik7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgid2hpbGUgKHJlc3VsdEVudW0uaGFzTW9yZUVsZW1lbnRzKCkpIHsiKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiT2JqZWN0IHJlc3VsdE9iaiA9IHJlc3VsdEVudW0ubmV4dEVsZW1lbnQoKTsiKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgicmVzdWx0SlNQLmFwcGVuZChyZXN1bHRPYmoudG9TdHJpbmcoKSkuYXBwZW5kKFwiPVwiKS5hcHBlbmQocmVxdWVzdC5nZXRQYXJhbWV0ZXIocmVzdWx0T2JqLnRvU3RyaW5nKCkpKS5hcHBlbmQoXCImXCIpOyIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJ9IikuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+IikuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxGUkFNRSBTUkM9XCI8JT1yZXN1bHRKU1AudG9TdHJpbmcoKSU+XCIgTkFNRT1cInJlc3VsdFwiICBNQVJHSU5XSURUSD1cIjFcIiBNQVJHSU5IRUlHSFQ9XCIxXCIgU0NST0xMSU5HPVwieWVzXCIgRlJBTUVCT1JERVI9XCIxXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRlJBTUVTRVQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCi0KLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8Tk9GUkFNRVM+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxCT0RZPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJUaGUgV2ViIFNlcnZpY2VzIFRlc3QgQ2xpZW50IHJlcXVpcmVzIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9CT0RZPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L05PRlJBTUVTPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0ZSQU1FU0VUPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0hUTUw+Iik7Ci0KLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb21tYW5kL0dlbmVyYXRlUGFnZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvR2VuZXJhdGVQYWdlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWQ3Zjg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvR2VuZXJhdGVQYWdlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotCi0vKioKLSAqIE1vZlRvQmVhbk1vZGVsQ29tbWFuZAotICogQ3JlYXRpb24gZGF0ZTogKDQvMTAvMjAwMSAxMjo0MTo0OCBQTSkKLSAqIEBhdXRob3I6IEdpbGJlcnQgQW5kcmV3cwotICovCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVQYWdlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCQkKLXByaXZhdGUgTW9kZWwgbW9kZWxfOwotcHJpdmF0ZSBHZW5lcmF0b3IgZkdlbmVyYXRvcjsKLXByaXZhdGUgSUZpbGUgZklGaWxlOwotcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0XzsKLXByaXZhdGUgU3RyaW5nQnVmZmVyIGZTdHJpbmdCdWZmZXI7Ci0KLS8qKgotICogQnVpbGQgY29uc3RydWN0b3IgY29tbWVudC4KLSAqLwotcHVibGljIEdlbmVyYXRlUGFnZUNvbW1hbmQoKQotewotfQotCi0vKioKLSogQ29uc3RydWN0b3IKLSogVGhpcyBjb21tYW5kIHdpbGwgZ2VuZXJhdGUgY29kZSBmcm9tIGEgTW9kZWwKLSogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0byBiZSB0cmF2ZXJzZWQKLSogQHBhcmFtIGdlbmVyYXRvciBUaGUgY29kZSBnZW5lcmF0b3IgdG8gYmUgdXNlZAotKiBAcGFyYW0gcmVzb3VyY2UgdGhlIHJlc291cmNlIHRvIHBsYWNlIHRoZSBmaW5pc2hlZCBwcm9kdWN0Ci0qLwotcHVibGljIEdlbmVyYXRlUGFnZUNvbW1hbmQoUmVzb3VyY2VDb250ZXh0IGNvbnRleHQsIE1vZGVsIG1vZGVsLCBHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJRmlsZSBmaWxlKQotewotICBtb2RlbF8gPSBtb2RlbDsKLSAgZkdlbmVyYXRvciA9IGdlbmVyYXRvcjsKLSAgZklGaWxlID0gZmlsZTsKLSAgcmVzb3VyY2VDb250ZXh0XyA9IGNvbnRleHQ7Ci19Ci0KLXB1YmxpYyBNb2RlbCBnZXRKYXZhRGF0YU1vZGVsKCkKLXsKLSAgcmV0dXJuIG1vZGVsXzsKLX0KLQotLyoqCi0gKgotICovCi1wdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLXsKLSAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gIAotICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIHRyeSB7Ci0gICAgZkdlbmVyYXRvci52aXNpdChtb2RlbF8uZ2V0Um9vdEVsZW1lbnQoKSk7Ci0gICAgZlN0cmluZ0J1ZmZlciA9IGZHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgU3RyaW5nIHRlbXBTdHJpbmcgPSBmU3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgT3V0cHV0U3RyZWFtIGZpbGVSZXNvdXJjZSA9IEZpbGVSZXNvdXJjZVV0aWxzLm5ld0ZpbGVPdXRwdXRTdHJlYW0ocmVzb3VyY2VDb250ZXh0XywgZklGaWxlLmdldEZ1bGxQYXRoKCksIG1vbml0b3IsIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotICAgIC8vUHJpbnRTdHJlYW0gcHMgPSBuZXcgUHJpbnRTdHJlYW0oZmlsZVJlc291cmNlKTsKLSAgICAvL3BzLnByaW50KHRlbXBTdHJpbmcpOwotICAgIE91dHB1dFN0cmVhbVdyaXRlciBvc3cgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKGZpbGVSZXNvdXJjZSwiVVRGLTgiKTsKLSAgICBvc3cud3JpdGUodGVtcFN0cmluZywwLGZTdHJpbmdCdWZmZXIubGVuZ3RoKCkpOyAgCi0gICAgb3N3LmNsb3NlKCk7Ci0gICAgZmlsZVJlc291cmNlLmNsb3NlKCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9leGMpIHsKLSAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBpb2V4YyApOwotICAJcmV0dXJuIHN0YXR1czsKLSAgfQotfQotCi1wdWJsaWMgdm9pZCBzZXRSb290RWxlbWVudChFbGVtZW50IHJvb3RFbGVtZW50KQotewotfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvSmF2YVRvTW9kZWxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb21tYW5kL0phdmFUb01vZGVsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDA4MTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvSmF2YVRvTW9kZWxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yYWN0aW9ucy5KYXZhTW9mQmVhblZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZCZWFuVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uQm9vbGVhblNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY29tbWFuZHMgdGhhdCBuZWVkIHRvIHJlcG9ydCBwcm9ncmVzcwotKiBhbmQgc3RhdHVzIGR1cmluZyBhbmQgYWZ0ZXIgdGhlaXIgZXhlY3V0aW9uLiBUaGlzIGNsYXNzIGV4dGVuZHMKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5BYnN0cmFjdENvbW1hbmQgQWJzdHJhY3RDb21tYW5kfQotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0qIHdpdGggbWV0aG9kcyB0byB7QGxpbmsgI3NldFByb2dyZXNzTW9uaXRvciBzZXR9Ci0qIGFuZCB7QGxpbmsgI2dldFByb2dyZXNzTW9uaXRvciBnZXR9IGEgcHJvZ3Jlc3MgbW9uaXRvciwKLSogYW5kIHRvIGdldCBhIHN0YXR1cyBvYmplY3Qge0BsaW5rICNnZXRSZWFkeVN0YXR1cyBiZWZvcmV9Ci0qIG9yIHtAbGluayAjZ2V0UmVzdWx0U3RhdHVzIGFmdGVyfSBleGVjdXRpb24uCi0qIDxwPgotKiBOb3RlIHRoYXQgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHByb3ZpZGluZyBhbgotKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IgSVByb2dyZXNzTW9uaXRvcn0KLSogcmVzdHMgd2l0aCBmcmFtZXdvcmtzIHRoYXQgY29uc3RydWN0IG9yIHJ1biBQcm9ncmVzc0NvbW1hbmQgb2JqZWN0cywKLSogd2hlcmVhcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgcHJvdmlkaW5nIGFuCi0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotKiBvYmplY3QgbGllcyB3aXRoIHRoZSBzdWJjbGFzc2VzIG9mIFByb2dyZXNzQ29tbWFuZC4KLSogU3ViY2xhc3NlcyBtdXN0IGZvbGxvdyB0aGUgcnVsZXMgZGVzY3JpYmVkIGZvcgotKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkFic3RyYWN0Q29tbWFuZCBBYnN0cmFjdENvbW1hbmR9LgotKi8KLXB1YmxpYyBjbGFzcyBKYXZhVG9Nb2RlbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0gIHByaXZhdGUgQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLSAgcHJpdmF0ZSBKYXZhQ2xhc3MgamF2YUNsYXNzOwotICBwcml2YXRlIE1vZGVsIG1vZGVsOwotICBwcml2YXRlIEVsZW1lbnQgcGFyZW50RWxlbWVudDsKLSAgCi0gIHB1YmxpYyBKYXZhVG9Nb2RlbENvbW1hbmQgKCkKLSAgewotICB9Ci0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBjcmVhdGVKYXZhUmVmbGVjdGlvbihJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIGphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCA9IG5ldyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQoKTsKLSAgICBqYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuc2V0Q2xpZW50UHJvamVjdChjbGllbnRQcm9qZWN0KTsKLSAgICBqYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuc2V0UHJveHlCZWFuKHByb3h5QmVhbik7Ci0gICAgamF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAvL2phdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZC5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgc3RhdHVzID0gamF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwpOwotICAgIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLmdldEphdmFDbGFzcygpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICAvKioKLSAgKiBUaGUgTW9kZWwgdGhhdCB3YXMgY3JlYXRlZCBmcm9tIHRoaXMgamF2YW1vZgotICAqIEByZXR1cm4gTW9kZWwgVGhlIGRhdGEgbW9kZWwgdGhhdCB3YXMgY3JlYXRlZAotICAqKi8KLSAgcHVibGljIE1vZGVsIGdldEphdmFEYXRhTW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIG1vZGVsOwotICB9Ci0KLSAgLyoqCi0gICogQnVpbGQgdGhlIGRhdGFtb2RlbCBmcm9tIHRoZSBtb2YKLSAgKi8KLSAgcHVibGljIElTdGF0dXMgYnVpbGRNb2RlbEZyb21Nb2YgKElFbnZpcm9ubWVudCBlbnYpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgCQotICAJQ2hvaWNlIE9LQ2hvaWNlID0gbmV3IENob2ljZSgnTycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfT0ssIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fT0spOwotICAJQ2hvaWNlIENhbmNlbENob2ljZSA9IG5ldyBDaG9pY2UoJ0MnLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX0NBTkNFTCwgQ29uc3VtcHRpb25NZXNzYWdlcy5ERVNDUklQVElPTl9DQU5DRUwpOwotICAJCi0gICAgLy8gd2UgY291bGQgaGF2ZSBvbmUgb2YgdGhyZWUgY2FzZXM6Ci0gICAgLy8xLiBUaGUgbW9kZWwgaXMgbnVsbCBtZWFuaW5nIHdlIHdhbnQgYW5kIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBudWxsLCBtZWFuaW5nIHdlIHdhbnQgdG8KLSAgICAvLyAgIGNyZWF0ZSBhIGJyYW5kIG5ldyBtb2RlbCBhbmQgbWFrZSB0aGlzIGJlYW4gaXRzIHJvb3QKLSAgICAvLzIuIFRoZSBtb2RlbCBpcyBudWxsIGJ1dCB0aGUgcGFyZW50RWxlbWVudCBpcyBub3QsIG1lYW5pbmcgd2Ugd2FudCB0byBhZGQgdGhlIEJlYW4gdG8gdGhlCi0gICAgLy8gICBnaXZlbiBwYXJlbnQgZWxlbWVudAotICAgIC8vMy4gVGhlIG1vZGVsIGlzIG5vdCBudWxsIGhvd2V2ZXIgdGhlIHBhcmVudEVsZW1lbnQgaXMsIG1lYW5pbmcgd2Ugd2FudCB0byBhZGQgdGhpcyBCZWFuIHRvCi0gICAgLy8gICBUaGlzIG1vZGVsIGJ1dCBkb250IGF0dGFjaCBpdCB0byBhbnl0aGluZwotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgICBpZihtb2RlbCA9PSBudWxsICYmIHBhcmVudEVsZW1lbnQgPT0gbnVsbCl7Ci0gICAgICAgICBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gYmVhblZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKGNsaWVudFByb2plY3QsbWV0aG9kcywgZW52KTsKLSAgICAgICAgIC8vYmVhblZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotCSAgICAgSmF2YU1vZkJlYW5WaXNpdG9yIGJlYW5WaXNpdG9yID0gbmV3IEphdmFNb2ZCZWFuVmlzaXRvcigpOwotICAgICAgICAgc3RhdHVzID0gYmVhblZpc2l0b3IucnVuKGphdmFDbGFzcyxiZWFuVmlzaXRvckFjdGlvbik7Ci0gICAgICAgICAvLwotICAgICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgICAgIAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgICAgIHsKLSAgICAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICAJCi0gICAgICAgICB9Ci0gICAgICAgICAvLwotICAgICAgICAgbW9kZWwgPSBiZWFuVmlzaXRvckFjdGlvbi5nZXRNb2RlbCgpOwotCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChtb2RlbCA9PSBudWxsICYmIHBhcmVudEVsZW1lbnQgIT0gbnVsbCl7Ci0gICAgICAgICBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gYmVhblZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKHBhcmVudEVsZW1lbnQsY2xpZW50UHJvamVjdCwgZW52KTsKLSAgICAgICAgIC8vYmVhblZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotCSAgICAgSmF2YU1vZkJlYW5WaXNpdG9yIGJlYW5WaXNpdG9yID0gbmV3IEphdmFNb2ZCZWFuVmlzaXRvcigpOwotICAgICAgICAgc3RhdHVzID0gYmVhblZpc2l0b3IucnVuKGphdmFDbGFzcyxiZWFuVmlzaXRvckFjdGlvbik7Ci0gICAgICAgICAvLwotICAgICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgICAgIAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgICAgIHsKLSAgICAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICAJCi0gICAgICAgICB9Ci0gICAgICAgICAvLyAgICAgICAgIAotICAgICAgICAgbW9kZWwgPSBiZWFuVmlzaXRvckFjdGlvbi5nZXRNb2RlbCgpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgICBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gYmVhblZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKG1vZGVsLGNsaWVudFByb2plY3QsIGVudik7Ci0gICAgICAgICAvL2JlYW5WaXNpdG9yQWN0aW9uLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLQkgICAgIEphdmFNb2ZCZWFuVmlzaXRvciBiZWFuVmlzaXRvciA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3IoKTsKLSAgICAgICAgIHN0YXR1cyA9IGJlYW5WaXNpdG9yLnJ1bihqYXZhQ2xhc3MsYmVhblZpc2l0b3JBY3Rpb24pOwotICAgICAgICAgLy8KLSAgICAgICAgIGludCBzZXZlcml0eSA9IHN0YXR1cy5nZXRTZXZlcml0eSgpOyAKLSAgICAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgICAKLSAgICAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgICAgICB7Ci0gICAgICAgICAgIENob2ljZSByZXN1bHQgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICAgICB7Ci0gICAgICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICAgICAgIH0KLSAgICAgICAgICAgCQotICAgICAgICAgfQotICAgICAgICAgLy8gICAgICAgICAKLSAgICAgICAgIG1vZGVsID0gYmVhblZpc2l0b3JBY3Rpb24uZ2V0TW9kZWwoKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgamF2YSBtb2RlbCBmcm9tIHRoZSByZXNvdXJjZSB0aGVuCi0gICogYnVpbGQgdGhlIG1vZGVsIGZyb20gdGhlIG1vZgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpZihjbGllbnRQcm9qZWN0ID09IG51bGwpIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gIAlzdGF0dXMgPSBjcmVhdGVKYXZhUmVmbGVjdGlvbihlbnYsIG1vbml0b3IpOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKSByZXR1cm4gc3RhdHVzOwotICAgIHRyeXsKLSAgICAgIHN0YXR1cyA9IGJ1aWxkTW9kZWxGcm9tTW9mKGVudik7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH1jYXRjaChDb3JlRXhjZXB0aW9uIGV4Yyl7Ci0gICAgICBJU3RhdHVzIGVtYmVkZGVkU3RhdHVzID0gZXhjLmdldFN0YXR1cygpOwotICAgICAgc3RhdHVzID0gZW1iZWRkZWRTdGF0dXM7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMpCi0gIHsKLSAgCXRoaXMubWV0aG9kcyA9ICBtZXRob2RzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KQotICB7Ci0gIAl0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbGVtZW50KEVsZW1lbnQgcGFyZW50RWxlbWVudCkKLSAgewotICAJdGhpcy5wYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudDsKLSAgfQotICAgICAKLSAgcHVibGljIHZvaWQgc2V0UHJveHlCZWFuKFN0cmluZyBwcm94eUJlYW4pCi0gIHsKLSAgCXRoaXMucHJveHlCZWFuID0gcHJveHlCZWFuOwotICB9Ci0KLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1vbi9TYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1vbi9TYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRmNGIwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb21tb24vU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgUHJvcGVydHlEZXNjcmlwdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIHByaXZhdGUgTWV0aG9kIGZSZWFkTWV0aG9kOwotICBwcml2YXRlIE1ldGhvZCBmV3JpdGVNZXRob2Q7Ci0gIHByaXZhdGUgU3RyaW5nIGZQcm9wZXJ0eU5hbWU7Ci0gIHByaXZhdGUgSmF2YUhlbHBlcnMgZlByb3BlcnR5VHlwZTsgCi0gIHByaXZhdGUgYm9vbGVhbiBmU3RhdGljOwotICAKLSAgLyoKLSAgKiBDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcgbmFtZSkKLSAgewotICAgIGZQcm9wZXJ0eU5hbWUgPSBuYW1lOyAKLSAgfQotCi0gIC8qCi0gICogc2V0IHRoZSBSZWFkTWV0aG9kCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFJlYWRNZXRob2QoTWV0aG9kIHJlYWRNZXRob2QpCi0gIHsKLSAgICBmUmVhZE1ldGhvZCA9IHJlYWRNZXRob2Q7Ci0gIH0KLQotICAgLyoKLSAgKiBnZXQgdGhlIFJlYWRNZXRob2QgCi0gICovCi0gIHB1YmxpYyBNZXRob2QgZ2V0UmVhZE1ldGhvZCgpCi0gIHsKLSAgICByZXR1cm4gZlJlYWRNZXRob2Q7Ci0gIH0KLQotICAvKgotICAqIHNldCB0aGUgd3JpdGVNZXRob2QKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3JpdGVNZXRob2QoTWV0aG9kIHdyaXRlTWV0aG9kKQotICB7Ci0gICAgZldyaXRlTWV0aG9kID0gd3JpdGVNZXRob2Q7Ci0gIH0KLQotICAgLyoKLSAgKiBnZXQgdGhlIHdyaXRlTWV0aG9kIAotICAqLwotICBwdWJsaWMgTWV0aG9kIGdldFdyaXRlTWV0aG9kKCkKLSAgewotICAgIHJldHVybiBmV3JpdGVNZXRob2Q7Ci0gIH0KLQotICAvKgotICAqIHNldCB0aGUgcHJvcGVydHlOYW1lCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmUHJvcGVydHlOYW1lPSBuYW1lOwotICB9Ci0KLSAgIC8qCi0gICogZ2V0IHRoZSBwcm9wZXJ0eU5hbWUKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHlOYW1lOwotICB9Ci0KLSAgLyoKLSAgKiBzZXQgdGhlIFByb3BlcnR5VHlwZQotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eVR5cGUoSmF2YUhlbHBlcnMgcHJvcGVydHlUeXBlKQotICB7Ci0gICAgZlByb3BlcnR5VHlwZSA9IHByb3BlcnR5VHlwZTsKLSAgfQotCi0gICAvKgotICAqIGdldCB0aGUgUHJvcGVydHlUeXBlIAotICAqLwotICBwdWJsaWMgSmF2YUhlbHBlcnMgZ2V0UHJvcGVydHlUeXBlKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHlUeXBlOwotICB9Ci0gICAgICAKLSAgcHVibGljIGJvb2xlYW4gaXNmU3RhdGljKCkKLSAgewotICAJcmV0dXJuIGZTdGF0aWM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRmU3RhdGljKGJvb2xlYW4gZlN0YXRpYykKLSAgewotICAgIHRoaXMuZlN0YXRpYyA9IGZTdGF0aWM7CQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL0lXU0ZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi93c2ZpbmRlci9JV1NGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VhN2ZmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL0lXU0ZpbmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElXU0ZpbmRlcgotewotICBwdWJsaWMgU3RyaW5nIGdldElEKCk7Ci0gIHB1YmxpYyB2b2lkIHNldElEKFN0cmluZyBpZCk7Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKTsKLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpOwotCi0gIHB1YmxpYyBMaXN0IGZpbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvTGl2ZVdTRExGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvTGl2ZVdTRExGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU2MTRiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL0xpdmVXU0RMRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ud3NmaW5kZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIExpdmVXU0RMRmlsdGVyIGV4dGVuZHMgVGhyZWFkCi17Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkxfOwotICBwcml2YXRlIGJvb2xlYW4gZmluaXNoXzsKLSAgcHJpdmF0ZSBib29sZWFuIGxpdmVfOwotCi0gIHB1YmxpYyBMaXZlV1NETEZpbHRlcihTdHJpbmcgd3NkbFVSTCkKLSAgewotICAgIHdzZGxVUkxfID0gd3NkbFVSTDsKLSAgICBmaW5pc2hfID0gZmFsc2U7Ci0gICAgbGl2ZV8gPSBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFVSTCgpCi0gIHsKLSAgICByZXR1cm4gd3NkbFVSTF87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaCgpCi0gIHsKLSAgICByZXR1cm4gZmluaXNoXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETExpdmUoKQotICB7Ci0gICAgcmV0dXJuIGxpdmVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGxpdmVfID0gdmFsaWRhdGVXU0RMKCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBsaXZlXyA9IGZhbHNlOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgZmluaXNoXyA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlV1NETCgpIHRocm93cyBXU0RMRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gIAlXZWJTZXJ2aWNlc1BhcnNlckV4dCBwYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvblZlcmJvc2Uod3NkbFVSTF8pOwotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLSAgICBJdGVyYXRvciBzZXJ2aWNlSXRlcmF0b3IgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChzZXJ2aWNlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKXNlcnZpY2VJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICBJdGVyYXRvciBwb3J0SXRlcmF0b3IgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKHBvcnRJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXBvcnRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgSXRlcmF0b3IgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBpZiAoKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHx8IChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi93c2ZpbmRlci9XU0ZpbmRlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL1dTRmluZGVyUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJiZjI3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL1dTRmluZGVyUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci0KLXB1YmxpYyBjbGFzcyBXU0ZpbmRlclJlZ2lzdHJ5Ci17Ci0gIHByaXZhdGUgc3RhdGljIFdTRmluZGVyUmVnaXN0cnkgaW5zdGFuY2VfOwotICBwcml2YXRlIFZlY3RvciB3c2ZpbmRlcnNfOwotCi0gIHByaXZhdGUgV1NGaW5kZXJSZWdpc3RyeSgpCi0gIHsKLSAgICB3c2ZpbmRlcnNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICogQHJldHVybiBBIHNpbmdsZXRvbiBXU0ZpbmRlclJlZ2lzdHJ5IG9iamVjdC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0ZpbmRlclJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgV1NGaW5kZXJSZWdpc3RyeSgpOwotICAgICAgaW5zdGFuY2VfLmluaXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGluaXQoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHBsdWdpblJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnRWxlbWVudHMgPSBwbHVnaW5SZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKCJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24iLCAid3NmaW5kZXIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gY29uZmlnRWxlbWVudHNbaV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElXU0ZpbmRlcikKLSAgICAgICAgewotICAgICAgICAgIElXU0ZpbmRlciB3c2ZpbmRlciA9IChJV1NGaW5kZXIpb2JqZWN0OwotICAgICAgICAgIHdzZmluZGVyLnNldElEKGNvbmZpZ0VsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgiaWQiKSk7Ci0gICAgICAgICAgd3NmaW5kZXIuc2V0TmFtZShjb25maWdFbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSk7Ci0gICAgICAgICAgd3NmaW5kZXIuc2V0RGVzY3JpcHRpb24oY29uZmlnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlKCJkZXNjcmlwdGlvbiIpKTsKLSAgICAgICAgICB3c2ZpbmRlcnNfLmFkZCh3c2ZpbmRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFdTRmluZGVycygpCi0gIHsKLSAgICByZXR1cm4gd3NmaW5kZXJzXzsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0V2ViU2VydmljZXMoKQotICB7Ci0gICAgTGlzdCB3cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBMaXN0IHdzRmluZGVycyA9IGdldFdTRmluZGVycygpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c0ZpbmRlcnMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBJV1NGaW5kZXIgd3NGaW5kZXIgPSAoSVdTRmluZGVyKWl0Lm5leHQoKTsKLSAgICAgIHdzLmFkZEFsbCh3c0ZpbmRlci5maW5kKCkpOwotICAgIH0KLSAgICByZXR1cm4gd3M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Eb21FbGVtZW50SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvRG9tRWxlbWVudEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2VhMmJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Eb21FbGVtZW50SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnV0aWw7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cmZ3Q7UHJlZmVyZW5jZXMmZ3Q7SmF2YSZndDtDb2RlIEdlbmVyYXRpb24mZ3Q7Q29kZSBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIERvbUVsZW1lbnRIZWxwZXIgewotCi0KLSAgcHVibGljIHN0YXRpYyBvcmcudzNjLmRvbS5FbGVtZW50IGNyZWF0ZURvbUVsZW1lbnRGcm9tWE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcgeG1sU3RyaW5nICkKLSAgewotICAgIGphdmEuaW8uU3RyaW5nUmVhZGVyIHN0cmluZ1JlYWRlciA9IG5ldyBqYXZhLmlvLlN0cmluZ1JlYWRlcih4bWxTdHJpbmcpOyAKLSAgICBvcmcueG1sLnNheC5JbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBvcmcueG1sLnNheC5JbnB1dFNvdXJjZShzdHJpbmdSZWFkZXIpOyAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRvY0J1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBkb2NCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZG9jQnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0gICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZG9tV3JpdGVyKG9yZy53M2MuZG9tLk5vZGUgbm9kZSxqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgIGlmICggbm9kZSA9PSBudWxsICkgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLQlpbnQgdHlwZSA9IG5vZGUuZ2V0Tm9kZVR5cGUoKTsKLQlzd2l0Y2ggKCB0eXBlICkgewotCSAgY2FzZSBvcmcudzNjLmRvbS5Ob2RlLkRPQ1VNRU5UX05PREU6IHsKLQkgIGJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4iKSArICI8YnI+Iik7Ci0JICBkb21Xcml0ZXIoKChvcmcudzNjLmRvbS5Eb2N1bWVudClub2RlKS5nZXREb2N1bWVudEVsZW1lbnQoKSxidWZmZXIpOwotCSAgYnJlYWs7Ci0JfQotCSAgY2FzZSBvcmcudzNjLmRvbS5Ob2RlLkVMRU1FTlRfTk9ERTogewotCSAgYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIjwiICsgbm9kZS5nZXROb2RlTmFtZSgpKSk7Ci0JICBvcmcudzNjLmRvbS5BdHRyIGF0dHJzW10gPSBzb3J0QXR0cmlidXRlcyhub2RlLmdldEF0dHJpYnV0ZXMoKSk7Ci0JICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKyApIHsKLQkgICAgb3JnLnczYy5kb20uQXR0ciBhdHRyID0gYXR0cnNbaV07Ci0JICAgIGJ1ZmZlci5hcHBlbmQoIiAiICsgYXR0ci5nZXROb2RlTmFtZSgpICsgIj1cIiIgKyBKc3BVdGlscy5tYXJrdXAoYXR0ci5nZXROb2RlVmFsdWUoKSkgKyAiXCIiKTsKLQkgIH0KLQkgICAgYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIj4iKSk7Ci0JICAgIG9yZy53M2MuZG9tLk5vZGVMaXN0IGNoaWxkcmVuID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JICAgIGlmICggY2hpbGRyZW4gIT0gbnVsbCApIHsKLQkgICAgICBpbnQgbGVuID0gY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7Ci0JCSAgZm9yICggaW50IGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7Ci0JCSAgICBpZigoKG9yZy53M2MuZG9tLk5vZGUpY2hpbGRyZW4uaXRlbShpKSkuZ2V0Tm9kZVR5cGUoKSA9PSBvcmcudzNjLmRvbS5Ob2RlLkVMRU1FTlRfTk9ERSkKLQkJCSAgYnVmZmVyLmFwcGVuZCgiPGJyPiIpOwotCQkJZG9tV3JpdGVyKGNoaWxkcmVuLml0ZW0oaSksYnVmZmVyKTsKLQkJICB9Ci0JCX0KLQkJYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIjwvIiArIG5vZGUuZ2V0Tm9kZU5hbWUoKSArICI+IikpOwotCQlicmVhazsKLSAgICAgIH0KLQkgIGNhc2Ugb3JnLnczYy5kb20uTm9kZS5FTlRJVFlfUkVGRVJFTkNFX05PREU6IHsKLQkgICAgb3JnLnczYy5kb20uTm9kZUxpc3QgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQkgICAgaWYgKCBjaGlsZHJlbiAhPSBudWxsICkgewotCQkgIGludCBsZW4gPSBjaGlsZHJlbi5nZXRMZW5ndGgoKTsKLQkJICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKyApCi0JICAgICAgewotCQkgICAgYnVmZmVyLmFwcGVuZChjaGlsZHJlbi5pdGVtKGkpKTsKLQkJICB9Ci0JCX0KLQkJYnJlYWs7Ci0JICB9Ci0JICBjYXNlIG9yZy53M2MuZG9tLk5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFOiB7Ci0JICAgIGJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKG5vZGUuZ2V0Tm9kZVZhbHVlKCkpKTsKLQkgICAgYnJlYWs7Ci0gICAgICB9Ci0JICBjYXNlIG9yZy53M2MuZG9tLk5vZGUuVEVYVF9OT0RFOnsKLQkgICAgYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAobm9kZS5nZXROb2RlVmFsdWUoKSkpOwotCSAgICBicmVhazsKLQkgIH0KLQkgIGNhc2Ugb3JnLnczYy5kb20uTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6ewotCQlidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgiPD8iKSk7Ci0JCWJ1ZmZlci5hcHBlbmQobm9kZS5nZXROb2RlTmFtZSgpKTsKLQkJU3RyaW5nIGRhdGEgPSBub2RlLmdldE5vZGVWYWx1ZSgpOwotCQlpZiAoIGRhdGEgIT0gbnVsbCAmJiBkYXRhLmxlbmd0aCgpID4gMCApewotCSAgICAgIGJ1ZmZlci5hcHBlbmQoIiAiKTsKLQkJICBidWZmZXIuYXBwZW5kKGRhdGEpOwotCQl9Ci0JCWJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKCI/PiIpKTsKLQkJICBicmVhazsKLQkJfQotCSAgfQotCSAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotICAgIH0KLSAKLQlwdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLkF0dHJbXSBzb3J0QXR0cmlidXRlcyhvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXAgYXR0cnMpCi0JewotCSAgaW50IGxlbiA9IChhdHRycyAhPSBudWxsKSA/IGF0dHJzLmdldExlbmd0aCgpIDogMDsKLQkgIG9yZy53M2MuZG9tLkF0dHIgYXJyYXlbXSA9IG5ldyBvcmcudzNjLmRvbS5BdHRyW2xlbl07Ci0JICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKyApewotCSAgIGFycmF5W2ldID0gKG9yZy53M2MuZG9tLkF0dHIpYXR0cnMuaXRlbShpKTsKLQkgIH0KLQkgIGZvciAoIGludCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKyApIHsKLQkgICAgU3RyaW5nIG5hbWUgID0gYXJyYXlbaV0uZ2V0Tm9kZU5hbWUoKTsKLQkgICAgaW50IGluZGV4ID0gaTsKLQkgICAgZm9yICggaW50IGogPSBpICsgMTsgaiA8IGxlbjsgaisrICkgewotCSAgICAgIFN0cmluZyBjdXJOYW1lID0gYXJyYXlbal0uZ2V0Tm9kZU5hbWUoKTsKLQkJICBpZiAoIGN1ck5hbWUuY29tcGFyZVRvKG5hbWUpIDwgMCApIHsKLQkJICAgIG5hbWUgID0gY3VyTmFtZTsKLQkJCWluZGV4ID0gajsKLQkJICB9Ci0JCX0KLQkJaWYgKCBpbmRleCAhPSBpICkgewotCQkgIG9yZy53M2MuZG9tLkF0dHIgdGVtcCA9IGFycmF5W2ldOwotCQkgIGFycmF5W2ldID0gYXJyYXlbaW5kZXhdOwotCQkgIGFycmF5W2luZGV4XSA9IHRlbXA7Ci0JCX0KLQkgIH0KLQkgIHJldHVybiAoYXJyYXkpOwotICAgIH0KLSAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL0pzcFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvSnNwVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJiOTAxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvSnNwVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbDsKLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cmZ3Q7UHJlZmVyZW5jZXMmZ3Q7SmF2YSZndDtDb2RlIEdlbmVyYXRpb24mZ3Q7Q29kZSBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIEpzcFV0aWxzIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBtYXJrdXAoU3RyaW5nIHRleHQpIHsKLQkJCWlmICh0ZXh0ID09IG51bGwpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgaSsrKSB7Ci0JCQkJY2hhciBjID0gdGV4dC5jaGFyQXQoaSk7Ci0JCQkJc3dpdGNoIChjKSB7Ci0JCQkJCWNhc2UgJzwnOgotCQkJCQkJYnVmZmVyLmFwcGVuZCgiJmx0OyIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgJyYnOgotCQkJCQkJYnVmZmVyLmFwcGVuZCgiJmFtcDsiKTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlICc+JzoKLQkJCQkJCWJ1ZmZlci5hcHBlbmQoIiZndDsiKTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlICciJzoKLQkJCQkJCWJ1ZmZlci5hcHBlbmQoIiZxdW90OyIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQlidWZmZXIuYXBwZW5kKGMpOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Tb2FwRWxlbWVudEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50SGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MDMwMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgICAxMjM5NjMgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICovCi1wdWJsaWMgY2xhc3MgU29hcEVsZW1lbnRIZWxwZXIKLXsKLQlwdWJsaWMgc3RhdGljIGphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50IGNyZWF0ZVNPQVBFbGVtZW50RnJvbVhNTFN0cmluZyhTdHJpbmcgeG1sU3RyaW5nKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbgotCXsKLQkJamF2YS5pby5TdHJpbmdSZWFkZXIgc3RyaW5nUmVhZGVyID0gbmV3IGphdmEuaW8uU3RyaW5nUmVhZGVyKHhtbFN0cmluZyk7IAotCQlvcmcueG1sLnNheC5JbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBvcmcueG1sLnNheC5JbnB1dFNvdXJjZShzdHJpbmdSZWFkZXIpOyAKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJU29hcEVsZW1lbnRTYXhIYW5kbGVyIGhhbmRsZXIgPSBuZXcgU29hcEVsZW1lbnRTYXhIYW5kbGVyKCk7Ci0JCXBhcnNlci5wYXJzZShpbnB1dFNvdXJjZSxoYW5kbGVyKTsKLQkJcmV0dXJuIGhhbmRsZXIuZ2V0U09BUEVsZW1lbnQoKTsgICAgCi0JfQotCi0JcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIHNvYXBFbGVtZW50V3JpdGVyKGphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50IG5vZGUsamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBidWZmZXIpCi0JewotCQlpZiAobm9kZSA9PSBudWxsICkgewotCQkJcmV0dXJuICIiOwotCQl9Ci0JCQotCQlidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgiPCIgKyBub2RlLmdldEVsZW1lbnROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpKTsKLQkJamF2YS51dGlsLkl0ZXJhdG9yIGF0dHJzID0gbm9kZS5nZXRBbGxBdHRyaWJ1dGVzKCk7Ci0JCXdoaWxlKGF0dHJzLmhhc05leHQoKSkgewotCQkJamF2YXgueG1sLnNvYXAuTmFtZSBhdHRyID0gKGphdmF4LnhtbC5zb2FwLk5hbWUpYXR0cnMubmV4dCgpOwotCQkJYnVmZmVyLmFwcGVuZCgiICIgKyBhdHRyLmdldFF1YWxpZmllZE5hbWUoKSArICI9XCIiICsgSnNwVXRpbHMubWFya3VwKG5vZGUuZ2V0QXR0cmlidXRlVmFsdWUoYXR0cikpICsgIlwiIik7Ci0JCX0KLQkJYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIj4iKSk7Ci0JCWphdmEudXRpbC5JdGVyYXRvciBjaGlsZHJlbiA9IG5vZGUuZ2V0Q2hpbGRFbGVtZW50cygpOwotCQlpZiAoIGNoaWxkcmVuICE9IG51bGwgKSB7Ci0JCQl3aGlsZShjaGlsZHJlbi5oYXNOZXh0KCkpewotCQkJCWphdmF4LnhtbC5zb2FwLk5vZGUgY2hpbGROb2RlID0gKGphdmF4LnhtbC5zb2FwLk5vZGUpY2hpbGRyZW4ubmV4dCgpOwotCQkJCWlmKGNoaWxkTm9kZSBpbnN0YW5jZW9mIGphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50KXsKLQkJCQkJYnVmZmVyLmFwcGVuZCgiPGJyPiIpOwotCQkJCQlzb2FwRWxlbWVudFdyaXRlcigoamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQpY2hpbGROb2RlLGJ1ZmZlcik7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoKChqYXZheC54bWwuc29hcC5UZXh0KWNoaWxkTm9kZSkuZ2V0VmFsdWUoKSkpOyAKLQkJCX0KLQkJCWJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKCI8LyIgKyBub2RlLmdldEVsZW1lbnROYW1lKCkuZ2V0TG9jYWxOYW1lKCkgKyAiPiIpKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50UnVudGltZUV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50UnVudGltZUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDY3MGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Tb2FwRWxlbWVudFJ1bnRpbWVFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsOwotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyZndDtQcmVmZXJlbmNlcyZndDtKYXZhJmd0O0NvZGUgR2VuZXJhdGlvbiZndDtDb2RlIGFuZCBDb21tZW50cwotICovCi1wdWJsaWMgY2xhc3MgU29hcEVsZW1lbnRSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uICB7Ci0KLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzNzYxNjkzMzcyNjc0NzQ4NDcxTDsKLQotcHVibGljIFNvYXBFbGVtZW50UnVudGltZUV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSl7Ci0gICAgc3VwZXIobWVzc2FnZSk7Ci0gIH0KLSAgCi0gIAotICAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRTYXhIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRTYXhIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YmJmNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50U2F4SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgICAxMjM5NjMgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnNvYXAuTmFtZTsKLWltcG9ydCBqYXZheC54bWwuc29hcC5TT0FQRWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwuc29hcC5TT0FQRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5zb2FwLlNPQVBGYWN0b3J5OwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBAYXV0aG9yIHhpbnpoYWkKLSAqLwotcHVibGljIGNsYXNzIFNvYXBFbGVtZW50U2F4SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi17Ci0JLy9TdG9yZXMgYWxsIHZhbHVlcyBvZiBwYWlycyBvZiBwcmVmaXggYW5kIFVSSSBpbiB0aGUgZG9jdW1lbnQKLQlwcml2YXRlIEhhc2hNYXAgcHJlZml4VVJJTWFwcGluZyA9IG5ldyBIYXNoTWFwKCk7Ci0JLy9TdG9yZXMgYSBsaXN0IG9mIFVSSXMgZm9yIGEgcGFydGljdWxhciBTT0FQIGVsZW1lbnQKLQlwcml2YXRlIEFycmF5TGlzdCB1cmlzID0gbmV3IEFycmF5TGlzdCgpOwotCS8vUmVwcmVzZW50cyB0aGUgd2hvbGUocm9vdCkgU09BUCBkb2N1bWVudAotCXByaXZhdGUgU09BUEVsZW1lbnQgcm9vdEVsZW1lbnQgPSBudWxsOwotCS8vUmVwcmVzZW50cyB0aGUgY3VycmVudCBTT0FQIGVsZW1lbnQgd2hlcmUgU0FYIHBhcnNlciBpcyByZWFkaW5nCi0JcHJpdmF0ZSBTT0FQRWxlbWVudCBjdXJyZW50RWxlbWVudCA9IG51bGw7Ci0JcHJpdmF0ZSBTT0FQRmFjdG9yeSBzb2FwRmFjdG9yeTsKLQkKLQlwdWJsaWMgU09BUEVsZW1lbnQgZ2V0U09BUEVsZW1lbnQoKQotCXsKLQkJcmV0dXJuIHJvb3RFbGVtZW50OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzdGFydERvY3VtZW50KCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotCXsKLQkJdHJ5IAotCQl7Ci0JCQlzb2FwRmFjdG9yeSA9IFNPQVBGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgCi0JCXsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24oIkNhbid0IGNyZWF0ZSBhIFNPQVBGYWN0b3J5IGluc3RhbmNlIiwgZSk7Ci0JCX0JCi0JfQotCi0JcHVibGljIHZvaWQgc3RhcnRQcmVmaXhNYXBwaW5nKFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmkpCi0JewotCQlwcmVmaXhVUklNYXBwaW5nLnB1dCh1cmkscHJlZml4KTsKLQkJdXJpcy5hZGQodXJpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgY2hhcmFjdGVycyhjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIHN0ciA9IFN0cmluZy52YWx1ZU9mKGNoKTsKLQkJLy9BZGQgbm9uLXRyaXZpYWwgdGV4dCBhcyBhIHRleHQgbm9kZQotCQlpZiAobGVuZ3RoID4gMSkKLQkJewotCQkJdHJ5IAotCQkJewotCQkJCWN1cnJlbnRFbGVtZW50LmFkZFRleHROb2RlKHN0ci5zdWJzdHJpbmcoc3RhcnQsc3RhcnQrbGVuZ3RoKSk7Ci0JCQl9IAotCQkJY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbigiQ2FuJ3QgYWRkIGEgdGV4dCBub2RlIGludG8gU09BUEVsZW1lbnQgZnJvbSB0ZXh0IiwgZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZW5kRWxlbWVudCAoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lKQotCXsKLQkJaWYgKGN1cnJlbnRFbGVtZW50ICE9IHJvb3RFbGVtZW50ICkKLQkJewotCQkJY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0JCX0KLQl9Ci0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRzKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgcHJlZml4ID0gKFN0cmluZylwcmVmaXhVUklNYXBwaW5nLmdldChuYW1lc3BhY2VVUkkpOwotCQl0cnkKLQkJewotCQkJLy8gQ3JlYXRlIGFuZC9vciBhZGQgY2hpbGQgZWxlbWVudAotCQkJaWYgKHJvb3RFbGVtZW50ID09IG51bGwgJiYgY3VycmVudEVsZW1lbnQgPT0gbnVsbCkKLQkJCXsKLQkJCQlyb290RWxlbWVudCA9IHNvYXBGYWN0b3J5LmNyZWF0ZUVsZW1lbnQobG9jYWxOYW1lLHByZWZpeCxuYW1lc3BhY2VVUkkpOwotCQkJCWN1cnJlbnRFbGVtZW50ID0gcm9vdEVsZW1lbnQ7Ci0JCQl9IAotCQkJZWxzZQotCQkJewotCQkJCWN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuYWRkQ2hpbGRFbGVtZW50KGxvY2FsTmFtZSxwcmVmaXgsbmFtZXNwYWNlVVJJKTsKLQkJCX0KLQkJCQotCQkJLy8gQWRkIG5hbWVzcGFjZSBkZWNsYXJhdGlvbgotCQkJaWYgKHVyaXMuc2l6ZSgpID4gMCkKLQkJCXsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHVyaXMuc2l6ZSgpOyBpKyspCi0JCQkJewotCQkJCQlTdHJpbmcgdXJpID0gKFN0cmluZyl1cmlzLmdldChpKTsKLQkJCQkJU3RyaW5nIHByZSA9IChTdHJpbmcpcHJlZml4VVJJTWFwcGluZy5nZXQodXJpKTsKLQkJCQkJY3VycmVudEVsZW1lbnQuYWRkTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlLHVyaSk7Ci0JCQkJfQotCQkJCS8vIE5lZWQgdG8gcmVzZXQgdXJpcyBhcyB3ZSB3aWxsIHVzZSBpdCBmb3IgbmV4dCBlbGVtZW50LgotCQkJCXVyaXMuY2xlYXIoKTsgCi0JCQl9Ci0JCQkKLQkJCS8vIEFkZCBhdHRpYnV0ZXMKLQkJCWZvciAoaW50IGkgPTA7IGk8YXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotCQkJewotCQkJCU5hbWUgYXR0cmlOYW1lOwotCQkJCWlmIChhdHRzLmdldFVSSShpKSAhPSBudWxsKQotCQkJCXsKLQkJCQkJU3RyaW5nIGF0dHJpUHJlID0gKFN0cmluZylwcmVmaXhVUklNYXBwaW5nLmdldChhdHRzLmdldFVSSShpKSk7Ci0JCQkJCWF0dHJpTmFtZSA9IHNvYXBGYWN0b3J5LmNyZWF0ZU5hbWUoYXR0cy5nZXRMb2NhbE5hbWUoaSksYXR0cmlQcmUsYXR0cy5nZXRVUkkoaSkpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlhdHRyaU5hbWUgPSBzb2FwRmFjdG9yeS5jcmVhdGVOYW1lKGF0dHMuZ2V0TG9jYWxOYW1lKGkpKTsKLQkJCQl9Ci0JCQkJY3VycmVudEVsZW1lbnQuYWRkQXR0cmlidXRlKGF0dHJpTmFtZSwgYXR0cy5nZXRWYWx1ZShpKSk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgCi0JCXsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24oZSk7Ci0JCX0KLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAyMzQ2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYyODFiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gSnVuIDAzIDAxOjU3OjAwIEVEVCAyMDA3Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTEKLWNvbXBpbGVycy5wLmJ1aWxkPTEKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubWlzc2luZy1wYWNrYWdlcz0yCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0yCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjY2VjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb247YnVuZGxlLXZlcnNpb249IlsxLjAuMzA0LDEuMS4wKSIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMjk0MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNmZTY1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgQ3JlYXRpb24gRUpCIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLSMKLSMgV2ViIHNlcnZpY2UgdHlwZXMKLSMKLVdFQlNFUlZJQ0VUWVBFX05BTUVfRUpCX1RQPUVKQiBXZWIgU2VydmljZQotV0VCU0VSVklDRVRZUEVfTkFNRV9XU0RMX0VKQl9UUD1Ta2VsZXRvbiBFSkIgV2ViIFNlcnZpY2UKLQotIwotIyBQb3AtdXAgYWN0aW9ucwotIwotQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFPUNyZWF0ZSBXZWIgc2VydmljZQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTRiZGE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgIDwhLS0gRUpCIFdlYiBTZXJ2aWNlIFR5cGVzIC0tPgotPCEtLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53ZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUiPgotCi0gICAgICA8d2ViU2VydmljZVR5cGUKLSAgICAgICAgICAgIGxhYmVsPSIlV0VCU0VSVklDRVRZUEVfTkFNRV9XU0RMX0VKQl9UUCIKLSAgICAgICAgICAgIHJlc291cmNlVHlwZU1ldGFkYXRhPSJGaWxlIElSZXNvdXJjZSIKLSAgICAgICAgICAgIGV4dGVuc2lvbk1ldGFkYXRhPSIud3NkbCIKLSAgICAgICAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiCi0gICAgICAgICAgICBpbmNsdWRlTmF0dXJlcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQk5hdHVyZSIKLSAgICAgICAgICAgIGV4Y2x1ZGVOYXR1cmVzPSIiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLnR5cGUud3NkbC5lamIiPgotICAgICAgPC93ZWJTZXJ2aWNlVHlwZT4KLQotICAgICAgPHdlYlNlcnZpY2VUeXBlCi0JCSAgICBsYWJlbD0iJVdFQlNFUlZJQ0VUWVBFX05BTUVfRUpCX1RQIgotCQkgICAgcmVzb3VyY2VUeXBlTWV0YWRhdGE9IkVKQk9iamVjdCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRW50ZXJwcmlzZUJlYW4gU2Vzc2lvbkltcGwiCi0JCSAgICBleHRlbnNpb25NZXRhZGF0YT0iLmphdmEgLmNsYXNzIC5TZXNzaW9uSW1wbCIKLQkJICAgIG9iamVjdFNlbGVjdGlvbldpZGdldD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkVKQlNlbGVjdGlvbldpZGdldCIKLQkJICAgIGluY2x1ZGVOYXR1cmVzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCTmF0dXJlIgotCQkgICAgZXhjbHVkZU5hdHVyZXM9IiIKLQkJICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MudHlwZS5lamIiPgotICAJIDwvd2ViU2VydmljZVR5cGU+Ci0JPC9leHRlbnNpb24+Ci0tLT4KLQotICAgPCEtLSBQb3B1cHMgLS0+Ci0gICAgICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRW50ZXJwcmlzZUJlYW4iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuZWpiIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkuZWpiLnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuU2Vzc2lvbkJlYW4iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuZWpiMyI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LmVqYjMucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+Ci0KLQotPCEtLSBFSkIgc3R1ZmYgLS0+Ci0gICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwiPgotICAgICA8d2ViU2VydmljZUltcGwKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmVqYiIKLSAgICAgICAgICAgIGxhYmVsPSIlV0VCU0VSVklDRVRZUEVfTkFNRV9FSkJfVFAiCi0gICAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhZGF0YT0iRUpCT2JqZWN0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbiBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FbnRlcnByaXNlQmVhbnMgU2Vzc2lvbkltcGwgU2Vzc2lvbkJlYW5JbXBsIgotICAgICAgICAgICAgZXh0ZW5zaW9uTWV0YWRhdGE9Ii5qYXZhIC5jbGFzcyAuU2Vzc2lvbkltcGwgLlNlc3Npb25CZWFuSW1wbCIKLSAgICAgICAgICAgIG1lcmdlckNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkphdmFNZXJnZXIiIAotICAgICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uV2lkZ2V0Ij4KLSAgICAgPC93ZWJTZXJ2aWNlSW1wbD4KLSAgICA8L2V4dGVuc2lvbj4gICAgCi0gICAgCi0KLSAgICAgICAgICAgIAotICAgCi08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU2ZWRlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzcy11aS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YzhiZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmFiMTg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNTYXQgSnVuIDAyIDE3OjA3OjA2IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTcxYWMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTowNCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZDRmNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwNS5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5hbnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5zZXJ2ZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW1md29ya2JlbmNoLmludGVncmF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmZvcm1zO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkZWMzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2V4cG9ydF93cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9leHBvcnRfd3MuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTQ0ZWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2V4cG9ydF93cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvbmV3X3dlYnNlcnZfd2l6LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9uZXdfd2Vic2Vydl93aXouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDczN2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9uZXdfd2Vic2Vydl93aXouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vZXhwb3J0X3dzX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9leHBvcnRfd3Nfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2YmNhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9leHBvcnRfd3Nfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWY4NzZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2Fzc2VtYmxlLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfYXNzZW1ibGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDM3OTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfYXNzZW1ibGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9kZXBsb3kuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9kZXBsb3kuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDU4YmMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfZGVwbG95LmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfZGV2ZWxvcC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RldmVsb3AuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGZmNmE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfZGV2ZWxvcC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2luc3RhbGwuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9pbnN0YWxsLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThmY2RiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2luc3RhbGwuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9ydW4uanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9ydW4uanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzkxMmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfcnVuLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfdGVzdC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3Rlc3QuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjU2OTU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfdGVzdC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmU4NWYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgQ3JlYXRpb24gR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTPVdlYiBTZXJ2aWNlcwotUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19TRVJWSUNFPVdlYiBTZXJ2aWNlCi1QTFVHSU5fRVhQT1JUX1dJWkFSRF9OQU1FX1dTPVdlYiBTZXJ2aWNlCi1QTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX1NFUlZJQ0U9Q3JlYXRlIGEgbmV3IFhNTCB3ZWIgc2VydmljZS4KLVBMVUdJTl9FWFBPUlRfV0laQVJEX0RFU0NfV1M9QSB3aXphcmQgZm9yIGV4cG9ydGluZyBhIHdlYiBzZXJ2aWNlLgotCi0jCi0jCVdlYiBTZXJ2aWNlcyBQcmVmZXJhbmNlIFBhZ2VzCi0jCi0jIERpYWxvZ3MKLUNIRUNLQk9YX1NIT1dfREVQTE9ZX1dFQl9TRVJWSUNFX0RJQUxPRz1IaWRlICZDcmVhdGUgV2ViIHNlcnZpY2UgRGlhbG9nCi1DSEVDS0JPWF9TSE9XX0dFTkVSQVRFX1NLRUxFVE9OX0RJQUxPRz1IaWRlIEdlbmVyYXRlIEphdmEgQmVhbiBTJmtlbGV0b24gRGlhbG9nCi1DSEVDS0JPWF9TSE9XX0dFTkVSQVRFX1dTRExfRklMRVNfRElBTE9HPUhpZGUgR2VuZXJhdGUgV1NETCBGaWxlcyBEaWFsb2cKLUNIRUNLQk9YX1NIT1dfUFVCTElTSF9XU0RMX0RJQUxPRz1IaWRlIFB1Ymxpc2ggJldTREwgRGlhbG9nCi0KLVBSRUZFUkVOQ0VfQ0FURUdPUllfU0NFTkFSSU9fREVGQVVMVFM9U2NlbmFyaW8gRGVmYXVsdHMKLQotCi0jCi0jIFByZWZlcmVuY2VzIFRvb2x0aXBzCi0jCi0jQWN0aW9uIERpYWxvZ3MKLVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9ERVBMT1k9SGlkZXMgdGhlIGRpYWxvZyBmb3IgZGVwbG95aW5nIGEgV2ViIHNlcnZpY2UgYWN0aW9uCi1UT09MVElQX1BQQURfQ0hFQ0tCT1hfU0tFTEVUT049SGlkZXMgdGhlIGRpYWxvZyBmb3IgZ2VuZXJhdGluZyBKYXZhIGJlYW4gU2tlbGV0b24gYWN0aW9uCi1UT09MVElQX1BQQURfQ0hFQ0tCT1hfV1NETD1IaWRlcyB0aGUgZGlhbG9nIGZvciBnZW5lcmF0aW5nIFdTREwgZmlsZXMgYWN0aW9uCi1UT09MVElQX1BQQURfQ0hFQ0tCT1hfUFVCTElTSD1IaWRlcyB0aGUgZGlhbG9nIGZvciBwdWJsaXNoaW5nIHRoZSBXU0RMIGFjdGlvbgotCi0jCi0jIFBvcC11cCBhY3Rpb25zCi0jCi1BQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0U9Q3JlYXRlIFdlYiBzZXJ2aWNlCi1BQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTj1HZW5lcmF0ZSBKYXZhIGJlYW4gc2tlbGV0b24KLUFDVElPTl9QVUJMSVNIX1dTREw9UHVibGlzaCBXU0RMIGZpbGUKLQotIwotIyBXaXphcmRzLgotIwotV0laQVJEX1RJVExFX1dTUz1XZWIgU2VydmljZQotCi0KLSMKLSMgUG9wLXVwIGFjdGlvbnMKLSMKLUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRT1DcmVhdGUgV2ViIHNlcnZpY2UKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNzFmNzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICAgIDwhLS0gV2l6YXJkcyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPGNhdGVnb3J5Ci0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciPgotICAgICAgPC9jYXRlZ29yeT4KLSAgICAgIDx3aXphcmQKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX1NFUlZJQ0UiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N0b29sMTYvbmV3X3dlYnNlcnZfd2l6LmdpZiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgJVBMVUdJTl9ORVdfV0laQVJEX0RFU0NfV1NfU0VSVklDRQotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZyIKLSAgICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTUyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5iaW5kaW5nLlNlcnZlcldpZGdldEJpbmRpbmciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5leHBvcnRXaXphcmRzIj4KLSAgICAgIDxjYXRlZ29yeQotICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud3NleHBvcnQuY2F0ZWdvcnkiCi0gICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUyIvPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5leHBvcnRXaXphcmRzIj4KLSAgICAgIDx3aXphcmQKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fRVhQT1JUX1dJWkFSRF9OQU1FX1dTIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvZXhwb3J0X3dzLmdpZiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud3NleHBvcnQuY2F0ZWdvcnkiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NleHBvcnQiPgotICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgJVBMVUdJTl9FWFBPUlRfV0laQVJEX0RFU0NfV1MKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICA8L3dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiPgotICAgICAgPGR5bmFtaWNXaXphcmQKLSAgICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL2V4cG9ydF93c193aXoucG5nIgotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9FWFBPUlRfV0laQVJEX05BTUVfV1MiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZy5FeHBvcnRXU1dpZGdldEJpbmRpbmciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzZXhwb3J0Ij4KLSAgICAgIDwvZHluYW1pY1dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiPgotICAgICAgPGR5bmFtaWNXaXphcmQKLSAgICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL2V4cG9ydF93c193aXoucG5nIgotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9FWFBPUlRfV0laQVJEX05BTUVfV1MiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZy5FeHBvcnRXU1dpZGdldEJpbmRpbmciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgIDwvZHluYW1pY1dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tICJEb24ndCBTaG93IE1lIiBQcmVmZXJlbmNlcyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSI+Ci0KLSAgICAgIDxhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgbmFtZT0iJUNIRUNLQk9YX1NIT1dfREVQTE9ZX1dFQl9TRVJWSUNFX0RJQUxPRyIKLSAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfREVQTE9ZIgotICAgICAgICAgICAgaW5mb3BvcD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLlBQQUQwMDA2IgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkiCi0gICAgICAgICAgICBvYmplY3RpZHM9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmVqYiBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5lamIzIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuZmlsZSBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLmNvbXB1bml0IG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuc2VydmljZS5iZWFuIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuYmVhbi5saW5rIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEiPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZT4KLQotICAgICAgPGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gICAgICAgICAgICBuYW1lPSIlQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9TS0VMRVRPTl9ESUFMT0ciCi0gICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1NLRUxFVE9OIgotICAgICAgICAgICAgaW5mb3BvcD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLlBQQUQwMDA4IgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkiCi0gICAgICAgICAgICBvYmplY3RpZHM9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLmZpbGUud3NkbCBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5zZXJ2aWNlIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLndzZGxyZXMgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uc2VydmljZXJlZiBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5maWxlLndzaWwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24iPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZT4KLQotICAgICAgPGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gICAgICAgICAgICBuYW1lPSIlQ0hFQ0tCT1hfU0hPV19QVUJMSVNIX1dTRExfRElBTE9HIgotICAgICAgICAgICAgdG9vbHRpcD0iJVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9QVUJMSVNIIgotICAgICAgICAgICAgaW5mb3BvcD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLlBQQUQwMDA5IgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkiCi0gICAgICAgICAgICBvYmplY3RpZHM9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC5maWxlIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC5zZXJ2aWNlIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC53c2RscmVzIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC5zZXJ2aWNlcmVmIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaCI+Ci0gICAgICA8L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlPgotCi0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSBQb3B1cHMgLS0+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi5qYXZhIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuZmlsZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuQ29tcGlsYXRpb25Vbml0IgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi5qYXZhIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuY29tcHVuaXQiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0UiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLmZpbGUud3NkbCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5zZXJ2aWNlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT04iCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi53c2RscmVzIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT04iCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5zZXJ2aWNlcmVmIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT04iCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZpY2VJbXBsQmVhbiIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5zZXJ2aWNlLmJlYW4iPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0UiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkJlYW5MaW5rIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLmJlYW4ubGluayI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgICAgIAotICAgICAgCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzaWwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uZmlsZS53c2lsIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT04iCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC5maWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX1BVQkxJU0hfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2giPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2guc2VydmljZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9QVUJMSVNIX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2giPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIAotICAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC53c2RscmVzIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX1BVQkxJU0hfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgCi0gICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLnNlcnZpY2VyZWYiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fUFVCTElTSF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tIFByZWZlcmVuY2UgUGFnZXMgLS0+Ci0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+Ci0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfU0NFTkFSSU9fREVGQVVMVFMiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnByZWZlcmVuY2VzLlNjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucHJlZmVyZW5jZXMuU2NlbmFyaW9EZWZhdWx0c1ByZWZlcmVuY2VQYWdlIj4KLSAgICAgIDwvcGFnZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Ij4KLSAgICAgICA8d2lkZ2V0RmFjdG9yeSAgIAotICAgICAgICAgICAgIGlkPSJTdGFydFNlcnZpY2VTZXJ2ZXIiCi0gICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbWFuZElkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlByZVNlcnZpY2VSdW5Db21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuc2VydmVyLlN0YXJ0U2VydmVyV2lkZ2V0RmFjdG9yeSIvPgotICAgIDwvZXh0ZW5zaW9uPiAKLSAgICAKLSAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFudFNjZW5hcmlvIj4KLSAgICAgICAgPGFudFNjZW5hcmlvCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmFudC5BbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudCIKLSAgICAgICAgICAgIHNjZW5hcmlvVHlwZT0ic2VydmljZSIvPgotICAgICA8L2V4dGVuc2lvbj4gICAgCi0gICAgCi0gICAgIDxleHRlbnNpb24KLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hbnREYXRhTWFwcGluZyI+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJJbml0aWFsU2VsZWN0aW9uIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJPYmplY3RTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIi8+ICAgICAgICAgICAgICAKLQkJPG1hcAotICAgICAgICAgICAgICBrZXk9IlByb2plY3QiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJQcm9qZWN0IgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDb21wb25lbnROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ29tcG9uZW50TmFtZSIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5SdW50aW1lSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlNlcnZlcklkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5UeXBlSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+ICAgICAgICAgICAgIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iR2VuZXJhdGVQcm94eSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iR2VuZXJhdGVQcm94eSIvPgotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuUnVudGltZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlR5cGVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgICAgICAgICAgCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZVByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVByb2plY3ROYW1lIi8+Ci0gICAgICAgICAgICAgIAotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2VQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVByb2plY3ROYW1lIi8+Ci0gICAgICAgICAgICAgIAotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2VDb21wb25lbnROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlQ29tcG9uZW50TmFtZSIvPgotCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZUVhclByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlRWFyUHJvamVjdE5hbWUiLz4KLSAgICAgICAgICAgICAgCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZUVhckNvbXBvbmVudE5hbWUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VFYXJDb21wb25lbnROYW1lIi8+ICAgICAgICAgICAgICAKLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlJ1bnRpbWVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkZyYWdtZW50IgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlNlcnZlcklkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuVHlwZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL0NyZWF0aW9uVUkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3ZDk4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL0NyZWF0aW9uVUkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBXaXphcmQgcGFnZXMKLSMKLVBBR0VfVElUTEVfT0JKRUNUX1NFTEVDVElPTj1PYmplY3QgU2VsZWN0aW9uIFBhZ2UKLVBBR0VfREVTQ19PQkpFQ1RfU0VMRUNUSU9OPU9iamVjdCBTZWxlY3Rpb24gUGFnZQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvQ3JlYXRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMTllOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQ3JlYXRpb25VSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuQ3JlYXRpb25VSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBDcmVhdGlvblVJTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfT0JKRUNUX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfT0JKRUNUX1NFTEVDVElPTjsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIENyZWF0aW9uVUlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvYW50L0FudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2FudC9BbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmM2MDUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvYW50L0FudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MzAgICAxNDQzNTgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTMwICAgMTQ0MzUwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgyMyAgIDE1NDkzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKiAyMDA3MDUwMSAgIDE3ODEyOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd29ya3NwYWNlIHJlcG9ydHMgImNyYXNoIGRldGVjdGVkIiBhZnRlciBydW5uaW5nIFdTIGFudCB0YXNrIChjbWRsaW5lKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5hbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5BbnREZWZhdWx0aW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkFudFJlc3RvcmluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuTGlzdE9wdGlvbnNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRmluaXNoRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5TY2VuYXJpb0NsZWFudXBDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZWxlY3Rpb24uU2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbi5QcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbi5TZXJ2aWNlUm9vdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZS5TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci0gCi0vKioKLSAqIAotICogQ29tbWFuZCBmcmFnbWVudCBmb3IgZ2VuZXJhdGluZyB3ZWIgc2VydmljZSB0b3AgZG93biBvciBib3R0b20gdXAgdXNpbmcgQW50IHRhc2suCi0gKiBSdW4gaGVhZGxlc3MgRWNsaXBzZSBvciB3aXRoaW4gd29ya3NwYWNlIHVzaW5nIFJ1biBhcyBBbnQgQnVpbGQuICBUaGlzIGZyYWdtZW50IGVsaW1pbmF0ZXMgYW55IFVJIHNwZWNpZmljIAotICogY29tbWFuZHMgYW5kIGRhdGEgbWFwcGluZ3MgYmV0d2VlbiBjb21tYW5kcyBhbmQgd2lkZ2V0cy4gIFdpZGdldCB0byBjb21tYW5kIG1hcHBpbmdzIGFyZQotICogcmVwbGFjZWQgYnkgQW50IHByb3BlcnR5IGZpbGUgdG8gY29tbWFuZCBtYXBwaW5ncyB3aGljaCBhcmUgZW5hYmxlZCBieSBhIGFudERhdGFNYXBwaW5nIGV4dGVuc2lvbiAKLSAqIHBvaW50IGluIHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYgcGx1Z2luLgotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIEFudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotCQotICBwdWJsaWMgQW50U2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQoKQotICB7IAotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2NlbmFyaW9DbGVhbnVwQ29tbWFuZCgpLCAiIiApKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudChuZXcgTGlzdE9wdGlvbnNDb21tYW5kKCksICIiKSk7Ci0gICAgYWRkIChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IEFudERlZmF1bHRpbmdPcGVyYXRpb24oKSwgIiIpKTsgICAgCi0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIiApKTsgICAgCi0gICAgYWRkKCBuZXcgT2JqZWN0U2VsZWN0aW9uRnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOyAgIAotICAgIGFkZCggbmV3IFNlcnZpY2VSb290RnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICBhZGQobmV3IEZpbmlzaEZyYWdtZW50KCkpOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQW50UmVzdG9yaW5nQ29tbWFuZCgpLCAiIiApKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBBbnRXb3Jrc3BhY2VTYXZlQ29tbWFuZCgpLCAiIikpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgeyAJCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbFNlbGVjdGlvbiIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxQcm9qZWN0IiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkNvbXBvbmVudE5hbWUiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsQ29tcG9uZW50TmFtZSIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJDb21wb25lbnROYW1lIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbENvbXBvbmVudE5hbWUiLCBudWxsKTsgICAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOyAgICAKLQkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgICAJCi0gICAgLy8gTWFwIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIE9iamVjdFNlbGVjdGlvbkZyYWdtZW50LmNsYXNzLCAiVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgICAKLSAgICAvL01hcCBBbnREZWZhdWx0aW5nRnJhZ21lbnQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiU2VydmljZUlkc0ZpeGVkIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiQ2xpZW50SWRzRml4ZWQiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJTdGFydFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJJbnN0YWxsU2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vIE1hcCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRWFyUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUVhckNvbXBvbmVudE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUoyRUVWZXJzaW9uIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VOZWVkRUFSIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIAotICAgIC8vIE1hcCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQuY2xhc3MpOwotICAgIAkgIAotCS8vIFNldHVwIHRoZSBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuCQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsJCQkKLQkKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudFR5cGUiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGVUeXBlIiwgbnVsbCk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUnVudGltZUlkIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlSjJFRVZlcnNpb24iLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAKLSAgICAKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIG5ldyBTZWxlY3Rpb25UcmFuc2Zvcm1lcigpICk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0KLSAgICAvLyBNYXAgU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCBmb3IgU2VydmVyU3RhcnQoKQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJSZW5kZXJlclZhbGlkYXRpb24iLCBBbnRSZXN0b3JpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZDc0M2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAxMjEwNzEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotICogMjAwNjAzMzAgMTI4ODI3ICAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI0ICAgMTQxOTI1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMjE4CSAgMjAwMTkzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcxMjIwICAgMjEzNjQwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNSAgIDIyMjQ3MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIEVBUiB2ZXJzaW9uIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIG1vZHVsZXMgdG8gYmUgYWRkZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wbHVnaW4uSUoyRUVNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudE1lcmdlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JTWVyZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotcHVibGljIGNsYXNzIFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQlwcml2YXRlIElXZWJTZXJ2aWNlCQkJCXdlYlNlcnZpY2VfOwotCXByaXZhdGUgU3RyaW5nCQkJCQkJcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgbW9kdWxlXzsKLQlwcml2YXRlIFN0cmluZwkJCQkJCWVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhcl87Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgICAgICAgY29udGV4dF87Ci0gIHByaXZhdGUgSVByb2plY3QJCWluaXRpYWxQcm9qZWN0XzsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIAotCSAgLy8gRm9yIHRvcCBkb3duIHNjZW5hcmlvcywgbWVyZ2UgdGhlIGNvbnRlbnQgb2YgdGhlIHNrZWxldG9uIGZpbGVzIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb24gc3RvcmVkLgkgIAotCSAgLy8gVGhlIFdlYiBzZXJ2aWNlIGV4dGVuc2lvbnMgdHJpZ2dlcnMgdGhlIHN0b3Jpbmcgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIG9sZCBza2VsZXRvbiBmaWxlIGJ5IAotCSAgLy8gY2FsbGluZyBXZWJTZXJ2aWNlSW5mby5zZXRJbXBsVVJMcygpIGJlZm9yZSB0aGUgbmV3IHNrZWxldG9uIGlzIGdlbmVyYXRlZCBpbiB0aGUgZXh0ZW5zaW9uJ3MgCi0JICAvLyBkZXZlbG9wKCkgbWV0aG9kLgotCSAgCi0JICBpZiAoY29udGV4dF8uZ2V0U2NlbmFyaW8oKS5nZXRWYWx1ZSgpID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKSB7Ci0JCSAgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBtZXJnZUNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldE1lcmdlQ29udGV4dCgpOwotCQkgIElNZXJnZXIgbWVyZ2VyID0gd2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRNZXJnZXIoKTsKLQkJICBpZiAobWVyZ2VDb250ZXh0LmlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKSAmJiBtZXJnZXIgIT0gbnVsbCkgewotCQkJICBzdGF0dXMgPSBtZXJnZXIubWVyZ2UobW9uaXRvciwgZ2V0RW52aXJvbm1lbnQoKS5nZXRTdGF0dXNIYW5kbGVyKCkpOwkKLQkJCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJICByZXR1cm4gc3RhdHVzOwotCQkJICB9CQkKLQkJICB9Ci0JICB9Ci0JICAKLQkgIGlmIChjb250ZXh0Xy5nZXRBc3NlbWJsZSgpKSB7Ci0KLQkJICAvLyBDaGVjayBpZiBFQVIgbW9kdWxlIGlzIHJlcSdkLCBpZS4gIT1udWxsCi0JCSAgaWYgKGVhclByb2plY3RfPT1udWxsKQotCQkJICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotCi0KLQkJICAvL0NyZWF0ZSB0aGUgc2VydmljZSBFQVIgbW9kdWxlCi0KLQkJICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKGVhclByb2plY3RfKTsKLQkJICBjb21tYW5kLnNldFRlbXBsYXRlSWQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9URU1QTEFURSk7Ci0KLQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhGYWNldFV0aWxzLmdldFJlcXVpcmVkRUFSRmFjZXRWZXJzaW9ucyhwcm9qZWN0KSk7IAotCi0JCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQod2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKSk7Ci0JCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJICBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwotCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCSAgewotCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkJICByZXR1cm4gc3RhdHVzOwotCQkgIH0gICAgICAgICAgICAgICAgCi0KLQkJICAvL0Fzc29jaWF0ZSB0aGUgc2VydmljZSBtb2R1bGUgYW5kIHNlcnZpY2UgRUFSCi0JCSAgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQgYXNzb2NpYXRlQ29tbWFuZCA9IG5ldyBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCgpOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0UHJvamVjdChwcm9qZWN0Xyk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRNb2R1bGUobW9kdWxlXyk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRFQVJQcm9qZWN0KGVhclByb2plY3RfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldEVhcihlYXJfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCQkgIHN0YXR1cyA9IGFzc29jaWF0ZUNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCQkgIHsKLQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7CQkgIAotCQkgIH0JCQkKLQotCQkgIC8vbWFrZSBzdXJlIHRoZSBlYXIgZmlsZSBoYXMgYmVlbiBjcmVhdGVkLgotCQkgIAotCQkgIGlmKGluaXRpYWxQcm9qZWN0XyAhPSBudWxsICYmIEZhY2V0VXRpbHMuaXNKYXZhUHJvamVjdChpbml0aWFsUHJvamVjdF8pKSB7Ci0JCQkgIElQcm9qZWN0IGVhclByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZWFyUHJvamVjdF8pOwotCQkJICBKMkVFVXRpbHMuYWRkSmF2YVByb2plY3RBc1V0aWxpdHlKYXIoaW5pdGlhbFByb2plY3RfLCBlYXJQcm9qZWN0LCBtb25pdG9yKTsKLQkJICB9CQkgCi0JICAKLQkgIH0KLQkgIHJldHVybiBzdGF0dXM7CSAgCi0gIH0KLQkKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFByb2plY3QoSVByb2plY3QgaW5pdGlhbFByb2plY3QpCi0gIHsKLQkgIGluaXRpYWxQcm9qZWN0XyA9IGluaXRpYWxQcm9qZWN0OyAgCi0gIH0JCi0gICAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRJbml0aWFsUHJvamVjdCgpCi0gIHsKLQkgIHJldHVybiBpbml0aWFsUHJvamVjdF87ICAKLSAgfQkKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoIFN0cmluZyBwcm9qZWN0ICkKLSAgewotCSAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0JICAKLSAgcHVibGljIHZvaWQgc2V0TW9kdWxlKCBTdHJpbmcgbW9kdWxlICkKLSAgewotCSAgbW9kdWxlXyA9IG1vZHVsZTsKLSAgfQkKLQkKLSAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdCggU3RyaW5nIGVhclByb2plY3QgKQotICB7Ci0JICBlYXJQcm9qZWN0XyA9IGVhclByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gIHsKLQkgIGVhcl8gPSBlYXI7ICAKLSAgfQotCQotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlICkKLSAgewotCSAgd2ViU2VydmljZV8gPSB3ZWJTZXJ2aWNlOyAgCi0gIH0JCi0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0IChJQ29udGV4dCBjb250ZXh0KSB7Ci0JICBjb250ZXh0XyA9IGNvbnRleHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXBsb3lDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGVwbG95Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTU1NzU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXBsb3lDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgUHJlU2VydmljZURlcGxveUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElDb250ZXh0ICAgIGNvbnRleHRfOwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgICAgaWYgKGNvbnRleHRfLmdldERlcGxveSgpKQotICAgICAgewotICAgICAgICAvL0lmIGFuZCB3aGVuIHRoZXJlIGFyZSBmcmFtZXdvcmsgc3BlY2lmaWMgZGVwbG95IHRoaW5ncyB0byBiZSBkb25lLAotICAgICAgICAvL2RvIHRoZW0gaGVyZS4KLSAgICAgIH0KLSAgICAgIAotCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotICAgICAgY29udGV4dF89Y29udGV4dDsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmIyMjFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAxMjEwNzEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTYgICAxMjY5NjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDEyMyAgIDE2NzQ4NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwNzA0MDMgICAxNzM2NTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTIxMgkgIDIwMDE5MyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA3MTIyMCAgIDIxMzY0MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjYgICAyMjEzNjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uLkhUVFBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklNZXJnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuU2ltcGxlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVN0YXRlOwotCi1wdWJsaWMgY2xhc3MgUHJlU2VydmljZURldmVsb3BDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHNlcnZpY2VSdW50aW1lSWRfOwotICBwcml2YXRlIElDb250ZXh0ICAgICAgICAgIGNvbnRleHRfOwotICBwcml2YXRlIElTZWxlY3Rpb24gICAgICAgIHNlbGVjdGlvbl87Ci0gIHByaXZhdGUgU3RyaW5nCQkJcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgbW9kdWxlXzsKLSAgcHJpdmF0ZSBTdHJpbmcJCQltb2R1bGVUeXBlXzsKLSAgcHJpdmF0ZSBTdHJpbmcJCQllYXJQcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBlYXJfOwotICBwcml2YXRlIElQcm9qZWN0CQkJaW5pdGlhbFByb2plY3RfOwotCQotICBwcml2YXRlIElXZWJTZXJ2aWNlICAgICAgIHdlYlNlcnZpY2VfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGoyZWVMZXZlbF87Ci0gIHByaXZhdGUgUmVzb3VyY2VDb250ZXh0ICAgcmVzb3VyY2VDb250ZXh0XzsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBkZXZlbG9wXzsKLSAgcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGRlcGxveV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpbnN0YWxsXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJ1bl87Ci0gIHByaXZhdGUgYm9vbGVhbiBjbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gdGVzdF87Ci0gIHByaXZhdGUgYm9vbGVhbiBwdWJsaXNoXzsKLSAgCi0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIGlmIChkZXZlbG9wXykgewotCQkgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkJICAvLyBTcGxpdCB1cCB0aGUgcHJvamVjdCBhbmQgbW9kdWxlCi0JCSAgaW50IGluZGV4ID0gbW9kdWxlXy5pbmRleE9mKCIvIik7Ci0JCSAgaWYgKGluZGV4IT0tMSl7Ci0JCQkgIHByb2plY3RfID0gbW9kdWxlXy5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JCQkgIG1vZHVsZV8gPSBtb2R1bGVfLnN1YnN0cmluZyhpbmRleCsxKTsKLQkJICB9Ci0KLQkJICBpZiAoZWFyXyE9bnVsbCAmJiBlYXJfLmxlbmd0aCgpPjApCi0JCSAgewotCQkJICBpbnQgZWFySW5kZXggPSBlYXJfLmluZGV4T2YoIi8iKTsKLQkJCSAgaWYgKGVhckluZGV4IT0tMSkgewotCQkJCSAgZWFyUHJvamVjdF8gPSBlYXJfLnN1YnN0cmluZygwLGVhckluZGV4KTsKLQkJCQkgIGVhcl8gPSBlYXJfLnN1YnN0cmluZyhlYXJJbmRleCsxKTsKLQkJCSAgfQotCQkgIH0KLQotCi0JCSAgSVdlYlNlcnZpY2VSdW50aW1lIHdzcnQgICA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lKCBzZXJ2aWNlUnVudGltZUlkXyApOwotCQkgIFdlYlNlcnZpY2VJbmZvICAgICB3c0luZm8gPSBuZXcgV2ViU2VydmljZUluZm8oKTsKLQotCQkgIHdzSW5mby5zZXRTZXJ2ZXJGYWN0b3J5SWQoIHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJZCgpICk7Ci0JCSAgd3NJbmZvLnNldFNlcnZlckluc3RhbmNlSWQoIHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkgIHdzSW5mby5zZXRTdGF0ZSggV2ViU2VydmljZVN0YXRlLlVOS05PV05fTElURVJBTCApOwotCQkgIHdzSW5mby5zZXRXZWJTZXJ2aWNlUnVudGltZUlkKCB0eXBlUnVudGltZVNlcnZlcl8uZ2V0UnVudGltZUlkKCkgKTsKLQkJICAKLQkJICBlbnZpcm9ubWVudC5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAid3NfZnJhbWV3b3JrIiwgNTEwNywgdGhpcywgIlByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZCIsICJzZXJ2aWNlUnVudGltZUlkXyA9ICIrIHNlcnZpY2VSdW50aW1lSWRfKTsKLQkJICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3Igc2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yID0gIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZF8pOwotCQkgIElNZXJnZXIgbWVyZ2VyID0gc2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yLmdldFNlcnZpY2VJbXBsZW1lbnRhdGlvblR5cGUoKS5nZXRNZXJnZXJDbGFzcygpOwotCQkgIHdzSW5mby5zZXRNZXJnZXIobWVyZ2VyKTsJCSAgCi0KLQkJICB3ZWJTZXJ2aWNlXyAgPSB3c3J0LmdldFdlYlNlcnZpY2UoIHdzSW5mbyApOwotCi0JCSAgLy9TZXQgdXAgdGhlIElDb250ZXh0Ci0JCSAgV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvID0gbnVsbDsKLQkJICBpbnQgc2NlbmFyaW9JbnQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFR5cGVJZCgpKTsKLQkJICBpZiAoc2NlbmFyaW9JbnQgPT0gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKQotCQkgIHsKLQkJCSAgc2NlbmFyaW8gPSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVBfTElURVJBTDsKLQkJCSAgU3RyaW5nIGltcGwgPSAoU3RyaW5nKShzZWxlY3Rpb25fLmdldFNlbGVjdGlvbigpKVswXTsKLQkJCSAgd3NJbmZvLnNldEltcGxVUkwoaW1wbCk7Ci0JCSAgfQotCQkgIGVsc2UgaWYgKHNjZW5hcmlvSW50ID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotCQkgIHsKLQkJCSAgc2NlbmFyaW8gPSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTl9MSVRFUkFMOwotCQkJICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpKHNlbGVjdGlvbl8uZ2V0U2VsZWN0aW9uKCkpWzBdOwotCQkJICAKLQkJCSAgLy8gY2hlY2sgZm9yIHJlZGlyZWN0aW9uIGluIHRoZSB3c2RsCi0JCQkgIEhUVFBVdGlsaXR5IGh0dHBVdGlsID0gbmV3IEhUVFBVdGlsaXR5KCk7Ci0JCQkgIHdzSW5mby5zZXRXc2RsVVJMKGh0dHBVdGlsLmhhbmRsZVJlZGlyZWN0KHdzZGxVUkwpKTsgICAgICAKLQkJICB9Ci0KLQkJICBjb250ZXh0XyAgICAgPSBuZXcgU2ltcGxlQ29udGV4dChkZXZlbG9wXywgYXNzZW1ibGVfLCBkZXBsb3lfLCBpbnN0YWxsXywgcnVuXywgY2xpZW50XywgdGVzdF8sIHB1Ymxpc2hfLCAKLQkJCQkgIHNjZW5hcmlvLCAKLQkJCQkgIHJlc291cmNlQ29udGV4dF8uaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSwKLQkJCQkgIHJlc291cmNlQ29udGV4dF8uaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpLAotCQkJCSAgcmVzb3VyY2VDb250ZXh0Xy5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpOwotCi0JCSAgLy8gQ3JlYXRlIHRoZSBzZXJ2aWNlIG1vZHVsZSBpZiBuZWVkZWQuCi0JCSAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0Xyk7Ci0JCSAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnYgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWRfKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLQkJICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0JCSAgewotCQkJICBib29sZWFuIG1hdGNoZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoc2VydmljZVJ1bnRpbWVJZF8sIG1vZHVsZVR5cGVfKTsKLQkJCSAgaWYgKG1hdGNoZXMpCi0JCQkgIHsJCQkJICAKLQkJCQkgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotCQkJCSAgY29tbWFuZC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0Xyk7Ci0JCQkJICBjb21tYW5kLnNldFRlbXBsYXRlSWQobW9kdWxlVHlwZV8pOwotCQkJCSAgY29tbWFuZC5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMocmZ2KTsKLQkJCQkgIGNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJZCgpKTsKLQkJCQkgIGNvbW1hbmQuc2V0U2VydmVySW5zdGFuY2VJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJCQkgIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgYWRhcHRhYmxlICk7Ci0JCQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotCQkJCSAgewotCQkJCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JCQkJCSAgcmV0dXJuIHN0YXR1czsKLQkJCQkgIH0gICAgICAgIAotCQkJICB9ICAgICAgICAgICAgCi0JCSAgfSBlbHNlIHsKLQkJCS8vIGFkZCBmYWNldHMgcmVxdWlyZWQgYnkgV2ViIHNlcnZpY2UgcnVudGltZQotCQkgICAgICAgIGlmIChyZnYubGVuZ3RoICE9IDApIHsKLQkJICAgICAgICAJc3RhdHVzID0gRmFjZXRVdGlscy5hZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChwcm9qZWN0LCByZnYsIG1vbml0b3IpOwotCQkgICAgICAgIAlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotCQkgICAgICAgIAl7Ci0JCSAgICAgICAgCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkgICAgICAgIAkJcmV0dXJuIHN0YXR1czsKLQkJICAgICAgICAJfSAgICAgIAotCQkgICAgICAgIH0KLQkJICB9Ci0JICAKLQkgIAotCQkgIGlmKGluaXRpYWxQcm9qZWN0XyAhPSBudWxsICYmIEZhY2V0VXRpbHMuaXNKYXZhUHJvamVjdChpbml0aWFsUHJvamVjdF8pKXsKLQkJCSAgSjJFRVV0aWxzLmFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SmFyKGluaXRpYWxQcm9qZWN0XywgcHJvamVjdCwgbW9uaXRvcik7Ci0JCQkgIHRyeXsKLQkJICAJCVN0cmluZyB1cmkgPSBpbml0aWFsUHJvamVjdF8uZ2V0TmFtZSgpICsgIi5qYXIiOwotCQkgIAkJSjJFRVV0aWxzLmFkZEpBUk9yTW9kdWxlRGVwZW5kZW5jeShwcm9qZWN0LCB1cmkpOwotCQkJICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCQkgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01PRFVMRV9ERVBFTkRFTkNZLCBuZXcgU3RyaW5nW117cHJvamVjdC5nZXROYW1lKCksIGluaXRpYWxQcm9qZWN0Xy5nZXROYW1lKCl9KTsKLQkJCQkgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlcnJvck1lc3NhZ2UpOwotCQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCSAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKXsKLQkJCQkgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01PRFVMRV9ERVBFTkRFTkNZLCBuZXcgU3RyaW5nW117cHJvamVjdC5nZXROYW1lKCksIGluaXRpYWxQcm9qZWN0Xy5nZXROYW1lKCl9KTsKLQkJCQkgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhlcnJvck1lc3NhZ2UpOwotCQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsJCQkJCQotCQkJICB9CQkKLQkJICB9Ci0JfQotCSAgcmV0dXJuIHN0YXR1czsKLQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoIFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyICkKLSAgewotCSAgdHlwZVJ1bnRpbWVTZXJ2ZXJfID0gdHlwZVJ1bnRpbWVTZXJ2ZXI7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVJ1bnRpbWVJZChTdHJpbmcgaWQpCi0gIHsKLSAgICBzZXJ2aWNlUnVudGltZUlkXyA9IGlkOwotICB9Ci0JICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUoyRUVWZXJzaW9uKCBTdHJpbmcgajJlZUxldmVsICkKLSAgewotCWoyZWVMZXZlbF8gPSBqMmVlTGV2ZWw7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKMmVlTGV2ZWwoKQotICB7Ci0JICByZXR1cm4gajJlZUxldmVsXzsgIAotICB9Ci0JCi0gIHB1YmxpYyBJV2ViU2VydmljZSBnZXRXZWJTZXJ2aWNlKCkKLSAgewotCXJldHVybiB3ZWJTZXJ2aWNlXzsgIAotICB9Ci0gIAotICBwdWJsaWMgSUNvbnRleHQgZ2V0Q29udGV4dCgpCi0gIHsKLSAgICByZXR1cm4gY29udGV4dF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dCggUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCApCi0gIHsKLSAgICByZXNvdXJjZUNvbnRleHRfID0gcmVzb3VyY2VDb250ZXh0OwkgIAotICB9Ci0gIAotICBwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbiggSVNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0Jc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHByb2plY3RfOwkgIAotICB9Ci0JIAotICBwdWJsaWMgU3RyaW5nIGdldE1vZHVsZSgpCi0gIHsKLSAgICByZXR1cm4gbW9kdWxlXzsJICAKLSAgfQotCQotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0JICBtb2R1bGVfID0gbW9kdWxlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGVUeXBlKFN0cmluZyB0eXBlKQotICB7Ci0JICBtb2R1bGVUeXBlXyA9IHR5cGU7Ci0gIH0KLQkKLSAgcHVibGljIFN0cmluZyBnZXRFYXJQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBlYXJQcm9qZWN0XzsJICAKLSAgfQotCQotICBwdWJsaWMgU3RyaW5nIGdldEVhcigpCi0gIHsKLQkgIHJldHVybiBlYXJfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gIHsKLQkgIGVhcl8gPSBlYXI7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbFNlcnZpY2UoYm9vbGVhbiBpbnN0YWxsU2VydmljZSkKLQl7Ci0JCWluc3RhbGxfID0gaW5zdGFsbFNlcnZpY2U7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcFNlcnZpY2UoYm9vbGVhbiBkZXZlbG9wU2VydmljZSkgewotCQlkZXZlbG9wXyA9IGRldmVsb3BTZXJ2aWNlOwotCX0JCi0JCi0JcHVibGljIHZvaWQgc2V0QXNzZW1ibGVTZXJ2aWNlKGJvb2xlYW4gYXNzZW1ibGVTZXJ2aWNlKSB7Ci0JCWFzc2VtYmxlXyA9IGFzc2VtYmxlU2VydmljZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3lTZXJ2aWNlKGJvb2xlYW4gZGVwbG95U2VydmljZSkgewotCQlkZXBsb3lfID0gZGVwbG95U2VydmljZTsKLQl9Ci0gIAotCXB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShib29sZWFuIHN0YXJ0U2VydmljZSkKLQl7Ci0JCXJ1bl8gPSBzdGFydFNlcnZpY2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKGJvb2xlYW4gdGVzdFNlcnZpY2UpCi0JewotCQl0ZXN0XyA9IHRlc3RTZXJ2aWNlOwotCX0JCi0JCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hTZXJ2aWNlKGJvb2xlYW4gcHVibGlzaFNlcnZpY2UpCi0gIHsKLSAgICBwdWJsaXNoXyA9IHB1Ymxpc2hTZXJ2aWNlOwotICB9Ci0JCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5Qcm94eSkKLSAgewotICAgIGNsaWVudF8gPSBnZW5Qcm94eTsgIAotICB9CQotCQotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsUHJvamVjdChJUHJvamVjdCBpbml0aWFsUHJvamVjdCkKLSAgewotCSAgaW5pdGlhbFByb2plY3RfID0gaW5pdGlhbFByb2plY3Q7ICAKLSAgfQkKLSAgICAKLSAgcHVibGljIElQcm9qZWN0IGdldEluaXRpYWxQcm9qZWN0KCkKLSAgewotCSAgcmV0dXJuIGluaXRpYWxQcm9qZWN0XzsgIAotICB9CQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWFlMzc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDgxNSAgIDE5OTYyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5BZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZVNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLQotcHVibGljIGNsYXNzIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCXByaXZhdGUgSVdlYlNlcnZpY2Ugd2ViU2VydmljZV87Ci0JcHJpdmF0ZSBTdHJpbmcJCXByb2plY3RfOwotICAgIHByaXZhdGUgU3RyaW5nICAgICAgbW9kdWxlXzsKLQlwcml2YXRlIFN0cmluZwkJZWFyUHJvamVjdF87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgICAgICBlYXJfOwotICAgIHByaXZhdGUgSUNvbnRleHQgICAgY29udGV4dF87Ci0JCQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgaWYgKGNvbnRleHRfLmdldEluc3RhbGwoKSkKLQkgIHsKLQkgICAgICAgICAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOyAgICAgIAotCQkJICAJCQkKLQkJCQlpZiAod2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk9PW51bGwpCi0JCQkJewotCQkJCQlDcmVhdGVTZXJ2ZXJDb21tYW5kIGNyZWF0ZVNlcnZlckNvbW1hbmQgPSBuZXcgQ3JlYXRlU2VydmVyQ29tbWFuZCgpOwotCQkJCQljcmVhdGVTZXJ2ZXJDb21tYW5kLnNldFNlcnZlckZhY3RvcnlpZCh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpKTsKLQkJCQkJY3JlYXRlU2VydmVyQ29tbWFuZC5zZXRTZXJ2ZXJSdW50aW1lSWQod2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJSdW50aW1lSWQoKSk7Ci0JICAgICAgICAgICAgICAgIGNyZWF0ZVNlcnZlckNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCQkJCUlTdGF0dXMgY3JlYXRlU2VydmVyU3RhdHVzID0gY3JlYXRlU2VydmVyQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsKTsKLQkJCQkJaWYgKGNyZWF0ZVNlcnZlclN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuT0spCi0JCQkJCXsKLQkJCQkJCXdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuc2V0U2VydmVySW5zdGFuY2VJZChjcmVhdGVTZXJ2ZXJDb21tYW5kLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCQkJCQl3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLnNldFNlcnZlckNyZWF0ZWQodHJ1ZSk7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQlpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJCQkJCXsKLQkJCQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoY3JlYXRlU2VydmVyU3RhdHVzKTsKLQkJCQkJCX0JCQkJCQkJCQotCQkJCQkJcmV0dXJuIGNyZWF0ZVNlcnZlclN0YXR1czsKLQkJCQkJfQotCQkJCX0KLQkJCQkgIAotCQkJCQotCQkJCQotCQkJCUFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCgpOwotCQkJCWNvbW1hbmQuc2V0U2VydmVySW5zdGFuY2VJZCh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCQkJaWYgKGVhclByb2plY3RfICE9IG51bGwgJiYgZWFyUHJvamVjdF8ubGVuZ3RoKCk+MCAmJiBlYXJfIT0gbnVsbCAmJiBlYXJfLmxlbmd0aCgpPjApCi0JCQkJewotCQkJCQljb21tYW5kLnNldFByb2plY3QoZWFyUHJvamVjdF8pOwotCQkJCQljb21tYW5kLnNldE1vZHVsZShlYXJfKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJY29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJCQkJY29tbWFuZC5zZXRNb2R1bGUobW9kdWxlXyk7CQkJCQotCQkJCX0KLQkKLQkgICAgICAgICAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCQkJCUlTdGF0dXMgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JCQkJewotCQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQl9CQkJCi0JCQkgIHJldHVybiBzdGF0dXM7Ci0JCSAgfQotCQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgfQotCi0JICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KCBTdHJpbmcgcHJvamVjdCApCi0JICB7Ci0JCSAgcHJvamVjdF8gPSBwcm9qZWN0OwotCSAgfQotCQkgIAotCSAgcHVibGljIHZvaWQgc2V0TW9kdWxlKCBTdHJpbmcgbW9kdWxlICkKLQkgIHsKLQkJICBtb2R1bGVfID0gbW9kdWxlOwotCSAgfQkKLQkJCi0JICBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0KCBTdHJpbmcgZWFyUHJvamVjdCApCi0JICB7Ci0JCSAgZWFyUHJvamVjdF8gPSBlYXJQcm9qZWN0OwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRFYXIoIFN0cmluZyBlYXIgKQotCSAgewotCQkgIGVhcl8gPSBlYXI7ICAKLQkgIH0KLQkJCi0JICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlICkKLQkgIHsKLQkJICB3ZWJTZXJ2aWNlXyA9IHdlYlNlcnZpY2U7ICAKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotCSAgewotCQkgIGNvbnRleHRfPWNvbnRleHQ7Ci0JICB9Ci0JCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZVJ1bkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VSdW5Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NThiY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZVJ1bkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5TdGFydFNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLQotcHVibGljIGNsYXNzIFByZVNlcnZpY2VSdW5Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0JcHJpdmF0ZSBJV2ViU2VydmljZQkJCQl3ZWJTZXJ2aWNlXzsKLQlwcml2YXRlIElDb250ZXh0CQkJCWNvbnRleHRfOwotCQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgICAgICBpZiAoY29udGV4dF8uZ2V0UnVuKCkpCi0JCSAgewotCSAgICAgICAgICAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCQkJCi0JCQkJU3RhcnRTZXJ2ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgU3RhcnRTZXJ2ZXJDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgICAgICAgICAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCQkJCXN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCQkJCXsKLQkJCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7CQkJICAKLQkJCQl9Ci0JCSAgfQotCQkgIAotCQkgIHJldHVybiBzdGF0dXM7CQkJCi0JICB9Ci0JCQotCSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2Ugd2ViU2VydmljZSApCi0JICB7Ci0JCSAgd2ViU2VydmljZV8gPSB3ZWJTZXJ2aWNlOyAgCi0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldENvbnRleHQgKElDb250ZXh0IGNvbnRleHQpCi0JICB7Ci0JCSAgY29udGV4dF8gPSBjb250ZXh0OwotCSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9TZXJ2aWNlUm9vdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9TZXJ2aWNlUm9vdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZTg1M2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vU2VydmljZVJvb3RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAxMjEwNzEgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMzMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzEyMTIJICAyMDAxOTMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRGF0YU9iamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGVwbG95U2VydmljZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRldmVsb3BTZXJ2aWNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuSW5zdGFsbFNlcnZpY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5SdW5TZXJ2aWNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUm9vdEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudCAKLXsKLSAgcHVibGljIFNlcnZpY2VSb290RnJhZ21lbnQoKQotICB7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IERldmVsb3BTZXJ2aWNlRnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlU2VydmljZURlcGxveUNvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IERlcGxveVNlcnZpY2VGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQoKSwgIiIgKSApOwotICAgIGFkZCggbmV3IEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQoKSApOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgUHJlU2VydmljZVJ1bkNvbW1hbmQoKSwgCi0gICAgCSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbi5QcmVTZXJ2aWNlUnVuQ29tbWFuZCIgKSApOwotICAgIGFkZCggbmV3IFJ1blNlcnZpY2VGcmFnbWVudCgpICk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KSAKLSAgewotCQkvL01hcHBpbmdzIGZyb20gZnJhbWV3b3JrIHRvIGV4dGVuc2lvbiBmcmFnbWVudHMKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkKLQkvLyBNYXAgdGhlIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZCBpbnRvIHRoZSBkYXRhT2JqZWN0IGFuZCB0aGUgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuCi0JcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIERhdGFPYmplY3RDb21tYW5kLmNsYXNzLCAiRGF0YU9iamVjdCIsIG51bGwgKTsKLQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJEYXRhT2JqZWN0IiwgbnVsbCApOwotCQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkJCi0JCS8vTWFwcGluZ3MgZnJvbSBmcmFtZXdvcmsgdG8gZnJhbWV3b3JrIGNvbW1hbmRzCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0JcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLQkJCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZVNlcnZpY2VEZXBsb3lDb21tYW5kLmNsYXNzICk7Ci0gICAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFByZVNlcnZpY2VSdW5Db21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlU2VydmljZVJ1bkNvbW1hbmQuY2xhc3MgKTsKLQkKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YjhhMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTA0ICAgMTM4MTE4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgQ3JlYXRpb24gVUkgcGx1Z2luLgotKiA8cD4KLSogVGhlIFdlYiBTZXJ2aWNlcyBDcmVhdGlvbiBVSSBwbHVnaW4ncyBzb2xlIGZ1bmN0aW9uIGlzIHRvIGFkZCAKLSogdXNlciBpbnRlcmZhY2Ugb2YgdGhlIFdlYiBTZXJ2aWNlcyBDcmVhdGlvbiBXaXphcmQsIGNvbnRhaW5lZCBpbiAgCi0qIHRoZSBvcmcuZWNsaXBzZS5qc3Qud3MudWkgcGx1Z2luLgotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbiBleHRlbmRzIFBsdWdpbgotewotCi0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbiBpbnN0YW5jZV87Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICogVGhlICJwbHVnaW4iIGVsZW1lbnQgaW4gcGx1Z2luLnhtbCBzaG91bGQgaW5jbHVkZSB0aGUgYXR0cmlidXRlCi0gICogY2xhc3MgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbiIuCi0gICogQHBhcmFtIGRlc2NyaXB0b3IgVGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbiAoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZV8gPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgKiAoV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiKTsKLSAgKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4gZ2V0SW5zdGFuY2UgKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgcmVzb3VyY2UKLSAgICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIEFuIGltYWdlIGRlc2NyaXB0b3IsIHBvc3NpYmx5IG51bGwuCi0gICAqLwotICAgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yICggU3RyaW5nIG5hbWUgKQotICAgewotIAl0cnkKLSAgICAgewkKLSAgICAgCVVSTCBpbWFnZVVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoaW5zdGFuY2VfLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiJG5sJC8iK25hbWUpLCBudWxsKTsKLSAgICAgCXJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0gICAgIH0KLSAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICB7Ci0gICAgICAgcmV0dXJuIG51bGw7Ci0gICAgIH0KLSAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvcHJlZmVyZW5jZXMvU2NlbmFyaW9EZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3ByZWZlcmVuY2VzL1NjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGUwOWYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvcHJlZmVyZW5jZXMvU2NlbmFyaW9EZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE3ICAgMTM2MzkxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci0KLQotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSAKLXsKLQlwcml2YXRlIFNlcnZlcldpemFyZFdpZGdldCBzZXJ2ZXJXaWRnZXRfID0gbnVsbDsKLQkKLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSAgIHsgfQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlI2NyZWF0ZUNvbnRlbnRzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKLQkgKi8KLQkKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSAKLQl7Ci0JICBVSVV0aWxzIHV0aWxzID0gbmV3IFVJVXRpbHMobnVsbCk7Ci0JICAKLQkgIENvbXBvc2l0ZSBwYWdlID0gdXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIDEgKTsKLQkgIAotICAgICAgc2VydmVyV2lkZ2V0XyA9IG5ldyBTZXJ2ZXJXaXphcmRXaWRnZXQoIGZhbHNlLCB0cnVlICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLmFkZENvbnRyb2xzKCBwYWdlLCBuZXcgTGlzdGVuZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudCggRXZlbnQgZXZ0ICl7fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOyAgICAgIAotCSAgaW5pdGlhbGl6ZVZhbHVlcygpOwotCSAgc2VydmVyV2lkZ2V0Xy5kaXNhYmxlTm9uUHJlZmVyZW5jZVdpZGdldHMoKTsKLQkgIGFwcGx5RGlhbG9nRm9udChwYWdlKTsKLQkgIHJldHVybiBwYWdlOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLQl7Ci0JICBTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLQotICAgICAgLy8gU2V0IHZhbHVlcyBmcm9tIGNvbnRleHQuCi0JICBUeXBlUnVudGltZVNlcnZlciBzZXJ2ZXJJZHMgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgIFR5cGVSdW50aW1lU2VydmVyIGNsaWVudElkcyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotCQkKLQkgIHNlcnZlcklkcy5zZXRUeXBlSWQoIGNvbnRleHQuZ2V0V2ViU2VydmljZVR5cGUoKSApOwotCSAgY2xpZW50SWRzLnNldFR5cGVJZCggY29udGV4dC5nZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0JCQotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoIHNlcnZlcklkcyApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggY2xpZW50SWRzICk7Ci0gICAgICAvL2p2aCBzZXJ2ZXJXaWRnZXRfLnNldEdlbmVyYXRlUHJveHkoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0R2VuZXJhdGVQcm94eSgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRQdWJsaXNoU2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0SW5zdGFsbFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0SW5zdGFsbENsaWVudCggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRJbnN0YWxsQ2xpZW50KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFN0YXJ0U2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRTdGFydFdlYlNlcnZpY2UoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0VGVzdFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0VGVzdFdlYlNlcnZpY2UoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0VGVzdENsaWVudCggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRUZXN0V2ViU2VydmljZSgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRNb25pdG9yU2VydmljZShuZXcgQm9vbGVhbihjb250ZXh0LmdldE1vbml0b3JXZWJTZXJ2aWNlKCkpKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U2VydmljZUdlbmVyYXRpb24oY29udGV4dC5nZXRHZW5lcmF0ZVdlYlNlcnZpY2UoKSk7ICAvL2p2aCAgICAgIAotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRDbGllbnRHZW5lcmF0aW9uKGNvbnRleHQuZ2V0R2VuZXJhdGVDbGllbnQoKSk7ICAvL2p2aAotICAgICAgc2VydmVyV2lkZ2V0Xy5pbnRlcm5hbGl6ZSgpOwotCX0KLQkKLSAgICAvKioKLQkgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSovCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkKLQl7Ci0JICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLQkgIHNldFRvRGVmYXVsdHMoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFRvRGVmYXVsdHMoKQotCXsKLQkgIFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCi0gICAgICAvLyBTZXQgdmFsdWVzIGZyb20gY29udGV4dC4KLQkgIFR5cGVSdW50aW1lU2VydmVyIHNlcnZlcklkcyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotCSAgVHlwZVJ1bnRpbWVTZXJ2ZXIgY2xpZW50SWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JCQotCSAgc2VydmVySWRzLnNldFR5cGVJZCggY29udGV4dC5nZXRXZWJTZXJ2aWNlVHlwZURlZmF1bHQoKSApOwotCSAgY2xpZW50SWRzLnNldFR5cGVJZCggY29udGV4dC5nZXRDbGllbnRXZWJTZXJ2aWNlVHlwZURlZmF1bHQoKSApOwotCQkKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCBzZXJ2ZXJJZHMgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoIGNsaWVudElkcyApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRQdWJsaXNoU2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldEluc3RhbGxTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldEluc3RhbGxXZWJTZXJ2aWNlRGVmYXVsdCgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRJbnN0YWxsQ2xpZW50KCBuZXcgQm9vbGVhbihjb250ZXh0LmdldEluc3RhbGxDbGllbnREZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFN0YXJ0U2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRTdGFydFdlYlNlcnZpY2VEZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFRlc3RTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRUZXN0Q2xpZW50KCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRNb25pdG9yU2VydmljZShuZXcgQm9vbGVhbihjb250ZXh0LmdldE1vbml0b3JXZWJTZXJ2aWNlRGVmYXVsdCgpKSk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFNlcnZpY2VHZW5lcmF0aW9uKGNvbnRleHQuZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpKTsgLy9qdmgKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0Q2xpZW50R2VuZXJhdGlvbihjb250ZXh0LmdldEdlbmVyYXRlQ2xpZW50RGVmYXVsdCgpKTsgLy9qdmgKLSAgICAgIHNlcnZlcldpZGdldF8uaW50ZXJuYWxpemUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICogIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotCXsKLQkgIHN0b3JlVmFsdWVzKCk7Ci0JICByZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RvcmVWYWx1ZXMoKQotCXsKLQkgIFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCSAgCi0JICBUeXBlUnVudGltZVNlcnZlciBzZXJ2ZXJJZHMgPSBzZXJ2ZXJXaWRnZXRfLmdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpOwotCSAgVHlwZVJ1bnRpbWVTZXJ2ZXIgY2xpZW50SWRzID0gc2VydmVyV2lkZ2V0Xy5nZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpOwotCSAgCi0gICAgICBjb250ZXh0LnNldFdlYlNlcnZpY2VUeXBlKCBzZXJ2ZXJJZHMuZ2V0VHlwZUlkKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoIGNsaWVudElkcy5nZXRUeXBlSWQoKSApOwotICAgICAgY29udGV4dC5zZXRHZW5lcmF0ZVByb3h5KCBzZXJ2ZXJXaWRnZXRfLmdldEdlbmVyYXRlUHJveHkoKS5ib29sZWFuVmFsdWUoKSApOwotICAgICAgY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIHNlcnZlcldpZGdldF8uZ2V0UHVibGlzaFNlcnZpY2UoKS5ib29sZWFuVmFsdWUoKSApOwotICAgICAgY29udGV4dC5zZXRJbnN0YWxsV2ViU2VydmljZSggc2VydmVyV2lkZ2V0Xy5nZXRJbnN0YWxsU2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldEluc3RhbGxDbGllbnQoIHNlcnZlcldpZGdldF8uZ2V0SW5zdGFsbENsaWVudCgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldFN0YXJ0V2ViU2VydmljZSggc2VydmVyV2lkZ2V0Xy5nZXRTdGFydFNlcnZpY2UoKS5ib29sZWFuVmFsdWUoKSApOwotICAgICAgY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggc2VydmVyV2lkZ2V0Xy5nZXRUZXN0U2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldE1vbml0b3JXZWJTZXJ2aWNlKHNlcnZlcldpZGdldF8uZ2V0TW9uaXRvclNlcnZpY2UoKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICBjb250ZXh0LnNldEdlbmVyYXRlV2ViU2VydmljZShzZXJ2ZXJXaWRnZXRfLmdldFNlcnZpY2VHZW5lcmF0aW9uKCkpOyAgICAgIAotICAgICAgY29udGV4dC5zZXRHZW5lcmF0ZUNsaWVudChzZXJ2ZXJXaWRnZXRfLmdldENsaWVudEdlbmVyYXRpb24oKSk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0JewotCSAgcGVyZm9ybU9rKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXRDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXRDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzk2YzFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuc2VydmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyLlN0YXJ0U2VydmVyV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGNsYXNzIFN0YXJ0U2VydmVyV2lkZ2V0Q29udHJpYnV0b3IgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvciAKLXsKLSAgcHJpdmF0ZSBJU2VydmVyICAgICAgc2VydmVyXzsKLQkgIAotICBwdWJsaWMgU3RhcnRTZXJ2ZXJXaWRnZXRDb250cmlidXRvciggSVNlcnZlciBzZXJ2ZXIgKQotICB7Ci0Jc2VydmVyXyA9IHNlcnZlcjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIAotICB7Ci0JcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU1RBUlRfU0VSVkVSOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgCi0gIHsKLQlyZXR1cm4gIiI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgCi0gIHsKLQlyZXR1cm4gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfU1RBUlRfU0VSVkVSOwotICB9Ci0KLSAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBnZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSAKLSAgewotCXJldHVybiBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLQkgICAgICAgewotCQkJIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKSAKLQkJCSB7Ci0JCQkJcmV0dXJuIG5ldyBTdGFydFNlcnZlcldpZGdldCggc2VydmVyXyApOwotIAkJCSB9Ci0JICAgICAgIH07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NzE3YjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMzI4ICAgMTczMzQ1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBlZWsgbmV4dCBwYWdlIHByb2JsZW0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5zZXJ2ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IAotewotICBwcml2YXRlIElXZWJTZXJ2aWNlIHdlYnNlcnZpY2VfOwotICBwcml2YXRlIElDb250ZXh0IGNvbnRleHRfOwotICAKLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKSAKLSAgewotICAgIElTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLSAgICAKLSAgICBpZiggd2Vic2VydmljZV8gIT0gbnVsbCAmJiBjb250ZXh0Xy5nZXRSdW4oKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgaW5zdGFuY2VJZCA9IHdlYnNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotICAgICAgCi0gICAgICBpZiggaW5zdGFuY2VJZCAhPSBudWxsICYmIGluc3RhbmNlSWQubGVuZ3RoKCkgPiAwICkKLSAgICAgIHsKLSAgICAgICAgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKCBpbnN0YW5jZUlkICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCBzZXJ2ZXIgIT0gbnVsbCAmJiBzZXJ2ZXIuZ2V0U2VydmVyU3RhdGUoKSAhPSBJU2VydmVyLlNUQVRFX1NUQVJURUQgKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhcnRTZXJ2ZXJXaWRnZXRDb250cmlidXRvciggc2VydmVyICk7Ci0gICAgfQotICAgIAotCXJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldE5leHROYW1lZFdpZGdldCggSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0Q29udHJpYnV0b3IpIAotICB7Ci0JcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0gIHsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFN0YXJ0U2VydmVyV2lkZ2V0RmFjdG9yeS5jbGFzcyApOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5LmNsYXNzICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlIHdlYnNlcnZpY2UgKQotICB7Ci0gICAgd2Vic2VydmljZV8gPSB3ZWJzZXJ2aWNlOyAgCi0gIH0KLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCAoIElDb250ZXh0IGNvbnRleHQgKQotICB7Ci0gICAgY29udGV4dF8gPSBjb250ZXh0OyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzMTYzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNyAgIDEzNTQxNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDA3ICAgMTM1NDQzIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEwICAgMTM1NDQyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQxMCAgIDEzNTQ0MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMCAgIDEzNTU2MiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMSAgIDEzNjE2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MTcgICAxMzYzOTAvMTM2MzkxLzEzNjE1OSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2MTU4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzY3MDUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNjE4MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjAgICAxMzc4MjAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyMSAgIDEzNjc2MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI0ICAgMTM4MDUyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNSAgIDEzNzgzMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI2ICAgMTM4NTE5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDI3ICAgMTM4MDU4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTA0ICAgMTM4MDM1IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTI0ICAgMTQyMjc2IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDYwNSAgIDE0NTA4MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYwNyAgIDE0NDgyNiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYwNyAgIDE0NDA0OSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYxNCAgIDE0NjI3MCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYxNiAgIDE0NzMxNyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDcxNyAgIDE1MDU3NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwNjA3MjYgICAxNTA4NjUgc2VuZ3BsQGNhLmlibS5jb20gLSAgU2VuZyBQaHVuZy1MdQotICogMjAwNjA4MDMgICAxNTI0ODYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFR5cGluZyBXU0RMIGluIFNlcnZpY2UgZGVmaW5pdGlvbiBmaWVsZCBpcyB2ZXJ5IHNsb3cKLSAqIDIwMDYwODE3ICAgMTQwMDE3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBsb25nZXIgcHJvamVjdCBvciBzZXJ2ZXIvcnVudGltZSBzdHJpbmdzIGRvIG5vdCByZXNpemUgd2l6YXJkCi0gKiAyMDA2MDgyNSAgIDEzNTU3MCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgU2VydmljZSBpbXBsZW1lbnRhdGlvbiBVUkwgbm90IGRpc3BsYXllZCBwcm9wZXJseSBvbiBmaXJzdCBwYWdlCi0gKiAyMDA2MDgyOSAgIDE1NTQ0MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd2ViIHNlcnZpY2Ugd2l6YXJkIGhhbmdzIGR1cmluZyByZXNpemUKLSAqIDIwMDYwODMwICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFVwZGF0ZWQgcGF0Y2ggZm9yIHRoaXMgZGVmZWN0LgotICogMjAwNjA4MzEgICAxNTU0NDEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNtYWxsIHR3ZWFrIGZvciB0aGlzIGJ1ZwotICogMjAwNjEwMDMgICAxNTkxNDIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYxMjEyICAgMTY0MTc3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBJbmNvcnJlY3QgdmFsaWRhdGlvbiBlcnJvciBjb21wbGFpbmluZyBhYm91dCBydW50aW1lIG5vdCBzdXBwb3J0aW5nIGEgcHJvamVjdCB0eXBlCi0gKiAyMDA2MTIxMiAgIDE1OTkxMSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgY2hhbmdpbmcgc2VydmljZSBkZWZpbml0aW9uIHJlc2V0cyBzb21lIGNvbmZpZ3VyYXRpb24gZmllbGRzCi0gKiAyMDA3MDIwNSAgIDE3MjY4NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgTlBFIGluIFNjZW5jYXJpbyBEZWZhdWx0cyBwcmVmZXJlbmNlcyBwYWdlCi0gKiAyMDA3MTEzMCAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAyMDUgICAxNzAxNDEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMjE1ICAgMjE2MzM3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMzAxICAgMjIxMDM0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMxMiAgIDE0NzQ0MiB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICogMjAwODAzMTggICAyMTMzMzAgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcsIE5vbi1jb252ZW50aW9uYWwgSmF2YSBuYW1pbmcgcHJldmVudHMgY3JlYXRpbmcgV2ViIFNlcnZpY2VzIChjbGllbnQpCi0gKiAyMDA4MDMyNiAgIDE5ODQzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODA0MDIgICAxOTg0Mzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDE2ICAgMjE1MDg0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwNDE3ICAgMjI3NTk5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5EZWZhdWx0aW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5WYWxpZGF0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5JT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5JUGFja2FibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHJvamVjdFNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSU9iamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuVGltZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lLlNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5MYWJlbHNBbmRJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUNvbnRyb2xFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY2FsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5IeXBlcmxpbmtHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5IeXBlcmxpbmtTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLklIeXBlcmxpbmtMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy53aWRnZXRzLkh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuUGFnZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotcHVibGljIGNsYXNzIFNlcnZlcldpemFyZFdpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvciBpbXBsZW1lbnRzIFJ1bm5hYmxlLCBJUGFja2FibGUgewotCQotCS8vSU5GT1BPUFMKLSAgICAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDAxIGZvciB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCXByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9QQUdFID0gIldTV1NDRU4wMDAxIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAxMCBmb3IgdGhlIFdlYiBTZXJ2aWNlIFR5cGUgY29tYm8gYm94IG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DT01CT19TRVJWSUNFVFlQRSA9ICJXU1dTQ0VOMDAxMCI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMTQgZm9yIHRoZSBtb25pdG9yIHNlcnZpY2UgY2hlY2tib3ggb2YgdGhlIFNjZW5hcmlvIHBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0NIRUNLQk9YX01PTklUT1JfU0VSVklDRSA9ICJXU1dTQ0VOMDAxNCI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMTIgZm9yIHRoZSBMYXVuY2ggVURESSBjaGVjayBib3ggb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0NIRUNLQk9YX0xBVU5DSF9XUyA9ICJXU1dTQ0VOMDAxMiI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjAgZm9yIHRoZSBTZXJ2aWNlIEltcGxlbWVuYXRpb24gdGV4dCBmaWVsZCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fVEVYVF9TRVJWSUNFX0lNUEwgPSAiV1NXU0NFTjAwMjAiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIxIGZvciB0aGVTZXJ2aWNlIFNsaWRlciBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fU0NBTEVfU0VSVklDRSA9ICJXU1dTQ0VOMDAyMSI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjIgZm9yIHRoZSBTZXJ2ZXIgaHlwZXJsaW5rIG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfU0VSVkVSID0gIldTV1NDRU4wMDIyIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyMyBmb3IgdGhlIFJ1bnRpbWUgaHlwZXJsaW5rIG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfUlVOVElNRSA9ICJXU1dTQ0VOMDAyMyI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjQgZm9yIHRoZVByb2plY3RzIGh5cGVybGluayBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTICA9ICJXU1dTQ0VOMDAyNCI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMzAgZm9yIHRoZSBPdmVyd3JpdGUgRmlsZXMgY2hlY2tib3ggb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0NIRUNLQk9YX09WRVJXUklURSA9ICJXU1dTQ0VOMDAzMCI7Ci0JIAotCXByaXZhdGUgU2NhbGVTZWxlY3Rpb25MaXN0ZW5lciBzY2FsZVNlbGVjdGlvbkxpc3RlbmVyID0gbmV3IFNjYWxlU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQlwcml2YXRlIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyXzsKLQlwcml2YXRlIE1vZGlmeUxpc3RlbmVyIG9iamVjdE1vZGlmeUxpc3RlbmVyXyA7Ci0JcHJpdmF0ZSBpbnQgdmFsaWRhdGlvblN0YXRlXzsKLQlib29sZWFuIHZhbGlkT2JqZWN0U2VsZWN0aW9uXyA9IHRydWU7Ci0KLQlwcml2YXRlIEltYWdlUmVnaXN0cnkgaW1hZ2VSZWdfOwotCQotCXByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzXzsKLQlwcml2YXRlIExhYmVsc0FuZElkcyBsYWJlbElkc187Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZVByb2plY3ROYW1lXzsKLQlwcml2YXRlIElQcm9qZWN0IGluaXRpYWxQcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcl87Ci0JcHJpdmF0ZSBib29sZWFuIG5lZWRFYXJfOwotCQkgCi0JcHJpdmF0ZSBib29sZWFuIGRldmVsb3BTZXJ2aWNlXzsKLQlwcml2YXRlIGJvb2xlYW4gYXNzZW1ibGVTZXJ2aWNlXzsKLQlwcml2YXRlIGJvb2xlYW4gZGVwbG95U2VydmljZV87Ci0JCi0JcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb25fOwotCXByaXZhdGUgQm9vbGVhbiB0ZXN0U2VydmljZV87Ci0JcHJpdmF0ZSBCb29sZWFuIHN0YXJ0U2VydmljZV87Ci0JcHJpdmF0ZSBCb29sZWFuIGluc3RhbGxTZXJ2aWNlXzsKLQotCXByaXZhdGUgYm9vbGVhbiBkaXNwbGF5UHJlZmVyZW5jZXNfOwotCXByaXZhdGUgYm9vbGVhbiBwcmVmZXJlbmNlc1BhZ2VfOwotCi0JcHJpdmF0ZSBDb21wb3NpdGUgZ3JvdXBDb21wb3NpdGVfOwotCXByaXZhdGUgQ29tcG9zaXRlIGhDb21wU2VydmljZV87CQotCXByaXZhdGUgV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQgY2xpZW50V2lkZ2V0XzsKLSAgICBwcml2YXRlIExhYmVsIHNlcnZpY2VMYWJlbF87Ci0JcHJpdmF0ZSBDb21ibyB3ZWJzZXJ2aWNlVHlwZV87Ci0JcHJpdmF0ZSBUZXh0IHNlcnZpY2VJbXBsXzsKLQlwcml2YXRlIFNjYWxlIHNlcnZpY2VTY2FsZV87Ci0JcHJpdmF0ZSBMYWJlbCB0b3BvbG9neVNwb3RfOwotCXByaXZhdGUgQnV0dG9uIGJyb3dzZUJ1dHRvbl87Ci0JcHJpdmF0ZSBCdXR0b24gcHVibGlzaEJ1dHRvbl87Ci0JcHJpdmF0ZSBCdXR0b24gbW9uaXRvckJ1dHRvbl87Ci0JcHJpdmF0ZSBCdXR0b24gb3ZlcndyaXRlQnV0dG9uXzsJCi0JcHJpdmF0ZSBTZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZyBicm93c2VEaWFsb2dfOwotCXByaXZhdGUgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyBwcm9qZWN0RGlhbG9nXzsKLQlwcml2YXRlIEh5cGVybGluayBoTGlua1NlcnZpY2VSdW50aW1lXzsKLQlwcml2YXRlIEh5cGVybGluayBoTGlua1NlcnZpY2VTZXJ2ZXJfOwotCXByaXZhdGUgSHlwZXJsaW5rIGhMaW5rU2VydmljZVByb2plY3RfOwotCXByaXZhdGUgSHlwZXJsaW5rIGhMaW5rU2VydmljZUVBUl87Ci0JCQotCXByaXZhdGUgT2JqZWN0IG9iamVjdFNlbGVjdGlvbldpZGdldF87IC8vbWF5IGJlIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIG9yIElPYmplY3RTZWxlY3Rpb25XaWRnZXQKLQkKLQlwcml2YXRlIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHRfOwotCQotCXByaXZhdGUgVGltZXIgdGltZXJfID0gbnVsbDsKLQkJCi0JcHJpdmF0ZSBVSVV0aWxzIHV0aWxzXyA9IG5ldyBVSVV0aWxzKCJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiKTsKLQkKLQlwcml2YXRlIGJvb2xlYW4gZm9yY2VSZWZyZXNoUnVudGltZSA9IGZhbHNlOwotCQotCXByaXZhdGUgU3RyaW5nIEdSQVBISUNfU0VSVklDRV8wPSJpY29ucy9zZXJ2aWNlX3Rlc3QuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIEdSQVBISUNfU0VSVklDRV8xPSJpY29ucy9zZXJ2aWNlX3J1bi5qcGciOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIEdSQVBISUNfU0VSVklDRV8yPSJpY29ucy9zZXJ2aWNlX2luc3RhbGwuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIEdSQVBISUNfU0VSVklDRV8zPSJpY29ucy9zZXJ2aWNlX2RlcGxveS5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19TRVJWSUNFXzQ9Imljb25zL3NlcnZpY2VfYXNzZW1ibGUuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIEdSQVBISUNfU0VSVklDRV81PSJpY29ucy9zZXJ2aWNlX2RldmVsb3AuanBnIjsgLy8kTk9OLU5MUy1OJAotCQkKLQlwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzA9Imljb25zL3NjYWxlMF9iZ3JvdW5kLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzE9Imljb25zL3NjYWxlMV9iZ3JvdW5kLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzI9Imljb25zL3NjYWxlMl9iZ3JvdW5kLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzM9Imljb25zL3NjYWxlM19iZ3JvdW5kLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzQ9Imljb25zL3NjYWxlNF9iZ3JvdW5kLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzU9Imljb25zL3NjYWxlNV9iZ3JvdW5kLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzY9Imljb25zL3NjYWxlNl9iZ3JvdW5kLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQotCXByaXZhdGUgU3RyaW5nIFNFUlZJQ0VfUlVOVElNRV9QUkVGSVggPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfUlVOVElNRVNfTElTVCA7IAotICAgIHByaXZhdGUgU3RyaW5nIFNFUlZJQ0VfU0VSVkVSX1BSRUZJWCA9ICBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVkVSU19MSVNUOwotICAgIHByaXZhdGUgU3RyaW5nIFNFUlZJQ0VfUFJPSkVDVF9QUkVGSVggPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9QUk9KRUNUOwotICAgIHByaXZhdGUgU3RyaW5nIFNFUlZJQ0VfRUFSX1BSRUZJWCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWSUNFX0VBUl9QUk9KRUNUOwotICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSBkaXNwbGF5UHJlZmVyZW5jZXMgU2V0IHRvIHRydWUgaWYgcHJlZmVyZW5jZXMgc3VjaCBhcyBvdmVyd3JpdGUgc2hvdWxkIGJlIGRpc3BsYXllZCBvbiB0aGUgd2l6YXJkIHBhZ2UKLSAgICAgKiBAcGFyYW0gcHJlZlBhZ2UgIFNldCB0byB0cnVlIGlmIHRoZSB3aWRnZXQgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcHJlZmVyZW5jZXMgcGFnZS4gIEFsdGVycyB3aWRnZXQgbGF5b3V0LgotICAgICAqLwotCXB1YmxpYyBTZXJ2ZXJXaXphcmRXaWRnZXQoYm9vbGVhbiBkaXNwbGF5UHJlZmVyZW5jZXMsIGJvb2xlYW4gcHJlZlBhZ2UpIHsKLQkJZGlzcGxheVByZWZlcmVuY2VzXyA9IGRpc3BsYXlQcmVmZXJlbmNlczsKLQkJcHJlZmVyZW5jZXNQYWdlXyA9IHByZWZQYWdlOwotCQlpbml0SW1hZ2VSZWdpc3RyeSgpOwotCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQl9Ci0JCi0JcHJpdmF0ZSBDb21wb3NpdGUgc2VydmljZUNvbXBvc2l0ZV87Ci0JCi0JLyoqCi0JICogUnVuIHRoaXMgU2VydmVyV2l6YXJkV2lkZ2V0LCB3aGljaCB2YWxpZGF0ZXMgdGhlIGVudHJ5IGZpZWxkIHZhbHVlcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQotCQkvLyBkbyBtaW5pbWFsIGNoZWNrIGhlcmUsIHRoaXMgY2FsbCB3aWxsIGRldGVybWluZSBpZiB3ZSBhdCBsZWFzdAotCQkvLyBoYXZlIGEgInZhbGlkT2JqZWN0U2VsZWN0aW9uXyIKLQkJY2hlY2tTZXJ2aWNlSW1wbFRleHRTdGF0dXMoKTsKLQkJCi0JCWlmICh2YWxpZE9iamVjdFNlbGVjdGlvbl8pCi0JCXsKLQkJCWJvb2xlYW4gcmVmcmVzaFJ1bnRpbWUgPSAoZ2V0V2ViU2VydmljZVNjZW5hcmlvKCkgIT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pOyAKLQkJCQotCQkJaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSkKLQkJICAgICAgIHsKLQkJCQlJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSBsYXVuY2hhYmxlID0gKElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKW9iamVjdFNlbGVjdGlvbldpZGdldF87Ci0JCQkJY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKGxhdW5jaGFibGUuZ2V0T2JqZWN0U2VsZWN0aW9uKCksIGxhdW5jaGFibGUuZ2V0UHJvamVjdCgpLCBsYXVuY2hhYmxlLmdldENvbXBvbmVudE5hbWUoKSwgcmVmcmVzaFJ1bnRpbWUpOwkJCQkJCQkJCi0JCSAgICAgICB9Ci0JCQllbHNlIAotCQkJewotCQkJCUlPYmplY3RTZWxlY3Rpb25XaWRnZXQgd2lkZ2V0ID0gKElPYmplY3RTZWxlY3Rpb25XaWRnZXQpb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLQkJCQljYWxsT2JqZWN0VHJhbnNmb3JtYXRpb24od2lkZ2V0LmdldE9iamVjdFNlbGVjdGlvbigpLCB3aWRnZXQuZ2V0UHJvamVjdCgpLCB3aWRnZXQuZ2V0Q29tcG9uZW50TmFtZSgpLCByZWZyZXNoUnVudGltZSk7Ci0JCSAgICB9CQotCQl9Ci0JCWVsc2UKLQkJCXNldE9iamVjdFNlbGVjdGlvbihudWxsKTsKLQkJCi0JCS8vIGRvIGZ1bGwgdmFsaWRhdGlvbiBhZnRlciBhbGwgdHJhbnNmb3JtYXRpb25zIGFuZCBjYWxjdWxhdGlvbnMgaGF2ZSBvY2N1cnJlZAotCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwkJCi0JfQotCQotCS8qKgotCSAqIFBhY2sgdGhpcyB3aWRnZXQgYW5kIHRoZSBjbGllbnQtc2lkZSB3aWRnZXQgYXMgd2VsbC4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIHBhY2tTZWxmKCkgewotCQkvLyBkb24ndCBuZWVkIHRvIGNhbGwgcGFja0l0KCksIHNpbmNlIGNsaWVudFdpZGdldF8gaGFzIGEgY2FsbGJhY2sgdG8gcGFja0l0KCkgYWxyZWFkeS4KLQkJY2xpZW50V2lkZ2V0Xy5wYWNrSXQoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSVBhY2thYmxlI3BhY2tJdCgpCi0JICovCi0JcHVibGljIHZvaWQgcGFja0l0KCkgewkJCi0JCWdyb3VwQ29tcG9zaXRlXy5wYWNrKHRydWUpOwotCQl1dGlsc18uaG9yaXpvbnRhbFJlc2l6ZShncm91cENvbXBvc2l0ZV8uZ2V0U2hlbGwoKSwgZ3JvdXBDb21wb3NpdGVfLCBVSVV0aWxzLkRFRkFVTFRfUEFERElORyk7Ci0JfQotCQotCXB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsCi0JCQlMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikgewotCQkJCQotCQlzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsKLQkJdXRpbHNfLmNyZWF0ZUluZm9Qb3AocGFyZW50LCBJTkZPUE9QX1dTV1NDRU5fUEFHRSk7Ci0JCQotCQlDb21wb3NpdGUgdHlwZUNvbXBvc2l0ZSA9IHV0aWxzXy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAzKTsKLQotCQl3ZWJzZXJ2aWNlVHlwZV8gPSB1dGlsc18uY3JlYXRlQ29tYm8odHlwZUNvbXBvc2l0ZSwKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV0VCU0VSVklDRVRZUEUsCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdQUl9DT01CT19UWVBFLAotCQkJCUlORk9QT1BfV1NXU0NFTl9DT01CT19TRVJWSUNFVFlQRSwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIKLQkJCQkJCXwgU1dULlJFQURfT05MWSk7Ci0JCUdyaWREYXRhIGdkYXRhMSA9IChHcmlkRGF0YSkgd2Vic2VydmljZVR5cGVfLmdldExheW91dERhdGEoKTsKLQkJZ2RhdGExLmhvcml6b250YWxTcGFuID0gMjsKLQkJd2Vic2VydmljZVR5cGVfLnNldExheW91dERhdGEoZ2RhdGExKTsKLQkJCi0JCXdlYnNlcnZpY2VUeXBlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7fQotCQkJCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJU3RyaW5nIG9sZFR5cGVJZCA9IGlkc18uZ2V0VHlwZUlkKCk7Ci0JCQkJaW50IGN1cnJlbnRTZWxlY3Rpb25JZHggPSB3ZWJzZXJ2aWNlVHlwZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkJCQlTdHJpbmcgY3VycmVudFR5cGVJZCA9IGxhYmVsSWRzXy5nZXRJZHNfKClbY3VycmVudFNlbGVjdGlvbklkeF07Ci0JCQkJaWYgKCFvbGRUeXBlSWQuZXF1YWxzKGN1cnJlbnRUeXBlSWQpKSB7CQkJCQkKLQkJCQkJaWRzXy5zZXRUeXBlSWQoY3VycmVudFR5cGVJZCk7Ci0JCQkJCQotCQkJCQkvLyBkb24ndCBuZWVkIHRvIHJlZnJlc2ggcnVudGltZSBvciB2YWxpZGF0ZSBmaWVsZHMgaWYgd2UgYXJlIG9uIHRoZSBwcmVmZXJlbmNlIHBhZ2UsIGp1c3QgcmV0dXJuCi0JCQkJCWlmIChwcmVmZXJlbmNlc1BhZ2VfKQotCQkJCQkJcmV0dXJuOwotCQkJCQkJCi0JCQkJCWludCBvbGRTY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZChvbGRUeXBlSWQpOwotCQkJCQlpbnQgY3VycmVudFNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKGN1cnJlbnRUeXBlSWQpOwotCi0JCQkgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRfID0gZ2V0U2VsZWN0aW9uV2lkZ2V0KCk7Ci0JCQkJCS8vIGNoYW5nZSB0aGUgbGFiZWwgZm9yIHRoZSBzZXJ2aWNlCi0JCQkJCS8vIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24gYmFzZWQgb24gdGhlIHdlYiBzZXJ2aWNlIHR5cGUKLQkJCQkJaGFuZGxlVHlwZUNoYW5nZSgpOwkJCQkJCi0KLQkJCQkJLy8gQWZ0ZXIgYnVnIDE1OTkxMSwgd2Ugd2lsbCBub3QgcmVmcmVzaCB0aGUgcnVudGltZSBpbiBUT1BET1dOIHNjZW5hcmlvIHVubGVzcyB3ZSBhYnNvbHV0ZWx5Ci0JCQkJCS8vIGhhdmUgdG8uICBUaGVyZWZvcmUsIGlmIHdlIGFyZSBzd2l0Y2hpbmcgZnJvbSBhbm90aGVyIHNjZW5hcmlvIHR5cGUsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgCi0JCQkJCS8vIGN1cnJlbnQgc2VsZWN0aW9ucyBhcmUgdmFsaWQgZm9yIHRoaXMgVE9QRE9XTiBzY2VuYXJpbywgaWYgbm90LCB0cnkgdG8gcGljayBhIG1vcmUgc3VpdGFibGUgCi0JCQkJCS8vIHJ1bnRpbWUuCi0JCQkJCWlmIChjdXJyZW50U2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pIHsKLQkJCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUzsKLQkJCQkJCQotCQkJCQkJLy8gdGhpcyB3aWxsIGZvcmNlIGEgcmVmcmVzaCB0aGUgbmV4dCB0aW1lIHRoZSB3c2RsIGlzIGNoYW5nZWQKLQkJCQkJCWZvcmNlUmVmcmVzaFJ1bnRpbWUgPSAhY2hlY2tFcnJvclN0YXR1cygpLmlzT0soKTsKLQkJCQkJfQotCQkJCQkKLQkJCQkJLy9pZiB0aGUgd2ViIHNlcnZpY2UgdHlwZSBjaGFuZ2UgaXMgZnJvbSBvbmUgdG9wLWRvd24gdHlwZSB0byBhbm90aGVyCi0JCQkJCS8vdG9wLWRvd24gdHlwZSBsZWF2ZSB0aGUgb2JqZWN0IHNlbGVjdGlvbiBmaWVsZCBpbiB0YWN0IGFuZCByZWZyZXNoCi0JCQkJCS8vdGhlIHNlcnZlci9ydW50aW1lIHByb2plY3QgZGVmYXVsdGluZy4KLQkJCQkJLy9PdGhlcndpc2UgY2xlYXIgdGhlIG9iamVjdCBzZWxlY3Rpb24gZmllbGQgc2luY2UgaXQncyB2YWx1ZSBpcyBub3QgdmFsaWQgYW55bW9yZQotCQkJCQlpZiAob2xkU2NlbmFyaW89PVdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOICYmIGN1cnJlbnRTY2VuYXJpbz09V2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCQkJCQkJCi0JCQkJCXsKLQkJCQkJCS8vIGlmIHN3aXRjaGluZyBmcm9tIG9uZSBUT1BET1dOIHNjZW5hcmlvIHRvIGFub3RoZXIgVE9QRE9XTiBzY2VuYXJpbyBhbmQKLQkJCQkJCS8vIHdlJ3ZlIGRldGVybWluZWQgdGhhdCB0aGUgY3VycmVudCBydW50aW1lIHNlbGVjdGlvbiBpcyBub3Qgc3VpdGFibGUsIHdlIAotCQkJCQkJLy8gY2FuIHJlZnJlc2ggdGhlIHJ1bnRpbWUgbm93IChkb24ndCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHRpbWUgdGhlCi0JCQkJCQkvLyB3c2RsIGlzIGNoYW5nZWQpLgotCQkJCQkJaWYgKGZvcmNlUmVmcmVzaFJ1bnRpbWUpIHsKLQkJCQkJCQlyZWZyZXNoU2VydmVyUnVudGltZVNlbGVjdGlvbigpOwotCQkJCQkJCWZvcmNlUmVmcmVzaFJ1bnRpbWUgPSBmYWxzZTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCS8vY2xlYXIgdGhlIG9iamVjdCBzZWxlY3Rpb24gZmllbGQKLQkJCQkJCS8vIHNlcnZpY2VJbXBsIG1heSBiZSBudWxsIGlmIG9uIHRoZSBwcmVmZXJlbmNlcyBwYWdlCi0JCQkJCQlpZiAoc2VydmljZUltcGxfICE9IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJc2VydmljZUltcGxfLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJCQkJc2VydmljZUltcGxfLnNldFRleHQoIiIpOwotCQkJCQkJCXNldE9iamVjdFNlbGVjdGlvbihudWxsKTsKLQkJCQkJCQlzZXJ2aWNlSW1wbF8uYWRkTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJCQkJCX0JCQkJCQkgICAKLQkJCQkJfQkJCQkJCi0JCQkgICB2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJCSAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsJCQkgICAKLQkJCQkJCi0JCQl9Ci0JCSAgfQotCQkJCi0JCX0pOwotCQkKLQkJLy8gQ3JlYXRlIHRleHQgZmllbGQgYW5kIGJyb3dzZSBmb3Igb2JqZWN0IHNlbGVjdGlvbiBpZiBub3Qgb24gcHJlZmVyZW5jZXMgcGFnZQotCQlpZiAoIXByZWZlcmVuY2VzUGFnZV8pCi0JCXsKLQkJCS8vdGV4dCBvZiB0aGlzIGxhYmVsIGlzIGJhc2VkIG9uIHRoZSB3ZWIgc2VydmljZSB0eXBlIHNlbGVjdGVkIGluIHdlYnNlcnZpY2VUeXBlXyBjb21ibwotCQkJc2VydmljZUxhYmVsXyA9IG5ldyBMYWJlbCggdHlwZUNvbXBvc2l0ZSwgU1dULldSQVApOwotCQkJc2VydmljZUxhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XRUJTRVJWSUNFSU1QTCk7Ci0JCQlzZXJ2aWNlTGFiZWxfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMKTsKLQotCQkJc2VydmljZUltcGxfID0gbmV3IFRleHQodHlwZUNvbXBvc2l0ZSwgU1dULkxFRlQgfCBTV1QuQk9SREVSICk7Ci0JCQlHcmlkRGF0YSBncmlkZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwkJICAgIAotCQkJc2VydmljZUltcGxfLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0JCQlzZXJ2aWNlSW1wbF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9URVhUX0lNUEwpOwotCQkJdXRpbHNfLmNyZWF0ZUluZm9Qb3Aoc2VydmljZUltcGxfLCBJTkZPUE9QX1dTV1NDRU5fVEVYVF9TRVJWSUNFX0lNUEwpOwotCQkJCi0JCQlvYmplY3RNb2RpZnlMaXN0ZW5lcl8gPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKXsKLQkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCQkgICAgaWYgKHNlcnZpY2VJbXBsXy5nZXRUZXh0KCkuaW5kZXhPZignOicpID4gMCkgewotCQkJCSAgICAgICAgdGltZXJfID0gVGltZXIubmV3SW5zdGFuY2UodGltZXJfLCBEaXNwbGF5LmdldEN1cnJlbnQoKSwgU2VydmVyV2l6YXJkV2lkZ2V0LnRoaXMpOwotCQkJCSAgICAgICAgdGltZXJfLnN0YXJ0VGltZXIoKTsKLQkJCQkgICAgfQotCQkJCSAgICBlbHNlCi0JCQkJICAgICAgICBydW4oKTsKLQkJCQl9Ci0JCQl9OwotCQkJCi0JCQlzZXJ2aWNlSW1wbF8uYWRkTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQotCQkJYnJvd3NlQnV0dG9uXyA9IHV0aWxzXy5jcmVhdGVQdXNoQnV0dG9uKHR5cGVDb21wb3NpdGUsCi0JCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fQlJPV1NFLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9CUk9XU0VfSU1QTCwgbnVsbCk7Ci0KLQkJCUlXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLQkJCWJyb3dzZURpYWxvZ18gPSBuZXcgU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cod29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIAotCQkJCQluZXcgUGFnZUluZm8oQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRJTEVfU0VSVklDRV9JTVBMX1NFTEVDVElPTiwgIiIsIAotCQkJCQkJCW5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkJCQl7CQotCQkJCQkJcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0JCQkJCQl7CSAgCQkJCQkJIAotCQkJCQkJCXJldHVybiBuZXcgT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KCk7Ci0JCQkJCQl9Ci0JCQkJCX0pKTsJCQotCQkJYnJvd3NlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VydmljZUltcGxCcm93c2VMaXN0ZW5lcigpKTsKLQkJfQotCQkvLyBTZXJ2aWNlIExpZmVjeWNsZSBzZWN0aW9uIC0gc2NhbGVzIGZvciBzZXJ2aWNlICYgY2xpZW50LCBncmFwaGljCi0JCQotCQlncm91cENvbXBvc2l0ZV8gPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGdjbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ2NsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWdjbGF5b3V0Lmhvcml6b250YWxTcGFjaW5nPTA7CQkKLQkJZ2NsYXlvdXQubWFyZ2luSGVpZ2h0PTA7CQkKLQkJZ2NsYXlvdXQubWFyZ2luQm90dG9tPTU7Ci0JCWdyb3VwQ29tcG9zaXRlXy5zZXRMYXlvdXQoIGdjbGF5b3V0ICk7Ci0JICAgIEdyaWREYXRhIGdjR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoU1dULkJFR0lOTklORywgU1dULkJFR0lOTklORywgdHJ1ZSwgdHJ1ZSk7Ci0JICAgIGdyb3VwQ29tcG9zaXRlXy5zZXRMYXlvdXREYXRhKGdjR3JpZERhdGEpOwkJCi0JICAgIAotCSAgICBncm91cENvbXBvc2l0ZV8uYWRkQ29udHJvbExpc3RlbmVyKG5ldyBDb250cm9sTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBjb250cm9sTW92ZWQoQ29udHJvbEV2ZW50IGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQkJCi0JCQl9Ci0JCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZSkgewotCQkJCWdyb3VwQ29tcG9zaXRlXy5wYWNrKHRydWUpOwkJCQkKLQkJCX0KLQkJfSk7Ci0JICAgIAotCQlzZXJ2aWNlQ29tcG9zaXRlXyA9ICBuZXcgQ29tcG9zaXRlKGdyb3VwQ29tcG9zaXRlXywgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGdyaWRsYXlvdXQgICA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JICAgIGdyaWRsYXlvdXQubnVtQ29sdW1ucyAgID0gMjsKLQkgICAgZ3JpZGxheW91dC5ob3Jpem9udGFsU3BhY2luZz0wOwotCSAgICBncmlkbGF5b3V0Lm1hcmdpbkhlaWdodD0wOwotCSAgICBzZXJ2aWNlQ29tcG9zaXRlXy5zZXRMYXlvdXQoIGdyaWRsYXlvdXQgKTsKLQkgICAgR3JpZERhdGEgc2NHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotCSAgICBzZXJ2aWNlQ29tcG9zaXRlXy5zZXRMYXlvdXREYXRhKHNjR3JpZERhdGEpOyAgICAKLQkgICAgCi0JCXNlcnZpY2VDb21wb3NpdGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRSk7Ci0JCi0JCQotCQlzZXJ2aWNlU2NhbGVfID0gbmV3IFNjYWxlKHNlcnZpY2VDb21wb3NpdGVfLCBTV1QuVkVSVElDQUwgfCBTV1QuQk9SREVSKTsKLQkgICAgdXRpbHNfLmNyZWF0ZUluZm9Qb3Aoc2VydmljZVNjYWxlXywgSU5GT1BPUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0UpOwotCQlzZXJ2aWNlU2NhbGVfLnNldE1pbmltdW0oMCk7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0TWF4aW11bSg2KTsKLQkJc2VydmljZVNjYWxlXy5zZXRJbmNyZW1lbnQoMSk7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0UGFnZUluY3JlbWVudCgxKTsKLQkJc2VydmljZVNjYWxlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihzY2FsZVNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJc2VydmljZVNjYWxlXy5zZXRTZWxlY3Rpb24oZ2V0U2VydmljZUdlbmVyYXRpb24oKSk7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9TRVJWSUNFKTsKLQkJCi0JCUFjY2Vzc2libGUgYWNjZXNzaWJsZVNjYWxlID0gc2VydmljZVNjYWxlXy5nZXRBY2Nlc3NpYmxlKCk7Ci0JCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIobmV3IEFjY2Vzc2libGVBZGFwdGVyKCl7Ci0JCQkvLwlyZXR1cm4gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgd2hhdCB0byBkbyB3aXRoIHRoZSBzbGlkZXIKLQkJCS8vICB0aGlzIGlzIHJlYWQgYnkgdGhlIHNjcmVlbiByZWFkZXIgd2hlbiB0aGUgc2xpZGVyIGZpcnN0IGdldHMgZm9jdXMKLQkJCXB1YmxpYyB2b2lkIGdldE5hbWUoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRTsJCQkKLQkJCX0JCQkKLQkJfSk7Ci0JCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlQ29udHJvbExpc3RlbmVyKG5ldyBBY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXIoKXsKLQkJCS8vIHJldHVybiBhIG1lYW5pbmdmdWwgc3RyaW5nIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIKLQkJCS8vIGF0dGVtcHRzIHRvIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc2VydmljZSBzY2FsZQotCQkJcHVibGljIHZvaWQgZ2V0VmFsdWUoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQkJaW50IHNlbGVjdGlvbiA9IHNlcnZpY2VTY2FsZV8uZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJc3dpdGNoIChzZWxlY3Rpb24pIHsKLQkJCQljYXNlIDA6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9URVNUOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDE6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9SVU47Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEw7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFUExPWTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA0OgotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQVNTRU1CTEU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNToJCQkJCQotCQkJCWNhc2UgNjoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1A7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwotCQkJCX0JCQkJCQkJCQotCQkJfQotCQl9KTsJCi0JCQotCQlHcmlkRGF0YSBsYXlvdXREYXRhMSA9IG5ldyBHcmlkRGF0YSgpOwotCQlsYXlvdXREYXRhMS5ob3Jpem9udGFsQWxpZ25tZW50PVNXVC5DRU5URVI7Ci0JCWxheW91dERhdGExLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkJFR0lOTklORzsKLQkJUmVjdGFuZ2xlIHNjYWxlUiA9IChpbWFnZVJlZ18uZ2V0KElDT05fU0NBTEVfQkdfMCkpLmdldEJvdW5kcygpOwotCQlsYXlvdXREYXRhMS5oZWlnaHRIaW50PXNjYWxlUi5oZWlnaHQ7Ci0JCWxheW91dERhdGExLndpZHRoSGludD1zY2FsZVIud2lkdGgrMTsKLQkJc2VydmljZVNjYWxlXy5zZXRMYXlvdXREYXRhKGxheW91dERhdGExKTsJCQotCQkKLQkJdG9wb2xvZ3lTcG90XyA9IG5ldyBMYWJlbChzZXJ2aWNlQ29tcG9zaXRlXywgU1dULkJPUkRFUiB8IFNXVC5UT1AgKTsKLQkJdG9wb2xvZ3lTcG90Xy5zZXRCYWNrZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSkpOwotCQl0b3BvbG9neVNwb3RfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRSk7Ci0JCQotCQlHcmlkRGF0YSBsYXlvdXREYXRhMiA9IG5ldyBHcmlkRGF0YSgpOwkJCi0JCWxheW91dERhdGEyLmhvcml6b250YWxBbGlnbm1lbnQ9U1dULkJFR0lOTklORzsJCQkJCi0JCWxheW91dERhdGEyLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkJFR0lOTklORzsKLQkJUmVjdGFuZ2xlIHRvcFIgPSAoaW1hZ2VSZWdfLmdldChHUkFQSElDX1NFUlZJQ0VfMCkpLmdldEJvdW5kcygpOwotCQlsYXlvdXREYXRhMi5oZWlnaHRIaW50PXRvcFIuaGVpZ2h0OwotCQlsYXlvdXREYXRhMi53aWR0aEhpbnQ9dG9wUi53aWR0aDsKLQkJdG9wb2xvZ3lTcG90Xy5zZXRMYXlvdXREYXRhKGxheW91dERhdGEyKTsJCQotCQkJCQotCQlzZXRHcmFwaGljcyhnZXRTZXJ2aWNlR2VuZXJhdGlvbigpKTsKLQkJCi0JCWhDb21wU2VydmljZV8gPSB1dGlsc18uY3JlYXRlQ29tcG9zaXRlKGdyb3VwQ29tcG9zaXRlXywgMSk7Ci0JCQotCQlMYWJlbCBzZXJ2aWNlRGV0YWlsc0xhYmVsID0gbmV3IExhYmVsKGhDb21wU2VydmljZV8sIFNXVC5OT05FKTsKLQkJc2VydmljZURldGFpbHNMYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVU1NQVJZKTsKLQkJCi0JCWhMaW5rU2VydmljZVNlcnZlcl89IG5ldyBIeXBlcmxpbmsoaENvbXBTZXJ2aWNlXywgU1dULk5VTEwpOwotCQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua1NlcnZpY2VTZXJ2ZXJfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1NFUlZFUik7Ci0JCWhMaW5rU2VydmljZVNlcnZlcl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19URVhUX1NFUlZFUik7Ci0JCWhMaW5rU2VydmljZVNlcnZlcl8uYWRkSHlwZXJsaW5rTGlzdGVuZXIobmV3IElIeXBlcmxpbmtMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsJCQkJCi0JCQkJbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhmYWxzZSwgdHJ1ZSk7CQkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCi0JCWhMaW5rU2VydmljZVJ1bnRpbWVfID0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1JVTlRJTUUpOwotCQloTGlua1NlcnZpY2VSdW50aW1lXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1RFWFRfUlVOVElNRSk7Ci0JCWhMaW5rU2VydmljZVJ1bnRpbWVfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7Ci0JCQkJCQkJCWxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coZmFsc2UpOwotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCQkKLQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQlwcm9qZWN0RGlhbG9nXyA9IG5ldyBQcm9qZWN0U2VsZWN0aW9uRGlhbG9nKHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpLCAKLQkJCQluZXcgUGFnZUluZm8oQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRJTEVfU0VSVklDRV9QUk9KRUNUX1NFVFRJTkdTLCAiIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgCQkJCQkJewkKLSAgCQkJCQkJCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAJCQkJCQkJewkgIAkJCQkJCSAKLSAgCQkJCQkJCSAgIHJldHVybiBuZXcgUHJvamVjdFNlbGVjdGlvbldpZGdldCgpOwotICAJCQkJCQkJfQotICAJCQkJCQl9KSk7Ci0JCQotCQloTGlua1NlcnZpY2VQcm9qZWN0Xz0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TRVJWSUNFUFJPSkVDVF9MSU5LKTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8uYWRkSHlwZXJsaW5rTGlzdGVuZXIobmV3IElIeXBlcmxpbmtMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsKLQkJCQlsYXVuY2hQcm9qZWN0RGlhbG9nKCk7CQkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCQkKLQkJaExpbmtTZXJ2aWNlRUFSXz0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQkJaExpbmtTZXJ2aWNlRUFSXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NFUlZJQ0VQUk9KRUNUX0xJTkspOwotCQloTGlua1NlcnZpY2VFQVJfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7Ci0JCQkJbGF1bmNoUHJvamVjdERpYWxvZygpOwkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwkJCi0KLQkJaExpbmtTZXJ2aWNlU2VydmVyXy5zZXRUZXh0KFNFUlZJQ0VfU0VSVkVSX1BSRUZJWCk7IAotCQloTGlua1NlcnZpY2VSdW50aW1lXy5zZXRUZXh0KFNFUlZJQ0VfUlVOVElNRV9QUkVGSVgpOwotCQloTGlua1NlcnZpY2VQcm9qZWN0Xy5zZXRUZXh0KFNFUlZJQ0VfUFJPSkVDVF9QUkVGSVgpOwotCQloTGlua1NlcnZpY2VFQVJfLnNldFRleHQoU0VSVklDRV9FQVJfUFJFRklYKTsKLQkJCi0JCUh5cGVybGlua0dyb3VwIHNlcnZlclJ1bnRpbWVHcm91cCA9IG5ldyBIeXBlcmxpbmtHcm91cChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQotCQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rU2VydmljZVNlcnZlcl8pOwotCQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rU2VydmljZVJ1bnRpbWVfKTsKLQkJc2VydmVyUnVudGltZUdyb3VwLmFkZChoTGlua1NlcnZpY2VQcm9qZWN0Xyk7Ci0JCXNlcnZlclJ1bnRpbWVHcm91cC5hZGQoaExpbmtTZXJ2aWNlRUFSXyk7Ci0JCXNlcnZlclJ1bnRpbWVHcm91cC5zZXRIeXBlcmxpbmtVbmRlcmxpbmVNb2RlKEh5cGVybGlua1NldHRpbmdzLlVOREVSTElORV9BTFdBWVMpOwotICAgIAotCQl1dGlsc18uY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDEpOwkJCi0JCQotCQkvLyBBZGQgY2xpZW50IHdpZGdldHMuLi4KLQkJY2xpZW50V2lkZ2V0XyA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldChmYWxzZSk7Ci0JICAgIGNsaWVudFdpZGdldF8uYWRkQ29udHJvbHMocGFyZW50LCBzdGF0dXNMaXN0ZW5lciApOwotCSAgICBjbGllbnRXaWRnZXRfLnNldFBhY2thYmxlKHRoaXMpOwotCSAgICBjbGllbnRXaWRnZXRfLmVuYWJsZUNsaWVudFNsaWRlcihzZXJ2aWNlU2NhbGVfLmdldFNlbGVjdGlvbigpPD1TY2VuYXJpb0NvbnRleHQuV1NfU1RBUlQpOwotCQkKLQkJLy8gQWR2YW5jZWQgYnV0dG9ucyBzZWN0aW9uCi0JCXV0aWxzXy5jcmVhdGVIb3Jpem9udGFsU2VwYXJhdG9yKHBhcmVudCwgMyk7Ci0JCQotCQlDb21wb3NpdGUgYWR2YW5jZWRCdXR0b25QYW5lbCA9IHV0aWxzXy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxKTsKLQkJCi0JCXB1Ymxpc2hCdXR0b25fID0gdXRpbHNfLmNyZWF0ZUNoZWNrYm94KGFkdmFuY2VkQnV0dG9uUGFuZWwsCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XU1dTQ0VOX1BVQkxJU0gsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTEFVTkNIX1dTLCBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTEFVTkNIX1dTKTsJCQotCQltb25pdG9yQnV0dG9uXyA9IHV0aWxzXy5jcmVhdGVDaGVja2JveChhZHZhbmNlZEJ1dHRvblBhbmVsLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5DSEVDS0JPWF9NT05JVE9SX1dFQlNFUlZJQ0UsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFLCBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFKTsKLQotCQlpZiAoZGlzcGxheVByZWZlcmVuY2VzXyAmJiBnZXRSZXNvdXJjZUNvbnRleHQoKS5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKSB7Ci0JCQl1dGlsc18uY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDEpOwkJCQotCQkJQ29tcG9zaXRlIHByZWZCdXR0b25QYW5lbCA9IHV0aWxzXy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxKTsKLQkJCW92ZXJ3cml0ZUJ1dHRvbl8gPSB1dGlsc18uY3JlYXRlQ2hlY2tib3gocHJlZkJ1dHRvblBhbmVsLAotCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9PVkVSV1JJVEVfRklMRVMsIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9PVkVSV1JJVEUpOwotCQkJb3ZlcndyaXRlQnV0dG9uXy5zZXRTZWxlY3Rpb24oZ2V0UmVzb3VyY2VDb250ZXh0KCkKLQkJCQkJLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotCQl9Ci0KLQkJcmV0dXJuIHRoaXM7Ci0JfQkKLQkKLQlwcml2YXRlIHZvaWQgbGF1bmNoUHJvamVjdERpYWxvZygpCi0JewotCQlTdHJpbmcgY3VycmVudFByb2plY3ROYW1lID0gZ2V0U2VydmljZVByb2plY3ROYW1lKCk7Ci0JCVN0cmluZyBjdXJyZW50RWFyUHJvamVjdE5hbWUgPSBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIGN1cnJlbnRQcm9qZWN0VHlwZSA9IGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCk7Ci0JCWJvb2xlYW4gY3VycmVudE5lZWRFYXIgPSBnZXRTZXJ2aWNlTmVlZEVBUigpOwotCQkKLQkJcHJvamVjdERpYWxvZ18uc2V0UHJvamVjdE5hbWUoY3VycmVudFByb2plY3ROYW1lKTsKLQkJcHJvamVjdERpYWxvZ18uc2V0RWFyUHJvamVjdE5hbWUoY3VycmVudEVhclByb2plY3ROYW1lKTsKLQkJcHJvamVjdERpYWxvZ18uc2V0UHJvamVjdENvbXBvbmVudFR5cGUoY3VycmVudFByb2plY3RUeXBlKTsKLQkJcHJvamVjdERpYWxvZ18uc2V0TmVlZEVBUihjdXJyZW50TmVlZEVhcik7Ci0JCQotCQlpbnQgc3RhdHVzID0gcHJvamVjdERpYWxvZ18ub3BlbigpOwotCQlpZiAoc3RhdHVzID09IFdpbmRvdy5PSykKLQkJewotCQkJU3RyaW5nIG5ld1Byb2plY3ROYW1lID0gcHJvamVjdERpYWxvZ18uZ2V0UHJvamVjdE5hbWUoKTsKLQkJCVN0cmluZyBuZXdFYXJQcm9qZWN0TmFtZSA9IHByb2plY3REaWFsb2dfLmdldEVhclByb2plY3ROYW1lKCk7Ci0JCQlTdHJpbmcgbmV3UHJvamVjdFR5cGUgPSBwcm9qZWN0RGlhbG9nXy5nZXRQcm9qZWN0Q29tcG9uZW50VHlwZSgpOwotCQkJYm9vbGVhbiBuZXdOZWVkRWFyID0gcHJvamVjdERpYWxvZ18uZ2V0TmVlZEVBUigpOwkKLQkJCQotCQkJLy9VcGRhdGUgcHJvamVjdCBzZXR0aW5ncyBhbmQgdmFsaWRhdGUgcGFnZSBpZiBzZWxlY3Rpb25zIGNoYW5nZWQuCi0JCQlpZiAoIW5ld1Byb2plY3ROYW1lLmVxdWFscyhjdXJyZW50UHJvamVjdE5hbWUpCi0JCQkJCXx8ICFuZXdFYXJQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudEVhclByb2plY3ROYW1lKQotCQkJCQl8fCAhbmV3UHJvamVjdFR5cGUuZXF1YWxzKGN1cnJlbnRQcm9qZWN0VHlwZSkKLQkJCQkJfHwgbmV3TmVlZEVhciAhPSBjdXJyZW50TmVlZEVhcikgewotCQkJCXNldFNlcnZpY2VQcm9qZWN0TmFtZShuZXdQcm9qZWN0TmFtZSk7Ci0JCQkJc2V0U2VydmljZUVhclByb2plY3ROYW1lKG5ld0VhclByb2plY3ROYW1lKTsKLQkJCQlzZXRTZXJ2aWNlQ29tcG9uZW50VHlwZShuZXdQcm9qZWN0VHlwZSk7Ci0JCQkJc2V0U2VydmljZU5lZWRFQVIobmV3TmVlZEVhcik7CQkJCQotCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSAobmV3IFZhbGlkYXRpb25VdGlscygpKS5nZXROZXdWYWxpZGF0aW9uU3RhdGUodmFsaWRhdGlvblN0YXRlXywgVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUyk7Ci0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotCQkJfQotCQkJCi0JCQkvKmNoZWNrIHRvIHNlZSBpZiB0ZXh0IGhhcyBjaGFuZ2VkIGZvciBwcm9qZWN0IGFuZCBFQVIKLQkJCWlmIHNvLCByZXBhaW50IGxpbmtzICovCi0JCQlpZiAoIW5ld1Byb2plY3ROYW1lLmVxdWFscyhjdXJyZW50UHJvamVjdE5hbWUpKQotCQkJewotCQkJCWhMaW5rU2VydmljZVByb2plY3RfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja1NlbGYoKTsJIAotCQkJfQotCQkJaWYgKCFuZXdFYXJQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudEVhclByb2plY3ROYW1lKSkKLQkJCXsKLQkJCQloTGlua1NlcnZpY2VFQVJfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja1NlbGYoKTsJICAJCQkJCQotCQkJfQotCQl9Ci0JfQotCQkKLQlwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQpCi0JewotCQlsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKGNsaWVudENvbnRleHQsIGZhbHNlKTsKLQl9Ci0JCQotCXByaXZhdGUgdm9pZCBsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKGJvb2xlYW4gY2xpZW50Q29udGV4dCwgYm9vbGVhbiBzZWxlY3RTZXJ2ZXJGaXJzdCkgCQotCXsJCi0JCWJ5dGUgbW9kZSA9IGNsaWVudENvbnRleHQgPyAoYnl0ZSkxIDogKGJ5dGUpMDsKLQkJCi0JCS8vVE9ETzoganZoIC0gaW52ZXN0aWdhdGUgLSBkb24ndCB0aGluayBqMmVlIHZlcnNpb24gc2hvdWxkbid0IGJlIGhhcmQgY29kZWQgKGxhc3QgcGFybSkgCi0JCS8vICBxdWVzdGlvbiAtIHdoZXJlIHRvIHBpY2sgaXQgdXAgZnJvbT8KLQkJLy9SZW1lbWJlciB0aGUgY3VycmVudCB2YWx1ZXMKLQkJVHlwZVJ1bnRpbWVTZXJ2ZXIgY3VycmVudFNlcnZpY2VUUlMgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQlSdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nIHJzc2QgPSBuZXcgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZygKLQkJCQl3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgbW9kZSwgY3VycmVudFNlcnZpY2VUUlMsICIxNCIpOwkKLQkJcnNzZC5zZXRTZWxlY3RTZXJ2ZXJGaXJzdChzZWxlY3RTZXJ2ZXJGaXJzdCk7CQkKLQkJaW50IHJlc3VsdCA9IHJzc2Qub3BlbigpOwkJCi0JCWlmIChyZXN1bHQgPT0gV2luZG93Lk9LKQotCQl7Ci0JCQlUeXBlUnVudGltZVNlcnZlciBuZXdTZXJ2aWNlVFJTID0gcnNzZC5nZXRUeXBlUnVudGltZVNlcnZlcigpOwotCQkJaWYgKCFjdXJyZW50U2VydmljZVRSUy5lcXVhbHMobmV3U2VydmljZVRSUykpCi0JCQl7Ci0JCQkJc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKG5ld1NlcnZpY2VUUlMpOwkKLQkJCQlyZWZyZXNoQ2xpZW50U2VydmVyUnVudGltZVNlbGVjdGlvbigpOwkKLQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gKG5ldyBWYWxpZGF0aW9uVXRpbHMoKSkuZ2V0TmV3VmFsaWRhdGlvblN0YXRlKHZhbGlkYXRpb25TdGF0ZV8sIFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTKTsKLQkJCQljbGllbnRXaWRnZXRfLnNldFZhbGlkYXRpb25TdGF0ZShWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUyk7Ci0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOyAvL1JldmFsaWRhdGUgdGhlIHBhZ2Ugc2luY2Ugc2VydmVyL3J1bnRpbWUgc2VsZWN0aW9ucyBjaGFuZ2VkLgotCQkJfQotCQkJCi0JCX0JCQotCX0JCi0JCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzKSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoIGlkcyApOwotCX0KLQotCXB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpIHsKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRJbnN0YWxsQ2xpZW50KEJvb2xlYW4gaW5zdGFsbCkgewotCQljbGllbnRXaWRnZXRfLnNldEluc3RhbGxDbGllbnQoIGluc3RhbGwgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldEluc3RhbGxDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U3RhcnRDbGllbnQoQm9vbGVhbiBzdGFydENsaWVudCkgewotCQljbGllbnRXaWRnZXRfLnNldFN0YXJ0Q2xpZW50KCBzdGFydENsaWVudCApOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFN0YXJ0Q2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldFN0YXJ0Q2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFRlc3RDbGllbnQoQm9vbGVhbiB0ZXN0Q2xpZW50KSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0VGVzdENsaWVudCggdGVzdENsaWVudCApOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFRlc3RDbGllbnQoKSB7CQkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0VGVzdENsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wQ2xpZW50KGJvb2xlYW4gZGV2ZWxvcCkgewotCQljbGllbnRXaWRnZXRfLnNldERldmVsb3BDbGllbnQoIGRldmVsb3AgKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wQ2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldERldmVsb3BDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0QXNzZW1ibGVDbGllbnQoYm9vbGVhbiBhc3NlbWJsZSkgewotCQljbGllbnRXaWRnZXRfLnNldEFzc2VtYmxlQ2xpZW50KCBhc3NlbWJsZSApOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlQ2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldEFzc2VtYmxlQ2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldERlcGxveUNsaWVudChib29sZWFuIGRlcGxveSkgewotCQljbGllbnRXaWRnZXRfLnNldERlcGxveUNsaWVudCggZGVwbG95ICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldERlcGxveUNsaWVudCgpOwotCX0KLQotcHJpdmF0ZSB2b2lkIGhhbmRsZVR5cGVDaGFuZ2UoKQotCXsKLQkJaWYgKCFwcmVmZXJlbmNlc1BhZ2VfKSB7Ci0JCSAgIGludCBzY2VuYXJpbyA9IGdldFdlYlNlcnZpY2VTY2VuYXJpbygpOwotCQkgICAKLQkJICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkKLQkJICAgewotCQkJICBzZXJ2aWNlTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VJTVBMKTsKLQkJICAgfQotCQkgICBlbHNlIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikKLQkJICAgewotCQkJICAgc2VydmljZUxhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XRUJTRVJWSUNFREVGKTsKLQkJICAgfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykgewotCQlMYWJlbHNBbmRJZHMgbGFiZWxJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotCQkJCS5nZXRTZXJ2aWNlVHlwZUxhYmVscygpOwotCQkvLyByc2tyZWcKLQkJaW50IHNlbGVjdGlvbiA9IDA7Ci0JCVN0cmluZ1tdIHNlcnZpY2VJZHMgPSBsYWJlbElkcy5nZXRJZHNfKCk7Ci0JCVN0cmluZyBzZWxlY3RlZElkID0gaWRzLmdldFR5cGVJZCgpOwotCi0JCXdlYnNlcnZpY2VUeXBlXy5zZXRJdGVtcyhsYWJlbElkcy5nZXRMYWJlbHNfKCkpOwotCi0JCS8vIE5vdyBmaW5kIHRoZSBzZWxlY3RlZCBvbmUuCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzZXJ2aWNlSWRzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJaWYgKHNlbGVjdGVkSWQuZXF1YWxzKHNlcnZpY2VJZHNbaW5kZXhdKSkgewotCQkJCXNlbGVjdGlvbiA9IGluZGV4OwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXdlYnNlcnZpY2VUeXBlXy5zZWxlY3Qoc2VsZWN0aW9uKTsKLQkJCi0JCWlkc18gPSBpZHM7Ci0JCQotCQlpZiAoaWRzXyAhPSBudWxsKQotCQl7Ci0JCQlTdHJpbmcgc2VydmljZVNlcnZlclRleHQgPSAiIjsKLQkJCVN0cmluZyBzZXJ2ZXJJZCA9IGlkc18uZ2V0U2VydmVySWQoKTsKLQkJCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpPjApCi0JCQl7Ci0JCQkgIHNlcnZpY2VTZXJ2ZXJUZXh0ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKHNlcnZlcklkKTsKLQkJCX0KLQkJCVN0cmluZyBzZXJ2aWNlUnVudGltZVRleHQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKGlkc18uZ2V0UnVudGltZUlkKCkpOwotCQkJCi0JCQlTdHJpbmcgY3VycmVudFNlcnZlclRleHQgPSBoTGlua1NlcnZpY2VTZXJ2ZXJfLmdldFRleHQoKTsKLQkJCVN0cmluZyBjdXJyZW50UnVudGltZVRleHQgPSBoTGlua1NlcnZpY2VSdW50aW1lXy5nZXRUZXh0KCk7Ci0JCQlTdHJpbmcgbmV3U2VydmVyVGV4dCA9IFNFUlZJQ0VfU0VSVkVSX1BSRUZJWCArICIgIiArIHNlcnZpY2VTZXJ2ZXJUZXh0OwotCQkJU3RyaW5nIG5ld1J1bnRpbWVUZXh0ID0gU0VSVklDRV9SVU5USU1FX1BSRUZJWCArICIgIiArIHNlcnZpY2VSdW50aW1lVGV4dDsKLQkJCWhMaW5rU2VydmljZVNlcnZlcl8uc2V0VGV4dChuZXdTZXJ2ZXJUZXh0KTsKLQkJCWhMaW5rU2VydmljZVJ1bnRpbWVfLnNldFRleHQobmV3UnVudGltZVRleHQpOwkJCi0JCQkKLQkJCS8qY2hlY2sgdG8gc2VlIGlmIHRleHQgaGFzIGNoYW5nZWQgZm9yIHNlcnZlciBvciBydW50aW1lCi0JCQlpZiBzbywgcmVwYWludCBsaW5rcyAqLwotCQkJaWYgKCFuZXdTZXJ2ZXJUZXh0LmVxdWFscyhjdXJyZW50U2VydmVyVGV4dCkpCi0JCQl7Ci0JCQkJaExpbmtTZXJ2aWNlU2VydmVyXy5wYWNrKHRydWUpOwotCQkJCXBhY2tTZWxmKCk7Ci0JCQl9CQkJCi0JCQkKLQkJCWlmICghbmV3UnVudGltZVRleHQuZXF1YWxzKGN1cnJlbnRSdW50aW1lVGV4dCkpCi0JCQl7Ci0JCQkJaExpbmtTZXJ2aWNlUnVudGltZV8ucGFjayh0cnVlKTsKLQkJCQlwYWNrU2VsZigpOwotCQkJfSAKLQkJfQkJCQkKLQkJbGFiZWxJZHNfID0gbGFiZWxJZHM7Ci0JCWhhbmRsZVR5cGVDaGFuZ2UoKTsKLQkJCi0JCWlmIChwcm9qZWN0RGlhbG9nXyAhPSBudWxsKQotCQkJcHJvamVjdERpYWxvZ18uc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoaWRzXyk7Ci0JCQotCQkKLQkJLy9XaGVuIHRoZSBzZXJ2ZXIgY2hhbmdlcywgdGhlIHN0YXRlIG9mIG5lZWRFYXIgY291bGQgY2hhbmdlLgotCQkvL0lmIHRoZSB0aGUgc2VydmVyIGNoYW5nZSByZXN1bHRzIGluIGEgY2hhbmdlIGluIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLAotCQkvL3VwZGF0ZSBuZWVkRWFyIGFuZCBzZXJ2aWNlRWFyUHJvamVjdE5hbWUuCi0JCVZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLQkJYm9vbGVhbiBvbGROZWVkRWFyID0gZ2V0U2VydmljZU5lZWRFQVIoKTsKLQkJYm9vbGVhbiBzZXJ2aWNlUHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcjsKLQotCQlpZiAoIW9sZE5lZWRFYXIpCi0JCXsKLQkJCS8vSWYgYW4gRUFSIHdhcyBub3QgbmVlZGVkIHByZXZpb3VzbHkgaXQgY291bGQgaGF2ZSBiZWVuIGJlY2F1c2Ugb2YgdGhlIHByb2plY3QvcHJvamVjdCB0eXBlIG9yIHRoZSBzZXJ2ZXIuCi0JCQkvL0lmIGl0IHdhcyBiZWNhdXNlIG9mIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZSwgY2hhbmdpbmcgdGhlIHNlcnZlciBzaG91bGQgaGF2ZSBubyBpbXBhY3QKLQkJCS8vb24gdGhlIHN0YXRlIG9mIG5lZWRFYXIuCi0JCQlzZXJ2aWNlUHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhciA9IHZ1LnByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIoZ2V0U2VydmljZVByb2plY3ROYW1lKCksIGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJc2VydmljZVByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB0cnVlOwotCQl9Ci0JCQotCQkvL2Jvb2xlYW4gc2VydmljZVByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB2dS5wcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyKGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpLCBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpKTsKLQkJaWYgKHNlcnZpY2VQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyKQotCQl7Ci0JCQkvL0NvdWxkIG5vdCBydWxlIG91dCBuZWVkIGZvciBhbiBFYXIgZnJvbSB0aGUgcHJvamVjdC9wcm9qZWN0IHR5cGUgc28gY2hhbmdpbmcgdGhlIHNlcnZlcgotCQkJLy9tYXkgaW1wYWN0IHRoZSBuZWVkIGZvciBhbiBFYXIuCi0KLQkJCWJvb2xlYW4gY3VycmVudFNlcnZpY2VTZXJ2ZXJOZWVkc0VhciA9IHZ1LnNlcnZlck5lZWRzRUFSKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCkpOwotCQkJaWYgKG9sZE5lZWRFYXIgIT0gY3VycmVudFNlcnZpY2VTZXJ2ZXJOZWVkc0VhcikKLQkJCXsKLQkJCQkvL1VwZGF0ZSBuZWVkRWFyIGFuZCBzZXJ2aWNlRWFyUHJvamVjdE5hbWUuCi0JCQkJaWYgKGN1cnJlbnRTZXJ2aWNlU2VydmVyTmVlZHNFYXIpCi0JCQkJewotCQkJCQkvL0NhbGN1bGF0ZSBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgdGhlIEVhciBwcm9qZWN0IG5hbWUKLQkJCQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gRGVmYXVsdGluZ1V0aWxzLmdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKSk7Ci0JCQkJCXNldFNlcnZpY2VOZWVkRUFSKGN1cnJlbnRTZXJ2aWNlU2VydmVyTmVlZHNFYXIpOwotCQkJCQlzZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoZWFyUHJvamVjdE5hbWUpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlzZXRTZXJ2aWNlTmVlZEVBUihjdXJyZW50U2VydmljZVNlcnZlck5lZWRzRWFyKTsKLQkJCQkJc2V0U2VydmljZUVhclByb2plY3ROYW1lKCIiKTsJCQkJCQotCQkJCX0KLQkJCQkKLQkJCX0KLQkJfQkJCi0JfQotCi0JcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpIHsKLQkJcmV0dXJuIGlkc187Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZUdlbmVyYXRpb24oaW50IHZhbHVlKQotCXsKLQkJc2VydmljZVNjYWxlXy5zZXRTZWxlY3Rpb24odmFsdWUpOwotCQlzZXRHcmFwaGljcyh2YWx1ZSk7Ci0JCQotCQkvL2VuYWJsZSBjbGllbnQgd2lkZ2V0IGJhc2VkIG9uIHNlcnZpY2Ugc2NhbGUgc2V0dGluZwotCQljbGllbnRXaWRnZXRfLmVuYWJsZUNsaWVudFNsaWRlcih2YWx1ZTw9U2NlbmFyaW9Db250ZXh0LldTX1NUQVJUKTsKLQkJCi0JCS8qZm9yIHBvcHVwIGNhc2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgVUkgaXMgcmVmcmVzaGVkIGJhc2VkIG9uIAotCQljaGFuZ2VzIHRvIGRhdGEqLwotCQlwYWNrU2VsZigpOwotCX0JCi0KLQlwdWJsaWMgaW50IGdldFNlcnZpY2VHZW5lcmF0aW9uKCkKLQl7Ci0JCXJldHVybiBzZXJ2aWNlU2NhbGVfLmdldFNlbGVjdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wU2VydmljZSgpIHsKLQkJcmV0dXJuIGRldmVsb3BTZXJ2aWNlXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wU2VydmljZShib29sZWFuIGRldmVsb3BTZXJ2aWNlKSB7Ci0JCXRoaXMuZGV2ZWxvcFNlcnZpY2VfID0gZGV2ZWxvcFNlcnZpY2U7Ci0JfQkKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZVNlcnZpY2UoKSB7Ci0JCXJldHVybiBhc3NlbWJsZVNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlU2VydmljZShib29sZWFuIGFzc2VtYmxlU2VydmljZSkgewotCQl0aGlzLmFzc2VtYmxlU2VydmljZV8gPSBhc3NlbWJsZVNlcnZpY2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95U2VydmljZSgpIHsKLQkJcmV0dXJuIGRlcGxveVNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlcGxveVNlcnZpY2UoYm9vbGVhbiBkZXBsb3lTZXJ2aWNlKSB7Ci0JCXRoaXMuZGVwbG95U2VydmljZV8gPSBkZXBsb3lTZXJ2aWNlOwotCX0KLQkKLQlwdWJsaWMgQm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKXsKLQkJcmV0dXJuIHN0YXJ0U2VydmljZV87Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShCb29sZWFuIHZhbHVlKSB7Ci0gICAgICAgIHN0YXJ0U2VydmljZV89dmFsdWU7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0SW5zdGFsbFNlcnZpY2UoKSB7Ci0JCXJldHVybiBpbnN0YWxsU2VydmljZV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SW5zdGFsbFNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotICAgICAgICBpbnN0YWxsU2VydmljZV89dmFsdWU7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKSB7Ci0gICAgICAgIHJldHVybiAKLSAgICAgICAgbmV3IEJvb2xlYW4oIHRlc3RTZXJ2aWNlXy5ib29sZWFuVmFsdWUoKSB8fCBjbGllbnRXaWRnZXRfLmdldFRlc3RDbGllbnQoKS5ib29sZWFuVmFsdWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotICAgICAgICB0ZXN0U2VydmljZV89IHZhbHVlOwotCX0KLQlwdWJsaWMgQm9vbGVhbiBnZXRNb25pdG9yU2VydmljZSgpIHsKLQkJcmV0dXJuIG5ldyBCb29sZWFuKG1vbml0b3JCdXR0b25fLmdldFNlbGVjdGlvbigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNb25pdG9yU2VydmljZShCb29sZWFuIHZhbHVlKSB7Ci0JCW1vbml0b3JCdXR0b25fLnNldFNlbGVjdGlvbih2YWx1ZS5ib29sZWFuVmFsdWUoKSk7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0UHVibGlzaFNlcnZpY2UoKSB7CQkKLQkJcmV0dXJuIG5ldyBCb29sZWFuKHB1Ymxpc2hCdXR0b25fLmdldFNlbGVjdGlvbigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQdWJsaXNoU2VydmljZShCb29sZWFuIHZhbHVlKSB7Ci0JCXB1Ymxpc2hCdXR0b25fLnNldFNlbGVjdGlvbiggdmFsdWUuYm9vbGVhblZhbHVlKCkgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkgewotCQlyZXR1cm4gbmV3IEJvb2xlYW4oY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpOwkJCi0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50R2VuZXJhdGlvbihpbnQgdmFsdWUpCi0JewotCQljbGllbnRXaWRnZXRfLnNldENsaWVudEdlbmVyYXRpb24odmFsdWUpOwotCQkvKmZvciBwb3B1cCBjYXNlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFVJIGlzIHJlZnJlc2hlZCBiYXNlZCBvbiAKLQkJCWNoYW5nZXMgdG8gZGF0YSovCi0JCXBhY2tTZWxmKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKQotCXsKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0TmFtZSgpCi0JewotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRQcm9qZWN0TmFtZSgpOwotCX0KLQkKLQlwdWJsaWMgaW50IGdldENsaWVudEdlbmVyYXRpb24oKQotCXsKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50R2VuZXJhdGlvbigpOwotCX0JCi0KLQlwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpIHsKLQkJaWYgKHJlc291cmNlQ29udGV4dF8gPT0gbnVsbCkgewotCQkJcmVzb3VyY2VDb250ZXh0XyA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKQotCQkJCQkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0JCX0KLQkJcmV0dXJuIHJlc291cmNlQ29udGV4dF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KFJlc291cmNlQ29udGV4dCBjb250ZXh0KSB7Ci0JCXJlc291cmNlQ29udGV4dF8gPSBjb250ZXh0OwotCX0KLQotCXB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKQotCXsKLQkJcmV0dXJuIG9iamVjdFNlbGVjdGlvbl87CQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0JewotCQlvYmplY3RTZWxlY3Rpb25fID0gc2VsZWN0aW9uOwotCX0KLQkKLQlwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotCXsKLQkJcmV0dXJuIHBhcnNlcl87Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcikKLQl7Ci0JCXBhcnNlcl8gPSBwYXJzZXI7Ci0JCWNsaWVudFdpZGdldF8uc2V0V2ViU2VydmljZXNQYXJzZXIocGFyc2VyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKSB7CQkKLQkJCi0JCWlmIChwcmVmZXJlbmNlc1BhZ2VfKQotCQkJcmV0dXJuOwotCQkKLQkJaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gPT0gbnVsbCkKLQkJCW9iamVjdFNlbGVjdGlvbldpZGdldF8gPSBnZXRTZWxlY3Rpb25XaWRnZXQoKTsKLQkJCi0JCVN0cmluZyBkaXNwbGF5YWJsZSA9IG51bGw7Ci0JCQotCQlpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKSB7CQkKLQkJCUlPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIGxhdW5jaGFibGUgPSAoSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpIG9iamVjdFNlbGVjdGlvbldpZGdldF87Ci0JCQlsYXVuY2hhYmxlLnNldEluaXRpYWxTZWxlY3Rpb24ob2JqZWN0U2VsZWN0aW9uXyk7Ci0JCQlvYmplY3RTZWxlY3Rpb25fID0gbGF1bmNoYWJsZS5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLQkJCWRpc3BsYXlhYmxlID0gbGF1bmNoYWJsZS5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOwotCQl9Ci0JCWVsc2UgewotCQkJSU9iamVjdFNlbGVjdGlvbldpZGdldCBzZWxlY3Rpb25XaWRnZXQgPSAoSU9iamVjdFNlbGVjdGlvbldpZGdldCkgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLQkJCXNlbGVjdGlvbldpZGdldC5zZXRJbml0aWFsU2VsZWN0aW9uKG9iamVjdFNlbGVjdGlvbl8pOwotCQkgICAgZGlzcGxheWFibGUgPSBzZWxlY3Rpb25XaWRnZXQuZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKTsKLQkJfQotCQkKLQkJaWYgKGRpc3BsYXlhYmxlID09IG51bGwgfHwgZGlzcGxheWFibGUubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybjsKLQkJCQotCQlzZXJ2aWNlSW1wbF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJc2VydmljZUltcGxfLnNldFRleHQoZGlzcGxheWFibGUpOwotCQlzZXJ2aWNlSW1wbF8uYWRkTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotCQlJU3RhdHVzIG1pc3NpbmdGaWVsZFN0YXR1cyA9IGNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKCk7Ci0JCWlmIChtaXNzaW5nRmllbGRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gbWlzc2luZ0ZpZWxkU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBzZXJ2aWNlSW1wbFZhbGlkYXRpb25TdGF0dXMgPSBjaGVja1NlcnZpY2VJbXBsVGV4dFN0YXR1cygpOwotCQlpZiAoc2VydmljZUltcGxWYWxpZGF0aW9uU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuIHNlcnZpY2VJbXBsVmFsaWRhdGlvblN0YXR1czsKLQkJfQotCQllbHNlIGlmIChzZXJ2aWNlSW1wbFZhbGlkYXRpb25TdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLldBUk5JTkcpewotCQkJcmV0dXJuIHNlcnZpY2VJbXBsVmFsaWRhdGlvblN0YXR1czsKLQkJfQotCi0JCUlTdGF0dXMgcG9zc2libGVFcnJvclN0YXR1cyA9IGNoZWNrRXJyb3JTdGF0dXMoKTsKLQkJaWYgKHBvc3NpYmxlRXJyb3JTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SIHx8IHBvc3NpYmxlRXJyb3JTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLldBUk5JTkcpIHsKLQkJCXJldHVybiBwb3NzaWJsZUVycm9yU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBwb3NzaWJsZVdhcm5pbmdTdGF0dXMgPSBjaGVja1dhcm5pbmdTdGF0dXMoKTsKLQkJaWYgKHBvc3NpYmxlV2FybmluZ1N0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykgewotCQkJcmV0dXJuIHBvc3NpYmxlV2FybmluZ1N0YXR1czsKLQkJfQotCi0JCS8vIElmIG5vIHdhcm5pbmdzL2Vycm9ycyB3ZXJlIHJlcG9ydGVkLCBjbGVhciB2YWxpZGF0aW9uIHN0YXRlIG9uCi0JCS8vIHNlcnZpY2Ugc2lkZSBhbmQgY2xpZW50IHNpZGUgKGlmIGVuYWJsZWQpCi0JCXZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfTk9ORTsKLQkJaWYgKGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKSB7Ci0JCQljbGllbnRXaWRnZXRfLnNldFZhbGlkYXRpb25TdGF0ZShWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfTk9ORSk7Ci0JCX0KLQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQkKLQkvKgotCSAqIGNhbGwgdmFsaWRhdGlvbiBjb2RlIGluIHRoZSBvYmplY3Qgc2VsZWN0aW9uIHdpZGdldCB0byBlbnN1cmUgYW55Ci0JICogbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VydmljZUltcGxfIGZpZWxkIGFyZSB2YWxpZAotCSAqLwotCXByaXZhdGUgSVN0YXR1cyBjaGVja1NlcnZpY2VJbXBsVGV4dFN0YXR1cygpIHsKLQkJCi0JCVN0cmluZyBmaWVsZFRleHQgPSBzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpLnRyaW0oKTsKLQotCQlpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9PSBudWxsKQotCQl7Ci0JCQlvYmplY3RTZWxlY3Rpb25XaWRnZXRfID0gZ2V0U2VsZWN0aW9uV2lkZ2V0KCk7Ci0JCX0KLQkJCi0JCUlPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIGxhdW5jaGFibGUgPSBudWxsOwotCQlpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKQotCQkgICAgeyAgICAgIAkKLQkJCQlsYXVuY2hhYmxlID0gKElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKW9iamVjdFNlbGVjdGlvbldpZGdldF87Ci0JCQkJdmFsaWRPYmplY3RTZWxlY3Rpb25fID0gbGF1bmNoYWJsZS52YWxpZGF0ZShmaWVsZFRleHQpOwotCQkJfQotCQkJZWxzZSAKLQkJCXsKLQkJCQlJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IHdpZGdldCA9IChJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KW9iamVjdFNlbGVjdGlvbldpZGdldF87Ci0JCQkJdmFsaWRPYmplY3RTZWxlY3Rpb25fID0gd2lkZ2V0LnZhbGlkYXRlKGZpZWxkVGV4dCk7Ci0JCQl9Ci0JCQotCQlpZiAoIXZhbGlkT2JqZWN0U2VsZWN0aW9uXykKLQkJewotCQkJaW50IHNjZW5hcmlvID0gZ2V0V2ViU2VydmljZVNjZW5hcmlvKCk7Ci0JCQkKLQkJCWlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApewotCQkJCWlmIChsYXVuY2hhYmxlICE9IG51bGwpewotCQkJCQlJU3RhdHVzIHZhbFN0YXR1cyA9IGxhdW5jaGFibGUudmFsaWRhdGVTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZmllbGRUZXh0KSk7Ci0JCQkJCWlmICh2YWxTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLldBUk5JTkcpCi0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fU0VSVklDRV9JTVBMX05BTUlOR19DT05WRU5USU9OKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NFUlZJQ0VfSU1QTCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5WQUxJRF9TRVJWSUNFX0RFRik7CQkJCi0JCX0JCQotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgZ2V0V2ViU2VydmljZVNjZW5hcmlvKCkKLQl7Ci0JCSAgIGludCBpbmRleCA9IHdlYnNlcnZpY2VUeXBlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwkKLQkJICAgU3RyaW5nIHR5cGVJZCA9IGxhYmVsSWRzXy5nZXRJZHNfKClbaW5kZXhdOwotCQkgICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHR5cGVJZCk7CQkKLQl9Ci0JCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKCkgewotCi0JCS8vIDEuIENoZWNrIGZvciBtaXNzaW5nIGZpZWxkcyBvbiBzZXJ2aWNlIHNpZGUKLQkJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotCQlTdHJpbmcgc2VydmljZUltcGwgPSBzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpLnRyaW0oKTsKLQkJU3RyaW5nIHR5cGVJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFR5cGVJZCgpOwotCQlTdHJpbmcgcnVudGltZUlkID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0UnVudGltZUlkKCk7Ci0JCVN0cmluZyBzZXJ2ZXJJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCk7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9IGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpOwotCQlib29sZWFuIG5lZWRFYXIgPSBnZXRTZXJ2aWNlTmVlZEVBUigpOwotCQlTdHJpbmcgZWFyUHJvamVjdE5hbWUgPSBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIHByb2plY3RUeXBlSWQgPSBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpOwotCQkKLQkJSVN0YXR1cyBzZXJ2aWNlTWlzc2luZ0ZpZWxkU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tNaXNzaW5nRmllbGRTdGF0dXModmFsaWRhdGlvblN0YXRlXywgdHlwZUlkLCBzZXJ2aWNlSW1wbCwKLQkJCQlydW50aW1lSWQsIHNlcnZlcklkLCBwcm9qZWN0TmFtZSwgbmVlZEVhciwgZWFyUHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIGZhbHNlKTsKLQkJaWYgKHNlcnZpY2VNaXNzaW5nRmllbGRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gc2VydmljZU1pc3NpbmdGaWVsZFN0YXR1czsKLQkJfQotCi0JCS8vIDIuIENoZWNrIGZvciBtaXNzaW5nIGZpZWxkcyBvbiB0aGUgY2xpZW50IHNpZGUgaWYgaXQncyB2aXNpYmxlLgotCQlpZiAoY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpIHsKLQkJCUlTdGF0dXMgY2xpZW50TWlzc2luZ0ZpZWxkc1N0YXR1cyA9IGNsaWVudFdpZGdldF8uY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoKTsKLQkJCWlmIChjbGllbnRNaXNzaW5nRmllbGRzU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJCXJldHVybiBjbGllbnRNaXNzaW5nRmllbGRzU3RhdHVzOwotCQkJfQotCi0JCX0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwcml2YXRlIElTdGF0dXMgY2hlY2tFcnJvclN0YXR1cygpIHsKLQotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0KLQkJLy8gMS4gQ2hlY2sgZm9yIGVycm9ycyBvbiBzZXJ2aWNlIHNpZGUKLQkJU3RyaW5nIHJ1bnRpbWVJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpOwotCQlTdHJpbmcgc2VydmVySW5zdGFuY2VJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJU3RyaW5nIHR5cGVJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFR5cGVJZCgpOwotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKTsKLQkJYm9vbGVhbiBuZWVkRWFyID0gZ2V0U2VydmljZU5lZWRFQVIoKTsKLQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCk7Ci0JCVN0cmluZyBwcm9qZWN0VHlwZUlkID0gZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKTsKLQkJU3RyaW5nIGluaXRpYWxQcm9qZWN0TmFtZSA9ICIiOwotCQlpZiAoaW5pdGlhbFByb2plY3RfICE9IG51bGwpIHsKLQkJCWluaXRpYWxQcm9qZWN0TmFtZSA9IGluaXRpYWxQcm9qZWN0Xy5nZXROYW1lKCk7Ci0JCX0gCi0JCUlTdGF0dXMgc2VydmljZVNpZGVFcnJvclN0YXR1cyA9IHZhbFV0aWxzLmNoZWNrRXJyb3JTdGF0dXModmFsaWRhdGlvblN0YXRlXywgdHlwZUlkLCBydW50aW1lSWQsIHNlcnZlcklkLCAKLQkJCQlzZXJ2ZXJJbnN0YW5jZUlkLCBwcm9qZWN0TmFtZSwgaW5pdGlhbFByb2plY3ROYW1lLCBuZWVkRWFyLCBlYXJQcm9qZWN0TmFtZSwgcHJvamVjdFR5cGVJZCwgZmFsc2UpOwotCQlpZiAoc2VydmljZVNpZGVFcnJvclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBzZXJ2aWNlU2lkZUVycm9yU3RhdHVzOwotCQl9Ci0KLQkJLy8gMi4gQ2hlY2sgZm9yIGVycm9ycyBvbiBjbGllbnQgc2lkZSBpZiBpdCBpcyB2aXNpYmxlCi0JCWlmIChjbGllbnRXaWRnZXRfLmdldEdlbmVyYXRlUHJveHkoKSkgewotCQkJSVN0YXR1cyBjbGllbnRTaWRlRXJyb3JTdGF0dXMgPSBjbGllbnRXaWRnZXRfLmNoZWNrRXJyb3JTdGF0dXMoKTsKLQkJCWlmIChjbGllbnRTaWRlRXJyb3JTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQkJcmV0dXJuIGNsaWVudFNpZGVFcnJvclN0YXR1czsKLQkJCX0KLQotCQkJLy8gMy4gQ2hlY2sgZm9yIGVycm9ycyB0aGF0IHNwYW4gc2VydmljZSBhbmQgY2xpZW50IGlmIGNsaWVudCBzaWRlCi0JCQkvLyBpcyB2aXNpYmxlLgotCQkJaW50IGNsaWVudFZhbGlkYXRpb25TdGF0ZSA9IGNsaWVudFdpZGdldF8uZ2V0VmFsaWRhdGlvblN0YXRlKCk7Ci0JCQlpZiAodmFsaWRhdGlvblN0YXRlXyA9PSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMCi0JCQkJCXx8IHZhbGlkYXRpb25TdGF0ZV8gPT0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUwotCQkJCQl8fCBjbGllbnRWYWxpZGF0aW9uU3RhdGUgPT0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTAotCQkJCQl8fCBjbGllbnRWYWxpZGF0aW9uU3RhdGUgPT0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUykgewotCQkJCUlXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgcnVudGltZUNoZWNrZXIgPSBudWxsOwotCi0JCQkJU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZUlkKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLCBwcm9qZWN0TmFtZSwgcHJvamVjdFR5cGVJZCk7CSAgICAJCQotCQkJCXJ1bnRpbWVDaGVja2VyID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVDaGVja2VyKHNlcnZpY2VSdW50aW1lSWQpOwotCi0JCQkJaWYgKHJ1bnRpbWVDaGVja2VyICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIHJ1bnRpbWVDaGVja2VyLmNoZWNrU2VydmljZUNsaWVudENvbXBhdGliaWxpdHkoCi0JCQkJCQkJZ2V0U2VydmljZU5lZWRFQVIoKSwgZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCksIGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpLCAKLQkJCQkJCQljbGllbnRXaWRnZXRfLmdldENsaWVudE5lZWRFQVIoKSwgY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpLCAKLQkJCQkJCQljbGllbnRXaWRnZXRfLmdldENsaWVudFByb2plY3ROYW1lKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXByaXZhdGUgSVN0YXR1cyBjaGVja1dhcm5pbmdTdGF0dXMoKSB7Ci0JCVZhbGlkYXRpb25VdGlscyB2YWxVdGlscyA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLQkJLy8gMS4gQ2hlY2sgZm9yIHdhcm5pbmdzIG9uIHRoZSBzZXJ2aWNlIHNpZGUKLQkJaW50IHNjYWxlU2V0dGluZyA9IGdldFNlcnZpY2VHZW5lcmF0aW9uKCk7Ci0JCVN0cmluZyBzZXJ2ZXJJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCk7Ci0JCUlTdGF0dXMgc2VydmljZVdhcm5pbmdTdGF0dXMgPSB2YWxVdGlscy5jaGVja1dhcm5pbmdTdGF0dXModmFsaWRhdGlvblN0YXRlXywgc2NhbGVTZXR0aW5nLCBzZXJ2ZXJJZCwgZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpLCBmYWxzZSk7Ci0JCWlmIChzZXJ2aWNlV2FybmluZ1N0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykgewotCQkJcmV0dXJuIHNlcnZpY2VXYXJuaW5nU3RhdHVzOwotCQl9Ci0KLQkJLy8gMi4gQ2hlY2sgZm9yIHdhcm5pbmdzIG9uIHRoZSBjbGllbnQgc2lkZSBpZiBpdCdzIGVuYWJsZWQKLQkJaWYgKGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKSB7Ci0JCQlJU3RhdHVzIGNsaWVudFdhcm5pbmdTdGF0dXMgPSBjbGllbnRXaWRnZXRfLmNoZWNrV2FybmluZ1N0YXR1cygpOwotCQkJaWYgKGNsaWVudFdhcm5pbmdTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLldBUk5JTkcpIHsKLQkJCQlyZXR1cm4gY2xpZW50V2FybmluZ1N0YXR1czsKLQkJCX0KLQotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQkKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW1hZ2VSZWdpc3RyeSgpCi0JewotCQlpbWFnZVJlZ18gPSBuZXcgSW1hZ2VSZWdpc3RyeShEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfMCwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfMCkpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfMSwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfMSkpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfMiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfMikpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfMywgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfMykpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfNCwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfNCkpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfNSwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfNSkpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfNiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfNikpOwotCQkKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX1NFUlZJQ0VfMCwgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfU0VSVklDRV8wKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19TRVJWSUNFXzEsIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX1NFUlZJQ0VfMSkpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfU0VSVklDRV8yLCBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19TRVJWSUNFXzIpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX1NFUlZJQ0VfMywgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfU0VSVklDRV8zKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19TRVJWSUNFXzQsIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX1NFUlZJQ0VfNCkpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfU0VSVklDRV81LCBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19TRVJWSUNFXzUpKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldEFkdmFuY2VkT3B0aW9ucyhib29sZWFuIGVuYWJsZWQpCi0JewotCQltb25pdG9yQnV0dG9uXy5zZXRFbmFibGVkKGVuYWJsZWQpOyAKLQkJcHVibGlzaEJ1dHRvbl8uc2V0RW5hYmxlZChlbmFibGVkKTsJCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0JICB7Ci0JCXNlcnZpY2VQcm9qZWN0TmFtZV89IG5hbWU7Ci0JCWhMaW5rU2VydmljZVByb2plY3RfLnNldFRleHQoU0VSVklDRV9QUk9KRUNUX1BSRUZJWCArICIgIiArIHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotCQloTGlua1NlcnZpY2VQcm9qZWN0Xy5wYWNrKHRydWUpOwotCQlwYWNrU2VsZigpOwkKLQkgIH0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJbml0aWFsUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KQotCXsKLQkJaW5pdGlhbFByb2plY3RfID0gcHJvamVjdDsKLQl9Ci0JCi0JIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkgIHsJICAKLQkJIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8gPSBuYW1lOwotCQkgcmVmcmVzaEVBUkxpbmsoKTsKLQkgIH0KLQkgCi0JICBwdWJsaWMgdm9pZCByZWZyZXNoRUFSTGluaygpCi0JICB7Ci0JCSAgaExpbmtTZXJ2aWNlRUFSXy5zZXRWaXNpYmxlKG5lZWRFYXJfKTsgCi0JCSAgaWYgKG5lZWRFYXJfKQotCQkgIHsJCQkgCi0JCQkgIGhMaW5rU2VydmljZUVBUl8uc2V0VGV4dChTRVJWSUNFX0VBUl9QUkVGSVggKyAiICIgKyBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfKTsKLQkJCSAgaExpbmtTZXJ2aWNlRUFSXy5wYWNrKHRydWUpOwotCQkJICBwYWNrU2VsZigpOwotCQkgIH0KLQkgIH0KLQkgcHVibGljIHZvaWQgc2V0U2VydmljZUNvbXBvbmVudFR5cGUoIFN0cmluZyB0eXBlICkKLQkgIHsKLQkJIHNlcnZpY2VDb21wb25lbnRUeXBlXyA9IHR5cGU7Ci0JICB9Ci0JIAotCSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0JICB7Ci0JICAgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50UHJvamVjdE5hbWUobmFtZSk7ICAKLQkgIH0gIAotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkgIHsKLQkgICAgY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRFYXJQcm9qZWN0TmFtZShuYW1lKTsgIAotCSAgfQotCSAgCi0JICBJUHJvamVjdCBwcm9qZWN0XzsKLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpCi0JICB7Ci0JCSAgcmV0dXJuIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0Q2xpZW50Q29tcG9uZW50VHlwZShTdHJpbmcgdHlwZSkKLQkgIHsKLQkJICBjbGllbnRXaWRnZXRfLnNldENsaWVudENvbXBvbmVudFR5cGUodHlwZSk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpCi0JICB7Ci0JCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpOwotCSAgfQotCSAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVByb2plY3ROYW1lKCkKLQkgIHsKLQkJICByZXR1cm4gc2VydmljZVByb2plY3ROYW1lXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKQotCSAgewotCQkgIHJldHVybiBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0JICB7Ci0JCSAgY2xpZW50V2lkZ2V0Xy5zZXRQcm9qZWN0KHByb2plY3QpOwotCSAgfQotCSAgCi0JICBwcml2YXRlIElQcm9qZWN0IGdldENsaWVudFByb2plY3QoKQotCSAgewotCQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldFByb2plY3QoKTsgCi0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLQkgIHsKLQkJICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0JICB9CSAgCi0JICAJICAKLQkgIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLQkgIHsKLQkJICByZXR1cm4gcHJvamVjdF87Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJ1bnRpbWVJZCgpCi0JICB7Ci0JCSAgLy8gY2FsY3VsYXRlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHNlcnZpY2VSdW50aW1lSWQgYmFzZWQgb24gY3VycmVudCBzZXR0aW5ncy4KLQkJICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVJZChnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSwgZ2V0U2VydmljZVByb2plY3ROYW1lKCksIGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCkpOyAgICAKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSWQoKQotCSAgewotCQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudFJ1bnRpbWVJZCgpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTmVlZEVBUihib29sZWFuIGIpCi0JICB7Ci0JCSAgbmVlZEVhcl8gPSBiOwotCQkgIHJlZnJlc2hFQVJMaW5rKCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBib29sZWFuIGdldFNlcnZpY2VOZWVkRUFSKCkKLQkgIHsKLQkJICByZXR1cm4gbmVlZEVhcl87Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBiKQotCSAgewotCSAgICBjbGllbnRXaWRnZXRfLnNldENsaWVudE5lZWRFQVIoYik7Ci0JICB9CSAgCi0JICAKLQkgIHB1YmxpYyBib29sZWFuIGdldENsaWVudE5lZWRFQVIoKQotCSAgewotCQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudE5lZWRFQVIoKTsKLQkgIH0KLQkgIAotCSAgLy8gbG9va3MgdGhyb3VnaCBleHRlbnNpb25zIGFuZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBzZWxlY3Rpb24gd2lkZ2V0Ci0JICBwcml2YXRlIE9iamVjdCBnZXRTZWxlY3Rpb25XaWRnZXQoKQotCSAgewotCQkJU3RyaW5nICAgICAgICAgd3N0ICAgICAgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRUeXBlSWQoKTsKLQkJCWludCAgICAgICAgICAgIHNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHdzdCk7Ci0JCQlTdHJpbmcgICAgICAgICBpbXBsSWQgICA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHdzdCk7Ci0JCSAgV2ViU2VydmljZUltcGwgd3NpbXBsICAgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbEJ5SWQoaW1wbElkKTsKLSAgICAgIE9iamVjdCAgICAgICAgIHJlc3VsdCAgID0gbnVsbDsKLSAgICAgICAgCi0JCSAgICAKLQkJICBpZiAod3NpbXBsICE9IG51bGwpCi0JCSAgewotCQkgICAgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gbnVsbDsKLQkJICAgIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikKLQkJICAgIHsKLQkJICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiOwotCQkgICAgfQotCQkgICAgZWxzZQotCQkgICAgewotCQkgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9IHdzaW1wbC5nZXRPYmplY3RTZWxlY3Rpb25XaWRnZXQoKTsKLQkJICAgIH0KLSAgICAgICAgCi0gICAgICAgIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgYm9vbGVhbiBlZGl0YWJsZSA9IHJlZ2lzdHJ5LmdldEV4dGVybmFsTW9kaWZ5KCBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCApOwotICAgICAgICAgICAgICAgIAotICAgICAgICBzZXJ2aWNlSW1wbF8uc2V0RWRpdGFibGUoIGVkaXRhYmxlICk7Ci0gICAgICAgIHJlc3VsdCA9IHJlZ2lzdHJ5LmdldFNlbGVjdGlvbldpZGdldCggb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgKTsKLSAgICAgIH0KLSAgICAgIAotCQkgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0JIAotCS8vIGZvciB0aGUgcHVycG9zZXMgb2YgZGlzYWJsaW5nIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2VzIGRpYWxvZwotCXB1YmxpYyB2b2lkIGRpc2FibGVOb25QcmVmZXJlbmNlV2lkZ2V0cygpCi0JewotCQlpZiAoc2VydmljZUltcGxfICE9IG51bGwpCi0JCQlzZXJ2aWNlSW1wbF8uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCWlmIChicm93c2VCdXR0b25fICE9IG51bGwpCi0JCQlicm93c2VCdXR0b25fLnNldEVuYWJsZWQoZmFsc2UpOwotCQlpZiAoaENvbXBTZXJ2aWNlXyAhPSBudWxsKQotCQl7Ci0JCQloQ29tcFNlcnZpY2VfLnNldFZpc2libGUoZmFsc2UpOwkJCQotCQl9Ci0JCWNsaWVudFdpZGdldF8uZGlzYWJsZU5vblByZWZlcmVuY2VXaWRnZXRzKCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRHcmFwaGljcyhpbnQgdmFsdWUpCi0JewotCQlTdHJpbmcgaWNvbkltYWdlID0gIiI7Ci0JCVN0cmluZyB0b3Bsb2d5SW1hZ2UgPSAiIjsKLQkJc3dpdGNoICh2YWx1ZSkgewotCQljYXNlIDA6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18wOwotCQkJdG9wbG9neUltYWdlPUdSQVBISUNfU0VSVklDRV8wOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzE7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzE7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMjsKLQkJCXRvcGxvZ3lJbWFnZT1HUkFQSElDX1NFUlZJQ0VfMjsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18zOwotCQkJdG9wbG9neUltYWdlPUdSQVBISUNfU0VSVklDRV8zOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzQ7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzQ7Ci0JCQlicmVhazsKLQkJY2FzZSA1OgkJCQkJCi0JCWNhc2UgNjoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzU7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCXNlcnZpY2VTY2FsZV8uc2V0QmFja2dyb3VuZEltYWdlKGltYWdlUmVnXy5nZXQoaWNvbkltYWdlKSk7Ci0JCXRvcG9sb2d5U3BvdF8uc2V0SW1hZ2UoaW1hZ2VSZWdfLmdldCh0b3Bsb2d5SW1hZ2UpKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHJlZnJlc2hTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uKCkKLQl7CQkKLQkJLy9uZXcgdXAgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi0JCVNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBzZXJ2ZXJSVERlZmF1bHRDbWQgPSBuZXcgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCk7Ci0JCQotCQkgIC8vY2FsbCBzZXR0ZXJzIG9mIG5ldyBkZWZhdWx0aW5nIGNvbW1hbmQ6Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldEluaXRpYWxTZWxlY3Rpb24oZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCSAgICAgIHNlcnZlclJURGVmYXVsdENtZC5zZXRJbml0aWFsUHJvamVjdChnZXRQcm9qZWN0KCkpOwotCSAgICAgIHNlcnZlclJURGVmYXVsdENtZC5zZXRHZW5lcmF0ZVByb3h5KGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKTsKLQkgICAgICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpKTsKLQkJICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0V2ViU2VydmljZXNQYXJzZXIoZ2V0V2ViU2VydmljZXNQYXJzZXIoKSk7ICAgICAKLQkJICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0Q2xpZW50SW5pdGlhbFNlbGVjdGlvbihnZXRPYmplY3RTZWxlY3Rpb24oKSk7Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldENsaWVudEluaXRpYWxQcm9qZWN0KGdldENsaWVudFByb2plY3QoKSk7Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldENsaWVudEVhclByb2plY3ROYW1lKGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKSk7Ci0JCSAgc2VydmVyUlREZWZhdWx0Q21kLnNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkpOwotCQkgIAkJICAKLQkJICBzZXJ2ZXJSVERlZmF1bHRDbWQuZXhlY3V0ZShudWxsLCBudWxsKTsKLQkJICAKLQkJICAvL3BlcmZvcm0gbWFwcGluZ3MgZnJvbSB0aGUgZGVmYXVsdGluZyBjb21tYW5kIHRvIHRoZSBwcm9qZWN0IHNldHRpbmdzLi4uCQotCQkgIHNldFNlcnZpY2VQcm9qZWN0TmFtZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZVByb2plY3ROYW1lKCkpOwotCQkgIHNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCkpOwotCQkgIHNldFNlcnZpY2VDb21wb25lbnRUeXBlKHNlcnZlclJURGVmYXVsdENtZC5nZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpKTsKLQkJICBzZXRDbGllbnRQcm9qZWN0TmFtZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0Q2xpZW50UHJvamVjdE5hbWUoKSk7Ci0JCSAgc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoc2VydmVyUlREZWZhdWx0Q21kLmdldENsaWVudEVhclByb2plY3ROYW1lKCkpOwotCQkgIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkpOwotICAgICAgICAgIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKHNlcnZlclJURGVmYXVsdENtZC5nZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpKTsKLSAgICAgICAgICBzZXRTZXJ2aWNlTmVlZEVBUihzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZU5lZWRFQVIoKSk7Ci0gICAgICAgICAgc2V0Q2xpZW50TmVlZEVBUihzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0Q2xpZW50TmVlZEVBUigpKTsKLSAgICAgICAgICBzZXRDbGllbnRDb21wb25lbnRUeXBlKHNlcnZlclJURGVmYXVsdENtZC5nZXRDbGllbnRDb21wb25lbnRUeXBlKCkpOwotCX0KLQkKLQkvKioKLQkgKiAgVXBkYXRlIGNsaWVudCBzZXJ2ZXIgYW5kIHJ1bnRpbWUgYmFzZWQgb24gc2VydmljZSBzaWRlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHJlZnJlc2hDbGllbnRTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uKCkKLQl7CQotCQlUeXBlUnVudGltZVNlcnZlciBjbGllbnRUeXBlUnVudGltZXNlcnZlciA9IGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JCWNsaWVudFR5cGVSdW50aW1lc2VydmVyLnNldFJ1bnRpbWVJZChnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRSdW50aW1lSWQoKSk7Ci0JCWNsaWVudFR5cGVSdW50aW1lc2VydmVyLnNldFNlcnZlcklkKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCkpOwotCQljbGllbnRUeXBlUnVudGltZXNlcnZlci5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCXNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKGNsaWVudFR5cGVSdW50aW1lc2VydmVyKTsKLQl9CQotCQkKLQkKLQlwcml2YXRlIHZvaWQgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbiwKLQkJCUlQcm9qZWN0IHByb2plY3QsIFN0cmluZyBjb21wb25lbnROYW1lLCBib29sZWFuIHJlZnJlc2hSdW50aW1lKQotCXsKLQkJT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCBvYmpPdXRwdXRDb21tYW5kID0gbmV3IE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQoKTsKLQkJICAgb2JqT3V0cHV0Q29tbWFuZC5zZXRUeXBlUnVudGltZVNlcnZlcihnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0JCSAgIG9iak91dHB1dENvbW1hbmQuc2V0T2JqZWN0U2VsZWN0aW9uKG9iamVjdFNlbGVjdGlvbik7Ci0JICAgICAgIG9iak91dHB1dENvbW1hbmQuc2V0UHJvamVjdChwcm9qZWN0KTsKLQkgICAgICAgb2JqT3V0cHV0Q29tbWFuZC5zZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE5hbWUpOwkJCSAgIAotCSAgICAgICAKLQkgICAgICAgb2JqT3V0cHV0Q29tbWFuZC5leGVjdXRlKG51bGwsIG51bGwpOwotICAgICAgICAKLQkgICAgICAgc2V0V2ViU2VydmljZXNQYXJzZXIob2JqT3V0cHV0Q29tbWFuZC5nZXRXZWJTZXJ2aWNlc1BhcnNlcigpKTsKLQkgICAgICAgc2V0T2JqZWN0U2VsZWN0aW9uKG9iak91dHB1dENvbW1hbmQuZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCSAgICAgICBzZXRQcm9qZWN0KG9iak91dHB1dENvbW1hbmQuZ2V0UHJvamVjdCgpKTsgICAgICAJCSAgICAgICAKLQkgICAgICAgCi0JICAgICAgIGlmIChyZWZyZXNoUnVudGltZSB8fCBmb3JjZVJlZnJlc2hSdW50aW1lKQotCSAgICAJICAgcmVmcmVzaFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsgIAotCSAgICAgICAKLQkgICAgICAgZm9yY2VSZWZyZXNoUnVudGltZSA9IGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFNjYWxlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotCXsKLQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewkJCQotCQkJICAgIAotCQkJICAgIFNjYWxlIHNjYWxlID0gKFNjYWxlKWUud2lkZ2V0OwotCQkJCWludCBzZWxlY3Rpb24gPSBzY2FsZS5nZXRTZWxlY3Rpb24oKTsKLQkJCQkKLQkJCQkvL1RPRE86IGNoYW5nZSB0aGUgaGFyZCBjb2RlZCBpbnRlZ2VycyBoZXJlIHRvIHRoZSB0aGUgU2NlbmFyaW9Db250ZXh0LldTX3h4eCB3aGVuIGluIGxlc3MgY3JpdGljYWwgcGhhc2UKLQkJCQlzd2l0Y2ggKHNlbGVjdGlvbikgewotCQkJCWNhc2UgMDoKLQkJCQkJc2VydmljZVNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1RFU1QpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDE6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9SVU4pOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDI6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9JTlNUQUxMKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzOgotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVQTE9ZKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA0OgotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQVNTRU1CTEUpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDU6CQkJCQkKLQkJCQljYXNlIDY6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0U2VsZWN0aW9uKFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsgLy8ibm8gc2VsZWN0aW9uIiBpcyBub3QgYWxsb3dlZC4uLm11c3QgZGV2ZWxvcCBzZXJ2aWNlIEAgbWluaW11bQotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVWRUxPUCk7Ci0JCQkJCS8vcmVzZXQgbG9jYWwgc2VsZWN0aW9uIHNvIHRoYXQgc2V0dGVycyBnZXQgY29ycmVjdCB2YWx1ZSBiZWxvdwotCQkJCQlzZWxlY3Rpb24gPSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUDsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCQotCQkJCXNldERldmVsb3BTZXJ2aWNlKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUCk7Ci0JCQkJc2V0QXNzZW1ibGVTZXJ2aWNlKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfQVNTRU1CTEUpOwotCQkJCXNldERlcGxveVNlcnZpY2Uoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVBMT1kpOwotCQkJCQotCQkJCXNldFRlc3RTZXJ2aWNlKG5ldyBCb29sZWFuKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfVEVTVCkpOwotCQkJCXNldEluc3RhbGxTZXJ2aWNlKG5ldyBCb29sZWFuKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfSU5TVEFMTCkpOwotCQkJCXNldFN0YXJ0U2VydmljZShuZXcgQm9vbGVhbihzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUKSk7Ci0JCQkJc2V0QWR2YW5jZWRPcHRpb25zKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfSU5TVEFMTCk7Ci0JCQkJY2xpZW50V2lkZ2V0Xy5lbmFibGVDbGllbnRTbGlkZXIoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVCk7Ci0JCQkJCi0JCQkJc2V0R3JhcGhpY3Moc2VsZWN0aW9uKTsKLQkJCQkKLQkJCQkvL1ZhbGlkYXRlIHRoZSBwYWdlCi0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IChuZXcgVmFsaWRhdGlvblV0aWxzKCkpLmdldE5ld1ZhbGlkYXRpb25TdGF0ZSh2YWxpZGF0aW9uU3RhdGVfLCBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfU0NBTEVfQ0hBTkdFUyk7Ci0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotCQkJCQotCQkJfQkJCi0KLQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCXdpZGdldFNlbGVjdGVkKGUpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgY2xhc3MgU2VydmljZUltcGxCcm93c2VMaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0JewotCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgkJCQotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7ICAgICAKLQkJCSAgIAotCQkJICBpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9PSBudWxsKQotCQkJCSAgIG9iamVjdFNlbGVjdGlvbldpZGdldF8gPSBnZXRTZWxlY3Rpb25XaWRnZXQoKTsKLQkJCSAgCi0JCQkgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24gPSBudWxsOwotCQkJICAgSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0JCQkgICBTdHJpbmcgY29tcG9uZW50TmFtZT0iIjsKLQkJCSAgIGludCByZXN1bHQ9RGlhbG9nLkNBTkNFTDsKLQkJCSAgIAotCQkJICAgaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSkKLQkJICAgICAgIHsgICAgICAJCi0JCQkJIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIGxhdW5jaGFibGUgPSAoKElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKW9iamVjdFNlbGVjdGlvbldpZGdldF8pOwotCQkJCSBsYXVuY2hhYmxlLnNldEluaXRpYWxTZWxlY3Rpb24oZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCQkJCSBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0JCSAgICAgICAgIHJlc3VsdCA9IGxhdW5jaGFibGUubGF1bmNoKHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLQkJICAgICAgICAgaWYgKHJlc3VsdCA9PSBEaWFsb2cuT0spCi0JCSAgICAgICAgIHsKLQkJICAgICAgICAJIHNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJICAgICAgICAgc2VydmljZUltcGxfLnNldFRleHQobGF1bmNoYWJsZS5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpKTsKLQkJCSAgICAgICAgIHNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJICAgICAgICAgb2JqZWN0U2VsZWN0aW9uID0gbGF1bmNoYWJsZS5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLQkJCSAgICAgICAgIHByb2plY3QgPSBsYXVuY2hhYmxlLmdldFByb2plY3QoKTsKLQkJCSAgICAgICAgIGNvbXBvbmVudE5hbWU9IGxhdW5jaGFibGUuZ2V0Q29tcG9uZW50TmFtZSgpOwotCQkgICAgICAgICB9Ci0JCSAgICAgICB9Ci0JCQkgICBlbHNlCi0JCQkgICB7Ci0JCQkJICAgYnJvd3NlRGlhbG9nXy5zZXRUeXBlUnVudGltZVNlcnZlcihnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0JCQkJICAgYnJvd3NlRGlhbG9nXy5zZXRJbml0aWFsU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKTsKLQkJCSAgICAgICByZXN1bHQgPSBicm93c2VEaWFsb2dfLm9wZW4oKTsKLQkJCSAgICAgICBpZiAocmVzdWx0ID09IERpYWxvZy5PSykKLQkJCSAgICAgICB7Ci0JCQkgICAgCSAgIHNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJCSAgICAgICBzZXJ2aWNlSW1wbF8uc2V0VGV4dChicm93c2VEaWFsb2dfLmdldERpc3BsYXlhYmxlU2VsZWN0aW9uU3RyaW5nKCkpOyAKLQkJCQkgICAgICAgc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJICAgICAgIG9iamVjdFNlbGVjdGlvbiA9IGJyb3dzZURpYWxvZ18uZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JCQkJICAgICAgIHByb2plY3QgPSBicm93c2VEaWFsb2dfLmdldFByb2plY3QoKTsKLQkJCQkgICAgICAgY29tcG9uZW50TmFtZT0gYnJvd3NlRGlhbG9nXy5nZXRDb21wb25lbnROYW1lKCk7CQkJICAgICAgIAotCQkJICAgICAgIH0KLQkJCSAgIH0KLQkJCSAgIAotCQkJICAgLy8gY2FsbCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHRvIGNhcnJ5IG91dCBhbnkgdHJhbnNmb3JtYXRpb24gb24gdGhlIG9iamVjdFNlbGVjdGlvbgotCQkJICAgaWYgKHJlc3VsdCA9PSBEaWFsb2cuT0spCi0JCQkgICB7Ci0JCQkJICAgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKG9iamVjdFNlbGVjdGlvbiwgcHJvamVjdCwgY29tcG9uZW50TmFtZSwgZ2V0V2ViU2VydmljZVNjZW5hcmlvKCkgIT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pOwkJCQkgICAKLQkJCSAgICAgICB2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJCSAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7IC8vIHZhbGlkYXRlIHRoZSBwYWdlCi0JCQkgICB9CQkJICAgCi0JICAgIH0KLQl9Ci0KLQkKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZjODYzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDIyMCAgIDIxOTUzNyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS51dGlscy5BZGFwdGVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAoteyAgICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbl87Ci0gIHByaXZhdGUgaW50IHNlcnZpY2VHZW5lcmF0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGRldmVsb3BTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBkZXBsb3lTZXJ2aWNlXzsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAKLSAgICBTdHJpbmcgdHlwZSAgICAgID0gZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0V2ViU2VydmljZVR5cGUoKTsKLSAgICBTdHJpbmcgcnVudGltZSAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0RGVmYXVsdFJ1bnRpbWVWYWx1ZUZvciggdHlwZSApOwotCQotICAgIFN0cmluZyBmYWN0b3J5SUQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXREZWZhdWx0U2VydmVyVmFsdWVGb3IodHlwZSk7ICAgIAotICAgIHR5cGVSdW50aW1lU2VydmVyXyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotICAgIAotICAgIHR5cGVSdW50aW1lU2VydmVyXy5zZXRUeXBlSWQoIHR5cGUgKTsKLSAgICB0eXBlUnVudGltZVNlcnZlcl8uc2V0UnVudGltZUlkKCBydW50aW1lICk7Ci0gICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFNlcnZlcklkKCBmYWN0b3J5SUQgKTsKLSAgICAKLSAgICAvL0RlZmF1bHQgdGhlIHR5cGVJZCBmcm9tIHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgIFN0cmluZ1tdIHR5cGVJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlVHlwZUJ5U2VsZWN0aW9uKGluaXRpYWxTZWxlY3Rpb25fKTsKLQotICAgIGlmICh0eXBlSWRzIT1udWxsICYmIHR5cGVJZHMubGVuZ3RoPjApCi0gICAgewotICAgICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFR5cGVJZCh0eXBlSWRzWzBdKTsKLSAgfSBlbHNlIHsKLQkgIGlmIChpbml0aWFsU2VsZWN0aW9uXyAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uXy5pc0VtcHR5KCkpCi0JICB7IAotCQkgIE9iamVjdCBpbml0aWFsT2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbl8uZ2V0Rmlyc3RFbGVtZW50KCk7IAotCQkgIC8vIGluaXRpYWxPYmplY3Qgd291bGQgbm90IGJlIG51bGwgc2luY2UgIWluaXRpYWxTZWxlY3Rpb25fLmlzRW1wdHkoKQotCQkgIGJvb2xlYW4gaGFzQWRhcHRlciA9IEFkYXB0ZXJVdGlscy5oYXNBZGFwdGVyKGluaXRpYWxPYmplY3QpOwotCQkgIGlmIChoYXNBZGFwdGVyKSB7Ci0JCQkgIFN0cmluZ0J1ZmZlciBlbnRyeWJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pKTsKLQkJCSAgZW50cnlidWZmLmFwcGVuZCgiLyIpOwotCQkJICBlbnRyeWJ1ZmYuYXBwZW5kKCJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiKTsKLQkJCSAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7ICAgICAKLQkJCSAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFR5cGVJZChlbnRyeSk7Ci0JCSAgfQotCSAgfQotICB9Ci0gICAgCi0gICAgc2VydmljZUdlbmVyYXRpb25fID0gZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlKCk7Ci0gICAgCQotCWRldmVsb3BTZXJ2aWNlXyA9IHNlcnZpY2VHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUDsKLQlhc3NlbWJsZVNlcnZpY2VfID0gc2VydmljZUdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRTsKLQlkZXBsb3lTZXJ2aWNlXyA9IHNlcnZpY2VHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZOwotICAgIAotCWRlZmF1bHRDbGllbnRTY2FsZSgpOwotCQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGluaXRpYWxTZWxlY3Rpb25fID0gc2VsZWN0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaW5pdGlhbFNlbGVjdGlvbl8gOwotICB9Ci0gIAotICBJUHJvamVjdCBwcm9qZWN0XzsgIAotICAKLSAgcHVibGljIElQcm9qZWN0IGdldEluaXRpYWxQcm9qZWN0KCkKLSAgewotCSAgaWYgKHByb2plY3RfPT1udWxsKQotCSAgewotCSAgICBwcm9qZWN0XyA9IGdldFByb2plY3RGcm9tT2JqZWN0U2VsZWN0aW9uKGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgIH0gIAotCSAgCi0JICByZXR1cm4gcHJvamVjdF87Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21PYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgSVByb2plY3QgcCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHJlc291cmNlLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7IAotICAgIHJldHVybiB0eXBlUnVudGltZVNlcnZlcl87Ci0gIH0KLQotICBwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldEluc3RhbGxXZWJTZXJ2aWNlKCkgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRTdGFydFdlYlNlcnZpY2UoKSApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0VGVzdFdlYlNlcnZpY2UoKSApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFB1Ymxpc2hTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkgKTsKLSAgfQotCi0gIHB1YmxpYyBCb29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRHZW5lcmF0ZVByb3h5KCkgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRSdW5UZXN0Q2xpZW50KCkKLSAgewotICAgIHJldHVybiAgZ2V0U2NlbmFyaW9Db250ZXh0KCkuaXNMYXVuY2hTYW1wbGVFbmFibGVkKCk7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0TW9uaXRvclNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKGdldFNjZW5hcmlvQ29udGV4dCgpLmdldE1vbml0b3JXZWJTZXJ2aWNlKCkpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldFNlcnZpY2VHZW5lcmF0aW9uKCkKLSAgewotCSAgcmV0dXJuIHNlcnZpY2VHZW5lcmF0aW9uXzsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRDbGllbnRHZW5lcmF0aW9uKCkKLSAgewotCSAgcmV0dXJuIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldEdlbmVyYXRlQ2xpZW50KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldERldmVsb3BTZXJ2aWNlKCkgewotCSAgcmV0dXJuIGRldmVsb3BTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGVTZXJ2aWNlKCkgewotCSAgcmV0dXJuIGFzc2VtYmxlU2VydmljZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldERlcGxveVNlcnZpY2UoKSB7Ci0JICByZXR1cm4gZGVwbG95U2VydmljZV87Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1MmNhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MjcgICAxNDQzNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLQotCi1wdWJsaWMgY2xhc3MgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCBleHRlbmRzIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQKLXsgICAgCi0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGluc3RhbGxTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBzdGFydFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHRlc3RTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICB0ZXN0Q2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBydW5UZXN0Q2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBwdWJsaXNoU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZ2VuZXJhdGVQcm94eV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGV2ZWxvcFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGFzc2VtYmxlU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGVwbG95U2VydmljZV87IAotICAKLQlwcml2YXRlIFJlc291cmNlQ29udGV4dCAgIHJlc291cmNlQ29udGV4dF87Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb25fOyAKLSAgICAKLSAgCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7IAotICAgIHJldHVybiB0eXBlUnVudGltZVNlcnZlcl87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFsbFNlcnZpY2VfOyAgCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHN0YXJ0U2VydmljZV87ICAKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiB0ZXN0U2VydmljZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIHJ1blRlc3RDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRQdWJsaXNoU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gcHVibGlzaFNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVQcm94eV87ICAKLSAgfQotCQotCXB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLQl7Ci0JCXJldHVybiByZXNvdXJjZUNvbnRleHRfOwotCX0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gZ2VuZXJhdGVQcm94eV8gVGhlIGdlbmVyYXRlUHJveHlfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5XykKLSAgewotICAgIHRoaXMuZ2VuZXJhdGVQcm94eV8gPSBnZW5lcmF0ZVByb3h5XzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHB1Ymxpc2hTZXJ2aWNlXyBUaGUgcHVibGlzaFNlcnZpY2VfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hTZXJ2aWNlKGJvb2xlYW4gcHVibGlzaFNlcnZpY2VfKQotICB7Ci0gICAgdGhpcy5wdWJsaXNoU2VydmljZV8gPSBwdWJsaXNoU2VydmljZV87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBpbnN0YWxsU2VydmljZV8gVGhlIGluc3RhbGxTZXJ2aWNlXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsU2VydmljZShib29sZWFuIGluc3RhbGxTZXJ2aWNlXykKLSAgewotICAgIHRoaXMuaW5zdGFsbFNlcnZpY2VfID0gaW5zdGFsbFNlcnZpY2VfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gc3RhcnRTZXJ2aWNlXyBUaGUgc3RhcnRTZXJ2aWNlXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoYm9vbGVhbiBzdGFydFNlcnZpY2VfKQotICB7Ci0gICAgdGhpcy5zdGFydFNlcnZpY2VfID0gc3RhcnRTZXJ2aWNlXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHRlc3RTZXJ2aWNlXyBUaGUgdGVzdFNlcnZpY2VfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKGJvb2xlYW4gdGVzdFNlcnZpY2VfKQotICB7Ci0gICAgdGhpcy50ZXN0U2VydmljZV8gPSB0ZXN0U2VydmljZV87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gdGVzdFNlcnZpY2VfIFRoZSB0ZXN0U2VydmljZV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UnVuVGVzdENsaWVudChib29sZWFuIHJ1blRlc3RDbGllbnRfKQotICB7Ci0gICAgdGhpcy5ydW5UZXN0Q2xpZW50XyA9IHJ1blRlc3RDbGllbnRfOwotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIHR5cGVSdW50aW1lU2VydmVyXyBUaGUgdHlwZVJ1bnRpbWVTZXJ2ZXJfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl8pCi0gIHsKLSAgICB0aGlzLnR5cGVSdW50aW1lU2VydmVyXyA9IHR5cGVSdW50aW1lU2VydmVyXzsKLSAgfQotCQotCXB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dChSZXNvdXJjZUNvbnRleHQgcmMpCi0JewotCQlyZXNvdXJjZUNvbnRleHRfID0gcmM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCSAgIHNlbGVjdGlvbl8gPSBzZWxlY3Rpb247CQotCX0JCi0JCi0JcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0JewotCSAgIHJldHVybiBzZWxlY3Rpb25fOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wU2VydmljZSgpIHsKLQkJcmV0dXJuIGRldmVsb3BTZXJ2aWNlXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wU2VydmljZShib29sZWFuIGRldmVsb3BTZXJ2aWNlKSB7Ci0JCXRoaXMuZGV2ZWxvcFNlcnZpY2VfID0gZGV2ZWxvcFNlcnZpY2U7Ci0JfQkKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZVNlcnZpY2UoKSB7Ci0JCXJldHVybiBhc3NlbWJsZVNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlU2VydmljZShib29sZWFuIGFzc2VtYmxlU2VydmljZSkgewotCQl0aGlzLmFzc2VtYmxlU2VydmljZV8gPSBhc3NlbWJsZVNlcnZpY2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95U2VydmljZSgpIHsKLQkJcmV0dXJuIGRlcGxveVNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlcGxveVNlcnZpY2UoYm9vbGVhbiBkZXBsb3lTZXJ2aWNlKSB7Ci0JCXRoaXMuZGVwbG95U2VydmljZV8gPSBkZXBsb3lTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldFRlc3RDbGllbnQoKSB7Ci0JCXJldHVybiB0ZXN0Q2xpZW50XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUZXN0Q2xpZW50KGJvb2xlYW4gdGVzdENsaWVudF8pIHsKLQkJdGhpcy50ZXN0Q2xpZW50XyA9IHRlc3RDbGllbnRfOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZpY2VJbXBsU2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyMTBhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTggICAxMzYzMzUgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuUGFnZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBBYnN0cmFjdFNlbGVjdGlvbkRpYWxvZyB7Ci0KLQlUeXBlUnVudGltZVNlcnZlciB0cnNfOwotCVN0cmluZyB0aXRsZVRleHRfOwotCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0JCi0JcHVibGljIFNlcnZpY2VJbXBsU2VsZWN0aW9uRGlhbG9nKFNoZWxsIHBhcmVudCwgUGFnZUluZm8gcGFnZUluZm8pIHsKLQkJc3VwZXIocGFyZW50LCBwYWdlSW5mbyk7Ci0JCXRpdGxlVGV4dF8gPSBwYWdlSW5mby5nZXRQYWdlTmFtZSgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjYWxsU2V0dGVycygpCi0JewkJCi0JCSgoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5zZXRUeXBlUnVudGltZVNlcnZlcih0cnNfKTsKLQkJKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLnNldEluaXRpYWxTZWxlY3Rpb24oc2VsZWN0aW9uXyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHRycykKLQl7Ci0JCXRyc18gPSB0cnM7IAotCQkKLQkJLy8gc2V0IGRpYWxvZyB0aXRsZSB0ZXh0IGJhc2VkIG9uIHRoZSB3ZWIgc2VydmljZSBzY2VuYXJpbwotCQlpZiAodHJzICE9IG51bGwpCi0JCXsKLQkJICAgU3RyaW5nIHR5cGVJZCA9IHRycy5nZXRUeXBlSWQoKTsKLQkJICAgaW50IHNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHR5cGVJZCk7Ci0JCSAgIAotCQkgICBpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKQotCQkgICB7Ci0JCQkgIHRpdGxlVGV4dF8gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVElMRV9TRVJWSUNFX0lNUExfU0VMRUNUSU9OOwotCQkgICB9Ci0JCSAgIGVsc2UgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotCQkgICB7Ci0JCQkgICB0aXRsZVRleHRfID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRJTEVfU0VSVklDRV9ERUZfU0VMRUNUSU9OOwotCQkgICB9Ci0JCX0gICAgICAgICAgICAgCSAgIAotCX0KLQkgCi0JICBwcm90ZWN0ZWQgdm9pZCBzZXRTaGVsbFN0eWxlKGludCBuZXdTaGVsbFN0eWxlKQotCSAgewotCSAgICBzdXBlci5zZXRTaGVsbFN0eWxlKCBuZXdTaGVsbFN0eWxlIHwgU1dULlJFU0laRSApOyAgCi0JICB9Ci0KLQkgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIG5ld1NoZWxsKQotCSAgewotCSAgICBuZXdTaGVsbC5zZXRUZXh0KHRpdGxlVGV4dF8pOyAgIAotCSAgICBzdXBlci5jb25maWd1cmVTaGVsbChuZXdTaGVsbCk7Ci0JICB9Ci0KLQkgIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheWFibGVTZWxlY3Rpb25TdHJpbmcoKSB7Ci0JCSAgCi0JCSByZXR1cm4gKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCk7Ci0JfQotCSAgCi0JICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkgewotCQkgIHJldHVybiAoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JfQotCSAgCi0JICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpewotCQkgIHJldHVybiAoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0UHJvamVjdCgpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKXsKLQkJICByZXR1cm4gKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldENvbXBvbmVudE5hbWUoKTsgIAotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQkgIHsKLQkJICBzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAKLQkgIH0KLQkgIAotCSAgcHJvdGVjdGVkIFBvaW50IGdldEluaXRpYWxTaXplKCkKLQkgIHsJCi0JCSAgcmV0dXJuICgoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5nZXRXaWRnZXRTaXplKCk7CSAgICAKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0V4cG9ydFdTV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvRXhwb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMDY3YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvRXhwb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlB1Ymxpc2hXU1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci0KLQotcHVibGljIGNsYXNzIEV4cG9ydFdTV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHByaXZhdGUgQ2FuRmluaXNoUmVnaXN0cnkgICBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgIHdpZGdldFJlZ2lzdHJ5OwotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YU1hcHBpbmdSZWdpc3RyeTsKLSAgcHJpdmF0ZSBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWc7Ci0KLSAgcHVibGljIEV4cG9ydFdTV2lkZ2V0QmluZGluZygpCi0gIHsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcgPSBuZXcgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQoKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIFNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgICAgICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIldTRXhwb3J0IikpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQocHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpLCAiIikpOwotICAgICAgICAgICAgICAgcmV0dXJuIHJvb3Q7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuY2FuRmluaXNoUmVnaXN0cnkgPSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJDYW5GaW5pc2godGhpcy5jYW5GaW5pc2hSZWdpc3RyeSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmRhdGFNYXBwaW5nUmVnaXN0cnkgPSBkYXRhUmVnaXN0cnk7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKHRoaXMuZGF0YU1hcHBpbmdSZWdpc3RyeSk7Ci0gICAgCi0gICAgLy8gUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHJpdmF0ZVVEREkiLCBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gTGF1bmNoV2ViU2VydmljZXNFeHBsb3JlckNvbW1hbmQKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiRm9yY2VMYXVuY2hPdXRzaWRlSURFIiwgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIkxhdW5jaE9wdGlvbnMiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgIHRoaXMud2lkZ2V0UmVnaXN0cnkgPSB3aWRnZXRSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh0aGlzLndpZGdldFJlZ2lzdHJ5KTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCgiV1NFeHBvcnQiLCAKLSAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19QVUJMSVNILAotICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfUFVCTElTSCwKLSAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgewotICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBuZXcgUHVibGlzaFdTV2lkZ2V0KHRydWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvUHVibGlzaFdTRExXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9QdWJsaXNoV1NETFdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQwZjM4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9QdWJsaXNoV1NETFdpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBQdWJsaXNoV1NETFdpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwdWJsaWMgUHVibGlzaFdTRExXaWRnZXRCaW5kaW5nKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbXBsZUZyYWdtZW50KCk7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKSwgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9TZXJ2ZXJXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9TZXJ2ZXJXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMDNiNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvU2VydmVyV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjA0IDEyMTYwNSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDA3ICAgMTM1NDE1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MTAgICAxMzU1NjIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTcgICAxMzYzOTEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjUgICAxMzgwNTIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUzMCAgIDE0NDM1OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MDggICAxNDU1Mjkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA5ICAgIDg2NDIxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyNyAgIDE0NDM1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODEwICAgMTM1Mzk1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFbmFibGUgV1RQIFdlYiBzZXJ2aWNlIGZyYW1ld29yayBvcGVuaW5nIEphdmEgZWRpdG9yCi0gKiAyMDA2MDgyMSAgIDE1MzgzMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWxsb3cgdGhlIFdlYiBTZXJ2aWNlIFRlc3QgZXh0ZW5zaW9uIHBvaW50IHRvIHNwZWNpZnkgdGhlIHN1cHBvcnRlZCBjbGllbnQgcnVudGltZQotICogMjAwNjA4MjUgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MDIgICAxODAzMDQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzEwMzEgICAxNDA1MTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNzEyMTgJICAyMDAxOTMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODA0MTYgICAyMTUwODQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ29tcHV0ZUVuZHBvaW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVNb25pdG9yQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLlNlcnZlckluc3RUb0lTZXJ2ZXJUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkZpbmlzaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uU2NlbmFyaW9DbGVhbnVwQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uLkNsaWVudFJvb3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uLlByZUNsaWVudERldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZWxlY3Rpb24uU2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFdTV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuRmluaXNoRGVmYXVsdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5UZXN0RGVmYXVsdGluZ0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV1NETFRlc3RMYXVuY2hDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlNlcnZpY2VSb290RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZS5TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdC5MYXVuY2hGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0LlNlcnZpY2VUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdC5TZXJ2aWNlVGVzdFdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLmNvbW1hbmQuT3BlbkVkaXRvckNvbW1hbmQ7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgcHJpdmF0ZSBDYW5GaW5pc2hSZWdpc3RyeSAgIGNhbkZpbmlzaFJlZ2lzdHJ5XzsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgIHdpZGdldFJlZ2lzdHJ5XzsKLSAgcHJpdmF0ZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFNYXBwaW5nUmVnaXN0cnlfOwotICBwcml2YXRlIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50IHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZzsKLQotICBwdWJsaWMgU2VydmVyV2lkZ2V0QmluZGluZygpCi0gIHsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcgPSBuZXcgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudCgpOyAgCi0gICAgICAgICAgICAgfQotICAgICAgICAgICB9OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgICBjYW5GaW5pc2hSZWdpc3RyeV8gPSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJDYW5GaW5pc2goY2FuRmluaXNoUmVnaXN0cnlfKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYyksIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeV8gPSBkYXRhUmVnaXN0cnk7Ci0KLSAgICAvLyBCZWZvcmUgU2VydmVyV2l6YXJkV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUdlbmVyYXRpb24iLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOyAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ3JlYXRlTW9uaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRHZW5lcmF0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsUHJvamVjdCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgCi0KLSAgICAKLSAgICAvLyBBZnRlciBTZXJ2ZXJXaXphcmRXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENyZWF0ZU1vbml0b3JDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENvbXB1dGVFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiVGVzdENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgICAKLSAgICAvLyBCZWZvcmUgT2JqZWN0U2VsZWN0aW9uV2lkZ2V0ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdE5hbWUiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFYXJQcm9qZWN0TmFtZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudFR5cGUiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VOZWVkRUFSIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsgLy9qdmgKLSAgICAgICAgICAgICAgICAKLSAgICAvLyBBZnRlciBTZXJ2ZXJXaXphcmRXaWRnZXQgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlUnVudGltZUlkIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRSdW50aW1lSWQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZVByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VFYXJQcm9qZWN0TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZU5lZWRFQVIiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0KLSAgICAvLyBNYXAgZnJhZ21lbnRzIHRoYXQgZGVwZW5kIG9uIGRhdGEuICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQuY2xhc3MpOwotICAgIAotICAgIC8vIENyZWF0ZU1vbml0b3JDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ3JlYXRlTW9uaXRvckNvbW1hbmQuY2xhc3MsICJNb25pdG9yZWRQb3J0IiwgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ3JlYXRlTW9uaXRvckNvbW1hbmQuY2xhc3MsICJNb25pdG9yZWRQb3J0IiwgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBDb21wdXRlRW5kcG9pbnRDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcywgIkVuZHBvaW50IiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbXB1dGVFbmRwb2ludENvbW1hbmQuY2xhc3MsICJFbmRwb2ludCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbXB1dGVFbmRwb2ludENvbW1hbmQuY2xhc3MsICJFbmRwb2ludCIsIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZC5jbGFzcywgIkVuZHBvaW50IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gMTQ1NDI2Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5RW5kcG9pbnQiLCBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotCi0gICAgLy9TZXJ2aWNlVGVzdFdpZGdldCBtYXBwaW5ncyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkIiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUZXN0RmFjaWxpdGllcyIsIFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzLCAiTGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZVRlc3RXaWRnZXQuY2xhc3MsICJMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZVRlc3RXaWRnZXQuY2xhc3MsICJMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSIsIFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MpOwotICAgICAgICAKLSAgICAvLyBCZWZvcmUgQ2xpZW50IFRlc3Qgd2lkZ2V0LgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIAotICAgIC8vIEJlZm9yZSBDbGllbnRUZXN0V2lkZ2V0Ci0gICAgICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJGb2xkZXIiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJKc3BGb2xkZXIiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5DbGllbnRUZXN0IixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIEFmdGVyIENsaWVudFRlc3RXaWRnZXQgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJGb2xkZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJKc3BGb2xkZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJUZXN0SUQiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIklzVGVzdFdpZGdldCIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAvLyBQdWJsaXNoV1NXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHVibGljVURESSIsIG51bGwpOwotICAgIAotICAgIC8vIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHJpdmF0ZVVEREkiLCBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gTGF1bmNoV2ViU2VydmljZXNFeHBsb3JlckNvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9Qcml2YXRlVURESSIsIExhdW5jaEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9QdWJsaWNVRERJIiwgTGF1bmNoRnJhZ21lbnQuY2xhc3MpOwotICAgIC8vIFRPRE8gTmVlZCBkZWZhdWx0cyBmb3IgdGhlc2UgcHJvcGVydGllcy4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJGb3JjZUxhdW5jaE91dHNpZGVJREUiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJMYXVuY2hPcHRpb25zIiwgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5jbGFzcyk7Ci0gIAotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAKLSAgICB3aWRnZXRSZWdpc3RyeV8gPSB3aWRnZXRSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh3aWRnZXRSZWdpc3RyeV8pOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiU2VydmVyV2l6YXJkV2lkZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19QUk9KRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19TRVJWSUNFLAotCQkJCSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkJCSAgICAgICAgICB7Ci0JCQkJICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJXaXphcmRXaWRnZXQoIHRydWUsIGZhbHNlICk7Ci0JCQkJICAgICAgICAgIH0KLQkJCQkgICAgICAgIH0gKTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIlRlc3RTZXJ2aWNlIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZVRlc3RXaWRnZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIAotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkNsaWVudFRlc3RXaWRnZXQiLCAKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NBTVBMRSwKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU0FNUExFLAotICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRUZXN0V2lkZ2V0KCk7IAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJQdWJsaXNoIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19QVUJMSVNILAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19QVUJMSVNILAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaXNoV1NXaWRnZXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgfQotICAgICAgCi0gIHByaXZhdGUgY2xhc3MgQ2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQKLSAgewotICAgIGJvb2xlYW4gZ2VuUHJveHlfID0gZmFsc2U7Ci0gICAgCi0gICAgcHVibGljIENsaWVudEZyYWdtZW50KCkKLSAgICB7ICAgICAgCi0gICAgICBzZXRDb25kaXRpb24oIG5ldyBDb25kaXRpb24oKSAKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuUHJveHlfOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAKLSAgICAgIFNlcXVlbmNlRnJhZ21lbnQgY2xpZW50Um9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgICAKLSAgICAgIGNsaWVudFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCggZmFsc2UgKSwgIiIpKTsKLSAgICAgIC8vY2xpZW50Um9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDbGllbnRTZXJ2ZXJEZXBsb3lhYmxlQ29uZmlnQ29tbWFuZCgpLCAiIikpOyAvL05vdGU6IGFkZGVkIGhlcmUgZm9yIGNsaWVudCAgICAgCi0gICAgICAvL2NsaWVudFJvb3QuYWRkKCBuZXcgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQoKSApOwotICAgICAgY2xpZW50Um9vdC5hZGQoIG5ldyBDbGllbnRSb290RnJhZ21lbnQoKSApOwotICAgICAgY2xpZW50Um9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICAKLSAgICAgIHNldFRydWVGcmFnbWVudCggY2xpZW50Um9vdCApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KCBib29sZWFuIGdlblByb3h5ICkKLSAgICB7Ci0gICAgICBnZW5Qcm94eV8gPSBnZW5Qcm94eTsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgICB7Ci0gICAgICAvLyBNYXAgdGhlIG91dHB1dCBvZiB0aGUgc2VydmljZSBzY2VuYXJpbyB0byB0aGUgY2xpZW50IHNjZW5hcmlvLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVySW5zdGFuY2VJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0JICAKLSAgICAgIAotICAgICAgLy8gU2V0dXAgdGhlIFByZUNsaWVudERldmVsb3BDb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIG51bGwpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdFR5cGUiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VDbGllbnQiLCBudWxsICk7ICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotICB7Ci0gICAgcHVibGljIFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50KCkKLSAgICB7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICAKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCAobmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsgIAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoICJTZXJ2ZXJXaXphcmRXaWRnZXQiICkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNlcnZpY2VSb290RnJhZ21lbnQoKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ3JlYXRlTW9uaXRvckNvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IENvbXB1dGVFbmRwb2ludENvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNlcnZpY2VUZXN0RnJhZ21lbnQoICJUZXN0U2VydmljZSIpICk7Ci0gICAgICBhZGQoIG5ldyBDbGllbnRGcmFnbWVudCgpICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudChuZXcgVGVzdERlZmF1bHRpbmdGcmFnbWVudCgpLCIiKSk7IAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgQ2xpZW50VGVzdEZyYWdtZW50KCAiQ2xpZW50VGVzdFdpZGdldCIpICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggIlB1Ymxpc2giKSApOwotICAgICAgYWRkKHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZyk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IE9wZW5FZGl0b3JDb21tYW5kKCksICIiKSApOwotICAgICAgYWRkKG5ldyBMYXVuY2hGcmFnbWVudCgpKTsKLSAgICAgIGFkZChuZXcgRmluaXNoRnJhZ21lbnQoKSk7Ci0gICAgICAKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2NlbmFyaW9DbGVhbnVwQ29tbWFuZCgpLCAiIiApKTsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgICB7Ci0gICAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJEYXRhTWFwcGluZ3MoZGF0YU1hcHBpbmdSZWdpc3RyeV8pOyAgIAotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7ICAgICAgICAgICAgCi0KLSAgICAgIC8vIE1hcCBTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCB0byBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJUeXBlUnVudGltZVNlcnZlciIsIG51bGwpOwotICAgICAgCi0gICAgICAvLyBNYXAgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgdG8gU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHVibGljVURESSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAvLyBLU0MKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCi0gICAgICAKLSAgICAgIC8vTWFwIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQgdG8gU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbFByb2plY3QiLCBudWxsKTsgICAgICAKLQotICAgICAgLy9NYXAgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCB0byBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICAKLSAgICAgIC8vdG8gdGhlIHRlc3Qgd2l6YXJkCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZpY2VUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBXU0RMVGVzdExhdW5jaENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsgICAgIAotICAgICAgCi0gICAgICAvLyBNYXAgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUnVudGltZUlkIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRSdW50aW1lSWQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0MkVBUlByb2plY3QiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRWFyUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFYXJDb21wb25lbnROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW50aW1lMkNsaWVudFR5cGVzIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VKMkVFVmVyc2lvbiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SjJFRVZlcnNpb24iLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VOZWVkRUFSIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlckV4dGVuc2lvbkZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2aWNlVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaCIsIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50LmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIixXU0RMVGVzdExhdW5jaENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIAotCSAgICAvLyBTZXR1cCB0aGUgUHJlU2VydmljZURldmVsb3BDb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIG5ldyBTZWxlY3Rpb25UcmFuc2Zvcm1lcigpICk7Ci0JCQotCSAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudFR5cGUiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGVUeXBlIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VKMkVFVmVyc2lvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwgKTsgICAgICAKLQkJCQotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0gCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2FuUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgbnVsbCk7Ci0gICAJICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdENsaWVudCIsIFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgbnVsbCk7Ci0gICAJICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBudWxsKTsKLSAgIAkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBudWxsKTsKLQotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVySW5zdGFuY2VJZCIsIENyZWF0ZU1vbml0b3JDb21tYW5kLmNsYXNzKTsKLQotICAgICAgLy8gTWFwIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQgZm9yIFNlcnZlclN0YXJ0KCkKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotCi0gICAgICAvLyBNQVAgcG9zdCBzZXJ2ZXIgY29uZmlnIGNhbGwKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRTZXJ2ZXJJbnN0YW5jZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFeGlzdGluZ1NlcnZlcklkIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ2FuR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2V0RW5kcG9pbnRNZXRob2QiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotCSAgCi0gICAgICAvLyBNYXAgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclNlcnZlciIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzLCJTZXJ2aWNlU2VydmVyVHlwZUlkIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlckluc3RhbmNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MsIlNhbXBsZUV4aXN0aW5nU2VydmVyIiwgbmV3IFNlcnZlckluc3RUb0lTZXJ2ZXJUcmFuc2Zvcm1lcigpKTsgICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5DbGllbnRUZXN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgCi0gICAgICAvLyBNYXAgT3BlbkVkaXRvckNvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgT3BlbkVkaXRvckNvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgICAgT3BlbkVkaXRvckNvbW1hbmQuY2xhc3MgKTsgICAgICAKLSAgICAgIAotICAgICAgLy9NYXAgRmluaXNoIENvbW1hbmQgCi0gICAgICAKLSAgICAgIAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvcnVudGltZS9TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM1MGIzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvcnVudGltZS9TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMxNSAgIDEzMTk2MyByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDE4ICAgMTI5Njg4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjcgICAxMjY3ODAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAgIDEzODA1OCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyMyAgIDEzMzcxNCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyNSAgIDE0Mzg0MyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDkwNSAgIDE1NjIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgSGFuZGxpbmcgcHJvamVjdHMgd2l0aCBubyB0YXJnZXQgcnVudGltZQotICogMjAwNzAzMTkJICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uIGFkZGVkIGluIHNvbWUgbnVsbCBjaGVja3MKLSAqIDIwMDcxMjEyCSAgMjAwMTkzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwMzI2ICAgMTcxNzA1IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBpbXByb3ZlIEFudFRhc2sgZXJyb3JzIHJlcG9ydAotICogMjAwODAzMjYgICAyMjEzNjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDAyICAgMjI1MDMyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldE1hdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlByb2plY3RUb3BvbG9neUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuRmFjZXRNYXRjaENhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi17CQotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGdlbmVyYXRlUHJveHlfPXRydWU7IC8vanZoCi0gIAotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VJZHNfOwotICBwcml2YXRlIGJvb2xlYW4gc2VydmljZUlkc0ZpeGVkXyA9IGZhbHNlOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUnVudGltZUlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZUVhclByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNvbXBvbmVudFR5cGVfOwotICBwcml2YXRlIElQcm9qZWN0IGluaXRpYWxQcm9qZWN0XzsKLSAgcHJpdmF0ZSBib29sZWFuIHNlcnZpY2VOZWVkRUFSXyA9IHRydWU7Ci0gIHByaXZhdGUgRmFjZXRNYXRjaGVyIHNlcnZpY2VGYWNldE1hdGNoZXJfOwotCi0gIHB1YmxpYyBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAKLSAgCi0gIC8qKgotICAgKiBEZWZhdWx0cyB0aGUgZm9sbG93aW5nIGJpdHMgb2YgaW5mb3JtYXRpb24gaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKLSAgICogc2VydmljZVJ1bnRpbWVJZF8gOiB0aGUgc2VydmljZVJ1bnRpbWVJZC4gTXVzdCBiZSBkZWZhdWx0ZWQgdG8gbm9uLWVtcHR5IFN0cmluZy4KLSAgICogc2VydmljZUlkc18ucnVudGltZUlkXzogdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWQuIE11c3QgYmUgZGVmYXVsdGVkIHRvIG5vbi1lbXB0eSBTdHJpbmcuCi0gICAqIHNlcnZpY2VQcm9qZWN0TmFtZV8gOiB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm9qZWN0LiBNdXN0IGJlIG5vbi1lbXB0eS4gTWF5IG9yIG1heSBub3QgZXhpc3QuCi0gICAqIHNlcnZpY2VDb21wb25lbnRUeXBlXzogdGhlIGlkIG9mIHRoZSBzZXJ2aWNlIHByb2plY3QgdGVtcGxhdGUuIE11c3QgYmUgZW1wdHkgaWYgdGhlIHNlcnZpY2UKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IGV4aXN0cy4gTXVzdCBiZSBub24tZW1wdHkgb2YgdGhlIHNlcnZpY2UgcHJvamVjdCBkb2VzIG5vdCBleGlzdC4KLSAgICogc2VydmljZUlkc18uc2VydmVySWRfOiB0aGUgc2VydmVyIHR5cGUgaWQuIE1heSBiZSBhbiBlbXB0eSBTdHJpbmcgaWYgdGhlIGRlZmF1bHRlZCBXZWIgc2VydmljZSBydW50aW1lCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgcmVxdWlyZSBhIHNlcnZlci4KLSAgICogc2VydmljZUlkc18uc2VydmVySW5zdGFuY2VJZF86IHRoZSBzZXJ2ZXIgaWQuIE1heSBiZSBudWxsIG9yIGFuIGVtcHR5IFN0cmluZy4KLSAgICogc2VydmljZU5lZWRFQVJfOiB0cnVlIGlmIGFuIEVBUiBpcyBuZWVkZWQuIEZhbHNlIG90aGVyd2lzZS4KLSAgICogc2VydmljZUVhclByb2plY3ROYW1lXzogdGhlIHNlcnZpY2UgRUFSIHByb2plY3QuIE11c3QgYmUgZW1wdHkgaWYgdGhlIHNlcnZpY2VOZWVkRUFSXyBpcyBmYWxzZS4KLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBub24tZW1wdHkgaWYgdGhlIHNlcnZpY2VOZWVkRUFSXyBpcyB0cnVlLgotICAgKiBEZWZhdWx0cyB0aGUgcGFyYWxsZWwgaW5mb3JtYXRpb24gb24gdGhlIGNsaWVudC1zaWRlIGlmIG5lZWRlZCAKLSAgICogKEBzZWUgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kI2V4ZWN1dGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIHRyeQotICAgIHsgICAgCQotICAgICAKLSAgICAgLy8qKlN0ZXAgMSoqIERlZmF1bHQgdGhlIHNlcnZpY2VSdW50aW1lIGFuZCB0aGUgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICAgLy9zZXJ2aWNlSWRzRml4ZWRfIGlzIHNldCB0byB0cnVlIGZvciB0aGUgQW50IHNjZW5hcmlvLiBJdCdzIGFsd2F5cyBmYWxzZSBmb3IgdGhlIHdpemFyZAotICAgICAvL3NjZW5hcmlvcy4gICAgCQotICAgICBpZiAoc2VydmljZUlkc0ZpeGVkXykKLSAgICAgewotICAgICAgIC8vU2V0IHRoZSBzZXJ2aWNlUnVudGltZSBiYXNlZCBvbiB0aGUgcnVudGltZSBhbmQgc2VydmVyLgotICAgICAgIC8vSWYgdXNlciBzZXQgYSBzZXJ2aWNlIHByb2plY3QgdXNlIHRoYXQgYXMgaW5pdGlhbCBwcm9qZWN0IG90aGVyd2lzZSBkZWZhdWx0IGZyb20gaW5pdGlhbCBzZWxlY3Rpb24uCi0gICAgCSBpZiAoc2VydmljZVByb2plY3ROYW1lXyAhPSBudWxsKSAKLSAgICAJIHsKLSAgICAJCSBpbml0aWFsUHJvamVjdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lXyk7Ci0gICAgCQkgCi0gICAgCQkgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IGdldERlZmF1bHRSdW50aW1lKGluaXRpYWxQcm9qZWN0Xywgc2VydmljZUlkc18uZ2V0VHlwZUlkKCksIGZhbHNlLCBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICAgICAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgICAJICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgCSAgICAgc2VydmljZVJ1bnRpbWVJZF8gPSBkcnQuZ2V0UnVudGltZUlkKCk7ICAgICAgIAotCi0gICAgCSAgICAgICBpZiAoc2VydmljZVJ1bnRpbWVJZF8gIT0gbnVsbCkKLSAgICAJICAgICAgIHsKLSAgICAJICAgIAkgICBzZXJ2aWNlSWRzXy5zZXRSdW50aW1lSWQoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXykuZ2V0UnVudGltZSgpCi0gICAgCSAgICAgIAkgICAgICAgICAuZ2V0SWQoKSk7Ci0gICAgCSAgICAgICB9Ci0gICAgCSB9Ci0gICAgCSBlbHNlCi0gICAgCSB7Ci0gICAgCQkgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IGdldERlZmF1bHRTZXJ2aWNlUnVudGltZUZvckZpeGVkUnVudGltZUFuZFNlcnZlcihpbml0aWFsUHJvamVjdF8pOyAgCi0gICAgCSAgICAgc2VydmljZUZhY2V0TWF0Y2hlcl8gPSBkcnQuZ2V0RmFjZXRNYXRjaGVyKCk7Ci0gICAgCSAgICAgc2VydmljZVByb2plY3ROYW1lXyA9IGRydC5nZXRQcm9qZWN0TmFtZSgpOwotICAgIAkgICAgIHNlcnZpY2VSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOwkgCi0gICAgCSB9ICAgCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgLy8gU2V0IHRoZSBydW50aW1lIGJhc2VkIG9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBnZXREZWZhdWx0UnVudGltZShpbml0aWFsUHJvamVjdF8sIHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpLCBmYWxzZSwgc2VydmljZUlkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgc2VydmljZUZhY2V0TWF0Y2hlcl8gPSBkcnQuZ2V0RmFjZXRNYXRjaGVyKCk7Ci0gICAgICAgc2VydmljZVByb2plY3ROYW1lXyA9IGRydC5nZXRQcm9qZWN0TmFtZSgpOwotICAgICAgIHNlcnZpY2VSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAKLQotICAgICAgIGlmIChzZXJ2aWNlUnVudGltZUlkXyAhPSBudWxsKQotICAgICAgIHsKLSAgICAJICAgc2VydmljZUlkc18uc2V0UnVudGltZUlkKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZF8pLmdldFJ1bnRpbWUoKQotICAgIAkJICAgICAgICAgLmdldElkKCkpOyAKLSAgICAgICB9IAotICAgICB9Ci0gICAgIAotICAgICAvLyoqU3RlcCAyKiogRGVmYXVsdCB0aGUgc2VydmljZSBwcm9qZWN0IGlmIGl0IHdhcyBub3QgYWxyZWFkeSBkZWZhdWx0ZWQgCi0gICAgIC8vYXMgcGFydCBvZiBkZWZhdWx0aW5nIHRoZSBXZWIgc2VydmljZSBydW50aW1lLgotICAgICBpZiAoc2VydmljZVByb2plY3ROYW1lXyA9PSBudWxsKQotICAgICB7Ci0gICAgICAgLy8gUHJvamVjdCBuYW1lIGRpZCBub3QgZ2V0IHNldCB3aGVuIHRoZSBydW50aW1lIHdhcyBzZXQsIHNvIHNldCBpdCBub3cKLSAgICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZ2V0RGVmYXVsdFNlcnZpY2VQcm9qZWN0TmFtZSgpOwotICAgICB9Ci0KLSAgICAgLy8qKlN0ZXAgMyoqIERlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCB0eXBlLgotICAgICBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfKTsgCi0gICAgIGlmICghc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgIHsKLSAgICAgICAvLyBTZXQgdGhlIHByb2plY3QgdGVtcGxhdGUKLSAgICAgICBzZXJ2aWNlQ29tcG9uZW50VHlwZV8gPSBnZXREZWZhdWx0U2VydmljZVByb2plY3RUZW1wbGF0ZSgpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIC8vU2V0IGl0IHRvIGFuIGVtcHR5IFN0cmluZwotICAgICAgIHNlcnZpY2VDb21wb25lbnRUeXBlXyA9ICIiOwotICAgICB9Ci0gICAgIC8vKipTdGVwIDQqKiBEZWZhdWx0IHRoZSBzZXJ2ZXIgaWYgdGhpcyBpcyBub3QgYW4gQW50IHNjZW5hcmlvLgotICAgICBpZiAoIXNlcnZpY2VJZHNGaXhlZF8pCi0gICAgIHsKLSAgICAgICAvLyBTZXQgdGhlIHNlcnZlcgotICAgICAgIElTdGF0dXMgc2VydmVyU3RhdHVzID0gc2V0U2VydmljZURlZmF1bHRTZXJ2ZXIoKTsKLSAgICAgICBpZiAoc2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgIHsKLSAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc2VydmVyU3RhdHVzKTsKLSAgICAgICAgIHJldHVybiBzZXJ2ZXJTdGF0dXM7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIAotICAgICAvLyoqU3RlcCA1KiogRGVmYXVsdCBjbGllbnROZWVkRUFSIGFuZCBjbGllbnQgRUFSIGlmIGFuIEVBUiBpcyBuZWVkZWQKLSAgICAgc2V0RGVmYXVsdFNlcnZpY2VFYXJQcm9qZWN0KCk7Ci0gICAgIAotICAgICAvLyBqdmggLSBmb3Igbm93IGNvbW1lbnQgb3V0IGdlbmVyYXRlIHByb3h5Ci0gICAgIC8vICAgbmVlZCB0byBsb29rIGF0IGRlZmF1bHRpbmcgYmFzZWQgb24gYW4gZXZlbnQKLSAgICAgLy8gICAgb24gcGFnZSAxIC0gd2hlbiBjbGllbnQgZ2VuZXJhdGlvbiBnb2VzIGZyb20gbm9uZQotICAgICAvLyAgICB0byBkZXZlbG9wLi4uCi0gICAgIC8qaWYgKGdlbmVyYXRlUHJveHlfKQotICAgICB7Ki8KLSAgICAJIC8vRGVmYXVsdCB0aGUgY2xpZW50LXNpZGUuCi0gICAgCSBJU3RhdHVzIGNsaWVudFNpZGVTdGF0dXMgPSBkZWZhdWx0Q2xpZW50U2lkZShtb25pdG9yKTsKLSAgICAgICAgIGlmIChjbGllbnRTaWRlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgICAgewotICAgICAgICAgICByZXR1cm4gY2xpZW50U2lkZVN0YXR1czsKLSAgICAgICAgIH0gICAgICAgICAgICAgICAgICAKLSAgICAvLyB9Ci0gICAgICAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBDYXRjaCBhbGwgRXhjZXB0aW9ucyBpbiBvcmRlciB0byBnaXZlIHNvbWUgZmVlZGJhY2sgdG8gdGhlIHVzZXIKLSAgICAgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQsCi0gICAgICAgICAgbmV3IFN0cmluZ1tdIHsgZS5nZXRNZXNzYWdlKCkgfSksIGUpOwotICAgICAgCi0gICAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGhhcyBubyBlcnJvciBtc2csIGl0J3Mga2luZCBvZiB1c2VsZXNzIHRvIHRoZSB1c2VyIHNvIGxldCdzIGxvZyBpdAotICAgICAgaWYgKCBlLmdldE1lc3NhZ2UoKSA9PSBudWxsKXsKLSAgICAgIAlJTG9nIHBsdWdpbmxvZyA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCk7Ci0gICAgICAJcGx1Z2lubG9nLmxvZyhlcnJvclN0YXR1cyk7Ci0gICAgICAJICAKLSAgICAgIAkvLyBjcmVhdGUgYSBuZXcgSVN0YXR1cyB3aGljaCBoYXMgYSBub24tbnVsbCBtc2csIHRoaXMgaXMgdG8gYmUgdGhyb3duIHRvIHRoZSB1c2VyLgotICAgICAgCWVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVELAotICAgIAkgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgV1NVSVBsdWdpbk1lc3NhZ2VzLk1TR19TRUVfRVJST1JfTE9HIH0pLCBlKTsgIAotICAgICAgfQotICAgICAgICAKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBkZWZhdWx0Q2xpZW50U2lkZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gIHsKLSAgICBJU3RhdHVzIGNsaWVudERlZmF1bHRGcm9tU2VydmljZVN0YXR1cyA9IGRlZmF1bHRDbGllbnRTaWRlRnJvbVNlcnZpY2VTaWRlKHNlcnZpY2VQcm9qZWN0TmFtZV8sIHNlcnZpY2VJZHNfLCBzZXJ2aWNlTmVlZEVBUl8sIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8pOwotCi0gICAgLy8gSWYgYW4gZXJyb3Igc3RhdHVzIGlzIHJldHVybmVkLCB0aGUgb25seSBwcm9wZXJ0eSB0aGF0IHdhcyBzZXQgb24gCi0gICAgLy8gQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGlzIGNsaWVudFByb2plY3ROYW1lXy4gCi0gICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMgaW5jbHVkaW5nIGNsaWVudFJ1bnRpbWVJZF8sIGNsaWVudENvbXBvbmVudFR5cGVfLCAKLSAgICAvLyBhbGwgdGhlIHZhbHVlcyBpbiBjbGllbnRJZHNfLCBjbGllbnROZWVkRUFSXywgYW5kIGNsaWVudEVhclByb2plY3ROYW1lXyAKLSAgICAvLyBoYXZlIG5vdCBiZWVuIHNldCBiZWNhdXNlIHRoZSBzZXJ2aWNlIHNpZGUgc2VydmVyIGFuZAotICAgIC8vIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgY291bGQgbm90IGJlIHVzZWQgb24gdGhlIGNsaWVudCBzaWRlLiBSdW4gdGhlIGVudGlyZQotICAgIC8vIGNsaWVudC1zaWRlIGRlZmF1bHRpbmcgYWxnb3JpdGhtIHVzaW5nIGNsaWVudFByb2plY3ROYW1lXyBhcyB0aGUgCi0gICAgLy8gY2xpZW50SW5pdGlhbFByb2plY3RfLiBUaGVuIHVwZGF0ZSB0aGUgY2xpZW50RWFyUHJvamVjdE5hbWVfIGJhc2VkIG9uIHRoZQotICAgIC8vIHNlcnZpY2Ugc2lkZSBFQVIuCi0gICAgaWYgKGNsaWVudERlZmF1bHRGcm9tU2VydmljZVN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgewotICAgICAgLy8gMS4gUnVuIGNsaWVudCBzaWRlIGRlZmF1bHRpbmcgZnJvbSBzY3JhdGNoIHdpdGggY2xpZW50SW5pdGlhbFByb2plY3RfCi0gICAgICAvLyBzZXQgdG8gdGhlIG5ldyBjbGllbnRQcm9qZWN0TmFtZV8uCi0gICAgICBJUHJvamVjdCBjbGllbnRQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KGdldENsaWVudFByb2plY3ROYW1lKCkpOwotICAgICAgc2V0Q2xpZW50SW5pdGlhbFByb2plY3QoY2xpZW50UHJvamVjdCk7Ci0gICAgICBJU3RhdHVzIGNsaWVudEV4ZWN1dGVTdGF0dXMgPSBzdXBlci5leGVjdXRlKG1vbml0b3IsIG51bGwpOwotICAgICAgaWYgKGNsaWVudEV4ZWN1dGVTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjbGllbnRFeGVjdXRlU3RhdHVzOwotICAgICAgfQotCi0gICAgICAvLyAyLiBVcGRhdGUgdGhlIGNsaWVudC1zaWRlIEVBUiBpZiBzZXJ2aWNlTmVlZEVBUl8gaXMgdHJ1ZTsKLSAgICAgIGlmIChzZXJ2aWNlTmVlZEVBUl8pCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRDbGllbnRFYXJGcm9tU2VydmljZUVhcihzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldERlZmF1bHRTZXJ2aWNlRWFyUHJvamVjdCgpCi0gIHsKLSAgICAvL0Rvbid0IG5lZWQgYW4gZWFyIGlmIHRoaXMgaXMgYSBKYXZhIHByb2plY3QsIG9yIGlmIHRoZSBzZWxlY3RlZCB0ZW1wbGF0ZSBpcyBqc3QudXRpbGl0eQotICAgIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotICAgIGlmIChzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBzZXJ2aWNlTmVlZEVBUl8gPSAhKEZhY2V0VXRpbHMuaXNKYXZhUHJvamVjdChzZXJ2aWNlUHJvamVjdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2VydmljZU5lZWRFQVJfID0gIShGYWNldFV0aWxzLmlzVXRpbGl0eVRlbXBsYXRlKHNlcnZpY2VDb21wb25lbnRUeXBlXykpOyAgCi0gICAgfSAgICAKLSAgICAKLSAgICAvL0lmIHNlcnZpY2VOZWVkRUFSXyBpcyBzdGlsbCB0cnVlLCBpdCBtZWFucyB0aGF0IHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSBKYXZhIHByb2plY3QKLSAgICAvL29yIEphdmEgcHJvamVjdCB0eXBlLiBDaGVjayB0aGUgc2VydmVyLgotICAgIAotICAgIAotICAgIGlmIChzZXJ2aWNlTmVlZEVBUl8pCi0gICAgewotICAgICAgCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgYW4gZWFyIHNlbGVjdGlvbiBpcyBuZWVkZWQgYmFzZWQgb24gdGhlIHNlcnZlciB0eXBlLiAgICAgIAotICAgICAgU3RyaW5nIHNlcnZlcklkID0gc2VydmljZUlkc18uZ2V0U2VydmVySWQoKTsKLSAgICAgIGlmIChzZXJ2ZXJJZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBVc2UgdGhlIHNlcnZlciB0eXBlCi0gICAgICAgIFN0cmluZyBzZXJ2ZXJUYXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVySWQpOwotICAgICAgICBpZiAoc2VydmVyVGFyZ2V0SWQgIT0gbnVsbCAmJiBzZXJ2ZXJUYXJnZXRJZC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIVNlcnZlclV0aWxzLmlzVGFyZ2V0VmFsaWRGb3JFQVIoc2VydmVyVGFyZ2V0SWQsICIxMyIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIERlZmF1bHQgdGhlIEVBUiBzZWxlY3Rpb24gdG8gYmUgZW1wdHkKLSAgICAgICAgICAgIHNlcnZpY2VOZWVkRUFSXyA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsgLy8gc2VydmVySWQgPT0gbnVsbCwgYXNzdW1lIHRoYXQgaXQgZG9lcyBub3QgbmVlZCBFQVIKLSAgICAJICBzZXJ2aWNlTmVlZEVBUl8gPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKHNlcnZpY2VOZWVkRUFSXykKLSAgICB7Ci0gICAgICBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfID0gRGVmYXVsdGluZ1V0aWxzLmdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShzZXJ2aWNlUHJvamVjdE5hbWVfKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8gPSAiIjsKLSAgICB9ICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBzZXRTZXJ2aWNlRGVmYXVsdFNlcnZlcigpCi0gIHsKLSAgICAvL0Nob29zZSBhbiBleGlzdGluZyBzZXJ2ZXIgdGhlIG1vZHVsZSBpcyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBpZiBwb3NzaWJsZQotICAgIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotICAgIElTZXJ2ZXJbXSBjb25maWd1cmVkU2VydmVycyA9IG51bGw7Ci0gICAgaWYoc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgCWNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoU2VydmVyVXRpbHMuZ2V0TW9kdWxlKHNlcnZpY2VQcm9qZWN0KSwgbnVsbCk7Ci0gICAgCi0gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJzIT1udWxsICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aD4wKQotICAgIHsKLSAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlcklkKGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpKTsKLSAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0SWQoKSk7Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsgICAgICAgICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgY2hvb3NlIGEgc3VpdGFibGUgc2VydmVyIG9yIHNlcnZlciB0eXBlIGJhc2VkIG9uIHRoZSBleGlzdGluZyBwcm9qZWN0J3MgcnVudGltZSBvciBmYWNldHMKLSAgICBpZiAoc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgSVNlcnZlciBzZXJ2ZXIgPSBnZXRTZXJ2ZXJGcm9tUHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlRmFjZXRNYXRjaGVyXyk7Ci0gICAgICBpZiAoc2VydmVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVyLmdldElkKCkpOwotICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IGdldFNlcnZlclR5cGVGcm9tUHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlRmFjZXRNYXRjaGVyXyk7Ci0gICAgICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlSWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotICAgICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vSGF2ZW4ndCBwaWNrZWQgYSBzZXJ2ZXIvc2VydmVyIHR5cGUgb24gdGhlIGJhc2lzIG9mIHRoZSBwcm9qZWN0LiBQaWNrIGEgc2VydmVyL3NlcnZlciB0eXBlCi0gICAgLy90aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgc2VydmljZVJ1bnRpbWVJZC4KLSAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21TZXJ2aWNlUnVudGltZUlkKCk7Ci0gICAgaWYgKHNlcnZlciE9bnVsbCkKLSAgICB7Ci0gICAgICBzZXJ2aWNlSWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB9Ci0gICAgCi0gICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IGdldFNlcnZlclR5cGVGcm9tU2VydmljZVJ1bnRpbWVJZCgpOwotICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySWQoc2VydmVyVHlwZS5nZXRJZCgpKTsKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIH0gICAgCi0KLSAgICAvL05vIHN1aXRhYmxlIHNlcnZlciB3YXMgZm91bmQuIFBvcHVwIGFuIGVycm9yLgotICAgIFJ1bnRpbWVEZXNjcmlwdG9yIHJ1bnRpbWVEZXNjcmlwdG9yID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUJ5SWQoc2VydmljZUlkc18uZ2V0UnVudGltZUlkKCkpOwotICAgIGlmIChydW50aW1lRGVzY3JpcHRvci5nZXRTZXJ2ZXJSZXF1aXJlZCgpKQotICAgIHsgICAgCi0gICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChzZXJ2aWNlSWRzXy5nZXRSdW50aW1lSWQoKSk7ICAgIAotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX05PX1NFUlZFUl9SVU5USU1FLCBuZXcgU3RyaW5nW117cnVudGltZUxhYmVsfSkgKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9ICAKLSAgCi0gIHByaXZhdGUgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tU2VydmljZVJ1bnRpbWVJZCgpCi0gIHsKLSAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotICAgIGlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGggPiAwKSAKLSAgICB7Ci0gICAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLSAgICAgIFN0cmluZyBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQgPSBjb250ZXh0LmdldFNlcnZlckZhY3RvcnlJZCgpOwotCi0gICAgICAvL0lmIGEgc2VydmVyIG9mIHRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUgaXMgcHJlc2VudCwgY2hlY2sgdGhhdCBvbmUgZmlyc3QKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmVycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAJaWYgKHNlcnZlcnNbal0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIAl7Ci0JICAgICAgICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gc2VydmVyc1tqXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkgICAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKHNlcnZpY2VSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgcmV0dXJuIHNlcnZlcnNbal07Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0gIAotICAgIAl9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vQSBzZXJ2ZXIgb2YgdGhlIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZSBjb3VsZCBub3QgYmUgZm91bmQgb3IgZGlkIG5vdCBtYXRjaC4gQ2hlY2sgYWxsIHRoZSBleGlzdGluZyBzZXJ2ZXJzLiAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAJaWYgKHNlcnZlcnNbaV0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIAl7Ci0JICAgICAgICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKHNlcnZpY2VSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgewotCSAgICAgICAgICByZXR1cm4gc2VydmVyc1tpXTsKLQkgICAgICAgIH0KLSAgICAJfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21TZXJ2aWNlUnVudGltZUlkKCkKLSAgewotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVJ1bnRpbWUoc2VydmljZVJ1bnRpbWVJZF8pOwotICAgIGlmIChzZXJ2ZXJUeXBlcyE9bnVsbCAmJiBzZXJ2ZXJUeXBlcy5sZW5ndGg+MCkKLSAgICB7Ci0gICAgICAvL1JldHVybiB0aGUgcHJlZmVycmVkIG9uZSBpZiBpdCBpcyBpbiB0aGUgbGlzdAotICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZlclR5cGVzW2ldLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZXNbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlclR5cGVzWzBdKTsKLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiBudWxsOwotICB9ICAKLSAgCi0gIAotICBwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0U2VydmljZVByb2plY3RUZW1wbGF0ZSgpCi0gIHsKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUHJvamVjdFRlbXBsYXRlcyhzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSwgc2VydmljZUlkc18uZ2V0UnVudGltZUlkKCkpOyAgICAKLSAgICAKLSAgICAvL1dhbGsgdGhlIGxpc3Qgb2Ygc2VydmljZSBwcm9qZWN0IHR5cGVzIGluIHRoZSBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2UKLSAgICBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHB0Yz0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgU3RyaW5nW10gcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBib29sZWFuIG1hdGNoZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoc2VydmljZVJ1bnRpbWVJZF8sIHRlbXBsYXRlSWQpOwotICAgICAgICAgIGlmIChtYXRjaGVzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vU2luY2UgdGhlIHByZWZlcnJlZFRlbXBsYXRlSWRzIGNvbnRhaW5zIHRoZSB1bmlvbiBvZiBhbGwgcHJvamVjdCB0eXBlcyBmb3IgYWxsIHNlcnZpY2UgcnVudGltZXMsIHdlIGFyZQotICAgIC8vZ3VhcmFudGVlZCB0byBoYXZlIHJldHVybmVkIGJ5IG5vdywgc28gdGhlIGNvZGUgYmVsb3cgd2lsbCBuZXZlciBiZSBleGVjdXRlZCB1bmRlciBub3JtYWwKLSAgICAvL2NpcmN1bXN0YW5jZXMuIEp1c3QgcmV0dXJuIHNvbWV0aGluZyB0byBzYXRpc2Z5IHRoZSBjb21waWxlci4KLSAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA+IDApCi0gICAgICByZXR1cm4gdGVtcGxhdGVzWzBdOwotICAgIAotICAgIHJldHVybiAiIjsgICAgCi0gICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdFNlcnZpY2VQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gRmFjZXRVdGlscy5nZXRBbGxQcm9qZWN0cygpOwotICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXyk7Ci0gICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnZzID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAKLSAgICAvL0NoZWNrIGVhY2ggcHJvamVjdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBzZXJ2aWNlUnVudGltZQotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0c1tpXS5nZXROYW1lKCkpOwotICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgICBTdHJpbmcgZlJ1bnRpbWVOYW1lID0gbnVsbDsKLSAgICAgIGZSdW50aW1lID0gRmFjZXRVdGlscy5nZXRGYWNldFJ1bnRpbWVGb3JQcm9qZWN0KHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0gICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZlJ1bnRpbWVOYW1lID0gZlJ1bnRpbWUuZ2V0TmFtZSgpOyAgICAgICAgCi0gICAgICB9ICAgICAgICAgICAgICAKLSAgICAgIAotICAgICAgaWYgKGZhY2V0VmVyc2lvbnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGZhbHNlLCBzZXJ2aWNlUnVudGltZUlkXywgcHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgYm9vbGVhbiBmYWNldFJ1bnRpbWVNYXRjaGVzID0gdHJ1ZTsKLSAgICAgICAgaWYgKGZSdW50aW1lTmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZmFjZXRSdW50aW1lTWF0Y2hlcyA9IEZhY2V0VXRpbHMuaXNGYWNldFJ1bnRpbWVTdXBwb3J0ZWQocmZ2cywgZlJ1bnRpbWVOYW1lKTsgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZm0uaXNNYXRjaCgpICYmIGZhY2V0UnVudGltZU1hdGNoZXMpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGZtOwotICAgICAgICAgIHJldHVybiBwcm9qZWN0c1tpXS5nZXROYW1lKCk7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL05vIHByb2plY3Qgd2FzIHN1aXRhYmxlLCByZXR1cm4gYSBuZXcgcHJvamVjdCBuYW1lCi0gICAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0RGVmYXVsdFdlYlByb2plY3ROYW1lKCk7Ci0gICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBEZWZhdWx0UnVudGltZVRyaXBsZXQgZ2V0RGVmYXVsdFNlcnZpY2VSdW50aW1lRm9yRml4ZWRSdW50aW1lQW5kU2VydmVyKElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICBTdHJpbmdbXSBzZXJ2aWNlUnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpKTsKLSAgICBBcnJheUxpc3Q8U3RyaW5nPiB2YWxpZFNlcnZpY2VSdW50aW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2aWNlUnVudGltZXMubGVuZ3RoOyBpKysgKQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZXNbaV0pOwotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2UgcnVudGltZSBzdXBwb3J0cyB0aGUgc2VydmVyCi0gICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKGRlc2MuZ2V0SWQoKSwgc2VydmljZUlkc18uZ2V0U2VydmVySWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB2YWxpZFNlcnZpY2VSdW50aW1lcy5hZGQoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgICBpZiAocHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkpICAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAoZmFjZXRWZXJzaW9ucyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRNYXRjaEZvclByb2plY3QoZmFsc2UsIHNlcnZpY2VSdW50aW1lc1tpXSwgcHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKGZtKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGRydC5zZXRSdW50aW1lSWQoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZHJ0OwotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIAotICAgIGlmICh2YWxpZFNlcnZpY2VSdW50aW1lcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIC8vV2UgY291bGRuJ3QgbWF0Y2ggdG8gdGhlIGluaXRpYWxseSBzZWxlY3RlZCBwcm9qZWN0IHNvIHJldHVybiB0aGUgZmlyc3QgdmFsaWQgcnVudGltZS4KLSAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKG51bGwpOwotICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgZHJ0LnNldFJ1bnRpbWVJZCgoKFN0cmluZ1tdKXZhbGlkU2VydmljZVJ1bnRpbWVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpWzBdKTsKLSAgICAgIHJldHVybiBkcnQ7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1RoZXJlIGFyZSBubyBzZXJ2aWNlIHJ1bnRpbWVzIHRoYXQgbWF0Y2ggdGhlIGZpeGVkIHJ1bnRpbWUgYW5kIHNlcnZlci4gRmFsbCBiYWNrIHRvIG9yaWdpbmFsIGFsZ29yaXRobS4KLSAgICAgIHNlcnZpY2VJZHNGaXhlZF8gPSBmYWxzZTsKLSAgICAgIHJldHVybiBnZXREZWZhdWx0UnVudGltZShwcm9qZWN0LCBzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSwgZmFsc2UsIHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCkpOwotICAgIH0KLSAgfQotICAKLQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFByb2plY3QoSVByb2plY3QgaW5pdGlhbFByb2plY3QpCi0gIHsKLSAgICBpbml0aWFsUHJvamVjdF8gPSBpbml0aWFsUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldEluaXRpYWxQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBpbml0aWFsUHJvamVjdF87ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbENvbXBvbmVudE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAvL1RPRE8gVGhpcyBtZXRob2QgYW5kIGFueSBtYXBwaW5ncyB0byBpdAotCS8vIHNob3VsZCBiZSByZW1vdmVkIGlmIG5vIGxvbmdlciBuZWVkZWQuCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzICkKLSAgewotICAgIHNlcnZpY2VJZHNfID0gaWRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSWRzRml4ZWQoYm9vbGVhbiBiKQotICB7Ci0gICAgc2VydmljZUlkc0ZpeGVkXyA9IGI7ICAKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUlkc187IAotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUnVudGltZUlkKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlUnVudGltZUlkXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBnZW5lcmF0ZVByb3h5Xy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gZ2VuZXJhdGVQcm94eV8gVGhlIGdlbmVyYXRlUHJveHlfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5XykKLSAgewotICAgIHRoaXMuZ2VuZXJhdGVQcm94eV8gPSBnZW5lcmF0ZVByb3h5XzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VQcm9qZWN0TmFtZV87ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmljZU5lZWRFQVIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VOZWVkRUFSXzsKLSAgfQotICAKLSAgLy8gVGhpcyBpcyBmb3IgdGhlIEFudCBzY2VuYXJpbyB3aGVyZSB0aGUgc2VydmljZSBwcm9qZWN0IG5hbWUgY2FuIGJlIHNldCBpbiB0aGUgcHJvcGVydHkgZmlsZS4KLSAgLy8gSWYgdGhlIHVzZXIgaGFzIHNldCB0aGUgU2VydmljZVByb2plY3ROYW1lIHVzZSBpdCBmb3IgZGVmYXVsdGluZyBwdXJwb3NlcwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIHNlcnZpY2VQcm9qZWN0TmFtZV8gPSBuYW1lOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvTGF1bmNoRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L0xhdW5jaEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNmRmODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvTGF1bmNoRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotCi0KLXB1YmxpYyBjbGFzcyBMYXVuY2hGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotewotICBwcml2YXRlIGJvb2xlYW4gcHVibGlzaFRvUHVibGljVURESV87ICAKLSAgcHJpdmF0ZSBib29sZWFuIHB1Ymxpc2hUb1ByaXZhdGVVRERJXzsKLSAgCi0gIHB1YmxpYyBMYXVuY2hGcmFnbWVudCgpCi0gIHsKLSAgICBDb25kaXRpb24gY29uZGl0aW9uID0gbmV3IENvbmRpdGlvbigpCi0gICAgewotICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgewotICAgICAgICByZXR1cm4gKHB1Ymxpc2hUb1B1YmxpY1VERElfIHx8IHB1Ymxpc2hUb1ByaXZhdGVVRERJXyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBzZXRDb25kaXRpb24oIGNvbmRpdGlvbiApOwotICAgIHNldFRydWVGcmFnbWVudCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpLCAiIiApICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1B1YmxpY1VEREkoYm9vbGVhbiBwdWJsaXNoVG9QdWJsaWNVRERJKQotICB7Ci0gICAgcHVibGlzaFRvUHVibGljVURESV8gPSBwdWJsaXNoVG9QdWJsaWNVRERJOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVG9Qcml2YXRlVURESShib29sZWFuIHB1Ymxpc2hUb1ByaXZhdGVVRERJKQotICB7Ci0gIAlwdWJsaXNoVG9Qcml2YXRlVURESV8gPSBwdWJsaXNoVG9Qcml2YXRlVURESTsKLSAgfQotICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMGUxNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XU0RMVGVzdExhdW5jaENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZpY2VUZXN0RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RTZXJ2aWNlOwotICBwcml2YXRlIGJvb2xlYW4gZ2VuZXJhdGVQcm94eTsKLSAgCi0gIAotICBwdWJsaWMgU2VydmljZVRlc3RGcmFnbWVudCggU3RyaW5nIGlkICkKLSAgewotICAJU2VxdWVuY2VGcmFnbWVudCB0ZXN0Um9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gIAlDb25kaXRpb24gY29uZGl0aW9uID0gbmV3IENvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RTZXJ2aWNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICBzZXRDb25kaXRpb24oIGNvbmRpdGlvbiApOwotICAgIAotICAgIHRlc3RSb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgdGVzdFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIGlkICkgKTsKLSAgICBzZXRUcnVlRnJhZ21lbnQoIHRlc3RSb290ICk7Ci0gICAgICAKLSAgfQotIAotICAKLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgCQotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RJRCIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgCQotICAJLy9mcm9tIHRoZSB3aXphcmQgCi0gIAlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcywgIlRlc3RJRCIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFeHRlcm5hbEJyb3dzZXIiLFdTRExUZXN0TGF1bmNoQ29tbWFuZC5jbGFzcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KQotICB7Ci0gIAl0aGlzLmdlbmVyYXRlUHJveHkgPSBnZW5lcmF0ZVByb3h5OwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAJcmV0dXJuIGdlbmVyYXRlUHJveHk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRlc3RTZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIGJvb2xlYW4gdGVzdFNlcnZpY2UgKQotICB7Ci0gICAgdGhpcy50ZXN0U2VydmljZSA9IHRlc3RTZXJ2aWNlOwotICB9Ci0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L1NlcnZpY2VUZXN0V2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMTg2ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV1NETFRlc3RMYXVuY2hDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZpY2VUZXN0V2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZVBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiOwotCi0gIHByaXZhdGUgQ29tYm8gdGVzdFR5cGVDb21ib187Ci0gIC8qQ09OVEVYVF9JRCBQU1RQMDAwMSBmb3IgdGhlIFRlc3QgVHlwZSBDb21ibyBib3ggb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QU1RQX0NPTUJPQk9YX1RFU1QgPSAiUFNUUDAwMDEiOwotCi0gIHByaXZhdGUgQnV0dG9uIGxhdW5jaEJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQU1RQMDAwMiBmb3IgdGhlIGxhdW5jaCBidXR0b24gb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QU1RQX0xBVU5DSF9CVVRUT04gPSAiUFNUUDAwMDIiOwotCi0gIAotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgZmFjaWxpdGllc187Ci0gIAotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IG51bGw7Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgID0gbmV3IFVJVXRpbHMoY3JlYXRlUGx1Z2luSWRfICk7Ci0gICAgICAgIAotICAgIENvbXBvc2l0ZSB0ZXN0Q29tcG9zaXRlID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMywgMCwgMCApOwotICAgIAotICAgIHRlc3RUeXBlQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyggdGVzdENvbXBvc2l0ZSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RFU1RfVFlQRVMsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFNUUF9DT01CT0JPWF9URVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QU1RQX0NPTUJPQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLSAgICAKLSAgICBsYXVuY2hCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCB0ZXN0Q29tcG9zaXRlLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0xBVU5DSF9TRVJWSUNFX1RFU1QsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFNUUF9MQVVOQ0hfQlVUVE9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QU1RQX0xBVU5DSF9CVVRUT04gKTsKLSAgICBsYXVuY2hCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2ZW50ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTGF1bmNoQnV0dG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VpZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIG1vZHVsZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSAiIjsKLSAgcHJpdmF0ZSBJRW52aXJvbm1lbnQgZW52OwotICBwcml2YXRlIExpc3QgZW5kcG9pbnRzOwotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZUxhdW5jaEJ1dHRvbigpCi0gIHsKLQkvLyBTcGxpdCB1cCB0aGUgcHJvamVjdCBhbmQgbW9kdWxlCi0JaW50IHAgPSBzZXJ2ZXJQcm9qZWN0LmluZGV4T2YoIi8iKTsKLQlpZiAocCAhPSAtMSl7Ci0JCW1vZHVsZSA9IHNlcnZlclByb2plY3Quc3Vic3RyaW5nKHArMSk7Ci0JCXNlcnZlclByb2plY3QgPSBzZXJ2ZXJQcm9qZWN0LnN1YnN0cmluZygwLHApOwotCX0KLSAgCQotICAJU3RyaW5nIHRlc3RJRCA9IHRlc3RUeXBlQ29tYm9fLmdldFRleHQoKTsKLSAgCWxhdW5jaGVkU2VydmljZVRlc3ROYW1lID0gdGVzdElEOwotICAJV1NETFRlc3RMYXVuY2hDb21tYW5kIHd0bGMgPSBuZXcgV1NETFRlc3RMYXVuY2hDb21tYW5kKCk7Ci0gIAl3dGxjLnNldFRlc3RJRCh0ZXN0SUQpOwotICAJd3RsYy5zZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoc2VydmljZWlkcyk7Ci0JICB3dGxjLnNldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKTsKLSAgCXd0bGMuc2V0U2VydmVyUHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQkgIHd0bGMuc2V0U2VydmVyTW9kdWxlKG1vZHVsZSk7Ci0gIAl3dGxjLnNldFdzZGxVUkkod3NkbFVSSSk7Ci0gIAl3dGxjLnNldEV4dGVybmFsQnJvd3Nlcih0cnVlKTsKLSAgCXd0bGMuc2V0RW5kcG9pbnQoZW5kcG9pbnRzKTsKLSAgCXd0bGMuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAJd3RsYy5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUZXN0RmFjaWxpdGllcyggU2VsZWN0aW9uTGlzdCBmYWNpbGl0aWVzICkKLSAgewotICAgIGZhY2lsaXRpZXNfID0gZmFjaWxpdGllczsKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZXRJdGVtcyggZmFjaWxpdGllcy5nZXRMaXN0KCkgKTsKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZWxlY3QoIGZhY2lsaXRpZXMuZ2V0SW5kZXgoKSApOwotICB9Ci0gIAotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCBnZXRTZXJ2aWNlVGVzdEZhY2lsaXRpZXMoKQotICB7Ci0gICAgZmFjaWxpdGllc18uc2V0SW5kZXgoIHRlc3RUeXBlQ29tYm9fLmdldFNlbGVjdGlvbkluZGV4KCkgKTsKLSAgICByZXR1cm4gZmFjaWxpdGllc187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RJRCgpCi0gIHsKLSAgCXJldHVybiB0ZXN0VHlwZUNvbWJvXy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmVyUHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmVyUHJvamVjdCA9IHNlcnZlclByb2plY3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmljZWlkcykKLSAgewotICAgIHRoaXMuc2VydmljZWlkcyA9IHNlcnZpY2VpZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW52aXJvbm1lbnQoSUVudmlyb25tZW50IGVudikKLSAgewotICAJdGhpcy5lbnYgPSBlbnY7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpCi0gIHsKLSAgICBpZiAoZW5kcG9pbnQgIT0gbnVsbCAmJiBlbmRwb2ludC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB2LmFkZChlbmRwb2ludCk7Ci0gICAgICBzZXRFbmRwb2ludHModik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludHMoTGlzdCBlbmRwb2ludHMpCi0gIHsKLSAgICB0aGlzLmVuZHBvaW50cyA9IGVuZHBvaW50czsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNzSW5zdGFuY2VJZCl7Ci0JICB0aGlzLnNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkID0gc3NJbnN0YW5jZUlkOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDFkNmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gQXByIDE1LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlIGFuZCBDb21tZW50cwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIAotICBwcml2YXRlIFNlbGVjdGlvbkxpc3Qgc2VydmljZVRlc3RGYWNpbGl0aWVzOwkKLSAgcHJpdmF0ZSBTdHJpbmdbXSB0ZXN0SUQ7Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgCVNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCkuY29weSgpOwotICAJdGVzdElEID0gc2NlbmFyaW9Db250ZXh0LmdldE5vbkphdmFUZXN0U2VydmljZSgpOwotICAJU3RyaW5nW10gdGVzdFR5cGVzID0gc2NlbmFyaW9Db250ZXh0LmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsKLSAgCSAgCQotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB3c3R0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIAkKLSAgICAKLSAgCVZlY3RvciB3c2RsTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIAlmb3IoaW50IGkgPTAgO2k8dGVzdFR5cGVzLmxlbmd0aDtpKyspewotICAJICBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3c2N0ZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbil3c3R0UmVnaXN0cnkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUodGVzdFR5cGVzW2ldKTsgIAkKLSAgCSAgaWYod3NjdGUudGVzdFdTREwoKSl7Ci0gIAkgICAgd3NkbE5hbWVzLmFkZEVsZW1lbnQodGVzdFR5cGVzW2ldKTsKLSAgCSAgfQotICAJfQotICAgIAotICAJU3RyaW5nIGphdmFOYW1lc0FycmF5W10gPSBuZXcgU3RyaW5nW3dzZGxOYW1lcy5zaXplKCldOwotICAJRW51bWVyYXRpb24gZSA9IHdzZGxOYW1lcy5lbGVtZW50cygpOwotICAJaW50IGkgPSAwOwotICAJd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSl7Ci0gICAgICBqYXZhTmFtZXNBcnJheVtpXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAJICBpKys7Ci0gIAl9Ci0gIAkKLSAgCQotICAJc2VydmljZVRlc3RGYWNpbGl0aWVzID0gbmV3IFNlbGVjdGlvbkxpc3QoamF2YU5hbWVzQXJyYXksMCk7ICAJCi0gIAkKLSAJcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldFNlcnZpY2VUZXN0RmFjaWxpdGllcygpCi0gIHsKLSAgCXJldHVybiBzZXJ2aWNlVGVzdEZhY2lsaXRpZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0VGVzdElEKCkKLSAgewotICAJcmV0dXJuIHRlc3RJRDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RXh0ZXJuYWxCcm93c2VyKCkKLSAgewotICAJcmV0dXJuIGZhbHNlOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxNjVlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc4NTNlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi11ZGRpcmVnaXN0cnkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MjU2MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJiMDI5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6MzY6NTggRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNjliNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDo0OSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkxYTlhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LnBsdWdpbi5XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWRlYzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9pY29ucy9yZWdpc3RyeS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvcmVnaXN0cnkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjQzY2FlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9pY29ucy9yZWdpc3RyeS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvd2l6YmFuL3VkZGlwcml2YXRlY29uZmlnX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvd2l6YmFuL3VkZGlwcml2YXRlY29uZmlnX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZDE1NWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2ljb25zL3dpemJhbi91ZGRpcHJpdmF0ZWNvbmZpZ193aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTBhZmI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDUxNiAgIDE2MzI2NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBVbml2ZXJzYWwgRGVzY3JpcHRpb24gRGlzY292ZXJ5IGFuZCBJbnRlZ3JhdGlvbiBSZWdpc3RyeQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfVU5JVF9URVNUX1VEREk9VW5pdCBUZXN0IFVEREkKLQotWFBfUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVTPVByaXZhdGUgVURESSBSZWdpc3RyeSBUeXBlcwotUFJJVkFURV9VRERJX1JFR0lTVFJZX0RFU0M9Q3JlYXRlIGFuZCBjb25maWd1cmUgYSB1bml0IHRlc3QgVURESSByZWdpc3RyeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhYzc1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIGxpa2VseSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0icHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiIG5hbWU9IiVYUF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVMiLz4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5wcml2YXRlVURESVJlZ2lzdHJ5VHlwZSI+Ci0gICAgICA8cHJpdmF0ZVVERElSZWdpc3RyeVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVQUklWQVRFX1VERElfUkVHSVNUUllfVFlQRV9JTVBMIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwiPgotICAgICAgPC9wcml2YXRlVURESVJlZ2lzdHJ5VHlwZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfVU5JVF9URVNUX1VEREkiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9yZWdpc3RyeS5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5iaW5kaW5nLlByaXZhdGVVRERJV2lkZ2V0QmluZGluZyI+Ci0gICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAlUFJJVkFURV9VRERJX1JFR0lTVFJZX0RFU0MKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICA8L3dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19VTklUX1RFU1RfVURESSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZy5Qcml2YXRlVURESVdpZGdldEJpbmRpbmciCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy93aXpiYW4vdWRkaXByaXZhdGVjb25maWdfd2l6LnBuZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZy5Qcml2YXRlVURESVdpZGdldEJpbmRpbmciPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0gICA8IS0tCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19VTklUX1RFU1RfVURESSIKLSAgICAgICAgICAgIGljb249Imljb25zL3JlZ2lzdHJ5LmdpZiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJV2l6YXJkIj4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX1VOSVRfVEVTVF9VRERJCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAgPHNlbGVjdGlvbgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSI+Ci0gICAgICAgICA8L3NlbGVjdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0gICAtLT4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQyNmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBQcml2YXRlVURESUNvbmZpZ1BhZ2UKLSMKLVBBR0VfVElUTEVfUFJJVkFURV9VRERJX0NPTkZJRz1Vbml0IFRlc3QgVURESSBSZWdpc3RyeSBDb25maWd1cmF0aW9uCi1QQUdFX0RFU0NfUFJJVkFURV9VRERJX0NPTkZJRz1Db25maWd1cmUgdGhlIHVuaXQgdGVzdCBVRERJIHJlZ2lzdHJ5LgotCi0jCi0jIFRvb2x0aXAgZm9yIFByaXZhdGVVRERJQ29uZmlnUGFnZQotIwotVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFPURlcGxveSBvciByZW1vdmUgYSBVbml0IFRlc3QgVURESSBSZWdpc3RyeQotVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFPUNob29zZSB0aGUgdHlwZSBvZiBVbml0IFRlc3QgVURESSBSZWdpc3RyeSB5b3Ugd2FudCB0byBkZXBsb3kKLVRPT0xUSVBfUFVQUl9ERVBMT1lfUFJJVkFURV9VRERJPURlcGxveSBhIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci1UT09MVElQX1BVUFJfVVBEQVRFX1BSSVZBVEVfVUREST1VcGRhdGUgdGhlIGV4aXN0aW5nIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci1UT09MVElQX1BVUFJfUkVNT1ZFX1BSSVZBVEVfVUREST1SZW1vdmUgdGhlIGV4aXN0aW5nIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci0KLSMKLSMgQ29tbW9uIHdpemFyZCBzdHJpbmdzLgotIwotTEFCRUxfUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVTPVByaXZhdGUgVURESSBSZWdpc3RyeSB0eXBlOgotQlVUVE9OX0RFUExPWV9VRERJX1JFR0lTVFJZPURlcGxveSB0aGUgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLUJVVFRPTl9VUERBVEVfVURESV9SRUdJU1RSWT1VcGRhdGUgdGhlIHByZXZpb3VzbHkgZGVwbG95ZWQgVURESSByZWdpc3RyeQotQlVUVE9OX1JFTU9WRV9VRERJX1JFR0lTVFJZPVJlbW92ZSB0aGUgcHJldmlvdXNseSBkZXBsb3llZCBVRERJIHJlZ2lzdHJ5Ci0KLSMKLSMgV2l6YXJkIHBhZ2UgdGFzayBsYWJlbHMgYW5kIGRlc2NyaXB0aW9ucwotIyAodXNlZCBvbmx5IGZvciBwcm9ncmVzcyBpbmRpY2F0aW9uKS4KLSMKLQotIwotIyBEaWFsb2cgbWVzc2FnZXMKLSMKLQotIwotIyBQcm9ncmVzcyBtZXNzYWdlcwotIwotCi0jCi0jIFdhcm5pbmcgbWVzc2FnZXMKLSMKLQotIwotIyBFcnJvciBtZXNzYWdlcwotIwotTVNHX0VSUk9SX05PX1VERElfUkVHSVNUUllfQVZBSUxBQkxFPUlXQUIwMzYzRSBObyBVRERJIHJlZ2lzdHJ5IGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMjllODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeU1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBVRERJUmVnaXN0cnlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgVURESVJlZ2lzdHJ5TWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfUFJJVkFURV9VRERJX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfUFJJVkFURV9VRERJX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFVQUl9ERVBMT1lfUFJJVkFURV9VRERJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFVQUl9VUERBVEVfUFJJVkFURV9VRERJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFVQUl9SRU1PVkVfUFJJVkFURV9VRERJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1BSSVZBVEVfVURESV9SRUdJU1RSWV9UWVBFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fREVQTE9ZX1VERElfUkVHSVNUUlk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1VQREFURV9VRERJX1JFR0lTVFJZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9SRU1PVkVfVURESV9SRUdJU1RSWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfTk9fVURESV9SRUdJU1RSWV9BVkFJTEFCTEU7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBVRERJUmVnaXN0cnlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9wbHVnaW4vV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3BsdWdpbi9XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODdhMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3BsdWdpbi9XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgVURESSBSZWdpc3RyeSBwbHVnaW4uCi0qIDxwPgotKiBUaGUgV2ViIFNlcnZpY2VzIFVEREkgUmVnaXN0cnkgcGx1Z2luJ3MgaXMgdG8gYWRkIHRoZQotKiBvcHRpb24gdG8gY3JlYXRlIGEgdW5pdCB0ZXN0IFVEREkgcmVnaXN0cnkgCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkiOwotCi0gIC8qKgotICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbiBpbnN0YW5jZV87Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4gKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2VfID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICogKFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Iik7Ci0gICogQHJldHVybiBUaGUgV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0gICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMIGluc3RhbGxVUkwgPSBpbnN0YW5jZV8uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKTsKLSAgICAgIFVSTCBpbWFnZVVSTCA9IG5ldyBVUkwoaW5zdGFsbFVSTCxuYW1lKTsKLSAgICAgIHJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotICAqIHBsdWdpbi5wcm9wZXJ0aWVzLgotICAqIEByZXR1cm4gVGhlIFN0cmluZyBtZXNzYWdlLgotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIGtleSApCi0gIHsKLSAgICByZXR1cm4gUGxhdGZvcm0uZ2V0UmVzb3VyY2VTdHJpbmcoaW5zdGFuY2VfLmdldEJ1bmRsZSgpLGtleSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotICAqIHBsdWdpbi5wcm9wZXJ0aWVzLiBTdWJzdGl0dXRpb24gc2VxdWVuY2VzIGluIHRoZSBtZXNzYWdlIHN0cmluZwotICAqIGFyZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3Vic3RpdHV0aW9uIG9iamVjdHMgKHdoaWNoCi0gICogYXJlIG1vc3QgZnJlcXVlbnRseSBzdHJpbmdzKS4gU2VlIHRoZSBKREsncwotICAqIHtAbGluayBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdH0KLSAgKiBjbGFzcyBmb3IgZnVydGhlciBkZXRhaWxzIG9uIHN1YnN0aXR1dGlvbi4KLSAgKiBAcmV0dXJuIFRoZSBTdHJpbmcgbWVzc2FnZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MgKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldE1lc3NhZ2Uoa2V5KSxhcmdzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM0Zjk0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0vKgotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5FbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uTWVzc2FnZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TaW1wbGVTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LnBsdWdpbi5XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luOwotKi8KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgYnl0ZSBvcGVyYXRpb25UeXBlOwotICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHJlZ2lzdHJ5VHlwZTsKLSAgCi0gIC8qCi0gIHB1YmxpYyBTdGF0dXMgZXhlY3V0ZShFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgICBNZXNzYWdlVXRpbHMgbXNnVXRpbHMgPSBuZXcgTWVzc2FnZVV0aWxzKFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uSUQgKyAiLnBsdWdpbiIsIHRoaXMpOwotICAJaWYgKHJlZ2lzdHJ5VHlwZSAhPSBudWxsKQotICAJewotICAJICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpCi0gIAkgIHsKLSAgCSAgCWNhc2UgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfREVQTE9ZOgotICAJICAgICAgcmV0dXJuIHJlZ2lzdHJ5VHlwZS5kZXBsb3koZW52KTsKLSAgCSAgCWNhc2UgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfVVBEQVRFOgotICAJICAJICByZXR1cm4gcmVnaXN0cnlUeXBlLnVwZGF0ZShlbnYpOwotICAJICAJY2FzZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9SRU1PVkU6Ci0gIAkgIAkgIHJldHVybiByZWdpc3RyeVR5cGUucmVtb3ZlKGVudik7Ci0gIAkgIAlkZWZhdWx0OgotICAJICB9Ci0gIAl9Ci0gIAlyZXR1cm4gbmV3IFNpbXBsZVN0YXR1cygiIik7Ci0gIH0KLSAgKi8KLQotICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZ2V0UmVnaXN0cnlUeXBlKCkKLSAgewotICAgIHJldHVybiBnZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSgpOwotICB9Ci0gIAotICBwdWJsaWMgYnl0ZSBnZXRPcGVyYXRpb25UeXBlKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25UeXBlOwotICB9Ci0gIAotICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKQotICB7Ci0gIAlyZXR1cm4gcmVnaXN0cnlUeXBlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVnaXN0cnlUeXBlKFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHJlZ1R5cGUpCi0gIHsKLSAgCXNldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKHJlZ1R5cGUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRPcGVyYXRpb25UeXBlKGJ5dGUgdHlwZSkKLSAgewotICAgIG9wZXJhdGlvblR5cGUgPSB0eXBlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZShQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSByZWdUeXBlKQotICB7Ci0gIAlyZWdpc3RyeVR5cGUgPSByZWdUeXBlOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmZhZmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkFic3RyYWN0Q29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudAotewotICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHJlZ2lzdHJ5VHlwZTsKLSAgcHJpdmF0ZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0gIHByaXZhdGUgQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnk7Ci0gIHByaXZhdGUgV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnk7Ci0gIAotICBwdWJsaWMgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQoKQotICB7Ci0gIAlzdXBlcihudWxsLCAiIik7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgewotICAJaWYgKHJlZ2lzdHJ5VHlwZSAhPSBudWxsKQotICAJewotICAgICAgcmVnaXN0cnlUeXBlLnJlZ2lzdGVyQ2FuRmluaXNoKGNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgICAgIHJlZ2lzdHJ5VHlwZS5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgICAgIHJlZ2lzdHJ5VHlwZS5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHdpZGdldFJlZ2lzdHJ5KTsKLSAgICAgIHJldHVybiByZWdpc3RyeVR5cGUuY3JlYXRlKCkuY3JlYXRlKCk7Ci0gIAl9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudChDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgCXJldHVybiBudWxsOwotICB9Ci0gIAotICAvKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgCWRhdGFNYXBwaW5nUmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jYW5GaW5pc2hSZWdpc3RyeSA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgIHRoaXMud2lkZ2V0UmVnaXN0cnkgPSB3aWRnZXRSZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgICogQWxsIHdpemFyZCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAJUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgPSBuZXcgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQoKTsKLSAgCWZyYWdtZW50LnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFNYXBwaW5nUmVnaXN0cnkpOwotICAJZnJhZ21lbnQucmVnaXN0ZXJDYW5GaW5pc2goY2FuRmluaXNoUmVnaXN0cnkpOwotICAJZnJhZ21lbnQucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh3aWRnZXRSZWdpc3RyeSk7Ci0gIAlmcmFnbWVudC5zZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZShyZWdpc3RyeVR5cGUpOwotICAJcmV0dXJuIGZyYWdtZW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZShQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSByZWdpc3RyeVR5cGUpCi0gIHsKLSAgCXRoaXMucmVnaXN0cnlUeXBlID0gcmVnaXN0cnlUeXBlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhM2Q2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkucGx1Z2luLldlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi0vKioKLSogVGhpcyBVRERJIGNvbmZpZ3VyYXRpb24gcGFnZSBwcm9tcHRzIHRoZSB1c2VyCi0qIGZvciB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoZQotKiB1bml0IHRlc3QgVURESSByZWdpc3RyeS4KLSovCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcjsKLQotICBwcml2YXRlIEJ1dHRvbiBkZXBsb3lSYWRpb187Ci0gIHByaXZhdGUgTGFiZWwgdHlwZXNMYWJlbF87Ci0gIHByaXZhdGUgQ29tYm8gdHlwZXNDb21ib187Ci0gIHByaXZhdGUgQnV0dG9uIHVwZGF0ZVJhZGlvXzsKLSAgcHJpdmF0ZSBCdXR0b24gcmVtb3ZlUmFkaW9fOwotICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW10gdHlwZXNfOwotICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGluc3RhbGxlZFR5cGVfOwotCi0gIC8vIEluZm9wb3AKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFID0gV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5JRCArICIucHVwcjAwMDEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BVUFJfUFJJVkFURV9VRERJX1RZUEUgPSBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLklEICsgIi5wdXByMDAwMiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFVQUl9ERVBMT1lfUFJJVkFURV9VRERJID0gV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5JRCArICIucHVwcjAwMDMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BVUFJfVVBEQVRFX1BSSVZBVEVfVURESSA9IFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uSUQgKyAiLnB1cHIwMDA1IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QVVBSX1JFTU9WRV9QUklWQVRFX1VEREkgPSBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLklEICsgIi5wdXByMDAwNCI7Ci0KLSAgcHVibGljIFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0KCkKLSAgewotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgCXRoaXMuc3RhdHVzTGlzdGVuZXIgPSBzdGF0dXNMaXN0ZW5lcjsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFKTsKLQotICAgIEdyaWRMYXlvdXQgZ2w7Ci0gICAgR3JpZERhdGEgZ2Q7Ci0gICAgCi0gICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgCWhhbmRsZVdpZGdldEV2ZW50KGV2ZW50KTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotICAgIAotICAgIGRlcGxveVJhZGlvXyA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuUkFESU8pOwotICAgIGRlcGxveVJhZGlvXy5zZXRUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLkJVVFRPTl9ERVBMT1lfVURESV9SRUdJU1RSWSk7Ci0gICAgZGVwbG95UmFkaW9fLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICBkZXBsb3lSYWRpb18uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXIpOwotICAgIGRlcGxveVJhZGlvXy5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfREVQTE9ZX1BSSVZBVEVfVURESSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKGRlcGxveVJhZGlvXywgSU5GT1BPUF9QVVBSX0RFUExPWV9QUklWQVRFX1VEREkpOwotCi0gICAgQ29tcG9zaXRlIHR5cGVDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgIGdsLm1hcmdpbkhlaWdodCA9IDU7Ci0gICAgZ2wudmVydGljYWxTcGFjaW5nID0gMTU7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAyMDsKLSAgICB0eXBlQ29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICB0eXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgdHlwZXNMYWJlbF8gPSBuZXcgTGFiZWwodHlwZUNvbXBvc2l0ZSwgU1dULldSQVApOwotICAgIHR5cGVzTGFiZWxfLnNldFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuTEFCRUxfUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVTKTsKLSAgICB0eXBlc0xhYmVsXy5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1RZUEUpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh0eXBlc0xhYmVsXywgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFKTsKLQotICAgIHR5cGVzQ29tYm9fID0gbmV3IENvbWJvKHR5cGVDb21wb3NpdGUsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotICAgIHR5cGVzQ29tYm9fLnNldExheW91dERhdGEoZ2QpOwotICAgIHR5cGVzQ29tYm9fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKLSAgICB0eXBlc0NvbWJvXy5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1RZUEUpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh0eXBlc0NvbWJvXywgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFKTsKLQotICAgIHVwZGF0ZVJhZGlvXyA9IG5ldyBCdXR0b24ocGFyZW50LFNXVC5SQURJTyk7Ci0gICAgdXBkYXRlUmFkaW9fLnNldFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuQlVUVE9OX1VQREFURV9VRERJX1JFR0lTVFJZKTsKLSAgICB1cGRhdGVSYWRpb18uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB1cGRhdGVSYWRpb18uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbixsaXN0ZW5lcik7Ci0gICAgdXBkYXRlUmFkaW9fLnNldFRvb2xUaXBUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLlRPT0xUSVBfUFVQUl9VUERBVEVfUFJJVkFURV9VRERJKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodXBkYXRlUmFkaW9fLCBJTkZPUE9QX1BVUFJfVVBEQVRFX1BSSVZBVEVfVURESSk7Ci0KLSAgICByZW1vdmVSYWRpb18gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlJBRElPKTsKLSAgICByZW1vdmVSYWRpb18uc2V0VGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5CVVRUT05fUkVNT1ZFX1VERElfUkVHSVNUUlkpOwotICAgIHJlbW92ZVJhZGlvXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHJlbW92ZVJhZGlvXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7Ci0gICAgcmVtb3ZlUmFkaW9fLnNldFRvb2xUaXBUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLlRPT0xUSVBfUFVQUl9SRU1PVkVfUFJJVkFURV9VRERJKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAocmVtb3ZlUmFkaW9fLCBJTkZPUE9QX1BVUFJfUkVNT1ZFX1BSSVZBVEVfVURESSk7ICAgICAgICAgICAgICAgIAotCi0gICAgbG9hZFR5cGVzKCk7Ci0gICAgaW5pdCgpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGxvYWRUeXBlcygpCi0gIHsKLSAgICB0eXBlc18gPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0VHlwZXMoKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBpbml0KCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNfLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh0eXBlc19baV0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHlwZXNDb21ib18uYWRkKHR5cGVzX1tpXS5nZXROYW1lKCkpOwotICAgICAgICBpZiAodHlwZXNfW2ldLmlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpKQotICAgICAgICAgIGluc3RhbGxlZFR5cGVfID0gdHlwZXNfW2ldOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHlwZXNDb21ib18uZ2V0SXRlbUNvdW50KCkgPiAwKQotICAgICAgdHlwZXNDb21ib18uc2V0VGV4dCh0eXBlc0NvbWJvXy5nZXRJdGVtKDApKTsKLSAgICBpZiAoaW5zdGFsbGVkVHlwZV8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cGRhdGVSYWRpb18uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgIHJlbW92ZVJhZGlvXy5zZXRFbmFibGVkKHRydWUpOyAgICAgICAgICAgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHVwZGF0ZVJhZGlvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgIHJlbW92ZVJhZGlvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlV2lkZ2V0RXZlbnQoRXZlbnQgZXZlbnQpCi0gIHsKLSAgICBpZiAoZXZlbnQud2lkZ2V0ID09IHJlbW92ZVJhZGlvXyB8fCBldmVudC53aWRnZXQgPT0gdXBkYXRlUmFkaW9fKQotICAgIHsKLSAgICAgIGJvb2xlYW4gaXNVcGRhdGVPclJlbW92ZVNlbGVjdGVkID0gKChCdXR0b24pZXZlbnQud2lkZ2V0KS5nZXRTZWxlY3Rpb24oKTsKLSAgICAgIHR5cGVzTGFiZWxfLnNldEVuYWJsZWQoIWlzVXBkYXRlT3JSZW1vdmVTZWxlY3RlZCk7Ci0gICAgICB0eXBlc0NvbWJvXy5zZXRFbmFibGVkKCFpc1VwZGF0ZU9yUmVtb3ZlU2VsZWN0ZWQpOwotICAgIH0KLSAgICBlbHNlIGlmIChldmVudC53aWRnZXQgPT0gZGVwbG95UmFkaW9fKQotICAgIHsKLSAgICAgIGJvb2xlYW4gaXNEZXBsb3lTZWxlY3RlZCA9ICgoQnV0dG9uKWV2ZW50LndpZGdldCkuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICB0eXBlc0xhYmVsXy5zZXRFbmFibGVkKGlzRGVwbG95U2VsZWN0ZWQpOwotICAgICAgdHlwZXNDb21ib18uc2V0RW5hYmxlZChpc0RlcGxveVNlbGVjdGVkKTsKLSAgICB9Ci0gICAgc3RhdHVzTGlzdGVuZXIuaGFuZGxlRXZlbnQoZXZlbnQpOwotICB9Ci0gIAotICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKQotICB7Ci0gIAlpZiAoZGVwbG95UmFkaW9fLmdldFNlbGVjdGlvbigpKQotICAJewotICAJICBTdHJpbmcgc2VsZWN0ZWRSZWdpc3RyeU5hbWUgPSB0eXBlc0NvbWJvXy5nZXRUZXh0KCk7Ci0gIAkgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNfLmxlbmd0aDsgaSsrKQotICAgICAgICBpZiAoc2VsZWN0ZWRSZWdpc3RyeU5hbWUuZXF1YWxzKHR5cGVzX1tpXS5nZXROYW1lKCkpKQotICAJICAJICByZXR1cm4gdHlwZXNfW2ldOwotICAgICAgcmV0dXJuIG51bGw7Ci0gIAl9Ci0gIAllbHNlCi0gIAkgIHJldHVybiBpbnN0YWxsZWRUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIGJ5dGUgZ2V0T3BlcmF0aW9uVHlwZSgpCi0gIHsKLSAgCWlmIChkZXBsb3lSYWRpb18uZ2V0U2VsZWN0aW9uKCkpCi0gIAkgIHJldHVybiBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9ERVBMT1k7Ci0gIAllbHNlIGlmICh1cGRhdGVSYWRpb18uZ2V0U2VsZWN0aW9uKCkpCi0gICAgICByZXR1cm4gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfVVBEQVRFOwotICAJZWxzZSBpZiAocmVtb3ZlUmFkaW9fLmdldFNlbGVjdGlvbigpKQotICAgICAgcmV0dXJuIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX1JFTU9WRTsKLSAgCWVsc2UKLSAgCSAgcmV0dXJuIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX0RFUExPWTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBwcml2YXRlVURESVJlZ2lzdHJ5VHlwZSA9IGdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCk7Ci0gICAgaWYgKHByaXZhdGVVRERJUmVnaXN0cnlUeXBlICE9IG51bGwpCi0gICAgICByZXR1cm4gcHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuZ2V0T3BlcmF0aW9uU3RhdHVzKGdldE9wZXJhdGlvblR5cGUoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBVRERJUmVnaXN0cnlNZXNzYWdlcy5NU0dfRVJST1JfTk9fVURESV9SRUdJU1RSWV9BVkFJTEFCTEUgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhlYWE5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gaW1wbGVtZW50cyBDb25kaXRpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGNvbmRpdGlvbjsKLQotICBwdWJsaWMgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kKCkKLSAgewotICAgIGNvbmRpdGlvbiA9IHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgY29uZGl0aW9uID0gIWNvbmRpdGlvbjsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgdW5kbyggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBjb25kaXRpb24gPSAhY29uZGl0aW9uOwotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gY29uZGl0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9iaW5kaW5nL1ByaXZhdGVVRERJV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvYmluZGluZy9Qcml2YXRlVURESVdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0NGE0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9iaW5kaW5nL1ByaXZhdGVVRERJV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5TWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLlByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLlByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVdpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwcml2YXRlIENhbkZpbmlzaFJlZ2lzdHJ5ICAgY2FuRmluaXNoUmVnaXN0cnk7Ci0gIHByaXZhdGUgV2lkZ2V0UmVnaXN0cnkgICAgICB3aWRnZXRSZWdpc3RyeTsKLSAgcHJpdmF0ZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0gIHByaXZhdGUgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQgcHJpdmF0ZVVERElTZWxGcmFnbWVudDsKLSAgcHJpdmF0ZSBQcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQgY29uZGl0aW9uQ29tbWFuZDsKLSAgCi0gIHB1YmxpYyBQcml2YXRlVURESVdpZGdldEJpbmRpbmcoKQotICB7Ci0gICAgcHJpdmF0ZVVERElTZWxGcmFnbWVudCA9IG5ldyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudCgpOwotICAgIGNvbmRpdGlvbkNvbW1hbmQgPSBuZXcgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgewotICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgewotICAgICAgICBTZXF1ZW5jZUZyYWdtZW50IHJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoY29uZGl0aW9uQ29tbWFuZCwgIiIpKTsKLSAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCJQcml2YXRlVURESVNlbGVjdGlvbldpZGdldCIpKTsKLSAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KGNvbmRpdGlvbkNvbW1hbmQsICIiKSk7Ci0gICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kKCksICIiKSk7Ci0gICAgICAgIHJvb3QuYWRkKHByaXZhdGVVRERJU2VsRnJhZ21lbnQpOwotICAgICAgICByZXR1cm4gcm9vdDsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5ID0gY2FuRmluaXNoUmVnaXN0cnk7Ci0gICAgcHJpdmF0ZVVERElTZWxGcmFnbWVudC5yZWdpc3RlckNhbkZpbmlzaCh0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgICAKLSAgICBjYW5GaW5pc2hSZWdpc3RyeS5hZGRDb25kaXRpb24oY29uZGl0aW9uQ29tbWFuZCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5ID0gZGF0YVJlZ2lzdHJ5OwotICAgIHByaXZhdGVVRERJU2VsRnJhZ21lbnQucmVnaXN0ZXJEYXRhTWFwcGluZ3MoZGF0YU1hcHBpbmdSZWdpc3RyeSk7Ci0gICAgCi0gICAgLy8gUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kCi0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiLCBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5jbGFzcywgIk9wZXJhdGlvblR5cGUiLCBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiLCBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudC5jbGFzcyk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLndpZGdldFJlZ2lzdHJ5ID0gd2lkZ2V0UmVnaXN0cnk7Ci0gICAgcHJpdmF0ZVVERElTZWxGcmFnbWVudC5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHRoaXMud2lkZ2V0UmVnaXN0cnkpOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJQcml2YXRlVURESVNlbGVjdGlvbldpZGdldCIsIAotICAgICAgVURESVJlZ2lzdHJ5TWVzc2FnZXMuUEFHRV9USVRMRV9QUklWQVRFX1VERElfQ09ORklHLAotICAgICAgVURESVJlZ2lzdHJ5TWVzc2FnZXMuUEFHRV9ERVNDX1BSSVZBVEVfVURESV9DT05GSUcsCi0JICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgIHsKLQkgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0JICAgIHsKLQkgICAgICByZXR1cm4gbmV3IFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0KCk7Ci0JICAgIH0KLQkgIH0KLSAgICApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NjNkNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci0KLQotcHVibGljIGludGVyZmFjZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBleHRlbmRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIC8vIG9wZXJhdGlvbiB0eXBlcwotICBwdWJsaWMgc3RhdGljIGJ5dGUgT1BfREVQTE9ZID0gMHgwOwotICBwdWJsaWMgc3RhdGljIGJ5dGUgT1BfVVBEQVRFID0gMHgxOwotICBwdWJsaWMgc3RhdGljIGJ5dGUgT1BfUkVNT1ZFID0gMHgyOwotCi0gIC8vIGdlbmVyYWwgaW5mb3JtYXRpb24KLSAgcHVibGljIFN0cmluZyBnZXRJRCgpOwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCk7Ci0gIHB1YmxpYyBJU3RhdHVzIGdldE9wZXJhdGlvblN0YXR1cyhieXRlIG9wZXJhdGlvbik7Ci0KLSAgLy8gcmVnaXN0cnkgVVJMcwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlBUEkoKTsKLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoQVBJKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEyZGJmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZy5Qcml2YXRlVURESVdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci0KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbCBpbXBsZW1lbnRzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS51ZGRpLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlCi17Ci0gICAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbCgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSB7Ci0gICAgICAgIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW10gdHlwZXMgPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0VHlwZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHR5cGVzW2ldLmlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UHJpdmF0ZVVERElSZWdpc3RyeUlucXVpcnlBUEkoKSB7Ci0gICAgICAgIFZlY3RvciBpbnF1aXJ5QVBJVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzID0gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFR5cGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0eXBlc1tpXS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gdHlwZXNbaV0uZ2V0SW5xdWlyeUFQSSgpOwotICAgICAgICAgICAgICAgIGlmIChpbnF1aXJ5QVBJICE9IG51bGwgJiYgaW5xdWlyeUFQSS5zdGFydHNXaXRoKCJodHRwIikpCi0gICAgICAgICAgICAgICAgICAgIGlucXVpcnlBUElWZWN0b3IuYWRkKGlucXVpcnlBUEkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nW10gaW5xdWlyeUFQSUFycmF5ID0gbmV3IFN0cmluZ1tpbnF1aXJ5QVBJVmVjdG9yLnNpemUoKV07Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBpbnF1aXJ5QVBJVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgaW5xdWlyeUFQSUFycmF5W2pdID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBqKys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlucXVpcnlBUElBcnJheTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVB1Ymxpc2hBUEkoKSB7Ci0gICAgICAgIFZlY3RvciBwdWJsaXNoQVBJVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzID0gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFR5cGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0eXBlc1tpXS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwdWJsaXNoQVBJID0gdHlwZXNbaV0uZ2V0UHVibGlzaEFQSSgpOwotICAgICAgICAgICAgICAgIGlmIChwdWJsaXNoQVBJICE9IG51bGwgJiYgcHVibGlzaEFQSS5zdGFydHNXaXRoKCJodHRwIikpCi0gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hBUElWZWN0b3IuYWRkKHB1Ymxpc2hBUEkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nW10gcHVibGlzaEFQSUFycmF5ID0gbmV3IFN0cmluZ1twdWJsaXNoQVBJVmVjdG9yLnNpemUoKV07Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBwdWJsaXNoQVBJVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgcHVibGlzaEFQSUFycmF5W2pdID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBqKys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHB1Ymxpc2hBUElBcnJheTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIENvbW1hbmRXaWRnZXRCaW5kaW5nIGdldEJpbmRpbmcoKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc1NTEwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IHsKLQotICAgIHByaXZhdGUgc3RhdGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgaW5zdGFuY2VfOwotICAgIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnRWxlbWVudHNfOwotCi0gICAgcHJpdmF0ZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCkgewotICAgIH0KLSAgCi0gICAgLyoqCi0gICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIFdlYlNlcnZpY2VDbGllbnRUeXBlUmVnaXN0cnkgb2JqZWN0LgotICAgICovCi0gICAgcHVibGljIHN0YXRpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IGdldEluc3RhbmNlKCkgewotICAgICAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLSAgICAgICAgICAgIGluc3RhbmNlXyA9IG5ldyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCk7Ci0gICAgICAgICAgICBpbnN0YW5jZV8uZ2V0Q29uZmlnRWxlbWVudHMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaW5zdGFuY2VfOwotICAgIH0KLSAgCi0gICAgcHVibGljIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGdldENvbmZpZ0VsZW1lbnRzKCkgewotICAgICAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgICAgY29uZmlnRWxlbWVudHNfID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByaXZhdGVVRERJUmVnaXN0cnlUeXBlIik7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ0VsZW1lbnRzXy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGludCB3ZWlnaHQgPSBnZXRXZWlnaHQoY29uZmlnRWxlbWVudHNfW2ldKTsKLSAgICAgICAgICBpbnQgaW5kZXggPSAtMTsKLSAgICAgICAgICBmb3IgKGludCBqID0gdi5zaXplKCktMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHdlaWdodCA+IGdldFdlaWdodCgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KXYuZ2V0KGopKSkKLSAgICAgICAgICAgICAgaW5kZXggPSBqOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICAgICAgdi5hZGQoaW5kZXgsIGNvbmZpZ0VsZW1lbnRzX1tpXSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdi5hZGQoY29uZmlnRWxlbWVudHNfW2ldKTsKLSAgICAgICAgfQotICAgICAgICB2LmNvcHlJbnRvKGNvbmZpZ0VsZW1lbnRzXyk7Ci0gICAgICAgIHJldHVybiBjb25maWdFbGVtZW50c187Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0V2VpZ2h0KElDb25maWd1cmF0aW9uRWxlbWVudCBlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChlLmdldEF0dHJpYnV0ZSgid2VpZ2h0IikpOwotICAgICAgfQotICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBnZXRDb25maWdFbGVtZW50QnlJRChTdHJpbmcgaWQpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPGNvbmZpZ0VsZW1lbnRzXy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGNvbmZpZ0VsZW1lbnRzX1tpXS5nZXRBdHRyaWJ1dGUoImlkIikuZXF1YWxzKGlkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnRWxlbWVudHNfW2ldOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIGdldFR5cGVzKCkgewotICAgICAgICBWZWN0b3IgdHlwZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnRWxlbWVudHNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIE9iamVjdCB0eXBlT2JqID0gY29uZmlnRWxlbWVudHNfW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVPYmogaW5zdGFuY2VvZiBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWRkKHR5cGVPYmopOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0KLSAgICAgICAgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVbXSB0eXBlc0FycmF5ID0gbmV3IFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW3R5cGVzLnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdHlwZXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIHR5cGVzQXJyYXlbal0gPSAoUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUpdHlwZXMuZWxlbWVudEF0KGopOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlc0FycmF5OwotICAgIH0KLQotICAgIHB1YmxpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBnZXRUeXBlQnlJRChTdHJpbmcgaWQpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIE9iamVjdCB0eXBlT2JqID0gZ2V0Q29uZmlnRWxlbWVudEJ5SUQoaWQpLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgICAgICBpZiAodHlwZU9iaiBpbnN0YW5jZW9mIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiAoUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUpdHlwZU9iajsgCi0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0U3VwcG9ydGVkU2VydmVyRmFjdG9yeUlEQnlJRChTdHJpbmcgaWQpIHsKLSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQgPSBnZXRDb25maWdFbGVtZW50QnlJRChpZCk7Ci0gICAgICAgIGlmIChjb25maWdFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgVmVjdG9yIGlkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJzZXJ2ZXJGYWN0b3J5SUQiKSwgIiwiKTsKLSAgICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgewotICAgICAgICAgICAgaWRWZWN0b3IuYWRkKHN0Lm5leHRUb2tlbigpKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmdbXSBpZHMgPSBuZXcgU3RyaW5nW2lkVmVjdG9yLnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRWZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlkc1tpXSA9IChTdHJpbmcpaWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpZHM7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxNjVlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlZmZlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzLXVpLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwMTY2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMmE1YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mzc6MDcgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjZmZWEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDo0NSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMGI1OTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMi5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuYWN0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2c7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnVkZGk7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjIwNCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZGVjMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9pY29ucy9qYXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2ljb25zL2phcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTJmNGYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2ljb25zL2phcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFkMDJhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLQotIwotIwlXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBDYXRlZ29yaWVzCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1JFU09VUkNFX01BTkFHRU1FTlQ9UmVzb3VyY2UgTWFuYWdlbWVudAotCi0jCi0jICBXUy1JIFByZWZlcmVuY2UgcGFnZXMKLSMKLSMgV1MtSSBDb21wbGlhbmNlIFBhZ2UKLSMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfV1NJPVdTLUkgQ29tcGxpYW5jZQotCi0jCi0jIFBvcHVwIGFjdGlvbiBDYXRlZ29yeQotIwotTEFCRUxfUE9QVVBfQ0FURUdPUllfV0VCX1NFUlZJQ0VTPVdlYiBTZXJ2aWNlcwotCi0jCi0jIE1lc3NhZ2VzIGZvciBwb3B1cCBhY3Rpb24gKFRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXIpCi0jCi1QT1BVUF9URVNUX1dTREw9VGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCi0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEwYzllYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0gICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1MiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyI+Ci0gICAgICA8L2NhdGVnb3J5PgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotICAgICAgCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfUkVTT1VSQ0VfTUFOQUdFTUVOVCIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJvcGVydHlQYWdlcyI+Ci0KLSAgICAgIAotCi0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuIgotICAgICAgICAgICAgYWRhcHRhYmxlPSJ0cnVlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5lamIucG9wdXBNZW51Ij4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iJUxBQkVMX1BPUFVQX0NBVEVHT1JZX1dFQl9TRVJWSUNFUyIKLSAgICAgICAgICAgICAgIHBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkuZWpiLnBvcHVwTWVudSI+Ci0gICAgICAgICAgICA8c2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICBuYW1lPSJwb3B1cEFjdGlvbnMiPgotICAgICAgICAgICAgPC9zZXBhcmF0b3I+Ci0gICAgICAgICA8L21lbnU+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5TZXNzaW9uQmVhbiIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkuZWpiMy5wb3B1cE1lbnUiPgotICAgICAgICAgPG1lbnUKLSAgICAgICAgICAgICAgIGxhYmVsPSIlTEFCRUxfUE9QVVBfQ0FURUdPUllfV0VCX1NFUlZJQ0VTIgotICAgICAgICAgICAgICAgcGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5lamIzLnBvcHVwTWVudSI+Ci0gICAgICAgICAgICA8c2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICBuYW1lPSJwb3B1cEFjdGlvbnMiPgotICAgICAgICAgICAgPC9zZXBhcmF0b3I+Ci0gICAgICAgICA8L21lbnU+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuYWN0aW9uLldTRExGaWxlTWVudSIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX1RFU1RfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucG9wdXAuUG9wdXBUZXN0U2VydmljZSIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBvcHVwLlBvcHVwVGVzdFNlcnZpY2UiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9XU1VJUGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MTFmMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9XU1VJUGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotIyAyMDA2MDMyOSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA2MDMyOSAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA2MDMzMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA4MDMyNCAgIDIyMDk4MyB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotIyAyMDA4MDMyNiAgIDE3MTcwNSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgaW1wcm92ZSBBbnRUYXNrIGVycm9ycyByZXBvcnQKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1ZFTkRPUj1FY2xpcHNlLm9yZwotUExVR0lOX0RFU0M9XAotVGhlIFdlYiBzZXJ2aWNlcyBHVUkgcGx1Z2luIGRlbGl2ZXJzIHRoZSBncmFwaGljYWwgXAotdXNlciBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlcyBmdW5jdGlvbiBvZiB0aGUgXAotV2ViIHNlcnZpY2VzIHBsdWdpbi4KLQotUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTPVdlYiBTZXJ2aWNlcwotCi0jCi0jCVdlYiBTZXJ2aWNlcyBQcmVmZXJhbmNlIFBhZ2VzCi0jCi0jIENhdGVnb3JpZXMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfUkVTT1VSQ0VfTUFOQUdFTUVOVD1SZXNvdXJjZSBNYW5hZ2VtZW50Ci1QUkVGRVJFTkNFX0NBVEVHT1JZX0NPREVfR0VORVJBVElPTj1Db2RlIEdlbmVyYXRpb24KLVBSRUZFUkVOQ0VfQ0FURUdPUllfU0NFTkFSSU9fREVGQVVMVFM9U2NlbmFyaW8gRGVmYXVsdHMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfUFJPSkVDVF9UT1BPTE9HWT1Qcm9qZWN0IFRvcG9sb2d5Ci1QUkVGRVJFTkNFX0NBVEVHT1JZX0RSSVZFUl9KQVJTPUpEQkMgZHJpdmVycwotCi0jCi0jU2NlbmFyaW8gRGVmYXVsdHMKLUJVVFRPTl9MQVVOQ0hfU0FNUExFPSZMYXVuY2ggdGhlIHNhbXBsZSB3aGVuIGdlbmVyYXRlZAotTEFCRUxfTU9WRV9VUD0mVXAKLUxBQkVMX01PVkVfRE9XTj0mRG93bgotTEFCRUxfTU9WRV9VUF8yPVUmcAotTEFCRUxfTU9WRV9ET1dOXzI9RG93Jm4KLQotIwotIyBQcmVmZXJlbmNlcyBUb29sdGlwcwotIwotCi0jU2NlbmFyaW8gRGVmYXVsdHMKLVRPT0xUSVBfUFBTRF9QQUdFPVNldCB0aGUgZGVmYXVsdHMgZm9yIHRoZSBXZWIgc2VydmljZSBzY2VuYXJpb3MuCi1UT09MVElQX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRT1MYXVuY2ggdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiBhZnRlciBnZW5lcmF0aW9uLgotVE9PTFRJUF9TRVJWSUNFX1RZUEVfVEFCTEVfVklFV0VSPVByZWZlcnJlZCBvcmRlciBvZiB0aGUgbGlzdCBvZiBzZXJ2aWNlIHByb2plY3QgdHlwZXMKLVRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSPVByZWZlcnJlZCBvcmRlciBvZiB0aGUgbGlzdCBvZiBjbGllbnQgcHJvamVjdCB0eXBlcwotVE9PTFRJUF9NT1ZFX1VQPU1vdmUgdGhlIHNlbGVjdGVkIHByb2plY3QgdHlwZSB1cCB0aGUgbGlzdAotVE9PTFRJUF9NT1ZFX0RPV049TW92ZSB0aGUgc2VsZWN0ZWQgcHJvamVjdCB0eXBlIGRvd24gdGhlIGxpc3QKLQotIwotIyBSZXNvdXJjZSBNYW5hZ21lbnQKLVRPT0xUSVBfUFBSTV9QQUdFPVNldCBwcmVmZXJlbmNlcyB0aGF0IGNvbnRyb2wgcmVzb3VyY2VzIHVzZWQvZ2VuZXJhdGVkIGJ5IHRoZSBXZWIgc2VydmljZS4KLVRPT0xUSVBfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVM9T3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZy4KLVRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUz1DcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeS4KLVRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQ9Q2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgd2FybmluZy4KLVRPT0xUSVBfUFBSTV9DSEVDS0JPWF9TS0VMRVRPTl9NRVJHRT1FbmFibGUgbWVyZ2luZyBvZiBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZS4KLUJVVFRPTl9DUkVBVEVfRk9MREVSUz0mQ3JlYXRlIGZvbGRlcnMgd2hlbiBuZWNlc3NhcnkKLUJVVFRPTl9PVkVSV1JJVEVfRklMRVM9Jk92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHdhcm5pbmcKLUJVVFRPTl9DSEVDS09VVF9GSUxFUz1DJmhlY2sgb3V0IGZpbGVzIHdpdGhvdXQgd2FybmluZwotQlVUVE9OX1NLRUxFVE9OX01FUkdFPSZNZXJnZSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZQotCi0jCi0jIEdlbmVyYWwgbWVzc2FnZXMuCi0jCi1JU1RBVFVTX1dJVEhPVVRfRVhDRVBUSU9OPXswfQotSVNUQVRVU19XSVRIX0VYQ0VQVElPTj17MH1cbkV4Y2VwdGlvbjogezF9Ci1NU0dfSU5GT19TQVZFRF9TVEFUVVM9SVdBQjAyOTdJIFByZXNzIHRoZSBEZXRhaWxzIGJ1dHRvbiB0byBzZWUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcy4KLU1TR19TRUVfRVJST1JfTE9HPVNlZSB0aGUgUGxhdGZvcm0ncyBlcnJvciBsb2cgZm9yIGRldGFpbAotCi0jCi0jIFR5cGVTZWxlY3Rpb25EaWFsb2cKLSMKLURJQUxPR19USVRMRV9DTEFTU19CUk9XU0U9QnJvd3NlIENsYXNzZXMKLUxBQkVMX0NMQVNTX0JST1dTRT1DbGFzcyBuYW1lOiAoPyA9IGFueSBjaGFyYWN0ZXIsICogPSBhbnkgc3RyaW5nKQotRElBTE9HX1RJVExFX0lOVEVSRkFDRV9CUk9XU0U9QnJvd3NlIEludGVyZmFjZXMKLQotIwotIyBDb21tb24gd2l6YXJkIHN0cmluZ3MuCi0jCi1MQUJFTF9TQU1QTEVfVFlQRVM9SmF2YSBwcm94eSBzYW1wbGU6Ci0KLSMKLSMgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cKLSMKLURJQUxPR19USVRMRV9SRVNPVVJDRV9CUk9XU0U9QnJvd3NlIEZpbGVzCi1MQUJFTF9SRVNPVVJDRV9GSUxURVI9RmlsdGVyOgotCi0jCi0jIFRvb2x0aXBzIGZvciBkaWFsb2cuUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cKLSMgRFJFUz1EaWFsb2cvUkVTb3VyY2VzCi0jCi1UT09MVElQX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRT1UeXBlIG9mIHJlc291cmNlcyB0byBicm93c2UuCi1UT09MVElQX0RSRVNfVFJFRV9SRVNPVVJDRT1SZXNvdXJjZXMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uCi0KLSMKLSMgTWVzc2FnZXMgZm9yIHByb2plY3QgdG9wb2xvZ3kgcHJlZmVyZW5jZSBwYWdlCi0jCi1UT09MVElQX1BUUFBfUEFHRT1QcmVmZXJlbmNlIHRoYXQgY29udHJvbCB0aGUgcHJvamVjdCB0b3BvbG9neSBvZiB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnQgc2NlbmFyaW9zLgotVE9PTFRJUF9FTkFCTEVfVFdPX0VBUlM9RW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdlbmVyYXRlIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCBpbiBkaWZmZXJlbnQgRUFSIHByb2plY3RzLgotCi1MQUJFTF9FTkFCTEVfVFdPX0VBUlM9JkdlbmVyYXRlIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQgaW4gZGlmZmVyZW50IEVBUiBwcm9qZWN0cwotTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRT1DbGllbnQgcHJvamVjdCB0eXBlcwotTEFCRUxfU0VSVklDRV9UWVBFX05BTUU9U2VydmljZSBwcm9qZWN0IHR5cGVzCi0jCi0jIFJlc291cmNlIEJyb3dzZXIKLSMKLURJQUxPR19USVRMRV9SRVNPVVJDRV9CUk9XU0VSPVJlc291cmNlIGJyb3dzZXIKLVRPT0xUSVBfUkVTT1VSQ0VfVFJFRT1DaG9vc2UgYSByZXNvdXJjZS4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbk1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL1dTVUlQbHVnaW5NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmMxNTc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMyOSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjAzMjkgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwMzMxICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUxNSAgIDE0MTM5OCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwODAzMjQgICAyMjA5ODMgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqIDIwMDgwMzI2ICAgMTcxNzA1IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBpbXByb3ZlIEFudFRhc2sgZXJyb3JzIHJlcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXU1VJUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdTVUlQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX1ZFTkRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJFRkVSRU5DRV9DQVRFR09SWV9SRVNPVVJDRV9NQU5BR0VNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfQ09ERV9HRU5FUkFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfU0NFTkFSSU9fREVGQVVMVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJFRkVSRU5DRV9DQVRFR09SWV9QUk9KRUNUX1RPUE9MT0dZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfRFJJVkVSX0pBUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0xBVU5DSF9TQU1QTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTU9WRV9VUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9NT1ZFX0RPV047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTU9WRV9VUF8yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01PVkVfRE9XTl8yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBTRF9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBTRF9DSEVDS0JPWF9MQVVOQ0hfU0FNUExFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfU0VSVklDRV9UWVBFX1RBQkxFX1ZJRVdFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX01PVkVfVVA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9NT1ZFX0RPV047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX0NIRUNLQk9YX09WRVJXUklURV9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQUk1fQ0hFQ0tCT1hfQ1JFQVRFX0ZPTERFUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0NSRUFURV9GT0xERVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9PVkVSV1JJVEVfRklMRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0NIRUNLT1VUX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9TS0VMRVRPTl9NRVJHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJU1RBVFVTX1dJVEhPVVRfRVhDRVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElTVEFUVVNfV0lUSF9FWENFUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fU0FWRURfU1RBVFVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TRUVfRVJST1JfTE9HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRMRV9DTEFTU19CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xBU1NfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRMRV9JTlRFUkZBQ0VfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NBTVBMRV9UWVBFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1JFU09VUkNFX0ZJTFRFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0RSRVNfVFJFRV9SRVNPVVJDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BUUFBfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0VOQUJMRV9UV09fRUFSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FTkFCTEVfVFdPX0VBUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1JFU09VUkNFX1RSRUU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9UWVBFX05BTUU7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU1VJUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL0xhdW5jaEltcG9ydFdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vTGF1bmNoSW1wb3J0V2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmN2NkN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vTGF1bmNoSW1wb3J0V2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgbGF1bmNoZXMgdGhlIGltcG9ydCB3aXphcmQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hJbXBvcnRXaXphcmRBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIAotICAgIHsKLSAgICAgIER5bmFtaWNXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNXaXphcmQoKTsKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdpemFyZC5zZXRJbml0aWFsRGF0YSggIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydCIgKTsKLSAgICAgICAgd2l6YXJkLmluaXQoIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCksIHNlbGVjdGlvbl8gKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIAotICAJICBXaXphcmREaWFsb2cgZGlhbG9nPSBuZXcgV2l6YXJkRGlhbG9nKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKLQkgIGRpYWxvZy5zZXRQYWdlU2l6ZSggNTAwLCA0MDAgKTsKLQkgIGRpYWxvZy5jcmVhdGUoKTsKLQkgIGRpYWxvZy5vcGVuKCk7Ci0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIAotICAgIHsKLSAgICAgIGlmKCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvbl8gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3kuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3kuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkNDhiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XZWJTZXJ2aWNlRGVwbG95LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci0KLQotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRGVwbG95IHsKLQlwdWJsaWMgdm9pZCBydW4oSVJlc291cmNlIHNlbGVjdGlvbik7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vV2ViU2VydmljZURlcGxveUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vV2ViU2VydmljZURlcGxveUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDQ4OTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3lBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5hY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRGVwbG95QWN0aW9uIGV4dGVuZHMgV2luZG93QWN0aW9uRGVsZWdhdGUgewotcHVibGljIHZvaWQgcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uIGFjdGlvbikgewotCi0gICBJUHJvamVjdCBwcm9qZWN0ID0gZ2V0U2VsZWN0ZWRSZXNvdXJjZVByb2plY3QoKTsKLQotICAgU3RyaW5nIFtdIHR5cGVJZHMgPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUeXBlSWRzQnlNb2R1bGUocHJvamVjdCk7Ci0gICBPYmplY3QgdGhlQWN0aW9uID0gbnVsbDsKLQotICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLmpzdC53cy51aSIsICJ3ZWJzZXJ2aWNlZGVwbG95Iik7Ci0gICB0cnkgewotICAgCQotICAgCWlmICh0eXBlSWRzID09IG51bGwgfHwgdHlwZUlkcy5sZW5ndGggPD0gMCkKLSAgIAl7Ci0gICAJIAkvLyB0aGF0IG1lYW5zIHRoZSBtb2R1bGUgaXMgbm90IGF0dGFjaGVkIHRvIGEgc2VydmVyIHRoZW4gcGljayB0aGUgZmlyc3QgZXh0ZW5zaW9uIGZvdW5kCi0gICAJICAgIHRoZUFjdGlvbiA9IGVsZW1lbnRzWzBdLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAJfQotICAgCWVsc2UgaWYgKCB0eXBlSWRzLmxlbmd0aCA9PSAxKQotICAgCXsKLSAgIAkJLy8gdGhhdCBtZWFucyB0aGUgbW9kdWxlIGlzIGF0dGFjaGVkIHRvIG9uZSBzZXJ2ZXIgdGhlbiBmaW5kcyBpdCBpZCBhbmQgYSBtYXRjaGluIGV4dGVuc2lvbiBvciBnaXZlIGEgbWVzc2FnZQotICAgCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgCXsKLQkJICAgCVN0cmluZyBpZCA9IGVsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgiZmFjdG9yeUlkIik7Ci0gICAgCSAgIAlpZiAoIHR5cGVJZHNbMF0uZXF1YWxzKGlkKSkKLQkJICAgCXsKLQkJICAgCQl0aGVBY3Rpb24gPSBlbGVtZW50c1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotCQkgICAJCWJyZWFrOwotCQkgICAJfQotICAgCQl9Ci0gICAJCWlmICh0aGVBY3Rpb24gPT0gbnVsbCApCi0gICAJCQl7Ci0gICAJCQkJLy8gZ2l2ZSBhIG1lc3NhZ2UKLSAgIAkJCX0KLSAgIAl9Ci0gICAJZWxzZQotICAgCXsKLQkJLy8gVGhlIG1vZHVsZSBpcyBhdHRhY2hlZCB0byBtb3JlIHRoYW4gb25lIHNlcnZlciBmaW5kIHRoZSBmaXJzdCBzZXJ2ZXItZXh0ZW5zaW9uIGNvdXBsZQotCQkvLyBUQkQ6IGFkZCBhIGRpYWxvZyB0byBjaG9vc2UgdGhlIHNlcnZlciBmb3IgZGVwbG95bWVudAotCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgCXsKLQkJICAgCVN0cmluZyBpZCA9IGVsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgiZmFjdG9yeUlkIik7Ci0JCSAgIAlmb3IgKCBpbnQgaz0wOyBrPCB0eXBlSWRzLmxlbmd0aDsgaysrKQotCQkgICAJewotICAgIAkgICAJCWlmICggdHlwZUlkc1trXS5lcXVhbHMoaWQpKQotCQkgICAJCXsKLQkJICAgCQkJdGhlQWN0aW9uID0gZWxlbWVudHNbaV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLQkJICAgCQkJYnJlYWs7Ci0JCSAgIAkJfQotCQkgICAJfQotCQkgICBpZiAodGhlQWN0aW9uICE9IG51bGwpIGJyZWFrOwotICAgCQkgfQotCQlpZiAodGhlQWN0aW9uID09IG51bGwpIAotCQkJewotCQkJCS8vIGdpdmUgYSBNZXNzYWdlCi0JCQl9Ci0gICAJfQotCi0gICAgaWYgKHRoZUFjdGlvbiBpbnN0YW5jZW9mIFdlYlNlcnZpY2VEZXBsb3kpCi0gICAgICAgICAgKChXZWJTZXJ2aWNlRGVwbG95KXRoZUFjdGlvbikucnVuKHByb2plY3QpOyAgIAotICB9Ci0KLSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dpbmRvd0FjdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XaW5kb3dBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGQ1MTJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dpbmRvd0FjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXaW5kb3dBY3Rpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7Ci1wcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZlNlbGVjdGlvbjsKLQotcHVibGljIFdpbmRvd0FjdGlvbkRlbGVnYXRlKCkgewotICAgIHN1cGVyKCk7Ci0gfQotCi1wdWJsaWMgdm9pZCBkaXNwb3NlKCkgCi0gewotIH0KLQotcHVibGljIHZvaWQgaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93IHdpbmRvdykgeyB9Ci0KLXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24gYWN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLSAgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgZlNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotIH0KLQotcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCWZTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci19Ci1wdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgewotCXJldHVybiBmU2VsZWN0aW9uOwotfQotCi1wdWJsaWMgSVByb2plY3QgZ2V0U2VsZWN0ZWRSZXNvdXJjZVByb2plY3QoKSB7Ci0gSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0gSVJlc291cmNlIHJlc291cmNlXyA9IG51bGw7Ci0gICB0cnkgewotICAgCQlpZiAoZlNlbGVjdGlvbiAhPSBudWxsICYmIGZTZWxlY3Rpb24uc2l6ZSgpID09IDEpICAgIHsKLSAgICAgIAkJT2JqZWN0IG9iaiA9IGZTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIAkJaWYgKG9iaiAhPSBudWxsKSAgICB7Ci0gICAgICAJCQlpZiAoIG9iaiBpbnN0YW5jZW9mIElSZXNvdXJjZSkgCi0gICAgICAJCQkJewotICAgICAgCQkJCQlyZXNvdXJjZV8gPSAoSVJlc291cmNlKSBvYmo7Ci0gICAgICAJCQkJfQotICAgICAgCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLSAgICAgIAkJCXsKLSAgICAgICAgCQkJSUNvbXBpbGF0aW9uVW5pdCBjb21wVW5pdCA9IChJQ29tcGlsYXRpb25Vbml0KW9iajsKLSAgICAgICAgCQkJcmVzb3VyY2VfPSBjb21wVW5pdC5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLSAgICAgIAkJCX0KLQkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJSmF2YVByb2plY3QpIHsKLQkJCQkJcHJvamVjdCA9ICgoSUphdmFQcm9qZWN0KSBvYmopLmdldFByb2plY3QoKTsKLQkJCQl9Ci0KLQkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQkJCXByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoKEVPYmplY3QpIG9iaik7Ci0JCQkJfQotCi0gICAgICAJCQlpZiAoIHJlc291cmNlXyAhPSBudWxsICkKLSAgIAkJCQkJcHJvamVjdCA9IHJlc291cmNlXy5nZXRQcm9qZWN0KCk7Ci0gICAgICAgICAJCQotICAgIAkJfQotICAgCQl9Ci0gICAJfQkKLSAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgIHJldHVybiBwcm9qZWN0OwotIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRGlhbG9nUmVzb3VyY2VCcm93c2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9EaWFsb2dSZXNvdXJjZUJyb3dzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0OWRiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9EaWFsb2dSZXNvdXJjZUJyb3dzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MjMgICAxODMwNzUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5EZWNvcmF0aW5nTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbi5XZWJTZXJ2aWNlVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci0KLS8qKgotKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZGlhbG9nIGZvciBicm93c2luZyB3b3Jrc3BhY2UgcmVzb3VyY2VzLgotKi8KLXB1YmxpYyBjbGFzcyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIgZXh0ZW5kcyBEaWFsb2cKLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9SRVNPVVJDRV9UUkVFID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5EUkVTMDAwMSI7Ci0KLSAgcHJpdmF0ZSBJUmVzb3VyY2Ugcm9vdF87Ci0gIHByaXZhdGUgSUZpbHRlcltdIGZpbHRlcnNfOwotICBwcml2YXRlIGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXzsKLSAgcHJpdmF0ZSBJUmVzb3VyY2VbXSBzZWxlY3Rpb25fOwotICBwcml2YXRlIFRyZWUgcmVzb3VyY2VUcmVlXzsKLSAgcHJpdmF0ZSBUcmVlVmlld2VyIGZpbGVWaWV3ZXJfOwotICBwcml2YXRlIEhhc2hNYXAgICAgdmlzaXRlZENvbnRhaW5lcnNfOwotICBwcml2YXRlIGJvb2xlYW4gICAgZm9sZGVyc1NlbGVjdGFibGVfOwotCi0gIHB1YmxpYyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIoU2hlbGwgc2hlbGwsIElSZXNvdXJjZSByb290LCBJRmlsdGVyIGZpbHRlcikKLSAgewotICAgIHRoaXMoc2hlbGwsIHJvb3QsIG5ldyBJRmlsdGVyW117ZmlsdGVyfSwgZmFsc2UgKTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+RGlhbG9nUmVzb3VyY2VCcm93c2VyPC9jb2RlPgotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5wYXJlbnQgU2hlbGw8L2NvZGU+LgotICAqIFRoZSBkaWFsb2cgcmVuZGVycyBhbGwgcmVzb3VyY2VzIGluY2x1ZGluZyBhbmQKLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cm9vdCBJUmVzb3VyY2U8L2NvZGU+Ci0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0uCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gZmlsdGVycyBBbiBhcnJheSBvZiBqYXZhLmxhbmcuU3RyaW5nCi0gICovCi0gIHB1YmxpYyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIoU2hlbGwgc2hlbGwsIElSZXNvdXJjZSByb290LCBJRmlsdGVyW10gZmlsdGVycykKLSAgewotICAgIHRoaXMoIHNoZWxsLCByb290LCBmaWx0ZXJzLCBmYWxzZSApOwotICB9Ci0gIAotICBwdWJsaWMgRGlhbG9nUmVzb3VyY2VCcm93c2VyKFNoZWxsIHNoZWxsLCBJUmVzb3VyY2Ugcm9vdCwgSUZpbHRlcltdIGZpbHRlcnMsIGJvb2xlYW4gZm9sZGVyc1NlbGVjdGFibGUgKQotICB7Ci0gICAgc3VwZXIoc2hlbGwpOwotCi0gICAgSVJlc291cmNlIG1vZHVsZVJvb3QgPSByb290OwotICAgIGlmIChyb290IGluc3RhbmNlb2YgSVByb2plY3QpCi0gICAgewotICAgICAgSVByb2plY3QgcCA9IChJUHJvamVjdCltb2R1bGVSb290OwotICAgICAKLSAgICAgICAgbW9kdWxlUm9vdCA9IHA7Ci0gICAgCi0gICAgfQotCi0gICAgcm9vdF8gPSAobW9kdWxlUm9vdCA9PSBudWxsKSA/IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkgOiBtb2R1bGVSb290OwotICAgIGZpbHRlcnNfID0gKGZpbHRlcnMgPT0gbnVsbCkgPyBuZXcgSUZpbHRlclswXSA6IGZpbHRlcnM7Ci0gICAgdmlzaXRlZENvbnRhaW5lcnNfID0gbmV3IEhhc2hNYXAoKTsKLSAgICBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWRfID0gZmFsc2U7Ci0gICAgZm9sZGVyc1NlbGVjdGFibGVfID0gZm9sZGVyc1NlbGVjdGFibGU7Ci0gICAgc2V0U2hlbGxTdHlsZShTV1QuRElBTE9HX1RSSU0gfCBTV1QuUkVTSVpFIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKLSAgfQotCi0gIC8qKgotICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgbXVsdGlwbGUgc2VsZWN0aW9uIGluIHRoZSB0cmVlIHZpZXcuCi0gICogTXVsdGlwbGUgc2VsZWN0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICogQHBhcmFtIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZCBUcnVlIHRvIGVuYWJsZWQgb3IgZmFsc2UgdG8gZGlzYWJsZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkKGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkKQotICB7Ci0gICAgbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXyA9IG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNlbGVjdGlvbnMgbWFkZSBpbiB0aGUgZGlhbG9nIGlmIE9LIHdhcyBwcmVzc2VkLAotICAqIG9yIG51bGwgaWYgQ2FuY2VsIHdhcyBwcmVzc2VkLiBSZXR1cm5zIG51bGwgaWYgdGhlIGRpYWxvZwotICAqIGhhcyBuZXZlciBiZWVuIG9wZW5lZC4KLSAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHNlbGVjdGVkIHJlc291cmNlcywgcG9zc2libHkgZW1wdHksIHBvc3NpYmx5IG51bGwuCi0gICovCi0gIHB1YmxpYyBJUmVzb3VyY2VbXSBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgSVJlc291cmNlIGdldEZpcnN0U2VsZWN0aW9uKCkKLSAgewotICAgIGlmIChzZWxlY3Rpb25fICE9IG51bGwgJiYgc2VsZWN0aW9uXy5sZW5ndGggPiAwKQotICAgICAgcmV0dXJuIHNlbGVjdGlvbl9bMF07Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAgLyoqCi0gICogQ2FsbGVkIHdoZW4gdGhlIENhbmNlbCBidXR0b24gaXMgcHJlc3NlZC4KLSAgKiBJbnN1cmVzIHRoYXQge0BsaW5rICNnZXRSZXN1bHR9IHdpbGwgcmV0dXJuIG51bGwuCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIGNhbmNlbFByZXNzZWQoKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IG51bGw7Ci0gICAgc2V0UmV0dXJuQ29kZShEaWFsb2cuQ0FOQ0VMKTsKLSAgICBzdXBlci5jYW5jZWxQcmVzc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgT0sgYnV0dG9uIGlzIHByZXNzZWQuCi0gICogU3F1aXJyZWxzIGF3YXkgdGhlIGxpc3Qgb2YgemVybyBvciBtb3JlIHNlbGVjdGVkCi0gICogPGNvZGU+SVJlc291cmNlPC9jb2RlPnMgdG8gYmUgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRSZXN1bHR9LgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKQotICB7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmaWxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgewotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWN0dXJlZFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0gICAgICBzZWxlY3Rpb25fID0gbmV3IElSZXNvdXJjZVtzdHJ1Y3R1cmVkU2VsZWN0aW9uLnNpemUoKV07Ci0gICAgICBpbnQgaSA9IDA7Ci0gICAgICBJdGVyYXRvciBpdCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0gICAgICAgICAgc2VsZWN0aW9uX1tpKytdID0gKElSZXNvdXJjZSlvYmplY3Q7Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLk9LKTsKLSAgICBzdXBlci5va1ByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdyNjb25maWd1cmVTaGVsbH0uCi0gICogQHBhcmFtIHNoZWxsIFRoZSBzaGVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgc2hlbGwpCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX1JFU09VUkNFX0JST1dTRVIpOwotICB9Ci0KLSAgLyoqIAotICAqIENyZWF0ZXMgdGhlIGRpYWxvZyBhcmVhLgotICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb21wb3NpdGUuCi0gICogQHJldHVybiBUaGUgY29udHJvbCBhcmVhLgotICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGdkLndpZHRoSGludCA9IDQwMDsKLSAgICBnZC5oZWlnaHRIaW50ID0gMzAwOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBpZiAobXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXykKLSAgICB7Ci0gICAgICByZXNvdXJjZVRyZWVfID0gbmV3IFRyZWUoY29tcG9zaXRlLFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzb3VyY2VUcmVlXyA9IG5ldyBUcmVlKGNvbXBvc2l0ZSxTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0gICAgfQotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICByZXNvdXJjZVRyZWVfLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1JFU09VUkNFX1RSRUUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVzb3VyY2VUcmVlXywgSU5GT1BPUF9SRVNPVVJDRV9UUkVFKTsKLQotICAgIGZpbGVWaWV3ZXJfID0gbmV3IFRyZWVWaWV3ZXIocmVzb3VyY2VUcmVlXyk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBXb3JrYmVuY2hDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgRGVjb3JhdGluZ0xhYmVsUHJvdmlkZXIobmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKSwgV2ViU2VydmljZVVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGVjb3JhdG9yTWFuYWdlcigpLmdldExhYmVsRGVjb3JhdG9yKCkpKTsKLSAgICBmaWxlVmlld2VyXy5hZGRGaWx0ZXIoCi0gICAgICBuZXcgVmlld2VyRmlsdGVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRPYmplY3QsIE9iamVjdCBvYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXNWYWxpZFJlc291cmNlKCAoSVJlc291cmNlKW9iamVjdCApOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIAotICAgIGlmKCAhZm9sZGVyc1NlbGVjdGFibGVfICkKLSAgICB7Ci0gICAgICBmaWxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdGlvbkNoYW5nZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0gICAgCi0gICAgZmlsZVZpZXdlcl8uc2V0SW5wdXQocm9vdF8pOwotICAgIHJldHVybiBjb21wb3NpdGU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlZCgpCi0gIHsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiAgICAgID0gZmlsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgYm9vbGVhbiAgICB2YWxpZFNlbGVjdGlvbiA9IHRydWU7Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y1NlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0gICAgICBJdGVyYXRvciAgICAgICAgICAgICBpdGVyICAgICAgICAgICA9IHN0cnVjU2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0gICAgICAKLSAgICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBzZWxlY3RlZCBpdGVtcyBhcmUgdmFsaWQuCi0gICAgICB3aGlsZSggaXRlci5oYXNOZXh0KCkgKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXRlci5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSUZpbGUgKQotICAgICAgICB7Ci0gICAgICAgICAgdmFsaWRTZWxlY3Rpb24gPSBhY2NlcHRzRmlsZSggKElGaWxlKW9iamVjdCApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHZhbGlkU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCAhdmFsaWRTZWxlY3Rpb24gKSBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbGlkU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEJ1dHRvbiBva0J1dHRvbiA9IGdldEJ1dHRvbiggRGlhbG9nLk9LICk7Ci0gICAgb2tCdXR0b24uc2V0RW5hYmxlZCggdmFsaWRTZWxlY3Rpb24gKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGFjY2VwdHNGaWxlKCBJUmVzb3VyY2UgZmlsZSApCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsdGVyc18ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYoIGZpbHRlcnNfW2ldLmFjY2VwdHMoIGZpbGUgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNWYWxpZFJlc291cmNlKCBJUmVzb3VyY2UgcmVzb3VyY2UgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiggcmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSApCi0gICAgewotICAgICAgLy8gTG9vcCBvdmVyIGFsbCBmaWx0ZXJzLiAgSWYgb25lIGlzIGFjY2VwdGFibGUgdGhlbiB3ZSB3aWxsCi0gICAgICAvLyByZXR1cm4gdHJ1ZS4KLSAgICAgIHJlc3VsdCA9IGFjY2VwdHNGaWxlKCByZXNvdXJjZSApOwotICAgIH0KLSAgICBlbHNlIGlmKCByZXNvdXJjZSBpbnN0YW5jZW9mIElDb250YWluZXIgKQotICAgIHsKLSAgICAgIC8vIE5vdyBzZWUgaWYgdGhpcyBjb250YWluZXIgY29udGFpbnMgYXQgbGVhc3Qgb25lIHZhbGlkIGZpbGUuCi0gICAgICBCb29sZWFuIHZhbGlkQ29udGFpbmVyID0gKEJvb2xlYW4pdmlzaXRlZENvbnRhaW5lcnNfLmdldCggcmVzb3VyY2UgKTsKLSAgICAgIAotICAgICAgaWYoIHZhbGlkQ29udGFpbmVyID09IG51bGwgKQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlbid0IHNlZW4gdGhpcyBjb250YWluZXIgYmVmb3JlLgotICAgICAgICB0cnkgCi0gICAgICAgIHsKLSAgICAgICAgICBJQ29udGFpbmVyICBjb250YWluZXIgPSAoSUNvbnRhaW5lcilyZXNvdXJjZTsKLSAgICAgICAgICBJUmVzb3VyY2VbXSBtZW1iZXJzICAgPSBjb250YWluZXIubWVtYmVycygpOwotICAgICAgICAgIAotICAgICAgICAgIHZpc2l0ZWRDb250YWluZXJzXy5wdXQoIGNvbnRhaW5lciwgQm9vbGVhbi5GQUxTRSApOwotICAgICAgICAgIAotICAgICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZW1iZXJzLmxlbmd0aDsgaW5kZXgrKykgCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYoIGlzVmFsaWRSZXNvdXJjZShtZW1iZXJzW2luZGV4XSkgKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdmlzaXRlZENvbnRhaW5lcnNfLnB1dCggY29udGFpbmVyLCBCb29sZWFuLlRSVUUgKTsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IAotICAgICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKSAKLSAgICAgICAgewotICAgICAgICAgIC8vIERvIG5vdGhpbmcKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSB2YWxpZENvbnRhaW5lci5ib29sZWFuVmFsdWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9GaWxlRXh0ZW5zaW9uRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9GaWxlRXh0ZW5zaW9uRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzU1YzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRmlsZUV4dGVuc2lvbkZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGludGVyZmFjZSBmb3IgYSBjbGFzcyBvZiBvYmplY3RzIHRoYXQgZmlsdGVyCi0qIG90aGVyIG9iamVjdHMgZm9yIGluY2x1c2lvbiBvciBleGNsdXNpb24gYnkgc29tZSBjb25zdW1lci4KLSovCi1wdWJsaWMgY2xhc3MgRmlsZUV4dGVuc2lvbkZpbHRlciBpbXBsZW1lbnRzIElGaWx0ZXIKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBleHRlbnNpb25zXzsKLQotICBwdWJsaWMgRmlsZUV4dGVuc2lvbkZpbHRlcihTdHJpbmdbXSBleHRlbnNpb25zKQotICB7Ci0gICAgZXh0ZW5zaW9uc18gPSAoZXh0ZW5zaW9ucyAhPSBudWxsKSA/IGV4dGVuc2lvbnMgOiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkuZWRpdG9yLmNvbW1vbi5GaWxlRXh0ZW5zaW9uRmlsdGVyIjsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLmVkaXRvci5jb21tb24uRmlsZUV4dGVuc2lvbkZpbHRlciI7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4gVGhpcyBtZXRob2QKLSAgKiBtdXN0IHJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHtAbGluayAjc3RhdHVzT2Z9Ci0gICogcmV0dXJucyBhbiA8Y29kZT5JU3RhdHVzPC9jb2RlPiB3aXRoIGEgc2V2ZXJpdHkgb2YKLSAgKiBsZXNzIHRoYW4gPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4uCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElGaWxlKQotICAgIHsKLSAgICAgIElGaWxlIGZpbGUgPSAoSUZpbGUpb2JqZWN0OwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zXy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpICE9IG51bGwgJiYgZmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCkuZXF1YWxzKGV4dGVuc2lvbnNfW2ldKSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9JRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9JRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNWRiOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vSUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIGEgY2xhc3Mgb2Ygb2JqZWN0cyB0aGF0IGZpbHRlcgotKiBvdGhlciBvYmplY3RzIGZvciBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIGJ5IHNvbWUgY29uc3VtZXIuCi0qLwotcHVibGljIGludGVyZmFjZSBJRmlsdGVyCi17Ci0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+RmlsdGVyPC9jb2RlPgotICAqIGFjY2VwdHMgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uIFRoaXMgbWV0aG9kCi0gICogbXVzdCByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB7QGxpbmsgI3N0YXR1c09mfQotICAqIHJldHVybnMgYW4gPGNvZGU+SVN0YXR1czwvY29kZT4gd2l0aCBhIHNldmVyaXR5IG9mCi0gICogbGVzcyB0aGFuIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+RmlsdGVyPC9jb2RlPgotICAqIGFjY2VwdHMgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoT2JqZWN0IG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9VSVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9VSVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NzkzYzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vVUlVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MTcgICAxNDAwMTcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGxvbmdlciBwcm9qZWN0IG9yIHNlcnZlci9ydW50aW1lIHN0cmluZ3MgZG8gbm90IHJlc2l6ZSB3aXphcmQKLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLQotcHVibGljIGNsYXNzIFVJVXRpbHMgCi17Ci0JLyoqCi0JICogQSBkZWZhdWx0IHBhZGRpbmcgdmFsdWUgZm9yIGhvcml6b250YWxSZXNpemUoKS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUZBVUxUX1BBRERJTkcgPSAzNTsKLQkKLSAgU3RyaW5nICAgICAgIGluZm9Qb3BpZF87Ci0gIAotICBwdWJsaWMgVUlVdGlscyggU3RyaW5nIGluZm9Qb3BpZCApCi0gIHsKLSAgICBpbmZvUG9waWRfID0gaW5mb1BvcGlkOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZVJhZGlvQnV0dG9uKCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1dHRvbiggU1dULlJBRElPLCBwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCApOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZUNoZWNrYm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1dHRvbiggU1dULkNIRUNLLCBwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCApOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZVB1c2hCdXR0b24oIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCApCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlQnV0dG9uKCBTV1QuTk9ORSwgcGFyZW50LCBsYWJlbE5hbWUsIHRvb2x0aXAsIGluZm9wb3AgKTsKLSAgfQotICAKLSAgcHVibGljIEJ1dHRvbiBjcmVhdGVCdXR0b24oIGludCBraW5kLCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwga2luZCApOwotICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBsYWJlbE5hbWUgOiB0b29sdGlwOwotICAgIGJ1dHRvbi5zZXRUZXh0KCBsYWJlbE5hbWUgKTsKLSAgICBidXR0b24uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggYnV0dG9uLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotICAgIAotICAgIHJldHVybiBidXR0b247Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21ibyBjcmVhdGVDb21ibyggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wLCBpbnQgc3R5bGUgKQotICB7ICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBsYWJlbE5hbWUgOiB0b29sdGlwOwotICAgIAotICAgIGlmKCBsYWJlbE5hbWUgIT0gbnVsbCApCi0gICAgewotICAgICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoIHBhcmVudCwgU1dULldSQVApOwotICAgICAgbGFiZWwuc2V0VGV4dCggbGFiZWxOYW1lICk7Ci0gICAgICBsYWJlbC5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCApOwotICAgIH0KLSAgICAKLSAgICBDb21ibyBjb21ibyA9IG5ldyBDb21ibyggcGFyZW50LCBzdHlsZSApOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgIAotICAgIGNvbWJvLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgY29tYm8uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggY29tYm8sIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbWJvOyAgICAgIAotICB9Ci0gIAotICBwdWJsaWMgVGV4dCBjcmVhdGVUZXh0KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AsIGludCBzdHlsZSApCi0gIHsgICAgCi0gICAgdG9vbHRpcCA9IHRvb2x0aXAgPT0gbnVsbCA/IGxhYmVsTmFtZSA6IHRvb2x0aXA7Ci0gICAgCi0gICAgaWYoIGxhYmVsTmFtZSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgICBsYWJlbC5zZXRUZXh0KCAgbGFiZWxOYW1lICApOwotICAgICAgbGFiZWwuc2V0VG9vbFRpcFRleHQoICB0b29sdGlwICk7Ci0gICAgfQotICAgIAotICAgIFRleHQgdGV4dCA9IG5ldyBUZXh0KCBwYXJlbnQsIHN0eWxlICk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICAKLSAgICB0ZXh0LnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgdGV4dC5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCk7Ci0gICAgCi0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHRleHQsIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wICk7Ci0gICAgCi0gICAgcmV0dXJuIHRleHQ7ICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29tcG9zaXRlKCBDb21wb3NpdGUgcGFyZW50LCBpbnQgY29sdW1ucyApCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIGNvbHVtbnMsIC0xLCAtMSApOwotICB9Ci0gIAotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbXBvc2l0ZSggQ29tcG9zaXRlIHBhcmVudCwgaW50IGNvbHVtbnMsIGludCBtYXJnaW5IZWlnaHQsIGludCBtYXJnaW5XaWR0aCApCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSggcGFyZW50LCBTV1QuTk9ORSApOwotICAgIAotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCAgID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBncmlkbGF5b3V0Lm51bUNvbHVtbnMgICA9IGNvbHVtbnM7Ci0gIAotICAgIGlmKCBtYXJnaW5IZWlnaHQgPj0gMCApIGdyaWRsYXlvdXQubWFyZ2luSGVpZ2h0ID0gbWFyZ2luSGVpZ2h0OwotICAgIGlmKCBtYXJnaW5XaWR0aCA+PSAwICkgIGdyaWRsYXlvdXQubWFyZ2luV2lkdGggID0gbWFyZ2luV2lkdGg7Ci0gICAgCi0gICAgY29tcG9zaXRlLnNldExheW91dCggZ3JpZGxheW91dCApOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgICAKLSAgfQotICBwdWJsaWMgR3JvdXAgY3JlYXRlR3JvdXAoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBncm91cE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCApCi0gIHsKLSAgCXJldHVybiBjcmVhdGVHcm91cCggcGFyZW50LCBncm91cE5hbWUsIHRvb2x0aXAsIGluZm9wb3AsIDEsIC0xLCAtMSApOwotICB9Ci0gIAotICBwdWJsaWMgR3JvdXAgY3JlYXRlR3JvdXAoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBncm91cE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IGNvbHVtbnMsIGludCBtYXJnaW5IZWlnaHQsIGludCBtYXJnaW5XaWR0aCApCi0gIHsKLSAgICBHcm91cCAgICAgIG5ld0dyb3VwICAgID0gbmV3IEdyb3VwKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgR3JpZERhdGEgICBncmlkZGF0YSAgICA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCAgPSBuZXcgR3JpZExheW91dCgpOwotICAgIAotICAgIGdyaWRsYXlvdXQubnVtQ29sdW1ucyAgPSBjb2x1bW5zOwotICAKLSAgICBpZiggbWFyZ2luSGVpZ2h0ID49IDAgKSBncmlkbGF5b3V0Lm1hcmdpbkhlaWdodCA9IG1hcmdpbkhlaWdodDsKLSAgICBpZiggbWFyZ2luV2lkdGggPj0gMCApICBncmlkbGF5b3V0Lm1hcmdpbldpZHRoICA9IG1hcmdpbldpZHRoOwotICAgICAgICAKLSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gZ3JvdXBOYW1lIDogdG9vbHRpcDsKLSAgICBuZXdHcm91cC5zZXRMYXlvdXQoIGdyaWRsYXlvdXQgKTsKLSAgICBuZXdHcm91cC5zZXRUZXh0KCAgZ3JvdXBOYW1lICApOwotICAgIG5ld0dyb3VwLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgbmV3R3JvdXAuc2V0VG9vbFRpcFRleHQoICB0b29sdGlwICk7Ci0gICAgCi0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobmV3R3JvdXAsIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wKTsKLSAgICAKLSAgICByZXR1cm4gbmV3R3JvdXA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBUcmVlIGNyZWF0ZVRyZWUoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IHN0eWxlICkKLSAgewotICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyAiIiA6IHRvb2x0aXA7Ci0gICAgCi0gICAgVHJlZSB0cmVlID0gbmV3IFRyZWUoIHBhcmVudCwgc3R5bGUgKTsKLSAgICAgCi0gICAgdHJlZS5zZXRMYXlvdXREYXRhKCBjcmVhdGVGaWxsQWxsKCkgKTsKLSAgICB0cmVlLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggdHJlZSwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3AgKTsKLSAgICAKLSAgICByZXR1cm4gdHJlZTsgICAgICAKLSAgICAKLSAgfQotICAKLSAgcHVibGljIFRhYmxlIGNyZWF0ZVRhYmxlKCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AsIGludCBzdHlsZSApCi0gIHsKLSAgICAKLSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gIiIgOiB0b29sdGlwOwotICAgIAotICAgIFRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKCBwYXJlbnQsIHN0eWxlICk7Ci0gICAgIAotICAgIC8vdGFibGUuc2V0TGF5b3V0RGF0YSggY3JlYXRlRmlsbEFsbCgpICk7Ci0gICAgdGFibGUuc2V0VG9vbFRpcFRleHQoIHRvb2x0aXApOwotICAgIAotICAgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCB0YWJsZSwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3AgKTsKLSAgICAKLSAgICByZXR1cm4gdGFibGU7ICAgICAgCi0gICAgCi0gIH0gIAotICAKLSAgcHVibGljIExhYmVsIGNyZWF0ZUhvcml6b250YWxTZXBhcmF0b3IoIENvbXBvc2l0ZSBwYXJlbnQsIGludCBzcGFjaW5nICkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBjcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSwgc3BhY2luZywgLTEgKTsKLSAgICAgCi0JTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKCBjb21wb3NpdGUsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCApOwotCQotCUdyaWREYXRhIGdyaWRkYXRhICA9IG5ldyBHcmlkRGF0YSggR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMICk7Ci0Jc2VwYXJhdG9yLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAKLQlyZXR1cm4gc2VwYXJhdG9yOwotICB9Ci0gIAotICBwdWJsaWMgR3JpZERhdGEgY3JlYXRlRmlsbEFsbCgpCi0gIHsKLQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfAotCQkJICAgICAgICAgICAgICAgICAgICAgIEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCApOwotICAgIHJldHVybiBkYXRhOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjcmVhdGVJbmZvUG9wKENvbnRyb2wgY3RybCwgU3RyaW5nIGluZm9wb3ApCi0gIHsKLQkgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBjdHJsLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotICB9Ci0gIAotICAvKioKLSAgICogUmVzaXplcyB0aGUgd2lkdGggb2YgdGhlIHRhcmdldCBjb21wb3NpdGUgc28gdGhhdCBpdCBpcyBhcyB3aWRlIGFzIHRoZQotICAgKiByZWZlcmVuY2UgY29tcG9zaXRlIHBsdXMgYSBwYWRkaW5nIHZhbHVlLiAgCi0gICAqIAotICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBjb21wb3NpdGUgdG8gcmVzaXplLgotICAgKiBAcGFyYW0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgY29tcG9zaXRlCi0gICAqIEBwYXJhbSBwYWRkaW5nIFRoZSBwYWRkaW5nIHZhbHVlCi0gICAqLwotICBwdWJsaWMgdm9pZCBob3Jpem9udGFsUmVzaXplKENvbXBvc2l0ZSB0YXJnZXQsIENvbXBvc2l0ZSByZWZlcmVuY2UsIGludCBwYWRkaW5nKSB7Ci0JCQotCQlQb2ludCBvcmlnaW5hbFNpemUgID0gdGFyZ2V0LmdldFNpemUoKTsKLQkJUG9pbnQgcmVmZXJlbmNlU2l6ZSA9IHJlZmVyZW5jZS5nZXRTaXplKCk7Ci0JCQotCQlwYWRkaW5nID0gcGFkZGluZyA+PSAwID8gcGFkZGluZyA6IERFRkFVTFRfUEFERElORzsKLQkJCi0JCWlmIChyZWZlcmVuY2VTaXplLnggKyBwYWRkaW5nID4gb3JpZ2luYWxTaXplLngpCi0JCQl0YXJnZXQuc2V0U2l6ZShyZWZlcmVuY2VTaXplLnggKyBwYWRkaW5nLCBvcmlnaW5hbFNpemUueSk7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvRGlhbG9nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL0RpYWxvZ1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NmMwOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvRGlhbG9nVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAzMjQgICAyMjA5ODMgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLklKYXZhU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLlNlYXJjaEVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQudWkuSUphdmFFbGVtZW50U2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC51aS5KYXZhVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5Db250YWluZXJTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TZWxlY3Rpb25EaWFsb2c7Ci0KLQotLyoqCi0qIENvbnRhaW5zIHV0aWxpdHkgbWV0aG9kcyBmb3IgbGF1bmNoaW5nIHZhcmlvdXMgY29tbW9uIGRpYWxvZ3MuCi0qLwotcHVibGljIGZpbmFsIGNsYXNzIERpYWxvZ1V0aWxzCi17Ci0KLSAgLyoqCi0gICogUmFpc2VzIGEgZGlhbG9nIGZvciBicm93c2luZyBjb250YWluZXJzLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIGluaXRpYWxQYXRobmFtZSBUaGUgaW5pdGlhbCBzZWxlY3Rpb24uCi0gICogQHJldHVybiBUaGUgc2VsZWN0ZWQgY29udGFpbmVyIG9yIG51bGwgaWYgdGhlIGRpYWxvZwotICAqIGlzIGNhbmNlbGxlZCwgb3IgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLCBvciB0aGUgc2VsZWN0aW9uCi0gICogaXMgbm90IGEgcHJvamVjdCBvciBhIGZvbGRlci4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlQ29udGFpbmVycyAoIFNoZWxsIHBhcmVudFNoZWxsLCBTdHJpbmcgaW5pdGlhbFBhdGhuYW1lICkKLSAgewotICAgIFN0cmluZyBzZWxlY3RlZFBhdGhuYW1lID0gbnVsbDsKLSAgICBJUGF0aCBpbml0aWFsUGF0aCA9IG5ldyBQYXRoKGluaXRpYWxQYXRobmFtZSk7Ci0gICAgSVJlc291cmNlIGluaXRpYWxSZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIoaW5pdGlhbFBhdGgpOwotICAgIGlmIChpbml0aWFsUmVzb3VyY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoaW5pdGlhbFBhdGguc2VnbWVudENvdW50KCkgPT0gMSkKLSAgICAgIHsKLSAgICAgICAgaW5pdGlhbFJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChpbml0aWFsUGF0aC5zZWdtZW50KDApKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGluaXRpYWxQYXRoLnNlZ21lbnRDb3VudCgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgaW5pdGlhbFJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0Rm9sZGVyKGluaXRpYWxQYXRoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChpbml0aWFsUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotICAgICAgewotICAgICAgICBpbml0aWFsUmVzb3VyY2UgPSBpbml0aWFsUmVzb3VyY2UuZ2V0UGFyZW50KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIENvbnRhaW5lclNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBuZXcgQ29udGFpbmVyU2VsZWN0aW9uRGlhbG9nKHBhcmVudFNoZWxsLChJQ29udGFpbmVyKWluaXRpYWxSZXNvdXJjZSx0cnVlLG51bGwpOwotICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgT2JqZWN0W10gcmVzdWx0ID0gZGlhbG9nLmdldFJlc3VsdCgpOwotICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBpZiAocmVzdWx0WzBdIGluc3RhbmNlb2YgSVBhdGgpCi0gICAgICB7Ci0gICAgICAgIElQYXRoIHBhdGggPSAoSVBhdGgpcmVzdWx0WzBdOwotICAgICAgICBzZWxlY3RlZFBhdGhuYW1lID0gcGF0aC50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc2VsZWN0ZWRQYXRobmFtZTsKLSAgfQotCi0gIC8qKgotICAqIFJhaXNlcyBhIGRpYWxvZyBmb3IgYnJvd3NpbmcgcmVzb3VyY2VzLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIHRvcFJlc291cmNlIFRoZSByZXNvdXJjZSB1bmRlciB3aGljaCB0byBicm93c2UuCi0gICogSWYgbnVsbCwgYWxsIHJlc291cmNlcyBpbiB0aGUgd29ya3NwYWNlIGFyZSBicm93c2VkLgotICAqIEBwYXJhbSBpbml0aWFsU2VsZWN0aW9uIFRoZSBpbml0aWFsIHNlbGVjdGlvbiwgb3IgbnVsbCBmb3Igbm9uZS4KLSAgKiBJZiB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gaXMgbm90IG51bGwgYW5kIGV4aXN0cyBpbiB0aGUgc2V0IG9mCi0gICogcmVzb3VyY2VzIGZvdW5kIGJ5IHRoZSBicm93c2VyLCB0aGF0IHJlc291cmNlIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQuCi0gICogQHBhcmFtIGZpbHRlciBUaGUgcmVzb3VyY2UgZmlsdGVyIG9iamVjdC4KLSAgKiBAcmV0dXJuIFRoZSBzZWxlY3RlZCByZXNvdXJjZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJUmVzb3VyY2UgYnJvd3NlUmVzb3VyY2VzICggU2hlbGwgcGFyZW50U2hlbGwsIElSZXNvdXJjZSB0b3BSZXNvdXJjZSwgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb24sIEZpbHRlciBmaWx0ZXIpCi0gIHsKLSAgICBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyByZHMgPSBuZXcgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cocGFyZW50U2hlbGwsdG9wUmVzb3VyY2UsaW5pdGlhbFNlbGVjdGlvbixmaWx0ZXIpOwotICAgIHJkcy5zZXRNdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQoZmFsc2UpOwotICAgIGlmIChyZHMub3BlbigpID09IERpYWxvZy5PSykKLSAgICB7Ci0gICAgICBJUmVzb3VyY2VbXSByZXNvdXJjZXMgPSByZHMuZ2V0UmVzdWx0KCk7Ci0gICAgICBpZiAocmVzb3VyY2VzICE9IG51bGwgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXNvdXJjZXNbMF07Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogPGI+SW1wbGVtZW50YXRpb24gcmVtYWlucyBUQkQuPC9iPjxicj4KLSAgKiBSYWlzZXMgYSBkaWFsb2cgZm9yIGJyb3dzaW5nIGNsYXNzZXMgb24gYSBwcm9qZWN0J3MgY2xhc3MgcGF0aC4KLSAgKiBAcGFyYW0gcGFyZW50U2hlbGwgVGhlIHBhcmVudCBzaGVsbCwgb3B0aW9uYWxseSBudWxsLgotICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0LgotICAqIEByZXR1cm4gVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBqYXZhIGNsYXNzLgotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBicm93c2VDbGFzc2VzICggU2hlbGwgcGFyZW50U2hlbGwsIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgcmV0dXJuIGJyb3dzZUNsYXNzZXMocGFyZW50U2hlbGwsIHByb2plY3QsIChJUnVubmFibGVDb250ZXh0KW51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlQ2xhc3NlcyAoIFNoZWxsIHBhcmVudFNoZWxsLCBJUHJvamVjdCBwcm9qZWN0LCBJV2l6YXJkQ29udGFpbmVyIGNvbnRhaW5lcikKLSAgewotICAgIHJldHVybiBicm93c2VDbGFzc2VzKHBhcmVudFNoZWxsLCBwcm9qZWN0LCAoSVJ1bm5hYmxlQ29udGV4dCljb250YWluZXIpOwotICB9Ci0KLSAgLyoqCi0gICogUmFpc2VzIGEgZGlhbG9nIGZvciBicm93c2luZyBjbGFzc2VzIG9uIGEgcHJvamVjdCdzIGNsYXNzIHBhdGguCi0gICogQHBhcmFtIHBhcmVudFNoZWxsIFRoZSBwYXJlbnQgc2hlbGwsIG9wdGlvbmFsbHkgbnVsbC4KLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdC4KLSAgKiBAcGFyYW0gY29udGFpbmVyIFRoZSBjb250YWluZXIgb2YgdGhlIGxhdW5jaGluZyB3aXphcmQuCi0gICogQHJldHVybiBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlbGVjdGVkIGphdmEgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJyb3dzZUNsYXNzZXMgKCBTaGVsbCBwYXJlbnRTaGVsbCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvamVjdCBwcm9qZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSdW5uYWJsZUNvbnRleHQgY3R4dCkgCi0gIHsKLSAgICByZXR1cm4gYnJvd3NlQ2xhc3NlcyhwYXJlbnRTaGVsbCwgbmV3IElSZXNvdXJjZVtdIHtwcm9qZWN0fSwgY3R4dCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJyb3dzZUNsYXNzZXMoU2hlbGwgcGFyZW50U2hlbGwsIElSZXNvdXJjZVtdIHJlc291cmNlcywgSVJ1bm5hYmxlQ29udGV4dCBjdHh0KQotICB7Ci0gICAgSVR5cGUgaXR5cGUgPSBicm93c2VDbGFzc2VzQXNJVHlwZShwYXJlbnRTaGVsbCwgcmVzb3VyY2VzLCBjdHh0KTsKLSAgICBpZiAoaXR5cGUgIT0gbnVsbCkKLSAgICAgIHJldHVybiBpdHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJVHlwZSBicm93c2VDbGFzc2VzQXNJVHlwZShTaGVsbCBwYXJlbnRTaGVsbCwgSVJlc291cmNlW10gcmVzb3VyY2VzLCBJUnVubmFibGVDb250ZXh0IGN0eHQpCi0gIHsKLQlWZWN0b3IgamF2YUVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzb3VyY2VzLmxlbmd0aDsgaSsrKQotCXsKLQkgIElKYXZhRWxlbWVudCBqYXZhRWxlbWVudCA9IEphdmFDb3JlLmNyZWF0ZShyZXNvdXJjZXNbaV0pOwotCSAgaWYgKGphdmFFbGVtZW50ICE9IG51bGwpCi0JICAgIGphdmFFbGVtZW50cy5hZGQoamF2YUVsZW1lbnQpOwotCX0KLQlJSmF2YUVsZW1lbnRbXSBlbGVtZW50cyA9IChJSmF2YUVsZW1lbnRbXSlqYXZhRWxlbWVudHMudG9BcnJheShuZXcgSUphdmFFbGVtZW50WzBdKTsKLQkKLSAgICBJSmF2YVNlYXJjaFNjb3BlIHNjb3BlID0gU2VhcmNoRW5naW5lLmNyZWF0ZUphdmFTZWFyY2hTY29wZShlbGVtZW50cyk7Ci0gICAgc2NvcGUuc2V0SW5jbHVkZXNDbGFzc3BhdGhzKHRydWUpOwotICAgIHNjb3BlLnNldEluY2x1ZGVzQmluYXJpZXModHJ1ZSk7Ci0KLSAgICAvL0NyZWF0aW5nIGFuZCBvcGVuaW5nIGEgVHlwZVNlbGVjdGlvbkRpYWxvZwotICAgIHRyeQotCXsKLSAgICAgIC8vIFdlIHdhbnQgdG8gc2hvdyBldmVyeSBjbGFzcyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLCBzbyB0aHJvdyBpbiB0aGlzIFN0cmluZwotICAgICAgU3RyaW5nIGZpbHRlclN0cmluZ1RvU2VsZWN0RXZlcnl0aGluZyA9ICIqICI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgU2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IEphdmFVSS5jcmVhdGVUeXBlRGlhbG9nKHBhcmVudFNoZWxsLCBjdHh0LCBzY29wZSwgSUphdmFFbGVtZW50U2VhcmNoQ29uc3RhbnRzLkNPTlNJREVSX0NMQVNTRVMsIGZhbHNlLCBmaWx0ZXJTdHJpbmdUb1NlbGVjdEV2ZXJ5dGhpbmcpOyAKLSAgICAgIGRpYWxvZy5zZXRUaXRsZShXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX0NMQVNTX0JST1dTRSk7Ci0gICAgICBkaWFsb2cuc2V0TWVzc2FnZShXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfQ0xBU1NfQlJPV1NFKTsgICAgCi0gICAgICBkaWFsb2cub3BlbigpOwotCi0gICAgICAvL0dldHRpbmcgdGhlIHJlc3VsdCBhbmQgcmV0dXJuaW5nIGl0Ci0gICAgICBPYmplY3RbXSByZXN1bHRzID0gZGlhbG9nLmdldFJlc3VsdCgpOwotICAgICAgaWYgKHJlc3VsdHMgIT0gbnVsbCAmJiByZXN1bHRzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChyZXN1bHRzWzBdIGluc3RhbmNlb2YgSVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKElUeXBlKXJlc3VsdHNbMF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpCi0JewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJhaXNlcyBhIGRpYWxvZyBmb3IgYnJvd3NpbmcgaW50ZXJmYWNlcyBvbiBhIHByb2plY3QncyBjbGFzcyBwYXRoLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QuCi0gICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIG9mIHRoZSBsYXVuY2hpbmcgd2l6YXJkLgotICAqIEByZXR1cm4gVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBqYXZhIGludGVyZmFjZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlSW50ZXJmYWNlcyggU2hlbGwgcGFyZW50U2hlbGwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvamVjdCBwcm9qZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdpemFyZENvbnRhaW5lciBjb250YWluZXIpIAotICAJCQkJCQkJCQkgICAgCi0gIHsKLSAgICBTdHJpbmcgaW50ZXJmYWNlTmFtZSA9IG51bGw7Ci0KLSAgICAvL0xpbWl0aW5nIHNlYXJjaCBzY29wZSB0byB0aGUgcHJvamVjdAotICAgIElSZXNvdXJjZVtdIHJlc291cmNlcyA9IG5ldyBJUmVzb3VyY2VbMV07Ci0gICAgcmVzb3VyY2VzWzBdPXByb2plY3Q7Ci0JSUphdmFFbGVtZW50W10gZWxlbWVudHMgPSBuZXcgSUphdmFFbGVtZW50WzFdOwotCWVsZW1lbnRzWzBdID0gSmF2YUNvcmUuY3JlYXRlKHJlc291cmNlc1swXSk7Ci0gICAgSUphdmFTZWFyY2hTY29wZSBzY29wZSA9IFNlYXJjaEVuZ2luZS5jcmVhdGVKYXZhU2VhcmNoU2NvcGUoZWxlbWVudHMpOwotICAgIHNjb3BlLnNldEluY2x1ZGVzQ2xhc3NwYXRocyh0cnVlKTsKLSAgICBzY29wZS5zZXRJbmNsdWRlc0JpbmFyaWVzKHRydWUpOwotCi0gICAgLy9DcmVhdGluZyBhbmQgb3BlbmluZyBhIFR5cGVTZWxlY3Rpb25EaWFsb2cKLSAgICB0cnkKLQl7Ci0gICAgCVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBKYXZhVUkuY3JlYXRlVHlwZURpYWxvZyhwYXJlbnRTaGVsbCwgY29udGFpbmVyLCBzY29wZSwgSUphdmFFbGVtZW50U2VhcmNoQ29uc3RhbnRzLkNPTlNJREVSX1RZUEVTLCBmYWxzZSk7Ci0gICAgCWRpYWxvZy5zZXRUaXRsZShXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX0lOVEVSRkFDRV9CUk9XU0UpOwotICAgIAlkaWFsb2cuc2V0TWVzc2FnZShXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX0lOVEVSRkFDRV9CUk9XU0UpOyAgICAKLSAgICAJZGlhbG9nLm9wZW4oKTsKLQotICAgIAkvL0dldHRpbmcgdGhlIHJlc3VsdCBhbmQgcmV0dXJuaW5nIGl0Ci0gICAgCU9iamVjdFtdIHJlc3VsdHMgPSBkaWFsb2cuZ2V0UmVzdWx0KCk7Ci0gICAgCWlmIChyZXN1bHRzICE9IG51bGwgJiYgcmVzdWx0cy5sZW5ndGggPiAwKQotICAgIAl7Ci0gICAgCQlpZiAocmVzdWx0c1swXSBpbnN0YW5jZW9mIElUeXBlKQotICAgIAkJewotICAgIAkJCUlUeXBlIHJlc3VsdEludGVyZmFjZSA9IChJVHlwZSlyZXN1bHRzWzBdOwotICAgIAkJCWludGVyZmFjZU5hbWUgPSByZXN1bHRJbnRlcmZhY2UuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpCi0JewotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW50ZXJmYWNlTmFtZTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL1Jlc291cmNlU2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2RpYWxvZy9SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGUzYmVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL1Jlc291cmNlU2VsZWN0aW9uRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmRpYWxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRlY29yYXRpbmdMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uQW55RmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hMYWJlbFByb3ZpZGVyOwotCi0KLS8qKgotKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZGlhbG9nIGZvciBicm93c2luZyB3b3Jrc3BhY2UgcmVzb3VyY2VzLgotKiBTZWUgYWxzbyB7QGxpbmsgRGlhbG9nVXRpbHMjYnJvd3NlUmVzb3VyY2VzfS4KLSovCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBEaWFsb2cgaW1wbGVtZW50cyBMaXN0ZW5lcgotewotCi0gIC8vIERpYWxvZyBjb250cm9scy4KLSAgLy8KLSAgcHJpdmF0ZSBMYWJlbCBmaWx0ZXJMYWJlbF87Ci0gIHByaXZhdGUgQ29tYm8gZmlsdGVyQ29tYm9fOwotICAvKkNPTlRFWFRfSUQgRFJFUzAwMDEgZm9yIHRoZSBSZXNvdXJjZSBUeXBlIGNvbWJvIGJveCBvZiB0aGUgUmVzb3VyY2UgU2VsZWN0aW9uIERpYWxvZyovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuRFJFUzAwMDEiOwotCi0gIHByaXZhdGUgVHJlZSByZXNvdXJjZVRyZWVfOwotICBwcml2YXRlIFRyZWVWaWV3ZXIgZmlsZVZpZXdlcl87Ci0gIC8qQ09OVEVYVF9JRCBEUkVTMDAwMiBmb3IgdGhlIFJlc291cmNlIHRyZWUgb2YgdGhlIFJlc291cmNlIFNlbGVjdGlvbiBEaWFsb2cqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GT1BPUF9EUkVTX1RSRUVfUkVTT1VSQ0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLkRSRVMwMDAyIjsKLQotICAvLwotICAvLyBFc3NlbnRpYWwgZ29vZGllcy4KLSAgLy8KLSAgcHJpdmF0ZSBJUmVzb3VyY2Ugcm9vdF87Ci0gIHByaXZhdGUgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb25fOwotICBwcml2YXRlIEZpbHRlcltdIGZpbHRlcnNfOwotICBwcml2YXRlIEZpbHRlciBjdXJyZW50RmlsdGVyXzsKLSAgcHJpdmF0ZSBJUmVzb3VyY2VbXSBzZWxlY3Rpb25fOwotICBwcml2YXRlIGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXzsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlJlc291cmNlU2VsZWN0aW9uRGlhbG9nPC9jb2RlPgotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5wYXJlbnQgU2hlbGw8L2NvZGU+LgotICAqIFRoZSBkaWFsb2cgcmVuZGVycyBhbGwgcmVzb3VyY2VzIGluY2x1ZGluZyBhbmQKLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cm9vdCBJUmVzb3VyY2U8L2NvZGU+LgotICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGx9LAotICAqIG9yIG51bGwgdG8gY3JlYXRlIGEgdG9wLWxldmVsIHNoZWxsLgotICAqIEBwYXJhbSByb290IFRoZSByb290IHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2V9LAotICAqIG9yIG51bGwgdG8gYmVnaW4gd2l0aCB0aGUgd29ya3NwYWNlIHJvb3QuCi0gICogQHBhcmFtIGluaXRpYWxTZWxlY3Rpb24gVGhlIGluaXRpYWxseSBzZWxlY3RlZCBvYmplY3Qgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgKCBTaGVsbCBwYXJlbnQsIElSZXNvdXJjZSByb290LCBJUmVzb3VyY2UgaW5pdGlhbFNlbGVjdGlvbiApCi0gIHsKLSAgICB0aGlzKHBhcmVudCxyb290LGluaXRpYWxTZWxlY3Rpb24sbmV3IEZpbHRlcltdIHtuZXcgQW55RmlsdGVyKCl9KTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+UmVzb3VyY2VTZWxlY3Rpb25EaWFsb2c8L2NvZGU+Ci0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnBhcmVudCBTaGVsbDwvY29kZT4uCi0gICogVGhlIGRpYWxvZyByZW5kZXJzIGFsbCByZXNvdXJjZXMgaW5jbHVkaW5nIGFuZAotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5yb290IElSZXNvdXJjZTwvY29kZT4gdGhhdAotICAqIGFyZSBhY2NlcHRlZCBieSB0aGUgZ2l2ZW4gZmlsdGVyLgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXIjYWNjZXB0c30uCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0sCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiBUaGUgaW5pdGlhbGx5IHNlbGVjdGVkIG9iamVjdCBvciBudWxsIGlmIG5vbmUuCi0gICogQHBhcmFtIGZpbHRlciBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyfSwKLSAgKiBvciBudWxsIHRvIGRlZmF1bHQgdG8gYWxsIHJlc291cmNlcyB1bmRlciB0aGUgPGNvZGU+cm9vdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyAoIFNoZWxsIHBhcmVudCwgSVJlc291cmNlIHJvb3QsIElSZXNvdXJjZSBpbml0aWFsU2VsZWN0aW9uLCBGaWx0ZXIgZmlsdGVyICkKLSAgewotICAgIHRoaXMocGFyZW50LHJvb3QsaW5pdGlhbFNlbGVjdGlvbixuZXcgRmlsdGVyW10ge2ZpbHRlcn0pOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZzwvY29kZT4KLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cGFyZW50IFNoZWxsPC9jb2RlPi4KLSAgKiBUaGUgZGlhbG9nIHJlbmRlcnMgYWxsIHJlc291cmNlcyBpbmNsdWRpbmcgYW5kCi0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnJvb3QgSVJlc291cmNlPC9jb2RlPiB0aGF0Ci0gICogYXJlIGFjY2VwdGVkIGJ5IHRoZSBnaXZlbiBmaWx0ZXJzLgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXIjYWNjZXB0c30uCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0uCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiBUaGUgaW5pdGlhbGx5IHNlbGVjdGVkIG9iamVjdCBvciBudWxsIGlmIG5vbmUuCi0gICogQHBhcmFtIGZpbHRlcnMgQW4gYXJyYXkgb2Yge0BsaW5rIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyfQotICAqIG9iamVjdHMuCi0gICogSWYgdGhlIGFycmF5IGlzIG51bGwgb3Igb2YgbGVuZ3RoIHplcm8sIHRoZW4gYWxsIHJlc291cmNlcyBhcmUgYWNjZXB0ZWQKLSAgKiAoaWUuIGVxdWl2YWxlbnQgdG8gPGNvZGU+UmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cocGFyZW50LHJvb3QpPC9jb2RlPi4KLSAgKiBJZiB0aGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG9uZSwgdGhlbiB0aGUgZGlhbG9nIHdpbGwgY29uc2lzdCBvZiBhIHNpbmdsZQotICAqIGNvbnRyb2wgc2hvd2luZyBhIGxpc3Qgb2YgYWxsIGZpbHRlcmVkIHJlc291cmNlcy4KLSAgKiBJZiB0aGUgYXJyYXkgaXMgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvbmUsIHRoZW4gdGhlIGRpYWxvZyB3aWxsCi0gICogY29uc2lzdCBvZiBhIGNvbWJvIGJveCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgZmlsdGVycyBhbmQgd2l0aCB0aGUKLSAgKiBmaXJzdCBmaWx0ZXIgKGllLiA8Y29kZT5maWx0ZXJzWzBdPC9jb2RlPikgc2VsZWN0ZWQgYnkgZGVmYXVsdCwgZm9sbG93ZWQKLSAgKiBieSBhIGNvbnRyb2wgc2hvd2luZyBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyBmaWx0ZXJlZCBieSB0aGUgc2VsZWN0ZWQgZmlsdGVyLiAKLSAgKi8KLSAgcHVibGljIFJlc291cmNlU2VsZWN0aW9uRGlhbG9nICggU2hlbGwgcGFyZW50LCBJUmVzb3VyY2Ugcm9vdCwgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb24sIEZpbHRlcltdIGZpbHRlcnMgKQotICB7Ci0gICAgc3VwZXIocGFyZW50KTsKLSAgICByb290XyA9IHJvb3QgPT0gbnVsbCA/IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpIDogcm9vdDsKLSAgICBpbml0aWFsU2VsZWN0aW9uXyA9IGluaXRpYWxTZWxlY3Rpb247Ci0gICAgZmlsdGVyc18gPSAoZmlsdGVycyA9PSBudWxsIHx8IGZpbHRlcnMubGVuZ3RoID09IDApID8gbmV3IEZpbHRlcltdIHtuZXcgQW55RmlsdGVyKCl9IDogZmlsdGVyczsKLSAgICBjdXJyZW50RmlsdGVyXyA9IGZpbHRlcnNfWzBdOwotICAgIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZF8gPSBmYWxzZTsKLSAgICBzZXRTaGVsbFN0eWxlKFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5SRVNJWkUgfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOwotICB9Ci0KLSAgLyoqCi0gICogRW5hYmxlcyBvciBkaXNhYmxlcyBtdWx0aXBsZSBzZWxlY3Rpb24gaW4gdGhlIHRyZWUgdmlldy4KLSAgKiBNdWx0aXBsZSBzZWxlY3Rpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgKiBAcGFyYW0gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkIFRydWUgdG8gZW5hYmxlZCBvciBmYWxzZSB0byBkaXNhYmxlLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRNdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQgKCBib29sZWFuIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZCApCi0gIHsKLSAgICBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWRfID0gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2VsZWN0aW9ucyBtYWRlIGluIHRoZSBkaWFsb2cgaWYgT0sgd2FzIHByZXNzZWQsCi0gICogb3IgbnVsbCBpZiBDYW5jZWwgd2FzIHByZXNzZWQuIFJldHVybnMgbnVsbCBpZiB0aGUgZGlhbG9nCi0gICogaGFzIG5ldmVyIGJlZW4gb3BlbmVkLgotICAqIEByZXR1cm4gQW4gYXJyYXkgb2Ygc2VsZWN0ZWQgcmVzb3VyY2VzLCBwb3NzaWJseSBlbXB0eSwgcG9zc2libHkgbnVsbC4KLSAgKi8KLSAgcHVibGljIElSZXNvdXJjZVtdIGdldFJlc3VsdCAoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgQ2FuY2VsIGJ1dHRvbiBpcyBwcmVzc2VkLgotICAqIEluc3VyZXMgdGhhdCB7QGxpbmsgI2dldFJlc3VsdH0gd2lsbCByZXR1cm4gbnVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY2FuY2VsUHJlc3NlZCAoKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IG51bGw7Ci0gICAgc2V0UmV0dXJuQ29kZShEaWFsb2cuQ0FOQ0VMKTsKLSAgICBzdXBlci5jYW5jZWxQcmVzc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgT0sgYnV0dG9uIGlzIHByZXNzZWQuCi0gICogU3F1aXJyZWxzIGF3YXkgdGhlIGxpc3Qgb2YgemVybyBvciBtb3JlIHNlbGVjdGVkCi0gICogPGNvZGU+SVJlc291cmNlPC9jb2RlPnMgdG8gYmUgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRSZXN1bHR9LgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQgKCkKLSAgewotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gZmlsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotICAgIHsKLSAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0cnVjdHVyZWRTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgICAgc2VsZWN0aW9uXyA9IG5ldyBJUmVzb3VyY2Vbc3RydWN0dXJlZFNlbGVjdGlvbi5zaXplKCldOwotICAgICAgaW50IGk9MDsKLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBzdHJ1Y3R1cmVkU2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdGVyLm5leHQoKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgIHNlbGVjdGlvbl9baSsrXSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLk9LKTsKLSAgICBzdXBlci5va1ByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdyNjb25maWd1cmVTaGVsbH0uCi0gICogQHBhcmFtIHNoZWxsIFRoZSBzaGVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwgKCBTaGVsbCBzaGVsbCApCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX1JFU09VUkNFX0JST1dTRSk7Ci0gIH0KLQotICAvKiogCi0gICogQ3JlYXRlcyB0aGUgZGlhbG9nIGFyZWEuCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbXBvc2l0ZS4KLSAgKiBAcmV0dXJuIFRoZSBjb250cm9sIGFyZWEuCi0gICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEgKCBDb21wb3NpdGUgcGFyZW50ICkKLSAgewotICAgIEdyaWRMYXlvdXQgZ2w7Ci0gICAgR3JpZERhdGEgZ2Q7Ci0KLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGdkLndpZHRoSGludCA9IDQwMDsKLSAgICBnZC5oZWlnaHRIaW50ID0gMzAwOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBpZiAoZmlsdGVyc18ubGVuZ3RoID4gMSkKLSAgICB7Ci0gICAgICBDb21wb3NpdGUgZiA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLFNXVC5OT05FKTsKLSAgICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICAgIGYuc2V0TGF5b3V0KGdsKTsKLSAgICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgICBmLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgICBmaWx0ZXJMYWJlbF8gPSBuZXcgTGFiZWwoZixTV1QuV1JBUCk7Ci0gICAgICBmaWx0ZXJMYWJlbF8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfUkVTT1VSQ0VfRklMVEVSKTsKLSAgICAgIGZpbHRlckxhYmVsXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9EUkVTX0NPTUJPX1JFU09VUkNFX1RZUEUpOwotCi0gICAgICBmaWx0ZXJDb21ib18gPSBuZXcgQ29tYm8oZixTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWSk7Ci0gICAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgICAgZmlsdGVyQ29tYm9fLnNldExheW91dERhdGEoZ2QpOwotICAgICAgZmlsdGVyQ29tYm9fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sdGhpcyk7Ci0gICAgICBmaWx0ZXJDb21ib18uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfRFJFU19DT01CT19SRVNPVVJDRV9UWVBFKTsKLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZmlsdGVyQ29tYm9fLElORk9QT1BfRFJFU19DT01CT19SRVNPVVJDRV9UWVBFKTsKLSAgICB9Ci0KLSAgICBpZiAobXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXykKLSAgICB7Ci0gICAgICByZXNvdXJjZVRyZWVfID0gbmV3IFRyZWUoY29tcG9zaXRlLFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzb3VyY2VUcmVlXyA9IG5ldyBUcmVlKGNvbXBvc2l0ZSxTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0gICAgfQotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRMYXlvdXREYXRhKGdkKTsKLS8vICByZXNvdXJjZVRyZWVfLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sdGhpcyk7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9EUkVTX1RSRUVfUkVTT1VSQ0UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVzb3VyY2VUcmVlXyxJTkZPUE9QX0RSRVNfVFJFRV9SRVNPVVJDRSk7Ci0KLSAgICBmaWxlVmlld2VyXyA9IG5ldyBUcmVlVmlld2VyKHJlc291cmNlVHJlZV8pOwotICAgIGZpbGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgV29ya2JlbmNoQ29udGVudFByb3ZpZGVyKCkpOwotICAgIGZpbGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIoCi0gICAgICAgICAgICAgICAgbmV3IERlY29yYXRpbmdMYWJlbFByb3ZpZGVyKAotCQkJCSAgICAgICAgbmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKSwgCi0JCQkJICAgICAgICBXZWJTZXJ2aWNlVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXREZWNvcmF0b3JNYW5hZ2VyKCkuZ2V0TGFiZWxEZWNvcmF0b3IoKSkpOwotICAgIGZpbGVWaWV3ZXJfLmFkZEZpbHRlcigKLSAgICAgIG5ldyBWaWV3ZXJGaWx0ZXIgKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc2VsZWN0ICggVmlld2VyIHZpZXdlciwgT2JqZWN0IHBhcmVudE9iamVjdCwgT2JqZWN0IG9iamVjdCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAoCi0gICAgICAgICAgICAoKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgJiYgKChJUmVzb3VyY2Upb2JqZWN0KS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0gICAgICAgICAgICB8fCAoUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy5jdXJyZW50RmlsdGVyXy5hY2NlcHRzKG9iamVjdCkpCi0gICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0SW5wdXQocm9vdF8pOwotICAgIGZpbGVWaWV3ZXJfLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLSAgICAgIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyICgpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQgKCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQgKQotICAgICAgICB7Ci0vLyAgICAgICAgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy52YWxpZGF0ZVBhZ2VUb1N0YXR1cygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbl8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmaWxlVmlld2VyXy5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy5pbml0aWFsU2VsZWN0aW9uXyksdHJ1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGFuIGV2ZW50IG9jY3VycyBvbiB0aGUgcGFnZS4KLSAgKiBIYW5kbGVzIHRoZSBldmVudCBhbmQgcmV2YWxpZGF0ZXMgdGhlIHBhZ2UuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IG9jY3VyZWQuCi0gICovCi0gIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50ICggRXZlbnQgZXZlbnQgKQotICB7Ci0vLyAgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wbHVnaW4vV2ViU2VydmljZVVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XZWJTZXJ2aWNlVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU1MWE1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XZWJTZXJ2aWNlVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VVSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MudWkiOwotCi0gIC8qKgotICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVVJUGx1Z2luIGluc3RhbmNlXzsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZVVJUGx1Z2luKCkgewotCXN1cGVyKCk7Ci0JaW5zdGFuY2VfID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICogKFdlYlNlcnZpY2VVSVBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLmpzdC53cy51aSIpOwotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VVSVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgV2ViU2VydmljZVVJUGx1Z2luIGdldEluc3RhbmNlKCkgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQkJCi0gIC8qKgotICAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0gICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgKi8KLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIG5hbWUpIHsKLQkJdHJ5IHsKLQkJCVVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2VfLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7Ci0JCQlVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsIG5hbWUpOwotCQkJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BvcHVwL1BvcHVwVGVzdFNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjUzN2I3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODAzICAgMTUyNzkwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiAoY3JlYXRlZCBjbGFzcykKLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDEyMyAgIDIxNjM3MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wb3B1cDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwotCi0KLXB1YmxpYyBjbGFzcyBQb3B1cFRlc3RTZXJ2aWNlIGV4dGVuZHMgUG9wdXBUZXN0V1NETAotewotICBwdWJsaWMgUG9wdXBUZXN0U2VydmljZSgpCi0gIHsKLQkgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0JU3RyaW5nIHN0YXRlTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblN0YXRlTG9jYXRpb24oKTsKLQlTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKTsKLSAgCVdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCk7Ci0gICAgY29tbWFuZC5zZXRGb3JjZUxhdW5jaE91dHNpZGVJREUoZmFsc2UpOwotICAgIFZlY3RvciBsYXVuY2hPcHRpb25zID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCkKLSAgICB7ICAgICAgCi0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB3c2RsVVJMID0gbnVsbDsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGl0Lm5leHQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlUmVmKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVJlZiBzZXJ2aWNlSW1wbCA9IChTZXJ2aWNlUmVmKW9iamVjdDsKLSAgICAgICAgICB3c2RsVVJMID0gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoc2VydmljZUltcGwpOwotICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgewotICAgICAgICAJd3NkbFVSTCA9IChTdHJpbmcpIG9iamVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgCS8vIE9iamVjdCBpcyBub3QgYW55IHR5cGVzIHdlIHJlY29nbml6ZWQsIHdzZGxVUkwgaXMgc3RpbGwgbnVsbC4KLSAgICAgICAgICAJLy8gVHJ5IGxvb2tpbmcgdXAgYW4gYWRhcHRlciBmb3IgdGhlIG9iamVjdC4KLSAgICAgICAgCS8vIElmIGZvdW5kLCB1cGRhdGUgd3NkbFVSTCBjb250YWlucyB0aGUgYWRhcHRlZCBXU0RMIHN0cmluZy4gIAotICAgICAgICAJLy8gSWYgbm90IGZvdW5kLCB3c2RsVVJMIHdvdWxkIHN0aWxsIGJlIG51bGwuCi0gICAgICAgIAl3c2RsVVJMID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRXU0RMKG9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGFkZExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucywgd3NkbFVSTCwgc3RhdGVMb2NhdGlvbiwgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29tbWFuZC5zZXRMYXVuY2hPcHRpb25zKChMYXVuY2hPcHRpb25bXSlsYXVuY2hPcHRpb25zLnRvQXJyYXkobmV3IExhdW5jaE9wdGlvblswXSkpOwotICAgIGNvbW1hbmQuZXhlY3V0ZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Jlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGIzZmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MDMgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZURlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLk1lcmdlRGVmYXVsdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRNZXJnZUNvbnRleHQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi17Ci0gIC8qQ09OVEVYVF9JRCBQUFJNMDAwMSBmb3IgdGhlIFJlc291cmNlIE1hbmFnbWVudCBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQUk1fUEFHRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBSTTAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBvdmVyV3JpdGVGaWxlczsKLSAgLypDT05URVhUX0lEIFBQUk0wMDAyIGZvciB0aGUgZmlsZSBvdmVyd3JpdGUgY2hlY2sgYm94IG9uIHRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDAyIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gY3JlYXRlRm9sZGVyczsKLSAgLypDT05URVhUX0lEIFBQUk0wMDAzIGZvciB0aGUgY3JlYXRlIGZvbGRlcnMgY2hlY2sgYm94IG9uIHRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBSTTAwMDMiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBjaGVja291dEZpbGVzOwotICAvKkNPTlRFWFRfSUQgUFBSTTAwMDQgZm9yIHRoZSBjaGVja291dCBmaWxlcyBjaGVjayBib3ggb24gdGhlIFJlc291cmNlIE1hbmFnZW1lbnQgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVCA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBSTTAwMDQiOwotICAKLSAgcHJpdmF0ZSBCdXR0b24gc2tlbGV0b25NZXJnZTsKLSAgLypDT05URVhUX0lEIFBQUk0wMDA1IGZvciB0aGUgc2tlbGV0b24gbWVyZ2UgY2hlY2sgYm94IG9uIHRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBSTV9DSEVDS0JPWF9TS0VMRVRPTl9NRVJHRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBSTTAwMDUiOwotCi0gLyoqCi0gICAqIENyZWF0ZXMgcHJlZmVyZW5jZSBwYWdlIGNvbnRyb2xzIG9uIGRlbWFuZC4KLSAgICogICBAcGFyYW0gcGFyZW50ICB0aGUgcGFyZW50IGZvciB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgc3VwZXJwYXJlbnQpCi0gIHsKLSAgCUlXb3JrYmVuY2hIZWxwU3lzdGVtIGhlbHBTeXN0ZW0gPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKTsKLSAgCQotICAgIENvbXBvc2l0ZSAgIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHN1cGVycGFyZW50LCBTV1QuTk9ORSApOwkKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX1BBR0UpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChwYXJlbnQsIElORk9QT1BfUFBSTV9QQUdFKTsKLQotICAgIG92ZXJXcml0ZUZpbGVzID0gY3JlYXRlQ2hlY2tCb3gocGFyZW50LCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX09WRVJXUklURV9GSUxFUyk7Ci0gICAgb3ZlcldyaXRlRmlsZXMuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChvdmVyV3JpdGVGaWxlcywgSU5GT1BPUF9QUFJNX0NIRUNLQk9YX09WRVJXUklURV9GSUxFUyk7Ci0KLSAgICBjcmVhdGVGb2xkZXJzICA9IGNyZWF0ZUNoZWNrQm94KHBhcmVudCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9DUkVBVEVfRk9MREVSUyk7Ci0gICAgY3JlYXRlRm9sZGVycy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAoY3JlYXRlRm9sZGVycywgSU5GT1BPUF9QUFJNX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTKTsKLQotICAgIGNoZWNrb3V0RmlsZXMgPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fQ0hFQ0tPVVRfRklMRVMpOyAgICAKLSAgICBjaGVja291dEZpbGVzLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfQ0hFQ0tfT1VUKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAoY2hlY2tvdXRGaWxlcywgSU5GT1BPUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVCk7Ci0gICAgCi0gICAgc2tlbGV0b25NZXJnZSA9IGNyZWF0ZUNoZWNrQm94KHBhcmVudCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9TS0VMRVRPTl9NRVJHRSk7ICAgIAotICAgIHNrZWxldG9uTWVyZ2Uuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9TS0VMRVRPTl9NRVJHRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHNrZWxldG9uTWVyZ2UsIElORk9QT1BfUFBSTV9DSEVDS0JPWF9TS0VMRVRPTl9NRVJHRSk7Ci0KLSAgICBpbml0aWFsaXplVmFsdWVzKCk7Ci0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHN1cGVycGFyZW50KTsgICAgCi0KLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0gCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUNoZWNrQm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdGV4dCApCi0gIHsKLSAgICBCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbiggcGFyZW50LCBTV1QuQ0hFQ0sgKTsKLSAgICBidXR0b24uc2V0VGV4dCggdGV4dCApOwotICAgIHJldHVybiBidXR0b247Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgc3RvcmVWYWx1ZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0gIHsKLSAgICBwZXJmb3JtT2soKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgIHsgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHVzaW5nIGRlZmF1bHQgdmFsdWVzCi0gICAqIGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVEZWZhdWx0cygpCi0gIHsKLSAgICBvdmVyV3JpdGVGaWxlcy5zZXRTZWxlY3Rpb24oIFJlc291cmNlRGVmYXVsdHMuZ2V0T3ZlcndyaXRlRmlsZXNEZWZhdWx0KCkpOwotICAgIGNyZWF0ZUZvbGRlcnMuc2V0U2VsZWN0aW9uKCBSZXNvdXJjZURlZmF1bHRzLmdldENyZWF0ZUZvbGRlcnNEZWZhdWx0KCkpOwotICAgIGNoZWNrb3V0RmlsZXMuc2V0U2VsZWN0aW9uKCBSZXNvdXJjZURlZmF1bHRzLmdldENoZWNrb3V0RmlsZXNEZWZhdWx0KCkpOwotICAgIHNrZWxldG9uTWVyZ2Uuc2V0U2VsZWN0aW9uKCBNZXJnZURlZmF1bHRzLmdldFNrZWxldG9uTWVyZ2VEZWZhdWx0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgZnJvbSB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLSAgewotICAgIC8vIGdldCB0aGUgcGVyc2lzdGVudCBjb250ZXh0IGZyb20gdGhlIHBsdWdpbgotICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotICAgIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQgbWVyZ2VDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXJnZUNvbnRleHQoKTsKLSAgICBvdmVyV3JpdGVGaWxlcy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSk7Ci0gICAgY3JlYXRlRm9sZGVycy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpKTsKLSAgICBjaGVja291dEZpbGVzLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpOwotICAgIHNrZWxldG9uTWVyZ2Uuc2V0U2VsZWN0aW9uKCBtZXJnZUNvbnRleHQuaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpKTsgCi0gICB9Ci0KLSAgLyoqCi0gICAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIC8vIGdldCB0aGUgcGVyc2lzdGVudCBjb250ZXh0IGZyb20gdGhlIHBsdWdpbgotICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotICAgIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQgbWVyZ2VDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXJnZUNvbnRleHQoKTsKLSAgICBjb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCggb3ZlcldyaXRlRmlsZXMuZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICBjb250ZXh0LnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKCBjcmVhdGVGb2xkZXJzLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCggY2hlY2tvdXRGaWxlcy5nZXRTZWxlY3Rpb24oKSApOyAgCi0gICAgbWVyZ2VDb250ZXh0LnNldFNrZWxldG9uTWVyZ2VFbmFibGVkKCBza2VsZXRvbk1lcmdlLmdldFNlbGVjdGlvbigpICk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9UZXN0RmFjaWxpdHlEZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Rlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVmNWEzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Rlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTcgICAxMTMxNjkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAyMjIgICAxMTg3MTEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTQgICAxNTQ1NDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgaXMgdHJhY2tpbmcgZXh0ZW5zaW9ucyB1c2luZyBsYWJlbCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBJRAotICogMjAwODA0MTYgICAyMjczNTkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFRlc3QgZmFjaWxpdGllcyBkbyBub3QgcmVzcGVjdCBkZWZhdWx0IG9yZGVyIGluIHBsdWdpbiBjdXN0b21pemF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5QZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0RlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLldTVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldlYlNlcnZpY2VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0RmFjaWxpdHlEZWZhdWx0c1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UsIFNlbGVjdGlvbkxpc3RlbmVyCi17Ci0gIAotICBwcml2YXRlIFRhYmxlVmlld2VyIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl87IAotICBwcml2YXRlIEJ1dHRvbiBtb3ZlVXBfOwotICBwcml2YXRlIEJ1dHRvbiBtb3ZlRG93bl87Ci0gIHByaXZhdGUgVmVjdG9yIHdlYlNlcnZpY2VUZXN0VHlwZXNfOwotICAKLSAgLypDT05URVhUX0lEIFBQU0QwMDAxIGZvciB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUFNEX1BBR0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQU0QwMDAxIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gbGF1bmNoU2FtcGxlOwotICAvKkNPTlRFWFRfSUQgUFBTRDAwMDIgZm9yIHRoZSBsYXVuY2ggc2FtcGxlIGNoZWNrIGJveCBvbiB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QUFNEX0NIRUNLQk9YX0xBVU5DSF9TQU1QTEUgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQU0QwMDAyIjsKLSAgLy8KLQotICAvKioKLSAgICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotICAgKiAgIEBwYXJhbSBwYXJlbnQgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkKLSAgewotICAgIAotICAJQ29tcG9zaXRlICAgcGFyZW50ID0gbmV3IENvbXBvc2l0ZSggc3VwZXJwYXJlbnQsIFNXVC5OT05FICk7CQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgcGFyZW50LnNldExheW91dCggbGF5b3V0ICk7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQU0RfUEFHRSk7Ci0gICAgcGFyZW50LnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCxJTkZPUE9QX1BQU0RfUEFHRSk7ICAgIAotCi0gICAgbGF1bmNoU2FtcGxlID0gY3JlYXRlQ2hlY2tCb3gocGFyZW50LCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX0xBVU5DSF9TQU1QTEUpOwotICAgIGxhdW5jaFNhbXBsZS5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFNEX0NIRUNLQk9YX0xBVU5DSF9TQU1QTEUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobGF1bmNoU2FtcGxlLCBJTkZPUE9QX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRSk7Ci0KLSAgICAKLSAgICBUZXh0IHRlc3RTZXJ2aWNlVHlwZUxhYmVsID0gbmV3IFRleHQocGFyZW50LCBTV1QuUkVBRF9PTkxZIHwgU1dULldSQVApOwotICAgIHRlc3RTZXJ2aWNlVHlwZUxhYmVsLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1NBTVBMRV9UWVBFUyk7Ci0gICAgdGVzdFNlcnZpY2VUeXBlTGFiZWwuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotCi0gICAgQ29tcG9zaXRlIHdlYlNlcnZpY2VUZXN0VHlwZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgd2ViU2VydmljZVRlc3RUeXBlQ29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgd2ViU2VydmljZVRlc3RUeXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLQotICAgIFRhYmxlIHRhYmxlPSBuZXcgVGFibGUod2ViU2VydmljZVRlc3RUeXBlQ29tcG9zaXRlLCBTV1QuQk9SREVSIHwgU1dULlNJTkdMRSB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMIHwgR3JpZERhdGEuRklMTF9WRVJUSUNBTCk7Ci0gICAgZ2Qud2lkdGhIaW50ID0gMjU2OwotICAgIHRhYmxlLnNldExheW91dERhdGEoZ2QpOwotICAgIHRhYmxlLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX0NMSUVOVF9UWVBFX1RBQkxFX1ZJRVdFUik7Ci0KLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgV2ViU2VydmljZVRlc3RUeXBlQ29udGVudFByb3ZpZGVyKCkpOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgV2ViU2VydmljZVRlc3RUeXBlTGFiZWxQcm92aWRlcigpKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnNldElucHV0KHdlYlNlcnZpY2VUZXN0VHlwZXNfKTsKLQotICAgIFRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0gICAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKLSAgICB0YWJsZUNvbHVtbi5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9DTElFTlRfVFlQRV9OQU1FKTsKLSAgICBDb2x1bW5XZWlnaHREYXRhIGNvbHVtbkRhdGEgPSBuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyNTYsIDI1NiwgZmFsc2UpOwotICAgIHRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoY29sdW1uRGF0YSk7Ci0gICAgdGFibGUuc2V0TGF5b3V0KHRhYmxlTGF5b3V0KTsKLQotICAgIENvbXBvc2l0ZSBjID0gbmV3IENvbXBvc2l0ZSh3ZWJTZXJ2aWNlVGVzdFR5cGVDb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDE7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMTA7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIGMuc2V0TGF5b3V0KGdsKTsKLSAgICBjLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORykpOwotCi0gICAgbW92ZVVwXyA9IG5ldyBCdXR0b24oYywgU1dULlBVU0gpOwotICAgIG1vdmVVcF8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfTU9WRV9VUCk7Ci0gICAgbW92ZVVwXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBtb3ZlVXBfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIG1vdmVVcF8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfTU9WRV9VUCk7Ci0KLSAgICBtb3ZlRG93bl8gPSBuZXcgQnV0dG9uKGMsIFNXVC5QVVNIKTsKLSAgICBtb3ZlRG93bl8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfTU9WRV9ET1dOKTsKLSAgICBtb3ZlRG93bl8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgbW92ZURvd25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIG1vdmVEb3duXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9NT1ZFX0RPV04pOwotCi0gICAgdGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFRhYmxlU2VsZWN0aW9uTGlzdGVuZXIobW92ZVVwXywgbW92ZURvd25fLCB0YWJsZSkpOwotICAgIAotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOyAgICAKLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICBwcml2YXRlIEJ1dHRvbiBjcmVhdGVDaGVja0JveCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIHRleHQgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwgU1dULkNIRUNLICk7Ci0gICAgYnV0dG9uLnNldFRleHQoIHRleHQgKTsKLSAgICByZXR1cm4gYnV0dG9uOwotICB9Ci0KLSAgLyoqCi0gICAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotICB7Ci0gICAgc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0gICAgaW5pdGlhbGl6ZURlZmF1bHRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLSAgewotICAgIHRyeXsKLSAgICAgIHN0b3JlVmFsdWVzKCk7Ci0gICAgfWNhdGNoIChFeGNlcHRpb24gZXhjKXsKLSAgICAJZXhjLnByaW50U3RhY2tUcmFjZSgpO30KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0gIHsKLSAgICB0cnl7Ci0gIAlwZXJmb3JtT2soKTsKLSAgICB9Y2F0Y2goTnVsbFBvaW50ZXJFeGNlcHRpb24gZXhjKXsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICB7IH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB0byB0aGVpciBidXJuZWQtaW4gZGVmYXVsdHMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotICAgIFBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IChQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KSAKLSAgICAJV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotICAgIAotICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmNsZWFyKCk7Ci0gICAgU3RyaW5nW10gdHlwZXMgPSBjb250ZXh0LmdldERlZmF1bHRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5hZGQodHlwZXNbaV0pOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgZnJvbSB0aGUgcHJlZmVyZW5jZSBoZWxwZXIuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0gIHsKLSAgCVNjZW5hcmlvQ29udGV4dCAgY29udGV4dCAgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0gICAgU2NlbmFyaW9EZWZhdWx0cyBkZWZhdWx0cyA9IG5ldyBTY2VuYXJpb0RlZmF1bHRzKCk7Ci0gICAgCi0gICAgbGF1bmNoU2FtcGxlLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0xhdW5jaFNhbXBsZUVuYWJsZWQoKSk7Ci0gICAgICAgIAotICAgIFN0cmluZ1tdIHR5cGVzID0gY29udGV4dC5nZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5hZGQodHlwZXNbaV0pOwotICAgIC8vIGNoZWNrIHdoZXRoZXIgd2UgbWlzc2VkIGFueSB0eXBlcyBmcm9tIHRoZSBkZWZhdWx0IGxpc3QKLSAgICBib29sZWFuIG1pc3NlZCA9IGZhbHNlOwotICAgIHR5cGVzID0gZGVmYXVsdHMuZ2V0V2ViU2VydmljZVRlc3RJZHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5pbmRleE9mKHR5cGVzW2ldKSA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgd2ViU2VydmljZVRlc3RUeXBlc18uYWRkKHR5cGVzW2ldKTsKLSAgICAgICAgbWlzc2VkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1pc3NlZCkKLSAgICB7Ci0gICAgICB0eXBlcyA9IG5ldyBTdHJpbmdbd2ViU2VydmljZVRlc3RUeXBlc18uc2l6ZSgpXTsKLSAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmNvcHlJbnRvKHR5cGVzKTsKLSAgICAgIGNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RJZHModHlwZXMpOwotICAgIH0KLSAgICAvLyByZWZyZXNoIHZpZXdlcgotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgIAotICAgIC8vIFNlbGVjdCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgdGFibGUKLSAgICBUYWJsZSB0YWJsZSA9IHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uZ2V0VGFibGUoKTsKLQlpZiAodGFibGUuZ2V0SXRlbUNvdW50KCkgPiAwKXsKLSAgICAJdGFibGUuc2V0U2VsZWN0aW9uKDApOwotICAgIAl0YWJsZS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotICAgIH0KLSAgIH0KLQotICAvKioKLSAgICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2UgaGVscGVyLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotICAgIFN0cmluZ1tdIHR5cGVzID0gbmV3IFN0cmluZ1t3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5zaXplKCldOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmNvcHlJbnRvKHR5cGVzKTsKLSAgICBjb250ZXh0LnNldFdlYlNlcnZpY2VUZXN0SWRzKHR5cGVzKTsKLSAgICAKLSAgICBjb250ZXh0LnNldExhdW5jaFNhbXBsZUVuYWJsZWQobGF1bmNoU2FtcGxlLmdldFNlbGVjdGlvbigpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICB7Ci0gICAgaW50IGluZGV4ID0gd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGlmIChlLndpZGdldCA9PSBtb3ZlVXBfICYmIGluZGV4ID4gMCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IHdlYlNlcnZpY2VUZXN0VHlwZXNfLnJlbW92ZShpbmRleCk7Ci0gICAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmluc2VydEVsZW1lbnRBdChvYmplY3QsIGluZGV4LTEpOwotICAgICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGUud2lkZ2V0ID09IG1vdmVEb3duXyAmJiBpbmRleCA8IHdlYlNlcnZpY2VUZXN0VHlwZXNfLnNpemUoKS0xKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gd2ViU2VydmljZVRlc3RUeXBlc18ucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgd2ViU2VydmljZVRlc3RUeXBlc18uaW5zZXJ0RWxlbWVudEF0KG9iamVjdCwgaW5kZXgrMSk7Ci0gICAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgfQotICAgICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5nZXRUYWJsZSgpLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBXZWJTZXJ2aWNlVGVzdFR5cGVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKE9iamVjdCkKLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IHZhbHVlKSAKLSAgICB7Ci0gICAgICByZXR1cm4gKChWZWN0b3IpdmFsdWUpLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIAotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNpbnB1dENoYW5nZWQoVmlld2VyLCBPYmplY3QsIE9iamVjdCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIGFyZzAsIE9iamVjdCBhcmcxLCBPYmplY3QgYXJnMikgCi0gICAgewotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgV2ViU2VydmljZVRlc3RUeXBlTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyBXZWJTZXJ2aWNlVGVzdFR5cGVMYWJlbFByb3ZpZGVyKCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoT2JqZWN0KQotICAgICovCi0gICAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBhcmcwKSAKLSAgICB7IAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgdmFsdWUpIAotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpCi0gICAgICAJCS5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5SWQodmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICBpZiAoZXh0ZW5zaW9uICE9IG51bGwpCi0gICAgCSAgcmV0dXJuIGV4dGVuc2lvbi5nZXRMYWJlbCgpOwotICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgY2xhc3MgVGFibGVTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBCdXR0b24gdXA7Ci0gICAgQnV0dG9uIGRvd247Ci0gICAgVGFibGUgIHRhYmxlOwotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApCi0gICAgewotICAgICAgd2lkZ2V0U2VsZWN0ZWQoYXJnMCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkKLSAgICB7Ci0gICAgICBpbnQgaSA9IHRhYmxlLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoaSA9PSB0YWJsZS5nZXRJdGVtQ291bnQoKSAtIDEpIGRvd24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICBlbHNlIGlmIChpID4gLTEpIGRvd24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgIGlmIChpID09IDApIHVwLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgZWxzZSBpZiAoaSA+IC0xKSB1cC5zZXRFbmFibGVkKHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBUYWJsZVNlbGVjdGlvbkxpc3RlbmVyKEJ1dHRvbiB1cCwgQnV0dG9uIGRvd24sIFRhYmxlIHRhYmxlKQotICAgIHsKLSAgICAgIHRoaXMudXAgPSB1cDsKLSAgICAgIHRoaXMuZG93biA9IGRvd247Ci0gICAgICB0aGlzLnRhYmxlID0gdGFibGU7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3VkZGkvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvdWRkaS9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODZkMDIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvdWRkaS9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS51ZGRpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUKLXsKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKTsKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UHJpdmF0ZVVERElSZWdpc3RyeUlucXVpcnlBUEkoKTsKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVB1Ymxpc2hBUEkoKTsKLSAgICBwdWJsaWMgQ29tbWFuZFdpZGdldEJpbmRpbmcgZ2V0QmluZGluZygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUwMWIwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQxNDUxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNTI4NGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6MzU6MjYgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmNjOGM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTo0MiBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYjBkZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cwotQnVuZGxlLVZlcnNpb246IDEuMC4zMDQucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGE7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGlhbG9nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwud3NydAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMi4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDU5MzZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zcmMuaW5jbHVkZXMgPSBjb21wb25lbnQueG1sCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2UuLiA9IHNyYy8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2NvbXBvbmVudC54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTBiZjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbXBvbmVudCB4bWxucz0iaHR0cDovL2VjbGlwc2Uub3JnL3d0cC9yZWxlbmcvdG9vbHMvY29tcG9uZW50LW1vZGVsIiBuYW1lPSJvcmcuZWNsaXBzZS5qc3Qud3MiPgotICAgPGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+Ci0gICA8L2NvbXBvbmVudC1kZXBlbmRzPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5IiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNWE4YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWFhNzVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvV1NQbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1NU0dfRVJST1JfU0VSVkVSPUlXQUIwMjEzRSBFcnJvciBpbiBzdGFydGluZyBzZXJ2ZXIuCi0KLUFOWV9GSUxURVJfTkFNRT1BbGwgZmlsZXMKLUFOWV9GSUxURVJfREVTQz1UaGlzIGlzIGEga2luZCBvZiBGaWx0ZXIgdGhhdCBhY2NlcHRzIGFsbCBvYmplY3RzLgotCi1FUlJPUl9TRUxFQ1RJT05fVFJBTlNGT1JNPVNwZWNpZmllZCBzZWxlY3Rpb24gZG9lcyBub3QgbWF0Y2ggYSByZXNvdXJjZS4KLQotTVNHX0pBWFJQQzExX05PVF9DT01QTElBTlQ9VGhlIHNlcnZpY2UgY2xhc3MgInswfSIgZG9lcyBub3QgY29tcGx5IHRvIG9uZSBvciBtb3JlIHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbiwgYW5kIG1heSBub3QgZGVwbG95IG9yIGZ1bmN0aW9uIGNvcnJlY3RseS4KLU1TR19KQVhSUEMxMV9VTlJFU09MVkVEX0NMQVNTPVRoZSBjbGFzcyAiezB9IiBjYW5ub3QgYmUgbG9hZGVkIHZpYSBwcm9qZWN0ICJ7MX0iLiBDaGVjayB0aGF0IHRoZSBwcm9qZWN0IGNvbnRhaW5zIHRoZSBjbGFzcywgb3IgdGhhdCB0aGUgY2xhc3MgaXMgbG9hZGFibGUgYWNjb3JkaW5nIHRvIHRoZSBKYXZhIEJ1aWxkIFBhdGggb2YgdGhlIHByb2plY3QuCi1NU0dfSkFYUlBDMTFfVU5SRVNPTFZFRF9UWVBFPUEgZGF0YSB0eXBlLCAiezB9IiwgY291bGQgbm90IGJlIHJlc29sdmVkIHdoaWxlIGFuYWx5emluZyB0aGUgc2VydmljZSBjbGFzcy4gQ2hlY2sgeW91ciBwcm9qZWN0IGNsYXNzcGF0aC4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDE9VGhlIHNlcnZpY2UgY2xhc3MgInswfSIgZG9lcyBub3QgaGF2ZSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLiBDaGFwdGVyIDEwLjEgb2YgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgYSBzZXJ2aWNlIGNsYXNzIHRvIGhhdmUgYSBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3Rvciwgb3RoZXJ3aXNlIGEgSkFYLVJQQyAxLjEgY29tcGxpYW50IFdlYiBzZXJ2aWNlIGVuZ2luZSBtYXkgYmUgdW5hYmxlIHRvIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgc2VydmljZSBjbGFzcyB0byBoYW5kbGUgYW4gaW5jb21pbmcgcmVxdWVzdCBtZXNzYWdlLiAKLU1TR19KQVhSUEMxMV9SVUxFXzAwMDI9VGhlIHZhbHVlIHR5cGUgInswfSIgdXNlZCB2aWEgdGhlIHNlcnZpY2UgY2xhc3MgInsxfSIgZG9lcyBub3QgaGF2ZSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLiBDaGFwdGVyIDUuNCBvZiB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyBhIHZhbHVlIHR5cGUgdG8gaGF2ZSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBvdGhlcndpc2UgYSBKQVgtUlBDIDEuMSBjb21wbGlhbnQgV2ViIHNlcnZpY2UgZW5naW5lIG1heSBiZSB1bmFibGUgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSB2YWx1ZSB0eXBlIGR1cmluZyBkZXNlcmlhbGl6YXRpb24uCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDAzPVRoZSBtZXRob2QgInswfSIgb24gdGhlIHNlcnZpY2UgY2xhc3MgInsxfSIgaXMgb3ZlcmxvYWRlZC4gT3ZlcmxvYWRlZCBtZXRob2RzIGFyZSBhbGxvd2VkIGJ5IGNoYXB0ZXIgNS41LjUgb2YgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24sIGhvd2V2ZXIsIHNvbWUgSkFYLVJQQyAxLjEgY29tcGxpYW50IHRvb2xzIG1heSBub3QgYWxsb3cgb3ZlcmxvYWRlZCBtZXRob2RzIG9yIG1heSBnZW5lcmF0ZSBXU0RMIHdpdGggb3ZlcmxvYWRlZCBvcGVyYXRpb25zIGFzIGNvbnRyYXJ5IHRvIHJ1bGUgUjIzMDQgb2YgdGhlIFdTLUkgQmFzaWMgUHJvZmlsZS4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDQ9VGhlIHNlcnZpY2Ugc3BlY2lmaWMgZXhjZXB0aW9uIGNsYXNzICJ7MH0iIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgY29uc3RydWN0b3Igd2l0aCBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcgaW4gbnVtYmVyIGFuZCB0eXBlIHRvIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgY2xhc3MuIENoYXB0ZXIgNS41LjUgb2YgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgYSBzZXJ2aWNlIHNwZWNpZmljIGV4Y2VwdGlvbiB0byBoYXZlIGEgcHVibGljIGNvbnN0cnVjdG9yIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgdGhlcmUgYXJlIGdldHRlciBtZXRob2RzLCBhbmQgb2YgbWF0Y2hpbmcgZGF0YSB0eXBlcywgb3RoZXJ3aXNlIGEgSkFYLVJQQyAxLjEgY29tcGxpYW50IFdlYiBzZXJ2aWNlIGVuZ2luZSBtYXkgYmUgdW5hYmxlIHRvIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgZXhjZXB0aW9uIGR1cmluZyBkZXNlcmlhbGl6YXRpb24gb2YgYSBmYXVsdCBtZXNzYWdlLgotTVNHX0pBWFJQQzExX1JVTEVfMDAwNT1UaGUgbWV0aG9kICJ7MH0iIG9uIHRoZSBzZXJ2aWNlIGNsYXNzICJ7MX0iIHVzZXMgYSBkYXRhIHR5cGUsICJ7Mn0iLCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi4gSW5zdGFuY2VzIG9mIHRoZSB0eXBlIG1heSBub3Qgc2VyaWFsaXplIG9yIGRlc2VyaWFsaXplIGNvcnJlY3RseS4gTG9zcyBvZiBkYXRhIG9yIGNvbXBsZXRlIGZhaWx1cmUgb2YgdGhlIFdlYiBzZXJ2aWNlIG1heSByZXN1bHQuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA2PVRoZSBmaWVsZCBvciBwcm9wZXJ0eSAiezB9IiBvbiB0aGUgdmFsdWUgdHlwZSAiezF9IiB1c2VkIHZpYSB0aGUgc2VydmljZSBjbGFzcyAiezJ9IiBoYXMgYSBkYXRhIHR5cGUsICJ7M30iLCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24uIEluc3RhbmNlcyBvZiB0aGUgdHlwZSBtYXkgbm90IHNlcmlhbGl6ZSBvciBkZXNlcmlhbGl6ZSBjb3JyZWN0bHkuIExvc3Mgb2YgZGF0YSBvciBjb21wbGV0ZSBmYWlsdXJlIG9mIHRoZSBXZWIgc2VydmljZSBtYXkgcmVzdWx0LgotTVNHX0pBWFJQQzExX1JVTEVfMDAwNz1UaGUgcHJpbWl0aXZlIHR5cGUgInswfSIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4gQXMgc3RhdGVkIGluIGNoYXB0ZXIgNS4xLjEgb2YgdGhlIHNwZWNpZmljYXRpb24sIHRoZSBzdXBwb3J0ZWQgcHJpbWl0aXZlIHR5cGVzIGFyZSAiYm9vbGVhbiIsICJieXRlIiwgInNob3J0IiwgImludCIsICJsb25nIiwgImZsb2F0IiBhbmQgImRvdWJsZSIuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA4PVRoZSB3cmFwcGVyIHR5cGUgInswfSIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4gQXMgc3RhdGVkIGluIGNoYXB0ZXIgNS4xLjEgb2YgdGhlIHNwZWNpZmljYXRpb24sIHRoZSBzdXBwb3J0ZWQgd3JhcHBlciB0eXBlcyBhcmUgdGhvc2UgY29ycmVzcG9uZGluZyB0byAiYm9vbGVhbiIsICJieXRlIiwgInNob3J0IiwgImludCIsICJsb25nIiwgImZsb2F0IiBhbmQgImRvdWJsZSIuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA5PVRoZSBKYXZhIHR5cGUgInswfSIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4gQXMgc3RhdGVkIGluIGNoYXB0ZXIgNS4xLjMgb2YgdGhlIHNwZWNpZmljYXRpb24sIHRoZSBzdXBwb3J0ZWQgc3RhbmRhcmQgdHlwZXMgYXJlICJqYXZhLmxhbmcuU3RyaW5nIiwgImphdmEudXRpbC5EYXRlIiwgImphdmEudXRpbC5DYWxlbmRhciIsICJqYXZhLm1hdGguQmlnSW50ZWdlciIsICJqYXZhLm1hdGguQmlnRGVjaW1hbCIsICJqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIiBhbmQgImphdmEubmV0LlVSSSIuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDEwPVN1cHBvcnQgZm9yIGNvbGxlY3Rpb24gYW5kIG1hcCBjbGFzc2VzIHN1Y2ggYXMgInswfSIgaXMgbm90IHJlcXVpcmVkIGJ5IEpBWC1SUEMgMS4xLiBEdWUgdG8gdGhlaXIgbm9uLXR5cGUgc2FmZSBuYXR1cmUsIGEgSkFYLVJQQyAxLjEgY29tcGxpYW50IFdlYiBzZXJ2aWNlIGVuZ2luZSBtYXkgbm90IGhhbmRsZSBjb2xsZWN0aW9ucywgb3IgbWF5IHJlcHJlc2VudCB0aGVtIGluIFdTREwgZG9jdW1lbnRzIGFuZCBTT0FQIG1lc3NhZ2VzIGluIGEgbWFubmVyIHRoYXQgaW1wYWlycyBpbnRlcm9wZXJhYmlsaXR5LiBUaGUgdXNlIG9mIGFycmF5cyBpbnN0ZWFkIG9mIGNvbGxlY3Rpb25zIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbk1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL1dTUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI5NTc5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL1dTUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqIDIwMDYwNjA3ICAgMTQ1NjA0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXU1BsdWdpbk1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW4iOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgV1NQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBTllfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQU5ZX0ZJTFRFUl9ERVNDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX1NFTEVDVElPTl9UUkFOU0ZPUk07Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX05PVF9DT01QTElBTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1VOUkVTT0xWRURfQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1VOUkVTT0xWRURfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDAxOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwMzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDA0OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDA3OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwOTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDEwOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV1NQbHVnaW5NZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL051bGxTdGF0dXNNb25pdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvTnVsbFN0YXR1c01vbml0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVhYjdkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvTnVsbFN0YXR1c01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tYW5kOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotLyoqCi0qIEEgTnVsbFN0YXR1c1JlbmRlcmVyIHRocm93cyBhd2F5IElTdGF0dXMgaW5mb3JtYXRpb24uCi0qLwotcHVibGljIGNsYXNzIE51bGxTdGF0dXNNb25pdG9yIGltcGxlbWVudHMgU3RhdHVzTW9uaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByb3RlY3RlZCBib29sZWFuIHJlc3VsdDsKLQotICAvKioKLSAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAqLwotICBwdWJsaWMgTnVsbFN0YXR1c01vbml0b3IgKCkgIHt9Ci0gIC8qKgotICAqIERvZXMgbm90aGluZy4KLSAgKi8KLSAgcHVibGljIGludCByZXBvcnRTdGF0dXMoSVN0YXR1cyBzdGF0dXMsIFZlY3RvciBvcHRpb25zKSB7IHJldHVybiAwOyB9Ci0gIHB1YmxpYyBib29sZWFuIHJlcG9ydFN0YXR1cyhJU3RhdHVzIHN0YXR1cykgCi0gIHsgCi0gICAgc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkKLSAgICB7Ci0gICAgICBjYXNlIElTdGF0dXMuRVJST1I6Ci0gICAgICBjYXNlIElTdGF0dXMuV0FSTklORzoKLSAgICAgIAkJcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAJCWJyZWFrOwotCSAgY2FzZSBJU3RhdHVzLklORk86Ci0gICAgICBkZWZhdWx0OiAvL0lTdGF0dXMuT0sKLSAgICAgIAkJcmVzdWx0ID0gdHJ1ZTsgCi0gICAgICAJCWJyZWFrOwotICAgICB9Ci0gCXJldHVybiByZXN1bHQ7Ci0gIH0KLSAgcHVibGljIHZvaWQgZHVtcFNhdmVkU3RhdHVzKCkgeyB9Ci0gIHB1YmxpYyBib29sZWFuIGNhbkNvbnRpbnVlKCkgCi0gIHsgCi0JcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc2V0ICgpIHsKLSAgCQlyZXN1bHQgPSB0cnVlOwotICAJfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzTW9uaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL1N0YXR1c01vbml0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhYzgwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKioKLSogQSBTdGF0dXNNb25pdG9yIHJlcG9ydHMgSVN0YXR1cyBpbmZvcm1hdGlvbiB0byBhIGRpc3BsYXkgc3lzdGVtLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdHVzTW9uaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIHJlcG9ydHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBzdGF0dXMgb2JqZWN0LgotICAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmVwb3J0Ci0gICogSVN0YXR1cyBpbmZvcm1hdGlvbiB0byBhIGdpdmVuIGRpc3BsYXkgc3lzdGVtLAotICAqIHN1Y2ggYXMgU1dULCB0aGUgY29tbWFuZCBsaW5lLCBvciBhIHRyYWNlIGZpbGUuCi0gICovCi0gIHB1YmxpYyBpbnQgcmVwb3J0U3RhdHVzKElTdGF0dXMgc3RhdHVzLCBWZWN0b3Igb3B0aW9ucyk7Ci0gIHB1YmxpYyBib29sZWFuIHJlcG9ydFN0YXR1cyhJU3RhdHVzIHN0YXR1cyk7Ci0gIHB1YmxpYyB2b2lkIGR1bXBTYXZlZFN0YXR1cygpOwotICBwdWJsaWMgYm9vbGVhbiBjYW5Db250aW51ZSgpOwotICBwdWJsaWMgdm9pZCByZXNldCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL1N0YXR1c1JlbmRlcmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzUmVuZGVyZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNmZjNhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzUmVuZGVyZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKioKLSogQSBTdGF0dXNSZW5kZXJlciByZW5kZXJzIElTdGF0dXMgaW5mb3JtYXRpb24gdG8gYSBkaXNwbGF5IHN5c3RlbS4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXR1c1JlbmRlcmVyCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogUmVuZGVycyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIHN0YXR1cyBvYmplY3QuCi0gICogU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byByZW5kZXIKLSAgKiBJU3RhdHVzIGluZm9ybWF0aW9uIHRvIGEgZ2l2ZW4gZGlzcGxheSBzeXN0ZW0sCi0gICogc3VjaCBhcyBTV1QsIHRoZSBjb21tYW5kIGxpbmUsIG9yIGEgdHJhY2UgZmlsZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVuZGVyICggSVN0YXR1cyBzdGF0dXMgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0FueUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vQW55RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YThmMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vQW55RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci0KLS8qKgotKiBUaGlzIGlzIGEga2luZCBvZiB7QGxpbmsgRmlsdGVyfSB0aGF0IGFjY2VwdHMgYWxsIG9iamVjdHMsCi0qIGFuZCBpcyBhIHN1aXRhYmxlIGJhc2UgY2xhc3MgZm9yIG5ldyA8Y29kZT5GaWx0ZXJzPC9jb2RlPi4KLSovCi1wdWJsaWMgY2xhc3MgQW55RmlsdGVyIGltcGxlbWVudHMgRmlsdGVyCi17Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5BbnlGaWx0ZXI8L2NvZGU+LgotICAqLwotICBwdWJsaWMgQW55RmlsdGVyICgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBXU1BsdWdpbk1lc3NhZ2VzLkFOWV9GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBXU1BsdWdpbk1lc3NhZ2VzLkFOWV9GSUxURVJfREVTQzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGRlc2NyaWJpbmcgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4ncyBhc3Nlc3NtZW50IG9mCi0gICogdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogU2VlIHtAbGluayBGaWx0ZXIjc3RhdHVzT2Z9IGZvciBnZW5lcmFsIGNvbW1lbnRzLgotICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPkFueUZpbHRlcjwvY29kZT4KLSAgKiByZXR1cm5zIGEgc3RhdHVzIHdpdGggc2V2ZXJpdHkgPGNvZGU+SVN0YXR1cy5PSzwvY29kZT4uCi0gICogU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUuCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIEFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30uCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHN0YXR1c09mICggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwiIixudWxsKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB7QGxpbmsgI3N0YXR1c09mfSByZXR1cm5zCi0gICogYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfSB3aXRoIGEKLSAgKiBzZXZlcml0eSBvZiBsZXNzIHRoYW4gPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4uCi0gICogU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdG8gcHJvdmlkZSBhIGhpZ2hlci1wZXJmb3JtYW5jZQotICAqIGltcGxlbWVudGF0aW9uLgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHtAbGluayAjc3RhdHVzT2Z9IHJldHVybnMKLSAgKiBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9IHdpdGggYQotICAqIHNldmVyaXR5IG9mIGxlc3MgdGhhbiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyAoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgcmV0dXJuICFzdGF0dXNPZihvYmplY3QpLm1hdGNoZXMoSVN0YXR1cy5FUlJPUik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0ZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ODc2ZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIGEgY2xhc3Mgb2Ygb2JqZWN0cyB0aGF0IGZpbHRlcgotKiBvdGhlciBvYmplY3RzIGZvciBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIGJ5IHNvbWUgY29uc3VtZXIuCi0qLwotcHVibGljIGludGVyZmFjZSBGaWx0ZXIKLXsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogZGVzY3JpYmluZyB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPidzIGFzc2Vzc21lbnQgb2YKLSAgKiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKiBUaGUgc2V2ZXJpdHkgb2YgdGhlCi0gICogcmV0dXJuZWQgPGNvZGU+SVN0YXR1czwvY29kZT4gaXMgYXMgZm9sbG93czoKLSAgKiA8dWw+Ci0gICogPGxpPgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNPS30KLSAgKiBpZiB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPiBhY2NlcHRzIHRoZSA8Y29kZT5vYmplY3Q8L2NvZGU+Ci0gICogd2l0aCBubyBmdXJ0aGVyIGluZm9ybWF0aW9uIGZvciB0aGUgY2FsbGVyIChtZWFuaW5nIHRoZQotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRNZXNzYWdlfSBhbmQKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0RXhjZXB0aW9ufSBtZXRob2RzCi0gICogYXJlIGlnbm9yZWQpLgotICAqIDxsaT4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjSU5GT30KLSAgKiBpZiB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPiBhY2NlcHRzIHRoZSA8Y29kZT5vYmplY3Q8L2NvZGU+Ci0gICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBtYXkgYmUgYXZhaWxhYmxlIGZyb20gdGhlCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldE1lc3NhZ2V9IGFuZAotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRFeGNlcHRpb259IG1ldGhvZHMuCi0gICogPGxpPgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNXQVJOSU5HfQotICAqIGlmIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+IGFjY2VwdHMgdGhlIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBtYXkgYmUgYXZhaWxhYmxlIGZyb20gdGhlCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldE1lc3NhZ2V9IGFuZAotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRFeGNlcHRpb259IG1ldGhvZHMuCi0gICogPGxpPgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNFUlJPUn0KLSAgKiBpZiB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPiBkb2VzIG5vdCBhY2NlcHQgdGhlIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBtYXkgYmUgYXZhaWxhYmxlIGZyb20gdGhlCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldE1lc3NhZ2V9IGFuZAotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRFeGNlcHRpb259IG1ldGhvZHMuCi0gICogPC91bD4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gQW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGRlc2NyaWJpbmcgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4ncyBhc3Nlc3NtZW50IG9mCi0gICogdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHN0YXR1c09mICggT2JqZWN0IG9iamVjdCApOwotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIDxjb2RlPkZpbHRlcjwvY29kZT4KLSAgKiBhY2NlcHRzIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LiBUaGlzIG1ldGhvZAotICAqIG11c3QgcmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYge0BsaW5rICNzdGF0dXNPZn0KLSAgKiByZXR1cm5zIGFuIDxjb2RlPklTdGF0dXM8L2NvZGU+IHdpdGggYSBzZXZlcml0eSBvZgotICAqIGxlc3MgdGhhbiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPi4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIDxjb2RlPkZpbHRlcjwvY29kZT4KLSAgKiBhY2NlcHRzIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRzICggT2JqZWN0IG9iamVjdCApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSVByb2plY3RUb1N0cmluZ1RyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9JUHJvamVjdFRvU3RyaW5nVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAwNjFlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9JUHJvamVjdFRvU3RyaW5nVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotCi0KLS8qKgotICogVHJhbnNmcm9tcyBhIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvamVjdCB0byBqYXZhLmxhbmcuU3RyaW5nCi0gKi8KLXB1YmxpYyBjbGFzcyBJUHJvamVjdFRvU3RyaW5nVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0JCi0JICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0JICB7Ci0JICAJSVByb2plY3QgcHJvamVjdCA9IChJUHJvamVjdCl2YWx1ZTsKLQkgICAgcmV0dXJuIHByb2plY3QuZ2V0TmFtZSgpOwotCSAgfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDUzZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI1NTc0IHppbmFAY2EuaWJtLmNvbSAtIFppbmEgTW9zdGFmaWEKLSAqIDIwMDYwMjIyICAgMjI1NTc0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDgsIDIwMDQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqLwotcHVibGljIGNsYXNzIEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeSB7Ci0JCi0gCQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0RMVVJJKFNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsKQotICB7Ci0gIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBzZXJ2aWNlSW1wbC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gIAlTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0gIAkKLSAgCXJldHVybiBsb2NhdGlvbjsKLSAgfQotICAgCi0gIC8vaGFzIHRvIGJlIHVuZGVyIHRoZSB3ZWJjb250ZW50Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVKQl9NT0RVTEUgPSAiZWpiTW9kdWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBQQ0xJRU5UX01PRFVMRSA9ICJhcHBDbGllbnRNb2R1bGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXRUJfTU9EVUxFID0gIldlYkNvbnRlbnQiOwotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExVUkkoU2VydmljZVJlZiBzZXJ2aWNlSW1wbCkKLSAgewotICAJIFN0cmluZyBtb2R1bGVSb290ID0gbnVsbDsKLQkgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlSW1wbCk7Ci0JIGlmKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChwcm9qZWN0KSkKLQkgewotCSAgIG1vZHVsZVJvb3QgPSBXRUJfTU9EVUxFOwotCSB9Ci0gICAgIGVsc2UgaWYgKEoyRUVVdGlscy5pc0VKQkNvbXBvbmVudChwcm9qZWN0KSkKLQkgewotCSAgIG1vZHVsZVJvb3QgPSBFSkJfTU9EVUxFOwotCSB9Ci0JIGVsc2UgaWYgKEoyRUVVdGlscy5pc0FwcENsaWVudENvbXBvbmVudChwcm9qZWN0KSkKLQkgewotCSAgIG1vZHVsZVJvb3QgPSBBUFBDTElFTlRfTU9EVUxFOwotCSB9Ci0JIElQYXRoIHBhdGggPSBwcm9qZWN0LmdldExvY2F0aW9uKCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKTsKLQkgcGF0aCA9IHBhdGguYXBwZW5kKG1vZHVsZVJvb3QpLmFkZFRyYWlsaW5nU2VwYXJhdG9yKCk7Ci0JIHBhdGggPSBwYXRoLmFwcGVuZChzZXJ2aWNlSW1wbC5nZXRXc2RsRmlsZSgpKTsKLQkgRmlsZSBmaWxlID0gbmV3IEZpbGUocGF0aC50b1N0cmluZygpKTsKLQkgdHJ5ewotCSAgIFVSTCB1cmwgPSBmaWxlLnRvVVJMKCk7Ci0JICAgcmV0dXJuIHVybC50b1N0cmluZygpOwotCSB9Y2F0Y2goTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpe3JldHVybiBudWxsO30KLQkgCi0gIAotCSAgCi0JCi0gfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFVSSShXU0RMUmVzb3VyY2VJbXBsIHdzZGxSSSkKLSAgewotICAJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbFJJLmdldERlZmluaXRpb24oKTsKLSAgCVN0cmluZyBsb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgCQotICAJcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0lMUGF0aChXU0RMUmVzb3VyY2VJbXBsIHdzZGxSSSkKLSAgewotICAJcmV0dXJuIGNvbnZlcnRUb1JlbGF0aXZlKGdldFdTRExVUkkod3NkbFJJKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTSUxQYXRoKFNlcnZpY2VSZWYgc2VydmljZUltcGwpCi0gIHsKLSAgCXJldHVybiBjb252ZXJ0VG9SZWxhdGl2ZShnZXRXU0RMVVJJKHNlcnZpY2VJbXBsKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTSUxQYXRoKFNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsKQotICB7Ci0gIAlyZXR1cm4gY29udmVydFRvUmVsYXRpdmUoZ2V0V1NETFVSSShzZXJ2aWNlSW1wbCkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBGSUxFPSJmaWxlOi8iOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBGSUxFTD0iZmlsZToiOyAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29udmVydFRvUmVsYXRpdmUoU3RyaW5nIHVyaSkKLSAgewotICAJLy9yZW1vdmUgZmlsZToKLSAgCVN0cmluZyByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0gICAgcm9vdCA9IEZJTEUgKyByb290OwotICAJU3RyaW5nIHJvb3RMID0gRklMRUwgKyByb290OwotICAgIGlmKHVyaS5zdGFydHNXaXRoKHJvb3QpIHx8IHVyaS5zdGFydHNXaXRoKHJvb3RMKSl7Ci0gICAgICByZXR1cm4gdXJpLnN1YnN0cmluZyhyb290Lmxlbmd0aCgpKTsgIAkKLSAgICB9Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYzMTdjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0ICAxMjQxNDMgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotICogMjAwNjAzMjkgICAxMjgwNjkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUwMyAgIDEyNjgxOSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTI0ICAgMTMxMTMyIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzA3MjMgICAxOTQ0MzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIENoZWNrIGZvciBub24tZXhpc3RpbmcgRUFSIHdpdGggY29udGVudCBub3QgZGVsZXRlZAotICogMjAwNzEyMTgJICAyMDAxOTMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzEyMjEgICAyMTM3MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMTIzICAgMjE2MzQ1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwMjEyICAgMjA4Nzk1IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIFdTIHdpemFyZCBmcmFtZXdvcmsgc2hvdWxkIHN1cHBvcnQgRUpCIDMuMAotICogMjAwODAyMjkgICAyMTg2OTYgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgQVBJcyB1c2luZyBFSkJBcnRpZmFjdEVkaXQgbm90IGFibGUgdG8gZGVhbCB3aXRoIHNvbWUgRUpCIDMuMCBiZWFucyBwcm9wZXJseQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSUpvYk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5sb2dnZXIucHJveHkuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmFwcGxpY2F0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuQWRkQ29tcG9uZW50VG9FbnRlcnByaXNlQXBwbGljYXRpb25EYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb21tb25hcmNoaXZlY29yZS5pbnRlcm5hbC5oZWxwZXJzLkFyY2hpdmVNYW5pZmVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCSmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRW50ZXJwcmlzZUJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLlNlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLlNlc3Npb25UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5jb21wb25lbnRjb3JlLnV0aWwuRUpCQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLmNvbW1vbi5KMkVFVmVyc2lvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuY29tbW9uLmNsYXNzcGF0aC5KMkVFQ29tcG9uZW50Q2xhc3NwYXRoVXBkYXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wbHVnaW4uSUoyRUVNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5tb2RlbC5JTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5tb2RlbC5Nb2RlbFByb3ZpZGVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5wcm9qZWN0LmZhY2V0LklKYXZhUHJvamVjdE1pZ3JhdGlvbkRhdGFNb2RlbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5KYXZhUHJvamVjdE1pZ3JhdGlvbkRhdGFNb2RlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuZWpiLkVudGVycHJpc2VCZWFuczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5TZXNzaW9uQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLk1vZHVsZUNvcmVOYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmRhdGFtb2RlbC5wcm9wZXJ0aWVzLklDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwub3BlcmF0aW9uLkNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5Db21wb25lbnRVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuSU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5EYXRhTW9kZWxGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuSURhdGFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuaW50ZXJuYWwub3BlcmF0aW9ucy5Qcm9qZWN0Q3JlYXRpb25EYXRhTW9kZWxQcm92aWRlck5ldzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyVXRpbDsKLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBzb21lIHVzZWZ1bCBKMkVFIHV0aWxpdGllcyBmb3IgV2ViIHNlcnZpY2VzIGludGVybmFsIHVzZS4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEoyRUVVdGlscyB7Ci0JCi0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV0VCID0gMTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBFSkIgPSAyOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEFQUENMSUVOVCA9IDQ7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRUFSID0gODsJCi0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBJVmlydHVhbENvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0VmlydHVhbENvbXBvbmVudChJUHJvamVjdCBwcm9qZWN0KXsKLQkJcmV0dXJuIENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCX0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdE5hbWUKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXRWaXJ0dWFsQ29tcG9uZW50KFN0cmluZyBwcm9qZWN0TmFtZSl7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBudWxsOwotCQlpZiAocHJvamVjdE5hbWUhPW51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCkgPiAwICkKLSAgICAgIHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQkKLQkJcmV0dXJuIENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCX0KLQkKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEoyRUUgdmVyc2lvbgotCSAqIEBwYXJhbSBwIHByb2plY3QKLQkgKiBAcmV0dXJuIGludAotCSAqLwotCXB1YmxpYyBzdGF0aWMgaW50IGdldEoyRUVWZXJzaW9uKElQcm9qZWN0IHApewotCQkKLQkJU3RyaW5nIHZlciA9IEoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldEoyRUVQcm9qZWN0VmVyc2lvbihwKTsKLQkJcmV0dXJuIEoyRUVWZXJzaW9uVXRpbC5jb252ZXJ0VmVyc2lvblN0cmluZ1RvSW50KHZlcik7Ci0KLQkJLyoKLQkJaW50IGoyZWVWZXIgPSAtMTsKLQkJdHJ5IHsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHApOwotICAgICAgICAgIGlmICh2YyE9bnVsbCl7Ci0gICAgICAgICAgICBqMmVlVmVyID0gZ2V0SjJFRVZlcnNpb24odmMpOwotICAgICAgICAgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCX0KLQkJcmV0dXJuIGoyZWVWZXI7Ci0JCSovCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgaW50IGdldEoyRUVWZXJzaW9uKElWaXJ0dWFsQ29tcG9uZW50IGNoKXsKLSAgICAgIGludCBqMmVlVmVyID0gLTE7Ci0gICAgICAvL2NoZWNrIHR5cGUKLSAgICAgIGlmIChjaCE9bnVsbCl7Ci0gICAgCSAgSVByb2plY3QgcHJvamVjdCA9IGNoLmdldFByb2plY3QoKTsKLSAgICAJICBqMmVlVmVyID0gZ2V0SjJFRVZlcnNpb24ocHJvamVjdCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8qICBVc2UgbmV3IEFQSSBwcm92aWRlZCBieSBKMkVFIAotICAgICAgaWYgKGNoIT1udWxsKSB7Ci0gICAgICAgIGlmIChpc1dlYkNvbXBvbmVudChjaCkpCi0gICAgICAgICAgajJlZVZlciA9IGdldFdlYkNvbXBvbmVudEoyRUVWZXJzaW9uKGNoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNBcHBDbGllbnRDb21wb25lbnQoY2gpKQotICAgICAgICAgIGoyZWVWZXIgPSBnZXRBcHBDbGllbnRDb21wb25lbnRKMkVFVmVyc2lvbihjaCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzRUpCQ29tcG9uZW50KGNoKSkKLSAgICAgICAgICBqMmVlVmVyID0gZ2V0RUpCQ29tcG9uZW50SjJFRVZlcnNpb24oY2gpOwotICAgICAgICBlbHNlIGlmIChpc0VBUkNvbXBvbmVudChjaCkpCi0gICAgICAgICAgajJlZVZlciA9IGdldEVBUkNvbXBvbmVudEoyRUVWZXJzaW9uKGNoKTsKLSAgICAgIH0KLSAgICAgICovCi0gICAgICAKLSAgICAgIHJldHVybiBqMmVlVmVyOyAKLQl9Ci0JCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKMkVFVmVyc2lvbgotCSAqIEBwYXJhbSBwIElQcm9qZWN0Ci0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKMkVFVmVyc2lvbkFzU3RyaW5nKElQcm9qZWN0IHApewotCQkKLQkJU3RyaW5nIHZlciA9IEoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldEoyRUVQcm9qZWN0VmVyc2lvbihwKTsKLQkJcmV0dXJuICB2ZXIgIT0gbnVsbCA/IHZlciA6IG51bGw7Ci0JCSAKLQkJLyoKLQkJaW50IGoyZWVWZXIgPSBnZXRKMkVFVmVyc2lvbihwKTsKLQkJaWYgKGoyZWVWZXIhPS0xKXsKLQkJCXJldHVybiBKMkVFVmVyc2lvblV0aWwuZ2V0SjJFRVRleHRWZXJzaW9uKGoyZWVWZXIpOwotCQl9Ci0JCWVsc2UgCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCSovCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRBbGxDb21wb25lbnRzKCl7Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3RzW2ldKTsKLSAgICAgICAgICBpZih2YyAhPSBudWxsKQotICAgICAgICAJICB2LmFkZCh2Yyk7Ci0gICAgICAgICAgfQotCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbGwgdGhlIEVBUiBjb21wb25lbnRzIGluIHRoZSB3b3Jrc3BhY2UKLQkgKiBAcmV0dXJuIElWaXJ0dWFsQ29tcG9uZW50W107IGVtcHR5IGlmIG5vbmUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QWxsRUFSQ29tcG9uZW50cygpIHsKLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlJVmlydHVhbENvbXBvbmVudFtdIGNvbXBvbmVudHMgPSBnZXRFQVJDb21wb25lbnRzRnJvbVByb2plY3QocHJvamVjdHNbaV0pOwotCQkJCWZvciAoaW50IGo9MDsgajxjb21wb25lbnRzLmxlbmd0aDsgaisrKSB7Ci0JCQkJCWlmIChjb21wb25lbnRzW2pdIT1udWxsKQotCQkJCQkJdi5hZGQoY29tcG9uZW50c1tqXSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQkJfQotCi0JCX0KLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QWxsV2ViQ29tcG9uZW50cygpewotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gY29tcG9uZW50cyA9IGdldFdlYkNvbXBvbmVudHMocHJvamVjdHNbaV0pOwotCQkJCWZvciAoaW50IGo9MDsgajxjb21wb25lbnRzLmxlbmd0aDsgaisrKSB7Ci0JCQkJCWlmIChjb21wb25lbnRzW2pdIT1udWxsKQotCQkJCQkJdi5hZGQoY29tcG9uZW50c1tqXSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQkJfQotCi0JCX0KLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkJCi0JfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRBbGxFSkJDb21wb25lbnRzKCl7Ci0gICAgICAgIExpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3RzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzID0gZ2V0RUpCQ29tcG9uZW50cyhwcm9qZWN0c1tpXSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGNvbXBvbmVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudHNbal0hPW51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB2LmFkZChjb21wb25lbnRzW2pdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgLy9oYW5kbGUgZXhjZXB0aW9uCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7ICAgICAgICAKLSAgICB9ICAgIAotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEVBUiBjb21wb25lbnRzIGluIGEgZ2l2ZW4gSVByb2plY3QKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4gZW1wdHkgaWYgbm8gRUFSIGNvbXBvbmVudHM7IG11c3Qgbm90IHJldHVybiBudWxsCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEVBUkNvbXBvbmVudHNGcm9tUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KXsKLQkJLy9nZXQgYWxsIGNvbXBvbmVudHMgaW4gdGhlIHByb2plY3QKLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwkJCi0JCXRyeSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCWlmIChjb21wb25lbnQgIT0gbnVsbCAmJiBpc0VBUkNvbXBvbmVudChjb21wb25lbnQpKXsKLQkJCQl2LmFkZChjb21wb25lbnQpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIFdlYiBjb21wb25lbnRzIGluIGEgcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybiBlbXB0eSBhcnJheSBpZiBubyB3ZWIgY29tcG9uZW50czsgbXVzdCBub3QgcmV0dXJuIG51bGwKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0V2ViQ29tcG9uZW50cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCi0JCQkJaWYgKGNvbXBvbmVudCAhPSBudWxsICYmIGlzV2ViQ29tcG9uZW50KGNvbXBvbmVudCkpewotCQkJCQl2LmFkZChjb21wb25lbnQpOwotCQkJCX0JCQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfSAKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFdlYkNvbXBvbmVudE5hbWVzKElQcm9qZWN0IHByb2plY3QpewotCQlJVmlydHVhbENvbXBvbmVudFtdIHZjcyA9IGdldFdlYkNvbXBvbmVudHMocHJvamVjdCk7Ci0JCXJldHVybiB0b0NvbXBvbmVudE5hbWVzQXJyYXkodmNzKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRFQVJDb21wb25lbnROYW1lcyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MgPSBnZXRFQVJDb21wb25lbnRzRnJvbVByb2plY3QocHJvamVjdCk7Ci0JCXJldHVybiB0b0NvbXBvbmVudE5hbWVzQXJyYXkodmNzKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbGwgY29tcG9uZW50cyBvZiB0eXBlLCBjb21wb25lbnRUeXBlIGluIHRoZSBwcm9qZWN0LgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHBhcmFtIGNvbXBvbmVudFR5cGUgaS5lLiBKMkVFVXRpbHMuV0VCCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRDb21wb25lbnRzQnlUeXBlKElQcm9qZWN0IHByb2plY3QsIGludCBjb21wb25lbnRUeXBlKXsKLQkJCi0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaWYgKCAoV0VCICYgY29tcG9uZW50VHlwZSk9PVdFQiApewotCQkJSVZpcnR1YWxDb21wb25lbnRbXSB3ZWJWQyA9IGdldFdlYkNvbXBvbmVudHMocHJvamVjdCk7Ci0JCQlhZGRUb0FycmF5TGlzdEhlbHBlcih3ZWJWQywgdik7Ci0JCX0KLQkJaWYgKCAoRUpCICYgY29tcG9uZW50VHlwZSk9PUVKQiApewotCQkJSVZpcnR1YWxDb21wb25lbnRbXSBlamJWQyA9IGdldEVKQkNvbXBvbmVudHMocHJvamVjdCk7Ci0JCQlhZGRUb0FycmF5TGlzdEhlbHBlcihlamJWQywgdik7Ci0JCX0KLQkJaWYgKCAoQVBQQ0xJRU5UICYgY29tcG9uZW50VHlwZSk9PUFQUENMSUVOVCApIHsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gYXBwQ2xpZW50VkMgPSBnZXRBcHBDbGllbnRDb21wb25lbnRzKHByb2plY3QpOwotCQkJYWRkVG9BcnJheUxpc3RIZWxwZXIoYXBwQ2xpZW50VkMsIHYpOwotCQl9Ci0JCWlmICggKEVBUiAmIGNvbXBvbmVudFR5cGUpPT1FQVIgKSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudFtdIGVhclZDID0gZ2V0RUFSQ29tcG9uZW50c0Zyb21Qcm9qZWN0KHByb2plY3QpOwotCQkJYWRkVG9BcnJheUxpc3RIZWxwZXIoZWFyVkMsIHYpOwotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7CQkKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbGwgY29tcG9uZW50cyBvZiB0eXBlLCBjb21wb25lbnRUeXBlIGluIHRoZSBwcm9qZWN0LgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHBhcmFtIGNvbXBvbmVudFR5cGVJZCBhcyBkZWZpbmVkIGluIElNb2R1bGVDb25zdGFudHMuCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRDb21wb25lbnRzQnlUeXBlKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBjb21wb25lbnRUeXBlSWQpewotCQkKLQkJLy9nZXQgYWxsIGNvbXBvbmVudHMgaW4gdGhlIHByb2plY3Qgb2YgdHlwZSBjb21wb25lbnRUeXBlSWQKLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnkgewotCi0JCQlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwkKLQkJCWlmICggdmMgIT0gbnVsbCAmJiBKMkVFUHJvamVjdFV0aWxpdGllcy5pc1Byb2plY3RPZlR5cGUocHJvamVjdCxjb21wb25lbnRUeXBlSWQpKQotCQkJewotCQkJCXYuYWRkKHZjKTsKLQkJCX0KLQkJCS8vaWYgKGlzV2ViQ29tcG9uZW50KHByb2plY3QsIGNvbXBvbmVudHNbaV0uZ2V0TmFtZSgpKSl7Ci0JCQkJLy92LmFkZChjb21wb25lbnRzW2ldKTsKLQkJCS8vfQkJCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCX0KLQkJCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRQcm9qZWN0c0NvbnRhaW5pbmdDb21wb25lbnRPZlR5cGUoU3RyaW5nIGNvbXBvbmVudFR5cGVJZCkKLQl7Ci0JICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOyAKLQkgICAgSVZpcnR1YWxDb21wb25lbnRbXSBjb21wcyA9IGdldEFsbENvbXBvbmVudHMoKTsKLQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wcy5sZW5ndGg7IGkrKykgewotCQkJaWYgKEoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzUHJvamVjdE9mVHlwZShjb21wc1tpXS5nZXRQcm9qZWN0KCksY29tcG9uZW50VHlwZUlkKSkKLQkJCXsKLQkJCQkvL0FkZCB0aGUgcHJvamVjdCBuYW1lIHRvIHRoZSB2ZWN0b3IgaWYgaXQgaGFzIG5vdCBiZWVuIGFkZGVkIGFscmVhZHkKLQkJCQlTdHJpbmcgbmFtZSA9IGNvbXBzW2ldLmdldFByb2plY3QoKS5nZXROYW1lKCk7Ci0JCQkJaWYgKCF2LmNvbnRhaW5zKG5hbWUpKQotCQkJCXsKLQkJCQkJdi5hZGQobmFtZSk7CQotCQkJCX0JCSAgICAgICAgCQkJCi0JCQl9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAoU3RyaW5nW10pdi50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLSAgIAotCS8qKgotCSAqIEhlbHBlciBtZXRob2QgZm9yIGdldENvbXBvbmVudHNCeVR5cGUKLQkgKiBAcGFyYW0gdmNzCi0JICogQHBhcmFtIHZlY3QKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFRvQXJyYXlMaXN0SGVscGVyKElWaXJ0dWFsQ29tcG9uZW50W10gdmNzLCBMaXN0IGFsKXsKLQkJZm9yIChpbnQgaT0wO2k8dmNzLmxlbmd0aDtpKyspewotCQkJYWwuYWRkKHZjc1tpXSk7Ci0JCX0JCQotCX0KLQotCQotCS8qKgotCSAqIEVzc2VudGlhbGx5LCByZXR1cm5zIGFsbCBwcm9qZWN0cyBpbiB0aGUgd29ya3NwYWNlCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3RbXSBnZXRBbGxGbGV4aWJsZVByb2plY3RzKCl7Ci0KLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnkgewotCQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0QWxsUHJvamVjdHMoKTsKLQkJCWZvcihpbnQgaT0wOyBpPHByb2plY3RzLmxlbmd0aDtpKyspIHsKLQkJCQlpZiAoTW9kdWxlQ29yZU5hdHVyZS5nZXRNb2R1bGVDb3JlTmF0dXJlKHByb2plY3RzW2ldKSE9bnVsbCl7Ci0JCQkJCXYuYWRkKHByb2plY3RzW2ldKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGUpewotCQl9Ci0KLQkJcmV0dXJuIChJUHJvamVjdFtdKXYudG9BcnJheShuZXcgSVByb2plY3RbMF0pOwotCX0KLQkKLQkKLQkvKioKLQkgKiBUcnVlIGlmIHRoZXJlIGV4aXN0cyBhIHVuZGVybHlpbmcgcmVzb3VyY2UgYmFja2luZyB1cCB0aGUgY29tcG9uZW50IGFuZCBwcm9qZWN0IAotCSAqIEBwYXJhbSBwcm9qZWN0TmFtZQotCSAqIEBwYXJhbSBjb21wb25lbnROYW1lCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBleGlzdHMoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgY29tcG9uZW50TmFtZSl7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBudWxsOwotCQlpZiAocHJvamVjdE5hbWUhPW51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCkgPiAwICkgewotCQkgIHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JCQotCQlyZXR1cm4gZXhpc3RzKHByb2plY3QpOwotCX0KLQkKLQkvKioKLQkgKiBUcnVlIGlmIHRoZXJlIGV4aXN0cyBhIHVuZGVybHlpbmcgcmVzb3VyY2UgYmFja2luZyB1cCB0aGUgY29tcG9uZW50IGFuZCBwcm9qZWN0Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGV4aXN0cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJaWYgKHByb2plY3QhPW51bGwpIHsKLSAgICAgICAgICAgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0JCQlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJcmV0dXJuIHZjLmV4aXN0cygpOwotCQl9Ci0JCWVsc2UgCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCQotCX0JCi0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIEVBUiBjb21wb25lbnRzIHdoaWNoIGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBjb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0UmVmZXJlbmNpbmdFQVJDb21wb25lbnRzKElQcm9qZWN0IHByb2plY3QpewotCQlMaXN0IGVhcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXRyeXsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50IHRhcmdldFZDID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCQkKLQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gZWFyVkMgPSBnZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0JCQlmb3IgKGludCBpPTA7IGk8ZWFyVkMubGVuZ3RoO2krKykgewotCQkJCUlWaXJ0dWFsUmVmZXJlbmNlW10gcmVmcyA9IGVhclZDW2ldLmdldFJlZmVyZW5jZXMoKTsKLQkJCQlmb3IgKGludCBrPTA7azxyZWZzLmxlbmd0aDtrKyspIHsKLQkJCQkJaWYgKHRhcmdldFZDLmVxdWFscyhyZWZzW2tdLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSkpewotCQkJCQkJZWFycy5hZGQocmVmc1trXS5nZXRFbmNsb3NpbmdDb21wb25lbnQoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQl9Ci0KLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKWVhcnMudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwotCX0KLQkKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBFSkIgQ29tcG9uZW50cyByZWZlcmVuY2VkIGJ5IHRoZSBlYXIKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0UmVmZXJlbmNpbmdFSkJDb21wb25lbnRzRnJvbUVBUihJUHJvamVjdCBwcm9qZWN0KXsKLQotCQlMaXN0IGVqYkNvbXBzID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnl7Ci0JCQlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJSVZpcnR1YWxSZWZlcmVuY2VbXSByZWZzID0gdmMuZ2V0UmVmZXJlbmNlcygpOwotCQkJZm9yIChpbnQgaT0wO2k8cmVmcy5sZW5ndGg7aSsrKXsKLQkJCQlpZiAoaXNFSkJDb21wb25lbnQocmVmc1tpXS5nZXRSZWZlcmVuY2VkQ29tcG9uZW50KCkpKXsKLQkJCQkJZWpiQ29tcHMuYWRkKHJlZnNbaV0uZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGUpewotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pZWpiQ29tcHMudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkJCi0JfQotCi0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGphcgotCSAqIEByZXR1cm4gIFZlY3RvciBvZiBiZWFuIFN0cmluZyBuYW1lcy4KLQkgKiBAZGVwcmVjYXRlZCB1c2UgZ2V0QmVhbk5hbWVzKElQcm9qZWN0IHByb2plY3QpCi0JICovCi0JcHVibGljIHN0YXRpYyBWZWN0b3IgZ2V0QmVhbk5hbWVzKEVKQkphciBqYXIpIHsKLQkJLy8gV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBTdGF0ZWxlc3Mgc2Vzc2lvbiBiZWFucy4KLQkJLy8gTGlzdCBjbXBCZWFucyA9IGphci5nZXRCZWFuTWFuYWdlZEJlYW5zKCk7Ci0JCS8vIExpc3QgYm1wQmVhbnMgPSBqYXIuZ2V0Q29udGFpbmVyTWFuYWdlZEJlYW5zKCk7Ci0JCUxpc3Qgc2Vzc2lvbkJlYW5zID0gamFyLmdldFNlc3Npb25CZWFucygpOwotCi0JCVZlY3RvciBuYW1lcyA9IG5ldyBWZWN0b3IoKTsKLQotCQkvLyBnZXRCZWFuTmFtZXMoIG5hbWVzLCBjbXBCZWFucyApOwotCQkvLyBnZXRCZWFuTmFtZXMoIG5hbWVzLCBibXBCZWFucyApOwotCQlnZXRCZWFuTmFtZXMobmFtZXMsIHNlc3Npb25CZWFucyk7Ci0KLQkJcmV0dXJuIG5hbWVzOwotCX0KLQotCQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0LSB0aGUgcHJvamVjdCB0byBmaW5kIHN0YXRlbGVzcyBzZXNzaW9uIGJlYW5zIGluCi0JICogQHJldHVybiAgVmVjdG9yIG9mIGJlYW4gU3RyaW5nIG5hbWVzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVmVjdG9yIGdldEJlYW5OYW1lcyhJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCS8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgU3RhdGVsZXNzIHNlc3Npb24gYmVhbnMuCi0JCVZlY3RvciBuYW1lcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJSU1vZGVsUHJvdmlkZXIgcHJvdmlkZXIgPSBNb2RlbFByb3ZpZGVyTWFuYWdlci5nZXRNb2RlbFByb3ZpZGVyKHByb2plY3QpOwotICAgIAlPYmplY3QgbW9kZWxPYmplY3QgPSBwcm92aWRlci5nZXRNb2RlbE9iamVjdCgpOwotCi0gICAgCUxpc3Qgc2Vzc2lvbkJlYW5zID0gbmV3IFZlY3RvcigpOwotCQlib29sZWFuIGlzSjJFRTUgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5pc0pFRVByb2plY3QocHJvamVjdCk7Ci0JCWlmIChpc0oyRUU1KSB7Ci0gICAgCQkvL2EgSkVFNSBwcm9qZWN0Ci0gICAgCQlFbnRlcnByaXNlQmVhbnMgZUJlYW5zID0gKChvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FSkJKYXIpbW9kZWxPYmplY3QpLmdldEVudGVycHJpc2VCZWFucygpOwotICAgIAkJaWYgKGVCZWFucyAhPW51bGwpCi0gICAgCQkJc2Vzc2lvbkJlYW5zID0gZUJlYW5zLmdldFNlc3Npb25CZWFucygpOwotICAgIAl9IGVsc2UgewotICAgIAkJc2Vzc2lvbkJlYW5zID0gKChFSkJKYXIpbW9kZWxPYmplY3QpLmdldFNlc3Npb25CZWFucygpOwotICAgIAl9Ci0KLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXNzaW9uQmVhbnMuaXRlcmF0b3IoKTsKLQotCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3QgbmV4dCA9IChpdGVyYXRvci5uZXh0KCkpOwotCQkJaWYgKG5leHQgaW5zdGFuY2VvZiBFbnRlcnByaXNlQmVhbikgewotCQkJCUVudGVycHJpc2VCZWFuIGJlYW4gPSAoRW50ZXJwcmlzZUJlYW4pIG5leHQ7Ci0KLQkJCQlpZiAoYmVhbi5pc1Nlc3Npb24oKSkgewotCQkJCQlTZXNzaW9uIHNlc3Npb25CZWFuID0gKFNlc3Npb24pIGJlYW47Ci0KLQkJCQkJaWYgKHNlc3Npb25CZWFuLmdldFNlc3Npb25UeXBlKCkuZ2V0VmFsdWUoKSA9PSBTZXNzaW9uVHlwZS5TVEFURUxFU1MpIHsKLQkJCQkJCW5hbWVzLmFkZChiZWFuLmdldE5hbWUoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCVNlc3Npb25CZWFuIGJlYW4gPSAoU2Vzc2lvbkJlYW4pIG5leHQ7Ci0JCQkJaWYgKGJlYW4uZ2V0U2Vzc2lvblR5cGUoKS5nZXRWYWx1ZSgpID09IFNlc3Npb25UeXBlLlNUQVRFTEVTUykgewotCQkJCQluYW1lcy5hZGQoYmVhbi5nZXRFamJOYW1lKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbmFtZXM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWVzCi0JICogICAgICAgICAgICBzcGVjaWZpZXMgdGhhdCB2ZWN0b3Igb2Ygc3RyaW5ncyB0aGF0IHdpbGwgYmUgdXNlZCB0byBhZGQgYmVhbgotCSAqICAgICAgICAgICAgbmFtZXMgdG8uCi0JICogQHBhcmFtIGJlYW5zCi0JICogICAgICAgICAgICBzcGVjaWZpZXMgYSBsaXN0IG9mIGJlYW5zLgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QmVhbk5hbWVzKFZlY3RvciBuYW1lcywgTGlzdCBiZWFucykgewotCQlJdGVyYXRvciBpdGVyYXRvciA9IGJlYW5zLml0ZXJhdG9yKCk7Ci0KLQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJRW50ZXJwcmlzZUJlYW4gYmVhbiA9IChFbnRlcnByaXNlQmVhbikgKGl0ZXJhdG9yLm5leHQoKSk7Ci0KLQkJCWlmIChiZWFuLmlzU2Vzc2lvbigpKSB7Ci0JCQkJU2Vzc2lvbiBzZXNzaW9uQmVhbiA9IChTZXNzaW9uKSBiZWFuOwotCi0JCQkJaWYgKHNlc3Npb25CZWFuLmdldFNlc3Npb25UeXBlKCkuZ2V0VmFsdWUoKSA9PSBTZXNzaW9uVHlwZS5TVEFURUxFU1MpIHsKLQkJCQkJbmFtZXMuYWRkKGJlYW4uZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLyoqCi0JICogVXNlcyBqZW0gUHJvamVjdFV0aWxpdGllcyB0byBnZXQgdGhlIHByb2plY3QKLQkgKiBAcGFyYW0gZWpiIGVPYmplY3QKLQkgKiBAcmV0dXJuIElQcm9qZWN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbUVKQihFbnRlcnByaXNlQmVhbiBlamIpIHsKLQkJcmV0dXJuIFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlamIpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBkZWZhdWx0IEoyRUUgMS4zIEVBUiBjb21wb25lbnQgaW4gdGhlIHdvcmtzcGFjZQotCSAqIEByZXR1cm4gRUFSIGNvbXBvbmVudCBuYW1lCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXREZWZhdWx0MTNFQVJDb21wb25lbnQoKXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSBhbGxFQVJDb21wb25lbnRzID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQlmb3IgKGludCBqPTA7ajxhbGxFQVJDb21wb25lbnRzLmxlbmd0aDtqKyspewotCQkJaW50IGoyZWVWZXJzaW9uID0gZ2V0SjJFRVZlcnNpb24oYWxsRUFSQ29tcG9uZW50c1tqXSk7Ci0JCQlpZiAoajJlZVZlcnNpb24gPT0gSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQpCi0JCQkJIHJldHVybiBhbGxFQVJDb21wb25lbnRzW2pdOwotCQkgfQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYSBkZWZhdWx0IEoyRUUgMS40IEVBUiBjb21wb25lbnQgaW4gdGhlIHdvcmtzcGFjZQotCSAqIEByZXR1cm4gRUFSIGNvbXBvbmVudCBuYW1lCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXREZWZhdWx0MTRFQVJDb21wb25lbnQoKXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSBhbGxFQVJDb21wb25lbnRzID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQlmb3IgKGludCBqPTA7ajxhbGxFQVJDb21wb25lbnRzLmxlbmd0aDtqKyspewotCQkJaW50IGoyZWVWZXJzaW9uID0gZ2V0SjJFRVZlcnNpb24oYWxsRUFSQ29tcG9uZW50c1tqXSk7Ci0JCQlpZiAoajJlZVZlcnNpb24gPT0gSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpCi0JCQkJIHJldHVybiBhbGxFQVJDb21wb25lbnRzW2pdOwotCQkgfQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IEVBUiBjb21wb25lbnQgb2YgdGhlIEoyRUUgdmVyc2lvbgotCSAqIEBwYXJhbSB2ZXJzaW9uSWQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXRFQVJDb21wb25lbnRvZkoyRUVWZXJzaW9uKGludCB2ZXJzaW9uSWQpewotCQlJVmlydHVhbENvbXBvbmVudFtdIGNvbXBvbmVudHMgPSBnZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0JCWZvciAoaW50IGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSsrKXsKLQkJCWlmIChnZXRKMkVFVmVyc2lvbihjb21wb25lbnRzW2ldKSA9PSB2ZXJzaW9uSWQpCi0JCQkJcmV0dXJuIGNvbXBvbmVudHNbaV07Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGoyZWVWZXJzaW9uSW50Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExhYmVsRnJvbUoyRUVWZXJzaW9uKFN0cmluZyBqMmVlVmVyc2lvbkludCkgewotCQlpZiAoajJlZVZlcnNpb25JbnQgPT0gbnVsbCB8fCBqMmVlVmVyc2lvbkludC5sZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuICIiOwotCi0JCWludCBqMmVlVmVyc2lvbiA9IEludGVnZXIucGFyc2VJbnQoajJlZVZlcnNpb25JbnQpOwotCQlzd2l0Y2ggKGoyZWVWZXJzaW9uKSB7Ci0JCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEIDoKLQkJCQlyZXR1cm4gSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzJfVEVYVDsKLQkJCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQgOgotCQkJCXJldHVybiBKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUOwotCQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCA6Ci0JCQkJcmV0dXJuIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQ7Ci0JCQlkZWZhdWx0IDoKLQkJCQlyZXR1cm4gIiI7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKMkVFVmVyc2lvbkZyb21MYWJlbChTdHJpbmcgajJlZUxhYmVsKSB7Ci0JCVN0cmluZyBqMmVlMTJTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCk7Ci0JCVN0cmluZyBqMmVlMTNTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCk7Ci0JCVN0cmluZyBqMmVlMTRTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCk7Ci0JCWlmIChqMmVlTGFiZWwuZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQpKQotCQkJcmV0dXJuIGoyZWUxMlN0cmluZzsKLQotCQlpZiAoajJlZUxhYmVsLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKSkKLQkJCXJldHVybiBqMmVlMTNTdHJpbmc7Ci0KLQkJaWYgKGoyZWVMYWJlbC5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCkpCi0JCQlyZXR1cm4gajJlZTE0U3RyaW5nOwotCi0JCXJldHVybiAiIjsKLQotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIFN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgSjJFRSB2ZXJzaW9ucwotCSAqIEBwYXJhbSBhVmVyc2lvbgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKMkVFSW50VmVyc2lvbkFzU3RyaW5nKFN0cmluZyBhVmVyc2lvbikgewotCQlpZiAoYVZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpKQotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKS50b1N0cmluZygpOwotCQlpZiAoYVZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8zX1RFWFQpKQotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKS50b1N0cmluZygpOwotCQlpZiAoYVZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQpKQotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEKS50b1N0cmluZygpOwkJCi0JCS8vIGRlZmF1bHQKLQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKS50b1N0cmluZygpOwotCX0JCi0KLQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotCi0JLyoqCi0JICogCi0JICogQHJldHVybgotCSAqIAotCSAqIEBkZXByZWNhdGVkICAvLyB1c2UgZ2V0QUxMRUFSQ29tcG9uZW50cwotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3RbXSBnZXRFQVJQcm9qZWN0cygpIHsKLQkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotLy8JCQkJaWYgKHByb2plY3RzW2ldLmhhc05hdHVyZShJRUFSTmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCkpIHsKLQkJCQlpZiAoUmVzb3VyY2VVdGlscy5pc0VBUlByb2plY3QocHJvamVjdHNbaV0pKSB7Ci0JCQkJCXYuYWRkKHByb2plY3RzW2ldKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCQl9Ci0KLQkJfQotCi0JCXJldHVybiAoSVByb2plY3RbXSl2LnRvQXJyYXkobmV3IElQcm9qZWN0WzBdKTsKLQl9Ci0JCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgRUFSIHByb2plY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9qZWN0IGFuZCBzZXJ2ZXIKLQkgKiBAcGFyYW0gc2VydmljZVByb2plY3QKLQkgKiBAcGFyYW0gc2VydmVyCi0JICogQHJldHVybgotCSAqIAotCSAqIEBkZXByZWNhdGVkICAvLyB0byBiZSBzaW1wbGlmaWVkCi0JICovCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBnZXREZWZhdWx0RUFSUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCwgSVNlcnZlciBzZXJ2ZXIpIHsKLQotCQlJUHJvamVjdFtdIGVhclByb2plY3RzID0gbnVsbDsKLQkJSVByb2plY3QgZWFyID0gbnVsbDsKLQotCQlpZiAoc2VydmljZVByb2plY3QgIT0gbnVsbCAmJiBzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQotCQkJCWJvb2xlYW4gaXNXZWJFSkJPckFwcENsaWVudCA9IFJlc291cmNlVXRpbHMuaXNXZWJQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KSAvL3NlcnZpY2VQcm9qZWN0Lmhhc05hdHVyZShJV2ViTmF0dXJlQ29uc3RhbnRzLkoyRUVfTkFUVVJFX0lEKQotCQkJCQkJfHwgIFJlc291cmNlVXRpbHMuaXNFSkJQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KSAvL3NlcnZpY2VQcm9qZWN0Lmhhc05hdHVyZShJRUpCTmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCkKLQkJCQkJCXx8ICBSZXNvdXJjZVV0aWxzLmlzQXBwQ2xpZW50UHJvamVjdChzZXJ2aWNlUHJvamVjdCk7Ly9zZXJ2aWNlUHJvamVjdC5oYXNOYXR1cmUoSUFwcGxpY2F0aW9uQ2xpZW50TmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCk7Ci0JCQkJaWYgKCFpc1dlYkVKQk9yQXBwQ2xpZW50KSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCUlQcm9qZWN0W10gZWFycyA9IGdldEVBUlByb2plY3RzKCk7Ci0KLQkJCQkvLyBzZXBhcmF0ZSBFQVJzIHdoaWNoIGFyZSBhbHJlYWR5IGRlcGxveWVkIHRvIHRoZSBleGlzdGluZwotCQkJCS8vIHNlcnZlcgotCQkJCWlmIChlYXJzICE9IG51bGwgJiYgZWFycy5sZW5ndGggPj0gMSkgewotCQkJCQlBcnJheUxpc3QgcHJlZmVycmVkRUFSTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQkJQXJyYXlMaXN0IHNlY29uZGFyeUVBUkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZWFycy5sZW5ndGg7IGkrKykgewotCQkJCQkJZWFyID0gZWFyc1tpXTsKLQkJCQkJCUlNb2R1bGUgbW9kdWxlID0gUmVzb3VyY2VVdGlscy5nZXRNb2R1bGUoZWFyKTsKLQkJCQkJCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJCQkJCWlmIChzZXJ2ZXIgIT0gbnVsbAotCQkJCQkJCQkJfHwgU2VydmVyVXRpbC5jb250YWluc01vZHVsZShzZXJ2ZXIsCi0JCQkJCQkJCQkJCW1vZHVsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSkpIHsKLQkJCQkJCQkJcHJlZmVycmVkRUFSTGlzdC5hZGQoZWFyKTsKLQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQlzZWNvbmRhcnlFQVJMaXN0LmFkZChlYXIpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkvLyBhZGQgc2Vjb25kYXJ5RUFSTGlzdCBpdGVtcyB0byBlbmQgb2YgcHJpbWFyeSBsaXN0Ci0JCQkJCWZvciAoaW50IGogPSAwOyBqIDwgc2Vjb25kYXJ5RUFSTGlzdC5zaXplKCk7IGorKykgewotCQkJCQkJcHJlZmVycmVkRUFSTGlzdC5hZGQoc2Vjb25kYXJ5RUFSTGlzdC5nZXQoaikpOwotCQkJCQl9Ci0JCQkJCS8vIHRvQXJyYXkKLQkJCQkJaWYgKHByZWZlcnJlZEVBUkxpc3QgIT0gbnVsbCkgewotCQkJCQkJZWFyUHJvamVjdHMgPSAoSVByb2plY3RbXSkgcHJlZmVycmVkRUFSTGlzdC50b0FycmF5KG5ldyBJUHJvamVjdFswXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gY2UpIHsKLQkJCQlJTG9nIGxvZyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0JCQkJbG9nLmxvZyhJTG9nLkVSUk9SLCA1MDM5LCBKMkVFVXRpbHMuY2xhc3MsICJnZXRFQVJQcm9qZWN0cyIsIGNlKTsKLQotCQkJfQotCQl9Ci0JCXJldHVybiBlYXJQcm9qZWN0c1swXTsKLQl9Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBFSkIgQ29tcG9uZW50cyBpbiB0aGUgcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRFSkJDb21wb25lbnRzKElQcm9qZWN0IHByb2plY3QpewotCQkKLQkJLy9nZXQgYWxsIGNvbXBvbmVudHMgaW4gdGhlIHByb2plY3QKLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwotCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJdHJ5IHsKLQkJCWlmIChjb21wb25lbnQgIT0gbnVsbCAmJiBpc0VKQkNvbXBvbmVudChjb21wb25lbnQpKXsKLQkJCQl2LmFkZChjb21wb25lbnQpOwotCQkJfQkKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCX0KLQkJCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9IAotCQotCS8qKgotCSAqIEdldHMgdGhlIEFwcGxpY2F0aW9uIENsaWVudCBjb21wb25lbnRzIGluIGEgcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QXBwQ2xpZW50Q29tcG9uZW50cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCi0JCQkJaWYgKGNvbXBvbmVudCAhPSBudWxsICYmIGlzQXBwQ2xpZW50Q29tcG9uZW50KGNvbXBvbmVudCkpewotCQkJCQl2LmFkZChjb21wb25lbnQpOwotCQkJCX0JCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfSAJCi0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFJlZmVyZW5jaW5nRUpCMjBDb21wb25lbnRzRnJvbUVBUihJUHJvamVjdCBwcm9qZWN0KXsKLQkJIAotCQlMaXN0IGVqYkNvbXBzID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnl7Ci0JCQlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJSVZpcnR1YWxSZWZlcmVuY2VbXSByZWZzID0gdmMuZ2V0UmVmZXJlbmNlcygpOwotCQkJZm9yIChpbnQgaT0wOyBpPHJlZnMubGVuZ3RoO2krKykgewotCQkJCWlmIChpc0VKQjIwQ29tcG9uZW50KHJlZnNbaV0uZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKSkKLQkJCQkJZWpiQ29tcHMuYWRkKHJlZnNbaV0uZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pZWpiQ29tcHMudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkJCi0JfQotCQotCQotCS8qKgotCSAqIFV0aWxpdHkgbWV0aG9kIHRvIGNvbWJpbmUgdHdvIElQcm9qZWN0W10KLQkgKiBAcGFyYW0gcHJvamVjdEFycmF5MQotCSAqIEBwYXJhbSBwcm9qZWN0QXJyYXkyCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3RbXSBjb21iaW5lUHJvamVjdEFycmF5cyhJUHJvamVjdFtdIHByb2plY3RBcnJheTEsCi0JCQlJUHJvamVjdFtdIHByb2plY3RBcnJheTIpIHsKLQotCQkvLyBjaGVjayBpZiBlaXRoZXIgb3IgYm90aCBhcnJheXMgYXJlIG51bGwuCi0JCWlmIChwcm9qZWN0QXJyYXkxID09IG51bGwgJiYgcHJvamVjdEFycmF5MiA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWVsc2UgaWYgKHByb2plY3RBcnJheTEgIT0gbnVsbCAmJiBwcm9qZWN0QXJyYXkyID09IG51bGwpCi0JCQlyZXR1cm4gcHJvamVjdEFycmF5MTsKLQkJZWxzZSBpZiAocHJvamVjdEFycmF5MSA9PSBudWxsICYmIHByb2plY3RBcnJheTIgIT0gbnVsbCkKLQkJCXJldHVybiBwcm9qZWN0QXJyYXkyOwotCi0JCUlQcm9qZWN0W10gY29tYmluZWRQcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtwcm9qZWN0QXJyYXkxLmxlbmd0aAotCQkJCSsgcHJvamVjdEFycmF5Mi5sZW5ndGhdOwotCi0JCVN5c3RlbS5hcnJheWNvcHkocHJvamVjdEFycmF5MSwgMCwgY29tYmluZWRQcm9qZWN0cywgMCwKLQkJCQlwcm9qZWN0QXJyYXkxLmxlbmd0aCk7Ci0JCWlmIChwcm9qZWN0QXJyYXkyLmxlbmd0aCA+IDApIHsKLQkJCVN5c3RlbS5hcnJheWNvcHkocHJvamVjdEFycmF5MiwgMCwgY29tYmluZWRQcm9qZWN0cywKLQkJCQkJcHJvamVjdEFycmF5MS5sZW5ndGgsIHByb2plY3RBcnJheTIubGVuZ3RoKTsKLQkJfQotCi0JCXJldHVybiBjb21iaW5lZFByb2plY3RzOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRSZWZlcmVuY2luZ1dlYkNvbXBvbmVudHNGcm9tRUFSKElQcm9qZWN0IHByb2plY3QpewotCQlMaXN0IHdlYkNvbXBzID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnl7Ci0JCQlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJSVZpcnR1YWxSZWZlcmVuY2VbXSByZWZzID0gdmMuZ2V0UmVmZXJlbmNlcygpOwotCQkJZm9yIChpbnQgaT0wOyBpPHJlZnMubGVuZ3RoO2krKykgewotCQkJCWlmIChpc1dlYkNvbXBvbmVudChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSkpCi0JCQkJCXdlYkNvbXBzLmFkZChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSk7Ci0JCQl9CQkJCi0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGUpewotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pd2ViQ29tcHMudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkKLQl9Ci0JCi0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZWpiQ29tcG9uZW50Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VKQjIwQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGVqYkNvbXBvbmVudCl7Ci0JCXJldHVybiBpc0VKQjIwQ29tcG9uZW50KGVqYkNvbXBvbmVudC5nZXRQcm9qZWN0KCkpOwotCX0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFSkIyMENvbXBvbmVudChJUHJvamVjdCBwcm9qZWN0KXsKLQkJYm9vbGVhbiBpc0VKQiA9IGZhbHNlOwotCQl0cnkgewotICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJICBpZiAoRUpCQXJ0aWZhY3RFZGl0LmlzVmFsaWRFSkJNb2R1bGUodmMpKSB7Ci0JCQkgIEVKQkFydGlmYWN0RWRpdCAgZWpiRWRpdCA9IG51bGw7Ci0JCQkgIHRyeSB7Ci0JCQkJICBlamJFZGl0ID0gRUpCQXJ0aWZhY3RFZGl0LmdldEVKQkFydGlmYWN0RWRpdEZvclJlYWQodmMpOwotCQkJCSAgRUpCUmVzb3VyY2UgZWpiUmVzID0gZWpiRWRpdC5nZXRFSkJKYXJYbWlSZXNvdXJjZSgpOwotCQkJCSAgaWYgKGVqYlJlcy5nZXRNb2R1bGVWZXJzaW9uSUQoKT09IEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8yXzBfSUQpIHsKLQkJCQkJICByZXR1cm4gdHJ1ZTsKLQkJCQkgIH0KLQkJCSAgfQotCQkJICBmaW5hbGx5IHsKLQkJCQkgIGlmIChlamJFZGl0IT1udWxsKQotCQkJCQkgIGVqYkVkaXQuZGlzcG9zZSgpOwotCQkJICB9Ci0JCSAgfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBleCl7fQotCQkKLQkJcmV0dXJuIGlzRUpCOwkJCQotCX0KLQotCQotCS8qKgotCSAqIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGF0IGNvbXBOYW1lIGlzIHJlZmVyZW5jZWQgYnkgdGhlIGVhciBhdCBlYXJDb21wTmFtZQotCSAqIEBwYXJhbSBlYXJQcm9qZWN0Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ29tcG9uZW50QXNzb2NpYXRlZChJUHJvamVjdCBlYXJQcm9qZWN0LCBJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IHZjMSA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KGVhclByb2plY3QpOwotCQlJVmlydHVhbENvbXBvbmVudCB2YzIgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJcmV0dXJuIGlzQ29tcG9uZW50QXNzb2NpYXRlZCh2YzEsIHZjMik7Ci0JfQotCQotCS8qKgotCSAqIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGlzIHJlZmVyZW5jZWQgYnkgdGhlIGVhcgotCSAqIEBwYXJhbSBlYXIgCi0JICogQHBhcmFtIGNvbXBvbmVudAotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQ29tcG9uZW50QXNzb2NpYXRlZChJVmlydHVhbENvbXBvbmVudCBlYXIsIElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCl7Ci0JCWJvb2xlYW4gaXNBc3NvY2lhdGVkID0gZmFsc2U7Ci0JCQotCQkvLyBOb3RlOiBub3QgaW1wbGVtZW50ZWQgYnkgSjJFRSB5ZXQuLiB0byBiZSB1c2VkIGxhdGVyLgotCQlJVmlydHVhbFJlZmVyZW5jZVtdIGNvbXBSZWZzID0gZWFyLmdldFJlZmVyZW5jZXMoKTsKLQkJaWYgKGNvbXBSZWZzIT0gbnVsbCkgewotCQkJZm9yIChpbnQgaT0wO2k8Y29tcFJlZnMubGVuZ3RoO2krKyl7Ci0JCQkJSVZpcnR1YWxSZWZlcmVuY2UgdnJlZiA9IGNvbXBSZWZzW2ldOwotCQkJCWlmIChjb21wb25lbnQuZXF1YWxzKHZyZWYuZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKSkKLQkJCQkJCWlzQXNzb2NpYXRlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGlzQXNzb2NpYXRlZDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSBlYXJQcm9qZWN0Ci0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFzc29jaWF0ZUNvbXBvbmVudFRvRUFSKElQcm9qZWN0IHByb2plY3QsIElQcm9qZWN0IGVhclByb2plY3QpIHsKLQkJCi0gICAgICAgIElEYXRhTW9kZWwgYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwgPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgQWRkQ29tcG9uZW50VG9FbnRlcnByaXNlQXBwbGljYXRpb25EYXRhTW9kZWxQcm92aWRlcigpKTsKLQkJSVZpcnR1YWxDb21wb25lbnQgZWFyQ29tcCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KGVhclByb2plY3QpOwotICAgICAgICBhZGRDb21wb25lbnRUb0VBUkRhdGFNb2RlbC5zZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuU09VUkNFX0NPTVBPTkVOVCwgZWFyQ29tcCk7Ci0gICAgICAgIExpc3QgbW9kTGlzdCA9IChMaXN0KSBhZGRDb21wb25lbnRUb0VBUkRhdGFNb2RlbC5nZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuVEFSR0VUX0NPTVBPTkVOVF9MSVNUKTsKLSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdGFyZ2V0Q29tcCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgICBtb2RMaXN0LmFkZCh0YXJnZXRDb21wKTsKLQkJYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwuc2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVF9DT01QT05FTlRfTElTVCwgbW9kTGlzdCk7Ci0gICAgICAgIAotCQl0cnkgewotCQkJYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwuZ2V0RGVmYXVsdE9wZXJhdGlvbigpLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIuZ2V0TG9nZ2VyKCkubG9nKGUpOwotCQl9Ci0gICAgICAgICAgICAKLQl9Ci0gICAgCi0gICAgLyoKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcHJvamVjdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGVhclByb2plY3QuCi0gICAgICogQHJldHVybnMgSVN0YXR1cyBvZiBPSyBpZiB0aGUgcHJvamVjdCBpcyBhIFdlYiBwcm9qZWN0LCBFSkIgcHJvamVjdCwgb3IgQXBwQ2xpZW50Ci0gICAgICogcHJvamVjdCB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIEVBUiBwcm9qZWN0LiAKLSAgICAgKiBSZXR1cm5zIElTdGF0dXMgd2l0aCBhbiBFUlJPUiBzZXZlcml0eSBpZiB0aGUgcHJvamVjdCBpcyBhIFdlYiBwcm9qZWN0LCAKLSAgICAgKiBFSkIgcHJvamVjdCwgb3IgQXBwQ2xpZW50IHByb2plY3QgdGhhdCBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQVIgcHJvamVjdC4gCi0gICAgICogV2hlbiBhbiBJU3RhdHVzIG9mIHNldmVyaXR5IEVSUk9SIGlzIHJldHVybmVkLCB0aGUgSVN0YXR1cycgbWVzc2FnZSB3aWxsIGNvbnRhaW4gdGhlIAotICAgICAqIGxvd2VzdCBKMkVFIGxldmVsIHRoYXQgdGhpcyBwcm9qZWN0IHJlcXVpcmVzIG9uIGFuIEVBUi4KLSAgICAgKiBSZXR1cm5zIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBPSyBpZiBwcm9qZWN0IGlzIG5vdCByZWNvZ25pemVkIGFzIGEgV2ViLCBFSkIsIG9yCi0gICAgICogQXBwQ2xpZW50IHByb2plY3Qgb3IgaWYgZWFyUHJvamVjdCBpcyBub3QgcmVjb2duaXplZCBhcyBhbiBFQVIgcHJvamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIElTdGF0dXMgY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKElQcm9qZWN0IHByb2plY3QsIElQcm9qZWN0IGVhclByb2plY3QpCi0gICAgewotICAgICAgLy9JZiBwcm9qZWN0IGNvbnRhaW5zIHRoZSB3ZWIsIGVqYiwgb3IgYXBwY2xpZW50IGZhY2V0LCBhbmQgZWFyUHJvamVjdCBjb250YWlucyB0aGUgCi0gICAgICAvL2VhciBmYWNldCwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBmYWNldCB2ZXJzaW9ucyBhcmUgc3VjaCB0aGF0IHRoZSBwcm9qZWN0Ci0gICAgICAvL2NhbiBiZSBhZGRlZCB0byB0aGUgZWFyLiAgICAgIAotCi0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICBib29sZWFuIGlzV2ViID0gaXNXZWJDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzRUpCID0gaXNFSkJDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzQXBwQ2xpZW50ID0gaXNBcHBDbGllbnRDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzRUFSID0gaXNFQVJDb21wb25lbnQoZWFyUHJvamVjdCk7Ci0gICAgICBpZiAoKGlzV2ViIHx8IGlzRUpCIHx8IGlzQXBwQ2xpZW50KSAmJiBpc0VBUikKLSAgICAgIHsgICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZkVhclByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUoZWFyUHJvamVjdCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgSVByb2plY3RGYWNldCBlYXJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX01PRFVMRSk7Ci0gICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZWFyUGZ2ID0gZkVhclByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbihlYXJQZik7Ci0gICAgICAgICAgU3RyaW5nIGVhclZlcnNpb24gPSBlYXJQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIAotICAgICAgICAgIFN0cmluZyB3ZWJWZXJzaW9uID0gbnVsbDsKLSAgICAgICAgICBTdHJpbmcgZWpiVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgICAgU3RyaW5nIGFjVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICBpZiAoaXNXZWIpCi0gICAgICAgICAgewotICAgICAgICAgICAgSVByb2plY3RGYWNldCB3ZWJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSk7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB3ZWJQZnYgPSBmUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKHdlYlBmKTsKLSAgICAgICAgICAgIHdlYlZlcnNpb24gPSB3ZWJQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChpc0VKQikgICAgICAgICAgICAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0IGVqYlBmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFKTsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGVqYlBmdiA9IGZQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oZWpiUGYpOwotICAgICAgICAgICAgZWpiVmVyc2lvbiA9IGVqYlBmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGlzQXBwQ2xpZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXQgYWNQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfQVBQQ0xJRU5UX01PRFVMRSk7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBhY1BmdiA9IGZQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oYWNQZik7Ci0gICAgICAgICAgICBhY1ZlcnNpb24gPSBhY1Bmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgICAgfSAKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoKGlzV2ViICYmIHdlYlZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl8yX1RFWFQpKSB8fAotICAgICAgICAgICAgICAoaXNFSkIgJiYgZWpiVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzFfVEVYVCkpIHx8Ci0gICAgICAgICAgICAgIChpc0FwcENsaWVudCAmJiBhY1ZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQpKQotICAgICAgICAgICAgICApCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFncmVhdGVyVGhhbk9yRXF1YWxUbyhlYXJWZXJzaW9uLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMl9URVhUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzJfVEVYVCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKChpc1dlYiAmJiB3ZWJWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfM19URVhUKSkgfHwKLSAgICAgICAgICAgICAgKGlzRUpCICYmIGVqYlZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl8wX1RFWFQpKSB8fAotICAgICAgICAgICAgICAoaXNBcHBDbGllbnQgJiYgYWNWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKSkKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghZ3JlYXRlclRoYW5PckVxdWFsVG8oZWFyVmVyc2lvbiwgSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKTsKLSAgICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgICBlbHNlIGlmICgoaXNXZWIgJiYgd2ViVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzRfVEVYVCkpIHx8Ci0gICAgICAgICAgICAgIChpc0VKQiAmJiBlamJWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfMV9URVhUKSkgfHwKLSAgICAgICAgICAgICAgKGlzQXBwQ2xpZW50ICYmIGFjVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCkpCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWdyZWF0ZXJUaGFuT3JFcXVhbFRvKGVhclZlcnNpb24sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCk7Ci0gICAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0gICAgICAgICAgLy9JZiBmYWNldCBBUEkgdGhyb3dzIGEgQ29yZUV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBjcmVhdGUgYW4gSUZhY2V0ZWRQcm9qZWN0IGZyb20gCi0gICAgICAgICAgLy9hbiBJUHJvamVjdCwgYW4gT0sgU3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQgYW5kIGNsaWVudHMgb2YgdGhpcyB1dGlsaXR5IG1ldGhvZAotICAgICAgICAgIC8vd29uJ3QgcmFpc2UgYSB2YWxpZGF0aW9uIGVycm9yLgotICAgICAgICB9ICAgICAgICAgCi0gICAgICB9Ci0KLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0JCi0gICAgLyoKLSAgICAgKiBAcGFyYW0gdmVyc2lvbkEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gMS4yLjMKLSAgICAgKiBAcGFyYW0gdmVyc2lvbkEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gMS4yLjMKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4gcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB2ZXJzaW9uQgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZ3JlYXRlclRoYW5PckVxdWFsVG8oU3RyaW5nIHZlcnNpb25BLCBTdHJpbmcgdmVyc2lvbkIpCi0gICAgewotICAgICAgaWYgKHZlcnNpb25BLmVxdWFscyh2ZXJzaW9uQikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3RBID0gbmV3IFN0cmluZ1Rva2VuaXplcih2ZXJzaW9uQSwgIi4iKTsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0QiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmVyc2lvbkIsICIuIik7Ci0KLSAgICAgICAgaW50IHNpemVBID0gc3RBLmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGludCBzaXplQiA9IHN0Qi5jb3VudFRva2VucygpOwotCi0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAoc2l6ZUEgPCBzaXplQikKLSAgICAgICAgewotICAgICAgICAgIHNpemUgPSBzaXplQTsKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNpemUgPSBzaXplQjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGludCBhID0gSW50ZWdlci5wYXJzZUludChzdEEubmV4dFRva2VuKCkpOwotICAgICAgICAgIGludCBiID0gSW50ZWdlci5wYXJzZUludChzdEIubmV4dFRva2VuKCkpOwotICAgICAgICAgIGlmIChhICE9IGIpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgPiBiOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzaXplQSA+IHNpemVCOwotICAgICAgfQotICAgIH0KLQkKLQkvKioKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybgotICAgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldFdlYkluZlBhdGgoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCi0JCS8vc2hvdWxkIFdFQi1JTkYgbG9jYXRpb24gYmUgcHVsbGVkIGluIGZyb20gdGhlIC5jb21wb25lbnQgZmlsZSByYXRoZXIgdGhhbiBoYXJkY29kZWQgaGVyZT8KLQkJSVZpcnR1YWxGb2xkZXIgd2ViSW5mRGlyID0gY29tcG9uZW50LmdldFJvb3RGb2xkZXIoKS5nZXRGb2xkZXIobmV3IFBhdGgoIi9XRUItSU5GIikpOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gd2ViSW5mRGlyLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkKLQkJaWYgKCF3ZWJJbmZEaXIuZXhpc3RzKCkpCi0JCXsJCi0JCQl0cnkgCi0JCQl7CQotCQkJCXdlYkluZkRpci5jcmVhdGUoMCxudWxsKTsJCQkJCi0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJe30KLQkJfQkJCi0JCXJldHVybiBtb2R1bGVQYXRoOwotCX0KLQkKLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEZpcnN0V2ViQ29udGVudFBhdGgoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQlJUGF0aCBtb2R1bGVQYXRoID0gbnVsbDsKLQkJdHJ5IHsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkgIGlmIChNb2R1bGVDb3JlTmF0dXJlLmlzRmxleGlibGVQcm9qZWN0KHByb2plY3QpKSB7Ci0gICAgICAgICAgICBtb2R1bGVQYXRoID0gdmMuZ2V0Um9vdEZvbGRlcigpLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpe30KLQotCQlyZXR1cm4gbW9kdWxlUGF0aDsJCQkKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRXZWJDb250ZW50UGF0aChJUHJvamVjdCBwcm9qZWN0KXsKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCUlQYXRoIG1vZHVsZVBhdGggPSBjb21wb25lbnQuZ2V0Um9vdEZvbGRlcigpLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQlyZXR1cm4gbW9kdWxlUGF0aDsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICogCi0JICovCi0JcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIGdldEZpcnN0V2ViQ29udGVudENvbnRhaW5lcihJUHJvamVjdCBwcm9qZWN0KXsKLQkJSUNvbnRhaW5lciBjb250YWluZXIgPSBudWxsOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gZ2V0Rmlyc3RXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkJSVJlc291cmNlIHJlcyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKG1vZHVsZVBhdGgpOwotCQlpZiAocmVzIT1udWxsKXsKLQkJICBjb250YWluZXIgPSByZXMuZ2V0UGFyZW50KCk7Ci0JCX0JCQotCQkgIAotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElDb250YWluZXIgZ2V0V2ViQ29udGVudENvbnRhaW5lcihJUHJvamVjdCBwcm9qZWN0KXsKLQkJSUNvbnRhaW5lciBjb250YWluZXIgPSBudWxsOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7Ci0JCUlSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShtb2R1bGVQYXRoKTsKLQkJaWYgKHJlcyBpbnN0YW5jZW9mIElDb250YWluZXIpewotCQkgIGNvbnRhaW5lciA9IChJQ29udGFpbmVyKXJlczsKLQkJfQkJCi0JCXJldHVybiBjb250YWluZXI7Ci0JfQotCQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IE1vZHVsZSBuYW1lIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpcnN0V2ViTW9kdWxlTmFtZShJUHJvamVjdCBwcm9qZWN0KXsKLSAgICAgIFN0cmluZyBtb2R1bGVOYW1lID0gbnVsbDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICAgIG1vZHVsZU5hbWUgPSB2Yy5nZXROYW1lKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZXgpe30KLSAgCi0gICAgICByZXR1cm4gbW9kdWxlTmFtZTsgIAkJCQotCX0KLQkKLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWJDb21wb25lbnQoSVZpcnR1YWxDb21wb25lbnQgY29tcCl7Ci0JICAgIHJldHVybiBKMkVFUHJvamVjdFV0aWxpdGllcy5pc0R5bmFtaWNXZWJQcm9qZWN0KGNvbXAuZ2V0UHJvamVjdCgpKTsKLSAgfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VBUkNvbXBvbmVudChJVmlydHVhbENvbXBvbmVudCBjb21wKXsKLQkgICAgcmV0dXJuIEoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzRUFSUHJvamVjdChjb21wLmdldFByb2plY3QoKSk7Ci0JfQotCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIGEgdmFsaWQgRUpCIGNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VKQkNvbXBvbmVudChJUHJvamVjdCBwcm9qZWN0KSB7Ci0gICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgaWYgKHZjICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBpc0VKQkNvbXBvbmVudCh2Yyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7IAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUpCQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNFSkJQcm9qZWN0KGNvbXAuZ2V0UHJvamVjdCgpKTsKLQl9CQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXBwQ2xpZW50Q29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNBcHBsaWNhdGlvbkNsaWVudFByb2plY3QoY29tcC5nZXRQcm9qZWN0KCkpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNKYXZhQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNVdGlsaXR5UHJvamVjdChjb21wLmdldFByb2plY3QoKSk7Ci0JfQkKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb21wb25lbnRUeXBlSWQoSVByb2plY3QgcHJvamVjdCkgewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuZ2V0SjJFRVByb2plY3RUeXBlKHByb2plY3QpOwotCX0KLSAgCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSB0b0NvbXBvbmVudE5hbWVzQXJyYXkoSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzKXsKLQkJU3RyaW5nW10gZWNOYW1lcyA9IG5ldyBTdHJpbmdbY29tcG9uZW50cy5sZW5ndGhdOwotCQlmb3IoaW50IGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSsrKXsKLQkJCWVjTmFtZXNbaV0gPSBjb21wb25lbnRzW2ldLmdldE5hbWUoKTsKLQkJfQotCQlyZXR1cm4gZWNOYW1lczsJCQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gdG9Qcm9qZWN0QXJyYXkoSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzKXsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtjb21wb25lbnRzLmxlbmd0aF07Ci0JCWZvciAoaW50IGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSsrKXsKLQkJCXByb2plY3RzW2ldID0gY29tcG9uZW50c1tpXS5nZXRQcm9qZWN0KCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQkKLQkvKioKLQkgKiBHaXZlbiBhIEoyRUUgbGV2ZWwsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIHNlcnZsZXQgbGV2ZWwKLQkgKiBAcGFyYW0gajJlZUxldmVsCi0JICogQHJldHVybiB3ZWIgYXBwIHZlcnNpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEludGVnZXIgZ2V0U2VydmxldFZlcnNpb25Gb3JKMkVFVmVyc2lvbihTdHJpbmcgajJlZUxldmVsKXsKLQkJaW50IGFWZXJzaW9uID0gSW50ZWdlci52YWx1ZU9mKGoyZWVMZXZlbCkuaW50VmFsdWUoKTsKLQkJc3dpdGNoIChhVmVyc2lvbikgewotCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEOgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl8yXzJfSUQpOwotCi0JCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuV0VCXzJfM19JRCk7Ci0KLQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl80X0lEKTsKLQkJCQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl8yXzNfSUQpOwotCQl9CQkKLQl9Ci0JCi0JLyoqCi0JICogR2l2ZW4gYSBKMkVFIGxldmVsLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBFSkIgdmVyc2lvbgotCSAqIEBwYXJhbSBqMmVlTGV2ZWwKLQkgKiBAcmV0dXJuIGVqYiBzcGVjIHZlcnNpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEludGVnZXIgZ2V0RUpCVmVyc2lvbkZvckoyRUVWZXJzaW9uKFN0cmluZyBqMmVlTGV2ZWwpewotCQlpbnQgYVZlcnNpb24gPSBJbnRlZ2VyLnZhbHVlT2YoajJlZUxldmVsKS5pbnRWYWx1ZSgpOwotCQlzd2l0Y2ggKGFWZXJzaW9uKSB7Ci0JCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuRUpCXzFfMV9JRCk7Ci0KLQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfMl8wX0lEKTsKLQotCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEOgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8yXzFfSUQpOwotCQkJCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuRUpCXzJfMF9JRCk7Ci0JCX0JCQkKLQl9Ci0KLQkvKioKLQkgKiBUcnVlIGlmIHRoZSBjb21wb25lbnQgaXMgYSB2YWxpZCBKYXZhIGNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0phdmFDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCkgewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotCSAgICByZXR1cm4gaXNKYXZhQ29tcG9uZW50KHZjKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgZmFjZXRlZCBwcm9qZWN0IHdpdGggb25seSB0aGUgSmF2YSBmYWNldC4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2V0IGZhY2V0cyA9IGZQcm9qZWN0LmdldFByb2plY3RGYWNldHMoKTsKLSAgICAgICAgICAgICAgaWYgKGZhY2V0cy5zaXplKCk9PTEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pZmFjZXRzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKS5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfSkFWQSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL1RoaXMgaXMgbm90IGEgZmFjZXRlZCBwcm9qZWN0LiBDaGVjayBpZiB0aGlzIGlzIGEgc2ltcGxlIEphdmEgcHJvamVjdC4gICAgCi0gICAgICAgICAgICAgIGlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRydWUgaWYgdGhlIGNvbXBvbmVudCBpcyBhIHZhbGlkIFdlYiBjb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWJDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCkgewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gaXNXZWJDb21wb25lbnQodmMpOyAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0JCi0JfQotCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIGEgdHJ1ZSBBcHBsaWNhdGlvbiBjbGllbnQgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXBwQ2xpZW50Q29tcG9uZW50KElQcm9qZWN0IHByb2plY3QpIHsKLQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBpZiAodmMgIT0gbnVsbCkKLSAgICAgIHsKLQkgIHJldHVybiBpc0FwcENsaWVudENvbXBvbmVudCh2Yyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQl9Ci0KLQkvKioKLQkgKiBUcnVlIGlzIHRoZSBjb21wb25lbnQgaXMgYSB2YWxpZCBFQVIgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUFSQ29tcG9uZW50KElQcm9qZWN0IHByb2plY3QpewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotCSAgcmV0dXJuIGlzRUFSQ29tcG9uZW50KHZjKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElGb2xkZXIgZ2V0T3V0cHV0Q29udGFpbmVyUm9vdCAoSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50KSB7Ci0JCXJldHVybiAoSUZvbGRlcilKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRPdXRwdXRDb250YWluZXJzKGNvbXBvbmVudC5nZXRQcm9qZWN0KCkpWzBdOwotCX0KLQkKLQkvLyAxOTQ0MzQgLSBDaGVjayBmb3Igbm9uLWV4aXN0aW5nIEVBUiB3aXRoIGNvbnRlbnRzIHRoYXQncyBub3QgZGVsZXRlZCBwcmV2aW91c2x5Ci0JcHVibGljIHN0YXRpYyBJU3RhdHVzIGNhbkNyZWF0ZUVBUihJUHJvamVjdCBlYXJQcm9qZWN0KQotICAgIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlpZiggIWVhclByb2plY3QuZXhpc3RzKCkgKXsKLQkJCUlQYXRoIHBhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCk7Ci0JCQlwYXRoID0gcGF0aC5hcHBlbmQoZWFyUHJvamVjdC5nZXROYW1lKCkpOwotCQkJc3RhdHVzID0gUHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvdmlkZXJOZXcudmFsaWRhdGVFeGlzdGluZyhlYXJQcm9qZWN0LmdldE5hbWUoKSwgcGF0aC50b09TU3RyaW5nKCkpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0gICAgfQotCQotCi0JIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRKQVJPck1vZHVsZURlcGVuZGVuY3koSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHVyaSkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0JICB7Ci0JICAgIGlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdCkpCi0JICAgIHsKLQkgICAgICBBcmNoaXZlTWFuaWZlc3QgbWFuaWZlc3QgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5yZWFkTWFuaWZlc3QocHJvamVjdCk7Ci0JICAgICAgbWFuaWZlc3QubWVyZ2VDbGFzc1BhdGgobmV3IFN0cmluZ1tde3VyaX0pOwotCSAgICAgIEoyRUVQcm9qZWN0VXRpbGl0aWVzLndyaXRlTWFuaWZlc3QocHJvamVjdCwgbWFuaWZlc3QpOwotCSAgICAgIGZvcmNlQ2xhc3NwYXRoVXBkYXRlKHByb2plY3QpOwotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRKYXZhUHJvamVjdEFzVXRpbGl0eUphcihJUHJvamVjdCBqYXZhUHJvamVjdCwgSVByb2plY3QgZWFyUHJvamVjdCxJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JICB7Ci0JCSAgdHJ5IHsKLQkJCSAgSURhdGFNb2RlbCBtaWdyYXRpb25kbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBKYXZhUHJvamVjdE1pZ3JhdGlvbkRhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkJICBtaWdyYXRpb25kbS5zZXRQcm9wZXJ0eShJSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzLlBST0pFQ1RfTkFNRSwgamF2YVByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCSAgbWlncmF0aW9uZG0uc2V0UHJvcGVydHkoSUphdmFQcm9qZWN0TWlncmF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBCb29sZWFuLkZBTFNFKTsKLQkJCSAgbWlncmF0aW9uZG0uZ2V0RGVmYXVsdE9wZXJhdGlvbigpLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0JIAotCSAKLQkJCSAgSURhdGFNb2RlbCByZWZkbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCQkgIExpc3QgdGFyZ2V0Q29tcExpc3QgPSAoTGlzdCkgcmVmZG0uZ2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVF9DT01QT05FTlRfTElTVCk7Ci0JIAotCQkJICBJVmlydHVhbENvbXBvbmVudCB0YXJnZXRjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChqYXZhUHJvamVjdCk7Ci0JCQkgIElWaXJ0dWFsQ29tcG9uZW50IHNvdXJjZWNvbXBvbmVudCA9IENvbXBvbmVudFV0aWxpdGllcy5nZXRDb21wb25lbnQoZWFyUHJvamVjdC5nZXROYW1lKCkpOwotCQkJICB0YXJnZXRDb21wTGlzdC5hZGQodGFyZ2V0Y29tcG9uZW50KTsKLQkgCi0JCQkgIHJlZmRtLnNldFByb3BlcnR5KElDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllcy5TT1VSQ0VfQ09NUE9ORU5ULHNvdXJjZWNvbXBvbmVudCApOwotCQkJICByZWZkbS5zZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuVEFSR0VUX0NPTVBPTkVOVF9MSVNULCB0YXJnZXRDb21wTGlzdCk7Ci0JCQkgIHJlZmRtLnNldFByb3BlcnR5KElDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllcy5UQVJHRVRfQ09NUE9ORU5UU19ERVBMT1lfUEFUSCwgICIvV0VCLUlORi9saWIiKTsKLQkJCSAgcmVmZG0uZ2V0RGVmYXVsdE9wZXJhdGlvbigpLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0JCQkJCSAgCi0JCSAgfWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJICAKLQkJICB9Ci0JICB9Ci0JICAKLQkvL0ZvcmNpbmcgY2xhc3NwYXRoIHVwZGF0ZQotCSAgcHVibGljIHN0YXRpYyB2b2lkIGZvcmNlQ2xhc3NwYXRoVXBkYXRlIChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCSAgSjJFRUNvbXBvbmVudENsYXNzcGF0aFVwZGF0ZXIgY2xhc3NwYXRoVXBkYXRlciA9IEoyRUVDb21wb25lbnRDbGFzc3BhdGhVcGRhdGVyLmdldEluc3RhbmNlKCk7Ci0JCSAgQ29sbGVjdGlvbiBwcm9qQ29sbGVjdGlvbiA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwcm9qZWN0KTsKLQkJICBjbGFzc3BhdGhVcGRhdGVyLmZvcmNlVXBkYXRlKHByb2pDb2xsZWN0aW9uLCB0cnVlKTsKLQkJICBJSm9iTWFuYWdlciBqbSA9IEpvYi5nZXRKb2JNYW5hZ2VyKCk7Ci0JCSAgdHJ5ewotCQkJICBqbS5qb2luKEoyRUVDb21wb25lbnRDbGFzc3BhdGhVcGRhdGVyLk1PRFVMRV9VUERBVEVfSk9CX05BTUUsIG51bGwpOwotCQkgIH1jYXRjaChFeGNlcHRpb24gZXhjKXt9Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0phdmFNT0ZVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSmF2YU1PRlV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NTVmZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSmF2YU1PRlV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2gubmF0dXJlLkVNRk5hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoLnV0aWxpdHkuSmVtUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVJlZkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVZpc2liaWxpdHlLaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLQotLyoqCi0qIFRoaXMgY2xhc3MgY29udGFpbnMgc29tZSB1c2VmdWwgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggdGhlIEphdmFNT0YKLSovCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBKYXZhTU9GVXRpbHMKLXsKLSAvKioKLSAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGNsYXNzIG9mIHRoZSBnaXZlbiBuYW1lIGlzIGxvYWRhYmxlIGluIHRoZSBnaXZlbgotICAqIHByb2plY3QuCi0gICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNsYXNzCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QKLSAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsYXNzIGlzIGxvYWRhYmxlIGFuZCBubyBleGNlcHRpb25zIGFyZSB0aHJvd24uIAotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDbGFzc0xvYWRhYmxlKFN0cmluZyBjbGFzc05hbWUsIElQcm9qZWN0IHByb2plY3QpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgIAlyZXR1cm4gaXNDbGFzc0xvYWRhYmxlKGdldEphdmFDbGFzcyhjbGFzc05hbWUscHJvamVjdCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ2xhc3NMb2FkYWJsZShKYXZhQ2xhc3MgamF2YUNsYXNzKQotICB7Ci0JcmV0dXJuIGphdmFDbGFzcy5pc0V4aXN0aW5nVHlwZSgpOyAgICAKLSAgfQotCi0gIC8qKgotICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2xhc3MgaGFzIGEgcHVibGljIGNvbnN0cnVjdG9yCi0gICogd2l0aCBhbiBlbXB0eSBwYXJhbWV0ZXIgbGlzdC4KLSAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY2xhc3MKLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdAotICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xhc3MgaXMgbG9hZGFibGUgZnJvbSB0aGUgcHJvamVjdCBhbmQgdGhlIAotICAqICAgICAgICAgY2xhc3MgaGFzIGEgcHVibGljIGNvbnN0cnVjdG9yIHdpdGggYW4gZW1wdHkgcGFyYW1ldGVyIGxpc3QgIAotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzUHVibGljRGVmYXVsdEN0b3IoU3RyaW5nIGNsYXNzTmFtZSwgSVByb2plY3QgcHJvamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBoYXNQdWJsaWNEZWZhdWx0Q3RvcihnZXRKYXZhQ2xhc3MoY2xhc3NOYW1lLCBwcm9qZWN0KSk7Ci0gIH0KLQotCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1B1YmxpY0RlZmF1bHRDdG9yKEphdmFDbGFzcyBqYXZhQ2xhc3MpCi0gIHsKLSAgIAotICAgIExpc3QgbWV0aG9kTGlzdCA9IGphdmFDbGFzcy5nZXRNZXRob2RzKCk7Ci0gICAgaWYgKG1ldGhvZExpc3Q9PW51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEl0ZXJhdG9yIGlNZXRob2RzID0gbWV0aG9kTGlzdC5pdGVyYXRvcigpOwotICAgIGJvb2xlYW4gdXNlckRlZmluZWRDdG9yID0gZmFsc2U7Ci0gICAgd2hpbGUgKGlNZXRob2RzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBNZXRob2QgdGhpc01ldGhvZCA9IChNZXRob2QpaU1ldGhvZHMubmV4dCgpOwotCi0gICAgICBpZiAodGhpc01ldGhvZC5pc0NvbnN0cnVjdG9yKCkpCi0gICAgICB7Ci0gICAgICAgIHVzZXJEZWZpbmVkQ3RvciA9IHRydWU7IAotCi0gICAgICAgIC8vU2luY2UgdGhlIHVzZXIgaGFzIGRlZmluZWQgYSBjdG9yLCB0aGUgZGVmYXVsdCBjdG9yIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuCi0gICAgICAgIC8vV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgdXNlciBoYXMgcHJvdmlkZWQgYSBwdWJsaWMgY3RvciB3aXRoIG5vIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgLy9jaGVjayBpZiBwdWJsaWMKLSAgICAgICAgaWYgKHRoaXNNZXRob2QuZ2V0SmF2YVZpc2liaWxpdHkoKS5nZXRWYWx1ZSgpID09IEphdmFWaXNpYmlsaXR5S2luZC5QVUJMSUMpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3NlZSBpZiBwYXJhbWV0ZXIgbGlzdCBpcyBlbXB0eQotICAgICAgICAgIExpc3QgcGFyYW1MaXN0ID0gdGhpc01ldGhvZC5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgaWYgKHBhcmFtTGlzdC5pc0VtcHR5KCkgKQotICAgICAgICAgIHsKLQkgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICAgIGlmICh1c2VyRGVmaW5lZEN0b3IpCi0gICAgewotCSAgcmV0dXJuIGZhbHNlOyAvL2lmIHRoZSB1c2VyIGRlZmluZWQgYSBjdG9yIGFuZCB3ZSBzdGlsbCBoYXZlbid0Ci0JICAJICAgICAgICAgICAgLy9yZXR1cm5lZCB0cnVlLCBub25lIG9mIHRoZW0gd2VyZSBwdWJsaWMgd2l0aCBubyBwYXJhbWV0ZXJzLgotICAgIH0KLSAgICBlbHNlCi0gICAgeyAKLSAgICAgICByZXR1cm4gdHJ1ZTsgICAgCi0gICAgfQotCi0gIH0KLSAgLyoqCi0gICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLgotICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGFzcwotICAqIEBwYXJhbSBpbnRlcmZhY2VOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgaW50ZXJmYWNlCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QKLSAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsYXNzIGFuZCBpbnRlcmZhY2UgYXJlIGxvYWRhYmxlIGZyb20gdGhlIHByb2plY3QgYW5kCi0gICogICAgICAgICB0aGUgY2xhc3MgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlLgotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaW1wbGVtZW50c0ludGVyZmFjZShTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgaW50ZXJmYWNlTmFtZSwgSVByb2plY3QgcHJvamVjdCkKLSAgCQkJdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgcmV0dXJuIGltcGxlbWVudHNJbnRlcmZhY2UoZ2V0SmF2YUNsYXNzKGNsYXNzTmFtZSwgcHJvamVjdCksIGdldEphdmFDbGFzcyhpbnRlcmZhY2VOYW1lLCBwcm9qZWN0KSk7Ci0gIH0KLQotcHVibGljIHN0YXRpYyBib29sZWFuIGltcGxlbWVudHNJbnRlcmZhY2UoSmF2YUNsYXNzIGphdmFDbGFzcywgSmF2YUNsYXNzIGludGVyZmFjZUNsYXNzKQotICB7Ci0gICAKLSAgICBpZiAoIWphdmFDbGFzcy5pc0V4aXN0aW5nVHlwZSgpKSAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpbnRlcmZhY2VDbGFzcy5pc0V4aXN0aW5nVHlwZSgpKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICByZXR1cm4gamF2YUNsYXNzLmltcGxlbWVudHNJbnRlcmZhY2UoaW50ZXJmYWNlQ2xhc3MpOwotICB9Ci0KLSAgLyoqCi0gICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjbGFzcyBleHRlbmRzIHRoZSBzcGVjaWZpZWQgc3VwZXJjbGFzcwotICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGFzcwotICAqIEBwYXJhbSBzdXBlckNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHN1cGVyY2xhc3MKLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdAotICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xhc3MgYW5kIHN1cGVyQ2xhc3MgYXJlIGxvYWRhYmxlIGZyb20gdGhlIHByb2plY3QgYW5kCi0gICogICAgICAgICB0aGUgY2xhc3MgZXh0ZW5kcyB0aGUgc3VwZXJDbGFzcwotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXh0ZW5kc0NsYXNzKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBzdXBlckNsYXNzTmFtZSwgSVByb2plY3QgcHJvamVjdCkKLSAgICAgICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5kc0NsYXNzKGdldEphdmFDbGFzcyhjbGFzc05hbWUscHJvamVjdCksIGdldEphdmFDbGFzcyhzdXBlckNsYXNzTmFtZSwgcHJvamVjdCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGV4dGVuZHNDbGFzcyhKYXZhQ2xhc3MgamF2YUNsYXNzLCBKYXZhQ2xhc3Mgc3VwZXJDbGFzcykKLSAgewotICAgIHJldHVybiBzdXBlckNsYXNzLmlzQXNzaWduYWJsZUZyb20oamF2YUNsYXNzKTsKLSAgfQotCi0gIC8qKgotICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2xhc3MgaXMgYWN0dWFsbHkgYW4gaW50ZXJmYWNlCi0gICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNsYXNzCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QKLSAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsYXNzIGlzIGxvYWRhYmxlIGZyb20gdGhlIHByb2plY3QgYW5kIGlzIAotICAqICAgICAgICAgYWN0dWFsbHkgYW4gaW50ZXJmYWNlCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ludGVyZmFjZShTdHJpbmcgY2xhc3NOYW1lLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgIHJldHVybiBpc0ludGVyZmFjZShnZXRKYXZhQ2xhc3MoY2xhc3NOYW1lLCBwcm9qZWN0KSk7Ci0gIH0KLQotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ludGVyZmFjZShKYXZhQ2xhc3MgamF2YUNsYXNzKQotICB7Ci0gICAgICByZXR1cm4gamF2YUNsYXNzLmlzSW50ZXJmYWNlKCk7Ci0gIH0KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzQWJzdHJhY3RNZXRob2RzIChTdHJpbmcgY2xhc3NOYW1lLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotIAl7Ci0JICAgIHJldHVybiBoYXNBYnN0cmFjdE1ldGhvZHMoZ2V0SmF2YUNsYXNzKGNsYXNzTmFtZSwgcHJvamVjdCkpOwotICAJfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBoYXNBYnN0cmFjdE1ldGhvZHMgKEphdmFDbGFzcyBqYXZhQ2xhc3MpCi0gCXsKLQkgICBMaXN0IG1ldGhvZExpc3QgPSBqYXZhQ2xhc3MuZ2V0TWV0aG9kcygpOwotICAgICAgIGlmIChtZXRob2RMaXN0PT1udWxsKQotICAgICAgCXJldHVybiBmYWxzZTsKLQotCSAgIEl0ZXJhdG9yIGlNZXRob2RzID0gbWV0aG9kTGlzdC5pdGVyYXRvcigpOwotCSAgIHdoaWxlIChpTWV0aG9kcy5oYXNOZXh0KCkpCi0gICAgCXsKLSAgICAgIAkJTWV0aG9kIHRoaXNNZXRob2QgPSAoTWV0aG9kKWlNZXRob2RzLm5leHQoKTsKLQkJCWlmICggdGhpc01ldGhvZC5pc0Fic3RyYWN0KCkpIHJldHVybiB0cnVlOwotCSAgIAl9Ci0JCXJldHVybiBmYWxzZTsKLSAJfQotCi0gIC8qIAotICAgKiAKLSAgICovCi0gLyoqCi0gKiBAcGFyYW0gY2xhc3NRTmFtZSBGdWxseSBxdWFsaWZpZWQgY2xhc3NuYW1lIChwYWNrYWdlTmFtZSArIHR5cGVOYW1lKQotICogQHBhcmFtIHByb2plY3QKLSAqIEByZXR1cm4KLSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICovCi1wdWJsaWMgc3RhdGljIEphdmFDbGFzcyBnZXRKYXZhQ2xhc3MoU3RyaW5nIGNsYXNzUU5hbWUgLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotIAl7Ci0JIAlFTUZOYXR1cmUgak1PRiA9IEplbVByb2plY3RVdGlsaXRpZXMuZ2V0SkVNX0VNRl9OYXR1cmUocHJvamVjdCwgdHJ1ZSk7Ci0JIAlyZXR1cm4gKEphdmFDbGFzcylKYXZhUmVmRmFjdG9yeS5lSU5TVEFOQ0UucmVmbGVjdFR5cGUoY2xhc3NRTmFtZSxqTU9GLmdldFJlc291cmNlU2V0KCkpOwotIAl9Ci0gCi0gLyoqCi0gKiBAcGFyYW0gcGFja2FnZU5hbWUKLSAqIEBwYXJhbSB0eXBlTmFtZQotICogQHBhcmFtIHByb2plY3QKLSAqIEByZXR1cm4KLSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICovCi1wdWJsaWMgc3RhdGljIEphdmFDbGFzcyBnZXRKYXZhQ2xhc3MoU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgdHlwZU5hbWUgLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkgCUVNRk5hdHVyZSBqTU9GID0gSmVtUHJvamVjdFV0aWxpdGllcy5nZXRKRU1fRU1GX05hdHVyZShwcm9qZWN0LCB0cnVlKTsKLQkgCXJldHVybiAoSmF2YUNsYXNzKUphdmFSZWZGYWN0b3J5LmVJTlNUQU5DRS5yZWZsZWN0VHlwZShwYWNrYWdlTmFtZSwgdHlwZU5hbWUsIGpNT0YuZ2V0UmVzb3VyY2VTZXQoKSk7Ci0JfQotCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmFsaWRTRUlGaWxlKEphdmFDbGFzcyBiZWFuQ2xhc3MsIEphdmFDbGFzcyBzZWlDbGFzcykKLSAJewotIAkJaWYgKCFzZWlDbGFzcy5pc0ludGVyZmFjZSgpKQotIAkJCXJldHVybiBmYWxzZTsKLQotCQlWZWN0b3IgYmVhbk1ldGhvZHNMaXN0ID0gbmV3IFZlY3RvcigpOwotIAkJTGlzdCBiZWFuTWV0aG9kcyA9IGJlYW5DbGFzcy5nZXRNZXRob2RzKCk7Ci0JCUl0ZXJhdG9yIGJlYW5NZXRob2RzSXRlcmF0b3IgPSBiZWFuTWV0aG9kcy5pdGVyYXRvcigpOwotCSAgIAl3aGlsZSAoYmVhbk1ldGhvZHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgCXsKLSAgICAgIAkJTWV0aG9kIHRoaXNNZXRob2QgPSAoTWV0aG9kKWJlYW5NZXRob2RzSXRlcmF0b3IubmV4dCgpOwotCQkJYmVhbk1ldGhvZHNMaXN0LmFkZCh0aGlzTWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSk7Ci0JICAgCX0KLQotCQlMaXN0IHNlaU1ldGhvZHMgPSBzZWlDbGFzcy5nZXRNZXRob2RzKCk7Ci0gCQlpZiAoYmVhbk1ldGhvZHMgPT0gbnVsbCApIHsKLSAJCQlpZiAoIHNlaU1ldGhvZHMgPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gCQkJZWxzZQlyZXR1cm4gZmFsc2U7Ci0gCQl9Ci0JCWlmIChzZWlNZXRob2RzID09IG51bGwpIHJldHVybiBmYWxzZTsKLQotCQlJdGVyYXRvciBzZWlNZXRob2RzSXRlcmF0b3IgPSBzZWlNZXRob2RzLml0ZXJhdG9yKCk7Ci0JICAgCXdoaWxlIChzZWlNZXRob2RzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIAl7Ci0gICAgICAJCU1ldGhvZCB0aGlzTWV0aG9kID0gKE1ldGhvZClzZWlNZXRob2RzSXRlcmF0b3IubmV4dCgpOwotCQkJaWYgKCAhYmVhbk1ldGhvZHNMaXN0LmNvbnRhaW5zKHRoaXNNZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKSkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkgICAJfQotCQlyZXR1cm4gdHJ1ZTsKLSAJCQotIAl9Ci0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9SZXNvdXJjZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9SZXNvdXJjZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjAzMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vUmVzb3VyY2VVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDIxICAgMTM2NzYxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUwMyAgIDEyNjgxOSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDgwMTIyICAgMjE1ODY2IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKiAyMDA4MDMwMyAgIDIxODY5NiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBBUElzIHVzaW5nIEVKQkFydGlmYWN0RWRpdCBub3QgYWJsZSB0byBkZWFsIHdpdGggc29tZSBFSkIgMy4wIGJlYW5zIHByb3Blcmx5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29udmVudGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcHBsaWNhdGlvbmNsaWVudC5jb21wb25lbnRjb3JlLnV0aWwuQXBwQ2xpZW50QXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvbXBvbmVudGNvcmUudXRpbC5FQVJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5jb21wb25lbnRjb3JlLnV0aWwuRUpCQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuU2Vzc2lvbkJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Db21wb25lbnRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC5TdHJ1Y3R1cmVFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC5Xb3JrYmVuY2hDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklVUkxQcm92aWRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHVzZWZ1bCBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggRWNsaXBzZSByZXNvdXJjZXMuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBSZXNvdXJjZVV0aWxzIHsKLQotCS8vIEtlZXBzIHRoZSBJV29ya3NwYWNlUm9vdCBoYW5naW5nIGFyb3VuZC4gU2VlIGdldFdvcmtzcGFjZVJvb3QoKS4KLQlwcml2YXRlIHN0YXRpYyBJV29ya3NwYWNlUm9vdCByb290XyA9IG51bGw7Ci0KLQkvLyBLZWVwcyB0aGUgSVdvcmtzcGFjZSBoYW5naW5nIGFyb3VuZC4gU2VlIGdldFdvcmtzcGFjZSgpLgotCi0JcHJpdmF0ZSBzdGF0aWMgSVdvcmtzcGFjZSB3b3Jrc3BhY2VfID0gbnVsbDsKLQotCS8qKgotCSAqIEFzIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0UHJvamVjdFR5cGUgZ2V0UHJvamVjdFR5cGUoKX0sIGluZGljYXRlcyB0aGF0Ci0JICogdGhlIGdpdmVuIHByb2plY3QgaGFzIG5vIEphdmEgb3IgV2ViIG5hdHVyZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJ5dGUgUFJPSkVDVF9UWVBFX05PTkUgPSAwOwotCi0JLyoqCi0JICogQXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRQcm9qZWN0VHlwZSBnZXRQcm9qZWN0VHlwZSgpfSwgaW5kaWNhdGVzIHRoYXQKLQkgKiB0aGUgZ2l2ZW4gcHJvamVjdCBoYXMgYSBKYXZhIHByb2plY3QgbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYnl0ZSBQUk9KRUNUX1RZUEVfSkFWQSA9IDE7Ci0KLQkvKioKLQkgKiBBcyByZXR1cm5lZCBieSB7QGxpbmsgI2dldFByb2plY3RUeXBlIGdldFByb2plY3RUeXBlKCl9LCBpbmRpY2F0ZXMgdGhhdAotCSAqIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyBhIFdlYiBwcm9qZWN0IG5hdHVyZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJ5dGUgUFJPSkVDVF9UWVBFX1dFQiA9IDI7Ci0KLQkvKioKLQkgKiBBcyByZXR1cm5lZCBieSB7QGxpbmsgI2dldFByb2plY3RUeXBlIGdldFByb2plY3RUeXBlKCl9LCBpbmRpY2F0ZXMgdGhhdAotCSAqIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyBhbiBFSkIgcHJvamVjdCBuYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBieXRlIFBST0pFQ1RfVFlQRV9FSkIgPSA0OwotCQotCS8qKgotCSAqIEFzIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0UHJvamVjdFR5cGUgZ2V0UHJvamVjdFR5cGUoKX0sIGluZGljYXRlcyB0aGF0Ci0JICogdGhlIGdpdmVuIHByb2plY3QgaGFzIGFuIEFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IG5hdHVyZS4KLQkgKi8JCi0JcHVibGljIHN0YXRpYyBieXRlIFBST0pFQ1RfVFlQRV9BUFBDTElFTlQgPSA4OwotCi0JLyoqCi0JICogVGhlIFNPQVAgcnBjcm91dGVyIHNlcnZsZXQgZXh0ZW5zaW9uIHRvIGJlIGFkZGVkIHRvIHdlYiBwcm9qZWN0IFVSTAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNFUlZMRVRfRVhUID0gIi9zZXJ2bGV0L3JwY3JvdXRlciI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUID0gIkNsaWVudCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfQ0xJRU5UX0VKQl9QUk9KRUNUX0VYVCA9ICJFSkJDbGllbnQiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0VKQl9QUk9KRUNUX05BTUUgPSAiV2ViU2VydmljZUVKQlByb2plY3QiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0VKQl9DT01QT05FTlRfTkFNRSA9ICJXZWJTZXJ2aWNlRUpCIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9XRUJfUFJPSkVDVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9XRUJfQ09NUE9ORU5UX05BTUUgPSAiV2ViU2VydmljZVByb2plY3QiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1JPVVRFUl9QUk9KRUNUX0VYVCA9ICJSb3V0ZXIiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU0VSVklDRV9FQVJfUFJPSkVDVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0RUFSIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TRVJWSUNFX0VBUl9DT01QT05FTlRfTkFNRSA9ICJXZWJTZXJ2aWNlUHJvamVjdEVBUiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfQ0xJRU5UX0VBUl9QUk9KRUNUX05BTUUgPSAiV2ViU2VydmljZVByb2plY3RDbGllbnRFQVIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NMSUVOVF9FQVJfQ09NUE9ORU5UX05BTUUgPSAiV2ViU2VydmljZVByb2plY3RDbGllbnRFQVIiOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0VBUl9FWFQgPSAiRUFSIjsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIElXb3Jrc3BhY2VSb290IG9iamVjdC4KLQkgKiBAcmV0dXJuIFRoZSBJV29ya3NwYWNlUm9vdCBvYmplY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlUm9vdCBnZXRXb3Jrc3BhY2VSb290KCkgewotCQlpZiAocm9vdF8gPT0gbnVsbCkgewotCQkJcm9vdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQl9Ci0JCXJldHVybiByb290XzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBJV29ya3NwYWNlIG9iamVjdC4KLQkgKiBAcmV0dXJuIFRoZSBJV29ya3NwYWNlIG9iamVjdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlpZiAod29ya3NwYWNlXyA9PSBudWxsKSB7Ci0JCQlpZiAocm9vdF8gPT0gbnVsbCkgewotCQkJCXJvb3RfID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCX0KLQkJCXdvcmtzcGFjZV8gPSByb290Xy5nZXRXb3Jrc3BhY2UoKTsKLQkJfQotCQlyZXR1cm4gd29ya3NwYWNlXzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UgSVJlc291cmNlfW9mIHRoZQotCSAqIGdpdmVuIGFic29sdXRlIHBhdGhuYW1lIG9yIG51bGwgaWYgbm8gc3VjaCByZXNvdXJjZSBleGlzdHMuCi0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aG5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVJlc291cmNlIGZpbmRSZXNvdXJjZShTdHJpbmcgYWJzb2x1dGVQYXRobmFtZSkgewotCQlpZiAoYWJzb2x1dGVQYXRobmFtZSA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gZmluZFJlc291cmNlKG5ldyBQYXRoKGFic29sdXRlUGF0aG5hbWUpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UgSVJlc291cmNlfW9mIHRoZQotCSAqIGdpdmVuIGFic29sdXRlIHBhdGggb3IgbnVsbCBpZiBubyBzdWNoIHJlc291cmNlIGV4aXN0cy4KLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgPGNvZGU+SVBhdGg8L2NvZGU+IG9mIHRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVJlc291cmNlIGZpbmRSZXNvdXJjZShJUGF0aCBhYnNvbHV0ZVBhdGgpIHsKLQkJaWYgKGFic29sdXRlUGF0aCA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihhYnNvbHV0ZVBhdGgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSBJUmVzb3VyY2V9b2YgdGhlCi0JICogZ2l2ZW4gZmlsZSBzeXN0ZW0gcmVsYXRpdmUgcGF0aG5hbWUgYW5kIHByb2plY3Qgb3IgbnVsbCBpZiBubyBzdWNoIHJlc291cmNlIGV4aXN0cy4KLQkgKgotCSAqIEBwYXJhbSBmaWxlUGF0aCBGaWxlIHN5c3RlbSByZWxhdGl2ZSBwYXRobmFtZQotCSAqIEBwYXJhbSBwcm9qZWN0IFByb2plY3QKLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVJlc291cmNlIGZpbmRSZXNvdXJjZUF0TG9jYXRpb24oU3RyaW5nIGZpbGVQYXRoLCBJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCQotCQlyZXR1cm4gZmluZFJlc291cmNlKGZpbmRQYXRoQXRMb2NhdGlvbiggbmV3IFBhdGgoZmlsZVBhdGgpLCBwcm9qZWN0KSk7Ci0JfQotCQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGF0dGVtcHRzIHRvIGNvbnZlcnQgYSBwYXRoIHRoYXQgaXMgcmVsYXRpdmUgdG8gYSBmaWxlIHN5c3RlbQotCSAqIHRvIGEgcGF0aCB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSB3b3Jrc3BhY2UuIEluc3RlYWQgb2YgY29tcGFyaW5nIHRoZQotCSAqIGZpbGVQYXRoIHdpdGggdGhlIGluc3RhbGwgbG9jYXRpb24gb2YgdGhlIHdvcmtzcGFjZSAoaS5lLgotCSAqIFBsYXRmb3JtLmdldExvY2F0aW9uKCkpLCB0aGUgZmlsZVBhdGggaXMgY29tcGFyZWQgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIHByb2plY3QKLQkgKiBzaW5jZSB0aGUgcHJvamVjdCBjb3VsZCBiZSBpbiBhIGxvY2F0aW9uIG90aGVyIHRoYW4gdGhlIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZQotCSAqIHdvcmtzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZVBhdGgJRmlsZSBwYXRoIHJlbGF0aXZlIHRvIGEgZmlsZSBzeXN0ZW0KLQkgKiBAcGFyYW0gcHJvamVjdAlUaGUgcHJvamVjdCB0aGUgZmlsZSBpcyBpbgotCSAqIEByZXR1cm4gCQkJUGF0aCByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBmaW5kUGF0aEF0TG9jYXRpb24oSVBhdGggZmlsZVBhdGgsIElQcm9qZWN0IHByb2plY3QpIHsKLQkJSVBhdGggcmVzdWx0ID0gbnVsbDsKLQotCQlJUGF0aCBwcm9qZWN0TG9jYXRpb24gPSBwcm9qZWN0LmdldExvY2F0aW9uKCk7Ci0KLQkJaWYgKHByb2plY3RMb2NhdGlvbi5tYXRjaGluZ0ZpcnN0U2VnbWVudHMoZmlsZVBhdGgpID09IHByb2plY3RMb2NhdGlvbgotCQkJCS5zZWdtZW50Q291bnQoKSkgewotCQkJZmlsZVBhdGggPSBmaWxlUGF0aC5yZW1vdmVGaXJzdFNlZ21lbnRzKHByb2plY3RMb2NhdGlvbgotCQkJCQkuc2VnbWVudENvdW50KCkgLSAxKTsKLQkJCXJlc3VsdCA9IGZpbGVQYXRoLnNldERldmljZShudWxsKTsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCS8qKgotCSAqIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIGEgbmFtZSBmb3IgYSByZXNvdXJjZSBvZiB0aGUgZ2l2ZW4gdHlwZShzKS4KLQkgKiBUaGlzIG1ldGhvZCBvYmV5cyB0aGUgY29udHJhY3Qgb2YKLQkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZSN2YWxpZGF0ZU5hbWUgSVdvcmtzcGFjZS52YWxpZGF0ZU5hbWUoKX0uCi0JICogCi0JICogQHBhcmFtIHNlZ21lbnQKLQkgKiAgICAgICAgICAgIFRoZSBwYXRoIHRvIHZhbGlkYXRlLgotCSAqIEBwYXJhbSB0eXBlTWFzawotCSAqICAgICAgICAgICAgVGhlIDxjb2RlPklSZXNvdXJjZTwvY29kZT4gdHlwZSBvciB0eXBlcy4KLQkgKiBAcmV0dXJuIFRoZSBzdGF0dXMgd2l0aCBhIHZhbHVlIGlmIDxjb2RlPklTdGF0dXMuT0s8L2NvZGU+IGlmIHRoZSBwYXRoCi0JICogICAgICAgICBpcyB2YWxpZCwgb3Igd2l0aCBhcHByb3ByaWF0ZSBzZXZlcml0eSBhbmQgbWVzc2FnZSBpbmZvcm1hdGlvbiBpZgotCSAqICAgICAgICAgdGhlIHBhdGggaXMgbm90IHZhbGlkLgotCSAqICAgICAgICAgCi0JICogQGRlcHJlY2F0ZWQgbm90IHVzZWQgICAgICAgICAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElTdGF0dXMgdmFsaWRhdGVOYW1lKFN0cmluZyBzZWdtZW50LCBpbnQgdHlwZU1hc2spIHsKLQkJcmV0dXJuIGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlTmFtZShzZWdtZW50LCB0eXBlTWFzayk7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGVzIHRoZSBnaXZlbiBzdHJpbmcgYXMgdGhlIHBhdGggb2YgYSByZXNvdXJjZSBvZiB0aGUgZ2l2ZW4KLQkgKiB0eXBlKHMpLiBUaGlzIG1ldGhvZCBvYmV5cyB0aGUgY29udHJhY3Qgb2YKLQkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZSN2YWxpZGF0ZVBhdGggSVdvcmtzcGFjZS52YWxpZGF0ZVBhdGgoKX0uCi0JICogCi0JICogQHBhcmFtIHBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBwYXRoIHRvIHZhbGlkYXRlLgotCSAqIEBwYXJhbSB0eXBlTWFzawotCSAqICAgICAgICAgICAgVGhlIDxjb2RlPklSZXNvdXJjZTwvY29kZT4gdHlwZSBvciB0eXBlcy4KLQkgKiBAcmV0dXJuIFRoZSBzdGF0dXMgd2l0aCBhIHZhbHVlIGlmIDxjb2RlPklTdGF0dXMuT0s8L2NvZGU+IGlmIHRoZSBwYXRoCi0JICogICAgICAgICBpcyB2YWxpZCwgb3Igd2l0aCBhcHByb3ByaWF0ZSBzZXZlcml0eSBhbmQgbWVzc2FnZSBpbmZvcm1hdGlvbiBpZgotCSAqICAgICAgICAgdGhlIHBhdGggaXMgbm90IHZhbGlkLgotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVN0YXR1cyB2YWxpZGF0ZVBhdGgoU3RyaW5nIHBhdGgsIGludCB0eXBlTWFzaykgewotCQlyZXR1cm4gZ2V0V29ya3NwYWNlKCkudmFsaWRhdGVQYXRoKHBhdGgsIHR5cGVNYXNrKTsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZXMgdGhlIGdpdmVuIEphdmEgdHlwZSBuYW1lLgotCSAqIAotCSAqIEBwYXJhbSB0eXBlTmFtZQotCSAqICAgICAgICAgICAgVGhlIEphdmEgdHlwZSBuYW1lLgotCSAqIEByZXR1cm4gVGhlIHN0YXR1cyB3aXRoIGEgdmFsdWUgb2YgPGNvZGU+SVN0YXR1cy5PSzwvY29kZT4gaWYgdGhlIG5hbWUKLQkgKiAgICAgICAgIGlzIHZhbGlkLCBvciB3aXRoIGFwcHJvcHJpYXRlIHNldmVyaXR5IGFuZCBtZXNzYWdlIGluZm9ybWF0aW9uIGlmCi0JICogICAgICAgICBuYW1lIGlzIG5vdCB2YWxpZC4gVGhlIHByaW1pdGl2ZSB0eXBlcyAoYm9vbGVhbiwgY2hhciwgYnl0ZSwKLQkgKiAgICAgICAgIHNob3J0LCBpbnQsIGxvbmcsIGZsb2F0LCBkb3VibGUpIGFyZSB2YWxpZC4gQXJyYXlzIG9mIHZhbGlkIHR5cGVzCi0JICogICAgICAgICBhcmUgdGhlbXNlbHZlcyB2YWxpZC4KLQkgKiBAZGVwcmVjYXRlZCB1c2UgSmF2YUNvbnZlbnRpb25zIGluIHRoZSBqZHQgY29yZSAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElTdGF0dXMgdmFsaWRhdGVKYXZhVHlwZU5hbWUoU3RyaW5nIHR5cGVOYW1lKSB7Ci0JCS8vCi0JCS8vIFN0cmlwIG9mZiB0aGUgdHJhaWxpbmcgYXJyYXkgYml0cywgaWYgYW55LgotCQkvLwotCQlpbnQgYSA9IHR5cGVOYW1lLmluZGV4T2YoJ1snKTsKLQkJaWYgKGEgPiAwKSB7Ci0JCQl0eXBlTmFtZSA9IHR5cGVOYW1lLnN1YnN0cmluZygwLCBhKTsKLQkJfQotCQkvLwotCQkvLyBBbGxvdyBwcmltaXRpdmVzLgotCQkvLwotCQlpZiAoaXNQcmltaXRpdmVKYXZhVHlwZSh0eXBlTmFtZSkpIHsKLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFdlYlNlcnZpY2VQbHVnaW4uSUQsIDAsICIiLCBudWxsKTsKLQkJfQotCQkvLwotCQkvLyBEZWZlciB0byBKYXZhQ29udmVudGlvbnMuCi0JCS8vCi0JCXJldHVybiBKYXZhQ29udmVudGlvbnMudmFsaWRhdGVKYXZhVHlwZU5hbWUodHlwZU5hbWUpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+dHlwZU5hbWU8L2NvZGU+IGlzIGEgSmF2YSBwcmltaXRpdmUKLQkgKiAoYm9vbGVhbiwgY2hhciwgYnl0ZSwgc2hvcnQsIGludCwgbG9uZywgZmxvYXQsIGRvdWJsZSkuCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0eXBlIG5hbWUgaXMgYSBKYXZhIHByaW1pdGl2ZS4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ByaW1pdGl2ZUphdmFUeXBlKFN0cmluZyB0eXBlTmFtZSkgewotCQlyZXR1cm4gKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiY2hhciIpCi0JCQkJfHwgdHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpCi0JCQkJfHwgdHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImxvbmciKQotCQkJCXx8IHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBoYW5kbGUgb2YgdGhlIElQcm9qZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdpdmVuCi0JICogPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPi4gTmVpdGhlciB0aGUgZ2l2ZW4gcGF0aCBub3IgdGhlIHByb2plY3QgbmVlZAotCSAqIGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UuIFRoZSBwYXRoIG11c3QgYmUgYWJzb2x1dGUsIGFuZCBtdXN0IGNvbnNpc3Qgb2YgYXQKLQkgKiBsZWFzdCBvbmUgc2VnbWVudC4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIElQcm9qZWN0IGhhbmRsZSBmb3IgdGhlIHByb2plY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZ2l2ZW4KLQkgKiAgICAgICAgIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4sIG9yIG51bGwgaWYgdGhlIHBhdGggZG9lcyBub3QKLQkgKiAgICAgICAgIHNwZWNpZnkgYSBwcm9qZWN0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgZ2V0UHJvamVjdE9mKElQYXRoIGFic29sdXRlUGF0aCkgewotCQlpZiAoYWJzb2x1dGVQYXRoLmlzQWJzb2x1dGUoKSkgewotCQkJU3RyaW5nIHByb2plY3ROYW1lID0gYWJzb2x1dGVQYXRoLnNlZ21lbnQoMCk7Ci0JCQlpZiAocHJvamVjdE5hbWUgIT0gbnVsbCkgewotCQkJCXJldHVybiBnZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50IGdldENvbXBvbmVudE9mKElQYXRoIGFic29sdXRlUGF0aCl7Ci0JCWlmIChhYnNvbHV0ZVBhdGguaXNBYnNvbHV0ZSgpKSB7Ci0JCQkJU3RyaW5nIHByb2plY3ROYW1lID0gYWJzb2x1dGVQYXRoLnNlZ21lbnQoMCk7Ci0JCQkJSVByb2plY3QgcHJvamVjdCA9IGdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCQlpZiAocHJvamVjdE5hbWUgIT0gbnVsbCkgewotCQkJCQlyZXR1cm4gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50IGdldENvbXBvbmVudE9mKElSZXNvdXJjZSByZXMpCi0JewotCQlJVmlydHVhbFJlc291cmNlW10gdnJlc291cmNlcyA9IENvbXBvbmVudENvcmUuY3JlYXRlUmVzb3VyY2VzKHJlcyk7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IHZjb21wID0gbnVsbDsKLQkJaWYgKHZyZXNvdXJjZXMgIT0gbnVsbCAmJiB2cmVzb3VyY2VzLmxlbmd0aD4wKQotCQl7Ci0JCQlJVmlydHVhbFJlc291cmNlIHZyZXMgPSB2cmVzb3VyY2VzWzBdOwotCQkJdmNvbXAgPSB2cmVzLmdldENvbXBvbmVudCgpOwotCQl9Ci0JCXJldHVybiB2Y29tcDsKLQl9Ci0JCi0JCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiA8Y29kZT5wcm9qZWN0PC9jb2RlPiBpcyBhIEphdmEgUHJvamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBwcm9qZWN0IGlzIGEgSmF2YSBQcm9qZWN0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0phdmFQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJdHJ5Ci0JCXsKLQkJICByZXR1cm4gcHJvamVjdC5oYXNOYXR1cmUoSmF2YUNvcmUuTkFUVVJFX0lEKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkJewotCQkJLy9SZXR1cm4gZmFsc2UgaWYgQ29yZUV4Y2VwdGlvbiBvY2N1cnMgd2hpbGUgY2hlY2tpbmcgbmF0dXJlLgotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiA8Y29kZT5wcm9qZWN0PC9jb2RlPiBpcyBhIEphdmEgUHJvamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBwcm9qZWN0IGlzIGEgSmF2YSBQcm9qZWN0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RydWVKYXZhUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXJldHVybiAoIWlzV2ViUHJvamVjdChwcm9qZWN0KSAmJiAhaXNBcHBDbGllbnRQcm9qZWN0KHByb2plY3QpICYmICFpc0VBUlByb2plY3QocHJvamVjdCkKLQkJCQkmJiAhaXNFSkJQcm9qZWN0KHByb2plY3QpICYmIGlzSmF2YVByb2plY3QocHJvamVjdCkpOwotCQkvKgotCQkgKiB0cnkgeyBTdHJpbmdbXSBuYXR1cmVzID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpLmdldE5hdHVyZUlkcygpOwotCQkgKiByZXR1cm4gKG5hdHVyZXMubGVuZ3RoID09IDEgJiYKLQkJICogbmF0dXJlc1swXS5lcXVhbHMoSmF2YUNvcmUuTkFUVVJFX0lEKSk7IH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgeyB9Ci0JCSAqIHJldHVybiBmYWxzZTsKLQkJICovCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiA8Y29kZT5wcm9qZWN0PC9jb2RlPiBpcyBhIFdlYiBQcm9qZWN0LgotCSAqIE5vdGU6IEZvciBjb21wb25lbnRzOyB1c2UgSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KCkKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBwcm9qZWN0IGlzIGEgV2ViIFByb2plY3QuCi0gICAqIAotICAgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1dlYlByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQlib29sZWFuIGlzV2ViID0gZmFsc2U7Ci0JCVN0cnVjdHVyZUVkaXQgbWMgPSBudWxsOwotCQl0cnkgewotCQkgIG1jID0gU3RydWN0dXJlRWRpdC5nZXRTdHJ1Y3R1cmVFZGl0Rm9yUmVhZChwcm9qZWN0KTsKLQkJICBXb3JrYmVuY2hDb21wb25lbnRbXSB3YmNzID0gbWMuZ2V0V29ya2JlbmNoTW9kdWxlcygpOwotCQkgIGlmICh3YmNzLmxlbmd0aCE9MCkgewotCQkJICAvL2lzV2ViID0gV2ViQXJ0aWZhY3RFZGl0LmlzVmFsaWRXZWJNb2R1bGUod2Jjc1swXSk7Ci0JCSAgfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBleCl7Ci0JCQkvLyBoYW5kbGUgZXhjZXB0aW9uCi0JCX0KLQkJZmluYWxseXsKLQkJCWlmIChtYyE9bnVsbCkKLQkJCQltYy5kaXNwb3NlKCk7Ci0JCX0KLQotCQlyZXR1cm4gaXNXZWI7Ci0JfQotCi0JLyoqCi0JICogTm90ZTogZm9yIGNvbXBvbmVudHM7IHVzZSBKMkVFVXRpbHMuaXNFQVJDb21wb25lbnQoKQotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFQVJQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpewotCQlib29sZWFuIGlzRUFSID0gZmFsc2U7Ci0JCVN0cnVjdHVyZUVkaXQgbWMgPSBudWxsOwotCQl0cnkgewotCQkgIG1jID0gU3RydWN0dXJlRWRpdC5nZXRTdHJ1Y3R1cmVFZGl0Rm9yUmVhZChwcm9qZWN0KTsKLQkJICBXb3JrYmVuY2hDb21wb25lbnRbXSB3YmNzID0gbWMuZ2V0V29ya2JlbmNoTW9kdWxlcygpOwotCQkgIGlmICh3YmNzLmxlbmd0aCE9MCkgewotCQkJRUFSQXJ0aWZhY3RFZGl0IGVhckVkaXQgPSBudWxsOwotCQkJdHJ5IHsKLQkJCSAgLy9lYXJFZGl0ID0gRUFSQXJ0aWZhY3RFZGl0LmdldEVBUkFydGlmYWN0RWRpdEZvclJlYWQod2Jjc1swXSk7Ci0JCQkgIGlmIChlYXJFZGl0IT1udWxsKXsKLQkJCQlpc0VBUiA9IHRydWU7Ci0JCQkgIH0KLQkJCX0KLQkJCWZpbmFsbHl7Ci0JCQkJaWYgKGVhckVkaXQhPW51bGwpCi0JCQkJCWVhckVkaXQuZGlzcG9zZSgpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpe30KLQkJZmluYWxseXsKLQkJCWlmIChtYyE9bnVsbCkKLQkJCQltYy5kaXNwb3NlKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpc0VBUjsKLQl9Ci0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiA8Y29kZT5wcm9qZWN0PC9jb2RlPiBpcyBhbiBFSkIgMS4xIG9yIEVKQiAyLjAKLQkgKiBQcm9qZWN0LgotCSAqIE5vdGU6IGZvciBjb21wb25lbnRzLCB1c2UgSjJFRVV0aWxzLmlzRUpCQ29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhbiBFSkIgMS4xIG9yIGFuIEVKQiAyLjAgUHJvamVjdC4KLSAgICogCi0gICAqIEBkZXByZWNhdGVkCi0gICAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VKQlByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQlib29sZWFuIGlzRUpCID0gZmFsc2U7Ci0JCVN0cnVjdHVyZUVkaXQgbWMgPSBudWxsOwotCQl0cnkgewotCQkgIG1jID0gU3RydWN0dXJlRWRpdC5nZXRTdHJ1Y3R1cmVFZGl0Rm9yUmVhZChwcm9qZWN0KTsKLQkJICBXb3JrYmVuY2hDb21wb25lbnRbXSB3YmNzID0gbWMuZ2V0V29ya2JlbmNoTW9kdWxlcygpOwotCQkgIGlmICh3YmNzLmxlbmd0aCE9MCkgewotCQkJRUpCQXJ0aWZhY3RFZGl0IGVqYkVkaXQgPSBudWxsOwotCQkJdHJ5IHsKLQkJCSAgLy9lamJFZGl0ID0gRUpCQXJ0aWZhY3RFZGl0LmdldEVKQkFydGlmYWN0RWRpdEZvclJlYWQod2Jjc1swXSk7Ci0JCQkgIGlmIChlamJFZGl0IT1udWxsKXsKLQkJCQlpc0VKQiA9IHRydWU7Ci0JCQkgIH0KLQkJCX0KLQkJCWZpbmFsbHl7Ci0JCQkJaWYgKGVqYkVkaXQhPW51bGwpCi0JCQkJCWVqYkVkaXQuZGlzcG9zZSgpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpe30KLQkJZmluYWxseXsKLQkJCWlmIChtYyE9bnVsbCkKLQkJCQltYy5kaXNwb3NlKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpc0VKQjsJCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiA8Y29kZT5wcm9qZWN0PC9jb2RlPiBpcyBhbiBBcHBsaWNhdGlvbiBDbGllbnQKLQkgKiBQcm9qZWN0LgotCSAqIE5vdGU6IGZvciBjb21wb25lbnRzLCB1c2UgSjJFRVV0aWxzLmlzQXBwQ2xpZW50Q29tcG9uZW50KCkKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBwcm9qZWN0IGlzIGFuIEFwcGxpY2F0aW9uIENsaWVudCBQcm9qZWN0Ci0gICAqIAotICAgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0FwcENsaWVudFByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQlib29sZWFuIGlzQXBwQ2xpZW50ID0gZmFsc2U7Ci0JCVN0cnVjdHVyZUVkaXQgbWMgPSBudWxsOwotCQl0cnkgewotCQkgIG1jID0gU3RydWN0dXJlRWRpdC5nZXRTdHJ1Y3R1cmVFZGl0Rm9yUmVhZChwcm9qZWN0KTsKLQkJICBXb3JrYmVuY2hDb21wb25lbnRbXSB3YmNzID0gbWMuZ2V0V29ya2JlbmNoTW9kdWxlcygpOwotCQkgIGlmICh3YmNzLmxlbmd0aCE9MCkgewotCQkJQXBwQ2xpZW50QXJ0aWZhY3RFZGl0IGFwcENsaWVudEVkaXQgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQkvL2FwcENsaWVudEVkaXQgPSBBcHBDbGllbnRBcnRpZmFjdEVkaXQuZ2V0QXBwQ2xpZW50QXJ0aWZhY3RFZGl0Rm9yUmVhZCh3YmNzWzBdKTsKLQkJCSAgaWYgKGFwcENsaWVudEVkaXQhPW51bGwpewotCQkJCSAgaXNBcHBDbGllbnQgPSB0cnVlOwotCQkJICB9Ci0JCQl9Ci0JCQlmaW5hbGx5ewotCQkJCWlmIChhcHBDbGllbnRFZGl0IT1udWxsKQotCQkJCQlhcHBDbGllbnRFZGl0LmRpc3Bvc2UoKTsKLQkJCX0KLQkJICB9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGV4KXt9Ci0JCWZpbmFsbHl7Ci0JCQlpZiAobWMhPW51bGwpCi0JCQkJbWMuZGlzcG9zZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gaXNBcHBDbGllbnQ7CQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGdpdmVuIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGEgYml0bWFzay4KLQkgKiBSZWxldmFudCBiaXRtYXNrIHZhbHVlcyBhcmU6Ci0JICogPG9sPgotCSAqIDxsaT57QGxpbmsgI1BST0pFQ1RfVFlQRV9KQVZBIFBST0pFQ1RfVFlQRV9KQVZBfQotCSAqIDxsaT57QGxpbmsgI1BST0pFQ1RfVFlQRV9XRUIgUFJPSkVDVF9UWVBFX1dFQn0KLQkgKiA8bGk+e0BsaW5rICNQUk9KRUNUX1RZUEVfRUpCIFBST0pFQ1RfVFlQRV9FSkJ9Ci0JICogPGxpPntAbGluayAjUFJPSkVDVF9UWVBFX05PTkUgUFJPSkVDVF9UWVBFX05PTkV9Ci0JICogPC9vbD4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUaGUgdHlwZSBiaXRtYXNrIG9mIHRoZSBwcm9qZWN0LgotCSAqIAotCSAqIEBkZXByZWNhdGVkIHVzZSBnZXRDb21wb25lbnRUeXBlCi0JICovIAotCXB1YmxpYyBzdGF0aWMgYnl0ZSBnZXRQcm9qZWN0VHlwZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCWJ5dGUgcHJvamVjdFR5cGUgPSBQUk9KRUNUX1RZUEVfTk9ORTsKLQkJaWYgKFJlc291cmNlVXRpbHMuaXNKYXZhUHJvamVjdChwcm9qZWN0KSkgewotCQkJcHJvamVjdFR5cGUgfD0gUFJPSkVDVF9UWVBFX0pBVkE7Ci0JCX0KLQkJaWYgKFJlc291cmNlVXRpbHMuaXNXZWJQcm9qZWN0KHByb2plY3QpKSB7Ci0JCQlwcm9qZWN0VHlwZSB8PSBQUk9KRUNUX1RZUEVfV0VCOwotCQl9Ci0JCWlmIChSZXNvdXJjZVV0aWxzLmlzRUpCUHJvamVjdChwcm9qZWN0KSkgewotCQkJcHJvamVjdFR5cGUgfD0gUFJPSkVDVF9UWVBFX0VKQjsKLQkJfQotCQlyZXR1cm4gcHJvamVjdFR5cGU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29tcG9uZW50IHR5cGUgaWQgYXMgZGVmaW5lZCBpbiBJTW9kdWxlQ29uc3RhbnRzCi0JICogaS5lLiBJTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFID0gImpzdC53ZWIiCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q29tcG9uZW50VHlwZShJUHJvamVjdCBwcm9qZWN0KXsKLQkJcmV0dXJuIEoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldEoyRUVQcm9qZWN0VHlwZShwcm9qZWN0KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29tcG9uZW50IHR5cGUKLQkgKiBAcGFyYW0gY29tcG9uZW50Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbXBvbmVudFR5cGUoSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50KXsKLQkJcmV0dXJuIGdldENvbXBvbmVudFR5cGUoY29tcG9uZW50LmdldFByb2plY3QoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgV2ViTW9kdWxlIERlcGxveWFibGUgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGFuCi0JICogPGNvZGU+SURlcGxveWFibGU8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIgbmF0dXJlLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFdlYk1vZHVsZSBEZXBsb3lhYmxlIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBvciBudWxsIGlmIHRoZQotCSAqICAgICAgICAgcHJvamVjdCBoYXMgbm8gV2ViIG5hdHVyZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElNb2R1bGUgZ2V0TW9kdWxlKElQcm9qZWN0IHByb2plY3QpIHsKLQlyZXR1cm4gU2VydmVyVXRpbC5nZXRNb2R1bGUocHJvamVjdCk7Ci19Ci0JCi0vLyBXb3JrYXJvdW5kIGZvciAxMTM2MjEgCi0vL3B1YmxpYyBzdGF0aWMgSU1vZHVsZSBnZXRNb2R1bGUoSVByb2plY3QgcHJvamVjdCkgewotLy8JSU1vZHVsZVtdIG1vZHVsZXMgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZXMocHJvamVjdCk7Ci0vLwlpZiAobW9kdWxlcyE9bnVsbCAmJiBtb2R1bGVzLmxlbmd0aCE9MCkgewotLy8JCXJldHVybiBtb2R1bGVzWzBdOwotLy8JfQotLy8JcmV0dXJuIG51bGw7Ci0vL30KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGJ1aWxkIG91dHB1dCBsb2NhdGlvbiBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gYXMgYW4KLQkgKiA8Y29kZT5JUGF0aDwvY29kZT4sIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIEphdmEgbmF0dXJlLgotCSAqIGkuZS4gV1BcLmRlcGxveWFibGVzXHdlYk1vZHVsZVxXRUItSU5GXGNsYXNzZXMKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUaGUgYnVpbGQgb3V0cHV0IGxvY2F0aW9uIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBvciBudWxsCi0JICogICAgICAgICBpZiB0aGUgcHJvamVjdCBoYXMgbm8gSmF2YSBuYXR1cmUuCi0JICogQGRlcHJlY2F0ZWQgbm90IHVzZWQgCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRKYXZhT3V0cHV0TG9jYXRpb24oSVByb2plY3QgcHJvamVjdCkgewotCQlJUGF0aCBvdXRwdXRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlpZiAoamF2YVByb2plY3QgIT0gbnVsbCkgewotCQkJCW91dHB1dExvY2F0aW9uID0gamF2YVByb2plY3QuZ2V0T3V0cHV0TG9jYXRpb24oKTsKLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlJTG9nIGxvZyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0JCWxvZy5sb2coSUxvZy5JTkZPLCA1MDMyLCBSZXNvdXJjZVV0aWxzLmNsYXNzLCAiZ2V0SmF2YU91dHB1dExvY2F0aW9uIiwKLQkJCQkicHJvamVjdD0iICsgcHJvamVjdCArICIsb3V0cHV0TG9jYXRpb249IiArIG91dHB1dExvY2F0aW9uKTsKLQotCQlyZXR1cm4gb3V0cHV0TG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIGJ1aWxkIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gYXMgYW4KLQkgKiA8Y29kZT5JUGF0aDwvY29kZT4sIG9yIG51bGwgaWYgdGhlIHByb2plY3QgZWl0aGVyIGhhcyBubyBKYXZhIG5hdHVyZQotCSAqIG9yIGlmIHRoZSBwcm9qZWN0J3MgYnVpbGQgY2xhc3NwYXRoIGNvbnRhaW5zIG5vIGZvbGRlcnMgbG9jYWwgdG8gdGhlCi0JICogcHJvamVjdC4gSWYgdGhlIHByb2plY3QgaGFzIG1vcmUgdGhhbiBvbmUgb2YgaXRzIG93biBmb2xkZXJzIG9uIHRoZSBidWlsZAotCSAqIGNsYXNzcGF0aCwgdGhlbiBvbmUgb2YgdGhlbSBpcyBjaG9zZW4gYXJiaXRyYXJpbHkgYXMgdGhlIGJ1aWxkIHNvdXJjZQotCSAqIGxvY2F0aW9uLiBUbyB3b3JrIHdpdGggYWxsIGVudHJpZXMgb24gdGhlIGJ1aWxkIGNsYXNzcGF0aCwgdXNlCi0JICoge0BsaW5rICNnZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMgZ2V0SmF2YVBhY2thZ2VGcmFnbWVudFJvb3RzKCl9b3IKLQkgKiB7QGxpbmsgI2dldEphdmFDbGFzc3BhdGggZ2V0SmF2YUNsYXNzcGF0aCgpfS4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBBIGJ1aWxkIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gb3IgbnVsbCBpZgotCSAqICAgICAgICAgdGhlIHByb2plY3QgaGFzIG5vIEphdmEgbmF0dXJlIG9yIGlmIHRoZSBwcm9qZWN0J3MgYnVpbGQKLQkgKiAgICAgICAgIGNsYXNzcGF0aCBjb250YWlucyBubyBmb2xkZXJzIGxvY2FsIHRvIHRoZSBwcm9qZWN0LgotCSAqLwotCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRKYXZhU291cmNlTG9jYXRpb24oSVByb2plY3QgcHJvamVjdCkgewotCQlJUGF0aCBzb3VyY2VMb2NhdGlvbiA9IG51bGw7Ci0JCUlQYWNrYWdlRnJhZ21lbnRSb290W10gZnJhZ21lbnRSb290cyA9IGdldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cyhwcm9qZWN0KTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudFJvb3RzLmxlbmd0aCAmJiBzb3VyY2VMb2NhdGlvbiA9PSBudWxsOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJSVJlc291cmNlIGZyYWdtZW50Um9vdCA9IGZyYWdtZW50Um9vdHNbaV0KLQkJCQkJCS5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLQkJCQlpZiAoZnJhZ21lbnRSb290ICE9IG51bGwKLQkJCQkJCSYmIChmcmFnbWVudFJvb3QuZ2V0UHJvamVjdCgpLmVxdWFscyhwcm9qZWN0KSkKLQkJCQkJCSYmIChmcmFnbWVudFJvb3QuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GSUxFKSkgewotCQkJCQlzb3VyY2VMb2NhdGlvbiA9IGZyYWdtZW50Um9vdC5nZXRGdWxsUGF0aCgpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQotCQlJTG9nIGxvZyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0JCWxvZy5sb2coSUxvZy5JTkZPLCA1MDMwLCBSZXNvdXJjZVV0aWxzLmNsYXNzLCAiZ2V0SmF2YVNvdXJjZUxvY2F0aW9uIiwKLQkJCQkicHJvamVjdD0iICsgcHJvamVjdCArICIsc291cmNlTG9jYXRpb249IiArIHNvdXJjZUxvY2F0aW9uKTsKLQkJCi0JCXJldHVybiBzb3VyY2VMb2NhdGlvbjsKLQl9Ci0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSAiSmF2YVNvdXJjZSIgZm9sZGVyCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0gICAgLyoKLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEphdmFTb3VyY2VMb2NhdGlvbihJUHJvamVjdCBwcm9qZWN0KXsKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCXJldHVybiBnZXRKYXZhU291cmNlTG9jYXRpb24oY29tcG9uZW50KTsJCQkKLQl9Ci0JKi8KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKYXZhU291cmNlIGxvY2F0aW9uIGZvbGRlcgotCSAqIEBwYXJhbSBjb21wCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlpZiAoY29tcCE9bnVsbCl7Ci0JCSAgIElWaXJ0dWFsRm9sZGVyIGZvbGRlciA9IGNvbXAuZ2V0Um9vdEZvbGRlcigpLmdldEZvbGRlcihuZXcgUGF0aCgiL1dFQi1JTkYvY2xhc3NlcyIpKTsKLQkJICAgcmV0dXJuIGZvbGRlci5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSmF2YVNvdXJjZSBsb2NhdGlvbnMgaW4gZWFjaCBwcm9qZWN0Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aFtdIGdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMoSVByb2plY3QgcHJvamVjdCkgewotCQlWZWN0b3IgcGF0aFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBmcmFnbWVudFJvb3RzID0gZ2V0SmF2YVBhY2thZ2VGcmFnbWVudFJvb3RzKHByb2plY3QpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRSb290cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlJUmVzb3VyY2UgZnJhZ21lbnRSb290ID0gZnJhZ21lbnRSb290c1tpXS5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLQkJCQlpZiAoZnJhZ21lbnRSb290ICE9IG51bGwgJiYgKGZyYWdtZW50Um9vdC5nZXRQcm9qZWN0KCkuZXF1YWxzKHByb2plY3QpKQotCQkJCQkJJiYgKGZyYWdtZW50Um9vdC5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpKSB7Ci0JCQkJCXBhdGhWZWN0b3IuYWRkKGZyYWdtZW50Um9vdC5nZXRGdWxsUGF0aCgpKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JCXJldHVybiAoSVBhdGhbXSkgcGF0aFZlY3Rvci50b0FycmF5KG5ldyBQYXRoW3BhdGhWZWN0b3Iuc2l6ZSgpXSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUGF0aFtdIGdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMoSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzKSB7Ci0KLQkJaWYgKGNvbXBvbmVudHMhPW51bGwpewotCQkJTGlzdCBqYXZhU291cmNlUGF0aHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlmb3IgKGludCBpPTA7aTxjb21wb25lbnRzLmxlbmd0aDtpKyspewotCQkJCUlQYXRoIHBhdGggPSBnZXRKYXZhU291cmNlTG9jYXRpb24oY29tcG9uZW50c1tpXSk7Ci0JCQkJamF2YVNvdXJjZVBhdGhzLmFkZChwYXRoKTsKLQkJCX0KLQkJCXJldHVybiAoSVBhdGhbXSlqYXZhU291cmNlUGF0aHMudG9BcnJheShuZXcgSVBhdGhbMF0pOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgYnVpbGQgc291cmNlIHBhY2thZ2UgZnJhZ21lbnQgcm9vdCBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4KLQkgKiBhcyBhbiA8Y29kZT5JUGFja2FnZUZyYWdtZW50Um9vdDwvY29kZT4sIG9yIG51bGwgaWYgdGhlIHByb2plY3QgZWl0aGVyCi0JICogaGFzIG5vIEphdmEgbmF0dXJlIG9yIGlmIHRoZSBwcm9qZWN0J3MgYnVpbGQgY2xhc3NwYXRoIGNvbnRhaW5zIG5vCi0JICogZm9sZGVycyBsb2NhbCB0byB0aGUgcHJvamVjdC4gSWYgdGhlIHByb2plY3QgaGFzIG1vcmUgdGhhbiBvbmUgb2YgaXRzIG93bgotCSAqIGZvbGRlcnMgb24gdGhlIGJ1aWxkIGNsYXNzcGF0aCwgdGhlbiBvbmUgb2YgdGhlbSBpcyBjaG9zZW4gYXJiaXRyYXJpbHkgYXMKLQkgKiB0aGUgYnVpbGQgc291cmNlIGxvY2F0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIEEgYnVpbGQgc291cmNlIHBhY2thZ2UgZnJhZ21lbnQgcm9vdCBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4KLQkgKiAgICAgICAgIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIEphdmEgbmF0dXJlIG9yIGlmIHRoZSBwcm9qZWN0J3MKLQkgKiAgICAgICAgIGJ1aWxkIGNsYXNzcGF0aCBjb250YWlucyBubyBmb2xkZXJzIGxvY2FsIHRvIHRoZSBwcm9qZWN0LgotCSAqICAgICAgICAgCi0JICogQGRlcHJlY2F0ZWQgbm90IHVzZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYWNrYWdlRnJhZ21lbnRSb290IGdldEphdmFTb3VyY2VQYWNrYWdlRnJhZ21lbnRSb290KElQcm9qZWN0IHByb2plY3QpIHsKLQkJSVBhY2thZ2VGcmFnbWVudFJvb3QgcGFja2FnZUZyYWdtZW50Um9vdCA9IG51bGw7Ci0JCUlQYXRoIGphdmFTb3VyY2VMb2NhdGlvbiA9IGdldEphdmFTb3VyY2VMb2NhdGlvbihwcm9qZWN0KTsKLQkJdHJ5IHsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJcGFja2FnZUZyYWdtZW50Um9vdCA9IGphdmFQcm9qZWN0LmZpbmRQYWNrYWdlRnJhZ21lbnRSb290KGphdmFTb3VyY2VMb2NhdGlvbik7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJcmV0dXJuIHBhY2thZ2VGcmFnbWVudFJvb3Q7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFja2FnZSBmcmFnbWVudCByb290cyBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gYXMgYW4KLQkgKiBhcnJheSBvZiA8Y29kZT5JUGFja2FnZUZyYWdtZW50Um9vdDwvY29kZT4gb2JqZWN0cy4gSWYgdGhlIHByb2plY3QgaGFzCi0JICogbm8gSmF2YSBuYXR1cmUgdGhlbiB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBvZiBsZW5ndGggemVyby4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUaGUgcGFja2FnZSBmcmFnbWVudCByb290cyBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4uCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGFja2FnZUZyYWdtZW50Um9vdFtdIGdldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cyhJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRyeSB7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlpZiAoamF2YVByb2plY3QgIT0gbnVsbCkgewotCQkJCUlQYWNrYWdlRnJhZ21lbnRSb290W10gcGFja2FnZUZyYWdtZW50Um9vdHMgPSBqYXZhUHJvamVjdAotCQkJCQkJLmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKCk7Ci0JCQkJcmV0dXJuIHBhY2thZ2VGcmFnbWVudFJvb3RzOwotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBuZXcgSVBhY2thZ2VGcmFnbWVudFJvb3RbMF07Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYnVpbGQgY2xhc3NwYXRoIGVudHJpZXMgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGFuCi0JICogYXJyYXkgb2YgPGNvZGU+SUNsYXNzcGF0aEVudHJ5PC9jb2RlPiBvYmplY3RzLiBJZiB0aGUgcHJvamVjdCBoYXMgbm8KLQkgKiBKYXZhIG5hdHVyZSB0aGVuIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGJlIG9mIGxlbmd0aCB6ZXJvLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRoZSBjbGFzc3BhdGggZW50cmllcyBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4uCi0JICogCi0JICogQGRlcHJlY2F0ZWQgbm90IHVzZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElDbGFzc3BhdGhFbnRyeVtdIGdldEphdmFDbGFzc3BhdGgoSVByb2plY3QgcHJvamVjdCkgewotCQl0cnkgewotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQlJQ2xhc3NwYXRoRW50cnlbXSBjbGFzc3BhdGhFbnRyaWVzID0gamF2YVByb2plY3QuZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCQkJcmV0dXJuIGNsYXNzcGF0aEVudHJpZXM7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJcmV0dXJuIG5ldyBJQ2xhc3NwYXRoRW50cnlbMF07Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJRm9sZGVyIGdldFdlYkNvbXBvbmVudFNlcnZlclJvb3QoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotICAgICAgSUZvbGRlciB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gbnVsbDsKLSAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBpZiAodmMuZXhpc3RzKCkpCi0gICAgICAgIHdlYk1vZHVsZVNlcnZlclJvb3QgPSBKMkVFVXRpbHMuZ2V0T3V0cHV0Q29udGFpbmVyUm9vdCh2Yyk7Ci0KLQkgIHJldHVybiB3ZWJNb2R1bGVTZXJ2ZXJSb290OwotCX0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldFdlYkNvbXBvbmVudFNlcnZlclJvb3RQYXRoKElQcm9qZWN0IHByb2plY3QpewotCQkKLSAgICAgIElDb250YWluZXIgd2ViTW9kdWxlU2VydmVyUm9vdCA9IG51bGw7Ci0gICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgaWYgKHZjICE9IG51bGwgJiYgdmMuZXhpc3RzKCkpewotICAgICAgICBJQ29udGFpbmVyW10gY29udGFpbmVycyA9IEoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldE91dHB1dENvbnRhaW5lcnMocHJvamVjdC5nZXRQcm9qZWN0KCkpOwotICAgICAgICBpZiAoY29udGFpbmVycy5sZW5ndGggPiAwKQotICAgICAgICAgIHdlYk1vZHVsZVNlcnZlclJvb3QgPSBjb250YWluZXJzWzBdOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAod2ViTW9kdWxlU2VydmVyUm9vdCAhPSBudWxsKSAKLSAgICAJcmV0dXJuIHdlYk1vZHVsZVNlcnZlclJvb3QuZ2V0RnVsbFBhdGgoKTsKLSAgICAgIHJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIFVSTCBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBvZiB0aGUKLQkgKiBwcm9qZWN0IGluIGEgc2VydmVyIGluc3RhbmNlIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUgb3IKLQkgKiBoYXMgbm8gYXNzb2NpYXRpb24gdG8gYSBzZXJ2ZXIgaW5zdGFuY2UuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3QgVVJMIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYgotCSAqICAgICAgICAgbmF0dXJlIG9yIGhhcyBubyBhc3NvY2lhdGlvbiB0byBhIHNlcnZlciBpbnN0YW5jZS4KLQkgKiBAZGVwcmVjYXRlZCB1c2UgZ2V0V2ViQ29tcG9uZW50VVJMKC4uKSB3aGljaCBiZWxvbmdzIGluIFNlcnZlclV0aWxzCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V2ViUHJvamVjdFVSTChJUHJvamVjdCBwcm9qZWN0LAotCQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgSVNlcnZlciBzZXJ2ZXIpIHsKLQotCQlTdHJpbmcgd2ViUHJvamVjdFVSTCA9IG51bGw7Ci0JCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotCQlpZiAobW9kdWxlICE9IG51bGwpIHsKLQkJCUlTZXJ2ZXIgc2VydmVySW5zdGFuY2UgPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJGb3JNb2R1bGUobW9kdWxlLAotCQkJCQlzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlciwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlpZiAoc2VydmVySW5zdGFuY2UgIT0gbnVsbCkgewotLy8JCQkJVVJMIHVybCA9ICgoSVVSTFByb3ZpZGVyKSBzZXJ2ZXJJbnN0YW5jZS5nZXREZWxlZ2F0ZSgpKS5nZXRNb2R1bGVSb290VVJMKG1vZHVsZSk7Ci0JCQkJVVJMIHVybCA9ICgoSVVSTFByb3ZpZGVyKXNlcnZlckluc3RhbmNlLmdldEFkYXB0ZXIoSVVSTFByb3ZpZGVyLmNsYXNzKSkuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOwotCQkJCWlmICh1cmwgIT0gbnVsbCkgewotCQkJCQlTdHJpbmcgcyA9IHVybC50b1N0cmluZygpOwotCQkJCQl3ZWJQcm9qZWN0VVJMID0gKHMuZW5kc1dpdGgoIi8iKSA/IHMuc3Vic3RyaW5nKDAsIHMKLQkJCQkJCQkubGVuZ3RoKCkgLSAxKSA6IHMpOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCQlsb2cubG9nKElMb2cuSU5GTywgNTAzNiwgUmVzb3VyY2VVdGlscy5jbGFzcywgImdldFdlYlByb2plY3RVUkwiLAotCQkJCSJwcm9qZWN0PSIgKyBwcm9qZWN0ICsgIix3ZWJQcm9qZWN0VVJMPSIgKyB3ZWJQcm9qZWN0VVJMKTsKLQotCQlyZXR1cm4gd2ViUHJvamVjdFVSTDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZm9yZ2VkIFVSTCBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdAotCSAqIG9mIHRoZSBwcm9qZWN0IGluIGEgc2VydmVyIGluc3RhbmNlIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYgotCSAqIG5hdHVyZSBvciBoYXMgbm8gYXNzb2NpYXRpb24gdG8gYSBzZXJ2ZXIgaW5zdGFuY2UuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuIFRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IFVSTCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIKLQkgKiAgICAgICAgIG5hdHVyZSBvciBoYXMgbm8gYXNzb2NpYXRpb24gdG8gYSBzZXJ2ZXIgaW5zdGFuY2UuCi0JICogQGRlcHJlY2F0ZWQgIG5vdCB1c2VkCi0JICovCi0vLwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGb3JnZWRXZWJQcm9qZWN0VVJMKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIElTZXJ2ZXIgc2VydmVyKXsKLS8vICAJCi0vLyAgCVN0cmluZyB3ZWJQcm9qZWN0VVJMID0gbnVsbDsKLS8vICAJSU1vZHVsZSBtb2R1bGUgPSBnZXRNb2R1bGUocHJvamVjdCk7Ci0vLyAgCWlmIChtb2R1bGUgIT0gbnVsbCkKLS8vICAJewotLy8gIAkJLy9JU2VydmVyIHNlcnZlckluc3RhbmNlID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyRm9yTW9kdWxlKG1vZHVsZSwKLS8vCQkgIC8vIHNlcnZlckZhY3RvcnlJZCwgc2VydmVyLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLS8vICAJCWlmIChzZXJ2ZXIgIT0gbnVsbCkKLS8vICAJCXsKLS8vICAJCQlTdHJpbmcgaG9zdG5hbWUgPSBzZXJ2ZXIuZ2V0SG9zdCgpOwotLy8KLS8vICAJCQkvLyBnZXQgU2VydmVyUG9ydAotLy8gIAkJCWludCBwb3J0TnVtYmVyID0gMDsKLS8vCi0vLyAgCSAgICAgICAgICBTZXJ2ZXJQb3J0W10gcG9ydHMgPSBzZXJ2ZXIuZ2V0U2VydmVyUG9ydHMobnVsbCk7Ci0vLyAgCSAgICAgICAgICBTZXJ2ZXJQb3J0IHBvcnQgPSBudWxsOwotLy8gIAkgICAgICAgICAgZm9yIChpbnQgaXQgPSAwOyBpdDxwb3J0cy5sZW5ndGg7IGl0KyspCi0vLyAgCSAgICAgICAgICB7Ci0vLyAgCSAgICAgICAgICAgIFNlcnZlclBvcnQgcCA9IHBvcnRzW2l0XTsKLS8vICAJICAgICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gcC5nZXRQcm90b2NvbCgpOwotLy8gIAkgICAgICAgICAgICBpZiAocHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC50cmltKCkudG9Mb3dlckNhc2UoKS5lcXVhbHMoImh0dHAiKSkKLS8vICAJICAgICAgICAgICAgewotLy8gIAkgICAgICAgICAgICAgIHBvcnQgPSBwOwotLy8gIAkgICAgICAgICAgICAgIHBvcnROdW1iZXIgPSBwLmdldFBvcnQoKTsKLS8vICAJICAgICAgICAgICAgICBicmVhazsKLS8vICAJICAgICAgICAgICAgfQotLy8gIAkgICAgICAgICAgfQotLy8gIAkgICAgICAgICAgCi0vLyAgCSAgICAgICAgCi0vLyAgCSAgICAgICAgCi0vLyAgCSAgICAgICAgVVJMIHVybCA9IG51bGw7Ci0vLyAgCSAgICAgICAgdHJ5IHsKLS8vICAJICAgICAgICAJdXJsID0gbmV3IFVSTCgiaHR0cCIsIGhvc3RuYW1lLCBwb3J0TnVtYmVyLCAiIik7Ci0vLyAgCSAgICAgICAgfQotLy8gIAkgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKXsKLS8vICAJICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vICAJICAgICAgICB9Ci0vLwotLy8gIAkgICAgICAgIAotLy8gIAkJCS8vVVJMIHVybCA9ICgoSVVSTFByb3ZpZGVyKSBzZXJ2ZXJJbnN0YW5jZS5nZXREZWxlZ2F0ZSgpKS5nZXRNb2R1bGVSb290VVJMKG1vZHVsZSk7Ci0vLyAgCQkJCi0vLyAgCQkJaWYgKHVybCAhPSBudWxsKQotLy8gIAkJCXsKLS8vICAJCQkJU3RyaW5nIHMgPSB1cmwudG9TdHJpbmcoKTsKLS8vICAJCQkJd2ViUHJvamVjdFVSTCA9IHMgKyAiLyIrcHJvamVjdC5nZXROYW1lKCk7Ci0vLyAgCQkJCS8vd2ViUHJvamVjdFVSTCA9IChzLmVuZHNXaXRoKCIvIikgPyBzLnN1YnN0cmluZygwLHMubGVuZ3RoKCktMSkgOiBzKTsKLS8vICAJCQl9Ci0vLyAgCQl9Ci0vLyAgCX0KLS8vIAlJTG9nIGxvZyA9IG5ldyBFY2xpcHNlTG9nKCk7Ci0vLyAgICBsb2cubG9nKElMb2cuSU5GTywgNTAzNiwgUmVzb3VyY2VVdGlscy5jbGFzcywgImdldFdlYlByb2plY3RVUkwiLCAicHJvamVjdD0iK3Byb2plY3QrIix3ZWJQcm9qZWN0VVJMPSIrd2ViUHJvamVjdFVSTCk7Ci0vLyAgCXJldHVybiB3ZWJQcm9qZWN0VVJMOyAgCQotLy8gIH0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBVUkwgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3Qgb2YgdGhlCi0JICogcHJvamVjdCBpbiBhIHNlcnZlciBpbnN0YW5jZSBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIgbmF0dXJlIG9yCi0JICogaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IFVSTCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIKLQkgKiAgICAgICAgIG5hdHVyZSBvciBoYXMgbm8gYXNzb2NpYXRpb24gdG8gYSBzZXJ2ZXIgaW5zdGFuY2UuCi0JICogQGRlcHJlY2F0ZWQgYmVsb25ncyBpbiBTZXJ2ZXJVdGlscwotCSAqCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V2ViUHJvamVjdFVSTChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN0cmluZyB3ZWJQcm9qZWN0VVJMID0gbnVsbDsKLQkJSU1vZHVsZSBtb2R1bGUgPSBnZXRNb2R1bGUocHJvamVjdCk7Ci0JCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJSVNlcnZlciBzZXJ2ZXJJbnN0YW5jZSA9IFNlcnZlclV0aWxzLmdldFNlcnZlckZvck1vZHVsZShtb2R1bGUpOwotCQkJaWYgKHNlcnZlckluc3RhbmNlICE9IG51bGwpIHsKLQkJCQlVUkwgdXJsID0gKChJVVJMUHJvdmlkZXIpc2VydmVySW5zdGFuY2UuZ2V0QWRhcHRlcihJVVJMUHJvdmlkZXIuY2xhc3MpKS5nZXRNb2R1bGVSb290VVJMKG1vZHVsZSk7Ci0JCQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBzID0gdXJsLnRvU3RyaW5nKCk7Ci0JCQkJCXdlYlByb2plY3RVUkwgPSAocy5lbmRzV2l0aCgiLyIpID8gcy5zdWJzdHJpbmcoMCwgcwotCQkJCQkJCS5sZW5ndGgoKSAtIDEpIDogcyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCUlMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLQkJbG9nLmxvZyhJTG9nLklORk8sIDUwMzcsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRXZWJQcm9qZWN0VVJMIiwKLQkJCQkicHJvamVjdD0iICsgcHJvamVjdCArICIsd2ViUHJvamVjdFVSTD0iICsgd2ViUHJvamVjdFVSTCk7Ci0KLQkJcmV0dXJuIHdlYlByb2plY3RVUkw7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICogCi0JICogQGRlcHJlY2F0ZWQgc2hvdWxkIGJlIGluIFNlcnZlclV0aWxzCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RW5jb2RlZFdlYlByb2plY3RVUkwoSVByb2plY3QgcHJvamVjdCkgewotCQlTdHJpbmcgdXJsID0gZ2V0V2ViUHJvamVjdFVSTChwcm9qZWN0KTsKLQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQlpbnQgaW5kZXggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZ0J1ZmZlciBlbmNvZGVkVVJMID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCWVuY29kZWRVUkwuYXBwZW5kKHVybC5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKSk7Ci0JCQkJdHJ5IHsKLQkJCQkJU3RyaW5nIGN0eHRSb290ID0gVVJMRW5jb2Rlci5lbmNvZGUodXJsLnN1YnN0cmluZyhpbmRleCArIDEsIHVybC5sZW5ndGgoKSksICJVVEYtOCIpOwotCQkJCQlpbnQgcGx1c0luZGV4ID0gY3R4dFJvb3QuaW5kZXhPZignKycpOwotCQkJCQl3aGlsZSAocGx1c0luZGV4ICE9IC0xKSB7Ci0JCQkJCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJCQlzYi5hcHBlbmQoY3R4dFJvb3Quc3Vic3RyaW5nKDAsIHBsdXNJbmRleCkpOwotCQkJCQkJc2IuYXBwZW5kKCIlMjAiKTsKLQkJCQkJCXNiLmFwcGVuZChjdHh0Um9vdC5zdWJzdHJpbmcocGx1c0luZGV4ICsgMSwgY3R4dFJvb3QKLQkJCQkJCQkubGVuZ3RoKCkpKTsKLQkJCQkJCWN0eHRSb290ID0gc2IudG9TdHJpbmcoKTsKLQkJCQkJCXBsdXNJbmRleCA9IGN0eHRSb290LmluZGV4T2YoJysnKTsKLQkJCQkJfQotCQkJCQllbmNvZGVkVVJMLmFwcGVuZChjdHh0Um9vdCk7Ci0JCQkJfWNhdGNoIChJT0V4Y2VwdGlvbiBpbyl7Ci0JCQkJCS8vaGFuZGxlciBleGNlcHRpb24KLQkJCQl9CQkJCQotCQkJCXVybCA9IGVuY29kZWRVUkwudG9TdHJpbmcoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdXJsOwotCX0KLQotCS8qKgotCSAqIEdpdmVuIHRoZSA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IG9mIGEgSmF2YSByZXNvdXJjZSwgcmV0dXJucyB0aGUKLQkgKiBwYWNrYWdlIG5hbWUgb2YgdGhlIHJlc291cmNlIG9yIG51bGwgaWYgdGhlIHJlc291cmNlIGlzIG5vdCBwcm9wZXJseQotCSAqIGxvY2F0ZWQgaW4gYSBwcm9qZWN0IG9yIGZvbGRlciBvbiB0aGUgYnVpbGQgY2xhc3NwYXRoIG9yIHRoYXQgaXMgdGhlCi0JICogYnVpbGQgb3V0cHV0IHBhdGguCi0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIEphdmEgcmVzb3VyY2UuCi0JICogQHJldHVybiB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBKYXZhIHJlc291cmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKElQYXRoIGFic29sdXRlUGF0aCkgewotCQl0cnkgewotCQkJSVBhdGggamF2YUZvbGRlclBhdGggPSBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOwotCQkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3RPZihhYnNvbHV0ZVBhdGgpOwotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQlJUGFja2FnZUZyYWdtZW50IGZyYWdtZW50ID0gamF2YVByb2plY3QKLQkJCQkJCS5maW5kUGFja2FnZUZyYWdtZW50KGphdmFGb2xkZXJQYXRoKTsKLQkJCQlpZiAoZnJhZ21lbnQgIT0gbnVsbCkgewotCQkJCQlyZXR1cm4gZnJhZ21lbnQuZ2V0RWxlbWVudE5hbWUoKTsKLQkJCQl9Ci0JCQkJSVBhdGggb3V0cHV0UGF0aCA9IGdldEphdmFPdXRwdXRMb2NhdGlvbihwcm9qZWN0KTsKLQkJCQlpZiAob3V0cHV0UGF0aC5pc1ByZWZpeE9mKGphdmFGb2xkZXJQYXRoKSkgewotCQkJCQlJUGF0aCBqYXZhUGFja2FnZVBhdGggPSBqYXZhRm9sZGVyUGF0aAotCQkJCQkJCS5yZW1vdmVGaXJzdFNlZ21lbnRzKG91dHB1dFBhdGguc2VnbWVudENvdW50KCkpOwotCQkJCQlyZXR1cm4gamF2YVBhY2thZ2VQYXRoLmlzRW1wdHkoKSA/IG51bGwgOiBqYXZhUGFja2FnZVBhdGgKLQkJCQkJCQkudG9TdHJpbmcoKS5yZXBsYWNlKElQYXRoLlNFUEFSQVRPUiwgJy4nKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogR2l2ZW4gdGhlIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4gb2YgYSBKYXZhIHJlc291cmNlLCByZXR1cm5zIHRoZQotCSAqIHBhY2thZ2UgbmFtZSBvZiB0aGUgcmVzb3VyY2UgYXMgYSByZWxhdGl2ZSBwYXRobmFtZSBvciBudWxsIGlmIHRoZQotCSAqIHJlc291cmNlIGlzIG5vdCBwcm9wZXJseSBsb2NhdGVkIGluIGEgcHJvamVjdCBvciBmb2xkZXIgb24gdGhlIGJ1aWxkCi0JICogY2xhc3NwYXRoLgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBKYXZhIHJlc291cmNlLgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgSmF2YSByZXNvdXJjZSBhcyBhIHJlbGF0aXZlIHBhdGguCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRKYXZhUmVzb3VyY2VQYWNrYWdlUGF0aChJUGF0aCBhYnNvbHV0ZVBhdGgpIHsKLQkJU3RyaW5nIHBhY2thZ2VOYW1lID0gUmVzb3VyY2VVdGlscwotCQkJCS5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShhYnNvbHV0ZVBhdGgpOwotCQlyZXR1cm4gKHBhY2thZ2VOYW1lID09IG51bGwgPyBudWxsIDogbmV3IFBhdGgocGFja2FnZU5hbWUucmVwbGFjZSgnLicsCi0JCQkJSVBhdGguU0VQQVJBVE9SKSkpOwotCX0KLQotCS8qKgotCSAqIEdpdmVuIHRoZSA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IG9mIGEgSmF2YSByZXNvdXJjZSwgcmV0dXJucyB0aGUKLQkgKiBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IGlzIG9uIHRoZSBidWlsZCBjbGFzc3BhdGggb3IKLQkgKiBpcyB0aGUgYnVpbGQgb3V0cHV0IHBhdGggYW5kIHRoYXQgY29udGFpbnMgdGhlIGZ1bGx5IHF1YWxpZmllZCBKYXZhCi0JICogcmVzb3VyY2UsIG9yIG51bGwgaWYgbm8gc3VjaCBwcm9qZWN0IG9yIGZvbGRlciBleGlzdHMuCi0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIEphdmEgcmVzb3VyY2UuCi0JICogQHJldHVybiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcHJvamVjdCBvciBmb2xkZXIgY29udGFpbmluZyB0aGUgZnVsbHkKLQkgKiAgICAgICAgIHF1YWxpZmllZCBKYXZhIHJlc291cmNlLgotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRKYXZhUmVzb3VyY2VSb290UGF0aChJUGF0aCBhYnNvbHV0ZVBhdGgpIHsKLQkJdHJ5IHsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0T2YoYWJzb2x1dGVQYXRoKTsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBwZnJzID0gamF2YVByb2plY3QKLQkJCQkJCS5nZXRQYWNrYWdlRnJhZ21lbnRSb290cygpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGZycy5sZW5ndGg7IGkrKykgewotCQkJCQlJUmVzb3VyY2UgZnJhZ21lbnRSb290ID0gcGZyc1tpXS5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLQkJCQkJaWYgKGZyYWdtZW50Um9vdCAhPSBudWxsKSB7Ci0JCQkJCQlJUGF0aCBmcmFnbWVudFBhdGggPSBmcmFnbWVudFJvb3QuZ2V0RnVsbFBhdGgoKTsKLQkJCQkJCWlmIChmcmFnbWVudFBhdGguaXNQcmVmaXhPZihhYnNvbHV0ZVBhdGgpKSB7Ci0JCQkJCQkJcmV0dXJuIGZyYWdtZW50UGF0aDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQlJUGF0aCBvdXRwdXRQYXRoID0gZ2V0SmF2YU91dHB1dExvY2F0aW9uKHByb2plY3QpOwotCQkJCWlmIChvdXRwdXRQYXRoLmlzUHJlZml4T2YoYWJzb2x1dGVQYXRoKSkgewotCQkJCQlyZXR1cm4gb3V0cHV0UGF0aDsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBhbiBVUkwgKEhUVFAgb3IgRklMRSkgdG8gYW4gRWNsaXBzZSByZXNvdXJjZSwgcmV0dXJuaW5nIHRoZQotCSAqIFVSTCBzdHJpbmcgaWYgc3VjY2Vzc2Z1bCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiBBIHZhbHVlIG9mIG51bGwgd2lsbAotCSAqIGRlZmluaXRlbHkgYmUgcmV0dXJuZWQgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbm90IG1ldDoKLQkgKiA8b2w+Ci0JICogPGxpPlRoZSBhYnNvbHV0ZSBwYXRoIGJlZ2lucyB3aXRoIGEgV2ViIFByb2plY3QuCi0JICogPGxpPlRoZSBsZWFkaW5nIHBvcnRpb24gb2YgdGhlIGFic29sdXRlIHBhdGggbWF0Y2hlcyB0aGUgcGF0aCBvZiB0aGUKLQkgKiBjb250YWluZXIgcmV0dXJuZWQgYnkgeyNsaW5rICNnZXRXZWJNb2R1bGVTZXJ2ZXJSb290Ci0JICogZ2V0V2ViTW9kdWxlU2VydmVyUm9vdH0gZm9yIHRoZSBwcm9qZWN0LgotCSAqIDxsaT5UaGUgcGF0aCBkb2VzIG5vdCBsZWFkIHRvIHRoZSBXRUItSU5GIGZvbGRlciBvciBhbnkgZGVzY2VuZGVudAotCSAqIHRoZXJlb2YuCi0JICogPGxpPlRoZSBXZWIgUHJvamVjdCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gZXhwbGljaXQgb3IgZGVmYXVsdCBzZXJ2ZXIKLQkgKiBpbnN0YW5jZS4KLQkgKiA8L29sPgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSBVUkwgb2YgdGhlIGZpbGUsIG9yIG51bGwgaWYgbm8gVVJMIGNhbiBiZSBkZXRlcm1pbmVkLgotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkCi0JICovCi0vLwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRVUkxGcm9tUGF0aChJUGF0aCBhYnNvbHV0ZVBhdGgsCi0vLwkJCVN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIElTZXJ2ZXIgc2VydmVyKSB7Ci0vLwkJcmV0dXJuIGdldFVSTEZyb21QYXRoKGFic29sdXRlUGF0aCwgZ2V0V2ViUHJvamVjdFVSTCgKLS8vCQkJCWdldFByb2plY3RPZihhYnNvbHV0ZVBhdGgpLCBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlcikpOwotLy8JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aAotCSAqIEBwYXJhbSB3ZWJQcm9qZWN0VVJMCi0JICogQHJldHVybgotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkCi0JICovCi0vLwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRVUkxGcm9tUGF0aChJUGF0aCBhYnNvbHV0ZVBhdGgsIFN0cmluZyB3ZWJQcm9qZWN0VVJMKSB7Ci0vLwkJU3RyaW5nQnVmZmVyIHVybCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLS8vCQlJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdE9mKGFic29sdXRlUGF0aCk7Ci0vLwkJSUNvbnRhaW5lciB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gZ2V0V2ViTW9kdWxlU2VydmVyUm9vdChwcm9qZWN0KTsKLS8vCQlpZiAod2ViTW9kdWxlU2VydmVyUm9vdCAhPSBudWxsKSB7Ci0vLwkJCUlQYXRoIHdlYk1vZHVsZVNlcnZlclJvb3RQYXRoID0gd2ViTW9kdWxlU2VydmVyUm9vdC5nZXRGdWxsUGF0aCgpOwotLy8JCQlpZiAod2ViTW9kdWxlU2VydmVyUm9vdFBhdGguaXNQcmVmaXhPZihhYnNvbHV0ZVBhdGgpKSB7Ci0vLwkJCQlpbnQgbnVtU2VnbWVudCA9IHdlYk1vZHVsZVNlcnZlclJvb3RQYXRoLnNlZ21lbnRDb3VudCgpOwotLy8JCQkJaW50IG51bVNlZ21lbnRGcm9tUGF0aCA9IGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKTsKLS8vCQkJCWlmIChudW1TZWdtZW50RnJvbVBhdGggPiBudW1TZWdtZW50KSB7Ci0vLwkJCQkJU3RyaW5nIG5leHRTZWdtZW50ID0gYWJzb2x1dGVQYXRoLnNlZ21lbnQobnVtU2VnbWVudCk7Ci0vLwkJCQkJLy8gY2hlY2sgaWYgdGhlIHNlZ21lbnQgYWZ0ZXIgdGhlIFdlYk1vZHVsZVNlcnZlclJvb3QgaXMKLS8vCQkJCQkvLyBXRUItSU5GIChpZ25vcmluZyBjYXNlKQotLy8JCQkJCWlmIChuZXh0U2VnbWVudCAhPSBudWxsCSYmICFuZXh0U2VnbWVudC5lcXVhbHNJZ25vcmVDYXNlKCJXRUItSU5GIikpIHsKLS8vCQkJCQkJSVBhdGggcmVsYXRpdmVQYXRoID0gYWJzb2x1dGVQYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMobnVtU2VnbWVudCk7Ci0vLwkJCQkJCWlmICh3ZWJQcm9qZWN0VVJMICE9IG51bGwpCi0vLwkJCQkJCQl1cmwuYXBwZW5kKHdlYlByb2plY3RVUkwpLmFwcGVuZChJUGF0aC5TRVBBUkFUT1IpLmFwcGVuZChyZWxhdGl2ZVBhdGgudG9TdHJpbmcoKSk7Ci0vLwkJCQkJfQotLy8JCQkJfSBlbHNlIGlmIChudW1TZWdtZW50RnJvbVBhdGggPT0gbnVtU2VnbWVudCkKLS8vCQkJCQl1cmwuYXBwZW5kKHdlYlByb2plY3RVUkwpOwotLy8JCQl9Ci0vLwkJfQotLy8JCWlmICh1cmwubGVuZ3RoKCkgPCAxKSB7Ci0vLwkJCUlXb3Jrc3BhY2VSb290IHdvcmtzcGFjZSA9IGdldFdvcmtzcGFjZVJvb3QoKTsKLS8vCQkJdXJsLmFwcGVuZChnZXRSZXNvdXJjZVVSSSh3b3Jrc3BhY2UuZ2V0RmlsZShhYnNvbHV0ZVBhdGgpKSk7Ci0vLwkJfQotLy8JCUlMb2cgbG9nID0gbmV3IEVjbGlwc2VMb2coKTsKLS8vCQlsb2cubG9nKElMb2cuSU5GTywgNTAzOCwgUmVzb3VyY2VVdGlscy5jbGFzcywgImdldFVSTEZyb21QYXRoIiwKLS8vCQkJCSJhYnNvbHV0ZVBhdGg9IiArIGFic29sdXRlUGF0aCArICIsdXJsPSIgKyB1cmwpOwotLy8KLS8vCQlyZXR1cm4gdXJsLnRvU3RyaW5nKCk7Ci0vLwl9Ci0KLQkvKioKLQkgKiBDb3BpZXMgYSBzZXQgb2YgZmlsZXMgZnJvbSBhIHBsdWdpbidzIGluc3RhbGxhdGlvbiBsb2NhdGlvbiB0byBhIG5hdGl2ZQotCSAqIGRpcmVjdG9yeS4gVGhlIGZpbGVzIGFyZSBuYW1lZCBpbiBhbiBpbmRleCBmaWxlIGxvY2F0ZWQgcmVsYXRpdmUgdG8gdGhlCi0JICogcGx1Z2luJ3MgaW5zdGFsbGF0aW9uIGxvY2F0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBwbHVnaW4KLQkgKiAgICAgICAgICAgIFRoZSBwbHVnaW4gY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gc291cmNlUGF0aAotCSAqICAgICAgICAgICAgVGhlIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT5wbHVnaW48L2NvZGU+IGluc3RhbGwKLQkgKiAgICAgICAgICAgIGxvY2F0aW9uLCBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LiBJZiBudWxsLCB0aGVuIHRoZQotCSAqICAgICAgICAgICAgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24gaXMgdGhlIHNvdXJjZSBwYXRoIChpZS4gbnVsbCBpcwotCSAqICAgICAgICAgICAgZXF1aXZhbGVudCB0byAiLiIpLgotCSAqIEBwYXJhbSBpbmRleFBhdGhuYW1lCi0JICogICAgICAgICAgICBBIGZpbGUgY29udGFpbmluZyBhIHdoaXRlc3BhY2UtZGVsaW1pdHRlZCBsaXN0IG9mIHBhdGhuYW1lcyBvZgotCSAqICAgICAgICAgICAgdGhlIGZpbGVzIHRvIGNvcHkuIFRoZSBwYXRobmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZQotCSAqICAgICAgICAgICAgPGNvZGU+cGx1Z2luIHNvdXJjZVBhdGg8L2NvZGU+LiBNdXN0IG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSB0YXJnZXRQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgbmF0aXZlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgZmlsZXMKLQkgKiAgICAgICAgICAgIHdpbGwgYmUgY29waWVkLiBUaGUgcmVsYXRpdmUgcGF0aG5hbWVzIG9mIHRoZSBmaWxlcyBuYW1lZCBpbgotCSAqICAgICAgICAgICAgdGhlIDxjb2RlPmluZGV4UGF0aG5hbWU8L2NvZGU+IGZpbGUgYXJlIHByZXNlcnZlZC4gTXVzdCBub3QKLQkgKiAgICAgICAgICAgIGJlIG51bGwuCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotCSAqICAgICAgICAgICAgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiBpbmRpY2F0aW5nIGFuIElPIGVycm9yIGhhcyBvY2N1cmVkLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgdm9pZCBjb3B5SW5kZXhlZEZpbGVzVG9PUyhQbHVnaW4gcGx1Z2luLCBJUGF0aCBzb3VyY2VQYXRoLAotCQkJSVBhdGggaW5kZXhQYXRobmFtZSwgSVBhdGggdGFyZ2V0UGF0aCwKLQkJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJbnB1dFN0cmVhbSBpbnB1dCA9IHBsdWdpbi5vcGVuU3RyZWFtKGluZGV4UGF0aG5hbWUpOwotCQlFbnVtZXJhdGlvbiBmaWxlbmFtZXMgPSBTdHJpbmdVdGlscy5wYXJzZUZpbGVuYW1lc0Zyb21TdHJlYW0oaW5wdXQpOwotCQljb3B5RW51bWVyYXRlZEZpbGVzVG9PUyhwbHVnaW4sIHNvdXJjZVBhdGgsIGZpbGVuYW1lcywgdGFyZ2V0UGF0aCwKLQkJCQlwcm9ncmVzc01vbml0b3IpOwotCX0KLQotCS8qKgotCSAqIENvcGllcyBhIHNldCBvZiBmaWxlcyBmcm9tIGEgcGx1Z2luJ3MgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIHRvIGEgbmF0aXZlCi0JICogZGlyZWN0b3J5LiBUaGUgZmlsZXMgYXJlIG5hbWVkIGluIGFuIGVudW1lcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBwbHVnaW4KLQkgKiAgICAgICAgICAgIFRoZSBwbHVnaW4gY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gc291cmNlUGF0aAotCSAqICAgICAgICAgICAgVGhlIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT5wbHVnaW48L2NvZGU+IGluc3RhbGwKLQkgKiAgICAgICAgICAgIGxvY2F0aW9uLCBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LiBJZiBudWxsLCB0aGVuIHRoZQotCSAqICAgICAgICAgICAgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24gaXMgdGhlIHNvdXJjZSBwYXRoIChpZS4gbnVsbCBpcwotCSAqICAgICAgICAgICAgZXF1aXZhbGVudCB0byAiLiIpLgotCSAqIEBwYXJhbSBwYXRobmFtZXMKLQkgKiAgICAgICAgICAgIEFuIGVudW1lcmF0aW9uIG9mIHBhdGhuYW1lcyBvZiB0aGUgZmlsZXMgdG8gY29weS4gVGhlCi0JICogICAgICAgICAgICBwYXRobmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT5wbHVnaW4gc291cmNlUGF0aDwvY29kZT4uCi0JICogICAgICAgICAgICBNdXN0IG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSB0YXJnZXRQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgbmF0aXZlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgZmlsZXMKLQkgKiAgICAgICAgICAgIHdpbGwgYmUgY29waWVkLiBUaGUgcmVsYXRpdmUgcGF0aG5hbWVzIG9mIHRoZSBmaWxlcyBuYW1lZCBpbgotCSAqICAgICAgICAgICAgdGhlIDxjb2RlPnBhdGhuYW1lczwvY29kZT4gZW51bWVyYXRpb24gYXJlIHByZXNlcnZlZC4gTXVzdAotCSAqICAgICAgICAgICAgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotCSAqICAgICAgICAgICAgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiBpbmRpY2F0aW5nIGFuIElPIGVycm9yIGhhcyBvY2N1cmVkLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgdm9pZCBjb3B5RW51bWVyYXRlZEZpbGVzVG9PUyhQbHVnaW4gcGx1Z2luLCBJUGF0aCBzb3VyY2VQYXRoLAotCQkJRW51bWVyYXRpb24gcGF0aG5hbWVzLCBJUGF0aCB0YXJnZXRQYXRoLAotCQkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXdoaWxlIChwYXRobmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCVN0cmluZyBmaWxlbmFtZSA9IChTdHJpbmcpIHBhdGhuYW1lcy5uZXh0RWxlbWVudCgpOwotCQkJY29weUZpbGVUb09TKHBsdWdpbiwgc291cmNlUGF0aCwgbmV3IFBhdGgoZmlsZW5hbWUpLCB0YXJnZXRQYXRoLAotCQkJCQlwcm9ncmVzc01vbml0b3IpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29waWVzIGEgZmlsZSBmcm9tIGEgcGx1Z2luJ3MgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIHRvIGEgbmF0aXZlCi0JICogZGlyZWN0b3J5LgotCSAqIAotCSAqIEBwYXJhbSBwbHVnaW4KLQkgKiAgICAgICAgICAgIFRoZSBwbHVnaW4gY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gc291cmNlUGF0aAotCSAqICAgICAgICAgICAgVGhlIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT5wbHVnaW48L2NvZGU+IGluc3RhbGwKLQkgKiAgICAgICAgICAgIGxvY2F0aW9uLCBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LiBJZiBudWxsLCB0aGVuIHRoZQotCSAqICAgICAgICAgICAgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24gaXMgdGhlIHNvdXJjZSBwYXRoIChpZS4gbnVsbCBpcwotCSAqICAgICAgICAgICAgZXF1aXZhbGVudCB0byAiLiIpLgotCSAqIEBwYXJhbSBwYXRobmFtZQotCSAqICAgICAgICAgICAgVGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGNvcHkuIFRoZSBwYXRobmFtZSBpcyByZWxhdGl2ZSB0bwotCSAqICAgICAgICAgICAgdGhlIDxjb2RlPnBsdWdpbiBzb3VyY2VQYXRoPC9jb2RlPi4gTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gdGFyZ2V0UGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG5hdGl2ZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIGZpbGUKLQkgKiAgICAgICAgICAgIHdpbGwgYmUgY29waWVkLiBUaGUgcmVsYXRpdmUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgaXMKLQkgKiAgICAgICAgICAgIHByZXNlcnZlZC4gTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0JICogICAgICAgICAgICBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgQW4gZXhjZXB0aW9uIGluZGljYXRpbmcgYW4gSU8gZXJyb3IgaGFzIG9jY3VyZWQuCi0JICovCi0Jc3RhdGljIHB1YmxpYyB2b2lkIGNvcHlGaWxlVG9PUyhQbHVnaW4gcGx1Z2luLCBJUGF0aCBzb3VyY2VQYXRoLAotCQkJSVBhdGggcGF0aG5hbWUsIElQYXRoIHRhcmdldFBhdGgsIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSVBhdGggdGFyZ2V0ID0gdGFyZ2V0UGF0aC5hcHBlbmQocGF0aG5hbWUpOwotCQlJUGF0aCBzb3VyY2UgPSBzb3VyY2VQYXRoID09IG51bGwgPyBwYXRobmFtZSA6IHNvdXJjZVBhdGgKLQkJCQkuYXBwZW5kKHBhdGhuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBwbHVnaW4ub3BlblN0cmVhbShzb3VyY2UpOwotCQlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0LnRvT1NTdHJpbmcoKSk7Ci0JCWNvcHlTdHJlYW0oaW5wdXQsIG91dHB1dCk7Ci0JCWlucHV0LmNsb3NlKCk7Ci0JCW91dHB1dC5jbG9zZSgpOwotCX0KLQotCS8qKgotCSAqIENvcGllcyBkYXRhIGZyb20gb25lIHN0cmVhbSB0byBhbm90aGVyLgotCSAqIAotCSAqIEBwYXJhbSBpbnB1dAotCSAqICAgICAgICAgICAgVGhlIGlucHV0IHN0cmVhbS4KLQkgKiBAcGFyYW0gb3V0cHV0Ci0JICogICAgICAgICAgICBUaGUgb3V0cHV0IHN0cmVhbS4KLQkgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBBbiBleGNlcHRpb24gaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIHByb2Nlc3NpbmcgZWl0aGVyIG9mCi0JICogICAgICAgICAgICAgdGhlIHN0cmVhbXMuCi0JICovCi0Jc3RhdGljIHB1YmxpYyBpbnQgY29weVN0cmVhbShJbnB1dFN0cmVhbSBpbnB1dCwgT3V0cHV0U3RyZWFtIG91dHB1dCkKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWludCB0ID0gMDsKLQkJYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOwotCQlpbnQgbiA9IGlucHV0LnJlYWQoYnVmZmVyKTsKLQkJd2hpbGUgKG4gPj0gMCkgewotCQkJb3V0cHV0LndyaXRlKGJ1ZmZlciwgMCwgbik7Ci0JCQl0ICs9IG47Ci0JCQluID0gaW5wdXQucmVhZChidWZmZXIpOwotCQl9Ci0JCXJldHVybiB0OwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuYXRpdmUgZGlyZWN0b3J5IHBhdGggZXF1YWwgdG8gdGhlIHBhcmVudCBwb3J0aW9uIG9mIHRoZSBnaXZlbgotCSAqIDxjb2RlPnBhdGhuYW1lPC9jb2RlPi4gSWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cywgdGhlbiBubyBhY3Rpb24KLQkgKiBpcyB0YWtlbi4KLQkgKiAKLQkgKiBAcGFyYW0gcGF0aG5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBwYXRobmFtZSB0byB0aGUgZmlsZSB3aG9zZSBwYXJlbnQgZGlyZWN0b3J5IHNob3VsZCBiZQotCSAqICAgICAgICAgICAgY3JlYXRlZC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgQW4gZXhjZXB0aW9uIGlmIGFuIElPIGVycm9yIG9jY3Vycy4KLQkgKi8KLQlzdGF0aWMgcHVibGljIHZvaWQgY3JlYXRlUGFyZW50RGlyZWN0b3J5Rm9yKFN0cmluZyBwYXRobmFtZSkKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHBhdGhuYW1lKTsKLQkJRmlsZSBwYXJlbnQgPSBmaWxlLmdldFBhcmVudEZpbGUoKTsKLQkJaWYgKHBhcmVudCAhPSBudWxsKSB7Ci0JCQlwYXJlbnQubWtkaXJzKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBJUmVzb3VyY2UgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHNlbGVjdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gb2JqZWN0Ci0JICogICAgICAgICAgICBUaGUgc2VsZWN0aW9uCi0JICogQHJldHVybiBJUmVzb3VyY2UgaWYgdGhlIHNlbGVjdGlvbiByZXByZXNlbnRzIGFuIElSZXNvdXJjZS4gUmV0dXJucyBudWxsCi0JICogICAgICAgICBvdGhlcndpc2UuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICovCi0Jc3RhdGljIHB1YmxpYyBJUmVzb3VyY2UgZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKE9iamVjdCBvYmopCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlSZXNvdXJjZSByZXMgPSBudWxsOwotCQlpZiAob2JqICE9IG51bGwpIHsKLQkJCWlmIChvYmogaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKLQkJCQlyZXMgPSAoSVJlc291cmNlKSBvYmo7Ci0JCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIElKYXZhRWxlbWVudCkgewotCQkJCUlKYXZhRWxlbWVudCBqYXZhRWxlbWVudCA9IChJSmF2YUVsZW1lbnQpIG9iajsKLQkJCQlyZXMgPSBqYXZhRWxlbWVudC5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLQkJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRW50ZXJwcmlzZUJlYW4pIHsKLQkJCQlFbnRlcnByaXNlQmVhbiBlamJCZWFuID0gKEVudGVycHJpc2VCZWFuKSBvYmo7Ci0JCQkJSVByb2plY3QgZWpiUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlamJCZWFuKTsKLQkJCQlpZiAoZWpiUHJvamVjdCAhPSBudWxsKQotCQkJCQlyZXMgPSBlamJQcm9qZWN0OwotCQkJfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBTZXNzaW9uQmVhbikgewotCQkJCVNlc3Npb25CZWFuIEpFRTVCZWFuID0gKFNlc3Npb25CZWFuKSBvYmo7Ci0JCQkJSVByb2plY3QgZWpiUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChKRUU1QmVhbik7Ci0JCQkJaWYgKGVqYlByb2plY3QgIT0gbnVsbCkKLQkJCQkJcmVzID0gZWpiUHJvamVjdDsKLQkJCX0KLQotCQl9Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkvLyBOYXVnaHR5IGJpdHMuLi4KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCS8vCi0JLy8gQ3JlYXRlcyBhIHBhdGggb2YgZm9sZGVycy4KLQkvLyBEbyBub3QgY2FsbCB3aXRoIGFuIGFic29sdXRlUGF0aCBvZiBsZXNzIHRoYW4gb25lIHNlZ21lbnQuCi0JLy8KLQkvLyAgcHJpdmF0ZSBzdGF0aWMgSUNvbnRhaW5lciBtYWtlRm9sZGVyUGF0aCAoCi0JLy8gICAgICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0JLy8gICAgSVBhdGggYWJzb2x1dGVQYXRoLAotCS8vICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotCS8vICAgIFN0YXR1c01vbml0b3Igc3RhdHVzTW9uaXRvcgotCS8vICApCi0JLy8gIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JLy8gIHsKLQkvLyAgICBpZiAoYWJzb2x1dGVQYXRoLnNlZ21lbnRDb3VudCgpIDw9IDEpCi0JLy8gICAgewotCS8vICAgICAgcmV0dXJuIGdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KGFic29sdXRlUGF0aC5zZWdtZW50KDApKTsKLQkvLyAgICB9Ci0JLy8gICAgZWxzZQotCS8vICAgIHsKLQkvLyAgICAgIElDb250YWluZXIgcGFyZW50ID0gbWFrZUZvbGRlclBhdGgocmVzb3VyY2VDb250ZXh0LAotCS8vIGFic29sdXRlUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSksIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzTW9uaXRvcik7Ci0JLy8gICAgICBTdHJpbmcgZm9sZGVyTmFtZSA9IGFic29sdXRlUGF0aC5sYXN0U2VnbWVudCgpOwotCS8vICAgICAgcmV0dXJuIG1ha2VGb2xkZXIocmVzb3VyY2VDb250ZXh0LCBwYXJlbnQsZm9sZGVyTmFtZSwgcHJvZ3Jlc3NNb25pdG9yICwKLQkvLyBzdGF0dXNNb25pdG9yKTsKLQkvLyAgICB9Ci0JLy8gIH0KLQkvLwotCS8vIENyZWF0ZXMgYSBmb2xkZXIgdW5kZXIgYSBjb250YWluZXIuCi0JLy8gVGhlIGNvbnRhaW5lciBtdXN0IGFscmVhZHkgZXhpc3QuCi0JLy8KLQkvLyBwcml2YXRlIHN0YXRpYyBJRm9sZGVyIG1ha2VGb2xkZXIgKAotCS8vICAgICAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotCS8vICAgIElDb250YWluZXIgcGFyZW50LAotCS8vICAgIFN0cmluZyBmb2xkZXJOYW1lLAotCS8vICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotCS8vICAgIFN0YXR1c01vbml0b3Igc3RhdHVzTW9uaXRvcgotCS8vICApCi0JLy8gIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JLy8gIHsKLQkvLyAgICBJUmVzb3VyY2UgY2hpbGQgPSBwYXJlbnQuZmluZE1lbWJlcihmb2xkZXJOYW1lKTsKLQkvLyAgICBpZiAoY2hpbGQgPT0gbnVsbCkKLQkvLyAgICB7Ci0JLy8gICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkpIHsKLQkvLyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKG5ldwotCS8vIFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsV2ViU2VydmljZVBsdWdpbi5JRCwwLAotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2VydmljZVBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX0ZPTERFUl9DUkVBVElPTl9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZm9sZGVyTmFtZX0pLG51bGwpLAotCS8vIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpKTsKLQkvLyAgICAgICAgaWYgKHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCS8vCi0JLy8gICAgICAgICAgaWYgKCByZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfVE9fQUxMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VDb250ZXh0LnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKHRydWUpOwotCS8vCi0JLy8gICAgICB9Ci0JLy8gICAgICBJRm9sZGVyIGZvbGRlciA9IHBhcmVudC5nZXRGb2xkZXIobmV3IFBhdGgoZm9sZGVyTmFtZSkpOwotCS8vICAgICAgZm9sZGVyLmNyZWF0ZSh0cnVlLHRydWUscHJvZ3Jlc3NNb25pdG9yKTsKLQkvLyAgICAgIHJldHVybiBmb2xkZXI7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UgaWYgKGNoaWxkLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRk9MREVSKQotCS8vICAgIHsKLQkvLyAgICAgIHJldHVybiAoSUZvbGRlciljaGlsZDsKLQkvLyAgICB9Ci0JLy8gICAgZWxzZQotCS8vICAgIHsKLQkvLyAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldwotCS8vIFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCxXZWJTZXJ2aWNlUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZPTERFUiIsbmV3Ci0JLy8gT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLmFwcGVuZChmb2xkZXJOYW1lKS50b1N0cmluZygpfSksbnVsbCkpOwotCS8vICAgIH0KLQkvLyAgfQotCi0JLy8KLQkvLyBDcmVhdGVzIGEgZmlsZSB1bmRlciBhIGNvbnRhaW5lci4KLQkvLyBUaGUgY29udGFpbmVyIG11c3QgYWxyZWFkeSBleGlzdC4KLQkvLwotCS8vIHByaXZhdGUgc3RhdGljIElGaWxlIG1ha2VGaWxlICgKLQkvLyAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotCS8vICAgIElDb250YWluZXIgcGFyZW50LAotCS8vICAgIFN0cmluZyBmaWxlTmFtZSwKLQkvLyAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IKLQkvLyAgKQotCS8vICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCS8vICB7Ci0JLy8gICAgSVJlc291cmNlIGNoaWxkID0gcGFyZW50LmZpbmRNZW1iZXIoZmlsZU5hbWUpOwotCS8vICAgIGlmIChjaGlsZCAhPSBudWxsKQotCS8vICAgIHsKLQkvLyAgICAgIGlmIChjaGlsZC5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0JLy8gICAgICB7Ci0JLy8gICAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpIHsKLQkvLyAgICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdHVzTW9uaXRvci5yZXBvcnRTdGF0dXMoIG5ldwotCS8vIFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsV2ViU2VydmljZVBsdWdpbi5JRCwwLAotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2VydmljZVBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEIiwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7cGFyZW50LmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxmaWxlTmFtZX0pLG51bGwpLAotCS8vIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpKTsKLQkvLwotCS8vICAgICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkvLwotCS8vICAgICAgICAgIGlmICggcmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JLy8gICAgICAgIH0KLQkvLyAgICAgICAgLy9XZSBoYXZlIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIHNvIGNoZWNrIGlmIGZpbGUgaXMgcmVhZC1vbmx5Ci0JLy8gICAgICAgIGlmIChjaGlsZC5pc1JlYWRPbmx5KCkpCi0JLy8gICAgICAgIHsKLQkvLyAgICAgICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpIHsKLQkvLwotCS8vICAgICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKCBuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVEIiwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7cGFyZW50LmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxmaWxlTmFtZX0pLG51bGwpLAotCS8vIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpKTsKLQkvLwotCS8vICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCS8vCi0JLy8gICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JLy8gICAgICAgICAgfQotCS8vCi0JLy8gICAgICAgICAgSUZpbGVbXSBmaWxlcyA9IG5ldyBJRmlsZVsxXTsKLQkvLyAgICAgICAgICBmaWxlc1swXSA9IChJRmlsZSljaGlsZDsKLQkvLwotCS8vICAgICAgICAgIGlmICgKLQkvLyAhc3RhdHVzTW9uaXRvci5yZXBvcnRTdGF0dXMoZ2V0V29ya3NwYWNlKCkudmFsaWRhdGVFZGl0KGZpbGVzLG51bGwpKSkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0JLy8gICAgICAgIH0KLQkvLwotCS8vICAgICAgICAvL0NoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIGV4aXN0aW5nIGZpbGUuCi0JLy8gICAgICAgICAgICBJRmlsZSBmaWxlID0gcGFyZW50LmdldEZpbGUobmV3IFBhdGgoZmlsZU5hbWUpKTsKLQkvLyAgICAgICAgZmlsZS5zZXRDb250ZW50cyhpbnB1dFN0cmVhbSx0cnVlLHRydWUscHJvZ3Jlc3NNb25pdG9yKTsKLQkvLyAgICAgICAgcmV0dXJuIGZpbGU7Ci0JLy8KLQkvLyAgICAgIH0KLQkvLyAgICAgIGVsc2UKLQkvLyAgICAgIHsKLQkvLyAgICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuRVJST1IsV2ViU2VydmljZVBsdWdpbi5JRCwwLFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9SRVNPVVJDRV9OT1RfRklMRSIsbmV3Ci0JLy8gT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLmFwcGVuZChmaWxlTmFtZSl9KSxudWxsKSk7Ci0JLy8gICAgICB9Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICB7Ci0JLy8gICAgICAgIC8vQ3JlYXRlIGEgbmV3IGZpbGUuCi0JLy8gICAgICAgIElGaWxlIGZpbGUgPSBwYXJlbnQuZ2V0RmlsZShuZXcgUGF0aChmaWxlTmFtZSkpOwotCS8vICAgICAgICBmaWxlLmNyZWF0ZShpbnB1dFN0cmVhbSx0cnVlLHByb2dyZXNzTW9uaXRvcik7Ci0JLy8gICAgICAgIHJldHVybiBmaWxlOwotCS8vICAgIH0KLQkvLyAgfQotCi0JLyoqCi0JICogRGVsZXRlcyBhIGZpbGUgdW5kZXIgYSBjb250YWluZXIuIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIC0KLQkgKiAgICAgICAgICAgIHRoZSBJRmlsZSB0byBiZSBkZWxldGVkCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotCSAqIEBwYXJhbSBzdGF0dXNNb25pdG9yCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlmIGl0IGV4aXN0cyBhbmQgaXMKLQkgKiAgICAgICAgIHN1Y2Nlc3NmdWxseSBkZWxldGVkLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JLy8gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVGaWxlICgKLQkvLyAgICAgICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkvLyAgICBJRmlsZSBmaWxlLAotCS8vICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotCS8vICAgIFN0YXR1c01vbml0b3Igc3RhdHVzTW9uaXRvciApCi0JLy8gICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkvLyAgICB7Ci0JLy8gICAgICAgIGlmIChmaWxlLmV4aXN0cygpKQotCS8vICAgICAgICB7Ci0JLy8gICAgICAgICAgICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSkgewotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKCBuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2VydmljZVBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEIiwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdCi0JLy8ge2ZpbGUuZ2V0UGFyZW50KCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZpbGUuZ2V0TmFtZSgpfSksbnVsbCksCi0JLy8gZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkpOwotCS8vCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkvLwotCS8vICAgICAgICAgICAgICAgIGlmICggcmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VDb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCh0cnVlKTsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkvLyAgICAgICAgICAgICAgICAvL1dlIGhhdmUgcGVybWlzc2lvbiB0byBvdmVyd3JpdGUgc28gY2hlY2sgaWYgZmlsZSBpcyByZWFkLW9ubHkKLQkvLyAgICAgICAgICAgICAgICBpZiAoZmlsZS5pc1JlYWRPbmx5KCkpCi0JLy8gICAgICAgICAgICAgICAgewotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKSB7Ci0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKCBuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2VydmljZVBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQiLAotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10KLQkvLyB7ZmlsZS5nZXRQYXJlbnQoKS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZS5nZXROYW1lKCl9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCS8vCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCh0cnVlKTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0JLy8gICAgICAgICAgICAgICAgICAgICAgICBJRmlsZVtdIGZpbGVzID0gbmV3IElGaWxlWzFdOwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbMF0gPSBmaWxlOwotCS8vCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICBpZiAoCi0JLy8gIXN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcyxudWxsKSkpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkvLyAgICAgICAgICAgICAgICB9Ci0JLy8gICAgICAgICAgICAgICAgZmlsZS5kZWxldGUodHJ1ZSxwcm9ncmVzc01vbml0b3IpOwotCS8vICAgICAgICAgICAgICAgIH0KLQkvLyAgICAgICAgLy9BdCB0aGlzIHBvaW50LCBlaXRoZXIgdGhlIGZpbGUgZGlkIG5vdCBleGlzdCBvciB3ZSBzdWNjZXNzZnVsbHkgZGVsZXRlZAotCS8vIGl0LiBSZXR1cm4gc3VjY2Vzcy4KLQkvLyAgICAgICAgcmV0dXJuIHRydWU7Ci0JLy8gIH0KLQkvKioKLQkgKiBEZWxldGVzIGEgZm9sZGVyIHVuZGVyIGEgY29udGFpbmVyLgotCSAqIAotCSAqIEBwYXJhbSBmb2xkZXIgLQotCSAqICAgICAgICAgICAgdGhlIElGb2xkZXIgdG8gYmUgZGVsZXRlZAotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiBAcGFyYW0gc3RhdHVzTW9uaXRvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZm9sZGVyIGRvZXMgbm90IGV4aXN0IG9yIGlmIGl0IGV4aXN0cyBhbmQgaXMKLQkgKiAgICAgICAgIHN1Y2Nlc3NmdWxseSBkZWxldGVkIGFsb25nIHdpdGggaXRzIG1lbWJlcnMuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQkvLyAgcHVibGljIHN0YXRpYyBib29sZWFuIGRlbGV0ZUZvbGRlciAoCi0JLy8gICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkvLyAgICBJRm9sZGVyIGZvbGRlciwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IKLQkvLyAgKQotCS8vICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCS8vICB7Ci0JLy8gICAgaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHJldHVybiB0cnVlOwotCS8vCi0JLy8gICAgYm9vbGVhbiBkZWxldGVkID0gdHJ1ZTsKLQkvLyAgICBJUmVzb3VyY2VbXSByZXNvdXJjZXMgPSBmb2xkZXIubWVtYmVycygpOwotCS8vICAgIGZvciAoaW50IGk9MDsgaTxyZXNvdXJjZXMubGVuZ3RoOyBpKyspCi0JLy8gICAgewotCS8vICAgICAgSVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOwotCS8vICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUpCi0JLy8gICAgICB7Ci0JLy8gICAgICAgIGRlbGV0ZWQgPSBkZWxldGVGaWxlKHJlc291cmNlQ29udGV4dCwgKElGaWxlKXJlc291cmNlLCBwcm9ncmVzc01vbml0b3IsCi0JLy8gc3RhdHVzTW9uaXRvcik7Ci0JLy8gICAgICB9Ci0JLy8gICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyKQotCS8vICAgICAgewotCS8vICAgICAgICBkZWxldGVkID0gZGVsZXRlRm9sZGVyKCByZXNvdXJjZUNvbnRleHQsIChJRm9sZGVyKXJlc291cmNlLAotCS8vIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzTW9uaXRvcik7Ci0JLy8gICAgICB9Ci0JLy8KLQkvLyAgICAgIGlmICghZGVsZXRlZCkgYnJlYWs7Ci0JLy8gICAgfQotCS8vICAgIGlmIChkZWxldGVkKSB7Ci0JLy8gICAgICBmb2xkZXIuZGVsZXRlKHRydWUsIHRydWUsIHByb2dyZXNzTW9uaXRvcik7Ci0JLy8gICAgICByZXR1cm4gdHJ1ZTsKLQkvLyAgICB9Ci0JLy8gICAgZWxzZQotCS8vICAgICAgcmV0dXJuIGZhbHNlOwotCS8vCi0JLy8gIH0KLQkvKioKLQkgKiBEZWxldGVzIGEgc2V0IG9mIGZpbGVzIHRoYXQgYXJlIG5hbWVkIGluIGFuIGluZGV4IGZpbGUgbG9jYXRlZCByZWxhdGl2ZQotCSAqIHRvIHRoZSBwbHVnaW4ncyBpbnN0YWxsYXRpb24gbG9jYXRpb24uCi0JICogCi0JICogQHBhcmFtIHBsdWdpbgotCSAqICAgICAgICAgICAgVGhlIHBsdWdpbiBjb250YWluaW5nIHRoZSBpbmRleGVkIGZpbGUgTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gc291cmNlUGF0aCAtCi0JICogICAgICAgICAgICByZWxhdGl2ZSBwYXRoIG9mIHRoZSBpbmRleGVkIGZpbGUgcGFzc2luZyBhIG51bGwgaW4gaGFzIHRoZQotCSAqICAgICAgICAgICAgc2FtZSBlZmZlY3QgYXMgcGFzc2luZyBhICIuIiBpbgotCSAqIEBwYXJhbSBpbmRleEZpbGVQYXRoIC0KLQkgKiAgICAgICAgICAgIHRoZSBpbmRleGVkIGZpbGVuYW1lIE11c3Qgbm90IGJlIG51bGwKLQkgKiBAcGFyYW0gdGFyZ2V0UGF0aCAtCi0JICogICAgICAgICAgICBwYXRoIGNvbnRhaW5pbmcgdGhlIGZpbGVzIG5hbWVkIGluIHRoZSBpbmRleGVkIGZpbGUgTXVzdCBub3QKLQkgKiAgICAgICAgICAgIGJlIG51bGwsIHRoaXMgcGF0aCBtdXN0IGVuZCB3aXRoIGEgdHJhaWxpbmcgc2VwYXJhdG9yCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotCSAqLwotCS8vICBwdWJsaWMgc3RhdGljIHZvaWQgZGVsZXRlSW5kZXhGaWxlc0Zyb21PUyAoCi0JLy8gICAgUGx1Z2luIHBsdWdpbiwKLQkvLyAgICBJUGF0aCBpbmRleEZpbGVQYXRoLAotCS8vICAgIElQYXRoIHRhcmdldFBhdGgKLQkvLyAgKQotCS8vICB0aHJvd3MgSU9FeGNlcHRpb24gewotCS8vICAgIElucHV0U3RyZWFtIGlucHV0ID0gcGx1Z2luLm9wZW5TdHJlYW0oaW5kZXhGaWxlUGF0aCk7Ci0JLy8gICAgRW51bWVyYXRpb24gZmlsZW5hbWVzID0gU3RyaW5nVXRpbHMucGFyc2VGaWxlbmFtZXNGcm9tU3RyZWFtKGlucHV0KTsKLQkvLyAgICB3aGlsZSAoZmlsZW5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JLy8gICAgICBGaWxlIHRhcmdldEZpbGUgPQotCS8vIHRhcmdldFBhdGguYXBwZW5kKChTdHJpbmcpZmlsZW5hbWVzLm5leHRFbGVtZW50KCkpLnRvRmlsZSgpOwotCS8vICAgICAgaWYgKHRhcmdldEZpbGUuZXhpc3RzKCkpCi0JLy8gICAgICAgIHRhcmdldEZpbGUuZGVsZXRlKCk7Ci0JLy8gICAgfQotCS8vICB9Ci0JLyoqCi0JICogUmV0dXJucyBhIFVSSSByZWZlcmVuY2UgdG8gdGhlIGdpdmVuIEVjbGlwc2UgcmVzb3VyY2UsIG9yIG51bGwgaWYgbm8gc3VjaAotCSAqIHJlZmVyZW5jZSBjYW4gYmUgZGV0ZXJtaW5lZCAoZm9yIGV4YW1wbGUsIGlmIHRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdAotCSAqIGluIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0pLgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZQotCSAqICAgICAgICAgICAgVGhlIHJlc291cmNlLgotCSAqIEByZXR1cm4gVGhlIFVSSSBhcyBhIHN0cmluZywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBVUkkgdG8gdGhlIHJlc291cmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlVVJJKElSZXNvdXJjZSByZXNvdXJjZSkgewotCQlTdHJpbmcgdXJpID0gbnVsbDsKLQkJSVBhdGggbG9jYXRpb24gPSByZXNvdXJjZS5nZXRMb2NhdGlvbigpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJdXJpID0gImZpbGU6IiArIGxvY2F0aW9uLnRvU3RyaW5nKCk7Ci0JCX0KLQkJcmV0dXJuIHVyaTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgVVJJIHJlZmVyZW5jZSB0byB0aGUgZ2l2ZW4gRWNsaXBzZSByZXNvdXJjZSB1c2luZyB0aGUKLQkgKiAicGxhdGZvcm06IiBwcm90b2NvbCwgb3IgbnVsbCBpZiBubyBzdWNoIHJlZmVyZW5jZSBjYW4gYmUgZGV0ZXJtaW5lZCAoZm9yCi0JICogZXhhbXBsZSwgaWYgdGhlIHJlc291cmNlIGRvZXMgbm90IGV4aXN0IGluIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0pLgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZQotCSAqICAgICAgICAgICAgVGhlIHJlc291cmNlLgotCSAqIEByZXR1cm4gVGhlIFVSSSBhcyBhIHN0cmluZywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBVUkkgdG8gdGhlIHJlc291cmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsYXRmb3JtUmVzb3VyY2VVUkkoSVJlc291cmNlIHJlc291cmNlKSB7Ci0JCVN0cmluZyB1cmkgPSBudWxsOwotCQlJUGF0aCBsb2NhdGlvbiA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQl1cmkgPSAicGxhdGZvcm06L3Jlc291cmNlIiArIGxvY2F0aW9uLnRvU3RyaW5nKCk7Ci0JCX0KLQkJcmV0dXJuIHVyaTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGJpbmRpbmcgbmFtZXNwYWNlIHN0cmluZyBnaXZlbiBhIEphdmEgYmVhbiBuYW1lCi0JICogKHVzaW5nIHRoZSBjb252ZW50aW9uIHVzZWQgYnkgQ1RDIGluIEdNKS4gZS5nLiBKYXZhIGJlYW4gTXlDbGFzcyByZXN1bHQKLQkgKiBpbiBiaW5kaW5nIG5hbWVzcGFjZSBvZgotCSAqICJodHRwOi8vd3d3Lm15Y2xhc3MuY29tL2RlZmluaXRpb25zL015Q2xhc3NSZW1vdGVJbnRlcmZhY2UiCi0JICogCi0JICogQHBhcmFtIGJlYW5OYW1lCi0JICogICAgICAgICAgICBUaGUgamF2YSBiZWFuLgotCSAqIEByZXR1cm4gVGhlIGJpbmRpbmcgbmFtZXNwYWNlIGFzIGEgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJpbmRpbmdOYW1lc3BhY2UoU3RyaW5nIGJlYW5OYW1lKSB7Ci0JCXJldHVybiAiaHR0cDovL3d3dy4iICsgYmVhbk5hbWUudG9Mb3dlckNhc2UoKSArICIuY29tL2RlZmluaXRpb25zLyIKLQkJCQkrIGJlYW5OYW1lICsgIlJlbW90ZUludGVyZmFjZSI7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZGVmYXVsdCBzY2hlbWEgbmFtZXNwYWNlIHN0cmluZyBnaXZlbiBhIEphdmEgYmVhbiBuYW1lICh1c2luZwotCSAqIHRoZSBjb252ZW50aW9uIHVzZWQgYnkgQ1RDIGluIEdNKS4gZS5nLiBKYXZhIGJlYW4gTXlDbGFzcyByZXN1bHQgaW4KLQkgKiBzY2hlbWEgbmFtZXNwYWNlIG9mCi0JICogImh0dHA6Ly93d3cubXljbGFzcy5jb20vc2NoZW1hcy9NeUNsYXNzUmVtb3RlSW50ZXJmYWNlIgotCSAqIAotCSAqIEBwYXJhbSBiZWFuTmFtZQotCSAqICAgICAgICAgICAgVGhlIGphdmEgYmVhbi4KLQkgKiBAcmV0dXJuIFRoZSBzY2hlbWFzIG5hbWVzcGFjZSBhcyBhIHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTY2hlbWFOYW1lc3BhY2UoU3RyaW5nIGJlYW5OYW1lKSB7Ci0JCXJldHVybiAiaHR0cDovL3d3dy4iICsgYmVhbk5hbWUudG9Mb3dlckNhc2UoKSArICIuY29tL3NjaGVtYXMvIgotCQkJCSsgYmVhbk5hbWUgKyAiUmVtb3RlSW50ZXJmYWNlIjsKLQl9Ci0KLQkvLyAgcHVibGljIHN0YXRpYyBWZWN0b3IgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgewotCS8vICAgICAgICBWZWN0b3Igb3B0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLQkvLyAgICBvcHRpb25zLmFkZChuZXcKLQkvLyBTdGF0dXNPcHRpb24oSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfSUQsSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfTEFCRUwsIiIsIiIpKTsKLQkvLyAgICBvcHRpb25zLmFkZChuZXcKLQkvLyBTdGF0dXNPcHRpb24oSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfVE9fQUxMX0lELElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9MQUJFTCwiIiwiIikpOwotCS8vICAgIG9wdGlvbnMuYWRkKG5ldwotCS8vIFN0YXR1c09wdGlvbihJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCxJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCwiIiwiIikpOwotCS8vICAgIHJldHVybiBvcHRpb25zOwotCS8vICB9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCS8qKgotCSAqIEdldHMgdGhlIFNPQVAgcnBjcm91dGVyIHNlcnZsZXQgVVJMIGZvciB0aGUgc2VydmljZSBwcm9qZWN0Ci0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQKLQkgKiAgICAgICAgICAgIFRoZSBzZXJ2ZXIgZmFjdG9yeSBpZAotCSAqIEBwYXJhbSBzZXJ2ZXIKLQkgKiAgICAgICAgICAgIFRoZSBzZXJ2ZXIKLQkgKiBAcmV0dXJuIFRoZSBVUkwsIHBvc3NpYmx5IG51bGwuCi0JICovCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2bGV0VVJMKElQcm9qZWN0IHByb2plY3QsCi0JCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcikgewotCQlyZXR1cm4gZ2V0U2VydmxldFVSTChnZXRXZWJQcm9qZWN0VVJMKHByb2plY3QsIHNlcnZlckZhY3RvcnlJZCwgc2VydmVyKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmxldFVSTChTdHJpbmcgd2ViUHJvamVjdFVSTCkgewotCQlpZiAod2ViUHJvamVjdFVSTCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWVsc2UKLQkJCXJldHVybiB3ZWJQcm9qZWN0VVJMICsgU0VSVkxFVF9FWFQ7Ci0JfQotCi0JLyoqCi0JICogR2V0cyB0aGUgY2xpZW50IFdlYiBwcm9qZWN0IG5hbWUKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdE5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0IG5hbWUgdG8gYmFzZSBvbi4KLQkgKiBAcGFyYW0gdHlwZUlkIHRoZSB3ZWJzZXJ2aWNlIHR5cGUgaWQuCi0JICogQHJldHVybiBUaGUgY2xpZW50IFdlYiBwcm9qZWN0IG5hbWUuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDbGllbnRXZWJQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyB0eXBlSWQpIAotCXsKLQkJU3RyaW5nICAgYmFzZUNsaWVudFdlYlByb2plY3ROYW1lID0gcHJvamVjdE5hbWUgKyBERUZBVUxUX0NMSUVOVF9XRUJfUFJPSkVDVF9FWFQ7Ci0JCUlQYXRoICAgIHByb2plY3RQYXRoOwotCQlJUHJvamVjdCBwcm9qZWN0OwotCQlib29sZWFuICBmb3VuZFdlYlByb2plY3QgICAgID0gZmFsc2U7Ci0JCWludCAgICAgIGkgICAgICAgICAgICAgICAgICAgPSAxOwotCQkKLQkJaWYoIGlzU2tlbGV0b25FSkJUeXBlKCB0eXBlSWQgKSApCi0JCXsKLQkJICAvLyBGb3IgdGhlIHNrZWxldG9uIEVKQiBzY2VuYXJpbyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHNsaWdodGx5IGRpZmZlcmVudAotCQkgIC8vIGJhc2UgbmFtZS4gIFdoZW4gdGhlIEVKQiBwcm9qZWN0IGlzIGNyZWF0ZWQgYW5vdGhlciBwcm9qZWN0Ci0JCSAgLy8gaXMgY3JlYXRlZCB3aXRoICJDbGllbnQiIHRhY2tlZCBvbnRvIHRoZSBlbmQuICBXZSB3aWxsCi0JCSAgLy8gYWRkICJXUyIgdG8gb3VyIGNsaWVudCBzbyB3ZSBkb24ndCBjb2xsaWRlIHdpdGggdGhlIG90aGVyCi0JCSAgLy8gY2xpZW50IHByb2plY3QuCi0JCSAgYmFzZUNsaWVudFdlYlByb2plY3ROYW1lID0gcHJvamVjdE5hbWUgKyAiV1MiICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOyAgICAKLQkJfQotCQkKLQkJU3RyaW5nICBjbGllbnRXZWJQcm9qZWN0TmFtZSA9IGJhc2VDbGllbnRXZWJQcm9qZWN0TmFtZTsKLQkJCi0JCXdoaWxlICghZm91bmRXZWJQcm9qZWN0KSAKLQkJewotCQkgIHByb2plY3RQYXRoID0gbmV3IFBhdGgoY2xpZW50V2ViUHJvamVjdE5hbWUpLm1ha2VBYnNvbHV0ZSgpOwotCQkgIHByb2plY3QgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihwcm9qZWN0UGF0aCk7Ci0JCSAgCi0JCSAgaWYgKHByb2plY3QuZXhpc3RzKCkgJiYgIVJlc291cmNlVXRpbHMuaXNXZWJQcm9qZWN0KHByb2plY3QpKSAKLQkJICB7Ci0JCQljbGllbnRXZWJQcm9qZWN0TmFtZSA9IGJhc2VDbGllbnRXZWJQcm9qZWN0TmFtZSArIGk7Ci0JCQlpKys7Ci0JCSAgfQotCQkgIGVsc2UgCi0JCSAgewotCQkJZm91bmRXZWJQcm9qZWN0ID0gdHJ1ZTsKLQkJICB9Ci0JCX0KLQkJCi0JCXJldHVybiBjbGllbnRXZWJQcm9qZWN0TmFtZTsKLQl9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRDbGllbnRQcm9qZWN0Q29tcG9uZW50TmFtZShTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyBjb21wb25lbnROYW1lLCBib29sZWFuIGlzRUpCKQotICB7Ci0gICAgU3RyaW5nIGNsaWVudFByb2plY3ROYW1lID0gbnVsbDsKLSAgICBTdHJpbmcgY2xpZW50Q29tcG9uZW50TmFtZSA9IG51bGw7Ci0gICAgaWYgKGlzRUpCKQotICAgIHsKLSAgICAgIGNsaWVudFByb2plY3ROYW1lID0gcHJvamVjdE5hbWUgKyBERUZBVUxUX0NMSUVOVF9FSkJfUFJPSkVDVF9FWFQ7Ci0gICAgICBjbGllbnRDb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSArIERFRkFVTFRfQ0xJRU5UX0VKQl9QUk9KRUNUX0VYVDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNsaWVudFByb2plY3ROYW1lID0gcHJvamVjdE5hbWUgKyBERUZBVUxUX0NMSUVOVF9XRUJfUFJPSkVDVF9FWFQ7Ci0vLyAgICAgIFN0cmluZyBiYXNlTmFtZSA9IGNsaWVudFByb2plY3ROYW1lOwotICAgICAgY2xpZW50Q29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgKyBERUZBVUxUX0NMSUVOVF9XRUJfUFJPSkVDVF9FWFQ7Ci0vLyAgICAgIFN0cmluZyBiYXNlQ29tcE5hbWUgPSBjbGllbnRDb21wb25lbnROYW1lOwotICAgIH0KLSAgICAKLSAgICAvL1RPRE8gd2UgbWF5IHdhbnQgdG8gcmVtb3ZlIHRoaXMgaWYgc3RhdGVtZW50IG9uY2UgZGVmZWN0IDEwMzM2NiBpcyByZXNvbHZlZC4KLSAgICAvL1RPRE86ICBEZWZlY3QgMTA3OTk3IC0gUmV2aXNpdCBwcmplY3QgYW5kIG1vZHVsZSBjcmVhdGlvbiBsb2dpYwotLy8gICAgaWYoICFGbGV4aWJsZUphdmFQcm9qZWN0UHJlZmVyZW5jZVV0aWwuZ2V0TXVsdGlwbGVNb2R1bGVzUGVyUHJvamVjdFByb3AoKSApCi0vLyAgICB7Ci0vLyAgICAgIGNsaWVudENvbXBvbmVudE5hbWUgPSBjbGllbnRQcm9qZWN0TmFtZTsJCi0vLyAgICB9Ci0gICAgCi0vLyAgICBib29sZWFuICBmb3VuZFdlYlByb2plY3QgICAgID0gZmFsc2U7Ci0vLyAgICBpbnQgICAgICBpICAgICAgICAgICAgICAgICAgID0gMTsKLS8vICAgIAotLy8gICAgd2hpbGUgKCFmb3VuZFdlYlByb2plY3QpIAotLy8gICAgewotLy8gICAgICBJUGF0aCBwcm9qZWN0UGF0aCA9IG5ldyBQYXRoKGNsaWVudFByb2plY3ROYW1lKS5tYWtlQWJzb2x1dGUoKTsKLS8vICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHByb2plY3RQYXRoKTsKLS8vICAgICAgCi0vLyAgICAgIGlmIChwcm9qZWN0LmV4aXN0cygpKSAKLS8vICAgICAgewotLy8gICAgICAgIGNsaWVudFByb2plY3ROYW1lID0gYmFzZU5hbWUgKyBpOwotLy8gICAgICAgIGNsaWVudENvbXBvbmVudE5hbWUgPSBiYXNlQ29tcE5hbWUgKyBpOwotLy8gICAgICAgIGkrKzsKLS8vICAgICAgfQotLy8gICAgICBlbHNlIAotLy8gICAgICB7Ci0vLyAgICAgICAgZm91bmRXZWJQcm9qZWN0ID0gdHJ1ZTsKLS8vICAgICAgfQotLy8gICAgfQotICAgIAotICAgIHJldHVybiBuZXcgU3RyaW5nW117Y2xpZW50UHJvamVjdE5hbWUsIGNsaWVudENvbXBvbmVudE5hbWV9OwotICB9Ci0gIAotICAgIC8qKgotICAgICAqIAotICAgICAqIEBwYXJhbSB0eXBlSUQKLSAgICAgKiBAcmV0dXJuCi0gICAgICogCi0gICAgICogQGRlcHJlY2F0ZWQKLSAgICAgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTa2VsZXRvbkVKQlR5cGUoIFN0cmluZyB0eXBlSUQgKQotCXsKLQkgIHJldHVybiB0eXBlSUQuZXF1YWxzKCAib3JnLmVjbGlwc2UuanN0LndzLnR5cGUud3NkbC5lamIiICk7ICAgIAotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0RUpCUHJvamVjdE5hbWUoKSB7Ci0JCXJldHVybiBERUZBVUxUX0VKQl9QUk9KRUNUX05BTUU7Ci0JfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEVKQkNvbXBvbmVudE5hbWUoKSB7Ci0gICAgcmV0dXJuIERFRkFVTFRfRUpCX0NPTVBPTkVOVF9OQU1FOwotICB9ICAKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRXZWJQcm9qZWN0TmFtZSgpIHsKLQkJcmV0dXJuIERFRkFVTFRfV0VCX1BST0pFQ1RfTkFNRTsKLQl9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0V2ViQ29tcG9uZW50TmFtZSgpIHsKLSAgICByZXR1cm4gREVGQVVMVF9XRUJfQ09NUE9ORU5UX05BTUU7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0Q2xpZW50RXh0ZW5zaW9uKCkgewotICAgIHJldHVybiBERUZBVUxUX0NMSUVOVF9XRUJfUFJPSkVDVF9FWFQ7Ci0gIH0KLSAgCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lCi0JICogQHJldHVybgotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJvdXRlclByb2plY3ROYW1lKFN0cmluZyBwcm9qZWN0TmFtZSkgewotCQlyZXR1cm4gcHJvamVjdE5hbWUgKyBERUZBVUxUX1JPVVRFUl9QUk9KRUNUX0VYVDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0U2VydmljZUVBUlByb2plY3ROYW1lKCkgewotCQlyZXR1cm4gREVGQVVMVF9TRVJWSUNFX0VBUl9QUk9KRUNUX05BTUU7Ci0JfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFNlcnZpY2VFQVJDb21wb25lbnROYW1lKCkgewotICAgIHJldHVybiBERUZBVUxUX1NFUlZJQ0VfRUFSX0NPTVBPTkVOVF9OQU1FOwotICB9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0Q2xpZW50RUFSUHJvamVjdE5hbWUoKSB7Ci0JCXJldHVybiBERUZBVUxUX0NMSUVOVF9FQVJfUFJPSkVDVF9OQU1FOwotCX0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0Q2xpZW50RUFSQ29tcG9uZW50TmFtZSgpIHsKLSAgICByZXR1cm4gREVGQVVMVF9DTElFTlRfRUFSX0NPTVBPTkVOVF9OQU1FOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0RUFSRXh0ZW5zaW9uKCkgewotCSAgICByZXR1cm4gREVGQVVMVF9FQVJfRVhUOwotCSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TZWxlY3Rpb25Ub1Jlc291cmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TZWxlY3Rpb25Ub1Jlc291cmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTQxMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VsZWN0aW9uVG9SZXNvdXJjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3Rpb25Ub1Jlc291cmNlIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXIjdHJhbnNmb3JtKGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pdmFsdWU7Ci0gICAgSVJlc291cmNlICAgICAgICAgICAgcmVzb3VyY2UgID0gbnVsbDsKLSAgICAKLSAgICBpZiggc2VsZWN0aW9uICE9IG51bGwgKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICAKLSAgICAgIGlmKCBvYmplY3QgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAgICByZXNvdXJjZSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIG9iamVjdCBpbnN0YW5jZW9mIElDb21waWxhdGlvblVuaXQgKQotICAgICAgICB7Ci0gICAgICAgICAgSUNvbXBpbGF0aW9uVW5pdCBjb21wVW5pdCA9IChJQ29tcGlsYXRpb25Vbml0KW9iamVjdDsKLSAgICAgICAgICAKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXNvdXJjZSA9IGNvbXBVbml0LmdldENvcnJlc3BvbmRpbmdSZXNvdXJjZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCggSmF2YU1vZGVsRXhjZXB0aW9uIGV4YykKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIG9iamVjdCBpbnN0YW5jZW9mIEVudGVycHJpc2VCZWFuICkgCi0gICAgICAgIHsKLSAgICAgICAgICBFbnRlcnByaXNlQmVhbiBlamJCZWFuICAgID0gKEVudGVycHJpc2VCZWFuKW9iamVjdDsKLSAgICAgICAgICBJUHJvamVjdCAgICAgICBlamJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KCBlamJCZWFuICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIGVqYlByb2plY3QgIT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2UgPSBlamJQcm9qZWN0OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXNvdXJjZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VydmVyVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlcnZlclV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4N2Q1MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VydmVyVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDQgIDEyNDQwOCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAKLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KLSAqIDIwMDcwMTE5ICAgMTU5NDU4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmxvZ2dlci5wcm94eS5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuSjJFRVZlcnNpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuc2VydmVydGFyZ2V0LklTZXJ2ZXJUYXJnZXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC51dGlsLklNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSVVSTFByb3ZpZGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdXNlZnVsIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBTZXJ2ZXIgcGx1Z2luIGZ1bmN0aW9ucwotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgU2VydmVyVXRpbHMgewotCi0JcHJpdmF0ZSBIYXNodGFibGUgc2VydmVySWRUb0xhYmVsXzsKLQotCXByaXZhdGUgSGFzaHRhYmxlIHNlcnZlckxhYmVsVG9JZF87Ci0KLQlwcml2YXRlIHN0YXRpYyBTZXJ2ZXJVdGlscyBpbnN0YW5jZV87Ci0KLQlwdWJsaWMgc3RhdGljIFNlcnZlclV0aWxzIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLQkJCWluc3RhbmNlXyA9IG5ldyBTZXJ2ZXJVdGlscygpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZV87Ci0KLQl9Ci0KLQlwdWJsaWMgU2VydmVyVXRpbHMoKSB7Ci0JfQotCi0JLy8gR2V0cyB0aGUgU2VydmVyIGxhYmVscyBnaXZlbiB0aGUgc2VydmVyIGZhY3RvcnkgaWQKLQlwdWJsaWMgdm9pZCBnZXRTZXJ2ZXJMYWJlbHNBbmRJZHMoKSB7Ci0JCXNlcnZlcklkVG9MYWJlbF8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCXNlcnZlckxhYmVsVG9JZF8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCUlTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0JCWZvciAoaW50IGlkeCA9IDA7IGlkeCA8IHNlcnZlclR5cGVzLmxlbmd0aDsgaWR4KyspIHsKLQotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IChJU2VydmVyVHlwZSkgc2VydmVyVHlwZXNbaWR4XTsKLQotCQkJU3RyaW5nIGlkID0gc2VydmVyVHlwZS5nZXRJZCgpOwotCQkJU3RyaW5nIHNlcnZlckxhYmVsID0gc2VydmVyVHlwZS5nZXROYW1lKCk7Ci0JCQlpZiAoIShpZCA9PSBudWxsKSAmJiAhKHNlcnZlckxhYmVsID09IG51bGwpKSB7Ci0JCQkJc2VydmVySWRUb0xhYmVsXy5wdXQoaWQsIHNlcnZlckxhYmVsKTsKLQkJCQlzZXJ2ZXJMYWJlbFRvSWRfLnB1dChzZXJ2ZXJMYWJlbCwgaWQpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJMYWJlbEZvcklkKFN0cmluZyBmYWN0b3J5SWQpIHsKLQkJaWYgKHNlcnZlcklkVG9MYWJlbF8gPT0gbnVsbCkKLQkJCXRoaXMuZ2V0U2VydmVyTGFiZWxzQW5kSWRzKCk7Ci0JCXJldHVybiAoU3RyaW5nKSBzZXJ2ZXJJZFRvTGFiZWxfLmdldChmYWN0b3J5SWQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySWRGb3JMYWJlbChTdHJpbmcgZmFjdG9yeUxhYmVsKSB7Ci0JCWlmIChzZXJ2ZXJMYWJlbFRvSWRfID09IG51bGwpCi0JCQl0aGlzLmdldFNlcnZlckxhYmVsc0FuZElkcygpOwotCQlyZXR1cm4gKFN0cmluZykgc2VydmVyTGFiZWxUb0lkXy5nZXQoZmFjdG9yeUxhYmVsKTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBtb2RpZnlNb2R1bGVzKElFbnZpcm9ubWVudCBlbnYsIElTZXJ2ZXIgc2VydmVyLAotCQkJSU1vZHVsZSBtb2R1bGUsIGJvb2xlYW4gYWRkLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQotCQlJU2VydmVyV29ya2luZ0NvcHkgd2MgPSBudWxsOwotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0JCXRyeSB7Ci0KLQkJCWlmIChtb2R1bGUgPT0gbnVsbCB8fCAhbW9kdWxlLmdldFByb2plY3QoKS5leGlzdHMoKSkgewotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0KLQkJCS8vIGNoZWNrIGlmIG1vZHVsZSBpcyBhIHRydWUgSmF2YSBwcm9qZWN0Ci0JCQlpZiAobW9kdWxlIGluc3RhbmNlb2YgSU1vZHVsZSkgewotCQkJCUlNb2R1bGUgcG0gPSAoSU1vZHVsZSkgbW9kdWxlOwotCQkJCWlmIChwbSAhPSBudWxsKSB7Ci0JCQkJCUlQcm9qZWN0IHByb2plY3QgPSBwbS5nZXRQcm9qZWN0KCk7Ci0JCQkJCWlmIChwcm9qZWN0ID09IG51bGwKLQkJCQkJCQl8fCBSZXNvdXJjZVV0aWxzLmlzVHJ1ZUphdmFQcm9qZWN0KHByb2plY3QpKSB7Ci0JCQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQl3YyA9IHNlcnZlci5jcmVhdGVXb3JraW5nQ29weSgpOwotCQkJaWYgKHdjICE9IG51bGwpIHsKLS8vCQkJCU9iamVjdCB4ID0gc2VydmVyLmdldEFkYXB0ZXIoSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIuY2xhc3MpOwotLy8JCQkJaWYgKHggIT0gbnVsbCAmJiB4IGluc3RhbmNlb2YgSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIpIHsKLS8vCQkJCQlpbnQgc3RhdGUgPSBzZXJ2ZXIuZ2V0U2VydmVyU3RhdGUoKTsKLS8vCQkJCQlpZiAoc3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVE9QUEVECi0vLwkJCQkJCQl8fCBzdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1VOS05PV04pIHsKLS8vCQkJCQkJU3RyaW5nIG1vZGUgPSBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERTsKLS8vCQkJCQkJc2VydmVyLnN5bmNocm9ub3VzU3RhcnQobW9kZSwgbW9uaXRvcik7Ci0vLwkJCQkJfQotLy8JCQkJfQotCi0JCQkJTGlzdCBsaXN0ID0gQXJyYXlzLmFzTGlzdChzZXJ2ZXIuZ2V0TW9kdWxlcygpKTsKLQkJCQlpZiAoYWRkKSB7Ci0JCQkJCWlmICghbGlzdC5jb250YWlucyhtb2R1bGUpKSB7Ci0JCQkJCQlTZXJ2ZXJVdGlsLm1vZGlmeU1vZHVsZXMod2MsIG5ldyBJTW9kdWxlW10geyBtb2R1bGUgfSwKLQkJCQkJCQkJbmV3IElNb2R1bGVbMF0sIG1vbml0b3IpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsgLy8gcmVtb3ZlcyBtb2R1bGUKLQkJCQkJaWYgKGxpc3QuY29udGFpbnMobW9kdWxlKSkgewotCQkJCQkJU2VydmVyVXRpbC5tb2RpZnlNb2R1bGVzKHdjLCBuZXcgSU1vZHVsZVswXSwKLQkJCQkJCQkJbmV3IElNb2R1bGVbXSB7IG1vZHVsZSB9LCBtb25pdG9yKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLy8gaGFuZGxlIGNhc2Ugb2YgTnVsbCBXQzsgbm9uLWlzc3VlIGZvciBub3cKLQkJCX0KLQkJfSAKLSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGMgKSAKLSAgICB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSLCBleGMgKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAod2MgIT0gbnVsbCkgewotCQkJCS8vIEFsd2F5cyBzYXZlQWxsIGFuZCByZWxlYXNlIHRoZSBzZXJ2ZXJXb3JraW5nQ29weQotCQkJCXRyeSAKLSAgICAgICAgewotCQkJCQl3Yy5zYXZlQWxsKHRydWUsIG1vbml0b3IpOwotCQkJCX0gCi0gICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGV4YyApIAotICAgICAgICB7Ci0JCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGV4YyApOwotCQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJCXJldHVybiBzdGF0dXM7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGdldFNlcnZlckZvck1vZHVsZShJTW9kdWxlIG1vZHVsZSwgU3RyaW5nIHNlcnZlclR5cGVJZCwgCi0JCQkJCQkJCUlTZXJ2ZXIgc2VydmVyLCBib29sZWFuIGNyZWF0ZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCWlmIChzZXJ2ZXIgIT0gbnVsbCkKLQkJCXJldHVybiBzZXJ2ZXI7Ci0JCWVsc2UKLQkJCXJldHVybiBnZXRTZXJ2ZXJGb3JNb2R1bGUobW9kdWxlLCBzZXJ2ZXJUeXBlSWQsIGNyZWF0ZSwgbW9uaXRvcik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGdldFNlcnZlckZvck1vZHVsZShJTW9kdWxlIG1vZHVsZSwKLQkJCVN0cmluZyBzZXJ2ZXJUeXBlSWQsIGJvb2xlYW4gY3JlYXRlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJdHJ5IHsKLQotCQkJSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJVdGlsLmdldFNlcnZlcnNCeU1vZHVsZShtb2R1bGUsIG1vbml0b3IpOwotCi0JCQlpZiAoc2VydmVycyAhPSBudWxsICYmIHNlcnZlcnMubGVuZ3RoID4gMCkgewotCQkJCWlmIChzZXJ2ZXJUeXBlSWQgPT0gbnVsbCB8fCBzZXJ2ZXJUeXBlSWQubGVuZ3RoKCkgPT0gMCkKLQkJCQkJcmV0dXJuIHNlcnZlcnNbMF07IC8vIFdTQUQgdjQgYmVoYXZpb3IKLQotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykgewotCQkJCQlpZiAoc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHNJZ25vcmVDYXNlKAotCQkJCQkJCXNlcnZlclR5cGVJZCkpCi0JCQkJCQlyZXR1cm4gc2VydmVyc1tpXTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXJldHVybiBjcmVhdGVTZXJ2ZXIobW9kdWxlLCBzZXJ2ZXJUeXBlSWQsIG1vbml0b3IpOwotCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXRTZXJ2ZXJGb3JNb2R1bGUoSU1vZHVsZSBtb2R1bGUpIHsKLQkJdHJ5IHsKLQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUobW9kdWxlLCBudWxsKTsKLQkJCXJldHVybiAoKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCA+IDApID8gc2VydmVyc1swXSA6IG51bGwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW52Ci0JICogQHBhcmFtIG1vZHVsZQotCSAqIEBwYXJhbSBzZXJ2ZXJUeXBlSWQKLQkgKiBAcGFyYW0gbW9uaXRvcgotCSAqIEByZXR1cm4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBJU2VydmVyIGNyZWF0ZVNlcnZlcihJRW52aXJvbm1lbnQgZW52LCBJTW9kdWxlIG1vZHVsZSwKLQkJCVN0cmluZyBzZXJ2ZXJUeXBlSWQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyV0MgPSBudWxsOwotCQlJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWQpOwotCQkJc2VydmVyV0MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihzZXJ2ZXJUeXBlSWQsIG51bGwsIG1vbml0b3IpOwotCQkJdHJ5IHsKLQkJCQlpZiAoc2VydmVyV0MgIT0gbnVsbCkgewotCQkJCQlzZXJ2ZXIgPSBzZXJ2ZXJXQy5zYXZlQWxsKHRydWUsIG1vbml0b3IpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIAotICAgICAgewotCQkJCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgY2UpOwotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0KLS8vCQkJCU9iamVjdCB4ID0gc2VydmVyLmdldEFkYXB0ZXIoSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIuY2xhc3MpOwotLy8JCQkJaWYgKHggIT0gbnVsbCAmJiB4IGluc3RhbmNlb2YgSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIpIHsKLS8vCQkJCQlpbnQgc3RhdGUgPSBzZXJ2ZXIuZ2V0U2VydmVyU3RhdGUoKTsKLS8vCQkJCQlpZiAoc3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVE9QUEVECi0vLwkJCQkJCQl8fCBzdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1VOS05PV04pIHsKLS8vCQkJCQkJU3RyaW5nIG1vZGUgPSBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERTsKLS8vCQkJCQkJc2VydmVyLnN5bmNocm9ub3VzU3RhcnQobW9kZSwgbW9uaXRvcik7Ci0vLwkJCQkJfQotLy8JCQkJfQotCi0JCQkJaWYgKG1vZHVsZSAhPSBudWxsICYmIG1vZHVsZS5nZXRQcm9qZWN0KCkuZXhpc3RzKCkpIHsKLQkJCQkJSU1vZHVsZVtdIHBhcmVudE1vZHVsZXMgPSBzZXJ2ZXIuZ2V0Um9vdE1vZHVsZXMobW9kdWxlLAotCQkJCQkJCW1vbml0b3IpOwotCQkJCQlpZiAocGFyZW50TW9kdWxlcyAhPSBudWxsICYmIHBhcmVudE1vZHVsZXMubGVuZ3RoICE9IDApIHsKLQkJCQkJCW1vZHVsZSA9IChJTW9kdWxlKSBwYXJlbnRNb2R1bGVzWzBdOwotCQkJCQl9Ci0JCQkJCXNlcnZlcldDLm1vZGlmeU1vZHVsZXMobmV3IElNb2R1bGVbXSB7IG1vZHVsZSB9LAotCQkJCQkJCW5ldyBJTW9kdWxlWzBdLCBtb25pdG9yKTsKLQkJCQl9Ci0KLQkJCX0KLQotCQkJcmV0dXJuIHNlcnZlcjsKLQkJfSAKLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIAotICAgIHsKLQkJCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgZSk7Ci0JCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfSBmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJaWYgKHNlcnZlcldDICE9IG51bGwpIHsKLQkJCQkJc2VydmVyV0Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSLCBjZSk7Ci0JCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogY3JlYXRlU2VydmVyIFRoaXMgY3JlYXRlcyBhIHNlcnZlciBidXQgZG9lcyBub3QgcmVwb3J0IGVycm9ycy4gQHBhcmFtCi0JICogbW9kdWxlIAotCSAqIEBwYXJhbSBzZXJ2ZXJUeXBlSWQgCi0JICogQHBhcmFtIG1vbml0b3IgcHJvZ3Jlc3MgbW9uaXRvciAKLQkgKiBAcmV0dXJuIElTZXJ2ZXIgcmV0dXJucyBudWxsIGlmIHVuc3VjY2Vzc2Z1bAotCSAqIAotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGNyZWF0ZVNlcnZlcihJTW9kdWxlIG1vZHVsZSwgU3RyaW5nIHNlcnZlclR5cGVJZCwKLQkJCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyV0MgPSBudWxsOwotCQlJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWQpOwotCQkJc2VydmVyV0MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihzZXJ2ZXJUeXBlSWQsIG51bGwsIG1vbml0b3IpOwotCi0JCQl0cnkgewotCQkJCWlmIChzZXJ2ZXJXQyAhPSBudWxsKSB7Ci0JCQkJCXNlcnZlciA9IHNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbW9uaXRvcik7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlpZiAoc2VydmVyICE9IG51bGwpIHsKLQotLy8JCQkJT2JqZWN0IHggPSBzZXJ2ZXIuZ2V0QWRhcHRlcihJUnVubmluZ0FjdGlvblNlcnZlci5jbGFzcyk7Ci0vLwkJCQlpZiAoeCAhPSBudWxsICYmIHggaW5zdGFuY2VvZiBJUnVubmluZ0FjdGlvblNlcnZlcikgewotLy8JCQkJCWludCBzdGF0ZSA9IHNlcnZlci5nZXRTZXJ2ZXJTdGF0ZSgpOwotLy8JCQkJCWlmIChzdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQRUQKLS8vCQkJCQkJCXx8IHN0YXRlID09IElTZXJ2ZXIuU1RBVEVfVU5LTk9XTikgewotLy8JCQkJCQlTdHJpbmcgbW9kZSA9IElMYXVuY2hNYW5hZ2VyLlJVTl9NT0RFOwotLy8JCQkJCQlzZXJ2ZXIuc3luY2hyb25vdXNTdGFydChtb2RlLCBtb25pdG9yKTsKLS8vCQkJCQl9Ci0vLwkJCQl9Ci0JCQkJaWYgKG1vZHVsZSAhPSBudWxsKSB7Ci0JCQkJCUlNb2R1bGVbXSBwYXJlbnRNb2R1bGVzID0gc2VydmVyLmdldFJvb3RNb2R1bGVzKG1vZHVsZSwKLQkJCQkJCQltb25pdG9yKTsKLQkJCQkJaWYgKHBhcmVudE1vZHVsZXMgIT0gbnVsbCAmJiBwYXJlbnRNb2R1bGVzLmxlbmd0aCAhPSAwKSB7Ci0JCQkJCQltb2R1bGUgPSAoSU1vZHVsZSkgcGFyZW50TW9kdWxlc1swXTsKLQkJCQkJfQotCQkJCQlzZXJ2ZXJXQy5tb2RpZnlNb2R1bGVzKG5ldyBJTW9kdWxlW10geyBtb2R1bGUgfSwKLQkJCQkJCQluZXcgSU1vZHVsZVswXSwgbW9uaXRvcik7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCXJldHVybiBzZXJ2ZXI7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfSBmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJaWYgKHNlcnZlcldDICE9IG51bGwpIHsKLQkJCQkJc2VydmVyV0Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQkJLy8gaGFuZGxlciBjb3JlIGV4Y2VwdGlvbgotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRTZXJ2ZXJUeXBlSWRzQnlNb2R1bGUoSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50KSB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBjb21wb25lbnQuZ2V0UHJvamVjdCgpOwotCQlTdHJpbmdbXSBzZXJ2ZXJJZHMgPSBudWxsOwotCi0JCWlmIChwcm9qZWN0ICE9IG51bGwpIHsKLQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoZ2V0TW9kdWxlKHByb2plY3QpLCBudWxsKTsKLQkJCWlmIChzZXJ2ZXJzICE9IG51bGwpIHsKLQkJCQlzZXJ2ZXJJZHMgPSBuZXcgU3RyaW5nW3NlcnZlcnMubGVuZ3RoXTsKLQotCQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzZXJ2ZXJzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCQlzZXJ2ZXJJZHNbaW5kZXhdID0gc2VydmVyc1tpbmRleF0uZ2V0SWQoKTsKLQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChzZXJ2ZXJJZHMgPT0gbnVsbCkgewotCQkJc2VydmVySWRzID0gbmV3IFN0cmluZ1swXTsKLQkJfQotCi0JCXJldHVybiBzZXJ2ZXJJZHM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICogQGRlcHJlY2F0ZWQgc2hvdWxkIGJlIHVzaW5nIGdldFNlcnZlclR5cGVJZHNCeU1vZHVsZSggSVZpcnR1YWxDb21wb25lbnQgKQotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyVHlwZUlkc0J5TW9kdWxlKElQcm9qZWN0IHByb2plY3QpIHsKLQkJVmVjdG9yIHNlcnZlcklkcyA9IG5ldyBWZWN0b3IoKTsKLQkJaWYgKHByb2plY3QgIT0gbnVsbCkgewotCQkJSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJVdGlsLmdldFNlcnZlcnNCeU1vZHVsZShSZXNvdXJjZVV0aWxzCi0JCQkJCS5nZXRNb2R1bGUocHJvamVjdCksIG51bGwpOwotCQkJaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJc2VydmVySWRzLmFkZChzZXJ2ZXJzW2ldLmdldElkKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gKFN0cmluZ1tdKSBzZXJ2ZXJJZHMudG9BcnJheShuZXcgU3RyaW5nW3NlcnZlcklkcy5zaXplKCldKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElNb2R1bGUgZ2V0TW9kdWxlKElQcm9qZWN0IHByb2plY3QpIHsKLQlyZXR1cm4gU2VydmVyVXRpbC5nZXRNb2R1bGUocHJvamVjdCk7Ci19Ci0JCi0vLyBXb3JrYXJvdW5kIGZvciAxMTM2MjEKLS8vcHVibGljIHN0YXRpYyBJTW9kdWxlIGdldE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0vLwlJTW9kdWxlW10gbW9kdWxlcyA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlcyhwcm9qZWN0KTsKLS8vCWlmIChtb2R1bGVzIT1udWxsICYmIG1vZHVsZXMubGVuZ3RoIT0wKSB7Ci0vLwkJcmV0dXJuIG1vZHVsZXNbMF07Ci0vLwl9Ci0vLwlyZXR1cm4gbnVsbDsKLS8vfQotICAKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBVUkwgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3Qgb2YgdGhlCi0JICogY29tcG9uZW50IGJhc2VkIG9uIGEgc2VydmVyIGZhY3RvcnkgSUQgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViIG5hdHVyZQotCSAqIG9yIHRoZSBtb2R1bGUgcm9vdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAoZS5nLiBGb3Igc29tZSB0eXBlcyBvZiAKLQkgKiBzZXJ2ZXJzLCB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBnZXQgbW9kdWxlIHJvb3QgVVJMIGlmIHRoZSBzZXJ2ZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQpLgotCSAqIE5vdGUgdGhhdCB3ZSBhcmUgbm90IHJlbHlpbmcgb24gd2hpY2ggc2VydmVyIHRoZSBtb2R1bGUgaXMgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0byBkZXRlcm1pbmUKLQkgKiB0aGUgY29ycmVjdCBtb2R1bGUgc2VydmVyIHJvb3QgYmVjYXVzZSB0aGUgcHJvamVjdCBtaWdodCBiZSBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2ZXIgYnV0IHdlIG5lZWQgdGhlCi0JICogbW9kdWxlIHJvb3QgYmFzZWQgb24gYW5vdGhlciBzZXJ2ZXIgZmFjdG9yeSBJRC4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBzZXJ2ZXIgZmFjdG9yeSBJRAotCSAqIEByZXR1cm4gVGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3QgVVJMIG9yIG51bGwgCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V2ViQ29tcG9uZW50VVJMKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpIHsKLQkJU3RyaW5nIHdlYlByb2plY3RVUkwgPSBudWxsOwotCQlJTW9kdWxlIG1vZHVsZSA9IGdldE1vZHVsZShwcm9qZWN0KTsKLQkJaWYgKG1vZHVsZSAhPSBudWxsKSB7Ci0JCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOyAgICAgICAgICAgICAgIAotCQkJaWYgKHNlcnZlclR5cGUhPW51bGwpCi0JCQl7Ci0JCQkJdHJ5IHsKLQkJCQkJLy9DaG9vc2UgYSBSdW50aW1lIHdoaWNoIGlzIG5vdCBhIHN0dWIKLQkJCQkJSVJ1bnRpbWUgbm9uU3R1YlJ1bnRpbWUgPSBudWxsOwotCQkJCQlJUnVudGltZVtdIHJ1bnRpbWVzID0gU2VydmVyVXRpbC5nZXRSdW50aW1lcyhudWxsLCBudWxsKTsKLQkJCQkJU3RyaW5nIHNlcnZlclJ1bnRpbWVUeXBlSWQgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5sZW5ndGg7IGkrKykgewotCQkJCQkJSVJ1bnRpbWUgcnVudGltZSA9IHJ1bnRpbWVzW2ldOwotCQkJCQkJSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gcnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkJCQkJaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJU3RyaW5nIHRoaXNSdW50aW1lVHlwZUlkID0gcnVudGltZVR5cGUuZ2V0SWQoKTsKLQkJCQkJCQlpZiAodGhpc1J1bnRpbWVUeXBlSWQuZXF1YWxzKHNlcnZlclJ1bnRpbWVUeXBlSWQpICYmICFydW50aW1lLmlzU3R1YigpKSB7Ci0JCQkJCQkJCS8vRm91bmQgYW4gYXBwcm9wcmlhdGUgSVJ1bnRpbWUgdGhhdCBpcyBub3QgYSBzdHViCi0JCQkJCQkJCW5vblN0dWJSdW50aW1lID0gcnVudGltZTsKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJaWYgKG5vblN0dWJSdW50aW1lICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCUlTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXQyA9IHNlcnZlclR5cGUuY3JlYXRlU2VydmVyKG51bGwsIG51bGwsIG5vblN0dWJSdW50aW1lLCBudWxsKTsKLQkJCQkJCUlVUkxQcm92aWRlciB1cmxQcm92aWRlciA9IChJVVJMUHJvdmlkZXIpIHNlcnZlcldDLmxvYWRBZGFwdGVyKElVUkxQcm92aWRlci5jbGFzcywgbnVsbCk7Ci0JCQkJCQlpZiAodXJsUHJvdmlkZXIhPW51bGwpIHsKLQkJCQkJCQlVUkwgdXJsID0gdXJsUHJvdmlkZXIuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOwkJCQkJCQkKLQkJCQkJCQlpZiAodXJsICE9IG51bGwpIHsKLQkJCQkJCQkJU3RyaW5nIHMgPSB1cmwudG9TdHJpbmcoKTsKLQkJCQkJCQkJd2ViUHJvamVjdFVSTCA9IChzLmVuZHNXaXRoKCIvIikgPyBzLnN1YnN0cmluZygwLCBzLmxlbmd0aCgpIC0gMSkgOiBzKTsKLQkJCQkJCQl9CQkJCQotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQl9IGNhdGNoKENvcmVFeGNlcHRpb24gY2UpewotCQkJCQlMb2dnZXIuZ2V0TG9nZ2VyKCkubG9nKGNlKTsKLQkJCQl9Ci0KLQkJCX0KLQkJfQotCQlyZXR1cm4gd2ViUHJvamVjdFVSTDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBVUkwgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3Qgb2YgdGhlCi0JICogY29tcG9uZW50IGJhc2VkIG9uIGEgc2VydmVyIGZhY3RvcnkgSUQgYW5kIHNlcnZlci4gIFJldHVybnMgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViIG5hdHVyZQotCSAqIG9yIHRoZSBtb2R1bGUgcm9vdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAoZS5nLiBGb3Igc29tZSB0eXBlcyBvZiAKLQkgKiBzZXJ2ZXJzLCB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBnZXQgbW9kdWxlIHJvb3QgVVJMIGlmIHRoZSBzZXJ2ZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQpLgotCSAqIE5vdGUgdGhhdCB3ZSBhcmUgbm90IHJlbHlpbmcgb24gd2hpY2ggc2VydmVyIHRoZSBtb2R1bGUgaXMgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0byBkZXRlcm1pbmUKLQkgKiB0aGUgY29ycmVjdCBtb2R1bGUgc2VydmVyIHJvb3QgYmVjYXVzZSB0aGUgcHJvamVjdCBtaWdodCBiZSBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2ZXIgYnV0IHdlIG5lZWQgdGhlCi0JICogbW9kdWxlIHJvb3QgYmFzZWQgb24gYW5vdGhlciBzZXJ2ZXIgLyBzZXJ2ZXIgZmFjdG9yeSBJRC4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBzZXJ2ZXIgZmFjdG9yeSBJRAotCSAqIEBwYXJhbSBzZXJ2ZXIgU2VydmVyIGlkCi0JICogQHJldHVybiBUaGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBVUkwgb3IgbnVsbCAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXZWJDb21wb25lbnRVUkwoSVByb2plY3QgcHJvamVjdCwKLQkJCVN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIElTZXJ2ZXIgc2VydmVyKSB7Ci0KLQkJU3RyaW5nIHdlYlByb2plY3RVUkwgPSBudWxsOwotCQlJTW9kdWxlIG1vZHVsZSA9IGdldE1vZHVsZShwcm9qZWN0KTsKLQkJaWYgKG1vZHVsZSAhPSBudWxsKSB7Ci0JCQlpZiAoc2VydmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBJVVJMUHJvdmlkZXIgdXJsUHJvdmlkZXIgPSAoSVVSTFByb3ZpZGVyKSBzZXJ2ZXIubG9hZEFkYXB0ZXIoSVVSTFByb3ZpZGVyLmNsYXNzLCBudWxsKTsKLSAgICAgICAgICAgICAgICBpZiAodXJsUHJvdmlkZXIhPW51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgVVJMIHVybCA9IHVybFByb3ZpZGVyLmdldE1vZHVsZVJvb3RVUkwobW9kdWxlKTsgICAgICAgICAgICAgIAotCQkJCQlpZiAodXJsICE9IG51bGwpIHsKLQkJCQkJICBTdHJpbmcgcyA9IHVybC50b1N0cmluZygpOwotCQkJCQkgIHdlYlByb2plY3RVUkwgPSAocy5lbmRzV2l0aCgiLyIpID8gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGgoKSAtIDEpIDogcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXdlYlByb2plY3RVUkwgPSBnZXRXZWJDb21wb25lbnRVUkwocHJvamVjdCwgc2VydmVyRmFjdG9yeUlkKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gd2ViUHJvamVjdFVSTDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RW5jb2RlZFdlYkNvbXBvbmVudFVSTChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkKSB7Ci0JCVN0cmluZyB1cmwgPSBnZXRXZWJDb21wb25lbnRVUkwocHJvamVjdCwgc2VydmVyRmFjdG9yeUlkKTsKLQkJcmV0dXJuIGVuY29kZVVSTCh1cmwpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIElTZXJ2ZXIgc2VydmVyKSB7Ci0JCVN0cmluZyB1cmwgPSBnZXRXZWJDb21wb25lbnRVUkwocHJvamVjdCwgc2VydmVyRmFjdG9yeUlkLCBzZXJ2ZXIpOwotCQlyZXR1cm4gZW5jb2RlVVJMKHVybCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZW5jb2RlVVJMKFN0cmluZyB1cmwpIHsKLQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQlpbnQgaW5kZXggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZ0J1ZmZlciBlbmNvZGVkVVJMID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCWVuY29kZWRVUkwuYXBwZW5kKHVybC5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKSk7Ci0JCQkJdHJ5IHsKLQkJCQkJU3RyaW5nIGN0eHRSb290ID0gVVJMRW5jb2Rlci5lbmNvZGUodXJsLnN1YnN0cmluZyhpbmRleCArIDEsIHVybC5sZW5ndGgoKSksICJVVEYtOCIpOwotCQkJCQlpbnQgcGx1c0luZGV4ID0gY3R4dFJvb3QuaW5kZXhPZignKycpOwotCQkJCQl3aGlsZSAocGx1c0luZGV4ICE9IC0xKSB7Ci0JCQkJCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJCQlzYi5hcHBlbmQoY3R4dFJvb3Quc3Vic3RyaW5nKDAsIHBsdXNJbmRleCkpOwotCQkJCQkJc2IuYXBwZW5kKCIlMjAiKTsKLQkJCQkJCXNiLmFwcGVuZChjdHh0Um9vdC5zdWJzdHJpbmcocGx1c0luZGV4ICsgMSwgY3R4dFJvb3QKLQkJCQkJCQkubGVuZ3RoKCkpKTsKLQkJCQkJCWN0eHRSb290ID0gc2IudG9TdHJpbmcoKTsKLQkJCQkJCXBsdXNJbmRleCA9IGN0eHRSb290LmluZGV4T2YoJysnKTsKLQkJCQkJfQotCQkJCQllbmNvZGVkVVJMLmFwcGVuZChjdHh0Um9vdCk7Ci0JCQkJfWNhdGNoIChJT0V4Y2VwdGlvbiBpbyl7Ci0JCQkJCS8vaGFuZGxlciBleGNlcHRpb24KLQkJCQl9CQkJCQotCQkJCXVybCA9IGVuY29kZWRVUkwudG9TdHJpbmcoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdXJsOwotCX0JCi0KLQlwdWJsaWMgc3RhdGljIElTZXJ2ZXIgZ2V0RGVmYXVsdEV4aXN0aW5nU2VydmVyKElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCkgewotCQlJUHJvamVjdCBwcm9qZWN0ID0gY29tcG9uZW50LmdldFByb2plY3QoKTsKLQkJSU1vZHVsZSBtb2R1bGUgPSBnZXRNb2R1bGUocHJvamVjdCk7Ci0JCUlTZXJ2ZXIgcHJlZmVycmVkU2VydmVyID0gU2VydmVyQ29yZS5nZXREZWZhdWx0U2VydmVyKG1vZHVsZSk7Ci0JCWlmIChwcmVmZXJyZWRTZXJ2ZXIgIT0gbnVsbCkKLQkJCXJldHVybiBwcmVmZXJyZWRTZXJ2ZXI7Ci0JCQotCQlJU2VydmVyW10gY29uZmlndXJlZFNlcnZlcnMgPSBTZXJ2ZXJVdGlsLmdldFNlcnZlcnNCeU1vZHVsZShtb2R1bGUsCi0JCQkJbnVsbCk7Ci0KLQkJaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJzICE9IG51bGwgJiYgY29uZmlndXJlZFNlcnZlcnMubGVuZ3RoID4gMCkgewotCQkJcHJlZmVycmVkU2VydmVyID0gY29uZmlndXJlZFNlcnZlcnNbMF07Ci0JCX0gZWxzZSB7Ci0JCQlJU2VydmVyW10gbm9uQ29uZmlndXJlZFNlcnZlcnMgPSBTZXJ2ZXJVdGlsCi0JCQkJCS5nZXRBdmFpbGFibGVTZXJ2ZXJzRm9yTW9kdWxlKG1vZHVsZSwgZmFsc2UsIG51bGwpOwotCi0JCQlpZiAobm9uQ29uZmlndXJlZFNlcnZlcnMgIT0gbnVsbAotCQkJCQkmJiBub25Db25maWd1cmVkU2VydmVycy5sZW5ndGggPiAwKSB7Ci0JCQkJcHJlZmVycmVkU2VydmVyID0gbm9uQ29uZmlndXJlZFNlcnZlcnNbMF07Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcHJlZmVycmVkU2VydmVyOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIEBkZXByZWNhdGVkIHNob3VsZCBiZSB1c2luZyBnZXREZWZhdWx0RXhpc3RpbmdTZXJ2ZXIoIElWaXJ0dWFsQ29tcG9uZW50ICkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElTZXJ2ZXIgZ2V0RGVmYXVsdEV4aXN0aW5nU2VydmVyKElQcm9qZWN0IHByb2plY3QpIHsKLSAgICAKLSAgICAgIElNb2R1bGUgbW9kdWxlID0gU2VydmVyVXRpbC5nZXRNb2R1bGUocHJvamVjdCk7Ci0gICAgICBJU2VydmVyIHByZWZlcnJlZFNlcnZlciA9IG51bGw7Ci0gICAgICBwcmVmZXJyZWRTZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmdldERlZmF1bHRTZXJ2ZXIobW9kdWxlKTsKLQkJCi0vLyBXb3JrYXJvdW5kIGZvciAxMTM2MjEKLS8vCQlJTW9kdWxlW10gbW9kdWxlcyA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlcyhwcm9qZWN0KTsKLS8vICAgICAgSVNlcnZlciBwcmVmZXJyZWRTZXJ2ZXIgPSBudWxsOwotLy8gICAgICBpZiAobW9kdWxlcy5sZW5ndGggPiAwKXsKLS8vICAgICAgICBwcmVmZXJyZWRTZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmdldERlZmF1bHRTZXJ2ZXIobW9kdWxlc1swXSk7Ci0vLyAgICAgIH0KLSAgCi0JCWlmIChwcmVmZXJyZWRTZXJ2ZXIgIT0gbnVsbCkKLQkJCXJldHVybiBwcmVmZXJyZWRTZXJ2ZXI7Ci0KLQkJSVNlcnZlcltdIGNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoCi0JCQkJUmVzb3VyY2VVdGlscy5nZXRNb2R1bGUocHJvamVjdCksIG51bGwpOwotCQlpZiAoY29uZmlndXJlZFNlcnZlcnMgIT0gbnVsbCAmJiBjb25maWd1cmVkU2VydmVycy5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gY29uZmlndXJlZFNlcnZlcnNbMF07Ci0JCX0KLQotCQlJU2VydmVyW10gbm9uQ29uZmlndXJlZFNlcnZlcnMgPSBTZXJ2ZXJVdGlsCi0JCQkJLmdldEF2YWlsYWJsZVNlcnZlcnNGb3JNb2R1bGUoUmVzb3VyY2VVdGlscy5nZXRNb2R1bGUocHJvamVjdCksCi0JCQkJCQlmYWxzZSwgbnVsbCk7Ci0JCWlmIChub25Db25maWd1cmVkU2VydmVycyAhPSBudWxsICYmIG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiBub25Db25maWd1cmVkU2VydmVyc1swXTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKgotCSAqIEBwYXJhbSBtb2R1bGVUeXBlIC0gYWQgZGVmaW5lZCBpbiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzIChpLmUuIEVBUl9UWVBFLAotCSAqIFdFQl9UWVBFLCBldGMuKSBAcGFyYW0gajJlZVZlcnNpb24gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnQKLQkgKiB2YWx1ZXMgaW4gSjJFRVZlcnNpb25Db25zdGFudHMgaS5lLiAiMTIiIG9yICIxMyIgb3IgIjE0IiBAcmV0dXJuIFN0cmluZwotCSAqIHRoZSBpZCBvZiB0aGUgc2VydmVyIHRhcmdldCAtIHRvIGJlIHVzZWQgaW4gcHJvamVjdCBjcmVhdGlvbiBvcGVyYXRpb25zLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlclRhcmdldElkRnJvbUZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkLAotCQkJU3RyaW5nIG1vZHVsZVR5cGUsIFN0cmluZyBqMmVlVmVyc2lvbikgewotCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQlpZiAoc2VydmVyVHlwZSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJU3RyaW5nIHNlcnZlclJ1bnRpbWVUeXBlSWQgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsKLQotCQlTdHJpbmcgc3RKMkVFVmVyc2lvbiA9IFNlcnZlclV0aWxzLmdldFNlcnZlclRhcmdldEoyRUVWZXJzaW9uKGoyZWVWZXJzaW9uKTsKLSAgICAgICAgTGlzdCBydW50aW1lcyA9IEFycmF5cy5hc0xpc3QoU2VydmVyVXRpbC5nZXRSdW50aW1lcyhtb2R1bGVUeXBlLCBzdEoyRUVWZXJzaW9uKSk7ICAgIAotCQlmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLnNpemUoKTsgaSsrKSB7Ci0JCQlJUnVudGltZSBydW50aW1lID0gKElSdW50aW1lKSBydW50aW1lcy5nZXQoaSk7Ci0JCQlJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBydW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQlpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgdGhpc1J1bnRpbWVUeXBlSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCQkJCWlmICh0aGlzUnVudGltZVR5cGVJZC5lcXVhbHMoc2VydmVyUnVudGltZVR5cGVJZCkgJiYgIXJ1bnRpbWUuaXNTdHViKCkpIHsKLQkJCQkJcmV0dXJuIHJ1bnRpbWUuZ2V0SWQoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKgotCSAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgdGhlIHNlcnZlcidzIGZhY3RvcnkgaWQgQHJldHVybnMgdGhlIHJ1bnRpbWUgdHlwZQotCSAqIGlkIGdpdmVuIHRoZSBzZXJ2ZXIncyBmYWN0b3J5IGlkLiBSZXR1cm5zIGEgYmxhbmsgU3RyaW5nIGlmIHRoZSBubwotCSAqIFNlcnZlclR5cGUgZXhpc3RzIGZvciB0aGUgZ2l2ZW4gZmFjdG9yeSBpZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSdW50aW1lVGFyZ2V0SWRGcm9tRmFjdG9yeUlkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpIHsKLQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsKLQkJaWYgKHNlcnZlclR5cGUgIT0gbnVsbCkgewotCQkJU3RyaW5nIHNlcnZlclJ1bnRpbWVJZCA9IHNlcnZlclR5cGUuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotCQkJcmV0dXJuIHNlcnZlclJ1bnRpbWVJZDsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gIiI7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZhY3RvcnlJZEZyb21SdW50aW1lVGFyZ2V0SWQoU3RyaW5nIHJ1bnRpbWVUYXJnZXRJZCl7Ci0JCUlTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0JCWZvciAoaW50IGk9MDtpPHNlcnZlclR5cGVzLmxlbmd0aDtpKyspIHsKLQkJCUlSdW50aW1lVHlwZSBydW50aW1lVHlwID0gc2VydmVyVHlwZXNbaV0uZ2V0UnVudGltZVR5cGUoKTsKLQkJCWlmIChydW50aW1lVHlwIT1udWxsKXsKLQkJCQlpZiAocnVudGltZVR5cC5nZXRJZCgpLmVxdWFscyhydW50aW1lVGFyZ2V0SWQpKQotCQkJCQlyZXR1cm4gc2VydmVyVHlwZXNbaV0uZ2V0SWQoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gIiI7Ci0JCQotCX0KLQkKLQotCS8qCi0JICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCB0aGUgc2VydmVyJ3MgZmFjdG9yeSBpZCBAcmV0dXJucyB0aGUgc2VydmVyIHR5cGUKLQkgKiBpZCBnaXZlbiB0aGUgc2VydmVyJ3MgZmFjdG9yeSBpZC4gUmV0dXJucyBhIGJsYW5rIFN0cmluZyBpZiB0aGUgbm8KLQkgKiBTZXJ2ZXJUeXBlIGV4aXN0cyBmb3IgdGhlIGdpdmVuIGZhY3RvcnkgaWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmVyVHlwZUlkRnJvbUZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKSB7Ci0JCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0JCWlmIChzZXJ2ZXJUeXBlICE9IG51bGwpIHsKLQkJCVN0cmluZyBzZXJ2ZXJUeXBlSWQgPSBzZXJ2ZXJUeXBlLmdldElkKCk7Ci0JCQlyZXR1cm4gc2VydmVyVHlwZUlkOwotCQl9IGVsc2UKLQkJCXJldHVybiAiIjsKLQl9Ci0KLQkvKgotCSAqIEBwYXJhbSBqMmVlVmVyc2lvbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludCB2YWx1ZXMgaW4KLQkgKiBKMkVFVmVyc2lvbkNvbnN0YW50cyBpLmUuICIxMiIgb3IgIjEzIiBvciAiMTQiCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVGFyZ2V0VmFsaWRGb3JFQVIoU3RyaW5nIHJ1bnRpbWVUYXJnZXRJZCwKLQkJCVN0cmluZyBqMmVlVmVyc2lvbikgewotCQlpZiAocnVudGltZVRhcmdldElkID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIGVhck1vZHVsZVR5cGUgPSBJTW9kdWxlQ29uc3RhbnRzLkpTVF9FQVJfTU9EVUxFOwotCQlTdHJpbmcgc3RKMkVFVmVyc2lvbiA9IFNlcnZlclV0aWxzLmdldFNlcnZlclRhcmdldEoyRUVWZXJzaW9uKGoyZWVWZXJzaW9uKTsKLSAgICAgICAgTGlzdCBydW50aW1lcyA9IEFycmF5cy5hc0xpc3QoU2VydmVyVXRpbC5nZXRSdW50aW1lcyhlYXJNb2R1bGVUeXBlLCBzdEoyRUVWZXJzaW9uKSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMuc2l6ZSgpOyBpKyspIHsKLQkJCUlSdW50aW1lIHJ1bnRpbWUgPSAoSVJ1bnRpbWUpIHJ1bnRpbWVzLmdldChpKTsKLQkJCUlSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkJCWlmIChydW50aW1lVHlwZSAhPSBudWxsKQotCQkJewotCQkJCVN0cmluZyB0aGlzSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCQkJCWlmICh0aGlzSWQuZXF1YWxzKHJ1bnRpbWVUYXJnZXRJZCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qCi0JICogQHBhcmFtIGoyZWVWZXJzaW9uIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50IHZhbHVlcyBpbgotCSAqIEoyRUVWZXJzaW9uQ29uc3RhbnRzIGkuZS4gIjEyIiBvciAiMTMiIG9yICIxNCIgQHBhcmFtIHRoZSBwcm9qZWN0IHR5cGUKLQkgKiBmcm9tIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUYXJnZXRWYWxpZEZvclByb2plY3RUeXBlKFN0cmluZyBydW50aW1lVGFyZ2V0SWQsCi0JCQlTdHJpbmcgajJlZVZlcnNpb24sIFN0cmluZyBwcm9qZWN0VHlwZSkgewotCQlpZiAocnVudGltZVRhcmdldElkID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJaWYgKHByb2plY3RUeXBlID09IG51bGwgfHwgcHJvamVjdFR5cGUubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgc3RKMkVFVmVyc2lvbiA9IFNlcnZlclV0aWxzLmdldFNlcnZlclRhcmdldEoyRUVWZXJzaW9uKGoyZWVWZXJzaW9uKTsKLSAgICAgICAgTGlzdCBydW50aW1lcyA9IEFycmF5cy5hc0xpc3QoU2VydmVyVXRpbC5nZXRSdW50aW1lcyhwcm9qZWN0VHlwZSwgc3RKMkVFVmVyc2lvbikpOyAgICAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5zaXplKCk7IGkrKykgewotCQkJSVJ1bnRpbWUgcnVudGltZSA9IChJUnVudGltZSkgcnVudGltZXMuZ2V0KGkpOwotCQkJSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gcnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkJaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIHRoaXNJZCA9IHJ1bnRpbWVUeXBlLmdldElkKCk7Ci0JCQkJaWYgKHRoaXNJZC5lcXVhbHMocnVudGltZVRhcmdldElkKSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmVyVGFyZ2V0SjJFRVZlcnNpb24oU3RyaW5nIGoyZWVWZXJzaW9uKSB7Ci0KLQkJaWYgKGoyZWVWZXJzaW9uID09IG51bGwgfHwgajJlZVZlcnNpb24ubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCi0JCWludCBqMmVlVmVyc2lvbkludCA9IEludGVnZXIucGFyc2VJbnQoajJlZVZlcnNpb24pOwotCQlzd2l0Y2ggKGoyZWVWZXJzaW9uSW50KSB7Ci0JCWNhc2UgKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEKToKLQkJCXJldHVybiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLkoyRUVfMTI7Ci0JCWNhc2UgKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKToKLQkJCXJldHVybiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLkoyRUVfMTM7Ci0JCWNhc2UgKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKToKLQkJCXJldHVybiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLkoyRUVfMTQ7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQkKLQkvL0NvbnZlcnRzIGEgbW9kdWxlIHR5cGUgZnJvbSBKMkVFVXRpbHMgdG8gYSBtb2R1bGUgdHlwZSBsaWtlCi0JLy90aGUgb25lIGluIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmVyVGFyZ2V0TW9kdWxlVHlwZShpbnQgbW9kdWxlVHlwZSkKLQl7Ci0JCXN3aXRjaCAobW9kdWxlVHlwZSkKLSAgICB7Ci0gICAgY2FzZSBKMkVFVXRpbHMuV0VCIDoKLSAgICAgIHJldHVybiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLldFQl9UWVBFOwotICAgIGNhc2UgSjJFRVV0aWxzLkVKQiA6Ci0gICAgICByZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5FSkJfVFlQRTsKLSAgICBjYXNlIEoyRUVVdGlscy5BUFBDTElFTlQgOgotICAgICAgcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuQVBQX0NMSUVOVF9UWVBFOwotICAgIGNhc2UgSjJFRVV0aWxzLkVBUiA6Ci0gICAgICByZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5FQVJfVFlQRTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAKLSAgICB9ICAgICAgCQkJCi0JfQotICAgIAotICAvKgotICAgKiBSZXR1cm5zIGEgbm9uLXN0dWIgcnVudGltZSBpZiBvbmUgaXMgYXZhaWxhYmxlIGZvciB0aGUgdGhlIGdpdmVuIHNlcnZlciB0eXBlLgotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIC0gc2VydmVyIHR5cGUgaWQKLSAgICogQHJldHVybnMgSVJ1bnRpbWUgUmV0dXJucyBhIG5vbi1zdHViIHJ1bnRpbWUgaWYgb25lIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZS4KLSAgICogUmV0dXJucyBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVJ1bnRpbWUgZ2V0Tm9uU3R1YlJ1bnRpbWUoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIC8vRmluZCBhIFJ1bnRpbWUgd2hpY2ggaXMgbm90IGEgc3R1YgotICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0gICAgSVJ1bnRpbWUgbm9uU3R1YlJ1bnRpbWUgPSBudWxsOwotICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgLy9ib29sZWFuIGZvdW5kTm9uU3R1YlJ1bnRpbWUgPSBmYWxzZTsKLSAgICAgIElSdW50aW1lW10gcnVudGltZXMgPSBTZXJ2ZXJVdGlsLmdldFJ1bnRpbWVzKG51bGwsIG51bGwpOwotICAgICAgU3RyaW5nIHNlcnZlclJ1bnRpbWVUeXBlSWQgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIElSdW50aW1lIHJ1bnRpbWUgPSBydW50aW1lc1tpXTsKLSAgICAgICAgSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gcnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotICAgIAlpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLSAgICAJewotICAgIAkJU3RyaW5nIHRoaXNSdW50aW1lVHlwZUlkID0gcnVudGltZVR5cGUuZ2V0SWQoKTsKLQkgICAgICAgIGlmICh0aGlzUnVudGltZVR5cGVJZC5lcXVhbHMoc2VydmVyUnVudGltZVR5cGVJZCkgJiYgIXJ1bnRpbWUuaXNTdHViKCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIC8vIEZvdW5kIGFuIGFwcHJvcHJpYXRlIElSdW50aW1lIHRoYXQgaXMgbm90IGEgc3R1YgotCSAgICAgICAgICAvL2ZvdW5kTm9uU3R1YlJ1bnRpbWUgPSB0cnVlOwotCSAgICAgICAgICBub25TdHViUnVudGltZSA9IHJ1bnRpbWU7Ci0JICAgICAgICAgIGJyZWFrOwotCSAgICAgICAgfQotICAgIAl9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBub25TdHViUnVudGltZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RhdHVzT2JqZWN0SGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RhdHVzT2JqZWN0SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQ5OWIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0YXR1c09iamVjdEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5NdWx0aVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5XcmFwcGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgU3RhdHVzT2JqZWN0SGFuZGxlcgotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9ERVRBSUxTID0gMTY7Ci0KLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGdlbmVyYXRlVHJlZVN0YXR1cyAoSVN0YXR1cyBzdGF0dXMpIAotICAJewotICAgIC8vCi0gICAgLy8gVGhlcmUgY291bGQgYmUgbG90cyBvZiBUaHJvd2FibGVzLCBDb3JlRXhjZXB0aW9ucywKLSAgICAvLyBXcmFwcGVkRXhjZXB0aW9ucyBhbmQgSVN0YXR1cyBvYmplY3RzIGJlbmVhdGggdGhlCi0gICAgLy8gZ2l2ZW4gc3RhdHVzLiBGaW5kIHRoZW0uCi0gICAgLy8KLSAgICBMaW5rZWRMaXN0IHN0YXR1c0xpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotICAgIGFwcGVuZFN0YXR1cyhNQVhfREVUQUlMUywgc3RhdHVzTGlzdCwgc3RhdHVzLCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSk7Ci0gICAgaWYgKHN0YXR1c0xpc3Quc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIG5ld1N0YXR1cyA9IChJU3RhdHVzKXN0YXR1c0xpc3QucmVtb3ZlRmlyc3QoKTsKLSAgICAgIGlmIChzdGF0dXNMaXN0LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXNbXSBzZWNvbmRhcnlTdGF0dXNBcnJheSA9IG5ldyBJU3RhdHVzW3N0YXR1c0xpc3Quc2l6ZSgpXTsKLSAgICAgICAgaW50IG4gPSAwOwotICAgICAgICBJdGVyYXRvciBpID0gc3RhdHVzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBzZWNvbmRhcnlTdGF0dXNBcnJheVtuKytdID0gKElTdGF0dXMpaS5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbmV3U3RhdHVzID0gbmV3IE11bHRpU3RhdHVzKHN0YXR1cy5nZXRQbHVnaW4oKSxzdGF0dXMuZ2V0Q29kZSgpLHNlY29uZGFyeVN0YXR1c0FycmF5LHN0YXR1cy5nZXRNZXNzYWdlKCksc3RhdHVzLmdldEV4Y2VwdGlvbigpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuZXdTdGF0dXM7Ci0gICAgfQotICAgIGVsc2UgCi0gICAgCXJldHVybiBudWxsOwotICB9Ci0KLSAgLy8KLSAgLy8gQXBwZW5kcyB6ZXJvIG9yIG1vcmUgSVN0YXR1cyBvYmplY3RzIHRvIHRoZSBsaXN0IG9mIElTdGF0dXMgb2JqZWN0cwotICAvLyBiYXNlZCB1cG9uIGFuIElTdGF0dXMuCi0gIC8vCi0gIHByaXZhdGUgc3RhdGljIGludCBhcHBlbmRTdGF0dXMgKCBpbnQgbWF4LCBMaXN0IHN0YXR1c0xpc3QsIElTdGF0dXMgc3RhdHVzLCBpbnQgc2V2ZXJpdHkgKQotICB7Ci0gICAgaWYgKG1heCA+IDAgJiYgc3RhdHVzICE9IG51bGwpCi0gICAgewotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCBhbiBJU3RhdHVzIG9iamVjdCBmb3IgdGhlIGdpdmVuIHN0YXR1cycgbWVzc2FnZS4KLSAgICAgIC8vCi0gICAgICBpZiAoc3RhdHVzLmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtYXggPSBhcHBlbmQoc3RhdHVzTGlzdCxtYXgsc2V2ZXJpdHksc3RhdHVzLmdldFBsdWdpbigpLHN0YXR1cy5nZXRDb2RlKCksc3RhdHVzLmdldE1lc3NhZ2UoKSxzdGF0dXMuZ2V0RXhjZXB0aW9uKCkpOwotICAgICAgfQotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCB0aGUgSVN0YXR1cycgVGhyb3dhYmxlLCBpZiBhbnkuCi0gICAgICAvLwotICAgICAgbWF4ID0gYXBwZW5kVGhyb3dhYmxlKG1heCxzdGF0dXNMaXN0LHN0YXR1cy5nZXRFeGNlcHRpb24oKSxzZXZlcml0eSk7Ci0gICAgICAvLwotICAgICAgLy8gSWYgdGhlIElTdGF0dXMgaXMgYSBtdWx0aSBzdGF0dXMsIGFwcGVuZCB0aGUgY2hpbGRyZW4uCi0gICAgICAvLwotICAgICAgSVN0YXR1c1tdIGNoaWxkcmVuID0gc3RhdHVzLmdldENoaWxkcmVuKCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8Y2hpbGRyZW4ubGVuZ3RoICYmIG1heD4wOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG1heCA9IGFwcGVuZFN0YXR1cyhtYXgsc3RhdHVzTGlzdCxjaGlsZHJlbltpXSxzZXZlcml0eSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtYXg7Ci0gIH0KLQotICAvLwotICAvLyBBcHBlbmRzIHplcm8gb3IgbW9yZSBJU3RhdHVzIG9iamVjdHMgdG8gdGhlIGxpc3Qgb2YgSVN0YXR1cyBvYmplY3RzCi0gIC8vIGJhc2VkIHVwb24gYSBUaHJvd2FibGUuIFdyYXBwZWRFeGNlcHRpb25zIGFuZCBDb3JlRXhjZXB0aW9ucyBhcmUKLSAgLy8gZ2l2ZW4gc3BlY2lhbCB0cmVhdG1lbnQuCi0gIC8vCi0gIHByaXZhdGUgc3RhdGljIGludCBhcHBlbmRUaHJvd2FibGUgKCBpbnQgbWF4LCBMaXN0IHN0YXR1c0xpc3QsIFRocm93YWJsZSB0aHJvd2FibGUsIGludCBzZXZlcml0eSApCi0gIHsKLSAgICBpZiAobWF4ID4gMCAmJiB0aHJvd2FibGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIGFuIElTdGF0dXMgb2JqZWN0IGZvciB0aGUgZXhjZXB0aW9uJ3MgbWVzc2FnZS4KLSAgICAgIC8vCi0gICAgICBpZiAodGhyb3dhYmxlLmdldExvY2FsaXplZE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtYXggPSBhcHBlbmQoc3RhdHVzTGlzdCxtYXgsc2V2ZXJpdHksV2ViU2VydmljZVBsdWdpbi5JRCwwLHRocm93YWJsZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCksdGhyb3dhYmxlKTsKLSAgICAgIH0KLSAgICAgIC8vCi0gICAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGlzIGEgV3JhcHBlZEV4Y2VwdGlvbiwgYXBwZW5kIHRoZSB3cmFwcGVkIEV4Y2VwdGlvbi4KLSAgICAgIC8vCi0gICAgICBpZiAodGhyb3dhYmxlIGluc3RhbmNlb2YgV3JhcHBlZEV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgV3JhcHBlZEV4Y2VwdGlvbiB3ZXhjID0gKFdyYXBwZWRFeGNlcHRpb24pdGhyb3dhYmxlOwotICAgICAgICBtYXggPSBhcHBlbmRUaHJvd2FibGUobWF4LHN0YXR1c0xpc3Qsd2V4Yy5leGNlcHRpb24oKSxzZXZlcml0eSk7Ci0gICAgICB9Ci0gICAgICAvLwotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBpcyBhIENvcmVFeGNlcHRpb24sIGFwcGVuZCB0aGUgZW5jbG9zZWQgSVN0YXR1cy4KLSAgICAgIC8vCi0gICAgICBpZiAodGhyb3dhYmxlIGluc3RhbmNlb2YgQ29yZUV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgQ29yZUV4Y2VwdGlvbiBjZXhjID0gKENvcmVFeGNlcHRpb24pdGhyb3dhYmxlOwotICAgICAgICBtYXggPSBhcHBlbmRTdGF0dXMobWF4LHN0YXR1c0xpc3QsY2V4Yy5nZXRTdGF0dXMoKSxzZXZlcml0eSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtYXg7Ci0gIH0KLQotICAvLwotICAvLyBDcmVhdGVzIGFuZCBhcHBlbmRzIGFuIElTdGF0dXMgdG8gdGhlIGxpc3Qgb2YgSVN0YXR1cyBvYmplY3RzLgotICAvLwotICBwcml2YXRlIHN0YXRpYyBpbnQgYXBwZW5kICggTGlzdCBzdGF0dXNMaXN0LCBpbnQgbWF4LCBpbnQgc2V2ZXJpdHksIFN0cmluZyBpZCwgaW50IGNvZGUsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgdGhyb3dhYmxlICkKLSAgewotICAgIGlmIChtYXggPiAwKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyhzZXZlcml0eSxpZCxjb2RlLG1lc3NhZ2UsdGhyb3dhYmxlKTsKLSAgICAgIHN0YXR1c0xpc3QuYWRkKHN0YXR1cyk7Ci0gICAgICBtYXgtLTsKLSAgICB9Ci0gICAgcmV0dXJuIG1heDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlBhdGhUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlBhdGhUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTdlMWRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJQYXRoVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLS8qKgotICogCi0gKiBUcmFuc2Zvcm1zIGEgaW5wdXQgU3RyaW5nIHRvIGEgUGF0aAotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIFN0cmluZzJQYXRoVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0JCi0JcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKSB7CQkJCSAKLQkJUGF0aCBwYXRoID0gbmV3IFBhdGgodmFsdWUudG9TdHJpbmcoKSk7Ci0JCXJldHVybiBwYXRoOwkJIAotCX0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjA2N2RlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyODA5NCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA3MDMwNSAgIDE3NTE5NCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQW50IHRhc2sgSW5pdGlhbFNlbGVjdGlvbiBvbmx5IGFsbG93cyB3c2RsIHdpdGhpbiB0aGUgd29ya3NwYWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCSmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRW50ZXJwcmlzZUJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLmNvbXBvbmVudGNvcmUudXRpbC5FSkJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLS8qKgotICogVHJhbnNmb3JtcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgYSB3b3Jrc3BhY2UgcmVzb3VyY2UgcGF0aCBpbnRvIGEgU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3QKLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBTdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0KLQlwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIHsKLQkJCi0JCVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gbnVsbDsKLQkJSVJlc291cmNlIHJlc291cmNlID0gRmlsZVJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIobmV3IFBhdGgodmFsdWUudG9TdHJpbmcoKSkpOwotCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkKLQkJewotCQkJSVByb2plY3QgcmVzUHJvamVjdCA9IHJlc291cmNlLmdldFByb2plY3QoKTsJCQkKLQkJCS8vIGNoZWNrIGlmIHJlc291cmNlIGlzIHBhcnQgb2YgYW4gRUpCCi0JCQlpZiAoSjJFRVV0aWxzLmlzRUpCQ29tcG9uZW50KHJlc1Byb2plY3QpKQotCQkJewotCQkJCS8vIGlmIHJlc291cmNlIGlzIHBhcnQgb2YgRUpCIG5lZWQgdG8gZ2V0IHRoZSBFbnRlcnByaXNlQmVhbiBhcyB0aGUgc2VsZWN0aW9uCi0JCQkJSVZpcnR1YWxDb21wb25lbnRbXSBlamJDb21wb25lbnRzID0gSjJFRVV0aWxzLmdldEVKQkNvbXBvbmVudHMocmVzUHJvamVjdCk7Ci0JCQkJRUpCQXJ0aWZhY3RFZGl0ICBlamJFZGl0ID0gbnVsbDsJCQkKLQkJCQl0cnl7CQkJCQotCQkJCQllamJFZGl0ID0gRUpCQXJ0aWZhY3RFZGl0LmdldEVKQkFydGlmYWN0RWRpdEZvclJlYWQoZWpiQ29tcG9uZW50c1swXSk7CQkJCQotCQkgICAgICAgICAgICBFSkJSZXNvdXJjZSBlamJSZXMgPSBlamJFZGl0LmdldEVKQkphclhtaVJlc291cmNlKCk7Ci0JCSAgICAgICAgICAgIEVKQkphciBlamJKYXIgPSBlamJSZXMuZ2V0RUpCSmFyKCk7CSAgICAgICAgICAgIAotCQkgICAgICAgICAgICBJUGF0aCBwYXRoID0gcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKTsKLQkJICAgICAgICAgICAgU3RyaW5nIHJlc291cmNlUGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVJlc291cmNlUGFja2FnZU5hbWUocGF0aCk7Ci0JCSAgICAgICAgICAgIFN0cmluZyBqYXZhQ2xhc3NOYW1lID0gcmVzb3VyY2UuZ2V0TmFtZSgpOwotCQkgICAgICAgICAgICAvLyBzdHJpcCBvZmYgZmlsZSBleHRlbnNpb24gaWYgbmVjZXNzYXJ5Ci0JCSAgICAgICAgICAgIGlmIChqYXZhQ2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJyk+LTEpCi0JCSAgICAgICAgICAgIHsJCi0JCSAgICAgICAgICAgICAgamF2YUNsYXNzTmFtZSA9IGphdmFDbGFzc05hbWUuc3Vic3RyaW5nKDAsIGphdmFDbGFzc05hbWUubGFzdEluZGV4T2YoJy4nKSk7CSAgICAgICAgICAgICAgCi0JCSAgICAgICAgICAgIH0gCi0JCSAgICAgICAgICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBKYXZhTU9GVXRpbHMuZ2V0SmF2YUNsYXNzKHJlc291cmNlUGF0aCwgamF2YUNsYXNzTmFtZSwgcmVzUHJvamVjdCk7Ci0JCSAgICAgICAgICAgIEVudGVycHJpc2VCZWFuIGVqYiA9IGVqYkphci5nZXRFbnRlcnByaXNlQmVhbldpdGhSZWZlcmVuY2UoamF2YUNsYXNzKTsKLQkJICAgICAgICAgICAgaWYgKGVqYiAhPSBudWxsKQotCQkgICAgICAgICAgICB7Ci0JCSAgICAgICAgICAgIAlzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlamIuZ2V0TmFtZSgpKTsJCi0JCSAgICAgICAgICAgIH0KLQkJCQl9Ci0JCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCQkJewotCQkJCQkKLQkJCQl9Ci0JCQkJZmluYWxseSB7Ci0JCSAgICAgICAgICAgICAgaWYgKGVqYkVkaXQhPW51bGwpCi0JCSAgICAgICAgICAgICAgICBlamJFZGl0LmRpc3Bvc2UoKTsKLQkJICAgICAgICB9Ci0JCQl9Ci0JCQkvLyBpZiBzZWxlY3Rpb24gbm90IGFscmVhZHkgc2V0IC0gY3JlYXRlIGl0IGZyb20gdGhlIHJlc291cmNlIG9iamVjdAotCQkJaWYgKHNlbGVjdGlvbiA9PSBudWxsKQotCQkJewotCQkJICBzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihyZXNvdXJjZSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgJiYgdmFsdWUudG9TdHJpbmcoKS5pbmRleE9mKCI6IikgIT0gLTEpIHsKLQkJCS8vIHJlbW90ZSBmaWxlCi0JCQlzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih2YWx1ZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvLyBzdHJpbmcgZG9lc24ndCByZXR1cm4gcmVzb3VyY2UgLSBlcnJvciBjb25kaXRpb24KLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oV1NQbHVnaW5NZXNzYWdlcy5FUlJPUl9TRUxFQ1RJT05fVFJBTlNGT1JNKTsKLQkJfQotCQlyZXR1cm4gc2VsZWN0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlRlc3RGYWNpbGl0eUxpc3RUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlRlc3RGYWNpbGl0eUxpc3RUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODU5NjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJUZXN0RmFjaWxpdHlMaXN0VHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0OwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nMlRlc3RGYWNpbGl0eUxpc3RUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIHsKLQotCXB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkgewotCQlTdHJpbmcgdGVzdEZhY2lsaXR5ID0gKFN0cmluZyl2YWx1ZTsKLQkJLy92YWx1ZSByZXByZXNlbnRzIG5hbWUgb2YgYSB0ZXN0IGZhY2lsaXR5Ci0JCS8vcGljayB1cCBsaXN0IG9mIHRlc3QgZmFjaWxpdGllcwotCQlTdHJpbmdbXSB0ZXN0VHlwZXMgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpOyAgICAgICAgCQotCQkKLQkJaW50IGluZGV4ID0gMDsKLQkJLy9tYXRjaCB2YWx1ZSB0byBuYW1lIG9mIHRlc3QgZmFjaWxpdHkgYW5kIHNldCBpbmRleCBhY2NvcmRpbmdseQotCQlmb3IgKGludCBpID0gMDsgaSA8IHRlc3RUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJaWYgKHRlc3RUeXBlc1tpXS5lcXVhbHModGVzdEZhY2lsaXR5KSkKLQkJCXsJCQotCQkJCWJyZWFrOwotCQkJfQkJCQotCQkJaW5kZXgrKzsKLQkJfQotCQkKLQkJU2VsZWN0aW9uTGlzdCBzZWxlY3Rpb25MaXN0ID0gbmV3IFNlbGVjdGlvbkxpc3QodGVzdFR5cGVzLCBpbmRleCk7CQkKLQkJcmV0dXJuIHNlbGVjdGlvbkxpc3Q7Ci0JfQotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTg3ZmUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMDMgICAxMjg4MzIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5CZWFuTW9kaWZpZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciBpbXBsZW1lbnRzIEJlYW5Nb2RpZmllciB7Ci0KLQlwcml2YXRlIFN0cmluZyBTRVJWSUNFX1JUX0lEX0tFWSA9ICJTZXJ2aWNlLlJ1bnRpbWVJZCI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgUlVOVElNRV9JRCA9ICJSdW50aW1lSWQiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIFNFUlZJQ0VfU1JWX0lEX0tFWSA9ICJTZXJ2aWNlLlNlcnZlcklkIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBTRVJWRVJfSUQgPSAiU2VydmVySWQiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIFRZUEVfSUQgPSAiVHlwZUlkIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBURF9FSkIgPSAiVE9QIERPV04gRUpCIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBCVV9FSkIgPSAiQk9UVE9NIFVQIEVKQiI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgVERfRUpCX1RZUEVfSUQgPSAiMS9vcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmVqYiI7Ci0JcHJpdmF0ZSBTdHJpbmcgQlVfRUpCX1RZUEVfSUQgPSAiMC9vcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmVqYiI7Ci0JcHJpdmF0ZSBTdHJpbmcgU0VSVklDRV9QUkVGSVggPSAiU2VydmljZS4iOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIENMSUVOVF9QUkVGSVggPSAiQ2xpZW50LiI7ICAvLyROT04tTkxTLU4kCi0JCi0JLyoqCi0JICogTW9kaWZpZXMgdGhlIHN1cHBsaWVkIFR5cGVSdW50aW1lU2VydmVyIGJlYW4gd2l0aCBwcm9wZXJ0aWVzIGluIGhvbGRlci4KLQkgKiBJZiB0aGUgYmVhbiBpcyBudWxsLCBjb25zdHJ1Y3QgYSBuZXcgb25lIGFuZCBzZXQgaXRzIHByb3BlcnRpZXMuCi0JICogQHBhcmFtIGJlYW4gVHlwZVJ1bnRpbWVTZXJ2ZXIgYmVhbiB0byBiZSBtb2RpZmllZAotCSAqIEBwYXJhbSBob2xkZXIgTWFwIGNvbnRhaW5pbmcgdmFsdWVzIGZvciBUeXBlUnVudGltZVNlcnZlciBwcm9wZXJ0aWVzIAotCSAqIEByZXR1cm4gVHlwZVJ1bnRpbWVTZXJ2ZXIgd2l0aCBwcm9wZXJ0aWVzIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIG1vZGlmeShPYmplY3QgYmVhbiwgT2JqZWN0IGhvbGRlcikgewotCQkKLQkJVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZXMgPSBudWxsOwotCQlpZiAoYmVhbiA9PSBudWxsIHx8ICEoYmVhbiBpbnN0YW5jZW9mIFR5cGVSdW50aW1lU2VydmVyKSkKLQkJewotCQkJdHlwZXMgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsJCQkKLQkJfQotCQllbHNlCi0JCXsKLQkJCXR5cGVzID0gKFR5cGVSdW50aW1lU2VydmVyKWJlYW47Ci0JCX0KLQkJCi0JCWlmIChob2xkZXIgaW5zdGFuY2VvZiBNYXApCi0JCXsJCi0JCQlNYXAgdHlwZXNNYXAgPSAoTWFwKWhvbGRlcjsKLQkJCVN0cmluZyBwcmVmaXggPSAiIjsKLQkJCQotCQkJCi0JCQlpZiAodHlwZXNNYXAuY29udGFpbnNLZXkoU0VSVklDRV9SVF9JRF9LRVkpfHx0eXBlc01hcC5jb250YWluc0tleShTRVJWSUNFX1NSVl9JRF9LRVkpKQotCQkJewotCQkJCXByZWZpeCA9IFNFUlZJQ0VfUFJFRklYOwotCQkJfQkJCSAgCQotCQkJZWxzZQotCQkJewotCQkJCXByZWZpeCA9IENMSUVOVF9QUkVGSVg7Ci0JCQl9Ci0JCQkKLQkJCVN0cmluZyBydW50aW1lSUQgPSAoU3RyaW5nKXR5cGVzTWFwLmdldChwcmVmaXgrUlVOVElNRV9JRCk7Ci0JCQlpZiAocnVudGltZUlEICE9IG51bGwpCi0JCQkJdHlwZXMuc2V0UnVudGltZUlkKHJ1bnRpbWVJRCk7CQkKLQkJCQotCQkJU3RyaW5nIHNlcnZlcklEID0gKFN0cmluZyl0eXBlc01hcC5nZXQocHJlZml4K1NFUlZFUl9JRCk7Ci0JCQlpZiAoc2VydmVySUQgICE9IG51bGwpCQkJCQotCQkJCXR5cGVzLnNldFNlcnZlcklkKHNlcnZlcklEKTsJCi0JCQkKLQkJCS8vY2hlY2sgaWYgd2ViIHNlcnZpY2UgdHlwZSBpcyBFSkIgLSBpZiBub3QsIGRlZmF1bHQgZm9yIEphdmEgYmVhbiB0eXBlcwotCQkJU3RyaW5nIHR5cGVJRCA9IChTdHJpbmcpdHlwZXNNYXAuZ2V0KHByZWZpeCtUWVBFX0lEKTsKLQkJCWlmICh0eXBlSUQgIT0gbnVsbCkKLQkJCXsKLQkJCQlpZiAodHlwZUlELnRvVXBwZXJDYXNlKCkuZXF1YWxzKFREX0VKQikpICAvL29ubHkgc2V0dGluZyB0eXBlSUQgc3BlY2lmaWNhbGx5IGZvciBFSkIgY2FzZQotCQkJCXsKLQkJCQkJdHlwZXMuc2V0VHlwZUlkKFREX0VKQl9UWVBFX0lEKTsKLQkJCQl9CQotCQkJCWVsc2UgaWYgKHR5cGVJRC50b1VwcGVyQ2FzZSgpLmVxdWFscyhCVV9FSkIpKQotCQkJCXsKLQkJCQkJdHlwZXMuc2V0VHlwZUlkKEJVX0VKQl9UWVBFX0lEKTsKLQkJCQl9CQotCQkJfQkJCQotCQl9Ci0gIH0JCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYjY2ZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi0KLS8qKgotICogVHJhbnNmcm9tcyBhIGphdmEubGFuZy5TdHJpbmcgdG8gYW4gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9qZWN0Ci0gKi8KLXB1YmxpYyBjbGFzcyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lcgotewotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lciN0cmFuc2Zvcm0oamF2YS5sYW5nLk9iamVjdCkKLSAgICogQHBhcmFtIE9iamVjdCBUaGlzIG11c3QgYmUgYSBqYXZhLmxhbmcuU3RyaW5nCi0gICAqIEByZXR1cm4gT2JqZWN0IFJldHVybnMgYW4gSVByb2plY3QKLSAgICovCi0KLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0JU3RyaW5nIHByb2plY3QgICAgID0gKFN0cmluZyl2YWx1ZTsKLQlpbnQgICAgc2xhc2hJbmRleCAgPSBwcm9qZWN0LmluZGV4T2YoICcvJyApOwotCVN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3Q7Ci0JCi0JaWYoIHNsYXNoSW5kZXggIT0gLTEgKQotCXsKLQkgIHByb2plY3ROYW1lID0gcHJvamVjdC5zdWJzdHJpbmcoIDAsIHNsYXNoSW5kZXggKTsKLQl9Ci0JCi0gICAgcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZ1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjVlYWEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZ1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29udmVudGlvbnM7Ci0KLS8qKgotICAqIFRoaXMgY2xhc3MgY29udGFpbnMgc29tZSB1c2VmdWwgc3RyaW5nIHV0aWxpdGllcyB0aGF0IGFyZSBub3QgcHJvdmlkZWQgYnkKLSAgKiBlaXRoZXIgU3RyaW5nIG9yIFN0cmluZ0J1ZmZlci4KLSAgKgotICAqIEBhdXRob3IgUGV0ZXIgTW9vZ2sKLSAgKiBAZGF0ZSAgIEp1bHkgMTMsIDIwMDAKLSoqLwotcHVibGljIGZpbmFsIGNsYXNzIFN0cmluZ1V0aWxzCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIHBsYXRmb3JtLXNwZWNpZmljIGxpbmUgc2VwYXJhdG9yLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBORVdMSU5FID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCi0gIHByaXZhdGUgU3RyaW5nVXRpbHMoKXt9OwotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2Qgc3BsaXRzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCBpbnRvIG11bHRpcGxlIGxpbmVzCi0gICAgKiBiYXNlZCBvbiBhIG1heGltdW0gbGluZSBsZW5ndGguICBUaGUgbWV0aG9kIHdpbGwgdHJ5IHRvIGZpdCBhcwotICAgICogbWFueSB3b3JkcyBhcyBwb3NzaWJsZSBvbnRvIGEgbGluZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgbWF4aW11bQotICAgICogbGluZSBsZW5ndGguICBOb3RlOiB0aGUgb25seSBjYXNlIHdoZXJlIGEgbGluZSBtaWdodCBleGNlZWQgdGhlCi0gICAgKiBtYXhpbXVtIGlzIGlmIGEgc2luZ2xlIHdvcmQgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0uCi0gICoqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIHNwbGl0dGVyKCBTdHJpbmcgdGV4dCwgaW50IG1heF9sZW5ndGggKQotICB7Ci0gICAgVmVjdG9yICAgICAgICAgIHJldHVybl90ZXh0ID0gbmV3IFZlY3RvcigyMCk7Ci0gICAgU3RyaW5nW10gICAgICAgIHJldHVybl9zdHI7Ci0gICAgaW50ICAgICAgICAgICAgIGluZGV4ID0gMDsKLQotICAgIHdoaWxlKCBpbmRleCA8IHRleHQubGVuZ3RoKCkgKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSB0ZXh0LnN1YnN0cmluZyggaW5kZXgsIE1hdGgubWluKCBtYXhfbGVuZ3RoICsgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5sZW5ndGgoKSApICk7Ci0gICAgICBpbnQgc3BhY2VfaW5kZXggPSBzdHIubGFzdEluZGV4T2YoICIgIiApOwotCi0gICAgICBpZiggaW5kZXggKyBzdHIubGVuZ3RoKCkgPCB0ZXh0Lmxlbmd0aCgpICYmCi0gICAgICAgICAgdGV4dC5jaGFyQXQoIGluZGV4ICsgc3RyLmxlbmd0aCgpIC0gMSApICE9ICcgJyAmJgotICAgICAgICAgIHRleHQuY2hhckF0KCBpbmRleCArIHN0ci5sZW5ndGgoKSApICE9ICcgJyAmJgotICAgICAgICAgIHNwYWNlX2luZGV4ICE9IC0xICkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuX3RleHQuYWRkRWxlbWVudCggc3RyLnN1YnN0cmluZyggMCwgc3BhY2VfaW5kZXggKSApOwotICAgICAgICBpbmRleCArPSBzcGFjZV9pbmRleCArIDE7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybl90ZXh0LmFkZEVsZW1lbnQoIHN0ci50cmltKCkgKTsKLSAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aCgpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybl9zdHIgPSBuZXcgU3RyaW5nW3JldHVybl90ZXh0LnNpemUoKV07Ci0KLSAgICBmb3IoIGluZGV4ID0gMDsgaW5kZXggPCByZXR1cm5fdGV4dC5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIHJldHVybl9zdHJbaW5kZXhdID0gKFN0cmluZykocmV0dXJuX3RleHQuZWxlbWVudEF0KGluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHVybl9zdHI7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgd2l0aCBhIHJlcGVhdGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzLgotICAqKi8KLSAgc3RhdGljIHB1YmxpYyBTdHJpbmcgcmVwZWF0KCBjaGFyIHRoZV9jaGFyLCBpbnQgY291bnQgKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoIGNvdW50ICk7Ci0KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGJ1Zi5hcHBlbmQoIHRoZV9jaGFyICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBmbGF0dGVucyBhbiBhcnJheSBvZiBhcmd1bWVudHMgdG8gYSBzdHJpbmcuCi0gICAgKiBUaGUgbWV0aG9kIHJlc3BlY3RzIGVtYmVkZGVkIHdoaXRlc3BhY2UgYW5kIHF1b3Rlcy4KLSAgICAqIDx1bD4KLSAgICAqIDxsaT5BbnkgYXJndW1lbnQgd2l0aCBlbWJlZGRlZCB3aGl0ZXNwYWNlIHdpbGwgYmUgZmxhdHRlbmVkIG91dAotICAgICogd2l0aCBlbmNsb3NpbmcgcXVvdGVzLiBGb3IgZXhhbXBsZSwgdGhlIHNpbmdsZSBhcmd1bWVudAotICAgICogPHU+SGVsbG8gV29ybGQ8L3U+Ci0gICAgKiB3aWxsIGJlIHJldHVybmVkIGFzCi0gICAgKiA8dT4iSGVsbG8gV29ybGQiPC91Pi4KLSAgICAqIDxsaT5BbnkgYXJndW1lbnQgd2l0aCBxdW90ZXMgd2lsbCBiZSBmbGF0dGVuZWQgb3V0IHdpdGggdGhlCi0gICAgKiBxdW90ZXMgZXNjYXBlZC4gRm9yIGV4YW1wbGUsIHRoZSBzaW5nbGUgYXJndW1lbnQKLSAgICAqIDx1PiJIYXBweSBkYXlzIjwvdT4KLSAgICAqIHdpbGwgYmUgcmV0dXJuZWQgYXMKLSAgICAqIDx1PlwiSGFwcHkgZGF5c1wiPC91Pi4KLSAgICAqIDwvdWw+Ci0gICAgKiBAcGFyYW0gYXJndW1lbnRzIFRoZSBhcnJheSBvZiBzdHJpbmdzIHRvIGZsYXR0ZW4uCi0gICAgKiBAcmV0dXJuIHRoZSBmbGF0dGVuZWQgc3RyaW5nLgotICAqLwotICBzdGF0aWMgcHVibGljIFN0cmluZyBmbGF0dGVuQXJndW1lbnRzICggU3RyaW5nW10gYXJndW1lbnRzICkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8YXJndW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgYSBzZXBhcmF0b3IgKGV4Y2VwdCB0aGUgZmlyc3QgdGltZSkuCi0gICAgICAvLwotICAgICAgaWYgKGkgPiAwKSBidWYuYXBwZW5kKCcgJyk7Ci0KLSAgICAgIC8vCi0gICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlLgotICAgICAgLy8KLSAgICAgIGJvb2xlYW4gd2hpdGVzcGFjZSA9IGZhbHNlOwotICAgICAgY2hhcltdIGNoYXJzID0gYXJndW1lbnRzW2ldLnRvQ2hhckFycmF5KCk7Ci0gICAgICBmb3IgKGludCBqPTA7ICF3aGl0ZXNwYWNlICYmIGo8Y2hhcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGNoYXJzW2pdKSkKLSAgICAgICAgewotICAgICAgICAgIHdoaXRlc3BhY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgdGhlIGFyZ3VtZW50LCBxdW90ZWQgYXMgbmVjZXNzYXJ5LgotICAgICAgLy8KLSAgICAgIGlmICh3aGl0ZXNwYWNlKSBidWYuYXBwZW5kKCciJyk7Ci0gICAgICBmb3IgKGludCBqPTA7IGo8Y2hhcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChjaGFyc1tqXSA9PSAnIicpIGJ1Zi5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgIGJ1Zi5hcHBlbmQoY2hhcnNbal0pOwotICAgICAgfQotICAgICAgaWYgKHdoaXRlc3BhY2UpIGJ1Zi5hcHBlbmQoJyInKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHBhcnNlcyB3aGl0ZXNwYWNlLWRlbGltaXR0ZWQgZmlsZW5hbWVzIGZyb20KLSAgICAqIHRoZSBnaXZlbiA8Y29kZT5pbnB1dDwvY29kZT4gc3RyZWFtLiA8Yj5MaW1pdGF0aW9uOjwvYj4KLSAgICAqIFF1b3RlZCBmaWxlbmFtZXMgb3IgZmlsZW5hbWVzIHdpdGggZW1iZWRkZWQgd2hpdGVzcGFjZQotICAgICogYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgotICAgICogQHBhcmFtIGlucHV0IFRoZSBpbnB1dCBzdHJlYW0uCi0gICAgKiBAcmV0dXJuIEFuIGVudW1lcmF0aW9uIG9mIGZpbGVuYW1lcyBmcm9tIHRoZSBzdHJlYW0uCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgRW51bWVyYXRpb24gcGFyc2VGaWxlbmFtZXNGcm9tU3RyZWFtICggSW5wdXRTdHJlYW0gaW5wdXQgKQotICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIFZlY3RvciBmaWxlbmFtZXMgPSBuZXcgVmVjdG9yKDY0LDY0KTsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbnVsbDsKLSAgICBieXRlIHN0YXRlID0gU1RBVEVfV1M7Ci0gICAgaW50IGljID0gaW5wdXQucmVhZCgpOwotICAgIHdoaWxlIChpYyA+PSAwKQotICAgIHsKLSAgICAgIGNoYXIgYyA9IChjaGFyKWljOwotICAgICAgc3dpdGNoIChzdGF0ZSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSBTVEFURV9XUzoKLSAgICAgICAgICBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoYykpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjKTsKLSAgICAgICAgICAgIHN0YXRlID0gU1RBVEVfTldTOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVEFURV9OV1M6Ci0gICAgICAgICAgaWYgKCFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBidWZmZXIudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGZpbGVuYW1lcy5hZGQoZmlsZW5hbWUpOwotICAgICAgICAgICAgYnVmZmVyID0gbnVsbDsKLSAgICAgICAgICAgIHN0YXRlID0gU1RBVEVfV1M7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWMgPSBpbnB1dC5yZWFkKCk7Ci0gICAgfQotICAgIHJldHVybiBmaWxlbmFtZXMuZWxlbWVudHMoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgU1RBVEVfV1MgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFNUQVRFX05XUyA9IDE7Ci0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaXMgdGhlIHR5cGUgcGFzc2VkIGluIGlzIGEgcHJpbXRpdmUgamF2YSB0eXBlCi0gICogQHBhcmFtIGNsYXNzIG5hbWUgU3RyaW5nCi0gICogQHJldHVybiB0cnVlIGlzIHByaW1pdGl2ZSB0eXBlCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ByaW1pdGl2ZVR5cGUoU3RyaW5nIHR5cGVOYW1lKSAKLSAgewotCi0gICAgaWYgKHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImJvb2xlYW4iKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYnl0ZSIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJkb3VibGUiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiZmxvYXQiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiaW50IikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImxvbmciKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2hvcnQiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiY2hhciIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotCi0gIH0KLQotICAvKioKLSAgKiBUaGUgbWV0aG9kIHJlcGxhY2UgdGhlIGNoYXJhY3RlcnMgdGhhdCBhcmUgYWxsb3dlZCBpbiBVUklzCi0gICogYW5kIG5vdCBhbGxvd2VkIGluIEphdmEgY2xhc3MgbmFtZXMgdG8gYW4gdW5kZXJzY29yZSAoJ18nKQotICAqIEBwYXJhbSBVUkkgU3RyaW5nCi0gICogQHJldHVybiB2YWxpZCBKYXZhIGNsYXNzIG5hbWUgU3RyaW5nCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFVSSTJDbGFzc05hbWUoIFN0cmluZyB1cmkgKSB7Ci0gICAgU3RyaW5nIGNsYXNzTmFtZSA9IHVyaTsKLSAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBVUklfU1lNQk9MUy5sZW5ndGg7IGkrKyApIHsKLSAgICAJY2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UgKCBVUklfU1lNQk9MU1tpXSwgVU5ERVJTQ09SRSApOwotICAgIH0KLSAgICByZXR1cm4gY2xhc3NOYW1lOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIFVSSV9TWU1CT0xTID0geyctJywgJ34nLCAnIycsICcvJywgJy4nfTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBVTkRFUlNDT1JFID0gJ18nOwotCi0KLSAgLyoqCi0gICAqIFRoaXMgcmV0dXJucyBhIHZhbGlkIEphdmEgaWRlbnRpZmllciBiYXNlZCBvbiB0aGUgZ2l2ZW4gbmFtZS4gCi0gICAqIChmb2xsb3dzIEpBWC1SUEMgMS4wIFB1YmxpYyBSZXZpZXcgRHJhZnQgMiByZWNvbW1lbmRhdGlvbnMpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBqYXZhSWRlbnRpZmllckZvcihTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBib29sZWFuIHNraXBwZWQgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gbG9jYWxOYW1lLmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgewotICAgICAgY2hhciBjaGFyYWN0ZXIgPSBsb2NhbE5hbWUuY2hhckF0KGkpOwotICAgICAgaWYgKENoYXJhY3Rlci5pc0phdmFJZGVudGlmaWVyUGFydChjaGFyYWN0ZXIpICYmICFpc0RlbGltaXRlcihjaGFyYWN0ZXIpKQotICAgICAgewotICAgICAgICBpZiAoc2tpcHBlZCAmJiByZXN1bHQubGVuZ3RoKCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgIGNoYXJhY3RlciA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaGFyYWN0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyKTsKLSAgICAgICAgc2tpcHBlZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBza2lwcGVkID10cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghSmF2YUNvbnZlbnRpb25zLnZhbGlkYXRlSWRlbnRpZmllcihyZXN1bHQudG9TdHJpbmcoKSkuaXNPSygpKQotICAgIHsKLSAgICAgIHJlc3VsdC5pbnNlcnQoMCwgIl8iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRGVsaW1pdGVyKGNoYXIgY2hhcmFjdGVyKQotICB7Ci0gICAgcmV0dXJuICJcdTAwMkRcdTAwMkVcdTAwM0FcdTAwNUZcdTAwQjdcdTAzODdcdTA2RERcdTA2REUiLmluZGV4T2YoY2hhcmFjdGVyKSAhPSAtMTsKLSAgfQotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhQmVhblByb3BlcnR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhQmVhblByb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZmUyN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhIHNpbXBsZSBvciBpbmRleGVkIHByb3BlcnR5Ci0gKiBhcyBkZWZpbmVkIGJ5IHRoZSBKYXZhIEJlYW4gc3BlY2lmaWNhdGlvbi4gRXZlcnkKLSAqIElKYXZhQmVhblByb3BlcnR5IGlzIGNoYXJhY3Rlcml6ZWQgYnkgZm91ciB0aGluZ3M6Ci0gKiA8b2w+Ci0gKiA8bGk+VGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LjwvbGk+Ci0gKiA8bGk+V2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IGlzIGluZGV4ZWQuPC9saT4KLSAqIDxsaT5UaGUgSkRUIElNZXRob2Qgb2YgdGhlIGdldHRlciwgaWYgYW55LjwvbGk+Ci0gKiA8bGk+VGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBzZXR0ZXIsIGlmIGFueS48L2xpPgotICogPC9vbD4KLSAqLwotcHVibGljIGludGVyZmFjZSBJSmF2YUJlYW5Qcm9wZXJ0eQotewotCS8qKgotCSAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgotCSAqIEByZXR1cm4gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgcHJvcGVydHkgaXMgaW5kZXhlZC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHByb3BlcnR5IGlzIGluZGV4ZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJbmRleGVkICgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElNZXRob2Qgb2YgdGhlIGdldHRlci4KLQkgKiBGb3IgaW5kZXhlZCBwcm9wZXJ0aWVzLAotCSAqIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZ2V0dGVyIHdpbGwgYmUgYW4gYXJyYXkuCi0JICogRm9yIHNpbXBsZSBwcm9wZXJ0aWVzLAotCSAqIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZ2V0dGVyIHdpbGwgbm90IGJlIGFuIGFycmF5LgotCSAqIEByZXR1cm4gVGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBnZXR0ZXIsCi0JICogb3IgbnVsbCBpZiB0aGlzIGlzIGEgd3JpdGUtb25seSBwcm9wZXJ0eS4KLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRHZXR0ZXIgKCk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElNZXRob2Qgb2YgdGhlIGluZGV4ZWQgZ2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBlaXRoZXIgbm90IGFuIGluZGV4ZWQgcHJvcGVydHksCi0JICogb3IgaXMgYW4gaW5kZXhlZCBwcm9wZXJ0eSBidXQgaGFzIG9ubHkgdGhlIGFycmF5LQotCSAqIGJhc2VkIGdldHRlci4KLQkgKiBAcmV0dXJuIFRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgaW5kZXhlZCBnZXR0ZXIsCi0JICogb3IgbnVsbCBpZiB0aGlzIGlzIG5vdCBhbiBpbmRleGVkIHByb3BlcnR5IG9yCi0JICogaWYgdGhlcmUgaXMgbm8gaW5kZXhlZCBnZXR0ZXIuCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0SW5kZXhlZEdldHRlciAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBzZXR0ZXIuCi0JICogRm9yIGluZGV4ZWQgcHJvcGVydGllcywKLQkgKiB0aGUgcGFyYW1ldGVyIHR5cGUgb2YgdGhlIHNldHRlciB3aWxsIGJlIGFuIGFycmF5LgotCSAqIEZvciBzaW1wbGUgcHJvcGVydGllcywKLQkgKiB0aGUgcGFyYW1ldGVyIHR5cGUgb2YgdGhlIHNldHRlciB3aWxsIG5vdCBiZSBhbiBhcnJheS4KLQkgKiBAcmV0dXJuIFRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgc2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBhIHJlYWQtb25seSBwcm9wZXJ0eS4KLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRTZXR0ZXIgKCk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElNZXRob2Qgb2YgdGhlIGluZGV4ZWQgc2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBlaXRoZXIgbm90IGFuIGluZGV4ZWQgcHJvcGVydHksCi0JICogb3IgaXMgYW4gaW5kZXhlZCBwcm9wZXJ0eSBidXQgaGFzIG9ubHkgdGhlIGFycmF5LQotCSAqIGJhc2VkIHNldHRlci4KLQkgKiBAcmV0dXJuIFRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgaW5kZXhlZCBzZXR0ZXIsCi0JICogb3IgbnVsbCBpZiB0aGlzIGlzIG5vdCBhbiBpbmRleGVkIHByb3BlcnR5IG9yCi0JICogaWYgdGhlcmUgaXMgbm8gaW5kZXhlZCBzZXR0ZXIuCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0SW5kZXhlZFNldHRlciAoKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0eXBlIHdpdGhpbiB3aGljaCB0aGUgZ2V0dGVyIGFuZC9vciBzZXR0ZXIKLQkgKiBvZiB0aGlzIHByb3BlcnR5IGlzIGRlY2xhcmVkLCBvciBudWxsIGlmIG5vbmUuCi0JICogQHJldHVybiBUaGUgdHlwZSB3aXRoaW4gd2hpY2ggdGhlIGdldHRlciBhbmQvb3Igc2V0dGVyCi0JICogb2YgdGhpcyBwcm9wZXJ0eSBpcyBkZWNsYXJlZC4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0RGVjbGFyaW5nVHlwZSAoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YVdlYlNlcnZpY2VSdWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MTJjOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YVdlYlNlcnZpY2VSdWxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIEEgSmF2YSBXZWIgc2VydmljZSBjb25mb3JtYW5jZSBSdWxlIHRlc3RzIHNvbWUgY29sbGVjdGlvbgotICogb2YgSmF2YSByZXNvdXJjZXMgdGhhdCBpbXBsZW1lbnQsIG9yIGFyZSBtZWFudCB0byBpbXBsZW1lbnQsCi0gKiBhIFdlYiBzZXJ2aWNlIGFnYWluc3QgYSBzaW5nbGUsIGNvbmNpc2UgcmVxdWlyZW1lbnQgYXMgaXMKLSAqIHR5cGljYWxseSBkZWZpbmVkIGJ5IGEgc3BlY2lmaWNhdGlvbiAoZWcuIEpBWC1SUEMsIEpTUiAxMDkpCi0gKiBvciBhIHJ1bnRpbWUgKGVnLiBBcGFjaGUgQXhpcykuCi0gKiA8cD4KLSAqIEV2ZXJ5IHJ1bGUgbXVzdCBoYXZlIGEgbmFtZXNwYWNlIGFuZCBhIHVuaXF1ZSBJRCB1bmRlciB0aGF0Ci0gKiB0aGF0IG5hbWVzcGFjZS4gRXZlcnkgcnVsZSBtYXkgaGF2ZSBhIHNob3J0IG5hbWUgYW5kIGEgbG9uZwotICogZGVzY3JpcHRpb24sIGJvdGggb2Ygd2hpY2ggYXJlIHJlY29tbWVuZGVkIGJ1dCBvcHRpb25hbC4KLSAqIDxwPgotICogRXZlcnkgcnVsZSBmb2xsb3dzIGEgbGlmZWN5Y2xlIG9mIGluaXRpYWxpemF0aW9uLCBhbmFseXNpcwotICogYW5kIGNvbXBsZXRpb24uIEEgSmF2YSBXZWIgc2VydmljZSBydWxlIGVuZ2luZSB3aWxsIGRyaXZlCi0gKiB0aGUgPGNvZGU+aW5pdCgpPC9jb2RlPiBtZXRob2QgdG8gaW5pdGlhbGl6ZSB0aGUgcnVsZSwgdGhlbgotICogZHJpdmUgdGhlIHZhcmlvdXMgPGNvZGU+dmlzaXQuLi4oKTwvY29kZT4gbWV0aG9kcyBhcyBpdAotICogbmF2aWdhdGVzIHNvbWUgY29sbGVjdGlvbiBvZiBKRFQgcmVzb3VyY2VzLCB0aGVuIGRyaXZlIHRoZQotICogPGNvZGU+Z2V0UmVzdWx0cygpPC9jb2RlPiBtZXRob2QgdG8gaW5kaWNhdGUgYW5hbHlzaXMgaXMgZG9uZQotICogYW5kIHJldHJpZXZlIGEgc3RhdHVzIG9iamVjdCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJSmF2YVdlYlNlcnZpY2VSdWxlCi17Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJ1bGUKLQkgKiB3aXRoaW4gdGhlIG5hbWVzcGFjZSB0byB3aGljaCB0aGUgcnVsZSBiZWxvbmdzLgotCSAqIEByZXR1cm4gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBydWxlLgotCSAqIFZhbGlkIHJ1bGUgaWRlbnRpZmllcnMgbXVzdCBub3QgYmUgbmVnYXRpdmUuCi0JICovCi0JcHVibGljIGludCBnZXRJZCAoKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBuYW1lc3BhY2UgdG8gd2hpY2ggdGhpcyBydWxlIGJlbG9uZ3MuCi0JICogQHJldHVybiBUaGUgbmFtZXNwYWNlIHRvIHdoaWNoIHRoaXMgcnVsZSBiZWxvbmdzLgotCSAqIE5ldmVyIHJldHVybnMgbnVsbC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHRyYW5zbGF0YWJsZSBzaG9ydCBuYW1lIG9mIHRoaXMgcnVsZS4gIAotCSAqIEByZXR1cm4gVGhlIHRyYW5zbGF0YWJsZSBzaG9ydCBuYW1lIG9mIHRoaXMgcnVsZSwKLQkgKiBvciBudWxsIGlmIHRoZSBydWxlIGhhcyBubyBuYW1lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHRyYW5zbGF0YWJsZSBkZXNjcmlwdGlvbiBvZiB0aGlzIHJ1bGUuCi0JICogQHJldHVybiBUaGUgdHJhbnNsYXRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoaXMgcnVsZSwKLQkgKiBvciBudWxsIGlmIHRoZSBydWxlIGhhcyBubyBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSB0byBnaXZlIHRoaXMgcnVsZSBhIGNoYW5jZQotCSAqIHRvIGluaXRpYWxpemUgaXRzZWxmIHByaW9yIHRvIHZpc2l0aW5nIEpEVCBvYmplY3RzLgotCSAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSBpbml0aWFsaXppbmcgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSApOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSB3aGVuIGl0IGRlY2lkZXMgdG8gdmlzaXQKLQkgKiBhIEphdmEgY2xhc3MgKGllLiBwcmltaXRpdmUgdHlwZXMgYXJlIGV4Y2x1ZGVkKS4KLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIGNsYXNzIHRvIHZpc2l0LgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgdHJhaWwgb2Ygb2JqZWN0cyBiYWNrIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgd2hlbiBpdCBkZWNpZGVzIHRvIHZpc2l0Ci0JICogYSBKYXZhIGNsYXNzIGZvdW5kIG9uIHRoZSB0aHJvd3MgY2xhdXNlIG9mIGEgbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgZXhjZXB0aW9uIGNsYXNzIHRvIHZpc2l0LgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgdHJhaWwgb2Ygb2JqZWN0cyBiYWNrIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RXhjZXB0aW9uICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIHdoZW4gaXQgZGVjaWRlcyB0byB2aXNpdAotCSAqIGEgZmllbGQgYmVsb25naW5nIHRvIGEgY2xhc3MuCi0JICogQHBhcmFtIGpkdEZpZWxkIFRoZSBmaWVsZCB0byB2aXNpdC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHRyYWlsIG9mIG9iamVjdHMgYmFjayB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEZpZWxkICggSUZpZWxkIGpkdEZpZWxkLCBTdGFjayBwZWFudXRUcmFpbCApOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSB3aGVuIGl0IGRlY2lkZXMgdG8gdmlzaXQKLQkgKiBhIEphdmEgQmVhbiBwcm9wZXJ0eSAoaWUuIHJlcHJlc2VudGVkIGJ5IGEgImdldCIgYW5kL29yCi0JICogInNldCIgbWV0aG9kKSBiZWxvbmluZyB0byBhIGNsYXNzLgotCSAqIEBwYXJhbSBiZWFuUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIHZpc2l0LgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgdHJhaWwgb2Ygb2JqZWN0cyBiYWNrIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0UHJvcGVydHkgKCBJSmF2YUJlYW5Qcm9wZXJ0eSBiZWFuUHJvcGVydHksIFN0YWNrIHBlYW51dFRyYWlsICk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIHdoZW4gaXQgZGVjaWRlcyB0byB2aXNpdCBhIG1ldGhvZC4KLQkgKiBAcGFyYW0gamR0TWV0aG9kIFRoZSBtZXRob2QgdG8gdmlzaXQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSB0cmFpbCBvZiBvYmplY3RzIGJhY2sgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRNZXRob2QgKCBJTWV0aG9kIGpkdE1ldGhvZCwgU3RhY2sgcGVhbnV0VHJhaWwgKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgYWZ0ZXIgYWxsIEpEVCBvYmplY3RzIGhhdmUKLQkgKiBiZWVuIHZpc2l0ZWQgc28gdGhhdCB0aGUgcnVsZSBjYW4gcmV0dXJuIGEgc3RhdHVzCi0JICogb2JqZWN0ICh1c3VhbGx5IGEgbXVsdGktc3RhdHVzKSB3aXRoIGEgc3VtbWFyeSBvZgotCSAqIGFueSB2aW9sYXRpb25zIGJ5IEpEVCBvYmplY3RzIGRldGVjdGVkIGJ5IHRoaXMgcnVsZS4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHRzIG9mIHRoZSBydWxlJ3MgYW5hbHlzaXMuCi0JICovCi0JcHVibGljIElTdGF0dXMgZ2V0UmVzdWx0cyAoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZWYwYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogVGhpcyBpcyBhbiBlbmdpbmUgdGhhdCB3YWxrcyBhIEpEVCBtb2RlbCBhbmQgcnVucyBydWxlcy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lCi17Ci0JLyoqCi0JICogQW5hbHl6ZXMgdGhlIGdpdmVuIGNsYXNzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBnaXZlbiAKLQkgKiBwcm9qZWN0IGZvciBjb21wbGlhbmNlIHRvIGEgc2V0IG9mIEpBWC1SUEMgcnVsZXMuCi0JICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgY29udGV4dCBvZiB0aGUgYW5hbHlzaXMuCi0JICogQHBhcmFtIHJvb3RDbGFzcyBUaGUgSVR5cGUgb2YgdGhlIGNsYXNzIHRvIGFuYWx5emUuCi0JICogQHBhcmFtIHJ1bGVzIFRoZSBydWxlcyB0byB1c2UgZm9yIHRoZSBhbmFseXNpcy4KLQkgKiBAcmV0dXJuIEFuIElTdGF0dXMgc3VtbWFyaXppbmcgdGhlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFuYWx5emUgKCBJUHJvamVjdCBwcm9qZWN0LCBJVHlwZSByb290Q2xhc3MsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVFJlc29sdmVyIGluIHVzZSBieSB0aGlzIGFuYWx5emVyLgotCSAqIFRoZSBKRFRSZXNvbHZlciBpcyBndWFyYW50ZWVkIG5vdCB0byBiZSBudWxsIG9ubHkKLQkgKiBhZnRlciB0aGUgYW5hbHl6ZSBtZXRob2QgaGFzIGJlZW4gaW52b2tlZCBhbmQgYmVmb3JlCi0JICogdGhlIGZpcnN0IHJ1bGUgaXMgdmlzaXRlZC4gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQKLQkgKiBmb3IgdXNlIGJ5IGltcGxlbWVudGF0aW9ucyBvZiBJSmF2YVdlYlNlcnZpY2VSdWxlLgotCSAqIEByZXR1cm4gVGhlIEpEVFJlc29sdmVyIGluIHVzZSBieSB0aGlzIGFuYWx5emVyLgotCSAqLwotCXB1YmxpYyBKRFRSZXNvbHZlciBnZXRKRFRSZXNvbHZlciAoKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwcm9ncmVzcyBtb25pdG9yIGluIHVzZSBieSB0aGlzIGFuYWx5emVyLAotCSAqIG9yIG51bGwgaWYgbm8gcHJvZ3Jlc3MgbW9uaXRvciBpcyBpbiB1c2UuCi0JICogVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBpbXBsZW1lbnRhdGlvbnMKLQkgKiBvZiBJSmF2YVdlYlNlcnZpY2VSdWxlLgotCSAqIEByZXR1cm4gVGhlIHByb2dyZXNzIG1vbml0b3IgaW4gdXNlIGJ5IHRoaXMgYW5hbHl6ZXIsCi0JICogb3IgbnVsbCBmb3Igbm9uZS4KLQkgKi8KLQlwdWJsaWMgSVByb2dyZXNzTW9uaXRvciBnZXRQcm9ncmVzc01vbml0b3IgKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pBWFJQQ1dlYlNlcnZpY2VBbmFseXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1ZWZiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pBWFJQQ1dlYlNlcnZpY2VBbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqIDIwMDYwNjA3ICAgMTQ1NjA0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ29tcGlsYXRpb25Vbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlcy5KQVhSUENSdWxlU2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgYW5hbHl6aW5nCi0gKiBjb21wbGlhbmNlIG9mIEphdmEgc2VydmljZSBjbGFzc2VzIGFuZCB2YWx1ZSB0eXBlcyB0bwotICogdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24uIFR5cGljYWwgdXNhZ2Ugb2YgdGhpcwotICogY2xhc3M6Ci0gKiA8Y29kZT4KLSAqIElUeXBlIHR5cGUgPSBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuYXNUeXBlKG15SmF2YUZpbGVSZXNvdXJjZSk7Ci0gKiBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgPSBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuZ2V0UnVsZVNldCgpOwotICogSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmdldFJ1bGVFbmdpbmUoKS5hbmFseXplKHR5cGUscnVsZXMsbXlQcm9ncmVzc01vbml0b3IpOwotICogPC9jb2RlPiAKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplcgotewotCXByaXZhdGUgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVTZXRfOwotCQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgSkFYLVJQQyBXZWIgc2VydmljZSBhbmFseXplciwKLQkgKiBhIGNvbnZlbmllbmNlIGNsYXNzIHdyYXBwZWQgYXJvdW5kIGEKLQkgKiBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuCi0JICovCi0JcHVibGljIEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplciAoKQotCXsKLQkJcnVsZVNldF8gPSBKQVhSUENSdWxlU2V0RmFjdG9yeS5uZXdSdWxlU2V0KCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2V0IG9mIHJ1bGVzIGluIHVzZSwgdGhlIGNvbnRlbnRzIG9mCi0JICogd2hpY2ggY2FuIGJlIG1hbmlwdWxhdGVkIGFuZCB3aWxsIGJlIHJlc3BlY3RlZCBieQotCSAqIHRoaXMgYW5hbHl6ZXIuIEluIG90aGVyIHdvcmRzLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEKLQkgKiByZWZlcmVuY2UgdG8sIG5vdCBhIGNvcHkgb2YsIHRoZSBzZXQgb2YgcnVsZXMgaW4gdXNlLgotCSAqIEByZXR1cm4gVGhlIHNldCBvZiBydWxlcyBpbiB1c2UgYnkgdGhlIGFuYWx5emVyLgotCSAqLwotCXB1YmxpYyBKYXZhV2ViU2VydmljZVJ1bGVTZXQgZ2V0UnVsZVNldCAoKQotCXsKLQkJcmV0dXJuIHJ1bGVTZXRfOwotCX0KLQkKLQkvKioKLQkgKiBBbmFseXplcyB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbgotCSAqIEpEVCB0eXBlIGZvciBjb21wbGlhbmNlIHRvIHRoZSBKQVgtUlBDIGZvciBjb21wbGlhbmNlIHRvCi0JICogdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi4KLQkgKiBQcm9ncmVzcyBtb25pdG9yaW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBnaXZlbiBtb25pdG9yLiAKLQkgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCBjb250ZXh0IGluIHdoaWNoIHRoZSBhbmFseXNpcwotCSAqIHNob3VsZCB0YWtlIHBsYWNlLgotCSAqIEBwYXJhbSByb290Q2xhc3MgVGhlIEphdmEgc2VydmljZSBjbGFzcyB0byBhbmFseXplLgotCSAqIEBwYXJhbSBtb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIHVzZSwKLQkgKiBvciBudWxsIGlmIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIHN0YXR1cyBvYmplY3Qgd2hvc2Ugc2V2ZXJpdHksIG1lc3NhZ2UgYW5kCi0JICogY2hpbGQgc3RhdHVzIG9iamVjdHMsIGlmIGFueSwgZGVzY3JpYmUgYW55IEpBWC1SUEMKLQkgKiBydWxlcyB0aGF0IG1heSBiZSBjb21wcm9taXNlZCBieSB0aGUgc2VydmljZSBjbGFzcy4KLQkgKiBOZXZlciByZXR1cm5zIG51bGwuCi0JICovCi0JcHVibGljIElTdGF0dXMgYW5hbHl6ZSAoIElQcm9qZWN0IHByb2plY3QsIElUeXBlIHJvb3RDbGFzcywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCUlKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lID0gbmV3IEpBWFJQQ1dlYlNlcnZpY2VSdWxlRW5naW5lKG1vbml0b3IpOwotCQlyZXR1cm4gZW5naW5lLmFuYWx5emUocHJvamVjdCxyb290Q2xhc3MscnVsZVNldF8pOwotCX0KLQotCS8qKgotCSAqIEFuYWx5emVzIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuCi0JICogSkRUIHR5cGUgZm9yIGNvbXBsaWFuY2UgdG8gdGhlIEpBWC1SUEMgZm9yIGNvbXBsaWFuY2UgdG8KLQkgKiB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLgotCSAqIFByb2dyZXNzIG1vbml0b3JpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGdpdmVuIG1vbml0b3IuIAotCSAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IGNvbnRleHQgaW4gd2hpY2ggdGhlIGFuYWx5c2lzCi0JICogc2hvdWxkIHRha2UgcGxhY2UuCi0JICogQHBhcmFtIHJvb3RDbGFzcyBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlCi0JICogSmF2YSBzZXJ2aWNlIGNsYXNzIHRvIGFuYWx5emUuCi0JICogQHBhcmFtIG1vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgdG8gdXNlLAotCSAqIG9yIG51bGwgaWYgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgc3RhdHVzIG9iamVjdCB3aG9zZSBzZXZlcml0eSwgbWVzc2FnZSBhbmQKLQkgKiBjaGlsZCBzdGF0dXMgb2JqZWN0cywgaWYgYW55LCBkZXNjcmliZSBhbnkgSkFYLVJQQwotCSAqIHJ1bGVzIHRoYXQgbWF5IGJlIGNvbXByb21pc2VkIGJ5IHRoZSBzZXJ2aWNlIGNsYXNzLgotCSAqIE5ldmVyIHJldHVybnMgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhbmFseXplICggSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHJvb3RDbGFzcywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlJVHlwZSByb290VHlwZSA9IGFzVHlwZShyb290Q2xhc3MscHJvamVjdCk7Ci0JCQlpZiAocm9vdFR5cGUgPT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1VOUkVTT0xWRURfQ0xBU1Mscm9vdENsYXNzLHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKTsKLQkJCX0KLQkJCXJldHVybiBhbmFseXplKHByb2plY3Qscm9vdFR5cGUsbW9uaXRvcik7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBBbiBleGNlcHRpb24gbWF5IGJlIHRocm93biBmcm9tIHRoZSBjYWxsIHRvIGFzVHlwZSguLi4pLAotCQkJLy8gbm90IGZyb20gdGhlIGNhbGwgdG8gYW5hbHl6ZSguLi4pLiBFeGNlcHRpb25zIHdpdGhpbiB0aGUKLQkJCS8vIGFuYWx5emUoLi4uKSBtZXRob2QgYXJlIGNhcHR1cmVkIGluIHRoZSByZXR1cm5lZCBJU3RhdHVzLgotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLCJJbnRlcm5hbCBlcnJvciIsZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBbmFseXplcyB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbgotCSAqICIuamF2YSIgY29tcGlsYXRpb24gdW5pdCBvciAiLmNsYXNzIiBmaWxlIGZvciBjb21wbGlhbmNlCi0JICogdG8gdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi4KLQkgKiBQcm9ncmVzcyBtb25pdG9yaW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBnaXZlbiBtb25pdG9yLiAKLQkgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCBjb250ZXh0IGluIHdoaWNoIHRoZSBhbmFseXNpcwotCSAqIHNob3VsZCB0YWtlIHBsYWNlLgotCSAqIEBwYXJhbSByb290Q2xhc3MgVGhlIEphdmEgc2VydmljZSBjbGFzcyB0byBhbmFseXplLgotCSAqIEBwYXJhbSBtb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIHVzZSwKLQkgKiBvciBudWxsIGlmIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIHN0YXR1cyBvYmplY3Qgd2hvc2Ugc2V2ZXJpdHksIG1lc3NhZ2UgYW5kCi0JICogY2hpbGQgc3RhdHVzIG9iamVjdHMsIGlmIGFueSwgZGVzY3JpYmUgYW55IEpBWC1SUEMKLQkgKiBydWxlcyB0aGF0IG1heSBiZSBjb21wcm9taXNlZCBieSB0aGUgc2VydmljZSBjbGFzcy4KLQkgKiBOZXZlciByZXR1cm5zIG51bGwuCi0JICovCi0JcHVibGljIElTdGF0dXMgYW5hbHl6ZSAoIElQcm9qZWN0IHByb2plY3QsIElGaWxlIHJvb3RDbGFzcywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlJVHlwZSByb290VHlwZSA9IGFzVHlwZShyb290Q2xhc3MpOwotCQkJaWYgKHJvb3RUeXBlID09IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9VTlJFU09MVkVEX0NMQVNTLHJvb3RDbGFzcy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkscHJvamVjdC5nZXROYW1lKCkpOwotCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpOwotCQkJfQotCQkJcmV0dXJuIGFuYWx5emUocHJvamVjdCxyb290VHlwZSxtb25pdG9yKTsKLQkJfQotCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIEFuIGV4Y2VwdGlvbiBtYXkgYmUgdGhyb3duIGZyb20gdGhlIGNhbGwgdG8gYXNUeXBlKC4uLiksCi0JCQkvLyBub3QgZnJvbSB0aGUgY2FsbCB0byBhbmFseXplKC4uLikuIEV4Y2VwdGlvbnMgd2l0aGluIHRoZQotCQkJLy8gYW5hbHl6ZSguLi4pIG1ldGhvZCBhcmUgY2FwdHVyZWQgaW4gdGhlIHJldHVybmVkIElTdGF0dXMuCi0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIkludGVybmFsIGVycm9yIixlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmEgdHlwZSByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gZmlsZSwKLQkgKiBvciBudWxsIGlmIG5vIHN1Y2ggdHlwZSBjYW4gYmUgY2xlYXJseSBkZXRlcm1pbmVkLgotCSAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHdob3NlIHR5cGUgdG8gaW5mZXIsIHVzdWFsbHkgYQotCSAqICIuamF2YSIgb3IgIi5jbGFzcyIgZmlsZS4gRm9yICIuamF2YSIgZmlsZXMsIHRoaXMKLQkgKiBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHByaW1hcnkgdHlwZS4KLQkgKiBAcmV0dXJuIFRoZSBpbmZlcnJlZCBKRFQgSmF2YSB0eXBlLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBnaXZlbiBmaWxlIGNvdWxkIG5vdAotCSAqIG1hcHBlZCB0byBhIEpEVCBJVHlwZS4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJVHlwZSBhc1R5cGUgKCBTdHJpbmcgcW5hbWUsIElQcm9qZWN0IHByb2plY3QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlUeXBlIHR5cGUgPSBudWxsOwotCQlJSmF2YUVsZW1lbnQgamF2YUVsZW1lbnQgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCWlmIChqYXZhRWxlbWVudCBpbnN0YW5jZW9mIElKYXZhUHJvamVjdCkKLQkJewotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gKElKYXZhUHJvamVjdClqYXZhRWxlbWVudDsKLQkJCXR5cGUgPSBqYXZhUHJvamVjdC5maW5kVHlwZShxbmFtZSk7Ci0JCX0KLQkJcmV0dXJuIHR5cGU7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmEgdHlwZSByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gZmlsZSwKLQkgKiBvciBudWxsIGlmIG5vIHN1Y2ggdHlwZSBjYW4gYmUgY2xlYXJseSBkZXRlcm1pbmVkLgotCSAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHdob3NlIHR5cGUgdG8gaW5mZXIsIHVzdWFsbHkgYQotCSAqICIuamF2YSIgb3IgIi5jbGFzcyIgZmlsZS4gRm9yICIuamF2YSIgZmlsZXMsIHRoaXMKLQkgKiBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHByaW1hcnkgdHlwZS4KLQkgKiBAcmV0dXJuIFRoZSBpbmZlcnJlZCBKRFQgSmF2YSB0eXBlLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBnaXZlbiBmaWxlIGNvdWxkIG5vdAotCSAqIG1hcHBlZCB0byBhIEpEVCBJVHlwZS4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJVHlwZSBhc1R5cGUgKCBJRmlsZSBmaWxlICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJVHlwZSB0eXBlID0gbnVsbDsKLQkJSUphdmFFbGVtZW50IGphdmFFbGVtZW50ID0gSmF2YUNvcmUuY3JlYXRlKGZpbGUpOwotCQlpZiAoamF2YUVsZW1lbnQgaW5zdGFuY2VvZiBJQ29tcGlsYXRpb25Vbml0KQotCQl7Ci0JCQlJQ29tcGlsYXRpb25Vbml0IGNvbXBpbGF0aW9uVW5pdCA9IChJQ29tcGlsYXRpb25Vbml0KWphdmFFbGVtZW50OwotCQkJdHlwZSA9IGNvbXBpbGF0aW9uVW5pdC5maW5kUHJpbWFyeVR5cGUoKTsKLQkJfQotCQllbHNlIGlmIChqYXZhRWxlbWVudCBpbnN0YW5jZW9mIElDbGFzc0ZpbGUpCi0JCXsKLQkJCUlDbGFzc0ZpbGUgY2xhc3NGaWxlID0gKElDbGFzc0ZpbGUpamF2YUVsZW1lbnQ7Ci0JCQl0eXBlID0gY2xhc3NGaWxlLmdldFR5cGUoKTsKLQkJfQotCQlyZXR1cm4gdHlwZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pBWFJQQ1dlYlNlcnZpY2VSdWxlRW5naW5lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pBWFJQQ1dlYlNlcnZpY2VSdWxlRW5naW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNTk3ZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDk0MTEgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogVGhpcyBlbmdpbmUgbmF2aWdhdGVkIEpEVCBjbGFzc2VzIGFjY29yZGluZyB0byBhIEpBWC1SUEMKLSAqIGludGVycHJldGF0aW9uLiBUaGUgcm9vdCBjbGFzcyBpcyBjb25zaWRlcmVkIHRvIGJlIGEKLSAqIGNhbmRpZGF0ZSBKQVgtUlBDIHNlcnZpY2UgY2xhc3MsIGFuZCBhbnkgbm9uLXN0YW5kYXJkCi0gKiBvciBub24tcHJpbWl0aXZlIHR5cGVzIHVzZWQgYnkgdGhlIG1ldGhvZHMgb2YgdGhlIHNlcnZpY2UKLSAqIGNsYXNzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGNhbmRpZGF0ZXMgZm9yIEpBWC1SUEMgdmFsdWUKLSAqIHR5cGUgY2xhc3Nlcy4gCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZSBpbXBsZW1lbnRzIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUKLXsKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IEpBWC1SUEMgYW5hbHlzaXMgZW5naW5lIHdpdGggdGhlIGdpdmVuCi0JICogcHJvZ3Jlc3MgbW9uaXRvci4KLQkgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUKLQkgKiBlbmdpbmUgdG8gdXNlLCBvciBudWxsIGlmIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICovCi0JcHVibGljIEpBWFJQQ1dlYlNlcnZpY2VSdWxlRW5naW5lICggSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgKQotCXsKLQkJcHJvZ3Jlc3NNb25pdG9yXyA9IHByb2dyZXNzTW9uaXRvcjsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUjYW5hbHl6ZShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCwgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGVTZXQsIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yKQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFuYWx5emUgKCBJUHJvamVjdCBwcm9qZWN0LCBJVHlwZSByb290Q2xhc3MsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JewotCQl2aXNpdGVkXyA9IG5ldyBIYXNoU2V0KCk7Ci0JCXBlYW51dFRyYWlsXyA9IG5ldyBTdGFjaygpOwkJCi0JCXJlc29sdmVyXyA9IG5ldyBKRFRSZXNvbHZlcihwcm9qZWN0LHByb2dyZXNzTW9uaXRvcl8pOwotCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCXJ1bGVzLmluaXQodGhpcyk7Ci0JCXRyeQotCQl7Ci0JCQlhbmFseXplU2VydmljZUNsYXNzKHJvb3RDbGFzcyxydWxlcyk7Ci0JCQlTdHJpbmcgaW5DYXNlT2ZGYWlsdXJlTWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX05PVF9DT01QTElBTlQscm9vdENsYXNzLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKTsKLQkJCXN0YXR1cyA9IHJ1bGVzLmdldFJlc3VsdHMoaW5DYXNlT2ZGYWlsdXJlTWVzc2FnZSk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiSW50ZXJuYWwgRXJyb3IiLGUpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhbmFseXplU2VydmljZUNsYXNzICggSVR5cGUgdHlwZSwgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlydWxlcy52aXNpdENsYXNzKHR5cGUscGVhbnV0VHJhaWxfKTsKLQkJdmlzaXRlZF8uYWRkKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpOwotCQlwdXNoKHR5cGUpOwotCQl0cnkKLQkJewotCQkJSVR5cGVbXSBzdXBlckNsYXNzZXMgPSByZXNvbHZlcl8uZ2V0U3VwZXJDbGFzc2VzKHR5cGUpOwotCQkJSU1ldGhvZFtdIG1ldGhvZHMgPSByZXNvbHZlcl8uZ2V0UHVibGljTWV0aG9kcyh0eXBlLHN1cGVyQ2xhc3Nlcyk7Ci0JCQlmb3IgKGludCBtPTA7IG08bWV0aG9kcy5sZW5ndGg7IG0rKykKLQkJCXsKLQkJCQlhbmFseXplTWV0aG9kKG1ldGhvZHNbbV0scnVsZXMpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJcG9wKCk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVNZXRob2QgKCBJTWV0aG9kIG1ldGhvZCwgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlydWxlcy52aXNpdE1ldGhvZChtZXRob2QscGVhbnV0VHJhaWxfKTsKLQkJcHVzaChtZXRob2QpOwotCQl0cnkKLQkJewotCQkJSVR5cGUgcmV0dXJuVHlwZSA9IHJlc29sdmVyXy5nZXRSZXR1cm5UeXBlKG1ldGhvZCk7Ci0JCQlhbmFseXplRGF0YVR5cGUocmV0dXJuVHlwZSxydWxlcyk7Ci0JCQlJVHlwZVtdIHBhcmFtZXRlclR5cGVzID0gcmVzb2x2ZXJfLmdldFBhcmFtZXRlclR5cGVzKG1ldGhvZCk7Ci0JCQlmb3IgKGludCBwPTA7IHA8cGFyYW1ldGVyVHlwZXMubGVuZ3RoOyBwKyspCi0JCQl7Ci0JCQkJYW5hbHl6ZURhdGFUeXBlKHBhcmFtZXRlclR5cGVzW3BdLHJ1bGVzKTsKLQkJCX0KLQkJCUlUeXBlW10gZXhjZXB0aW9uVHlwZXMgPSByZXNvbHZlcl8uZ2V0RXhjZXB0aW9uVHlwZXMobWV0aG9kKTsKLQkJCWZvciAoaW50IGU9MDsgZTxleGNlcHRpb25UeXBlcy5sZW5ndGg7IGUrKykKLQkJCXsKLQkJCQlhbmFseXplRXhjZXB0aW9uVHlwZShleGNlcHRpb25UeXBlc1tlXSxydWxlcyk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlwb3AoKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYW5hbHl6ZURhdGFUeXBlICggSVR5cGUgdHlwZSwgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlpZiAodHlwZSAhPSBudWxsICYmICFyZXNvbHZlcl8uaXNTdGFuZGFyZFR5cGUodHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSkgJiYgIXZpc2l0ZWRfLmNvbnRhaW5zKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpKQotCQl7Ci0JCQlydWxlcy52aXNpdENsYXNzKHR5cGUscGVhbnV0VHJhaWxfKTsJCQkKLQkJCXZpc2l0ZWRfLmFkZCh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKTsKLQkJCXB1c2godHlwZSk7Ci0JCQl0cnkKLQkJCXsJCi0JCQkJSVR5cGVbXSBzdXBlckNsYXNzZXMgPSByZXNvbHZlcl8uZ2V0U3VwZXJDbGFzc2VzKHR5cGUpOwotCQkJCUlGaWVsZFtdIGZpZWxkcyA9IHJlc29sdmVyXy5nZXRQdWJsaWNGaWVsZHModHlwZSxzdXBlckNsYXNzZXMpOwotCQkJCWZvciAoaW50IGY9MDsgZjxmaWVsZHMubGVuZ3RoOyBmKyspCi0JCQkJewotCQkJCQlhbmFseXplRmllbGQoZmllbGRzW2ZdLHJ1bGVzKTsKLQkJCQl9Ci0JCQkJSUphdmFCZWFuUHJvcGVydHlbXSBwcm9wZXJ0aWVzID0gcmVzb2x2ZXJfLmdldFB1YmxpY1Byb3BlcnRpZXModHlwZSxzdXBlckNsYXNzZXMpOwotCQkJCWZvciAoaW50IHA9MDsgcDxwcm9wZXJ0aWVzLmxlbmd0aDsgcCsrKQotCQkJCXsKLQkJCQkJYW5hbHl6ZVByb3BlcnR5KHByb3BlcnRpZXNbcF0scnVsZXMpOwotCQkJCX0KLQkJCX0KLQkJCWZpbmFsbHkKLQkJCXsKLQkJCQlwb3AoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYW5hbHl6ZUZpZWxkICggSUZpZWxkIGZpZWxkLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCWlmIChmaWVsZCAhPSBudWxsKQotCQl7Ci0JCQlydWxlcy52aXNpdEZpZWxkKGZpZWxkLHBlYW51dFRyYWlsXyk7Ci0JCQlwdXNoKGZpZWxkKTsKLQkJCXRyeQotCQkJewotCQkJCS8vVE9ETzogR2V0IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmaWVsZCB0eXBlCi0JCQkJLy9hbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gSVR5cGUKLQkJCQkvL2ZvciBpdCBhbmQgYW5hbHl6ZSBpdC4KLQkJCQlJVHlwZSB0eXBlID0gcmVzb2x2ZXJfLmdldEZpZWxkVHlwZShmaWVsZCk7Ci0JCQkJYW5hbHl6ZURhdGFUeXBlKHR5cGUscnVsZXMpOwotCQkJfQotCQkJZmluYWxseQotCQkJewotCQkJCXBvcCgpOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhbmFseXplUHJvcGVydHkgKCBJSmF2YUJlYW5Qcm9wZXJ0eSBwcm9wZXJ0eSwgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlpZiAocHJvcGVydHkgIT0gbnVsbCkKLQkJewotCQkJcnVsZXMudmlzaXRQcm9wZXJ0eShwcm9wZXJ0eSxwZWFudXRUcmFpbF8pOwotCQkJcHVzaChwcm9wZXJ0eSk7Ci0JCQl0cnkKLQkJCXsKLQkJCQlJVHlwZSB0eXBlID0gcmVzb2x2ZXJfLmdldFByb3BlcnR5VHlwZShwcm9wZXJ0eSk7Ci0JCQkJYW5hbHl6ZURhdGFUeXBlKHR5cGUscnVsZXMpOwotCQkJfQotCQkJZmluYWxseQotCQkJewotCQkJCXBvcCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVFeGNlcHRpb25UeXBlICggSVR5cGUgdHlwZSwgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlpZiAodHlwZSAhPSBudWxsICYmICFyZXNvbHZlcl8uaXNTdGFuZGFyZFR5cGUodHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSkgJiYgIXZpc2l0ZWRfLmNvbnRhaW5zKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpKQotCQl7Ci0JCQlydWxlcy52aXNpdEV4Y2VwdGlvbih0eXBlLHBlYW51dFRyYWlsXyk7Ci0JCQl2aXNpdGVkXy5hZGQodHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0JCQlwdXNoKHR5cGUpOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJLy8gV2UgdHJ1c3QgamF2YS5sYW5nLkV4Y2VwdGlvbi9UaHJvd2FibGUgYXMgc3VwZXJjbGFzc2VzCi0JCQkJLy8gZm9yIHNlcnZpY2Ugc3BlY2lmaWMgZXhjZXB0aW9uIGNsYXNzZXMsIHRoZXJlZm9yZSB3ZSBkbwotCQkJCS8vIG5vdCB0cnkgdG8gYW5hbHl6ZSB0aGVpciBwcm9wZXJ0aWVzIChzb21lIG9mIHdoaWNoIHdvdWxkCi0JCQkJLy8gb3RoZXJ3aXNlIHZpb2xhdGUgSkFYLVJQQydzIHJ1bGVzIGFueXdheXMpLgotCQkJCUlUeXBlW10gc3VwZXJDbGFzc2VzID0gcmVzb2x2ZXJfLmdldFN1cGVyQ2xhc3Nlcyh0eXBlLCJqYXZhLmxhbmcuRXhjZXB0aW9uIik7Ci0JCQkJSUphdmFCZWFuUHJvcGVydHlbXSBwcm9wZXJ0aWVzID0gcmVzb2x2ZXJfLmdldFB1YmxpY1Byb3BlcnRpZXModHlwZSxzdXBlckNsYXNzZXMpOwotCQkJCWZvciAoaW50IHA9MDsgcDxwcm9wZXJ0aWVzLmxlbmd0aDsgcCsrKQotCQkJCXsKLQkJCQkJYW5hbHl6ZVByb3BlcnR5KHByb3BlcnRpZXNbcF0scnVsZXMpOwotCQkJCX0KLQkJCX0KLQkJCWZpbmFsbHkKLQkJCXsKLQkJCQlwb3AoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lI2dldEpEVFJlc29sdmVyKCkKLQkgKi8KLQlwdWJsaWMgSkRUUmVzb2x2ZXIgZ2V0SkRUUmVzb2x2ZXIgKCkKLQl7Ci0JCXJldHVybiByZXNvbHZlcl87Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lI2dldFByb2dyZXNzTW9uaXRvcigpCi0JICovCi0JcHVibGljIElQcm9ncmVzc01vbml0b3IgZ2V0UHJvZ3Jlc3NNb25pdG9yICgpCi0JewotCQlyZXR1cm4gcHJvZ3Jlc3NNb25pdG9yXzsKLQl9Ci0JCi0JLyoKLQkgKiBQdXNoZXMgYSBwZWFudXQgb250byB0aGUgcGVhbnV0IHRyYWlsLgotCSAqLwotCXByaXZhdGUgdm9pZCBwdXNoICggT2JqZWN0IHBlYW51dCApCi0JewotCQlwZWFudXRUcmFpbF8ucHVzaChwZWFudXQpOwotCX0KLQkKLQkvKgotCSAqIFBvcHMgYSBwZWFudXQgb2ZmIHRoZSBwZWFudXQgdHJhaWwuIAotCSAqLwotCXByaXZhdGUgdm9pZCBwb3AgKCkKLQl7Ci0JCXBlYW51dFRyYWlsXy5wb3AoKTsKLQl9Ci0JCi0JLyoKLQkgKiBUaGUgSkRUUmVzb2x2ZXIgdXNlZCBieSB0aGlzIGFuYWx5emVyLgotCSAqLwotCXByaXZhdGUgSkRUUmVzb2x2ZXIgcmVzb2x2ZXJfOwotCQotCS8qCi0JICogVGhlIHByb2dyZXNzIG1vbml0b3IgdXNlZCBieSB0aGlzIGFuYWx5emVyLiAKLQkgKi8KLQlwcml2YXRlIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yXzsKLQkKLQkvKgotCSAqIFRoaXMgc2V0IGtlZXBzIHRyYWNrIG9mIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZXMgb2YKLQkgKiBjbGFzc2VzIHdlIGhhdmUgdmlzaXRlZCBzbyB0aGF0IHdlIGRvbid0IHZpc2l0IHRoZSBzYW1lCi0JICogc2VydmljZSBjbGFzcywgdmFsdWUgdHlwZSBvciBleGNlcHRpb24gY2xhc3MgbW9yZSB0aGFuIG9uY2UuCi0JICovCi0JcHJpdmF0ZSBTZXQgdmlzaXRlZF87Ci0KLQkvKgotCSAqIFRoaXMgc3RhY2sga2VlcHMgYSB0cmFpbCBvZiBKRFQgb2JqZWN0cyBiYWNrIHRvIHRoZQotCSAqIHNlcnZpY2UgY2xhc3Mgd2UgYmVnYW4gd2l0aC4gVGhpcyBjYW4gYmUgdXNlZnVsIHRvCi0JICogdmlzaXRvcnMgdGhhdCBuZWVkIHRvIGluc3BlY3QgdGhlIEpEVCBlbGVtZW50cyB0aGF0Ci0JICogZW5jbG9zZSB0aGUgY3VycmVudGx5IHZpc2l0ZWQgZWxlbWVudC4KLQkgKi8KLQlwcml2YXRlIFN0YWNrIHBlYW51dFRyYWlsXzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkRUUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkRUUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjNTc0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pEVFJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4ODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0OTQxMSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNzAxMDIgICAxOTYzNzEgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkZsYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGVIaWVyYXJjaHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLlNpZ25hdHVyZTsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBBIEpEVFJlc29sdmVyIHByb3ZpZGVzIHNldmVyYWwgY29udmVuaWVuY2UgbWV0aG9kcyBmb3IKLSAqIG5hdmlnYXRpbmcgcmVmZXJlbmNlcyBiZXR3ZWVuIEphdmEgY2xhc3NlcywgbWV0aG9kcywKLSAqIGZpZWxkcyBhbmQgcHJvcGVydGllcy4gQSBKRFRSZXNvbHZlciBpcyBjb25zdHJ1Y3RlZAotICogZm9yIGEgSmF2YSBwcm9qZWN0IHdob3NlIGVmZmVjdGl2ZSBjbGFzc3BhdGggd2lsbAotICogZ292ZXJuIHRoZSBzY29wZSBvZiBzZWFyY2ggb3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlCi0gKiBKRFRSZXNvbHZlciB3aGVuZXZlciBpdCBuZWVkcyB0byBjb252ZXJ0IGEgc2lnbmF0dXJlCi0gKiBpbnRvIGEgSkRUIElUeXBlIG9iamVjdC4KLSAqLwotcHVibGljIGNsYXNzIEpEVFJlc29sdmVyCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBKRFRSZXNvbHZlciBmb3IgdGhlIGdpdmVuIHByb2plY3QuCi0JICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgcHJvdmlkaW5nIHRoZSBjb250ZXh0Ci0JICogQHBhcmFtIG1vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoaXMgcmVzb2x2ZXIKLQkgKiB0byB1c2UsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiB3aXRoaW4gd2hpY2ggdGhpcyByZXNvbHZlciB3aWxsIHNlYXJjaCBmb3IgY2xhc3Nlcy4KLQkgKi8KLQlwdWJsaWMgSkRUUmVzb2x2ZXIgKCBJUHJvamVjdCBwcm9qZWN0LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJamF2YVByb2plY3RfID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQltb25pdG9yXyA9IG1vbml0b3I7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gSkRUIElUeXBlIGlzIGFuIGludGVyZmFjZS4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gSkRUIElUeXBlIGlzIGFuIGludGVyZmFjZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIG1vZGVsIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ludGVyZmFjZSAoIElUeXBlIGpkdFR5cGUgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBqZHRUeXBlLmlzSW50ZXJmYWNlKCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gSkRUIElUeXBlIGlzIGFuIGFic3RyYWN0IGNsYXNzLgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBKRFQgSVR5cGUgaXMgYW4gYWJzdHJhY3QgY2xhc3MuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBtb2RlbCBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBYnN0cmFjdCAoIElUeXBlIGpkdFR5cGUgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBGbGFncy5pc0Fic3RyYWN0KGpkdFR5cGUuZ2V0RmxhZ3MoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiBpbnN0YW5jZXMgb2YgdGhlIGdpdmVuIEpEVCBJVHlwZQotCSAqIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIGEgcHVibGljIGRlZmF1bHQgY29uc3RydWN0b3IuIFRoZSBjbGFzcwotCSAqIG11c3QgaGF2ZSBhbiBleHBsaWNpdCBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3Rvciwgb3IgaGF2ZSBubwotCSAqIGV4cGxpY2l0IGNvbnN0cnVjdG9ycyBhdCBhbGwgdG8gbWVldCB0aGlzIGNyaXRlcmlhLgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIGluc3RhbmNlcyBvZiB0aGUgdHlwZSBhcmUKLQkgKiBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3RhYmxlLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgbW9kZWwgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQ29uc3RydWN0YWJsZSAoIElUeXBlIGpkdFR5cGUgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlNZXRob2RbXSBtZXRob2RzID0gamR0VHlwZS5nZXRNZXRob2RzKCk7Ci0JCWludCBudW1iZXJPZkNvbnN0cnVjdG9ycyA9IDA7Ci0JCWZvciAoaW50IG09MDsgbTxtZXRob2RzLmxlbmd0aDsgbSsrKQotCQl7Ci0JCQlpZiAobWV0aG9kc1ttXS5pc0NvbnN0cnVjdG9yKCkpCi0JCQl7Ci0JCQkJbnVtYmVyT2ZDb25zdHJ1Y3RvcnMrKzsKLQkJCQlpZiAobWV0aG9kc1ttXS5nZXROdW1iZXJPZlBhcmFtZXRlcnMoKSA9PSAwICYmIEZsYWdzLmlzUHVibGljKG1ldGhvZHNbbV0uZ2V0RmxhZ3MoKSkpCi0JCQkJewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bWJlck9mQ29uc3RydWN0b3JzID09IDA7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkCi0JICogdHlwZSBuYW1lIGlzIGEgdHlwZSBmcm9tIHRoZSBzdGFuZGFyZCBKREssIHRoYXQgaXMsCi0JICogaWYgdGhlIGdpdmVuIHR5cGUgbmFtZSBiZWxvbmdzIHVuZGVyIHRoZSAiamF2YSIgb3IKLQkgKiAiamF2YXgiIHBhY2thZ2VzLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHR5cGUgaXMgYSBub24tcHJpbWl0aXZlLAotCSAqIEphdmEgc3RhbmRhcmQgdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1N0YW5kYXJkVHlwZSAoIFN0cmluZyB0eXBlTmFtZSApCi0JewotCQlyZXR1cm4gdHlwZU5hbWUuc3RhcnRzV2l0aCgiamF2YS4iKSB8fCB0eXBlTmFtZS5zdGFydHNXaXRoKCJqYXZheC4iKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiB0eXBlIG5hbWUgaXMgYQotCSAqIEphdmEgcHJpbWl0aXZlIHR5cGUuCi0JICogQHBhcmFtIHR5cGVOYW1lIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRvIGNoZWNrLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgdHlwZSBpcyBhIEphdmEgcHJpbWl0aXZlIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNQcmltaXRpdmVUeXBlICggU3RyaW5nIHR5cGVOYW1lICkKLQl7Ci0JCWZvciAoaW50IGk9MDsgaTxwcmltaXRpdmVUeXBlc18ubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChwcmltaXRpdmVUeXBlc19baV0uZXF1YWxzKHR5cGVOYW1lKSkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkCi0JICogdHlwZSBuYW1lIGlzIGEgSmF2YSB3cmFwcGVyIHR5cGUuCi0JICogQHBhcmFtIHR5cGVOYW1lIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRvIGNoZWNrLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgdHlwZSBpcyBhIEphdmEgd3JhcHBlciB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzV3JhcHBlclR5cGUgKCBTdHJpbmcgdHlwZU5hbWUgKQotCXsKLQkJZm9yIChpbnQgaT0wOyBpPHdyYXBwZXJUeXBlc18ubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmICh3cmFwcGVyVHlwZXNfW2ldLmVxdWFscyh0eXBlTmFtZSkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkJCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQKLQkgKiB0eXBlIG5hbWUgaXMgYSBKYXZhIHByaW1pdGl2ZSBvciBzdGFuZGFyZCB0eXBlIHN1cHBvcnRlZAotCSAqIGJ5IHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uCi0JICogQHBhcmFtIHR5cGVOYW1lIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRvIGNoZWNrLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgdHlwZSBpcyBhIEphdmEgd3JhcHBlciB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSkFYUlBDU3RhbmRhcmRUeXBlICggU3RyaW5nIHR5cGVOYW1lICkKLQl7Ci0JCWZvciAoaW50IGk9MDsgaTxqYXhycGNUeXBlc18ubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChqYXhycGNUeXBlc19baV0uZXF1YWxzKHR5cGVOYW1lKSkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlpZiAoaXNXcmFwcGVyVHlwZSh0eXBlTmFtZSkgJiYgISJqYXZhLmxhbmcuQ2hhcmFjdGVyIi5lcXVhbHModHlwZU5hbWUpKQotCQl7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAoaXNQcmltaXRpdmVUeXBlKHR5cGVOYW1lKSAmJiAhImNoYXIiLmVxdWFscyh0eXBlTmFtZSkpCi0JCXsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIEpEVCBJVHlwZSBvYmplY3RzCi0JICogZm9yIHRoZSBwdWJsaWMgZmllbGRzIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gdHlwZQotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHRvIGFuYWx5emUuCi0JICogQHBhcmFtIGpkdFN1cGVyVHlwZXMgQW55IHN1cGVydHlwZXMgdG8gYW5hbHl6ZSwKLQkgKiBvciBudWxsIHRvIGFuYWx5emUgb25seSB0aGUgPGNvZGU+amR0VHlwZTwvY29kZT4uCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgcHVibGljIGZpZWxkIHR5cGVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZXMgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElGaWVsZFtdIGdldFB1YmxpY0ZpZWxkcyAoIElUeXBlIGpkdFR5cGUsIElUeXBlW10gamR0U3VwZXJDbGFzc2VzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlMaXN0IGZpZWxkc0xpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQloYXJ2ZXN0UHVibGljRmllbGRzKGpkdFR5cGUsZmllbGRzTGlzdCk7Ci0JCWlmIChqZHRTdXBlckNsYXNzZXMgIT0gbnVsbCkKLQkJewotCQkJZm9yIChpbnQgdD0wOyB0PGpkdFN1cGVyQ2xhc3Nlcy5sZW5ndGg7IHQrKykKLQkJCXsKLQkJCQloYXJ2ZXN0UHVibGljRmllbGRzKGpkdFN1cGVyQ2xhc3Nlc1t0XSxmaWVsZHNMaXN0KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKElGaWVsZFtdKWZpZWxkc0xpc3QudG9BcnJheShuZXcgSUZpZWxkWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgSkRUIElNZXRob2Qgb2JqZWN0cwotCSAqIGZvciB0aGUgcHVibGljIG1ldGhvZHMgYmVsb25naW5nIHRvIHRoZSBnaXZlbiB0eXBlLgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHRvIGFuYWx5emUuCi0JICogQHBhcmFtIGpkdFN1cGVyVHlwZXMgQW55IHN1cGVydHlwZXMgdG8gYW5hbHl6ZSwKLQkgKiBvciBudWxsIHRvIGFuYWx5emUgb25seSB0aGUgPGNvZGU+amR0VHlwZTwvY29kZT4uCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgcHVibGljIG1ldGhvZHMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlcyB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSU1ldGhvZFtdIGdldFB1YmxpY01ldGhvZHMgKCBJVHlwZSBqZHRUeXBlLCBJVHlwZVtdIGpkdFN1cGVyQ2xhc3NlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJTGlzdCBtZXRob2RzTGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCWhhcnZlc3RQdWJsaWNNZXRob2RzKGpkdFR5cGUsbWV0aG9kc0xpc3QpOwotCQlpZiAoamR0U3VwZXJDbGFzc2VzICE9IG51bGwpCi0JCXsKLQkJCWZvciAoaW50IHQ9MDsgdDxqZHRTdXBlckNsYXNzZXMubGVuZ3RoOyB0KyspCi0JCQl7Ci0JCQkJaGFydmVzdFB1YmxpY01ldGhvZHMoamR0U3VwZXJDbGFzc2VzW3RdLG1ldGhvZHNMaXN0KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKElNZXRob2RbXSltZXRob2RzTGlzdC50b0FycmF5KG5ldyBJTWV0aG9kWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgSkRUIElUeXBlIG9iamVjdHMKLQkgKiBmb3IgdGhlIHB1YmxpYyBwcm9wZXJ0aWVzIChnZXR0ZXJzIGFuZC9vciBzZXR0ZXJzKQotCSAqIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gdHlwZS4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEBwYXJhbSBqZHRTdXBlclR5cGVzIEFueSBzdXBlcnR5cGVzIHRvIGFuYWx5emUsCi0JICogb3IgbnVsbCB0byBhbmFseXplIG9ubHkgdGhlIDxjb2RlPmpkdFR5cGU8L2NvZGU+LgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHB1YmxpYyBwcm9wZXJ0eSB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGVzIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJSmF2YUJlYW5Qcm9wZXJ0eVtdIGdldFB1YmxpY1Byb3BlcnRpZXMgKCBJVHlwZSBqZHRUeXBlLCBJVHlwZVtdIGpkdFN1cGVyQ2xhc3NlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSU1ldGhvZFtdIG1ldGhvZHMgPSBnZXRQdWJsaWNNZXRob2RzKGpkdFR5cGUsamR0U3VwZXJDbGFzc2VzKTsKLQkJTWFwIHByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlmb3IgKGludCBtPTA7IG08bWV0aG9kcy5sZW5ndGg7IG0rKykKLQkJewotCQkJU3RyaW5nIG5hbWUgPSBnZXRHZXR0ZXJOYW1lKG1ldGhvZHNbbV0pOwotCQkJaWYgKG5hbWUgIT0gbnVsbCkKLQkJCXsKLQkJCQlKYXZhQmVhblByb3BlcnR5IHByb3BlcnR5ID0gKEphdmFCZWFuUHJvcGVydHkpcHJvcGVydGllcy5nZXQobmFtZSk7Ci0JCQkJaWYgKHByb3BlcnR5ID09IG51bGwpCi0JCQkJewotCQkJCQlwcm9wZXJ0eSA9IG5ldyBKYXZhQmVhblByb3BlcnR5KCk7Ci0JCQkJCXByb3BlcnR5LnNldE5hbWUobmFtZSk7Ci0JCQkJCXByb3BlcnRpZXMucHV0KG5hbWUscHJvcGVydHkpOwotCQkJCX0KLQkJCQlwcm9wZXJ0eS5zZXRHZXR0ZXIobWV0aG9kc1ttXSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJbmFtZSA9IGdldFNldHRlck5hbWUobWV0aG9kc1ttXSk7Ci0JCQkJaWYgKG5hbWUgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCUphdmFCZWFuUHJvcGVydHkgcHJvcGVydHkgPSAoSmF2YUJlYW5Qcm9wZXJ0eSlwcm9wZXJ0aWVzLmdldChuYW1lKTsKLQkJCQkJaWYgKHByb3BlcnR5ID09IG51bGwpCi0JCQkJCXsKLQkJCQkJCXByb3BlcnR5ID0gbmV3IEphdmFCZWFuUHJvcGVydHkoKTsKLQkJCQkJCXByb3BlcnR5LnNldE5hbWUobmFtZSk7Ci0JCQkJCQlwcm9wZXJ0aWVzLnB1dChuYW1lLHByb3BlcnR5KTsKLQkJCQkJfQotCQkJCQlwcm9wZXJ0eS5zZXRTZXR0ZXIobWV0aG9kc1ttXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiAoSUphdmFCZWFuUHJvcGVydHlbXSlwcm9wZXJ0aWVzLnZhbHVlcygpLnRvQXJyYXkobmV3IEphdmFCZWFuUHJvcGVydHlbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSVR5cGUgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gZmllbGQuCi0JICogQHBhcmFtIGpkdEZpZWxkIFRoZSBmaWVsZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVGhlIGZpZWxkIHR5cGUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBmaWVsZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0RmllbGRUeXBlICggSUZpZWxkIGpkdEZpZWxkICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdEZpZWxkLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZyBzaWduYXR1cmUgPSBqZHRGaWVsZC5nZXRUeXBlU2lnbmF0dXJlKCk7Ci0JCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmUpOwotCQlyZXR1cm4gZmluZFR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0eXBlIG5hbWUgZm9yIHRoZSBnaXZlbiBmaWVsZC4KLQkgKiBAcGFyYW0gamR0RmllbGQgVGhlIGZpZWxkIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUaGUgZmllbGQgdHlwZSBuYW1lLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gZmllbGQgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRGaWVsZFR5cGVOYW1lICggSUZpZWxkIGpkdEZpZWxkICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdEZpZWxkLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZyBzaWduYXR1cmUgPSBqZHRGaWVsZC5nZXRUeXBlU2lnbmF0dXJlKCk7Ci0JCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmUpOwotCQlyZXR1cm4gcmVzb2x2ZVR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSVR5cGUgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gYmVhbiBwcm9wZXJ0eS4KLQkgKiBAcGFyYW0gamF2YUJlYW5Qcm9wZXJ0eSBUaGUgYmVhbiBwcm9wZXJ0eSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVGhlIHByb3BlcnR5IHR5cGUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBiZWFuIHByb3BlcnR5IHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZSBnZXRQcm9wZXJ0eVR5cGUgKCBJSmF2YUJlYW5Qcm9wZXJ0eSBqYXZhQmVhblByb3BlcnR5ICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJTWV0aG9kIG1ldGhvZCA9IGphdmFCZWFuUHJvcGVydHkuZ2V0R2V0dGVyKCk7Ci0JCWlmIChtZXRob2QgIT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIGdldFJldHVyblR5cGUobWV0aG9kKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCW1ldGhvZCA9IGphdmFCZWFuUHJvcGVydHkuZ2V0U2V0dGVyKCk7Ci0JCQlpZiAobWV0aG9kICE9IG51bGwpCi0JCQl7Ci0JCQkJSVR5cGVbXSBwYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVyVHlwZXMobWV0aG9kKTsKLQkJCQlpZiAocGFyYW1ldGVycy5sZW5ndGggPiAwKQotCQkJCXsKLQkJCQkJLy8KLQkJCQkJLy8gSXQncyB0aGUgbGFzdCBwYXJhbWV0ZXIncyB0eXBlIHdlIHdhbnQsCi0JCQkJCS8vIGZvciBpbmRleGVkIG9yIG5vbi1pbmRleGVkIHNldHRlcnMuCi0JCQkJCS8vCi0JCQkJCXJldHVybiBwYXJhbWV0ZXJzW3BhcmFtZXRlcnMubGVuZ3RoLTFdOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHlwZSBuYW1lIGZvciB0aGUgZ2l2ZW4gYmVhbiBwcm9wZXJ0eS4KLQkgKiBAcGFyYW0gamF2YUJlYW5Qcm9wZXJ0eSBUaGUgYmVhbiBwcm9wZXJ0eSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVGhlIHByb3BlcnR5IHR5cGUgbmFtZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIGJlYW4gcHJvcGVydHkgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVR5cGVOYW1lICggSUphdmFCZWFuUHJvcGVydHkgamF2YUJlYW5Qcm9wZXJ0eSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSU1ldGhvZCBtZXRob2QgPSBqYXZhQmVhblByb3BlcnR5LmdldEdldHRlcigpOwotCQlpZiAobWV0aG9kICE9IG51bGwpCi0JCXsKLQkJCXJldHVybiBnZXRSZXR1cm5UeXBlTmFtZShtZXRob2QpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJbWV0aG9kID0gamF2YUJlYW5Qcm9wZXJ0eS5nZXRTZXR0ZXIoKTsKLQkJCWlmIChtZXRob2QgIT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmdbXSBwYXJhbWV0ZXJUeXBlTmFtZXMgPSBnZXRQYXJhbWV0ZXJUeXBlTmFtZXMobWV0aG9kKTsKLQkJCQlpZiAocGFyYW1ldGVyVHlwZU5hbWVzLmxlbmd0aCA+IDApCi0JCQkJewotCQkJCQlyZXR1cm4gcGFyYW1ldGVyVHlwZU5hbWVzWzBdOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElUeXBlIG9iamVjdCBmb3IgdGhlIHJldHVybiB0eXBlCi0JICogb2YgdGhlIGdpdmVuIG1ldGhvZCwgb3IgbnVsbCBpZiB0aGUgbWV0aG9kIGlzIHZvaWQuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBUaGUgbWV0aG9kIHJldHVybiB0eXBlLCBvciBudWxsIGlmIG5vbmUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBtZXRob2QgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElUeXBlIGdldFJldHVyblR5cGUgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRNZXRob2QuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nIHNpZ25hdHVyZSA9IGpkdE1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0JCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmUpOwotCQlyZXR1cm4gZmluZFR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0eXBlIG5hbWUgZm9yIHRoZSByZXR1cm4gdHlwZQotCSAqIG9mIHRoZSBnaXZlbiBtZXRob2QsIG9yIG51bGwgaWYgdGhlIG1ldGhvZCBpcyB2b2lkLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVGhlIG1ldGhvZCByZXR1cm4gdHlwZSBuYW1lLCBvciBudWxsIGlmIG5vbmUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBtZXRob2QgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRSZXR1cm5UeXBlTmFtZSAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmcgc2lnbmF0dXJlID0gamR0TWV0aG9kLmdldFJldHVyblR5cGUoKTsKLQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0JCXJldHVybiByZXNvbHZlVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIEpEVCBJVHlwZSBvYmplY3RzCi0JICogZm9yIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBnaXZlbiBtZXRob2QuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgcGFyYW1ldGVyIHR5cGVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZVtdIGdldFBhcmFtZXRlclR5cGVzICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0TWV0aG9kLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZ1tdIHNpZ25hdHVyZXMgPSBqZHRNZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJSVR5cGVbXSB0eXBlcyA9IG5ldyBJVHlwZVtzaWduYXR1cmVzLmxlbmd0aF07Ci0JCWZvciAoaW50IHM9MDsgczxzaWduYXR1cmVzLmxlbmd0aDsgcysrKQotCQl7Ci0JCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlc1tzXSk7Ci0JCQl0eXBlc1tzXSA9IGZpbmRUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQkJfQotCQlyZXR1cm4gdHlwZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHR5cGUgbmFtZXMKLQkgKiBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGdpdmVuIG1ldGhvZC4KLQkgKiBAcGFyYW0gamR0TWV0aG9kIFRoZSBtZXRob2QgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBwYXJhbWV0ZXIgdHlwZSBuYW1lcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIG1ldGhvZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVHlwZU5hbWVzICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0TWV0aG9kLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZ1tdIHNpZ25hdHVyZXMgPSBqZHRNZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJU3RyaW5nW10gdHlwZU5hbWVzID0gbmV3IFN0cmluZ1tzaWduYXR1cmVzLmxlbmd0aF07Ci0JCWZvciAoaW50IHM9MDsgczxzaWduYXR1cmVzLmxlbmd0aDsgcysrKQotCQl7Ci0JCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlc1tzXSk7Ci0JCQl0eXBlTmFtZXNbc10gPSByZXNvbHZlVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JCX0KLQkJcmV0dXJuIHR5cGVOYW1lczsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgSkRUIElUeXBlIG9iamVjdHMKLQkgKiBmb3IgdGhlIGV4Y2VwdGlvbnMgdGhyb3duIGJ5IHRoZSBnaXZlbiBtZXRob2QuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgZXhjZXB0aW9uIHR5cGVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZVtdIGdldEV4Y2VwdGlvblR5cGVzICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0TWV0aG9kLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZ1tdIHNpZ25hdHVyZXMgPSBqZHRNZXRob2QuZ2V0RXhjZXB0aW9uVHlwZXMoKTsKLQkJSVR5cGVbXSB0eXBlcyA9IG5ldyBJVHlwZVtzaWduYXR1cmVzLmxlbmd0aF07Ci0JCWZvciAoaW50IHM9MDsgczxzaWduYXR1cmVzLmxlbmd0aDsgcysrKQotCQl7Ci0JCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlc1tzXSk7Ci0JCQl0eXBlc1tzXSA9IGZpbmRUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQkJfQotCQlyZXR1cm4gdHlwZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHR5cGUgbmFtZXMKLQkgKiBmb3IgdGhlIGV4Y2VwdGlvbnMgdGhyb3duIGJ5IHRoZSBnaXZlbiBtZXRob2QuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgZXhjZXB0aW9uIHR5cGUgbmFtZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBtZXRob2QgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldEV4Y2VwdGlvblR5cGVOYW1lcyAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmdbXSBzaWduYXR1cmVzID0gamR0TWV0aG9kLmdldEV4Y2VwdGlvblR5cGVzKCk7Ci0JCVN0cmluZ1tdIHR5cGVOYW1lcyA9IG5ldyBTdHJpbmdbc2lnbmF0dXJlcy5sZW5ndGhdOwotCQlmb3IgKGludCBzPTA7IHM8c2lnbmF0dXJlcy5sZW5ndGg7IHMrKykKLQkJewotCQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZXNbc10pOwotCQkJdHlwZU5hbWVzW3NdID0gcmVzb2x2ZVR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCQl9Ci0JCXJldHVybiB0eXBlTmFtZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHR5cGVzIHJlcHJlc2VudGluZwotCSAqIHRoZSBzdXBlcmNsYXNzZXMsIGlmIGFueSwgb2YgdGhlIGdpdmVuIElUeXBlIGluIGJvdHRvbS11cAotCSAqIG9yZGVyIGV4Y2x1ZGluZyBqYXZhLmxhbmcuT2JqZWN0LgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgc3VwZXJjbGFzcyB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElUeXBlW10gZ2V0U3VwZXJDbGFzc2VzICggSVR5cGUgamR0VHlwZSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGdldFN1cGVyQ2xhc3NlcyhqZHRUeXBlLCJqYXZhLmxhbmcuT2JqZWN0Iik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHR5cGVzIHJlcHJlc2VudGluZwotCSAqIHRoZSBzdXBlcmNsYXNzZXMsIGlmIGFueSwgb2YgdGhlIGdpdmVuIElUeXBlLgotCSAqIFVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCBqYXZhLmxhbmcuT2JqZWN0IGlzIGluY2x1ZGVkLgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSB0eXBlIHRvIGFuYWx5emUuCi0JICogQHBhcmFtIHN0b3BDbGFzc05hbWUgVGhlIG5hbWUgb2YgYSBzdG9wIGNsYXNzIHVzZWQgdG8gbGltaXQKLQkgKiB0aGUgc3VwZXJjbGFzc2VzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuIElmIHRoZSBzdG9wIGNsYXNzCi0JICogaXMgbnVsbCBvciBuYW1lcyBhIGNsYXNzIG5vdCBmb3VuZCBpbiB0aGUgaGllcmFyY2h5LCBhbGwKLQkgKiBzdXBlcmNsYXNzZXMgYXJlIHJldHVybmVkLiBPdGhlcndpc2UsIG9ubHkgc3VwZXJjbGFzc2VzIHVwCi0JICogdG8gYnV0IGV4Y2x1ZGluZyB0aGUgc3RvcCBjbGFzcyBhcmUgcmV0dXJuZWQuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgc3VwZXJjbGFzcyB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElUeXBlW10gZ2V0U3VwZXJDbGFzc2VzICggSVR5cGUgamR0VHlwZSwgU3RyaW5nIHN0b3BDbGFzc05hbWUgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlUeXBlSGllcmFyY2h5IGhpZXJhcmNoeSA9IGpkdFR5cGUubmV3U3VwZXJ0eXBlSGllcmFyY2h5KG1vbml0b3JfKTsKLQkJSVR5cGVbXSBhbGxTdXBlckNsYXNzZXMgPSBoaWVyYXJjaHkuZ2V0QWxsU3VwZXJjbGFzc2VzKGpkdFR5cGUpOwotCQlMaXN0IHN1cGVyQ2xhc3NlcyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCWZvciAoaW50IGk9MDsgaTxhbGxTdXBlckNsYXNzZXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChhbGxTdXBlckNsYXNzZXNbaV0uZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkuZXF1YWxzKHN0b3BDbGFzc05hbWUpKQotCQkJCWJyZWFrOwotCQkJc3VwZXJDbGFzc2VzLmFkZChhbGxTdXBlckNsYXNzZXNbaV0pOwotCQl9Ci0JCXJldHVybiAoSVR5cGVbXSlzdXBlckNsYXNzZXMudG9BcnJheShuZXcgSVR5cGVbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBFeHRyYWN0cyB0aGUgcXVhbGlmaWVkIHR5cGUgbmFtZSBmcm9tIGEgSkRUIHNpZ25hdHVyZS4KLQkgKiBAcGFyYW0gc2lnbmF0dXJlIFRoZSBzaWduYXR1cmUgdG8gZXhhbWluZS4KLQkgKiBAcmV0dXJuIFRoZSBxdWFsaWZpZWQgdHlwZSBuYW1lIGZyb20gdGhlIHNpZ25hdHVyZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZSAoIFN0cmluZyBzaWduYXR1cmUgKQotCXsKLQotCQlTdHJpbmcgcGFja2FnZU5hbWUgPSBTaWduYXR1cmUuZ2V0U2lnbmF0dXJlUXVhbGlmaWVyKHNpZ25hdHVyZSk7Ci0JCVN0cmluZyBiYXNlTmFtZSA9IFNpZ25hdHVyZS5nZXRTaWduYXR1cmVTaW1wbGVOYW1lKHNpZ25hdHVyZSk7Ci0JCWlmIChiYXNlTmFtZS5lbmRzV2l0aCgiW10iKSl7Ci0JCQliYXNlTmFtZSA9IGJhc2VOYW1lLnN1YnN0cmluZygwLCBiYXNlTmFtZS5pbmRleE9mKCJbIikpOwotCQl9Ci0JCQkKLQkJU3RyaW5nIHR5cGVOYW1lID0gKHBhY2thZ2VOYW1lLnRyaW0oKS5lcXVhbHMoIiIpPyIiOnBhY2thZ2VOYW1lKyIuIikgKyBiYXNlTmFtZTsKLQkJcmV0dXJuIHR5cGVOYW1lOwotCX0KLQkKLQkvKioKLQkgKiBBdHRlbXB0cyB0byByZXNvbHZlIGFuIHVucmVzb2x2ZWQgdHlwZSBuYW1lIGluIHRoZQotCSAqIGNvbnRleHQgb2YgdGhlIGdpdmVuIGFuY2VzdG9yIHR5cGUgKGllLiB0aGUgdHlwZQotCSAqIGFjdGluZyBhcyB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggdGhlIHR5cGUgbmFtZQotCSAqIHNob3VsZCBiZSByZXNvbHZlZCkuCi0JICogQHBhcmFtIHR5cGVOYW1lIFRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZSB0byBmaW5kLgotCSAqIEBwYXJhbSBhbmNlc3RvciBUaGUgdHlwZSBwcm92aWRpbmcgdGhlIGNvbnRleHQgd2l0aGluCi0JICogd2hpY2ggdG8gbG9vayB1cCB0aGUgdHlwZS4KLQkgKiBAcmV0dXJuIFRoZSBxdWFsaWZpZWQgbmFtZSwgb3IgdGhlIG9yaWdpbmFsIHR5cGUgbmFtZQotCSAqIGlmIGl0IGNvdWxkIG5vdCBiZSByZXNvbHZlZC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHJlc29sdmVUeXBlICggU3RyaW5nIHR5cGVOYW1lLCBJVHlwZSBhbmNlc3RvciApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJaWYgKGFuY2VzdG9yICE9IG51bGwpCi0JCXsKLQkJCVN0cmluZ1tdW10gbWF0Y2hlcyA9IGFuY2VzdG9yLnJlc29sdmVUeXBlKHR5cGVOYW1lKTsKLQkJCWlmIChtYXRjaGVzICE9IG51bGwgJiYgbWF0Y2hlcy5sZW5ndGggPiAwKQotCQkJewotCQkJCVN0cmluZ0J1ZmZlciBxbmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQlpbnQgbiA9IG1hdGNoZXNbMF0ubGVuZ3RoOwotCQkJCWZvciAoaW50IGo9MDsgajxuLTE7IGorKykKLQkJCQl7Ci0JCQkJCXFuYW1lLmFwcGVuZChtYXRjaGVzWzBdW2pdKS5hcHBlbmQoIi4iKTsKLQkJCQl9Ci0JCQkJaWYgKG4gPj0gMCkKLQkJCQl7Ci0JCQkJCXFuYW1lLmFwcGVuZChtYXRjaGVzWzBdW24tMV0pOwotCQkJCX0KLQkJCQlyZXR1cm4gcW5hbWUudG9TdHJpbmcoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdHlwZU5hbWU7Ci0JfQotCi0JLyoqCi0JICogQXR0ZW1wdHMgdG8gZmluZCBhIEpEVCBJVHlwZSBvYmplY3QgZm9yIHRoZSBnaXZlbgotCSAqIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgdHlwZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mCi0JICogdGhlIGdpdmVuIGFuY2VzdG9yIHR5cGUgKGllLiB0aGUgdHlwZSBhY3RpbmcgYXMgdGhlCi0JICogY29udGV4dCB3aXRoaW4gd2hpY2ggdGhlIHR5cGUgbmFtZSBzaG91bGQgYmUgcmVzb2x2ZWQpLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHR5cGUgdG8gZmluZC4KLQkgKiBAcGFyYW0gYW5jZXN0b3IgVGhlIHR5cGUgcHJvdmlkaW5nIHRoZSBjb250ZXh0IHdpdGhpbgotCSAqIHdoaWNoIHRvIGxvb2sgdXAgdGhlIHR5cGUuCi0JICogQHJldHVybiBUaGUgSVR5cGUgb2JqZWN0IG9mIHRoZSBnaXZlbiBxdWFsaWZpZWQgbmFtZSwKLQkgKiBvciBudWxsIGlmIG5vIHR5cGUgY291bGQgYmUgZm91bmQgaW4gdGhlIHdvcmtzcGFjZS4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZmluZFR5cGUgKCBTdHJpbmcgdHlwZU5hbWUsIElUeXBlIGFuY2VzdG9yICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJVHlwZSB0eXBlID0gamF2YVByb2plY3RfLmZpbmRUeXBlKHR5cGVOYW1lKTsKLQkJaWYgKHR5cGUgPT0gbnVsbCAmJiBhbmNlc3RvciAhPSBudWxsKQotCQl7Ci0JCQlTdHJpbmdbXVtdIG1hdGNoZXMgPSBhbmNlc3Rvci5yZXNvbHZlVHlwZSh0eXBlTmFtZSk7Ci0JCQlpZiAobWF0Y2hlcyAhPSBudWxsKQotCQkJewotCQkJCWludCBpPTA7Ci0JCQkJd2hpbGUgKHR5cGUgPT0gbnVsbCAmJiBpPG1hdGNoZXMubGVuZ3RoKQotCQkJCXsKLQkJCQkJU3RyaW5nQnVmZmVyIHFuYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCQlpbnQgbiA9IG1hdGNoZXNbaV0ubGVuZ3RoOwotCQkJCQlmb3IgKGludCBqPTA7IGo8bi0xOyBqKyspCi0JCQkJCXsKLQkJCQkJCXFuYW1lLmFwcGVuZChtYXRjaGVzW2ldW2pdKS5hcHBlbmQoIi4iKTsKLQkJCQkJfQotCQkJCQlpZiAobiA+PSAwKQotCQkJCQl7Ci0JCQkJCQlxbmFtZS5hcHBlbmQobWF0Y2hlc1tpXVtuLTFdKTsKLQkJCQkJfQotCQkJCQl0eXBlID0gamF2YVByb2plY3RfLmZpbmRUeXBlKHFuYW1lLnRvU3RyaW5nKCkpOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiB0eXBlOwotCX0KLQotCS8qKgotCSAqIEZpbmRzIGFsbCBwdWJsaWMsIG5vbi1jb25zdHJ1Y3RvciBJTWV0aG9kcyBiZWxvbmdpbmcKLQkgKiB0byB0aGUgZ2l2ZW4gSVR5cGUgYW5kIGFkZHMgdGhlbSB0byB0aGUgZ2l2ZW4gbGlzdC4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB3aG9zZSBtZXRob2RzIGFyZSB0byBiZSBoYXJ2ZXN0ZWQuCi0JICogQHBhcmFtIGxpc3QgVGhlIGxpc3QgdG8gd2hpY2ggdGhlIGhhcnZlc3RlZCBtZXRob2RzIHdpbGwgYmUgYWRkZWQuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyB2b2lkIGhhcnZlc3RQdWJsaWNNZXRob2RzICggSVR5cGUgamR0VHlwZSwgTGlzdCBsaXN0ICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJTWV0aG9kW10gbWV0aG9kcyA9IGpkdFR5cGUuZ2V0TWV0aG9kcygpOwotCQlmb3IgKGludCBtPTA7IG08bWV0aG9kcy5sZW5ndGg7IG0rKykKLQkJewotCQkJaWYgKCFtZXRob2RzW21dLmlzQ29uc3RydWN0b3IoKSAmJiBGbGFncy5pc1B1YmxpYyhtZXRob2RzW21dLmdldEZsYWdzKCkpKQotCQkJewotCQkJCWxpc3QuYWRkKG1ldGhvZHNbbV0pOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIEZpbmRzIGFsbCBwdWJsaWMgSUZpZWxkcyBiZWxvbmdpbmcKLQkgKiB0byB0aGUgZ2l2ZW4gSVR5cGUgYW5kIGFkZHMgdGhlbSB0byB0aGUgZ2l2ZW4gbGlzdC4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB3aG9zZSBmaWVsZHMgYXJlIHRvIGJlIGhhcnZlc3RlZC4KLQkgKiBAcGFyYW0gbGlzdCBUaGUgbGlzdCB0byB3aGljaCB0aGUgaGFydmVzdGVkIGZpZWxkcyB3aWxsIGJlIGFkZGVkLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBoYXJ2ZXN0UHVibGljRmllbGRzICggSVR5cGUgamR0VHlwZSwgTGlzdCBsaXN0ICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJRmllbGRbXSBmaWVsZHMgPSBqZHRUeXBlLmdldEZpZWxkcygpOwotCQlmb3IgKGludCBmPTA7IGY8ZmllbGRzLmxlbmd0aDsgZisrKQotCQl7Ci0JCQlpZiAoRmxhZ3MuaXNQdWJsaWMoZmllbGRzW2ZdLmdldEZsYWdzKCkpKQotCQkJewotCQkJCWxpc3QuYWRkKGZpZWxkc1tmXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogSWYgdGhlIGdpdmVuIG1ldGhvZCBpcyBhIGdldHRlciBhY2NvcmRpbmcgdG8gdGhlIEJlYW4gc3BlYwotCSAqIChlZy4gIk15VHlwZSBnZXRNeVByb3BlcnR5ICgpIiBvciAiYm9vbGVhbiBpc015UHJvcGVydHkgKCkiKQotCSAqIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBiZWFuIHByb3BlcnR5IG5hbWUgKGVnLiAibXlQcm9wZXJ0eSIpLAotCSAqIG90aGVyd2lzZSwgcmV0dXJuIG51bGwuCi0JICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGNoZWNrLgotCSAqIEByZXR1cm4gVGhlIHByb3BlcnR5IG5hbWUgb3Igbm9uZSBpZiB0aGUgbWV0aG9kIGlzIG5vdCBhIGdldHRlci4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEdldHRlck5hbWUgKCBJTWV0aG9kIG1ldGhvZCApCi0JewotCQl0cnkKLQkJewotCQkJU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2QuZ2V0RWxlbWVudE5hbWUoKTsKLQkJCWlmIChtZXRob2ROYW1lLnN0YXJ0c1dpdGgoImdldCIpICYmIG1ldGhvZE5hbWUubGVuZ3RoKCkgPiAzKQotCQkJewotCQkJCVN0cmluZyBzaWduYXR1cmUgPSBtZXRob2QuZ2V0U2lnbmF0dXJlKCk7Ci0JCQkJU3RyaW5nIHJldHVyblR5cGVOYW1lID0gU2lnbmF0dXJlLmdldFJldHVyblR5cGUoc2lnbmF0dXJlKTsKLQkJCQkvLwotCQkJCS8vIEdldHRlcnMgbXVzdCBub3QgYmUgdm9pZC4KLQkJCQkvLwotCQkJCWlmIChyZXR1cm5UeXBlTmFtZSAhPSBudWxsICYmIHJldHVyblR5cGVOYW1lICE9IFNpZ25hdHVyZS5TSUdfVk9JRCkKLQkJCQl7Ci0JCQkJCVN0cmluZ1tdIHBhcmFtZXRlclNpZ25hdHVyZXMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJCQkJLy8KLQkJCQkJLy8gTm9uLWluZGV4ZWQgZ2V0dGVycyBtdXN0IGhhdmUgemVybyBwYXJhbWV0ZXJzLgotCQkJCQkvLwotCQkJCQlpZiAocGFyYW1ldGVyU2lnbmF0dXJlcy5sZW5ndGggPT0gMCkKLQkJCQkJewotCQkJCQkJcmV0dXJuIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDMsNCkudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDQpOwotCQkJCQl9Ci0JCQkJCS8vCi0JCQkJCS8vIEluZGV4ZWQgZ2V0dGVycyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyIG9mIHR5cGUgImludCIuCi0JCQkJCS8vCi0JCQkJCWVsc2UgaWYgKHBhcmFtZXRlclNpZ25hdHVyZXMubGVuZ3RoID09IDEpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyBpbmRleFR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHBhcmFtZXRlclNpZ25hdHVyZXNbMF0pOwotCQkJCQkJaWYgKGluZGV4VHlwZU5hbWUuZXF1YWxzKCJpbnQiKSkKLQkJCQkJCXsKLQkJCQkJCQlyZXR1cm4gbWV0aG9kTmFtZS5zdWJzdHJpbmcoMyw0KS50b0xvd2VyQ2FzZSgpICsgbWV0aG9kTmFtZS5zdWJzdHJpbmcoNCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmIChtZXRob2ROYW1lLnN0YXJ0c1dpdGgoImlzIikgJiYgbWV0aG9kTmFtZS5sZW5ndGgoKSA+IDIpCi0JCQl7Ci0JCQkJU3RyaW5nIHNpZ25hdHVyZSA9IG1ldGhvZC5nZXRTaWduYXR1cmUoKTsKLQkJCQlTdHJpbmcgcmV0dXJuVHlwZU5hbWUgPSBTaWduYXR1cmUuZ2V0UmV0dXJuVHlwZShzaWduYXR1cmUpOwotCQkJCS8vCi0JCQkJLy8gImlzIiBnZXR0ZXJzIG11c3QgYmUgYm9vbGVhbi4KLQkJCQkvLwotCQkJCWlmIChTaWduYXR1cmUuU0lHX0JPT0xFQU4uZXF1YWxzKHJldHVyblR5cGVOYW1lKSkKLQkJCQl7Ci0JCQkJCS8vCi0JCQkJCS8vICJpcyIgZ2V0dGVycyBtdXN0IGhhdmUgbm8gcGFyYW1ldGVycy4KLQkJCQkJLy8KLQkJCQkJaWYgKG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSAwKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gbWV0aG9kTmFtZS5zdWJzdHJpbmcoMiwzKS50b0xvd2VyQ2FzZSgpICsgbWV0aG9kTmFtZS5zdWJzdHJpbmcoMyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogSWYgdGhlIGdpdmVuIG1ldGhvZCBpcyBhIHNldHRlciBhY2NvcmRpbmcgdG8gdGhlIEJlYW4gc3BlYwotCSAqIChlZy4gInZvaWQgc2V0TXlQcm9wZXJ0eSAoTXlUeXBlKSIgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nCi0JICogYmVhbiBwcm9wZXJ0eSBuYW1lIChlZy4gIm15UHJvcGVydHkiKSwgb3RoZXJ3aXNlLCByZXR1cm4gbnVsbC4KLQkgKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gY2hlY2suCi0JICogQHJldHVybiBUaGUgcHJvcGVydHkgbmFtZSBvciBub25lIGlmIHRoZSBtZXRob2QgaXMgbm90IGEgc2V0dGVyLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2V0dGVyTmFtZSAoIElNZXRob2QgbWV0aG9kICkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC5nZXRFbGVtZW50TmFtZSgpOwotCQkJaWYgKG1ldGhvZE5hbWUuc3RhcnRzV2l0aCgic2V0IikgJiYgbWV0aG9kTmFtZS5sZW5ndGgoKSA+IDMpCi0JCQl7Ci0JCQkJU3RyaW5nIHNpZ25hdHVyZSA9IG1ldGhvZC5nZXRTaWduYXR1cmUoKTsKLQkJCQlTdHJpbmcgcmV0dXJuVHlwZU5hbWUgPSBTaWduYXR1cmUuZ2V0UmV0dXJuVHlwZShzaWduYXR1cmUpOwotCQkJCS8vCi0JCQkJLy8gU2V0dGVycyBtdXN0IGJlIHZvaWQuCi0JCQkJLy8KLQkJCQlpZiAoU2lnbmF0dXJlLlNJR19WT0lELmVxdWFscyhyZXR1cm5UeXBlTmFtZSkpCi0JCQkJewotCQkJCQlTdHJpbmdbXSBwYXJhbWV0ZXJTaWduYXR1cmVzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkJCS8vCi0JCQkJCS8vIE5vbi1pbmRleGVkIHNldHRlcnMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtZXRlci4KLQkJCQkJLy8KLQkJCQkJaWYgKHBhcmFtZXRlclNpZ25hdHVyZXMubGVuZ3RoID09IDEpCi0JCQkJCXsKLQkJCQkJCXJldHVybiBtZXRob2ROYW1lLnN1YnN0cmluZygzLDQpLnRvTG93ZXJDYXNlKCkgKyBtZXRob2ROYW1lLnN1YnN0cmluZyg0KTsKLQkJCQkJfQotCQkJCQkvLwotCQkJCQkvLyBJbmRleGVkIHNldHRlcnMgbXVzdCBoYXZlIGV4YWN0bHkgdHdvIHBhcmFtZXRlcnMsCi0JCQkJCS8vIHRoZSBmaXJzdCBvZiB3aGljaCBtdXN0IGJlICJpbnQiLgotCQkJCQkvLwotCQkJCQllbHNlIGlmIChwYXJhbWV0ZXJTaWduYXR1cmVzLmxlbmd0aCA9PSAyKQotCQkJCQl7Ci0JCQkJCQlpZiAoU2lnbmF0dXJlLlNJR19JTlQuZXF1YWxzKHBhcmFtZXRlclNpZ25hdHVyZXNbMF0pKQotCQkJCQkJewotCQkJCQkJCXJldHVybiBtZXRob2ROYW1lLnN1YnN0cmluZygzLDQpLnRvTG93ZXJDYXNlKCkgKyBtZXRob2ROYW1lLnN1YnN0cmluZyg0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKgotCSAqIFRoZSBKYXZhIHByb2plY3QgdGhhdCBnb3Zlcm5zIHRoZSBzZWFyY2ggc2NvcGUgZm9yIHRoaXMgcmVzb2x2ZXIuCi0JICovCi0JcHJpdmF0ZSBJSmF2YVByb2plY3QgamF2YVByb2plY3RfOwotCQotCS8qCi0JICogVGhlIHByb2dyZXNzIG1vbml0b3IgdG8gdXNlLCBpZiBhbnkuIAotCSAqLwotCXByaXZhdGUgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yXzsKLQkKLQkvKgotCSAqIFRoZSBzZXQgb2YgSmF2YSB3cmFwcGVyIHR5cGVzLgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIHdyYXBwZXJUeXBlc18gPSB7Ci0JCSJqYXZhLmxhbmcuQ2hhcmFjdGVyIiwKLQkJImphdmEubGFuZy5Cb29sZWFuIiwKLQkJImphdmEubGFuZy5CeXRlIiwKLQkJImphdmEubGFuZy5TaG9ydCIsCi0JCSJqYXZhLmxhbmcuSW50ZWdlciIsCi0JCSJqYXZhLmxhbmcuTG9uZyIsCi0JCSJqYXZhLmxhbmcuRmxvYXQiLAotCQkiamF2YS5sYW5nLkRvdWJsZSIKLQl9OwotCi0JLyoKLQkgKiBUaGUgc2V0IG9mIEphdmEgcHJpbWl0aXZlIHR5cGVzLgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIHByaW1pdGl2ZVR5cGVzXyA9IHsKLQkJImNoYXIiLAotCQkiYm9vbGVhbiIsCi0JCSJieXRlIiwKLQkJInNob3J0IiwKLQkJImludCIsCi0JCSJsb25nIiwKLQkJImZsb2F0IiwKLQkJImRvdWJsZSIKLQl9OwotCi0JLyoKLQkgKiBUaGUgc2V0IG9mIEpBWC1SUEMgc3VwcG9ydGVkIEphdmEgc3RhbmRhcmQgdHlwZXMsCi0JICogZXhjbHVkaW5nIHByaW1pdGl2ZXMgYW5kIHdyYXBwZXIgdHlwZXMuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gamF4cnBjVHlwZXNfID0gewotCQkiYm9vbGVhbiIsCi0JCSJieXRlIiwKLQkJInNob3J0IiwKLQkJImludCIsCi0JCSJsb25nIiwKLQkJImZsb2F0IiwKLQkJImRvdWJsZSIsCi0JCSJqYXZhLmxhbmcuU3RyaW5nIiwKLQkJImphdmEubGFuZy5Cb29sZWFuIiwKLQkJImphdmEubGFuZy5CeXRlIiwKLQkJImphdmEubGFuZy5TaG9ydCIsCi0JCSJqYXZhLmxhbmcuSW50ZWdlciIsCi0JCSJqYXZhLmxhbmcuTG9uZyIsCi0JCSJqYXZhLmxhbmcuRmxvYXQiLAotCQkiamF2YS5sYW5nLkRvdWJsZSIsCi0JCSJqYXZhLnV0aWwuRGF0ZSIsCi0JCSJqYXZhLnV0aWwuQ2FsZW5kYXIiLAotCQkiamF2YS5tYXRoLkJpZ0ludGVnZXIiLAotCQkiamF2YS5tYXRoLkJpZ0RlY2ltYWwiLAotCQkiamF2YS5uZXQuVVJJIiwKLQkJImphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUiCi0JfTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhQmVhblByb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOWQ1NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhQmVhblByb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogVGhpcyBpcyBhIGdhcmRlbiB2YXJpZXR5IGltcGxlbWVudGF0aW9uIG9mIElKYXZhQmVhblByb3BlcnR5LAotICogY29uc3RydWN0YWJsZSBieSBkZWZhdWx0IGFuZCBlcXVpcHBlZCB3aXRoIGdldHRlcnMgYW5kIHNldHRlcnMKLSAqIGZvciB0aGUgcHJvcGVydGllcyBvZiBJSmF2YUJlYW5Qcm9wZXJ0eS4KLSAqLwotcHVibGljIGNsYXNzIEphdmFCZWFuUHJvcGVydHkgaW1wbGVtZW50cyBJSmF2YUJlYW5Qcm9wZXJ0eQotewotCXByaXZhdGUgU3RyaW5nIG5hbWVfOwotCXByaXZhdGUgYm9vbGVhbiBpbmRleGVkXzsKLQlwcml2YXRlIElNZXRob2QgZ2V0dGVyXzsKLQlwcml2YXRlIElNZXRob2Qgc2V0dGVyXzsKLQlwcml2YXRlIElNZXRob2QgaW5kZXhlZEdldHRlcl87Ci0JcHJpdmF0ZSBJTWV0aG9kIGluZGV4ZWRTZXR0ZXJfOwotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNnZXROYW1lKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLQl7Ci0JCXJldHVybiBuYW1lXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgIm5hbWUiIHByb3BlcnR5IG9mIHRoaXMgSmF2YSBCZWFuIFByb3BlcnR5IGRlc2NyaXB0b3IuCi0JICogQHBhcmFtIG5hbWUgVGhlIHN0cmluZyB2YWx1ZSB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZSAoIFN0cmluZyBuYW1lICkKLQl7Ci0JCW5hbWVfID0gbmFtZTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5I2lzSW5kZXhlZCgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJbmRleGVkICgpCi0JewotCQlyZXR1cm4gaW5kZXhlZF87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJpbmRleGVkIiBwcm9wZXJ0eSBvZiB0aGlzIEphdmEgQmVhbiBQcm9wZXJ0eSBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBpbmRleGVkIFRoZSBib29sZWFuIHZhbHVlIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbmRleGVkICggYm9vbGVhbiBpbmRleGVkICkKLQl7Ci0JCWluZGV4ZWRfID0gaW5kZXhlZDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5I2dldEdldHRlcigpCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0R2V0dGVyICgpCi0JewotCQlyZXR1cm4gZ2V0dGVyXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgImdldHRlciIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gZ2V0dGVyIFRoZSBJTWV0aG9kIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRHZXR0ZXIgKCBJTWV0aG9kIGdldHRlciApCi0JewotCQlnZXR0ZXJfID0gZ2V0dGVyOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0U2V0dGVyKCkKLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRTZXR0ZXIgKCkKLQl7Ci0JCXJldHVybiBzZXR0ZXJfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSAic2V0dGVyIiBwcm9wZXJ0eSBvZiB0aGlzIEphdmEgQmVhbiBQcm9wZXJ0eSBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBzZXR0ZXIgVGhlIElNZXRob2QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNldHRlciAoIElNZXRob2Qgc2V0dGVyICkKLQl7Ci0JCXNldHRlcl8gPSBzZXR0ZXI7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNnZXRJbmRleGVkR2V0dGVyKCkKLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRJbmRleGVkR2V0dGVyICgpCi0JewotCQlyZXR1cm4gaW5kZXhlZEdldHRlcl87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJpbmRleGVkR2V0dGVyIiBwcm9wZXJ0eSBvZiB0aGlzIEphdmEgQmVhbiBQcm9wZXJ0eSBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBpbmRleGVkR2V0dGVyIFRoZSBJTWV0aG9kIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbmRleGVkR2V0dGVyICggSU1ldGhvZCBpbmRleGVkR2V0dGVyICkKLQl7Ci0JCWluZGV4ZWRHZXR0ZXJfID0gaW5kZXhlZEdldHRlcjsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5I2dldEluZGV4ZWRTZXR0ZXIoKQotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEluZGV4ZWRTZXR0ZXIgKCkKLQl7Ci0JCXJldHVybiBpbmRleGVkU2V0dGVyXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgImluZGV4ZWRTZXR0ZXIiIHByb3BlcnR5IG9mIHRoaXMgSmF2YSBCZWFuIFByb3BlcnR5IGRlc2NyaXB0b3IuCi0JICogQHBhcmFtIGluZGV4ZWRTZXR0ZXIgVGhlIElNZXRob2QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEluZGV4ZWRTZXR0ZXIgKCBJTWV0aG9kIGluZGV4ZWRTZXR0ZXIgKQotCXsKLQkJaW5kZXhlZFNldHRlcl8gPSBpbmRleGVkU2V0dGVyOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNnZXREZWNsYXJpbmdUeXBlKCkKLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0RGVjbGFyaW5nVHlwZSAoKQotCXsKLQkJSU1ldGhvZCBtZXRob2QgPSBnZXRHZXR0ZXIoKTsKLQkJaWYgKG1ldGhvZCA9PSBudWxsKSBtZXRob2QgPSBnZXRTZXR0ZXIoKTsKLQkJaWYgKG1ldGhvZCA9PSBudWxsKSBtZXRob2QgPSBnZXRJbmRleGVkR2V0dGVyKCk7Ci0JCWlmIChtZXRob2QgPT0gbnVsbCkgbWV0aG9kID0gZ2V0SW5kZXhlZFNldHRlcigpOwotCQlyZXR1cm4gbWV0aG9kICE9IG51bGwgPyBtZXRob2QuZ2V0RGVjbGFyaW5nVHlwZSgpIDogbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFXZWJTZXJ2aWNlUnVsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlmZmEzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFXZWJTZXJ2aWNlUnVsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk11bHRpU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci0KLS8qKgotICogQSBiYXNpYyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElKYXZhV2ViU2VydmljZVJ1bGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBKYXZhV2ViU2VydmljZVJ1bGUgaW1wbGVtZW50cyBJSmF2YVdlYlNlcnZpY2VSdWxlCi17Ci0JcHJvdGVjdGVkIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lXzsKLQlwcm90ZWN0ZWQgTGlzdCBzdGF0dXNMaXN0XzsKLQlwcm90ZWN0ZWQgaW50IGlkXzsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZV87Ci0JcHJvdGVjdGVkIFN0cmluZyBuYW1lXzsKLQlwcm90ZWN0ZWQgU3RyaW5nIGRlc2NyaXB0aW9uXzsKLQkKLQlwcm90ZWN0ZWQgSmF2YVdlYlNlcnZpY2VSdWxlICgpCi0JewotCQkvLyBOb3QgcHVibGljbHkgY29uc3RydWN0YWJsZS4KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjZ2V0SWQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SWQgKCkKLQl7Ci0JCXJldHVybiBpZF87Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI2dldE5hbWVzcGFjZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UgKCkKLQl7Ci0JCXJldHVybiBuYW1lc3BhY2VfOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNnZXROYW1lKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLQl7Ci0JCXJldHVybiBuYW1lXzsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjZ2V0RGVzY3JpcHRpb24oKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLQl7Ci0JCXJldHVybiBkZXNjcmlwdGlvbl87Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI2luaXQoKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSApCi0JewotCQllbmdpbmVfID0gZW5naW5lOwotCQlzdGF0dXNMaXN0XyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0Q2xhc3Mob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0RXhjZXB0aW9uKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RXhjZXB0aW9uICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0RmllbGQob3JnLmVjbGlwc2UuamR0LmNvcmUuSUZpZWxkLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRGaWVsZCAoIElGaWVsZCBqZHRGaWVsZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRQcm9wZXJ0eShvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kLCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRQcm9wZXJ0eSAoIElKYXZhQmVhblByb3BlcnR5IGJlYW5Qcm9wZXJ0eSwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRNZXRob2Qob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kICggSU1ldGhvZCBqZHRNZXRob2QsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI2dldFJlc3VsdHMoKQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGdldFJlc3VsdHMgKCkKLQl7Ci0JCUlTdGF0dXMgc3RhdHVzID0gbnVsbDsKLQkJaWYgKHN0YXR1c0xpc3RfLnNpemUoKSA9PSAwKQotCQl7Ci0JCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiIixudWxsKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCU11bHRpU3RhdHVzIG11bHRpU3RhdHVzID0gbmV3IE11bHRpU3RhdHVzKCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIiIsbnVsbCk7Ci0JCQlJdGVyYXRvciBpID0gc3RhdHVzTGlzdF8uaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpLmhhc05leHQoKSkKLQkJCXsKLQkJCQltdWx0aVN0YXR1cy5hZGQoKElTdGF0dXMpaS5uZXh0KCkpOwotCQkJfQotCQkJc3RhdHVzID0gbXVsdGlTdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFXZWJTZXJ2aWNlUnVsZVNldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGVTZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ4NzcxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFXZWJTZXJ2aWNlUnVsZVNldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5NdWx0aVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgb2JqZWN0IG1hbmFnZXMgYSBzZXQgb2YgcnVsZXMuCi0gKiBSdWxlcyBpbiB0aGUgc2V0IG1heSBiZSBlbmFibGVkIG9yIGRpc2FibGVkLgotICovCi1wdWJsaWMgY2xhc3MgSmF2YVdlYlNlcnZpY2VSdWxlU2V0Ci17Ci0JcHJpdmF0ZSBTZXQgZW5hYmxlZFJ1bGVzXyA9IG5ldyBIYXNoU2V0KCk7Ci0JcHJpdmF0ZSBTZXQgZGlzYWJsZWRSdWxlc18gPSBuZXcgSGFzaFNldCgpOwotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcsIGluaXRpYWxseSBlbXB0eSBzZXQgb2YgcnVsZXMuCi0JICovCi0JcHVibGljIEphdmFXZWJTZXJ2aWNlUnVsZVNldCAoKQotCXsKLQkJLy8gTm90aGluZyB0byBkby4KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IHNldCBvZiBydWxlcyBpbml0aWFsaXplZCB3aXRoIHRob3NlCi0JICogZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgb2YgPGNvZGU+cnVsZXM8L2NvZGU+LgotCSAqIEBwYXJhbSBydWxlcyBBbiBhcnJheSBvZiBydWxlcyB0byBhZGQuCi0JICovCi0JcHVibGljIEphdmFXZWJTZXJ2aWNlUnVsZVNldCAoIElKYXZhV2ViU2VydmljZVJ1bGVbXSBydWxlcyApCi0JewotCQlhZGRSdWxlcyhydWxlcyk7Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgYSA8Y29kZT5ydWxlPC9jb2RlPiB0byB0aGUgc2V0LgotCSAqIFJ1bGVzIGFkZGVkIHRvIHRoZSBzZXQgYXJlIGluaXRpYWxseSBlbmFibGVkLgotCSAqIEBwYXJhbSBydWxlIFRoZSBydWxlIHRvIGFkZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRSdWxlICggSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlICkKLQl7Ci0JCWVuYWJsZWRSdWxlc18uYWRkKHJ1bGUpOwotCX0KLQkKLQkvKioKLQkgKiBBZGRzIHNldmVyYWwgPGNvZGU+cnVsZXM8L2NvZGU+IHRvIHRoZSBzZXQuCi0JICogUnVsZXMgYWRkZWQgdG8gdGhlIHNldCBhcmUgaW5pdGlhbGx5IGVuYWJsZWQuCi0JICogQHBhcmFtIHJ1bGVzIFRoZSBhcnJheSBvZiBydWxlcyB0byBhZGQuCi0JICovCi0JcHVibGljIHZvaWQgYWRkUnVsZXMgKCBJSmF2YVdlYlNlcnZpY2VSdWxlW10gcnVsZXMgKQotCXsKLQkJZW5hYmxlZFJ1bGVzXy5hZGRBbGwoQXJyYXlzLmFzTGlzdChydWxlcykpOwotCX0KLQkKLQkvKioKLQkgKiBNYXJrcyB0aGUgZ2l2ZW4gPGNvZGU+cnVsZTwvY29kZT4gYXMgZGlzYWJsZWQgb3IgZW5hYmxlZC4KLQkgKiBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSBydWxlIGlzIG5vdCBhbHJlYWR5IGluCi0JICogdGhlIHNldCwgaW4gb3RoZXIgd29yZHMsIHRoaXMgbWV0aG9kIHdpbGwgbm90IGhhdmUgdGhlCi0JICogc2lkZSBlZmZlY3Qgb2YgYWRkaW5nIGEgcnVsZSB0byB0aGUgc2V0LgotCSAqIEBwYXJhbSBydWxlIFRoZSBydWxlIHRvIGRpc2FibGUgb3IgZW5hYmxlLgotCSAqIEBwYXJhbSBkaXNhYmxlZCBUcnVlIHRvIGRpc2FibGUgdGhlIHJ1bGUgb3IgZmFsc2UgdG8gZW5hYmxlIGl0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhIGNoYW5nZSBpbiBzdGF0dXMgd2FzIGFjdHVhbGx5IG1hZGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gc2V0UnVsZURpc2FibGVkICggSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlLCBib29sZWFuIGRpc2FibGVkICkKLQl7Ci0JCWlmIChkaXNhYmxlZCkKLQkJewotCQkJaWYgKGVuYWJsZWRSdWxlc18ucmVtb3ZlKHJ1bGUpKQotCQkJewotCQkJCWRpc2FibGVkUnVsZXNfLmFkZChydWxlKTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChkaXNhYmxlZFJ1bGVzXy5yZW1vdmUocnVsZSkpCi0JCQl7Ci0JCQkJZW5hYmxlZFJ1bGVzXy5hZGQocnVsZSk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBydWxlcyBpbiB0aGUgc2V0LgotCSAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBydWxlcyBpbiB0aGUgc2V0LgotCSAqLwotCXB1YmxpYyBpbnQgc2l6ZSAoKQotCXsKLQkJcmV0dXJuIGVuYWJsZWRSdWxlc18uc2l6ZSgpICsgZGlzYWJsZWRSdWxlc18uc2l6ZSgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW5hYmxlZCBydWxlcyBpbiB0aGUgc2V0LgotCSAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBlbmFibGVkIHJ1bGVzIGluIHRoZSBzZXQuCi0JICovCi0JcHVibGljIGludCBudW1iZXJFbmFibGVkICgpCi0JewotCQlyZXR1cm4gZW5hYmxlZFJ1bGVzXy5zaXplKCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkaXNhYmxlZCBydWxlcyBpbiB0aGUgc2V0LgotCSAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBkaXNhYmxlZCBydWxlcyBpbiB0aGUgc2V0LgotCSAqLwotCXB1YmxpYyBpbnQgbnVtYmVyRGlzYWJsZWQgKCkKLQl7Ci0JCXJldHVybiBkaXNhYmxlZFJ1bGVzXy5zaXplKCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBlbmFibGVkIHJ1bGVzIGZyb20gdGhlIHNldC4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgZW5hYmxlZCBydWxlcyBmcm9tIHRoZSBzZXQuCi0JICovCi0JcHVibGljIElKYXZhV2ViU2VydmljZVJ1bGVbXSBnZXRFbmFibGVkUnVsZXMgKCkKLQl7Ci0JCXJldHVybiAoSUphdmFXZWJTZXJ2aWNlUnVsZVtdKWVuYWJsZWRSdWxlc18udG9BcnJheShuZXcgSUphdmFXZWJTZXJ2aWNlUnVsZVswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBkaXNhYmxlZCBydWxlcyBmcm9tIHRoZSBzZXQuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IGRpc2FibGVkIHJ1bGVzIGZyb20gdGhlIHNldC4KLQkgKi8KLQlwdWJsaWMgSUphdmFXZWJTZXJ2aWNlUnVsZVtdIGdldERpc2FibGVkUnVsZXMgKCkKLQl7Ci0JCXJldHVybiAoSUphdmFXZWJTZXJ2aWNlUnVsZVtdKWRpc2FibGVkUnVsZXNfLnRvQXJyYXkobmV3IElKYXZhV2ViU2VydmljZVJ1bGVbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhbGwgcnVsZXMgaW4gdGhlIHNldCBieSBjYWxsaW5nCi0JICogdGhlaXIgaW5pdCgpIG1ldGhvZHMgd2l0aCB0aGUgZ2l2ZW4gZW5naW5lLgotCSAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSBpbml0aWFsaXppbmcgCi0JICovCi0JcHVibGljIHZvaWQgaW5pdCAoIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lICkKLQl7Ci0JCUl0ZXJhdG9yIGkgPSBlbmFibGVkUnVsZXNfLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlID0gKElKYXZhV2ViU2VydmljZVJ1bGUpaS5uZXh0KCk7Ci0JCQlydWxlLmluaXQoZW5naW5lKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZpc2l0cyB0aGUgInZpc2l0Q2xhc3MiIG1ldGhvZCBvZiBhbGwgcnVsZXMgaW4gdGhlIHNldC4gCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBKRFQgSVR5cGUgYmVpbmcgdmlzaXRlZC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHN0YWNrIG9mIG9iamVjdHMgdXAgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQlJdGVyYXRvciBpID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWkubmV4dCgpOwotCQkJcnVsZS52aXNpdENsYXNzKGpkdENsYXNzLHBlYW51dFRyYWlsKTsKLQkJfQkJCi0JfQotCi0JLyoqCi0JICogVmlzaXRzIHRoZSAidmlzaXRFeGNlcHRpb24iIG1ldGhvZCBvZiBhbGwgcnVsZXMgaW4gdGhlIHNldC4gCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBKRFQgSVR5cGUgYmVpbmcgdmlzaXRlZC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHN0YWNrIG9mIG9iamVjdHMgdXAgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRFeGNlcHRpb24gKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUudmlzaXRFeGNlcHRpb24oamR0Q2xhc3MscGVhbnV0VHJhaWwpOwotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBWaXNpdHMgdGhlICJ2aXNpdEZpZWxkIiBtZXRob2Qgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQuIAotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgSkRUIElGaWVsZCBiZWluZyB2aXNpdGVkLgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgc3RhY2sgb2Ygb2JqZWN0cyB1cCB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEZpZWxkICggSUZpZWxkIGpkdEZpZWxkLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQlJdGVyYXRvciBpID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWkubmV4dCgpOwotCQkJcnVsZS52aXNpdEZpZWxkKGpkdEZpZWxkLHBlYW51dFRyYWlsKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZpc2l0cyB0aGUgInZpc2l0UHJvcGVydHkiIG1ldGhvZCBvZiBhbGwgcnVsZXMgaW4gdGhlIHNldC4gCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBJSmF2YUJlYW5Qcm9wZXJ0eSBiZWluZyB2aXNpdGVkLgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgc3RhY2sgb2Ygb2JqZWN0cyB1cCB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdFByb3BlcnR5ICggSUphdmFCZWFuUHJvcGVydHkgYmVhblByb3BlcnR5LCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQlJdGVyYXRvciBpID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWkubmV4dCgpOwotCQkJcnVsZS52aXNpdFByb3BlcnR5KGJlYW5Qcm9wZXJ0eSxwZWFudXRUcmFpbCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWaXNpdHMgdGhlICJ2aXNpdE1ldGhvZCIgbWV0aG9kIG9mIGFsbCBydWxlcyBpbiB0aGUgc2V0LiAKLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIEpEVCBJTWV0aG9kIGJlaW5nIHZpc2l0ZWQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSBzdGFjayBvZiBvYmplY3RzIHVwIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kICggSU1ldGhvZCBqZHRNZXRob2QsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCUl0ZXJhdG9yIGkgPSBlbmFibGVkUnVsZXNfLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlID0gKElKYXZhV2ViU2VydmljZVJ1bGUpaS5uZXh0KCk7Ci0JCQlydWxlLnZpc2l0TWV0aG9kKGpkdE1ldGhvZCxwZWFudXRUcmFpbCk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ29sbGVjdHMgdGhlIHJlc3VsdHMgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQgdG9nZXRoZXIuCi0JICogSWYgb25lIG9yIG1vcmUgd2FybmluZ3Mgb3IgZXJyb3JzIGFyZSBmb3VuZCwgcmV0dXJucwotCSAqIGEgc3RhdHVzIG9iamVjdCB3aG9zZSB0b3AgbGV2ZWwgbWVzc2FnZSBpcyB0aGUgcm9vdAotCSAqIG1lc3NhZ2UgcGFzc2VkIHRvIHRoaXMgbWVzc2FnZSwgb3RoZXJ3aXNlLCByZXR1cm5zIGEKLQkgKiBiYXNpYyAiT0siIHN0YXR1cy4KLQkgKiBAcGFyYW0gcm9vdE1lc3NhZ2UgVGhlIHdhcm5pbmcvZXJyb3IgbWVzc2FnZSB0byBhY3QgYXMKLQkgKiB0aGUgcm9vdCBtZXNzYWdlIGlmIG5lY2Vzc2FyeSAoaWUuIGlmIGF0IGxlYXN0IG9uZSBydWxlCi0JICogaW4gdGhlIHNldCByZXBvcnRlZCBhdCBsZWFzdCBvbmUgd2FybmluZy9lcnJvcikuCi0JICogQHJldHVybiBUaGUgY29sbGVjdGl2ZSBzdGF0dXMuCi0JICovCi0JcHVibGljIElTdGF0dXMgZ2V0UmVzdWx0cyAoIFN0cmluZyByb290TWVzc2FnZSApCi0JewotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJdGVyYXRvciBlID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoZS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWUubmV4dCgpOwotCQkJSVN0YXR1cyBzdGF0dXMgPSBydWxlLmdldFJlc3VsdHMoKTsKLQkJCWlmICghc3RhdHVzLmlzT0soKSkKLQkJCXsKLQkJCQlsaXN0LmFkZChzdGF0dXMpOwotCQkJfQotCQl9Ci0JCWlmIChsaXN0LnNpemUoKSA+IDApCi0JCXsKLQkJCU11bHRpU3RhdHVzIG11bHRpU3RhdHVzID0gbmV3IE11bHRpU3RhdHVzKCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAscm9vdE1lc3NhZ2UsbnVsbCk7Ci0JCQlJdGVyYXRvciBsID0gbGlzdC5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGwuaGFzTmV4dCgpKQotCQkJewotCQkJCUlTdGF0dXMgc3RhdHVzID0gKElTdGF0dXMpbC5uZXh0KCk7Ci0JCQkJbXVsdGlTdGF0dXMuYWRkQWxsKHN0YXR1cyk7Ci0JCQl9Ci0JCQlyZXR1cm4gbXVsdGlTdGF0dXM7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIiIsbnVsbCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NDEwNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KRFRSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIGNoZWNrcyBpZiBhIHNlcnZpY2UgY2xhc3MKLSAqIGlzIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdGFibGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlMDAwMSBleHRlbmRzIEphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyBKQVhSUENSdWxlMDAwMSAoKQotCXsKLQkJaWRfID0gMTsKLQkJbmFtZXNwYWNlXyA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL29yZy5lY2xpcHNlLmpzdC53cy9qYXhycGMvMS4xIjsKLQkJbmFtZV8gPSBudWxsOwotCQlkZXNjcmlwdGlvbl8gPSBudWxsOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRDbGFzcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8gQW4gZW1wdHkgcGVhbnV0IHRyYWlsIGltcGxpZXMgdGhpcyBpcyB0aGUgcm9vdAotCQkvLyBjbGFzcyBvciBKQVgtUlBDIHNlcnZpY2UgY2xhc3MuCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMCkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJSkRUUmVzb2x2ZXIgcmVzb2x2ZXIgPSBlbmdpbmVfLmdldEpEVFJlc29sdmVyKCk7Ci0JCQkJaWYgKCFyZXNvbHZlci5pc0NvbnN0cnVjdGFibGUoamR0Q2xhc3MpIHx8IHJlc29sdmVyLmlzSW50ZXJmYWNlKGpkdENsYXNzKSB8fCByZXNvbHZlci5pc0Fic3RyYWN0KGpkdENsYXNzKSkKLQkJCQl7Ci0JCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDAxLGpkdENsYXNzLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKTsKLQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiSW50ZXJuYWwgZXJyb3IiLGUpKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA0OWMzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLnJ1bGVzOwotCi1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkpEVFJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBUaGlzIHJ1bGUgY2hlY2tzIGlmIGEgdmFsdWUgdHlwZSBjbGFzcwotICogaXMgcHVibGljIGRlZmF1bHQgY29uc3RydWN0YWJsZS4KLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1J1bGUwMDAyIGV4dGVuZHMgSmF2YVdlYlNlcnZpY2VSdWxlCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHJ1bGUuCi0JICovCi0JcHVibGljIEpBWFJQQ1J1bGUwMDAyICgpCi0JewotCQlpZF8gPSAyOwotCQluYW1lc3BhY2VfID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvb3JnLmVjbGlwc2UuanN0LndzL2pheHJwYy8xLjEiOwotCQluYW1lXyA9IG51bGw7Ci0JCWRlc2NyaXB0aW9uXyA9IG51bGw7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdENsYXNzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLyBBbiBlbXB0eSBwZWFudXQgdHJhaWwgaW1wbGllcyB0aGlzIGlzIHRoZSByb290IGNsYXNzCi0JCS8vIHJvb3QgY2xhc3Mgb3IgSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLCB3aGVyZWFzIGEgbm9uLWVtcHR5Ci0JCS8vIHBlYW51dCB0cmFpbCBpbXBsaWVzIHRoaXMgaXMgYSBjbGFzcyBmcm9tIGEgbWV0aG9kLCBmaWVsZAotCQkvLyBvciBwcm9wZXJ0eSBzaWduYXR1cmUuIEluIHRoZSBmb3JtZXIgY2FzZSwgcmVtZW1iZXIgdGhlCi0JCS8vIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0eXBlIGp1c3QgaW4gY2FzZSB3ZSBuZWVkIGl0IGZvciB0aGUKLQkJLy8gbGF0dGVyIGNhc2UuCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMCkKLQkJewotCQkJc2VydmljZUNsYXNzTmFtZV8gPSBqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCUpEVFJlc29sdmVyIHJlc29sdmVyID0gZW5naW5lXy5nZXRKRFRSZXNvbHZlcigpOwotCQkJCVN0cmluZyBxbmFtZSA9IGpkdENsYXNzLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQkJCWlmICghcmVzb2x2ZXIuaXNTdGFuZGFyZFR5cGUocW5hbWUpKQotCQkJCXsgCi0JCQkJCWlmICghcmVzb2x2ZXIuaXNDb25zdHJ1Y3RhYmxlKGpkdENsYXNzKSB8fCByZXNvbHZlci5pc0ludGVyZmFjZShqZHRDbGFzcykgfHwgcmVzb2x2ZXIuaXNBYnN0cmFjdChqZHRDbGFzcykpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDAyLHFuYW1lLHNlcnZpY2VDbGFzc05hbWVfKTsKLQkJCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiSW50ZXJuYWwgZXJyb3IiLGUpKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlQ2xhc3NOYW1lXzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM2NWJjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBUaGlzIHJ1bGUgdmVyaWZpZXMgdGhhdCBhIHNlcnZpY2UgY2xhc3MgaGFzIG5vIG92ZXJsb2FkZWQgbWV0aG9kcy4KLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1J1bGUwMDAzIGV4dGVuZHMgSmF2YVdlYlNlcnZpY2VSdWxlCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHJ1bGUuCi0JICovCi0JcHVibGljIEpBWFJQQ1J1bGUwMDAzICgpCi0JewotCQlpZF8gPSAzOwotCQluYW1lc3BhY2VfID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvb3JnLmVjbGlwc2UuanN0LndzL2pheHJwYy8xLjEiOwotCQluYW1lXyA9IG51bGw7Ci0JCWRlc2NyaXB0aW9uXyA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjaW5pdChvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKQotCXsKLQkJc3VwZXIuaW5pdChlbmdpbmUpOwotCQltZXRob2ROYW1lc18gPSBuZXcgSGFzaE1hcCgpOwotCQlvdmVybG9hZGVkTWV0aG9kTmFtZXNfID0gbmV3IEhhc2hTZXQoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdENsYXNzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBbiBlbXB0eSBwZWFudXQgdHJhaWwgaW1wbGllcyB0aGlzIGlzIHRoZSByb290Ci0JCS8vIGNsYXNzLCBha2EuIEpBWC1SUEMgc2VydmljZSBjbGFzcy4gUHV0IGFzaWRlCi0JCS8vIHRoZSBjbGFzcyBuYW1lIGluIGNhc2UgdmlzaXRNZXRob2QoKSBuZWVkcyBpdC4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAwKQotCQl7Ci0JCQlzZXJ2aWNlQ2xhc3NOYW1lXyA9IGpkdENsYXNzLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdE1ldGhvZChvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRNZXRob2QgKCBJTWV0aG9kIGpkdE1ldGhvZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQSBwZWFudXQgdHJhaWwgb2YgbGVuZ3RoIG9uZSBpbXBsaWVzIHRoaXMgaXMgYSBtZXRob2QKLQkJLy8gYmVsb25naW5nIHRvIHRoZSByb290IGNsYXNzLCBha2EuIEpBWC1SUEMgc2VydmljZSBjbGFzcy4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAxKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvLwotCQkJCS8vIElmIHdlIGhhdmUgZW5jb3VudGVyZWQgdGhpcyBtZXRob2QgYWxyZWFkeSBidXQgaGF2ZW4ndAotCQkJCS8vIHJlcG9ydGVkIHRoZSBvdmVybG9hZCBjb25kaXRpb24sIHJlcG9ydCBpdC4KLQkJCQkvLwotCQkJCVN0cmluZyBtZXRob2ROYW1lID0gamR0TWV0aG9kLmdldEVsZW1lbnROYW1lKCk7Ci0JCQkJU3RyaW5nIGZpcnN0UGFyYW1ldGVyU2lnbmF0dXJlID0gKFN0cmluZyltZXRob2ROYW1lc18uZ2V0KG1ldGhvZE5hbWUpOwotCQkJCVN0cmluZyB0aGlzUGFyYW1ldGVyU2lnbmF0dXJlID0gZmxhdHRlbmVkU2lnbmF0dXJlT2YoamR0TWV0aG9kKTsKLQkJCQlpZiAodGhpc1BhcmFtZXRlclNpZ25hdHVyZSAhPSBudWxsKQotCQkJCXsKLQkJCQkJaWYgKGZpcnN0UGFyYW1ldGVyU2lnbmF0dXJlICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCS8vCi0JCQkJCQkvLyBJZiB3ZSBoYXZlIGVuY291bnRlcmVkIHRoaXMgbWV0aG9kJ3MgbmFtZSBhbHJlYWR5LAotCQkJCQkJLy8gYnV0IGhhdmUgbm90IHlldCBkZXRlcm1pbmVkIGlmIGl0IGlzIG92ZXJsb2FkZWQsCi0JCQkJCQkvLyB0aGVuIGNvbXBhcmUgdGhpcyBtZXRob2QncyBwYXJhbWV0ZXIgc2lnbmF0dXJlIHdpdGgKLQkJCQkJCS8vIHRoYXQgb2YgdGhlICJmaXJzdCBzaWduYXR1cmUiIG9mIHRoZSBtZXRob2QgbmFtZS4KLQkJCQkJCS8vIFRoZSBtb21lbnQgd2UgZmluZCBhIHNlY29uZCBzaWduYXR1cmUgZm9yIGEgZ2l2ZW4KLQkJCQkJCS8vIG1ldGhvZCBuYW1lLCB3ZSBoYXZlIGFuIG92ZXJsb2FkIGNvbmRpdGlvbi4KLQkJCQkJCS8vCi0JCQkJCQlpZiAoIW92ZXJsb2FkZWRNZXRob2ROYW1lc18uY29udGFpbnMobWV0aG9kTmFtZSkgJiYgIXRoaXNQYXJhbWV0ZXJTaWduYXR1cmUuZXF1YWxzKGZpcnN0UGFyYW1ldGVyU2lnbmF0dXJlKSkKLQkJCQkJCXsKLQkJCQkJCQlvdmVybG9hZGVkTWV0aG9kTmFtZXNfLmFkZChtZXRob2ROYW1lKTsKLQkJCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwMyxtZXRob2ROYW1lLHNlcnZpY2VDbGFzc05hbWVfKTsKLQkJCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCS8vCi0JCQkJCQkvLyBJZiB3ZSBoYXZlIHJlY29yZGVkIG5vIHNpZ25hdHVyZSBmb3IgdGhlIGdpdmVuIG1ldGhvZAotCQkJCQkJLy8gbmFtZSAoaWUuIHdlIGhhdmUgbm90IGVuY291bnRlcmVkIHRoZSBtZXRob2QgbmFtZSB5ZXQpLAotCQkJCQkJLy8gdGhlbiByZWNvcmQgdGhpcyBvbmUuIEFueSAiZmlyc3Qgc2lnbmF0dXJlIiB3aWxsIGRvLgotCQkJCQkJLy8KLQkJCQkJCW1ldGhvZE5hbWVzXy5wdXQobWV0aG9kTmFtZSx0aGlzUGFyYW1ldGVyU2lnbmF0dXJlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQkvLyBEbyBub3RoaW5nLgotCQkJfQotCQl9Ci0JfQotCQotCS8qCi0JICogR3JhYnMgdGhlIHR5cGVzIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBnaXZlbiBtZXRob2QKLQkgKiBhbmQgZmxhdHRlbnMgdGhlbiBpbnRvIGEgc2luZ2xlIHN0cmluZyBzdWZmaWNpZW50IHRvCi0JICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBvdmVybG9hZGVkIHZzLiBvdmVycmlkZGVuIG1ldGhvZHMuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZmxhdHRlbmVkU2lnbmF0dXJlT2YgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nW10gc2lnbmF0dXJlcyA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKS5nZXRQYXJhbWV0ZXJUeXBlTmFtZXMoamR0TWV0aG9kKTsKLQkJU3RyaW5nQnVmZmVyIGZsYXR0ZW5lZFNpZ25hdHVyZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChpbnQgcz0wOyBzPHNpZ25hdHVyZXMubGVuZ3RoOyBzKyspCi0JCXsKLQkJCWZsYXR0ZW5lZFNpZ25hdHVyZS5hcHBlbmQoc2lnbmF0dXJlc1tzXSkuYXBwZW5kKCIsIik7Ci0JCX0KLQkJcmV0dXJuIGZsYXR0ZW5lZFNpZ25hdHVyZS50b1N0cmluZygpOwotCX0KLQkKLQlwcml2YXRlIE1hcCBtZXRob2ROYW1lc187Ci0JcHJpdmF0ZSBTZXQgb3ZlcmxvYWRlZE1ldGhvZE5hbWVzXzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlQ2xhc3NOYW1lXzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY2Y2Y3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkpEVFJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBUaGlzIHJ1bGUgdmVyaWZpZXMgdGhhdCB0aGUgbWV0aG9kcyBvZiBhIHNlcnZpY2UgY2xhc3MKLSAqIHVzZXMgb25seSBKQVgtUlBDIHN1cHBvcnRlZCB0eXBlcy4KLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1J1bGUwMDA1IGV4dGVuZHMgSmF2YVdlYlNlcnZpY2VSdWxlCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHJ1bGUuCi0JICovCi0JcHVibGljIEpBWFJQQ1J1bGUwMDA1ICgpCi0JewotCQlpZF8gPSA1OwotCQluYW1lc3BhY2VfID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvb3JnLmVjbGlwc2UuanN0LndzL2pheHJwYy8xLjEiOwotCQluYW1lXyA9IG51bGw7Ci0JCWRlc2NyaXB0aW9uXyA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjaW5pdChvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKQotCXsKLQkJc3VwZXIuaW5pdChlbmdpbmUpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0Q2xhc3Mob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEFuIGVtcHR5IHBlYW51dCB0cmFpbCBpbXBsaWVzIHRoaXMgaXMgdGhlIHJvb3QKLQkJLy8gY2xhc3MsIGFrYS4gSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLiBQdXQgYXNpZGUKLQkJLy8gdGhlIGNsYXNzIG5hbWUgaW4gY2FzZSB2aXNpdE1ldGhvZCgpIG5lZWRzIGl0LgotCQkvLwotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDApCi0JCXsKLQkJCXNlcnZpY2VDbGFzc05hbWVfID0gamR0Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0TWV0aG9kKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZCAoIElNZXRob2QgamR0TWV0aG9kLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBIHBlYW51dCB0cmFpbCBvZiBsZW5ndGggb25lIGltcGxpZXMgdGhpcyBpcyBhIG1ldGhvZAotCQkvLyBiZWxvbmdpbmcgdG8gdGhlIHJvb3QgY2xhc3MsIGFrYS4gSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLgotCQkvLwotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDEpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCVN0cmluZyBtZXRob2ROYW1lID0gamR0TWV0aG9kLmdldEVsZW1lbnROYW1lKCk7Ci0JCQkJLy8KLQkJCQkvLyBDaGVjayB0aGUgbWV0aG9kIHJldHVybiB0eXBlIGZvciBjb21wbGlhbmNlLgotCQkJCS8vIEFueSBKYXZhIHByaW1pdGl2ZSBvciBzdGFuZGFyZCAoImphdmEuIiBvciAiamF2YXguIikgdHlwZQotCQkJCS8vIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBKQVgtUlBDIHdpbGwgZ2V0IGZsYWdnZWQuCi0JCQkJLy8gQW55IG5vbi1wcmltaXRpdmUgb3Igbm9uLXN0YW5kYXJkIHR5cGUgaXMgcHJlc3VtZWQgdG8gYmUgYQotCQkJCS8vIHBvdGVudGlhbCB2YWx1ZSB0eXBlIGFuZCBpcyBieXBhc3NlZCBzaW5jZSB0aGUgcnVsZSBlbmdpbmUKLQkJCQkvLyB3aWxsIG5hdmlnYXRlIGludG8gdGhlIHBvdGVudGlhbCB2YWx1ZSB0eXBlJ3MgY2xhc3MuCi0JCQkJLy8KLQkJCQlKRFRSZXNvbHZlciByZXNvbHZlciA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgcmV0dXJuVHlwZU5hbWUgPSByZXNvbHZlci5nZXRSZXR1cm5UeXBlTmFtZShqZHRNZXRob2QpOwotCQkJCWlmICgocmVzb2x2ZXIuaXNQcmltaXRpdmVUeXBlKHJldHVyblR5cGVOYW1lKSB8fCByZXNvbHZlci5pc1N0YW5kYXJkVHlwZShyZXR1cm5UeXBlTmFtZSkpICYmICFyZXNvbHZlci5pc0pBWFJQQ1N0YW5kYXJkVHlwZShyZXR1cm5UeXBlTmFtZSkpCi0JCQkJewotCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwNSxuZXcgU3RyaW5nW10ge21ldGhvZE5hbWUsc2VydmljZUNsYXNzTmFtZV8scmV0dXJuVHlwZU5hbWV9KTsKLQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJfQotCQkJCS8vCi0JCQkJLy8gQ2hlY2sgdGhlIG1ldGhvZCBwYXJhbWV0ZXIgdHlwZXMgZm9yIGNvbXBsaWFuY2UuCi0JCQkJLy8gU2FtZSBjb21tZW50IGFzIGFib3ZlLCBvbmx5IGFwcGxpZWQgdG8gdGhlIG1ldGhvZCdzIHBhcmFtZXRlcnMuCi0JCQkJLy8KLQkJCQlTdHJpbmdbXSBwYXJhbWV0ZXJUeXBlTmFtZXMgPSByZXNvbHZlci5nZXRQYXJhbWV0ZXJUeXBlTmFtZXMoamR0TWV0aG9kKTsKLQkJCQlmb3IgKGludCBwPTA7IHA8cGFyYW1ldGVyVHlwZU5hbWVzLmxlbmd0aDsgcCsrKQotCQkJCXsKLQkJCQkJaWYgKChyZXNvbHZlci5pc1ByaW1pdGl2ZVR5cGUocGFyYW1ldGVyVHlwZU5hbWVzW3BdKSB8fCByZXNvbHZlci5pc1N0YW5kYXJkVHlwZShwYXJhbWV0ZXJUeXBlTmFtZXNbcF0pKSAmJiAhcmVzb2x2ZXIuaXNKQVhSUENTdGFuZGFyZFR5cGUocGFyYW1ldGVyVHlwZU5hbWVzW3BdKSkKLQkJCQkJewotCQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDUsbmV3IFN0cmluZ1tdIHttZXRob2ROYW1lLHNlcnZpY2VDbGFzc05hbWVfLHBhcmFtZXRlclR5cGVOYW1lc1twXX0pOwotCQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJLy8gRG8gbm90aGluZy4KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlQ2xhc3NOYW1lXzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3YWZkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkpEVFJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBUaGlzIHJ1bGUgdmVyaWZpZXMgdGhhdCB0aGUgZmllbGRzIGFuZCBwcm9wZXJ0aWVzIG9mIGEKLSAqIHZhbHVlIHR5cGUgY2xhc3MgdXNlcyBvbmx5IEpBWC1SUEMgc3VwcG9ydGVkIHR5cGVzLgotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDUnVsZTAwMDYgZXh0ZW5kcyBKYXZhV2ViU2VydmljZVJ1bGUKLXsKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgcnVsZS4KLQkgKi8KLQlwdWJsaWMgSkFYUlBDUnVsZTAwMDYgKCkKLQl7Ci0JCWlkXyA9IDY7Ci0JCW5hbWVzcGFjZV8gPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9vcmcuZWNsaXBzZS5qc3Qud3MvamF4cnBjLzEuMSI7Ci0JCW5hbWVfID0gbnVsbDsKLQkJZGVzY3JpcHRpb25fID0gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSNpbml0KG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSApCi0JewotCQlzdXBlci5pbml0KGVuZ2luZSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRDbGFzcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQW4gZW1wdHkgcGVhbnV0IHRyYWlsIGltcGxpZXMgdGhpcyBpcyB0aGUgcm9vdAotCQkvLyBjbGFzcywgYWthLiBKQVgtUlBDIHNlcnZpY2UgY2xhc3MuIFB1dCBhc2lkZQotCQkvLyB0aGUgY2xhc3MgbmFtZSBpbiBjYXNlIHZpc2l0TWV0aG9kKCkgbmVlZHMgaXQuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMCkKLQkJewotCQkJc2VydmljZUNsYXNzTmFtZV8gPSBqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJfQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRNZXRob2Qob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RmllbGQgKCBJRmllbGQgamR0RmllbGQsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEEgcGVhbnV0IHRyYWlsIG9mIGxlbmd0aCBncmVhdGVyIHRoYW4gb25lIGltcGxpZXMgdGhpcyBpcyBhCi0JCS8vIGZpZWxkIGJlbG9uZ2luZyB0byBhIGNsYXNzIG90aGVyIHRoYW4gdGhlIHJvb3QgKGFrYS4gSkFYLVJQQwotCQkvLyBzZXJ2aWNlKSBjbGFzcywgbmFtZWx5IGEgcHJlc3VtZWQgdmFsdWUgdHlwZSBjbGFzcy4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA+IDEpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCS8vCi0JCQkJLy8gQW55IEphdmEgcHJpbWl0aXZlIG9yIHN0YW5kYXJkICgiamF2YS4iIG9yICJqYXZheC4iKSB0eXBlCi0JCQkJLy8gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEpBWC1SUEMgd2lsbCBnZXQgZmxhZ2dlZC4KLQkJCQkvLyBBbnkgbm9uLXByaW1pdGl2ZSBvciBub24tc3RhbmRhcmQgdHlwZSBpcyBwcmVzdW1lZCB0byBiZSBhCi0JCQkJLy8gcG90ZW50aWFsIHZhbHVlIHR5cGUgYW5kIGlzIGJ5cGFzc2VkIHNpbmNlIHRoZSBydWxlIGVuZ2luZQotCQkJCS8vIHdpbGwgbmF2aWdhdGUgaW50byB0aGUgcG90ZW50aWFsIHZhbHVlIHR5cGUncyBjbGFzcy4KLQkJCQkvLwotCQkJCUpEVFJlc29sdmVyIHJlc29sdmVyID0gZW5naW5lXy5nZXRKRFRSZXNvbHZlcigpOwotCQkJCVN0cmluZyBmaWVsZFR5cGVOYW1lID0gcmVzb2x2ZXIuZ2V0RmllbGRUeXBlTmFtZShqZHRGaWVsZCk7Ci0JCQkJaWYgKChyZXNvbHZlci5pc1ByaW1pdGl2ZVR5cGUoZmllbGRUeXBlTmFtZSkgfHwgcmVzb2x2ZXIuaXNTdGFuZGFyZFR5cGUoZmllbGRUeXBlTmFtZSkpICYmICFyZXNvbHZlci5pc0pBWFJQQ1N0YW5kYXJkVHlwZShmaWVsZFR5cGVOYW1lKSkKLQkJCQl7Ci0JCQkJCS8vCi0JCQkJCS8vIFRoZSBmaWVsZCBwcmV0dHkgbXVjaCBNVVNUIGJlIGRlY2xhcmVkIGluIGEgdHlwZSBvcgotCQkJCQkvLyB3ZSB3b3VsZCBub3QgaGF2ZSBnb3R0ZW4gaGVyZS4gU3RpbGwsIGJlc3QgdG8gYmUgc2FmZS4KLQkJCQkJLy8KLQkJCQkJSVR5cGUgdmFsdWVUeXBlID0gamR0RmllbGQuZ2V0RGVjbGFyaW5nVHlwZSgpOwotCQkJCQlpZiAodmFsdWVUeXBlICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyB2YWx1ZVR5cGVDbGFzc05hbWUgPSB2YWx1ZVR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCQkJCQlTdHJpbmcgZmllbGROYW1lID0gamR0RmllbGQuZ2V0RWxlbWVudE5hbWUoKTsKLQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDA2LG5ldyBTdHJpbmdbXSB7ZmllbGROYW1lLHZhbHVlVHlwZUNsYXNzTmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyxmaWVsZFR5cGVOYW1lfSk7Ci0JCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQkvLyBEbyBub3RoaW5nLgotCQkJfQotCQl9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRQcm9wZXJ0eShvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHksIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdFByb3BlcnR5ICggSUphdmFCZWFuUHJvcGVydHkgcHJvcGVydHksIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEEgcGVhbnV0IHRyYWlsIG9mIGxlbmd0aCBncmVhdGVyIHRoYW4gb25lIGltcGxpZXMgdGhpcyBpcyBhCi0JCS8vIHByb3BlcnR5IGJlbG9uZ2luZyB0byBhIGNsYXNzIG90aGVyIHRoYW4gdGhlIHJvb3QgKGFrYS4gSkFYLVJQQwotCQkvLyBzZXJ2aWNlKSBjbGFzcywgbmFtZWx5IGEgcHJlc3VtZWQgdmFsdWUgdHlwZSBjbGFzcy4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA+IDEpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCS8vCi0JCQkJLy8gQW55IEphdmEgcHJpbWl0aXZlIG9yIHN0YW5kYXJkICgiamF2YS4iIG9yICJqYXZheC4iKSB0eXBlCi0JCQkJLy8gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEpBWC1SUEMgd2lsbCBnZXQgZmxhZ2dlZC4KLQkJCQkvLyBBbnkgbm9uLXByaW1pdGl2ZSBvciBub24tc3RhbmRhcmQgdHlwZSBpcyBwcmVzdW1lZCB0byBiZSBhCi0JCQkJLy8gcG90ZW50aWFsIHZhbHVlIHR5cGUgYW5kIGlzIGJ5cGFzc2VkIHNpbmNlIHRoZSBydWxlIGVuZ2luZQotCQkJCS8vIHdpbGwgbmF2aWdhdGUgaW50byB0aGUgcG90ZW50aWFsIHZhbHVlIHR5cGUncyBjbGFzcy4KLQkJCQkvLwotCQkJCUpEVFJlc29sdmVyIHJlc29sdmVyID0gZW5naW5lXy5nZXRKRFRSZXNvbHZlcigpOwotCQkJCVN0cmluZyBwcm9wZXJ0eVR5cGVOYW1lID0gcmVzb2x2ZXIuZ2V0UHJvcGVydHlUeXBlTmFtZShwcm9wZXJ0eSk7Ci0JCQkJaWYgKChyZXNvbHZlci5pc1ByaW1pdGl2ZVR5cGUocHJvcGVydHlUeXBlTmFtZSkgfHwgcmVzb2x2ZXIuaXNTdGFuZGFyZFR5cGUocHJvcGVydHlUeXBlTmFtZSkpICYmICFyZXNvbHZlci5pc0pBWFJQQ1N0YW5kYXJkVHlwZShwcm9wZXJ0eVR5cGVOYW1lKSkKLQkJCQl7Ci0JCQkJCS8vCi0JCQkJCS8vIFRoZSBmaWVsZCBwcmV0dHkgbXVjaCBNVVNUIGJlIGRlY2xhcmVkIGluIGEgdHlwZSBvcgotCQkJCQkvLyB3ZSB3b3VsZCBub3QgaGF2ZSBnb3R0ZW4gaGVyZS4gU3RpbGwsIGJlc3QgdG8gYmUgc2FmZS4KLQkJCQkJLy8KLQkJCQkJSVR5cGUgdmFsdWVUeXBlID0gcHJvcGVydHkuZ2V0RGVjbGFyaW5nVHlwZSgpOwotCQkJCQlpZiAodmFsdWVUeXBlICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyB2YWx1ZVR5cGVDbGFzc05hbWUgPSB2YWx1ZVR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCQkJCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gcHJvcGVydHkuZ2V0TmFtZSgpOwotCQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDYsbmV3IFN0cmluZ1tdIHtwcm9wZXJ0eU5hbWUsdmFsdWVUeXBlQ2xhc3NOYW1lLHNlcnZpY2VDbGFzc05hbWVfLHByb3BlcnR5VHlwZU5hbWV9KTsKLQkJCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCS8vIERvIG5vdGhpbmcuCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNsYXNzTmFtZV87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGVTZXRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGVTZXRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMWM3YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlU2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGVTZXQ7Ci0KLS8qKgotICogQSBmYWN0b3J5IHRoYXQgcHJvZHVjZXMgYSBKYXZhV2ViU2VydmljZVJ1bGVTZXQKLSAqIGZvciB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1J1bGVTZXRGYWN0b3J5Ci17Ci0JcHJpdmF0ZSBKQVhSUENSdWxlU2V0RmFjdG9yeSAoKQotCXsKLQkJLy8gTm90IHB1YmxpY2x5IGNvbnN0cnVjdGFibGUuCi0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYSBzZXQgb2YgcnVsZXMgZm9yIGFuYWx5emluZyBKYXZhIGNsYXNzZXMKLQkgKiBmb3IgY29tcGxpYW5jZSB0byB0aGUgcnVsZXMgb2YgSkFYLVJQQyAxLjEuICAKLQkgKiBAcmV0dXJuIEEgc2V0IG9mIEpBWC1SUEMgMS4xIGFuYWx5c2lzIHJ1bGVzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IG5ld1J1bGVTZXQgKCkKLQl7Ci0JCUphdmFXZWJTZXJ2aWNlUnVsZVNldCBzZXQgPSBuZXcgSmF2YVdlYlNlcnZpY2VSdWxlU2V0KCk7Ci0JCXNldC5hZGRSdWxlKG5ldyBKQVhSUENSdWxlMDAwMSgpKTsKLQkJc2V0LmFkZFJ1bGUobmV3IEpBWFJQQ1J1bGUwMDAyKCkpOwotCQlzZXQuYWRkUnVsZShuZXcgSkFYUlBDUnVsZTAwMDMoKSk7Ci0JCXNldC5hZGRSdWxlKG5ldyBKQVhSUENSdWxlMDAwNSgpKTsKLQkJc2V0LmFkZFJ1bGUobmV3IEpBWFJQQ1J1bGUwMDA2KCkpOwotCQlyZXR1cm4gc2V0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9QZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTJjMDUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9QZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqIDIwMDgwNDE2ICAgMjI3MzU5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBUZXN0IGZhY2lsaXRpZXMgZG8gbm90IHJlc3BlY3QgZGVmYXVsdCBvcmRlciBpbiBwbHVnaW4gY3VzdG9taXphdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dCBpbXBsZW1lbnRzIFNjZW5hcmlvQ29udGV4dAotewotICBwdWJsaWMgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCgpCi0gIHsKLSAgICBzdXBlcihXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkpOyAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgU2NlbmFyaW9EZWZhdWx0cyBkZWZhdWx0cyA9IG5ldyBTY2VuYXJpb0RlZmF1bHRzKCk7Ci0gICAgU3RyaW5nW10gaWRzID0gZGVmYXVsdHMuZ2V0V2ViU2VydmljZVRlc3RJZHMoKTsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGkgIT0gMCkgc2IuYXBwZW5kKCIsIik7Ci0gICAgICBzYi5hcHBlbmQoaWRzW2ldKTsKLSAgICB9Ci0gICAgU3RyaW5nIG5vbkphdmFUZXN0U2VydmljZSA9IGRlZmF1bHRzLmdldE5vbkphdmFUZXN0U2VydmljZURlZmF1bHQoKTsKLSAgICBzZXREZWZhdWx0U3RyaW5nSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RFU1RfVFlQRVMsIHNiLnRvU3RyaW5nKCkpOwotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX05PTl9KQVZBX1RFU1RfU0VSVklDRSwgbm9uSmF2YVRlc3RTZXJ2aWNlKTsKLSAgICAKLSAgICBzZXREZWZhdWx0U3RyaW5nSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9DTElFTlRfV0VCU0VSVklDRV9UWVBFLCBkZWZhdWx0cy53ZWJzZXJ2aWNlQ2xpZW50VHlwZURlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSwgZGVmYXVsdHMud2Vic2VydmljZVR5cGVJZERlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSwgZGVmYXVsdHMuZ2VuZXJhdGVQcm94eURlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9MQVVOQ0hfV0VCU0VSVklDRV9FWFBMT1JFUiwgZGVmYXVsdHMubGF1bmNoV2Vic2VydmljZUV4cGxvcmVyRGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX0lOU1RBTExfV0VCU0VSVklDRSwgZGVmYXVsdHMuaW5zdGFsbFdlYnNlcnZpY2VEZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfSU5TVEFMTF9DTElFTlQsIGRlZmF1bHRzLmluc3RhbGxDbGllbnREZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfU1RBUlRfV0VCU0VSVklDRSwgZGVmYXVsdHMuc3RhcnRXZWJzZXJ2aWNlRGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX1RFU1RfV0VCU0VSVklDRSwgZGVmYXVsdHMudGVzdFdlYnNlcnZpY2VEZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfTU9OSVRPUl9XRUJTRVJWSUNFLCBkZWZhdWx0cy5nZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKSk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX0xBVU5DSF9TQU1QTEUsIGRlZmF1bHRzLmxhdW5jaFNhbXBsZSgpICk7Ci0gICAgCi0gICAgc2V0RGVmYXVsdEludElmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSwgZGVmYXVsdHMuc2VydmljZUdlbmVyYXRpb25EZWZhdWx0KCkpOyAvL2p2aAotICAgIHNldERlZmF1bHRJbnRJZk5vRGVmYXVsdChQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCwgZGVmYXVsdHMuY2xpZW50R2VuZXJhdGlvbkRlZmF1bHQoKSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCkKLSAgewotICAgIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgcmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgU3RyaW5nW10gaWRzID0gZ2V0V2ViU2VydmljZVRlc3RJZHMoKTsKLSAgICBWZWN0b3IgbmV3VGVzdENhc2VzID0gbmV3IFZlY3RvcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgcmVnaXN0cnkKLSAgICAgICAgICAuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKGlkc1tpXSk7Ci0gICAgICBpZiAod3NlICE9IG51bGwgJiYgd3NlLnRlc3RXU0RMKCkpIAotCQkgIG5ld1Rlc3RDYXNlcy5hZGRFbGVtZW50KHdzZS5nZXRMYWJlbCgpKTsKLSAgICB9Ci0JU3RyaW5nW10gd3NkbFRlc3RBcnJheSA9IG5ldyBTdHJpbmdbbmV3VGVzdENhc2VzLnNpemUoKV07Ci0JRW51bWVyYXRpb24gZSA9IG5ld1Rlc3RDYXNlcy5lbGVtZW50cygpOwotCWludCBpID0gMDsKLQl3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKXsKLQkgIHdzZGxUZXN0QXJyYXlbaV0gPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLQkgIGkrKzsKLQl9Ci0JCi0JcmV0dXJuIHdzZGxUZXN0QXJyYXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0SWRzKFN0cmluZ1tdIGlkcykKLSAgewotCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykKLQl7Ci0JICBpZiAoaSAhPSAwKSBzYi5hcHBlbmQoIiwiKTsKLQkgIHNiLmFwcGVuZChpZHNbaV0pOwotCX0KLQlzZXRWYWx1ZShQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVEVTVF9UWVBFUywgc2IudG9TdHJpbmcoKSk7ICAKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlVGVzdElkcyhTdHJpbmcgdmFsdWUpCi0gIHsKLQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotCVN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotCWZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgewotCSAgLy8gMTU0NTQzOiB3ZSBoYXZlIHRvIGNvbnRpbnVlIHRvIGludGVycHJldCB0aGUgb2xkIGxhYmVsIHN0eWxlIHByZWZlcmVuY2VzCi0JICBzW2ldID0gV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmxhYmVsVG9JZChzdC5uZXh0VG9rZW4oKSk7Ci0JfQotCXJldHVybiBzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKCkKLSAgewotCXJldHVybiBnZXRXZWJTZXJ2aWNlVGVzdElkcyhnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9URVNUX1RZUEVTKSk7IAotICB9ICAKLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0V2ViU2VydmljZVRlc3RJZHMoKQotICB7Ci0JcmV0dXJuIGdldFdlYlNlcnZpY2VUZXN0SWRzKGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RFU1RfVFlQRVMpKTsgCi0gIH0JCi0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKFN0cmluZ1tdIGlkcykKLSAgewotCS8vIDE1NDU0MzogZGVwcmVjYXRlZCwgbm9vcAotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKQotICB7Ci0JV2ViU2VydmljZVRlc3RSZWdpc3RyeSByZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQlTdHJpbmdbXSBpZHMgPSBnZXRXZWJTZXJ2aWNlVGVzdElkcygpOyAgCi0gICAgVmVjdG9yIGxhYmVscyA9IG5ldyBWZWN0b3IoKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3c2UgPSAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pIHJlZ2lzdHJ5Ci0gICAgICAgICAgLmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlJZChpZHNbaV0pOwotICAgICAgaWYgKHdzZSAhPSBudWxsKSAKLQkJICBsYWJlbHMuYWRkRWxlbWVudCh3c2UuZ2V0TGFiZWwoKSk7Ci0gICAgfQkgIAkgIAotICAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW2xhYmVscy5zaXplKCldOwotICAgIGxhYmVscy5jb3B5SW50byhzKTsKLSAgICByZXR1cm4gczsKLSAgfQotCi0gIHB1YmxpYyBTY2VuYXJpb0NvbnRleHQgY29weSgpCi0gIHsKLSAgICBUcmFuc2llbnRTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IG5ldyBUcmFuc2llbnRTY2VuYXJpb0NvbnRleHQoKTsKLSAgICBjb250ZXh0LnNldFdlYlNlcnZpY2VUZXN0SWRzKGdldFdlYlNlcnZpY2VUZXN0SWRzKCkpOwotICAgIGNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RUeXBlcyhnZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKCkpOwotICAgIGNvbnRleHQuc2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKGdldE5vbkphdmFUZXN0U2VydmljZSgpKTsKLSAgICAKLSAgICBjb250ZXh0LnNldENsaWVudFdlYlNlcnZpY2VUeXBlKCBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0gICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVHlwZSggZ2V0V2ViU2VydmljZVR5cGUoKSApOwotICAgIGNvbnRleHQuc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCBnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKSApOwotICAgIGNvbnRleHQuc2V0U3RhcnRXZWJTZXJ2aWNlKCBnZXRTdGFydFdlYlNlcnZpY2UoKSApOwotICAgIGNvbnRleHQuc2V0R2VuZXJhdGVQcm94eSggZ2V0R2VuZXJhdGVQcm94eSgpICk7Ci0gICAgY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggZ2V0VGVzdFdlYlNlcnZpY2UoKSApOwotICAgIGNvbnRleHQuc2V0TW9uaXRvcldlYlNlcnZpY2UoZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSk7Ci0gICAgY29udGV4dC5zZXRMYXVuY2hTYW1wbGVFbmFibGVkKCBpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKSApOwotICAgIAotICAgIHJldHVybiBjb250ZXh0OwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldENsaWVudFdlYlNlcnZpY2VUeXBlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNTdHJpbmcoUFJFRkVSRU5DRV9DTElFTlRfV0VCU0VSVklDRV9UWVBFKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9DTElFTlRfV0VCU0VSVklDRV9UWVBFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRHZW5lcmF0ZVByb3h5KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfR0VORVJBVEVfUFJPWFkpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9MQVVOQ0hfV0VCU0VSVklDRV9FWFBMT1JFUik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlckRlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfTEFVTkNIX1dFQlNFUlZJQ0VfRVhQTE9SRVIpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldFN0YXJ0V2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfU1RBUlRfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfU1RBUlRfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX0lOU1RBTExfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9JTlNUQUxMX0NMSUVOVCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxDbGllbnREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX0lOU1RBTExfQ0xJRU5UKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRUZXN0V2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0V2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9URVNUX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0V2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfVEVTVF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRXZWJTZXJ2aWNlVHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9UWVBFKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVHlwZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldENsaWVudFdlYlNlcnZpY2VUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRXZWJTZXJ2aWNlVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9DTElFTlRfV0VCU0VSVklDRV9UWVBFLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0R2VuZXJhdGVQcm94eShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoIFBSRUZFUkVOQ0VfR0VORVJBVEVfUFJPWFksIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlcihib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoIFBSRUZFUkVOQ0VfTEFVTkNIX1dFQlNFUlZJQ0VfRVhQTE9SRVIsIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRJbnN0YWxsV2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX0lOU1RBTExfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldEluc3RhbGxXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsQ2xpZW50KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9JTlNUQUxMX0NMSUVOVCwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldFN0YXJ0V2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3RhcnRXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0VGVzdFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9URVNUX1dFQlNFUlZJQ0UsIHZhbHVlKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldFdlYlNlcnZpY2VUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RZUEUsIHZhbHVlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0TW9uaXRvcldlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfTU9OSVRPUl9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX01PTklUT1JfV0VCU0VSVklDRSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yV2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9NT05JVE9SX1dFQlNFUlZJQ0UsIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRMYXVuY2hTYW1wbGVFbmFibGVkRGVmYXVsdCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hTYW1wbGVFbmFibGVkRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9MQVVOQ0hfU0FNUExFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0xBVU5DSF9TQU1QTEUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFNhbXBsZUVuYWJsZWQoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaFNhbXBsZUVuYWJsZWQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX0xBVU5DSF9TQU1QTEUsIHZhbHVlKTsKLSAgfQotICAKLSAgLy9qdmgKLSAgcHVibGljIGludCBnZXRHZW5lcmF0ZVdlYlNlcnZpY2UoKQotICB7Ci0JICByZXR1cm4gZ2V0VmFsdWVBc0ludChQUkVGRVJFTkNFX0dFTkVSQVRFX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gZ2V0RGVmYXVsdEludChQUkVGRVJFTkNFX0dFTkVSQVRFX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVdlYlNlcnZpY2UoaW50IHZhbHVlKQotICB7Ci0JICBzZXRWYWx1ZShQUkVGRVJFTkNFX0dFTkVSQVRFX1dFQlNFUlZJQ0UsIHZhbHVlKTsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRHZW5lcmF0ZUNsaWVudERlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gZ2V0RGVmYXVsdEludChQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVDbGllbnQoKQotICB7Ci0JICByZXR1cm4gZ2V0VmFsdWVBc0ludChQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlQ2xpZW50KGludCB2YWx1ZSkKLSAgewotCSAgc2V0VmFsdWUoUFJFRkVSRU5DRV9HRU5FUkFURV9DTElFTlQsIHZhbHVlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9QZXJzaXN0ZW50VURESVByZWZlcmVuY2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MmIxZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgVURESVByZWZlcmVuY2VDb250ZXh0Ci17Ci0gIHB1YmxpYyBQZXJzaXN0ZW50VURESVByZWZlcmVuY2VDb250ZXh0KCkKLSAgewotICAgIHN1cGVyKFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2FkKCkKLSAgewotICAgIHNldERlZmF1bHQoUFJFRkVSRU5DRV9VRERJX0NBVF9EQVRBX0NPTFVNTl9ERUxJTUlURVIsIFVERElQcmVmZXJlbmNlRGVmYXVsdHMuZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKSk7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfU1RSSU5HX0RFTElNSVRFUiwgVURESVByZWZlcmVuY2VEZWZhdWx0cy5nZXRVZGRpQ2F0RGF0YVN0cmluZ0RlbGltaXRlcigpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVkZGlDYXREYXRhQ29sdW1uRGVsaW1pdGVyKFN0cmluZyBkZWxpbWl0ZXIpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfQ09MVU1OX0RFTElNSVRFUiwgZGVsaW1pdGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNTdHJpbmcoUFJFRkVSRU5DRV9VRERJX0NBVF9EQVRBX0NPTFVNTl9ERUxJTUlURVIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcikKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9TVFJJTkdfREVMSU1JVEVSLCBkZWxpbWl0ZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVZGRpQ2F0RGF0YVN0cmluZ0RlbGltaXRlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfU1RSSU5HX0RFTElNSVRFUik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE3ZDY2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvU2NlbmFyaW9Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgU2NlbmFyaW9Db250ZXh0IAotewotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9URVNUX1RZUEVTID0gIndlYlNlcnZpY2VUZXN0VHlwZXMiOwotICAgIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfTk9OX0pBVkFfVEVTVF9TRVJWSUNFPSAibm9uSmF2YVRlc3RTZXJ2aWNlIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RZUEUgPSAid2ViU2VydmljZVR5cGUiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1NUQVJUX1dFQlNFUlZJQ0UgPSAic3RhcnRXZWJTZXJ2aWNlIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9JTlNUQUxMX1dFQlNFUlZJQ0UgPSAiaW5zdGFsbFdlYlNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0lOU1RBTExfQ0xJRU5UID0gImluc3RhbGxDbGllbnQiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0xBVU5DSF9XRUJTRVJWSUNFX0VYUExPUkVSID0gImxhdW5jaFdlYlNlcnZpY2VFeHBsb3JlciI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfR0VORVJBVEVfUFJPWFkgPSAiZ2VuZXJhdGVQcm94eSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfQ0xJRU5UX1dFQlNFUlZJQ0VfVFlQRSA9ICJjbGllbnRXZWJTZXJ2aWNlVHlwZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfVEVTVF9XRUJTRVJWSUNFID0gInRlc3RXZWJTZXJ2aWNlIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9NT05JVE9SX1dFQlNFUlZJQ0UgPSAibW9uaXRvcldlYlNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0xBVU5DSF9TQU1QTEUgPSAibGF1bmNoU2FtcGxlIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9HRU5FUkFURV9XRUJTRVJWSUNFID0gImdlbmVyYXRlV2ViU2VydmljZSI7IC8vanZoCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9HRU5FUkFURV9DTElFTlQgPSAiZ2VuZXJhdGVDbGllbnQiOyAvL2p2aCAgCi0gIAotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19URVNUPTA7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTX1NUQVJUPTE7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTX0lOU1RBTEw9MjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfREVQTE9ZPTM7ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfQVNTRU1CTEU9NDsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfREVWRUxPUD01OyAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTX05PTkU9NjsKLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdElkcyhTdHJpbmdbXSBpZHMpOwotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVRlc3RUeXBlcyhTdHJpbmdbXSB0ZXN0VHlwZXMpOwotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldE5vbkphdmFUZXN0U2VydmljZSgpOwotICAKLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVHlwZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgIHNldFdlYlNlcnZpY2VUeXBlKCBTdHJpbmcgdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxXZWJTZXJ2aWNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxXZWJTZXJ2aWNlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRJbnN0YWxsV2ViU2VydmljZSggYm9vbGVhbiB2YWx1ZSApOwotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudCgpOwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50RGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRJbnN0YWxsQ2xpZW50KCBib29sZWFuIHZhbHVlICk7Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZSgpOwotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFdlYlNlcnZpY2VEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldFN0YXJ0V2ViU2VydmljZSggYm9vbGVhbiB2YWx1ZSApOwotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlckRlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICAgc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCBib29sZWFuIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHlEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldEdlbmVyYXRlUHJveHkoIGJvb2xlYW4gdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZURlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICBzZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSggU3RyaW5nIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0V2ViU2VydmljZSgpOwotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0V2ViU2VydmljZURlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICAgc2V0VGVzdFdlYlNlcnZpY2UoIGJvb2xlYW4gdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldE1vbml0b3JXZWJTZXJ2aWNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldE1vbml0b3JXZWJTZXJ2aWNlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yV2ViU2VydmljZShib29sZWFuIHZhbHVlKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzTGF1bmNoU2FtcGxlRW5hYmxlZCgpOwotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hTYW1wbGVFbmFibGVkRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRMYXVuY2hTYW1wbGVFbmFibGVkKCBib29sZWFuIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZURlZmF1bHQoKTsKLSAgcHVibGljIGludCBnZXRHZW5lcmF0ZVdlYlNlcnZpY2UoKTsKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKGludCB2YWx1ZSk7Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50RGVmYXVsdCgpOwotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50KCk7Ci0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlQ2xpZW50KGludCB2YWx1ZSk7Ci0gIAotICBwdWJsaWMgU2NlbmFyaW9Db250ZXh0IGNvcHkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0RlZmF1bHRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvU2NlbmFyaW9EZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjRlMTUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0RlZmF1bHRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLkxhYmVsc0FuZElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLQotCi0KLXB1YmxpYyBjbGFzcyBTY2VuYXJpb0RlZmF1bHRzCi17ICAKLSAgCi0JCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlVGVzdElkcygpCi0gIHsKLSAgCS8vd2Ugd2lsbCBzZXQgdGhlIGhvbWUgZ3Jvd24gc2FtcGxlIGFzIHRoZSBmaXJzdCBjaG9pY2UKLSAgCVdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgdGVzdFJlZ2lzdHJ5ID0gV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAJCi0gIAlMYWJlbHNBbmRJZHMgbGFiZWxzYW5kaWRzID0gdGVzdFJlZ2lzdHJ5LmdldExhYmVsc0FuZElEcygpOwotICAJU3RyaW5nW10gaWRzID0gbGFiZWxzYW5kaWRzLmdldElkc18oKTsKLSAgCQotICAJU3RyaW5nW10gbmV3SWRzID0gbmV3IFN0cmluZ1tpZHMubGVuZ3RoXTsKLSAgCWludCBpbmRleCA9IC0xOwotICAJZm9yKGludCBpID0gMDtpPGlkcy5sZW5ndGg7aSsrKXsKLSAgCSAgaWYoaWRzW2ldLmVxdWFscygib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XZWJTZXJ2aWNlU2FtcGxlVGVzdCIpKSAgCQotICAJICAgIGluZGV4ID0gaTsgICAKLSAgCX0KLSAgCWlmKGluZGV4ICE9IC0xKXsKLSAgCSAgbmV3SWRzWzBdID0gaWRzW2luZGV4XTsKLSAgCSAgaW50IGogPSAxOwotICAJICBmb3IoaW50IGkgPSAwO2k8aWRzLmxlbmd0aDtpKyspewotICAJICAgIGlmKGkgIT0gaW5kZXgpewotICAJICAJICBuZXdJZHNbal0gPSBpZHNbaV07IAotICAJICAgICAgaisrOwotICAJICAgIH0KLSAgCSAgfQotICAJfQotICAJZWxzZSByZXR1cm4gaWRzOwotICAJCi0gIAlyZXR1cm4gbmV3SWRzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE5vbkphdmFUZXN0U2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuICJXZWIgU2VydmljZXMgRXhwbG9yZXIiOwkKLSAgfSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgd2Vic2VydmljZVR5cGVJZERlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuICIwL29yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgc2VydmljZUdlbmVyYXRpb25EZWZhdWx0KCkKLSAgewotCSAgcmV0dXJuIFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVDsgIAotICB9Ci0gIAotICBwdWJsaWMgaW50IGNsaWVudEdlbmVyYXRpb25EZWZhdWx0KCkKLSAgewotCSAgcmV0dXJuIFNjZW5hcmlvQ29udGV4dC5XU19OT05FOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHN0YXJ0V2Vic2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGluc3RhbGxXZWJzZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaW5zdGFsbENsaWVudERlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGxhdW5jaFdlYnNlcnZpY2VFeHBsb3JlckRlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZW5lcmF0ZVByb3h5RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgd2Vic2VydmljZUNsaWVudFR5cGVEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiAib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiB0ZXN0V2Vic2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gbGF1bmNoU2FtcGxlKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlY2U5ODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1RyYW5zaWVudFNjZW5hcmlvQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNTQ1NDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgaXMgdHJhY2tpbmcgZXh0ZW5zaW9ucyB1c2luZyBsYWJlbCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBJRAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBUcmFuc2llbnRTY2VuYXJpb0NvbnRleHQgaW1wbGVtZW50cyBTY2VuYXJpb0NvbnRleHQKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSB3ZWJTZXJ2aWNlVGVzdElkczsKLSAgcHJpdmF0ZSBTdHJpbmdbXSB3ZWJTZXJ2aWNlVGVzdFR5cGVzOwotICBwcml2YXRlIFN0cmluZ1tdIG5vbkphdmFUZXN0U2VydmljZTsKLSAgcHJpdmF0ZSBTdHJpbmcgICB3ZWJTZXJ2aWNlVHlwZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgaW5zdGFsbFdlYlNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gIGluc3RhbGxDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gIHN0YXJ0V2ViU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgbGF1bmNoV2ViU2VydmljZUV4cGxvcmVyXzsKLSAgcHJpdmF0ZSBib29sZWFuICBnZW5lcmF0ZVByb3h5XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICBjbGllbnRXZWJTZXJ2aWNlVHlwZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgdGVzdFdlYlNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gIG1vbml0b3JXZWJTZXJ2aWNlOwotICBwcml2YXRlIGJvb2xlYW4gIGxhdW5jaFNhbXBsZV87Ci0gIHByaXZhdGUgaW50IGdlbmVyYXRlV2ViU2VydmljZV87IC8vanZoCi0gIHByaXZhdGUgaW50IGdlbmVyYXRlQ2xpZW50XzsgLy9qdmgKLSAgCi0gIHByaXZhdGUgU2NlbmFyaW9EZWZhdWx0cyBkZWZhdWx0cyA9IG5ldyBTY2VuYXJpb0RlZmF1bHRzKCk7Ci0gCi0gIHB1YmxpYyBUcmFuc2llbnRTY2VuYXJpb0NvbnRleHQgKCkge30KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBub25KYXZhVGVzdFNlcnZpY2U7Ci0gIH0KLSAKLSAgcHVibGljIHZvaWQgc2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKFN0cmluZ1tdIG5vbkphdmFUZXN0U2VydmljZSkKLSAgewotICAgIHRoaXMubm9uSmF2YVRlc3RTZXJ2aWNlID0gbm9uSmF2YVRlc3RTZXJ2aWNlOwkKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdElkcyhTdHJpbmdbXSB3ZWJTZXJ2aWNlVGVzdElkcykgewotICAgIHRoaXMud2ViU2VydmljZVRlc3RJZHMgPSB3ZWJTZXJ2aWNlVGVzdElkczsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKCkgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlVGVzdElkczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVRlc3RUeXBlcyhTdHJpbmdbXSB3ZWJTZXJ2aWNlVGVzdFR5cGVzKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlVGVzdFR5cGVzID0gd2ViU2VydmljZVRlc3RUeXBlczsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VUZXN0VHlwZXM7CQotICB9Ci0gCi0gIHB1YmxpYyBTY2VuYXJpb0NvbnRleHQgY29weSgpIHsKLSAgCVRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCgpOwotICAJY29udGV4dC5zZXRXZWJTZXJ2aWNlVGVzdElkcyhnZXRXZWJTZXJ2aWNlVGVzdElkcygpKTsKLQljb250ZXh0LnNldFdlYlNlcnZpY2VUZXN0VHlwZXMoZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpKTsKLQljb250ZXh0LnNldE5vbkphdmFUZXN0U2VydmljZShnZXROb25KYXZhVGVzdFNlcnZpY2UoKSk7Ci0JCi0JY29udGV4dC5zZXRXZWJTZXJ2aWNlVHlwZSggZ2V0V2ViU2VydmljZVR5cGUoKSApOwotCWNvbnRleHQuc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoIGdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkgKTsKLQljb250ZXh0LnNldEdlbmVyYXRlUHJveHkoIGdldEdlbmVyYXRlUHJveHkoKSApOwotCWNvbnRleHQuc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCBnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKSApOwotCWNvbnRleHQuc2V0SW5zdGFsbFdlYlNlcnZpY2UoIGdldEluc3RhbGxXZWJTZXJ2aWNlKCkgKTsKLQljb250ZXh0LnNldEluc3RhbGxDbGllbnQoIGdldEluc3RhbGxDbGllbnQoKSApOwotCWNvbnRleHQuc2V0U3RhcnRXZWJTZXJ2aWNlKCBnZXRTdGFydFdlYlNlcnZpY2UoKSApOwotCWNvbnRleHQuc2V0VGVzdFdlYlNlcnZpY2UoIGdldFRlc3RXZWJTZXJ2aWNlKCkgKTsKLQljb250ZXh0LnNldE1vbml0b3JXZWJTZXJ2aWNlKGdldE1vbml0b3JXZWJTZXJ2aWNlKCkpOwotCWNvbnRleHQuc2V0TGF1bmNoU2FtcGxlRW5hYmxlZCggaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkgKTsKLQljb250ZXh0LnNldEdlbmVyYXRlV2ViU2VydmljZShnZXRHZW5lcmF0ZVdlYlNlcnZpY2UoKSk7ICAvL2p2aAotCXJldHVybiBjb250ZXh0OwotICB9Ci0gCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50V2ViU2VydmljZVR5cGVfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMud2Vic2VydmljZUNsaWVudFR5cGVEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0R2VuZXJhdGVQcm94eSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAgIHJldHVybiBnZW5lcmF0ZVByb3h5XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eURlZmF1bHQoKXsgcmV0dXJuIGRlZmF1bHRzLmdlbmVyYXRlUHJveHlEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpCi0gIHsKLSAgICByZXR1cm4gbGF1bmNoV2ViU2VydmljZUV4cGxvcmVyXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyRGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMubGF1bmNoV2Vic2VydmljZUV4cGxvcmVyRGVmYXVsdCgpOyB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldEluc3RhbGxXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsV2ViU2VydmljZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxXZWJTZXJ2aWNlRGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMuaW5zdGFsbFdlYnNlcnZpY2VEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFsbENsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxDbGllbnREZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5pbnN0YWxsQ2xpZW50RGVmYXVsdCgpOyB9Ci0gIAotICAKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0U3RhcnRXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gc3RhcnRXZWJTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlRGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMuc3RhcnRXZWJzZXJ2aWNlRGVmYXVsdCgpOyB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldFRlc3RXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiB0ZXN0V2ViU2VydmljZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMudGVzdFdlYnNlcnZpY2VEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0V2ViU2VydmljZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gd2ViU2VydmljZVR5cGVfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMud2Vic2VydmljZVR5cGVJZERlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRDbGllbnRXZWJTZXJ2aWNlVHlwZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgY2xpZW50V2ViU2VydmljZVR5cGVfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0R2VuZXJhdGVQcm94eShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgZ2VuZXJhdGVQcm94eV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlcihib29sZWFuIHZhbHVlKQotICB7Ci0gICAgbGF1bmNoV2ViU2VydmljZUV4cGxvcmVyXyA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldEluc3RhbGxXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsV2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgaW5zdGFsbFdlYlNlcnZpY2VfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0SW5zdGFsbFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIGluc3RhbGxDbGllbnRfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0U3RhcnRXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHN0YXJ0V2ViU2VydmljZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRUZXN0V2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHRlc3RXZWJTZXJ2aWNlXyA9IHZhbHVlOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0V2ViU2VydmljZVR5cGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUeXBlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHdlYlNlcnZpY2VUeXBlXyA9IHZhbHVlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRNb25pdG9yV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbW9uaXRvcldlYlNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldE1vbml0b3JXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdHMuZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yV2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgbW9uaXRvcldlYlNlcnZpY2UgPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRMYXVuY2hTYW1wbGVFbmFibGVkRGVmYXVsdCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hTYW1wbGVFbmFibGVkRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdHMubGF1bmNoU2FtcGxlKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTGF1bmNoU2FtcGxlRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gbGF1bmNoU2FtcGxlXzsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRMYXVuY2hTYW1wbGVFbmFibGVkKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMYXVuY2hTYW1wbGVFbmFibGVkKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBsYXVuY2hTYW1wbGVfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlV2ViU2VydmljZShpbnQgdmFsdWUpCi0gIHsKLQkgIGdlbmVyYXRlV2ViU2VydmljZV8gPSB2YWx1ZTsgIAotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gZGVmYXVsdHMuc2VydmljZUdlbmVyYXRpb25EZWZhdWx0KCk7ICAKLSAgfSAgCi0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZSgpCi0gIHsKLQkgIHJldHVybiBnZW5lcmF0ZVdlYlNlcnZpY2VfOyAKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRHZW5lcmF0ZUNsaWVudERlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gZGVmYXVsdHMuY2xpZW50R2VuZXJhdGlvbkRlZmF1bHQoKTsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRHZW5lcmF0ZUNsaWVudCgpCi0gIHsKLQkgIHJldHVybiBnZW5lcmF0ZUNsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlQ2xpZW50KGludCB2YWx1ZSkKLSAgewotCSAgZ2VuZXJhdGVDbGllbnRfID0gdmFsdWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9VRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9VRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0YWRkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVURESVByZWZlcmVuY2VDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0OwotCi1wdWJsaWMgaW50ZXJmYWNlIFVERElQcmVmZXJlbmNlQ29udGV4dCAKLXsKLSAgLyoKLSAgICogVGhpcyBjb25zdGFudCBTdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIGNvbHVtbiBkZWxpbWl0ZXIgZm9yIHVzZXItZGVmaW5lZCBVRERJCi0gICAqIENhdGVnb3J5IGRhdGEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfQ09MVU1OX0RFTElNSVRFUiA9ICJ1ZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlciI7Ci0gIAotICAvKgotICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgc3RyaW5nIGRlbGltaXRlciBmb3IgdXNlci1kZWZpbmVkIFVEREkKLSAgICogQ2F0ZWdvcnkgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9TVFJJTkdfREVMSU1JVEVSID0gInVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyIjsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFVkZGlDYXREYXRhQ29sdW1uRGVsaW1pdGVyKFN0cmluZyBkZWxpbWl0ZXIpOwotICBwdWJsaWMgU3RyaW5nIGdldFVkZGlDYXREYXRhQ29sdW1uRGVsaW1pdGVyKCk7Ci0gIHB1YmxpYyB2b2lkIHNldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKFN0cmluZyBkZWxpbWl0ZXIpOwotICBwdWJsaWMgU3RyaW5nIGdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlRGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9VRERJUHJlZmVyZW5jZURlZmF1bHRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZWJhOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVRERJUHJlZmVyZW5jZURlZmF1bHRzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldFVkZGlDYXREYXRhQ29sdW1uRGVsaW1pdGVyKCkKLSAgewotICAgIHJldHVybiAiIyI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCkKLSAgewotICAgIHJldHVybiAiXCIiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RhdGEvTGFiZWxzQW5kSWRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RhdGEvTGFiZWxzQW5kSWRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDBmNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9kYXRhL0xhYmVsc0FuZElkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGE7Ci0KLXB1YmxpYyBjbGFzcyBMYWJlbHNBbmRJZHMKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBsYWJlbHNfOwotICBwcml2YXRlIFN0cmluZ1tdIGlkc187Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpZHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldElkc18oKQotICB7Ci0gICAgcmV0dXJuIGlkc187Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBpZHNfIFRoZSBpZHNfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkc18oU3RyaW5nW10gaWRzXykKLSAgewotICAgIHRoaXMuaWRzXyA9IGlkc187Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgbGFiZWxzXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRMYWJlbHNfKCkKLSAgewotICAgIHJldHVybiBsYWJlbHNfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbGFiZWxzXyBUaGUgbGFiZWxzXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMYWJlbHNfKFN0cmluZ1tdIGxhYmVsc18pCi0gIHsKLSAgICB0aGlzLmxhYmVsc18gPSBsYWJlbHNfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RhdGEvVHlwZVJ1bnRpbWVTZXJ2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9UeXBlUnVudGltZVNlcnZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWI0NDQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9UeXBlUnVudGltZVNlcnZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGE7Ci0KLXB1YmxpYyBjbGFzcyBUeXBlUnVudGltZVNlcnZlcgotewotICBwcml2YXRlIFN0cmluZyB0eXBlSWRfICAgICA9ICIiOwotICBwcml2YXRlIFN0cmluZyBydW50aW1lSWRfICA9ICIiOwotICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJJZF8gICA9ICIiOwotICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkXzsKLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHJ1bnRpbWVJZF8uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVJZCgpCi0gIHsKLSAgICByZXR1cm4gcnVudGltZUlkXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHJ1bnRpbWVJZF8gVGhlIHJ1bnRpbWVJZF8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UnVudGltZUlkKFN0cmluZyBydW50aW1lSWRfKQotICB7Ci0gICAgdGhpcy5ydW50aW1lSWRfID0gcnVudGltZUlkXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJJZF8uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlcklkKCkKLSAgewotICAgIHJldHVybiBzZXJ2ZXJJZF87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2ZXJJZF8gVGhlIHNlcnZlcklkXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJZChTdHJpbmcgc2VydmVySWRfKQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJJZF8gPSBzZXJ2ZXJJZF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVySW5zdGFuY2VJZF8uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlckluc3RhbmNlSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gc2VydmVySW5zdGFuY2VJZF8gVGhlIHNlcnZlckluc3RhbmNlSWRfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfKQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJJbnN0YW5jZUlkXyA9IHNlcnZlckluc3RhbmNlSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHR5cGVJZF8uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVJZCgpCi0gIHsKLSAgICByZXR1cm4gdHlwZUlkXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHR5cGVJZF8gVGhlIHR5cGVJZF8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZUlkKFN0cmluZyB0eXBlSWRfKQotICB7Ci0gICAgdGhpcy50eXBlSWRfID0gdHlwZUlkXzsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gInR5cGUoIiArIHR5cGVJZF8gKyAiKSBydW50aW1lKCIgKyBydW50aW1lSWRfICsgIikgZmFjdG9yeSgiICsgc2VydmVySWRfICsgIikgc2Vydkluc3RJZCgiICsgc2VydmVySW5zdGFuY2VJZF8gKyAiKSI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqZWN0KQotICB7Ci0JaWYgKG9iamVjdCAhPSBudWxsICYmIG9iamVjdCBpbnN0YW5jZW9mIFR5cGVSdW50aW1lU2VydmVyKQotCXsKLQkJVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzID0gKFR5cGVSdW50aW1lU2VydmVyKW9iamVjdDsKLQkJU3RyaW5nIHRyc1R5cGVJZCA9IHRycy5nZXRUeXBlSWQoKTsKLQkJU3RyaW5nIHRyc1J1bnRpbWVJZCA9IHRycy5nZXRSdW50aW1lSWQoKTsKLQkJU3RyaW5nIHRyc1NlcnZlcklkID0gdHJzLmdldFNlcnZlcklkKCk7Ci0JCVN0cmluZyB0cnNTZXJ2ZXJJbnN0YW5jZUlkID0gdHJzLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJCi0JCWJvb2xlYW4gdHlwZUlkc01hdGNoID0gKCh0eXBlSWRfID09IG51bGwpICYmICh0cnNUeXBlSWQgPT0gbnVsbCkpIHx8ICgodHlwZUlkXyAhPSBudWxsKSAmJiAodHlwZUlkXy5lcXVhbHModHJzVHlwZUlkKSkpOwotCQlpZiAoIXR5cGVJZHNNYXRjaCkgcmV0dXJuIGZhbHNlOwotCQlib29sZWFuIHJ1bnRpbWVJZHNNYXRjaCA9ICgocnVudGltZUlkXyA9PSBudWxsKSAmJiAodHJzUnVudGltZUlkID09IG51bGwpKSB8fCAoKHJ1bnRpbWVJZF8gIT0gbnVsbCkgJiYgKHJ1bnRpbWVJZF8uZXF1YWxzKHRyc1J1bnRpbWVJZCkpKTsKLQkJaWYgKCFydW50aW1lSWRzTWF0Y2gpIHJldHVybiBmYWxzZTsKLQkJYm9vbGVhbiBzZXJ2ZXJJZHNNYXRjaCA9ICgoc2VydmVySWRfID09IG51bGwpICYmICh0cnNTZXJ2ZXJJZCA9PSBudWxsKSkgfHwgKChzZXJ2ZXJJZF8gIT0gbnVsbCkgJiYgKHNlcnZlcklkXy5lcXVhbHModHJzU2VydmVySWQpKSk7Ci0JCWlmICghc2VydmVySWRzTWF0Y2gpIHJldHVybiBmYWxzZTsKLQkJYm9vbGVhbiBzZXJ2ZXJJbnN0YW5jZUlkc01hdGNoID0gKChzZXJ2ZXJJbnN0YW5jZUlkXyA9PSBudWxsKSAmJiAodHJzU2VydmVySW5zdGFuY2VJZCA9PSBudWxsKSkgfHwgKChzZXJ2ZXJJbnN0YW5jZUlkXyAhPSBudWxsKSAmJiAoc2VydmVySW5zdGFuY2VJZF8uZXF1YWxzKHRyc1NlcnZlckluc3RhbmNlSWQpKSk7Ci0JCWlmICghc2VydmVySW5zdGFuY2VJZHNNYXRjaCkgcmV0dXJuIGZhbHNlOwotCQkKLQkJcmV0dXJuIHRydWU7CQkKLQl9Ci0JCi0JcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RpYWxvZy9JU3RhdHVzRGlhbG9nQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RpYWxvZy9JU3RhdHVzRGlhbG9nQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YjEzNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9kaWFsb2cvSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRpYWxvZzsKLQotLyoqCi0qIENvbnN0YW50cyBmb3Igc3RhdHVzIGRpYWxvZ3MKLSovCi1wdWJsaWMgaW50ZXJmYWNlIElTdGF0dXNEaWFsb2dDb25zdGFudHMgewotCi0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIlllcyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlFU19JRCA9IDI7Ci0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIlllcyB0byBhbGwiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZRVNfVE9fQUxMX0lEID0gNDsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiQ2FuY2VsIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FOQ0VMX0lEID0gMTsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiT0siIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19JRCA9IDA7Ci0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIkRldGFpbHMiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVRBSUxTX0lEID0gMTM7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXhlY3V0YWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWM2OTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0qIEFsbCBFeHRlbnNpb25zIHdpdGggZXhlY3R1dGFibGUgZXh0ZW5zaW9ucyBzaG91bGQgaW1wbGVtZW50IHRoaXMgCi0qIHRvIGZpdCBvdXIgZnJhbWV3b3JrCi0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXhlY3V0YWJsZQotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgLyoqCi0gICpSZXR1cm5zIGEgd2l6YXJkIGZyYWdtZW50IGZvciB0aGlzIGV4ZW50aW9uIHR5cGUgCi0gICoKLSAgKi8KLSAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGdldEZpbmlzaENvbW1hbmQoKTsKLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NmE5YTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci0KLQotLyoqCi0qIFRoaXMgcmVwcmVzZW50cyBhbiBleHRlbnNpb24gaW4gdGhlIHBsdWdpbiByZWdpc3RyeSAKLSogSXQgam9iIGlzIHRvIGFjdCBhcyBhIHByb3h5IHRvIHRoZSBpY29uZmlnZWxlbWVudAotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2ViU2VydmljZUV4dGVuc2lvbgotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBJZiB0aGUgZXh0ZW5zaW9uIGhhcyBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgb3IgYSBmcmFnbWVudCBhZGRlZAotICAqIEByZXR1cm4gV2ViU2VydmljZUV4ZWN1dGFibGUgdGhpcyBpbnRlcmZhY2UgaG9sZHMgZXhlY3V0YWJsZSBjb2RlIGFuZCBhIAotICAqIGZyYWdtZW50Ci0gICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0V2ViU2VydmljZUV4ZWN1dGFibGVFeHRlbnNpb24oKTsKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEBwYXJhbSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29uZmlnRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCk7Ci0gCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCAKLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGdldENvbmZpZ0VsZW1lbnQoKTsKLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA3MjBkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLQotCi0KLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VFeHRlbnNpb25JbXBsIGltcGxlbWVudHMgV2ViU2VydmljZUV4dGVuc2lvbgotewotCi0JcHJpdmF0ZSBJTG9nCWxvZ187Ci0JCi0gIC8qCi0gICogVGhlIENvbmZpZ0VsZW1lbnQgdGhhdCBob2xkcyBleHRlbnNpb24gaW5mbwotICAqLwotICBwcm90ZWN0ZWQgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnRfOwotCi0gIC8qCi0gICogVGhlIGV4dGVuc2lvbiBleGVjdXRhYmxlIAotICAqLwotICBwcm90ZWN0ZWQgV2ViU2VydmljZUV4ZWN1dGFibGUgd2ViU2VydmljZUV4ZWN1dGFibGVfOwotICAKLQotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbkltcGwoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0gIHsKLSAgICBjb25maWdFbGVtZW50XyA9IGNvbmZpZ0VsZW1lbnQ7Ci0gICAgbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0gIH0KLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBJZiB0aGUgZXh0ZW5zaW9uIGhhcyBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgb3IgYSBmcmFnbWVudCBhZGRlZAotICAqIEByZXR1cm4gV2ViU2VydmljZUV4ZWN1dGFibGUgdGhpcyBpbnRlcmZhY2UgaG9sZHMgZXhlY3V0YWJsZSBjb2RlIGFuZCBhIAotICAqIGZyYWdtZW50Ci0gICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0V2ViU2VydmljZUV4ZWN1dGFibGVFeHRlbnNpb24oKQotICB7Ci0gICAgaWYod2ViU2VydmljZUV4ZWN1dGFibGVfICE9IG51bGwpIHJldHVybiB3ZWJTZXJ2aWNlRXhlY3V0YWJsZV87Ci0KLSAgICB0cnl7Ci0gICAgICByZXR1cm4gY29uZmlnRWxlbWVudF8uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLSAgICB9Y2F0Y2ggKENvcmVFeGNlcHRpb24gZSl7Ci0gICAgICBsb2dfLmxvZyhJTG9nLkVSUk9SLCA1MDI5LCB0aGlzLCAiZ2V0V2ViU2VydmljZUV4ZWN1dGFibGVFeHRlbnNpb24iLGUpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgY29uZmlnIGVsZW1lbnQgdGhhdCBob2xkcyB0aGUgZXh0ZW5zaW9uIGluZm8KLSAgKiBAcGFyYW0gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldENvbmZpZ0VsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0gIHsKLSAgICBjb25maWdFbGVtZW50XyA9IGNvbmZpZ0VsZW1lbnQ7Ci0gIH0JCi0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgY29uZmlnIGVsZW1lbnQgdGhhdCBob2xkcyB0aGUgZXh0ZW5zaW9uIGluZm8KLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGdldENvbmZpZ0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGNvbmZpZ0VsZW1lbnRfOwotICB9Ci0gIAotICAvKioKLSAgKiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGJlaW5nIHVzZWQKLSAgKiBAcmV0dXJuIFN0cmluZyBuYW1lIG9mIHRoaXMgZXh0ZW5zaW9uCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggIm5hbWUiICk7Ci0gIH0KLQotCi19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjMWQwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0OwotCi0KLS8qKgotKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgZXh0ZW5zaW9ucyBmb3IgYSBnaXZlbiBleHRlbnNpb24tcG9pbnQgCi0qIGFsc28gcmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdHMgCi0qCi0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMKLSAgKiBAcmV0dXJuIFRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBleHRlbnNpb25zLgotICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbk5hbWVzICgpOwotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdAotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbiBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSggU3RyaW5nIG5hbWUpOwotCi0gIC8qKgotICAqIFJldHVybnMgQWxsIGV4dGVudGlvbiBvYmplY3RzIGluIHRoaXMgcmVnaXN0cnkKLSAgKkByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3RzCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnMoKTsKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmJlYTExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotCi0KLS8qKgotKiBUaGlzIGlzIGEgZ2VuZXJpYyByZWdpc3RyeSB3aGljaCBzZXRzIHVwIGdlbmVyYWwgY29kZSBpbiBoYW5kbGluZyAgIAotKiBJQ29uZmlnRWxlbWVudHMgZm9yIGFuIGV4dGVuc2lvbgotKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsIGltcGxlbWVudHMgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAKLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBuYW1lRXh0ZW5zaW9uVGFibGVfOwotICBwcm90ZWN0ZWQgVmVjdG9yIGlkXzsKLSAgcHJvdGVjdGVkIFZlY3RvciBsYWJlbF87Ci0gIHByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsc2FuZGlkc187Ci0gICAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsKCkKLSAgewotICAgIG5hbWVFeHRlbnNpb25UYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgbGFiZWxfID0gbmV3IFZlY3RvcigpOwotICAgIGlkXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBsb2FkRXh0ZW5zaW9ucygpOwotICB9Ci0gIAotICAvKioKLSAgKiBDaGlsZHJlbiByZWdpc3RyaWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9uIHR5cGVzIAotICAqIEByZXR1cm4gV2Vic2VydmljZUV4dGVuc2lvbiBob2xkcyBhIGNvbmZpZyBlbGVtCi0gICogZm9yIHRoYXQgZXh0ZW5zaW9uIGNhcGFibGUgb2YgY3JlYXRpbmcgYW4gZXhlY3V0YWJsZSBmaWxlCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpOwotCi0gIC8qKgotICAqIENoaWxkcmVuIG11c3QgaW1wbGVtZW50IGhvdyB0aGV5IGdldCB0aGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gCi0gICogQHJldHVybiBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBhbiBhcnJheSBvZiBlbGVtZW50cyBwYXJ0aWN1bGFyIHRvIHRoYXQKLSAgKiBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IElDb25maWd1cmF0aW9uRWxlbWVudFtdIGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0KLSAgLyoKLSAgKiBMb2FkcyBXZWJTZXJ2aWNlRXh0ZW5zaW9ucyBmb3IgV2ViU2VydmljZUNsaWVudFRlc3QgaW50byB0aGlzIHJlZ2lzdHJ5LgotICAqIFRoaXMgaXMgZG9uZSBieSBxdWVyeWluZyB0aGUgcGx1Z2luIHJlZ2lzdHJ5IGZvciBhbGwgZXh0ZW5zaW9ucwotICAqIHRoYXQgZXh0ZW5kIHdlYlNlcnZpY2VDbGllbnRUZXN0ICAKLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgbG9hZEV4dGVuc2lvbnMgKCkKLSAgeyAgICAKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWcgPSBnZXRDb25maWdFbGVtZW50cygpOwotCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PGNvbmZpZy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IGNvbmZpZ1tpZHhdOwotICAgICAgU3RyaW5nIGxhYmVsID0gZWxlbS5nZXRBdHRyaWJ1dGUoICJsYWJlbCIgKTsKLSAgICAgIFN0cmluZyBpZCA9ICAgZWxlbS5nZXRBdHRyaWJ1dGUoICJpZCIgKTsgICAgICAKLSAgICAgIFdlYlNlcnZpY2VFeHRlbnNpb24gd2ViU2VydmljZUV4dGVuc2lvbiA9IGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oZWxlbSk7CQotICAgICAgbmFtZUV4dGVuc2lvblRhYmxlXy5wdXQobGFiZWwsd2ViU2VydmljZUV4dGVuc2lvbik7Ci0gICAgICBsYWJlbF8uYWRkKGxhYmVsKTsKLSAgICAgIGlkXy5hZGQoaWQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMKLSAgKiBAcmV0dXJuIFRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBleHRlbnNpb25zLgotICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbk5hbWVzICgpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZ1tdKW5hbWVFeHRlbnNpb25UYWJsZV8ua2V5U2V0KCkudG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbmFtZXMgYW5kIElkcyAKLSAgICovCi0gIHB1YmxpYyBMYWJlbHNBbmRJZHMgZ2V0TGFiZWxzQW5kSURzKCkKLSAgewotICAJbGFiZWxzYW5kaWRzXyA9IG5ldyBMYWJlbHNBbmRJZHMoKTsKLSAgCWxhYmVsc2FuZGlkc18uc2V0TGFiZWxzXygoU3RyaW5nW10pbGFiZWxfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gIAlsYWJlbHNhbmRpZHNfLnNldElkc18oKFN0cmluZ1tdKWlkXy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICkpOwotICAJcmV0dXJuIGxhYmVsc2FuZGlkc187Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGV4dGVuc2lvbiBvYmplY3Qgb2YgdGhlIGdpdmVuIG5hbWUKLSAgKiBAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0Ci0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAoV2ViU2VydmljZUV4dGVuc2lvbiluYW1lRXh0ZW5zaW9uVGFibGVfLmdldChuYW1lKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgQWxsIGV4dGVudGlvbiBvYmplY3RzIGluIHRoaXMgcmVnaXN0cnkKLSAgKkByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3RzCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnMoKQotICB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uW10pbmFtZUV4dGVuc2lvblRhYmxlXy52YWx1ZXMoKS50b0FycmF5KCBuZXcgV2ViU2VydmljZUV4dGVuc2lvblswXSApOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9KYXZhUHJveHlUZXN0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9KYXZhUHJveHlUZXN0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmIzNjdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvSmF2YVByb3h5VGVzdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5Cb29sZWFuU2VsZWN0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIEphdmFQcm94eVRlc3RDb21tYW5kIGV4dGVuZHMgV2ViU2VydmljZVRlc3RGaW5pc2hDb21tYW5kCi17Ci0KLSAvKioKLSAgKiBUaGlzIGhvbGRzIGFuIGluZm8gY2xhc3MgdGhhdCBjb21lcyBmcm9tIHVzZXIgaW5wdXQgb3Igc29tZSBjYWxjaWxhdGlvbnMgdGhhdCBuZWVkcyB0byBiZQotICAqIHVzZWQgZm9yIHRoZSBmaW5pc2gKLSAgKi8KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEpzcEZvbGRlcihTdHJpbmcganNwRm9sZGVyKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJ1bkNsaWVudFRlc3QoYm9vbGVhbiBydW5DbGllbnRUZXN0KTsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3QoU3RyaW5nIHNhbXBsZVByb2plY3QpOwotICAKLSAgcHVibGljIHZvaWQgc2V0UHJveHlCZWFuKFN0cmluZyBwcm94eUJlYW4pOwotICAKLSAgcHVibGljIHZvaWQgc2V0U2V0RW5kcG9pbnRNZXRob2QoU3RyaW5nIHNldEVuZHBvaW50TWV0aG9kKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpOwotICAKLSAgcHVibGljIHZvaWQgc2V0TWV0aG9kcyhCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kcyk7Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV1NETFRlc3RGaW5pc2hDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dTRExUZXN0RmluaXNoQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzE3MjUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV1NETFRlc3RGaW5pc2hDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3Q7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgV1NETFRlc3RGaW5pc2hDb21tYW5kIGV4dGVuZHMgV2ViU2VydmljZVRlc3RGaW5pc2hDb21tYW5kCi17Ci0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KFN0cmluZyBzZXJ2ZXJQcm9qZWN0KTsKLSAgcHVibGljIHZvaWQgc2V0V3NkbFNlcnZpY2VVUkwoU3RyaW5nIHdzZGxVUkkpOwotICBwdWJsaWMgdm9pZCBzZXRFeHRlcm5hbEJyb3dzZXIoYm9vbGVhbiBleHRlcm5hbCk7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTdlZjRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MTYgICAxMDQ4NzAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKiAyMDA4MDMyNSAgIDE4NDc2MSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25JbXBsOwotCi0KLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qIEluIHBhcnRpY3VsYXIgaXQgaG9sZHMgYSBjbGllbnQgdGVzdCBleHRlbnNpb24gZWxlbWVudCAKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gZXh0ZW5kcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbAotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIExpc3Qgc3VwcG9ydGVkUnVudGltZXNfID0gbmV3IEFycmF5TGlzdCgpOwotICAKLSAgcHVibGljIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotICB7Ci0gICAgc3VwZXIoY29uZmlnRWxlbWVudCk7Ci0gICAgICAgCi0gICAgU3RyaW5nIHJ1bnRpbWVzTGlzdCA9IGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoInN1cHBvcnRlZENsaWVudFJ1bnRpbWVzIik7ICAKLSAgIAotICAgIGFkZFJ1bnRpbWVzKHJ1bnRpbWVzTGlzdCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGRzIGEgbGlzdCBvZiBzcGFjZSBkZWxpbWl0ZWQgcnVudGltZSBJRHMuCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZXNMaXN0IFRoZSBsaXN0IG9mIHJ1bnRpbWUgSURzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUnVudGltZXMoU3RyaW5nIHJ1bnRpbWVzTGlzdCkgewotCSAgCi0JICBpZiAocnVudGltZXNMaXN0ID09IG51bGwpCi0JCSAgcmV0dXJuOwotCSAgCi0JICBTdHJpbmdbXSBydW50aW1lcyA9IHJ1bnRpbWVzTGlzdC5zcGxpdCgiXFxzKyIpOwotCSAgICAKLQkgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMubGVuZ3RoOyBpKyspIHsJICAgIAkKLQkJICBpZiAocnVudGltZXNbaV0ubGVuZ3RoKCkgPiAwKQotCQkJICBzdXBwb3J0ZWRSdW50aW1lc18uYWRkKHJ1bnRpbWVzW2ldKTsgICAKLQkgIH0KLSAgfQotICAKLSAgLyoqCi0gICogV2lsbCB0aGlzIHRlc3RDbGllbnQgZ2VuZXJhdGUgY29kZQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvZGVnZW4gbmVlZGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ29kZUdlbk5lZWRlZCgpCi0gIHsKLSAgICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJjb2RlR2VuZXJhdGVkIiApKS5ib29sZWFuVmFsdWUoKTsKLSAgfQotICAKLSAgLyoqCi0gICogVXNlIHRoZSBkZWZhdWx0IEZvbGRlciBQcm92aWRlZCBieSB1cwotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIG5vIHNwZWNpYWwgZm9sZGVyIHJlcXVpcmVzCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHVzZURlZmF1bHRDb2RlR2VuRm9sZGVyKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImRlZmF1bHRjb2RlZ2VuZm9sZGVyIiApKS5ib29sZWFuVmFsdWUoKTsKLSAgfQotCi0gIC8qKgotICAqIFVzZSBTcGVjaWFsIEZvbGRlciBmb3IgZ2VuZXJhdGVkIGNvZGUKLSAgKiBAcmV0dXJuIFN0cmluZyBzcGVjaWFsIGZvbGRlciBuYW1lCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29kZUdlbkZvbGRlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImNvZGVnZW5mb2xkZXIiICk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHRKQVhSUEMoKQotICB7Ci0JICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJpc2RlZmF1bHRqYXhycGMiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0gICAKLSAgLyoqCi0gICogRG8gd2UgbmVlZCB0byBsYXVuY2ggc29tZXRoaW5nCi0gICogQHJldHVybiBCb29sZWFuIGlmIHRydWUgbGF1bmNoIGNvZGVnZW4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hSZXF1aXJlZCgpCi0gIHsKLSAgICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJsYXVuY2hSZXF1aXJlZCIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBEbyB3ZSBuZWVkIHRoZSBtZXRob2RzIGZvciB0aGUgcHJveHkKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBwcm94eSBtZXRob2RzIG5lZWRlZAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBhcmVNZXRob2RzTmVlZGVkKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggIm1ldGhvZHNuZWVkZWQiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICogRG9lcyB0aGlzIHRlc3QgbWFjaGluZSBuZWVkIGEgc2VydmVyCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgYSBzZXJ2ZXIgaXMgcmVxdWlyZWQKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2ZXJOZWVkZWQoKQotICB7Ci0gICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZihnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAic2VydmVyUmVxdWlyZWQiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICogVXNlIHRoZSBEZWZhdWx0IFNlcnZlciBjaG9zZW4gYnkgdGhlIHdpemFyZAotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBkZWZhdWx0IHNlcnZlciBpcyB3YW50ZWQKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gdXNlRGVmYXVsdFNlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJkZWZhdWx0c2VydmVyIiApKS5ib29sZWFuVmFsdWUoKTsKLSAgfQotCi0gIC8qKgotICAqIFVzZSB0aGUgRGVmYXVsdCBTZXJ2ZXIgY2hvc2VuIGJ5IHRoZSB3aXphcmQKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgd2FudGVkCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgdXNlU2VydmVyKCkKLSAgewotICAgIHJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAidXNlc2VydmVyIiApOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdGVzdFdTREwoKQotICB7Ci0gIAlTdHJpbmcgd3NkbCA9IGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJ0ZXN0V1NETCIgKTsKLSAgICBpZih3c2RsLmVxdWFscygieWVzIikgfHwgd3NkbC5lcXVhbHMoInRydWUiKSkKLQkgIHJldHVybiB0cnVlOwotCSAKLQlyZXR1cm4gZmFsc2U7ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gdGVzdEphdmFQcm94eSgpCi0gIHsKLSAgCVN0cmluZyBqYXZhUHJveHkgPSBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAidGVzdEphdmFQcm94eSIgKTsKLSAgICBpZihqYXZhUHJveHkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAJaWYoamF2YVByb3h5LmVxdWFscygieWVzIikgfHwgamF2YVByb3h5LmVxdWFscygidHJ1ZSIpKQotCSAgcmV0dXJuIHRydWU7Ci0JIAotCXJldHVybiBmYWxzZTsgIAotICB9Ci0gIAkKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGlzIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQlyZXR1cm4gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImlkIiApOyAKLSAgfQotICAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsYWJlbCBhdHRyaWJ1dGUgb2YgdGhpcyBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIGxhYmVsIGF0dHJpYnV0ZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7Ci0gICAgcmV0dXJuIGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJsYWJlbCIgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIERvZXMgdGhpcyBleHRlbnNpb24gYWxsb3cgZXh0ZW5kZXJzIHRvIHJlc3RyaWN0IHRoZSBydW50aW1lcyB0aGF0IGFyZSBzdXBwb3J0ZWQ/Ci0gICAqICAKLSAgICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIGFsbG93UnVuaW1lc1Jlc3RyaWN0aW9uIGF0dHJpYnV0ZSwgZmFsc2UgaWYgbm90IHByZXNlbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBhbGxvd0NsaWVudFJ1bnRpbWVzUmVzdHJpY3Rpb24oKSB7Ci0JICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJhbGxvd0NsaWVudFJ1bnRpbWVzUmVzdHJpY3Rpb24iICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9ICAKLSAgICAgICAKLSAgLyoqCi0gICAqIERldGVybWluZXMgaWYgdGhpcyBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiBzdXBwb3J0cyB0aGUgZ2l2ZSBjbGllbnQgcnVudGltZSBJRC4KLSAgICogCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY2xpZW50IHJ1bnRpbWUgSUQgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1J1bnRpbWUoU3RyaW5nIHJ1bnRpbWVJZCkgewotCSAgCi0JIGlmICghYWxsb3dDbGllbnRSdW50aW1lc1Jlc3RyaWN0aW9uKCkgfHwgc3VwcG9ydGVkUnVudGltZXNfLmlzRW1wdHkoKSkKLQkJIHJldHVybiB0cnVlOwotCSAgCi0JIHJldHVybiBzdXBwb3J0ZWRSdW50aW1lc18uY29udGFpbnMocnVudGltZUlkKTsKLSAgfQotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RGaW5pc2hDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0RmluaXNoQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTFlOWQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RGaW5pc2hDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQgCi17Ci0KLSAgLyoqCi0gICAqIElmIHRoZSBjb21tYW5kIG5lZWRzIGEgc2VydmVyIHRoaXMgaXMgdGhlIGNob3NlbiAKLSAgICogY2xpZW50IHNlcnZlcklECi0gICAqIEBwYXJhbSBzYW1wbGVTZXJ2ZXJUeXBlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclR5cGVJRChTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRCk7Ci0gIAotICAvKioKLSAgICogVGhpcyBpcyB0aGUgSVNlcnZlciBpZiByZXF1aXJlZAotICAgKiBAcGFyYW0gc2FtcGxlRXhpc3RpbmdTZXJ2ZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIGlzIHRoZSBlbmRwb2ludHMgaWYgbW9uaXRvciBzZXJ2aWNlIGlzIGVuYWJsZWQKLSAgICogQHBhcmFtIGVuZHBvaW50cwotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoTGlzdCBlbmRwb2ludHMpOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZmVjY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgyMSAgIDE1MzgzMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWxsb3cgdGhlIFdlYiBTZXJ2aWNlIFRlc3QgZXh0ZW5zaW9uIHBvaW50IHRvIHNwZWNpZnkgdGhlIHN1cHBvcnRlZCBjbGllbnQgcnVudGltZQotICogMjAwNzAzMTQgICAxNTQ1NDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgaXMgdHJhY2tpbmcgZXh0ZW5zaW9ucyB1c2luZyBsYWJlbCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBJRAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGV4dGVuZHMgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbAotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgLyoKLSAgICogVGhpcyBpcyBhIHNpbmdsZXRvbiBiZWNhc3VlIGl0IHdhcyBkZWNpZGVkIHRoYXQgdGhlIG1lbW9yeSBmb290IHByaW50IAotICAgKiBpcyBub3QgYXMgZXhwZW5zaXZlIGFzIHRoZSB0aW1lIHRha2VuIHJldHJpZXZpbmcgdGhlIGRhdGEKLSAgICogCi0gICAqLwotICAKLSAgCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgd3N0cjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgCWlmKHdzdHIgPT0gbnVsbCkgd3N0ciA9IG5ldyBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5KCk7Ci0gICAgcmV0dXJuIHdzdHI7Ci0gIH0KLSAgCi0gIHByaXZhdGUgV2ViU2VydmljZVRlc3RSZWdpc3RyeSgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIAotICAvKioKLSAgICogSGVscGVyIG1ldGhvZCB0byAiam9pbiIgYW4gZXhpc3RpbmcgdmFsdWUgYW5kIGEgbmV3IHZhbHVlIHRvZ2V0aGVyIGJ5Ci0gICAqIGEgc3BhY2UgaW4gYmV0d2Vlbi4gIEhhbmRsZXMgc3BlY2lhbCBjYXNlIHdoZW4gZWl0aGVyIHZhbHVlIGlzIG51bGwuIAotICAgKiAgCi0gICAqIEBwYXJhbSBleGlzdGluZ1ZhbHVlIFRoZSBleGlzdGluZyB2YWx1ZQotICAgKiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2YWx1ZQotICAgKiBAcmV0dXJuIElmIGVpdGVyIHRoZSBleGlzdGluZyBvciBuZXcgdmFsdWUgaXMgbnVsbCwgc2ltcGx5IHJldHVybnMgdGhlCi0gICAqIG5ldyB2YWx1ZSBhcyBpcyAod2hpY2ggY291bGQgYmUgbnVsbCkuICBPdGhlcndpc2UgcmV0dXJucyB0aGUgdmFsdWUgam9pbmVkCi0gICAqIGJ5IGEgc3BhY2UuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZW5OZXdWYWx1ZShTdHJpbmcgZXhpc3RpbmdWYWx1ZSwgU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JICAKLQkgIGlmIChleGlzdGluZ1ZhbHVlID09IG51bGwgfHwgbmV3VmFsdWUgPT0gbnVsbCkKLQkJICByZXR1cm4gbmV3VmFsdWU7Ci0JICAJICAJIAotCSAgcmV0dXJuIGV4aXN0aW5nVmFsdWUgKyAiICIgKyBuZXdWYWx1ZTsKLSAgfQotICAgIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsI2xvYWRFeHRlbnNpb25zKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGxvYWRFeHRlbnNpb25zICgpCi0gIHsKLQkvLyBrZWVwIHRyYWNrIG9mIHRoZSBzdXBwb3J0IHJ1bnRpbWVzIGZvciBlYWNoIHRlc3QgZmFjaWxpdHkgSUQKLSAgICBIYXNodGFibGUgc3VwcG9ydGVkQ2xpZW50UnVudGltZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JICAKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWcgPSBnZXRDb25maWdFbGVtZW50cygpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxjb25maWcubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBjb25maWdbaWR4XTsKLSAgICAgIFN0cmluZyBsYWJlbCA9IGVsZW0uZ2V0QXR0cmlidXRlKCAibGFiZWwiICk7Ci0gICAgICBTdHJpbmcgaWQgPSAgIGVsZW0uZ2V0QXR0cmlidXRlKCAiaWQiICk7ICAgICAgCi0gICAgICAKLSAgICAgIC8vIGxhYmVsIGlzIGZvdW5kLCBoZW5jZSB3ZSBoYXZlIGEgbWFzdGVyIGV4dGVuc2lvbiBlbGVtZW50Ci0gICAgICBpZiAobGFiZWwgIT0gbnVsbCkgewotICAgIAkgIFdlYlNlcnZpY2VFeHRlbnNpb24gd2ViU2VydmljZUV4dGVuc2lvbiA9IGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oZWxlbSk7CQotICAgIAkgIG5hbWVFeHRlbnNpb25UYWJsZV8ucHV0KGlkLHdlYlNlcnZpY2VFeHRlbnNpb24pOwotICAgIAkgIGxhYmVsXy5hZGQobGFiZWwpOwotICAgIAkgIGlkXy5hZGQoaWQpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBzbGF2ZSBleHRlbnNpb24gZWxlbWVudCwgd2hpY2ggb25seSBoYXMgdGhlIGlkIGFuZCBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcyBhdHRyaWJ1dGVzCi0gICAgICBlbHNlIHsKLSAgICAJICBTdHJpbmcgZXhpc3RpbmdWYWx1ZSA9IChTdHJpbmcpIHN1cHBvcnRlZENsaWVudFJ1bnRpbWVzLmdldChpZCk7Ci0gICAgCSAgU3RyaW5nIG5ld1ZhbHVlID0gZ2VuTmV3VmFsdWUoZXhpc3RpbmdWYWx1ZSwgZWxlbS5nZXRBdHRyaWJ1dGUoInN1cHBvcnRlZENsaWVudFJ1bnRpbWVzIikpOwotICAgIAkgIAotICAgIAkgIGlmIChuZXdWYWx1ZSAhPSBudWxsKQotICAgIAkJICBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcy5wdXQoaWQsIG5ld1ZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gbWVyZ2UgYW55IHN1cHBvcnRlZENsaWVudFJ1bnRpbWVzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc2xhdmUgZWxlbWVudHMgYmFjayB0byB0aGUgbWFzdGVyIGVsZW1lbnRzCi0gICAgCi0gICAgSXRlcmF0b3IgaXRlciA9IG5hbWVFeHRlbnNpb25UYWJsZV8udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLSAgICAJV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd2ViU2VydmljZVRlc3RFeHRlbnNpb24gPSAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pIGl0ZXIubmV4dCgpOwotICAgIAotICAgIAkvLyBza2lwIGlmIHRoZSBleHRlbnNpb24gZG9lcyBub3QgYWxsb3cgcmVzdHJpY3Rpb24gb24gdGhlIHN1cHBvcnRlZCBjbGllbnQgcnVudGltZXMKLSAgICAJaWYgKHdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmFsbG93Q2xpZW50UnVudGltZXNSZXN0cmljdGlvbigpKSB7Ci0gICAgCQlTdHJpbmcgaWQgPSB3ZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5nZXRJZCgpOwotICAgIAkJd2ViU2VydmljZVRlc3RFeHRlbnNpb24uYWRkUnVudGltZXMoKFN0cmluZykgc3VwcG9ydGVkQ2xpZW50UnVudGltZXMuZ2V0KGlkKSk7Ci0gICAgCX0KLSAgICB9ICAgIAotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsI2dldFdlYlNlcnZpY2VFeHRlbnNpb25OYW1lcygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbk5hbWVzKCkgewotCXJldHVybiAoU3RyaW5nW10pbGFiZWxfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgfSAKLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBJRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYWJlbC4KLSAgICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbC4KLSAgICogQHJldHVybiBUaGUgSUQgY29ycmVzcG9uZGluZyB0byB0aGUgbGFiZWwsIG9yIGlmIHRoZSBsYWJlbCBwYXJhbWV0ZXIgaXMgbm90IGEgbGFiZWwKLSAgICogKG11c3QgYmUgYWxyZWFkeSBhbiBJRCksIGl0IGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBsYWJlbFRvSWQoU3RyaW5nIGxhYmVsKSB7Ci0gICAgaW50IGxhYmVsSW5kZXggPSBsYWJlbF8uaW5kZXhPZihsYWJlbCk7Ci0gICAgaWYgKGxhYmVsSW5kZXggPT0gLTEpCi0gICAgICByZXR1cm4gbGFiZWw7Ci0gICAgcmV0dXJuIChTdHJpbmcpIGlkXy5lbGVtZW50QXQobGFiZWxJbmRleCk7Ci0gIH0gCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFdlYlNlcnZpY2VFeHRlbnNpb24gd2l0aCB0aGUgZ2l2ZW4gSUQuCi0gICAqIEBwYXJhbSBpZCBUaGUgSUQuCi0gICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKFN0cmluZyBpZCkgewotICAgIHJldHVybiAoV2ViU2VydmljZUV4dGVuc2lvbikgbmFtZUV4dGVuc2lvblRhYmxlXy5nZXQoaWQpOwotICB9IAotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwjZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgcmV0dXJuIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlJZChsYWJlbFRvSWQobmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICogQ2hpbGRyZW4gcmVnaXN0cmllcyB3aWxsIGhhdmUgZGlmZmVyZW50IGV4dGVuc2lvbiB0eXBlcyAKLSAgKiBAcmV0dXJuIFdlYnNlcnZpY2VFeHRlbnNpb24gaG9sZHMgYSBjb25maWcgZWxlbQotICAqIGZvciB0aGF0IGV4dGVuc2lvbiBjYXBhYmxlIG9mIGNyZWF0aW5nIGFuIGV4ZWN1dGFibGUgZmlsZQotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbiBjcmVhdGVXZWJTZXJ2aWNlRXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotICB7Ci0gICAgcmV0dXJuIG5ldyBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbihjb25maWdFbGVtZW50KTsKLSAgfQotCi0gIC8qKgotICAqIENoaWxkcmVuIG11c3QgaW1wbGVtZW50IGhvdyB0aGV5IGdldCB0aGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gCi0gICogQHJldHVybiBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBhbiBhcnJheSBvZiBlbGVtZW50cyBwYXJ0aWN1bGFyIHRvIHRoYXQKLSAgKiBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGdldENvbmZpZ0VsZW1lbnRzKCkKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RlciIpOwotICAgIHJldHVybiBjb25maWc7ICAgIAotICB9Ci0KLQotICAgIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dlYlNlcnZpY2VQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dlYlNlcnZpY2VQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyMGQxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3BsdWdpbi9XZWJTZXJ2aWNlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5QZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlVERElQcmVmZXJlbmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGJ1bGsgb2YgdGhlIFdlYiBTZXJ2aWNlcyBydW50aW1lLgotKiBPbmx5IHRoZSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgcG9ydGlvbiBvZiB0aGUgcnVudGltZSBpcwotKiBmb3VuZCBlbHNld2hlcmUgLSBpbiB0aGUgb3JnLmVjbGlwc2UuanN0LndzLnVpIHBsdWdpbi4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVBsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MiOwotCi0gIC8qKgotICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVBsdWdpbiBpbnN0YW5jZV87Ci0KLSAgcHJpdmF0ZSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dF87Ci0gIHByaXZhdGUgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHRfOwotICBwcml2YXRlIFBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQgdWRkaVByZWZlcmVuY2VDb250ZXh0OwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZV8gPSB0aGlzOyAKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VQbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VQbHVnaW4gZ2V0SW5zdGFuY2UgKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRGVmYXVsdFBsdWdpblByZWZlcmVuY2VzKCkgCi0gIHsKLSAgCQkoKFBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQpIGdldFVERElQcmVmZXJlbmNlQ29udGV4dCgpKS5sb2FkKCk7Ci0gIH0KLQotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpCi0gIHsKLSAgCQlpZiAocmVzb3VyY2VDb250ZXh0XyA9PSBudWxsKSAKLSAgCQkJcmVzb3VyY2VDb250ZXh0XyA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJcmV0dXJuIHJlc291cmNlQ29udGV4dF87Ci0gIH0KLQotICBwdWJsaWMgU2NlbmFyaW9Db250ZXh0IGdldFNjZW5hcmlvQ29udGV4dCgpCi0gIHsKLSAgCQlpZiAoc2NlbmFyaW9Db250ZXh0XyA9PSBudWxsKQotICAJCXsKLSAgCQkgIHNjZW5hcmlvQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCgpOwotICAJCSAgc2NlbmFyaW9Db250ZXh0Xy5sb2FkKCk7Ci0gIAkJfQotCi0JCXJldHVybiBzY2VuYXJpb0NvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgVURESVByZWZlcmVuY2VDb250ZXh0IGdldFVERElQcmVmZXJlbmNlQ29udGV4dCgpCi0gIHsKLSAgICBpZiAodWRkaVByZWZlcmVuY2VDb250ZXh0ID09IG51bGwpCi0gICAgICB1ZGRpUHJlZmVyZW5jZUNvbnRleHQgPSBuZXcgUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dCgpOwotICAgIHJldHVybiB1ZGRpUHJlZmVyZW5jZUNvbnRleHQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhQ2xpZW50SW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhQ2xpZW50SW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTkwMDJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlSmF2YUNsaWVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MjAgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci0KLS8qKgotICogVGhpcyBzdWJjbGFzcyBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBhZGRzIHByb3BlcnRpZXMKLSAqIHJlbGV2YW50IHRvIGRlc2NyaXB0b3JzIG9mIEphdmEgV2ViIHNlcnZpY2UgY2xpZW50cy4KLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbyBleHRlbmRzIFdlYlNlcnZpY2VDbGllbnRJbmZvCi17Ci0JcHJpdmF0ZSBJVHlwZSBqZHRUeXBlXzsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSVR5cGUgb2YgdGhlIHByaW1hcnkgSmF2YSBwcm94eSBjbGFzcwotCSAqIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50LCBvciBudWxsIGlmIG5vIHN1Y2ggY2xhc3MgaGFzCi0JICogYmVlbiBsb2NhdGVkLgotCSAqIEByZXR1cm4gVGhlIEpEVCBJVHlwZSBvZiB0aGUgSmF2YSBjbGllbnQgcHJveHkgY2xhc3MuCi0JICovCi0JcHVibGljIElUeXBlIGdldFR5cGUgKCkKLQl7Ci0JCXJldHVybiBqZHRUeXBlXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgSkRUIElUeXBlIG9mIHRoZSBwcmltYXJ5IEphdmEgcHJveHkgY2xhc3MKLQkgKiBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudC4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgSkRUIElUeXBlIG9mIHRoZSBKYXZhIGNsaWVudCBwcm94eSBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUeXBlICggSVR5cGUgamR0VHlwZSApCi0JewotCQlqZHRUeXBlXyA9IGpkdFR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmQ5ZWM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlSmF2YUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MjAgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLS8qKgotICogVGhpcyBzdWJjbGFzcyBvZiBXZWJTZXJ2aWNlSW5mbyBhZGRzIHByb3BlcnRpZXMKLSAqIHJlbGV2YW50IHRvIGRlc2NyaXB0b3JzIG9mIEphdmEgV2ViIHNlcnZpY2VzLgotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUphdmFJbmZvIGV4dGVuZHMgV2ViU2VydmljZUluZm8KLXsKLQlwcml2YXRlIElUeXBlIGpkdFR5cGVfOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJVHlwZSBvZiB0aGUgcHJpbWFyeSBKYXZhIGltcGxlbWVudGF0aW9uCi0JICogY2xhc3Mgb2YgYSBXZWIgc2VydmljZSwgb3IgbnVsbCBpZiBubyBzdWNoIGNsYXNzIGhhcwotCSAqIGJlZW4gbG9jYXRlZC4KLQkgKiBAcmV0dXJuIFRoZSBKRFQgSVR5cGUgb2YgdGhlIEphdmEgaW1wbGVtZW50YXRpb24gY2xhc3MuCi0JICovCi0JcHVibGljIElUeXBlIGdldFR5cGUgKCkKLQl7Ci0JCXJldHVybiBqZHRUeXBlXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgSkRUIElUeXBlIG9mIHRoZSBwcmltYXJ5IEphdmEgaW1wbGVtZW50YXRpb24KLQkgKiBjbGFzcyBvZiBhIFdlYiBzZXJ2aWNlLgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSBKRFQgSVR5cGUgb2YgdGhlIEphdmEgaW1wbGVtZW50YXRpb24gY2xhc3MuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VHlwZSAoIElUeXBlIGpkdFR5cGUgKQotCXsKLQkJamR0VHlwZV8gPSBqZHRUeXBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjY4YjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXJ1bnRpbWUKLXRlbXAuZm9sZGVyCi1lbnZjb3JlLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMjdkZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZGU4NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNzoyMSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDdhMjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjM0IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZDNjYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjA0LnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUucmVnaXN0cnk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS51cmk7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4yMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMjAwLDIuMC4wKSIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGI4MmM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9ICouamFyLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IGNvbXBvbmVudC54bWwKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvY29tcG9uZW50LnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvY29tcG9uZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M0NThmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y29tcG9uZW50IHhtbG5zPSJodHRwOi8vZWNsaXBzZS5vcmcvd3RwL3JlbGVuZy90b29scy9jb21wb25lbnQtbW9kZWwiIG5hbWU9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kIj4KLSAgIDxjb21wb25lbnQtZGVwZW5kcyB1bnJlc3RyaWN0ZWQ9InRydWUiPgotICAgPC9jb21wb25lbnQtZGVwZW5kcz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkiIGZyYWdtZW50PSJmYWxzZSIvPgotPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxNzA5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9RW52aXJvbm1lbnQgQ29tbWFuZCBGcmFtZXdvcmsgKGNvcmUpCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0NvbW1hbmRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9Db21tYW5kRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWQ4ZGVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0NvbW1hbmRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gY3JlYXRlIENvbW1hbmQgb2JqZWN0cy4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29tbWFuZEZhY3RvcnkgCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgY3JlYXRlZCBDb21tYW5kIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjcmVhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0NvbW1hbmRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9Db21tYW5kTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjk0NmQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0NvbW1hbmRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0KLS8qKgotICogQ29tbWFuZE1hbmFnZXJzIGhlbHAgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgQ29tbWFuZHMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29tbWFuZE1hbmFnZXIKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIENvbW1hbmRNYW5hZ2VyIGlzIGNhcGFibGUgb2YgdW5kb2luZwotICAgKiBDb21tYW5kcy4gU29tZSBDb21tYW5kTWFuYWdlcnMgYW5kIEVudmlyb25tZW50cyBtYXkgYmUgb2YKLSAgICogYSBzb3J0IHRoYXQgd2lsbCBuZXZlciB1bmRvKCkgQ29tbWFuZHMuIENvbW1hbmQuZXhlY3V0ZSgpCi0gICAqIG1ldGhvZHMgc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIHRvIG9wdGltaXplCi0gICAqIG91dCBhbnkgY2FjaGluZyBsb2dpYyB3aGVuZXZlciB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRvRW5hYmxlZCAoKTsKLQotICAvLyBUaGVyZSdzIHByb2JhYmx5IG1vcmUsIGxpa2UgZmFjdG9yeSBtZXRob2RzIGZvciBjcmVhdGluZwotICAvLyBVbmRvL1JlZG8gc3RhY2tzIGFuZCBzdHVmZiBsaWtlIHRoYXQuCi0gIAotICBwdWJsaWMgRGF0YU1hcHBpbmdSZWdpc3RyeSBnZXRNYXBwaW5nUmVnaXN0cnkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0Vudmlyb25tZW50Q29yZS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMWQ4YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA0MTggICAxNzcwMDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIENvbW1vbiBNZXNzYWdlcwotIwotTVNHX0VSUk9SX1VORVhQRUNURURfRVJST1I9SVdBQjAwMTRFIFVuZXhwZWN0ZWQgZXhjZXB0aW9uIG9jY3VycmVkLgotCi1USVRMRV9XQVJOSU5HPVdhcm5pbmc6Ci1USVRMRV9FUlJPUj1FcnJvcjoKLVRJVExFX0lORk89SW5mbzoKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0Vudmlyb25tZW50Q29yZU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9FbnZpcm9ubWVudENvcmVNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDU4MWFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0Vudmlyb25tZW50Q29yZU1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkVudmlyb25tZW50Q29yZSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBFbnZpcm9ubWVudENvcmVNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VORVhQRUNURURfRVJST1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVElUTEVfV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUSVRMRV9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUSVRMRV9JTkZPOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9JQ29tbWFuZEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0lDb21tYW5kRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODJhMjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0lDb21tYW5kRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZXR1cm4gYSBzZXF1ZW5jZSBvZiBDb21tYW5kcy4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUNvbW1hbmRGYWN0b3J5IGV4dGVuZHMgSXRlcmF0b3IgCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IENvbW1hbmQgaW4gdGhlIHNlcXVlbmNlLgotICAgKi8KLSAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGdldE5leHRDb21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9TaW1wbGVDb21tYW5kRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvU2ltcGxlQ29tbWFuZEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVmZGM0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9TaW1wbGVDb21tYW5kRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVDb21tYW5kRmFjdG9yeSBpbXBsZW1lbnRzIElDb21tYW5kRmFjdG9yeSAKLXsKLSAgICBwcml2YXRlIFZlY3RvciBjb21tYW5kc187Ci0JcHJpdmF0ZSBpbnQgICAgaW5kZXhfOwotCQotCXB1YmxpYyBTaW1wbGVDb21tYW5kRmFjdG9yeSggVmVjdG9yIGNvbW1hbmRzICkKLQl7Ci0JICBjb21tYW5kc18gPSBjb21tYW5kczsKLQkgIGluZGV4XyAgICA9IDA7Ci0JfQotCQotCXB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBnZXROZXh0Q29tbWFuZCgpIAotCXsKLQkJcmV0dXJuIChBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiluZXh0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlKCkgCi0JewotICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpIAotCXsKLQkJcmV0dXJuIGluZGV4XyA8IGNvbW1hbmRzXy5zaXplKCk7Ci0JfQotCi0JcHVibGljIE9iamVjdCBuZXh0KCkgCi0JewotCQlyZXR1cm4gY29tbWFuZHNfLmVsZW1lbnRBdChpbmRleF8rKyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vQ29uZGl0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vQ29uZGl0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MTJjZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL0NvbmRpdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgYm9vbGVhbiBjb25kaXRpb24gdGhhdCBjYW4gYmUgZXZhbHVhdGVkIGZvciBhbnkgb2JqZWN0LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbmRpdGlvbgotewotICAvKioKLSAgICogVGhpcyByZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBwYXNzZXMgdGhpcyBjb25kaXRpb24uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL0V2YWx1YXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vRXZhbHVhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmYTgwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vRXZhbHVhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLS8qKgotICAqIFRoaXMgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHdoZW4gYSBjb25kaXRpb25hbCBvYmplY3QgbmVlZHMgdG8gYmUgcmV0dXJuZWQuCi0qKi8KLXB1YmxpYyBpbnRlcmZhY2UgRXZhbHVhdGUKLXsKLSAgLyoqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgYW4gb2JqZWN0IGJhc2VkIG9uIHNvbWUgZXZhbHVhdGVkIGNvbmRpdGlvbi4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgZXZhbHVhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9NZXNzYWdlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9NZXNzYWdlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcyY2Q0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vTWVzc2FnZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgY29udmllbmVudCB3YXkgdG8gYWNjZXNzIHJlc291cmNlIGJ1bmRsZXMgYW5kCi0gKiByZXRpZXZlIHRyYW5zbGF0ZWQgc3RyaW5ncy4KLSAqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVV0aWxzCi17Ci0gIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VfOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgSGFzaHRhYmxlIGJ1bmRsZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gYnVuZGxlSWQgdGhlIHJlc291cmNlIGJ1bmRsZSBJRC4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgY2xhc3MgbG9hZGVyIGZvciB0aGlzIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUKLSAgICogICAgICAgICAgICAgICB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VVdGlscyggU3RyaW5nIGJ1bmRsZUlkLCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIHRoaXMoIGJ1bmRsZUlkLCBvYmplY3QuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGJ1bmRsZUlkIHRoZSByZXNvdXJjZSBidW5kbGUgSUQuCi0gICAqIEBwYXJhbSBsb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXRyaWV2ZQotICAgKiAgICAgICAgICAgICAgIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVV0aWxzKCBTdHJpbmcgYnVuZGxlSWQsIENsYXNzTG9hZGVyIGxvYWRlciApCi0gIHsKLSAgICByZXNvdXJjZV8gPSAoUmVzb3VyY2VCdW5kbGUpYnVuZGxlc18uZ2V0KCBidW5kbGVJZCApOwotICAgIAotICAgIGlmKCByZXNvdXJjZV8gPT0gbnVsbCApCi0gICAgewotICAgICAgcmVzb3VyY2VfID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCBidW5kbGVJZCwgTG9jYWxlLmdldERlZmF1bHQoKSwgbG9hZGVyICk7Ci0gICAgICBidW5kbGVzXy5wdXQoIGJ1bmRsZUlkLCByZXNvdXJjZV8gKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGtleSB0aGUga2V5IGZvciB0aGUgc3RyaW5nIHRvIHJldHJpZXZlLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIGtleSApCi0gIHsKLSAgICBTdHJpbmcgdmFsdWUgPSBrZXk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgdmFsdWUgPSByZXNvdXJjZV8uZ2V0U3RyaW5nKCBrZXkgKTsgCi0gICAgfQotICAgIGNhdGNoKCBUaHJvd2FibGUgZXhjICkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgZm9yIHRoZSBzdHJpbmcgdG8gcmV0cmlldmUuCi0gICAqIEBwYXJhbSBhcmdzIFRoZXNlIGFyZ3VtZW50cyB3aWxsIGJlIHN1YnN0aXR1dGVkIGludG8gdGhlIHRyYW5zbGF0ZWQgc3RyaW5nLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nIHdpdGggYW55IHN1YnN0aXR1dGlvbnMuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzICkKLSAgewotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdCggZ2V0TWVzc2FnZShrZXkpLGFyZ3MgKTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Qcm9ncmVzc1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUHJvZ3Jlc3NVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDI4Y2FhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Qcm9ncmVzc1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlCi0gKiBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotCi1wdWJsaWMgY2xhc3MgUHJvZ3Jlc3NVdGlscwotewotICBzdGF0aWMgcHVibGljIHZvaWQgcmVwb3J0KCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIFN0cmluZyBtZXNzYWdlICkKLSAgewotICAgIGlmKCBtb25pdG9yICE9IG51bGwgKSAKLSAgICB7Ci0gICAgICAgbW9uaXRvci5iZWdpblRhc2soIG1lc3NhZ2UsIElQcm9ncmVzc01vbml0b3IuVU5LTk9XTiApOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1JhbmdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkyMjRmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5JVVJJOwotCi0vKioKLSAqIENhcnJpZXMgcG9zaXRpb24gaW5mb3JtYXRpb24gd2l0aGluIGEgcmVzb3VyY2UuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmFuZ2UKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5LTk9XTiA9IC0xOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZGVudGlmaWVyIG9mIHRoZSByZXNvdXJjZSB0aGUgcmFuZ2UgYXBwbGllcyB0by4KLSAgICovCi0gIHB1YmxpYyBJVVJJIGdldFVSSSAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5kZXgsIHplcm8taW5kZXhlZCwgb2YgdGhlIGZpcnN0IGxpbmUKLSAgICogb2YgdGhlIHJhbmdlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRTdGFydGluZ0xpbmVOdW1iZXIgKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGluZGV4LCB6ZXJvLWluZGV4ZWQsIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIKLSAgICogb2YgdGhlIHJhbmdlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFN0YXJ0aW5nQ2hhck51bWJlckluTGluZSAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5kZXgsIHplcm8taW5kZXhlZCwgb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgotICAgKiBvZiB0aGUgcmFuZ2UgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0U3RhcnRpbmdDaGFyTnVtYmVySW5VUkkgKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGluZGV4LCB6ZXJvLWluZGV4ZWQsIG9mIHRoZSBsYXN0IGxpbmUKLSAgICogb2YgdGhlIHJhbmdlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRFbmRpbmdMaW5lTnVtYmVyICgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQsIHplcm8taW5kZXhlZCwgb2YgdGhlIGxhc3QgY2hhcmFjdGVyCi0gICAqIG9mIHRoZSByYW5nZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLgotICAgKi8KLSAgcHVibGljIGludCBnZXRFbmRpbmdDaGFyTnVtYmVySW5MaW5lICgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmRleCwgemVyby1pbmRleGVkLCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIKLSAgICogb2YgdGhlIHJhbmdlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVuZGluZ0NoYXJOdW1iZXJJblVSSSAoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9SYW5nZVZlY3Rvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1JhbmdlVmVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDYwYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1JhbmdlVmVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoqCi0gKiBUaGlzIFZlY3RvciBtYWtlcyB0aGUgcHJvdGVjdGVkIG1ldGhvZCByZW1vdmVSYW5nZSBwdWJsaWMuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmFuZ2VWZWN0b3IgZXh0ZW5kcyBWZWN0b3IKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA0MDQ4NzkzNDc2NjU5MjMwNzczTDsKLQotICBwdWJsaWMgdm9pZCByZW1vdmVSYW5nZSggaW50IHN0YXJ0LCBpbnQgZW5kICkKLSAgewotICAgIHN1cGVyLnJlbW92ZVJhbmdlKCBzdGFydCwgZW5kICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9TdGF0dXNVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1N0YXR1c1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwM2E1NzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1N0YXR1c1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlCi0gKiBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5NdWx0aVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1wdWJsaWMgY2xhc3MgU3RhdHVzVXRpbHMKLXsKLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGVycm9yU3RhdHVzKCBTdHJpbmcgZXJyb3JNZXNzYWdlICkKLSAgewotICAgIHJldHVybiBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAiaWQiLCAwLCBlcnJvck1lc3NhZ2UsIG51bGwgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGVycm9yU3RhdHVzKCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZXhjLmdldE1lc3NhZ2UoKTsKLSAgICAKLSAgICByZXR1cm4gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgImlkIiwgMCwgbWVzc2FnZSA9PSBudWxsID8gIiIgOiBtZXNzYWdlLCBleGMgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGVycm9yU3RhdHVzKCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4YyApCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgImlkIiwgMCwgbWVzc2FnZSwgZXhjICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgTXVsdGlTdGF0dXMgbXVsdGlTdGF0dXMoIFN0cmluZyBtZXNzYWdlLCBJU3RhdHVzW10gY2hpbGRyZW4sIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNdWx0aVN0YXR1cyggImlkIiwgMCwgY2hpbGRyZW4sIG1lc3NhZ2UsIGV4YyApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgTXVsdGlTdGF0dXMgbXVsdGlTdGF0dXMoIFN0cmluZyBtZXNzYWdlLCBJU3RhdHVzW10gY2hpbGRyZW4gKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNdWx0aVN0YXR1cyggImlkIiwgMCwgY2hpbGRyZW4sIG1lc3NhZ2UsIG51bGwgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgd2FybmluZ1N0YXR1cyggU3RyaW5nIHdhcm5pbmdNZXNzYWdlICkKLSAgewotICAgIHJldHVybiBuZXcgU3RhdHVzKCBJU3RhdHVzLldBUk5JTkcsICJpZCIsIDAsIHdhcm5pbmdNZXNzYWdlLCBudWxsICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyB3YXJuaW5nU3RhdHVzKCBTdHJpbmcgd2FybmluZ01lc3NhZ2UsIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuV0FSTklORywgImlkIiwgMCwgd2FybmluZ01lc3NhZ2UsIGV4YyApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgaW5mb1N0YXR1cyggU3RyaW5nIGluZm9NZXNzYWdlICkKLSAgewotICAgIHJldHVybiBuZXcgU3RhdHVzKCBJU3RhdHVzLklORk8sICJpZCIsIDAsIGluZm9NZXNzYWdlLCBudWxsICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NzI2YTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHdheSB0byBnZXQgYW5kIHNldCBwcmVmZXJlbmNlIGluZm9ybWF0aW9uLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDb250ZXh0IAotewotIC8qKgotICAqIExvYWRzIHRoZSBwcmVmZXJlbmNlIGRhdGEgaW50byB0aGlzIENvbnRleHQgb2JqZWN0LgotICAqCi0gICovCi0gcHVibGljIHZvaWQgbG9hZCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdCAoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpOyAKLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHQgKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpOwotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdCAoU3RyaW5nIG5hbWUsIGludCB2YWx1ZSk7IAotCi0gLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0VmFsdWUgKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpOwotIAotIC8qKgotICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpOwotIAotIC8qKgotICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIGludCBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldFZhbHVlIChTdHJpbmcgbmFtZSwgaW50IHZhbHVlKTsgICAKLQotIC8qKgotICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldFZhbHVlQXNTdHJpbmcgKCBTdHJpbmcgbmFtZSk7Ci0gCi0gLyoqCi0gICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgYm9vbGVhbiBnZXRWYWx1ZUFzQm9vbGVhbiAoIFN0cmluZyBuYW1lKTsKLSAKLSAvKioKLSAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIGludCBnZXRWYWx1ZUFzSW50ICggU3RyaW5nIG5hbWUpOyAgCQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvUmVzb3VyY2VDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1Jlc291cmNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDVjNzVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvUmVzb3VyY2VDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dDsKLQotcHVibGljIGludGVyZmFjZSBSZXNvdXJjZUNvbnRleHQgCi17Ci0gLyoqCi0gICAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBvdmVyd3JpdGUgZmlsZXMgZ2VuZXJhbCBwcmVmZXJlbmNlIGZyb20KLSAgICogdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0gKiovCi0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9PVkVSV1JJVEUgPSAiZmlsZXNPdmVyd3JpdGUiOwotCi0gLyoqCi0gICAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBjcmVhdGUgZm9sZGVycyBnZW5lcmFsIHByZWZlcmVuY2UgZnJvbQotICAgKiB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLSAqKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0NSRUFURV9GT0xERVJTID0gImNyZWF0ZUZvbGRlcnMiOwotIAotIC8qKgotICAgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgY2hlY2tvdXQgZmlsZXMgZ2VuZXJhbCBwcmVmZXJlbmNlIGZyb20KLSAgICogdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0gKiovCi0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9DSEVDS09VVCA9ICJmaWxlc0NoZWNrb3V0IjsKLQotIC8qKgotICAqIAotICAqIEBwYXJhbSBlbmFibGUgc2V0IHdoZXRoZXIgb3ZlcndyaXRpbmcgb2YgZmlsZXMgaXMgZW5hYmxlZC4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQgKCBib29sZWFuIGVuYWJsZSk7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHdoZXRoZXIgb3ZlcndyaXRpbmcgb2YgZmlsZXMgaXMgZW5hYmxlZC4KLSAgKi8KLSBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpOwotIAotIC8qKgotICAqIAotICAqIEBwYXJhbSBlbmFibGUgc2V0IHdoZXRoZXIgY3JlYXRpb24gb2YgZm9sZGVycyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyB2b2lkIHNldENyZWF0ZUZvbGRlcnNFbmFibGVkKCBib29sZWFuIGVuYWJsZSk7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHdoZXRoZXIgY3JlYXRpb24gb2YgZm9sZGVycyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKTsgCi0gCi0gLyoqCi0gICogCi0gICogQHBhcmFtIGVuYWJsZSBzZXRzIHdoZXRoZXIgYXV0b21hdGljIGNoZWNrb3V0IG9mIGZpbGVzIGlzIGVuYWJsZWQuCi0gICovCi0gcHVibGljIHZvaWQgc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoIGJvb2xlYW4gZW5hYmxlKTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgd2hldGhlciBhdXRvbWF0aWMgY2hlY2tvdXQgb2YgZmlsZXMgaXMgZW5hYmxlZC4KLSAgKi8KLSBwdWJsaWMgYm9vbGVhbiBpc0NoZWNrb3V0RmlsZXNFbmFibGVkKCk7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIGEgY29weSBvZiB0aGlzIFJlc291cmNlQ29udGV4dC4KLSAgKi8KLSBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGNvcHkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvUmVzb3VyY2VEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZURlZmF1bHRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMTM0NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZURlZmF1bHRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dDsKLQotcHVibGljIGNsYXNzIFJlc291cmNlRGVmYXVsdHMKLXsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfT1ZFUldSSVRFX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfQ1JFQVRFX0ZPTERFUlNfREVGQVVMVCA9IHRydWU7Ci0gcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUkVGRVJFTkNFX0NIRUNLT1VUX0RFRkFVTFQgPSBmYWxzZTsKLQotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBvdmVyd3JpdGluZyBmaWxlcy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0T3ZlcndyaXRlRmlsZXNEZWZhdWx0ICgpCi0gewotIAlyZXR1cm4gUFJFRkVSRU5DRV9PVkVSV1JJVEVfREVGQVVMVDsKLSB9Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgb2ZyIGNyZWF0aW5nIGZvbGRlcnMuCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldENyZWF0ZUZvbGRlcnNEZWZhdWx0ICgpCi0geyAKLQlyZXR1cm4gUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSU19ERUZBVUxUOwotIH0KLQotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBjaGVja2luZyBvdXQgZmlsZXMuCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldENoZWNrb3V0RmlsZXNEZWZhdWx0KCkKLSB7Ci0JcmV0dXJuIFBSRUZFUkVOQ0VfQ0hFQ0tPVVRfREVGQVVMVDsKLSB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1RyYW5zaWVudFJlc291cmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIwYmEzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1RyYW5zaWVudFJlc291cmNlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgUmVzb3VyY2VDb250ZXh0IGludGVyZmFjZSB3aGVyZSB0aGUgc3RhdGUKLSAqIG9mIHRoZSBjb250ZXh0IGRhdGEgaXMgdHJhbnNpZW50LgotICoKLSAqLwotcHVibGljIGNsYXNzIFRyYW5zaWVudFJlc291cmNlQ29udGV4dCBpbXBsZW1lbnRzIFJlc291cmNlQ29udGV4dCAKLXsKLSAgcHJpdmF0ZSBib29sZWFuIG92ZXJXcml0ZUZpbGVzOwotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlRm9sZGVyczsKLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrT3V0RmlsZXM7Ci0KLSAgcHVibGljIFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpIHsKLSAgICBzZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoUmVzb3VyY2VEZWZhdWx0cy5nZXRPdmVyd3JpdGVGaWxlc0RlZmF1bHQoKSk7Ci0gICAgc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoUmVzb3VyY2VEZWZhdWx0cy5nZXRDcmVhdGVGb2xkZXJzRGVmYXVsdCgpKTsKLSAgICBzZXRDaGVja291dEZpbGVzRW5hYmxlZChSZXNvdXJjZURlZmF1bHRzLmdldENoZWNrb3V0RmlsZXNEZWZhdWx0KCkpOwotICB9Ci0KLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNzZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgewotICAgIG92ZXJXcml0ZUZpbGVzID0gZW5hYmxlOwotICB9Ci0gIAotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I2lzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkgewotICAgIHJldHVybiBvdmVyV3JpdGVGaWxlczsKLSAgfQotCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENyZWF0ZUZvbGRlcnNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgY3JlYXRlRm9sZGVycyA9IGVuYWJsZTsKLSAgfQotICAKLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNpc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZvbGRlcnM7Ci0gIH0KLQotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I3NldENoZWNrb3V0RmlsZXNFbmFibGVkKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDaGVja291dEZpbGVzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgewotICAgIGNoZWNrT3V0RmlsZXMgPSBlbmFibGU7Ci0gIH0KLSAgCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjaXNDaGVja291dEZpbGVzRW5hYmxlZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkgewotICAgIHJldHVybiBjaGVja091dEZpbGVzOwotICB9Ci0gIAotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I2NvcHkoKQotICAgKi8KLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBjb3B5KCkgewotICAgIFJlc291cmNlQ29udGV4dCBjYyA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICBjYy5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSk7Ci0gICAgY2Muc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpKTsKLSAgICBjYy5zZXRDaGVja291dEZpbGVzRW5hYmxlZChpc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpOwotICAgIHJldHVybiBjYzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9CZWFuTW9kaWZpZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvQmVhbk1vZGlmaWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NmZjNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9CZWFuTW9kaWZpZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotcHVibGljIGludGVyZmFjZSBCZWFuTW9kaWZpZXIgewotCi0JLyoqCi0JICogUGVyZm9ybXMgbW9kaWZpY2F0aW9uIG9uIGJlYW4gcHJvcGVydGllcyB1c2luZyBkYXRhIHByb3ZpZGVkCi0JICogQHBhcmFtIGJlYW4gIFRoZSBiZWFuIHRvIGJlIG1vZGlmaWVkCi0JICogQHBhcmFtIHByb3BlcnR5SG9sZGVyIFRoZSBkYXRhIHRvIHVzZSB0byBtYWtlIHRoZSBtb2RpZmljYXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBtb2RpZnkoT2JqZWN0IGJlYW4sIE9iamVjdCBwcm9wZXJ0eUhvbGRlcik7Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0NsYXNzRW50cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvQ2xhc3NFbnRyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWU1YzU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvQ2xhc3NFbnRyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzEzICAgMTMwOTU4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQ2xhc3NFbnRyeQotewotICAvLyBBIGxpc3Qgb2YgZ2V0dGVyIG1ldGhvZHMgZm9yIGEgcGFydGljdWxhciBjbGFzcy4KLSAgcHVibGljIFZlY3RvciBnZXR0ZXJMaXN0XzsKLSAgCi0gIC8vIEEgbGlzdCBvZiBzZXR0ZXIgbWV0aG9kcyBmb3IgYSBwYXJ0aWN1bGFyIGNsYXNzLgotICBwdWJsaWMgVmVjdG9yIHNldHRlckxpc3RfOwotICAKLSAgLy8gQSBsaXN0IG9mIGluc3RhbmNlIG9iamVjdHMgZm9yIHRoaXMgY2xhc3MuICBPbmx5IHRoZSBsYXN0IGVudHJ5Ci0gIC8vIHNob3VsZCBiZSBsb29rZWQgYXQuIAotICBwcml2YXRlIFZlY3RvciBvYmplY3RMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIC8vIEEgbGlzdCBvZiBJbnRlcmdlciBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFuIG9yZGVyaW5nIG9mIG9iamVjdHMuCi0gIC8vIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgb2JqZWN0TGlzdCB2ZWN0b3IgYW5kIHRoZSBvcmRlckxpc3QgdmVjdG9yCi0gIC8vIHNob3VsZCBiZSB0aGUgc2FtZS4gIEVhY2ggZW50cnkgaW4gdGhlIG9iamVjdExpc3QgdmVjdG9yIGlzCi0gIC8vIGNvcmVsYXRlZCB3aXRoIGVhY2ggZW50cnkgaW4gdGhlIG9yZGVyTGlzdCB2ZWN0b3IuCi0gIHByaXZhdGUgVmVjdG9yIG9yZGVyTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRPYmplY3QoIE9iamVjdCBvYmplY3QsIGludCBvcmRlciApCi0gIHsKLSAgICBvYmplY3RMaXN0Xy5hZGQob2JqZWN0KTsKLSAgICBvcmRlckxpc3RfLmFkZCggbmV3IEludGVnZXIob3JkZXIpICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TGFzdE9iamVjdCgpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiggb2JqZWN0TGlzdF8uc2l6ZSgpID4gMCApCi0gICAgewotICAgICAgcmVzdWx0ID0gb2JqZWN0TGlzdF8ubGFzdEVsZW1lbnQoKTsKLSAgICB9Ci0gICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldExhc3RPcmRlcigpCi0gIHsKLSAgICBpbnQgcmVzdWx0ID0gLTE7Ci0gICAgCi0gICAgaWYoIG9yZGVyTGlzdF8uc2l6ZSgpID4gMCApCi0gICAgewotICAgICAgcmVzdWx0ID0gKChJbnRlZ2VyKW9yZGVyTGlzdF8ubGFzdEVsZW1lbnQoKSkuaW50VmFsdWUoKTsKLSAgICB9Ci0gICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVPYmplY3QoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgaW50IHJlbW92YWxJbmRleCA9IG9iamVjdExpc3RfLmluZGV4T2Yob2JqZWN0KTsKLSAgICAKLSAgICBpZiggcmVtb3ZhbEluZGV4ICE9IC0xICkKLSAgICB7Ci0gICAgICBvYmplY3RMaXN0Xy5yZW1vdmUocmVtb3ZhbEluZGV4KTsKLSAgICAgIG9yZGVyTGlzdF8ucmVtb3ZlKHJlbW92YWxJbmRleCk7Ci0gICAgfSAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFGbG93TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhRmxvd01hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdmZmUwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFGbG93TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxMyAgIDEzMDk1OCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotcHVibGljIGNsYXNzIERhdGFGbG93TWFuYWdlciAKLXsKLSAgcHJpdmF0ZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCByZWdpc3RyeV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlICAgICAgICAgICAgICAgY2xhc3NUYWJsZV87Ci0gIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgICAgICAgb3JkZXJfOwotICBwcml2YXRlIElFbnZpcm9ubWVudAkJCQkgICAgZW52aXJvbm1lbnRfOwotICAKLSAgcHVibGljIERhdGFGbG93TWFuYWdlciggRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgcmVnaXN0cnksIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCApCi0gIHsKLSAgICByZWdpc3RyeV8gICA9IHJlZ2lzdHJ5OwotICAgIGNsYXNzVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIG9yZGVyXyAgICAgID0gMDsKLSAgICBlbnZpcm9ubWVudF8gPSBlbnZpcm9ubWVudDsKLSAgfQotICAKLSAgcHVibGljIERhdGFNYXBwaW5nUmVnaXN0cnkgZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiByZWdpc3RyeV87IAotICB9Ci0gIAotICAvLyBSZW1vdmUgdGhpcyBpbnN0YW5jZSBvYmplY3QgZnJvbSB0aGUgbWFwcGluZyB0YWJsZS4KLSAgcHVibGljIHZvaWQgdW5wcm9jZXNzKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIFN0cmluZyAgICAgb2JqZWN0VHlwZSA9IG9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICBDbGFzc0VudHJ5IGNsYXNzRW50cnkgPSAoQ2xhc3NFbnRyeSljbGFzc1RhYmxlXy5nZXQoIG9iamVjdFR5cGUgKTsKLQotICAgIGlmKCBjbGFzc0VudHJ5ICE9IG51bGwgKQotICAgIHsKLSAgICAgIGNsYXNzRW50cnkucmVtb3ZlT2JqZWN0KG9iamVjdCk7Ci0gICAgfQotICB9Ci0gIAotICAvLyBBZGQgdGhpcyBvYmplY3QgdG8gb3VyIG1hcHBpbmcgdGFibGUgYW5kIGNhbGwgdGhlIHNldHRlcnMKLSAgLy8gdGhhdCBoYXZlIGNvcnJlc3BvbmRpbmcgZ2V0dGVyIG9iamVjdHMuCi0gIHB1YmxpYyB2b2lkIHByb2Nlc3MoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgLy8gQWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBjbGFzc1RhYmxlXyBpZiByZXF1aXJlZC4KLSAgICBTdHJpbmcgICAgIG9iamVjdFR5cGUgPSBvYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0gICAgQ2xhc3NFbnRyeSBjbGFzc0VudHJ5ID0gKENsYXNzRW50cnkpY2xhc3NUYWJsZV8uZ2V0KCBvYmplY3RUeXBlICk7Ci0JCi0gICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJkYXRhIiwgNTAwNCwgdGhpcywgInByb2Nlc3MiLCAiUHJvY2Vzc2luZzogIiArIG9iamVjdFR5cGUgKTsKLSAgICAKLSAgICBpZiggY2xhc3NFbnRyeSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBjbGFzc0VudHJ5ID0gbmV3IENsYXNzRW50cnkoKTsKLSAgICAgIGNsYXNzVGFibGVfLnB1dCggb2JqZWN0VHlwZSwgY2xhc3NFbnRyeSApOwotICAgIH0KLSAgICAgICAgCi0gICAgY2xhc3NFbnRyeS5hZGRPYmplY3Qob2JqZWN0LCBvcmRlcl8rKyApOwotICAgIAotICAgIC8vIE5vdyBwcm9jZXNzIHRoZSBzZXR0ZXJzIGZvciB0aGlzIG9iamVjdAotICAgIFZlY3RvciBydWxlRW50cmllcyAgPSByZWdpc3RyeV8uZ2V0UnVsZUVudHJpZXMoIG9iamVjdFR5cGUgKTsKLSAgICAKLSAgICBpZiggcnVsZUVudHJpZXMgIT0gbnVsbCApCi0gICAgewotICAgICAgaWYoIGNsYXNzRW50cnkuc2V0dGVyTGlzdF8gPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGNsYXNzRW50cnkuc2V0dGVyTGlzdF8gPSBnZXRTZXR0ZXJMaXN0KCBvYmplY3QgKTsgIAotICAgICAgfSAgICAKLSAgICAgIAotICAgICAgLy8gRm9yIGVhY2ggc2V0dGVyIGluIHRoaXMgb2JqZWN0IHRyeSB0byBmaW5kIGEgcnVsZS4KLSAgICAgIGZvciggaW50IHNldHRlckluZGV4ID0gMDsgc2V0dGVySW5kZXggPCBjbGFzc0VudHJ5LnNldHRlckxpc3RfLnNpemUoKTsgc2V0dGVySW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdE1ldGhvZCBjdXJyZW50T2JqZWN0TWV0aG9kID0gbmV3IE9iamVjdE1ldGhvZCgpOwotICAgICAgICBNZXRob2QgICAgICAgc2V0dGVyTWV0aG9kICAgICAgICA9IChNZXRob2QpY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xy5lbGVtZW50QXQoIHNldHRlckluZGV4ICk7Ci0gICAgICAgIFJ1bGVFbnRyeSAgICBjdXJyZW50UnVsZUVudHJ5ICAgID0gbnVsbDsKLQotICAgICAgICBjdXJyZW50T2JqZWN0TWV0aG9kLm9yZGVyID0gLTE7Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5kIHJ1bGVzIHRoYXQgbWF0Y2ggdGhpcyBzZXR0ZXIuICBOb3RlOiB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBydWxlCi0gICAgICAgIC8vIHRoYXQgbWF0Y2hlcyB0aGlzIHNldHRlci4gIEluIHRoaXMgY2FzZSB3ZSB1c2UgdGhlIG1vc3QgcmVjZW50LCB3aGljaCBpcyAKLSAgICAgICAgLy8gZGVmaW5lZCBieSB0aGUgb3JkZXIgZmllbGQuCi0gICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBydWxlRW50cmllcy5zaXplKCk7IGluZGV4KysgKQotICAgICAgICB7Ci0gICAgICAgICAgUnVsZUVudHJ5IHJ1bGVFbnRyeSA9IChSdWxlRW50cnkpcnVsZUVudHJpZXMuZWxlbWVudEF0KCBpbmRleCApOyAgICAgICAKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggc2V0dGVyTWV0aG9kLmdldE5hbWUoKS5lcXVhbHMoICJzZXQiICsgcnVsZUVudHJ5LnRhcmdldFByb3BlcnR5XyApICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBmb3VuZCBhIHNldHRlciBmb3IgdGhpcyBydWxlLiAgTm93IGZpbmQgdGhlIGdldHRlciBtZXRob2QuCi0gICAgICAgICAgICAvLyBOb3RlOiBnZXRHZXR0ZXJNZXRob2QgYWx3YXlzIHJldHVybnMgYSB2YWx1ZSwgYnV0IGlmIHRoZXJlIGlzIG5vCi0gICAgICAgICAgICAvLyAgICAgICBnZXR0ZXJzIGF2YWlsYWJsZSBpdCB3aWxsIHNldCB0aGUgb3JkZXIgdG8gLTEuCi0gICAgICAgICAgICBPYmplY3RNZXRob2QgZ2V0dGVyID0gZ2V0R2V0dGVyTWV0aG9kKCBydWxlRW50cnkuc291cmNlVHlwZV8sIHJ1bGVFbnRyeS5zb3VyY2VQcm9wZXJ0eV8gKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYoIGdldHRlci5vcmRlciA9PSAtMSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAJZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8gLCAiZGF0YSIsIDUwMDUsIHRoaXMsICJwcm9jZXNzIiwgIiAgPj5ObyBnZXR0ZXIgZm91bmQgZm9yIHByb3BlcnR5OiAiICsgc2V0dGVyTWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmKCBjdXJyZW50T2JqZWN0TWV0aG9kLm9yZGVyIDwgZ2V0dGVyLm9yZGVyICkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbW9yZSByZWNlbnQgZ2V0dGVyLgotICAgICAgICAgICAgICBjdXJyZW50T2JqZWN0TWV0aG9kID0gZ2V0dGVyOwotICAgICAgICAgICAgICBjdXJyZW50UnVsZUVudHJ5ID0gcnVsZUVudHJ5OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0gICAgICAgIGlmKCBjdXJyZW50T2JqZWN0TWV0aG9kLm9yZGVyICE9IC0xICkKLSAgICAgICAgewotICAgICAgICAgIGludm9rZU1ldGhvZCggY3VycmVudE9iamVjdE1ldGhvZC5vYmplY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdE1ldGhvZC5tZXRob2QsIAotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlck1ldGhvZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UnVsZUVudHJ5LnRyYW5zZm9ybWVyXyApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAJZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJkYXRhIiwgNTAwNiwgdGhpcywgInByb2Nlc3MiLCAiICA+Pk5vIHJ1bGUgZm91bmQgZm9yIHNldHRlcjogIiArIHNldHRlck1ldGhvZC5nZXROYW1lKCkgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gICAKLSAgfQotICAKLSAgLyoqCi0gICAqIEZpbmQgYWxsIHRoZSBzZXR0ZXJzIGZvciB0aGlzIG9iamVjdCBhbmQgcmV0dXJuIGEgdmVjdG9yIG9mIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gb2JqZWN0Ci0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgVmVjdG9yIGdldFNldHRlckxpc3QoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgVmVjdG9yIHJlc3VsdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBNZXRob2RbXSBtZXRob2RzID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZXRob2RzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgTWV0aG9kICBtZXRob2QgICAgID0gbWV0aG9kc1tpbmRleF07Ci0gICAgICBib29sZWFuIGlzUHVibGljICAgPSBNb2RpZmllci5pc1B1YmxpYyggbWV0aG9kLmdldE1vZGlmaWVycygpICk7Ci0gICAgICBDbGFzcyAgIHJldHVyblR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotICAgIAotICAgICAgaWYoIGlzUHVibGljICYmIAotICAgICAgICAgIHJldHVyblR5cGUgPT0gVm9pZC5UWVBFICYmIAotICAgICAgICAgIG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSAxICYmCi0gICAgICAgICAgbWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCAic2V0IiApKQotICAgICAgewotICAgICAgICBtZXRob2Quc2V0QWNjZXNzaWJsZSggdHJ1ZSApOwotICAgICAgICByZXN1bHQuYWRkKCBtZXRob2QgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBPYmplY3RNZXRob2QgZ2V0R2V0dGVyTWV0aG9kKCBTdHJpbmcgc291cmNlVHlwZSwgU3RyaW5nIHNvdXJjZVByb3BlcnR5ICkKLSAgewotICAgIENsYXNzRW50cnkgICBjbGFzc0VudHJ5ID0gKENsYXNzRW50cnkpY2xhc3NUYWJsZV8uZ2V0KCBzb3VyY2VUeXBlICk7Ci0gICAgT2JqZWN0TWV0aG9kIGdldHRlckZvdW5kID0gbmV3IE9iamVjdE1ldGhvZCgpOwotICAgIAotICAgIC8vIEluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8gZ2V0dGVyIHlldC4KLSAgICBnZXR0ZXJGb3VuZC5vcmRlciA9IC0xOwotICAgIAotICAgIGlmKCBjbGFzc0VudHJ5ICE9IG51bGwgKQotICAgIHsKLSAgICAgIE9iamVjdCBsYXN0T2JqZWN0ID0gY2xhc3NFbnRyeS5nZXRMYXN0T2JqZWN0KCk7Ci0gICAgICAKLSAgICAgIGlmKCBsYXN0T2JqZWN0ICE9IG51bGwgKQotICAgICAgeyAgICAgICAgCi0gICAgICAgIGlmKCBjbGFzc0VudHJ5LmdldHRlckxpc3RfID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQnVpbGQgdGhlIGdldHRlciBsaXN0LgotICAgICAgICAgIGNsYXNzRW50cnkuZ2V0dGVyTGlzdF8gPSBnZXRHZXR0ZXJMaXN0KCBsYXN0T2JqZWN0ICk7Ci0gICAgICAgIH0KLSAgICAgIAotICAgICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY2xhc3NFbnRyeS5nZXR0ZXJMaXN0Xy5zaXplKCk7IGluZGV4KysgKQotICAgICAgICB7Ci0gICAgICAgICAgTWV0aG9kIGdldHRlciA9IChNZXRob2QpY2xhc3NFbnRyeS5nZXR0ZXJMaXN0Xy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICAgIAotICAgICAgICAgIGlmKCBnZXR0ZXIuZ2V0TmFtZSgpLmVxdWFscyggImdldCIgKyBzb3VyY2VQcm9wZXJ0eSApKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldHRlckZvdW5kLm9yZGVyICA9IGNsYXNzRW50cnkuZ2V0TGFzdE9yZGVyKCk7Ci0gICAgICAgICAgICBnZXR0ZXJGb3VuZC5tZXRob2QgPSBnZXR0ZXI7Ci0gICAgICAgICAgICBnZXR0ZXJGb3VuZC5vYmplY3QgPSBsYXN0T2JqZWN0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBnZXR0ZXJGb3VuZDsKLSAgfQotICAKLSAgcHJpdmF0ZSBWZWN0b3IgZ2V0R2V0dGVyTGlzdCggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBWZWN0b3IgcmVzdWx0ID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBvYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBNZXRob2QgIG1ldGhvZCAgICAgPSBtZXRob2RzW2luZGV4XTsKLSAgICAgIGJvb2xlYW4gaXNQdWJsaWMgICA9IE1vZGlmaWVyLmlzUHVibGljKCBtZXRob2QuZ2V0TW9kaWZpZXJzKCkgKTsKLSAgICAgIENsYXNzICAgcmV0dXJuVHlwZSA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0gICAgCi0gICAgICBpZiggaXNQdWJsaWMgJiYgCi0gICAgICAgICAgcmV0dXJuVHlwZSAhPSBWb2lkLlRZUEUgJiYgCi0gICAgICAgICAgbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDAgJiYKLSAgICAgICAgICBtZXRob2QuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoICJnZXQiICkpCi0gICAgICB7Ci0gICAgICAgIG1ldGhvZC5zZXRBY2Nlc3NpYmxlKCB0cnVlICk7Ci0gICAgICAgIHJlc3VsdC5hZGQoIG1ldGhvZCApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgCi0gIHByaXZhdGUgdm9pZCBpbnZva2VNZXRob2QoIE9iamVjdCAgICAgIHNvdXJjZU9iamVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZCAgICAgIHNvdXJjZU1ldGhvZCAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgICAgICBjbGllbnRPYmplY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRob2QgICAgICBjbGllbnRNZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKQotICB7ICAJCi0gIAlPYmplY3QgZGF0YSA9IG51bGw7Ci0gIAkgIAkgIAkKLSAgCXRyeQotICAJewotICAJICBkYXRhID0gc291cmNlTWV0aG9kLmludm9rZSggc291cmNlT2JqZWN0LCBuZXcgT2JqZWN0WzBdICk7Ci0gIAl9Ci0gIAljYXRjaCggSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBleGMgKQotICAJewotICAJICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAvLyBwZ20gTmVlZCB0byBleHRlcm5hbGl6ZSB0aGlzIHN0cmluZy4KLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJQcm92aWRlciBcIiIgKyBzb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIHRocmV3IGFuIGV4Y2VwdGlvbi4iICk7Ci0gIAl9Ci0gIAljYXRjaCggSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBleGMgKQotICAJewotICAJICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAvLyBwZ20gTmVlZCB0byBleHRlcm5hbGl6ZSB0aGlzIHN0cmluZy4KLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJQcm92aWRlciBcIiIgKyBzb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiB0aHJldyBhbiBleGNlcHRpb24uIiApOwotICAJfQotICAJCi0gIAllbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImRhdGEiLCA1MDA3LCB0aGlzLCAiaW52b2tlTWV0aG9kICIsIiAgU2V0dGluZyBwcm9wOiAiICsgY2xpZW50TWV0aG9kLmdldE5hbWUoKSArICIgZGF0YT0iICsgZGF0YSArICIgZnJvbTogIiArIHNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSApOwotICAJCi0gIAkKLSAgCWlmKCB0cmFuc2Zvcm1lciAhPSBudWxsICkKLSAgCXsKLSAgCSAgZGF0YSA9IHRyYW5zZm9ybWVyLnRyYW5zZm9ybSggZGF0YSApOyAgCSAgICAKLSAgCX0KLSAgCQotICAJdHJ5Ci0gIAl7ICAJICAKLSAgCSAgY2xpZW50TWV0aG9kLmludm9rZSggY2xpZW50T2JqZWN0LCBuZXcgT2JqZWN0W117IGRhdGEgfSApOwotICAJfQotICAJY2F0Y2goIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXhjICkKLSAgCXsKLSAgCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgLy8gcGdtIE5lZWQgdG8gZXh0ZXJuYWxpemUgdGhpcyBzdHJpbmcuCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiQ2xpZW50IFwiIiArIGNsaWVudE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgdGhyZXcgYW4gZXhjZXB0aW9uLiIgKTsKLSAgCX0KLSAgCWNhdGNoKCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGV4YyApCi0gIAl7Ci0gIAkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIC8vIHBnbSBOZWVkIHRvIGV4dGVybmFsaXplIHRoaXMgc3RyaW5nLgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkNsaWVudCBcIiIgKyBjbGllbnRPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIHRocmV3IGFuIGV4Y2VwdGlvbi4iICk7Ci0gIAl9Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgT2JqZWN0TWV0aG9kCi0gIHsKLSAgICBwdWJsaWMgT2JqZWN0IG9iamVjdDsKLSAgICBwdWJsaWMgTWV0aG9kIG1ldGhvZDsKLSAgICBwdWJsaWMgaW50ICAgIG9yZGVyOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFNYXBwaW5nUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjAzNzMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgRGF0YU1hcHBpbmdSZWdpc3RyeQotewotICAvKioKLSAgICogVGhpcyBtZXRob2QgYWRkcyBhIGRhdGEgbWFwcGluZyBmcm9tIGEgc291cmNlIG9iamVjdCB0byBhIHRhcmdldAotICAgKiBvYmplY3QuICBXaGVuIHRoZSBzb3VyY2VPYmplY3QgaXMgZW5jb3VudGVyZWQgYnkgdGhlIGZyYW1ld29yayB0aGUKLSAgICogc291cmNlUHJvcGVydHkgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSBkYXRhIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQotICAgKiB0YXJnZXRQcm9wZXJ0eSBpbiB0aGUgdGFyZ2V0T2JqZWN0LiAgSWYgYSB0cmFuc2Zvcm1lciBvYmplY3QgaXMKLSAgICogc3BlY2lmaWVkIHRoZSBzb3VyY2VPYmplY3QgaXMgdHJhbnNmb3JtZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0bwotICAgKiB0aGUgdGFyZ2V0IG9iamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBzb3VyY2VUeXBlICAgICAgVGhlIHNvdXJjZSBvYmplY3QuCi0gICAqIEBwYXJhbSBzb3VyY2VQcm9wZXJ0eSAgVGhlIHNvdXJjZSBwcm9wZXJ0eS4KLSAgICogQHBhcmFtIHRhcmdldFR5cGUgICAgICBUaGUgdGFyZ2V0IG9iamVjdC4KLSAgICogQHBhcmFtIHRhcmdldFByb3BlcnR5ICBUaGUgdGFyZ2V0IHByb3BlcnR5LgotICAgKiBAcGFyYW0gdHJhbnNmb3JtZXIgICAgIFRoZSB0cmFuc2Zvcm1lciBvYmplY3QgdGhhdCB0cmFuc2Zvcm1zIHRoZQotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2Ugb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTWFwcGluZyggQ2xhc3MgICAgICAgc291cmNlVHlwZSwKLQkJCQkJCSAgU3RyaW5nICAgICAgc291cmNlUHJvcGVydHksCi0JCQkJCQkgIENsYXNzICAgICAgIHRhcmdldFR5cGUsCi0JCQkJCQkgIFN0cmluZyAgICAgIHRhcmdldFByb3BlcnR5LAotCQkJCQkJICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlIHdpdGggdGFyZ2V0UHJvcGVydHkgdGhlIHNhbWUKLSAgICogYXMgdGhlIHNvdXJjZVByb3BlcnR5IGFuZCB3aXRoIHRoZSB0cmFuc2Zvcm1lciBzZXQgdG8gbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBzb3VyY2VUeXBlICAgICBUaGUgc291cmNlIG9iamVjdC4KLSAgICogQHBhcmFtIHNvdXJjZVByb3BlcnR5IFRoZSBzb3VyY2UgcHJvcGVydHkuCi0gICAqIEBwYXJhbSB0YXJnZXRUeXBlICAgICBUaGUgdGFyZ2V0IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE1hcHBpbmcoIENsYXNzICAgICAgIHNvdXJjZVR5cGUsCi0JICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgIHNvdXJjZVByb3BlcnR5LAotCSAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICB0YXJnZXRUeXBlICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFNYXBwaW5nUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFNYXBwaW5nUmVnaXN0cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYTVmMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0KLXB1YmxpYyBjbGFzcyBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCBpbXBsZW1lbnRzIERhdGFNYXBwaW5nUmVnaXN0cnkKLXsgIAotICBwcml2YXRlIEhhc2h0YWJsZSBydWxlc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLQotICBwdWJsaWMgVmVjdG9yIGdldFJ1bGVFbnRyaWVzKCBTdHJpbmcgdGFyZ2V0VHlwZSApCi0gIHsKLSAgICByZXR1cm4gKFZlY3RvcilydWxlc1RhYmxlXy5nZXQoIHRhcmdldFR5cGUgKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSNhZGRNYXBwaW5nKGphdmEubGFuZy5DbGFzcywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkNsYXNzLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTWFwcGluZyggQ2xhc3Mgc291cmNlVHlwZSwgU3RyaW5nIHNvdXJjZVByb3BlcnR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyB0YXJnZXRUeXBlLCBTdHJpbmcgdGFyZ2V0UHJvcGVydHksIAotICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcikgCi0gIHsKLSAgICBWZWN0b3IgICAgcnVsZUVudHJpZXMgPSAoVmVjdG9yKXJ1bGVzVGFibGVfLmdldCggdGFyZ2V0VHlwZS5nZXROYW1lKCkgKTsKLSAgICBSdWxlRW50cnkgcnVsZUVudHJ5ICAgPSBudWxsOwotICAgIAotICAgIGlmKCBydWxlRW50cmllcyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBydWxlRW50cmllcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHJ1bGVzVGFibGVfLnB1dCggdGFyZ2V0VHlwZS5nZXROYW1lKCksIHJ1bGVFbnRyaWVzICk7Ci0gICAgfQotICAgIAotICAgIC8vIEZpbmQgdGhlIHJ1bGUgZW50cnkKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcnVsZUVudHJpZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBSdWxlRW50cnkgbmV3RW50cnkgPSAoUnVsZUVudHJ5KXJ1bGVFbnRyaWVzLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAKLSAgICAgIGlmKCBzb3VyY2VQcm9wZXJ0eS5lcXVhbHMoIG5ld0VudHJ5LnNvdXJjZVByb3BlcnR5XyApICYmCi0gICAgICAgICAgc291cmNlVHlwZS5lcXVhbHMoIG5ld0VudHJ5LnNvdXJjZVR5cGVfICkgJiYKLSAgICAgICAgICB0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoIG5ld0VudHJ5LnRhcmdldFByb3BlcnR5XyApICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzCi0gICAgICAgIHJ1bGVFbnRyeSA9IG5ld0VudHJ5OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIHJ1bGVFbnRyeSA9PSBudWxsICkKLSAgICB7Ci0gICAgICAvLyBUaGUgcnVsZSBkaWRuJ3QgZXhpc3QgYWxyZWFkeSBzbyB3ZSB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUuCi0gICAgICBydWxlRW50cnkgPSBuZXcgUnVsZUVudHJ5KHNvdXJjZVR5cGUuZ2V0TmFtZSgpLCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIHRyYW5zZm9ybWVyICk7Ci0gICAgICBydWxlRW50cmllcy5hZGQoIHJ1bGVFbnRyeSApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gSnVzdCB1cGRhdGUgdGhlIHRyYW5zZm9ybWVyLgotICAgICAgcnVsZUVudHJ5LnRyYW5zZm9ybWVyXyA9IHRyYW5zZm9ybWVyOyAgCi0gICAgfQotICB9Ci0gICAgCi0gICAgLy9ydWxlRW50cmllc18uCi0vLyAgICBTdHJpbmcgICAgc291cmNlQ2xhc3MgPSBzb3VyY2VUeXBlLmdldE5hbWUoKTsKLS8vICAgIFN0cmluZyAgICB0YXJnZXRDbGFzcyA9IHRhcmdldFR5cGUuZ2V0TmFtZSgpOwotLy8gICAgVmVjdG9yICAgIGVudHJpZXMgICAgID0gKFZlY3RvcilydWxlRW50cmllc18uZ2V0KCBzb3VyY2VDbGFzcyApOyAKLS8vICAgIFJ1bGVFbnRyeSBydWxlRW50cnkgICA9IG51bGw7Ci0vLyAgICAKLS8vICAgIGlmKCBlbnRyaWVzICE9IG51bGwgKQotLy8gICAgewotLy8gICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBtYXBwaW5nIGFscmVhZHkgZXhpc3RzLgotLy8gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZW50cmllcy5zaXplKCk7IGluZGV4KysgKQotLy8gICAgICB7Ci0vLyAgICAgICAgUnVsZUVudHJ5IGZvdW5kRW50cnkgPSAoUnVsZUVudHJ5KWVudHJpZXMuZWxlbWVudEF0KCBpbmRleCApOwotLy8gICAgICAgIAotLy8gICAgICAgIGlmKCBzb3VyY2VQcm9wZXJ0eS5lcXVhbHMoIGZvdW5kRW50cnkuc291cmNlUHJvcGVydHlfICkgJiYKLS8vICAgICAgICAgICAgdGFyZ2V0VHlwZS5lcXVhbHMoIGZvdW5kRW50cnkudGFyZ2V0VHlwZV8gKSAmJgotLy8gICAgICAgICAgICB0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoIGZvdW5kRW50cnkudGFyZ2V0UHJvcGVydHlfICkgKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIHJ1bGVFbnRyeSA9IGZvdW5kRW50cnk7Ci0vLyAgICAgICAgICBydWxlRW50cnkudHJhbnNmb3JtZXJfID0gdHJhbnNmb3JtZXI7Ci0vLyAgICAgICAgfQotLy8gICAgICB9Ci0vLyAgICAgIAotLy8gICAgICAvLyBUaGVyZSBpcyBhbiBleGlzdGluZyB2ZWN0b3IgZm9yIHRoaXMgc291cmNlQ2xhc3MsIGJ1dCBpdCBkaWRuJ3QKLS8vICAgICAgLy8gY29udGFpbiB0aGlzIG5ldyBydWxlIHNvIHdlIHdpbGwgYWRkIGl0IGluLgotLy8gICAgICBpZiggcnVsZUVudHJ5ID09IG51bGwgKQotLy8gICAgICB7Ci0vLyAgICAgICAgcnVsZUVudHJ5ID0gbmV3IFJ1bGVFbnRyeSggc291cmNlUHJvcGVydHksIHRhcmdldENsYXNzLCB0YXJnZXRQcm9wZXJ0eSwgdHJhbnNmb3JtZXIgKTsKLS8vICAgICAgICBlbnRyaWVzLmFkZCggcnVsZUVudHJ5ICk7Ci0vLyAgICAgIH0KLS8vICAgIH0KLS8vICAgIGVsc2UKLS8vICAgIHsKLS8vICAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgdmVjdG9yIGZvciB0aGlzIHNvdXJjZUNsYXNzLgotLy8gICAgICBlbnRyaWVzID0gbmV3IFZlY3RvcigpOwotLy8gICAgICBydWxlRW50cnkgPSBuZXcgUnVsZUVudHJ5KCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0Q2xhc3MsIHRhcmdldFByb3BlcnR5LCB0cmFuc2Zvcm1lciApOwotLy8gICAgICBlbnRyaWVzLmFkZCggcnVsZUVudHJ5ICk7Ci0vLyAgICAgIHJ1bGVFbnRyaWVzXy5wdXQoIHNvdXJjZUNsYXNzLCBlbnRyaWVzICk7ICAKLS8vICAgIH0gICAgCi0vLyAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSNhZGRNYXBwaW5nKGphdmEubGFuZy5DbGFzcywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkNsYXNzKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTWFwcGluZyhDbGFzcyBzb3VyY2VUeXBlLCBTdHJpbmcgc291cmNlUHJvcGVydHksIENsYXNzIHRhcmdldFR5cGUpIAotICB7Ci0gICAgYWRkTWFwcGluZyggc291cmNlVHlwZSwgc291cmNlUHJvcGVydHksIHRhcmdldFR5cGUsIHNvdXJjZVByb3BlcnR5LCBudWxsICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvUnVsZUVudHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL1J1bGVFbnRyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjkwOTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvUnVsZUVudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotCi1wdWJsaWMgY2xhc3MgUnVsZUVudHJ5IAotewotICBwdWJsaWMgU3RyaW5nICAgICAgc291cmNlVHlwZV87Ci0gIHB1YmxpYyBTdHJpbmcgICAgICBzb3VyY2VQcm9wZXJ0eV87Ci0gIHB1YmxpYyBTdHJpbmcgICAgICB0YXJnZXRQcm9wZXJ0eV87Ci0gIHB1YmxpYyBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcl87Ci0gIAotIAotICBwdWJsaWMgUnVsZUVudHJ5KCBTdHJpbmcgc291cmNlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZVByb3BlcnR5LAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0UHJvcGVydHksIAotICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciApCi0gIHsKLSAgICBzb3VyY2VUeXBlXyAgICAgPSBzb3VyY2VUeXBlOwotICAgIHNvdXJjZVByb3BlcnR5XyA9IHNvdXJjZVByb3BlcnR5OwotICAgIHRhcmdldFByb3BlcnR5XyA9IHRhcmdldFByb3BlcnR5OyAgICAKLSAgICB0cmFuc2Zvcm1lcl8gICAgPSB0cmFuc2Zvcm1lcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODgwYTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gdHJhbnNmb3JtIGFuIG9iamVjdCBmcm9tIG9uZSBjbGFzcyB0byBhbm90aGVyLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBUcmFuc2Zvcm1lcgotewotICAvKgotICAgKiBAcmV0dXJuIHJldHVybnMgYSB0cmFuc2Zvcm1lZCBvYmplY3QgYmFzZWQgb24gdGhlIGlucHV0IHZhbHVlLgotICAgKi8KLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oIE9iamVjdCB2YWx1ZSApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Fic3RyYWN0Q29tbWFuZEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZDA2NzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0KLQotLyoqCi0gICogVGhpcyBjbGFzcyBpcyB1c2VkIGFzIHRoZSBiYXNlIGNsYXNzIGZvciBvdGhlciBzdGFuZGFyZCBmcmFnbWVudCBjbGFzc2VzLgotICAqIAotKiovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQgaW1wbGVtZW50cyBDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBDb21tYW5kRmFjdG9yeSBjb21tYW5kRmFjdG9yeV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgaWRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgIGRvTm90UnVuSW5UcmFuc2FjdGlvbl8gPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29weSBjb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZyYWdtZW50Ci0gICAqLwotICBwcm90ZWN0ZWQgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQoIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIGNvbW1hbmRGYWN0b3J5XyA9IGZyYWdtZW50LmNvbW1hbmRGYWN0b3J5XzsKLSAgICBpZF8gICAgICAgICAgICAgPSBmcmFnbWVudC5pZF87Ci0gIH0KLSAgCi0gIC8qKgotICAgICogQ3JlYXRlcyBhIG5ldyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcGFyYW0gY29tbWFuZCB0aGUgZXhlY3V0YWJsZSBjb21tYW5kIGZvciB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50KCBDb21tYW5kRmFjdG9yeSBjb21tYW5kRmFjdG9yeSwgU3RyaW5nIGlkICkKLSAgewotICAgIGNvbW1hbmRGYWN0b3J5XyA9IGNvbW1hbmRGYWN0b3J5OyAgCi0gICAgaWRfICAgICAgPSBpZDsKLSAgfSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGlkXzsKLSAgfQotICAgCi0gIHB1YmxpYyB2b2lkIHNldElkKCBTdHJpbmcgaWQgKQotICB7Ci0gICAgaWRfID0gaWQ7IAotICB9Ci0gIAotICAvKiogCi0gICAgKiBHZXRzIGV4ZWN1dGFibGUgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGYWN0b3J5IGdldENvbW1hbmRGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiBjb21tYW5kRmFjdG9yeV87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHJldHJpZXZlIHRoZSBkYXRhIG1hcHBpbmdzIGZvciB0aGlzIGNvbW1hbmQgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSApCi0gIHsKLSAgICAvLyBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm90IHRvIGFkZCBhbnkgZW50cmllcyB0byB0aGUgcmVnaXN0cnkuCi0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBJZiB0aGUgY29tbWFuZHMgZm9yIHRoaXMgZnJhZ21lbnQgc2hvdWxkIG5vdCBiZSBydW4gd2l0aGluIGEgdHJhbnNhY3Rpb24gdGhlbgotICAgKiB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRydWUuICBJZiB0aGUgZnJhZ21lbnQgZG9lcyBub3QgY2FyZSBpZiBpdCBpcyBydW4gaW4gYSB0cmFuc2FjdGlvbgotICAgKiBvciBub3QgaXQgc2hvdWxkIHJldHVybiBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvTm90UnVuSW5UcmFuc2FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZG9Ob3RSdW5JblRyYW5zYWN0aW9uXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIHJ1biBpbiB0cmFuc2FjdGlvbiBwcm9wZXJ0eS4KLSAgICogQHBhcmFtIGRvTm90UnVuSW5UcmFuc2FjdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RG9Ob3RSdW5JblRyYW5zYWN0aW9uKCBib29sZWFuIGRvTm90UnVuSW5UcmFuc2FjdGlvbiApCi0gIHsKLSAgICBkb05vdFJ1bkluVHJhbnNhY3Rpb25fID0gZG9Ob3RSdW5JblRyYW5zYWN0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICAqIEFsbCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBhYnN0cmFjdCBwdWJsaWMgT2JqZWN0IGNsb25lKCk7ICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Cb29sZWFuRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Jvb2xlYW5GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTZiMzY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Jvb2xlYW5GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci0KLQotLyoqCi0gICogVGhpcyBjbGFzcyByZXR1cm5zIGVpdGhlciB0aGUgdHJ1ZSBmcmFnbWVudCBvciB0aGUgZmFsc2UgZnJhZ21lbnQKLSAgKiBiYXNlZCBvbiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgY29uZGl0aW9uIG9iamVjdC4KLSoqLwotcHVibGljIGNsYXNzIEJvb2xlYW5GcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgQ29tbWFuZEZyYWdtZW50IHRydWVGcmFnbWVudF87Ci0gIHByaXZhdGUgQ29tbWFuZEZyYWdtZW50IGZhbHNlRnJhZ21lbnRfOwotICBwcml2YXRlIENvbmRpdGlvbiAgICAgICBjb25kaXRpb25fOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBCb29sZWFuRnJhZ21lbnQgd2l0aCBkZWZhdWx0IHZhbHVlcy4KLSAgICoKLSAgICovCi0gIHB1YmxpYyBCb29sZWFuRnJhZ21lbnQoKQotICB7Ci0gICAgdGhpcyggbnVsbCwgbnVsbCwgbmV3IENvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9LCAKLSAgICAgICAgICAgICAgICAgICAgICBudWxsLCAiIiApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHRydWVGcmFnbWVudCAgVGhlIGZyYWdtZW50IGNob3NlbiBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWUuCi0gICAqIEBwYXJhbSBmYWxzZUZyYWdtZW50IFRoZSBmcmFnbWVudCBjaG9zZW4gaWYgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZS4KLSAgICogQHBhcmFtIGNvbmRpdGlvbiAgICAgVGhlIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBCb29sZWFuRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCB0cnVlRnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudCBmYWxzZUZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gICAgICAgY29uZGl0aW9uICkKLSAgewotICAgIHRoaXMoIHRydWVGcmFnbWVudCwgZmFsc2VGcmFnbWVudCwgY29uZGl0aW9uLCBudWxsLCAiIiApOwotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAvKioKLSAgICAqIENyZWF0ZXMgYSBuZXcgQm9vbGVhbkZyYWdtZW50LgotICAgICoKLSAgICAqIEBwYXJhbSB0cnVlRnJhZ21lbnQgcmV0dXJuZWQgaWYgY29uZGl0aW9uIGlzIHRydWUuCi0gICAgKiBAcGFyYW0gZmFsc2VGcmFnbWVudCByZXR1cm5lZCBpZiBjb25kaXRpb24gaXMgZmFsc2UuCi0gICAgKiBAcGFyYW0gY29uZGl0aW9uIHRoZSBjb25kaXRpb24gZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKiBAcGFyYW0gc3RhdGUgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGUgY29uZGl0aW9uLgotICAgICogQHBhcmFtIGNvbW1hbmQgdGhlIGV4ZWN0YWJsZSBjb21tYW5kIGZvciB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIEJvb2xlYW5GcmFnbWVudCggQ29tbWFuZEZyYWdtZW50ICB0cnVlRnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRnJhZ21lbnQgZmFsc2VGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiAgICAgICBjb25kaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRmFjdG9yeSAgY29tbWFuZEZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgaWQgKQotICB7Ci0gICAgc3VwZXIoIGNvbW1hbmRGYWN0b3J5LCBpZCApOwotCi0gICAgdHJ1ZUZyYWdtZW50XyAgICAgICA9IHRydWVGcmFnbWVudDsKLSAgICBmYWxzZUZyYWdtZW50XyAgICAgID0gZmFsc2VGcmFnbWVudDsKLSAgICBjb25kaXRpb25fICAgICAgICAgID0gY29uZGl0aW9uOyAKLSAgfQotCi0gIC8qKgotICAgKiBDb3B5IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gZnJhZwotICAgKi8KLSAgcHJvdGVjdGVkIEJvb2xlYW5GcmFnbWVudCggQm9vbGVhbkZyYWdtZW50IGZyYWcgKQotICB7Ci0gICAgdGhpcyggbnVsbCwKLSAgICAJICBudWxsLAotICAgIAkgIGZyYWcuY29uZGl0aW9uXywKLSAgICAJICBmcmFnLmdldENvbW1hbmRGYWN0b3J5KCksCi0gICAgCSAgZnJhZy5nZXRJZCgpICk7Ci0KLSAgICAvLyBOb3cgd2UgaGF2ZSB0byBjbG9uZSBpbiB0aGUgdHJ1ZSBhbmQgZmFsc2UKLSAgICAvLyBmcmFnbWVudHMuCi0gICAgdHJ1ZUZyYWdtZW50XyAgPSAoQ29tbWFuZEZyYWdtZW50KXRydWVGcmFnbWVudF8uY2xvbmUoKTsKLSAgICBmYWxzZUZyYWdtZW50XyA9IChDb21tYW5kRnJhZ21lbnQpZmFsc2VGcmFnbWVudF8uY2xvbmUoKTsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBNYWtlcyBhIGNvcHkgb2YgdGhlIENvbW1hbmRGcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbkZyYWdtZW50KCB0aGlzICk7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgeyAgICAKLSAgICByZXR1cm4gY29uZGl0aW9uXy5ldmFsdWF0ZSgpID8gdHJ1ZUZyYWdtZW50XyA6IGZhbHNlRnJhZ21lbnRfOwotICB9Ci0gIAotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgY29uZGl0aW9uLgotICAgKiBAcGFyYW0gY29uZGl0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb25kaXRpb24oIENvbmRpdGlvbiBjb25kaXRpb24gKQotICB7Ci0gICAgY29uZGl0aW9uXyA9IGNvbmRpdGlvbjsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSB0cnVlIGZyYWdtZW50LgotICAgKiBAcGFyYW0gZnJhZ21lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRydWVGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHRydWVGcmFnbWVudF8gPSBmcmFnbWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGZhbHNlIGZyYWdtZW50LgotICAgKiBAcGFyYW0gZnJhZ21lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZhbHNlRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBmYWxzZUZyYWdtZW50XyA9IGZyYWdtZW50OwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ2hvaWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Nob2ljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYzc3MmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ2hvaWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5FdmFsdWF0ZTsKLQotCi0vKioKLSAgKiBUaGlzIGNsYXNzIHJldHVybnMgYSBmcmFnbWVudCBmcm9tIGEgbGlzdCBvZiBmcmFnbWVudHMgYmFzZWQKLSAgKiBvbiB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlIEV2YWx1YXRlIG9iamVjdC4KLSoqLwotcHVibGljIGNsYXNzIENob2ljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQgCi17Ci0gIHByaXZhdGUgSGFzaHRhYmxlICAgICAgZnJhZ21lbnRUYWJsZV87Ci0gIHByaXZhdGUgRXZhbHVhdGUgICAgICAgZXZhbHVhdGVfOwotCi0gIC8qKgotICAgICogQ3JlYXRlIGEgY2xvbmUgd2l0aCBuZXcgYSBuZXcgaGFzaHRhYmxlLgotICAqKi8KLSAgcHJvdGVjdGVkIENob2ljZUZyYWdtZW50KCBDaG9pY2VGcmFnbWVudCBmcmFnICkKLSAgewotICAgIHN1cGVyKCBmcmFnLmdldENvbW1hbmRGYWN0b3J5KCksIGZyYWcuZ2V0SWQoKSApOwotICAgIAotICAgIGV2YWx1YXRlXyAgICAgID0gZnJhZy5ldmFsdWF0ZV87Ci0gICAgZnJhZ21lbnRUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAKLSAgICBFbnVtZXJhdGlvbiBrZXlzID0gZnJhZy5mcmFnbWVudFRhYmxlXy5rZXlzKCk7Ci0KLSAgICAvLyBDbG9uZSB0aGUgZnJhZ21lbnRzIGluIHRoZSB0YWJsZS4KLSAgICB3aGlsZSgga2V5cy5oYXNNb3JlRWxlbWVudHMoKSApCi0gICAgewotICAgICAgT2JqZWN0IGtleSA9IGtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgIGZyYWdtZW50VGFibGVfLnB1dCgga2V5LCAoKENvbW1hbmRGcmFnbWVudClmcmFnLmZyYWdtZW50VGFibGVfLmdldChrZXkpKS5jbG9uZSgpICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgQ2hvaWNlRnJhZ21lbnQoIE9iamVjdFtdICAgICAgICAgIGtleXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZyYWdtZW50W10gZnJhZ21lbnRzICkKLSAgewotICAJdGhpcygga2V5cywgZnJhZ21lbnRzLCBudWxsLCBudWxsLCAiIiApOyAgICAKLSAgfQotICAKLSAgcHVibGljIENob2ljZUZyYWdtZW50KCBPYmplY3RbXSAgICAgICAgICBrZXlzLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudFtdIGZyYWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBFdmFsdWF0ZSAgICAgICAgICBldmFsdWF0ZSApCi0gIHsKLSAgCXRoaXMoIGtleXMsIGZyYWdtZW50cywgZXZhbHVhdGUsIG51bGwsICIiICk7Ci0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRFdmFsdWF0ZSggRXZhbHVhdGUgZXZhbHVhdGUgKQotICB7Ci0gICAgZXZhbHVhdGVfID0gZXZhbHVhdGU7ICAKLSAgfQotICAKLSAgLyoqCi0gICAgKiBDb25zdHJ1Y3RzIGEgY2hvaWNlIGZyYWdtZW50LiAgVGhlIGtleSBhdCBpbmRleCBYIGlzIG1hcHBlZCB0byAKLSAgICAqIHRvIHRoZSBmcmFnbWVudCBhdCBpbmRleCBYLgotICAgICoKLSAgICAqIEBwYXJhbSBrZXlzIHRoZXNlIGtleXMgbXVzdCBiZSB1bmlxdWUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgZXF1YWxzIG1ldGhvZC4KLSAgICAqIFRoZXkgYXJlIHVzZWQgdG8gaWRlbnRpZnkgd2hpY2ggZnJhZ21lbnQgdG8gcmV0dXJuLgotICAgICogQHBhcmFtIGZyYWdtZW50cyB0aGVzZSBhcmUgdGhlIGZyYWdtZW50cyB0byBiZSByZXR1cm5lZC4gIE51bGwgaXMgbm90IGFsbG93ZWQKLSAgICAqIGFzIGFuIGVudHJ5IGluIHRoZSBhcnJheS4KLSAgICAqIEBwYXJhbSBldmFsdWF0ZSB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IHRoaXMgZXZhbHVhdGUgb2JqZWN0IGlzIHVzZWQKLSAgICAqIGFzIHRoZSBrZXkgdG8gbG9jYXRlIGEgZnJhZ21lbnQuCi0gICAgKiBAcGFyYW0gc3RhdGUgdGhlIHN0YXRlIHBhc3NlZCB0byBldmFsdWF0ZS4KLSAgKiovCi0gIHB1YmxpYyBDaG9pY2VGcmFnbWVudCggT2JqZWN0W10gICAgICAgICAga2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRnJhZ21lbnRbXSBmcmFnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGUgICAgICAgICAgZXZhbHVhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZhY3RvcnkgICAgY29tbWFuZEZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgaWQgKQotICB7Ci0gICAgc3VwZXIoIGNvbW1hbmRGYWN0b3J5LCBpZCApOwotCi0gICAgZXZhbHVhdGVfICAgICAgPSBldmFsdWF0ZTsKLSAgICBmcmFnbWVudFRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLQotICAgIGlmKCBrZXlzID09IG51bGwgfHwgZnJhZ21lbnRzID09IG51bGwgfHwga2V5cy5sZW5ndGggIT0gZnJhZ21lbnRzLmxlbmd0aCApCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkJhZCBrZXlzIG9yIGZyYWdtZW50cy4iICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgdGhlIGZyYWdtZW50IHRhYmxlLgotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGtleXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgZnJhZ21lbnRUYWJsZV8ucHV0KCBrZXlzW2luZGV4XSwgZnJhZ21lbnRzW2luZGV4XSApOwotICAgICAgfSAgICAgCi0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICAqIE1ha2VzIGEgY29weSBvZiB0aGUgQ29tbWFuZEZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDaG9pY2VGcmFnbWVudCggdGhpcyApOwotICB9Ci0gIAotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgeyAgICAKLSAgICBPYmplY3Qga2V5ICAgICAgICAgICAgICA9IGV2YWx1YXRlXy5ldmFsdWF0ZSgpOwotICAgIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCA9IChDb21tYW5kRnJhZ21lbnQpZnJhZ21lbnRUYWJsZV8uZ2V0KGtleSk7Ci0KLSAgICBpZiggZnJhZ21lbnQgPT0gbnVsbCApCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIktleSBub3QgZm91bmQgaW4gdGFibGUuIEtleT0iICsga2V5ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZyYWdtZW50OwotICB9Ci0gIAotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRmFjdG9yeUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRmFjdG9yeUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MDc1YWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZhY3RvcnlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb21tYW5kRmFjdG9yeUZyYWdtZW50IGltcGxlbWVudHMgQ29tbWFuZEZyYWdtZW50IAotewotICBwcml2YXRlIFZlY3RvciBjb21tYW5kc187Ci0gIAotICAvKioKLSAgICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgYW5kIHJldHVybgotICAgKiBhbiBDb21tYW5kRmFjdG9yeS4KLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKTsKLSAgCi0gIC8qKgotICAgKiBBbGwgd2l6YXJkIGZyYWdtZW50cyBuZWVkIHRvIGJlIGNsb25lYWJsZS4KLSAgKiovCi0gIHB1YmxpYyBhYnN0cmFjdCBPYmplY3QgY2xvbmUoKTsKLSAgCi0gIHByb3RlY3RlZCBDb21tYW5kRmFjdG9yeUZyYWdtZW50KCBDb21tYW5kRmFjdG9yeUZyYWdtZW50IGZyYWcgKQotICB7Ci0gICAgY29tbWFuZHNfID0gZnJhZy5jb21tYW5kc187ICAKLSAgfQotICAKLSAgcHVibGljIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBSZXR1cm5zIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgLyoqIAotICAgICogR2V0cyBleGVjdXRhYmxlIGNvbW1hbmQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRmFjdG9yeSBnZXRDb21tYW5kRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7Ci0JQ29tbWFuZEZyYWdtZW50IHJlc3VsdCA9IG51bGw7Ci0JCi0gICAgY29tbWFuZHNfID0gY3JlYXRlQ29tbWFuZHMoKTsJCi0KLQlpZiggY29tbWFuZHNfLnNpemUoKSA+IDAgKQotCXsKLQkgIHJlc3VsdCA9IChDaGlsZEZyYWdtZW50KWNvbW1hbmRzXy5lbGVtZW50QXQoMCk7Ci0JfQotCQotCXJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCUNvbW1hbmRGcmFnbWVudCByZXN1bHQgPSBudWxsOwotCQkKLQlpZiggY29tbWFuZHNfICE9IG51bGwgJiYgZnJhZ21lbnQgaW5zdGFuY2VvZiBDaGlsZEZyYWdtZW50ICkgCi0JewotCSAgQ2hpbGRGcmFnbWVudCBjaGlsZCA9IChDaGlsZEZyYWdtZW50KWZyYWdtZW50OwotCSAgCi0JICBpbnQgaW5kZXggPSBjaGlsZC5pbmRleF87Ci0JCi0gICAgICBpZiggaW5kZXggIT0gLTEgKQotCSAgewotCSAgICBpbmRleCsrOwotCSAgCi0JICAgIGlmKCBpbmRleCA8IGNvbW1hbmRzXy5zaXplKCkgKQotCQl7Ci0JCSAgcmVzdWx0ID0gKENvbW1hbmRGcmFnbWVudCljb21tYW5kc18uZWxlbWVudEF0KCBpbmRleCApOwotCQl9Ci0JICB9Ci0JfQotCQotCXJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgZGF0YSBtYXBwaW5ncyBmb3IgdGhpcyBjb21tYW5kIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoIERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkgKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gSWYgdGhlIGNvbW1hbmRzIGZvciB0aGlzIGZyYWdtZW50IHNob3VsZCBub3QgYmUgcnVuIHdpdGhpbiBhIHRyYW5zYWN0aW9uIHRoZW4KLSAgICogdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0cnVlLiAgSWYgdGhlIGZyYWdtZW50IGRvZXMgbm90IGNhcmUgaWYgaXQgaXMgcnVuIGluIGEgdHJhbnNhY3Rpb24KLSAgICogb3Igbm90IGl0IHNob3VsZCByZXR1cm4gZmFsc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBkb05vdFJ1bkluVHJhbnNhY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAKLSAgCi0gIHByaXZhdGUgVmVjdG9yIGNyZWF0ZUNvbW1hbmRzKCkKLSAgewotCVZlY3RvciAgICAgICAgICBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSAgPSBnZXRJQ29tbWFuZEZhY3RvcnkoKTsKLQlpbnQgICAgICAgICAgICAgaW5kZXggICAgPSAwOwotCQkgIAotCXdoaWxlKCBmYWN0b3J5ICE9IG51bGwgJiYgZmFjdG9yeS5oYXNOZXh0KCkgKQotCXsKLQkgIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNvbW1hbmQgPSBmYWN0b3J5LmdldE5leHRDb21tYW5kKCk7Ci0JCQkKLQkgIGNvbW1hbmRzLmFkZCggbmV3IENoaWxkRnJhZ21lbnQoIGNvbW1hbmQsIGluZGV4KysgKSApOwotCX0KLQkKLQlyZXR1cm4gY29tbWFuZHM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgQ2hpbGRGcmFnbWVudCBleHRlbmRzIFNpbXBsZUZyYWdtZW50Ci0gIHsKLQkgIGludCBpbmRleF87Ci0JCi0JICBwdWJsaWMgQ2hpbGRGcmFnbWVudCggQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY29tbWFuZCwgaW50IGluZGV4ICkKLQkgIHsKLQkgICAgc3VwZXIoIGNvbW1hbmQsIGNvbW1hbmQuZ2V0SUQoKSApOwotCSAgICBpbmRleF8gPSBpbmRleDsKLQkgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY3NjJhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLQotCi0vKioKLSAgKiBUaGlzIGludGVyZmFjZSBkZXNjcmliZXMgYSBsaXN0IG9mIGludGVycnVwdGFibGUgY29tbWFuZHMuICBUaGUKLSAgKiBvcmRlciBvZiB0aGlzIGxpc3Qgb2YgY29tbWFuZHMgaXMgZGVmaW5lZCBieSB0aGUgZ2V0Rmlyc3RTdWJGcmFnbWVudCBhbmQKLSAgKiBnZXROZXh0U3ViRnJhZ21lbnQgbWV0aG9kcy4KLSoqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBDbG9uZWFibGUKLXsgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBSZXR1cm5zIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCk7Ci0gIAotICAvKiogCi0gICAgKiBHZXRzIGV4ZWN1dGFibGUgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGYWN0b3J5IGdldENvbW1hbmRGYWN0b3J5KCk7Ci0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpOwotCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKTsKLSAgCi0gIC8qCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgZGF0YSBtYXBwaW5ncyBmb3IgdGhpcyBjb21tYW5kIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoIERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkgKTsKLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gSWYgdGhlIGNvbW1hbmRzIGZvciB0aGlzIGZyYWdtZW50IHNob3VsZCBub3QgYmUgcnVuIHdpdGhpbiBhIHRyYW5zYWN0aW9uIHRoZW4KLSAgICogdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0cnVlLiAgSWYgdGhlIGZyYWdtZW50IGRvZXMgbm90IGNhcmUgaWYgaXQgaXMgcnVuIGluIGEgdHJhbnNhY3Rpb24KLSAgICogb3Igbm90IGl0IHNob3VsZCByZXR1cm4gZmFsc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBkb05vdFJ1bkluVHJhbnNhY3Rpb24oKTsKLSAgCi0gIC8qKgotICAgICogQWxsIHdpemFyZCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCk7ICAKLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RW5naW5lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRFbmdpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUxMTY5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRFbmdpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjMgICAxMjkyMzIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAzMTMgICAxMzA5NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjEwMTEgICAxNTkyODMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHByb2plY3Qgbm90IGFzc29jaWF0ZWQgdG8gRUFSIHdoZW4gdXNpbmcgYW50IG9uIGNvbW1hbmQtbGluZQotICogMjAwNzAzMjMgICAxNzU4MDAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA3MzAgICAxOTcxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGFzcyBwcm9ncmVzcyBtb25pdG9yIHRvIHVuZG8gY29tbWFuZHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5FbnZpcm9ubWVudENvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLQotLyoqCi0gKiBUaGUgQ29tbWFuZEZyYWdtZW50RW5naW5lIHByb3ZpZGVzIGEgY29udmllbmVudCB3YXkgdG8gdHJhdmVyc2UgQ29tbWFuZEZyYWdtZW50cwotICogYW5kIHBvc3NpYmxpdHkgZXhlY3V0ZSBpdHMgYXNzb2NpYXRlIENvbW1hbmQuCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tYW5kRnJhZ21lbnRFbmdpbmUgaW1wbGVtZW50cyBDb21tYW5kTWFuYWdlcgotewotICBwcml2YXRlIFN0YWNrICAgICAgICAgICAgY29tbWFuZFN0YWNrXzsKLSAgcHJpdmF0ZSBGcmFnbWVudExpc3RlbmVyIHVuZG9GcmFnbWVudExpc3RlbmVyXzsKLSAgcHJpdmF0ZSBGcmFnbWVudExpc3RlbmVyIG5leHRGcmFnbWVudExpc3RlbmVyXzsKLSAgcHJpdmF0ZSBGcmFnbWVudExpc3RlbmVyIGFmdGVyRXhlY3V0ZUZyYWdtZW50TGlzdGVuZXJfOwotICBwcml2YXRlIEZyYWdtZW50TGlzdGVuZXIgcGVla0ZyYWdtZW50TGlzdGVuZXJfOwotICBwcml2YXRlIERhdGFGbG93TWFuYWdlciAgZGF0YU1hbmFnZXJfOwotICBwcml2YXRlIElFbnZpcm9ubWVudCAgICAgZW52aXJvbm1lbnRfOwotICBwcml2YXRlIElTdGF0dXMgICAgICAgICAgbGFzdFN0YXR1c187Ci0gIAotICAvKioKLSAgICogQ3JlYXRlcyBhIENvbW1hbmRGcmFnbWVudEVuZ2luZS4KLSAgICogCi0gICAqIEBwYXJhbSBzdGFydEZyYWdtZW50IHRoZSByb290IGZyYWdtZW50IHdoZXJlIHRyYXZlcnNhbCB3aWxsIGJlZ2luLgotICAgKiBAcGFyYW0gZGF0YU1hbmFnZXIgdGhlIGRhdGEgbWFuYWdlciBjb250YWluaW5nIGFsbCBvZiB0aGUgZGF0YSBtYXBwaW5ncy4KLSAgICogQHBhcmFtIGVudmlyb25tZW50IHRoZSBlbnZpcm9ubWVudC4KLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRFbmdpbmUoIENvbW1hbmRGcmFnbWVudCBzdGFydEZyYWdtZW50LCBEYXRhRmxvd01hbmFnZXIgZGF0YU1hbmFnZXIsIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCApCi0gIHsKLSAgCVNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gIAlyb290LmFkZCggc3RhcnRGcmFnbWVudCApOwotICAJICAJCi0gIAljb21tYW5kU3RhY2tfID0gbmV3IFN0YWNrKCk7Ci0gIAkKLSAgCWFkZFRvU3RhY2soIHJvb3QsIC0xICk7Ci0gIAlhZGRUb1N0YWNrKCBzdGFydEZyYWdtZW50LCAwICk7Ci0gIAkKLSAgCWRhdGFNYW5hZ2VyXyA9IGRhdGFNYW5hZ2VyOwotICAJZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gIH0gCi0gIAotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZyAgICAgIG5ld2xpbmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7ICAgIAotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgCi0gICAgYnVmZmVyLmFwcGVuZChuZXdsaW5lKTsKLSAgICBidWZmZXIuYXBwZW5kKCJDb21tYW5kIHN0YWNrIHN0YXJ0OiIpOwotICAgIGJ1ZmZlci5hcHBlbmQobmV3bGluZSk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvbW1hbmRTdGFja18uc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBDb21tYW5kTGlzdEVudHJ5IGVudHJ5ID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgZW50cnkuZHVtcChidWZmZXIsIGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgYnVmZmVyLmFwcGVuZCgiQ29tbWFuZCBzdGFydCBlbmQ6Iik7Ci0gICAgYnVmZmVyLmFwcGVuZChuZXdsaW5lKTsKLSAgICAKLSAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIERhdGEgbWFwcGluZyByZWdpc3RyeS4KLSAgICovCi0gIHB1YmxpYyBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGdldE1hcHBpbmdSZWdpc3RyeSgpCi0gIHsKLQlyZXR1cm4gZGF0YU1hbmFnZXJfLmdldE1hcHBpbmdSZWdpc3RyeSgpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gdGhlIFN0YXR1cyBmcm9tIHRoZSBsYXN0IENvbW1hbmQgZXhlY3V0ZWQuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRMYXN0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBsYXN0U3RhdHVzXzsKLSAgfQotICAKLSAgLyoqCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VuZG9FbmFibGVkKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgbmV4dCBmcmFnbWVudCBsaXN0ZW5lciBmb3IgdGhpcyBlbmdpbmUuICBUaGlzIGxpc3RlbmVyIHdpbGwgYmUKLSAgICogY2FsbGVkIGZvciBlYWNoIGZyYWdtZW50IHRoYXQgaXMgdHJhdmVyc2VkIGluIG1vdmVGb3J3YXJkVG9OZXh0U3RvcCBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGZyYWdtZW50IGxpc3RlbmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmV4dEZyYWdtZW50TGlzdGVuZXIoIEZyYWdtZW50TGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgbmV4dEZyYWdtZW50TGlzdGVuZXJfID0gbGlzdGVuZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEFmdGVyRXhlY3V0ZUZyYWdtZW50TGlzdGVuZXIoIEZyYWdtZW50TGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgYWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lcl8gPSBsaXN0ZW5lcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIG5leHQgZnJhZ21lbnQgbGlzdGVuZXIgZm9yIHRoaXMgZW5naW5lLiAgVGhpcyBsaXN0ZW5lciB3aWxsIGJlCi0gICAqIGNhbGxlZCBmb3IgZWFjaCBmcmFnbWVudCB0aGF0IGlzIHRyYXZlcnNlZCBpbiBwZWVrRm9yd2FyZFRvTmV4dFN0b3Agb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBmcmFnbWVudCBsaXN0ZW5lci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBlZWtGcmFnbWVudExpc3RlbmVyKCBGcmFnbWVudExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIHBlZWtGcmFnbWVudExpc3RlbmVyXyA9IGxpc3RlbmVyOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgcGVlayBmcmFnbWVudCBsaXN0ZW5lciBmb3IgdGhpcyBlbmdpbmUuICBUaGlzIGxpc3RlbmVyIHdpbGwgYmUKLSAgICogY2FsbGVkIGZvciBlYWNoIGZyYWdtZW50IHRoYXQgaXMgdHJhdmVyc2VkIGluIHVuZG9Ub0xhc3RTdG9wIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgZnJhZ21lbnQgbGlzdGVuZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVbmRvRnJhZ21lbnRMaXN0ZW5lciggRnJhZ21lbnRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICB1bmRvRnJhZ21lbnRMaXN0ZW5lcl8gPSBsaXN0ZW5lcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRyYXZlcnNlIHRoZSBDb21tYW5kRnJhZ21lbnRzIHN0YXJ0aW5nIHdpdGggdGhlIENvbW1hbmRGcmFnbWVudCBvbiB0aGUKLSAgICogdG9wIG9mIHRoZSBjb21tYW5kIGZyYWdtZW50IHN0YWNrLiAgVGhlIG9wZXJhdGlvbiBkb2VzIE5PVCBjaGFuZ2UgdGhlCi0gICAqIGNvbW1hbmQgZnJhZ21lbnQgc3RhY2sgYW5kIGRvZXMgbm90IGV4ZWN1dGUgYW55IGNvbW1hbmQgYXNzb2NpYXRlZCB3aXRoCi0gICAqIGEgQ29tbWFuZEZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcGVla0ZvcndhcmRUb05leHRTdG9wKCkKLSAgewotICAJQ29tbWFuZExpc3RFbnRyeSB0b3BFbnRyeSAgICAgID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5sYXN0RWxlbWVudCgpOyAgCQotICAJaW50ICAgICAgICAgICAgICBwYXJlbnRJbmRleCAgID0gdG9wRW50cnkucGFyZW50SW5kZXhfOwotICAJQ29tbWFuZEZyYWdtZW50ICBjaGlsZEZyYWdtZW50ID0gdG9wRW50cnkuZnJhZ21lbnRfOyAKLSAgCWJvb2xlYW4gICAgICAgICAgY29udGludWVMb29wICA9IG5hdmlnYXRlQ2hpbGRGcmFnbWVudHMoIGNoaWxkRnJhZ21lbnQsIGZhbHNlICk7Ci0gIAkgIAkKLSAgCXdoaWxlKCBwYXJlbnRJbmRleCAhPSAtMSAmJiBjb250aW51ZUxvb3AgKQotICAJeyAgCQotICAJICBDb21tYW5kTGlzdEVudHJ5IHBhcmVudEVudHJ5ICAgID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5lbGVtZW50QXQoIHBhcmVudEluZGV4ICk7Ci0gIAkgIENvbW1hbmRGcmFnbWVudCAgcGFyZW50RnJhZ21lbnQgPSBwYXJlbnRFbnRyeS5mcmFnbWVudF87Ci0gIAkgIENvbW1hbmRGcmFnbWVudCAgbmV4dEZyYWdtZW50ICAgPSBwYXJlbnRGcmFnbWVudC5nZXROZXh0U3ViRnJhZ21lbnQoIGNoaWxkRnJhZ21lbnQgKTsKLSAgCSAgCi0gIAkgIGlmKCBuZXh0RnJhZ21lbnQgPT0gbnVsbCApCi0gIAkgIHsKLSAgCSAgCS8vIFRoZXJlIGFyZSBubyBtb3JlIHNpYmxpbmcgZnJhZ21lbnRzIHRvIG5hdmlnYXRlIHNvIHdlIHdpbGwgcG9wIHVwIHRvIHRoZSBwYXJlbnQKLSAgCSAgCS8vIGFuIGNvbnRpbnVlIG5hdmlnYXRpb24gdGhlcmUuCi0gIAkgIAlwYXJlbnRJbmRleCAgID0gcGFyZW50RW50cnkucGFyZW50SW5kZXhfOwotICAJICAJY2hpbGRGcmFnbWVudCA9IHBhcmVudEZyYWdtZW50OyAKLSAgCSAgfQotICAJICBlbHNlCi0gIAkgIHsgIAkgIAkKLSAgCSAgCWlmKCBuYXZpZ2F0ZUNoaWxkRnJhZ21lbnRzKCBuZXh0RnJhZ21lbnQsIHRydWUgKSApIAotICAJICAJewotICAJICAJICAvLyBXZSBhcmUgY29udGludWluZyB0byBuYXZpZ2F0ZS4gIFRoaXMgdGltZSB3ZSB3YW50IHRvIHRyYXZlcnNlIHRoZSBzaWJsaW5nCi0gIAkgIAkgIC8vIG9mIG5leHRGcmFnbWVudC4gCi0gIAkgIAkgIGNoaWxkRnJhZ21lbnQgPSBuZXh0RnJhZ21lbnQ7Ci0gIAkgIAl9Ci0gIAkgIAllbHNlCi0gIAkgIAl7Ci0gIAkgIAkgIC8vIFdlIGFyZSBzdG9wcGluZyBvdXIgbmF2aWdhdGlvbi4KLSAgCSAgCSAgY29udGludWVMb29wID0gZmFsc2U7Ci0gIAkgIAl9Ci0gIAkgIH0KLSAgCX0KLSAgfQotICAKLSAgCi0gIC8qKgotICAgKiBUcmF2ZXJzZSB0aGUgQ29tbWFuZEZyYWdtZW50cyBzdGFydGluZyB3aXRoIHRoZSBDb21tYW5kRnJhZ21lbnQgb24gdGhlCi0gICAqIHRvcCBvZiB0aGUgY29tbWFuZCBmcmFnbWVudCBzdGFjay4gIFRoaXMgb3BlcmF0aW9uIGRvZXMgY2hhbmdlIHRoZQotICAgKiBjb21tYW5kIGZyYWdtZW50IHN0YWNrIGFuZCBkb2VzIGV4ZWN1dGUgYW55IGNvbW1hbmQgYXNzb2NpYXRlZCB3aXRoCi0gICAqIGEgQ29tbWFuZEZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgbW92ZUZvcndhcmRUb05leHRTdG9wKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0gIAlDb21tYW5kTGlzdEVudHJ5IHRvcEVudHJ5ICAgICAgICA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18ubGFzdEVsZW1lbnQoKTsgIAkKLSAgCWludCAgICAgICAgICAgICAgcGFyZW50SW5kZXggICAgID0gdG9wRW50cnkucGFyZW50SW5kZXhfOwotICAJQ29tbWFuZEZyYWdtZW50ICBjdXJyZW50RnJhZ21lbnQgPSB0b3BFbnRyeS5mcmFnbWVudF87ICAKLSAgCWJvb2xlYW4gICAgICAgICAgY29udGludWVFeGVjdXRlID0gdmlzaXRUb3AoIG1vbml0b3IgKTsKLSAgCUNvbW1hbmRGcmFnbWVudCAgY2hpbGRGcmFnbWVudCAgICA9IGN1cnJlbnRGcmFnbWVudC5nZXRGaXJzdFN1YkZyYWdtZW50KCk7Ci0gIAkgICAgCi0gIAkvLyBJZiB0aGUgY3VycmVudCBmcmFnbWVudCBoYXMgY2hpbGQgZnJhZ21lbnRzIHdlIG5lZWQgdG8gdHJhdmVyc2UgdGhlc2UgY2hpbGRyZW4uCi0gIAl3aGlsZSggY2hpbGRGcmFnbWVudCAhPSBudWxsICYmIGNvbnRpbnVlRXhlY3V0ZSApCi0gIAl7Ci0gIAkgIHBhcmVudEluZGV4ID0gY29tbWFuZFN0YWNrXy5zaXplKCkgLSAxOwotICAJICBhZGRUb1N0YWNrKCBjaGlsZEZyYWdtZW50LCBwYXJlbnRJbmRleCApOwotICAJICBjb250aW51ZUV4ZWN1dGUgPSB2aXNpdFRvcCggbW9uaXRvciApOwotICAJICBjdXJyZW50RnJhZ21lbnQgPSBjaGlsZEZyYWdtZW50OwotICAJICBjaGlsZEZyYWdtZW50ICAgPSBjdXJyZW50RnJhZ21lbnQuZ2V0Rmlyc3RTdWJGcmFnbWVudCgpOwotICAJfQotICAJCi0gIAkvLyBUaGUgcHJldmlvdXMgd2hpbGUgbG9vcCBoYXMgZ3VhcmFudGVlZCB0aGF0IGN1cnJlbnRGcmFnbWVudCBoYXMgbm8KLSAgCS8vIGNoaWxkIGZyYWdtZW50cy4gVGhpcyB3aGlsZSBsb29wIGFzc3VtZXMgdGhpcyB0byBiZSB0aGUgY2FzZS4KLSAgCXdoaWxlKCBwYXJlbnRJbmRleCAhPSAtMSAmJiBjb250aW51ZUV4ZWN1dGUgKQotICAJeyAgCSAgIAkKLSAgCSAgQ29tbWFuZExpc3RFbnRyeSBwYXJlbnRFbnRyeSAgICA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18uZWxlbWVudEF0KCBwYXJlbnRJbmRleCApOwotICAJICBDb21tYW5kRnJhZ21lbnQgIHBhcmVudEZyYWdtZW50ID0gcGFyZW50RW50cnkuZnJhZ21lbnRfOwotICAJICBDb21tYW5kRnJhZ21lbnQgIG5leHRGcmFnbWVudCAgID0gbnVsbDsKLSAgCSAgCi0gIAkgIGlmKCBjdXJyZW50RnJhZ21lbnQgPT0gbnVsbCApCi0gIAkgIHsKLSAgCSAgICBuZXh0RnJhZ21lbnQgPSBwYXJlbnRGcmFnbWVudC5nZXRGaXJzdFN1YkZyYWdtZW50KCk7Ci0gIAkgIH0KLSAgCSAgZWxzZQotICAJICB7CQotICAJICAgIG5leHRGcmFnbWVudCA9IHBhcmVudEZyYWdtZW50LmdldE5leHRTdWJGcmFnbWVudCggY3VycmVudEZyYWdtZW50ICk7Ci0gIAkgIH0KLSAgCSAgCi0gIAkgIGlmKCBuZXh0RnJhZ21lbnQgPT0gbnVsbCApCi0gIAkgIHsKLSAgCSAgCS8vIFRoZXJlIGFyZSBubyBtb3JlIHNpYmxpbmcgZnJhZ21lbnRzIHRvIG5hdmlnYXRlIHNvIHdlIHdpbGwgcG9wIHVwIHRvIHRoZSBwYXJlbnQKLSAgCSAgCS8vIGFuZCBjb250aW51ZSBuYXZpZ2F0aW9uIHRoZXJlLgotICAJICAJcGFyZW50SW5kZXggICAgID0gcGFyZW50RW50cnkucGFyZW50SW5kZXhfOwotICAJICAJY3VycmVudEZyYWdtZW50ID0gcGFyZW50RnJhZ21lbnQ7IAotICAJICB9Ci0gIAkgIGVsc2UKLSAgCSAgeyAgCQotICAJICAJLy8gV2UgaGF2ZSBhIG5ldyBmcmFnbWVudCB0aGF0IHdlIG5lZWQgdG8gYWRkIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLgotICAJICAJYWRkVG9TdGFjayggbmV4dEZyYWdtZW50LCBwYXJlbnRJbmRleCApOyAgCSAgCQotICAJICAgIHBhcmVudEluZGV4ICAgICA9IGNvbW1hbmRTdGFja18uc2l6ZSgpIC0gMTsgIAkKLSAgCSAgICBjb250aW51ZUV4ZWN1dGUgPSB2aXNpdFRvcCggbW9uaXRvciApOwotICAJICAgIGN1cnJlbnRGcmFnbWVudCA9IG51bGw7ICAJICAJCi0gIAkgIH0KLSAgCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGUgdGhlcmUgaXMgbm90IGxvbmdlciBhbnkgZWxlbWVudHMgb24gdGhlIHN0YWNrLiAgTm90ZToKLSAgICogICAgICAgICAgICAgICAgIHRoYXQgbGFzdCB0d28gZW50cmllcyBhcmUgYWx3YXlzIGxlZnQgb24gdGhlIHN0YWNrLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gdW5kb1RvTGFzdFN0b3AoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsgICAgCi0gIAlDb21tYW5kTGlzdEVudHJ5IHRvcEVudHJ5ID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5sYXN0RWxlbWVudCgpOwkKLSAgCQotCSAgaWYoIHRvcEVudHJ5LmZyYWdtZW50U3RvcHBlZF8gJiYgIXRvcEVudHJ5LmJlZm9yZUV4ZWN1dGVfICkKLSAgICB7Ci0gICAgICAvLyBOb3JtYWxseSB0aGUgY29tbWFuZCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBoYXMgbm90IGJlZW4gZXhlY3V0ZWQuICBJZgotICAgICAgLy8gaXQgaGFzIGJlZW4gZXhlY3V0ZSwgaXQgbWVhbnMgdGhhdCB3ZSB0cmllZCB0byBleGVjdXRlIGFuZCBpdCBmYWlsZWQuCi0gICAgICAvLyBUaGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBzdGFjayBmYWlsZWQuICBUaGVyZWZvcmUsIHdlIHNob3VsZAotICAgICAgLy8gb25seSB1bmRvIHRoaXMgY29tbWFuZC4KLSAgICAgIHBlcmZvcm1VbmRvKCB0b3BFbnRyeSwgbW9uaXRvciApOwotICAgICAgcmV0dXJuIHRvcEVudHJ5LnBhcmVudEluZGV4XyA9PSAwOwotICAgIH0KLSAgICAKLSAgCXBlcmZvcm1VbmRvKCB0b3BFbnRyeSwgbW9uaXRvciApOwotICAJCQotICAgIHdoaWxlKCB0b3BFbnRyeS5wYXJlbnRJbmRleF8gIT0gMCApCi0gIAl7Ci0gICAgICBjb21tYW5kU3RhY2tfLnBvcCgpOwotICAJICB0b3BFbnRyeSA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18ubGFzdEVsZW1lbnQoKTsJICAKLSAgICAgIAotICAJICBwZXJmb3JtVW5kbyggdG9wRW50cnksIG1vbml0b3IgKTsKLSAgCSAgCi0gIAkgIGlmKCB0b3BFbnRyeS5mcmFnbWVudFN0b3BwZWRfICkKLSAgCSAgewotICAJICAgIGJyZWFrOwotICAJICB9Ci0gIAl9Ci0gIAkKLSAgCXJldHVybiB0b3BFbnRyeS5wYXJlbnRJbmRleF8gPT0gMDsKLSAgfQotICAgCi0gIHByaXZhdGUgdm9pZCBwZXJmb3JtVW5kbyggQ29tbWFuZExpc3RFbnRyeSBlbnRyeSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAgIGlmKCBlbnRyeS5wYXJlbnRJbmRleF8gPT0gMCApIHJldHVybjsKLSAgICAKLQkgIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNtZCA9IGVudHJ5LmNvbW1hbmRfOwotICAJICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiggY21kICE9IG51bGwgKQotICAgICAgewotICAgICAgICBpZiggY21kLmNhblVuZG8oKSAmJiAhZW50cnkuYmVmb3JlRXhlY3V0ZV8gKQotCSAgICAgIHsKLQkgICAgICAgIGNtZC51bmRvKCBtb25pdG9yLCBudWxsICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRhdGFNYW5hZ2VyXy51bnByb2Nlc3MoIGNtZCApOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLQkgIGVudHJ5LmJlZm9yZUV4ZWN1dGVfID0gdHJ1ZTsgIAotCSAgdW5kb0ZyYWdtZW50TGlzdGVuZXJfLm5vdGlmeSggZW50cnkuZnJhZ21lbnRfICk7ICAJCi0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBuYXZpZ2F0ZUNoaWxkRnJhZ21lbnRzKCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQsIGJvb2xlYW4gdmlzaXRDdXJyZW50ICkKLSAgewotICAJYm9vbGVhbiAgICAgICAgIGNvbnRpbnVlTmF2aWdhdGUgPSB0cnVlOwotICAJQ29tbWFuZEZyYWdtZW50IGNoaWxkRnJhZyAgICAgICAgPSBudWxsOyAKLSAgCSAgCi0gIAlpZiggdmlzaXRDdXJyZW50ICkKLSAgCXsKLSAgCSAgY29udGludWVOYXZpZ2F0ZSA9IHBlZWtGcmFnbWVudExpc3RlbmVyXy5ub3RpZnkoIGZyYWdtZW50ICk7Ci0gICAgICBkYXRhTWFuYWdlcl8ucHJvY2VzcyggZnJhZ21lbnQgKTsKLSAgCX0KLSAgCQotICAJY2hpbGRGcmFnID0gZnJhZ21lbnQuZ2V0Rmlyc3RTdWJGcmFnbWVudCgpOwotICAgCQotICAJd2hpbGUoIGNoaWxkRnJhZyAhPSBudWxsICYmIGNvbnRpbnVlTmF2aWdhdGUgKQotICAJewotICAJICBjb250aW51ZU5hdmlnYXRlID0gbmF2aWdhdGVDaGlsZEZyYWdtZW50cyggY2hpbGRGcmFnLCB0cnVlICk7Ci0gIAkgIGNoaWxkRnJhZyAgICAgICAgPSBmcmFnbWVudC5nZXROZXh0U3ViRnJhZ21lbnQoIGNoaWxkRnJhZyApOwotICAJfQotICAJCi0gIAlyZXR1cm4gY29udGludWVOYXZpZ2F0ZTsKLSAgfQotICAgIAotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRUb3AoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsgIAotICAJQ29tbWFuZExpc3RFbnRyeSBlbnRyeSAgICAgICAgICAgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmxhc3RFbGVtZW50KCk7Ci0gIAlib29sZWFuICAgICAgICAgY29udGludWVOYXZpZ2F0ZSA9IG5leHRGcmFnbWVudExpc3RlbmVyXy5ub3RpZnkoIGVudHJ5LmZyYWdtZW50XyApOwotICAJICAKLSAgCWlmKCBjb250aW51ZU5hdmlnYXRlICkKLSAgCXsKLSAgCSAgLy8gQ2FsbCB0aGUgc2V0dGVycyBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBlbnRyeS5mcmFnbWVudF8gKTsKLSAgICAgIAotICAgICAgLy8gQWRkIGFueSBydWxlcyB0byB0aGUgbWFwcGluZyByZWdpc3RyeSBiZWZvcmUgd2UgZXhlY3V0ZSB0aGUgY29tbWFuZC4KLSAgICAgIGVudHJ5LmZyYWdtZW50Xy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YU1hbmFnZXJfLmdldE1hcHBpbmdSZWdpc3RyeSgpICk7Ci0gICAKLSAgCSAgbGFzdFN0YXR1c18gPSBydW5Db21tYW5kKCBlbnRyeSwgbW9uaXRvciApOwotICAJICAKLSAgICAgIGlmKCBhZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyXyAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWVOYXZpZ2F0ZSA9IGFmdGVyRXhlY3V0ZUZyYWdtZW50TGlzdGVuZXJfLm5vdGlmeSggZW50cnkuZnJhZ21lbnRfICk7ICAKLSAgICAgICAgCi0gICAgICAgIGlmKCAhY29udGludWVOYXZpZ2F0ZSApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgYWZ0ZXIgZXhlY3V0aW9uIGxpc3RlbmVyIGhhcyBpbmRpY2F0ZWQgdGhhdCBleGVjdXRpb24gc2hvdWxkIHN0b3AuCi0gICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB3aWxsIHVwZ3JhZGUgdGhlIHNldmVyaXR5IG9mIHRoZSBsYXN0IHN0YXR1cyB0byBFUlJPUi4KLSAgICAgICAgICBsYXN0U3RhdHVzXyA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0YXR1c18uZ2V0UGx1Z2luKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0YXR1c18uZ2V0Q29kZSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdGF0dXNfLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdGF0dXNfLmdldEV4Y2VwdGlvbigpICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAJICBpZiggY29udGludWVOYXZpZ2F0ZSAmJiBsYXN0U3RhdHVzXy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IgKSBjb250aW51ZU5hdmlnYXRlID0gZmFsc2U7Ci0gIAl9Ci0gIAkKLSAgIAlpZiggIWNvbnRpbnVlTmF2aWdhdGUgKSBlbnRyeS5mcmFnbWVudFN0b3BwZWRfID0gdHJ1ZTsKLSAgIAkKLSAgCXJldHVybiBjb250aW51ZU5hdmlnYXRlOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYWRkVG9TdGFjayggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50LCBpbnQgcGFyZW50SW5kZXggKQotICB7Ci0gICAgQ29tbWFuZExpc3RFbnRyeSBlbnRyeSA9IG5ldyBDb21tYW5kTGlzdEVudHJ5KCBmcmFnbWVudCwgcGFyZW50SW5kZXggKTsKLSAgICBjb21tYW5kU3RhY2tfLnB1c2goIGVudHJ5ICk7Ci0gIH0KLSAgCi0gIC8vIFN1YmNsYXNzZXMgY2FuIGRvIGluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIGEgY29tbWFuZCBoZXJlCi0gIHByb3RlY3RlZCBJU3RhdHVzIGluaXRCZWZvcmVFeGVjdXRlKCBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBvcGVyYXRpb24gKQotICB7ICAKLQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwcml2YXRlIElTdGF0dXMgcnVuQ29tbWFuZCggQ29tbWFuZExpc3RFbnRyeSBlbnRyeSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotCUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgID0gZW50cnkuZnJhZ21lbnRfLmdldENvbW1hbmRGYWN0b3J5KCk7Ci0gIAlJU3RhdHVzICAgICAgc3RhdHVzICAgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJCi0gIAlpZiggZmFjdG9yeSAhPSBudWxsICkKLSAgCXsKLSAgCSAgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY21kICA9IGZhY3RvcnkuY3JlYXRlKCk7Ci0gICAgICAKLSAgCSAgZW50cnkuY29tbWFuZF8gPSBjbWQ7Ci0gIAkgICAgCi0gIAkgIGlmKCBjbWQgIT0gbnVsbCApCi0gIAkgIHsKLSAgCSAgICB0cnkKLSAgCSAgICB7Ci0gIAkgICAgICBkYXRhTWFuYWdlcl8ucHJvY2VzcyggY21kICk7ICAJICAgIAkKLSAgCSAgICAJCi0gICAgICAgICAgc3RhdHVzID0gaW5pdEJlZm9yZUV4ZWN1dGUoIGNtZCApOwotICAgICAgICAgIAotICAJICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTAwMSwgdGhpcywgInJ1bkNvbW1hbmQiLCAiRXhlY3V0aW5nOiAiICsgY21kLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgCSAgCSAgICAKLSAJICAgICAgICBjbWQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50XyApOwotICAgICAgICAgIHN0YXR1cyA9IGNtZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgICAgICAgCi0JCSAgICAgIGVudHJ5LmJlZm9yZUV4ZWN1dGVfID0gZmFsc2U7Ci0gIAkgICAgfQotICAJICAgIGNhdGNoKCBUaHJvd2FibGUgZXhjICkKLSAgCSAgICB7Ci0gIAkgICAgICBJU3RhdHVzICAgICAgdW5leHBlY3RlZEVycm9yID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIGV4YyApOwotICAgICAgICAgIE11bHRpU3RhdHVzICBwYXJlbnRTdGF0dXMgICAgPSBuZXcgTXVsdGlTdGF0dXMoICJpZCIsIDAsIG5ldyBJU3RhdHVzW117dW5leHBlY3RlZEVycm9yfSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVJST1IsIG51bGwgKTsKLSAgCSAgICAgIGVudmlyb25tZW50Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHBhcmVudFN0YXR1cyApOwotICAJICAgICAgc3RhdHVzID0gdW5leHBlY3RlZEVycm9yOwotICAJICAgIH0KLSAgCSAgICBmaW5hbGx5Ci0gIAkgICAgewotICAJICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiT2siOwotICAJICAgICAgCi0gIAkgICAgICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SICkKLSAgCSAgICAgIHsKLSAgCSAgICAgICAgbWVzc2FnZSA9ICJFcnJvcjogIiArIHN0YXR1cy5nZXRNZXNzYWdlKCk7IAotICAJICAgICAgfQotICAJICAgICAgCi0JICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTAwMSwgdGhpcywgInJ1bkNvbW1hbmQiLCAiRXhlY3V0aW9uIHN0YXR1czogIiArIG1lc3NhZ2UgKTsKLSAgCSAgICB9Ci0gIAkgIH0KLSAgCX0KLSAgCQotICAJcmV0dXJuIHN0YXR1czsKLSAgfQotICAgIAotICBwcml2YXRlIGNsYXNzIENvbW1hbmRMaXN0RW50cnkKLSAgewotICAJcHVibGljIENvbW1hbmRMaXN0RW50cnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCwgaW50IHBhcmVudEluZGV4ICkKLSAgCXsKLSAgCSAgZnJhZ21lbnRfICAgICAgICA9IGZyYWdtZW50OwotICAJICBwYXJlbnRJbmRleF8gICAgID0gcGFyZW50SW5kZXg7Ci0gIAkgIGZyYWdtZW50U3RvcHBlZF8gPSBmYWxzZTsKLQkgIGJlZm9yZUV4ZWN1dGVfICAgPSB0cnVlOwotICAJfQotICAJICAJCi0gIAlwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY29tbWFuZF87Ci0gIAlwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50XzsKLSAgCXB1YmxpYyBpbnQgICAgICAgICAgICAgcGFyZW50SW5kZXhfOwotICAJcHVibGljIGJvb2xlYW4gICAgICAgICBmcmFnbWVudFN0b3BwZWRfOwotICAJcHVibGljIGJvb2xlYW4gICAgICAgICBiZWZvcmVFeGVjdXRlXzsKLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkdW1wKCBTdHJpbmdCdWZmZXIgYnVmZmVyLCBpbnQgaW5kZXggKQotICAgIHsKLSAgICAgIFN0cmluZyBuZXdsaW5lID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAgICAKLSAgICAgIFN0cmluZyBsaW5lICAgID0gIiAgIiArIGluZGV4ICsgIi0gZnJhZzogIiArIGZyYWdtZW50Xy5nZXRJZCgpICsgIiBwYXJJbmRleDogIiArIHBhcmVudEluZGV4XyArICIgc3RvcDogIiArIGZyYWdtZW50U3RvcHBlZF8gKyAiIGJlZm9yZUV4ZWN1dGU6ICIgKyBiZWZvcmVFeGVjdXRlXyA7Ci0gICAgICBidWZmZXIuYXBwZW5kKGxpbmUpOyAKLSAgICAgIGJ1ZmZlci5hcHBlbmQobmV3bGluZSk7Ci0gICAgfQotICB9ICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjNjOTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHdheSB0byBjcmVhdGUgQ29tbWFuZEZyYWdtZW50cy4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29tbWFuZEZyYWdtZW50RmFjdG9yeQotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGNyZWF0ZWQgQ29tbWFuZEZyYWdtZW50IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5ZmI2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5IAotewotICAvKioKLSAgICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIG1ldGhvZCB0byBnZXQgdGhlIENvbW1hbmRGcmFnbWVudEZhY3RvcnkKLSAgICogZm9yIGEgcGFydGljdWxhciBleHRlbnNpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIENyZWF0ZXMgYSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5LgotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCk7ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0V4dGVuc2lvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9FeHRlbnNpb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTE3M2YxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0V4dGVuc2lvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnJlZ2lzdHJ5LkNvbW1hbmRSZWdpc3RyeTsKLQotCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaW9uRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCAKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSAgICAgICAgaWRzXzs7Ci0gIHByaXZhdGUgQ29tbWFuZFJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5XzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgZnJhZ21lbnRzXzsKLSAgCi0gIC8qKgotICAgKiAgVGhlIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgICoKLSAgICovCi0gIHB1YmxpYyBFeHRlbnNpb25GcmFnbWVudCgpCi0gIHsKLSAgICBzdXBlciggbnVsbCwgIiIgKTsgIAotICAgIGZyYWdtZW50c18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIENvcHkgY29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBGcmFnbWVudCB0aGUgZnJhZ21lbnQgdG8gY29weQotICAgKi8KLSAgcHJvdGVjdGVkIEV4dGVuc2lvbkZyYWdtZW50KCBFeHRlbnNpb25GcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBzdXBlciggZnJhZ21lbnQgKTsKLSAgICAKLSAgICBpZHNfICAgICAgICAgICAgICAgPSBmcmFnbWVudC5pZHNfOwotICAgIGV4dGVuc2lvblJlZ2lzdHJ5XyA9IGZyYWdtZW50LmV4dGVuc2lvblJlZ2lzdHJ5XzsKLSAgICBmcmFnbWVudHNfICAgICAgICAgPSBmcmFnbWVudC5mcmFnbWVudHNfOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBpZHMgU2V0cyB0aGUgSURzIGZvciB0aGlzIGV4dGVuc2lvbiBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVuc2lvbklkcyggU3RyaW5nW10gaWRzICkKLSAgewotICAgIGlkc18gPSBpZHM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHJlZ2lzdHJ5IFNldHMgdGhlIHJlZ2lzdHJ5IGZvciB0aGlzIGV4dGVuc2lvbiBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVuc2lvblJlZ2lzdHJ5KCBDb21tYW5kUmVnaXN0cnkgcmVnaXN0cnkgKQotICB7Ci0gICAgZXh0ZW5zaW9uUmVnaXN0cnlfID0gcmVnaXN0cnk7IAotICB9Ci0gICAgICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I2dldEZpcnN0U3ViRnJhZ21lbnQoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkgCi0gIHsKLSAgICBDb21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSBmYWN0b3J5ICA9IGV4dGVuc2lvblJlZ2lzdHJ5Xy5nZXRGYWN0b3J5RmFjdG9yeSggaWRzXyApOwotICAgIAotICAgIGlmKCBmYWN0b3J5ID09IG51bGwgKSByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBDb21tYW5kRnJhZ21lbnQgICAgICAgICAgICAgICBmcmFnbWVudCA9IChDb21tYW5kRnJhZ21lbnQpZnJhZ21lbnRzXy5nZXQoIGZhY3RvcnkgKTsKLSAgICAKLSAgICBpZiggZnJhZ21lbnQgPT0gbnVsbCApCi0gICAgewotICAgICAgZnJhZ21lbnQgPSBmYWN0b3J5LmNyZWF0ZSgpLmNyZWF0ZSgpOwotICAgICAgZnJhZ21lbnRzXy5wdXQoIGZhY3RvcnksIGZyYWdtZW50ICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAgZnJhZ21lbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCNnZXROZXh0U3ViRnJhZ21lbnQob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50KQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50KSAKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2Nsb25lKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotICAgIHJldHVybiBuZXcgRXh0ZW5zaW9uRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRnJhZ21lbnRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRnJhZ21lbnRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGRlN2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0ZyYWdtZW50TGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBzaG91bGQgYmUgaW1wbGVtZW50IGZvciBjb2RlIHRoYXQgbmVlZHMgdG8gbGlzdGVuIHRvIGZyYWdtZW50cwotICogdGhhdCBhcmUgYmVpbmcgdHJhdmVyc2UgYnkgdGhlIENvbW1hbmRGcmFnbWVudEVuZ2luZS4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRnJhZ21lbnRMaXN0ZW5lciAKLXsKLSAgLyoKLSAgICogTm90aWZpZXMgdGhpcyBsaXN0ZW5lciB0aGF0IGEgY29tbWFuZEZyYWdtZW50IGlzIGJlaW5nIHZpc2l0ZWQgZHVyaW5nCi0gICAqIGEgdHJhdmVyc2FsLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgY29tbWFuZEZyYWdtZW50ICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Mb29wQ29uZGl0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Mb29wQ29uZGl0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwM2IxYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvTG9vcENvbmRpdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi0vKioKLSAgKiBUaGlzIGludGVyZmFjZSBjYW4gYmUgdXNlZCB3aGVuIGEgY29uZGl0aW9uYWwgb2JqZWN0IG5lZWRzIHRvIGJlIHJldHVybmVkLgotKiovCi1wdWJsaWMgaW50ZXJmYWNlIExvb3BDb25kaXRpb24KLXsKLSAgLyoqCi0gICAgKiBFdmFsdWF0ZXMgYSBsb29wIGNvbmRpdGlvbi4KLSAgICAqCi0gICAgKiBAcGFyYW0gbG9vcCB0aGUgbG9vcCBmcmFnbWVudCB0aGF0IGlzIGJlaW5nIGV2YWx1YXRlZC4KLSAgICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgY2hpbGQgZnJhZ21lbnQgb2YgdGhlIGxvb3AgCi0gICAgKiAgICAgICAgdW5kZXIgZXZhbHVhdGlvbi4gIE5vdGU6IGZyYWdtZW50IGNhbiBiZSBudWxsLgotICAgICogQHJldHVybiByZXR1cm5zIGFuIG9iamVjdCBiYXNlZCBvbiBzb21lIGV2YWx1YXRlZCBjb25kaXRpb24uCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSggTG9vcEZyYWdtZW50IGxvb3AsIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvTG9vcEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Mb29wRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM5NzFhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Mb29wRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUmFuZ2VWZWN0b3I7Ci0KLQotLyoqCi0gICogVGhpcyBjbGFzcyByZXR1cm5zIGEgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZCBudW1iZXIgb2YKLSAgKiBmcmFnbWVudHMuICBUaGlzIGxvb3Agd2lsbCByZXR1cm4gdGhlIGZyYWdtZW50IHBhcmFtZXRlcgotICAqIGFzIGxvbmcgYXMgdGhlIHN0b3BDb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlLiAgT3RoZXJ3aXNlLAotICAqIG51bGwgaXMgcmV0dXJuZWQuCi0qKi8KLXB1YmxpYyBjbGFzcyBMb29wRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudAotewotICBwcml2YXRlIExvb3BDb25kaXRpb24gICBzdG9wQ29uZGl0aW9uXzsKLSAgcHJpdmF0ZSBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnRfOwotICBwcml2YXRlIFJhbmdlVmVjdG9yICAgICBmcmFnbWVudEhpc3RvcnlfOwotCi0gIC8qKgotICAgICogQ29weSBjb250cnVjdG9yIGZvciB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHJvdGVjdGVkIExvb3BGcmFnbWVudCggTG9vcEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHRoaXMoIGZyYWdtZW50LmZyYWdtZW50XywKLSAgICAJICBmcmFnbWVudC5zdG9wQ29uZGl0aW9uXywKLSAgICAJICBmcmFnbWVudC5nZXRDb21tYW5kRmFjdG9yeSgpLAotICAgIAkgIGZyYWdtZW50LmdldElkKCkgKTsKLSAgfQotICAKLSAgcHVibGljIExvb3BGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgTG9vcENvbmRpdGlvbiAgIHN0b3BDb25kaXRpb24gKQotICB7Ci0gICAgdGhpcyggZnJhZ21lbnQsIHN0b3BDb25kaXRpb24sIG51bGwsICIiICk7Ci0gIH0gICAgICAgICAgICAgICAgICAgICAgIAotICAKLSAgLyoqCi0gICAgKiBAcGFyYW0gZnJhZ21lbnQgdGhlIGZyYWdtZW50IHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUgbG9vcC4KLSAgICAqIEBwYXJhbSBzdG9wQ29uZGl0aW9uIHdoZW4gZmFsc2UgdGhlIGZyYWdtZW50IHdpbGwgYmUgcmV0dXJuZWQsIAotICAgICogb3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuCi0gICAgKiBAcGFyYW0gc3RhdGUgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGUgY29uZGl0aW9uLgotICAgICogQHBhcmFtIGNvbW1hbmQgdGhlIGV4ZWN1dGFibGUgY29tbWFuZCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBMb29wRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgTG9vcENvbmRpdGlvbiAgIHN0b3BDb25kaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGYWN0b3J5ICBjb21tYW5kRmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgIGlkICAgKQotICB7Ci0gICAgc3VwZXIoIGNvbW1hbmRGYWN0b3J5LCBpZCApOwotCi0gICAgZnJhZ21lbnRfICAgICAgICA9IGZyYWdtZW50OwotICAgIHN0b3BDb25kaXRpb25fICAgPSBzdG9wQ29uZGl0aW9uOwotICAgIGZyYWdtZW50SGlzdG9yeV8gPSBuZXcgUmFuZ2VWZWN0b3IoKTsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBNYWtlcyBhIGNvcHkgb2YgdGhlIENvbW1hbmRGcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAgIHJldHVybiBuZXcgTG9vcEZyYWdtZW50KCB0aGlzICk7Ci0gIH0KLQotICAvKioKLSAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmcmFnbWVudAotICAgICoKLSAgICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdG8gc2VhcmNoLgotICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBpbnQgaW5kZXhPZiggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHJldHVybiBmcmFnbWVudEhpc3RvcnlfLmluZGV4T2YoIGZyYWdtZW50ICk7Ci0gIH0KLQotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7ICAgIAotICAgIHJldHVybiBnZXROZXh0U3ViRnJhZ21lbnQoIG51bGwgKTsKLSAgfQotCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZyApCi0gIHsKLSAgICBDb21tYW5kRnJhZ21lbnQgbmV4dEZyYWcgID0gbnVsbDsKLSAgICAKLSAgICBpZiggc3RvcENvbmRpdGlvbl8uZXZhbHVhdGUoIHRoaXMsIGZyYWcgKSApCi0gICAgewotICAgICAgLy8gVGhlIHN0b3AgY29uZGl0aW9uIGhhcyBiZWVuIG1ldC4KLSAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgfQotICAgIGVsc2UKLSAgICB7ICAgICAgCi0gICAgICBpbnQgZnJhZ0luZGV4ID0gaW5kZXhPZiggZnJhZyApOwotCi0gICAgICAvLyBOb3RlOiB3aGVuIGZyYWdtZW50ID09IG51bGwgdGhlIGZyYWdJbmRleAotICAgICAgLy8gICAgICAgc2hvdWxkIGJlIC0xLiAgVGhlcmVmb3JlLCBpZiB0aGVyZQotICAgICAgLy8gICAgICAgaXMgYWxyZWFkeSBhIGZpcnN0IGZyYWdtZW50IGluCi0gICAgICAvLyAgICAgICBmcmFnbWVudEhpc3RvcnkgdGhhdCB3aWxsIGJlIHJldHVybmVkLgotICAgICAgaWYoIGZyYWdJbmRleCArIDEgPCBmcmFnbWVudEhpc3RvcnlfLnNpemUoKSApCi0gICAgICB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBjb3B5IG9mIHRoZSBmcmFnbWVudCBhbHJlYWR5LgotICAgICAgICBuZXh0RnJhZyA9IChDb21tYW5kRnJhZ21lbnQpKGZyYWdtZW50SGlzdG9yeV8uZWxlbWVudEF0KCBmcmFnSW5kZXggKyAxICkpOyAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbmV4dEZyYWcgPSAoQ29tbWFuZEZyYWdtZW50KShmcmFnbWVudF8uY2xvbmUoKSk7Ci0gICAgICAgIGZyYWdtZW50SGlzdG9yeV8uYWRkKCBuZXh0RnJhZyApOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuZXh0RnJhZzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2VxdWVuY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2VxdWVuY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTBjZTZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L1NlcXVlbmNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLQotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzZXF1ZW5jZSBvZiBDb21tYW5kRnJhZ21lbnRzLgotKiovCi1wdWJsaWMgY2xhc3MgU2VxdWVuY2VGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgTGlzdCBmcmFnbWVudExpc3RfOwotCi0gIHByb3RlY3RlZCBTZXF1ZW5jZUZyYWdtZW50KCBTZXF1ZW5jZUZyYWdtZW50IGZyYWcgKQotICB7Ci0gIAlzdXBlciggZnJhZy5nZXRDb21tYW5kRmFjdG9yeSgpLCBmcmFnLmdldElkKCkgKTsKLSAgCQotICAgIGZyYWdtZW50TGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGZyYWcuZnJhZ21lbnRMaXN0Xy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIE9iamVjdCBuZXdGcmFnID0gKChDb21tYW5kRnJhZ21lbnQpZnJhZy5mcmFnbWVudExpc3RfLmdldChpbmRleCkpLmNsb25lKCk7Ci0gICAgICBmcmFnbWVudExpc3RfLmFkZCggbmV3RnJhZyApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFNlcXVlbmNlRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudFtdIGZyYWdtZW50cywgCi0JCQkJCQkgICBDb21tYW5kRmFjdG9yeSAgICBjb21tYW5kRmFjdG9yeSwgCi0JCQkJCSAgICAgICBTdHJpbmcgICAgICAgICAgICBpZCAgKQotICB7Ci0gIAlzdXBlciggY29tbWFuZEZhY3RvcnksIGlkICk7Ci0gIAkKLSAgICBpZiggZnJhZ21lbnRzICE9IG51bGwgKQotICAgIHsKLSAgICAgIGZyYWdtZW50TGlzdF8gPSBBcnJheXMuYXNMaXN0KCBmcmFnbWVudHMgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGZyYWdtZW50TGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgU2VxdWVuY2VGcmFnbWVudCgpCi0gIHsKLSAgCXN1cGVyKCBudWxsLCAiIiApOwotICAJCi0gIAlmcmFnbWVudExpc3RfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgLyoqCi0gICAgKiBBcHBlbmRzIGEgZnJhZ21lbnQgdG8gdGhlIHNlcXVlbmNlLiAKLSAgKiovCi0gIHB1YmxpYyB2b2lkIGFkZCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIGZyYWdtZW50TGlzdF8uYWRkKCBmcmFnbWVudCApOwotICB9Ci0gIAotICAvKioKLSAgICAqIE1ha2VzIGEgY29weSBvZiB0aGUgQ29tbWFuZEZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTZXF1ZW5jZUZyYWdtZW50KCB0aGlzICk7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgewotICAgIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCA9IG51bGw7Ci0KLSAgICBpZiggZnJhZ21lbnRMaXN0XyA9PSBudWxsIHx8IGZyYWdtZW50TGlzdF8uc2l6ZSgpID09IDAgKQotICAgIHsKLSAgICAgIGZyYWdtZW50ID0gbnVsbDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsgICAgICAKLSAgICAgIGZyYWdtZW50ID0gKENvbW1hbmRGcmFnbWVudCkoIGZyYWdtZW50TGlzdF8uZ2V0KDApICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZyYWdtZW50OyAgICAKLSAgfQotCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgaW50IGluZGV4ID0gZnJhZ21lbnRMaXN0Xy5pbmRleE9mKCBmcmFnbWVudCApOwotCi0gICAgaWYoIGluZGV4ID09IC0xICkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiRnJhZ21lbnQgbm90IGZvdW5kIGluIHNlcXVlbmNlLiIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaW5kZXgrKzsKLQotICAgICAgaWYoIGluZGV4ID49IGZyYWdtZW50TGlzdF8uc2l6ZSgpICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyBmb2xsb3dpbmcgdGhpcyBmcmFnbWVudCBzbyByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFJldHVybiB0aGUgbmV4dCBmcmFnbWVudC4KLSAgICAgICAgcmV0dXJuIChDb21tYW5kRnJhZ21lbnQpKGZyYWdtZW50TGlzdF8uZ2V0KCBpbmRleCApKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0JCi19ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L1NpbXBsZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9TaW1wbGVGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTNlYmE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L1NpbXBsZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYW4gZW1wdHkgb2YgV2l6YXJkRnJhZ21lbnQuCi0qKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50Ci17Ci0gIHB1YmxpYyBTaW1wbGVGcmFnbWVudCgpCi0gIHsKLSAgICB0aGlzKCAoQ29tbWFuZEZhY3RvcnkpbnVsbCwgIiIgKTsKLSAgfQotICAKLSAgcHVibGljIFNpbXBsZUZyYWdtZW50KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgdGhpcyggKENvbW1hbmRGYWN0b3J5KW51bGwsIGlkICk7ICAKLSAgfQotICAKLSAgcHVibGljIFNpbXBsZUZyYWdtZW50KCBmaW5hbCBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBpZCApCi0gIHsKLSAgICBzdXBlciggbmV3IENvbW1hbmRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb247Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICB9LCBpZCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTaW1wbGVGcmFnbWVudCggQ29tbWFuZEZhY3RvcnkgY29tbWFuZEZhY3RvcnksIFN0cmluZyBpZCApCi0gIHsKLSAgCXN1cGVyKCBjb21tYW5kRmFjdG9yeSwgaWQgKTsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBDb3B5IGNvbnN0cnVjdG9yIGZvciBmcmFnbWVudC4KLSAgKiovCi0gIHByb3RlY3RlZCBTaW1wbGVGcmFnbWVudCggU2ltcGxlRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgc3VwZXIoIGZyYWdtZW50LmdldENvbW1hbmRGYWN0b3J5KCksIGZyYWdtZW50LmdldElkKCkgKTsKLSAgfQotICAgIAotICAvKioKLSAgICAqIEFsbCB3aXphcmQgZnJhZ21lbnRzIG5lZWQgdG8gYmUgY2xvbmVhYmxlLgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNpbXBsZUZyYWdtZW50KCB0aGlzICk7Ci0gIH0KLQotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKXsgcmV0dXJuIG51bGw7IH0KLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKiBTaW5jZSB0aGlzIGlzIGEgc2ltcGxlIGZyYWdtZW50LCB0aGVyZSBpcyBubyBuZXh0IGZyYWdtZW50Ci0gICAgKiBzbyB3ZSB3aWxsIGFsd2F5cyByZXR1cm4gbnVsbC4gCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLyAgCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKXsgcmV0dXJuIG51bGw7IH0KLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvcmVnaXN0cnkvQ29tbWFuZFJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9yZWdpc3RyeS9Db21tYW5kUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU2ZWY4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9yZWdpc3RyeS9Db21tYW5kUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBhIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5Ci0gKiBmcm9tIGFuIGFycmF5IG9mIGlkcy4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29tbWFuZFJlZ2lzdHJ5IAoteyAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkgZnJvbSBhbiBhcnJheSBvZiBpZHMuCi0gICAqIAotICAgKiBAcGFyYW0gaWRzIHRoZSBpZHMuCi0gICAqIEByZXR1cm4gdGhlIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSBnZXRGYWN0b3J5RmFjdG9yeSggU3RyaW5nW10gaWRzICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vQm9vbGVhblNlbGVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0Jvb2xlYW5TZWxlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4MDVhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vQm9vbGVhblNlbGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIFRoaXMgY2xhc3MgY29tYmluZXMgYSBzdHJpbmcgd2l0aCBhIGJvb2xlYW4gdmFsdWUuICBUaGlzIGlzCi0gKiB1c2VmdWwgZm9yIHN0b3JpbmcgdGhlIHN0YXRlIGRhdGEgZm9yIGEgYm9vbGVhbiBzZWxlY3Rpb24gbGlzdC4KLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBCb29sZWFuU2VsZWN0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nICB2YWx1ZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBzZWxlY3RlZF87Ci0gIAotICBwdWJsaWMgQm9vbGVhblNlbGVjdGlvbiggU3RyaW5nIHZhbHVlLCBib29sZWFuIHNlbGVjdGVkICkKLSAgewotICAgIHZhbHVlXyAgICA9IHZhbHVlOwotICAgIHNlbGVjdGVkXyA9IHNlbGVjdGVkOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gR2V0IHRoZSBzdHJpbmcgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkKLSAgewotICAgIHJldHVybiB2YWx1ZV87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBHZXQgdGhlIGJvb2xlYW4gdmFsdWUgZm9yIHRoaXMgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNTZWxlY3RlZCgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vQ2hvaWNlc1RvU3RyaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vQ2hvaWNlc1RvU3RyaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzNjNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0Nob2ljZXNUb1N0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLS8qKgotICogVGhpcyB0cmFuc2Zvcm1lciBjbGFzcyBzZWxlY3RzIGEgc3RyaW5nIGF0IGEgcGFydGljdWxhciBsZXZlbAotICogaW4gYSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIENob2ljZXNUb1N0cmluZyBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIHByaXZhdGUgaW50IGxldmVsXzsKLSAgCi0gIHB1YmxpYyBDaG9pY2VzVG9TdHJpbmcoIGludCBsZXZlbCApCi0gIHsKLSAgICBsZXZlbF8gPSBsZXZlbDsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXIjdHJhbnNmb3JtKGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybSggT2JqZWN0IHZhbHVlICkKLSAgewotICAgIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNob2ljZXMgPSAoU2VsZWN0aW9uTGlzdENob2ljZXMpdmFsdWU7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxldmVsXzsgaW5kZXgrKyApCi0gICAgewotICAgICAgY2hvaWNlcyA9IGNob2ljZXMuZ2V0Q2hvaWNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjaG9pY2VzLmdldExpc3QoKS5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0IHRyYW5zZm9ybSggU2VsZWN0aW9uTGlzdENob2ljZXMgY2hvaWNlcyApCi0gIHsKLSAgICByZXR1cm4gKFNlbGVjdGlvbkxpc3QpdHJhbnNmb3JtKCAoT2JqZWN0KWNob2ljZXMgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0R5bmFtaWNMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vRHluYW1pY0xpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZlYzcxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vRHluYW1pY0xpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAqIFRoaXMgaXMgYSBEeW5hbWljIHZlcnNpb24gb2YgdGhlIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgRHluYW1pY0xpc3QgCi17Ci0gIHByaXZhdGUgVmVjdG9yIHN0cmluZ0xpc3RfID0gbmV3IFZlY3RvcigpOwotICBwcml2YXRlIFZlY3RvciBkeW5hbWljTGlzdFZlY3Rvckxpc3RfID0gbmV3IFZlY3RvcigpOwotICAKLSAgLyoqCi0gICAqIEFkZHMgYW4gZW50cnkgaW50byB0aGUgZHluYW1pYyBsaXN0LgotICAgKiAKLSAgICogQHBhcmFtIHZhbHVlcyB0aGUgc3RyaW5nIHZhbHVlcyB0aGF0IGxlYWQgdG8gdGhlIHRhcmdldC4KLSAgICogQHBhcmFtIHRhcmdldCB0aGUgdGFyZ2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKCBTdHJpbmdbXSB2YWx1ZXMsIE9iamVjdCB0YXJnZXQgKQotICB7Ci0gICAgRHluYW1pY0xpc3QgY3VycmVudExpc3QgPSB0aGlzOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBTdHJpbmcgdmFsdWUgICAgICA9IHZhbHVlc1tpbmRleF07Ci0gICAgICBpbnQgICAgbGVuZ3RoICAgICA9IGN1cnJlbnRMaXN0LnN0cmluZ0xpc3RfLnNpemUoKTsKLSAgICAgIGludCAgICBmb3VuZEluZGV4ID0gLTE7Ci0gICAgICAKLSAgICAgIC8vIEZpbmQgdGhlIHN0cmluZyBpbiB0aGUgY3VycmVudCBsaXN0LgotICAgICAgZm9yKCBpbnQgc2VhcmNoSW5kZXggPSAwOyBzZWFyY2hJbmRleCA8IGxlbmd0aDsgc2VhcmNoSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmcgPSAoU3RyaW5nKWN1cnJlbnRMaXN0LnN0cmluZ0xpc3RfLmVsZW1lbnRBdCggc2VhcmNoSW5kZXggKTsgCi0gICAgICAgIAotICAgICAgICBpZiggc3RyaW5nLmVxdWFscyggdmFsdWUgKSApIAotICAgICAgICB7Ci0gICAgICAgICAgZm91bmRJbmRleCA9IHNlYXJjaEluZGV4OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmKCBmb3VuZEluZGV4ID09IC0xICkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIG5ldyBzdHJpbmcgc28gYWRkIGl0IHRvIHRoZSBsaXN0LgotICAgICAgICBjdXJyZW50TGlzdC5zdHJpbmdMaXN0Xy5hZGQoIHZhbHVlICk7Ci0gICAgICAgIGN1cnJlbnRMaXN0LmR5bmFtaWNMaXN0VmVjdG9yTGlzdF8uYWRkKCBuZXcgRHluYW1pY0xpc3QoKSApOwotICAgICAgICBmb3VuZEluZGV4ID0gbGVuZ3RoOwotICAgICAgfQotICAgICAgCi0gICAgICBjdXJyZW50TGlzdCA9IChEeW5hbWljTGlzdCljdXJyZW50TGlzdC5keW5hbWljTGlzdFZlY3Rvckxpc3RfLmVsZW1lbnRBdCggZm91bmRJbmRleCApOyAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgY3VycmVudExpc3QuZHluYW1pY0xpc3RWZWN0b3JMaXN0Xy5hZGQoIHRhcmdldCApOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIFNlbGVjdGlvbkxpc3RDaG9pY2VzIG9iamVjdCBmcm9tIHRoaXMgRHluYW1pY0xpc3QKLSAgICogb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHRvTGlzdENob2ljZXMoKQotICB7Ci0gICAgU2VsZWN0aW9uTGlzdCBsaXN0ICAgPSBuZXcgU2VsZWN0aW9uTGlzdCggKFN0cmluZ1tdKXN0cmluZ0xpc3RfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSwgMCk7Ci0gICAgaW50ICAgICAgICAgICBsZW5ndGggPSBkeW5hbWljTGlzdFZlY3Rvckxpc3RfLnNpemUoKTsKLSAgICBWZWN0b3IgICAgICAgIHZlY3RvciA9IG5ldyBWZWN0b3IoKTsgCi0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IGR5bmFtaWNMaXN0VmVjdG9yTGlzdF8uZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIAotICAgICAgaWYoIG9iaiBpbnN0YW5jZW9mIER5bmFtaWNMaXN0ICkKLSAgICAgIHsKLSAgICAgICAgdmVjdG9yLmFkZCggKChEeW5hbWljTGlzdClvYmopLnRvTGlzdENob2ljZXMoKSApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB2ZWN0b3IuYWRkKCBvYmogKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyggbGlzdCwgdmVjdG9yICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9TZWxlY3Rpb25MaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vU2VsZWN0aW9uTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDg1NzczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9TZWxlY3Rpb25MaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uOwotCi0vKioKLSAqIFRoaXMgY2xhc3Mgc3RvcmVzIGEgbGlzdCBzdHJpbmdzIGFsb25nIHdpdGggYSBzZWxlY3Rpb25JbmRleCB3aGljaAotICogc3RvcmVzIHRoZSBjdXJyZW50IHN0cmluZyB0aGF0IHNlbGVjdGVkLiAgVGhlcmUgaXMgYWxzbyBhIHNlbGVjdGlvbgotICogdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIG9uZSBvZiB0aGUgc3RyaW5ncyBpbiB0aGUgdGhlIHN0cmluZyBsaXN0Ci0gKiB0aGVuIHNlbGVjdGlvbkluZGV4IHdpbGwgY29udGFpbiB0aGUgaW5kZXggb2YgdGhpcyBzdHJpbmcuICBJZiBpdAotICogaXMgbm90IGluIHRoZSBsaXN0IHRoZW4gdGhlIHNlbGVjdGlvblZhbHVlIHN0cmluZyB3aWxsIGNvbnRhaW4gdGhpcwotICogdmFsdWUgYW5kIHNlbGVjdGlvbkluZGV4IHdpbGwgYmUgc2V0IHRvIC0xLiAgVGhpcyBjbGFzcyBjYW4gYmUKLSAqIHVzZWQgdG8gc3RvcmUgdGhlIHN0YXRlIGRhdGEgZm9yIGEgQ29tYm8gYm94LgotICovCi1wdWJsaWMgY2xhc3MgU2VsZWN0aW9uTGlzdAotewotICBwcml2YXRlIGludCAgICAgIHNlbGVjdGlvbkluZGV4XzsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBsaXN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICBzZWxlY3Rpb25WYWx1ZV87Ci0gIAotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCggU3RyaW5nW10gbGlzdCwgaW50IHNlbGVjdGlvbkluZGV4ICkKLSAgewotICAgIGxpc3RfICAgICAgICAgICA9IGxpc3Q7Ci0gICAgc2VsZWN0aW9uSW5kZXhfID0gc2VsZWN0aW9uSW5kZXg7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBzZWxlY3Rpb24gdmFsdWUgZm9yIHRoaXMgb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblZhbHVlKCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgc2VsZWN0aW9uVmFsdWVfID0gdmFsdWU7ICAKLSAgICBzZWxlY3Rpb25JbmRleF8gPSAtMTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGlzdF8ubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBpZiggdmFsdWUuZXF1YWxzKCBsaXN0X1tpbmRleF0gKSApCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvbkluZGV4XyA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0gCi0gIAotICAvKgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0cmluZyBsaXN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldExpc3QoKQotICB7Ci0gICAgcmV0dXJuIGxpc3RfOwotICB9Ci0gIAotICAvKgotICAgKiBTZXRzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RyaW5nIGluIHRoZSBsaXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5kZXgoIGludCBpbmRleCApCi0gIHsKLSAgICBzZWxlY3Rpb25JbmRleF8gPSBpbmRleDsKLSAgICBzZWxlY3Rpb25WYWx1ZV8gPSBudWxsOwotICB9Ci0gCi0gIC8qCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RyaW5nLiAgVGhlIHZhbHVlCi0gICAqIHdpbGwgYmUgLTEgaWYgdGhlIHNlbGVjdGlvbiB2YWx1ZSBpcyBub3QgaW4gdGhlIHN0cmluZyBsaXN0LgotICAgKi8KLSAgcHVibGljIGludCBnZXRJbmRleCgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uSW5kZXhfOyAgCi0gIH0KLSAgCi0gIC8qCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgY3VycmVudCBzdHJpbmcgc2VsZWN0aW9uIGZvciB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0aW9uKCkKLSAgewotICAgIGlmKCBzZWxlY3Rpb25WYWx1ZV8gIT0gbnVsbCApIHJldHVybiBzZWxlY3Rpb25WYWx1ZV87Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbkluZGV4XyA9PSAtMSB8fCBzZWxlY3Rpb25JbmRleF8gPiBsaXN0Xy5sZW5ndGgtMSApCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGxpc3RfWyBzZWxlY3Rpb25JbmRleF8gXTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9TZWxlY3Rpb25MaXN0Q2hvaWNlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3RDaG9pY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMjEwYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3RDaG9pY2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qCi0gKiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGEgaGllcmFyY2h5IG9mIFNlbGVjdGlvbkxpc3QKLSAqIG9iamVjdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTZWxlY3Rpb25MaXN0Q2hvaWNlcwotewotICBwcml2YXRlIFNlbGVjdGlvbkxpc3Qgc2VsZWN0aW9uTGlzdF87Ci0gIHByaXZhdGUgVmVjdG9yICAgICAgICBjaG9pY2VzXzsKLSAgcHJpdmF0ZSBTZWxlY3Rpb25MaXN0IG5ld1ZhbHVlU2VsZWN0aW9uTGlzdF87Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ICAgICBUaGUgc2VsZWN0aW9uIGxpc3QuCi0gICAqIEBwYXJhbSBjaG9pY2VzICBUaGlzIGlzIGEgdmVjdG9yIG9mIFNlbGVjdGlvbkxpc3RDaG9pZXMgYW5kIGNhbiBiZQotICAgKiAgICAgICAgICAgICAgICAgbnVsbCBpZiB0aGVyZSBhcmUgbm8gY2hvaWNlcy4gIFRoaXMgaW5kZXggb2YgbGlzdAotICAgKiAgICAgICAgICAgICAgICAgaXMgdXNlZCB0byBpbmRleCBpbnRvIGNob2ljZXMuICBJZiBpbmRleCBpcyAtMSB0aGVuCi0gICAqICAgICAgICAgICAgICAgICB0aGUgbmV3VmFsdWVTZWxlY3Rpb25MaXN0IGlzIHVzZWQuCi0gICAqLwotICBwdWJsaWMgU2VsZWN0aW9uTGlzdENob2ljZXMoIFNlbGVjdGlvbkxpc3QgbGlzdCwgVmVjdG9yIGNob2ljZXMgKQotICB7Ci0gICAgc2VsZWN0aW9uTGlzdF8gPSBsaXN0OwotICAgIGNob2ljZXNfICAgICAgID0gY2hvaWNlczsKLSAgICAKLSAgICBuZXdWYWx1ZVNlbGVjdGlvbkxpc3RfID0gbmV3IFNlbGVjdGlvbkxpc3QoIG5ldyBTdHJpbmdbMF0sIC0xICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyggU2VsZWN0aW9uTGlzdCBsaXN0LCBWZWN0b3IgY2hvaWNlcywgU2VsZWN0aW9uTGlzdCBuZXdMaXN0ICkKLSAgewotICAgIHRoaXMoIGxpc3QsIGNob2ljZXMgKTsKLSAgICBuZXdWYWx1ZVNlbGVjdGlvbkxpc3RfID0gbmV3TGlzdDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgY3VycmVudCBTZWxlY3Rpb24gbGlzdC4KLSAgICovCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldExpc3QoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbkxpc3RfOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgY2hvaWNlcyBmb3IgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldENob2ljZXMoKQotICB7Ci0gICAgcmV0dXJuIGNob2ljZXNfOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBsZXZlbCB0aGUgbGV2ZWwgaW4gdGhlIGhpZXJhcmNoeSB3aGVyZSB3ZSB3YW50IHRvIGdldCB0aGUgY2hvaWNlcy4KLSAgICogQHJldHVybiByZXR1cm5zIGEgdmVjdG9yIG9mIFNlbGVjdGlvbkxpc3RDaG9pY2VzLgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRDaG9pY2VzQXRMZXZlbCggaW50IGxldmVsICkKLSAgewotICAgIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNob2ljZXMgPSB0aGlzOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZXZlbDsgaW5kZXgrKyApCi0gICAgewotICAgICAgY2hvaWNlcyA9IGNob2ljZXMuZ2V0Q2hvaWNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjaG9pY2VzLmdldENob2ljZXMoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGN1cnJlbnQgU2VsZWN0aW9uTGlzdENob2ljZQotICAgKi8KLSAgcHVibGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGdldENob2ljZSgpCi0gIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25JbmRleCA9IHNlbGVjdGlvbkxpc3RfLmdldEluZGV4KCk7Ci0gICAgU2VsZWN0aW9uTGlzdENob2ljZXMgcmVzdWx0ICAgICAgICAgPSBudWxsOwotICAgIAotICAgIGlmKCBzZWxlY3Rpb25JbmRleCA9PSAtMSApCi0gICAgewotICAgICAgcmVzdWx0ID0gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKCBuZXdWYWx1ZVNlbGVjdGlvbkxpc3RfLCBudWxsICk7Ci0gICAgfQotICAgIGVsc2UgaWYoIGNob2ljZXNfICE9IG51bGwgJiYgY2hvaWNlc18uc2l6ZSgpICE9IDAgKSAKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoU2VsZWN0aW9uTGlzdENob2ljZXMpY2hvaWNlc18uZWxlbWVudEF0KCBzZWxlY3Rpb25JbmRleCApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGNob2ljZSB3ZSB3YW50LgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIFNlbGVjdGlvbkxpc3RDaG9pY2UgYXQgdGhlIGluZGV4IHNwZWNpZmllZC4KLSAgICovCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBnZXRDaG9pY2UoaW50IGluZGV4KQotICB7Ci0gICAgU2VsZWN0aW9uTGlzdENob2ljZXMgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGdldExpc3QoKS5nZXRMaXN0KCkubGVuZ3RoKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyggbmV3VmFsdWVTZWxlY3Rpb25MaXN0XywgbnVsbCApOyAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzdWx0ID0gKFNlbGVjdGlvbkxpc3RDaG9pY2VzKWNob2ljZXNfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICB9Ci0gICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS91cmkvTmF0aXZlRmlsZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3VyaS9OYXRpdmVGaWxlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE1NTA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3VyaS9OYXRpdmVGaWxlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS51cmk7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuSVVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5VUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE5hdGl2ZUZpbGVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb247Ci0KLSAgcHJvdGVjdGVkIElVUklbXSB1cmlzVG9SZWFkOwotCi0gIHByb3RlY3RlZCBJVVJJW10gdXJpc1RvV3JpdGU7Ci0KLSAgcHJvdGVjdGVkIE5hdGl2ZUZpbGVDb21tYW5kICgpCi0gIHsKLSAgICB0aGlzKG51bGwsbnVsbCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTmF0aXZlRmlsZUNvbW1hbmQgKCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uICkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVSSXNUb1JlYWQgKCBJVVJJW10gdXJpc1RvUmVhZCApCi0gIHsKLSAgICB0aGlzLnVyaXNUb1JlYWQgPSB1cmlzVG9SZWFkOwotICB9Ci0KLSAgcHVibGljIElVUklbXSBnZXRVUklzVG9SZWFkICgpCi0gIHsKLSAgICByZXR1cm4gdXJpc1RvUmVhZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVSSXNUb1dyaXRlICggSVVSSVtdIHVyaXNUb1dyaXRlICkKLSAgewotICAgIHRoaXMudXJpc1RvV3JpdGUgPSB1cmlzVG9Xcml0ZTsKLSAgfQotCi0gIHB1YmxpYyBJVVJJW10gZ2V0VVJJc1RvV3JpdGUgKCkKLSAgewotICAgIHJldHVybiB1cmlzVG9Xcml0ZTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUgKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIEZpbGVbXSBmaWxlc1RvUmVhZCA9IGdldEZpbGVzKHVyaXNUb1JlYWQpOwotICAgIEZpbGVbXSBmaWxlc1RvV3JpdGUgPSBnZXRGaWxlcyh1cmlzVG9Xcml0ZSk7Ci0gICAgcHJlUHJvY2VzcyhmaWxlc1RvUmVhZCxmaWxlc1RvV3JpdGUpOwotICAgIElTdGF0dXMgc3RhdHVzID0gZXhlY3V0ZShmaWxlc1RvUmVhZCxmaWxlc1RvV3JpdGUpOwotICAgIHBvc3RQcm9jZXNzKGZpbGVzVG9SZWFkLGZpbGVzVG9Xcml0ZSk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBJU3RhdHVzIGV4ZWN1dGUgKCBGaWxlW10gZmlsZXNUb1JlYWQsIEZpbGVbXSBmaWxlc1RvV3JpdGUgKTsKLQotICBwcml2YXRlIHZvaWQgcHJlUHJvY2VzcyAoIEZpbGVbXSBmaWxlc1RvUmVhZCwgRmlsZVtdIGZpbGVzVG9Xcml0ZSApCi0gIHsKLSAgICAvLyBUQkQuCi0gIH0KLQotICBwcml2YXRlIHZvaWQgcG9zdFByb2Nlc3MgKCBGaWxlW10gZmlsZXNUb1JlYWQsIEZpbGVbXSBmaWxlc1RvV3JpdGUgKQotICB7Ci0gICAgLy8gVEJELgotICB9Ci0KLSAgcHJpdmF0ZSBGaWxlW10gZ2V0RmlsZXMgKCBJVVJJW10gdXJpcyApCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotICAgIGlmICh1cmlzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaT0wOyBpPHVyaXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmICh1cmlzW2ldLmlzQXZhaWxhYmxlQXNGaWxlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsaXN0LmFkZCh1cmlzW2ldLmFzRmlsZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFVSSUV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChGaWxlW10pbGlzdC50b0FycmF5KG5ldyBGaWxlWzBdKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4YzdhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotcnVudGltZQotdGVtcC5mb2xkZXIKLWVudnVpLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ViMGIzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4N2FlZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mzc6MjggRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmFlODc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDozMCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NzQ2ODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4xLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucGx1Z2luLkVudlVJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXA7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjIwMywyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4zMDUsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMjAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGQ3ZTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgICouamFyLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotc3JjLmluY2x1ZGVzID0gc2NoZW1hLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC9vYmoxNi9hbnRfYnVpbGRmaWxlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2ljb25zL2Z1bGwvb2JqMTYvYW50X2J1aWxkZmlsZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZjM0NjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC9vYmoxNi9hbnRfYnVpbGRmaWxlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2ljb25zL2Z1bGwvd2l6YmFuL25ld2FudGZpbGVzX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9pY29ucy9mdWxsL3dpemJhbi9uZXdhbnRmaWxlc193aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjIzYzRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2ljb25zL2Z1bGwvd2l6YmFuL25ld2FudGZpbGVzX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmI3MDRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAyMDA4MDIyMSAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9RW52aXJvbm1lbnQgQ29tbWFuZCBGcmFtZXdvcmsgKEdVSSkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1XSURHRVRfUkVHSVNUUllfTkFNRT1XaWRnZXQgY29udHJpYnV0b3IgcmVnaXN0cnkKLQotUExVR0lOX1hQX0FOVF9XSVpBUkRfTkFNRT1BbnQgRmlsZXMKLVBMVUdJTl9YUF9BTlRfV0laQVJEX0RFU0M9Q3JlYXRlIEFudCBzY3JpcHQgYW5kIHByb3BlcnRpZXMgZmlsZXMgaW4gdGhlIHdvcmtzcGFjZS4KLQotTEFCRUxfQU5UX0VYVEVOVElPTj1BbnQgRXh0ZW50aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NzcyMzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLTxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KLSAgICAgIDx3aXphcmQKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fWFBfQU5UX1dJWkFSRF9OQU1FIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9hbnRfYnVpbGRmaWxlLmdpZiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2cuQW50RmlsZUltcG9ydFdpemFyZCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuQW50RmlsZUltcG9ydFdpemFyZCI+Ci0gICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAlUExVR0lOX1hQX0FOVF9XSVpBUkRfREVTQwotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIGxpa2VseSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id2lkZ2V0UmVnaXN0cnkiIG5hbWU9IiVXSURHRVRfUkVHSVNUUllfTkFNRSIgc2NoZW1hPSJzY2hlbWEvd2lkZ2V0UmVnaXN0cnkuZXhzZCIvPgotCi0JPCEtLSBBbnQgRmlsZSBFeHRlbnNpb25zIGJlZ2lubmluZyAgLS0+Ci0JCi0JPGV4dGVuc2lvbi1wb2ludCBpZD0iYW50ZmlsZXMiIG5hbWU9IiVMQUJFTF9BTlRfRVhURU5USU9OIi8+Ci0JCi0JCi0JCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NjaGVtYS93aWRnZXRSZWdpc3RyeS5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc2NoZW1hL3dpZGdldFJlZ2lzdHJ5LmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NmNjN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc2NoZW1hL3dpZGdldFJlZ2lzdHJ5LmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkiIGlkPSJ3aWRnZXRSZWdpc3RyeSIgbmFtZT0iV2lkZ2V0IFJlZ2lzdHJ5Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3aWRnZXRGYWN0b3J5Ii8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id2lkZ2V0RmFjdG9yeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imluc2VydEJlZm9yZUNvbW1hbmRJZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9FbnZpcm9ubWVudFVJLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL0Vudmlyb25tZW50VUkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5NWMyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL0Vudmlyb25tZW50VUkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDUwOSAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDgwMjIxICAgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0jIDIwMDgwMzI2ICAgMjIzODI5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIDIwMDgwNDAyICAgMjIyMDk0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBVcGRhdGUgcHJvcGVydGllcyBmaWxlLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1CVVRUT05fU0hPV19BTExfRElBTE9HUz0mU2hvdyBBbGwKLUJVVFRPTl9ISURFX0FMTF9ESUFMT0dTPSZIaWRlIEFsbAotQ0hFQ0tCT1hfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOPURvIG5vdCBzaG93IG1lIHRoaXMgZGlhbG9nIGJveCBhZ2Fpbi4KLQotVE9PTFRJUF9QUEFEX1BBR0U9Q29udHJvbCB0byBzaG93L2hpZGUgdGhlIGRpYWxvZ3MgdGhhdCBhcHBlYXIgd2hlbiBhIHBvcC11cCBhY3Rpb24gaXMgZXhlY3V0ZWQuCi1UT09MVElQX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTj1UbyBhbGxvdyB0aGlzIGRpYWxvZyB0byBzaG93IGFnYWluLCBlbmFibGUgZnJvbSBwcmVmZXJlbmNlIC0gZGlhbG9ncy4KLVRPT0xUSVBfUFBBRF9CVVRUT05fU0hPV19BTEw9U2hvdyBhbGwgZGlhbG9ncy4KLVRPT0xUSVBfUFBBRF9CVVRUT05fSElERV9BTEw9SGlkZSBhbGwgZGlhbG9ncyBhbmQgZXhlY3V0ZSBwb3AtdXAgYWN0aW9ucy4KLVRPT0xUSVBfUFBBRF9DT01CT19SVU5USU1FPVRoZSBydW50aW1lIHlvdSByZXF1aXJlIGFudCB0ZW1wbGF0ZXMgZm9yLgotVE9PTFRJUF9QUEFEX0NPTUJPX1NDRU5BUklPPVRoZSBzY2VuYXJpbyB5b3UgcmVxdWlyZSBhbnQgdGVtcGxhdGVzIGZvci4KLQotV0laQVJEX1RJVExFX0FOVD1DcmVhdGUgQW50IEZpbGVzCi1XSVpBUkRfUEFHRV9USVRMRV9BTlQ9Q3JlYXRlIFdlYiBTZXJ2aWNlIEFudCBmaWxlcwotV0laQVJEX1BBR0VfREVTQ19BTlQ9U2VsZWN0IHdvcmtzcGFjZSBmb2xkZXIgZm9yIEFudCBzY3JpcHQgYW5kIHByb3BlcnRpZXMgZmlsZXMKLU1TR19TVEFUVVNfQ09QWUlOR19BTlRfRklMRVM9Q29weWluZyB3ZWIgc2VydmljZXMgQW50IGZpbGVzCi1NU0dfRVJSX0NPUFlJTkdfQU5UX0ZJTEVTPUVycm9yIGVuY291bnRlcmVkIGNvcHlpbmcgQW50IGZpbGVzCi1NU0dfRVJSX0FOVF9GSUxFU19OT1RfRk9VTkQ9QW50IGZpbGUgbm90IGZvdW5kIGF0IHswfQotTVNHX1dBUk5JTkdfRklMRV9FWElTVFM9VGhlIGZpbGUgezB9IGV4aXN0cy4gIERvIHlvdSB3YW50IHRvIG92ZXJ3cml0ZT8KLURJQUxPR19USVRMRV9PVkVSV1JJVEU9Q29uZmlybSBPdmVyd3JpdGUKLQotTVNHX0VSUk9SX1dJWkFSRF9JRF9OT1RfRk9VTkQ9SVdBQjAwMTNFIENvdWxkIG5vdCBmaW5kIHdpemFyZCBpZDogezB9Ci1NU0dfRVJST1JfT1BFUkFUSU9OX1RJTUVEX09VVD1PcGVyYXRpb24gdGltZWQgb3V0LgotCi1MQUJFTF9SVU5USU1FU19MSVNUPVdlYiBzZXJ2aWNlIHJ1bnRpbWU6Ci1MQUJFTF9TRVJWRVJTX0xJU1Q9V2ViIHNlcnZpY2UgdHlwZToKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL0Vudmlyb25tZW50VUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Njg0OWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSU1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDkgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAyMjEgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0gKiAyMDA4MDQwMiAgIDIyMjA5NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgVXBkYXRlIHByb3BlcnRpZXMgZmlsZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgRW52aXJvbm1lbnRVSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBFbnZpcm9ubWVudFVJTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9TSE9XX0FMTF9ESUFMT0dTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9ISURFX0FMTF9ESUFMT0dTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENIRUNLQk9YX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfQlVUVE9OX1NIT1dfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRF9CVVRUT05fSElERV9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFEX0NPTUJPX1JVTlRJTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFEX0NPTUJPX1NDRU5BUklPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XSVpBUkRfSURfTk9UX0ZPVU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdJWkFSRF9USVRMRV9BTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0laQVJEX1BBR0VfVElUTEVfQU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdJWkFSRF9QQUdFX0RFU0NfQU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TVEFUVVNfQ09QWUlOR19BTlRfRklMRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUl9DT1BZSU5HX0FOVF9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJSX0FOVF9GSUxFU19OT1RfRk9VTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5JTkdfRklMRV9FWElTVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVExFX09WRVJXUklURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfT1BFUkFUSU9OX1RJTUVEX09VVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9SVU5USU1FU19MSVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFUlZFUlNfTElTVDsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEVudmlyb25tZW50VUlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9jb21tb24vTGFiZWxzQW5kSWRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2NvbW1vbi9MYWJlbHNBbmRJZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhmYjg5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2NvbW1vbi9MYWJlbHNBbmRJZHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMjIxIDE0NjAyMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIExhYmVsc0FuZElkcwotewotICBwcml2YXRlIFZlY3RvciBsYWJlbHNfID0gbmV3IFZlY3RvcigpOwotICBwcml2YXRlIFZlY3RvciBpZHNfID0gbmV3IFZlY3RvcigpOwotICAKLSAgCi0gIHB1YmxpYyB2b2lkIGFkZChTdHJpbmcgaWQsIFN0cmluZyBsYWJlbCl7Ci0JICBpZHNfLmFkZChpZCk7Ci0JICBsYWJlbHNfLmFkZChsYWJlbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoaW50IGluZGV4KXsKLQkgIHJldHVybiAoU3RyaW5nKWlkc18uZ2V0KGluZGV4KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaWRzXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRJZHMoKQotICB7Ci0JICBTdHJpbmdbXSBzdHJpbmdBcnJheSA9IG5ldyBTdHJpbmdbaWRzXy5zaXplKCldOyAKLQkgIGlkc18uY29weUludG8oc3RyaW5nQXJyYXkpOwotCSAgcmV0dXJuIHN0cmluZ0FycmF5OwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0TGFiZWxzKCkKLSAgewotCSAgU3RyaW5nW10gc3RyaW5nQXJyYXkgPSBuZXcgU3RyaW5nW2lkc18uc2l6ZSgpXTsgCi0JICBsYWJlbHNfLmNvcHlJbnRvKHN0cmluZ0FycmF5KTsKLQkgIHJldHVybiBzdHJpbmdBcnJheTsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvY29tbW9uL1RpbWVkT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2NvbW1vbi9UaW1lZE9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDEyZGNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvY29tbW9uL1RpbWVkT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA0ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODIyICAgMTU0NzUwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLkFic3RyYWN0T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMub3BlcmF0aW9ucy5JVW5kb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLklVbmRvYWJsZU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJTWVzc2FnZXM7Ci0KLXB1YmxpYyBjbGFzcyBUaW1lZE9wZXJhdGlvbiBpbXBsZW1lbnRzIElVbmRvYWJsZU9wZXJhdGlvbgotewotICBwcml2YXRlIEFic3RyYWN0T3BlcmF0aW9uIG9wZXJhdGlvbjsKLSAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICB0aW1lb3V0OwotICBwcml2YXRlIElQcm9ncmVzc01vbml0b3IgIHRlbXBNb25pdG9yOwotICBwcml2YXRlIElBZGFwdGFibGUgICAgICAgIHRlbXBJbmZvOwotICBwcml2YXRlIElTdGF0dXMgICAgICAgICAgIHJldHVyblN0YXR1czsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBvcGVyYXRpb25Db21wbGV0ZTsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICB0aW1lT3V0TWVzc2FnZTsKLSAgCi0gIHB1YmxpYyBUaW1lZE9wZXJhdGlvbiggQWJzdHJhY3RPcGVyYXRpb24gb3BlcmF0aW9uLCBpbnQgdGltZW91dCwgU3RyaW5nIHRpbWVPdXRNZXNzYWdlICkKLSAgewotICAgIHRoaXMub3BlcmF0aW9uICAgICAgPSBvcGVyYXRpb247Ci0gICAgdGhpcy50aW1lb3V0ICAgICAgICA9IHRpbWVvdXQ7Ci0gICAgdGhpcy50aW1lT3V0TWVzc2FnZSA9IHRpbWVPdXRNZXNzYWdlOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgCi0gIHsKLSAgICBUaHJlYWQgIGV4ZWN1dGVUaHJlYWQgPSBuZXcgVGhyZWFkKCBuZXcgT3BlcmF0aW9uUnVubmFibGUoKSApOwotICAgIAotICAgIHJldHVyblN0YXR1cyAgICAgID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB0ZW1wTW9uaXRvciAgICAgICA9IG1vbml0b3I7Ci0gICAgdGVtcEluZm8gICAgICAgICAgPSBpbmZvOwotICAgIG9wZXJhdGlvbkNvbXBsZXRlID0gZmFsc2U7Ci0gICAgZXhlY3V0ZVRocmVhZC5zdGFydCgpOwotICAgIAotICAgIHN5bmNocm9uaXplZCggb3BlcmF0aW9uICkKLSAgICB7Ci0gICAgICB3aGlsZSggIW9wZXJhdGlvbkNvbXBsZXRlICkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBvcGVyYXRpb24ud2FpdCh0aW1lb3V0KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjICkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBtZXNzYWdlICAgICA9IGV4Yy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwiaWQiLCAwLCBtZXNzYWdlID09IG51bGwgPyAiIiA6IG1lc3NhZ2UsIGV4YyApOwotICAgICAgICAgIGV4ZWN1dGVUaHJlYWQuaW50ZXJydXB0KCk7Ci0gICAgICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggIW9wZXJhdGlvbkNvbXBsZXRlICkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIHRpbWVkIG91dCwgc2luY2UgdGhlIGV4ZWN1dGlvbiB0aHJlYWQgaGFzbid0IHNldCBvcGVyYXRpb25Db21wbGV0ZSAKLSAgICAgICAgICAvLyB0byB0cnVlLgotICAgICAgICAgIFN0YXR1cyAgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCJpZCIsIDAsIEVudmlyb25tZW50VUlNZXNzYWdlcy5NU0dfRVJST1JfT1BFUkFUSU9OX1RJTUVEX09VVCwgbnVsbCk7Ci0gICAgICAgICAgU2hlbGwgICBzaGVsbCAgICAgICA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLSAgICAgICAgICBib29sZWFuIHdhaXRNb3JlICAgID0gTWVzc2FnZURpYWxvZy5vcGVuQ29uZmlybShzaGVsbCwgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VULCB0aW1lT3V0TWVzc2FnZSApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCAhd2FpdE1vcmUgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGV4ZWN1dGVUaHJlYWQuaW50ZXJydXB0KCk7Ci0gICAgICAgICAgICBvcGVyYXRpb25Db21wbGV0ZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICBUaGVyZWZvcmUgcmV0dXJuIHRoZSBzdGF0dXMgc2V0IGluIHRoZSBmb3JrZWQKLSAgICAvLyB0aHJlYWQuCi0gICAgcmV0dXJuIHJldHVyblN0YXR1czsKLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgT3BlcmF0aW9uUnVubmFibGUgaW1wbGVtZW50cyBSdW5uYWJsZQotICB7Ci0gICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuU3RhdHVzID0gb3BlcmF0aW9uLmV4ZWN1dGUodGVtcE1vbml0b3IsIHRlbXBJbmZvKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBUaHJvd2FibGUgZXhjICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBleGMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuU3RhdHVzID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwiaWQiLCAwLCBtZXNzYWdlID09IG51bGwgPyAiIiA6IG1lc3NhZ2UsIGV4YyApOwotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICBzeW5jaHJvbml6ZWQoIG9wZXJhdGlvbiApCi0gICAgICAgIHsKLSAgICAgICAgICBvcGVyYXRpb25Db21wbGV0ZSA9IHRydWU7Ci0gICAgICAgICAgb3BlcmF0aW9uLm5vdGlmeSgpOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIHJlZG8oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBvcGVyYXRpb24ucmVkbyhtb25pdG9yLCBpbmZvKTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIHVuZG8oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBvcGVyYXRpb24udW5kbyhtb25pdG9yLCBpbmZvKTsKLSAgfQotICBwdWJsaWMgSVVuZG9Db250ZXh0W10gZ2V0Q29udGV4dHMoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5nZXRDb250ZXh0cygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaGFzQ29udGV4dChJVW5kb0NvbnRleHQgY29udGV4dCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb24uaGFzQ29udGV4dChjb250ZXh0KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZENvbnRleHQoSVVuZG9Db250ZXh0IGNvbnRleHQpCi0gIHsKLSAgICBvcGVyYXRpb24uYWRkQ29udGV4dChjb250ZXh0KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGNhbkV4ZWN1dGUoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5jYW5FeGVjdXRlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBjYW5SZWRvKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb24uY2FuUmVkbygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gY2FuVW5kbygpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmNhblVuZG8oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0gICAgb3BlcmF0aW9uLmRpc3Bvc2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5nZXRMYWJlbCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlQ29udGV4dChJVW5kb0NvbnRleHQgY29udGV4dCkKLSAgewotICAgIG9wZXJhdGlvbi5yZW1vdmVDb250ZXh0KGNvbnRleHQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TGFiZWwoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBvcGVyYXRpb24uc2V0TGFiZWwobmFtZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEV4dGVuc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMzRlYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMjEgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQW50RXh0ZW5zaW9uIHsKLQkKLQlwcml2YXRlIFN0cmluZyBsYWJlbF87Ci0JcHJpdmF0ZSBTdHJpbmcgcnVudGltZV87Ci0JcHJpdmF0ZSBTdHJpbmcgc2NlbmFyaW9fOwotCXByaXZhdGUgU3RyaW5nIGlkXzsKLQlwcml2YXRlIFN0cmluZyBydW50aW1lSURfOwotCXByaXZhdGUgU3RyaW5nIHBsdWdpbl87Ci0JcHJpdmF0ZSBTdHJpbmcgcGF0aF87Ci0JcHJpdmF0ZSBTdHJpbmcgd3NnZW5wYXRoXzsKLQlwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50XzsKLQkKLQlwdWJsaWMgQW50RXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJZWxlbWVudF8gPSBlbGVtZW50OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkKLQl7Ci0JICAgIGlmIChsYWJlbF89PW51bGwpCi0JICAgIHsKLQkgICAgCWxhYmVsXyA9IGVsZW1lbnRfLmdldEF0dHJpYnV0ZSgibGFiZWwiKTsKLQkgICAgfQotCSAgICByZXR1cm4gbGFiZWxfOwotCX0gICAKLQotCXB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUxhYmVsKCkKLQl7Ci0JICAgIGlmIChydW50aW1lXz09bnVsbCkKLQkgICAgewotCSAgICAJcnVudGltZV8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoInJ1bnRpbWVsYWJlbCIpOwotCSAgICB9Ci0JICAgIHJldHVybiBydW50aW1lXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRTY2VuYXJpb0xhYmVsKCkKLQl7Ci0JICAgIGlmIChzY2VuYXJpb189PW51bGwpCi0JICAgIHsKLQkgICAgCXNjZW5hcmlvXyA9IGVsZW1lbnRfLmdldEF0dHJpYnV0ZSgic2NlbmFyaW9sYWJlbCIpOwotCSAgICB9Ci0JICAgIHJldHVybiBzY2VuYXJpb187Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0SUQoKQotCXsKLQkgICAgaWYgKGlkXz09bnVsbCkKLQkgICAgewotCSAgICAJaWRfID0gZWxlbWVudF8uZ2V0QXR0cmlidXRlKCJpZCIpOwotCSAgICB9Ci0JICAgIHJldHVybiBpZF87Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUlEKCkKLQl7Ci0JICAgIGlmIChydW50aW1lSURfPT1udWxsKQotCSAgICB7Ci0JICAgIAlydW50aW1lSURfID0gZWxlbWVudF8uZ2V0QXR0cmlidXRlKCJydW50aW1laWQiKTsKLQkgICAgfQotCSAgICByZXR1cm4gcnVudGltZUlEXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRQbHVnaW4oKQotCXsKLQkgICAgaWYgKHBsdWdpbl89PW51bGwpCi0JICAgIHsKLQkgICAgCXBsdWdpbl8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoInBsdWdpbmxvY2F0aW9uIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIHBsdWdpbl87Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0UGF0aCgpCi0JewotCSAgICBpZiAocGF0aF89PW51bGwpCi0JICAgIHsKLQkgICAgCXBhdGhfID0gZWxlbWVudF8uZ2V0QXR0cmlidXRlKCJwYXRoIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIHBhdGhfOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0V1NHZW5QYXRoKCkKLQl7Ci0JICAgIGlmICh3c2dlbnBhdGhfPT1udWxsKQotCSAgICB7Ci0JICAgIAl3c2dlbnBhdGhfID0gZWxlbWVudF8uZ2V0QXR0cmlidXRlKCJ3c2dlbnBhdGgiKTsKLQkgICAgfQotCSAgICByZXR1cm4gd3NnZW5wYXRoXzsKLQl9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEV4dGVuc2lvbkNyZWF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRFeHRlbnNpb25DcmVhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTc0ZjExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEV4dGVuc2lvbkNyZWF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMjEgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmNvbW1vbi5MYWJlbHNBbmRJZHM7Ci0KLXB1YmxpYyBjbGFzcyBBbnRFeHRlbnNpb25DcmVhdGlvbiB7Ci0KLQlwcml2YXRlIEhhc2h0YWJsZSBhbnRFeHRlbnRpb25zXzsKLQlwcml2YXRlIHN0YXRpYyBBbnRFeHRlbnNpb25DcmVhdGlvbiBhbnRFeHRlbnNpb25DXzsKLQlwcml2YXRlIEhhc2h0YWJsZSBydW50aW1lU3RydWN0c18gPSBudWxsOwotCQotCQotCXB1YmxpYyBzdGF0aWMgQW50RXh0ZW5zaW9uQ3JlYXRpb24gZ2V0SW5zdGFuY2UoKXsKLQkJaWYoYW50RXh0ZW5zaW9uQ18gPT0gbnVsbCl7Ci0JCQlhbnRFeHRlbnNpb25DXyA9IG5ldyBBbnRFeHRlbnNpb25DcmVhdGlvbigpOwotCQl9Ci0JCXJldHVybiBhbnRFeHRlbnNpb25DXzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgY3JlYXRlRXh0ZW5zaW9ucygpCi0JewotCQlhbnRFeHRlbnRpb25zXyA9IG5ldyBIYXNodGFibGUoKTsKLQkJSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCS8vTG9hZCAgYnkgcmVhZGluZyBhbGwgZXh0ZW5zaW9ucyB0byBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuYW50ZmlsZXMKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gYW50RXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSIsICJhbnRmaWxlcyIpOwotICAgIAotCQlmb3IoaW50IGlkeD0wOyBpZHg8YW50RXh0cy5sZW5ndGg7IGlkeCsrKSAKLQkJewotCQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBhbnRFeHRzW2lkeF07Ci0JCQlpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJhbnRmaWxlcyIpKQotCQkJewotCQkJCUFudEV4dGVuc2lvbiBhZSA9IG5ldyBBbnRFeHRlbnNpb24oZWxlbSk7Ci0JCQkJYW50RXh0ZW50aW9uc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCBhZSk7Ci0JCQl9ICAgICAgICAKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVSdW50aW1lcygpewotCQlFbnVtZXJhdGlvbiBhbnRFeHRzRW51bSA9IGFudEV4dGVudGlvbnNfLmVsZW1lbnRzKCk7Ci0JCXJ1bnRpbWVTdHJ1Y3RzXyA9IG5ldyBIYXNodGFibGUoKTsKLQkJCi0JCXdoaWxlKGFudEV4dHNFbnVtLmhhc01vcmVFbGVtZW50cygpKXsKLQkJCUFudEV4dGVuc2lvbiBhbnRFeHQgPSAoQW50RXh0ZW5zaW9uKWFudEV4dHNFbnVtLm5leHRFbGVtZW50KCk7Ci0JCQlSdW50aW1lU3RydWN0IHJzID0gKFJ1bnRpbWVTdHJ1Y3QpcnVudGltZVN0cnVjdHNfLmdldChhbnRFeHQuZ2V0UnVudGltZUlEKCkpOwotCQkJaWYocnMgPT0gbnVsbCl7Ci0JCQkJcnMgPSBuZXcgUnVudGltZVN0cnVjdChhbnRFeHQuZ2V0UnVudGltZUlEKCkpOyAKLQkJCQlycy5zZXRSdW50aW1lTGFiZWwoYW50RXh0LmdldFJ1bnRpbWVMYWJlbCgpKTsKLQkJCQlycy5zZXRTY2VuYXJpbyhhbnRFeHQuZ2V0SUQoKSwgYW50RXh0LmdldFNjZW5hcmlvTGFiZWwoKSk7Ci0JCQkJcnVudGltZVN0cnVjdHNfLnB1dChycy5nZXRSdW50aW1lSUQoKSwgcnMpOwotCQkJfQotCQkJZWxzZXsKLQkJCQlycy5zZXRTY2VuYXJpbyhhbnRFeHQuZ2V0SUQoKSwgYW50RXh0LmdldFNjZW5hcmlvTGFiZWwoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCQotCXB1YmxpYyBMYWJlbHNBbmRJZHMgZ2V0UnVudGltZUxhYmVsc0FuZElkcygpewotCQlpZihhbnRFeHRlbnRpb25zXyA9PSBudWxsKSBjcmVhdGVFeHRlbnNpb25zKCk7Ci0JCWlmKHJ1bnRpbWVTdHJ1Y3RzXyA9PSBudWxsKWNyZWF0ZVJ1bnRpbWVzKCk7Ci0JCUxhYmVsc0FuZElkcyBydW50aW1lID0gbmV3IExhYmVsc0FuZElkcygpOyAKLQkJRW51bWVyYXRpb24gcnVudGltZVN0cnVjdHMgPSBydW50aW1lU3RydWN0c18uZWxlbWVudHMoKTsKLQkJd2hpbGUocnVudGltZVN0cnVjdHMuaGFzTW9yZUVsZW1lbnRzKCkpewotCQkJUnVudGltZVN0cnVjdCBycyA9IChSdW50aW1lU3RydWN0KXJ1bnRpbWVTdHJ1Y3RzLm5leHRFbGVtZW50KCk7CQotCQkJcnVudGltZS5hZGQocnMuZ2V0UnVudGltZUlEKCkscnMuZ2V0UnVudGltZUxhYmVsKCkpOwotCQl9Ci0JCXJldHVybiBydW50aW1lOwotCX0KLQkKLQlwdWJsaWMgTGFiZWxzQW5kSWRzIGdldFNjZW5hcmlvTGFiZWxzQnlSdW50aW1lKFN0cmluZyBydW50aW1lSWQpewotCQlpZihhbnRFeHRlbnRpb25zXyA9PSBudWxsKSBjcmVhdGVFeHRlbnNpb25zKCk7Ci0JCWlmKHJ1bnRpbWVTdHJ1Y3RzXyA9PSBudWxsKSBjcmVhdGVSdW50aW1lcygpOwotCQlSdW50aW1lU3RydWN0IHJzID0gKFJ1bnRpbWVTdHJ1Y3QpcnVudGltZVN0cnVjdHNfLmdldChydW50aW1lSWQpOwkKLQkJcmV0dXJuIHJzLmdldFNjZW5hcmlvTGFiZWxzKCk7Ci0JfQotCQotCQkKLQlwdWJsaWMgQW50RXh0ZW5zaW9uIGdldEFuckV4dEJ5U2NlbmFyaW8oU3RyaW5nIHNlbGVjdGlvbil7Ci0JCWlmKGFudEV4dGVudGlvbnNfID09IG51bGwpIHJldHVybiBudWxsOwotCQlyZXR1cm4gKEFudEV4dGVuc2lvbilhbnRFeHRlbnRpb25zXy5nZXQoc2VsZWN0aW9uKTsJCi0JfQotCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YzFhOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RmlsZUltcG9ydFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTUgICAxMjg3MTEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwODAyMjEgICAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZXNzYWdlQm94OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlRyYW5zaWVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luLkVudlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5wbHVnaW4uRW52VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50Lk51bGxTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBBbnRGaWxlSW1wb3J0V2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7Ci0KLQkvL3ByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGZDb25maWdFbGVtZW50OwotCXByaXZhdGUgQW50RmlsZUltcG9ydFdpemFyZFBhZ2UgbWFpblBhZ2U7Ci0JLyoqCi0gICAgICogVGhlIHdvcmtiZW5jaC4KLSAgICAgKi8KLSAgICBwcml2YXRlIElXb3JrYmVuY2ggd29ya2JlbmNoOwotICAgIHByaXZhdGUgQW50RXh0ZW5zaW9uQ3JlYXRpb24gYW50RXh0Q187Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKLSAgICAKLQlwdWJsaWMgQW50RmlsZUltcG9ydFdpemFyZCgpCi0JewotCQlzdXBlcigpOwkJIAotCQlzZXRXaW5kb3dUaXRsZShFbnZpcm9ubWVudFVJTWVzc2FnZXMuV0laQVJEX1RJVExFX0FOVCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFdpbmRvd1RpdGxlKFN0cmluZyBuZXdUaXRsZSkgewotCQlzdXBlci5zZXRXaW5kb3dUaXRsZShuZXdUaXRsZSk7Ci0JfQotCQotCSBwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKLQkgICAgICAgIHN1cGVyLmFkZFBhZ2VzKCk7CSAgICAgICAgCi0JICAgICAgICBtYWluUGFnZSA9IG5ldyBBbnRGaWxlSW1wb3J0V2l6YXJkUGFnZShFbnZpcm9ubWVudFVJTWVzc2FnZXMuV0laQVJEX1BBR0VfVElUTEVfQU5ULCBnZXRTZWxlY3Rpb24oKSk7Ci0gICAgICAgICAgICBhZGRQYWdlKG1haW5QYWdlKTsKLQkgICAgfQotCQotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CQotCQlhbnRFeHRDXyA9IEFudEV4dGVuc2lvbkNyZWF0aW9uLmdldEluc3RhbmNlKCk7Ci0JCUlQYXRoIGRlc3RpbmF0aW9uID0gbWFpblBhZ2UuZ2V0UGF0aCgpOwotCQlpZiAoZGVzdGluYXRpb24gPT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIGZhbHNlOwotCQl9CQkJCi0JCWVsc2UKLQkJewotCQkJQW50RXh0ZW5zaW9uIGFudEV4dCA9IGFudEV4dENfLmdldEFuckV4dEJ5U2NlbmFyaW8obWFpblBhZ2UuZ2V0U2NlbmFyaW8oKSk7Ci0JCQlCdW5kbGUgd3NCdW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYW50RXh0LmdldFBsdWdpbigpKTsKLQkJCUlQYXRoIHByb3BlcnR5UGF0aCA9IG5ldyBQYXRoKGFudEV4dC5nZXRQYXRoKCkpOwotCQkJVVJMIHByb3BlcnR5VVJMID0gRmlsZUxvY2F0b3IuZmluZCggd3NCdW5kbGUsIHByb3BlcnR5UGF0aCwgbnVsbCk7Ci0JCQkKLQkJCVVSTENvbm5lY3Rpb24gY29ubjsKLQkJCUlucHV0U3RyZWFtIGlzUHJvcGVydHkgPSBudWxsOwotCQkJdHJ5ewotCQkJCWNvbm4gPSBwcm9wZXJ0eVVSTC5vcGVuQ29ubmVjdGlvbigpOwotCQkJCWlzUHJvcGVydHkgPSBjb25uLmdldElucHV0U3RyZWFtKCk7Ci0JCSAgICB9Ci0JCSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKXt9Ci0JCSAgICAKLQkJICAgIFBsdWdpbiBzb3VyY2VQbHVnaW4gPSBFbnZQbHVnaW4uZ2V0SW5zdGFuY2UoKTsgIAotCQkJU3RyaW5nIHRhcmdldEZpbGUgPSBhbnRFeHQuZ2V0UGF0aCgpOwotCQkgICAgY3JlYXRlSUZpbGUoc291cmNlUGx1Z2luLCBpc1Byb3BlcnR5LCBkZXN0aW5hdGlvbiwgdGFyZ2V0RmlsZSwgKElQcm9ncmVzc01vbml0b3IpbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCSAgICAKLQkJICAgIElQYXRoIHdzZ2VuUGF0aCA9IG5ldyBQYXRoKGFudEV4dC5nZXRXU0dlblBhdGgoKSk7Ci0JCQlVUkwgZmlsZVVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoIHdzQnVuZGxlLCB3c2dlblBhdGgsIG51bGwpOwotCQkJCi0JCQlVUkxDb25uZWN0aW9uIGNvbm5XU0dlbjsKLQkJCUlucHV0U3RyZWFtIGlzV1NHZW4gPSBudWxsOwotCQkJdHJ5ewotCQkJCWNvbm5XU0dlbiA9IGZpbGVVUkwub3BlbkNvbm5lY3Rpb24oKTsKLQkJCQlpc1dTR2VuID0gY29ubldTR2VuLmdldElucHV0U3RyZWFtKCk7Ci0JCSAgICB9Ci0JCSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKXt9Ci0JCSAgICAKLQkJICAgIFN0cmluZyB0YXJnZXRGaWxlV1NHZW4gPSBhbnRFeHQuZ2V0V1NHZW5QYXRoKCk7Ci0JCSAgICBjcmVhdGVJRmlsZShzb3VyY2VQbHVnaW4sIGlzV1NHZW4sIGRlc3RpbmF0aW9uLCB0YXJnZXRGaWxlV1NHZW4sIChJUHJvZ3Jlc3NNb25pdG9yKW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCi0JCSAgICAKLQkJICAgCi0JCX0KLQkgICAgcmV0dXJuIHRydWU7CQkKLSAgfQkKLQkKLQkKLQkKLQlwcml2YXRlIElTdGF0dXMgY3JlYXRlSUZpbGUoUGx1Z2luIHBsdWdpbiwgSW5wdXRTdHJlYW0gc291cmNlLCBJUGF0aCB0YXJnZXRQYXRoLCBTdHJpbmcgdGFyZ2V0RmlsZSwgLypJRW52aXJvbm1lbnQgZW52LCovIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCSAgICAKLQkgIGlmIChwbHVnaW4gIT0gbnVsbCkKLQkgIHsKLQkgICAgSVBhdGggdGFyZ2V0ID0gdGFyZ2V0UGF0aC5hcHBlbmQobmV3IFBhdGgodGFyZ2V0RmlsZSkpOwotCSAgICAKLQkgICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQoIG1vbml0b3IsIEVudmlyb25tZW50VUlNZXNzYWdlcy5NU0dfU1RBVFVTX0NPUFlJTkdfQU5UX0ZJTEVTKTsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICAgUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0JICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiBmaWxlIGV4aXN0cyBiZWZvcmUgY29weQotCSAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UodGFyZ2V0KTsJICAgICAKLQkgICAgICAgCi0JICAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKQotCQkJewotCQkJCU1lc3NhZ2VCb3ggb3ZlcndyaXRlQm94ID0gbmV3IE1lc3NhZ2VCb3goZ2V0U2hlbGwoKSwgU1dULklDT05fUVVFU1RJT058U1dULllFU3xTV1QuTk8pOwotCQkJCW92ZXJ3cml0ZUJveC5zZXRNZXNzYWdlKEVudmlyb25tZW50VUlNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50VUlNZXNzYWdlcy5NU0dfV0FSTklOR19GSUxFX0VYSVNUUywgdGFyZ2V0LnRvU3RyaW5nKCkpKTsJCQkJCi0JCQkJb3ZlcndyaXRlQm94LnNldFRleHQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLkRJQUxPR19USVRMRV9PVkVSV1JJVEUpOwotCQkJCWludCByZXN1bHQgPSBvdmVyd3JpdGVCb3gub3BlbigpOwotCQkJCWlmIChyZXN1bHQgIT0gU1dULk5PKQotCQkJCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsIHRhcmdldCwgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3IsIChJU3RhdHVzSGFuZGxlciluZXcgTnVsbFN0YXR1c0hhbmRsZXIoKSk7Ci0JCQkJZWxzZSAKLQkJCQkJcmV0dXJuIFN0YXR1cy5DQU5DRUxfU1RBVFVTOwotCQkJfSAgICAgICAKLQkJCWVsc2UgCi0JCQl7Ci0JCQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCB0YXJnZXQsIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3IsIChJU3RhdHVzSGFuZGxlciluZXcgTnVsbFN0YXR1c0hhbmRsZXIoKSk7Ci0JCQl9Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CSAgICAJCi0JICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEVudmlyb25tZW50VUlNZXNzYWdlcy5NU0dfRVJSX0NPUFlJTkdfQU5UX0ZJTEVTLCBlKTsKLQkgICAgfQotCSAgfQkgIAotCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHNlbGVjdGlvbiB3aGljaCB3YXMgcGFzc2VkIHRvIDxjb2RlPmluaXQ8L2NvZGU+LgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgc2VsZWN0aW9uCi0gICAgICovCi0gICAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB3b3JrYmVuY2ggd2hpY2ggd2FzIHBhc3NlZCB0byA8Y29kZT5pbml0PC9jb2RlPi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIHdvcmtiZW5jaAotICAgICAqLwotICAgIHB1YmxpYyBJV29ya2JlbmNoIGdldFdvcmtiZW5jaCgpIHsKLSAgICAgICAgcmV0dXJuIHdvcmtiZW5jaDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgPGNvZGU+QmFzaWNOZXdSZXNvdXJjZVdpemFyZDwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyAKLSAgICAgKiA8Y29kZT5JV29ya2JlbmNoV2l6YXJkPC9jb2RlPiBtZXRob2QgcmVjb3JkcyB0aGUgZ2l2ZW4gd29ya2JlbmNoIGFuZAotICAgICAqIHNlbGVjdGlvbiwgYW5kIGluaXRpYWxpemVzIHRoZSBkZWZhdWx0IGJhbm5lciBpbWFnZSBmb3IgdGhlIHBhZ2VzCi0gICAgICogYnkgY2FsbGluZyA8Y29kZT5pbml0aWFsaXplRGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3I8L2NvZGU+LgotICAgICAqIFN1YmNsYXNzZXMgbWF5IGV4dGVuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKSB7Ci0gICAgICAgIHRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOwotICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb247Ci0KLSAgICAgICAgaW5pdGlhbGl6ZURlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5pdGlhbGl6ZXMgdGhlIGRlZmF1bHQgcGFnZSBpbWFnZSBkZXNjcmlwdG9yIHRvIGFuIGFwcHJvcHJpYXRlIGJhbm5lci4KLSAgICAgKiBCeSBjYWxsaW5nIDxjb2RlPnNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yPC9jb2RlPi4KLSAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB1c2VzIGEgZ2VuZXJpYyBuZXcgd2l6YXJkIGltYWdlLgotICAgICAqIDxwPgotICAgICAqIFN1YmNsYXNzZXMgbWF5IHJlaW1wbGVtZW50LgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoKSB7Ci0gICAgCUltYWdlRGVzY3JpcHRvciBkZXNjID0gRW52VUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9mdWxsL3dpemJhbi9uZXdhbnRmaWxlc193aXoucG5nIik7Ly8kTk9OLU5MUy0xJAotICAgICAgICBzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihkZXNjKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZWxlY3RzIGFuZCByZXZlYWxzIHRoZSBuZXdseSBhZGRlZCByZXNvdXJjZSBpbiBhbGwgcGFydHMKLSAgICAgKiBvZiB0aGUgYWN0aXZlIHdvcmtiZW5jaCB3aW5kb3cncyBhY3RpdmUgcGFnZS4KLSAgICAgKgotICAgICAqIEBzZWUgSVNldFNlbGVjdGlvblRhcmdldAotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIHNlbGVjdEFuZFJldmVhbChJUmVzb3VyY2UgbmV3UmVzb3VyY2UpIHsKLSAgICAgICAgc2VsZWN0QW5kUmV2ZWFsKG5ld1Jlc291cmNlLCBnZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQXR0ZW1wdHMgdG8gc2VsZWN0IGFuZCByZXZlYWwgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpbiBhbGwKLSAgICAgKiBwYXJ0cyB3aXRoaW4gdGhlIHN1cHBsaWVkIHdvcmtiZW5jaCB3aW5kb3cncyBhY3RpdmUgcGFnZS4KLSAgICAgKiA8cD4KLSAgICAgKiBDaGVja3MgYWxsIHBhcnRzIGluIHRoZSBhY3RpdmUgcGFnZSB0byBzZWUgaWYgdGhleSBpbXBsZW1lbnQgPGNvZGU+SVNldFNlbGVjdGlvblRhcmdldDwvY29kZT4sCi0gICAgICogZWl0aGVyIGRpcmVjdGx5IG9yIGFzIGFuIGFkYXB0ZXIuIElmIHNvLCB0ZWxscyB0aGUgcGFydCB0byBzZWxlY3QgYW5kIHJldmVhbCB0aGUKLSAgICAgKiBzcGVjaWZpZWQgcmVzb3VyY2UuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIHJlc291cmNlIHRoZSByZXNvdXJjZSB0byBiZSBzZWxlY3RlZCBhbmQgcmV2ZWFsZWQKLSAgICAgKiBAcGFyYW0gd2luZG93IHRoZSB3b3JrYmVuY2ggd2luZG93IHRvIHNlbGVjdCBhbmQgcmV2ZWFsIHRoZSByZXNvdXJjZQotICAgICAqIAotICAgICAqIEBzZWUgSVNldFNlbGVjdGlvblRhcmdldAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZWxlY3RBbmRSZXZlYWwoSVJlc291cmNlIHJlc291cmNlLAotICAgICAgICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsKLSAgICAgICAgLy8gdmFsaWRhdGUgdGhlIGlucHV0Ci0gICAgICAgIGlmICh3aW5kb3cgPT0gbnVsbCB8fCByZXNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gd2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBnZXQgYWxsIHRoZSB2aWV3IGFuZCBlZGl0b3IgcGFydHMKLSAgICAgICAgTGlzdCBwYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcmVmc1tdID0gcGFnZS5nZXRWaWV3UmVmZXJlbmNlcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIElXb3JrYmVuY2hQYXJ0IHBhcnQgPSByZWZzW2ldLmdldFBhcnQoZmFsc2UpOwotICAgICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVmcyA9IHBhZ2UuZ2V0RWRpdG9yUmVmZXJlbmNlcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChyZWZzW2ldLmdldFBhcnQoZmFsc2UpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcGFydHMuYWRkKHJlZnNbaV0uZ2V0UGFydChmYWxzZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihyZXNvdXJjZSk7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ciA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBJV29ya2JlbmNoUGFydCBwYXJ0ID0gKElXb3JrYmVuY2hQYXJ0KSBpdHIubmV4dCgpOwotCi0gICAgICAgICAgICAvLyBnZXQgdGhlIHBhcnQncyBJU2V0U2VsZWN0aW9uVGFyZ2V0IGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgICBJU2V0U2VsZWN0aW9uVGFyZ2V0IHRhcmdldCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAocGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpCi0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gKElTZXRTZWxlY3Rpb25UYXJnZXQpIHBhcnQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gKElTZXRTZWxlY3Rpb25UYXJnZXQpIHBhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRBZGFwdGVyKElTZXRTZWxlY3Rpb25UYXJnZXQuY2xhc3MpOwotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBzZWxlY3QgYW5kIHJldmVhbCByZXNvdXJjZQotICAgICAgICAgICAgICAgIGZpbmFsIElTZXRTZWxlY3Rpb25UYXJnZXQgZmluYWxUYXJnZXQgPSB0YXJnZXQ7Ci0gICAgICAgICAgICAgICAgd2luZG93LmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVGFyZ2V0LnNlbGVjdFJldmVhbChzZWxlY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RmlsZUltcG9ydFdpemFyZFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2NDFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIDIwMDgwMjIxIDE0NjAyMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzIAotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZFJlc291cmNlSW1wb3J0UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb24uTGFiZWxzQW5kSWRzOwotCi1wdWJsaWMgY2xhc3MgQW50RmlsZUltcG9ydFdpemFyZFBhZ2UgZXh0ZW5kcyBXaXphcmRSZXNvdXJjZUltcG9ydFBhZ2V7Ci0JICAKLQlwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpIjsKLQkKLQkvKiBDT05URVhUX0lEIFNSUEYwMDAxIGZvciBzZXJ2ZXIgcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9TUlBGX1NFUlZFUl9QUkVGID0gcGx1Z2luSWRfICsgIi5TUlBGMDAwMSI7Ci0JcHJpdmF0ZSBDb21ibyBzY2VuYXJpb187Ci0KLQkvKiBDT05URVhUX0lEIFNSUEYwMDAyIGZvciBydW50aW1lIHByZWZlcmVuY2Ugb24gdGhlIHNlcnZlciBydW50aW1lIHByZWZlcmVuY2UgcGFnZSAqLwotCXByaXZhdGUgU3RyaW5nIElORk9QT1BfU1JQRl9SVU5USU1FX1BSRUYgPSBwbHVnaW5JZF8gKyAiLlNSUEYwMDAyIjsKLQlwcml2YXRlIENvbWJvIHJ1bnRpbWVfOwkKLQkKLQlwcml2YXRlIEFudEV4dGVuc2lvbkNyZWF0aW9uIGFudEV4dENfOwotCXByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsc0FuZElkc1NjZW5hcmlvXzsKLQlwcml2YXRlIExhYmVsc0FuZElkcyBsYWJlbHNBbmRJZHNSdW50aW1lXzsKLQlwcml2YXRlIGludCBydW50aW1lSWR4XzsKLQlwcml2YXRlIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyXzsKLQkKLQlwdWJsaWMgQW50RmlsZUltcG9ydFdpemFyZFBhZ2UoU3RyaW5nIHBhZ2VOYW1lLAotCSAgICAgICAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCSAgICAgICAgc3VwZXIoIldTQW50RmlsZXNQYWdlMSIsIHNlbGVjdGlvbik7Ly8kTk9OLU5MUy0xJAotCSAgICAgICAgc2V0VGl0bGUocGFnZU5hbWUpOwkgICAgICAgIAotCSAgICAgICAgc2V0RGVzY3JpcHRpb24oRW52aXJvbm1lbnRVSU1lc3NhZ2VzLldJWkFSRF9QQUdFX0RFU0NfQU5UKTsJICAgICAgICAKLQkgICAgfQotCQotCQkKLQlwdWJsaWMgQ29tYm8gY3JlYXRlQ29tYm8oIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IHN0eWxlICkKLQkgIHsgICAgCi0JICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBsYWJlbE5hbWUgOiB0b29sdGlwOwotCSAgICAKLQkgICAgaWYoIGxhYmVsTmFtZSAhPSBudWxsICkKLQkgICAgewotCSAgICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKCBwYXJlbnQsIFNXVC5XUkFQKTsKLQkgICAgICBsYWJlbC5zZXRUZXh0KCBsYWJlbE5hbWUgKTsKLQkgICAgICBsYWJlbC5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCApOwotCSAgICB9Ci0JICAgIAotCSAgICBDb21ibyBjb21ibyA9IG5ldyBDb21ibyggcGFyZW50LCBzdHlsZSApOwotCSAgICBHcmlkRGF0YSBncmlkZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotCSAgICAgCi0JICAgIGNvbWJvLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0JICAgIGNvbWJvLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0JICAgIAotCSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggY29tYm8sIHBsdWdpbklkXyArICIuIiArIGluZm9wb3AgKTsKLQkgICAgCi0JICAgIHJldHVybiBjb21ibzsgICAgICAKLQkgIH0KLQkKLQlwcm90ZWN0ZWQgSVRyZWVDb250ZW50UHJvdmlkZXIgZ2V0RmlsZVByb3ZpZGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIElQYXRoIGdldFBhdGgoKQotCXsKLQkJcmV0dXJuIGdldENvbnRhaW5lckZ1bGxQYXRoKCk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZVNvdXJjZUdyb3VwKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhZ2UgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ2wubnVtQ29sdW1ucyA9IDI7Ci0JCXBhZ2Uuc2V0TGF5b3V0KGdsKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0JCXBhZ2Uuc2V0TGF5b3V0RGF0YShnZCk7Ci0JICAKLQkJcnVudGltZV8gPSBjcmVhdGVDb21ibyhwYWdlLEVudmlyb25tZW50VUlNZXNzYWdlcy5MQUJFTF9SVU5USU1FU19MSVNULAotCQkJICBFbnZpcm9ubWVudFVJTWVzc2FnZXMuVE9PTFRJUF9QUEFEX0NPTUJPX1JVTlRJTUUsCi0JCQkJCQkJCQkgSU5GT1BPUF9TUlBGX1JVTlRJTUVfUFJFRiwKLQkJCQkJCQkJCSBTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7Ci0JCi0JCXJ1bnRpbWVfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHt9Ci0JCQkKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQloYW5kbGVSdW50aW1lU2VsZWN0ZWQoKTsJCQkJCQotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsJCQkgICAKLQkJCX0KLQkJfSk7Ci0JCi0JCXNjZW5hcmlvXyA9IGNyZWF0ZUNvbWJvKHBhZ2UsRW52aXJvbm1lbnRVSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVCwKLQkJCQkgIEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfQ09NQk9fU0NFTkFSSU8sCi0JCQkJCQkJCQkJSU5GT1BPUF9TUlBGX1NFUlZFUl9QUkVGLAotCQkJCQkJCQkJCVNXVC5TSU5HTEV8U1dULkJPUkRFUnxTV1QuUkVBRF9PTkxZKTsKLQkJCi0JCWluaWF0aWFsaXplKCk7Ci0JfQotCQotCXByb3RlY3RlZCBJVHJlZUNvbnRlbnRQcm92aWRlciBnZXRGb2xkZXJQcm92aWRlcigpIHsKLQkJIHJldHVybiBudWxsOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVPcHRpb25zR3JvdXAoQ29tcG9zaXRlIHBhcmVudCkgewotICAgICAgICAvL2VtcHR5IC0gZG9uJ3Qgd2FudCBhbiBvcHRpb25zIGdyb3VwIAotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChzY2VuYXJpb18gPT0gZXZlbnQud2lkZ2V0KQotCQkJaGFuZGxlU2NlbmFyaW9TZWxlY3RlZCgpOwotCQllbHNlIGlmIChydW50aW1lXyA9PSBldmVudC53aWRnZXQpCi0JCQloYW5kbGVSdW50aW1lU2VsZWN0ZWQoKTsKLQkJZWxzZQotCQkJc3VwZXIuaGFuZGxlRXZlbnQoZXZlbnQpOwotCQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIGhhbmRsZVJ1bnRpbWVTZWxlY3RlZCgpewotCQlsYWJlbHNBbmRJZHNTY2VuYXJpb18gPSBhbnRFeHRDXy5nZXRTY2VuYXJpb0xhYmVsc0J5UnVudGltZShsYWJlbHNBbmRJZHNSdW50aW1lXy5nZXRJZChydW50aW1lXy5nZXRTZWxlY3Rpb25JbmRleCgpKSk7Ci0JCXNldFNjZW5hcmlvTGFiZWxzKGxhYmVsc0FuZElkc1NjZW5hcmlvXy5nZXRMYWJlbHMoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGhhbmRsZVNjZW5hcmlvU2VsZWN0ZWQoKXsKLQkJCi0JfQotCQotCXByaXZhdGUgdm9pZCBpbmlhdGlhbGl6ZSgpewotCQlhbnRFeHRDXyA9IEFudEV4dGVuc2lvbkNyZWF0aW9uLmdldEluc3RhbmNlKCk7Ci0JCWxhYmVsc0FuZElkc1J1bnRpbWVfID0gYW50RXh0Q18uZ2V0UnVudGltZUxhYmVsc0FuZElkcygpOwotCQlzZXRSdW50aW1lTGFiZWxzKGxhYmVsc0FuZElkc1J1bnRpbWVfLmdldExhYmVscygpKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRTY2VuYXJpbygpewotCQlyZXR1cm4gbGFiZWxzQW5kSWRzU2NlbmFyaW9fLmdldElkKHNjZW5hcmlvXy5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvbihDb21ibyBjb21ibywgU3RyaW5nIHMpCi0JewotCQlTdHJpbmdbXSBpdGVtcyA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0JCWZvciAoaW50IGk9MDsgaTxpdGVtcy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKGl0ZW1zW2ldLmVxdWFscyhzKSkKLQkJCXsKLQkJCQljb21iby5zZWxlY3QoaSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRSdW50aW1lTGFiZWxzKFN0cmluZ1tdIHJ1bnRpbWVMYWJlbHMpCi0JewotCQlydW50aW1lXy5zZXRJdGVtcyhydW50aW1lTGFiZWxzKTsKLQkgICAgLy91bnRpbCB0aGUgcHJlZmVyZW5jZXMgYXJlIHNldCB1cAotCQlzZXRTZWxlY3Rpb24ocnVudGltZV8scnVudGltZUxhYmVsc1swXSk7Ci0JCXJ1bnRpbWVJZHhfID0gMDsKLQkJbGFiZWxzQW5kSWRzU2NlbmFyaW9fID0gYW50RXh0Q18uZ2V0U2NlbmFyaW9MYWJlbHNCeVJ1bnRpbWUobGFiZWxzQW5kSWRzUnVudGltZV8uZ2V0SWQoMCkpOwotCQlzZXRTY2VuYXJpb0xhYmVscyhsYWJlbHNBbmRJZHNTY2VuYXJpb18uZ2V0TGFiZWxzKCkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0U2NlbmFyaW9MYWJlbHMoU3RyaW5nW10gc2NlbmFyaW9MYWJlbHMpCi0JewotCQlzY2VuYXJpb18uc2V0SXRlbXMoc2NlbmFyaW9MYWJlbHMpOwotCSAgICAvL3VudGlsIHRoZSBwcmVmZXJlbmNlcyBhcmUgc2V0IHVwCi0JCXNldFNlbGVjdGlvbihzY2VuYXJpb18sc2NlbmFyaW9MYWJlbHNbMF0pOwotCQkKLQl9Ci0JCi19Ci0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9FcnJvckRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvRXJyb3JEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JkMWMxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9FcnJvckRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLQotLyoqCi0gKiBBIGRpYWxvZyB0byBkaXNwbGF5IG9uZSBvciBtb3JlIGVycm9ycyB0byB0aGUgdXNlciwgYXMgY29udGFpbmVkIGluIGFuCi0gKiA8Y29kZT5TdGF0dXM8L2NvZGU+IG9iamVjdC4gSWYgYW4gZXJyb3IgY29udGFpbnMgYWRkaXRpb25hbCBkZXRhaWxlZAotICogaW5mb3JtYXRpb24gdGhlbiBhIERldGFpbHMgYnV0dG9uIGlzIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQsIHdoaWNoIHNob3dzIG9yCi0gKiBoaWRlcyBhbiBlcnJvciBkZXRhaWxzIHZpZXdlciB3aGVuIHByZXNzZWQgYnkgdGhlIHVzZXIuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvckRpYWxvZyBleHRlbmRzIE1lc3NhZ2VEaWFsb2cKLXsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBlcnJvciBkaWFsb2cuIE5vdGUgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBubyB2aXN1YWwKLSAgICogcmVwcmVzZW50YXRpb24gKG5vIHdpZGdldHMpIHVudGlsIGl0IGlzIHRvbGQgdG8gb3Blbi4KLSAgICogPHA+Ci0gICAqIE5vcm1hbGx5IG9uZSBzaG91bGQgdXNlIDxjb2RlPm9wZW5FcnJvcjwvY29kZT4gdG8gY3JlYXRlIGFuZCBvcGVuIG9uZSBvZgotICAgKiB0aGVzZS4gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWwgb25seSBpZiB0aGUgZXJyb3Igb2JqZWN0IGJlaW5nIGRpc3BsYXllZAotICAgKiBjb250YWlucyBjaGlsZCBpdGVtcyA8aXQ+YW5kPC9pdD4geW91IG5lZWQgdG8gc3BlY2lmeSBhIG1hc2sgd2hpY2ggd2lsbAotICAgKiBiZSB1c2VkIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiB0aGVzZSBjaGlsZHJlbi4KLSAgICogPC9wPgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudFNoZWxsCi0gICAqICAgICAgICAgICAgdGhlIHNoZWxsIHVuZGVyIHdoaWNoIHRvIGNyZWF0ZSB0aGlzIGRpYWxvZwotICAgKiBAcGFyYW0gZGlhbG9nVGl0bGUKLSAgICogICAgICAgICAgICB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBkZWZhdWx0IHRpdGxlIHNob3VsZCBiZSB1c2VkCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBlcnJvcidzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIGFzIHRoZQotICAgKiAgICAgICAgICAgIHByaW1hcnkgbWVzc2FnZQotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgdGhlIGVycm9yIHRvIHNob3cgdG8gdGhlIHVzZXIKLSAgICogQHBhcmFtIGRpc3BsYXlNYXNrCi0gICAqICAgICAgICAgICAgdGhlIG1hc2sgdG8gdXNlIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiBjaGlsZCBpdGVtcywgYXMgcGVyCi0gICAqICAgICAgICAgICAgPGNvZGU+U3RhdHVzLm1hdGNoZXM8L2NvZGU+Ci0gICAqLwotICBwdWJsaWMgRXJyb3JEaWFsb2coCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsLCBkaWFsb2dUaXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIFRoaXMgc2hvdWxkIGFsc28gYmUgb3ZlcndyaXR0ZW4gTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBPSyBhbmQgRGV0YWlscyBidXR0b25zCi0gICAgY3JlYXRlQnV0dG9uKAotICAgICAgcGFyZW50LAotICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLk9LX0lELAotICAgICAgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwKLSAgICAgIHRydWUpOwotICAgIGlmIChzdGF0dXMuaXNNdWx0aVN0YXR1cygpIHx8IHN0YXR1cy5nZXRFeGNlcHRpb24oKSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBkZXRhaWxzQnV0dG9uID0KLSAgICAgICAgY3JlYXRlQnV0dG9uKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuREVUQUlMU19JRCwKLSAgICAgICAgICBJRGlhbG9nQ29uc3RhbnRzLlNIT1dfREVUQUlMU19MQUJFTCwKLSAgICAgICAgICBmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogVGhpcyBpcyBvbmUgb2YgdGhlIGZldyBtZXRob2RzIHRoYXQgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlCi0gICAqIHN1YmNsYXNzZXMuIFRoZSBpbWFnZSBuYW1lcyBjYW4gYmUgZm91bmQgaW4gdGhlIERpYWxvZyBjbGFzcwotICAgKi8KLSAgcHJvdGVjdGVkIEltYWdlIGdldERpYWxvZ0ltYWdlKCkKLSAgewotICAgIC8vIGNyZWF0ZSBpbWFnZQotICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9FUlJPUik7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvSW5mb0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvSW5mb0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTA3ZGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0luZm9EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotCi0KLS8qKgotICogQSBkaWFsb2cgdG8gZGlzcGxheSBvbmUgb3IgbW9yZSBlcnJvcnMgdG8gdGhlIHVzZXIsIGFzIGNvbnRhaW5lZCBpbiBhbgotICogPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QuIElmIGFuIGVycm9yIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIHRoZW4gYSBEZXRhaWxzIGJ1dHRvbiBpcyBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkLCB3aGljaCBzaG93cyBvcgotICogaGlkZXMgYW4gZXJyb3IgZGV0YWlscyB2aWV3ZXIgd2hlbiBwcmVzc2VkIGJ5IHRoZSB1c2VyLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgSW5mb0RpYWxvZyBleHRlbmRzIE1lc3NhZ2VEaWFsb2cKLXsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gZXJyb3IgZGlhbG9nLiBOb3RlIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgbm8gdmlzdWFsCi0gICAqIHJlcHJlc2VudGF0aW9uIChubyB3aWRnZXRzKSB1bnRpbCBpdCBpcyB0b2xkIHRvIG9wZW4uCi0gICAqIDxwPgotICAgKiBOb3JtYWxseSBvbmUgc2hvdWxkIHVzZSA8Y29kZT5vcGVuRXJyb3I8L2NvZGU+IHRvIGNyZWF0ZSBhbmQgb3BlbiBvbmUgb2YKLSAgICogdGhlc2UuIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZnVsIG9ubHkgaWYgdGhlIGVycm9yIG9iamVjdCBiZWluZyBkaXNwbGF5ZWQKLSAgICogY29udGFpbnMgY2hpbGQgaXRlbXMgPGl0PmFuZDwvaXQ+IHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBtYXNrIHdoaWNoIHdpbGwKLSAgICogYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UgY2hpbGRyZW4uCi0gICAqIDwvcD4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRTaGVsbAotICAgKiAgICAgICAgICAgIHRoZSBzaGVsbCB1bmRlciB3aGljaCB0byBjcmVhdGUgdGhpcyBkaWFsb2cKLSAgICogQHBhcmFtIGRpYWxvZ1RpdGxlCi0gICAqICAgICAgICAgICAgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZGVmYXVsdCB0aXRsZSBzaG91bGQgYmUgdXNlZAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZXJyb3IncyBtZXNzYWdlIHNob3VsZCBiZSBzaG93biBhcyB0aGUKLSAgICogICAgICAgICAgICBwcmltYXJ5IG1lc3NhZ2UKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIHRoZSBlcnJvciB0byBzaG93IHRvIHRoZSB1c2VyCi0gICAqIEBwYXJhbSBkaXNwbGF5TWFzawotICAgKiAgICAgICAgICAgIHRoZSBtYXNrIHRvIHVzZSB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgY2hpbGQgaXRlbXMsIGFzIHBlcgotICAgKiAgICAgICAgICAgIDxjb2RlPlN0YXR1cy5tYXRjaGVzPC9jb2RlPgotICAgKi8KLSAgcHVibGljIEluZm9EaWFsb2coCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsLCBkaWFsb2dUaXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIFRoaXMgc2hvdWxkIGFsc28gYmUgb3ZlcndyaXR0ZW4gTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBPSyBhbmQgRGV0YWlscyBidXR0b25zCi0gICAgY3JlYXRlQnV0dG9uKAotICAgICAgcGFyZW50LAotICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLk9LX0lELAotICAgICAgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwKLSAgICAgIHRydWUpOwotICAgIGlmIChzdGF0dXMuaXNNdWx0aVN0YXR1cygpICkKLSAgICB7Ci0gICAgICBkZXRhaWxzQnV0dG9uID0KLSAgICAgICAgY3JlYXRlQnV0dG9uKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuREVUQUlMU19JRCwKLSAgICAgICAgICBJRGlhbG9nQ29uc3RhbnRzLlNIT1dfREVUQUlMU19MQUJFTCwKLSAgICAgICAgICBmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogVGhpcyBpcyBvbmUgb2YgdGhlIGZldyBtZXRob2RzIHRoYXQgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlCi0gICAqIHN1YmNsYXNzZXMuIFRoZSBpbWFnZSBuYW1lcyBjYW4gYmUgZm91bmQgaW4gdGhlIERpYWxvZyBjbGFzcwotICAgKi8KLSAgcHJvdGVjdGVkIEltYWdlIGdldERpYWxvZ0ltYWdlKCkKLSAgewotICAgIC8vIGNyZWF0ZSBpbWFnZQotICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9JTkZPUk1BVElPTik7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvTWVzc2FnZURpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvTWVzc2FnZURpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGFmNzIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL01lc3NhZ2VEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDQgICAxMjg5ODQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLQotCi0vKioKLSAqIEEgZGlhbG9nIHRvIGRpc3BsYXkgb25lIG9yIG1vcmUgZXJyb3JzIHRvIHRoZSB1c2VyLCBhcyBjb250YWluZWQgaW4gYW4KLSAqIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0LiBJZiBhbiBlcnJvciBjb250YWlucyBhZGRpdGlvbmFsIGRldGFpbGVkCi0gKiBpbmZvcm1hdGlvbiB0aGVuIGEgRGV0YWlscyBidXR0b24gaXMgYXV0b21hdGljYWxseSBzdXBwbGllZCwgd2hpY2ggc2hvd3Mgb3IKLSAqIGhpZGVzIGFuIGVycm9yIGRldGFpbHMgdmlld2VyIHdoZW4gcHJlc3NlZCBieSB0aGUgdXNlci4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VEaWFsb2cgZXh0ZW5kcyBEaWFsb2cKLXsKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBwYXJlbnQ7Ci0KLSAgLyoqCi0gICAqIFJlc2VydmUgcm9vbSBmb3IgdGhpcyBtYW55IGxpc3QgaXRlbXMuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBMSVNUX0lURU1fQ09VTlQgPSA3OwotCi0gIC8qKgotICAgKiBUaGUgRGV0YWlscyBidXR0b24uCi0gICAqLwotICBwcm90ZWN0ZWQgQnV0dG9uIGRldGFpbHNCdXR0b247Ci0KLSAgLyoqCi0gICAqIFRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0aXRsZTsKLQotICAvKioKLSAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZTsKLQotICAvKioKLSAgICogVGhlIFNXVCBsaXN0IGNvbnRyb2wgdGhhdCBkaXNwbGF5cyB0aGUgZXJyb3IgZGV0YWlscy4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGxpc3Q7Ci0gIHByb3RlY3RlZCBUZXh0IGRldGFpbHM7Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBlcnJvciBkZXRhaWxzIHZpZXdlciBpcyBjdXJyZW50bHkgY3JlYXRlZC4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGxpc3RDcmVhdGVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBib29sZWFuIGRldGFpbHNDcmVhdGVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIEZpbHRlciBtYXNrIGZvciBkZXRlcm1pbmluZyB3aGljaCBzdGF0dXMgaXRlbXMgdG8gZGlzcGxheS4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgZGlzcGxheU1hc2sgPSAweEZGRkY7Ci0KLSAgLyoqCi0gICAqIFRoZSBtYWluIHN0YXR1cyBvYmplY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgSVN0YXR1cyBzdGF0dXM7Ci0gIAotICBwcml2YXRlIFBvaW50IHNhdmVkU2l6ZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExpc3Qgb2YgdGhlIG1haW4gZXJyb3Igb2JqZWN0J3MgZGV0YWlsZWQgZXJyb3JzIChlbGVtZW50IHR5cGU6IDxjb2RlPlN0YXR1czwvY29kZT4pLgotICAgKi8KLSAgcHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IHN0YXR1c0xpc3Q7Ci0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGVycm9yIGRpYWxvZy4gTm90ZSB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIG5vIHZpc3VhbAotICAgKiByZXByZXNlbnRhdGlvbiAobm8gd2lkZ2V0cykgdW50aWwgaXQgaXMgdG9sZCB0byBvcGVuLgotICAgKiA8cD4KLSAgICogTm9ybWFsbHkgb25lIHNob3VsZCB1c2UgPGNvZGU+b3BlbkVycm9yPC9jb2RlPiB0byBjcmVhdGUgYW5kIG9wZW4gb25lIG9mCi0gICAqIHRoZXNlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bCBvbmx5IGlmIHRoZSBlcnJvciBvYmplY3QgYmVpbmcgZGlzcGxheWVkCi0gICAqIGNvbnRhaW5zIGNoaWxkIGl0ZW1zIDxpdD5hbmQ8L2l0PiB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgbWFzayB3aGljaCB3aWxsCi0gICAqIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIHRoZXNlIGNoaWxkcmVuLgotICAgKiA8L3A+Ci0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50U2hlbGwKLSAgICogICAgICAgICAgICB0aGUgc2hlbGwgdW5kZXIgd2hpY2ggdG8gY3JlYXRlIHRoaXMgZGlhbG9nCi0gICAqIEBwYXJhbSBkaWFsb2dUaXRsZQotICAgKiAgICAgICAgICAgIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGRlZmF1bHQgdGl0bGUgc2hvdWxkIGJlIHVzZWQKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogICAgICAgICAgICB0aGUgbWVzc2FnZSB0byBzaG93IGluIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGVycm9yJ3MgbWVzc2FnZSBzaG91bGQgYmUgc2hvd24gYXMgdGhlCi0gICAqICAgICAgICAgICAgcHJpbWFyeSBtZXNzYWdlCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICB0aGUgZXJyb3IgdG8gc2hvdyB0byB0aGUgdXNlcgotICAgKiBAcGFyYW0gZGlzcGxheU1hc2sKLSAgICogICAgICAgICAgICB0aGUgbWFzayB0byB1c2UgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIGNoaWxkIGl0ZW1zLCBhcyBwZXIKLSAgICogICAgICAgICAgICA8Y29kZT5TdGF0dXMubWF0Y2hlczwvY29kZT4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRGlhbG9nKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyBkaWFsb2dUaXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCk7Ci0gICAgICB0aGlzLnRpdGxlID0gZGlhbG9nVGl0bGUgPT0gbnVsbCA/IEpGYWNlUmVzb3VyY2VzLmdldFN0cmluZygiUHJvYmxlbV9PY2N1cnJlZCIpIDogLy8kTk9OLU5MUy0xJAotICBkaWFsb2dUaXRsZTsKLSAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlID09IG51bGwgPyBzdGF0dXMuZ2V0TWVzc2FnZSgpIDogSkZhY2VSZXNvdXJjZXMuZm9ybWF0KCJSZWFzb24iLCBuZXcgT2JqZWN0W10geyBtZXNzYWdlLCBzdGF0dXMuZ2V0TWVzc2FnZSgpfSk7IC8vJE5PTi1OTFMtMSQKLSAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czsKLSAgICBzdGF0dXNMaXN0ID0gQXJyYXlzLmFzTGlzdChzdGF0dXMuZ2V0Q2hpbGRyZW4oKSk7Ci0gICAgdGhpcy5kaXNwbGF5TWFzayA9IGRpc3BsYXlNYXNrOwotICAgIHNldFNoZWxsU3R5bGUoU1dULkRJQUxPR19UUklNIHwgU1dULlJFU0laRSB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7Ci0gIH0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLiBIYW5kbGVzIHRoZSBwcmVzc2luZyBvZiB0aGUgT2sgb3IKLSAgICogRGV0YWlscyBidXR0b24gaW4gdGhpcyBkaWFsb2cuIElmIHRoZSBPayBidXR0b24gd2FzIHByZXNzZWQgdGhlbiBjbG9zZQotICAgKiB0aGlzIGRpYWxvZy4gSWYgdGhlIERldGFpbHMgYnV0dG9uIHdhcyBwcmVzc2VkIHRoZW4gdG9nZ2xlIHRoZSBkaXNwbGF5aW5nCi0gICAqIG9mIHRoZSBlcnJvciBkZXRhaWxzIGFyZWEuIE5vdGUgdGhhdCB0aGUgRGV0YWlscyBidXR0b24gd2lsbCBvbmx5IGJlCi0gICAqIHZpc2libGUgaWYgdGhlIGVycm9yIGJlaW5nIGRpc3BsYXllZCBzcGVjaWZpZXMgY2hpbGQgZGV0YWlscy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGJ1dHRvblByZXNzZWQoaW50IGlkKQotICB7Ci0gICAgaWYgKGlkID09IFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lEKQotICAgIHsgLy8gd2FzIHRoZSBkZXRhaWxzIGJ1dHRvbiBwcmVzc2VkPwotICAgICAgdG9nZ2xlRGV0YWlsc0FyZWEoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHN1cGVyLmJ1dHRvblByZXNzZWQoaWQpOwotICAgIH0KLSAgfQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIE1ldGhvZCBkZWNsYXJlZCBpbiBXaW5kb3cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTaGVsbChTaGVsbCBzaGVsbCkKLSAgewotICAgIHN1cGVyLmNvbmZpZ3VyZVNoZWxsKHNoZWxsKTsKLSAgICBzaGVsbC5zZXRUZXh0KHRpdGxlKTsKLSAgfQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIFRoaXMgc2hvdWxkIGFsc28gYmUgb3ZlcndyaXR0ZW4gTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBPSyBhbmQgRGV0YWlscyBidXR0b25zCi0gICAgY3JlYXRlQnV0dG9uKAotICAgICAgcGFyZW50LAotICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLk9LX0lELAotICAgICAgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwKLSAgICAgIHRydWUpOwotICAgIGlmIChzdGF0dXMuaXNNdWx0aVN0YXR1cygpIHx8IHN0YXR1cy5nZXRFeGNlcHRpb24oKSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBkZXRhaWxzQnV0dG9uID0KLSAgICAgICAgY3JlYXRlQnV0dG9uKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuREVUQUlMU19JRCwKLSAgICAgICAgICBJRGlhbG9nQ29uc3RhbnRzLlNIT1dfREVUQUlMU19MQUJFTCwKLSAgICAgICAgICBmYWxzZSk7Ci0gICAgfQotICAgIAotICAgIHBhcmVudC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApKTsKLSAgfQotCi0gIC8qCi0gICAqIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcgbWV0aG9kcyB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZQotICAgKiBzdWJjbGFzc2VzLiBUaGUgaW1hZ2UgbmFtZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBEaWFsb2cgY2xhc3MKLSAgICovCi0gIHByb3RlY3RlZCBJbWFnZSBnZXREaWFsb2dJbWFnZSgpCi0gIHsKLSAgICAvLyBjcmVhdGUgaW1hZ2UKLSAgICByZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtSW1hZ2UoU1dULklDT05fSU5GT1JNQVRJT04pOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBjb250ZW50cwotICAgKiBvZiB0aGUgdXBwZXIgcGFydCBvZiB0aGUgZGlhbG9nIChhYm92ZSB0aGUgYnV0dG9uIGJhcikuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsKLQotICAgIC8vIGNyZWF0ZSBjb21wb3NpdGUKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotICAgIENvbXBvc2l0ZSBpbWFnZUFuZExhYmVsID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMjsKLSAgICBpbWFnZUFuZExhYmVsLnNldExheW91dChnbCk7Ci0gICAgaW1hZ2VBbmRMYWJlbC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApICk7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkpOwotICAgIAotICAgIC8vIGNyZWF0ZSBpbWFnZQotICAgIEltYWdlIGltYWdlID0gZ2V0RGlhbG9nSW1hZ2UoKTsKLSAgICBpZiAoaW1hZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChpbWFnZUFuZExhYmVsLCAwKTsKLSAgICAgIGltYWdlLnNldEJhY2tncm91bmQobGFiZWwuZ2V0QmFja2dyb3VuZCgpKTsKLSAgICAgIGxhYmVsLnNldEltYWdlKGltYWdlKTsKLSAgICAgIGxhYmVsLnNldExheW91dERhdGEoCi0gICAgICAgIG5ldyBHcmlkRGF0YSgKLSAgICAgICAgICBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0NFTlRFUgotICAgICAgICAgICAgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpKTsKLSAgICB9Ci0KLSAgICAvLyBjcmVhdGUgbWVzc2FnZQotICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgVGV4dCB0ZXh0ID0gbmV3IFRleHQoaW1hZ2VBbmRMYWJlbCwgU1dULlJFQURfT05MWXxTV1QuV1JBUCk7Ci0gICAgICB0ZXh0LnNldFRleHQobWVzc2FnZSk7Ci0gICAgICBHcmlkRGF0YSBkYXRhID0KLSAgICAgICAgbmV3IEdyaWREYXRhKAotICAgICAgICAgIEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTAotICAgICAgICAgICAgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMCi0gICAgICAgICAgICB8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTAotICAgICAgICAgICAgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9DRU5URVIpOwotICAgICAgZGF0YS53aWR0aEhpbnQgPQotICAgICAgICBjb252ZXJ0SG9yaXpvbnRhbERMVXNUb1BpeGVscygKLSAgICAgICAgICBJRGlhbG9nQ29uc3RhbnRzLk1JTklNVU1fTUVTU0FHRV9BUkVBX1dJRFRIKTsKLSAgICAgCi0gICAgICB0ZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgICB0ZXh0LnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGNyZWF0ZURyb3BEb3duTGlzdChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIHRoZSBsaXN0Ci0gICAgbGlzdCA9IG5ldyBMaXN0KHBhcmVudCwgU1dULkJPUkRFUiB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7Ci0KLSAgICAvLyBmaWxsIHRoZSBsaXN0Ci0gICAgcG9wdWxhdGVMaXN0KGxpc3QpOwotCi0gICAgR3JpZERhdGEgZGF0YSA9Ci0gICAgICBuZXcgR3JpZERhdGEoCi0gICAgICAgIEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTAotICAgICAgICAgIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMCi0gICAgICAgICAgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMCi0gICAgICAgICAgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICBkYXRhLmhlaWdodEhpbnQgPSBsaXN0LmdldEl0ZW1IZWlnaHQoKSAqIExJU1RfSVRFTV9DT1VOVDsKLSAgICBsaXN0LnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgbGlzdENyZWF0ZWQgPSB0cnVlOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0gIHByb3RlY3RlZCBUZXh0IGNyZWF0ZURyb3BEb3duRGV0YWlscyhDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgZGV0YWlscyA9IG5ldyBUZXh0KHBhcmVudCwgU1dULkJPUkRFUiB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCB8IFNXVC5SRUFEX09OTFkgfCBTV1QuV1JBUCApOwotICAgIC8vZGV0YWlscy5zZXRFZGl0YWJsZShmYWxzZSk7Ci0gICAgQ29sb3IgY29sb3IgPSBwYXJlbnQuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoIFNXVC5DT0xPUl9XSElURSApOwotICAgIGRldGFpbHMuc2V0QmFja2dyb3VuZChjb2xvcik7Ci0gICAgcG9wdWxhdGVEZXRhaWxzKGRldGFpbHMsIHN0YXR1cywgMCk7Ci0gICAgR3JpZERhdGEgZGF0YSA9Ci0gICAgICBuZXcgR3JpZERhdGEoCi0gICAgICAgIEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTAotICAgICAgICAgIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMCi0gICAgICAgICAgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMCi0gICAgICAgICAgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICAKLSAgICBkZXRhaWxzLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgZGV0YWlscy5zZXRTZWxlY3Rpb24oMCk7Ci0gICAgZGV0YWlsc0NyZWF0ZWQgPSB0cnVlOwotICAgIHJldHVybiBkZXRhaWxzOwotICB9Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykgTWV0aG9kIGRlY2xhcmVkIG9uIFdpbmRvdy4KLSAgICovCi0gIC8qKgotICAgKiBFeHRlbmRzIDxjb2RlPldpbmRvdy5vcGVuKCk8L2NvZGU+LiBPcGVucyBhbiBlcnJvciBkaWFsb2cgdG8gZGlzcGxheQotICAgKiB0aGUgZXJyb3IuIElmIHlvdSBzcGVjaWZpZWQgYSBtYXNrIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiB0aGVzZQotICAgKiBjaGlsZHJlbiwgdGhlIGVycm9yIGRpYWxvZyB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZQotICAgKiBjaGlsZCBzdGF0dXMgbWF0Y2hpbmcgdGhlIG1hc2suCi0gICAqLwotICBwdWJsaWMgaW50IG9wZW4oKQotICB7Ci0gICAgaWYgKHNob3VsZERpc3BsYXkoc3RhdHVzLCBkaXNwbGF5TWFzaykpCi0gICAgewotICAgICAgcmV0dXJuIHN1cGVyLm9wZW4oKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgLyoqCi0gICAqIFRoaXMgZXNzZW50aWFsbHkgZG9lcyB0aGUgd29yayBvZiBhIGZhY3RvcnkgT3BlbnMgYW4gZXJyb3IgZGlhbG9nIHRvCi0gICAqIGRpc3BsYXkgdGhlIGdpdmVuIGVycm9yLiBVc2UgdGhpcyBtZXRob2QgaWYgdGhlIGVycm9yIG9iamVjdCBiZWluZwotICAgKiBkaXNwbGF5ZWQgZG9lcyBub3QgY29udGFpbiBjaGlsZCBpdGVtcywgb3IgaWYgeW91IHdpc2ggdG8gZGlzcGxheSBhbGwgc3VjaAotICAgKiBpdGVtcyB3aXRob3V0IGZpbHRlcmluZy4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogICAgICAgICAgICB0aGUgcGFyZW50IHNoZWxsIG9mIHRoZSBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUKLSAgICogQHBhcmFtIGRpYWxvZ1RpdGxlCi0gICAqICAgICAgICAgICAgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZGVmYXVsdCB0aXRsZSBzaG91bGQgYmUgdXNlZAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZXJyb3IncyBtZXNzYWdlIHNob3VsZCBiZSBzaG93biBhcyB0aGUKLSAgICogICAgICAgICAgICBwcmltYXJ5IG1lc3NhZ2UKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIHRoZSBlcnJvciB0byBzaG93IHRvIHRoZSB1c2VyCi0gICAqIEByZXR1cm4gdGhlIGNvZGUgb2YgdGhlIGJ1dHRvbiB0aGF0IHdhcyBwcmVzc2VkIHRoYXQgcmVzdWx0ZWQgaW4gdGhpcwotICAgKiAgICAgICAgIGRpYWxvZyBjbG9zaW5nLiBUaGlzIHdpbGwgYmUgPGNvZGU+RGlhbG9nLk9LPC9jb2RlPiBpZiB0aGUgT0sKLSAgICogICAgICAgICBidXR0b24gd2FzIHByZXNzZWQsIG9yIDxjb2RlPkRpYWxvZy5DQU5DRUw8L2NvZGU+IGlmIHRoaXMKLSAgICogICAgICAgICBkaWFsb2cncyBjbG9zZSB3aW5kb3cgZGVjb3JhdGlvbiBvciB0aGUgRVNDIGtleSB3YXMgdXNlZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IG9wZW5NZXNzYWdlKAotICAgIFNoZWxsIHBhcmVudCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMpCi0gIHsKLQotICAgIHN3aXRjaCAoc3RhdHVzLmdldFNldmVyaXR5KCkpCi0gICAgewotICAgICAgY2FzZSBJU3RhdHVzLklORk8gOgotICAgICAgICByZXR1cm4gb3BlbkluZm8oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIGRpYWxvZ1RpdGxlLAotICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgc3RhdHVzLAotICAgICAgICAgIElTdGF0dXMuT0sgfCBJU3RhdHVzLklORk8gfCBJU3RhdHVzLldBUk5JTkcgfCBJU3RhdHVzLkVSUk9SKTsKLSAgICAgIGNhc2UgSVN0YXR1cy5XQVJOSU5HIDoKLSAgICAgICAgcmV0dXJuIG9wZW5XYXJuaW5nKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBkaWFsb2dUaXRsZSwKLSAgICAgICAgICBtZXNzYWdlLAotICAgICAgICAgIHN0YXR1cywKLSAgICAgICAgICBJU3RhdHVzLk9LIHwgSVN0YXR1cy5JTkZPIHwgSVN0YXR1cy5XQVJOSU5HIHwgSVN0YXR1cy5FUlJPUik7Ci0gICAgICBkZWZhdWx0IDoKLSAgICAgICAgcmV0dXJuIG9wZW5FcnJvcigKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgZGlhbG9nVGl0bGUsCi0gICAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgICBzdGF0dXMsCi0gICAgICAgICAgSVN0YXR1cy5PSyB8IElTdGF0dXMuSU5GTyB8IElTdGF0dXMuV0FSTklORyB8IElTdGF0dXMuRVJST1IpOwotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBpbnQgb3Blbk1lc3NhZ2UoCi0gICAgU2hlbGwgcGFyZW50LAotICAgIFN0cmluZyBkaWFsb2dUaXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBDaG9pY2VbXSBvcHRpb25zKQotICB7Ci0KLSAgICByZXR1cm4gb3Blbk9wdGlvbnMoCi0gICAgICBwYXJlbnQsCi0gICAgICBkaWFsb2dUaXRsZSwKLSAgICAgIG1lc3NhZ2UsCi0gICAgICBzdGF0dXMsCi0gICAgICBJU3RhdHVzLk9LIHwgSVN0YXR1cy5JTkZPIHwgSVN0YXR1cy5XQVJOSU5HIHwgSVN0YXR1cy5FUlJPUiwKLSAgICAgIG9wdGlvbnMpOwotICB9Ci0KLSAgLyoqCi0gICAqIE9wZW5zIGFuIGVycm9yIGRpYWxvZyB0byBkaXNwbGF5IHRoZSBnaXZlbiBlcnJvci4gVXNlIHRoaXMgbWV0aG9kIGlmIHRoZQotICAgKiBlcnJvciBvYmplY3QgYmVpbmcgZGlzcGxheWVkIGNvbnRhaW5zIGNoaWxkIGl0ZW1zIDxpdD5hbmQ8L2l0PiB5b3Ugd2lzaAotICAgKiB0byBzcGVjaWZ5IGEgbWFzayB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIHRoZXNlCi0gICAqIGNoaWxkcmVuLiBUaGUgZXJyb3IgZGlhbG9nIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lCi0gICAqIGNoaWxkIHN0YXR1cyBtYXRjaGluZyB0aGUgbWFzay4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRTaGVsbAotICAgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgc2hlbGwgb2YgdGhlIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZQotICAgKiBAcGFyYW0gZGlhbG9nVGl0bGUKLSAgICogICAgICAgICAgICB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBkZWZhdWx0IHRpdGxlIHNob3VsZCBiZSB1c2VkCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBlcnJvcidzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIGFzIHRoZQotICAgKiAgICAgICAgICAgIHByaW1hcnkgbWVzc2FnZQotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgdGhlIGVycm9yIHRvIHNob3cgdG8gdGhlIHVzZXIKLSAgICogQHBhcmFtIGRpc3BsYXlNYXNrCi0gICAqICAgICAgICAgICAgdGhlIG1hc2sgdG8gdXNlIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiBjaGlsZCBpdGVtcywgYXMgcGVyCi0gICAqICAgICAgICAgICAgPGNvZGU+U3RhdHVzLm1hdGNoZXM8L2NvZGU+Ci0gICAqIEByZXR1cm4gdGhlIGNvZGUgb2YgdGhlIGJ1dHRvbiB0aGF0IHdhcyBwcmVzc2VkIHRoYXQgcmVzdWx0ZWQgaW4gdGhpcwotICAgKiAgICAgICAgIGRpYWxvZyBjbG9zaW5nLiBUaGlzIHdpbGwgYmUgPGNvZGU+RGlhbG9nLk9LPC9jb2RlPiBpZiB0aGUgT0sKLSAgICogICAgICAgICBidXR0b24gd2FzIHByZXNzZWQsIG9yIDxjb2RlPkRpYWxvZy5DQU5DRUw8L2NvZGU+IGlmIHRoaXMKLSAgICogICAgICAgICBkaWFsb2cncyBjbG9zZSB3aW5kb3cgZGVjb3JhdGlvbiBvciB0aGUgRVNDIGtleSB3YXMgdXNlZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IG9wZW5FcnJvcigKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgdGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgRXJyb3JEaWFsb2cgZGlhbG9nID0KLSAgICAgIG5ldyBFcnJvckRpYWxvZyhwYXJlbnRTaGVsbCwgdGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICAgIHJldHVybiBkaWFsb2cub3BlbigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBpbnQgb3BlbkluZm8oCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIHRpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIEluZm9EaWFsb2cgZGlhbG9nID0KLSAgICAgIG5ldyBJbmZvRGlhbG9nKHBhcmVudFNoZWxsLCB0aXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gICAgcmV0dXJuIGRpYWxvZy5vcGVuKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGludCBvcGVuV2FybmluZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgdGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgV2FybmluZ0RpYWxvZyBkaWFsb2cgPQotICAgICAgbmV3IFdhcm5pbmdEaWFsb2cocGFyZW50U2hlbGwsIHRpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgICByZXR1cm4gZGlhbG9nLm9wZW4oKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IG9wZW5PcHRpb25zKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyB0aXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2ssCi0gICAgQ2hvaWNlW10gb3B0aW9ucykKLSAgewotICAgIE9wdGlvbnNEaWFsb2cgZGlhbG9nID0KLSAgICAgIG5ldyBPcHRpb25zRGlhbG9nKAotICAgICAgICBwYXJlbnRTaGVsbCwKLSAgICAgICAgdGl0bGUsCi0gICAgICAgIG1lc3NhZ2UsCi0gICAgICAgIHN0YXR1cywKLSAgICAgICAgZGlzcGxheU1hc2ssCi0gICAgICAgIG9wdGlvbnMpOwotICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgcmV0dXJuIGRpYWxvZy5nZXRSZXR1cm5Db2RlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUG9wdWxhdGVzIHRoZSBsaXN0IHVzaW5nIHRoaXMgZXJyb3IgZGlhbG9nJ3Mgc3RhdHVzIG9iamVjdC4gVGhpcyB3YWxrcyB0aGUKLSAgICogY2hpbGQgc3RhdGkgb2YgdGhlIHN0YXR1cyBvYmplY3QgYW5kIGRpc3BsYXlzIHRoZW0gaW4gYSBsaXN0LiBUaGUgZm9ybWF0Ci0gICAqIGZvciBlYWNoIGVudHJ5IGlzIHN0YXR1c19wYXRoIDogc3RhdHVzX21lc3NhZ2UgSWYgdGhlIHN0YXR1cydzIHBhdGggd2FzCi0gICAqIG51bGwgdGhlbiBpdCAoYW5kIHRoZSBjb2xvbikgYXJlIG9taXR0ZWQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVMaXN0KExpc3QgbGlzdCkKLSAgewotICAgIEl0ZXJhdG9yIGVudW1lcmF0aW9uID0gc3RhdHVzTGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChlbnVtZXJhdGlvbi5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSVN0YXR1cyBjaGlsZFN0YXR1cyA9IChJU3RhdHVzKSBlbnVtZXJhdGlvbi5uZXh0KCk7Ci0gICAgICBwb3B1bGF0ZUxpc3QobGlzdCwgY2hpbGRTdGF0dXMsIDApOwotICAgIH0KLSAgfQotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVMaXN0KExpc3QgbGlzdCwgSVN0YXR1cyBzdGF0dXMsIGludCBuZXN0aW5nKQotICB7Ci0gICAgaWYgKCFzdGF0dXMubWF0Y2hlcyhkaXNwbGF5TWFzaykpCi0gICAgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXN0aW5nOyBpKyspCi0gICAgewotICAgICAgc2IuYXBwZW5kKCIgICIpOwotICAgIH0KLSAgICBzYi5hcHBlbmQoc3RhdHVzLmdldE1lc3NhZ2UoKSk7Ci0gICAgbGlzdC5hZGQoc2IudG9TdHJpbmcoKSk7Ci0gICAgSVN0YXR1c1tdIGNoaWxkcmVuID0gc3RhdHVzLmdldENoaWxkcmVuKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBwb3B1bGF0ZUxpc3QobGlzdCwgY2hpbGRyZW5baV0sIG5lc3RpbmcgKyAxKTsKLSAgICB9Ci0gIH0KLSAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRGV0YWlscyhUZXh0IHRleHQsIElTdGF0dXMgc3RhdHVzLCBpbnQgbmVzdGluZykKLSAgewotICAgIGlmICghc3RhdHVzLm1hdGNoZXMoZGlzcGxheU1hc2spKQotICAgIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIFN0cmluZyAgICB0YWJDaGFycyAgICA9IFN0cmluZ1V0aWxzLnJlcGVhdCggJyAnLCBuZXN0aW5nICogMiApOwotICAgIFN0cmluZyAgICBtZXNzYWdlTGluZSA9IHRhYkNoYXJzICsgc3RhdHVzLmdldE1lc3NhZ2UoKSArIFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLSAgICBUaHJvd2FibGUgZXhjZXB0ICAgICAgPSBzdGF0dXMuZ2V0RXhjZXB0aW9uKCk7Ci0gICAgCi0gICAgdGV4dC5hcHBlbmQoIG1lc3NhZ2VMaW5lICk7Ci0gICAgCi0gICAgaWYoIGV4Y2VwdCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBTdHJpbmdbXSB0cmFjZSA9IFN0cmluZ1V0aWxzLmdldFN0YWNrVHJhY2UoIGV4Y2VwdCApOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgdHJhY2UubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgdGV4dC5hcHBlbmQoIHRhYkNoYXJzICsgIiAgICAiICsgdHJhY2VbaW5kZXhdICsgU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIElTdGF0dXNbXSBjaGlsZHJlbiA9IHN0YXR1cy5nZXRDaGlsZHJlbigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcG9wdWxhdGVEZXRhaWxzKHRleHQsIGNoaWxkcmVuW2ldLCBuZXN0aW5nICsgMSk7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHN0YXR1cyBvYmplY3Qgc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICBhIHN0YXR1cyBvYmplY3QKLSAgICogQHBhcmFtIG1hc2sKLSAgICogICAgICAgICAgICBhIG1hc2sgYXMgcGVyIDxjb2RlPlN0YXR1cy5tYXRjaGVzPC9jb2RlPgotICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBzdGF0dXMgc2hvdWxkIGJlIGRpc3BsYXllZCwgYW5kCi0gICAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZQotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIHNob3VsZERpc3BsYXkoSVN0YXR1cyBzdGF0dXMsIGludCBtYXNrKQotICB7Ci0gICAgSVN0YXR1c1tdIGNoaWxkcmVuID0gc3RhdHVzLmdldENoaWxkcmVuKCk7Ci0gICAgaWYgKGNoaWxkcmVuID09IG51bGwgfHwgY2hpbGRyZW4ubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmV0dXJuIHN0YXR1cy5tYXRjaGVzKG1hc2spOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChjaGlsZHJlbltpXS5tYXRjaGVzKG1hc2spKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBUb2dnbGVzIHRoZSB1bmZvbGRpbmcgb2YgdGhlIGRldGFpbHMgYXJlYS4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIKLSAgICogcHJlc3NpbmcgdGhlIGRldGFpbHMgYnV0dG9uLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRvZ2dsZURldGFpbHNBcmVhKCkKLSAgewotICAgIFBvaW50IHdpbmRvd1NpemUgPSBnZXRTaGVsbCgpLmdldFNpemUoKTsKLSAgICBpbnQgICBuZXdIZWlnaHQgID0gLTE7Ci0gICAgCi0gICAgaWYgKGRldGFpbHNDcmVhdGVkKQotICAgIHsKLSAgICAgIGRldGFpbHMuZGlzcG9zZSgpOwotICAgICAgZGV0YWlsc0NyZWF0ZWQgPSBmYWxzZTsKLSAgICAgIGRldGFpbHNCdXR0b24uc2V0VGV4dChJRGlhbG9nQ29uc3RhbnRzLlNIT1dfREVUQUlMU19MQUJFTCk7Ci0gICAgICAKLSAgICAgIC8vIFdpdGhvdXQgdGhlIGZvbGxvd2luZyBjb21wdXRlU2l6ZSBjYWxsIHRoZSBzZXRTaXplIGNhbGwgYmVsb3cgdGhyb3dzIGFuIGFycmF5IG91dCBvZiBib3VuZHMgZXhjZXB0aW9uLgotICAgICAgLy8gVmVyeSB3ZWlyZC4KLSAgICAgIGdldENvbnRlbnRzKCkuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICAgIAotICAgICAgbmV3SGVpZ2h0ID0gc2F2ZWRTaXplLnk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiggc2F2ZWRTaXplID09IG51bGwgKSBzYXZlZFNpemUgPSB3aW5kb3dTaXplOwotICAgICAgICAKLSAgICAgIGRldGFpbHMgPSBjcmVhdGVEcm9wRG93bkRldGFpbHMoKENvbXBvc2l0ZSkgZ2V0Q29udGVudHMoKSk7Ci0gICAgICBkZXRhaWxzQnV0dG9uLnNldFRleHQoSURpYWxvZ0NvbnN0YW50cy5ISURFX0RFVEFJTFNfTEFCRUwpOwotICAgICAgbmV3SGVpZ2h0ID0gZ2V0Q29udGVudHMoKS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpLnk7Ci0gICAgICBuZXdIZWlnaHQgPSBuZXdIZWlnaHQgPCAyNTAgPyAyNTAgOiBuZXdIZWlnaHQ7Ci0gICAgfQotCi0gICAgbmV3SGVpZ2h0ID0gbmV3SGVpZ2h0ID4gNDAwID8gNDAwIDogbmV3SGVpZ2h0OwotICAgIAotICAgIGdldFNoZWxsKCkuc2V0U2l6ZSggbmV3IFBvaW50KHdpbmRvd1NpemUueCwgbmV3SGVpZ2h0KSApOwotICAgIHBhcmVudC5sYXlvdXQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvT3B0aW9uc0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvT3B0aW9uc0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjExNzlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL09wdGlvbnNEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLQotCi0vKioKLSAqIEEgZGlhbG9nIHRvIGRpc3BsYXkgb25lIG9yIG1vcmUgZXJyb3JzIHRvIHRoZSB1c2VyLCBhcyBjb250YWluZWQgaW4gYW4KLSAqIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0LiBJZiBhbiBlcnJvciBjb250YWlucyBhZGRpdGlvbmFsIGRldGFpbGVkCi0gKiBpbmZvcm1hdGlvbiB0aGVuIGEgRGV0YWlscyBidXR0b24gaXMgYXV0b21hdGljYWxseSBzdXBwbGllZCwgd2hpY2ggc2hvd3Mgb3IKLSAqIGhpZGVzIGFuIGVycm9yIGRldGFpbHMgdmlld2VyIHdoZW4gcHJlc3NlZCBieSB0aGUgdXNlci4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIE9wdGlvbnNEaWFsb2cgZXh0ZW5kcyBNZXNzYWdlRGlhbG9nCi17Ci0gIHByaXZhdGUgQ2hvaWNlW10gY2hvaWNlczsKLSAgcHJpdmF0ZSBpbnQgcmV0dXJuQ29kZV87Ci0KLSAgcHVibGljIE9wdGlvbnNEaWFsb2coCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaywKLSAgICBDaG9pY2VbXSBjaG9pY2VzKQotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwsIGRpYWxvZ1RpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgICB0aGlzLmNob2ljZXMgPSBjaG9pY2VzOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBUaGlzIHNob3VsZCBhbHNvIGJlIG92ZXJ3cml0dGVuIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgYSBidXR0b24gZm9yIGVhY2ggb3B0aW9ucwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBjcmVhdGVCdXR0b24ocGFyZW50LCBjaG9pY2VzW2ldLmdldFNob3J0Y3V0KCksIGNob2ljZXNbaV0uZ2V0TGFiZWwoKSwgdHJ1ZSk7Ci0gICAgfQotICAgIGlmIChzdGF0dXMuaXNNdWx0aVN0YXR1cygpICkKLSAgICB7Ci0gICAgICBkZXRhaWxzQnV0dG9uID0KLSAgICAgICAgY3JlYXRlQnV0dG9uKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuREVUQUlMU19JRCwKLSAgICAgICAgICBJRGlhbG9nQ29uc3RhbnRzLlNIT1dfREVUQUlMU19MQUJFTCwKLSAgICAgICAgICBmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYnV0dG9uUHJlc3NlZChpbnQgaWQpCi0gIHsKLSAgICBpZiAoaWQgPT0gU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkRFVEFJTFNfSUQpCi0gICAgICAvLyB3YXMgdGhlIERldGFpbHMgYnV0dG9uIHByZXNzZWQ/Ci0gICAgICBzdXBlci5idXR0b25QcmVzc2VkKGlkKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0UmV0dXJuQ29kZShpZCk7Ci0gICAgICBjbG9zZSgpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHNldFJldHVybkNvZGUoaW50IGlkKQotICB7Ci0gICAgcmV0dXJuQ29kZV8gPSBpZDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0UmV0dXJuQ29kZSgpCi0gIHsKLSAgICByZXR1cm4gcmV0dXJuQ29kZV87Ci0gIH0KLSAgLyoKLSAgICogVGhpcyBpcyBvbmUgb2YgdGhlIGZldyBtZXRob2RzIHRoYXQgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlCi0gICAqIHN1YmNsYXNzZXMuIFRoZSBpbWFnZSBuYW1lcyBjYW4gYmUgZm91bmQgaW4gdGhlIERpYWxvZyBjbGFzcwotICAgKi8KLSAgcHJvdGVjdGVkIEltYWdlIGdldERpYWxvZ0ltYWdlKCkKLSAgewotICAgIC8vIGNyZWF0ZSBpbWFnZQotICAgIHN3aXRjaCAoc3RhdHVzLmdldFNldmVyaXR5KCkpCi0gICAgewotICAgICAgY2FzZSBJU3RhdHVzLklORk8gOgotICAgICAgICByZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtSW1hZ2UoU1dULklDT05fSU5GT1JNQVRJT04pOwotICAgICAgY2FzZSBJU3RhdHVzLldBUk5JTkcgOgotICAgICAgICByZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtSW1hZ2UoU1dULklDT05fV0FSTklORyk7Ci0gICAgICBkZWZhdWx0IDoKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX0VSUk9SKTsKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvUnVudGltZVN0cnVjdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvUnVudGltZVN0cnVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkwMjQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1J1bnRpbWVTdHJ1Y3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMjIxIDE0NjAyMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmNvbW1vbi5MYWJlbHNBbmRJZHM7Ci0KLXB1YmxpYyBjbGFzcyBSdW50aW1lU3RydWN0IHsKLQotCXByaXZhdGUgU3RyaW5nIHJ1bnRpbWVJRF87Ci0JcHJpdmF0ZSBTdHJpbmcgcnVudGltZUxhYmVsXzsKLQlwcml2YXRlIExhYmVsc0FuZElkcyBzY2VuYXJpb3NfOwotCQotCXB1YmxpYyBSdW50aW1lU3RydWN0KFN0cmluZyBydW50aW1lSUQpewotCQlydW50aW1lSURfID0gcnVudGltZUlEOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUlEKCl7Ci0JCXJldHVybiBydW50aW1lSURfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJ1bnRpbWVMYWJlbChTdHJpbmcgbGFiZWwpewotCQlydW50aW1lTGFiZWxfID0gbGFiZWw7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUxhYmVsKCl7Ci0JCXJldHVybiBydW50aW1lTGFiZWxfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTY2VuYXJpbyhTdHJpbmcgaWQsIFN0cmluZyBsYWJlbCl7Ci0JCWlmKHNjZW5hcmlvc18gPT0gbnVsbCkgc2NlbmFyaW9zXyA9IG5ldyBMYWJlbHNBbmRJZHMoKTsgCi0JCWlmKGlkID09IG51bGwgfHwgbGFiZWwgPT0gbnVsbCkgcmV0dXJuOwotCQlzY2VuYXJpb3NfLmFkZChpZCxsYWJlbCk7Ci0JfQotCQotCXB1YmxpYyBMYWJlbHNBbmRJZHMgZ2V0U2NlbmFyaW9MYWJlbHMoKXsKLQkJcmV0dXJuIHNjZW5hcmlvc187Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvU3RhdHVzRGlhbG9nQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9TdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU1Njc4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9TdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotLyoqCi0qIENvbnN0YW50cyBmb3Igc3RhdHVzIGRpYWxvZ3MKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXR1c0RpYWxvZ0NvbnN0YW50cyB7Ci0KLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiWWVzIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWUVTX0lEID0gMjsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiWWVzIHRvIGFsbCIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlFU19UT19BTExfSUQgPSA0OwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJDYW5jZWwiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU5DRUxfSUQgPSAxOwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJPSyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0lEID0gMDsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiRGV0YWlscyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVEFJTFNfSUQgPSAxMzsKLQotICAvKgotICAqIEJ1dHRvbiBsYWJlbCBmb3IgdGhlICJZZXMiIGJ1dHRvbgotICAqLwotIC8vIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFlFU19MQUJFTCA9IEVudmlyb25tZW50UGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVzc2FnZSgiJVNUQVRVU19ESUFMT0dfWUVTX0xBQkVMIik7Ci0gIC8qCi0gICogQnV0dG9uIGxhYmVsIGZvciB0aGUgIlllcyB0byBhbGwiIGJ1dHRvbgotICAqLwotIC8vIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFlFU19UT19BTExfTEFCRUwgPSBFbnZpcm9ubWVudFBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldE1lc3NhZ2UoIiVTVEFUVVNfRElBTE9HX1lFU19UT19BTExfTEFCRUwiKTsKLSAgLyoKLSAgKiBCdXR0b24gbGFiZWwgZm9yIHRoZSAiQ2FuY2VsIiBidXR0b24KLSAgKi8KLSAvLyBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQU5DRUxfTEFCRUwgPSBFbnZpcm9ubWVudFBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldE1lc3NhZ2UoIiVTVEFUVVNfRElBTE9HX0NBTkNFTF9MQUJFTCIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvV2FybmluZ0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvV2FybmluZ0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjU2OTVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1dhcm5pbmdEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotCi0vKioKLSAqIEEgZGlhbG9nIHRvIGRpc3BsYXkgb25lIG9yIG1vcmUgZXJyb3JzIHRvIHRoZSB1c2VyLCBhcyBjb250YWluZWQgaW4gYW4KLSAqIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0LiBJZiBhbiBlcnJvciBjb250YWlucyBhZGRpdGlvbmFsIGRldGFpbGVkCi0gKiBpbmZvcm1hdGlvbiB0aGVuIGEgRGV0YWlscyBidXR0b24gaXMgYXV0b21hdGljYWxseSBzdXBwbGllZCwgd2hpY2ggc2hvd3Mgb3IKLSAqIGhpZGVzIGFuIGVycm9yIGRldGFpbHMgdmlld2VyIHdoZW4gcHJlc3NlZCBieSB0aGUgdXNlci4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIFdhcm5pbmdEaWFsb2cgZXh0ZW5kcyBNZXNzYWdlRGlhbG9nCi17Ci0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGVycm9yIGRpYWxvZy4gTm90ZSB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIG5vIHZpc3VhbAotICAgKiByZXByZXNlbnRhdGlvbiAobm8gd2lkZ2V0cykgdW50aWwgaXQgaXMgdG9sZCB0byBvcGVuLgotICAgKiA8cD4KLSAgICogTm9ybWFsbHkgb25lIHNob3VsZCB1c2UgPGNvZGU+b3BlbkVycm9yPC9jb2RlPiB0byBjcmVhdGUgYW5kIG9wZW4gb25lIG9mCi0gICAqIHRoZXNlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bCBvbmx5IGlmIHRoZSBlcnJvciBvYmplY3QgYmVpbmcgZGlzcGxheWVkCi0gICAqIGNvbnRhaW5zIGNoaWxkIGl0ZW1zIDxpdD5hbmQ8L2l0PiB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgbWFzayB3aGljaCB3aWxsCi0gICAqIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIHRoZXNlIGNoaWxkcmVuLgotICAgKiA8L3A+Ci0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50U2hlbGwKLSAgICogICAgICAgICAgICB0aGUgc2hlbGwgdW5kZXIgd2hpY2ggdG8gY3JlYXRlIHRoaXMgZGlhbG9nCi0gICAqIEBwYXJhbSBkaWFsb2dUaXRsZQotICAgKiAgICAgICAgICAgIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGRlZmF1bHQgdGl0bGUgc2hvdWxkIGJlIHVzZWQKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogICAgICAgICAgICB0aGUgbWVzc2FnZSB0byBzaG93IGluIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGVycm9yJ3MgbWVzc2FnZSBzaG91bGQgYmUgc2hvd24gYXMgdGhlCi0gICAqICAgICAgICAgICAgcHJpbWFyeSBtZXNzYWdlCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICB0aGUgZXJyb3IgdG8gc2hvdyB0byB0aGUgdXNlcgotICAgKiBAcGFyYW0gZGlzcGxheU1hc2sKLSAgICogICAgICAgICAgICB0aGUgbWFzayB0byB1c2UgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIGNoaWxkIGl0ZW1zLCBhcyBwZXIKLSAgICogICAgICAgICAgICA8Y29kZT5TdGF0dXMubWF0Y2hlczwvY29kZT4KLSAgICovCi0gIHB1YmxpYyBXYXJuaW5nRGlhbG9nKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyBkaWFsb2dUaXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCwgZGlhbG9nVGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBUaGlzIHNob3VsZCBhbHNvIGJlIG92ZXJ3cml0dGVuIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgT0ssIENhbmNlbCBhbmQgRGV0YWlscyBidXR0b25zCi0gICAgY3JlYXRlQnV0dG9uKAotICAgICAgcGFyZW50LAotICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLk9LX0lELAotICAgICAgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwKLSAgICAgIHRydWUpOwotICAgIGNyZWF0ZUJ1dHRvbigKLSAgICAgIHBhcmVudCwKLSAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCwKLSAgICAgIGZhbHNlKTsKLSAgICBpZiAoc3RhdHVzLmlzTXVsdGlTdGF0dXMoKSkKLSAgICB7Ci0gICAgICBkZXRhaWxzQnV0dG9uID0KLSAgICAgICAgY3JlYXRlQnV0dG9uKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuREVUQUlMU19JRCwKLSAgICAgICAgICBJRGlhbG9nQ29uc3RhbnRzLlNIT1dfREVUQUlMU19MQUJFTCwKLSAgICAgICAgICBmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogVGhpcyBpcyBvbmUgb2YgdGhlIGZldyBtZXRob2RzIHRoYXQgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlCi0gICAqIHN1YmNsYXNzZXMuIFRoZSBpbWFnZSBuYW1lcyBjYW4gYmUgZm91bmQgaW4gdGhlIERpYWxvZyBjbGFzcwotICAgKi8KLSAgcHJvdGVjdGVkIEltYWdlIGdldERpYWxvZ0ltYWdlKCkKLSAgewotICAgIC8vIGNyZWF0ZSBpbWFnZQotICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9XQVJOSU5HKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvRWNsaXBzZVN0YXR1c0hhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9FY2xpcHNlU3RhdHVzSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWM3NjQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9FY2xpcHNlU3RhdHVzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwMiAgIDE2MjI4NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgU2VydmVyIHB1Ymxpc2ggY2FuY2VsIGJ1dHRvbiB1bmF2YWlsYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkVudmlyb25tZW50Q29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2cuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nLlN0YXR1c0RpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLQotCi0vKioKLSAqIFRoaXMgaXMgdGhlIEVjbGlwc2UgVUkgdmVyc2lvbiBvZiB0aGUgSVN0YXR1c0hhbmRsZXIKLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VTdGF0dXNIYW5kbGVyIGV4dGVuZHMgQmFzZVN0YXR1c0hhbmRsZXIKLXsKLSAgcHJpdmF0ZSBTaGVsbCAgIHNoZWxsICAgICAgID0gbnVsbDsKLSAgICAKLSAgcHVibGljIEVjbGlwc2VTdGF0dXNIYW5kbGVyKCkKLSAgeyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBFY2xpcHNlU3RhdHVzSGFuZGxlciggU2hlbGwgdGhlU2hlbGwgKQotICB7Ci0gICAgc2hlbGwgPSB0aGVTaGVsbDsgIAotICB9Ci0gICAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVudi5jb21tb24uSVN0YXR1c0hhbmRsZXIjcmVwb3J0KG9yZy5lY2xpcHNlLmVudi5jb21tb24uU3RhdHVzLCBvcmcuZWNsaXBzZS5lbnYuY29tbW9uLkNob2ljZVtdKQotICAgKi8KLSAgcHVibGljIENob2ljZSByZXBvcnQoIGZpbmFsIElTdGF0dXMgc3RhdHVzLCBmaW5hbCBDaG9pY2VbXSBjaG9pY2VzKSAKLSAgewotICAgIGZpbmFsIGludFtdIHJlc3VsdCA9IG5ldyBpbnRbMV07Ci0gICAgCi0gICAgY2hlY2tTdGF0dXMoIHN0YXR1cyApOwotICAgIAotICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotICAgICAgICByZXN1bHRbMF0gPQotICAgICAgICAgIE1lc3NhZ2VEaWFsb2cub3Blbk1lc3NhZ2UoIGdldFNoZWxsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuVElUTEVfV0FSTklORywgLy9UT0RPOiBTaG91bGQgYmUgaW5mZXJyZWQgZnJvbSBzdGF0dXMnIHNldmVyaXR5LgotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXMpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMoIHJ1bm5hYmxlICk7Ci0gICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKQotICAgICB7Ci0gICAgICBpZiAoY2hvaWNlc1tpXS5nZXRTaG9ydGN1dCgpID09IHJlc3VsdFswXSApCi0gICAgICAgIHJldHVybiBjaG9pY2VzW2ldOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVudi5jb21tb24uSVN0YXR1c0hhbmRsZXIjcmVwb3J0KG9yZy5lY2xpcHNlLmVudi5jb21tb24uU3RhdHVzKQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVwb3J0KElTdGF0dXMgc3RhdHVzKSB0aHJvd3MgU3RhdHVzRXhjZXB0aW9uCi0gIHsKLSAgICBib29sZWFuIHVzZXJPayA9IGZhbHNlOwotICAgIAotICAgIGNoZWNrU3RhdHVzKCBzdGF0dXMgKTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0YXR1cy5nZXRTZXZlcml0eSgpKQotICAgIHsKLSAgICAgIC8vIGFuIGVycm9yIGhhcyBiZWVuIHJlcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIHN0b3AgZXhlY3V0aW5nIHRoZSBjb21taW5nCi0gICAgICAvLyBjb21tYW5kcwotICAgICAgY2FzZSBTdGF0dXMuRVJST1IgOgotICAgICAgewotICAgICAgICB1c2VyT2sgPSByZXBvcnRFcnJvclN0YXR1cyhzdGF0dXMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgU3RhdHVzLldBUk5JTkcgOgotICAgICAgewotICAgICAgICB1c2VyT2sgPSByZXBvcnRXYXJuaW5nKHN0YXR1cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSAgICAgCi0gICAgICBjYXNlIFN0YXR1cy5JTkZPIDoKLSAgICAgIHsKLSAgICAgICAgdXNlck9rID0gdHJ1ZTsKLSAgICAgICAgcmVwb3J0SW5mbyhzdGF0dXMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoICF1c2VyT2sgKSB0aHJvdyBuZXcgU3RhdHVzRXhjZXB0aW9uKCBzdGF0dXMgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHJlcG9ydFdhcm5pbmcoIGZpbmFsIElTdGF0dXMgc3RhdHVzICkKLSAgewotICAgIGZpbmFsIGludCB1c2VyUmVzcG9uc2VbXSA9IG5ldyBpbnRbMV07Ci0gICAgCi0gICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICB7Ci0gICAgICAgIHVzZXJSZXNwb25zZVswXSA9Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuTWVzc2FnZSggZ2V0U2hlbGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5USVRMRV9XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIAotICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKCBydW5uYWJsZSApOwotICAgIAotICAgIHJldHVybiAodXNlclJlc3BvbnNlWzBdID09IFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5PS19JRCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVwb3J0RXJyb3JTdGF0dXMoZmluYWwgSVN0YXR1cyBzdGF0dXMpCi0gIHsKLQkvLyBubyBuZWVkIHRvIHJlcG9ydCBhbiBlbXB0eSBtZXNzYWdlIHdpdGggbm8gZXhjZXB0aW9uCi0JaWYgKCIiLmVxdWFscyhzdGF0dXMuZ2V0TWVzc2FnZSgpKSAmJiBzdGF0dXMuZ2V0RXhjZXB0aW9uKCkgPT0gbnVsbCkKLQkJcmV0dXJuIGZhbHNlOwotCSAgCi0gICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2VEaWFsb2cub3Blbk1lc3NhZ2UoIGdldFNoZWxsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzLlRJVExFX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMoIHJ1bm5hYmxlICk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5JU3RhdHVzSGFuZGxlciNyZXBvcnRFcnJvcihvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzKQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoSVN0YXR1cyBzdGF0dXMpCi0gIHsKLSAgICBjaGVja1N0YXR1cyggc3RhdHVzICk7Ci0gICAgcmVwb3J0RXJyb3JTdGF0dXMoIHN0YXR1cyApOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uSVN0YXR1c0hhbmRsZXIjcmVwb3J0SW5mbyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzKQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVwb3J0SW5mbyhmaW5hbCBJU3RhdHVzIHN0YXR1cykKLSAgewotICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5NZXNzYWdlKCBnZXRTaGVsbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5USVRMRV9JTkZPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMoIHJ1bm5hYmxlICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU2hlbGwgZ2V0U2hlbGwoKQotICB7Ci0gICAgaWYoIHNoZWxsICE9IG51bGwgKSByZXR1cm4gc2hlbGw7Ci0gICAgCi0gICAgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0gICAgCi0gICAgcmV0dXJuIGRpc3BsYXkgPT0gbnVsbCA/IG51bGwgOiBkaXNwbGF5LmdldEFjdGl2ZVNoZWxsKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9FbnZpcm9ubWVudFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvRW52aXJvbm1lbnRVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTFkZTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9FbnZpcm9ubWVudFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlRyYW5zaWVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBFbnZpcm9ubWVudFV0aWxzCi17ICAgICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gZW52IFRoaXMgc2hvdWxkIGJlIGFuIEVjbGlwc2VFbnZpcm9ubWVudC4KLSAgICogQHJldHVybiBSZXR1cm5zIGEgUmVzb3VyY2VDb250ZXh0LgotICAgKi8gCi0gIHB1YmxpYyBzdGF0aWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCggSUVudmlyb25tZW50IGVudiApCi0gIHsKLSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0gICAgCi0gICAgaWYoIGVudiBpbnN0YW5jZW9mIEVjbGlwc2VFbnZpcm9ubWVudCApCi0gICAgewotICAgICAgY29udGV4dCA9ICgoRWNsaXBzZUVudmlyb25tZW50KWVudikuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29udGV4dDsKLSAgfQotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvU1dURW52aXJvbm1lbnRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvU1dURW52aXJvbm1lbnRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MTMyYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL1NXVEVudmlyb25tZW50TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZQotICogYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTV1RFbnZpcm9ubWVudE1hbmFnZXIKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gSUVudmlyb25tZW50IGZvciB0aGUgRWNsaXBzZSBTV1QgR1VJLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBCYXNlRWNsaXBzZUVudmlyb25tZW50IGdldE5ld1NXVEVudmlyb25tZW50KCkKLSAgewotICAgIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgY29udGV4dCAgICAgICAgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgRWNsaXBzZVN0YXR1c0hhbmRsZXIgICAgICBoYW5kbGVyICAgICAgICA9IG5ldyBFY2xpcHNlU3RhdHVzSGFuZGxlcigpOwotICAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgZW52aXJvbm1lbnQgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCBjb250ZXh0LCBoYW5kbGVyICk7Ci0gICAgCi0gICAgcmV0dXJuIGVudmlyb25tZW50OyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcGx1Z2luL0VudlVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3BsdWdpbi9FbnZVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE1ZDYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcGx1Z2luL0VudlVJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnZVSVBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgRW52VUlQbHVnaW4gaW5zdGFuY2U7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEVudlVJUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlpbnN0YW5jZSA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRW52VUlQbHVnaW4gZ2V0SW5zdGFuY2UoKSB7Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JIHB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvciAoIFN0cmluZyBuYW1lICkKLQkgIHsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBVUkwgaW5zdGFsbFVSTCA9IGluc3RhbmNlLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7Ci0JICAgICAgVVJMIGltYWdlVVJMID0gbmV3IFVSTChpbnN0YWxsVVJMLG5hbWUpOwotCSAgICAgIHJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCSAgICB7Ci0JICAgICAgcmV0dXJuIG51bGw7Ci0JICAgIH0KLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nc1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3ByZWZlcmVuY2VzL0FjdGlvbkRpYWxvZ3NQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWU0YTc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nc1ByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyNiAgIDE1MTg2NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUG9wdXAgRGlhbG9nIFNlbGVjdGlvbiBwcmVmZXJlbmNlcyBkZWZhdWx0cyBpbmNvcnJlY3RseSB0byBoaWRlIGFsbAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4ZWN1dGFibGVFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnByZWZlcmVuY2VzLkFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJTWVzc2FnZXM7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHBvcHVwIGFjdGlvbnMgcHJlZmVyZW5jZSBwYWdlIGZvciBhIAotICogcGFydGljdWxhciBjYXRlZ29yeS4gIEZvciBleGFtcGxlOgotICoKLSAqIDxwcmU+Ci0gKiAgJmx0O2V4dGVuc2lvbgotICogICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiJmd0OwotICogICAgICZsdDtwYWdlCi0gKiAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfRElBTE9HUyIKLSAqICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gKiAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlcy5BY3Rpb25EaWFsb2dzUHJlZmVyZW5jZVBhZ2UiCi0gKiAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkiJmd0OwotICogICAgICZsdDsvcGFnZSZndDsKLSAqICogPC9wcmU+Ci0gKiBUaGlzIGVudHJ5IHNwZWNpZmllcyB0aGF0IGFsbCBwb3B1cCBhY3Rpb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKLSAqIG9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkgd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGhpcwotICogcHJlZmVyZW5jZSBwYWdlLgotICovCi1wdWJsaWMgY2xhc3MgQWN0aW9uRGlhbG9nc1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UsIExpc3RlbmVyLCBJRXhlY3V0YWJsZUV4dGVuc2lvbgotewotICAvKkNPTlRFWFRfSUQgUFBBRDAwMDEgZm9yIHRoZSBBY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQURfUEFHRSA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuUFBBRDAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBzaG93QWxsOwotICAvKkNPTlRFWFRfSUQgUFBBRDAwMDIgZm9yIHRoZSAgc2hvdyBhbGwgY2hlY2sgYm94IG9uIHRoZSBBY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQURfQlVUVE9OX1NIT1dfQUxMID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS5QUEFEMDAwMiI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIGhpZGVBbGw7Ci0gIC8qQ09OVEVYVF9JRCBQUEFEMDAwMyBmb3IgdGhlICBoaWRlIGFsbCBjaGVjayBib3ggb24gdGhlIEFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRF9CVVRUT05fSElERV9BTEwgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLlBQQUQwMDAzIjsKLQotICBwcml2YXRlIEhhc2h0YWJsZSBjaGVja0JveGVzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgY2F0ZWdvcnlJZF87Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsaXphdGlvbkRhdGEoIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgICAgICAgZGF0YSApCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGNhdGVnb3J5SWRfICAgPSBjb25maWcuZ2V0QXR0cmlidXRlKCAiaWQiICk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotICAgKiAgIEBwYXJhbSBwYXJlbnQgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkKLSAgewotICAgCi0gICAgY2hlY2tCb3hlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgYWRkT3B0aW9uYWxEaWFsb2dzQ2hlY2tCb3hlcyAoc3VwZXJwYXJlbnQpOwotCW5ldyBMYWJlbChzdXBlcnBhcmVudCwgU1dULkhPUklaT05UQUwpOwotCQotICAgIENvbXBvc2l0ZSAgIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHN1cGVycGFyZW50LCBTV1QuTk9ORSApOwkKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChFbnZpcm9ubWVudFVJTWVzc2FnZXMuVE9PTFRJUF9QUEFEX1BBR0UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCBJTkZPUE9QX1BQQURfUEFHRSApOwotCQotICAgIHNob3dBbGwgPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5PTkUpOwotICAgIHNob3dBbGwuc2V0VGV4dChFbnZpcm9ubWVudFVJTWVzc2FnZXMuQlVUVE9OX1NIT1dfQUxMX0RJQUxPR1MpOwotICAgIHNob3dBbGwuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgc2hvd0FsbC5zZXRUb29sVGlwVGV4dChFbnZpcm9ubWVudFVJTWVzc2FnZXMuVE9PTFRJUF9QUEFEX0JVVFRPTl9TSE9XX0FMTCk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChzaG93QWxsLCBJTkZPUE9QX1BQQURfQlVUVE9OX1NIT1dfQUxMICk7Ci0gICAKLSAgICBoaWRlQWxsID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBoaWRlQWxsLnNldFRleHQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLkJVVFRPTl9ISURFX0FMTF9ESUFMT0dTKTsKLSAgICBoaWRlQWxsLmFkZExpc3RlbmVyICggU1dULlNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgaGlkZUFsbC5zZXRUb29sVGlwVGV4dChFbnZpcm9ubWVudFVJTWVzc2FnZXMuVE9PTFRJUF9QUEFEX0JVVFRPTl9ISURFX0FMTCk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChoaWRlQWxsLCBJTkZPUE9QX1BQQURfQlVUVE9OX0hJREVfQUxMICk7Ci0KLSAgICBpbml0aWFsaXplVmFsdWVzKCk7Ci0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHN1cGVycGFyZW50KTsKLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0KLSBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudCAoRXZlbnQgZXZlbnQpIAotIHsKLSAgICBpZiAoc2hvd0FsbCA9PSBldmVudC53aWRnZXQpCi0JCWhhbmRsZVNob3dBbGxFdmVudCgpOwotICAgIAotICAgIGVsc2UgaWYgKCBoaWRlQWxsID09IGV2ZW50LndpZGdldCkKLSAgICAJaGFuZGxlSGlkZUFsbEV2ZW50KCk7Ci0gfQotCi0gcHJpdmF0ZSB2b2lkIGhhbmRsZVNob3dBbGxFdmVudCAoKQotIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gY2hlY2tCb3hlc18uZWxlbWVudHMoKTsKLSAJZm9yIChpbnQgaT0wOyBlLmhhc01vcmVFbGVtZW50cygpOyBpKyspCi0gICAgCXsKLSAgICAJCUJ1dHRvbiBkaWFsb2cgPSAoQnV0dG9uKSBlLm5leHRFbGVtZW50KCk7Ci0gICAgCQlkaWFsb2cuc2V0U2VsZWN0aW9uKCBmYWxzZSApOwotICAgIAl9ICAgICAgICAgICAgICAgICAgICAgIAotIH0KLQotIHByaXZhdGUgdm9pZCBoYW5kbGVIaWRlQWxsRXZlbnQgKCkKLSB7Ci0gCUVudW1lcmF0aW9uIGUgPSBjaGVja0JveGVzXy5lbGVtZW50cygpOwotIAlmb3IgKGludCBpPTA7IGUuaGFzTW9yZUVsZW1lbnRzKCk7IGkrKykKLSAgICAJewotICAgIAkJQnV0dG9uIGRpYWxvZyA9IChCdXR0b24pIGUubmV4dEVsZW1lbnQoKTsKLSAgICAJCWRpYWxvZy5zZXRTZWxlY3Rpb24oIHRydWUgKTsKLSAgICAJfQotIH0KLSAKLSBwcml2YXRlIHZvaWQgYWRkT3B0aW9uYWxEaWFsb2dzQ2hlY2tCb3hlcyAoIENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgY29udGV4dCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10gZGlhbG9ncyA9IGNvbnRleHQuZ2V0RGlhbG9ncygpOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlhbG9ncy5sZW5ndGg7IGkrKykgCi0gICAgewotICAgICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nICAgPSBkaWFsb2dzW2ldOwotICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBkaWFsb2cuZ2V0Q2F0ZWdvcnkoKTsKLSAgICAgIAotICAgICAgaWYoIGRpYWxvZy5nZXRTaG93Q2hlY2tib3goKSAmJiAgY2F0ZWdvcnkgIT0gbnVsbCAmJiBjYXRlZ29yeS5lcXVhbHMoIGNhdGVnb3J5SWRfKSApCi0gICAgICB7Ci0gICAgCUJ1dHRvbiBjaGVja0JveCA9IGNyZWF0ZUNoZWNrQm94KHBhcmVudCwgZGlhbG9nLmdldE5hbWUoKSk7Ci0gICAgCWNoZWNrQm94LnNldFRvb2xUaXBUZXh0KCBkaWFsb2cuZ2V0VG9vbHRpcCgpICk7Ci0gICAgCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY2hlY2tCb3gsIGRpYWxvZy5nZXRJbmZvcG9wKCkgKTsKLSAgICAJY2hlY2tCb3hlc18ucHV0KGRpYWxvZy5nZXRJZCgpLCBjaGVja0JveCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIEJ1dHRvbiBjcmVhdGVDaGVja0JveCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIHRleHQgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwgU1dULkNIRUNLICk7Ci0gICAgYnV0dG9uLnNldFRleHQoIHRleHQgKTsKLSAgICByZXR1cm4gYnV0dG9uOwotICB9Ci0KLSAgLyoqCi0gICAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotICB7Ci0gICAgc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0gICAgaW5pdGlhbGl6ZURlZmF1bHRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLSAgewotICAgIHN0b3JlVmFsdWVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotICB7Ci0gICAgcGVyZm9ybU9rKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICB7IH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB1c2luZyBkZWZhdWx0IHZhbHVlcwotICAgKiBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgPSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuZ2V0SW5zdGFuY2UoKTsgIAotICAgIEVudW1lcmF0aW9uIGUgPSBjaGVja0JveGVzXy5rZXlzKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBlLmhhc01vcmVFbGVtZW50cygpOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIGlkID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOyAgICAgICAgICAgIAkKLSAgICAgIEJ1dHRvbiBkaWFsb2cgPSAoQnV0dG9uKSBjaGVja0JveGVzXy5nZXQoaWQpOwotICAgICAgZGlhbG9nLnNldFNlbGVjdGlvbihjb250ZXh0LmdldERlZmF1bHRCb29sZWFuKGlkKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgZnJvbSB0aGUgcHJlZmVyZW5jZXMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0gIHsKLSAgICBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgY29udGV4dCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBjaGVja0JveGVzXy5rZXlzKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBlLmhhc01vcmVFbGVtZW50cygpOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIGlkID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOwotICAgICAgQnV0dG9uIGJ1dHRvbiA9IChCdXR0b24pIGNoZWNrQm94ZXNfLmdldChpZCk7Ci0gICAgICBidXR0b24uc2V0U2VsZWN0aW9uKGNvbnRleHQuaXNBY3Rpb25EaWFsb2dFbmFibGVkKGlkKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBjb250ZXh0ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0KLSAgICBFbnVtZXJhdGlvbiBlID0gY2hlY2tCb3hlc18ua2V5cygpOwotICAgIGZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBpZCA9IChTdHJpbmcpIGUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGNvbnRleHQuc2V0QWN0aW9uRGlhbG9nRW5hYmxlZChpZCwgKChCdXR0b24pY2hlY2tCb3hlc18uZ2V0KGlkKSkuZ2V0U2VsZWN0aW9uKCkpOwotICAgIH0KLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3JlZ2lzdHJ5L1dpZGdldFJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3JlZ2lzdHJ5L1dpZGdldFJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYjViMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9yZWdpc3RyeS9XaWRnZXRSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIFdpZGdldFJlZ2lzdHJ5IAotewotICBwcml2YXRlIHN0YXRpYyBXaWRnZXRSZWdpc3RyeSByZWdpc3RyeV87Ci0gIAotICBwcml2YXRlIEhhc2h0YWJsZSBlbnRyaWVzXzsKLSAgCi0gIHByaXZhdGUgV2lkZ2V0UmVnaXN0cnkoKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgV2lkZ2V0UmVnaXN0cnkgaW5zdGFuY2UoKQotICB7Ci0JaWYgKHJlZ2lzdHJ5XyA9PSBudWxsKQotCXsKLQkJcmVnaXN0cnlfID0gbmV3IFdpZGdldFJlZ2lzdHJ5KCk7Ci0JCXJlZ2lzdHJ5Xy5sb2FkKCk7Ci0JfQotCi0JcmV0dXJuIHJlZ2lzdHJ5XzsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKQotICB7Ci0gICAgcmVnaXN0cnlfID0gbnVsbDsgIAotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBpZCB0aGUgbWV0aG9kSWQgdGhhdCBtYXkgaGF2ZSBXaWRnZXRDb250cmlidXRvciBhc3NvY2lhdGVkIHdpdGggaXQuCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBpZiBvbmUgd2FzIGRlZmluZWQgaW4gdGhlIHJlZ2lzdHJ5LgotICAgKiBPdGhlcndpc2UgbnVsbCBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0RmFjdG9yeSggU3RyaW5nIGlkICkKLSAgewotCUlOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQlFbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgICA9IChFbnRyeSllbnRyaWVzXy5nZXQoIGlkICk7Ci0JCi0JaWYoIGVudHJ5ICE9IG51bGwgKQotCXsKLQkgIHRyeQotCSAgewotCQlpZiggZW50cnkuZmFjdG9yeV8gPT0gbnVsbCApCi0JCXsKLQkJICBlbnRyeS5mYWN0b3J5XyA9IChJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkpZW50cnkuZWxlbWVudF8uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbiggImNsYXNzIiApOwotCQl9Ci0JCQotCQlmYWN0b3J5ID0gZW50cnkuZmFjdG9yeV87Ci0JICB9Ci0JICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotCSAgewotCSAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9Ci0JICBjYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JICB7Ci0JCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgIH0KLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkKCkKLSAgewotCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRSZWdpc3RyeSIpOwotCQotCWVudHJpZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotCQotCWZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50cy5sZW5ndGg7IGluZGV4KysgKQotCXsKLQkgIC8vIElmIHRoaXMgaXMgbm90IGFuIGVsZW1lbnQgdGhhdCBrbm93IGFib3V0IHdlIHdpbGwgc2tpcCBpdC4KLQkgIGlmKCAhZWxlbWVudHNbaW5kZXhdLmdldE5hbWUoKS5lcXVhbHMoIndpZGdldEZhY3RvcnkiKSApIGNvbnRpbnVlOwotCSAgCi0JICBFbnRyeSAgICAgICAgICAgICAgICAgZW50cnkgICAgPSBuZXcgRW50cnkoKTsKLQkgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ICA9IGVsZW1lbnRzW2luZGV4XTsKLQkgIFN0cmluZyAgICAgICAgICAgICAgICBpZCAgICAgICA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCAiaWQiICk7Ci0JICBTdHJpbmcgICAgICAgICAgICAgICAgbWV0aG9kSWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSggImluc2VydEJlZm9yZUNvbW1hbmRJZCIgKTsKLQkgIAotCSAgZW50cnkuZWxlbWVudF8gPSBlbGVtZW50OwotCSAgZW50cnkuaWRfICAgICAgPSBpZDsKLQkgIAotCSAgZW50cmllc18ucHV0KCBtZXRob2RJZCwgZW50cnkgKTsKLQl9Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgRW50cnkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICBpZF87Ci0JSUNvbmZpZ3VyYXRpb25FbGVtZW50ICAgICAgICAgIGVsZW1lbnRfOwotCUlOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0Fic3RyYWN0U2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5NGVjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIFNpbXBsZURpYWxvZyB7Ci0JCi0JcHVibGljIEFic3RyYWN0U2VsZWN0aW9uRGlhbG9nKCBTaGVsbCBzaGVsbCwgUGFnZUluZm8gcGFnZUluZm8pCi0JewotCQlzdXBlcihzaGVsbCwgcGFnZUluZm8pOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNhbGxTZXR0ZXJzKCkgewotCQkvLyBleHRlbmRlcnMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0KLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXREaXNwbGF5YWJsZVNlbGVjdGlvblN0cmluZygpCi0JewotCQlyZXR1cm4gIiI7Ci0JfQotCQotCXB1YmxpYyBhYnN0cmFjdCBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NhbkZpbmlzaFJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ2FuRmluaXNoUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2NjQwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ2FuRmluaXNoUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci0KLS8qKgotICogVGhpcyBpcyBhbiBpbnRlcmZhY2UgZm9yIGFuIGFic3RyYWN0IGNhbiBmaW5pc2ggcmVnaXN0cnkuCi0gKiBUaGlzIHJlZ2lzdHJ5IGlzIHVzdWFsbHkgYXNzb2NpYXRlIHdpdGggYW4gRWNsaXBzZSB3aXphcmQuICBUaGlzCi0gKiByZWdpc3RyeSBhbGxvdyBjb25kaXRpb24gb2JqZWN0IHRvIGJlIGFkZGVkIHRvIGl0IGluIG9yZGVyIHRvCi0gKiBkZXRlcm1pbmUgaWYgdGhlIHdpemFyZCBjYW4gZmluaXNoIG9yIG5vdC4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ2FuRmluaXNoUmVnaXN0cnkKLXsKLSAgLyoqCi0gICAqIEFkZCBhIGNvbmRpdGlvbiBvYmplY3QgdG8gdGhlIHJlZ2lzdHJ5LgotICAgKiBAcGFyYW0gY29uZGl0aW9uIHRoZSBjb25kaXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25kaXRpb24oIENvbmRpdGlvbiBjb25kaXRpb24gKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9Db21tYW5kV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxY2ZjMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3Rvcnk7Ci0KLQotcHVibGljIGludGVyZmFjZSBDb21tYW5kV2lkZ2V0QmluZGluZyBleHRlbmRzIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGV4dGVuc2lvbnMgdG8gcmVnaXN0ZXIgdGhlaXIgd2lkZ2V0cyB3aXRoCi0gICAqIENvbW1hbmRGcmFnbWVudHMKLSAgICogCi0gICAqIEBwYXJhbSB3aWRnZXRSZWdpc3RyeQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyggV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkgKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGV4dGVuaW9ucyB0byByZWdpc3RlciB0aGUgZGF0YSBtYXBwaW5ncwotICAgKiB0aGF0IHRoZWlyIHdpZGdldHMgdXNlLgotICAgKiAKLSAgICogQHBhcmFtIGRhdGFSZWdpc3RyeQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5ICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSBleHRlbnNpb25zIHRvIHJlZ2lzdGVyIGNvbmRpdGlvbiBvYmplY3RzCi0gICAqIHRoYXQgY29udHJvbCBpZiB0aGUgd2l6YXJkIGNhbiBmaW5pc2ggb3Igbm90LgotICAgKiAKLSAgICogQHBhcmFtIGNhbkZpbmlzaFJlZ2lzdHJ5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaCggQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9Db21tYW5kV2lkZ2V0QmluZGluZ0xpc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9Db21tYW5kV2lkZ2V0QmluZGluZ0xpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxOTgwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ29tbWFuZFdpZGdldEJpbmRpbmdMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBDb21tYW5kV2lkZ2V0QmluZGluZ0xpc3QgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwcml2YXRlIFZlY3RvciAgICAgICAgICAgICAgICAgYmluZGluZ3NfOwotICBwcml2YXRlIFZlY3RvciAgICAgICAgICAgICAgICAgZnJhZ21lbnRzXzsKLSAgcHJpdmF0ZSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGZhY3RvcnlfOwotICAKLSAgLyoqCi0gICAqIFRoaXMgQ29tbWFuZFdpZGdldEJpbmRpbmcgY29tYmluZXMgYSBsaXN0IG9mIENvbW1hbmRXaWRnZXRCaW5kaW5ncy4KLSAgICogVGhlcmUgc2hvdWxkIGJlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGluIGJvdGggdGhlIGJpbmRpbmdzCi0gICAqIHBhcmFtZXRlciBhbmQgdGhlIGZyYWdtZW50cyBwYXJhbWV0ZXIuICBFbnRyaWVzIGluIGVpdGhlciBvZiB0aGUKLSAgICogYmluZGluZ3MgZm9yIGZyYWdtZW50cyB2ZWN0b3JzIGFyZSBhbGxvd2VkIHRvIGJlIG51bGwuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ3MgICB0aGUgYmluZGluZ3MgdG8gY29tYmluZS4KLSAgICogQHBhcmFtIGZyYWdtZW50cyAgVGhlc2UgZnJhZ21lbnRzIHdpbGwgYmUgaW50ZXJzcGVyc2VkIHdpdGggdGhlCi0gICAqICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBiaW5kaW5nLiAgVGhlIGZpcnN0Ci0gICAqICAgICAgICAgICAgICAgICAgIGZyYWdtZW50IHdpbGwgYmUgcHV0IGJlZm9yZSB0aGUgZnJhZ21lbnQgZnJvbSB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgZmlyc3QgYmluZGluZy4gIEZvbGxvd2luZyB0aGlzIHdpbGwgYmUgdGhlIHNlY29uZAotICAgKiAgICAgICAgICAgICAgICAgICBmcmFnbWVudCBmcm9tIHRoZSBmcmFnbWVudHMgdmVjdG9yIGFuZCB0aGVuIHRoZQotICAgKiAgICAgICAgICAgICAgICAgICBzZWNvbmQgZnJhZ21lbnQgZnJvbSB0aGUgYmluZGluZ3MgdmVjdG9yLCBldGMuCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZFdpZGdldEJpbmRpbmdMaXN0KCBWZWN0b3IgYmluZGluZ3MsIFZlY3RvciBmcmFnbWVudHMgKQotICB7Ci0gICAgYmluZGluZ3NfICA9IGJpbmRpbmdzOyAKLSAgICBmcmFnbWVudHNfID0gZnJhZ21lbnRzOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkgCi0gIHsKLSAgICBpbnQgbGVuZ3RoID0gYmluZGluZ3NfLnNpemUoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBDb21tYW5kV2lkZ2V0QmluZGluZyBiaW5kaW5nID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKWJpbmRpbmdzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICAKLSAgICAgIGlmKCBiaW5kaW5nICE9IG51bGwgKSBiaW5kaW5nLnJlZ2lzdGVyQ2FuRmluaXNoKCBjYW5GaW5pc2hSZWdpc3RyeSApOwotICAgIH0KLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLSAgewotICAgIGludCBsZW5ndGggPSBiaW5kaW5nc18uc2l6ZSgpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpYmluZGluZ3NfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgIGlmKCBiaW5kaW5nICE9IG51bGwgKSBiaW5kaW5nLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhUmVnaXN0cnkgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgCi0gIHsKLSAgICBpbnQgbGVuZ3RoID0gYmluZGluZ3NfLnNpemUoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBDb21tYW5kV2lkZ2V0QmluZGluZyBiaW5kaW5nID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKWJpbmRpbmdzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICBpZiggYmluZGluZyAhPSBudWxsICkgYmluZGluZy5yZWdpc3RlcldpZGdldE1hcHBpbmdzKCB3aWRnZXRSZWdpc3RyeSApOwotICAgIH0KLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5I2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKSAKLSAgewotICAgIGlmKCBmYWN0b3J5XyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmYWN0b3J5XyA9IG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTZXF1ZW5jZUZyYWdtZW50IGZyYWdtZW50TGlzdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgICAgICAgICBpbnQgICAgICAgICAgICAgIGxlbmd0aCAgICAgICA9IGJpbmRpbmdzXy5zaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgPSAoQ29tbWFuZEZyYWdtZW50KWZyYWdtZW50c18uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgaWYoIGZyYWdtZW50ICE9IG51bGwgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRMaXN0LmFkZCggZnJhZ21lbnQgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZyA9IChDb21tYW5kV2lkZ2V0QmluZGluZyliaW5kaW5nc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgaWYoIGJpbmRpbmcgIT0gbnVsbCApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudExpc3QuYWRkKCBiaW5kaW5nLmNyZWF0ZSgpLmNyZWF0ZSgpICk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50TGlzdDsKLSAgICAgICAgICB9Ci0gICAgICAgIH07IAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFjdG9yeV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DdXJyZW50UGFnZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DdXJyZW50UGFnZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4NTVkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ3VycmVudFBhZ2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiBUaGlzIENvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IHBhZ2UuCi0gKiBVc2Ugb2YgdGhpcyBjbGFzcyBpcyBub3QgcmVjb21tZW5kZWQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQ3VycmVudFBhZ2VDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBXaXphcmRQYWdlTWFuYWdlciBwYWdlTWFuYWdlcl87Ci0gIAotICBwdWJsaWMgQ3VycmVudFBhZ2VDb21tYW5kKCBXaXphcmRQYWdlTWFuYWdlciBwYWdlTWFuYWdlciApCi0gIHsKLSAgICBwYWdlTWFuYWdlcl8gPSBwYWdlTWFuYWdlcjsKLSAgfQotICAKLSAgcHVibGljIElXaXphcmRQYWdlIGdldEN1cnJlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBwYWdlTWFuYWdlcl8uZ2V0Q3VycmVudFBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRGF0YU9iamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EYXRhT2JqZWN0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDUwYWQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EYXRhT2JqZWN0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotICogVGhpcyBDb21tYW5kIGNhbiBiZSB1c2UgdG8gZ2V0IHRoZSByZXN1bHRpbmcgZGF0YSBvYmplY3QgZm9yCi0gKiB0aGlzIHdpemFyZC4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEYXRhT2JqZWN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgT2JqZWN0IGRhdGFPYmplY3RfOwotICAKLSAgcHVibGljIHZvaWQgc2V0RGF0YU9iamVjdCggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBkYXRhT2JqZWN0XyA9IG9iamVjdDsKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBnZXREYXRhT2JqZWN0KCkKLSAgewotICAgIHJldHVybiBkYXRhT2JqZWN0XzsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRGlhbG9nRGF0YUV2ZW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0RpYWxvZ0RhdGFFdmVudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJmZDE5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRGlhbG9nRGF0YUV2ZW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLS8qKgotICogRHluYW1pYyB3aXphcmQgaW1wbGVtZW50YXRpb25zIHRoYXQgd2FudCB0byBjcmVhdGUgZGlmZmVyZW50Ci0gKiBraW5kcyBvZiB3aXphcmQgcGFnZXMgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuCi0gKiBUaGUgV2l6YXJkUGFnZUZhY3RvcnkgcmV0dXJucyBhIGNsYXNzIG9mIHRoaXMgdHlwZS4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRGlhbG9nRGF0YUV2ZW50cwotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgV2lkZ2V0RGF0YUV2ZW50cyBvYmplY3QgY3JlYXRlZCBieSB0aGUgYWRkQ29udHJvbHMKLSAgICogbWV0aG9kIG9mIGEgV2lkZ2V0Q29udHJpYnV0b3IuCi0gICAqLwotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBnZXREYXRhRXZlbnRzKCk7Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGVzIHRoYXQgdGhpcyB3aXphcmQgcGFnZSBpcyBjb21wbGV0ZS4gCi0gICAqCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVBhZ2VUb1N0YXR1cygpOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRHluYW1pY1dpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0R5bmFtaWNXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhN2EyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRHluYW1pY1dpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMyAgIDEyOTIzMiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDgyMiAgIDE1NDc1MCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUyOSAgIDE4Nzc4MCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4ZWN1dGFibGVFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5yZWdpc3RyeS5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGFkZCBkeW5hbWljIHdpemFyZHMgaW50byBFY2xpcHNlLiAgV2hlbiBhZGRpbmcKLSAqIGEgZHluYW1pYyB3aXphcmQgaW50byBlY2xpcHNlIHR3byBlbnRyaWVzIG5lZWQgdG8gYmUgbWFkZSBpbiB0aGUgcGx1Z2luLnhtbAotICogZmlsZS4gIFRoaXMgZmlyc3QgZW50cnkgdGVsbHMgRWNsaXBzZSB0aGF0IGEgbmV3IHdpemFyZCBzaG91bGQgYmUgYWRkZWQKLSAqIGFuZCBpdCByZWZlcmVuY2VzIHRoaXMgY2xhc3MuICBUaGUgc2Vjb25kIGVudHJ5IHNwZWNpZmllcyBkZXRhaWxlZCBpbmZvcm1hdGlvbgotICogdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgd2l6YXJkIHRvIGJlIGFkZGVkLiAgVGhlc2UgdHdvIHBsdWdpbi54bWwgZW50cmllcwotICogYXJlIGxpbmtlZCB0b2dldGhlciB2aWEgdGhlaXIgaWQgYXR0cmlidXRlcy4gIEZvciBleGFtcGxlIGhlcmUgaXMgYW4KLSAqIGVudHJ5IHRoYXQgcmVnaXN0ZXJzIGEgbmV3IHdpemFyZCB3aXRoIGVjbGlwc2UuICBOb3RlIHRoZSBjbGFzcyBhdHRyaWJ1dGUKLSAqIHJlZmVyZW5jZXMgdGhpcyBjbGFzcy4KLSAqIDxwcmU+Ci0gKiAgICZsdDtleHRlbnNpb24KLSAqICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyImZ3Q7Ci0gKiAgICAgJmx0O3dpemFyZAotICogICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX0NMSUVOVCIKLSAqICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N0b29sMTYvbmV3Y2xpZW50X3dlYnNlcnZfd2l6LmdpZiIKLSAqICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAqICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZCIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAgICAmbHQ7ZGVzY3JpcHRpb24mZ3Q7Ci0gKiAgICAgICAgICAgJVBMVUdJTl9ORVdfV0laQVJEX0RFU0NfV1NfQ0xJRU5UCi0gKiAgICAgICAgJmx0Oy9kZXNjcmlwdGlvbiZndDsKLSAqICAgICAgICAmbHQ7c2VsZWN0aW9uCi0gKiAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSImZ3Q7Ci0gKiAgICAgICAgJmx0Oy9zZWxlY3Rpb24mZ3Q7Ci0gKiAgICAgJmx0Oy93aXphcmQmZ3Q7Ci0gKiAgICZsdDsvZXh0ZW5zaW9uJmd0OwotICoKLSAqIDwvcHJlPgotICogSGVyZSBpcyB0aGUgZHluYW1pY1dpemFyZCBlbnRyeSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdpemFyZC4gIFRoaXMgaWQgYXR0cmlidXRlcwotICogbGluayB0aGVzZSB0d28gZW50cmllcyB0b2dldGhlci4gIFRoZSBjbGFzcyBhdHRyaWJ1dGUgbXVzdCBzcGVjaWZ5IGEgY2xhc3MgdGhhdAotICogaW1wbGVtZW50cyB0aGUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcgaW50ZXJmYWNlLiAgVGhpcwotICogaW50ZXJmYWNlIHNwZWNpZmllcyB3aGF0IHRoZSBVSSBzaG91bGQgbG9vayBsaWtlIGFuZCB0aGUgY29tbWFuZHMgdGhlIHNob3VsZAotICogYmUgZXhlY3V0ZWQgaW4gdGhlIHdpemFyZC4KLSAqIAotICogPHByZT4KLSAqICAgJmx0O2V4dGVuc2lvbgotICogICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCImZ3Q7Ci0gKiAgICAgJmx0O2R5bmFtaWNXaXphcmQKLSAqICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc2NsaWVudF93aXouZ2lmIgotICogICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkNsaWVudFdpZGdldEJpbmRpbmciCi0gKiAgICAgICAgICAgdGl0bGU9IiVXSVpBUkRfVElUTEVfV1NDIgotICogICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiJmd0OwotICogICAgICZsdDsvZHluYW1pY1dpemFyZCZndDsKLSAqICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0gKiA8L3ByZT4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEeW5hbWljV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCwgSUV4ZWN1dGFibGVFeHRlbnNpb24KLXsKLSAgcHJpdmF0ZSAgIFN0cmluZyAgICAgICAgICAgICAgICAgIGljb25CYW5uZXJOYW1lXzsKLSAgcHJpdmF0ZSAgIEJ1bmRsZSAgICAgICAgICAgICAgICAgIGJ1bmRsZV87Ci0gIHByaXZhdGUgICBTaW1wbGVDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeV87IAotICBwcml2YXRlICAgU3RyaW5nICAgICAgICAgICAgICAgICAgd2l6YXJkVGl0bGVfOwotICBwcml2YXRlICAgRGF0YU9iamVjdENvbW1hbmQgICAgICAgZGF0YU9iamVjdENvbW1hbmRfID0gbnVsbDsKLSAgcHJpdmF0ZSAgIFdpemFyZFBhZ2VNYW5hZ2VyICAgICAgIHBhZ2VNYW5hZ2VyXzsKLSAgCi0gIHByb3RlY3RlZCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICB3aXphcmRFbGVtZW50XzsKLSAgcHJvdGVjdGVkIElDb25maWd1cmF0aW9uRWxlbWVudCAgIG9yaWdpbmFsRWxlbWVudF87Ci0gIHByb3RlY3RlZCBDb21tYW5kV2lkZ2V0QmluZGluZyAgICBjb21tYW5kV2lkZ2V0QmluZGluZ187Ci0gIAotICBwdWJsaWMgRHluYW1pY1dpemFyZCgpCi0gIHsKLQlzZXROZWVkc1Byb2dyZXNzTW9uaXRvcih0cnVlKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBEeW5hbWljIHdpemFyZCBpcyBjcmVhdGVkIGJ5IGVjbGlwc2UuCi0gICAqIFdlIG5lZWQgdG8gZmluZCBhIGR5bmFtaWNXaXphcmQgZXh0ZW5zaW9uIHBvaW50IHRoYXQgbWF0Y2hlcyB0aGUgaWQKLSAgICogZm9yIHRoaXMgd2l6YXJkLiAgT25jZSB0aGUgZXh0ZW5zaW9uIHBvaW50IGlzIGZvdW5kIGl0IHdpbGwgY29udGFpbgotICAgKiBhIHJlZmVyZW5jZSB0byBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzIHdoaWNoIGRlZmluZXMgdGhlIHdpZGdldHMgCi0gICAqIGFuZCBjb21tYW5kcyBmb3IgdGhpcyB3aXphcmQuCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXhlY3V0YWJsZUV4dGVuc2lvbiNzZXRJbml0aWFsaXphdGlvbkRhdGEob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudCwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxpemF0aW9uRGF0YSggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgICAgICBkYXRhICkKLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHdpemFyZElkICAgPSBjb25maWcuZ2V0QXR0cmlidXRlKCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBzZXRJbml0aWFsRGF0YSggd2l6YXJkSWQgKTsKLSAgICBvcmlnaW5hbEVsZW1lbnRfID0gY29uZmlnOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBEeW5hbWljIFdpemFyZCBpcyBiZWluZwotICAgKiBsYXVuY2hlZCB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNlIG90aGVyIHRoYW4gdGhlIEVjbGlwc2UgTmV3IFdpemFyZAotICAgKiBtZWNoYW5pc20uCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZyAgICAgICAgdGhlIGNvbW1hbmQgd2lkZ2V0IGJpbmRpbmcgZm9yIHRoaXMgd2l6YXJkLgotICAgKiBAcGFyYW0gZGVzY3JpcHRvciAgICAgdGhlIHBsdWdpbiBkZXNjcmlwdG9yIHdoZXJlIHRoZSBpY29uIGJhbm5lciBpcwotICAgKiAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZC4KLSAgICogQHBhcmFtIGljb25CYW5uZXJQYXRoIHRoZSBpY29uIGJhbm5lciBwYXRoIGZvciB0aGlzIHdpemFyZC4gIFRoZSBwYXRoCi0gICAqICAgICAgICAgICAgICAgICAgICAgICBpcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIHNwZWNpZmllZCBieSB0aGUgCi0gICAqICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yIHBhcmFtZXRlci4KLSAgICogQHBhcmFtIHdpemFyZFRpdGxlICAgIHRoZSB3aXphcmQgdGl0bGUKLSAgICogCi0gICAqIEBkZXByZWNhdGVkIFVzZSBlaXRoZXIgc2V0SW5pdGlhbERhdGEod2l6YXJkSWQpIG9yCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5pdGlhbERhdGEod2l6YXJkSWQsIGJ1bmRsZSwgaWNvbkJhbm5lclBhdGgsIHdpemFyZFRpdGxlICkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxEYXRhKCBDb21tYW5kV2lkZ2V0QmluZGluZyBiaW5kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVuZGxlICAgICAgICAgICAgICAgYnVuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgaWNvbkJhbm5lclBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICB3aXphcmRUaXRsZSApCi0gIHsKLSAgICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSBiaW5kaW5nOwotICAgIGJ1bmRsZV8gICAgICAgICAgICAgICA9IGJ1bmRsZTsKLSAgICBpY29uQmFubmVyTmFtZV8gICAgICAgPSBpY29uQmFubmVyUGF0aDsKLSAgICB3aXphcmRUaXRsZV8gICAgICAgICAgPSB3aXphcmRUaXRsZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGluaXRpYWwgZGF0YSBiYXNlZCBvbiB0aGUgZHluYW1pYyB3aXphcmQgaWQuCi0gICAqIAotICAgKiBAcGFyYW0gd2l6YXJkSWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxEYXRhKCBTdHJpbmcgd2l6YXJkSWQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgc2V0SW5pdGlhbERhdGEod2l6YXJkSWQsIG51bGwsIG51bGwsIG51bGwgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGluaXRpYWwgZGF0YSBiYXNlZCBvbiB0aGUgZHluYW1pYyB3aXphcmQgaWQuCi0gICAqIAotICAgKiBAcGFyYW0gd2l6YXJkSWQgdGhlIElEIG9mIHRoZSB3aXphcmQuCi0gICAqIEBwYXJhbSBidW5kbGUgdGhlIGJ1bmRsZSB1c2VkIHRvIGZpbmQgYW4gaWNvbiBiYW5uZXIuICBDYW4gYmUgbnVsbCBpZgotICAgKiBubyBpY29uIGJhbm5lciBpcyBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSBpY29uQmFubmVyUGF0aCB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVuZGxlIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIHdpemFyZFRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgd2l6YXJkLgotICAgKiAKLSAgICogTm90ZTogbm9ybWFsbHkgdGhlIHdpemFyZCBhc3NvY2lhdGVkIHdpdGggYSB3aXphcmRJZCB3aWxsIGhhdmUgYW4KLSAgICogaWNvbiBiYW5uZXIgYW5kIGEgdGl0bGUuICBUaGUgcGFyYW1ldGVycyBvbiB0aGlzIG1ldGhvZCBhbGxvdyB0aGUgY2FsbGVyCi0gICAqIHRvIG92ZXJyaWRlIHRoZXNlIHZhbHVlcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxEYXRhKCBTdHJpbmcgd2l6YXJkSWQsIEJ1bmRsZSBidW5kbGUsIFN0cmluZyBpY29uQmFubmVyUGF0aCwgU3RyaW5nIHdpemFyZFRpdGxlICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSAgICByZWdpc3RyeSAgICAgID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJRXh0ZW5zaW9uUG9pbnQgICAgICAgcG9pbnQgICAgICAgICA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KCJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCIpOyAvLyROT04tTkxTLTEkCi0gICAgSUV4dGVuc2lvbltdICAgICAgICAgIGV4dGVuc2lvbnMgICAgPSBwb2ludC5nZXRFeHRlbnNpb25zKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpbmRleCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IGV4dGVuc2lvbnNbaW5kZXhdLmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotICAgICAgCi0gICAgICBpZiggZWxlbWVudHMubGVuZ3RoID09IDEgJiYgZWxlbWVudHNbMF0uZ2V0TmFtZSgpLmVxdWFscyggImR5bmFtaWNXaXphcmQiKSApICAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpZCA9IGVsZW1lbnRzWzBdLmdldEF0dHJpYnV0ZSggImlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICBpZiggaWQgIT0gbnVsbCAmJiBpZC5lcXVhbHMoIHdpemFyZElkICkgKQotICAgICAgICB7Ci0gICAgICAgICAgd2l6YXJkRWxlbWVudF8gPSBlbGVtZW50c1swXTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAgICAKLSAgICBidW5kbGVfICAgICAgICAgPSBidW5kbGU7Ci0gICAgaWNvbkJhbm5lck5hbWVfID0gaWNvbkJhbm5lclBhdGg7Ci0gICAgd2l6YXJkVGl0bGVfICAgID0gd2l6YXJkVGl0bGU7Ci0gICAgCi0gICAgaWYoIHdpemFyZEVsZW1lbnRfID09IG51bGwgKQotICAgIHsKLSAgICAgIFN0YXR1cyBzdGF0dXMgPSBuZXcgU3RhdHVzKCBTdGF0dXMuRVJST1IsICJpZCIsIDAsIE5MUy5iaW5kKEVudmlyb25tZW50VUlNZXNzYWdlcy5NU0dfRVJST1JfV0laQVJEX0lEX05PVF9GT1VORCwgbmV3IFN0cmluZ1tdeyB3aXphcmRJZH0pICwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbiggc3RhdHVzICk7Ci0gICAgfQotICB9Ci0gICAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGVjbGlwc2UgZnJhbWV3b3JrIHRvIGluaXRpYWxpemUgdGhlCi0gICAqIHdpemFyZC4gCi0gICAqIAotICAgKiBOb3RlOiBpZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgcHJvZ3JhbWF0aWNhbGx5KGllLiBub3QgYnkgdGhlIGVjbGlwc2UKLSAgICogZnJhbWV3b3JrLikgb25lIG9mIHRoZSBzZXRJbml0YWxEYXRhIG1ldGhvZHMgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGlzCi0gICAqIG1ldGhvZCBpcyBpbnZva2VkLgotICAgKiAKLSAgICogQHBhcmFtIHdvcmtiZW5jaCB0aGUgZWNsaXBzZSB3b3JrYmVuY2gKLSAgICogQHBhcmFtIHNlbGVjdGlvbiB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gdGhhdCB0aGUgdXNlciBoYXMgbWFkZSB3aXRoaW4KLSAgICogICAgICAgICAgICAgICAgICBlY2xpcHNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCAoIElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7ICAgIAotICAgIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgY29udGV4dCAgICAgICAgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgRWNsaXBzZVN0YXR1c0hhbmRsZXIgICAgICBoYW5kbGVyICAgICAgICA9IG5ldyBFY2xpcHNlU3RhdHVzSGFuZGxlcigpOwotICAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgZW52aXJvbm1lbnQgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCBjb250ZXh0LCBoYW5kbGVyICk7Ci0gICAgCi0gICAgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgZGF0YVJlZ2lzdHJ5XyAgID0gbmV3IERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsKCk7Ci0gICAgU2ltcGxlV2lkZ2V0UmVnaXN0cnkgICAgd2lkZ2V0UmVnaXN0cnlfID0gbmV3IFNpbXBsZVdpZGdldFJlZ2lzdHJ5KCk7ICAKLSAgICBEYXRhRmxvd01hbmFnZXIgICAgICAgICBkYXRhTWFuYWdlciAgICAgPSBuZXcgRGF0YUZsb3dNYW5hZ2VyKCBkYXRhUmVnaXN0cnlfLCBlbnZpcm9ubWVudCApOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCB3aXphcmRFbGVtZW50XyAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGNvbW1hbmRXaWRnZXRCaW5kaW5nXyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXyA9IChDb21tYW5kV2lkZ2V0QmluZGluZyl3aXphcmRFbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCAiY2xhc3MiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIGJ1bmRsZV8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBidW5kbGVfID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCB3aXphcmRFbGVtZW50Xy5nZXROYW1lc3BhY2UoKSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggaWNvbkJhbm5lck5hbWVfID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgaWNvbkJhbm5lck5hbWVfID0gd2l6YXJkRWxlbWVudF8uZ2V0QXR0cmlidXRlKCAiaWNvbmJhbm5lciIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggd2l6YXJkVGl0bGVfID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgd2l6YXJkVGl0bGVfID0gd2l6YXJkRWxlbWVudF8uZ2V0QXR0cmlidXRlKCAidGl0bGUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0JZGF0YU9iamVjdENvbW1hbmRfID0gbmV3IERhdGFPYmplY3RDb21tYW5kKCk7Ci0gICAgY2FuRmluaXNoUmVnaXN0cnlfID0gbmV3IFNpbXBsZUNhbkZpbmlzaFJlZ2lzdHJ5KCk7IAotICAgIHBhZ2VNYW5hZ2VyXyAgICAgICA9IG5ldyBXaXphcmRQYWdlTWFuYWdlciggd2lkZ2V0UmVnaXN0cnlfLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFdpemFyZFBhZ2VGYWN0b3J5KCksIAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYW5hZ2VyLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgKTsgIAotICAgIAotICAgIHBhZ2VNYW5hZ2VyXy5zZXRSb290RnJhZ21lbnQoIGdldFJvb3RGcmFnbWVudCggc2VsZWN0aW9uLCBwYWdlTWFuYWdlcl8gKSApOwotICAgIAotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlcldpZGdldE1hcHBpbmdzKCB3aWRnZXRSZWdpc3RyeV8gKTsKLSAgICBjb21tYW5kV2lkZ2V0QmluZGluZ18ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeV8gKTsKLSAgICBjb21tYW5kV2lkZ2V0QmluZGluZ18ucmVnaXN0ZXJDYW5GaW5pc2goIGNhbkZpbmlzaFJlZ2lzdHJ5XyApOwotICAgICAgICAKLSAgICAvLyBJZiBhIHBhZ2UgaXMgbm90IGNvbXBsZXRlIGVuc3VyZSB0aGF0IGNhbkZpbmlzaCBpcyBmYWxzZS4KLSAgICBDb25kaXRpb24gY2FuRmluaXNoID0gbmV3IENvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdpemFyZFBhZ2UgY3VycmVudFBhZ2UgPSBwYWdlTWFuYWdlcl8uZ2V0Q3VycmVudFBhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQYWdlICE9IG51bGwgPyBjdXJyZW50UGFnZS5pc1BhZ2VDb21wbGV0ZSgpIDogdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH07IAotICAgIAotICAgIGNhbkZpbmlzaFJlZ2lzdHJ5Xy5hZGQoIGNhbkZpbmlzaCApOwotICAgIAotICAgIC8vIFNldCB0aGF0IHdlIG5lZWQgYSBwcm9ncmVzcyBtb25pdG9yLgotICAgIHNldE5lZWRzUHJvZ3Jlc3NNb25pdG9yKCB0cnVlICk7Ci0gICAgCi0gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG5leHQvYmFjayBidXR0b25zIGFyZSBlbmFibGVkLgotCXNldEZvcmNlUHJldmlvdXNBbmROZXh0QnV0dG9ucyggdHJ1ZSApOwotICAgIAotICAgIC8vIFNldCB0aGUgaWNvbiBiYW5uZXIgaWYgc3BlY2lmaWVkLgotICAgIGlmKCBpY29uQmFubmVyTmFtZV8gIT0gbnVsbCAmJiBpY29uQmFubmVyTmFtZV8ubGVuZ3RoKCkgPiAwICkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgVVJMIGluc3RhbGxVUkwgICAgICAgID0gYnVuZGxlXy5nZXRFbnRyeSgiLyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIFVSTCBpbWFnZVVSTCAgICAgICAgICA9IG5ldyBVUkwoaW5zdGFsbFVSTCwgaWNvbkJhbm5lck5hbWVfICk7Ci0gICAgICAgIEltYWdlRGVzY3JpcHRvciBpbWFnZSA9IEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBpbWFnZSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIHNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKCBpbWFnZSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCB3aXphcmRUaXRsZV8gIT0gbnVsbCAmJiB3aXphcmRUaXRsZV8ubGVuZ3RoKCkgPiAwICkKLSAgICB7Ci0gICAgICBzZXRXaW5kb3dUaXRsZSggd2l6YXJkVGl0bGVfICk7Ci0gICAgfQotICB9Ci0gIAotICAvLyBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzLgotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZUZhY3RvcnkgZ2V0V2l6YXJkUGFnZUZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVQYWdlRmFjdG9yeSgpOwotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgYWxsIHBhZ2VzIGFyZSBjb21wbGV0ZS4KLSAgKiBAcmV0dXJuIFRydWUgaWYgYWxsIHBhZ2VzIGFyZSBjb21wbGV0ZS4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gY2FuRmluaXNoICgpCi0gIHsKLSAgCWludCAgICAgbGVuZ3RoID0gY2FuRmluaXNoUmVnaXN0cnlfLnNpemUoKTsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgCQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIENvbmRpdGlvbiBjb25kaXRpb24gPSAoQ29uZGl0aW9uKWNhbkZpbmlzaFJlZ2lzdHJ5Xy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgCi0gICAgICByZXN1bHQgPSBjb25kaXRpb24uZXZhbHVhdGUoKTsKLSAgICAgIAotICAgICAgaWYoICFyZXN1bHQgKSBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgICogUmV0dXJucyB0aGUgZmlyc3QgcGFnZSBmb3IgdGhpcyB3aXphcmQuCi0gICAgKgotICAgICogQHJldHVybiB0aGUgZmlyc3QgcGFnZSBmb3IgdGhpcyB3aXphcmQuCi0gICoqLwotICBwdWJsaWMgSVdpemFyZFBhZ2UgZ2V0U3RhcnRpbmdQYWdlKCkKLSAgewotICAgIHJldHVybiBwYWdlTWFuYWdlcl8uZ2V0U3RhcnRpbmdQYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIFJldHVybnMgdGhlIG5leHQgcGFnZSBhZnRlciBwYWdlIGFuZAotICAgICogcnVucyB0aGUgYXBwcm9wcmlhdGUgdGFza3MuCi0gICAgKgotICAgICogQHJldHVybiB0aGUgbmV4dCBwYWdlIGFmdGVyIHBhZ2UuCi0gICoqLwotICBwdWJsaWMgSVdpemFyZFBhZ2UgZ2V0TmV4dFBhZ2UoIElXaXphcmRQYWdlIHBhZ2UgKQotICB7ICAgCi0gICAgcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXROZXh0UGFnZSgpOwotICB9Ci0gIAotICAvKioKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCAoKQotICB7IAotICAgIGJvb2xlYW4gcmVzdWx0ID0gcGFnZU1hbmFnZXJfLnBlcmZvcm1GaW5pc2goKTsKLSAgICAKLSAgICBpZiggcmVzdWx0ICkgY2xlYW51cCgpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogVW5kbyBmcmFnbWVudHMKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUNhbmNlbCAoKQotICB7Ci0gIAlib29sZWFuIHJlc3VsdCA9IHBhZ2VNYW5hZ2VyXy5wZXJmb3JtQ2FuY2VsKCk7Ci0gIAkKLSAgCWlmKCByZXN1bHQgKSBjbGVhbnVwKCk7Ci0gIAkKLSAgCXJldHVybiByZXN1bHQ7Ci0gIH0gIAotICAgICAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0RGF0YU9iamVjdCgpCi0gIHsKLSAgICByZXR1cm4gZGF0YU9iamVjdENvbW1hbmRfLmdldERhdGFPYmplY3QoKTsgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgQ29tbWFuZEZyYWdtZW50IGdldFJvb3RGcmFnbWVudCggSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uLCBXaXphcmRQYWdlTWFuYWdlciBwYWdlTWFuYWdlciApCi0gIHsKLSAgICBTZXF1ZW5jZUZyYWdtZW50IHJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgIAotICAgIHJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZWxlY3Rpb25Db21tYW5kKCBzZWxlY3Rpb24gKSwgIiIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgcm9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEN1cnJlbnRQYWdlQ29tbWFuZCggcGFnZU1hbmFnZXIgKSwgIiIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgcm9vdC5hZGQoIGNvbW1hbmRXaWRnZXRCaW5kaW5nXy5jcmVhdGUoKS5jcmVhdGUoKSApOwotCXJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIGRhdGFPYmplY3RDb21tYW5kXywgIiIgKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICByZXR1cm4gcm9vdDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElDb25maWd1cmF0aW9uRWxlbWVudCBnZXRDb25maWdFbGVtZW50KCkKLSAgewotICAgIHJldHVybiB3aXphcmRFbGVtZW50XzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGZyZWVzIHVwIHRoZSBtZW1vcnkgaGVsZCBieSB0aGlzIG9iamVjdC4KLSAgICoKLSAgICovCi0gIHByaXZhdGUgdm9pZCBjbGVhbnVwKCkKLSAgewotCSAgaWNvbkJhbm5lck5hbWVfICAgICAgID0gbnVsbDsKLQkgIGJ1bmRsZV8gICAgICAgICAgICAgICA9IG51bGw7Ci0JICBjYW5GaW5pc2hSZWdpc3RyeV8gICAgPSBudWxsOyAKLQkgIHBhZ2VNYW5hZ2VyXyAgICAgICAgICA9IG51bGw7Ci0JICB3aXphcmRUaXRsZV8gICAgICAgICAgPSBudWxsOwotCSAgY29tbWFuZFdpZGdldEJpbmRpbmdfID0gbnVsbDsKLQkgIFdpZGdldFJlZ2lzdHJ5LmluaXRpYWxpemUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0lOYW1lZFdpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTViYWYzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIAotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgV2lkZ2V0Q29udHJpYnV0b3IgZm9yIHRoaXMgTmFtZWQgd2lkZ2V0LgotICAgKi8KLSAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBnZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBkZXNjcmlwdGlvbiB0aGF0IG1pZ2h0IGJlIGRpc3BsYXllZCBvbgotICAgKiBhIHdpemFyZCBwYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRpdGxlIHRoYXQgbWF5IGJlIGRpc3BsYXllZCBvbiAKLSAgICogYSB3aXphcmQgcGFnZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKTsgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0lOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0lOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTRmZjAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLQotcHVibGljIGludGVyZmFjZSBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBuYW1lZCB3aWRnZXQuCi0gICAqLwotICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXRGaXJzdE5hbWVkV2lkZ2V0KCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSB3aWRnZXRDb250cmlidXRvcgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgbmFtZWQgd2lkZ2V0IGFmdGVyIHRoZSBvbmUgc3BlY2lmaWVkLgotICAgKi8KLSAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0TmV4dE5hbWVkV2lkZ2V0KCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXRDb250cmlidXRvciApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgZXh0ZW5pb25zIHRvIHJlZ2lzdGVyIHRoZSBkYXRhIG1hcHBpbmdzCi0gICAqIHRoYXQgdGhlaXIgd2lkZ2V0cyB1c2UuCi0gICAqIAotICAgKiBAcGFyYW0gZGF0YVJlZ2lzdHJ5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkgKTsKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvUGFnZUluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTg0MzY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLQotcHVibGljIGNsYXNzIFBhZ2VJbmZvIAotewotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICBwYWdlTmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZV87Ci0gIHByaXZhdGUgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHdpZGdldEZhY3RvcnlfOwotICAKLSAgcHVibGljIFBhZ2VJbmZvKCBTdHJpbmcgICAgICAgICAgICAgICAgICAgcGFnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZSwKLSAgICAgICAgICAgICAgICAgICBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeSApCi0gIHsKLSAgICBwYWdlTmFtZV8gICAgICAgPSBwYWdlTmFtZTsKLSAgICBwYWdlVGl0bGVfICAgICAgPSBwYWdlVGl0bGU7Ci0gICAgd2lkZ2V0RmFjdG9yeV8gID0gd2lkZ2V0RmFjdG9yeTsKLSAgfSAgIAotICAKLSAgcHVibGljIFN0cmluZyBnZXRQYWdlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcGFnZU5hbWVfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFBhZ2VUaXRsZSgpCi0gIHsKLSAgICByZXR1cm4gcGFnZVRpdGxlXzsKLSAgfQotICAKLSAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBnZXRXaWRnZXRGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiB3aWRnZXRGYWN0b3J5XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1BhZ2VXaXphcmREYXRhRXZlbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvUGFnZVdpemFyZERhdGFFdmVudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWViNjVmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvUGFnZVdpemFyZERhdGFFdmVudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLQotLyoqCi0gKiBEeW5hbWljIHdpemFyZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3YW50IHRvIGNyZWF0ZSBkaWZmZXJlbnQKLSAqIGtpbmRzIG9mIHdpemFyZCBwYWdlcyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KLSAqIFRoZSBXaXphcmRQYWdlRmFjdG9yeSByZXR1cm5zIGEgY2xhc3Mgb2YgdGhpcyB0eXBlLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBleHRlbmRzIElXaXphcmRQYWdlCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBXaWRnZXREYXRhRXZlbnRzIG9iamVjdCBjcmVhdGVkIGJ5IHRoZSBhZGRDb250cm9scwotICAgKiBtZXRob2Qgb2YgYSBXaWRnZXRDb250cmlidXRvci4KLSAgICovCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGdldERhdGFFdmVudHMoKTsKLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGlzIHdpemFyZCBwYWdlIGlzIGNvbXBsZXRlLiAKLSAgICoKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2VsZWN0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NlbGVjdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYxM2JjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2VsZWN0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIFRoaXMgU2VsZWN0aW9uQ29tbWFuZCBpcyBleGVjdXRlIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUKLSAqIGR5bmFtaWMgd2l6YXJkLiAgQ29tbWFuZHMgZXhlY3V0ZWQgaW4gdGhlIHdpemFyZCB0aGF0IG5lZWQKLSAqIHRoZSBpbml0aWFsIHNlbGVjdGlvbiBjYW4gZ2V0IGl0IHRocm91Z2ggYSBkYXRhIG1hcHBpbmcgZnJvbSAKLSAqIHRoaXMgY29tbWFuZCB0byB0aGUgY29tbWFuZCB0aGF0IG5lZWRzIGl0LgotICoKLSAqLwotcHVibGljIGNsYXNzIFNlbGVjdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgU2VsZWN0aW9uQ29tbWFuZCggSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotICAgIHNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAKLSAgfQotICAKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldEluaXRpYWxTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZUNhbkZpbmlzaFJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU5OWRjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotCi0KLQotcHVibGljIGNsYXNzIFNpbXBsZUNhbkZpbmlzaFJlZ2lzdHJ5IGV4dGVuZHMgVmVjdG9yIGltcGxlbWVudHMgQ2FuRmluaXNoUmVnaXN0cnkKLXsKLQotICAvKioKLSAgICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTcyODU4Mzc4NzA3NDEzMDVMOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbnYud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSNhZGRDb25kaXRpb24ob3JnLmVjbGlwc2UuZW52LmNvbW1hbmQuZnJhZ21lbnQuQ29uZGl0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29uZGl0aW9uKENvbmRpdGlvbiBjb25kaXRpb24pCi0gIHsKLSAgICBhZGQoIGNvbmRpdGlvbiApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmFhYTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMyAgIDEyOTIzMiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDczMCAgIDE5NzE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBQYXNzIHByb2dyZXNzIG1vbml0b3IgdG8gdW5kbyBjb21tYW5kcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YUZsb3dNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRFbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuRnJhZ21lbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBtYW5hZ2VzIHRoZSBleGVjdXRpb24gb2YgQ29tbWFuZHMgaW4gYSBmbG93IG9mIENvbW1hbmRGcmFnbWVudHMuCi0gKiBUaGUgYnVsayBvZiB0aGlzIHdvcmsgaXMgZG9uZSBieSB0aGUgQ29tbWFuZEZyYWdtZW50RW5naW5lLiAgVGhlIG1haW4gam9iIG9mCi0gKiB0aGlzIGNsYXNzIGlzIHJ1biB0aGUgZnJhZ21lbnRzIGluIGEgcGFydGljdWxhciB0cmFuc2FjdGlvbmFsIGVudmlyb25tZW50LgotICogQSBmcmFnbWVudCBoYXMgYSBtZXRob2QgY2FsbGVkIGRvTm90UnVuSW5UcmFuc2FjdGlvbiB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZQotICogaWYgaXRzIGNvbW1hbmRzIHNob3VsZCBiZSBydW4gaW4gYSB0cmFuc2FjdGlvbiBvciBub3QuICBJZiB0aGlzIG1ldGhvZCByZXR1cm5zCi0gKiB0cnVlKGllLiBub3QgaW4gYSB0cmFuc2FjdGlvbikgdGhlIENvbW1hbmRzIGFyZSB3cmFwcGVkIGluIGEgSVJ1bm5hYmxlV2l0aFByb2dyZXNzLgotICogSWYgZmFsc2UoIGllLiBpbiBhIHRyYW5zYWN0aW9uICkgdGhlIENvbW1hbmRzIGFyZSB3cmFwcGVkIGluIGEgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uLiAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcgotewotICBwcm90ZWN0ZWQgQ29tbWFuZEZyYWdtZW50RW5naW5lIGVuZ2luZV87Ci0gIHByb3RlY3RlZCBEYXRhRmxvd01hbmFnZXIgICAgICAgZGF0YU1hbmFnZXJfOwotICBwcm90ZWN0ZWQgICBFY2xpcHNlRW52aXJvbm1lbnQgICAgZW52aXJvbm1lbnRfOwotICAKLSAgcHJpdmF0ZSAgIGJvb2xlYW4gICAgICAgICAgICAgICBmb3VuZFN0b3BfOwotICBwcml2YXRlICAgYm9vbGVhbiAgICAgICAgICAgICAgIGRvTm90UnVuSW5UcmFuc2FjdGlvbl87Ci0gIAotICBwdWJsaWMgU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXIoIEVjbGlwc2VFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgRGF0YUZsb3dNYW5hZ2VyIGRhdGFNYW5hZ2VyICkKLSAgewotICAgIGVudmlyb25tZW50XyA9IGVudmlyb25tZW50OwotICAgIGRhdGFNYW5hZ2VyXyA9IGRhdGFNYW5hZ2VyOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgcm9vdCBmcmFnbWVudC4gIFRoZSBleGVjdXRpb24gZW5naW5lIHdpbGwgc3RhcnQgZXhlY3V0aW5nIGNvbW1hbmRzCi0gICAqIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyByb290IGZyYWdtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHJvb3QgdGhlIHJvb3QgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSb290RnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCByb290ICkKLSAgewotICAJZW5naW5lXyA9IG5ldyBDb21tYW5kRnJhZ21lbnRFbmdpbmUoIHJvb3QsIGRhdGFNYW5hZ2VyXywgZW52aXJvbm1lbnRfICk7Ci0JCi0JICBlbnZpcm9ubWVudF8uc2V0Q29tbWFuZE1hbmFnZXIoIGVuZ2luZV8gKTsKLSAgCQotICAgIGVuZ2luZV8uc2V0UGVla0ZyYWdtZW50TGlzdGVuZXIoIAotICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHBlZWtGcmFnbWVudCggZnJhZ21lbnQgKTsKLSAgICAgICAgfQotICAgICAgfSApOyAgCi0gICAgICAgICAgICAgICAgICAKLSAgICBlbmdpbmVfLnNldE5leHRGcmFnbWVudExpc3RlbmVyKCAKLSAgICAgIG5ldyBGcmFnbWVudExpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljICBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBuZXh0RnJhZ21lbnQoIGZyYWdtZW50ICk7Ci0gICAgICAgIH0KLSAgICAgIH0gKTsgIAotICAgIAotICAgIGVuZ2luZV8uc2V0QWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lciggCi0gICAgICAgIG5ldyBGcmFnbWVudExpc3RlbmVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyAgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFmdGVyRXhlY3V0ZU5leHRGcmFnbWVudCggZnJhZ21lbnQgKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gKTsgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgZW5naW5lXy5zZXRVbmRvRnJhZ21lbnRMaXN0ZW5lcigKLSAgICAgIG5ldyBGcmFnbWVudExpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHVuZG9GcmFnbWVudCggZnJhZ21lbnQgKTsKLSAgICAgICAgfQotICAgICAgfSApOyAgICAgICAgICAgICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gYWZ0ZXJFeGVjdXRlTmV4dEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgYm9vbGVhbiAgICAgICAgICAgY29udGludWVFeGVjdXRlID0gdHJ1ZTsKLSAgICBCYXNlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyICAgPSAoQmFzZVN0YXR1c0hhbmRsZXIpZW52aXJvbm1lbnRfLmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICBJU3RhdHVzICAgICAgICAgICBjb21tYW5kU3RhdHVzICAgPSBlbmdpbmVfLmdldExhc3RTdGF0dXMoKTsKLSAgICBJU3RhdHVzICAgICAgICAgICBoYW5kbGVyU3RhdHVzICAgPSBzdGF0dXNIYW5kbGVyLmdldFN0YXR1cygpOwotICAgIAotICAgIGlmKCBjb21tYW5kU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiAmJgotICAgICAgICBoYW5kbGVyU3RhdHVzLmdldFNldmVyaXR5KCkgIT0gSVN0YXR1cy5FUlJPUiApCi0gICAgewotICAgICAgLy8gVGhlIGNvbW1hbmQgcmV0dXJuZWQgYW4gZXJyb3Igc3RhdHVzIGZvciB0aGUgZW5naW5lIHRvIHN0b3AsCi0gICAgICAvLyBidXQgdGhlIHN0YXR1cyBoYW5kbGVyIGRpZCBub3QgaGF2ZSByZXBvcnQgYW5kIGVycm9yLgotICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB3aWxsIHJlcG9ydCB0aGlzIHN0YXR1cyByZXR1cm5lZCBieSB0aGUgY29tbWFuZAotICAgICAgLy8gaWYgdGhlcmUgaXMgYSBtZXNzYWdlIHRvIGRpc3BsYXkuICAKLSAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBjb21tYW5kU3RhdHVzLmdldE1lc3NhZ2UoKTsKLSAgICAgIAotICAgICAgaWYoIGVycm9yTWVzc2FnZSAhPSBudWxsICYmIGVycm9yTWVzc2FnZS5sZW5ndGgoKSA+IDAgKQotICAgICAgewotICAgICAgICBzdGF0dXNIYW5kbGVyLnJlcG9ydEVycm9yKCBjb21tYW5kU3RhdHVzICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoIGNvbW1hbmRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBJU3RhdHVzLkVSUk9SICYmCi0gICAgICAgICAgICAgaGFuZGxlclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IgKQotICAgIHsKLSAgICAgIC8vIFRoZSBsYXN0IGNvbW1hbmQgZGlkbid0IHJldHVybiBhbiBlcnJvciwgYnV0IHRoZSBzdGF0dXMgaGFuZGxlcgotICAgICAgLy8gZGlkIHJlcG9ydCBhbmQgZXJyb3IuICBUaGVyZWZvcmUsIHdlIHNob3VsZCBzdG9wLgotICAgICAgY29udGludWVFeGVjdXRlID0gZmFsc2U7ICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBjb250aW51ZUV4ZWN1dGU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGUgQ29tbWFuZEZyYWdtZW50RW5naW5lIGNhbGxzIHRoaXMgbWV0aG9kIHdoZW4gaXQgaXMgcGVla2luZyBmb3J3YXJkCi0gICAqIGluIHRoZSBmcmFnbWVudHMuICBXaGVuIHBlZWtpbmcgZm9yd2FyZCB0aGUgY29tbWFuZCBzdGFjayBzdGF0ZSBpbiB0aGUKLSAgICogZW5naW5lIGlzIG5vdCBjaGFuZ2VzLgotICAgKiAKLSAgICogCi0gICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCBpdCBpcyBwZWVraW5nIGF0LgotICAgKiBAcmV0dXJuIEluZGljYXRlcyB3aGV0aGVyIHBlZWtpbmcgc2hvdWxkIHN0b3Agb3Igbm90LgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcGVla0ZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7ICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgY2FsbHMgdGhpcyBtZXRob2Qgd2hlbiBpdCBpcyBtb3ZpbmcgZm9yd2FyZAotICAgKiBpbiB0aGUgZnJhZ21lbnRzLiAgIFdoZW4gbW92aW5nIGZvcndhcmQgdGhlIGNvbW1hbmQgc3RhY2sgc3RhdGUgaXMgc2F2ZWQKLSAgICogYXQgZWFjaCBmcmFnbWVudCBpcyB0cmF2ZXJzZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZnJhZ21lbnQgdGhlIGZyYWdtZW50IHRoYXQgaXMgYmVpbmcgdHJhdmVyc2VkLgotICAgKiBAcmV0dXJuIGluZGljYXRlcyBpZiB0aGUgZm9yd2FyZCB0cmF2ZXJzYWwgc2hvdWxkIGNvbnRpbnVlLiAgCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBuZXh0RnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsgICAgIAotICAgIGlmKCBmcmFnbWVudC5kb05vdFJ1bkluVHJhbnNhY3Rpb24oKSAhPSBkb05vdFJ1bkluVHJhbnNhY3Rpb25fICkKLSAgICB7Ci0gICAgICAvLyBUaGUgZnJhZ21lbnQgaXMgcmVxdWVzdGluZyBhIGRpZmZlcmVudCB0cmFuc2FjdGlvbiBlbnZpcm9ubWVudCB0aGFuCi0gICAgICAvLyB0aGUgb25lIHRoYXQgd2UgYXJlIGluIHNvIHdlIG11c3Qgc3RvcCBhbmQgY2hhbmdlIGVudmlyb25tZW50cy4KLSAgICAgIGRvTm90UnVuSW5UcmFuc2FjdGlvbl8gPSBmcmFnbWVudC5kb05vdFJ1bkluVHJhbnNhY3Rpb24oKTsKLSAgICAgIGZvdW5kU3RvcF8gICAgICAgICAgICAgPSBmYWxzZTsgICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZvdW5kU3RvcF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZm9yIGVhY2ggZnJhZ21lbnQgd2hlbiB0aGUgY29tbWFuZCBlbmdpbmUgaXMgdW53aW5kaW5nCi0gICAqIGl0cyBzdGFjayBkdXJpbmcgYW4gdW5kbyBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gZnJhZ21lbnQgIHRoZSBmcmFnbWVudCBiZWluZyB1bmRvbmUuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSB1bmRvIHByb2Nlc3Mgc2hvdWxkIGNvbnRpbnVlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdW5kb0ZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7ICAJICAJCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHVuZG9lcyB0aGUgY29tbWFuZHMgdGhhdCB3ZXJlIGV4ZWN1dGVkIGluIHRoZSBydW5Gb3J3YXJkVG9OZXh0U3RvcAotICAgKiBtZXRob2QuCi0gICAqIEBwYXJhbSBjb250ZXh0IHRoZSBydW5uYWJsZSBjb250ZXh0LgotICAgKiBAcmV0dXJuIHJldHVybnMgaWYgYWxsIGNvbW1hbmRzIGhhdmUgYmVlbiB1bmRvbmUgb3Igbm90LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVW5kb1RvTmV4dFN0b3AoIElSdW5uYWJsZUNvbnRleHQgY29udGV4dCApCi0gIHsKLSAgICBmaW5hbCBib29sZWFuIHJlc3VsdFtdID0gbmV3IGJvb2xlYW5bXXt0cnVlfTsKLSAgICAKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgdW5kb09wZXJhdGlvbiAKLSAgICAgID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdFswXSA9IGVuZ2luZV8udW5kb1RvTGFzdFN0b3AobW9uaXRvcik7Ci0gICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICAKLSAgICB0cnkKLSAgICB7ICAgICAgCi0gICAgICBpZiggY29udGV4dCA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvbnRhaW5lciB5ZXQgc28ganVzdCBydW4gdGhlIG9wZXJhdGlvbi4KLSAgICAgICAgdW5kb09wZXJhdGlvbi5ydW4oIG51bGwgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIGNvbnRhaW5lciB3aGVyZSB0aGlzIG9wZXJhdGlvbiBjYW4gcnVuIGFuZCBoYXZlCi0gICAgICAgIC8vIGl0cyBwcm9ncmVzcyBkaXNwbGF5ZWQuCi0gICAgICAgIGNvbnRleHQucnVuKCBmYWxzZSwgZmFsc2UsIHVuZG9PcGVyYXRpb24gKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIC8vIEZvciBub3cgd2Ugd2lsbCBpZ25vcmUgYWxsIGV4Y2VwdGlvbnMuCi0gICAgfSAKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0WzBdOwotICB9Ci0gIAotICAvKioKLSAgICogVGhlIG1ldGhvZCBleGVjdXRlcyB0aGUgQ29tbWFuZEZyYWdtZW50IGNvbW1hbmRzIGluIHRoZSBjb250ZXh0IHByb3ZpZGVkLgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgZXhlY3V0aW5nIHRoZSBjb21tYW5kcy4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIHJ1bkZvcndhcmRUb05leHRTdG9wKCBJUnVubmFibGVDb250ZXh0IGNvbnRleHQgKQotICB7Ci0gICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgCi0gIAlkb05vdFJ1bkluVHJhbnNhY3Rpb25fID0gZmFsc2U7Ci0gIAkKLSAgCWRvCi0gIAl7Ci0gIAkgIC8vIFdlIHdpbGwgc3RvcCB1bmxlc3Mgd2UgYXJlIGNoYW5naW5nIHRyYW5zYWN0aW9uIG1vZGVzLgotICAgICAgZm91bmRTdG9wXyA9IHRydWU7Ci0gICAgICAKLSAgCSAgaWYoIGRvTm90UnVuSW5UcmFuc2FjdGlvbl8gKQotICAJICB7Ci0gIAkgICAgb3BlcmF0aW9uID0gZ2V0Tm9UcmFuc2FjdGlvbk9wZXJhdGlvbigpOwotICAJICB9Ci0gIAkgIGVsc2UKLSAgCSAgewotICAJICAgIG9wZXJhdGlvbiA9IGdldFRyYW5zYWN0aW9uT3BlcmF0aW9uKCk7Ci0gIAkgIH0KLSAgCSAgCi0gICAJICB0cnkKLSAgCSAgeyAgCSAgIAotICAJICAgIGlmKCBjb250ZXh0ID09IG51bGwgKQotICAJICAgIHsKLSAgCSAgIAkgIC8vIFdlIGRvbid0IGhhdmUgYSBjb250YWluZXIgeWV0IHNvIGp1c3QgcnVuIHRoZSBvcGVyYXRpb24uCi0gIAkgICAJICBvcGVyYXRpb24ucnVuKCBudWxsICk7Ci0gIAkgICAgfQotICAJICAgIGVsc2UKLSAgCSAgICB7Ci0gIAkgICAJICAvLyBXZSBoYXZlIGEgY29udGFpbmVyIHdoZXJlIHRoaXMgb3BlcmF0aW9uIGNhbiBydW4gYW5kIGhhdmUKLSAgCSAgIAkgIC8vIGl0cyBwcm9ncmVzcyBkaXNwbGF5ZWQuCi0gIAkgICAgICBjb250ZXh0LnJ1biggZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24gKTsKLSAgCSAgICB9Ci0gIAkgIH0KLSAgCSAgY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGV4YyApCi0gIAkgIHsKLSAgCSAgICAvL1RPRE8gc2hvdWxkIGxvZyB0aGVzZSBleGNlcHRpb25zLgotICAJICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgCSAgfQotICAJICBjYXRjaCggSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBleGMgKQotICAJICB7Ci0gIAkgICAgLy9UT0RPIHNob3VsZCBsb2cgdGhlc2UgZXhjZXB0aW9ucy4KLSAgCSAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gIAkgIH0KLSAgCX0gIAotICAJd2hpbGUoICFmb3VuZFN0b3BfICk7IAotICAJCi0gIAlyZXR1cm4gZW5naW5lXy5nZXRMYXN0U3RhdHVzKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIGdldFRyYW5zYWN0aW9uT3BlcmF0aW9uKCkKLSAgewotICAgIElSdW5uYWJsZVdpdGhQcm9ncmVzcyBvcGVyYXRpb24gPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gICAgICB7Ci0gICAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiY29tbWFuZCIsIDUwMDIsIHRoaXMsICJnZXRUcmFuc2FjdGlvbk9wZXJhdGlvbiIsICJTdGFydCBvZiB0cmFuc2FjdGlvbiIpOwotICAgICAgICAKLSAgICAgICAgQmFzZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IChCYXNlU3RhdHVzSGFuZGxlcillbnZpcm9ubWVudF8uZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgICAgICAKLSAgICAgICAgc3RhdHVzSGFuZGxlci5yZXNldFN0YXR1cygpOwotICAgICAgICBlbmdpbmVfLm1vdmVGb3J3YXJkVG9OZXh0U3RvcCggbW9uaXRvciApOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiY29tbWFuZCIsIDUwMDMsIHRoaXMsICJnZXRUcmFuc2FjdGlvbk9wZXJhdGlvbiIsICJFbmQgb2YgdHJhbnNhY3Rpb24iKTsKLSAgICAgIH0KLSAgICB9OwotICAgIAotICAgIHJldHVybiBvcGVyYXRpb247Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIGdldE5vVHJhbnNhY3Rpb25PcGVyYXRpb24oKQotICB7Ci0gICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIG9wZXJhdGlvbiA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1biggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTA4NSwgdGhpcywgImdldE5vVHJhbnNhY3Rpb25PcGVyYXRpb24iLCAiU3RhcnQgb2YgTk9OIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIAotICAgICAgICBCYXNlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gKEJhc2VTdGF0dXNIYW5kbGVyKWVudmlyb25tZW50Xy5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0dXNIYW5kbGVyLnJlc2V0U3RhdHVzKCk7Ci0gICAgICAgIGVuZ2luZV8ubW92ZUZvcndhcmRUb05leHRTdG9wKCBtb25pdG9yICk7Ci0gICAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiY29tbWFuZCIsIDUwODYsIHRoaXMsICJnZXROb1RyYW5zYWN0aW9uT3BlcmF0aW9uIiwgIkVuZCBvZiBOT04gdHJhbnNhY3Rpb24iKTsKLSAgICAgIH0KLSAgICB9OyAKLSAgICAKLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNmY4ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZURpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOCAgIDEzNjMzNSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxOCAgIDEzNjc1OSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MTEwNiAgIDE0MjUwMCBkYXZpZC5zY2huZWlkZXJAdW5pc3lzLmNvbSAtIERhdmlkIFNjaG5laWRlcgotICogMjAwNjA4MjkgICAxODA4MzMgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgIE5ldyBXZWIgU2VydmljZSB3aXphcmQgc2VydmljZSBzZXR0aW5ncyBkaWFsb2cgaGFzIHVubGFiZWxsZWQgZW5hYmxlZCB0ZXh0IGZpZWxkcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFNpbXBsZURpYWxvZyBleHRlbmRzIERpYWxvZyBpbXBsZW1lbnRzIERpYWxvZ0RhdGFFdmVudHMKLXsKLSAgcHJpdmF0ZSAgIFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldF87Ci0gIHByaXZhdGUgICBXaWRnZXREYXRhRXZlbnRzICBkYXRhRXZlbnRzXzsKLSAgcHJpdmF0ZSAgIExpc3RlbmVyICAgICAgICAgIHN0YXR1c0xpc3RlbmVyXzsKLSAgcHJvdGVjdGVkIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyXzsgIAotICBwcml2YXRlIFRleHQgbWVzc2FnZVRleHRfOwotICBwcml2YXRlIGJvb2xlYW4gb2tfOwotICAJCi0gIHB1YmxpYyBTaW1wbGVEaWFsb2coIFNoZWxsIHNoZWxsLCBQYWdlSW5mbyBwYWdlSW5mbykKLSAgewotCXN1cGVyKHNoZWxsKTsKLQl3aWRnZXRfICA9IHBhZ2VJbmZvLmdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGUoKTsKLSAgCXN0YXR1c0xpc3RlbmVyXyA9IG5ldyBTdGF0dXNMaXN0ZW5lcigpOwotICB9IAkgCi0gIAotICBDb21wb3NpdGUgcGFyZW50XzsKLSAgcHVibGljIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYSggQ29tcG9zaXRlIHBhcmVudCApCi0gIHsJCi0JICBwYXJlbnRfID0gcGFyZW50OwotCUNvbXBvc2l0ZSBjb250cm9sID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCWRhdGFFdmVudHNfID0gd2lkZ2V0Xy5hZGRDb250cm9scyggY29udHJvbCwgc3RhdHVzTGlzdGVuZXJfICk7Ci0JCi0JLy9UZXh0IGFyZWEgdG8gZGlzcGxheSB2YWxpZGF0aW9uIG1lc3NhZ2VzCi0JbWVzc2FnZVRleHRfID0gbmV3IFRleHQocGFyZW50LCBTV1QuV1JBUCB8IFNXVC5NVUxUSSB8IFNXVC5SRUFEX09OTFkpOwotCW1lc3NhZ2VUZXh0Xy5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXRCYWNrZ3JvdW5kKCkpOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgZ3JpZGRhdGEuaG9yaXpvbnRhbEluZGVudCA9IDEwOwotICAgIG1lc3NhZ2VUZXh0Xy5zZXRMYXlvdXREYXRhKCBncmlkZGF0YSApOyAgICAKLSAgICBwYXJlbnRfLnNldEZvY3VzKCk7Ci0gICAgCi0gICAgLy9DYWxsIGV4dGVuZGVycyBvdmVycmlkZSBvZiB0aGUgY2FsbFNldHRlcnMgbWV0aG9kIHRvIGludGlhbGl6ZSBhbnkgZGF0YSBpbiB3aWRnZXQKLSAgICBjYWxsU2V0dGVycygpOyAgIAotICAgIERpYWxvZy5hcHBseURpYWxvZ0ZvbnQocGFyZW50KTsKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfSAgCi0gIAotICAvL092ZXJyaWRlIG9mIERpYWxvZy5jcmVhdGVDb250ZW50cyBzbyB3ZSBjYW4gYWZmZWN0IGJ1dHRvbiBlbmFibGVtZW50IAotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7Ci0JQ29udHJvbCBjID0gc3VwZXIuY3JlYXRlQ29udGVudHMocGFyZW50KTsKLQkvL2VuYWJsZSBjb250cm9scyBmb3IgaW5pdGlhbCBlbnRyeSB0byBkaWFsb2cKLQl2YWxpZGF0ZVBhZ2VUb1N0YXR1cygpOwotCXJldHVybiBjOwotICB9Ci0KLSAgLy8gRW5hYmxlIG9yIGRpc2FibGUgb2sgYnV0dG9uIGJhc2VkIG9uIHN0YXRlCi0gIHByaXZhdGUgdm9pZCBlbmFibGVPayhib29sZWFuIHN0YXRlKQotICB7Ci0JICBCdXR0b24gb2tCdXR0b24gPSBnZXRCdXR0b24oSURpYWxvZ0NvbnN0YW50cy5PS19JRCk7Ci0JICBpZiAob2tCdXR0b24gIT0gbnVsbCkKLQkgICAgb2tCdXR0b24uc2V0RW5hYmxlZChzdGF0ZSk7Ci0gIH0KLSAgCi0gIC8vSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGNhbGwgYWxsIHNldHRlcnMgb24gdGhlIGRpYWxvZyB3aWRnZXQgYWZ0ZXIgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGNhbGxTZXR0ZXJzKCk7Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBnZXREYXRhRXZlbnRzKCkKLSAgewotICAgIHJldHVybiBkYXRhRXZlbnRzXzsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFdpZGdldENvbnRyaWJ1dG9yIGdldFdpZGdldCgpCi0gIHsKLQkgIHJldHVybiB3aWRnZXRfOwotICB9Ci0gIAotICAvLyBzZXRzIG1lc3NhZ2UgaW4gbWVzc2FnZSBhcmVhIGFib3ZlIE9LIGFuZCBDYW5jZWwgYnV0dG9ucwotICBwcml2YXRlIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgeyAgCi0JICBpZiAobWVzc2FnZSA9PSBudWxsKQotCQkgIG1lc3NhZ2VUZXh0Xy5zZXRUZXh0KCIiKTsJICAgICAgCi0JICBlbHNlCQkgIAotCSAgICAgIG1lc3NhZ2VUZXh0Xy5zZXRUZXh0KG1lc3NhZ2UpOwotICAgICAgLy8gZm9yY2UgYSByZXNpemUgb2YgdGhlIHBhcmVudCBjb21wb3NpdGUgYW5kIHdyYXAgb2YgdGhlIHRleHQgZmllbGQgaWYgbmVjZXNzYXJ5Ci0JICBwYXJlbnRfLmxheW91dCgpOyAgCi0gIH0KLSAgCSAgCi0gIAotICAKLSAgcHVibGljIHZvaWQgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgID0gd2lkZ2V0Xy5nZXRTdGF0dXMoKTsgICAgCi0gICAgICAgIAotICAgIGlmKCBzdGF0dXMgIT0gbnVsbCApCi0gICAgewotICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBzdGF0dXMuZ2V0TWVzc2FnZSgpOwotICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7Ci0gICAgICAKLSAgICAgIC8vIGZvciBlcnJvciBjb25kaXRpb24sIGRpc2FibGUgb2sgYW5kIHByaW50IG1lc3NhZ2UKLSAgICAgIGlmKCBzZXZlcml0eSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgICAgIHsgCi0gICAgICAgIGlmKCBtZXNzYWdlLmxlbmd0aCgpID09IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0TWVzc2FnZSggbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICBva18gPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIC8vIGRpc3BsYXkgd2FybmluZyBhbmQgaW5mbyBtZXNzYWdlcyBidXQgc3RpbGwgZW5hYmxlIE9LCi0gICAgICBlbHNlIGlmIChzZXZlcml0eSA9PSBJU3RhdHVzLldBUk5JTkcgfCBzZXZlcml0eSA9PSBJU3RhdHVzLklORk8pCi0gICAgICB7Ci0gICAgICAgIHNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIG9rXyA9IHRydWU7ICAgICAgICAKLSAgICAgIH0gICAgIAotICAgICAgLy8gbm8gbWVzc2FnZSB0byBkaXNwbGF5Ci0gICAgICBlbHNlICAKLSAgICAgIHsKLSAgICAgICAgc2V0TWVzc2FnZSggbnVsbCk7Ci0gICAgICAgIG9rXyA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIG51bGwgc3RhdHVzIGNhc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0TWVzc2FnZShudWxsKTsKLSAgICAgIG9rXyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGVuYWJsZU9rKG9rXyk7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFN0YXR1c0xpc3RlbmVyIGltcGxlbWVudHMgTGlzdGVuZXIKLSAgewotCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KCBFdmVudCBldnQgKSAKLQl7Ci0gICAgICB2YWxpZGF0ZVBhZ2VUb1N0YXR1cygpOwotCX0KLSAgfQotfSAgCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVQYWdlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBhZ2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OTRlNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBhZ2VGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotcHVibGljIGNsYXNzIFNpbXBsZVBhZ2VGYWN0b3J5IGltcGxlbWVudHMgV2l6YXJkUGFnZUZhY3RvcnkKLXsgICAKLSAgcHVibGljIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIFBhZ2VJbmZvIHBhZ2VJbmZvLCBXaXphcmRQYWdlTWFuYWdlciBtYW5hZ2VyICkKLSAgewotICAgIHJldHVybiBuZXcgU2ltcGxlV2l6YXJkUGFnZSggcGFnZUluZm8sIG1hbmFnZXIgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwUGFnZUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVQb3B1cFBhZ2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MzMxZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwUGFnZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlUG9wdXBQYWdlRmFjdG9yeSBpbXBsZW1lbnRzIFdpemFyZFBhZ2VGYWN0b3J5Ci17ICAgCi0gIHByaXZhdGUgU3RyaW5nIGlkXzsKLSAgCi0gIHB1YmxpYyBTaW1wbGVQb3B1cFBhZ2VGYWN0b3J5KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgaWRfID0gaWQ7ICAKLSAgfQotICAKLSAgcHVibGljIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIFBhZ2VJbmZvIHBhZ2VJbmZvLCBXaXphcmRQYWdlTWFuYWdlciBtYW5hZ2VyICkKLSAgewotICAgIHJldHVybiBuZXcgU2ltcGxlUG9wdXBXaXphcmRQYWdlKCBwYWdlSW5mbywgbWFuYWdlciwgaWRfICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVQb3B1cFdpemFyZFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVQb3B1cFdpemFyZFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM1MDljYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUG9wdXBXaXphcmRQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MzEgICAxMjAzNzggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEZpZWxkcyBub3QgdmlzaWJsZSBpbiBMYXJnZSBmb250IHNldHRpbmdzCi0gKiAyMDA3MDUyMiAgIDE4NDAwNiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLkVudmlyb25tZW50VUlNZXNzYWdlczsKLQotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVQb3B1cFdpemFyZFBhZ2UgZXh0ZW5kcyBTaW1wbGVXaXphcmRQYWdlCi17ICAKLSAgcHJpdmF0ZSBTdHJpbmcgaWRfOwotICAKLSAgcHVibGljIFNpbXBsZVBvcHVwV2l6YXJkUGFnZSggUGFnZUluZm8gcGFnZUluZm8sIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyLCBTdHJpbmcgaWQgKQotICB7Ci0gIAlzdXBlciggcGFnZUluZm8sIHBhZ2VNYW5hZ2VyICk7Ci0gIAkKLSAgCWlkXyA9IGlkOwotICB9IAkgIAotICAJCi0gIHByb3RlY3RlZCBDb21wb3NpdGUgaW50ZXJuYWxDcmVhdGVDb250cm9sKCBDb21wb3NpdGUgcGFyZW50ICkgCi0gIHsgIAkKLQlDb21wb3NpdGUgY29tcG9zaXRlID0gc3VwZXIuaW50ZXJuYWxDcmVhdGVDb250cm9sKHBhcmVudCk7Ci0JICAKLSAgCWZpbmFsIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBjb250ZXh0ICAgPSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgCQotICAJLy8gSWYgdGhlIGN1cnJlbnQgcGFnZSBpcyBudWxsIHRoZW4gdGhpcyBtdXN0IGJlIHRoZSBmaXJzdCBwYWdlLgotICAJaWYoIHBhZ2VNYW5hZ2VyXy5nZXRDdXJyZW50UGFnZSgpID09IG51bGwgJiYgY29udGV4dC5zaG93Q2hlY2tib3goaWRfKSApCi0gIAl7Ci0gICAgICBmaW5hbCAgQnV0dG9uIGJ1dHRvbiAgPSBuZXcgQnV0dG9uKCBjb21wb3NpdGUsIFNXVC5DSEVDSyApOwotICAgICAgU3RyaW5nIGxhYmVsICAgPSBFbnZpcm9ubWVudFVJTWVzc2FnZXMuQ0hFQ0tCT1hfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOOwotICAgICAgCi0gICAgICAvKkNPTlRFWFRfSUQgVFdQMDAwMSBmb3IgdGhlIHNob3cvaGlkZSBjaGVjayBib3gqLwotICAgICAgU3RyaW5nIGluZm9wb3AgPQkib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLlRXUDAwMDEiOwotICAgICAgU3RyaW5nIHRvb2x0aXAgPSBFbnZpcm9ubWVudFVJTWVzc2FnZXMuVE9PTFRJUF9ET19OT1RfU0hPV19ESUFMT0dfQUdBSU47Ci0gICAgICAKLSAgICAgIGJ1dHRvbi5zZXRUZXh0KCBsYWJlbCApOwotICAgICAgYnV0dG9uLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0gICAgICBidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0T2JqZWN0QWN0aW9uRGlhbG9nRW5hYmxlZCggaWRfLCBidXR0b24uZ2V0U2VsZWN0aW9uKCkgKTsgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICBidXR0b24uc2V0U2VsZWN0aW9uKCBmYWxzZSApOwotICAgICAgCi0gICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBidXR0b24sIGluZm9wb3AgKTsgIAkKLSAgCX0KLSAgCQotICAJcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfSAgCi19ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXRDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldENvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MmMyZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldENvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLQotcHVibGljIGNsYXNzIFNpbXBsZVdpZGdldENvbnRyaWJ1dG9yIGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gICAgcHJpdmF0ZSBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeV87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgbmFtZV87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fOwotCXByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgIHRpdGxlXzsKLQkKLQlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIAotCXsKLQkJZGVzY3JpcHRpb25fID0gZGVzY3JpcHRpb247Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0RmFjdG9yeShXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSkgCi0JewotCQlmYWN0b3J5XyA9IGZhY3Rvcnk7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgCi0JewotCQluYW1lXyA9IG5hbWU7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0VGl0bGUoU3RyaW5nIHRpdGxlKSAKLQl7Ci0JCXRpdGxlXyA9IHRpdGxlOwotCX0KLQkKLQotCXB1YmxpYyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgCi0JewotCQlyZXR1cm4gZmFjdG9yeV87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgCi0JewotCQlyZXR1cm4gbmFtZV87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIAotCXsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uXzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgCi0JewotCQlyZXR1cm4gdGl0bGVfOwotCX0KLQotCS8qKgotCSAqIFN1YnNjbGFzc2VycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCi0JICovCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotCXsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY4MDZhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2ltcGxlIFdpZGdldERhdGFDb250cmlidXRvciBjbGFzcyB0aGF0IGNvbmNyZXRlIAotICogV2lkZ2V0RGF0YUNvbnRyaWJ1dG9ycyBjYW4gc3ViY2xhc3MuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIGltcGxlbWVudHMgV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17ICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjYWRkQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcikKLSAgICovCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjZ2V0U3RhdHVzKCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHMjZXh0ZXJuYWxpemUoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZXh0ZXJuYWxpemUoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzI2ludGVybmFsaXplKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGludGVybmFsaXplKCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2lkZ2V0UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXRSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTZmYWZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXRSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVXaWRnZXRSZWdpc3RyeSBpbXBsZW1lbnRzIFdpZGdldFJlZ2lzdHJ5Ci17Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIGFkZCggU3RyaW5nIGZyYWdtZW50SWQsCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhZ2VOYW1lLAotICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYWdlVGl0bGUsCi0gICAgICAgICAgICAgICAgICAgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHdpZGdldEZhY3RvcnkgKQotICB7Ci0gIAlQYWdlSW5mbyBlbnRyeSA9IG5ldyBQYWdlSW5mbyggcGFnZU5hbWUsIHBhZ2VUaXRsZSwgd2lkZ2V0RmFjdG9yeSApOwotICAJdGFibGVfLnB1dCggZnJhZ21lbnRJZCwgZW50cnkgKTsKLSAgfSAgICAgICAgICAgICAgICAgICAKLSAgCi0gIHB1YmxpYyBQYWdlSW5mbyBnZXRQYWdlSW5mbyggU3RyaW5nIGZyYWdtZW50SWQgKQotICB7Ci0gICAgcmV0dXJuIChQYWdlSW5mbyl0YWJsZV8uZ2V0KCBmcmFnbWVudElkICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaXphcmRQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2l6YXJkUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjI1OTY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaXphcmRQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDczMSAgIDEyMDM3OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRmllbGRzIG5vdCB2aXNpYmxlIGluIExhcmdlIGZvbnQgc2V0dGluZ3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU2Nyb2xsZWRDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotCi0KLQotcHVibGljIGNsYXNzIFNpbXBsZVdpemFyZFBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIGltcGxlbWVudHMgUGFnZVdpemFyZERhdGFFdmVudHMKLXsKLSAgcHJpdmF0ZSAgIFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldF87Ci0gIHByaXZhdGUgICBXaWRnZXREYXRhRXZlbnRzICBkYXRhRXZlbnRzXzsKLSAgcHJpdmF0ZSAgIExpc3RlbmVyICAgICAgICAgIHN0YXR1c0xpc3RlbmVyXzsKLSAgcHJvdGVjdGVkIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyXzsKLSAgCQotICBwdWJsaWMgU2ltcGxlV2l6YXJkUGFnZSggUGFnZUluZm8gcGFnZUluZm8sIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyICkKLSAgewotICAJc3VwZXIoICIiICk7Ci0gIAkKLSAgCXNldFRpdGxlKCBwYWdlSW5mby5nZXRQYWdlTmFtZSgpICk7Ci0gIAlzZXREZXNjcmlwdGlvbiggcGFnZUluZm8uZ2V0UGFnZVRpdGxlKCkpOwotICAJICAKLSAgCXdpZGdldF8gICAgICAgICA9IHBhZ2VJbmZvLmdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGUoKTsKLSAgCXN0YXR1c0xpc3RlbmVyXyA9IG5ldyBTdGF0dXNMaXN0ZW5lcigpOwotICAJcGFnZU1hbmFnZXJfICAgID0gcGFnZU1hbmFnZXI7Ci0gIH0gCSAgCi0gIAkKLSAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbCggQ29tcG9zaXRlIHBhcmVudCApIAotICB7CSAgCi0JU2Nyb2xsZWRDb21wb3NpdGUgY29udHJvbCA9IG5ldyBTY3JvbGxlZENvbXBvc2l0ZSggcGFyZW50LCBTV1QuVl9TQ1JPTEwgKTsJCi0JQ29tcG9zaXRlIGlubmVyID0gaW50ZXJuYWxDcmVhdGVDb250cm9sKGNvbnRyb2wpOwotCQotCWNvbnRyb2wuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKLSAgCWNvbnRyb2wuc2V0RXhwYW5kVmVydGljYWwodHJ1ZSk7Ci0JY29udHJvbC5zZXRDb250ZW50KGlubmVyKTsgIAkKLSAgICBjb250cm9sLnNldE1pblNpemUoaW5uZXIuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKSk7CQotCQotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChjb250cm9sKTsKLSAgICBzZXRDb250cm9sKCBjb250cm9sICk7Ci0gIH0KLQkKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBpbnRlcm5hbENyZWF0ZUNvbnRyb2woIENvbXBvc2l0ZSBwYXJlbnQgKSB7Ci0KLQlDb21wb3NpdGUgY29udHJvbCA9IG5ldyBDb21wb3NpdGUoIHBhcmVudCwgU1dULk5PTkUgKTsKLQljb250cm9sLnNldExheW91dCggbmV3IEdyaWRMYXlvdXQoKSApOwotICAJY29udHJvbC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfQk9USCApKTsKLQkKLQlkYXRhRXZlbnRzXyA9IHdpZGdldF8uYWRkQ29udHJvbHMoIGNvbnRyb2wsIHN0YXR1c0xpc3RlbmVyXyApOwkKLQkKLQlyZXR1cm4gY29udHJvbDsKLSAgfQotICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgZ2V0RGF0YUV2ZW50cygpCi0gIHsKLSAgICByZXR1cm4gZGF0YUV2ZW50c187Ci0gIH0KLSAgCSAgCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlUGFnZVRvU3RhdHVzKCkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzICA9IHdpZGdldF8uZ2V0U3RhdHVzKCk7Ci0gICAgCi0gICAgaWYoIHN0YXR1cyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlID0gc3RhdHVzLmdldE1lc3NhZ2UoKTsKLQotICAgICAgICBpZiggbWVzc2FnZS5sZW5ndGgoKSA9PSAwICkKLSAgICAgICAgewotICAgICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICAgIHNldE1lc3NhZ2UoIGdldERlc2NyaXB0aW9uKCkgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoIG1lc3NhZ2UgKTsKLSAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICBzZXRQYWdlQ29tcGxldGUoIGZhbHNlICk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLldBUk5JTkcgKQotICAgICAgewotICAgICAgICBzZXRFcnJvck1lc3NhZ2UoIG51bGwgKTsKLSAgICAgICAgc2V0TWVzc2FnZShzdGF0dXMuZ2V0TWVzc2FnZSgpLCBJU3RhdHVzLldBUk5JTkcgKTsKLSAgICAgICAgc2V0UGFnZUNvbXBsZXRlKCB0cnVlICk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLklORk8gKQotICAgICAgewotICAgICAgICBzZXRFcnJvck1lc3NhZ2UoIG51bGwgKTsKLSAgICAgICAgc2V0TWVzc2FnZSggc3RhdHVzLmdldE1lc3NhZ2UoKSwgSVN0YXR1cy5JTkZPICk7Ci0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSggdHJ1ZSApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzZXRFcnJvck1lc3NhZ2UoIG51bGwgKTsKLSAgICAgICAgc2V0TWVzc2FnZSggZ2V0RGVzY3JpcHRpb24oKSApOwotICAgICAgICBzZXRQYWdlQ29tcGxldGUoIHRydWUgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgc2V0TWVzc2FnZSggZ2V0RGVzY3JpcHRpb24oKSApOwotICAgICAgc2V0UGFnZUNvbXBsZXRlKCB0cnVlICk7Ci0gICAgfQotICAgIAotICAgIGdldENvbnRhaW5lcigpLnVwZGF0ZUJ1dHRvbnMoKTsKLSAgfQotICAgIAotICBwdWJsaWMgYm9vbGVhbiBjYW5GbGlwVG9OZXh0UGFnZSgpIAotICB7Ci0JcmV0dXJuIGlzUGFnZUNvbXBsZXRlKCkgJiYgcGFnZU1hbmFnZXJfLmhhc05leHRQYWdlKCk7Ci0gIH0KLQotICBwdWJsaWMgSVdpemFyZFBhZ2UgZ2V0TmV4dFBhZ2UoKSAKLSAgewotCXJldHVybiBwYWdlTWFuYWdlcl8uZ2V0TmV4dFBhZ2UoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZhbHVlKSAKLSAgewotICAJcGFnZU1hbmFnZXJfLmhhbmRsZVBhZ2VWaXNpYmxlKCB0aGlzLCB2YWx1ZSApOwotICAJCi0gICAgc3VwZXIuc2V0VmlzaWJsZSh2YWx1ZSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgU3RhdHVzTGlzdGVuZXIgaW1wbGVtZW50cyBMaXN0ZW5lcgotICB7Ci0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoIEV2ZW50IGV2dCApIAotCXsKLSAgICAgIHZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci0JfQotICB9Ci19ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MmY3YzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIgCi17Ci0gIHByaXZhdGUgSGFzaHRhYmxlICAgICAgICAgICAgd2lkZ2V0Q29udHJpYnV0b3JfOwotICBwcml2YXRlIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmdfOwotICAKLSAgcHVibGljIFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyKCBDb21tYW5kV2lkZ2V0QmluZGluZyBiaW5kaW5nICkKLSAgewotICAgIHdpZGdldENvbnRyaWJ1dG9yXyA9IG5ldyBIYXNodGFibGUoKTsgCi0JYmluZGluZ18gICAgICAgICAgID0gYmluZGluZzsKLQkKLQliaW5kaW5nLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoIG5ldyBNeVdpZGdldFJlZ2lzdHJ5KCkgKTsKLSAgfQotICAKLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldFdpZGdldCggU3RyaW5nIGlkICkKLSAgewotICAgIHJldHVybiAoSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3Ipd2lkZ2V0Q29udHJpYnV0b3JfLmdldCggaWQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSApCi0gIHsKLSAgICBiaW5kaW5nXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggcmVnaXN0cnkgKTsgIAotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIE15V2lkZ2V0UmVnaXN0cnkgaW1wbGVtZW50cyBXaWRnZXRSZWdpc3RyeQotICB7Ci0JcHVibGljIHZvaWQgYWRkKFN0cmluZyBmcmFnbWVudElkLCBTdHJpbmcgcGFnZU5hbWUsIFN0cmluZyBwYWdlVGl0bGUsIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSB3aWRnZXRGYWN0b3J5KSAKLQl7Ci0JICBTaW1wbGVXaWRnZXRDb250cmlidXRvciB3aWRnZXQgPSBuZXcgU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IoKTsKLQkgIHdpZGdldC5zZXRUaXRsZSggcGFnZU5hbWUgKTsKLQkgIHdpZGdldC5zZXREZXNjcmlwdGlvbiggcGFnZVRpdGxlICk7Ci0JICB3aWRnZXQuc2V0RmFjdG9yeSggbmV3IE15V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCB3aWRnZXRGYWN0b3J5ICkgKTsKLQkgIAotCSAgd2lkZ2V0Q29udHJpYnV0b3JfLnB1dCggZnJhZ21lbnRJZCwgd2lkZ2V0ICk7Ci0JfQkgIAotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIE15V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGltcGxlbWVudHMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5Ci0gIHsKLQlwcml2YXRlIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5XzsKLQlwcml2YXRlIFdpZGdldENvbnRyaWJ1dG9yICAgICAgICB3aWRnZXRfOwotCQotCXB1YmxpYyBNeVdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSggV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnkgKQotCXsKLQkgIGZhY3RvcnlfID0gZmFjdG9yeTsJCi0JfQotCQotCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKSAKLQl7Ci0gICAgICBpZiggd2lkZ2V0XyA9PSBudWxsICkKLQkgIHsKLQkgICAgd2lkZ2V0XyA9IGZhY3RvcnlfLmNyZWF0ZSgpOwotCSAgfQotCSAgCi0JICByZXR1cm4gd2lkZ2V0XzsKLQl9CSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldENvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOGFmYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldENvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci0KLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHdheSBmb3IgZGV2ZWxvcGVycyB0byBjcmVhdGUgdmFsaWRhdGFibGUgd2lkZ2V0cwotICogdGhhdCBjYW4gYmUgdXNlZCBpbiBtYW55IGRpZmZlcmVudCBFY2xpcHNlIFVJIGNvbnRleHRzLiAoaWUuIGluIGEgV2luZG93cywgRGlhZ2xvZ3MsCi0gKiB3aXphcmQgcGFnZXMsIGV0YykKLSAqCi0gKiBUaGUgbWFpbiBmdW5jdGlvbmFsaXR5IHRoaXMgaW50ZXJmYWNlIGhhcyBvdmVyIGp1c3QgYSByZWd1bGFyIEVjbGlwc2UgQ29tcG9zaXRlCi0gKiBpcyB0aGF0IGl0IHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciB2YWxpZGF0aW5nIHRoZSBXaWRnZXQuICBXaGVuIHZhbGlkYXRpbmcKLSAqIHRoZXJlIGFyZSB0d28gYXNwZWN0cyB0byBrZWVwIGluIG1pbmQuICBUaGUgZmlyc3QgYXNwZWN0IGRlYWxzIHdpdGggV0hFTiB2YWxpZGF0aW9uCi0gKiBvY2N1cnMgYW5kIHRoZSBzZWNvbmQgYXNwZWN0IGRlYWxzIHdpdGggV0hBVCB0byBkbyBmb3IgYSB2YWxpZGF0aW9uIGV2ZW50LgotICogCi0gKiBUaGUgZmlyc3QgYXNwZWN0IG9mIHRyaWdnZXJpbmcgdmFsaWRhdGlvbiBldmVudHMgaXMgaGFuZGxlZCBieSB0aGUgc3RhdHVzTGlzdGVuZXIKLSAqIHBhcmFtZXRlciBvZiB0aGUgYWRkQ29udHJvbHMgbWV0aG9kLiAgSWYgYSBwYXJ0aWN1bGFyIGNvbnRyb2wgdGhhdCBpcyBjb250cmlidXRlZCBjYW4KLSAqIGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhpcyBXaWRnZXRDb250cmlidXRvciB0aGVuIHRoZSBzdGF0dXNMaXN0ZW5lciBvYmplY3QKLSAqIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbGlzdGVuZXIgbGlzdCBvZiB0aGF0IGNvbnRyb2wuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHRleHQgaW4KLSAqIGEgVGV4dCB3aWRnZXQgY2FuIGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhpcyBXaWRnZXRDb250cmlidXRvciB0aGVuIHlvdSB3b3VsZAotICogYWRkIHRoZSBzdGF0dXNMaXN0ZW5lciB0byB0aGUgVGV4dCB3aWRnZXRzIE1vZGlmeSBsaXN0ZW5lciBsaXN0OgotICogCi0gKiAKLSAqICAgVGV4dCBzb21lVGV4dCA9IG5ldyBUZXh0KCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gKiAgIHNvbWVUZXh0LmFkZExpc3RlbmVyKCBTV1QuTW9kaWZ5LCBzdGF0dXNMaXN0ZW5lciApOwotICogCi0gKiBOb3RlOiBpZiB5b3Ugd2FudCB0byBmb3JjZSB2YWxpZGF0aW9uIG9mIHRoaXMgd2lkZ2V0IHlvdSBjYW4gY2FsbAotICogICAgICAgdGhlIHN0YXR1c0xpc3RlbmVyLmhhbmRsZUV2ZW50KG51bGwpIG1ldGhvZCBkaXJlY3RseS4gIFRoaXMKLSAqICAgICAgIGlzIG5vdCB0aGUgcHJlZmVyZWQgbWF5IHRvIHRyaWdnZXIgdmFsaWRhdGlvbiwgaG93ZXZlci4KLSAqICAgICAgIAotICogVGhlIHNlY29uZCBhc3BlY3Qgb2YgdmFsaWF0aW9uIGlzIHdoYXQgdG8gZG8gd2hlbiB0aGUgdmFsaWRhdGlvbiBldmVudCBvY2N1cnMuCi0gKiBUaGlzIGlzIGhhbmRsZWQgYnkgZ2V0U3RhdHVzIG1ldGhvZC4gIEFueSBjb2RlIHRoYXQgZW5zdXJlcyB0aGF0IHRoaXMgd2lkZ2V0IGlzCi0gKiB2YWxpZCBzaG91bGQgYmUgcHV0IGluIHRoZSBnZXRTdGF0dXMgaW1wbGVtZW50YXRpb24uIAotICogCi0gKiAKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdpZGdldENvbnRyaWJ1dG9yIAotewotICAvKioKLSAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBVSSBjb250cmlidXRpb25zIGZvciB0aGlzIHdpZGdldC4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnQgVGhlIGNvbXBvc2l0ZSBwYXJlbnQgdGhhdCBzdWIgd2lkZ2V0cyBzaG91bGQgdXNlLgotICAgKiBAcGFyYW0gc3RhdHVzTGlzdGVuZXIgVGhpcyBsaXN0ZW5lciBzaG91bGQgYmUgYWRkZWQgdG8gYW55IHdpZGdldCB0aGF0IGNhbgotICAgKiAgICAgICAgICAgICAgICAgICAgICAgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGlzIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKiBAcmV0dXJuIHJldHVybnMgYSBXaWRnZXREYXRhRXZlbnRzIG9iamVjdC4gIFRoaXMgb2JqZWN0IGlzIHVzZWQgYnkgdGhlCi0gICAqICAgICAgICAgZnJhbWV3b3JrIHRvIGludGVybmFsaXplIGFuZCBleHRlcm5hbGl6ZSBkYXRhIGZvciB0aGlzIHdpZGdldC4KLSAgICovCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBpbXBsZW1lbnQgdmFsaWRhdGlvbiBjb2RlIGZvciB0aGlzIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgc3RhdHVzIG9iamVjdCBpbmRpY2F0aW5nIHRoZSB2YWxpZGl0eSBvZiB0aGlzIHdpZGdldC4KLSAgICogICAgICAgICBJZiB0aGUgc3RhdHVzIHNldmVyaXR5IGlzIEVSUk9SIHRoZW4gdGhpcyB3aWRnZXQgaXMgY29uc2lkZXJlZCB0bwotICAgKiAgICAgICAgIGJlIGludmFsaWQuICBGb3IgYW55IG90aGVyIHN0YXR1cyBzZXZlcml0eSBvciBpZiB0aGUgc3RhdHVzIHJldHVybmVkCi0gICAqICAgICAgICAgaXMgbnVsbCB0aGlzIHdpZGdldCBpcyBjb25zaWRlcmVkIHRvIGJlIHZhbGlkLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyN2VmYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldENvbnRyaWJ1dG9yRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGUgYSB3YXkgZm9yIGNyZWF0aW5nIFdpZGdldENvbnRyaWJ1dG9ycwotICoKLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IAotewotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ODFhY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldERhdGFDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIFdpZGdldENvbnRyaWJ1dG9yIGludGVyZmFjZSBhbmQKLSAqIHRoZSBXaWRnZXREYXRhRXZlbnRzIGludGVyZmFjZS4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIGV4dGVuZHMgV2lkZ2V0Q29udHJpYnV0b3IsIFdpZGdldERhdGFFdmVudHMgCi17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUV2ZW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldERhdGFFdmVudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QxZDlmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUV2ZW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IGZvciBpbnRlcm5hbGl6aW5nIGFuZCBleHRlcm5hbGl6aW5nIHN0YXRlCi0gKiBkYXRhIGluIGEgV2lkZ2V0Q29udHJpYnV0b3IuICBUaGUgaW50ZXJuYWxpemUgbWV0aG9kIHdpbGwgYmUgY2FsbGVkCi0gKiBiZWZvcmUgdGhlIHdpZGdldCBpcyBkaXNwbGF5ZWQgc28gdGhhdCBpdCBjYW4gc2V0IHRoZSBkZWZhdWx0IGRhdGEKLSAqIGZvciB0aGF0IHdpZGdldC4gIFRoZSBleHRlcm5hbGl6ZSBtZXRob2QgcHJvdmlkZXMgYSB3YXkgb2YgZ2V0dGluZyBkYXRhCi0gKiBmcm9tIHRoZSB3aWRnZXQgYWZ0ZXIgaXQgaXMgZGlzcGxheWVkLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaWRnZXREYXRhRXZlbnRzIAotewotICAvKioKLSAgICogSW1wbGVtZW50YXRpb25zIHNob3VsZCBzZXQgd2lkZ2V0IHN0YXRlIGRhdGEgaGVyZS4KLSAgICoKLSAgICovCi0gIHB1YmxpYyB2b2lkIGludGVybmFsaXplKCk7Ci0gIAotICAvKioKLSAgICogSW1wbGVtZW5hdGlvbnMgc2hvdWxkIGdldCB3aWRnZXQgc3RhdGUgZGF0YSBoZXJlLgotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgZXh0ZXJuYWxpemUoKTsgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldFJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0UmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUxYjE4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGhvdyBXaWRnZXRDb250cmlidXRvcnMgYXJlIG1hZGUga25vd24gdG8gdGhlCi0gKiBkeW5hbWljIHdpemFyZCBmcmFtZXdvcmsuICBUaGlzIHdpZGdldCB3aWxsIGJlIGRpc3BsYXllZCBhcyBhIHdpemFyZCBwYWdlCi0gKiB3aXRoIHRoZSBuYW1lIGFuZCB0aXRsZSBzcGVjaWZpZWQgaW4gdGhlIGFkZCBtZXRob2QuICBUaGUgZnJhZ21lbnRJZCBpcyAKLSAqIHVzZWQgdG8gYXNzb2NpYXRlIHRoaXMgd2lkZ2V0IHdpdGggYSBwYXJ0aWN1bGFyIENvbW1hbmRGcmFnbWVudC4gIFdoZW4KLSAqIGEgQ29tbWFuZEZyYWdtZW50IHdpdGggdGhpcyBmcmFnbWVudElkIGlzIHRyYXZlcnNlZCB0aGUgY29ycmVzcG9uZGluZwotICogV2lkZ2V0Q29udHJpYnV0b3Igd2lsbCBiZSBkaXNwbGF5ZWQuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdpZGdldFJlZ2lzdHJ5Ci17Ci0gIC8qKgotICAgKiBBZGRzIGEgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHRvIHRoZSBmcmFtZXdvcmsuICBUaGlzIGZhY3RvcnkKLSAgICogaXMgdXNlZCB0byBnZXQgdGhlIFdpZGdldENvbnRyaWJ1dG9yLiAgVGhpcyBXaWRnZXRDb250cmlidXRvcgotICAgKiB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSB3aXphcmQgcGFnZS4KLSAgICogCi0gICAqIEBwYXJhbSBmcmFnbWVudElkIHRoZSBDb21tYW5kRnJhZ21lbnQgaWQgdGhhdCB0aGlzIFdpZGdldENvbnRyaWJ1dG9yIGlzIGFzc29jaWF0ZWQgd2l0aC4KLSAgICogQHBhcmFtIHBhZ2VOYW1lIHRoZSBuYW1lIG9mIHRoaXMgd2l6YXJkIHBhZ2UuCi0gICAqIEBwYXJhbSBwYWdlVGl0bGUgdGhlIHRpdGxlIG9mIHRoaXMgd2l6YXJkIHBhZ2UuCi0gICAqIEBwYXJhbSB3aWRnZXRGYWN0b3J5IHRoZSBmYWN0b3J5IHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBXaWRnZXRDb250cmlidXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZCggU3RyaW5nIGZyYWdtZW50SWQsCi0JCQkJICAgU3RyaW5nIHBhZ2VOYW1lLAotCQkJCSAgIFN0cmluZyBwYWdlVGl0bGUsCi0JCQkJICAgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHdpZGdldEZhY3RvcnkgKTsKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2l6YXJkUGFnZUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaXphcmRQYWdlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmI2NjRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaXphcmRQYWdlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLS8qKgotICogCi0gKgotICoKLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2l6YXJkUGFnZUZhY3RvcnkgCi17Ci0gIHB1YmxpYyBQYWdlV2l6YXJkRGF0YUV2ZW50cyBnZXRQYWdlKCBQYWdlSW5mbyBwYWdlSW5mbywgV2l6YXJkUGFnZU1hbmFnZXIgbWFuYWdlciApOyAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaXphcmRQYWdlTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OGVkN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwMzEzICAgMTMwOTU4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzE5ICAgMTc1NzIxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzI4ICAgMTczMzQ1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBlZWsgbmV4dCBwYWdlIHByb2JsZW0KLSAqIDIwMDcwNzMwICAgMTk3MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBhc3MgcHJvZ3Jlc3MgbW9uaXRvciB0byB1bmRvIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZENvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucmVnaXN0cnkuV2lkZ2V0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLQotcHVibGljIGNsYXNzIFdpemFyZFBhZ2VNYW5hZ2VyIGV4dGVuZHMgU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXIKLXsKLSAgcHJpdmF0ZSAgIFdpemFyZFBhZ2VGYWN0b3J5ICAgICAgcGFnZUZhY3RvcnlfOwotICBwcml2YXRlICAgSGFzaHRhYmxlICAgICAgICAgICAgICBwYWdlVGFibGVfOwotICBwcml2YXRlICAgSVdpemFyZCAgICAgICAgICAgICAgICB3aXphcmRfOwotICBwcm90ZWN0ZWQgU2ltcGxlV2lkZ2V0UmVnaXN0cnkgICByZWdpc3RyeV87Ci0gIAotICAvLyBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgYW5kIHNldCBieSBvdXIgbWV0aG9kcyB3aGljaCBpcwotICAvLyB3aHkgdGhleSBhcmUgbm90IGluaXRpYWxpemVkIGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgcHJpdmF0ZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBjdXJyZW50UGFnZV87Ci0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgbmV4dFBhZ2VfOwotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIG5leHRQZWVrUGFnZV87Ci0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgZmlyc3RQYWdlXzsKLSAgcHJpdmF0ZSBDb21tYW5kRnJhZ21lbnQgICAgICBsYXN0VW5kb0ZyYWdtZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICBmaXJzdEZyYWdtZW50XzsKLSAgCi0gIHByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHdpZGdldEZhY3RvcnlfOwotICBwcml2YXRlIFN0YWNrICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGFja187Ci0gIHByaXZhdGUgU3RhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YWNrU3RhY2tfOwotICBwcml2YXRlIEhhc2h0YWJsZSAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRUYWJsZV87Ci0gIHByaXZhdGUgV2lkZ2V0UmVnaXN0cnkgICAgICAgICAgICAgICAgIHdpZGdldFJlZ2lzdHJ5XzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0RmFjdG9yeVRhYmxlXzsKLSAgICAKLSAgcHVibGljIFdpemFyZFBhZ2VNYW5hZ2VyKCBTaW1wbGVXaWRnZXRSZWdpc3RyeSAgcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l6YXJkUGFnZUZhY3RvcnkgICAgIHBhZ2VGYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElXaXphcmQgICAgICAgICAgICAgICB3aXphcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUZsb3dNYW5hZ2VyICAgICAgIGRhdGFNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICBlbnZpcm9ubWVudCApCi0gIHsgCi0gICAgc3VwZXIoIGVudmlyb25tZW50LCBkYXRhTWFuYWdlciApOyAgCi0gICAgCi0gIAlwYWdlRmFjdG9yeV8gICAgICAgID0gcGFnZUZhY3Rvcnk7Ci0gIAlwYWdlVGFibGVfICAgICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOyAgCi0gIAlyZWdpc3RyeV8gICAgICAgICAgID0gcmVnaXN0cnk7Ci0gIAl3aXphcmRfICAgICAgICAgICAgID0gd2l6YXJkOwotCSAgd2lkZ2V0VGFibGVfICAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLQkgIHdpZGdldEZhY3RvcnlUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JICB3aWRnZXRSZWdpc3RyeV8gICAgID0gV2lkZ2V0UmVnaXN0cnkuaW5zdGFuY2UoKTsKLQkgIHdpZGdldFN0YWNrU3RhY2tfICAgPSBuZXcgU3RhY2soKTsKLSAgfQotICAKLSAgcHVibGljICBJV2l6YXJkUGFnZSBnZXRTdGFydGluZ1BhZ2UoKQotICB7Ci0gICAgaWYoIGZpcnN0UGFnZV8gPT0gbnVsbCApCi0gICAgewotICAgICAgZmlyc3RQYWdlXyA9IChQYWdlV2l6YXJkRGF0YUV2ZW50cylnZXROZXh0UGFnZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlyc3RQYWdlXzsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgcnVuRm9yd2FyZFRvTmV4dFN0b3AoKQotICB7ICAgIAotICAJZmlyc3RGcmFnbWVudF8gID0gdHJ1ZTsKLSAgCW5leHRQYWdlXyAgICAgICA9IG51bGw7Ci0gICAJCi0gIAlyZXR1cm4gc3VwZXIucnVuRm9yd2FyZFRvTmV4dFN0b3AoIGdldENvbnRhaW5lcigpICk7Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSBJV2l6YXJkQ29udGFpbmVyIGdldENvbnRhaW5lcigpCi0gIHsKLSAgICBJV2l6YXJkQ29udGFpbmVyIGNvbnRhaW5lciA9IHdpemFyZF8uZ2V0Q29udGFpbmVyKCk7Ci0gICAgCi0gICAgaWYoIGNvbnRhaW5lciA9PSBudWxsIHx8IGNvbnRhaW5lci5nZXRDdXJyZW50UGFnZSgpID09IG51bGwgKQotICAgIHsKLSAgICAgIGNvbnRhaW5lciA9IG51bGw7Ci0gICAgfSAgIAotICAgIAotICAgIHJldHVybiBjb250YWluZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXRDdXJyZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY3VycmVudFBhZ2VfOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIGhhc05leHRQYWdlKCkKLSAgewkKLQkgCi0gICAgbmV4dFBlZWtQYWdlXyA9IG51bGw7Ci0gICAgCi0JdHJ5Ci0JewotICAJbmV4dFBlZWtQYWdlXyA9IGdldE5leHRQYWdlSW5Hcm91cCggd2lkZ2V0RmFjdG9yeV8sIHdpZGdldFN0YWNrXywgZmFsc2UgKTsKLQkJCi0JICBpZiggbmV4dFBlZWtQYWdlXyA9PSBudWxsICkKLQkgIHsKLQkgICAgLy8gSWYgYSBwYWdlIGlzIGZvdW5kIG5leHRQYWdlXyB3aWxsIGJlIHNldCB0byBpdHMgdmFsdWUgaW4gdGhlIG1ldGhvZCBiZWxvdy4KLSAgCSAgICBlbmdpbmVfLnBlZWtGb3J3YXJkVG9OZXh0U3RvcCgpOwotCSAgfQotCX0KLQljYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JewotCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLSAgCQotICAgIHJldHVybiBuZXh0UGVla1BhZ2VfICE9IG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZSgpCi0gIHsgIAkKLQl0cnkKLQl7ICAgIAotICAJLy8gTmVlZCB0byBleHRlcm5hbGl6ZSB0aGUgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSBzbyB0aGF0Ci0gIAkvLyB3aGVuIHdlIG1vdmUgZm9yd2FyZCBiZWxvdyB0aGUgZGF0YSBpcyBhdmFpbGFibGUuCi0gIAlpZiggY3VycmVudFBhZ2VfICE9IG51bGwgKSBjdXJyZW50UGFnZV8uZ2V0RGF0YUV2ZW50cygpLmV4dGVybmFsaXplKCk7Ci0gIAkKLSAgICBpZiggZW52aXJvbm1lbnRfLmdldExvZygpLmlzRW5hYmxlZCgpICkKLSAgICB7Ci0gICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgIndzX2R0X2NtZF9lbmdpbmUiLCA1MDEwLCB0aGlzLCAiQ21kIHN0YWNrIGR1bXA6IiwgZW5naW5lXyApOwotICAgIH0KLSAgICAKLQkgIG5leHRQYWdlXyA9IGdldE5leHRQYWdlSW5Hcm91cCggd2lkZ2V0RmFjdG9yeV8sIHdpZGdldFN0YWNrXywgdHJ1ZSApOwotCQotCSAgaWYoIG5leHRQYWdlXyA9PSBudWxsICkKLQkgIHsKLQkgICAgd2lkZ2V0RmFjdG9yeV8gPSBudWxsOwotCSAgICB3aWRnZXRTdGFja18gICA9IG51bGw7Ci0JCQotICAJICBJU3RhdHVzIHN0YXR1cyA9IHJ1bkZvcndhcmRUb05leHRTdG9wKCk7Ci0gIAkKLSAgCSAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IgKQotICAJICB7Ci0gIAkgICAgLy8gQW4gZXJyb3IgaGFzIG9jY3VyZWQgc28gd2UgbmVlZCB1bmRvIHRvIHRoZSBwcmV2aW91cyBzdG9wIHBvaW50LgotICAJICAgIHVuZG9Ub0xhc3RQYWdlKCk7Ci0gIAkgIH0KLQkgIH0KLQkKLSAgCWlmKCBuZXh0UGFnZV8gIT0gbnVsbCApIG5leHRQYWdlXy5zZXRXaXphcmQoIHdpemFyZF8gKTsKLSAgCSAgCQotICAJcmV0dXJuIG5leHRQYWdlXzsKLQl9Ci0JY2F0Y2goIFRocm93YWJsZSBleGMgKQotCXsKLQkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsJCi0JfQotCQotCXJldHVybiBudWxsOwotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVBhZ2VWaXNpYmxlKCBQYWdlV2l6YXJkRGF0YUV2ZW50cyBwYWdlLCBib29sZWFuIGlzUGFnZVZpc2libGUgKQotICB7Ci0gICAgaWYoICFpc1BhZ2VWaXNpYmxlICYmIHBhZ2UgPT0gZmlyc3RQYWdlXyAmJiBwYWdlID09IGN1cnJlbnRQYWdlXyApCi0gICAgewotICAgICAgLy8gV2UgYXJlIG1vdmluZyBiYWNrIG9uZSBwYWdlIGZyb20gdGhlIGZpcnN0IHBhZ2UuICBUaGlzIGNhbid0IGhhcHBlbiB3aXRoIHBvcHVwIHdpemFyZHMKLSAgICAgIC8vIHNpbmNlIHRoZSBwcmV2aW91cyBidXR0b24gd291bGQgYmUgZ3JleWVkIG91dC4gIEJ1dCB3aGVuIHRoZSBuZXcgd2l6YXJkIGxhdW5jaGVzIHRoaXMgd2l6YXJkCi0gICAgICAvLyB0aGUgcHJldmlvdXMgYnV0dG9uIGlzIG5vdCBncmV5ZWQgb3V0IGFuZCBicmluZ3MgdGhlIHVzZXIgYmFjayB0byB0aGUgbGlzdCB3aXphcmRzIHRvIHNlbGVjdC4KLSAgICAgIC8vIFRoZXJlZm9yZSwgd2UgbXVzdCB1bndpbmQgdGhlIGNvbW1hbmQgZW5naW5lIGFuZCBnZXQgcmVhZHkgZm9yIHRoZSB1c2VyIHRvIGludm9rZSB0aGlzIHdpemFyZCAKLSAgICAgIC8vIGFnYWluLiAgV2UgYXJlIGFzc3VtaW5nIGhlcmUgdGhhdCB0aGUgZmlyc3QgcGFnZSBpcyBuZXZlciBwYXJ0IG9mIGEgd2lkZ2V0IGdyb3VwIQotICAJICB1bmRvVG9MYXN0UGFnZSgpOwkgIAotICAgICAgY3VycmVudFBhZ2VfID0gbnVsbDsKLSAgICAgIGZpcnN0UGFnZV8gICA9IG51bGw7Ci0gICAgfQotICAJaWYoIGN1cnJlbnRQYWdlXyAhPSBudWxsICYmIHBhZ2UgPT0gY3VycmVudFBhZ2VfLmdldFByZXZpb3VzUGFnZSgpICYmIGlzUGFnZVZpc2libGUgKQotICAJewotICAJICAvLyBXZSBhcmUgbW92aW5nIGJhY2sgb25lIHBhZ2UuCi0gIAkgIC8vIE5vdGU6IHdlIGRvbid0IGludGVybmFsaXplIHRoZSBwcmV2aW91cyBwYWdlIGFuZCB3ZSBkbyBub3QgZXh0ZXJuYWxpemUgdGhlIGN1cnJlbnQgcGFnZS4KLSAgCSAgLy8gICAgICAgd2UgYXJlIGJhc2ljYWxseSBqdXN0IGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSB3aXRob3V0IHJldHJpZXZpbmcgaXRzIHN0YXRlIGFuZAotICAJICAvLyAgICAgICBtb3ZpbmcgdG8gdGhlIHByZXZpb3VzIHBhZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgaXRzIHN0YXRlIHNldC4KLQkKLQkgICAgaWYoIHdpZGdldEZhY3RvcnlfICE9IG51bGwgKQotCSAgICB7Ci0JCSAgICBpZiggd2lkZ2V0U3RhY2tfLnNpemUoKSA+IDAgKQotCQkgICAgewotCQkgICAgICB3aWRnZXRTdGFja18ucG9wKCk7Ci0JCSAgICB9Ci0JCQotCQkgICAgaWYoIHdpZGdldFN0YWNrXy5zaXplKCkgPT0gMCApCi0JCSAgICB7Ci0JCSAgICAgIHdpZGdldEZhY3RvcnlfID0gbnVsbDsKLQkJICAgICAgd2lkZ2V0U3RhY2tfID0gbnVsbDsKLQkJICAgICAgd2lkZ2V0U3RhY2tTdGFja18ucG9wKCk7Ci0JCSAgICB9Ci0JICAgIH0KLQkgIAotCSAgICBpZiggd2lkZ2V0RmFjdG9yeV8gPT0gbnVsbCApCi0JICAgIHsKLSAgCSAgICB1bmRvVG9MYXN0UGFnZSgpOwotCSAgICB9Ci0JICAKLSAgICAgIC8vIFNpbmNlIHdlIGFyZSBtb3ZpbmcgYmFja3dhcmRzIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZQotICAgICAgLy8gY3VycmVudCBwYWdlIG9iamVjdCBmcm9tIHRoZSBtYXBwaW5nIHRhYmxlLgotICAgICAgZGF0YU1hbmFnZXJfLnVucHJvY2VzcyggY3VycmVudFBhZ2VfLmdldERhdGFFdmVudHMoKSApOwotICAgICAgCi0gIAkgIGN1cnJlbnRQYWdlXyA9IHBhZ2U7Ci0gIAl9CQotICAJZWxzZSBpZiggaXNQYWdlVmlzaWJsZSApCi0gIAl7Ci0JICAgIHRyeQotCSAgICB7Ci0gIAkgICAgLy8gV2UgYXJlIG1vdmluZyBmb3J3YXJkIG9uZSBwYWdlLgotICAJICAgIFdpZGdldERhdGFFdmVudHMgZGF0YUV2ZW50cyA9IHBhZ2UuZ2V0RGF0YUV2ZW50cygpOwotICAJICAKLSAgCSAgICBkYXRhTWFuYWdlcl8ucHJvY2VzcyggZGF0YUV2ZW50cyApOyAgLy8gUHVzaCBtb2RlbCBkYXRhIGludG8gdGhlIG5ldyBwYWdlLgotICAJICAgIGRhdGFFdmVudHMuaW50ZXJuYWxpemUoKTsKLSAgCSAgCi0gIAkgICAgcGFnZS52YWxpZGF0ZVBhZ2VUb1N0YXR1cygpOyAgCSAgCi0JICAgIH0KLQkgICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotCSAgICB7Ci0JCSAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQkgICAgZmluYWxseQotCSAgICB7Ci0JICAJICBpZiggY3VycmVudFBhZ2VfICE9IG51bGwgKSBwYWdlLnNldFByZXZpb3VzUGFnZSggY3VycmVudFBhZ2VfICk7Ci0JICAgIAkgIAotCSAgCSAgY3VycmVudFBhZ2VfID0gcGFnZTsgIAotCSAgICB9Ci0gIAl9Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7IAkKLSAgCS8vIFdlIG5lZWQgdG8gc2ltdWxhdGUgdGhlIG5leHQgYnV0dG9uIGJlaW5nIHByZXNzZWQgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgcGFnZXMuCi0gIAkvLyBJZiBhbiBlcnJvciBvY2N1cnMgd2Ugd2lsbCByZXR1cm4gZmFsc2UgYW5kIHJlc2V0IHRoZSBjb21tYW5kIHN0YWNrIGJhY2sgb3VyIG9yaWdpbmFsIHN0YXRlLgotICAJYm9vbGVhbiAgICAgICAgICAgICAgZG9uZU9rICAgICAgICAgPSB0cnVlOwotICAJUGFnZVdpemFyZERhdGFFdmVudHMgc3RhcnRQYWdlICAgICAgPSBjdXJyZW50UGFnZV87Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgc3RhY2tTdGFja1NpemUgPSB3aWRnZXRTdGFja1N0YWNrXy5zaXplKCk7Ci0gICAgCi0gICAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGN1cnJlbnRGYWN0b3J5ID0gd2lkZ2V0RmFjdG9yeV87Ci0gIAkKLSAgCS8vIEV4dGVybmFsaXplIHRoZSBjdXJyZW50IHBhZ2UuCi0gIAljdXJyZW50UGFnZV8uZ2V0RGF0YUV2ZW50cygpLmV4dGVybmFsaXplKCk7Ci0gIAkKLSAgCS8vIExvb3AgdGhyb3VnaCBzdWJzZXF1ZW50IHBhZ2VzLgotICAJZG8KLSAgCXsgIAkgIAotICAJICBJU3RhdHVzIHN0YXR1cyA9IHJ1bkZvcndhcmRUb05leHRTdG9wKCk7CSAgCi0gIAkgIAotICAJICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gIAkgIHsKLSAgCSAgCS8vIEFuIGVycm9yIG9jY3VyZWQgaW4gb25lIG9mIHRoZSBjb21tYW5kcy4KLSAgCSAgCWRvbmVPayA9IGZhbHNlOwotICAJICB9Ci0gIAl9Ci0gIAl3aGlsZSggbmV4dFBhZ2VfICE9IG51bGwgJiYgZG9uZU9rKTsKLSAgCQotICAJaWYoICFkb25lT2sgKQotICAJewotICAJICAvLyBBbiBlcnJvciBvY2N1cmVkLCBzbyB3ZSBuZWVkIHRvIHJldHVybiB0aGUgY29tbWFuZCBzdGFjayB0byBpdCdzCi0gIAkgIC8vIG9yZ2luYWwgc3RhdGUuCi0gIAkgIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UgPSBudWxsOwotICAJICBib29sZWFuICAgICAgICAgICAgICBkb25lID0gZmFsc2U7Ci0gIAkgIAotICAJICBkbwotICAJICB7Ci0gIAkgICAgZG9uZSA9IHJ1blVuZG9Ub05leHRTdG9wKCBnZXRDb250YWluZXIoKSApOwotICAJICAgIHBhZ2UgPSBnZXRQYWdlKCBsYXN0VW5kb0ZyYWdtZW50XyApOwotICAgICAgICAKLSAgICAgICAgaWYoIHBhZ2UgPT0gbnVsbCAmJiAKLSAgICAgICAgICAgIGN1cnJlbnRGYWN0b3J5ICE9IG51bGwgJiYgCi0gICAgICAgICAgICBsYXN0VW5kb0ZyYWdtZW50XyAhPSBudWxsICYmCi0gICAgICAgICAgICBnZXRXaWRnZXRGYWN0b3J5KCBsYXN0VW5kb0ZyYWdtZW50Xy5nZXRJZCgpICkgPT0gY3VycmVudEZhY3RvcnkgKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVGhlIGN1cnJlbnQgd2lkZ2V0IGZhY3RvcnkgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXN0IGZyYWdtZW50IHRoYXQgd2FzIHVuZG9uZS4KLSAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIGFyZSBiYWNrIHRvIHdoZXJlIHdlIHN0YXJ0ZWQuCi0gICAgICAgICAgZG9uZSA9IHRydWU7ICAgIAotICAgICAgICAgIAotICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHdpZGdldFN0YWNrU3RhY2sgYmFjayB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGJlZm9yZQotICAgICAgICAgIC8vIHJ1bm5pbmcgZm9yd2FyZC4KLSAgICAgICAgICB3aWRnZXRTdGFja1N0YWNrXy5zZXRTaXplKCBzdGFja1N0YWNrU2l6ZSApOwotICAgICAgICAgIAotICAgICAgICAgIFN0YWNrRW50cnkgZW50cnkgPSAoU3RhY2tFbnRyeSl3aWRnZXRTdGFja1N0YWNrXy5wZWVrKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgd2lkZ2V0RmFjdG9yeV8gPSBlbnRyeS5mYWN0b3J5XzsKLSAgICAgICAgICB3aWRnZXRTdGFja18gICA9IGVudHJ5LnN0YWNrXzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBwYWdlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgd2lkZ2V0RmFjdG9yeV8gPSBudWxsOwotICAgICAgICAgIHdpZGdldFN0YWNrXyA9IG51bGw7Ci0gICAgICAgIH0KLSAgCSAgfQotICAJICB3aGlsZSggcGFnZSAhPSBzdGFydFBhZ2UgJiYgIWRvbmUgKTsgCSAgCi0gIAl9Ci0gIAkKLSAgCXJldHVybiBkb25lT2s7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1DYW5jZWwoKQotICB7Ci0gICAgSVdpemFyZENvbnRhaW5lciBjb250YWluZXIgPSBnZXRDb250YWluZXIoKTsKLSAgICAKLSAgCXdoaWxlKCAhcnVuVW5kb1RvTmV4dFN0b3AoIGNvbnRhaW5lciApICl7fQotICAJCi0gIAlyZXR1cm4gdHJ1ZTsKLSAgfQotICAgIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwZWVrRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsgICAgIAkKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBmcmFnbWVudCBpcyBpbiBvdXIgcGFnZSB0YWJsZS4KLSAgICBuZXh0UGVla1BhZ2VfID0gZ2V0UGFnZSggZnJhZ21lbnQgKTsKLSAgICAgICAgICAJCi0JICBpZiggbmV4dFBlZWtQYWdlXyA9PSBudWxsICkKLQkgIHsKLQkgICAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnkgPSBnZXRXaWRnZXRGYWN0b3J5KCBmcmFnbWVudC5nZXRJZCgpICk7Ci0JICAKLQkgICAgaWYoIGZhY3RvcnkgIT0gbnVsbCApCi0JICAgIHsKLQkJICAgIG5leHRQZWVrUGFnZV8gPSBnZXROZXh0UGFnZUluR3JvdXAoIGZhY3RvcnksIG51bGwsIGZhbHNlICk7ICAKLQkgICAgfQotCSAgfQotCQotICAgIHJldHVybiBuZXh0UGVla1BhZ2VfID09IG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIG5leHRGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIC8vIElmIHRoZSBzdXBlciBjbGFzcyBuZXh0RnJhZ21lbnQgd2FudCB1cyB0byBzdG9wIHRoZW4gd2Ugd2lsbCBzdG9wIHJpZ2h0IGF3YXkuCi0gICAgaWYoICFzdXBlci5uZXh0RnJhZ21lbnQoIGZyYWdtZW50ICkgKSByZXR1cm4gZmFsc2U7Ci0gICAgCi0gIAkvLyBUaGUgZmlyc3QgZnJhZ21lbnQgaXMgZWl0aGVyIGF0IHRoZSBzdGFydCBvZiB0aGUgd2l6YXJkCi0gIAkvLyBvciBpdCBpcyBvbiBhIHdpemFyZCBwYWdlLiAgSW4gZWl0aGVyIGNhc2Ugd2UgZG8gbm90IHdhbnQgCi0gIAkvLyB0byBzdG9wIGlmIGEgcGFnZSBpcyBmb3VuZC4KLSAgCWlmKCBmaXJzdEZyYWdtZW50XyApCi0gIAl7Ci0gIAkgIGZpcnN0RnJhZ21lbnRfID0gZmFsc2U7Ci0gIAl9Ci0gIAllbHNlCi0gIAl7Ci0JICAgIHdpZGdldEZhY3RvcnlfID0gZ2V0V2lkZ2V0RmFjdG9yeSggZnJhZ21lbnQuZ2V0SWQoKSApOwotCSAgCi0JICAgIGlmKCB3aWRnZXRGYWN0b3J5XyAhPSBudWxsICkKLQkgICAgewotCQkgICAgd2lkZ2V0U3RhY2tfID0gbmV3IFN0YWNrKCk7Ci0gICAgICAgIAotICAgICAgICBuZXh0UGFnZV8gPSBnZXROZXh0UGFnZUluR3JvdXAoIHdpZGdldEZhY3RvcnlfLCB3aWRnZXRTdGFja18sIHRydWUgKTsKLQkJCi0gICAgICAgIGlmKCBuZXh0UGFnZV8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSBmb3VuZCBhIHdpZGdldCBjb250cmlidXRvciBmb3IgdGhpcyBmcmFnbWVudCwgYnV0IG5vIHBhZ2Ugd2FzIGRlbGl2ZXJlZCBmb3IgaXQuCi0gICAgICAgICAgLy8gV2Ugd2lsbCB0aGVyZWZvcmUsIG5vdCBwdXQgaXQgb24gb3VyIHN0YWNrIG9mIHdpZGdldCBzdGFja3MuCi0gICAgICAgICAgd2lkZ2V0U3RhY2tfID0gbnVsbDsKLSAgICAgICAgICB3aWRnZXRGYWN0b3J5XyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0JCSAgICAgIFN0YWNrRW50cnkgZW50cnkgPSBuZXcgU3RhY2tFbnRyeSgpOwotCQkKLQkJICAgICAgZW50cnkuZmFjdG9yeV8gPSB3aWRnZXRGYWN0b3J5XzsKLQkJICAgICAgZW50cnkuc3RhY2tfICAgPSB3aWRnZXRTdGFja187Ci0JCSAgICAgIHdpZGdldFN0YWNrU3RhY2tfLnB1c2goIGVudHJ5ICk7Ci0gICAgICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLSAgCSAgICBuZXh0UGFnZV8gPSBnZXRQYWdlKCBmcmFnbWVudCApOwotCSAgICB9Ci0gIAl9ICAJICAJCi0gIAkKLSAgICByZXR1cm4gbmV4dFBhZ2VfID09IG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHVuZG9GcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAJbGFzdFVuZG9GcmFnbWVudF8gPSBmcmFnbWVudDsKLSAgCQotICAJcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIAotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldE5leHRQYWdlSW5Hcm91cCggSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnksIFN0YWNrIHdpZGdldFN0YWNrLCBib29sZWFuIHB1c2hOZXdXaWRnZXQgKQotICB7Ci0JICBQYWdlV2l6YXJkRGF0YUV2ZW50cyBwYWdlID0gbnVsbDsKLQkKLQkgIGlmKCBmYWN0b3J5ICE9IG51bGwgKQotCSAgewkgIAotCSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBuZXdXaWRnZXQgPSBudWxsOwotCQkgIAotCSAgICBpZiggd2lkZ2V0U3RhY2sgPT0gbnVsbCB8fCB3aWRnZXRTdGFjay5zaXplKCkgPT0gMCApCi0JICAgIHsKLQkJICAgIG5ld1dpZGdldCA9IGZhY3RvcnkuZ2V0Rmlyc3ROYW1lZFdpZGdldCgpOyAgIAotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotCQkgICAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgY3VycmVudFdpZGdldCA9IChJTmFtZWRXaWRnZXRDb250cmlidXRvcil3aWRnZXRTdGFjay5wZWVrKCk7Ci0JCSAgICBuZXdXaWRnZXQgPSBmYWN0b3J5LmdldE5leHROYW1lZFdpZGdldCggY3VycmVudFdpZGdldCApOyAKLQkgICAgfQotCQkgIAotCSAgICBpZiggbmV3V2lkZ2V0ICE9IG51bGwgKQotCSAgICB7Ci0JCSAgICBwYWdlID0gZ2V0UGFnZSggbmV3V2lkZ2V0ICk7Ci0JCQotCQkgICAgaWYoIHB1c2hOZXdXaWRnZXQgKQotCQkgICAgewotCQkgICAgICB3aWRnZXRTdGFjay5wdXNoKCBuZXdXaWRnZXQgKTsKLQkJICAgIH0KLQkgICAgfQotCSAgfQotCQkKLQkgIHJldHVybiBwYWdlOyAgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCB1bmRvVG9MYXN0UGFnZSgpCi0gIHsKLSAgICBib29sZWFuIHN0YWNrRW1wdHkgID0gZmFsc2U7Ci0JICBib29sZWFuIGRvbmVVbmRvaW5nID0gZmFsc2U7Ci0gICAgCi0JICB3aGlsZSggIWRvbmVVbmRvaW5nICkKLQkgIHsKLQkgICAgc3RhY2tFbXB0eSA9IHJ1blVuZG9Ub05leHRTdG9wKCBnZXRDb250YWluZXIoKSApOwotCSAgCi0JICAgIElXaXphcmRQYWdlIHBhZ2UgPSBudWxsOwotCSAgCi0JICAgIGlmKCBsYXN0VW5kb0ZyYWdtZW50XyAhPSBudWxsICkKLQkgICAgewotCSAgICAgIHBhZ2UgPSBnZXRQYWdlKCBsYXN0VW5kb0ZyYWdtZW50XyApOwotCQkKLQkgICAgICBpZiggcGFnZSA9PSBudWxsICkKLQkgICAgICB7Ci0JCSAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIGdyb3VwIHBhZ2UgZnJhZ21lbnQgd2FzIGZvdW5kLgotCQkgICAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSA9IGdldFdpZGdldEZhY3RvcnkoIGxhc3RVbmRvRnJhZ21lbnRfLmdldElkKCkgKTsKLQkJICAKLQkJICAgICAgaWYoIGZhY3RvcnkgIT0gbnVsbCAmJiAhd2lkZ2V0U3RhY2tTdGFja18uZW1wdHkoKSApCi0JCSAgICAgIHsKLQkJICAgICAgICBTdGFja0VudHJ5IGVudHJ5ID0gKFN0YWNrRW50cnkpd2lkZ2V0U3RhY2tTdGFja18ucGVlaygpOwotCQkJCi0gICAgICAgICAgICBpZiggZW50cnkuZmFjdG9yeV8gPT0gZmFjdG9yeSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIFdlIGZvdW5kIHRoZSBmYWN0b3J5IGZvciB0aGUgZW50cnkgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCi0JCSAgICAgICAgICB3aWRnZXRGYWN0b3J5XyA9IGVudHJ5LmZhY3RvcnlfOwotCQkgICAgICAgICAgd2lkZ2V0U3RhY2tfICAgPSBlbnRyeS5zdGFja187CQotCQkJCi0JCSAgICAgICAgICBpZiggd2lkZ2V0U3RhY2tfICE9IG51bGwgJiYgIXdpZGdldFN0YWNrXy5lbXB0eSgpICkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgY3VycmVudFdpZGdldCA9IChJTmFtZWRXaWRnZXRDb250cmlidXRvcil3aWRnZXRTdGFja18ucGVlaygpOwotCQkJCi0JCSAgICAgICAgICAgIHBhZ2UgPSBnZXRQYWdlKCBjdXJyZW50V2lkZ2V0ICk7Ci0JCSAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0JCSAgICAgIH0KLQkgICAgICB9Ci0JICAgIH0KLQkgIAotCSAgICBkb25lVW5kb2luZyA9IHBhZ2UgIT0gbnVsbCB8fCBzdGFja0VtcHR5OwotCSAgfQotICB9Ci0gIAotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBmcmFnbWVudCBpcyBpbiBvdXIgcGFnZSB0YWJsZS4KLSAgCVBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UgPSAoUGFnZVdpemFyZERhdGFFdmVudHMpcGFnZVRhYmxlXy5nZXQoIGZyYWdtZW50ICk7IAotICAJU3RyaW5nICAgICAgaWQgICA9IGZyYWdtZW50LmdldElkKCk7ICAgICAgCQotICAgICAgICAgIAkKLSAgICBpZiggcGFnZSA9PSBudWxsICYmIGlkICE9IG51bGwgKQotICAgIHsKLSAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZyYWdtZW50IGlkIGlzIGluIHRoZSByZWdpc3RyeS4KLSAgICAgIFBhZ2VJbmZvIHBhZ2VJbmZvID0gcmVnaXN0cnlfLmdldFBhZ2VJbmZvKCBpZCApOyAgICAgICAgICAJICAKLSAgICAgICAgICAgICAgCi0gICAgICBpZiggcGFnZUluZm8gIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIHBhZ2UgPSBwYWdlRmFjdG9yeV8uZ2V0UGFnZSggcGFnZUluZm8sIHRoaXMgKTsKLSAgICAgICAgcGFnZVRhYmxlXy5wdXQoIGZyYWdtZW50LCBwYWdlICk7ICAgICAgICAgICAgCQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwYWdlOwotICB9ICAgIAotICAKLSAgcHJpdmF0ZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBnZXRQYWdlKCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXQgKQotICB7Ci0JICBQYWdlV2l6YXJkRGF0YUV2ZW50cyBwYWdlID0gKFBhZ2VXaXphcmREYXRhRXZlbnRzKXdpZGdldFRhYmxlXy5nZXQoIHdpZGdldCApOwotCi0JICBpZiggcGFnZSA9PSBudWxsICkKLQkgIHsKLQkgICAgUGFnZUluZm8gcGFnZUluZm8gPSBuZXcgUGFnZUluZm8od2lkZ2V0LmdldFRpdGxlKCksIHdpZGdldC5nZXREZXNjcmlwdGlvbigpLCB3aWRnZXQuZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgKTsKLQkgIAotCSAgICBwYWdlID0gcGFnZUZhY3RvcnlfLmdldFBhZ2UoIHBhZ2VJbmZvLCB0aGlzICk7Ci0JICAgIHdpZGdldFRhYmxlXy5wdXQoIHdpZGdldCwgcGFnZSApOwotCSAgfQotCQotCSAgcmV0dXJuIHBhZ2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldEZhY3RvcnkoIFN0cmluZyBpZCApCi0gIHsKLQkgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5ID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSl3aWRnZXRGYWN0b3J5VGFibGVfLmdldCggaWQgKTsKLQkKLQkgIGlmKCBmYWN0b3J5ID09IG51bGwgKQotCSAgewotCSAgICAvLyBUaGUgZmFjdG9yeSBpcyBub3QgaW4gb3VyIHRhYmxlIHNvIHdlIHdpbGwgdHJ5IHRoZSByZWdpc3RyeS4KLQkgICAgZmFjdG9yeSA9IHdpZGdldFJlZ2lzdHJ5Xy5nZXRGYWN0b3J5KCBpZCApOwotCSAgCi0JICAgIGlmKCBmYWN0b3J5ICE9IG51bGwgKQotCSAgICB7Ci0JICAgICAgd2lkZ2V0RmFjdG9yeVRhYmxlXy5wdXQoIGlkLCBmYWN0b3J5ICk7Ci0JICAgICAgZmFjdG9yeS5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YU1hbmFnZXJfLmdldE1hcHBpbmdSZWdpc3RyeSgpICk7Ci0JCSAgICBkYXRhTWFuYWdlcl8ucHJvY2VzcyggZmFjdG9yeSApOwotCSAgICB9Ci0JICB9Ci0JICBlbHNlCi0JICB7Ci0JICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBmYWN0b3J5ICk7Ci0JICB9Ci0JCi0JICByZXR1cm4gZmFjdG9yeTsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBTdGFja0VudHJ5Ci0gIHsKLSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeV87Ci0JICBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvcG9wdXAvRHluYW1pY1BvcHVwV2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvcG9wdXAvRHluYW1pY1BvcHVwV2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMTc0OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL3BvcHVwL0R5bmFtaWNQb3B1cFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMyAgIDEyOTIzMiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDQxNyAgIDEzNjU5NiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDczMSAgIDEyMDM3OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRmllbGRzIG5vdCB2aXNpYmxlIGluIExhcmdlIGZvbnQgc2V0dGluZ3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlUG9wdXBQYWdlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaXphcmRQYWdlRmFjdG9yeTsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBwb3B1cCBkeW5hbWljIHdpemFyZHMuICBUaGUgcG9wdXBNZW51cyBleHRlbnNpb24gaXMgdXNlZAotICogdGhlIGNvbnRyaWJ1dGUgYSBwb3B1cCB0byBFY2xpcHNlLiAgVGhlIGNsYXNzIGluIHRoZSBhY3Rpb24gZWxlbWVudCBzaG91bGQgcmVmZXJlbmNlCi0gKiB0aGlzIER5bmFtaWNQb3B1cFdpemFyZCBjbGFzcy4gIFRoaXMgaWQgYXR0cmlidXRlIGluIHRoZSBhY3Rpb24gZWxlbWVudCBzaG91bGQgY29udGFpbgotICogYW4gaWQgdGhhdCByZWZlcmVuY2VzIGEgZHluYW1pY1dpemFyZCBleHRlbnNpb24gcG9pbnQuICBUaGlzIGlzIGhvdyB0aGUgRHluYW1pY1BvcHVwV2l6YXJkCi0gKiBjbGFzcyBrbm93cyB3aGljaCB3aXphcmQgdG8gZGlzcGxheS4KLSAqICAgCi0gKiBOb3RlOiB0aGUgaWQgYXR0cmlidXRlIGluIHRoZSBvYmplY3RDb250cmlidXRpb24gZWxlbWVudCByZWZlcnMgdG8gYW4KLSAqICAgICAgIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGV4dGVuc2lvbiBwb2ludC4gIFRoZSBpZHMgaW4gb2JqZWN0Q29udHJpYnV0aW9uCi0gKiAgICAgICBlbGVtZW50IGFuZCB0aGUgYWN0aW9uIGVsZW1lbnQgbmVlZCBub3QgYmUgdGhlIHNhbWUgYXMgdGhleSBhcmUgaW4gdGhlCi0gKiAgICAgICBleGFtcGxlIGJlbG93LgotICoKLSAqPHByZT4KLSAqICAgJmx0O2V4dGVuc2lvbgotICogICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyImZ3Q7Ci0gKiZsdDshLS0gSUZpbGUgKi53c2RsIHBvcHVwIG1lbnUgLS0mZ3Q7Ci0gKiAgICAgJmx0O29iamVjdENvbnRyaWJ1dGlvbgotICogICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAqICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiCi0gKiAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCImZ3Q7Ci0gKiZsdDshLS0gV1NETCBUbyBKYXZhIEJlYW4gUHJveHkgLS0mZ3Q7Ci0gKiAgICAgICAgJmx0O2FjdGlvbgotICogICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gKiAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAqICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gKiAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCImZ3Q7Ci0gKiAgICAgICAgJmx0Oy9hY3Rpb24mZ3Q7Ci0gKiAgICAgJmx0Oy9vYmplY3RDb250cmlidXRpb24mZ3Q7Ci0gKiAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0gKgotICogICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIiZndDsKLSAqICAgICAmbHQ7ZHluYW1pY1dpemFyZAotICogICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzY2xpZW50X3dpei5naWYiCi0gKiAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ2xpZW50V2lkZ2V0QmluZGluZyIKLSAqICAgICAgICAgICB0aXRsZT0iJVdJWkFSRF9USVRMRV9XU0MiCi0gKiAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCImZ3Q7Ci0gKiAgICAgJmx0Oy9keW5hbWljV2l6YXJkJmd0OwotICogICZsdDsvZXh0ZW5zaW9uJmd0OwotICo8L3ByZT4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEeW5hbWljUG9wdXBXaXphcmQgZXh0ZW5kcyBEeW5hbWljV2l6YXJkIGltcGxlbWVudHMgSUFjdGlvbkRlbGVnYXRlCi17Ci0gIHByaXZhdGUgSVNlbGVjdGlvbiBzZWxlY3Rpb25fOwotICAKLSAgcHVibGljIER5bmFtaWNQb3B1cFdpemFyZCgpCi0gIHsKLQlzdXBlcigpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZCNnZXRXaXphcmRQYWdlRmFjdG9yeSgpCi0gICAqLwotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZUZhY3RvcnkgZ2V0V2l6YXJkUGFnZUZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVQb3B1cFBhZ2VGYWN0b3J5KCBnZXRJZCgpICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiAoKElDb25maWd1cmF0aW9uRWxlbWVudClvcmlnaW5hbEVsZW1lbnRfLmdldFBhcmVudCgpKS5nZXRBdHRyaWJ1dGUoICJpZCIgKTsgIAotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBJQWN0aW9uRGVsZWdhdGUjcnVuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIAotICB7Ci0gICAgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgPSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgaWQgICAgICA9IGdldElkKCk7Ci0gICAgCi0JaWYoIGNvbnRleHQuc2hvd0RpYWxvZyhpZCkgKQotCXsKLQkgIC8vIExhdW5jaCB0aGUgd2l6YXJkLgotCSAgaW5pdCggUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKSwgZ2V0U2VsZWN0aW9uKCkgKTsgIAotCSAgICAKLQkgIFdpemFyZERpYWxvZyBkaWFsb2c9IG5ldyBXaXphcmREaWFsb2coUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpLCB0aGlzKTsKLQkgIGRpYWxvZy5jcmVhdGUoKTsKLSAgICAKLSAgICBpZiggZ2V0U3RhcnRpbmdQYWdlKCkgIT0gbnVsbCApCi0gICAgewotCSAgICBkaWFsb2cub3BlbigpOwotICAgIH0KLQl9Ci0JZWxzZQotCXsKLQkgIGZpbmFsIFByb2dyZXNzTW9uaXRvckRpYWxvZyBtb25pdG9yID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotCSAgCi0JICB0cnkKLQkgIHsKLQkgICAgbW9uaXRvci5ydW4oIGZhbHNlLCBmYWxzZSwgbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yICkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgICBydW5IZWFkTGVzcyggZ2V0U2VsZWN0aW9uKCksIG1vbml0b3IgKTsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLQkgIH0KLQkgIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleGMgKQotCSAgeyAKLQkgIH0KLQkgIGNhdGNoKCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4YyApCi0JICB7Ci0JICB9Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogUnVucyBvbmx5IHRoZSBDb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhlIGR5bmFtaWMgd2l6YXJkLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGlvbiB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gZnJvbSB0aGUgdXNlci4KLSAgICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgdGhhdCB0aGlzIGV4ZWN1dGlvbiBzaG91bGQgdGFrZSBwbGFjZSBpbi4gIFRoaXMKLSAgICogICAgICAgICAgICAgICAgaXMgdXN1YWxseSBhIHByb2dyZXNzIGNvbnRleHQgc28gdGhhdCB0aGUgdXNlciBjYW4gZ2V0IGZlZWRiYWNrCi0gICAqICAgICAgICAgICAgICAgIG9uIGhvdyBleGVjdXRpb24gaXMgcHJvZ3Jlc3NpbmcuICBUaGUgY29udGV4dCBtYXkgYmUgbnVsbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bkhlYWRMZXNzKCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sIElSdW5uYWJsZUNvbnRleHQgY29udGV4dCApCi0gIHsKLQlQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0JRWNsaXBzZVN0YXR1c0hhbmRsZXIgICAgICAgaGFuZGxlciAgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0JRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgZW52aXJvbm1lbnQgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgcmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyICk7Ci0JICAgIAotCURhdGFNYXBwaW5nUmVnaXN0cnlJbXBsICAgIGRhdGFSZWdpc3RyeV8gICA9IG5ldyBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCgpOwkgICAgCi0JRGF0YUZsb3dNYW5hZ2VyICAgICAgICAgICAgZGF0YU1hbmFnZXIgICAgID0gbmV3IERhdGFGbG93TWFuYWdlciggZGF0YVJlZ2lzdHJ5XywgZW52aXJvbm1lbnQgKTsKLQlTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlciBtYW5hZ2VyICAgICAgICAgPSBuZXcgU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXIoZW52aXJvbm1lbnQsIGRhdGFNYW5hZ2VyICk7Ci0JCi0gICAgdHJ5Ci0gICAgewotICAgICAgY29tbWFuZFdpZGdldEJpbmRpbmdfID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKXdpemFyZEVsZW1lbnRfLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsKLSAgICB9Ci0gICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCSAgCi0JY29tbWFuZFdpZGdldEJpbmRpbmdfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhUmVnaXN0cnlfICk7Ci0JCi0JQ29tbWFuZEZyYWdtZW50IHJvb3RGcmFnbWVudCA9IGdldFJvb3RGcmFnbWVudCggc2VsZWN0aW9uLCBudWxsICk7Ci0JCi0JbWFuYWdlci5zZXRSb290RnJhZ21lbnQoIHJvb3RGcmFnbWVudCApOwotCW1hbmFnZXIucnVuRm9yd2FyZFRvTmV4dFN0b3AoIGNvbnRleHQgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSAKLSAgewotICAgICAgc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gcmVzdWx0ID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKTsKLSAgICAKLQlpZiggc2VsZWN0aW9uXyAhPSBudWxsKSAKLQl7CQotCSAgaWYoIHNlbGVjdGlvbl8gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApIAotCSAgewotCSAgICByZXN1bHQgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uXzsKLQkgIH0KLQl9Ci0JZWxzZSAKLQl7Ci0JICBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JICAKLQkgIGlmKCB3aW5kb3cgIT0gbnVsbCApIAotCSAgewotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkuZ2V0U2VsZWN0aW9uKCk7Ci0JCQotCQlpZiggc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gKSAKLQkJewotCQkgIHJlc3VsdCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0JCX0KLQkgIH0KLQl9Ci0JCi0JcmV0dXJuIHJlc3VsdDsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNlNjJiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJhbnQtc3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5MTgzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXJ1bnRpbWUKLXRlbXAuZm9sZGVyCi1lbnYuamFyCi1AZG90Ci1zcmMuemlwCi1lbnZzcmMuemlwCi1qYXZhQ29tcGlsZXIuZW52Lmphci5hcmdzCi1qYXZhQ29tcGlsZXIuYW50LWxpYl9hbnR0YXNrcy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmV4dGVybmFsVG9vbEJ1aWxkZXJzL2J1aWxkLWFudHRhc2tzLmxhdW5jaCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5leHRlcm5hbFRvb2xCdWlsZGVycy9idWlsZC1hbnR0YXNrcy5sYXVuY2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MGVlNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmV4dGVybmFsVG9vbEJ1aWxkZXJzL2J1aWxkLWFudHRhc2tzLmxhdW5jaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bGF1bmNoQ29uZmlndXJhdGlvbiB0eXBlPSJvcmcuZWNsaXBzZS5hbnQuQW50TGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuQVRUUl9MT0NBVElPTiIgdmFsdWU9IiR7d29ya3NwYWNlX2xvYzovb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2J1aWxkLWFudHRhc2tzLnhtbH0iLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLk1BSU5fVFlQRSIgdmFsdWU9Im9yZy5lY2xpcHNlLmFudC5pbnRlcm5hbC51aS5hbnRzdXBwb3J0LkludGVybmFsQW50UnVubmVyIi8+Ci08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkFUVFJfTEFVTkNIX0lOX0JBQ0tHUk9VTkQiIHZhbHVlPSJmYWxzZSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuUFJPSkVDVF9BVFRSIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ii8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9pYm0tc2RrLWphdmE1LTIwMDYwOTEyIi8+Ci08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuQVRUUl9UUklHR0VSU19DT05GSUdVUkVEIiB2YWx1ZT0idHJ1ZSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuQ0xBU1NQQVRIX1BST1ZJREVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LnVpLkFudENsYXNzcGF0aFByb3ZpZGVyIi8+Ci08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmFudC51aS5ERUZBVUxUX1ZNX0lOU1RBTEwiIHZhbHVlPSJ0cnVlIi8+Ci08bGlzdEF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuTUFQUEVEX1JFU09VUkNFX1RZUEVTIj4KLTxsaXN0RW50cnkgdmFsdWU9IjEiLz4KLTwvbGlzdEF0dHJpYnV0ZT4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlNPVVJDRV9QQVRIX1BST1ZJREVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LnVpLkFudENsYXNzcGF0aFByb3ZpZGVyIi8+Ci08bGlzdEF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuTUFQUEVEX1JFU09VUkNFX1BBVEhTIj4KLTxsaXN0RW50cnkgdmFsdWU9Ii9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQtYW50dGFza3MueG1sIi8+Ci08L2xpc3RBdHRyaWJ1dGU+Ci08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuYXBwZW5kRW52aXJvbm1lbnRWYXJpYWJsZXMiIHZhbHVlPSJ0cnVlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0icHJvY2Vzc19mYWN0b3J5X2lkIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LnVpLnJlbW90ZUFudFByb2Nlc3NGYWN0b3J5Ii8+Ci08L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTI4MWQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52PC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkV4dGVybmFsVG9vbEJ1aWxkZXI8L25hbWU+Ci0JCQk8dHJpZ2dlcnM+ZnVsbCxpbmNyZW1lbnRhbCw8L3RyaWdnZXJzPgotCQkJPGFyZ3VtZW50cz4KLQkJCQk8ZGljdGlvbmFyeT4KLQkJCQkJPGtleT5MYXVuY2hDb25maWdIYW5kbGU8L2tleT4KLQkJCQkJPHZhbHVlPiZsdDtwcm9qZWN0Jmd0Oy8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvYnVpbGQtYW50dGFza3MubGF1bmNoPC92YWx1ZT4KLQkJCQk8L2RpY3Rpb25hcnk+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUyZjIwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gTWF5IDA3IDIzOjE0OjU3IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2YzFjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNzoxNSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZjA5YWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBKYW4gMzEgMDA6MTY6NTQgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZmFhMDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjM4IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIyOWU5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLUNsYXNzUGF0aDogZW52LmphcgotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52OyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzA1LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbi5FbnZQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbWFuZGxpbmU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjIwMywyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4yMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjIwMCwyLjAuMCkiLAotIG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSJbMS43LjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5hbnQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1saWIvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1saWIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBkYmMzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQtbGliLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWFudHRhc2tzLmphcgotYW50dGFza3NzcmMuemlwCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQtc3JjL3dzL2FudC90YXNrL1dlYlNlcnZpY2VHZW5lcmF0aW9uQW50VGFzay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50LXNyYy93cy9hbnQvdGFzay9XZWJTZXJ2aWNlR2VuZXJhdGlvbkFudFRhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiNDIxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQtc3JjL3dzL2FudC90YXNrL1dlYlNlcnZpY2VHZW5lcmF0aW9uQW50VGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTIyICAgMTc2OTQzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSB3cy5hbnQudGFzazsKLQotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LkJ1aWxkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlByb2plY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50LkFudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlR2VuZXJhdGlvbkFudFRhc2sgZXh0ZW5kcyBUYXNrIAotewkKLQkJcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0JCXsJCQkKLQkJCS8vZ2V0IHByb3BlcnRpZXMgc2V0IGluIHRoZSBBbnQgZmlsZQotCQkJUHJvamVjdCBwcm9qID0gZ2V0UHJvamVjdCgpOwotICAgICAgCi0gICAgICBpZiggcHJvaiAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgLy9jYWxsIHRoZSBBbnRDb250cm9sbGVyIHRvIGtpY2sgb2ZmIGdlbmVyYXRpb24KLSAgICAJCUFudENvbnRyb2xsZXIgY29udHJvbGxlciAgID0gbmV3IEFudENvbnRyb2xsZXIocHJvai5nZXRQcm9wZXJ0aWVzKCkpOwotICAgICAgICBTdHJpbmcgICAgICAgIGVycm9yTWVzc2FnZSA9IGNvbnRyb2xsZXIuZ2V0RXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiggZXJyb3JNZXNzYWdlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKCBlcnJvck1lc3NhZ2UgKTsKLSAgICAgICAgfQotICAgICAgfSAgICAgICAgICAgCQkKLQkJfQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc2NsaWVudC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNjbGllbnQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5NmUxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc2NsaWVudC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tU2NlbmFyaW9UeXBlIFJFUVVJUkVELiBEaWZmZXJlbnRpYXRlcyBmcm9tICJzZXJ2aWNlIiBzY2VuYXJpby4gIFNlZSBheGlzc2VydmljZS5wcm9wZXJ0aWVzLgotU2NlbmFyaW9UeXBlPWNsaWVudAotCi0hLS1Jbml0aWFsU2VsZWN0aW9uIFJFUVVJUkVELiAgV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgaW5wdXQgV1NETCBvciBKYXZhLgotSW5pdGlhbFNlbGVjdGlvbj0vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvd3NkbC9teVNlcnZpY2Uud3NkbAotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIENsaWVudC5SdW50aW1lSWQsIENsaWVudC5TZXJ2ZXJJZCAKLUxpc3RSdW50aW1lcz10cnVlCi1MaXN0U2VydmVycz10cnVlCi0hLS0gVmVyYm9zZSB3aWxsIGxpc3QgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBhcyB3ZWxsIGFzIGVycm9ycyBpZiBzZXQgdG8gdHJ1ZQotVmVyYm9zZT10cnVlCi0KLSAKLSEtLUNsaWVudC5SdW50aW1lSWQgLSBJRCBvZiB3ZWIgc2VydmljZSBydW50aW1lIAotQ2xpZW50LlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS1DbGllbnQuU2VydmVySWQgLSBJRCBvZiB0YXJnZXQgc2VydmVyIAotQ2xpZW50LlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwCi0KLSEtLUNsaWVudFByb2plY3ROYW1lIC0gbmFtZSBvZiBDbGllbnQgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgY2xpZW50IHByb2plY3QgYSAKLSEtLSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0hLS1DbGllbnRQcm9qZWN0TmFtZT1jbGllbnRQcm9qZWN0TmFtZQotCi0hLS1DbGllbnRFYXJQcm9qZWN0TmFtZS0gbmFtZSBvZiBDbGllbnQgRUFSIHByb2plY3QgLSBzZXQgb25seSBpZiBhcHBsaWNhYmxlIGZvciBzZWxlY3RlZCBzZXJ2ZXIgdHlwZQotIS0tQ2xpZW50RWFyUHJvamVjdE5hbWU9Y2xpZW50RUFSUHJvamVjdE5hbWUKLQotIS0tQ2xpZW50Q29tcG9uZW50VHlwZSAtIHR5cGUgb2YgQ2xpZW50IHByb2plY3QgLSB0aGUgZm9sbG93aW5nIGFyZSB2YWxpZCBBeGlzIHRlbXBsYXRlczogdGVtcGxhdGUuanN0LndlYiBhbmQgdGVtcGxhdGUuanN0LnV0aWxpdHkKLSEtLUNsaWVudENvbXBvbmVudFR5cGU9dGVtcGxhdGUuanN0LndlYgotCi0hLS0gQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MgLSBzZXQgdG8gdHJ1ZSB0byBzdXBwbHkgcGFja2FnZS1uYW1lc3BhY2UgbWFwcGluZ3MgdHlwZTogYm9vbGVhbgotIS0tQ3VzdG9taXplQ2xpZW50TWFwcGluZ3M9ZmFsc2UgIAotICAgIAotIS0tIE1hcHBpbmdzIAotIS0tIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzCi0hLS0gTWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkIEphdmEgY2xhc3Nlcy4KLSEtLSBOZWVkIG5vdCBiZSBzZXQgaWYgQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MgaXMgZmFsc2UgIAotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2UgPSBuYW1lc3BhY2UuCi0hLS1NYXBwaW5ncz0vdGVzdFByb2ovbWFwcGluZ3MvbWFwcGluZ3MudHh0Ci0KLSEtLU92ZXJ3cml0ZUZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIG92ZXJ3cml0ZSBmaWxlcyB0aGF0IGFscmVhZHkgZXhpc3QuIHR5cGU6Ym9vbGVhbiAKLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLSBPdmVyd3JpdGVGaWxlc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DcmVhdGVGb2xkZXJzRW5hYmxlZCAtIHNldCB0byB0cnVlIGNyZWF0ZSBmb2xkZXJzIG5lY2Vzc2FyeSBkdXJpbmcgZmlsZSBnZW5lcmF0aW9uIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIENyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIENoZWNrb3V0RmlsZXNFbmFibGVkPXRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzc2VydmljZS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNzZXJ2aWNlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYTdjOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNzZXJ2aWNlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0hLS0gU2NlbmFyaW9UeXBlIFJFUVVJUkVELiBEaWZmZXJlbnRpYXRlcyBmcm9tICJjbGllbnQiIHNjZW5hcmlvLiAgU2VlIGF4aXNjbGllbnQucHJvcGVydGllcy4KLVNjZW5hcmlvVHlwZT1zZXJ2aWNlCi0KLSEtLSBJbml0aWFsU2VsZWN0aW9uIFJFUVVJUkVELiAgV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgaW5wdXQgV1NETCBvciBKYXZhCi1Jbml0aWFsU2VsZWN0aW9uPS9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC9teVNlcnZpY2Uud3NkbAotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbGlkIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIFNlcnZpY2UuUnVudGltZUlkLCBTZXJ2aWNlLlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIS0tICBTZXJ2aWNlLlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1TZXJ2aWNlLlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS0gU2VydmljZS5TZXJ2ZXJJZCAtICBJRCBvZiB0YXJnZXQgc2VydmVyIAotU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MAotIS0tIFNlcnZpY2UuVHlwZUlkIC0gICJUb3AgRG93biBFSkIiIG9yICJCb3R0b20gVXAgRUpCIiAgCi0hLS0gSmF2YSBCZWFuIGlzIGRlZmF1bHQgZm9yIGJvdGggVG9wIERvd24gYW5kIEJvdHRvbSBVcAotIS0tIFNlcnZpY2UuVHlwZUlkPVRvcCBEb3duIEVKQgotCi0hLS0gU2VydmljZVByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZyAgICAKLSEtLVNlcnZpY2VQcm9qZWN0TmFtZT1zZXJ2aWNlUHJvamVjdE5hbWUKLSEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZwotIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQotCi0hLS0gTWFwcGluZ3MKLSEtLSBUb3AgZG93biBvciBib3R0b20gdXAgc2NlbmFyaW8uIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLgotIS0tIFRvcCBEb3duOiBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSB0ZW1wbGF0ZSBjbGFzc2VzLgotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlICAKLSEtLSBCb3R0b20gVXA6IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZSAKLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tIEphdmFPdXRwdXQKLSEtLSBUb3AgZG93biAtIFN0cmluZzogdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgZm9yIGEgSmF2YSBzb3VyY2UgZm9sZGVyIGZvciB0aGUgZ2VuZXJhdGVkIEphdmEgY29kZSAtIG11c3QgYmUgZXhpc3Rpbmcgd29ya3NwYWNlIHNvdXJjZSBmb2xkZXIKLSEtLUphdmFPdXRwdXQ9L3Byb2plY3ROYW1lL0phdmFTb3VyY2UKLQotIS0tIE1ldGhvZHMKLSEtLSBCb3R0b20gdXAgLSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzIChpLmUuIG1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMikpIHRvIGJlIGV4cG9zZWQgaW4gb3V0cHV0IFdTREwuICBJZiBubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4KLSEtLSBNZXRob2RzPQotCi0hLS0gU3R5bGUKLSEtLSBCb3R0b20gdXAgLSBTdHJpbmc6IG9uZSBvZjogUlBDLCBET0NVTUVOVCwgV1JBUFBFRAotIS0tU3R5bGU9RE9DVU1FTlQKLQotIS0tIFVzZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBMSVRFUkFMLCBFTkNPREVEIAotIS0tVXNlPUxJVEVSQUwKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkPXRydWUKLQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSBjcmVhdGUgZm9sZGVycyBuZWNlc3NhcnkgZHVyaW5nIGZpbGUgZ2VuZXJhdGlvbiB0eXBlOmJvb2xlYW4KLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LmJhdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2FudC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YTQyNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLXJlbSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1yZW0gIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLXJlbSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotcmVtICBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLXJlbSAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLXJlbSAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLXJlbSAKLXJlbSAgQ29udHJpYnV0b3JzOgotcmVtICAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi1yZW0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotZWNobyBvZmYKLXNldGxvY2FsCi0KLVJFTSAqKioqKioqKioqKiBMb2NhbCBlbnZhcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLVJFTSBUaGUgSlJFIGphdmEuZXhlIHRvIGJlIHVzZWQgYnkgQW50LiAgTm90ZTogZm9yIFdUUCAyLjAgdGhlIEpESyBuZWVkcyB0byBiZSAxLjUgb3IgaGlnaGVyLgotc2V0IEpBVkFFWEU9IkM6XGpkazEuNS4wXGpyZVxiaW5camF2YS5leGUiCi0KLVJFTSBUaGUgRWNsaXBzZSBpbnN0YWxsIGRpcmVjdG9yeS4gIFNvbWUgRWNsaXBzZSBiYXNlZCBwcm9kdWN0cyBtYXkgcmVmZXIgdG8gdGhpcyBkaXJlY3RvcnkKLVJFTSBhcyB0aGUgbm9uIHNoYXJlZCBkaXJlY3RvcnkuCi1zZXQgSU5TVEFMTF9ESVJFQ1RPUlk9ZDpccHJvZHVjdGRpcmVjdG9yeVxlY2xpcHNlCi0KLVJFTSBUaGUgc2hhcmVkIEVjbGlwc2UgZmVhdHVyZXMgZGlyZWN0b3J5LiAgU29tZSBFY2xpcHNlIGJhc2VkIHByb2R1Y3RzIG1heSBzcGxpdCB0aGVpciAKLVJFTSBkaXJlY3Rvcnkgc3RydWN0dXJlIGludG8gc2hhcmVkIGFuZCBub24gc2hhcmVkIGZvbGRlcnMuICBUaGUgdmFyaWFibGUgYmVsb3cgc2hvdWxkIGJlCi1SRU0gc2V0IHRvIHRoZSBzaGFyZWQgZGlyZWN0b3J5LiAgTm90ZTogYSBkZWZhdWx0IFdUUCBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3BsaXQgaXQncwotUkVNIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc28gdGhlIElOU1RBTExfRElSRUNUT1JZIGFuZCB0aGUgU0hBUkVEX0RJUkVDVE9SWSBzaG91bGQgYmUgdGhlIHNhbWUuCi1zZXQgU0hBUkVEX0RJUkVDVE9SWT0lSU5TVEFMTF9ESVJFQ1RPUlklCi0KLVJFTSBUaGUgRWNsaXBzZSBFcXVpbm94IExhdW5jaGVyIGphci4gIFVzdWFsbHkgdGhpcyBwbHVnaW4gamFyIGZpbGUgaXMgbG9jYXRlZCBpbiB0aGUKLVJFTSBzaGFyZWQgcGx1Z2luIGRpcmVjdG9yeShpZS4gcGx1Z2luc1xvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyKi5qYXIgKQotc2V0IExBVU5DSEVSX0pBUj0iJVNIQVJFRF9ESVJFQ1RPUlklXHBsdWdpbnNcb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlcl8xLjAuMC52MjAwNzA2MDYuamFyIgotCi1SRU0gVGhlIGxvY2F0aW9uIG9mIHlvdXIgd29ya3NwYWNlCi1zZXQgV09SS1NQQUNFPUM6XHdvcmtzcGFjZQotCi1SRU0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1pZiBub3QgZXhpc3QgJUpBVkFFWEUlIGVjaG8gRVJST1I6IGluY29ycmVjdCBqYXZhLmV4ZT0lSkFWQUVYRSUsIGVkaXQgdGhpcyBmaWxlIGFuZCBjb3JyZWN0IHRoZSBKQVZBRVhFIGVudmFyCi1pZiBub3QgZXhpc3QgJUpBVkFFWEUlIGdvdG8gZG9uZQotCi1pZiBub3QgZXhpc3QgJUxBVU5DSEVSX0pBUiUgZWNobyBFUlJPUjogaW5jb3JyZWN0IGxhdW5jaGVyIGphcj0lTEFVTkNIRVJfSkFSJSwgZWRpdCB0aGlzIGZpbGUgYW5kIGNvcnJlY3QgdGhlIExBVU5DSEVSX0pBUiBlbnZhcgotaWYgbm90IGV4aXN0ICVMQVVOQ0hFUl9KQVIlIGdvdG8gZG9uZQotCi06cnVuCi1AZWNobyBvbgotJUpBVkFFWEUlIC1qYXIgJUxBVU5DSEVSX0pBUiUgLWluc3RhbGwgJUlOU1RBTExfRElSRUNUT1JZJSAtY29uZmlndXJhdGlvbiAlSU5TVEFMTF9ESVJFQ1RPUlklXGNvbmZpZ3VyYXRpb24gLWFwcGxpY2F0aW9uIG9yZy5lY2xpcHNlLmFudC5jb3JlLmFudFJ1bm5lciAtZGF0YSAlV09SS1NQQUNFJSAtZmlsZSB3c2dlbi54bWwgJSogPndzZ2VuLnR4dCAyPiYxCi0KLTpkb25lCi1wYXVzZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LnNoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmM5ZmU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2FudC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyEvYmluL3NoCi1zZXQgK3YKLQotI1NjcmlwdCB0byBydW4gV2ViU2VydmljZSBBbnQgdGFza3MgaW4gaGVhZGxlc3MgRWNsaXBzZSBtb2RlCi0KLWVjaG8gIlNldHRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIgotCi0jIFRoZSBKUkUgamF2YS5leGUgdG8gYmUgdXNlZCBieSBBbnQuICBOb3RlOiBmb3IgV1RQIDIuMCB0aGUgSkRLIG5lZWRzIHRvIGJlIDEuNSBvciBoaWdoZXIuCi1KQVZBRVhFPS9ob21lL3Rlc3Rlci9qZGsxLjUuMC9qcmUvYmluL2phdmEKLSAgICAgICAKLSAgICAgICAKLSMgVGhlIEVjbGlwc2UgaW5zdGFsbCBkaXJlY3RvcnkuICBTb21lIEVjbGlwc2UgYmFzZWQgcHJvZHVjdHMgbWF5IHJlZmVyIHRvIHRoaXMgZGlyZWN0b3J5Ci0jIGFzIHRoZSBub24gc2hhcmVkIGRpcmVjdG9yeS4KLUlOU1RBTExfRElSRUNUT1JZPS9wcm9kdWN0ZGlyZWN0b3J5L2VjbGlwc2UKLQotIyBUaGUgc2hhcmVkIEVjbGlwc2UgZmVhdHVyZXMgZGlyZWN0b3J5LiAgU29tZSBFY2xpcHNlIGJhc2VkIHByb2R1Y3RzIG1heSBzcGxpdCB0aGVpciAKLSMgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbnRvIHNoYXJlZCBhbmQgbm9uIHNoYXJlZCBmb2xkZXJzLiAgVGhlIHZhcmlhYmxlIGJlbG93IHNob3VsZCBiZQotIyBzZXQgdG8gdGhlIHNoYXJlZCBkaXJlY3RvcnkuICBOb3RlOiBhIGRlZmF1bHQgV1RQIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzcGxpdCBpdCdzCi0jIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc28gdGhlIElOU1RBTExfRElSRUNUT1JZIGFuZCB0aGUgU0hBUkVEX0RJUkVDVE9SWSBzaG91bGQgYmUgdGhlIHNhbWUuCi1TSEFSRURfRElSRUNUT1JZPSRJTlNUQUxMX0RJUkVDVE9SWQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSMgVGhlIEVjbGlwc2UgRXF1aW5veCBMYXVuY2hlciBqYXIuICBVc3VhbGx5IHRoaXMgcGx1Z2luIGphciBmaWxlIGlzIGxvY2F0ZWQgaW4gdGhlCi0jIHNoYXJlZCBwbHVnaW4gZGlyZWN0b3J5KGllLiBwbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIqLmphciApCi1MQVVOQ0hFUl9KQVI9JFNIQVJFRF9ESVJFQ1RPUlkvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyXzEuMC4wLnYyMDA3MDYwNi5qYXIKLQotCi0jIFRoZSBsb2NhdGlvbiBvZiB5b3VyIHdvcmtzcGFjZQotV09SS1NQQUNFPS9ob21lL3Rlc3Rlci93b3Jrc3BhY2UKLQotcnVuKCkgewotICBzZXQgLXYKLSAgJEpBVkFFWEUgLWphciAkTEFVTkNIRVJfSkFSIC1pbnN0YWxsICRJTlNUQUxMX0RJUkVDVE9SWSAtY29uZmlndXJhdGlvbiAkSU5TVEFMTF9ESVJFQ1RPUlkvY29uZmlndXJhdGlvbiAtYXBwbGljYXRpb24gb3JnLmVjbGlwc2UuYW50LmNvcmUuYW50UnVubmVyIC1kYXRhICRXT1JLU1BBQ0UgLWZpbGUgd3NnZW4ueG1sICRscyA+IHdzZ2VuLnR4dCAyPiYxCi19Ci0KLWlmIFsgISAtZSAkSkFWQUVYRSBdOyB0aGVuIAotICBlY2hvICJFUlJPUjogaW5jb3JyZWN0IGphdmEuZXhlPSRKQVZBRVhFLCBlZGl0IHRoZSBzY3JpcHQgYW5kIGNvcnJlY3QgdGhlIEpBVkFFWEUgZW52aXJvbm1lbnQgdmFyaWFibGUiOwotICBleGl0IDE7Ci1maQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1pZiBbICEgLWUgJExBVU5DSEVSX0pBUiBdOyB0aGVuCi1lY2hvICJFUlJPUjogaW5jb3JyZWN0IGxhdW5jaGVyPSRMQVVOQ0hFUl9KQVIsIGVkaXQgdGhlIHNjcmlwdCBhbmQgY29ycmVjdCB0aGUgTEFVTkNIRVJfSkFSIGVudmlyb25tZW50IHZhcmlhYmxlIjsKLWV4aXQgMTsKLWZpICAKLQotcnVuCi1leGl0IDAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2dlbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NnZW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDdhNmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2dlbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgZGVmYXVsdD0ibWFpbiIgYmFzZWRpcj0iLiI+Ci0KLTxlY2hvIG1lc3NhZ2U9InB1bGxpbmcgaW4gcHJvcGVydHkgZmlsZXMiLz4KLTxwcm9wZXJ0eSBmaWxlPSJheGlzc2VydmljZS5wcm9wZXJ0aWVzIi8+Ci0JCi08ZWNobyBtZXNzYWdlPSJjYWxsaW5nIHRoZSB3ZWIgc2VydmljZXMgZ2VuZXJhdGlvbiBhbnQgdGFzazogd3NnZW4iLz4KLSA8dGFyZ2V0IG5hbWU9Im1haW4iID4KLSAgCSA8d3NnZW4vPgotICA8L3RhcmdldD4KLSAgCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMWVkODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQtYW50dGFza3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IG5hbWU9IkJ1aWxkIEFudCBFbnZpcm9ubWVudCBzdXBwb3J0IEpBUiIgZGVmYXVsdD0iYnVpbGQiIGJhc2VkaXI9Ii4iPgotCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVzY3JpcHRpb249IkNsZWFucywgYnVpbGRzIGFuZCByZWZyZXNoZXMiIGRlcGVuZHM9ImNsZWFuLCBhbnQtbGliL2FudHRhc2tzLmphciIvPgotCi0JPHRhcmdldCBuYW1lPSJpbml0IiBkZXBlbmRzPSJwcm9wZXJ0aWVzIj4KLQkJPHByb3BlcnR5IG5hbWU9InZlcnNpb24uc3VmZml4IiB2YWx1ZT0iXzMuMS4wIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJuZXcudmVyc2lvbi5zdWZmaXgiIHZhbHVlPSJfMy4yLjAiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImJvb3RjbGFzc3BhdGgiIHZhbHVlPSIiLz4KLQkJPHByb3BlcnR5IG5hbWU9InRlbXAuZm9sZGVyIiB2YWx1ZT0iJHtiYXNlZGlyfS90ZW1wLmZvbGRlciIvPgotCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQucmVzdWx0LmZvbGRlciIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KLQkJPHByb3BlcnR5IG5hbWU9IndpbjMyLmphciIgdmFsdWU9IiR7ZWNsaXBzZS5ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODYke3ZlcnNpb24uc3VmZml4fS5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9Imd0ay5qYXIiIHZhbHVlPSIke2VjbGlwc2UuaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zd3QuZ3RrLmxpbnV4Lng4NiR7dmVyc2lvbi5zdWZmaXh9LmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0ibW90aWYuamFyIiB2YWx1ZT0iJHtlY2xpcHNlLmhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3d0Lm1vdGlmJHt2ZXJzaW9uLnN1ZmZpeH0uamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJvc3guamFyIiB2YWx1ZT0iJHtlY2xpcHNlLmhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3d0LmNhcmJvbi5tYWNvc3gucHBjJHt2ZXJzaW9uLnN1ZmZpeH0uamFyIi8+Ci0JCTxhdmFpbGFibGUgZmlsZT0iJHt3aW4zMi5qYXJ9IiBwcm9wZXJ0eT0ic3d0LmphciIgdmFsdWU9IiR7d2luMzIuamFyfSIvPgotCQk8YXZhaWxhYmxlIGZpbGU9IiR7Z3RrLmphcn0iIHByb3BlcnR5PSJzd3QuamFyIiB2YWx1ZT0iJHtndGsuamFyfSIvPgotCQk8YXZhaWxhYmxlIGZpbGU9IiR7bW90aWYuamFyfSIgcHJvcGVydHk9InN3dC5qYXIiIHZhbHVlPSIke21vdGlmLmphcn0iLz4KLQkJPGF2YWlsYWJsZSBmaWxlPSIke29zeC5qYXJ9IiBwcm9wZXJ0eT0ic3d0LmphciIgdmFsdWU9IiR7b3N4Lmphcn0iLz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9InByb3BlcnRpZXMiIGlmPSJlY2xpcHNlLnJ1bm5pbmciPgotCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQuY29tcGlsZXIiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQuY29yZS5KRFRDb21waWxlckFkYXB0ZXIiLz4KLQk8L3RhcmdldD4KLQkJCi0JCTx0YXJnZXQgbmFtZT0iYW50LWxpYi9hbnR0YXNrcy5qYXIiIGRlc2NyaXB0aW9uPSAiQ3JlYXRlcyB0aGUgYW50cnVubmVyLmphciIgZGVwZW5kcz0iaW5pdCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGVzdGRpciIgdmFsdWU9IiR7dGVtcC5mb2xkZXJ9L2FudC1saWIvYW50dGFza3MuamFyIi8+Ci0JCQk8ZGVsZXRlIGRpcj0iJHtkZXN0ZGlyfSIvPgotCQkJPG1rZGlyIGRpcj0iJHtkZXN0ZGlyfSIvPgotCQkJPGphdmFjIGRlc3RkaXI9IiR7ZGVzdGRpcn0iIGZhaWxvbmVycm9yPSJ0cnVlIiB2ZXJib3NlPSJmYWxzZSIgZGVidWc9Im9uIiBpbmNsdWRlSmF2YVJ1bnRpbWU9ICJ5ZXMiCi0JCQkgCWJvb3RjbGFzc3BhdGg9IiR7Ym9vdGNsYXNzcGF0aH0iCi0JCQkgCWNsYXNzcGF0aD0iJHtiYXNlZGlyfS9iaW4iPgotCQkJCTxzcmMgcGF0aD0iYW50LXNyYy8iLz4KLQkJCTwvamF2YWM+Ci0JCQk8Y29weSB0b2Rpcj0iJHtkZXN0ZGlyfSI+Ci0JCQkJPGZpbGVzZXQgZGlyPSJhbnQtc3JjLyIgZXhjbHVkZXM9IioqLyouamF2YSIvPgotCQkJPC9jb3B5PgotCQkJPG1rZGlyIGRpcj0iJHtidWlsZC5yZXN1bHQuZm9sZGVyfS9hbnQtbGliIi8+Ci0JCQk8amFyIGRlc3RmaWxlPSIke2J1aWxkLnJlc3VsdC5mb2xkZXJ9L2FudC1saWIvYW50dGFza3MuamFyIiBiYXNlZGlyPSIke2Rlc3RkaXJ9Ii8+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt0ZW1wLmZvbGRlcn0iLz4KLQkJPC90YXJnZXQ+Ci0KLQkJPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkRlbGV0ZXMgcHJldmlvdXMgYnVpbGQgcmVtbmFudHMiIGRlcGVuZHM9ImluaXQiPgotCQkJPGRlbGV0ZSBmaWxlPSIke2J1aWxkLnJlc3VsdC5mb2xkZXJ9L2FudC1saWIvYW50dGFza3MuamFyIi8+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt0ZW1wLmZvbGRlcn0iLz4KLQkJPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJyZWZyZXNoIj4KLQk8ZWNsaXBzZS5Mb2NhbFJlZnJlc2ggcmVzb3VyY2U9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIgZGVwdGg9ImluZmluaXRlIi8+Ci0JPC90YXJnZXQ+Ci0JCi0JPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNTcwNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgZW52LmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBhbnQvLFwKLSAgICAgICAgICAgICAgIGFudC1saWIvYW50dGFza3MuamFyCi1zb3VyY2UuZW52LmphciA9IHNyYy8KLW91dHB1dC5lbnYuamFyID0gYmluLwotamFycy5jb21waWxlLm9yZGVyID0gZW52LmphcixcCi0gICAgICAgICAgICAgICAgICAgICBhbnQtbGliL2FudHRhc2tzLmphcgotc291cmNlLmFudC1saWIvYW50dGFza3MuamFyID0gYW50LXNyYy8KLW91dHB1dC5hbnQtbGliL2FudHRhc2tzLmphciA9IGJpbi8KLXJvb3QucGVybWlzc2lvbnMuNzc3ID0gYW50LwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3ZDNjY2JkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1FbnZpcm9ubWVudCBDb21tYW5kIEZyYW1ld29yayAoaGVhZGxlc3MpCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotUExVR0lOX1hQX0RZTkFNSUNfV0laQVJEPUR5bmFtaWMgV2l6YXJkCi1QTFVHSU5fWFBfUE9QVVBfRElBTE9HUz1PcHRpb25hbCBQb3AtdXAgQWN0aW9uIERpYWxvZ3MgVHlwZXMKLQotWFBfYW50RGF0YU1hcHBpbmc9QW50IEVudmlyb25tZW50IHByb3BlcnR5IG1hcHBpbmdzCi1YUF9hbnRTY2VuYXJpbz1BbnQgRW52aXJvbm1lbnQgc2NlbmFyaW9zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2MjIxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGNoYW5nZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0iZHluYW1pY1dpemFyZCIKLSAgICAgIG5hbWU9IiVQTFVHSU5fWFBfRFlOQU1JQ19XSVpBUkQiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGNoYW5nZS4gLS0+ICAgCi0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0iYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUiCi0gICAgICBuYW1lPSIlUExVR0lOX1hQX1BPUFVQX0RJQUxPR1MiLz4KLQotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iYW50RGF0YU1hcHBpbmciIG5hbWU9IiVYUF9hbnREYXRhTWFwcGluZyIgc2NoZW1hPSJzY2hlbWEvYW50ZGF0YW1hcHBpbmcuZXhzZCIvPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iYW50U2NlbmFyaW8iIG5hbWU9IiVYUF9hbnRTY2VuYXJpbyIgc2NoZW1hPSJzY2hlbWEvYW50U2NlbmFyaW8uZXhzZCIvPgotICAgICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ3c2dlbiIKLSAgICAgICAgIG5hbWU9IndzZ2VuIgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmFudC5jb3JlLmFudFRhc2tzIj4KLSAgICAgIDxhbnRUYXNrCi0gICAgICAgICAgICBjbGFzcz0id3MuYW50LnRhc2suV2ViU2VydmljZUdlbmVyYXRpb25BbnRUYXNrIgotICAgICAgICAgICAgZWNsaXBzZVJ1bnRpbWU9InRydWUiCi0gICAgICAgICAgICBoZWFkbGVzcz0idHJ1ZSIKLSAgICAgICAgICAgIGxpYnJhcnk9ImFudC1saWIvYW50dGFza3MuamFyIgotICAgICAgICAgICAgbmFtZT0id3NnZW4iLz4KLSAgIDwvZXh0ZW5zaW9uPiAKLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuYW50LmNvcmUuZXh0cmFDbGFzc3BhdGhFbnRyaWVzIj4KLSAgICAgICAgPGV4dHJhQ2xhc3NwYXRoRW50cnkgbGlicmFyeT0iYW50LWxpYi9hbnR0YXNrcy5qYXIiLz4KLSAgICAgPC9leHRlbnNpb24+ICAgICAKLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zY2hlbWEvYW50U2NlbmFyaW8uZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NjaGVtYS9hbnRTY2VuYXJpby5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWFmZjUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NjaGVtYS9hbnRTY2VuYXJpby5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiBpZD0iYW50U2NlbmFyaW8iIG5hbWU9IkFudCBFbnZpcm9ubWVudCBTY2VuYXJpb3MiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImFudFNjZW5hcmlvIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iYW50U2NlbmFyaW8iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzY2VuYXJpb1R5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NjaGVtYS9hbnRkYXRhbWFwcGluZy5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudGRhdGFtYXBwaW5nLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTczOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudGRhdGFtYXBwaW5nLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ij4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiIGlkPSJhbnREYXRhTWFwcGluZyIgbmFtZT0iQW50IEVudmlyb25tZW50IFByb3BlcnR5IE1hcHBpbmdzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtYXAiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJtYXAiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJrZXkiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ib3BlcmF0aW9uIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InByb3BlcnR5IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRyYW5zZm9ybSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlZCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iZmFsc2UiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNjNlNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9FbnZpcm9ubWVudC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcwNDE4ICAgMTc3MDA1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwODAzMjYgICAxNzE3MDUgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcKLSMgMjAwODAzMjYgICAxNDkwNjAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA4MDMyNSAgIDIyMzkxMiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBBZGRpbmcgUElJL01SSSB0byBwYXJ0aWFsbHkgYWRkcmVzcyAxNzE3MDUKLSMgMjAwODAzMjggICAyMjQ1NjMgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgVGV4dCBpbmNvcnJlY3QgZ2VuZXJhdGluZyB3ZWIgc2VydmljZXMgJiBjbGllbnRzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgZm9yIFJlc291Y2VVdGlscwotIwotTVNHX0VSUk9SX1BBVEhfTk9UX0FCU09MVVRFPUlXQUIwMDAzRSBQYXRoIHswfSBpcyBub3QgYWJzb2x1dGUgZm9yIGNyZWF0aW5nIGEgZmlsZS4KLU1TR19FUlJPUl9QQVRIX0VNUFRZPUlXQUIwMDA0RSBQYXRoIHswfSBpcyBlbXB0eSB3aGlsZSBjcmVhdGluZyBhIGZpbGUuCi1NU0dfRVJST1JfUEFUSF9OT1RfRk9MREVSPUlXQUIwMDA1RSBQYXRoIHswfSBpcyBub3QgYSBmb2xkZXIgZm9yIGNyZWF0aW5nIGEgZmlsZS4KLU1TR19FUlJPUl9GT0xERVJfQ1JFQVRJT05fRElTQUJMRUQ9SVdBQjAwMDdFIEZvbGRlciBjcmVhdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgcGFyZW50IGZvbGRlciB7MH0uIERvIHlvdSB3YW50IHRvIGNyZWF0ZSBmb2xkZXIgezF9PwotTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GT0xERVI9SVdBQjAwMDhFIFJlc291cmNlIHswfSBpcyBub3QgYSBmb2xkZXIuCi1NU0dfV0FSTl9GSUxFX09WRVJXUklURV9ESVNBQkxFRD1JV0FCMDAwOVcgQ2Fubm90IG92ZXJ3cml0ZSBmaWxlIHsxfSBpbiBmb2xkZXIgezB9LgotTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQ9SVdBQjAwMTBFIENhbm5vdCBjaGVja291dCBmaWxlIHsxfSBpbiBmb2xkZXIgezB9LgotTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GSUxFPUlXQUIwMDExRSBUaGUgZm9sbG93aW5nIHBhdGggaXMgbm90IGEgcmVzb3VyY2U6IHswfS4KLU1TR19FUlJPUl9GT0xERVJfSEFTX0NISUxEUkVOPUlXQUIwMDEyRSBDYW5ub3QgY3JlYXRlIGZvbGRlcjogezB9IHRoYXQgYWxyZWFkeSBoYXMgY2hpbGRyZW4uCi1NU0dfRVJST1JfSU89SVdBQjAwMDZFIEFuIGlucHV0L291dHB1dCBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSByZXNvdXJjZSAiezB9Ii4KLU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRD1JV0FCMDE2NEUgQ2Fubm90IGNyZWF0ZSB0aGUgZmlsZSAiezF9IiByZWxhdGl2ZSB0byB0aGUgcGF0aCAiezB9IiBiZWNhdXNlIGF1dG9tYXRpYyBmaWxlIG92ZXJ3cml0aW5nIGhhcyBub3QgYmVlbiBlbmFibGVkLiBEbyB5b3Ugd2FudCB0byBlbmFibGUgaXQgZm9yIHRoaXMgZmlsZT8KLU1TR19FUlJPUl9VTkVYUEVDVEVEX0VSUk9SPUlXQUIwMDE0RSBVbmV4cGVjdGVkIGV4Y2VwdGlvbiBvY2N1cnJlZC4KLU1TR19FUlJPUl9BTlRfREFUQV9UUkFOU0ZPUk09RXhjZXB0aW9uIHRyYW5zZm9ybWluZyBBbnQgcHJvcGVydHkga2V5IHswfSB1c2luZyB0cmFuc2Zvcm1hdGlvbiB7MX0uCi1NU0dfRVJST1JfQU5UX0NBTExfU0VUVEVSPUV4Y2VwdGlvbiBpbnZva2luZyBzZXR0ZXIgbWV0aG9kIHswfSBmb3IgQW50IHByb3BlcnR5LgotTVNHX0VSUk9SX0FOVF9DTURfRlJBR01FTlQ9RXhjZXB0aW9uIHJldHJpZXZpbmcgQW50IGNvbW1hbmQgZnJhZ21lbnQgZnJvbSByZWdpc3RyeS4KLU1TR19FUlJPUl9BTlRfU0NFTkFSSU9fVFlQRT1DYW5ub3QgZGV0ZXJtaW5lIHNjZW5hcmlvIHR5cGUuICBQbGVhc2UgZW5zdXJlIFNjZW5hcmlvVHlwZSBBbnQgcHJvcGVydHkgaXMgc2V0LgotTVNHX0VSUk9SX0FOVF9SRVFVSVJFRF9QUk9QRVJUWT1SZXF1aXJlZCBwcm9wZXJ0eSB7MH0gd2FzIG5vdCBzZXQgaW4gdGhlIEFudCBwcm9wZXJ0eSBmaWxlLgotTVNHX0VSUk9SX0FOVF9QUk9QRVJUWV9XSVRIX0lOVkFMSURfVkFMVUU9UHJvcGVydHkgezB9IHdhcyBzZXQgd2l0aCBhbiBpbnZhbGlkIHZhbHVlOiB7MX0uCi1NU0dfSU5GT19BTlRfX1BST1BFUlRZX0RFRkFVTFQ9UHJvcGVydHkgezB9IHdhcyBub3Qgc2V0IGluIHRoZSBBbnQgcHJvcGVydHkgZmlsZS4gIEEgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCi1NU0dfRVJST1JfQU5UX1dPUktTUEFDRV9MT0NLRUQ9IkNhbm5vdCBwZXJmb3JtIHRoZSBXZWIgc2VydmljZXMgZ2VuZXJhdGlvbiBhbnQgdGFzay4gIFRoZSBhc3NvY2lhdGVkIHdvcmtzcGFjZSBpcyBjdXJyZW50bHkgaW4gdXNlIGJ5IGFub3RoZXIgRWNsaXBzZSBhcHBsaWNhdGlvbi4iCi0KLUxBQkVMX1lFUz1ZZXMKLUxBQkVMX1lFU19UT19BTEw9WWVzIHRvIEFsbAotTEFCRUxfQ0FOQ0VMPUNhbmNlbAotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9FbnZpcm9ubWVudE1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50TWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU3MWRiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50TWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMyNiAgIDE3MTcwNSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBFbnZpcm9ubWVudE1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuRW52aXJvbm1lbnQiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgRW52aXJvbm1lbnRNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BBVEhfTk9UX0FCU09MVVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QQVRIX0VNUFRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QQVRIX05PVF9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZPTERFUl9DUkVBVElPTl9ESVNBQkxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9GSUxFX09WRVJXUklURV9ESVNBQkxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZPTERFUl9IQVNfQ0hJTERSRU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQU5UX0RBVEFfVFJBTlNGT1JNOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BTlRfQ0FMTF9TRVRURVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9DTURfRlJBR01FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9TQ0VOQVJJT19UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BTlRfUkVRVUlSRURfUFJPUEVSVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9QUk9QRVJUWV9XSVRIX0lOVkFMSURfVkFMVUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fQU5UX19QUk9QRVJUWV9ERUZBVUxUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1lFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9ZRVNfVE9fQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NBTkNFTDsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEVudmlyb25tZW50TWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudENvbnRyb2xsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudENvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkMjRhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI2ICAgMTUxNjE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYxMDExICAgMTU5MjgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBwcm9qZWN0IG5vdCBhc3NvY2lhdGVkIHRvIEVBUiB3aGVuIHVzaW5nIGFudCBvbiBjb21tYW5kLWxpbmUKLSAqIDIwMDcwNTIyICAgMTc2OTQzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNzMwICAgMTk3MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBhc3MgcHJvZ3Jlc3MgbW9uaXRvciB0byB1bmRvIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5FbnZpcm9ubWVudE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuRnJhZ21lbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiAKLSAqIENlbnRyYWwgcG9pbnQgb2YgY29udHJvbCBmb3Igd2ViIHNlcnZpY2UgQW50IHRhc2tzLgotICogQ29uc3RydWN0cyBBbnQgZW52aXJvbm1lbnQsIHJvb3QgZnJhZ21lbnQgYW5kIGNvbW1hbmQgbWFuYWdlci4gIFN0YXJ0cyBleGVjdXRpb24gb2YgdGhlIGNvbW1hbmQgc3RhY2suCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgQW50Q29udHJvbGxlciAKLXsJCi0gICBwcml2YXRlIEFudE9wZXJhdGlvbk1hbmFnZXIgb3BlcmF0aW9uTWFuYWdlcl87Ci0gICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlXyA9IG51bGw7Ci0gICBwcml2YXRlIEFudEVudmlyb25tZW50ICAgICAgZW52aXJvbm1lbnRfOwotCQotICAgcHVibGljIEFudENvbnRyb2xsZXIoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gICB7Ci0JICAgLy8gY29uc3RydWN0IHRoZSBlbnZpcm9ubWVudCAtIHBhc3NpbmcgaW4gdGhlIHByb3BlcnR5IHRhYmxlCSAgIAotCSAgIC8vIC0tbWFpbnRhaW5zIGxpbmsgdG8gcHJvcGVydHkgdGFibGUgcGx1cyBhbnkgb3RoZXIgZW52aXJvbm1lbnQgcHJvcGVydGllcwotCSAgIC8vIC0tY29kZSB0byBhY2Nlc3MgZXh0ZW5zaW9uIHBvaW50IG1hcHBpbmdzIGZvciBvcGVyYXRpb25zIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBwcm9wZXJ0eSB0YWJsZQotCSAgIFRyYW5zaWVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gKFRyYW5zaWVudFJlc291cmNlQ29udGV4dClQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCkuY29weSgpOwotCSAgIEFudFN0YXR1c0hhbmRsZXIgICAgICAgICAgaGFuZGxlciAgICAgICAgID0gbmV3IEFudFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgCi0JICAgZW52aXJvbm1lbnRfID0gbmV3IEFudEVudmlyb25tZW50KHRoaXMsIHJlc291cmNlQ29udGV4dCwgaGFuZGxlciwgcHJvcGVydGllcyk7Ci0gICAgICAgCi0JICAgLy8gY29uc3RydWN0IGRhdGEgbWFuYWdlciBmb3IgbWFpbnRhaW5pbmcgc3RhdGUgYWNyb3NzIG9wZXJhdGlvbnMKLQkgICBEYXRhRmxvd01hbmFnZXIgZGF0YU1hbmFnZXIgPSBuZXcgRGF0YUZsb3dNYW5hZ2VyKCBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKSwgZW52aXJvbm1lbnRfICk7Ci0gICAgICAgCi0JICAgLy8gIHNldCB1cCBvcGVyYXRpb24gZnJhZ21lbnRzIC0gY29uZGl0aW9uYWwgb24gb3B0aW9ucyBieSB1c2VyLi4uIHNlcnZpY2Ugb3IgY2xpZW50Ci0JICAgLy8gIGFsc28gbmVlZCB0byBpbml0aWFsaXplIHRoZSAic2VsZWN0aW9uIiBvciBpbnB1dCBmaWxlIChXU0RMLCBKYXZhKSBoZXJlCi0JICAgCi0JICAgQ29tbWFuZEZyYWdtZW50IHJvb3RGcmFnbWVudCA9ICBlbnZpcm9ubWVudF8uZ2V0Um9vdENvbW1hbmRGcmFnbWVudCgpOwotCSAgIAotCSAgIGlmIChyb290RnJhZ21lbnQgIT0gbnVsbCkKLQkgICB7CQkgICAKLQkgICAgICAgLy9jb25zdHJ1Y3QgdGhlIGVuZ2luZSAtIG1hbmFnZXMgZXhlY3V0aW9uIG9mIG9wZXJhdGlvbnMKLQkJICAgY3JlYXRlT3BlcmF0aW9uTWFuYWdlciggcm9vdEZyYWdtZW50LCBkYXRhTWFuYWdlciwgZW52aXJvbm1lbnRfICk7Ci0JCSAgIAotCQkgICBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCAgICBkYXRhUmVnaXN0cnlfICAgPSBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKTsKLQkJICAgcm9vdEZyYWdtZW50LnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFSZWdpc3RyeV8pOwkJICAgCi0JICAgfQotCSAgIGVsc2UgIC8vcHJvYmxlbSBnZXR0aW5nIHRoZSByb290IGZyYWdtZW50IC0gc2NlbmFyaW8gdHlwZSBpcyBsaWtlbHkgbWlzc2luZwotCSAgIHsKLSAgICAgICBlcnJvck1lc3NhZ2VfID0gRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX1NDRU5BUklPX1RZUEU7Ci0JCSAgIGhhbmRsZXIucmVwb3J0RXJyb3IobmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgOTk5OSwgZXJyb3JNZXNzYWdlXywgbnVsbCkpOwotCQkgICByZXR1cm47Ci0JICAgfQotCSAgICAgIAotCSAgIC8vcmVhZHkgdG8gc3RhcnQgcnVubmluZyBvcGVyYXRpb25zCi0JICAgSVByb2dyZXNzTW9uaXRvciBudWxsTW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JICAgCi0gCSAgIG9wZXJhdGlvbk1hbmFnZXJfLm1vdmVGb3J3YXJkVG9OZXh0U3RvcCggbnVsbE1vbml0b3IgKTsKLQotICAgICBJU3RhdHVzIGxhc3RTdGF0dXMgPSBvcGVyYXRpb25NYW5hZ2VyXy5nZXRMYXN0U3RhdHVzKCk7Ci0gICAgIAotIAkgICBpZiAoICFsYXN0U3RhdHVzLmlzT0soKSApIAotICAgICB7Ci0gICAgICAgZXJyb3JNZXNzYWdlXyA9IGxhc3RTdGF0dXMuZ2V0TWVzc2FnZSgpOwotIAkJICAgb3BlcmF0aW9uTWFuYWdlcl8udW5kb1RvTGFzdFN0b3AoIG51bGxNb25pdG9yICk7Ci0gICAgIH0KLSAgIH0KLSAgIAotICAgcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKQotICAgewotICAgICByZXR1cm4gZXJyb3JNZXNzYWdlXzsgIAotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgY3JlYXRlT3BlcmF0aW9uTWFuYWdlcihDb21tYW5kRnJhZ21lbnQgZnJhZywgRGF0YUZsb3dNYW5hZ2VyIG1nciwgQW50RW52aXJvbm1lbnQgZW52KQotICAgewkJICAgCi0JCSAgIG9wZXJhdGlvbk1hbmFnZXJfID0gbmV3IEFudE9wZXJhdGlvbk1hbmFnZXIoZnJhZywgbWdyLCBlbnYpOwkJCQotCQotCQkgICBvcGVyYXRpb25NYW5hZ2VyXy5zZXRQZWVrRnJhZ21lbnRMaXN0ZW5lciggCi0JCQkJICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotCQkJCSAgICAgIHsKLQkJCQkgICAgICAgIHB1YmxpYyAgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHJldHVybiBwZWVrRnJhZ21lbnQoIGZyYWdtZW50ICk7Ci0JCQkJICAgICAgICB9Ci0JCQkJICAgICAgfSApOyAgCi0JCQkJICAgICAgICAgICAgICAgICAgCi0JCSAgIG9wZXJhdGlvbk1hbmFnZXJfLnNldE5leHRGcmFnbWVudExpc3RlbmVyKCAKLQkJCQkgICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0JCQkJICAgICAgewotCQkJCSAgICAgICAgcHVibGljICBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLQkJCQkgICAgICAgIHsKLQkJCQkgICAgICAgICAgcmV0dXJuIG5leHRGcmFnbWVudCggZnJhZ21lbnQgKTsKLQkJCQkgICAgICAgIH0KLQkJCQkgICAgICB9ICk7ICAKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCSAgIG9wZXJhdGlvbk1hbmFnZXJfLnNldFVuZG9GcmFnbWVudExpc3RlbmVyKAotCQkJCSAgICAgIG5ldyBGcmFnbWVudExpc3RlbmVyKCkKLQkJCQkgICAgICB7Ci0JCQkJICAgICAgICBwdWJsaWMgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHJldHVybiB1bmRvRnJhZ21lbnQoIGZyYWdtZW50ICk7Ci0JCQkJICAgICAgICB9Ci0JCQkJICAgICAgfSApOwotICAgICAgIAotICAgICAgIG9wZXJhdGlvbk1hbmFnZXJfLnNldEFmdGVyRXhlY3V0ZUZyYWdtZW50TGlzdGVuZXIoCi0gICAgICAgICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBhZnRlckV4ZWN1dGVOZXh0RnJhZ21lbnQoIGZyYWdtZW50ICk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gKTsKLSAgIH0KLQkKLQlwcm90ZWN0ZWQgQ29tbWFuZE1hbmFnZXIgZ2V0T3BlcmF0aW9uTWFuYWdlcigpCi0JewotCQlyZXR1cm4gb3BlcmF0aW9uTWFuYWdlcl87Ci0JfQotCQotCS8qKgotCSAgICogVGhlIENvbW1hbmRGcmFnbWVudEVuZ2luZSBjYWxscyB0aGlzIG1ldGhvZCB3aGVuIGl0IGlzIHBlZWtpbmcgZm9yd2FyZAotCSAgICogaW4gdGhlIGZyYWdtZW50cy4gIFdoZW4gcGVla2luZyBmb3J3YXJkIHRoZSBjb21tYW5kIHN0YWNrIHN0YXRlIGluIHRoZQotCSAgICogZW5naW5lIGlzIG5vdCBjaGFuZ2VzLgotCSAgICogCi0JICAgKiAKLQkgICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCBpdCBpcyBwZWVraW5nIGF0LgotCSAgICogQHJldHVybiBJbmRpY2F0ZXMgd2hldGhlciBwZWVraW5nIHNob3VsZCBzdG9wIG9yIG5vdC4KLQkgICAqLwotCSAgcHJvdGVjdGVkIGJvb2xlYW4gcGVla0ZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotCSAgeyAgICAgCi0JICAgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICAvKioKLQkgICAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgY2FsbHMgdGhpcyBtZXRob2Qgd2hlbiBpdCBpcyBtb3ZpbmcgZm9yd2FyZAotCSAgICogaW4gdGhlIGZyYWdtZW50cy4gICBXaGVuIG1vdmluZyBmb3J3YXJkIHRoZSBjb21tYW5kIHN0YWNrIHN0YXRlIGlzIHNhdmVkCi0JICAgKiBhdCBlYWNoIGZyYWdtZW50IGlzIHRyYXZlcnNlZC4KLQkgICAqIAotCSAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0aGF0IGlzIGJlaW5nIHRyYXZlcnNlZC4KLQkgICAqIEByZXR1cm4gaW5kaWNhdGVzIGlmIHRoZSBmb3J3YXJkIHRyYXZlcnNhbCBzaG91bGQgY29udGludWUuICAKLQkgICAqLwotCSAgcHJvdGVjdGVkIGJvb2xlYW4gbmV4dEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotCSAgeyAgICAgCi0JICAgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICAvKioKLQkgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZWFjaCBmcmFnbWVudCB3aGVuIHRoZSBjb21tYW5kIGVuZ2luZSBpcyB1bndpbmRpbmcKLQkgICAqIGl0cyBzdGFjayBkdXJpbmcgYW4gdW5kbyBvcGVyYXRpb24uCi0JICAgKiAKLQkgICAqIEBwYXJhbSBmcmFnbWVudCAgdGhlIGZyYWdtZW50IGJlaW5nIHVuZG9uZS4KLQkgICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSB1bmRvIHByb2Nlc3Mgc2hvdWxkIGNvbnRpbnVlLgotCSAgICovCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRvRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JICB7ICAJICAJCi0JICAgIHJldHVybiB0cnVlOwotCSAgfQotICAgIAotICAgIHByb3RlY3RlZCBib29sZWFuIGFmdGVyRXhlY3V0ZU5leHRGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgICB7Ci0gICAgICBib29sZWFuICAgICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSB0cnVlOwotICAgICAgQmFzZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciAgID0gKEJhc2VTdGF0dXNIYW5kbGVyKWVudmlyb25tZW50Xy5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICBJU3RhdHVzICAgICAgICAgICBjb21tYW5kU3RhdHVzICAgPSBvcGVyYXRpb25NYW5hZ2VyXy5nZXRMYXN0U3RhdHVzKCk7Ci0gICAgICBJU3RhdHVzICAgICAgICAgICBoYW5kbGVyU3RhdHVzICAgPSBzdGF0dXNIYW5kbGVyLmdldFN0YXR1cygpOwotICAgICAgCi0gICAgICBpZiggY29tbWFuZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IgJiYKLSAgICAgICAgICBoYW5kbGVyU3RhdHVzLmdldFNldmVyaXR5KCkgIT0gSVN0YXR1cy5FUlJPUiApCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZSBjb21tYW5kIHJldHVybmVkIGFuIGVycm9yIHN0YXR1cyBmb3IgdGhlIGVuZ2luZSB0byBzdG9wLAotICAgICAgICAvLyBidXQgdGhlIHN0YXR1cyBoYW5kbGVyIGRpZCBub3QgaGF2ZSByZXBvcnQgYW5kIGVycm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHdpbGwgcmVwb3J0IHRoaXMgc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBjb21tYW5kCi0gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgbWVzc2FnZSB0byBkaXNwbGF5LiAgCi0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBjb21tYW5kU3RhdHVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBlcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBlcnJvck1lc3NhZ2UubGVuZ3RoKCkgPiAwICkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c0hhbmRsZXIucmVwb3J0RXJyb3IoIGNvbW1hbmRTdGF0dXMgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiggY29tbWFuZFN0YXR1cy5nZXRTZXZlcml0eSgpICE9IElTdGF0dXMuRVJST1IgJiYKLSAgICAgICAgICAgICAgIGhhbmRsZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGxhc3QgY29tbWFuZCBkaWRuJ3QgcmV0dXJuIGFuIGVycm9yLCBidXQgdGhlIHN0YXR1cyBoYW5kbGVyCi0gICAgICAgIC8vIGRpZCByZXBvcnQgYW5kIGVycm9yLiAgVGhlcmVmb3JlLCB3ZSBzaG91bGQgc3RvcC4KLSAgICAgICAgZXJyb3JNZXNzYWdlXyA9IGhhbmRsZXJTdGF0dXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSBmYWxzZTsgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIGNvbnRpbnVlRXhlY3V0ZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRFbnZpcm9ubWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50RW52aXJvbm1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxMjVlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyMyAgIDEzMzcxNCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDcyNiAgIDE1MTYxNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5FbnZpcm9ubWVudE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQ2xhc3NFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuSUVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW4uRW52UGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIAotICogQWNjZXNzIHRvIHN0YXR1cyBoYW5kbGVyLCBsb2csIHJlc291cmNlIGNvbnRleHQgYW5kIGNvbW1hbmQgbWFuYWdlci4gIAotICogSW5pdGlhbGl6ZXMgZGF0YSBmb3IgY29tbWFuZHMgZnJvbSBBbnQgcHJvcGVydHkgZmlsZXMgYmFzZWQgb24gYW50RGF0YU1hcHBpbmcgZXh0ZW5zaW9ucy4gCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgQW50RW52aXJvbm1lbnQgZXh0ZW5kcyBFY2xpcHNlRW52aXJvbm1lbnR7Ci0JCi0JcHJpdmF0ZSBIYXNodGFibGUgYW50UHJvcGVydGllc187Ci0JcHJpdmF0ZSBIYXNodGFibGUgb3BlcmF0aW9uRGF0YVJlY29yZF8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JcHJpdmF0ZSBib29sZWFuIG1hcHBpbmdDb21wbGV0ZV87Ci0JcHJpdmF0ZSBDbGFzc0VudHJ5IGNsYXNzRW50cnk7CQotCQkKLQkvLyBleHRlbnNpb25Qb2ludCBuYW1lcyBhbmQgbmFtZXNwYWNlCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIE1BUFBFUl9FWFRfUFQgPSAiYW50RGF0YU1hcHBpbmciOyAgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBTQ0VOQVJJT19FWFRfUFQgPSAiYW50U2NlbmFyaW8iOyAgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBFWFRfUFRfTkFNRVNQQUNFID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiI7IC8vLy8kTk9OLU5MUy0xJAotCQotCS8vIGFudERhdGFNYXBwaW5nIGV4dGVuc2lvbiBwb2ludCBhdHRyaWJ1dGVzCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUFBFUl9PUEVSQVRJT05fQVRUUklCVVRFPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVBQRVJfS0VZX0FUVFJJQlVURT0gImtleSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUEVSX1BST1BFUlRZX0FUVFJJQlVURT0gInByb3BlcnR5IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVBQRVJfVFJBTlNGT1JNX0FUVFJJQlVURT0gInRyYW5zZm9ybSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUEVSX1JFUVVJUkVEX0FUVFJJQlVURT0gInJlcXVpcmVkIjsgLy8kTk9OLU5MUy0xJAotCQkKLQkvLyBhbnRTY2VuYXJpbyBleHRlbnNpb24gcG9pbnQgYXR0cmlidXRlcwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT19UWVBFX0FUVFJJQlVURSA9ICJzY2VuYXJpb1R5cGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDRU5BUklPX0NMQVNTX0FUVFJJQlVURSA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIEFudCBwcm9wZXJ0eSBJRHMKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSQk9TRV9QUk9QRVJUWSA9ICJWZXJib3NlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPVkVSV1JJVEVfUFJPUEVSVFkgPSAiT3ZlcndyaXRlRmlsZXNFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDUkVBVEVGT0xERVJfUFJPUEVSVFkgPSAiQ3JlYXRlRm9sZGVyc0VuYWJsZWQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLT1VUX1BST1BFUlRZID0gIkNoZWNrb3V0RmlsZXNFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT19UWVBFX1BST1BFUlRZID0gIlNjZW5hcmlvVHlwZSI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgICBwcml2YXRlIEFudENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0JCi0JcHVibGljIEFudEVudmlyb25tZW50KEFudENvbnRyb2xsZXIgY29udHJvbGxlciwgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0IGNvbnRleHQsIElFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyLCBIYXNodGFibGUgcHJvcGVydGllcykKLQl7Ci0JICAgc3VwZXIoY29udHJvbGxlci5nZXRPcGVyYXRpb25NYW5hZ2VyKCksIGNvbnRleHQsIGhhbmRsZXIpOwotCSAgIGFudFByb3BlcnRpZXNfID0gcHJvcGVydGllczsJCi0JICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwkKLQkgICBzZXRDb250ZXh0KCBjb250ZXh0ICk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRDb250ZXh0KFRyYW5zaWVudFJlc291cmNlQ29udGV4dCBjb250ZXh0KSAKLQl7Ci0JICBCb29sZWFuIG92ZXJ3cml0ZVNldCAgICA9IGdldEJvb2xlYW5Qcm9wZXJ0eSggT1ZFUldSSVRFX1BST1BFUlRZICk7Ci0JICBCb29sZWFuIGNyZWF0ZWZvbGRlclNldCA9IGdldEJvb2xlYW5Qcm9wZXJ0eSggQ1JFQVRFRk9MREVSX1BST1BFUlRZICk7Ci0JICBCb29sZWFuIGNoZWNrb3V0U2V0ICAgICA9IGdldEJvb2xlYW5Qcm9wZXJ0eSggQ0hFQ0tPVVRfUFJPUEVSVFkgKTsKLQkgIAotCSAgaWYoIG92ZXJ3cml0ZVNldCAhPSBudWxsICkgY29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoIG92ZXJ3cml0ZVNldC5ib29sZWFuVmFsdWUoKSApOwotCSAgaWYoIGNyZWF0ZWZvbGRlclNldCAhPSBudWxsICkgY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCggY3JlYXRlZm9sZGVyU2V0LmJvb2xlYW5WYWx1ZSgpICk7Ci0JICBpZiggY2hlY2tvdXRTZXQgIT0gbnVsbCApIGNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoIGNoZWNrb3V0U2V0LmJvb2xlYW5WYWx1ZSgpICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdmVyYm9zZSgpCi0JewotCSAgQm9vbGVhbiByZXN1bHQgPSBnZXRCb29sZWFuUHJvcGVydHkoIFZFUkJPU0VfUFJPUEVSVFkgKTsKLQkgIAotCSAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gZmFsc2UgOiByZXN1bHQuYm9vbGVhblZhbHVlKCk7Ci0JfQotCQotCXB1YmxpYyBCb29sZWFuIGdldEJvb2xlYW5Qcm9wZXJ0eSggU3RyaW5nIHByb3BlcnR5ICkKLQl7Ci0JICBTdHJpbmcgIHZhbHVlICA9IGdldFByb3BlcnR5KCBwcm9wZXJ0eSApOwkKLQkgIEJvb2xlYW4gcmVzdWx0ID0gbnVsbDsKLQkJICAKLQkgIGlmKCB2YWx1ZSAhPSBudWxsICkKLQkgIHsKLQkJdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpOwotCQlyZXN1bHQgPSBuZXcgQm9vbGVhbiggdmFsdWUuZXF1YWxzKCAidHJ1ZSIpICk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiByZXN1bHQ7Ci0JfQotCQotCS8vIHJldHVybnMgU3RyaW5nIHNpbmNlIHRoZSBwcm9wZXJ0eSB0YWJsZSBidWlsdCBieSBBbnQgaXMgcHJvcGVydHkgdmFsdWUgcGFpcnMgd2hlcmUgdGhlIHZhbHVlIGlzIGEgU3RyaW5nCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIGtleSkKLQl7Ci0JCU9iamVjdCBwcm9wZXJ0eSA9IGFudFByb3BlcnRpZXNfLmdldChrZXkpOwotCQlpZiAocHJvcGVydHkgIT0gbnVsbCAmJiAoIXByb3BlcnR5LnRvU3RyaW5nKCkuZXF1YWxzKCIiKSkpCi0JCQlyZXR1cm4gcHJvcGVydHkudG9TdHJpbmcoKS50cmltKCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvLyBjYWxsIGZyb20gZW5naW5lIHByaW9yIHRvIGV4ZWN1dGluZyB0aGUgb3BlcmF0aW9uIAotCXB1YmxpYyBJU3RhdHVzIGluaXRPcGVyYXRpb25EYXRhKEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wKQotCXsKLQkJLy9jaGVjayB0byBzZWUgaWYgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIHByaW1lZCBmb3IgdGhpcyBvcGVyYXRpb24gCi0JCVN0cmluZyBxdWFsaWZpZWRDbGFzc05hbWUgPSBvcC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJaWYgKG9wZXJhdGlvbkRhdGFSZWNvcmRfLmdldChxdWFsaWZpZWRDbGFzc05hbWUpID09IG51bGwpCi0JCXsKLQkJCWNsYXNzRW50cnkgPSBuZXcgQ2xhc3NFbnRyeSgpOwotCQkJCi0JCQl0cnkgewotCQkJCS8vZXh0ZW5zaW9uIGxvb2t1cCBmb3IgdGhlIGJlYW4gLSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eSBmb3IgaXQKLQkJCQlFbnVtZXJhdGlvbiBvcGVyYXRpb25EYXRhID0gZ2V0TWFwcGluZ0V4dGVuc2lvbnMob3ApOwkJCQkJCi0JCQkJY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xz0gZ2V0U2V0dGVyTGlzdChvcCk7CQkKLQkJCQl3aGlsZSAob3BlcmF0aW9uRGF0YS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJCQl7CQkJCQotCQkJCQlQcm9wZXJ0eURhdGFIb2xkZXIgbWFwcGluZyA9IChQcm9wZXJ0eURhdGFIb2xkZXIpb3BlcmF0aW9uRGF0YS5uZXh0RWxlbWVudCgpOwotCQkJCQkJCi0JCQkJCSAgICBtYXBwaW5nQ29tcGxldGVfID0gZmFsc2U7Ci0JCQkJCQlTdHJpbmcgcHJvcGVydHkgPSBtYXBwaW5nLnByb3BlcnR5XzsKLQkJCQkJCVN0cmluZyBzZXR0ZXJNZXRob2ROYW1lID0gY3JlYXRlU2V0dGVyTmFtZShwcm9wZXJ0eSk7CQkKLQkJCQkJCQkJCQkJCQotCQkJCQkJaW50IHN0ZXAgPSAxOwotCQkJCQkJd2hpbGUgKCFtYXBwaW5nQ29tcGxldGVfKQotCQkJCQkJewkJCQkJCQkKLQkJCQkJCSAgIHN3aXRjaCAoc3RlcCkgewotCQkJCQkJCWNhc2UgMToKLQkJCQkJCQkJbWFwcGluZ0NvbXBsZXRlXyA9IHRyYW5zZm9ybUFuZFNldChtYXBwaW5nLCBzZXR0ZXJNZXRob2ROYW1lKTsJCQkJCQkJCQotCQkJCQkJCQlicmVhazsJCQkJCQkJCQotCQkJCQkJCWNhc2UgMjoKLQkJCQkJCQkJbWFwcGluZ0NvbXBsZXRlXyA9IGNhbGxTZXR0ZXIobWFwcGluZy5vcGVyYXRpb25fLCBtYXBwaW5nLnZhbHVlXywgc2V0dGVyTWV0aG9kTmFtZSk7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkKLQkJCQkJCQljYXNlIDM6Ci0JCQkJCQkJCW1hcHBpbmdDb21wbGV0ZV8gPSBjYWxsUHJpbWl0aXZlU2V0dGVyKG1hcHBpbmcpOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQkKLQkJCQkJCQljYXNlIDQ6Ci0JCQkJCQkJCW1hcHBpbmdDb21wbGV0ZV8gPSBjYWxsU2V0dGVyQ29uc3RydWN0b3IobWFwcGluZyk7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkKLQkJCQkJCQlkZWZhdWx0OgotCQkJCQkJCQltYXBwaW5nQ29tcGxldGVfID0gdHJ1ZTsKLQkJCQkJCQkJYnJlYWs7CQkJCQkJCQkKLQkJCQkJCQl9Ci0JCQkJCQkgICBzdGVwKys7Ci0JCQkJCQl9CQkJCQkKLQkJCQkgIH0JCQkJCi0gICAgICAgICAgICAgICAgLy9hZGQgb3BlcmF0aW9uIHRvIHRoZSByZWNvcmQgLSBubyBuZWVkIHRvIGluaXRpYWxpemUgYWdhaW4uLi4KLSAgICAgICAgICAgICAgICBvcGVyYXRpb25EYXRhUmVjb3JkXy5wdXQocXVhbGlmaWVkQ2xhc3NOYW1lLCAiIik7Ci0JCQl9CQkJCi0JCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQl7CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBzZXR0ZXIgbmFtZSBiYXNlZCBvbiB0aGUgcHJvcGVydHkgcGFzc2VkIGluLiAgSWYgdGhlIAotCSAqIHByb3BlcnR5IGhhcyBhbnkgbGVhZGluZyBxdWFsaWZpZXJzIHRoZXkgYXJlIHN0cmlwcGVkIG9mZi4KLQkgKiBUaGUgcHJvcGVydHkgaXMgY2FwaXRhbGl6ZWQgYW5kIHNldCBpcyBwcmVwZW5kZWQuCi0JICogQHBhcmFtIHByb3BlcnR5ICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCByZXF1aXJlcyBhIHNldHRlci4KLQkgKiBAcmV0dXJuCi0JICovCQotCXByaXZhdGUgU3RyaW5nIGNyZWF0ZVNldHRlck5hbWUoU3RyaW5nIHByb3BlcnR5KQotCXsJCQotCQl3aGlsZSAocHJvcGVydHkuaW5kZXhPZigiLiIpPj0wKQotCQl7Ci0JCQlwcm9wZXJ0eT1wcm9wZXJ0eS5zdWJzdHJpbmcocHJvcGVydHkuaW5kZXhPZigiLiIpKzEpOwotCQl9CQkgCi0JCSBTdHJpbmcgZmlyc3RDaGFyID0gcHJvcGVydHkuc3Vic3RyaW5nKDAsMSk7Ci0JCSBmaXJzdENoYXIgPSBmaXJzdENoYXIudG9VcHBlckNhc2UoKTsKLQkJIHByb3BlcnR5ID0gZmlyc3RDaGFyICsgcHJvcGVydHkuc3Vic3RyaW5nKDEpOyAgCi0JCSBTdHJpbmcgc2V0dGVyTmFtZSA9ICJzZXQiICsgcHJvcGVydHk7CQkgCi0JCSByZXR1cm4gc2V0dGVyTmFtZTsJCSAKLQl9CQotCQotCSAgIC8qKgotCSAgICAqIFJldHJpZXZlcyBleHRlbnNpb25zIGZvciB0aGUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IGFudERhdGFNYXBwaW5nCi0JICAgICogZXh0ZW5zaW9uIHBvaW50LiAgRXh0cmFjdHMgdGhvc2UgdGhhdCB3aXRoIGNsYXNzIGF0dHJpYnV0ZSB2YWx1ZXMgdGhhdCBtYXRjaCBvcGVyYXRpb25OYW1lLgotCSAgICAqIEFsbCBtYXBwaW5ncyBhcmUgY29udmVydGVkIHRvIFByb3BlcnR5RGF0YUhvbGRlciBvYmplY3RzLgotCSAgICAqIEFueSBtOjEgQW50IGtleSB0byBwcm9wZXJ0eSBtYXBwaW5ncyBhcmUgY29sbGVjdGVkIGludG8gYSBrZXktdmFsdWUgbWFwIHdpdGhpbgotCSAgICAqIGEgc2luZ2xlIFByb3BlcnR5RGF0YUhvbGRlci4gIAotCSAgICAqIEBwYXJhbSBvcGVyYXRpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBpcyBiZWluZyBpbml0aWFsaXplZC4KLQkgICAgKiBAcmV0dXJuIEEgY29sbGVjdGlvbiBvZiBQcm9wZXJ0eURhdGFIb2xkZXIgb2JqZWN0cy4gUmV0dXJucyBudWxsIGlmIHRoZXJlIGFyZSBubyBleHRlbnNpb25zIG1hdGNoaW5nIHRoZSBvcGVyYXRpb25OYW1lLgotCSAgICAqLwotCSAgIHByaXZhdGUgRW51bWVyYXRpb24gZ2V0TWFwcGluZ0V4dGVuc2lvbnMoQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgIHsJICAgCQkgICAKLQkJICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCSAgIC8vZ28gdG8gZXh0IHJlZ2lzdHJ5IGFuZCBnZXQgYWxsIGFudE1hcHBpbmcgZXh0ZW5zaW9ucwotCQkgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJICAgSUV4dGVuc2lvblBvaW50IGV4dFB0ID0gcmVnLmdldEV4dGVuc2lvblBvaW50KEVYVF9QVF9OQU1FU1BBQ0UsIE1BUFBFUl9FWFRfUFQpOwotCQkgICBIYXNodGFibGUgZGF0YVRhYmxlID0gbmV3IEhhc2h0YWJsZSgyNSk7Ci0JCSAgIAotCQkgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IGV4dFB0LmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotCQkgICAKLQkJICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewotCQkJCi0JCQkgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNlID0gZWxlbWVudHNbaV07Ci0JCQkgT2JqZWN0IG9iaiA9IGNlLmdldEF0dHJpYnV0ZShNQVBQRVJfT1BFUkFUSU9OX0FUVFJJQlVURSk7Ci0JCQkgLy8gbG9vayBmb3IgbWFwcGluZ3MgZm9yIHRoaXMgb3BlcmF0aW9uCi0JCQkgaWYgKG9iai5lcXVhbHMob3BlcmF0aW9uTmFtZSkpCi0JCQkgewkJCQkgCi0JCQkJIFN0cmluZyBrZXkgPSBjZS5nZXRBdHRyaWJ1dGUoTUFQUEVSX0tFWV9BVFRSSUJVVEUpOwotCQkJCSBTdHJpbmcgdmFsdWUgPSBnZXRQcm9wZXJ0eShrZXkpOwotCQkJCSAKLQkJCQkgLy9jaGVjayB0byBzZWUgaWYgdGhlIHByb3BlcnR5IGZvciB0aGlzIGV4dGVuc2lvbiBpcyBhbHJlYWR5IGluIHRoZSBkYXRhIHRhYmxlCi0JCQkJIC8vIGlmIHNvLCB0aGVyZSBpcyBhIG06MSBtYXBwaW5nCi0JCQkJIGlmICh2YWx1ZSAhPSBudWxsKSAgLy9vbmx5IGRvIGEgbWFwcGluZyBpZiB0aGVyZSBpcyBhbiBBbnQgcHJvcGVydHkgdmFsdWUgcGFzc2VkIGluLi4uCi0JCQkJIHsKLQkJCQkKLQkJCQkJIFN0cmluZyBwcm9wZXJ0eSA9IGNlLmdldEF0dHJpYnV0ZShNQVBQRVJfUFJPUEVSVFlfQVRUUklCVVRFKTsKLQkJCQkJIE9iamVjdCB0cmFuc2Zvcm0gPSBudWxsOwotCQkJCQkgdHJ5Ci0JCQkJCSB7Ci0JCQkJCQkgLy9jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgaXMgYW4gdHJhbnNmb3JtIGF0dHJpYnV0ZSBwcm92aWRlZAotCQkJCQkJIC8vICBpZiBzbywgZ2V0IHRoZSBjbGFzcyB0byBkbyB0aGUgdHJhbnNmb3JtYXRpb24KLQkJCQkJCSBpZiAoY2UuZ2V0QXR0cmlidXRlKE1BUFBFUl9UUkFOU0ZPUk1fQVRUUklCVVRFKSE9IG51bGwpCi0JCQkJCQkJIHRyYW5zZm9ybSA9IGNlLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oTUFQUEVSX1RSQU5TRk9STV9BVFRSSUJVVEUpOwkgCi0JCQkJCSB9Ci0JCQkJCSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJICAgU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDkyLCBjZXguZ2V0TWVzc2FnZSgpLCBjZXgpOwotCQkJCQkgICBnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJCQkgICBnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDUwOTIsIHRoaXMsICJnZXRNYXBwaW5nRXh0ZW5zaW9ucyIsIEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfREFUQV9UUkFOU0ZPUk0sIGtleSwgdHJhbnNmb3JtKSk7Ci0JCQkJCSAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKGVycm9yU3RhdHVzKTsKLQkJCQkJIH0KLQkJCQkJIAotCQkJCQkgaWYgKHRyYW5zZm9ybSAhPSBudWxsICYmIHRyYW5zZm9ybSBpbnN0YW5jZW9mIEJlYW5Nb2RpZmllci8qZGF0YVRhYmxlLmNvbnRhaW5zS2V5KHByb3BlcnR5KSovKQotCQkJCQkgewotCQkJCQkJIC8vZ2V0IHRoZSBQcm9wZXJ0eURhdGFIb2xkZXIgZnJvbSB0aGUgdGFibGUKLQkJCQkJCSBQcm9wZXJ0eURhdGFIb2xkZXIgaG9sZGVyID0gKFByb3BlcnR5RGF0YUhvbGRlcilkYXRhVGFibGUuZ2V0KHByb3BlcnR5KTsKLQkJCQkJCSBpZiAoaG9sZGVyID09IG51bGwpCi0JCQkJCQkgewotCQkJCQkJCSBob2xkZXIgPSBuZXcgUHJvcGVydHlEYXRhSG9sZGVyKCk7Ci0JCQkJCQkJIGhvbGRlci5rZXlfID0gIiI7Ci0JCQkJCQkJIGhvbGRlci52YWx1ZV8gPSAiIjsJCi0JCQkJCQkJIGhvbGRlci50cmFuc2Zvcm1fID0gdHJhbnNmb3JtOwotCQkJCQkJCSBob2xkZXIub3BlcmF0aW9uXyA9IG9wZXJhdGlvbjsKLQkJCQkJCQkgaG9sZGVyLnByb3BlcnR5XyA9IHByb3BlcnR5OwotCQkJCQkJCSBob2xkZXIubWFwXyA9IG5ldyBIYXNoTWFwKCk7Ci0JCQkJCQkJIGhvbGRlci5tYXBfLnB1dChrZXksIHZhbHVlKTsKLQkJCQkJCQkgZGF0YVRhYmxlLnB1dChwcm9wZXJ0eSwgaG9sZGVyKTsKLQkJCQkJCSB9CQkJCQkJIAotCQkJCQkJIGVsc2UKLQkJCQkJCSB7CQkJCQkJCi0JCQkJCQkJaG9sZGVyLm1hcF8ucHV0KGtleSwgdmFsdWUpOwotCQkJCQkJIH0JCQkJCQotCQkJCQkgfQotCQkJCQkgZWxzZSAgLy9wbGFpbiBwcm9wZXJ0eSBtYXBwaW5nIG5vdCBhIGJlYW4KLQkJCQkJIHsKLQkJCQkJCSBQcm9wZXJ0eURhdGFIb2xkZXIgaG9sZGVyID0gbmV3IFByb3BlcnR5RGF0YUhvbGRlcigpOwotCQkJCQkJIGhvbGRlci5vcGVyYXRpb25fID0gb3BlcmF0aW9uOwotCQkJCQkJIGhvbGRlci5rZXlfID0ga2V5OwotCQkJCQkJIGhvbGRlci5wcm9wZXJ0eV8gPSBwcm9wZXJ0eTsKLQkJCQkJCSBob2xkZXIudHJhbnNmb3JtXyA9IHRyYW5zZm9ybTsKLQkJCQkJCSBob2xkZXIudmFsdWVfID0gdmFsdWU7Ci0JCQkJCQkgZGF0YVRhYmxlLnB1dChwcm9wZXJ0eSwgaG9sZGVyKTsKLQkJCQkJIH0JCQkgCi0JCQkJIH0KLQkJCQkgZWxzZSBpZihjZS5nZXRBdHRyaWJ1dGUoTUFQUEVSX1JFUVVJUkVEX0FUVFJJQlVURSkhPW51bGwgJiYgY2UuZ2V0QXR0cmlidXRlKE1BUFBFUl9SRVFVSVJFRF9BVFRSSUJVVEUpLmVxdWFscygidHJ1ZSIpKQotCQkJCSB7CQkJCQotCQkJCQkgU3RyaW5nIG1zZyA9IEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfUkVRVUlSRURfUFJPUEVSVFksIGtleS50b1N0cmluZygpKTsKLQkJCQkJIFN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIAotCQkJCQkJCQlFbnZQbHVnaW4uSUQsCi0JCQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQkJCW1zZywgCi0JCQkJCQkJCW51bGwpOwotCQkJCQkgZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1c09iaik7Ci0JICAgICAgICAgICAgICAgICBnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDk5OTksIHRoaXMsICJnZXRNYXBwaW5nRXh0ZW5zaW9ucyIsIG1zZyk7CQkJCQkgCi0JCQkJIH0KLQkJCQkgZWxzZSBpZiAodmVyYm9zZSgpKQotCQkJCSB7Ci0JCQkJCSBTdHJpbmcgbXNnID0gRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0lORk9fQU5UX19QUk9QRVJUWV9ERUZBVUxULCBrZXkudG9TdHJpbmcoKSk7Ci0JCQkJCSBTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQkJCQlFbnZQbHVnaW4uSUQsCi0JCQkJCQkJCUlTdGF0dXMuSU5GTywKLQkJCQkJCQkJbXNnLCAKLQkJCQkJCQkJbnVsbCk7Ci0JCQkJCSBnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0SW5mbyhzdGF0dXNPYmopOwotCQkJCQkgZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgIndzX2FudCIsIDk5OTksIHRoaXMsICJnZXRNYXBwaW5nRXh0ZW5zaW9ucyIsIG1zZyk7CQkJCQkgCi0JCQkJIH0KLQkJICAgICAgfSAgICAJIAotCQkgIH0KLQkJICAgcmV0dXJuIGRhdGFUYWJsZS5lbGVtZW50cygpOwotCQl9ICAgICAKLQkgICAKLQkgICBwcml2YXRlIGJvb2xlYW4gdHJhbnNmb3JtQW5kU2V0KFByb3BlcnR5RGF0YUhvbGRlciBtYXBwaW5nLCBTdHJpbmcgc2V0dGVyTWV0aG9kTmFtZSkKLQkgICB7Ci0JCQlPYmplY3QgdHJhbnNmb3JtID0gbWFwcGluZy50cmFuc2Zvcm1fOwotCQkJaWYgKHRyYW5zZm9ybSAhPSBudWxsKQotCQkJewotCQkJCS8vIGdldCB0cmFuc2Zvcm0gY2xhc3MgJiBjcmVhdGUgc2V0dGVyIHBhcmFtZXRlcnMJCQotCQkJCXRyeQotCQkJCXsKLQkJCQkJLy9PYmplY3QgY2xhc3NPYmplY3QgPSBDbGFzcy5mb3JOYW1lKHRyYW5zZm9ybSkubmV3SW5zdGFuY2UoKTsKLQkJCQkJT2JqZWN0IHBhcmFtID0gbmV3IE9iamVjdCgpOwotCQkJCQlpZiAodHJhbnNmb3JtIGluc3RhbmNlb2YgVHJhbnNmb3JtZXIpCi0JCQkJCXsKLQkJCQkJCVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gKFRyYW5zZm9ybWVyKXRyYW5zZm9ybTsJCQkJCQkKLQkJCQkJCS8vIHRyYW5zZm9ybSB0aGUgcHJvcGVydHkgdmFsdWUKLQkJCQkJCXBhcmFtID0gdHJhbnNmb3JtZXIudHJhbnNmb3JtKG1hcHBpbmcudmFsdWVfKTsJCQkJCQkKLQkJCQkJfQotCQkJCQllbHNlIGlmIChtYXBwaW5nLm1hcF8gIT0gbnVsbCAmJiB0cmFuc2Zvcm0gaW5zdGFuY2VvZiBCZWFuTW9kaWZpZXIpCi0JCQkJCXsKLQkJCQkJCSAgQmVhbk1vZGlmaWVyIG1vZGlmaWVyID0gKEJlYW5Nb2RpZmllcil0cmFuc2Zvcm07CQkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kIGdldHRlciA9IGdldEdldHRlck1ldGhvZChtYXBwaW5nKTsKLQkJCQkJCSAgcGFyYW0gPSBnZXR0ZXIuaW52b2tlKG1hcHBpbmcub3BlcmF0aW9uXywgbmV3IE9iamVjdFtde30pOwkJCQkJCSAgCi0JCQkJCQkgIG1vZGlmaWVyLm1vZGlmeShwYXJhbSwgbWFwcGluZy5tYXBfKTsKLQkJCQkJfQkJCQkJCQkJCQkJCQotCQkJCQlyZXR1cm4gY2FsbFNldHRlcihtYXBwaW5nLm9wZXJhdGlvbl8sIHBhcmFtLCBzZXR0ZXJNZXRob2ROYW1lKTsKLQkJCQkJCi0JCQkJfQotCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQkJCXsKLQkJCQkJZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKG5ldyBTdGF0dXMoU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgNTA5MywgZXhjLmdldE1lc3NhZ2UoKSwgZXhjKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5MywgdGhpcywgInRyYW5zZm9ybUFuZFNldCIsIEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfREFUQV9UUkFOU0ZPUk0sIG1hcHBpbmcua2V5XywgbWFwcGluZy50cmFuc2Zvcm1fKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZXhjLmdldE1lc3NhZ2UoKSk7Ci0JCQkJfQkJCQkKLQkJCX0KLQkJCXJldHVybiBmYWxzZTsKLQkgICB9CSAgIAotCSAgIAotCSAgIHByaXZhdGUgVmVjdG9yIGdldFNldHRlckxpc3QoT2JqZWN0IG9wKQotCSAgIHsKLQkJICAgVmVjdG9yIHJlc3VsdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IG9wLmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwkJICAgICAKLQkJICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotCQkgICAgIHsKLQkJICAgICAgIE1ldGhvZCAgbWV0aG9kICAgICA9IG1ldGhvZHNbaW5kZXhdOwotCQkgICAgICAgYm9vbGVhbiBpc1B1YmxpYyAgID0gTW9kaWZpZXIuaXNQdWJsaWMoIG1ldGhvZC5nZXRNb2RpZmllcnMoKSApOwotCQkgICAgICAgQ2xhc3MgICByZXR1cm5UeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKLQkJICAgICAKLQkJICAgICAgIGlmKCBpc1B1YmxpYyAmJiAKLQkJICAgICAgICAgICByZXR1cm5UeXBlID09IFZvaWQuVFlQRSAmJiAKLQkJICAgICAgICAgICBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMSAmJgotCQkgICAgICAgICAgIG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCggInNldCIgKSkKLQkJICAgICAgIHsKLQkJICAgICAgICAgbWV0aG9kLnNldEFjY2Vzc2libGUoIHRydWUgKTsKLQkJICAgICAgICAgcmVzdWx0LmFkZCggbWV0aG9kICk7Ci0JCSAgICAgICB9Ci0JCSAgICAgfQotCQkJICAgICAKLQkgICAgIHJldHVybiByZXN1bHQ7Ci0JICAgfQotCSAgIAotCSAgIHByaXZhdGUgTWV0aG9kIGdldEdldHRlck1ldGhvZChQcm9wZXJ0eURhdGFIb2xkZXIgbWFwcGluZykKLQkgICB7Ci0JICAgICAgIE1ldGhvZCBnZXR0ZXJGb3VuZCA9IG51bGw7ICAgICAKLQotCSAgICAgICBpZiAoY2xhc3NFbnRyeS5nZXR0ZXJMaXN0XyA9PSBudWxsKQotCSAgICAgICB7Ci0JICAgIAkgICBjbGFzc0VudHJ5LmdldHRlckxpc3RfID0gZ2V0R2V0dGVyTGlzdChtYXBwaW5nLm9wZXJhdGlvbl8pOyAgCi0JICAgICAgIH0KLQkgICAgICAgCi0JICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGFzc0VudHJ5LmdldHRlckxpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0JICAgICAgIHsKLQkgICAgICAgICBNZXRob2QgZ2V0dGVyID0gKE1ldGhvZCljbGFzc0VudHJ5LmdldHRlckxpc3RfLmVsZW1lbnRBdCggaW5kZXggKTsKLQkgICAgICAgICAKLQkgICAgICAgICBpZiggZ2V0dGVyLmdldE5hbWUoKS5lcXVhbHMoICJnZXQiICsgbWFwcGluZy5wcm9wZXJ0eV8gKSkKLQkgICAgICAgICB7Ci0JICAgICAgICAgICAgZ2V0dGVyRm91bmQgPSBnZXR0ZXI7Ci0JICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgICAgfSAgICAgICAKLQkgICAgICAgfQotCSAgICAgICByZXR1cm4gZ2V0dGVyRm91bmQ7Ci0JICAgfQotCSAgIAotCSAgIHByaXZhdGUgVmVjdG9yIGdldEdldHRlckxpc3QoIE9iamVjdCBvYmplY3QgKQotCSAgIHsKLQkgICAgIFZlY3RvciByZXN1bHQgPSBuZXcgVmVjdG9yKCk7CSAgICAgCi0JICAgICBNZXRob2RbXSBtZXRob2RzID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwotCSAgICAgCi0JICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotCSAgICAgewotCSAgICAgICBNZXRob2QgIG1ldGhvZCAgICAgPSBtZXRob2RzW2luZGV4XTsKLQkgICAgICAgYm9vbGVhbiBpc1B1YmxpYyAgID0gTW9kaWZpZXIuaXNQdWJsaWMoIG1ldGhvZC5nZXRNb2RpZmllcnMoKSApOwotCSAgICAgICBDbGFzcyAgIHJldHVyblR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotCSAgICAgCi0JICAgICAgIGlmKCBpc1B1YmxpYyAmJiAKLQkgICAgICAgICAgIHJldHVyblR5cGUgIT0gVm9pZC5UWVBFICYmIAotCSAgICAgICAgICAgbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDAgJiYKLQkgICAgICAgICAgIG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCggImdldCIgKSkKLQkgICAgICAgewotCSAgICAgICAgIG1ldGhvZC5zZXRBY2Nlc3NpYmxlKCB0cnVlICk7Ci0JICAgICAgICAgcmVzdWx0LmFkZCggbWV0aG9kICk7Ci0JICAgICAgIH0KLQkgICAgIH0KLQkgICAgIAotCSAgICAgcmV0dXJuIHJlc3VsdDsKLQkgICB9ICAgCi0gICAgICAgCi0JICAgcHJpdmF0ZSBib29sZWFuIGNhbGxTZXR0ZXIoQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3AsIE9iamVjdCBwYXJhbSwgU3RyaW5nIHNldHRlck1ldGhvZE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICAgewotCQkgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSAKLQkJICAgewotCQkJCU1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJaWYgKG1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKHNldHRlck1ldGhvZE5hbWUpKQotCQkJCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkgICAgICAgaWYgKHBhcmFtVHlwZXMubGVuZ3RoID09IDEgJiYgcGFyYW0gIT0gbnVsbCkKLQkJCSAgICAgICB7CQkJICAKLQkJCSAgICAgICAgCSB0cnl7CQkJICAgICAgCQkJCi0JCQkgICAgIAkJCSBtZXRob2QuaW52b2tlKG9wLCBuZXcgT2JqZWN0W117cGFyYW19KTsKLQkJCSAgICAgCQkJIHJldHVybiB0cnVlOwotCQkJICAgICAJCSB9Ci0JCQkgICAgIAkJIGNhdGNoKEV4Y2VwdGlvbiBjZXgpewotCQkJICAgICAJCQlTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDUwOTQsIGNleC5nZXRNZXNzYWdlKCksIGNleCk7Ci0JCQkgICAgIAkJCWdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCQkgICAgIAkJCWdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5NCwgdGhpcywgImNhbGxTZXR0ZXIiLCBFbnZpcm9ubWVudE1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX0NBTExfU0VUVEVSLCBzZXR0ZXJNZXRob2ROYW1lKSk7Ci0JCQkgICAgIAkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKGVycm9yU3RhdHVzKTsKLQkJCSAgICAgCQkgfQotCQkJICAgICAgIH0gIAotCQkJCX0KLQkJCX0KLQkJICAgIHJldHVybiBmYWxzZTsKLQkgICB9Ci0JICAgCi0JCi0JICAgLy8gbG9vayBmb3Igc2V0dGVyIHdpdGggcHJpbWl0aXZlIHR5cGUgcGFyYW1ldGVyIC0gaWYgZmluZCBvbmUsIGNvbnZlcnQgU3RyaW5nIHByb3BlcnR5VmFsdWUgYW5kIGNhbGwgaXQKLQkgICBwcml2YXRlIGJvb2xlYW4gY2FsbFByaW1pdGl2ZVNldHRlcihQcm9wZXJ0eURhdGFIb2xkZXIgbWFwcGluZykgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgICB7CQkJCi0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0JCQkJTWV0aG9kIGVsZW1lbnQgPSAoTWV0aG9kKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJQ2xhc3NbXSBwYXJtVHlwZXMgPSBlbGVtZW50LmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkJaWYgKHBhcm1UeXBlcy5sZW5ndGg9PTEgJiYgcGFybVR5cGVzWzBdLmlzUHJpbWl0aXZlKCkpCi0JCQkJewkJCQkJCQkJCQkKLQkJCQkJQ2xhc3MgcGFybVR5cGUgPSBwYXJtVHlwZXNbMF0uZ2V0Q2xhc3MoKTsKLQkJCQkJT2JqZWN0IHNldHRlclBhcm0gPSBudWxsOwotCQkJCQlpZiAocGFybVR5cGUuZXF1YWxzKEludGVnZXIuY2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gSW50ZWdlci52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoQm9vbGVhbi5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBCb29sZWFuLnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhDaGFyYWN0ZXIuY2xhc3MpICYmIG1hcHBpbmcudmFsdWVfLmxlbmd0aCgpID09IDEpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBuZXcgQ2hhcmFjdGVyKG1hcHBpbmcudmFsdWVfLmNoYXJBdCgwKSk7ICAKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoQnl0ZS5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBCeXRlLnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhTaG9ydC5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBTaG9ydC52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoTG9uZy5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBMb25nLnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhGbG9hdC5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBGbG9hdC52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoRG91YmxlLmNsYXNzKSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IERvdWJsZS52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQkJCQkJCQkJCQkKLQkJCQkgICAgaWYgKHNldHRlclBhcm0gIT0gbnVsbCkKLQkJCQkgICAgewkKLQkJCQkgICAgCXRyeQotCQkJCSAgICAJewotCQkJCSAgICAJCWVsZW1lbnQuaW52b2tlKG1hcHBpbmcub3BlcmF0aW9uXywgbmV3IE9iamVjdFtde3NldHRlclBhcm19KTsKLQkJCQkJICAgIAlyZXR1cm4gdHJ1ZTsJCi0JCQkJICAgIAl9Ci0JCQkJICAgIAljYXRjaChFeGNlcHRpb24gZSl7Ci0JCQkJICAgIAkJU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDk1LCBlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCQkJICAgIAkJZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCQkgICAgCQlnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDUwOTUsIHRoaXMsICJjYWxsUHJpbWl0aXZlU2V0dGVyIiwgRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9DQUxMX1NFVFRFUiwgZWxlbWVudC5nZXROYW1lKCkpKTsKLQkJCQkgICAgCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihlcnJvclN0YXR1cyk7Ci0JCQkJICAgIAl9Ci0JCQkJICAgIH0JCQkKLQkJCQl9Ci0JCSAgICB9ICAgCi0JCQlyZXR1cm4gZmFsc2U7Ci0JICAgfQotCQkKLQkJLy9jaGVjayBmb3Igc2V0dGVyIHdpdGggcGFyYW1ldGVyIHR5cGUgdGhhdCB0YWtlcyBhIFN0cmluZyB0byBjb25zdHJ1Y3QKLQkJLy8gY29uc3RydWN0IHRoZSBwYXJhbWV0ZXIgdXNpbmcgU3RyaW5nICYgY2FsbCB0aGUgc2V0dGVyICAKLQkgICBwcml2YXRlIGJvb2xlYW4gY2FsbFNldHRlckNvbnN0cnVjdG9yKFByb3BlcnR5RGF0YUhvbGRlciBtYXBwaW5nKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgIHsJCi0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0JCQkJTWV0aG9kIGVsZW1lbnQgPSAoTWV0aG9kKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJQ2xhc3NbXSBwYXJtVHlwZXMgPSBlbGVtZW50LmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkJQ2xhc3NbXSBzdHJpbmdQYXJtID0gbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfTsKLQkJCQlpZiAocGFybVR5cGVzLmxlbmd0aD09MSkKLQkJCQl7Ci0JCQkJCXRyeQotCQkJCQl7CQkJCi0JCQkJCQlDb25zdHJ1Y3RvciBjdG9yID0gcGFybVR5cGVzLmdldENsYXNzKCkuZ2V0Q29uc3RydWN0b3Ioc3RyaW5nUGFybSk7Ci0JCQkJCQlPYmplY3QgcGFyYW1ldGVyID0gY3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W117bWFwcGluZy52YWx1ZV99KTsKLQkJCQkJCWVsZW1lbnQuaW52b2tlKG1hcHBpbmcub3BlcmF0aW9uXywgbmV3IE9iamVjdFtde3BhcmFtZXRlcn0pOwkJCQkJCQotCQkJCQl9Ci0JCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQkJCQl7Ci0JCQkJCQlTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDUwOTYsIGV4Yy5nZXRNZXNzYWdlKCksIGV4Yyk7Ci0JCQkJCQlnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJCQkJZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsICJ3c19hbnQiLCA1MDk2LCB0aGlzLCAiY2FsbFNldHRlckNvbnN0cnVjdG9yIiwgRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9DQUxMX1NFVFRFUiwgZWxlbWVudC5nZXROYW1lKCkpKTsKLQkJCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKGVycm9yU3RhdHVzKTsKLQkJCQkJfQotCQkJCX0KLQkgICAgICAgIH0JCQkKLQkJICAgcmV0dXJuIGZhbHNlOwotCSAgIH0KLQotCSAgIC8qKgotCSAgICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgaGVscHMgbWFuYWdlIGV4ZWN1dGlvbi91bmRvaW5nIG9mIENvbW1hbmRzLgotCSAgICAqLwotCSAgIHB1YmxpYyBDb21tYW5kTWFuYWdlciBnZXRDb21tYW5kTWFuYWdlciAoKXsKLQkJICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldE9wZXJhdGlvbk1hbmFnZXIoKTsKLQkgICB9IAotCSAgIAotCSAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Um9vdENvbW1hbmRGcmFnbWVudCgpIAotICAgICAgIHsKLSAgICAJICAgCi0gICAgCSAgIC8vbG9vayB1cCB0aGUgY29tbWFuZEZyYWdtZW50IGluIHRoZSBzY2VuYXJpb1JlZ2lzdHJ5IGV4dGVuc2lvbiBwb2ludCB3aXRoIGFuIElEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNjZW5hcmlvIHByb3BlcnR5IGluIHRoZSBwcm9wZXJ0eXRhYmxlCi0gICAgCSAgIFN0cmluZyBzY2VuYXJpb1Byb3BlcnR5ID0gKFN0cmluZylnZXRQcm9wZXJ0eShTQ0VOQVJJT19UWVBFX1BST1BFUlRZKTsKLSAgICAJICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCSAgIElFeHRlbnNpb25Qb2ludCBleHRQdCA9IHJlZy5nZXRFeHRlbnNpb25Qb2ludChFWFRfUFRfTkFNRVNQQUNFLCBTQ0VOQVJJT19FWFRfUFQpOwotCQkgICAKLQkJICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBleHRQdC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLQkJICAgCi0JCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLQkJCQotCQkJIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50ID0gZWxlbWVudHNbaV07CQkJIAotCQkJIGlmIChjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZShTQ0VOQVJJT19UWVBFX0FUVFJJQlVURSkuZXF1YWxzKHNjZW5hcmlvUHJvcGVydHkpKQotCQkJIHsJCQkJIAotCQkJCSB0cnkKLQkJCQkgewkJCQkJIAotCQkJCQlPYmplY3Qgb2JqID0gY29uZmlnRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKFNDRU5BUklPX0NMQVNTX0FUVFJJQlVURSk7Ci0JCQotCQkJCQlpZiAob2JqIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50KQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudClvYmo7Ci0JCQkJCX0KLQkJCQkgfQotCQkJCSBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLQkJCQkgewotCQkJCQkgU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDk3LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCQkJCQkgZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCQkJIGdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5NywgdGhpcywgImdldFJvb3RDb21tYW5kRnJhZ21lbnQiLCBFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfQ01EX0ZSQUdNRU5UKTsJCQkJCSAKLQkJCQkgfQkJCQkgCi0JCQkgIH0gICAgCSAgIAotICAgICAgICAgICB9Ci0JCSAgIHJldHVybiBudWxsOwotICAgICAgIH0KLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50T3BlcmF0aW9uTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50T3BlcmF0aW9uTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDRkMDk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudE9wZXJhdGlvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIE1hbmFnZXMgdGhlIGV4ZWN1dGlvbiBvZiBjb21tYW5kcyBpbiB0aGUgcm9vdCBmcmFnbWVudCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8JCi0KLXB1YmxpYyBjbGFzcyBBbnRPcGVyYXRpb25NYW5hZ2VyIGV4dGVuZHMgQ29tbWFuZEZyYWdtZW50RW5naW5lCi17CQotCSAgcHJpdmF0ZSBBbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudF87Ci0JICAKLQkgIHByb3RlY3RlZCBJU3RhdHVzIGluaXRCZWZvcmVFeGVjdXRlKCBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBvcGVyYXRpb24gKQotICAgIHsgICAgICAKLSAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAid3NfYW50IiwgNTA5OCwgdGhpcywgImluaXRCZWZvcmVFeGVjdXRlIiwgIkluaXRpYWxpemluZyBkYXRhIGZvcjogIiArIG9wZXJhdGlvbi5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICBJU3RhdHVzIGluaXRTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgCSAgaW5pdFN0YXR1cyA9IGVudmlyb25tZW50Xy5pbml0T3BlcmF0aW9uRGF0YSggb3BlcmF0aW9uICk7ICAKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAJIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOyAgCi0gICAgICB9ICAgICAgICAKLSAgICAgIHJldHVybiBpbml0U3RhdHVzOwotICAgIH0KLQotICAgIC8qKgotCSAgICogQ3JlYXRlcyBhIENvbW1hbmRGcmFnbWVudEVuZ2luZS4KLQkgICAqIAotCSAgICogQHBhcmFtIHN0YXJ0RnJhZ21lbnQgdGhlIHJvb3QgZnJhZ21lbnQgd2hlcmUgdHJhdmVyc2FsIHdpbGwgYmVnaW4uCi0JICAgKiBAcGFyYW0gZGF0YU1hbmFnZXIgdGhlIGRhdGEgbWFuYWdlciBjb250YWluaW5nIGFsbCBvZiB0aGUgZGF0YSBtYXBwaW5ncy4KLQkgICAqIEBwYXJhbSBlbnZpcm9ubWVudCB0aGUgZW52aXJvbm1lbnQuCi0JICAgKi8KLQkgIHB1YmxpYyBBbnRPcGVyYXRpb25NYW5hZ2VyKCBDb21tYW5kRnJhZ21lbnQgc3RhcnRGcmFnbWVudCwgRGF0YUZsb3dNYW5hZ2VyIGRhdGFNYW5hZ2VyLCBBbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudCApCi0JICB7Ci0gICAgICBzdXBlciggc3RhcnRGcmFnbWVudCwgZGF0YU1hbmFnZXIsIGVudmlyb25tZW50ICk7Ci0gICAgICAKLQkgIAllbnZpcm9ubWVudF8gPSBlbnZpcm9ubWVudDsKLQkgIH0gCi19Ci0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRTdGF0dXNIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZWE1YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50U3RhdHVzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTIyICAgMTc2OTQzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBBbnRTdGF0dXNIYW5kbGVyIGV4dGVuZHMgQmFzZVN0YXR1c0hhbmRsZXIKLXsKLQotCXB1YmxpYyBDaG9pY2UgcmVwb3J0KElTdGF0dXMgc3RhdHVzLCBDaG9pY2VbXSBjaG9pY2VzKSB7Ci0JCS8vIFRPRE8gCi0JICBjaGVja1N0YXR1cyhzdGF0dXMpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXBvcnQoSVN0YXR1cyBzdGF0dXMpIHRocm93cyBTdGF0dXNFeGNlcHRpb24gewotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLQkJCXJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCWVsc2UKLQkJCXJlcG9ydEluZm8oc3RhdHVzKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKElTdGF0dXMgc3RhdHVzKSB7Ci0JICBjaGVja1N0YXR1cyhzdGF0dXMpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oc3RhdHVzLmdldE1lc3NhZ2UoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0SW5mbyhJU3RhdHVzIHN0YXR1cykgewkKLQkgIGNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihzdGF0dXMuZ2V0TWVzc2FnZSgpKTsJCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvUHJvcGVydHlEYXRhSG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9Qcm9wZXJ0eURhdGFIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA5YWI2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9Qcm9wZXJ0eURhdGFIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotLyoqCi0gKiBTaW1wbGUgY2xhc3MgdG8gaG9sZCBkYXRhIG1hcHBpbmcgaW5mb3JtYXRpb24gb25jZSByZXRyaWV2ZWQgZnJvbSBBbnQgcHJvcGVydHkgZmlsZS4KLSAqIE1hcCBpcyB1c2VkIGZvciBtYW55IHRvIG9uZSBtYXBwaW5ncyBpbnZvbHZpbmcgbWFwcGluZyBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIHRvIGEgYmVhbi4KLSAqIEluIHRoaXMgY2FzZSwgdGhlIGtleV8gYW5kIHZhbHVlXyBzaG91bGQgYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBhbmQgYWxsIGtleSB2YWx1ZSBwYWlycwotICogZm9yIHByb3BlcnRpZXMgcHV0IGludG8gdGhlIG1hcCBpbnN0ZWFkLiAgVGhlIHRyYW5zZm9ybWF0aW9uIGZvciB0aGlzIGNhc2Ugd291bGQgYmUgYSBtb2RpZmllcgotICogd2hpY2ggd2lsbCBzZXQgdGhlIHByb3BlcnRpZXMgb250byB0aGUgYmVhbi4KLSAqLwotIAotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgUHJvcGVydHlEYXRhSG9sZGVyIHsKLQkgICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uXzsKLQkgICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybV87Ci0JICAgcHVibGljIFN0cmluZyBrZXlfOwotCSAgIHB1YmxpYyBTdHJpbmcgcHJvcGVydHlfOwotCSAgIHB1YmxpYyBTdHJpbmcgdmFsdWVfOwkJCi0JICAgcHVibGljIE1hcCBtYXBfOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9TdHJpbmcyQm9vbGVhblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9TdHJpbmcyQm9vbGVhblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4M2U1NGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvU3RyaW5nMkJvb2xlYW5UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFN0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0KLQlwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIHsKLQkJCVN0cmluZyBzdHIgPSAoU3RyaW5nKXZhbHVlOwotCQkJc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7Ci0JCQlpZiAoc3RyLmVxdWFscygidHJ1ZSIpKQotCQkJewotCQkJCXJldHVybiBuZXcgQm9vbGVhbih0cnVlKTsKLQkJCX0KLQkJCWVsc2UgcmV0dXJuIG5ldyBCb29sZWFuKGZhbHNlKTsJCQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0NvbW1hbmRMaW5lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0NvbW1hbmRMaW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMDliZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9Db21tYW5kTGluZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbWFuZGxpbmU7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5TdHJpbmdVdGlsczsKLQotCi0vKioKLSAgKiA8cD5UaGlzIGlzIGEgZ2VuZXJpYyBjb21tYW5kIGxpbmUgcGFyc2luZyBjbGFzcy4gIFRoZSBwcm9ncmFtbWVyIG5lZWQgb25seSBzcGVjaWZ5Ci0gICogdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGVpciBjb21tYW5kIGxpbmUoaWUuIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZmxhZ3MsIGV0YykKLSAgKiBhbmQgdGhpcyBjbGFzcyB3aWxsIHBlcmZvcm0gdGhlIHJlc3Qgb2YgdGhlIHBhcnNpbmcgd29yay4gIEFzIGFuIGFkZGVkIGJvbnVzIHRoaXMKLSAgKiBjbGFzcyB3aWxsIGFsc28gY3JlYXRlIGZvcm1hdGVkIGhlbHAgdGV4dCB0aGF0IGRpc3BsYXlzIHRoZSBzeW50YXggb2YgdGhpcwotICAqIGNvbW1hbmQgbGluZS4KLSAgKgotICAqIDxwPlRoZSBtYWluIHBhcmFtZXRlciB0byB0aGUgQ29tbWFuZExpbmUgY29uc3RydWN0b3IgaXMgYSB0d28gZGltZW5zaW9uYWwgU3RyaW5nCi0gICogYXJyYXkuICBUaGVyZSBhcmUgNSBjb2x1bW5zIGluIHRoaXMgYXJyYXkgYW5kIGFzIG1hbnkgcm93cyBhcyBuZWVkZWQgZm9yIGVhY2gKLSAgKiBmbGFnIG9yIHBvc2l0aW9uYWwgcGFyYW1ldGVyLiAgVGhlIGZpdmUgY29sdW1ucyBhcmU6Ci0gICoKLSAgKiA8b2w+Ci0gICogPGxpPlRoZSBuYW1lIG9mIHRoZSBmbGFnKGVnLiAiaGVscCIgb3IgImEiLCBldGMpCi0gICogICAgIE5vdGU6IG5vIGRhc2ggc2hvdWxkIGJlIGluIHRoZSBuYW1lIGhlcmUuICBUaGUgdXNlciB3b3VsZCBzcGVjaWZ5ICItaGVscCIgb24gdGhlCi0gICogICAgICAgICAgIGNvbW1hbmQgbGluZSB0aG91Z2guCi0gICogPGxpPlRoZSBuYW1lIG9mIHRoZSBmbGFnIHBhcmFtZXRlcihpZiBhbnkpCi0gICogPGxpPkEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGZsYWcgY2FuIGFwcGVhciBtb3JlIHRoYW4gb25jZSBvbiB0aGUKLSAgKiAgICAgY29tbWFuZCBsaW5lLgotICAqIDxsaT5BIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBmbGFnIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICogPGxpPkEgaGVscCB0ZXh0IHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhpcyBwYXJ0aWN1bGFyIGZsYWcgb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXIuCi0gICogPC9vbD4KLSAgKgotICAqIDxwPkVhY2ggcm93IGluIHRoZSBzdHJpbmcgYXJyYXkgaXMgYXNzb2NpYXRlIHdpdGggZWl0aGVyIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIKLSAgKiBvciB3aXRoIGEgZmxhZy4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzIGNvbW1hbmQgbGluZToKLSAgKiA8dWw+Ci0gICogPGxpPk15X3Byb2cgcmVxdWlyZWRfcGFybTEgLWFiIHBhcm1fZm9yX2FiIHJlcXVpcmVkX3Bhcm0yIC1oZWxwIG9wdGlvbmFsX3Bhcm1zCi0gICogPC91bD4KLSAgKgotICAqIDxwPkluIHRoaXMgZXhhbXBsZSBNeV9wcm9nIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtLiAgcmVxdWlyZWRfcGFybTEgYW5kCi0gICogcmVxdWlyZWRfcGFybTIgbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIE5vdGljZSB0aGF0IHRoZXkgZG8gbm90Ci0gICogaGF2ZSB0byBiZSBhZGphY2VudCB0byBlYWNoIG90aGVyIG9uIHRoZSBjb21tYW5kIGxpbmUuIG9wdGlvbmFsX3Bhcm1zIG1heSBvcHRpb25hbGx5Ci0gICogc3BlY2lmaWVkLiAgb3B0aW9uYWxfcGFybXMgY2FuIGJlIDAgb3IgbW9yZSBwYXJhbWV0ZXJzLiAgVGhleSBkb2VzIG5vdCBuZWVkIHRvIGJlCi0gICogYWRqYWNlbnQgdG8gdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMsIGJ1dCB0aGV5IGRvIG5lZWQgdG8gZm9sbG93IHRoZSByZXF1aXJlZAotICAqIHBhcmFtZXRlcnMuIFR3byBmbGFncyBhcmUgc3BlY2lmaWVkICItYWIiIGFuZCAiLWhlbHAiLiAgVGhlICItYWIiIGZsYWcgaGFzIGEKLSAgKiBwYXJhbWV0ZXIgInBhcm1fZm9yX2FiIiBhc3NvY2lhdGVkIHdpdGggaXQuICBOb3RlOiBhIGZsYWcgY2FuIG5vdCBoYXZlIGFuIG9wdGlvbmFsCi0gICogcGFyYW1ldGVyLiAoaWUuIGEgZmxhZyBlaXRoZXIgbmV2ZXIgaGF2ZSBhIHBhcmFtZXRlciBvciBpdCBhbHdheXMgaGFzIGEgcGFyYW1ldGVyKQotICAqIEluIHRoaXMgZXhhbXBsZSwgdGhlIGZpcnN0IHR3byByb3dzIGluIHRoZSBzdHJpbmcgYXJyYXkgd291bGQgZGVzY3JpYmUgcmVxdWlyZWRfcGFybTEKLSAgKiBhbmQgcmVxdWlyZWRfcGFybTIuICBUaGUgdGhpcmQgZW50cnkgd291bGQgZGVzY3JpYmUgb3B0aW9uYWxfcGFybXMuICBUaGUgZm91cnRoIGFuZAotICAqIGZpZnRoIHJvd3Mgd291bGQgZGVzY3JpYmUgIi1hYiIgYW5kICItaGVscCIuICBGb3IgdGhpcyBjb21tYW5kIGxpbmUgdGhlIHN0cmluZyBhcnJheQotICAqIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgotICAqCi0gICogPHVsPgotICAqIDxsaT57IHsgQ29tbWFuZExpbmUuUE9TSVRJT05BTCwgInBhcm0xIiwgQ29tbWFuZExpbmUuTk9fRFVQUywKLSAgKiAgICAgICBDb21tYW5kTGluZS5SRVFVSVJFRCwgInBhcm0xIGhlbHAgdGV4dCIgfSwKLSAgKiA8bGk+eyBDb21tYW5kTGluZS5QT1NJVElPTkFMLCAicGFybTIiLCBDb21tYW5kTGluZS5OT19EVVBTLAotICAqICAgICAgIENvbW1hbmRMaW5lLlJFUVVJUkVELCAicGFybTIgaGVscCB0ZXh0IiB9LAotICAqIDxsaT57IENvbW1hbmRMaW5lLlBPU0lUSU9OQUwsICJvcHRpb25hbF9wYXJtcyIsIENvbW1hbmRMaW5lLkRVUFNfT0ssCi0gICogICAgICAgQ29tbWFuZExpbmUuUkVRVUlSRUQsICJvcHRpb25hbCBoZWxwIHRleHQiIH0sCi0gICogPGxpPnsgImFiIiwgInBhcm1fZm9yX2FiIiwgQ29tbWFuZExpbmUuTk9fRFVQUywKLSAgKiAgICAgICBDb21tYW5kTGluZS5PUFRJT05BTCwgImFiIGhlbHAgdGV4dCIgfSwKLSAgKiA8bGk+eyAiaGVscCIsIENvbW1hbmRMaW5lLk5PX1BBUk0sIENvbW1hbmRMaW5lLk5PX0RVUFMsCi0gICogICAgICAgQ29tbWFuZExpbmUuT1BUSU9OQUwsICJkaXNwbGF5cyB0aGlzIGhlbHAgdGV4dCIgfSB9Ci0gICogPC91bD4KLSAgKgotICAqIDxwPlN0cmluZyBhcnJheSBydWxlczoKLSAgKgotICAqIDxvbD4KLSAgKiA8bGk+UG9zaXRpb25hbCByb3dzIG11c3QgYWx3YXlzIGNvbWUgZmlyc3QgaW4gdGhlIGFycmF5LiAgVGhlc2Ugcm93cyBtdXN0Ci0gICogICAgIGhhdmUgYSBuYW1lIHNwZWNpZmllZCBpbiBjb2x1bW4gMiwgZXhjZXB0IGZvciBvbmUgY2FzZS4gIElmIHlvdSB3YW50IHRvIGluZGljYXRlIHRoYXQKLSAgKiAgICAgdGhlcmUgYXJlIG5vIG9wdGlvbmFsIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB5b3Ugd291bGQgcHV0IENvbW1hbmRMaW5lLk5PX1BBUk0KLSAgKiAgICAgaW4gY29sdW1uIDIgb2YgdGhlIHBvc2l0aW9uYWwgcm93LiAgWW91IHdvdWxkIGFsc28gbmVlZCB0byBwdXQgQ29tbWFuZExpbmUuT1BUSU9OQUwKLSAgKiAgICAgaW4gY29sdW1uIDQgc2luY2UgdGhpcyByb3cgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRlcnMob3IgdGhlIG5vbi1leGlzdGVuY2Ugb2YKLSAgKiAgICAgb3B0aW9uYWwgcGFyYW1ldGVycyBhcyB0aGUgY2FzZSBtYXkgYmUpCi0gICogPGxpPk9uY2UgYSBwb3NpdGlvbmFsIHJvdyBzcGVjaWZpZXMgdGhhdCBpdCBpcyBvcHRpb25hbCwgbm8gZnVydGhlciBwb3NpdGlvbmFsIHJvd3MKLSAgKiAgICAgbWF5IGJlIHNwZWNpZmllZC4KLSAgKiA8bGk+QXQgbGVhc3Qgb25lIHBvc2l0aW9uYWwgcm93IG11c3QgYmUgc3BlY2lmaWVkLCBldmVuIGlmIGl0IGlzIHRvIGp1c3QgdG8gc3BlY2lmeSB0aGF0Ci0gICogICAgIHRoZXJlIGFyZSBubyBvcHRpb25hbCBwYXJhbWV0ZXJzLgotICAqIDxsaT5GbGFnIG5hbWVzIG11c3QgYmUgaW4gbG93ZXIgY2FzZS4gIE5vdGU6IHRoZSB1c2VyIGNhbiBzcGVjaWZ5IHVwcGVyIG9yIGxvd2VyIGNhc2UKLSAgKiAgICAgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgKiA8bGk+SWYgYSBmbGFnIGhhcyBhIHBhcmFtZXRlciB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIHNob3VsZCBiZSBwdXQgaW50byBjb2x1bW4gMi4KLSAgKiAgICAgb3RoZXJ3aXNlIENvbW1hbmRMaW5lLk5PX1BBUk0gc2hvdWxkIGJlIHB1dCBpbiBjb2x1bW4gMi4KLSAgKiA8bGk+SWYgYSBmbGFnIGlzIGFsbG93ZWQgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhlbgotICAqICAgICBDb21tYW5kTGluZS5EVVBTX09LIHNob3VsZCBiZSBwdXQgaW50byBjb2x1bW4gMywgb3RoZXJ3aXNlIENvbW1hbmRMaW5lLk5PX0RVUFMKLSAgKiAgICAgc2hvdWxkIGJlIHB1dCBpbnRvIGNvbHVtbiAzLgotICAqIDxsaT5JZiBhIGZsYWcgbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0aGVuIENvbW1hbmRMaW5lLlJFUVVJUkVEIHNob3VsZAotICAqICAgICBiZSBzcGVjaWZpZWQgaW4gY29sdW1uIDQsIG90aGVyd2lzZSBDb21tYW5kTGluZS5PUFRJT05BTCBzaG91bGQgYmUgc3BlY2lmaWVkLgotICAqIDxsaT5BIGhlbHAgZmxhZyBtdXN0IGJlIHNwZWNpZmllZC4KLSAgKiA8bGk+VGhlIHN0cmluZ3Mgc3BlY2lmaWVkIGluIHRoZSBmbGFncyBjb2x1bW4sIHRoZSBwYXJhbWV0ZXIgbmFtZSBjb2x1bW4sIGFuZCB0aGUKLSAgKiAgICAgaGVscCBjb2x1bW4gYXJlIGFsd2F5cyB0cmFuc2xhdGVkIHVzaW5nIHRoZSByZXNvdXJjZSBidW5kbGUgc3BlY2lmaWVkLiAgT2YKLSAgKiAgICAgY291cnNlIHRoZSBzcGVjaWFsIHN0cmluZyB2YWx1ZXMgc3VjaCBhcyBQT1NJVElPTkFMIGFuZCBOT19QQVJNIGFyZSBub3QKLSAgKiAgICAgdHJhbnNsYXRlZC4KLSAgKiA8L29sPgotICAqCi0gICogPHA+IEZsYWcgbWF0Y2hpbmcgcnVsZXM6Ci0gICogPG9sPgotICAqIDxsaT5UaGUgcGFyc2VyIHdpbGwgYXR0ZW1wdCB0byBtYXRjaCBhIHVzZXIgc3BlY2lmaWVkIGZsYWcgd2l0aCB0aGUgbWluaW11bSBudW1iZXIKLSAgKiAgICAgb2YgcHJvZ3JhbW1lciBzcGVjaWZpZWQgZmxhZyBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBwcm9ncmFtbWVyIGhhcwotICAqICAgICBzcGVjaWZpZWQgdGhhdCB0aGUgZmxhZyBpcyAiaGVscCIgdGhlIHVzZXIgY291bGQgc3BlY2lmeSAiLWgiLCAiLWhlIiwgIi1oZWwiLCBvcgotICAqICAgICAiLWhlbHAiLiAgSWYgdGhlIHByb2dyYW1tZXIgaGFzIGFsc28gc3BlY2lmaWVkIGEgZmxhZyBjYWxsZWQgImhlbGxvIiwgdGhlCi0gICogICAgIHVzZXIgd291bGQgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgZm9yIHNwZWNpZmluZyBlaXRoZXIgIi1oIiwgIi1oZSIgb3IgIi1oZWwiLCBzaW5jZQotICAqICAgICBpdCBpcyBhbWJpZ3VvdXMgd2hpY2ggZmxhZyBpcyBiZWluZyByZWZlcmVkIHRvLiAgQm90aCAiLWhlbGwiIGFuZCAiLWhlbGxvIgotICAqICAgICB3b3VsZCBiZSBvayBmb3IgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgaGVsbG8gZmxhZyBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAqIDxsaT5JZiBhIGZsYWcgaGFzIGEgcGFyYW1ldGVyLCB0aGUgcGFyYW1ldGVyIG1heSBiZSBpbW1lZGlhdGVseSBhZGphY2VudCB0byB0aGUgZmxhZy4KLSAgKiAgICAgRm9yIGV4YW1wbGUgaWYgImFiY2QiIGlzIHNwZWNpZmllZCBhcyBhIGZsYWcgd2l0aCBhIHBhcmFtZXRlciwgdGhlIHVzZXIgY291bGQKLSAgKiAgICAgc3BlY2lmeSB0aGUgZm9sbG93aW5nIGFzc3VtaW5nIHRoZXJlIGFyZSBubyBvdGhlciBhbWJpZ3VvdXMgZmxhZ3MuICItYWJjZHBhcm0iLAotICAqICAgICAiLWFiY3Bhcm0iLCAiLWFicGFybSIsIG9yICItYXBhcm0iIHdoZXJlIHBhcm0gaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlIGZsYWcuCi0gICogICAgIChPZiBjb3Vyc2UgdGhlIHVzZXIgY2FuIGFsd2F5cyBwdXQgYSB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHRoZSBmbGFnIGFuZCB0aGUKLSAgKiAgICAgcGFyYW1ldGVyLikKLSAgKiA8bGk+SWYgYSBmbGFnIGRvZXMgbm90IGhhdmUgYSBwYXJhbWV0ZXIgYW5kIGEgcGFyYW1ldGVyIGlzIGFkamFjZW50IHRvIGl0IHRoZW4gdGhpcwotICAqICAgICBwYXJhbWV0ZXIgaXMgaW50ZXJwcmV0ZWQgYXMgYSBwb3NpdGlvbmFsIHBhcmFtZXRlci4gIEZvciBleGFtcGxlIGlmICJhYmNiIiBpcwotICAqICAgICBzcGVjaWZpZWQgYXMgYSBmbGFnIGFuZCB0aGUgdXNlciBzcGVjaWZpZXMgIi1hYmhlbGxvIiwgdGhlbiB0aGUgZmlyc3QgImFiIiB3aWxsIGJlCi0gICogICAgIGludGVycHJldGVkIGFzIHRoZSBmbGFnIGFuZCAiaGVsbG8iIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBwb3NpdGlvbmFsCi0gICogICAgIHBhcmFtZXRlci4KLSAgKiA8L29sPgotICAqCi0gICogQGF1dGhvciBQZXRlciBNb29nawotICAqIEBkYXRlICAgSnVseSAxMywgMjAwMAotKiovCi0KLXB1YmxpYyBjbGFzcyBDb21tYW5kTGluZQotewotICAvLyBDb25zdGFudCBzdHJpbmdzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIHVzZSBpbiB0aGVpciBmbGFnc19pbmZvIGlucHV0IGFycmF5LgotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IHRoaXMgZmxhZyBvciBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyByZXF1aXJlZC4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVJUkVEICAgPSAicmVxdWlyZWQiOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IHRoaXMgZmxhZyBvciBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyBvcHRpb25hbC4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QVElPTkFMICAgPSAib3B0aW9uYWwiOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IHRoaXMgZmxhZyBtYXkgYmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgKiBOb3RlOiBUaGlzIHN0cmluZyBoYXMgbm8gbWVhbmluZyBmb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVQU19PSyAgICA9ICJkdXBzX29rIjsKLSAgLyoqCi0gICAgKiBTcGVjaWZpZXMgdGhhdCB0aGlzIGZsYWcgbWF5IG5vdCBiZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgICAqIE5vdGU6IFRoaXMgc3RyaW5nIGhhcyBubyBtZWFuaW5nIGZvciBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT19EVVBTICAgID0gIm5vX2R1cHMiOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IGEgcm93IGlzIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgcm93LgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9TSVRJT05BTCA9ICIiOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IGEgZmxhZyBoYXMgbm8gcGFyYW1ldGVyLiAgRm9yIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0aGlzCi0gICAgKiBzdHJpbmcgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIG5vIG9wdGlvbmFsIHBhcmFtZXRlcnMuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT19QQVJNICAgID0gIiI7Ci0gIAotICAvKioKLSAgICAqIEBwYXJhbSBmbGFnc19pbmZvIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZQotICAgICogICAgICAgICAgICAgICAgICAgY29tbWFuZCBsaW5lIHBhcnNlci4gIFNlZSB0aGUgY2xhc3MgZGVzY3JpcHRpb24gZm9yIGEKLSAgICAqICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gb2Ygd2hhdCB0aGlzIHN0cmluZyBhcnJheSBzaG91bGQgbG9vayBsaWtlLgotICAgICogQHBhcmFtIGhlbHBfZmxhZyAgVGhpcyBzdHJpbmcgaW5kaWNhdGVzIHdoaWNoIGZsYWcgaW4gdGhlIGZsYWdzX2luZm8KLSAgICAqICAgICAgICAgICAgICAgICAgIGFycmF5IGlzIHRoZSBoZWxwIGZsYWcuCi0gICAgKiBAcGFyYW0gdG9vbF9uYW1lICBUaGlzIHN0cmluZyBpbmRpY2F0ZXMgdGhlIG5hbWUgb2YgdGhlIHRvb2wgdGhhdCB0aGlzCi0gICAgKiAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpbmUgcGFyc2VyIGlzIGJlaW5nIHVzZWQgZm9yLiAgVGhpcyBzdHJpbmcKLSAgICAqICAgICAgICAgICAgICAgICAgIGlzIG9ubHkgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBoZWxwIHRleHQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZExpbmUoIFN0cmluZ1tdW10gICAgIGZsYWdzX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgIGhlbHBfZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgdG9vbF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUJ1bmRsZSBmbGFnTWVzc2FnZXMgKQotICAgICAgICAgICAgICAgICAgIAotICAgIHRocm93cyBJbnRlcm5hbEVycm9yRXhjCi0gIHsKLSAgICB0aGlzLmZsYWdzX2luZm8gICA9IGZsYWdzX2luZm87Ci0gICAgdGhpcy5oZWxwX2ZsYWcgICAgPSBoZWxwX2ZsYWc7Ci0gICAgdGhpcy50b29sX25hbWUgICAgPSB0b29sX25hbWU7Ci0gICAgdGhpcy5mbGFnTWVzc2FnZXMgPSBmbGFnTWVzc2FnZXM7Ci0gICAgCi0gICAgbWVzc2FnZXMgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbWFuZGxpbmUuY29tbWFuZGxpbmUiICk7Ci0gICAgdmVyaWZ5X2ZsYWdzX2luZm8oKTsKLSAgfQotCi0gIC8qKgotICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBwYXJzZSBhIGNvbW1hbmQgbGluZS4KLSAgICAqIEBwYXJhbSBhcmdzIFRoaXMgaXMgdGhlIHN0cmluZyBhcnJheSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgKiBAdGhyb3dzIEZsYWdfZXJyb3IgSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY29tbWFuZCBsaW5lIGluY29ycmVjdGx5Ci0gICAgKiAgICAgICAgICAgICAgICAgICAgYSBGbGFnX2Vycm9yIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4gIFVzZSBnZXRNZXNzYWdlCi0gICAgKiAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IGEgZGVzY3JpcHRpb24gb2YgdGhlIHVzZXIgZXJyb3IuCi0gICAgKgotICAgICogQHRocm93cyBIZWxwX3NwZWNpZmllZCBJZiB0aGUgdXNlciBzcGVjaWZpZXMgdGhlIGhlbHAgZmxhZyB0aGlzIGV4Y2VwdGlvbgotICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRocm93bi4gIFVzZSBnZXRNZXNzYWdlIHRvIGdldCBhIGZ1bGx5Ci0gICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZCBzeW50YXggZGVzY3JpcHRpb24gb2YgdGhpcyBjb21tYW5kIGxpbmUuCi0gICoqLwotICBwdWJsaWMgdm9pZCBjaGVja19mbGFncyggU3RyaW5nW10gYXJncyApIHRocm93cyBGbGFnX2Vycm9yCi0gIHsKLSAgICBmbGFnc19zcGVjaWZpZWQgPSBuZXcgVmVjdG9yW2ZsYWdzX2luZm8ubGVuZ3RoXTsKLQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgYm9vbGVhbiBwcm9jZXNzZWRfdGhlX25leHRfYXJnID0gcHJvY2Vzc19hcmcoIGFyZ3MsIGluZGV4ICk7Ci0gICAgICBpZiggcHJvY2Vzc2VkX3RoZV9uZXh0X2FyZyA9PSB0cnVlICkgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICAvLyBJZiBoZWxwIHdhcyBzcGVjaWZpZWQgd2Ugd2lsbCBub3QgY2hlY2sgdGhlIHJlZ3VsYXIgcnVsZXMuCi0gICAgaWYoICFmbGFnX3NwZWNpZmllZCggaGVscF9mbGFnICkgKQotICAgIHsKLSAgICAgIC8vIENoZWNrIGZvciBmbGFncyBicmVha2luZyB0aGUgcnVsZXMgc3BlY2lmaWVkIGluIGZsYWdzX2luZm8uCi0gICAgICBjaGVja19ydWxlcygpOwotCi0gICAgICAvLyBDYWxsIHN1YmNsYXNzZWQgbWV0aG9kIHRvIHNlZSBpZiBtb3JlIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQuCi0gICAgICBtb3JlX3Byb2Nlc3NpbmcoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIG9mIHRoaXMgY2xhc3MuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXQKLSAgICAqIHRoZSB2ZXJ5IGVuZCBvZiBjaGVja19mbGFncyBtZXRob2QuICBJdCBpcyBpbnRlbmRlZCB0aGF0IHN1YmNsYXNzZXMgd291bGQKLSAgICAqIHBlcmZvcm0gYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgY2hlY2tpbmcgaGVyZS4KLSAgKiovCi0gIHByb3RlY3RlZCB2b2lkIG1vcmVfcHJvY2Vzc2luZygpIHRocm93cyBGbGFnX2Vycm9yLCBJbnRlcm5hbEVycm9yRXhjCi0gIHsKLSAgfQotCi0gIC8qKgotICAgICogT25jZSB0aGUgY29tbWFuZCBsaW5lIGhhcyBiZWVuIHBhcnNlZCBieSBjYWxsaW5nIGNoZWNrX2ZsYWdzIGEKLSAgICAqIGNhbGwgY2FuIGJlIG1hZGUgdG8gdGhpcyBtZXRob2QgdG8gZ2V0IHRoZSBwYXJhbWV0ZXJzIGZvciB0aGlzIGZsYWcuCi0gICAgKiBJZiB0aGUgZmxhZyB3YXMgbm90IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG51bGwgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAqIElmIHRoZSBmbGFnIHdhcyBzcGVjaWZpZWQsIGJ1dCBoYXMgbm8gcGFyYW1ldGVycyBhIHZhbGlkIHZlY3RvciB3aWxsIGJlCi0gICAgKiByZXR1cm5lZCBjb250YWluaW5nIGEgbnVsbC4KLSAgKiovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRfZmxhZ19wYXJtcyggU3RyaW5nIGZsYWcgKQotICB7Ci0gICAgaW50ICAgICByb3cgICAgICAgID0gMDsKLSAgICBib29sZWFuIGZsYWdfZm91bmQgPSBmYWxzZTsKLQotICAgIHdoaWxlKCBmbGFnX2ZvdW5kID09IGZhbHNlICYmIHJvdyA8IGZsYWdzX2luZm8ubGVuZ3RoICkKLSAgICB7Ci0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXS5lcXVhbHMoIGZsYWcgKSApCi0gICAgICB7Ci0gICAgICAgIGZsYWdfZm91bmQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByb3crKzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiggZmxhZ19mb3VuZCA9PSB0cnVlICkgCi0gICAgewotICAgICAgVmVjdG9yIHBhcm1zID0gZmxhZ3Nfc3BlY2lmaWVkW3Jvd107Ci0gICAgICByZXR1cm4gcGFybXMgPT0gbnVsbCA/IG51bGwgOiAoU3RyaW5nW10pKHBhcm1zLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gZ2V0IGFsbCBvZiB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgotICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBib3RoIHRoZSByZXF1aXJlZCBwb3NpdGlvbmFscyBhbmQgdGhlCi0gICAgKiBvcHRpb25hbCBwb3NpdGlvbmFscyBpbiB0aGF0IG9yZGVyLiAgSWYgbm8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzCi0gICAgKiB3ZXJlIHNwZWNpZmllZCBudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0gICoqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0X3Bvc2l0aW9uYWxzKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nW10pZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXS50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGlzIGZsYWcgd2FzIHNwZWNpZmllZCBieSB0aGUgdXNlcgotICAgICogb3RoZXJ3aXNlIGZhbHNlIGlzIHJldHVybmVkLgotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gZmxhZ19zcGVjaWZpZWQoIFN0cmluZyBmbGFnICkKLSAgewotICAgIHJldHVybiBnZXRfZmxhZ19wYXJtcyggZmxhZyApICE9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgZnVsbHkgZm9ybWF0ZWQgaGVscCB0ZXh0IHN5bnRheCBmb3IgdGhpcwotICAgICogY29tbWFuZCBsaW5lLgotICAqKi8KLSAgcHVibGljIFN0cmluZyBnZXRfaGVscF90ZXh0KCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBoZWxwX3RleHQgID0gbmV3IFN0cmluZ0J1ZmZlcig0MDApOwotICAgIGludCAgICAgICAgICBoZWxwX3dpZHRoID0gSEVMUF9MSU5FX0xFTiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gICAgICAgICAgICAgIC8vIGJsYW5rcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICAgICAgICAgICAgICAvLyBkYXNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZmxhZ19zaXplIC0gIC8vIGZsYWcgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgICAgICAgICAgICAgLy8gYmxhbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9uYW1lX3NpemUgLSAgLy8gbmFtZSBmaWVsZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTsgICAgICAgICAgICAgICAvLyBibGFuawotCi0gICAgaGVscF90ZXh0LmFwcGVuZCggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0lORk9fU1lOVEFYICkgKwotICAgICAgICAgICAgICAgICAgICAgICI6ICIgKyB0b29sX25hbWUgKyAiICIgKTsKLQotICAgIC8vIERpc3BsYXkgdGhlIHJlcXVpcmVkIHBvc2l0aW9uYWxzIGlmIGFueS4KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcmVxdWlyZWRfcG9zaXRpb25hbHM7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9baW5kZXhdW05BTUVfQ09MXSApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgIiApOwotICAgIH0KLQotICAgIGhlbHBfdGV4dC5hcHBlbmQoICJbIiArIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9GTEFHUyApICsKLSAgICAgICAgICAgICAgICAgICAgICAiXSAiICk7Ci0KLSAgICBpZiggb3B0aW9uYWxfcG9zaXRpb25hbHNfYWxsb3dlZCA9PSB0cnVlICkKLSAgICB7Ci0gICAgICBoZWxwX3RleHQuYXBwZW5kKCBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW29wdGlvbmFsX2xpc3RfaW5kZXhdW05BTUVfQ09MXSApICk7Ci0gICAgfQotCi0gICAgaGVscF90ZXh0LmFwcGVuZCggIlxuICAiICsgbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0lORk9fV0hFUkUgKSArICJcbiIgKTsKLQotICAgIC8vIENyZWF0ZSBvbmUgbGluZSBvZiBkZXNjcmlwdGlvbiBmb3IgZWFjaCBwYXJhbWV0ZXIKLSAgICBmb3IoIGludCByb3cgPSAwOyByb3cgPCBmbGFnc19pbmZvLmxlbmd0aDsgcm93KysgKQotICAgIHsKLSAgICAgIFN0cmluZyBjb2x1bW5JZCAgID0gZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXTsKLSAgICAgIFN0cmluZyBjb2x1bW5OYW1lID0gY29sdW1uSWQgPT0gTk9fUEFSTSA/ICIiIDogZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggY29sdW1uSWQgKTsKLQotICAgICAgU3RyaW5nIGZsYWdJZCAgICAgPSBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdOwotICAgICAgU3RyaW5nIGZsYWdOYW1lICAgPSBmbGFnSWQgPT0gUE9TSVRJT05BTCA/IFBPU0lUSU9OQUwgOiBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKGZsYWdJZCk7Ci0KLSAgICAgIGludCBmbGFnX3BhZGRpbmcgPSBtYXhfZmxhZ19zaXplIC0gZmxhZ05hbWUubGVuZ3RoKCk7Ci0gICAgICBpbnQgbmFtZV9wYWRkaW5nID0gbWF4X25hbWVfc2l6ZSAtIGNvbHVtbk5hbWUubGVuZ3RoKCk7Ci0KLSAgICAgIC8vIFNraXAgdGhpcyByb3cgaWYgdGhpcyBpcyBhIG1hcmtlciBmb3Igbm8gb3B0aW9uYWwgcG9zaXRpb25hbHMuCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBQT1NJVElPTkFMICYmCi0gICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXSA9PSBOT19QQVJNICkgY29udGludWU7Ci0KLSAgICAgIGlmKCBmbGFnTmFtZSA9PSBQT1NJVElPTkFMICkKLSAgICAgIHsKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggZ2V0QmxhbmtzKDMgKSApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoZWxwX3RleHQuYXBwZW5kKCAiICAtIiArIGZsYWdOYW1lICk7Ci0gICAgICB9Ci0KLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGdldEJsYW5rcyggZmxhZ19wYWRkaW5nICsgMSApICk7Ci0gICAgICBoZWxwX3RleHQuYXBwZW5kKCBjb2x1bW5OYW1lICk7Ci0gICAgICBoZWxwX3RleHQuYXBwZW5kKCBnZXRCbGFua3MoIG5hbWVfcGFkZGluZyArIDEgKSApOwotCi0gICAgICBTdHJpbmcgICBjb2x1bW5IZWxwID0gZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0hFTFBfQ09MXSApOwotICAgICAgU3RyaW5nW10gc3BsaXRfaGVscF90ZXh0Ci0gICAgICAgID0gU3RyaW5nVXRpbHMuc3BsaXR0ZXIoIGNvbHVtbkhlbHAsIGhlbHBfd2lkdGggKTsKLQotICAgICAgaWYoIHNwbGl0X2hlbHBfdGV4dC5sZW5ndGggPiAwICkKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggc3BsaXRfaGVscF90ZXh0WzBdICsgIlxuIiApOwotICAgICAgZWxzZQotICAgICAgICBoZWxwX3RleHQuYXBwZW5kKCAiXG4iICk7Ci0KLSAgICAgIGZvciggaW50IGluZGV4ID0gMTsgaW5kZXggPCBzcGxpdF9oZWxwX3RleHQubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggZ2V0QmxhbmtzKCBIRUxQX0xJTkVfTEVOIC0gaGVscF93aWR0aCApICk7Ci0gICAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIHNwbGl0X2hlbHBfdGV4dFtpbmRleF0gKyAiXG4iICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoICJcbiIgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gIiIgKyBoZWxwX3RleHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAgUmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYmxhbmtzLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmxhbmtzKCBpbnQgY291bnQgKQotICB7Ci0gIAljaGFyW10gYmxhbmtzID0gbmV3IGNoYXJbY291bnRdOwotICAJQXJyYXlzLmZpbGwoIGJsYW5rcywgMCwgY291bnQsICcgJyApOwotICAJCi0gIAlyZXR1cm4gbmV3IFN0cmluZyggYmxhbmtzICk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgZm9yIGFsbCBjb21tYW5kIGxpbmUgZXhjZXB0aW9uIGNsYXNzZXMuCi0gICoqLwotICBzdGF0aWMgcHVibGljIGNsYXNzIEVycm9yRXhjIGV4dGVuZHMgRXhjZXB0aW9uCi0gIHsKLSAgCS8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NzU2NzMxNzI1OTc5MzcyMEw7Ci0KLQlwdWJsaWMgRXJyb3JFeGMoIFN0cmluZyBtZXNzYWdlLCBTdHJpbmdbXSBhcmdzICkKLSAgCXsKLSAgCSAgc3VwZXIoIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCBtZXNzYWdlLCBhcmdzICkgKTsKLSAgCX0KLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBjbGFzcyB3aWxsIGJlIHRocm93biB3aGVuIGFuIGludGVybmFsIGVycm9yIGlzIGRldGVjdGVkLgotICAgICogVGhpcyB1c3VhbGx5IGhhcHBlbnMgaWYgdGhlIGZsYWcgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gd2FzCi0gICAgKiBzcGVjaWZpZWQgaW5jb3JyZWN0bHkuCi0gICoqLwotICBzdGF0aWMgcHVibGljIGNsYXNzIEludGVybmFsRXJyb3JFeGMgZXh0ZW5kcyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgeyAgCQotICAJLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU4NDEwNjIxMTM2NjE0NDUwTDsKLQotCXB1YmxpYyBJbnRlcm5hbEVycm9yRXhjKCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nW10gYXJncyApCi0gIAl7Ci0gIAkgIHN1cGVyKCBNZXNzYWdlRm9ybWF0LmZvcm1hdCggbWVzc2FnZSwgYXJncyApICk7Ci0gIAl9Ci0gIAkKLSAgCXB1YmxpYyBJbnRlcm5hbEVycm9yRXhjKCBTdHJpbmcgbWVzc2FnZSApCi0gIAl7Ci0gIAkgIHRoaXMoIG1lc3NhZ2UsIChTdHJpbmdbXSludWxsICk7Ci0gIAl9Ci0gIAkKLSAgCXB1YmxpYyBJbnRlcm5hbEVycm9yRXhjKCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIGFyZyApCi0gIAl7Ci0gIAkgIHRoaXMoIG1lc3NhZ2UsIG5ldyBTdHJpbmdbXXsgYXJnIH0gKTsKLSAgCX0KLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBjbGFzcyB3aWxsIGJlIHRocm93biBpZiBhIHVzZXIgZXJyb3Igb2NjdXJzIHdoaWxlIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZS4KLSAgKiovCi0gIHN0YXRpYyBwdWJsaWMgY2xhc3MgRmxhZ19lcnJvciBleHRlbmRzIEVycm9yRXhjCi0gIHsKLSAgICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM4MzI2MjE3NzY4Nzc2NjM1MzdMOwotCi0JcHVibGljIEZsYWdfZXJyb3IoIFN0cmluZyBtZXNzYWdlLCBTdHJpbmdbXSBhcmdzICkKLSAgICB7Ci0gICAgICBzdXBlciggbWVzc2FnZSwgYXJncyApOwotICAgIH0KLQotICAgIHB1YmxpYyBGbGFnX2Vycm9yKCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIGFyZyApCi0gICAgewotICAgICAgc3VwZXIoIG1lc3NhZ2UsIG5ldyBTdHJpbmdbXXsgYXJnIH0gKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxhZ19lcnJvciggU3RyaW5nIG1lc3NhZ2UgKQotICAgIHsKLSAgICAgIHN1cGVyKCBtZXNzYWdlLCBudWxsICk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAgKiBUcmllcyB0byBwcm9jZXNzIGEgc2luZ2xlIGZsYWcgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgICAqIEBwYXJhbSAgYXJncyAgICAgIEFsbCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuCi0gICAgKiBAcGFyYW0gIGFyZ19pbmRleCBUaGlzIGlzIHRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQuCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGUgYXJndW1lbnQgd2UgYXJlIHByb2Nlc3NpbmcgaXMgYSBmbGFnIHRoYXQgaGFzIGEKLSAgICAqICAgICAgICAgcGFyYW1ldGVyIGFuZCB0aGUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBpbiB0aGUgbmV4dCBhcmd1bWVudC4KLSAgKiovCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzX2FyZyggU3RyaW5nW10gYXJncywgaW50IGFyZ19pbmRleCApIHRocm93cyBGbGFnX2Vycm9yCi0gIHsKLSAgICBib29sZWFuIHByb2Nlc3NlZF9uZXh0X2FyZyA9IGZhbHNlOwotCi0gICAgaWYoIGFyZ3NbYXJnX2luZGV4XS5jaGFyQXQoMCkgPT0gJy0nICkKLSAgICB7Ci0gICAgICAvLyBUaGlzIGlzIHRoZSBzdGFydCBvZiBhIGZsYWcuCi0gICAgICBpbnQgZmxhZ19pbmRleCA9IDE7Ci0gICAgICBpbnQgaW5mb19pbmRleCA9IGdldF9pbmZvX2luZGV4KCBhcmdzW2FyZ19pbmRleF0sIGZsYWdfaW5kZXggKTsKLSAgICAgIGludCBtYXhfaW5kZXggID0gZ2V0X21heF9pbmRleCggYXJnc1thcmdfaW5kZXhdLCBmbGFnX2luZGV4LCBpbmZvX2luZGV4ICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW2luZm9faW5kZXhdW05BTUVfQ09MXSAhPSBOT19QQVJNICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhpcyBmbGFnIHRha2VzIGEgcGFyYW1ldGVyIHNvIGNoZWNrIGlmIGl0IGlzIHN0dWNrIHRvIHRoaXMKLSAgICAgICAgLy8gYXJnLgotICAgICAgICBpZiggbWF4X2luZGV4IDwgYXJnc1thcmdfaW5kZXhdLmxlbmd0aCgpICkKLSAgICAgICAgewotICAgICAgICAgIGFkZF9mbGFnX3Bhcm0oIGluZm9faW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdfaW5kZXhdLnN1YnN0cmluZyggbWF4X2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnX2luZGV4XS5sZW5ndGgoKSApICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVGhpcyBmbGFnIGhhcyBhIHBhcmFtZXRlciBhbmQgaXQgd2Fzbid0IHN0dWNrIHRvIHRoZSBmbGFnLAotICAgICAgICAgIC8vIHNvIHdlIHdpbGwgdHJ5IHRvIGdldCBpdCBmcm9tIHRoZSBuZXh0IGFyZy4KLSAgICAgICAgICBpZiggYXJnX2luZGV4KzEgPCBhcmdzLmxlbmd0aCAmJgotICAgICAgICAgICAgICBhcmdzW2FyZ19pbmRleCsxXS5jaGFyQXQoMCkgIT0gJy0nICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBmb3VuZCBhbiBwYXJhbWV0ZXIgaW4gdGhlIG5leHQgc3RyaW5nIHNvIHdlIHdpbGwgdXNlIHRoaXMKLSAgICAgICAgICAgIC8vIG9uZSBhcyBhIHBhcmFtZXRlciBmb3IgdGhpcyBmbGFnLiAgTm90ZTogaWYgd2FzIG5vIHBhcmFtZXRlcgotICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGZsYWcgYXQgYWxsLCB0aGUgZXJyb3Igd2lsbCBiZSBjYXVnaHQgaW4gdGhlCi0gICAgICAgICAgICAvLyBjaGVja19ydWxlcyBtZXRob2QuCi0gICAgICAgICAgICBhZGRfZmxhZ19wYXJtKCBpbmZvX2luZGV4LCBhcmdzW2FyZ19pbmRleCsxXSApOwotICAgICAgICAgICAgcHJvY2Vzc2VkX25leHRfYXJnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEVycm9yIG1pc3NpbmcgcGFyYW1hdGVyLiBUaGlzIGVycm9yIGlzIGNhdWdodCBieSBjaGVja19ydWxlcy4KLSAgICAgICAgICAgIGFkZF9mbGFnX3Bhcm0oIGluZm9faW5kZXgsIG51bGwgKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGZsYWcgZG9lcyBub3QgaGF2ZSBhIHBhcmFtZXRlciBzbyB3ZSB3aWxsIGFkZCBhIG51bGwuCi0gICAgICAgIGFkZF9mbGFnX3Bhcm0oIGluZm9faW5kZXgsIG51bGwgKTsKLQotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyBzdHVjayB0byB0aGlzIGZsYWcuCi0gICAgICAgIGlmKCBtYXhfaW5kZXggPCBhcmdzW2FyZ19pbmRleF0ubGVuZ3RoKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgYWRkX3Bvc2l0aW9uYWwoIGFyZ3NbYXJnX2luZGV4XS5zdWJzdHJpbmcoIG1heF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdfaW5kZXhdLmxlbmd0aCgpICkgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gVGhpcyBpcyBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyLgotICAgICAgYWRkX3Bvc2l0aW9uYWwoIGFyZ3NbYXJnX2luZGV4XSApOwotICAgIH0KLQotICAgIHJldHVybiBwcm9jZXNzZWRfbmV4dF9hcmc7Ci0gIH0KLQotICAvKioKLSAgICAqIEZpbmRzIHRoZSByb3cgZm9yIHRoZSBmbGFnIHRoYXQgdW5pcXVlbHkgbWF0Y2hlZCB0aGlzIGZsYWcgc3RyLgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmbGFnc19pbmZvIGluZGV4IG9mIHRoZSBtYXRjaGluZyBmbGFnLgotICAqKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0X2luZm9faW5kZXgoIFN0cmluZyBmbGFnX3N0ciwgaW50IHN0YXJ0X2luZGV4ICkKLSAgICB0aHJvd3MgRmxhZ19lcnJvcgotICB7Ci0gICAgLy9pbnQgaW5mb19zdGFydCAgPSAxOwotICAgIC8vaW50IGluZm9fZW5kICAgID0gZmxhZ3NfaW5mby5sZW5ndGg7Ci0gICAgaW50IGluZm9faW5kZXg7Ci0gICAgaW50IGZvdW5kX2NvdW50ID0gMDsKLSAgICBpbnQgaW5mb19jb2xfaW5kZXggPSAwOwotICAgIGludCBsYXN0X2luZm9faW5kZXggPSAwOwotCi0gICAgQml0U2V0IGZsYWdzX3JlamVjdGVkID0gbmV3IEJpdFNldCgpOwotCi0gICAgLy8gTG9vcCBvdmVyIGVhY2ggY2hhciBpbiBmbGFnX3N0ci4gIE5vdGU6IHdlIHdpbGwgcHJvYmFibHkgYmFpbCBlYXJseS4KLSAgICBmb3IoIGludCBmbGFnX2NvbF9pbmRleCA9IHN0YXJ0X2luZGV4OyBmbGFnX2NvbF9pbmRleCA8IGZsYWdfc3RyLmxlbmd0aCgpOyBmbGFnX2NvbF9pbmRleCsrICkKLSAgICB7Ci0gICAgICAvLyBMb29wIG92ZXIgZWFjaCBmbGFnIGluIGZsYWdfaW5mbwotICAgICAgZm9yKCBpbmZvX2luZGV4ID0gMDsgaW5mb19pbmRleCA8IGZsYWdzX2luZm8ubGVuZ3RoOyBpbmZvX2luZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgZmxhZ0lkICAgPSBmbGFnc19pbmZvW2luZm9faW5kZXhdW0ZMQUdfQ09MXTsKLSAgICAgICAgU3RyaW5nIGZsYWdOYW1lID0gZmxhZ0lkID09IFBPU0lUSU9OQUwgPyBQT1NJVElPTkFMIDogZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ0lkICk7Ci0KLSAgICAgICAgaWYoIGZsYWdzX3JlamVjdGVkLmdldCggaW5mb19pbmRleCApID09IGZhbHNlICYmCi0gICAgICAgICAgICBpbmZvX2NvbF9pbmRleCA8IGZsYWdOYW1lLmxlbmd0aCgpICYmCi0gICAgICAgICAgICAgIENoYXJhY3Rlci50b0xvd2VyQ2FzZShmbGFnX3N0ci5jaGFyQXQoZmxhZ19jb2xfaW5kZXgpKSA9PQotICAgICAgICAgICAgICBmbGFnTmFtZS5jaGFyQXQoaW5mb19jb2xfaW5kZXgpICkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kX2NvdW50Kys7Ci0gICAgICAgICAgbGFzdF9pbmZvX2luZGV4ID0gaW5mb19pbmRleDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmbGFnc19yZWplY3RlZC5zZXQoIGluZm9faW5kZXggKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiggZm91bmRfY291bnQgPT0gMSApCi0gICAgICB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4KLSAgICAgICAgcmV0dXJuIGxhc3RfaW5mb19pbmRleDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGZvdW5kX2NvdW50ID09IDAgKQotICAgICAgewotICAgICAgICAvLyBGbGFnIG5vdCBmb3VuZCBhdCBhbGwuCi0gICAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfRkxBR19OT1RfRk9VTkQgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfc3RyLnN1YnN0cmluZyggc3RhcnRfaW5kZXggKSApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNb3JlIHRoYW4gb25lIGZsYWcgd2FzIGZvdW5kIHdpdGggdGhpcyBjaGFyIHNvIHdlIHdpbGwgZ28gdG8gdGhlCi0gICAgICAgIC8vIG5leHQgY2hhciB0byB1bmlxdWVseSBtYXRjaCBpdC4KLSAgICAgICAgaW5mb19jb2xfaW5kZXgrKzsKLSAgICAgICAgLy9pbmZvX3N0YXJ0ID0gbGFzdF9pbmZvX2luZGV4IC0gZm91bmRfY291bnQgKyAxOwotICAgICAgICAvL2luZm9fZW5kICAgPSBsYXN0X2luZm9faW5kZXggKyAxOwotICAgICAgICBmb3VuZF9jb3VudCA9IDA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIG9ubHkgd2F5IHRvIGdldCB0byB0aGlzIGNvZGUgaXMgaWYgdGhlIGxvb3AgZXhpdGVkIHdpdGgKLSAgICAvLyB0aGUgZm91bmRfY291bnQgZ3JlYXRlciB0aGFuIDEuICBUaGVyZWZvcmUsIHRoZSBmbGFnIHNwZWNpZmllZCBpcwotICAgIC8vIGFtYmlndW91cy4KLSAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0FNQklHVU9VU19GTEFHICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfc3RyLnN1YnN0cmluZyggc3RhcnRfaW5kZXgpICk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1hdGNoIGFzIG1hbnkgY2hhcmFjdGVycyBhcyBwb3NzaWJsZSBvZiB0aGUgdXNlcgotICAgICogc3BlY2lmaWVkIGZsYWcgd2l0aCB0aGUgbWF0Y2hlZCBmbGFnIHN0cmluZy4KLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgbWF0Y2hpbmcgZmxhZyBjaGFyYXJhY3Rlci4KLSAgKiovCi0gIHByaXZhdGUgaW50IGdldF9tYXhfaW5kZXgoIFN0cmluZyBmbGFnX3N0ciwgaW50IGZsYWdfc3RhcnQsIGludCBpbmZvX2luZGV4ICkKLSAgewotICAgIGludCBmbGFnX2NvbF9pbmRleCA9IGZsYWdfc3RhcnQ7Ci0gICAgaW50IGluZm9fY29sX2luZGV4ID0gMDsKLQotICAgIFN0cmluZyBpbmZvX3N0ciA9IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9baW5mb19pbmRleF1bRkxBR19DT0xdICk7Ci0KLSAgICB3aGlsZSggZmxhZ19jb2xfaW5kZXggPCBmbGFnX3N0ci5sZW5ndGgoKSAmJgotICAgICAgICAgICBpbmZvX2NvbF9pbmRleCA8IGluZm9fc3RyLmxlbmd0aCgpICkKLSAgICB7Ci0gICAgICBpZiggQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKCBmbGFnX3N0ci5jaGFyQXQoZmxhZ19jb2xfaW5kZXgpICkgIT0KLSAgICAgICAgICBpbmZvX3N0ci5jaGFyQXQoaW5mb19jb2xfaW5kZXgpICkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGZsYWdfY29sX2luZGV4Kys7Ci0gICAgICBpbmZvX2NvbF9pbmRleCsrOwotICAgIH0KLQotICAgIHJldHVybiBmbGFnX2NvbF9pbmRleDsKLSAgfQotCi0gIC8qKgotICAgICogQWRkcyBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyIHRvIGZsYWdzX3NwZWNpZmllZC4KLSAgKiovCi0gIHByaXZhdGUgdm9pZCBhZGRfcG9zaXRpb25hbCggU3RyaW5nIHBvc2l0aW9uYWxfcGFybSApCi0gIHsKLSAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXSA9PSBudWxsICkKLSAgICAgIGZsYWdzX3NwZWNpZmllZFtQT1NJVElPTkFMX1JPV10gPSBuZXcgVmVjdG9yKDMpOwotCi0gICAgZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXS5hZGQoIHBvc2l0aW9uYWxfcGFybSApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBBZGRzIGEgZmxhZyBhbmQgaXRzIHBhcmFtZXRlciB0byBmbGFnc19zcGVjaWZpZWQuICBJZiBvbmx5IHRoZQotICAgICogZmxhZyB3YXMgc3BlY2lmaWVkLCB0aGVuIGEgbnVsbCBzaG91bGQgYmUgcGFzc2VkIHRvIGZsYWdfcGFybS4KLSAgKiovCi0gIHByaXZhdGUgdm9pZCBhZGRfZmxhZ19wYXJtKCBpbnQgZmxhZ19pbmRleCwgU3RyaW5nIGZsYWdfcGFybSApCi0gICAgdGhyb3dzIEZsYWdfZXJyb3IKLSAgewotICAgIGlmKCBmbGFnc19pbmZvW2ZsYWdfaW5kZXhdW0RVUF9DT0xdID09IE5PX0RVUFMgJiYKLSAgICAgICAgZmxhZ3Nfc3BlY2lmaWVkW2ZsYWdfaW5kZXhdICE9IG51bGwgKQotICAgICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9EVVBMSUNBVEVfRkxBR1NfTk9UX0FMTE9XRUQgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tmbGFnX2luZGV4XVtGTEFHX0NPTF0gKSApOwotCi0gICAgaWYoIGZsYWdzX3NwZWNpZmllZFtmbGFnX2luZGV4XSA9PSBudWxsICkKLSAgICAgIGZsYWdzX3NwZWNpZmllZFtmbGFnX2luZGV4XSA9IG5ldyBWZWN0b3IoMyk7Ci0KLSAgICBmbGFnc19zcGVjaWZpZWRbZmxhZ19pbmRleF0uYWRkKCBmbGFnX3Bhcm0gKTsKLSAgfQotCi0gIC8qKgotICAgICogQ2hlY2tzIHRoYXQgdGhlIHVzZXIgaGFzbid0IGJyb2tlbiBhbnkgY29tbWFuZCBsaW5lIHJ1bGVzLgotICAqKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrX3J1bGVzKCkgdGhyb3dzIEZsYWdfZXJyb3IKLSAgewotICAgIC8vIENoZWNrIHRoYXQgYWxsIG9mIHRoZSByZXF1aXJlZCBwb3NpdGlvbmFscyB3ZXJlIHNwZWNpZmllZC4KLSAgICBpbnQgcG9zaXRpb25hbF9jb3VudCA9IDA7Ci0KLSAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBwb3NpdGlvbmFsX2NvdW50ID0gZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXS5zaXplKCk7Ci0gICAgfQotCi0gICAgaWYoIHJlcXVpcmVkX3Bvc2l0aW9uYWxzID4gcG9zaXRpb25hbF9jb3VudCApCi0gICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX01JU1NJTkdfUE9TSVRJT05BTCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3JlcXVpcmVkX3Bvc2l0aW9uYWxzLTFdW05BTUVfQ09MXSApICk7Ci0KLSAgICBlbHNlIGlmKCByZXF1aXJlZF9wb3NpdGlvbmFscyA8IHBvc2l0aW9uYWxfY291bnQgJiYKLSAgICAgICAgICAgICBvcHRpb25hbF9wb3NpdGlvbmFsc19hbGxvd2VkID09IGZhbHNlICkKLSAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfVE9PX01BTllfUE9TSVRJT05BTFMgKSApOwotCi0gICAgZm9yKCBpbnQgcm93ID0gMDsgcm93IDwgZmxhZ3NfaW5mby5sZW5ndGg7IHJvdysrICkKLSAgICB7Ci0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBQT1NJVElPTkFMICkgY29udGludWU7Ci0KLSAgICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbcm93XSA9PSBudWxsICYmCi0gICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gPT0gUkVRVUlSRUQgKQotICAgICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX01JU1NJTkdfUkVRVUlSRURfRkxBRyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gKSApOwotCi0gICAgICBpbnQgcGFybV9jb3VudCA9IDA7Ci0KLSAgICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbcm93XSAhPSBudWxsICkgcGFybV9jb3VudCA9IGZsYWdzX3NwZWNpZmllZFtyb3ddLnNpemUoKTsKLQotICAgICAgLy8gQ2hlY2sgZm9yIHRvbyBtYW55IGZsYWcgcGFyYW1ldGVycy4KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRFVQX0NPTF0gPT0gTk9fRFVQUyAmJiBwYXJtX2NvdW50ID4gMSApCi0gICAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfRFVQTElDQVRFX0ZMQUdTX05PVF9BTExPV0VEICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSApICk7Ci0KLSAgICAgIC8vIENoZWNrIGZvciBtaXNzaW5nIGZsYWcgcGFyYW1ldGVyLgotICAgICAgaWYoIHBhcm1fY291bnQgPiAwICYmIGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF0gIT0gTk9fUEFSTSApCi0gICAgICB7Ci0gICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBmbGFnc19zcGVjaWZpZWRbcm93XS5zaXplKCk7IGluZGV4KysgKQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIGZsYWdzX3NwZWNpZmllZFtyb3ddLmVsZW1lbnRBdChpbmRleCkgPT0gbnVsbCApCi0gICAgICAgICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX01JU1NJTkdfRkxBR19QQVJBTUVURVIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdICkgfSApOwotCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHZlcmlmaWVzIHRoYXQgYSBwcm9wZXIgZmxhZ3NfaW5mbyBzdHJpbmcgYXJyYXkgd2FzIHBhc3NlZAotICAgICogdG8gdXMgYnkgdGhlIHByb2dyYW1tZXIuCi0gICoqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5X2ZsYWdzX2luZm8oKSB0aHJvd3MgSW50ZXJuYWxFcnJvckV4YwotICB7Ci0gICAgYm9vbGVhbiBkb25lX3Bvc2l0aW9uYWxzID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBoZWxwX3NwZWNpZmllZCAgID0gZmFsc2U7Ci0KLSAgICByZXF1aXJlZF9wb3NpdGlvbmFscyA9IDA7Ci0gICAgb3B0aW9uYWxfcG9zaXRpb25hbHNfYWxsb3dlZCA9IGZhbHNlOwotICAgIG9wdGlvbmFsX2xpc3RfaW5kZXggPSAtMTsKLSAgICBtYXhfZmxhZ19zaXplID0gMDsKLSAgICBtYXhfbmFtZV9zaXplID0gMDsKLQotICAgIGlmKCBmbGFnc19pbmZvID09IG51bGwgfHwgZmxhZ3NfaW5mby5sZW5ndGggPT0gMCApCi0gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX05PX0ZMQUdTX0RBVEFfU1BFQ0lGSUVEICApICk7Ci0KLSAgICBpZiggZmxhZ3NfaW5mb1tQT1NJVElPTkFMX1JPV10gIT0gbnVsbCAmJgotICAgICAgICBmbGFnc19pbmZvW1BPU0lUSU9OQUxfUk9XXS5sZW5ndGggPiAwICYmCi0gICAgICAgIGZsYWdzX2luZm9bUE9TSVRJT05BTF9ST1ddW0ZMQUdfQ09MXSAhPSBQT1NJVElPTkFMICkKLSAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfRklSU1RfRkxBR19OT1RfUE9TSVRJT05BTCApICk7Ci0KLSAgICBmb3IoIGludCByb3cgPSAwOyByb3cgPCBmbGFnc19pbmZvLmxlbmd0aDsgcm93KysgKQotICAgIHsKLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd10gPT0gbnVsbCApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfTlVMTF9GTEFHX1JPVyApICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd10ubGVuZ3RoICE9IDUgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9ST1dfU0laRSApICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IG51bGwgfHwKLSAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdID09IG51bGwgfHwKLSAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bSEVMUF9DT0xdID09IG51bGwgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX05VTExfSU5fUk9XICkgKTsKLQotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0uZXF1YWxzKCBoZWxwX2ZsYWcgKSApIGhlbHBfc3BlY2lmaWVkID0gdHJ1ZTsKLQotICAgICAgU3RyaW5nIGZsYWdJZCAgID0gZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXTsKLSAgICAgIFN0cmluZyBuYW1lSWQgICA9IGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF07Ci0KLSAgICAgIFN0cmluZyBmbGFnX2NvbCA9IGZsYWdJZCA9PSBQT1NJVElPTkFMID8gUE9TSVRJT05BTCA6IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdJZCApOwotICAgICAgU3RyaW5nIG5hbWVfY29sID0gbmFtZUlkID09IE5PX1BBUk0gPyBOT19QQVJNIDogZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggbmFtZUlkICk7Ci0KLSAgICAgIGlmKCBmbGFnX2NvbC5sZW5ndGgoKSA+IG1heF9mbGFnX3NpemUgKQotICAgICAgICBtYXhfZmxhZ19zaXplID0gZmxhZ19jb2wubGVuZ3RoKCk7Ci0KLSAgICAgIGlmKCBuYW1lX2NvbCAhPSBOT19QQVJNICYmIG5hbWVfY29sLmxlbmd0aCgpID4gbWF4X25hbWVfc2l6ZSApCi0gICAgICAgIG1heF9uYW1lX3NpemUgPSBuYW1lX2NvbC5sZW5ndGgoKTsKLQotICAgICAgLy8gRW5zdXJlIHRoYXQgZmxhZ3MgYXJlIGFsbCBpbiBsb3dlcmNhc2UuCi0gICAgICBpZiggIWZsYWdfY29sLmVxdWFscyggZmxhZ19jb2wudG9Mb3dlckNhc2UoKSApICkKLSAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9GTEFHX05PVF9MT1dFUkNBU0UgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfY29sICk7Ci0KLSAgICAgIC8vIEVuc3VyZSB0aGF0IG9ubHkgdGhlIHByZWRlZmluZWQgZHVwIHN0cmluZ3MgYXJlIHVzZWQuCi0gICAgICAvLyBOb3RlOiBpdCdzIG9rIHRvIHVzZSAhPSB3aGVuIGNvbXBhcmluZyBjb25zdGFudCBzdHJpbmdzIGxpdGVyYWxzLgotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtEVVBfQ09MXSA9PSBudWxsIHx8Ci0gICAgICAgICAgKCBmbGFnc19pbmZvW3Jvd11bRFVQX0NPTF0gIT0gTk9fRFVQUyAmJgotICAgICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW0RVUF9DT0xdICE9IERVUFNfT0sgKSApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfSU5DT1JSRUNUX0RVUF9TVFJJTkcgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtEVVBfQ09MXSApOwotCi0gICAgICAvLyBFbnN1cmUgdGhhdCBvbmx5IHRoZSBwcmVkZWZpbmVkIHJlcXVpcmVkIHN0cmluZ3MgYXJlIHVzZWQuCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gPT0gbnVsbCB8fAotICAgICAgICAgICggZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gIT0gUkVRVUlSRUQgJiYKLSAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdICE9IE9QVElPTkFMICkgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9SRVFVSVJFRF9TVFJJTkcgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdICk7Ci0KLSAgICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgcG9zaXRpb25hbHMuCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBQT1NJVElPTkFMICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdID09IFJFUVVJUkVEICkKLSAgICAgICAgewotICAgICAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdID09IE5PX1BBUk0gKQotICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9SRVFVSVJFRF9QT1NJVElPTkFMX05FRURTX05BTUUgKSApOwotCi0gICAgICAgICAgcmVxdWlyZWRfcG9zaXRpb25hbHMrKzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdICE9IE5PX1BBUk0gKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gV2UgdXNlIHRoZSBOQU1FX0NPTCBmaWVsZCBmb3IgYW4gb3B0aW9uYWwgcG9zaXRpb25hbCB0byBkZW5vdGUKLSAgICAgICAgICAvLyB3aGV0aGVyIGFkZGl0aW9uYWwgcG9zaXRpb25hbHMgYXJlIGFsbG93ZWQgb3Igbm90LgotICAgICAgICAgIG9wdGlvbmFsX3Bvc2l0aW9uYWxzX2FsbG93ZWQgPSB0cnVlOwotICAgICAgICAgIG9wdGlvbmFsX2xpc3RfaW5kZXggPSByb3c7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gRW5zdXJlIHRoYXQgcG9zaXRpb25hbHMgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGluZm8uCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSAhPSBQT1NJVElPTkFMIHx8Ci0gICAgICAgICAgKCBkb25lX3Bvc2l0aW9uYWxzID09IGZhbHNlICYmCi0gICAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IFBPU0lUSU9OQUwgJiYKLSAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdID09IE9QVElPTkFMICkgKQotICAgICAgewotICAgICAgICBkb25lX3Bvc2l0aW9uYWxzID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGRvbmVfcG9zaXRpb25hbHMgPT0gdHJ1ZSApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfUE9TSVRJT05BTF9OT1RfQVRfQkVHSU5OSU5HICkgKTsKLSAgICB9Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBhIGhlbHAgZmxhZyB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbmZvIGxpc3QuCi0gICAgaWYoIGhlbHBfc3BlY2lmaWVkID09IGZhbHNlICkKLSAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfSEVMUF9GTEFHX05PVF9TUEVDSUZJRUQgKSApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGR1bXAgaW50ZXJuYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJzZWQKLSAgICAqIGNvbW1hbmQgbGluZS4KLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGIgPSBuZXcgU3RyaW5nQnVmZmVyKDEwMCk7Ci0KLSAgICBmb3IoIGludCByb3cgPSAwOyByb3cgPCBmbGFnc19pbmZvLmxlbmd0aDsgcm93KysgKQotICAgIHsKLSAgICAgIGIuYXBwZW5kKCAiXG4iICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IFBPU0lUSU9OQUwgKQotICAgICAgICBiLmFwcGVuZCggIlBvc2l0aW9uYWw6IiApOwotICAgICAgZWxzZQotICAgICAgICBiLmFwcGVuZCggZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSApICsgIjoiICk7Ci0KLQotICAgICAgaWYoIGZsYWdzX3NwZWNpZmllZFtyb3ddID09IG51bGwgKQotICAgICAgICBiLmFwcGVuZCggIm5vIHBhcmFtZXRlcnMiICk7Ci0gICAgICBlbHNlCi0gICAgICAgIGZvciggaW50IHBhcm1faW5kZXggPSAwOyBwYXJtX2luZGV4IDwgZmxhZ3Nfc3BlY2lmaWVkW3Jvd10uc2l6ZSgpOyBwYXJtX2luZGV4KysgKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHBhcm0gPSAoU3RyaW5nKWZsYWdzX3NwZWNpZmllZFtyb3ddLmVsZW1lbnRBdChwYXJtX2luZGV4KTsKLSAgICAgICAgICBiLmFwcGVuZCggcGFybSArICI6IiApOwotICAgICAgICB9Ci0gICAgICBiLmFwcGVuZCggIlxuIiApOwotICAgIH0KLQotICAgIHJldHVybiAiIitiOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMQUdfQ09MICAgICA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOQU1FX0NPTCAgICAgPSAxOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFVQX0NPTCAgICAgID0gMjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFUVVJUkVEX0NPTCA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUxQX0NPTCAgICAgPSA0OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQT1NJVElPTkFMX1JPVyA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUxQX0xJTkVfTEVOICA9IDc1OwotCi0gIHByaXZhdGUgU3RyaW5nW11bXSBmbGFnc19pbmZvOwotICBwcml2YXRlIFN0cmluZyAgICAgaGVscF9mbGFnOwotICBwcml2YXRlIFN0cmluZyAgICAgdG9vbF9uYW1lOwotICBwcml2YXRlIFZlY3RvcltdICAgZmxhZ3Nfc3BlY2lmaWVkOwotICBwcml2YXRlIGludCAgICAgICAgcmVxdWlyZWRfcG9zaXRpb25hbHM7Ci0gIHByaXZhdGUgYm9vbGVhbiAgICBvcHRpb25hbF9wb3NpdGlvbmFsc19hbGxvd2VkOwotICBwcml2YXRlIGludCAgICAgICAgb3B0aW9uYWxfbGlzdF9pbmRleDsKLSAgcHJpdmF0ZSBpbnQgICAgICAgIG1heF9mbGFnX3NpemU7Ci0gIHByaXZhdGUgaW50ICAgICAgICBtYXhfbmFtZV9zaXplOwotCi0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSBtZXNzYWdlczsKLSAgcHJpdmF0ZSAgIFJlc291cmNlQnVuZGxlIGZsYWdNZXNzYWdlczsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvRmxhZ01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0ZsYWdNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODg0MTRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvRmxhZ01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1hbmRsaW5lOwotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc3RvcmUgY29uc3RhbnQgc3RyaW5nIGVycm9yIG1lc3NhZ2VzCi0gICogZ2VuZXJhdGVkIGJ5IENvbW1hbmRMaW5lLmphdmEKLSAgKgotICAqCi0gICogQGF1dGhvciBQZXRlciBNb29nawotICAqIEBkYXRlICAgSnVseSAxMywgMjAwMAotICAqIEBzZWUgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1hbmRsaW5lLkNvbW1hbmRMaW5lCi0qKi8KLQotcHVibGljIGZpbmFsIGNsYXNzIEZsYWdNZXNzYWdlcwotewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9GTEFHX05PVF9GT1VORCA9ICJQQVJTRVJfRVJST1JfRkxBR19OT1RfRk9VTkQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9BTUJJR1VPVVNfRkxBRyA9ICJQQVJTRVJfRVJST1JfQU1CSUdVT1VTX0ZMQUciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9NSVNTSU5HX1BPU0lUSU9OQUwgPSAiUEFSU0VSX0VSUk9SX01JU1NJTkdfUE9TSVRJT05BTCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX1RPT19NQU5ZX1BPU0lUSU9OQUxTID0gIlBBUlNFUl9FUlJPUl9UT09fTUFOWV9QT1NJVElPTkFMUyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX01JU1NJTkdfUkVRVUlSRURfRkxBRyA9ICJQQVJTRVJfRVJST1JfTUlTU0lOR19SRVFVSVJFRF9GTEFHIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfRFVQTElDQVRFX0ZMQUdTX05PVF9BTExPV0VEID0gIlBBUlNFUl9FUlJPUl9EVVBMSUNBVEVfRkxBR1NfTk9UX0FMTE9XRUQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9NSVNTSU5HX0ZMQUdfUEFSQU1FVEVSID0gIlBBUlNFUl9FUlJPUl9NSVNTSU5HX0ZMQUdfUEFSQU1FVEVSIjsKLQotICAvLyBFcnJvciBpbnRlcm5hbCBlcnJvciBtZXNzYWdlcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX01FU1NBR0VfTUlTU0lOR19BUkcgPSAiUEFSU0VSX0VSUk9SX01FU1NBR0VfTUlTU0lOR19BUkciOwotCi0gIC8vIEludGVybmFsIGNvbW1hbmQgbGluZSBlcnJvciBtZXNzYWdlcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX05PX0ZMQUdTX0RBVEFfU1BFQ0lGSUVEID0gIlBBUlNFUl9FUlJPUl9OT19GTEFHU19EQVRBX1NQRUNJRklFRCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0ZJUlNUX0ZMQUdfTk9UX1BPU0lUSU9OQUwgPSAiUEFSU0VSX0VSUk9SX0ZJUlNUX0ZMQUdfTk9UX1BPU0lUSU9OQUwiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9OVUxMX0ZMQUdfUk9XID0gIlBBUlNFUl9FUlJPUl9OVUxMX0ZMQUdfUk9XIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JPV19TSVpFID0gIlBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUk9XX1NJWkUiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9OVUxMX0lOX1JPVyA9ICJQQVJTRVJfRVJST1JfTlVMTF9JTl9ST1ciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfRFVQX1NUUklORyA9ICJQQVJTRVJfRVJST1JfSU5DT1JSRUNUX0RVUF9TVFJJTkciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUkVRVUlSRURfU1RSSU5HID0gIlBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUkVRVUlSRURfU1RSSU5HIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfUE9TSVRJT05BTF9OT1RfQVRfQkVHSU5OSU5HID0gIlBBUlNFUl9FUlJPUl9QT1NJVElPTkFMX05PVF9BVF9CRUdJTk5JTkciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9IRUxQX0ZMQUdfTk9UX1NQRUNJRklFRCA9ICJQQVJTRVJfRVJST1JfSEVMUF9GTEFHX05PVF9TUEVDSUZJRUQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9GTEFHU19OT1RfT1JERVJFRCA9ICJQQVJTRVJfRVJST1JfRkxBR1NfTk9UX09SREVSRUQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9GTEFHX05PVF9MT1dFUkNBU0UgPSAiUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0xPV0VSQ0FTRSI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX1JFUVVJUkVEX1BPU0lUSU9OQUxfTkVFRFNfTkFNRSA9ICJQQVJTRVJfRVJST1JfUkVRVUlSRURfUE9TSVRJT05BTF9ORUVEU19OQU1FIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfSU5GT19TWU5UQVggPSAiUEFSU0VSX1NZTlRBWCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0ZMQUdTID0gIlBBUlNFUl9GTEFHUyI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfSU5GT19XSEVSRSA9ICJQQVJTRVJfV0hFUkUiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9jb21tYW5kbGluZS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9jb21tYW5kbGluZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODUyOTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvY29tbWFuZGxpbmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLVBBUlNFUl9FUlJPUl9GTEFHX05PVF9GT1VORD1JV0FCMDEyM0UgRmxhZyAtezB9IGlzIG5vdCB2YWxpZC4KLVBBUlNFUl9FUlJPUl9BTUJJR1VPVVNfRkxBRz1JV0FCMDI4NEUgRmxhZyAtezB9IGlzIGFtYmlndW91cy4KLVBBUlNFUl9FUlJPUl9NSVNTSU5HX1BPU0lUSU9OQUw9SVdBQjAyODVFIE1pc3NpbmcgezB9IHBhcmFtZXRlci4KLVBBUlNFUl9FUlJPUl9UT09fTUFOWV9QT1NJVElPTkFMUz1JV0FCMDI4NkUgVG9vIG1hbnkgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHNwZWNpZmllZC4KLVBBUlNFUl9FUlJPUl9NSVNTSU5HX1JFUVVJUkVEX0ZMQUc9SVdBQjAyODhFIEZsYWcgLXswfSBpcyBtaXNzaW5nLgotUEFSU0VSX0VSUk9SX0RVUExJQ0FURV9GTEFHU19OT1RfQUxMT1dFRD1JV0FCMDI5M0UgRmxhZyAtezB9IGhhcyBiZWVuIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZS4KLVBBUlNFUl9FUlJPUl9NSVNTSU5HX0ZMQUdfUEFSQU1FVEVSPUlXQUIwMjk0RSBGbGFnIC17MH0gaXMgbWlzc2luZyBwYXJhbWV0ZXIgezF9LgotUEFSU0VSX0VSUk9SX01FU1NBR0VfTUlTU0lOR19BUkc9SVdBQjAzMTlFIEVycm9yIG1lc3NhZ2UgezB9IGlzIG1pc3NpbmcgYW4gYXJndW1lbnQuCi1QQVJTRVJfRVJST1JfTk9fRkxBR1NfREFUQV9TUEVDSUZJRUQ9SVdBQjAzNDVFIFNwZWNpZnkgZmxhZyBpbmZvcm1hdGlvbi4KLVBBUlNFUl9FUlJPUl9GSVJTVF9GTEFHX05PVF9QT1NJVElPTkFMPUlXQUIwMzQ2RSBUaGUgZmlyc3QgZmxhZyBtdXN0IGJlIHBvc2l0aW9uYWwuCi1QQVJTRVJfRVJST1JfTlVMTF9GTEFHX1JPVz1JV0FCMDM0N0UgTnVsbCBmbGFnIHJvdy4KLVBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUk9XX1NJWkU9SVdBQjAzNDhFIEZsYWcgcm93IG11c3QgaGF2ZSA1IHN0cmluZ3MuCi1QQVJTRVJfRVJST1JfTlVMTF9JTl9ST1c9SVdBQjAzNDlFIEZsYWcgaW5mb3JtYXRpb24gY29udGFpbnMgYSBudWxsIHN0cmluZy4KLVBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfRFVQX1NUUklORz1JV0FCMDM1MEUgRHVwbGljYXRlIHN0cmluZyB7MH0gaXMgbm90IHZhbGlkLgotUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9SRVFVSVJFRF9TVFJJTkc9SVdBQjAzNTFFIFJlcXVpcmVkIHN0cmluZyB7MH0gaXMgbm90IHZhbGlkLgotUEFSU0VSX0VSUk9SX1BPU0lUSU9OQUxfTk9UX0FUX0JFR0lOTklORz1JV0FCMDM1MkUgUG9zaXRpb25hbCBmbGFnIGlzIG5vdCBhdCB0aGUgYmVnaW5uaW5nLgotUEFSU0VSX0VSUk9SX0hFTFBfRkxBR19OT1RfU1BFQ0lGSUVEPUlXQUIwMzUzRSBIZWxwIGZsYWcgaXMgbm90IHNwZWNpZmllZCBpbiBpbmZvcm1hdGlvbiBhcnJheS4KLVBBUlNFUl9FUlJPUl9GTEFHU19OT1RfT1JERVJFRD1JV0FCMDM1NEUgRmxhZ3MgYXJlIG5vdCBpbiBsZXhpY2FsIG9yZGVyLgotUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0xPV0VSQ0FTRT1JV0FCMDM1NUUgRmxhZyB7MH0gaXMgbm90IGxvd2VyY2FzZS4KLVBBUlNFUl9FUlJPUl9SRVFVSVJFRF9QT1NJVElPTkFMX05FRURTX05BTUU9SVdBQjAzNTZFIFJlcXVpcmVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBtdXN0IGhhdmUgYSBuYW1lIHNwZWNpZmllZC4KLVBBUlNFUl9TWU5UQVg9U3ludGF4Ci1QQVJTRVJfRkxBR1M9RmxhZ3MKLVBBUlNFUl9XSEVSRT1XaGVyZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vQ2xhc3NQYXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9DbGFzc1BhdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ4YTRhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9DbGFzc1BhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi0vKioKLSAqIAotICogVGhlIGNsYXNzIHByb3ZpZGVzIGFuZCBlYXN5IHdheSB0byBidWlsZCBjbGFzc3BhdGhzLgotICoKLSAqLwotcHVibGljIGNsYXNzIENsYXNzUGF0aCAKLXsKLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIG5ld1BhdGggYXBwZW5kcyB0aGlzIG5ldyBwYXRoIHRvIHRoZSBlbmQgb2YgdGhlIGNsYXNzcGF0aC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFwcGVuZFBhdGgoIFN0cmluZyBuZXdQYXRoICkKLSAgewotICAJLy8gTm8gdmFsdWUgdG8gcHV0IG9uIHBhdGgsIHNvIGp1c3QgcmV0dXJuCi0gIAlpZiggbmV3UGF0aC5lcXVhbHMoICIiICkgKSByZXR1cm47Ci0gIAkKLSAgCS8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBhdGggaW4gdGhlIHN0cmluZyB0aGVuIHdlIGRvbid0IG5lZWQgYSBwYXRoCi0gIAkvLyBzZXBhcmF0b3IuCi0gIAlpZiggcGF0aC5sZW5ndGgoKSA9PSAwICkKLSAgCXsKLSAgCSAgcGF0aC5hcHBlbmQoIG5ld1BhdGggKTsKLSAgCX0KLSAgCWVsc2UKLSAgCXsKLSAgCSAgcGF0aC5hcHBlbmQoIEZpbGUucGF0aFNlcGFyYXRvckNoYXIgKyBuZXdQYXRoICk7Ci0gIAl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGFsbCBqYXIgYW5kIHppcCBmaWxlcyBpbiBhIHBhcnRpY3VsYXIgZGlyZWN0b3J5IHRvCi0gICAqIHRoZSBjbGFzc3BhdGguCi0gICAqIAotICAgKiBAcGFyYW0gZGlyZWN0b3J5IHNwZWNpZmllcyBhIGRpcmVjdG9yeSBjb250YWlucyBqYXIgYW5kIHppcCBmaWxlcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFwcGVuZERpciggU3RyaW5nIGRpcmVjdG9yeSApCi0gIHsKLSAgCUZpbGUgZGlyID0gbmV3IEZpbGUoIGRpcmVjdG9yeSApOwotICAJCi0gIAlpZiggIWRpci5pc0RpcmVjdG9yeSgpICkgcmV0dXJuOwotICAJCi0gIAlGaWxlW10gZmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7Ci0gIAkKLSAgCWZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBmaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAJewotICAJICBGaWxlICAgZmlsZSA9IGZpbGVzW2luZGV4XTsKLSAgCSAgU3RyaW5nIG5hbWUgPSBmaWxlLmdldE5hbWUoKTsKLSAgCSAgCi0gIAkgIGlmKCBmaWxlLmlzRmlsZSgpICYmCi0gIAkgICAgICAoIG5hbWUuZW5kc1dpdGgoICIuamFyIiApIHx8Ci0gIAkgICAgICAgIG5hbWUuZW5kc1dpdGgoICIuemlwIiApICkgKQotICAJICB7Ci0gIAkgIAlhcHBlbmRQYXRoKCBmaWxlLmdldEFic29sdXRlUGF0aCgpICk7Ci0gIAkgIH0KLSAgCSAgICAgICAgCi0gIAl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIG5ld1BhdGggYXBwZW5kcyBhIG5ldyBjbGFzc3BhdGggdG8gdGhlIGVuZCBvZiB0aGlzIGNsYXNzcGF0aC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFwcGVuZFBhdGgoIENsYXNzUGF0aCBuZXdQYXRoICkKLSAgewotICAJYXBwZW5kUGF0aCggbmV3UGF0aC5wYXRoLnRvU3RyaW5nKCkgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZnVsbCBzdHJpbmcgY2xhc3NwYXRoIHdpdGggc2VwYXJhdG9ycy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gIAlyZXR1cm4gcGF0aC50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9GaWxlUmVzb3VyY2VPdXRwdXRTdHJlYW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmM0YTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotCi0KLQotLyoqCi0qIFRoaXMgY2xhc3MgZGVmaW5lcyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgd3JpdGVzIHRvIGFuCi0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSBJRmlsZX0uCi0qLwotcHVibGljIGNsYXNzIEZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbSBleHRlbmRzIE91dHB1dFN0cmVhbQotewotCi0gIElQYXRoICAgICAgICAgICAgICAgICBmRmlsZVBhdGg7Ci0gIFJlc291cmNlQ29udGV4dCAgICAgICBmUmVzb3VyY2VDb250ZXh0OyAKLSAgSVByb2dyZXNzTW9uaXRvciAgICAgICBmTW9uaXRvcjsgICAKLSAgSVN0YXR1c0hhbmRsZXIgICAgICAgICBmU3RhdHVzSGFuZGxlcjsKLSAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci0gIGJvb2xlYW4gICAgICAgICAgICAgICBmT3BlbjsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGFuIG91dHB1dCBzdHJlYW0gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0byB0aGUKLSAgKiBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPi4gVGhlIHdvcmtzcGFjZSBpcyBuZWl0aGVyIGV4YW1pbmVkIG5vcgotICAqIGFsdGVyZWQgZHVyaW5nIGNvbnN0cnVjdGlvbi4gQWxsIHJlc291cmNlIGNyZWF0aW9uIGlzIGRlZmVycmVkCi0gICogdW50aWwgbGF0ZXIgaW4gdGhlIHN0cmVhbSdzIGxpZmVjeWNsZSwgc3VjaCBhcyBkdXJpbmcgd3JpdGluZwotICAqIG9yIGNsb3N1cmUuCi0gICogPGI+Tm90ZTo8L2I+IFRoZSBwcmVmZXJyZWQgbWVjaGFuaXNtIGZvciBjcmVhdGluZyBhIHN0cmVhbSB0aGF0Ci0gICogd3JpdGVzIHRvIGFuIElGaWxlIGlzIHRvIGNhbGwgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZAotICAqIHtAbGluayBGaWxlUmVzb3VyY2VVdGlscyNuZXdGaWxlT3V0cHV0U3RyZWFtIEZpbGVSZXNvdXJjZVV0aWxzLm5ld0ZpbGVPdXRwdXRTdHJlYW0oKX0KLSAgKiBhbmQgd29yayB3aXRoIHRoZSByZXN1bHRpbmcgPGNvZGU+T3V0cHV0U3RyZWFtPC9jb2RlPi4KLSAgKiBEaXJlY3QgY29uc3RydWN0aW9uIG9mIGEgRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtIGlzIG5vdCByZWNvbW1lbmRlZC4KLSAgKiBAcGFyYW0gZmlsZSBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfQotICAqIGhhbmRsZSBvZiB0aGUgZmlsZSByZXNvdXJjZSB0byBjcmVhdGUuIFRoZSBwcm9qZWN0IGltcGxpZWQgYnkgdGhlCi0gICogcGF0aG5hbWUgb2YgdGhlIGZpbGUgbXVzdCBhbHJlYWR5IGV4aXN0LAotICAqIHRoYXQgaXMsIHRoaXMgbWV0aG9kIGNhbm5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBwcm9qZWN0cy4KLSAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotICAqLwotICBwdWJsaWMgRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtICggCi0gIAkJCVJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsIAotICAJCQlJUGF0aCAgICAgICAgICAgZmlsZVBhdGgsIAotICAJCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsCi0gIAkJCUlTdGF0dXNIYW5kbGVyICAgc3RhdHVzSGFuZGxlcgotICAJCQkpCi0gIHsKLSAgICBmRmlsZVBhdGggPSBmaWxlUGF0aDsKLSAgICBmUmVzb3VyY2VDb250ZXh0ID0gcmVzb3VyY2VDb250ZXh0OwotICAgIGZNb25pdG9yID0gbW9uaXRvcjsKLSAgICBmU3RhdHVzSGFuZGxlciA9IHN0YXR1c0hhbmRsZXI7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICBmT3BlbiA9IHRydWU7Ci0gIH0KLQotICAvKioKLSAgKiBDbG9zZXMgdGhlIHN0cmVhbS4KLSAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjbG9zaW5nIHRoZSBzdHJlYW0uCi0gICogRm9yIGV4YW1wbGUsIGlmIHRoaXMgc3RyZWFtIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIG92ZXJ3cml0ZUZpbGUgPSBmYWxzZQotICAqIGFuZCBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlbiBhbiBJT0V4Y2VwdGlvbiB3aWxsCi0gICogYmUgdGhyb3duIGVpdGhlciBub3cgb3IgZHVyaW5nIGFuIGVhcmxpZXIge0BsaW5rICN3cml0ZSB3cml0ZX0uCi0gICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlICgpCi0gIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFmT3BlbikgcmV0dXJuOwotICAgIGZPcGVuID0gZmFsc2U7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbS5jbG9zZSgpOwotICAgIGJ5dGVbXSBidWZmZXIgPSBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtLnRvQnl0ZUFycmF5KCk7Ci0gICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gdGVtcElucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ1ZmZlcik7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShmUmVzb3VyY2VDb250ZXh0LCBmRmlsZVBhdGgsIHRlbXBJbnB1dFN0cmVhbSwgZk1vbml0b3IsIGZTdGF0dXNIYW5kbGVyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAqIEZsdXNoZXMgdGhlIHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBpbXBseSB0aGUgRmlsZSByZXNvdXJjZQotICAqIHdpbGwgYmUgY3JlYXRlZCBvciBiZWNvbWUgdmlzaWJsZSB3aXRoaW4gdGhlIHdvcmtiZW5jaC4KLSAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3Vycy4gRm9yIGV4YW1wbGUsIGlmIHRoaXMKLSAgKiBzdHJlYW0gd2FzIGNvbnN0cnVjdGVkIHdpdGggb3ZlcndyaXRlRmlsZSA9IGZhbHNlIGFuZCBhIGZpbGUgb2YgdGhlCi0gICogc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGVuIGFuIElPRXhjZXB0aW9uIG1heSBiZSB0aHJvd24gYXQKLSAgKiB0aGlzIHBvaW50LgotICAqLwotICBwdWJsaWMgdm9pZCBmbHVzaCAoKQotICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0uZmx1c2goKTsKLSAgfQotCi0gIC8qKgotICAqIFdyaXRlcyBhbGwgYnl0ZXMgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgdG8gdGhlIHN0cmVhbS4KLSAgKiBAcGFyYW0gYiBUaGUgYXJyYXkgb2YgYnl0ZXMgdG8gd3JpdGUuCi0gICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMuIEZvciBleGFtcGxlLCBpZiB0aGlzCi0gICogc3RyZWFtIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIG92ZXJ3cml0ZUZpbGUgPSBmYWxzZSBhbmQgYSBmaWxlIG9mIHRoZQotICAqIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlbiBhbiBJT0V4Y2VwdGlvbiBtYXkgYmUgdGhyb3duIGF0Ci0gICogdGhpcyBwb2ludC4KLSAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUgKCBieXRlW10gYiApCi0gIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbS53cml0ZShiKTsKLSAgfQotCi0gIC8qKgotICAqIFdyaXRlcyBieXRlcyBmcm9tIHRoZSBnaXZlbiBhcnJheSBiZWdpbm5pbmcgYXQgc29tZSBvZmZzZXQKLSAgKiBhbmQgY29udGludWluZyBmb3Igc29tZSBudW1iZXIgb2YgYnl0ZXMgKGxlbikgdG8gdGhlIHN0cmVhbS4KLSAgKiBAcGFyYW0gYiBUaGUgYXJyYXkgb2YgYnl0ZXMgdG8gd3JpdGUuCi0gICogQHBhcmFtIG9mZiBUaGUgb2Zmc2V0IGludG8gdGhlIGFycmF5IHRvIGJlZ2luIHdyaXRpbmcuCi0gICogQHBhcmFtIGxlbiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLgotICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzLiBGb3IgZXhhbXBsZSwgaWYgdGhpcwotICAqIHN0cmVhbSB3YXMgY29uc3RydWN0ZWQgd2l0aCBvdmVyd3JpdGVGaWxlID0gZmFsc2UgYW5kIGEgZmlsZSBvZiB0aGUKLSAgKiBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZW4gYW4gSU9FeGNlcHRpb24gbWF5IGJlIHRocm93biBhdAotICAqIHRoaXMgcG9pbnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlICggYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4gKQotICB7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbS53cml0ZShiLG9mZixsZW4pOwotICB9Ci0KLSAgLyoqCi0gICogV3JpdGVzIGEgc2luZ2xlIGJ5dGUgdG8gdGhlIHN0cmVhbS4KLSAgKiBAcGFyYW0gYiBUaGUgYnl0ZSB0byB3cml0ZS4KLSAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3Vycy4gRm9yIGV4YW1wbGUsIGlmIHRoaXMKLSAgKiBzdHJlYW0gd2FzIGNvbnN0cnVjdGVkIHdpdGggb3ZlcndyaXRlRmlsZSA9IGZhbHNlIGFuZCBhIGZpbGUgb2YgdGhlCi0gICogc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGVuIGFuIElPRXhjZXB0aW9uIG1heSBiZSB0aHJvd24gYXQKLSAgKiB0aGlzIHBvaW50LgotICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZSAoIGludCBiICkKLSAgewotICAgIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0ud3JpdGUoYik7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vRmlsZVJlc291cmNlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZDFiOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vRmlsZVJlc291cmNlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMTIgICAxMjExOTkgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgTfhsbGVyCi0gKiAyMDA3MDgxMyAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbjsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuRW52aXJvbm1lbnRNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLQotCi0KLS8qKgotKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHVzZWZ1bCBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggRWNsaXBzZSByZXNvdXJjZXMuCi0qLwotcHVibGljIGZpbmFsIGNsYXNzIEZpbGVSZXNvdXJjZVV0aWxzCi17Ci0gIC8vCi0gIC8vIEtlZXBzIHRoZSBJV29ya3NwYWNlIGhhbmdpbmcgYXJvdW5kLiBTZWUgZ2V0V29ya3NwYWNlKCkuCi0gIC8vCi0gIHByaXZhdGUgc3RhdGljIElXb3Jrc3BhY2Ugd29ya3NwYWNlXyA9IG51bGw7Ci0gIC8vCi0gIC8vIEtlZXBzIHRoZSBJV29ya3NwYWNlUm9vdCBoYW5naW5nIGFyb3VuZC4gU2VlIGdldFdvcmtzcGFjZVJvb3QoKS4KLSAgLy8KLSAgcHJpdmF0ZSBzdGF0aWMgSVdvcmtzcGFjZVJvb3Qgcm9vdF8gPSBudWxsOwotICAKLS8vICBwcml2YXRlIHN0YXRpYyBNZXNzYWdlVXRpbHMgbXNnXyA9IG5ldyBNZXNzYWdlVXRpbHMoICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLmVudmlyb25tZW50IiwgbmV3IEZpbGVSZXNvdXJjZVV0aWxzKCkgKTsKLQotCi0gLyoqCi0gICogUmV0dXJucyB0aGUgSVdvcmtzcGFjZVJvb3Qgb2JqZWN0LgotICAqIEByZXR1cm4gVGhlIElXb3Jrc3BhY2VSb290IG9iamVjdC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJV29ya3NwYWNlUm9vdCBnZXRXb3Jrc3BhY2VSb290ICgpCi0gIHsKLSAgICBpZiAocm9vdF8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICByb290XyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgfQotICAgIHJldHVybiByb290XzsKLSAgfQotCi0gIC8qKgotCSAqIFJldHVybnMgdGhlIElXb3Jrc3BhY2Ugb2JqZWN0LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIElXb3Jrc3BhY2Ugb2JqZWN0LgotCSAqLwotICBwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlICgpCi0gIHsKLSAgICBpZiAod29ya3NwYWNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyb290XyA9PSBudWxsKQotICAgICAgewotICAgICAgICByb290XyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHdvcmtzcGFjZV8gPSByb290Xy5nZXRXb3Jrc3BhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdvcmtzcGFjZV87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGFuIGFycmF5IG9mIHRocmVlIGNvbW1vbiBjaG9pY2VzLiAoaWUuIFllcywgeWVzIGFsbCwgYW5kIGNhbmNlbCApCi0gICAqLwotICBwdWJsaWMgc3RhdGljIENob2ljZVtdIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpIAotICB7Ci0gICAgVmVjdG9yIGNob2ljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgY2hvaWNlcy5hZGQobmV3IENob2ljZSggJ1knLCBFbnZpcm9ubWVudE1lc3NhZ2VzLkxBQkVMX1lFUykpOwotICAgIGNob2ljZXMuYWRkKG5ldyBDaG9pY2UoICdBJywgRW52aXJvbm1lbnRNZXNzYWdlcy5MQUJFTF9ZRVNfVE9fQUxMKSk7Ci0gICAgY2hvaWNlcy5hZGQobmV3IENob2ljZSggJ0MnLCBFbnZpcm9ubWVudE1lc3NhZ2VzLkxBQkVMX0NBTkNFTCkpOwotICAgIAotICAgIHJldHVybiAoQ2hvaWNlW10pY2hvaWNlcy50b0FycmF5KG5ldyBDaG9pY2VbY2hvaWNlcy5zaXplKCldKTsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyBhbgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UgSVJlc291cmNlfQotICAqIG9mIHRoZSBnaXZlbiBhYnNvbHV0ZSBwYXRobmFtZSBvciBudWxsIGlmIG5vIHN1Y2ggcmVzb3VyY2UgZXhpc3RzLgotICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGhuYW1lIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSByZXNvdXJjZS4KLSAgKiBAcmV0dXJuIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+LgotICAqLwotICBwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2UgKCBTdHJpbmcgYWJzb2x1dGVQYXRobmFtZSApCi0gIHsKLSAgICBpZiAoYWJzb2x1dGVQYXRobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmluZFJlc291cmNlKG5ldyBQYXRoKGFic29sdXRlUGF0aG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIElSZXNvdXJjZX0KLSAgKiBvZiB0aGUgZ2l2ZW4gYWJzb2x1dGUgcGF0aCBvciBudWxsIGlmIG5vIHN1Y2ggcmVzb3VyY2UgZXhpc3RzLgotICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGggVGhlIGFic29sdXRlIDxjb2RlPklQYXRoPC9jb2RlPiBvZiB0aGUgcmVzb3VyY2UuCi0gICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJUmVzb3VyY2UgZmluZFJlc291cmNlICggSVBhdGggYWJzb2x1dGVQYXRoICkKLSAgewotICAgIGlmIChhYnNvbHV0ZVBhdGggPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEZpbGVSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGFic29sdXRlUGF0aCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb3BpZXMgYSBmaWxlIGZyb20gYSBwbHVnaW4ncyBpbnN0YWxsYXRpb24gbG9jYXRpb24KLSAgICogdG8gYW4gRWNsaXBzZSBmb2xkZXIuCi0gICAqIEBwYXJhbSBwbHVnaW4gVGhlIHBsdWdpbiBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LgotICAgKiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gc291cmNlUGF0aCBUaGUgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIDxjb2RlPnBsdWdpbjwvY29kZT4KLSAgICogaW5zdGFsbCBsb2NhdGlvbiwgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4KLSAgICogSWYgbnVsbCwgdGhlbiB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24gaXMgdGhlIHNvdXJjZSBwYXRoCi0gICAqIChpZS4gbnVsbCBpcyBlcXVpdmFsZW50IHRvICIuIikuCi0gICAqIEBwYXJhbSBwYXRobmFtZSBUaGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gY29weS4KLSAgICogVGhlIHBhdGhuYW1lIGlzIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT5wbHVnaW4gc291cmNlUGF0aDwvY29kZT4uCi0gICAqIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEBwYXJhbSB0YXJnZXRQYXRoIFRoZSBhYnNvbHV0ZSBFY2xpcHNlIHBhdGggb2YgdGhlIGZvbGRlciB0bwotICAgKiB3aGljaCB0aGUgZmlsZSB3aWxsIGJlIGNvcGllZC4gVGhlIHJlbGF0aXZlIHBhdGhuYW1lIG9mIHRoZQotICAgKiBmaWxlIGlzIHByZXNlcnZlZC4KLSAgICogTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHBhcmFtIGNyZWF0ZUZvbGRlcnMgVGhlIGludGVybWVkaWF0ZSBmb2xkZXIgY3JlYXRpb24gcG9saWN5LCBvbmUgb2YKLSAgICoge0BsaW5rICNDUkVBVEUgQ1JFQVRFfSBvciB7QGxpbmsgI0RPTlRfQ1JFQVRFIERPTlRfQ1JFQVRFfS4KLSAgICogPHVsPgotICAgKiA8bGk+PGNvZGU+Q1JFQVRFPC9jb2RlPiAtCi0gICAqIElmIGFueSBpbnRlcm1lZGlhdGUgZm9sZGVycyBpbiB0aGUgZ2l2ZW4gPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPgotICAgKiBkbyBub3QgZXhpc3QsIHRoZXkgd2lsbCBiZSBjcmVhdGVkLgotICAgKiA8bGk+PGNvZGU+RE9OVF9DUkVBVEU8L2NvZGU+IC0KLSAgICogSWYgYW55IGludGVybWVkaWF0ZSBmb2xkZXJzIGluIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICAqIGRvIG5vdCBleGlzdCwgdGhlIG1ldGhvZCB3aWxsIHRocm93IGEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4uCi0gICAqIDwvdWw+Ci0gICAqIEBwYXJhbSBvdmVyd3JpdGVGaWxlIFRoZSBwb2xpY3kgZm9yIGV4aXN0aW5nIGZpbGVzLCBvbmUgb2YKLSAgICoge0BsaW5rICNPVkVSV1JJVEUgT1ZFUldSSVRFfSBvciB7QGxpbmsgI0RPTlRfT1ZFUldSSVRFIERPTlRfT1ZFUldSSVRFfS4KLSAgICogPHVsPgotICAgKiA8bGk+PGNvZGU+T1ZFUldSSVRFPC9jb2RlPiAtCi0gICAqIElmIGEgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2l2ZW4KLSAgICogPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBmaWxlLAotICAgKiBpdCB3aWxsIGJlIHJlcGxhY2VkLgotICAgKiBJZiB0aGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgYW5kIGl0IGlzIG5vdCBhIGZpbGUsCi0gICAqIHRoZW4gbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kCi0gICAqIGEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gd2lsbCBiZSB0aHJvd24uCi0gICAqIDxsaT48Y29kZT5ET05UX09WRVJXUklURTwvY29kZT4gLQotICAgKiBJZiBhbnkgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2l2ZW4KLSAgICogPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBhbHJlYWR5IGV4aXN0cywKLSAgICogdGhlbiBubyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhbmQKLSAgICogYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiB3aWxsIGJlIHRocm93bi4KLSAgICogPC91bD4KLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgICogQHRocm93cyBDb3JlRXhjZXB0aW9uIEFuIGV4Y2VwdGlvbiBjb250YWluaW5nIGFuCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotICAgKiB3aXRoIGEgc2V2ZXJpdHkgb2YgPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4gYW5kIGEKLSAgICogbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZS4KLSAgICovCi0gICBzdGF0aWMgcHVibGljIHZvaWQgY29weUZpbGUoIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsdWdpbiBwbHVnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQYXRoIHNvdXJjZVBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQYXRoIHBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUGF0aCB0YXJnZXRQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0YXR1c0hhbmRsZXIgc3RhdHVzTW9uaXRvciApCi0gICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICB7Ci0gICAgIHRyeQotICAgICB7Ci0gICAgICAgSVBhdGggdGFyZ2V0ID0gdGFyZ2V0UGF0aC5hcHBlbmQocGF0aG5hbWUpOwotICAgICAgIElQYXRoIHNvdXJjZSA9IHNvdXJjZVBhdGggPT0gbnVsbCA/IHBhdGhuYW1lIDogc291cmNlUGF0aC5hcHBlbmQocGF0aG5hbWUpOwotICAgICAgIElucHV0U3RyZWFtIGlucHV0ID0gcGx1Z2luLm9wZW5TdHJlYW0oc291cmNlKTsKLSAgICAgICBjcmVhdGVGaWxlKHJlc291cmNlQ29udGV4dCwgdGFyZ2V0LCBpbnB1dCwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgICAgfQotICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgewotICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9JTyxlKSk7Ci0gICAgIH0KLSAgIH0KLSAgIAotICAvKioKLSAgICogRGVsZXRlcyBhIGZpbGUgdW5kZXIgYSBjb250YWluZXIuCi0gICAqIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotICAgKiBAcGFyYW0gZmlsZSAtIHRoZSBJRmlsZSB0byBiZSBkZWxldGVkCi0gICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLSAgICogQHBhcmFtIHN0YXR1c01vbml0b3IKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlmIGl0IGV4aXN0cyBhbmQgaXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuIEZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVGaWxlKCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElGaWxlIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU3RhdHVzSGFuZGxlciBzdGF0dXNNb25pdG9yKQotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoZmlsZS5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyAKLSAgICAgICAgICA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IGZpbGUuZ2V0UGFyZW50KCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuZ2V0TmFtZSgpfSkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIENob2ljZSBjaG9pY2UgPSBzdGF0dXNNb25pdG9yLnJlcG9ydCggc3RhdHVzLCBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSApOwotICAgICAgICAKLSAgICAgICAgaWYoIGNob2ljZS5nZXRTaG9ydGN1dCgpID09ICdDJyApIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBjaG9pY2UuZ2V0U2hvcnRjdXQoKSA9PSAnQScgKSByZXNvdXJjZUNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgfQotICAgICAgCi0gICAgICAvL1dlIGhhdmUgcGVybWlzc2lvbiB0byBvdmVyd3JpdGUgc28gY2hlY2sgaWYgZmlsZSBpcyByZWFkLW9ubHkKLSAgICAgIGlmIChmaWxlLmlzUmVhZE9ubHkoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSVN0YXR1cyBzdGF0dXMgCi0gICAgICAgICAgICA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeyBmaWxlLmdldFBhcmVudCgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuZ2V0TmFtZSgpfSkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBDaG9pY2UgY2hvaWNlID0gc3RhdHVzTW9uaXRvci5yZXBvcnQoIHN0YXR1cywgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggY2hvaWNlLmdldFNob3J0Y3V0KCkgPT0gJ0MnICkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBjaG9pY2UuZ2V0U2hvcnRjdXQoKSA9PSAnQScgKSByZXNvdXJjZUNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBJRmlsZVtdIGZpbGVzID0gbmV3IElGaWxlWzFdOwotICAgICAgICBmaWxlc1swXSA9IGZpbGU7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gZ2V0V29ya3NwYWNlKCkudmFsaWRhdGVFZGl0KGZpbGVzLCBudWxsKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c01vbml0b3IucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBmaWxlLmRlbGV0ZSh0cnVlLCBudWxsKTsKLSAgICB9Ci0gICAgLy9BdCB0aGlzIHBvaW50LCBlaXRoZXIgdGhlIGZpbGUgZGlkIG5vdCBleGlzdCBvciB3ZSBzdWNjZXNzZnVsbHkgZGVsZXRlZAotICAgIC8vIGl0LiBSZXR1cm4gc3VjY2Vzcy4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWxldGVzIGEgZm9sZGVyIHVuZGVyIGEgY29udGFpbmVyLgotICAgKiBAcGFyYW0gZm9sZGVyIC0gdGhlIElGb2xkZXIgdG8gYmUgZGVsZXRlZAotICAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0gICAqIEBwYXJhbSBzdGF0dXNNb25pdG9yCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZm9sZGVyIGRvZXMgbm90IGV4aXN0IG9yIGlmIGl0IGV4aXN0cyBhbmQgaXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgYWxvbmcgd2l0aCBpdHMgbWVtYmVycy4gRmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVGb2xkZXIoIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRm9sZGVyIGZvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0YXR1c0hhbmRsZXIgc3RhdHVzTW9uaXRvciApCi0gICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICB7Ci0gICAgIGlmICghZm9sZGVyLmV4aXN0cygpKSByZXR1cm4gdHJ1ZTsKLQotICAgICBib29sZWFuICAgICBkZWxldGVkICAgPSB0cnVlOwotICAgICBJUmVzb3VyY2VbXSByZXNvdXJjZXMgPSBmb2xkZXIubWVtYmVycygpOwotICAgICAKLSAgICAgZm9yIChpbnQgaT0wOyBpPHJlc291cmNlcy5sZW5ndGg7IGkrKykKLSAgICAgewotICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKLSAgICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgICB7Ci0gICAgICAgICBkZWxldGVkID0gZGVsZXRlRmlsZShyZXNvdXJjZUNvbnRleHQsIChJRmlsZSlyZXNvdXJjZSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgICAgICB9Ci0gICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlcikKLSAgICAgICB7Ci0gICAgICAgICBkZWxldGVkID0gZGVsZXRlRm9sZGVyKCByZXNvdXJjZUNvbnRleHQsIChJRm9sZGVyKXJlc291cmNlLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotICAgICAgIH0KLQotICAgICAgIGlmKCAhZGVsZXRlZCApIGJyZWFrOwotICAgICB9Ci0gICAgIAotICAgICBpZiggZGVsZXRlZCApCi0gICAgIHsKLSAgICAgICBmb2xkZXIuZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotICAgICAgIHJldHVybiB0cnVlOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgICByZXR1cm4gZmFsc2U7Ci0gICB9Ci0KLSAgLyoqCi0gICogQ3JlYXRlcyBhIGZpbGUgb2YgdGhlIGdpdmVuIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4KLSAgKiBhbmQgcmV0dXJucyBpdHMgaGFuZGxlIGFzIGFuIDxjb2RlPklGaWxlPC9jb2RlPi4KLSAgKiBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgY3JlYXRlZCwgYQotICAqIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IGNvbnRhaW5pbmcgYW4KLSAgKiA8Y29kZT5JU3RhdHVzPC9jb2RlPiBvYmplY3QgaXMgdGhyb3duLgotICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGggVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLgotICAqIFRoZSBwcm9qZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGggbXVzdCBhbHJlYWR5IGV4aXN0LAotICAqIHRoYXQgaXMsIHRoaXMgbWV0aG9kIGNhbm5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBwcm9qZWN0cy4KLSAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotICAqIEByZXR1cm4gVGhlIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSBJRmlsZX0KLSAgKiBoYW5kbGUgb2YgdGhlIGZpbGUuCi0gICogQHRocm93cyBDb3JlRXhjZXB0aW9uIEFuIGV4Y2VwdGlvbiBjb250YWluaW5nIGFuCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIElTdGF0dXN9Ci0gICogd2l0aCBhIHNldmVyaXR5IG9mIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+IGFuZCBhCi0gICogbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJRmlsZSBjcmVhdGVGaWxlICgKLSAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotICAgIElQYXRoICAgICAgICAgICBhYnNvbHV0ZVBhdGgsCi0gICAgSW5wdXRTdHJlYW0gICAgIGlucHV0U3RyZWFtLAotICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgIElTdGF0dXNIYW5kbGVyICAgc3RhdHVzSGFuZGxlciApCi0KLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAKLSAgeyAgICAKLSAgICBpZiAoIWFic29sdXRlUGF0aC5pc0Fic29sdXRlKCkpCi0gICAgewotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCAiUmVzb3VyY2VVdGlscyIsMCxOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9QQVRIX05PVF9BQlNPTFVURSxuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgIH0KLSAgICBpZiAoYWJzb2x1dGVQYXRoLnNlZ21lbnRDb3VudCgpIDwgMSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIlJlc291cmNlVXRpbHMiLDAsTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUEFUSF9FTVBUWSxuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgIH0KLSAgICBpZiAoYWJzb2x1dGVQYXRoLnNlZ21lbnRDb3VudCgpIDwgMikKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIlJlc291cmNlVXRpbHMiLDAsTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUEFUSF9OT1RfRk9MREVSLG5ldyBPYmplY3RbXSB7YWJzb2x1dGVQYXRoLnRvU3RyaW5nKCl9KSxudWxsKSk7Ci0gICAgfQotICAgIElDb250YWluZXIgcGFyZW50ICAgPSBtYWtlRm9sZGVyUGF0aChyZXNvdXJjZUNvbnRleHQsIGFic29sdXRlUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSksIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlcik7Ci0gICAgU3RyaW5nICAgICBmaWxlTmFtZSA9IGFic29sdXRlUGF0aC5sYXN0U2VnbWVudCgpOwotICAgIAotICAgIHJldHVybiBtYWtlRmlsZShyZXNvdXJjZUNvbnRleHQsIHBhcmVudCwgZmlsZU5hbWUsIGlucHV0U3RyZWFtLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICB9Ci0KLSAgLyoqCi0gICogQ3JlYXRlcyB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4KLSAgKiBhIGZpbGUgb2YgdGhlIGdpdmVuIDxjb2RlPnJlbGF0aXZlUGF0aDwvY29kZT4KLSAgKiBhbmQgcmV0dXJucyBpdHMgaGFuZGxlIGFzIGFuIDxjb2RlPklGaWxlPC9jb2RlPi4KLSAgKiBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgY3JlYXRlZCwgYQotICAqIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IGNvbnRhaW5pbmcgYW4KLSAgKiA8Y29kZT5JU3RhdHVzPC9jb2RlPiBvYmplY3QgaXMgdGhyb3duLgotICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGggVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLgotICAqIFRoZSBwcm9qZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGggbXVzdCBhbHJlYWR5IGV4aXN0LAotICAqIHRoYXQgaXMsIHRoaXMgbWV0aG9kIGNhbm5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBwcm9qZWN0cy4KLSAgKiBAcGFyYW0gY3JlYXRlRm9sZGVycyBUaGUgaW50ZXJtZWRpYXRlIGZvbGRlciBjcmVhdGlvbiBwb2xpY3ksIG9uZSBvZgotICAqIHtAbGluayAjQ1JFQVRFIENSRUFURX0gb3Ige0BsaW5rICNET05UX0NSRUFURSBET05UX0NSRUFURX0uCi0gICogPHVsPgotICAqIDxsaT48Y29kZT5DUkVBVEU8L2NvZGU+IC0KLSAgKiBJZiBhbnkgaW50ZXJtZWRpYXRlIGZvbGRlcnMgaW4gdGhlIGdpdmVuIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4KLSAgKiBkbyBub3QgZXhpc3QsIHRoZXkgd2lsbCBiZSBjcmVhdGVkLgotICAqIDxsaT48Y29kZT5ET05UX0NSRUFURTwvY29kZT4gLQotICAqIElmIGFueSBpbnRlcm1lZGlhdGUgZm9sZGVycyBpbiB0aGUgZ2l2ZW4gPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPgotICAqIGRvIG5vdCBleGlzdCwgdGhlIG1ldGhvZCB3aWxsIHRocm93IGEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4uCi0gICogPC91bD4KLSAgKiBAcGFyYW0gb3ZlcndyaXRlRmlsZSBUaGUgcG9saWN5IGZvciBleGlzdGluZyBmaWxlcywgb25lIG9mCi0gICoge0BsaW5rICNPVkVSV1JJVEUgT1ZFUldSSVRFfSBvciB7QGxpbmsgI0RPTlRfT1ZFUldSSVRFIERPTlRfT1ZFUldSSVRFfS4KLSAgKiA8dWw+Ci0gICogPGxpPjxjb2RlPk9WRVJXUklURTwvY29kZT4gLQotICAqIElmIGEgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2l2ZW4KLSAgKiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhIGZpbGUsCi0gICogaXQgd2lsbCBiZSByZXBsYWNlZC4KLSAgKiBJZiB0aGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgYW5kIGl0IGlzIG5vdCBhIGZpbGUsCi0gICogdGhlbiBubyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhbmQKLSAgKiBhIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IHdpbGwgYmUgdGhyb3duLgotICAqIDxsaT48Y29kZT5ET05UX09WRVJXUklURTwvY29kZT4gLQotICAqIElmIGFueSByZXNvdXJjZSBvZiB0aGUgc2FtZSBuYW1lIGFzIHRoZSBnaXZlbgotICAqIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4gYWxyZWFkeSBleGlzdHMsCi0gICogdGhlbiBubyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhbmQKLSAgKiBhIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IHdpbGwgYmUgdGhyb3duLgotICAqIDwvdWw+Ci0gICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgKiBAcmV0dXJuIFRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUgSUZpbGV9Ci0gICogaGFuZGxlIG9mIHRoZSBmaWxlLgotICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBBbiBleGNlcHRpb24gY29udGFpbmluZyBhbgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotICAqIHdpdGggYSBzZXZlcml0eSBvZiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPiBhbmQgYQotICAqIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2UuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgSUZpbGUgY3JlYXRlRmlsZSAoCi0gICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLSAgICBJUHJvamVjdCAgICAgICAgcHJvamVjdCwKLSAgICBJUGF0aCAgICAgICAgICAgcmVsYXRpdmVQYXRoLAotICAgIElucHV0U3RyZWFtICAgICBpbnB1dFN0cmVhbSwKLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICBJU3RhdHVzSGFuZGxlciAgIHN0YXR1c01vbml0b3IgKQotIAotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uIAotICB7Ci0gICAgSVBhdGggYWJzb2x1dGVQYXRoID0gcHJvamVjdC5nZXRGdWxsUGF0aCgpLmFwcGVuZChyZWxhdGl2ZVBhdGgpOwotICAgIHJldHVybiBjcmVhdGVGaWxlKHJlc291cmNlQ29udGV4dCwgYWJzb2x1dGVQYXRoLCBpbnB1dFN0cmVhbSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgfQotCi0gIC8qKgotICAqIENyZWF0ZXMgYW4gb3V0cHV0IHN0cmVhbSB0aGF0IGNhbiBiZSB1c2VkIHRvIHdyaXRlIHRvIHRoZQotICAqIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+LiBBY3R1YWwgY2hhbmdlcyB0byB0aGUgd29ya3NwYWNlCi0gICogbWF5IG9jY3VyIGR1cmluZyBjcmVhdGlvbiBvZiB0aGUgc3RyZWFtLCB3aGlsZSB3cml0aW5nIHRvCi0gICogdGhlIHN0cmVhbSwgb3Igd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4KLSAgKiBBIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IGNvbnRhaW5pbmcKLSAgKiBhbiA8Y29kZT5JU3RhdHVzPC9jb2RlPiB3aWxsIGJlIHRocm93bgotICAqIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGxpZmVjeWNsZSBvZiB0aGUgc3RyZWFtCi0gICogaWYgdGhlIGZpbGUgcmVzb3VyY2UgY2Fubm90IGJlIGNyZWF0ZWQuCi0gICogQHBhcmFtIGZpbGUgVGhlIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSBJRmlsZX0KLSAgKiBoYW5kbGUgb2YgdGhlIGZpbGUgcmVzb3VyY2UgdG8gY3JlYXRlLiBUaGUgcHJvamVjdCBpbXBsaWVkIGJ5IHRoZQotICAqIHBhdGhuYW1lIG9mIHRoZSBmaWxlIG11c3QgYWxyZWFkeSBleGlzdCwKLSAgKiB0aGF0IGlzLCB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byBjcmVhdGUgcHJvamVjdHMuCi0gICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgKiBAcmV0dXJuIEFuIDxjb2RlPk91dHB1dFN0cmVhbTwvY29kZT4gdGllZCB0byB0aGUgZmlsZSByZXNvdXJjZS4KLSAgKiBBY3R1YWwgY2hlY2tzIG9mIG9yIGNoYW5nZXMgdG8gdGhlIHdvcmtzcGFjZSBtYXkgb2NjdXIgYXMgZWFybHkgZHVyaW5nCi0gICogc3RyZWFtIGNyZWF0aW9uLCBjbG9zdXJlLCBvciBhbnkgdGltZSBpbiBiZXR3ZWVuLgotICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBBbiBleGNlcHRpb24gY29udGFpbmluZyBhbgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotICAqIHdpdGggYSBzZXZlcml0eSBvZiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPiBhbmQgYQotICAqIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2UuCi0gICogUmVhc29ucyBpbmNsdWRlOgotICAqIDxvbD4KLSAgKiA8bGk+VGhlIHByb2plY3Qgb2YgdGhlIGdpdmVuIGZpbGUncyBwYXRoIGRvZXMgbm90IGV4aXN0LgotICAqIDxsaT5BIG5vbi1maWxlIHJlc291cmNlIG9mIHRoZSBzYW1lIG5hbWUgb2YgdGhlIGdpdmVuIGZpbGUKLSAgKiBhbHJlYWR5IGV4aXN0cy4KLSAgKiA8bGk+QSBmaWxlIHJlc291cmNlIG9mIHRoZSBzYW1lIG5hbWUgb2YgdGhlIGdpdmVuIGZpbGUKLSAgKiBhbHJlYWR5IGV4aXN0cywgYW5kIDxjb2RlPm92ZXJ3cml0ZUZpbGU8L2NvZGU+IGlzIGZhbHNlLgotICAqIDxsaT5PbmUgb3IgbW9yZSBpbnRlcm1lZGlhdGUgZm9sZGVycyB0byB0aGUgZ2l2ZW4gZmlsZQotICAqIGRvIG5vdCBleGlzdCwgYW5kIDxjb2RlPmNyZWF0ZUZvbGRlcnM8L2NvZGU+IGlzIGZhbHNlLgotICAqIDwvb2w+Ci0gICovCi0KLSAgcHVibGljIHN0YXRpYyBPdXRwdXRTdHJlYW0gbmV3RmlsZU91dHB1dFN0cmVhbSAoCi0gICAgICAgUmVzb3VyY2VDb250ZXh0ICBjb250ZXh0LAotICAgICAgIElQYXRoICAgICAgICAgICAgZmlsZSwKLSAgICAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICAgICBJU3RhdHVzSGFuZGxlciAgICBzdGF0dXNIYW5kbGVyICkKLSAKLSAgewotICAgIHJldHVybiBuZXcgRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtKGNvbnRleHQsIGZpbGUsIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlcik7Ci0gIH0KLQotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gTmF1Z2h0eSBiaXRzLi4uCi0gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vCi0gIC8vIENyZWF0ZXMgYSBwYXRoIG9mIGZvbGRlcnMuCi0gIC8vIERvIG5vdCBjYWxsIHdpdGggYW4gYWJzb2x1dGVQYXRoIG9mIGxlc3MgdGhhbiBvbmUgc2VnbWVudC4KLSAgLy8KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBwYXRoIG9mIGZvbGRlcnMuCi0gICAqIERvIG5vdCBjYWxsIHdpdGggYW4gYWJzb2x1dGVQYXRoIG9mIGxlc3MgdGhhbiBvbmUgc2VnbWVudC4KLSAgICogQHBhcmFtIHJlc291cmNlQ29udGV4dCB0aGUgcmVzb3VyY2UgY29udGV4dCBmb3IgbWFraW5nIGZvbGRlcnMuCi0gICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGggdGhlIHBhdGggb2YgZm9sZGVycyB0aGF0IHdpbGwgYmUgY3JlYXRlZC4KLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciB0aGUgcHJvZ3Jlc3MgbW9uaXRvciB0byBiZSB1c2VkLgotICAgKiBAcGFyYW0gc3RhdHVzSGFuZGxlciB0aGUgc3RhdHVzIGhhbmRsZXIuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgSUNvbnRhaW5lciBvZiB0aGUgY3JlYXRlZCBmb2xkZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElDb250YWluZXIgbWFrZUZvbGRlclBhdGggKAotICAgIFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0LAotICAgIElQYXRoICAgICAgICAgICAgYWJzb2x1dGVQYXRoLAotICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgIElTdGF0dXNIYW5kbGVyICAgIHN0YXR1c0hhbmRsZXIgKQotICAKLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8PSAxKQotICAgIHsKLSAgICAgIHJldHVybiBnZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChhYnNvbHV0ZVBhdGguc2VnbWVudCgwKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBJQ29udGFpbmVyIHBhcmVudCA9IG1ha2VGb2xkZXJQYXRoKHJlc291cmNlQ29udGV4dCwgYWJzb2x1dGVQYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyICk7Ci0gICAgICBTdHJpbmcgZm9sZGVyTmFtZSA9IGFic29sdXRlUGF0aC5sYXN0U2VnbWVudCgpOwotICAgICAgCi0gICAgICBjaGVja1BhcmVudCggcGFyZW50LCBhYnNvbHV0ZVBhdGggKTsKLSAgICAgIHJldHVybiBtYWtlRm9sZGVyKHJlc291cmNlQ29udGV4dCwgcGFyZW50LGZvbGRlck5hbWUsIHByb2dyZXNzTW9uaXRvciAsIHN0YXR1c0hhbmRsZXIgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tQYXJlbnQoIElDb250YWluZXIgcGFyZW50LCBJUGF0aCBhYnNvbHV0ZVBhdGggKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgaWYoIHBhcmVudCA9PSBudWxsICkKLSAgICB7Ci0gICAgICAvLyBUaGUgcGFyZW50IGlzIG51bGwsIHNvIHRoZXJlIG11c3QgaGF2ZSBiZWVuIHByb2JsZW1zIGNyZWF0aW5nIGl0LiAgV2Ugd2lsbCB0aHJvdwotICAgICAgLy8gYSBDb3JlRXhjZXB0aW9uIHdhcm5pbmcgZm9yIHRoaXMgcHJvYmxlbS4KLSAgICAgIElQYXRoICBwYXJlbnRQYXRoID0gYWJzb2x1dGVQYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKTsKLSAgICAgIFN0cmluZyBmb2xkZXJQYXRoID0gYWJzb2x1dGVQYXRoLmxhc3RTZWdtZW50KCk7Ci0gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbiggU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9GT0xERVJfQ1JFQVRJT05fRElTQUJMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeyBwYXJlbnRQYXRoLnRvU3RyaW5nKCksIGZvbGRlclBhdGh9ICkgKSApOwotICAgIH0gIAotICB9Ci0gIAotICAvLwotICAvLyBDcmVhdGVzIGEgZm9sZGVyIHVuZGVyIGEgY29udGFpbmVyLgotICAvLyBUaGUgY29udGFpbmVyIG11c3QgYWxyZWFkeSBleGlzdC4KLSAgLy8KLSBwcml2YXRlIHN0YXRpYyBJRm9sZGVyIG1ha2VGb2xkZXIgKAotICAgIFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0LAotICAgIElDb250YWluZXIgICAgICAgcGFyZW50LAotICAgIFN0cmluZyAgICAgICAgICAgZm9sZGVyTmFtZSwKLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICBJU3RhdHVzSGFuZGxlciAgICBzdGF0dXNIYW5kbGVyICkKLSAgCi0gIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBJUmVzb3VyY2UgY2hpbGQgID0gcGFyZW50LmZpbmRNZW1iZXIoZm9sZGVyTmFtZSk7Ci0gICAgQ2hvaWNlICAgIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYoIGNoaWxkID09IG51bGwgKQotICAgIHsKLSAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSkgIAotICAgICAgewotICAgICAgICByZXN1bHQgPSBzdGF0dXNIYW5kbGVyLnJlcG9ydCgKLSAgICAgICAgICAgICAgICBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKAotICAgICAgICAgICAgICAgIAkJTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfRk9MREVSX0NSRUFUSU9OX0RJU0FCTEVELAotICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsgcGFyZW50LmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgZm9sZGVyTmFtZX0gKSApLCAKLSAgICAgICAgICAgICAgICBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSApOwotICAgICAgICAKLSAgICAgICAgaWYoIHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5nZXRTaG9ydGN1dCgpID09ICdDJyApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCByZXN1bHQuZ2V0U2hvcnRjdXQoKSA9PSAnQScgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb3VyY2VDb250ZXh0LnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKHRydWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElGb2xkZXIgZm9sZGVyID0gcGFyZW50LmdldEZvbGRlcihuZXcgUGF0aChmb2xkZXJOYW1lKSk7Ci0gICAgICBmb2xkZXIuY3JlYXRlKHRydWUsdHJ1ZSxudWxsKTsKLSAgICAgIHJldHVybiBmb2xkZXI7Ci0gICAgfQotICAgIGVsc2UgaWYoIGNoaWxkLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRk9MREVSICkKLSAgICB7Ci0gICAgICByZXR1cm4gKElGb2xkZXIpY2hpbGQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbigKLSAgICAgICAgbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgCi0gICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZVV0aWxzIiwKLSAgICAgICAgICAgICAgICAgICAgMCwgCi0gICAgICAgICAgICAgICAgICAgIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GT0xERVIsCi0JCQkJCSAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeyBwYXJlbnQuZ2V0RnVsbFBhdGgoKS5hcHBlbmQoZm9sZGVyTmFtZSkudG9TdHJpbmcoKSB9KSwKLQkJCW51bGwgKSApOwotICAgIH0KLSAgfQotCi0gIC8vCi0gIC8vIENyZWF0ZXMgYSBmaWxlIHVuZGVyIGEgY29udGFpbmVyLgotICAvLyBUaGUgY29udGFpbmVyIG11c3QgYWxyZWFkeSBleGlzdC4KLSAgLy8KLSBwcml2YXRlIHN0YXRpYyBJRmlsZSBtYWtlRmlsZSAoCi0gICAgUmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQsCi0gICAgSUNvbnRhaW5lciAgICAgICBwYXJlbnQsCi0gICAgU3RyaW5nICAgICAgICAgICBmaWxlTmFtZSwKLSAgICBJbnB1dFN0cmVhbSAgICAgIGlucHV0U3RyZWFtLAotICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgIElTdGF0dXNIYW5kbGVyICAgIHN0YXR1c0hhbmRsZXIgKQotIAotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBJUmVzb3VyY2UgY2hpbGQgID0gcGFyZW50LmZpbmRNZW1iZXIoZmlsZU5hbWUpOwotICAgIENob2ljZSAgICByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBjaGlsZCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBpZiggY2hpbGQuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFICkKLSAgICAgIHsKLSAgICAgICAgaWYoICFyZXNvdXJjZUNvbnRleHQuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSApICAgCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBzdGF0dXNIYW5kbGVyLnJlcG9ydCggCi0gICAgICAgICAgICAgICAgU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfRklMRV9PVkVSV1JJVEVfRElTQUJMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZpbGVOYW1lfSkgKSwJCQkJCSAgCQkgICAgCi0gICAgICAgICAgICAgICAgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggcmVzdWx0ID09IG51bGwgfHwgcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0MnICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiggcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0EnICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQkKLSAgICAgICAgCi0gICAgICAgIC8vV2UgaGF2ZSBwZXJtaXNzaW9uIHRvIG92ZXJ3cml0ZSBzbyBjaGVjayBpZiBmaWxlIGlzIHJlYWQtb25seQotICAgICAgICBpZiggY2hpbGQuZ2V0UmVzb3VyY2VBdHRyaWJ1dGVzKCkuaXNSZWFkT25seSgpICkKLSAgICAgICAgewotICAgICAgICAgIGlmKCAhcmVzb3VyY2VDb250ZXh0LmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSApIAotICAgICAgICAgIHsgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXR1c0hhbmRsZXIucmVwb3J0KCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeyBwYXJlbnQuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZpbGVOYW1lfSApICksIAotICAgICAgICAgICAgICAgICAgICAgICAgIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpICk7Ci0gICAgICAgICAgICAKLQkJICAgIGlmKCByZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQuZ2V0U2hvcnRjdXQoKSA9PSAnQycgKQotCQkgICAgewotICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkJICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoIHJlc3VsdC5nZXRTaG9ydGN1dCgpID09ICdBJyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBJRmlsZVtdIGZpbGVzID0gbmV3IElGaWxlWzFdOwotICAgICAgICAgIGZpbGVzWzBdID0gKElGaWxlKWNoaWxkOwotICAgICAgICAgIAotICAgICAgICAgIElTdGF0dXMgc3RhdHVzID0gZ2V0V29ya3NwYWNlKCkudmFsaWRhdGVFZGl0KGZpbGVzLG51bGwpOwotICAgICAgICAgIAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHN0YXR1c0hhbmRsZXIucmVwb3J0KCBzdGF0dXMgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goIFN0YXR1c0V4Y2VwdGlvbiBleGMgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vQ2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgZXhpc3RpbmcgZmlsZS4KLSAgICAgICAgSUZpbGUgZmlsZSA9IHBhcmVudC5nZXRGaWxlKCBuZXcgUGF0aChmaWxlTmFtZSkgKTsKLSAgICAgICAgZmlsZS5zZXRDb250ZW50cyggaW5wdXRTdHJlYW0sIHRydWUsIHRydWUsIG51bGwgKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmaWxlOwotICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKCAKLSAgICAgICAgICBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZVV0aWxzIiwKLSAgICAgICAgICAgICAgICAgICAgICAwLCAKLSAgICAgICAgICAgICAgICAgICAgICBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9SRVNPVVJDRV9OT1RfRklMRSwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7cGFyZW50LmdldEZ1bGxQYXRoKCkuYXBwZW5kKGZpbGVOYW1lKX0pLAotCQkJCQkgIG51bGwgKSApOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy9DcmVhdGUgYSBuZXcgZmlsZS4KLSAgICAgIElGaWxlIGZpbGUgPSBwYXJlbnQuZ2V0RmlsZSggbmV3IFBhdGgoZmlsZU5hbWUpICk7Ci0gICAgICBmaWxlLmNyZWF0ZSggaW5wdXRTdHJlYW0sIHRydWUsIG51bGwpOwotICAgICAgCi0gICAgICByZXR1cm4gZmlsZTsKLSAgICB9Ci0gIH0KLQotIAotIC8qKgotICAgKiBDcmVhdGVzIGEgZmlsZSBvZiB0aGUgZ2l2ZW4gPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPgotICAgKiBhbmQgcmV0dXJucyBpdHMgaGFuZGxlIGFzIGFuIDxjb2RlPklGaWxlPC9jb2RlPi4KLSAgICogSWYgdGhlIGZpbGUgY2Fubm90IGJlIGNyZWF0ZWQsIGEKLSAgICogPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gY29udGFpbmluZyBhbgotICAgKiA8Y29kZT5JU3RhdHVzPC9jb2RlPiBvYmplY3QgaXMgdGhyb3duLgotICAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS4KLSAgICogVGhlIHByb2plY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCBtdXN0IGFscmVhZHkgZXhpc3QsCi0gICAqIHRoYXQgaXMsIHRoaXMgbWV0aG9kIGNhbm5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBwcm9qZWN0cy4KLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgICogQHJldHVybiBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfQotICAgKiBoYW5kbGUgb2YgdGhlIGZpbGUuCi0gICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBBbiBleGNlcHRpb24gY29udGFpbmluZyBhbgotICAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgSVN0YXR1c30KLSAgICogd2l0aCBhIHNldmVyaXR5IG9mIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+IGFuZCBhCi0gICAqIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2UuCi0gICAqLwotICAgcHVibGljIHN0YXRpYyBJRmlsZSBjcmVhdGVGaWxlQXRMb2NhdGlvbiAoCi0gICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0gICAgIElQYXRoICAgICAgICAgICBhYnNvbHV0ZVBhdGgsCi0gICAgIElucHV0U3RyZWFtICAgICBpbnB1dFN0cmVhbSwKLSAgICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgIElTdGF0dXNIYW5kbGVyICAgc3RhdHVzSGFuZGxlciApCi0KLSAgICAgdGhyb3dzIENvcmVFeGNlcHRpb24gCi0gICB7ICAgIAotICAgICBpZiAoIWFic29sdXRlUGF0aC5pc0Fic29sdXRlKCkpCi0gICAgIHsKLSAgICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsICJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfTk9UX0FCU09MVVRFLG5ldyBPYmplY3RbXSB7YWJzb2x1dGVQYXRoLnRvU3RyaW5nKCl9KSxudWxsKSk7Ci0gICAgIH0KLSAgICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8IDEpCi0gICAgIHsKLSAgICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIlJlc291cmNlVXRpbHMiLDAsTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUEFUSF9FTVBUWSxuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgICB9Ci0gICAgIGlmIChhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCkgPCAyKQotICAgICB7Ci0gICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfTk9UX0ZPTERFUixuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgICB9Ci0gICAgIElDb250YWluZXIgcGFyZW50ICAgPSBtYWtlRm9sZGVyUGF0aEF0TG9jYXRpb24ocmVzb3VyY2VDb250ZXh0LCBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICAgICBTdHJpbmcgICAgIGZpbGVOYW1lID0gYWJzb2x1dGVQYXRoLmxhc3RTZWdtZW50KCk7Ci0gICAgIAotICAgICBjaGVja1BhcmVudCggcGFyZW50LCBhYnNvbHV0ZVBhdGggKTsKLSAgICAgCi0gICAgIHJldHVybiBtYWtlRmlsZShyZXNvdXJjZUNvbnRleHQsIHBhcmVudCwgZmlsZU5hbWUsIGlucHV0U3RyZWFtLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICAgfQotCi0vKioKLSAgKiBDcmVhdGVzIGEgcGF0aCBvZiBmb2xkZXJzIHVzaW5nIGFic29sdXRlIGZpbGVuYW1lcy4KLSAgKiBEbyBub3QgY2FsbCB3aXRoIGFuIGFic29sdXRlUGF0aCBvZiBsZXNzIHRoYW4gb25lIHNlZ21lbnQuCi0gICogQHBhcmFtIHJlc291cmNlQ29udGV4dCB0aGUgcmVzb3VyY2UgY29udGV4dCBmb3IgbWFraW5nIGZvbGRlcnMuCi0gICogQHBhcmFtIHJlc291cmNlIHRoZSByZXNvdXJjZSB0aGF0IHdpbGwgYmUgY3JlYXRlZC4KLSAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIHRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIGJlIHVzZWQuCi0gICogQHBhcmFtIHN0YXR1c0hhbmRsZXIgdGhlIHN0YXR1cyBoYW5kbGVyLgotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgSUNvbnRhaW5lciBvZiB0aGUgY3JlYXRlZCBmb2xkZXIuCi0gICovCi0gcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIG1ha2VGb2xkZXJQYXRoQXRMb2NhdGlvbiAoCi0gICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgIElDb250YWluZXIgICAgICAgcmVzb3VyY2UsCi0gICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgIElTdGF0dXNIYW5kbGVyICAgc3RhdHVzSGFuZGxlciApCi0gCi0gICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgewotCSBpZiAocmVzb3VyY2UuZXhpc3RzKCkpCi0JIHsKLQkJIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElDb250YWluZXIpCi0JCSB7Ci0JCQkgcmV0dXJuIChJQ29udGFpbmVyKSByZXNvdXJjZTsKLQkJIH0KLQkJIGVsc2UKLQkJIHsKLQkJCSB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbigKLQkJCQkJIG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsIAotCQkJCQkJCSAiUmVzb3VyY2VVdGlscyIsCi0JCQkJCQkJIDAsIAotCQkJCQkJCSBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9SRVNPVVJDRV9OT1RfRk9MREVSLAotCQkJCQkJCQkJIG5ldyBPYmplY3RbXXsgcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpIH0pLAotCQkJCQkJCQkJIG51bGwgKSApOwotCQkgfQotCSB9Ci0JIGVsc2UKLQkgewotCQkgSUNvbnRhaW5lciBwYXJlbnQgPSBtYWtlRm9sZGVyUGF0aEF0TG9jYXRpb24ocmVzb3VyY2VDb250ZXh0LCByZXNvdXJjZS5nZXRQYXJlbnQoKSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyICk7Ci0JCSBTdHJpbmcgZm9sZGVyTmFtZSA9IHJlc291cmNlLmdldE5hbWUoKTsKLQkJIAotCQkgcmV0dXJuIG1ha2VGb2xkZXIocmVzb3VyY2VDb250ZXh0LCBwYXJlbnQsIGZvbGRlck5hbWUsIHByb2dyZXNzTW9uaXRvciAsIHN0YXR1c0hhbmRsZXIgKTsKLQkgfQotIH0KLSAKLSAvKioKLSAgKiBDcmVhdGVzIGEgcGF0aCBvZiBmb2xkZXJzLgotICAqIERvIG5vdCBjYWxsIHdpdGggYW4gYWJzb2x1dGVQYXRoIG9mIGxlc3MgdGhhbiBvbmUgc2VnbWVudC4KLSAgKiBAcGFyYW0gcmVzb3VyY2VDb250ZXh0IHRoZSByZXNvdXJjZSBjb250ZXh0IGZvciBtYWtpbmcgZm9sZGVycy4KLSAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIHRoZSBwYXRoIG9mIGZvbGRlcnMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuCi0gICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciB0aGUgcHJvZ3Jlc3MgbW9uaXRvciB0byBiZSB1c2VkLgotICAqIEBwYXJhbSBzdGF0dXNIYW5kbGVyIHRoZSBzdGF0dXMgaGFuZGxlci4KLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElDb250YWluZXIgb2YgdGhlIGNyZWF0ZWQgZm9sZGVyLgotICAqLwotIHB1YmxpYyBzdGF0aWMgSUNvbnRhaW5lciBtYWtlRm9sZGVyUGF0aEF0TG9jYXRpb24gKAotICAgUmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQsCi0gICBJUGF0aCAgICAgICAgICAgIGFic29sdXRlUGF0aCwKLSAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gCi0gICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotIHsKLSAJcmV0dXJuIG1ha2VGb2xkZXJQYXRoQXRMb2NhdGlvbihyZXNvdXJjZUNvbnRleHQsCi0gCQlnZXRXb3Jrc3BhY2VSb290KCkuZ2V0Q29udGFpbmVyRm9yTG9jYXRpb24oYWJzb2x1dGVQYXRoKSwKLSAJCXByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlcik7Ci0gfQotIAotIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vU3RyaW5nVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc0ZWE5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoqCi0gICogVGhpcyBjbGFzcyBjb250YWlucyBzb21lIHVzZWZ1bCBzdHJpbmcgdXRpbGl0aWVzIHRoYXQgYXJlIG5vdCBwcm92aWRlZCBieQotICAqIGVpdGhlciBTdHJpbmcgb3IgU3RyaW5nQnVmZmVyLgotICAqCi0gICogQGF1dGhvciBQZXRlciBNb29nawotICAqIEBkYXRlICAgSnVseSAxMywgMjAwMAotKiovCi1wdWJsaWMgZmluYWwgY2xhc3MgU3RyaW5nVXRpbHMKLXsKLSAgLyoqCi0gICogVGhlIHBsYXRmb3JtLXNwZWNpZmljIGxpbmUgc2VwYXJhdG9yLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBORVdMSU5FID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCi0gIHByaXZhdGUgU3RyaW5nVXRpbHMoKXt9OwotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2Qgc3BsaXRzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCBpbnRvIG11bHRpcGxlIGxpbmVzCi0gICAgKiBiYXNlZCBvbiBhIG1heGltdW0gbGluZSBsZW5ndGguICBUaGUgbWV0aG9kIHdpbGwgdHJ5IHRvIGZpdCBhcwotICAgICogbWFueSB3b3JkcyBhcyBwb3NzaWJsZSBvbnRvIGEgbGluZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgbWF4aW11bQotICAgICogbGluZSBsZW5ndGguICBOb3RlOiB0aGUgb25seSBjYXNlIHdoZXJlIGEgbGluZSBtaWdodCBleGNlZWQgdGhlCi0gICAgKiBtYXhpbXVtIGlzIGlmIGEgc2luZ2xlIHdvcmQgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0uCi0gICAgKiBAcGFyYW0gdGV4dCBhIHNpbmdsZSBsaW5lIGEgdGV4dCB0aGF0IGlzIHRvIGJlIHNwbGl0LgotICAgICogQHBhcmFtIG1heF9sZW5ndGggdGhlIG1heGltdW0gbGVuZ3RoIG9mIGVhY2ggc3BsaXQgbGluZS4KLSAgICAqIEByZXR1cm4gYSBzdHJpbmcgYXJyYXkgb2YgdGhlIHNwbGl0IGxpbmVzLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBzcGxpdHRlciggU3RyaW5nIHRleHQsIGludCBtYXhfbGVuZ3RoICkKLSAgewotICAgIFZlY3RvciAgICAgICAgICByZXR1cm5fdGV4dCA9IG5ldyBWZWN0b3IoMjApOwotICAgIFN0cmluZ1tdICAgICAgICByZXR1cm5fc3RyOwotICAgIGludCAgICAgICAgICAgICBpbmRleCA9IDA7Ci0KLSAgICB3aGlsZSggaW5kZXggPCB0ZXh0Lmxlbmd0aCgpICkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gdGV4dC5zdWJzdHJpbmcoIGluZGV4LCBNYXRoLm1pbiggbWF4X2xlbmd0aCArIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQubGVuZ3RoKCkgKSApOwotICAgICAgaW50IHNwYWNlX2luZGV4ID0gc3RyLmxhc3RJbmRleE9mKCAiICIgKTsKLQotICAgICAgaWYoIGluZGV4ICsgc3RyLmxlbmd0aCgpIDwgdGV4dC5sZW5ndGgoKSAmJgotICAgICAgICAgIHRleHQuY2hhckF0KCBpbmRleCArIHN0ci5sZW5ndGgoKSAtIDEgKSAhPSAnICcgJiYKLSAgICAgICAgICB0ZXh0LmNoYXJBdCggaW5kZXggKyBzdHIubGVuZ3RoKCkgKSAhPSAnICcgJiYKLSAgICAgICAgICBzcGFjZV9pbmRleCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIHJldHVybl90ZXh0LmFkZEVsZW1lbnQoIHN0ci5zdWJzdHJpbmcoIDAsIHNwYWNlX2luZGV4ICkgKTsKLSAgICAgICAgaW5kZXggKz0gc3BhY2VfaW5kZXggKyAxOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm5fdGV4dC5hZGRFbGVtZW50KCBzdHIudHJpbSgpICk7Ci0gICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGgoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm5fc3RyID0gbmV3IFN0cmluZ1tyZXR1cm5fdGV4dC5zaXplKCldOwotCi0gICAgZm9yKCBpbmRleCA9IDA7IGluZGV4IDwgcmV0dXJuX3RleHQuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICByZXR1cm5fc3RyW2luZGV4XSA9IChTdHJpbmcpKHJldHVybl90ZXh0LmVsZW1lbnRBdChpbmRleCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5fc3RyOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIHdpdGggYSByZXBlYXRlZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KLSAgICAqIEBwYXJhbSB0aGVfY2hhciB0aGUgY2hhcmFjdGVyIHRvIGJlIHJlcGVhdGVkLgotICAgICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZSB0aGlzIGNoYXJhY3RlciBzaG91bGQgYmUgcmVwZWF0ZWQuCi0gICAgKiBAcmV0dXJuIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIHJlcGVhdGVkIGNoYXJhY3RlcnMuCi0gICoqLwotICBzdGF0aWMgcHVibGljIFN0cmluZyByZXBlYXQoIGNoYXIgdGhlX2NoYXIsIGludCBjb3VudCApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlciggY291bnQgKTsKLQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKyApCi0gICAgewotICAgICAgYnVmLmFwcGVuZCggdGhlX2NoYXIgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIGZsYXR0ZW5zIGFuIGFycmF5IG9mIGFyZ3VtZW50cyB0byBhIHN0cmluZy4KLSAgICAqIFRoZSBtZXRob2QgcmVzcGVjdHMgZW1iZWRkZWQgd2hpdGVzcGFjZSBhbmQgcXVvdGVzLgotICAgICogPHVsPgotICAgICogPGxpPkFueSBhcmd1bWVudCB3aXRoIGVtYmVkZGVkIHdoaXRlc3BhY2Ugd2lsbCBiZSBmbGF0dGVuZWQgb3V0Ci0gICAgKiB3aXRoIGVuY2xvc2luZyBxdW90ZXMuIEZvciBleGFtcGxlLCB0aGUgc2luZ2xlIGFyZ3VtZW50Ci0gICAgKiA8dT5IZWxsbyBXb3JsZDwvdT4KLSAgICAqIHdpbGwgYmUgcmV0dXJuZWQgYXMKLSAgICAqIDx1PiJIZWxsbyBXb3JsZCI8L3U+LgotICAgICogPGxpPkFueSBhcmd1bWVudCB3aXRoIHF1b3RlcyB3aWxsIGJlIGZsYXR0ZW5lZCBvdXQgd2l0aCB0aGUKLSAgICAqIHF1b3RlcyBlc2NhcGVkLiBGb3IgZXhhbXBsZSwgdGhlIHNpbmdsZSBhcmd1bWVudAotICAgICogPHU+IkhhcHB5IGRheXMiPC91PgotICAgICogd2lsbCBiZSByZXR1cm5lZCBhcwotICAgICogPHU+XCJIYXBweSBkYXlzXCI8L3U+LgotICAgICogPC91bD4KLSAgICAqIEBwYXJhbSBhcmd1bWVudHMgVGhlIGFycmF5IG9mIHN0cmluZ3MgdG8gZmxhdHRlbi4KLSAgICAqIEByZXR1cm4gdGhlIGZsYXR0ZW5lZCBzdHJpbmcuCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgU3RyaW5nIGZsYXR0ZW5Bcmd1bWVudHMgKCBTdHJpbmdbXSBhcmd1bWVudHMgKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgIGZvciAoaW50IGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCBhIHNlcGFyYXRvciAoZXhjZXB0IHRoZSBmaXJzdCB0aW1lKS4KLSAgICAgIC8vCi0gICAgICBpZiAoaSA+IDApIGJ1Zi5hcHBlbmQoJyAnKTsKLQotICAgICAgLy8KLSAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2UuCi0gICAgICAvLwotICAgICAgYm9vbGVhbiB3aGl0ZXNwYWNlID0gZmFsc2U7Ci0gICAgICBjaGFyW10gY2hhcnMgPSBhcmd1bWVudHNbaV0udG9DaGFyQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGo9MDsgIXdoaXRlc3BhY2UgJiYgajxjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UoY2hhcnNbal0pKQotICAgICAgICB7Ci0gICAgICAgICAgd2hpdGVzcGFjZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCB0aGUgYXJndW1lbnQsIHF1b3RlZCBhcyBuZWNlc3NhcnkuCi0gICAgICAvLwotICAgICAgaWYgKHdoaXRlc3BhY2UpIGJ1Zi5hcHBlbmQoJyInKTsKLSAgICAgIGZvciAoaW50IGo9MDsgajxjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoYXJzW2pdID09ICciJykgYnVmLmFwcGVuZCgnXFwnKTsKLSAgICAgICAgYnVmLmFwcGVuZChjaGFyc1tqXSk7Ci0gICAgICB9Ci0gICAgICBpZiAod2hpdGVzcGFjZSkgYnVmLmFwcGVuZCgnIicpOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgcGFyc2VzIHdoaXRlc3BhY2UtZGVsaW1pdHRlZCBmaWxlbmFtZXMgZnJvbQotICAgICogdGhlIGdpdmVuIDxjb2RlPmlucHV0PC9jb2RlPiBzdHJlYW0uIDxiPkxpbWl0YXRpb246PC9iPgotICAgICogUXVvdGVkIGZpbGVuYW1lcyBvciBmaWxlbmFtZXMgd2l0aCBlbWJlZGRlZCB3aGl0ZXNwYWNlCi0gICAgKiBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCi0gICAgKiBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbS4KLSAgICAqIEByZXR1cm4gQW4gZW51bWVyYXRpb24gb2YgZmlsZW5hbWVzIGZyb20gdGhlIHN0cmVhbS4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBFbnVtZXJhdGlvbiBwYXJzZUZpbGVuYW1lc0Zyb21TdHJlYW0gKCBJbnB1dFN0cmVhbSBpbnB1dCApCi0gIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgVmVjdG9yIGZpbGVuYW1lcyA9IG5ldyBWZWN0b3IoNjQsNjQpOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBudWxsOwotICAgIGJ5dGUgc3RhdGUgPSBTVEFURV9XUzsKLSAgICBpbnQgaWMgPSBpbnB1dC5yZWFkKCk7Ci0gICAgd2hpbGUgKGljID49IDApCi0gICAgewotICAgICAgY2hhciBjID0gKGNoYXIpaWM7Ci0gICAgICBzd2l0Y2ggKHN0YXRlKQotICAgICAgewotICAgICAgICBjYXNlIFNUQVRFX1dTOgotICAgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9OV1M7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNUQVRFX05XUzoKLSAgICAgICAgICBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoYykpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGJ1ZmZlci50b1N0cmluZygpOwotICAgICAgICAgICAgZmlsZW5hbWVzLmFkZChmaWxlbmFtZSk7Ci0gICAgICAgICAgICBidWZmZXIgPSBudWxsOwotICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9XUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpYyA9IGlucHV0LnJlYWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVuYW1lcy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBTVEFURV9XUyA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgU1RBVEVfTldTID0gMTsKLQotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpcyB0aGUgdHlwZSBwYXNzZWQgaW4gaXMgYSBwcmltdGl2ZSBqYXZhIHR5cGUKLSAgKiBAcGFyYW0gY2xhc3MgbmFtZSBTdHJpbmcKLSAgKiBAcmV0dXJuIHRydWUgaXMgcHJpbWl0aXZlIHR5cGUKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUHJpbWl0aXZlVHlwZShTdHJpbmcgdHlwZU5hbWUpIAotICB7Ci0KLSAgICBpZiAodHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYm9vbGVhbiIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJieXRlIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImRvdWJsZSIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJmbG9hdCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbnQiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgibG9uZyIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzaG9ydCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJjaGFyIikpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gIC8qKgotICAqIFRoZSBtZXRob2QgcmVwbGFjZSB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZSBhbGxvd2VkIGluIFVSSXMKLSAgKiBhbmQgbm90IGFsbG93ZWQgaW4gSmF2YSBjbGFzcyBuYW1lcyB0byBhbiB1bmRlcnNjb3JlICgnXycpCi0gICogQHBhcmFtIFVSSSBTdHJpbmcKLSAgKiBAcmV0dXJuIHZhbGlkIEphdmEgY2xhc3MgbmFtZSBTdHJpbmcKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgVVJJMkNsYXNzTmFtZSggU3RyaW5nIHVyaSApIHsKLSAgICBTdHJpbmcgY2xhc3NOYW1lID0gdXJpOwotICAgIGZvciAoIGludCBpID0gMDsgaSA8IFVSSV9TWU1CT0xTLmxlbmd0aDsgaSsrICkgewotICAgIAljbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSAoIFVSSV9TWU1CT0xTW2ldLCBVTkRFUlNDT1JFICk7Ci0gICAgfQotICAgIHJldHVybiBjbGFzc05hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhbmQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBleGNlcHRpb24gdHJhY2ViYWNrIGluZm9ybWF0aW9uIG9mCi0gICAqIGEgVGhyb3dhYmxlLiAgVGhpcyBpcyB0aGUgc2FtZSB0cmFjZWJhY2sgZGF0YSB0aGF0IGlzIGRpc3BsYXllZCBieSBleGMucHJpbnRTdGFja1RyYWNlKCkuCi0gICAqIEBwYXJhbSBleGMgdGhlIGV4Y2VwdGlvbgotICAgKiBAcmV0dXJuIGEgc3RyaW5nIGFycmF5IG9mIHRoZSB0cmFjZWJhY2sgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFN0YWNrVHJhY2UoIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgVmVjdG9yICAgICAgIGxpbmVzICAgICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmdXcml0ZXIgc3RyaW5nV3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyICBwcmludFdyaXRlciAgPSBuZXcgUHJpbnRXcml0ZXIoIHN0cmluZ1dyaXRlciApOwotICAgIAotICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoIHByaW50V3JpdGVyICk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgcHJpbnRXcml0ZXIuY2xvc2UoKTsKLSAgICAgIHN0cmluZ1dyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIG5lc3RlZEV4YyApCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgfQotICAgIAotICAgIFN0cmluZ1JlYWRlciBzdHJpbmdSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKCBzdHJpbmdXcml0ZXIudG9TdHJpbmcoKSApOwotICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciAgICAgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIHN0cmluZ1JlYWRlciApOwotICAgIFN0cmluZyAgICAgICAgIGxpbmUgICAgICAgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAKLSAgICAgIHdoaWxlKCBsaW5lICE9IG51bGwgKQotICAgICAgewotICAgICAgICBsaW5lcy5hZGQoIGxpbmUudHJpbSgpICk7Ci0gICAgICAgIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBuZXN0ZWRFeGMgKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKWxpbmVzLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIFVSSV9TWU1CT0xTID0geyctJywgJ34nLCAnIycsICcvJywgJy4nfTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBVTkRFUlNDT1JFID0gJ18nOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vV2FpdEZvckF1dG9CdWlsZENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1dhaXRGb3JBdXRvQnVpbGRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDUxZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vV2FpdEZvckF1dG9CdWlsZENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIFdhaXRGb3JBdXRvQnVpbGRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb250aXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJCi0JdHJ5IAotCXsKLQkgIFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0JfSAKLQljYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjICkgCi0JewotCSAgLy8gVUlTeW5jaHJvbml6ZXIuc3luY0V4ZWMgc2VlbXMgdG8gaW50ZXJydXB0IHRoZSBVSSB0cmVhZCB3aGVuIHRoZSBhdXRvYnVpbGRlciBpcyBkb25lLiAgTm90IHN1cmUsIHdoeS4KLQkgIC8vIEknbSBhc3N1bWluZyBoZXJlIHRoYXQgdGhlIGF1dG9idWlsZGVyIGhhcyBhY3R1YWxseSBjb21wbGV0ZWQgaXRzIHN0dWZmLgkKLQl9Ci0JCQotCXJldHVybiBzdGF0dXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWRhOWRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTIyICAgMTg0MDA2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlcy5BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeQotewotICBwcml2YXRlIFZlY3RvciBwcmVmZXJlbmNlc187Ci0gIAotICBwcml2YXRlIHN0YXRpYyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5XzsKLQotICBwcml2YXRlIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkoKQotICB7Ci0gICAgcHJlZmVyZW5jZXNfID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIGxvYWREaWFsb2dzUHJlZmVyZW5jZXMoKTsgIAotICB9Ci0gIAotICBzdGF0aWMgcHVibGljIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYoIHJlZ2lzdHJ5XyA9PSBudWxsICkKLSAgICB7Ci0gICAgICByZWdpc3RyeV8gPSBuZXcgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVnaXN0cnlfOwotICB9Ci0gIAotICAvLwotICBwcml2YXRlIHZvaWQgbG9hZERpYWxvZ3NQcmVmZXJlbmNlcyAoKQotICB7Ci0gIAlJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWcgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKCAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y29uZmlnLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCAgICAgIGVsZW0gICA9IGNvbmZpZ1tpZHhdOyAgICAgCi0gICAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBkaWFsb2cgPSBuZXcgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUoKTsKLSAgICAgIAotICAgICAgZGlhbG9nLnNldElkKCBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSApOwotICAgICAgZGlhbG9nLnNldE5hbWUoIGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgKTsKLSAgICAgIGRpYWxvZy5zZXRJbmZvcG9wKCBlbGVtLmdldEF0dHJpYnV0ZSgiaW5mb3BvcCIpICk7Ci0gICAgICBkaWFsb2cuc2V0VG9vbHRpcCggZWxlbS5nZXRBdHRyaWJ1dGUoInRvb2x0aXAiKSApOwotICAgICAgZGlhbG9nLnNldENhdGVnb3J5KCBlbGVtLmdldEF0dHJpYnV0ZSgiY2F0ZWdvcnkiKSApOwotICAgICAgCi0gICAgICBTdHJpbmcgc2hvd0NoZWNrYm94ID0gZWxlbS5nZXRBdHRyaWJ1dGUoICJzaG93Y2hlY2tib3giICk7Ci0gICAgICBTdHJpbmcgYWx3YXlzSGlkZSAgID0gZWxlbS5nZXRBdHRyaWJ1dGUoICJhbHdheXNoaWRlIiApOwotICAgICAgCi0gICAgICBkaWFsb2cuc2V0U2hvd0NoZWNrYm94KCBzaG93Q2hlY2tib3ggPT0gbnVsbCA/IHRydWUgOiBzaG93Q2hlY2tib3guZXF1YWxzKCAidHJ1ZSIgKSApOwotICAgICAgZGlhbG9nLnNldEFsd2F5c0hpZGUoIGFsd2F5c0hpZGUgPT0gbnVsbCA/IGZhbHNlIDogYWx3YXlzSGlkZS5lcXVhbHMoICJ0cnVlIiApICk7Ci0gICAgICAKLSAgICAgIHNldE9iamVjdElkcyggZWxlbS5nZXRBdHRyaWJ1dGUoICJvYmplY3RpZHMiICksIGRpYWxvZyApOwotICAgICAgCi0gICAgICBwcmVmZXJlbmNlc18uYWRkKGRpYWxvZyk7ICAgICAgICAKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0T2JqZWN0SWRzKCBTdHJpbmcgaWRMaXN0LCBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBkaWFsb2cgKQotICB7Ci0gICAgaWYoIGlkTGlzdCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBTdHJpbmdbXSBpZHMgPSBpZExpc3Quc3BsaXQoICIgIiApOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgaWRzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIGRpYWxvZy5hZGRPYmplY3RJZCggaWRzW2luZGV4XSApOyAgIAotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyBhbGwgcmVnaXN0ZXJlZCA8Y29kZT5XZWJTZXJ2aWNlVHlwZTwvY29kZT4gb2JqZWN0cy4KLSAgKiBAcmV0dXJuIEFsbCByZWdpc3RlcmVkIDxjb2RlPldlYlNlcnZpY2VUeXBlPC9jb2RlPiBvYmplY3RzLgotICAqLwotICBwdWJsaWMgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSBnZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlcyAoKQotICB7Ci0gICAgcmV0dXJuIChBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVtdKXByZWZlcmVuY2VzXy50b0FycmF5KCBuZXcgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbMF0pOwotICB9Ci0gIAotICBwdWJsaWMgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZSggU3RyaW5nIGlkICkKLSAgewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHByZWZlcmVuY2VzXy5zaXplKCk7Ci0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBwcmVmZXJlbmNlID0gKEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlKXByZWZlcmVuY2VzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICAKLSAgICAgIGlmKCBwcmVmZXJlbmNlLmdldE9iamVjdElkcygpLmNvbnRhaW5zKCBpZCApICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gcHJlZmVyZW5jZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QyYTYxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTIyICAgMTg0MDA2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW4uRW52UGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlcy5BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQKLXsKLSAgcHJpdmF0ZSBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5OwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGluc3RhbmNlXyA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQoKQotICB7Ci0gICAgc3VwZXIoRW52UGx1Z2luLmdldEluc3RhbmNlKCkpOwotICB9Ci0gIAotICBzdGF0aWMgcHVibGljIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiggaW5zdGFuY2VfID09IG51bGwgKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQoKTsKLSAgICAgIGluc3RhbmNlXy5sb2FkKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2FkKCkKLSAgewotICAgIHJlZ2lzdHJ5ID0gQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10gZGlhbG9ncyA9IHJlZ2lzdHJ5LmdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2VzKCk7Ci0gIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlhbG9ncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBzZXREZWZhdWx0KGRpYWxvZ3NbaV0uZ2V0SWQoKSwgZmFsc2UpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVtdIGdldERpYWxvZ3MoKQotICB7Ci0gICAgcmV0dXJuIHJlZ2lzdHJ5LmdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25EaWFsb2dFbmFibGVkKFN0cmluZyBpZCwgYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKGlkLCB2YWx1ZSk7Ci0gIH0KLQotICAvLyBUaGlzIG1ldGhvZCBpcyB1c3VhbGx5IGNhbGxlZCBmcm9tIHRoZSBwb3B1cCB3aXphcmQgd2l0aCB0aGUgSWQKLSAgLy8gb2YgdGhlIE9iamVjdENvbnRyaWJ1dGlvbiBkZWZpbmluZyB0aGUgcG9wdXAuCi0gIHB1YmxpYyB2b2lkIHNldE9iamVjdEFjdGlvbkRpYWxvZ0VuYWJsZWQoIFN0cmluZyBpZCwgYm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICAvLyBOZWVkIHRvIGZpcnN0IGZpbmQgdGhlIGRpYWxvZyBvYmplY3QgdGhhdCByZWZlcmVuY2VzIHRoZSBwb3B1cC4KLSAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBkaWFsb2cgPSByZWdpc3RyeS5nZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlKCBpZCApOwotICAgIAotICAgIGlmKCBkaWFsb2cgIT0gbnVsbCApCi0gICAgewotICAgICAgc2V0QWN0aW9uRGlhbG9nRW5hYmxlZCggZGlhbG9nLmdldElkKCksIHZhbHVlICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0FjdGlvbkRpYWxvZ0VuYWJsZWQoU3RyaW5nIGlkKQotICB7Ci0gICAgaWYgKGlkID09IG51bGwpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihpZCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHNob3dEaWFsb2coIFN0cmluZyBpZCApCi0gIHsKLSAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBkaWFsb2cgPSByZWdpc3RyeS5nZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlKCBpZCApOyAgICAKLSAgIAotICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwb3B1cCB3aXphcmQgc2hvdWxkIGJlIGRpc3BsYXllZAotICAgIC8vIG9yIG5vdCB3aXRoIHRoaXMgbG9naWMuICBJZiB0aGUgZGlhbG9nIHZhcmlhYmxlIGlzIG51bGwgdGhlbgotICAgIC8vIHRoZXJlIHdhcyBubyBwb3B1cCBleHRlbnNpb24gcG9pbnQgcG9pbnQgZGVmaW5lZCBmb3IgdGhpcyB3aXphcmQuICBJbgotICAgIC8vIHRoaXMgY2FzZSB3ZSB3aWxsIGFzc3VtZSB0aGF0IHRoZSBwb3B1cCBzaG91bGQgYWx3YXlzIGJlIGRpc3BsYXllZC4KLSAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgZXh0ZW5zaW9uIHNheXMgdGhhdCB0aGUgc2hvdyBjaGVjayBib3ggY29udHJvbAotICAgIC8vIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3aXphcmQgc2hvdWxkIG5vdCBhbHdheXMKLSAgICAvLyBiZSBoaWRkZW4sIGFzIHdlbGwgd2UgbmVlZCB0byBjaGVjayB0aGUgY3VycmVudCBzZXR0aW5nIG9mIHRoZSBjaGVjawotICAgIC8vIGJveCB2aWEgdGhlIGlzQWN0aW9uRGlhbG9nRW5hYmxlZCBjYWxsLiAgSWYgdGhlIHNob3cgY2hlY2sgYm94IHN0YXRlCi0gICAgLy8gZGVmaW5lZCBpbiB0aGUgZXh0ZW5zaW9uIGlzIGZhbHNlLCBidXQgYWx3YXlzIGhpZGUgaXMgYWxzbyBmYWxzZSB0aGVuCi0gICAgLy8gd2Ugd2lsbCBkaXNwbGF5IHRoZSBwb3Agd2l6YXJkLgotICAgIHJldHVybiBkaWFsb2cgPT0gbnVsbCB8fAotICAgICAgICAgICAoICggZGlhbG9nLmdldFNob3dDaGVja2JveCgpICYmIAotICAgICAgICAgICAgICAgIWRpYWxvZy5nZXRBbHdheXNIaWRlKCkgJiYgCi0gICAgICAgICAgICAgICAhaXNBY3Rpb25EaWFsb2dFbmFibGVkKCBkaWFsb2cuZ2V0SWQoKSkgKSB8fAotICAgICAgICAgICAgICggIWRpYWxvZy5nZXRTaG93Q2hlY2tib3goKSAmJiAKLSAgICAgICAgICAgICAgICFkaWFsb2cuZ2V0QWx3YXlzSGlkZSgpICkgKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gc2hvd0NoZWNrYm94KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nID0gcmVnaXN0cnkuZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZSggaWQgKTsgICAgCi0gICAgCi0gICAgcmV0dXJuIGRpYWxvZyA9PSBudWxsID8gZmFsc2UgOiBkaWFsb2cuZ2V0U2hvd0NoZWNrYm94KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYTViZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5Db250ZXh0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCBhcyB0aGUgYmFzZSBjbGFzcyBmb3IgdHlwZXMgdGhhdCB3aGF0IHRvIHBlcnNpc3QgcHJlZmVyZW5jZQotICogZGF0YSBpbiB0aGUgcGx1Z2luIHByZWZlcmVuY2VzIGFyZWEuCi0gKgotICoKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgQ29udGV4dAotewotIHByb3RlY3RlZCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlc187Ci0gcHJvdGVjdGVkIFBsdWdpbiBwbHVnaW5fOwotCi0gcHVibGljIFBlcnNpc3RlbnRDb250ZXh0ICggUGx1Z2luIHBsdWdpbikKLSAJewotIAkJcGx1Z2luXyA9IHBsdWdpbjsKLSAJICAJcHJlZmVyZW5jZXNfID0gcGx1Z2luLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0gCX0KLQotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHQgKFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKSB7Ci0gCXByZWZlcmVuY2VzXy5zZXREZWZhdWx0KG5hbWUsIHZhbHVlKTsKLSAJfQotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdCAoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0RGVmYXVsdChuYW1lLHZhbHVlKTsKLSAJfQotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdCAoU3RyaW5nIG5hbWUsIGludCB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0RGVmYXVsdChuYW1lLHZhbHVlKTsKLSAJfQotIAotIC8qKgotICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldFZhbHVlIChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0gCXByZWZlcmVuY2VzXy5zZXRWYWx1ZShuYW1lLHZhbHVlKTsKLSAJcGx1Z2luXy5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLSAJfQotIAotIC8qKgotICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpIHsKLSAJcHJlZmVyZW5jZXNfLnNldFZhbHVlKG5hbWUsIHZhbHVlKTsKLSAJcGx1Z2luXy5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLSAJfQotIAotIC8qKgotICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIGludCBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldFZhbHVlIChTdHJpbmcgbmFtZSwgaW50IHZhbHVlKSB7Ci0gCXByZWZlcmVuY2VzXy5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7Ci0gCXBsdWdpbl8uc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0JfQotCi0gLyoqCi0gICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVBc1N0cmluZyAoIFN0cmluZyBuYW1lKSB7Ci0gCXJldHVybiBwcmVmZXJlbmNlc18uZ2V0U3RyaW5nKG5hbWUpOwotIAl9Ci0gCi0gLyoqCi0gICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0VmFsdWVBc0Jvb2xlYW4gKCBTdHJpbmcgbmFtZSkgewotIAlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldEJvb2xlYW4obmFtZSk7Ci0gCX0KLSAgCi0gIC8qKgotICAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgICogQHJldHVybiB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgICovCi0gcHVibGljIGludCBnZXRWYWx1ZUFzSW50KCBTdHJpbmcgbmFtZSkgewotIAkJcmV0dXJuIHByZWZlcmVuY2VzXy5nZXRJbnQobmFtZSk7Ci0gCX0KLSAKLSAvKioKLSAgKiBHZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFN0cmluZyhTdHJpbmcgbmFtZSkKLSB7Ci0gCXJldHVybiBwcmVmZXJlbmNlc18uZ2V0RGVmYXVsdFN0cmluZyhuYW1lKTsKLSB9Ci0gCi0gLyoqCi0gICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIGJvb2xlYW4gZ2V0RGVmYXVsdEJvb2xlYW4oU3RyaW5nIG5hbWUpCi0gewotIAlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldERlZmF1bHRCb29sZWFuKG5hbWUpOwotIH0KLSAKLSAvKioKLSAgKiBHZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGludCBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBpbnQgZ2V0RGVmYXVsdEludChTdHJpbmcgbmFtZSkKLSB7Ci0gCXJldHVybiBwcmVmZXJlbmNlc18uZ2V0RGVmYXVsdEludChuYW1lKTsKLSB9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZSBpZiBhIGRlZmF1bHQgdmFsdWUgaGFzCi0gICogbm90IGFscmVhZHkgYmVlbiBzZXQuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZQotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdCggU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlICkKLSB7Ci0gICAvLyBJZiB0aGUga2V5IGFscmVhZHkgaGFzIGEgZGVmYXVsdCB2YWx1ZSB3ZSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIGl0LgotICAgaWYoIHByZWZlcmVuY2VzXy5nZXREZWZhdWx0U3RyaW5nKCBrZXkgKS5lcXVhbHMoIiIpICkgCi0gICB7Ci0gICAgIHByZWZlcmVuY2VzXy5zZXREZWZhdWx0KCBrZXksIHZhbHVlICk7Ci0gICB9Ci0gfQotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlIGlmIGEgZGVmYXVsdCB2YWx1ZSBoYXMKLSAgKiBub3QgYWxyZWFkeSBiZWVuIHNldC4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdCggU3RyaW5nIGtleSwgYm9vbGVhbiB2YWx1ZSApCi0gewotICAgLy8gSWYgdGhlIGtleSBhbHJlYWR5IGhhcyBhIGRlZmF1bHQgdmFsdWUgd2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSBpdC4KLSAgIGlmKCBwcmVmZXJlbmNlc18uZ2V0RGVmYXVsdFN0cmluZygga2V5ICkuZXF1YWxzKCIiKSApIAotICAgewotICAgICBwcmVmZXJlbmNlc18uc2V0RGVmYXVsdCgga2V5LCB2YWx1ZSApOwotICAgfQotIH0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGludCBwcmVmZXJlbmNlIGlmIGEgZGVmYXVsdCB2YWx1ZSBoYXMKLSAgKiBub3QgYWxyZWFkeSBiZWVuIHNldC4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdEludElmTm9EZWZhdWx0KCBTdHJpbmcga2V5LCBpbnQgdmFsdWUgKQotIHsKLSAgIC8vIElmIHRoZSBrZXkgYWxyZWFkeSBoYXMgYSBkZWZhdWx0IHZhbHVlIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgaXQuCi0gICBpZiggcHJlZmVyZW5jZXNfLmdldERlZmF1bHRTdHJpbmcoIGtleSApLmVxdWFscygiIikgKSAKLSAgIHsKLSAgICAgcHJlZmVyZW5jZXNfLnNldERlZmF1bHQoIGtleSwgdmFsdWUgKTsKLSAgIH0KLSB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJmYjRiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZURlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW4uRW52UGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQgaW1wbGVtZW50cyBSZXNvdXJjZUNvbnRleHQKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBjb250ZXh0XyA9IG51bGw7Ci0gIAotICBwdWJsaWMgc3RhdGljIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYoIGNvbnRleHRfID09IG51bGwgKQotICAgIHsKLSAgICAgIGNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICAgIGNvbnRleHRfLmxvYWQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHRfOwotICB9Ci0gIAotICBwcml2YXRlIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQoKQotICB7Ci0gICAgc3VwZXIoRW52UGx1Z2luLmdldEluc3RhbmNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9hZCgpCi0gIHsKLSAgICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfT1ZFUldSSVRFLCBSZXNvdXJjZURlZmF1bHRzCi0gICAgICAgIC5nZXRPdmVyd3JpdGVGaWxlc0RlZmF1bHQoKSk7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX0NSRUFURV9GT0xERVJTLCBSZXNvdXJjZURlZmF1bHRzCi0gICAgICAgIC5nZXRDcmVhdGVGb2xkZXJzRGVmYXVsdCgpKTsKLSAgICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfQ0hFQ0tPVVQsIFJlc291cmNlRGVmYXVsdHMuZ2V0Q2hlY2tvdXRGaWxlc0RlZmF1bHQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX09WRVJXUklURSwgZW5hYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX09WRVJXUklURSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChib29sZWFuIGVuYWJsZSkKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfQ1JFQVRFX0ZPTERFUlMsIGVuYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0NSRUFURV9GT0xERVJTKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENoZWNrb3V0RmlsZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9DSEVDS09VVCwgZW5hYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfQ0hFQ0tPVVQpOwotICB9Ci0KLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBjb3B5KCkKLSAgewotICAgIFJlc291cmNlQ29udGV4dCBjYyA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICBjYy5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSk7Ci0gICAgY2Muc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpKTsKLSAgICBjYy5zZXRDaGVja291dEZpbGVzRW5hYmxlZChpc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpOwotICAgIHJldHVybiBjYzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0FjY3VtdWxhdGVTdGF0dXNIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwMzBmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MTAgICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIGV4dGVuZHMgQmFzZVN0YXR1c0hhbmRsZXJ7Ci0KLQlBcnJheUxpc3Qgc3RhdHVzTGlzdF8gPSBudWxsOwotCUFycmF5TGlzdCBlcnJvckxpc3RfID0gbnVsbDsKLQlBcnJheUxpc3Qgd2FybmluZ0xpc3RfID0gbnVsbDsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcigpewotCQlyZXNldFN0YXR1cygpOwotCX0KLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgcmVsb2FkaW5nIHN0YXR1cyB2YWx1ZXMgYW5kIHVzaW5nIHRoZSB1dGlsaXR5IG1ldGhvZHMKLQkgKi8KLQlwdWJsaWMgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoSVN0YXR1c1tdIHN0YXR1cyl7Ci0JCXJlc2V0U3RhdHVzKCk7Ci0JCWZvciAoaW50IGk9MDtpPHN0YXR1cy5sZW5ndGg7aSsrKQotCQkJc3RhdHVzTGlzdF8uYWRkKHN0YXR1c1tpXSk7Ci0JfQotCQotCXB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLQkgICAgSVN0YXR1cyB3b3JzdFN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JICAgIAotCSAgICAvLyBGaW5kIHRoZSB3b3JzdCBlcnJvciBzdGF0dXMgY29kZQotCSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3RhdHVzTGlzdF8uc2l6ZSgpOyBpbmRleCsrICkKLQkgICAgewotCSAgICAgIElTdGF0dXMgc3RhdHVzID0gKElTdGF0dXMpc3RhdHVzTGlzdF8uZ2V0KCBpbmRleCApOwotCSAgICAgIAotCSAgICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA+IHdvcnN0U3RhdHVzLmdldFNldmVyaXR5KCkgKQotCSAgICAgIHsKLQkgICAgICAgIHdvcnN0U3RhdHVzID0gc3RhdHVzOwotCSAgICAgIH0KLQkgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIHdvcnN0U3RhdHVzOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0U3RhdHVzKCkgewotCSAgICBzdGF0dXNMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgZXJyb3JMaXN0XyA9IG51bGw7Ci0JICAgIHdhcm5pbmdMaXN0XyA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0KElTdGF0dXMgc3RhdHVzKSB0aHJvd3MgU3RhdHVzRXhjZXB0aW9uIHsKLQkJc3RhdHVzTGlzdF8uYWRkKHN0YXR1cyk7Ci0JfQotCi0JcHVibGljIENob2ljZSByZXBvcnQoSVN0YXR1cyBzdGF0dXMsIENob2ljZVtdIGNob2ljZXMpIHsKLQkgIAlDaG9pY2UgcmVzdWx0ID0gbnVsbDsKLQkgIAkKLQkgIAkvLyBBbHdheXMgdGFrZSB0aGUgZmlyc3QgY2hvaWNlIGlmIGF2YWlsYWJsZS4KLQkgICAgaWYoIGNob2ljZXMgIT0gbnVsbCAmJiBjaG9pY2VzLmxlbmd0aCA+IDAgKQotCSAgICB7Ci0JICAgIAlyZXN1bHQgPSBjaG9pY2VzWzBdOwotCSAgICB9Ci0JICAgIAotCSAgICBzdGF0dXNMaXN0Xy5hZGQoIHN0YXR1cyApOwotCSAgICAKLQkgICAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihJU3RhdHVzIHN0YXR1cykgewotCQlzdGF0dXNMaXN0Xy5hZGQoc3RhdHVzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXBvcnRJbmZvKElTdGF0dXMgc3RhdHVzKSB7Ci0JCXN0YXR1c0xpc3RfLmFkZChzdGF0dXMpOwotCX0KLQkKLQkvKioKLQkgKiBGb3IgdXNlIGJ5IGFzc2VydGlvbiBtZXRob2RzCi0JICogQHJldHVybiBJU3RhdHVzW10KLQkgKi8KLQlwdWJsaWMgSVN0YXR1c1tdIGdldEFsbFJlcG9ydHMoKXsKLQkJaWYgKHN0YXR1c0xpc3RfPT1udWxsIHx8IHN0YXR1c0xpc3RfLmlzRW1wdHkoKSl7Ci0JCQlyZXR1cm4gbmV3IElTdGF0dXNbXXtTdGF0dXMuT0tfU1RBVFVTfTsKLQkJfQotCQlyZXR1cm4gKElTdGF0dXNbXSlzdGF0dXNMaXN0Xy50b0FycmF5KG5ldyBJU3RhdHVzWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IGVycm9yIHN0YXR1c2VzIG9ubHkKLQkgKiBAcmV0dXJuIElTdGF0dXNbXQotCSAqLwotCXB1YmxpYyBJU3RhdHVzW10gZ2V0RXJyb3JSZXBvcnRzKCl7Ci0JCWlmIChlcnJvckxpc3RfPT1udWxsKQotCQkJc29ydFJlcG9ydHMoKTsKLQkgICAgcmV0dXJuIChJU3RhdHVzW10pZXJyb3JMaXN0Xy50b0FycmF5KG5ldyBJU3RhdHVzWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHdhcm5pbmcgc3RhdHVzZXMgb25seQotCSAqIEByZXR1cm4gSVN0YXR1c1tdCi0JICovCi0JcHVibGljIElTdGF0dXNbXSBnZXRXYXJuaW5nUmVwb3J0cygpewotCQlpZiAod2FybmluZ0xpc3RfPT1udWxsKQotCQkJc29ydFJlcG9ydHMoKTsKLQkJcmV0dXJuIChJU3RhdHVzW10pd2FybmluZ0xpc3RfLnRvQXJyYXkobmV3IElTdGF0dXNbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBTb3J0IGFsbCBzdGF0dXMgcmVwb3J0cwotCSAqLwotCXByaXZhdGUgdm9pZCBzb3J0UmVwb3J0cygpewotCSAgICBlcnJvckxpc3RfID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICB3YXJuaW5nTGlzdF8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIAotCSAgICAvLyBTb3J0IGFjY29yZGluZyB0byBlcnJvciBzdGF0dXMgY29kZQotCSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3RhdHVzTGlzdF8uc2l6ZSgpOyBpbmRleCsrICkKLQkgICAgewotCSAgICAgIElTdGF0dXMgc3RhdHVzID0gKElTdGF0dXMpc3RhdHVzTGlzdF8uZ2V0KGluZGV4KTsKLQkgICAgICAKLQkgICAgICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCk9PSBJU3RhdHVzLkVSUk9SKXsKLQkgICAgICAgIGVycm9yTGlzdF8uYWRkKHN0YXR1cyk7Ci0JICAgICAgfQotCSAgICAgIGVsc2UgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1JU3RhdHVzLldBUk5JTkcpewotCSAgICAgICAgd2FybmluZ0xpc3RfLmFkZChzdGF0dXMpOwotCSAgICAgIH0KLQkgICAgfQotCSAgICAKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Jhc2VFY2xpcHNlRW52aXJvbm1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlRWNsaXBzZUVudmlyb25tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMGE0MzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Jhc2VFY2xpcHNlRW52aXJvbm1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgYWRkcyByZXNvdXJjZXMgdG8gdGhlIGJhc2UgSUVudmlyb25tZW50LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJhc2VFY2xpcHNlRW52aXJvbm1lbnQgZXh0ZW5kcyBJRW52aXJvbm1lbnQgCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgUmVzb3VyY2VDb250ZXh0IG9iamVjdCBmb3IgdGhpcyBlbnZpcm9ubWVudC4KLSAgICovCQotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Jhc2VTdGF0dXNIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQmFzZVN0YXR1c0hhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk1OWM0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQmFzZVN0YXR1c0hhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQmFzZVN0YXR1c0hhbmRsZXIgaW1wbGVtZW50cyBJRWNsaXBzZVN0YXR1c0hhbmRsZXIKLXsKLSAgcHJpdmF0ZSBJU3RhdHVzIHdvcnN0U3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIAotICB7Ci0JcmV0dXJuIHdvcnN0U3RhdHVzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXRTdGF0dXMoKSAKLSAgewotICAgIHdvcnN0U3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsJCQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVwb3J0KElTdGF0dXMgc3RhdHVzKSB0aHJvd3MgU3RhdHVzRXhjZXB0aW9uIAotICB7Ci0gICAgY2hlY2tTdGF0dXMoc3RhdHVzKTsKLSAgfQotCi0gIHB1YmxpYyBDaG9pY2UgcmVwb3J0KElTdGF0dXMgc3RhdHVzLCBDaG9pY2VbXSBjaG9pY2VzKSAKLSAgewotCWNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0JcmV0dXJuIGNob2ljZXMgPT0gbnVsbCB8fCBjaG9pY2VzLmxlbmd0aCA9PSAwPyBudWxsIDogY2hvaWNlc1swXTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKElTdGF0dXMgc3RhdHVzKSAKLSAgewotCWNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXBvcnRJbmZvKElTdGF0dXMgc3RhdHVzKSAKLSAgewotCWNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNoZWNrU3RhdHVzKCBJU3RhdHVzIHN0YXR1cyApCi0gIHsKLSAgICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPiB3b3JzdFN0YXR1cy5nZXRTZXZlcml0eSgpICkKLSAgICB7Ci0gICAgICB3b3JzdFN0YXR1cyA9IHN0YXR1czsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9FY2xpcHNlRW52aXJvbm1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9FY2xpcHNlRW52aXJvbm1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg2NTViNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvRWNsaXBzZUVudmlyb25tZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuU2ltcGxlVVJJRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5JVVJJRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5JVVJJU2NoZW1lOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGFuIElFbnZpcm9ubWVudCBjbGFzcyBmb3IgdGhlIEVjbGlwc2UgSUVudmlyb25tZW50LgotICogVGhpcyBJRW52aXJvbm1lbnQgY3VycmVudGx5IHN1cHBvcnRzIHRoZSAicGxhdGZvcm0iIHByb3RvY29sIGFuZCB0aGUgImZpbGUiCi0gKiBwcm90b2NvbC4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBFY2xpcHNlRW52aXJvbm1lbnQgaW1wbGVtZW50cyBCYXNlRWNsaXBzZUVudmlyb25tZW50Ci17Ci0gIHByaXZhdGUgQ29tbWFuZE1hbmFnZXIgICBjb21tYW5kTWFuYWdlcl8gID0gbnVsbDsKLSAgcHJpdmF0ZSBTaW1wbGVVUklGYWN0b3J5IHVyaUZhY3RvcnlfICAgICAgPSBudWxsOwotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0XyA9IG51bGw7Ci0gIHByaXZhdGUgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlcl8gICA9IG51bGw7Ci0gIHByaXZhdGUgSUxvZyAgICAgICAgICAgICAgbG9nZ2VyXyAgICAgICAgICA9IG51bGw7Ci0gIAotICBwdWJsaWMgRWNsaXBzZUVudmlyb25tZW50KCBDb21tYW5kTWFuYWdlciAgY29tbWFuZE1hbmFnZXIsIAotIAkJICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0JCQkJCQkgICAgICAgICAgICAgICAgIElTdGF0dXNIYW5kbGVyICAgc3RhdHVzSGFuZGxlciApCi0gIHsKLSAgICBJVVJJU2NoZW1lIGVjbGlwc2VTY2hlbWUgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZVNjaGVtZSgpOwotICAgIElVUklTY2hlbWUgZmlsZVNjaGVtZSAgICA9IEVudmlyb25tZW50U2VydmljZS5nZXRGaWxlU2NoZW1lKCk7Ci0gICAgCi0gICAgY29tbWFuZE1hbmFnZXJfICA9IGNvbW1hbmRNYW5hZ2VyOwotICAgIHJlc291cmNlQ29udGV4dF8gPSByZXNvdXJjZUNvbnRleHQ7Ci0gICAgdXJpRmFjdG9yeV8gICAgICA9IG5ldyBTaW1wbGVVUklGYWN0b3J5KCk7Ci0gICAgc3RhdHVzSGFuZGxlcl8gICA9IHN0YXR1c0hhbmRsZXI7Ci0gICAgCi0gICAgdXJpRmFjdG9yeV8ucmVnaXN0ZXJTY2hlbWUoICJwbGF0Zm9ybSIsIGVjbGlwc2VTY2hlbWUgKTsKLSAgICB1cmlGYWN0b3J5Xy5yZWdpc3RlclNjaGVtZSggImZpbGUiLCBmaWxlU2NoZW1lICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5JRW52aXJvbm1lbnQjZ2V0Q29tbWFuZE1hbmFnZXIoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRNYW5hZ2VyIGdldENvbW1hbmRNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiBjb21tYW5kTWFuYWdlcl87Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uSUVudmlyb25tZW50I2dldExvZygpCi0gICAqLwotICBwdWJsaWMgSUxvZyBnZXRMb2coKQotICB7Ci0JICBpZiggbG9nZ2VyXyA9PSBudWxsICkKLSAgICB7ICAKLSAgICAgIGxvZ2dlcl8gPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOyAKLSAgICB9OwotCQotICAgIHJldHVybiBsb2dnZXJfOwotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gbG9nZ2VyIHRoZSBuZXcgbG9nZ2VyIGZvciB0aGlzIGVudmlyb25tZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nKCBJTG9nIGxvZ2dlciApCi0gIHsKLQlsb2dnZXJfID0gbG9nZ2VyOyAgCi0gIH0KLSAgIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uSUVudmlyb25tZW50I2dldFN0YXR1c0hhbmRsZXIoKQotICAgKi8KLSAgcHVibGljIElTdGF0dXNIYW5kbGVyIGdldFN0YXR1c0hhbmRsZXIoKQotICB7Ci0gICAgcmV0dXJuIHN0YXR1c0hhbmRsZXJfOwotICB9Ci0KLSAgLyoqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uSUVudmlyb25tZW50I2dldFVSSUZhY3RvcnkoKQotICAgKi8KLSAgcHVibGljIElVUklGYWN0b3J5IGdldFVSSUZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIHVyaUZhY3RvcnlfOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIFJlc291cmNlQ29udGV4dCBmb3IgdGhpcyBJRW52aXJvbm1lbnQuCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpCi0gIHsKLSAgICByZXR1cm4gcmVzb3VyY2VDb250ZXh0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29tbWFuZE1hbmFnZXIoIENvbW1hbmRNYW5hZ2VyIG1hbmFnZXIgKQotICB7Ci0JY29tbWFuZE1hbmFnZXJfID0gbWFuYWdlcjsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvRW52aXJvbm1lbnRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvRW52aXJvbm1lbnRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NDIxNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Vudmlyb25tZW50TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnZpcm9ubWVudE1hbmFnZXIKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gSUVudmlyb25tZW50IGZvciB0aGUgRWNsaXBzZSBub24tR1VJLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBCYXNlRWNsaXBzZUVudmlyb25tZW50IGdldE5ld0Vudmlyb25tZW50KCkKLSAgewotICAgIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgY29udGV4dCAgICAgICAgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgSUVjbGlwc2VTdGF0dXNIYW5kbGVyICAgICBoYW5kbGVyICAgICAgICA9IG5ldyBCYXNlU3RhdHVzSGFuZGxlcigpOwotICAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgZW52aXJvbm1lbnQgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCBjb250ZXh0LCBoYW5kbGVyICk7Ci0gICAgCi0gICAgcmV0dXJuIGVudmlyb25tZW50OyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9JRWNsaXBzZVN0YXR1c0hhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9JRWNsaXBzZVN0YXR1c0hhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4MDk4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvSUVjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLQotcHVibGljIGludGVyZmFjZSBJRWNsaXBzZVN0YXR1c0hhbmRsZXIgZXh0ZW5kcyBJU3RhdHVzSGFuZGxlcgotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgd29yc3Qgc3RhdHVzIHRoYXQgaGFzIGJlZW4gcmVwb3J0ZWQuCi0gICAqLwkKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCk7Ci0gIAotICAvKioKLSAgICogUmVzZXRzIHRoZSB3b3JzdCBzdGF0dXMgcmVwb3J0ZWQgdG8gYmUgT0suCi0gICAqCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXNldFN0YXR1cygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9wbHVnaW4vRW52UGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3BsdWdpbi9FbnZQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjllMTA3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3BsdWdpbi9FbnZQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnZQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEVudlBsdWdpbiBpbnN0YW5jZTsKLQotCS8qKgotCSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotCSAgKi8KLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiI7CQotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRW52UGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlpbnN0YW5jZSA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRW52UGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9wcmVmZXJlbmNlcy9BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9wcmVmZXJlbmNlcy9BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGYxYzE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MjIgICAxODQwMDYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBkZWZpbmUgcHJlZmVyZW5jZSBpZHMuIEl0IGNvcnJlc3BvbmRzIHRvIGluZm9ybWF0aW9uCi0gKiBzcGVjaWZpZWQgYnkgYSBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBleHRlbnNpb24gcG9pbnQuCi0gKiBFYWNoIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGVudHJ5IHdpbGwgcmVzdWx0IGluIGFuIGVudHJ5IGluIHRoZQotICogYWN0aW9uIGRpYWxvZ3MgcHJlZmVyZW5jZSBwYWdlIGlmIHRoZSBzaG93Y2hlY2tib3ggZmllbGQgaXMgdHJ1ZS4KLSAqICAgCi0gKiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuCi0gKiAKLSAqIDxwcmU+Ci0gICogICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIiZndDsKLSAqICAgICAmbHQ7YWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLSAqICAgICAgICAgICBzaG93Y2hlY2tib3g9InRydWUiCi0gKiAgICAgICAgICAgbmFtZT0iJUNIRUNLQk9YX1NIT1dfR0VORVJBVEVfSkFWQV9QUk9YWV9ESUFMT0ciCi0gKiAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkiCi0gKiAgICAgICAgICAgdG9vbHRpcD0iJVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9XU0RMMlBST1hZIgotICogICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5QUEFEMDAwNCIKLSAqICAgICAgICAgICBvYmplY3RpZHM9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC5maWxlIgotICogICAgICAgICAgIGFsd2F5c2hpZGU9ImZhbHNlIgotICogICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiJmd0OwotICogICAgICZsdDsvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUmZ3Q7Ci0gKiA8L3ByZT4KLSAqCi0gKiBUaGlzIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGV4dGVuc2lvbiBwb2ludCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gT2JqZWN0Q29udHJpYnV0aW9uCi0gKiBleHRlbnNpb24gcG9pbnQuICBGb3IgZXhhbXBsZTogCi0gKiAKLSAqICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICogICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAqICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiCi0gKiAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC5maWxlIj4KLSAqIDwhLS0gV1NETCBUbyBKYXZhIEJlYW4gUHJveHkgLS0+Ci0gKiAgICAgICAgPGFjdGlvbgotICogICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gKiAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAqICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gKiAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gKiAgICAgICAgPC9hY3Rpb24+Ci0gKiAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gKgotICogVGhlIE9iamVjdENvbnRyaWJ1dGlvbiBlbnRyeSBpcyBsaW5rZWQgd2l0aCB0aGUgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZW50cnkKLSAqIHZpYSB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBPYmplY3RDb250aXJidXRpb24gYW5kIHRoZSBpZCBhdHRyaWJ1dGUgb2YgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUuCi0gKiBOb3RlOiB0aGUgaWQgaW4gdGhlIGFjdGlvbiBlbnRyeSBpcyBhbHdheXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkeW5hbWljIHdpemFyZCB0aGF0Ci0gKiBzaG91bGQgYmUgcG9wdXBlZCB1cC4gIEluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSBPYmplY3Rpb25Db250cmlidXRpb24gaWQgYW5kIHRoZQotICogYWN0aW9uIGlkcyBhcmUgdGhlIHNhbWUsIGJ1dCB0aGlzIG5lZWQgbm90IGJlIHRoZSBjYXNlLiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotewotICBwcml2YXRlIFN0cmluZyAgaWRfOwotICBwcml2YXRlIFN0cmluZyAgbmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nICBpbmZvcG9wXzsKLSAgcHJpdmF0ZSBTdHJpbmcgIHRvb2x0aXBfOwotICBwcml2YXRlIGJvb2xlYW4gc2hvd0NoZWNrYm94XzsKLSAgcHJpdmF0ZSBib29sZWFuIGFsd2F5c0hpZGVfOwotICBwcml2YXRlIFN0cmluZyAgY2F0ZWdvcnlfOwotICBwcml2YXRlIEhhc2hTZXQgb2JqZWN0SWRzXyA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgcHVibGljIEhhc2hTZXQgZ2V0T2JqZWN0SWRzKCkKLSAgewotICAgIHJldHVybiBvYmplY3RJZHNfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRPYmplY3RJZCggU3RyaW5nIGlkICkKLSAgewotICAgIG9iamVjdElkc18uYWRkKCBpZCApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBpZCBmb3IgdGhpcyBwb3B1cCBhY3Rpb24uICBUaGlzIGlkIGxpbmsgdGhlIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2UKLSAgICogd2l0aCBhbiBPYmplY3RDb250cmlidXRpb24uCi0gICAqIEBwYXJhbSBpZCB0aGUgaWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICBpZF8gPSBpZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBpZCBmb3IgdGhpcyBwb3B1cCBhY3Rpb24uCi0gICAqIEByZXR1cm4gdGhlIGlkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gaWRfOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG5hbWUgZm9yIHRoaXMgcG9wdXAgYWN0aW9uLiAgVGhpcyBuYW1lIGlzIGRpc3BsYXllZCBvbiB0aGUKLSAgICogZGlhbG9nIHByZWZlcmVuY2VzIHBhZ2UgYW5kIG11c3QgYmUgdHJhbnNsYXRlZC4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHBvcHVwIGNoZWNrIGJveC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBuYW1lXyA9IG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgZGlzcGxheSB2YWx1ZSBmb3IgdGhpcyBwb3B1cCBjaGVjayBib3guCi0gICAqIE5vdGU6IHRoaXMgdmFsdWUgbWF5IGJlIG51bGwgaWYgdGhlIGdldFNob3dDaGVja0JveCBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgICogQHJldHVybiB0aGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZV87Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgaW5mbyBwb3AgdmFsdWUgZm9yIHRoaXMgcG9wdXAgY2hlY2sgYm94LgotICAgKiBAcGFyYW0gaW5mb3BvcAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5mb3BvcChTdHJpbmcgaW5mb3BvcCkKLSAgewotICAgIGluZm9wb3BfID0gaW5mb3BvcDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBpbmZvIHBvcCB2YWx1ZSBmb3IgdGhpcyBwb3B1cCBjaGVjayBib3guCi0gICAqIE5vdGU6IHRoaXMgdmFsdWUgbWF5IGJlIG51bGwgaWYgdGhlIGdldFNob3dDaGVja0JveCBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluZm9wb3AgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEluZm9wb3AoKQotICB7Ci0gICAgcmV0dXJuIGluZm9wb3BfOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHRvb2x0aXAgdmFsdWUgZm9yIHRoaXMgcG9wdXAgY2hlY2sgYm94LgotICAgKiBAcGFyYW0gdG9vbHRpcAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VG9vbHRpcChTdHJpbmcgdG9vbHRpcCkKLSAgewotICAgIHRvb2x0aXBfID0gdG9vbHRpcDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSB0b29sdGlwIHZhbHVlIGZvciB0aGlzIHBvcHVwIGNoZWNrIGJveC4KLSAgICogTm90ZTogdGhpcyB2YWx1ZSBtYXkgYmUgbnVsbCBpZiB0aGUgZ2V0U2hvd0NoZWNrQm94IG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgdG9vbHRpcCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbHRpcCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbHRpcF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBzaG93IGNoZWNrIGJveCB2YWx1ZSBmb3IgdGhpcyBwb3B1cC4gIElmIHRoZSB2YWx1ZSBpcyB0cnVlIHRoZW4KLSAgICogdGhpcyBwb3B1cCB3aWxsIGFwcGVhciBvbiBhbiBhY3Rpb24gZGlhbG9ncyBwcmVmZXJlbmNlIHBhZ2UuICBBbHNvIGlmIHRoaXMKLSAgICogdmFsdWUgaXMgdHJ1ZSBhbmQgdGhlIGFsd2F5cyBoaWRlIHZhbHVlIGlzIGZhbHNlIHRoZW4gYSBjaGVjayBib3ggd2lsbCBiZSBkaXNwbGF5ZWQKLSAgICogb24gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBwb3B1cCB3aGljaCBhc2tzIHRoZSB1c2VyIGlmIHRoZXkgd2FudCB0aGUgcG9wdXAKLSAgICogdG8gYmUgZGlzcGxheWVkIHRoZSBuZXh0IHRpbWUgYXJlIHRvIGp1c3QgZXhlY3V0ZSB0aGUgcG9wdXAgYWN0aW9uLgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIHNob3cgY2hlY2sgYm94IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0NoZWNrYm94KCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIHNob3dDaGVja2JveF8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldHMgdGhlIHNob3cgY2hlY2sgYm94IHZhbHVlLgotICAgKiBAcmV0dXJuIHRoZSBzaG93IGNoZWNrIGJveCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFNob3dDaGVja2JveCgpCi0gIHsKLSAgICByZXR1cm4gc2hvd0NoZWNrYm94XzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGFsd2F5cyBoaWRlIHZhbHVlLiAgVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhhdCB0aGUgcG9wdXAgc2hvdWxkIGFsd2F5cwotICAgKiBiZSBleGVjdXRlZCB3aXRob3V0IGJyaW5naW5nIHVwIHRoZSBwb3B1cCB3aXphcmQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgYWx3YXlzIGhpZGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBbHdheXNIaWRlKCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIGFsd2F5c0hpZGVfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBhbHdheXMgaGlkZSB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEFsd2F5c0hpZGUoKQotICB7Ci0gICAgcmV0dXJuIGFsd2F5c0hpZGVfOyAKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGNhdGVnb3J5IGlkIGZvciBwb3B1cCBhY3Rpb24uICBBbGwgcG9wdXAgYWN0aW9ucyB3aXRoIHRoZSBzYW1lCi0gICAqIGNhdGVnb3J5IGlkIHdpbGwgYmUgZ3JvdXBlZCB0b2dldGhlciBvbiB0aGUgc2FtZSBwb3B1cCBhY3Rpb24gcHJlZmVyZW5jZSBwYWdlLgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIGNhdGVnb3J5LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2F0ZWdvcnkoIFN0cmluZyB2YWx1ZSApCi0gIHsKLSAgICBjYXRlZ29yeV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBjYXRlZ29yeSBpZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0ZWdvcnkoKQotICB7Ci0gICAgcmV0dXJuIGNhdGVnb3J5XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOTNjZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0id3NleHBsb3Jlci1wcm9wZXJ0aWVzIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhYWUzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1iaW4KLWJ1aWxkCi13ZWJhcHBzCi10ZW1wLmZvbGRlcgotYnVpbGQueG1sCi0qLndhcgotZXhwbG9yZXJzcmMuemlwCi1qYXZhQ29tcGlsZXIuKi5hcmdzCi0qLmphcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyMTk5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNjhmNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU2F0IERlYyAyMiAxOTo1NjozNCBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMTYxMjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotI1dlZCBKdW4gMDYgMTQ6MzI6MzcgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnN0YW5jZS9vcmcuZWNsaXBzZS5jb3JlLm5ldC9vcmcuZWNsaXBzZS5jb3JlLm5ldC5oYXNNaWdyYXRlZD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMwMGY3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jRnJpIEp1biAwMyAwMDozMjowMiBFRFQgMjAwNQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxZTkzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6MDQgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTU3YzQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDUucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBleHBsb3Jlci5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuaGVscC5hcHBzZXJ2ZXI7YnVuZGxlLXZlcnNpb249IlszLjEuMTAwLDMuMi4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuYXBhY2hlLndzaWw0ajtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDEuMS4wKSIsCi0gb3JnLnVkZGk0ajtidW5kbGUtdmVyc2lvbj0iWzIuMC40LDIuMS4wKSIsCi0gb3JnLmFwYWNoZS5heGlzO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuamV0dHksCi0gb3JnLmVjbGlwc2UuZXF1aW5veC5qc3AuamFzcGVyLnJlZ2lzdHJ5LAotIG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotSW1wb3J0LVBhY2thZ2U6IGphdmF4LnNlcnZsZXQ7dmVyc2lvbj0iMi40LjAiLAotIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSIyLjQuMCIsCi0gb3JnLm9zZ2kuc2VydmljZS5odHRwO3ZlcnNpb249IjEuMi4wIgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MDZkZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5leHBsb3Jlci5qYXIgPSBzcmMvLHdzZXhwbG9yZXItcHJvcGVydGllcy8KLWphcnMuY29tcGlsZS5vcmRlciA9IGV4cGxvcmVyLmphcgotICAgICAgICAgICAgICAgICAgICAgCi1vdXRwdXQud3NleHBsb3Jlci9XRUItSU5GL2xpYi93c2V4cGxvcmVyLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBleHBsb3Jlci5qYXIsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcHJvcGVydGllcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHdzZXhwbG9yZXIvLFwKLSAgICAgICAgICAgICAgIHdzZXhwbG9yZXItcHJvcGVydGllcy8KLQotCi1jdXN0b21CdWlsZENhbGxiYWNrcz1idWlsZEpTUHMueG1sCi0KLQotc3JjLmluY2x1ZGVzID0gc2NoZW1hLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGRKU1BzLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkSlNQcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNGJhMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGRKU1BzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBBbnQgYnVpbGQgc2NyaXB0IGZvciBKU1BzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTxwcm9qZWN0IG5hbWU9IkpTUCBCdWlsZCI+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFdvcmtzcGFjZSAoZGV2KSBidWlsZDsgY2FsbGVkIGFzIGFuIEFudCBidWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KLQotCQk8IS0tIENvbnN0cnVjdCB0aGUgZnVsbCBjbGFzc3BhdGggLS0+Ci0JCTxwYXRoIGlkPSJleHBsb3Jlci5qYXIuY2xhc3NwYXRoIiA+Ci0JCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHt0YXJnZXQuZm9sZGVyfSIvPgotCQkJPGRpcnNldCBkaXI9IiR7d29ya3NwYWNlX2xvY30iPgotCQkJCTxwYXR0ZXJuc2V0PgotCQkJCQk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYmluIi8+Ci0JCQkJCQotCQkJCTwvcGF0dGVybnNldD4KLQkJCTwvZGlyc2V0PgotCQkJPGZpbGVzZXQgZGlyPSIke3RhcmdldF9ob21lfS9wbHVnaW5zIj4KLQkJCQk8cGF0dGVybnNldD4KLQkJCQkJPGluY2x1ZGUgbmFtZT0iamF2YXguc2VydmxldCouamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9ImphdmF4LnNlcnZsZXQuanNwKi5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmFwYWNoZS5hbnQqL2xpYi9hbnQuamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5hcGFjaGUuY29tbW9ucy5lbCouamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nKi5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmFwYWNoZS5qYXNwZXIqLmphciIvPgotCQkJCQkKLQkJCQk8L3BhdHRlcm5zZXQ+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvcGF0aD4KLQotCQk8IS0tIENvbXBpbGUgdGhlIEpTUHMgLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZSI+Ci0JCQk8cmVmZXJlbmNlIHJlZmlkPSJleHBsb3Jlci5qYXIuY2xhc3NwYXRoIi8+Ci0JCTwvYW50Y2FsbD4KLQkJCi0JPC90YXJnZXQ+Ci0KLQk8cHJvcGVydHkgbmFtZT0id3NleHBsb3JlckRpciIgdmFsdWU9IiR7YmFzZWRpcn0vd3NleHBsb3JlciIvPgotCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gQ29tcGlsZSB0aGUgSlNQcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSI+Ci0JCQotCQk8IS0tIEludm9rZSBKYXNwZXIgY29tcGlsZXIgLS0+Ci0JCTxqYXZhCi0JCQljbGFzc25hbWU9Im9yZy5hcGFjaGUuamFzcGVyLkpzcEMiCi0JCQljbGFzc3BhdGhyZWY9ImV4cGxvcmVyLmphci5jbGFzc3BhdGgiCi0JCQlmb3JrPSJ0cnVlIgotCQkJZmFpbG9uZXJyb3I9InRydWUiPgotCQkJPGFyZyB2YWx1ZT0iLWNvbXBpbGUiLz4KLQkJCTxhcmcgdmFsdWU9Ii1kIi8+Ci0JCQk8YXJnIHZhbHVlPSIke3dzZXhwbG9yZXJEaXJ9IiAvPgotCQkJPGFyZyB2YWx1ZT0iLXAiLz4KLQkJCTxhcmcgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5qc3AiLz4KLQkJCTxhcmcgdmFsdWU9Ii13ZWJhcHAiLz4KLQkJCTxhcmcgdmFsdWU9IiR7d3NleHBsb3JlckRpcn0iLz4KLQkJCTxhcmcgdmFsdWU9Ii1kaWUiLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7dGFyZ2V0LmZvbGRlcn0iLz4KLQkJCQk8ZGlyc2V0IGRpcj0iJHtiYXNlZGlyfSI+Ci0JCQkJCQk8aW5jbHVkZSBuYW1lPSIqL0Bkb3QiIC8+Ci0JCQkJPC9kaXJzZXQ+Ci0JCQkJPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9Ij4KLQkJCQkJCTxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPiAKLQkJCQk8L2ZpbGVzZXQ+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCQkKLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGJ1aWxkLmphcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIGZvbGRlciB0byBjb250YWluIHRoZSBidWlsZCByZXN1bHRzICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5idWlsZC5qYXJzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBidWlsZC5qYXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIHRvIGNvbnRhaW4gdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5idWlsZC5qYXJzIj4KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGJ1aWxkLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIGZvbGRlciB0byBjb250YWluIHRoZSBidWlsZCByZXN1bHRzICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5idWlsZC5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBidWlsZC5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIHRvIGNvbnRhaW4gdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5idWlsZC5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSBjb21waWxhdGlvbiB0YXJnZXQgPG5hbWU+ICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gU3Vic3RpdHV0ZSAibmFtZSIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24gdGFyZ2V0LCBlZyBAZG90ICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBzb3VyY2UuZm9sZGVybiA6IG4gPSAxIC4uLiBOLCB0aGUgc291cmNlIGZvbGRlcnMgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICB0YXJnZXQuZm9sZGVyICA6IHdoZXJlIHRoZSByZXN1bHRzIG9mIHRoZSBjb21waWxhdGlvbiBnbyAgICAgICAgICAgIC0tPgotCTwhLS0gICA8bmFtZT4uY2xhc3NwYXRoIDogbmFtZSA9IG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHRhcmdldC4gQSAgICAgICAgIC0tPgotCTwhLS0gICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBjbGFzc3BhdGggc3RydWN0dXJlLiAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmV4cGxvcmVyLmphciI+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGR1cmluZyB0aGUgY29tcGlsYXRpb24gdGFyZ2V0IDxuYW1lPiwgYWZ0ZXIgdGhlIGNvbXBpbGUgICAtLT4KLQk8IS0tIGJ1dCBiZWZvcmUgamFyaW5nLiAgU3Vic3RpdHV0ZSAibmFtZSIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24tLT4KLQk8IS0tIHRhcmdldCwgZWcgQGRvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgc291cmNlLmZvbGRlcm4gOiBuID0gMSAuLi4gTiwgdGhlIHNvdXJjZSBmb2xkZXJzICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgdGFyZ2V0LmZvbGRlciAgOiB3aGVyZSB0aGUgcmVzdWx0cyBvZiB0aGUgY29tcGlsYXRpb24gZ28gICAgICAgICAgICAtLT4KLQk8IS0tICAgPG5hbWU+LmNsYXNzcGF0aCA6IG5hbWUgPSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiB0YXJnZXQuIEEgICAgICAgICAtLT4KLQk8IS0tICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byB0aGUgY2xhc3NwYXRoIHN0cnVjdHVyZS4gICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuY29tcGlsZS5leHBsb3Jlci5qYXIiPgotCQkKLQkJPCEtLSBDb21waWxlIHRoZSBKU1BzIC0tPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUiPgotCQkJPHJlZmVyZW5jZSByZWZpZD0iZXhwbG9yZXIuamFyLmNsYXNzcGF0aCIvPgotCQk8L2FudGNhbGw+Ci0JCQotCQk8IS0tIEpzcEMgYWx3YXlzIGdlbmVyYXRlcyAuamF2YSBmaWxlczsgZGVsZXRlIHRoZW0gLS0+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7dGFyZ2V0LmZvbGRlcn0iIGluY2x1ZGVzPSIqKi8qLmphdmEiLz4KLQkJPC9kZWxldGU+Ci0KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHRoZSBjb21waWxhdGlvbiB0YXJnZXQgPG5hbWU+ICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIFN1YnN0aXR1dGUgIm5hbWUiIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHRhcmdldCwgZWcgQGRvdCAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgamFyLmxvY2F0aW9uIC0gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21waWxhdGlvbiByZXN1bHRzICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgPG5hbWU+LmNsYXNzcGF0aCA6IG5hbWUgPSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiB0YXJnZXQuIEEgICAgICAgICAtLT4KLQk8IS0tICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byB0aGUgY2xhc3NwYXRoIHN0cnVjdHVyZS4gICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuZXhwbG9yZXIuamFyIj4KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGdhdGhlci5iaW4ucGFydHMgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGJ1aWxkLnJlc3VsdC5mb2xkZXIgLSBmb2xkZXIgY29udGFpbmluZyB0aGUgYnVpbGQgcmVzdWx0cyAgICAgICAgICAgLS0+Ci0JPCEtLSAgIHRhcmdldC5mb2xkZXIgLSBkZXN0aW5hdGlvbiBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwcmUuZ2F0aGVyLmJpbi5wYXJ0cyI+Ci0JPC90YXJnZXQ+Ci0JCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIuYmluLnBhcnRzICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gICB0YXJnZXQuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIuYmluLnBhcnRzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSB0YXJnZXQgZ2F0aGVyLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmdhdGhlci5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIuc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIuc291cmNlcyI+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGdhdGhlci5sb2dzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgZGVzdGluYXRpb24udGVtcC5mb2xkZXIgLSBkZXN0aW5hdGlvbiBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5nYXRoZXIubG9ncyI+ICAgICAgICAKLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIubG9ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIubG9ncyI+ICAgICAgIAotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgdGhlIHRhcmdldCBjbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGRlc3RpbmF0aW9uLnRlbXAuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwcmUuY2xlYW4iPiAgICAgICAgICAgICAgCi0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHRoZSB0YXJnZXQgY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgcGx1Z2luLmRlc3RpbmF0aW9uIC0gZmluYWwgZGVzdGluYXRpb24gb2YgdGhlIGJ1aWxkICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIHJlc3VsdHMgb2YgdGhlIGNvbXBpbGF0aW9uICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgdGVtcC5mb2xkZXIgLSB0ZW1wb3JhcnkgZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuY2xlYW4iPiAgICAgICAgICAgICAKLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0icHJlLndzZXhwbG9yZXItcHJvcGVydGllcy5qYXIiPiAgICAgICAgICAgICAgCi0JCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0icG9zdC53c2V4cGxvcmVyLXByb3BlcnRpZXMuamFyIj4gICAgICAgICAgICAgIAotCQkJPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LmNvbXBpbGUud3NleHBsb3Jlci1wcm9wZXJ0aWVzLmphciI+ICAgICAgICAgICAgICAKLQkJCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9pY29ucy9ldG9vbDE2L2xhdW5jaF93c19leHBsb3Jlci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9pY29ucy9ldG9vbDE2L2xhdW5jaF93c19leHBsb3Jlci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYTBiYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvaWNvbnMvZXRvb2wxNi9sYXVuY2hfd3NfZXhwbG9yZXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5ODZkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotIyAyMDA3MDgyMCAgIDE5MTU4NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVhQX1dTRV9UUkFOU1BPUlRfUFJPVklERVI9V2ViIFNlcnZpY2VzIEV4cGxvcmVyIFRyYW5zcG9ydCBQcm92aWRlcgotU09BUF9UUkFOU1BPUlRfUFJPVklERVI9RGVmYXVsdCBTT0FQIFRyYW5zcG9ydCBQcm92aWRlcgotCi0jCi0jIE1lc3NhZ2VzIGZvciB0aGUgY2xpZW50IHR5cGUgZXh0ZW5zaW9uCi0jCi1XRUJTRVJWSUNFQ0xJRU5UVFlQRV9OQU1FX1dTRVhQTE9SRVI9U3R1Ymxlc3MgKFdlYiBTZXJ2aWNlcyBFeHBsb3JlcikKLVRBU0tfTEFCRUxfRVhQTE9SRV9XU0RMX1VTSU5HX1dTRT1FeHBsb3JlciBXU0RMIHVzaW5nIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4KLQotIwotIyBNZXNzYWdlcyBmb3IgdGhlIFdTRXhwbG9yZXIgdHlwZSBleHRlbnNpb24KLSMKLU1TR19FUlJPUl9MQVVOQ0hfV1NFWFBMT1JFUj1JV0FCMDM2NkUgVW5hYmxlIHRvIGxhdW5jaCBXZWIgU2VydmljZXMgRXhwbG9yZXIuCi1NU0dfRVJST1JfTE9BRF9MQVVOQ0hfT1BUSU9OUz1JV0FCMDM2N0UgVW5hYmxlIHRvIGxvYWQgbGF1bmNoIG9wdGlvbnMuCi1NU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTg9QnJva2VuIFZNIGRvZXMgbm90IHN1cHBvcnQgVVRGLTguCi0KLSMKLSMgTWVzc2FnZXMgZm9yIHBvcHVwIGFjdGlvbiAoVGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcikKLSMKLVBPUFVQX1RFU1RfV1NETD1UZXN0IHdpdGggV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0KLSMKLSMgU09BUCB0cmFuc3BvcnQgbWVzc2FnZXMKLSMKLU1TR19FUlJPUl9VTlNVUFBPUlRFRF9CSU5ESU5HPXswfSBiaW5kaW5nIGlzIHVuc3VwcG9ydGVkLgotTVNHX0VSUk9SX1VOU1VQUE9SVEVEX1RSQU5TUE9SVD17MH0gdHJhbnNwb3J0IGlzIHVuc3VwcG9ydGVkLgotCi0jCi0jIFdlYlNlcnZpY2VQdWJsaXNoUGFnZQotIwotVE9PTFRJUF9MQVVOQ0hfV1NfRVhQTE9SRVI9TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLUNPTU1BTkRfTEFVTkNIX1dTX0VYUExPUkVSPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0KLSMKLSMgUG9wLXVwIGFjdGlvbnMKLSMKLU1FTlVfUlVOPSZSdW4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmODRjMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NlVHJhbnNwb3J0UHJvdmlkZXIiIG5hbWU9IiVYUF9XU0VfVFJBTlNQT1JUX1BST1ZJREVSIiBzY2hlbWE9InNjaGVtYS93c2VUcmFuc3BvcnRQcm92aWRlci5leHNkIi8+Ci0KLSAgICAKLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIEV4dGVuc2lvbiBwb2ludDogRWNsaXBzZSBQb3B1cCBBY3Rpb24gKG9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMpIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudWkuYWN0aW9uLldTRExGaWxlTWVudS5maWxlLndzZGwiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbCIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLmFjdGlvbi5XU0RMRmlsZU1lbnUud3NkbHJlcyI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX1RFU1RfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudWkuYWN0aW9uLldTRExGaWxlTWVudS5zZXJ2aWNlIgotICAgICAgICAgICAgYWRhcHRhYmxlPSJ0cnVlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfVEVTVF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLndzZVRyYW5zcG9ydFByb3ZpZGVyIj4KLSAgICAgIDxzb2FwVHJhbnNwb3J0UHJvdmlkZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQuU09BUFRyYW5zcG9ydFByb3ZpZGVyIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5zb2FwVHJhbnNwb3J0UHJvdmlkZXIiCi0gICAgICAgICAgICBuYW1lPSIlU09BUF9UUkFOU1BPUlRfUFJPVklERVIiCi0gICAgICAgICAgICBuYW1lc3BhY2VVUkk9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0gICAgICAgICAgICB0cmFuc3BvcnRVUkk9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5Lmh0dHBjb250ZXh0cyI+Ci0gICAgICA8aHR0cGNvbnRleHQKLSAgICAgICAgICAgIGlkPSJ3c2UiPgotICAgICAgICAgPHJlc291cmNlLW1hcHBpbmcKLSAgICAgICAgICAgICAgIHBhdGg9Ii93c2V4cGxvcmVyIj4KLSAgICAgICAgIDwvcmVzb3VyY2UtbWFwcGluZz4KLSAgICAgIDwvaHR0cGNvbnRleHQ+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnkucmVzb3VyY2VzIj4KLSAgICAgIDxyZXNvdXJjZQotICAgICAgICAgICAgYWxpYXM9Ii8iCi0gICAgICAgICAgICBiYXNlLW5hbWU9Ii8iCi0gICAgICAgICAgICBodHRwY29udGV4dElkPSJ3c2UiPgotICAgICAgPC9yZXNvdXJjZT4KLSAgICAgIDxzZXJ2aWNlU2VsZWN0b3IKLSAgICAgICAgICAgIGZpbHRlcj0iKG90aGVyLmluZm89b3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyKSI+Ci0gICAgICA8L3NlcnZpY2VTZWxlY3Rvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeS5zZXJ2bGV0cyI+Ci0gICAgICA8c2VydmxldAotICAgICAgICAgICAgYWxpYXM9Ii8qLmpzcCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5lcXVpbm94LmpzcC5qYXNwZXIucmVnaXN0cnkuSlNQRmFjdG9yeTovIgotICAgICAgICAgICAgaHR0cGNvbnRleHRJZD0id3NlIj4KLSAgICAgIDwvc2VydmxldD4KLSAgICAgIDxzZXJ2aWNlU2VsZWN0b3IKLSAgICAgICAgICAgIGZpbHRlcj0iKG90aGVyLmluZm89b3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyKSI+Ci0gICAgICA8L3NlcnZpY2VTZWxlY3Rvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVFeHRlbnNpb25zIj4KLSAgICAgIDxwZXJzcGVjdGl2ZUV4dGVuc2lvbgotICAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLkoyRUVQZXJzcGVjdGl2ZSI+Ci0gICAgICAgICA8YWN0aW9uU2V0Ci0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyIj4KLSAgICAgICAgIDwvYWN0aW9uU2V0PgotICAgICAgPC9wZXJzcGVjdGl2ZUV4dGVuc2lvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICAKLSAgICA8IS0tIE1haW4gTWVudSBBY3Rpb25zIC0tPgotCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXRzIj4KLQotICAgICAgPGFjdGlvblNldAotICAgICAgICAgICAgbGFiZWw9IiVDT01NQU5EX0xBVU5DSF9XU19FWFBMT1JFUiIKLSAgICAgICAgICAgIHZpc2libGU9ImZhbHNlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5leHBsb3JlciI+Ci0gICAgICAgICA8bWVudQotICAgICAgICAgICAgICAgbGFiZWw9IiVNRU5VX1JVTiIKLSAgICAgICAgICAgICAgIHBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS5ydW4iPgotICAgICAgICAgICAgPHNlcGFyYXRvciBuYW1lPSJleHBsb3JlciI+Ci0gICAgICAgICAgICA8L3NlcGFyYXRvcj4KLSAgICAgICAgIDwvbWVudT4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQ09NTUFORF9MQVVOQ0hfV1NfRVhQTE9SRVIiCi0gICAgICAgICAgICAgICBpY29uPSJpY29ucy9ldG9vbDE2L2xhdW5jaF93c19leHBsb3Jlci5naWYiCi0gICAgICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9MQVVOQ0hfV1NfRVhQTE9SRVIiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLmFjdGlvbi5MYXVuY2hXU0VBY3Rpb24iCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UudWkucnVuL2V4cGxvcmVyIgotICAgICAgICAgICAgICAgdG9vbGJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuYWN0aW9uLkxhdW5jaFdTRUFjdGlvbiI+Ci0gICAgICAgIDwvYWN0aW9uPgotICAgICA8L2FjdGlvblNldD4KLQotICAgPC9leHRlbnNpb24+Ci0gICAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcHJvcGVydGllcy9mYXZvcml0ZXNfZGVmYXVsdC53c2lsIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcHJvcGVydGllcy9mYXZvcml0ZXNfZGVmYXVsdC53c2lsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI3MDJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3Byb3BlcnRpZXMvZmF2b3JpdGVzX2RlZmF1bHQud3NpbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08aW5zcGVjdGlvbiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uLyIKLSAgeG1sbnM6d3NpbHdzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi93c2RsLyIKLSAgeG1sbnM6d3NpbHVkZGk9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi91ZGRpLyIKLSAgeG1sbnM6dWRkaT0idXJuOnVkZGktb3JnOmFwaSI+Ci0gIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPnY1XzBfMV8wPC9hYnN0cmFjdD4KLQotICAgPGxpbmsgcmVmZXJlbmNlZE5hbWVzcGFjZT0idXJuOnVkZGktb3JnOmFwaSI+Ci0gICAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+JVJlZ2lzdHJ5IE5hbWU8L2Fic3RyYWN0PgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPkZpbGwgSW4gSW5xdWlyeSBVUkw8L2Fic3RyYWN0PgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPkZpbGwgSW4gUHVibGlzaCBVUkw8L2Fic3RyYWN0PgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPkZpbGUgSW4gU2l0ZTwvYWJzdHJhY3Q+Ci0gIDwvbGluaz4KLQotIAotCi0gIDxsaW5rIHJlZmVyZW5jZWROYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi8iIGxvY2F0aW9uPSJodHRwOi8vd3d3LnhtZXRob2RzLmNvbS9pbnNwZWN0aW9uLndzaWwiLz4KLTwvaW5zcGVjdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NjaGVtYS93c2VUcmFuc3BvcnRQcm92aWRlci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2NoZW1hL3dzZVRyYW5zcG9ydFByb3ZpZGVyLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmVlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2NoZW1hL3dzZVRyYW5zcG9ydFByb3ZpZGVyLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiIGlkPSJ3c2VUcmFuc3BvcnRQcm92aWRlciIgbmFtZT0iV2ViIFNlcnZpY2VzIEV4cGxvcmVyIFRyYW5zcG9ydCBQcm92aWRlciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgZGVzY3JpcHRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzb2FwVHJhbnNwb3J0UHJvdmlkZXIiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBbiBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGlzIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgbmFtZSB0aGlzIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InNvYXBUcmFuc3BvcnRQcm92aWRlciI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZW50cnkgYWxsb3dzIGFuIGV4dGVuZGVyIHRvIHBsdWcgaW4gYSBuZXcgZmFjdG9yeSBmb3IgY3JlYXRpbmcgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydCBpbnN0YW5jZXMuICBUaGUgSVNPQVBUcmFucG9ydCBpcyB1c2VkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZm9yIGludm9raW5nIHdlYiBzZXJ2aWNlcyBvcGVyYXRpb25zIHRoYXQgdXNlcyB0aGUgU09BUCBtZXNzYWdlIHByb3RvY29sLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGNsYXNzIG11c3QgaW1wbGVtZW50IHRoZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXIgaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpZCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgc29hcFRyYW5zcG9ydFByb3ZpZGVyIGVsZW1lbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGlzIHNvYXBUcmFuc3BvcnRQcm92aWRlciBlbGVtZW50LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlVVJJIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSBzb2FwOmJpbmRpbmcgZWxlbWVudCB0aGF0IHRoaXMgdHJhbnNwb3J0IHByb3ZpZGVyIGNsYWltcyBzdXBwb3J0IGZvci4gIEZvciBleGFtcGxlLCBpZiB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBzdXBwb3J0cyB0aGUgU09BUCAxLjEgYmluZGluZywgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdvdWxkIGJlIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8uICBJZiB1bnNwZWNpZmllZCwgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgY2xhaW1zIHN1cHBvcnQgZm9yIGFsbCBTT0FQIGJpbmRpbmdzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRyYW5zcG9ydFVSSSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgdHJhbnNwb3J0IHByb3RvY29sIFVSSSBvZiB0aGUgc29hcDpiaW5kaW5nIGVsZW1lbnQgdGhhdCB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBjbGFpbXMgc3VwcG9ydCBmb3IuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgc3VwcG9ydHMgU09BUCBvdmVyIEhUVFAsIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSB3b3VsZCBiZSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAuICBJZiB1bnNwZWNpZmllZCwgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgY2xhaW1zIHN1cHBvcnQgZm9yIGFsbCB0cmFuc3BvcnQgcHJvdG9jb2xzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NlcnZsZXRhcGkvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0LmFwaV8xLjAuMC52MjAwNjAyMDYuamFyIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2VydmxldGFwaS9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXQuYXBpXzEuMC4wLnYyMDA2MDIwNi5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYWQ1NzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2VydmxldGFwaS9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXQuYXBpXzEuMC4wLnYyMDA2MDIwNi5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0pldHR5UnVubmFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvSmV0dHlSdW5uYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzc0MmM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvSmV0dHlSdW5uYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuaGVscC5pbnRlcm5hbC5hcHBzZXJ2ZXIuQXBwc2VydmVyUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBKZXR0eVJ1bm5hYmxlIHsKLQotCXByaXZhdGUgc3RhdGljIEpldHR5UnVubmFibGUgamV0dHlSdW5uYWJsZV87Ci0KLQlwcml2YXRlIEpldHR5UnVubmFibGUoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBKZXR0eVJ1bm5hYmxlIGdldEpldHR5UnVubmFibGUoKSB7Ci0JCWlmIChqZXR0eVJ1bm5hYmxlXyA9PSBudWxsKSB7Ci0JCQlqZXR0eVJ1bm5hYmxlXyA9IG5ldyBKZXR0eVJ1bm5hYmxlKCk7Ci0JCQlqZXR0eVJ1bm5hYmxlXy5pbml0KCk7Ci0JCX0KLQkJcmV0dXJuIGpldHR5UnVubmFibGVfOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzSmV0dHlTdGFydGVkKCkgewotCQl0cnkgewotCQkJcmV0dXJuIEFwcHNlcnZlclBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QXBwU2VydmVyKCkuaXNSdW5uaW5nKCk7Ci0JCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgaW50IGdldEpldHR5UG9ydCgpIHsKLQkJcmV0dXJuIFdlYmFwcE1hbmFnZXIuZ2V0UG9ydCgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SmV0dHlIb3N0KCkgewotCQlyZXR1cm4gV2ViYXBwTWFuYWdlci5nZXRIb3N0KCk7Ci0JfQotCi0JCi0JcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JCXRyeSB7Ci0JCQlXZWJhcHBNYW5hZ2VyLnN0YXJ0KCJ3c2UiKTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaE9wdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjY2ZWRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXlAY2EuaWJtLmNvbQotICogCi0gKiBUaGlzIHNpbXBsZSBjbGFzcyBpcyB1c2VkIHRvIGhvbGQgYSBzaW5nbGUgV2ViIFNlcnZpY2VzCi0gKiBFeHBsb3JlciBsYXVuY2ggb3B0aW9uIHByb3BlcnR5IGFuZCBpdHMgdmFsdWUuIEFsbG93ZWQKLSAqIGxhdW5jaCBvcHRpb24gcHJvcGVydGllcyBhcmUgZGVmaW5lZCBieQotICogPGNvZGU+e0BsaW5rIExhdW5jaE9wdGlvbnN9PC9jb2RlPi4KLSAqLwotcHVibGljIGNsYXNzIExhdW5jaE9wdGlvbiB7Ci0JcHJpdmF0ZSBTdHJpbmcga2V5XzsKLQotCXByaXZhdGUgU3RyaW5nIG9wdGlvbl87Ci0KLQkvKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgbGF1bmNoIG9wdGlvbiB3aXRoIHRoZSBnaXZlbgotCSAqIHByb3BlcnR5IG5hbWUgYW5kIHZhbHVlLiAKLQkgKi8KLQlwdWJsaWMgTGF1bmNoT3B0aW9uKFN0cmluZyBrZXksIFN0cmluZyBvcHRpb24pIHsKLQkJa2V5XyA9IGtleTsKLQkJb3B0aW9uXyA9IG9wdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoaXMgbGF1bmNoIG9wdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSBuYW1lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgewotCQlyZXR1cm4ga2V5XzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGlzIGxhdW5jaCBvcHRpb24uCi0JICogQHJldHVybiBUaGUgcHJvcGVydHkgdmFsdWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRPcHRpb24oKSB7Ci0JCXJldHVybiBvcHRpb25fOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9ucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MmYwM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXlAY2EuaWJtLmNvbQotICogCi0gKiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIHByb3BlcnR5IG5hbWVzIHVuZGVyc3Rvb2QgYnkgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotICogYW5kIHVzZWQgdG8gY29uZmlndXJlIGl0J3MgaW5pdGlhbCBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvdXIgYXQgdGhlIHRpbWUgaXQgaXMKLSAqIGxhdW5jaGVkLgotICogQHNlZSBMYXVuY2hPcHRpb24KLSAqLwotcHVibGljIGNsYXNzIExhdW5jaE9wdGlvbnMgewotCS8vIEdlbmVyYWwgcHVycG9zZSBwcmVsb2FkIGNvbnN0YW50cwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVRFX0xPQ0FUSU9OID0gInN0YXRlTG9jYXRpb24iOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRkFWT1JJVEVTX0xPQ0FUSU9OID0gImRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiI7Ci0JCi0JLy8gV1NETCBQYWdlIHByZWxvYWQgY29uc3RhbnRzCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX1VSTCA9ICJ3c2RsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdFQl9TRVJWSUNFX0VORFBPSU5UID0gIndlYlNlcnZpY2VFbmRwb2ludCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX1FOQU1FX1NUUklORyA9ICJzZXJ2aWNlUU5hbWVTdHJpbmciOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklORElOR19OQU1FX1NUUklORyA9ICJiaW5kaW5nTmFtZVN0cmluZyI7Ci0KLQkvLyBVRERJIFBhZ2UgcHJlbG9hZCBjb25zdGFudHMKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOUVVJUllfVVJMID0gImlucXVpcnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSF9VUkwgPSAicHVibGlzaCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX05BTUUgPSAic2VydmljZU5hbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9LRVkgPSAic2VydmljZUtleSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SSUVTX0RJUkVDVE9SWSA9ICJjYXRlZ29yaWVzRGlyZWN0b3J5IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkUnVubmFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkUnVubmFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4YjY5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaFdpemFyZFJ1bm5hYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLQotcHVibGljIGNsYXNzIExhdW5jaFdpemFyZFJ1bm5hYmxlIGV4dGVuZHMgVGhyZWFkIGltcGxlbWVudHMgUnVubmFibGUgewotCXByaXZhdGUgU3RyaW5nIGlkOwotCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTDsKLQotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2g7Ci0KLQlwdWJsaWMgTGF1bmNoV2l6YXJkUnVubmFibGUoU3RyaW5nIGlkLCBTdHJpbmcgd3NkbFVSTCkgewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMud3NkbFVSTCA9ICh3c2RsVVJMICE9IG51bGwpID8gd3NkbFVSTCA6ICIiOwotCQlmaW5pc2ggPSBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaCgpIHsKLQkJcmV0dXJuIGZpbmlzaDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCXRyeSB7Ci0JCQlEeW5hbWljV2l6YXJkIHdpemFyZCA9IG5ldyBEeW5hbWljV2l6YXJkKCk7Ci0JCQl3aXphcmQuc2V0SW5pdGlhbERhdGEoaWQpOwotCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24od3NkbFVSTCk7Ci0JCQl3aXphcmQuaW5pdChudWxsLCBzZWwpOwotCQkJV2l6YXJkRGlhbG9nIHdkID0gbmV3IFdpemFyZERpYWxvZyhuZXcgU2hlbGwoRGlzcGxheS5nZXREZWZhdWx0KCksCi0JCQkJCVNXVC5BUFBMSUNBVElPTl9NT0RBTCksIHdpemFyZCk7Ci0JCQl3ZC5vcGVuKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCX0gZmluYWxseSB7Ci0JCQlmaW5pc2ggPSB0cnVlOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hXaXphcmRUYXNrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaFdpemFyZFRhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAyMTUzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaFdpemFyZFRhc2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hXaXphcmRUYXNrIHsKLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBMYXVuY2hXaXphcmRUYXNrIHRhc2tfOwotCi0JLy8gdGhlIHNoZWxsIGZvciB0aGUgd2l6YXJkIHRvIGJlIGxhdW5jaGVkCi0JcHJpdmF0ZSBTaGVsbCBzaGVsbF87Ci0KLQkvLyB0aGUgTGF1bmNoV2l6YXJkUnVubmFibGUgdGhhdCBpcyBjdXJyZW50bHkgcnVubmluZwotCXByaXZhdGUgTGF1bmNoV2l6YXJkUnVubmFibGUgcnVubmFibGVfOwotCi0JcHJpdmF0ZSBMYXVuY2hXaXphcmRUYXNrKFNoZWxsIHNoZWxsKSB7Ci0JCXNoZWxsXyA9IHNoZWxsOwotCQlydW5uYWJsZV8gPSBudWxsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGF1bmNoV2l6YXJkVGFzayBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKHRhc2tfID09IG51bGwpCi0JCQl0YXNrXyA9IG5ldyBMYXVuY2hXaXphcmRUYXNrKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkKLQkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotCQlyZXR1cm4gdGFza187Ci0JfQotCi0JcHVibGljIHZvaWQgYXN5bmNFeGVjKFJ1bm5hYmxlIHJ1bm5hYmxlKSB0aHJvd3MgU1dURXhjZXB0aW9uIHsKLQkJc2hlbGxfLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNoZWNrQW5kQXN5bmNFeGVjKExhdW5jaFdpemFyZFJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0JCXRyeSB7Ci0JCQlpZiAoIWdldElzRXhlY3V0aW5nKCkpIHsKLQkJCQlhc3luY0V4ZWMocnVubmFibGUpOwotCQkJCXJ1bm5hYmxlXyA9IHJ1bm5hYmxlOwotCQkJCXJldHVybiB0cnVlOwotCQkJfSBlbHNlCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0SXNFeGVjdXRpbmcoKSB7Ci0JCWlmIChydW5uYWJsZV8gIT0gbnVsbCkgewotCQkJYm9vbGVhbiBpc0ZpbmlzaCA9IHJ1bm5hYmxlXy5pc0ZpbmlzaCgpOwotCQkJaWYgKGlzRmluaXNoKQotCQkJCXJ1bm5hYmxlXyA9IG51bGw7Ci0JCQlyZXR1cm4gIWlzRmluaXNoOwotCQl9IGVsc2UKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDJjNGYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyMSAgIDE1MTQwOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IG9wZW4gaW4gZXh0ZXJuYWwgYnJvd3NlciBvbiBSSAotICogMjAwNjA4MDIgICAxNTA0Mjggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MTIxOSAgIDE2ODYyMCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IG9wZW4gaW4gZXh0ZXJuYWwgYnJvd3NlciBvbiBMaW51eAotICogMjAwNzAyMjAgICAxNjg2MjAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRSBkb2VzIG5vdCBvcGVuIGluIGV4dGVybmFsIGJyb3dzZXIgb24gTGludXggKGNvbnQuKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3JlcjsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYnJvd3Nlci5JV2ViQnJvd3NlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5icm93c2VyLklXb3JrYmVuY2hCcm93c2VyU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgV1NFeHBsb3JlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgV1NFeHBsb3JlciBpbnN0YW5jZTsKLQotCXByaXZhdGUgc3RhdGljIGludCBsYXVuY2hPcHRpb25zS2V5XyA9IDA7Ci0KLQlwcml2YXRlIElXZWJCcm93c2VyIGludGVybmFsQnJvd3Nlcl8gPSBudWxsOwotCQotCXB1YmxpYyBXU0V4cGxvcmVyKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgV1NFeHBsb3JlciBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFdTRXhwbG9yZXIoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDb250ZXh0TmFtZSgpIHsKLQkJcmV0dXJuICJ3c2V4cGxvcmVyIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFBhcmVudFBsdWdpbklEKCkgewotCQlyZXR1cm4gRXhwbG9yZXJQbHVnaW4uSUQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXZWJBcHBMb2NhdGlvbigpIHsKLQkJcmV0dXJuICJ3c2V4cGxvcmVyIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdlbGNvbWVVUkwoKSB7Ci0JCXJldHVybiAid3NleHBsb3Jlci5qc3AiOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoT3B0aW9uUmVnaXN0cnlVUkwoKSB7Ci0JCXJldHVybiAibGF1bmNoX29wdGlvbnNfcmVnaXN0cnkuanNwIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEJhc2VVUkwoKSB7Ci0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJICAKLQkJCi0JCXNiLmFwcGVuZCgiaHR0cDovLyIpOyAKLQkJc2IuYXBwZW5kKEpldHR5UnVubmFibGUuZ2V0SmV0dHlSdW5uYWJsZSgpLmdldEpldHR5SG9zdCgpKTsgCi0JCXNiLmFwcGVuZCgiOiIpOwotCQlzYi5hcHBlbmQoSmV0dHlSdW5uYWJsZS5nZXRKZXR0eVJ1bm5hYmxlKCkuZ2V0SmV0dHlQb3J0KCkpOwotCQlzYi5hcHBlbmQoIi8iKTsKLQkJc2IuYXBwZW5kKCJ3c2UiKTsKLQkJc2IuYXBwZW5kKCIvIik7Ci0JCXNiLmFwcGVuZChnZXRDb250ZXh0TmFtZSgpKTsKLQkJc2IuYXBwZW5kKCIvIik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWV0YWRhdGFEaXJlY3RvcnkoKSB7Ci0JCS8vIDx3b3Jrc3BhY2U+Ly5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvIChub3RlCi0JCS8vIHRoZSB0cmFpbGluZyBzZXBhcmF0b3IpLgotCQlyZXR1cm4gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbGF1bmNoKElXb3JrYmVuY2ggd2IsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCwKLQkJTGF1bmNoT3B0aW9uW10gb3B0aW9ucywgYm9vbGVhbiBmb3JjZUxhdW5jaE91dHNpZGVJREUpIHsKLQkJLy8gbGF1bmNoT3B0aW9uS2V5Ci0JCWludCBsYXVuY2hPcHRpb25LZXkgPSBnZXRMYXVuY2hPcHRpb25zS2V5KCk7Ci0JCS8vIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBVUkwKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzYi5hcHBlbmQoZ2V0QmFzZVVSTCgpKTsKLQkJc2IuYXBwZW5kKGdldFdlbGNvbWVVUkwoKSk7Ci0JCXNiLmFwcGVuZCgiPyIpOwotCQlpZiAob3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgewotCQkJU3RyaW5nIGVuY29kZWRJRCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWVuY29kZWRJRCA9IFVSTEVuY29kZXIuZW5jb2RlKEV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJRXhwbG9yZXJQbHVnaW4uQ0hBUlNFVCk7Ci0JCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cygKLQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQlFeHBsb3JlclBsdWdpbi5JRCwKLQkJCQkJCTAsCi0JCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkuZ2V0TWVzc2FnZSgiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIpLAotCQkJCQkJZSk7Ci0JCQl9Ci0JCQlzYi5hcHBlbmQoZW5jb2RlZElEKTsKLQkJCXNiLmFwcGVuZCgiPSIpOwotCQkJc2IuYXBwZW5kKGxhdW5jaE9wdGlvbktleSk7Ci0JCX0KLQkJLy8gbGF1bmNoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCQl0cnkgewotCQkJSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0IGJyb3dzZXJTdXBwb3J0ID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRCcm93c2VyU3VwcG9ydCgpOwotCQkJSVdlYkJyb3dzZXIgYnJvd3NlciA9IG51bGw7Ci0JCQkKLQkJCWlmIChmb3JjZUxhdW5jaE91dHNpZGVJREUpIHsKLQkJCQkKLQkJCQkvLyBleHRlcm5hbCBicm93c2VyIHN1cHBvcnQgdXNlcyBzd3QgUHJvZ3JhbS5maW5kUHJvZ3JhbSgpIHRvIGxvY2F0ZSBhbiBhcHByb3ByaWF0ZSBicm93c2VyIGZvciBIVE1MIGZpbGVzCi0JCQkJLy8gY2VydGFpbiB2ZXJzaW9ucyBvZiBzd3QgUHJvZ3JhbSBjbGFzcyBuZWVkIHRvIGJlIHJ1biBmcm9tIHRoZSBVSSB0aHJlYWQsIG90aGVyd2lzZSBmaW5kUHJvZ3JhbSgpIGRvZXMgbm90Ci0JCQkJLy8gd29yayBwcm9wZXJseSAodGhpcyBhcHBsaWVzIHRvIExpbnV4IG9ubHkpLiAgVGhlIGNvZGUgYmVsb3cgaXMgdG8gd29ya2Fyb3VuZCB0aGlzIHByb2JsZW0uCi0JCQkJCi0JCQkJLy8gRGlzcGxheS5nZXRDdXJyZW50KCkgd2lsbCBiZSBudWxsIGlmIHRoaXMgaXMgbm90IHRoZSBVSSB0aHJlYWQKLQkJCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgPT0gbnVsbCkgewotCQkJCQkKLQkJCQkJLy8gY3JlYXRlIGEgcnVubmFibGUgdG8gb3BlbiB0aGUgYnJvd3NlciwgcnVuIGl0IGluIHRoZSBVSSB0aHJlYWQKLQkJCQkJT3BlbkJyb3dzZXJSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBPcGVuQnJvd3NlclJ1bm5hYmxlKGJyb3dzZXJTdXBwb3J0LCBuZXcgVVJMKHNiLnRvU3RyaW5nKCkpKTsKLQkJCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMocnVubmFibGUpOwotCQkJCQkKLQkJCQkJaWYgKHJ1bm5hYmxlLmdldEV4Y2VwdGlvbigpICE9IG51bGwpCi0JCQkJCQl0aHJvdyBydW5uYWJsZS5nZXRFeGNlcHRpb24oKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWJyb3dzZXIgPSBicm93c2VyU3VwcG9ydC5nZXRFeHRlcm5hbEJyb3dzZXIoKTsKLQkJCQkJYnJvd3Nlci5vcGVuVVJMKG5ldyBVUkwoc2IudG9TdHJpbmcoKSkpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIGJyb3dzZXJJZAotCQkJCVN0cmluZ0J1ZmZlciBicm93c2VySWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJYnJvd3NlcklkLmFwcGVuZChFeHBsb3JlclBsdWdpbi5JRCk7Ci0JCQkJYnJvd3NlcklkLmFwcGVuZChnZXRDb250ZXh0TmFtZSgpKTsKLQkJCQkKLQkJCQlpZiAoaW50ZXJuYWxCcm93c2VyXz09bnVsbCkKLQkJCQkJaW50ZXJuYWxCcm93c2VyXyA9IGJyb3dzZXJTdXBwb3J0LmNyZWF0ZUJyb3dzZXIoYnJvd3NlcklkLnRvU3RyaW5nKCkpOwotCQkJCWJyb3dzZXIgPSBpbnRlcm5hbEJyb3dzZXJfOwotCQkJCWJyb3dzZXIub3BlblVSTChuZXcgVVJMKHNiLnRvU3RyaW5nKCkpKTsKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEV4cGxvcmVyUGx1Z2luLklELCAwLAotCQkJCQlFeHBsb3JlclBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX0xBVU5DSF9XU0VYUExPUkVSIiksCi0JCQkJCWUpOwotCQl9Ci0JCS8vIHJlZ2lzdGVyIGxhdW5jaCBvcHRpb25zCi0JCWlmIChvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7Ci0JCQl0cnkgewotCQkJCVN0cmluZ0J1ZmZlciBsYXVuY2hPcHRpb25zUmVnVVJMID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCWxhdW5jaE9wdGlvbnNSZWdVUkwuYXBwZW5kKGdldEJhc2VVUkwoKSk7Ci0JCQkJbGF1bmNoT3B0aW9uc1JlZ1VSTC5hcHBlbmQoZ2V0TGF1bmNoT3B0aW9uUmVnaXN0cnlVUkwoKSk7Ci0JCQkJVVJMIHVybCA9IG5ldyBVUkwobGF1bmNoT3B0aW9uc1JlZ1VSTC50b1N0cmluZygpKTsKLQkJCQlVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJCQljb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwotCQkJCVByaW50V3JpdGVyIG91dCA9IG5ldyBQcmludFdyaXRlcihjb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpKTsKLQkJCQlTdHJpbmdCdWZmZXIgcGFyYW1zID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCVN0cmluZyBlbmNvZGVkSUQgPSBudWxsOwotCQkJCXRyeSB7Ci0JCQkJCWVuY29kZWRJRCA9IFVSTEVuY29kZXIuZW5jb2RlKEV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJCUV4cGxvcmVyUGx1Z2luLkNIQVJTRVQpOwotCQkJCX0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJCQlyZXR1cm4gbmV3IFN0YXR1cygKLQkJCQkJCQlJU3RhdHVzLkVSUk9SLAotCQkJCQkJCUV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJCTAsCi0JCQkJCQkJRXhwbG9yZXJQbHVnaW4KLQkJCQkJCQkJCS5nZXRNZXNzYWdlKCIlTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04IiksCi0JCQkJCQkJZSk7Ci0JCQkJfQotCQkJCXBhcmFtcy5hcHBlbmQoZW5jb2RlZElEKTsKLQkJCQlwYXJhbXMuYXBwZW5kKCI9Iik7Ci0JCQkJcGFyYW1zLmFwcGVuZChsYXVuY2hPcHRpb25LZXkpOwotCQkJCXBhcmFtcy5hcHBlbmQoIiYiKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJaWYgKG9wdGlvbnNbaV0gIT0gbnVsbCkgewotCQkJCQkJcGFyYW1zLmFwcGVuZChvcHRpb25zW2ldLmdldEtleSgpKTsKLQkJCQkJCXBhcmFtcy5hcHBlbmQoIj0iKTsKLQkJCQkJCVN0cmluZyBvcHRpb24gPSBudWxsOwotCQkJCQkJdHJ5IHsKLQkJCQkJCQlvcHRpb24gPSBVUkxFbmNvZGVyLmVuY29kZShvcHRpb25zW2ldLmdldE9wdGlvbigpLAotCQkJCQkJCQkJRXhwbG9yZXJQbHVnaW4uQ0hBUlNFVCk7Ci0JCQkJCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQlyZXR1cm4gbmV3IFN0YXR1cygKLQkJCQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQkJCQlFeHBsb3JlclBsdWdpbi5JRCwKLQkJCQkJCQkJCTAsCi0JCQkJCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkJCQkuZ2V0TWVzc2FnZSgiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIpLAotCQkJCQkJCQkJZSk7Ci0JCQkJCQl9Ci0JCQkJCQlwYXJhbXMuYXBwZW5kKG9wdGlvbik7Ci0JCQkJCQlwYXJhbXMuYXBwZW5kKCImIik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJb3V0LnByaW50KHBhcmFtcy50b1N0cmluZygpKTsKLQkJCQlvdXQuY2xvc2UoKTsKLQkJCQlvdXQgPSBudWxsOwotCQkJCUlucHV0U3RyZWFtIGlzID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOwotCQkJCWlzLmNsb3NlKCk7Ci0JCQkJaXMgPSBudWxsOwotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIEV4cGxvcmVyUGx1Z2luLklELCAwLAotCQkJCQkJRXhwbG9yZXJQbHVnaW4KLQkJCQkJCQkJLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfTE9BRF9MQVVOQ0hfT1BUSU9OUyIpLAotCQkJCQkJZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgRXhwbG9yZXJQbHVnaW4uSUQsIDAsICIiLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGF1bmNoT3B0aW9uc0tleSgpIHsKLQkJcmV0dXJuIGxhdW5jaE9wdGlvbnNLZXlfKys7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbGF1bmNoKElXb3JrYmVuY2ggd2IsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZ1tdIGlucXVpcnlVUkwsIFN0cmluZ1tdIHB1Ymxpc2hVUkwsCi0JCQlib29sZWFuIGZvcmNlTGF1bmNoT3V0c2lkZUlERSkgewotCQlpbnQgaW5xdWlyeVVSTE9wdGlvbkxlbmd0aCA9IChpbnF1aXJ5VVJMICE9IG51bGwpID8gaW5xdWlyeVVSTC5sZW5ndGgKLQkJCQk6IDA7Ci0JCWludCBwdWJsaXNoVVJMT3B0aW9uTGVuZ3RoID0gKHB1Ymxpc2hVUkwgIT0gbnVsbCkgPyBwdWJsaXNoVVJMLmxlbmd0aAotCQkJCTogMDsKLQkJTGF1bmNoT3B0aW9uW10gb3B0aW9ucyA9IG5ldyBMYXVuY2hPcHRpb25baW5xdWlyeVVSTE9wdGlvbkxlbmd0aAotCQkJCSsgcHVibGlzaFVSTE9wdGlvbkxlbmd0aF07Ci0JCWludCBpbmRleCA9IDA7Ci0JCWlmIChpbnF1aXJ5VVJMICE9IG51bGwpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5xdWlyeVVSTC5sZW5ndGg7IGkrKykgewotCQkJCW9wdGlvbnNbaW5kZXhdID0gbmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLklOUVVJUllfVVJMLAotCQkJCQkJaW5xdWlyeVVSTFtpXSk7Ci0JCQkJaW5kZXgrKzsKLQkJCX0KLQkJfQotCQlpZiAocHVibGlzaFVSTCAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHB1Ymxpc2hVUkwubGVuZ3RoOyBpKyspIHsKLQkJCQlvcHRpb25zW2luZGV4XSA9IG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5QVUJMSVNIX1VSTCwKLQkJCQkJCXB1Ymxpc2hVUkxbaV0pOwotCQkJCWluZGV4Kys7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGxhdW5jaCh3Yiwgc2VsLCBvcHRpb25zLCBmb3JjZUxhdW5jaE91dHNpZGVJREUpOwotCX0KLX0KLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgZm9yIG9wZW5pbmcgYSBicm93c2VyIGFuZCBzdG9yaW5nIHRoZQotICogRXhjZXB0aW9uIHRocm93biBpZiBpdCB3YXMgdW5zdWNjZXNzZnVsLiAKLSAqLwotY2xhc3MgT3BlbkJyb3dzZXJSdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQkKLQlwcml2YXRlIElXb3JrYmVuY2hCcm93c2VyU3VwcG9ydCBicm93c2VyU3VwcG9ydDsKLQlwcml2YXRlIFVSTCB1cmw7Ci0JcHJpdmF0ZSBFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKLQkKLQlwdWJsaWMgT3BlbkJyb3dzZXJSdW5uYWJsZShJV29ya2JlbmNoQnJvd3NlclN1cHBvcnQgYnJvd3NlclN1cHBvcnQsIFVSTCB1cmwpIHsKLQkJdGhpcy5icm93c2VyU3VwcG9ydCA9IGJyb3dzZXJTdXBwb3J0OwotCQl0aGlzLnVybCA9IHVybDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQl0cnkgewotCQkJYnJvd3NlclN1cHBvcnQuZ2V0RXh0ZXJuYWxCcm93c2VyKCkub3BlblVSTCh1cmwpOwkJCQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZXhjZXB0aW9uID0gZTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgRXhjZXB0aW9uIGdldEV4Y2VwdGlvbigpIHsKLQkJcmV0dXJuIGV4Y2VwdGlvbjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3N2RlNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XU0V4cGxvcmVyQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3JlcjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdTRXhwbG9yZXJDb250ZXh0IHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJjNzY1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXlAY2EuaWJtLmNvbQotICogCi0gKiBUaGlzIDxjb2RlPkNvbW1hbmQ8L2NvZGU+LCB3aGVuIGV4ZWN1dGVkLCBsYXVuY2hlcyB0aGUKLSAqIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4KLSAqLwotcHVibGljIGNsYXNzIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JcHJpdmF0ZSBib29sZWFuIGZvcmNlTGF1bmNoT3V0c2lkZUlERTsKLQotCXByaXZhdGUgTGF1bmNoT3B0aW9uW10gbGF1bmNoT3B0aW9uczsKLQotCXB1YmxpYyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCkgewotCX0KLQotCXB1YmxpYyB2b2lkIHdyaXRlQ2F0ZWdvcnlJbmZvKFN0cmluZyBpbnF1aXJ5VVJMLCBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSkgewotCQl0cnkgewotCQkJUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJCXAuc2V0UHJvcGVydHkoTGF1bmNoT3B0aW9ucy5DQVRFR09SSUVTX0RJUkVDVE9SWSwKLQkJCQkJY2F0ZWdvcmllc0RpcmVjdG9yeSk7Ci0JCQlTdHJpbmdCdWZmZXIgcHJvcGVydGllc0ZpbGVOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJcHJvcGVydGllc0ZpbGVOYW1lLmFwcGVuZChXU0V4cGxvcmVyLmdldEluc3RhbmNlKCkKLQkJCQkJLmdldE1ldGFkYXRhRGlyZWN0b3J5KCkpOwotCQkJRmlsZSBtZXRhZGF0YURpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShwcm9wZXJ0aWVzRmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0JCQlpZiAoIW1ldGFkYXRhRGlyZWN0b3J5RmlsZS5leGlzdHMoKSkgewotCQkJCW1ldGFkYXRhRGlyZWN0b3J5RmlsZS5ta2RpcnMoKTsKLQkJCX0KLQkJCXByb3BlcnRpZXNGaWxlTmFtZS5hcHBlbmQoVVJMRW5jb2Rlci5lbmNvZGUoaW5xdWlyeVVSTCwiVVRGLTgiKSkuYXBwZW5kKAotCQkJCQkiLnByb3BlcnRpZXMiKTsKLQkJCUZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHByb3BlcnRpZXNGaWxlTmFtZQotCQkJCQkudG9TdHJpbmcoKSk7Ci0JCQlwLnN0b3JlKGZvdXQsIG51bGwpOwotCQkJZm91dC5jbG9zZSgpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCkgewotCQlyZXR1cm4gV1NFeHBsb3Jlci5nZXRJbnN0YW5jZSgpLmxhdW5jaChudWxsLCBudWxsLCBsYXVuY2hPcHRpb25zLAotCQkJCWZvcmNlTGF1bmNoT3V0c2lkZUlERSk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0gICAgcmV0dXJuIGV4ZWN1dGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZm9yY2VMYXVuY2hPdXRzaWRlSURFCi0JICogICAgICAgICAgICBUaGUgZm9yY2VMYXVuY2hPdXRzaWRlSURFIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb3JjZUxhdW5jaE91dHNpZGVJREUoYm9vbGVhbiBmb3JjZUxhdW5jaE91dHNpZGVJREUpIHsKLQkJdGhpcy5mb3JjZUxhdW5jaE91dHNpZGVJREUgPSBmb3JjZUxhdW5jaE91dHNpZGVJREU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGxhdW5jaE9wdGlvbnMKLQkgKiAgICAgICAgICAgIFRoZSBsYXVuY2hPcHRpb25zIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMYXVuY2hPcHRpb25zKExhdW5jaE9wdGlvbltdIGxhdW5jaE9wdGlvbnMpIHsKLQkJdGhpcy5sYXVuY2hPcHRpb25zID0gbGF1bmNoT3B0aW9uczsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XZWJhcHBNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dlYmFwcE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ1MDc1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dlYmFwcE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgamF2YS51dGlsLkRpY3Rpb25hcnk7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLmpldHR5LkpldHR5Q29uZmlndXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5JbnZhbGlkU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5TZXJ2aWNlUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgV2ViYXBwTWFuYWdlciB7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgaG9zdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgcG9ydCA9IC0xOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVVRPX1NFTEVDVF9KRVRUWV9QT1JUID0gMDsKLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc3RhcnQoU3RyaW5nIHdlYmFwcE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlEaWN0aW9uYXJ5IGQgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQotCQkKLQkJZC5wdXQoImh0dHAucG9ydCIsIG5ldyBJbnRlZ2VyKGdldFBvcnRQYXJhbWV0ZXIoKSkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gc2V0IHRoZSBiYXNlIFVSTAotCQlkLnB1dCgiY29udGV4dC5wYXRoIiwgIi93c2UiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWQucHV0KCJvdGhlci5pbmZvIiwgIm9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCi0JCS8vIHN1cHByZXNzIEpldHR5IElORk8vREVCVUcgbWVzc2FnZXMgdG8gc3RkZXJyCi0JCUxvZ2dlci5nZXRMb2dnZXIoIm9yZy5tb3J0YmF5Iikuc2V0TGV2ZWwoTGV2ZWwuV0FSTklORyk7IC8vJE5PTi1OTFMtMSQJCi0KLQkJSmV0dHlDb25maWd1cmF0b3Iuc3RhcnRTZXJ2ZXIod2ViYXBwTmFtZSwgZCk7Ci0JCWNoZWNrQnVuZGxlKCk7Ci0JCQotCX0KLQkKLQkvKgotCSAqIEVuc3VyZXMgdGhhdCB0aGUgYnVuZGxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB0aGUgaGlnaGVzdCBhdmFpbGFibGUKLQkgKiB2ZXJzaW9uIGlzIHN0YXJ0ZWQgYW5kIHJlYWRzIHRoZSBwb3J0IG51bWJlcgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tCdW5kbGUoKSB0aHJvd3MgSW52YWxpZFN5bnRheEV4Y2VwdGlvbiwgQnVuZGxlRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5Iik7IC8vJE5PTi1OTFMtMSRpZiAoYnVuZGxlICE9IG51bGwpIHsKLQkJaWYgKGJ1bmRsZS5nZXRTdGF0ZSgpID09IEJ1bmRsZS5SRVNPTFZFRCkgewotCQkJYnVuZGxlLnN0YXJ0KEJ1bmRsZS5TVEFSVF9UUkFOU0lFTlQpOwotCQl9Ci0JCWlmIChwb3J0ID09IC0xKSB7Ci0JCQkvLyBKZXR0eSBzZWxlY3RlZCBhIHBvcnQgbnVtYmVyIGZvciB1cwotCQkJU2VydmljZVJlZmVyZW5jZVtdIHJlZmVyZW5jZSA9IGJ1bmRsZS5nZXRCdW5kbGVDb250ZXh0KCkuZ2V0U2VydmljZVJlZmVyZW5jZXMoIm9yZy5vc2dpLnNlcnZpY2UuaHR0cC5IdHRwU2VydmljZSIsICIob3RoZXIuaW5mbz1vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIpIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJT2JqZWN0IGFzc2lnbmVkUG9ydCA9IHJlZmVyZW5jZVswXS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0Iik7IC8vJE5PTi1OTFMtMSQKLQkJCXBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpYXNzaWduZWRQb3J0KTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzdG9wKFN0cmluZyB3ZWJhcHBOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlKZXR0eUNvbmZpZ3VyYXRvci5zdG9wU2VydmVyKHdlYmFwcE5hbWUpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy9IZWxwQmFzZVBsdWdpbi5sb2dFcnJvcigiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBzdG9wcGluZyB0aGUgaGVscCBzZXJ2ZXIiLCBlKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBpbnQgZ2V0UG9ydCgpIHsKLQkJcmV0dXJuIHBvcnQ7Ci0JfQotCi0JLyoKLQkgKiBHZXQgdGhlIHBvcnQgbnVtYmVyIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIEpldHR5Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBvcnRQYXJhbWV0ZXIoKSB7Ci0JCWlmIChwb3J0ID09IC0xKSB7IAotCQkJcmV0dXJuIEFVVE9fU0VMRUNUX0pFVFRZX1BPUlQ7Ci0JCX0KLQkJcmV0dXJuIHBvcnQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SG9zdCgpIHsKLQkJaWYgKGhvc3QgPT0gbnVsbCkgewotCQkJU3RyaW5nIGhvc3RDb21tYW5kTGluZU92ZXJyaWRlID0gRXhwbG9yZXJQbHVnaW4uZ2V0QnVuZGxlQ29udGV4dCgpLmdldFByb3BlcnR5KCJzZXJ2ZXJfaG9zdCIpOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoaG9zdENvbW1hbmRMaW5lT3ZlcnJpZGUgIT0gbnVsbCAmJiBob3N0Q29tbWFuZExpbmVPdmVycmlkZS50cmltKCkubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJaG9zdCA9IGhvc3RDb21tYW5kTGluZU92ZXJyaWRlOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJaG9zdCA9ICIxMjcuMC4wLjEiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIGhvc3Q7Ci0JfQotCQotCXByaXZhdGUgV2ViYXBwTWFuYWdlcigpIHsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL2FjdGlvbi9MYXVuY2hXU0VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvYWN0aW9uL0xhdW5jaFdTRUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjMyNGY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvYWN0aW9uL0xhdW5jaFdTRUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwODIwICAgMTkxNTg1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIExhdW5jaFdTRUFjdGlvbiBpbXBsZW1lbnRzIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZQotewotICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICAgICAgICBoYW5kbGVyICAgICA9IG5ldyBFY2xpcHNlU3RhdHVzSGFuZGxlcigpOwotICAgIFRyYW5zaWVudFJlc291cmNlQ29udGV4dCAgICAgICAgIGNvbnRleHQgICAgID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotICAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgICAgICAgIGVudmlyb25tZW50ID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgY29udGV4dCwgaGFuZGxlciApOyAKLSAgICBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kICAgICAgICBjbWQgICAgICAgICA9IG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCk7Ci0gICAgCi0gICAgU3RyaW5nIHN0YXRlTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblN0YXRlTG9jYXRpb24oKTsKLQlTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKTsKLQlMYXVuY2hPcHRpb25bXSBsYXVuY2hPcHRpb25zID0gbmV3IExhdW5jaE9wdGlvbltdIHsKLQkJbmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OLHN0YXRlTG9jYXRpb24pLAotCQluZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04sZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKQotCX07Ci0gICAgY21kLnNldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7Ci0gICAgY21kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCSAgY21kLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSNkaXNwb3NlKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7ICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsgIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5YzgxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3Q7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0IGV4dGVuZHMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QgewotCXByaXZhdGUgc3RhdGljIFdTSUxEb2N1bWVudCB3c2lsRG9jXzsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBVk9SSVRFU19ERUZBVUxUID0gInByb3BlcnRpZXMvZmF2b3JpdGVzX2RlZmF1bHQud3NpbCI7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc18gPSBudWxsOwotCi0JcHVibGljIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQoKSB7Ci0JCXN1cGVyKCk7Ci0JCXdzaWxEb2NfID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdChTdHJpbmcgZGVmYXVsdEZhdm9yaXRlcykgewotCQlzdXBlcigpOwotCQl3c2lsRG9jXyA9IG51bGw7Ci0JCWRlZmF1bHRGYXZvcml0ZXNfID0gZGVmYXVsdEZhdm9yaXRlczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlYWRMb2NhdGlvbigpIHsKLQkJU3RyaW5nQnVmZmVyIHJlYWRMb2NhdGlvbiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaWYgKGRlZmF1bHRGYXZvcml0ZXNfID09IG51bGwpCi0JCXsKLQkJCXJlYWRMb2NhdGlvbi5hcHBlbmQoRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5JbnN0YWxsTG9jYXRpb24oKSk7Ci0JCQlyZWFkTG9jYXRpb24uYXBwZW5kKEZBVk9SSVRFU19ERUZBVUxUKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJlYWRMb2NhdGlvbi5hcHBlbmQoZGVmYXVsdEZhdm9yaXRlc18pOwotCQl9Ci0JCXJldHVybiByZWFkTG9jYXRpb24udG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdyaXRlTG9jYXRpb24oKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByb3RlY3RlZCBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50KCkgewotCQlpZiAod3NpbERvY18gPT0gbnVsbCkgewotCQkJd3NpbERvY18gPSBsb2FkV1NJTERvY3VtZW50KGdldFJlYWRMb2NhdGlvbigpLCB0cnVlKTsKLQkJCWdldEZhdm9yaXRlc1VERElSZWdpc3RyaWVzKCk7Ci0JCQkvKiBUT0RPOiBQdWJsaWMgcmVnaXN0cnkgc3RyaW5ncyBzaG91bGRuJ3QgYmUgaW4gcHJvcGVydGllcyAtIEFpbid0IGV4dGVuc2libGUuCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ2lzdHJpZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlyZWdpc3RyaWVzW2ldLnNldE5hbWUoV1NQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcocmVnaXN0cmllc1tpXS5nZXROYW1lKCkpKTsKLQkJCX0KLQkJCSovCi0JCX0KLQkJcmV0dXJuIHdzaWxEb2NfOwotCX0KLQotCXB1YmxpYyBXU0lMRG9jdW1lbnQgZ2V0RmF2b3JpdGVzRGVmYXVsdCgpIHsKLQkJcmV0dXJuIGdldFdTSUxEb2N1bWVudCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNhdmUoKSB0aHJvd3MgV1NJTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZVdTRS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzZhMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0OwotCi0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UgZXh0ZW5kcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdAotewotICBwcml2YXRlIHN0YXRpYyBXU0lMRG9jdW1lbnQgd3NpbERvY187Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBVk9SSVRFU19XU0VYUExPUkVSID0gImZhdm9yaXRlcy53c2lsIjsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc18gPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBzdGF0ZUxvY2F0aW9uXyA9IG51bGw7Ci0gIAotICBwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgd3NpbERvY18gPSBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFKFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzLCBTdHJpbmcgc3RhdGVMb2NhdGlvbikgewotCXN1cGVyKCk7Ci0Jd3NpbERvY18gPSBudWxsOwotCWRlZmF1bHRGYXZvcml0ZXNfID0gZGVmYXVsdEZhdm9yaXRlczsKLQlzdGF0ZUxvY2F0aW9uXyA9IHN0YXRlTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRMb2NhdGlvbigpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgcmVhZExvY2F0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHJlYWRMb2NhdGlvbi5hcHBlbmQoc3RhdGVMb2NhdGlvbl8gPT0gbnVsbCA/IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpIDogc3RhdGVMb2NhdGlvbl8pOwotICAgIHJlYWRMb2NhdGlvbi5hcHBlbmQoRkFWT1JJVEVTX1dTRVhQTE9SRVIpOwotICAgIHJldHVybiByZWFkTG9jYXRpb24udG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0UmVhZExvY2F0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgV1NJTERvY3VtZW50IGdldFdTSUxEb2N1bWVudCgpCi0gIHsKLSAgICBpZiAod3NpbERvY18gPT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c2lsRG9jXyA9IGxvYWRXU0lMRG9jdW1lbnQoZ2V0UmVhZExvY2F0aW9uKCksIGZhbHNlKTsKLSAgICAgIGlmICh3c2lsRG9jXyA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHNhdmUoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gd3NpbERvY187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpCi0gIHsKLSAgICB3c2lsRG9jXyA9IChuZXcgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdChkZWZhdWx0RmF2b3JpdGVzXykpLmdldFdTSUxEb2N1bWVudCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMDdmZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLkN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci0KLS8vIEFic3RyYWN0IGFjdGlvbiBjbGFzcyB1c2VkIGZvciBib3RoIExpbmsgYW5kIEZvcm0gYWN0aW9ucy4KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByb3RlY3RlZCBIYXNodGFibGUgcHJvcGVydHlUYWJsZV87Ci0gIHByb3RlY3RlZCBWZWN0b3IgcmVtb3ZlZFByb3BlcnRpZXNfOwotCi0gIHB1YmxpYyBBY3Rpb24oKQotICB7Ci0gICAgdGhpcyhudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIHByb3BlcnR5VGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHJlbW92ZWRQcm9wZXJ0aWVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBDb250cm9sbGVyIGdldENvbnRyb2xsZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfOwotICB9Ci0KLSAgLyoqCi0gICogUmVhZCBwcm9wZXJ0aWVzIGZyb20gYW4gSHR0cFNlcnZsZXRSZXF1ZXN0IGFuZCBhZGQgdGhlbSB0byB0aGUgcHJvcGVydHkgdGFibGUuCi0gICogQHBhcmFtIEh0dHBTZXJ2bGV0UmVxdWVzdCBUaGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGNvbnRhaW5pbmcgdGhlIGVtYmVkZGVkIHBhcmFtZXRlcnMuCi0gICogQHJldHVybiBib29sZWFuIFdoZXRoZXIgb3Igbm90IHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCk7Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBwcm9wZXJ0eSB0YWJsZS4KLSAgKiBAcmV0dXJuIEhhc2h0YWJsZSBBIGhhc2h0YWJsZSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIGFjdGlvbi4KLSAgKi8KLSAgcHVibGljIGZpbmFsIEhhc2h0YWJsZSBnZXRQcm9wZXJ0eVRhYmxlKCkKLSAgewotICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgcHJvcGVydHkgdGFibGUuCi0gICAqIEByZXR1cm4gdm9pZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgcHJvcGVydHlUYWJsZSkKLSAgewotICAgcHJvcGVydHlUYWJsZV8gPSBwcm9wZXJ0eVRhYmxlOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgcHJvcGVydHkgdG8gdGhlIHByb3BlcnR5IHRhYmxlLgotICAgKiBAcGFyYW0gdm9pZAotICAgKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkUHJvcGVydHkoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KGtleSwgdmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSB0aGUgcHJvcGVydHkgdGFibGUuIFRyYWNrIHRoZSBkZWxldGlvbnMuCi0gICogQHBhcmFtIE9iamVjdCBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBiZWluZyByZW1vdmVkLgotICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVQcm9wZXJ0eShPYmplY3Qga2V5KQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKGtleSk7Ci0gICAgcmVtb3ZlZFByb3BlcnRpZXNfLmFkZEVsZW1lbnQoa2V5KTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZ1tdIGdldFByb3BlcnR5QXNTdHJpbmdBcnJheShPYmplY3Qga2V5KQotICB7Ci0gICAgT2JqZWN0IG9iamVjdCA9IHByb3BlcnR5VGFibGVfLmdldChrZXkpOwotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmdbXSkKLSAgICAgIHJldHVybiAoU3RyaW5nW10pb2JqZWN0OwotICAgIGVsc2UgaWYgKG9iamVjdCAhPSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7b2JqZWN0LnRvU3RyaW5nKCl9OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gZXhlY3V0ZSgpCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZSh0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGV4ZWN1dGUoYm9vbGVhbiB1c2VBY3Rpb25FbmdpbmUpCi0gIHsKLSAgICBpZiAodXNlQWN0aW9uRW5naW5lKQotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEFjdGlvbkVuZ2luZSgpLmV4ZWN1dGVBY3Rpb24odGhpcyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJ1bigpOwotICB9Ci0KLSAgLy8gQWJzdHJhY3QgbWV0aG9kIGZvciBydW5uaW5nIHRoaXMgYWN0aW9uLgotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBydW4oKTsKLSAgCi0gIC8qKgotICAqIFJldHVybiB0aGUgdHJhbnNmb3JtZXJzIHVzZWQgdG8gbm9ybWFsaXplIHRoZSBpbnB1dC9vdXRwdXQgcGFyYW1ldGVycyBmb3IgdGhpcyBhY3Rpb24KLSAgKiBAcmV0dXJuIElUcmFuc2Zvcm1lcltdCi0gICovCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJVHJhbnNmb3JtZXJbXSB7bmV3IEN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pfTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbihQZXJzcGVjdGl2ZSBwZXJzcGVjdGl2ZSxNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlLFN0cmluZyBleGNlcHRpb25OYW1lLFRocm93YWJsZSB0KQotICB7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UocGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGV4Y2VwdGlvbk5hbWUpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHQuZ2V0TWVzc2FnZSgpKTsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzgzMmY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImFjdGlvbnMvQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb25KU1AuanNwIjsKLSAgfQotICAgIAotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1M2ZkYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTA2ICAgMTU2Mzk4IGplZmZsaXVAY2EuaWJtLmNvbSAtIEplZmZyZXkgTGl1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIENsZWFyTm9kZUFjdGlvbiBleHRlbmRzIE5vZGVBY3Rpb24KLXsKLSAgcHVibGljIENsZWFyTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLG5vZGVNYW5hZ2VyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgLy9lbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIExpc3QgZWxlbWVudHMycmVtb3ZlID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgY29sbGVjdEVsZW1lbnRzMlJlbW92ZShlbGVtZW50LCBlbGVtZW50czJyZW1vdmUpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGVsZW1lbnRzMnJlbW92ZS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBlID0gKFRyZWVFbGVtZW50KWl0Lm5leHQoKTsKLSAgICAgICAgZS5nZXRNb2RlbCgpLnJlbW92ZUVsZW1lbnQoZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZWxlbWVudC5nZXRNb2RlbCgpLmdldFJvb3RFbGVtZW50KCkgIT0gZWxlbWVudCkKLSAgICAgICAgbm9kZU1hbmFnZXJfLnJlbW92ZUZyb21Ob2RlVGFibGUobm9kZUlkKTsKLSAgICAgIC8vIERvIG5vdCBhZGQgdGhpcyB0byB0aGUgaGlzdG9yeS4KLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PREVfQ0xFQVJFRCIsbm9kZS5nZXROb2RlTmFtZSgpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvbGxlY3RFbGVtZW50czJSZW1vdmUoVHJlZUVsZW1lbnQgZWxlbWVudCwgTGlzdCBlbGVtZW50czJyZW1vdmUpCi0gIHsKLSAgICBpZiAoIWVsZW1lbnRzMnJlbW92ZS5jb250YWlucyhlbGVtZW50KSkKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRNb2RlbCgpLmdldFJvb3RFbGVtZW50KCkgIT0gZWxlbWVudCkKLSAgICAgICAgZWxlbWVudHMycmVtb3ZlLmFkZChlbGVtZW50KTsKLSAgICAgIEVudW1lcmF0aW9uIHJlbHMgPSBlbGVtZW50LmdldFJlbHMoKTsKLSAgICAgIHdoaWxlIChyZWxzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBSZWwgcmVsID0gKFJlbClyZWxzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIFN0cmluZyByZWxOYW1lID0gcmVsLmdldE5hbWUoKTsKLSAgICAgICAgaWYgKCFNb2RlbENvbnN0YW50cy5SRUxfT1dORVIuZXF1YWxzKHJlbE5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgRW51bWVyYXRpb24gY2hpbGRyZW4gPSBlbGVtZW50LmdldEVsZW1lbnRzKHJlbC5nZXROYW1lKCkpOwotICAgICAgICAgIHdoaWxlIChjaGlsZHJlbi5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjb2xsZWN0RWxlbWVudHMyUmVtb3ZlKChUcmVlRWxlbWVudCljaGlsZHJlbi5uZXh0RWxlbWVudCgpLCBlbGVtZW50czJyZW1vdmUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvLyBEZWxldGluZyBhIG5vZGUgZnJvbSB0aGUgdHJlZSByZXN1bHRzIGluIGNoYW5nZXMgdG8gdGhlIHRyZWV2aWV3IGFuZCBzdGF0dXMgY29udGVudHMuCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2xlYXJWaWV3RWxlbWVudEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzU5OGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci0KLS8vIEFic3RyYWN0IGFjdGlvbiBjbGFzcyB1c2VkIGZvciBib3RoIExpbmsgYW5kIEZvcm0gYWN0aW9ucy4KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDbGVhclZpZXdFbGVtZW50QWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwcml2YXRlIFN0cmluZyBsaXN0TWFuYWdlclJlbF87Ci0gIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBwdWJsaWMgQ2xlYXJWaWV3RWxlbWVudEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsU3RyaW5nIGxpc3RNYW5hZ2VyUmVsKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbm9kZU1hbmFnZXJfICA9IG5vZGVNYW5hZ2VyOwotICAgIGxpc3RNYW5hZ2VyUmVsXyA9IGxpc3RNYW5hZ2VyUmVsOwotICB9Ci0KLSAgLy8gLi4uanNwP3ZpZXdJZD0uLi4KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIHZpZXdJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodmlld0lkU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFZhbGlkYXRpb24gZmFpbGVkIQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCx2aWV3SWRTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCB2aWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBWaWV3VG9vbCB2aWV3VG9vbCA9IChWaWV3VG9vbClzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpZiAodmlld1Rvb2wuZ2V0VG9vbE1hbmFnZXIodmlld0lkKSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIFN0YWxlIHZpZXcuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IChMaXN0TWFuYWdlcillbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QobGlzdE1hbmFnZXJSZWxfKTsKLSAgICBsaXN0TWFuYWdlci5yZW1vdmVFbGVtZW50V2l0aFZpZXdJZCh2aWV3SWQpOwotICAgIHZpZXdUb29sLmNsZWFyVmlld1Rvb2xNYW5hZ2VyKHZpZXdJZCk7Ci0gICAgc2VsZWN0ZWROb2RlLnNldFZpZXdJZChBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotICAgIC8vIERvIG5vdCBhZGQgdGhpcyB0byB0aGUgaGlzdG9yeS4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NGQzMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZvcm1BY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIEZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoKTsKLSAgICAgIHBhcnNlci5wYXJzZVJlcXVlc3QocmVxdWVzdCxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgICBnZXRTZWxlY3RlZEZvcm1Ub29sKCkuY2xlYXJFcnJvcnMoKTsKLSAgICAgIGJvb2xlYW4gcmVzdWx0ID0gcHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICAgIHJlbW92ZWRQcm9wZXJ0aWVzXy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgY2F0Y2ggKE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5VGFibGUoSGFzaHRhYmxlIHByb3BlcnR5VGFibGUpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBwcm9jZXNzUGFyc2VkUmVzdWx0cyhuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIocHJvcGVydHlUYWJsZSkpOwotICAgIH0KLSAgICBjYXRjaCAoTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gbWZkZSkKLSAgICB7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwcm9wZXJ0eVRhYmxlLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgT2JqZWN0IGtleSA9IGl0Lm5leHQoKTsKLSAgICAgIEhhc2h0YWJsZSB0aGlzUHJvcGVydHlUYWJsZSA9IGdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgIGlmICghdGhpc1Byb3BlcnR5VGFibGUuY29udGFpbnNLZXkoa2V5KSkKLSAgICAgICAgYWRkUHJvcGVydHkoa2V5LCBwcm9wZXJ0eVRhYmxlLmdldChrZXkpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRUb0hpc3RvcnkoaW50IHBlcnNwZWN0aXZlSWQsU3RyaW5nIHVybCkKLSAgewotICAgIGNvbnRyb2xsZXJfLmFkZFRvSGlzdG9yeShwZXJzcGVjdGl2ZUlkLHVybCk7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1JbnB1dEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1JbnB1dEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjJjY2E0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Gb3JtSW5wdXRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi0vLyBBIGNsYXNzIGZvciByZXBvcnRpbmcgZm9ybSBpbnB1dCBleGNlcHRpb25zLgotcHVibGljIGNsYXNzIEZvcm1JbnB1dEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTc4NDY2MDE2ODU5Mzg3NDJMOwotCi1wdWJsaWMgRm9ybUlucHV0RXhjZXB0aW9uKFN0cmluZyBtc2cpCi0gIHsKLSAgICBzdXBlcihtc2cpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNzI0NWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGouV1NETEZhY3RvcnlJbXBsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwdWJsaWMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgLy8gb3MgaXMgdGhlIE91dHB1dFN0cmVhbSBvZiB0aGUgZmlsZSBpbiB0aGUgZmlsZSBzeXN0ZW0KLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gd3JpdGUoT3V0cHV0U3RyZWFtIG9zKTsKLQotICAvLyB0aGUgZGVmYXVsdCBuYW1lIGZvciB0aGUgZmlsZQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpOwotCi0gIHB1YmxpYyBib29sZWFuIHdyaXRlV1NETERlZmluaXRpb24oT3V0cHV0U3RyZWFtIG9zLCBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMRmFjdG9yeSB3c2RsRmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLSAgICAgIFdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLSAgICAgIHdzZGxXcml0ZXIud3JpdGVXU0RMKGRlZmluaXRpb24sIG9zKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHdyaXRlV1NJTERvY3VtZW50KE91dHB1dFN0cmVhbSBvcywgV1NJTERvY3VtZW50IHdzaWxEb2MpCi0gIHsKLSAgICBPdXRwdXRTdHJlYW1Xcml0ZXIgb3N3ID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBvc3cgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG9zKTsKLSAgICAgIHdzaWxEb2Mud3JpdGUob3N3KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmIChvc3cgIT0gbnVsbCkKLSAgICAgICAgICBvc3cuY2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElELCBTdHJpbmcganNwUGFnZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcihqc3BQYWdlKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPycpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgU3RyaW5nIHRvb2xJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIFN0cmluZyB2aWV3SUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBTdHJpbmcgdmlld1Rvb2xJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRCk7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHRvb2xJRCk7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHZpZXdJRCk7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHZpZXdUb29sSUQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJRCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCwgdG9vbElEKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCB2aWV3SUQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXVE9PTElELCB2aWV3VG9vbElEKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTBjM2Y5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyMSAgIDE0OTA3MCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzLCB1cGRhdGUgdG8gcmVzcGVjdCBwcmVmZXJlbmNlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2lsLkFkZFdTRExUb1dTSUxDb21tYW5kOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gZXh0ZW5kcyBGb3JtQWN0aW9uIHsKLSAgcHJpdmF0ZSBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdF87Ci0gIHByaXZhdGUgSVByb2plY3QgaVByb2plY3RfOwotICBwcml2YXRlIElSZXNvdXJjZSB0YXJnZXRGaWxlUmVzb3VyY2VfOwotCi0gICAgcHVibGljIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICAgICAgaVdvcmtzcGFjZVJvb3RfID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgICAgIGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICAgICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gY29udHJvbGxlcl8uZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgICAgICBTdHJpbmcgd29ya2JlbmNoUHJvamVjdE5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKHdvcmtiZW5jaFByb2plY3ROYW1lID09IG51bGwgfHwgd29ya2JlbmNoUHJvamVjdE5hbWUubGVuZ3RoKCkgPD0gMCkgewotICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XT1JLQkVOQ0hfUFJPSkVDVCIpKTsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpUHJvamVjdF8gPSBpV29ya3NwYWNlUm9vdF8uZ2V0UHJvamVjdCh3b3JrYmVuY2hQcm9qZWN0TmFtZSk7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUsIHdvcmtiZW5jaFByb2plY3ROYW1lKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgaW1wb3J0RmlsZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFKTsKLSAgICAgICAgaWYgKGltcG9ydEZpbGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5JTVBPUlRfRklMRSwgQWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFKTsKLSAgICAgICAgICAgIFN0cmluZyBpbXBvcnRlZEZpbGVOYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FKTsKLSAgICAgICAgICAgIGlmIChpbXBvcnRlZEZpbGVOYW1lID09IG51bGwgfHwgaW1wb3J0ZWRGaWxlTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfRklMRV9OQU1FIikpOwotICAgICAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUsIGltcG9ydGVkRmlsZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBpbXBvcnRUb1dTSUwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCk7Ci0gICAgICAgIGlmIChpbXBvcnRUb1dTSUwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCwgQWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMKTsKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuSU1QT1JURURfV1NETF9VUkwsIHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLklNUE9SVEVEX1dTRExfVVJMKSk7Ci0gICAgICAgICAgICBTdHJpbmcgd3NpbEZpbGVOYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuV1NJTF9GSUxFX05BTUUpOwotICAgICAgICAgICAgaWYgKHdzaWxGaWxlTmFtZSA9PSBudWxsIHx8IHdzaWxGaWxlTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NJTF9GSUxFX05BTUUiKSk7Ci0gICAgICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLldTSUxfRklMRV9OQU1FLCB3c2lsRmlsZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbXBvcnRGaWxlID09IG51bGwgJiYgaW1wb3J0VG9XU0lMID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0lNUE9SVF9PUFRJT05fU0VMRUNURUQiKSk7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE91dHB1dFN0cmVhbSBnZXRPdXRwdXRTdHJlYW0oU3RyaW5nIGRlZmF1bHRGaWxlTmFtZSkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkgKyBkZWZhdWx0RmlsZU5hbWUpOwotICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwotICAgICAgICByZXR1cm4gZm9zOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRUZW1wRmlsZVRvV2ViUHJvamVjdChTdHJpbmcgZGVmYXVsdEZpbGVOYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0gICAgewotICAgICAgaWYgKHRhcmdldEZpbGVSZXNvdXJjZV8gIT0gbnVsbCAmJiB0YXJnZXRGaWxlUmVzb3VyY2VfLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLSAgICAgICAgdGFyZ2V0RmlsZVJlc291cmNlXy5kZWxldGUodHJ1ZSxuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQotICAgICAgU3RyaW5nIGltcG9ydGVkRmlsZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FKTsKLSAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkrZGVmYXVsdEZpbGVOYW1lKTsKLSAgICAgIEJ1ZmZlcmVkSW5wdXRTdHJlYW0gYmlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0obmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKSk7Ci0KLSAgICAgIElGaWxlIGlGaWxlID0gaVByb2plY3RfLmdldEZpbGUoIi8iK2ltcG9ydGVkRmlsZU5hbWUpOwotICAgICAgaUZpbGUuY3JlYXRlKGJpcyx0cnVlLG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0gICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlCi0gICAgICBmaWxlLmRlbGV0ZSgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZmlsZUV4aXN0cygpCi0gICAgewotICAgICAgU3RyaW5nIGltcG9ydGVkRmlsZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FKTsKLSAgICAgIGlmIChpbXBvcnRlZEZpbGVOYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRhcmdldEZpbGVSZXNvdXJjZV8gPSBpUHJvamVjdF8uZmluZE1lbWJlcihpbXBvcnRlZEZpbGVOYW1lKTsKLSAgICAgICAgcmV0dXJuICh0YXJnZXRGaWxlUmVzb3VyY2VfICE9IG51bGwgJiYgdGFyZ2V0RmlsZVJlc291cmNlXy5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNUYXJnZXRGaWxlUmVzb3VyY2VSZWFkT25seSgpCi0gICAgewotICAgICAgcmV0dXJuIHRhcmdldEZpbGVSZXNvdXJjZV8uZ2V0UmVzb3VyY2VBdHRyaWJ1dGVzKCkuaXNSZWFkT25seSgpOwotICAgIH0KLQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKQotICAgIHsKLSAgICAJcmV0dXJuIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKS5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlUGx1Z2luRmlsZU1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJZCkKLSAgICB7Ci0gICAgICBTdHJpbmcgaW1wb3J0ZWRGaWxlTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUpOwotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UobWVzc2FnZUlkLG5ldyBTdHJpbmdbXXtpUHJvamVjdF8uZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGltcG9ydGVkRmlsZU5hbWV9KTsKLSAgICB9Ci0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpCi0gICAgewotICAgIAlyZXR1cm4gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVFZGl0KCkKLSAgICB7Ci0gICAgICBJRmlsZVtdIGZpbGVzID0gbmV3IElGaWxlWzFdOwotICAgICAgZmlsZXNbMF0gPSAoSUZpbGUpdGFyZ2V0RmlsZVJlc291cmNlXzsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcyxudWxsKTsKLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHN0YXR1cy5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIHN0YXR1cy5pc09LKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgICAgICBNZXNzYWdlUXVldWUgbXNnUXVldWUgPSBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgICAgaWYgKHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ld0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbigpOwotICAgICAgICAgICAgICAgIGFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZGVmYXVsdEZpbGVOYW1lID0gYWN0aW9uLmdldERlZmF1bHRGaWxlTmFtZSgpOwotICAgICAgICAgICAgICAgIGlmICghYWN0aW9uLndyaXRlKGdldE91dHB1dFN0cmVhbShkZWZhdWx0RmlsZU5hbWUpKSkgewotICAgICAgICAgICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XUklUSU5HX1RFTVBfRklMRV9UT19GUyIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbXBvcnRUZW1wRmlsZVRvV2ViUHJvamVjdChkZWZhdWx0RmlsZU5hbWUpOwotICAgICAgICAgICAgICAgIFN0cmluZyBpbXBvcnRlZEZpbGVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSk7Ci0gICAgICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfSU5GT19JTVBPUlRfVE9fV09SS0JFTkNIX1NVQ0NFU1NGVUwiLCBpbXBvcnRlZEZpbGVOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpIHsKLSAgICAgICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGZuZmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY2UuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JUX1RPX1dTSUwpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgICAgIFN0cmluZyBpbXBvcnRlZFdTSUxGaWxlTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5XU0lMX0ZJTEVfTkFNRSk7Ci0gICAgICAgICAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9XU0RMX1VSTCk7Ci0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgd3NpbFBsYXRmb3JtVVJMID0gbmV3IFN0cmluZ0J1ZmZlcigicGxhdGZvcm06L3Jlc291cmNlLyIpOwotICAgICAgICAgICAgd3NpbFBsYXRmb3JtVVJMLmFwcGVuZChwcm9qZWN0TmFtZSk7Ci0gICAgICAgICAgICB3c2lsUGxhdGZvcm1VUkwuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICB3c2lsUGxhdGZvcm1VUkwuYXBwZW5kKGltcG9ydGVkV1NJTEZpbGVOYW1lKTsKLSAgICAgICAgICAgIEFkZFdTRExUb1dTSUxDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkV1NETFRvV1NJTENvbW1hbmQoKTsKLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nWzVdOwotICAgICAgICAgICAgYXJnc1swXSA9IEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19XU0lMOwotICAgICAgICAgICAgYXJnc1sxXSA9IHdzaWxQbGF0Zm9ybVVSTC50b1N0cmluZygpOwotICAgICAgICAgICAgYXJnc1syXSA9IEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19XU0RMOwotICAgICAgICAgICAgYXJnc1szXSA9IHdzZGxVUkw7Ci0gICAgICAgICAgICBhcmdzWzRdID0gQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1JFU09MVkVfV1NETDsKLSAgICAgICAgICAgIGNvbW1hbmQuc2V0QXJndW1lbnRzKGFyZ3MpOwotICAgICAgICAgICAgSUVudmlyb25tZW50IGVudiA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQobnVsbCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAgICAgICAgIGNvbW1hbmQuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfSU5GT19JTVBPUlRfU0VSVklDRV9SRUZfVE9fV1NJTF9TVUNDRVNTRlVMIiwgaW1wb3J0ZWRXU0lMRmlsZU5hbWUpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgcHVibGljIGFic3RyYWN0IEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTNhMzZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoV2l6YXJkUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaFdpemFyZFRhc2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotICBwdWJsaWMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd2l6YXJkSUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfV0laQVJELCB3aXphcmRJRCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBsYXVuY2hXaXphcmQoU3RyaW5nIHdzZGxVUkwpCi0gIHsKLSAgICBMYXVuY2hXaXphcmRUYXNrIHRhc2sgPSBMYXVuY2hXaXphcmRUYXNrLmdldEluc3RhbmNlKCk7Ci0gICAgaWYgKHRhc2suZ2V0SXNFeGVjdXRpbmcoKSkKLSAgICB7Ci0gICAgICBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XSVpBUkRfQUxSRUFEWV9SVU5OSU5HIikpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpbnQgd2l6YXJkSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQpKTsKLSAgICBMYXVuY2hXaXphcmRSdW5uYWJsZSBydW5uYWJsZTsKLSAgICBpZiAod2l6YXJkSUQgPT0gQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQpCi0gICAgICBydW5uYWJsZSA9IG5ldyBMYXVuY2hXaXphcmRSdW5uYWJsZSgib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiwgd3NkbFVSTCk7Ci0gICAgZWxzZSBpZiAod2l6YXJkSUQgPT0gQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1NLRUxFVE9OX1dJWkFSRCkKLSAgICAgIHJ1bm5hYmxlID0gbmV3IExhdW5jaFdpemFyZFJ1bm5hYmxlKCJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCIsIHdzZGxVUkwpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXNrLmNoZWNrQW5kQXN5bmNFeGVjKHJ1bm5hYmxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MaW5rQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvTGlua0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2Y2NDRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MaW5rQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLS8vIEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyB0aGUgYWN0aW9uIG9mIGNsaWNraW5nIGEgbGluay4gVGhlc2UgYWN0aW9ucwotLy8gbWF5IGNoYW5nZSB0aGUgaGlzdG9yeSBsaXN0LgotcHVibGljIGFic3RyYWN0IGNsYXNzIExpbmtBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnlfOwotICBwcml2YXRlIGJvb2xlYW4gaXNTdGFsZUJyZWFkQ3J1bWJfOwotCi0gIHB1YmxpYyBMaW5rQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIGlzQWRkZWRUb0hpc3RvcnlfID0gZmFsc2U7Ci0gICAgaXNTdGFsZUJyZWFkQ3J1bWJfID0gZmFsc2U7Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoaXMgaGlzdG9yeSBsaXN0LgotICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHJ1bigpIG1ldGhvZC4KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gaXNBZGRlZFRvSGlzdG9yeV87Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpOwotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBpc0hpc3RvcnlTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICBpZiAoaXNIaXN0b3J5U3RyaW5nICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSxpc0hpc3RvcnlTdHJpbmcpOwotICAgIHJldHVybiBwcm9jZXNzTGlua1BhcmFtZXRlcnMocmVxdWVzdCk7Ci0gIH0KLQotICAvLyBBZGQgdGhlIGFjdGlvbidzIFVSTCB0byB0aGUgY29udHJvbGxlcidzIGhpc3RvcnkgbGlzdC4KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgYWRkVG9IaXN0b3J5KGludCBwZXJzcGVjdGl2ZUlkLFN0cmluZyB1cmwpCi0gIHsKLSAgICBpZiAoIWlzSGlzdG9yeUFjdGlvbigpKQotICAgICAgaXNBZGRlZFRvSGlzdG9yeV8gPSBjb250cm9sbGVyXy5hZGRUb0hpc3RvcnkocGVyc3BlY3RpdmVJZCx1cmwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNIaXN0b3J5QWN0aW9uKCkKLSAgewotICAgIHJldHVybiAocHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JU0hJU1RPUlkpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3RhbGVCcmVhZENydW1iKCkKLSAgewotICAgIGlmIChpc0hpc3RvcnlBY3Rpb24oKSkKLSAgICB7Ci0gICAgICBpc1N0YWxlQnJlYWRDcnVtYl8gPSB0cnVlOwotICAgICAgY29udHJvbGxlcl8ucHJvY2Vzc1N0YWxlQnJlYWRDcnVtYigpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3RhbGVCcmVhZENydW1iKCkKLSAgewotICAgIHJldHVybiBpc1N0YWxlQnJlYWRDcnVtYl87Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgd2hlbiBhIHN0YWxlIGJyZWFkY3J1bWIgaXMgZW5jb3VudGVyZWQgd2hpbGUgdHJhdmVyc2luZyBoaXN0b3J5IGNoYWluLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5leHRIaXN0b3J5QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gUmV0cmlldmVIaXN0b3J5QWN0aW9uLmdldEFjdGlvbkxpbmsoY29udHJvbGxlcl8uZ2V0SGlzdG9yeURpcmVjdGlvbigpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL05vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Ob2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNDRhNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL05vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTm9kZUFjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzTm9kZVNlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fOwotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNTdGF0dXNVcGRhdGVfOwotCi0gIHB1YmxpYyBOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGVNYW5hZ2VyOwotICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXyA9IGZhbHNlOwotICAgIHJlcXVpcmVzTm9kZVNlbGVjdGlvbl8gPSBmYWxzZTsKLSAgICByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fID0gZmFsc2U7Ci0gICAgcmVxdWlyZXNTdGF0dXNVcGRhdGVfID0gZmFsc2U7Ci0gIH0KLQotICAvLyAuLi5qc3A/bm9kZUlkPS4uLjwmaXNIaXN0b3J5PTE+Ci0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBub2RlSWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJZFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCEKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsbm9kZUlkU3RyaW5nKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIGlzU3RhbGVOb2RlKGludCBub2RlSWQpCi0gIHsKLSAgICByZXR1cm4gKG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCkgPT0gbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgKiBNYWtlIGEgbm9kZSB2aXNpYmxlLiBBIG5vZGUgaXMgdmlzaWJsZSB3aGVuIGFsbCBvZiBpdHMgYW5jZXN0b3JzIGFyZSBleHBhbmRlZC4KLSAgKiBAcGFyYW0gTm9kZSBUaGUgbm9kZSB0byBiZSBtYWRlIHZpc2libGUuCi0gICogQHJldHVybiBib29sZWFuIEluZGljYXRvciBmb3Igd2hldGhlciBvciBub3QgdGhlIHRyZWUgc3RydWN0dXJlIHdhcyBjaGFuZ2VkIChpLmUuIGV4cGFuZGVkIHRvIHNob3cgdGhlIG5vZGUgaW4gcXVlc3Rpb24pLgotICAqLwotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBtYWtlTm9kZVZpc2libGUoTm9kZSBub2RlKQotICB7Ci0gICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gbm9kZS5nZXROb2RlTWFuYWdlcigpLm1ha2VOb2RlVmlzaWJsZShub2RlKTsKLSAgICByZXR1cm4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ha2UgYSBub2RlIHZpc2libGUuIEEgbm9kZSBpcyB2aXNpYmxlIHdoZW4gYWxsIG9mIGl0cyBhbmNlc3RvcnMgYXJlIGV4cGFuZGVkLgotICAgKiBAcGFyYW0gTm9kZSBUaGUgbm9kZSB0byBiZSBtYWRlIHZpc2libGUuCi0gICAqIEByZXR1cm4gYm9vbGVhbiBJbmRpY2F0b3IgZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0cmVlIHN0cnVjdHVyZSB3YXMgY2hhbmdlZCAoaS5lLiBleHBhbmRlZCB0byBzaG93IHRoZSBub2RlIGluIHF1ZXN0aW9uKS4KLSAgICovCi0gICBwdWJsaWMgZmluYWwgdm9pZCBzZXRUcmVlUmVmcmVzaE5lZWRlZCgpCi0gICB7Ci0gICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXyA9IHRydWU7Ci0gICAgIAotICAgfQotICAKLSAgLyoqCi0gICogU2VsZWN0IGEgbm9kZSB3aXRoIGlkIG5vZGVJZC4KLSAgKiBAcGFyYW0gaW50IFRoZSBpZCBvZiB0aGUgbm9kZSB0byBiZSBzZWxlY3RlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0U2VsZWN0ZWROb2RlSWQoaW50IG5vZGVJZCkKLSAgewotICAgIGlmIChub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlSWQoKSAhPSBub2RlSWQpCi0gICAgewotICAgICAgcmVxdWlyZXNOb2RlU2VsZWN0aW9uXyA9IHRydWU7Ci0gICAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRTZWxlY3RlZFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSAhPSB2aWV3SWQpCi0gICAgewotICAgICAgcmVxdWlyZXNWaWV3U2VsZWN0aW9uXyA9IHRydWU7Ci0gICAgICBzZWxlY3RlZE5vZGUuc2V0Vmlld0lkKHZpZXdJZCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSB0cmVldmlldyByZXF1aXJlcyByZWxvYWRpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBhY3Rpb24uCi0gIC8vIFJlbG9hZGluZyBpcyByZXF1aXJlZCB3aGVuIGJyYW5jaGVzIGFyZSBhZGRlZC9yZW1vdmVkLgotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfOwotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgbmV3IG5vZGUgaGFzIGJlZW4gc2VsZWN0ZWQgYXMgYSByZXN1bHQgb2YgdGhlIGFjdGlvbi4KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNOb2RlU2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlc05vZGVTZWxlY3Rpb25fOwotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIGlmIGEgbmV3IHZpZXcgZWxlbWVudCBpcyBzZWxlY3RlZC4KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNWaWV3U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fOwotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIGlmIGFueSBzdGF0dXMgbWVzc2FnZXMgYXJvc2UgZnJvbSB0aGlzIGFjdGlvbi4KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNTdGF0dXNVcGRhdGUoKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzU3RhdHVzVXBkYXRlXzsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDIyMTE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uKCkKLSAgewotICB9Ci0KLSAgLy8gY2FsZW5kYXJfYnJvd3Nlci5qc3A/c2Vzc2lvbklkPS4uLiZjYWxlbmRhclR5cGU9Li4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgY2FsZW5kYXJUeXBlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJjYWxlbmRhcl9icm93c2VyLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKGNhbGVuZGFyVHlwZSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvckRhdGUoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvckRhdGVUaW1lKFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yR1llYXJNb250aChTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dZRUFSTU9OVEgpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yR0RheShTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dEQVkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yR01vbnRoRGF5KFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR01PTlRIREFZKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvT3BlbldTRExCcm93c2VyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvT3BlbldTRExCcm93c2VyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNGNkODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL09wZW5XU0RMQnJvd3NlckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTRExCcm93c2VyQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuV1NETEJyb3dzZXJBY3Rpb24oKQotICB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyBzZXNzaW9uSWQsaW50IHdzZGxUeXBlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsX2Jyb3dzZXIuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5XU0RMX1RZUEUpLmFwcGVuZCgnPScpLmFwcGVuZCh3c2RsVHlwZSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JTZXJ2aWNlKFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvclNlcnZpY2VJbnRlcmZhY2UoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUHJveHlMb2FkUGFnZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Byb3h5TG9hZFBhZ2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVlOTMwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUHJveHlMb2FkUGFnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgUHJveHlMb2FkUGFnZUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICAvLyBHZXQgdGhlIGFjdGlvbiBnaXZlbiBhIHJlbGF0aXZlIHRhcmdldFBhZ2UgVVJMLiBlLmcuICJmb3Jtcy9Mb25nTG9hZGluZ0Zvcm0uanNwIgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyB0YXJnZXRQYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobnVsbCx0YXJnZXRQYWdlKTsKLSAgfQotICAKLSAgLy8gR2V0IHRoZSBhY3Rpb24gZ2l2ZW4gYSBzZXNzaW9uSWQgYW5kIGEgcmVsYXRpdmUgdGFyZ2V0UGFnZSBVUkwuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxTdHJpbmcgdGFyZ2V0UGFnZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZm9ybXMvUHJveHlMb2FkUGFnZS5qc3A/Iik7Ci0gICAgaWYgKHNlc3Npb25JZCAhPSBudWxsKQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCkuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRBUkdFVF9QQUdFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGFnZSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Jlc2l6ZUZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Jlc2l6ZUZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzcwNTBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9SZXNpemVGcmFtZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZXNpemVGcmFtZXNBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSk7Ci0gICAgaWYgKGZyYW1lTmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5GUkFNRV9OQU1FLGZyYW1lTmFtZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwcm9jZXNzT3RoZXJzKHBhcnNlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci0gIAotICBwdWJsaWMgUmVzaXplRnJhbWVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKCk7Ci0gICAgICBwYXJzZXIucGFyc2VSZXF1ZXN0KHJlcXVlc3QsSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICAgICAgYm9vbGVhbiByZXN1bHQgPSBwcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgY2F0Y2ggKE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ5ZDIyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkJyZWFkQ3J1bWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHByaXZhdGUgQnJlYWRDcnVtYiBicmVhZENydW1iXzsKLQotICBwdWJsaWMgUmV0cmlldmVIaXN0b3J5QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIGJyZWFkQ3J1bWJfID0gbnVsbDsKLSAgfQotCi0gIC8vIGFjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uLmpzcD9qdW1wPTEgIC0gZm9yd2FyZCAgKEFjdGlvbklucHV0cy5KVU1QX0ZPUldBUkQpCi0gIC8vIGFjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uLmpzcD9qdW1wPS0xIC0gYmFja3dhcmQgKEFjdGlvbklucHV0cy5KVU1QX0JBQ0spCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IGp1bXApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImFjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSlVNUCkuYXBwZW5kKCc9JykuYXBwZW5kKGp1bXApOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcganVtcFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5KVU1QKTsKLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KGp1bXBTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsZWQhCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuSlVNUCxqdW1wU3RyaW5nKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQganVtcCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkpVTVApKTsKLSAgICBzd2l0Y2ggKGp1bXApCi0gICAgewotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuSlVNUF9GT1JXQVJEOgotICAgICAgICBicmVhZENydW1iXyA9IGNvbnRyb2xsZXJfLmZvcndhcmQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEFjdGlvbklucHV0cy5KVU1QX0JBQ0s6Ci0gICAgICAgIGJyZWFkQ3J1bWJfID0gY29udHJvbGxlcl8uYmFjaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJyZWFkQ3J1bWIgZ2V0QnJlYWRDcnVtYigpCi0gIHsKLSAgICByZXR1cm4gYnJlYWRDcnVtYl87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjM4ZTg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZWxlY3ROb2RlQWN0aW9uIGV4dGVuZHMgTm9kZUFjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZSBzZWxlY3RlZE5vZGVfOwotCi0gIHB1YmxpYyBTZWxlY3ROb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsbm9kZU1hbmFnZXIpOwotICAgIHNlbGVjdGVkTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcGVyZm9ybUJhc2VBY3Rpb24oaW50IG5vZGVJZCkKLSAgewotICAgIHNldFNlbGVjdGVkTm9kZUlkKG5vZGVJZCk7Ci0gICAgc2VsZWN0ZWROb2RlXyA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1FeHRlbmRlZEFjdGlvbigpCi0gIHsKLQkgLy90aGUgZXh0ZW5kZWQgY2xhc3NlcyBjYW4gaW50ZXJqZWN0IGhlcmUgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbm9kZSBpcyB2aXNpYmxlLgotICAgICAgbWFrZU5vZGVWaXNpYmxlKG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCkpOwotICAgICAgcGVyZm9ybUJhc2VBY3Rpb24obm9kZUlkKTsKLSAgICAgIHBlcmZvcm1FeHRlbmRlZEFjdGlvbigpOwotICAgICAgYWRkVG9IaXN0b3J5KGdldFBlcnNwZWN0aXZlSWQoKSxnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzZXRTdGFsZUJyZWFkQ3J1bWIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRTZWxlY3RlZE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkTm9kZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJVHJhbnNmb3JtZXJbXSB7bmV3IE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXyl9OwotICB9Ci0KLSAgLy8gU2VsZWN0aW5nIGEgbm9kZSBjaGFuZ2VzIHRoZSB0cmVldmlldyBjb250ZW50IGFuZCB0aGUgcHJvcGVydGllcyBjb250YWluZXIuCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IGludCBnZXRQZXJzcGVjdGl2ZUlkKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjZmZmU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5DdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2VsZWN0Tm9kZVRvb2xBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIHByb3RlY3RlZCBUb29sIHNlbGVjdGVkVG9vbF87Ci0KLSAgcHVibGljIFNlbGVjdE5vZGVUb29sQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsbm9kZU1hbmFnZXIpOwotICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGVNYW5hZ2VyOwotICAgIHNlbGVjdGVkVG9vbF8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGVNYW5hZ2VyIGdldE5vZGVNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiBub2RlTWFuYWdlcl87Ci0gIH0KLQotICAvLyAuLi5qc3A/bm9kZUlkPS4uLiZ0b29sSWQ9Li4uPCZ2aWV3SWQ9Li4uJnZpZXdUb29sSWQ9Li4uPjwmaXNIaXN0b3J5PTE+Ci0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gc3VwZXIucHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIFN0cmluZyB0b29sSWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBTdHJpbmcgdmlld0lkU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgU3RyaW5nIHZpZXdUb29sSWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0KLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHRvb2xJZFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZC4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5UT09MSUQsdG9vbElkU3RyaW5nKTsKLQotICAgIC8vIE9wdGlvbmFsIHByb3BlcnRpZXMKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpbnQgdmlld0lkID0gSW50ZWdlci5wYXJzZUludCh2aWV3SWRTdHJpbmcpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsdmlld0lkU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3SWQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgewotICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KHZpZXdUb29sSWRTdHJpbmcpOwotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsdmlld1Rvb2xJZFN0cmluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbm9kZSBpcyB2aXNpYmxlLgotICAgICAgbWFrZU5vZGVWaXNpYmxlKG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCkpOwotICAgICAgc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICAgIHNlbGVjdGVkTm9kZV8gPSBub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICBpbnQgdG9vbElkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVE9PTElEKSk7Ci0gICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgIHRvb2xNYW5hZ2VyLnNldFNlbGVjdGVkVG9vbElkKHRvb2xJZCk7Ci0gICAgICBzZWxlY3RlZFRvb2xfID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICBTdHJpbmcgdmlld0lkU3RyaW5nID0gKChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICAgIGlmICh2aWV3SWRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW50IHZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQodmlld0lkU3RyaW5nKTsKLSAgICAgICAgc2V0U2VsZWN0ZWRWaWV3SWQodmlld0lkKTsKLSAgICAgICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdmlld1Rvb2xJZFN0cmluZyA9ICgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCkpOwotICAgICAgICAgIFZpZXdUb29sIHZpZXdUb29sID0gKFZpZXdUb29sKXNlbGVjdGVkVG9vbF87Ci0gICAgICAgICAgaWYgKHZpZXdUb29sSWRTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdmlld1Rvb2xJZCA9IEludGVnZXIucGFyc2VJbnQodmlld1Rvb2xJZFN0cmluZyk7Ci0gICAgICAgICAgICBUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICAgICAgICAgaWYgKHZpZXdUb29sTWFuYWdlciA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWlzSGlzdG9yeUFjdGlvbigpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmlld1Rvb2xNYW5hZ2VyID0gdmlld1Rvb2wuY3JlYXRlVG9vbE1hbmFnZXIodmlld0lkKTsKLSAgICAgICAgICAgICAgICB2aWV3VG9vbElkID0gdmlld1Rvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbElkKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2V0U3RhbGVCcmVhZENydW1iKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2aWV3VG9vbE1hbmFnZXIuc2V0U2VsZWN0ZWRUb29sSWQodmlld1Rvb2xJZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHNldFNlbGVjdGVkVmlld0lkKEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0gICAgICBhZGRUb0hpc3RvcnkoZ2V0UGVyc3BlY3RpdmVJZCgpLGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHNldFN0YWxlQnJlYWRDcnVtYigpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJVHJhbnNmb3JtZXJbXSB7bmV3IEN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pfTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUb29sIGdldFNlbGVjdGVkVmlld1Rvb2woKQotICB7Ci0gICAgaWYgKHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSAhPSBudWxsKQotICAgICAgcmV0dXJuIHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVG9vbCBnZXRTZWxlY3RlZFRvb2woKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkVG9vbF87Ci0gIH0KLQotICAvLyBTZWxlY3RpbmcgYSBub2RlIHRvb2wgdXBkYXRlcyB0aGUgcHJvcGVydGllcyBjb250ZW50LiBBbHNvLCBpbiB0aGUgZXZlbnQKLSAgLy8gb2YgYSBoaXN0b3J5IHN3aXRjaCwgbm9kZXMgbWF5IG5lZWQgdG8gYmUgc2VsZWN0ZWQgcmVzdWx0aW5nIGluIGNoYW5nZXMgdG8KLSAgLy8gYm90aCB0aGUgdHJlZXZpZXcgY29udGVudCBhbmQgdGhlIHByb3BlcnRpZXMgY29udGFpbmVyLiBUaGVzZSByZXF1aXJlbWVudHMgYXJlCi0gIC8vIGNvdmVyZWQgdGhyb3VnaCB0aGUgYmFzZSBjbGFzcy4KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50UGFnZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcnNwZWN0aXZlSWQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3NGZhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgU2hvd1BlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwdWJsaWMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgLy8gYWN0aW9ucy9zaG93X3BlcnNwZWN0aXZlLmpzcD9wZXJzcGVjdGl2ZT0wPCZpc0hpc3Rvcnk9MT4gLSBVRERJIChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSkKLSAgLy8gYWN0aW9ucy9zaG93X3BlcnNwZWN0aXZlLmpzcD9wZXJzcGVjdGl2ZT0xPCZpc0hpc3Rvcnk9MT4gLSBXU0lMIChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTCkKLSAgLy8gYWN0aW9ucy9zaG93X3BlcnNwZWN0aXZlLmpzcD9wZXJzcGVjdGl2ZT0yPCZpc0hpc3Rvcnk9MT4gLSBXU0RMIChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCkKLSAgLy8gYWN0aW9ucy9zaG93X3BlcnNwZWN0aXZlLmpzcD9wZXJzcGVjdGl2ZT0zPCZpc0hpc3Rvcnk9MT4gLSBGYXZvcml0ZXMgKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9GQVZPUklURVMpCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5ld1BlcnNwZWN0aXZlLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSkuYXBwZW5kKCc9JykuYXBwZW5kKG5ld1BlcnNwZWN0aXZlKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKTsKLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHBlcnNwZWN0aXZlU3RyaW5nKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUscGVyc3BlY3RpdmVTdHJpbmcpOwotICAgICAgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKCk7Ci0gICAgICBwYXJzZXIucGFyc2VSZXF1ZXN0KHJlcXVlc3QsSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICAgICAgcmVzdWx0ID0gcHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICAgIHJlbW92ZWRQcm9wZXJ0aWVzXy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsZWQhIC0gVGhpcyBzaG91bGQgbm90IGhhcHBlbi4KLSAgICB9Ci0gICAgY2F0Y2ggKE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBwZXJzcGVjdGl2ZSA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKSk7Ci0gICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlKTsKLSAgICBhZGRUb0hpc3RvcnkocGVyc3BlY3RpdmUsZ2V0QWN0aW9uTGluayhwZXJzcGVjdGl2ZSx0cnVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzA1YjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk5vZGVJZFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFRvZ2dsZU5vZGVBY3Rpb24gZXh0ZW5kcyBOb2RlQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlIHRvZ2dsZWROb2RlXzsKLSAgcHVibGljIFRvZ2dsZU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixub2RlTWFuYWdlcik7Ci0gICAgdG9nZ2xlZE5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIFRvZ2dsZSB0aGUgY3VycmVudCBub2RlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpZmYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAotICAvLyBpcyBhIHJlbGF0ZWQgZGVzY2VuZGFudCBvZiBhIGNvbGxhcHNlZCBub2RlLgotICAvKioKLSAgKiBUb2dnbGUgdGhlIGN1cnJlbnQgbm9kZSBhbmQgdXBkYXRlIHRoZSBzZWxlY3Rpb24gaWZmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKLSAgKiBub2RlIGlzIGEgcmVsYXRlZCBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IG5vZGUgYW5kIHRoZSBjdXJyZW50IG5vZGUgaXMKLSAgKiBub3cgY29sbGFwc2VkIGFzIGEgcmVzdWx0IG9mIHRoaXMgYWN0aW9uLgotICAqCi0gICogQHBhcmFtIGludCBUaGUgbm9kZSBJRCBvZiB0aGUgbm9kZSBmb3Igd2hpY2ggdGhpcyBhY3Rpb24gYXBwbGllcyB0by4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gSW5kaWNhdG9yIG9mIHdoZXRoZXIgb3Igbm90IGEgc2VsZWN0aW9uIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LgotICAqLwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwZXJmb3JtQmFzZUFjdGlvbihpbnQgbm9kZUlkKQotICB7Ci0gICAgdG9nZ2xlZE5vZGVfID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICBub2RlTWFuYWdlcl8uc2V0Rm9jdXNlZE5vZGVJZChub2RlSWQpOwotICAgIHRvZ2dsZWROb2RlXy5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbighdG9nZ2xlZE5vZGVfLmlzT3BlbigpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKCFzZWxlY3RlZE5vZGUuaXNWaXNpYmxlKCkpCi0gICAgICB7Ci0gICAgICAgIHNldFNlbGVjdGVkTm9kZUlkKG5vZGVJZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICBpZiAocGVyZm9ybUJhc2VBY3Rpb24obm9kZUlkKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB0b2dnbGUgbGluayBpbiB0aGUgaGlzdG9yeS4KLSAgICAgICAgYWRkVG9IaXN0b3J5KGdldFBlcnNwZWN0aXZlSWQoKSxnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpKTsKLSAgICAgIH0KLSAgICAgIC8vIERvIG5vdCBzYXZlIHRoZSB0b2dnbGUgaW4gaGlzdG9yeS4KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzZXRTdGFsZUJyZWFkQ3J1bWIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRUb2dnbGVkTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gdG9nZ2xlZE5vZGVfOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICByZXR1cm4gbmV3IElUcmFuc2Zvcm1lcltdIHtuZXcgTm9kZUlkVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pfTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IGludCBnZXRQZXJzcGVjdGl2ZUlkKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOTRmNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1ZhbGlkYXRlRWRpdEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVFZGl0QWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJhY3Rpb25zL1ZhbGlkYXRlRWRpdEFjdGlvbkpTUC5qc3AiOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9XU0RMRmlsZU5hbWVIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9XU0RMRmlsZU5hbWVIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYyNGYyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvV1NETEZpbGVOYW1lSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotcHVibGljIGNsYXNzIFdTRExGaWxlTmFtZUhlbHBlcgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVmYXVsdF8gPSAidGVtcC53c2RsIjsKLSAgCi0gIC8qKgotICAqIEdpdmVuIGEgd3NkbCBwYXRoIChmaWxlLCBVUkwgZXRjLiksIGd1ZXNzIGF0IHRoZSBmaWxlIG5hbWUgYnkgbG9va2luZyBmb3IgdGhlIC53c2RsIGV4dGVuc2lvbiBhdCB0aGUgZW5kIG9mIHRoZQotICAqIHBhdGggYW5kIHRoZSBmaWxlIHRoYXQgaXQgYmVsb25ncyB0by4gSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHJldHVybiB0aGUgZGVmYXVsdCBkZWZpbmVkIGluIHRoaXMgY2xhc3MuCi0gICogQHBhcmFtIFN0cmluZyBUaGUgcGF0aCAoZmlsZSwgVVJMIGV0Yy4pIG9mIHRoaXMgV1NETCBmaWxlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBXU0RMIGZpbGUgbmFtZSBkZXRlcm1pbmVkIGJ5IHRoaXMgcm91dGluZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0V1NETEZpbGVOYW1lKFN0cmluZyB3c2RsUGF0aG5hbWUpCi0gIHsKLSAgICBpZiAod3NkbFBhdGhuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHdzZGxQYXRobmFtZS5lbmRzV2l0aCgiLndzZGwiKSkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBNYXRoLm1heCh3c2RsUGF0aG5hbWUubGFzdEluZGV4T2YoIi8iKSx3c2RsUGF0aG5hbWUubGFzdEluZGV4T2YoIlxcIikpOwotICAgICAgICBpZiAobGFzdFNlcGFyYXRvclBvcyA+IDApCi0gICAgICAgICAgcmV0dXJuIHdzZGxQYXRobmFtZS5zdWJzdHJpbmcobGFzdFNlcGFyYXRvclBvcysxLHdzZGxQYXRobmFtZS5sZW5ndGgoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBkZWZhdWx0XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1dyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzNjliMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLQotcHVibGljIGNsYXNzIFdyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJhY3Rpb25zL1dyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvQWN0aW9uSW5wdXRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9BY3Rpb25JbnB1dHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2MGNmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9BY3Rpb25JbnB1dHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEFjdGlvbklucHV0cwotewotICAvLyBVUkwgcGFybSBmb3IgYWxsIGFjdGlvbnMgd2hpY2ggYXJlIGluIHRoZSBoaXN0b3J5IGxpc3QuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElTSElTVE9SWSA9ICJpc0hpc3RvcnkiOwotCi0gIC8vIFV0aWxpdHkgY29uc3RhbnQgZm9yIHRyZWUgbm9kZSBpZGVudGlmaWNhdGlvbi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERUlEID0gIm5vZGVJZCI7Ci0KLSAgLy8gVXRpbGl0eSBjb25zdGFudCBmb3IgdG9vbCBpZGVudGlmaWNhdGlvbi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTElEID0gInRvb2xJZCI7Ci0KLSAgLy8gVXRpbGl0eSBjb25zdGFudCBmb3IgdmlldyBpZGVudGlmaWNhdGlvbi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklFV0lEID0gInZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZJRVdJRF9ERUZBVUxUID0gLTE7Ci0KLSAgLy8gVXRpbGl0eSBjb25zdGFudCBmb3IgdmlldyB0b29sIGlkZW50aWZpY2F0aW9uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWSUVXVE9PTElEID0gInZpZXdUb29sSWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWSUVXVE9PTElEX0RFRkFVTFQgPSAtMTsKLQotICAvLyBVdGlsaXR5IGNvbnN0YW50cyBmb3IgdHJhbnNwb3J0IGNsYXNzZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBTlNQT1JUX0NMQVNTX05BTUUgPSAib3JnLnVkZGk0ai5UcmFuc3BvcnRDbGFzc05hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFTUE9SVF9DTEFTUyA9ICJvcmcudWRkaTRqLnRyYW5zcG9ydC5BcGFjaGVBeGlzVHJhbnNwb3J0IjsKLSAgLy9wdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBWElTX1RSQU5TUE9SVF9DTEFTUyA9ICJvcmcudWRkaTRqLnRyYW5zcG9ydC5BcGFjaGVBeGlzVHJhbnNwb3J0IjsKLSAgLy9wdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX1RSQU5TUE9SVF9DTEFTUyA9ICJvcmcudWRkaTRqLnRyYW5zcG9ydC5BcGFjaGVTT0FQVHJhbnNwb3J0IjsKLQotICAvLyBUb2dnbGVOb2RlQWN0aW9uIGFuZCBpdHMgZGVyaXZhdGl2ZXMuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRU4gPSAib3BlbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRU5fTk9ERSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMT1NFX05PREUgPSAwOwotCi0gIC8vIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQRVJTUEVDVElWRSA9ICJwZXJzcGVjdGl2ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUlNQRUNUSVZFX1VEREkgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJTUEVDVElWRV9XU0lMID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSU1BFQ1RJVkVfV1NETCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUlNQRUNUSVZFX0ZBVk9SSVRFUyA9IDM7Ci0KLSAgLy8gUmV0cmlldmVIaXN0b3J5QWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpVTVAgPSAianVtcCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEpVTVBfRk9SV0FSRCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEpVTVBfQkFDSyA9IC0xOwotCi0gIC8vIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV0VCX1NFUlZJQ0VfV0laQVJEID0gIndlYlNlcnZpY2VXaXphcmQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXRUJfU0VSVklDRV9DTElFTlRfV0laQVJEID0gMDsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV0VCX1NFUlZJQ0VfU0tFTEVUT05fV0laQVJEID0gMTsKLQotICAvLyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbgotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXT1JLQkVOQ0hfUFJPSkVDVF9OQU1FID0gIndvcmtiZW5jaFByb2plY3ROYW1lIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JUX0ZJTEUgPSAiaW1wb3J0V1NETCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIElNUE9SVEVEX0ZJTEVfTkFNRSA9ICJpbXBvcnRlZEZpbGVOYW1lIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JUX1RPX1dTSUwgPSAiaW1wb3J0VG9XU0lMIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9GSUxFX05BTUUgPSAiV1NJTEZpbGVOYW1lIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JURURfV1NETF9VUkwgPSAiaW1wb3J0ZWRXc2RsVXJsIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JUX0FDVElPTiA9ICJpbXBvcnRBY3Rpb24iOwotCi0gIC8vIFByb3h5TG9hZEFjdGlvbgotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUQVJHRVRfUEFHRSA9ICJ0YXJnZXRQYWdlIjsKLQotICAvLyBTZXNzaW9uIElEIGZvciBwb3AgdXBzIHdob3NlIGJyb3dzZXJzIGNob29zZSB0byBpZ25vcmUgdGhlIHNlc3Npb24uCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNFU1NJT05JRCA9ICJzSWQiOwotCi0gIC8vIFdTREwgQnJvd3NlcgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUID0gInByb2plY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWSA9ICJjYXRlZ29yeSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfVFlQRSA9ICJ3c2RsVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTRExfVFlQRV9TRVJWSUNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCA9ICJ3ZWJQcm9qZWN0V1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0ZBVk9SSVRFX1dTRExfVVJMID0gImZhdm9yaXRlV1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1dTRExfVVJMID0gIndzZGxVUkwiOwotCi0gIC8vIENhbGVuZGFyIEJyb3dzZXIKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FMRU5EQVJfVFlQRSA9ICJjYWxlbmRhclR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0RBVEUgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0RBVEVUSU1FID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMRU5EQVJfVFlQRV9HWUVBUk1PTlRIID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMRU5EQVJfVFlQRV9HREFZID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVkgPSA0OwotCi0gIC8vIFJlc2l6ZUZyYW1lQWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQU1FX05BTUUgPSAiZnJhbWVOYW1lIjsKLQotICAvLyBPdGhlciBBY3Rpb25zCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENVUlJFTlRfVE9PTF9NQU5BR0VSID0gImN1cnJlbnRUb29sTWFuYWdlciI7Ci0gIAotICAvLyBBY3Rpb24gRW5naW5lCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9FTkdJTkVfU0NFTkFSSU8gPSAiYWN0aW9uRW5naW5lU2NlbmFyaW8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fRU5HSU5FX01PREUgPSAiYWN0aW9uRW5naW5lTW9kZSI7Ci0KLSAgLy8gTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIgPSAibXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvRnJhbWVOYW1lcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvRnJhbWVOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTg1Mzg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL0ZyYW1lTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgRnJhbWVOYW1lcwotewotICAvLyB3c2V4cGxvcmVyLmpzcAotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXSU5ET1dfTkFNRV9XU0VYUExPUkVSX0pTUCA9ICJ3c2V4cGxvcmVyLmpzcCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBFUlNQRUNUSVZFX1dPUktBUkVBID0gInBlcnNwZWN0aXZlX3dvcmthcmVhIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUEVSU1BFQ1RJVkVfVE9PTEJBUiA9ICJwZXJzcGVjdGl2ZV90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUEVSU1BFQ1RJVkVfQ09OVEVOVCA9ICJwZXJzcGVjdGl2ZV9jb250ZW50IjsKLSAgCi0gIC8vIFdTREwgQnJvd3NlcgotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1RPT0xCQVIgPSAid3NkbF90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UID0gIndzZGxfY29udGVudCI7Ci0gIAotICAvLyBDYWxlbmRhciBCcm93c2VyCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBTEVOREFSX1RPT0xCQVIgPSAiY2FsZW5kYXJfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBTEVOREFSX0NPTlRFTlQgPSAiY2FsZW5kYXJfY29udGVudCI7ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL01vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9Nb2RlbENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTg3ZGQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL01vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIE1vZGVsQ29uc3RhbnRzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9JRCA9ICJyZWxhdGlvbnNoaXBJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9MT0NBTE5BTUVfU0VQQVJBVE9SID0gIiMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfT1dORVIgPSAib3duZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfQ0hJTERSRU4gPSAiY2hpbGRyZW4iOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvVG9vbFR5cGVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9Ub29sVHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5MmNiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9Ub29sVHlwZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBUb29sVHlwZXMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEZPUk0gPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgQUNUSU9OID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFZJRVcgPSAyOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL0xpc3RFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZThjMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIExpc3RFbGVtZW50Ci17Ci0gIHByaXZhdGUgaW50IHZpZXdJZF87Ci0gIHByaXZhdGUgT2JqZWN0IG9iamVjdF87Ci0gIC8vIEZvciBzZWFyY2ggcGFyYW1ldGVyczogaW5mbyBvbiB0aGUgTm9kZSBhbmQgVmlld1Rvb2wgaG9sZGluZyB0aGlzIGVsZW1lbnQuCi0gIHByaXZhdGUgaW50IHRhcmdldE5vZGVJZF87Ci0gIHByaXZhdGUgaW50IHRhcmdldFRvb2xJZF87Ci0gIHByaXZhdGUgaW50IHRhcmdldFZpZXdJZF87Ci0KLSAgcHVibGljIExpc3RFbGVtZW50KE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBvYmplY3RfID0gb2JqZWN0OwotICAgIHZpZXdJZF8gPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQ7Ci0gICAgdGFyZ2V0Tm9kZUlkXyA9IC0xOwotICAgIHRhcmdldFRvb2xJZF8gPSAtMTsKLSAgICB0YXJnZXRWaWV3SWRfID0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE9iamVjdCBnZXRPYmplY3QoKQotICB7Ci0gICAgcmV0dXJuIG9iamVjdF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRWaWV3SWQoaW50IHZpZXdJZCkKLSAgewotICAgIHZpZXdJZF8gPSB2aWV3SWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFZpZXdJZCgpCi0gIHsKLSAgICByZXR1cm4gdmlld0lkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFRhcmdldFZpZXdUb29sSW5mbyhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCkKLSAgewotICAgIHRhcmdldE5vZGVJZF8gPSBub2RlSWQ7Ci0gICAgdGFyZ2V0VG9vbElkXyA9IHRvb2xJZDsKLSAgICB0YXJnZXRWaWV3SWRfID0gdmlld0lkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRUYXJnZXROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIHRhcmdldE5vZGVJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRhcmdldFRvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0VG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VGFyZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB0YXJnZXRWaWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0KCkudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL0xpc3RNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YTc4YWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIExpc3RNYW5hZ2VyCi17Ci0gIHByaXZhdGUgaW50IG5leHRWaWV3SWRfOwotICBwcml2YXRlIFZlY3RvciBpdGVtc0xpc3RfOwotICBwcml2YXRlIEhhc2h0YWJsZSBpdGVtc1RhYmxlXzsKLQotICBwdWJsaWMgTGlzdE1hbmFnZXIoKQotICB7Ci0gICAgbmV4dFZpZXdJZF8gPSAwOwotICAgIGl0ZW1zTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgaXRlbXNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgdXBkYXRlTWFuYWdlcihMaXN0RWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaXRlbXNUYWJsZV8ucHV0KFN0cmluZy52YWx1ZU9mKG5leHRWaWV3SWRfKSxlbGVtZW50KTsKLSAgICBlbGVtZW50LnNldFZpZXdJZChuZXh0Vmlld0lkXyk7Ci0gICAgbmV4dFZpZXdJZF8rKzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZChMaXN0RWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaXRlbXNMaXN0Xy5hZGRFbGVtZW50KGVsZW1lbnQpOwotICAgIHVwZGF0ZU1hbmFnZXIoZWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRXaXRoQ3VycmVudFZpZXdJZChMaXN0RWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaXRlbXNMaXN0Xy5hZGRFbGVtZW50KGVsZW1lbnQpOwotICAgIGl0ZW1zVGFibGVfLnB1dChTdHJpbmcudmFsdWVPZihlbGVtZW50LmdldFZpZXdJZCgpKSxlbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBMaXN0RWxlbWVudCBlbGVtZW50QXQoaW50IGluZGV4KQotICB7Ci0gICAgcmV0dXJuIChMaXN0RWxlbWVudClpdGVtc0xpc3RfLmVsZW1lbnRBdChpbmRleCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTGlzdEVsZW1lbnQgZ2V0RWxlbWVudFdpdGhWaWV3SWQoaW50IHZpZXdJZCkKLSAgewotICAgIHJldHVybiAoTGlzdEVsZW1lbnQpaXRlbXNUYWJsZV8uZ2V0KFN0cmluZy52YWx1ZU9mKHZpZXdJZCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlRWxlbWVudFdpdGhWaWV3SWQoaW50IHZpZXdJZCkKLSAgewotICAgIGl0ZW1zVGFibGVfLnJlbW92ZShTdHJpbmcudmFsdWVPZih2aWV3SWQpKTsKLSAgICBmb3IgKGludCBpPTA7aTxpdGVtc0xpc3RfLnNpemUoKTtpKyspCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBlbGVtZW50QXQoaSk7Ci0gICAgICBpZiAobGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCkgPT0gdmlld0lkKQotICAgICAgewotICAgICAgICBpdGVtc0xpc3RfLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlRWxlbWVudEF0KGludCBpbmRleCkKLSAgewotICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWVsZW1lbnRBdChpbmRleCk7Ci0gICAgaXRlbXNMaXN0Xy5yZW1vdmVFbGVtZW50QXQoaW5kZXgpOwotICAgIGl0ZW1zVGFibGVfLnJlbW92ZShTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRWaWV3SWQoKSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5zZXJ0RWxlbWVudEF0KExpc3RFbGVtZW50IGVsZW1lbnQsaW50IGluZGV4KQotICB7Ci0gICAgaXRlbXNMaXN0Xy5pbnNlcnRFbGVtZW50QXQoZWxlbWVudCxpbmRleCk7Ci0gICAgdXBkYXRlTWFuYWdlcihlbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBFbnVtZXJhdGlvbiBnZXRMaXN0RWxlbWVudHMoKQotICB7Ci0gICAgcmV0dXJuIGl0ZW1zTGlzdF8uZWxlbWVudHMoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyKCkKLSAgewotICAgIGl0ZW1zTGlzdF8ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICBpdGVtc1RhYmxlXy5jbGVhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExpc3RNYW5hZ2VyIGNvcHkoTGlzdE1hbmFnZXIgbmV3TGlzdE1hbmFnZXIpCi0gIHsKLSAgICBuZXdMaXN0TWFuYWdlci5jbGVhcigpOwotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1zTGlzdF8uc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCllbGVtZW50QXQoaSk7Ci0gICAgICBMaXN0RWxlbWVudCBuZXdMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChsaXN0RWxlbWVudC5nZXRPYmplY3QoKSk7Ci0gICAgICBuZXdMaXN0RWxlbWVudC5zZXRWaWV3SWQobGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCkpOwotICAgICAgbmV3TGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpLGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpLGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpKTsKLSAgICAgIG5ld0xpc3RNYW5hZ2VyLmFkZFdpdGhDdXJyZW50Vmlld0lkKG5ld0xpc3RFbGVtZW50KTsKLSAgICB9Ci0gICAgbmV3TGlzdE1hbmFnZXIuc2V0TmV4dFZpZXdJZChuZXh0Vmlld0lkXyk7Ci0gICAgcmV0dXJuIG5ld0xpc3RNYW5hZ2VyOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0TmV4dFZpZXdJZChpbnQgbmV4dFZpZXdJZCkKLSAgewotICAgIG5leHRWaWV3SWRfID0gbmV4dFZpZXdJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TmV4dFZpZXdJZCgpCi0gIHsKLSAgICByZXR1cm4gbmV4dFZpZXdJZF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL1RyZWVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9UcmVlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWQwOTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL1RyZWVFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotcHVibGljIGNsYXNzIFRyZWVFbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50Ci17Ci0gIHByaXZhdGUgU3RyaW5nIGtleV87Ci0KLSAgcHVibGljIFRyZWVFbGVtZW50KFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAga2V5XyA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIGtleSkKLSAgewotICAgIGtleV8gPSBrZXk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEtleSgpCi0gIHsKLSAgICByZXR1cm4ga2V5XzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGVxdWFscyhUcmVlRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGtleV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4ga2V5Xy5lcXVhbHMoZWxlbWVudC5nZXRLZXkoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkRhdGFQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkRhdGFQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhZjJiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9BY3Rpb25EYXRhUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5GYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5jb25zdGFudHMuQWN0aW9uRGF0YUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuQWN0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuU2NlbmFyaW9EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5UcmFuc2FjdGlvbkRlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRPTUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25EYXRhUGFyc2VyCi17Ci0gIHByaXZhdGUgRG9jdW1lbnQgZG9jOwotCi0gIHB1YmxpYyBTY2VuYXJpb0Rlc2NyaXB0b3IgcGFyc2VTY2VuYXJpbyhFbGVtZW50IGUpCi0gIHsKLSAgICBTY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yID0gbmV3IFNjZW5hcmlvRGVzY3JpcHRvcigpOwotICAgIE5vZGVMaXN0IHRyYW5zYWN0aW9ucyA9IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1RSQU5TQUNUSU9OKTsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gbmV3IFRyYW5zYWN0aW9uRGVzY3JpcHRvclt0cmFuc2FjdGlvbnMuZ2V0TGVuZ3RoKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbaV0gPSBwYXJzZVRyYW5zYWN0aW9uKChFbGVtZW50KSB0cmFuc2FjdGlvbnMuaXRlbShpKSk7Ci0gICAgc2NlbmFyaW9EZXNjcmlwdG9yLnNldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnModHJhbnNhY3Rpb25EZXNjcmlwdG9ycyk7Ci0gICAgcmV0dXJuIHNjZW5hcmlvRGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyBUcmFuc2FjdGlvbkRlc2NyaXB0b3IgcGFyc2VUcmFuc2FjdGlvbihFbGVtZW50IGUpCi0gIHsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3IgdHJhbnNhY3Rpb25EZXNjcmlwdG9yID0gbmV3IFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpOwotICAgIE5vZGVMaXN0IGFjdGlvbnMgPSBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9BQ1RJT04pOwotICAgIEFjdGlvbkRlc2NyaXB0b3JbXSBhY3Rpb25EZXNjcmlwdG9ycyA9IG5ldyBBY3Rpb25EZXNjcmlwdG9yW2FjdGlvbnMuZ2V0TGVuZ3RoKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspCi0gICAgICBhY3Rpb25EZXNjcmlwdG9yc1tpXSA9IHBhcnNlQWN0aW9uKChFbGVtZW50KSBhY3Rpb25zLml0ZW0oaSkpOwotICAgIHRyYW5zYWN0aW9uRGVzY3JpcHRvci5zZXRBY3Rpb25EZXNjcmlwdG9ycyhhY3Rpb25EZXNjcmlwdG9ycyk7Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uRGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyBBY3Rpb25EZXNjcmlwdG9yIHBhcnNlQWN0aW9uKEVsZW1lbnQgZSkKLSAgewotICAgIEFjdGlvbkRlc2NyaXB0b3IgYWN0aW9uRGVzY3JpcHRvciA9IG5ldyBBY3Rpb25EZXNjcmlwdG9yKCk7Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRJZChlLmdldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfSUQpKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9yLnNldEF0dGVtcHRzKEludGVnZXIucGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoQWN0aW9uRGF0YUNvbnN0YW50cy5BVFRSX0FUVEVNUFRTKSkpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgYWN0aW9uRGVzY3JpcHRvci5zZXRBdHRlbXB0cygxKTsKLSAgICB9Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRTdGF0dXNJZChlLmdldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfU1RBVFVTX0lEKSk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnRpZXNUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBOb2RlTGlzdCBwcm9wZXJ0aWVzID0gZS5nZXRFbGVtZW50c0J5VGFnTmFtZShBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfUFJPUEVSVFkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcHJvcGVydHkgPSAoRWxlbWVudCkgcHJvcGVydGllcy5pdGVtKGkpOwotICAgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eS5nZXRBdHRyaWJ1dGUoQWN0aW9uRGF0YUNvbnN0YW50cy5BVFRSX05BTUUpOwotICAgICAgTm9kZUxpc3QgdmFsdWVMaXN0ID0gcHJvcGVydHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1ZBTFVFKTsKLSAgICAgIGlmICh2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSB2YWx1ZXMgPSBuZXcgU3RyaW5nW3ZhbHVlTGlzdC5nZXRMZW5ndGgoKV07Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmFsdWVzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCB2YWx1ZSA9IChFbGVtZW50KSB2YWx1ZUxpc3QuaXRlbShqKTsKLSAgICAgICAgICBOb2RlIHRleHROb2RlID0gdmFsdWUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgIHZhbHVlc1tqXSA9ICh0ZXh0Tm9kZSAhPSBudWxsKSA/IHRleHROb2RlLmdldE5vZGVWYWx1ZSgpLnRyaW0oKSA6ICIiOwotICAgICAgICB9Ci0gICAgICAgIHByb3BlcnRpZXNUYWJsZS5wdXQobmFtZSwgdmFsdWVzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgTm9kZSB0ZXh0Tm9kZSA9ICgoRWxlbWVudCkgdmFsdWVMaXN0Lml0ZW0oMCkpLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgcHJvcGVydGllc1RhYmxlLnB1dChuYW1lLCAodGV4dE5vZGUgIT0gbnVsbCkgPyB0ZXh0Tm9kZS5nZXROb2RlVmFsdWUoKS50cmltKCkgOiAiIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzVGFibGUpOwotICAgIE5vZGVMaXN0IHN0YXR1c0xpc3QgPSBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9TVEFUVVMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdHVzTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgc3RhdHVzID0gKEVsZW1lbnQpc3RhdHVzTGlzdC5pdGVtKGkpOwotICAgICAgQ0RBVEFTZWN0aW9uIGNEYXRhID0gKENEQVRBU2VjdGlvbilzdGF0dXMuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgYWN0aW9uRGVzY3JpcHRvci5hZGRTdGF0dXMoY0RhdGEuZ2V0RGF0YSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFjdGlvbkRlc2NyaXB0b3I7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCB0b0VsZW1lbnQoU2NlbmFyaW9EZXNjcmlwdG9yIHNjZW5hcmlvRGVzY3JpcHRvcikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgc2NlbmFyaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfU0NFTkFSSU8pOwotICAgICAgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10gdHJhbnNhY3Rpb25EZXNjcmlwdG9ycyA9IHNjZW5hcmlvRGVzY3JpcHRvci5nZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgdHJhbnNhY3Rpb25FbGVtZW50ID0gdG9FbGVtZW50KHRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbaV0pOwotICAgICAgICBpZiAodHJhbnNhY3Rpb25FbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgc2NlbmFyaW9FbGVtZW50LmFwcGVuZENoaWxkKHRyYW5zYWN0aW9uRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2NlbmFyaW9FbGVtZW50OwotICAgIH0KLSAgICBjYXRjaCAoRE9NRXhjZXB0aW9uIGRvbWUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgdG9FbGVtZW50KFRyYW5zYWN0aW9uRGVzY3JpcHRvciB0cmFuc2FjdGlvbkRlc2NyaXB0b3IpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7Ci0gICAgICBFbGVtZW50IHRyYW5zYWN0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1RSQU5TQUNUSU9OKTsKLSAgICAgIEFjdGlvbkRlc2NyaXB0b3JbXSBhY3Rpb25EZXNjcmlwdG9ycyA9IHRyYW5zYWN0aW9uRGVzY3JpcHRvci5nZXRBY3Rpb25EZXNjcmlwdG9ycygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBhY3Rpb25FbGVtZW50ID0gdG9FbGVtZW50KGFjdGlvbkRlc2NyaXB0b3JzW2ldKTsKLSAgICAgICAgaWYgKGFjdGlvbkVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICB0cmFuc2FjdGlvbkVsZW1lbnQuYXBwZW5kQ2hpbGQoYWN0aW9uRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJhbnNhY3Rpb25FbGVtZW50OwotICAgIH0KLSAgICBjYXRjaCAoRE9NRXhjZXB0aW9uIGRvbWUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgdG9FbGVtZW50KEFjdGlvbkRlc2NyaXB0b3IgYWN0aW9uRGVzY3JpcHRvcikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgYWN0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX0FDVElPTik7Ci0gICAgICBhY3Rpb25FbGVtZW50LnNldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfSUQsIGFjdGlvbkRlc2NyaXB0b3IuZ2V0SWQoKSk7Ci0gICAgICBhY3Rpb25FbGVtZW50LnNldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfQVRURU1QVFMsIFN0cmluZy52YWx1ZU9mKGFjdGlvbkRlc2NyaXB0b3IuZ2V0QXR0ZW1wdHMoKSkpOwotICAgICAgU3RyaW5nIHN0YXR1c0lkID0gYWN0aW9uRGVzY3JpcHRvci5nZXRTdGF0dXNJZCgpOwotICAgICAgaWYgKHN0YXR1c0lkICE9IG51bGwpCi0gICAgICAgIGFjdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9TVEFUVVNfSUQsIHN0YXR1c0lkKTsKLSAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gYWN0aW9uRGVzY3JpcHRvci5nZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICBpZiAocHJvcGVydGllcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IGtleSA9IGl0Lm5leHQoKTsKLSAgICAgICAgICBPYmplY3QgdmFsdWUgPSBwcm9wZXJ0aWVzLmdldChrZXkpOwotICAgICAgICAgIE9iamVjdFtdIHZhbHVlczsKLSAgICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpCi0gICAgICAgICAgICB2YWx1ZXMgPSAoT2JqZWN0W10pdmFsdWU7Ci0gICAgICAgICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXN0KQotICAgICAgICAgICAgdmFsdWVzID0gKChMaXN0KXZhbHVlKS50b0FycmF5KCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWVzID0gbmV3IE9iamVjdFtdIHt2YWx1ZX07Ci0gICAgICAgICAgYm9vbGVhbiBpc0FkZGVkID0gZmFsc2U7Ci0gICAgICAgICAgRWxlbWVudCBwcm9wZXJ0eUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9QUk9QRVJUWSk7Ci0gICAgICAgICAgcHJvcGVydHlFbGVtZW50LnNldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfTkFNRSwga2V5LnRvU3RyaW5nKCkpOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnQgdmFsdWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfVkFMVUUpOwotICAgICAgICAgICAgICB2YWx1ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWVzW2ldLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgICAgICAgcHJvcGVydHlFbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlRWxlbWVudCk7Ci0gICAgICAgICAgICAgIGlzQWRkZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaXNBZGRlZCkKLSAgICAgICAgICAgIGFjdGlvbkVsZW1lbnQuYXBwZW5kQ2hpbGQocHJvcGVydHlFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgTGlzdCBzdGF0dXMgPSBhY3Rpb25EZXNjcmlwdG9yLmdldFN0YXR1cygpOwotICAgICAgaWYgKHN0YXR1cyAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc3RhdHVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IHN0YXR1c0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9TVEFUVVMpOwotICAgICAgICAgIENEQVRBU2VjdGlvbiBjRGF0YSA9IGRvY3VtZW50LmNyZWF0ZUNEQVRBU2VjdGlvbihpdC5uZXh0KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgc3RhdHVzRWxlbWVudC5hcHBlbmRDaGlsZChjRGF0YSk7Ci0gICAgICAgICAgYWN0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChzdGF0dXNFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGFjdGlvbkVsZW1lbnQ7Ci0gICAgfQotICAgIGNhdGNoIChET01FeGNlcHRpb24gZG9tZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIERvY3VtZW50IGdldERvY3VtZW50KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICAgIGRvYyA9IGJ1aWxkZXIubmV3RG9jdW1lbnQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfQotICAgIGNhdGNoIChGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGZjZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvQWN0aW9uRW5naW5lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9BY3Rpb25FbmdpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyZTJkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9BY3Rpb25FbmdpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZTsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5jb25zdGFudHMuQWN0aW9uRGF0YUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuQWN0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuU2NlbmFyaW9EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5UcmFuc2FjdGlvbkRlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25FbmdpbmUKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfRElTQUJMRUQgPSAweDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX1NUT1AgPSAweDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX1JFQ09SRCA9IDB4MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfUExBWSA9IDB4MzsKLQotICBwcml2YXRlIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLSAgcHJpdmF0ZSBieXRlIG1vZGU7Ci0gIHByaXZhdGUgVmVjdG9yIGFjdGlvbkRlc2NyaXB0b3JzOwotCi0gIHB1YmxpYyBBY3Rpb25FbmdpbmUoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICBtb2RlID0gTU9ERV9ESVNBQkxFRDsKLSAgICBhY3Rpb25EZXNjcmlwdG9ycyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGV4ZWN1dGVTY2VuYXJpbyhTY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yKQotICB7Ci0gICAgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10gdHJhbnNhY3Rpb25EZXNjcmlwdG9ycyA9IHNjZW5hcmlvRGVzY3JpcHRvci5nZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgICAgZXhlY3V0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbaV0pOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVRyYW5zYWN0aW9uKFRyYW5zYWN0aW9uRGVzY3JpcHRvciB0cmFuc2FjdGlvbkRlc2NyaXB0b3IpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzID0gdHJhbnNhY3Rpb25EZXNjcmlwdG9yLmdldEFjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAocmVzdWx0KQotICAgICAgewotICAgICAgICBpZiAoIWV4ZWN1dGVBY3Rpb24oYWN0aW9uRGVzY3JpcHRvcnNbaV0pKQotICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBhY3Rpb25EZXNjcmlwdG9yc1tpXS5zZXRTdGF0dXNJZChBY3Rpb25EYXRhQ29uc3RhbnRzLlZBTFVFX1NUQVRVU19JRF9VTkFUVEVNUFRFRCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlQWN0aW9uKEFjdGlvbkRlc2NyaXB0b3IgYWN0aW9uRGVzY3JpcHRvcikKLSAgewotICAgIGludCBhdHRlbXB0cyA9IGFjdGlvbkRlc2NyaXB0b3IuZ2V0QXR0ZW1wdHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIENsYXNzIGNsYXNzQWN0aW9uID0gQ2xhc3MuZm9yTmFtZShhY3Rpb25EZXNjcmlwdG9yLmdldElkKCkpOwotICAgICAgICBpZiAoQWN0aW9uLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oY2xhc3NBY3Rpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgQWN0aW9uIGFjdGlvbiA9IChBY3Rpb24pIG5ld0luc3RhbmNlKGNsYXNzQWN0aW9uKTsKLSAgICAgICAgICBpZiAoYWN0aW9uICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBhY3Rpb25EZXNjcmlwdG9yLmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IGFjdGlvbi5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdHJhbnNmb3JtZXJzLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gdHJhbnNmb3JtZXJzW2pdLmRlTm9ybWFsaXplKHByb3BlcnRpZXMpOwotICAgICAgICAgICAgYWN0aW9uLnNldFByb3BlcnR5VGFibGUocHJvcGVydGllcyk7Ci0gICAgICAgICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgIC8vIFRPRE8gYWN0aW9uRGVzY3JpcHRvci5hZGRTdGF0dXMoYWN0aW9uLmdldFN0YXR1cygpKTsKLSAgICAgICAgICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0U3RhdHVzSWQoQWN0aW9uRGF0YUNvbnN0YW50cy5WQUxVRV9TVEFUVVNfSURfUEFTU0VEKTsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKGFjdGlvbkRlc2NyaXB0b3IuZ2V0SWQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNuZmUpCi0gICAgICB7Ci0gICAgICAgIGNuZmUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgY25mZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHN3KSk7Ci0gICAgICAgIGFjdGlvbkRlc2NyaXB0b3IuYWRkU3RhdHVzKHN3LmdldEJ1ZmZlcigpLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAgIHQucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzdykpOwotICAgICAgICBhY3Rpb25EZXNjcmlwdG9yLmFkZFN0YXR1cyhzdy5nZXRCdWZmZXIoKS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRTdGF0dXNJZChBY3Rpb25EYXRhQ29uc3RhbnRzLlZBTFVFX1NUQVRVU19JRF9GQUlMRUQpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgU2NlbmFyaW9EZXNjcmlwdG9yIG5ld1NjZW5hcmlvRGVzY3JpcHRvcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNjZW5hcmlvRGVzY3JpcHRvcigpOwotICB9Ci0KLSAgcHJpdmF0ZSBUcmFuc2FjdGlvbkRlc2NyaXB0b3IgbmV3VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkKLSAgewotICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25EZXNjcmlwdG9yKCk7Ci0gIH0KLQotICBwcml2YXRlIEFjdGlvbkRlc2NyaXB0b3IgbmV3QWN0aW9uRGVzY3JpcHRvcihBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yID0gbmV3IEFjdGlvbkRlc2NyaXB0b3IoKTsKLSAgICBhY3Rpb25EZXNjcmlwdG9yLnNldElkKGFjdGlvbi5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IGFjdGlvbi5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zZm9ybWVycy5sZW5ndGg7IGkrKykKLSAgICAgIHByb3BlcnRpZXMgPSB0cmFuc2Zvcm1lcnNbaV0ubm9ybWFsaXplKHByb3BlcnRpZXMpOwotICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTsKLSAgICByZXR1cm4gYWN0aW9uRGVzY3JpcHRvcjsKLSAgfQotCi0gIHByaXZhdGUgT2JqZWN0IG5ld0luc3RhbmNlKENsYXNzIGMpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBpbnN0YW50aWF0ZXMgdGhlIGFjdGlvbiB1c2luZyB0aGUgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBpbiBhCi0gICAgICAvLyBjb250cm9sbGVyIG9iamVjdAotICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBjLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzc1tde0NvbnRyb2xsZXIuY2xhc3N9KTsKLSAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W117Y29udHJvbGxlcn0pOwotICAgIH0KLSAgICBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIG5zbWUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBpZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgfQotICAgIE9iamVjdCBpbnN0YW5jZSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gaW5zdGFudGlhdGVzIHRoZSBhY3Rpb24gdXNpbmcgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gYy5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbMF0pOwotICAgICAgaW5zdGFuY2UgPSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0WzBdKTsKLSAgICAgIE1ldGhvZCBtZXRob2QgPSBjLmdldE1ldGhvZCgic2V0Q29udHJvbGxlciIsIG5ldyBDbGFzc1tde0NvbnRyb2xsZXIuY2xhc3N9KTsKLSAgICAgIG1ldGhvZC5pbnZva2UoaW5zdGFuY2UsIG5ldyBPYmplY3RbXXtjb250cm9sbGVyfSk7Ci0gICAgfQotICAgIGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gbnNtZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGllKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBieXRlIGdldE1vZGUoKQotICB7Ci0gICAgcmV0dXJuIG1vZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZGUoYnl0ZSBtb2RlKQotICB7Ci0gICAgdGhpcy5tb2RlID0gbW9kZTsKLSAgICBpZiAobW9kZSA9PSBNT0RFX1JFQ09SRCkKLSAgICB7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9ycyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFNob3dQZXJzcGVjdGl2ZUFjdGlvbiBzaG93UGVyc3BlY3RpdmVBY3Rpb24gPSBuZXcgU2hvd1BlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgc2hvd1BlcnNwZWN0aXZlQWN0aW9uLmFkZFByb3BlcnR5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSwgU3RyaW5nLnZhbHVlT2YoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQZXJzcGVjdGl2ZUlkKCkpKTsKLSAgICAgIGFjdGlvbkRlc2NyaXB0b3JzLmFkZChuZXdBY3Rpb25EZXNjcmlwdG9yKHNob3dQZXJzcGVjdGl2ZUFjdGlvbikpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZUFjdGlvbihBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgaWYgKG1vZGUgPT0gTU9ERV9SRUNPUkQpCi0gICAgewotICAgICAgQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yID0gbmV3QWN0aW9uRGVzY3JpcHRvcihhY3Rpb24pOwotICAgICAgYWN0aW9uRGVzY3JpcHRvcnMuYWRkKGFjdGlvbkRlc2NyaXB0b3IpOwotICAgIH0KLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci0gIAotICBwdWJsaWMgU2NlbmFyaW9EZXNjcmlwdG9yIGdldFNjZW5hcmlvKCkKLSAgewotICAgIFNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBuZXdTY2VuYXJpb0Rlc2NyaXB0b3IoKTsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3IgdHJhbnNhY3Rpb25EZXNjcmlwdG9yID0gbmV3VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCk7Ci0gICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JBcnJheSA9IChBY3Rpb25EZXNjcmlwdG9yW10pYWN0aW9uRGVzY3JpcHRvcnMudG9BcnJheShuZXcgQWN0aW9uRGVzY3JpcHRvclswXSk7Ci0gICAgdHJhbnNhY3Rpb25EZXNjcmlwdG9yLnNldEFjdGlvbkRlc2NyaXB0b3JzKGFjdGlvbkRlc2NyaXB0b3JBcnJheSk7Ci0gICAgc2NlbmFyaW9EZXNjcmlwdG9yLnNldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMobmV3IFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHt0cmFuc2FjdGlvbkRlc2NyaXB0b3J9KTsKLSAgICByZXR1cm4gc2NlbmFyaW9EZXNjcmlwdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9jb25zdGFudHMvQWN0aW9uRGF0YUNvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvY29uc3RhbnRzL0FjdGlvbkRhdGFDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3MTZkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9jb25zdGFudHMvQWN0aW9uRGF0YUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQWN0aW9uRGF0YUNvbnN0YW50cwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lEID0gImlkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9OQU1FID0gIm5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FUVEVNUFRTID0gImF0dGVtcHRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TVEFUVVNfSUQgPSAic3RhdHVzSWQiOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9TQ0VOQVJJTyA9ICJzY2VuYXJpbyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfVFJBTlNBQ1RJT04gPSAidHJhbnNhY3Rpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0FDVElPTiA9ICJhY3Rpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX1BST1BFUlRZID0gInByb3BlcnR5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9WQUxVRSA9ICJ2YWx1ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfU1RBVFVTID0gInN0YXR1cyI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9TVEFUVVNfSURfVU5BVFRFTVBURUQgPSAidW5hdHRlbXB0ZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9TVEFUVVNfSURfUEFTU0VEID0gInBhc3NlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX1NUQVRVU19JRF9GQUlMRUQgPSAiZmFpbGVkIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2RhdGEvQWN0aW9uRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9BY3Rpb25EZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YTYwMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9BY3Rpb25EZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQWN0aW9uRGVzY3JpcHRvcgotewotICBwcml2YXRlIFN0cmluZyBpZDsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcHJvcGVydGllczsKLSAgcHJpdmF0ZSBpbnQgYXR0ZW1wdHM7Ci0gIHByaXZhdGUgU3RyaW5nIHN0YXR1c0lkOwotICBwcml2YXRlIExpc3Qgc3RhdHVzTGlzdDsKLSAgCi0gIHB1YmxpYyBBY3Rpb25EZXNjcmlwdG9yKCkKLSAgewotICAgIGF0dGVtcHRzID0gMTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGdldFByb3BlcnRpZXMoKQotICB7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnRpZXMoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEF0dGVtcHRzKCkKLSAgewotICAJcmV0dXJuIGF0dGVtcHRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBdHRlbXB0cyhpbnQgYXR0ZW1wdHMpCi0gIHsKLSAgCXRoaXMuYXR0ZW1wdHMgPSBhdHRlbXB0czsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNJZCgpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzSWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1c0lkKFN0cmluZyBzdGF0dXNJZCkKLSAgewotICAgIHRoaXMuc3RhdHVzSWQgPSBzdGF0dXNJZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkU3RhdHVzKE9iamVjdCBzdGF0dXMpCi0gIHsKLSAgICBpZiAoc3RhdHVzICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHN0YXR1c0xpc3QgPT0gbnVsbCkKLSAgICAgICAgc3RhdHVzTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHN0YXR1c0xpc3QuYWRkKHN0YXR1cyk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVTdGF0dXMoT2JqZWN0IHN0YXR1cykKLSAgewotICAgIGlmIChzdGF0dXMgIT0gbnVsbCAmJiBzdGF0dXNMaXN0ICE9IG51bGwpCi0gICAgICByZXR1cm4gc3RhdHVzTGlzdC5yZW1vdmUoc3RhdHVzKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzTGlzdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9TY2VuYXJpb0Rlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2RhdGEvU2NlbmFyaW9EZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZTkyYWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9TY2VuYXJpb0Rlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGE7Ci0KLXB1YmxpYyBjbGFzcyBTY2VuYXJpb0Rlc2NyaXB0b3IKLXsKLSAgcHJpdmF0ZSBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzOwotCi0gIHB1YmxpYyBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSBnZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKCkKLSAgewotICAgIHJldHVybiB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMpCi0gIHsKLSAgICB0aGlzLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMgPSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1RyYW5zYWN0aW9uRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9UcmFuc2FjdGlvbkRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkxN2ExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1RyYW5zYWN0aW9uRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YTsKLQotcHVibGljIGNsYXNzIFRyYW5zYWN0aW9uRGVzY3JpcHRvcgotewotICBwcml2YXRlIEFjdGlvbkRlc2NyaXB0b3JbXSBhY3Rpb25EZXNjcmlwdG9yczsKLQotICBwdWJsaWMgQWN0aW9uRGVzY3JpcHRvcltdIGdldEFjdGlvbkRlc2NyaXB0b3JzKCkKLSAgewotICAgIHJldHVybiBhY3Rpb25EZXNjcmlwdG9yczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QWN0aW9uRGVzY3JpcHRvcnMoQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzKQotICB7Ci0gICAgdGhpcy5hY3Rpb25EZXNjcmlwdG9ycyA9IGFjdGlvbkRlc2NyaXB0b3JzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9DdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9DdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjZlNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIElUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIGtleTsKLQotICBwdWJsaWMgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzKGNvbnRyb2xsZXIsIEFjdGlvbklucHV0cy5OT0RFSUQpOwotICB9Ci0KLSAgcHVibGljIEN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyLCBTdHJpbmcga2V5KQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICB0aGlzLmtleSA9IGtleTsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBOb2RlIGN1cnJOb2RlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChjdXJyTm9kZSAhPSBudWxsKQotICAgICAgcHJvcGVydGllcy5wdXQoa2V5LCBTdHJpbmcudmFsdWVPZihjdXJyTm9kZS5nZXROb2RlSWQoKSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9JVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0lUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDE2ZDMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0lUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElUcmFuc2Zvcm1lcgotewotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcyk7Ci0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTWFzc05vZGVJZFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9NYXNzTm9kZUlkVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3NGU4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9NYXNzTm9kZUlkVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgTWFzc05vZGVJZFRyYW5zZm9ybWVyIGV4dGVuZHMgTm9kZUlkVHJhbnNmb3JtZXIKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBtYXNzTm9kZUlkS2V5OwotCi0gIHB1YmxpYyBNYXNzTm9kZUlkVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyLCBTdHJpbmcgbWFzc05vZGVJZEtleSkKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHRoaXMubWFzc05vZGVJZEtleSA9IG1hc3NOb2RlSWRLZXk7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIGlmICghcHJvcGVydGllcy5jb250YWluc0tleShtYXNzTm9kZUlkS2V5KSkKLSAgICAgIHJldHVybiBzdXBlci5ub3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgT2JqZWN0IG9yaWdOb2RlSWQgPSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmdbXSBtYXNzTm9kZUlkcyA9IGdldFZhbHVlQXNTdHJpbmdBcnJheShwcm9wZXJ0aWVzLCBtYXNzTm9kZUlkS2V5KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hc3NOb2RlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHByb3BlcnRpZXMucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG1hc3NOb2RlSWRzW2ldKTsKLSAgICAgIHByb3BlcnRpZXMgPSBzdXBlci5ub3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgICBTdHJpbmdbXSByZWxzID0gZ2V0VmFsdWVBc1N0cmluZ0FycmF5KHByb3BlcnRpZXMsIE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgICBpZiAocmVscy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgICAgIHNiLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgIHNiLmFwcGVuZChtYXNzTm9kZUlkc1tpXSk7Ci0gICAgICAgIHByb3BlcnRpZXMucHV0KHNiLnRvU3RyaW5nKCksIHJlbHMpOwotICAgICAgfQotICAgICAgcHJvcGVydGllcy5yZW1vdmUoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICBwcm9wZXJ0aWVzLnJlbW92ZShNb2RlbENvbnN0YW50cy5SRUxfSUQpOwotICAgIH0KLSAgICBpZiAob3JpZ05vZGVJZCAhPSBudWxsKQotICAgICAgcHJvcGVydGllcy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgb3JpZ05vZGVJZCk7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1hc3NOb2RlSWRLZXkpKQotICAgICAgcmV0dXJuIHN1cGVyLmRlTm9ybWFsaXplKHByb3BlcnRpZXMpOwotICAgIFZlY3RvciBtYXNzTm9kZUlkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIE9iamVjdCBvcmlnTm9kZUlkID0gcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgcHJvcGVydGllcy5yZW1vdmUoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgU3RyaW5nW10gbWFzc05vZGVJZHMgPSBnZXRWYWx1ZUFzU3RyaW5nQXJyYXkocHJvcGVydGllcywgbWFzc05vZGVJZEtleSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXNzTm9kZUlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgICBzYi5hcHBlbmQoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgc2IuYXBwZW5kKG1hc3NOb2RlSWRzW2ldKTsKLSAgICAgIE9iamVjdCByZWxzID0gcHJvcGVydGllcy5nZXQoc2IudG9TdHJpbmcoKSk7Ci0gICAgICBpZiAocmVscyAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIHJlbHMpOwotICAgICAgICBwcm9wZXJ0aWVzID0gc3VwZXIuZGVOb3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgICAgIE9iamVjdCBub2RlSWQgPSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgaWYgKG5vZGVJZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbWFzc05vZGVJZFZlY3Rvci5hZGQobm9kZUlkKTsKLSAgICAgICAgICBwcm9wZXJ0aWVzLnJlbW92ZShBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgfQotICAgICAgICBwcm9wZXJ0aWVzLnJlbW92ZShNb2RlbENvbnN0YW50cy5SRUxfSUQpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAob3JpZ05vZGVJZCAhPSBudWxsKQotICAgICAgcHJvcGVydGllcy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgb3JpZ05vZGVJZCk7Ci0gICAgaW50IHNpemUgPSBtYXNzTm9kZUlkVmVjdG9yLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgcHJvcGVydGllcy5wdXQobWFzc05vZGVJZEtleSwgbWFzc05vZGVJZFZlY3Rvci5nZXQoMCkpOwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgcHJvcGVydGllcy5wdXQobWFzc05vZGVJZEtleSwgbWFzc05vZGVJZFZlY3Rvci50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLSAgICBlbHNlCi0gICAgICBwcm9wZXJ0aWVzLnJlbW92ZShtYXNzTm9kZUlkS2V5KTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nW10gZ2V0VmFsdWVBc1N0cmluZ0FycmF5KEhhc2h0YWJsZSBwcm9wZXJ0aWVzLCBTdHJpbmcga2V5KQotICB7Ci0gICAgT2JqZWN0IHZhbHVlcyA9IHByb3BlcnRpZXMuZ2V0KGtleSk7Ci0gICAgaWYgKHZhbHVlcyA9PSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgZWxzZSBpZiAodmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nW10pCi0gICAgICByZXR1cm4gKFN0cmluZ1tdKXZhbHVlczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHt2YWx1ZXMudG9TdHJpbmcoKX07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL011bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL011bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMyYzE2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9NdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIElUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyOwotCi0gIHB1YmxpYyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciA9IChNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcilwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIpOwotICAgIFN0cmluZ1tdIGtleXM7Ci0gICAgdHJ5Ci0gICAgewotICAgICAga2V5cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAga2V5cyA9IG5ldyBTdHJpbmdbMF07Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgbmV3S2V5ID0gbmV3IFN0cmluZ0J1ZmZlcihBY3Rpb25JbnB1dHMuTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIpOwotICAgICAgbmV3S2V5LmFwcGVuZChrZXlzW2ldKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBwcm9wZXJ0aWVzLnB1dChuZXdLZXkudG9TdHJpbmcoKSwgcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhrZXlzW2ldKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0gIAotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IHByb3BlcnRpZXMua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIE9iamVjdCBrZXkgPSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAoa2V5IGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgewotICAgICAgICBpZiAoKChTdHJpbmcpa2V5KS5zdGFydHNXaXRoKEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUikpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgcmVhbEtleSA9ICgoU3RyaW5nKWtleSkuc3Vic3RyaW5nKEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUi5sZW5ndGgoKSk7Ci0gICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KHJlYWxLZXkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHByb3BlcnRpZXMucmVtb3ZlKGtleSk7Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1dChyZWFsS2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlSWRUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTm9kZUlkVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE1NDEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlSWRUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIE5vZGVJZFRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0KLSAgcHVibGljIE5vZGVJZFRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIFZlY3RvciByZWxzID0gbmV3IFZlY3RvcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlkKTsKLSAgICAgIGludCBkZXB0aCA9IDA7Ci0gICAgICBpZiAobm9kZSAhPSBudWxsKQotICAgICAgICBkZXB0aCA9IG5vZGUuZ2V0Tm9kZURlcHRoKCk7Ci0gICAgICB3aGlsZSAocmVscy5zaXplKCkgPCBkZXB0aCAmJiBub2RlICE9IG51bGwgJiYgbm9kZSAhPSByb290Tm9kZSkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBwYXJlbnROb2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBSZWwgcmVsID0gZ2V0UmVsKHBhcmVudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSwgZWxlbWVudCk7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciByZWxWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIocmVsLmdldE5hbWUoKSk7Ci0gICAgICAgIHJlbFZhbHVlLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgIHJlbFZhbHVlLmFwcGVuZChlbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgIHJlbHMuaW5zZXJ0RWxlbWVudEF0KHJlbFZhbHVlLnRvU3RyaW5nKCksIDApOwotICAgICAgICBub2RlID0gcGFyZW50Tm9kZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgewotICAgIH0KLSAgICBpbnQgbnVtUmVsYXRpb25zaGlwcyA9IHJlbHMuc2l6ZSgpOwotICAgIGlmIChudW1SZWxhdGlvbnNoaXBzID09IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIHJlbHMuZ2V0KDApLnRvU3RyaW5nKCkpOwotICAgIGVsc2UgaWYgKG51bVJlbGF0aW9uc2hpcHMgPiAxKQotICAgICAgcHJvcGVydGllcy5wdXQoTW9kZWxDb25zdGFudHMuUkVMX0lELCAoU3RyaW5nW10pcmVscy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHByaXZhdGUgUmVsIGdldFJlbChFbGVtZW50IHNvdXJjZUVsZW1lbnQsIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCkKLSAgewotICAgIEVudW1lcmF0aW9uIHJlbHMgPSBzb3VyY2VFbGVtZW50LmdldFJlbHMoKTsKLSAgICB3aGlsZSAocmVscy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBSZWwgcmVsID0gKFJlbClyZWxzLm5leHRFbGVtZW50KCk7Ci0gICAgICBFbnVtZXJhdGlvbiB0YXJnZXRFbGVtZW50cyA9IHJlbC5nZXRUYXJnZXRFbGVtZW50cygpOwotICAgICAgd2hpbGUgKHRhcmdldEVsZW1lbnRzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBpZiAodGFyZ2V0RWxlbWVudHMubmV4dEVsZW1lbnQoKSA9PSB0YXJnZXRFbGVtZW50KQotICAgICAgICAgIHJldHVybiByZWw7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgT2JqZWN0IHZhbHVlID0gcHJvcGVydGllcy5nZXQoTW9kZWxDb25zdGFudHMuUkVMX0lEKTsKLSAgICBTdHJpbmdbXSByZWxhdGlvbnNoaXBzID0gbnVsbDsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmdbXSkKLSAgICAgIHJlbGF0aW9uc2hpcHMgPSAoU3RyaW5nW10pdmFsdWU7Ci0gICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgIHJlbGF0aW9uc2hpcHMgPSBuZXcgU3RyaW5nW10ge3ZhbHVlLnRvU3RyaW5nKCl9OwotICAgIGlmIChyZWxhdGlvbnNoaXBzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGlvbnNoaXBzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpbnQgaW5kZXggPSByZWxhdGlvbnNoaXBzW2ldLmluZGV4T2YoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAgICAgcmV0dXJuIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUocHJvcGVydGllcyk7Ci0gICAgICAgIFN0cmluZyByZWwgPSAoaW5kZXggIT0gLTEpID8gcmVsYXRpb25zaGlwc1tpXS5zdWJzdHJpbmcoMCwgaW5kZXgpIDogcmVsYXRpb25zaGlwc1tpXTsKLSAgICAgICAgU3RyaW5nIGxvY2FsbmFtZSA9IChpbmRleCAhPSAtMSkgPyByZWxhdGlvbnNoaXBzW2ldLnN1YnN0cmluZyhpbmRleCArIDEsIHJlbGF0aW9uc2hpcHNbaV0ubGVuZ3RoKCkpIDogbnVsbDsKLSAgICAgICAgaWYgKGxvY2FsbmFtZSA9PSBudWxsKQotICAgICAgICAgIHJldHVybiBkZU5vcm1hbGl6ZUFzU2VsZWN0ZWROb2RlKHByb3BlcnRpZXMpOwotICAgICAgICBub2RlID0gZ2V0Tm9kZShub2RlLCByZWwsIGxvY2FsbmFtZSk7Ci0gICAgICAgIGlmIChub2RlID09IG51bGwpCi0gICAgICAgICAgcmV0dXJuIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUocHJvcGVydGllcyk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0aWVzLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihub2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgICByZXR1cm4gcHJvcGVydGllczsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUocHJvcGVydGllcyk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSGFzaHRhYmxlIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICByZXR1cm4gKG5ldyBDdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXIpKS5kZU5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgfQotCi0gIHByaXZhdGUgTm9kZSBnZXROb2RlKE5vZGUgcGFyZW50LCBTdHJpbmcgcmVsLCBTdHJpbmcgbG9jYWxuYW1lKQotICB7Ci0gICAgRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gcGFyZW50LmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAobG9jYWxuYW1lLmVxdWFscyhlbGVtZW50LmdldE5hbWUoKSkpCi0gICAgICAgIHJldHVybiBwYXJlbnQuZ2V0Q2hpbGROb2RlKChUcmVlRWxlbWVudCllbGVtZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL05vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZjU3ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0KLSAgcHVibGljIE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgIE5vZGUgbmV4dE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgIE5vZGUgY3Vyck5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgIGlmIChjdXJyTm9kZSA9PSBudWxsKQotICAgICAgICBjdXJyTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgICBWZWN0b3IgbmV4dFJlbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBWZWN0b3IgY3VyclJlbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB3aGlsZSAobmV4dE5vZGUgIT0gbnVsbCAmJiBjdXJyTm9kZSAhPSBudWxsICYmICghaXNSb290RWxlbWVudChuZXh0Tm9kZS5nZXRUcmVlRWxlbWVudCgpKSB8fCAhaXNSb290RWxlbWVudChjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpKSkgJiYgbmV4dE5vZGUgIT0gY3Vyck5vZGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChuZXh0Tm9kZS5nZXROb2RlRGVwdGgoKSA+PSBjdXJyTm9kZS5nZXROb2RlRGVwdGgoKSkKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgcGFyZW50Tm9kZSA9IG5leHROb2RlLmdldFBhcmVudCgpOwotICAgICAgICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBuZXh0Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFJlbCByZWwgPSBnZXRSZWwocGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpLCBuZXh0RWxlbWVudCk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIHJlbFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcihyZWwuZ2V0TmFtZSgpKTsKLSAgICAgICAgICByZWxWYWx1ZS5hcHBlbmQoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgICAgIHJlbFZhbHVlLmFwcGVuZChuZXh0RWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIG5leHRSZWxzLmluc2VydEVsZW1lbnRBdChyZWxWYWx1ZS50b1N0cmluZygpLCAwKTsKLSAgICAgICAgICBuZXh0Tm9kZSA9IHBhcmVudE5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBwYXJlbnROb2RlID0gY3Vyck5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgICAgRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gcGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFJlbCByZWwgPSBnZXRSZWwoY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKSwgcGFyZW50RWxlbWVudCk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIHJlbFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcihyZWwuZ2V0TmFtZSgpKTsKLSAgICAgICAgICByZWxWYWx1ZS5hcHBlbmQoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgICAgIHJlbFZhbHVlLmFwcGVuZChwYXJlbnRFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgY3VyclJlbHMuYWRkKHJlbFZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGN1cnJOb2RlID0gcGFyZW50Tm9kZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY3VyclJlbHMuYWRkQWxsKG5leHRSZWxzKTsKLSAgICAgIGludCBudW1SZWxhdGlvbnNoaXBzID0gY3VyclJlbHMuc2l6ZSgpOwotICAgICAgaWYgKG51bVJlbGF0aW9uc2hpcHMgPT0gMSkKLSAgICAgICAgcHJvcGVydGllcy5wdXQoTW9kZWxDb25zdGFudHMuUkVMX0lELCBjdXJyUmVscy5nZXQoMCkudG9TdHJpbmcoKSk7Ci0gICAgICBlbHNlIGlmIChudW1SZWxhdGlvbnNoaXBzID4gMSkKLSAgICAgICAgcHJvcGVydGllcy5wdXQoTW9kZWxDb25zdGFudHMuUkVMX0lELCAoU3RyaW5nW10pIGN1cnJSZWxzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzUm9vdEVsZW1lbnQoRWxlbWVudCBlKQotICB7Ci0gICAgcmV0dXJuIGUuZ2V0TW9kZWwoKS5nZXRSb290RWxlbWVudCgpID09IGU7Ci0gIH0KLQotICBwcml2YXRlIFJlbCBnZXRSZWwoRWxlbWVudCBzb3VyY2VFbGVtZW50LCBFbGVtZW50IHRhcmdldEVsZW1lbnQpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiByZWxzID0gc291cmNlRWxlbWVudC5nZXRSZWxzKCk7Ci0gICAgd2hpbGUgKHJlbHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgUmVsIHJlbCA9IChSZWwpIHJlbHMubmV4dEVsZW1lbnQoKTsKLSAgICAgIEVudW1lcmF0aW9uIHRhcmdldEVsZW1lbnRzID0gcmVsLmdldFRhcmdldEVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAodGFyZ2V0RWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRFbGVtZW50cy5uZXh0RWxlbWVudCgpID09IHRhcmdldEVsZW1lbnQpCi0gICAgICAgICAgcmV0dXJuIHJlbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSByb290Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgTm9kZSBjdXJyTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChjdXJyTm9kZSA9PSBudWxsKQotICAgICAgY3Vyck5vZGUgPSByb290Tm9kZTsKLSAgICBPYmplY3QgdmFsdWUgPSBwcm9wZXJ0aWVzLmdldChNb2RlbENvbnN0YW50cy5SRUxfSUQpOwotICAgIFN0cmluZ1tdIHJlbGF0aW9uc2hpcHMgPSBudWxsOwotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZ1tdKQotICAgICAgcmVsYXRpb25zaGlwcyA9IChTdHJpbmdbXSkgdmFsdWU7Ci0gICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgIHJlbGF0aW9uc2hpcHMgPSBuZXcgU3RyaW5nW117dmFsdWUudG9TdHJpbmcoKX07Ci0gICAgaWYgKHJlbGF0aW9uc2hpcHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGN1cnJFbGVtZW50ID0gY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRpb25zaGlwcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gcmVsYXRpb25zaGlwc1tpXS5pbmRleE9mKE1vZGVsQ29uc3RhbnRzLlJFTF9MT0NBTE5BTUVfU0VQQVJBVE9SKTsKLSAgICAgICAgU3RyaW5nIHJlbCA9IChpbmRleCAhPSAtMSkgPyByZWxhdGlvbnNoaXBzW2ldLnN1YnN0cmluZygwLCBpbmRleCkgOiByZWxhdGlvbnNoaXBzW2ldOwotICAgICAgICBTdHJpbmcgbG9jYWxuYW1lID0gKGluZGV4ICE9IC0xKSA/IHJlbGF0aW9uc2hpcHNbaV0uc3Vic3RyaW5nKGluZGV4ICsgMSwgcmVsYXRpb25zaGlwc1tpXS5sZW5ndGgoKSkgOiBudWxsOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gY3VyckVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICAgICAgRWxlbWVudCB0YXJnZXRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGxvY2FsbmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBmaXJzdEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSAoRWxlbWVudCkgZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKGZpcnN0RWxlbWVudCA9PSBudWxsKQotICAgICAgICAgICAgICBmaXJzdEVsZW1lbnQgPSBuZXh0RWxlbWVudDsKLSAgICAgICAgICAgIGlmIChsb2NhbG5hbWUuZXF1YWxzKG5leHRFbGVtZW50LmdldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBuZXh0RWxlbWVudDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgICB0YXJnZXRFbGVtZW50ID0gZmlyc3RFbGVtZW50OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlmIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IChFbGVtZW50KSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGN1cnJFbGVtZW50ID0gKEVsZW1lbnQpIHRhcmdldEVsZW1lbnQ7Ci0gICAgICAgICAgTm9kZSBwYXJlbnROb2RlID0gY3Vyck5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLmdldFRyZWVFbGVtZW50KCkgPT0gY3VyckVsZW1lbnQpCi0gICAgICAgICAgICBjdXJyTm9kZSA9IHBhcmVudE5vZGU7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY3Vyck5vZGUgPSBjdXJyTm9kZS5nZXRDaGlsZE5vZGUoKFRyZWVFbGVtZW50KSBjdXJyRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcHJvcGVydGllcy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2YoY3Vyck5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9WaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2MWYyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9WaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIElUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIGxpc3RNYW5hZ2VyS2V5OwotICBwcm90ZWN0ZWQgU3RyaW5nIHZpZXdLZXk7Ci0KLSAgcHVibGljIFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIsIFN0cmluZyBsaXN0TWFuYWdlcktleSwgU3RyaW5nIHZpZXdLZXkpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHRoaXMubGlzdE1hbmFnZXJLZXkgPSBsaXN0TWFuYWdlcktleTsKLSAgICB0aGlzLnZpZXdLZXkgPSB2aWV3S2V5OwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBWZWN0b3Igbm9ybWFsaXplZFZpZXdJZHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBjdXJyTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IGN1cnJFbGVtZW50ID0gY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBPYmplY3QgbGlzdE1hbmFnZXJPYmogPSBjdXJyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KGxpc3RNYW5hZ2VyS2V5KTsKLSAgICBpZiAobGlzdE1hbmFnZXJPYmogaW5zdGFuY2VvZiBMaXN0TWFuYWdlcikKLSAgICB7Ci0gICAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IChMaXN0TWFuYWdlcikgbGlzdE1hbmFnZXJPYmo7Ci0gICAgICBTdHJpbmdbXSB2aWV3SWRzID0gZ2V0Vmlld1ZhbHVlcyhwcm9wZXJ0aWVzKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0lkcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGxpc3RFbGVtZW50ID0gbGlzdE1hbmFnZXIuZ2V0RWxlbWVudFdpdGhWaWV3SWQoSW50ZWdlci5wYXJzZUludCh2aWV3SWRzW2ldKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBpZiAobGlzdEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBpZiAob2JqZWN0ICE9IG51bGwgJiYgb2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgb2JqZWN0OwotICAgICAgICAgICAgbm9ybWFsaXplZFZpZXdJZHMuYWRkKGVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcHJvcGVydGllcy5wdXQodmlld0tleSwgbm9ybWFsaXplZFZpZXdJZHMudG9BcnJheShuZXcgU3RyaW5nWzBdKSk7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgVmVjdG9yIHZpZXdJZHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgTm9kZSBjdXJyTm9kZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoY3Vyck5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUcmVlRWxlbWVudCBjdXJyRWxlbWVudCA9IGN1cnJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBPYmplY3QgbGlzdE1hbmFnZXJPYmogPSBjdXJyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KGxpc3RNYW5hZ2VyS2V5KTsKLSAgICAgIGlmIChsaXN0TWFuYWdlck9iaiBpbnN0YW5jZW9mIExpc3RNYW5hZ2VyKQotICAgICAgewotICAgICAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IChMaXN0TWFuYWdlcikgbGlzdE1hbmFnZXJPYmo7Ci0gICAgICAgIFN0cmluZ1tdIG5vcm1hbGl6ZWRWaWV3SWRzID0gZ2V0Vmlld1ZhbHVlcyhwcm9wZXJ0aWVzKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub3JtYWxpemVkVmlld0lkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSBsaXN0TWFuYWdlci5nZXRMaXN0RWxlbWVudHMoKTsKLSAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCkgZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIGxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBub3JtYWxpemVkVmlld0lkc1tpXS5lcXVhbHMoZWxlbWVudC5nZXROYW1lKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB2aWV3SWRzLmFkZChTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRWaWV3SWQoKSkpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaW50IHNpemUgPSB2aWV3SWRzLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgcHJvcGVydGllcy5wdXQodmlld0tleSwgdmlld0lkcy5nZXQoMCkpOwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgcHJvcGVydGllcy5wdXQodmlld0tleSwgdmlld0lkcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nW10gZ2V0Vmlld1ZhbHVlcyhIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE9iamVjdCB2aWV3VmFsdWVPYmogPSBwcm9wZXJ0aWVzLmdldCh2aWV3S2V5KTsKLSAgICBTdHJpbmdbXSB2aWV3VmFsdWVzOwotICAgIGlmICh2aWV3VmFsdWVPYmogPT0gbnVsbCkKLSAgICAgIHZpZXdWYWx1ZXMgPSBuZXcgU3RyaW5nWzBdOwotICAgIGVsc2UgaWYgKHZpZXdWYWx1ZU9iai5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgIHZpZXdWYWx1ZXMgPSAoU3RyaW5nW10pIHZpZXdWYWx1ZU9iajsKLSAgICBlbHNlCi0gICAgICB2aWV3VmFsdWVzID0gbmV3IFN0cmluZ1tdeyhTdHJpbmcpIHZpZXdWYWx1ZU9ian07Ci0gICAgcmV0dXJuIHZpZXdWYWx1ZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTI3ZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gYnVzRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSBidXNFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgLy8gY3JlYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBudWxsLCBpbnF1aXJ5QVBJLCBudWxsLCB0cnVlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgYnVzaW5lc3NOYW1lKTsKLSAgICBpZiAoIWFjdGlvbi5ydW4oKSkKLSAgICB7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRSIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKHRydWUpOwotICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIGJ1c2luZXNzTmFtZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGE2MTRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSByZWdFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBwdWJsaXNoQVBJID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IHJlZ0VsZW1lbnQuZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gICAgaWYgKCFjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlBUEksIHB1Ymxpc2hBUEksIHJlZ2lzdHJ5TmFtZSwgcmVnaXN0cmF0aW9uVVJMLCBmYWxzZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgcmVnaXN0cnlOYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZUludGVyZmFjZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFNlcnZpY2VJbnRlcmZhY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmZmODIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZUludGVyZmFjZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkU2VydmljZUludGVyZmFjZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2VySW50RWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgc2VySW50TmFtZSA9IHNlckludEVsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gc2VySW50RWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgU3RyaW5nIHNlckludEtleSA9IHNlckludEVsZW1lbnQuZ2V0U2VydmljZUludGVyZmFjZUtleSgpOwotICAgIC8vIGNyZWF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIFVEREkgcGVyc3BlY3RpdmUKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeUFQSSwgbnVsbCwgaW5xdWlyeUFQSSwgbnVsbCwgdHJ1ZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLCBzZXJJbnRLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgc2VySW50TmFtZSk7Ci0gICAgaWYgKCFhY3Rpb24ucnVuKCkpCi0gICAgewotICAgICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiLCBzZXJJbnROYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgc2VySW50TmFtZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkyMzljMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kU2VydmljZVVVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24KLXsKLSAgcHVibGljIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IHNlckVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gc2VyRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSBzZXJFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IHNlckVsZW1lbnQuZ2V0U2VydmljZUtleSgpOwotICAgIC8vIGNyZWF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIFVEREkgcGVyc3BlY3RpdmUKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeUFQSSwgbnVsbCwgaW5xdWlyeUFQSSwgbnVsbCwgdHJ1ZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksIHNlcnZpY2VLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgc2VydmljZU5hbWUpOwotICAgIGlmICghYWN0aW9uLnJ1bigpKQotICAgIHsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiwgc2VydmljZU5hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbih0cnVlKTsKLSAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCBzZXJ2aWNlTmFtZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODZiNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuT3BlblJlZ2lzdHJ5QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElNYWluTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uIHsKLSAgICBwdWJsaWMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIjsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgcHVibGlzaEFQSSwgU3RyaW5nIHJlZ2lzdHJ5TmFtZSwgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCwgYm9vbGVhbiB1c2VFeGlzdGluZykKLSAgICB7Ci0gICAgICByZXR1cm4gY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBwdWJsaXNoQVBJLCByZWdpc3RyeU5hbWUsIHJlZ2lzdHJhdGlvblVSTCwgbnVsbCwgbnVsbCwgbnVsbCwgdXNlRXhpc3RpbmcpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBwdWJsaXNoQVBJLCBTdHJpbmcgcmVnaXN0cnlOYW1lLCBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMLCBTdHJpbmcgZGVmYXVsdExvZ2luLCBTdHJpbmcgZGVmYXVsdFBhc3N3b3JkLCBUYXhvbm9teVtdIHRheG9ub21pZXMsIGJvb2xlYW4gdXNlRXhpc3RpbmcpIHsKLSAgICAgIFZlY3RvciByZWdpc3RyeU5vZGVzID0gZ2V0UmVnaXN0cnlOb2Rlc0J5SW5xdWlyeVVSTChpbnF1aXJ5QVBJKTsKLSAgICAgICAgaWYgKHJlZ2lzdHJ5Tm9kZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmICh1c2VFeGlzdGluZykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIHJlZ2lzdHJ5Tm9kZSA9IChOb2RlKXJlZ2lzdHJ5Tm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSByZWdpc3RyeU5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKHJlZ2lzdHJ5Tm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIG9wZW4gdGhlIHJlZ2lzdHJ5IGlmIGl0IGlzIG5vdCBhbHJlYWR5IG9wZW5lZCBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgICAgICBPcGVuUmVnaXN0cnlBY3Rpb24gb3BlblJlZ0FjdGlvbiA9IG5ldyBPcGVuUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcl8pOwotCi0gICAgICAgIC8vIHBvcHVsYXRlIHRoZSBwcm9wZXJ0eSB0YWJsZQotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5SZWdBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHJlZ2lzdHJ5TmFtZSkpCi0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUscmVnaXN0cnlOYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeUFQSSkpCi0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMLGlucXVpcnlBUEkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoQVBJKSkKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9VUkwscHVibGlzaEFQSSk7Ci0KLSAgICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChyZWdpc3RyYXRpb25VUkwpKQotICAgICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSQVRJT05fVVJMLHJlZ2lzdHJhdGlvblVSTCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRMb2dpbiAhPSBudWxsKQotICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuVURESV9VU0VSTkFNRSwgZGVmYXVsdExvZ2luKTsKLQotICAgICAgICBpZiAoZGVmYXVsdFBhc3N3b3JkICE9IG51bGwpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5VRERJX1BBU1NXT1JELCBkZWZhdWx0UGFzc3dvcmQpOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIElmIHVzZXItZGVmaW5lZCBjYXRlZ29yeSBtZXRhZGF0YSBleGlzdHMsIHNlYXJjaCBhbmQgbWFrZSB0aGUgYXNzb2NpYXRpb25zLgotICAgICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgICAgIEZpbGUgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IG5ldyBGaWxlKGRpcmVjdG9yeUJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgRmlsZVtdIGNhdGVnb3J5RmlsZXMgPSBudWxsOwotICAgICAgICBpZiAoY2F0ZWdvcmllc0RpcmVjdG9yeS5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhdGVnb3J5RmlsZXMgPSBjYXRlZ29yaWVzRGlyZWN0b3J5Lmxpc3RGaWxlcygpOwotICAgICAgICAgIGlmIChjYXRlZ29yeUZpbGVzLmxlbmd0aCA+IDApCi0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBydW4gdGhlIGFjdGlvbgotICAgICAgICBpZiAoIW9wZW5SZWdBY3Rpb24ucnVuKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAodGF4b25vbWllcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaHRhYmxlIHRheG9ub215VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRheG9ub21pZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgVGF4b25vbXkgdGF4b25vbXkgPSB0YXhvbm9taWVzW2ldOwotICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB0YXhvbm9teS5nZXROYW1lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgdG1vZGVsS2V5ID0gdGF4b25vbXkuZ2V0VG1vZGVsS2V5KCk7Ci0gICAgICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdE1vZGVsID0gbmV3IENhdGVnb3J5TW9kZWwoKTsKLSAgICAgICAgICAgIGNhdE1vZGVsLnNldERpc3BsYXlOYW1lKG5hbWUpOwotICAgICAgICAgICAgY2F0TW9kZWwuc2V0Q2F0ZWdvcnlLZXkobmFtZSk7Ci0gICAgICAgICAgICBjYXRNb2RlbC5zZXRUTW9kZWxLZXkodG1vZGVsS2V5KTsKLSAgICAgICAgICAgIGNhdE1vZGVsLmxvYWRGcm9tVGF4b25vbXkodGF4b25vbXkpOwotICAgICAgICAgICAgdGF4b25vbXlUYWJsZS5wdXQodG1vZGVsS2V5LCBjYXRNb2RlbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCkoY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgICAgICAgIHJlZ0VsZW1lbnQuc2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKHRheG9ub215VGFibGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY2F0ZWdvcnlGaWxlcyAhPSBudWxsICYmIGNhdGVnb3J5RmlsZXMubGVuZ3RoID4gMCkKLSAgICAgICAgewotICAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCkoY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgICAgICAgIHJlZ0VsZW1lbnQuc2V0Q2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXModHJ1ZSk7Ci0gICAgICAgICAgcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICAgICAgICBsaW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKHJlZ2lzdHJ5TmFtZSxyZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgbGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YShTdHJpbmcgcmVnaXN0cnlOYW1lLEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5mb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShkaXJlY3RvcnlCdWZmZXIsY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSxyZWdpc3RyeU5hbWUpOwotICAgICAgbGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YSh1c2VyRGVmaW5lZENhdGVnb3JpZXMsZGlyZWN0b3J5QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBsaW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyxTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSkKLSAgICB7Ci0gICAgICBGaWxlIGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoY2F0ZWdvcmllc0RpcmVjdG9yeSk7Ci0gICAgICBGaWxlW10gY2F0ZWdvcnlGaWxlcyA9IG51bGw7Ci0gICAgICBpZiAoY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIGNhdGVnb3J5RmlsZXMgPSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5saXN0RmlsZXMoKTsgCi0gICAgICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHdoaWxlICh1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsID0gKENhdGVnb3J5TW9kZWwpdXNlckRlZmluZWRDYXRlZ29yaWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgY2F0ZWdvcnlLZXkgPSBjYXRlZ29yeU1vZGVsLmdldENhdGVnb3J5S2V5KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7aTxjYXRlZ29yeUZpbGVzLmxlbmd0aDtpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBjYXRlZ29yeVByb3BlcnRpZXNGaWxlTmFtZSA9IGNhdGVnb3J5RmlsZXNbaV0uZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBpbnQgbGFzdERvdFBvcyA9IGNhdGVnb3J5UHJvcGVydGllc0ZpbGVOYW1lLmxhc3RJbmRleE9mKCIuIik7Ci0gICAgICAgICAgICAgIFN0cmluZyBkZWNvZGVkQ2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWVCYXNlID0gVVJMVXRpbHMuZGVjb2RlKGNhdGVnb3J5UHJvcGVydGllc0ZpbGVOYW1lLnN1YnN0cmluZygwLGxhc3REb3RQb3MpKTsKLSAgICAgICAgICAgICAgaWYgKGxhc3REb3RQb3MgPiAwICYmIGNhdGVnb3J5UHJvcGVydGllc0ZpbGVOYW1lLmVuZHNXaXRoKCIucHJvcGVydGllcyIpICYmIGNhdGVnb3J5S2V5LmVxdWFscyhkZWNvZGVkQ2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWVCYXNlKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhdGVnb3J5TW9kZWwuc2V0RGVmYXVsdERhdGFGaWxlKGNhdGVnb3J5RmlsZXNbaV0uZ2V0QWJzb2x1dGVQYXRoKCkpOwotICAgICAgICAgICAgICAgIGNhdGVnb3J5TW9kZWwubG9hZEZyb21EZWxpbWl0ZXJGaWxlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgVmVjdG9yIGdldFJlZ2lzdHJ5Tm9kZXNCeUlucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gICAgewotICAgICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSBudWxsOwotICAgICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKShuYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCkpOwotICAgICAgVmVjdG9yIGNoaWxkTm9kZXMgPSB1ZGRpTWFpbk5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2hpbGROb2Rlcy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBOb2RlIGNoaWxkTm9kZSA9IChOb2RlKWNoaWxkTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFN0cmluZyBjdXJySW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgICAgICAgIGlmIChjdXJySW5xdWlyeVVSTCAhPSBudWxsICYmIGN1cnJJbnF1aXJ5VVJMLmVxdWFscyhpbnF1aXJ5VVJMKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVnaXN0cnlOb2RlcyA9PSBudWxsKQotICAgICAgICAgICAgICByZWdpc3RyeU5vZGVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgcmVnaXN0cnlOb2Rlcy5hZGRFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICAgIHJldHVybiByZWdpc3RyeU5vZGVzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uIG5ld0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZvcml0ZXNGb2xkZXJFbGVtZW50ID0gbnVsbDsKLQotICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCkgewotICAgICAgICAgICAgZmF2b3JpdGVzRm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNFbGVtZW50KSB7Ci0gICAgICAgICAgICBmYXZvcml0ZXNGb2xkZXJFbGVtZW50ID0gKChGYXZvcml0ZXNFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UGFyZW50Rm9sZGVyRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mCi0gICAgICAgIC8vIGZhdm9yaXRlcyBmb2xkZXIgZWxlbWVudCBiZWluZyBzZWxlY3RlZC4KLSAgICAgICAgaWYgKGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlIGlmIChmYXZvcml0ZXNGb2xkZXJFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEFkZFVzZXJEZWZSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlIGlmIChmYXZvcml0ZXNGb2xkZXJFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICAgICAgZWxzZSBpZiAoZmF2b3JpdGVzRm9sZGVyRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlIGlmIChmYXZvcml0ZXNGb2xkZXJFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgwOTUzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFVzZXJEZWZSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi1wdWJsaWMgY2xhc3MgQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gcmVnRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgcHVibGlzaEFQSSA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyBkZWZhdWx0TG9naW4gPSByZWdFbGVtZW50LmdldERlZmF1bHRMb2dpbigpOwotICAgIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQgPSByZWdFbGVtZW50LmdldERlZmF1bHRQYXNzd29yZCgpOwotICAgIFRheG9ub215W10gdGF4b25vbWllcyA9IHJlZ0VsZW1lbnQuZ2V0VGF4b25vbWllcygpOwotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBwdWJsaXNoQVBJLCByZWdpc3RyeU5hbWUsIG51bGwsIGRlZmF1bHRMb2dpbiwgZGVmYXVsdFBhc3N3b3JkLCB0YXhvbm9taWVzLCBmYWxzZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgcmVnaXN0cnlOYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI1OGM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1dTSUxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IHdzaWxFbGVtZW50LmdldFdzaWxVcmwoKTsKLSAgICBPcGVuV1NJTEFjdGlvbiBvcGVuV1NJTEFjdGlvbiA9IG5ldyBPcGVuV1NJTEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBvcGVuV1NJTEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCwgd3NpbFVSTCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSwgU3RyaW5nLnZhbHVlT2YoV3NpbEFjdGlvbklucHV0cy5XU0lMX0RFVEFJTFMpKTsKLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IG9wZW5XU0lMQWN0aW9uLnJ1bigpOwotICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICBlbHNlCi0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfV1NJTF9UT19XU0lMX1BFUlNQRUNUSVZFIiwgd3NpbFVSTCkpOwotICAgIHJldHVybiBhY3Rpb25SZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1MjhkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5PcGVuV1NETEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCB3c2RsRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyB3c2RsVXJsID0gd3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpOwotICAgIE9wZW5XU0RMQWN0aW9uIG9wZW5XU0RMQWN0aW9uID0gbmV3IE9wZW5XU0RMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0RMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsIHdzZGxVcmwpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gb3BlbldTRExBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgd3NkbFVybCkpOwotICAgIGVsc2UKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkUiLCB3c2RsVXJsKSk7Ci0gICAgcmV0dXJuIGFjdGlvblJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YzFlM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuV1NETEZpbGVOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIHsKLQotICAgIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZfOwotICAgIHByaXZhdGUgU3RyaW5nIHdzZGxGaWxlTmFtZV87Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkKQotICAgIHsKLSAgICAgIHJldHVybiBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLCJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcnRpZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gd3JpdGUoT3V0cHV0U3RyZWFtIG9zKSB7Ci0gICAgICAgIGlmIChkZWZfICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB3cml0ZVdTRExEZWZpbml0aW9uKG9zLCBkZWZfKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCkgewotICAgICAgICByZXR1cm4gd3NkbEZpbGVOYW1lXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLQotICAgICAgICAvLyByZXR1cm4gZmFsc2UgaWYgbm9kZUlEID09IDAsIHRoYXQgaXMgdGhlIG1haW4gbm9kZQotICAgICAgICBpZiAobm9kZUlEID09IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgICAgICBTdHJpbmcgd3NkbFVSTCA9ICgoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0V3NkbFVybCgpOwotICAgICAgICB3c2RsRmlsZU5hbWVfID0gV1NETEZpbGVOYW1lSGVscGVyLmdldFdTRExGaWxlTmFtZSh3c2RsVVJMKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBkZWZfID0gKG5ldyBVZGRpNGpIZWxwZXIoKSkuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNmNTFlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIHJldHVybiAoRm9ybVRvb2wpZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkgewotICAgICAgICBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSB0YWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0KLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0KLSAgICAgICAgdGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkpOwotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpKSk7Ci0KLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNmZhN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gbmV3QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICByZXR1cm4gbmV3IEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgcmV0dXJuIChGb3JtVG9vbClmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbGF1bmNoV2l6YXJkKCgoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0V3NkbFVybCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMDUzMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxpbmtBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc01haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQ29uZmlybUpTUC5qc3AiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIG1haW5Ob2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBtYWluRWxlbWVudCA9IChGYXZvcml0ZXNNYWluRWxlbWVudCltYWluTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gbWFpbkVsZW1lbnQucmVzdG9yZUZhdm9yaXRlc0RlZmF1bHQoKTsKLSAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgIHsKLSAgICAgIFZlY3RvciBmb2xkZXJOb2RlcyA9IG1haW5Ob2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9sZGVyTm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgZm9sZGVyTm9kZSA9IChOb2RlKWZvbGRlck5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBmb2xkZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCl0cmVlRWxlbWVudDsKLSAgICAgICAgICBmb2xkZXJFbGVtZW50LnJlbW92ZUFsbEZhdm9yaXRlcyhjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpKTsKLSAgICAgICAgICBmb2xkZXJFbGVtZW50LmluaXQobWFpbkVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0ZBVk9SSVRFU19SRVNUT1JFRF9UT19ERUZBVUxUIikpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9PUEVOX0ZBVk9SSVRFU19CQUNLVVAiKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGU5OTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuVG9nZ2xlTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uIGV4dGVuZHMgVG9nZ2xlTm9kZUFjdGlvbiB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsIGJvb2xlYW4gb3BlbikgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlkKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU4pOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBpZiAob3BlbikKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOX05PREUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0xPU0VfTk9ERSk7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSB0b2dnbGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaW50IG5vZGVJZCA9IHRvZ2dsZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICAgICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKTsKLSAgICAgICAgaW50IHZpZXdJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICAgICAgaW50IHZpZXdUb29sSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCB0b29sSWQsIHZpZXdJZCwgdmlld1Rvb2xJZCwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCB0cnVlKTsKLSAgICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9GQVZPUklURVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL011bHRpcGxlTGlua0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODBkZWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGlua0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk1hc3NOb2RlSWRUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNdWx0aXBsZUxpbmtBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBNdWx0aXBsZUxpbmtBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgaXNNdWx0aXBsZUxpbmtBY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICAgIGlmIChpc011bHRpcGxlTGlua0FjdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04sIGlzTXVsdGlwbGVMaW5rQWN0aW9uKTsKLSAgICAgIHJldHVybiBwcm9jZXNzTXVsdGlwbGVMaW5rQWN0aW9uUGFyYW1ldGVycyhyZXF1ZXN0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnJlbW92ZShGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICAgICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgU3RyaW5nIHRvb2xJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgICAgU3RyaW5nIHZpZXdJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgICAgU3RyaW5nIHZpZXdUb29sSURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICBpZiAobm9kZUlEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSURTdHJpbmcpOwotICAgICAgaWYgKHRvb2xJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCwgdG9vbElEU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3SURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJRFN0cmluZyk7Ci0gICAgICBpZiAodmlld1Rvb2xJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsIHZpZXdUb29sSURTdHJpbmcpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc011bHRpcGxlTGlua0FjdGlvblBhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmdbXSBtYXNzQWN0aW9uTm9kZUlEcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQsIG1hc3NBY3Rpb25Ob2RlSURzKTsKLSAgICBpZiAobWFzc0FjdGlvbk5vZGVJRHMubGVuZ3RoID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIHJldHVybiBuZXcgSVRyYW5zZm9ybWVyW10ge25ldyBNYXNzTm9kZUlkVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIEZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEKX07Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc011bHRpcGxlTGlua0FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZV8uY29udGFpbnNLZXkoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRNYXNzQWN0aW9uTm9kZUlkcygpCi0gIHsKLSAgICBPYmplY3Qgb2JqZWN0ID0gcHJvcGVydHlUYWJsZV8uZ2V0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEKTsKLSAgICBpZiAob2JqZWN0ID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICBlbHNlIGlmIChvYmplY3QuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpCi0gICAgICByZXR1cm4gKFN0cmluZ1tdKW9iamVjdDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsoU3RyaW5nKW9iamVjdH07Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIChpc011bHRpcGxlTGlua0FjdGlvbigpKSA/IGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKSA6IGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nW10gbWFzc0FjdGlvbk5vZGVJRHMgPSBnZXRNYXNzQWN0aW9uTm9kZUlkcygpOwotICAgIGlmIChtYXNzQWN0aW9uTm9kZUlEcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFzc0FjdGlvbk5vZGVJRHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBtYXNzQWN0aW9uTm9kZUlEc1tpXSk7Ci0gICAgICAgIGlmIChleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpKQotICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5yZW1vdmUoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YTMxODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc01haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBSZW1vdmVGYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImZhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBTdHJpbmcgbm9kZUlEU3RyaW5nID0gKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludChub2RlSURTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICB7Ci0gICAgICBub2RlSUQgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGVJZCgpOwotICAgIH0KLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5ID0gY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKTsKLSAgICBib29sZWFuIGFjdGlvblJlc3VsdDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzRWxlbWVudCkKLSAgICAgIGFjdGlvblJlc3VsdCA9ICgoRmF2b3JpdGVzRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50KS5nZXRQYXJlbnRGb2xkZXJFbGVtZW50KCkucmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChub2RlSUQsIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNGb2xkZXJFbGVtZW50KQotICAgICAgYWN0aW9uUmVzdWx0ID0gKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgZWxzZSBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzTWFpbkVsZW1lbnQpCi0gICAgewotICAgICAgRW51bWVyYXRpb24gZTsKLSAgICAgIEZhdm9yaXRlc01haW5FbGVtZW50IG1haW5FbGVtZW50ID0gKEZhdm9yaXRlc01haW5FbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfRk9MREVSX05PREUpOwotICAgICAgYWN0aW9uUmVzdWx0ID0gKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSBhY3Rpb25SZXN1bHQgJiYgKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSBhY3Rpb25SZXN1bHQgJiYgKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpOwotICAgICAgYWN0aW9uUmVzdWx0ID0gYWN0aW9uUmVzdWx0ICYmICgoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCkgZS5uZXh0RWxlbWVudCgpKS5yZW1vdmVBbGxGYXZvcml0ZXMocGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpOwotICAgICAgZSA9IG1haW5FbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFKTsKLSAgICAgIGFjdGlvblJlc3VsdCA9IGFjdGlvblJlc3VsdCAmJiAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSBhY3Rpb25SZXN1bHQgJiYgKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGFjdGlvblJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PREVfQ0xFQVJFRCIsIHNlbGVjdGVkTm9kZS5nZXROb2RlTmFtZSgpKSk7Ci0gICAgcmV0dXJuIGFjdGlvblJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJmYXZOYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAiZmF2UHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAiZmF2U3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM0YmUzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlJlc2l6ZUZyYW1lc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uIGV4dGVuZHMgUmVzaXplRnJhbWVzQWN0aW9uCi17Ci0gIHB1YmxpYyBSZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgZnJhbWVzZXQgc2l6ZXMuCi0gICAgU3RyaW5nIGZyYW1lTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5GUkFNRV9OQU1FKTsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIAotICAgIC8vIFNldCB0aGUgbmV3IGZyYW1lc2V0IHNpemVzLgotICAgIGlmIChmcmFtZU5hbWUuZXF1YWxzKEZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjEwMCUsMCUiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhGYXZvcml0ZXNGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKGZhdlBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjEwMCUsMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhGYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKGZhdlBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjAlLDEwMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOTc0NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLQotcHVibGljIGNsYXNzIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlQWN0aW9uCi17Ci0gICAgcHVibGljIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgYm9vbGVhbiBrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBpZiAoa2VlcEhpc3RvcnkpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gICAgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTY3MjdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNlbGVjdE5vZGVUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVUb29sQWN0aW9uCi17Ci0gICAgcHVibGljIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgICAgIGlmICh2aWV3SUQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtlZXBIaXN0b3J5KSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgiPTEiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgICAgaWYgKGdldFNlbGVjdGVkVG9vbCgpLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikgewotICAgICAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBnZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgZ2V0U2VsZWN0ZWRUb29sKCkuZ2V0VG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NjQ1OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbiBleHRlbmRzIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24KLXsKLSAgICBwdWJsaWMgU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcGVyZm9ybUV4dGVuZGVkQWN0aW9uKCkKLSAgICB7Ci0gICAgCVRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJKChGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLnJlZnJlc2goKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBib29sZWFuIGtlZXBIaXN0b3J5KQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBpZiAoa2VlcEhpc3RvcnkpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZDkwOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbiBleHRlbmRzIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIAotICAgIC8vIFNhdmUgdGhlIGZyYW1lc2V0IHNpemVzIGlmZiBubyBmcmFtZSBpcyBtYXhpbWl6ZWQuCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIAotICAgIGlmICghYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAKLSAgICByZXR1cm4gc3VwZXIucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGVyc3BlY3RpdmVJZCk7Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBmb3JtTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOyAgICAKLSAgICByZXR1cm4gZm9ybUxpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0FjdGlvbklucHV0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0FjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzRkMzdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNBY3Rpb25JbnB1dHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzQWN0aW9uSW5wdXRzCi17Ci0gICAgLy8gbWFzcyBhY3Rpb25zCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTVVMVElQTEVfTElOS19BQ1RJT04gPSAibXVsdGlwbGVMaW5rQWN0aW9uIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBNQVNTX0FDVElPTl9OT0RFX0lEID0gIm1hc3NBY3Rpb25Ob2RlSUQiOwotCi0gICAgLy8gcmVzaXplIGZhdm9yaXRlcyBmcmFtZXMgYWN0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UID0gImZyYW1lc2V0Q29sc1BlcnNwZWN0aXZlQ29udGVudCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiA9ICJmcmFtZXNldFJvd3NBY3Rpb25zQ29udGFpbmVyIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNGcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzRnJhbWVOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjZjMjY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNGcmFtZU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0ZyYW1lTmFtZXMKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX0NPTlRBSU5FUiA9ICJmYXZfbmF2aWdhdG9yX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5BVklHQVRPUl9UT09MQkFSID0gImZhdl9uYXZpZ2F0b3JfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5BVklHQVRPUl9DT05URU5UID0gImZhdl9uYXZpZ2F0b3JfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEFDVElPTlNfQ09OVEFJTkVSID0gImZhdl9hY3Rpb25zX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQ09OVEFJTkVSID0gImZhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfVE9PTEJBUiA9ICJmYXZfcHJvcGVydGllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19DT05URU5UID0gImZhdl9wcm9wZXJ0aWVzX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfQ09OVEFJTkVSID0gImZhdl9zdGF0dXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX1RPT0xCQVIgPSAiZmF2X3N0YXR1c190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX0NPTlRFTlQgPSAiZmF2X3N0YXR1c19jb250ZW50IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNNb2RlbENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc01vZGVsQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZjBjMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc01vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzIHsKLSAgICAvLyBSZWxhdGlvbnMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NJTF9GT0xERVJfTk9ERSA9ICJyZWxXU0lMRm9sZGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSA9ICJyZWxXU0RMU2VydmljZUZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1NFUlZJQ0VfRk9MREVSX05PREUgPSAicmVsVURESVNlcnZpY2VGb2xkZXJOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSA9ICJyZWxVRERJQnVzaW5lc3NGb2xkZXJOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9GT0xERVJfTk9ERSA9ICJyZWxVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFID0gInJlbFVERElSZWdpc3RyeUZvbGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfRk9MREVSX05PREUgPSAicmVsVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0lMX05PREUgPSAicmVsV1NJTE5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0RMX1NFUlZJQ0VfTk9ERSA9ICJyZWxXU0RMU2VydmljZU5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1NFUlZJQ0VfTk9ERSA9ICJyZWxVRERJU2VydmljZU5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX0JVU0lORVNTX05PREUgPSAicmVsVURESUJ1c2luZXNzTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTk9ERSA9ICJyZWxVRERJU2VydmljZUludGVyZmFjZU5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1JFR0lTVFJZX05PREUgPSAicmVsVURESVJlZ2lzdHJ5Tm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSA9ICJyZWxVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSI7Ci0KLSAgICAvLyBQcm9wZXJ0aWVzCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9QTFVHSU5fTUVUQURBVEFfRElSRUNUT1JZID0gInBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1dTSUxfVVJMID0gIndzaWxVUkwiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfV1NETF9VUkwgPSAid3NkbFVSTCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSA9ICJVRERJU2VydmljZU5hbWUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9TRVJWSUNFX0lOUVVJUllfQVBJID0gIlVERElTZXJ2aWNlSW5xdWlyeUFQSSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfS0VZID0gIlVERElTZXJ2aWNlS2V5IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfQlVTSU5FU1NfTkFNRSA9ICJVRERJQnVzaW5lc3NOYW1lIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfQlVTSU5FU1NfSU5RVUlSWV9BUEkgPSAiVURESUJ1c2luZXNzSW5xdWlyeUFQSSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX0JVU0lORVNTX0tFWSA9ICJVRERJQnVzaW5lc3NLZXkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FID0gIlVERElTZXJ2aWNlSW50ZXJmYWNlTmFtZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJID0gIlVERElTZXJ2aWNlSW50ZXJmYWNlSW5xdWlyeUFQSSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSA9ICJVRERJU2VydmljZUludGVyZmFjZUtleSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1JFR0lTVFJZX05BTUUgPSAiVURESVJlZ2lzdHJ5TmFtZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1JFR0lTVFJZX0lOUVVJUllfQVBJID0gIlVERElSZWdpc3RyeUlucXVpcnlBUEkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9SRUdJU1RSWV9QVUJMSVNIX0FQSSA9ICJVRERJUmVnaXN0cnlQdWJsaXNoQVBJIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfUkVHSVNUUllfUkVHSVNUUkFUSU9OX1VSTCA9ICJVRERJUmVnaXN0cnlSZWdpc3RyYXRpb25VUkwiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9SRUdJU1RSWV9DQVRFR09SSUVTX0VOVU0gPSAiVURESVJlZ2lzdHJ5Q2F0ZWdvcmllc0VudW0iOwotCi0gICAgLy8gTGlzdCBNYW5hZ2VycyBmb3IgRmF2b3JpdGVzCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMgPSAid3NkbFNlcnZpY2VzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUyA9ICJ1ZGRpU2VydmljZXMiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX0JVU0lORVNTID0gInVkZGlCdXNpbmVzcyI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1dTSUxfTElOS1MgPSAid3NpbExpbmtzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfVURESV9SRUdJU1RSWSA9ICJ1ZGRpUmVnaXN0cnkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VfSU5URVJGQUNFID0gInVkZGlTZXJ2aWNlSW50ZXJmYWNlIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjY3N2QyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzRWxlbWVudCBleHRlbmRzIFRyZWVFbGVtZW50IHsKLQotICBwdWJsaWMgRmF2b3JpdGVzRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLQotICBwdWJsaWMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBnZXRQYXJlbnRGb2xkZXJFbGVtZW50KCkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNGb2xkZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWI5YzBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNGb2xkZXJFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotICAgIHByb3RlY3RlZCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gICAgCi0gICAgcHVibGljIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGVNYW5hZ2VyOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBGYXZvcml0ZXNNYWluRWxlbWVudCBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpIHsKLSAgICAgICAgcmV0dXJuIChGYXZvcml0ZXNNYWluRWxlbWVudClub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluaXQoRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUpOwotCi0gICAgcHVibGljIGFic3RyYWN0IEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzTWFpbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNNYWluRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTllZWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNNYWluRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1JlZ2lzdHJ5VHlwZVdTRTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIEZhdm9yaXRlc01haW5FbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICBwcml2YXRlIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZVdTRSBmYXZSZWdpc3RyeV87Ci0KLSAgcHVibGljIEZhdm9yaXRlc01haW5FbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgICBmYXZSZWdpc3RyeV8gPSBuZXcgRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFKAotCQkJY29udHJvbGxlci5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKSwKLQkJCWNvbnRyb2xsZXIuZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKQotCSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpCi0gIHsKLSAgICBmYXZSZWdpc3RyeV8ucmVzdG9yZUZhdm9yaXRlc0RlZmF1bHQoKTsKLSAgICByZXR1cm4gc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2F2ZUZhdm9yaXRlcygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBmYXZSZWdpc3RyeV8uc2F2ZSgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9TQVZFX0ZBVk9SSVRFU19XU0lMIiwgZmF2UmVnaXN0cnlfLmdldFdyaXRlTG9jYXRpb24oKSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFVERElSZWdpc3RyeShTdHJpbmcgcmVnaXN0cnlOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHB1Ymxpc2hBUEksIFN0cmluZyByZWdpc3RyYXRpb25VUkwpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmFkZFVERElSZWdpc3RyeShyZWdpc3RyeU5hbWUsIGlucXVpcnlBUEksIHB1Ymxpc2hBUEksIHJlZ2lzdHJhdGlvblVSTCk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRVRERJQnVzaW5lc3MoU3RyaW5nIGJ1c2luZXNzTmFtZSwgU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBidXNpbmVzc0tleSkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkVURESUJ1c2luZXNzKGJ1c2luZXNzTmFtZSwgaW5xdWlyeUFQSSwgYnVzaW5lc3NLZXkpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkVURESVNlcnZpY2UoU3RyaW5nIHNlcnZpY2VOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlcnZpY2VLZXkpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmFkZFVERElTZXJ2aWNlKHNlcnZpY2VOYW1lLCBpbnF1aXJ5QVBJLCBzZXJ2aWNlS2V5KTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFVERElTZXJ2aWNlSW50ZXJmYWNlKFN0cmluZyBzZXJJbnROYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlckludEtleSkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkVURESVNlcnZpY2VJbnRlcmZhY2Uoc2VySW50TmFtZSwgaW5xdWlyeUFQSSwgc2VySW50S2V5KTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFdTRExTZXJ2aWNlKFN0cmluZyB1cmwpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmFkZFdTRExTZXJ2aWNlKHVybCk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRXU0lMTGluayhTdHJpbmcgdXJsKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5hZGRXU0lMTGluayh1cmwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlU2VydmljZShTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICBmYXZSZWdpc3RyeV8ucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUxpbmsoTGluayBsaW5rKSB7Ci0gICAgZmF2UmVnaXN0cnlfLnJlbW92ZUxpbmsobGluayk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgTGlua1tdIGxvYWRVRERJUmVnaXN0cmllcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRVRERJUmVnaXN0cmllcygpOwotICB9Ci0gICAgCi0gIHB1YmxpYyBMaW5rW10gbG9hZFVERElCdXNpbmVzc2VzKCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8ubG9hZFVERElCdXNpbmVzc2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRVRERJU2VydmljZXMoKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5sb2FkVURESVNlcnZpY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5sb2FkVURESVNlcnZpY2VJbnRlcmZhY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRXU0RMU2VydmljZXMoKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5sb2FkV1NETFNlcnZpY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgTGlua1tdIGxvYWRXU0lMcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRXU0lMcygpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBnZXRGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCkoZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpLm5leHRFbGVtZW50KCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkMTdmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1VERElCdXNpbmVzczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNFbGVtZW50IHsKLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElCdXNpbmVzcyB1ZGRpQnVzaW5lc3NfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHVkZGlCdXNpbmVzc18gPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzKCk7Ci0gICAgdWRkaUJ1c2luZXNzXy5zZXRMaW5rKGxpbmspOwotICB9Ci0KLSAgcHVibGljIExpbmsgZ2V0TGluaygpIHsKLSAgICByZXR1cm4gdWRkaUJ1c2luZXNzXy5nZXRMaW5rKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgcmV0dXJuIHVkZGlCdXNpbmVzc18uZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgIHJldHVybiB1ZGRpQnVzaW5lc3NfLmdldElucXVpcnlVUkwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QnVzaW5lc3NLZXkoKSB7Ci0gICAgcmV0dXJuIHVkZGlCdXNpbmVzc18uZ2V0QnVzaW5lc3NLZXkoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNGFiNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgTGlua1tdIGxpbmtzID0gZmF2TWFpbkVsZW1lbnQubG9hZFVERElCdXNpbmVzc2VzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykgewotICAgICAgTGluayBsaW5rID0gbGlua3NbaV07Ci0gICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGZhdlVERElCdXNpbmVzc0VsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCgobGluay5nZXRBYnN0cmFjdHMoKSlbMF0uZ2V0VGV4dCgpLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESUJ1c2luZXNzRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRGYXZvcml0ZShIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfS0VZKTsKLSAgICBpZiAoYnVzaW5lc3NOYW1lID09IG51bGwgfHwgaW5xdWlyeUFQSSA9PSBudWxsIHx8IGJ1c2luZXNzS2V5ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBlID0gZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgYnVzaW5lc3NLZXkpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgICByZW1vdmVGYXZvcml0ZShlKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgTGluayBsaW5rID0gZmF2TWFpbkVsZW1lbnQuYWRkVURESUJ1c2luZXNzKGJ1c2luZXNzTmFtZSwgaW5xdWlyeUFQSSwgYnVzaW5lc3NLZXkpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGZhdlVERElCdXNpbmVzc0VsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudChidXNpbmVzc05hbWUsIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZVRERJQnVzaW5lc3NFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgICByZXR1cm4gc2F2ZWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0tFWSk7Ci0gICAgaWYgKGlucXVpcnlBUEkgPT0gbnVsbCB8fCBidXNpbmVzc0tleSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgYnVzaW5lc3NLZXkpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpCi0gICAgICByZXR1cm4gKHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkgJiYgZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGUoRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgTGluayBsaW5rID0gZWxlbWVudC5nZXRMaW5rKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGZhdlVERElCdXNpbmVzc0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBMaW5rIGxpbmsgPSBmYXZVRERJQnVzaW5lc3NFbGVtZW50LmdldExpbmsoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZUxpbmsobGluayk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSk7Ci0gICAgcmV0dXJuIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBbGxGYXZvcml0ZXMoKSB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGdldEZhdm9yaXRlKFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgYnVzaW5lc3NLZXkpIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChpbnF1aXJ5QVBJLmVxdWFscyhidXNFbGVtZW50LmdldElucXVpcnlVUkwoKSkgJiYKLSAgICAgICAgICBidXNpbmVzc0tleS5lcXVhbHMoYnVzRWxlbWVudC5nZXRCdXNpbmVzc0tleSgpKSkKLSAgICAgICAgcmV0dXJuIGJ1c0VsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzZjY2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1VERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5JRmF2b3JpdGVzVURESVJlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVJlZ2lzdHJ5IHVkZGlSZWdfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHVkZGlSZWdfID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeSgpOwotICAgIHVkZGlSZWdfLnNldExpbmsobGluayk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBnZXRMaW5rKCkgewotICAgIHJldHVybiB1ZGRpUmVnXy5nZXRMaW5rKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgcmV0dXJuIHVkZGlSZWdfLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICByZXR1cm4gdWRkaVJlZ18uZ2V0SW5xdWlyeVVSTCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgIHJldHVybiB1ZGRpUmVnXy5nZXRQdWJsaXNoVVJMKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpIHsKLSAgICByZXR1cm4gdWRkaVJlZ18uZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGdldElGYXZvcml0ZXNVRERJUmVnaXN0cnlJbnRlcmZhY2UoKQotICB7Ci0gICAgcmV0dXJuIHVkZGlSZWdfOwotICB9Ci19Ci0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhOGZjYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHM7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50Ci17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCkgewotICAgIExpbmtbXSBsaW5rcyA9IGZhdk1haW5FbGVtZW50LmxvYWRVRERJUmVnaXN0cmllcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIExpbmsgbGluayA9IGxpbmtzW2ldOwotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnc2l0cnlFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQoKGxpbmsuZ2V0QWJzdHJhY3RzKCkpWzBdLmdldFRleHQoKSwgZ2V0TW9kZWwoKSwgbGluayk7Ci0gICAgICBjb25uZWN0KGZhdlVERElSZWdzaXRyeUVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBhZGRGYXZvcml0ZShIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgcHVibGlzaEFQSSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9QVUJMSVNIX0FQSSk7Ci0gICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9SRUdJU1RSQVRJT05fVVJMKTsKLSAgICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSAoRW51bWVyYXRpb24pdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9DQVRFR09SSUVTX0VOVU0pOwotICAgIC8vIFNhdmUgdGhlIGNhdGVnb3J5IGRhdGEgZmlyc3QgYW5kIHVuZG8gaWYgbmVjZXNzYXJ5LgotICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1BMVUdJTl9NRVRBREFUQV9ESVJFQ1RPUlkpOwotICAgICAgU3RyaW5nQnVmZmVyIGRpcmVjdG9yeUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSxyZWdpc3RyeU5hbWUpOwotICAgICAgRmlsZSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKGRpcmVjdG9yeUJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgIGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlLm1rZGlycygpOwotICAgICAgU3RyaW5nQnVmZmVyIGNhdGVnb3J5RmlsZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICB3aGlsZSAodXNlckRlZmluZWRDYXRlZ29yaWVzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbCl1c2VyRGVmaW5lZENhdGVnb3JpZXMubmV4dEVsZW1lbnQoKTsgICAgICAgIAotICAgICAgICBjYXRlZ29yeUZpbGVOYW1lLnNldExlbmd0aCgwKTsKLSAgICAgICAgU3RyaW5nIGVuY29kZWRDYXRlZ29yeUtleSA9IFVSTFV0aWxzLmVuY29kZShjYXRlZ29yeU1vZGVsLmdldENhdGVnb3J5S2V5KCkpOwotICAgICAgICBjYXRlZ29yeUZpbGVOYW1lLmFwcGVuZChjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSkuYXBwZW5kKEZpbGUuc2VwYXJhdG9yQ2hhcikuYXBwZW5kKGVuY29kZWRDYXRlZ29yeUtleSkuYXBwZW5kKCIudHh0Iik7Ci0gICAgICAgIGJ5dGUgcmMgPSBjYXRlZ29yeU1vZGVsLnNhdmVEYXRhKGNhdGVnb3J5RmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChyYyAhPSBDYXRlZ29yeU1vZGVsLk9QRVJBVElPTl9TVUNDRVNTRlVMKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gRGVsZXRlIHRoZSBjYXRlZ29yeSBmaWxlIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgICBGaWxlIGNhdGVnb3J5RmlsZSA9IG5ldyBGaWxlKGNhdGVnb3J5RmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGNhdGVnb3J5RmlsZS5leGlzdHMoKSkKLSAgICAgICAgICAgIGNhdGVnb3J5RmlsZS5kZWxldGUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2xlYW51cENhdGVnb3J5RGlyZWN0b3JpZXMoY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUpOwotICAgIH0KLSAgICBpZiAocmVnaXN0cnlOYW1lID09IG51bGwgfHwgaW5xdWlyeUFQSSA9PSBudWxsIHx8IHB1Ymxpc2hBUEkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGUgPSBnZXRGYXZvcml0ZShyZWdpc3RyeU5hbWUpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgICByZW1vdmVGYXZvcml0ZShlKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgTGluayBsaW5rID0gZmF2TWFpbkVsZW1lbnQuYWRkVURESVJlZ2lzdHJ5KHJlZ2lzdHJ5TmFtZSwgaW5xdWlyeUFQSSwgcHVibGlzaEFQSSwgcmVnaXN0cmF0aW9uVVJMKTsKLSAgICBib29sZWFuIHNhdmVkID0gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICAgIGlmIChzYXZlZCkgewotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnc2l0cnlFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQocmVnaXN0cnlOYW1lLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVJlZ3NpdHJ5RWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhdmVkOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoU3RyaW5nQnVmZmVyIGNhdGVnb3JpZXNEaXJlY3RvcnksU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LFN0cmluZyByZWdpc3RyeU5hbWUpCi0gIHsKLSAgICAvLyA8bWV0YWRhdGE+L3VkZGkvPHJlZ2lzdHJ5SWQ+L2NhdGVnb3JpZXMKLQlTdHJpbmcgZW5jb2RlZFJlZ2lzdHJ5TmFtZSA9IFVSTFV0aWxzLmVuY29kZShyZWdpc3RyeU5hbWUpOwotICAgIGNhdGVnb3JpZXNEaXJlY3RvcnkuYXBwZW5kKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KS5hcHBlbmQoInVkZGkiKS5hcHBlbmQoRmlsZS5zZXBhcmF0b3JDaGFyKS5hcHBlbmQoZW5jb2RlZFJlZ2lzdHJ5TmFtZSkuYXBwZW5kKEZpbGUuc2VwYXJhdG9yQ2hhcikuYXBwZW5kKCJjYXRlZ29yaWVzIik7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgY2xlYXJSZWdpc3RyeU1ldGFkYXRhKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSxTdHJpbmcgcmVnaXN0cnlOYW1lKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGNhdGVnb3JpZXNEaXJlY3RvcnkgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoY2F0ZWdvcmllc0RpcmVjdG9yeSxwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSxyZWdpc3RyeU5hbWUpOwotICAgIEZpbGUgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShjYXRlZ29yaWVzRGlyZWN0b3J5LnRvU3RyaW5nKCkpOwotICAgIEZpbGVbXSBjYXRlZ29yeUZpbGVzID0gY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUubGlzdEZpbGVzKCk7Ci0gICAgaWYgKGNhdGVnb3J5RmlsZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRlZ29yeUZpbGVzLmxlbmd0aDtpKyspCi0gICAgICAgIGNhdGVnb3J5RmlsZXNbaV0uZGVsZXRlKCk7Ci0gICAgfQotICAgIGNsZWFudXBDYXRlZ29yeURpcmVjdG9yaWVzKGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNsZWFudXBDYXRlZ29yeURpcmVjdG9yaWVzKEZpbGUgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUpCi0gIHsKLSAgICAvLyBEZWxldGUgdGhlIGNhdGVnb3JpZXMgc3ViZGlyZWN0b3J5IGlmIGl0IGlzIGVtcHR5LgotICAgIFN0cmluZ1tdIGZpbGVMaXN0OwotICAgIGZpbGVMaXN0ID0gY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUubGlzdCgpOwotICAgIGlmIChmaWxlTGlzdCA9PSBudWxsIHx8IGZpbGVMaXN0Lmxlbmd0aCA9PSAwKQotICAgICAgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUuZGVsZXRlKCk7Ci0gICAgLy8gRGVsZXRlIHRoZSA8cmVnaXN0cnlJZD4gc3ViZGlyZWN0b3J5IGlmIGl0IGlzIGVtcHR5LgotICAgIEZpbGUgcmVnaXN0cnlJZERpcmVjdG9yeUZpbGUgPSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgZmlsZUxpc3QgPSByZWdpc3RyeUlkRGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgaWYgKGZpbGVMaXN0ID09IG51bGwgfHwgZmlsZUxpc3QubGVuZ3RoID09IDApCi0gICAgICByZWdpc3RyeUlkRGlyZWN0b3J5RmlsZS5kZWxldGUoKTsKLSAgICAvLyBEZWxldGUgdGhlIHVkZGkgc3ViZGlyZWN0b3J5IGlmIGl0IGlzIGVtcHR5LgotICAgIEZpbGUgdWRkaURpcmVjdG9yeUZpbGUgPSByZWdpc3RyeUlkRGlyZWN0b3J5RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgZmlsZUxpc3QgPSB1ZGRpRGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgaWYgKGZpbGVMaXN0ID09IG51bGwgfHwgZmlsZUxpc3QubGVuZ3RoID09IDApCi0gICAgICB1ZGRpRGlyZWN0b3J5RmlsZS5kZWxldGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfTkFNRSk7Ci0gICAgaWYgKHJlZ2lzdHJ5TmFtZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUocmVnaXN0cnlOYW1lKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUZhdm9yaXRlQnlOb2RlSUQoaW50IG5vZGVJRCxTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KQotICAgIHsKLSAgICAgIGNsZWFyUmVnaXN0cnlNZXRhZGF0YShwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSxzZWxlY3RlZEVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgIGJvb2xlYW4gcmMgPSByZW1vdmVGYXZvcml0ZSgoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudClzZWxlY3RlZEVsZW1lbnQpOwotICAgICAgcmMgPSByYyAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgICByZXR1cm4gcmM7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVGYXZvcml0ZShGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBMaW5rIGxpbmsgPSAoKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZWxlbWVudCkuZ2V0TGluaygpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoZmF2TWFpbkVsZW1lbnQucmVtb3ZlTGluayhsaW5rKSkgewotICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsRmF2b3JpdGVzKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnaXN0cnlFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgY2xlYXJSZWdpc3RyeU1ldGFkYXRhKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LGZhdlVERElSZWdpc3RyeUVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgIExpbmsgbGluayA9IGZhdlVERElSZWdpc3RyeUVsZW1lbnQuZ2V0TGluaygpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlTGluayhsaW5rKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIHJlZ2lzdHJ5TmFtZSkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHJlZ2lzdHJ5TmFtZS5lcXVhbHMocmVnRWxlbWVudC5nZXROYW1lKCkpKQotICAgICAgICByZXR1cm4gcmVnRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAwYjM0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzVURESVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNFbGVtZW50IHsKLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElTZXJ2aWNlIHVkZGlTZXJ2aWNlXzsKLQotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHVkZGlTZXJ2aWNlXyA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZSgpOwotICAgIHVkZGlTZXJ2aWNlXy5zZXRTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpIHsKLSAgICByZXR1cm4gdWRkaVNlcnZpY2VfLmdldFNlcnZpY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gdWRkaVNlcnZpY2VfLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICByZXR1cm4gdWRkaVNlcnZpY2VfLmdldElucXVpcnlVUkwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUtleSgpIHsKLSAgICByZXR1cm4gdWRkaVNlcnZpY2VfLmdldFNlcnZpY2VLZXkoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWI0ZjkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gZmF2TWFpbkVsZW1lbnQubG9hZFVERElTZXJ2aWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHNlcnZpY2VzW2ldOwotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGZhdlVERElTZXJ2aWNlRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQoKHNlcnZpY2UuZ2V0U2VydmljZU5hbWVzKCkpWzBdLmdldFRleHQoKSwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICBjb25uZWN0KGZhdlVERElTZXJ2aWNlRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZKTsKLSAgICBpZiAoc2VydmljZU5hbWUgPT0gbnVsbCB8fCBpbnF1aXJ5QVBJID09IG51bGwgfHwgc2VydmljZUtleSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBlID0gZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgc2VydmljZUtleSk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZNYWluRWxlbWVudC5hZGRVRERJU2VydmljZShzZXJ2aWNlTmFtZSwgaW5xdWlyeUFQSSwgc2VydmljZUtleSk7Ci0gICAgYm9vbGVhbiBzYXZlZCA9IGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgICBpZiAoc2F2ZWQpIHsKLSAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBmYXZVRERJU2VydmljZUVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KHNlcnZpY2VOYW1lLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVNlcnZpY2VFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZKTsKLSAgICBpZiAoaW5xdWlyeUFQSSA9PSBudWxsIHx8IHNlcnZpY2VLZXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGdldEZhdm9yaXRlKGlucXVpcnlBUEksIHNlcnZpY2VLZXkpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCkKLSAgICAgIHJldHVybiAocmVtb3ZlRmF2b3JpdGUoKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpICYmIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUZhdm9yaXRlKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gKChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpZWxlbWVudCkuZ2V0U2VydmljZSgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKSkgewotICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsRmF2b3JpdGVzKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGZhdlVERElTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gZmF2VURESVNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2UoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGdldEZhdm9yaXRlKFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgc2VydmljZUtleSkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IHNlckVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChpbnF1aXJ5QVBJLmVxdWFscyhzZXJFbGVtZW50LmdldElucXVpcnlVUkwoKSkgJiYKLSAgICAgICAgICBzZXJ2aWNlS2V5LmVxdWFscyhzZXJFbGVtZW50LmdldFNlcnZpY2VLZXkoKSkpCi0gICAgICAgIHJldHVybiBzZXJFbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDliMmMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZTsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UgdWRkaVNlckludF87Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICB1ZGRpU2VySW50XyA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSgpOwotICAgIHVkZGlTZXJJbnRfLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkgewotICAgIHJldHVybiB1ZGRpU2VySW50Xy5nZXRTZXJ2aWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgcmV0dXJuIHVkZGlTZXJJbnRfLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICByZXR1cm4gdWRkaVNlckludF8uZ2V0SW5xdWlyeVVSTCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCkgewotICAgIHJldHVybiB1ZGRpU2VySW50Xy5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViNDlkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQKLXsKLQotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCkgewotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGZhdk1haW5FbGVtZW50LmxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBzZXJ2aWNlc1tpXTsKLSAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBmYXZVRERJU2VySW50RWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQoKHNlcnZpY2UuZ2V0U2VydmljZU5hbWVzKCkpWzBdLmdldFRleHQoKSwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICBjb25uZWN0KGZhdlVERElTZXJJbnRFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBzZXJJbnROYW1lID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgc2VySW50S2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0gICAgaWYgKHNlckludE5hbWUgPT0gbnVsbCB8fCBpbnF1aXJ5QVBJID09IG51bGwgfHwgc2VySW50S2V5ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGUgPSBnZXRGYXZvcml0ZShpbnF1aXJ5QVBJLCBzZXJJbnRLZXkpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgICByZW1vdmVGYXZvcml0ZShlKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gZmF2TWFpbkVsZW1lbnQuYWRkVURESVNlcnZpY2VJbnRlcmZhY2Uoc2VySW50TmFtZSwgaW5xdWlyeUFQSSwgc2VySW50S2V5KTsKLSAgICBib29sZWFuIHNhdmVkID0gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICAgIGlmIChzYXZlZCkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGZhdlVERElTZXJJbnRFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudChzZXJJbnROYW1lLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVNlckludEVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgc2VySW50S2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0gICAgaWYgKGlucXVpcnlBUEkgPT0gbnVsbCB8fCBzZXJJbnRLZXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGdldEZhdm9yaXRlKGlucXVpcnlBUEksIHNlckludEtleSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgICAgcmV0dXJuIChyZW1vdmVGYXZvcml0ZSgoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkgJiYgZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGUoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCllbGVtZW50KS5nZXRTZXJ2aWNlKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZmF2VURESVNlckludEVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IGZhdlVERElTZXJJbnRFbGVtZW50LmdldFNlcnZpY2UoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTk9ERSk7Ci0gICAgcmV0dXJuIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBbGxGYXZvcml0ZXMoKSB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBzZXJJbnRLZXkpIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzZXJJbnRFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAoaW5xdWlyeUFQSS5lcXVhbHMoc2VySW50RWxlbWVudC5nZXRJbnF1aXJ5VVJMKCkpICYmCi0gICAgICAgICAgIHNlckludEtleS5lcXVhbHMoc2VySW50RWxlbWVudC5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCkpKQotICAgICAgICByZXR1cm4gc2VySW50RWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YTRkZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5SZWdpc3RyeVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlVERElSZWdpc3RyeVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQKLXsKLSAgcHJpdmF0ZSBMaXN0IG5hbWVzOwotICBwcml2YXRlIExpc3QgZGVzY3M7Ci0gIHByaXZhdGUgU3RyaW5nIHZlcnNpb247Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRMb2dpbjsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdFBhc3N3b3JkOwotICBwcml2YXRlIFN0cmluZyBpbnF1aXJ5VVJMOwotICBwcml2YXRlIFN0cmluZyBwdWJsaXNoVVJMOwotICBwcml2YXRlIFN0cmluZyBzZWN1cmVJbnF1aXJ5VVJMOwotICBwcml2YXRlIFN0cmluZyBzZWN1cmVQdWJsaXNoVVJMOwotICBwcml2YXRlIFRheG9ub215W10gdGF4b25vbWllczsKLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRMb2dpbigpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdExvZ2luOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmYXVsdExvZ2luKFN0cmluZyBkZWZhdWx0TG9naW4pCi0gIHsKLSAgICB0aGlzLmRlZmF1bHRMb2dpbiA9IGRlZmF1bHRMb2dpbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0UGFzc3dvcmQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0UGFzc3dvcmQoU3RyaW5nIGRlZmF1bHRQYXNzd29yZCkKLSAgewotICAgIHRoaXMuZGVmYXVsdFBhc3N3b3JkID0gZGVmYXVsdFBhc3N3b3JkOwotICB9Ci0KLSAgcHVibGljIFRheG9ub215W10gZ2V0VGF4b25vbWllcygpCi0gIHsKLSAgICByZXR1cm4gdGF4b25vbWllczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFRheG9ub21pZXMoVGF4b25vbXlbXSB0YXhvbm9taWVzKQotICB7Ci0gICAgdGhpcy50YXhvbm9taWVzID0gdGF4b25vbWllczsKLSAgfQotCi0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXREZXNjcygpCi0gIHsKLSAgICByZXR1cm4gZGVzY3M7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXNjcyhMaXN0IGRlc2NzKQotICB7Ci0gICAgdGhpcy5kZXNjcyA9IGRlc2NzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiBpbnF1aXJ5VVJMOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIHRoaXMuaW5xdWlyeVVSTCA9IGlucXVpcnlVUkw7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXROYW1lcygpCi0gIHsKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lcyhMaXN0IG5hbWVzKQotICB7Ci0gICAgdGhpcy5uYW1lcyA9IG5hbWVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkKLSAgewotICAgIHJldHVybiBwdWJsaXNoVVJMOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFVSTChTdHJpbmcgcHVibGlzaFVSTCkKLSAgewotICAgIHRoaXMucHVibGlzaFVSTCA9IHB1Ymxpc2hVUkw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlY3VyZUlucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuIHNlY3VyZUlucXVpcnlVUkw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZWN1cmVJbnF1aXJ5VVJMKFN0cmluZyBzZWN1cmVJbnF1aXJ5VVJMKQotICB7Ci0gICAgdGhpcy5zZWN1cmVJbnF1aXJ5VVJMID0gc2VjdXJlSW5xdWlyeVVSTDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlUHVibGlzaFVSTCgpCi0gIHsKLSAgICByZXR1cm4gc2VjdXJlUHVibGlzaFVSTDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlY3VyZVB1Ymxpc2hVUkwoU3RyaW5nIHNlY3VyZVB1Ymxpc2hVUkwpCi0gIHsKLSAgICB0aGlzLnNlY3VyZVB1Ymxpc2hVUkwgPSBzZWN1cmVQdWJsaXNoVVJMOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRWZXJzaW9uKCkKLSAgewotICAgIHJldHVybiB2ZXJzaW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmVyc2lvbihTdHJpbmcgdmVyc2lvbikKLSAgewotICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hNZXRhKCl7Ci0JICAgIAotCSAgICBSZWdpc3RyeVNlcnZpY2UgcmVnU2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCSAgICBJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICAKLQkgICAgCQotCSAgICAgIHJlZ01hbmFnZXIucmVmcmVzaE1hbmFnZXIoKTsKLQkgICAgICBTdHJpbmdbXSByZWdVUklzID0gcmVnTWFuYWdlci5nZXRSZWdpc3RyeVVSSXMoKTsKLQkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZ1VSSXMubGVuZ3RoOyBpKyspCi0JICAgICAgewotCSAgICAgICAgUmVnaXN0cnkgcmVnID0gcmVnTWFuYWdlci5sb2FkUmVnaXN0cnkocmVnVVJJc1tpXSk7Ci0JICAgICAgICBpZiAocmVnIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5KQotCSAgICAgICAgewotCSAgICAgICAgICBVRERJUmVnaXN0cnkgdWRkaVJlZyA9IChVRERJUmVnaXN0cnkpcmVnOwotCSAgICAgICAgICBMaXN0IG5hbWVzID0gdWRkaVJlZy5nZXROYW1lKCk7Ci0JICAgICAgICAgIAotCSAgICAgICAgICBpZih1ZGRpUmVnLmdldERpc2NvdmVyeVVSTCgpLmVxdWFscyhnZXRJbnF1aXJ5VVJMKCkpKXsKLQkgICAgICAgICAgCi0JICAgICAgICAJICBzZXROYW1lcyhuYW1lcyk7Ci0JICAgICAgICAJICBzZXREZXNjcyh1ZGRpUmVnLmdldERlc2NyaXB0aW9uKCkpOwotCSAgICAgICAgCSAgc2V0VmVyc2lvbih1ZGRpUmVnLmdldFZlcnNpb24oKSk7Ci0JICAgICAgICAJICBzZXREZWZhdWx0TG9naW4odWRkaVJlZy5nZXREZWZhdWx0TG9naW4oKSk7Ci0JICAgICAgICAJICBzZXREZWZhdWx0UGFzc3dvcmQodWRkaVJlZy5nZXREZWZhdWx0UGFzc3dvcmQoKSk7Ci0JICAgICAgICAJICBzZXRJbnF1aXJ5VVJMKHVkZGlSZWcuZ2V0RGlzY292ZXJ5VVJMKCkpOwotCSAgICAgICAgCSAgc2V0UHVibGlzaFVSTCh1ZGRpUmVnLmdldFB1YmxpY2F0aW9uVVJMKCkpOwotCSAgICAgICAgCSAgc2V0U2VjdXJlSW5xdWlyeVVSTCh1ZGRpUmVnLmdldFNlY3VyZWREaXNjb3ZlcnlVUkwoKSk7Ci0JICAgICAgICAJICBzZXRTZWN1cmVQdWJsaXNoVVJMKHVkZGlSZWcuZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkpOwotCSAgICAgICAgCSAgVGF4b25vbXlbXSB0YXhvbm9taWVzID0gcmVnTWFuYWdlci5sb2FkVGF4b25vbWllcyhVRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCkuZ2V0VGF4b25vbXlVUklzKHVkZGlSZWcpKTsKLQkgICAgICAgIAkgIHNldFRheG9ub21pZXModGF4b25vbWllcyk7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgIH0KLQkgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JICAgIHsKLQkgICAgICAvLyBUT0RPOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nCi0JICAgICAgY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0gIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTFhZDExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgICAxNDE3OTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlJlZ2lzdHJ5U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuVURESVJlZ2lzdHJ5U2VydmljZTsKLQotLyoqCi0gKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyBhIFdTSUwgZG9jdW1lbnQKLSAqLwotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotICBwdWJsaWMgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KQotICB7Ci0gICAgcmVmcmVzaCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaCgpewotCSAgICBkaXNjb25uZWN0UmVsKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUpOwotCSAgICBSZWdpc3RyeVNlcnZpY2UgcmVnU2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCSAgICBJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICByZWdNYW5hZ2VyLnJlZnJlc2hNYW5hZ2VyKCk7Ci0JICAgICAgU3RyaW5nW10gcmVnVVJJcyA9IHJlZ01hbmFnZXIuZ2V0UmVnaXN0cnlVUklzKCk7Ci0JICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWdVUklzLmxlbmd0aDsgaSsrKQotCSAgICAgIHsKLQkgICAgICAgIFJlZ2lzdHJ5IHJlZyA9IHJlZ01hbmFnZXIubG9hZFJlZ2lzdHJ5KHJlZ1VSSXNbaV0pOwotCSAgICAgICAgaWYgKHJlZyBpbnN0YW5jZW9mIFVERElSZWdpc3RyeSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgVURESVJlZ2lzdHJ5IHVkZGlSZWcgPSAoVURESVJlZ2lzdHJ5KXJlZzsKLQkgICAgICAgICAgTGlzdCBuYW1lcyA9IHVkZGlSZWcuZ2V0TmFtZSgpOwotCSAgICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWUgPSBuYW1lcyAhPSBudWxsICYmICFuYW1lcy5pc0VtcHR5KCkgPyAoKE5hbWUpbmFtZXMuZ2V0KDApKS5nZXRWYWx1ZSgpIDogIiI7Ci0JICAgICAgICAgIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudChkaXNwbGF5TmFtZSwgZ2V0TW9kZWwoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXROYW1lcyhuYW1lcyk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXREZXNjcyh1ZGRpUmVnLmdldERlc2NyaXB0aW9uKCkpOwotCSAgICAgICAgICBmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQuc2V0VmVyc2lvbih1ZGRpUmVnLmdldFZlcnNpb24oKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXREZWZhdWx0TG9naW4odWRkaVJlZy5nZXREZWZhdWx0TG9naW4oKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXREZWZhdWx0UGFzc3dvcmQodWRkaVJlZy5nZXREZWZhdWx0UGFzc3dvcmQoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRJbnF1aXJ5VVJMKHVkZGlSZWcuZ2V0RGlzY292ZXJ5VVJMKCkpOwotCSAgICAgICAgICBmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQuc2V0UHVibGlzaFVSTCh1ZGRpUmVnLmdldFB1YmxpY2F0aW9uVVJMKCkpOwotCSAgICAgICAgICBmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQuc2V0U2VjdXJlSW5xdWlyeVVSTCh1ZGRpUmVnLmdldFNlY3VyZWREaXNjb3ZlcnlVUkwoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRTZWN1cmVQdWJsaXNoVVJMKHVkZGlSZWcuZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkpOwotCSAgICAgICAgICBUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKS5nZXRUYXhvbm9teVVSSXModWRkaVJlZykpOwotCSAgICAgICAgICBmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQuc2V0VGF4b25vbWllcyh0YXhvbm9taWVzKTsKLQkgICAgICAgICAgY29ubmVjdChmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotCSAgICB7Ci0JICAgICAgLy8gVE9ETzogQmV0dGVyIGVycm9yIHJlcG9ydGluZwotCSAgICAgIGNlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9ICAKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkKLSAgewotICAgIC8vIGRvIG5vdGhpbmcKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkKLSAgewotICAgIC8vIGRvIG5vdGhpbmcKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUZhdm9yaXRlQnlOb2RlSUQoaW50IG5vZGVJRCwgU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KQotICB7Ci0gICAgLy8gZG8gbm90aGluZwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsRmF2b3JpdGVzKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkKLSAgewotICAgIC8vIGRvIG5vdGhpbmcKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBbGxGYXZvcml0ZXMoKQotICB7Ci0gICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9OT0RFKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJiYjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5GYXZvcml0ZXNXU0RMOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudCB7Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNXU0RMIHdzZGxfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgd3NkbF8gPSBuZXcgRmF2b3JpdGVzV1NETCgpOwotICAgIHdzZGxfLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkgewotICAgIHJldHVybiB3c2RsXy5nZXRTZXJ2aWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVcmwoKSB7Ci0gICAgcmV0dXJuIHdzZGxfLmdldFdzZGxVcmwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldFdzZGxVcmwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgzZjQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQKLXsKLQotICBwdWJsaWMgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCkgewotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGZhdk1haW5FbGVtZW50LmxvYWRXU0RMU2VydmljZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBzZXJ2aWNlc1tpXTsKLSAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBmYXZXU0RMU2VydmljZUVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KChzZXJ2aWNlLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRMb2NhdGlvbigpLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2V1NETFNlcnZpY2VFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTRExfVVJMKTsKLSAgICBpZiAod3NkbFVSTCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBlID0gZ2V0RmF2b3JpdGUod3NkbFVSTCk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZNYWluRWxlbWVudC5hZGRXU0RMU2VydmljZSh3c2RsVVJMKTsKLSAgICBib29sZWFuIHNhdmVkID0gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICAgIGlmIChzYXZlZCkgewotICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdldTRExTZXJ2aWNlRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQod3NkbFVSTCwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICBjb25uZWN0KGZhdldTRExTZXJ2aWNlRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgICByZXR1cm4gc2F2ZWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NETF9VUkwpOwotICAgIGlmICh3c2RsVVJMID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChnZXRGYXZvcml0ZSh3c2RsVVJMKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUZhdm9yaXRlQnlOb2RlSUQoaW50IG5vZGVJRCxTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpCi0gICAgICByZXR1cm4gKHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KSAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUZhdm9yaXRlKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gKChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZWxlbWVudCkuZ2V0U2VydmljZSgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKSkgewotICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsRmF2b3JpdGVzKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdldTRExTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gZmF2V1NETFNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2UoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGdldEZhdm9yaXRlKFN0cmluZyB3c2RsVXJsKSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmICh3c2RsVXJsLmVxdWFscyh3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpKQotICAgICAgICByZXR1cm4gd3NkbEVsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NJTEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODBiNjA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1dTSUw7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzV1NJTCB3c2lsXzsKLQotICBwdWJsaWMgRmF2b3JpdGVzV1NJTEVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgd3NpbF8gPSBuZXcgRmF2b3JpdGVzV1NJTCgpOwotICAgIHdzaWxfLnNldExpbmsobGluayk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBnZXRMaW5rKCkgewotICAgIHJldHVybiB3c2lsXy5nZXRMaW5rKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVcmwoKSB7Ci0gICAgcmV0dXJuIHdzaWxfLmdldFdzaWxVcmwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldFdzaWxVcmwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVhNDkzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCB7Ci0KLSAgcHVibGljIEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCkgewotICAgIExpbmtbXSBsaW5rcyA9IGZhdk1haW5FbGVtZW50LmxvYWRXU0lMcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIExpbmsgbGluayA9IGxpbmtzW2ldOwotICAgICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgZmF2V1NJTEVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzV1NJTEVsZW1lbnQobGluay5nZXRMb2NhdGlvbigpLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2V1NJTEVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTSUxfVVJMKTsKLSAgICBpZiAod3NpbFVSTCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IGUgPSBnZXRGYXZvcml0ZSh3c2lsVVJMKTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgICAgcmVtb3ZlRmF2b3JpdGUoZSk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIExpbmsgbGluayA9IGZhdk1haW5FbGVtZW50LmFkZFdTSUxMaW5rKHdzaWxVUkwpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCBmYXZXU0lMRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0lMRWxlbWVudCh3c2lsVVJMLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2V1NJTEVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyB3c2lsVVJMID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0lMX1VSTCk7Ci0gICAgaWYgKHdzaWxVUkwgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGdldEZhdm9yaXRlKHdzaWxVUkwpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTSUxFbGVtZW50KQotICAgICAgcmV0dXJuIChyZW1vdmVGYXZvcml0ZSgoRmF2b3JpdGVzV1NJTEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KSAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVGYXZvcml0ZShGYXZvcml0ZXNXU0lMRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgTGluayBsaW5rID0gZWxlbWVudC5nZXRMaW5rKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCBmYXZXU0lMRWxlbWVudCA9IChGYXZvcml0ZXNXU0lMRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBMaW5rIGxpbmsgPSBmYXZXU0lMRWxlbWVudC5nZXRMaW5rKCk7Ci0gICAgICBmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspOwotICAgIH0KLSAgICBkaXNjb25uZWN0UmVsKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUpOwotICAgIHJldHVybiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCkgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9OT0RFKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzV1NJTEVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIHdzaWxVcmwpIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IHdzaWxFbGVtZW50ID0gKEZhdm9yaXRlc1dTSUxFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmICh3c2lsVXJsLmVxdWFscyh3c2lsRWxlbWVudC5nZXRXc2lsVXJsKCkpKQotICAgICAgICByZXR1cm4gd3NpbEVsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9BZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGExNzk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLQotICAgIHB1YmxpYyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJmYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDgxMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotCi0gICAgcHVibGljIEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJmYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCkpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwMGZhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wgewotCi0gIHB1YmxpYyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzExMGM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvRmlsZVN5c3RlbVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2FjOGYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb1dvcmtiZW5jaFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5YjM1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTWFpbk5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc01haW5Ob2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NjAxMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTWFpbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc01haW5Ob2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc01haW5Ob2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIDEsICJpbWFnZXMvcm9vdF9tYWluLmdpZiIpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVRERJIFJlZ2lzdHJ5IEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQgZmF2VURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19VRERJX1JFR0lTVFJJRVNfRk9MREVSX05PREUiKSwgdHJlZUVsZW1lbnQuZ2V0TW9kZWwoKSwgbm9kZU1hbmFnZXIpOwotICAgICAgICB0cmVlRWxlbWVudC5jb25uZWN0KGZhdlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlIGZhdlVERElSZWdpc3RyeUZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZShmYXZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVRERJUmVnaXN0cnlGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2VURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVc2VyIGRlZmluZWQgVURESSBSZWdpc3RyeSBGb2xkZXIgTm9kZQotICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBmYXZVc2VyRGVmVURESUZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1VTRVJfREVGX1VERElfUkVHSVNUUklFU19GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2VXNlckRlZlVERElGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUgZmF2VXNlckRlZlVERElGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJOb2RlKGZhdlVzZXJEZWZVRERJRm9sZGVyRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgYWRkQ2hpbGQoZmF2VXNlckRlZlVERElGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2VXNlckRlZlVERElGb2xkZXJOb2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgZmF2VXNlckRlZlVERElGb2xkZXJFbGVtZW50LmluaXQoKEZhdm9yaXRlc01haW5FbGVtZW50KXRyZWVFbGVtZW50KTsKLQotICAgICAgICAvLyBDcmVhdGUgVURESSBCdXNpbmVzcyBGb2xkZXIgTm9kZQotICAgICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50IGZhdlVERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudChnZXRNZXNzYWdlKCJGQVZPUklURVNfVURESV9CVVNJTkVTU0VTX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZSBmYXZVRERJQnVzaW5lc3NGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlck5vZGUoZmF2VURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgYWRkQ2hpbGQoZmF2VURESUJ1c2luZXNzRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdlVERElCdXNpbmVzc0ZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50LmluaXQoKEZhdm9yaXRlc01haW5FbGVtZW50KXRyZWVFbGVtZW50KTsKLQotICAgICAgICAvLyBDcmVhdGUgVURESSBTZXJ2aWNlIEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudCBmYXZVRERJU2VydmljZUZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19VRERJX1NFUlZJQ0VfRk9MREVSX05PREUiKSwgdHJlZUVsZW1lbnQuZ2V0TW9kZWwoKSwgbm9kZU1hbmFnZXIpOwotICAgICAgICB0cmVlRWxlbWVudC5jb25uZWN0KGZhdlVERElTZXJ2aWNlRm9sZGVyRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlIGZhdlVERElTZXJ2aWNlRm9sZGVyTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUoZmF2VURESVNlcnZpY2VGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVRERJU2VydmljZUZvbGRlck5vZGUpOwotICAgICAgICBmYXZVRERJU2VydmljZUZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZVRERJU2VydmljZUZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVRERJIFNlcnZpY2UgSW50ZXJmYWNlIEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudCBmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19VRERJX1NFUlZJQ0VfSU5URVJGQUNFU19GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2VURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlIGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUoZmF2VURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUpOwotICAgICAgICBmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBXU0lMIEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50IGZhdldTSUxGb2xkZXJFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19XU0lMX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZXU0lMRm9sZGVyRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfRk9MREVSX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIEZhdm9yaXRlc1dTSUxGb2xkZXJOb2RlIGZhdldTSUxGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1dTSUxGb2xkZXJOb2RlKGZhdldTSUxGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZXU0lMRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdldTSUxGb2xkZXJOb2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgZmF2V1NJTEZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBXU0RMIFNlcnZpY2UgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50IGZhdldTRExTZXJ2aWNlRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2V1NETFNlcnZpY2VGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlck5vZGUgZmF2V1NETFNlcnZpY2VGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZShmYXZXU0RMU2VydmljZUZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdldTRExTZXJ2aWNlRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdldTRExTZXJ2aWNlRm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdldTRExTZXJ2aWNlRm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbXNnKSB7Ci0gICAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICByZXR1cm4gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZShtc2cpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzVkMGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb2xkZXJOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgZXh0ZW5kcyBGb2xkZXJOb2RlIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIEZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKSB7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXywgZmFsc2UpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjg3ZDY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc05hdmlnYXRvck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgZXh0ZW5kcyBOb2RlIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCwgU3RyaW5nIGltYWdlUGF0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgaW1hZ2VQYXRoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8saXNPcGVuXyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLCBmYWxzZSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNQZXJzcGVjdGl2ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU0OThmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNQZXJzcGVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc01haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBleHRlbmRzIFBlcnNwZWN0aXZlCi17Ci0gICAgcHJpdmF0ZSBCYXNpY01vZGVsIG1vZGVsXzsKLSAgICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgICBwcml2YXRlIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIHByaXZhdGUgU3RyaW5nIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBwcml2YXRlIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgICBwcml2YXRlIFN0cmluZyBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotCi0gICAgcHVibGljIEZhdm9yaXRlc1BlcnNwZWN0aXZlKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKCJmYXZvcml0ZXMiLGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGluaXRQZXJzcGVjdGl2ZShTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgICB7Ci0gICAgICAgIG1vZGVsXyA9IG5ldyBCYXNpY01vZGVsKCJGYXZvcml0ZXNNb2RlbCIpOwotICAgICAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZvcml0ZXNNYWluRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNNYWluRWxlbWVudChnZXRNZXNzYWdlKCJGQVZPUklURVNfTUFJTl9OT0RFIiksIG1vZGVsXywgY29udHJvbGxlcl8pOwotICAgICAgICBtb2RlbF8uc2V0Um9vdEVsZW1lbnQoZmF2b3JpdGVzTWFpbkVsZW1lbnQpOwotICAgICAgICBub2RlTWFuYWdlcl8gPSBuZXcgTm9kZU1hbmFnZXIoY29udHJvbGxlcl8pOwotICAgICAgICBGYXZvcml0ZXNNYWluTm9kZSBmYXZNYWluTm9kZSA9IG5ldyBGYXZvcml0ZXNNYWluTm9kZShmYXZvcml0ZXNNYWluRWxlbWVudCwgbm9kZU1hbmFnZXJfKTsKLSAgICAgICAgbm9kZU1hbmFnZXJfLnNldFJvb3ROb2RlKGZhdk1haW5Ob2RlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFN0YXJ0aW5nIGZyYW1lc2V0IHNpemVzLgotICAgICAgICBpZiAoIURpclV0aWxzLmlzUlRMKCkpCi0gICAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIzMCUsKiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gIiosMzAlIjsKLSAgICAgICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICAgICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSAiNzUlLCoiOwotICAgICAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187ICAgICAgICAKLSAgICB9Ci0KLSAgICBwdWJsaWMgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKSB7Ci0gICAgICAgIHJldHVybiBub2RlTWFuYWdlcl87Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFuZXNGaWxlKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RnJhbWVzZXRzRmlsZSgpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gImZhdk5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2UHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gImZhdlN0YXR1c0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2UHJvcGVydGllc0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICAgIHsKLSAgICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gICAgewotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICAgIHsKLSAgICAgIHJldHVybiBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICAgIHsKLSAgICAgIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gICAgewotICAgICAgcmV0dXJuIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICAgIHsKLSAgICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKQotICAgIHsKLSAgICAgIHJldHVybiBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gICAgewotICAgICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gICAgewotICAgICAgcmV0dXJuIFN3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbi5nZXRGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGZvckhpc3RvcnkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNmM2Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIsICJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1NldERlZmF1bHRWaWV3VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZWM0ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNldERlZmF1bHRWaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNTZXREZWZhdWx0Vmlld1Rvb2wgZXh0ZW5kcyBTZXREZWZhdWx0Vmlld1Rvb2wgewotICAgIHB1YmxpYyBGYXZvcml0ZXNTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgZmFsc2UpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzYxNTM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjIyZmNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlIGZhdm9yaXRlc1VERElCdXNpbmVzc05vZGUgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IExpc3RGYXZvcml0ZVVERElCdXNpbmVzc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX0JVU0lORVNTIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc05vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc05vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjOGEyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzc05vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCAiZmF2b3JpdGVzL2ltYWdlcy91ZGRpX2J1c2luZXNzX25vZGUuZ2lmIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IEZhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX0JVU0lORVNTX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElSZWdpc3RyeURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZjZjZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NjBhMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IHJlZ0VsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VQYXRoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5mb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShjYXRlZ29yaWVzRGlyZWN0b3J5LG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSxyZWdFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgY2F0ZWdvcnlEaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoY2F0ZWdvcmllc0RpcmVjdG9yeS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gY2F0ZWdvcnlGaWxlcyA9IGNhdGVnb3J5RGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeUZpbGVzICE9IG51bGwgJiYgY2F0ZWdvcnlGaWxlcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUGF0aCA9ICJmYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfY2F0X25vZGUuZ2lmIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUGF0aCA9ICJmYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfbm9kZS5naWYiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlIGZhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZShyZWdFbGVtZW50LCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxLCBpbWFnZVBhdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChmYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfUkVHSVNUUlkiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGYyODEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgsU3RyaW5nIGltYWdlUGF0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgaW1hZ2VQYXRoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfUkVHSVNUUllfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNGY0ZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTRkMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlIGZhdm9yaXRlc1VERElTZXJ2aWNlTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZU5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKGZhdm9yaXRlc1VERElTZXJ2aWNlTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0UiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjkyZTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50RGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Y2NjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUgZmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjg2Y2NjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsICJmYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9pbnRlcmZhY2Vfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIikpOwotICAgICAgICBuZXcgQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYWI3N2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX25vZGUuZ2lmIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9ERVRBSUxTIikpOwotICAgICAgICBuZXcgQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTU3MjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwdWJsaWMgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJmYzBlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZQotewotICBwdWJsaWMgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSkpCi0gICAgICAgIHsKLSAgICAgICAgICBUcmVlRWxlbWVudCByZWdFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICBTdHJpbmcgaW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZiI7Ci0gICAgICAgICAgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUgZmF2VXNlckRlZlVERElSZWdpc3RyeU5vZGUgPSBuZXcgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUocmVnRWxlbWVudCwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSwgaW1hZ2VQYXRoKTsKLSAgICAgICAgICBhZGRDaGlsZChmYXZVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUpKQotICAgICAgICB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9OT0RFKSkKLSAgICAgICAgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZIikpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpIHsKLSAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sIGZhbHNlKTsKLSAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjYxNzU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgsIFN0cmluZyBpbWFnZVBhdGgpCi0gIHsKLSAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgaW1hZ2VQYXRoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFVEFJTFMiKSk7Ci0gICAgbmV3IEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETERldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQwZTUyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETERldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1dTRExEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0RMRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmY0OGRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZSBmYXZvcml0ZXNXU0RMU2VydmljZU5vZGUgPSBuZXcgRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChmYXZvcml0ZXNXU0RMU2VydmljZU5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfV1NETF9TRVJWSUNFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNDE2YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMU2VydmljZU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgImZhdm9yaXRlcy9pbWFnZXMvd3NkbF9zZXJ2aWNlX25vZGUuZ2lmIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IEZhdm9yaXRlc1dTRExEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfV1NETF9ERVRBSUxTIikpOwotICAgICAgICBuZXcgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hUb29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIikpOwotICAgICAgICBuZXcgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfSU1QT1JUX1RPX0ZTIikpOwotICAgICAgICBuZXcgRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wodG9vbE1hbmFnZXJfLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIikpOwotICAgICAgICBuZXcgRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NJTERldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwMmI4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NJTERldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1dTSUxEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0lMRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmNDYxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbC5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzV1NJTE5vZGUgZmF2b3JpdGVzV1NJTE5vZGUgPSBuZXcgRmF2b3JpdGVzV1NJTE5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKGZhdm9yaXRlc1dTSUxOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlV1NJTFRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9XU0lMIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWYyZDE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNXU0lMTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsICJmYXZvcml0ZXMvaW1hZ2VzL3dzaWxfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzV1NJTERldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19XU0lMX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzFhOGZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElCdXNpbmVzc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElCdXNpbmVzc1ZpZXcuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjZDE1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIExpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlWaWV3LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWFmMjRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVmlldy5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0OWMwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBMaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VWaWV3LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiOGM5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVRvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwdWJsaWMgTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5Vmlldy5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVXU0RMU2VydmljZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmYyMDgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVXU0RMU2VydmljZVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0RMU2VydmljZVZpZXcuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTSUxUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVXU0lMVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzgzMjViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTSUxUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIExpc3RGYXZvcml0ZVdTSUxUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBMaXN0RmF2b3JpdGVXU0lMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0lMVmlldy5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvUmVtb3ZlRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvUmVtb3ZlRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzY3MmZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL1JlbW92ZUZhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuUmVtb3ZlRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFJlbW92ZUZhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLQotICAgIHB1YmxpYyBSZW1vdmVGYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0FjdGlvblRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQWN0aW9uVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNlZGQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQWN0aW9uVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBY3Rpb25Ub29sIGV4dGVuZHMgVG9vbAotewotICBwdWJsaWMgQWN0aW9uVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlTGluayxTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZUxpbmssU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGVuYWJsZWRJbWFnZUxpbmssaGlnaGxpZ2h0ZWRJbWFnZUxpbmssYWx0LFRvb2xUeXBlcy5BQ1RJT04pOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2M2Q0NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHVibGljIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsImltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIsImltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQnJlYWRDcnVtYi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9CcmVhZENydW1iLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0OTdjMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9CcmVhZENydW1iLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLS8vIEEgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgYSBicm93ZXIgYnJlYWRjcnVtYi4gRWFjaCBicmVhZGNydW1iIGVuY2Fwc3VsYXRlcwotLy8gYSBuYXZpZ2F0ZWQgVVJMLgotcHVibGljIGNsYXNzIEJyZWFkQ3J1bWIKLXsKLSAgcHJpdmF0ZSBpbnQgcGVyc3BlY3RpdmVJZF87Ci0gIHByaXZhdGUgU3RyaW5nIHVybF87Ci0KLSAgcHVibGljIEJyZWFkQ3J1bWIoaW50IHBlcnNwZWN0aXZlSWQsU3RyaW5nIHVybCkKLSAgewotICAgIHBlcnNwZWN0aXZlSWRfID0gcGVyc3BlY3RpdmVJZDsKLSAgICB1cmxfID0gdXJsOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBVUkwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnJlYWRjcnVtYi4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgVVJMLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVSTCgpCi0gIHsKLSAgICByZXR1cm4gdXJsXzsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgSUQgb2YgdGhlIHBlcnNwZWN0aXZlIHdoZXJlIHRoaXMgYnJlYWRjcnVtYiBiZWxvbmdzLgotICAqIEByZXR1cm4gaW50IFRoZSBwZXJzcGVjdGl2ZUlEIGFzIGRlZmluZWQgaW4gQWN0aW9uSW5wdXRzLgotICAqLwotICBwdWJsaWMgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlSWRfOwotICB9Ci0KLSAgLyoqCi0gICogVGVzdCBlcXVhbGl0eSBiZXR3ZWVuIHRoaXMgYnJlYWRjcnVtYiBhbmQgYW5vdGhlci4gQm90aCB0aGUgVVJMcyBhbmQgcGVyc3BlY3RpdmUKLSAgKiBJRHMgbXVzdCBiZSBlcXVhbCBmb3IgdHdvIGJyZWFkY3J1bWJzIHRvIGJlIGVxdWFsLgotICAqIEBwYXJhbSBCcmVhZENydW1iIEEgYnJlYWRjcnVtYi4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVGhlIHJlc3VsdCBvZiB0aGUgZXF1YWxpdHkgdGVzdC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKEJyZWFkQ3J1bWIgYikKLSAgewotICAgIHJldHVybiAoKHVybF8uZXF1YWxzKGIuZ2V0VVJMKCkpKSAmJiAocGVyc3BlY3RpdmVJZF8gPT0gYi5nZXRQZXJzcGVjdGl2ZUlkKCkpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Db250cm9sbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0NvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5Nzg3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0NvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBDb250cm9sbGVyIGV4dGVuZHMgTWVzc2FnZVByb3ZpZGVyCi17Ci0gIHByaXZhdGUgU3RyaW5nIHNlc3Npb25JZF87Ci0gIHByaXZhdGUgU3RyaW5nIHN0YXRlTG9jYXRpb25fOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25fOwotICBwcml2YXRlIFN0cmluZyBjb250ZXh0UGF0aF87Ci0gIHByaXZhdGUgaW50IGhpc3RvcnlEaXJlY3Rpb25fOwotICBwcml2YXRlIEhpc3RvcnkgaGlzdG9yeV87Ci0gIHByaXZhdGUgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmVfOwotICBwcml2YXRlIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rXzsKLSAgcHJpdmF0ZSBBY3Rpb25FbmdpbmUgYWN0aW9uRW5naW5lOwotICAKLSAgLy8gV1NETCBCcm93c2VyCi0gIHByaXZhdGUgaW50IHdzZGxUeXBlXzsKLQotICBwdWJsaWMgQ29udHJvbGxlcigpCi0gIHsKLSAgICBzdXBlcigiZXhwbG9yZXIiKTsKLSAgICBjb250ZXh0UGF0aF8gPSBudWxsOwotCXN0YXRlTG9jYXRpb25fID0gbnVsbDsKLSAgICBoaXN0b3J5XyA9IG5ldyBIaXN0b3J5KCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlXyA9IG5ldyBVRERJUGVyc3BlY3RpdmUodGhpcyk7Ci0gICAgd3NpbFBlcnNwZWN0aXZlXyA9IG5ldyBXU0lMUGVyc3BlY3RpdmUodGhpcyk7Ci0gICAgd3NkbFBlcnNwZWN0aXZlXyA9IG5ldyBXU0RMUGVyc3BlY3RpdmUodGhpcyk7Ci0gICAgZmF2b3JpdGVzUGVyc3BlY3RpdmVfID0gbmV3IEZhdm9yaXRlc1BlcnNwZWN0aXZlKHRoaXMpOwotICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwZXJzcGVjdGl2ZSB0byBVRERJLgotICAgIGN1cnJlbnRQZXJzcGVjdGl2ZV8gPSB1ZGRpUGVyc3BlY3RpdmVfOwotICAgIGhpc3RvcnlEaXJlY3Rpb25fID0gQWN0aW9uSW5wdXRzLkpVTVBfQkFDSzsKLSAgICB3c2RsVHlwZV8gPSBBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFOwotICAgIGlzUGVyc3BlY3RpdmVDb250ZW50QmxhbmtfID0gdHJ1ZTsKLSAgICBhY3Rpb25FbmdpbmUgPSBuZXcgQWN0aW9uRW5naW5lKHRoaXMpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdGF0ZUxvY2F0aW9uKFN0cmluZyBzdGF0ZUxvY2F0aW9uKQotICB7Ci0Jc3RhdGVMb2NhdGlvbl8gPSBzdGF0ZUxvY2F0aW9uOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pCi0gIHsKLQkgIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbl8gPSBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb247Ci0gIH0KLSAgCi0gIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIENvbnRyb2xsZXIgYmVhbiBpcyBpbnN0YW50aWF0ZWQuCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzZXRDb250ZXh0UGF0aChTdHJpbmcgY29udGV4dFBhdGgpCi0gIHsKLSAgICBpZiAoY29udGV4dFBhdGhfID09IG51bGwpCi0gICAgICBjb250ZXh0UGF0aF8gPSBjb250ZXh0UGF0aDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQYXRoV2l0aENvbnRleHQoU3RyaW5nIHJlbGF0aXZlUGF0aCkKLSAgewotICAgIGlmIChyZWxhdGl2ZVBhdGggPT0gbnVsbCkKLSAgICAgIHJldHVybiByZWxhdGl2ZVBhdGg7Ci0gICAgU3RyaW5nQnVmZmVyIHBhdGggPSBuZXcgU3RyaW5nQnVmZmVyKHJlbGF0aXZlUGF0aCk7Ci0gICAgaWYgKGNvbnRleHRQYXRoXyAhPSBudWxsKQotICAgICAgcGF0aC5pbnNlcnQoMCwnLycpLmluc2VydCgwLGNvbnRleHRQYXRoXyk7Ci0gICAgcmV0dXJuIHBhdGgudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2Vzc2lvbklkKCkKLSAgewotICAgIHJldHVybiBzZXNzaW9uSWRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENvbnRleHRQYXRoKCkKLSAgewotICAgIHJldHVybiBjb250ZXh0UGF0aF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSB7Ci0JcmV0dXJuIHN0YXRlTG9jYXRpb25fOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiAoKSB7Ci0JcmV0dXJuIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXQoU3RyaW5nIHNlc3Npb25JZCxTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbixTdHJpbmcgY29udGV4dFBhdGgpCi0gIHsKLSAgICBzZXNzaW9uSWRfID0gc2Vzc2lvbklkOwotICAgIHNldENvbnRleHRQYXRoKGNvbnRleHRQYXRoKTsKLSAgICB1ZGRpUGVyc3BlY3RpdmVfLmluaXRQZXJzcGVjdGl2ZShhcHBsaWNhdGlvbik7Ci0gICAgd3NpbFBlcnNwZWN0aXZlXy5pbml0UGVyc3BlY3RpdmUoYXBwbGljYXRpb24pOwotICAgIHdzZGxQZXJzcGVjdGl2ZV8uaW5pdFBlcnNwZWN0aXZlKGFwcGxpY2F0aW9uKTsKLSAgICBmYXZvcml0ZXNQZXJzcGVjdGl2ZV8uaW5pdFBlcnNwZWN0aXZlKGFwcGxpY2F0aW9uKTsKLSAgfQotCi0gIC8vIFNldHRlciBmb3IgdGhlIGN1cnJlbnQgcGVyc3BlY3RpdmUuCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEN1cnJlbnRQZXJzcGVjdGl2ZShpbnQgcGVyc3BlY3RpdmUpCi0gIHsKLSAgICBzd2l0Y2ggKHBlcnNwZWN0aXZlKQotICAgIHsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk6Ci0gICAgICAgIGN1cnJlbnRQZXJzcGVjdGl2ZV8gPSB1ZGRpUGVyc3BlY3RpdmVfOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUw6Ci0gICAgICAgIGN1cnJlbnRQZXJzcGVjdGl2ZV8gPSB3c2lsUGVyc3BlY3RpdmVfOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw6Ci0gICAgICAgIGN1cnJlbnRQZXJzcGVjdGl2ZV8gPSB3c2RsUGVyc3BlY3RpdmVfOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUzoKLSAgICAgICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlXzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLy8gR2V0dGVyIGZvciB0aGUgY3VycmVudCBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIFBlcnNwZWN0aXZlIGdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpCi0gIHsKLSAgICByZXR1cm4gY3VycmVudFBlcnNwZWN0aXZlXzsKLSAgfQotCi0gIC8vIEdldHRlciBmb3IgdGhlIFVEREkgcGVyc3BlY3RpdmUuCi0gIHB1YmxpYyBmaW5hbCBVRERJUGVyc3BlY3RpdmUgZ2V0VURESVBlcnNwZWN0aXZlKCkKLSAgewotICAgIHJldHVybiB1ZGRpUGVyc3BlY3RpdmVfOwotICB9Ci0KLSAgLy8gR2V0dGVyIGZvciB0aGUgV1NJTCBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIFdTSUxQZXJzcGVjdGl2ZSBnZXRXU0lMUGVyc3BlY3RpdmUoKQotICB7Ci0gICAgcmV0dXJuIHdzaWxQZXJzcGVjdGl2ZV87Ci0gIH0KLSAgCi0gIC8vIEdldHRlciBmb3IgdGhlIFdTREwgcGVyc3BlY3RpdmUuCi0gIHB1YmxpYyBmaW5hbCBXU0RMUGVyc3BlY3RpdmUgZ2V0V1NETFBlcnNwZWN0aXZlKCkKLSAgewotICAgIHJldHVybiB3c2RsUGVyc3BlY3RpdmVfOwotICB9Ci0KLSAgLy8gR2V0dGVyIGZvciB0aGUgRmF2b3JpdGVzIHBlcnNwZWN0aXZlLgotICBwdWJsaWMgZmluYWwgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKSB7Ci0gICAgcmV0dXJuIGZhdm9yaXRlc1BlcnNwZWN0aXZlXzsKLSAgfQotICAKLSAgLy8gR2V0dGVyIGZvciB0aGUgYWN0aW9uIGVuZ2luZQotICBwdWJsaWMgZmluYWwgQWN0aW9uRW5naW5lIGdldEFjdGlvbkVuZ2luZSgpIHsKLSAgICByZXR1cm4gYWN0aW9uRW5naW5lOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkVG9IaXN0b3J5KGludCBwZXJzcGVjdGl2ZUlkLFN0cmluZyB1cmwpCi0gIHsKLSAgICBpZiAodXJsICE9IG51bGwpCi0gICAgICByZXR1cm4gaGlzdG9yeV8uYWRkQnJlYWRDcnVtYihuZXcgQnJlYWRDcnVtYihwZXJzcGVjdGl2ZUlkLHVybCkpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFdyYXBwZXIgZm9yIG1vdmluZyBmb3J3YXJkIGluIHRoZSBoaXN0b3J5IGxpc3QgYW5kIG9idGFpbmluZyB0aGUgYnJlYWRjcnVtYi4KLSAgcHVibGljIGZpbmFsIEJyZWFkQ3J1bWIgZm9yd2FyZCgpCi0gIHsKLSAgICBoaXN0b3J5RGlyZWN0aW9uXyA9IEFjdGlvbklucHV0cy5KVU1QX0ZPUldBUkQ7Ci0gICAgcmV0dXJuIGhpc3RvcnlfLmZvcndhcmQoKTsKLSAgfQotCi0gIC8vIFdyYXBwZXIgZm9yIG1vdmluZyBiYWNrIGluIHRoZSBoaXN0b3J5IGxpc3QgYW5kIG9idGFpbmluZyB0aGUgYnJlYWRjcnVtYi4KLSAgcHVibGljIGZpbmFsIEJyZWFkQ3J1bWIgYmFjaygpCi0gIHsKLSAgICBoaXN0b3J5RGlyZWN0aW9uXyA9IEFjdGlvbklucHV0cy5KVU1QX0JBQ0s7Ci0gICAgcmV0dXJuIGhpc3RvcnlfLmJhY2soKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0SGlzdG9yeURpcmVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaGlzdG9yeURpcmVjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBwcm9jZXNzU3RhbGVCcmVhZENydW1iKCkKLSAgewotICAgIGhpc3RvcnlfLnJlbW92ZUN1cnJlbnRCcmVhZENydW1iKCk7Ci0gIH0KLSAgCi0gIC8vIFdTREwgQnJvd3NlcgotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRXU0RMVHlwZShpbnQgd3NkbFR5cGUpCi0gIHsKLSAgICB3c2RsVHlwZV8gPSB3c2RsVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0V1NETFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuaygpCi0gIHsKLSAgICByZXR1cm4gaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFua187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGVuYWJsZVBlcnNwZWN0aXZlQ29udGVudEJsYW5rKGJvb2xlYW4gaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuaykKLSAgewotICAgIGlzUGVyc3BlY3RpdmVDb250ZW50QmxhbmtfID0gaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuazsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgZHVtcEhpc3RvcnkoKQotICB7Ci0gICAgaGlzdG9yeV8uZHVtcCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmEzOTE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZvbGRlck5vZGUgZXh0ZW5kcyBOb2RlCi17Ci0gIHB1YmxpYyBGb2xkZXJOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJpbWFnZXMvZm9sZGVyX2Nsb3NlZC5naWYiKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3BlbkltYWdlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImltYWdlcy9mb2xkZXJfb3Blbi5naWYiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMmY0N2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb3JtVG9vbCBleHRlbmRzIFRvb2wgaW1wbGVtZW50cyBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgcHJvdGVjdGVkIEZvcm1Ub29sUHJvcGVydGllcyBmb3JtVG9vbFByb3BlcnRpZXNfOwotCi0gIHB1YmxpYyBGb3JtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlTGluayxTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZUxpbmssU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGVuYWJsZWRJbWFnZUxpbmssaGlnaGxpZ2h0ZWRJbWFnZUxpbmssYWx0LFRvb2xUeXBlcy5GT1JNKTsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfID0gbmV3IEZvcm1Ub29sUHJvcGVydGllcygpOwotICAgIGluaXREZWZhdWx0UHJvcGVydGllcygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIGZpbmFsIE9iamVjdCBnZXRQcm9wZXJ0eShPYmplY3Qga2V5KQotICB7Ci0gICAgcmV0dXJuIGZvcm1Ub29sUHJvcGVydGllc18uZ2V0UHJvcGVydHkoa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5KE9iamVjdCBrZXksT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy5zZXRQcm9wZXJ0eShrZXksdmFsdWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlUHJvcGVydHkoT2JqZWN0IGtleSkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18ucmVtb3ZlUHJvcGVydHkoa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyUHJvcGVydHlUYWJsZSgpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmNsZWFyUHJvcGVydHlUYWJsZSgpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgdXBkYXRlUHJvcGVydHlUYWJsZShIYXNodGFibGUgbmV3UHJvcGVydHlUYWJsZSkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18udXBkYXRlUHJvcGVydHlUYWJsZShuZXdQcm9wZXJ0eVRhYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5VGFibGUoSGFzaHRhYmxlIG5ld1Byb3BlcnR5VGFibGUpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLnNldFByb3BlcnR5VGFibGUobmV3UHJvcGVydHlUYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnRXJyb3IoT2JqZWN0IGlucHV0S2V5KQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy5mbGFnRXJyb3IoaW5wdXRLZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZmxhZ1Jvd0Vycm9yKE9iamVjdCBpbnB1dEtleSxpbnQgcm93TnVtYmVyKQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy5mbGFnUm93RXJyb3IoaW5wdXRLZXkscm93TnVtYmVyKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgZmxhZ1Jvd0Vycm9yKE9iamVjdCBpbnB1dEtleSxPYmplY3Qgcm93SWQpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmZsYWdSb3dFcnJvcihpbnB1dEtleSxyb3dJZCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhckVycm9ycygpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmNsZWFyRXJyb3JzKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0lucHV0VmFsaWQoT2JqZWN0IGlucHV0S2V5KQotICB7Ci0gICAgcmV0dXJuIGZvcm1Ub29sUHJvcGVydGllc18uaXNJbnB1dFZhbGlkKGlucHV0S2V5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksaW50IHJvd051bWJlcikKLSAgewotICAgIHJldHVybiBmb3JtVG9vbFByb3BlcnRpZXNfLmlzUm93SW5wdXRWYWxpZChpbnB1dEtleSxTdHJpbmcudmFsdWVPZihyb3dOdW1iZXIpKTsKLSAgfQotICAKLSAgLy8gVGhlIHJvdyBudW1iZXIgbWF5IGFsc28gYmUgcmVwcmVzZW50ZWQgYnkgYSB1bmlxdWUgb2JqZWN0IChlLmcuIFVVSUQpCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKQotICB7Ci0gICAgcmV0dXJuIGZvcm1Ub29sUHJvcGVydGllc18uaXNSb3dJbnB1dFZhbGlkKGlucHV0S2V5LHJvd0lkKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2xQcm9wZXJ0aWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwY2Y3OWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotcHVibGljIGNsYXNzIEZvcm1Ub29sUHJvcGVydGllcyBpbXBsZW1lbnRzIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBwcml2YXRlIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZXJyYW50VmFsdWVzXzsKLQotICBwdWJsaWMgRm9ybVRvb2xQcm9wZXJ0aWVzKCkKLSAgewotICAgIHByb3BlcnR5VGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGVycmFudFZhbHVlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgT2JqZWN0IGdldFByb3BlcnR5KE9iamVjdCBrZXkpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZV8uZ2V0KGtleSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQcm9wZXJ0eShPYmplY3Qga2V5LE9iamVjdCB2YWx1ZSkKLSAgewotICAgIHByb3BlcnR5VGFibGVfLnB1dChrZXksdmFsdWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlUHJvcGVydHkoT2JqZWN0IGtleSkKLSAgewotICAgIHByb3BlcnR5VGFibGVfLnJlbW92ZShrZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCkKLSAgewotICAgIHByb3BlcnR5VGFibGVfLmNsZWFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCB1cGRhdGVQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBuZXdQcm9wZXJ0eVRhYmxlKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IG5ld1Byb3BlcnR5VGFibGUua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChrZXksbmV3UHJvcGVydHlUYWJsZS5nZXQoa2V5KSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgbmV3UHJvcGVydHlUYWJsZSkKLSAgewotICAgIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICAgIHVwZGF0ZVByb3BlcnR5VGFibGUobmV3UHJvcGVydHlUYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnRXJyb3IoT2JqZWN0IGlucHV0S2V5KQotICB7Ci0gICAgaWYgKGlzSW5wdXRWYWxpZChpbnB1dEtleSkpCi0gICAgICBlcnJhbnRWYWx1ZXNfLnB1dChpbnB1dEtleSxCb29sZWFuLlRSVUUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZmxhZ1Jvd0Vycm9yKE9iamVjdCBpbnB1dEtleSxpbnQgcm93TnVtYmVyKQotICB7Ci0gICAgZmxhZ1Jvd0Vycm9yKGlucHV0S2V5LFN0cmluZy52YWx1ZU9mKHJvd051bWJlcikpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LE9iamVjdCByb3dJZCkKLSAgewotICAgIE9iamVjdCBlcnJvck9iamVjdCA9IGVycmFudFZhbHVlc18uZ2V0KGlucHV0S2V5KTsKLSAgICBIYXNodGFibGUgcm93SGFzaDsKLSAgICBpZiAoZXJyb3JPYmplY3QgaW5zdGFuY2VvZiBIYXNodGFibGUpCi0gICAgICByb3dIYXNoID0gKEhhc2h0YWJsZSllcnJvck9iamVjdDsKLSAgICBlbHNlCi0gICAgICByb3dIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHJvd0hhc2gucHV0KHJvd0lkLEJvb2xlYW4uVFJVRSk7Ci0gICAgZXJyYW50VmFsdWVzXy5wdXQoaW5wdXRLZXkscm93SGFzaCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyRXJyb3JzKCkKLSAgewotICAgIGVycmFudFZhbHVlc18uY2xlYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzSW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXkpCi0gIHsKLSAgICByZXR1cm4gKGVycmFudFZhbHVlc18uZ2V0KGlucHV0S2V5KSA9PSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksaW50IHJvd051bWJlcikKLSAgewotICAgIHJldHVybiBpc1Jvd0lucHV0VmFsaWQoaW5wdXRLZXksU3RyaW5nLnZhbHVlT2Yocm93TnVtYmVyKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKQotICB7Ci0gICAgSGFzaHRhYmxlIHJvd0hhc2ggPSAoSGFzaHRhYmxlKWVycmFudFZhbHVlc18uZ2V0KGlucHV0S2V5KTsKLSAgICBpZiAocm93SGFzaCA9PSBudWxsKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIChyb3dIYXNoLmdldChyb3dJZCkgPT0gbnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzA3NDc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1wdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICAvLyBHZXR0ZXIgYW5kIFNldHRlciBmb3IgYSBwcm9wZXJ0eS4KLSAgcHVibGljIGFic3RyYWN0IE9iamVjdCBnZXRQcm9wZXJ0eShPYmplY3Qga2V5KTsKLSAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UHJvcGVydHkoT2JqZWN0IGtleSxPYmplY3QgdmFsdWUpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZW1vdmVQcm9wZXJ0eShPYmplY3Qga2V5KTsKLQotICAvLyBQcm9wZXJ0eSB0YWJsZSBvcGVyYXRvcnMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB1cGRhdGVQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlKTsKLSAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgcHJvcGVydHlUYWJsZSk7Ci0KLSAgLy8gRXJyb3IgaGFuZGxpbmcuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZsYWdFcnJvcihPYmplY3QgaW5wdXRLZXkpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LGludCByb3dOdW1iZXIpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LE9iamVjdCByb3dJZCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNsZWFyRXJyb3JzKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzSW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXkpOwotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1Jvd0lucHV0VmFsaWQoT2JqZWN0IGlucHV0S2V5LGludCByb3dOdW1iZXIpOwotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1Jvd0lucHV0VmFsaWQoT2JqZWN0IGlucHV0S2V5LE9iamVjdCByb3dJZCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0hpc3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSGlzdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODAyZDQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSGlzdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLy8gQSBjbGFzcyByZXByZXNlbnRpbmcgYSBWZWN0b3Igb2YgYnJlYWRjcnVtYnMuIEEgcG9zaXRpb24gaW5kZXggaXMgdXNlZAotLy8gdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgZGF0YSBzdHJ1Y3R1cmUuCi1wdWJsaWMgY2xhc3MgSGlzdG9yeQotewotICBwcml2YXRlIFZlY3RvciBpdGVtc187Ci0gIHByaXZhdGUgaW50IHBvc2l0aW9uXzsKLQotICBwdWJsaWMgSGlzdG9yeSgpCi0gIHsKLSAgICBpdGVtc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgcG9zaXRpb25fID0gLTE7Ci0gIH0KLQotICAvLyBBZGQgYSBuZXcgYnJlYWRjcnVtYiB0byB0aGUgaGlzdG9yeSBsaXN0LiBXaGVuIGFkZGluZyBhIG5ldyBicmVhZGNydW1iCi0gIC8vIHdpdGhpbiB0aGUgY3VycmVudCBsaXN0LCBhbGwgYnJlYWRjcnVtYnMgYWZ0ZXIgdGhlIG5ld2x5IGFkZGVkIG9uZSBhcmUKLSAgLy8gcmVtb3ZlZC4KLSAgcHVibGljIGJvb2xlYW4gYWRkQnJlYWRDcnVtYihCcmVhZENydW1iIGIpCi0gIHsKLSAgICBpbnQgbnVtYmVyT2ZJdGVtcyA9IGl0ZW1zXy5zaXplKCk7Ci0gICAgaWYgKG51bWJlck9mSXRlbXMgPT0gMCkKLSAgICB7Ci0gICAgICBwb3NpdGlvbl8rKzsKLSAgICAgIGl0ZW1zXy5hZGRFbGVtZW50KGIpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBCcmVhZENydW1iIGN1cnJlbnRCcmVhZENydW1iID0gKEJyZWFkQ3J1bWIpaXRlbXNfLmVsZW1lbnRBdChwb3NpdGlvbl8pOwotICAgICAgaWYgKCFjdXJyZW50QnJlYWRDcnVtYi5lcXVhbHMoYikpCi0gICAgICB7Ci0gICAgICAgIHBvc2l0aW9uXysrOwotICAgICAgICBpdGVtc18uaW5zZXJ0RWxlbWVudEF0KGIscG9zaXRpb25fKTsKLSAgICAgICAgZm9yIChpbnQgaT1pdGVtc18uc2l6ZSgpLTE7aT5wb3NpdGlvbl87aS0tKQotICAgICAgICAgIGl0ZW1zXy5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBNb3ZlIGZvcndhcmQgd2l0aGluIHRoZSBoaXN0b3J5IGxpc3QgYW5kIG9idGFpbiB0aGUgYnJlYWRjcnVtYi4KLSAgcHVibGljIEJyZWFkQ3J1bWIgZm9yd2FyZCgpCi0gIHsKLSAgICBpZiAocG9zaXRpb25fIDwgaXRlbXNfLnNpemUoKS0xKQotICAgIHsKLSAgICAgIHBvc2l0aW9uXysrOwotICAgICAgQnJlYWRDcnVtYiBiID0gKEJyZWFkQ3J1bWIpaXRlbXNfLmVsZW1lbnRBdChwb3NpdGlvbl8pOwotICAgICAgcmV0dXJuIGI7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLy8gTW92ZSBiYWNrIHdpdGhpbiB0aGUgaGlzdG9yeSBsaXN0IGFuZCBvYnRhaW4gdGhlIGJyZWFkY3J1bWIuCi0gIHB1YmxpYyBCcmVhZENydW1iIGJhY2soKQotICB7Ci0gICAgaWYgKHBvc2l0aW9uXyA+IDApCi0gICAgewotICAgICAgcG9zaXRpb25fLS07Ci0gICAgICBCcmVhZENydW1iIGIgPSAoQnJlYWRDcnVtYilpdGVtc18uZWxlbWVudEF0KHBvc2l0aW9uXyk7Ci0gICAgICByZXR1cm4gYjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVDdXJyZW50QnJlYWRDcnVtYigpCi0gIHsKLSAgICBpdGVtc18ucmVtb3ZlRWxlbWVudEF0KHBvc2l0aW9uXyk7Ci0gICAgaWYgKHBvc2l0aW9uXyA+IGl0ZW1zXy5zaXplKCktMSkKLSAgICAgIHBvc2l0aW9uXy0tOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkdW1wKCkKLSAgewotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1zXy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIGl0ZW1zXy5lbGVtZW50QXQoaSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ltcG9ydFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzkxYmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2ltcG9ydF9mc19lbmFibGVkLmdpZiIsICJpbWFnZXMvaW1wb3J0X2ZzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9JbXBvcnRUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhjM2VlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wb3J0VG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBJbXBvcnRUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9lbmFibGVkLmdpZiIsICJpbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaE9wdGlvbnNNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaE9wdGlvbnNNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMjViODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9MYXVuY2hPcHRpb25zTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIExhdW5jaE9wdGlvbnNNYW5hZ2VyCi17Ci0gIHByaXZhdGUgc3RhdGljIExhdW5jaE9wdGlvbnNNYW5hZ2VyIGluc3RhbmNlXzsKLQotICBwcml2YXRlIEhhc2h0YWJsZSBvcHRpb25zVGFibGVfOwotCi0gIHByaXZhdGUgTGF1bmNoT3B0aW9uc01hbmFnZXIoKQotICB7Ci0gICAgb3B0aW9uc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGF1bmNoT3B0aW9uc01hbmFnZXIgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgICAgaW5zdGFuY2VfID0gbmV3IExhdW5jaE9wdGlvbnNNYW5hZ2VyKCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYW5hZ2UoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlLCBTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgIG1hbmFnZVNlc3Npb24oa2V5LCAoU3RyaW5nKXZhbHVlLCBhcHBsaWNhdGlvbik7Ci0gICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBIYXNodGFibGUpCi0gICAgICBtYW5hZ2VPcHRpb25zKGtleSwgKEhhc2h0YWJsZSl2YWx1ZSwgYXBwbGljYXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG1hbmFnZVNlc3Npb24oU3RyaW5nIGtleSwgU3RyaW5nIHNlc3Npb25JZCwgU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBPYmplY3Qgb2JqID0gb3B0aW9uc1RhYmxlXy5yZW1vdmUoa2V5KTsKLSAgICBpZiAob2JqICE9IG51bGwgJiYgKG9iaiBpbnN0YW5jZW9mIEhhc2h0YWJsZSkpCi0gICAgICBsb2FkT3B0aW9ucyhzZXNzaW9uSWQsIChIYXNodGFibGUpb2JqLCBhcHBsaWNhdGlvbik7Ci0gICAgZWxzZQotICAgICAgb3B0aW9uc1RhYmxlXy5wdXQoa2V5LCBzZXNzaW9uSWQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG1hbmFnZU9wdGlvbnMoU3RyaW5nIGtleSwgSGFzaHRhYmxlIG9wdGlvbnMsIFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0gICAgT2JqZWN0IG9iaiA9IG9wdGlvbnNUYWJsZV8ucmVtb3ZlKGtleSk7Ci0gICAgaWYgKG9iaiAhPSBudWxsICYmIChvYmogaW5zdGFuY2VvZiBTdHJpbmcpKQotICAgICAgbG9hZE9wdGlvbnMoKFN0cmluZylvYmosIG9wdGlvbnMsIGFwcGxpY2F0aW9uKTsKLSAgICBlbHNlCi0gICAgICBvcHRpb25zVGFibGVfLnB1dChrZXksIG9wdGlvbnMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvYWRPcHRpb25zKFN0cmluZyBzZXNzaW9uSWQsIEhhc2h0YWJsZSBvcHRpb25zLCBTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotICAgIEh0dHBTZXNzaW9uIGh0dHBTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgIGlmIChodHRwU2Vzc2lvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWh0dHBTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotCSAgU3RyaW5nW10gc3RhdGVMb2NhdGlvbnMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5TVEFURV9MT0NBVElPTik7Ci0JICBTdHJpbmdbXSBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25zID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04pOwotICAgICAgU3RyaW5nW10gaW5xdWlyeVVSTHMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5JTlFVSVJZX1VSTCk7Ci0gICAgICBTdHJpbmdbXSBwdWJsaXNoVVJMcyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlBVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZ1tdIHNlcnZpY2VOYW1lcyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlNFUlZJQ0VfTkFNRSk7Ci0gICAgICBTdHJpbmdbXSBzZXJ2aWNlS2V5cyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlNFUlZJQ0VfS0VZKTsKLSAgICAgIFN0cmluZ1tdIHdzZGxVUkxzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuV1NETF9VUkwpOwotICAgICAgU3RyaW5nW10gZW5kcG9pbnRzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuV0VCX1NFUlZJQ0VfRU5EUE9JTlQpOwotICAgICAgU3RyaW5nW10gc2VydmljZVFOYW1lU3RyaW5ncyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlNFUlZJQ0VfUU5BTUVfU1RSSU5HKTsKLSAgICAgIFN0cmluZ1tdIGJpbmRpbmdOYW1lU3RyaW5ncyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLkJJTkRJTkdfTkFNRV9TVFJJTkcpOwotCSAgU3RyaW5nIHN0YXRlTG9jYXRpb24gPSAoc3RhdGVMb2NhdGlvbnMgPT0gbnVsbCB8fCBzdGF0ZUxvY2F0aW9ucy5sZW5ndGggPT0gMCkgPyBudWxsIDogc3RhdGVMb2NhdGlvbnNbMF07Ci0JICBjb250cm9sbGVyLnNldFN0YXRlTG9jYXRpb24oc3RhdGVMb2NhdGlvbik7Ci0JICBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gKGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbnMgPT0gbnVsbCB8fCBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25zLmxlbmd0aCA9PSAwKSA/IG51bGwgOiBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25zWzBdOwotCSAgY29udHJvbGxlci5zZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKTsKLSAgICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICAgdWRkaVBlcnNwZWN0aXZlLnByZWxvYWRVRERJUmVnaXN0cmllcyhpbnF1aXJ5VVJMcywgcHVibGlzaFVSTHMpOwotICAgICAgdWRkaVBlcnNwZWN0aXZlLnByZWxvYWRTZXJ2aWNlcyhpbnF1aXJ5VVJMcyxzZXJ2aWNlTmFtZXMsc2VydmljZUtleXMpOwotICAgICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUucHJlbG9hZFdTREwod3NkbFVSTHMpOwotICAgICAgd3NkbFBlcnNwZWN0aXZlLnByZWxvYWRFbmRwb2ludHMod3NkbFVSTHMsIGVuZHBvaW50cyk7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUucHJlc2VsZWN0U2VydmljZU9yQmluZGluZyh3c2RsVVJMcyxzZXJ2aWNlUU5hbWVTdHJpbmdzLGJpbmRpbmdOYW1lU3RyaW5ncyk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YjNkM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9lbmFibGVkLmdpZiIsICJpbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlQnVuZGxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VCdW5kbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhNWQ1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VCdW5kbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotLyoqCi0qIEFuIG1lc3NhZ2UgYnVuZGxlIGlzIGEgY29sbGVjdGlvbiBvZiBtZXNzYWdlcyBkcmF3biBmcm9tIHNvbWUKLSogc2V0IG9mIHByb3BlcnRpZXMuCi0qLwotcHVibGljIGNsYXNzIE1lc3NhZ2VCdW5kbGUKLXsKLSAgcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSBmUmVzb3VyY2VCdW5kbGU7Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyBNZXNzYWdlQnVuZGxlIGZyb20gdGhlIGdpdmVuIFJlc291cmNlQnVuZGxlLgotICAqLwotICBwdWJsaWMgTWVzc2FnZUJ1bmRsZSAoIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlICkKLSAgewotICAgIGZSZXNvdXJjZUJ1bmRsZSA9IHJlc291cmNlQnVuZGxlOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1lc3NhZ2VJZC4KLSAgKiBAcGFyYW0gbWVzc2FnZUlkIFRoZSBtZXNzYWdlIElELgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBtZXNzYWdlIHRleHQuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBtZXNzYWdlSWQgKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIGZSZXNvdXJjZUJ1bmRsZS5nZXRTdHJpbmcobWVzc2FnZUlkKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBtZXNzYWdlSWQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1lc3NhZ2VJZC4KLSAgKiBAcGFyYW0gbWVzc2FnZUlkIFRoZSBtZXNzYWdlIElELgotICAqIEBwYXJhbSBzdWIgQSBzdWJzdGl0dXRpb24gdmFsdWUgZm9yICIlMSIgaW4gdGhlIG1lc3NhZ2UuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG1lc3NhZ2UgdGV4dC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIG1lc3NhZ2VJZCwgU3RyaW5nIHN1YiApCi0gIHsKLSAgICBTdHJpbmdbXSBzID0ge3N1Yn07Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlkLHMpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1lc3NhZ2VJZC4KLSAgKiBAcGFyYW0gbWVzc2FnZUlkIFRoZSBtZXNzYWdlIElELgotICAqIEBwYXJhbSBzdWIgU3Vic3RpdHV0aW9uIHZhbHVlcyBmb3IgIiUxLi4lbiIgKHN1YlswXS4uc3ViW24tMV0pIGluCi0gICogdGhlIG1lc3NhZ2UuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG1lc3NhZ2UgdGV4dC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIG1lc3NhZ2VJZCwgU3RyaW5nW10gc3ViICkKLSAgewotICAgIFN0cmluZyBtID0gZ2V0TWVzc2FnZShtZXNzYWdlSWQpOwotICAgIGludCBsZW4gPSBtLmxlbmd0aCgpOwotICAgIGludCBtYXggPSBzdWIubGVuZ3RoOwotICAgIFN0cmluZ0J1ZmZlciBiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGludCBwb3MgPSAwOwotICAgIHdoaWxlIChwb3MgPj0gMCkKLSAgICB7Ci0gICAgICBpbnQgcGN0ID0gbS5pbmRleE9mKCclJyxwb3MpOwotICAgICAgaWYgKHBjdCA+PSAwKQotICAgICAgewotICAgICAgICBiLmFwcGVuZChtLnN1YnN0cmluZyhwb3MscGN0KSk7Ci0gICAgICAgIHBvcyA9IHBjdCArIDE7Ci0gICAgICAgIGlmIChwb3MgPCBsZW4pCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyIGQgPSBtLmNoYXJBdChwb3MpOwotICAgICAgICAgIGlmIChDaGFyYWN0ZXIuaXNEaWdpdChkKSAmJiBkICE9ICcwJykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdiA9IEludGVnZXIucGFyc2VJbnQobmV3IENoYXJhY3RlcihkKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGlmICh2IDw9IG1heCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYi5hcHBlbmQoc3ViW3YtMV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBiLmFwcGVuZCgnPycpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBiLmFwcGVuZCgnJScpOwotICAgICAgICAgICAgYi5hcHBlbmQoZCk7Ci0gICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYi5hcHBlbmQoJyUnKTsKLSAgICAgICAgICBwb3MgPSAtMTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiLmFwcGVuZChtLnN1YnN0cmluZyhwb3MpKTsKLSAgICAgICAgcG9zID0gLTE7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKQotICB7Ci0gICAgcmV0dXJuIGZSZXNvdXJjZUJ1bmRsZTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1MmU0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLS8vIEEgQ2xhc3Mgd2hpY2ggcHJvdmlkZXMgU3RyaW5nIG1lc3NhZ2VzLgotcHVibGljIGNsYXNzIE1lc3NhZ2VQcm92aWRlcgotewotICBwcm90ZWN0ZWQgTWVzc2FnZUJ1bmRsZSBtZXNzYWdlQnVuZGxlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZVByb3ZpZGVyTmFtZV87Ci0KLSAgcHVibGljIE1lc3NhZ2VQcm92aWRlcihTdHJpbmcgbWVzc2FnZUJ1bmRsZUZpbGVOYW1lKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gTG9hZCB0aGUgbWVzc2FnZSBidW5kbGUgZnJvbSB0aGUgV0VCLUlORlxjbGFzc2VzIHN1YmRpcmVjdG9yeS4KLSAgICAgIG1lc3NhZ2VQcm92aWRlck5hbWVfID0gbWVzc2FnZUJ1bmRsZUZpbGVOYW1lOwotICAgICAgbWVzc2FnZUJ1bmRsZV8gPSBuZXcgTWVzc2FnZUJ1bmRsZShSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUobWVzc2FnZUJ1bmRsZUZpbGVOYW1lKSk7Ci0gICAgfQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCVN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IGxvYWQgIittZXNzYWdlQnVuZGxlRmlsZU5hbWUpOwotICAgIAllLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZUlkKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VCdW5kbGVfLmdldE1lc3NhZ2UobWVzc2FnZUlkKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZUlkLFN0cmluZyBzdWIpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUJ1bmRsZV8uZ2V0TWVzc2FnZShtZXNzYWdlSWQsc3ViKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZUlkLFN0cmluZ1tdIHN1YikKLSAgewotICAgIHJldHVybiBtZXNzYWdlQnVuZGxlXy5nZXRNZXNzYWdlKG1lc3NhZ2VJZCxzdWIpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VQcm92aWRlck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VQcm92aWRlck5hbWVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VRdWV1ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlUXVldWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM4MDhlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VRdWV1ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVF1ZXVlCi17Ci0gIHByb3RlY3RlZCBWZWN0b3IgbWVzc2FnZUxpc3RfOwotCi0gIHB1YmxpYyBNZXNzYWdlUXVldWUoKQotICB7Ci0gICAgbWVzc2FnZUxpc3RfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIG1lc3NhZ2VMaXN0Xy5hZGRFbGVtZW50KG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlc0Zyb21MaXN0KCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBtZXNzYWdlcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgIGlmIChtZXNzYWdlTGlzdF8uc2l6ZSgpPT0wKQotICAgICAgcmV0dXJuICIiOwotCi0gICAgRW51bWVyYXRpb24gZSA9IG1lc3NhZ2VMaXN0Xy5lbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyB0aGlzTWVzc2FnZSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAgICAgbWVzc2FnZXMuYXBwZW5kKHRoaXNNZXNzYWdlKTsKLSAgICAgIG1lc3NhZ2VzLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIH0KLSAgICBtZXNzYWdlTGlzdF8ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICByZXR1cm4gbWVzc2FnZXMudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ob2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJhNTNiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAzMjQgICAxODY0NTYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTm9kZQotewotICBwcm90ZWN0ZWQgVHJlZUVsZW1lbnQgZWxlbWVudF87Ci0gIHByb3RlY3RlZCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIHByb3RlY3RlZCBpbnQgbm9kZUlkXzsKLSAgcHJvdGVjdGVkIGludCBub2RlRGVwdGhfOwotICBwcm90ZWN0ZWQgU3RyaW5nIGltYWdlUGF0aF87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzT3Blbl87Ci0gIHByb3RlY3RlZCBWZWN0b3IgY2hpbGROb2Rlc187Ci0gIHByb3RlY3RlZCBUb29sTWFuYWdlciB0b29sTWFuYWdlcl87Ci0gIHByb3RlY3RlZCBOb2RlIHBhcmVudF87Ci0gIHByaXZhdGUgU3RyaW5nIGFuY2hvck5hbWVfOwotICBwcml2YXRlIGludCB2aWV3SWRfOwotCi0gIHB1YmxpYyBOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgZWxlbWVudF8gPSBlbGVtZW50OwotICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGVNYW5hZ2VyOwotICAgIG5vZGVJZF8gPSBub2RlTWFuYWdlci5hZGRUb05vZGVUYWJsZSh0aGlzKTsKLSAgICBub2RlRGVwdGhfID0gbm9kZURlcHRoOwotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgaWYgKGltYWdlUGF0aCA9PSBudWxsKQotICAgICAgaW1hZ2VQYXRoXyA9IGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfU1BBQ0UpOwotICAgIGVsc2UKLSAgICAgIGltYWdlUGF0aF8gPSBpbWFnZVBhdGg7Ci0gICAgaXNPcGVuXyA9IHRydWU7Ci0gICAgY2hpbGROb2Rlc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgdG9vbE1hbmFnZXJfID0gbmV3IFRvb2xNYW5hZ2VyKHRoaXMpOwotICAgIGluaXRUb29scygpOwotICAgIGFuY2hvck5hbWVfID0gKG5ldyBTdHJpbmdCdWZmZXIoImFjdGlvbiIpKS5hcHBlbmQobm9kZUlkXykudG9TdHJpbmcoKTsKLSAgICBwYXJlbnRfID0gbnVsbDsKLSAgICB2aWV3SWRfID0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgVHJlZUVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KLSAgKiBAcmV0dXJuIFRyZWVFbGVtZW50IFRoZSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCi0gICovCi0gIHB1YmxpYyBUcmVlRWxlbWVudCBnZXRUcmVlRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudF87Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBub2RlLgotICAqIEByZXR1cm4gU3RyaW5nCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Tm9kZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnRfLmdldE5hbWUoKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIE5vZGVNYW5hZ2VyIG1hbmFnaW5nIHRoaXMgbm9kZS4KLSAgKiBAcmV0dXJuIE5vZGVNYW5hZ2VyCi0gICovCi0gIHB1YmxpYyBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gbm9kZU1hbmFnZXJfOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgaWQgb2YgdGhpcyBub2RlLgotICAqIEByZXR1cm4gaW50Ci0gICovCi0gIHB1YmxpYyBpbnQgZ2V0Tm9kZUlkKCkKLSAgewotICAgIHJldHVybiBub2RlSWRfOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZGVwdGggaW4gdGhlIHRyZWUgb2YgdGhpcyBub2RlIHJlbGF0aXZlIHRvIHRoZSByb290IG5vZGUKLSAgKiBAcmV0dXJuIGludAotICAqLwotICBwdWJsaWMgaW50IGdldE5vZGVEZXB0aCgpCi0gIHsKLSAgICByZXR1cm4gbm9kZURlcHRoXzsKLSAgfQotCi0gIC8qKgotICAqIFNldCB0aGUgcGF0aCBvZiB0aGUgaW1hZ2UgcmVwcmVzZW50aW5nIHRoaXMgY2xhc3Mgb2YgTm9kZS4KLSAgKiBAcGFyYW0gU3RyaW5nIFRoZSBwYXRoLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbWFnZVBhdGgoU3RyaW5nIHBhdGgpCi0gIHsKLSAgICBpbWFnZVBhdGhfID0gcGF0aDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlIGFyZSB2aXNpYmxlLiBSZXR1cm5zIGZhbHNlCi0gICogaWYgdGhleSBhcmUgbm90LgotICAqIEByZXR1cm4gYm9vbGVhbgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc09wZW4oKQotICB7Ci0gICAgcmV0dXJuIGlzT3Blbl87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1Zpc2libGUoKQotICB7Ci0gICAgTm9kZSBwYXJlbnROb2RlID0gcGFyZW50XzsKLSAgICB3aGlsZSAocGFyZW50Tm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghcGFyZW50Tm9kZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIG5vZGUncyBjaGlsZHJlbiB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgotICAqIFVwZGF0ZXMgdGhlIE5vZGVNYW5hZ2VyJ3MgcmVjb3JkIG9mIHRoZSBtYXhpbXVtIGRlcHRoIHZpc2libGUgaW4gdGhlIHRyZWUuCi0gICogQHBhcmFtIGJvb2xlYW4KLSAgKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oYm9vbGVhbiBvcGVuKQotICB7Ci0gICAgaXNPcGVuXyA9IG9wZW47Ci0gICAgbm9kZU1hbmFnZXJfLnVwZGF0ZU1heERlcHRoVmlzaWJsZSgpOwotICB9Ci0KLSAgLyoqCi0gICogR2V0cyB0aGUgbWF4aW11bSBkZXB0aCBkaXNwbGF5ZWQgaW4gdGhpcyBub2RlJ3MgYnJhbmNoIG9mIHRoZSB0cmVlCi0gICogVXNlZCBieSBOb2RlTWFuYWdlciBmb3IgaHRtbCBkaXNwbGF5IHB1cnBvc2VzLgotICAqIEByZXR1cm4gaW50Ci0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TWF4RGVwdGhWaXNpYmxlKCkKLSAgewotICAgIGlmICghaXNPcGVuXykKLSAgICAgIHJldHVybiBub2RlRGVwdGhfOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgY3VycmVudERlcHRoID0gbm9kZURlcHRoXzsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSBjaGlsZE5vZGVzXy5lbGVtZW50cygpOwotICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgdGhpc05vZGUgPSAoTm9kZSllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGludCBkZXB0aCA9IHRoaXNOb2RlLmdldE1heERlcHRoVmlzaWJsZSgpOwotICAgICAgICBpZiAoZGVwdGg+Y3VycmVudERlcHRoKQotICAgICAgICAgIGN1cnJlbnREZXB0aD1kZXB0aDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBjdXJyZW50RGVwdGg7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UGFyZW50KE5vZGUgbm9kZSkKLSAgewotICAgIHBhcmVudF8gPSBub2RlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGUgZ2V0UGFyZW50KCkKLSAgewotICAgIHJldHVybiBwYXJlbnRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Vmlld0lkKGludCB2aWV3SWQpCi0gIHsKLSAgICB2aWV3SWRfID0gdmlld0lkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRWaWV3SWQoKQotICB7Ci0gICAgcmV0dXJuIHZpZXdJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFZpZXdUb29sSWQoKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyID0gZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgaWYgKHZpZXdUb29sTWFuYWdlciAhPSBudWxsKQotICAgICAgcmV0dXJuIHZpZXdUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2xJZCgpOwotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUOwotICB9Ci0KLSAgLyoqCi0gICogQWRkcyB0aGUgc3BlY2lmaWVkIG5vZGUgYXMgYSBjaGlsZCBvZiB0aGlzIG5vZGUuCi0gICogQHBhcmFtIE5vZGUgVGhlIGNoaWxkIGJlaW5nIGFkZGVkLgotICAqIEByZXR1cm4gYm9vbGVhbiBBbHdheXMgdHJ1ZS4KLSAgKi8KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkQ2hpbGQoTm9kZSBjaGlsZE5vZGUpCi0gIHsKLSAgICBjaGlsZE5vZGUuc2V0UGFyZW50KHRoaXMpOwotICAgIGNoaWxkTm9kZXNfLmFkZEVsZW1lbnQoY2hpbGROb2RlKTsKLSAgICBub2RlTWFuYWdlcl8udXBkYXRlTWF4RGVwdGhWaXNpYmxlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUuIElmIHRoaXMgbm9kZSBoYXMgbm8gY2hpbGRyZW4sIGFuCi0gICogZW1wdHkgdmVjdG9yIGlzIHJldHVybmVkLgotICAqIEByZXR1cm4gVmVjdG9yCi0gICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0Q2hpbGROb2RlcygpCi0gIHsKLSAgICByZXR1cm4gY2hpbGROb2Rlc187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRDaGlsZE5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBjaGlsZE5vZGVzXy5lbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIE5vZGUgcHJlc2VudE5vZGUgPSAoTm9kZSllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAocHJlc2VudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSA9PSBlbGVtZW50KQotICAgICAgICByZXR1cm4gcHJlc2VudE5vZGU7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlQ2hpbGROb2Rlcyhib29sZWFuIGlzRW50cnkpCi0gIHsKLSAgICBpbnQgbnVtYmVyT2ZDaGlsZE5vZGVzID0gY2hpbGROb2Rlc18uc2l6ZSgpOwotICAgIGZvciAoaW50IGk9bnVtYmVyT2ZDaGlsZE5vZGVzLTE7aT49MDtpLS0pCi0gICAgewotICAgICAgTm9kZSBjaGlsZE5vZGUgPSAoTm9kZSljaGlsZE5vZGVzXy5lbGVtZW50QXQoaSk7Ci0gICAgICBjaGlsZE5vZGUucmVtb3ZlQ2hpbGROb2RlcyhmYWxzZSk7Ci0gICAgICBub2RlTWFuYWdlcl8ucmVtb3ZlRnJvbU5vZGVUYWJsZShjaGlsZE5vZGUuZ2V0Tm9kZUlkKCkpOwotICAgIH0KLSAgICBpZiAobnVtYmVyT2ZDaGlsZE5vZGVzID4gMCkKLSAgICB7Ci0gICAgICBjaGlsZE5vZGVzXy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgaWYgKGlzRW50cnkpCi0gICAgICAgIG5vZGVNYW5hZ2VyXy51cGRhdGVNYXhEZXB0aFZpc2libGUoKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiByZW1vdmVDaGlsZE5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIE5vZGUgY2hpbGROb2RlID0gZ2V0Q2hpbGROb2RlKGVsZW1lbnQpOwotICAgIGlmIChjaGlsZE5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICBpZiAobm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZUlkKCkgPT0gY2hpbGROb2RlSWQpCi0gICAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChub2RlSWRfKTsKLSAgICAgIGNoaWxkTm9kZXNfLnJlbW92ZUVsZW1lbnQoY2hpbGROb2RlKTsKLSAgICAgIG5vZGVNYW5hZ2VyXy5yZW1vdmVGcm9tTm9kZVRhYmxlKGNoaWxkTm9kZUlkKTsKLSAgICAgIG5vZGVNYW5hZ2VyXy51cGRhdGVNYXhEZXB0aFZpc2libGUoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIEhUTUwgYW5jaG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG5hbWUgb2YgdGhlIGFuY2hvci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBbmNob3JOYW1lKCkKLSAgewotICAgIHJldHVybiBhbmNob3JOYW1lXzsKLSAgfQotCi0gIHB1YmxpYyBUb29sTWFuYWdlciBnZXRUb29sTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gdG9vbE1hbmFnZXJfOwotICB9Ci0KLSAgcHVibGljIFRvb2xNYW5hZ2VyIGdldFZpZXdUb29sTWFuYWdlcigpCi0gIHsKLSAgICBpZiAodmlld0lkXyAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgewotICAgICAgVmlld1Rvb2wgdmlld1Rvb2wgPSAoVmlld1Rvb2wpdG9vbE1hbmFnZXJfLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgcmV0dXJuIHZpZXdUb29sLmdldFRvb2xNYW5hZ2VyKHZpZXdJZF8pOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFRvb2xNYW5hZ2VyIGdldEN1cnJlbnRUb29sTWFuYWdlcigpCi0gIHsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IGdldFZpZXdUb29sTWFuYWdlcigpOwotICAgIGlmICh0b29sTWFuYWdlciA9PSBudWxsKQotICAgICAgdG9vbE1hbmFnZXIgPSB0b29sTWFuYWdlcl87Ci0gICAgcmV0dXJuIHRvb2xNYW5hZ2VyOwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdFRvb2xzKCk7Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvblRhcmdldCgpCi0gIHsKLSAgICByZXR1cm4gRnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZFRvZ2dsZShIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZ0J1ZmZlciB0cmVlVmlldyxib29sZWFuIGlzTGFzdENoaWxkKQotICB7Ci0gICAgaWYgKG5vZGVEZXB0aF8gIT0gMSkKLSAgICB7Ci0gICAgICB0cmVlVmlldy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgd2lkdGg9MTYgaGVpZ2h0PTE2IG5vd3JhcD4iKTsKLSAgICAgIFN0cmluZyB0b2dnbGVJbWFnZVRhZzsKLSAgICAgIGlmIChjaGlsZE5vZGVzXy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICAvLyA8YSBocmVmPSIuLi4iIHRhcmdldD0iLi4uIj50b2dnbGVJbWFnZVRhZzwvYT4KLSAgICAgICAgU3RyaW5nIGhyZWYgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpKTsKLSAgICAgICAgaWYgKGlzT3Blbl8pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdG9nZ2xlQWx0ID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJBTFRfQ0xPU0UiKTsKLSAgICAgICAgICBpZiAoaXNMYXN0Q2hpbGQpCi0gICAgICAgICAgICB0b2dnbGVJbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9NSU5VU19MQVNUKSx0b2dnbGVBbHQsIjE2IiwiMTYiLG51bGwpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvZ2dsZUltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX01JTlVTX05PVExBU1QpLHRvZ2dsZUFsdCwiMTYiLCIxNiIsbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHRvZ2dsZUFsdCA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiQUxUX09QRU4iKTsKLSAgICAgICAgICBpZiAoaXNMYXN0Q2hpbGQpCi0gICAgICAgICAgICB0b2dnbGVJbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9QTFVTX0xBU1QpLHRvZ2dsZUFsdCwiMTYiLCIxNiIsbnVsbCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfUExVU19OT1RMQVNUKSx0b2dnbGVBbHQsIjE2IiwiMTYiLG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBsaW5rVGFnID0gSFRNTFV0aWxzLmdldEhUTUxMaW5rVGFnKHJlc3BvbnNlLGhyZWYsZ2V0VG9nZ2xlTm9kZUFjdGlvblRhcmdldCgpLFN0cmluZy52YWx1ZU9mKG5vZGVJZF8pLHRvZ2dsZUltYWdlVGFnLG51bGwpOwotICAgICAgICB0cmVlVmlldy5hcHBlbmQobGlua1RhZyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIDxpbWcuLi4+Ci0gICAgICAgIGlmIChpc0xhc3RDaGlsZCkKLSAgICAgICAgICB0b2dnbGVJbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9MSU5FX0xBU1QpLCIiLCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRvZ2dsZUltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX0xJTkVfTk9UTEFTVCksIiIsIjE2IiwiMTYiLG51bGwpOwotICAgICAgICB0cmVlVmlldy5hcHBlbmQodG9nZ2xlSW1hZ2VUYWcpOwotICAgICAgfQotICAgICAgdHJlZVZpZXcuYXBwZW5kKCI8L3RkPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldExpbmtBY3Rpb25UYXJnZXQoKQotICB7Ci0gICAgcmV0dXJuIEZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUE7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE9wZW5JbWFnZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGltYWdlUGF0aF87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENsb3NlZEltYWdlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gaW1hZ2VQYXRoXzsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEhUTUxMYWJlbChIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZ0J1ZmZlciB0cmVlVmlldyxib29sZWFuIGlzTGFzdENoaWxkKQotICB7Ci0gICAgLy8gPGEgaHJlZj0iLi4uIiB0YXJnZXQ9Ii4uLiIgb25DbGljaz0ic2VsZWN0Tm9kZSgnLi4uJykiPjxpbWcuLi4+PC9hPgotICAgIEhhc2h0YWJsZSBhZGRpdGlvbmFsQXR0cmlidXRlcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBhZGRpdGlvbmFsQXR0cmlidXRlcy5wdXQoIm5hbWUiLGFuY2hvck5hbWVfKTsKLSAgICBTdHJpbmcgaW1hZ2VQYXRoID0gKG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpID09IG5vZGVJZF8pP2dldE9wZW5JbWFnZVBhdGgoKTpnZXRDbG9zZWRJbWFnZVBhdGgoKTsKLQotICAgIFN0cmluZyBpbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoaW1hZ2VQYXRoKSxnZXROb2RlTmFtZSgpLCIxNiIsIjE2IixhZGRpdGlvbmFsQXR0cmlidXRlcyk7Ci0gICAgU3RyaW5nIGJhc2VIcmVmID0gZ2V0TGlua0FjdGlvbkhyZWYoKTsKLSAgICBTdHJpbmcgaHJlZiA9ICgoYmFzZUhyZWYgPT0gbnVsbCk/YmFzZUhyZWY6bm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoYmFzZUhyZWYpKTsKLSAgICBTdHJpbmcgdGFyZ2V0ID0gZ2V0TGlua0FjdGlvblRhcmdldCgpOwotICAgIGFkZGl0aW9uYWxBdHRyaWJ1dGVzLmNsZWFyKCk7Ci0KLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgd2lkdGg9MTYgaGVpZ2h0PTE2IG5vd3JhcD4iKTsKLSAgICBpZiAoaHJlZiAhPSBudWxsKQotICAgICAgdHJlZVZpZXcuYXBwZW5kKEhUTUxVdGlscy5nZXRIVE1MTGlua1RhZyhyZXNwb25zZSxocmVmLHRhcmdldCxudWxsLGltYWdlVGFnLGFkZGl0aW9uYWxBdHRyaWJ1dGVzKSk7Ci0gICAgZWxzZQotICAgICAgdHJlZVZpZXcuYXBwZW5kKGltYWdlVGFnKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIjwvdGQ+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgICAgPHRkIGFsaWduPVwibGVmdFwiIHdpZHRoPTMgaGVpZ2h0PTEwIG5vd3JhcD4iKS5hcHBlbmQoSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX1NQQUNFKSwiIiwiMyIsIjEwIixudWxsKSkuYXBwZW5kKCI8L3RkPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotCi0gICAgLy8gPGEgbmFtZT0iLi4uIiBocmVmPSIuLi4iIHRhcmdldD0iLi4uIj5sYWJlbDwvYT4KLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgbm93cmFwPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIHRyZWVWaWV3LmFwcGVuZCgiICAgICAgIik7Ci0gICAgaWYgKGhyZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgdGV4dEFuY2hvckNsYXNzOwotICAgICAgaWYgKG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpID09IG5vZGVJZF8pCi0gICAgICAgIHRleHRBbmNob3JDbGFzcz0ic2VsZWN0ZWRUZXh0QW5jaG9yIjsKLSAgICAgIGVsc2UKLSAgICAgICAgdGV4dEFuY2hvckNsYXNzPSJ1bnNlbGVjdGVkVGV4dEFuY2hvciI7Ci0gICAgICBhZGRpdGlvbmFsQXR0cmlidXRlcy5wdXQoImNsYXNzIix0ZXh0QW5jaG9yQ2xhc3MpOwotICAgICAgdHJlZVZpZXcuYXBwZW5kKEhUTUxVdGlscy5nZXRIVE1MTGlua1RhZyhyZXNwb25zZSxocmVmLHRhcmdldCxhbmNob3JOYW1lXyxnZXROb2RlTmFtZSgpLGFkZGl0aW9uYWxBdHRyaWJ1dGVzKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHRyZWVWaWV3LmFwcGVuZCgiPHN0cm9uZz4iKS5hcHBlbmQoZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI8L3N0cm9uZz4iKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKS5hcHBlbmQoIiAgICA8L3RkPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVuZGVyTm9kZShIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZ0J1ZmZlciB0cmVlVmlldyxTdHJpbmcgcHJlZml4Q29sdW1ucyxib29sZWFuIGlzTGFzdENoaWxkKQotICB7Ci0gICAgU3RyaW5nIHNwYWNlXzE2eDE2ID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX1NQQUNFKSwiIiwiMTYiLCIxNiIsbnVsbCk7Ci0gICAgU3RyaW5nIGxpbmVfMTZ4MTYgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfTElORSksIiIsIjE2IiwiMTYiLG51bGwpOwotCi0gICAgLy8gVXNlIGJvcmRlcj0xIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuCi0gICAgdHJlZVZpZXcuYXBwZW5kKCI8dGFibGUgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0wIGJvcmRlcj0wPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIHRyZWVWaWV3LmFwcGVuZCgiICA8dHI+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgICAgPHRkIGFsaWduPVwibGVmdFwiIHdpZHRoPTE2IGhlaWdodD0xNiBub3dyYXA+IikuYXBwZW5kKHNwYWNlXzE2eDE2KS5hcHBlbmQoIjwvdGQ+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgU3RyaW5nQnVmZmVyIG5ld1ByZWZpeENvbHVtbnMgPSBuZXcgU3RyaW5nQnVmZmVyKHByZWZpeENvbHVtbnMpOwotICAgIGlmIChub2RlRGVwdGhfID49IDIpCi0gICAgewotICAgICAgaWYgKHByZWZpeENvbHVtbnMubGVuZ3RoKCkgPiAwKQotICAgICAgICB0cmVlVmlldy5hcHBlbmQocHJlZml4Q29sdW1ucykuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgICAvLyBnZW5lcmF0ZSBhIG5ldyBwcmVmaXggY29sdW1ucy4KLSAgICAgIG5ld1ByZWZpeENvbHVtbnMuYXBwZW5kKCIgICAgPHRkIGFsaWduPVwibGVmdFwiIHdpZHRoPTE2IGhlaWdodD0xNiBub3dyYXA+Iik7Ci0gICAgICBpZiAoaXNMYXN0Q2hpbGQpCi0gICAgICAgIG5ld1ByZWZpeENvbHVtbnMuYXBwZW5kKHNwYWNlXzE2eDE2KTsKLSAgICAgIGVsc2UKLSAgICAgICAgbmV3UHJlZml4Q29sdW1ucy5hcHBlbmQobGluZV8xNngxNik7Ci0gICAgICBuZXdQcmVmaXhDb2x1bW5zLmFwcGVuZCgiPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB9Ci0gICAgYWRkVG9nZ2xlKHJlc3BvbnNlLHRyZWVWaWV3LGlzTGFzdENoaWxkKTsKLSAgICBhZGRIVE1MTGFiZWwocmVzcG9uc2UsdHJlZVZpZXcsaXNMYXN0Q2hpbGQpOwotICAgIHRyZWVWaWV3LmFwcGVuZCgiICA8L3RyPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIHRyZWVWaWV3LmFwcGVuZCgiPC90YWJsZT4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICBpbnQgbnVtYmVyT2ZDaGlsZE5vZGVzID0gY2hpbGROb2Rlc18uc2l6ZSgpOwotICAgIGlmIChudW1iZXJPZkNoaWxkTm9kZXMgPiAwKQotICAgIHsKLSAgICAgIGlmIChpc09wZW5fKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpPTA7aTxudW1iZXJPZkNoaWxkTm9kZXMtMTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIGNoaWxkTm9kZSA9IChOb2RlKWNoaWxkTm9kZXNfLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBjaGlsZE5vZGUucmVuZGVyTm9kZShyZXNwb25zZSx0cmVlVmlldyxuZXdQcmVmaXhDb2x1bW5zLnRvU3RyaW5nKCksZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIE5vZGUgbGFzdENoaWxkTm9kZSA9IChOb2RlKWNoaWxkTm9kZXNfLmVsZW1lbnRBdChudW1iZXJPZkNoaWxkTm9kZXMtMSk7Ci0gICAgICAgIGxhc3RDaGlsZE5vZGUucmVuZGVyTm9kZShyZXNwb25zZSx0cmVlVmlldyxuZXdQcmVmaXhDb2x1bW5zLnRvU3RyaW5nKCksdHJ1ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gRm9yIHNvcnRpbmcgcHVycG9zZXMuICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0Tm9kZU5hbWUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ob2RlTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ob2RlTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWQ0OGM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTm9kZU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotCi1wdWJsaWMgY2xhc3MgTm9kZU1hbmFnZXIKLXsKLSAgLy8gcGF0aHMgdG8gaWNvbiBpbWFnZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9QTFVTX05PVExBU1QgPSAiaW1hZ2VzL3BsdXNfbm90bGFzdC5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX1BMVVNfTEFTVCA9ICJpbWFnZXMvcGx1c19sYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfTUlOVVNfTk9UTEFTVCA9ICJpbWFnZXMvbWludXNfbm90bGFzdC5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX01JTlVTX0xBU1QgPSAiaW1hZ2VzL21pbnVzX2xhc3QuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9MSU5FID0gImltYWdlcy9saW5lLmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfTElORV9OT1RMQVNUID0gImltYWdlcy9saW5lX25vdGxhc3QuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9MSU5FX0xBU1QgPSAiaW1hZ2VzL2xpbmVfbGFzdC5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX1NQQUNFID0gImltYWdlcy9zcGFjZS5naWYiOwotCi0gIHByaXZhdGUgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJpdmF0ZSBOb2RlIHJvb3ROb2RlXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgbm9kZVRhYmxlXzsKLSAgcHJpdmF0ZSBpbnQgZm9jdXNlZE5vZGVJZF87Ci0gIHByaXZhdGUgaW50IHNlbGVjdGVkTm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgcHJldmlvdXNTZWxlY3RlZE5vZGVJZF87Ci0gIHByaXZhdGUgaW50IG1heERlcHRoVmlzaWJsZV87Ci0gIHByaXZhdGUgaW50IG5leHRJZF87Ci0KLSAgcHVibGljIE5vZGVNYW5hZ2VyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgICByb290Tm9kZV8gPSBudWxsOwotICAgIG5vZGVUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9jdXNlZE5vZGVJZF8gPSAtMTsKLSAgICBzZWxlY3RlZE5vZGVJZF8gPSAtMTsKLSAgICBwcmV2aW91c1NlbGVjdGVkTm9kZUlkXyA9IC0xOwotICAgIG1heERlcHRoVmlzaWJsZV8gPSAxOwotICAgIG5leHRJZF8gPSAwOwotICB9Ci0KLSAgLyoqCi0gICogSG9vayBmb3IgdGhlIGNvbnRyb2xsZXIuCi0gICogQHJldHVybiBDb250cm9sbGVyIFRoZSBwZXJzcGVjdGl2ZSBjb250cm9sbGVyLgotICAqLwotICBwdWJsaWMgQ29udHJvbGxlciBnZXRDb250cm9sbGVyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXzsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KLSAgKiBAcGFyYW0gcm9vdE5vZGUgVGhlIG5vZGUgYmVpbmcgZGVzaWduYXRlZCBhcyB0aGUgcm9vdCBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRSb290Tm9kZShOb2RlIHJvb3ROb2RlKQotICB7Ci0gICAgcm9vdE5vZGVfID0gcm9vdE5vZGU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSByb290IG5vZGUgb2YgdGhlIHRyZWUgbWFuYWdlZCBieSB0aGlzIE5vZGVNYW5hZ2VyLgotICAqIEByZXR1cm4gTm9kZSBUaGUgcm9vdCBub2RlLgotICAqLwotICBwdWJsaWMgTm9kZSBnZXRSb290Tm9kZSgpCi0gIHsKLSAgICByZXR1cm4gcm9vdE5vZGVfOwotICB9Ci0KLSAgLyoqCi0gICogQHBhcmFtIEludGVnZXIgVGhlIGlkIG9mIHRoZSBub2RlIGJlaW5nIGFkZGVkLgotICAqIEBwYXJhbSBOb2RlIFRoZSBub2RlIGJlaW5nIGFkZGVkLgotICAqIEByZXR1cm4gVGhlIG5vZGVJZCBhc3NpZ25lZCB0byB0aGlzIG5vZGUuCi0gICovCi0gIHB1YmxpYyBpbnQgYWRkVG9Ob2RlVGFibGUoTm9kZSBub2RlKQotICB7Ci0gICAgaW50IGFzc2lnbmVkTm9kZUlkID0gbmV4dElkXzsKLSAgICBub2RlVGFibGVfLnB1dChTdHJpbmcudmFsdWVPZihhc3NpZ25lZE5vZGVJZCksbm9kZSk7Ci0gICAgbmV4dElkXysrOwotICAgIHJldHVybiBhc3NpZ25lZE5vZGVJZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZyb21Ob2RlVGFibGUoaW50IG5vZGVJZCkKLSAgewotICAgIFZlY3RvciBub2Rlc1RvUmVtb3ZlID0gbmV3IFZlY3RvcigpOwotICAgIE5vZGUgbm9kZSA9IGdldE5vZGUobm9kZUlkKTsKLSAgICBnYXRoZXJOb2Rlc1RvUmVtb3ZlKG5vZGVzVG9SZW1vdmUsIG5vZGUpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBub2Rlc1RvUmVtb3ZlLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLSAgICAgIG5vZGVUYWJsZV8ucmVtb3ZlKFN0cmluZy52YWx1ZU9mKCgoTm9kZSlpdC5uZXh0KCkpLmdldE5vZGVJZCgpKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGdhdGhlck5vZGVzVG9SZW1vdmUoVmVjdG9yIG5vZGVzVG9SZW1vdmUsIE5vZGUgbm9kZSkgewotICAgIGlmIChub2RlICE9IG51bGwpIHsKLSAgICAgIG5vZGVzVG9SZW1vdmUuYWRkKG5vZGUpOwotICAgICAgVmVjdG9yIGNoaWxkTm9kZXMgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBjaGlsZE5vZGVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLSAgICAgICAgZ2F0aGVyTm9kZXNUb1JlbW92ZShub2Rlc1RvUmVtb3ZlLCAoTm9kZSlpdC5uZXh0KCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSBkZWVwZXN0IHZpc2libGUgbm9kZSBpbiB0aGUgdHJlZS4KLSAgKiBAcmV0dXJuIGludAotICAqLwotICBwdWJsaWMgaW50IGdldE1heERlcHRoVmlzaWJsZSgpCi0gIHsKLSAgICByZXR1cm4gbWF4RGVwdGhWaXNpYmxlXzsKLSAgfQotCi0gIC8qKgotICAqIFVwZGF0ZXMgdGhlIGRlcHRoIG9mIHRoZSBkZWVwZXN0IHZpc2libGUgbm9kZSBpbiB0aGUgdHJlZS4gTm9kZXMKLSAgKiBtdXN0IGNhbGwgdGhpcyB3aGVuIHRoZSB2aXNpYmlsaXR5IG9mIHRoZWlyIGNoaWxkcmVuIGNoYW5nZXMuCi0gICogKGUuZy4gZXhwYW5kL2NvbGxhcHNlIG9mIGEgcGFyZW50IG5vZGUpLgotICAqLwotICBwdWJsaWMgdm9pZCB1cGRhdGVNYXhEZXB0aFZpc2libGUoKQotICB7Ci0gICAgaWYgKHJvb3ROb2RlXyAhPSBudWxsKQotICAgICAgbWF4RGVwdGhWaXNpYmxlXyA9IHJvb3ROb2RlXy5nZXRNYXhEZXB0aFZpc2libGUoKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGlkIGZvciBhIG5ld2x5IGNyZWF0ZWQgbm9kZS4KLSAgKiBAcmV0dXJuIGludAotICAqLwotICBwdWJsaWMgaW50IGdldE5leHROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIG5leHRJZF87Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgY3VycmVudGx5IGZvY3VzZWQgbm9kZSBpbiB0aGUgdHJlZS4gQSBub2RlCi0gICogYmVjb21lcyBmb2N1c2VkIHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzIG9jY3VyOgotICAqIDEpIFRoZSBub2RlJ3MgaWNvbiBvciBpbWFnZSBhcmUgc2VsZWN0ZWQgYnkgYSB1c2VyLgotICAqIDIpIFRoZSBub2RlJ3MgZXhwYW5kL2NvbGxhcHNlIGljb24gaXMgY2xpY2tlZC4KLSAgKiAzKSBQcm9ncmFtbWF0aWNhbGx5IHNldCBieSB0aGUgcHJvZ3JhbW1lci4KLSAgKiBUaGUgdHJlZXZpZXcgd2lsbCBhbHdheXMgc2Nyb2xsIHRvIHRoZSBjdXJyZW50IGZvY3VzZWQgbm9kZSB3aGVuIGxvYWRlZC4KLSAgKiBAcmV0dXJuIGludCBUaGUgaWQuCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0Rm9jdXNlZE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gZm9jdXNlZE5vZGVJZF87Ci0gIH0KLQotICAvKioKLSAgKiBBbGxvd3MgbW9kaWZpY2F0aW9uIG9mIHRoZSBmb2N1c2VkIG5vZGUuCi0gICogQHBhcmFtIGludCBUaGUgaWQgb2YgdGhlIG5vZGUgdGhhdCBpcyBpbiBmb2N1cy4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Rm9jdXNlZE5vZGVJZChpbnQgbm9kZUlkKQotICB7Ci0gICAgZm9jdXNlZE5vZGVJZF8gPSBub2RlSWQ7Ci0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXRGb2N1c2VkTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0Tm9kZShmb2N1c2VkTm9kZUlkXyk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgaW4gdGhlIHRyZWUuCi0gICogQHJldHVybiBpbnQgVGhlIGlkLgotICAqLwotICBwdWJsaWMgaW50IGdldFNlbGVjdGVkTm9kZUlkKCkKLSAgewotICAgIHJldHVybiBzZWxlY3RlZE5vZGVJZF87Ci0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXRTZWxlY3RlZE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIGdldE5vZGUoc2VsZWN0ZWROb2RlSWRfKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHJpZXZlIGEgcmVmZXJlbmNlIHRvIGEgTm9kZSBpbiB0aGlzIG1hbmFnZXIncyBub2RlIHRhYmxlLgotICAqIEByZXR1cm4gTm9kZSBUaGUgbm9kZS4KLSAgKi8KLSAgcHVibGljIE5vZGUgZ2V0Tm9kZShpbnQgbm9kZUlkKQotICB7Ci0gICAgcmV0dXJuIChOb2RlKW5vZGVUYWJsZV8uZ2V0KFN0cmluZy52YWx1ZU9mKG5vZGVJZCkpOwotICB9Ci0KLSAgLyoqCi0gICogQWxsb3dzIG1vZGlmaWNhdGlvbiBvZiB0aGUgc2VsZWN0ZWQgTm9kZS4gTm90ZSB0aGF0IHNldHRpbmcgYSBub2RlIHRvIGJlY29tZQotICAqIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgbWFrZXMgaXQgdGhlIGZvY3VzZWQgbm9kZS4gSG93ZXZlciwgdGhpcyBpcyBvbmx5IGEgb25lCi0gICogd2F5IHJlbGF0aW9uc2hpcC4KLSAgKiBAcGFyYW0gaW50IFRoZSBpZCBvZiB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIHNlbGVjdGVkLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZE5vZGVJZChpbnQgbm9kZUlkKQotICB7Ci0gICAgcHJldmlvdXNTZWxlY3RlZE5vZGVJZF8gPSBzZWxlY3RlZE5vZGVJZF87Ci0gICAgc2VsZWN0ZWROb2RlSWRfID0gbm9kZUlkOwotICAgIHNldEZvY3VzZWROb2RlSWQoc2VsZWN0ZWROb2RlSWRfKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0UHJldmlvdXNTZWxlY3RlZE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gcHJldmlvdXNTZWxlY3RlZE5vZGVJZF87Ci0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXRQcmV2aW91c1NlbGVjdGVkTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gKE5vZGUpbm9kZVRhYmxlXy5nZXQoU3RyaW5nLnZhbHVlT2YocHJldmlvdXNTZWxlY3RlZE5vZGVJZF8pKTsKLSAgfQotCi0gIC8qKgotICAqIFJlbmRlciB0aGUgSFRNTCB0cmVlIHZpZXcgZm9yIHRoaXMgbm9kZS4KLSAgKiBAcGFyYW0gSHR0cFNlcnZsZXRSZXNwb25zZSBGb3IgZW5jb2RpbmcgVVJMcy4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgSFRNTCByZXByZXNlbnRpbmcgdGhlIHRyZWUgdmlldy4KLSAgKi8KLSAgcHVibGljIFN0cmluZyByZW5kZXJUcmVlVmlldyhIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHRyZWVWaWV3ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHJvb3ROb2RlXy5yZW5kZXJOb2RlKHJlc3BvbnNlLHRyZWVWaWV3LCIiLGZhbHNlKTsKLSAgICByZXR1cm4gdHJlZVZpZXcudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICogTWFrZSB0aGUgcHJvdmlkZWQgbm9kZSBpcyB2aXNpYmxlIGJ5IGVuc3VyaW5nIHRoYXQgaXRzIGFuY2VzdG9ycyBhcmUgdmlzaWJsZS4KLSAgKiBAcGFyYW0gTm9kZSBUaGUgbm9kZSB0byBiZSBtYWRlIHZpc2libGUuCi0gICogQHJldHVybiBib29sZWFuIEluZGljYXRvciBmb3Igd2hldGhlciBvciBub3QgdGhlIHRyZWV2aWV3IG5lZWRzIHJlZnJlc2hpbmcgKGkuZS4gYW4gYW5jZXN0b3Igd2FzIG5vdCB2aXNpYmxlKS4KLSAgKi8KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gbWFrZU5vZGVWaXNpYmxlKE5vZGUgbm9kZSkKLSAgewotICAgIGJvb2xlYW4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2ggPSBmYWxzZTsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLmdldFBhcmVudCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghbm9kZS5pc09wZW4oKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2ggPSB0cnVlOwotICAgICAgICBub2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKHRydWUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2g7Ci0gIH0KLSAgCi0gIC8qKgotICAqIE1ha2UgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlIHZpc2libGUgYnkgZW5zdXJpbmcgdGhhdCBpdHMgYW5jZXN0b3JzIGFyZSB2aXNpYmxlLgotICAqLwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBtYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpCi0gIHsKLSAgICByZXR1cm4gbWFrZU5vZGVWaXNpYmxlKGdldFNlbGVjdGVkTm9kZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9QZXJzcGVjdGl2ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9QZXJzcGVjdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTVmMTRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvUGVyc3BlY3RpdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGVyc3BlY3RpdmUgZXh0ZW5kcyBNZXNzYWdlUHJvdmlkZXIKLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByb3RlY3RlZCBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlXzsKLQotICBwdWJsaWMgUGVyc3BlY3RpdmUoU3RyaW5nIG1lc3NhZ2VCdW5kbGVGaWxlTmFtZSxDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihtZXNzYWdlQnVuZGxlRmlsZU5hbWUpOwotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgICBtZXNzYWdlUXVldWVfID0gbmV3IE1lc3NhZ2VRdWV1ZSgpOwotICB9Ci0KLSAgcHVibGljIE1lc3NhZ2VRdWV1ZSBnZXRNZXNzYWdlUXVldWUoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VRdWV1ZV87Ci0gIH0KLQotICBwdWJsaWMgQ29udHJvbGxlciBnZXRDb250cm9sbGVyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXzsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UGFuZXNGaWxlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RnJhbWVzZXRzRmlsZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb2Nlc3NGcmFtZXNldHNGb3JtKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IGludCBnZXRQZXJzcGVjdGl2ZUlkKCk7Ci0KLSAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHBlcnNwZWN0aXZlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YW50aWF0ZWQuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluaXRQZXJzcGVjdGl2ZShTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbik7Ci0gIAotICAvLyBOb2RlIG1hbmFnZXIgZm9yIHRoZSBuYXZpZ2F0b3IvdHJlZSBjb250ZW50IHBhZ2UKLSAgcHVibGljIGFic3RyYWN0IE5vZGVNYW5hZ2VyIGdldE5vZGVNYW5hZ2VyKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NlY3Rpb25IZWFkZXJJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NlY3Rpb25IZWFkZXJJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZTVlNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9TZWN0aW9uSGVhZGVySW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgU2VjdGlvbkhlYWRlckluZm8KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgY29udGFpbmVySWRfOwotICBwcml2YXRlIGJvb2xlYW4gZHluYW1pY187Ci0gIHByaXZhdGUgT2JqZWN0IG90aGVyUHJvcGVydGllc187Ci0KLSAgcHVibGljIFNlY3Rpb25IZWFkZXJJbmZvKCkKLSAgewotICAgIGNsZWFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhcigpCi0gIHsKLSAgICBjb250YWluZXJJZF8gPSAiIjsKLSAgICBkeW5hbWljXyA9IHRydWU7Ci0gICAgb3RoZXJQcm9wZXJ0aWVzXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDb250YWluZXJJZChTdHJpbmcgY29udGFpbmVySWQpCi0gIHsKLSAgICBjb250YWluZXJJZF8gPSBjb250YWluZXJJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q29udGFpbmVySWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRhaW5lcklkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGVuYWJsZUR5bmFtaWMoYm9vbGVhbiBpc0VuYWJsZWQpCi0gIHsKLSAgICBkeW5hbWljXyA9IGlzRW5hYmxlZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzRHluYW1pYygpCi0gIHsKLSAgICByZXR1cm4gZHluYW1pY187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRPdGhlclByb3BlcnRpZXMoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIG90aGVyUHJvcGVydGllc18gPSBvYmplY3Q7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgT2JqZWN0IGdldE90aGVyUHJvcGVydGllcygpCi0gIHsKLSAgICByZXR1cm4gb3RoZXJQcm9wZXJ0aWVzXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9TZXREZWZhdWx0Vmlld1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOTFiOTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9TZXREZWZhdWx0Vmlld1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFNldERlZmF1bHRWaWV3VG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHVibGljIFNldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHZpZXdUb29sTWFuYWdlciwiaW1hZ2VzL3RvcF9lbmFibGVkLmdpZiIsImltYWdlcy90b3BfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGJmYjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLQotLy8gQSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIHRvb2xiYXIgdG9vbHMuCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVG9vbAotewotICBwcm90ZWN0ZWQgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXJfOwotICBwcml2YXRlIFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZUxpbmtfOwotICBwcml2YXRlIFN0cmluZyBhbHRfOwotICBwcm90ZWN0ZWQgaW50IHRvb2xJZF87Ci0gIHByb3RlY3RlZCBieXRlIHRvb2xUeXBlXzsKLQotICBwdWJsaWMgVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlTGluayxTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZUxpbmssU3RyaW5nIGFsdCxieXRlIHRvb2xUeXBlKQotICB7Ci0gICAgdG9vbE1hbmFnZXJfID0gdG9vbE1hbmFnZXI7Ci0gICAgZW5hYmxlZEltYWdlTGlua18gPSBlbmFibGVkSW1hZ2VMaW5rOwotICAgIGhpZ2hsaWdodGVkSW1hZ2VMaW5rXyA9IGhpZ2hsaWdodGVkSW1hZ2VMaW5rOwotICAgIGFsdF8gPSBhbHQ7Ci0gICAgdG9vbElkXyA9IHRvb2xNYW5hZ2VyXy5hZGRUb29sKHRoaXMpOwotICAgIHRvb2xUeXBlXyA9IHRvb2xUeXBlOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvblRhcmdldCgpCi0gIHsKLSAgICByZXR1cm4gRnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBnZW5lcmF0ZU9uTW91c2VWYWx1ZShTdHJpbmdCdWZmZXIgdmFsdWUsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmcgZnVsbEltYWdlTGluaykKLSAgewotICAgIHZhbHVlLmFwcGVuZCgic3JjPSciKS5hcHBlbmQocmVzcG9uc2UuZW5jb2RlVVJMKGZ1bGxJbWFnZUxpbmspKS5hcHBlbmQoJ1wnJyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHJlbmRlclRvb2woSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBIYXNodGFibGUganNJbWFnZVByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgU3RyaW5nQnVmZmVyIHByb3BlcnR5VmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgU3RyaW5nIGZ1bGxFbmFibGVkSW1hZ2VMaW5rID0gY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZW5hYmxlZEltYWdlTGlua18pOwotICAgIGdlbmVyYXRlT25Nb3VzZVZhbHVlKHByb3BlcnR5VmFsdWUscmVzcG9uc2UsZnVsbEVuYWJsZWRJbWFnZUxpbmspOwotICAgIGludCBwcm9wZXJ0eVZhbHVlTGVuZ3RoID0gcHJvcGVydHlWYWx1ZS5sZW5ndGgoKTsKLSAgICBqc0ltYWdlUHJvcGVydGllcy5wdXQoImNsYXNzIiwibm9ybWFsIik7Ci0gICAganNJbWFnZVByb3BlcnRpZXMucHV0KCJvbk1vdXNlT3V0Iixwcm9wZXJ0eVZhbHVlLmFwcGVuZCgiO21vdXNlb3V0KHRoaXMpIikudG9TdHJpbmcoKSk7Ci0gICAgcHJvcGVydHlWYWx1ZS5kZWxldGUocHJvcGVydHlWYWx1ZUxlbmd0aCxwcm9wZXJ0eVZhbHVlLmxlbmd0aCgpKTsKLSAgICBqc0ltYWdlUHJvcGVydGllcy5wdXQoIm9uTW91c2VVcCIscHJvcGVydHlWYWx1ZS5hcHBlbmQoIjttb3VzZXVwKHRoaXMpIikudG9TdHJpbmcoKSk7Ci0gICAgcHJvcGVydHlWYWx1ZS5zZXRMZW5ndGgoMCk7Ci0gICAgZ2VuZXJhdGVPbk1vdXNlVmFsdWUocHJvcGVydHlWYWx1ZSxyZXNwb25zZSxjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChoaWdobGlnaHRlZEltYWdlTGlua18pKTsKLSAgICBwcm9wZXJ0eVZhbHVlTGVuZ3RoID0gcHJvcGVydHlWYWx1ZS5sZW5ndGgoKTsKLSAgICBqc0ltYWdlUHJvcGVydGllcy5wdXQoIm9uTW91c2VPdmVyIixwcm9wZXJ0eVZhbHVlLmFwcGVuZCgiO21vdXNlb3Zlcih0aGlzKSIpLnRvU3RyaW5nKCkpOwotICAgIHByb3BlcnR5VmFsdWUuZGVsZXRlKHByb3BlcnR5VmFsdWVMZW5ndGgscHJvcGVydHlWYWx1ZS5sZW5ndGgoKSk7Ci0gICAganNJbWFnZVByb3BlcnRpZXMucHV0KCJvbk1vdXNlRE93biIscHJvcGVydHlWYWx1ZS5hcHBlbmQoIjttb3VzZWRvd24odGhpcykiKS50b1N0cmluZygpKTsKLQotICAgIFN0cmluZyBpbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2UsZnVsbEVuYWJsZWRJbWFnZUxpbmssYWx0XywiMTYiLCIxNiIsanNJbWFnZVByb3BlcnRpZXMpOwotICAgIHJldHVybiBIVE1MVXRpbHMuZ2V0SFRNTExpbmtUYWcocmVzcG9uc2UsY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoZmFsc2UpKSxnZXRTZWxlY3RUb29sQWN0aW9uVGFyZ2V0KCksbnVsbCxpbWFnZVRhZyxudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUb29sTWFuYWdlciBnZXRUb29sTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gdG9vbE1hbmFnZXJfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRUb29sSWQoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYnl0ZSBnZXRUb29sVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdG9vbFR5cGVfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEVuYWJsZWRJbWFnZUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGVuYWJsZWRJbWFnZUxpbmtfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEhpZ2hsaWdodGVkSW1hZ2VMaW5rKCkKLSAgewotICAgIHJldHVybiBoaWdobGlnaHRlZEltYWdlTGlua187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWx0VGV4dCgpCi0gIHsKLSAgICByZXR1cm4gYWx0XzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0QWx0VGV4dChTdHJpbmcgYWx0KQotICB7Ci0gIAlhbHRfID0gYWx0OwotICB9ICAKLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldEZvcm1MaW5rKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWE5MWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVG9vbE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgVG9vbE1hbmFnZXIKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgdG9vbHNfOwotICBwcml2YXRlIGludCBzZWxlY3RlZFRvb2xJZF87Ci0gIHByaXZhdGUgTm9kZSBub2RlXzsKLQotICBwdWJsaWMgVG9vbE1hbmFnZXIoTm9kZSBub2RlKQotICB7Ci0gICAgdG9vbHNfID0gbmV3IFZlY3RvcigpOwotICAgIHNlbGVjdGVkVG9vbElkXyA9IDA7Ci0gICAgbm9kZV8gPSBub2RlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRTZWxlY3RlZFRvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRUb29sSWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBzZXRTZWxlY3RlZFRvb2xJZChpbnQgdG9vbElkKQotICB7Ci0gICAgaWYgKHRvb2xJZCA+PSAwICYmIHRvb2xJZCA8IHRvb2xzXy5zaXplKCkpCi0gICAgICBzZWxlY3RlZFRvb2xJZF8gPSB0b29sSWQ7Ci0gICAgcmV0dXJuIHNlbGVjdGVkVG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgYWRkVG9vbChUb29sIHRvb2wpCi0gIHsKLSAgICB0b29sc18uYWRkRWxlbWVudCh0b29sKTsKLSAgICByZXR1cm4gdG9vbHNfLnNpemUoKS0xOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2wgZ2V0VG9vbChpbnQgdG9vbElkKQotICB7Ci0gICAgaWYgKHRvb2xJZCA+PTAgJiYgdG9vbElkIDwgZ2V0TnVtYmVyT2ZUb29scygpKQotICAgICAgcmV0dXJuIChUb29sKXRvb2xzXy5lbGVtZW50QXQodG9vbElkKTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIExpc3QgZ2V0VG9vbHMoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUb29sIGdldFNlbGVjdGVkVG9vbCgpCi0gIHsKLSAgICBpZiAoc2VsZWN0ZWRUb29sSWRfID49MCAmJiBzZWxlY3RlZFRvb2xJZF8gPCBnZXROdW1iZXJPZlRvb2xzKCkpCi0gICAgICByZXR1cm4gKFRvb2wpdG9vbHNfLmVsZW1lbnRBdChzZWxlY3RlZFRvb2xJZF8pOwotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXROdW1iZXJPZlRvb2xzKCkKLSAgewotICAgIHJldHVybiB0b29sc18uc2l6ZSgpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGUgZ2V0Tm9kZSgpCi0gIHsKLSAgICByZXR1cm4gbm9kZV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9UcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYjk4ZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9UcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnRQcm92aWRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIncyB0cmFuc3BvcnQgcHJvdmlkZXIKLSAqIGV4dGVuc2lvbnMgYW5kIGluc3RhbnRpYXRpbmcgdGhlbSB3aGVuIG5lZWRlZC4gCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGX1RSQU5TUE9SVF9QUk9WSURFUlMgPSAiVFJBTlNQT1JUX1BST1ZJREVSUyI7CQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRFTlNJT05fTkFNRSAgICAgICAgICAgPSAid3NlVHJhbnNwb3J0UHJvdmlkZXIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX1RSQU5TUE9SVF9QUk9WSURFUiAgPSAic29hcFRyYW5zcG9ydFByb3ZpZGVyIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VSSSAgICAgICAgICAgID0gIm5hbWVzcGFjZVVSSSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9VUkkgICAgICAgICAgICA9ICJ0cmFuc3BvcnRVUkkiOwotCQotCXByaXZhdGUgc3RhdGljIFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkgaW5zdGFuY2UgPSBudWxsOwotCQotCXByaXZhdGUgTGlzdCBwcmVmZXJyZWRJRHMgICAgICAgID0gbnVsbDsgCi0JcHJpdmF0ZSBNYXAgc29hcFByb3ZpZGVyRWxlbWVudHMgPSBudWxsOwotCXByaXZhdGUgTWFwIHNvYXBQcm92aWRlckNhY2hlICAgID0gbnVsbDsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeS4KLQkgKiAgCi0JICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZSA9PSBudWxsKQotCQkJaW5zdGFuY2UgPSBuZXcgVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeSgpOwotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCQotCS8qCi0JICogQ29uc3RydWN0b3IuCi0JICovCi0JcHJpdmF0ZSBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5KCkgewkJCi0JCQotCQkvLyBnZXQgdGhlIHByZWZlcmVuY2UgdmFsdWUKLQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCVN0cmluZyB0cmFuc3BvcnRQcm92aWRlcnMgPSBwcmVmZXJlbmNlcy5nZXRTdHJpbmcoUFJFRl9UUkFOU1BPUlRfUFJPVklERVJTKS5yZXBsYWNlQWxsKCJcXHMiLCAiIik7Ci0JCQotCQkvLyBzcGxpdCBpdCBpbnRvIGEgbGlzdCBvZiBwcmVmZXJyZWQgdHJhbnNwb3J0IHByb3ZpZGVyIElEcwotCQlpZiAodHJhbnNwb3J0UHJvdmlkZXJzLmxlbmd0aCgpID09IDApCi0JCQlwcmVmZXJyZWRJRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWVsc2UJCQkKLQkJCXByZWZlcnJlZElEcyA9IEFycmF5cy5hc0xpc3QodHJhbnNwb3J0UHJvdmlkZXJzLnNwbGl0KCIsIikpOwotCQkKLQkJLy8gbm93IGZpbmQgYWxsIGV4dGVuZGVycwotCQlJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWdzID0gCi0JICAgIAlyZWdpc3RyeS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoRXhwbG9yZXJQbHVnaW4uSUQsIEVYVEVOU0lPTl9OQU1FKTsgCi0KLQkgICAgLy8gY3VycmVudGx5IHdlIG9ubHkgaGF2ZSBvbmUgdHlwZSBvZiBwcm92aWRlcnM6IFNPQVAgdHJhbnNwb3J0IHByb3ZpZGVycwotCSAgICBzb2FwUHJvdmlkZXJFbGVtZW50cyA9IG5ldyBIYXNodGFibGUoKTsJICAgIAotCSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ3MubGVuZ3RoOyBpKyspIHsJICAgIAkJICAgIAkKLSAgICAJCWlmIChTT0FQX1RSQU5TUE9SVF9QUk9WSURFUi5lcXVhbHMoY29uZmlnc1tpXS5nZXROYW1lKCkpKSB7CSAgICAJCQkKLSAgICAJCQlTdHJpbmcgaWQgPSBjb25maWdzW2ldLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICAJCQlzb2FwUHJvdmlkZXJFbGVtZW50cy5wdXQoaWQsIGNvbmZpZ3NbaV0pOyAgICAJCQkgICAgCQkJCQotICAgIAkJfQkgICAgCQkgICAgCQotCSAgICB9Ci0JICAgIAotCSAgICBzb2FwUHJvdmlkZXJDYWNoZSA9IG5ldyBIYXNodGFibGUoKTsKLQl9CQkKLQkKLQkvKgotCSAqIERldGVybWluZSBpZiB0aGUgVVJJcyBtYXRjaC4KLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gdXJpTWF0Y2goU3RyaW5nIHJlcXVpcmVkLCBTdHJpbmcgc3VwcG9ydGVkKSB7Ci0JCQotCQkvLyBub3Qgc3BlY2lmaWVkIG1lYW4gc3VwcG9ydCBldmVyeXRoaW5nCi0JCWlmIChzdXBwb3J0ZWQgPT0gbnVsbCkKLQkJCXJldHVybiB0cnVlOwotCQkJCQotCQlpZiAoIXJlcXVpcmVkLmVuZHNXaXRoKCIvIikpICByZXF1aXJlZCArPSAiLyI7Ci0JCWlmICghc3VwcG9ydGVkLmVuZHNXaXRoKCIvIikpIHN1cHBvcnRlZCArPSAiLyI7Ci0JCQotCQlyZXR1cm4gcmVxdWlyZWQuZXF1YWxzKHN1cHBvcnRlZCk7Ci0JfQotCQotCS8qCi0JICogQ3JlYXRlIHRoZSBleHRlbnNpb24gZm9yIHRoZSBnaXZlbiBrZXksIGJ1dCBvbmx5IGlmIGl0IHN1cHBvcnRzIHRoZSBiaW5kaW5nIG5hbWVzcGFjZSBhbmQgdHJhbnNwb3J0Ci0JICovCi0JcHJpdmF0ZSBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIGNyZWF0ZUV4dGVuc2lvbihPYmplY3Qga2V5LCBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgdHJhbnNwb3J0VVJJKSB7Ci0JCQotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IChJQ29uZmlndXJhdGlvbkVsZW1lbnQpIHNvYXBQcm92aWRlckVsZW1lbnRzLmdldChrZXkpOwkJCQkJCQotCQlpZiAoZWxlbWVudCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQlib29sZWFuIHN1cHBvcnRzTmFtZXNwYWNlID0gdXJpTWF0Y2gobmFtZXNwYWNlVVJJLCBlbGVtZW50LmdldEF0dHJpYnV0ZShOQU1FU1BBQ0VfVVJJKSk7Ci0JCWJvb2xlYW4gc3VwcG9ydHNUcmFuc3BvcnQgPSB1cmlNYXRjaCh0cmFuc3BvcnRVUkksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFRSQU5TUE9SVF9VUkkpKTsJCQkKLQkJCi0JCWlmIChzdXBwb3J0c05hbWVzcGFjZSAmJiBzdXBwb3J0c1RyYW5zcG9ydCkgewkJCQotCQkJCi0JCQlTdHJpbmcgcHJvdmlkZXJDbGFzc0lEID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImNsYXNzIik7Ci0JCQlPYmplY3Qgb2JqID0gbnVsbDsKLQkJCQotCQkJdHJ5IHsKLQkJCQkvLyBjaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHRyYW5zcG9ydCBwcm92aWRlciBjYWNoZWQsCi0JCQkJLy8gaWYgbm90LCB0aGVuIGNyZWF0ZSBvbmUKLQkJCQlzeW5jaHJvbml6ZWQgKHNvYXBQcm92aWRlckNhY2hlKSB7Ci0JCQkJCW9iaiA9IHNvYXBQcm92aWRlckNhY2hlLmdldChwcm92aWRlckNsYXNzSUQpOyAJCQkJCQotCQkJCQlpZiAob2JqID09IG51bGwpIHsJCQkJCQotCQkJCQkJb2JqID0gZWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotCQkJCQkJc29hcFByb3ZpZGVyQ2FjaGUucHV0KHByb3ZpZGVyQ2xhc3NJRCwgb2JqKTsKLQkJCQkJfQkJCQkJCi0JCQkJfQotCQkJCXJldHVybiAoSVNPQVBUcmFuc3BvcnRQcm92aWRlcikgb2JqOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkge30JCQkJCQotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IGFuIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgdGhhdCBzdXBwb3J0cyB0aGUgYmluZGluZyBuYW1lc3BhY2UgYW5kIHRyYW5zcG9ydC4gIFRoaXMgbWV0aG9kIHdpbGwKLQkgKiBmaXJzdCBsb29rIGZvciBwcmVmZXJyZWQgSURzIGRlZmluZWQgdXNpbmcgdGhlIFRSQU5TUE9SVF9QUk9WSURFUlMgcHJlZmVyZW5jZSBrZXkuICBJZiBhIHN1aXRhYmxlCi0JICogcHJvdmlkZXIgaXMgbm90IGZvdW5kLCBpdCB3aWxsIHRoZW4gbG9vayBhdCBhbGwgb3RoZXIgZXh0ZW5kZXJzIGluIG5vbi1kZXRlcm1pbmlzdGljIG9yZGVyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lc3BhY2VVUkkgVGhlIGJpbmRpbmcgbmFtZXNwYWNlIFVSSQotCSAqIEBwYXJhbSB0cmFuc3BvcnRVUkkgVGhlIGJpbmRpbmcgdHJhbnNwb3J0IFVSSQotCSAqIAotCSAqIEByZXR1cm4gUmV0dXJucyBhIHN1aXRhYmxlIElTT0FQVHJhbnBvcnRQcm92aWRlciBmb3IgdGhlIGdpdmVuIGJpbmRpbmcgaW5mb3JtYXRpb24sIG9yIG51bGwKLQkgKiBpZiB0aGVyZSdzIG5vIG1hdGNoLgotCSAqLwotCXB1YmxpYyBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIGdldFNPQVBUcmFuc3BvcnRQcm92aWRlcihTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgdHJhbnNwb3J0VVJJKSB7Ci0JCi0JCUlTT0FQVHJhbnNwb3J0UHJvdmlkZXIgcHJvdmlkZXIgPSBudWxsOwotCQkKLQkJSXRlcmF0b3IgaXRlciA9IHByZWZlcnJlZElEcy5pdGVyYXRvcigpOwotCQkKLQkJLy8gY2hlY2sgcHJlZmVycmVkIElEcyBmaXJzdAotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCXByb3ZpZGVyID0gY3JlYXRlRXh0ZW5zaW9uKGl0ZXIubmV4dCgpLCBuYW1lc3BhY2VVUkksIHRyYW5zcG9ydFVSSSk7Ci0JCQlpZiAocHJvdmlkZXIgIT0gbnVsbCkKLQkJCQlyZXR1cm4gcHJvdmlkZXI7Ci0JCX0KLQkJCi0JCWl0ZXIgPSBzb2FwUHJvdmlkZXJFbGVtZW50cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQkKLQkJLy8gY2hlY2sgcmVzdCBvZiB0aGUgcHJvdmlkZXJzCi0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJT2JqZWN0IGtleSA9IGl0ZXIubmV4dCgpOwotCQkKLQkJCS8vIGFscmVhZHkgY2hlY2tlZCB0aGUgcHJlZmVycmVkIElEcwotCQkJaWYgKHByZWZlcnJlZElEcy5jb250YWlucyhrZXkpKQotCQkJCWNvbnRpbnVlOwotCQkJCi0JCQlwcm92aWRlciA9IGNyZWF0ZUV4dGVuc2lvbihrZXksIG5hbWVzcGFjZVVSSSwgdHJhbnNwb3J0VVJJKTsKLQkJCWlmIChwcm92aWRlciAhPSBudWxsKQotCQkJCXJldHVybiBwcm92aWRlcjsJCQkKLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9WaWV3VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9WaWV3VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjU5NjA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVmlld1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBWaWV3VG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHZpZXdUb29sTWFuYWdlcnNfOwotCi0gIHB1YmxpYyBWaWV3VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlTGluayxTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZUxpbmssU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGVuYWJsZWRJbWFnZUxpbmssaGlnaGxpZ2h0ZWRJbWFnZUxpbmssYWx0KTsKLSAgICB0b29sVHlwZV8gPSBUb29sVHlwZXMuVklFVzsKLSAgICB2aWV3VG9vbE1hbmFnZXJzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGFkZFNldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsaW50IGluZGV4KTsKLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYWRkVG9vbHMoVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLGludCBpbmRleCk7Ci0KLSAgcHVibGljIGZpbmFsIFRvb2xNYW5hZ2VyIGNyZWF0ZVRvb2xNYW5hZ2VyKGludCB2aWV3SWQpCi0gIHsKLSAgICBUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIgPSBuZXcgVG9vbE1hbmFnZXIodG9vbE1hbmFnZXJfLmdldE5vZGUoKSk7Ci0gICAgYWRkVG9vbHModmlld1Rvb2xNYW5hZ2VyLHZpZXdJZCk7Ci0gICAgYWRkU2V0RGVmYXVsdFZpZXdUb29sKHZpZXdUb29sTWFuYWdlcix2aWV3SWQpOwotICAgIHZpZXdUb29sTWFuYWdlcnNfLnB1dChTdHJpbmcudmFsdWVPZih2aWV3SWQpLHZpZXdUb29sTWFuYWdlcik7Ci0gICAgcmV0dXJuIHZpZXdUb29sTWFuYWdlcjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUb29sTWFuYWdlciBnZXRUb29sTWFuYWdlcihpbnQgdmlld0lkKQotICB7Ci0gICAgcmV0dXJuIChUb29sTWFuYWdlcikodmlld1Rvb2xNYW5hZ2Vyc18uZ2V0KFN0cmluZy52YWx1ZU9mKHZpZXdJZCkpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyVmlld1Rvb2xNYW5hZ2VyKGludCB2aWV3SWQpCi0gIHsKLSAgICB2aWV3VG9vbE1hbmFnZXJzXy5yZW1vdmUoU3RyaW5nLnZhbHVlT2Yodmlld0lkKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhclZpZXdUb29sTWFuYWdlcnMoKQotICB7Ci0gICAgdmlld1Rvb2xNYW5hZ2Vyc18uY2xlYXIoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yzg3ZTVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGNsYXNzIEFkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIEFkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIC8vIFRoZSBjbGllbnQgSmF2YXNjcmlwdCBlbmZvcmNlcyB0aGUgcnVsZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIHdhcyBzZWxlY3RlZCBiZWZvcmUgdGhlIGZvcm0gY2FuIGJlIHN1Ym1pdHRlZC4KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTLHNlbGVjdGVkTm9kZUlkcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyk7Ci0gICAgQWRkVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IEFkZFRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2VsZWN0ZWROb2RlSWRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxzZWxlY3RlZE5vZGVJZHNbaV0pOwotICAgICAgaWYgKGFjdGlvbi5mYXZvcml0ZUV4aXN0cygpKSB7Ci0gICAgICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZSBub2RlID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQoc2VsZWN0ZWROb2RlSWRzW2ldKSk7Ci0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9GQVZPUklURV9BTFJFQURZX0VYSVNUUyIsbm9kZU5hbWUpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTZiNzYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5hc3NlcnRpb24uUHVibGlzaGVyQXNzZXJ0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gZXh0ZW5kcyBDb21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLQotICAgIC8vIGlkcyBmcm9tIHVkZGlPYmplY3RzX3RhYmxlLmpzcAotICAgIFN0cmluZ1tdIHNlbGVjdGVkQnVzSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgaWYgKHNlbGVjdGVkQnVzSWRzID09IG51bGwgfHwgc2VsZWN0ZWRCdXNJZHMubGVuZ3RoID09IDApIHsKLSAgICAgIC8vIFN5bmNocm9uaXplIGNsaWVudCB2aWV3IGFuZCBzZXJ2ZXIgbW9kZWwgKHVkZGlPYmplY3RfdGFibGUuanNwKQotICAgICAgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBzZWxlY3RlZEJ1c0lkcyk7Ci0gICAgICAvLyBTeW5jaHJvbml6ZSBjbGllbnQgdmlldyBhbmQgc2VydmVyIG1vZGVsICh1ZGRpT2JqZWN0X3RhYmxlLmpzcCkKLSAgICAgIHN5bmNocm9uaXplVURESU9iamVjdFRhYmxlKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nW10gYXNzZXJ0aW9uVHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRSk7Ci0gICAgaWYgKGFzc2VydGlvblR5cGVzICE9IG51bGwgJiYgYXNzZXJ0aW9uVHlwZXMubGVuZ3RoID4gMCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEUsIGFzc2VydGlvblR5cGVzKTsKLSAgICBlbHNlCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotCi0gICAgU3RyaW5nW10gZGlyZWN0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19ESVJFQ1RJT04pOwotICAgIGlmIChkaXJlY3Rpb25zICE9IG51bGwgJiYgZGlyZWN0aW9ucy5sZW5ndGggPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfRElSRUNUSU9OLCBkaXJlY3Rpb25zKTsKLSAgICBlbHNlCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBsb2cgaW4KLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIH0KLSAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhwdWJsaXNoVVJMKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1c2VySUQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJRCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJRCk7Ci0gICAgICB9Ci0gIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklEKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnaXN0cnlFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIGxvZyBpbiBmaXJzdAotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCwgdXNlcklELCBwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIHRlKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHRlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpZS50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShtZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgVURESVByb3h5IHByb3h5ID0gcmVnaXN0cnlFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRDcmVkKCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLQotICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBvd25lZCBidXNpbmVzcwotICAgIC8vIGlmIG5vdCwgdGhlIEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gY2Fubm90IGJlIHBlcmZvcm1lZAotICAgIGlmICghaXNCdXNpbmVzc093bmVkKGJ1c0VsZW1lbnQpKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9UX09XTkVEX0JVU0lORVNTIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIFN0cmluZ1tdIGFzc2VydGlvblR5cGVzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEUpOwotICAgICAgU3RyaW5nW10gZGlyZWN0aW9ucyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19ESVJFQ1RJT04pOwotICAgICAgU3RyaW5nIHRoaXNCdXNpbmVzc0tleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpOwotCi0gICAgICAvLyBnZXQgYWxsIHNlbGVjdGVkIGJ1c2luZXNzZXMKLSAgICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleSk7Ci0gICAgICBWZWN0b3Igc2VsZWN0ZWRCdXNpbmVzc2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TKTsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSBzZWxlY3RlZEJ1c2luZXNzZXMuZWxlbWVudHMoKTsKLSAgICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgIC8vIGNyZWF0ZSBhIHZlY3RvciBvZiBwdWJsaXNoZXIgYXNzZXJ0aW9ucyBiYXNlZCBvbiBhbGwgdGhlIHNlbGVjdGVkIGJ1c2luZXNzZXMKLSAgICAgIFZlY3RvciBwdWJBc3NlcnRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBpbnQgaSA9IDA7Ci0gICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIEJ1c2luZXNzRW50aXR5IHNwID0gKEJ1c2luZXNzRW50aXR5KWxlLmdldE9iamVjdCgpOwotICAgICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZiA9IG5ldyBLZXllZFJlZmVyZW5jZShhc3NlcnRpb25UeXBlc1tpXSwgYXNzZXJ0aW9uVHlwZXNbaV0sIFRNb2RlbC5SRUxBVElPTlNISVBTX1RNT0RFTF9LRVkpOwotICAgICAgICBpZiAoSW50ZWdlci5wYXJzZUludChkaXJlY3Rpb25zW2ldKSA9PSBVRERJQWN0aW9uSW5wdXRzLkRJUkVDVElPTl9UTykKLSAgICAgICAgICBwdWJBc3NlcnRpb25WZWN0b3IuYWRkKG5ldyBQdWJsaXNoZXJBc3NlcnRpb24oc3AuZ2V0QnVzaW5lc3NLZXkoKSwgdGhpc0J1c2luZXNzS2V5LCBrZXllZFJlZikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHViQXNzZXJ0aW9uVmVjdG9yLmFkZChuZXcgUHVibGlzaGVyQXNzZXJ0aW9uKHRoaXNCdXNpbmVzc0tleSwgc3AuZ2V0QnVzaW5lc3NLZXkoKSwga2V5ZWRSZWYpKTsKLSAgICAgICAgaSsrOwotICAgICAgfQotCi0gICAgICAvLyBwcm94eS5hZGRfcHVibGlzaGVyQXNzZXJ0aW9ucyguLi4pCi0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSBwcm94eS5hZGRfcHVibGlzaGVyQXNzZXJ0aW9ucyhyZWdpc3RyeUVsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgcHViQXNzZXJ0aW9uVmVjdG9yKTsKLQotICAgICAgLy8gcmVmcmVzaCBwdWJsaXNoZXIgYXNzZXJ0aW9ucyBpZmYgcHJveHkgcmVwb3J0cyBzdWNjZXNzCi0gICAgICBpZiAocmVwb3J0LnN1Y2Nlc3MoKSkgewotICAgICAgICBzZWxlY3RlZEJ1c2luZXNzZXMucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgICAgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gc2hvd1BBQWN0aW9uID0gbmV3IFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBzaG93UEFBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBPYmplY3QgaWRzID0gcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICAgICAgaWYgKGlkcyAhPSBudWxsKQotICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBpZHMpOwotICAgICAgICBzaG93UEFBY3Rpb24ucnVuKCk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiByZXBvcnQuc3VjY2VzcygpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gdWRkaWUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChpKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWMzM2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQ2F0ZWdvcnlNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuQnVzaW5lc3NOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlSW50ZXJmYWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIFVERElOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL0NoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiByZWdpc3RyeUV4aXN0cyhTdHJpbmcgcmVnaXN0cnlOYW1lLE5vZGUgcmVnaXN0cnlOb2RlKQotICB7Ci0gICAgcmVnaXN0cnlOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfTkFNRSxyZWdpc3RyeU5hbWUpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBidXNpbmVzc0V4aXN0cyhTdHJpbmcgYnVzaW5lc3NOYW1lLE5vZGUgYnVzaW5lc3NOb2RlKQotICB7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWJ1c2luZXNzTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfTkFNRSxidXNpbmVzc05hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19LRVksIGJ1c2luZXNzS2V5KTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpOwotICB9Ci0KLSAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHNlcnZpY2VFeGlzdHMoU3RyaW5nIHNlcnZpY2VOYW1lLE5vZGUgc2VydmljZU5vZGUpCi0gIHsKLSAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClzZXJ2aWNlTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCkuZ2V0U2VydmljZUtleSgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9OQU1FLHNlcnZpY2VOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0tFWSxzZXJ2aWNlS2V5KTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBzZXJ2aWNlSW50ZXJmYWNlRXhpc3RzKFN0cmluZyBzaU5hbWUsTm9kZSBzaU5vZGUpCi0gIHsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2lOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHRNb2RlbEtleSA9IHNpRWxlbWVudC5nZXRUTW9kZWwoKS5nZXRUTW9kZWxLZXkoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsc2lOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJLGlucXVpcnlVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGFkZFJlZ2lzdHJ5VG9GYXZvcml0ZXMoU3RyaW5nIHJlZ2lzdHJ5TmFtZSxOb2RlIHJlZ2lzdHJ5Tm9kZSkKLSAgewotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9QVUJMSVNIX0FQSSxwdWJsaXNoVVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX0lOUVVJUllfQVBJLGlucXVpcnlVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfTkFNRSxyZWdpc3RyeU5hbWUpOwotICAgIEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0VudW0gPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXNFbnVtICE9IG51bGwpCi0gICAgewotICAgICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9DQVRFR09SSUVTX0VOVU0sdXNlckRlZmluZWRDYXRlZ29yaWVzRW51bSk7Ci0gICAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9QTFVHSU5fTUVUQURBVEFfRElSRUNUT1JZLGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkpOwotICAgIH0KLSAgICByZXR1cm4gYWRkVG9GYXZvcml0ZXModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkQnVzaW5lc3NUb0Zhdm9yaXRlcyhTdHJpbmcgYnVzaW5lc3NOYW1lLE5vZGUgYnVzaW5lc3NOb2RlKQotICB7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWJ1c2luZXNzTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfTkFNRSxidXNpbmVzc05hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19LRVksIGJ1c2luZXNzS2V5KTsKLSAgICByZXR1cm4gYWRkVG9GYXZvcml0ZXModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZGRTZXJ2aWNlVG9GYXZvcml0ZXMoU3RyaW5nIHNlcnZpY2VOYW1lLE5vZGUgc2VydmljZU5vZGUpCi0gIHsKLSAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClzZXJ2aWNlTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCkuZ2V0U2VydmljZUtleSgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9OQU1FLHNlcnZpY2VOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0tFWSxzZXJ2aWNlS2V5KTsKLSAgICByZXR1cm4gYWRkVG9GYXZvcml0ZXModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGFkZFNlcnZpY2VJbnRlcmZhY2VUb0Zhdm9yaXRlcyhTdHJpbmcgc2lOYW1lLE5vZGUgc2lOb2RlKQotICB7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNpTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyB0TW9kZWxLZXkgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCkuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLHNpTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSx0TW9kZWxLZXkpOwotICAgIHJldHVybiBhZGRUb0Zhdm9yaXRlcyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICBTdHJpbmcgbm9kZU5hbWUgPSBub2RlLmdldE5vZGVOYW1lKCk7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBSZWdpc3RyeU5vZGUpCi0gICAgICByZXR1cm4gcmVnaXN0cnlFeGlzdHMobm9kZU5hbWUsbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEJ1c2luZXNzTm9kZSkKLSAgICAgIHJldHVybiBidXNpbmVzc0V4aXN0cyhub2RlTmFtZSxub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICAgICByZXR1cm4gc2VydmljZUV4aXN0cyhub2RlTmFtZSxub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZU5vZGUpCi0gICAgICByZXR1cm4gc2VydmljZUludGVyZmFjZUV4aXN0cyhub2RlTmFtZSxub2RlKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgU3RyaW5nIG5vZGVOYW1lID0gbm9kZS5nZXROb2RlTmFtZSgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGJvb2xlYW4gYWRkVG9GYXZvcml0ZXNSZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFJlZ2lzdHJ5Tm9kZSkKLSAgICB7Ci0gICAgICBhZGRUb0Zhdm9yaXRlc1Jlc3VsdCA9IGFkZFJlZ2lzdHJ5VG9GYXZvcml0ZXMobm9kZU5hbWUsbm9kZSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgRW51bWVyYXRpb24gZSA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCk7Ci0gICAgICBpZiAoZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgewotICAgICAgICAgIENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICBUaHJvd2FibGUgZXJyb3JFeGNlcHRpb24gPSBjYXRlZ29yeU1vZGVsLmdldEVycm9yRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgaWYgKGVycm9yRXhjZXB0aW9uICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IHtjYXRlZ29yeU1vZGVsLmdldERpc3BsYXlOYW1lKCksZXJyb3JFeGNlcHRpb24uZ2V0TWVzc2FnZSgpfTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfU0FWSU5HX0NBVEVHT1JZX0RBVEEiLGFyZ3MpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEJ1c2luZXNzTm9kZSkKLSAgICAgIGFkZFRvRmF2b3JpdGVzUmVzdWx0ID0gYWRkQnVzaW5lc3NUb0Zhdm9yaXRlcyhub2RlTmFtZSxub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICAgICBhZGRUb0Zhdm9yaXRlc1Jlc3VsdCA9IGFkZFNlcnZpY2VUb0Zhdm9yaXRlcyhub2RlTmFtZSxub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZU5vZGUpCi0gICAgICBhZGRUb0Zhdm9yaXRlc1Jlc3VsdCA9IGFkZFNlcnZpY2VJbnRlcmZhY2VUb0Zhdm9yaXRlcyhub2RlTmFtZSxub2RlKTsKLSAgICBpZiAoYWRkVG9GYXZvcml0ZXNSZXN1bHQpCi0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fRkFWT1JJVEVfQURERUQiLG5vZGVOYW1lKSk7Ci0gICAgZWxzZQotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9GQVZPUklURV9OT1RfQURERUQiLG5vZGVOYW1lKSk7Ci0gICAgcmV0dXJuIGFkZFRvRmF2b3JpdGVzUmVzdWx0OyAgICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBhZGRUb0Zhdm9yaXRlcyhIYXNodGFibGUgdGFibGUsIFN0cmluZyByZWwpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgZmF2Tm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IGZhdlJvb3RFbGVtZW50ID0gZmF2Tm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSb290RWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdkZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGZhdkZvbGRlckVsZW1lbnQuYWRkRmF2b3JpdGUodGFibGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlLCBTdHJpbmcgcmVsKQotICB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIGZhdk5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBUcmVlRWxlbWVudCBmYXZSb290RWxlbWVudCA9IGZhdk5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZmF2Um9vdEVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICBpZiAoIWUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgIHJldHVybiBmYXZGb2xkZXJFbGVtZW50LmZhdm9yaXRlRXhpc3RzKHRhYmxlKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODNkNmY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotCi1wdWJsaWMgY2xhc3MgQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHJpdmF0ZSBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIHJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25fOwotICBwdWJsaWMgQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uXyA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfID0gcmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbl8uZ2V0UHJvcGVydHlUYWJsZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgTm9kZSBidXNpbmVzc05vZGUgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzaW5lc3NFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClidXNpbmVzc05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBCdXNpbmVzc0VudGl0eSBidXNpbmVzc0VudGl0eSA9IGJ1c2luZXNzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgIExpc3RFbGVtZW50IGJ1c0xpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KGJ1c2luZXNzRW50aXR5KTsKLSAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LmFkZEVsZW1lbnQoYnVzTGlzdEVsZW1lbnQpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFksc2VydmljZUJ1c2luZXNzQ29weSk7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSByZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uXy5wcm9jZXNzT3RoZXJzKHBhcnNlcixmb3JtVG9vbFBJKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGVfLmNvbnRhaW5zS2V5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKSkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUixidXNpbmVzc0VudGl0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gcmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbl8ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWM3MDg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLQotcHVibGljIGNsYXNzIEJ1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwcml2YXRlIFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uIHJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uXzsKLQotICBwdWJsaWMgQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25fID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfID0gcmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25fLmdldFByb3BlcnR5VGFibGUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIE5vZGUgYnVzaW5lc3NOb2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c2luZXNzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzaW5lc3NOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgQnVzaW5lc3NFbnRpdHkgYnVzaW5lc3NFbnRpdHkgPSBidXNpbmVzc0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICBMaXN0RWxlbWVudCBidXNMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChidXNpbmVzc0VudGl0eSk7Ci0gICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2VydmljZUJ1c2luZXNzQ29weS5hZGRFbGVtZW50KGJ1c0xpc3RFbGVtZW50KTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsgCi0gICAgYm9vbGVhbiByZXN1bHQgPSByZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbl8ucHJvY2Vzc090aGVycyhwYXJzZXIsZm9ybVRvb2xQSSk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlXy5jb250YWluc0tleShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUixidXNpbmVzc0VudGl0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gcmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25fLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhOTQ1OGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuQnVzaW5lc3NOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotCi1wdWJsaWMgY2xhc3MgQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbiBleHRlbmRzIFVERElOb2RlQWN0aW9uCi17Ci0gIHByaXZhdGUgQnVzaW5lc3NOb2RlIGJ1c05vZGVfOwotICBwdWJsaWMgQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBidXNOb2RlXyA9IG51bGw7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVCdXNpbmVzcygpCi0gIHsKLSAgICBpbnQgYnVzTm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgYnVzTm9kZV8gPSAoQnVzaW5lc3NOb2RlKW5vZGVNYW5hZ2VyXy5nZXROb2RlKGJ1c05vZGVJZCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWJ1c05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSB2ZXJpZnlBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIEJ1c2luZXNzRW50aXR5IHNwID0gKEJ1c2luZXNzRW50aXR5KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotCi0gICAgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfQlVTSU5FU1NfU0VSVklDRVMiLGJ1c05vZGVfLmdldE5vZGVOYW1lKCkpKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUixzcCk7ICAgIAotICAgIAotICAgIExpc3RFbGVtZW50IGJ1c2luZXNzTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQoc3ApOwotICAgIGJ1c2luZXNzTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKGJ1c05vZGVfLmdldE5vZGVJZCgpLGJ1c05vZGVfLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSxidXNOb2RlXy5nZXRWaWV3SWQoKSk7Ci0gICAgVmVjdG9yIGJ1c2luZXNzTGlzdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBidXNpbmVzc0xpc3RWZWN0b3IuYWRkRWxlbWVudChidXNpbmVzc0xpc3RFbGVtZW50KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MsYnVzaW5lc3NMaXN0VmVjdG9yKTsKLSAgICAKLSAgICAKLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGJlYjg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLQotcHVibGljIGNsYXNzIENsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbiBleHRlbmRzIENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbgotewotICBwdWJsaWMgQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGVsZW1lbnQuZGlzY29ubmVjdFJlbChlbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoTW9kZWxDb25zdGFudHMuUkVMX0NISUxEUkVOKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FmNjNlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5DbGVhck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24gZXh0ZW5kcyBDbGVhck5vZGVBY3Rpb24KLXsKLSAgcHVibGljIENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxTdHJpbmcudmFsdWVPZihjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGVJZCgpKSk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJuYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAicHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAic3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9zdGF0dXNfY29udGVudC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MmU1NjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBDbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlSWRzICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTLHNlbGVjdGVkTm9kZUlkcyk7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgZm9yIChpbnQgaT0wO2k8c2VsZWN0ZWROb2RlSWRzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsc2VsZWN0ZWROb2RlSWRzW2ldKTsKLSAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzQwMzk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVnaXN0ZXJlZEluZm87Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0KLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdpc3RyeU5vZGVfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0xvZ2dlZEluXzsKLQotICBwdWJsaWMgQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLQotICAgIHJlZ2lzdHJ5Tm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyAhPSBudWxsKQotICAgICAgaXNMb2dnZWRJbl8gPSAoKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCkpLmlzTG9nZ2VkSW4oKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHN5bmNocm9uaXplVURESU9iamVjdFRhYmxlKCkgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkQnVzSWRzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXkpOwotICAgIFZlY3RvciBidXNpbmVzc1ZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyk7Ci0gICAgTGlzdE1hbmFnZXIgYnVzaW5lc3NDb3B5ID0gKExpc3RNYW5hZ2VyKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlNfQ09QWSk7Ci0gICAgaWYgKHNlbGVjdGVkQnVzSWRzID09IG51bGwgfHwgc2VsZWN0ZWRCdXNJZHMubGVuZ3RoIDw9IDApIHsKLSAgICAgIGJ1c2luZXNzVmVjdG9yLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBidXNpbmVzc0NvcHkuY2xlYXIoKTsKLSAgICB9Ci0gICAgRW51bWVyYXRpb24gZSA9IGJ1c2luZXNzQ29weS5nZXRMaXN0RWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgYm9vbGVhbiBpc0lkRm91bmQgPSBmYWxzZTsKLSAgICAgIExpc3RFbGVtZW50IGxlID0gKExpc3RFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGludCBsaXN0RWxlbWVudFZpZXdJZCA9IGxlLmdldFZpZXdJZCgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxlY3RlZEJ1c0lkcy5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAobGlzdEVsZW1lbnRWaWV3SWQgPT0gSW50ZWdlci5wYXJzZUludChzZWxlY3RlZEJ1c0lkc1tpXSkpIHsKLSAgICAgICAgICBpc0lkRm91bmQgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIWlzSWRGb3VuZCkKLSAgICAgICAgYnVzaW5lc3NWZWN0b3IucmVtb3ZlKGxlKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0J1c2luZXNzT3duZWQoQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQpIHsKLSAgICBib29sZWFuIGlzQnVzaW5lc3NPd25lZCA9IGZhbHNlOwotICAgIFN0cmluZyBpc0J1c2luZXNzT3duZWRTdHJpbmcgPSBidXNFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoVURESU1vZGVsQ29uc3RhbnRzLklTX0JVU0lORVNTX09XTkVEKTsKLSAgICBpZiAoaXNCdXNpbmVzc093bmVkU3RyaW5nICE9IG51bGwpIHsKLSAgICAgIGlzQnVzaW5lc3NPd25lZCA9IEJvb2xlYW4udmFsdWVPZihpc0J1c2luZXNzT3duZWRTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChpc0xvZ2dlZEluXykgewotICAgICAgdHJ5IHsKLSAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgICBSZWdpc3RlcmVkSW5mbyByaSA9IHByb3h5LmdldF9yZWdpc3RlcmVkSW5mbyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCkpOwotICAgICAgICBWZWN0b3IgYmVWZWN0b3IgPSByaS5nZXRCdXNpbmVzc0luZm9zKCkuZ2V0QnVzaW5lc3NJbmZvVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBiZVZlY3Rvci5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7IAotICAgICAgICAgIEJ1c2luZXNzSW5mbyBiaSA9IChCdXNpbmVzc0luZm8paXQubmV4dCgpOwotICAgICAgICAgIGlmIChiaS5nZXRCdXNpbmVzc0tleSgpLmVxdWFscyhidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKSkpCi0gICAgICAgICAgeyAgCi0gICAgICAgICAgICBpc0J1c2luZXNzT3duZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJ1c0VsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuSVNfQlVTSU5FU1NfT1dORUQsIFN0cmluZy52YWx1ZU9mKGlzQnVzaW5lc3NPd25lZCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgIH0KLSAgICByZXR1cm4gaXNCdXNpbmVzc093bmVkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Db21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTg0YjRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQ29tcGxldGlvblN0YXR1czsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIENvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBleHRlbmRzIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24KLXsKLSAgcHVibGljIENvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0KLSAgICAvLyBpZHMgZnJvbSB1ZGRpT2JqZWN0c190YWJsZQotICAgIFN0cmluZ1tdIHNlbGVjdGVkQnVzSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgaWYgKHNlbGVjdGVkQnVzSWRzICE9IG51bGwgJiYgc2VsZWN0ZWRCdXNJZHMubGVuZ3RoID4gMCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgc2VsZWN0ZWRCdXNJZHMpOwotICAgIC8vIFN5bmNocm9uaXplIGNsaWVudCB2aWV3IGFuZCBzZXJ2ZXIgbW9kZWwgKHVkZGlPYmplY3RfdGFibGUuanNwKQotICAgIHN5bmNocm9uaXplVURESU9iamVjdFRhYmxlKCk7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGxvZyBpbgotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJRCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgIH0KLSAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySUQpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgICAgfQotCi0gICAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBpZHMgZnJvbSBwdWJsaXNoZXIgYXNzZXJ0aW9uIHRhYmxlCi0gICAgU3RyaW5nW10gcHViQXNzZXJ0aW9uc1ZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lEKTsKLSAgICBpZiAocHViQXNzZXJ0aW9uc1ZpZXdJZHMgPT0gbnVsbCB8fCBwdWJBc3NlcnRpb25zVmlld0lkcy5sZW5ndGggPT0gMCkKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lELCBwdWJBc3NlcnRpb25zVmlld0lkcyk7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgbG9nIGluIGZpcnN0Ci0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLCB1c2VySUQsIHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gdGUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGllLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKG1lLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0KLSAgICBVRERJUHJveHkgcHJveHkgPSByZWdpc3RyeUVsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldENyZWQoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgIExpc3RNYW5hZ2VyIHB1YkFzc2VydGlvbnMgPSBidXNFbGVtZW50LmdldFB1Ymxpc2hlckFzc2VydGlvbnMoKTsKLQotICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBvd25lZCBidXNpbmVzcwotICAgIC8vIGlmIG5vdCwgdGhlIEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gY2Fubm90IGJlIHBlcmZvcm1lZAotICAgIGlmICghaXNCdXNpbmVzc093bmVkKGJ1c0VsZW1lbnQpKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9UX09XTkVEX0JVU0lORVNTIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIFN0cmluZ1tdIHB1YkFzc2VydGlvblZpZXdJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lEKTsKLSAgICAgIFZlY3RvciBwdWJBc3NlcnRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHViQXNzZXJ0aW9uVmlld0lkcy5sZW5ndGg7IGkrKykgewotICAgICAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludChwdWJBc3NlcnRpb25WaWV3SWRzW2ldKTsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBwdWJBc3NlcnRpb25zLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQgcHViQXNzZXJ0aW9uRWxlbWVudCA9IChQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIShwdWJBc3NlcnRpb25FbGVtZW50LmdldFN0YXR1cygpLmVxdWFscyhDb21wbGV0aW9uU3RhdHVzLkNPTVBMRVRFKSkpCi0gICAgICAgICAgcHViQXNzZXJ0aW9uVmVjdG9yLmFkZChwdWJBc3NlcnRpb25FbGVtZW50LmdldFB1Ymxpc2hlckFzc2VydGlvbigpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHB1YkFzc2VydGlvblZlY3Rvci5zaXplKCkgPD0gMCkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0lOQ09NUExFVEVfQVNTRVJUSU9OX1NFTEVDVEVEIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHByb3h5LmFkZF9wdWJsaXNoZXJBc3NlcnRpb25zKHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBwdWJBc3NlcnRpb25WZWN0b3IpOwotICAgICAgLy9yZXBvcnQgc3RhdHVzCi0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGorKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaikpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotCi0gICAgICBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBzaG93UEFBY3Rpb24gPSBuZXcgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBzaG93UEFBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgT2JqZWN0IGlkcyA9IHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgICBpZiAoaWRzICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBpZHMpOwotICAgICAgc2hvd1BBQWN0aW9uLnJ1bigpOwotCi0gICAgICByZXR1cm4gcmVwb3J0LnN1Y2Nlc3MoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHVkZGllLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGorKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaikpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIkV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvRmluZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvRmluZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjM3ZjhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0ZpbmRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5UGFyZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlF1ZXJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlUcmFuc2ZlclRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmluZEFjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgUXVlcnlFbGVtZW50IHF1ZXJ5RWxlbWVudF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgc3ViUXVlcnlLZXlfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeV87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlJdGVtXzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ05vZGVfOwotICBwcml2YXRlIGJvb2xlYW4gaXNSZWZyZXNoQWN0aW9uXzsKLQotICBwdWJsaWMgRmluZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBxdWVyeUVsZW1lbnRfID0gbnVsbDsKLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIGlzU3ViUXVlcnlHZXRfID0gZmFsc2U7Ci0gICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0gICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgICBpc1JlZnJlc2hBY3Rpb25fID0gZmFsc2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBTZXR1cCBmb3IgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcgotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIsIHBhcnNlcik7Ci0KLSAgICBuZXdTdWJRdWVyeV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCk7Ci0gICAgU3RyaW5nIGlzU3ViUXVlcnlHZXRTdHJpbmcgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICBuZXdTdWJRdWVyeUl0ZW1fID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNKTsKLSAgICBzdWJRdWVyeUtleV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgcXVlcnlOYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleV8pOwotICAgIGZvcm1Ub29sUEkuY2xlYXJFcnJvcnMoKTsKLQotICAgIGlmIChuZXdTdWJRdWVyeV8gIT0gbnVsbCAmJiBuZXdTdWJRdWVyeV8ubGVuZ3RoKCkgPiAwKQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLSAgICAgIAotICAgIGlmIChpc1N1YlF1ZXJ5R2V0U3RyaW5nICE9IG51bGwpCi0gICAgICBpc1N1YlF1ZXJ5R2V0XyA9IEJvb2xlYW4udmFsdWVPZihpc1N1YlF1ZXJ5R2V0U3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIGlmIChxdWVyeU5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUscXVlcnlOYW1lKTsKLQotICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHF1ZXJ5TmFtZSkgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9RVUVSWV9OQU1FIikpOwotICAgIH0KLQotICAgIGlmICghcHJvY2Vzc090aGVycyhwYXJzZXIsZm9ybVRvb2xQSSkgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAKLSAgICBmb3IgKGludCBpPTA7aTxyZW1vdmVkUHJvcGVydGllc18uc2l6ZSgpO2krKykKLSAgICAgIGZvcm1Ub29sUEkucmVtb3ZlUHJvcGVydHkocmVtb3ZlZFByb3BlcnRpZXNfLmVsZW1lbnRBdChpKSk7Ci0gICAgZm9ybVRvb2xQSS51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLSAgICAgIAotICAgIC8vIFByb2Nlc3MgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uIElmIHZhbGlkLCB0aGVzZSBzaG91bGQgYmUgc2V0IGluIHRoZSBmb3JtVG9vbCAobm90IHRoZSBmb3JtVG9vbFBJKS4KLSAgICBTdHJpbmcgb3duZWRDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEKTsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICBib29sZWFuIHZhbGlkYXRlQXV0aGVudGljYXRpb24gPSAob3duZWRDaGVja2VkICE9IG51bGwpICYmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpICYmICFvdmVycmlkZUF1dGhlbnRpY2F0aW9uVmFsaWRhdGlvbigpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgfSAgICAgIAotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgdmFsaWRhdGVBdXRoZW50aWNhdGlvbiAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKHVzZXJJZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgfQotCi0gICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgfSAgICAgICAgCi0gICAgICAKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBvdmVycmlkZUF1dGhlbnRpY2F0aW9uVmFsaWRhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlJbml0aWF0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUdldCgpCi0gIHsKLSAgICByZXR1cm4gaXNTdWJRdWVyeUdldF87Ci0gIH0gICAgCi0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdWJRdWVyeUtleSgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlLZXlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeUl0ZW0oKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5SXRlbV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFJlZnJlc2hBY3Rpb24oYm9vbGVhbiBpc1JlZnJlc2hBY3Rpb24pCi0gIHsKLSAgICBpc1JlZnJlc2hBY3Rpb25fID0gaXNSZWZyZXNoQWN0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1JlZnJlc2hBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGlzUmVmcmVzaEFjdGlvbl87Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRRdWVyeU5vZGUoKQotICB7Ci0gICAgLy8gSWYgdGhlIHF1ZXJ5RWxlbWVudCBhbHJlYWR5IGV4aXN0cywgcmVtb3ZlIGl0IGZpcnN0LgotICAgIFN0cmluZyBxdWVyeU5hbWUgPSBxdWVyeUVsZW1lbnRfLmdldE5hbWUoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBRdWVyeVBhcmVudEVsZW1lbnQgcXVlcnlQYXJlbnRFbGVtZW50ID0gcmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gcXVlcnlQYXJlbnRFbGVtZW50LmdldFF1ZXJpZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBRdWVyeUVsZW1lbnQgcWUgPSAoUXVlcnlFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChxZS5nZXROYW1lKCkuZXF1YWxzKHF1ZXJ5TmFtZSkpCi0gICAgICB7Ci0gICAgICAgIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgc3ViUXVlcnlUcmFuc2ZlclRhcmdldCA9IChTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KXFlLmdldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLlNVQlFVRVJZX1RSQU5TRkVSX1RBUkdFVCk7Ci0gICAgICAgIGlmIChzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ICE9IG51bGwgJiYgKHFlLmdldFF1ZXJ5VHlwZSgpID09IHF1ZXJ5RWxlbWVudF8uZ2V0UXVlcnlUeXBlKCkpKQotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8uc2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VULHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpOwotICAgICAgICBxZS5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoIWlzUmVmcmVzaEFjdGlvbl8pCi0gICAgewotICAgICAgLy8gV2UgY2FuIG1ha2Ugc2FmZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgbm9kZSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KLSAgICAgIGlmIChzdWJRdWVyeUtleV8gIT0gbnVsbCAmJiBzdWJRdWVyeUtleV8ubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFyZW50UXVlcnlLZXk7Ci0gICAgICAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gc3ViUXVlcnlLZXlfLmxhc3RJbmRleE9mKCc6Jyk7Ci0gICAgICAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID09IC0xKQotICAgICAgICAgIHBhcmVudFF1ZXJ5S2V5ID0gIiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJlbnRRdWVyeUtleSA9IHN1YlF1ZXJ5S2V5Xy5zdWJzdHJpbmcoMCxsYXN0U2VwYXJhdG9yUG9zKTsKLSAgICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHBhcmVudEZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWdldFNlbGVjdGVkRm9ybVRvb2woKSkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHBhcmVudFF1ZXJ5S2V5KTsKLSAgICAgICAgT2JqZWN0IHF1ZXJ5SXRlbSA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKTsKLSAgICAgICAgT2JqZWN0IHF1ZXJ5U3R5bGVCdXMgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyk7Ci0gICAgICAgIE9iamVjdCBxdWVyeVN0eWxlU2VyID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTKTsKLSAgICAgICAgT2JqZWN0IHF1ZXJ5U3R5bGVTZXJJbnQgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgICAgICAgSGFzaHRhYmxlIHBhcmVudFF1ZXJ5RGF0YSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgaWYgKHF1ZXJ5SXRlbSAhPSBudWxsKQotICAgICAgICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLCBxdWVyeUl0ZW0pOwotICAgICAgICBpZiAocXVlcnlTdHlsZUJ1cyAhPSBudWxsKQotICAgICAgICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLCBxdWVyeVN0eWxlQnVzKTsKLSAgICAgICAgaWYgKHF1ZXJ5U3R5bGVTZXIgIT0gbnVsbCkKLSAgICAgICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsIHF1ZXJ5U3R5bGVTZXIpOwotICAgICAgICBpZiAocXVlcnlTdHlsZVNlckludCAhPSBudWxsKQotICAgICAgICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsIHF1ZXJ5U3R5bGVTZXJJbnQpOwotICAgICAgICBxdWVyeUVsZW1lbnRfLnNldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLlNVQlFVRVJZX1RSQU5TRkVSX1RBUkdFVCxuZXcgU3ViUXVlcnlUcmFuc2ZlclRhcmdldChnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKSxzdWJRdWVyeUtleV8scGFyZW50UXVlcnlEYXRhKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHF1ZXJ5UGFyZW50RWxlbWVudC5jb25uZWN0KHF1ZXJ5RWxlbWVudF8sVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgUXVlcnlOb2RlIHF1ZXJ5Tm9kZSA9IChRdWVyeU5vZGUpKHJlZ05vZGVfLmdldENoaWxkTm9kZShxdWVyeVBhcmVudEVsZW1lbnQpLmdldENoaWxkTm9kZShxdWVyeUVsZW1lbnRfKSk7Ci0gICAgaW50IG5ld1NlbGVjdGVkTm9kZUlkOwotICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgMSByZXN1bHQsIHNlbGVjdCB0aGUgcmVzdWx0LiBPdGhlcndpc2UsIHNlbGVjdCB0aGUgcXVlcnkgbm9kZSB0byBwcmVzZW50IGEgc3VtbWFyeS4KLSAgICBpZiAocXVlcnlOb2RlLmdldENoaWxkTm9kZXMoKS5zaXplKCkgPT0gMSAmJiAoc3ViUXVlcnlLZXlfID09IG51bGwgfHwgc3ViUXVlcnlLZXlfLmxlbmd0aCgpID09IDApKQotICAgICAgbmV3U2VsZWN0ZWROb2RlSWQgPSAoKE5vZGUpKHF1ZXJ5Tm9kZS5nZXRDaGlsZE5vZGVzKCkuZWxlbWVudEF0KDApKSkuZ2V0Tm9kZUlkKCk7Ci0gICAgZWxzZQotICAgICAgbmV3U2VsZWN0ZWROb2RlSWQgPSBxdWVyeU5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSByZWdOb2RlXy5nZXROb2RlTWFuYWdlcigpOwotICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKG5ld1NlbGVjdGVkTm9kZUlkKTsKLSAgICBxdWVyeU5vZGUuc2V0RmluZFRvb2xQcm9wZXJ0aWVzKHRoaXMpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksc2VsZWN0ZWRUb29sLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKHRydWUpKTsKLSAgfQotICAKLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGggKyAxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aCAtIDFdID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3ZTBhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Mb2dpbkFkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwKLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbgotICogMjAwNjA0MjcgICAxMzY0NDkgY2xidXNoQHVzLmlibS5jb20gLSBDaHJpc3RvcGhlciBCdXNoICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmEucm1pLkFscmVhZHlCb3VuZEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlZ2lzdGVyZWRJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIExvZ2luQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uIHsKLSAgIHB1YmxpYyBMb2dpbkFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLCBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgICAgcHJvcGVydHlUYWJsZV8KLSAgICAgICAgICAgIC5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLCBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfU0VBUkNIX1NFVCwgU3RyaW5nCi0gICAgICAgICAgICAudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9TRUFSQ0hfU0VUKSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfUkVTVUxUUywgU3RyaW5nCi0gICAgICAgICAgICAudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKSk7Ci0gICB9Ci0KLSAgIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkKLSAgICAgICAgIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgICBTdHJpbmcgb3duZWRDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEKTsKLQotICAgICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICAgIGlmIChvd25lZENoZWNrZWQgIT0gbnVsbCkKLSAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX09XTkVELCBvd25lZENoZWNrZWQpOwotICAgICAgZWxzZQotICAgICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19PV05FRCk7Ci0KLSAgICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBib29sZWFuIGF0dGVtcHRpbmdEb3VibGVMb2dpbigpewotCSAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotCSAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotCSAgIE5vZGUgcm9vdE5vZGUgPSByZWdOb2RlXy5nZXROb2RlTWFuYWdlcigpLmdldFJvb3ROb2RlKCk7Ci0gICAgICAgVmVjdG9yIGFsbE5vZGVzID0gcm9vdE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgIAotICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCBhbGxOb2Rlcy5zaXplKCk7IGsrKyl7Ci0gICAgICAJIE5vZGUgbiA9IChOb2RlKWFsbE5vZGVzLmdldChrKTsKLSAgICAgIAkgaWYgKG4gaW5zdGFuY2VvZiBSZWdpc3RyeU5vZGUpewotICAgICAgCQkgUmVnaXN0cnlFbGVtZW50IG15RWxlbWVudCA9ICgoUmVnaXN0cnlFbGVtZW50KW4uZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgICAJCSBpZiAobi5nZXROb2RlSWQoKSAhPSByZWdOb2RlXy5nZXROb2RlSWQoKSAmJiBwdWJsaXNoVVJMLmVxdWFscyhteUVsZW1lbnQuZ2V0UHVibGlzaFVSTCgpKSkKLSAgICAgIAkJCSBpZih1c2VySWQuZXF1YWxzKG15RWxlbWVudC5nZXRVc2VySWQoKSkpCi0gICAgICAJCQkJIHJldHVybiB0cnVlOwotICAgICAgCSB9Ci0gICAgICAgfQotICAgICAgIHJldHVybiBmYWxzZTsKLSAgIH0KLSAgIAotICAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkgewotICAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysgVHJ5aW5nIHRvIGxvZ2luICsrKysrIik7Ci0gICAgICB0cnkgewotICAgICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOwotICAgICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgICAgIGludCBtYXhSZXN1bHRzID0gMzAwOwotICAgICAgICAgCi0gICAgICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYQotICAgICAgICAgLy8gcXVlcnkgbm9kZS4KLSAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCkgcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIAotICAgICAgICAgICAgICAgICAKLSAgICAgICAgIGlmKGF0dGVtcHRpbmdEb3VibGVMb2dpbigpKQotICAgICAgICAJIHRocm93IG5ldyBBbHJlYWR5Qm91bmRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PX01VTFRJUExFX0xPR0lOIikpOyAKLSAgICAgICAgIAotICAgICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsIHVzZXJJZCwgcGFzc3dvcmQpOwotCi0gICAgICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgICAgIEJ1c2luZXNzSW5mb3MgYnVzSW5mb3MgPSBudWxsOwotICAgICAgICAgVE1vZGVsSW5mb3MgdG1JbmZvcyA9IG51bGw7Ci0KLSAgICAgICAgIFJlZ2lzdGVyZWRJbmZvIHJpID0gcHJveHkuZ2V0X3JlZ2lzdGVyZWRJbmZvKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSk7Ci0gICAgICAgICBidXNJbmZvcyA9IHJpLmdldEJ1c2luZXNzSW5mb3MoKTsKLSAgICAgICAgIHRtSW5mb3MgPSByaS5nZXRUTW9kZWxJbmZvcygpOwotCi0gICAgICAgICBpbnQgZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPSBNYXRoLm1pbihtYXhSZXN1bHRzLCBidXNJbmZvcy5zaXplKCkpOwotICAgICAgICAgVmVjdG9yIGJ1c2luZXNzS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXM7IGkrKykgewotICAgICAgICAgICAgQnVzaW5lc3NJbmZvIGJ1c0luZm8gPSAoQnVzaW5lc3NJbmZvKSBidXNJbmZvcy5nZXQoaSk7Ci0gICAgICAgICAgICBidXNpbmVzc0tleXMuYWRkRWxlbWVudChidXNJbmZvLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgICAgfQotCi0gICAgICAgICBpZiAoZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKSB7Ci0gICAgICAgICAgICAgICBWZWN0b3IgYmVWZWN0b3IgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoYnVzaW5lc3NLZXlzKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgICAgICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSBudWxsOwotICAgICAgICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlcyBicyA9IG51bGw7Ci0gICAgICAgICAgICAgICBpbnQgc2l6ZSA9IGJlVmVjdG9yLnNpemUoKTsKLSAgICAgICAgICAgICAgIGlmIChzaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgIGJlID0gKEJ1c2luZXNzRW50aXR5KSBiZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShiZSwgcmVnRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBicyA9IGJlLmdldEJ1c2luZXNzU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgIGlmIChicyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IgdlNlcnZpY2VzID0gYnMuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VydmljZXMgPSB2U2VydmljZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2aWNlczsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShicy5nZXQoaiksIHJlZ0VsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlCi0gICAgICAgICAgICAgICAgICAgICAgICAuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NFU19GT1VORCIsIFN0cmluZy52YWx1ZU9mKHNpemUpKSk7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGludCBmaW5hbE51bWJlck9mVE1vZGVscyA9IE1hdGgubWluKG1heFJlc3VsdHMsIHRtSW5mb3Muc2l6ZSgpKTsKLSAgICAgICAgIFZlY3RvciB0TW9kZWxLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaW5hbE51bWJlck9mVE1vZGVsczsgaSsrKSB7Ci0gICAgICAgICAgICBUTW9kZWxJbmZvIHRtSW5mbyA9IChUTW9kZWxJbmZvKSB0bUluZm9zLmdldChpKTsKLSAgICAgICAgICAgIHRNb2RlbEtleXMuYWRkRWxlbWVudCh0bUluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgICAgfQotCi0gICAgICAgICBpZiAoZmluYWxOdW1iZXJPZlRNb2RlbHMgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKSB7Ci0gICAgICAgICAgICAgICBWZWN0b3IgZmluYWxUTW9kZWxWZWN0b3IgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleXMpLmdldFRNb2RlbFZlY3RvcigpOwotCi0gICAgICAgICAgICAgICBpbnQgc2l6ZSA9IGZpbmFsVE1vZGVsVmVjdG9yLnNpemUoKTsKLSAgICAgICAgICAgICAgIGlmIChzaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgVE1vZGVsIHRtID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICB0bSA9IChUTW9kZWwpIGZpbmFsVE1vZGVsVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKHRtLCByZWdFbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiLCBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZU9mKHNpemUpKSk7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGludCBpZCA9IDE7Ci0gICAgICAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotCi0gICAgICAgICAvLyB3ZSBhcmUgbG9nZ2VkIGluIHNvIGNoYW5nZSB0aGUgbG9naW5Ub29sIHRvIGFjdCBhcyBhIGxvZ291dFRvb2w7Ci0gICAgICAgICByZWdOb2RlLmdldExvZ2luVG9vbCgpLnNldEFsdFRleHQodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MT0dPVVQiKSk7Ci0gICAgICAgICByZWdOb2RlLmdldExvZ2luVG9vbCgpLnNldFRvTG9nb3V0TGluaygpOwotICAgICAgICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IHJlZ0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgICAgU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICAgICBzWzBdID0gcmVnaXN0cnlOYW1lOwotICAgICAgICAgc1sxXSA9IHVzZXJJZDsKLSAgICAgICAgIHJlZ0VsZW1lbnQuc2V0TmFtZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fTE9HR0VEX0lOX05PREUiLCBzKSk7Ci0KLSAgICAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA+IDApIHsKLSAgICAgICAgICAgIE5vZGUgcGJlTm9kZSA9IHJlZ05vZGUuZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQoKSk7Ci0gICAgICAgICAgICBpZCA9IHBiZU5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgICB9IGVsc2UgaWYgKGZpbmFsTnVtYmVyT2ZUTW9kZWxzID4gMCkgewotICAgICAgICAgICAgTm9kZSBwc2lOb2RlID0gcmVnTm9kZS5nZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgICAgICAgICBpZCA9IHBzaU5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgICB9IAotICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJOb2RlIGlkID0gIiArIGlkKTsKLSAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLnNldFNlbGVjdGVkTm9kZUlkKGlkKTsKLSAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0KLSAgICAgICAgIGlmICgoZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPCAxKSAmJiAoZmluYWxOdW1iZXJPZlRNb2RlbHMgPCAxKSkKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19OT19CVVNJTkVTU0VTX09SX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIpKTsKLQotICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkgewotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9IGNhdGNoIChVRERJRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9IGNhdGNoIChBbHJlYWR5Qm91bmRFeGNlcHRpb24gZSkgewotICAgIAkgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCSBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiQWxyZWFkeUJvdW5kRXhjZXB0aW9uIik7Ci0gICAgCSBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTG9nb3V0QWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc2ZGYzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTG9nb3V0QWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBMb2dvdXRBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZWdOb2RlXy5nZXRMb2dpblRvb2woKS5zZXRUb1JlZ2lzdHJ5TGluaygpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAocmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpIHsKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9nb3V0KCk7Ci0gICAgICAgIHJlZ0VsZW1lbnQucmVtb3ZlKCk7Ci0gICAgICAgIHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCkuc2V0U2VsZWN0ZWROb2RlSWQoMCk7ICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTg2ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAyMDA3MDQxOSAgIDE4Mjg2NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5QZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgc3ViUXVlcnlLZXlfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeV87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlJdGVtXzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ05vZGVfOwotCi0gIHB1YmxpYyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgc3ViUXVlcnlLZXlfID0gbnVsbDsKLSAgICBpc1N1YlF1ZXJ5R2V0XyA9IGZhbHNlOwotICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotICAgIHJlZ05vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgbmV3U3ViUXVlcnlfID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQpOwotICAgIFN0cmluZyBpc1N1YlF1ZXJ5R2V0U3RyaW5nID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgbmV3U3ViUXVlcnlJdGVtXyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSk7Ci0gICAgc3ViUXVlcnlLZXlfID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nW10gcmVmZXJlbmNlZFNlcnZpY2VzQ2hlY2tib3hlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5SRUZFUkVOQ0VEX1NFUlZJQ0VfU0VMRUNUX1NUQVRFKTsKLSAgICBTdHJpbmdbXSBzZXJ2aWNlTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRSk7Ci0gICAgU3RyaW5nIG9wZXJhdGlvbiA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT04pOwotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBmb3JtVG9vbFBJLmNsZWFyRXJyb3JzKCk7Ci0KLSAgICBpZiAobmV3U3ViUXVlcnlfICE9IG51bGwgJiYgbmV3U3ViUXVlcnlfLmxlbmd0aCgpID4gMCkKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0KLSAgICBpZiAoaXNTdWJRdWVyeUdldFN0cmluZyAhPSBudWxsKQotICAgICAgaXNTdWJRdWVyeUdldF8gPSBCb29sZWFuLnZhbHVlT2YoaXNTdWJRdWVyeUdldFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0KLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT04sb3BlcmF0aW9uKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTik7Ci0KLSAgICBpZiAocmVmZXJlbmNlZFNlcnZpY2VzQ2hlY2tib3hlcyAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUkVGRVJFTkNFRF9TRVJWSUNFX1NFTEVDVF9TVEFURSxyZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlJFRkVSRU5DRURfU0VSVklDRV9TRUxFQ1RfU1RBVEUpOwotCi0gICAgaWYgKHNlcnZpY2VOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHNlcnZpY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMpOwotICAgICAgaWYgKHNlcnZpY2VzID09IG51bGwpCi0gICAgICAgIHNlcnZpY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgSGFzaHRhYmxlIHJlc3VsdEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgICAgICByZXN1bHRIYXNoLnB1dChzZXJ2aWNlTm9kZUlkc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZXMuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZXMuZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAocmVzdWx0SGFzaC5nZXQoU3RyaW5nLnZhbHVlT2YobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCkpKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmljZXMucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICAgIGktLTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMsc2VydmljZXMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTKTsKLQotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgewotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocHVibGlzaFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgICAgfQotCi0gICAgICBpZiAodXNlcklkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgICAgfQotCi0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJZCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGk9MDtpPHJlbW92ZWRQcm9wZXJ0aWVzXy5zaXplKCk7aSsrKQotICAgICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShyZW1vdmVkUHJvcGVydGllc18uZWxlbWVudEF0KGkpKTsKLSAgICBmb3JtVG9vbFBJLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFN0cmluZyBvcGVyYXRpb25TdHJpbmcgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTik7Ci0gICAgaW50IG9wZXJhdGlvbiA9IEludGVnZXIucGFyc2VJbnQob3BlcmF0aW9uU3RyaW5nKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgVmVjdG9yIHJlZmVyZW5jZWRTZXJ2aWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVMpOwotICAgIGJvb2xlYW4gb3BlcmF0aW9uUmVzdWx0ID0gdHJ1ZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgY3VycmVudFNQID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGN1cnJlbnRTUC5nZXRCdXNpbmVzc0tleSgpKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKTsKLSAgICAgIAotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgICAKLSAgICAgIEhhc2h0YWJsZSBzZXJ2aWNlc0hhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBWZWN0b3IgYmFja3VwQnVzU2VydmljZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHN3aXRjaCAob3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OX0FERDoKLSAgICAgICAgICBWZWN0b3Igc2VydmljZXMgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTKTsgICAgICAgICAgCi0gICAgICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZXMuc2l6ZSgpO2krKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBMaXN0RWxlbWVudCBzZXJ2aWNlTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZXMuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlzZXJ2aWNlTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICBzZXJ2aWNlc0hhc2gucHV0KGJzLmdldFNlcnZpY2VLZXkoKSxicyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgbGlzdCBvZiBCdXNpbmVzc1NlcnZpY2VzIGZvciByb2xsYmFjayBvcGVyYXRpb25zLgotICAgICAgICAgIGJhY2t1cEFuZFVwZGF0ZUJ1c2luZXNzU2VydmljZXMoYmFja3VwQnVzU2VydmljZVZlY3RvcixzcCxzZXJ2aWNlc0hhc2gsdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFZlY3RvciBiZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgIGJlVmVjdG9yLmFkZChzcCk7Ci0gICAgICAgICAgICBzcCA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5zYXZlX2J1c2luZXNzKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYmVWZWN0b3IpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZXMuc2l6ZSgpO2krKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGlzdEVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZXMuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXNlcnZpY2VFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgICAgICBTdHJpbmcgYnNOYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfUkVGRVJFTkNFRCIsYnNOYW1lKSk7Ci0gICAgICAgICAgICAgIHNlcnZpY2VzLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gUm9sbCBiYWNrIGFuZCByZXN0b3JlIHRoZSBvbGQgbGlzdCBvZiBzZXJ2aWNlcy4KLSAgICAgICAgICAgIHJvbGxiYWNrQnVzaW5lc3NTZXJ2aWNlcyhzcCxiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNlcnZpY2VzLHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1TR19FUlJPUl9TRVJWSUNFX05PVF9SRUZFUkVOQ0VEIik7Ci0gICAgICAgICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSb2xsIGJhY2sgYW5kIHJlc3RvcmUgdGhlIG9sZCBsaXN0IG9mIHNlcnZpY2VzLgotICAgICAgICAgICAgcm9sbGJhY2tCdXNpbmVzc1NlcnZpY2VzKHNwLGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3Isc2VydmljZXMsdWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX1JFRkVSRU5DRUQiKTsKLSAgICAgICAgICAgIGlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpCi0gICAgICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyxzZXJ2aWNlcyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fUkVNT1ZFOgotICAgICAgICAgIFN0cmluZ1tdIHJlZmVyZW5jZWRTZXJ2aWNlc0NoZWNrYm94ZXMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUkVGRVJFTkNFRF9TRVJWSUNFX1NFTEVDVF9TVEFURSk7Ci0gICAgICAgICAgVmVjdG9yIHNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wO2k8cmVmZXJlbmNlZFNlcnZpY2VzQ2hlY2tib3hlcy5sZW5ndGg7aSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNDaGVja2VkID0gQm9vbGVhbi52YWx1ZU9mKHJlZmVyZW5jZWRTZXJ2aWNlc0NoZWNrYm94ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGlzdEVsZW1lbnQgcmVmZXJlbmNlZFNlcnZpY2VMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClyZWZlcmVuY2VkU2VydmljZXMuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXJlZmVyZW5jZWRTZXJ2aWNlTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgIHNlcnZpY2VzSGFzaC5wdXQoYnMuZ2V0U2VydmljZUtleSgpLGJzKTsKLSAgICAgICAgICAgICAgc2VsZWN0ZWRSZWZlcmVuY2VkU2VydmljZVZlY3Rvci5hZGRFbGVtZW50KGJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICAgIAotICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgbGlzdCBvZiBidXNpbmVzcyBzZXJ2aWNlcyBmb3Igcm9sbGJhY2sgb3BlcmF0aW9ucy4KLSAgICAgICAgICBiYWNrdXBBbmRVcGRhdGVCdXNpbmVzc1NlcnZpY2VzKGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3Isc3Asc2VydmljZXNIYXNoLGZhbHNlKTsKLSAgICAgICAgICAKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBWZWN0b3IgYmVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICBiZVZlY3Rvci5hZGQoc3ApOwotICAgICAgICAgICAgc3AgPSAoQnVzaW5lc3NFbnRpdHkpcHJveHkuc2F2ZV9idXNpbmVzcyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJlVmVjdG9yKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPHNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlzZWxlY3RlZFJlZmVyZW5jZWRTZXJ2aWNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGJzTmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1JFRkVSRU5DRV9SRU1PVkVEIixic05hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvbGwgYmFjayBhbmQgcmVzdG9yZSB0aGUgb2xkIGxpc3Qgb2Ygc2VydmljZXMuCi0gICAgICAgICAgICByb2xsYmFja0J1c2luZXNzU2VydmljZXMoc3AsYmFja3VwQnVzU2VydmljZVZlY3RvcixzZWxlY3RlZFJlZmVyZW5jZWRTZXJ2aWNlVmVjdG9yLHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1TR19FUlJPUl9SRUZFUkVOQ0VfTk9UX1JFTU9WRUQiKTsKLSAgICAgICAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvbGwgYmFjayBhbmQgcmVzdG9yZSB0aGUgb2xkIGxpc3Qgb2Ygc2VydmljZXMuCi0gICAgICAgICAgICByb2xsYmFja0J1c2luZXNzU2VydmljZXMoc3AsYmFja3VwQnVzU2VydmljZVZlY3RvcixzZWxlY3RlZFJlZmVyZW5jZWRTZXJ2aWNlVmVjdG9yLHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1TR19FUlJPUl9SRUZFUkVOQ0VfTk9UX1JFTU9WRUQiKTsKLSAgICAgICAgICAgIGlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpCi0gICAgICAgICAgICAJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHJlZmVyZW5jZWQgc2VydmljZXMgYXJlIHJlZnJlc2hlZCB3aGVuIHRoZSBmb3JtIHJlbG9hZHMuCi0gICAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFUyk7Ci0gICAgICBidXNFbGVtZW50LnNldEJ1c2luZXNzRW50aXR5KHNwKTsKLSAgICAgIHJldHVybiBvcGVyYXRpb25SZXN1bHQ7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpCi0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgCW9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBvcGVyYXRpb25SZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5SW5pdGlhdGVkKCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0KCkKLSAgewotICAgIHJldHVybiBpc1N1YlF1ZXJ5R2V0XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnlJdGVtKCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeUl0ZW1fOwotICB9Ci0gIAotICAvLyBCYWNrdXAgdGhlIGJ1c2luZXNzIHNlcnZpY2VzIGFuZCByZW1vdmUgdGhvc2UgaW4gc2VydmljZUhhc2ggZnJvbSB0aGUgY3VycmVudCBsaXN0LiBSZXR1cm4gdGhlIHVwZGF0ZWQgbGlzdCBvZiBidXNpbmVzcyBzZXJ2aWNlcwotICBwcml2YXRlIGZpbmFsIHZvaWQgYmFja3VwQW5kVXBkYXRlQnVzaW5lc3NTZXJ2aWNlcyhWZWN0b3IgYmFja3VwQnVzU2VydmljZVZlY3RvcixCdXNpbmVzc0VudGl0eSBiZSxIYXNodGFibGUgc2VydmljZXNIYXNoLGJvb2xlYW4gaXNBZGQpCi0gIHsKLSAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGxpc3Qgb2YgYnVzaW5lc3Mgc2VydmljZXMgZm9yIHJvbGxiYWNrIG9wZXJhdGlvbnMuCi0gICAgQnVzaW5lc3NTZXJ2aWNlcyBjdXJyZW50QnVzU2VydmljZXMgPSBiZS5nZXRCdXNpbmVzc1NlcnZpY2VzKCk7Ci0gICAgaWYgKGN1cnJlbnRCdXNTZXJ2aWNlcyA9PSBudWxsKQotICAgICAgY3VycmVudEJ1c1NlcnZpY2VzID0gbmV3IEJ1c2luZXNzU2VydmljZXMoKTsKLSAgICBWZWN0b3IgY3VycmVudEJ1c1NlcnZpY2VWZWN0b3IgPSBjdXJyZW50QnVzU2VydmljZXMuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8Y3VycmVudEJ1c1NlcnZpY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBCdXNpbmVzc1NlcnZpY2UgY3VycmVudEJ1c1NlcnZpY2UgPSAoQnVzaW5lc3NTZXJ2aWNlKWN1cnJlbnRCdXNTZXJ2aWNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgIGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3IuYWRkRWxlbWVudChjdXJyZW50QnVzU2VydmljZSk7Ci0gICAgICAvLyBJZiB0aGUgY3VycmVudCBidXNpbmVzcyBzZXJ2aWNlIGlzIGEgbWVtYmVyIG9mIHRoZSBsaXN0IHRvIGJlIHJlbW92ZWQvYWRkZWQsIHJlbW92ZSBpdCBub3cuCi0gICAgICBpZiAoc2VydmljZXNIYXNoLmdldChjdXJyZW50QnVzU2VydmljZS5nZXRTZXJ2aWNlS2V5KCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRCdXNTZXJ2aWNlVmVjdG9yLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgaS0tOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoaXNBZGQpCi0gICAgewotICAgICAgRW51bWVyYXRpb24gZSA9IHNlcnZpY2VzSGFzaC5lbGVtZW50cygpOwotICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgIGN1cnJlbnRCdXNTZXJ2aWNlVmVjdG9yLmFkZEVsZW1lbnQoKEJ1c2luZXNzU2VydmljZSllLm5leHRFbGVtZW50KCkpOwotICAgIH0KLSAgICBiZS5zZXRCdXNpbmVzc1NlcnZpY2VzKGN1cnJlbnRCdXNTZXJ2aWNlcyk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCByb2xsYmFja0J1c2luZXNzU2VydmljZXMoQnVzaW5lc3NFbnRpdHkgYmUsVmVjdG9yIGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3IsVmVjdG9yIG9wZXJhdGVkU2VydmljZXMsUGVyc3BlY3RpdmUgcGVyc3BlY3RpdmUsTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSxTdHJpbmcgZXJyb3JNZXNzYWdlS2V5KQotICB7Ci0gICAgLy8gUm9sbCBiYWNrIGFuZCByZXN0b3JlIHRoZSBvbGQgbGlzdCBvZiBzZXJ2aWNlcy4KLSAgICBiZS5nZXRCdXNpbmVzc1NlcnZpY2VzKCkuc2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3IpOwotICAgIGZvciAoaW50IGk9MDtpPG9wZXJhdGVkU2VydmljZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBzZXJ2aWNlTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpb3BlcmF0ZWRTZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXNlcnZpY2VMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIFN0cmluZyBic05hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UocGVyc3BlY3RpdmUuZ2V0TWVzc2FnZShlcnJvck1lc3NhZ2VLZXksYnNOYW1lKSk7Ci0gICAgfSAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGNmODRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL09wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIE9wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIE9wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24oKQotICB7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCB2b2lkIGFkZFNlc3Npb25BbmRUTW9kZWxLZXkoU3RyaW5nQnVmZmVyIHJlc3VsdCxTdHJpbmcgc2Vzc2lvbklkLFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSkKLSAgewotICAgIHJlc3VsdC5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCkuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgfQotICAKLSAgLy8gdWRkaS9jYXRlZ29yeV9icm93c2VyLmpzcD9zZXNzaW9uSWQ9Li4uJmNhdGVnb3J5VE1vZGVsS2V5PS4uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyBzZXNzaW9uSWQsU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2NhdGVnb3J5X2Jyb3dzZXIuanNwPyIpOwotICAgIGFkZFNlc3Npb25BbmRUTW9kZWxLZXkoYWN0aW9uTGluayxzZXNzaW9uSWQsY2F0ZWdvcnlUTW9kZWxLZXkpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldENhdGVnb3J5Q29udGVudFBhZ2UoU3RyaW5nIHNlc3Npb25JZCxTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvY2F0ZWdvcnlfY29udGVudC5qc3A/Iik7Ci0gICAgYWRkU2Vzc2lvbkFuZFRNb2RlbEtleShhY3Rpb25MaW5rLHNlc3Npb25JZCxjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0V2lsZENhcmRBY3Rpb25MaW5rKFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsIiUiKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvT3BlblJlZ2lzdHJ5QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyODhjN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvT3BlblJlZ2lzdHJ5QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlVERElNYWluRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJTWFpbk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbExpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuUmVnaXN0cnlBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIE9wZW5SZWdpc3RyeUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICAvLyBTZWxlY3QgVURESSBNYWluLgotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwpOwotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcm5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuVURESV9VU0VSTkFNRSk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlVERElfUEFTU1dPUkQpOwotICAgIFN0cmluZyBjaGVja1VzZXJEZWZpbmVkQ2F0ZWdvcmllc0NoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMpOwotICAgIFN0cmluZyBjYXRlZ29yaWVzRGlyZWN0b3J5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIGlmIChyZWdpc3RyeU5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUscmVnaXN0cnlOYW1lKTsKLQotICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHJlZ2lzdHJ5TmFtZSkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1JFR0lTVFJZX05BTUUiKSk7Ci0gICAgfQotCi0gICAgaWYgKGlucXVpcnlVUkwgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMLGlucXVpcnlVUkwpOwotICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfSU5RVUlSWV9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfVVJMLCBwdWJsaXNoVVJMKTsKLSAgICAKLSAgICBpZiAodXNlcm5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlVERElfVVNFUk5BTUUsIHVzZXJuYW1lKTsKLQotICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuVURESV9QQVNTV09SRCwgcGFzc3dvcmQpOwotCi0gICAgaWYgKGNoZWNrVXNlckRlZmluZWRDYXRlZ29yaWVzQ2hlY2tlZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMsY2hlY2tVc2VyRGVmaW5lZENhdGVnb3JpZXNDaGVja2VkKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTKTsKLSAgICAgIAotICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5DQVRFR09SSUVTX0RJUkVDVE9SWSxjYXRlZ29yaWVzRGlyZWN0b3J5KTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZKTsKLQotICAgIGZvcm1Ub29sLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdhdGhlcldTVXNlckRlZmluZWRDYXRlZ29yaWVzKFVERElQcm94eSBwcm94eSxIYXNodGFibGUgY2F0ZWdvcnlNb2RlbHMpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgY2F0ZWdvcnlCYWcuYWRkKG5ldyBLZXllZFJlZmVyZW5jZSgiIiwiY2F0ZWdvcml6YXRpb24iLFRNb2RlbC5UWVBFU19UTU9ERUxfS0VZKSk7Ci0gICAgICBUTW9kZWxMaXN0IHRNb2RlbExpc3QgPSBwcm94eS5maW5kX3RNb2RlbCgiJSIsY2F0ZWdvcnlCYWcsbnVsbCxudWxsLDEwMCk7Ci0gICAgICBUTW9kZWxJbmZvcyB0TW9kZWxJbmZvcyA9IHRNb2RlbExpc3QuZ2V0VE1vZGVsSW5mb3MoKTsKLSAgICAgIFZlY3RvciB0TW9kZWxLZXlWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxJbmZvcy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBUTW9kZWxJbmZvIHRNb2RlbEluZm8gPSB0TW9kZWxJbmZvcy5nZXQoaSk7Ci0gICAgICAgIHRNb2RlbEtleVZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbEluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgfQotICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHByb3h5LmdldF90TW9kZWxEZXRhaWwodE1vZGVsS2V5VmVjdG9yKTsKLSAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpdE1vZGVsVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgYm9vbGVhbiBjaGVja2VkID0gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBjYXRlZ29yeUtleSA9IG51bGw7Ci0gICAgICAgIGNhdGVnb3J5QmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgICAgIGZvciAoaW50IGo9MDtqPGNhdGVnb3J5QmFnLnNpemUoKTtqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IGNhdGVnb3J5QmFnLmdldChqKTsKLSAgICAgICAgICBTdHJpbmcga3JUTW9kZWxLZXkgPSBrci5nZXRUTW9kZWxLZXkoKTsKLSAgICAgICAgICBpZiAoa3JUTW9kZWxLZXkuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuR0VORVJBTF9LRVlXT1JEU19UTU9ERUxfS0VZKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcga3JLZXlOYW1lID0ga3IuZ2V0S2V5TmFtZSgpOwotICAgICAgICAgICAgaWYgKGtyS2V5TmFtZS5lcXVhbHMoInVybjp4LWlibTp1ZGRpOmN1c3RvbVRheG9ub215OmtleSIpKQotICAgICAgICAgICAgICBjYXRlZ29yeUtleSA9IGtyLmdldEtleVZhbHVlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChrcktleU5hbWUuZXF1YWxzKCJ1cm46eC1pYm06dWRkaTpjdXN0b21UYXhvbm9teTpkaXNwbGF5TmFtZSIpKQotICAgICAgICAgICAgICBkaXNwbGF5TmFtZSA9IGtyLmdldEtleVZhbHVlKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGtyVE1vZGVsS2V5LmVxdWFsc0lnbm9yZUNhc2UoVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpKQotICAgICAgICAgICAgY2hlY2tlZCA9IGtyLmdldEtleVZhbHVlKCkuZXF1YWxzKCJjaGVja2VkIik7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhdGVnb3J5S2V5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gdE1vZGVsLmdldE5hbWVTdHJpbmcoKTsKLSAgICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdGVnb3J5TW9kZWwgPSBuZXcgQ2F0ZWdvcnlNb2RlbCgpOwotICAgICAgICAgIGNhdGVnb3J5TW9kZWwuc2V0Q2F0ZWdvcnlLZXkoY2F0ZWdvcnlLZXkpOwotICAgICAgICAgIGNhdGVnb3J5TW9kZWwuZW5hYmxlQ2hlY2tlZChjaGVja2VkKTsKLSAgICAgICAgICBjYXRlZ29yeU1vZGVsLnNldERpc3BsYXlOYW1lKGRpc3BsYXlOYW1lKTsKLSAgICAgICAgICBTdHJpbmcgdE1vZGVsS2V5ID0gdE1vZGVsLmdldFRNb2RlbEtleSgpOwotICAgICAgICAgIGNhdGVnb3J5TW9kZWwuc2V0VE1vZGVsS2V5KHRNb2RlbEtleSk7Ci0gICAgICAgICAgY2F0ZWdvcnlNb2RlbHMucHV0KHRNb2RlbEtleSxjYXRlZ29yeU1vZGVsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FKTsKLSAgICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCk7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUkFUSU9OX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcm5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlVERElfVVNFUk5BTUUpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5VRERJX1BBU1NXT1JEKTsKLSAgICAgIGJvb2xlYW4gY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNDaGVja2VkID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTKSAhPSBudWxsKTsKLSAgICAgIFN0cmluZyBjYXRlZ29yaWVzRGlyZWN0b3J5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5DQVRFR09SSUVTX0RJUkVDVE9SWSk7Ci0KLSAgICAgIFN0cmluZyByZWNvZ25pemVkUHVibGlzaFVSTCA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRLbm93blJlZ2lzdHJ5UHVibGlzaFVSTChpbnF1aXJ5VVJMKTsKLSAgICAgIFN0cmluZyByZWNvZ25pemVkUmVnaXN0cmF0aW9uVVJMID0gdWRkaVBlcnNwZWN0aXZlLmdldEtub3duUmVnaXN0cnlSZWdpc3RyYXRpb25VUkwoaW5xdWlyeVVSTCk7Ci0gICAgICAKLSAgICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICAgIHB1Ymxpc2hVUkwgPSByZWNvZ25pemVkUHVibGlzaFVSTDsKLSAgICAgIGlmIChyZWdpc3RyYXRpb25VUkwgPT0gbnVsbCkKLSAgICAgICAgcmVnaXN0cmF0aW9uVVJMID0gcmVjb2duaXplZFJlZ2lzdHJhdGlvblVSTDsKLSAgICAgICAgCi0gICAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSkoY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFJvb3ROb2RlKCkpOwotICAgICAgVURESU1haW5FbGVtZW50IHVkZGlNYWluRWxlbWVudCA9IChVRERJTWFpbkVsZW1lbnQpdWRkaU1haW5Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgIHByb3BzLnB1dChBY3Rpb25JbnB1dHMuVFJBTlNQT1JUX0NMQVNTX05BTUUsIEFjdGlvbklucHV0cy5UUkFTUE9SVF9DTEFTUyk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSBuZXcgVURESVByb3h5KHByb3BzKTsKLSAgICAgIHByb3h5LnNldElucXVpcnlVUkwobmV3IFVSTChpbnF1aXJ5VVJMKSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnaXN0cnlFbGVtZW50ID0gbmV3IFJlZ2lzdHJ5RWxlbWVudChwcm94eSxpbnF1aXJ5VVJMLHJlZ2lzdHJ5TmFtZSx1ZGRpTWFpbkVsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAvLyBTZXQgcmVnaXN0cnkgZWxlbWVudCdzIHB1Ymxpc2ggVVJMIGFuZCByZWdpc3RyYXRpb24gVVJMIHByb3ZpZGVkIGJ5IGV4dGVybmFsIGNhbGxlcnMgKGUuZy4gZmF2b3JpdGVzKS4KLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5zZXRDYWNoZWRQdWJsaXNoVVJMKHB1Ymxpc2hVUkwpOwotICAgICAgaWYgKHJlZ2lzdHJhdGlvblVSTCAhPSBudWxsKQotICAgICAgICByZWdpc3RyeUVsZW1lbnQuc2V0UmVnaXN0cmF0aW9uVVJMKHJlZ2lzdHJhdGlvblVSTCk7Ci0gICAgICBpZiAodXNlcm5hbWUgIT0gbnVsbCkKLSAgICAgIAlyZWdpc3RyeUVsZW1lbnQuc2V0VXNlcklkKHVzZXJuYW1lKTsKLSAgICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgCXJlZ2lzdHJ5RWxlbWVudC5zZXRDcmVkKHBhc3N3b3JkKTsKLSAgICAgIHJlZ2lzdHJ5RWxlbWVudC5zZXRDaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcyhjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc0NoZWNrZWQpOwotICAgICAgaWYgKGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzQ2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgSGFzaHRhYmxlIGNhdGVnb3J5TW9kZWxzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICBnYXRoZXJXU1VzZXJEZWZpbmVkQ2F0ZWdvcmllcyhwcm94eSxjYXRlZ29yeU1vZGVscyk7Ci0gICAgICAgIGlmIChjYXRlZ29yeU1vZGVscy5zaXplKCkgPiAwKQotICAgICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5zZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoY2F0ZWdvcnlNb2RlbHMpOwotICAgICAgfQotICAgICAgcmVnaXN0cnlFbGVtZW50LnNldENhdGVnb3JpZXNEaXJlY3RvcnkoY2F0ZWdvcmllc0RpcmVjdG9yeSk7Ci0gICAgICB1ZGRpTWFpbkVsZW1lbnQuY29ubmVjdChyZWdpc3RyeUVsZW1lbnQsVURESU1vZGVsQ29uc3RhbnRzLlJFTF9SRUdJU1RSSUVTLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlNYWluTm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgaW50IG5ld1JlZ2lzdHJ5Tm9kZUlkID0gdWRkaU1haW5Ob2RlLmdldENoaWxkTm9kZShyZWdpc3RyeUVsZW1lbnQpLmdldE5vZGVJZCgpOwotICAgICAgLy8gU2VsZWN0IHRoZSBuZXcgcmVnaXN0cnkgbm9kZSBhbmQgYWRkIHRoZSBzZWxlY3QgYWN0aW9uIHRvIHRoZSBoaXN0b3J5LgotICAgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQobmV3UmVnaXN0cnlOb2RlSWQpOwotICAgICAgTm9kZSByZWdpc3RyeU5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gcmVnaXN0cnlOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKHRydWUpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19SRUdJU1RSWV9PUEVORUQiLG5ldyBTdHJpbmdbXXtyZWdpc3RyeU5hbWUsaW5xdWlyeVVSTH0pKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKTsKLSAgICB9Ci0gICAgLyoKLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICAqLwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUHVibGlzaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUHVibGlzaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTI5YjYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1B1Ymxpc2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlB1Ymxpc2hlZEl0ZW1zRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFB1Ymxpc2hBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBzdWJRdWVyeUtleV87Ci0gIHByb3RlY3RlZCBib29sZWFuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzU3ViUXVlcnlHZXRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5SXRlbV87Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnTm9kZV87Ci0KLSAgcHVibGljIFB1Ymxpc2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgc3ViUXVlcnlLZXlfID0gbnVsbDsKLSAgICBpc1N1YlF1ZXJ5R2V0XyA9IGZhbHNlOwotICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotICAgIHJlZ05vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBTZXR1cCBmb3IgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcgotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIsIHBhcnNlcik7Ci0gCi0gICAgbmV3U3ViUXVlcnlfID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQpOwotICAgIFN0cmluZyBpc1N1YlF1ZXJ5R2V0U3RyaW5nID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgbmV3U3ViUXVlcnlJdGVtXyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSk7Ci0gICAgc3ViUXVlcnlLZXlfID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleV8pOwotICAgIGZvcm1Ub29sUEkuY2xlYXJFcnJvcnMoKTsKLQotICAgIGlmIChuZXdTdWJRdWVyeV8gIT0gbnVsbCAmJiBuZXdTdWJRdWVyeV8ubGVuZ3RoKCkgPiAwKQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLQotICAgIGlmIChpc1N1YlF1ZXJ5R2V0U3RyaW5nICE9IG51bGwpCi0gICAgICBpc1N1YlF1ZXJ5R2V0XyA9IEJvb2xlYW4udmFsdWVPZihpc1N1YlF1ZXJ5R2V0U3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIGlmICghcHJvY2Vzc090aGVycyhwYXJzZXIsZm9ybVRvb2xQSSkgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0KLSAgICBmb3IgKGludCBpPTA7aTxyZW1vdmVkUHJvcGVydGllc18uc2l6ZSgpO2krKykKLSAgICAgIGZvcm1Ub29sUEkucmVtb3ZlUHJvcGVydHkocmVtb3ZlZFByb3BlcnRpZXNfLmVsZW1lbnRBdChpKSk7Ci0gICAgZm9ybVRvb2xQSS51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLQotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGJvb2xlYW4gdmFsaWRhdGVBdXRoZW50aWNhdGlvbiA9ICFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKTsKLQotICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIH0KLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmIHZhbGlkYXRlQXV0aGVudGljYXRpb24gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhwdWJsaXNoVVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgIH0KLQotICAgIGlmICh1c2VySWQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgdmFsaWRhdGVBdXRoZW50aWNhdGlvbiAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJZCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgIH0KLQotICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgIH0KLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKEJ1c2luZXNzRW50aXR5IGJlLFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJlRWxlbWVudCA9IG5ldyBCdXNpbmVzc0VsZW1lbnQoYmUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50LmdldEl0ZW1zKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgQnVzaW5lc3NFbGVtZW50IGVsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGVsZW1lbnRCRSA9IGVsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgIGlmIChlbGVtZW50QkUuZ2V0QnVzaW5lc3NLZXkoKS5lcXVhbHMoYmUuZ2V0QnVzaW5lc3NLZXkoKSkpCi0gICAgICB7Ci0gICAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29ubmVjdEVsZW1lbnRzKHB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50LGJlRWxlbWVudCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRQdWJsaXNoZWRJdGVtTm9kZShCdXNpbmVzc1NlcnZpY2UgYnMsUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTZXJ2aWNlRWxlbWVudCBzRWxlbWVudCA9IG5ldyBTZXJ2aWNlRWxlbWVudChicyxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBwdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQuZ2V0SXRlbXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTZXJ2aWNlRWxlbWVudCBlbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBlbGVtZW50QlMgPSBlbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgaWYgKGVsZW1lbnRCUy5nZXRTZXJ2aWNlS2V5KCkuZXF1YWxzKGJzLmdldFNlcnZpY2VLZXkoKSkpCi0gICAgICB7Ci0gICAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29ubmVjdEVsZW1lbnRzKHB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudCxzRWxlbWVudCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRQdWJsaXNoZWRJdGVtTm9kZShUTW9kZWwgdE1vZGVsLFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KHRNb2RlbCxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQuZ2V0SXRlbXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBlbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFRNb2RlbCBlbGVtZW50VE1vZGVsID0gZWxlbWVudC5nZXRUTW9kZWwoKTsKLSAgICAgIGlmICh0TW9kZWwuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzKGVsZW1lbnRUTW9kZWwuZ2V0VE1vZGVsS2V5KCkpKQotICAgICAgewotICAgICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGNvbm5lY3RFbGVtZW50cyhwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQsc2lFbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjb25uZWN0RWxlbWVudHMoUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZEl0ZW1zRWxlbWVudCxUcmVlRWxlbWVudCBpdGVtRWxlbWVudCkKLSAgewotICAgIHB1Ymxpc2hlZEl0ZW1zRWxlbWVudC5jb25uZWN0KGl0ZW1FbGVtZW50LFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgaW50IG5ld05vZGVJZCA9IHJlZ05vZGVfLmdldENoaWxkTm9kZShwdWJsaXNoZWRJdGVtc0VsZW1lbnQpLmdldENoaWxkTm9kZShpdGVtRWxlbWVudCkuZ2V0Tm9kZUlkKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSByZWdOb2RlXy5nZXROb2RlTWFuYWdlcigpOwotICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKG5ld05vZGVJZCk7Ci0gICAgTm9kZSBuZXdOb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBuZXdOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksc2VsZWN0ZWRUb29sLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKHRydWUpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlJbml0aWF0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlHZXQoKQotICB7Ci0gICAgcmV0dXJuIGlzU3ViUXVlcnlHZXRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdWJRdWVyeUtleSgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlLZXlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeUl0ZW0oKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5SXRlbV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoICsgMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGggLSAxXSA9IG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzFhZGE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5BZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuQnVzaW5lc3NOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlB1Ymxpc2hlZEl0ZW1zTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5RdWVyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUXVlcnlQYXJlbnROb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlSW50ZXJmYWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hVRERJTm9kZUFjdGlvbiBleHRlbmRzIFVERElOb2RlQWN0aW9uCi17Ci0gIHByaXZhdGUgVmVjdG9yIHN0YWxlTm9kZXNfOwotICBwdWJsaWMgUmVmcmVzaFVERElOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELFN0cmluZy52YWx1ZU9mKGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZUlkKCkpKTsKLSAgICBzdGFsZU5vZGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb25KU1AuanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmVyaWZ5Tm9kZURhdGEoKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICAgICByZXR1cm4gcmVmcmVzaEJ1c2luZXNzRWxlbWVudCgoQnVzaW5lc3NOb2RlKW5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgIHJldHVybiByZWZyZXNoU2VydmljZUVsZW1lbnQoKFNlcnZpY2VOb2RlKW5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICAgIHJldHVybiByZWZyZXNoU2VydmljZUludGVyZmFjZUVsZW1lbnQoKFNlcnZpY2VJbnRlcmZhY2VOb2RlKW5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgewotICAgICAgLy8gTm90aGluZyB0byB2ZXJpZnkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlICE9IG51bGwpCi0gICAgewotICAgICAgLy8gUmVnaXN0cnlOb2RlCi0gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFJlZ2lzdHJ5Tm9kZSkKLSAgICAgICAgcmVmcmVzaFJlZ2lzdHJ5RWxlbWVudCgoUmVnaXN0cnlOb2RlKW5vZGUpOwotICAgICAgICAKLSAgICAgIC8vIEZvbGRlck5vZGVzCi0gICAgICBWZWN0b3IgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgVmVjdG9yIHJlZnJlc2hBY3Rpb25zID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2hpbGROb2Rlcy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBOb2RlIGNoaWxkTm9kZSA9IChOb2RlKWNoaWxkTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICAgICBSZWZyZXNoVURESU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZnJlc2hVRERJTm9kZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIGFjdGlvbi5zZXRTdGFsZU5vZGVzKHN0YWxlTm9kZXNfKTsKLSAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBTdHJpbmcgY2hpbGROb2RlSWRTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihjaGlsZE5vZGUuZ2V0Tm9kZUlkKCkpOwotICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELGNoaWxkTm9kZUlkU3RyaW5nKTsKLSAgICAgICAgaWYgKCFhY3Rpb24udmVyaWZ5Tm9kZURhdGEoKSkKLSAgICAgICAgICBzdGFsZU5vZGVzXy5hZGRFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZWZyZXNoQWN0aW9ucy5hZGRFbGVtZW50KGFjdGlvbik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHJlZnJlc2hBY3Rpb25zKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHJlZnJlc2hSZWdpc3RyeUVsZW1lbnQoUmVnaXN0cnlOb2RlIHJlZ05vZGUpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEhhc2h0YWJsZSB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSBudWxsOwotICAgIGlmIChyZWdFbGVtZW50LmdldENoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzKCkpCi0gICAgewotICAgICAgdXNlckRlZmluZWRDYXRlZ29yaWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgT3BlblJlZ2lzdHJ5QWN0aW9uIG9wZW5SZWdBY3Rpb24gPSBuZXcgT3BlblJlZ2lzdHJ5QWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgIG9wZW5SZWdBY3Rpb24uZ2F0aGVyV1NVc2VyRGVmaW5lZENhdGVnb3JpZXMocmVnRWxlbWVudC5nZXRQcm94eSgpLHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyk7Ci0gICAgICBpZiAoIXVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5rZXlzKCkuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IG51bGw7Ci0gICAgICAgIHJlZ05vZGUuc2V0SW1hZ2VQYXRoKFJlZ2lzdHJ5Tm9kZS5JTUFHRV9QQVRIX1NUQU5EQVJEKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGNhdGVnb3JpZXNEaXJlY3RvcnkgPSByZWdFbGVtZW50LmdldENhdGVnb3JpZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBhZGRBY3Rpb24gPSBuZXcgQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5ICE9IG51bGwpCi0gICAgICAgICAgYWRkQWN0aW9uLmxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEodXNlckRlZmluZWRDYXRlZ29yaWVzLmVsZW1lbnRzKCksY2F0ZWdvcmllc0RpcmVjdG9yeSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBhZGRBY3Rpb24ubGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YShyZWdFbGVtZW50LmdldE5hbWUoKSx1c2VyRGVmaW5lZENhdGVnb3JpZXMuZWxlbWVudHMoKSk7Ci0gICAgICAgIHJlZ05vZGUuc2V0SW1hZ2VQYXRoKFJlZ2lzdHJ5Tm9kZS5JTUFHRV9QQVRIX1dJVEhfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMpOwotICAgICAgfQotICAgIH0KLSAgICByZWdFbGVtZW50LnNldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcyh1c2VyRGVmaW5lZENhdGVnb3JpZXMpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHJlZnJlc2hCdXNpbmVzc0VsZW1lbnQoQnVzaW5lc3NOb2RlIGJ1c05vZGUpCi0gIHsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyB1dWlkS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSB2ZXJpZnlBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksdXVpZEtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUZSRVNIX05PREUsYnVzTm9kZSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIGJvb2xlYW4gdmVyaWZ5UmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmICh2ZXJpZnlSZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULG5ldyBCdXNpbmVzc0VsZW1lbnQoKEJ1c2luZXNzRW50aXR5KXByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCksYnVzRWxlbWVudC5nZXRNb2RlbCgpKSk7Ci0gICAgcmV0dXJuIHZlcmlmeVJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiByZWZyZXNoU2VydmljZUVsZW1lbnQoU2VydmljZU5vZGUgc2VydmljZU5vZGUpCi0gIHsKLSAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClzZXJ2aWNlTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyB1dWlkS2V5ID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCkuZ2V0U2VydmljZUtleSgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLHV1aWRLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFLHNlcnZpY2VOb2RlKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgYm9vbGVhbiB2ZXJpZnlSZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHZlcmlmeVJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsbmV3IFNlcnZpY2VFbGVtZW50KChCdXNpbmVzc1NlcnZpY2UpcHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSxzZXJ2aWNlRWxlbWVudC5nZXRNb2RlbCgpKSk7Ci0gICAgcmV0dXJuIHZlcmlmeVJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiByZWZyZXNoU2VydmljZUludGVyZmFjZUVsZW1lbnQoU2VydmljZUludGVyZmFjZU5vZGUgc2lOb2RlKQotICB7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNpTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyB1dWlkS2V5ID0gc2lFbGVtZW50LmdldFRNb2RlbCgpLmdldFRNb2RlbEtleSgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSx1dWlkS2V5KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFRlJFU0hfTk9ERSxzaU5vZGUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBib29sZWFuIHZlcmlmeVJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAodmVyaWZ5UmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxuZXcgU2VydmljZUludGVyZmFjZUVsZW1lbnQoKFRNb2RlbClwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpLHNpRWxlbWVudC5nZXRNb2RlbCgpKSk7Ci0gICAgcmV0dXJuIHZlcmlmeVJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNvbm5lY3RFbGVtZW50cyhOb2RlIHBhcmVudE5vZGUsVHJlZUVsZW1lbnQgbmV3RWxlbWVudCkKLSAgewotICAgIFRyZWVFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBwYXJlbnROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHJlbCA9IG51bGw7Ci0gICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBQdWJsaXNoZWRJdGVtc05vZGUpCi0gICAgICByZWwgPSBVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9JVEVNUzsKLSAgICBlbHNlIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgUXVlcnlOb2RlKQotICAgICAgcmVsID0gVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSWV9SRVNVTFRTOwotICAgIGVsc2UgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBRdWVyeVBhcmVudE5vZGUpCi0gICAgICByZWwgPSBVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVM7Ci0gICAgcGFyZW50RWxlbWVudC5jb25uZWN0KG5ld0VsZW1lbnQscmVsLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgTm9kZSBuZXdOb2RlID0gcGFyZW50Tm9kZS5nZXRDaGlsZE5vZGUobmV3RWxlbWVudCk7Ci0gICAgaW50IG5ld05vZGVJZCA9IG5ld05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgbm9kZU1hbmFnZXJfLnNldFNlbGVjdGVkTm9kZUlkKG5ld05vZGVJZCk7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBuZXdOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksc2VsZWN0ZWRUb29sLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKHRydWUpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgICAgT2JqZWN0IGxhdGVzdE9iamVjdCA9IHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotICAgICAgaWYgKGxhdGVzdE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAobGF0ZXN0T2JqZWN0IGluc3RhbmNlb2YgVmVjdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgVmVjdG9yIHJlZnJlc2hBY3Rpb25zID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxyZWZyZXNoQWN0aW9ucy5zaXplKCk7aSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZnJlc2hVRERJTm9kZUFjdGlvbiByZWZyZXNoQWN0aW9uID0gKFJlZnJlc2hVRERJTm9kZUFjdGlvbilyZWZyZXNoQWN0aW9ucy5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICByZWZyZXNoQWN0aW9uLnJ1bigpOwotICAgICAgICAgIH0KLSAgICAgICAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFRyZWVFbGVtZW50IG9sZEVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgb2xkRWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICAgICAgY29ubmVjdEVsZW1lbnRzKG5vZGUuZ2V0UGFyZW50KCksKFRyZWVFbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBRdWVyeU5vZGVzCi0gICAgICAgIFF1ZXJ5Tm9kZSBxdWVyeU5vZGUgPSAoUXVlcnlOb2RlKW5vZGU7Ci0gICAgICAgIEZpbmRBY3Rpb24gZmluZEFjdGlvbiA9IHF1ZXJ5Tm9kZS5nZXRGaW5kQWN0aW9uKCk7Ci0gICAgICAgIGZpbmRBY3Rpb24uc2V0UmVmcmVzaEFjdGlvbih0cnVlKTsKLSAgICAgICAgaWYgKCFmaW5kQWN0aW9uLnJ1bigpKQotICAgICAgICAgIHF1ZXJ5Tm9kZS5yZW1vdmVDaGlsZE5vZGVzKHRydWUpOwotICAgICAgICBmaW5kQWN0aW9uLnNldFJlZnJlc2hBY3Rpb24oZmFsc2UpOwotICAgICAgfQotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PREVfUkVGUkVTSEVEIixub2RlLmdldE5vZGVOYW1lKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBWZWN0b3IgZ2V0U3RhbGVOb2RlcygpCi0gIHsKLSAgICByZXR1cm4gc3RhbGVOb2Rlc187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN0YWxlTm9kZXMoVmVjdG9yIHN0YWxlTm9kZXMpCi0gIHsKLSAgICBzdGFsZU5vZGVzXyA9IHN0YWxlTm9kZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUzY2FkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hVRERJTm9kZXNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJpdmF0ZSBWZWN0b3Igc3RhbGVOb2Rlc187Ci0KLSAgcHVibGljIFJlZnJlc2hVRERJTm9kZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgc3RhbGVOb2Rlc18gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAvLyBUaGUgY2xpZW50IEphdmFzY3JpcHQgZW5mb3JjZXMgdGhlIHJ1bGUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSB3YXMgc2VsZWN0ZWQgYmVmb3JlIHRoZSBmb3JtIGNhbiBiZSBzdWJtaXR0ZWQuCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyxzZWxlY3RlZE5vZGVJZHMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGludCBjb2xsZWN0b3JOb2RlSWQgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXROb2RlSWQoKTsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyk7Ci0gICAgUmVmcmVzaFVERElOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWZyZXNoVURESU5vZGVBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzZWxlY3RlZE5vZGVJZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELHNlbGVjdGVkTm9kZUlkc1tpXSk7Ci0gICAgICBpZiAoYWN0aW9uLnZlcmlmeU5vZGVEYXRhKCkpCi0gICAgICAgIGFjdGlvbi5ydW4oKTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoc2VsZWN0ZWROb2RlSWRzW2ldKTsKLSAgICAgICAgc3RhbGVOb2Rlc18uYWRkRWxlbWVudChuYXZpZ2F0b3JNYW5hZ2VyLmdldE5vZGUobm9kZUlkKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9ERV9EQVRBX1ZBTElEQVRJT05fRkFJTEVEIixuYXZpZ2F0b3JNYW5hZ2VyLmdldE5vZGUobm9kZUlkKS5nZXROb2RlTmFtZSgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIG5hdmlnYXRvck1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQoY29sbGVjdG9yTm9kZUlkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBWZWN0b3IgZ2V0U3RhbGVOb2RlcygpCi0gIHsKLSAgICByZXR1cm4gc3RhbGVOb2Rlc187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkzMTcyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9LRVkpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgCi0gICAgaWYgKHV1aWRLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLHV1aWRLZXkpOwotICAgICAgCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1dWlkS2V5KSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVVJRF9LRVkiKSk7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7ICAgICAgCi0gICAgICBTdHJpbmcgdXVpZEtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgICAgCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlIG9yIGV2ZW4gVURESU1haW5Ob2RlLgotICAgICAgaWYgKHJlZ05vZGVfID09IG51bGwpCi0gICAgICAgIHJlZ05vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKChOb2RlKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlJFRlJFU0hfTk9ERSkpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eVtdIGJlTGlzdCA9IG5ldyBCdXNpbmVzc0VudGl0eVsxXTsKLSAgICAgIFZlY3RvciBiZVZlY3RvciA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbCh1dWlkS2V5KS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgaWYgKGJlVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGJlVmVjdG9yLnRvQXJyYXkoYmVMaXN0KTsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KGJlTGlzdCxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YoYmVMaXN0Lmxlbmd0aCkpKTsKLSAgICAgICAgfQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULGJlTGlzdFswXSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQlVTSU5FU1NFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWE1NzU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQnVzaW5lc3NJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXJzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuVE1vZGVsQmFnOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOyAgICAKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfU0VBUkNIX1NFVCxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9TRUFSQ0hfU0VUKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUykpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG93bmVkQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCk7Ci0gICAgU3RyaW5nW10gbGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUpOwotICAgIFN0cmluZ1tdIGlkVHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFKTsKLSAgICBTdHJpbmdbXSBpZEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGlkS2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gc2lOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSk7Ci0gICAgU3RyaW5nW10gZGlzY292ZXJ5VVJMVmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RJU0NPVkVSWVVSTCk7Ci0gICAgU3RyaW5nW10gZmluZFF1YWxpZmllclZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSKTsKLSAgICBTdHJpbmcgbWF4U2VhcmNoU2V0ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUKTsKLSAgICBTdHJpbmcgbWF4UmVzdWx0cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgICByZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgaWYgKG93bmVkQ2hlY2tlZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQsb3duZWRDaGVja2VkKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX09XTkVEKTsKLQotICAgIGlmIChsYW5ndWFnZXMgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8bmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgTmFtZSB1ZGRpNGpOYW1lOwotICAgICAgICBpZiAobGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpOYW1lKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLG5hbWVWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLQotICAgIGlmIChpZFR5cGVzICE9IG51bGwgJiYgaWRLZXlOYW1lcyAhPSBudWxsICYmIGlkS2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IG5ldyBJZGVudGlmaWVyQmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxpZEtleU5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGlkS2V5TmFtZXNbaV0saWRLZXlWYWx1ZXNbaV0saWRUeXBlc1tpXSk7Ci0gICAgICAgIGlkQmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyxpZEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotCi0gICAgaWYgKGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotCi0gICAgaWYgKHNpTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEFsdGhvdWdoIHdlIGFscmVhZHkgaGF2ZSB0aGUgInN1Ym1pdHRlZCIgZGF0YSwgZGVsZXRpb25zIG9jY3VyIG9uIHRoZSBjbGllbnQgc2lkZSBhbmQgdGh1cyB0aGUgbmVlZCB0byB0cmFjayB0aGlzIHVzaW5nIGhpZGRlbiBmb3JtIGVsZW1lbnRzLgotICAgICAgVmVjdG9yIGJ1c1NlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgICAgIGlmIChidXNTZXJ2aWNlSW50ZXJmYWNlcyA9PSBudWxsKQotICAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVzU2VydmljZUludGVyZmFjZXMucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIFZlY3RvciBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICAgICBWZWN0b3IgdE1vZGVsS2V5U3RyaW5nVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgSGFzaHRhYmxlIHJlc3VsdEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzaU5vZGVJZHMubGVuZ3RoO2krKykKLSAgICAgICAgcmVzdWx0SGFzaC5wdXQoc2lOb2RlSWRzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpYnVzU2VydmljZUludGVyZmFjZXNDb3B5LmVsZW1lbnRBdChpKTsKLSAgICAgICAgaWYgKHJlc3VsdEhhc2guZ2V0KFN0cmluZy52YWx1ZU9mKGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIHRNb2RlbEtleVN0cmluZ1ZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIFRNb2RlbEJhZyB0TW9kZWxCYWcgPSBuZXcgVE1vZGVsQmFnKHRNb2RlbEtleVN0cmluZ1ZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMsYnVzU2VydmljZUludGVyZmFjZXMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfVE1PREVMQkFHLHRNb2RlbEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1RNT0RFTEJBRyk7Ci0gICAgfQotCi0gICAgaWYgKGRpc2NvdmVyeVVSTFZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IG5ldyBEaXNjb3ZlcnlVUkxzKCk7Ci0gICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMVmFsdWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSBuZXcgRGlzY292ZXJ5VVJMKGRpc2NvdmVyeVVSTFZhbHVlc1tpXSwiIik7Ci0gICAgICAgIGRpc2NvdmVyeVVSTFZlY3Rvci5hZGRFbGVtZW50KGRpc2NvdmVyeVVSTCk7Ci0gICAgICB9Ci0gICAgICBkaXNjb3ZlcnlVUkxzLnNldERpc2NvdmVyeVVSTFZlY3RvcihkaXNjb3ZlcnlVUkxWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxkaXNjb3ZlcnlVUkxzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLQotICAgIGlmIChmaW5kUXVhbGlmaWVyVmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgRmluZFF1YWxpZmllcnMgZmluZFF1YWxpZmllcnMgPSBuZXcgRmluZFF1YWxpZmllcnMoKTsKLSAgICAgIFZlY3RvciBmaW5kUXVhbGlmaWVyVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZhbHVlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBGaW5kUXVhbGlmaWVyIGZpbmRRdWFsaWZpZXIgPSBuZXcgRmluZFF1YWxpZmllcihmaW5kUXVhbGlmaWVyVmFsdWVzW2ldKTsKLSAgICAgICAgZmluZFF1YWxpZmllclZlY3Rvci5hZGRFbGVtZW50KGZpbmRRdWFsaWZpZXIpOwotICAgICAgfQotICAgICAgZmluZFF1YWxpZmllcnMuc2V0RmluZFF1YWxpZmllclZlY3RvcihmaW5kUXVhbGlmaWVyVmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0ZJTkRRVUFMSUZJRVJTLGZpbmRRdWFsaWZpZXJzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19GSU5EUVVBTElGSUVSUyk7Ci0KLSAgICBpZiAobWF4U2VhcmNoU2V0ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVJbnRlZ2VyKG1heFNlYXJjaFNldCkpCi0gICAgewotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfU0VBUkNIX1NFVCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTUFYX1NFQVJDSF9TRVQiKSk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtYXhSZXN1bHRzICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfUkVTVUxUUyxtYXhSZXN1bHRzKTsKLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhSZXN1bHRzKSkKLSAgICB7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9NQVhfUkVTVUxUUyIpKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgRGlzY292ZXJ5VVJMcyBkdXBEaXNjb3ZlcnlVUkxzKERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcywgU3RyaW5nIHVzZVR5cGUsIFN0cmluZyBkdXBVc2VUeXBlKSB7Ci0gICAgaWYgKGRpc2NvdmVyeVVSTHMgPT0gbnVsbCkKLSAgICAgIHJldHVybiBkaXNjb3ZlcnlVUkxzOwotICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBkaXNjb3ZlcnlVUkxzLmdldERpc2NvdmVyeVVSTFZlY3RvcigpOwotICAgIGlmIChkaXNjb3ZlcnlVUkxWZWN0b3IgPT0gbnVsbCkKLSAgICAgIHJldHVybiBkaXNjb3ZlcnlVUkxzOwotICAgIFZlY3RvciBuZXdEaXNjb3ZlcnlVUkxWZWN0b3IgPSBuZXcgVmVjdG9yKGRpc2NvdmVyeVVSTFZlY3Rvcik7Ci0gICAgRW51bWVyYXRpb24gZSA9IGRpc2NvdmVyeVVSTFZlY3Rvci5lbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gKERpc2NvdmVyeVVSTCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAoZGlzY292ZXJ5VVJMLmdldFVzZVR5cGUoKS5lcXVhbHModXNlVHlwZSkpIHsKLSAgICAgICAgbmV3RGlzY292ZXJ5VVJMVmVjdG9yLmFkZChuZXcgRGlzY292ZXJ5VVJMKGRpc2NvdmVyeVVSTC5nZXRUZXh0KCksIGR1cFVzZVR5cGUpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgRGlzY292ZXJ5VVJMcyBuZXdEaXNjb3ZlcnlVUkxzID0gbmV3IERpc2NvdmVyeVVSTHMoKTsKLSAgICBuZXdEaXNjb3ZlcnlVUkxzLnNldERpc2NvdmVyeVVSTFZlY3RvcihuZXdEaXNjb3ZlcnlVUkxWZWN0b3IpOwotICAgIHJldHVybiBuZXdEaXNjb3ZlcnlVUkxzOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0ZJTkRRVUFMSUZJRVJTKTsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMgPSAoRGlzY292ZXJ5VVJMcylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRlbnRpZmllckJhZyA9IChJZGVudGlmaWVyQmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgICAgVE1vZGVsQmFnIHRNb2RlbEJhZyA9IChUTW9kZWxCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfVE1PREVMQkFHKTsKLSAgICAgIGJvb2xlYW4gb3duZWQgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQpICE9IG51bGwpOwotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIGludCBtYXhTZWFyY2hTZXQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICAgIGludCBtYXhSZXN1bHRzID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTKSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmIChvd25lZCAmJiAhcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLQotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotCi0gICAgICBCdXNpbmVzc0luZm9zIGJ1c0luZm9zID0gbnVsbDsKLSAgICAgIGlmIChvd25lZCkKLSAgICAgICAgYnVzSW5mb3MgPSBwcm94eS5nZXRfcmVnaXN0ZXJlZEluZm8ocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpKS5nZXRCdXNpbmVzc0luZm9zKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGJ1c0luZm9zID0gcHJveHkuZmluZF9idXNpbmVzcyhuYW1lVmVjdG9yLCBkdXBEaXNjb3ZlcnlVUkxzKGRpc2NvdmVyeVVSTHMsIiIsVURESUFjdGlvbklucHV0cy5ESVNDT1ZFUllfVVJMX1RZUEUpLCBpZGVudGlmaWVyQmFnLCBjYXRlZ29yeUJhZywgdE1vZGVsQmFnLCBmaW5kUXVhbGlmaWVycywgbWF4U2VhcmNoU2V0KS5nZXRCdXNpbmVzc0luZm9zKCk7Ci0gICAgICAKLSAgICAgIGludCBmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA9IE1hdGgubWluKG1heFJlc3VsdHMsIGJ1c0luZm9zLnNpemUoKSk7Ci0gICAgICBWZWN0b3IgYnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllczsgaSsrKQotICAgICAgewotICAgICAgICBCdXNpbmVzc0luZm8gYnVzSW5mbyA9IChCdXNpbmVzc0luZm8pYnVzSW5mb3MuZ2V0KGkpOwotICAgICAgICBidXNpbmVzc0tleXMuYWRkRWxlbWVudChidXNJbmZvLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgfQotCi0gICAgICBpZiAoZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPiAwKQotICAgICAgewotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGJ1c2luZXNzS2V5cykuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgICAgICBCdXNpbmVzc0VudGl0eVtdIGJlTGlzdCA9IG5ldyBCdXNpbmVzc0VudGl0eVtiZVZlY3Rvci5zaXplKCldOwotICAgICAgICAgIGJlVmVjdG9yLnRvQXJyYXkoYmVMaXN0KTsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudChiZUxpc3QscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKGJlTGlzdC5sZW5ndGgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19CVVNJTkVTU0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTMwNGNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSxuYW1lKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gVGhpcyBzaG91bGRuJ3Qgb2NjdXIuCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOwotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKTsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KG5ldyBOYW1lKG5hbWUpKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICAKLSAgICAgIEJ1c2luZXNzSW5mb3MgYnVzSW5mb3MgPSBwcm94eS5maW5kX2J1c2luZXNzKG5hbWVWZWN0b3IsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpLmdldEJ1c2luZXNzSW5mb3MoKTsKLSAgICAgIGludCBmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA9IE1hdGgubWluKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1JFU1VMVFMsIGJ1c0luZm9zLnNpemUoKSk7Ci0gICAgICBWZWN0b3IgYnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllczsgaSsrKQotICAgICAgewotICAgICAgICBCdXNpbmVzc0luZm8gYnVzSW5mbyA9IGJ1c0luZm9zLmdldChpKTsKLSAgICAgICAgYnVzaW5lc3NLZXlzLmFkZEVsZW1lbnQoYnVzSW5mby5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID4gMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBiZVZlY3RvciA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbChidXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICAgICAgQnVzaW5lc3NFbnRpdHlbXSBiZUxpc3QgPSBuZXcgQnVzaW5lc3NFbnRpdHlbYmVWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgICAgICBiZVZlY3Rvci50b0FycmF5KGJlTGlzdCk7Ci0gICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYmVMaXN0LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihiZUxpc3QubGVuZ3RoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQlVTSU5FU1NFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1YmQ0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9LRVkpOwotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgaWYgKHV1aWRLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHV1aWRLZXkpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1dWlkS2V5KSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVVJRF9LRVkiKSk7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7ICAgICAgCi0gICAgICBTdHJpbmcgdXVpZEtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlIG9yIGV2ZW4gVURESU1haW5Ob2RlLgotICAgICAgaWYgKHJlZ05vZGVfID09IG51bGwpCi0gICAgICAgIHJlZ05vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKChOb2RlKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlJFRlJFU0hfTk9ERSkpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbCh1dWlkS2V5KTsKLSAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0gICAgICBpZiAodE1vZGVsVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKXRNb2RlbFZlY3Rvci5lbGVtZW50QXQoMCk7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBUTW9kZWxbXSB0TW9kZWxBcnJheSA9IG5ldyBUTW9kZWxbMV07Ci0gICAgICAgICAgdE1vZGVsQXJyYXlbMF0gPSB0TW9kZWw7Ci0gICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQodE1vZGVsQXJyYXkscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YodE1vZGVsQXJyYXkubGVuZ3RoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsdE1vZGVsKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzFmZDg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuQmluZGluZ1RlbXBsYXRlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGVzOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5UTW9kZWxJbnN0YW5jZURldGFpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLlRNb2RlbEluc3RhbmNlSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVnaXN0ZXJlZEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXJzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9TRUFSQ0hfU0VUKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUykpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHVzZVNlcnZpY2VDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFKTsKLSAgICBTdHJpbmdbXSBzZXJ2aWNlTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRSk7Ci0gICAgU3RyaW5nIG93bmVkQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBmaW5kUXVhbGlmaWVyVmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIpOwotICAgIFN0cmluZyBtYXhTZWFyY2hTZXQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQpOwotICAgIFN0cmluZyBtYXhSZXN1bHRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICBpZiAodXNlU2VydmljZUNoZWNrZWQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFLHVzZVNlcnZpY2VDaGVja2VkKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFKTsKLSAgICAKLSAgICBpZiAoc2VydmljZU5vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBBbHRob3VnaCB3ZSBhbHJlYWR5IGhhdmUgdGhlICJzdWJtaXR0ZWQiIGRhdGEsIGRlbGV0aW9ucyBvY2N1ciBvbiB0aGUgY2xpZW50IHNpZGUgYW5kIHRodXMgdGhlIG5lZWQgdG8gdHJhY2sgdGhpcyB1c2luZyBoaWRkZW4gZm9ybSBlbGVtZW50cy4KLSAgICAgIFZlY3RvciBzaVNlcnZpY2UgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKTsKLSAgICAgIGlmIChzaVNlcnZpY2UgPT0gbnVsbCkKLSAgICAgICAgc2lTZXJ2aWNlID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBzaVNlcnZpY2UucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIFZlY3RvciBzaVNlcnZpY2VDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRV9DT1BZKTsKLSAgICAgIC8vIFRoZSBicm93c2VyIHdpbGwgZW5mb3JjZSB0aGUgcnVsZSBvZiBoYXZpbmcgb25seSBvbmUgc2VydmljZSBpbiB0aGlzIGxpc3QuCi0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzaVNlcnZpY2VDb3B5LmVsZW1lbnRBdCgwKTsKLSAgICAgIHNpU2VydmljZS5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFLHNpU2VydmljZSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9CVVNJTkVTU19TRVJWSUNFLGJzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0JVU0lORVNTX1NFUlZJQ0UpOwotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgdXNlU2VydmljZUNoZWNrZWQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1NFUlZJQ0UiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChvd25lZENoZWNrZWQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX09XTkVELG93bmVkQ2hlY2tlZCk7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9PV05FRCk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxuYW1lKTsKLQotICAgIGlmIChpZFR5cGVzICE9IG51bGwgJiYgaWRLZXlOYW1lcyAhPSBudWxsICYmIGlkS2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IG5ldyBJZGVudGlmaWVyQmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxpZEtleU5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGlkS2V5TmFtZXNbaV0saWRLZXlWYWx1ZXNbaV0saWRUeXBlc1tpXSk7Ci0gICAgICAgIGlkQmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyxpZEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotCi0gICAgaWYgKGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotCi0gICAgaWYgKGZpbmRRdWFsaWZpZXJWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBGaW5kUXVhbGlmaWVycyBmaW5kUXVhbGlmaWVycyA9IG5ldyBGaW5kUXVhbGlmaWVycygpOwotICAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxmaW5kUXVhbGlmaWVyVmFsdWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEZpbmRRdWFsaWZpZXIgZmluZFF1YWxpZmllciA9IG5ldyBGaW5kUXVhbGlmaWVyKGZpbmRRdWFsaWZpZXJWYWx1ZXNbaV0pOwotICAgICAgICBmaW5kUXVhbGlmaWVyVmVjdG9yLmFkZEVsZW1lbnQoZmluZFF1YWxpZmllcik7Ci0gICAgICB9Ci0gICAgICBmaW5kUXVhbGlmaWVycy5zZXRGaW5kUXVhbGlmaWVyVmVjdG9yKGZpbmRRdWFsaWZpZXJWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfRklORFFVQUxJRklFUlMsZmluZFF1YWxpZmllcnMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0ZJTkRRVUFMSUZJRVJTKTsKLQotICAgIGlmIChtYXhTZWFyY2hTZXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQsbWF4U2VhcmNoU2V0KTsKLSAgICB9Ci0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZUludGVnZXIobWF4U2VhcmNoU2V0KSkKLSAgICB7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VUKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9NQVhfU0VBUkNIX1NFVCIpKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1heFJlc3VsdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyxtYXhSZXN1bHRzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICAgIH0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhSZXN1bHRzKSkKLSAgICB7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9NQVhfUkVTVUxUUyIpKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gb3ZlcnJpZGVBdXRoZW50aWNhdGlvblZhbGlkYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOyAgICAgIAotICAgICAgYm9vbGVhbiB1c2VTZXJ2aWNlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFKSAhPSBudWxsKTsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQlVTSU5FU1NfU0VSVklDRSk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICBGaW5kUXVhbGlmaWVycyBmaW5kUXVhbGlmaWVycyA9IChGaW5kUXVhbGlmaWVycylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9GSU5EUVVBTElGSUVSUyk7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkZW50aWZpZXJCYWcgPSAoSWRlbnRpZmllckJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IChDYXRlZ29yeUJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLSAgICAgIGJvb2xlYW4gb3duZWQgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfT1dORUQpICE9IG51bGwpOwotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIGludCBtYXhTZWFyY2hTZXQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICAgIGludCBtYXhSZXN1bHRzID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTKSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFZlY3RvciB0TW9kZWxLZXlWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICAgIGlmIChvd25lZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICAgIHRNb2RlbEtleVZlY3RvciA9IGZpbmRBbGxPd25lZFRNb2RlbHMocHJveHksIHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgbWF4UmVzdWx0cyk7Ci0gICAgICB9Ci0gICAgICBpZiAodXNlU2VydmljZSkKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ1RlbXBsYXRlcyBiaW5kaW5nVGVtcGxhdGVzID0gYnMuZ2V0QmluZGluZ1RlbXBsYXRlcygpOwotICAgICAgICBib29sZWFuIGVuZFNlYXJjaCA9IGZhbHNlOwotICAgICAgICBpZiAoYmluZGluZ1RlbXBsYXRlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wO2k8YmluZGluZ1RlbXBsYXRlcy5zaXplKCk7aSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmRpbmdUZW1wbGF0ZSBidCA9IGJpbmRpbmdUZW1wbGF0ZXMuZ2V0KGkpOwotICAgICAgICAgICAgVE1vZGVsSW5zdGFuY2VEZXRhaWxzIHRNb2RlbEluc3RhbmNlRGV0YWlscyA9IGJ0LmdldFRNb2RlbEluc3RhbmNlRGV0YWlscygpOwotICAgICAgICAgICAgZm9yIChpbnQgaj0wO2o8dE1vZGVsSW5zdGFuY2VEZXRhaWxzLnNpemUoKTtqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFRNb2RlbEluc3RhbmNlSW5mbyB0TW9kZWxJbnN0YW5jZUluZm8gPSB0TW9kZWxJbnN0YW5jZURldGFpbHMuZ2V0KGopOwotICAgICAgICAgICAgICBpZiAodE1vZGVsS2V5VmVjdG9yLnNpemUoKSA8IG1heFJlc3VsdHMpCi0gICAgICAgICAgICAgICAgdE1vZGVsS2V5VmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsSW5zdGFuY2VJbmZvLmdldFRNb2RlbEtleSgpKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW5kU2VhcmNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVuZFNlYXJjaCkKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7ICAKLSAgICAgICAgVE1vZGVsTGlzdCB0TW9kZWxMaXN0ID0gcHJveHkuZmluZF90TW9kZWwobmFtZSxjYXRlZ29yeUJhZyxpZGVudGlmaWVyQmFnLGZpbmRRdWFsaWZpZXJzLG1heFNlYXJjaFNldCk7Ci0gICAgICAgIFRNb2RlbEluZm9zIHRNb2RlbEluZm9zID0gdE1vZGVsTGlzdC5nZXRUTW9kZWxJbmZvcygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxJbmZvcy5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsSW5mbyB0TW9kZWxJbmZvID0gdE1vZGVsSW5mb3MuZ2V0KGkpOwotICAgICAgICAgIGlmICh0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpIDwgbWF4UmVzdWx0cykKLSAgICAgICAgICAgIHRNb2RlbEtleVZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbEluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGludCBmaW5hbE51bWJlck9mVE1vZGVsS2V5cyA9IHRNb2RlbEtleVZlY3Rvci5zaXplKCk7Ci0gICAgICBpZiAoZmluYWxOdW1iZXJPZlRNb2RlbEtleXMgPiAwKQotICAgICAgewotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgVmVjdG9yIGZpbmFsVE1vZGVsVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIGludCBjdXJyZW50SW5kZXggPSAwOwotICAgICAgICAgIGludCB3aW5kb3dTaXplID0gZmluYWxOdW1iZXJPZlRNb2RlbEtleXM7Ci0gICAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IHRNb2RlbEtleVZlY3Rvci5zaXplKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW50IHN1Ykxpc3RUb0luZGV4ID0gTWF0aC5taW4oY3VycmVudEluZGV4K3dpbmRvd1NpemUsdE1vZGVsS2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHByb3h5LmdldF90TW9kZWxEZXRhaWwobmV3IFZlY3Rvcih0TW9kZWxLZXlWZWN0b3Iuc3ViTGlzdChjdXJyZW50SW5kZXgsc3ViTGlzdFRvSW5kZXgpKSk7Ci0gICAgICAgICAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0gICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICAgICAgICAgIGZpbmFsVE1vZGVsVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsVmVjdG9yLmVsZW1lbnRBdChpKSk7Ci0gICAgICAgICAgICAgIGlmICh0TW9kZWxEZXRhaWwuZ2V0VHJ1bmNhdGVkQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHdpbmRvd1NpemUgPSB0TW9kZWxWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgICAgICBjdXJyZW50SW5kZXggKz0gd2luZG93U2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IGRyID0gZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotICAgICAgICAgICAgICBpZiAoKChSZXN1bHQpIGRyLmdldFJlc3VsdFZlY3RvcigpLmdldCgwKSkuZ2V0RXJySW5mbygpLmdldEVyckNvZGUoKSA9PSBEaXNwb3NpdGlvblJlcG9ydC5FX2ludmFsaWRLZXlQYXNzZWQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZXJySW5mb1RleHQgPSAoKFJlc3VsdCkgZHIuZ2V0UmVzdWx0VmVjdG9yKCkuZ2V0KDApKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9Y3VycmVudEluZGV4O2k8c3ViTGlzdFRvSW5kZXg7aSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyB0TW9kZWxLZXkgPSAoU3RyaW5nKXRNb2RlbEtleVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICBpZiAoZXJySW5mb1RleHQuaW5kZXhPZih0TW9kZWxLZXkpICE9IC0xIHx8IGVyckluZm9UZXh0LmluZGV4T2YodE1vZGVsS2V5LnRvVXBwZXJDYXNlKCkpICE9IC0xIHx8IGVyckluZm9UZXh0LmluZGV4T2YodE1vZGVsS2V5LnRvTG93ZXJDYXNlKCkpICE9IC0xKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0TW9kZWxLZXlWZWN0b3IucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGludCBmaW5hbE51bWJlck9mVE1vZGVscyA9IGZpbmFsVE1vZGVsVmVjdG9yLnNpemUoKTsKLSAgICAgICAgICBpZiAoZmluYWxOdW1iZXJPZlRNb2RlbHMgPiAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRNb2RlbFtdIHRNb2RlbEFycmF5ID0gbmV3IFRNb2RlbFtmaW5hbE51bWJlck9mVE1vZGVsc107Ci0gICAgICAgICAgICBmaW5hbFRNb2RlbFZlY3Rvci50b0FycmF5KHRNb2RlbEFycmF5KTsKLSAgICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQodE1vZGVsQXJyYXkscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKHRNb2RlbEFycmF5Lmxlbmd0aCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLy8gQ29waWVkIGRpcmVjdGx5IGZyb20gVURESVdTRExQcm94eSdzIGZpbmRBbGxTZXJ2aWNlSW50ZXJmYWNlcygpIG1ldGhvZCB3aXRoIG1pbm9yIG1vZGlmaWNhdGlvbnMuIFRoZSBoYXJkY29kZWQgc3RyaW5ncyBzaG91bGQgTk9UIGJlIHRyYW5zbGF0ZWQuCi0gIHByaXZhdGUgZmluYWwgVmVjdG9yIGZpbmRBbGxPd25lZFRNb2RlbHMoVURESVByb3h5IHByb3h5LCBTdHJpbmcgYXV0aEluZm9TdHJpbmcsIGludCBtYXhSZXN1bHRzKSB0aHJvd3MgVURESUV4Y2VwdGlvbiwgVHJhbnNwb3J0RXhjZXB0aW9uCi0gIHsKLSAgICBSZWdpc3RlcmVkSW5mbyByZWdpc3RlcmVkSW5mbyA9IG51bGw7Ci0KLSAgICAvLyBHZXQgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygb3duZWQgKHJlZ2lzdGVyZWQpIGluZm8uCi0gICAgLy8gKEEgUmVnaXN0ZXJlZEluZm8gY29uc2lzdHMgb2YgQnVzaW5lc3NJbmZvcyBhbmQgVE1vZGVsSW5mb3MuCi0gICAgLy8gQnVzaW5lc3NJbmZvcyBhbHNvIGNvbnRhaW4gU2VydmljZUluZm9zLikKLSAgICByZWdpc3RlcmVkSW5mbyA9IHByb3h5LmdldF9yZWdpc3RlcmVkSW5mbyhhdXRoSW5mb1N0cmluZyk7Ci0KLSAgICAvL0NyZWF0ZSBhIFZlY3RvciB0byBhZGQgdGhlIFRNb2RlbEtleXMgZnJvbSB0aGUgcmVnaXN0ZXJlZEluZm8uCi0gICAgVmVjdG9yIHRNb2RlbEtleUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvL0dldCB0aGUgVE1vZGVsSW5mb3MgZnJvbSB0aGUgcmVnaXN0ZXJlZEluZm8uCi0gICAgVE1vZGVsSW5mb3MgdE1vZGVsSW5mb3MgPSByZWdpc3RlcmVkSW5mby5nZXRUTW9kZWxJbmZvcygpOwotCi0gICAgLy9HZXQgYWxsIHRoZSBUTW9kZWxLZXlzIGZyb20gd2l0aGluIHRoZSBUTW9kZWxJbmZvcwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdE1vZGVsSW5mb3Muc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgVE1vZGVsSW5mbyB0TW9kZWxJbmZvID0gdE1vZGVsSW5mb3MuZ2V0KGkpOwotICAgICAgaWYgKHRNb2RlbEtleUxpc3Quc2l6ZSgpIDwgbWF4UmVzdWx0cykKLSAgICAgICAgdE1vZGVsS2V5TGlzdC5hZGRFbGVtZW50KHRNb2RlbEluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgZWxzZQotICAgICAgICBicmVhazsKLSAgICB9ICAgIAotICAgIHJldHVybiB0TW9kZWxLZXlMaXN0OwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YmZlZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsTGlzdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsbmFtZSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyLgotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBUTW9kZWxMaXN0IHRNb2RlbExpc3QgPSBwcm94eS5maW5kX3RNb2RlbChuYW1lLG51bGwsbnVsbCxudWxsLFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpOwotICAgICAgVE1vZGVsSW5mb3MgdE1vZGVsSW5mb3MgPSB0TW9kZWxMaXN0LmdldFRNb2RlbEluZm9zKCk7Ci0gICAgICBWZWN0b3IgdE1vZGVsS2V5VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgCi0gICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxJbmZvcy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBUTW9kZWxJbmZvIHRNb2RlbEluZm8gPSB0TW9kZWxJbmZvcy5nZXQoaSk7Ci0gICAgICAgIGlmICh0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpIDwgVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUykKLSAgICAgICAgICB0TW9kZWxLZXlWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWxJbmZvLmdldFRNb2RlbEtleSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAodE1vZGVsS2V5VmVjdG9yLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbCh0TW9kZWxLZXlWZWN0b3IpOwotICAgICAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0gICAgICAgICAgVE1vZGVsW10gdE1vZGVsQXJyYXkgPSBuZXcgVE1vZGVsW3RNb2RlbFZlY3Rvci5zaXplKCldOwotICAgICAgICAgIHRNb2RlbFZlY3Rvci50b0FycmF5KHRNb2RlbEFycmF5KTsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudCh0TW9kZWxBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZih0TW9kZWxBcnJheS5sZW5ndGgpKSk7ICAgICAgICAKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYTVkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9LRVkpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAodXVpZEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSx1dWlkS2V5KTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXVpZEtleSkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVVJRF9LRVkiKSk7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgdXVpZEtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUgb3IgZXZlbiBVRERJTWFpbk5vZGUuCi0gICAgICBpZiAocmVnTm9kZV8gPT0gbnVsbCkKLSAgICAgICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKE5vZGUpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFKSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIEJ1c2luZXNzU2VydmljZVtdIGJzQXJyYXkgPSBuZXcgQnVzaW5lc3NTZXJ2aWNlWzFdOwotICAgICAgU2VydmljZURldGFpbCBzZXJ2aWNlRGV0YWlsID0gcHJveHkuZ2V0X3NlcnZpY2VEZXRhaWwodXVpZEtleSk7Ci0gICAgICBWZWN0b3IgYnNWZWN0b3IgPSBzZXJ2aWNlRGV0YWlsLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgaWYgKGJzVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGJzVmVjdG9yLnRvQXJyYXkoYnNBcnJheSk7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudChic0FycmF5LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YoYnNBcnJheS5sZW5ndGgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxic0FycmF5WzBdKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNmQyYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZWdpc3RlcmVkSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXJzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuVE1vZGVsQmFnOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9TRUFSQ0hfU0VULFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9SRVNVTFRTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1JFU1VMVFMpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBvd25lZENoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQpOwotICAgIFN0cmluZ1tdIGJ1c05vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTKTsKLSAgICBTdHJpbmdbXSBsYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIHNpTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UpOwotICAgIFN0cmluZ1tdIGZpbmRRdWFsaWZpZXJWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUik7Ci0gICAgU3RyaW5nIG1heFNlYXJjaFNldCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgU3RyaW5nIG1heFJlc3VsdHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGlmIChvd25lZENoZWNrZWQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfT1dORUQsb3duZWRDaGVja2VkKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfT1dORUQpOwotCi0gICAgaWYgKGJ1c05vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBBbHRob3VnaCB3ZSBhbHJlYWR5IGhhdmUgdGhlICJzdWJtaXR0ZWQiIGRhdGEsIGRlbGV0aW9ucyBvY2N1ciBvbiB0aGUgY2xpZW50IHNpZGUgYW5kIHRodXMgdGhlIG5lZWQgdG8gdHJhY2sgdGhpcyB1c2luZyBoaWRkZW4gZm9ybSBlbGVtZW50cy4KLSAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZKTsKLSAgICAgIC8vIFRoZSBicm93c2VyIHdpbGwgZW5mb3JjZSB0aGUgcnVsZSBvZiBoYXZpbmcgb25seSBvbmUgYnVzaW5lc3MgaW4gdGhpcyBsaXN0LgotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzQ29weS5lbGVtZW50QXQoMCk7Ci0gICAgICBzZXJ2aWNlQnVzaW5lc3MuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1Msc2VydmljZUJ1c2luZXNzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUixzcCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpOwotICAgIH0KLQotICAgIGlmIChsYW5ndWFnZXMgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8bmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgTmFtZSB1ZGRpNGpOYW1lOwotICAgICAgICBpZiAobGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpOYW1lKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsbmFtZVZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0KLSAgICBpZiAoY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMsY2F0QmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotCi0gICAgaWYgKHNpTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEFsdGhvdWdoIHdlIGFscmVhZHkgaGF2ZSB0aGUgInN1Ym1pdHRlZCIgZGF0YSwgZGVsZXRpb25zIG9jY3VyIG9uIHRoZSBjbGllbnQgc2lkZSBhbmQgdGh1cyB0aGUgbmVlZCB0byB0cmFjayB0aGlzIHVzaW5nIGhpZGRlbiBmb3JtIGVsZW1lbnRzLgotICAgICAgVmVjdG9yIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgICAgIGlmIChzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICAgICBWZWN0b3IgdE1vZGVsS2V5U3RyaW5nVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgSGFzaHRhYmxlIHJlc3VsdEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzaU5vZGVJZHMubGVuZ3RoO2krKykKLSAgICAgICAgcmVzdWx0SGFzaC5wdXQoc2lOb2RlSWRzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5LnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAocmVzdWx0SGFzaC5nZXQoU3RyaW5nLnZhbHVlT2YobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCkpKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIHRNb2RlbEtleVN0cmluZ1ZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIFRNb2RlbEJhZyB0TW9kZWxCYWcgPSBuZXcgVE1vZGVsQmFnKHRNb2RlbEtleVN0cmluZ1ZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxzZXJ2aWNlU2VydmljZUludGVyZmFjZXMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUxCQUcsdE1vZGVsQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTEJBRyk7Ci0gICAgfQotCi0gICAgaWYgKGZpbmRRdWFsaWZpZXJWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBGaW5kUXVhbGlmaWVycyBmaW5kUXVhbGlmaWVycyA9IG5ldyBGaW5kUXVhbGlmaWVycygpOwotICAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxmaW5kUXVhbGlmaWVyVmFsdWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEZpbmRRdWFsaWZpZXIgZmluZFF1YWxpZmllciA9IG5ldyBGaW5kUXVhbGlmaWVyKGZpbmRRdWFsaWZpZXJWYWx1ZXNbaV0pOwotICAgICAgICBmaW5kUXVhbGlmaWVyVmVjdG9yLmFkZEVsZW1lbnQoZmluZFF1YWxpZmllcik7Ci0gICAgICB9Ci0gICAgICBmaW5kUXVhbGlmaWVycy5zZXRGaW5kUXVhbGlmaWVyVmVjdG9yKGZpbmRRdWFsaWZpZXJWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9GSU5EUVVBTElGSUVSUyxmaW5kUXVhbGlmaWVycyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9GSU5EUVVBTElGSUVSUyk7Ci0KLSAgICBpZiAobWF4U2VhcmNoU2V0ICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQsbWF4U2VhcmNoU2V0KTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1NFQVJDSF9TRVQsbWF4U2VhcmNoU2V0KTsKLSAgICB9Ci0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZUludGVnZXIobWF4U2VhcmNoU2V0KSkKLSAgICB7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1NFQVJDSF9TRVQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9TRUFSQ0hfU0VUIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobWF4UmVzdWx0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUyxtYXhSZXN1bHRzKTsKLSAgICB9Ci0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZUludGVnZXIobWF4UmVzdWx0cykpCi0gICAgewotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9SRVNVTFRTKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9NQVhfUkVTVUxUUyIpKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7ICAgICAgCi0gICAgICBGaW5kUXVhbGlmaWVycyBmaW5kUXVhbGlmaWVycyA9IChGaW5kUXVhbGlmaWVycylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IHNwID0gKEJ1c2luZXNzRW50aXR5KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUik7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IChDYXRlZ29yeUJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgICAgVE1vZGVsQmFnIHRNb2RlbEJhZyA9IChUTW9kZWxCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUxCQUcpOwotICAgICAgYm9vbGVhbiBvd25lZCA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX09XTkVEKSAhPSBudWxsKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBpbnQgbWF4U2VhcmNoU2V0ID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICAgIGludCBtYXhSZXN1bHRzID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMpKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKG93bmVkICYmICFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgICAKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFN0cmluZyBidXNpbmVzc0tleTsKLSAgICAgIGlmIChzcCAhPSBudWxsKQotICAgICAgICBidXNpbmVzc0tleSA9IHNwLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGJ1c2luZXNzS2V5ID0gIiI7Ci0KLSAgICAgIGludCBmaW5hbE51bWJlck9mU2VydmljZUtleXM7Ci0gICAgICBWZWN0b3Igc2VydmljZUtleVZlY3RvcjsKLSAgICAgIGlmIChvd25lZCkKLSAgICAgIHsKLSAgICAgICAgc2VydmljZUtleVZlY3RvciA9IGZpbmRBbGxPd25lZFNlcnZpY2VzKHByb3h5LHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSxidXNpbmVzc0tleSxtYXhSZXN1bHRzKTsKLSAgICAgICAgZmluYWxOdW1iZXJPZlNlcnZpY2VLZXlzID0gc2VydmljZUtleVZlY3Rvci5zaXplKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VMaXN0IHNlcnZpY2VMaXN0ID0gcHJveHkuZmluZF9zZXJ2aWNlKGJ1c2luZXNzS2V5LG5hbWVWZWN0b3IsY2F0ZWdvcnlCYWcsdE1vZGVsQmFnLGZpbmRRdWFsaWZpZXJzLG1heFNlYXJjaFNldCk7Ci0gICAgICAgIFNlcnZpY2VJbmZvcyBzSW5mb3MgPSBzZXJ2aWNlTGlzdC5nZXRTZXJ2aWNlSW5mb3MoKTsKLSAgICAgICAgZmluYWxOdW1iZXJPZlNlcnZpY2VLZXlzID0gTWF0aC5taW4obWF4UmVzdWx0cyxzSW5mb3Muc2l6ZSgpKTsKLSAgICAgICAgc2VydmljZUtleVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZmluYWxOdW1iZXJPZlNlcnZpY2VLZXlzO2krKykKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2VJbmZvIHNJbmZvID0gc0luZm9zLmdldChpKTsKLSAgICAgICAgICBzZXJ2aWNlS2V5VmVjdG9yLmFkZEVsZW1lbnQoc0luZm8uZ2V0U2VydmljZUtleSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoZmluYWxOdW1iZXJPZlNlcnZpY2VLZXlzID4gMCkKLSAgICAgIHsgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBmaW5hbEJ1c1NlcnZpY2VWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgaW50IGN1cnJlbnRJbmRleCA9IDA7Ci0gICAgICAgICAgaW50IHdpbmRvd1NpemUgPSBmaW5hbE51bWJlck9mU2VydmljZUtleXM7Ci0gICAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IHNlcnZpY2VLZXlWZWN0b3Iuc2l6ZSgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBzdWJMaXN0VG9JbmRleCA9IE1hdGgubWluKGN1cnJlbnRJbmRleCt3aW5kb3dTaXplLHNlcnZpY2VLZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTZXJ2aWNlRGV0YWlsIHNlcnZpY2VEZXRhaWwgPSBwcm94eS5nZXRfc2VydmljZURldGFpbChuZXcgVmVjdG9yKHNlcnZpY2VLZXlWZWN0b3Iuc3ViTGlzdChjdXJyZW50SW5kZXgsc3ViTGlzdFRvSW5kZXgpKSk7Ci0gICAgICAgICAgICAgIFZlY3RvciBidXNTZXJ2aWNlVmVjdG9yID0gc2VydmljZURldGFpbC5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8YnVzU2VydmljZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICAgICAgICAgIGZpbmFsQnVzU2VydmljZVZlY3Rvci5hZGRFbGVtZW50KGJ1c1NlcnZpY2VWZWN0b3IuZWxlbWVudEF0KGkpKTsKLSAgICAgICAgICAgICAgaWYgKHNlcnZpY2VEZXRhaWwuZ2V0VHJ1bmNhdGVkQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHdpbmRvd1NpemUgPSBidXNTZXJ2aWNlVmVjdG9yLnNpemUoKTsKLSAgICAgICAgICAgICAgY3VycmVudEluZGV4ICs9IHdpbmRvd1NpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEaXNwb3NpdGlvblJlcG9ydCBkciA9IGUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLSAgICAgICAgICAgICAgaWYgKCgoUmVzdWx0KSBkci5nZXRSZXN1bHRWZWN0b3IoKS5nZXQoMCkpLmdldEVyckluZm8oKS5nZXRFcnJDb2RlKCkgPT0gRGlzcG9zaXRpb25SZXBvcnQuRV9pbnZhbGlkS2V5UGFzc2VkKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGVyckluZm9UZXh0ID0gKChSZXN1bHQpIGRyLmdldFJlc3VsdFZlY3RvcigpLmdldCgwKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpPWN1cnJlbnRJbmRleDtpPHN1Ykxpc3RUb0luZGV4O2krKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgc2VydmljZUtleSA9IChTdHJpbmcpc2VydmljZUtleVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICBpZiAoZXJySW5mb1RleHQuaW5kZXhPZihzZXJ2aWNlS2V5KSAhPSAtMSB8fCBlcnJJbmZvVGV4dC5pbmRleE9mKHNlcnZpY2VLZXkudG9VcHBlckNhc2UoKSkgIT0gLTEgfHwgZXJySW5mb1RleHQuaW5kZXhPZihzZXJ2aWNlS2V5LnRvTG93ZXJDYXNlKCkpICE9IC0xKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlS2V5VmVjdG9yLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpbnQgZmluYWxOdW1iZXJPZkJ1c2luZXNzU2VydmljZXMgPSBmaW5hbEJ1c1NlcnZpY2VWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlcyA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlW10gYnNBcnJheSA9IG5ldyBCdXNpbmVzc1NlcnZpY2VbZmluYWxOdW1iZXJPZkJ1c2luZXNzU2VydmljZXNdOwotICAgICAgICAgICAgZmluYWxCdXNTZXJ2aWNlVmVjdG9yLnRvQXJyYXkoYnNBcnJheSk7Ci0gICAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KGJzQXJyYXkscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YoYnNBcnJheS5sZW5ndGgpKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFU19GT1VORCIpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VTX0ZPVU5EIikpOwotICAgIH0gICAKLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9IAotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLy8gQ29waWVkIGRpcmVjdGx5IGZyb20gVURESVdTRExQcm94eSdzIGZpbmRBbGxPd25lZFNlcnZpY2VzKCkgbWV0aG9kIHdpdGggbWlub3IgbW9kaWZpY2F0aW9ucy4gVGhlIGhhcmRjb2RlZCBzdHJpbmdzIHNob3VsZCBOT1QgYmUgdHJhbnNsYXRlZC4KLSAgcHJpdmF0ZSBmaW5hbCBWZWN0b3IgZmluZEFsbE93bmVkU2VydmljZXMoVURESVByb3h5IHByb3h5LFN0cmluZyBhdXRoSW5mb1N0cmluZyxTdHJpbmcgYnVzaW5lc3NLZXksaW50IG1heFJlc3VsdHMpIHRocm93cyBVRERJRXhjZXB0aW9uLCBUcmFuc3BvcnRFeGNlcHRpb24KLSAgewotICAgIFJlZ2lzdGVyZWRJbmZvIHJlZ2lzdGVyZWRJbmZvID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgY29tcGxldGUgbGlzdCBvZiBvd25lZCAocmVnaXN0ZXJlZCkgaW5mby4KLSAgICAvLyAoQSBSZWdpc3RlcmVkSW5mbyBjb25zaXN0cyBvZiBCdXNpbmVzc0luZm9zIGFuZCBUTW9kZWxJbmZvcy4KLSAgICAvLyBCdXNpbmVzc0luZm9zIGFsc28gY29udGFpbiBTZXJ2aWNlSW5mb3MuKQotICAgIHJlZ2lzdGVyZWRJbmZvID0gcHJveHkuZ2V0X3JlZ2lzdGVyZWRJbmZvKGF1dGhJbmZvU3RyaW5nKTsKLQotICAgIC8vQ3JlYXRlIGEgdmVjdG9yIHRvIGFkZCB0aGUgc2VydmljZUtleXMgZnJvbSB0aGUgcmVnaXN0ZXJlZEluZm8gdG8uCi0gICAgVmVjdG9yIHNlcnZpY2VLZXlMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy9HZXQgdGhlIGJ1c2luZXNzSW5mb3MgZnJvbSB0aGUgcmVnaXN0ZXJlZEluZm8uCi0gICAgQnVzaW5lc3NJbmZvcyBidXNpbmVzc0luZm9zID0gcmVnaXN0ZXJlZEluZm8uZ2V0QnVzaW5lc3NJbmZvcygpOwotCi0gICAgLy9HZXQgYWxsIHRoZSBzZXJ2aWNlS2V5cyBmcm9tIHRoZSBzZXJ2aWNlSW5mb3Mgd2l0aGluIHRoZSBidXNpbmVzc0luZm9zLAotICAgIC8vYW5kIGFkZCB0aGVtIHRvIHRoZSBzZXJ2aWNlS2V5TGlzdC4KLSAgICBib29sZWFuIGVuZFNlYXJjaCA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVzaW5lc3NJbmZvcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBCdXNpbmVzc0luZm8gYnVzaW5lc3NJbmZvID0gYnVzaW5lc3NJbmZvcy5nZXQoaSk7Ci0gICAgICBTdHJpbmcgY3VycmVudEJ1c2luZXNzS2V5ID0gYnVzaW5lc3NJbmZvLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICBpZiAoYnVzaW5lc3NLZXkubGVuZ3RoKCkgPiAwICYmIGN1cnJlbnRCdXNpbmVzc0tleS5lcXVhbHMoYnVzaW5lc3NLZXkpKQotICAgICAgICBlbmRTZWFyY2ggPSB0cnVlOwotICAgICAgU2VydmljZUluZm9zIHNlcnZpY2VJbmZvcyA9IGJ1c2luZXNzSW5mby5nZXRTZXJ2aWNlSW5mb3MoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmljZUluZm9zLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBTZXJ2aWNlSW5mbyBzZXJ2aWNlSW5mbyA9IHNlcnZpY2VJbmZvcy5nZXQoaik7Ci0gICAgICAgIGlmIChzZXJ2aWNlSW5mby5nZXRCdXNpbmVzc0tleSgpLmVxdWFscyhjdXJyZW50QnVzaW5lc3NLZXkpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHNlcnZpY2VLZXlMaXN0LnNpemUoKSA8IG1heFJlc3VsdHMpCi0gICAgICAgICAgICBzZXJ2aWNlS2V5TGlzdC5hZGQoc2VydmljZUluZm8uZ2V0U2VydmljZUtleSgpKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgZW5kU2VhcmNoID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGVuZFNlYXJjaCkKLSAgICAgICAgYnJlYWs7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gc2VydmljZUtleUxpc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NTc1NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUlucHV0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlTGlzdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSxuYW1lKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gVGhpcyBzaG91bGRuJ3Qgb2NjdXIuCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOwotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQobmV3IE5hbWUobmFtZSkpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFNlcnZpY2VMaXN0IHNlcnZpY2VMaXN0ID0gcHJveHkuZmluZF9zZXJ2aWNlKCIiLG5hbWVWZWN0b3IsbnVsbCxudWxsLG51bGwsVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgICAKLSAgICAgIFNlcnZpY2VJbmZvcyBzSW5mb3MgPSBzZXJ2aWNlTGlzdC5nZXRTZXJ2aWNlSW5mb3MoKTsKLSAgICAgIGludCBmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlcyA9IE1hdGgubWluKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1JFU1VMVFMsc0luZm9zLnNpemUoKSk7Ci0gICAgICBWZWN0b3Igc2VydmljZUtleVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzO2krKykKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUluZm8gc0luZm8gPSBzSW5mb3MuZ2V0KGkpOwotICAgICAgICBzZXJ2aWNlS2V5VmVjdG9yLmFkZEVsZW1lbnQoc0luZm8uZ2V0U2VydmljZUtleSgpKTsKLSAgICAgIH0KLSAgICAgICAgCi0gICAgICBpZiAoZmluYWxOdW1iZXJPZkJ1c2luZXNzU2VydmljZXMgPiAwKQotICAgICAgewotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZURldGFpbCBzZXJ2aWNlRGV0YWlsID0gcHJveHkuZ2V0X3NlcnZpY2VEZXRhaWwoc2VydmljZUtleVZlY3Rvcik7Ci0gICAgICAgICAgVmVjdG9yIGJ1c2luZXNzU2VydmljZVZlY3RvciA9IHNlcnZpY2VEZXRhaWwuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlW10gYnNBcnJheSA9IG5ldyBCdXNpbmVzc1NlcnZpY2VbZmluYWxOdW1iZXJPZkJ1c2luZXNzU2VydmljZXNdOwotICAgICAgICAgIGJ1c2luZXNzU2VydmljZVZlY3Rvci50b0FycmF5KGJzQXJyYXkpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KGJzQXJyYXkscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihic0FycmF5Lmxlbmd0aCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM0MGNjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuSWRlbnRpZmllckJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBSZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBuYW1lTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGlkVHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFKTsKLSAgICBTdHJpbmdbXSBpZEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGlkS2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gZGlzY292ZXJ5VVJMVmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RJU0NPVkVSWVVSTCk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVMYW5ndWFnZXMgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgLy8gVURESSdzIHNhdmUgQVBJIChBcHBlbmRpeCBDIG9mIHRoZSBVRERJIFYyIFByb2dyYW1tZXJzIEFQSSBTcGVjaWZpY2F0aW9uKSByZXF1aXJlcyB0aGUgZm9sbG93aW5nOgotICAgICAgLy8gMSkgT25seSB0aGUgZmlyc3Qgcm93IGNhbiBoYXZlIGEgYmxhbmsgbGFuZ3VhZ2UuCi0gICAgICAvLyAyKSBPbmx5IDEgbmFtZSBwZXIgbGFuZ3VhZ2UuCi0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIik7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgTmFtZSB1ZGRpNGpOYW1lOwotICAgICAgICBpZiAobmFtZUxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldLG5hbWVMYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDAgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KG5hbWVMYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQobmFtZUxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAobmFtZXNbaV0udHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQodWRkaTRqTmFtZSk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxuYW1lVmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05BTUVTIikpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaV0udHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpEZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0KLSAgICBpZiAoaWRUeXBlcyAhPSBudWxsICYmIGlkS2V5TmFtZXMgIT0gbnVsbCAmJiBpZEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBuZXcgSWRlbnRpZmllckJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aWRLZXlOYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShpZEtleU5hbWVzW2ldLGlkS2V5VmFsdWVzW2ldLGlkVHlwZXNbaV0pOwotICAgICAgICBpZEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMsaWRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLQotICAgIGlmIChjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMsY2F0QmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgICAgIAotICAgIGlmIChkaXNjb3ZlcnlVUkxWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMgPSBuZXcgRGlzY292ZXJ5VVJMcygpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZVVJMIik7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxWYWx1ZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVVUkwoZGlzY292ZXJ5VVJMVmFsdWVzW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGRpc2NvdmVyeVVSTHMuYWRkKG5ldyBEaXNjb3ZlcnlVUkwoZGlzY292ZXJ5VVJMVmFsdWVzW2ldLCIiKSk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGRpc2NvdmVyeVVSTHMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOyAgICAgIAotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgICAgSWRlbnRpZmllckJhZyBpZGVudGlmaWVyQmFnID0gKElkZW50aWZpZXJCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSAoQ2F0ZWdvcnlCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICAgICBEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMgPSAoRGlzY292ZXJ5VVJMcylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotCi0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IG5ldyBCdXNpbmVzc0VudGl0eSgpOwotICAgICAgYmUuc2V0QnVzaW5lc3NLZXkoIiIpOwotICAgICAgYmUuc2V0TmFtZVZlY3RvcihuYW1lVmVjdG9yKTsKLSAgICAgIGJlLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIGJlLnNldElkZW50aWZpZXJCYWcoaWRlbnRpZmllckJhZyk7Ci0gICAgICBiZS5zZXRDYXRlZ29yeUJhZyhjYXRlZ29yeUJhZyk7Ci0gICAgICBiZS5zZXREaXNjb3ZlcnlVUkxzKGRpc2NvdmVyeVVSTHMpOwotICAgICAgVmVjdG9yIGJlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYmVWZWN0b3IuYWRkKGJlKTsKLQotICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJveHkuc2F2ZV9idXNpbmVzcyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJlVmVjdG9yKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKTsKLSAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKGJlLHJlZ0VsZW1lbnQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTX1BVQkxJU0hFRCIsYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIxOTliNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OKTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FLG5hbWUpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTkFNRSIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTixkZXNjcmlwdGlvbik7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04pOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLQotICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSBuZXcgQnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgIGJlLnNldEJ1c2luZXNzS2V5KCIiKTsKLSAgICAgIGJlLnNldERlZmF1bHROYW1lKG5ldyBOYW1lKG5hbWUpKTsKLSAgICAgIGJlLnNldERlZmF1bHREZXNjcmlwdGlvblN0cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICBWZWN0b3IgYmVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBiZVZlY3Rvci5hZGQoYmUpOwotCi0gICAgICBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5zYXZlX2J1c2luZXNzKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYmVWZWN0b3IpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUoYmUscmVnRWxlbWVudCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NfUFVCTElTSEVEIixiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMjQxZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgYnVzTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MpOwotICAgIFN0cmluZ1tdIHNlckludElkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UpOwotICAgIFN0cmluZyB3c2RsVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpOwotICAgIFN0cmluZ1tdIG5hbWVMYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSk7ICAgIAotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgaWYgKGJ1c05vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICBpZiAoc2VydmljZUJ1c2luZXNzID09IG51bGwpCi0gICAgICAgIHNlcnZpY2VCdXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2VydmljZUJ1c2luZXNzLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSk7Ci0gICAgICAvLyBUaGUgYnJvd3NlciB3aWxsIGVuZm9yY2UgdGhlIHJ1bGUgb2YgaGF2aW5nIG9ubHkgb25lIGJ1c2luZXNzIGluIHRoaXMgbGlzdC4KLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VCdXNpbmVzc0NvcHkuZWxlbWVudEF0KDApOwotICAgICAgc2VydmljZUJ1c2luZXNzLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTLHNlcnZpY2VCdXNpbmVzcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIsc3ApOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksc3AuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpOwotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9CVVNJTkVTUyIpKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKHNlckludElkcyAhPSBudWxsICYmIHNlckludElkcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFZlY3RvciBzZXJ2aWNlSW50ZXJmYWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgICAgIGlmIChzZXJ2aWNlSW50ZXJmYWNlcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2VydmljZUludGVyZmFjZXMucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZKTsKLSAgICAgIFZlY3RvciB0bW9kZWxzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VJbnRlcmZhY2VzQ29weS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClpdC5uZXh0KCk7Ci0gICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJJbnRJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0Tm9kZUlkID09IEludGVnZXIucGFyc2VJbnQoc2VySW50SWRzW2ldKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc2VydmljZUludGVyZmFjZXMuYWRkKGxpc3RFbGVtZW50KTsKLSAgICAgICAgICAgICAgdG1vZGVscy5hZGQobGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCkpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsIHNlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMLCB0bW9kZWxzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTCk7Ci0gICAgfQotICAgIAotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCx3c2RsVVJMKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwsd3NkbFVSTCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh3c2RsVVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBIYXNodGFibGUgbGFuZ3VhZ2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGlmIChuYW1lTGFuZ3VhZ2VzICE9IG51bGwgJiYgbmFtZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIC8vIFVEREkncyBzYXZlIEFQSSAoQXBwZW5kaXggQyBvZiB0aGUgVURESSBWMiBQcm9ncmFtbWVycyBBUEkgU3BlY2lmaWNhdGlvbikgcmVxdWlyZXMgdGhlIGZvbGxvd2luZzoKLSAgICAgIC8vIDEpIE9ubHkgdGhlIGZpcnN0IHJvdyBjYW4gaGF2ZSBhIGJsYW5rIGxhbmd1YWdlLgotICAgICAgLy8gMikgT25seSAxIG5hbWUgcGVyIGxhbmd1YWdlLgotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpOwotICAgICAgZm9yIChpbnQgaT0wO2k8bmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIE5hbWUgdWRkaTRqTmFtZTsKLSAgICAgICAgaWYgKG5hbWVMYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSxuYW1lTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KG5hbWVMYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChuYW1lTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmIChuYW1lc1tpXS50cmltKCkubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KHVkZGk0ak5hbWUpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxuYW1lVmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OQU1FUyIpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpOwotICAgICAgbGFuZ3VhZ2VIYXNoLmNsZWFyKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbnMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERlc2NyaXB0aW9uIHVkZGk0akRlc2NyaXB0aW9uOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSxkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1tpXS50cmltKCkubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQodWRkaTRqRGVzY3JpcHRpb24pOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLQotICAgIGlmIChjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUik7Ci0gICAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMKTsKLSAgICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSAoQ2F0ZWdvcnlCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotCi0gICAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgICAgRGVmaW5pdGlvbiBkZWYgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0KLSAgICAgIEJ1c2luZXNzU2VydmljZSBiczsKLSAgICAgIGlmICh0TW9kZWxWZWN0b3IgIT0gbnVsbCAmJiB0TW9kZWxWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgICAgYnMgPSB1ZGRpNGpIZWxwZXIubmV3QnVzaW5lc3NTZXJ2aWNlKHdzZGxVUkwsIGRlZiwgKFRNb2RlbFtdKXRNb2RlbFZlY3Rvci50b0FycmF5KG5ldyBUTW9kZWxbMF0pKTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gcmVnUHVibGlzaFNJQWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgaW50IGN1cnJlbnROb2RlSWQgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXROb2RlSWQoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSByZWdOb2RlXy5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBUTW9kZWxbXSB0TW9kZWxzID0gbnVsbDsKLSAgICAgICAgaWYgKHVkZGk0akhlbHBlci5pc01vbm9saXRoaWNXU0RMKGRlZikpCi0gICAgICAgIHsKLSAgICAgICAgICB0TW9kZWxzID0gbmV3IFRNb2RlbFsxXTsKLSAgICAgICAgICB0TW9kZWxzWzBdID0gdWRkaTRqSGVscGVyLm5ld1RNb2RlbCh3c2RsVVJMLCBkZWYpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ1tdIGltcG9ydHMgPSB1ZGRpNGpIZWxwZXIuZ2V0SW1wb3J0cyhkZWYsIHdzZGxVUkwpOwotICAgICAgICAgIHRNb2RlbHMgPSBuZXcgVE1vZGVsW2ltcG9ydHMubGVuZ3RoXTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRNb2RlbHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB0TW9kZWxzW2ldID0gdWRkaTRqSGVscGVyLm5ld1RNb2RlbChpbXBvcnRzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBIYXNodGFibGUgdE1vZGVsc1RhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICBpZiAodE1vZGVscyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wO2k8dE1vZGVscy5sZW5ndGg7aSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSByZWdQdWJsaXNoU0lBY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHVkZGk0akhlbHBlci5nZXRXU0RMKHRNb2RlbHNbaV0pLCB0TW9kZWxzW2ldKTsKLSAgICAgICAgICAgIGlmIChpbnB1dHNWYWxpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVnUHVibGlzaFNJQWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgICBPYmplY3Qgc2F2ZWRUTW9kZWwgPSByZWdQdWJsaXNoU0lBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX09VVFBVVF9TQVZFRF9UTU9ERUwpOwotICAgICAgICAgICAgICBpZiAoc2F2ZWRUTW9kZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0TW9kZWxzVGFibGUucHV0KCgoVE1vZGVsKXNhdmVkVE1vZGVsKS5nZXROYW1lU3RyaW5nKCksIHNhdmVkVE1vZGVsKTsKLSAgICAgICAgICAgICAgLy8gUmVzZWxlY3QgdGhlIGN1cnJlbnQgbm9kZS4KLSAgICAgICAgICAgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQoY3VycmVudE5vZGVJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJzID0gdWRkaTRqSGVscGVyLm5ld0J1c2luZXNzU2VydmljZSh3c2RsVVJMLCBkZWYsIHRNb2RlbHNUYWJsZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChiZSAhPSBudWxsKQotICAgICAgICBicy5zZXRCdXNpbmVzc0tleShiZS5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICAgIGVsc2UgaWYgKGJ1c2luZXNzS2V5ICE9IG51bGwpCi0gICAgICAgIGJzLnNldEJ1c2luZXNzS2V5KGJ1c2luZXNzS2V5KTsKLSAgICAgIGJzLnNldE5hbWVWZWN0b3IobmFtZVZlY3Rvcik7Ci0gICAgICBicy5zZXREZXNjcmlwdGlvblZlY3RvcihkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgICBicy5zZXRDYXRlZ29yeUJhZyhjYXRlZ29yeUJhZyk7Ci0gICAgICBWZWN0b3IgYnNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBic1ZlY3Rvci5hZGQoYnMpOwotICAgICAgcmVnRWxlbWVudC5oYW5kbGVQcmVJbnZvY2F0aW9uKGJzKTsKLSAgICAgIGJzID0gKEJ1c2luZXNzU2VydmljZSlwcm94eS5zYXZlX3NlcnZpY2UocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBic1ZlY3RvcikuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCkuZ2V0KDApOwotICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUoYnMscmVnRWxlbWVudCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9QVUJMSVNIRUQiLGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIldTRExFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSl7Ci0gICAgCQlSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJfQotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOyAgICAgIAotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAxZjVjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuSWRlbnRpZmllckJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB3c2RsVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpOwotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGlkVHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFKTsKLSAgICBTdHJpbmdbXSBpZEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGlkS2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBpZiAod3NkbFVSTCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsd3NkbFVSTCk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHdzZGxVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxuYW1lKTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZSkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTkFNRSIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpOwotICAgICAgbGFuZ3VhZ2VIYXNoLmNsZWFyKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbnMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERlc2NyaXB0aW9uIHVkZGk0akRlc2NyaXB0aW9uOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSxkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2ldLnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQodWRkaTRqRGVzY3JpcHRpb24pOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotCi0gICAgaWYgKGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTLGlkQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0KLSAgICBpZiAoY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkZW50aWZpZXJCYWcgPSAoSWRlbnRpZmllckJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IChDYXRlZ29yeUJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotCi0gICAgICBUTW9kZWwgdE1vZGVsID0gKG5ldyBVZGRpNGpIZWxwZXIoKSkubmV3VE1vZGVsKHdzZGxVUkwpOwotICAgICAgdE1vZGVsLnNldE5hbWUobmFtZSk7Ci0gICAgICB0TW9kZWwuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgdE1vZGVsLnNldElkZW50aWZpZXJCYWcoaWRlbnRpZmllckJhZyk7Ci0gICAgICAKLSAgICAgIC8vIFRoZSBjYXRlZ29yeSBiYWcgbWF5IGNvbnRhaW4gd3NkbFNwZWMuCi0gICAgICBDYXRlZ29yeUJhZyBkZWZhdWx0Q2F0ZWdvcnlCYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICAgIFZlY3RvciBkZWZhdWx0S2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBudWxsOwotICAgICAgaWYgKGRlZmF1bHRDYXRlZ29yeUJhZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoY2F0ZWdvcnlCYWcgPT0gbnVsbCkKLSAgICAgICAgICBjYXRlZ29yeUJhZyA9IGRlZmF1bHRDYXRlZ29yeUJhZzsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZGVmYXVsdEtleWVkUmVmZXJlbmNlVmVjdG9yID0gZGVmYXVsdENhdGVnb3J5QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wO2k8ZGVmYXVsdEtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpZGVmYXVsdEtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgIGlmIChjYXRlZ29yeUJhZyAhPSBudWxsKQotICAgICAgICAgICAgICBjYXRlZ29yeUJhZy5hZGQoa3IpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgdE1vZGVsLnNldENhdGVnb3J5QmFnKGNhdGVnb3J5QmFnKTsKLQotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHRNb2RlbFZlY3Rvci5hZGQodE1vZGVsKTsKLSAgICAgIHRNb2RlbCA9IChUTW9kZWwpcHJveHkuc2F2ZV90TW9kZWwocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCB0TW9kZWxWZWN0b3IpLmdldFRNb2RlbFZlY3RvcigpLmdldCgwKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX09VVFBVVF9TQVZFRF9UTU9ERUwsIHRNb2RlbCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZSh0TW9kZWwscmVnRWxlbWVudCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfUFVCTElTSEVEIix0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJXU0RMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpewotICAgIAkJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCX0KLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhN2ZmZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04pOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAod3NkbFVSTCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMLHdzZGxVUkwpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh3c2RsVVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxuYW1lKTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZSkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX05BTUUiKSk7Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04sZGVzY3JpcHRpb24pOwotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoU3RyaW5nIHdzZGxVUkwsIFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBTdHJpbmcgbmFtZSA9IHRNb2RlbC5nZXROYW1lU3RyaW5nKCk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gdE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsd3NkbFVSTCk7Ci0gICAgZWxzZQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAobmFtZSAhPSBudWxsKSAKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWUpOwotICAgIGVsc2UKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04sZGVzY3JpcHRpb24pOwotICAgIGVsc2UKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTiwiIik7Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0KLSAgICAgIFRNb2RlbCB0TW9kZWwgPSAobmV3IFVkZGk0akhlbHBlcigpKS5uZXdUTW9kZWwod3NkbFVSTCk7Ci0gICAgICB0TW9kZWwuc2V0TmFtZShuYW1lKTsKLSAgICAgIHRNb2RlbC5zZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoZGVzY3JpcHRpb24pOwotCi0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgdE1vZGVsVmVjdG9yLmFkZCh0TW9kZWwpOwotICAgICAgdE1vZGVsID0gKFRNb2RlbClwcm94eS5zYXZlX3RNb2RlbChyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIHRNb2RlbFZlY3RvcikuZ2V0VE1vZGVsVmVjdG9yKCkuZ2V0KDApOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCwgdE1vZGVsKTsKLSAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKHRNb2RlbCxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9QVUJMSVNIRUQiLHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJXU0RMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgeyAgIAotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKQotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYzY2MDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgeyAgICAKLSAgICBTdHJpbmcgYnVzTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MpOwotICAgIFN0cmluZyB3c2RsVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpOwotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTik7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmIChidXNOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSk7Ci0gICAgICAvLyBUaGUgYnJvd3NlciB3aWxsIGVuZm9yY2UgdGhlIHJ1bGUgb2YgaGF2aW5nIG9ubHkgb25lIGJ1c2luZXNzIGluIHRoaXMgbGlzdC4KLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VCdXNpbmVzc0NvcHkuZWxlbWVudEF0KDApOwotICAgICAgc2VydmljZUJ1c2luZXNzLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUixiZSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSxiZS5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKTsKLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX0JVU0lORVNTIikpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCx3c2RsVVJMKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMLHdzZGxVUkwpOwotICAgIH0KLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcod3NkbFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FLG5hbWUpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04sZGVzY3JpcHRpb24pOwotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICAKLSAgICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uIHJlZ1B1Ymxpc2hTSUFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICBpbnQgY3VycmVudE5vZGVJZCA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldE5vZGVJZCgpOwotICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSByZWdOb2RlXy5nZXROb2RlTWFuYWdlcigpOwotCi0gICAgICBIYXNodGFibGUgdE1vZGVsc1RhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgVE1vZGVsW10gdE1vZGVscyA9IG51bGw7Ci0gICAgICBpZiAodWRkaTRqSGVscGVyLmlzTW9ub2xpdGhpY1dTREwoZGVmKSkKLSAgICAgIHsKLSAgICAgICAgdE1vZGVscyA9IG5ldyBUTW9kZWxbMV07Ci0gICAgICAgIHRNb2RlbHNbMF0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKHdzZGxVUkwsIGRlZik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1tdIGltcG9ydHMgPSB1ZGRpNGpIZWxwZXIuZ2V0SW1wb3J0cyhkZWYsIHdzZGxVUkwpOwotICAgICAgICB0TW9kZWxzID0gbmV3IFRNb2RlbFtpbXBvcnRzLmxlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdE1vZGVscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB0TW9kZWxzW2ldID0gdWRkaTRqSGVscGVyLm5ld1RNb2RlbChpbXBvcnRzW2ldKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRNb2RlbHMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8dE1vZGVscy5sZW5ndGg7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUodWRkaTRqSGVscGVyLmdldFdTREwodE1vZGVsc1tpXSksIHRNb2RlbHNbaV0pOwotICAgICAgICAgIGlmIChpbnB1dHNWYWxpZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZWdQdWJsaXNoU0lBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICBPYmplY3Qgc2F2ZWRUTW9kZWwgPSByZWdQdWJsaXNoU0lBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX09VVFBVVF9TQVZFRF9UTU9ERUwpOwotICAgICAgICAgICAgaWYgKHNhdmVkVE1vZGVsICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRNb2RlbHNUYWJsZS5wdXQoKChUTW9kZWwpc2F2ZWRUTW9kZWwpLmdldE5hbWVTdHJpbmcoKSwgc2F2ZWRUTW9kZWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gUmVzZWxlY3QgdGhlIGN1cnJlbnQgbm9kZS4KLSAgICAgICAgICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKGN1cnJlbnROb2RlSWQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSB1ZGRpNGpIZWxwZXIubmV3QnVzaW5lc3NTZXJ2aWNlKHdzZGxVUkwsIGRlZiwgdE1vZGVsc1RhYmxlKTsKLSAgICAgIGlmIChiZSAhPSBudWxsKQotICAgICAgICBicy5zZXRCdXNpbmVzc0tleShiZS5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICAgIGVsc2UgaWYgKGJ1c2luZXNzS2V5ICE9IG51bGwpCi0gICAgICAgIGJzLnNldEJ1c2luZXNzS2V5KGJ1c2luZXNzS2V5KTsKLSAgICAgIGJzLnNldERlZmF1bHROYW1lKG5ldyBOYW1lKG5hbWUpKTsKLSAgICAgIGJzLnNldERlZmF1bHREZXNjcmlwdGlvblN0cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICBWZWN0b3IgYnNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBic1ZlY3Rvci5hZGQoYnMpOwotICAgICAgcmVnRWxlbWVudC5oYW5kbGVQcmVJbnZvY2F0aW9uKGJzKTsKLSAgICAgIGJzID0gKEJ1c2luZXNzU2VydmljZSlwcm94eS5zYXZlX3NlcnZpY2UocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBic1ZlY3RvcikuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCkuZ2V0KDApOwotICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUoYnMscmVnRWxlbWVudCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9QVUJMSVNIRUQiLGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIldTRExFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmVjNDkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmFzc2VydGlvbi5QdWJsaXNoZXJBc3NlcnRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5Db21wbGV0aW9uU3RhdHVzOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBleHRlbmRzIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24KLXsKLSAgcHVibGljIFJlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotCi0gICAgLy8gaWRzIGZyb20gdWRkaU9iamVjdHNfdGFibGUKLSAgICBTdHJpbmdbXSBzZWxlY3RlZEJ1c0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgIGlmIChzZWxlY3RlZEJ1c0lkcyAhPSBudWxsICYmIHNlbGVjdGVkQnVzSWRzLmxlbmd0aCA+IDApCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIHNlbGVjdGVkQnVzSWRzKTsKLSAgICAvLyBTeW5jaHJvbml6ZSBjbGllbnQgdmlldyBhbmQgc2VydmVyIG1vZGVsICh1ZGRpT2JqZWN0X3RhYmxlLmpzcCkKLSAgICBzeW5jaHJvbml6ZVVERElPYmplY3RUYWJsZSgpOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBsb2cgaW4KLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIH0KLSAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1c2VySUQhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgIH0KLSAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySUQpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgICAgfQotCi0gICAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBpZHMgZnJvbSBwdWJsaXNoZXIgYXNzZXJ0aW9uIHRhYmxlCi0gICAgU3RyaW5nW10gcHViQXNzZXJ0aW9uc1ZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lEKTsKLSAgICBpZiAocHViQXNzZXJ0aW9uc1ZpZXdJZHMgPT0gbnVsbCB8fCBwdWJBc3NlcnRpb25zVmlld0lkcy5sZW5ndGggPT0gMCkKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lELCBwdWJBc3NlcnRpb25zVmlld0lkcyk7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICBpZiAoIShzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIGxvZyBpbiBmaXJzdAotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCwgdXNlcklELCBwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIHRlKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHRlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpZS50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShtZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9ICAgICAgCi0gICAgfQotCi0gICAgVURESVByb3h5IHByb3h5ID0gcmVnaXN0cnlFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRDcmVkKCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICBMaXN0TWFuYWdlciBwdWJBc3NlcnRpb25zID0gYnVzRWxlbWVudC5nZXRQdWJsaXNoZXJBc3NlcnRpb25zKCk7Ci0KLSAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgb3duZWQgYnVzaW5lc3MKLSAgICAvLyBpZiBub3QsIHRoZSBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQKLSAgICBpZiAoIWlzQnVzaW5lc3NPd25lZChidXNFbGVtZW50KSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVF9PV05FRF9CVVNJTkVTUyIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBTdHJpbmdbXSBwdWJBc3NlcnRpb25WaWV3SWRzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1ZJRVdJRCk7Ci0gICAgICBWZWN0b3IgcHViQXNzZXJ0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYm9vbGVhbiByZWZyZXNoUmVxdWlyZWQgPSBmYWxzZTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJBc3NlcnRpb25WaWV3SWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KHB1YkFzc2VydGlvblZpZXdJZHNbaV0pOwotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IHB1YkFzc2VydGlvbnMuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCBwdWJBc3NlcnRpb25FbGVtZW50ID0gKFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIFB1Ymxpc2hlckFzc2VydGlvbiBwdWJBc3NlcnRpb24gPSBwdWJBc3NlcnRpb25FbGVtZW50LmdldFB1Ymxpc2hlckFzc2VydGlvbigpOwotICAgICAgICBwdWJBc3NlcnRpb25WZWN0b3IuYWRkKHB1YkFzc2VydGlvbik7Ci0gICAgICAgIGlmIChwdWJBc3NlcnRpb25FbGVtZW50LmdldFN0YXR1cygpLmVxdWFscyhDb21wbGV0aW9uU3RhdHVzLkNPTVBMRVRFKSkKLSAgICAgICAgICByZWZyZXNoUmVxdWlyZWQgPSB0cnVlOwotICAgICAgfQotCi0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSBwcm94eS5kZWxldGVfcHVibGlzaGVyQXNzZXJ0aW9ucyhyZWdpc3RyeUVsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgcHViQXNzZXJ0aW9uVmVjdG9yKTsKLSAgICAgIC8vcmVwb3J0IHN0YXR1cwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGkpKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gcmVmcmVzaCBpcyByZXF1aXJlZCwgcmVmcmVzaCB0aGUgd2hvbGUgcHVibGlzaGVyIGFzc2VydGlvbiB0YWJsZQotICAgICAgaWYgKHJlZnJlc2hSZXF1aXJlZCkgewotICAgICAgICBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBzaG93UEFBY3Rpb24gPSBuZXcgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHNob3dQQUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIE9iamVjdCBpZHMgPSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgICAgICBpZiAoaWRzICE9IG51bGwpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIGlkcyk7Ci0gICAgICAgIHNob3dQQUFjdGlvbi5ydW4oKTsKLSAgICAgIH0KLSAgICAgIC8vIHJlZnJlc2ggaXMgbm90IHJlcXVpcmVkLCBkZWxldGUgdGhlIHNlbGVjdGVkIHB1Ymxpc2hlciBhc3NlcnRpb24gZWxlbWVudHMKLSAgICAgIGVsc2UgewotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHB1YkFzc2VydGlvblZpZXdJZHMubGVuZ3RoOyBrKyspIHsKLSAgICAgICAgICBwdWJBc3NlcnRpb25zLnJlbW92ZUVsZW1lbnRXaXRoVmlld0lkKEludGVnZXIucGFyc2VJbnQocHViQXNzZXJ0aW9uVmlld0lkc1trXSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiByZXBvcnQuc3VjY2VzcygpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gdWRkaWUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChpKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTg0ZTI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFJlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwcml2YXRlIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIAotICBwdWJsaWMgUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICB9Ci0gIAotICAvLyB1ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcD9zdWJRdWVyeUtleT0uLi4mc3ViUXVlcnlMaXN0S2V5PS4uLiZzdWJRdWVyeUxpc3RJdGVtSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHN1YlF1ZXJ5S2V5LFN0cmluZyBzdWJRdWVyeUxpc3RLZXksaW50IHN1YlF1ZXJ5TGlzdEl0ZW1JZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChzdWJRdWVyeUtleSk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5TGlzdEtleSk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5TGlzdEl0ZW1JZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUxpc3RLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlMaXN0SXRlbUlkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCk7Ci0gICAgCi0gICAgaWYgKHN1YlF1ZXJ5S2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksc3ViUXVlcnlLZXkpOwotICAgICAgCi0gICAgaWYgKHN1YlF1ZXJ5TGlzdEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVksc3ViUXVlcnlMaXN0S2V5KTsKLSAgICAgIAotICAgIGlmIChzdWJRdWVyeUxpc3RJdGVtSWQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlELHN1YlF1ZXJ5TGlzdEl0ZW1JZCk7Ci0gICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpOwotICAgIGludCBzdWJRdWVyeUxpc3RJdGVtSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQpKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTm9kZSBjdXJyZW50Tm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGN1cnJlbnROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcygoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSkpOwotICAgIFZlY3RvciBsaXN0ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpKTsKLSAgICBsaXN0LnJlbW92ZUVsZW1lbnRBdChzdWJRdWVyeUxpc3RJdGVtSWQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZGUzOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5SZXNpemVGcmFtZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElGcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGNsYXNzIFJlc2l6ZVVERElGcmFtZXNBY3Rpb24gZXh0ZW5kcyBSZXNpemVGcmFtZXNBY3Rpb24KLXsKLSAgcHVibGljIFJlc2l6ZVVERElGcmFtZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGZyYW1lc2V0IHNpemVzLgotICAgIFN0cmluZyBmcmFtZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSk7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIAotICAgIC8vIFNldCB0aGUgbmV3IGZyYW1lc2V0IHNpemVzLgotICAgIGlmIChmcmFtZU5hbWUuZXF1YWxzKFVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIpKQotICAgIHsKLSAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHVkZGlQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIxMDAlLDAlIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lTmFtZS5lcXVhbHMoVURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHVkZGlQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyh1ZGRpUGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMTAwJSwwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lTmFtZS5lcXVhbHMoVURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHVkZGlQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyh1ZGRpUGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMCUsMTAwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTE2NWY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNlbGVjdE5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBTZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldENhdGVnb3J5TWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24uanNwP3Nlc3Npb25JZD0uLi4mbm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyBzZXNzaW9uSWQsaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICAvLyBEbyBub3QgYWRkIHRoaXMgYWN0aW9uIHRvIHRoZSBoaXN0b3J5LgotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIHBlcmZvcm1CYXNlQWN0aW9uKG5vZGVJZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAiY2F0ZWdvcnlCcm93c2VyV2luZG93Q29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmU0Nzc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0RmluZFRvb2xBY3Rpb24gZXh0ZW5kcyBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbgotewotICBwcm90ZWN0ZWQgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdG9vbExpbmtDaGFuZ2VkXzsKLQotICBwdWJsaWMgU2VsZWN0RmluZFRvb2xBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgc3ViUXVlcnlLZXlfID0gbnVsbDsKLSAgICB0b29sTGlua0NoYW5nZWRfID0gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHN1cGVyLnByb2Nlc3NMaW5rUGFyYW1ldGVycyhyZXF1ZXN0KTsKLSAgICBzdWJRdWVyeUtleV8gPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vIC91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb24uanNwP25vZGVJZD0uLi4mdG9vbElkPS4uLjwmdmlld0lkPS4uLiZ2aWV3VG9vbElkPS4uLj4mc3ViUXVlcnlLZXk9Li4uPCZpc0hpc3Rvcnk9MT4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCxpbnQgdmlld1Rvb2xJZCxTdHJpbmcgc3ViUXVlcnlLZXksYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh0b29sSWQpOwotICAgIGlmICh2aWV3SWQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgIHsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh2aWV3SWQpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh2aWV3VG9vbElkKTsKLSAgICB9Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChzdWJRdWVyeUtleSk7Ci0KLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGlmICghc3VwZXIucnVuKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZV8uZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIFN0cmluZyBjdXJyZW50U3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBpZiAoc3ViUXVlcnlLZXlfICE9IG51bGwgJiYgIXN1YlF1ZXJ5S2V5Xy5lcXVhbHMoY3VycmVudFN1YlF1ZXJ5S2V5KSkKLSAgICB7Ci0gICAgICB0b29sTGlua0NoYW5nZWRfID0gdHJ1ZTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNWaWV3U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiB0b29sTGlua0NoYW5nZWRfOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gc2VsZWN0ZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sXy5nZXRUb29sSWQoKTsKLSAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICBpbnQgdmlld1Rvb2xJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsc3ViUXVlcnlLZXlfLHRydWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYmVlMzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNlbGVjdE5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVBY3Rpb24KLXsKLSAgcHVibGljIFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKSk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLjwmaXNIaXN0b3J5PTE+Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgIHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKTsKLSAgICBzZWxlY3RlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgcmV0dXJuIHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhub2RlSWQsdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAibmF2aWdhdG9yQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gInByb3BlcnRpZXNDb250YWluZXIiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NmUxNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZVRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVUb29sQWN0aW9uCi17Ci0gIHB1YmxpYyBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKSk7Ci0gIH0KLQotICAvLyAvdWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmpzcD9ub2RlSWQ9Li4uJnRvb2xJZD0uLi48JnZpZXdJZD0uLi4mdmlld1Rvb2xJZD0uLi4+PCZpc0hpc3Rvcnk9MT4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCxpbnQgdmlld1Rvb2xJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHRvb2xJZCk7Ci0gICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgewotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHZpZXdJZCk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHZpZXdUb29sSWQpOwotICAgIH0KLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gc2VsZWN0ZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sXy5nZXRUb29sSWQoKTsKLSAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICBpbnQgdmlld1Rvb2xJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAibmF2aWdhdG9yQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gInByb3BlcnRpZXNDb250YWluZXIiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YmI1YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbiBleHRlbmRzIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF87Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fOwotICBwcml2YXRlIGJvb2xlYW4gbmV3VVVJRFF1ZXJ5Q3JlYXRlZF87Ci0gIHByaXZhdGUgU3RyaW5nIGl0ZW1OYW1lXzsKLSAgcHVibGljIFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF8gPSBmYWxzZTsKLSAgICByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fID0gZmFsc2U7Ci0gICAgbmV3VVVJRFF1ZXJ5Q3JlYXRlZF8gPSBmYWxzZTsKLSAgICBpdGVtTmFtZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uanNwP25vZGVJZD0uLi4mdG9vbElkPS4uLjwmdmlld0lkPS4uLj4mc3ViUXVlcnlLZXk9Li4uJnN1YlF1ZXJ5TGlzdEtleT0uLi4mc3ViUXVlcnlMaXN0SXRlbUlkPS4uLiZxdWVyeUl0ZW09Li4uPCZpc0hpc3Rvcnk9MT4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCxTdHJpbmcgc3ViUXVlcnlLZXksU3RyaW5nIHN1YlF1ZXJ5TGlzdEtleSxpbnQgc3ViUXVlcnlMaXN0SXRlbUlkLGludCBxdWVyeUl0ZW0sYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKS5hcHBlbmQoJz0nKS5hcHBlbmQodG9vbElkKTsKLSAgICBpZiAodmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh2aWV3SWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlLZXkpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChzdWJRdWVyeUxpc3RLZXkpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzdWJRdWVyeUxpc3RJdGVtSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkuYXBwZW5kKCc9JykuYXBwZW5kKHF1ZXJ5SXRlbSk7Ci0KLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBzdXBlci5wcm9jZXNzTGlua1BhcmFtZXRlcnMocmVxdWVzdCk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUxpc3RLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlMaXN0SXRlbUlkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCk7Ci0gICAgU3RyaW5nIHF1ZXJ5SXRlbVN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSk7Ci0KLSAgICBpZiAoc3ViUXVlcnlLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSxzdWJRdWVyeUtleSk7Ci0KLSAgICBpZiAoc3ViUXVlcnlMaXN0S2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSxzdWJRdWVyeUxpc3RLZXkpOwotCi0gICAgaWYgKHN1YlF1ZXJ5TGlzdEl0ZW1JZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQsc3ViUXVlcnlMaXN0SXRlbUlkKTsKLQotICAgIGlmIChxdWVyeUl0ZW1TdHJpbmcgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0scXVlcnlJdGVtU3RyaW5nKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGZpbmRCeVVVSUQoKQotICB7Ci0gICAgTm9kZSBjdXJyZW50Tm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKSk7Ci0gICAgVmVjdG9yIGxpc3QgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSkpOwotICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWxpc3QuZWxlbWVudEF0KEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCkpKTsKLSAgICBpbnQgcXVlcnlJdGVtID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pKTsKLSAgICBGaW5kQWN0aW9uIGZpbmRBY3Rpb24gPSBudWxsOwotICAgIFN0cmluZyB1dWlkS2V5ID0gbnVsbDsKLSAgICBTdHJpbmcgdXVpZEtleVZhbHVlID0gbnVsbDsKLSAgICBzd2l0Y2ggKHF1ZXJ5SXRlbSkKLSAgICB7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICBmaW5kQWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICB1dWlkS2V5ID0gVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWTsKLSAgICAgICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIHV1aWRLZXlWYWx1ZSA9IHNwLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICAgIGl0ZW1OYW1lXyA9IHNwLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgIGZpbmRBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgdXVpZEtleSA9IFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWTsKLSAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgdXVpZEtleVZhbHVlID0gYnMuZ2V0U2VydmljZUtleSgpOwotICAgICAgICBpdGVtTmFtZV8gPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZpbmRBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgdXVpZEtleSA9IFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVk7Ci0gICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICB1dWlkS2V5VmFsdWUgPSB0TW9kZWwuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgIGl0ZW1OYW1lXyA9IHRNb2RlbC5nZXROYW1lU3RyaW5nKCk7Ci0gICAgfQotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gZmluZEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHV1aWRLZXlWYWx1ZSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQodXVpZEtleSx1dWlkS2V5VmFsdWUpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmluZEFjdGlvbi5ydW4oKTsKLSAgICBpZiAocmVzdWx0KQotICAgIHsKLSAgICAgIE5vZGUgaXRlbU5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICBpbnQgbm9kZUlkID0gaXRlbU5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICBpbnQgdG9vbElkID0gaXRlbU5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpOwotICAgICAgaW50IHZpZXdJZCA9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVDsKLSAgICAgIGludCB2aWV3VG9vbElkID0gQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVDsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELFN0cmluZy52YWx1ZU9mKG5vZGVJZCkpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5UT09MSUQsU3RyaW5nLnZhbHVlT2YodG9vbElkKSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCxTdHJpbmcudmFsdWVPZih2aWV3SWQpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCxTdHJpbmcudmFsdWVPZih2aWV3VG9vbElkKSk7Ci0gICAgICBzdXBlci5ydW4oKTsKLSAgICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXyA9IHRydWU7Ci0gICAgICByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fID0gdHJ1ZTsKLSAgICAgIG5ld1VVSURRdWVyeUNyZWF0ZWRfID0gdHJ1ZTsKLSAgICAgIGxpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbyhub2RlSWQsdG9vbElkLHZpZXdJZCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFRoZSBpdGVtIGlzIG5vIGxvbmdlciBpbiB0aGUgcmVnaXN0cnkuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRJdGVtTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gaXRlbU5hbWVfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gR2l2ZW4gdGhlIG5vZGVJZCwgdG9vbElkIGFuZCB2aWV3SWQsIGNoZWNrIGlmIHRoZSBub2RlIG9yIHZpZXcgaXMgc3RhbGUuCi0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB0b29sSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5UT09MSUQpKTsKLSAgICBpbnQgdmlld0lkID0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUOwotICAgIHRyeQotICAgIHsKLSAgICAgIHZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBpbnQgdmlld1Rvb2xJZCA9IDA7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIC8vIEVudXNyZSB0aGUgbm9kZSBpcyB2aXNpYmxlLgotICAgICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gbWFrZU5vZGVWaXNpYmxlKG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCkpOwotCi0gICAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICB7Ci0gICAgICAgIFZpZXdUb29sIHZpZXdUb29sID0gKFZpZXdUb29sKShub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0VG9vbCh0b29sSWQpKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgZWxlbWVudFRvb2xNYW5hZ2VyID0gdmlld1Rvb2wuZ2V0VG9vbE1hbmFnZXIodmlld0lkKTsKLSAgICAgICAgaWYgKGVsZW1lbnRUb29sTWFuYWdlciAhPSBudWxsKQotICAgICAgICAgIHZpZXdUb29sSWQgPSBlbGVtZW50VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU3RhbGUgdmlldwotICAgICAgICAgIHJldHVybiBmaW5kQnlVVUlEKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCxTdHJpbmcudmFsdWVPZih2aWV3VG9vbElkKSk7Ci0gICAgICByZXR1cm4gc3VwZXIucnVuKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBTdGFsZSBub2RlCi0gICAgICByZXR1cm4gZmluZEJ5VVVJRCgpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbF8uZ2V0VG9vbElkKCk7Ci0gICAgaW50IHZpZXdJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld0lkKCk7Ci0gICAgaW50IHZpZXdUb29sSWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHRydWUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2goKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLnJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoKCl8cmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNWaWV3U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBzdXBlci5yZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKXxyZXF1aXJlc1ZpZXdTZWxlY3Rpb25fOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNTdGF0dXNVcGRhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ld1VVSURRdWVyeUNyZWF0ZWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAic3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9zdGF0dXNfY29udGVudC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTk1MzAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24gZXh0ZW5kcyBOb2RlQWN0aW9uCi17Ci0gIHByaXZhdGUgU2VydmljZU5vZGUgc2VydmljZU5vZGVfOwotICBwdWJsaWMgU2VydmljZUdldEJ1c2luZXNzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkpOwotICAgIHNlcnZpY2VOb2RlXyA9IG51bGw7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbGlkYXRlU2VydmljZSgpCi0gIHsKLSAgICBpbnQgc2VydmljZU5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIHNlcnZpY2VOb2RlXyA9IChTZXJ2aWNlTm9kZSlub2RlTWFuYWdlcl8uZ2V0Tm9kZShzZXJ2aWNlTm9kZUlkKTsKLSAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClzZXJ2aWNlTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gdmVyaWZ5QWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSB2ZXJpZnlBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCkuZ2V0U2VydmljZUtleSgpKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLQotICAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9TRVJWSUNFX0JVU0lORVNTIixzZXJ2aWNlTm9kZV8uZ2V0Tm9kZU5hbWUoKSkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksYnMuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0KLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzZlZjFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbiBleHRlbmRzIFVERElOb2RlQWN0aW9uCi17Ci0gIHByaXZhdGUgU2VydmljZU5vZGUgc2VydmljZU5vZGVfOwotICBwdWJsaWMgU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHNlcnZpY2VOb2RlXyA9IG51bGw7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbGlkYXRlU2VydmljZSgpCi0gIHsKLSAgICBpbnQgc2VydmljZU5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIHNlcnZpY2VOb2RlXyA9IChTZXJ2aWNlTm9kZSlub2RlTWFuYWdlcl8uZ2V0Tm9kZShzZXJ2aWNlTm9kZUlkKTsKLSAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClzZXJ2aWNlTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gdmVyaWZ5QWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSB2ZXJpZnlBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCkuZ2V0U2VydmljZUtleSgpKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0gICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMiLHNlcnZpY2VOb2RlXy5nZXROb2RlTmFtZSgpKSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSxCb29sZWFuLlRSVUUpOwotICAgIExpc3RFbGVtZW50IHNlcnZpY2VMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChicyk7Ci0gICAgc2VydmljZUxpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbyhzZXJ2aWNlTm9kZV8uZ2V0Tm9kZUlkKCksc2VydmljZU5vZGVfLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSxzZXJ2aWNlTm9kZV8uZ2V0Vmlld0lkKCkpOwotICAgIFZlY3RvciBzZXJ2aWNlTGlzdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBzZXJ2aWNlTGlzdFZlY3Rvci5hZGRFbGVtZW50KHNlcnZpY2VMaXN0RWxlbWVudCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFLHNlcnZpY2VMaXN0VmVjdG9yKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0JVU0lORVNTX1NFUlZJQ0UsYnMpOwotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNiNzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VJbnRlcmZhY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLlRNb2RlbEJhZzsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlSW50ZXJmYWNlTm9kZSBzaU5vZGVfOwotICBwdWJsaWMgU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgc2lOb2RlXyA9IG51bGw7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjR2V0QnVzaW5lc3Nlc0FjdGlvbkpTUC5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbGlkYXRlU2VydmljZUludGVyZmFjZSgpCi0gIHsKLSAgICBpbnQgc2lOb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBzaU5vZGVfID0gKFNlcnZpY2VJbnRlcmZhY2VOb2RlKW5vZGVNYW5hZ2VyXy5nZXROb2RlKHNpTm9kZUlkKTsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2lOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksc2lFbGVtZW50LmdldFRNb2RlbCgpLmdldFRNb2RlbEtleSgpKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotCi0gICAgUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1NJX0JVU0lORVNTRVMiLHNpTm9kZV8uZ2V0Tm9kZU5hbWUoKSkpOwotICAgIAotICAgIExpc3RFbGVtZW50IHNpTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQodE1vZGVsKTsKLSAgICBzaUxpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbyhzaU5vZGVfLmdldE5vZGVJZCgpLHNpTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLHNpTm9kZV8uZ2V0Vmlld0lkKCkpOwotICAgIFZlY3RvciBzaUxpc3RWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2lMaXN0VmVjdG9yLmFkZEVsZW1lbnQoc2lMaXN0RWxlbWVudCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMsc2lMaXN0VmVjdG9yKTsKLSAgICAKLSAgICBWZWN0b3IgdE1vZGVsS2V5U3RyaW5nVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIHRNb2RlbEtleVN0cmluZ1ZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgVE1vZGVsQmFnIHRNb2RlbEJhZyA9IG5ldyBUTW9kZWxCYWcodE1vZGVsS2V5U3RyaW5nVmVjdG9yKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1RNT0RFTEJBRyx0TW9kZWxCYWcpOwotICAgIAotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1M2E0NzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VJbnRlcmZhY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLlRNb2RlbEJhZzsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbiBleHRlbmRzIFVERElOb2RlQWN0aW9uCi17Ci0gIHByaXZhdGUgU2VydmljZUludGVyZmFjZU5vZGUgc2lOb2RlXzsKLSAgcHVibGljIFNlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzaU5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZVNlcnZpY2VJbnRlcmZhY2UoKQotICB7Ci0gICAgaW50IHNpTm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgc2lOb2RlXyA9IChTZXJ2aWNlSW50ZXJmYWNlTm9kZSlub2RlTWFuYWdlcl8uZ2V0Tm9kZShzaU5vZGVJZCk7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNpTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24gdmVyaWZ5QWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSB2ZXJpZnlBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHNpRWxlbWVudC5nZXRUTW9kZWwoKS5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QscHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLQotICAgIFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1NJX1NFUlZJQ0VTIixzaU5vZGVfLmdldE5vZGVOYW1lKCkpKTsKLSAgICAKLSAgICBMaXN0RWxlbWVudCBzaUxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHRNb2RlbCk7Ci0gICAgc2lMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oc2lOb2RlXy5nZXROb2RlSWQoKSxzaU5vZGVfLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSxzaU5vZGVfLmdldFZpZXdJZCgpKTsKLSAgICBWZWN0b3Igc2lMaXN0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIHNpTGlzdFZlY3Rvci5hZGRFbGVtZW50KHNpTGlzdEVsZW1lbnQpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2lMaXN0VmVjdG9yKTsKLSAgICAKLSAgICBWZWN0b3IgdE1vZGVsS2V5U3RyaW5nVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIHRNb2RlbEtleVN0cmluZ1ZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgVE1vZGVsQmFnIHRNb2RlbEJhZyA9IG5ldyBUTW9kZWxCYWcodE1vZGVsS2V5U3RyaW5nVmVjdG9yKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMQkFHLHRNb2RlbEJhZyk7Ci0gICAgCi0gICAgcmV0dXJuIGFjdGlvbi5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYjg2NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQXNzZXJ0aW9uU3RhdHVzSXRlbTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkFzc2VydGlvblN0YXR1c1JlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkNvbXBsZXRpb25TdGF0dXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlbGF0ZWRCdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZWxhdGVkQnVzaW5lc3Nlc0xpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TaGFyZWRSZWxhdGlvbnNoaXBzOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcnM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gZXh0ZW5kcyBDb21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uCi17Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBzdWJRdWVyeUtleV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzU3ViUXVlcnlHZXRfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5SXRlbV87Ci0KLSAgcHVibGljIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotCi0gICAgc3ViUXVlcnlLZXlfID0gbnVsbDsKLSAgICBpc1N1YlF1ZXJ5R2V0XyA9IGZhbHNlOwotICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBpZHMgZnJvbSB1ZGRpT2JqZWN0c190YWJsZQotICAgIFN0cmluZ1tdIHNlbGVjdGVkQnVzSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgaWYgKHNlbGVjdGVkQnVzSWRzICE9IG51bGwgJiYgc2VsZWN0ZWRCdXNJZHMubGVuZ3RoID4gMCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgc2VsZWN0ZWRCdXNJZHMpOwotCi0gICAgbmV3U3ViUXVlcnlfID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQpOwotICAgIFN0cmluZyBpc1N1YlF1ZXJ5R2V0U3RyaW5nID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgbmV3U3ViUXVlcnlJdGVtXyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSk7Ci0gICAgc3ViUXVlcnlLZXlfID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleV8pOwotICAgIGZvcm1Ub29sUEkuY2xlYXJFcnJvcnMoKTsKLQotICAgIGlmIChuZXdTdWJRdWVyeV8gIT0gbnVsbCAmJiBuZXdTdWJRdWVyeV8ubGVuZ3RoKCkgPiAwKQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLQotICAgIGlmIChpc1N1YlF1ZXJ5R2V0U3RyaW5nICE9IG51bGwpCi0gICAgICBpc1N1YlF1ZXJ5R2V0XyA9IEJvb2xlYW4udmFsdWVPZihpc1N1YlF1ZXJ5R2V0U3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gbG9nIGluCi0gICAgLy8gTk9URTogVGhpcyBhY3Rpb24gZG9lcyBOT1QgcmVxdWlyZSB0aGUgdXNlciB0byBiZSBsb2dnZWQgaW4uCi0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1c2VySUQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJRCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJRCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUluaXRpYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUdldCgpCi0gIHsKLSAgICByZXR1cm4gaXNTdWJRdWVyeUdldF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN1YlF1ZXJ5S2V5KCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUtleV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5KCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5SXRlbSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlJdGVtXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICAvLyBTeW5jaHJvbml6ZSBjbGllbnQgdmlldyBhbmQgc2VydmVyIG1vZGVsICh1ZGRpT2JqZWN0X3RhYmxlLmpzcCkKLSAgICBzeW5jaHJvbml6ZVVERElPYmplY3RUYWJsZSgpOwotCi0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICBpZiAoIShzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIGxvZyBpbiBmaXJzdAotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkgJiYKLSAgICAgICAgICAgIFZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySUQpICYmCi0gICAgICAgICAgICBwYXNzd29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgcmVnaXN0cnlFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLCB1c2VySUQsIHBhc3N3b3JkKTsKLSAgICAgICAgICBpc0xvZ2dlZEluXyA9IHJlZ2lzdHJ5RWxlbWVudC5pc0xvZ2dlZEluKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gdGUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGllLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKG1lLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0KLSAgICAvLyBzaG93IGFsbCBhc3NlcnRpb24gaWZmIGlzIGxvZ2dlZCBpbiBhbmQgYnVzaW5lc3MgaXMgb3duZWQKLSAgICAvLyBlbHNlIHNob3cgb25seSBjb21wbGV0ZWQgb25lcwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgaWYgKGlzTG9nZ2VkSW5fICYmIGlzQnVzaW5lc3NPd25lZChidXNFbGVtZW50KSkKLSAgICAgIHJldHVybiBzaG93UHVibGlzaGVyQXNzZXJ0aW9uc0Zvck93bmVkQnVzKGJ1c0VsZW1lbnQpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBzaG93UHVibGlzaGVyQXNzZXJ0aW9uc0Zvck5vbk93bmVkQnVzKGJ1c0VsZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNob3dQdWJsaXNoZXJBc3NlcnRpb25zRm9yT3duZWRCdXMoQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQpIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIC8vIHRyeSB0byBnZXQgYSBsaXN0IG9mIGFsbCBwdWJsaXNoZXIgYXNzZXJ0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJlZ2lzdHJ5J3MgYXV0aFRva2VuCi0gICAgTGlzdE1hbmFnZXIgbGlzdE1hbmFnZXIgPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleV8pOwotICAgIGZvcm1Ub29sUEkucmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9FWElTVElOR19QVUJMSVNIRVJfQVNTRVJUSU9OUyk7Ci0gICAgVmVjdG9yIHF1ZXJ5SW5wdXRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgLy8gc2hvdyBhbGwgcHVibGlzaGVyIGFzc2VydGlvbnMKLSAgICBVRERJUHJveHkgcHJveHkgPSAoKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCkpLmdldFByb3h5KCk7Ci0gICAgQXNzZXJ0aW9uU3RhdHVzUmVwb3J0IGFzc2VydGlvblJlcG9ydDsKLSAgICB0cnkgewotICAgICAgYXNzZXJ0aW9uUmVwb3J0ID0gcHJveHkuZ2V0X2Fzc2VydGlvblN0YXR1c1JlcG9ydChyZWdpc3RyeUVsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgKENvbXBsZXRpb25TdGF0dXMpbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSB1ZGRpZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGkpKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgVmVjdG9yIGFzc2VydGlvblZlY3RvciA9IGFzc2VydGlvblJlcG9ydC5nZXRBc3NlcnRpb25TdGF0dXNJdGVtVmVjdG9yKCk7Ci0gICAgVmVjdG9yIG90aGVyQnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciBwdWJBc3NlcnRpb25FbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXNzZXJ0aW9uVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0gICAgICBBc3NlcnRpb25TdGF0dXNJdGVtIGFzc2VydGlvbkl0ZW0gPSAoQXNzZXJ0aW9uU3RhdHVzSXRlbSlhc3NlcnRpb25WZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBmcm9tL3RvIGJ1c2luZXNzIGtleXMKLSAgICAgIFN0cmluZyBmcm9tS2V5ID0gYXNzZXJ0aW9uSXRlbS5nZXRGcm9tS2V5KCkuZ2V0VGV4dCgpOwotICAgICAgU3RyaW5nIHRvS2V5ID0gYXNzZXJ0aW9uSXRlbS5nZXRUb0tleSgpLmdldFRleHQoKTsKLSAgICAgIFN0cmluZyBvd25pbmdCdXNpbmVzc0tleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgLy8gaWdub3JlIHRoaXMgYXNzZXJ0aW9uIGlmIG5laXRoZXIgdGhlIGZyb20ga2V5IG5vciB0aGUgdG8ga2V5IGVxdWFscyB0byB0aGlzIGJ1c2luZXNzJ3Mga2V5Ci0gICAgICBpZiAoIW93bmluZ0J1c2luZXNzS2V5LmVxdWFscyhmcm9tS2V5KSAmJiAhb3duaW5nQnVzaW5lc3NLZXkuZXF1YWxzKHRvS2V5KSkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBTdHJpbmcgb3RoZXJCdXNpbmVzc0tleSA9ICgob3duaW5nQnVzaW5lc3NLZXkuZXF1YWxzKGZyb21LZXkpKSA/IHRvS2V5IDogZnJvbUtleSk7Ci0gICAgICAvLyByZXRyaWV2ZSB0aGUgaW5mb3JtYXRpb24gb2YgdGhlICJvdGhlciBidXNpbmVzcyIKLSAgICAgIG90aGVyQnVzaW5lc3NLZXlzLmFkZChvdGhlckJ1c2luZXNzS2V5KTsKLQotICAgICAgLy8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgcHVibGlzaGVyIGFzc2VydGlvbgotICAgICAgU3RyaW5nIHN0YXR1cyA9IGFzc2VydGlvbkl0ZW0uZ2V0Q29tcGxldGlvblN0YXR1cygpLmdldFRleHQoKTsKLSAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmID0gYXNzZXJ0aW9uSXRlbS5nZXRLZXllZFJlZmVyZW5jZSgpOwotICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCBwdWJBc3NlcnRpb25FbGVtZW50ID0gbmV3IFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9LZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25pbmdCdXNpbmVzc0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWVkUmVmKTsKLSAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRzLmFkZChwdWJBc3NlcnRpb25FbGVtZW50KTsKLSAgICB9Ci0gICAgaWYgKG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKSA+IDApIHsKLSAgICAgIFZlY3RvciBidXNFbnRpdGllczsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ1c0VudGl0aWVzID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKG90aGVyQnVzaW5lc3NLZXlzKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICBidXNFbnRpdGllcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgaWYgKG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBidXNFbnRpdGllcy5hZGQocHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKChTdHJpbmcpb3RoZXJCdXNpbmVzc0tleXMuZ2V0KGopKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotICAgICAgICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5yZW1vdmUoaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5yZW1vdmUoMCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGJ1c0VudGl0aWVzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KWJ1c0VudGl0aWVzLmdldChqKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCBwdWJBc3NlcnRpb25FbGVtZW50ID0gKFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQpcHViQXNzZXJ0aW9uRWxlbWVudHMuZ2V0KGopOwotICAgICAgICBMaXN0RWxlbWVudCBsZSA9IG5ldyBMaXN0RWxlbWVudChiZSk7Ci0gICAgICAgIHF1ZXJ5SW5wdXRWZWN0b3IuYWRkKGxlKTsKLSAgICAgICAgaW50IHN1YlF1ZXJ5SXRlbUlkID0gcXVlcnlJbnB1dFZlY3Rvci5pbmRleE9mKGxlKTsKLSAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudC5zZXRTZXJ2aWNlUHJvdmlkZXIobGUpOwotICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50LnNldFN1YlF1ZXJ5SXRlbUlkKHN1YlF1ZXJ5SXRlbUlkKTsKLSAgICAgICAgbGlzdE1hbmFnZXIuYWRkKG5ldyBMaXN0RWxlbWVudChwdWJBc3NlcnRpb25FbGVtZW50KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGJ1c0VsZW1lbnQuc2V0UHVibGlzaGVyQXNzZXJ0aW9ucyhsaXN0TWFuYWdlcik7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TLCBxdWVyeUlucHV0VmVjdG9yKTsKLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUFVCTElTSEVSX0FTU0VSVElPTlNfUkVGUkVTSEVEIikpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNob3dQdWJsaXNoZXJBc3NlcnRpb25zRm9yTm9uT3duZWRCdXMoQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQpIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIC8vIHRyeSB0byBnZXQgYSBsaXN0IG9mIHB1Ymxpc2hlciBhc3NlcnRpb25zIGJhc2VkIG9uIHRoZSBidXNpbmVzcyBrZXkKLSAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TKTsKLSAgICBWZWN0b3IgcXVlcnlJbnB1dFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBVRERJUHJveHkgcHJveHkgPSAoKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCkpLmdldFByb3h5KCk7Ci0gICAgUmVsYXRlZEJ1c2luZXNzZXNMaXN0IHJlbGF0ZWRCdXNMaXN0OwotICAgIHRyeSB7Ci0gICAgICByZWxhdGVkQnVzTGlzdCA9IHByb3h5LmZpbmRfcmVsYXRlZEJ1c2luZXNzZXMoYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoS2V5ZWRSZWZlcmVuY2UpbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGaW5kUXVhbGlmaWVycyludWxsKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHVkZGllLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGkrKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaSkpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIkV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBWZWN0b3IgcmVsYXRlZEJ1c1ZlY3RvciA9IHJlbGF0ZWRCdXNMaXN0LmdldFJlbGF0ZWRCdXNpbmVzc0luZm9zKCkuZ2V0UmVsYXRlZEJ1c2luZXNzSW5mb1ZlY3RvcigpOwotICAgIFZlY3RvciBvdGhlckJ1c2luZXNzS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgcHViQXNzZXJ0aW9uRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSAgPSAwOyBpIDwgcmVsYXRlZEJ1c1ZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgUmVsYXRlZEJ1c2luZXNzSW5mbyByZWxhdGVkQnVzSW5mbyA9IChSZWxhdGVkQnVzaW5lc3NJbmZvKXJlbGF0ZWRCdXNWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBmcm9tL3RvIGJ1c2luZXNzIGtleXMKLSAgICAgIFN0cmluZyBmcm9tS2V5OwotICAgICAgU3RyaW5nIHRvS2V5OwotICAgICAgU3RyaW5nIG93bmluZ0J1c2luZXNzS2V5OwotICAgICAgaWYgKHJlbGF0ZWRCdXNJbmZvLmdldERlZmF1bHRTaGFyZWRSZWxhdGlvbnNoaXBzKCkuZ2V0RGlyZWN0aW9uKCkuZXF1YWxzKFNoYXJlZFJlbGF0aW9uc2hpcHMuRElSRUNUSU9OX0ZST01LRVkpKSB7Ci0gICAgICAgIGZyb21LZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgICAgdG9LZXkgPSByZWxhdGVkQnVzSW5mby5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgICBvd25pbmdCdXNpbmVzc0tleSA9IGZyb21LZXk7Ci0gICAgICAgIG90aGVyQnVzaW5lc3NLZXlzLmFkZCh0b0tleSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgZnJvbUtleSA9IHJlbGF0ZWRCdXNJbmZvLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICAgIHRvS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICAgIG93bmluZ0J1c2luZXNzS2V5ID0gdG9LZXk7Ci0gICAgICAgIG90aGVyQnVzaW5lc3NLZXlzLmFkZChmcm9tS2V5KTsKLSAgICAgIH0KLQotICAgICAgVmVjdG9yIGtleWVkUmVmVmVjdG9yID0gcmVsYXRlZEJ1c0luZm8uZ2V0RGVmYXVsdFNoYXJlZFJlbGF0aW9uc2hpcHMoKS5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudFtdIHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheSA9IG5ldyBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50W2tleWVkUmVmVmVjdG9yLnNpemUoKV07Ci0gICAgICBmb3IgKGludCBrID0gMDsgayA8IGtleWVkUmVmVmVjdG9yLnNpemUoKTsgaysrKSB7Ci0gICAgICAgIC8vIHJldHJpZXZlIHRoZSBzdGF0dXMgb2YgdGhlIHB1Ymxpc2hlciBhc3NlcnRpb24KLSAgICAgICAgU3RyaW5nIHN0YXR1cyA9IENvbXBsZXRpb25TdGF0dXMuQ09NUExFVEU7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmVmVjdG9yLmVsZW1lbnRBdChrKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCBwdWJBc3NlcnRpb25FbGVtZW50ID0gbmV3IFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21LZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25pbmdCdXNpbmVzc0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZWRSZWYpOwotICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50QXJyYXlba10gPSBwdWJBc3NlcnRpb25FbGVtZW50OwotICAgICAgfQotICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudHMuYWRkKHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheSk7Ci0gICAgfQotICAgIGlmIChvdGhlckJ1c2luZXNzS2V5cy5zaXplKCkgPiAwKSB7Ci0gICAgICBWZWN0b3IgYnVzRW50aXRpZXM7Ci0gICAgICB0cnkgewotICAgICAgICBidXNFbnRpdGllcyA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbChvdGhlckJ1c2luZXNzS2V5cykuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgYnVzRW50aXRpZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGlmIChvdGhlckJ1c2luZXNzS2V5cy5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvdGhlckJ1c2luZXNzS2V5cy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgYnVzRW50aXRpZXMuYWRkKHByb3h5LmdldF9idXNpbmVzc0RldGFpbCgoU3RyaW5nKW90aGVyQnVzaW5lc3NLZXlzLmdldChqKSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudHMucmVtb3ZlKGopOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudHMucmVtb3ZlKDApOwotICAgICAgfQotICAgICAgZm9yIChpbnQgaiAgPSAwOyBqIDwgYnVzRW50aXRpZXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpYnVzRW50aXRpZXMuZ2V0KGopOwotICAgICAgICBMaXN0RWxlbWVudCBsZSA9IG5ldyBMaXN0RWxlbWVudChiZSk7Ci0gICAgICAgIHF1ZXJ5SW5wdXRWZWN0b3IuYWRkKGxlKTsKLSAgICAgICAgaW50IHN1YlF1ZXJ5SXRlbUlkID0gcXVlcnlJbnB1dFZlY3Rvci5pbmRleE9mKGxlKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudFtdIHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheSA9IChQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50W10pcHViQXNzZXJ0aW9uRWxlbWVudHMuZ2V0KGopOwotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheS5sZW5ndGg7IGsrKykgewotICAgICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheVtrXS5zZXRTZXJ2aWNlUHJvdmlkZXIobGUpOwotICAgICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheVtrXS5zZXRTdWJRdWVyeUl0ZW1JZChzdWJRdWVyeUl0ZW1JZCk7Ci0gICAgICAgICAgbGlzdE1hbmFnZXIuYWRkKG5ldyBMaXN0RWxlbWVudChwdWJBc3NlcnRpb25FbGVtZW50QXJyYXlba10pKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBidXNFbGVtZW50LnNldFB1Ymxpc2hlckFzc2VydGlvbnMobGlzdE1hbmFnZXIpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9FWElTVElOR19QVUJMSVNIRVJfQVNTRVJUSU9OUywgcXVlcnlJbnB1dFZlY3Rvcik7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1BVQkxJU0hFUl9BU1NFUlRJT05TX1JFRlJFU0hFRCIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTAxOWI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbiBleHRlbmRzIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICAKLSAgICAvLyBTYXZlIHRoZSBmcmFtZXNldCBzaXplcyBpZmYgbm8gZnJhbWUgaXMgbWF4aW1pemVkLgotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgCi0gICAgaWYgKCFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAKLSAgICByZXR1cm4gc3VwZXIucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGVyc3BlY3RpdmVJZCk7Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBmb3JtTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBmb3JtTGluay50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTNkMzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlRvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uIGV4dGVuZHMgVG9nZ2xlTm9kZUFjdGlvbgotewotICBwdWJsaWMgVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRDYXRlZ29yeU1hbmFnZXIoKSk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/c0lkPS4uLiZub2RlSWQ9Li4uJm9wZW49Li4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgbm9kZUlkLGJvb2xlYW4gb3BlbikKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1RvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU4pLmFwcGVuZCgnPScpLmFwcGVuZChvcGVuP0FjdGlvbklucHV0cy5PUEVOX05PREU6QWN0aW9uSW5wdXRzLkNMT1NFX05PREUpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIHBlcmZvcm1CYXNlQWN0aW9uKG5vZGVJZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gImNhdGVnb3J5QnJvd3NlcldpbmRvd0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiBPcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmdldENhdGVnb3J5Q29udGVudFBhZ2UoY29udHJvbGxlcl8uZ2V0U2Vzc2lvbklkKCksdWRkaVBlcnNwZWN0aXZlLmdldENhdGVnb3J5VE1vZGVsS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIE9wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGluayhjb250cm9sbGVyXy5nZXRTZXNzaW9uSWQoKSx1ZGRpUGVyc3BlY3RpdmUuZ2V0Q2F0ZWdvcnlUTW9kZWxLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NmQ1NjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlRvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbiBleHRlbmRzIFRvZ2dsZU5vZGVBY3Rpb24KLXsKLSAgcHVibGljIFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKSk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLiZvcGVuPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsYm9vbGVhbiBvcGVuKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU4pLmFwcGVuZCgnPScpLmFwcGVuZChvcGVuP0FjdGlvbklucHV0cy5PUEVOX05PREU6QWN0aW9uSW5wdXRzLkNMT1NFX05PREUpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb25seSB0byBzZWxlY3QgdGhlIHRvZ2dsZWQgbm9kZSB3aGVuLCBhdCB0aGUgdGltZSBvZgotICAvLyB0aGUgY29sbGFwc2UgZXZlbnQsIGEgZGVzY2VuZGFudCBub2RlIHdhcyBzZWxlY3RlZC4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHRvZ2dsZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgaW50IG5vZGVJZCA9IHRvZ2dsZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpOwotICAgIGludCB2aWV3SWQgPSB0b2dnbGVkTm9kZV8uZ2V0Vmlld0lkKCk7Ci0gICAgaW50IHZpZXdUb29sSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCx0cnVlKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJuYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAicHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE2MjkzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlUcmFuc2ZlclRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBUcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcml2YXRlIE5vZGUgdGFyZ2V0Tm9kZV87Ci0gIHB1YmxpYyBUcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB0YXJnZXROb2RlXyA9IG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAvLyBUaGUgY2xpZW50IEphdmFzY3JpcHQgZW5mb3JjZXMgdGhlIHJ1bGUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSB3YXMgc2VsZWN0ZWQgYmVmb3JlIHRoZSBmb3JtIGNhbiBiZSBzdWJtaXR0ZWQuCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyxzZWxlY3RlZE5vZGVJZHMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvclJldHVybigpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TSE9XX1JFU1VMVFNfVEFSR0VUKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGVuYWJsZVNob3dSZXN1bHRzVGFyZ2V0KCkKLSAgewotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgdGFyZ2V0IGxpbmsgb24gdGhlIHF1ZXJ5IHJlc3VsdHMgcGFnZS4gSW5zZXJ0IGEgemVybyBlbGVtZW50Ci0gICAgLy8gYXJyYXkgc28gdGhhdCBubyByZXN1bHRzIGFyZSB0cmFuc2ZlcnJlZCBidXQgdGhlIGp1bXAgYmFjayB0byB0aGUgY29ycmVjdCBxdWVyeSBhbmQgaXRzIGluZm8gb2NjdXJzLgotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMsbmV3IFN0cmluZ1swXSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gVHJhbnNmZXIgdGhlIHJlc3VsdHMgaW4gdGhpcyBRdWVyeSBub2RlIGludG8gdGhlIHByb3BlcnR5IGV4cGVjdGVkIGJ5IHRoZSBvcmlnaW5hdGluZyBub2RlLgotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyk7Ci0gICAgTm9kZSBjdXJyZW50Tm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IGN1cnJlbnRFbGVtZW50ID0gY3VycmVudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0IHRhcmdldCA9IChTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KShjdXJyZW50RWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5TVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQpKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSB0YXJnZXQuZ2V0U3ViUXVlcnlLZXkoKTsKLSAgICBTdHJpbmcgdGFyZ2V0UXVlcnlLZXk7Ci0KLSAgICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IHN1YlF1ZXJ5S2V5Lmxhc3RJbmRleE9mKCc6Jyk7Ci0gICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPT0gLTEpCi0gICAgICB0YXJnZXRRdWVyeUtleSA9ICIiOwotICAgIGVsc2UKLSAgICAgIHRhcmdldFF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXkuc3Vic3RyaW5nKDAsbGFzdFNlcGFyYXRvclBvcyk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0UHJvcGVydHkgPSBzdWJRdWVyeUtleS5zdWJzdHJpbmcobGFzdFNlcGFyYXRvclBvcysxLHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpKTsKLSAgICBGb3JtVG9vbCB0YXJnZXRGb3JtVG9vbCA9IHRhcmdldC5nZXRUYXJnZXRGb3JtVG9vbCgpOwotICAgICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpdGFyZ2V0Rm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleSk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHRhcmdldFF1ZXJ5Rm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpdGFyZ2V0Rm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyh0YXJnZXRRdWVyeUtleSk7Ci0gICAgVmVjdG9yIHRhcmdldExpc3QgPSAoVmVjdG9yKXRhcmdldFF1ZXJ5Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSk7Ci0gICAgaWYgKHRhcmdldExpc3QgPT0gbnVsbCkKLSAgICAgIHRhcmdldExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGN1cnJlbnROb2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2VsZWN0ZWROb2RlSWRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaW50IHNlbGVjdGVkTm9kZUlkID0gSW50ZWdlci5wYXJzZUludChzZWxlY3RlZE5vZGVJZHNbaV0pOwotICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKHNlbGVjdGVkTm9kZUlkKTsKLSAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBPYmplY3Qgb2JqZWN0OwotICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgQnVzaW5lc3NFbGVtZW50KQotICAgICAgICBvYmplY3QgPSAoKEJ1c2luZXNzRWxlbWVudCl0cmVlRWxlbWVudCkuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgIGVsc2UgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUVsZW1lbnQpCi0gICAgICAgIG9iamVjdCA9ICgoU2VydmljZUVsZW1lbnQpdHJlZUVsZW1lbnQpLmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBTZXJ2aWNlIGludGVyZmFjZQotICAgICAgICBvYmplY3QgPSAoKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXRyZWVFbGVtZW50KS5nZXRUTW9kZWwoKTsKLSAgICAgIH0KLSAgICAgIExpc3RFbGVtZW50IHRhcmdldExpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KG9iamVjdCk7Ci0gICAgICB0YXJnZXRMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oc2VsZWN0ZWROb2RlSWQsc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSxzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkpOwotICAgICAgaWYgKHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTKSB8fCB0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKSB8fCB0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQ2xlYXIgdGhlIG1hbmFnZXIgc28gYSByZXBsYWNlbWVudCBvY2N1cnMuCi0gICAgICAgIHRhcmdldExpc3QucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIHRhcmdldExpc3QuYWRkRWxlbWVudCh0YXJnZXRMaXN0RWxlbWVudCk7Ci0gICAgfQotICAgIHRhcmdldFF1ZXJ5Rm9ybVRvb2xQSS5zZXRQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSx0YXJnZXRMaXN0KTsKLSAgICBIYXNodGFibGUgc2F2ZWRQYXJlbnRRdWVyeVByb3BlcnRpZXMgPSB0YXJnZXQuZ2V0UGFyZW50UXVlcnlEYXRhKCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHNhdmVkUGFyZW50UXVlcnlQcm9wZXJ0aWVzLmtleXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcga2V5ID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICB0YXJnZXRRdWVyeUZvcm1Ub29sUEkuc2V0UHJvcGVydHkoa2V5LHNhdmVkUGFyZW50UXVlcnlQcm9wZXJ0aWVzLmdldChrZXkpKTsKLSAgICB9Ci0KLSAgICAvLyBTZWxlY3QgdGhlIG5vZGUgYW5kIHRoZSBkYXRhc3RydWN0dXJlIHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIHN1YnF1ZXJ5LgotICAgIGludCB0YXJnZXROb2RlSWQgPSB0YXJnZXQuZ2V0Tm9kZUlkKCk7Ci0gICAgaW50IHRhcmdldFRvb2xJZCA9IHRhcmdldC5nZXRUb29sSWQoKTsKLSAgICBpbnQgdGFyZ2V0Vmlld0lkID0gdGFyZ2V0LmdldFZpZXdJZCgpOwotICAgIGludCB0YXJnZXRWaWV3VG9vbElkID0gdGFyZ2V0LmdldFZpZXdUb29sSWQoKTsKLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZCh0YXJnZXROb2RlSWQpOwotICAgIHRhcmdldE5vZGVfID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgdGFyZ2V0Tm9kZV8uZ2V0VG9vbE1hbmFnZXIoKS5zZXRTZWxlY3RlZFRvb2xJZCh0YXJnZXRUb29sSWQpOwotICAgIHRhcmdldE5vZGVfLnNldFZpZXdJZCh0YXJnZXRWaWV3SWQpOwotICAgIGlmICh0YXJnZXRWaWV3SWQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgdGFyZ2V0Tm9kZV8uZ2V0Vmlld1Rvb2xNYW5hZ2VyKCkuc2V0U2VsZWN0ZWRUb29sSWQodGFyZ2V0Vmlld1Rvb2xJZCk7Ci0gICAgdGFyZ2V0Rm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksdGFyZ2V0UXVlcnlLZXkpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHRhcmdldFZpZXdUb29sSWQsdGFyZ2V0UXVlcnlLZXksdHJ1ZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGUgZ2V0VGFyZ2V0Tm9kZSgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0Tm9kZV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFiNTA4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBUcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBUcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uKCkKLSAgewotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb25KU1AuanNwP3Nlc3Npb25JZD0uLi4mY2F0ZWdvcnlUTW9kZWxLZXk9Li4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKS5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoY2F0ZWdvcnlUTW9kZWxLZXkpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTllODFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxpbmtBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuT3BlbldTRExBY3Rpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLQotcHVibGljIGNsYXNzIFVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHVibGljIFVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgbm9kZUlkU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgLy8gUGVyZm9ybSBkYXRhIHZhbGlkYXRpb24uCi0gICAgdHJ5Ci0gICAgewotICAgICAgSW50ZWdlci5wYXJzZUludChub2RlSWRTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsZWQhCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELG5vZGVJZFN0cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJZCk7Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VFbGVtZW50KQotICAgIHsKLSAgICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgICBTdHJpbmcgd3NkbFVSTCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKGJzLCBzZXJ2aWNlRWxlbWVudC5nZXRSZWdpc3RyeUVsZW1lbnQoKS5nZXRQcm94eSgpKTsKLSAgICAgIGlmICh3c2RsVVJMID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgRGVmaW5pdGlvbiBkZWYgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgICAgICAgRmlsZSB0ZW1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoInRlbXAiLCIud3NkbCIpOwotICAgICAgICAgIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgICAgYWN0aW9uLndyaXRlV1NETERlZmluaXRpb24obmV3IEZpbGVPdXRwdXRTdHJlYW0odGVtcEZpbGUpLGRlZik7Ci0gICAgICAgICAgd3NkbFVSTCA9IHRlbXBGaWxlLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbFVSTCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbFVSTCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsVVJMID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgICAKLSAgICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE9wZW5XU0RMQWN0aW9uIG9wZW5XU0RMQWN0aW9uID0gbmV3IE9wZW5XU0RMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBvcGVuV1NETEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCx3c2RsVVJMKTsKLSAgICAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBvcGVuV1NETEFjdGlvbi5ydW4oKTsKLSAgICAgICAgaWYgKGFjdGlvblJlc3VsdCkgewotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19XU0RMX0FEREVEX1RPX1dTRExfUEVSU1BFQ1RJVkUiLHdzZGxVUkwpKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1dTRExfTk9UX0FEREVEX1RPX1dTRExfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJRXhjZXB0aW9uSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUV4Y2VwdGlvbkhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZmYTg0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJRXhjZXB0aW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLQotcHVibGljIGNsYXNzIFVERElFeGNlcHRpb25IYW5kbGVyIHsKLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZXF1aXJlc1Jlc2V0KFVERElFeGNlcHRpb24gZSl7Ci0JCQotICAgIAlEaXNwb3NpdGlvblJlcG9ydCBkcCA9IGUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLSAgICAJVmVjdG9yIHJ2ID0gZHAuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgCWZvcihpbnQgaSA9IDA7aSA8IHJ2LnNpemUoKTtpKyspewotICAgIAkJUmVzdWx0IHJlc3VsdCA9IChSZXN1bHQpcnYuZ2V0KGkpOwotICAgIAkJaWYocmVzdWx0LmdldEVycm5vKCkuZXF1YWxzKCIxMDE0MCIpKQotICAgIAkJCSByZXR1cm4gdHJ1ZTsKLSAgICAJfQotICAgIAlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZmRkNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5XU0RMRmlsZU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24KLXsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZfOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0V1NETEZpbGVOYW1lXzsKLQotICBwdWJsaWMgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbm9kZU1hbmFnZXJfID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgZGVmXyA9IG51bGw7Ci0gICAgZGVmYXVsdFdTRExGaWxlTmFtZV8gPSAidGVtcC53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQpCi0gIHsKLSAgICByZXR1cm4gSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCwidWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCIpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gd3JpdGUoT3V0cHV0U3RyZWFtIG9zKQotICB7Ci0gICAgcmV0dXJuIHdyaXRlV1NETERlZmluaXRpb24ob3MsZGVmXyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdFdTRExGaWxlTmFtZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgU3RyaW5nIHdzZGxVcmwgPSBudWxsOwotICAgIGlmIChub2RlICE9IG51bGwpCi0gICAgewotICAgICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgICB3c2RsVXJsID0gdWRkaTRqSGVscGVyLmdldFdTREwoYnMsIHNlcnZpY2VFbGVtZW50LmdldFJlZ2lzdHJ5RWxlbWVudCgpLmdldFByb3h5KCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgICAgewotICAgICAgICBUTW9kZWwgdE1vZGVsID0gKChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCllbGVtZW50KS5nZXRUTW9kZWwoKTsKLSAgICAgICAgd3NkbFVybCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKHRNb2RlbCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh3c2RsVXJsICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZl8gPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVybCk7Ci0gICAgICAgIGlmIChkZWZfICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgd3NkbFBhdGhuYW1lOwotICAgICAgICAgIGludCBpbmRleCA9IHdzZGxVcmwuaW5kZXhPZignLycpOwotICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgICAgIHdzZGxQYXRobmFtZSA9IHdzZGxVcmwuc3Vic3RyaW5nKGluZGV4KzEsIHdzZGxVcmwubGVuZ3RoKCkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdzZGxQYXRobmFtZSA9IHdzZGxVcmw7Ci0gICAgICAgICAgZGVmYXVsdFdTRExGaWxlTmFtZV8gPSBXU0RMRmlsZU5hbWVIZWxwZXIuZ2V0V1NETEZpbGVOYW1lKHdzZGxQYXRobmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9SRVRSSUVWSU5HX1dTRExfRE9DIikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4MjNkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24KLXsKLSAgcHVibGljIFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgICBwdWJsaWMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIG5ld0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbigpIHsKLSAgICAgICAgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLQotICAgICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLQotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKSk7Ci0KLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLSAgICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA5NTI4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24KLXsKLSAgcHVibGljIFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiAoRm9ybVRvb2wpdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgIFN0cmluZyB3c2RsVXJsID0gbnVsbDsKLSAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VFbGVtZW50KQotICAgIHsKLSAgICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgIHdzZGxVcmwgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETChicywgc2VydmljZUVsZW1lbnQuZ2V0UmVnaXN0cnlFbGVtZW50KCkuZ2V0UHJveHkoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkKLSAgICB7Ci0gICAgICBUTW9kZWwgdE1vZGVsID0gKChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCllbGVtZW50KS5nZXRUTW9kZWwoKTsKLSAgICAgIHdzZGxVcmwgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETCh0TW9kZWwpOwotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmICh3c2RsVXJsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIERlZmluaXRpb24gZGVmID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVcmwpOwotICAgICAgICBGaWxlIHRlbXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgidGVtcCIsIi53c2RsIik7Ci0gICAgICAgIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIGFjdGlvbi53cml0ZVdTRExEZWZpbml0aW9uKG5ldyBGaWxlT3V0cHV0U3RyZWFtKHRlbXBGaWxlKSxkZWYpOwotICAgICAgICB3c2RsVXJsID0gdGVtcEZpbGUudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgICByZXR1cm4gbGF1bmNoV2l6YXJkKHdzZGxVcmwpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JFVFJJRVZJTkdfV1NETF9ET0MiKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNTg5MmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Ob2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJTWFpbk5vZGU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVRERJTm9kZUFjdGlvbiBleHRlbmRzIE5vZGVBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlXzsKLSAgcHVibGljIFVERElOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkpOwotICAgIHJlZ05vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKQotICB7Ci0gICAgTm9kZSBzZWxlY3RlZE5hdmlnYXRvck5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGVkTmF2aWdhdG9yTm9kZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeU5vZGUgZ2V0UmVnaXN0cnlOb2RlKCkKLSAgewotICAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpOwotICAgIHJldHVybiB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESVByb3BlcnRpZXNGb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU4MDFkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElNYWluTm9kZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbiBleHRlbmRzIEZvcm1BY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXJfOwotICBwdWJsaWMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5hdmlnYXRvck1hbmFnZXJfID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKQotICB7Ci0gICAgcmV0dXJuIG5hdmlnYXRvck1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFJlZ2lzdHJ5Tm9kZSBnZXRSZWdpc3RyeU5vZGUoKQotICB7Ci0gICAgcmV0dXJuIGdldFJlZ2lzdHJ5Tm9kZShnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUmVnaXN0cnlOb2RlIGdldFJlZ2lzdHJ5Tm9kZShOb2RlIHJlZ2lzdHJ5Q2hpbGROb2RlKQotICB7Ci0gICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKTsKLSAgICByZXR1cm4gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShyZWdpc3RyeUNoaWxkTm9kZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VucHVibGlzaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYzM3ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFVucHVibGlzaEFjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ2lzdHJ5Tm9kZV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzTG9nZ2VkSW5fOwotCi0gIHB1YmxpYyBVbnB1Ymxpc2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcmVnaXN0cnlOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGxvZyBpbgotICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCwgcHVibGlzaFVSTCk7Ci0gICAgICAgIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgICAgfQotCi0gICAgICBpZiAodXNlcklkICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgICAgICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJZCkpCi0gICAgICB7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgICB9Ci0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELCBwYXNzd29yZCk7Ci0gICAgICAKLSAgICAgIGZvcm1Ub29sLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotCi0gICAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0KLQlSZWdpc3RyeUVsZW1lbnQgcmVnaXN0cnlFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCFyZWdpc3RyeUVsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgewotICAgICAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgbG9nIGluIGZpcnN0Ci0gICAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgICAKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICB9Ci0KLSAgICAgIFN0cmluZyBzZWxlY3RlZEVsZW1lbnRLZXkgPSBzZWxlY3RlZEVsZW1lbnQuZ2V0S2V5KCk7Ci0gICAgICBTdHJpbmcgdW5wdWJsaXNoVHlwZU1lc3NhZ2VLZXkgPSBudWxsOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnaXN0cnlFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBTdHJpbmcgYXV0aEluZm8gPSByZWdpc3RyeUVsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKTsKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IGRyID0gbnVsbDsKLSAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHVucHVibGlzaFR5cGVNZXNzYWdlS2V5ID0gIk1TR19JTkZPX0JVU0lORVNTX1VOUFVCTElTSEVEIjsKLSAgICAgICAgZHIgPSBwcm94eS5kZWxldGVfYnVzaW5lc3MoYXV0aEluZm8sc2VsZWN0ZWRFbGVtZW50S2V5KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VFbGVtZW50KQotICAgICAgewotICAgICAgICB1bnB1Ymxpc2hUeXBlTWVzc2FnZUtleSA9ICJNU0dfSU5GT19TRVJWSUNFX1VOUFVCTElTSEVEIjsKLSAgICAgICAgZHIgPSBwcm94eS5kZWxldGVfc2VydmljZShhdXRoSW5mbyxzZWxlY3RlZEVsZW1lbnRLZXkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHVucHVibGlzaFR5cGVNZXNzYWdlS2V5ID0gIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1VOUFVCTElTSEVEIjsKLSAgICAgICAgZHIgPSBwcm94eS5kZWxldGVfdE1vZGVsKGF1dGhJbmZvLHNlbGVjdGVkRWxlbWVudEtleSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWRyLnN1Y2Nlc3MoKSkKLSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihkci50b1N0cmluZygpKTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2VsZWN0ZWRFbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodW5wdWJsaXNoVHlwZU1lc3NhZ2VLZXksc2VsZWN0ZWRFbGVtZW50LmdldE5hbWUoKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpCi0gICAgCQlyZWdpc3RyeUVsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICAJcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsIG1lc3NhZ2VRdWV1ZSwgIkV4Y2VwdGlvbiIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlNDY2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlB1Ymxpc2hlZEl0ZW1zTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVXBkYXRlQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnTm9kZV87Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlc0F1dGhlbnRpY2F0aW9uXzsKLSAgcHVibGljIFVwZGF0ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIsYm9vbGVhbiByZXF1aXJlc0F1dGhlbnRpY2F0aW9uKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgICByZXF1aXJlc0F1dGhlbnRpY2F0aW9uXyA9IHJlcXVpcmVzQXV0aGVudGljYXRpb247Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2V0dXAgZm9yIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk1VTFRJUEFSVF9GT1JNX0RBVEFfUEFSU0VSLCBwYXJzZXIpOwotCi0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSBmb3JtVG9vbDsKLSAgICBmb3JtVG9vbFBJLmNsZWFyRXJyb3JzKCk7Ci0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHByb2Nlc3NPdGhlcnMocGFyc2VyLGZvcm1Ub29sUEkpOwotICAgIGZvciAoaW50IGk9MDtpPHJlbW92ZWRQcm9wZXJ0aWVzXy5zaXplKCk7aSsrKQotICAgICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShyZW1vdmVkUHJvcGVydGllc18uZWxlbWVudEF0KGkpKTsKLSAgICBmb3JtVG9vbFBJLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotICAgIAotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAKLSAgICBib29sZWFuIHZhbGlkYXRlQXV0aGVudGljYXRpb24gPSAhcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkgJiByZXF1aXJlc0F1dGhlbnRpY2F0aW9uXzsKLSAgICAKLSAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZhbGlkYXRlQXV0aGVudGljYXRpb24gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhwdWJsaXNoVVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgIH0KLSAgICAKLSAgICBpZiAodXNlcklkICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIH0KLSAgICAKLSAgICBpZiAodmFsaWRhdGVBdXRoZW50aWNhdGlvbiAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJZCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgIH0KLSAgICAKLSAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gcmVmcmVzaEZyb21SZWdpc3RyeSgpOwotICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVmcmVzaE5vZGUoQnVzaW5lc3NFbnRpdHkgYmUpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBOb2RlIHBhcmVudE5vZGUgPSBub2RlLmdldFBhcmVudCgpOwotICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IG5ld0J1c2luZXNzRWxlbWVudCA9IG5ldyBCdXNpbmVzc0VsZW1lbnQoYmUscmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKS5nZXRNb2RlbCgpKTsKLSAgICBjb25uZWN0RWxlbWVudHMocGFyZW50Tm9kZSxuZXdCdXNpbmVzc0VsZW1lbnQpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCByZWZyZXNoTm9kZShCdXNpbmVzc1NlcnZpY2UgYnMpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBOb2RlIHBhcmVudE5vZGUgPSBub2RlLmdldFBhcmVudCgpOwotICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgU2VydmljZUVsZW1lbnQgbmV3U2VydmljZUVsZW1lbnQgPSBuZXcgU2VydmljZUVsZW1lbnQoYnMscmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKS5nZXRNb2RlbCgpKTsKLSAgICBjb25uZWN0RWxlbWVudHMocGFyZW50Tm9kZSxuZXdTZXJ2aWNlRWxlbWVudCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlZnJlc2hOb2RlKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBOb2RlIHBhcmVudE5vZGUgPSBub2RlLmdldFBhcmVudCgpOwotICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgbmV3U2VydmljZUludGVyZmFjZUVsZW1lbnQgPSBuZXcgU2VydmljZUludGVyZmFjZUVsZW1lbnQodE1vZGVsLHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCkuZ2V0TW9kZWwoKSk7Ci0gICAgY29ubmVjdEVsZW1lbnRzKHBhcmVudE5vZGUsbmV3U2VydmljZUludGVyZmFjZUVsZW1lbnQpOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgY29ubmVjdEVsZW1lbnRzKE5vZGUgcGFyZW50Tm9kZSxUcmVlRWxlbWVudCBuZXdFbGVtZW50KQotICB7Ci0gICAgVHJlZUVsZW1lbnQgcGFyZW50RWxlbWVudCA9IHBhcmVudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgcmVsID0gbnVsbDsKLSAgICBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFB1Ymxpc2hlZEl0ZW1zTm9kZSkKLSAgICAgIHJlbCA9IFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBRdWVyeU5vZGUKLSAgICAgIHJlbCA9IFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUllfUkVTVUxUUzsKLSAgICB9Ci0gICAgcGFyZW50RWxlbWVudC5jb25uZWN0KG5ld0VsZW1lbnQscmVsLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgTm9kZSBuZXdOb2RlID0gcGFyZW50Tm9kZS5nZXRDaGlsZE5vZGUobmV3RWxlbWVudCk7Ci0gICAgaW50IG5ld05vZGVJZCA9IG5ld05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBwYXJlbnROb2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQobmV3Tm9kZUlkKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IG5ld05vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxzZWxlY3RlZFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICB9Ci0gICAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihWZWN0b3IgdikKLSAgewotICAgIGZvciAoaW50IGk9MDtpPHYuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCl2LmVsZW1lbnRBdChpKTsKLSAgICAgIGxpc3RFbGVtZW50LnNldFZpZXdJZChpKTsKLSAgICAgIC8vIHRhcmdldFZpZXdJZCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgc3VjY2Vzc2Z1bGx5IHZhbGlkYXRlZCBsaXN0IGVsZW1lbnQgcmVtYWlucyBpbiBlZGl0IHN0YXRlLgotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGggKyAxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aCAtIDFdID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVCdXNpbmVzc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjUxZDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkxzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZUJ1c2luZXNzQWN0aW9uIGV4dGVuZHMgVXBkYXRlQWN0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1VwZGF0ZV87Ci0gIHB1YmxpYyBVcGRhdGVCdXNpbmVzc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLHRydWUpOwotICAgIGlzVXBkYXRlXyA9IHRydWU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB1dWlkS2V5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICBTdHJpbmdbXSBkaXNjb3ZlcnlVUkxNb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ESVNDT1ZFUllVUkxfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGRpc2NvdmVyeVVSTFZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuRElTQ09WRVJZVVJMX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gZGlzY292ZXJ5VVJMcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ESVNDT1ZFUllVUkwpOwotICAgIFN0cmluZ1tdIG5hbWVNb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBuYW1lVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OQU1FX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gbmFtZUxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvblZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fVklFV0lEKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbkxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OKTsKLSAgICBTdHJpbmdbXSBpZE1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGlkVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5JREVOVElGSUVSX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdE1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBjYXRWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotICAgIAotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIAotICAgIGlmICh1dWlkS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSx1dWlkS2V5KTsKLSAgICAKLSAgICAKLSAgICBpZiAoZGlzY292ZXJ5VVJMTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBkaXNjb3ZlcnlVUkxWaWV3SWRzICE9IG51bGwgJiYgZGlzY292ZXJ5VVJMcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGREaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgICAgVmVjdG9yIG5ld0Rpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZVVJMIik7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gbmV3IERpc2NvdmVyeVVSTChkaXNjb3ZlcnlVUkxzW2ldLCIiKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoZGlzY292ZXJ5VVJMc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW50IGRpc2NvdmVyeVVSTFZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoZGlzY292ZXJ5VVJMVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihkaXNjb3ZlcnlVUkxNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZGlzY292ZXJ5VVJMVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3RGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQoZGlzY292ZXJ5VVJMKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdEaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZERpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChkaXNjb3ZlcnlVUkxWaWV3SWQpKTsgICAgIAotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0Rpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsbmV3RGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IpOyAgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgICAKLSAgICBIYXNodGFibGUgbGFuZ3VhZ2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGlmIChuYW1lTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBuYW1lVmlld0lkcyAhPSBudWxsICYmIG5hbWVMYW5ndWFnZXMgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGROYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBWZWN0b3IgbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgLy8gVURESSdzIHNhdmUgQVBJIChBcHBlbmRpeCBDIG9mIHRoZSBVRERJIFYyIFByb2dyYW1tZXJzIEFQSSBTcGVjaWZpY2F0aW9uKSByZXF1aXJlcyB0aGUgZm9sbG93aW5nOgotICAgICAgLy8gMSkgT25seSB0aGUgZmlyc3Qgcm93IGNhbiBoYXZlIGEgYmxhbmsgbGFuZ3VhZ2UuCi0gICAgICAvLyAyKSBPbmx5IDEgbmFtZSBwZXIgbGFuZ3VhZ2UuCi0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIik7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgTmFtZSB1ZGRpNGpOYW1lOwotICAgICAgICBpZiAobmFtZUxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldLG5hbWVMYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChuYW1lTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KG5hbWVMYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZXNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgbmFtZVZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQobmFtZVZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YobmFtZU1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIAotICAgICAgICBpZiAobmFtZVZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudCh1ZGRpNGpOYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGROYW1lTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KG5hbWVWaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OQU1FUyIpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvblZpZXdJZHMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKTsKLSAgICAgIFZlY3RvciBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKTsKLSAgICAgIGxhbmd1YWdlSGFzaC5jbGVhcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEZXNjcmlwdGlvbiB1ZGRpNGpEZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0sZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKGRlc2NyaXB0aW9uc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgZGVzY3JpcHRpb25WaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGRlc2NyaXB0aW9uVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIAotICAgICAgICBpZiAoZGVzY3JpcHRpb25WaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KHVkZGk0akRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkRGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoZGVzY3JpcHRpb25WaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yKTsgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgICAgCi0gICAgaWYgKGlkTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBpZFZpZXdJZHMgIT0gbnVsbCAmJiBpZFR5cGVzICE9IG51bGwgJiYgaWRLZXlOYW1lcyAhPSBudWxsICYmIGlkS2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZElkTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICAgICBWZWN0b3IgbmV3SWRMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaW50IGlkVmlld0lkID0gSW50ZWdlci5wYXJzZUludChpZFZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoaWRNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpZFZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQoa3IpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGRJZExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpZFZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMsbmV3SWRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgICAgCi0gICAgaWYgKGNhdE1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgY2F0Vmlld0lkcyAhPSBudWxsICYmIGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgICAgIFZlY3RvciBuZXdDYXRMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGludCBjYXRWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGNhdFZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoY2F0TW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoY2F0Vmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQoa3IpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGNhdFZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0NhdExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMsbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOyAgICAgICAgICAgIAotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZnJlc2hGcm9tUmVnaXN0cnkoKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXVpZEtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBWZWN0b3IgYmVWZWN0b3IgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwodXVpZEtleSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlOwotICAgICAgaWYgKGJlVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICAgIGJlID0gKEJ1c2luZXNzRW50aXR5KWJlVmVjdG9yLmdldCgwKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYmUgPSBudWxsOwotICAgICAgaWYgKGJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsYmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGlzVXBkYXRlXyA9IGZhbHNlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAgIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgVmVjdG9yIGRpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgICAgIFZlY3RvciBuYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgICAgVmVjdG9yIGlkTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgICAgIFZlY3RvciBjYXRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICAgICAKLSAgICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBpZiAoZGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gKERpc2NvdmVyeVVSTClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBkaXNjb3ZlcnlVUkxWZWN0b3IuYWRkRWxlbWVudChkaXNjb3ZlcnlVUkwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAgIAotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpbmFtZUxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgTmFtZSBuYW1lID0gKE5hbWUpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudChuYW1lKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbnVsbDsKLSAgICAgIGlmIChkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KGRlc2NyaXB0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbnVsbDsKLSAgICAgIGlmIChpZExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8aWRMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpaWRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBudWxsOwotICAgICAgaWYgKGNhdExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxjYXRMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkaXNjb3ZlcnlVUkxWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgICAgYmUuc2V0RGlzY292ZXJ5VVJMcyhuZXcgRGlzY292ZXJ5VVJMcyhkaXNjb3ZlcnlVUkxWZWN0b3IpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYmUuc2V0RGlzY292ZXJ5VVJMcyhudWxsKTsKLSAgICAgIGJlLnNldE5hbWVWZWN0b3IobmFtZVZlY3Rvcik7Ci0gICAgICBiZS5zZXREZXNjcmlwdGlvblZlY3RvcihkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgICBiZS5zZXRJZGVudGlmaWVyQmFnKGlkQmFnKTsKLSAgICAgIGJlLnNldENhdGVnb3J5QmFnKGNhdEJhZyk7Ci0gICAgICAKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVmVjdG9yIGJlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYmVWZWN0b3IuYWRkKGJlKTsKLSAgICAgIGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3h5LnNhdmVfYnVzaW5lc3MocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBiZVZlY3RvcikuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICByZWZyZXNoTm9kZShiZSk7Ci0gICAgICBpZiAoaXNVcGRhdGVfKSAgICAgIAotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NfVVBEQVRFRCIsYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgZWxzZQotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NfUFVCTElTSEVEIixiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpewotICAgIAkJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCX0JCi0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVJlZ2lzdHJ5QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNmYxNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQ2F0ZWdvcnlNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVSZWdpc3RyeUFjdGlvbiBleHRlbmRzIFVwZGF0ZUFjdGlvbgotewotICBwdWJsaWMgVXBkYXRlUmVnaXN0cnlBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixmYWxzZSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBuYW1lTW9kaWZpZWRTdGF0ZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEKTsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FKTsKLSAgICBTdHJpbmdbXSB1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZKTsKLSAgICBTdHJpbmdbXSB1c2VyRGVmaW5lZENhdGVnb3J5RGF0YSA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9GSUxFTkFNRSk7Ci0gICAgCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgCi0gICAgaWYgKG5hbWVNb2RpZmllZFN0YXRlICE9IG51bGwgJiYgbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihuYW1lTW9kaWZpZWRTdGF0ZSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICBTdHJpbmcgbmV3TmFtZTsKLSAgICAgIGlmIChpc01vZGlmaWVkKQotICAgICAgICBuZXdOYW1lID0gbmFtZTsKLSAgICAgIGVsc2UKLSAgICAgICAgbmV3TmFtZSA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSxuZXdOYW1lKTsKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTkFNRSIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FKTsKLSAgICAKLSAgICBpZiAodXNlckRlZmluZWRDYXRlZ29yeVRNb2RlbEtleXMgIT0gbnVsbCAmJiB1c2VyRGVmaW5lZENhdGVnb3J5RGF0YSAhPSBudWxsKQotICAgIHsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgZm9yIChpbnQgaT0wO2k8dXNlckRlZmluZWRDYXRlZ29yeVRNb2RlbEtleXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgQ2F0ZWdvcnlNb2RlbCB1c2VyRGVmaW5lZENhdGVnb3J5ID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3J5KHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzW2ldKTsKLS8vICAgICAgVE9ETzogTW92ZSBVRERJUHJlZmVyZW5jZUNvbnRleHQgZG93biB0byBvcmcuZWNsaXBzZS53c3Qud3MgCi0vLyAgICAgIFVERElQcmVmZXJlbmNlQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFVERElQcmVmZXJlbmNlQ29udGV4dCgpOyAgICAgICAgCi0vLyAgICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcnkuc2V0Q29sdW1uRGVsaW1pdGVyKGNvbnRleHQuZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKSk7Ci0vLyAgICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcnkuc2V0U3RyaW5nRGVsaW1pdGVyKGNvbnRleHQuZ2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoKSk7Ci0gICAgICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcnkuc2V0Q29sdW1uRGVsaW1pdGVyKCIjIik7Ci0gICAgICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcnkuc2V0U3RyaW5nRGVsaW1pdGVyKCJcIiIpOwotICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWUgPSB1c2VyRGVmaW5lZENhdGVnb3J5LmdldERpc3BsYXlOYW1lKCk7Ci0gICAgICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3J5RGF0YVtpXSA9PSBudWxsIHx8IHVzZXJEZWZpbmVkQ2F0ZWdvcnlEYXRhW2ldLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEUiLGRpc3BsYXlOYW1lKSk7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5VU0VSX0RFRklORURfQ0FURUdPUklFUyx1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5c1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYnl0ZSByYyA9IHVzZXJEZWZpbmVkQ2F0ZWdvcnkubG9hZERhdGEobmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIodXNlckRlZmluZWRDYXRlZ29yeURhdGFbaV0pKSk7Ci0gICAgICAgICAgc3dpdGNoIChyYykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIENhdGVnb3J5TW9kZWwuT1BFUkFUSU9OX1NVQ0NFU1NGVUw6Ci0gICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9MT0FERUQiLGRpc3BsYXlOYW1lKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDYXRlZ29yeU1vZGVsLkVSUk9SX0ZJTEU6Ci0gICAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgIFBhcnNlRXhjZXB0aW9uIHBlID0gKFBhcnNlRXhjZXB0aW9uKXVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0RXJyb3JFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgU3RyaW5nW10gYXJnczEgPSB7U3RyaW5nLnZhbHVlT2YocGUuZ2V0RXJyb3JPZmZzZXQoKSksZGlzcGxheU5hbWUscGUuZ2V0TWVzc2FnZSgpLHVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0Q2F0ZWdvcnlLZXkoKX07Ci0gICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFX0ZPUk1BVCIsYXJnczEpKTsKLSAgICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5VU0VSX0RFRklORURfQ0FURUdPUklFUyx1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5c1tpXSk7Ci0gICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIENhdGVnb3J5TW9kZWwuRVJST1JfQ0FURUdPUllfS0VZOgotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgU3RyaW5nW10gYXJnczIgPSB7ZGlzcGxheU5hbWUsdXNlckRlZmluZWRDYXRlZ29yeS5nZXRFcnJvckV4Y2VwdGlvbigpLmdldE1lc3NhZ2UoKSx1c2VyRGVmaW5lZENhdGVnb3J5LmdldENhdGVnb3J5S2V5KCl9OwotICAgICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRV9LRVkiLGFyZ3MyKSk7Ci0gICAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMsdXNlckRlZmluZWRDYXRlZ29yeVRNb2RlbEtleXNbaV0pOyAgICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZnJlc2hGcm9tUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgcmVnRWxlbWVudC5zZXROYW1lKG5hbWUpOwotICAgIHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCkuc2V0TmFtZShuYW1lKTsKLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUkVHSVNUUllfVVBEQVRFRCIsbmFtZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYWJmYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdQdWJsaXNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVTZXJ2aWNlQWN0aW9uIGV4dGVuZHMgVXBkYXRlQWN0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1VwZGF0ZV87Ci0gIHB1YmxpYyBVcGRhdGVTZXJ2aWNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsdHJ1ZSk7Ci0gICAgaXNVcGRhdGVfID0gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB1dWlkQnVzaW5lc3NLZXkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgIFN0cmluZyB1dWlkU2VydmljZUtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKTsKLSAgICBTdHJpbmcgd3NkbFVSTE1vZGlmaWVkU3RhdGUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuV1NETF9VUkxfTU9ESUZJRUQpOwotICAgIFN0cmluZyB3c2RsVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgIFN0cmluZ1tdIG5hbWVNb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBuYW1lVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OQU1FX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gbmFtZUxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvblZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fVklFV0lEKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbkxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OKTsKLSAgICBTdHJpbmdbXSBjYXRNb2RpZmllZFN0YXRlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gY2F0Vmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgaWYgKHV1aWRCdXNpbmVzc0tleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksdXVpZEJ1c2luZXNzS2V5KTsKLQotICAgIGlmICh1dWlkU2VydmljZUtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSx1dWlkU2VydmljZUtleSk7Ci0KLSAgICBpZiAod3NkbFVSTE1vZGlmaWVkU3RhdGUgIT0gbnVsbCAmJiB3c2RsVVJMICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZih3c2RsVVJMTW9kaWZpZWRTdGF0ZSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICBpZiAoaXNNb2RpZmllZCkKLSAgICAgICAgd3NkbFVSTExpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHdzZGxVUkwpOwotICAgICAgZWxzZQotICAgICAgICB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMLHdzZGxVUkxMaXN0RWxlbWVudCk7Ci0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTCh3c2RsVVJMKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMIikpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotCi0gICAgSGFzaHRhYmxlIGxhbmd1YWdlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBpZiAobmFtZU1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgbmFtZVZpZXdJZHMgIT0gbnVsbCAmJiBuYW1lTGFuZ3VhZ2VzICE9IG51bGwgJiYgbmFtZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkTmFtZUxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICBWZWN0b3IgbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgLy8gVURESSdzIHNhdmUgQVBJIChBcHBlbmRpeCBDIG9mIHRoZSBVRERJIFYyIFByb2dyYW1tZXJzIEFQSSBTcGVjaWZpY2F0aW9uKSByZXF1aXJlcyB0aGUgZm9sbG93aW5nOgotICAgICAgLy8gMSkgT25seSB0aGUgZmlyc3Qgcm93IGNhbiBoYXZlIGEgYmxhbmsgbGFuZ3VhZ2UuCi0gICAgICAvLyAyKSBPbmx5IDEgbmFtZSBwZXIgbGFuZ3VhZ2UuCi0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIik7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgTmFtZSB1ZGRpNGpOYW1lOwotICAgICAgICBpZiAobmFtZUxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldLG5hbWVMYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KG5hbWVMYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChuYW1lTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWVzW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IG5hbWVWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWVWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKG5hbWVNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKG5hbWVWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQodWRkaTRqTmFtZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkTmFtZUxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChuYW1lVmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTkFNRVMiKSk7Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvblZpZXdJZHMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgICAgVmVjdG9yIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpOwotICAgICAgbGFuZ3VhZ2VIYXNoLmNsZWFyKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbnMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERlc2NyaXB0aW9uIHVkZGk0akRlc2NyaXB0aW9uOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSxkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKGRlc2NyaXB0aW9uc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZGVzY3JpcHRpb25WaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGRlc2NyaXB0aW9uVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLQotICAgICAgICBpZiAoZGVzY3JpcHRpb25WaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KHVkZGk0akRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkRGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoZGVzY3JpcHRpb25WaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLQotICAgIGlmIChjYXRNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGNhdFZpZXdJZHMgIT0gbnVsbCAmJiBjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZENhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgICAgIFZlY3RvciBuZXdDYXRMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGludCBjYXRWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGNhdFZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoY2F0TW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoY2F0Vmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQoa3IpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGNhdFZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0NhdExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyxuZXdDYXRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiByZWZyZXNoQnVzaW5lc3NGcm9tUmVnaXN0cnkoKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXVpZEJ1c2luZXNzS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFZlY3RvciBiZVZlY3RvciA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbCh1dWlkQnVzaW5lc3NLZXkpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBiZTsKLSAgICAgIGlmIChiZVZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICBiZSA9IChCdXNpbmVzc0VudGl0eSliZVZlY3Rvci5nZXQoMCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGJlID0gbnVsbDsKLSAgICAgIGlmIChiZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfQlVTSU5FU1MsYmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEZyb21SZWdpc3RyeSgpCi0gIHsKLSAgICBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXVpZFNlcnZpY2VLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpOwotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBTZXJ2aWNlRGV0YWlsIHNlcnZpY2VEZXRhaWwgPSBwcm94eS5nZXRfc2VydmljZURldGFpbCh1dWlkU2VydmljZUtleSk7Ci0gICAgICBWZWN0b3IgYnVzaW5lc3NTZXJ2aWNlVmVjdG9yID0gc2VydmljZURldGFpbC5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgIGlmIChidXNpbmVzc1NlcnZpY2VWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxidXNpbmVzc1NlcnZpY2VWZWN0b3IuZWxlbWVudEF0KDApKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBpc1VwZGF0ZV8gPSBmYWxzZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBSZWdQdWJsaXNoVG9vbCBzZXR1cFJlZ1B1Ymxpc2hUb29sKCkKLSAgewotICAgIC8vIFByZXBhcmUgZm9yIHJlLXB1Ymxpc2hpbmcgYSBub3ctc3RhbGUgc2VydmljZSB3aG9zZSBidXNpbmVzcyBoYXMgYWxzbyBiZWVuIGVsaW1pbmF0ZWQuCi0gICAgUmVnUHVibGlzaFRvb2wgcmVnUHVibGlzaFRvb2wgPSByZWdOb2RlXy5nZXRSZWdQdWJsaXNoVG9vbCgpOwotICAgIHJlZ1B1Ymxpc2hUb29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLCIiKTsKLSAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgcmVnUHVibGlzaFRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7Ci0gICAgCi0gICAgcmVnUHVibGlzaFRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMLHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpKTsKLSAgICAKLSAgICBWZWN0b3IgbmFtZUxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICBWZWN0b3IgZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgIFZlY3RvciBjYXRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgICAKLSAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTxuYW1lTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCluYW1lTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgTmFtZSBuYW1lID0gKE5hbWUpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQobmFtZSk7Ci0gICAgfQotICAgIAotICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG51bGw7Ci0gICAgaWYgKGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KGRlc2NyaXB0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVnUHVibGlzaFRvb2wucmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgCi0gICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbnVsbDsKLSAgICBpZiAoY2F0TGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWNhdExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZWdQdWJsaXNoVG9vbC5yZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICAgCi0gICAgcmVnUHVibGlzaFRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLG5hbWVWZWN0b3IpOwotICAgIGlmIChkZXNjcmlwdGlvblZlY3RvciAhPSBudWxsKQotICAgICAgcmVnUHVibGlzaFRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgaWYgKGNhdEJhZyAhPSBudWxsKQotICAgICAgcmVnUHVibGlzaFRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMsY2F0QmFnKTsKLSAgICByZXR1cm4gcmVnUHVibGlzaFRvb2w7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7ICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9CVVNJTkVTUyk7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgU3RyaW5nIHV1aWRTZXJ2aWNlS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKTsKLSAgICAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICAgIFZlY3RvciBuYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIFZlY3RvciBjYXRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLQotICAgICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgIAotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpbmFtZUxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgTmFtZSBuYW1lID0gKE5hbWUpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudChuYW1lKTsKLSAgICAgIH0KLQotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbnVsbDsKLSAgICAgIGlmIChkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KGRlc2NyaXB0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBudWxsOwotICAgICAgaWYgKGNhdExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxjYXRMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAJcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotCi0gICAgICAvLyBOb3RlOiBUaGUgSlNQIHdpbGwgcHJldmVudCB0aGlzIHJvdXRpbmUgZnJvbSBleGVjdXRpbmcgaWYgYmUgaXMgbnVsbC4KLSAgICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgIAotICAgICAgLy8gUHVibGlzaC91cGRhdGUgdGhlIHNlcnZpY2UgaW50ZXJmYWNlcyBmaXJzdC4KLSAgICAgIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uIHJlZ1B1Ymxpc2hTSUFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICBpbnQgY3VycmVudE5vZGVJZCA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldE5vZGVJZCgpOwotICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSByZWdOb2RlXy5nZXROb2RlTWFuYWdlcigpOwotCi0gICAgICBIYXNodGFibGUgdE1vZGVsc1RhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgVE1vZGVsW10gdE1vZGVscyA9IG51bGw7Ci0gICAgICBpZiAodWRkaTRqSGVscGVyLmlzTW9ub2xpdGhpY1dTREwoZGVmKSkKLSAgICAgIHsKLSAgICAgIAl0TW9kZWxzID0gbmV3IFRNb2RlbFsxXTsKLSAgICAgIAl0TW9kZWxzWzBdID0gdWRkaTRqSGVscGVyLm5ld1RNb2RlbCh3c2RsVVJMLCBkZWYpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgCVN0cmluZ1tdIGltcG9ydHMgPSB1ZGRpNGpIZWxwZXIuZ2V0SW1wb3J0cyhkZWYsIHdzZGxVUkwpOwotICAgICAgCXRNb2RlbHMgPSBuZXcgVE1vZGVsW2ltcG9ydHMubGVuZ3RoXTsKLSAgICAgIAlmb3IgKGludCBpID0gMDsgaSA8IHRNb2RlbHMubGVuZ3RoOyBpKyspCi0gICAgICAJICB0TW9kZWxzW2ldID0gdWRkaTRqSGVscGVyLm5ld1RNb2RlbChpbXBvcnRzW2ldKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKHRNb2RlbHMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgIAlmb3IgKGludCBpPTA7aTx0TW9kZWxzLmxlbmd0aDtpKyspCi0gICAgICAJewotICAgICAgCSAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUodWRkaTRqSGVscGVyLmdldFdTREwodE1vZGVsc1tpXSksIHRNb2RlbHNbaV0pOwotICAgICAgCSAgaWYgKGlucHV0c1ZhbGlkKQotICAgICAgCSAgewotICAgICAgCSAgICByZWdQdWJsaXNoU0lBY3Rpb24ucnVuKCk7Ci0gICAgICAJICAgIE9iamVjdCBzYXZlZFRNb2RlbCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCk7Ci0gICAgICAJICAgIGlmIChzYXZlZFRNb2RlbCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgCSAgICAgIHRNb2RlbHNUYWJsZS5wdXQoKChUTW9kZWwpc2F2ZWRUTW9kZWwpLmdldE5hbWVTdHJpbmcoKSwgc2F2ZWRUTW9kZWwpOwotICAgICAgCSAgICB9Ci0gICAgICAgICAgICAvLyBSZXNlbGVjdCB0aGUgY3VycmVudCBub2RlLgotICAgICAgCSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChjdXJyZW50Tm9kZUlkKTsKLSAgICAgICAgICB9Ci0gICAgICAJfQotICAgICAgfQotICAgICAgCi0gICAgICBCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZSA9IHVkZGk0akhlbHBlci5uZXdCdXNpbmVzc1NlcnZpY2Uod3NkbFVSTCwgZGVmLCB0TW9kZWxzVGFibGUpOwotICAgICAgaWYgKGlzVXBkYXRlXykKLSAgICAgICAgYnVzU2VydmljZS5zZXRTZXJ2aWNlS2V5KHV1aWRTZXJ2aWNlS2V5KTsKLSAgICAgIGJ1c1NlcnZpY2Uuc2V0QnVzaW5lc3NLZXkoYmUuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgICBidXNTZXJ2aWNlLnNldE5hbWVWZWN0b3IobmFtZVZlY3Rvcik7Ci0gICAgICBidXNTZXJ2aWNlLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIGJ1c1NlcnZpY2Uuc2V0Q2F0ZWdvcnlCYWcoY2F0QmFnKTsKLSAgICAgIHJlZ0VsZW1lbnQuaGFuZGxlUHJlSW52b2NhdGlvbihidXNTZXJ2aWNlKTsgICAgICAKLSAgICAgIFZlY3RvciBic1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJzVmVjdG9yLmFkZChidXNTZXJ2aWNlKTsKLSAgICAgIGJ1c1NlcnZpY2UgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3h5LnNhdmVfc2VydmljZShyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJzVmVjdG9yKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICByZWZyZXNoTm9kZShidXNTZXJ2aWNlKTsKLSAgICAgIGlmIChpc1VwZGF0ZV8pCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1VQREFURUQiLGJ1c1NlcnZpY2UuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgZWxzZQotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9QVUJMSVNIRUQiLGJ1c1NlcnZpY2UuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJXU0RMRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpCi0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NDU2YjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuSWRlbnRpZmllckJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uIGV4dGVuZHMgVXBkYXRlQWN0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1VwZGF0ZV87Ci0gIHB1YmxpYyBVcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsdHJ1ZSk7Ci0gICAgaXNVcGRhdGVfID0gdHJ1ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkpOwotICAgIFN0cmluZyB3c2RsVVJMTW9kaWZpZWRTdGF0ZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5XU0RMX1VSTF9NT0RJRklFRCk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgIFN0cmluZyBuYW1lTW9kaWZpZWRTdGF0ZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEKTsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvblZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fVklFV0lEKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbkxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OKTsKLSAgICBTdHJpbmdbXSBpZE1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGlkVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5JREVOVElGSUVSX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdE1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBjYXRWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotICAgIAotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIAotICAgIGlmICh1dWlkS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSx1dWlkS2V5KTsKLSAgICAKLSAgICBpZiAod3NkbFVSTE1vZGlmaWVkU3RhdGUgIT0gbnVsbCAmJiB3c2RsVVJMICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7ICAgICAgCi0gICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2Yod3NkbFVSTE1vZGlmaWVkU3RhdGUpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgaWYgKGlzTW9kaWZpZWQpCi0gICAgICAgIHdzZGxVUkxMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh3c2RsVVJMKTsKLSAgICAgIGVsc2UKLSAgICAgICAgd3NkbFVSTCA9IChTdHJpbmcpd3NkbFVSTExpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsd3NkbFVSTExpc3RFbGVtZW50KTsKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHdzZGxVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMIikpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICAKLSAgICBpZiAobmFtZU1vZGlmaWVkU3RhdGUgIT0gbnVsbCAmJiBuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgbmFtZUxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihuYW1lTW9kaWZpZWRTdGF0ZSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICBpZiAoaXNNb2RpZmllZCkKLSAgICAgICAgbmFtZUxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KG5hbWUpOwotICAgICAgZWxzZQotICAgICAgICBuYW1lID0gKFN0cmluZyluYW1lTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWVMaXN0RWxlbWVudCk7Ci0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX05BTUUiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICAKLSAgICBIYXNodGFibGUgbGFuZ3VhZ2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGlmIChkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgZGVzY3JpcHRpb25WaWV3SWRzICE9IG51bGwgJiYgZGVzY3JpcHRpb25MYW5ndWFnZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkRGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhkZXNjcmlwdGlvbnNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW50IGRlc2NyaXB0aW9uVmlld0lkID0gSW50ZWdlci5wYXJzZUludChkZXNjcmlwdGlvblZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudCh1ZGRpNGpEZXNjcmlwdGlvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZERlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGRlc2NyaXB0aW9uVmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvcik7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIAotICAgIGlmIChpZE1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgaWRWaWV3SWRzICE9IG51bGwgJiYgaWRUeXBlcyAhPSBudWxsICYmIGlkS2V5TmFtZXMgIT0gbnVsbCAmJiBpZEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGRJZExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgICAgVmVjdG9yIG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxpZEtleU5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGlkS2V5TmFtZXNbaV0saWRLZXlWYWx1ZXNbaV0saWRUeXBlc1tpXSk7Ci0gICAgICAgIGludCBpZFZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoaWRWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGlkTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaWRWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdJZExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KGtyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdJZExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkSWRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaWRWaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdJZExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTLG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgICAgIAotICAgIGlmIChjYXRNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGNhdFZpZXdJZHMgIT0gbnVsbCAmJiBjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZENhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0gICAgICBWZWN0b3IgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBpbnQgY2F0Vmlld0lkID0gSW50ZWdlci5wYXJzZUludChjYXRWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGNhdE1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGNhdFZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KGtyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdDYXRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZENhdExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChjYXRWaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdDYXRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTLG5ld0NhdExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsgICAgICAgICAgICAKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiByZWZyZXNoRnJvbVJlZ2lzdHJ5KCkKLSAgewotICAgIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHV1aWRLZXkpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgIGlmICh0TW9kZWxWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCx0TW9kZWxWZWN0b3IuZWxlbWVudEF0KDApKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBpc1VwZGF0ZV8gPSBmYWxzZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7ICAgICAgCi0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICAgIExpc3RFbGVtZW50IG5hbWVMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotICAgICAgVmVjdG9yIGlkTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgICAgIFZlY3RvciBjYXRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0gICAgICAKLSAgICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZyluYW1lTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG51bGw7Ci0gICAgICBpZiAoZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudChkZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IG51bGw7Ci0gICAgICBpZiAoaWRMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZEJhZyA9IG5ldyBJZGVudGlmaWVyQmFnKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGlkTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWlkTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGlkQmFnLmFkZChrcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbnVsbDsKLSAgICAgIGlmIChjYXRMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0TGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWNhdExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBUTW9kZWwgdE1vZGVsID0gKG5ldyBVZGRpNGpIZWxwZXIoKSkubmV3VE1vZGVsKHdzZGxVUkwpOwotICAgICAgaWYgKGlzVXBkYXRlXykKLSAgICAgICAgdE1vZGVsLnNldFRNb2RlbEtleSh1dWlkS2V5KTsKLSAgICAgIHRNb2RlbC5zZXROYW1lKG5hbWUpOyAgICAgIAotICAgICAgdE1vZGVsLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIHRNb2RlbC5zZXRJZGVudGlmaWVyQmFnKGlkQmFnKTsKLSAgICAgIHRNb2RlbC5zZXRDYXRlZ29yeUJhZyhjYXRCYWcpOwotICAgICAgCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB0TW9kZWxWZWN0b3IuYWRkKHRNb2RlbCk7Ci0gICAgICB0TW9kZWwgPSAoVE1vZGVsKXByb3h5LnNhdmVfdE1vZGVsKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgdE1vZGVsVmVjdG9yKS5nZXRUTW9kZWxWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICByZWZyZXNoTm9kZSh0TW9kZWwpOwotICAgICAgaWYgKGlzVXBkYXRlXykgICAgICAKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1VQREFURUQiLHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1BVQkxJU0hFRCIsdE1vZGVsLmdldE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJXU0RMRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpewotICAgIAkJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCX0KLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElBY3Rpb25JbnB1dHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESUFjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDdiMmIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESUFjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBVRERJQWN0aW9uSW5wdXRzCi17Ci0gIC8vIE9wZW5SZWdpc3RyeUFjdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUdJU1RSWV9OQU1FID0gInJlZ2lzdHJ5TmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOUVVJUllfVVJMID0gImlucXVpcnlVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIX1VSTCA9ICJwdWJsaXNoVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVHSVNUUkFUSU9OX1VSTCA9ICJyZWdpc3RyYXRpb25VUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUyA9ICJjaGVja1VzZXJEZWZpbmVkQ2F0ZWdvcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVERElfVVNFUk5BTUUgPSAidWRkaVVzZXJuYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVURESV9QQVNTV09SRCA9ICJ1ZGRpUGFzc3dvcmQiOwotCi0gIC8vIEZpeGVkIGFuZCB1c2VyLWRlZmluZWQgY2F0ZWdvcmllcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SSUVTX0RJUkVDVE9SWSA9ICJjYXRlZ29yaWVzRGlyZWN0b3J5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUllfVE1PREVMX0tFWSA9ICJjYXRlZ29yeVRNb2RlbEtleSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZX0ZJTEVOQU1FID0gImNhdGVnb3J5RmlsZU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VSX0RFRklORURfQ0FURUdPUklFUyA9ICJ1c2VyRGVmaW5lZENhdGVnb3JpZXMiOwotCi0gIC8vIERpc2NvdmVyeSBVUkwgdXNlIHR5cGUKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTQ09WRVJZX1VSTF9UWVBFID0gImJ1c2luZXNzRW50aXR5IjsKLQotICAvLyBSZXN1bHRzIChOT0RFSUQpCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSA9ICJub2RlSWRfU2VydmljZUludGVyZmFjZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PREVJRF9TRVJWSUNFID0gIm5vZGVJZF9TZXJ2aWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERUlEX0JVU0lORVNTID0gIm5vZGVJZF9CdXNpbmVzcyI7Ci0KLSAgLy8gUmVnRmluZC4uQWN0aW9ucy9SZWdQdWJsaXNoLi5BY3Rpb25zCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFID0gIm92ZXJyaWRlQWRkUXVlcnlOb2RlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfTkFNRSA9ICJxdWVyeU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JVEVNID0gInF1ZXJ5SXRlbSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX0lURU1fUVVFUklFUyA9IC0xOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9JVEVNX0JVU0lORVNTRVMgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9JVEVNX1NFUlZJQ0VTID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMgPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9TVFlMRV9TSU1QTEUgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9TVFlMRV9BRFZBTkNFRCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX1NUWUxFX1VVSUQgPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCA9ICJhZHZhbmNlZE93bmVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwgPSAiYWR2YW5jZWRQdWJsaXNoVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEID0gImFkdmFuY2VkVXNlcklkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQgPSAiYWR2YW5jZWRQYXNzd29yZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UgPSAiYWR2YW5jZWROYW1lTGFuZ3VhZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FID0gImFkdmFuY2VkTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSA9ICJhZHZhbmNlZElkZW50aWZpZXJUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSA9ICJhZHZhbmNlZElkZW50aWZpZXJLZXlOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUgPSAiYWR2YW5jZWRJZGVudGlmaWVyS2V5VmFsdWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFID0gImFkdmFuY2VkQ2F0ZWdvcnlUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUgPSAiYWR2YW5jZWRDYXRlZ29yeUtleU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUgPSAiYWR2YW5jZWRDYXRlZ29yeUtleVZhbHVlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMID0gImFkdmFuY2VkRGlzY292ZXJ5VVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiA9ICJhZHZhbmNlZEZpbmRRdWFsaWZpZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX05BTUUgPSAiYWR2YW5jZWRTb3J0QnlOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU09SVF9CWV9EQVRFID0gImFkdmFuY2VkU29ydEJ5RGF0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUID0gImFkdmFuY2VkTWF4U2VhcmNoU2V0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfTUFYX1NFQVJDSF9TRVQgPSAxMDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTID0gImFkdmFuY2VkTWF4UmVzdWx0cyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX01BWF9SRVNVTFRTID0gMTA7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfU1RZTEVfQlVTSU5FU1NFUyA9ICJxdWVyeVN0eWxlQnVzaW5lc3NlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FID0gInNpbXBsZUJ1c2luZXNzTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX09XTkVEID0gImFkdmFuY2VkQnVzaW5lc3NPd25lZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTID0gImFkdmFuY2VkQnVzaW5lc3NOYW1lcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTID0gImFkdmFuY2VkQnVzaW5lc3NJZGVudGlmaWVycyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMgPSAiYWR2YW5jZWRCdXNpbmVzc0NhdGVnb3JpZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTID0gImFkdmFuY2VkQnVzaW5lc3NEaXNjb3ZlcnlVUkxzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTID0gImFkdmFuY2VkQnVzaW5lc3NTZXJ2aWNlSW50ZXJmYWNlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZID0gImFkdmFuY2VkQnVzaW5lc3NTZXJ2aWNlSW50ZXJmYWNlc0NvcHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19UTU9ERUxCQUcgPSAiYWR2YW5jZWRCdXNpbmVzc1RNb2RlbEJhZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0ZJTkRRVUFMSUZJRVJTID0gImFkdmFuY2VkQnVzaW5lc3NGaW5kUXVhbGlmaWVycyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VUID0gImFkdmFuY2VkQnVzaW5lc3NNYXhTZWFyY2hTZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfUkVTVUxUUyA9ICJhZHZhbmNlZEJ1c2luZXNzTWF4UmVzdWx0cyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfU1RZTEVfU0VSVklDRVMgPSAicXVlcnlTdHlsZVNlcnZpY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSA9ICJzaW1wbGVTZXJ2aWNlTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfT1dORUQgPSAiYWR2YW5jZWRTZXJ2aWNlT3duZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTID0gImFkdmFuY2VkU2VydmljZUJ1c2luZXNzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZID0gImFkdmFuY2VkU2VydmljZUJ1c2luZXNzQ29weSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUiA9ICJhZHZhbmNlZFNlcnZpY2VTZXJ2aWNlUHJvdmlkZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTID0gImFkdmFuY2VkU2VydmljZU5hbWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTID0gImFkdmFuY2VkU2VydmljZUNhdGVnb3JpZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyA9ICJhZHZhbmNlZFNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkgPSAiYWR2YW5jZWRTZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUwgPSAiYWR2YW5jZWRTZXJ2aWNlVE1vZGVsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUxCQUcgPSAiYWR2YW5jZWRTZXJ2aWNlVE1vZGVsQmFnIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9GSU5EUVVBTElGSUVSUyA9ICJhZHZhbmNlZFNlcnZpY2VGaW5kUXVhbGlmaWVycyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1NFQVJDSF9TRVQgPSAiYWR2YW5jZWRTZXJ2aWNlTWF4U2VhcmNoU2V0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUyA9ICJhZHZhbmNlZFNlcnZpY2VNYXhSZXN1bHRzIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMgPSAicXVlcnlTdHlsZVNlcnZpY2VJbnRlcmZhY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUgPSAic2ltcGxlU2VydmljZUludGVyZmFjZU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSA9ICJhZHZhbmNlZFVzZVNlcnZpY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZVNlcnZpY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFX0NPUFkgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlU2VydmljZUNvcHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9CVVNJTkVTU19TRVJWSUNFID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZUJ1c2luZXNzU2VydmljZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX09XTkVEID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZU93bmVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlSWRlbnRpZmllcnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZUNhdGVnb3JpZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9GSU5EUVVBTElGSUVSUyA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VGaW5kUXVhbGlmaWVycyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VUID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZU1heFNlYXJjaFNldCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZU1heFJlc3VsdHMiOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSA9ICJhZHZhbmNlZFJlZ2lzdHJ5TmFtZSI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfVVVJRF9LRVkgPSAidXVpZEtleSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZID0gInV1aWRCdXNpbmVzc0tleSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkgPSAidXVpZFNlcnZpY2VLZXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSA9ICJ1dWlkU2VydmljZUludGVyZmFjZUtleSI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9PVVRQVVRfU0FWRURfVE1PREVMID0gInNhdmVkVE1vZGVsIjsKLQotICAvLyBTdWIgUXVlcmllczoKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCUVVFUklFU19QUk9QRVJUSUVTID0gInN1YlF1ZXJpZXNQcm9wZXJ0aWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCUVVFUllfS0VZID0gInN1YlF1ZXJ5S2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCA9ICJuZXdTdWJRdWVyeUluaXRpYXRlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5FV19TVUJRVUVSWV9RVUVSWV9JVEVNID0gIm5ld1N1YlF1ZXJ5UXVlcnlJdGVtIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNURURfTk9ERUlEUyA9ICJzZWxlY3RlZE5vZGVJZHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSWV9MSVNUX0tFWSA9ICJzdWJRdWVyeUxpc3RLZXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSWV9MSVNUX0lURU1JRCA9ICJzdWJRdWVyeUxpc3RJdGVtSWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSE9XX1JFU1VMVFNfVEFSR0VUID0gInNob3dSZXN1bHRzVGFyZ2V0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCUVVFUllfR0VUID0gInN1YlF1ZXJ5R2V0IjsKLQotICAvLyBSZWdQdWJsaXNoLi5BY3Rpb25zIChzb21lIGNvbnN0YW50cyBmcm9tIHRoZSBSZWdGaW5kLi4uQWN0aW9ucyB3aWxsIGJlIHJldXNlZC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OID0gInNpbXBsZUJ1c2luZXNzRGVzY3JpcHRpb24iOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFID0gImFkdmFuY2VkRGVzY3JpcHRpb25MYW5ndWFnZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OID0gImFkdmFuY2VkRGVzY3JpcHRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMgPSAiYWR2YW5jZWRCdXNpbmVzc0Rlc2NyaXB0aW9ucyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfV1NETF9VUkwgPSAid3NkbFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCA9ICJzaW1wbGVTZXJ2aWNlSW50ZXJmYWNlV1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTiA9ICJzaW1wbGVTZXJ2aWNlSW50ZXJmYWNlRGVzY3JpcHRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZURlc2NyaXB0aW9ucyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MgPSAic2ltcGxlU2VydmljZUJ1c2luZXNzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSA9ICJzaW1wbGVTZXJ2aWNlQnVzaW5lc3NDb3B5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUiA9ICJzaW1wbGVTZXJ2aWNlU2VydmljZVByb3ZpZGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwgPSAic2ltcGxlU2VydmljZVdTRExVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTiA9ICJzaW1wbGVTZXJ2aWNlRGVzY3JpcHRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMID0gImFkdmFuY2VkU2VydmljZVdTRExVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyA9ICJhZHZhbmNlZFNlcnZpY2VEZXNjcmlwdGlvbnMiOwotCi0gIC8vIFdTREwgQnJvd3NlcgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUID0gInByb2plY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX1RZUEUgPSAid3NkbFR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXU0RMX1RZUEVfU0VSVklDRSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwgPSAid2ViUHJvamVjdFdTRExVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9GQVZPUklURV9XU0RMX1VSTCA9ICJmYXZvcml0ZVdTRExVUkwiOwotCi0gIC8vIERldGFpbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFURVNUX09CSkVDVCA9ICJsYXRlc3RPYmplY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNDT1ZFUllVUkxfTU9ESUZJRUQgPSAiZGlzY292ZXJ5VVJMTW9kaWZpZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNDT1ZFUllVUkxfVklFV0lEID0gImRpc2NvdmVyeVVSTFZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfTU9ESUZJRUQgPSAibmFtZU1vZGlmaWVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9WSUVXSUQgPSAiYnVzaW5lc3NWaWV3SWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERVNDUklQVElPTl9NT0RJRklFRCA9ICJkZXNjcmlwdGlvbk1vZGlmaWVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ1JJUFRJT05fVklFV0lEID0gImRlc2NyaXB0aW9uVmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9NT0RJRklFRCA9ICJpZGVudGlmaWVyTW9kaWZpZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX1ZJRVdJRCA9ICJpZGVudGlmaWVyVmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUllfTU9ESUZJRUQgPSAiY2F0ZWdvcnlNb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZX1ZJRVdJRCA9ICJjYXRlZ29yeVZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfVVJMX01PRElGSUVEID0gIndzZGxVUkxNb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hfQUNUSU9OID0gInB1Ymxpc2hBY3Rpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMQVRFU1RfQlVTSU5FU1MgPSAibGF0ZXN0QnVzaW5lc3MiOwotCi0gIC8vIFJlZnJlc2ggYWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRlJFU0hfTk9ERSA9ICJyZWZyZXNoTm9kZSI7Ci0KLSAgLy8gTWFuYWdlIFB1Ymxpc2hlckFzc2VydGlvbnMKLSAgLy8gIlRvIiBtZWFucyBmcm9tIGFub3RoZXIgYnVzaW5lc3MgdG8gbXkgb3duaW5nIGJ1c2luZXNzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJUkVDVElPTl9UTyA9IDA7Ci0gIC8vICJGcm9tIiBtZWFucyBmcm9tIG15IG93bmluZyBidXNpbmVzcyB0byBhbm90aGVyIGJ1c2luZXNzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJUkVDVElPTl9GUk9NID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lEID0gInB1Ymxpc2hlckFzc2VydGlvbnNWaWV3SWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQgPSAicHVibGlzaGVyQXNzZXJ0aW9uc1NlbGVjdGVkQnVzSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19ESVJFQ1RJT04gPSAicHVibGlzaGVyQXNzZXJ0aW9uc0RpcmVjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyA9ICJxdWVyeUlucHV0QWRkUHVibGlzaGVyQXNzZXJ0aW9ucyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU19DT1BZID0gInF1ZXJ5SW5wdXRBZGRQdWJsaXNoZXJBc3NlcnRpb25zQ29weSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TID0gInF1ZXJ5SW5wdXRFeGlzdGluZ1B1Ymxpc2hlckFzc2VydGlvbnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFID0gInB1Ymxpc2hlckFzc2VydGlvbnNUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRV9QQVJFTlRfQ0hJTEQgPSAicGFyZW50LWNoaWxkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRV9QRUVSX1RPX1BFRVIgPSAicGVlci1wZWVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRV9JREVOVElUWSA9ICJpZGVudGl0eSI7Ci0KLSAgLy8gTWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFUyA9ICJyZWZlcmVuY2VkU2VydmljZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TRVJWSUNFUyA9ICJzZXJ2aWNlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTiA9ICJtYW5hZ2VkUmVmZXJlbmNlZFNlcnZpY2VzT3BlcmF0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OX0FERCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTl9SRU1PVkUgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZFUkVOQ0VEX1NFUlZJQ0VfU0VMRUNUX1NUQVRFID0gInJlZmVyZW5jZWRTZXJ2aWNlU2VsZWN0U3RhdGUiOwotICAKLSAgLy8gUmVzaXplVURESUZyYW1lQWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCA9ICJmcmFtZXNldENvbHNQZXJzcGVjdGl2ZUNvbnRlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSID0gImZyYW1lc2V0Um93c0FjdGlvbnNDb250YWluZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJRnJhbWVOYW1lcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJRnJhbWVOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2QwYjRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESUZyYW1lTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFVERElGcmFtZU5hbWVzCi17Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5BVklHQVRPUl9DT05UQUlORVIgPSAidWRkaV9uYXZpZ2F0b3JfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX1RPT0xCQVIgPSAidWRkaV9uYXZpZ2F0b3JfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5BVklHQVRPUl9DT05URU5UID0gInVkZGlfbmF2aWdhdG9yX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBBQ1RJT05TX0NPTlRBSU5FUiA9ICJ1ZGRpX2FjdGlvbnNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19DT05UQUlORVIgPSAidWRkaV9wcm9wZXJ0aWVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfVE9PTEJBUiA9ICJ1ZGRpX3Byb3BlcnRpZXNfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQ09OVEVOVCA9ICJ1ZGRpX3Byb3BlcnRpZXNfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNUQVRVU19DT05UQUlORVIgPSAidWRkaV9zdGF0dXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX1RPT0xCQVIgPSAidWRkaV9zdGF0dXNfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNUQVRVU19DT05URU5UID0gInVkZGlfc3RhdHVzX2NvbnRlbnQiOwotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBVEVHT1JJRVNfV09SS0FSRUEgPSAiY2F0ZWdvcmllc193b3JrYXJlYSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBVEVHT1JJRVNfVE9PTEJBUiA9ICJjYXRlZ29yaWVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBDQVRFR09SSUVTX0NPTlRFTlQgPSAiY2F0ZWdvcmllc19jb250ZW50IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESU1vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElNb2RlbENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTNjOWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESU1vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBVRERJTW9kZWxDb25zdGFudHMKLXsKLSAgLy8gUmVnaXN0cmllcyB1bmRlciBVRERJTWFpbi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1JFR0lTVFJJRVMgPSAicmVnaXN0cmllcyI7Ci0KLSAgLy8gRXhlY3V0ZWQgUXVlcmllcyBmb2xkZXIgdW5kZXIgYSByZWdpc3RyeS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1FVRVJJRVNfUEFSRU5UID0gInF1ZXJpZXNQYXJlbnQiOwotCi0gIC8vIFB1Ymxpc2hlZCBCdXNpbmVzc2VzIGZvbGRlciB1bmRlciBhIHJlZ2lzdHJ5LgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUFVCTElTSEVEX0JVU0lORVNTRVNfUEFSRU5UID0gInB1Ymxpc2hlZEJ1c2luZXNzZXNQYXJlbnQiOwotCi0gIC8vIFB1Ymxpc2hlZCBTZXJ2aWNlcyBmb2xkZXIgdW5kZXIgYSByZWdpc3RyeS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1BVQkxJU0hFRF9TRVJWSUNFU19QQVJFTlQgPSAicHVibGlzaGVkU2VydmljZXNQYXJlbnQiOwotCi0gIC8vIFB1Ymxpc2hlZCBTZXJ2aWNlIGludGVyZmFjZXMgZm9sZGVyIHVuZGVyIGEgcmVnaXN0cnkuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9QVUJMSVNIRURfU0VSVklDRV9JTlRFUkZBQ0VTX1BBUkVOVCA9ICJwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc1BhcmVudCI7Ci0KLSAgLy8gUXVlcmllcyB1bmRlciB0aGUgUXVlcmllcyBmb2xkZXIuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9RVUVSSUVTID0gInF1ZXJpZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTklUSUFMX1JFU1VMVFMgPSAiaW5pdGlhbFJlc3VsdHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9UWVBFID0gInF1ZXJ5VHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlFVRVJZX1RSQU5TRkVSX1RBUkdFVCA9ICJzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0IjsKLQotICAvLyBPYmplY3RzIHVuZGVyIGEgUXVlcnkgbm9kZS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1FVRVJZX1JFU1VMVFMgPSAicXVlcnlSZXN1bHRzIjsKLQotICAvLyBDYXRlZ29yaWVzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9TVUJDQVRFR09SSUVTID0gInN1YkNhdGVnb3JpZXMiOwotCi0gIC8vIFB1Ymxpc2hlZCBpdGVtcyBpbnNpZGUgdGhlIFB1Ymxpc2hlZCBpdGVtcyBmb2xkZXIuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9QVUJMSVNIRURfSVRFTVMgPSAicHVibGlzaGVkSXRlbXMiOwotCi0gIC8vIEJ1c2luZXNzZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVNfQlVTSU5FU1NfT1dORUQgPSAiaXNCdXNpbmVzc093bmVkIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQWJzdHJhY3RVRERJRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9BYnN0cmFjdFVERElFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYjVkMDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9BYnN0cmFjdFVERElFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVRERJRWxlbWVudCBleHRlbmRzIFRyZWVFbGVtZW50Ci17Ci0gIHB1YmxpYyBBYnN0cmFjdFVERElFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUcmVlRWxlbWVudCBnZXRQYXJlbnRFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBnZXRQYXJlbnRFbGVtZW50KHRoaXMpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRyZWVFbGVtZW50IGdldFBhcmVudEVsZW1lbnQoVHJlZUVsZW1lbnQgY2hpbGQpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gY2hpbGQuZ2V0RWxlbWVudHMoTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBpZiAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHJldHVybiAoVHJlZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFJlZ2lzdHJ5RWxlbWVudCBnZXRSZWdpc3RyeUVsZW1lbnQoKQotICB7Ci0gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWdpc3RyeUVsZW1lbnQpCi0gICAgICByZXR1cm4gKFJlZ2lzdHJ5RWxlbWVudCl0aGlzOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSB0aGlzOwotICAgICAgVHJlZUVsZW1lbnQgcGFyZW50RWxlbWVudCA9IGdldFBhcmVudEVsZW1lbnQoY2hpbGRFbGVtZW50KTsKLSAgICAgIHdoaWxlIChwYXJlbnRFbGVtZW50ICE9IG51bGwgJiYgcGFyZW50RWxlbWVudCAhPSBjaGlsZEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgUmVnaXN0cnlFbGVtZW50KQotICAgICAgICAgIHJldHVybiAoUmVnaXN0cnlFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0gICAgICAgIGNoaWxkRWxlbWVudCA9IHBhcmVudEVsZW1lbnQ7Ci0gICAgICAgIHBhcmVudEVsZW1lbnQgPSBnZXRQYXJlbnRFbGVtZW50KGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQnVzaW5lc3NFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0J1c2luZXNzRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWU2MTNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQnVzaW5lc3NFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci0KLXB1YmxpYyBjbGFzcyBCdXNpbmVzc0VsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHByaXZhdGUgQnVzaW5lc3NFbnRpdHkgYmVfOwotICBwcml2YXRlIExpc3RNYW5hZ2VyIHB1Ymxpc2hlckFzc2VydGlvbnNfOwotICAKLSAgcHVibGljIEJ1c2luZXNzRWxlbWVudChCdXNpbmVzc0VudGl0eSBiZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCksbW9kZWwpOwotICAgIGJlXyA9IGJlOwotICAgIHNldEtleShiZV8uZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgcHVibGlzaGVyQXNzZXJ0aW9uc18gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzRW50aXR5IGdldEJ1c2luZXNzRW50aXR5KCkKLSAgewotICAgIHJldHVybiBiZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEJ1c2luZXNzRW50aXR5KEJ1c2luZXNzRW50aXR5IGJlKQotICB7Ci0gICAgYmVfID0gYmU7Ci0gICAgc2V0S2V5KGJlXy5nZXRCdXNpbmVzc0tleSgpKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRQdWJsaXNoZXJBc3NlcnRpb25zKCkKLSAgewotICAgIHJldHVybiBwdWJsaXNoZXJBc3NlcnRpb25zXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hlckFzc2VydGlvbnMoTGlzdE1hbmFnZXIgbGlzdE1hbmFnZXIpCi0gIHsKLSAgICBwdWJsaXNoZXJBc3NlcnRpb25zXyA9IGxpc3RNYW5hZ2VyOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0NhdGVnb3J5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9DYXRlZ29yeUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3ZjNhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0NhdGVnb3J5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgQ2F0ZWdvcnlFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwcml2YXRlIEtleWVkUmVmZXJlbmNlIGNhdGVnb3J5XzsKLQotICBwdWJsaWMgQ2F0ZWdvcnlFbGVtZW50KFN0cmluZyBuYW1lLEtleWVkUmVmZXJlbmNlIGNhdGVnb3J5LE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgY2F0ZWdvcnlfID0gY2F0ZWdvcnk7Ci0gICAgc2F2ZUNhdGVnb3J5UHJvcGVydGllcygpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNhdmVDYXRlZ29yeVByb3BlcnRpZXMoKQotICB7Ci0gICAgaWYgKGNhdGVnb3J5XyAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBrZXlOYW1lID0gY2F0ZWdvcnlfLmdldEtleU5hbWUoKTsKLSAgICAgIGlmIChrZXlOYW1lICE9IG51bGwpCi0gICAgICAgIHNldE5hbWUoa2V5TmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIEtleWVkUmVmZXJlbmNlIGdldENhdGVnb3J5KCkKLSAgewotICAgIHJldHVybiBjYXRlZ29yeV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5hbWVGb3JUcmVlKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBuYW1lRm9yVHJlZSA9IG5ldyBTdHJpbmdCdWZmZXIoIlsiKTsKLSAgICBuYW1lRm9yVHJlZS5hcHBlbmQoY2F0ZWdvcnlfLmdldEtleVZhbHVlKCkpLmFwcGVuZCgiXSAiKS5hcHBlbmQoY2F0ZWdvcnlfLmdldEtleU5hbWUoKSk7Ci0gICAgcmV0dXJuIG5hbWVGb3JUcmVlLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCB1cGRhdGVDYXRlZ29yeShTdHJpbmcga2V5TmFtZSxTdHJpbmcga2V5VmFsdWUsU3RyaW5nIHRNb2RlbEtleSkKLSAgewotICAgIGNhdGVnb3J5Xy5zZXRLZXlOYW1lKGtleU5hbWUpOwotICAgIGNhdGVnb3J5Xy5zZXRLZXlWYWx1ZShrZXlWYWx1ZSk7Ci0gICAgY2F0ZWdvcnlfLnNldFRNb2RlbEtleSh0TW9kZWxLZXkpOwotICAgIHNhdmVDYXRlZ29yeVByb3BlcnRpZXMoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9DYXRlZ29yeU1vZGVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0NhdGVnb3J5TW9kZWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI5NjY1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0NhdGVnb3J5TW9kZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBDYXRlZ29yeU1vZGVsIGV4dGVuZHMgQmFzaWNNb2RlbAotewotICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdERhdGFGaWxlXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgY2F0ZWdvcnlFbGVtZW50c187Ci0gIHByaXZhdGUgU3RyaW5nIGNvbHVtbkRlbGltaXRlcl87Ci0gIHByaXZhdGUgU3RyaW5nIHN0cmluZ0RlbGltaXRlcl87Ci0gIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5S2V5XzsKLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrZWRfOwotICBwcml2YXRlIFN0cmluZyBkaXNwbGF5TmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIHRNb2RlbEtleV87Ci0gIHByaXZhdGUgVGhyb3dhYmxlIGVycm9yRXhjZXB0aW9uXzsKLSAgCi0gIC8vIFJldHVybiBjb2RlcyBmb3IgbG9hZGluZyBhbmQgc2F2aW5nIGNhdGVnb3J5IGRhdGEuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBPUEVSQVRJT05fU1VDQ0VTU0ZVTCA9IDB4MDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBFUlJPUl9GSUxFID0gMHgwMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEVSUk9SX1NFQ1VSSVRZID0gMHgwMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEVSUk9SX0VOQ09ESU5HID0gMHgwMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEVSUk9SX0lPID0gMHgwNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEVSUk9SX0NBVEVHT1JZX0tFWSA9IDB4MDU7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBkZWZhdWx0Q29sdW1uRGVsaW1pdGVyXyA9ICIjIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGVmYXVsdFN0cmluZ0RlbGltaXRlcl8gPSAiXCIiOwotICAKLSAgcHVibGljIENhdGVnb3J5TW9kZWwoKQotICB7Ci0gICAgc3VwZXIoImNhdGVnb3JpZXMiKTsKLSAgICBhcHBsaWNhdGlvbl8gPSBudWxsOwotCWRlZmF1bHREYXRhRmlsZV8gPSBudWxsOwotICAgIGNvbHVtbkRlbGltaXRlcl8gPSBkZWZhdWx0Q29sdW1uRGVsaW1pdGVyXzsKLSAgICBzdHJpbmdEZWxpbWl0ZXJfID0gZGVmYXVsdFN0cmluZ0RlbGltaXRlcl87Ci0gICAgY2F0ZWdvcnlFbGVtZW50c18gPSBudWxsOwotICAgIGNhdGVnb3J5S2V5XyA9IG51bGw7Ci0gICAgY2hlY2tlZF8gPSB0cnVlOwotICAgIGRpc3BsYXlOYW1lXyA9IG51bGw7Ci0gICAgdE1vZGVsS2V5XyA9IG51bGw7Ci0gICAgZXJyb3JFeGNlcHRpb25fID0gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENhdGVnb3J5TW9kZWxzIGxvYWQgdGhlaXIgZGF0YSBmcm9tIHRoZSBmaWxlIG5hbWVkIHZpYSB0aGUKLSAgICoge0BsaW5rICNzZXREZWZhdWx0RGF0YUZpbGUoU3RyaW5nKX0gbWV0aG9kLiBUaGUgZGF0YSBmaWxlCi0gICAqIG5hbWUgaXMgaW50ZXJwcmV0dGVkIGFzIGVpdGhlciBhIHBoeXNpY2FsIHBhdGhuYW1lIG9yIGEKLSAgICogY29udGV4dC1yb290IHJlbGF0aXZlIHBhdGhuYW1lIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQotICAgKiBzZXJ2bGV0IGNvbnRleHQgb3IgImFwcGxpY2F0aW9uIiBpcyBudWxsIChkZWZhdWx0KSBvciBub3QuCi0gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBUaGUgYXBwbGljYXRpb24gY29udGV4dCwgbnVsbCBieSBkZWZhdWx0LgotICAgKiBWYWx1ZSBjYW4gYmUgdGhlIFNlcnZsZXRDb250ZXh0IG9mIHRoZSBXU0V4cGxvcmVyIG9yIG51bGwuCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTZXJ2bGV0Q29udGV4dChTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotCWFwcGxpY2F0aW9uXyA9IGFwcGxpY2F0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXREZWZhdWx0RGF0YUZpbGUoU3RyaW5nIGRlZmF1bHREYXRhRmlsZSkKLSAgewotICAgIGRlZmF1bHREYXRhRmlsZV8gPSBkZWZhdWx0RGF0YUZpbGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDYXRlZ29yeUtleShTdHJpbmcgY2F0ZWdvcnlLZXkpCi0gIHsKLSAgICBjYXRlZ29yeUtleV8gPSBjYXRlZ29yeUtleTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRDYXRlZ29yeUtleSgpCi0gIHsKLSAgICByZXR1cm4gY2F0ZWdvcnlLZXlfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDb2x1bW5EZWxpbWl0ZXIoU3RyaW5nIGNvbHVtbkRlbGltaXRlcikKLSAgewotICAgIGNvbHVtbkRlbGltaXRlcl8gPSBjb2x1bW5EZWxpbWl0ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q29sdW1uRGVsaW1pdGVyKCkKLSAgewotICAgIHJldHVybiBjb2x1bW5EZWxpbWl0ZXJfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdHJpbmdEZWxpbWl0ZXIoU3RyaW5nIHN0cmluZ0RlbGltaXRlcikKLSAgewotICAgIHN0cmluZ0RlbGltaXRlcl8gPSBzdHJpbmdEZWxpbWl0ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RyaW5nRGVsaW1pdGVyKCkKLSAgewotICAgIHJldHVybiBzdHJpbmdEZWxpbWl0ZXJfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBlbmFibGVDaGVja2VkKGJvb2xlYW4gaXNDaGVja2VkKQotICB7Ci0gICAgY2hlY2tlZF8gPSBpc0NoZWNrZWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzQ2hlY2tlZCgpCi0gIHsKLSAgICByZXR1cm4gY2hlY2tlZF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldERpc3BsYXlOYW1lKFN0cmluZyBkaXNwbGF5TmFtZSkKLSAgewotICAgIGRpc3BsYXlOYW1lXyA9IGRpc3BsYXlOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkKLSAgewotICAgIHJldHVybiBkaXNwbGF5TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFRNb2RlbEtleShTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgdE1vZGVsS2V5XyA9IHRNb2RlbEtleTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUTW9kZWxLZXkoKQotICB7Ci0gICAgcmV0dXJuIHRNb2RlbEtleV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzRGF0YUxvYWRlZCgpCi0gIHsKLSAgICByZXR1cm4gKGNhdGVnb3J5RWxlbWVudHNfICE9IG51bGwpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgVGhyb3dhYmxlIGdldEVycm9yRXhjZXB0aW9uKCkKLSAgewotICAgIHJldHVybiBlcnJvckV4Y2VwdGlvbl87Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc0VuY2xvc2VkSW5RdW90ZXMoU3RyaW5nIHN0cmluZykKLSAgewotICAgIHJldHVybiBzdHJpbmcuc3RhcnRzV2l0aCgiXCIiKSAmJiBzdHJpbmcuZW5kc1dpdGgoIlwiIik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBsb2FkRnJvbVRheG9ub215KFRheG9ub215IHRheG9ub215KQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSB0YXhvbm9teS5nZXROYW1lKCk7Ci0gICAgQ2F0ZWdvcnlFbGVtZW50IHJvb3QgPSBuZXcgQ2F0ZWdvcnlFbGVtZW50KG5hbWUsbnVsbCx0aGlzKTsKLSAgICBzZXRSb290RWxlbWVudChyb290KTsKLSAgICBjYXRlZ29yeUVsZW1lbnRzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gdGF4b25vbXkuZ2V0Q2F0ZWdvcnkoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGFkZENhdGVnb3J5KHJvb3QsIChDYXRlZ29yeSlpdC5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRDYXRlZ29yeShDYXRlZ29yeUVsZW1lbnQgcGFyZW50LCBDYXRlZ29yeSBjYXRlZ29yeSkKLSAgewotICAgIFN0cmluZyBrZXlOYW1lID0gY2F0ZWdvcnkuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBrZXlWYWx1ZSA9IGNhdGVnb3J5LmdldENvZGUoKTsKLSAgICBDYXRlZ29yeUVsZW1lbnQgY2hpbGQgPSBuZXcgQ2F0ZWdvcnlFbGVtZW50KGtleU5hbWUsbmV3IEtleWVkUmVmZXJlbmNlKGtleU5hbWUsa2V5VmFsdWUsdE1vZGVsS2V5XyksdGhpcyk7Ci0gICAgcGFyZW50LmNvbm5lY3QoY2hpbGQsVURESU1vZGVsQ29uc3RhbnRzLlJFTF9TVUJDQVRFR09SSUVTLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgY2F0ZWdvcnlFbGVtZW50c18ucHV0KGtleVZhbHVlLCBjaGlsZCk7ICAgCi0gICAgZm9yIChJdGVyYXRvciBpdCA9IGNhdGVnb3J5LmdldENhdGVnb3J5KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBhZGRDYXRlZ29yeShjaGlsZCwgKENhdGVnb3J5KWl0Lm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJ5dGUgbG9hZEZyb21EZWZhdWx0RGF0YUZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGRlZmF1bHREYXRhRmlsZV8gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigpOwotCSAgQnVmZmVyZWRSZWFkZXIgYnIgPSBudWxsOwotCSAgaWYgKGFwcGxpY2F0aW9uXyA9PSBudWxsKQotCQliciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IEZpbGVJbnB1dFN0cmVhbShkZWZhdWx0RGF0YUZpbGVfKSxIVE1MVXRpbHMuVVRGOF9FTkNPRElORykpOwotCSAgZWxzZQotCSAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoYXBwbGljYXRpb25fLmdldFJlc291cmNlQXNTdHJlYW0oZGVmYXVsdERhdGFGaWxlXyksSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpKTsKLSAgICAgIHJldHVybiBsb2FkRGF0YShicik7Ci0gICAgfQotICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX0ZJTEU7Ci0gICAgfQotICAgIGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm4gRVJST1JfU0VDVVJJVFk7Ci0gICAgfQotICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybiBFUlJPUl9FTkNPRElORzsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBieXRlIGxvYWRGcm9tRGVsaW1pdGVyRmlsZSgpCi0gIHsKLSAgICAvLyBHZXQgdGhlIGFzc29jaWF0ZWQgLnByb3BlcnRpZXMgZmlsZSBhbmQgc2V0IHRoZSBkZWxpbWl0ZXJzLiBUaGUgZGVmYXVsdERhdGFGaWxlXyBpcyBzZXQgdG8gdGhlIGRlbGltaXRlciBmaWxlIGluIHRoaXMgY2FzZS4KLSAgICAvLyBUaGUgcHJvcGVydGllcyBmaWxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcga2V5czoKLSAgICAvLyB3c2FkLmRhdGFGaWxlIC0gbG9jYXRpb24gb2YgdGhlIGNhdGVnb3J5IGRhdGEgZmlsZS4KLSAgICAvLyB3c2FkLmNoZWNrZWQgLSB3aGV0aGVyIG9yIG5vdCB0aGUgY2F0ZWdvcnkgaXMgY2hlY2tlZC4KLSAgICAvLyB3c2FkLm5hbWUgLSB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjYXRlZ29yeS4KLSAgICAvLyBjb2x1bW4uZGVsaW1pdGVyIC0gdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgdXNlZCBmb3Igc2VwYXJhdGluZyBjb2x1bW5zLgotICAgIC8vIHN0cmluZy5kZWxpbWl0ZXIgLSB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB1c2VkIHRvIGVuY2Fwc3VsYXRlIGRhdGEgc3VjaCB0aGF0IGNvbHVtbiBkZWxpbWl0ZXIgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBkYXRhLgotICAgIHRyeQotICAgIHsKLSAgICAgIFByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBJbnB1dFN0cmVhbSBmaW4gPSBudWxsOwotCSAgaWYgKGFwcGxpY2F0aW9uXyA9PSBudWxsKQotCSAgICBmaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRlZmF1bHREYXRhRmlsZV8pOwotCSAgZWxzZQotCQlmaW4gPSBhcHBsaWNhdGlvbl8uZ2V0UmVzb3VyY2VBc1N0cmVhbShkZWZhdWx0RGF0YUZpbGVfKTsKLSAgICAgIHAubG9hZChmaW4pOwotICAgICAgZmluLmNsb3NlKCk7Ci0gICAgICBjb2x1bW5EZWxpbWl0ZXJfID0gcC5nZXRQcm9wZXJ0eSgiY29sdW1uLmRlbGltaXRlciIpOwotICAgICAgc3RyaW5nRGVsaW1pdGVyXyA9IHAuZ2V0UHJvcGVydHkoInN0cmluZy5kZWxpbWl0ZXIiKTsKLSAgICAgIGRlZmF1bHREYXRhRmlsZV8gPSBwLmdldFByb3BlcnR5KCJ3c2FkLmRhdGFGaWxlIik7Ci0gICAgICByZXR1cm4gbG9hZEZyb21EZWZhdWx0RGF0YUZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm4gRVJST1JfRklMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybiBFUlJPUl9TRUNVUklUWTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybiBFUlJPUl9JTzsKLSAgICB9ICAgICAgICAKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJ5dGUgbG9hZERhdGEoQnVmZmVyZWRSZWFkZXIgYnIpCi0gIHsKLSAgICBlcnJvckV4Y2VwdGlvbl8gPSBudWxsOwotICAgIENhdGVnb3J5RWxlbWVudCByb290RWxlbWVudCA9IG51bGw7Ci0gICAgY2F0ZWdvcnlFbGVtZW50c18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgYnl0ZSByZXR1cm5Db2RlID0gT1BFUkFUSU9OX1NVQ0NFU1NGVUw7Ci0gICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgIGludCBsaW5lTnVtYmVyID0gMDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjaGFyIGNvbHVtbkRlbGltaXRlckNoYXIgPSBjb2x1bW5EZWxpbWl0ZXJfLmNoYXJBdCgwKTsKLSAgICAgIGNoYXIgc3RyaW5nRGVsaW1pdGVyQ2hhciA9IHN0cmluZ0RlbGltaXRlcl8uY2hhckF0KDApOwotICAgICAgVmVjdG9yIHZhbHVlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHdoaWxlKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbGluZU51bWJlcisrOwotICAgICAgICAvLyBJZ25vcmUgYmxhbmsgbGluZXMuCi0gICAgICAgIGlmIChsaW5lLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBpbnQgbGVuZ3RoID0gbGluZS5sZW5ndGgoKTsKLSAgICAgICAgYm9vbGVhbiBpblN0cmluZ0RlbGltaXRlcnMgPSBmYWxzZTsKLSAgICAgICAgdmFsdWVzLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBjdXJyZW50VG9rZW4gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgIGNoYXIgY3VycmVudENoYXIgPSBsaW5lLmNoYXJBdChpbmRleCk7Ci0gICAgICAgICAgaWYgKGluU3RyaW5nRGVsaW1pdGVycykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJbiBxdW90ZSBzbyBpZ25vcmluZyBkZWxpbWl0ZXJzCi0gICAgICAgICAgICBpZiAoY3VycmVudENoYXIgPT0gc3RyaW5nRGVsaW1pdGVyQ2hhcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoIC0gMSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRDaGFyIGNvdWxkIGJlIGEgY2xvc2luZyBzdHJpbmcgZGVsaW1pdGVyIG9yIGVzY2FwZQotICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbG9vayBhaGVhZCB0byBiZSBzdXJlLi4uCi0gICAgICAgICAgICAgICAgY2hhciBmb2xsb3dpbmdDaGFyID0gbGluZS5jaGFyQXQoaW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAoZm9sbG93aW5nQ2hhciA9PSBzdHJpbmdEZWxpbWl0ZXJDaGFyKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGFuIGVzY2FwZWQgcXVvdGUKLSAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbi5hcHBlbmQoc3RyaW5nRGVsaW1pdGVyQ2hhcik7Ci0gICAgICAgICAgICAgICAgICAvLyBqdW1wIGZvcndhcmQgdHdvIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgd2FzIGEgY2xvc2luZyBzdHJpbmcgZGVsaW1pdGVyLi4uanVtcCBmb3J3YXJkIHRvIHRoZSBuZXh0IGRlbGltaXRlcgotICAgICAgICAgICAgICAgICAgaW5TdHJpbmdEZWxpbWl0ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAvL2xvb2sgZm9yIHRoZSBuZXh0IGNvbHVtbiBkZWxpbWl0ZXIgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICBpbnQgbmV4dERlbGltaXRlciA9IGxpbmUuaW5kZXhPZihjb2x1bW5EZWxpbWl0ZXJDaGFyLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICBpZiAobmV4dERlbGltaXRlciA9PSAtMSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgd2VyZSBubyBtb3JlIGRlbGltaXRlcnMgc28gYnJlYWsgb3V0IG9mIHRoZSBsb29wCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYWRkRWxlbWVudChjdXJyZW50VG9rZW4udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vdmFsdWVzW3Rva2VuQ291bnQrK10gPSBjdXJyZW50VG9rZW4udG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuLnNldExlbmd0aCgwKTsKLSAgICAgICAgICAgICAgICAgICAgaW5TdHJpbmdEZWxpbWl0ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbmV4dERlbGltaXRlciArIDE7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGFuZCBpdCdzIGEgY2xvc2luZyBzdHJpbmcgZGVsaW1pdGVyLgotICAgICAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgaW5TdHJpbmdEZWxpbWl0ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY3VycmVudFRva2VuLmFwcGVuZChjdXJyZW50Q2hhcik7Ci0gICAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFyID09IGNvbHVtbkRlbGltaXRlckNoYXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVGhlcmUgd2FzIGEgZGVsaW1pdGVyIG91dHNpZGUgb2YgcXVvdGVzCi0gICAgICAgICAgICB2YWx1ZXMuYWRkRWxlbWVudChjdXJyZW50VG9rZW4udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAvL3ZhbHVlc1t0b2tlbkNvdW50KytdID0gY3VycmVudFRva2VuLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBjdXJyZW50VG9rZW4uc2V0TGVuZ3RoKDApOwotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoY3VycmVudENoYXIgPT0gc3RyaW5nRGVsaW1pdGVyQ2hhcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBBIHF1b3RlIGFwcGVhcmluZyBvdXRzaWRlIG9mIHF1b3RlcyBtdXN0IGJlIGEgb3BlbmluZyBxdW90ZQotICAgICAgICAgICAgaW5TdHJpbmdEZWxpbWl0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBpcyBhIG5vcm1hbCBjaGFyIG91dHNpZGUgb2YgcXVvdGVzCi0gICAgICAgICAgICBjdXJyZW50VG9rZW4uYXBwZW5kKGN1cnJlbnRDaGFyKTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEV4cGVjdCB0b2tlbiBjb3VudCB0byBiZSB2YWx1ZXMubGVuZ3RoIC0gMSBhdCB0aGlzIHBvaW50IGlmIGV2ZXJ5dGhpbmcgaXMgb2sKLSAgICAgICAgaWYgKGluU3RyaW5nRGVsaW1pdGVycykKLSAgICAgICAgewotICAgICAgICAgIGJyLmNsb3NlKCk7Ci0gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKGxpbmUsbGluZU51bWJlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFkZCB0aGUgZmluYWwgdG9rZW4uCi0gICAgICAgIHZhbHVlcy5hZGRFbGVtZW50KGN1cnJlbnRUb2tlbi50b1N0cmluZygpKTsKLQotICAgICAgICAvLyAzIGNvbHVtbnMgZm9ybWF0LiBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZXNlIGFyZToKLSAgICAgICAgLy8gMSkgY2F0ZWdvcnkncyBrZXkgdmFsdWUKLSAgICAgICAgLy8gMikgY2F0ZWdvcnkncyBrZXkgbmFtZQotICAgICAgICAvLyAzKSBjYXRlZ29yeSdzIHBhcmVudCBrZXkgdmFsdWUKLSAgICAgICAgLy8gQ29udmVydCB0byA0IGNvbHVtbnMgZm9ybWF0LgotICAgICAgICBpZiAodmFsdWVzLnNpemUoKSA9PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGNhdGVnb3J5S2V5XyAhPSBudWxsKQotICAgICAgICAgICAgdmFsdWVzLmluc2VydEVsZW1lbnRBdChjYXRlZ29yeUtleV8sIDApOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlcy5pbnNlcnRFbGVtZW50QXQodE1vZGVsS2V5XywgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0IGNvbHVtbnMgZm9ybWF0LiBGcm9tIGxlZnQgdG8gcmlnaHQsIHRoZXNlIGFyZToKLSAgICAgICAgLy8gMSkgdHlwZSBvZiBjYXRlZ29yeSAoY2F0ZWdvcnlLZXkpCi0gICAgICAgIC8vIDIpIGNhdGVnb3J5J3Mga2V5IHZhbHVlCi0gICAgICAgIC8vIDMpIGNhdGVnb3J5J3Mga2V5IG5hbWUKLSAgICAgICAgLy8gNCkgY2F0ZWdvcnkncyBwYXJlbnQga2V5IHZhbHVlCi0gICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09IDQpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgY2F0ZWdvcnlLZXkgPSAoU3RyaW5nKXZhbHVlcy5lbGVtZW50QXQoMCk7Ci0gICAgICAgICAgaWYgKGNhdGVnb3J5S2V5XyA9PSBudWxsKQotICAgICAgICAgICAgY2F0ZWdvcnlLZXlfID0gY2F0ZWdvcnlLZXk7Ci0gICAgICAgICAgZWxzZSBpZiAoIWNhdGVnb3J5S2V5Xy5lcXVhbHMoY2F0ZWdvcnlLZXkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihjYXRlZ29yeUtleSk7Ci0gICAgICAgICAgU3RyaW5nIGtleVZhbHVlID0gKFN0cmluZyl2YWx1ZXMuZWxlbWVudEF0KDEpOwotICAgICAgICAgIFN0cmluZyBrZXlOYW1lID0gKFN0cmluZyl2YWx1ZXMuZWxlbWVudEF0KDIpOwotICAgICAgICAgIFN0cmluZyBwYXJlbnRLZXlWYWx1ZSA9IChTdHJpbmcpdmFsdWVzLmVsZW1lbnRBdCgzKTsKLSAgICAgICAgICBpZiAocm9vdEVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByb290RWxlbWVudCA9IG5ldyBDYXRlZ29yeUVsZW1lbnQoZGlzcGxheU5hbWVfLG51bGwsdGhpcyk7Ci0gICAgICAgICAgICBzZXRSb290RWxlbWVudChyb290RWxlbWVudCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpc0VuY2xvc2VkSW5RdW90ZXMoa2V5TmFtZSkpCi0gICAgICAgICAgICBrZXlOYW1lID0ga2V5TmFtZS5zdWJzdHJpbmcoMSxrZXlOYW1lLmxlbmd0aCgpLTEpOwotICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBDYXRlZ29yeUVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIElmIGl0IGRvZXMsIHJlZnJlc2ggdGhlIENhdGVnb3J5LgotICAgICAgICAgIENhdGVnb3J5RWxlbWVudCBjYXRlZ29yeUVsZW1lbnQgPSAoQ2F0ZWdvcnlFbGVtZW50KWNhdGVnb3J5RWxlbWVudHNfLmdldChrZXlWYWx1ZSk7Ci0gICAgICAgICAgaWYgKGNhdGVnb3J5RWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgY2F0ZWdvcnlFbGVtZW50LnVwZGF0ZUNhdGVnb3J5KGtleU5hbWUsa2V5VmFsdWUsdE1vZGVsS2V5Xyk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2F0ZWdvcnlFbGVtZW50ID0gbmV3IENhdGVnb3J5RWxlbWVudChrZXlOYW1lLG5ldyBLZXllZFJlZmVyZW5jZShrZXlOYW1lLGtleVZhbHVlLHRNb2RlbEtleV8pLHRoaXMpOwotICAgICAgICAgIEVsZW1lbnQgcGFyZW50RWxlbWVudDsKLSAgICAgICAgICBpZiAocGFyZW50S2V5VmFsdWUuZXF1YWxzKGtleVZhbHVlKSkKLSAgICAgICAgICAgIHBhcmVudEVsZW1lbnQgPSByb290RWxlbWVudDsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJlbnRFbGVtZW50ID0gKEVsZW1lbnQpY2F0ZWdvcnlFbGVtZW50c18uZ2V0KHBhcmVudEtleVZhbHVlKTsKLSAgICAgICAgICBpZiAocGFyZW50RWxlbWVudCA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcmVudEVsZW1lbnQgPSBuZXcgQ2F0ZWdvcnlFbGVtZW50KCJ0ZW1wIixuZXcgS2V5ZWRSZWZlcmVuY2UoIiIscGFyZW50S2V5VmFsdWUsdE1vZGVsS2V5XyksdGhpcyk7Ci0gICAgICAgICAgICBjYXRlZ29yeUVsZW1lbnRzXy5wdXQocGFyZW50S2V5VmFsdWUscGFyZW50RWxlbWVudCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuY29ubmVjdChjYXRlZ29yeUVsZW1lbnQsVURESU1vZGVsQ29uc3RhbnRzLlJFTF9TVUJDQVRFR09SSUVTLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgICAgY2F0ZWdvcnlFbGVtZW50c18ucHV0KGtleVZhbHVlLGNhdGVnb3J5RWxlbWVudCk7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGJyLmNsb3NlKCk7Ci0gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKGxpbmUsbGluZU51bWJlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyLmNsb3NlKCk7Ci0gICAgICByZXR1cm4gcmV0dXJuQ29kZTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybkNvZGUgPSBFUlJPUl9JTzsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybkNvZGUgPSBFUlJPUl9GSUxFOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybkNvZGUgPSBFUlJPUl9DQVRFR09SWV9LRVk7Ci0gICAgfQotICAgIGNhdGVnb3J5RWxlbWVudHNfID0gbnVsbDsKLSAgICByZXR1cm4gcmV0dXJuQ29kZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNhdmVEYXRhKFByaW50V3JpdGVyIHB3LENhdGVnb3J5RWxlbWVudCBjYXRlZ29yeUVsZW1lbnQsQ2F0ZWdvcnlFbGVtZW50IHBhcmVudEVsZW1lbnQsYm9vbGVhbiBpc0ZpcnN0KQotICB7Ci0gICAgLy8gRmlsZSBmb3JtYXQ6Ci0gICAgLy8gPGNhdGVnb3J5S2V5PiM8a2V5VmFsdWU+IzxrZXlOYW1lPiM8cGFyZW50S2V5VmFsdWU+Ci0gICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBjYXRlZ29yeUVsZW1lbnQuZ2V0Q2F0ZWdvcnkoKTsKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG5vdCB0aGUgcm9vdCBlbGVtZW50LgotICAgIGlmIChrciAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBrZXlOYW1lID0ga3IuZ2V0S2V5TmFtZSgpOwotICAgICAgU3RyaW5nIGtleVZhbHVlID0ga3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgIFN0cmluZyBwYXJlbnRLZXlWYWx1ZTsKLSAgICAgIGlmIChwYXJlbnRFbGVtZW50ID09IG51bGwpCi0gICAgICAgIHBhcmVudEtleVZhbHVlID0ga2V5VmFsdWU7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHBhcmVudEtyID0gcGFyZW50RWxlbWVudC5nZXRDYXRlZ29yeSgpOwotICAgICAgICAvLyBDaGVjayBpZiB0aGUgcGFyZW50IGlzIHRoZSByb290IGVsZW1lbnQuCi0gICAgICAgIGlmIChwYXJlbnRLciA9PSBudWxsKQotICAgICAgICAgIHBhcmVudEtleVZhbHVlID0ga2V5VmFsdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJlbnRLZXlWYWx1ZSA9IHBhcmVudEtyLmdldEtleVZhbHVlKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWlzRmlyc3QpCi0gICAgICAgIHB3LnByaW50bG4oKTsKLSAgICAgIGVsc2UKLSAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwotICAgICAgcHcucHJpbnQobWFuZ2xlKGNhdGVnb3J5S2V5XykpOwotICAgICAgcHcucHJpbnQoY29sdW1uRGVsaW1pdGVyXyk7Ci0gICAgICBwdy5wcmludChtYW5nbGUoa2V5VmFsdWUpKTsKLSAgICAgIHB3LnByaW50KGNvbHVtbkRlbGltaXRlcl8pOwotICAgICAgcHcucHJpbnQobWFuZ2xlKGtleU5hbWUpKTsKLSAgICAgIHB3LnByaW50KGNvbHVtbkRlbGltaXRlcl8pOwotICAgICAgcHcucHJpbnQobWFuZ2xlKHBhcmVudEtleVZhbHVlKSk7Ci0gICAgfQotICAgIEVudW1lcmF0aW9uIGUgPSBjYXRlZ29yeUVsZW1lbnQuZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9TVUJDQVRFR09SSUVTKTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICBzYXZlRGF0YShwdywoQ2F0ZWdvcnlFbGVtZW50KWUubmV4dEVsZW1lbnQoKSxjYXRlZ29yeUVsZW1lbnQsaXNGaXJzdCk7Ci0gICAgfQotICB9Ci0gIAotICAvLyBNYW5nbGUgYW4gaW5wdXQgc3RyaW5nIGlmIGl0IGNvbnRhaW5zIGRlZmF1bHQgY29sdW1uIGRlbGltaXRlciBjaGFyYWN0ZXJzIGJ5IHN1cnJvdW5kaW5nIGl0IHdpdGggdGhlIHN0cmluZyBkZWxpbWl0ZXJzLgotICBwcml2YXRlIGZpbmFsIFN0cmluZyBtYW5nbGUoU3RyaW5nIGlucHV0KQotICB7Ci0gICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaW5wdXQuaW5kZXhPZihjb2x1bW5EZWxpbWl0ZXJfKSAhPSAtMSkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoaW5wdXQpOwotICAgICAgcy5pbnNlcnQoMCxzdHJpbmdEZWxpbWl0ZXJfKS5hcHBlbmQoc3RyaW5nRGVsaW1pdGVyXyk7Ci0gICAgICByZXR1cm4gcy50b1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBieXRlIHNhdmVEYXRhKFN0cmluZyBmaWxlTmFtZSkKLSAgewotICAgIC8vIFRoZSBmaWxlTmFtZSBzaG91bGQgYWxyZWFkeSBiZSBVUkxFbmNvZGVkLgotICAgIGJ5dGUgcmV0dXJuQ29kZSA9IE9QRVJBVElPTl9TVUNDRVNTRlVMOwotICAgIGVycm9yRXhjZXB0aW9uXyA9IG51bGw7Ci0gICAgaWYgKGlzRGF0YUxvYWRlZCgpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVOYW1lKSxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyksdHJ1ZSk7Ci0gICAgICAgIENhdGVnb3J5RWxlbWVudCByb290RWxlbWVudCA9IChDYXRlZ29yeUVsZW1lbnQpZ2V0Um9vdEVsZW1lbnQoKTsKLSAgICAgICAgc2F2ZURhdGEocHcscm9vdEVsZW1lbnQsbnVsbCx0cnVlKTsKLSAgICAgICAgcHcuZmx1c2goKTsKLSAgICAgICAgcHcuY2xvc2UoKTsKLSAgICAgICAgLy8gU2F2ZSB0aGUgcHJvcGVydGllcyBmaWxlLgotICAgICAgICBQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgICBwLnNldFByb3BlcnR5KCJ3c2FkLmRhdGFGaWxlIixmaWxlTmFtZSk7Ci0gICAgICAgIHAuc2V0UHJvcGVydHkoIndzYWQuY2hlY2tlZCIsU3RyaW5nLnZhbHVlT2YoY2hlY2tlZF8pKTsKLSAgICAgICAgcC5zZXRQcm9wZXJ0eSgid3NhZC5uYW1lIixkaXNwbGF5TmFtZV8pOwotICAgICAgICBwLnNldFByb3BlcnR5KCJjb2x1bW4uZGVsaW1pdGVyIixjb2x1bW5EZWxpbWl0ZXJfKTsKLSAgICAgICAgcC5zZXRQcm9wZXJ0eSgic3RyaW5nLmRlbGltaXRlciIsc3RyaW5nRGVsaW1pdGVyXyk7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBwcm9wZXJ0aWVzRmlsZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKGZpbGVOYW1lLnN1YnN0cmluZygwLGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykpKTsKLSAgICAgICAgcHJvcGVydGllc0ZpbGVOYW1lLmFwcGVuZCgiLnByb3BlcnRpZXMiKTsKLSAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ocHJvcGVydGllc0ZpbGVOYW1lLnRvU3RyaW5nKCkpOwotICAgICAgICBwLnN0b3JlKGZvdXQsbnVsbCk7Ci0gICAgICAgIGZvdXQuY2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0ZJTEU7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX1NFQ1VSSVRZOwotICAgICAgfQotICAgICAgY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0VOQ09ESU5HOwotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICAgIHJldHVybkNvZGUgPSBFUlJPUl9JTzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJldHVybkNvZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGRpc3BsYXlOYW1lXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9QdWJsaXNoZWRJdGVtc0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUHVibGlzaGVkSXRlbXNFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNzVlZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9QdWJsaXNoZWRJdGVtc0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHB1YmxpYyBQdWJsaXNoZWRJdGVtc0VsZW1lbnQoaW50IHR5cGUsU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKE1vZGVsQ29uc3RhbnRzLlJFTF9DSElMRFJFTixVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9JVEVNUyk7Ci0gICAgc2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuUVVFUllfVFlQRSxTdHJpbmcudmFsdWVPZih0eXBlKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQoZ2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuUVVFUllfVFlQRSkpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEl0ZW1zKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9JVEVNUyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzJjODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmFzc2VydGlvbi5QdWJsaXNoZXJBc3NlcnRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCB7Ci0KLSAgLy8gb3duaW5nQnVzaW5lc3NLZXlfIGlzIHRoZSBrZXkgb2YgdGhlIGJ1c2luZXNzIGVsZW1lbnQgdGhhdCBvd25zIHRoaXMKLSAgLy8gcHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudAotICBwcml2YXRlIFN0cmluZyBmcm9tS2V5XzsKLSAgcHJpdmF0ZSBTdHJpbmcgdG9LZXlfOwotICBwcml2YXRlIFN0cmluZyBvd25pbmdCdXNpbmVzc0tleV87Ci0KLSAgLy8gdGhlIG90aGVyIGJ1c2luZXNzIHRoYXQgdGhlIGNvbnRhaW5pbmcgYnVzaW5lc3MgaXMgYXNzZXJ0ZWQgZnJvbSBvciB0bwotICBwcml2YXRlIExpc3RFbGVtZW50IHNwXzsKLSAgcHJpdmF0ZSBpbnQgc3ViUXVlcnlJdGVtSWRfOwotCi0gIC8vIHN0YXR1cyBvZiB0aGlzIHB1Ymxpc2hlckFzc2VydGlvbgotICBwcml2YXRlIFN0cmluZyBzdGF0dXNfOwotICBwcml2YXRlIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmZXJlbmNlXzsKLQotICBwdWJsaWMgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudChTdHJpbmcgZnJvbUtleSwgU3RyaW5nIHRvS2V5LCBTdHJpbmcgb3duaW5nQnVzaW5lc3NLZXksIExpc3RFbGVtZW50IHNwLCBpbnQgc3ViUXVlcnlJdGVtSWQsIFN0cmluZyBzdGF0dXMsIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmKSB7Ci0gICAgZnJvbUtleV8gPSBmcm9tS2V5OwotICAgIHRvS2V5XyA9IHRvS2V5OwotICAgIG93bmluZ0J1c2luZXNzS2V5XyA9IG93bmluZ0J1c2luZXNzS2V5OwotICAgIHNwXyA9IHNwOwotICAgIHN1YlF1ZXJ5SXRlbUlkXyA9IHN1YlF1ZXJ5SXRlbUlkOwotICAgIHN0YXR1c18gPSBzdGF0dXM7Ci0gICAga2V5ZWRSZWZlcmVuY2VfID0ga2V5ZWRSZWY7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGcm9tS2V5KFN0cmluZyBmcm9tS2V5KSB7Ci0gICAgZnJvbUtleV8gPSBmcm9tS2V5OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGcm9tS2V5KCkgewotICAgIHJldHVybiBmcm9tS2V5XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFRvS2V5KFN0cmluZyB0b0tleSkgewotICAgIHRvS2V5XyA9IHRvS2V5OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUb0tleSgpIHsKLSAgICByZXR1cm4gdG9LZXlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0T3duaW5nQnVzaW5lc3NLZXkoU3RyaW5nIGtleSkgewotICAgIG93bmluZ0J1c2luZXNzS2V5XyA9IGtleTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3duaW5nQnVzaW5lc3NLZXkoKSB7Ci0gICAgcmV0dXJuIG93bmluZ0J1c2luZXNzS2V5XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm92aWRlcihMaXN0RWxlbWVudCBzcCkgewotICAgIHNwXyA9IHNwOwotICB9Ci0KLSAgcHVibGljIExpc3RFbGVtZW50IGdldFNlcnZpY2VQcm92aWRlcigpIHsKLSAgICByZXR1cm4gc3BfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U3ViUXVlcnlJdGVtSWQoaW50IGlkKSB7Ci0gICAgc3ViUXVlcnlJdGVtSWRfID0gaWQ7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFN1YlF1ZXJ5SXRlbUlkKCkgewotICAgIHJldHVybiBzdWJRdWVyeUl0ZW1JZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXMoU3RyaW5nIHN0YXR1cykgewotICAgIHN0YXR1c18gPSBzdGF0dXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1cygpIHsKLSAgICByZXR1cm4gc3RhdHVzXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEtleWVkUmVmKEtleWVkUmVmZXJlbmNlIGtleWVkUmVmKSB7Ci0gICAga2V5ZWRSZWZlcmVuY2VfID0ga2V5ZWRSZWY7Ci0gIH0KLQotICBwdWJsaWMgS2V5ZWRSZWZlcmVuY2UgZ2V0S2V5ZWRSZWYoKSB7Ci0gICAgcmV0dXJuIGtleWVkUmVmZXJlbmNlXzsKLSAgfQotCi0gIHB1YmxpYyBQdWJsaXNoZXJBc3NlcnRpb24gZ2V0UHVibGlzaGVyQXNzZXJ0aW9uKCkgewotICAgIGlmIChmcm9tS2V5XyA9PSBudWxsIHx8Ci0gICAgICAgIHRvS2V5XyA9PSBudWxsIHx8Ci0gICAgICAgIGtleWVkUmVmZXJlbmNlXyA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBQdWJsaXNoZXJBc3NlcnRpb24gcHViQXNzZXJ0aW9uID0gbmV3IFB1Ymxpc2hlckFzc2VydGlvbihmcm9tS2V5XywgdG9LZXlfLCBrZXllZFJlZmVyZW5jZV8pOwotICAgIHJldHVybiBwdWJBc3NlcnRpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9RdWVyeUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUXVlcnlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NmRlOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9RdWVyeUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBRdWVyeUVsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHByaXZhdGUgZmluYWwgdm9pZCBpbml0UXVlcnlQcm9wZXJ0aWVzKGludCBpdGVtVHlwZSxPYmplY3RbXSByZXN1bHRzKQotICB7Ci0gICAgVmVjdG9yIHJlc3VsdHNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8cmVzdWx0cy5sZW5ndGg7aSsrKQotICAgICAgcmVzdWx0c1ZlY3Rvci5hZGRFbGVtZW50KHJlc3VsdHNbaV0pOwotICAgIHNldFByb3BlcnR5QXNTdHJpbmcoTW9kZWxDb25zdGFudHMuUkVMX0NISUxEUkVOLFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUllfUkVTVUxUUyk7Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuSU5JVElBTF9SRVNVTFRTLHJlc3VsdHNWZWN0b3IpOwotICAgIHNldFByb3BlcnR5QXNTdHJpbmcoVURESU1vZGVsQ29uc3RhbnRzLlFVRVJZX1RZUEUsU3RyaW5nLnZhbHVlT2YoaXRlbVR5cGUpKTsKLSAgfQotICAKLSAgcHVibGljIFF1ZXJ5RWxlbWVudChCdXNpbmVzc0VudGl0eVtdIHNwTGlzdCxTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIGluaXRRdWVyeVByb3BlcnRpZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMsc3BMaXN0KTsKLSAgfQotCi0gIHB1YmxpYyBRdWVyeUVsZW1lbnQoQnVzaW5lc3NTZXJ2aWNlW10gYnNMaXN0LFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgaW5pdFF1ZXJ5UHJvcGVydGllcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMsYnNMaXN0KTsKLSAgfQotCi0gIHB1YmxpYyBRdWVyeUVsZW1lbnQoVE1vZGVsW10gdE1vZGVsTGlzdCxTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIGluaXRRdWVyeVByb3BlcnRpZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyx0TW9kZWxMaXN0KTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0UXVlcnlUeXBlKCkKLSAgewotICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KGdldFByb3BlcnR5QXNTdHJpbmcoVURESU1vZGVsQ29uc3RhbnRzLlFVRVJZX1RZUEUpKTsKLSAgfQotCi0gIHB1YmxpYyBRdWVyeVBhcmVudEVsZW1lbnQgZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoUXVlcnlQYXJlbnRFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9RdWVyeVBhcmVudEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUXVlcnlQYXJlbnRFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNmYzN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9RdWVyeVBhcmVudEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBRdWVyeVBhcmVudEVsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHB1YmxpYyBRdWVyeVBhcmVudEVsZW1lbnQoU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKE1vZGVsQ29uc3RhbnRzLlJFTF9DSElMRFJFTixVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFF1ZXJpZXMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFUyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUmVnaXN0cnlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1JlZ2lzdHJ5RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjA5ZjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUmVnaXN0cnlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICogMjAwNjA5MTIgICAxNDE3OTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzA0MTkgICAxODI4NjQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuTmV0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlJlZ2lzdHJ5U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuVURESVJlZ2lzdHJ5U2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkF1dGhUb2tlbjsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeUVsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBBVVRIX0lORk9fVElNRU9VVCA9IDMwMDAwMDA7Ci0gIHByaXZhdGUgVURESVByb3h5IHByb3h5XzsKLSAgcHJpdmF0ZSBsb25nIGF1dGhUb2tlblRpbWVzdGFtcF87Ci0gIHByaXZhdGUgQXV0aFRva2VuIGF1dGhUb2tlbl87Ci0gIHByaXZhdGUgU3RyaW5nIGlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmRfOwotICBwcml2YXRlIFN0cmluZyBpbnF1aXJ5VVJMXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcHVibGlzaFVSTF87Ci0gIHByaXZhdGUgU3RyaW5nIGNhY2hlZFB1Ymxpc2hVUkxfOwotICBwcml2YXRlIFN0cmluZyByZWdpc3RyYXRpb25VUkxfOwotICBwcml2YXRlIEhhc2h0YWJsZSB1c2VyRGVmaW5lZENhdGVnb3JpZXNfOwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNfOwotICBwcml2YXRlIFN0cmluZyBjYXRlZ29yaWVzRGlyZWN0b3J5XzsKLQotICBwdWJsaWMgUmVnaXN0cnlFbGVtZW50KFVERElQcm94eSBwcm94eSwgU3RyaW5nIGlucXVpcnlVUkwsIFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICBwcm94eV8gPSBwcm94eTsKLSAgICBpbnF1aXJ5VVJMXyA9IGlucXVpcnlVUkw7Ci0gICAgcHVibGlzaFVSTF8gPSBudWxsOwotICAgIGF1dGhUb2tlblRpbWVzdGFtcF8gPSAtMTsKLSAgICBhdXRoVG9rZW5fID0gbnVsbDsKLSAgICBpZF8gPSBudWxsOwotICAgIHBhc3N3b3JkXyA9IG51bGw7Ci0gICAgY2FjaGVkUHVibGlzaFVSTF8gPSBudWxsOwotICAgIHJlZ2lzdHJhdGlvblVSTF8gPSBudWxsOwotICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc18gPSBudWxsOwotICAgIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzXyA9IGZhbHNlOwotICAgIGNhdGVnb3JpZXNEaXJlY3RvcnlfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBVRERJUHJveHkgZ2V0UHJveHkoKQotICB7Ci0gICAgcmV0dXJuIHByb3h5XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmF1bHRzKCkKLSAgewotCSAgCi0JICBhdXRoVG9rZW5UaW1lc3RhbXBfID0gLTE7Ci0JICBhdXRoVG9rZW5fID0gbnVsbDsKLQkgIGNhY2hlZFB1Ymxpc2hVUkxfID0gbnVsbDsgCi0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpCi0gIHsKLSAgICByZXR1cm4gaW5xdWlyeVVSTF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUXVlcnlQYXJlbnRFbGVtZW50IGdldFF1ZXJ5UGFyZW50RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKFF1ZXJ5UGFyZW50RWxlbWVudCkgKGdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFU19QQVJFTlQpLm5leHRFbGVtZW50KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBnZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCkgKGdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0JVU0lORVNTRVNfUEFSRU5UKS5uZXh0RWxlbWVudCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoUHVibGlzaGVkSXRlbXNFbGVtZW50KSAoZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfU0VSVklDRVNfUEFSRU5UKS5uZXh0RWxlbWVudCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoUHVibGlzaGVkSXRlbXNFbGVtZW50KSAoZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfU0VSVklDRV9JTlRFUkZBQ0VTX1BBUkVOVCkubmV4dEVsZW1lbnQoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBwZXJmb3JtTG9naW4oU3RyaW5nIHB1Ymxpc2hVUkwsIFN0cmluZyB1c2VySWQsIFN0cmluZyBwYXNzd29yZCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiwgVURESUV4Y2VwdGlvbiwgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0gIHsKLSAgICBwdWJsaXNoVVJMXyA9IHB1Ymxpc2hVUkw7Ci0gICAgcHJveHlfLnNldFB1Ymxpc2hVUkwoTmV0VXRpbHMuY3JlYXRlVVJMKHB1Ymxpc2hVUkwpKTsKLSAgICBhdXRoVG9rZW5fID0gcHJveHlfLmdldF9hdXRoVG9rZW4odXNlcklkLCBwYXNzd29yZCk7Ci0gICAgYXV0aFRva2VuVGltZXN0YW1wXyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgIGlkXyA9IHVzZXJJZDsKLSAgICBwYXNzd29yZF8gPSBwYXNzd29yZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHBlcmZvcm1Mb2dvdXQoKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uLCBVRERJRXhjZXB0aW9uCi0gIHsKLSAgICBwcm94eV8uZGlzY2FyZF9hdXRoVG9rZW4oYXV0aFRva2VuXy5nZXRBdXRoSW5mb1N0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QXV0aEluZm9TdHJpbmcoKQotICB7Ci0gICAgaWYgKCFpc0xvZ2dlZEluKCkpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBpZiAoKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gYXV0aFRva2VuVGltZXN0YW1wXykgPiBBVVRIX0lORk9fVElNRU9VVCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgYXV0aFRva2VuXyA9IHByb3h5Xy5nZXRfYXV0aFRva2VuKGlkXywgcGFzc3dvcmRfKTsKLSAgICAgICAgYXV0aFRva2VuVGltZXN0YW1wXyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYXV0aFRva2VuXy5nZXRBdXRoSW5mb1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNMb2dnZWRJbigpCi0gIHsKLSAgICByZXR1cm4gYXV0aFRva2VuXyAhPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2FjaGVkUHVibGlzaFVSTChTdHJpbmcgcHVibGlzaFVSTCkKLSAgewotICAgIGNhY2hlZFB1Ymxpc2hVUkxfID0gcHVibGlzaFVSTDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHVibGlzaFVSTCgpCi0gIHsKLSAgICBpZiAoaXNMb2dnZWRJbigpICYmIHB1Ymxpc2hVUkxfICE9IG51bGwpCi0gICAgICByZXR1cm4gcHVibGlzaFVSTF87Ci0gICAgcmV0dXJuIGNhY2hlZFB1Ymxpc2hVUkxfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UmVnaXN0cmF0aW9uVVJMKFN0cmluZyByZWdpc3RyYXRpb25VUkwpCi0gIHsKLSAgICByZWdpc3RyYXRpb25VUkxfID0gcmVnaXN0cmF0aW9uVVJMOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKQotICB7Ci0gICAgcmV0dXJuIHJlZ2lzdHJhdGlvblVSTF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFVzZXJJZCgpCi0gIHsKLSAgICByZXR1cm4gaWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0VXNlcklkKFN0cmluZyB1c2VySWQpCi0gIHsKLSAgICBpZF8gPSB1c2VySWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENyZWQoKQotICB7Ci0gICAgcmV0dXJuIHBhc3N3b3JkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENyZWQoU3RyaW5nIGNyZWQpCi0gIHsKLSAgICBwYXNzd29yZF8gPSBjcmVkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKEhhc2h0YWJsZSB1c2VyRGVmaW5lZENhdGVnb3JpZXMpCi0gIHsKLSAgICB1c2VyRGVmaW5lZENhdGVnb3JpZXNfID0gdXNlckRlZmluZWRDYXRlZ29yaWVzOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEVudW1lcmF0aW9uIGdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpCi0gIHsKLSAgICBpZiAodXNlckRlZmluZWRDYXRlZ29yaWVzXyAhPSBudWxsKQotICAgICAgcmV0dXJuIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc18uZWxlbWVudHMoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBDYXRlZ29yeU1vZGVsIGdldFVzZXJEZWZpbmVkQ2F0ZWdvcnkoU3RyaW5nIHRNb2RlbEtleSkKLSAgewotICAgIHJldHVybiAoQ2F0ZWdvcnlNb2RlbCkgdXNlckRlZmluZWRDYXRlZ29yaWVzXy5nZXQodE1vZGVsS2V5KTsKLSAgfQotCi0gIC8vIFNwZWNpYWwgaGFuZGxlciB0byBiZSBpbnZva2VkIGJlZm9yZSBzZW5kaW5nIGEgbWVzc2FnZSB0byB0aGUgcmVnaXN0cnkuCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGhhbmRsZVByZUludm9jYXRpb24oQnVzaW5lc3NTZXJ2aWNlIGJ1c1NlcnZpY2UpCi0gIHsKLSAgICAvLyBGb3IgWE1ldGhvZHMsIGJ1c2luZXNzIHNlcnZpY2VzIG11c3QgY29udGFpbiBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtOgotICAgIC8vIElNUExFTUVOVEFUSU9OOiBpYm13cwotICAgIGlmIChnZXRJbnF1aXJ5VVJMKCkuZXF1YWxzKCJodHRwOi8vdWRkaS54bWV0aG9kcy5uZXQvaW5xdWlyZSIpKQotICAgIHsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IGJ1c1NlcnZpY2UuZ2V0RGVzY3JpcHRpb25WZWN0b3IoKTsKLSAgICAgIGlmIChkZXNjcmlwdGlvblZlY3RvciA9PSBudWxsKQotICAgICAgICBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJvb2xlYW4gY29udGFpbnNJbXBsZW1lbnRhdGlvbkRlc2NyaXB0aW9uID0gZmFsc2U7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uVmVjdG9yLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbikgZGVzY3JpcHRpb25WZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAoZGVzY3JpcHRpb24uZ2V0VGV4dCgpLnN0YXJ0c1dpdGgoIklNUExFTUVOVEFUSU9OOiAiKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRhaW5zSW1wbGVtZW50YXRpb25EZXNjcmlwdGlvbiA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghY29udGFpbnNJbXBsZW1lbnRhdGlvbkRlc2NyaXB0aW9uKQotICAgICAgewotICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KG5ldyBEZXNjcmlwdGlvbigiSU1QTEVNRU5UQVRJT046IGlibXdzIikpOwotICAgICAgICBidXNTZXJ2aWNlLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcyhib29sZWFuIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzKQotICB7Ci0gICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNfID0gY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXM7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBnZXRDaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpCi0gIHsKLSAgICByZXR1cm4gY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2F0ZWdvcmllc0RpcmVjdG9yeShTdHJpbmcgZGlyZWN0b3J5KQotICB7Ci0gICAgY2F0ZWdvcmllc0RpcmVjdG9yeV8gPSBkaXJlY3Rvcnk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENhdGVnb3JpZXNEaXJlY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIGNhdGVnb3JpZXNEaXJlY3RvcnlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaE1ldGEoKXsKLQkgICAgCi0JICBSZWdpc3RyeVNlcnZpY2UgcmVnU2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCSAgSVJlZ2lzdHJ5TWFuYWdlciByZWdNYW5hZ2VyID0gcmVnU2VydmljZS5nZXREZWZhdWx0UmVnaXN0cnlNYW5hZ2VyKCk7Ci0JICAKLQkgIAotCSAgdHJ5Ci0JICB7Ci0gICAgCSAgcmVnTWFuYWdlci5yZWZyZXNoTWFuYWdlcigpOwotCQkgIFN0cmluZ1tdIHJlZ1VSSXMgPSByZWdNYW5hZ2VyLmdldFJlZ2lzdHJ5VVJJcygpOwotCQkgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVnVVJJcy5sZW5ndGg7IGkrKykKLQkJICB7Ci0JCQkgIFJlZ2lzdHJ5IHJlZyA9IHJlZ01hbmFnZXIubG9hZFJlZ2lzdHJ5KHJlZ1VSSXNbaV0pOwotCQkJICBpZiAocmVnIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5KQotCQkJICB7Ci0JCQkJICBVRERJUmVnaXN0cnkgdWRkaVJlZyA9IChVRERJUmVnaXN0cnkpcmVnOwotCQkJCSAgaWYodWRkaVJlZy5nZXREaXNjb3ZlcnlVUkwoKS5lcXVhbHMoZ2V0SW5xdWlyeVVSTCgpKSl7Ci0JCQkJCSAgCi0JCQkJCSAgCi0JCQkJCSAKLQkJCQkJICBUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKS5nZXRUYXhvbm9teVVSSXModWRkaVJlZykpOwotCQkJCQkgIGlmICh0YXhvbm9taWVzICE9IG51bGwpCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIEhhc2h0YWJsZSB0YXhvbm9teVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotCQkJCSAgICAgICAgICBmb3IgKGludCBqPTA7IGo8dGF4b25vbWllcy5sZW5ndGg7IGorKykKLQkJCQkgICAgICAgICAgewotCQkJCSAgICAgICAgICAgIFRheG9ub215IHRheG9ub215ID0gdGF4b25vbWllc1tqXTsKLQkJCQkgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHRheG9ub215LmdldE5hbWUoKTsKLQkJCQkgICAgICAgICAgICBTdHJpbmcgdG1vZGVsS2V5ID0gdGF4b25vbXkuZ2V0VG1vZGVsS2V5KCk7Ci0JCQkJICAgICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBjYXRNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0JCQkJICAgICAgICAgICAgY2F0TW9kZWwuc2V0RGlzcGxheU5hbWUobmFtZSk7Ci0JCQkJICAgICAgICAgICAgY2F0TW9kZWwuc2V0Q2F0ZWdvcnlLZXkobmFtZSk7Ci0JCQkJICAgICAgICAgICAgY2F0TW9kZWwuc2V0VE1vZGVsS2V5KHRtb2RlbEtleSk7Ci0JCQkJICAgICAgICAgICAgY2F0TW9kZWwubG9hZEZyb21UYXhvbm9teSh0YXhvbm9teSk7Ci0JCQkJICAgICAgICAgICAgdGF4b25vbXlUYWJsZS5wdXQodG1vZGVsS2V5LCBjYXRNb2RlbCk7Ci0JCQkJICAgICAgICAgIH0KLQkJCQkgICAgICAgICAgCi0JCQkJICAgICAgICAgIHNldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcyh0YXhvbm9teVRhYmxlKTsKLQkJCQkgICAgICAgIH0gICAKLQkJCQkgIH0KLQkJICAKLQkJCSAgfQotCSAgCi0JCSAgfQotCSAgfWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotCSAgewotCQkgIC8vIFRPRE86IEJldHRlciBlcnJvciByZXBvcnRpbmcKLQkJICBjZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgIH0gIAotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1NlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1NlcnZpY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMzdjYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9TZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwcml2YXRlIEJ1c2luZXNzU2VydmljZSBic187Ci0gIAotICBwdWJsaWMgU2VydmljZUVsZW1lbnQoQnVzaW5lc3NTZXJ2aWNlIGJzLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIoYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSxtb2RlbCk7Ci0gICAgc2V0S2V5KGJzLmdldFNlcnZpY2VLZXkoKSk7Ci0gICAgYnNfID0gYnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBCdXNpbmVzc1NlcnZpY2UgZ2V0QnVzaW5lc3NTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBic187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUludGVyZmFjZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUludGVyZmFjZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcyZDg4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1NlcnZpY2VJbnRlcmZhY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBUTW9kZWwgdE1vZGVsXzsKLSAgICAKLSAgcHVibGljIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KFRNb2RlbCB0TW9kZWwsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcih0TW9kZWwuZ2V0TmFtZVN0cmluZygpLG1vZGVsKTsKLSAgICB0TW9kZWxfID0gdE1vZGVsOwotICAgIHNldEtleSh0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRNb2RlbCBnZXRUTW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIHRNb2RlbF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvVURESU1haW5FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1VERElNYWluRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzcxMjAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvVURESU1haW5FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVERElNYWluRWxlbWVudCBleHRlbmRzIFRyZWVFbGVtZW50Ci17Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHJlZ2lzdHJ5TmFtZXNfOwotCi0gIHB1YmxpYyBVRERJTWFpbkVsZW1lbnQoU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICByZWdpc3RyeU5hbWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGNvbnRhaW5zUmVnaXN0cnlOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChyZWdpc3RyeU5hbWVzXy5nZXQobmFtZSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRSZWdpc3RyeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZWdpc3RyeU5hbWVzXy5wdXQobmFtZSxCb29sZWFuLlRSVUUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlUmVnaXN0cnlOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmVnaXN0cnlOYW1lc18ucmVtb3ZlKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJSZWdpc3RyeU5hbWVzKCkKLSAgewotICAgIHJlZ2lzdHJ5TmFtZXNfLmNsZWFyKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9BZGRUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9BZGRUb0Zhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1M2E0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQWRkVG9GYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkVG9GYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzUHVibGlzaFNlcnZpY2VUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzUHVibGlzaFNlcnZpY2VUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNzkxMDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c1B1Ymxpc2hTZXJ2aWNlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0RmluZFRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIEJ1c1B1Ymxpc2hTZXJ2aWNlVG9vbCBleHRlbmRzIEZvcm1Ub29sIGltcGxlbWVudHMgTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgcHJpdmF0ZSBSZWdGaW5kVG9vbCByZWdGaW5kVG9vbF87Ci0KLSAgcHVibGljIEJ1c1B1Ymxpc2hTZXJ2aWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsInVkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gICAgcmVnRmluZFRvb2xfID0gbmV3IFJlZ0ZpbmRUb29sKG5ldyBUb29sTWFuYWdlcih0b29sTWFuYWdlci5nZXROb2RlKCkpLCAiIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLCIiKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICBTdHJpbmcgc2ltcGxlU3R5bGVTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0KLSAgICAvLyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04sIiIpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwsIiIpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgIHJlZ0ZpbmRUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGdldEZvcm1Ub29sUHJvcGVydGllcyhPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QpCi0gIHsKLSAgICAvLyBFbXB0eS9Ob24tZXhpc3RlbnQgc3VicXVlcnlrZXkgaW1wbGllcyBwdWJsaXNoIGZvcm0uIEFsbCBlbHNlIGltcGxpZXMgcXVlcnkgZm9ybS4KLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiB0aGlzOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICByZXR1cm4gU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxzdWJRdWVyeUtleSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0ID0gZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IG51bGw7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5T2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMpOwotICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5UHJvcGVydGllcyA9IGdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gICAgICBPYmplY3Qgc3ViUXVlcnlHZXRPYmplY3QgPSBzdWJRdWVyeVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgICAgaWYgKHN1YlF1ZXJ5R2V0T2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gaXNTdWJRdWVyeUdldCA9ICgoQm9vbGVhbilzdWJRdWVyeUdldE9iamVjdCkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpc1N1YlF1ZXJ5R2V0KQotICAgICAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9HZXRGb3JtLmpzcCI7Ci0gICAgICB9Ci0gICAgICBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgfQotICAgICAgCi0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlRm9ybS5qc3AiOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybUxpbmsoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNpbmVzc0RldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMWY2M2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkxzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotCi1wdWJsaWMgY2xhc3MgQnVzaW5lc3NEZXRhaWxzVG9vbCBleHRlbmRzIERldGFpbHNUb29sCi17Ci0gIHB1YmxpYyBCdXNpbmVzc0RldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQsUHJveHlMb2FkUGFnZUFjdGlvbi5nZXRBY3Rpb25MaW5rKCJ1ZGRpL2Zvcm1zL0J1c2luZXNzRGV0YWlsc0Zvcm0uanNwIikpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudCkodG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICBCdXNpbmVzc0VudGl0eSBiZSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksYmUuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0KLSAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBjb3B5SW5kZXhWZWN0b3IoYmUuZ2V0TmFtZVZlY3RvcigpLG5hbWVWZWN0b3IpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsbmFtZVZlY3Rvcik7Ci0KLSAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29weUluZGV4VmVjdG9yKGJlLmdldERlc2NyaXB0aW9uVmVjdG9yKCksZGVzY3JpcHRpb25WZWN0b3IpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGRlc2NyaXB0aW9uVmVjdG9yKTsKLQotICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBiZS5nZXRJZGVudGlmaWVyQmFnKCk7Ci0gICAgaWYgKGlkQmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGlkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgY29weUluZGV4VmVjdG9yKGlkQmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCksaWRWZWN0b3IpOwotICAgICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyxpZFZlY3Rvcik7Ci0gICAgfQotCi0gICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gYmUuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICBpZiAoY2F0QmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGNhdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGNvcHlJbmRleFZlY3RvcihjYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxjYXRWZWN0b3IpOwotICAgICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTLGNhdFZlY3Rvcik7Ci0gICAgfQotCi0gICAgRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzID0gYmUuZ2V0RGlzY292ZXJ5VVJMcygpOwotICAgIGlmIChkaXNjb3ZlcnlVUkxzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGNvcHlJbmRleFZlY3RvcihkaXNjb3ZlcnlVUkxzLmdldERpc2NvdmVyeVVSTFZlY3RvcigpLGRpc2NvdmVyeVVSTFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsZGlzY292ZXJ5VVJMVmVjdG9yKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNpbmVzc05vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNpbmVzc05vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU2YmFlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzaW5lc3NOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQnVzaW5lc3NOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBEZXRhaWxzVG9vbCBkZXRhaWxzVG9vbF87Ci0gIHByaXZhdGUgQnVzUHVibGlzaFNlcnZpY2VUb29sIHB1Ymxpc2hTZXJ2aWNlVG9vbF87Ci0gIHByaXZhdGUgTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2wgbWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2xfOwotICBwcml2YXRlIE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2wgbWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbF87Ci0gIHByaXZhdGUgVW5wdWJsaXNoVG9vbCB1bnB1Ymxpc2hUb29sXzsKLQotICBwdWJsaWMgQnVzaW5lc3NOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGRldGFpbHNUb29sXyA9IG5ldyBCdXNpbmVzc0RldGFpbHNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0JVU0lORVNTX0RFVEFJTFMiKSk7Ci0gICAgbmV3IEdldFNlcnZpY2VzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9HRVRfU0VSVklDRVMiKSxCdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXykpOyAgICAKLSAgICBwdWJsaXNoU2VydmljZVRvb2xfID0gbmV3IEJ1c1B1Ymxpc2hTZXJ2aWNlVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9QVUJMSVNIX1NFUlZJQ0UiKSk7Ci0gICAgbWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbF8gPSBuZXcgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFUyIpKTsKLSAgICBtYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbF8gPSBuZXcgTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TIikpOwotICAgIG5ldyBBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLCB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19GQVZPUklURVMiKSk7Ci0gICAgdW5wdWJsaXNoVG9vbF8gPSBuZXcgVW5wdWJsaXNoVG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2hpZ2hsaWdodGVkLmdpZiIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9VTlBVQkxJU0hfQlVTSU5FU1MiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBkZXRhaWxzVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIHB1Ymxpc2hTZXJ2aWNlVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIG1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICBtYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIHVucHVibGlzaFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0NhdGVnb3J5Tm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0NhdGVnb3J5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzdmZWNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9DYXRlZ29yeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDYXRlZ29yeU5vZGUgZXh0ZW5kcyBOb2RlCi17Ci0gIHB1YmxpYyBDYXRlZ29yeU5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsInVkZGkvaW1hZ2VzL2NhdGVnb3J5LmdpZiIpOwotICAgIHNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkcmVuKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGNoaWxkcmVuID0gZWxlbWVudF8uZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9TVUJDQVRFR09SSUVTKTsKLSAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB3aGlsZSAoY2hpbGRyZW4uaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIENhdGVnb3J5RWxlbWVudCBjYXRlZ29yeUVsZW1lbnQgPSAoQ2F0ZWdvcnlFbGVtZW50KWNoaWxkcmVuLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIENhdGVnb3J5Tm9kZSBjYXRlZ29yeU5vZGUgPSBuZXcgQ2F0ZWdvcnlOb2RlKGNhdGVnb3J5RWxlbWVudCxub2RlTWFuYWdlcl8sbm9kZURlcHRoXysxKTsKLSAgICAgICAgYWRkQ2hpbGQoY2F0ZWdvcnlOb2RlKTsKLSAgICAgICAgY2F0ZWdvcnlOb2RlLmNyZWF0ZUNoaWxkcmVuKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROb2RlTmFtZSgpCi0gIHsKLSAgICBDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudCllbGVtZW50XzsKLSAgICByZXR1cm4gY2F0ZWdvcnlFbGVtZW50LmdldE5hbWVGb3JUcmVlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBUb2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhnZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRTZXNzaW9uSWQoKSxub2RlSWRfLGlzT3Blbl8pOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0U2Vzc2lvbklkKCksbm9kZUlkXyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25UYXJnZXQoKQotICB7Ci0gICAgcmV0dXJuIFVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfV09SS0FSRUE7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldExpbmtBY3Rpb25UYXJnZXQoKQotICB7Ci0gICAgcmV0dXJuIFVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfV09SS0FSRUE7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9EZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0RldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZDZjNWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIERldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZm9ybUxpbmtfOwotCi0gIHB1YmxpYyBEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0LFN0cmluZyBmb3JtTGluaykKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgICBmb3JtTGlua18gPSBmb3JtTGluazsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGZvcm1MaW5rXzsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGNvcHlJbmRleFZlY3RvcihWZWN0b3Igc291cmNlLFZlY3RvciBkZXN0aW5hdGlvbikKLSAgewotICAgIGRlc3RpbmF0aW9uLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c291cmNlLnNpemUoKTtpKyspCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQoc291cmNlLmVsZW1lbnRBdChpKSk7Ci0gICAgICBsaXN0RWxlbWVudC5zZXRWaWV3SWQoaSk7Ci0gICAgICAvLyBUaGUgbmV4dCBpdGVtIGluZGljYXRlcyB0aGF0IHRoaXMgZWxlbWVudCBpcyB0byBiZSBpbiBub24tZWRpdCBzdGF0ZS4KLSAgICAgIGxpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbygtMSwtMSxpKTsKLSAgICAgIGRlc3RpbmF0aW9uLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldEJ1c2luZXNzZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0QnVzaW5lc3Nlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4OTExNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0QnVzaW5lc3Nlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBHZXRCdXNpbmVzc2VzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uTGlua187Ci0gIHB1YmxpYyBHZXRCdXNpbmVzc2VzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlUGF0aCxTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZVBhdGgsU3RyaW5nIGFsdCxTdHJpbmcgYWN0aW9uTGluaykKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGVuYWJsZWRJbWFnZVBhdGgsaGlnaGxpZ2h0ZWRJbWFnZVBhdGgsYWx0KTsKLSAgICBhY3Rpb25MaW5rXyA9IGFjdGlvbkxpbms7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmtfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZUludGVyZmFjZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZUludGVyZmFjZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MWY0OGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldFNlcnZpY2VJbnRlcmZhY2VzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEdldFNlcnZpY2VJbnRlcmZhY2VzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uTGlua187Ci0gIHB1YmxpYyBHZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCxTdHJpbmcgYWN0aW9uTGluaykKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gICAgYWN0aW9uTGlua18gPSBhY3Rpb25MaW5rOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiBhY3Rpb25MaW5rXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldFNlcnZpY2VzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldFNlcnZpY2VzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTU2ODY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRTZXJ2aWNlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBHZXRTZXJ2aWNlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sCi17Ci0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbkxpbmtfOwotICBwdWJsaWMgR2V0U2VydmljZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQsU3RyaW5nIGFjdGlvbkxpbmspCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgICBhY3Rpb25MaW5rXyA9IGFjdGlvbkxpbms7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmtfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvSXRlbXNTdW1tYXJ5VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0l0ZW1zU3VtbWFyeVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgwN2I4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvSXRlbXNTdW1tYXJ5VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLQotcHVibGljIGNsYXNzIEl0ZW1zU3VtbWFyeVRvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwcml2YXRlIFN0cmluZyBmb3JtTGlua187Ci0KLSAgcHVibGljIEl0ZW1zU3VtbWFyeVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGVuYWJsZWRJbWFnZSxTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZSxTdHJpbmcgYWx0LGludCBxdWVyeUl0ZW0pCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixlbmFibGVkSW1hZ2UsaGlnaGxpZ2h0ZWRJbWFnZSxhbHQpOwotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvZm9ybXMvSXRlbXNTdW1tYXJ5Rm9ybS5qc3A/Iik7Ci0gICAgZm9ybUxpbmsuYXBwZW5kKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkuYXBwZW5kKCc9JykuYXBwZW5kKHF1ZXJ5SXRlbSk7Ci0JU3RyaW5nIGVuY29kZWRGb3JtTGluayA9IFVSTFV0aWxzLmVuY29kZShmb3JtTGluay50b1N0cmluZygpKTsKLSAgICBmb3JtTGlua18gPSBQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoZW5jb2RlZEZvcm1MaW5rKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGZvcm1MaW5rXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0xvZ2luVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0xvZ2luVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzZiMjU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9Mb2dpblRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBMb2dpblRvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwcml2YXRlIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByaXZhdGUgU3RyaW5nIGZvcm1MaW5rID0gInVkZGkvZm9ybXMvTG9naW5VZGRpRm9ybS5qc3AiOwotICAKLSAgcHVibGljIExvZ2luVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gZm9ybUxpbms7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRvTG9nb3V0TGluaygpIAotICB7Ci0gIAlmb3JtTGluayA9ICJ1ZGRpL2FjdGlvbnMvTG9nb3V0QWR2YW5jZWRBY3Rpb25KU1AuanNwIjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VG9SZWdpc3RyeUxpbmsoKSAKLSAgewotICAJZm9ybUxpbmsgPSAiIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIEVudW1lcmF0aW9uIGdldEZhdm9yaXRlUmVnaXN0cnlFbGVtZW50cygpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgZmF2b3JpdGVzTm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IGZhdm9yaXRlc01haW5FbGVtZW50ID0gZmF2b3JpdGVzTm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFRyZWVFbGVtZW50IGZhdm9yaXRlUmVnaXN0cmllc0VsZW1lbnQgPSAoVHJlZUVsZW1lbnQpKGZhdm9yaXRlc01haW5FbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFKS5uZXh0RWxlbWVudCgpKTsKLSAgICByZXR1cm4gZmF2b3JpdGVSZWdpc3RyaWVzRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ1N2QxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0RmluZFRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIE1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sIGV4dGVuZHMgRm9ybVRvb2wgaW1wbGVtZW50cyBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBUb29sTWFuYWdlciBpbnZpc2libGVUb29sTWFuYWdlcl87Ci0gIHByaXZhdGUgUmVnRmluZFRvb2wgcmVnRmluZFRvb2xfOwotCi0gIHB1YmxpYyBNYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAidWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfZW5hYmxlZC5naWYiLCAidWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICBpbnZpc2libGVUb29sTWFuYWdlcl8gPSBuZXcgVG9vbE1hbmFnZXIodG9vbE1hbmFnZXIuZ2V0Tm9kZSgpKTsKLSAgICByZWdGaW5kVG9vbF8gPSBuZXcgUmVnRmluZFRvb2woaW52aXNpYmxlVG9vbE1hbmFnZXJfLCIiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgU3RyaW5nIHNpbXBsZVN0eWxlU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgLy8gRW1wdHkvTm9uLWV4aXN0ZW50IHN1YnF1ZXJ5a2V5IGltcGxpZXMgcHVibGlzaCBmb3JtLiBBbGwgZWxzZSBpbXBsaWVzIHF1ZXJ5IGZvcm0uCi0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgcmV0dXJuIFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksc3ViUXVlcnlLZXksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgcmVnRmluZFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0ID0gZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IG51bGw7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5T2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMpOwotICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5UHJvcGVydGllcyA9IGdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gICAgICBPYmplY3Qgc3ViUXVlcnlHZXRPYmplY3QgPSBzdWJRdWVyeVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgICAgaWYgKHN1YlF1ZXJ5R2V0T2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gaXNTdWJRdWVyeUdldCA9ICgoQm9vbGVhbilzdWJRdWVyeUdldE9iamVjdCkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpc1N1YlF1ZXJ5R2V0KQotICAgICAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9HZXRGb3JtLmpzcCI7Ci0gICAgICB9Ci0gICAgICBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgfQotCi0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuIFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zRm9ybS5qc3AiKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1MaW5rKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yjc4OWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RGaW5kVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbCBleHRlbmRzIEZvcm1Ub29sIGltcGxlbWVudHMgTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgVG9vbE1hbmFnZXIgaW52aXNpYmxlVG9vbE1hbmFnZXJfOwotICBwcml2YXRlIFJlZ0ZpbmRUb29sIHJlZ0ZpbmRUb29sXzsKLQotICBwdWJsaWMgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAidWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19lbmFibGVkLmdpZiIsICJ1ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgaW52aXNpYmxlVG9vbE1hbmFnZXJfID0gbmV3IFRvb2xNYW5hZ2VyKHRvb2xNYW5hZ2VyLmdldE5vZGUoKSk7Ci0gICAgcmVnRmluZFRvb2xfID0gbmV3IFJlZ0ZpbmRUb29sKGludmlzaWJsZVRvb2xNYW5hZ2VyXywiIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICBTdHJpbmcgc2ltcGxlU3R5bGVTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGdldEZvcm1Ub29sUHJvcGVydGllcyhPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QpCi0gIHsKLSAgICAvLyBFbXB0eS9Ob24tZXhpc3RlbnQgc3VicXVlcnlrZXkgaW1wbGllcyBwdWJsaXNoIGZvcm0uIEFsbCBlbHNlIGltcGxpZXMgcXVlcnkgZm9ybS4KLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiB0aGlzOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICByZXR1cm4gU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxzdWJRdWVyeUtleSxmb3JIaXN0b3J5KTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLSAgICAKLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLSAgICAgIAotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICByZWdGaW5kVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gbnVsbDsKLSAgICBpZiAoc3ViUXVlcnlLZXlPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJJRVNfUFJPUEVSVElFUyk7Ci0gICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgICAgIE9iamVjdCBzdWJRdWVyeUdldE9iamVjdCA9IHN1YlF1ZXJ5UHJvcGVydGllcy5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgICBpZiAoc3ViUXVlcnlHZXRPYmplY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0ID0gKChCb29sZWFuKXN1YlF1ZXJ5R2V0T2JqZWN0KS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlzU3ViUXVlcnlHZXQpCi0gICAgICAgICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL0dldEZvcm0uanNwIjsKLSAgICAgIH0KLSAgICAgIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICB9Ci0KLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gInVkZGkvZm9ybXMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzRm9ybS5qc3AiOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybUxpbmsoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL011bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEwYzg4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLQotcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBwdWJsaWMgYWJzdHJhY3QgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGdldEZvcm1Ub29sUHJvcGVydGllcyhPYmplY3Qga2V5KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9PcGVuUmVnaXN0cnlUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvT3BlblJlZ2lzdHJ5VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjMwYzk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9PcGVuUmVnaXN0cnlUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjQgICAxMjI3NTIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgT3BlblJlZ2lzdHJ5VG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHByaXZhdGUgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgCi0gIHB1YmxpYyBPcGVuUmVnaXN0cnlUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGNvbnRyb2xsZXJfID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXREZWZhdWx0VURESVJlZ2lzdHJ5KCkuZ2V0TmFtZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMLHVkZGlQZXJzcGVjdGl2ZS5nZXREZWZhdWx0VURESVJlZ2lzdHJ5KCkuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL09wZW5SZWdpc3RyeUZvcm0uanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIEVudW1lcmF0aW9uIGdldEZhdm9yaXRlUmVnaXN0cnlFbGVtZW50cygpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgZmF2b3JpdGVzTm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IGZhdm9yaXRlc01haW5FbGVtZW50ID0gZmF2b3JpdGVzTm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFRyZWVFbGVtZW50IGZhdm9yaXRlUmVnaXN0cmllc0VsZW1lbnQgPSAoVHJlZUVsZW1lbnQpKGZhdm9yaXRlc01haW5FbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFKS5uZXh0RWxlbWVudCgpKTsKLSAgICByZXR1cm4gZmF2b3JpdGVSZWdpc3RyaWVzRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1B1Ymxpc2hlZEl0ZW1zTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1B1Ymxpc2hlZEl0ZW1zTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTkwNGVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9QdWJsaXNoZWRJdGVtc05vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlB1Ymxpc2hlZEl0ZW1zRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFB1Ymxpc2hlZEl0ZW1zTm9kZSBleHRlbmRzIFVERElOYXZpZ2F0b3JGb2xkZXJOb2RlCi17Ci0gIHB1YmxpYyBQdWJsaXNoZWRJdGVtc05vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9JVEVNUykpCi0gICAgICAgIHsKLSAgICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHRyZWVFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9JVEVNUykpCi0gICAgICAgICAgdHJlZUVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKSkKLSAgICAgICAgICB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLQotICAgICAgICBpZiAodHJlZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICByZW1vdmVDaGlsZE5vZGUodHJlZUVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShUcmVlRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZEl0ZW1zRWxlbWVudCA9IChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBjaGlsZE5vZGUgPSBudWxsOwotICAgIHN3aXRjaCAocHVibGlzaGVkSXRlbXNFbGVtZW50LmdldFR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICBjaGlsZE5vZGUgPSBuZXcgQnVzaW5lc3NOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgIGNoaWxkTm9kZSA9IG5ldyBTZXJ2aWNlTm9kZShlbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgfQotICAgIGlmIChjaGlsZE5vZGUgIT0gbnVsbCkKLSAgICAgIGFkZENoaWxkKGNoaWxkTm9kZSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50ID0gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCllbGVtZW50XzsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBpbnQgcHVibGlzaGVkSXRlbXNUeXBlID0gcHVibGlzaGVkSXRlbXNFbGVtZW50LmdldFR5cGUoKTsKLSAgICBzd2l0Y2ggKHB1Ymxpc2hlZEl0ZW1zVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfQlVTSU5FU1NFUyIpLHB1Ymxpc2hlZEl0ZW1zVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgIG5ldyBJdGVtc1N1bW1hcnlUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVU1NQVJZX1NFUlZJQ0VTIikscHVibGlzaGVkSXRlbXNUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVU1NQVJZX1NFUlZJQ0VfSU5URVJGQUNFUyIpLHB1Ymxpc2hlZEl0ZW1zVHlwZSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9wZW5JbWFnZVBhdGgoKQotICB7Ci0gICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZEl0ZW1zRWxlbWVudCA9IChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpZWxlbWVudF87Ci0gICAgaW50IHB1Ymxpc2hlZEl0ZW1zVHlwZSA9IHB1Ymxpc2hlZEl0ZW1zRWxlbWVudC5nZXRUeXBlKCk7Ci0gICAgc3dpdGNoIChwdWJsaXNoZWRJdGVtc1R5cGUpCi0gICAgewotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICAgcmV0dXJuICJ1ZGRpL2ltYWdlcy9idXNpbmVzc2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgICAgcmV0dXJuICJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfb3Blbl9oaWdobGlnaHRlZC5naWYiOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZ2V0T3BlbkltYWdlUGF0aCgpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsb3NlZEltYWdlUGF0aCgpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50ID0gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCllbGVtZW50XzsKLSAgICBpbnQgcHVibGlzaGVkSXRlbXNUeXBlID0gcHVibGlzaGVkSXRlbXNFbGVtZW50LmdldFR5cGUoKTsKLSAgICBzd2l0Y2ggKHB1Ymxpc2hlZEl0ZW1zVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgcmV0dXJuICJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgICAgcmV0dXJuICJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5nZXRDbG9zZWRJbWFnZVBhdGgoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5Tm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDJiOGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9RdWVyeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5GaW5kQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFF1ZXJ5Tm9kZSBleHRlbmRzIFVERElOYXZpZ2F0b3JOb2RlCi17Ci0gIHByaXZhdGUgRm9ybVRvb2wgcmVnRmluZFRvb2xfOwotICBwcml2YXRlIEZpbmRBY3Rpb24gZmluZEFjdGlvbl87Ci0gIHB1YmxpYyBRdWVyeU5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsInVkZGkvaW1hZ2VzL3F1ZXJ5LmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMpKQotICAgICAgICB7Ci0gICAgICAgICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZSh0cmVlRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSWV9SRVNVTFRTKSkKLSAgICAgICAgICB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICBlbHNlIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSWV9SRVNVTFRTKSkKLSAgICAgICAgICB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLQotICAgICAgICBpZiAodHJlZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICByZW1vdmVDaGlsZE5vZGUodHJlZUVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICAgIGNyZWF0ZUNoaWxkcmVuKCk7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgIGZpbmRBY3Rpb25fID0gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjcmVhdGVDaGlsZHJlbigpCi0gIHsKLSAgICBWZWN0b3IgaW5pdGlhbFJlc3VsdHMgPSAoVmVjdG9yKWVsZW1lbnRfLmdldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLklOSVRJQUxfUkVTVUxUUyk7Ci0gICAgZm9yIChpbnQgaT0wO2k8aW5pdGlhbFJlc3VsdHMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gaW5pdGlhbFJlc3VsdHMuZWxlbWVudEF0KGkpOwotICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCdXNpbmVzc0VudGl0eSkKLSAgICAgICAgY2hpbGRFbGVtZW50ID0gbmV3IEJ1c2luZXNzRWxlbWVudCgoQnVzaW5lc3NFbnRpdHkpb2JqZWN0LGVsZW1lbnRfLmdldE1vZGVsKCkpOwotICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgQnVzaW5lc3NTZXJ2aWNlKQotICAgICAgICBjaGlsZEVsZW1lbnQgPSBuZXcgU2VydmljZUVsZW1lbnQoKEJ1c2luZXNzU2VydmljZSlvYmplY3QsZWxlbWVudF8uZ2V0TW9kZWwoKSk7Ci0gICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBUTW9kZWwpCi0gICAgICAgIGNoaWxkRWxlbWVudCA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCgoVE1vZGVsKW9iamVjdCxlbGVtZW50Xy5nZXRNb2RlbCgpKTsKLSAgICAgIGlmIChjaGlsZEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgZWxlbWVudF8uY29ubmVjdChjaGlsZEVsZW1lbnQsVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSWV9SRVNVTFRTLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShUcmVlRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgTm9kZSBjaGlsZE5vZGUgPSBudWxsOwotICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnVzaW5lc3NFbGVtZW50KQotICAgICAgY2hpbGROb2RlID0gbmV3IEJ1c2luZXNzTm9kZShlbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRWxlbWVudCkKLSAgICAgIGNoaWxkTm9kZSA9IG5ldyBTZXJ2aWNlTm9kZShlbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkKLSAgICAgIGNoaWxkTm9kZSA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlTm9kZShlbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgIGlmIChjaGlsZE5vZGUgIT0gbnVsbCkKLSAgICAgIGFkZENoaWxkKGNoaWxkTm9kZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgUmVzdWx0c1Rvb2wodG9vbE1hbmFnZXJfLGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1JFU1VMVFMiKSk7Ci0gICAgcmVnRmluZFRvb2xfID0gbmV3IFJlZ0ZpbmRUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZJTkQiKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRGaW5kVG9vbFByb3BlcnRpZXMoRmluZEFjdGlvbiBmaW5kQWN0aW9uKQotICB7Ci0gICAgZmluZEFjdGlvbl8gPSBmaW5kQWN0aW9uOwotICAgIHJlZ0ZpbmRUb29sXy51cGRhdGVQcm9wZXJ0eVRhYmxlKGZpbmRBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgICgoUmVnRmluZFRvb2wpcmVnRmluZFRvb2xfKS5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgVmVjdG9yIGNoaWxkTm9kZXMgPSBnZXRDaGlsZE5vZGVzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8Y2hpbGROb2Rlcy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIFVERElOYXZpZ2F0b3JOb2RlIG5hdmlnYXRvck5vZGUgPSAoVURESU5hdmlnYXRvck5vZGUpY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICBuYXZpZ2F0b3JOb2RlLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRmluZEFjdGlvbiBnZXRGaW5kQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBmaW5kQWN0aW9uXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5UGFyZW50Tm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5UGFyZW50Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2Y0MmQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9RdWVyeVBhcmVudE5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBRdWVyeVBhcmVudE5vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yRm9sZGVyTm9kZQotewotICBwdWJsaWMgUXVlcnlQYXJlbnROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTKSkKLSAgICAgICAgewotICAgICAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICBjcmVhdGVDaGlsZE5vZGUocXVlcnlFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBRdWVyeUVsZW1lbnQgcXVlcnlFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFUykpCi0gICAgICAgICAgcXVlcnlFbGVtZW50ID0gKFF1ZXJ5RWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICBlbHNlIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTKSkKLSAgICAgICAgICBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotCi0gICAgICAgIGlmIChxdWVyeUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICByZW1vdmVDaGlsZE5vZGUocXVlcnlFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjcmVhdGVDaGlsZE5vZGUoUXVlcnlFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBRdWVyeU5vZGUgcXVlcnlOb2RlID0gbmV3IFF1ZXJ5Tm9kZShlbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgIC8vIEFkZCByZWdpc3RyeSBhdXRoZW50aWNhdGlvbiBwcm9wZXJ0aWVzLgotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCkoZ2V0UGFyZW50KCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgcXVlcnlOb2RlLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICBhZGRDaGlsZChxdWVyeU5vZGUpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVU1NQVJZX1FVRVJJRVMiKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fUVVFUklFUyk7Ci0gICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVU1NQVJZX0JVU0lORVNTRVMiKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyk7Ci0gICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfU0VSVklDRVMiKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpOwotICAgIG5ldyBJdGVtc1N1bW1hcnlUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfU0VSVklDRV9JTlRFUkZBQ0VTIiksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3BlbkltYWdlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3F1ZXJpZXNfb3Blbl9oaWdobGlnaHRlZC5naWYiOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsb3NlZEltYWdlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWZyZXNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZnJlc2hUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOGExYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZnJlc2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZnJlc2hVRERJTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sCi17Ci0gIHB1YmxpYyBSZWZyZXNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiBSZWZyZXNoVURESU5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ0ZpbmRUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnRmluZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0NTE2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnRmluZFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RGaW5kVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCBpbXBsZW1lbnRzIE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIHB1YmxpYyBSZWdGaW5kVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsInVkZGkvaW1hZ2VzL2ZpbmRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9maW5kX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBpbml0RGVmYXVsdFByb3BlcnRpZXModGhpcyk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTLG5ldyBIYXNodGFibGUoKSk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJERUZBVUxUX1FVRVJZX05BTUUiKSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKQotICB7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLQotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgU3RyaW5nIHNpbXBsZVN0eWxlU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotCi0gICAgU3RyaW5nIG1heFNlYXJjaFNldCA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpOwotICAgIFN0cmluZyBtYXhSZXN1bHRzID0gU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUyk7Ci0KLSAgICAvLyBSZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbiBpbnB1dHMKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUsIiIpOwotCi0gICAgLy8gUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbiBpbnB1dHMKLSAgICAvLyBUaGUgYXV0aGVudGljYXRpb24gaW5wdXRzIG11c3QgYmUgYWRkZWQgbGF0ZXIgYXMgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJlZm9yZSB3ZSBjYW4gZ2V0IGEgdmFsaWQgaGFuZGxlCi0gICAgLy8gdG8gdGhlIFJlZ2lzdHJ5RWxlbWVudCBpbiB0aGUgY2FzZSBvZiBhIHF1ZXJ5IG5vZGUuCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotCi0gICAgLy8gUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uIGlucHV0cwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FLCIiKTsKLQotICAgIC8vIFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbnB1dHMgbXVzdCBiZSBhZGRlZCBsYXRlciBhcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHdlIGNhbiBnZXQgYSB2YWxpZCBoYW5kbGUKLSAgICAvLyB0byB0aGUgUmVnaXN0cnlFbGVtZW50IGluIHRoZSBjYXNlIG9mIGEgcXVlcnkgbm9kZS4KLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotCi0gICAgLy8gUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uIGlucHV0cwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSwiIik7Ci0KLSAgICAvLyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbiBpbnB1dHMKLSAgICAvLyBUaGUgYXV0aGVudGljYXRpb24gaW5wdXRzIG11c3QgYmUgYWRkZWQgbGF0ZXIgYXMgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJlZm9yZSB3ZSBjYW4gZ2V0IGEgdmFsaWQgaGFuZGxlCi0gICAgLy8gdG8gdGhlIFJlZ2lzdHJ5RWxlbWVudCBpbiB0aGUgY2FzZSBvZiBhIHF1ZXJ5IG5vZGUuCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsIiIpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUyxtYXhSZXN1bHRzKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCkKLSAgewotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgSGFzaHRhYmxlIHN1YlF1ZXJpZXNQcm9wZXJ0aWVzID0gKEhhc2h0YWJsZSlnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJJRVNfUFJPUEVSVElFUyk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5UHJvcGVydGllcyA9IChGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Upc3ViUXVlcmllc1Byb3BlcnRpZXMuZ2V0KHN1YlF1ZXJ5S2V5KTsKLSAgICBpZiAoc3ViUXVlcnlQcm9wZXJ0aWVzID09IG51bGwpCi0gICAgewotICAgICAgc3ViUXVlcnlQcm9wZXJ0aWVzID0gbmV3IEZvcm1Ub29sUHJvcGVydGllcygpOwotICAgICAgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKHN1YlF1ZXJ5UHJvcGVydGllcyk7Ci0gICAgICBzdWJRdWVyaWVzUHJvcGVydGllcy5wdXQoc3ViUXVlcnlLZXksc3ViUXVlcnlQcm9wZXJ0aWVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5UHJvcGVydGllczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICByZXR1cm4gU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxzdWJRdWVyeUtleSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0ID0gZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIGlmIChzdWJRdWVyeUtleU9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeVByb3BlcnRpZXMgPSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICAgICAgT2JqZWN0IHN1YlF1ZXJ5R2V0T2JqZWN0ID0gc3ViUXVlcnlQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICAgIGlmIChzdWJRdWVyeUdldE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBib29sZWFuIGlzU3ViUXVlcnlHZXQgPSAoKEJvb2xlYW4pc3ViUXVlcnlHZXRPYmplY3QpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaXNTdWJRdWVyeUdldCkKLSAgICAgICAgICByZXR1cm4gInVkZGkvZm9ybXMvR2V0Rm9ybS5qc3AiOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gInVkZGkvZm9ybXMvUmVnRmluZEZvcm0uanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ1B1Ymxpc2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnUHVibGlzaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFiMmU3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnUHVibGlzaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdEZpbmRUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWdQdWJsaXNoVG9vbCBleHRlbmRzIEZvcm1Ub29sIGltcGxlbWVudHMgTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgVG9vbE1hbmFnZXIgaW52aXNpYmxlVG9vbE1hbmFnZXJfOwotICBwcml2YXRlIFJlZ0ZpbmRUb29sIHJlZ0ZpbmRUb29sXzsKLSAgcHVibGljIFJlZ1B1Ymxpc2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvcHVibGlzaF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3B1Ymxpc2hfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGludmlzaWJsZVRvb2xNYW5hZ2VyXyA9IG5ldyBUb29sTWFuYWdlcih0b29sTWFuYWdlci5nZXROb2RlKCkpOwotICAgIHJlZ0ZpbmRUb29sXyA9IG5ldyBSZWdGaW5kVG9vbChpbnZpc2libGVUb29sTWFuYWdlcl8sIiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBTdHJpbmcgc2ltcGxlU3R5bGVTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0KLSAgICAvLyBSZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04sIiIpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OLCIiKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMLCIiKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uIGlucHV0cwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTiwiIik7Ci0KLSAgICAvLyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSwiIik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgcmVnRmluZFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCkKLSAgewotICAgIC8vIEVtcHR5L05vbi1leGlzdGVudCBzdWJxdWVyeWtleSBpbXBsaWVzIHB1Ymxpc2ggZm9ybS4gQWxsIGVsc2UgaW1wbGllcyBxdWVyeSBmb3JtLgotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gbnVsbDsKLSAgICBpZiAoc3ViUXVlcnlLZXlPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJJRVNfUFJPUEVSVElFUyk7Ci0gICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgICAgIE9iamVjdCBzdWJRdWVyeUdldE9iamVjdCA9IHN1YlF1ZXJ5UHJvcGVydGllcy5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgICBpZiAoc3ViUXVlcnlHZXRPYmplY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0ID0gKChCb29sZWFuKXN1YlF1ZXJ5R2V0T2JqZWN0KS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlzU3ViUXVlcnlHZXQpCi0gICAgICAgICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL0dldEZvcm0uanNwIjsKLSAgICAgIH0KLSAgICAgIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICB9Ci0gICAgICAKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gInVkZGkvZm9ybXMvUmVnUHVibGlzaEZvcm0uanNwIjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1MaW5rKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnaXN0cnlEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDk3NThlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeURldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wKLXsKLSAgcHVibGljIFJlZ2lzdHJ5RGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCxQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvUmVnRGV0YWlsc0Zvcm0uanNwIikpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICAgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSxyZWdFbGVtZW50LmdldE5hbWUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeU5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI4Nzg0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnaXN0cnlOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVkSXRlbXNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5UGFyZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBSZWdpc3RyeURldGFpbHNUb29sIHJlZ0RldGFpbHNUb29sXzsKLSAgcHJpdmF0ZSBSZWdQdWJsaXNoVG9vbCByZWdQdWJsaXNoVG9vbF87Ci0gIHByaXZhdGUgTG9naW5Ub29sIGxvZ2luVG9vbF87Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUFHRV9QQVRIX1NUQU5EQVJEID0gInVkZGkvaW1hZ2VzL3JlZ2lzdHJ5LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX1BBVEhfV0lUSF9VU0VSX0RFRklORURfQ0FURUdPUklFUyA9ICJ1ZGRpL2ltYWdlcy9yZWdzdHJ5Y2F0X29iai5naWYiOwotICAKLSAgcHVibGljIFJlZ2lzdHJ5Tm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgsU3RyaW5nIGltYWdlUGF0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLGltYWdlUGF0aCk7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFU19QQVJFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgUXVlcnlQYXJlbnRFbGVtZW50IHF1ZXJ5UGFyZW50RWxlbWVudCA9IChRdWVyeVBhcmVudEVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZShxdWVyeVBhcmVudEVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzUHVibGlzaGVkSXRlbXNSZWwocmVsKSkKLSAgICAgICAgewotICAgICAgICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQgPSAoUHVibGlzaGVkSXRlbXNFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICBjcmVhdGVDaGlsZE5vZGUocHVibGlzaGVkSXRlbXNFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIGluQm91bmRSZWxOYW1lID0gZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgU3RyaW5nIG91dEJvdW5kUmVsTmFtZSA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAoaW5Cb3VuZFJlbE5hbWUuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFU19QQVJFTlQpIHx8IGlzUHVibGlzaGVkSXRlbXNSZWwoaW5Cb3VuZFJlbE5hbWUpKQotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICBlbHNlIGlmIChvdXRCb3VuZFJlbE5hbWUuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFU19QQVJFTlQpIHx8IGlzUHVibGlzaGVkSXRlbXNSZWwob3V0Qm91bmRSZWxOYW1lKSkKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0KLSAgICAgICAgaWYgKGNoaWxkRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGVsZW1lbnQuY29ubmVjdChuZXcgUXVlcnlQYXJlbnRFbGVtZW50KHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfUVVFUklFU19GT0xERVIiKSxlbGVtZW50Xy5nZXRNb2RlbCgpKSxVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVNfUEFSRU5ULE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgZWxlbWVudC5jb25uZWN0KG5ldyBQdWJsaXNoZWRJdGVtc0VsZW1lbnQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9QVUJMSVNIRURfQlVTSU5FU1NFU19GT0xERVIiKSxlbGVtZW50Xy5nZXRNb2RlbCgpKSxVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9CVVNJTkVTU0VTX1BBUkVOVCxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGVsZW1lbnQuY29ubmVjdChuZXcgUHVibGlzaGVkSXRlbXNFbGVtZW50KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1BVQkxJU0hFRF9TRVJWSUNFU19GT0xERVIiKSxlbGVtZW50Xy5nZXRNb2RlbCgpKSxVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9TRVJWSUNFU19QQVJFTlQsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBlbGVtZW50LmNvbm5lY3QobmV3IFB1Ymxpc2hlZEl0ZW1zRWxlbWVudChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19GT0xERVIiKSxlbGVtZW50Xy5nZXRNb2RlbCgpKSxVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9TRVJWSUNFX0lOVEVSRkFDRVNfUEFSRU5ULE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzUHVibGlzaGVkSXRlbXNSZWwoU3RyaW5nIHJlbCkKLSAgewotICAgIHJldHVybiByZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0JVU0lORVNTRVNfUEFSRU5UKSB8fCByZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VTX1BBUkVOVCkgfHwgcmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9TRVJWSUNFX0lOVEVSRkFDRVNfUEFSRU5UKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjcmVhdGVDaGlsZE5vZGUoUXVlcnlQYXJlbnRFbGVtZW50IHF1ZXJ5UGFyZW50RWxlbWVudCkKLSAgewotICAgIFF1ZXJ5UGFyZW50Tm9kZSBxdWVyeVBhcmVudE5vZGUgPSBuZXcgUXVlcnlQYXJlbnROb2RlKHF1ZXJ5UGFyZW50RWxlbWVudCxub2RlTWFuYWdlcl8sbm9kZURlcHRoXysxKTsKLSAgICBhZGRDaGlsZChxdWVyeVBhcmVudE5vZGUpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50KQotICB7Ci0gICAgUHVibGlzaGVkSXRlbXNOb2RlIHB1Ymxpc2hlZEl0ZW1zTm9kZSA9IG5ldyBQdWJsaXNoZWRJdGVtc05vZGUocHVibGlzaGVkSXRlbXNFbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgIGFkZENoaWxkKHB1Ymxpc2hlZEl0ZW1zTm9kZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICByZWdEZXRhaWxzVG9vbF8gPSBuZXcgUmVnaXN0cnlEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8gLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUkVHSVNUUllfREVUQUlMUyIpKTsKLSAgICBSZWdGaW5kVG9vbCByZWdGaW5kVG9vbCA9IG5ldyBSZWdGaW5kVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GSU5EIikpOwotICAgIHJlZ1B1Ymxpc2hUb29sXyA9IG5ldyBSZWdQdWJsaXNoVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9QVUJMSVNIIikpOwotICAgIGxvZ2luVG9vbF8gPSBuZXcgTG9naW5Ub29sKHRvb2xNYW5hZ2VyXywgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MT0dJTiIpKTsKLSAgICBuZXcgQWRkVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19GQVZPUklURVMiKSk7Ci0gICAgcmVnRmluZFRvb2wuYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF8pOwotICAgIHJlZ1B1Ymxpc2hUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoKFJlZ2lzdHJ5RWxlbWVudCllbGVtZW50Xyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeURldGFpbHNUb29sIGdldFJlZ0RldGFpbHNUb29sKCkKLSAgewotICAgIHJldHVybiByZWdEZXRhaWxzVG9vbF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUmVnUHVibGlzaFRvb2wgZ2V0UmVnUHVibGlzaFRvb2woKQotICB7Ci0gICAgcmV0dXJuIHJlZ1B1Ymxpc2hUb29sXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBMb2dpblRvb2wgZ2V0TG9naW5Ub29sKCkKLSAgewotICAgIHJldHVybiBsb2dpblRvb2xfOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGFkZERpc2NvdmVyZWROb2RlcyhWZWN0b3IgYWxsTm9kZXMsTm9kZSBxdWVyeVBhcmVudE5vZGUsaW50IHF1ZXJ5VHlwZSkKLSAgewotICAgIFZlY3RvciBxdWVyeU5vZGVzID0gcXVlcnlQYXJlbnROb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxxdWVyeU5vZGVzLnNpemUoKTtpKyspCi0gICAgewotICAgICAgUXVlcnlOb2RlIHF1ZXJ5Tm9kZSA9IChRdWVyeU5vZGUpcXVlcnlOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICBRdWVyeUVsZW1lbnQgcXVlcnlFbGVtZW50ID0gKFF1ZXJ5RWxlbWVudClxdWVyeU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmIChxdWVyeVR5cGUgPT0gVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1FVRVJJRVMpCi0gICAgICAgIGFsbE5vZGVzLmFkZEVsZW1lbnQocXVlcnlOb2RlKTsKLSAgICAgIGVsc2UgaWYgKHF1ZXJ5RWxlbWVudC5nZXRRdWVyeVR5cGUoKSA9PSBxdWVyeVR5cGUpCi0gICAgICB7Ci0gICAgICAgIFZlY3RvciBkaXNjb3ZlcmVkTm9kZXMgPSBxdWVyeU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBmb3IgKGludCBqPTA7ajxkaXNjb3ZlcmVkTm9kZXMuc2l6ZSgpO2orKykKLSAgICAgICAgICBhbGxOb2Rlcy5hZGRFbGVtZW50KGRpc2NvdmVyZWROb2Rlcy5lbGVtZW50QXQoaikpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBhZGRQdWJsaXNoZWROb2RlcyhWZWN0b3IgYWxsTm9kZXMsTm9kZSBwdWJsaXNoZWRJdGVtc05vZGUpCi0gIHsKLSAgICBWZWN0b3IgaXRlbU5vZGVzID0gcHVibGlzaGVkSXRlbXNOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxpdGVtTm9kZXMuc2l6ZSgpO2krKykKLSAgICAgIGFsbE5vZGVzLmFkZEVsZW1lbnQoaXRlbU5vZGVzLmVsZW1lbnRBdChpKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXRBbGxCdXNpbmVzc05vZGVzKFZlY3RvciBhbGxCdXNpbmVzc05vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcXVlcnlQYXJlbnROb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpOwotICAgIE5vZGUgcHVibGlzaGVkQnVzaW5lc3Nlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpKTsKLSAgICBhZGREaXNjb3ZlcmVkTm9kZXMoYWxsQnVzaW5lc3NOb2RlcyxxdWVyeVBhcmVudE5vZGUsVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpOwotICAgIGFkZFB1Ymxpc2hlZE5vZGVzKGFsbEJ1c2luZXNzTm9kZXMscHVibGlzaGVkQnVzaW5lc3Nlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0QWxsU2VydmljZU5vZGVzKFZlY3RvciBhbGxTZXJ2aWNlc05vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcXVlcnlQYXJlbnROb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCkpOwotICAgIGFkZERpc2NvdmVyZWROb2RlcyhhbGxTZXJ2aWNlc05vZGVzLHF1ZXJ5UGFyZW50Tm9kZSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpOwotICAgIGFkZFB1Ymxpc2hlZE5vZGVzKGFsbFNlcnZpY2VzTm9kZXMscHVibGlzaGVkU2VydmljZXNOb2RlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdldEFsbFNlcnZpY2VJbnRlcmZhY2VOb2RlcyhWZWN0b3IgYWxsU2VydmljZUludGVyZmFjZU5vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcXVlcnlQYXJlbnROb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZUludGVyZmFjZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50KCkpOwotICAgIGFkZERpc2NvdmVyZWROb2RlcyhhbGxTZXJ2aWNlSW50ZXJmYWNlTm9kZXMscXVlcnlQYXJlbnROb2RlLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgIGFkZFB1Ymxpc2hlZE5vZGVzKGFsbFNlcnZpY2VJbnRlcmZhY2VOb2RlcyxwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0UHVibGlzaGVkQnVzaW5lc3NOb2RlcyhWZWN0b3IgcHVibGlzaGVkQnVzaW5lc3NOb2RlcykKLSAgewotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCllbGVtZW50XzsKLSAgICBOb2RlIHB1Ymxpc2hlZEJ1c2luZXNzZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQoKSk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMocHVibGlzaGVkQnVzaW5lc3NOb2RlcyxwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXRQdWJsaXNoZWRTZXJ2aWNlTm9kZXMoVmVjdG9yIHB1Ymxpc2hlZFNlcnZpY2VOb2RlcykKLSAgewotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCllbGVtZW50XzsKLSAgICBOb2RlIHB1Ymxpc2hlZFNlcnZpY2VzTm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudCgpKTsKLSAgICBhZGRQdWJsaXNoZWROb2RlcyhwdWJsaXNoZWRTZXJ2aWNlTm9kZXMscHVibGlzaGVkU2VydmljZXNOb2RlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdldFB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VOb2RlcyhWZWN0b3IgcHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZUludGVyZmFjZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50KCkpOwotICAgIGFkZFB1Ymxpc2hlZE5vZGVzKHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VOb2RlcyxwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0RGlzY292ZXJlZE5vZGVzKFZlY3RvciBkaXNjb3ZlcmVkTm9kZXMsaW50IHF1ZXJ5SXRlbSkKLSAgewotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCllbGVtZW50XzsKLSAgICBOb2RlIHF1ZXJ5UGFyZW50Tm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFF1ZXJ5UGFyZW50RWxlbWVudCgpKTsKLSAgICBhZGREaXNjb3ZlcmVkTm9kZXMoZGlzY292ZXJlZE5vZGVzLHF1ZXJ5UGFyZW50Tm9kZSxxdWVyeUl0ZW0pOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGhhc1F1ZXJ5UmVzdWx0cyhOb2RlIHF1ZXJ5UGFyZW50Tm9kZSxpbnQgcXVlcnlUeXBlKQotICB7Ci0gICAgVmVjdG9yIHF1ZXJpZXMgPSBxdWVyeVBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPHF1ZXJpZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBRdWVyeU5vZGUgcXVlcnlOb2RlID0gKFF1ZXJ5Tm9kZSlxdWVyaWVzLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChxdWVyeU5vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KXF1ZXJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBpZiAocXVlcnlFbGVtZW50LmdldFF1ZXJ5VHlwZSgpID09IHF1ZXJ5VHlwZSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFzQnVzaW5lc3MoKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkQnVzaW5lc3Nlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpKTsKLSAgICBpZiAocHVibGlzaGVkQnVzaW5lc3Nlc05vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSA+IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gaGFzUXVlcnlSZXN1bHRzKGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFF1ZXJ5UGFyZW50RWxlbWVudCgpKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNTZXJ2aWNlKCkKLSAgewotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCllbGVtZW50XzsKLSAgICBOb2RlIHB1Ymxpc2hlZFNlcnZpY2VzTm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudCgpKTsKLSAgICBpZiAocHVibGlzaGVkU2VydmljZXNOb2RlLmdldENoaWxkTm9kZXMoKS5zaXplKCkgPiAwKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGhhc1F1ZXJ5UmVzdWx0cyhnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc1NlcnZpY2VJbnRlcmZhY2UoKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZUludGVyZmFjZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50KCkpOwotICAgIGlmIChwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSA+IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gaGFzUXVlcnlSZXN1bHRzKGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFF1ZXJ5UGFyZW50RWxlbWVudCgpKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1Jlc3VsdHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVzdWx0c1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI1N2Y2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVzdWx0c1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBSZXN1bHRzVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHByaXZhdGUgU3RyaW5nIGZvcm1MaW5rXzsKLQotICBwdWJsaWMgUmVzdWx0c1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgICBmb3JtTGlua18gPSBQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvUmVzdWx0c0Zvcm0uanNwIik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiBmb3JtTGlua187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9Sb290Q2F0ZWdvcnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUm9vdENhdGVnb3J5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjFjMGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9Sb290Q2F0ZWdvcnlOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSb290Q2F0ZWdvcnlOb2RlIGV4dGVuZHMgTm9kZQotewotICBwdWJsaWMgUm9vdENhdGVnb3J5Tm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlciwxLCJpbWFnZXMvcm9vdF9tYWluLmdpZiIpOwotICAgIHNldFZpc2liaWxpdHlPZkNoaWxkcmVuKHRydWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGRyZW4oKQotICB7Ci0gICAgRW51bWVyYXRpb24gY2hpbGRyZW4gPSBlbGVtZW50Xy5nZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMpOwotICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHdoaWxlIChjaGlsZHJlbi5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCA9IChDYXRlZ29yeUVsZW1lbnQpY2hpbGRyZW4ubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgQ2F0ZWdvcnlOb2RlIGNhdGVnb3J5Tm9kZSA9IG5ldyBDYXRlZ29yeU5vZGUoY2F0ZWdvcnlFbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgICAgICBhZGRDaGlsZChjYXRlZ29yeU5vZGUpOwotICAgICAgICBjYXRlZ29yeU5vZGUuY3JlYXRlQ2hpbGRyZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBSb290IG5vZGU6IG5vIG5lZWQgZm9yIHRvZ2dsZSBhY3Rpb24uCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8vIFRleHQgb25seSBub2RlLgotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUwNmJkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU2VydmljZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlRGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbAotewotICBwdWJsaWMgU2VydmljZURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQsUHJveHlMb2FkUGFnZUFjdGlvbi5nZXRBY3Rpb25MaW5rKCJ1ZGRpL2Zvcm1zL1NlcnZpY2VEZXRhaWxzRm9ybS5qc3AiKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudCkodG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICBCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZSA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLGJ1c1NlcnZpY2UuZ2V0U2VydmljZUtleSgpKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLGJ1c1NlcnZpY2UuZ2V0QnVzaW5lc3NLZXkoKSk7Ci0KLSAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBjb3B5SW5kZXhWZWN0b3IoYnVzU2VydmljZS5nZXROYW1lVmVjdG9yKCksbmFtZVZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLG5hbWVWZWN0b3IpOwotCi0gICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGNvcHlJbmRleFZlY3RvcihidXNTZXJ2aWNlLmdldERlc2NyaXB0aW9uVmVjdG9yKCksZGVzY3JpcHRpb25WZWN0b3IpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotCi0gICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gYnVzU2VydmljZS5nZXRDYXRlZ29yeUJhZygpOwotICAgIGlmIChjYXRCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgY2F0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgY29weUluZGV4VmVjdG9yKGNhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLGNhdFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyxjYXRWZWN0b3IpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3Yzk4NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuSWRlbnRpZmllckJhZzsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbCBleHRlbmRzIERldGFpbHNUb29sCi17Ci0gIHB1YmxpYyBTZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCxQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvU2VydmljZUludGVyZmFjZURldGFpbHNGb3JtLmpzcCIpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBjbGVhclByb3BlcnR5VGFibGUoKTsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkodG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICBUTW9kZWwgdE1vZGVsID0gc2lFbGVtZW50LmdldFRNb2RlbCgpOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSx0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpOwotICAgIExpc3RFbGVtZW50IG5hbWVMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh0TW9kZWwuZ2V0TmFtZVN0cmluZygpKTsKLSAgICBuYW1lTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKC0xLC0xLDApOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxuYW1lTGlzdEVsZW1lbnQpOwotCi0gICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGNvcHlJbmRleFZlY3Rvcih0TW9kZWwuZ2V0RGVzY3JpcHRpb25WZWN0b3IoKSxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotCi0gICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IHRNb2RlbC5nZXRJZGVudGlmaWVyQmFnKCk7Ci0gICAgaWYgKGlkQmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGlkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgY29weUluZGV4VmVjdG9yKGlkQmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCksaWRWZWN0b3IpOwotICAgICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyxpZFZlY3Rvcik7Ci0gICAgfQotCi0gICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGNhdEJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBjYXRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoY2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCksY2F0VmVjdG9yKTsKLSAgICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyxjYXRWZWN0b3IpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU2VydmljZUludGVyZmFjZU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODkzOGY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VJbnRlcmZhY2VOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBEZXRhaWxzVG9vbCBkZXRhaWxzVG9vbF87Ci0gIHByaXZhdGUgVW5wdWJsaXNoVG9vbCB1bnB1Ymxpc2hUb29sXzsKLSAgcHVibGljIFNlcnZpY2VJbnRlcmZhY2VOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGRldGFpbHNUb29sXyA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUyIpKTsKLSAgICBuZXcgR2V0U2VydmljZXNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVF9TRVJWSUNFUyIpLFNlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8pKTsKLSAgICBuZXcgR2V0QnVzaW5lc3Nlc1Rvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9HRVRfQlVTSU5FU1NFUyIpLFNlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXykpOwotICAgIG5ldyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIikpOwotICAgIG5ldyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wodG9vbE1hbmFnZXJfLGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfSU1QT1JUX1RPX0ZTIikpOwotICAgIG5ldyBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wodG9vbE1hbmFnZXJfLGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgbmV3IEFkZFRvRmF2b3JpdGVzVG9vbCh0b29sTWFuYWdlcl8sIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICB1bnB1Ymxpc2hUb29sXyA9IG5ldyBVbnB1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9VTlBVQkxJU0hfU0VSVklDRV9JTlRFUkZBQ0UiKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIGRldGFpbHNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgdW5wdWJsaXNoVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdTRExVUkxGcm9tRGV0YWlsc1Rvb2woKQotICB7Ci0gICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRldGFpbHNUb29sXy5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICBpZiAod3NkbFVSTExpc3RFbGVtZW50ICE9IG51bGwpCi0gICAgICByZXR1cm4gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICJ0ZW1wLndzZGwiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU2VydmljZU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmVhYzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VydmljZUdldEJ1c2luZXNzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlTm9kZSBleHRlbmRzIFVERElOYXZpZ2F0b3JOb2RlCi17Ci0gIHByaXZhdGUgRGV0YWlsc1Rvb2wgZGV0YWlsc1Rvb2xfOwotICBwcml2YXRlIFVucHVibGlzaFRvb2wgdW5wdWJsaXNoVG9vbF87Ci0gIHB1YmxpYyBTZXJ2aWNlTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwidWRkaS9pbWFnZXMvc2VydmljZV9oaWdobGlnaHRlZC5naWYiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGRldGFpbHNUb29sXyA9IG5ldyBTZXJ2aWNlRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU0VSVklDRV9ERVRBSUxTIikpOwotICAgIG5ldyBHZXRCdXNpbmVzc2VzVG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL2J1c2luZXNzX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVF9CVVNJTkVTUyIpLFNlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8pKTsKLSAgICBuZXcgR2V0U2VydmljZUludGVyZmFjZXNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVF9TRVJWSUNFX0lOVEVSRkFDRVMiKSxTZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfKSk7Ci0gICAgbmV3IFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgbmV3IFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRCIpKTsKLSAgICBuZXcgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fV1NETF9QRVJTUEVDVElWRSIpKTsKLSAgICBuZXcgQWRkVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19GQVZPUklURVMiKSk7Ci0gICAgdW5wdWJsaXNoVG9vbF8gPSBuZXcgVW5wdWJsaXNoVG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1VOUFVCTElTSF9TRVJWSUNFIikpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBkZXRhaWxzVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIHVucHVibGlzaFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFVSTEZyb21EZXRhaWxzVG9vbCgpCi0gIHsKLSAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGV0YWlsc1Rvb2xfLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgaWYgKHdzZGxVUkxMaXN0RWxlbWVudCAhPSBudWxsKQotICAgICAgcmV0dXJuIChTdHJpbmcpd3NkbFVSTExpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAidGVtcC53c2RsIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5S2V5UHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TdWJRdWVyeUtleVByb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTdkZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5S2V5UHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgU3ViUXVlcnlLZXlQcm9wZXJ0eQotewotICBwcml2YXRlIFN0cmluZyBzdWJRdWVyeUtleV87Ci0KLSAgcHVibGljIFN1YlF1ZXJ5S2V5UHJvcGVydHkoKQotICB7Ci0gICAgc3ViUXVlcnlLZXlfID0gIiI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdWJRdWVyeUtleShTdHJpbmcgc3ViUXVlcnlLZXkpCi0gIHsKLSAgICBzdWJRdWVyeUtleV8gPSBzdWJRdWVyeUtleTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TdWJRdWVyeVRyYW5zZmVyVGFyZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOWU2MTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci0KLXB1YmxpYyBjbGFzcyBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0Ci17Ci0gIHByaXZhdGUgaW50IG5vZGVJZF87Ci0gIHByaXZhdGUgaW50IHRvb2xJZF87Ci0gIHByaXZhdGUgaW50IHZpZXdJZF87Ci0gIHByaXZhdGUgaW50IHZpZXdUb29sSWRfOwotICBwcml2YXRlIFN0cmluZyBzdWJRdWVyeUtleV87Ci0gIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBIYXNodGFibGUgcGFyZW50UXVlcnlEYXRhXzsKLQotICBwdWJsaWMgU3ViUXVlcnlUcmFuc2ZlclRhcmdldChOb2RlIG5vZGUsU3RyaW5nIHN1YlF1ZXJ5S2V5LEhhc2h0YWJsZSBwYXJlbnRRdWVyeURhdGEpCi0gIHsKLSAgICBub2RlSWRfID0gbm9kZS5nZXROb2RlSWQoKTsKLSAgICB0b29sSWRfID0gbm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCk7Ci0gICAgdmlld0lkXyA9IG5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgdmlld1Rvb2xJZF8gPSBub2RlLmdldFZpZXdUb29sSWQoKTsKLSAgICBzdWJRdWVyeUtleV8gPSBzdWJRdWVyeUtleTsKLSAgICBub2RlTWFuYWdlcl8gPSBub2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgcGFyZW50UXVlcnlEYXRhXyA9IHBhcmVudFF1ZXJ5RGF0YTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Tm9kZUlkKCkKLSAgewotICAgIHJldHVybiBub2RlSWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRUb29sSWQoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFZpZXdJZCgpCi0gIHsKLSAgICByZXR1cm4gdmlld0lkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld1Rvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gdmlld1Rvb2xJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN1YlF1ZXJ5S2V5KCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUtleV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRm9ybVRvb2wgZ2V0VGFyZ2V0Rm9ybVRvb2woKQotICB7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkXyk7Ci0gICAgaWYgKG5vZGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgVG9vbCB0b29sID0gbm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFRvb2wodG9vbElkXyk7Ci0KLSAgICBpZiAodmlld0lkXyAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgewotICAgICAgVmlld1Rvb2wgdmlld1Rvb2wgPSAoVmlld1Rvb2wpdG9vbDsKLSAgICAgIFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciA9IHZpZXdUb29sLmdldFRvb2xNYW5hZ2VyKHZpZXdJZF8pOwotICAgICAgaWYgKHZpZXdUb29sTWFuYWdlciAhPSBudWxsKQotICAgICAgICB0b29sID0gdmlld1Rvb2xNYW5hZ2VyLmdldFRvb2wodmlld1Rvb2xJZF8pOwotICAgICAgZWxzZQotICAgICAgICB0b29sID0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl0b29sOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgSGFzaHRhYmxlIGdldFBhcmVudFF1ZXJ5RGF0YSgpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50UXVlcnlEYXRhXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZTJiNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wgewotICBwdWJsaWMgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q4NWEwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wgZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sCi17Ci0gIHB1YmxpYyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YzM2MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb1dvcmtiZW5jaFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbCBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoVG9vbAotewotICBwdWJsaWMgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAidWRkaS9mb3Jtcy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkN2UzNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbAotewotICBwdWJsaWMgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvZm9ybXMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTWFpbk5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTWFpbk5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5MDAwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESU1haW5Ob2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5VRERJTWFpbkVsZW1lbnQ7Ci0KLS8vIFJvb3Qgbm9kZSBmb3IgdGhlIFVEREkgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFVERElNYWluTm9kZSBleHRlbmRzIFVERElOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBVRERJTWFpbk5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsMSwiaW1hZ2VzL3Jvb3RfbWFpbi5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9SRUdJU1RSSUVTKSkKLSAgICAgICAgewotICAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICBVRERJTWFpbkVsZW1lbnQgdWRkaU1haW5FbGVtZW50ID0gKFVERElNYWluRWxlbWVudCllbGVtZW50XzsKLSAgICAgICAgICB1ZGRpTWFpbkVsZW1lbnQuYWRkUmVnaXN0cnlOYW1lKHJlZ2lzdHJ5RWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZShyZWdpc3RyeUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFJlZ2lzdHJ5RWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9SRUdJU1RSSUVTKSkKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMpKQotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0KLSAgICAgICAgaWYgKGNoaWxkRWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgVURESU1haW5FbGVtZW50IHVkZGlNYWluRWxlbWVudCA9IChVRERJTWFpbkVsZW1lbnQpZWxlbWVudF87Ci0gICAgICAgICAgdWRkaU1haW5FbGVtZW50LnJlbW92ZVJlZ2lzdHJ5TmFtZShjaGlsZEVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShUcmVlRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICBTdHJpbmcgaW1hZ2VQYXRoOwotICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXMgIT0gbnVsbCAmJiB1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICBpbWFnZVBhdGggPSBSZWdpc3RyeU5vZGUuSU1BR0VfUEFUSF9XSVRIX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTOwotICAgIGVsc2UKLSAgICAgIGltYWdlUGF0aCA9IFJlZ2lzdHJ5Tm9kZS5JTUFHRV9QQVRIX1NUQU5EQVJEOwotICAgIAotICAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gbmV3IFJlZ2lzdHJ5Tm9kZShlbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEsaW1hZ2VQYXRoKTsKLSAgICBhZGRDaGlsZChyZWdOb2RlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBPcGVuUmVnaXN0cnlUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fUkVHSVNUUlkiKSk7Ci0gIH0KLSAgCi0gIC8vIEdpdmVuIGEgbm9kZSB1bmRlciBhIHBhcnRpY3VsYXIgcmVnaXN0cnkgbm9kZSwgb2J0YWluIHRoZSByZWdpc3RyeSBub2RlLgotICBwdWJsaWMgZmluYWwgUmVnaXN0cnlOb2RlIGdldFJlZ2lzdHJ5Tm9kZShOb2RlIGN1cnJlbnROb2RlKQotICB7Ci0gICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSBudWxsOwotICAgIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFJlZ2lzdHJ5Tm9kZSkKLSAgICB7Ci0gICAgICByZWdOb2RlID0gKFJlZ2lzdHJ5Tm9kZSljdXJyZW50Tm9kZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgewotICAgICAgLy8gUXVlcnkgLT4gUXVlcnkgZm9sZGVyIC0+IFJlZ2lzdHJ5Ci0gICAgICByZWdOb2RlID0gKFJlZ2lzdHJ5Tm9kZSkoY3VycmVudE5vZGUuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5UGFyZW50Tm9kZSB8fCBjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFB1Ymxpc2hlZEl0ZW1zTm9kZSkKLSAgICB7Ci0gICAgICAvLyBRdWVyeSBmb2xkZXIgLT4gUmVnaXN0cnkKLSAgICAgIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKShjdXJyZW50Tm9kZS5nZXRQYXJlbnQoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlIHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUgfHwgY3VycmVudE5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICB7Ci0gICAgICAvLyBpdGVtTm9kZSAtPiBQdWJsaXNoZWQgSXRlbXMgZm9sZGVyIC0+IFJlZ2lzdHJ5Ci0gICAgICAvLyBPUjoKLSAgICAgIC8vIGl0ZW1Ob2RlIC0+IFF1ZXJ5Tm9kZSAtPiBRdWVyeSBmb2xkZXIgLT4gUmVnaXN0cnkKLSAgICAgIE5vZGUgcGFyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmdldFBhcmVudCgpOwotICAgICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgICAgIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKShwYXJlbnROb2RlLmdldFBhcmVudCgpLmdldFBhcmVudCgpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpcGFyZW50Tm9kZS5nZXRQYXJlbnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlZ05vZGU7ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESU5hdmlnYXRvckZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2M4Y2QzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb2xkZXJOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVURESU5hdmlnYXRvckZvbGRlck5vZGUgZXh0ZW5kcyBGb2xkZXJOb2RlCi17Ci0gIHB1YmxpYyBVRERJTmF2aWdhdG9yRm9sZGVyTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBUb2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXyxpc09wZW5fKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGZhbHNlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElOYXZpZ2F0b3JOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESU5hdmlnYXRvck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRlMDcyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESU5hdmlnYXRvck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVURESU5hdmlnYXRvck5vZGUgZXh0ZW5kcyBOb2RlCi17Ci0gIHB1YmxpYyBVRERJTmF2aWdhdG9yTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgsU3RyaW5nIGltYWdlUGF0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLGltYWdlUGF0aCk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBUb2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXyxpc09wZW5fKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESVBlcnNwZWN0aXZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESVBlcnNwZWN0aXZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2JkYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElQZXJzcGVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyNCAgIDEyMjc1MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXMuRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5BZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc01haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuT3BlblJlZ2lzdHJ5QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQ2F0ZWdvcnlNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5VRERJTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLklGYXZvcml0ZXNVRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVURESVBlcnNwZWN0aXZlIGV4dGVuZHMgUGVyc3BlY3RpdmUKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUga25vd25SZWdpc3RyaWVzXzsKLSAgcHJpdmF0ZSBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGRlZmF1bHRVRERJUmVnaXN0cnlfOwotICBwcml2YXRlIE1vZGVsIG5hdmlnYXRvck1vZGVsXzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBpbnQgd3NkbFR5cGVfOwotICBwcml2YXRlIEhhc2h0YWJsZSBjYXRlZ29yeU1hbmFnZXJzXzsKLSAgU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5XzsKLSAgCi0gIC8vIFdpbmRvdyBzaXplcwotICBwcml2YXRlIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICBwcml2YXRlIFN0cmluZyBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICBwcml2YXRlIFN0cmluZyBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotCi0gIHB1YmxpYyBVRERJUGVyc3BlY3RpdmUoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoInVkZGkiLGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdFBlcnNwZWN0aXZlKFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0gICAgU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXMgPSBjb250cm9sbGVyXy5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKTsKLQlGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0IGZhdlJlZ1R5cGVEZWZhdWx0ID0gbmV3IEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQoZGVmYXVsdEZhdm9yaXRlcyk7Ci0gICAgSUZhdm9yaXRlc1VERElSZWdpc3RyeVtdIGZhdlJlZ2lzdHJpZXNEZWZhdWx0ID0gZmF2UmVnVHlwZURlZmF1bHQuZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJpZXMoKTsKLSAgICBrbm93blJlZ2lzdHJpZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZvciAoaW50IGk9MDtpPGZhdlJlZ2lzdHJpZXNEZWZhdWx0Lmxlbmd0aDtpKyspCi0gICAgewotICAgICAga25vd25SZWdpc3RyaWVzXy5wdXQoZmF2UmVnaXN0cmllc0RlZmF1bHRbaV0uZ2V0SW5xdWlyeVVSTCgpLGZhdlJlZ2lzdHJpZXNEZWZhdWx0W2ldKTsKLSAgICB9Ci0gICAgaWYgKGZhdlJlZ2lzdHJpZXNEZWZhdWx0Lmxlbmd0aCA+IDApCi0gICAgICBkZWZhdWx0VURESVJlZ2lzdHJ5XyA9IGZhdlJlZ2lzdHJpZXNEZWZhdWx0WzBdOwotICAgIAotICAgIG5hdmlnYXRvck1vZGVsXyA9IG5ldyBCYXNpY01vZGVsKCJ1ZGRpTW9kZWwiKTsKLSAgICBVRERJTWFpbkVsZW1lbnQgdWRkaU1haW5FbGVtZW50ID0gbmV3IFVERElNYWluRWxlbWVudChnZXRNZXNzYWdlKCJOT0RFX05BTUVfVURESV9NQUlOIiksbmF2aWdhdG9yTW9kZWxfKTsKLSAgICBuYXZpZ2F0b3JNb2RlbF8uc2V0Um9vdEVsZW1lbnQodWRkaU1haW5FbGVtZW50KTsKLSAgICBuYXZpZ2F0b3JNYW5hZ2VyXyA9IG5ldyBOb2RlTWFuYWdlcihjb250cm9sbGVyXyk7Ci0gICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IG5ldyBVRERJTWFpbk5vZGUodWRkaU1haW5FbGVtZW50LG5hdmlnYXRvck1hbmFnZXJfKTsKLSAgICBuYXZpZ2F0b3JNYW5hZ2VyXy5zZXRSb290Tm9kZSh1ZGRpTWFpbk5vZGUpOwotCi0gICAgd3NkbFR5cGVfID0gVURESUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0U7Ci0gICAgY2F0ZWdvcnlNYW5hZ2Vyc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBjYXRlZ29yeSBtb2RlbHMuCi0gICAgaWYgKGFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZSgiY29tbW9uQ2F0ZWdvcnlNb2RlbHMiKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHN5bmNocm9uaXplZCAoYXBwbGljYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGlmIChhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoImNvbW1vbkNhdGVnb3J5TW9kZWxzIikgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEhhc2h0YWJsZSBjb21tb25DYXRlZ29yeU1vZGVscyA9IG5ldyBIYXNodGFibGUoKTsKLQkJICAKLSAgICAgICAgICBDYXRlZ29yeU1vZGVsIG5haWNzTW9kZWwgPSBuZXcgQ2F0ZWdvcnlNb2RlbCgpOwotICAgICAgICAgIG5haWNzTW9kZWwuc2V0U2VydmxldENvbnRleHQoYXBwbGljYXRpb24pOwotICAgICAgICAgIG5haWNzTW9kZWwuc2V0RGVmYXVsdERhdGFGaWxlKCIvdWRkaS9kYXRhL25haWNzLWRhdGEudHh0Iik7Ci0gICAgICAgICAgbmFpY3NNb2RlbC5zZXREaXNwbGF5TmFtZShnZXRNZXNzYWdlKCJGT1JNX09QVElPTl9DQVRFR09SWV9OQUlDUyIpKTsKLSAgICAgICAgICBuYWljc01vZGVsLnNldFRNb2RlbEtleShUTW9kZWwuTkFJQ1NfVE1PREVMX0tFWSk7Ci0gICAgICAgICAgY29tbW9uQ2F0ZWdvcnlNb2RlbHMucHV0KFRNb2RlbC5OQUlDU19UTU9ERUxfS0VZLG5haWNzTW9kZWwpOwotICAgICAgICAgIAotICAgICAgICAgIENhdGVnb3J5TW9kZWwgdW5zcHNjTW9kZWwgPSBuZXcgQ2F0ZWdvcnlNb2RlbCgpOwotCQkgIHVuc3BzY01vZGVsLnNldFNlcnZsZXRDb250ZXh0KGFwcGxpY2F0aW9uKTsKLSAgICAgICAgICB1bnNwc2NNb2RlbC5zZXREZWZhdWx0RGF0YUZpbGUoIi91ZGRpL2RhdGEvdW5zcHNjLWRhdGEudHh0Iik7Ci0gICAgICAgICAgdW5zcHNjTW9kZWwuc2V0RGlzcGxheU5hbWUoZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQ0FURUdPUllfVU5TUFNDXzczIikpOwotICAgICAgICAgIHVuc3BzY01vZGVsLnNldFRNb2RlbEtleShUTW9kZWwuVU5TUFNDXzczX1RNT0RFTF9LRVkpOwotICAgICAgICAgIGNvbW1vbkNhdGVnb3J5TW9kZWxzLnB1dChUTW9kZWwuVU5TUFNDXzczX1RNT0RFTF9LRVksdW5zcHNjTW9kZWwpOwotICAgICAgICAgIAotICAgICAgICAgIENhdGVnb3J5TW9kZWwgZ2VvTW9kZWwgPSBuZXcgQ2F0ZWdvcnlNb2RlbCgpOwotCQkgIGdlb01vZGVsLnNldFNlcnZsZXRDb250ZXh0KGFwcGxpY2F0aW9uKTsKLSAgICAgICAgICBnZW9Nb2RlbC5zZXREZWZhdWx0RGF0YUZpbGUoIi91ZGRpL2RhdGEvZ2VvLWRhdGEudHh0Iik7Ci0gICAgICAgICAgZ2VvTW9kZWwuc2V0RGlzcGxheU5hbWUoZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQ0FURUdPUllfR0VPIikpOwotICAgICAgICAgIGdlb01vZGVsLnNldFRNb2RlbEtleShUTW9kZWwuSVNPX0NIX1RNT0RFTF9LRVkpOwotICAgICAgICAgIGNvbW1vbkNhdGVnb3J5TW9kZWxzLnB1dChUTW9kZWwuSVNPX0NIX1RNT0RFTF9LRVksZ2VvTW9kZWwpOwotICAgICAgICAgIAotICAgICAgICAgIGFwcGxpY2F0aW9uLnNldEF0dHJpYnV0ZSgiY29tbW9uQ2F0ZWdvcnlNb2RlbHMiLGNvbW1vbkNhdGVnb3J5TW9kZWxzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRlZ29yeVRNb2RlbEtleV8gPSBudWxsOwotICAgIAotICAgIC8vIFN0YXJ0aW5nIGZyYW1lc2V0IHNpemVzLgotICAgIGlmICghRGlyVXRpbHMuaXNSVEwoKSkKLSAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiMzAlLCoiOwotICAgIGVsc2UKLSAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiKiwzMCUiOwotICAgIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSAiNzUlLCoiOwotICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIEhhc2h0YWJsZSBnZXRLbm93blJlZ2lzdHJpZXMoKQotICB7Ci0gICAgLy8gV2UgbXVzdCBhbHdheXMgcXVlcnkgdGhlIGZhdm9yaXRlcyB0byBzZWUgaWYgYWRkaXRpb25hbCByZWdpc3RyaWVzIHdlcmUgYWRkZWQgb3ZlciB0aW1lLiBUaGlzIHByb3BlcnR5IGNhbm5vdCBiZSBjYWNoZWQuCi0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSAoRmF2b3JpdGVzTWFpbkVsZW1lbnQpKGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQgZmF2UmVnRm9sZGVyRWxlbWVudCA9IGZhdk1haW5FbGVtZW50LmdldEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZmF2UmVnRm9sZGVyRWxlbWVudC5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IGZhdlJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgICAgaWYgKGtub3duUmVnaXN0cmllc18uZ2V0KGlucXVpcnlVUkwpID09IG51bGwpCi0gICAgICAgIGtub3duUmVnaXN0cmllc18ucHV0KGlucXVpcnlVUkwsZmF2UmVnRWxlbWVudC5nZXRJRmF2b3JpdGVzVURESVJlZ2lzdHJ5SW50ZXJmYWNlKCkpOwotICAgIH0KLSAgICByZXR1cm4ga25vd25SZWdpc3RyaWVzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0S25vd25SZWdpc3RyeVB1Ymxpc2hVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGtub3duUmVnaXN0cnkgPSAoSUZhdm9yaXRlc1VERElSZWdpc3RyeSlnZXRLbm93blJlZ2lzdHJpZXMoKS5nZXQoaW5xdWlyeVVSTCk7Ci0gICAgaWYgKGtub3duUmVnaXN0cnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IGtub3duUmVnaXN0cnkuZ2V0UHVibGlzaFVSTCgpOwotICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSkKLSAgICAgICAgcmV0dXJuIHB1Ymxpc2hVUkw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRLbm93blJlZ2lzdHJ5UmVnaXN0cmF0aW9uVVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgSUZhdm9yaXRlc1VERElSZWdpc3RyeSBrbm93blJlZ2lzdHJ5ID0gKElGYXZvcml0ZXNVRERJUmVnaXN0cnkpZ2V0S25vd25SZWdpc3RyaWVzKCkuZ2V0KGlucXVpcnlVUkwpOwotICAgIGlmIChrbm93blJlZ2lzdHJ5ICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IGtub3duUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHJlZ2lzdHJhdGlvblVSTCkpCi0gICAgICAgIHJldHVybiByZWdpc3RyYXRpb25VUkw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGdldERlZmF1bHRVRERJUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRVRERJUmVnaXN0cnlfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBwcmVsb2FkVURESVJlZ2lzdHJpZXMoU3RyaW5nW10gaW5xdWlyeVVSTHMsIFN0cmluZ1tdIHB1Ymxpc2hVUkxzKQotICB7Ci0gICAgaWYgKGlucXVpcnlVUkxzICE9IG51bGwpCi0gICAgewotICAgICAgSGFzaHRhYmxlIGtub3duUmVnaXN0cmllcyA9IGdldEtub3duUmVnaXN0cmllcygpOwotICAgICAgU3RyaW5nQnVmZmVyIGRpcmVjdG9yeUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5xdWlyeVVSTHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0JCVN0cmluZyBpbnF1aXJ5VVJMID0gVVJMVXRpbHMuZGVjb2RlKGlucXVpcnlVUkxzW2ldKTsKLSAgICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBudWxsOwotICAgICAgICBTdHJpbmcgcmVnTmFtZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyByZWdpc3RyYXRpb25VUkwgPSBudWxsOwotICAgICAgICAvLyBjb250aW51ZSB0byB0aGUgbmV4dCByZWdpc3RyeSBpZiBpbnF1aXJ5VVJMIGRvZXMgbm90IGV4aXN0Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlVUkwpKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBwb3B1bGF0ZSBhbmQgcnVuIGFuIE9wZW5SZWdpc3RyeUFjdGlvbgotICAgICAgICBPcGVuUmVnaXN0cnlBY3Rpb24gYWN0aW9uID0gbmV3IE9wZW5SZWdpc3RyeUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgSUZhdm9yaXRlc1VERElSZWdpc3RyeSBrbm93blJlZ2lzdHJ5ID0gKElGYXZvcml0ZXNVRERJUmVnaXN0cnkpa25vd25SZWdpc3RyaWVzLmdldChpbnF1aXJ5VVJMKTsKLSAgICAgICAgYm9vbGVhbiBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IGZhbHNlOwotICAgICAgICBGaWxlIGRpcmVjdG9yeUZpbGUgPSBudWxsOwotICAgICAgICBpZiAoa25vd25SZWdpc3RyeSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGlzaFVSTCA9IGtub3duUmVnaXN0cnkuZ2V0UHVibGlzaFVSTCgpOwotICAgICAgICAgIHJlZ05hbWUgPSBrbm93blJlZ2lzdHJ5LmdldE5hbWUoKTsKLSAgICAgICAgICByZWdpc3RyYXRpb25VUkwgPSBrbm93blJlZ2lzdHJ5LmdldFJlZ2lzdHJhdGlvblVSTCgpOwotICAgICAgICAgIGRpcmVjdG9yeUJ1ZmZlci5zZXRMZW5ndGgoMCk7Ci0gICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5mb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShkaXJlY3RvcnlCdWZmZXIsY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSxyZWdOYW1lKTsKLSAgICAgICAgICBkaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGlmIChkaXJlY3RvcnlGaWxlLmV4aXN0cygpICYmIGRpcmVjdG9yeUZpbGUubGlzdEZpbGVzKCkubGVuZ3RoID4gMCkKLSAgICAgICAgICAgIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVnTmFtZSA9PSBudWxsKQotICAgICAgICAgIHJlZ05hbWUgPSBpbnF1aXJ5VVJMOwotICAgICAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsICYmIHB1Ymxpc2hVUkxzICE9IG51bGwgJiYgaSA8IHB1Ymxpc2hVUkxzLmxlbmd0aCAmJiBwdWJsaXNoVVJMc1tpXSAhPSBudWxsKSB7Ci0gICAgICAgICAgcHVibGlzaFVSTCA9IFVSTFV0aWxzLmRlY29kZShwdWJsaXNoVVJMc1tpXSk7Ci0gICAgICAgIH0gIAotICAgICAgICAvLyBwb3B1bGF0ZSB0aGUgYWN0aW9uCi0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwsIGlucXVpcnlVUkwpOwotICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUsIHJlZ05hbWUpOwotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9VUkwsIHB1Ymxpc2hVUkwpOwotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHJlZ2lzdHJhdGlvblVSTCkpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSQVRJT05fVVJMLCByZWdpc3RyYXRpb25VUkwpOwotICAgICAgICAgIAotICAgICAgICAvLyBDaGVjayBpZiBwcml2YXRlIHJlZ2lzdHJ5IGNhdGVnb3J5IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhpcyByZWdpc3RyeS4KLSAgICAgICAgZGlyZWN0b3J5QnVmZmVyLnNldExlbmd0aCgwKTsKLSAgICAgICAgU3RyaW5nIGVuY29kZWRJbnF1aXJ5VVJMID0gVVJMVXRpbHMuZW5jb2RlKGlucXVpcnlVUkwpOwotICAgICAgICBkaXJlY3RvcnlCdWZmZXIuYXBwZW5kKGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkpLmFwcGVuZChlbmNvZGVkSW5xdWlyeVVSTCkuYXBwZW5kKCIucHJvcGVydGllcyIpOwotICAgICAgICBkaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoZGlyZWN0b3J5RmlsZS5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkaXJlY3RvcnlGaWxlKTsKLSAgICAgICAgICAgIHAubG9hZChmaW4pOwotICAgICAgICAgICAgZmluLmNsb3NlKCk7Ci0gICAgICAgICAgICBkaXJlY3RvcnlGaWxlLmRlbGV0ZSgpOwotICAgICAgICAgICAgU3RyaW5nIGRhdGFEaXJlY3RvcnkgPSBwLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUklFU19ESVJFQ1RPUlkpOwotICAgICAgICAgICAgaWYgKGRhdGFEaXJlY3RvcnkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5DQVRFR09SSUVTX0RJUkVDVE9SWSxkYXRhRGlyZWN0b3J5KTsKLSAgICAgICAgICAgIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5DSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUyxCb29sZWFuLlRSVUUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5yZW1vdmUoVURESUFjdGlvbklucHV0cy5DSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICAgICAgIGFjdGlvbi5ydW4oKTsKLSAgICAgICAgCi0gICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCkobmF2aWdhdG9yTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgICAgIEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCk7Ci0gICAgICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXMgIT0gbnVsbCAmJiB1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGFjdGlvbjIgPSBuZXcgQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgICAgU3RyaW5nIGNhdGVnb3JpZXNEaXJlY3RvcnkgPSByZWdFbGVtZW50LmdldENhdGVnb3JpZXNEaXJlY3RvcnkoKTsKLSAgICAgICAgICBpZiAoY2F0ZWdvcmllc0RpcmVjdG9yeSAhPSBudWxsKQotICAgICAgICAgICAgYWN0aW9uMi5saW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyxjYXRlZ29yaWVzRGlyZWN0b3J5KTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY3Rpb24yLmxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEocmVnRWxlbWVudC5nZXROYW1lKCksdXNlckRlZmluZWRDYXRlZ29yaWVzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGlucXVpcnlVUkxzLmxlbmd0aCA+IDApCi0gICAgICAgIGNvbnRyb2xsZXJfLnNldEN1cnJlbnRQZXJzcGVjdGl2ZShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSk7Ci0gICAgfQotICB9Ci0gIAotICAvLyBQcmVjb25kaXRpb25zOiAKLSAgLy8gc2VydmljZU5hbWVzIGFuZCBzZXJ2aWNlS2V5cyBoYXZlIGxlbmd0aCA+PSAxLgotICAvLyByZWdOb2RlICE9IG51bGwKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHByZWxvYWRTZXJ2aWNlc0ZvclJlZ2lzdHJ5KFJlZ2lzdHJ5Tm9kZSByZWdOb2RlLFN0cmluZ1tdIHNlcnZpY2VOYW1lcyxTdHJpbmdbXSBzZXJ2aWNlS2V5cykKLSAgewotICAgIGludCByZWdOb2RlSWQgPSByZWdOb2RlLmdldE5vZGVJZCgpOwotICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VLZXlzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgbmF2aWdhdG9yTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQocmVnTm9kZUlkKTsKLSAgICAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSxzZXJ2aWNlTmFtZXNbaV0pOwotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLHNlcnZpY2VLZXlzW2ldKTsKLSAgICAgIGFjdGlvbi5ydW4oKTsKLSAgICAgIG5hdmlnYXRvck1hbmFnZXJfLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBwcmVsb2FkU2VydmljZXMoU3RyaW5nW10gaW5xdWlyeVVSTHMsU3RyaW5nW10gc2VydmljZU5hbWVzLFN0cmluZ1tdIHNlcnZpY2VLZXlzKQotICB7Ci0gICAgLy8gVGhlIGFsZ29yaXRobSB3aWxsIHNlYXJjaCBmb3IgZWFjaCBzZXJ2aWNlIGtleSBpbiBlYWNoIGlucXVpcnkgVVJMLgotICAgIGlmIChzZXJ2aWNlS2V5cyAhPSBudWxsICYmIHNlcnZpY2VOYW1lcyAhPSBudWxsICYmIHNlcnZpY2VOYW1lcy5sZW5ndGggPT0gc2VydmljZUtleXMubGVuZ3RoKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VLZXlzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChpbnF1aXJ5VVJMcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gRWxpbWluYXRlIGR1cGxpY2F0ZSBpbnF1aXJ5IFVSTHMuCi0gICAgICAgICAgSGFzaHRhYmxlIGlucXVpcnlVUkxzSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgICBmb3IgKGludCBqPTA7ajxpbnF1aXJ5VVJMcy5sZW5ndGg7aisrKQotICAgICAgICAgICAgaW5xdWlyeVVSTHNIYXNoLnB1dChpbnF1aXJ5VVJMc1tqXSxCb29sZWFuLlRSVUUpOwotICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIGF2YWlsYWJsZSByZWdpc3RyaWVzIGFuZCB1c2UgdGhlbSBpZiBwb3NzaWJsZS4KLSAgICAgICAgICBOb2RlIHVkZGlNYWluTm9kZSA9IG5hdmlnYXRvck1hbmFnZXJfLmdldFJvb3ROb2RlKCk7Ci0gICAgICAgICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSB1ZGRpTWFpbk5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgIGZvciAoaW50IGs9MDtrPHJlZ2lzdHJ5Tm9kZXMuc2l6ZSgpO2srKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpcmVnaXN0cnlOb2Rlcy5lbGVtZW50QXQoayk7Ci0gICAgICAgICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgICAgU3RyaW5nIGV4aXN0aW5nUmVnaXN0cnlJbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICAgICAgICBpZiAoaW5xdWlyeVVSTHNIYXNoLmdldChleGlzdGluZ1JlZ2lzdHJ5SW5xdWlyeVVSTCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcHJlbG9hZFNlcnZpY2VzRm9yUmVnaXN0cnkocmVnTm9kZSxzZXJ2aWNlTmFtZXMsc2VydmljZUtleXMpOwotICAgICAgICAgICAgICBpbnF1aXJ5VVJMc0hhc2gucmVtb3ZlKGV4aXN0aW5nUmVnaXN0cnlJbnF1aXJ5VVJMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgRW51bWVyYXRpb24gaW5xdWlyeVVSTHNFbnVtID0gaW5xdWlyeVVSTHNIYXNoLmtleXMoKTsKLSAgICAgICAgICB3aGlsZSAoaW5xdWlyeVVSTHNFbnVtLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gKFN0cmluZylpbnF1aXJ5VVJMc0VudW0ubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHByZWxvYWRVRERJUmVnaXN0cmllcyhuZXcgU3RyaW5nW10ge2lucXVpcnlVUkx9LG51bGwpOwotICAgICAgICAgICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKW5hdmlnYXRvck1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICAgICAgcHJlbG9hZFNlcnZpY2VzRm9yUmVnaXN0cnkocmVnTm9kZSxzZXJ2aWNlTmFtZXMsc2VydmljZUtleXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENhdGVnb3J5VE1vZGVsS2V5KFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSkKLSAgewotICAgIGNhdGVnb3J5VE1vZGVsS2V5XyA9IGNhdGVnb3J5VE1vZGVsS2V5OwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENhdGVnb3J5VE1vZGVsS2V5KCkKLSAgewotICAgIHJldHVybiBjYXRlZ29yeVRNb2RlbEtleV87Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCBpbml0Q2F0ZWdvcnlCcm93c2VyKENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIFRyZWVFbGVtZW50IGNhdGVnb3J5Um9vdEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpY2F0ZWdvcnlNb2RlbC5nZXRSb290RWxlbWVudCgpOwotICAgIFJvb3RDYXRlZ29yeU5vZGUgcm9vdENhdGVnb3J5Tm9kZSA9IG5ldyBSb290Q2F0ZWdvcnlOb2RlKGNhdGVnb3J5Um9vdEVsZW1lbnQsbm9kZU1hbmFnZXIpOwotICAgIG5vZGVNYW5hZ2VyLnNldFJvb3ROb2RlKHJvb3RDYXRlZ29yeU5vZGUpOwotICAgIHJvb3RDYXRlZ29yeU5vZGUuY3JlYXRlQ2hpbGRyZW4oKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIE5vZGVNYW5hZ2VyIGdldENhdGVnb3J5TWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gKE5vZGVNYW5hZ2VyKWNhdGVnb3J5TWFuYWdlcnNfLmdldChjYXRlZ29yeVRNb2RlbEtleV8pOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0Q2F0ZWdvcnlNYW5hZ2VyKENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCkKLSAgewotICAgIFN0cmluZyB0TW9kZWxLZXkgPSBjYXRlZ29yeU1vZGVsLmdldFRNb2RlbEtleSgpOwotICAgIE5vZGVNYW5hZ2VyIGNhdGVnb3J5TWFuYWdlciA9IChOb2RlTWFuYWdlciljYXRlZ29yeU1hbmFnZXJzXy5nZXQodE1vZGVsS2V5KTsKLSAgICBpZiAoY2F0ZWdvcnlNYW5hZ2VyID09IG51bGwpCi0gICAgewotICAgICAgY2F0ZWdvcnlNYW5hZ2VyID0gbmV3IE5vZGVNYW5hZ2VyKGNvbnRyb2xsZXJfKTsKLSAgICAgIGluaXRDYXRlZ29yeUJyb3dzZXIoY2F0ZWdvcnlNb2RlbCxjYXRlZ29yeU1hbmFnZXIpOwotICAgICAgY2F0ZWdvcnlNYW5hZ2Vyc18ucHV0KHRNb2RlbEtleSxjYXRlZ29yeU1hbmFnZXIpOyAgICAgIAotICAgIH0KLSAgICByZXR1cm4gY2F0ZWdvcnlNYW5hZ2VyOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGVNYW5hZ2VyIGdldE5hdmlnYXRvck1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIG5hdmlnYXRvck1hbmFnZXJfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIGdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFdTRExUeXBlKGludCB3c2RsVHlwZSkKLSAgewotICAgIHdzZGxUeXBlXyA9IHdzZGxUeXBlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRXU0RMVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gd3NkbFR5cGVfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RnJhbWVzZXRzRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvc2NyaXB0cy91ZGRpZnJhbWVzZXRzLmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQYW5lc0ZpbGUoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJuYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAicHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAic3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9zdGF0dXNfY29udGVudC5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVQZXJzcGVjdGl2ZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgLy9yZXR1cm4gU2F2ZVVERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKCk7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICB7Ci0gICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICB7Ci0gICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gIHsKLSAgICByZXR1cm4gc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICB7Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gIHsKLSAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKQotICB7Ci0gICAgcmV0dXJuIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICByZXR1cm4gU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbi5nZXRGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGZvckhpc3RvcnkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVW5wdWJsaXNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VucHVibGlzaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcyMjc2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVW5wdWJsaXNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVucHVibGlzaFRvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwdWJsaWMgVW5wdWJsaXNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGVuYWJsZUltYWdlLCBTdHJpbmcgaGlnaGxpZ2h0SW1hZ2UsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgZW5hYmxlSW1hZ2UsIGhpZ2hsaWdodEltYWdlLCBhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvZm9ybXMvVW5wdWJsaXNoRm9ybS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvdXRpbC9VZGRpNGpIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS91dGlsL1VkZGk0akhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTdiMmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS91dGlsL1VkZGk0akhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MTAwNCAgIDE0ODA1MiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5PdmVydmlld0RvYzsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk92ZXJ2aWV3VVJMOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5BY2Nlc3NQb2ludDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuQmluZGluZ1RlbXBsYXRlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGVzOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5JbnN0YW5jZURldGFpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLlRNb2RlbEluc3RhbmNlRGV0YWlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuVE1vZGVsSW5zdGFuY2VJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotaW1wb3J0IG9yZy53M2MuZG9tLkNoYXJhY3RlckRhdGE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgVWRkaTRqSGVscGVyCi17Ci0gIHB1YmxpYyBmaW5hbCBLZXllZFJlZmVyZW5jZSBnZXRXU0RMS2V5ZWRSZWZlcmVuY2UoKQotICB7Ci0gICAgS2V5ZWRSZWZlcmVuY2Uga2V5UmVmID0gbmV3IEtleWVkUmVmZXJlbmNlKCJ0eXBlcyIsICJ3c2RsU3BlYyIpOwotICAgIGtleVJlZi5zZXRUTW9kZWxLZXkoIlVVSUQ6QzFBQ0YyNkQtOTY3Mi00NDA0LTlENzAtMzlCNzU2RTYyQUI0Iik7Ci0gICAgcmV0dXJuIGtleVJlZjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUTW9kZWwgbmV3VE1vZGVsKFN0cmluZyB3c2RsVXJsKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG5ld1RNb2RlbCh3c2RsVXJsLCBnZXRXU0RMRGVmaW5pdGlvbih3c2RsVXJsKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVE1vZGVsIG5ld1RNb2RlbChTdHJpbmcgd3NkbFVybCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBUTW9kZWwgdE1vZGVsID0gbmV3IFRNb2RlbCgpOwotICAgIHRNb2RlbC5zZXRUTW9kZWxLZXkoIiIpOwotICAgIHRNb2RlbC5zZXROYW1lKGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgdE1vZGVsLnNldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygiIik7Ci0gICAgT3ZlcnZpZXdEb2Mgb3ZlcnZpZXdEb2MgPSBuZXcgT3ZlcnZpZXdEb2MoKTsKLSAgICBvdmVydmlld0RvYy5zZXRPdmVydmlld1VSTCh3c2RsVXJsKTsKLSAgICB0TW9kZWwuc2V0T3ZlcnZpZXdEb2Mob3ZlcnZpZXdEb2MpOwotICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgIFZlY3RvciBrZXlSZWZWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAga2V5UmVmVmVjdG9yLmFkZChnZXRXU0RMS2V5ZWRSZWZlcmVuY2UoKSk7Ci0gICAgY2F0QmFnLnNldEtleWVkUmVmZXJlbmNlVmVjdG9yKGtleVJlZlZlY3Rvcik7Ci0gICAgdE1vZGVsLnNldENhdGVnb3J5QmFnKGNhdEJhZyk7Ci0gICAgcmV0dXJuIHRNb2RlbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBCdXNpbmVzc1NlcnZpY2UgbmV3QnVzaW5lc3NTZXJ2aWNlKFN0cmluZyB3c2RsVXJsLCBIYXNodGFibGUgdE1vZGVsc1RhYmxlKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG5ld0J1c2luZXNzU2VydmljZSh3c2RsVXJsLCBnZXRXU0RMRGVmaW5pdGlvbih3c2RsVXJsKSwgdE1vZGVsc1RhYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBCdXNpbmVzc1NlcnZpY2UgbmV3QnVzaW5lc3NTZXJ2aWNlKFN0cmluZyB3c2RsVXJsLCBEZWZpbml0aW9uIGRlZiwgSGFzaHRhYmxlIHRNb2RlbHNUYWJsZSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJ1c2luZXNzU2VydmljZSBicyA9IG5ldyBCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICBicy5zZXRTZXJ2aWNlS2V5KCIiKTsKLSAgICBCaW5kaW5nVGVtcGxhdGVzIGJpbmRpbmdUZW1wbGF0ZXMgPSBuZXcgQmluZGluZ1RlbXBsYXRlcygpOwotICAgIFZlY3RvciBiaW5kaW5nVGVtcGxhdGVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gKFNlcnZpY2VbXSlkZWYuZ2V0U2VydmljZXMoKS52YWx1ZXMoKS50b0FycmF5KG5ldyBTZXJ2aWNlWzBdKTsKLSAgICBpZiAoc2VydmljZXMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBQb3J0W10gcG9ydHMgPSAoUG9ydFtdKXNlcnZpY2VzWzBdLmdldFBvcnRzKCkudmFsdWVzKCkudG9BcnJheShuZXcgUG9ydFswXSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvcnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBUTW9kZWxJbnN0YW5jZURldGFpbHMgdE1vZGVsRGV0YWlscyA9IG5ldyBUTW9kZWxJbnN0YW5jZURldGFpbHMoKTsKLSAgICAgICAgVmVjdG9yIHRNb2RlbEluZm9WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKXRNb2RlbHNUYWJsZS5nZXQocG9ydHNbaV0uZ2V0QmluZGluZygpLmdldFBvcnRUeXBlKCkuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIHRNb2RlbEluZm9WZWN0b3IuYWRkKGNyZWF0ZVRNb2RlbEluc3RhbmNlSW5mbyh3c2RsVXJsLCBwb3J0c1tpXSwgdE1vZGVsLmdldFRNb2RlbEtleSgpKSk7Ci0gICAgICAgIHRNb2RlbERldGFpbHMuc2V0VE1vZGVsSW5zdGFuY2VJbmZvVmVjdG9yKHRNb2RlbEluZm9WZWN0b3IpOwotICAgICAgICBCaW5kaW5nVGVtcGxhdGUgYmluZGluZ1RlbXBsYXRlID0gbmV3IEJpbmRpbmdUZW1wbGF0ZSgpOwotICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGNyZWF0ZURlc2NyaXB0aW9uKHBvcnRzW2ldKSk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRBY2Nlc3NQb2ludChjcmVhdGVBY2Nlc3NQb2ludChwb3J0c1tpXSkpOwotICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKHRNb2RlbERldGFpbHMpOwotICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0QmluZGluZ0tleSgiIik7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZVZlY3Rvci5hZGQoYmluZGluZ1RlbXBsYXRlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYmluZGluZ1RlbXBsYXRlcy5zZXRCaW5kaW5nVGVtcGxhdGVWZWN0b3IoYmluZGluZ1RlbXBsYXRlVmVjdG9yKTsKLSAgICBicy5zZXRCaW5kaW5nVGVtcGxhdGVzKGJpbmRpbmdUZW1wbGF0ZXMpOwotICAgIHJldHVybiBiczsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBuZXdCdXNpbmVzc1NlcnZpY2UoU3RyaW5nIHdzZGxVcmwsIERlZmluaXRpb24gZGVmLCBUTW9kZWxbXSB0TW9kZWxzKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gbmV3IEJ1c2luZXNzU2VydmljZSgpOwotICAgIGJzLnNldFNlcnZpY2VLZXkoIiIpOwotICAgIEJpbmRpbmdUZW1wbGF0ZXMgYmluZGluZ1RlbXBsYXRlcyA9IG5ldyBCaW5kaW5nVGVtcGxhdGVzKCk7Ci0gICAgVmVjdG9yIGJpbmRpbmdUZW1wbGF0ZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSAoU2VydmljZVtdKWRlZi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkobmV3IFNlcnZpY2VbMF0pOwotICAgIGlmIChzZXJ2aWNlcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFBvcnRbXSBwb3J0cyA9IChQb3J0W10pc2VydmljZXNbMF0uZ2V0UG9ydHMoKS52YWx1ZXMoKS50b0FycmF5KG5ldyBQb3J0WzBdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdE1vZGVscy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIFRNb2RlbEluc3RhbmNlRGV0YWlscyB0TW9kZWxEZXRhaWxzID0gbmV3IFRNb2RlbEluc3RhbmNlRGV0YWlscygpOwotICAgICAgICAgIFZlY3RvciB0TW9kZWxJbmZvVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIHRNb2RlbEluZm9WZWN0b3IuYWRkKGNyZWF0ZVRNb2RlbEluc3RhbmNlSW5mbyh3c2RsVXJsLCBwb3J0c1tpXSwgdE1vZGVsc1tqXS5nZXRUTW9kZWxLZXkoKSkpOwotICAgICAgICAgIHRNb2RlbERldGFpbHMuc2V0VE1vZGVsSW5zdGFuY2VJbmZvVmVjdG9yKHRNb2RlbEluZm9WZWN0b3IpOwotICAgICAgICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPSBuZXcgQmluZGluZ1RlbXBsYXRlKCk7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldERlZmF1bHREZXNjcmlwdGlvblN0cmluZyhjcmVhdGVEZXNjcmlwdGlvbihwb3J0c1tpXSkpOwotICAgICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRBY2Nlc3NQb2ludChjcmVhdGVBY2Nlc3NQb2ludChwb3J0c1tpXSkpOwotICAgICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRUTW9kZWxJbnN0YW5jZURldGFpbHModE1vZGVsRGV0YWlscyk7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldEJpbmRpbmdLZXkoIiIpOwotICAgICAgICAgIGJpbmRpbmdUZW1wbGF0ZVZlY3Rvci5hZGQoYmluZGluZ1RlbXBsYXRlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBiaW5kaW5nVGVtcGxhdGVzLnNldEJpbmRpbmdUZW1wbGF0ZVZlY3RvcihiaW5kaW5nVGVtcGxhdGVWZWN0b3IpOwotICAgIGJzLnNldEJpbmRpbmdUZW1wbGF0ZXMoYmluZGluZ1RlbXBsYXRlcyk7Ci0gICAgcmV0dXJuIGJzOwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gZ2V0V1NETERlZmluaXRpb24oU3RyaW5nIHdzZGxVcmwpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXZWJTZXJ2aWNlc1BhcnNlckV4dCBwYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLSAgICAgIFN0cmluZyBwcm94eVNldCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wcm94eVNldCIpOwotICAgICAgaWYgKHByb3h5U2V0ICE9IG51bGwgJiYgcHJveHlTZXQuZXF1YWxzKCJ0cnVlIikpCi0gICAgICB7Ci0gICAgICAgIHBhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5VXNlck5hbWUiKSk7Ci0gICAgICAgIHBhcnNlci5zZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5UGFzc3dvcmQiKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh3c2RsVXJsKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uUEFSU0VSX0VSUk9SLCBlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY3JlYXRlRGVzY3JpcHRpb24oUG9ydCBwb3J0KQotICB7Ci0gICAgU3RyaW5nIGRlc2MgPSBudWxsOwotICAgIEVsZW1lbnQgZSA9IHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgIHsKLSAgICAgIE5vZGUgbm9kZSA9IGUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOgotICAgICAgICAgIGNhc2UgTm9kZS5DREFUQV9TRUNUSU9OX05PREU6Ci0gICAgICAgICAgICBzYi5hcHBlbmQoKChDaGFyYWN0ZXJEYXRhKW5vZGUpLmdldERhdGEoKSk7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZGVzYyA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBkZXNjOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIFRNb2RlbEluc3RhbmNlSW5mbyBjcmVhdGVUTW9kZWxJbnN0YW5jZUluZm8oU3RyaW5nIHdzZGxVcmwsIFBvcnQgcG9ydCwgU3RyaW5nIHRNb2RlbEtleSkKLSAgewotICAgIEluc3RhbmNlRGV0YWlscyBkZXRhaWxzID0gbmV3IEluc3RhbmNlRGV0YWlscygpOwotICAgIE92ZXJ2aWV3RG9jIG92ZXJ2aWV3RG9jID0gbmV3IE92ZXJ2aWV3RG9jKCk7Ci0gICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluZm8gPSBuZXcgVE1vZGVsSW5zdGFuY2VJbmZvKCk7Ci0gICAgU3RyaW5nQnVmZmVyIG92ZXJ2aWV3VVJMU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcih3c2RsVXJsKTsKLSAgICBTdHJpbmcgcG9ydE5hbWUgPSBwb3J0LmdldE5hbWUoKTsKLSAgICBpZiAocG9ydE5hbWUgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIG92ZXJ2aWV3VVJMU3RyaW5nLmFwcGVuZCgiIyIpOwotICAgICAgb3ZlcnZpZXdVUkxTdHJpbmcuYXBwZW5kKHBvcnROYW1lKTsKLSAgICB9Ci0gICAgb3ZlcnZpZXdEb2Muc2V0T3ZlcnZpZXdVUkwobmV3IE92ZXJ2aWV3VVJMKG92ZXJ2aWV3VVJMU3RyaW5nLnRvU3RyaW5nKCkpKTsKLSAgICBkZXRhaWxzLnNldE92ZXJ2aWV3RG9jKG92ZXJ2aWV3RG9jKTsKLSAgICB0TW9kZWxJbmZvLnNldEluc3RhbmNlRGV0YWlscyhkZXRhaWxzKTsKLSAgICBpZiAodE1vZGVsS2V5ICE9IG51bGwpCi0gICAgICB0TW9kZWxJbmZvLnNldFRNb2RlbEtleSh0TW9kZWxLZXkpOwotICAgIHJldHVybiB0TW9kZWxJbmZvOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIEFjY2Vzc1BvaW50IGNyZWF0ZUFjY2Vzc1BvaW50KFBvcnQgcG9ydCkKLSAgewotICAgIEFjY2Vzc1BvaW50IGFjY2Vzc1BvaW50ID0gbnVsbDsKLSAgICBMaXN0IGxpc3QgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGlzdC5zaXplKCk7IGorKykKLSAgICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClsaXN0LmdldChqKTsKLSAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICAgeyAgCi0gICAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICgoU09BUEFkZHJlc3MpZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgYWNjZXNzUG9pbnQgPSBuZXcgQWNjZXNzUG9pbnQobG9jYXRpb25VUkksIGdldFVSTFR5cGUobG9jYXRpb25VUkkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgICAgewotICAgICAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSAoKEhUVFBBZGRyZXNzKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgIGFjY2Vzc1BvaW50ID0gbmV3IEFjY2Vzc1BvaW50KGxvY2F0aW9uVVJJLCBnZXRVUkxUeXBlKGxvY2F0aW9uVVJJKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYWNjZXNzUG9pbnQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVSTF9UWVBFX09USEVSID0gIm90aGVyIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVVJMX1RZUEVTID0gImh0dHAgaHR0cHMgbWFpbCBmdHAgZmF4IHBob25lIG90aGVyIjsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGdldFVSTFR5cGUoU3RyaW5nIHVybCkKLSAgewotICAgIGludCBpID0gdXJsLmluZGV4T2YoIjoiKTsKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBpZiAoaSA9PSAtMSkKLSAgICAgIHR5cGUgPSBVUkxfVFlQRV9PVEhFUjsKLSAgICBlbHNlCi0gICAgewotICAgICAgdHlwZSA9IHVybC5zdWJzdHJpbmcoMCwgaSk7Ci0gICAgICBpZiAodHlwZS5lcXVhbHMoIiIpIHx8IFVSTF9UWVBFUy5pbmRleE9mKHR5cGUpID09IC0xKQotICAgICAgICB0eXBlID0gVVJMX1RZUEVfT1RIRVI7Ci0gICAgfQotICAgIHJldHVybiB0eXBlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc01vbm9saXRoaWNXU0RMKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuIGhhc01lc3NhZ2UoZGVmKSAmJiBoYXNQb3J0VHlwZShkZWYpICYmIGhhc0JpbmRpbmcoZGVmKSAmJiBoYXNTZXJ2aWNlKGRlZik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzU2VydmljZUltcGxlbWVudChEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHJldHVybiBoYXNJbXBvcnQoZGVmKSAmJiBoYXNTZXJ2aWNlKGRlZik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzU2VydmljZUludGVyZmFjZShEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHJldHVybiBoYXNNZXNzYWdlKGRlZikgJiYgaGFzUG9ydFR5cGUoZGVmKSAmJiBoYXNCaW5kaW5nKGRlZik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzU2VydmljZUludGVyZmFjZVdpdGhCaW5kaW5nc09ubHkoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICByZXR1cm4gIWhhc1NlcnZpY2UoZGVmKSAmJiBoYXNCaW5kaW5nKGRlZik7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaGFzTWVzc2FnZShEZWZpbml0aW9uIGRlZikKLSAgewotICAgIGZvcihJdGVyYXRvciBpdCA9IGRlZi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICBpZiAoISgoTWVzc2FnZSlpdC5uZXh0KCkpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc1BvcnRUeXBlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgZm9yKEl0ZXJhdG9yIGl0ID0gZGVmLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICBpZiAoISgoUG9ydFR5cGUpaXQubmV4dCgpKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNCaW5kaW5nKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgZm9yKEl0ZXJhdG9yIGl0ID0gZGVmLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIGlmICghKChCaW5kaW5nKWl0Lm5leHQoKSkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzU2VydmljZShEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHJldHVybiAhZGVmLmdldFNlcnZpY2VzKCkuaXNFbXB0eSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0ltcG9ydChEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHJldHVybiAhZGVmLmdldEltcG9ydHMoKS5pc0VtcHR5KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRJbXBvcnRzKERlZmluaXRpb24gZGVmLCBTdHJpbmcgd3NkbFVybCkKLSAgewotICAKLQkgIAotCU1hcCBpbXBvcnRzTWFwID0gZGVmLmdldEltcG9ydHMoKTsKLSAgICBDb2xsZWN0aW9uIHZhbHVlcyA9IGltcG9ydHNNYXAudmFsdWVzKCk7Ci0gICAgSXRlcmF0b3IgaXQgPSB2YWx1ZXMuaXRlcmF0b3IoKTsKLSAgICAKLSAgICBWZWN0b3IgaW1wb3J0c1ZlYyA9IG5ldyBWZWN0b3IoKTsgIAotICAgIGZvcihpbnQgaSA9MDtpdC5oYXNOZXh0KCk7aSsrKXsKLSAgICAJQXJyYXlMaXN0IGFMaXN0ID0gKEFycmF5TGlzdClpdC5uZXh0KCk7Ci0gICAgICAgIEl0ZXJhdG9yIGl0SW1wb3J0cyA9IGFMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlKGl0SW1wb3J0cy5oYXNOZXh0KCkpewotICAgICAgICAJaW1wb3J0c1ZlYy5hZGQoaXRJbXBvcnRzLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgSW1wb3J0IGltcG9ydHNbXSA9IG5ldyBJbXBvcnRbaW1wb3J0c1ZlYy5zaXplKCldIDsKLSAgICBJdGVyYXRvciBpdFZlYyA9IGltcG9ydHNWZWMuaXRlcmF0b3IoKTsKLSAgICBmb3IoaW50IGogPSAwO2l0VmVjLmhhc05leHQoKTtqKyspewotICAgIAlpbXBvcnRzW2pdID0gKEltcG9ydClpdFZlYy5uZXh0KCk7Ci0gICAgfQotICAgIAotICAgIAotICAgIAotICAgIFN0cmluZ1tdIGltcG9ydFN0cmluZ3MgPSBuZXcgU3RyaW5nW2ltcG9ydHMubGVuZ3RoXTsKLSAgICBTdHJpbmcgczsKLSAgICBpZiAod3NkbFVybCAhPSBudWxsICYmIHdzZGxVcmwuaW5kZXhPZignLycpICE9IC0xKQotICAgICAgcyA9IHdzZGxVcmwuc3Vic3RyaW5nKDAsIHdzZGxVcmwubGFzdEluZGV4T2YoJy8nKSsxKTsKLSAgICBlbHNlCi0gICAgICBzID0gIiI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbXBvcnRTdHJpbmdzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IGltcG9ydHNbaV0uZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgIGlmIChsb2NhdGlvblVSSS5pbmRleE9mKCc6JykgIT0gLTEpCi0gICAgICAgIHNiLmFwcGVuZChsb2NhdGlvblVSSSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNiLmFwcGVuZChzKS5hcHBlbmQobG9jYXRpb25VUkkpOwotICAgICAgaW1wb3J0U3RyaW5nc1tpXSA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBpbXBvcnRTdHJpbmdzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMKEJ1c2luZXNzU2VydmljZSBicywgVURESVByb3h5IHByb3h5KQotICB7Ci0gICAgVmVjdG9yIGJpbmRpbmdUZW1wbGF0ZVZlY3RvciA9IGJzLmdldEJpbmRpbmdUZW1wbGF0ZXMoKS5nZXRCaW5kaW5nVGVtcGxhdGVWZWN0b3IoKTsKLSAgICBpZiAoYmluZGluZ1RlbXBsYXRlVmVjdG9yLnNpemUoKSA+IDApCi0gICAgewotICAgICAgQmluZGluZ1RlbXBsYXRlIGJ0ID0gKEJpbmRpbmdUZW1wbGF0ZSliaW5kaW5nVGVtcGxhdGVWZWN0b3IuZ2V0KDApOwotICAgICAgVE1vZGVsSW5zdGFuY2VEZXRhaWxzIHRNb2RlbERldGFpbHMgPSBidC5nZXRUTW9kZWxJbnN0YW5jZURldGFpbHMoKTsKLSAgICAgIGlmICh0TW9kZWxEZXRhaWxzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFZlY3RvciB0TW9kZWxJbmZvVmVjdG9yID0gdE1vZGVsRGV0YWlscy5nZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IoKTsKLSAgICAgICAgaWYgKHRNb2RlbEluZm9WZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIFRNb2RlbEluc3RhbmNlSW5mbyB0TW9kZWxJbmZvID0gKFRNb2RlbEluc3RhbmNlSW5mbyl0TW9kZWxJbmZvVmVjdG9yLmdldCgwKTsKLSAgICAgICAgICBJbnN0YW5jZURldGFpbHMgZGV0YWlscyA9IHRNb2RlbEluZm8uZ2V0SW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgICAgICAgaWYgKGRldGFpbHMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPdmVydmlld0RvYyBvdmVydmlld0RvYyA9IGRldGFpbHMuZ2V0T3ZlcnZpZXdEb2MoKTsKLSAgICAgICAgICAgIGlmIChvdmVydmlld0RvYyAhPSBudWxsKQotICAgICAgICAgICAgICByZXR1cm4gcGFyc2Uob3ZlcnZpZXdEb2MuZ2V0T3ZlcnZpZXdVUkxTdHJpbmcoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKHByb3h5ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgIAlTdHJpbmcgdE1vZGVsS2V5ID0gdE1vZGVsSW5mby5nZXRUTW9kZWxLZXkoKTsKLSAgICAgICAgICAJaWYgKHRNb2RlbEtleSAhPSBudWxsKQotICAgICAgICAgIAl7Ci0gICAgICAgICAgCSAgdHJ5Ci0JCQkgIHsKLSAgICAgICAgICAJICAgIFRNb2RlbERldGFpbCB0ID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbCh0TW9kZWxLZXkpOwotICAgICAgICAgIAkgICAgaWYgKHQgIT0gbnVsbCkKLSAgICAgICAgICAJICAgIHsKLSAgICAgICAgICAgICAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSB0LmdldFRNb2RlbFZlY3RvcigpOwotICAgICAgICAgICAgICAgICAgaWYgKHRNb2RlbFZlY3RvciAhPSBudWxsICYmIHRNb2RlbFZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V1NETCgoVE1vZGVsKXRNb2RlbFZlY3Rvci5nZXQoMCkpOwotICAgICAgICAgIAkgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgCSAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpCi0JCQkgIHsKLSAgICAgICAgICAJICB9Ci0gICAgICAgICAgCSAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiB0ZSkKLQkJCSAgewotICAgICAgICAgIAkgIH0KLSAgICAgICAgICAJfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXU0RMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBPdmVydmlld0RvYyBvdmVydmlld0RvYyA9IHRNb2RlbC5nZXRPdmVydmlld0RvYygpOwotICAgIGlmIChvdmVydmlld0RvYyAhPSBudWxsKQotICAgICAgcmV0dXJuIHBhcnNlKG92ZXJ2aWV3RG9jLmdldE92ZXJ2aWV3VVJMU3RyaW5nKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBwYXJzZShTdHJpbmcgcykKLSAgewotICAgIGlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgaW50IGluZGV4ID0gcy5pbmRleE9mKCcjJyk7Ci0gICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgfQotICAgIHJldHVybiBzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQnJvd3NlckRldGVjdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0Jyb3dzZXJEZXRlY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyMDUwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQnJvd3NlckRldGVjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIHVzZWQgdG8gZGV0ZWN0IHRoZSB0eXBlIG9mIGJyb3dzZXIgdXNlZC4gCi0gKi8KLXB1YmxpYyBjbGFzcyBCcm93c2VyRGV0ZWN0IHsKLQkKLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIGlzIHVzZWQuCi0JICogCi0JICogQHBhcmFtIHJlcXVlc3QgVGhlIEhUVFAgcmVxdWVzdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsaWVudCBpcyBhIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciB3ZWIgYnJvd3NlciwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKLQkJU3RyaW5nIHVzZXJBZ2VudCA9IHJlcXVlc3QuZ2V0SGVhZGVyKCJVc2VyLUFnZW50Iik7Ci0JCQotCQlpZiAodXNlckFnZW50ICE9IG51bGwgJiYgdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXNpZSIpICE9IC0xKQotCQkJcmV0dXJuIHRydWU7Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0NoYXJBcnJheVdyYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9DaGFyQXJyYXlXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjA4NTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0NoYXJBcnJheVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5DaGFyQXJyYXlXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZVdyYXBwZXI7Ci0KLXB1YmxpYyBjbGFzcyBDaGFyQXJyYXlXcmFwcGVyIGV4dGVuZHMgSHR0cFNlcnZsZXRSZXNwb25zZVdyYXBwZXIKLXsKLQlwcml2YXRlIENoYXJBcnJheVdyaXRlciBjaGFyQXJyYXlXcml0ZXJfOwotCQotCXB1YmxpYyBDaGFyQXJyYXlXcmFwcGVyKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCi0JewotCQlzdXBlcihyZXNwb25zZSk7Ci0JICBjaGFyQXJyYXlXcml0ZXJfID0gbmV3IENoYXJBcnJheVdyaXRlcigpOwotCX0KLQkKLQlwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0V3JpdGVyKCkKLQl7Ci0JCXJldHVybiBuZXcgUHJpbnRXcml0ZXIoY2hhckFycmF5V3JpdGVyXyk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCXsKLQkJcmV0dXJuIGNoYXJBcnJheVdyaXRlcl8udG9TdHJpbmcoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvRGlyVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9EaXJVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmE4YmM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9EaXJVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBEaXJVdGlscwotewotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSVEwoKQotICB7Ci0gICAgcmV0dXJuICJydGwiLmVxdWFscyhnZXREaXIoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREaXIoKQotICB7Ci0gICAgU3RyaW5nIHJ0bCA9ICJydGwiOwotICAgIFN0cmluZyBsdHIgPSAibHRyIjsKLQotICAgIC8vIGZyb20gc3lzdGVtIHByb3BlcnR5Ci0gICAgU3RyaW5nIG9yaWVudGF0aW9uID0gU3lzdGVtLmdldFByb3BlcnR5KCJlY2xpcHNlLm9yaWVudGF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpZiAocnRsLmVxdWFscyhvcmllbnRhdGlvbikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBydGw7Ci0gICAgZWxzZSBpZiAobHRyLmVxdWFscyhvcmllbnRhdGlvbikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBsdHI7Ci0KLSAgICAvLyBmcm9tIGNvbW1hbmQgbGluZQotICAgIFN0cmluZ1tdIGFyZ3MgPSBQbGF0Zm9ybS5nZXRDb21tYW5kTGluZUFyZ3MoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKCItZGlyIi5lcXVhbHNJZ25vcmVDYXNlKGFyZ3NbaV0pKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGlmICgoaSArIDEpIDwgYXJncy5sZW5ndGggJiYgInJ0bCIuZXF1YWxzSWdub3JlQ2FzZShhcmdzW2kgKyAxXSkpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBydGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGx0cjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBwcm9wZXJ0eSBpcyBzZXQuIElmIG5vdCBkbyBub3QKLSAgICAvLyByZWx5IG9uIHRoZSB2bS4KLSAgICBpZiAoU3lzdGVtLmdldFByb3BlcnR5KCJvc2dpLm5sLnVzZXIiKSA9PSBudWxsKSAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm4gbHRyOwotCi0gICAgLy8gZ3Vlc3MgZnJvbSBkZWZhdWx0IGxvY2FsZQotICAgIFN0cmluZyBsb2NhbGUgPSBQbGF0Zm9ybS5nZXROTCgpOwotICAgIGlmIChsb2NhbGUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBsb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGlmIChsb2NhbGUuc3RhcnRzV2l0aCgiYXIiKSB8fCBsb2NhbGUuc3RhcnRzV2l0aCgiZmEiKSAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotICAgICAgICB8fCBsb2NhbGUuc3RhcnRzV2l0aCgiaGUiKSB8fCBsb2NhbGUuc3RhcnRzV2l0aCgiaXciKSAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotICAgICAgICB8fCBsb2NhbGUuc3RhcnRzV2l0aCgidXIiKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJldHVybiBydGw7Ci0gICAgfQotICAgIHJldHVybiBsdHI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9IVE1MVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9IVE1MVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNmNmY3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvSFRNTFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKiAyMDA4MDMyNCAgIDE4NjQ1NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEhUTUxVdGlscwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVVEY4X0VOQ09ESU5HID0gIlVURi04IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElORV9CUkVBSyA9ICI8YnI+IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElORV9TRVBBUkFUT1IgPSBTeXN0ZW0uZ2V0UHJvcGVydGllcygpLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCi0gIC8qKgotICAqIEdldCB0aGUgSFRNTCB0YWcgZm9yIGFuIGltYWdlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBIVE1MIHRhZyBmb3IgdGhpcyBpbWFnZS4KLSAgKiBAcGFyYW0gSHR0cFNlcnZsZXRSZXNwb25zZSBUbyBlbmNvZGUgdGhlIHNyYyBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIFN0cmluZyBzcmMgYXR0cmlidXRlIGRlZmluaW5nIHRoZSBwYXRoIHRvIHRoZSBpbWFnZSBmaWxlLiBUaGlzIG11c3QgaW5jbHVkZSB0aGUgY29udGV4dCBwYXRoLgotICAqIEBwYXJhbSBTdHJpbmcgT3B0aW9uYWwgYWx0IHRleHQgdG8gYmUgZGlzcGxheWVkIHdpdGggdGhlIGltYWdlLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE9wdGlvbmFsIHdpZHRoIG9mIHRoZSByZW5kZXJlZCBpbWFnZS4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIFN0cmluZyBPcHRpb25hbCBoZWlnaHQgb2YgdGhlIHJlbmRlcmVkIGltYWcuIFNldCB0aGlzIHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgYXR0cmlidXRlLgotICAqIEBwYXJhbSBIYXNodGFibGUgT3B0aW9uYWwga2V5LXZhbHVlIHBhaXJzIG9mIGFkZGl0aW9uYWwgc3RyaW5ncyB0byBiZSBhZGRlZCBhcy1pcyB0byB0aGUgdGFnLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIGltYWdlIHRhZy4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0SFRNTEltYWdlVGFnKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsU3RyaW5nIHNyYyxTdHJpbmcgYWx0LFN0cmluZyB3aWR0aCxTdHJpbmcgaGVpZ2h0LEhhc2h0YWJsZSBhZGRpdGlvbmFsQXR0cmlidXRlcykKLSAgewotICAgIFN0cmluZ0J1ZmZlciB0YWcgPSBuZXcgU3RyaW5nQnVmZmVyKCI8aW1nIHNyYz1cIiIpOwotICAgIHRhZy5hcHBlbmQocmVzcG9uc2UuZW5jb2RlVVJMKHNyYykpLmFwcGVuZCgnXCInKTsKLSAgICBpZiAoYWx0ID09IG51bGwpCi0gICAgCWFsdCA9ICIiOwotICAgIHRhZy5hcHBlbmQoIiBhbHQ9XCIiKS5hcHBlbmQoYWx0KS5hcHBlbmQoJ1wiJyk7Ci0gICAgdGFnLmFwcGVuZCgiIHRpdGxlPVwiIikuYXBwZW5kKGFsdCkuYXBwZW5kKCdcIicpOwotICAgIGlmICh3aWR0aCAhPSBudWxsKQotICAgICAgdGFnLmFwcGVuZCgiIHdpZHRoPSIpLmFwcGVuZCh3aWR0aCk7Ci0gICAgaWYgKGhlaWdodCAhPSBudWxsKQotICAgICAgdGFnLmFwcGVuZCgiIGhlaWdodD0iKS5hcHBlbmQoaGVpZ2h0KTsKLSAgICB0YWcuYXBwZW5kKCIgYm9yZGVyPTAiKTsKLSAgICBpZiAoYWRkaXRpb25hbEF0dHJpYnV0ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbnVtZXJhdGlvbiBrZXlzID0gYWRkaXRpb25hbEF0dHJpYnV0ZXMua2V5cygpOwotICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgdGFnLmFwcGVuZCgnICcpLmFwcGVuZChrZXkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKChTdHJpbmcpYWRkaXRpb25hbEF0dHJpYnV0ZXMuZ2V0KGtleSkpLmFwcGVuZCgnXCInKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGFnLmFwcGVuZCgnPicpOwotICAgIHJldHVybiB0YWcudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgSFRNTCB0YWcgZm9yIHRoaXMgbGluay4gVGhlIGNvbXBsZXRlIHRhZyBjb25zaXN0cyBvZiB0aGUgb3BlbiB0YWcgPGE+IGZvbGxvd2VkIGJ5IGEgc3ViZWxlbWVudCBhbmQsIGZpbmFsbHksIGJ5IGFuIGVuZCB0YWcgPC9hPi4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgSFRNTCB0YWcgb2YgdGhlIGxpbmsuCi0gICogQHBhcmFtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgVG8gZW5jb2RlIHRoZSBocmVmIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIFRoZSBocmVmIGF0dHJpYnV0ZSBvZiB0aGUgbGluay4gVGhpcyBtdXN0IGluY2x1ZGUgdGhlIGNvbnRleHQgcGF0aC4KLSAgKiBAcGFyYW0gU3RyaW5nIHRhcmdldCBPcHRpb25hbCB0YXJnZXQgYXR0cmlidXRlIGZvciB0aGUgbGluay4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIFN0cmluZyBPcHRpb25hbCBuYW1lIGZvciB0aGUgbGluay4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIFN0cmluZyBUaGUgbGFiZWwgd2hpY2ggYWN0cyBhcyB0aGUgc3ViZWxlbWVudC4gaS5lLiA8YT5sYWJlbDwvYT4uCi0gICogQHBhcmFtIEhhc2h0YWJsZSBPcHRpb25hbCBrZXktdmFsdWUgcGFpcnMgb2YgYWRkaXRpb25hbCBzdHJpbmcgYXR0cmlidXRlcyB0byBiZSBhZGRlZCBhcy1pcyB0byB0aGUgb3BlbiB0YWcuIFNldCB0aGlzIHRvIG51bGwgdG8gZGlzYWJsZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0SFRNTExpbmtUYWcoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmcgaHJlZixTdHJpbmcgdGFyZ2V0LFN0cmluZyBuYW1lLFN0cmluZyBsYWJlbCxIYXNodGFibGUgYWRkaXRpb25hbEF0dHJpYnV0ZXMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdGFnID0gbmV3IFN0cmluZ0J1ZmZlcigiPGEgaHJlZj1cIiIpOwotICAgIHRhZy5hcHBlbmQocmVzcG9uc2UuZW5jb2RlVVJMKGhyZWYpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgaWYgKHRhcmdldCAhPSBudWxsKQotICAgICAgdGFnLmFwcGVuZCgiIHRhcmdldD1cIiIpLmFwcGVuZCh0YXJnZXQpLmFwcGVuZCgnXCInKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgdGFnLmFwcGVuZCgiIG5hbWU9XCIiKS5hcHBlbmQobmFtZSkuYXBwZW5kKCdcIicpOwotICAgIGlmIChhZGRpdGlvbmFsQXR0cmlidXRlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBhZGRpdGlvbmFsQXR0cmlidXRlcy5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICB0YWcuYXBwZW5kKCcgJykuYXBwZW5kKGtleSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoKFN0cmluZylhZGRpdGlvbmFsQXR0cmlidXRlcy5nZXQoa2V5KSkuYXBwZW5kKCdcIicpOwotICAgICAgfQotICAgIH0KLSAgICB0YWcuYXBwZW5kKCc+Jyk7Ci0gICAgdGFnLmFwcGVuZChsYWJlbCk7Ci0gICAgdGFnLmFwcGVuZCgiPC9hPiIpOwotICAgIHJldHVybiB0YWcudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgSFRNTCB0YWcgZm9yIGEgcmVkIGFzdGVyaXN0LgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBIVE1MIHRhZyBmb3IgdGhlIHJlZCBhc3Rlcmlzay4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgcmVkQXN0ZXJpc2soKQotICB7Ci0gICAgcmV0dXJuICI8Zm9udCBjb2xvcj1cIiNmZjAwMDBcIj4qPC9mb250PiI7Ci0gIH0KLQotICAvKioKLSAgKiBHZXQgdGhlIEphdmFzY3JpcHQgbWFuZ2xlZCB2ZXJzaW9uIG9mIGEgZ2l2ZW4gaW5wdXQgU3RyaW5nLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBKYXZhc2NyaXB0IG1hbmdsZWQgU3RyaW5nLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKU01hbmdsZShTdHJpbmcgaW5wdXQpCi0gIHsKLSAgICBpZiAoaW5wdXQgPT0gbnVsbCkKLSAgICAgIHJldHVybiAiIjsKLQotICAgIFN0cmluZ0J1ZmZlciBtYW5nbGVkT3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGk9MDtpPGlucHV0Lmxlbmd0aCgpO2krKykKLSAgICB7Ci0gICAgICBjaGFyIGMgPSBpbnB1dC5jaGFyQXQoaSk7Ci0gICAgICBzd2l0Y2ggKGMpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICBtYW5nbGVkT3V0cHV0LmFwcGVuZCgiXFxuIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICBtYW5nbGVkT3V0cHV0LmFwcGVuZCgiXFxyIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgY2FzZSAnXCInOgotICAgICAgICBjYXNlICdcJyc6Ci0gICAgICAgICAgbWFuZ2xlZE91dHB1dC5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgbWFuZ2xlZE91dHB1dC5hcHBlbmQoYyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtYW5nbGVkT3V0cHV0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVTU19USEFOID0gIjwiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVTU19USEFOX0hUTUxfRU5USVRZID0gIiZsdDsiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JFQVRFUl9USEFOID0gIj4iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JFQVRFUl9USEFOX0hUTUxfRU5USVRZID0gIiZndDsiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BBQ0UgPSAiICI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEFDRV9IVE1MX0VOVElUWSA9ICImbmJzcDsiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU1QRVJTQU5EID0gIiYiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU1QRVJTQU5EX0hUTUxfRU5USVRZID0gIiZhbXA7IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFFVT1RBVElPTiA9ICJcIiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBRVU9UQVRJT05fSFRNTF9FTlRJVFkgPSAiJnF1b3Q7IjsKLQotICAvKioKLSAgKiBSZXBsYWNlIHNwZWNpYWwgY2hhcmFjdGVycyB3aXRoIEhUTUwgZW50aXRpZXMgcmVwcmVzZW50aW5nIHRoZXNlIGNoYXJhY3RlcnMuCi0gICogTm90ZSB0aGF0IHRoaXMgd2lsbCBhbHNvIGNvbnZlcnQgbm9ybWFsIHNwYWNlcyBpbnRvIG5vbi1icmVha2luZyBzcGFjZXMsIHdoaWNoIG1heSBiZSBnb29kIGZvcgotICAqIHByZXNlbnRhdGlvbiBidXQgbm90IGZvciBlZGl0aW5nLgotICAqIAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBjb252ZXJ0ZWQgU3RyaW5nLiBOb3RlOiBPcmRlciBpcyBpbXBvcnRhbnQgc28gdGhhdCBjb3JyZWN0ZWQgZW50aXR5IHJlZmVyZW5jZXMgYXJlIG5vdCByZS1tYW5nbGVkLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoU3RyaW5nIHMpIHsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBBTVBFUlNBTkQsIEFNUEVSU0FORF9IVE1MX0VOVElUWSk7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgTEVTU19USEFOLCBMRVNTX1RIQU5fSFRNTF9FTlRJVFkpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEdSRUFURVJfVEhBTiwgR1JFQVRFUl9USEFOX0hUTUxfRU5USVRZKTsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBTUEFDRSwgU1BBQ0VfSFRNTF9FTlRJVFkpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFFVT1RBVElPTiwgUVVPVEFUSU9OX0hUTUxfRU5USVRZKTsKLSAgICByZXR1cm4gczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXBsYWNlIHNwZWNpYWwgY2hhcmFjdGVycyB3aXRoIEhUTUwgZW50aXRpZXMgcmVwcmVzZW50aW5nIHRoZXNlIGNoYXJhY3RlcnMKLSAgICogQHJldHVybiBTdHJpbmcgVGhlIGNvbnZlcnRlZCBTdHJpbmcuIE5vdGU6IE9yZGVyIGlzIGltcG9ydGFudCBzbyB0aGF0IGNvcnJlY3RlZCBlbnRpdHkgcmVmZXJlbmNlcyBhcmUgbm90IHJlLW1hbmdsZWQuCi0gICAqLwotICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KFN0cmluZyBzKSB7Ci0gICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEFNUEVSU0FORCwgQU1QRVJTQU5EX0hUTUxfRU5USVRZKTsKLSAgICAgcyA9IHN0cmluZ1JlcGxhY2UocywgTEVTU19USEFOLCBMRVNTX1RIQU5fSFRNTF9FTlRJVFkpOwotICAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBHUkVBVEVSX1RIQU4sIEdSRUFURVJfVEhBTl9IVE1MX0VOVElUWSk7Ci0gICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFFVT1RBVElPTiwgUVVPVEFUSU9OX0hUTUxfRU5USVRZKTsKLSAgICAgcmV0dXJuIHM7Ci0gICB9Ci0KLSAgLyoqCi0gICogUmVwbGFjZSBIVE1MIGNoYXJhY3RlciBlbnRpdGllcyB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgY2hhcmFjdGVycy4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgY29udmVydGVkIFN0cmluZy4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgaHRtbEVudGl0aWVzVG9DaGFyYWN0ZXJzKFN0cmluZyBzKSB7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgTEVTU19USEFOX0hUTUxfRU5USVRZLCBMRVNTX1RIQU4pOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEdSRUFURVJfVEhBTl9IVE1MX0VOVElUWSwgR1JFQVRFUl9USEFOKTsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBTUEFDRV9IVE1MX0VOVElUWSwgU1BBQ0UpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEFNUEVSU0FORF9IVE1MX0VOVElUWSwgQU1QRVJTQU5EKTsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBRVU9UQVRJT05fSFRNTF9FTlRJVFksIFFVT1RBVElPTik7Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RyaW5nUmVwbGFjZShTdHJpbmcgcywgU3RyaW5nIG9sZFN0cmluZywgU3RyaW5nIG5ld1N0cmluZykgewotICAgIFN0cmluZyBzQ29weSA9IHM7Ci0gICAgaW50IGZyb21JbmRleCA9IDA7Ci0gICAgaW50IG9sZFN0cmluZ0luZGV4ID0gc0NvcHkuaW5kZXhPZihvbGRTdHJpbmcsIGZyb21JbmRleCk7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHdoaWxlIChvbGRTdHJpbmdJbmRleCAhPSAtMSkgewotICAgICAgc2Iuc2V0TGVuZ3RoKDApOwotICAgICAgc2IuYXBwZW5kKHNDb3B5LnN1YnN0cmluZygwLCBvbGRTdHJpbmdJbmRleCkpOwotICAgICAgc2IuYXBwZW5kKG5ld1N0cmluZyk7Ci0gICAgICBzYi5hcHBlbmQoc0NvcHkuc3Vic3RyaW5nKG9sZFN0cmluZ0luZGV4ICsgb2xkU3RyaW5nLmxlbmd0aCgpLCBzQ29weS5sZW5ndGgoKSkpOwotICAgICAgc0NvcHkgPSBzYi50b1N0cmluZygpOwotICAgICAgZnJvbUluZGV4ID0gb2xkU3RyaW5nSW5kZXggKyBuZXdTdHJpbmcubGVuZ3RoKCk7Ci0gICAgICBvbGRTdHJpbmdJbmRleCA9IHNDb3B5LmluZGV4T2Yob2xkU3RyaW5nLCBmcm9tSW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gc0NvcHk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YjU5NTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotcHVibGljIGZpbmFsIGNsYXNzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIGV4dGVuZHMgVGhyb3dhYmxlCi17Ci0gIC8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1Nzg0NTQ3MjIyNzExMDk2MUw7Ci0KLXB1YmxpYyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHN1cGVyKG1lc3NhZ2UpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9NdWx0aXBhcnRGb3JtRGF0YVBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDhlZGZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9NdWx0aXBhcnRGb3JtRGF0YVBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcGFyYW1UYWJsZV87Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RZUEUgICAgICAgID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTVVMVElQQVJUICAgICAgICAgICA9ICJtdWx0aXBhcnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0JPVU5EQVJZICAgICAgICAgICAgPSAiYm91bmRhcnk9IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OID0gIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTkFNRSAgICAgICAgICAgICAgICA9ICJuYW1lPVwiIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9JTklUSUFMICAgICAgICAgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9CT1VOREFSWSAgICAgICAgPSAxOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9QQVJBTUVURVIgICAgICAgPSAyOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9CTEFOSyAgICAgICAgICAgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9EQVRBICAgICAgICAgICAgPSA0OwotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBwYXJzZXJTdGF0ZXNbXSA9IHsiaW5pdGlhbCIsImJvdW5kYXJ5IiwicGFyYW1ldGVyIG5hbWUiLCJibGFuayBsaW5lIiwiZGF0YSJ9OwotCi0gIHB1YmxpYyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcigpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKEhhc2h0YWJsZSBwYXJhbWV0ZXJzKQotICB7Ci0gICAgcGFyYW1UYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPYmplY3Qga2V5ID0gaXQubmV4dCgpOwotICAgICAgT2JqZWN0IHZhbHVlID0gcGFyYW1ldGVycy5nZXQoa2V5KTsKLSAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpc3QpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IChMaXN0KXZhbHVlOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0MiA9IGxpc3QuaXRlcmF0b3IoKTsgaXQyLmhhc05leHQoKTspCi0gICAgICAgICAgc2F2ZURhdGEoa2V5LnRvU3RyaW5nKCksIGl0Mi5uZXh0KCkudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh2YWx1ZS5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0W10gYXJyYXkgPSAoT2JqZWN0W10pdmFsdWU7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICAgICAgc2F2ZURhdGEoa2V5LnRvU3RyaW5nKCksIGFycmF5W2ldLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzYXZlRGF0YShrZXkudG9TdHJpbmcoKSwgdmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGVkIHBvc3QgcmVxdWVzdCB3aXRoIGEgZ2l2ZW4gZW5jb2RpbmcuCi0gICAqIElmIHRoZSBlbmNvZGluZyBpcyBudWxsLCB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nLiB1dGYtOCBpcyBub3QgYQotICAgKiBiYWQgY2hvaWNlIGZvciB0aGUgZW5jb2RpbmcuCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCBwYXJzZVJlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsU3RyaW5nIGVuY29kaW5nKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIC8vIENvbnRlbnQtVHlwZSBoZWFkZXIgc2hvdWxkIGhhdmUgdGhlIGZvcm06Ci0gICAgLy8gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Li4uCi0gICAgLy8KLSAgICAvLyBSRkMyMDQ2IDUuMS4xIHBhZ2UgMTksIHBhcmFncmFwaCAyOgotICAgIC8vIFRoZSBDb250ZW50LVR5cGUgZmllbGQgZm9yIG11bHRpcGFydCBlbnRpdGllcyByZXF1aXJlcyBvbmUgcGFyYW1ldGVyLCAiYm91bmRhcnkiIChubyBxdW90ZXMpCi0gICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gcmVxdWVzdC5nZXRIZWFkZXIoSEVBREVSX0NPTlRFTlRfVFlQRSk7Ci0gICAgaWYgKGNvbnRlbnRUeXBlID09IG51bGwgfHwgIWNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoSEVBREVSX01VTFRJUEFSVCkgfHwgY29udGVudFR5cGUuaW5kZXhPZihIRUFERVJfQk9VTkRBUlkpID09IC0xKQotICAgICAgdGhyb3cgbmV3IE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKCJDb250ZW50LVR5cGUgaXMgbm90IG11bHRpcGFydC9mb3JtLWRhdGEiKTsKLQotICAgIC8vIFJGQzIwNDYgNS4xLjEgcGFnZSAxOSwgcGFyYWdyYXBoIDQ6Ci0gICAgLy8gVGhlIGJvdW5kYXJ5IHZhbHVlIG1heSBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzLiBTdHJpcCB0aGVzZSBpZiB0aGV5IGFyZSBwcmVzZW50LgotICAgIFN0cmluZyBib3VuZGFyeSA9IGNvbnRlbnRUeXBlLnN1YnN0cmluZyhjb250ZW50VHlwZS5pbmRleE9mKEhFQURFUl9CT1VOREFSWSkrSEVBREVSX0JPVU5EQVJZLmxlbmd0aCgpLGNvbnRlbnRUeXBlLmxlbmd0aCgpKTsKLSAgICBpZiAoYm91bmRhcnkuY2hhckF0KDApID09ICdcIicgJiYgYm91bmRhcnkuY2hhckF0KGJvdW5kYXJ5Lmxlbmd0aCgpLTEpID09ICdcIicpCi0gICAgICBib3VuZGFyeSA9IGJvdW5kYXJ5LnN1YnN0cmluZygxLGJvdW5kYXJ5Lmxlbmd0aCgpLTEpOwotCi0gICAgLy8gUkZDMjA0NiA1LjEuMSBwYWdlIDE5LCBwYXJhZ3JhcGggMjoKLSAgICAvLyBUaGUgYm91bmRhcnkgZGVsaW1pdGVyIGxpbmUgaXMgdGhlbiBkZWZpbmVkIGFzIGEgbGluZSBjb25zaXN0aW5nIGVudGlyZWx5Ci0gICAgLy8gb2YgdHdvIGh5cGhlbiBjaGFyYWN0ZXJzLgotICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAiLS0iK2JvdW5kYXJ5OwotCi0gICAgaWYgKHBhcmFtVGFibGVfID09IG51bGwpCi0gICAgICBwYXJhbVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBlbHNlCi0gICAgICBwYXJhbVRhYmxlXy5jbGVhcigpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKSxlbmNvZGluZykpOwotICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgU3RyaW5nIHBhcmFtZXRlck5hbWUgPSBudWxsOwotICAgICAgU3RyaW5nQnVmZmVyIHBhcmFtZXRlclZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgYnl0ZSBjdXJyZW50UGFyc2VyU3RhdGUgPSBQQVJTRVJfU1RBVEVfSU5JVElBTDsKLSAgICAgIHdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIExpbmVzIGFwcGVhciBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlLgotICAgICAgICAvLyAxKSBib3VuZGFyeSBpbmRpY2F0aW5nIHRoZSBzdGFydCBvZiBhIG5ldyBwYXJhbWV0ZXIgYW5kIGVuZCBvZiBhIGRhdGEgc2VnbWVudC4KLSAgICAgICAgLy8gMikgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSIuLi4iIC0gdGhlIG5hbWUgb2YgYSBuZXcgcGFyYW1ldGVyLgotICAgICAgICAvLyAzKSBhIGJsYW5rIGxpbmUKLSAgICAgICAgLy8gNCkgZGF0YQotICAgICAgICAvLwotICAgICAgICAvLyBGb3IgZWFjaCBwYXJhbWV0ZXIsIHRoZSBzZXF1ZW5jZSBpcyByZXBlYXRlZC4KLSAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChkZWxpbWl0ZXIpKQotICAgICAgICB7Ci0gICAgICAgICAgYnl0ZVtdIGV4cGVjdGVkUGFyc2VyU3RhdGVzID0ge1BBUlNFUl9TVEFURV9JTklUSUFMLFBBUlNFUl9TVEFURV9EQVRBfTsKLSAgICAgICAgICBpZiAoaXNWYWxpZFBhcnNlclN0YXRlKGN1cnJlbnRQYXJzZXJTdGF0ZSxleHBlY3RlZFBhcnNlclN0YXRlcykpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gU2F2ZSBhbnkgY3VycmVudCBkYXRhIGFuZCBwcmVwYXJlIGZvciBhIG5ldyBwYXJhbWV0ZXIgbmFtZS4KLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNhdmVEYXRhKHBhcmFtZXRlck5hbWUscGFyYW1ldGVyVmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgIHBhcmFtZXRlck5hbWUgPSBudWxsOwotICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS5zZXRMZW5ndGgoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50UGFyc2VyU3RhdGUgPSBQQVJTRVJfU1RBVEVfQk9VTkRBUlk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbihnZXRQYXJzZXJFeGNlcHRpb25NZXNzYWdlKGN1cnJlbnRQYXJzZXJTdGF0ZSxleHBlY3RlZFBhcnNlclN0YXRlcykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChIRUFERVJfQ09OVEVOVF9ESVNQT1NJVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBieXRlW10gZXhwZWN0ZWRQYXJzZXJTdGF0ZXMgPSB7UEFSU0VSX1NUQVRFX0JPVU5EQVJZfTsKLSAgICAgICAgICBpZiAoaXNWYWxpZFBhcnNlclN0YXRlKGN1cnJlbnRQYXJzZXJTdGF0ZSxleHBlY3RlZFBhcnNlclN0YXRlcykpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gT2J0YWluIHRoZSBwYXJhbWV0ZXIgbmFtZSB3aXRob3V0IHRoZSBzdXJyb3VuZGluZyBkb3VibGUgcXVvdGVzLiBBY2NvdW50cyBmb3IgUkZDIDE4NjcgdG9vLgotICAgICAgICAgICAgaW50IHBhcmFtZXRlck5hbWVTdGFydGluZ1Bvc2l0aW9uID0gbGluZS5pbmRleE9mKEhFQURFUl9OQU1FKStIRUFERVJfTkFNRS5sZW5ndGgoKTsKLSAgICAgICAgICAgIHBhcmFtZXRlck5hbWUgPSBsaW5lLnN1YnN0cmluZyhwYXJhbWV0ZXJOYW1lU3RhcnRpbmdQb3NpdGlvbiwrcGFyYW1ldGVyTmFtZVN0YXJ0aW5nUG9zaXRpb24rbGluZS5zdWJzdHJpbmcocGFyYW1ldGVyTmFtZVN0YXJ0aW5nUG9zaXRpb24pLmluZGV4T2YoJ1wiJykpOwotICAgICAgICAgICAgY3VycmVudFBhcnNlclN0YXRlID0gUEFSU0VSX1NUQVRFX1BBUkFNRVRFUjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY3VycmVudFBhcnNlclN0YXRlID09IFBBUlNFUl9TVEFURV9QQVJBTUVURVIpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBIGJsYW5rIGxpbmUgc2hvdWxkIGZvbGxvdyB0aGUgUEFSQU1FVEVSLiBEaXNjYXJkIHRoZSBsaW5lIGFuZCBtb3ZlIG9uLgotICAgICAgICAgIGN1cnJlbnRQYXJzZXJTdGF0ZSA9IFBBUlNFUl9TVEFURV9CTEFOSzsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBFeHBlY3QgdGhlIGxpbmUgdG8gY29udGFpbiBkYXRhLgotICAgICAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgcGFyYW1ldGVyVmFsdWUuYXBwZW5kKGxpbmUpOwotICAgICAgICAgIGN1cnJlbnRQYXJzZXJTdGF0ZSA9IFBBUlNFUl9TVEFURV9EQVRBOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24odC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICAvL2R1bXBQYXJhbVRhYmxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSByZXF1ZXN0IHBhcmFtZXRlciBhcyBhIFN0cmluZywgb3IgbnVsbCBpZiB0aGUgcGFyYW1ldGVyIGRvZXMgbm90IGV4aXN0LgotICAgKiBJZiB0aGUgcGFyYW1ldGVyIGhhcyBtdWx0aXBsZSB2YWx1ZXMsIG9ubHkgdGhlIGZpcnN0IHZhbHVlIGlzIHJldHVybmVkLiBVc2UgZ2V0UGFyYW1ldGVyVmFsdWVzKCkKLSAgICogZm9yIHBhcmFtZXRlcnMgd2l0aCBtdWx0aXBsZSB2YWx1ZXMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBhcmFtZXRlcihTdHJpbmcgcGFyYW1ldGVyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChwYXJhbVRhYmxlXyA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKCJQYXJzZXIgY29udGFpbnMgbm8gcGFyc2VkIGRhdGEiKTsKLSAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcilwYXJhbVRhYmxlXy5nZXQocGFyYW1ldGVyKTsKLSAgICByZXR1cm4gKCh2YWx1ZXMgIT0gbnVsbCk/KChTdHJpbmcpdmFsdWVzLmVsZW1lbnRBdCgwKSk6bnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHBhcmFtVGFibGVfID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24oIlBhcnNlciBjb250YWlucyBubyBwYXJzZWQgZGF0YSIpOwotICAgIFZlY3RvciB2YWx1ZXNWZWN0b3IgPSAoVmVjdG9yKXBhcmFtVGFibGVfLmdldChwYXJhbWV0ZXIpOwotICAgIGlmICh2YWx1ZXNWZWN0b3IgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFN0cmluZ1tdIHZhbHVlc0FycmF5ID0gbmV3IFN0cmluZ1t2YWx1ZXNWZWN0b3Iuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpPTA7aTx2YWx1ZXNBcnJheS5sZW5ndGg7aSsrKQotICAgICAgdmFsdWVzQXJyYXlbaV0gPSAoU3RyaW5nKXZhbHVlc1ZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgcmV0dXJuIHZhbHVlc0FycmF5OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZ1tdIGdldFBhcmFtZXRlck5hbWVzKCkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocGFyYW1UYWJsZV8gPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbigiUGFyc2VyIGNvbnRhaW5zIG5vIHBhcnNlZCBkYXRhIik7Ci0KLSAgICBpbnQgc2l6ZSA9IHBhcmFtVGFibGVfLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgIEVudW1lcmF0aW9uIGtleXMgPSBwYXJhbVRhYmxlXy5rZXlzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2l6ZTtpKyspCi0gICAgICBuYW1lc1tpXSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzYXZlRGF0YShTdHJpbmcgcGFyYW1ldGVyTmFtZSxTdHJpbmcgcGFyYW1ldGVyVmFsdWUpCi0gIHsKLSAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcilwYXJhbVRhYmxlXy5nZXQocGFyYW1ldGVyTmFtZSk7Ci0gICAgaWYgKHZhbHVlcyA9PSBudWxsKQotICAgICAgdmFsdWVzID0gbmV3IFZlY3RvcigpOwotICAgIHZhbHVlcy5hZGRFbGVtZW50KHBhcmFtZXRlclZhbHVlKTsKLSAgICBwYXJhbVRhYmxlXy5wdXQocGFyYW1ldGVyTmFtZSx2YWx1ZXMpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzVmFsaWRQYXJzZXJTdGF0ZShieXRlIGN1cnJlbnRTdGF0ZSxieXRlW10gZXhwZWN0ZWRTdGF0ZXMpCi0gIHsKLSAgICBib29sZWFuIHZhbGlkaXR5ID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaT0wO2k8ZXhwZWN0ZWRTdGF0ZXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoY3VycmVudFN0YXRlID09IGV4cGVjdGVkU3RhdGVzW2ldKQotICAgICAgewotICAgICAgICB2YWxpZGl0eSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsaWRpdHk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBnZXRQYXJzZXJFeGNlcHRpb25NZXNzYWdlKGJ5dGUgY3VycmVudFN0YXRlLGJ5dGVbXSBleHBlY3RlZFN0YXRlcykKLSAgewotICAgIFN0cmluZ0J1ZmZlciBtc2cgPSBuZXcgU3RyaW5nQnVmZmVyKCJQYXJzZXIgc3RhdGUgaW5jb25zaXN0ZW5jeSEiKTsKLSAgICBtc2cuYXBwZW5kKCdcbicpOwotICAgIG1zZy5hcHBlbmQoIkN1cnJlbnQgc3RhdGUgICAgOiAiKS5hcHBlbmQocGFyc2VyU3RhdGVzW2N1cnJlbnRTdGF0ZV0pLmFwcGVuZCgnXG4nKTsKLSAgICBtc2cuYXBwZW5kKCJFeHBlY3RlZCBzdGF0ZShzKTogIik7Ci0gICAgZm9yIChpbnQgaT0wO2k8ZXhwZWN0ZWRTdGF0ZXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBtc2cuYXBwZW5kKHBhcnNlclN0YXRlc1tleHBlY3RlZFN0YXRlc1tpXV0pOwotICAgICAgaWYgKGkgIT0gZXhwZWN0ZWRTdGF0ZXMubGVuZ3RoLTEpCi0gICAgICAgIG1zZy5hcHBlbmQoIiwgIik7Ci0gICAgfQotICAgIG1zZy5hcHBlbmQoJ1xuJyk7Ci0gICAgcmV0dXJuIG1zZy50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvUXVpY2tTb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvUXVpY2tTb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMThlZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1F1aWNrU29ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE3ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yOwotCi1wdWJsaWMgY2xhc3MgUXVpY2tTb3J0Ci17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBzb3J0KE9iamVjdFtdIGEsaW50IGxvLGludCBoaSkKLSAgewotICAgIE9iamVjdCB0bXA7Ci0gICAgaW50IGkgPSBsbzsKLSAgICBpbnQgaiA9IGhpOwotICAgIE9iamVjdCB4ID0gYVsobG8raGkpLzJdOwotICAgIENvbGxhdG9yIGNvbGxhdG9yID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQotICAgIGRvCi0gICAgewotICAgICAgd2hpbGUgKGNvbGxhdG9yLmNvbXBhcmUoYVtpXS50b1N0cmluZygpLHgudG9TdHJpbmcoKSkgPCAwKSBpKys7Ci0gICAgICB3aGlsZSAoY29sbGF0b3IuY29tcGFyZShhW2pdLnRvU3RyaW5nKCkseC50b1N0cmluZygpKSA+IDApIGotLTsKLSAgICAgIGlmIChpIDw9IGopCi0gICAgICB7Ci0gICAgICAgIHRtcCA9IGFbaV07Ci0gICAgICAgIGFbaV0gPSBhW2pdOwotICAgICAgICBhW2pdID0gdG1wOwotICAgICAgICBpKys7Ci0gICAgICAgIGotLTsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChpIDw9IGopOwotCi0gICAgaWYgKGxvIDwgaikKLSAgICAgIHNvcnQoYSxsbyxqKTsKLSAgICBpZiAoaSA8IGhpKQotICAgICAgc29ydChhLGksaGkpOwotICB9Ci0KLSAgLyoKLSAgKiBUaGlzIG1ldGhvZCB3aWxsIHVzZSB0aGUgc2FtZSBhbGdvcml0aG0gYXMgYWJvdmUKLSAgKiB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBhbnkgbnVsbHMgd2lsbCBiZSBhdHRhY2hlZAotICAqIGF0IHRoZSBlbmQKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHNvcnQoVmVjdG9yIHYpCi0gIHsKLSAgICAvLyBkbyBub3Qgc29ydCBpZiB2ZWN0b3IgY29udGFpbnMgbGVzcyB0aGFuIDIgZWxlbWVudHMKLSAgICBpZiAodi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm47Ci0gIAotICAgIC8vIHB1bGxzIG91dCB0aGUgbnVsbHMKLSAgICBWZWN0b3IgbnVsbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7Ci0gICAgICBPYmplY3Qgb2JqID0gdi5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAob2JqID09IG51bGwgfHwgb2JqLnRvU3RyaW5nKCkgPT0gbnVsbCkgewotICAgICAgICBudWxscy5hZGQob2JqKTsKLSAgICAgICAgdi5yZW1vdmUoaSk7Ci0gICAgICAgIGktLTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBzb3J0IHRoZSBub3QgbnVsbCBvYmplY3RzCi0gICAgT2JqZWN0W10gb2JqcyA9IHYudG9BcnJheSgpOwotICAgIC8vIGRvIG5vdCBzb3J0IGlmIGFycmF5IGNvbnRhaW5zIGxlc3MgdGhhbiAyIG9iamVjdHMKLSAgICBpZiAob2Jqcy5sZW5ndGggPj0gMikKLSAgICAgICAgc29ydChvYmpzLCAwLCBvYmpzLmxlbmd0aC0xKTsKLQotICAgIC8vIHJlLWNvbnN0cnVjdCB0aGUgdmVjdG9yIGZyb20gdGhlIHNvcnRlZCBvYmplY3RzLCB0aGVuIHRoZSBudWxscwotICAgIHYuY2xlYXIoKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG9ianMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgdi5hZGQob2Jqc1tqXSk7Ci0gICAgfQotICAgIHYuYWRkQWxsKG51bGxzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1RyaW1GaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9UcmltRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiODRmOWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1RyaW1GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LkZpbHRlcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LkZpbHRlckNoYWluOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuRmlsdGVyQ29uZmlnOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotCi1wdWJsaWMgY2xhc3MgVHJpbUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlcgotewotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZheC5zZXJ2bGV0LkZpbHRlciNpbml0KGphdmF4LnNlcnZsZXQuRmlsdGVyQ29uZmlnKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgYXJnMCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24KLSAgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmF4LnNlcnZsZXQuRmlsdGVyI2RvRmlsdGVyKGphdmF4LnNlcnZsZXQuU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuU2VydmxldFJlc3BvbnNlLCBqYXZheC5zZXJ2bGV0LkZpbHRlckNoYWluKQotICAgKi8KLSAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwgRmlsdGVyQ2hhaW4gZmMpIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIENoYXJBcnJheVdyYXBwZXIgcmVzcG9uc2VXcmFwcGVyID0gbmV3IENoYXJBcnJheVdyYXBwZXIoKEh0dHBTZXJ2bGV0UmVzcG9uc2UpcmVzcCk7Ci0gICAgLy8gSGFjayBmb3IgVG9tY2F0IHBlcmZvcm1hbmNlIHByb2JsZW0gd2l0aCBmaWx0ZXJzLgotICAgIE91dHB1dFN0cmVhbVdyaXRlciBvc3cgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKHJlc3AuZ2V0T3V0cHV0U3RyZWFtKCksSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICAgIGZjLmRvRmlsdGVyKHJlcSxyZXNwb25zZVdyYXBwZXIpOwotICAgIFN0cmluZyByZXNwb25zZVN0cmluZyA9IHJlc3BvbnNlV3JhcHBlci50b1N0cmluZygpOwotICAgIG9zdy53cml0ZShyZXNwb25zZVN0cmluZy50cmltKCkpOwotICAgIG9zdy5jbG9zZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmF4LnNlcnZsZXQuRmlsdGVyI2Rlc3Ryb3koKQotICAgKi8KLSAgcHVibGljIHZvaWQgZGVzdHJveSgpCi0gIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvVVJMVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9VUkxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzA3MGIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9VUkxVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMRGVjb2RlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciBtYW5hZ2luZyBVUkxzCi0gKiBhcyB1c2VkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgV2ViIGFwcGxpY2F0aW9uLgotICogQGF1dGhvciBjYnJlYWxleUBjYS5pYm0uY29tCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBVUkxVdGlscwotewotCS8qKgotCSAqIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGNvbnN0cnVjdGVkLgotCSAqLwotCXByaXZhdGUgVVJMVXRpbHMgKCkKLQl7Ci0JfQotCi0JLyoqCi0JICogVVRGLTgKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVVEY4ID0gIlVURi04IjsKLQotCS8qKgotCSAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rICNlbmNvZGUoU3RyaW5nLFN0cmluZyl9Ci0JICogd2l0aCBzZWNvbmQgcGFyYW1ldGVyIHNldCB0byB0aGUgIlVURi04IiBlbmNvZGluZy4KLQkgKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGVuY29kZS4KLQkgKiBAcmV0dXJuIFRoZSBlbmNvZGVkIHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNvZGUoU3RyaW5nIHMpCi0JewotCQlyZXR1cm4gZW5jb2RlKHMsVVRGOCk7Ci0JfQotCQotCS8qKgotCSAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIFVSTEVuY29kZXIjZW5jb2RlKFN0cmluZyxTdHJpbmcpfSwKLQkgKiBvbmx5IHRocm93cyBhbiB1bmNoZWNrZWQge0BsaW5rIFJ1bnRpbWVFeGNlcHRpb259IHdyYXBwZWQKLQkgKiBhcm91bmQgYW4ge0BsaW5rIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb259IGluc3RlYWQgb2YKLQkgKiBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbn0uCi0JICogQHBhcmFtIHMgVGhlIHN0cmluZyB0byBlbmNvZGUuCi0JICogQHBhcmFtIGVuYyBUaGUgZW5jb2RpbmcgdG8gdXNlLgotCSAqIEByZXR1cm4gVGhlIGVuY29kZWQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZShTdHJpbmcgcywgU3RyaW5nIGVuYykKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZXR1cm4gVVJMRW5jb2Rlci5lbmNvZGUocyxlbmMpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIFRPRE86IE1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOAotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiVNU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTgiLGUpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rICNkZWNvZGUoU3RyaW5nLFN0cmluZyl9Ci0JICogd2l0aCBzZWNvbmQgcGFyYW1ldGVyIHNldCB0byB0aGUgIlVURi04IiBlbmNvZGluZy4KLQkgKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGRlY29kZS4KLQkgKiBAcmV0dXJuIFRoZSBkZWNvZGVkIHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBkZWNvZGUoU3RyaW5nIHMpCi0JewotCQlyZXR1cm4gZGVjb2RlKHMsVVRGOCk7Ci0JfQotCQotCS8qKgotCSAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIFVSTEVuY29kZXIjZGVjb2RlKFN0cmluZyxTdHJpbmcpfSwKLQkgKiBvbmx5IHRocm93cyBhbiB1bmNoZWNrZWQge0BsaW5rIFJ1bnRpbWVFeGNlcHRpb259IHdyYXBwZWQKLQkgKiBhcm91bmQgYW4ge0BsaW5rIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb259IGluc3RlYWQgb2YKLQkgKiBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbn0uCi0JICogQHBhcmFtIHMgVGhlIHN0cmluZyB0byBkZWNvZGUuCi0JICogQHBhcmFtIGVuYyBUaGUgZW5jb2RpbmcgdG8gdXNlLgotCSAqIEByZXR1cm4gVGhlIGRlY29kZWQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGRlY29kZShTdHJpbmcgcywgU3RyaW5nIGVuYykKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZXR1cm4gVVJMRGVjb2Rlci5kZWNvZGUocyxlbmMpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIFRPRE86IE1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOAotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiVNU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTgiLGUpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjM4ZWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9WYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYxMiAgIDE0MjI5MCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRvcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTdHJpbmcoU3RyaW5nIGlucHV0KQotICB7Ci0gICAgcmV0dXJuICgoaW5wdXQgIT0gbnVsbCkgJiYgKGlucHV0LnRyaW0oKS5sZW5ndGgoKSA+IDApKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZVVSTChTdHJpbmcgaW5wdXQpCi0gIHsKLQkgIHJldHVybiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5tYXRjaGVzKCJbYS16QS1aXFwrXFwtXFwuXSsrOi4qIikpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVJbnRlZ2VyKFN0cmluZyBpbnB1dCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQoaW5wdXQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvWE1MVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9YTUxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmQ1NjM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9YTUxVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFhNTFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVURjhfRU5DT0RJTkcgPSAiVVRGLTgiOyAKLQkKLSAgLyoqCi0gICAqIFNlcmlhbGl6ZSBhbiBYTUwgRWxlbWVudCBpbnRvIGEgU3RyaW5nLgotICAgKiBAcGFyYW0gZSBFbGVtZW50IHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIEBwYXJhbSBvbWl0WE1MRGVjbGFyYXRpb24gYm9vbGVhbiByZXByZXNlbnRpbmcgd2hldGhlciBvciBub3QgdG8gb21pdCB0aGUgWE1MIGRlY2xhcmF0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgWE1MIGRvY3VtZW50IGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VyaWFsaXplKEVsZW1lbnQgZSxib29sZWFuIG9taXRYTUxEZWNsYXJhdGlvbikKLSAgewotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0JCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGUpOwotCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLk9NSVRfWE1MX0RFQ0xBUkFUSU9OLCAoKG9taXRYTUxEZWNsYXJhdGlvbikgPyAieWVzIiA6ICJubyIpKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIFVURjhfRU5DT0RJTkcpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICIyIik7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldwlTdHJlYW1SZXN1bHQoYmFvcykpOwotCQliYW9zLmNsb3NlKCk7Ci0JCXJldHVybiBuZXcgU3RyaW5nKGJhb3MudG9CeXRlQXJyYXkoKSwgVVRGOF9FTkNPRElORyk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBTZXJpYWxpemUgYW4gWE1MIEVsZW1lbnQgaW50byBhIFN0cmluZy4KLSAgICogQHBhcmFtIGRmIERvY3VtZW50RnJhZ21lbnQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogQHBhcmFtIG9taXRYTUxEZWNsYXJhdGlvbiBib29sZWFuIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCB0byBvbWl0IHRoZSBYTUwgZGVjbGFyYXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBYTUwgZG9jdW1lbnQgZnJhZ21lbnQuCi0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcmlhbGl6ZShEb2N1bWVudEZyYWdtZW50IGRmLGJvb2xlYW4gb21pdFhNTERlY2xhcmF0aW9uKQotICB7Ci0gICAgaWYgKGRmICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0JCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRmKTsKLQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5PTUlUX1hNTF9ERUNMQVJBVElPTiwgKChvbWl0WE1MRGVjbGFyYXRpb24pID8gInllcyIgOiAibm8iKSk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCBVVEY4X0VOQ09ESU5HKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcJU3RyZWFtUmVzdWx0KGJhb3MpKTsKLQkJYmFvcy5jbG9zZSgpOwotCQlyZXR1cm4gbmV3IFN0cmluZyhiYW9zLnRvQnl0ZUFycmF5KCksIFVURjhfRU5DT0RJTkcpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBYTUwgRG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkb2NCdWlsZGVyIERvY3VtZW50QnVpbGRlci4gU2V0dGluZyB0aGlzIHRvIG51bGwgd2lsbCBjcmVhdGUgYSBuZXcgRG9jdW1lbnRCdWlsZGVyLgotICAgKiBAcmV0dXJuIERvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIERvY3VtZW50IGNyZWF0ZU5ld0RvY3VtZW50KERvY3VtZW50QnVpbGRlciBkb2NCdWlsZGVyKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGRvY0J1aWxkZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKGZhbHNlKTsKLSAgICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgICBkb2NCdWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICB9Ci0gICAgRG9jdW1lbnQgZG9jID0gZG9jQnVpbGRlci5uZXdEb2N1bWVudCgpOwotICAgIHJldHVybiBkb2M7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIEVsZW1lbnQgaW50byBhbiBFbGVtZW50Ci0gICAqIEBwYXJhbSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudC4KLSAgICogQHJldHVybiBFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgc3RyaW5nVG9FbGVtZW50KFN0cmluZyBzKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHN0cmluZ1RvRWxlbWVudChzLCBmYWxzZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIEVsZW1lbnQgaW50byBhbiBFbGVtZW50Ci0gICAqIEBwYXJhbSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudC4KLSAgICogQHBhcmFtIGJvb2xlYW4gc2V0IHdoZXRoZXIgdGhlIHJldHVybiBFbGVtZW50IHNob3VsZCBiZSBuYW1lc3BhY2UgYXdhcmUuCi0gICAqIEByZXR1cm4gRWxlbWVudAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBFbGVtZW50IHN0cmluZ1RvRWxlbWVudChTdHJpbmcgcywgYm9vbGVhbiBuYW1lc3BhY2VBd2FyZSkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBieXRlQXJyYXlUb0VsZW1lbnQocy5nZXRCeXRlcyhVVEY4X0VOQ09ESU5HKSwgbmFtZXNwYWNlQXdhcmUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnQgdGhlIGJ5dGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudCBpbnRvIGFuIEVsZW1lbnQKLSAgICogQHBhcmFtIGJ5dGVbXSByZXByZXNlbnRhdGlvbiBvZiBhbiBFbGVtZW50LgotICAgKiBAcGFyYW0gYm9vbGVhbiBzZXQgd2hldGhlciB0aGUgcmV0dXJuIEVsZW1lbnQgc2hvdWxkIGJlIG5hbWVzcGFjZSBhd2FyZS4KLSAgICogQHJldHVybiBFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgYnl0ZUFycmF5VG9FbGVtZW50KGJ5dGVbXSBiLCBib29sZWFuIG5hbWVzcGFjZUF3YXJlKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb2NCdWlsZGVyRmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICBkb2NCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZShuYW1lc3BhY2VBd2FyZSk7Ci0gICAgZG9jQnVpbGRlckZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBkb2NCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICBEb2N1bWVudCBkb2MgPSBkb2NCdWlsZGVyLnBhcnNlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKSk7Ci0gICAgcmV0dXJuIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvQ2xlYXJXU0RMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4MTRiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5DbGVhck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETE1haW5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExOb2RlOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJXU0RMQWN0aW9uIGV4dGVuZHMgQ2xlYXJOb2RlQWN0aW9uIHsKLQotICBwdWJsaWMgQ2xlYXJXU0RMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQpIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7Ci0gICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5IHsKLSAgICAgIG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQobm9kZUlEU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpOwotICAgIH0KLSAgICBib29sZWFuIHBhcmFtVmFsaWQgPSBmYWxzZTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE1haW5Ob2RlKQotICAgICAgcGFyYW1WYWxpZCA9IHRydWU7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFdTRExOb2RlKQotICAgICAgcGFyYW1WYWxpZCA9IHRydWU7Ci0gICAgZWxzZSB7Ci0gICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmICEobm9kZSBpbnN0YW5jZW9mIFdTRExNYWluTm9kZSkpIHsKLSAgICAgICAgbm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE5vZGUpIHsKLSAgICAgICAgICBub2RlSUQgPSBub2RlLmdldE5vZGVJZCgpOwotICAgICAgICAgIHBhcmFtVmFsaWQgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihub2RlSUQpKTsKLSAgICByZXR1cm4gcGFyYW1WYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBpZiAoc3VwZXIucnVuKCkpIHsKLSAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXROb2RlSWQoKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICByZXR1cm4gIndzZGxOYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgcmV0dXJuICJ3c2RsU3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DcmVhdGVJbnN0YW5jZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWEwNzcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNETWFwRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlSW5zdGFuY2VBY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIENyZWF0ZUluc3RhbmNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbCA9IChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgIGJvb2xlYW4gcmVzdWx0c1ZhbGlkID0gdHJ1ZTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgU3RyaW5nIGZyYWdtZW50SUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICBpZiAoZnJhZ21lbnRJRCAhPSBudWxsICYmIGZyYWdtZW50SUQubGVuZ3RoKCkgPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lELCBmcmFnbWVudElEKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBTdHJpbmcgbmFtZUFuY2hvcklEID0gcGFyc2VyLmdldFBhcmFtZXRlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCk7Ci0gICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnROYW1lQW5jaG9ySUQobmFtZUFuY2hvcklEKTsKLSAgICByZXR1cm4gcmVzdWx0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiAoRm9ybVRvb2wpd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgZnJhZ21lbnRJRCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICBpZiAoZnJhZ21lbnRJRCAhPSBudWxsICYmIGZyYWdtZW50SUQubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnbWVudElEKTsKLSAgICAgIGlmICgoZnJhZyBpbnN0YW5jZW9mIElYU0RNYXBGcmFnbWVudCkgJiYgKChJWFNETWFwRnJhZ21lbnQpZnJhZykuY3JlYXRlSW5zdGFuY2UoKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NzlmMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotCi1wdWJsaWMgY2xhc3MgSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uIGV4dGVuZHMgSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBJbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFN0cmluZ0J1ZmZlciBlbmRQb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIoZ2V0RW5kUG9pbnQoKSk7Ci0gICAgZW5kUG9pbnQuYXBwZW5kKCc/Jyk7Ci0gICAgYWRkUGFyYW1ldGVycyhlbmRQb2ludCk7Ci0gICAgU3RyaW5nIGVuZFBvaW50U3RyaW5nID0gZW5kUG9pbnQudG9TdHJpbmcoKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IE5ldFV0aWxzLmdldFVSTENvbm5lY3Rpb24oZW5kUG9pbnRTdHJpbmcpOwotICAgICAgaWYgKGNvbm4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVjb3JkSHR0cFJlc3BvbnNlKGNvbm4sbWVzc2FnZVF1ZXVlKTsKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldE9wZXJhdGlvbk5vZGUoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkpOwotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVCIsZW5kUG9pbnRTdHJpbmcpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJJT0V4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwT3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNDE4NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLkhUVFBVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uIGV4dGVuZHMgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX1RZUEVfQ0hBUlNFVEVRID0gImNoYXJzZXQ9IjsKLSAgCi0gIHB1YmxpYyBJbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5wcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgIFN0cmluZyBlbmRQb2ludCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RW5kUG9pbnQoZW5kUG9pbnQpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KShzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuT1BFUkFUSU9OX0VMRU1FTlQsb3BlckVsZW1lbnQpOwotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgIElGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHNWYWxpZDsKLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEVuZFBvaW50KCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBlbmRQb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQpKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5PUEVSQVRJT05fRUxFTUVOVCk7Ci0gICAgaWYgKGVuZFBvaW50LmNoYXJBdChlbmRQb2ludC5sZW5ndGgoKS0xKSAhPSAnLycpCi0gICAgICBlbmRQb2ludC5hcHBlbmQoJy8nKTsKLSAgICBlbmRQb2ludC5hcHBlbmQob3BlckVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gZW5kUG9pbnQudG9TdHJpbmcoKTsgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGFkZFBhcmFtZXRlcnMoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLk9QRVJBVElPTl9FTEVNRU5UKTsKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIGJ1ZmZlci5hcHBlbmQoSFRUUFV0aWwuZ2VuVVJMRW5jb2RlZFBhcmFtZXRlcnMoZnJhZykpOwotICAgICAgaWYgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgYnVmZmVyLmFwcGVuZCgnJicpOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVjb3JkSHR0cFJlc3BvbnNlKFVSTENvbm5lY3Rpb24gY29ubixNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbVJlYWRlciBpbiA9IG51bGw7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBjb25uLmdldENvbnRlbnRUeXBlKCk7Ci0gICAgICBpZiAoY29udGVudFR5cGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW50IGNoYXJzZXRFcVBvcyA9IGNvbnRlbnRUeXBlLmluZGV4T2YoQ09OVEVOVF9UWVBFX0NIQVJTRVRFUSk7Ci0gICAgICAgIGlmIChjaGFyc2V0RXFQb3MgIT0gLTEpCi0gICAgICAgICAgaW4gPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpLGNvbnRlbnRUeXBlLnN1YnN0cmluZyhjaGFyc2V0RXFQb3MrQ09OVEVOVF9UWVBFX0NIQVJTRVRFUS5sZW5ndGgoKSkpOwotICAgICAgfQotICAgICAgaWYgKGluID09IG51bGwpCi0gICAgICAgIGluID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbm4uZ2V0SW5wdXRTdHJlYW0oKSk7Ci0gICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihpbik7Ci0gICAgICBTdHJpbmcgczsKLSAgICAgIHdoaWxlICgocyA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHMpOwotICAgICAgYnIuY2xvc2UoKTsKLSAgICAgIGJyID0gbnVsbDsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGJyICE9IG51bGwpCi0gICAgICAgIGJyLmNsb3NlKCk7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzExM2Y3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLQotcHVibGljIGNsYXNzIEludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24gZXh0ZW5kcyBJbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24KLXsKLQotICBwdWJsaWMgSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIFN0cmluZyBlbmRQb2ludFN0cmluZyA9IGdldEVuZFBvaW50KCk7Ci0gICAgVVJMQ29ubmVjdGlvbiBjb25uID0gTmV0VXRpbHMuZ2V0VVJMQ29ubmVjdGlvbihlbmRQb2ludFN0cmluZyk7Ci0gICAgaWYgKGNvbm4gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGFkZFBhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0gICAgICBjb25uLnNldERvT3V0cHV0KHRydWUpOwotICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gbnVsbDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoY29ubi5nZXRPdXRwdXRTdHJlYW0oKSk7Ci0gICAgICAgIG91dC5wcmludChwYXJhbWV0ZXJzKTsKLSAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgIG91dCA9IG51bGw7Ci0gICAgICAgIHJlY29yZEh0dHBSZXNwb25zZShjb25uLG1lc3NhZ2VRdWV1ZSk7Ci0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRPcGVyYXRpb25Ob2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIklPRXhjZXB0aW9uIixlKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKG91dCAhPSBudWxsKQotICAgICAgICAgIG91dC5jbG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIkV4Y2VwdGlvbiIsbmV3IElPRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5BQkxFX1RPX0NPTk5FQ1QiLGVuZFBvaW50U3RyaW5nKSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGFkM2I5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqIDIwMDcwNTEwICAgMTg2Mzc1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDb21waWxlIGVycm9ycyBpbiB3c3Qud3MuZXhwbG9yZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuRW5kcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExCaW5kaW5nRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuU09BUE1lc3NhZ2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgU3RyaW5nIGVuZFBvaW50ID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRFbmRQb2ludChlbmRQb2ludCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBJU09BUE1lc3NhZ2UgdG8gdXNlIGZvciB0aGUgY3VycmVudCBTT0FQIG9wZXJhdGlvbiBpbnZvY2F0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIG9wZXJFbGVtZW50IFRoZSBvcGVyYXRpb24gZWxlbWVudCBmcm9tIHRoZSBXU0RMIG1vZGVsLgotICAgKiAKLSAgICogQHJldHVybiBBbiBJU09BUE1lc3NhZ2UsIG9yIG51bGwgaWYgYSBtZXNzYWdlIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4KLSAgICovCi0gIHByb3RlY3RlZCBJU09BUE1lc3NhZ2UgZ2V0U09BUFJlcXVlc3RNZXNzYWdlKFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50KSB7Ci0JICBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIHByb3ZpZGVyID0gb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCk7Ci0JICBpZiAocHJvdmlkZXIgPT0gbnVsbCkKLQkJICByZXR1cm4gbnVsbDsJICAKLQkgIHJldHVybiBwcm92aWRlci5uZXdUcmFuc3BvcnQoKS5uZXdNZXNzYWdlKG9wZXJFbGVtZW50LmdldE1lc3NhZ2VDb250ZXh0KCkpOwotICB9Ci0gIAotICAvKioKLSAgICogUG9wdWxhdGUgdGhlIGdpdmVuIElTT0FQTWVzc2FnZSdzIGhlYWRlciB1c2luZyB0aGUgaW5wdXRzIGZyb20gV1NFCi0gICAqIAotICAgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgSGFzaHRhYmxlIGNvbnRhaW5pbmcgYSBtYXAgb2YgdGhlIG5hbWVzcGFjZSBVUklzIHRvIHByZWZpeGVzLgotICAgKiBAcGFyYW0gb3BlckVsZW1lbnQgV1NETE9wZXJhdGlvbkVsZW1lbnQgZW5jYXBzdWxhdGluZyB0aGUgV1NETCBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBzb2FwTWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHBvcHVsYXRlIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0SGVhZGVyQ29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotICAgIFNPQVBNZXNzYWdlVXRpbHMuc2V0SGVhZGVyQ29udGVudEZyb21Nb2RlbChzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgb3BlckVsZW1lbnQsIHNvYXBNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBQb3B1bGF0ZSB0aGUgZ2l2ZW4gSVNPQVBNZXNzYWdlJ3MgYm9keSB1c2luZyB0aGUgaW5wdXRzIGZyb20gV1NFCi0gICAqIAotICAgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgSGFzaHRhYmxlIGNvbnRhaW5pbmcgYSBtYXAgb2YgdGhlIG5hbWVzcGFjZSBVUklzIHRvIHByZWZpeGVzLgotICAgKiBAcGFyYW0gb3BlckVsZW1lbnQgV1NETE9wZXJhdGlvbkVsZW1lbnQgZW5jYXBzdWxhdGluZyB0aGUgV1NETCBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBzb2FwTWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHBvcHVsYXRlIAotICAgKi8gIAotICBwcm90ZWN0ZWQgdm9pZCBzZXRCb2R5Q29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpIAotICAgIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQlTT0FQTWVzc2FnZVV0aWxzLnNldEJvZHlDb250ZW50RnJvbU1vZGVsKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotICB9ICAgICAgICAKLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHNvYXBBZGRyZXNzTG9jYXRpb24gPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KW9wZXJFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExBY3Rpb25JbnB1dHMuU09BUF9SRVNQT05TRV9DQUNIRUQsIG5ldyBCb29sZWFuKGZhbHNlKSk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2VuZXJhdGUgdGhlIFNPQVAgZW52ZWxvcGUgYW5kIGl0cyBjaGlsZHJlbi4gV2UgbmVlZCB0byBjcmVhdGUgYSBET00gZWxlbWVudCB2ZXJzaW9uIHRvIGRpc3BsYXkgYW5kIHRoZSBvYmplY3QgdmVyc2lvbiB0byBleGVjdXRlLgotICAgICAgLy8gPFNPQVAtRU5WOkVudmVsb3BlCi0gICAgICAvLyAgICB4bWxuczpTT0FQLUVOVj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAgICAvLyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgLy8gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICAvLyAuLi4KLQotCSAgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlID0gZ2V0U09BUFJlcXVlc3RNZXNzYWdlKG9wZXJFbGVtZW50KTsKLQkgIGlmIChzb2FwTWVzc2FnZSA9PSBudWxsKQotCQkgIHRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TVUlUQUJMRV9UUkFOU1BPUlQiKSk7Ci0JICAKLQkgIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoc29hcE1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSk7CSAgCi0JICBzZXRIZWFkZXJDb250ZW50KG5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotCSAgc2V0Qm9keUNvbnRlbnQobmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7ICAgICAgCi0JICBzb2FwTWVzc2FnZS5zZXROYW1lc3BhY2VUYWJsZShuYW1lc3BhY2VUYWJsZSk7Ci0KLQkgIC8vIHN0b3JlIHRoZSByZXF1ZXN0Ci0JICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVCwgc29hcE1lc3NhZ2UpOyAgCi0JICAKLQkgIC8vIEV4ZWN1dGUgdGhlIFNPQVAgb3BlcmF0aW9uLgotICAgICAgaWYgKHNvYXBBZGRyZXNzTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsgICAgCQotICAgIAlzb2FwTWVzc2FnZS5zZXRQcm9wZXJ0eShJU09BUE1lc3NhZ2UuUFJPUF9TT0FQX0FDVElPTiwgb3BlckVsZW1lbnQuZ2V0U29hcEFjdGlvbigpKTsKLSAgICAJU3RyaW5nW10gYXV0aFBhcmFtcyA9IHJldHJpZXZlQXV0aFBhcmFtcyhiaW5kaW5nRWxlbWVudCwgc29hcEFkZHJlc3NMb2NhdGlvbik7Ci0gICAgCQotICAgIAkvLyBpbnZva2UhCi0gICAgCUlTT0FQTWVzc2FnZSBzb2FwUmVzcG9uc2UgPSBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKS5uZXdUcmFuc3BvcnQoKQotICAgIAkJLnNlbmQoc29hcEFkZHJlc3NMb2NhdGlvbiwgYXV0aFBhcmFtc1swXSwgYXV0aFBhcmFtc1sxXSwgc29hcE1lc3NhZ2UpOwotICAgIAkKLSAgICAJLy8gc3RvcmUgdGhlIHJlc3BvbnNlCi0gICAgCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVNQT05TRSwgc29hcFJlc3BvbnNlKTsKLSAgICAJCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRPcGVyYXRpb25Ob2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVCIsc29hcEFkZHJlc3NMb2NhdGlvbikpOwotICAgIH0KLSAgICBjYXRjaCAoSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvd0hUVFBUcmFuc3BvcnRFeGNlcHRpb24oYmluZGluZ0VsZW1lbnQsIHNvYXBBZGRyZXNzTG9jYXRpb24sIGUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIFRocm93YWJsZSB0ID0gZTsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgVHJhbnNwb3J0RXhjZXB0aW9uICYmIGUuZ2V0Q2F1c2UoKSAhPSBudWxsKQotICAgIAl0ID0gZS5nZXRDYXVzZSgpOwotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsIG1lc3NhZ2VRdWV1ZSwgdC5nZXRDbGFzcygpLmdldE5hbWUoKSwgdCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHRocm93SFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQsIFN0cmluZyBlbmRwb2ludFN0cmluZywgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBodHRwVHJhbnNwb3J0RXhjZXB0aW9uKSB0aHJvd3MgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGh0dHBUcmFuc3BvcnRFeGNlcHRpb24uZ2V0U3RhdHVzQ29kZSgpID09IEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKQotICAgIHsKLSAgICAgIEVuZHBvaW50IGVuZHBvaW50ID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgICAgaWYgKGVuZHBvaW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZHBvaW50LnNldFJlcXVpcmVIVFRQQmFzaWNBdXRoKHRydWUpOwotICAgICAgICBlbmRwb2ludC5zZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUobnVsbCk7Ci0gICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhyb3cgaHR0cFRyYW5zcG9ydEV4Y2VwdGlvbjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmdbXSByZXRyaWV2ZUF1dGhQYXJhbXMoV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LCBTdHJpbmcgZW5kcG9pbnRTdHJpbmcpCi0gIHsKLQlTdHJpbmdbXSBhdXRoUGFyYW1zID0gbmV3IFN0cmluZ1tdIHsgbnVsbCwgbnVsbCB9OwotICAgIEVuZHBvaW50IGVuZHBvaW50ID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgIGlmIChlbmRwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlbmRwb2ludC5pc1JlcXVpcmVIVFRQQmFzaWNBdXRoKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBlbmRwb2ludC5nZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGVuZHBvaW50LmdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpOwotICAgICAgICBpZiAoaHR0cEJhc2ljQXV0aFVzZXJuYW1lID09IG51bGwgfHwgaHR0cEJhc2ljQXV0aFBhc3N3b3JkID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBodHRwQmFzaWNBdXRoVXNlcm5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSk7Ci0gICAgICAgICAgaHR0cEJhc2ljQXV0aFBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQpOwotICAgICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotICAgICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChodHRwQmFzaWNBdXRoUGFzc3dvcmQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChodHRwQmFzaWNBdXRoVXNlcm5hbWUgIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoUGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGF1dGhQYXJhbXNbMF0gPSBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gICAgICAgICAgYXV0aFBhcmFtc1sxXSA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYXV0aFBhcmFtczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiYjZkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNmb3JtZXIuRnJhZ21lbnRUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLQotcHVibGljIGNsYXNzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbiBleHRlbmRzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uCi17Ci0gIHB1YmxpYyBJbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICBpZiAoc291cmNlQ29udGVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCkgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gdmFsaWRhdGUgaGVhZGVycwotICAgICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycygpLml0ZXJhdG9yKCk7ICAgICAgCi0JICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaXQubmV4dCgpOyAgICAgICAgCi0gICAgICAgIElGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBzb2FwSGVhZGVyLmdldEVNZXNzYWdlKCk7Ci0gICAgICAgICAgUGFydCBwYXJ0ID0gc29hcEhlYWRlci5nZXRFUGFydCgpOyAgICAgICAgCQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVkFMSURBVElOR19QQVJBTUVURVIiLCBtZXNzYWdlLmdldFFOYW1lKCkgKyAiICIgKyBwYXJ0LmdldE5hbWUoKSkpOwotICAgICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIHZhbGlkYXRlIGJvZHkKLSAgICAgIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXQubmV4dCgpOwotICAgICAgICBJRnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICB7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9WQUxJREFUSU5HX1BBUkFNRVRFUiIsIHBhcnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgcmVzdWx0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoICsgMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGggLSAxXSA9IG5ldyBGcmFnbWVudFRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NjcwYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci0KLXB1YmxpYyBjbGFzcyBJbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbiBleHRlbmRzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBuZXdGaWxlU2VsZWN0ZWRfOwotICBwcml2YXRlIGJvb2xlYW4gc2F2ZUFzU2VsZWN0ZWRfOwotICBwcml2YXRlIGJvb2xlYW4gaXNIZWFkZXJfOwotICAKLSAgcHVibGljIEludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5ld0ZpbGVTZWxlY3RlZF8gPSBmYWxzZTsKLSAgICBzYXZlQXNTZWxlY3RlZF8gPSBmYWxzZTsKLSAgICBpc0hlYWRlcl8gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5wcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KWdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgbmV3RmlsZVNlbGVjdGVkXyA9IGZhbHNlOwotICAgIHNhdmVBc1NlbGVjdGVkXyA9IGZhbHNlOwotICAgIGlzSGVhZGVyXyA9IGZhbHNlOwotICAgIC8qICB0cnkgYW5kIGNhdGNoIGlzIG5lZWRlZCBpZiB3ZSBhcmUgZG9pbmcgZnJhZ21lbnRpemF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAqLwotICAgICAgU3RyaW5nIHN1Ym1pc3Npb25BY3Rpb24gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04pOwotICAgICAgU3RyaW5nIHNvdXJjZUNvbnRlbnRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihGcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVF9IRUFERVIpOwotICAgICAgaWYgKHNvdXJjZUNvbnRlbnRzICE9IG51bGwpCi0gICAgCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLHNvdXJjZUNvbnRlbnRzKTsgIAotICAgICAgc291cmNlQ29udGVudHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICAgIGlmIChzb3VyY2VDb250ZW50cyAhPSBudWxsKQotICAgICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULHNvdXJjZUNvbnRlbnRzKTsKLSAgICAgIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFX0hFQURFUi5lcXVhbHMoc3VibWlzc2lvbkFjdGlvbikpCi0gICAgICB7Ci0gICAgCW5ld0ZpbGVTZWxlY3RlZF8gPSB0cnVlOwotICAgICAgICBTdHJpbmcgZmlsZUNvbnRlbnRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLlNFTEVDVEVEX0ZJTEVfSEVBREVSKTsKLSAgICAgICAgaWYgKGZpbGVDb250ZW50cyAhPSBudWxsKQotICAgICAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLGZpbGVDb250ZW50cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFLmVxdWFscyhzdWJtaXNzaW9uQWN0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgbmV3RmlsZVNlbGVjdGVkXyA9IHRydWU7Ci0gICAgICAgIFN0cmluZyBmaWxlQ29udGVudHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU0VMRUNURURfRklMRSk7Ci0gICAgICAgIGlmIChmaWxlQ29udGVudHMgIT0gbnVsbCkKLSAgICAgICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULGZpbGVDb250ZW50cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVNfSEVBREVSLmVxdWFscyhzdWJtaXNzaW9uQWN0aW9uKSkKLSAgICAgIHsKLSAgICAJc2F2ZUFzU2VsZWN0ZWRfID0gdHJ1ZTsKLSAgICAJaXNIZWFkZXJfID0gdHJ1ZTsKLSAgICAJcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVMuZXF1YWxzKHN1Ym1pc3Npb25BY3Rpb24pKQotICAgICAgewotICAgICAgICAvLyBTYXZlIEFzLi4uIGFjdGlvbgotICAgICAgICBzYXZlQXNTZWxlY3RlZF8gPSB0cnVlOyAgICAgIAotICAgIAlyZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nW10gbnNEZWNsYXJhdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX05BTUVTUEFDRSk7Ci0gICAgICBpZiAobnNEZWNsYXJhdGlvbnMgIT0gbnVsbCkKLSAgICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9OQU1FU1BBQ0UsbnNEZWNsYXJhdGlvbnMpOyAgICAJCi0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIC8qCi0gICAgfSAgICAgICAKLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlNBWEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJJT0V4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgICAqLwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5JbnZva2VXU0RMU09BUE9wZXJhdGlvbkFjdGlvbiNnZXRTT0FQUmVxdWVzdE1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50KQotICAgKi8KLSAgcHJvdGVjdGVkIElTT0FQTWVzc2FnZSBnZXRTT0FQUmVxdWVzdE1lc3NhZ2UoV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHsJICAKLQkgIHJldHVybiAoSVNPQVBNZXNzYWdlKSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVF9UTVApOwotICB9IAotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLkludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uI3NldEhlYWRlckNvbnRlbnQoamF2YS51dGlsLkhhc2h0YWJsZSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldEhlYWRlckNvbnRlbnQoSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCwgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlKSB7CQotICAgCVN0cmluZyBoZWFkZXJDb250ZW50ID0gb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIpOwotICAgIG9wZXJFbGVtZW50LmdldFNPQVBUcmFuc3BvcnRQcm92aWRlcigpLm5ld1RyYW5zcG9ydCgpLm5ld0Rlc2VyaWFsaXplcigpCi0gICAgCS5kZXNlcmlhbGl6ZShJU09BUE1lc3NhZ2UuSEVBREVSX0NPTlRFTlQsIGhlYWRlckNvbnRlbnQsIHNvYXBNZXNzYWdlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24jc2V0Qm9keUNvbnRlbnQoamF2YS51dGlsLkhhc2h0YWJsZSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLSAgICovIAotICBwcm90ZWN0ZWQgdm9pZCBzZXRCb2R5Q29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpIHsKLSAgICBTdHJpbmcgYm9keUNvbnRlbnQgPSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UKTsgICAgCi0gICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAJLmRlc2VyaWFsaXplKElTT0FQTWVzc2FnZS5CT0RZX0NPTlRFTlQsIGJvZHlDb250ZW50LCBzb2FwTWVzc2FnZSk7ICAgICAgICAKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHdhc05ld0ZpbGVTZWxlY3RlZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3RmlsZVNlbGVjdGVkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gd2FzU2F2ZUFzU2VsZWN0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHNhdmVBc1NlbGVjdGVkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREZWZhdWx0U2F2ZUFzRmlsZU5hbWUoKQotICB7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIHJldHVybiAobmV3IFN0cmluZ0J1ZmZlcihvcGVyRWxlbWVudC5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkpKS5hcHBlbmQoIi50eHQiKS50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVNvdXJjZUNvbnRlbnQoT3V0cHV0U3RyZWFtIG9zKQotICB7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKG9zKTsKLSAgICBpZiAoaXNIZWFkZXJfKQotICAgICAgcHcucHJpbnRsbihvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX0hFQURFUikpOwotICAgIGVsc2UKLSAgIAkgIHB3LnByaW50bG4ob3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCkpOwotICAgIHB3LmNsb3NlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTQyMmUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTRExBY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24gewotCi0gIHB1YmxpYyBPcGVuV1NETEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgd3NkbFVybCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLCB3c2RsVXJsKTsKLSAgICBmb3JtVG9vbC51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBTdHJpbmcgd3NkbFVybCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCByb290RWxlbWVudCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICAvLyBjcmVhdGUgYSBXU0RMRWxlbWVudCByZXByZXNlbnRpbmcgdGhlIFdTREwKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudCh3c2RsVXJsLCByb290RWxlbWVudC5nZXRNb2RlbCgpLCB3c2RsVXJsKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBvcGVuIFdTREwKLSAgICAgIFZlY3RvciBlcnJvck1lc3NhZ2VzID0gd3NkbEVsZW1lbnQubG9hZFdTREwoKTsKLSAgICAgIGlmIChlcnJvck1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfWFNEX1ZBTElEQVRJT04iKSk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGVycm9yTWVzc2FnZXMuc2l6ZSgpO2krKykKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoU3RyaW5nKWVycm9yTWVzc2FnZXMuZWxlbWVudEF0KGkpKTsKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX09QRU5fV1NETCIsd3NkbFVybCkpOyAgICAgICAgICAKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiV1NETEV4Y2VwdGlvbiIsZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJvb3RFbGVtZW50LmNvbm5lY3Qod3NkbEVsZW1lbnQsV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotCi0gICAgLy8gYnVpbGQgdGhlIGRhdGFtb2RlbCBmb3IgdGhpcyBXU0RMRWxlbWVudAotICAgIHdzZGxFbGVtZW50LmJ1aWxkTW9kZWwoKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHNlcnZpY2Ugbm9kZSwgc2VsZWN0IHRoZSBXU0RMIG5vZGUuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBzZXJ2aWNlIG5vZGUuCi0gICAgLy8gSWYgdGhlcmUgaXMganVzdCB0aGUgb25lIHNlcnZpY2UgYW5kIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBiaW5kaW5nIG5vZGUuCi0gICAgLy8gc2VsZWN0IHRoZSBuZXcgV1NETCBub2RlCi0gICAgTm9kZSB3c2RsTm9kZSA9IHJvb3ROb2RlLmdldENoaWxkTm9kZSh3c2RsRWxlbWVudCk7Ci0gICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbmV3U2VsZWN0ZWROb2RlSWQgPSB3c2RsTm9kZS5nZXROb2RlSWQoKTsKLSAgICBpZiAoc2VydmljZU5vZGVzLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGlmIChiaW5kaW5nTm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSAoTm9kZSliaW5kaW5nTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9IGJpbmRpbmdOb2RlLmdldE5vZGVJZCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9IHNlcnZpY2VOb2RlLmdldE5vZGVJZCgpOwotICAgIH0KLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdTZWxlY3RlZE5vZGVJZCk7Ci0gICAgbm9kZU1hbmFnZXIubWFrZU5vZGVWaXNpYmxlKG5vZGVNYW5hZ2VyLmdldE5vZGUobmV3U2VsZWN0ZWROb2RlSWQpKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwsU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobmV3U2VsZWN0ZWROb2RlSWQsIDAsIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgdHJ1ZSkpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19PUEVOX1dTRExfU1VDQ0VTU0ZVTCIsIHdzZGxVcmwpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlblhTREluZm9EaWFsb2dBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZGQ4NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlblhTREluZm9EaWFsb2dBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbigpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgbm9kZUlkLFN0cmluZyBmcmFnSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvZnJhZ21lbnQvWFNESW5mb0RpYWxvZy5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkuYXBwZW5kKCc9JykuYXBwZW5kKGZyYWdJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVmcmVzaFdTRExBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyOGQ4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMTWFpbk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFdTRExBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uIHsKLQotICBwdWJsaWMgUmVmcmVzaFdTRExBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKSB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2FjdGlvbnMvV1NETFJlZnJlc2hBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5IHsKLSAgICAgIG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQobm9kZUlEU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZUlkKCk7Ci0gICAgfQotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmICEobm9kZSBpbnN0YW5jZW9mIFdTRExNYWluTm9kZSkpIHsKLSAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE5vZGUpIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKG5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBub2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgd3NkbE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpd3NkbE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb25Db3B5ID0gd3NkbEVsZW1lbnQuZ2V0RGVmaW5pdGlvbigpOwotICAgIFZlY3RvciBzY2hlbWFMaXN0Q29weSA9IHdzZGxFbGVtZW50LmdldFNjaGVtYUxpc3QoKTsKLSAgICB3c2RsRWxlbWVudC5zZXREZWZpbml0aW9uKG51bGwpOwotICAgIHdzZGxFbGVtZW50LnNldFNjaGVtYUxpc3QobmV3IFZlY3RvcigpKTsKLSAgICBpbnQgc2VsZWN0ZWROb2RlSUQgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKS5nZXROb2RlSWQoKTsKLQotICAgIHRyeSB7Ci0gICAgICAvLyBvcGVuIFdTREwKLSAgICAgIFZlY3RvciBlcnJvck1lc3NhZ2VzID0gd3NkbEVsZW1lbnQubG9hZFdTREwoKTsKLSAgICAgIGlmIChlcnJvck1lc3NhZ2VzLnNpemUoKSA+IDApIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9YU0RfVkFMSURBVElPTiIpKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZXJyb3JNZXNzYWdlcy5zaXplKCk7aSsrKQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKChTdHJpbmcpZXJyb3JNZXNzYWdlcy5lbGVtZW50QXQoaSkpOwotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfT1BFTl9XU0RMIix3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpKTsgICAgICAgICAgCi0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIldTRExFeGNlcHRpb24iLGUpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0RGVmaW5pdGlvbihkZWZpbml0aW9uQ29weSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXRTY2hlbWFMaXN0KHNjaGVtYUxpc3RDb3B5KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBidWlsZCB0aGUgZGF0YW1vZGVsIGZvciB0aGlzIFdTRExFbGVtZW50Ci0gICAgd3NkbEVsZW1lbnQuYnVpbGRNb2RlbCgpOwotCi0gICAgLy8gU2VsZWN0IGEgbmV3IG5vZGUgaWYgdGhlIHByZXZpb3VzIHNlbGVjdGVkIG5vZGUgbm8gbG9uZ2VyIGV4aXN0cwotICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHNlcnZpY2Ugbm9kZSwgc2VsZWN0IHRoZSBXU0RMIG5vZGUuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBzZXJ2aWNlIG5vZGUuCi0gICAgLy8gSWYgdGhlcmUgaXMganVzdCB0aGUgb25lIHNlcnZpY2UgYW5kIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBiaW5kaW5nIG5vZGUuCi0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShzZWxlY3RlZE5vZGVJRCk7Ci0gICAgaWYgKG5vZGUgPT0gbnVsbCkgewotICAgICAgc2VsZWN0ZWROb2RlSUQgPSB3c2RsTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSB3c2RsTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBpZiAoc2VydmljZU5vZGVzLnNpemUoKSA9PSAxKQotICAgICAgewotICAgICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdOb2Rlcy5zaXplKCkgPT0gMSkKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSAoTm9kZSliaW5kaW5nTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICAgIHNlbGVjdGVkTm9kZUlEID0gYmluZGluZ05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHNlbGVjdGVkTm9kZUlEID0gc2VydmljZU5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICB9Ci0gICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChzZWxlY3RlZE5vZGVJRCk7Ci0gICAgICBub2RlTWFuYWdlci5tYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXIuZ2V0Tm9kZShzZWxlY3RlZE5vZGVJRCkpOwotICAgIH0KLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUkVGUkVTSF9XU0RMX1NVQ0NFU1NGVUwiLCB3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGNhMTU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUmVzaXplRnJhbWVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBSZXNpemVXU0RMRnJhbWVzQWN0aW9uIGV4dGVuZHMgUmVzaXplRnJhbWVzQWN0aW9uCi17Ci0gIHB1YmxpYyBSZXNpemVXU0RMRnJhbWVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBmcmFtZXNldCBzaXplcy4KLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUpOwotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIG5ldyBmcmFtZXNldCBzaXplcy4KLSAgICBpZiAoZnJhbWVOYW1lLmVxdWFscyhXU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIpKQotICAgIHsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHdzZGxQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIxMDAlLDAlIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lTmFtZS5lcXVhbHMoV1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMod3NkbFBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHdzZGxQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIxMDAlLDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhXU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh3c2RsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Mod3NkbFBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjAlLDEwMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzVmMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZUFjdGlvbgotewotCi0gICAgcHVibGljIFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgICAgCi0gICAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbE5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1NjA4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZVRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlVG9vbEFjdGlvbgotewotCi0gICAgcHVibGljIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgICAgIGlmICh2aWV3SUQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtlZXBIaXN0b3J5KSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgiPTEiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2xfLmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICAgICAgaW50IHZpZXdUb29sSWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCx0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzZGxOYXZpZ2F0b3JDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbFByb3BlcnRpZXNDb250YWluZXIiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTViYzNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbiBleHRlbmRzIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICAKLSAgICAvLyBTYXZlIHRoZSBmcmFtZXNldCBzaXplcyBpZmYgbm8gZnJhbWUgaXMgbWF4aW1pemVkLgotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgCi0gICAgaWYgKCFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAKLSAgICByZXR1cm4gc3VwZXIucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGVyc3BlY3RpdmVJZCk7Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBmb3JtTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOyAgICAKLSAgICByZXR1cm4gZm9ybUxpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQzM2U5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuU09BUE1lc3NhZ2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uIGV4dGVuZHMgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBTeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIucHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIAotICAgIEludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIFN0cmluZyB2aWV3SUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX0lELCB2aWV3SUQpOwotICAgIGlmICh2aWV3SUQuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFKSkKLSAgICB7Ci0gICAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRGcmFnbWVudFZpZXdJRChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSk7Ci0gICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX05BTUVTUEFDRSwgbnVsbCk7Ci0gICAgICAKLSAgICAgIHJldHVybiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKHBhcnNlciwgb3BlckVsZW1lbnQpICYJCS8vIG5lZWQgdG8gcHJvY2VzcyBib3RoIGhlYWRlciBhbmQgYm9keSAKLSAgICAgICAgICAgICBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzKHBhcnNlciwgb3BlckVsZW1lbnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnRWaWV3SUQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0pOwotICAgICAgU3RyaW5nW10gbnNEZWNsYXJhdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX05BTUVTUEFDRSk7ICAgIAotICAgICAgaWYgKG5zRGVjbGFyYXRpb25zICE9IG51bGwpCi0gICAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFLG5zRGVjbGFyYXRpb25zKTsKLSAgICAgIAotICAgICAgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlID0gKElTT0FQTWVzc2FnZSkgb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFUVVFU1RfVE1QKTsKLSAgICAgIGJvb2xlYW4gcmMgPSBwcm9jZXNzU291cmNlVmlld1BhcnNlZFJlc3VsdHNIZWFkZXIocGFyc2VyLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpICYJLy8gbmVlZCB0byBwcm9jZXNzIGJvdGggaGVhZGVyIGFuZCBib2R5Ci0JCSAJCSAgIHByb2Nlc3NTb3VyY2VWaWV3UGFyc2VkUmVzdWx0cyhwYXJzZXIsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7IAotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFUVVFU1RfVE1QLCBudWxsKTsKLSAgICAgIAotICAgICAgcmV0dXJuIHJjOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7IAotCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLCBudWxsKTsJCi0JYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotCSAgICAKLQlJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKCkuaXRlcmF0b3IoKTsKLQl3aGlsZSAoaXQuaGFzTmV4dCgpKQotCXsKLQkgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7ICAgICAgICAKLQkgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0JICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLQl9Ci0JaWYgKHJlc3VsdHNWYWxpZCkKLQkgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLG51bGwpOwotICAgIHJldHVybiByZXN1bHRzVmFsaWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCwgbnVsbCk7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotCQotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7ICAgIAotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAocmVzdWx0c1ZhbGlkKQotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCxudWxsKTsKLSAgICByZXR1cm4gcmVzdWx0c1ZhbGlkOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NvdXJjZVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkgCi0gIAl0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotCSAgCi0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX0hFQURFUik7Ci0gICAgaWYgKHNvdXJjZUNvbnRlbnQgIT0gbnVsbCkKLSAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLCBzb3VyY2VDb250ZW50KTsgICAgCi0gICAgICAgICAgIAotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoKS5pdGVyYXRvcigpOwotICAgIGlmICghaXQuaGFzTmV4dCgpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAgIAkuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkhFQURFUl9DT05URU5ULCBzb3VyY2VDb250ZW50LCBzb2FwTWVzc2FnZSk7ICAKLSAgICAJCi0gICAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBzb2FwTWVzc2FnZS5nZXRIZWFkZXJDb250ZW50KCk7Ci0gICAgICBNYXAgbmFtZXNwYWNlVGFibGUgPSBzb2FwTWVzc2FnZS5nZXROYW1lc3BhY2VUYWJsZSgpOwotICAgICAgCi0gICAgICBib29sZWFuIHNvdXJjZUVsZW1lbnRzVmFsaWQgPSB0cnVlOwotICAgICAgaW50IHN0YXJ0ID0gMDsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkgJiYgc3RhcnQgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGgpCi0gICAgICB7Ci0gICAgICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKWl0Lm5leHQoKTsKLSAgICAgICAgU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCBmcmFnID0gKFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQpIG9wZXJFbGVtZW50LmdldEhlYWRlckZyYWdtZW50KHNvYXBIZWFkZXIpOwotICAgICAgICAKLSAgICAgICAgaW50IHBvcyA9IFNPQVBNZXNzYWdlVXRpbHMuZmluZEZpcnN0TWF0Y2hpbmdFbGVtZW50KAotICAgICAgICAJCXNvYXBIZWFkZXIuZ2V0RVBhcnQoKSwKLQkJCQlpbnN0YW5jZURvY3VtZW50cywKLQkJCQluYW1lc3BhY2VUYWJsZSwKLQkJCQlmcmFnLmdldE5hbWUoKSwKLQkJCQlzdGFydCk7Ci0JCQkKLQkJaWYgKHBvcyA9PSAtMSkKLQkJCWNvbnRpbnVlOwotCQkJCi0JCUVsZW1lbnQgZWxlbWVudCA9IGluc3RhbmNlRG9jdW1lbnRzW3Bvc107Ci0JCXN0YXJ0ID0gcG9zICsgMTsJCQkKLSAgICAgICAgCi0gICAgICAgIGlmICghZnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudChlbGVtZW50LCBuYW1lc3BhY2VUYWJsZSkpCi0gICAgICAgICAgc291cmNlRWxlbWVudHNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzVmFsaWQ7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTb3VyY2VWaWV3UGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0gIAl0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotCSAgCi0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICBpZiAoc291cmNlQ29udGVudCAhPSBudWxsKQotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCwgc291cmNlQ29udGVudCk7Ci0gICAgCi0gICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsgICAgCi0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAgIAkuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVCwgc291cmNlQ29udGVudCwgc29hcE1lc3NhZ2UpOyAgICAgIAkKLSAgICAJCi0gICAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBzb2FwTWVzc2FnZS5nZXRCb2R5Q29udGVudCgpOwotICAgICAgCi0gICAgICBib29sZWFuIHNvdXJjZUVsZW1lbnRzVmFsaWQgPSB0cnVlOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgICBpZiAoIWZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzKSkKLSAgICAgICAgICBzb3VyY2VFbGVtZW50c1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc291cmNlRWxlbWVudHNWYWxpZDsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ4Y2Q5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlRvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBUb2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLiZvcGVuPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsYm9vbGVhbiBvcGVuKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOKS5hcHBlbmQoJz0nKS5hcHBlbmQob3Blbj9BY3Rpb25JbnB1dHMuT1BFTl9OT0RFOkFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgdG8gc2VsZWN0IHRoZSB0b2dnbGVkIG5vZGUgd2hlbiwgYXQgdGhlIHRpbWUgb2YKLSAgLy8gdGhlIGNvbGxhcHNlIGV2ZW50LCBhIGRlc2NlbmRhbnQgbm9kZSB3YXMgc2VsZWN0ZWQuCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSB0b2dnbGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGludCBub2RlSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKTsKLSAgICBpbnQgdmlld0lkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHRydWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0cnVlKTsKLSAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2RsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiAid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzZGxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlNjY1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEJpbmRpbmdFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExCaW5kaW5nTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVXU0RMQmluZGluZ0FjdGlvbiBleHRlbmRzIFdTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gbm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgaWYgKG5vZGVJZHMgPT0gbnVsbCkKLSAgICAgIG5vZGVJZHMgPSBuZXcgU3RyaW5nWzBdOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSWRzKTsKLSAgICBTdHJpbmdbXSBlbmRwb2ludHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UKTsKLSAgICBpZiAoZW5kcG9pbnRzID09IG51bGwpCi0gICAgICBlbmRwb2ludHMgPSBuZXcgU3RyaW5nWzBdOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCwgZW5kcG9pbnRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmdbXSBub2RlSWRzID0gZ2V0UHJvcGVydHlBc1N0cmluZ0FycmF5KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIFN0cmluZ1tdIGVuZHBvaW50cyA9IGdldFByb3BlcnR5QXNTdHJpbmdBcnJheShXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBOb2RlIGJpbmRpbmdOb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJZHNbaV0pKTsKLSAgICAgICAgaWYgKGJpbmRpbmdOb2RlIGluc3RhbmNlb2YgV1NETEJpbmRpbmdOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudCliaW5kaW5nTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFN0cmluZ1tdIGVuZHBvaW50c0NvcHkgPSBlbmRwb2ludHM7Ci0gICAgICAgICAgYmluZGluZ0VsZW1lbnQuc2V0RW5kUG9pbnRzKGVuZHBvaW50c0NvcHkpOwotICAgICAgICAgIGlmIChlbmRwb2ludHNDb3B5Lmxlbmd0aCA8PSAwKQotICAgICAgICAgICAgZW5kcG9pbnRzQ29weSA9IGJpbmRpbmdFbGVtZW50LmdldEVuZFBvaW50cygpOwotICAgICAgICAgIGlmIChlbmRwb2ludHNDb3B5Lmxlbmd0aCA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgVmVjdG9yIG9wZXJhdGlvbk5vZGVzID0gYmluZGluZ05vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG9wZXJhdGlvbk5vZGVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5vZGUgb3BlcmF0aW9uTm9kZSA9IChOb2RlKWl0Lm5leHQoKTsKLSAgICAgICAgICAgICAgTGlzdCB0b29scyA9IG9wZXJhdGlvbk5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0VG9vbHMoKTsKLSAgICAgICAgICAgICAgZm9yIChJdGVyYXRvciB0b29sc0l0ZXJhdG9yID0gdG9vbHMuaXRlcmF0b3IoKTsgdG9vbHNJdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVG9vbCB0b29sID0gKFRvb2wpdG9vbHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvb2wgaW5zdGFuY2VvZiBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkKLSAgICAgICAgICAgICAgICAgICgoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpdG9vbCkuc2V0RW5kUG9pbnQoZW5kcG9pbnRzQ29weVswXSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19VUERBVEVfV1NETF9CSU5ESU5HX1NVQ0NFU1NGVUwiKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmNiYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbiB7Ci0gIHB1YmxpYyBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgdHJ5IHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQobm9kZUlEKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSUQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCkgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1dTRExDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkgewotICAgIFN0cmluZyB3c2RsVXJsID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKTsKLSAgICByZXR1cm4gZmF2Rm9sZGVyRWxlbWVudC5mYXZvcml0ZUV4aXN0cyh0YWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIFN0cmluZyB3c2RsVXJsID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKTsKLSAgICBpZiAoZmF2Rm9sZGVyRWxlbWVudC5hZGRGYXZvcml0ZSh0YWJsZSkpIHsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCB3c2RsVXJsKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVMiLCB3c2RsVXJsKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIHdzZGxOb2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFdTRExFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXU0RMRWxlbWVudCl3c2RsTm9kZU1hbmFnZXIuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRCkpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudC5nZXRXc2RsVXJsKCk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKSB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIGZhdk5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBUcmVlRWxlbWVudCBmYXZSb290RWxlbWVudCA9IGZhdk5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZmF2Um9vdEVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gICAgcmV0dXJuIChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmN2NlMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLldTRExGaWxlTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIHsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb25fOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0V1NETEZpbGVOYW1lXzsKLQotICBwdWJsaWMgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgZGVmaW5pdGlvbl8gPSBudWxsOwotICAgIGRlZmF1bHRXU0RMRmlsZU5hbWVfID0gInRlbXAud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkKSB7Ci0gICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsIndzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHdyaXRlKE91dHB1dFN0cmVhbSBvcykgewotICAgIHJldHVybiB3cml0ZVdTRExEZWZpbml0aW9uKG9zLCBkZWZpbml0aW9uXyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpIHsKLSAgICByZXR1cm4gZGVmYXVsdFdTRExGaWxlTmFtZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKSB7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkgewotICAgICAgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KW5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBkZWZpbml0aW9uXyA9IHdzZGxFbGVtZW50LmdldERlZmluaXRpb24oKTsKLSAgICBkZWZhdWx0V1NETEZpbGVOYW1lXyA9IFdTRExGaWxlTmFtZUhlbHBlci5nZXRXU0RMRmlsZU5hbWUod3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpKTsKLSAgICByZXR1cm4gKGRlZmluaXRpb25fICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NTJjNDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvV29ya2JlbmNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIHsKLSAgcHVibGljIFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkgewotICAgIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5NWVlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIHsKLQotICBwdWJsaWMgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KW5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gbGF1bmNoV2l6YXJkKGVsZW1lbnQuZ2V0V3NkbFVybCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ4MDgxZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlcl87Ci0gIHB1YmxpYyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbmF2aWdhdG9yTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10ga2V5cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmdbXSB2YWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGtleXNbaV0pOwotICAgICAgaWYgKHZhbHVlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAxKQotICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChrZXlzW2ldLCB2YWx1ZXNbMF0pOwotICAgICAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID4gMSkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoa2V5c1tpXSwgdmFsdWVzKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKQotICB7Ci0gICAgcmV0dXJuIG5hdmlnYXRvck1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0JpbmRpbmdUeXBlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9CaW5kaW5nVHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlkZGEzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0JpbmRpbmdUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1R5cGVzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOU1VQUE9SVEVEID0gLTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPQVAgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIVFRQX0dFVCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBfUE9TVCA9IDI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1ZFUkJfR0VUID0gIkdFVCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSQl9QT1NUID0gIlBPU1QiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9GcmFnbWVudENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9GcmFnbWVudENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDJjMjBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvRnJhZ21lbnRDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBGcmFnbWVudENvbnN0YW50cwotewotICAvLyBYU0QgbWluT2NjdXJzIGFuZCBtYXhPY2N1cnMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NSU5fT0NDVVJTID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NQVhfT0NDVVJTID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5CT1VOREVEID0gLTE7Ci0KLSAgLy8gV1NETCBzdHlsZQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9ET0NVTUVOVCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1JQQyA9IDE7Ci0KLSAgLy8gV1NETCBFbmNvZGluZyBzdHlsZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5DT0RJTkdfTElURVJBTCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVOQ09ESU5HX1NPQVAgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkNPRElOR19VUkwgPSAyOyAvLyBIVFRQIEdldC9Qb3N0Ci0KLSAgLy8gSURzIHVzZWQgYnkgdGhlIGZyYWdtZW50IG1vZGVsCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NFUEVSQVRPUiA9ICI6OiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOUFVUX0lEID0gIjo6aW5wdXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRQVVRfSUQgPSAiOjpvdXRwdXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUJMRV9JRCA9ICI6OnRhYmxlSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9JRCA9ICI6OmZyYWdtZW50SUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FOQ0hPUl9JRCA9ICI6Om5hbWVBbmNob3JJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1ZJRVdfSUQgPSAiOjpmcmFnbWVudFZpZXdJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9BVE9NSUNfRU5VTV9JRCA9ICI6OnhzZEF0b21pY0VudW1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9BTExfR1JPVVBfSUQgPSAiOjp4c2RBbGxHcm91cElEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9UT0tFTiA9ICJeIjsKLQotICAvLyBGcmFnbWVudCB2aWV3IElEcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSA9ICI6OmZyYWdtZW50Vmlld1N3aXRjaEZvcm1Ub1NvdXJjZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNID0gIjo6ZnJhZ21lbnRWaWV3U3dpdGNoU291cmNlVG9Gb3JtIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX0NPTlRFTlRfSEVBREVSID0gIjo6c291cmNlQ29udGVudEhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9DT05URU5UID0gIjo6c291cmNlQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9DT05URU5UX05BTUVTUEFDRSA9ICI6OnNvdXJjZUNvbnRlbnROUyI7Ci0KLSAgLy8gQWN0aW9uIGlucHV0IGNvbnN0YW50cwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FOQ0hPUiA9ICJuYW1lQW5jaG9yIjsKLQotICAvLyBOYW1lc3BhY2VzIGNvbnRhbnRzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfU09BUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9TT0FQX0VOViA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9XU0RMID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRU5DX0FSUkFZX1RZUEUgPSAiYXJyYXlUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNJX1RZUEUgPSAidHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX1BSRUZJWCA9ICJxIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfTE9DQUxfTkFNRV9BUlJBWV9UWVBFID0gImFycmF5VHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX0xPQ0FMX05BTUVfQVJSQVkgPSAiQXJyYXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xPTiA9ICI6IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfTE9DQUxfTkFNRV9IRUFERVIgPSAiSGVhZGVyIjsgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRTkFNRV9MT0NBTF9OQU1FX0JPRFkgPSAiQm9keSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX0xPQ0FMX05BTUVfRkFVTFQgPSAiRmF1bHQiOwotCi0gIC8vIExpc3QKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElTVF9TRVBFUkFUT1IgPSAiICI7Ci0KLSAgLy8gU09BUC1FTkM6QXJyYXkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVGVF9TUVVBUkVfQlJBQ0tFVCA9ICJbIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUklHSFRfU1FVQVJFX0JSQUNLRVQgPSAiXSI7Ci0KLSAgLy8gWFNERGVmYXVsdEZyYWdtZW50Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfRUxFTUVOVF9TVEFSVF9UQUcgPSAiPHJvb3Q+IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9FTEVNRU5UX0VORF9UQUcgPSAiPC9yb290PiI7Ci0KLSAgLy8gTmFtZXNwYWNlIFVSSXMuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUxOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX0VOViA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX0VOQyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV8xOTk5X1NDSEVNQV9YU0kgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEtaW5zdGFuY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfMTk5OV9TQ0hFTUFfWFNEID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJXzIwMDBfU0NIRU1BX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV8yMDAwX1NDSEVNQV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfMjAwMV9TQ0hFTUFfWFNJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJXzIwMDFfU0NIRU1BX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9DVVJSRU5UX1NDSEVNQV9YU0kgPSBOU19VUklfMjAwMV9TQ0hFTUFfWFNJOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNEID0gTlNfVVJJXzIwMDFfU0NIRU1BX1hTRDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNTF9TT0FQID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUxfU09BUF9ERVBMT1lNRU5UID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcC9kZXBsb3ltZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX0xJVEVSQUxfWE1MID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcC9saXRlcmFseG1sIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNSV9FTkMgPSAiaHR0cDovL3d3dy5pYm0uY29tL25hbWVzcGFjZXMveG1pIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExBY3Rpb25JbnB1dHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEFjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzU0YjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEFjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExBY3Rpb25JbnB1dHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UID0gImZyYW1lc2V0Q29sc1BlcnNwZWN0aXZlQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIgPSAiZnJhbWVzZXRSb3dzQWN0aW9uc0NvbnRhaW5lciI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VTU0lPTl9JRCA9ICJzZXNzaW9uSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9JRCA9ICJmcmFnbWVudElEIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VOVkVMT1BFX1RZUEUgPSAic29hcEVudmVsb3BlVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPQVBfRU5WRUxPUEVfVFlQRV9SRVFVRVNUID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09BUF9FTlZFTE9QRV9UWVBFX1JFU1BPTlNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9SRVNQT05TRV9DQUNIRUQgPSAic29hcFJlc3BvbnNlQ2FjaGVkIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJNSVNTSU9OX0FDVElPTiA9ICJzdWJtaXNzaW9uQWN0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fRk9STSA9ICJzdWJtaXNzaW9uQWN0aW9uRm9ybSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFX0hFQURFUiA9ICJzdWJtaXNzaW9uQWN0aW9uQnJvd3NlRmlsZUhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFID0gInN1Ym1pc3Npb25BY3Rpb25Ccm93c2VGaWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fU0FWRV9BU19IRUFERVIgPSAic3VibWlzc2lvbkFjdGlvblNhdmVBc0hlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVMgPSAic3VibWlzc2lvbkFjdGlvblNhdmVBcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVEVEX0ZJTEVfSEVBREVSID0gInNlbGVjdGVkRmlsZUhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVEVEX0ZJTEUgPSAic2VsZWN0ZWRGaWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OX0VMRU1FTlQgPSAib3BlcmF0aW9uRWxlbWVudCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX1BPSU5UID0gIjo6ZW5kUG9pbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUgPSAiaHR0cEJhc2ljQXV0aFVzZXJuYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEID0gImh0dHBCYXNpY0F1dGhQYXNzd29yZCI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExGcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExGcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOTYwYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9XU0RMRnJhbWVOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETEZyYW1lTmFtZXMKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9OQVZJR0FUT1JfQ09OVEFJTkVSID0gIndzZGxfbmF2aWdhdG9yX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfTkFWSUdBVE9SX1RPT0xCQVIgPSAid3NkbF9uYXZpZ2F0b3JfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfTkFWSUdBVE9SX0NPTlRFTlQgPSAid3NkbF9uYXZpZ2F0b3JfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfQUNUSU9OU19DT05UQUlORVIgPSAid3NkbF9hY3Rpb25zX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfUFJPUEVSVElFU19DT05UQUlORVIgPSAid3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfUFJPUEVSVElFU19UT09MQkFSID0gIndzZGxfcHJvcGVydGllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9QUk9QRVJUSUVTX0NPTlRFTlQgPSAid3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1NUQVRVU19DT05UQUlORVIgPSAid3NkbF9zdGF0dXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9TVEFUVVNfVE9PTEJBUiA9ICJ3c2RsX3N0YXR1c190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9TVEFUVVNfQ09OVEVOVCA9ICJ3c2RsX3N0YXR1c19jb250ZW50IjsKLQotICAvLyBYU0QgSW5mbyBEaWFsb2cKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNEX0lORk9fVE9PTEJBUiA9ICJ4c2RfaW5mb190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNEX0lORk9fQ09OVEVOVCA9ICJ4c2RfaW5mb19jb250ZW50IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETE1vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExNb2RlbENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWI5ZmJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETE1vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsQ29uc3RhbnRzCi17Ci0gICAgLy8gUmVsYXRpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETCA9ICJyZWxXU0RMIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9TRVJWSUNFID0gInJlbFdTRExTZXJ2aWNlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9CSU5ESU5HID0gInJlbFdTRExCaW5kaW5nIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9PUEVSQVRJT04gPSAicmVsV1NETE9wZXJhdGlvbiI7Ci0KLSAgICAvLyBEb2N1bWVudGF0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9ET0NVTUVOVEFUSU9OID0gInByb3BEb2N1bWVudGF0aW9uIjsKLQotICAgIC8vIFNvdXJjZSBDb250ZW50Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIgPSAicHJvcFNvdXJjZUNvbnRlbnRIZWFkZXIiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09VUkNFX0NPTlRFTlQgPSAicHJvcFNvdXJjZUNvbnRlbnQiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFID0gInByb3BTb3VyY2VDb250ZW50TlMiOwotICAgIAotICAgIC8vIFRyYW5zcG9ydAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVFVRVNUX1RNUCA9ICJwcm9wU09BUFJlcXVlc3RUbXAiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVFVRVNUID0gInByb3BTT0FQUmVxdWVzdCI7ICAgIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVNQT05TRSA9ICJwcm9wU09BUFJlc3BvbnNlIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvRW5kcG9pbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvRW5kcG9pbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVkN2QxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL0VuZHBvaW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW5kcG9pbnQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5kcG9pbnQ7Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlSFRUUEJhc2ljQXV0aDsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIAotICBwdWJsaWMgRW5kcG9pbnQoKQotICB7Ci0gICAgZW5kcG9pbnQgPSBudWxsOwotICAgIHJlcXVpcmVIVFRQQmFzaWNBdXRoID0gZmFsc2U7Ci0gICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lID0gbnVsbDsKLSAgICBodHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpCi0gIHsKLSAgICByZXR1cm4gZW5kcG9pbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkKLSAgewotICAgIHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNSZXF1aXJlSFRUUEJhc2ljQXV0aCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZUhUVFBCYXNpY0F1dGg7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVIVFRQQmFzaWNBdXRoKGJvb2xlYW4gcmVxdWlyZUhUVFBCYXNpY0F1dGgpCi0gIHsKLSAgICB0aGlzLnJlcXVpcmVIVFRQQmFzaWNBdXRoID0gcmVxdWlyZUhUVFBCYXNpY0F1dGg7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lKQotICB7Ci0gICAgdGhpcy5odHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkKQotICB7Ci0gICAgdGhpcy5odHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEJpbmRpbmdFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExCaW5kaW5nRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTk3ODg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEJpbmRpbmdFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuQmluZGluZ1R5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmluZGluZ0VsZW1lbnQgZXh0ZW5kcyBXU0RMQ29tbW9uRWxlbWVudAotewotICBwcml2YXRlIGludCBiaW5kaW5nVHlwZV87Ci0gIHByaXZhdGUgQmluZGluZyBiaW5kaW5nXzsKLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnRfOwotICBwcml2YXRlIFZlY3RvciBlbmRQb2ludHNfOwotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgYmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50XyA9IG51bGw7Ci0gICAgYmluZGluZ1R5cGVfID0gQmluZGluZ1R5cGVzLlVOU1VQUE9SVEVEOwotICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZ18uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7aS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIEhUVFBCaW5kaW5nKQotICAgICAgewotICAgICAgICBIVFRQQmluZGluZyBiaW5kaW5nID0gKEhUVFBCaW5kaW5nKWU7Ci0gICAgICAgIFN0cmluZyB2ZXJiID0gYmluZGluZy5nZXRWZXJiKCk7Ci0gICAgICAgIGlmIChCaW5kaW5nVHlwZXMuSFRUUF9WRVJCX0dFVC5lcXVhbHModmVyYikpCi0gICAgICAgICAgYmluZGluZ1R5cGVfID0gQmluZGluZ1R5cGVzLkhUVFBfR0VUOwotICAgICAgICBlbHNlIGlmIChCaW5kaW5nVHlwZXMuSFRUUF9WRVJCX1BPU1QuZXF1YWxzKHZlcmIpKQotICAgICAgICAgIGJpbmRpbmdUeXBlXyA9IEJpbmRpbmdUeXBlcy5IVFRQX1BPU1Q7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICAgIGJpbmRpbmdUeXBlXyA9IEJpbmRpbmdUeXBlcy5TT0FQOwotICAgICAgaWYgKGJpbmRpbmdUeXBlXyAhPSBCaW5kaW5nVHlwZXMuVU5TVVBQT1JURUQpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudF8gPSBlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMQmluZGluZ0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICBlbmRQb2ludHNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICBiaW5kaW5nXyA9IGJpbmRpbmc7Ci0gICAgc2V0RG9jdW1lbnRhdGlvbihiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIHNldEJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmcgZ2V0QmluZGluZygpIHsKLSAgICByZXR1cm4gYmluZGluZ187Ci0gIH0KLSAgCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBnZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0QmluZGluZ1R5cGUoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdUeXBlXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXNldEVuZFBvaW50cygpCi0gIHsKLSAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgZml4ZWRFbmRwb2ludFN0cmluZyA9IHNlcnZpY2VFbGVtZW50LmdldEFkZHJlc3NMb2NhdGlvbihiaW5kaW5nXyk7Ci0gICAgRW5kcG9pbnQgZml4ZWRFbmRwb2ludCA9IGdldEVuZHBvaW50KGZpeGVkRW5kcG9pbnRTdHJpbmcpOwotICAgIGlmIChmaXhlZEVuZHBvaW50ID09IG51bGwpCi0gICAgewotICAgICAgZml4ZWRFbmRwb2ludCA9IG5ldyBFbmRwb2ludCgpOwotICAgICAgZml4ZWRFbmRwb2ludC5zZXRFbmRwb2ludChmaXhlZEVuZHBvaW50U3RyaW5nKTsKLSAgICB9Ci0gICAgZW5kUG9pbnRzXy5jbGVhcigpOwotICAgIGVuZFBvaW50c18uYWRkKGZpeGVkRW5kcG9pbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEVuZFBvaW50cygpCi0gIHsKLSAgICBTdHJpbmdbXSBlbmRQb2ludHMgPSBuZXcgU3RyaW5nW2VuZFBvaW50c18uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZFBvaW50cy5sZW5ndGg7IGkrKykKLSAgICAgIGVuZFBvaW50c1tpXSA9ICgoRW5kcG9pbnQpZW5kUG9pbnRzXy5nZXQoaSkpLmdldEVuZHBvaW50KCk7Ci0gICAgcmV0dXJuIGVuZFBvaW50czsKLSAgfQotICAKLSAgcHVibGljIEVuZHBvaW50IGdldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZW5kUG9pbnRzXy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBFbmRwb2ludCBlbmRwb2ludCA9IChFbmRwb2ludClpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChlbmRwb2ludFN0cmluZy5lcXVhbHMoZW5kcG9pbnQuZ2V0RW5kcG9pbnQoKSkpCi0gICAgICAgICAgcmV0dXJuIGVuZHBvaW50OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuZFBvaW50cyhTdHJpbmdbXSBlbmRwb2ludHMpCi0gIHsKLSAgICBWZWN0b3IgZW5kcG9pbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRwb2ludHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRW5kcG9pbnQgZW5kcG9pbnQgPSBnZXRFbmRwb2ludChlbmRwb2ludHNbaV0pOwotICAgICAgaWYgKGVuZHBvaW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZHBvaW50ID0gbmV3IEVuZHBvaW50KCk7Ci0gICAgICAgIGVuZHBvaW50LnNldEVuZHBvaW50KGVuZHBvaW50c1tpXSk7Ci0gICAgICB9Ci0gICAgICBlbmRwb2ludFZlY3Rvci5hZGQoZW5kcG9pbnQpOwotICAgIH0KLSAgICByZXNldEVuZFBvaW50cygpOwotICAgIGVuZFBvaW50c18uYWRkQWxsKGVuZHBvaW50VmVjdG9yKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEVuZFBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBFbmRwb2ludCBlbmRwb2ludCA9IG5ldyBFbmRwb2ludCgpOwotICAgICAgZW5kcG9pbnQuc2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgICAgZW5kUG9pbnRzXy5hZGQoZW5kcG9pbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUVuZFBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyBmaXhlZEVuZHBvaW50U3RyaW5nID0gc2VydmljZUVsZW1lbnQuZ2V0QWRkcmVzc0xvY2F0aW9uKGJpbmRpbmdfKTsKLSAgICAgIGlmIChmaXhlZEVuZHBvaW50U3RyaW5nID09IG51bGwgfHwgIWZpeGVkRW5kcG9pbnRTdHJpbmcuZXF1YWxzKGVuZHBvaW50U3RyaW5nKSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRQb2ludHNfLnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGVuZHBvaW50U3RyaW5nLmVxdWFscygoKEVuZHBvaW50KWVuZFBvaW50c18uZ2V0KGkpKS5nZXRFbmRwb2ludCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbmRQb2ludHNfLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKSB7Ci0gICAgcmVzZXRFbmRQb2ludHMoKTsKLSAgICBpZiAoYmluZGluZ18gIT0gbnVsbCkgewotICAgICAgUG9ydFR5cGUgcHQgPSBiaW5kaW5nXy5nZXRQb3J0VHlwZSgpOwotICAgICAgaWYgKHB0ICE9IG51bGwpIHsKLSAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcHQuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgICBIYXNoTWFwIG9wZXJhdGlvbnNNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilpdC5uZXh0KCk7Ci0gICAgICAgICAgb3BlcmF0aW9uc01hcC5wdXQoY3JlYXRlT3BlcmF0aW9uVW5pcXVlTmFtZShvcGVyYXRpb24pLCBvcGVyYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIFdTRExPcGVyYXRpb25FbGVtZW50W10gd3NkbE9wZXJhdGlvbkVsZW1lbnRzID0gbmV3IFdTRExPcGVyYXRpb25FbGVtZW50W2dldE51bWJlck9mRWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTildOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbE9wZXJhdGlvbkVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgd3NkbE9wZXJhdGlvbkVsZW1lbnRzW2ldID0gKFdTRExPcGVyYXRpb25FbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxPcGVyYXRpb25FbGVtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gY3JlYXRlT3BlcmF0aW9uVW5pcXVlTmFtZSh3c2RsT3BlcmF0aW9uRWxlbWVudHNbal0uZ2V0T3BlcmF0aW9uKCkpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnNNYXAuZ2V0KG9wZXJhdGlvbk5hbWUpOwotICAgICAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgb3BlcmF0aW9uc01hcC5yZW1vdmUob3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgICAgICB3c2RsT3BlcmF0aW9uRWxlbWVudHNbal0uc2V0T3BlcmF0aW9uKHRoaXMsIG9wZXJhdGlvbik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpc2Nvbm5lY3Qod3NkbE9wZXJhdGlvbkVsZW1lbnRzW2pdLCBXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9uc01hcC52YWx1ZXMoKS5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgICBPcGVyYXRpb24gb3BlciA9IChPcGVyYXRpb24paXQubmV4dCgpOwotICAgICAgICAgIFdTRExPcGVyYXRpb25FbGVtZW50IHdzZGxPcGVyYXRpb25FbGVtZW50ID0gbmV3IFdTRExPcGVyYXRpb25FbGVtZW50KG9wZXIuZ2V0TmFtZSgpLCB0aGlzLCBvcGVyKTsKLSAgICAgICAgICBjb25uZWN0KHdzZGxPcGVyYXRpb25FbGVtZW50LFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9PUEVSQVRJT04sTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU9wZXJhdGlvblVuaXF1ZU5hbWUoT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIFN0cmluZ0J1ZmZlciBuYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIG5hbWUuYXBwZW5kKG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIElucHV0IGlucHV0TXNnID0gb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgaWYgKGlucHV0TXNnICE9IG51bGwpCi0gICAgewotICAgICAgUU5hbWUgcW5hbWUgPSBpbnB1dE1zZy5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKTsKLSAgICAgIG5hbWUuYXBwZW5kKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIG5hbWUuYXBwZW5kKCI6Iik7Ci0gICAgICBuYW1lLmFwcGVuZChxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIE91dHB1dCBvdXRwdXRNc2cgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCk7Ci0gICAgaWYgKG91dHB1dE1zZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFFOYW1lIHFuYW1lID0gb3V0cHV0TXNnLmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpOwotICAgICAgbmFtZS5hcHBlbmQocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgbmFtZS5hcHBlbmQoIjoiKTsKLSAgICAgIG5hbWUuYXBwZW5kKHFuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWUudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQ29tbW9uRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQ29tbW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNThjYTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETENvbW1vbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgV1NETENvbW1vbkVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotCi0gIHB1YmxpYyBXU0RMQ29tbW9uRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVHJlZUVsZW1lbnQgZ2V0UGFyZW50RWxlbWVudCgpIHsKLSAgICAgIHJldHVybiAoVHJlZUVsZW1lbnQpZ2V0RWxlbWVudHMoTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKS5uZXh0RWxlbWVudCgpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXREb2N1bWVudGF0aW9uKE5vZGUgZG9jdW1lbnRhdGlvbkVsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9ICIiOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChkb2N1bWVudGF0aW9uRWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKTsKLSAgICAgICAgRG9jdW1lbnRGcmFnbWVudCBkZiA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAgIE5vZGVMaXN0IGRvY3VtZW50YXRpb25Ob2RlcyA9IGRvY3VtZW50YXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZG9jdW1lbnRhdGlvbk5vZGVzLmdldExlbmd0aCgpO2krKykKLSAgICAgICAgICBkZi5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShkb2N1bWVudGF0aW9uTm9kZXMuaXRlbShpKSx0cnVlKSk7Ci0gICAgICAgIGRvY3VtZW50YXRpb24gPSBYTUxVdGlscy5zZXJpYWxpemUoZGYsdHJ1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04sZG9jdW1lbnRhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3ZWE4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzE3ICAgMTQ2NzA3IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAxMjQgICAxNjc0ODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODAxMTUgICAyMTQ5NTUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uSFRUUFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWNTZXZlcml0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotcHVibGljIGNsYXNzIFdTRExFbGVtZW50IGV4dGVuZHMgV1NETENvbW1vbkVsZW1lbnQKLXsKLQotICBwcml2YXRlIFN0cmluZyB3c2RsVXJsXzsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb25fOwotICBwcml2YXRlIFZlY3RvciBzY2hlbWFMaXN0XzsKLSAgcHJpdmF0ZSBWZWN0b3Igc2NoZW1hVVJJXzsKLQotICBwcml2YXRlIHN0YXRpYyBWZWN0b3IgdzNTY2hlbWFRTmFtZUxpc3RfOwotICBwcml2YXRlIHN0YXRpYyBWZWN0b3IgY29uc3RhbnRTY2hlbWFMaXN0XzsKLSAgCi0gIC8vQSBSZXNvdXJjZVNldCBmb3IgYWxsIHNjaGVtYXMgaW4gdGhpcyBXU0RMCi0gIHByaXZhdGUgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7Ci0KLSAgc3RhdGljCi0gIHsKLSAgICAvLyB3MyBzY2hlbWEgVVJJIGxpc3Q6Ci0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hCi0gICAgdzNTY2hlbWFRTmFtZUxpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIHczU2NoZW1hUU5hbWVMaXN0Xy5hZGRFbGVtZW50KG5ldyBRTmFtZShGcmFnbWVudENvbnN0YW50cy5OU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNELCJzY2hlbWEiKSk7Ci0gICAgdzNTY2hlbWFRTmFtZUxpc3RfLmFkZEVsZW1lbnQobmV3IFFOYW1lKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV8yMDAwX1NDSEVNQV9YU0QsInNjaGVtYSIpKTsKLSAgICB3M1NjaGVtYVFOYW1lTGlzdF8uYWRkRWxlbWVudChuZXcgUU5hbWUoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJXzE5OTlfU0NIRU1BX1hTRCwic2NoZW1hIikpOwotCi0gICAgLy8gQ29uc3RhbnQgc2NoZW1hIFVSSSBsaXN0OgotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hNTFNjaGVtYQotICAgIC8vIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvCi0gICAgLy8gaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8KLSAgICBjb25zdGFudFNjaGVtYUxpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8uYWRkRWxlbWVudChYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShGcmFnbWVudENvbnN0YW50cy5OU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNEKSk7Ci0gICAgY29uc3RhbnRTY2hlbWFMaXN0Xy5hZGRFbGVtZW50KFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV8yMDAwX1NDSEVNQV9YU0QpKTsKLSAgICBjb25zdGFudFNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJXzE5OTlfU0NIRU1BX1hTRCkpOwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8uYWRkRWxlbWVudChYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShGcmFnbWVudENvbnN0YW50cy5OU19VUklfU09BUF9FTkMpKTsKLSAgICBjb25zdGFudFNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEoRnJhZ21lbnRDb25zdGFudHMuVVJJX1dTREwpKTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFN0cmluZyB3c2RsVXJsKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHNldFdzZGxVcmwod3NkbFVybCk7Ci0gICAgZGVmaW5pdGlvbl8gPSBudWxsOwotICAgIHNjaGVtYUxpc3RfID0gbmV3IFZlY3RvcigpOwotCXNjaGVtYVVSSV8gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXc2RsVXJsKFN0cmluZyB3c2RsVXJsKSB7Ci0JICBIVFRQVXRpbGl0eSBodHRwID0gbmV3IEhUVFBVdGlsaXR5KCk7Ci0JICB3c2RsVXJsXyA9IGh0dHAuaGFuZGxlUmVkaXJlY3Qod3NkbFVybCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVcmwoKSB7Ci0gICAgcmV0dXJuIHdzZGxVcmxfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2NoZW1hTGlzdChWZWN0b3Igc2NoZW1hTGlzdCkKLSAgewotICAgIHNjaGVtYUxpc3RfID0gc2NoZW1hTGlzdDsKLSAgfQotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U2NoZW1hTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gc2NoZW1hTGlzdF87Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgRGVmaW5pdGlvbiBsb2FkV1NETChTdHJpbmcgd3NkbFVSTCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBwYXJzZXIuZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVUkwpOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiB3c2RsZSkKLSAgICB7Ci0gICAgICB0aHJvdyB3c2RsZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IgLCB0LmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFZlY3RvciBsb2FkV1NETCgpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLQkgIAotCS8vCVJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnRpb25zLgotCXJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuREVGQVVMVF9FWFRFTlNJT04sbmV3IFhTRFJlc291cmNlRmFjdG9yeUltcGwoKSk7ICAgIAkJCi0JLy9SZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgotCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dChYU0RQYWNrYWdlLmVOU19VUkksWFNEUGFja2FnZS5lSU5TVEFOQ0UpOwkKLQkgIAotCSAgCi0gICAgVmVjdG9yIGVycm9yTWVzc2FnZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZGVmaW5pdGlvbl8gPSBsb2FkV1NETCh3c2RsVXJsXyk7Ci0gICAgCi0gICAgCi0gICAgaWYgKGRlZmluaXRpb25fICE9IG51bGwpCi0gICAgewotICAgICAgc2V0RG9jdW1lbnRhdGlvbihkZWZpbml0aW9uXy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICAgIGdhdGhlclNjaGVtYXMoZGVmaW5pdGlvbl8sIHdzZGxVcmxfKTsKLSAgICAgIC8vIFZhbGlkYXRlIHRoZSBzY2hlbWFzLgotICAgICAgZm9yIChpbnQgaT0wO2k8c2NoZW1hTGlzdF8uc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpc2NoZW1hTGlzdF8uZWxlbWVudEF0KGkpOwotICAgICAgICB4c2RTY2hlbWEudmFsaWRhdGUoKTsKLSAgICAgICAgRUxpc3QgZXJyb3JzID0geHNkU2NoZW1hLmdldEFsbERpYWdub3N0aWNzKCk7Ci0gICAgICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoTGlzdEl0ZXJhdG9yIGxpID0gZXJyb3JzLmxpc3RJdGVyYXRvcigpO2xpLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNERGlhZ25vc3RpYyB4ZCA9IChYU0REaWFnbm9zdGljKWxpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyBtc2cgPSB4ZC5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICAvLyBkbyBub3QgcmVwb3J0IGxvdyBzZXZlcml0eSBkaWFnbm9zdGljcyBvciBlcnJvbmVvdXMgYXJyYXkgcmVmZXJlbmNlIGVycm9ycy4KLSAgICAgICAgICAgIGlmICh4ZC5nZXRTZXZlcml0eSgpLmdldFZhbHVlKCkgPT0gWFNERGlhZ25vc3RpY1NldmVyaXR5LkZBVEFMX0xJVEVSQUwuZ2V0VmFsdWUoKSB8fCAobXNnICE9IG51bGwgJiYgbXNnLmxlbmd0aCgpID4gMCAmJiBtc2cudG9Mb3dlckNhc2UoKS5pbmRleE9mKCIjYXJyYXkiKSAhPSAtMSkpCi0gICAgICAgICAgICAgIGxpLnJlbW92ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAobXNnICE9IG51bGwgJiYgbXNnLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLmFkZEVsZW1lbnQoeGQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZm9yIChpbnQgaT0wO2k8Y29uc3RhbnRTY2hlbWFMaXN0Xy5zaXplKCk7aSsrKQotICAgICAgICBzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KGNvbnN0YW50U2NoZW1hTGlzdF8uZWxlbWVudEF0KGkpKTsKLSAgICAgIAotCX0KLSAgICByZXR1cm4gZXJyb3JNZXNzYWdlczsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBnYXRoZXJTY2hlbWFzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGRlZmluaXRpb25VUkwpCi0gIHsKLSAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IGV4dFR5cGVzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZXh0VHlwZXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZXh0VHlwZXMuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBudWxsOwotICAgICAgICAgIE9iamVjdCBvYmogPSBleHRUeXBlcy5nZXQoaSk7Ci0gICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hRWxlbWVudCA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpb2JqOwotICAgICAgICAgICAgaWYgKGlzVzNTY2hlbWFFbGVtZW50VHlwZShzY2hlbWFFbGVtZW50LmdldEVsZW1lbnRUeXBlKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShzY2hlbWFFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0JCQkgIGlmKCFjaGVja1NjaGVtYVVSSShkZWZpbml0aW9uVVJMKSl7Ci0JCQkJICBzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHhzZFNjaGVtYSk7Ci0JCQkJICBnYXRoZXJTY2hlbWFEaXJlY3RpdmUoeHNkU2NoZW1hLCBkZWZpbml0aW9uVVJMKTsKLSAgICAgICAgICAgICAgfQotCQkJICAvL1dlIG5lZWQgdG8gYWRkIHRoZSBzY2hlbWEgdG8gYSBSZXNvdXJjZSBpbiBhIFJlc291cmNlIHNldCBmb3IgcHJvcGVyIHZhbGlkYXRpb24KLSAgICAgICAgCSAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSB1cmkgPSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJLmNyZWF0ZVVSSShkZWZpbml0aW9uVVJMKTsgICAgCQkKLSAgICAgICAgCSAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZSh1cmkpOwotICAgICAgICAJICAvL0FkZCB0aGUgU2NoZW1hIHRvIHRoZSByZXNvdXJjZQotICAgICAgICAJICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZCh4c2RTY2hlbWEpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gCQotICAgICAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgc2NoZW1hRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpb2JqOwotICAgICAgICAgICAgeHNkU2NoZW1hID0gc2NoZW1hRWxlbWVudC5nZXRTY2hlbWEoKTsKLSAgICAgICAgICAgIGlmKCFzY2hlbWFMaXN0Xy5jb250YWlucyh4c2RTY2hlbWEpKXsKLQkJCQlzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHhzZFNjaGVtYSk7Ci0JCQkJZ2F0aGVyU2NoZW1hRGlyZWN0aXZlKHhzZFNjaGVtYSwgZGVmaW5pdGlvblVSTCk7Ci0JCQl9Ci0JCSAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIE1hcCBpbXBvcnRzID0gZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCk7Ci0gICAgaWYgKGltcG9ydHMgIT0gbnVsbCkKLSAgICAgIGdhdGhlckltcG9ydGVkU2NoZW1hcyhkZWZpbml0aW9uLGltcG9ydHMpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdhdGhlclNjaGVtYURpcmVjdGl2ZShYU0RTY2hlbWEgeHNkU2NoZW1hLCBTdHJpbmcgeHNkU2NoZW1hVVJMKQotICB7Ci0gICAgaWYgKHhzZFNjaGVtYSAhPSBudWxsKQotICAgIHsKLSAgICAgIEVMaXN0IHhzZFNjaGVtYUNvbnRlbnRzID0geHNkU2NoZW1hLmdldENvbnRlbnRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0geHNkU2NoZW1hQ29udGVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGNvbnRlbnQgPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hRGlyZWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEU2NoZW1hRGlyZWN0aXZlIHhzZFNjaGVtYURpcmVjdGl2ZSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpY29udGVudDsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgeHNkU2NoZW1hRGlyZWN0aXZlVVJMID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIFN0cmluZyB4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbiA9IHhzZFNjaGVtYURpcmVjdGl2ZS5nZXRTY2hlbWFMb2NhdGlvbigpOwotICAgICAgICAgIGlmICh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbiAhPSBudWxsICYmIHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uLmluZGV4T2YoJzonKSA9PSAtMSAmJiB4c2RTY2hlbWFVUkwgIT0gbnVsbCAmJiB4c2RTY2hlbWFVUkwuaW5kZXhPZignOicpICE9IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHJlbGF0aXZlIFVSTAotICAgICAgICAgICAgaW50IGluZGV4ID0geHNkU2NoZW1hVVJMLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgICAgICAgIHhzZFNjaGVtYURpcmVjdGl2ZVVSTC5hcHBlbmQoeHNkU2NoZW1hVVJMLnN1YnN0cmluZygwLCBpbmRleCsxKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHhzZFNjaGVtYURpcmVjdGl2ZVVSTC5hcHBlbmQoeHNkU2NoZW1hVVJMKTsKLSAgICAgICAgICAgICAgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmFwcGVuZCgnLycpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICB4c2RTY2hlbWFEaXJlY3RpdmVVUkwuYXBwZW5kKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uKTsKLSAgICAgICAgICAvLyByZXNvbHZlIHNjaGVtYSBkaXJlY3RpdmUKLSAgICAgICAgICBYU0RTY2hlbWEgcmVzb2x2ZWRTY2hlbWEgPSB4c2RTY2hlbWFEaXJlY3RpdmUuZ2V0UmVzb2x2ZWRTY2hlbWEoKTsKLSAgICAgICAgICBpZiAocmVzb2x2ZWRTY2hlbWEgPT0gbnVsbCAmJiB4c2RTY2hlbWFEaXJlY3RpdmVVUkwubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgcmVzb2x2ZWRTY2hlbWEgPSBnZXRTY2hlbWEoeHNkU2NoZW1hRGlyZWN0aXZlVVJMLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGlmIChyZXNvbHZlZFNjaGVtYSAhPSBudWxsKQotICAgICAgICAgIHsKLQkJCWlmKCFjaGVja1NjaGVtYVVSSSh4c2RTY2hlbWFEaXJlY3RpdmVVUkwudG9TdHJpbmcoKSkpewotCQkJCXNjaGVtYUxpc3RfLmFkZEVsZW1lbnQocmVzb2x2ZWRTY2hlbWEpOwotCQkJCWdhdGhlclNjaGVtYURpcmVjdGl2ZShyZXNvbHZlZFNjaGVtYSwgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLnRvU3RyaW5nKCkpOwotICAgICAgCQl9Ci0gICAgICAJICB9Ci0gICAgICAgIH0KLQkgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tTY2hlbWFVUkkoU3RyaW5nIHNjaGVtYVVSSSl7Ci0JICAJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCSAgCSAJCi0JCQotCQlzY2hlbWFVUkkgPSBub3JtYWxpemUoc2NoZW1hVVJJKTsgCi0JCWlmKHNjaGVtYVVSSS5lcXVhbHMobm9ybWFsaXplKHdzZGxVcmxfKSkpcmV0dXJuIGZhbHNlOwotCQlFbnVtZXJhdGlvbiBlID0gc2NoZW1hVVJJXy5lbGVtZW50cygpOwotCQl3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKXsKLQkJCVN0cmluZyB1cmkgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsJCi0JCQlpZihzY2hlbWFVUkkuZXF1YWxzKHVyaSkpeyAKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0JCQl9CQotCQl9Ci0JCQotCSAgICBpZiAoIWZvdW5kKXsKLQkgICAgCXNjaGVtYVVSSV8uYWRkRWxlbWVudChzY2hlbWFVUkkpOwotCSAgICB9Ci0JICAgIHJldHVybiBmb3VuZDsKLQkgIAotCSAgfQotCSAgCi0gIHByaXZhdGUgU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgdXJpICkKLSAgewotCSAgdHJ5IHsKLQkJICBTdHJpbmcgZW5jb2RlZFVSSSA9IFVSSUVuY29kZXIuZW5jb2RlKHVyaSwiVVRGLTgiKTsKLQkJICBVUkkgbm9ybWFsaXplZFVSSSA9IG5ldyBVUkkoZW5jb2RlZFVSSSk7Ci0JCSAgbm9ybWFsaXplZFVSSSA9IG5vcm1hbGl6ZWRVUkkubm9ybWFsaXplKCk7Ci0JCSAgcmV0dXJuIG5vcm1hbGl6ZWRVUkkudG9TdHJpbmcoKTsKLQkgIH0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7Ci0JCSAgcmV0dXJuIHVyaTsKLQkgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkgIHJldHVybiB1cmk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc1czU2NoZW1hRWxlbWVudFR5cGUoUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBmb3IgKGludCBpPTA7aTx3M1NjaGVtYVFOYW1lTGlzdF8uc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBRTmFtZSB3M1NjaGVtYVFOYW1lID0gKFFOYW1lKXczU2NoZW1hUU5hbWVMaXN0Xy5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAodzNTY2hlbWFRTmFtZS5lcXVhbHMocW5hbWUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdhdGhlckltcG9ydGVkU2NoZW1hcyhEZWZpbml0aW9uIGRlZmluaXRpb24sTWFwIGltcG9ydHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gaW1wb3J0cy5rZXlTZXQoKS5pdGVyYXRvcigpO2l0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgTGlzdCBpbXBvcnRMaXN0ID0gKExpc3QpaW1wb3J0cy5nZXQoaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGltcG9ydExpc3Quc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IGltcCA9IChJbXBvcnQpaW1wb3J0TGlzdC5nZXQoaSk7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBsb2NVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGltcC5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwobG9jVVJJLnRvU3RyaW5nKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGJhc2UgPSBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgICAgICAgIGxvY1VSSS5pbnNlcnQoMCxiYXNlLnN1YnN0cmluZygwLGJhc2UubGFzdEluZGV4T2YoJy8nKSsxKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBEZWZpbml0aW9uIGltcG9ydERlZiA9IGxvYWRXU0RMKGxvY1VSSS50b1N0cmluZygpKTsKLSAgICAgICAgICBnYXRoZXJTY2hlbWFzKGltcG9ydERlZiwgbG9jVVJJLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXkgYmUgYW4gWFNEIGZpbGUuCi0gICAgICAgICAgZ2F0aGVyU2NoZW1hKGxvY1VSSS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBnYXRoZXJTY2hlbWEoU3RyaW5nIGxvY1VSSSkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBnZXRTY2hlbWEobG9jVVJJKTsKLSAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpCi0gICAgewotICAgICAgc2NoZW1hTGlzdF8uYWRkRWxlbWVudCh4c2RTY2hlbWEpOwotICAgICAgZ2F0aGVyU2NoZW1hRGlyZWN0aXZlKHhzZFNjaGVtYSwgbG9jVVJJKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFhTRFNjaGVtYSBnZXRTY2hlbWEoU3RyaW5nIGxvY1VSSSkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShsb2NVUkkpOwotICAgIGlmICh4c2RTY2hlbWEgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RQYXJzZXIgcCA9IG5ldyBYU0RQYXJzZXIoKTsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gTmV0VXRpbHMuZ2V0VVJMSW5wdXRTdHJlYW0obG9jVVJJKTsKLSAgICAgIGlmIChpcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBwLnBhcnNlKGlzKTsKLSAgICAgICAgeHNkU2NoZW1hID0gcC5nZXRTY2hlbWEoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHhzZFNjaGVtYTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZGVmaW5pdGlvbl8gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZGVmaW5pdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBidWlsZE1vZGVsKCkgewotICAgIGlmIChkZWZpbml0aW9uXyAhPSBudWxsKSB7Ci0gICAgICBNYXAgc2VydmljZXMgPSBuZXcgSGFzaE1hcChkZWZpbml0aW9uXy5nZXRTZXJ2aWNlcygpKTsKLSAgICAgIFdTRExTZXJ2aWNlRWxlbWVudFtdIHdzZGxTZXJ2aWNlRWxlbWVudHMgPSBuZXcgV1NETFNlcnZpY2VFbGVtZW50W2dldE51bWJlck9mRWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpXTsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxTZXJ2aWNlRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50c1tpXSA9IChXU0RMU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgfQotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3c2RsU2VydmljZUVsZW1lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgIFFOYW1lIHFuYW1lID0gd3NkbFNlcnZpY2VFbGVtZW50c1tqXS5nZXRTZXJ2aWNlKCkuZ2V0UU5hbWUoKTsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZXMuZ2V0KHFuYW1lKTsKLSAgICAgICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgIHNlcnZpY2VzLnJlbW92ZShxbmFtZSk7Ci0gICAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50c1tqXS5zZXRTZXJ2aWNlKHNlcnZpY2UpOwotICAgICAgICAgIHdzZGxTZXJ2aWNlRWxlbWVudHNbal0uYnVpbGRNb2RlbCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkaXNjb25uZWN0KHdzZGxTZXJ2aWNlRWxlbWVudHNbal0sIFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFKTsKLSAgICAgIH0KLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpaXQubmV4dCgpOwotICAgICAgICBXU0RMU2VydmljZUVsZW1lbnQgd3NkbFNlcnZpY2VFbGVtZW50ID0gbmV3IFdTRExTZXJ2aWNlRWxlbWVudChzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIGdldE1vZGVsKCksIHNlcnZpY2UpOwotICAgICAgICBjb25uZWN0KHdzZGxTZXJ2aWNlRWxlbWVudCxXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICB3c2RsU2VydmljZUVsZW1lbnQuYnVpbGRNb2RlbCgpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMT3BlcmF0aW9uRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMT3BlcmF0aW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDczMzRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETE9wZXJhdGlvbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICogMjAwNzEwMjQgICAyMDY1NTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuQmluZGluZ1R5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuTWVzc2FnZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotCi1wdWJsaWMgY2xhc3MgV1NETE9wZXJhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXU0RMQ29tbW9uRWxlbWVudAotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fVFlQRV9TT0FQID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1RZUEVfSFRUUF9HRVQgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fVFlQRV9IVFRQX1BPU1QgPSAyOwotCi0gIHByaXZhdGUgaW50IG9wZXJhdGlvblR5cGVfOwotICBwcml2YXRlIE9wZXJhdGlvbiBvcGVyYXRpb25fOwotICBwcml2YXRlIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfOwotICBwcml2YXRlIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGZyYWdDb250cm9sbGVyXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRG9jdW1lbnRTdHlsZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1VzZUxpdGVyYWxfOwotICBwcml2YXRlIFN0cmluZyBzb2FwQWN0aW9uXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RpbmdTdHlsZV87Ci0gIHByaXZhdGUgU3RyaW5nIGVuY29kaW5nTmFtZXNwYWNlXzsKLQotICBwcml2YXRlIE1hcCBoZWFkZXJDYWNoZTsKLSAgCi0gIHByaXZhdGUgTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQgPSBudWxsOwotICBwcml2YXRlIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgc29hcFRyYW5zcG9ydFByb3ZpZGVyID0gbnVsbDsgIAotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdhdGhlclNvYXBJbmZvcm1hdGlvbihXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQsU09BUEJpbmRpbmcgc29hcEJpbmRpbmcpCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIGRlZmF1bHRzLgotICAgIGlzRG9jdW1lbnRTdHlsZV8gPSB0cnVlOwotICAgIHNvYXBBY3Rpb25fID0gIiI7Ci0gICAgaXNVc2VMaXRlcmFsXyA9IHRydWU7Ci0gICAgZW5jb2RpbmdTdHlsZV8gPSBudWxsOwotICAgIGVuY29kaW5nTmFtZXNwYWNlXyA9IG51bGw7Ci0KLSAgICBpZiAoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIGlzRG9jdW1lbnRTdHlsZV8gPSAiZG9jdW1lbnQiLmVxdWFscyhzb2FwQmluZGluZy5nZXRTdHlsZSgpKTsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdFbGVtZW50KTsKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBudWxsOwotICAgIAotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTtpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgc29hcE9wZXJhdGlvbiA9IChTT0FQT3BlcmF0aW9uKWU7Ci0gICAgICAgIHNvYXBBY3Rpb25fID0gc29hcE9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgICAgIGlmKHNvYXBBY3Rpb25fID09IG51bGwpIHNvYXBBY3Rpb25fID0gIiI7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgc3R5bGUgPSBzb2FwT3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgICAgIGlmIChzdHlsZSAhPSBudWxsKQotICAgICAgICAgIGlzRG9jdW1lbnRTdHlsZV8gPSBzdHlsZS5lcXVhbHMoImRvY3VtZW50Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTtpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICB7Ci0gICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KWU7Ci0gICAgICAgIGlzVXNlTGl0ZXJhbF8gPSAibGl0ZXJhbCIuZXF1YWxzKHNvYXBCb2R5LmdldFVzZSgpKTsKLSAgICAgICAgaWYgKCFpc1VzZUxpdGVyYWxfKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gRW5jb2RlZC4KLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGogPSBzb2FwQm9keS5nZXRFbmNvZGluZ1N0eWxlcygpLml0ZXJhdG9yKCk7ai5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVfID0gKFN0cmluZylqLm5leHQoKTsKLSAgICAgICAgICAgIGVuY29kaW5nTmFtZXNwYWNlXyA9IHNvYXBCb2R5LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBXU0RMT3BlcmF0aW9uRWxlbWVudChTdHJpbmcgbmFtZSxXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQsT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIHN1cGVyKG5hbWUsIGJpbmRpbmdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgIC8vIFNldCB0aGUgZGVmYXVsdCBvcGVyYXRpb24gdHlwZSB0byBiZSBTT0FQLgotICAgIHNldE9wZXJhdGlvbihiaW5kaW5nRWxlbWVudCxvcGVyYXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50KSB7Ci0JICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KSBiaW5kaW5nRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgc2VydmljZUVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgcmV0dXJuIHdzZGxFbGVtZW50LmdldERlZmluaXRpb24oKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldE1lc3NhZ2VDb250ZXh0KFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCkgewotCSAgbWVzc2FnZUNvbnRleHQgPSBuZXcgTWVzc2FnZUNvbnRleHQoKTsKLQkgIG1lc3NhZ2VDb250ZXh0LnNldERlZmluaXRpb24oZ2V0RGVmaW5pdGlvbihiaW5kaW5nRWxlbWVudCkpOwotCSAgbWVzc2FnZUNvbnRleHQuc2V0QmluZGluZ09wZXJhdGlvbihnZXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdFbGVtZW50KSk7Ci0JICBtZXNzYWdlQ29udGV4dC5zZXRCaW5kaW5nUHJvdG9jb2woYmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotCSAgbWVzc2FnZUNvbnRleHQuc2V0RG9jdW1lbnRTdHlsZShpc0RvY3VtZW50U3R5bGVfKTsKLSAgfQotICAKLSAgcHVibGljIE1lc3NhZ2VDb250ZXh0IGdldE1lc3NhZ2VDb250ZXh0KCkgewotCSAgcmV0dXJuIG1lc3NhZ2VDb250ZXh0OwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nKSB7Ci0JICAJICAKLQkgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBzb2FwQmluZGluZy5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCSAgU3RyaW5nIHRyYW5zcG9ydFVSSSA9IHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpOwotCSAgCSAgCi0JICBzb2FwVHJhbnNwb3J0UHJvdmlkZXIgPSBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkKLQkgIAkuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKG5hbWVzcGFjZVVSSSwgdHJhbnNwb3J0VVJJKTsKLSAgfQotICAKLSAgcHVibGljIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkgewotCSAgcmV0dXJuIHNvYXBUcmFuc3BvcnRQcm92aWRlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0T3BlcmF0aW9uKFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gICAgb3BlcmF0aW9uXyA9IG9wZXJhdGlvbjsKLSAgICBzZXREb2N1bWVudGF0aW9uKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBmcmFnQ29udHJvbGxlcl8gPSBudWxsOwotICAgIHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl8gPSBudWxsOwotICAgIG9wZXJhdGlvblR5cGVfID0gYmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZ1R5cGUoKTsKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBiaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGVfKQotICAgIHsKLSAgICAgIGNhc2UgQmluZGluZ1R5cGVzLlNPQVA6Ci0gICAgICAgIGdhdGhlclNvYXBJbmZvcm1hdGlvbihiaW5kaW5nRWxlbWVudCwoU09BUEJpbmRpbmcpYmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgc2V0TWVzc2FnZUNvbnRleHQoYmluZGluZ0VsZW1lbnQpOwotICAgICAgICBzZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKFNPQVBCaW5kaW5nKSBiaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBoZWFkZXJDYWNoZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIGNhc2UgQmluZGluZ1R5cGVzLkhUVFBfR0VUOgotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuSFRUUF9QT1NUOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIE9wZXJhdGlvbiBnZXRPcGVyYXRpb24oKSB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRCaW5kaW5nT3BlcmF0aW9uKChXU0RMQmluZGluZ0VsZW1lbnQpZ2V0UGFyZW50RWxlbWVudCgpKTsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCkKLSAgewotICAgIEJpbmRpbmcgYmluZGluZyA9IGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmcoKTsKLSAgICBTdHJpbmcgb3BlcmF0aW9uSW5wdXROYW1lID0gbnVsbDsKLSAgICBTdHJpbmcgb3BlcmF0aW9uT3V0cHV0TmFtZSA9IG51bGw7Ci0gICAgSW5wdXQgb3BlcmF0aW9uSW5wdXQgPSBvcGVyYXRpb25fLmdldElucHV0KCk7Ci0gICAgT3V0cHV0IG9wZXJhdGlvbk91dHB1dCA9IG9wZXJhdGlvbl8uZ2V0T3V0cHV0KCk7Ci0gICAgaWYgKG9wZXJhdGlvbklucHV0ICE9IG51bGwpCi0gICAgICBvcGVyYXRpb25JbnB1dE5hbWUgPSBvcGVyYXRpb25JbnB1dC5nZXROYW1lKCk7Ci0gICAgaWYgKG9wZXJhdGlvbk91dHB1dCAhPSBudWxsKQotICAgICAgb3BlcmF0aW9uT3V0cHV0TmFtZSA9IG9wZXJhdGlvbk91dHB1dC5nZXROYW1lKCk7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbl8uZ2V0TmFtZSgpLG9wZXJhdGlvbklucHV0TmFtZSxvcGVyYXRpb25PdXRwdXROYW1lKTsKLSAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbihvcGVyYXRpb25fLmdldE5hbWUoKSxudWxsLG51bGwpOwotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIGxpc3Qgb2YgaW5wdXQgaGVhZGVycy4KLSAgICogCi0gICAqIEByZXR1cm4gQSBMaXN0Ci0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTT0FQSGVhZGVycygpIHsKLQkgIHJldHVybiBnZXRTT0FQSGVhZGVycyh0cnVlKTsKLSAgfQotCSAgCi0gIC8qKgotICAgKiBSZXR1cm4gYSBsaXN0IG9mIGhlYWRlcnMuCi0gICAqIAotICAgKiBAcGFyYW0gaXNJbnB1dCBJZiB0cnVlLCByZXR1cm5zIHRoZSBpbnB1dCBoZWFkZXJzLiAgSWYgZmFsc2UsIHJldHVybnMgdGhlIG91dHB1dCBoZWFkZXJzLgotICAgKiBAcmV0dXJuIEEgTGlzdAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0U09BUEhlYWRlcnMoYm9vbGVhbiBpc0lucHV0KSB7Ci0JICBMaXN0IGhlYWRlcnMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0JICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IGlzSW5wdXQgPwotCQkJYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSA6IAotCQkJYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7CSAgCSAgCi0JICAKLQkgIGZvciAoSXRlcmF0b3IgaXQgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotCSAgICAgIAotCQkgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLQkgICAgICAKLQkgICAgICBpZiAoZSBpbnN0YW5jZW9mIFNPQVBIZWFkZXIgJiYgIWhlYWRlcnMuY29udGFpbnMoZSkpCSAgICAJIAotICAgIAkJICBoZWFkZXJzLmFkZChlKTsKLQkgIH0gICAKLQkgIAotCSAgcmV0dXJuIGhlYWRlcnM7Ci0gIH0gIAotICAKLSAgcHVibGljIExpc3QgZ2V0T3JkZXJlZEJvZHlQYXJ0cygpCi0gIHsKLSAgICBMaXN0IHBhcnRzID0gbmV3IFZlY3RvcihvcGVyYXRpb25fLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhvcGVyYXRpb25fLmdldFBhcmFtZXRlck9yZGVyaW5nKCkpKTsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXQubmV4dCgpOwotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHsKLSAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpZTsKLSAgICAgICAgTGlzdCBib2R5UGFydHMgPSBzb2FwQm9keS5nZXRQYXJ0cygpOwotICAgICAgICBpZiAoYm9keVBhcnRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KXBhcnRzLmdldChpKTsKLSAgICAgICAgICAgIGlmICghYm9keVBhcnRzLmNvbnRhaW5zKHBhcnQpICYmICFib2R5UGFydHMuY29udGFpbnMocGFydC5nZXROYW1lKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwYXJ0cy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJ0czsKLSAgfQotCi0gIHByaXZhdGUgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKSB7Ci0gICAgaWYgKGZyYWdDb250cm9sbGVyXyA9PSBudWxsKSB7Ci0gICAgICBmcmFnQ29udHJvbGxlcl8gPSBuZXcgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKTsKLSAgICAgIGZyYWdDb250cm9sbGVyXy5zZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIod3NkbFBhcnRzVG9Yc2RUeXBlTWFwcGVyXyk7Ci0gICAgfQotICAgIHJldHVybiBmcmFnQ29udHJvbGxlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTRE5hbWVkQ29tcG9uZW50IGdldFNjaGVtYShQYXJ0IHBhcnQsIFN0cmluZyBpZCkgewotICAgIGlmICh3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfID09IG51bGwpIHsKLSAgICAgIHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl8gPSBuZXcgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCk7Ci0gICAgICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIFdTRExTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpYmluZGluZ0VsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpc2VydmljZUVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgd3NkbFBhcnRzVG9Yc2RUeXBlTWFwcGVyXy5hZGRTY2hlbWFzKHdzZGxFbGVtZW50LmdldFNjaGVtYUxpc3QoKSk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfLmdldFhTRFR5cGUocGFydCwgaWQpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRIZWFkZXJGcmFnbWVudChTT0FQSGVhZGVyIHNvYXBIZWFkZXIpIHsKLQlyZXR1cm4gZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlciwgdHJ1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0SGVhZGVyRnJhZ21lbnQoU09BUEhlYWRlciBzb2FwSGVhZGVyLCBib29sZWFuIGlzSW5wdXQpIHsKLQlTdHJpbmdCdWZmZXIgaWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JUGFydCBwYXJ0ID0gc29hcEhlYWRlci5nZXRFUGFydCgpOwotCWlmIChpc0lucHV0KQotCSAgaWQuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLklOUFVUX0lEKS5hcHBlbmQoc29hcEhlYWRlci5nZXRNZXNzYWdlKCkpLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5QQVJUX1RPS0VOKTsKLQllbHNlCi0JICBpZC5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuT1VUUFVUX0lEKS5hcHBlbmQoc29hcEhlYWRlci5nZXRNZXNzYWdlKCkpLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5QQVJUX1RPS0VOKTsKLQkKLQlyZXR1cm4gZ2V0RnJhZ21lbnQocGFydCwgaWQsIHRydWUsIGlzSW5wdXQpOyAvLyBvbmx5IHdyYXAgaW5wdXQgaGVhZGVyIGZyYWdtZW50cwotICB9Ci0gIAotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFBhcnQgcGFydCkgewotICAgIHJldHVybiBnZXRGcmFnbWVudChwYXJ0LCB0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoUGFydCBwYXJ0LCBib29sZWFuIGlzSW5wdXQpIHsKLSAgICBTdHJpbmdCdWZmZXIgaWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgaWYgKGlzSW5wdXQpCi0gICAgICBpZC5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuSU5QVVRfSUQpOwotICAgIGVsc2UKLSAgICAgIGlkLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5PVVRQVVRfSUQpOwotCi0JcmV0dXJuIGdldEZyYWdtZW50KHBhcnQsIGlkLCBmYWxzZSwgZmFsc2UpOwotICB9Ci0gIAotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChQYXJ0IHBhcnQsIFN0cmluZ0J1ZmZlciBpZCwgYm9vbGVhbiBpc0hlYWRlciwgYm9vbGVhbiB1c2VTT0FQSGVhZGVyV3JhcHBlcikgewotICAgIFN0cmluZyBwYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotICAgIGlkLmFwcGVuZChwYXJ0TmFtZSk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgY29uZmlnLnNldElzV1NETFBhcnQodHJ1ZSk7Ci0gICAgY29uZmlnLnNldFdTRExQYXJ0TmFtZShwYXJ0TmFtZSk7Ci0gICAgY29uZmlnLnNldFhTRENvbXBvbmVudChnZXRTY2hlbWEocGFydCwgaWQudG9TdHJpbmcoKSkpOwotICAgIGlmIChpc0RvY3VtZW50U3R5bGUoKSB8fCBpc0hlYWRlcikKLSAgICAgIGNvbmZpZy5zZXRTdHlsZShGcmFnbWVudENvbnN0YW50cy5TVFlMRV9ET0NVTUVOVCk7Ci0gICAgZWxzZQotICAgICAgY29uZmlnLnNldFN0eWxlKEZyYWdtZW50Q29uc3RhbnRzLlNUWUxFX1JQQyk7Ci0gICAgaWYgKG9wZXJhdGlvblR5cGVfID09IEJpbmRpbmdUeXBlcy5TT0FQKQotICAgIHsKLSAgICAgIGlmICghaXNVc2VMaXRlcmFsXykKLSAgICAgICAgY29uZmlnLnNldFBhcnRFbmNvZGluZyhGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19TT0FQKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgY29uZmlnLnNldFBhcnRFbmNvZGluZyhGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19VUkwpOwotICAgIElYU0RGcmFnbWVudCBmcmFnbWVudCA9IGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZC50b1N0cmluZygpLCBwYXJ0LmdldE5hbWUoKSk7Ci0gICAgIAotICAgIC8vIGxldCdzIHNlZSBpZiB0aGVyZSdzIGEgY29ycmVzcG9uZGluZyB3cmFwcGVyIGZvciB0aGlzIGZyYWdtZW50Ci0gICAgaWYgKHVzZVNPQVBIZWFkZXJXcmFwcGVyICYmICEoZnJhZ21lbnQgaW5zdGFuY2VvZiBTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KSkgewotICAgIAlTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50IHdyYXBwZXIgPSAoU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCkgaGVhZGVyQ2FjaGUuZ2V0KGZyYWdtZW50LmdldElEKCkpOwotICAgIAkKLSAgICAJLy8gbm8gd3JhcHBlciwgbGV0J3Mgd3JhcCBpdAotICAgIAlpZiAod3JhcHBlciA9PSBudWxsKSB7Ci0gICAgCQl3cmFwcGVyID0gbmV3IFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQoZnJhZ21lbnQpOyAgICAJCQotICAgIAkJaGVhZGVyQ2FjaGUucHV0KGZyYWdtZW50LmdldElEKCksIHdyYXBwZXIpOwotICAgIAkJCi0gICAgCQkvLyBhbHNvIHB1dCB0aGlzIHdyYXBwZXIgZnJhZ21lbnQgaW4gdGhlIG1hc3RlciBjYWNoZQotICAgIAkJZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5hZGRUb0NhY2hlKHdyYXBwZXIuZ2V0SUQoKSwgd3JhcHBlcik7Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiB3cmFwcGVyOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50QnlJRChTdHJpbmcgaWQpIHsKLSAgICByZXR1cm4gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRDYWNoZWRGcmFnbWVudChpZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVBbGxGcmFnbWVudCgpIHsKLSAgICBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmVtcHR5Q2FjaGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRTdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gaXNEb2N1bWVudFN0eWxlXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U29hcEFjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc29hcEFjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1VzZUxpdGVyYWwoKQotICB7Ci0gICAgcmV0dXJuIGlzVXNlTGl0ZXJhbF87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nU3R5bGUoKQotICB7Ci0gICAgcmV0dXJuIGVuY29kaW5nU3R5bGVfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbmNvZGluZ05hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gZW5jb2RpbmdOYW1lc3BhY2VfOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRPcGVyYXRpb25UeXBlKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25UeXBlXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETFNlcnZpY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiOWFkOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlcnZpY2VFbGVtZW50IGV4dGVuZHMgV1NETENvbW1vbkVsZW1lbnQKLXsKLQotICBwcml2YXRlIFNlcnZpY2Ugc2VydmljZV87Ci0KLSAgcHVibGljIFdTRExTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICBzZXRTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkgewotICAgIHNlcnZpY2VfID0gc2VydmljZTsKLSAgICBzZXREb2N1bWVudGF0aW9uKHNlcnZpY2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkgewotICAgIHJldHVybiBzZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzTG9jYXRpb24oQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgTWFwIHBvcnRzID0gc2VydmljZV8uZ2V0UG9ydHMoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpO2kuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClpLm5leHQoKTsKLSAgICAgIGlmIChwb3J0LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpLmVxdWFscyhiaW5kaW5nLmdldFFOYW1lKCkpKQotICAgICAgewotICAgICAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGV4dGVuc2liaWxpdHlFbGVtZW50cy5pdGVyYXRvcigpO2ouaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpai5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IChTT0FQQWRkcmVzcyllbGVtZW50OwotICAgICAgICAgICAgcmV0dXJuIHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBIVFRQQWRkcmVzcyBodHRwQWRkcmVzcyA9IChIVFRQQWRkcmVzcyllbGVtZW50OwotICAgICAgICAgICAgcmV0dXJuIGh0dHBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYnVpbGRNb2RlbCgpIHsKLSAgICBpZiAoc2VydmljZV8gIT0gbnVsbCkgewotICAgICAgTWFwIHBvcnRzID0gc2VydmljZV8uZ2V0UG9ydHMoKTsKLSAgICAgIE1hcCBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTtpdC5oYXNOZXh0KCk7KSB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWl0Lm5leHQoKTsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgICAgIGlmIChiaW5kaW5nLmdldFBvcnRUeXBlKCkgPT0gbnVsbCkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGJpbmRpbmdzLnB1dChiaW5kaW5nLmdldFFOYW1lKCksIGJpbmRpbmcpOwotICAgICAgfQotICAgICAgV1NETEJpbmRpbmdFbGVtZW50W10gd3NkbEJpbmRpbmdFbGVtZW50cyA9IG5ldyBXU0RMQmluZGluZ0VsZW1lbnRbZ2V0TnVtYmVyT2ZFbGVtZW50cyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORyldOwotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9CSU5ESU5HKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbEJpbmRpbmdFbGVtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICB3c2RsQmluZGluZ0VsZW1lbnRzW2ldID0gKFdTRExCaW5kaW5nRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxCaW5kaW5nRWxlbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgUU5hbWUgcW5hbWUgPSB3c2RsQmluZGluZ0VsZW1lbnRzW2pdLmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpOwotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZyliaW5kaW5ncy5nZXQocW5hbWUpOwotICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsKSB7Ci0gICAgICAgICAgYmluZGluZ3MucmVtb3ZlKHFuYW1lKTsKLSAgICAgICAgICB3c2RsQmluZGluZ0VsZW1lbnRzW2pdLnNldEJpbmRpbmcoYmluZGluZyk7Ci0gICAgICAgICAgd3NkbEJpbmRpbmdFbGVtZW50c1tqXS5idWlsZE1vZGVsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGRpc2Nvbm5lY3Qod3NkbEJpbmRpbmdFbGVtZW50c1tqXSwgV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpOwotICAgICAgfQotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGJpbmRpbmdzLnZhbHVlcygpLml0ZXJhdG9yKCk7aXQuaGFzTmV4dCgpOykgewotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylpdC5uZXh0KCk7Ci0gICAgICAgIFdTRExCaW5kaW5nRWxlbWVudCB3c2RsQmluZGluZ0VsZW1lbnQgPSBuZXcgV1NETEJpbmRpbmdFbGVtZW50KGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgZ2V0TW9kZWwoKSwgYmluZGluZyk7Ci0gICAgICAgIGNvbm5lY3Qod3NkbEJpbmRpbmdFbGVtZW50LFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9CSU5ESU5HLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIHdzZGxCaW5kaW5nRWxlbWVudC5idWlsZE1vZGVsKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZTI4MGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGludGVyZmFjZSBJRnJhZ21lbnQgewotICBwdWJsaWMgdm9pZCBzZXRJRChTdHJpbmcgaWQpOwotICBwdWJsaWMgU3RyaW5nIGdldElEKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgU3RyaW5nW10gcGFyYW1zKTsKLSAgICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBWZWN0b3IgcGFyYW1zKTsKLSAgcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpOwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpOwotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSk7Ci0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCk7Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpOwotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jQXJyYXlGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jQXJyYXlGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWZhNmRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JU09BUEVuY0FycmF5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJU09BUEVuY0FycmF5RnJhZ21lbnQgZXh0ZW5kcyBJWFNER3JvdXBTZXFGcmFnbWVudCB7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlU09BUEVuY0FycmF5SW5zdGFuY2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODY1MGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQgZXh0ZW5kcyBJWFNERGVsZWdhdGlvbkZyYWdtZW50Ci17Ci0gIHB1YmxpYyB2b2lkIHNldFVSSVJlZmVyZW5jZXMoSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RBdHRyaWJ1dGVGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RBdHRyaWJ1dGVGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGYyM2NlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEQXR0cmlidXRlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKgotKiA8Y29weXJpZ2h0PgotKgotKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTQotKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQotKiByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSoKLSogPC9jb3B5cmlnaHQ+Ci0qCi0qIEZpbGUgcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvc3JjL2NvbS9pYm0vZXRvb2xzL3dlYnNlcnZpY2UvZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9JWFNERWxlbWVudEZyYWdtZW50LmphdmEsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yLCAyMDAzMTIzMWEgMQotKiBWZXJzaW9uIDEuMSAwMy8wMi8yOCAxNToyNjowNQotKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGV4dGVuZHMgSVhTRERlbGVnYXRpb25GcmFnbWVudCB7Ci0gIAotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRENvbXBsZXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RDb21wbGV4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxZmZjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRENvbXBsZXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RDb21wbGV4RnJhZ21lbnQgZXh0ZW5kcyBJWFNETWFwRnJhZ21lbnQgewotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICBwdWJsaWMgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRERlbGVnYXRpb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0REZWxlZ2F0aW9uRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM1NTM1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRERlbGVnYXRpb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0REZWxlZ2F0aW9uRnJhZ21lbnQgZXh0ZW5kcyBJWFNERnJhZ21lbnQgewotICBwdWJsaWMgdm9pZCBzZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoSVhTREZyYWdtZW50IHhzZEZyYWdtZW50KTsKLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERWxlbWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREVsZW1lbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGNhZTdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERWxlbWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREVsZW1lbnRGcmFnbWVudCBleHRlbmRzIElYU0REZWxlZ2F0aW9uRnJhZ21lbnQgewotICBwdWJsaWMgc3RhdGljIFN0cmluZyBOSUwgPSAibmlsVmFsdWUiOyAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE5JTF9WQUxVRSA9ICJuaWwiOyAKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0TWluT2NjdXJzKCk7Ci0gIHB1YmxpYyBpbnQgZ2V0TWF4T2NjdXJzKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzTmlsbGFibGUoKTsKLSAgcHVibGljIFN0cmluZyBnZXROaWxJRCgpOwotICBwdWJsaWMgYm9vbGVhbiBpc05pbCgpOwotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTU1NTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREZyYWdtZW50IGV4dGVuZHMgSUZyYWdtZW50IHsKLSAgcHVibGljIHZvaWQgc2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKTsKLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZURlZik7Ci0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICBwdWJsaWMgRWxlbWVudCBzZXRBdHRyaWJ1dGVzT25JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgYm9vbGVhbiBzZXRBdHRyaWJ1dGVQYXJhbXNGcm9tSW5zdGFuY2VEb2N1bWVudHMgKE5vZGUgYXR0cmlidXRlKTsKLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyk7Ci0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2VuSUQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBBbGxGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cEFsbEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYWVlNTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cEFsbEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREdyb3VwQWxsRnJhZ21lbnQgZXh0ZW5kcyBJWFNER3JvdXBGcmFnbWVudCB7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0R3JvdXBBbGxJbnN0YW5jZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cENob2ljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQxMDkyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLQotcHVibGljIGludGVyZmFjZSBJWFNER3JvdXBDaG9pY2VGcmFnbWVudCBleHRlbmRzIElYU0RHcm91cEZyYWdtZW50IHsKLSAgcHVibGljIFhTRFBhcnRpY2xlW10gZ2V0Q2hvaWNlcygpOwotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUdyb3VwQ2hvaWNlSW5zdGFuY2UoaW50IGNob2ljZUluZGV4KTsKLSAgcHVibGljIGludCBnZXRDaG9pY2VJbmRleChTdHJpbmcgZ3JvdXBJRCk7Ci0gIHB1YmxpYyB2b2lkIHNldENob2ljZUluZGV4KFN0cmluZyBncm91cElELCBpbnQgY2hvaWNlSW5kZXgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ0NDgzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RHcm91cEZyYWdtZW50IGV4dGVuZHMgSVhTRE1hcEZyYWdtZW50IHsKLSAgcHVibGljIHZvaWQgc2V0WFNETW9kZWxHcm91cChYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApOwotICBwdWJsaWMgWFNETW9kZWxHcm91cCBnZXRYU0RNb2RlbEdyb3VwKCk7Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEdyb3VwSURzKCk7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXRHcm91cE1lbWJlcklEcyhTdHJpbmcgZ3JvdXBJRCk7Ci0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhTdHJpbmcgZ3JvdXBJRCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwU2VxRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBTZXFGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjU4ZmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBTZXFGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RHcm91cFNlcUZyYWdtZW50IGV4dGVuZHMgSVhTREdyb3VwRnJhZ21lbnQgewotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNETWFwRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNETWFwRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUxZTQwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRE1hcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRE1hcEZyYWdtZW50IGV4dGVuZHMgSVhTREZyYWdtZW50IHsKLSAgcHVibGljIHZvaWQgc2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcik7Ci0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpOwotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKTsKLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0RnJhZ21lbnRzT3JkZXIoKTsKLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChTdHJpbmcgaWQpOwotICBwdWJsaWMgSVhTREZyYWdtZW50W10gZ2V0RnJhZ21lbnRzKFN0cmluZ1tdIGlkcyk7Ci0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRBbGxGcmFnbWVudHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1OGQ1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IGV4dGVuZHMgSVhTREZyYWdtZW50IHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlTGlzdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZUxpc3RGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWIzODA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlTGlzdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRFNpbXBsZUxpc3RGcmFnbWVudCBleHRlbmRzIElYU0RNYXBGcmFnbWVudCB7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlTGlzdEluc3RhbmNlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2RjYWQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RTaW1wbGVVbmlvbkZyYWdtZW50IGV4dGVuZHMgSVhTRE1hcEZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uW10gZ2V0TWVtYmVyVHlwZURlZmluaXRpb25zKCk7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlVW5pb25JbnN0YW5jZShpbnQgbWVtYmVyVHlwZUluZGV4KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEQXR0cmlidXRlVXNlVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmUxMGVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3NyYy9jb20vaWJtL2V0b29scy93ZWJzZXJ2aWNlL2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlci5qYXZhLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiwgMjAwMzEyMzFhIDIKLSogVmVyc2lvbiAxLjIgMDMvMDYvMDUgMTQ6MTc6NDQKLSovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RBdHRyaWJ1dGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNEQXR0cmlidXRlVXNlVG9GcmFnbWVudE1hcHBlciBleHRlbmRzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwdWJsaWMgWFNEQXR0cmlidXRlVXNlVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAJWFNEQXR0cmlidXRlVXNlIGF0dHJpYnV0ZSA9IChYU0RBdHRyaWJ1dGVVc2UpY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmIChhdHRyaWJ1dGUgIT0gbnVsbCAmJiBhdHRyaWJ1dGUuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0gICAJICBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiByZXNvbHZlZEF0dHJpYnV0ZSA9IHJlc29sdmVYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyaWJ1dGUuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKSk7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmID0gZ2V0WFNEVHlwZURlZmluaXRpb24ocmVzb2x2ZWRBdHRyaWJ1dGUpOwotICAgICAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWcgPSBuZXcgWFNEQXR0cmlidXRlRnJhZ21lbnQoaWQsIHJlc29sdmVkQXR0cmlidXRlLmdldE5hbWUoKSwgY29uZmlnKTsKLSAgICAgIGF0dHJpYnV0ZUZyYWcuc2V0WFNEVHlwZURlZmluaXRpb24odHlwZURlZik7Ci0gICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBhdHRyaWJ1dGVUeXBlQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICBhdHRyaWJ1dGVUeXBlQ29uZmlnLnNldFhTRENvbXBvbmVudCh0eXBlRGVmKTsKLSAgICAgIGF0dHJpYnV0ZVR5cGVDb25maWcuc2V0U3R5bGUoY29uZmlnLmdldFN0eWxlKCkpOwotICAgICAgYXR0cmlidXRlVHlwZUNvbmZpZy5zZXRQYXJ0RW5jb2RpbmcoY29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICAgIGF0dHJpYnV0ZVR5cGVDb25maWcuc2V0V1NETFBhcnROYW1lKGNvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgICBJWFNERnJhZ21lbnQgeHNkRnJhZ21lbnQgPSBnZXRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoYXR0cmlidXRlVHlwZUNvbmZpZywgYXR0cmlidXRlRnJhZy5nZW5JRCgpLCByZXNvbHZlZEF0dHJpYnV0ZS5nZXROYW1lKCkpOwotICAgICAgYXR0cmlidXRlRnJhZy5zZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoeHNkRnJhZ21lbnQpOwotICAgICAgcmV0dXJuIGF0dHJpYnV0ZUZyYWc7Ci0gICAgfQotICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIHJlc29sdmVYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbihYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyaWJ1dGUpIHsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmIChhdHRyaWJ1dGUuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gcmVzb2x2ZWRBdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpOwotICAgICAgaWYgKCFpc0NvbXBvbmVudFJlc29sdmFibGUocmVzb2x2ZWRBdHRyaWJ1dGUpKQotICAgICAgewotICAgICAgICBYU0RDb21wb25lbnQgcmVzb2x2ZWRDb21wb25lbnQgPSBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKS5yZXNvbHZlWFNETmFtZWRDb21wb25lbnQocmVzb2x2ZWRBdHRyaWJ1dGUpOwotICAgICAgICBpZiAocmVzb2x2ZWRDb21wb25lbnQgIT0gbnVsbCAmJiAocmVzb2x2ZWRDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikpCi0gICAgICAgICAgcmVzb2x2ZWRBdHRyaWJ1dGUgPSAoWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pcmVzb2x2ZWRDb21wb25lbnQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzb2x2ZWRBdHRyaWJ1dGU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBhdHRyaWJ1dGU7Ci0gIH0KLQotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIGdldFhTRFR5cGVEZWZpbml0aW9uKFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJpYnV0ZSkgewotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKGF0dHJpYnV0ZS5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICByZXR1cm4gYXR0cmlidXRlLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBlbHNlIGlmIChhdHRyaWJ1dGUuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDg5YTI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEQ29tcGxleEZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuWFNEVHlwZURlZmluaXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb250ZW50VHlwZUNhdGVnb3J5OwotCi1wdWJsaWMgY2xhc3MgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHB1YmxpYyBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIHdzZGxUb1hTRE1hcHBlcik7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGludCBjYXRlZ29yeSA9IGNvbXBsZXhUeXBlLmdldENvbnRlbnRUeXBlQ2F0ZWdvcnkoKS5nZXRWYWx1ZSgpOwotICAgIGlmIChjb21wbGV4VHlwZSAhPSBudWxsICYmIGNvbXBsZXhUeXBlLmlzTWl4ZWQoKSkKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgIT0gbnVsbCkKLSAgICAgIHJldHVybiBnZXRYU0RDb21wbGV4RnJhZ21lbnQoY2F0ZWdvcnksY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTREVtcHR5RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RDb21wbGV4RnJhZ21lbnQoaW50IGNhdGVnb3J5LFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGludCBtaW5PY2N1cnMgPSBjb25maWcuZ2V0TWluT2NjdXJzKCk7Ci0gICAgaW50IG1heE9jY3VycyA9IGNvbmZpZy5nZXRNYXhPY2N1cnMoKTsKLSAgICBpZiAobWluT2NjdXJzID09IG1heE9jY3VycykKLSAgICAgIGlmKGNhdGVnb3J5ID09IFhTRENvbnRlbnRUeXBlQ2F0ZWdvcnkuU0lNUExFKXsKLSAgICAgIAlyZXR1cm4gbmV3IFhTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlCQotICAgICAgCXJldHVybiBuZXcgWFNEQ29tcGxleEZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gICAgZWxzZSAKLSAgICAJaWYoY2F0ZWdvcnkgPT0gWFNEQ29udGVudFR5cGVDYXRlZ29yeS5TSU1QTEUpCi0gICAgCSAgcmV0dXJuIG5ldyBYU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgICAJZWxzZQotICAgICAgICAgIHJldHVybiBuZXcgWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNGQ2YTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDA0ICAgMTgxMDY1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0UgZG9lcyBub3QgaGFuZGxlIHR5cGVzIHJlZmVyZW5jZWQgYWNyb3NzIGlubGluZSBzY2hlbWFzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RFbGVtZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLQotcHVibGljIGNsYXNzIFhTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIHdzZGxUb1hTRE1hcHBlcik7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbiljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkgewotICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc29sdmVkRWxlbWVudCA9IHJlc29sdmVYU0RFbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmID0gcmVzb2x2ZVhTRFR5cGVEZWZpbml0aW9uKGdldFhTRFR5cGVEZWZpbml0aW9uKHJlc29sdmVkRWxlbWVudCkpOwotICAgICAgaWYgKHR5cGVEZWYgIT0gbnVsbCkgewotICAgICAgICBpbnQgbWluT2NjdXJzID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NSU5fT0NDVVJTOwotICAgICAgICBpbnQgbWF4T2NjdXJzID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NQVhfT0NDVVJTOwotICAgICAgICBYU0RDb25jcmV0ZUNvbXBvbmVudCBjb25jcmV0ZUNvbXBvbmVudCA9IGVsZW1lbnQuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmIChjb25jcmV0ZUNvbXBvbmVudCAhPSBudWxsICYmIGNvbmNyZXRlQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLSAgICAgICAgICBYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSljb25jcmV0ZUNvbXBvbmVudDsKLSAgICAgICAgICBpZiAocGFydGljbGUuaXNTZXRNaW5PY2N1cnMoKSkKLSAgICAgICAgICAgIG1pbk9jY3VycyA9IHBhcnRpY2xlLmdldE1pbk9jY3VycygpOwotICAgICAgICAgIGlmIChwYXJ0aWNsZS5pc1NldE1heE9jY3VycygpKQotICAgICAgICAgICAgbWF4T2NjdXJzID0gcGFydGljbGUuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uZmlnLnNldE1pbk9jY3VycyhtaW5PY2N1cnMpOwotICAgICAgICBjb25maWcuc2V0TWF4T2NjdXJzKG1heE9jY3Vycyk7Ci0gICAgICAgIElYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWcgPSBuZXcgWFNERWxlbWVudEZyYWdtZW50KGlkLCByZXNvbHZlZEVsZW1lbnQuZ2V0TmFtZSgpLCBjb25maWcpOwotICAgICAgICBlbGVtZW50RnJhZy5zZXRYU0RUeXBlRGVmaW5pdGlvbih0eXBlRGVmKTsKLSAgICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gZWxlbWVudFR5cGVDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgZWxlbWVudFR5cGVDb25maWcuc2V0WFNEQ29tcG9uZW50KHR5cGVEZWYpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRNaW5PY2N1cnMobWluT2NjdXJzKTsKLSAgICAgICAgZWxlbWVudFR5cGVDb25maWcuc2V0TWF4T2NjdXJzKG1heE9jY3Vycyk7Ci0gICAgICAgIGVsZW1lbnRUeXBlQ29uZmlnLnNldFN0eWxlKGNvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICAgICAgZWxlbWVudFR5cGVDb25maWcuc2V0UGFydEVuY29kaW5nKGNvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgICAgIGVsZW1lbnRUeXBlQ29uZmlnLnNldFdTRExQYXJ0TmFtZShjb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgICAgICBJWFNERnJhZ21lbnQgeHNkRnJhZ21lbnQgPSBnZXRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoZWxlbWVudFR5cGVDb25maWcsIGVsZW1lbnRGcmFnLmdlbklEKCksIHJlc29sdmVkRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICBlbGVtZW50RnJhZy5zZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoeHNkRnJhZ21lbnQpOwotICAgICAgICByZXR1cm4gZWxlbWVudEZyYWc7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXNvbHZlWFNERWxlbWVudERlY2xhcmF0aW9uKFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50KSB7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoZWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc29sdmVkRWxlbWVudCA9IGVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKHJlc29sdmVkRWxlbWVudCkpCi0gICAgICB7Ci0gICAgICAgIFhTRENvbXBvbmVudCByZXNvbHZlZENvbXBvbmVudCA9IGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLnJlc29sdmVYU0ROYW1lZENvbXBvbmVudChyZXNvbHZlZEVsZW1lbnQpOwotICAgICAgICBpZiAocmVzb2x2ZWRDb21wb25lbnQgIT0gbnVsbCAmJiAocmVzb2x2ZWRDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pKQotICAgICAgICAgIHJlc29sdmVkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pcmVzb2x2ZWRDb21wb25lbnQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzb2x2ZWRFbGVtZW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiByZXNvbHZlWFNEVHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZURlZikgewotCSAgCi0JICBpZiAoIWlzQ29tcG9uZW50UmVzb2x2YWJsZSh0eXBlRGVmKSkgewotCQkgIFhTRENvbXBvbmVudCByZXNvbHZlZENvbXBvbmVudCA9IGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLnJlc29sdmVYU0ROYW1lZENvbXBvbmVudCh0eXBlRGVmKTsKLQkJICBpZiAocmVzb2x2ZWRDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLQkJCSAgcmV0dXJuIChYU0RUeXBlRGVmaW5pdGlvbikgcmVzb2x2ZWRDb21wb25lbnQ7Ci0JICB9Ci0JICAKLQkgIHJldHVybiB0eXBlRGVmOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RUeXBlRGVmaW5pdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkgewotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKGVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGVsc2UgaWYgKGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDAyZDljLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciBleHRlbmRzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwcml2YXRlIFhTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyIHhzZFNpbXBsZU1hcHBlcl87Ci0gIHByaXZhdGUgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyIHhzZENvbXBsZXhNYXBwZXJfOwotICBwcml2YXRlIFhTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIgeHNkRWxlbWVudE1hcHBlcl87Ci0gIHByaXZhdGUgWFNEQXR0cmlidXRlVXNlVG9GcmFnbWVudE1hcHBlciB4c2RBdHRyaWJ1dGVNYXBwZXJfOwotICBwcml2YXRlIFhTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlciB4c2RQYXJ0aWNsZU1hcHBlcl87Ci0KLSAgcHVibGljIFhTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIHdzZGxUb1hTRE1hcHBlcik7Ci0gICAgeHNkU2ltcGxlTWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkQ29tcGxleE1hcHBlcl8gPSBudWxsOwotICAgIHhzZEVsZW1lbnRNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RBdHRyaWJ1dGVNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RQYXJ0aWNsZU1hcHBlcl89IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIFhTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyIGdldFhTRFNpbXBsZU1hcHBlcigpIHsKLSAgICBpZiAoeHNkU2ltcGxlTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkU2ltcGxlTWFwcGVyXyA9IG5ldyBYU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICByZXR1cm4geHNkU2ltcGxlTWFwcGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyIGdldFhTRENvbXBsZXhNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZENvbXBsZXhNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RDb21wbGV4TWFwcGVyXyA9IG5ldyBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIoZ2V0Q29udHJvbGxlcigpLCBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSk7Ci0gICAgcmV0dXJuIHhzZENvbXBsZXhNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyIGdldFhTREVsZW1lbnRNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZEVsZW1lbnRNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RFbGVtZW50TWFwcGVyXyA9IG5ldyBYU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RFbGVtZW50TWFwcGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNEQXR0cmlidXRlVXNlVG9GcmFnbWVudE1hcHBlciBnZXRYU0RBdHRyaWJ1dGVNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZEF0dHJpYnV0ZU1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZEF0dHJpYnV0ZU1hcHBlcl8gPSBuZXcgWFNEQXR0cmlidXRlVXNlVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICByZXR1cm4geHNkQXR0cmlidXRlTWFwcGVyXzsKLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNEUGFydGljbGVNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZFBhcnRpY2xlTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkUGFydGljbGVNYXBwZXJfID0gbmV3IFhTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICByZXR1cm4geHNkUGFydGljbGVNYXBwZXJfOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBjb25maWcgPSByZXNvbHZlWFNEQ29tcG9uZW50KGNvbmZpZyk7Ci0gICAgWFNEQ29tcG9uZW50IGNvbXBvbmVudCA9IGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoIWlzQ29tcG9uZW50UmVzb2x2YWJsZShjb21wb25lbnQpKQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICByZXR1cm4gZ2V0WFNERWxlbWVudE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKQotICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZU1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgIHJldHVybiBnZXRYU0RDb21wbGV4TWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpCi0gICAgICByZXR1cm4gZ2V0WFNEUGFydGljbGVNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZUNvbnRlbnQpCi0gICAgICByZXR1cm4gZ2V0WFNEUGFydGljbGVNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2UpCi0gICAgICByZXR1cm4gZ2V0WFNEQXR0cmlidXRlTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7CQotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjNjc5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNER3JvdXBBbGxGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RHcm91cENob2ljZVJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RHcm91cFNlcUZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9zaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RXaWxkY2FyZDsKLQotCi1wdWJsaWMgY2xhc3MgWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHB1YmxpYyBYU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIHdzZGxUb1hTRE1hcHBlcik7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIFhTRENvbXBvbmVudCBjb21wb25lbnQgPSBjb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgWFNEUGFydGljbGVDb250ZW50IHhzZFBhcnRpY2xlQ29udGVudDsKLSAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpCi0gICAgICB4c2RQYXJ0aWNsZUNvbnRlbnQgPSAoKFhTRFBhcnRpY2xlKWNvbXBvbmVudCkuZ2V0Q29udGVudCgpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlQ29udGVudCkKLSAgICAgIHhzZFBhcnRpY2xlQ29udGVudCA9IChYU0RQYXJ0aWNsZUNvbnRlbnQpY29tcG9uZW50OwotICAgIGVsc2UKLSAgICAgIHhzZFBhcnRpY2xlQ29udGVudCA9IG51bGw7Ci0gICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCAhPSBudWxsKSB7Ci0gICAgICBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cERlZmluaXRpb24pCi0gICAgICAgIHJldHVybiBnZXRYU0RNb2RlbEdyb3VwRGVmRnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSwgKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKXhzZFBhcnRpY2xlQ29udGVudCk7Ci0gICAgICBlbHNlIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKQotICAgICAgICByZXR1cm4gZ2V0WFNETW9kZWxHcm91cEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUsIChYU0RNb2RlbEdyb3VwKXhzZFBhcnRpY2xlQ29udGVudCk7Ci0gICAgICBlbHNlIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RXaWxkY2FyZCkKLSAgICAgICAgcmV0dXJuIGdldFhTRFdpbGRjYXJkRnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSwgKFhTRFdpbGRjYXJkKXhzZFBhcnRpY2xlQ29udGVudCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RNb2RlbEdyb3VwRGVmRnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiB4c2RNb2RlbEdyb3VwRGVmKSB7Ci0gICAgWFNETW9kZWxHcm91cERlZmluaXRpb24gcmVzb2x2ZWRYU0RNb2RlbEdyb3VwRGVmID0geHNkTW9kZWxHcm91cERlZjsKLSAgICBpZiAoeHNkTW9kZWxHcm91cERlZi5pc01vZGVsR3JvdXBEZWZpbml0aW9uUmVmZXJlbmNlKCkpCi0gICAgICByZXNvbHZlZFhTRE1vZGVsR3JvdXBEZWYgPSB4c2RNb2RlbEdyb3VwRGVmLmdldFJlc29sdmVkTW9kZWxHcm91cERlZmluaXRpb24oKTsKLSAgICBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXAgPSByZXNvbHZlZFhTRE1vZGVsR3JvdXBEZWYuZ2V0TW9kZWxHcm91cCgpOwotICAgIGlmICh4c2RNb2RlbEdyb3VwID09IG51bGwpCi0gICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRYU0RNb2RlbEdyb3VwRnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RNb2RlbEdyb3VwRnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBpbnQgbWluT2NjdXJzID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NSU5fT0NDVVJTOwotICAgIGludCBtYXhPY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01BWF9PQ0NVUlM7Ci0gICAgWFNEQ29uY3JldGVDb21wb25lbnQgY29uY3JldGVDb21wb25lbnQgPSB4c2RNb2RlbEdyb3VwLmdldENvbnRhaW5lcigpOwotICAgIGlmIChjb25jcmV0ZUNvbXBvbmVudCAhPSBudWxsICYmIGNvbmNyZXRlQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLSAgICAgIFhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKWNvbmNyZXRlQ29tcG9uZW50OwotICAgICAgaWYgKHBhcnRpY2xlLmlzU2V0TWluT2NjdXJzKCkpCi0gICAgICAgIG1pbk9jY3VycyA9IHBhcnRpY2xlLmdldE1pbk9jY3VycygpOwotICAgICAgaWYgKHBhcnRpY2xlLmlzU2V0TWF4T2NjdXJzKCkpCi0gICAgICAgIG1heE9jY3VycyA9IHBhcnRpY2xlLmdldE1heE9jY3VycygpOwotICAgIH0KLSAgICBjb25maWcuc2V0TWluT2NjdXJzKG1pbk9jY3Vycyk7Ci0gICAgY29uZmlnLnNldE1heE9jY3VycyhtYXhPY2N1cnMpOwotICAgIAotICAgIHN3aXRjaCAoeHNkTW9kZWxHcm91cC5nZXRDb21wb3NpdG9yKCkuZ2V0VmFsdWUoKSkgewotICAgICAgY2FzZSBYU0RDb21wb3NpdG9yLlNFUVVFTkNFOiAKLSAgICAgICAgaWYgKG1pbk9jY3VycyA9PSBtYXhPY2N1cnMpCi0gICAgICAgICAgcmV0dXJuIG5ldyBYU0RHcm91cFNlcUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgeHNkTW9kZWxHcm91cCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gbmV3IFhTREdyb3VwU2VxUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCksIHhzZE1vZGVsR3JvdXApOwotICAgICAgY2FzZSBYU0RDb21wb3NpdG9yLkNIT0lDRToKLSAgICAgICAgaWYgKG1pbk9jY3VycyA9PSBtYXhPY2N1cnMpCi0gICAgICAgICAgcmV0dXJuIG5ldyBYU0RHcm91cENob2ljZUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgeHNkTW9kZWxHcm91cCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gbmV3IFhTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCksIHhzZE1vZGVsR3JvdXApOwotICAgICAgY2FzZSBYU0RDb21wb3NpdG9yLkFMTDoKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RHcm91cEFsbEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgeHNkTW9kZWxHcm91cCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRFdpbGRjYXJkRnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RXaWxkY2FyZCB4c2RQYXJ0aWNsZUNvbnRlbnQpIHsKLSAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkxZDE5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQRW5jQXJyYXlGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlNPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlR3JvdXBDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciBleHRlbmRzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwcml2YXRlIFhTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgeHNkTGl0ZXJhbE1hcHBlcl87Ci0gIHByaXZhdGUgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyIHhzZENvbXBsZXhNYXBwZXJfOwotCi0gIHB1YmxpYyBYU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICAgIHhzZExpdGVyYWxNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RDb21wbGV4TWFwcGVyXyA9IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIFhTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgZ2V0WFNETGl0ZXJhbE1hcHBlcigpIHsKLSAgICBpZiAoeHNkTGl0ZXJhbE1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZExpdGVyYWxNYXBwZXJfID0gbmV3IFhTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIoZ2V0Q29udHJvbGxlcigpLCBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSk7Ci0gICAgcmV0dXJuIHhzZExpdGVyYWxNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNEQ29tcGxleE1hcHBlcigpIHsKLSAgICBpZiAoeHNkQ29tcGxleE1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZENvbXBsZXhNYXBwZXJfID0gbmV3IFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICAgcmV0dXJuIHhzZENvbXBsZXhNYXBwZXJfOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBpZiAoY29uZmlnLmdldElzV1NETFBhcnQoKSkgewotICAgICAgSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudCB3cmFwcGVyRnJhZ21lbnQgPSBuZXcgU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50KGlkLCBuYW1lLCBudWxsKTsKLSAgICAgIFN0cmluZyBkZWxlZ2F0aW9uRnJhZ0lkID0gd3JhcHBlckZyYWdtZW50LmdlbklEKCk7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gZ2V0RnJhZ21lbnREZWxlZ2F0ZShjb25maWcsIGRlbGVnYXRpb25GcmFnSWQsIG5hbWUpOwotICAgICAgd3JhcHBlckZyYWdtZW50LnNldFhTRERlbGVnYXRpb25GcmFnbWVudChkZWxlZ2F0aW9uRnJhZ21lbnQpOwotICAgICAgZ2V0Q29udHJvbGxlcigpLmFkZFRvQ2FjaGUoZGVsZWdhdGlvbkZyYWdJZCwgZGVsZWdhdGlvbkZyYWdtZW50KTsKLSAgICAgIHJldHVybiB3cmFwcGVyRnJhZ21lbnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRGcmFnbWVudERlbGVnYXRlKGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudERlbGVnYXRlKFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGNvbmZpZyA9IHJlc29sdmVYU0RDb21wb25lbnQoY29uZmlnKTsKLSAgICBYU0RDb21wb25lbnQgY29tcG9uZW50ID0gY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKGNvbXBvbmVudCkpCi0gICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotICAgICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiljb21wb25lbnQ7Ci0gICAgICBpZiAoWFNEVHlwZURlZmluaXRpb25VdGlsLmlzU29hcEVuY0FycmF5KGNvbXBsZXhUeXBlKSkKLSAgICAgICAgcmV0dXJuIGdldFNPQVBFbmNBcnJheUZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUsIGNvbXBsZXhUeXBlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdldFhTRENvbXBsZXhNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTRExpdGVyYWxNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFNPQVBFbmNBcnJheUZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlKSB7Ci0gICAgRUxpc3QgeHNkQXR0ckNvbnRlbnRzID0gY29tcGxleFR5cGUuZ2V0QXR0cmlidXRlQ29udGVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHhzZEF0dHJDb250ZW50cy5zaXplKCk7IGkrKykgewotICAgICAgU3RyaW5nIHNvYXBFbmNBcnJheVR5cGVOYW1lc3BhY2VVUkkgPSBudWxsOwotICAgICAgU3RyaW5nIHNvYXBFbmNBcnJheVR5cGVMb2NhbE5hbWUgPSBudWxsOwotICAgICAgaW50IHNvYXBFbmNBcnJheURpbWVuc2lvbiA9IDA7Ci0gICAgICBYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQgeHNkQXR0ckNvbnRlbnQgPSAoWFNEQXR0cmlidXRlR3JvdXBDb250ZW50KXhzZEF0dHJDb250ZW50cy5nZXQoaSk7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSB4c2RBdHRyQ29udGVudC5nZXRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmcgYXJyYXlUeXBlQXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTlMoRnJhZ21lbnRDb25zdGFudHMuVVJJX1dTREwsIEZyYWdtZW50Q29uc3RhbnRzLlFOQU1FX0xPQ0FMX05BTUVfQVJSQVlfVFlQRSk7Ci0gICAgICBpZiAoYXJyYXlUeXBlQXR0ciAhPSBudWxsICYmIGFycmF5VHlwZUF0dHIubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIGludCBjb2xvbiA9IGFycmF5VHlwZUF0dHIuaW5kZXhPZihGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgICAgIFN0cmluZyBuc1ByZWZpeCA9IChjb2xvbiA+IDApID8gYXJyYXlUeXBlQXR0ci5zdWJzdHJpbmcoMCwgY29sb24pIDogbnVsbDsKLSAgICAgICAgc29hcEVuY0FycmF5VHlwZU5hbWVzcGFjZVVSSSA9IChTdHJpbmcpeHNkQXR0ckNvbnRlbnQuZ2V0U2NoZW1hKCkuZ2V0UU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcCgpLmdldChuc1ByZWZpeCk7Ci0gICAgICAgIGludCBkaW1lbnNpb25JbmRleCA9IGFycmF5VHlwZUF0dHIuaW5kZXhPZihGcmFnbWVudENvbnN0YW50cy5MRUZUX1NRVUFSRV9CUkFDS0VUKTsKLSAgICAgICAgc29hcEVuY0FycmF5VHlwZUxvY2FsTmFtZSA9IGFycmF5VHlwZUF0dHIuc3Vic3RyaW5nKGNvbG9uICsgMSwgZGltZW5zaW9uSW5kZXgpOwotICAgICAgICBTdHJpbmcgZGltZW5zaW9uU3RyaW5nID0gYXJyYXlUeXBlQXR0ci5zdWJzdHJpbmcoZGltZW5zaW9uSW5kZXgsIGFycmF5VHlwZUF0dHIubGVuZ3RoKCkpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGRpbWVuc2lvblN0cmluZy5sZW5ndGgoKSAtIDE7IGorKykgewotICAgICAgICAgIGlmIChkaW1lbnNpb25TdHJpbmcuY2hhckF0KGopID09IEZyYWdtZW50Q29uc3RhbnRzLkxFRlRfU1FVQVJFX0JSQUNLRVQuY2hhckF0KDApICYmIGRpbWVuc2lvblN0cmluZy5jaGFyQXQoaiArIDEpID09IEZyYWdtZW50Q29uc3RhbnRzLlJJR0hUX1NRVUFSRV9CUkFDS0VULmNoYXJBdCgwKSkgewotICAgICAgICAgICAgc29hcEVuY0FycmF5RGltZW5zaW9uKys7Ci0gICAgICAgICAgICBqKys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc29hcEVuY0FycmF5RGltZW5zaW9uID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHNvYXBFbmNBcnJheVR5cGVOYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiBzb2FwRW5jQXJyYXlUeXBlTG9jYWxOYW1lICE9IG51bGwgJiYgc29hcEVuY0FycmF5RGltZW5zaW9uID09IDEpIHsKLSAgICAgICAgWFNEQ29tcG9uZW50IHNvYXBFbmNBcnJheVR5cGUgPSBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKS5nZXRYU0RUeXBlRnJvbVNjaGVtYShzb2FwRW5jQXJyYXlUeXBlTmFtZXNwYWNlVVJJLCBzb2FwRW5jQXJyYXlUeXBlTG9jYWxOYW1lLCBmYWxzZSk7Ci0gICAgICAgIGlmIChzb2FwRW5jQXJyYXlUeXBlICE9IG51bGwgJiYgc29hcEVuY0FycmF5VHlwZSBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgICAgICAgWFNETW9kZWxHcm91cCBzZXF1ZW5jZSA9IG51bGw7Ci0gICAgICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgICAgICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgIT0gbnVsbCAmJiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpKSB7Ci0gICAgICAgICAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgeHNkUGFydGljbGVDb250ZW50ID0gKChYU0RQYXJ0aWNsZSljb21wbGV4VHlwZUNvbnRlbnQpLmdldENvbnRlbnQoKTsKLSAgICAgICAgICAgIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKQotICAgICAgICAgICAgICBzZXF1ZW5jZSA9IChYU0RNb2RlbEdyb3VwKXhzZFBhcnRpY2xlQ29udGVudDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgSVNPQVBFbmNBcnJheUZyYWdtZW50IGZyYWc7Ci0gICAgICAgICAgaWYgKGNvbmZpZy5nZXRNaW5PY2N1cnMoKSA9PSBjb25maWcuZ2V0TWF4T2NjdXJzKCkpCi0gICAgICAgICAgICBmcmFnID0gbmV3IFNPQVBFbmNBcnJheUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgc2VxdWVuY2UpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyYWcgPSBuZXcgU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCksIHNlcXVlbmNlKTsKLSAgICAgICAgICBmcmFnLnNldFhTRFR5cGVEZWZpbml0aW9uKChYU0RUeXBlRGVmaW5pdGlvbilzb2FwRW5jQXJyYXlUeXBlKTsKLSAgICAgICAgICByZXR1cm4gZnJhZzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZ2V0WFNEQ29tcGxleE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk3ZjI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUxpc3RGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLk9wdGlvblZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLlhTRFR5cGVEZWZpbml0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVmFyaWV0eTsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKHNpbXBsZVR5cGUgIT0gbnVsbCAmJiBzaW1wbGVUeXBlLmdldFZhcmlldHkoKSAhPSBudWxsKSB7Ci0gICAgICBzd2l0Y2ggKHNpbXBsZVR5cGUuZ2V0VmFyaWV0eSgpLmdldFZhbHVlKCkpIHsKLSAgICAgICAgY2FzZSBYU0RWYXJpZXR5LkFUT01JQzoKLSAgICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlQXRvbWljRnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgICAgIGNhc2UgWFNEVmFyaWV0eS5MSVNUOgotICAgICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVMaXN0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgICAgIGNhc2UgWFNEVmFyaWV0eS5VTklPTjoKLSAgICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlVW5pb25GcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0WFNEU2ltcGxlQXRvbWljRnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgYm9vbGVhbiBpc0ZpeGVkID0gKChjb25maWcuZ2V0TWluT2NjdXJzKCkgPT0gY29uZmlnLmdldE1heE9jY3VycygpKSAmJiBjb25maWcuZ2V0TWF4T2NjdXJzKCkgIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEKTsKLSAgICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB4c2RTaW1wbGVUeXBlRGVmID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB4c2RCYXNlU2ltcGxlVHlwZURlZiA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHhzZFNpbXBsZVR5cGVEZWYpOwotICAgIFN0cmluZyBiYXNlU2ltcGxlVHlwZURlZk5TID0gbnVsbDsKLSAgICBTdHJpbmcgYmFzZVNpbXBsZVR5cGVEZWZOYW1lID0gbnVsbDsKLSAgICBpZiAoeHNkQmFzZVNpbXBsZVR5cGVEZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiYXNlU2ltcGxlVHlwZURlZk5TID0geHNkQmFzZVNpbXBsZVR5cGVEZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBiYXNlU2ltcGxlVHlwZURlZk5hbWUgPSB4c2RCYXNlU2ltcGxlVHlwZURlZi5nZXROYW1lKCk7Ci0gICAgfQotICAgIGJvb2xlYW4gaXNFbnVtID0gaXNTaW1wbGVUeXBlRW51bWVyYXRpb24oeHNkU2ltcGxlVHlwZURlZik7Ci0gICAgaWYgKEZyYWdtZW50Q29uc3RhbnRzLlVSSV9YU0QuZXF1YWxzKGJhc2VTaW1wbGVUeXBlRGVmTlMpKQotICAgIHsKLSAgICAgIGlmIChiYXNlU2ltcGxlVHlwZURlZk5hbWUuZXF1YWxzKCJkYXRlIikpCi0gICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVEYXRlVGltZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEUseHNkU2ltcGxlVHlwZURlZixpc0VudW0saXNGaXhlZCk7Ci0gICAgICBlbHNlIGlmIChiYXNlU2ltcGxlVHlwZURlZk5hbWUuZXF1YWxzKCJkYXRlVGltZSIpKQotICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlRGF0ZVRpbWVGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSx4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsKLSAgICAgIGVsc2UgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImdZZWFyTW9udGgiKSkKLSAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZURhdGVUaW1lRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR1lFQVJNT05USCx4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsKLSAgICAgIGVsc2UgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImdNb250aERheSIpKQotICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlRGF0ZVRpbWVGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVkseHNkU2ltcGxlVHlwZURlZixpc0VudW0saXNGaXhlZCk7Ci0gICAgICBlbHNlIGlmIChiYXNlU2ltcGxlVHlwZURlZk5hbWUuZXF1YWxzKCJnRGF5IikpCi0gICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVHRGF5RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgeHNkU2ltcGxlVHlwZURlZixpc0VudW0saXNGaXhlZCk7ICAgICAgICAKLSAgICAgIGVsc2UgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImJvb2xlYW4iKSkKLSAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZUJvb2xlYW5GcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCB4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNFbnVtKQotICAgIHsKLSAgICAgIGlmIChpc0ZpeGVkKQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCB4c2RTaW1wbGVUeXBlRGVmLmdldEVudW1lcmF0aW9uRmFjZXRzKCkpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZFNpbXBsZVR5cGVEZWYuZ2V0RW51bWVyYXRpb25GYWNldHMoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoaXNGaXhlZCkKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZ2V0WFNEU2ltcGxlRGF0ZVRpbWVGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIGludCBjYWxlbmRhclR5cGUsWFNEU2ltcGxlVHlwZURlZmluaXRpb24geHNkRGF0ZVRpbWVUeXBlLGJvb2xlYW4gaXNFbnVtLGJvb2xlYW4gaXNGaXhlZCkKLSAgewotICAgIGlmIChpc0VudW0pCi0gICAgewotICAgICAgaWYgKGlzRml4ZWQpCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZERhdGVUaW1lVHlwZS5nZXRFbnVtZXJhdGlvbkZhY2V0cygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCB4c2REYXRlVGltZVR5cGUuZ2V0RW51bWVyYXRpb25GYWNldHMoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoaXNGaXhlZCkKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGNhbGVuZGFyVHlwZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGNhbGVuZGFyVHlwZSk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IGdldFhTRFNpbXBsZUdEYXlGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHhzZERhdGVUaW1lVHlwZSxib29sZWFuIGlzRW51bSxib29sZWFuIGlzRml4ZWQpCi0gIHsKLSAgICBpZiAoaXNFbnVtKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgT3B0aW9uVmVjdG9yIG9wdGlvblZlY3RvciA9IG5ldyBPcHRpb25WZWN0b3IoKTsKLSAgICBTdHJpbmdCdWZmZXIgdmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaT0xO2k8PTMxO2krKykKLSAgICB7Ci0gICAgICB2YWx1ZS5zZXRMZW5ndGgoMCk7Ci0gICAgICB2YWx1ZS5hcHBlbmQoIi0tLSIpOwotICAgICAgaWYgKGk8MTApCi0gICAgICAgIHZhbHVlLmFwcGVuZCgwKTsKLSAgICAgIHZhbHVlLmFwcGVuZChpKTsKLSAgICAgIG9wdGlvblZlY3Rvci5hZGRPcHRpb24oU3RyaW5nLnZhbHVlT2YoaSksdmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGlmIChpc0ZpeGVkKQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgb3B0aW9uVmVjdG9yKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIG9wdGlvblZlY3Rvcik7Ci0gIH0KLQotICBwcml2YXRlIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IGdldFhTRFNpbXBsZUJvb2xlYW5GcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHhzZEJvb2xlYW5UeXBlLGJvb2xlYW4gaXNFbnVtLGJvb2xlYW4gaXNGaXhlZCkKLSAgewotICAgIGlmIChpc0VudW0pCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBPcHRpb25WZWN0b3Igb3B0aW9uVmVjdG9yID0gbmV3IE9wdGlvblZlY3RvcigpOwotICAgIG9wdGlvblZlY3Rvci5hZGRPcHRpb24oInRydWUiLCJ0cnVlIik7Ci0gICAgb3B0aW9uVmVjdG9yLmFkZE9wdGlvbigiZmFsc2UiLCJmYWxzZSIpOwotICAgIGlmIChpc0ZpeGVkKQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgb3B0aW9uVmVjdG9yKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIG9wdGlvblZlY3Rvcik7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RTaW1wbGVMaXN0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgCi0gICAgYm9vbGVhbiBpc0ZpeGVkID0gKChjb25maWcuZ2V0TWluT2NjdXJzKCkgPT0gY29uZmlnLmdldE1heE9jY3VycygpKSAmJiBjb25maWcuZ2V0TWF4T2NjdXJzKCkgIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEKTsKLSAgICBpZiAoaXNGaXhlZCkKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0WFNEU2ltcGxlVW5pb25GcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICAKLSAgICBib29sZWFuIGlzRml4ZWQgPSAoKGNvbmZpZy5nZXRNaW5PY2N1cnMoKSA9PSBjb25maWcuZ2V0TWF4T2NjdXJzKCkpICYmIGNvbmZpZy5nZXRNYXhPY2N1cnMoKSAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQpOwotICAgIGlmIChpc0ZpeGVkKQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1NpbXBsZVR5cGVFbnVtZXJhdGlvbihYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlKSB7Ci0gICAgRUxpc3QgZSA9IHNpbXBsZVR5cGUuZ2V0RW51bWVyYXRpb25GYWNldHMoKTsKLSAgICByZXR1cm4gKGUgIT0gbnVsbCAmJiBlLnNpemUoKSA+IDApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzMyNTBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB7Ci0gIHByaXZhdGUgWFNEQ29tcG9uZW50IGNvbXBvbmVudF87Ci0gIHByaXZhdGUgaW50IG1pbk9jY3Vyc187Ci0gIHByaXZhdGUgaW50IG1heE9jY3Vyc187Ci0gIHByaXZhdGUgaW50IHN0eWxlXzsKLSAgcHJpdmF0ZSBpbnQgcGFydEVuY29kaW5nXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzV1NETFBhcnRfOwotICBwcml2YXRlIFN0cmluZyB3c2RsUGFydE5hbWVfOwotCi0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpIHsKLSAgICBjb21wb25lbnRfID0gbnVsbDsKLSAgICBtaW5PY2N1cnNfID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NSU5fT0NDVVJTOwotICAgIG1heE9jY3Vyc18gPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01BWF9PQ0NVUlM7Ci0gICAgc3R5bGVfID0gRnJhZ21lbnRDb25zdGFudHMuU1RZTEVfRE9DVU1FTlQ7Ci0gICAgcGFydEVuY29kaW5nXyA9IEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX0xJVEVSQUw7Ci0gICAgaXNXU0RMUGFydF8gPSBmYWxzZTsKLSAgICB3c2RsUGFydE5hbWVfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRENvbXBvbmVudChYU0RDb21wb25lbnQgY29tcG9uZW50KSB7Ci0gICAgY29tcG9uZW50XyA9IGNvbXBvbmVudDsKLSAgfQotCi0gIHB1YmxpYyBYU0RDb21wb25lbnQgZ2V0WFNEQ29tcG9uZW50KCkgewotICAgIHJldHVybiBjb21wb25lbnRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TWluT2NjdXJzKGludCBtaW5PY2N1cnMpIHsKLSAgICBtaW5PY2N1cnNfID0gbWluT2NjdXJzOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRNaW5PY2N1cnMoKSB7Ci0gICAgcmV0dXJuIG1pbk9jY3Vyc187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNYXhPY2N1cnMoaW50IG1heE9jY3VycykgewotICAgIG1heE9jY3Vyc18gPSBtYXhPY2N1cnM7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE1heE9jY3VycygpIHsKLSAgICByZXR1cm4gbWF4T2NjdXJzXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U3R5bGUoaW50IHN0eWxlKSB7Ci0gICAgc3R5bGVfID0gc3R5bGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0U3R5bGUoKSB7Ci0gICAgcmV0dXJuIHN0eWxlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcnRFbmNvZGluZyhpbnQgcGFydEVuY29kaW5nKSB7Ci0gICAgcGFydEVuY29kaW5nXyA9IHBhcnRFbmNvZGluZzsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0UGFydEVuY29kaW5nKCkgewotICAgIHJldHVybiBwYXJ0RW5jb2RpbmdfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SXNXU0RMUGFydChib29sZWFuIGlzV1NETFBhcnQpIHsKLSAgICBpc1dTRExQYXJ0XyA9IGlzV1NETFBhcnQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRJc1dTRExQYXJ0KCkgewotICAgIHJldHVybiBpc1dTRExQYXJ0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V1NETFBhcnROYW1lKFN0cmluZyB3c2RsUGFydE5hbWUpIHsKLSAgICB3c2RsUGFydE5hbWVfID0gd3NkbFBhcnROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpIHsKLSAgICByZXR1cm4gd3NkbFBhcnROYW1lXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRDb250cm9sbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudENvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjNTdkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciB7Ci0gIHByaXZhdGUgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcl87Ci0gIHByaXZhdGUgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciB4c2RMaXRlcmFsTWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIHhzZFNvYXBNYXBwZXJfOwotICBwcml2YXRlIEhhc2h0YWJsZSB4c2RUb0ZyYWdtZW50Q2FjaGVfOwotCi0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpIHsKLSAgICB3c2RsVG9YU0RNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RMaXRlcmFsTWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkU29hcE1hcHBlcl8gPSBudWxsOwotICAgIHhzZFRvRnJhZ21lbnRDYWNoZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHdzZGxUb1hTRE1hcHBlcl8gPSB3c2RsVG9YU0RNYXBwZXI7Ci0gIH0KLQotICBwdWJsaWMgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpIHsKLSAgICByZXR1cm4gd3NkbFRvWFNETWFwcGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciBnZXRYU0RMaXRlcmFsTWFwcGVyKCkgewotICAgIGlmICh4c2RMaXRlcmFsTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkTGl0ZXJhbE1hcHBlcl8gPSBuZXcgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlcih0aGlzLCB3c2RsVG9YU0RNYXBwZXJfKTsKLSAgICByZXR1cm4geHNkTGl0ZXJhbE1hcHBlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgZ2V0WFNEU09BUE1hcHBlcigpIHsKLSAgICBpZiAoeHNkU29hcE1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZFNvYXBNYXBwZXJfID0gbmV3IFhTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIodGhpcywgd3NkbFRvWFNETWFwcGVyXyk7Ci0gICAgcmV0dXJuIHhzZFNvYXBNYXBwZXJfOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldENhY2hlZEZyYWdtZW50KGlkKTsKLSAgICBpZiAoZnJhZyAhPSBudWxsKQotICAgICAgcmV0dXJuIGZyYWc7Ci0gICAgZnJhZyA9IGdldE5ld0ZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGlmIChmcmFnICE9IG51bGwpCi0gICAgICBhZGRUb0NhY2hlKGlkLCBmcmFnKTsKLSAgICByZXR1cm4gZnJhZzsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0Q2FjaGVkRnJhZ21lbnQoU3RyaW5nIGlkKSB7Ci0gICAgcmV0dXJuIChJWFNERnJhZ21lbnQpeHNkVG9GcmFnbWVudENhY2hlXy5nZXQoaWQpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXROZXdGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBzd2l0Y2ggKGNvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSkKLSAgICB7Ci0gICAgICBjYXNlIEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX1NPQVA6Ci0gICAgICAgIHJldHVybiBnZXRYU0RTT0FQTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLGlkLG5hbWUpOyAgICAgIAotICAgICAgY2FzZSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMOgotICAgICAgY2FzZSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19VUkw6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZ2V0WFNETGl0ZXJhbE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZyxpZCxuYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRUb0NhY2hlKFN0cmluZyBpZCwgSVhTREZyYWdtZW50IGZyYWcpIHsKLSAgICB4c2RUb0ZyYWdtZW50Q2FjaGVfLnB1dChpZCwgZnJhZyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGcm9tQ2FjaGUoU3RyaW5nIGlkKSB7Ci0gICAgeHNkVG9GcmFnbWVudENhY2hlXy5yZW1vdmUoaWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZW1wdHlDYWNoZSgpIHsKLSAgICB4c2RUb0ZyYWdtZW50Q2FjaGVfLmNsZWFyKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzY0ZjZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlZmF1bHRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREVtcHR5RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHByaXZhdGUgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByaXZhdGUgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcl87Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgICB3c2RsVG9YU0RNYXBwZXJfID0gd3NkbFRvWFNETWFwcGVyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q29udHJvbGxlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICB9Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGdldENvbnRyb2xsZXIoKSB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICB3c2RsVG9YU0RNYXBwZXJfID0gd3NkbFRvWFNETWFwcGVyOwotICB9Ci0KLSAgcHVibGljIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSB7Ci0gICAgcmV0dXJuIHdzZGxUb1hTRE1hcHBlcl87Ci0gIH0KLQotICBwcm90ZWN0ZWQgSVhTREZyYWdtZW50IGdldFhTRERlZmF1bHRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICByZXR1cm4gbmV3IFhTRERlZmF1bHRGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnKTsKLSAgfQotCi0gIHByb3RlY3RlZCBJWFNERnJhZ21lbnQgZ2V0WFNERW1wdHlGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICByZXR1cm4gbmV3IFhTREVtcHR5RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSk7Ci0KLSAgcHJvdGVjdGVkIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHJlc29sdmVYU0RDb21wb25lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgWFNEQ29tcG9uZW50IGNvbXBvbmVudCA9IGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoIWlzQ29tcG9uZW50UmVzb2x2YWJsZShjb21wb25lbnQpICYmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0ROYW1lZENvbXBvbmVudCkpCi0gICAgewotICAgICAgWFNEQ29tcG9uZW50IHJlc29sdmVkQ29tcG9uZW50ID0gZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkucmVzb2x2ZVhTRE5hbWVkQ29tcG9uZW50KChYU0ROYW1lZENvbXBvbmVudCljb21wb25lbnQpOwotICAgICAgaWYgKHJlc29sdmVkQ29tcG9uZW50ICE9IG51bGwpCi0gICAgICAgIGNvbmZpZy5zZXRYU0RDb21wb25lbnQocmVzb2x2ZWRDb21wb25lbnQpOwotICAgIH0KLSAgICByZXR1cm4gY29uZmlnOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNDb21wb25lbnRSZXNvbHZhYmxlKFhTRENvbXBvbmVudCBjb21wb25lbnQpCi0gIHsKLSAgICBpZiAoY29tcG9uZW50ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGNvbXBvbmVudC5nZXRTY2hlbWEoKTsKLSAgICBpZiAoc2NoZW1hID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1ZTMyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JRnJhZ21lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGcmFnbWVudCBpbXBsZW1lbnRzIElGcmFnbWVudCB7Ci0gIHByaXZhdGUgU3RyaW5nIGlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHBhcmFtc187Ci0KLSAgcHVibGljIEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBpZF8gPSBpZDsKLSAgICBuYW1lXyA9IG5hbWU7Ci0gICAgcGFyYW1zXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElEKFN0cmluZyBpZCkgewotICAgIGlkXyA9IGlkOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJRCgpIHsKLSAgICByZXR1cm4gaWRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotICAgIG5hbWVfID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gbmFtZV87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCkpOwotICAgIHNldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpLCBwYXJhbXMpOwotICAgIHJldHVybiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgU3RyaW5nW10gcGFyYW1zKSB7Ci0gICAgaWYgKHBhcmFtcyA9PSBudWxsKQotICAgICAgcGFyYW1zXy5yZW1vdmUocGFyYW1LZXkpOwotICAgIGVsc2UKLSAgICAgIHBhcmFtc18ucHV0KHBhcmFtS2V5LCBwYXJhbXMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgVmVjdG9yIHBhcmFtcykgewotICAgIGlmIChwYXJhbXMgPT0gbnVsbCkKLSAgICAgIHBhcmFtc18ucmVtb3ZlKHBhcmFtS2V5KTsKLSAgICBlbHNlIHsKLSAgICAgIFN0cmluZ1tdIHBhcmFtc0FycmF5ID0gbmV3IFN0cmluZ1twYXJhbXMuc2l6ZSgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgcGFyYW1zQXJyYXlbaV0gPSBwYXJhbXMuZ2V0KGkpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgICBzZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXksIHBhcmFtc0FycmF5KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotICAgIHJldHVybiAoU3RyaW5nW10pcGFyYW1zXy5nZXQocGFyYW1LZXkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwgJiYgcGFyYW1JbmRleCA8IHBhcmFtcy5sZW5ndGgpCi0gICAgICByZXR1cm4gcGFyYW1zW3BhcmFtSW5kZXhdOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSB7Ci0gICAgRW51bWVyYXRpb24gcGFyYW1LZXlzID0gcGFyYW1zXy5rZXlzKCk7Ci0gICAgd2hpbGUgKHBhcmFtS2V5cyAhPSBudWxsICYmIHBhcmFtS2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgaWYgKCF2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcygoU3RyaW5nKXBhcmFtS2V5cy5uZXh0RWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IHBhcmFtcyAhPSBudWxsICYmIGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICghdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgaSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5Rml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheUZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MWZlODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5Rml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBTT0FQRW5jQXJyYXlGaXhGcmFnbWVudCBleHRlbmRzIFNPQVBFbmNBcnJheUZyYWdtZW50IHsKLSAgcHVibGljIFNPQVBFbmNBcnJheUZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5Rml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjAzZGQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JU09BUEVuY0FycmF5RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU09BUEVuY0FycmF5RnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cFNlcUZyYWdtZW50IGltcGxlbWVudHMgSVNPQVBFbmNBcnJheUZyYWdtZW50Ci17Ci0gIHB1YmxpYyBTT0FQRW5jQXJyYXlGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICByZW1vdmVHcm91cElEcygpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBpbnRlcm5hbEVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHksIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBJWFNERnJhZ21lbnQgc29hcEVuY0FycmF5VHlwZUZyYWcgPSAoZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoY3JlYXRlU09BUEVuY0FycmF5SW5zdGFuY2UoKSkpWzBdOwotICAgICAgVmVjdG9yIGluc3RhbmNlc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIE5vZGVMaXN0IG5sID0gaW5zdGFuY2VEb2N1bWVudHNDb3B5W2ldLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShqKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIGluc3RhbmNlc1ZlY3Rvci5hZGQobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZXNWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgIGluc3RhbmNlc1ZlY3Rvci5jb3B5SW50byhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICAgIGlmICghc29hcEVuY0FycmF5VHlwZUZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKHNldEVsZW1lbnRzVGFnTmFtZShjaGlsZEluc3RhbmNlRG9jdW1lbnRzLCBzb2FwRW5jQXJyYXlUeXBlRnJhZy5nZXROYW1lKCkpKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykKLSAgewotICAgIFN0cmluZ1tdIGdyb3VwSURzID0gZ2V0R3JvdXBJRHMoKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudCA9IG5ldyBFbGVtZW50W2dyb3VwSURzLmxlbmd0aF07Ci0gICAgU3RyaW5nQnVmZmVyIGF0dHJOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZ0J1ZmZlciBhdHRyVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0vLyAgICBTdHJpbmdCdWZmZXIgYXR0ckFycmF5VHlwZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0vLyAgICBTdHJpbmdCdWZmZXIgYXR0ckFycmF5VHlwZVZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpbnQgbnVtSW5zdGFuY2VzID0gMDsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRbaV0gPSBkb2MuY3JlYXRlRWxlbWVudChnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSkpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWdtZW50ID0gKGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzW2ldKSlbMF07Ci0gICAgICBFbGVtZW50W10gZnJhZ21lbnRJbnN0YW5jZURvY3VtZW50cyA9IGZyYWdtZW50Lmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZnJhZ21lbnRJbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGZyYWdtZW50SW5zdGFuY2VEb2N1bWVudHNbal0gIT0gbnVsbCkKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50W2ldLmFwcGVuZENoaWxkKGZyYWdtZW50SW5zdGFuY2VEb2N1bWVudHNbal0pOwotICAgICAgICBudW1JbnN0YW5jZXMrKzsKLSAgICAgIH0KLSAgICAgIFN0cmluZyBzb2FwVVJJID0gRnJhZ21lbnRDb25zdGFudHMuVVJJX1NPQVA7Ci0gICAgICBTdHJpbmcgc29hcFByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoc29hcFVSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgU3RyaW5nIHNvYXBFbmNBcnJheVR5cGVVUkkgPSBnZXRYU0RUeXBlRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgU3RyaW5nIHNvYXBFbmNBcnJheVR5cGVQcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKHNvYXBFbmNBcnJheVR5cGVVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgIC8vIFNldCB0aGUgYXJyYXlUeXBlIGF0dHJpYnV0ZQotICAgICAgYXR0ck5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgYXR0ck5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgYXR0ck5hbWUuYXBwZW5kKHNvYXBQcmVmaXgpOwotICAgICAgYXR0ck5hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgIGF0dHJOYW1lLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5TT0FQX0VOQ19BUlJBWV9UWVBFKTsKLSAgICAgIGF0dHJWYWx1ZS5zZXRMZW5ndGgoMCk7Ci0gICAgICBhdHRyVmFsdWUuYXBwZW5kKHNvYXBFbmNBcnJheVR5cGVQcmVmaXgpOwotICAgICAgYXR0clZhbHVlLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgICBhdHRyVmFsdWUuYXBwZW5kKGdldFhTRFR5cGVEZWZpbml0aW9uKCkuZ2V0TmFtZSgpKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuTEVGVF9TUVVBUkVfQlJBQ0tFVCk7Ci0gICAgICBhdHRyVmFsdWUuYXBwZW5kKG51bUluc3RhbmNlcyk7Ci0gICAgICBhdHRyVmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlJJR0hUX1NRVUFSRV9CUkFDS0VUKTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLnRvU3RyaW5nKCksIGF0dHJWYWx1ZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgaWYgKGdlblhTSVR5cGUpCi0gICAgewotLy8JICBUT0RPOiBVc2VkIHRvIGNhbGwgdGhlIHBsdWdpbidzIGlnbm9yZVNjaGVtYUZvclNPQVBBcnJheXMoKW1ldGhvZC4KLQkgIGJvb2xlYW4gaWdub3JlU2NoZW1hRm9yU09BUEFycmF5cyA9IHRydWU7Ci0gICAgICBpZiAoaWdub3JlU2NoZW1hRm9yU09BUEFycmF5cykKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50Lmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHhzaVVSSSA9IEZyYWdtZW50Q29uc3RhbnRzLlVSSV9YU0k7Ci0gICAgICAgICAgU3RyaW5nIHhzaVByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoeHNpVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgICAgU3RyaW5nIHhzaVR5cGVVUkkgPSBGcmFnbWVudENvbnN0YW50cy5VUklfU09BUDsKLSAgICAgICAgICBTdHJpbmcgeHNpVHlwZVByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoeHNpVHlwZVVSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgICAgIGF0dHJOYW1lLnNldExlbmd0aCgwKTsKLSAgICAgICAgICBhdHRyTmFtZS5hcHBlbmQoeHNpUHJlZml4KS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5YU0lfVFlQRSk7Ci0gICAgICAgICAgYXR0clZhbHVlLnNldExlbmd0aCgwKTsKLSAgICAgICAgICBhdHRyVmFsdWUuYXBwZW5kKHhzaVR5cGVQcmVmaXgpLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgICAgICAgYXR0clZhbHVlLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5RTkFNRV9MT0NBTF9OQU1FX0FSUkFZKTsKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50W2ldLnNldEF0dHJpYnV0ZShhdHRyTmFtZS50b1N0cmluZygpLCBhdHRyVmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGFkZFhTSVR5cGUoaW5zdGFuY2VEb2N1bWVudCwgbmFtZXNwYWNlVGFibGUpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlU09BUEVuY0FycmF5SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGdldFhTRFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgZ3JvdXBJRCA9IGdlbklEKCk7Ci0gICAgICBTdHJpbmdbXSBncm91cE1lbWJlcklEID0ge2dlbklEKCl9OwotICAgICAgaW50IG1pbk9jY3VycyA9IDA7Ci0gICAgICBpbnQgbWF4T2NjdXJzID0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEOwotICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsID0gbnVsbDsKLSAgICAgIGlmIChnZXRYU0RNb2RlbEdyb3VwKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgWFNEUGFydGljbGUgZ3JvdXBPd25lciA9IChYU0RQYXJ0aWNsZSlnZXRYU0RNb2RlbEdyb3VwKCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgIGludCBncm91cE1pbiA9IGdyb3VwT3duZXIuZ2V0TWluT2NjdXJzKCk7Ci0gICAgICAgIGludCBncm91cE1heCA9IGdyb3VwT3duZXIuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgICAgIGludCBlbGVtZW50TWluID0gMDsKLSAgICAgICAgaW50IGVsZW1lbnRNYXggPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQ7Ci0gICAgICAgIEVMaXN0IHhzZFBhcnRpY2xlcyA9IGdldFhTRE1vZGVsR3JvdXAoKS5nZXRQYXJ0aWNsZXMoKTsKLSAgICAgICAgaWYgKHhzZFBhcnRpY2xlcy5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEUGFydGljbGVDb250ZW50IHhzZFBhcnRpY2xlQ29udGVudCA9ICgoWFNEUGFydGljbGUpeHNkUGFydGljbGVzLmdldCgwKSkuZ2V0Q29udGVudCgpOwotICAgICAgICAgIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICAgICAgewotICAgICAgICAgICAgZWxlbWVudERlY2wgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKXhzZFBhcnRpY2xlQ29udGVudDsKLSAgICAgICAgICAgIFhTRFBhcnRpY2xlIGVsZW1lbnRPd25lciA9IChYU0RQYXJ0aWNsZSllbGVtZW50RGVjbC5nZXRDb250YWluZXIoKTsKLSAgICAgICAgICAgIGVsZW1lbnRNaW4gPSBlbGVtZW50T3duZXIuZ2V0TWluT2NjdXJzKCk7Ci0gICAgICAgICAgICBlbGVtZW50TWF4ID0gZWxlbWVudE93bmVyLmdldE1heE9jY3VycygpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZ3JvdXBNaW4gPj0gMCAmJiBlbGVtZW50TWluID49IDApCi0gICAgICAgICAgbWluT2NjdXJzID0gZ3JvdXBNaW4gKiBlbGVtZW50TWluOwotICAgICAgICBpZiAoZ3JvdXBNYXggPj0gMCAmJiBncm91cE1heCAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQgJiYgZWxlbWVudE1heCA+PSAwICYmIGVsZW1lbnRNYXggIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEKQotICAgICAgICAgIG1heE9jY3VycyA9IGdyb3VwTWF4ICogZWxlbWVudE1heDsKLSAgICAgIH0KLSAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHRoaXNDb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KGdldFhTRFR5cGVEZWZpbml0aW9uKCkpOwotICAgICAgeHNkQ29uZmlnLnNldE1pbk9jY3VycyhtaW5PY2N1cnMpOwotICAgICAgeHNkQ29uZmlnLnNldE1heE9jY3VycyhtYXhPY2N1cnMpOwotICAgICAgeHNkQ29uZmlnLnNldFN0eWxlKHRoaXNDb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0UGFydEVuY29kaW5nKHRoaXNDb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgICAgeHNkQ29uZmlnLnNldFdTRExQYXJ0TmFtZSh0aGlzQ29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICAgIFN0cmluZyBuYW1lID0gKGVsZW1lbnREZWNsICE9IG51bGwpID8gZWxlbWVudERlY2wuZ2V0TmFtZSgpIDogZ2V0WFNEVHlwZURlZmluaXRpb24oKS5nZXROYW1lKCk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoeHNkQ29uZmlnLCBncm91cE1lbWJlcklEWzBdLCBuYW1lKTsKLSAgICAgIGFkZEZyYWdtZW50KGdyb3VwTWVtYmVySURbMF0sIGZyYWcpOwotICAgICAgc2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRCwgZ3JvdXBNZW1iZXJJRCk7Ci0gICAgICByZXR1cm4gZ3JvdXBJRDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNPQVBFbmNBcnJheUluc3RhbmNlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVTT0FQRW5jQXJyYXlJbnN0YW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NTY3ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFNPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBTT0FQRW5jQXJyYXlGcmFnbWVudCB7Ci0gIHB1YmxpYyBTT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5M2UyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQgZXh0ZW5kcyBYU0REZWxlZ2F0aW9uRnJhZ21lbnQgaW1wbGVtZW50cyBJU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50Ci17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJpZCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIUkVGID0gImhyZWYiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9VTkQgPSAiIyI7Ci0KLSAgcHJpdmF0ZSBIYXNodGFibGUgdXJpUmVmZXJlbmNlVGFibGVfOwotCi0gIHB1YmxpYyBTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIG51bGwpOwotICAgIHVyaVJlZmVyZW5jZVRhYmxlXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihjb25maWcpOwotICB9Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZURlZikKLSAgewotICAgIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldFhTRFR5cGVEZWZpbml0aW9uKHR5cGVEZWYpOwotICB9Ci0KLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIGdldFhTRFR5cGVEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IHJlc29sdmVVUklSZWZlcmVuY2VzKHVyaVJlZmVyZW5jZVRhYmxlXywgaW5zdGFuY2VEb2N1bWVudHNbaV0pOwotICAgIHJldHVybiBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VEb2N1bWVudHMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VVJJUmVmZXJlbmNlcyhIYXNodGFibGUgdXJpUmVmZXJlbmNlcykKLSAgewotICAgIHVyaVJlZmVyZW5jZVRhYmxlXyA9IHVyaVJlZmVyZW5jZXM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEhhc2h0YWJsZSBwYXJzZVVSSVJlZmVyZW5jZXMoRWxlbWVudCBlbGVtZW50LCBib29sZWFuIG92ZXJ3cml0ZXMpCi0gIHsKLSAgICBIYXNodGFibGUgdXJpUmVmZXJlbmNlcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBwYXJzZVVSSVJlZmVyZW5jZXModXJpUmVmZXJlbmNlcywgZWxlbWVudCwgb3ZlcndyaXRlcyk7Ci0gICAgcmV0dXJuIHVyaVJlZmVyZW5jZXM7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHBhcnNlVVJJUmVmZXJlbmNlcyhIYXNodGFibGUgdXJpUmVmZXJlbmNlcywgRWxlbWVudCBlbGVtZW50LCBib29sZWFuIG92ZXJ3cml0ZXMpCi0gIHsKLSAgICBib29sZWFuIHJlc29sdmVkID0gdHJ1ZTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSSVJlZmVyZW5jZSByZWYgPSBudWxsOwotICAgICAgU3RyaW5nIGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSUQpOwotICAgICAgcmVzb2x2ZWQgPSAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoSFJFRik7Ci0gICAgICBpZiAoaWQgIT0gbnVsbCAmJiBpZC5sZW5ndGgoKSA+IDAgJiYgKG92ZXJ3cml0ZXMgfHwgIXVyaVJlZmVyZW5jZXMuY29udGFpbnMoaWQpKSkKLSAgICAgIHsKLSAgICAgICAgcmVmID0gbmV3IFVSSVJlZmVyZW5jZShlbGVtZW50LCB0cnVlKTsKLSAgICAgICAgdXJpUmVmZXJlbmNlcy5wdXQoaWQsIHJlZik7Ci0gICAgICB9Ci0gICAgICBOb2RlTGlzdCBubCA9IGVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGkpOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgcmVzb2x2ZWQgPSBwYXJzZVVSSVJlZmVyZW5jZXModXJpUmVmZXJlbmNlcywgKEVsZW1lbnQpbm9kZSwgb3ZlcndyaXRlcykgJiYgcmVzb2x2ZWQ7Ci0gICAgICB9Ci0gICAgICBpZiAocmVmICE9IG51bGwpCi0gICAgICAgIHJlZi5zZXRSZXNvbHZlZChyZXNvbHZlZCk7Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlZDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgRWxlbWVudCByZXNvbHZlVVJJUmVmZXJlbmNlcyhIYXNodGFibGUgdXJpUmVmZXJlbmNlcywgRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKHVyaVJlZmVyZW5jZXMgIT0gbnVsbCAmJiAhdXJpUmVmZXJlbmNlcy5pc0VtcHR5KCkpCi0gICAgICByZXR1cm4gcmVzb2x2ZVVSSVJlZmVyZW5jZXModXJpUmVmZXJlbmNlcywgZWxlbWVudC5nZXRPd25lckRvY3VtZW50KCksIGVsZW1lbnQsIG5ldyBWZWN0b3IoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBFbGVtZW50IHJlc29sdmVVUklSZWZlcmVuY2VzKEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzLCBEb2N1bWVudCBkb2MsIEVsZW1lbnQgZWxlbWVudCwgVmVjdG9yIHVzZWRJZHMpCi0gIHsKLSAgICBTdHJpbmcgaHJlZiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEhSRUYpOwotICAgIEVsZW1lbnQgcmVzb2x2ZWRFbGVtZW50ID0gZWxlbWVudDsKLSAgICBib29sZWFuIHJlc29sdmVkID0gZmFsc2U7Ci0gICAgaWYgKGhyZWYgIT0gbnVsbCAmJiBocmVmLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBVUklSZWZlcmVuY2UgcmVmID0gbnVsbDsKLSAgICAgIGlmIChocmVmLmluZGV4T2YoUE9VTkQpICE9IC0xKQotICAgICAgICBocmVmID0gaHJlZi5zdWJzdHJpbmcoMSwgaHJlZi5sZW5ndGgoKSk7Ci0gICAgICBpZiAoIXVzZWRJZHMuY29udGFpbnMoaHJlZikpCi0gICAgICB7Ci0gICAgICAgIHJlZiA9IChVUklSZWZlcmVuY2UpdXJpUmVmZXJlbmNlcy5nZXQoaHJlZik7Ci0gICAgICAgIGlmIChyZWYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHVzZWRJZHMuYWRkKGhyZWYpOwotICAgICAgICAgIEVsZW1lbnQgZWxlbWVudFJlZiA9IHJlZi5nZXRSZWZFbGVtZW50KCk7Ci0gICAgICAgICAgcmVzb2x2ZWQgPSByZWYuZ2V0UmVzb2x2ZWQoKTsKLSAgICAgICAgICByZXNvbHZlZEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChlbGVtZW50LmdldFRhZ05hbWUoKSk7Ci0gICAgICAgICAgTm9kZUxpc3QgbmwgPSBlbGVtZW50UmVmLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShpKTsKLSAgICAgICAgICAgIGlmIChub2RlICE9IG51bGwpCi0gICAgICAgICAgICAgIHJlc29sdmVkRWxlbWVudC5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShub2RlLCB0cnVlKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghcmVzb2x2ZWQpCi0gICAgewotICAgICAgTm9kZUxpc3QgbmwgPSByZXNvbHZlZEVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGkpOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IGNoaWxkID0gcmVzb2x2ZVVSSVJlZmVyZW5jZXModXJpUmVmZXJlbmNlcywgcmVzb2x2ZWRFbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSwgKEVsZW1lbnQpbm9kZSwgdXNlZElkcyk7Ci0JCSAgaWYgKGNoaWxkICE9IG5vZGUpCi0gICAgICAgICAgICByZXNvbHZlZEVsZW1lbnQucmVwbGFjZUNoaWxkKGNoaWxkLCBub2RlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAoaHJlZiAhPSBudWxsKQotICAgICAgdXNlZElkcy5yZW1vdmUoaHJlZik7Ci0gICAgcmV0dXJuIHJlc29sdmVkRWxlbWVudDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFVSSVJlZmVyZW5jZQotICB7Ci0gICAgcHJpdmF0ZSBFbGVtZW50IHJlZl87Ci0gICAgcHJpdmF0ZSBib29sZWFuIHJlc29sdmVkXzsKLQotICAgIHB1YmxpYyBVUklSZWZlcmVuY2UoRWxlbWVudCByZWYsIGJvb2xlYW4gcmVzb2x2ZWQpCi0gICAgewotICAgICAgcmVmXyA9IHJlZjsKLSAgICAgIHJlc29sdmVkXyA9IHJlc29sdmVkOwotICAgIH0KLQotICAgIHB1YmxpYyBFbGVtZW50IGdldFJlZkVsZW1lbnQoKQotICAgIHsKLSAgICAgIHJldHVybiByZWZfOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlZkVsZW1lbnQoRWxlbWVudCByZWYpCi0gICAgewotICAgICAgcmVmXyA9IHJlZjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRSZXNvbHZlZCgpCi0gICAgewotICAgICAgcmV0dXJuIHJlc29sdmVkXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXNvbHZlZChib29sZWFuIHJlc29sdmVkKQotICAgIHsKLSAgICAgIHJlc29sdmVkXyA9IHJlc29sdmVkOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTkyYzk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBBIFNPQVAgaGVhZGVyIGZyYWdtZW50LCB3aGljaCBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBmcmFnbWVudCB0aGF0IHJlcHJlc2VudHMgdGhlIFNPQVAgaGVhZGVyIGNvbnRlbnQuICAKLSAqLwotcHVibGljIGNsYXNzIFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQgZXh0ZW5kcyBYU0REZWxlZ2F0aW9uRnJhZ21lbnQgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNVVNUX1VOREVSU1RBTkQgPSAibXVzdFVuZGVyc3RhbmQiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RPUiAgICAgICAgICAgPSAiYWN0b3IiOwotCQotCXByaXZhdGUgYm9vbGVhbiBtdXN0VW5kZXJzdGFuZCA9IGZhbHNlOwkgCi0JcHJpdmF0ZSBTdHJpbmcgIGFjdG9yICAgICAgICAgID0gIiI7Ci0JcHJpdmF0ZSBib29sZWFuIHZhbGlkQWN0b3IgICAgID0gdHJ1ZTsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiAKLQkgKiBAcGFyYW0gZnJhZ21lbnQgVGhlIGZyYWdtZW50IHRoYXQgdGhpcyBTT0FQIGhlYWRlciBmcmFnbWVudCB3cmFwcyBhcm91bmQuCi0JICovCi0JcHVibGljIFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQoSVhTREZyYWdtZW50IGZyYWdtZW50KSB7Ci0JCXN1cGVyKGZyYWdtZW50LmdlbklEKCksIGZyYWdtZW50LmdldE5hbWUoKSwgbnVsbCk7CSAgICAKLQkJc2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KGZyYWdtZW50KTsKLQl9Ci0JCi0JLyoKLQkgKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhIHN0cmluZyBhcnJheS4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRGaXJzdEVsZW1lbnQoU3RyaW5nW10gc3RyaW5nQXJyYXkpIHsKLQkJaWYgKHN0cmluZ0FycmF5ID09IG51bGwgfHwgc3RyaW5nQXJyYXkubGVuZ3RoID09IDApCi0JCQlyZXR1cm4gbnVsbDsKLQkJcmV0dXJuIHN0cmluZ0FycmF5WzBdOwkJIAotCX0KLQkKLQkvKgotCSAqIFJldHJpZXZlcyB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGEgdmVjdG9yLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldEZpcnN0RWxlbWVudChWZWN0b3IgdmVjdG9yKSB7Ci0JCWlmICh2ZWN0b3IgPT0gbnVsbCB8fCB2ZWN0b3IuaXNFbXB0eSgpKQotCQkJcmV0dXJuIG51bGw7Ci0JCSAKLQkJT2JqZWN0IG9iaiA9IHZlY3Rvci5maXJzdEVsZW1lbnQoKTsKLQkJaWYgKCEob2JqIGluc3RhbmNlb2YgU3RyaW5nKSkKLQkJCXJldHVybiBudWxsOwotCQkgCi0JCXJldHVybiAoU3RyaW5nKSBvYmo7Ci0JfQotCQotCS8qCi0JICogU2V0cyB0aGUgbXVzdFVuZGVyc3RhbmQgdmFsdWUuIEFueSBub24tZW1wdHkgc3RyaW5nIChleGNlcHQgIjAiKQotCSAqIHRyYW5zbGF0ZXMgdG8gYSBtdXN0VW5kZXJzdGFuZCB2YWx1ZSBvZiB0cnVlLgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXRNdXN0VW5kZXJzdGFuZChTdHJpbmcgcGFyYW0pIHsKLQkJbXVzdFVuZGVyc3RhbmQgPSAocGFyYW0gIT0gbnVsbCAmJiAhcGFyYW0uZXF1YWxzKCIwIikpOwotCX0KLQkKLQkvKgotCSAqIFNldHMgdGhlIGFjdG9yIHZhbHVlLiAgQWxzbyBzZXRzIHRoZSBmbGFnIGZvciB2YWxpZEFjdG9yLgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXRBY3RvcihTdHJpbmcgcGFyYW0pIHsKLQkJaWYgKHBhcmFtID09IG51bGwgfHwgcGFyYW0ubGVuZ3RoKCkgPT0gMCkKLQkJCWFjdG9yID0gIiI7Ci0JCWVsc2UgewotCQkJYWN0b3IgPSBwYXJhbTsKLQkJCXRyeSB7Ci0JCQkJbmV3IFVSSShhY3Rvcik7Ci0JCQl9Ci0JCQljYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsKLQkJCQl2YWxpZEFjdG9yID0gZmFsc2U7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9CQkgCi0JCSAKLQkJdmFsaWRBY3RvciA9IHRydWU7Ci0JfQkgCi0JCi0gICAgLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLQkKLQkJc2V0TXVzdFVuZGVyc3RhbmQocGFyc2VyLmdldFBhcmFtZXRlcihnZXRNdXN0VW5kZXJzdGFuZElEKCkpKTsKLQkgICAgc2V0QWN0b3IocGFyc2VyLmdldFBhcmFtZXRlcihnZXRBY3RvcklEKCkpKTsKLQotCQkvLyBtdXN0VW5kZXJzdGFuZCBpcyBlaXRoZXIgc2V0IG9yIHVuc2V0LCBubyBmdXJ0aGVyIHZhbGlkYXRpb24gbmVjZXNzYXJ5Ci0JCS8vIG9ubHkgbmVlZCB0byB2YWxpZGF0ZSBhY3RvciBVUkkKLQkJcmV0dXJuIHN1cGVyLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSAmJiB2YWxpZGF0ZUFjdG9yKCk7CQkJIAkJIAotCX0KLQkJCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjc2V0UGFyYW1ldGVyVmFsdWVzKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmdbXSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBTdHJpbmdbXSBwYXJhbXMpIHsKLQkJaWYgKGdldE11c3RVbmRlcnN0YW5kSUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJc2V0TXVzdFVuZGVyc3RhbmQoZ2V0Rmlyc3RFbGVtZW50KHBhcmFtcykpOwotCQllbHNlIGlmIChnZXRBY3RvcklEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXNldEFjdG9yKGdldEZpcnN0RWxlbWVudChwYXJhbXMpKTsKLQkJZWxzZQotCQkJc3VwZXIuc2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5LCBwYXJhbXMpOwkJIAotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCNzZXRQYXJhbWV0ZXJWYWx1ZXMoamF2YS5sYW5nLlN0cmluZywgamF2YS51dGlsLlZlY3RvcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBWZWN0b3IgcGFyYW1zKSB7Ci0JCWlmIChnZXRNdXN0VW5kZXJzdGFuZElEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXNldE11c3RVbmRlcnN0YW5kKGdldEZpcnN0RWxlbWVudChwYXJhbXMpKTsKLQkJZWxzZSBpZiAoZ2V0QWN0b3JJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlzZXRBY3RvcihnZXRGaXJzdEVsZW1lbnQocGFyYW1zKSk7Ci0JCWVsc2UKLQkJCXN1cGVyLnNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjZ2V0UGFyYW1ldGVyVmFsdWVzKGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLQkJaWYgKGdldE11c3RVbmRlcnN0YW5kSUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7IG11c3RVbmRlcnN0YW5kID8gIjEiIDogIjAiIH07Ci0JCWVsc2UgaWYgKGdldEFjdG9ySUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7IGFjdG9yIH07Ci0JCWVsc2UKLQkJCXJldHVybiBzdXBlci5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwkJIAotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCNnZXRQYXJhbWV0ZXJWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0JCXJldHVybiBnZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpW3BhcmFtSW5kZXhdOwotCX0JIAotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I3ZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpIHsKLQkJcmV0dXJuIHN1cGVyLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkgJiYgdmFsaWRhdGVBY3RvcigpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCN2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotCQlpZiAoZ2V0TXVzdFVuZGVyc3RhbmRJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZWxzZSBpZiAoZ2V0QWN0b3JJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlyZXR1cm4gdmFsaWRhdGVBY3RvcigpOwotCQllbHNlCi0JCQlyZXR1cm4gc3VwZXIudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCN2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKGphdmEubGFuZy5TdHJpbmcsIGludCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLQkJaWYgKGdldE11c3RVbmRlcnN0YW5kSUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWVsc2UgaWYgKGdldEFjdG9ySUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJcmV0dXJuIHZhbGlkYXRlQWN0b3IoKTsKLQkJZWxzZQotCQkJcmV0dXJuIHN1cGVyLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIHBhcmFtSW5kZXgpOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZXMgZm9yIHRoaXMgU09BUCBoZWFkZXIgZ2l2ZW4gYW4gaW5zdGFuY2UgZG9jdW1lbnQgYW5kIGEgbmFtZXNwYWNlIHRhYmxlLgotCSAqIAotCSAqIEBwYXJhbSBpbnN0YW5jZURvY3VtZW50IFRoZSBpbnN0YW5jZSBkb2N1bWVudC4KLQkgKiBAcGFyYW0gbmFtZXNwYWNlVGFibGUgVGhlIG5hbWVzcGFjZSB0YWJsZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYWxsIHZhbHVlcyBleHRyYWN0ZWQgZnJvbSB0aGUgaW5zdGFuY2UgZG9jdW1lbnQgYXJlIHZhbGlkLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50KEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCwgTWFwIG5hbWVzcGFjZVRhYmxlKSB7Ci0KLQkJYm9vbGVhbiB2YWxpZCA9IHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhuZXcgRWxlbWVudFtdIHsgaW5zdGFuY2VEb2N1bWVudCB9KTsJCQotCQkgCi0JCVN0cmluZyBwcmVmaXggPSBuYW1lc3BhY2VUYWJsZS5nZXQoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5WKSArIEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OOwotCQkgCi0JCVN0cmluZyBtdXN0VW5kZXJzdGFuZFZhbHVlID0gaW5zdGFuY2VEb2N1bWVudC5nZXRBdHRyaWJ1dGUocHJlZml4ICsgTVVTVF9VTkRFUlNUQU5EKTsKLQkJaWYgKCIiLmVxdWFscyhtdXN0VW5kZXJzdGFuZFZhbHVlKSkKLQkJCW11c3RVbmRlcnN0YW5kID0gZmFsc2U7Ci0JCWVsc2UgaWYgKCIwIi5lcXVhbHMobXVzdFVuZGVyc3RhbmRWYWx1ZSkgfHwgIjEiLmVxdWFscyhtdXN0VW5kZXJzdGFuZFZhbHVlKSkKLQkJCXNldE11c3RVbmRlcnN0YW5kKG11c3RVbmRlcnN0YW5kVmFsdWUpOwotCQllbHNlCi0JCQl2YWxpZCA9IGZhbHNlOwotCQkgCi0JCXNldEFjdG9yKGluc3RhbmNlRG9jdW1lbnQuZ2V0QXR0cmlidXRlKHByZWZpeCArIEFDVE9SKSk7Ci0JCSAKLQkJcmV0dXJuIHZhbGlkICYmIHZhbGlkYXRlQWN0b3IoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4sIGphdmEudXRpbC5IYXNodGFibGUsIG9yZy53M2MuZG9tLkRvY3VtZW50KQotCSAqLwotCXB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpIHsKLQkJRWxlbWVudFtdIGVsZW1lbnRzID0gc3VwZXIuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotCQkgCi0JCWlmIChlbGVtZW50cy5sZW5ndGggPT0gMCkKLQkJCXJldHVybiBlbGVtZW50czsKLQkJIAotCQlTdHJpbmcgcHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShGcmFnbWVudENvbnN0YW50cy5OU19VUklfU09BUF9FTlYsIG5hbWVzcGFjZVRhYmxlKSArIEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OOwotCQkgCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsJCQkgCQkJIAkJCQkgCi0JCQkKLQkJCWlmIChtdXN0VW5kZXJzdGFuZCkKLQkJCQllbGVtZW50c1tpXS5zZXRBdHRyaWJ1dGUocHJlZml4ICsgTVVTVF9VTkRFUlNUQU5ELCAiMSIpOwotCi0JCQlpZiAoYWN0b3IubGVuZ3RoKCkgPiAwKQotCQkJCWVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZShwcmVmaXggKyBBQ1RPUiwgYWN0b3IpOwotCQl9Ci0JCSAKLQkJcmV0dXJuIGVsZW1lbnRzOwotCX0KLQkgCi0JLyoqCi0JICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIGZvciB0aGUgbXVzdFVuZGVyc3RhbmQgdmFsdWUKLQkgKiBAcmV0dXJuIFRoZSBtdXN0VW5kZXJzdGFuZCB2YWx1ZSwgdHJ1ZSBpZiBtdXN0VW5kZXJzdGFuZD0iMSIsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc011c3RVbmRlcnN0YW5kKCkgewotCQlyZXR1cm4gbXVzdFVuZGVyc3RhbmQ7Ci0JfQotCSAKLQkvKioKLQkgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgdGhlIGFjdG9yIHZhbHVlCi0JICogQHJldHVybiBUaGUgYWN0b3IgdmFsdWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEFjdG9yKCkgewotCQlyZXR1cm4gYWN0b3I7Ci0JfQotCQotCS8qKgotCSAqIERldGVybWluZXMgaWYgdGhlIGFjdG9yIHZhbHVlIGlzIGEgdmFsaWQgVVJJLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgYWN0b3IgdmFsdWUgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFjdG9yKCkgewkJIAotCQlyZXR1cm4gdmFsaWRBY3RvcjsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSUQgb2YgdGhlIG11c3RVbmRlcnN0YW5kIGlucHV0IGVsZW1lbnQKLQkgKiBAcmV0dXJuIFRoZSBJRCBvZiB0aGUgbXVzdFVuZGVyc3RhbmQgaW5wdXQgZWxlbWVudAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TXVzdFVuZGVyc3RhbmRJRCgpIHsKLQkJcmV0dXJuIGdldElEKCkgKyBGcmFnbWVudENvbnN0YW50cy5JRF9TRVBFUkFUT1IgKyBNVVNUX1VOREVSU1RBTkQ7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIElEIG9mIHRoZSBhY3RvciBpbnB1dCBlbGVtZW50Ci0JICogQHJldHVybiBUaGUgSUQgb2YgdGhlIGFjdG9yIGlucHV0IGVsZW1lbnQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEFjdG9ySUQoKSB7Ci0JCXJldHVybiBnZXRJRCgpICsgRnJhZ21lbnRDb25zdGFudHMuSURfU0VQRVJBVE9SICsgQUNUT1I7Ci0JfQotCSAKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCNnZXRXcml0ZUZyYWdtZW50KCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0JCXJldHVybiAiL3dzZGwvZnJhZ21lbnQvU09BUEhlYWRlcldyYXBwZXJXRnJhZ21lbnRKU1AuanNwIjsKLQl9CQkgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RBdHRyaWJ1dGVGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQXR0cmlidXRlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1MzlhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RBdHRyaWJ1dGVGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIAotICogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0gKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMKLSAqIFJlc2VydmVkLiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvcgotICogZGlzY2xvc3VyZSByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSAqIAotICogPC9jb3B5cmlnaHQ+Ci0gKiAKLSAqIEZpbGUKLSAqIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3NyYy9jb20vaWJtL2V0b29scy93ZWJzZXJ2aWNlL2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvSW1wbC9YU0RFbGVtZW50RnJhZ21lbnQuamF2YSwKLSAqIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yLCAyMDAzMTIzMWEgNSBWZXJzaW9uIDEuNSAwMy8wOS8yNAotICogMTQ6MzA6MzgKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RBdHRyaWJ1dGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZvcm07Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFNEQXR0cmlidXRlRnJhZ21lbnQgZXh0ZW5kcyBYU0REZWxlZ2F0aW9uRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNEQXR0cmlidXRlRnJhZ21lbnQKLXsKLSAgIAotICAKLSAgcHVibGljIFhTREF0dHJpYnV0ZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIAotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgSVhTREZyYWdtZW50IGF0dHJpYnV0ZVR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIAkKLSAgICBpZiAoIWF0dHJpYnV0ZVR5cGVGcmFnbWVudC5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkKLSAgewotICAgIElYU0RGcmFnbWVudCBhdHRyaWJ1dGVUeXBlRnJhZ21lbnQgPSBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICBpZiAoIWF0dHJpYnV0ZVR5cGVGcmFnbWVudC52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KQotICB7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpCi0gIHsKLSAgICBpZiAoIWdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIHBhcmFtSW5kZXgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgc3VwZXIuc2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oY29uZmlnKTsKLSAgICAKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gaW5zdGFuY2VEb2N1bWVudHM7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBTdHJpbmcgd3NkbFBhcnROYW1lID0gY29uZmlnLmdldFdTRExQYXJ0TmFtZSgpOwotICAgIE5vZGVMaXN0IG5sID0gaW5zdGFuY2VEb2N1bWVudHNDb3B5WzBdLmdldENoaWxkTm9kZXMoKTsKLSAgICAgCi0gICAgCi0gICAgCi0gICAgaWYgKGNvbmZpZy5nZXRJc1dTRExQYXJ0KCkgJiYgY29uZmlnLmdldFN0eWxlKCkgPT0gRnJhZ21lbnRDb25zdGFudHMuU1RZTEVfUlBDICYmIHdzZGxQYXJ0TmFtZSAhPSBudWxsICYmIHdzZGxQYXJ0TmFtZS5sZW5ndGgoKSA+IDAgJiYgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aCA9PSAxICYmIHdzZGxQYXJ0TmFtZS5lcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5WzBdLmdldFRhZ05hbWUoKSkpCi0gICAgewotICAgICAgVmVjdG9yIGNoaWxkRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaSk7Ci0gICAgICAgIGlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpewotICAgICAgICAgIGNoaWxkRWxlbWVudHMuYWRkKG5vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSAoRWxlbWVudFtdKWNoaWxkRWxlbWVudHMudG9BcnJheShuZXcgRWxlbWVudFswXSk7Ci0gICAgfQotICAgIElYU0RGcmFnbWVudCBhdHRyaWJ1dGVUeXBlRnJhZ21lbnQgPSBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50c0NvcHksIGdldE5hbWUoKSk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZVR5cGVGcmFnbWVudC5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgYXR0cmlidXRlVHlwZUZyYWdtZW50LmdldE5hbWUoKSkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpCi0gIHsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIGlmIChjb25maWcuZ2V0UGFydEVuY29kaW5nKCkgPT0gRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfTElURVJBTCkKLSAgICB7Ci0gICAgICBYU0RBdHRyaWJ1dGVVc2UgeHNkQXR0cmlidXRlVXNlID0gKFhTREF0dHJpYnV0ZVVzZSljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiB4c2RBdHRyaWJ1dGUgPSAoWFNEQXR0cmlidXRlRGVjbGFyYXRpb24peHNkQXR0cmlidXRlVXNlLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCk7Ci0gICAgICBpZiAoeHNkQXR0cmlidXRlLmlzR2xvYmFsKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoeHNkQXR0cmlidXRlLmlzU2V0Rm9ybSgpKQotICAgICAgICAgIHJldHVybiAoeHNkQXR0cmlidXRlLmdldEZvcm0oKS5nZXRWYWx1ZSgpID09IFhTREZvcm0uUVVBTElGSUVEKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiAoeHNkQXR0cmlidXRlLmdldFNjaGVtYSgpLmdldEF0dHJpYnV0ZUZvcm1EZWZhdWx0KCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUoSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlKQotICB7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBYU0RBdHRyaWJ1dGVVc2UgeHNkQXR0cmlidXRlVXNlID0gKFhTREF0dHJpYnV0ZVVzZSljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24geHNkQXR0cmlidXRlID0geHNkQXR0cmlidXRlVXNlLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCk7Ci0gICAgCi0gICAgU3RyaW5nQnVmZmVyIHRhZ05hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgaWYgKGlzSW5zdGFuY2VOYW1lc3BhY2VRdWFsaWZpZWQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnNVUkkgPSBudWxsOwotICAgICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICAgIGlmICh4c2RBdHRyaWJ1dGUuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICAgIG5zVVJJID0geHNkQXR0cmlidXRlLmdldFJlc29sdmVkQXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgbnNVUkkgPSB4c2RBdHRyaWJ1dGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobnNVUkkgIT0gbnVsbCAmJiBuc1VSSS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKG5zVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgIHRhZ05hbWUuYXBwZW5kKHByZWZpeCk7Ci0gICAgICAgIHRhZ05hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgU3RyaW5nIHhzZEF0dHJpYnV0ZU5hbWUgPSB4c2RBdHRyaWJ1dGUuZ2V0TmFtZSgpOwotICAgIGlmICh4c2RBdHRyaWJ1dGVOYW1lID09IG51bGwgfHwgeHNkQXR0cmlidXRlTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgICBpZiAoeHNkQXR0cmlidXRlLmdldFJlc29sdmVkQXR0cmlidXRlRGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgICAgCXhzZEF0dHJpYnV0ZU5hbWUgPSB4c2RBdHRyaWJ1dGUuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgIGVsc2UKLSAgICAgIAl4c2RBdHRyaWJ1dGVOYW1lID0gZ2V0TmFtZSgpOwotICAgIH0KLSAgICB0YWdOYW1lLmFwcGVuZCh4c2RBdHRyaWJ1dGVOYW1lKTsKLSAgICByZXR1cm4gdGFnTmFtZS50b1N0cmluZygpOwotICB9Ci0KLSAgCi0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGVGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGVGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyY2Y1ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgWFNEQ29tcGxleEZpeEZyYWdtZW50IGV4dGVuZHMgWFNEQ29tcGxleEZyYWdtZW50IHsKLSAgcHVibGljIFhTRENvbXBsZXhGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWZhY2I3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNTE2ICAgMTg1NTk2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgbWlzaW50ZXJwcmV0cyByZXNwb25zZSBtZXNzYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RDb21wbGV4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuWFNEVHlwZURlZmluaXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleEZpbmFsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNEQ29tcGxleEZyYWdtZW50IGV4dGVuZHMgWFNETWFwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNEQ29tcGxleEZyYWdtZW50Ci17Ci0gIHB1YmxpYyBYU0RDb21wbGV4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBpbnRlcm5hbEVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHksIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoaW5zdGFuY2VEb2N1bWVudHNDb3B5KTsKLSAgICBlbHNlCi0gICAgICBzZXRQYXJhbXNGb3JYU0RQYXJ0aWNsZShpbnN0YW5jZURvY3VtZW50c0NvcHkpOyAKLSAgICByZXR1cm4gc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhpbnN0YW5jZURvY3VtZW50c0NvcHkpICYmIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKXsKLSAgCWJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAJCi0gIAlTdHJpbmdbXSBmcmFnbWVudHNPcmRlciA9IGdldEZyYWdtZW50c09yZGVyKCk7Ci0gIAlJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgCWZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspewotICAJICAKLSAgCSAgaWYgKGkgPj0gZnJhZ21lbnRzT3JkZXIubGVuZ3RoKSBicmVhazsKLSAgCSAgU3RyaW5nIGZyYWdtZW50SUQgPSBmcmFnbWVudHNPcmRlcltpXTsKLQotICAJICBmb3IgKGludCBrID0gMDsgayA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGsrKyl7Ci0gIAkJaWYoYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldElEKCkuc3RhcnRzV2l0aChmcmFnbWVudElEKSl7Ci0gIAkJICBOYW1lZE5vZGVNYXAgbm9kZU1hcCA9IGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldEF0dHJpYnV0ZXMoKTsKLSAgCSAgCSAgU3RyaW5nIG5hbWUgPSAoKFhTREF0dHJpYnV0ZVVzZSlhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKSkuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gIAkgICAgICBwYXJhbXNWYWxpZCA9IGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVQYXJhbXNGcm9tSW5zdGFuY2VEb2N1bWVudHMobm9kZU1hcC5nZXROYW1lZEl0ZW0obmFtZSkpOwotICAJCX0KLSAgICAgIH0KLSAgCX0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JYU0RUeXBlRGVmKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMV07Ci0gICAgICBjaGlsZEluc3RhbmNlRG9jdW1lbnRzWzBdID0gaW5zdGFuY2VEb2N1bWVudHNbaV07Ci0gICAgICBpZiAoIWNoaWxkRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMsIGNoaWxkRnJhZy5nZXROYW1lKCkpKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvclhTRFBhcnRpY2xlKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICAgIFZlY3RvciBpbnN0YW5jZXNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBOb2RlTGlzdCBubCA9IGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShqKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIGluc3RhbmNlc1ZlY3Rvci5hZGQobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZXNWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgIGluc3RhbmNlc1ZlY3Rvci5jb3B5SW50byhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykKLSAgewotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZ2VuSW5zdGFuY2VzRm9yWFNEVHlwZURlZihnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgdGFnTmFtZSwgZG9jKTsKLSAgICBlbHNlCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLCBkb2MpOwotICAgICAgaWYoZ2VuWFNJVHlwZSkgYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpOwotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBhZGRBdHRyaWJ1dGVzKGluc3RhbmNlRG9jdW1lbnRzKTsKLQlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBhZGRBdHRyaWJ1dGVzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyl7Ci0gIAkKLQlTdHJpbmdbXSBmcmFnbWVudHNPcmRlciA9IGdldEZyYWdtZW50c09yZGVyKCk7Ci0gIAlJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgCWZvciAoaW50IGkgPSAwO2k8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDtpKyspewotCi0gIAkgIGlmIChpID49IGZyYWdtZW50c09yZGVyLmxlbmd0aCkgYnJlYWs7Ci0gICAJICBTdHJpbmcgZnJhZ21lbnRJRCA9IGZyYWdtZW50c09yZGVyW2ldOwotICAJCQotICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBrKyspewotICAgIAlpZihhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWdtZW50SUQpKXsKLSAgICAJICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAJICBhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0QXR0cmlidXRlc09uSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VEb2N1bWVudHNbaV0sbmFtZSk7Ci0gICAgCX0KLSAgICAgIH0KLSAgIAl9Ci0gICAJcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0gIAotICBwcml2YXRlIEVsZW1lbnRbXSBnZW5JbnN0YW5jZXNGb3JYU0RUeXBlRGVmKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgdGFnTmFtZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgVmVjdG9yIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50W10gZnJhZ21lbnRJbnN0YW5jZXMgPSBmcmFnbWVudHNbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgaWYgKGZyYWdtZW50SW5zdGFuY2VzLmxlbmd0aCA+IDApCi0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5hZGQoZnJhZ21lbnRJbnN0YW5jZXNbMF0pOwotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZURvY3VtZW50c0NvcHkuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gKEVsZW1lbnQpaW5zdGFuY2VEb2N1bWVudHNDb3B5LmdldChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNldEVsZW1lbnRzVGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgdGFnTmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBnZW5JbnN0YW5jZXNGb3JYU0RQYXJ0aWNsZShib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIHRhZ05hbWUsIERvY3VtZW50IGRvYykKLSAgewotICAgIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtjaGlsZEZyYWdzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZXMgPSBjaGlsZEZyYWdzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICAgIEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGlsZEluc3RhbmNlcy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoaWxkSW5zdGFuY2VzW2pdICE9IG51bGwpCi0gICAgICAgICAgaW5zdGFuY2VEb2N1bWVudC5hcHBlbmRDaGlsZChjaGlsZEluc3RhbmNlc1tqXSk7Ci0gICAgICB9Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IGluc3RhbmNlRG9jdW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHByaXZhdGUgWFNETW9kZWxHcm91cCBnZXRYU0RNb2RlbEdyb3VwKFhTRFBhcnRpY2xlIHhzZFBhcnRpY2xlKQotICB7Ci0gICAgaWYgKHhzZFBhcnRpY2xlICE9IG51bGwpCi0gICAgewotICAgICAgWFNEUGFydGljbGVDb250ZW50IHhzZFBhcnRpY2xlQ29udGVudCA9IHhzZFBhcnRpY2xlLmdldENvbnRlbnQoKTsKLSAgICAgIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgWFNETW9kZWxHcm91cERlZmluaXRpb24geHNkTW9kZWxHcm91cERlZiA9IChYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbil4c2RQYXJ0aWNsZUNvbnRlbnQ7Ci0gICAgICAgICAgaWYgKHhzZE1vZGVsR3JvdXBEZWYuaXNNb2RlbEdyb3VwRGVmaW5pdGlvblJlZmVyZW5jZSgpKQotICAgICAgICAgICAgeHNkTW9kZWxHcm91cERlZiA9IHhzZE1vZGVsR3JvdXBEZWYuZ2V0UmVzb2x2ZWRNb2RlbEdyb3VwRGVmaW5pdGlvbigpOwotICAgICAgICAgIHJldHVybiB4c2RNb2RlbEdyb3VwRGVmLmdldE1vZGVsR3JvdXAoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKQotICAgICAgICAgIHJldHVybiAoWFNETW9kZWxHcm91cCl4c2RQYXJ0aWNsZUNvbnRlbnQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEluaGVyaXRlZFBhcnRpY2xlcyhYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUpCi0gIHsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAoY29tcGxleFR5cGUuZ2V0RGVyaXZhdGlvbk1ldGhvZCgpLmdldFZhbHVlKCkgPT0gWFNEQ29tcGxleEZpbmFsLkVYVEVOU0lPTikKLSAgICB7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiBleHRUeXBlID0gY29tcGxleFR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICAgIGlmIChleHRUeXBlICE9IG51bGwgJiYgIShleHRUeXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGV4dFR5cGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbG5hbWUgPSBleHRUeXBlLmdldE5hbWUoKTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsICYmIGxvY2FsbmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgWFNETmFtZWRDb21wb25lbnQgeHNkTmFtZWRDb21wID0gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKS5nZXRYU0RUeXBlRnJvbVNjaGVtYShuYW1lc3BhY2UsIGxvY2FsbmFtZSwgZmFsc2UpOwotICAgICAgICAgIGlmICh4c2ROYW1lZENvbXAgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pCi0gICAgICAgICAgewotICAgICAgICAgICAgZXh0VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24peHNkTmFtZWRDb21wOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGV4dFR5cGUgIT0gbnVsbCAmJiBleHRUeXBlICE9IGNvbXBsZXhUeXBlICYmIGV4dFR5cGUgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBleHRUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilleHRUeXBlKTsKLSAgICAgICAgaWYgKGV4dFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXAgPSBnZXRYU0RNb2RlbEdyb3VwKChYU0RQYXJ0aWNsZSlleHRUeXBlQ29udGVudCk7Ci0gICAgICAgICAgaWYgKHhzZE1vZGVsR3JvdXAgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB2LmFkZEFsbChnZXRJbmhlcml0ZWRQYXJ0aWNsZXMoKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilleHRUeXBlKSk7Ci0gICAgICAgICAgICB2LmFkZEFsbCh4c2RNb2RlbEdyb3VwLmdldFBhcnRpY2xlcygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZ2F0aGVySW5oZXJpdGVkUGFydGljbGVzKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSkKLSAgewotICAgIGlmIChjb21wbGV4VHlwZS5nZXREZXJpdmF0aW9uTWV0aG9kKCkuZ2V0VmFsdWUoKSA9PSBYU0RDb21wbGV4RmluYWwuRVhURU5TSU9OKQotICAgIHsKLSAgICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgIHsKLSAgICAgICAgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwID0gZ2V0WFNETW9kZWxHcm91cCgoWFNEUGFydGljbGUpY29tcGxleFR5cGVDb250ZW50KTsKLSAgICAgICAgaWYgKHhzZE1vZGVsR3JvdXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgaW5oZXJpdGVkUGFydGljbGVzID0gZ2V0SW5oZXJpdGVkUGFydGljbGVzKGNvbXBsZXhUeXBlKTsKLSAgICAgICAgICBMaXN0IHBhcnRpY2xlcyA9IHhzZE1vZGVsR3JvdXAuZ2V0UGFydGljbGVzKCk7Ci0gICAgICAgICAgcGFydGljbGVzLmFkZEFsbCgwLCBpbmhlcml0ZWRQYXJ0aWNsZXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgCi0gIAotICBwdWJsaWMgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCkKLSAgewotICAJcmV0dXJuIHN1cGVyLmdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwkJCi0gIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjcmVhdGVBdHRyaWJ1dGVGcmFnbWVudHMoU3RyaW5nIGNvbXBsZXhDaGlsZElEKQotICB7Ci0gIAlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gIAlFTGlzdCBhdENvbnRlbnRMaXN0ID0gY29tcGxleFR5cGUuZ2V0QXR0cmlidXRlQ29udGVudHMoKTsKLSAgCUl0ZXJhdG9yIGl0ZXJhdG9yID0gYXRDb250ZW50TGlzdC5pdGVyYXRvcigpOwotICAJd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKLSAgCSAgT2JqZWN0IG9iamVjdCA9IChPYmplY3QpaXRlcmF0b3IubmV4dCgpOwotICAJICBpZihvYmplY3QgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pewotICAJCVhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiB4c2RBR0QgPSAoWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKW9iamVjdDsKLSAgCQlYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gcmVzb2x2ZWQgPSB4c2RBR0QuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVHcm91cERlZmluaXRpb24oKTsKLSAgCQlFTGlzdCBhTGlzdCA9IHJlc29sdmVkLmdldENvbnRlbnRzKCk7Ci0gIAkJSXRlcmF0b3IgaXRlcmF0b3IyID0gYUxpc3QuaXRlcmF0b3IoKTsKLSAgCQl3aGlsZShpdGVyYXRvcjIuaGFzTmV4dCgpKXsKLSAgCQkJY3JlYXRlQXR0cmlidXRlSGVscGVyKChYU0RBdHRyaWJ1dGVVc2UpaXRlcmF0b3IyLm5leHQoKSxjb21wbGV4Q2hpbGRJRCk7Ci0gIAkJfQotICAJICB9Ci0gIAkgIGVsc2V7Ci0gIAkgICAgWFNEQXR0cmlidXRlVXNlIGF0dFVzZSA9ICAoWFNEQXR0cmlidXRlVXNlKW9iamVjdDsKLSAgCSAgICBjcmVhdGVBdHRyaWJ1dGVIZWxwZXIoYXR0VXNlLGNvbXBsZXhDaGlsZElEKTsKLSAgCSAgfQotICAJICAKLSAgCX0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUF0dHJpYnV0ZUhlbHBlcihYU0RBdHRyaWJ1dGVVc2UgYXR0VXNlLFN0cmluZyBjb21wbGV4Q2hpbGRJRCl7Ci0JICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudChhdHRVc2UpOwotICAgICAgeHNkQ29uZmlnLnNldFN0eWxlKHRoaXNDb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0UGFydEVuY29kaW5nKHRoaXNDb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgICAgeHNkQ29uZmlnLnNldFdTRExQYXJ0TmFtZSh0aGlzQ29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICAgIFN0cmluZyBuZXdJRCA9IGdlbklEKCk7Ci0gICAgICBhZGRBdHRyaWJ1dGVGcmFnbWVudChjb21wbGV4Q2hpbGRJRCArIG5ld0lELCBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KHhzZENvbmZpZyxjb21wbGV4Q2hpbGRJRCArIG5ld0lELCBjb21wbGV4Q2hpbGRJRCArIG5ld0lEKSk7Ci0gIAkgIAotICB9Ci0gIAotICAKLSAgcHVibGljIFN0cmluZyBjcmVhdGVDb21wbGV4SW5zdGFuY2UoKQotICB7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIGdhdGhlckluaGVyaXRlZFBhcnRpY2xlcyhjb21wbGV4VHlwZSk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHRoaXNDb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQoY29tcGxleFR5cGVDb250ZW50KTsKLSAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICB4c2RDb25maWcuc2V0UGFydEVuY29kaW5nKHRoaXNDb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgIHhzZENvbmZpZy5zZXRXU0RMUGFydE5hbWUodGhpc0NvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgU3RyaW5nIG5ld0lEID0gZ2VuSUQoKTsKLSAgICBhZGRGcmFnbWVudChuZXdJRCwgZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudCh4c2RDb25maWcsIG5ld0lELCBnZXROYW1lKCkpKTsKLSAgICBjcmVhdGVBdHRyaWJ1dGVGcmFnbWVudHMobmV3SUQpOwotICAgIHJldHVybiBuZXdJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4UmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY5YmQ4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4UmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFhTRENvbXBsZXhSYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNEQ29tcGxleEZyYWdtZW50IHsKLSAgcHVibGljIFhTRENvbXBsZXhSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzVhMzMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3NyYy9jb20vaWJtL2V0b29scy93ZWJzZXJ2aWNlL2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvSW1wbC9YU0RDb21wbGV4Rml4RnJhZ21lbnQuamF2YSwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIgMQotKiBWZXJzaW9uIDEuMSAwMy8wMi8yOCAxNToyNToxNQotKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RBdHRyaWJ1dGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50IGV4dGVuZHMgWFNEQ29tcGxleEZyYWdtZW50IHsKLSAgcHVibGljIFhTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICAKLSAgCi0gIAotICAKLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gaW50ZXJuYWxFcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBpZiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICByZXR1cm4gc2V0UGFyYW1zRm9yWFNEVHlwZURlZihpbnN0YW5jZURvY3VtZW50c0NvcHkpICYmIHBhcmFtc1ZhbGlkOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBzZXRQYXJhbXNGb3JYU0RQYXJ0aWNsZShpbnN0YW5jZURvY3VtZW50c0NvcHkpICYmIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LElYU0RGcmFnbWVudCBmcmFnKXsKLSAgCWJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAJCi0gIAlJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaSsrKXsKLSAgCSAgaWYoYXR0cmlidXRlRnJhZ21lbnRzW2ldLmdldElEKCkuc3RhcnRzV2l0aChmcmFnLmdldElEKCkpKXsgIAotICAJICAJICBOYW1lZE5vZGVNYXAgbm9kZU1hcCA9IGluc3RhbmNlRG9jdW1lbnQuZ2V0QXR0cmlidXRlcygpOwkKLSAgCSAgICAgIFN0cmluZyBuYW1lID0gKChYU0RBdHRyaWJ1dGVVc2UpYXR0cmlidXRlRnJhZ21lbnRzW2ldLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCkpLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAJICAgICAgcGFyYW1zVmFsaWQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbaV0uZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0QXR0cmlidXRlUGFyYW1zRnJvbUluc3RhbmNlRG9jdW1lbnRzKG5vZGVNYXAuZ2V0TmFtZWRJdGVtKG5hbWUpKTsJCi0gICAgICB9Ci0gIAl9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yWFNEVHlwZURlZihFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlSW5zdGFuY2UoKSk7Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzFdOwotICAgICAgY2hpbGRJbnN0YW5jZURvY3VtZW50c1swXSA9IGluc3RhbmNlRG9jdW1lbnRzW2ldOwotICAgICAgaWYgKCFjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKHNldEVsZW1lbnRzVGFnTmFtZShjaGlsZEluc3RhbmNlRG9jdW1lbnRzLCBjaGlsZEZyYWcuZ2V0TmFtZSgpKSkpCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbMF0sY2hpbGRGcmFnKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvclhTRFBhcnRpY2xlKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICAgIFZlY3RvciBpbnN0YW5jZXNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICAgIE5vZGVMaXN0IG5sID0gaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBubC5nZXRMZW5ndGgoKTsgaisrKSB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaik7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICBpbnN0YW5jZXNWZWN0b3IuYWRkKG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VzVmVjdG9yLnNpemUoKV07Ci0gICAgICBpbnN0YW5jZXNWZWN0b3IuY29weUludG8oY2hpbGRJbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgICBpZiAoIWNoaWxkRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoY2hpbGRJbnN0YW5jZURvY3VtZW50cykpCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbaV0sY2hpbGRGcmFnKTsKLSAgICAKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsRG9jdW1lbnQgZG9jKSB7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHM7Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBnZW5JbnN0YW5jZXNGb3JYU0RUeXBlRGVmKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLGRvYyk7Ci0gICAgZWxzZQotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBnZW5JbnN0YW5jZXNGb3JYU0RQYXJ0aWNsZShnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgdGFnTmFtZSxkb2MpOwotICAgICAgaWYoZ2VuWFNJVHlwZSkgYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpOwotICAJcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LCBJWFNERnJhZ21lbnQgZnJhZ21lbnQsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSApewotICAJCi0gIAlJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBrID0gMDsgayA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGsrKyl7Ci0gICAgICBpZihhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWdtZW50LmdldElEKCkpKXsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoKFhTREF0dHJpYnV0ZVVzZSlhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKSkuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgICAgIGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVzT25JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50LG5hbWUpOwkKLSAgICAgIH0KLSAgICB9Ci0gICAJCi0gICAJcmV0dXJuIGluc3RhbmNlRG9jdW1lbnQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIFN0cmluZyB0YWdOYW1lLERvY3VtZW50IGRvYykKLSAgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlcyA9IGZyYWdtZW50c1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsZG9jKTsKLSAgICAgIGlmIChmcmFnbWVudEluc3RhbmNlcy5sZW5ndGggPiAwKXsKLSAgICAgIAlmcmFnbWVudEluc3RhbmNlc1swXSA9IGFkZEF0dHJpYnV0ZXMoZnJhZ21lbnRJbnN0YW5jZXNbMF0sZnJhZ21lbnRzW2ldLG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmFkZChmcmFnbWVudEluc3RhbmNlc1swXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gKEVsZW1lbnQpaW5zdGFuY2VEb2N1bWVudHNDb3B5LmdldChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNldEVsZW1lbnRzVGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgdGFnTmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBnZW5JbnN0YW5jZXNGb3JYU0RQYXJ0aWNsZShib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIHRhZ05hbWUsRG9jdW1lbnQgZG9jKSB7Ci0gICAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2NoaWxkRnJhZ3MubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlcyA9IGNoaWxkRnJhZ3NbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLGRvYyk7Ci0gICAgICAgIAotICAgICAgICBFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGlsZEluc3RhbmNlcy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChjaGlsZEluc3RhbmNlc1tqXSAhPSBudWxsKXsKLSAgICAgICAgICAJYWRkQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlc1tqXSxjaGlsZEZyYWdzW2ldLG5hbWVzcGFjZVRhYmxlKTsgCi0gICAgICAgICAgCWluc3RhbmNlRG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jLmltcG9ydE5vZGUoY2hpbGRJbnN0YW5jZXNbal0sIHRydWUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBpbnN0YW5jZURvY3VtZW50OwotICAgICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDliYjg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKgotKiA8Y29weXJpZ2h0PgotKgotKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTQotKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQotKiByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSoKLSogPC9jb3B5cmlnaHQ+Ci0qCi0qIEZpbGUgcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvc3JjL2NvbS9pYm0vZXRvb2xzL3dlYnNlcnZpY2UvZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9JbXBsL1hTRENvbXBsZXhSYW5nZUZyYWdtZW50LmphdmEsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yIDEKLSogVmVyc2lvbiAxLjEgMDMvMDIvMjggMTU6MjU6MTgKLSovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEQXR0cmlidXRlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuWFNEVHlwZURlZmluaXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBpbnRlcm5hbEVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHksIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgIHJldHVybiBzZXRQYXJhbXNGb3JYU0RUeXBlRGVmKGluc3RhbmNlRG9jdW1lbnRzQ29weSkgJiYgcGFyYW1zVmFsaWQ7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHNldFBhcmFtc0ZvclhTRFBhcnRpY2xlKGluc3RhbmNlRG9jdW1lbnRzQ29weSkgJiYgcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsSVhTREZyYWdtZW50IGZyYWcpewotICAJYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gIAkKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBpKyspewotICAJICBpZihhdHRyaWJ1dGVGcmFnbWVudHNbaV0uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWcuZ2V0SUQoKSkpeyAgCi0gIAkgIAkgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gaW5zdGFuY2VEb2N1bWVudC5nZXRBdHRyaWJ1dGVzKCk7CQotICAJICAgICAgU3RyaW5nIG5hbWUgPSAoKFhTREF0dHJpYnV0ZVVzZSlhdHRyaWJ1dGVGcmFnbWVudHNbaV0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKSkuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gIAkgICAgICBwYXJhbXNWYWxpZCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVQYXJhbXNGcm9tSW5zdGFuY2VEb2N1bWVudHMobm9kZU1hcC5nZXROYW1lZEl0ZW0obmFtZSkpOwkKLSAgICAgIH0KLSAgCX0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JYU0RUeXBlRGVmKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMV07Ci0gICAgICBjaGlsZEluc3RhbmNlRG9jdW1lbnRzWzBdID0gaW5zdGFuY2VEb2N1bWVudHNbaV07Ci0gICAgICBpZiAoIWNoaWxkRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMsIGNoaWxkRnJhZy5nZXROYW1lKCkpKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoY2hpbGRJbnN0YW5jZURvY3VtZW50c1swXSxjaGlsZEZyYWcpOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgVmVjdG9yIGluc3RhbmNlc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIAotICAgICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5sLmdldExlbmd0aCgpOyBqKyspIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShqKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIGluc3RhbmNlc1ZlY3Rvci5hZGQobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZXNWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgIGluc3RhbmNlc1ZlY3Rvci5jb3B5SW50byhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoY2hpbGRJbnN0YW5jZURvY3VtZW50c1tpXSxjaGlsZEZyYWcpOwotICAgIAotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSxEb2N1bWVudCBkb2MpIHsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50czsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKTsKLSAgICBpZiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIHRhZ05hbWUsIGRvYyk7Ci0gICAgZWxzZQotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBnZW5JbnN0YW5jZXNGb3JYU0RQYXJ0aWNsZShnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgdGFnTmFtZSwgZG9jKTsKLSAgICAgIGlmKGdlblhTSVR5cGUpIGFkZFhTSVR5cGUoaW5zdGFuY2VEb2N1bWVudHMsIG5hbWVzcGFjZVRhYmxlKTsKLSAgCXJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBhZGRBdHRyaWJ1dGVzKEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCwgSVhTREZyYWdtZW50IGZyYWdtZW50LCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUgKXsKLSAgCQotICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBrKyspewotICAgICAgaWYoYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldElEKCkuc3RhcnRzV2l0aChmcmFnbWVudC5nZXRJRCgpKSl7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gKChYU0RBdHRyaWJ1dGVVc2UpYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCkpLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAgICAgICBhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0QXR0cmlidXRlc09uSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VEb2N1bWVudCxuYW1lKTsJCi0gICAgICB9Ci0gICAgfQotICAgCQotICAgCXJldHVybiBpbnN0YW5jZURvY3VtZW50OwotICB9Ci0gIAotICBwcml2YXRlIEVsZW1lbnRbXSBnZW5JbnN0YW5jZXNGb3JYU0RUeXBlRGVmKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgdGFnTmFtZSxEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBFbGVtZW50W10gZnJhZ21lbnRJbnN0YW5jZXMgPSBmcmFnbWVudHNbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLGRvYyk7Ci0gICAgICBpZiAoZnJhZ21lbnRJbnN0YW5jZXMubGVuZ3RoID4gMCl7Ci0gICAgICAJZnJhZ21lbnRJbnN0YW5jZXNbMF0gPSBhZGRBdHRyaWJ1dGVzKGZyYWdtZW50SW5zdGFuY2VzWzBdLGZyYWdtZW50c1tpXSxuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5hZGQoZnJhZ21lbnRJbnN0YW5jZXNbMF0pOwotICAgICAgfQotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZURvY3VtZW50c0NvcHkuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IChFbGVtZW50KWluc3RhbmNlRG9jdW1lbnRzQ29weS5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIHRhZ05hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2VuSW5zdGFuY2VzRm9yWFNEUGFydGljbGUoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIFN0cmluZyB0YWdOYW1lLERvY3VtZW50IGRvYykgewotICAgIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtjaGlsZEZyYWdzLmxlbmd0aF07Ci0gICAgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlcyA9IGNoaWxkRnJhZ3NbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgICAKLSAgICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRJbnN0YW5jZXMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBpZiAoY2hpbGRJbnN0YW5jZXNbal0gIT0gbnVsbCl7Ci0gICAgICAgICAgCWFkZEF0dHJpYnV0ZXMoY2hpbGRJbnN0YW5jZXNbal0sY2hpbGRGcmFnc1tpXSxuYW1lc3BhY2VUYWJsZSk7IAotICAgICAgICAgIAlpbnN0YW5jZURvY3VtZW50LmFwcGVuZENoaWxkKGRvYy5pbXBvcnROb2RlKGNoaWxkSW5zdGFuY2VzW2pdLCB0cnVlKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERGVmYXVsdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWZhdWx0RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5YmQwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWZhdWx0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFNERGVmYXVsdEZyYWdtZW50IGV4dGVuZHMgWFNERnJhZ21lbnQgewotICBwdWJsaWMgWFNERGVmYXVsdEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nW10gcGFyYW0gPSBuZXcgU3RyaW5nWzFdOwotICAgIHBhcmFtWzBdID0gcGFyc2VyLmdldFBhcmFtZXRlcihnZXRJRCgpKTsKLSAgICBzZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSwgcGFyYW0pOwotICAgIHJldHVybiBpc0VsZW1lbnQoYWRkUm9vdEVsZW1lbnQocGFyYW1bMF0pKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGFkZFJvb3RFbGVtZW50KFN0cmluZyBlbGVtZW50KSB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5ST09UX0VMRU1FTlRfU1RBUlRfVEFHKTsKLSAgICBzYi5hcHBlbmQoZWxlbWVudCk7Ci0gICAgc2IuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlJPT1RfRUxFTUVOVF9FTkRfVEFHKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0VsZW1lbnQoU3RyaW5nIGVsZW1lbnRTdHJpbmcpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIChYTUxVdGlscy5zdHJpbmdUb0VsZW1lbnQoZWxlbWVudFN0cmluZykgIT0gbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkgewotICAgIFN0cmluZyBwYXJhbSA9IGdldFBhcmFtZXRlclZhbHVlKGdldElEKCksIDApOwotICAgIHJldHVybiAocGFyYW0gPT0gbnVsbCB8fCBpc0VsZW1lbnQoYWRkUm9vdEVsZW1lbnQocGFyYW0pKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShnZXRJRCgpLCAwKTsKLSAgICByZXR1cm4gKHBhcmFtID09IG51bGwgfHwgaXNFbGVtZW50KGFkZFJvb3RFbGVtZW50KHBhcmFtKSkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0gICAgU3RyaW5nIHBhcmFtID0gZ2V0UGFyYW1ldGVyVmFsdWUoZ2V0SUQoKSwgMCk7Ci0gICAgcmV0dXJuIChwYXJhbSA9PSBudWxsIHx8IGlzRWxlbWVudChhZGRSb290RWxlbWVudChwYXJhbSkpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgYm9vbGVhbiBwYXJhbVZhbGlkID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBTdHJpbmcgaW5zdGFuY2VTdHJpbmcgPSBYTUxVdGlscy5zZXJpYWxpemUoaW5zdGFuY2VEb2N1bWVudHNbaV0sIHRydWUpOwotICAgICAgaWYgKGluc3RhbmNlU3RyaW5nICE9IG51bGwgJiYgaW5zdGFuY2VTdHJpbmcubGVuZ3RoKCkgPiAwKQotICAgICAgICBzYi5hcHBlbmQoaW5zdGFuY2VTdHJpbmcpOwotICAgICAgZWxzZQotICAgICAgICBwYXJhbVZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIFN0cmluZ1tdIHBhcmFtID0ge3NiLnRvU3RyaW5nKCl9OwotICAgIHNldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpLCBwYXJhbSk7Ci0gICAgcmV0dXJuIHBhcmFtVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKSB7Ci0gICAgU3RyaW5nIHBhcmFtID0gZ2V0UGFyYW1ldGVyVmFsdWUoZ2V0SUQoKSwgMCk7Ci0gICAgaWYgKHBhcmFtID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3IEVsZW1lbnRbMF07Ci0gICAgRWxlbWVudCByb290OwotICAgIHRyeSB7Ci0gICAgICByb290ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoWE1MVXRpbHMuc3RyaW5nVG9FbGVtZW50KGFkZFJvb3RFbGVtZW50KHBhcmFtKSksIHRydWUpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgIHJldHVybiBuZXcgRWxlbWVudFswXTsKLSAgICB9Ci0gICAgTm9kZUxpc3QgbmwgPSByb290LmdldENoaWxkTm9kZXMoKTsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKLSAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaSk7Ci0gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRWZWN0b3IuYWRkKG5vZGUpOwotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZURvY3VtZW50VmVjdG9yLnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50VmVjdG9yLmdldChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRERlbGVnYXRpb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNjMyYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRERlbGVnYXRpb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFhTRERlbGVnYXRpb25GcmFnbWVudCBleHRlbmRzIFhTREZyYWdtZW50IGltcGxlbWVudHMgSVhTRERlbGVnYXRpb25GcmFnbWVudAotewotICBwcml2YXRlIElYU0RGcmFnbWVudCB4c2RGcmFnbWVudF87Ci0KLSAgcHVibGljIFhTRERlbGVnYXRpb25GcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICB4c2RGcmFnbWVudF8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotICAgIHN1cGVyLnNldE5hbWUobmFtZSk7Ci0gICAgaWYgKHhzZEZyYWdtZW50XyAhPSBudWxsKQotICAgICAgeHNkRnJhZ21lbnRfLnNldE5hbWUobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFN0cmluZ1tdIHBhcmFtcykKLSAgewotICAgIHhzZEZyYWdtZW50Xy5zZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXksIHBhcmFtcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBWZWN0b3IgcGFyYW1zKQotICB7Ci0gICAgeHNkRnJhZ21lbnRfLnNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy5nZXRQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8udmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VEb2N1bWVudHMpOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoSVhTREZyYWdtZW50IHhzZEZyYWdtZW50KQotICB7Ci0gICAgeHNkRnJhZ21lbnRfID0geHNkRnJhZ21lbnQ7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RFbGVtZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREVsZW1lbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDdhNTZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREVsZW1lbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDExOSAgIDEyMzUzOSBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBN+GxsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERWxlbWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGb3JtOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTREVsZW1lbnRGcmFnbWVudCBleHRlbmRzIFhTRERlbGVnYXRpb25GcmFnbWVudCBpbXBsZW1lbnRzIElYU0RFbGVtZW50RnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBpbnQgbWluT2NjdXJzXzsKLSAgcHJpdmF0ZSBpbnQgbWF4T2NjdXJzXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzTmlsXzsKLSAKLSAgCi0gIHB1YmxpYyBYU0RFbGVtZW50RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgaWYgKGNvbmZpZyAhPSBudWxsKQotICAgIHsKLSAgICAgIG1pbk9jY3Vyc18gPSBjb25maWcuZ2V0TWluT2NjdXJzKCk7Ci0gICAgICBtYXhPY2N1cnNfID0gY29uZmlnLmdldE1heE9jY3VycygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgbWluT2NjdXJzXyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUlOX09DQ1VSUzsKLSAgICAgIG1heE9jY3Vyc18gPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01BWF9PQ0NVUlM7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgSVhTREZyYWdtZW50IGVsZW1lbnRUeXBlRnJhZ21lbnQgPSBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICBzZXRJc05pbChwYXJzZXIpOwotICAgIGlmKGlzTmlsXylyZXR1cm4gdHJ1ZTsKLSAgICAJCi0gICAgaWYgKCFlbGVtZW50VHlwZUZyYWdtZW50LnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMoZWxlbWVudFR5cGVGcmFnbWVudC5nZXRJRCgpKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwgJiYgIXdpdGhpblJhbmdlKHBhcmFtcy5sZW5ndGgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0SXNOaWwoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBuaWwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldE5pbElEKCkpOwotICAgIGlmKG5pbCAhPSBudWxsKSBpc05pbF8gPSB0cnVlOwotICAgIGVsc2UgaXNOaWxfID0gZmFsc2U7Ci0gICAgcmV0dXJuIGlzTmlsXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKQotICB7Ci0gICAgSVhTREZyYWdtZW50IGVsZW1lbnRUeXBlRnJhZ21lbnQgPSBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMoZWxlbWVudFR5cGVGcmFnbWVudC5nZXRJRCgpKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwgJiYgIXdpdGhpblJhbmdlKHBhcmFtcy5sZW5ndGgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZWxlbWVudFR5cGVGcmFnbWVudC52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KQotICB7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwgJiYgIXdpdGhpblJhbmdlKHBhcmFtcy5sZW5ndGgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KQotICB7Ci0gICAgaWYgKCF3aXRoaW5SYW5nZShwYXJhbUluZGV4ICsgMSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKWdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgU3RyaW5nIHBhcmFtID0gZ2V0UGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIHBhcmFtSW5kZXgpOwotICAgIGlmIChwYXJhbSAhPSBudWxsICYmIHBhcmFtLmxlbmd0aCgpIDw9IDAgJiYgIXhzZEVsZW1lbnQuaXNOaWxsYWJsZSgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlci5zZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihjb25maWcpOwotICAgIG1pbk9jY3Vyc18gPSBjb25maWcuZ2V0TWluT2NjdXJzKCk7Ci0gICAgbWF4T2NjdXJzXyA9IGNvbmZpZy5nZXRNYXhPY2N1cnMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gaW5zdGFuY2VEb2N1bWVudHM7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBTdHJpbmcgd3NkbFBhcnROYW1lID0gY29uZmlnLmdldFdTRExQYXJ0TmFtZSgpOwotICAgIE5vZGVMaXN0IG5sID0gaW5zdGFuY2VEb2N1bWVudHNDb3B5WzBdLmdldENoaWxkTm9kZXMoKTsKLSAgICAKLSAgICBpZihpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uaGFzQXR0cmlidXRlKFhTSV9OSUxfQVRUUklCVVRFKSl7Ci0gICAgICBTdHJpbmcgbmlsID0gaW5zdGFuY2VEb2N1bWVudHNDb3B5WzBdLmdldEF0dHJpYnV0ZShYU0lfTklMX0FUVFJJQlVURSk7Ci0gICAgICBpZihuaWwuZXF1YWxzKFRSVUUpKSBpc05pbF8gPSB0cnVlOyAKLSAgICB9ICAKLSAgICAKLSAgICAKLSAgICBpZiAoY29uZmlnLmdldElzV1NETFBhcnQoKSAmJiBjb25maWcuZ2V0U3R5bGUoKSA9PSBGcmFnbWVudENvbnN0YW50cy5TVFlMRV9SUEMgJiYgd3NkbFBhcnROYW1lICE9IG51bGwgJiYgd3NkbFBhcnROYW1lLmxlbmd0aCgpID4gMCAmJiBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoID09IDEgJiYgd3NkbFBhcnROYW1lLmVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0VGFnTmFtZSgpKSkKLSAgICB7Ci0gICAgICBWZWN0b3IgY2hpbGRFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShpKTsKLSAgICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICBjaGlsZEVsZW1lbnRzLmFkZChub2RlKTsKLSAgICAgIH0KLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IChFbGVtZW50W10pY2hpbGRFbGVtZW50cy50b0FycmF5KG5ldyBFbGVtZW50WzBdKTsKLSAgICB9Ci0gICAgSVhTREZyYWdtZW50IGVsZW1lbnRUeXBlRnJhZ21lbnQgPSBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50c0NvcHksIGdldE5hbWUoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlRnJhZ21lbnQuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKHNldEVsZW1lbnRzVGFnTmFtZShpbnN0YW5jZURvY3VtZW50c0NvcHksIGVsZW1lbnRUeXBlRnJhZ21lbnQuZ2V0TmFtZSgpKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBYU0lfTklMX0FUVFJJQlVURSA9ICJ4c2k6bmlsIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgVFJVRSA9ICJ0cnVlIjsKLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykKLSAgewotICAJCi0gIAlFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgaWYoaXNOaWxfKXsgCi0gICAgICBmb3IoaW50IGo9MDtqIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoO2orKyl7ICAKLSAgICAgIAlpbnN0YW5jZURvY3VtZW50c1tqXS5zZXRBdHRyaWJ1dGUoWFNJX05JTF9BVFRSSUJVVEUsVFJVRSk7Ci0gICAgICAJTm9kZUxpc3Qgbm9kZUxpc3QgPSBpbnN0YW5jZURvY3VtZW50c1tqXS5nZXRDaGlsZE5vZGVzKCk7IAotICAgICAgICBpbnQgbGVuZ3RoID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgICAgIGZvcihpbnQgaSA9MDtpIDwgbGVuZ3RoO2krKyl7Ci0gICAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbal0ucmVtb3ZlQ2hpbGQobm9kZUxpc3QuaXRlbSgwKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gIAotICAgIH0KLSAgICBpbnN0YW5jZURvY3VtZW50cyA9IHNldEVsZW1lbnRzVGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFN0cmluZyB3c2RsUGFydE5hbWUgPSBjb25maWcuZ2V0V1NETFBhcnROYW1lKCk7Ci0gICAgaWYgKGNvbmZpZy5nZXRJc1dTRExQYXJ0KCkgJiYgY29uZmlnLmdldFN0eWxlKCkgPT0gRnJhZ21lbnRDb25zdGFudHMuU1RZTEVfUlBDICYmIHdzZGxQYXJ0TmFtZSAhPSBudWxsICYmIHdzZGxQYXJ0TmFtZS5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGluc3RhbmNlRG9jdW1lbnRzOwotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFsxXTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzWzBdID0gZG9jLmNyZWF0ZUVsZW1lbnQod3NkbFBhcnROYW1lKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHNDb3B5W2ldICE9IG51bGwpCi0gICAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbMF0uYXBwZW5kQ2hpbGQoaW5zdGFuY2VEb2N1bWVudHNDb3B5W2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpCi0gIHsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIGlmIChjb25maWcuZ2V0UGFydEVuY29kaW5nKCkgPT0gRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfTElURVJBTCkKLSAgICB7Ci0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgICAgLy8gVHJ5IHRvIHJlc29sdmUgdGhlIGVsZW1lbnQsIHNpbmNlIGFuIGVsZW1lbnQgd2l0aCBhIHJlZiBjYW4gbmV2ZXIgYmUgZ2xvYmFsCi0gICAgICBpZiAoeHNkRWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICAgIHhzZEVsZW1lbnQgPSB4c2RFbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgICAKLSAgICAgIGlmICh4c2RFbGVtZW50LmlzR2xvYmFsKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoeHNkRWxlbWVudC5pc1NldEZvcm0oKSkKLSAgICAgICAgICByZXR1cm4gKHhzZEVsZW1lbnQuZ2V0Rm9ybSgpLmdldFZhbHVlKCkgPT0gWFNERm9ybS5RVUFMSUZJRUQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuICh4c2RFbGVtZW50LmdldFNjaGVtYSgpLmdldEVsZW1lbnRGb3JtRGVmYXVsdCgpLmdldFZhbHVlKCkgPT0gWFNERm9ybS5RVUFMSUZJRUQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkKLSAgewotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBTdHJpbmdCdWZmZXIgdGFnTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBpZiAoaXNJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc1VSSSA9IG51bGw7Ci0gICAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgICAgaWYgKHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgICAgICBuc1VSSSA9IHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgbnNVUkkgPSB4c2RFbGVtZW50LmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgaWYgKG5zVVJJICE9IG51bGwgJiYgbnNVUkkubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShuc1VSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgICB0YWdOYW1lLmFwcGVuZChwcmVmaXgpOwotICAgICAgICB0YWdOYW1lLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgICB9Ci0gICAgfQotICAgIFN0cmluZyB4c2RFbGVtZW50TmFtZSA9IHhzZEVsZW1lbnQuZ2V0TmFtZSgpOwotICAgIGlmICh4c2RFbGVtZW50TmFtZSA9PSBudWxsIHx8IHhzZEVsZW1lbnROYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgewotICAgICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICAgIGlmICh4c2RFbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgeHNkRWxlbWVudE5hbWUgPSB4c2RFbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAgICAgZWxzZQotICAgICAgICB4c2RFbGVtZW50TmFtZSA9IGdldE5hbWUoKTsKLSAgICB9Ci0gICAgdGFnTmFtZS5hcHBlbmQoeHNkRWxlbWVudE5hbWUpOwotICAgIHJldHVybiB0YWdOYW1lLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gd2l0aGluUmFuZ2UoaW50IHNpemUpCi0gIHsKLSAgICBpZiAoc2l6ZSA8IG1pbk9jY3Vyc18pCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1heE9jY3Vyc18gIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEICYmIHNpemUgPiBtYXhPY2N1cnNfKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TWluT2NjdXJzKGludCBtaW5PY2N1cnMpCi0gIHsKLSAgICBtaW5PY2N1cnNfID0gbWluT2NjdXJzOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRNaW5PY2N1cnMoKQotICB7Ci0gICAgcmV0dXJuIG1pbk9jY3Vyc187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNYXhPY2N1cnMoaW50IG1heE9jY3VycykKLSAgewotICAgIG1heE9jY3Vyc18gPSBtYXhPY2N1cnM7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE1heE9jY3VycygpCi0gIHsKLSAgICByZXR1cm4gbWF4T2NjdXJzXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNOaWxsYWJsZSgpCi0gIHsKLSAgCWlmKGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCkuZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZSgibmlsbGFibGUiKS5lcXVhbHMoInRydWUiKSkKLSAgCSAgcmV0dXJuIHRydWU7Ci0gIAlyZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzTmlsKCkKLSAgewotICAJcmV0dXJuIGlzTmlsXzsKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmlsSUQoKQotICB7Ci0gIAlyZXR1cm4gZ2V0SUQoKSArIElYU0RFbGVtZW50RnJhZ21lbnQuTklMOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERW1wdHlGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERW1wdHlGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTIyNThkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREVtcHR5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTREVtcHR5RnJhZ21lbnQgZXh0ZW5kcyBYU0RGcmFnbWVudCB7Ci0gIHByaXZhdGUgaW50IG9jY3VyYW5jZV87Ci0KLSAgcHVibGljIFhTREVtcHR5RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgb2NjdXJhbmNlXyA9IDA7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgb2NjdXJhbmNlID0gcGFyc2VyLmdldFBhcmFtZXRlcihnZXRJRCgpKTsKLSAgICB0cnkgewotICAgICAgb2NjdXJhbmNlXyA9IEludGVnZXIucGFyc2VJbnQob2NjdXJhbmNlKTsKLSAgICAgIHJldHVybiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgIG9jY3VyYW5jZV8gPSAtMTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBTdHJpbmdbXSBwYXJhbXMpIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFZlY3RvciBwYXJhbXMpIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgaWYgKG9jY3VyYW5jZV8gPCAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgZWxzZSB7Ci0gICAgICBTdHJpbmdbXSBwYXJhbXMgPSBuZXcgU3RyaW5nW29jY3VyYW5jZV9dOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgcGFyYW1zW2ldID0gIiI7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcGFyYW1zOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotICAgIGlmIChwYXJhbUluZGV4ID49IDAgJiYgcGFyYW1JbmRleCA8IG9jY3VyYW5jZV8pCi0gICAgICByZXR1cm4gIiI7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpIHsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIGludCBtaW4gPSB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7Ci0gICAgaW50IG1heCA9IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsKLSAgICByZXR1cm4gKG9jY3VyYW5jZV8gPj0gMCAmJiBvY2N1cmFuY2VfID49IG1pbiAmJiAobWF4ID09IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCB8fCBvY2N1cmFuY2VfIDw9IG1heCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgcmV0dXJuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICByZXR1cm4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOyBpKyspIHsKLSAgICAgIE5vZGVMaXN0IG5vZGVMaXN0ID0gaW5zdGFuY2VEb2N1bWVudHNDb3B5W2ldLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGlmIChub2RlTGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICBlbHNlIGlmIChub2RlTGlzdC5nZXRMZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5vZGVMaXN0Lml0ZW0oMCk7Ci0gICAgICAgIGlmIChub2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5URVhUX05PREUgfHwgIWlzV2hpdGVzcGFjZShub2RlLmdldE5vZGVWYWx1ZSgpKSkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICBvY2N1cmFuY2VfID0gaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsKLSAgICByZXR1cm4gcGFyYW1zVmFsaWQgJiYgdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1doaXRlc3BhY2UoU3RyaW5nIHMpIHsKLSAgICBjaGFyW10gY2hhcnMgPSBzLnRvQ2hhckFycmF5KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGNoYXJzW2ldKSB8fCAhQ2hhcmFjdGVyLmlzU3BhY2VDaGFyKGNoYXJzW2ldKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREVtcHR5V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREVtcHR5UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjE4YTk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTREZyYWdtZW50IGV4dGVuZHMgRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNERnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWdfOwotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWZfOwotICBwcml2YXRlIGludCBzZWVkXzsKLQotICBwdWJsaWMgWFNERnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUpOwotICAgIGNvbmZpZ18gPSBjb25maWc7Ci0gICAgaWYgKGNvbmZpZ18gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RDb21wb25lbnQgY29tcG9uZW50ID0gY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgICB0eXBlRGVmXyA9IChYU0RUeXBlRGVmaW5pdGlvbiljb21wb25lbnQ7Ci0gICAgICBlbHNlCi0gICAgICAgIHR5cGVEZWZfID0gbnVsbDsKLSAgICB9Ci0gICAgc2VlZF8gPSAwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgY29uZmlnXyA9IGNvbmZpZzsKLSAgICBpZiAoY29uZmlnXyAhPSBudWxsKQotICAgIHsKLSAgICAgIFhTRENvbXBvbmVudCBjb21wb25lbnQgPSBjb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICAgIHNldFhTRFR5cGVEZWZpbml0aW9uKChYU0RUeXBlRGVmaW5pdGlvbiljb21wb25lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWYpCi0gIHsKLSAgICB0eXBlRGVmXyA9IHR5cGVEZWY7Ci0gIH0KLQotICBwdWJsaWMgWFNEVHlwZURlZmluaXRpb24gZ2V0WFNEVHlwZURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHR5cGVEZWZfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBuZXcgU3RyaW5nW2luc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGhdOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBpbnRlcm5hbEVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHksIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBwYXJhbXNbaV0gPSAiIjsKLSAgICAgIE5vZGVMaXN0IG5vZGVMaXN0ID0gaW5zdGFuY2VEb2N1bWVudHNDb3B5W2ldLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGlmIChub2RlTGlzdC5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5vZGVMaXN0Lml0ZW0oMCk7Ci0gICAgICAgIGlmIChub2RlTGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLlRFWFRfTk9ERSkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyYW1zW2ldID0gbm9kZS5nZXROb2RlVmFsdWUoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgc2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCksIHBhcmFtcyk7Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkICYmIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudFtdIGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cywgU3RyaW5nIHRhZ05hbWUpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHMgPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXcgRWxlbWVudFswXTsKLSAgICBWZWN0b3IgaW5zdGFuY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpbnN0YW5jZURvY3VtZW50c1tpXSA9PSBudWxsKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIFN0cmluZyBpbnN0YW5jZVRhZ05hbWUgPSB0cmltUHJlZml4KGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldFRhZ05hbWUoKSk7Ci0gICAgICBpZiAoaW5zdGFuY2VUYWdOYW1lLmVxdWFscyh0YWdOYW1lKSkKLSAgICAgICAgaW5zdGFuY2VzQ29weS5hZGQoaW5zdGFuY2VEb2N1bWVudHNbaV0pOwotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VzQ29weS5zaXplKCldOwotICAgIGluc3RhbmNlc0NvcHkuY29weUludG8oaW5zdGFuY2VzKTsKLSAgICByZXR1cm4gaW5zdGFuY2VzOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyB0cmltUHJlZml4KFN0cmluZyBzKQotICB7Ci0gICAgU3RyaW5nIHNDb3B5ID0gbmV3IFN0cmluZyhzKTsKLSAgICBpbnQgY29sb25JbmRleCA9IHNDb3B5LmluZGV4T2YoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgIGlmIChjb2xvbkluZGV4ICE9IC0xICYmIGNvbG9uSW5kZXggKyAxIDwgc0NvcHkubGVuZ3RoKCkgJiYgISgoU3RyaW5nLnZhbHVlT2Yoc0NvcHkuY2hhckF0KGNvbG9uSW5kZXggKyAxKSkpLmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5DT0xPTikpKQotICAgICAgc0NvcHkgPSBzQ29weS5zdWJzdHJpbmcoY29sb25JbmRleCArIDEsIHNDb3B5Lmxlbmd0aCgpKTsKLSAgICByZXR1cm4gc0NvcHk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRm9yTmlsKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLERvY3VtZW50IGRvYyl7Ci0gIAlFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFsxXTsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICAgIH0KLSAgICByZXR1cm4gKGdlblhTSVR5cGUgPyBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnRzLCBuYW1lc3BhY2VUYWJsZSkgOiBpbnN0YW5jZURvY3VtZW50cyk7Ci0gIAkKLSAgfQotICAKLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsRG9jdW1lbnQgZG9jKSB7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCkpOwotICAgIGlmIChwYXJhbXMgPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXcgRWxlbWVudFswXTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtwYXJhbXMubGVuZ3RoXTsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgTm9kZSB0ZXh0Tm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZShwYXJhbXNbaV0pOwotICAgICAgaW5zdGFuY2VEb2N1bWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IGluc3RhbmNlRG9jdW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiAoZ2VuWFNJVHlwZSA/IGFkZFhTSVR5cGUoaW5zdGFuY2VEb2N1bWVudHMsIG5hbWVzcGFjZVRhYmxlKSA6IGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IHNldEF0dHJpYnV0ZXNPbkluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCxTdHJpbmcgYXR0TmFtZSl7Ci0gIAlTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgaWYgKHBhcmFtcyA9PSBudWxsKQotICAgICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnQ7Ci0gICAgaWYgKGlzQXR0cmlidXRlSW5zdGFuY2VOYW1lc3BhY2VRdWFsaWZpZWQoKSl7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50LnNldEF0dHJpYnV0ZU5TKGNvbmZpZ18uZ2V0WFNEQ29tcG9uZW50KCkuZ2V0U2NoZW1hKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksYXR0TmFtZSxwYXJhbXNbMF0pOwotICAgICAgCi0gICAgfQotICAgIGVsc2UgaW5zdGFuY2VEb2N1bWVudC5zZXRBdHRyaWJ1dGUoYXR0TmFtZSxwYXJhbXNbMF0pOwotICAgIAotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50OwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBzZXRBdHRyaWJ1dGVQYXJhbXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoTm9kZSBhdHRyaWJ1dGUpewotICAJU3RyaW5nW10gcGFyYW1zID0gbmV3IFN0cmluZ1sxXTsKLSAgCXBhcmFtc1swXSA9IGF0dHJpYnV0ZS5nZXROb2RlVmFsdWUoKTsgCi0gIAlzZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSwgcGFyYW1zKTsKLSAgICByZXR1cm4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZW5JRCgpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgbmV3SUQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgbmV3SUQuYXBwZW5kKGdldElEKCkpOwotICAgIG5ld0lELmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5JRF9TRVBFUkFUT1IpOwotICAgIG5ld0lELmFwcGVuZChzZWVkXysrKTsKLSAgICByZXR1cm4gbmV3SUQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzSW5zdGFuY2VOYW1lc3BhY2VRdWFsaWZpZWQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGNvbmZpZ18uZ2V0WFNEQ29tcG9uZW50KCkuZ2V0U2NoZW1hKCk7Ci0gICAgcmV0dXJuICghY29uZmlnXy5nZXRJc1dTRExQYXJ0KCkgJiYgY29uZmlnXy5nZXRQYXJ0RW5jb2RpbmcoKSA9PSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMICYmIHhzZFNjaGVtYS5nZXRFbGVtZW50Rm9ybURlZmF1bHQoKS5nZXRWYWx1ZSgpID09IFhTREZvcm0uUVVBTElGSUVEKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzQXR0cmlidXRlSW5zdGFuY2VOYW1lc3BhY2VRdWFsaWZpZWQoKSB7Ci0gIAlYU0RTY2hlbWEgeHNkU2NoZW1hID0gY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKS5nZXRTY2hlbWEoKTsKLSAgICAKLSAgICByZXR1cm4gKCFjb25maWdfLmdldElzV1NETFBhcnQoKSAmJgotICAgICAgICAgICAgICAgIGNvbmZpZ18uZ2V0UGFydEVuY29kaW5nKCkgPT0gRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfTElURVJBTCAmJgotICAgICAgICAgICAgICAgIHhzZFNjaGVtYS5nZXRBdHRyaWJ1dGVGb3JtRGVmYXVsdCgpLmdldFZhbHVlKCkgPT0gWFNERm9ybS5RVUFMSUZJRUQpOwotCi0gIH0KLQotIAotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShIYXNodGFibGUgbmFtZXNwYWNlVGFibGUpIHsKLSAgICBTdHJpbmdCdWZmZXIgdGFnTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBpZiAoaXNJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc1VSSSA9IGNvbmZpZ18uZ2V0WFNEQ29tcG9uZW50KCkuZ2V0U2NoZW1hKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShuc1VSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgdGFnTmFtZS5hcHBlbmQocHJlZml4KTsKLSAgICAgIHRhZ05hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICB9Ci0gICAgdGFnTmFtZS5hcHBlbmQoZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gdGFnTmFtZS50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnRbXSBhZGRYU0lUeXBlKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cywgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlKQotICB7Ci0gICAgWFNEQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IGNvbmZpZ18uZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzICE9IG51bGwgJiYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KSkKLSAgICB7Ci0gICAgICBTdHJpbmcgeHNkQ29tcG9uZW50TmFtZSA9ICgoWFNETmFtZWRDb21wb25lbnQpeHNkQ29tcG9uZW50KS5nZXROYW1lKCk7Ci0gICAgICBpZiAoeHNkQ29tcG9uZW50TmFtZSAhPSBudWxsICYmIHhzZENvbXBvbmVudE5hbWUubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldID09IG51bGwpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICBTdHJpbmcgeHNpVVJJID0gRnJhZ21lbnRDb25zdGFudHMuVVJJX1hTSTsKLSAgICAgICAgICBTdHJpbmcgeHNpUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSSh4c2lVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgICBTdHJpbmcgeHNpVHlwZVVSSSA9IHhzZENvbXBvbmVudC5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICBTdHJpbmcgeHNpVHlwZVByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoeHNpVHlwZVVSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgICAgIDsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgYXR0ck5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgYXR0ck5hbWUuYXBwZW5kKHhzaVByZWZpeCk7Ci0gICAgICAgICAgYXR0ck5hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgICAgICBhdHRyTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuWFNJX1RZUEUpOwotICAgICAgICAgIFN0cmluZ0J1ZmZlciBhdHRyVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgYXR0clZhbHVlLmFwcGVuZCh4c2lUeXBlUHJlZml4KTsKLSAgICAgICAgICBhdHRyVmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgICAgICBhdHRyVmFsdWUuYXBwZW5kKHhzZENvbXBvbmVudE5hbWUpOwotICAgICAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldLnNldEF0dHJpYnV0ZShhdHRyTmFtZS50b1N0cmluZygpLCBhdHRyVmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKQotICB7Ci0gICAgaWYgKCFzdXBlci52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpKTsKLSAgICBpbnQgbGVuZ3RoID0gKHBhcmFtcyAhPSBudWxsKSA/IHBhcmFtcy5sZW5ndGggOiAwOwotICAgIGludCBtaW4gPSBjb25maWdfLmdldE1pbk9jY3VycygpOwotICAgIGludCBtYXggPSBjb25maWdfLmdldE1heE9jY3VycygpOwotICAgIHJldHVybiAobGVuZ3RoID49IG1pbiAmJiAobWF4ID09IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCB8fCBsZW5ndGggPD0gbWF4KSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoU3RyaW5nIG5zVVJJLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUpCi0gIHsKLSAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZyluYW1lc3BhY2VUYWJsZS5nZXQobnNVUkkpOwotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAocHJlZml4ID09IG51bGwgfHwgcHJlZml4Lmxlbmd0aCgpIDw9IDApCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHByZWZpeENvcHkgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBwcmVmaXhDb3B5LmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5RTkFNRV9QUkVGSVgpOwotICAgICAgcHJlZml4Q29weS5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoaSkpOwotICAgICAgaSsrOwotICAgICAgaWYgKCFuYW1lc3BhY2VUYWJsZS5jb250YWlucyhwcmVmaXhDb3B5LnRvU3RyaW5nKCkpKQotICAgICAgewotICAgICAgICBuYW1lc3BhY2VUYWJsZS5wdXQobnNVUkksIHByZWZpeENvcHkudG9TdHJpbmcoKSk7Ci0gICAgICAgIHByZWZpeCA9IHByZWZpeENvcHkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByZWZpeDsKLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50IHNldEVsZW1lbnRUYWdOYW1lKEVsZW1lbnQgZSwgU3RyaW5nIHRhZ05hbWUpCi0gIHsKLSAgICBpZiAoIWUuZ2V0VGFnTmFtZSgpLmVxdWFscyh0YWdOYW1lKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgRG9jdW1lbnQgZG9jID0gZS5nZXRPd25lckRvY3VtZW50KCk7Ci0gICAgICAgIE5vZGVMaXN0IGNoaWxkcmVuID0gZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIE5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIEVsZW1lbnQgZUNvcHkgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBjaGlsZCA9IGNoaWxkcmVuLml0ZW0oaSk7Ci0gICAgICAgICAgaWYgKGNoaWxkICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAJICBlQ29weS5hcHBlbmRDaGlsZChjaGlsZC5jbG9uZU5vZGUodHJ1ZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGorKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShqKTsKLSAgICAgICAgICBpZiAoYXR0ciAhPSBudWxsICYmIChhdHRyIGluc3RhbmNlb2YgQXR0cikpCi0gICAgICAgICAgewotICAgICAgICAgICAgQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cilhdHRyOwotICAgICAgICAgICAgZUNvcHkuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5nZXROYW1lKCksIGF0dHJpYnV0ZS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVDb3B5OwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlOwotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnRbXSBzZXRFbGVtZW50c1RhZ05hbWUoRWxlbWVudFtdIGUsIFN0cmluZyB0YWdOYW1lKQotICB7Ci0gICAgRWxlbWVudFtdIGVDb3B5ID0gbmV3IEVsZW1lbnRbZS5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZUNvcHkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgZUNvcHlbaV0gPSBzZXRFbGVtZW50VGFnTmFtZShlW2ldLCB0YWdOYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVDb3B5OwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaW50ZXJuYWxFcXVhbHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSwgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgaWYgKCFjb25maWdfLmdldElzV1NETFBhcnQoKSkKLSAgICB7Ci0gICAgICBpbnQgbGVuZ3RoID0gKGluc3RhbmNlRG9jdW1lbnRzICE9IG51bGwpID8gaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoIDogMDsKLSAgICAgIGludCBsZW5ndGhDb3B5ID0gKGluc3RhbmNlRG9jdW1lbnRzQ29weSAhPSBudWxsKSA/IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGggOiAwOwotICAgICAgcmV0dXJuIChsZW5ndGggPT0gbGVuZ3RoQ29weSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cEFsbEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cEFsbEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZGQ4OTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBBbGxGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREdyb3VwQWxsRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFhTREdyb3VwQWxsRnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cEZyYWdtZW50IGltcGxlbWVudHMgSVhTREdyb3VwQWxsRnJhZ21lbnQgewotICBwcml2YXRlIFN0cmluZyBncm91cElEXzsKLQotICBwdWJsaWMgWFNER3JvdXBBbGxGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICAgIGdyb3VwSURfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIFN0cmluZyBncm91cElEID0gcGFyc2VyLmdldFBhcmFtZXRlcihnZXRJRCgpKTsKLSAgICBpZiAoZ3JvdXBJRF8gIT0gbnVsbCAmJiBncm91cElEICE9IG51bGwgJiYgZ3JvdXBJRF8uZXF1YWxzKGdyb3VwSUQpKSB7Ci0gICAgICBzZXRHcm91cE1lbWJlcklEc09yZGVyaW5nKHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoZ3JvdXBJRF8pKTsKLSAgICAgIGJvb2xlYW4gdmFsdWVzVmFsaWQgPSB0cnVlOwotICAgICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEXyk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChncm91cE1lbWJlckZyYWdtZW50c1tpXSAhPSBudWxsICYmICFncm91cE1lbWJlckZyYWdtZW50c1tpXS5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgICAgdmFsdWVzVmFsaWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2YWx1ZXNWYWxpZDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBncm91cElEXyA9IG51bGw7Ci0gICAgICByZW1vdmVHcm91cElEcygpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIHJlbW92ZUdyb3VwSURzKCk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzICE9IG51bGwgJiYgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoID4gMCkgewotICAgICAgZ3JvdXBJRF8gPSBjcmVhdGVJbnN0YW5jZSgpOwotICAgICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFncyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURfKTsKLSAgICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzT3JkZXIgPSBuZXcgU3RyaW5nW2dyb3VwTWVtYmVyRnJhZ3MubGVuZ3RoXTsKLSAgICAgIGludCBvcmRlckluZGV4ID0gMDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgYm9vbGVhbiBwYXJhbXNBc3NpZ25lZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyb3VwTWVtYmVyRnJhZ3MubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBpZiAoZ3JvdXBNZW1iZXJGcmFnc1tqXSAhPSBudWxsICYmIGdyb3VwTWVtYmVyRnJhZ3Nbal0uZ2V0TmFtZSgpLmVxdWFscyh0cmltUHJlZml4KGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldFRhZ05hbWUoKSkpKSB7Ci0gICAgICAgICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZSA9IHtpbnN0YW5jZURvY3VtZW50c1tpXX07Ci0gICAgICAgICAgICBpZiAoIWdyb3VwTWVtYmVyRnJhZ3Nbal0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkSW5zdGFuY2UpKQotICAgICAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZ3JvdXBNZW1iZXJJRHNPcmRlcltvcmRlckluZGV4XSA9IGdyb3VwTWVtYmVyRnJhZ3Nbal0uZ2V0SUQoKTsKLSAgICAgICAgICAgIG9yZGVySW5kZXgrKzsKLSAgICAgICAgICAgIHBhcmFtc0Fzc2lnbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGdyb3VwTWVtYmVyRnJhZ3Nbal0gPSBudWxsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghcGFyYW1zQXNzaWduZWQpCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZ3JvdXBNZW1iZXJGcmFncy5sZW5ndGg7IGsrKykgewotICAgICAgICBpZiAoZ3JvdXBNZW1iZXJGcmFnc1trXSAhPSBudWxsKSB7Ci0gICAgICAgICAgZ3JvdXBNZW1iZXJJRHNPcmRlcltvcmRlckluZGV4XSA9IGdyb3VwTWVtYmVyRnJhZ3Nba10uZ2V0SUQoKTsKLSAgICAgICAgICBvcmRlckluZGV4Kys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHNldEdyb3VwTWVtYmVySURzT3JkZXJpbmcoZ3JvdXBNZW1iZXJJRHNPcmRlcik7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0R3JvdXBBbGxJbnN0YW5jZSgpIHsKLSAgICBpZiAoZ3JvdXBJRF8gPT0gbnVsbCkKLSAgICAgIGdyb3VwSURfID0gY3JlYXRlR3JvdXBJbnN0YW5jZSgpOwotICAgIHJldHVybiBncm91cElEXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGdldEdyb3VwQWxsSW5zdGFuY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldEdyb3VwTWVtYmVySURzT3JkZXJpbmcoU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHMpIHsKLSAgICBpZiAoZ3JvdXBNZW1iZXJJRHMgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmdbXSBleGlzdGluZ0dyb3VwTWVtYmVySURzID0gZ2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRF8pOwotICAgIGlmIChleGlzdGluZ0dyb3VwTWVtYmVySURzLmxlbmd0aCAhPSBncm91cE1lbWJlcklEcy5sZW5ndGgpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVmVjdG9yIGV4aXN0aW5nR3JvdXBNZW1iZXJJRHNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleGlzdGluZ0dyb3VwTWVtYmVySURzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBleGlzdGluZ0dyb3VwTWVtYmVySURzVmVjdG9yLmFkZChleGlzdGluZ0dyb3VwTWVtYmVySURzW2ldKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlcklEcy5sZW5ndGg7IGorKykgewotICAgICAgaWYgKCFleGlzdGluZ0dyb3VwTWVtYmVySURzVmVjdG9yLnJlbW92ZShncm91cE1lbWJlcklEc1tqXSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNldEZyYWdtZW50c09yZGVyKGdyb3VwTWVtYmVySURzKSkgewotICAgICAgc2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRF8sIGdyb3VwTWVtYmVySURzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBtb3ZlVXBHcm91cE1lbWJlcklEKFN0cmluZyBncm91cE1lbWJlcklEKSB7Ci0gICAgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHMgPSBnZXRHcm91cE1lbWJlcklEcyhncm91cElEXyk7Ci0gICAgaWYgKGdyb3VwTWVtYmVySUQuZXF1YWxzKGdyb3VwTWVtYmVySURzWzBdKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IGdyb3VwTWVtYmVySURzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoZ3JvdXBNZW1iZXJJRC5lcXVhbHMoZ3JvdXBNZW1iZXJJRHNbaV0pKSB7Ci0gICAgICAgIGdyb3VwTWVtYmVySURzW2ldID0gZ3JvdXBNZW1iZXJJRHNbaSAtIDFdOwotICAgICAgICBncm91cE1lbWJlcklEc1tpIC0gMV0gPSBncm91cE1lbWJlcklEOwotICAgICAgICBpZiAoc2V0RnJhZ21lbnRzT3JkZXIoZ3JvdXBNZW1iZXJJRHMpKSB7Ci0gICAgICAgICAgc2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRF8sIGdyb3VwTWVtYmVySURzKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBtb3ZlRG93bkdyb3VwTWVtYmVySUQoU3RyaW5nIGdyb3VwTWVtYmVySUQpIHsKLSAgICBTdHJpbmdbXSBncm91cE1lbWJlcklEcyA9IGdldEdyb3VwTWVtYmVySURzKGdyb3VwSURfKTsKLSAgICBpZiAoZ3JvdXBNZW1iZXJJRC5lcXVhbHMoZ3JvdXBNZW1iZXJJRHNbZ3JvdXBNZW1iZXJJRHMubGVuZ3RoIC0gMV0pKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJJRHMubGVuZ3RoIC0gMTsgaSsrKSB7Ci0gICAgICBpZiAoZ3JvdXBNZW1iZXJJRC5lcXVhbHMoZ3JvdXBNZW1iZXJJRHNbaV0pKSB7Ci0gICAgICAgIGdyb3VwTWVtYmVySURzW2ldID0gZ3JvdXBNZW1iZXJJRHNbaSArIDFdOwotICAgICAgICBncm91cE1lbWJlcklEc1tpICsgMV0gPSBncm91cE1lbWJlcklEOwotICAgICAgICBpZiAoc2V0RnJhZ21lbnRzT3JkZXIoZ3JvdXBNZW1iZXJJRHMpKSB7Ci0gICAgICAgICAgc2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRF8sIGdyb3VwTWVtYmVySURzKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cEFsbFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZUZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZUZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMjRlMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFhTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cENob2ljZUZyYWdtZW50IHsKLSAgcHVibGljIFhTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlRml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNhZGYwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RHcm91cENob2ljZUZyYWdtZW50IGV4dGVuZHMgWFNER3JvdXBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RHcm91cENob2ljZUZyYWdtZW50IHsKLSAgcHJpdmF0ZSBYU0RQYXJ0aWNsZVtdIGNob2ljZXNfOwotICBwcml2YXRlIEhhc2h0YWJsZSBjaG9pY2VJbmRleGVzXzsKLQotICBwdWJsaWMgWFNER3JvdXBDaG9pY2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICAgIGNob2ljZXNfID0gbnVsbDsKLSAgICBjaG9pY2VJbmRleGVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIHN1cGVyLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKTsKLSAgICBTdHJpbmdbXSBncm91cElEcyA9IGdldEdyb3VwSURzKCk7Ci0gICAgY2hvaWNlSW5kZXhlc18uY2xlYXIoKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBTdHJpbmcgc2VsZWN0ZWRDaG9pY2VGcmFnSUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKGdyb3VwSURzW2ldKTsKLSAgICAgIGludCBjaG9pY2VJbmRleCA9IDA7Ci0gICAgICBJWFNERnJhZ21lbnRbXSBjaG9pY2VGcmFncyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzW2ldKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hvaWNlRnJhZ3MubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgaWYgKGNob2ljZUZyYWdzW2pdLmdldElEKCkuZXF1YWxzKHNlbGVjdGVkQ2hvaWNlRnJhZ0lEKSkgewotICAgICAgICAgIGNob2ljZUluZGV4ID0gajsKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IChwYXJhbXNWYWxpZCAmJiBjaG9pY2VGcmFnc1tqXS52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRHNbaV0sIGNob2ljZUluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIHJlbW92ZUdyb3VwSURzKCk7Ci0gICAgY2hvaWNlSW5kZXhlc18uY2xlYXIoKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHMgIT0gbnVsbCkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBTdHJpbmcgZ3JvdXBJRCA9IGNyZWF0ZUdyb3VwQ2hvaWNlSW5zdGFuY2UoMCk7Ci0gICAgICAgIElYU0RGcmFnbWVudFtdIGNob2ljZUZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hvaWNlRnJhZ3MubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBpZiAoY2hvaWNlRnJhZ3Nbal0uZ2V0TmFtZSgpLmVxdWFscyh0cmltUHJlZml4KGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldFRhZ05hbWUoKSkpKSB7Ci0gICAgICAgICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBjaG9pY2VGcmFnc1tqXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VzID0gZ2V0SW5zdGFuY2VEb2N1bWVudFBhcnRpdGlvbihpbnN0YW5jZURvY3VtZW50cywgaSwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpLCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCkpOwotICAgICAgICAgICAgaWYgKCFjaG9pY2VGcmFnc1tqXS5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoY2hpbGRJbnN0YW5jZXMpKQotICAgICAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgc2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRCwgaik7Ci0gICAgICAgICAgICBpZiAoY2hpbGRJbnN0YW5jZXMubGVuZ3RoID4gMCkKLSAgICAgICAgICAgICAgaSA9IGkgKyBjaGlsZEluc3RhbmNlcy5sZW5ndGggLSAxOyAvLyBtaW51cyAxIGJlY2F1c2UgdGhlcmUncyBhbiBpKysgaW4gdGhlIG91dGVyIGZvciBsb29wCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2V0SW5zdGFuY2VEb2N1bWVudFBhcnRpdGlvbihFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMsIGludCBzdGFydCwgaW50IG1pblNpemUsIGludCBtYXhTaXplKSB7Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBpbnN0YW5jZURvY3VtZW50c1tzdGFydF0uZ2V0VGFnTmFtZSgpOwotICAgIGludCBzaXplID0gMTsKLSAgICBmb3IgKGludCBpID0gc3RhcnQgKyAxOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRUYWdOYW1lKCkuZXF1YWxzKHRhZ05hbWUpKQotICAgICAgICBzaXplKys7Ci0gICAgICBlbHNlCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAobWF4U2l6ZSAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQgJiYgc2l6ZSA+IG1heFNpemUpIHsKLSAgICAgIHNpemUgPSBzaXplIC0gbWluU2l6ZTsKLSAgICAgIGlmIChzaXplID4gbWF4U2l6ZSkKLSAgICAgICAgc2l6ZSA9IG1heFNpemU7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBzdWJzZXQgPSBuZXcgRWxlbWVudFtzaXplXTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1YnNldC5sZW5ndGg7IGorKykgewotICAgICAgc3Vic2V0W2pdID0gaW5zdGFuY2VEb2N1bWVudHNbc3RhcnQgKyBqXTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1YnNldDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpIHsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZ1tdIGdyb3VwSURzID0gZ2V0R3JvdXBJRHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnRbXSBjaG9pY2VGcmFncyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzW2ldKTsKLSAgICAgIGludCBjaG9pY2VJbmRleCA9IGdldENob2ljZUluZGV4KGdyb3VwSURzW2ldKTsKLSAgICAgIEVsZW1lbnRbXSBjaG9pY2VGcmFnSW5zdGFuY2VzID0gY2hvaWNlRnJhZ3NbY2hvaWNlSW5kZXhdLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hvaWNlRnJhZ0luc3RhbmNlcy5sZW5ndGg7IGorKykgewotICAgICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuYWRkKGNob2ljZUZyYWdJbnN0YW5jZXNbal0pOwotICAgICAgfQotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZURvY3VtZW50c0NvcHkuc2l6ZSgpXTsKLSAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuY29weUludG8oaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHB1YmxpYyBYU0RQYXJ0aWNsZVtdIGdldENob2ljZXMoKSB7Ci0gICAgaWYgKGNob2ljZXNfID09IG51bGwpIHsKLSAgICAgIEVMaXN0IHBhcnRpY2xlcyA9IGdldFhTRE1vZGVsR3JvdXAoKS5nZXRQYXJ0aWNsZXMoKTsKLSAgICAgIGNob2ljZXNfID0gbmV3IFhTRFBhcnRpY2xlW3BhcnRpY2xlcy5zaXplKCldOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaG9pY2VzXy5sZW5ndGg7IGkrKykgewotICAgICAgICBjaG9pY2VzX1tpXSA9IChYU0RQYXJ0aWNsZSlwYXJ0aWNsZXMuZ2V0KGkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY2hvaWNlc187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUdyb3VwQ2hvaWNlSW5zdGFuY2UoaW50IGNob2ljZUluZGV4KSB7Ci0gICAgZ2V0Q2hvaWNlcygpOwotICAgIGlmIChjaG9pY2VJbmRleCA8IDAgfHwgY2hvaWNlSW5kZXggPiBjaG9pY2VzXy5sZW5ndGggLSAxKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgU3RyaW5nIGdyb3VwSUQgPSBjcmVhdGVHcm91cEluc3RhbmNlKCk7Ci0gICAgc2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRCwgY2hvaWNlSW5kZXgpOwotICAgIHJldHVybiBncm91cElEOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZSgwKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0Q2hvaWNlSW5kZXgoU3RyaW5nIGdyb3VwSUQpIHsKLSAgICBJbnRlZ2VyIGluZGV4ID0gKEludGVnZXIpY2hvaWNlSW5kZXhlc18uZ2V0KGdyb3VwSUQpOwotICAgIGlmIChpbmRleCAhPSBudWxsKQotICAgICAgcmV0dXJuIGluZGV4LmludFZhbHVlKCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDaG9pY2VJbmRleChTdHJpbmcgZ3JvdXBJRCwgaW50IGNob2ljZUluZGV4KSB7Ci0gICAgY2hvaWNlSW5kZXhlc18ucHV0KGdyb3VwSUQsIG5ldyBJbnRlZ2VyKGNob2ljZUluZGV4KSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0gIHsKLSAgICBTdHJpbmdbXSBncm91cElEcyA9IGdldEdyb3VwSURzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0aW9uSW5kZXggPSBnZXRDaG9pY2VJbmRleChncm91cElEc1tpXSk7Ci0gICAgICBpZiAoIWdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzW2ldKVtzZWxlY3Rpb25JbmRleF0udmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZVJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQwZTE0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZVJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBYU0RHcm91cENob2ljZVJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cENob2ljZUZyYWdtZW50IHsKLSAgcHVibGljIFhTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTQxMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREdyb3VwRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEV2lsZGNhcmQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTREdyb3VwRnJhZ21lbnQgZXh0ZW5kcyBYU0RNYXBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RHcm91cEZyYWdtZW50IHsKLSAgcHJpdmF0ZSBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXBfOwotICBwcml2YXRlIFZlY3RvciBncm91cElEc09yZGVyXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZ3JvdXBJRHNfOwotICAKLSAgcHVibGljIFhTREdyb3VwRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgICB4c2RNb2RlbEdyb3VwXyA9IHhzZE1vZGVsR3JvdXA7Ci0gICAgZ3JvdXBJRHNPcmRlcl8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgZ3JvdXBJRHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgYm9vbGVhbiB2YWx1ZXNWYWxpZCA9IHRydWU7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpKTsKLSAgICBWZWN0b3IgZnJhZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yIGdyb3VwSURzT3JkZXJDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIEhhc2h0YWJsZSBncm91cElEc0NvcHkgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IHBhcmFtcyAhPSBudWxsICYmIGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChwYXJhbXNbaV0gIT0gbnVsbCkgewotICAgICAgICBncm91cElEc09yZGVyQ29weS5hZGQocGFyYW1zW2ldKTsKLSAgICAgICAgZ3JvdXBJRHNDb3B5LnB1dChwYXJhbXNbaV0sIGdldEdyb3VwTWVtYmVySURzKHBhcmFtc1tpXSkpOwotICAgICAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKHBhcmFtc1tpXSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBpZiAoZ3JvdXBNZW1iZXJGcmFnbWVudHNbal0gIT0gbnVsbCkgewotICAgICAgICAgICAgZnJhZ3MuYWRkKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdKTsKLSAgICAgICAgICAgIGlmICghZ3JvdXBNZW1iZXJGcmFnbWVudHNbal0ucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICAgICAgICB2YWx1ZXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBncm91cElEc09yZGVyXyA9IGdyb3VwSURzT3JkZXJDb3B5OwotICAgIGdyb3VwSURzXyA9IGdyb3VwSURzQ29weTsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICBhZGRGcmFnbWVudHMoZnJhZ3MpOwotICAgIHJldHVybiB2YWx1ZXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICByZW1vdmVHcm91cElEcygpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIFN0cmluZyBwcmV2R3JvdXBJRCA9IG51bGw7Ci0gICAgU3RyaW5nIGN1cnJHcm91cElEID0gbnVsbDsKLSAgICBpbnQgZ3JvdXBNZW1iZXJJbmRleCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7ICkgewotICAgICAgaWYgKGN1cnJHcm91cElEID09IG51bGwpIHsKLSAgICAgICAgU3RyaW5nIG5ld0dyb3VwSUQgPSBjcmVhdGVJbnN0YW5jZSgpOwotICAgICAgICBwcmV2R3JvdXBJRCA9IGN1cnJHcm91cElEOwotICAgICAgICBjdXJyR3JvdXBJRCA9IG5ld0dyb3VwSUQ7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50W10gaW5zdGFuY2VQYXJ0aXRpb24gPSBudWxsOwotICAgICAgaW50IGogPSBncm91cE1lbWJlckluZGV4OwotICAgICAgYm9vbGVhbiBwYXJhbXNBc3NpZ25lZCA9IGZhbHNlOwotICAgICAgaW50IHdpbGRjYXJkRnJhZ0luZGV4ID0gLTE7Ci0gICAgICBkbyB7Ci0gICAgICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ3MgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhjdXJyR3JvdXBJRCk7Ci0gICAgICAgIFhTRENvbXBvbmVudCB4c2RDb21wb25lbnQgPSBncm91cE1lbWJlckZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICAgIGlmICh4c2RDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RXaWxkY2FyZCkgewotICAgICAgICAgIGlmICh3aWxkY2FyZEZyYWdJbmRleCA8IDApCi0gICAgICAgICAgICB3aWxkY2FyZEZyYWdJbmRleCA9IGo7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXROYW1lKCkuZXF1YWxzKHRyaW1QcmVmaXgoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpKSkpIHsKLSAgICAgICAgICBpbnN0YW5jZVBhcnRpdGlvbiA9IGdldEluc3RhbmNlRG9jdW1lbnRQYXJ0aXRpb24oaW5zdGFuY2VEb2N1bWVudHMsIGksIGdyb3VwTWVtYmVyRnJhZ3Nbal0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRNYXhPY2N1cnMoKSk7Ci0gICAgICAgICAgaWYgKCFncm91cE1lbWJlckZyYWdzW2pdLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZVBhcnRpdGlvbikpCi0gICAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIHBhcmFtc0Fzc2lnbmVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKGdyb3VwTWVtYmVyRnJhZ3Nbal0gaW5zdGFuY2VvZiBYU0RHcm91cEZyYWdtZW50KSB7Ci0gICAgICAgIAlncm91cE1lbWJlckZyYWdzW2pdLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChqID09IGdyb3VwTWVtYmVyRnJhZ3MubGVuZ3RoIC0gMSkgewotICAgICAgICAgIGogPSAwOwotICAgICAgICAgIFN0cmluZyBuZXdHcm91cElEOwotICAgICAgICAgIGlmICghcGFyYW1zQXNzaWduZWQpCi0gICAgICAgICAgICBuZXdHcm91cElEID0gY3JlYXRlSW5zdGFuY2UoKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdHcm91cElEID0gbnVsbDsKLSAgICAgICAgICBwcmV2R3JvdXBJRCA9IGN1cnJHcm91cElEOwotICAgICAgICAgIGN1cnJHcm91cElEID0gbmV3R3JvdXBJRDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgaisrOwotICAgICAgfSB3aGlsZSAoIXBhcmFtc0Fzc2lnbmVkICYmIGogIT0gZ3JvdXBNZW1iZXJJbmRleCk7Ci0gICAgICBncm91cE1lbWJlckluZGV4ID0gajsKLSAgICAgIGlmICghcGFyYW1zQXNzaWduZWQpIHsKLSAgICAgICAgaW5zdGFuY2VQYXJ0aXRpb24gPSBnZXRJbnN0YW5jZURvY3VtZW50UGFydGl0aW9uKGluc3RhbmNlRG9jdW1lbnRzLCBpLCBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQpOwotICAgICAgICBpZiAod2lsZGNhcmRGcmFnSW5kZXggPj0gMCkgewotICAgICAgICAgIGlmICh3aWxkY2FyZEZyYWdJbmRleCA+PSBncm91cE1lbWJlckluZGV4KSB7Ci0gICAgICAgICAgICByZW1vdmVHcm91cElEKGN1cnJHcm91cElEKTsKLSAgICAgICAgICAgIGN1cnJHcm91cElEID0gcHJldkdyb3VwSUQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdyb3VwTWVtYmVySW5kZXggPSB3aWxkY2FyZEZyYWdJbmRleDsKLSAgICAgICAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoY3Vyckdyb3VwSUQpOwotICAgICAgICAgIGlmICghZ3JvdXBNZW1iZXJGcmFnc1t3aWxkY2FyZEZyYWdJbmRleF0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlUGFydGl0aW9uKSkKLSAgICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgcGFyYW1zQXNzaWduZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGN1cnJHcm91cElEICE9IG51bGwgJiYgKHByZXZHcm91cElEID09IG51bGwgfHwgIWN1cnJHcm91cElELmVxdWFscyhwcmV2R3JvdXBJRCkpKSB7Ci0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICByZW1vdmVHcm91cElEKGN1cnJHcm91cElEKTsKLSAgICAgICAgICBjdXJyR3JvdXBJRCA9IHByZXZHcm91cElEOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpID0gaSArIGluc3RhbmNlUGFydGl0aW9uLmxlbmd0aDsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2V0SW5zdGFuY2VEb2N1bWVudFBhcnRpdGlvbihFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMsIGludCBzdGFydCwgaW50IG1heFNpemUpIHsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGluc3RhbmNlRG9jdW1lbnRzW3N0YXJ0XS5nZXRUYWdOYW1lKCk7Ci0gICAgaW50IHNpemUgPSAxOwotICAgIGZvciAoaW50IGkgPSBzdGFydCArIDE7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKG1heFNpemUgIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEICYmIHNpemUgPj0gbWF4U2l6ZSkKLSAgICAgICAgYnJlYWs7Ci0gICAgICBlbHNlIGlmIChpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRUYWdOYW1lKCkuZXF1YWxzKHRhZ05hbWUpKQotICAgICAgICBzaXplKys7Ci0gICAgICBlbHNlCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBFbGVtZW50W10gc3Vic2V0ID0gbmV3IEVsZW1lbnRbc2l6ZV07Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdWJzZXQubGVuZ3RoOyBqKyspIHsKLSAgICAgIHN1YnNldFtqXSA9IGluc3RhbmNlRG9jdW1lbnRzW3N0YXJ0ICsgal07Ci0gICAgfQotICAgIHJldHVybiBzdWJzZXQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKSB7Ci0gICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlcyA9IGdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZnJhZ21lbnRJbnN0YW5jZXMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmFkZChmcmFnbWVudEluc3RhbmNlc1tqXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBrKyspIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2tdID0gKEVsZW1lbnQpaW5zdGFuY2VEb2N1bWVudHNDb3B5LmdldChrKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNETW9kZWxHcm91cChYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICB4c2RNb2RlbEdyb3VwXyA9IHhzZE1vZGVsR3JvdXA7Ci0gIH0KLQotICBwdWJsaWMgWFNETW9kZWxHcm91cCBnZXRYU0RNb2RlbEdyb3VwKCkgewotICAgIHJldHVybiB4c2RNb2RlbEdyb3VwXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRHcm91cElEcygpIHsKLSAgICBTdHJpbmdbXSBncm91cElEcyA9IG5ldyBTdHJpbmdbZ3JvdXBJRHNPcmRlcl8uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBncm91cElEc1tpXSA9IChTdHJpbmcpZ3JvdXBJRHNPcmRlcl8uZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gZ3JvdXBJRHM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVHcm91cElEcygpIHsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICBncm91cElEc09yZGVyXy5jbGVhcigpOwotICAgIGdyb3VwSURzXy5jbGVhcigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlR3JvdXBJRChTdHJpbmcgZ3JvdXBJRCkgewotICAgIFN0cmluZ1tdIG1lbWJlckZyYWdJRHMgPSBnZXRHcm91cE1lbWJlcklEcyhncm91cElEKTsKLSAgICByZW1vdmVGcmFnbWVudHMobWVtYmVyRnJhZ0lEcyk7Ci0gICAgZ3JvdXBJRHNPcmRlcl8ucmVtb3ZlKGdyb3VwSUQpOwotICAgIGdyb3VwSURzXy5yZW1vdmUoZ3JvdXBJRCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBzZXRHcm91cE1lbWJlcklEcyhTdHJpbmcgZ3JvdXBJRCwgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHMpIHsKLSAgICBpZiAoZ3JvdXBJRCAhPSBudWxsKSB7Ci0gICAgICBpZiAoIWdyb3VwSURzT3JkZXJfLmNvbnRhaW5zKGdyb3VwSUQpKQotICAgICAgICBncm91cElEc09yZGVyXy5hZGQoZ3JvdXBJRCk7Ci0gICAgICBpZiAoZ3JvdXBNZW1iZXJJRHMgIT0gbnVsbCkKLSAgICAgICAgZ3JvdXBJRHNfLnB1dChncm91cElELCBncm91cE1lbWJlcklEcyk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdyb3VwSURzXy5wdXQoZ3JvdXBJRCwgbmV3IFN0cmluZ1swXSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoU3RyaW5nIGdyb3VwSUQsIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzKSB7Ci0gICAgYWRkRnJhZ21lbnRzKGdyb3VwTWVtYmVyRnJhZ21lbnRzKTsKLSAgICBTdHJpbmdbXSBpZHMgPSBuZXcgU3RyaW5nW2dyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlkc1tpXSA9IGdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldLmdldElEKCk7Ci0gICAgfQotICAgIHNldEdyb3VwTWVtYmVySURzKGdyb3VwSUQsIGlkcyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0R3JvdXBNZW1iZXJJRHMoU3RyaW5nIGdyb3VwSUQpIHsKLSAgICBpZiAoZ3JvdXBJRCAhPSBudWxsKSB7Ci0gICAgICBTdHJpbmdbXSBncm91cE1lbWJlcklEcyA9IChTdHJpbmdbXSlncm91cElEc18uZ2V0KGdyb3VwSUQpOwotICAgICAgaWYgKGdyb3VwTWVtYmVySURzICE9IG51bGwpCi0gICAgICAgIHJldHVybiBncm91cE1lbWJlcklEczsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50W10gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoU3RyaW5nIGdyb3VwSUQpIHsKLSAgICBTdHJpbmdbXSBncm91cE1lbWJlcklEcyA9IGdldEdyb3VwTWVtYmVySURzKGdyb3VwSUQpOwotICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gbmV3IElYU0RGcmFnbWVudFtncm91cE1lbWJlcklEcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldID0gZ2V0RnJhZ21lbnQoZ3JvdXBNZW1iZXJJRHNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gZ3JvdXBNZW1iZXJGcmFnbWVudHM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZUdyb3VwSW5zdGFuY2UoKSB7Ci0gICAgU3RyaW5nIGdyb3VwSUQgPSBnZW5JRCgpOwotICAgIEVMaXN0IHBhcnRpY2xlcyA9IGdldFhTRE1vZGVsR3JvdXAoKS5nZXRQYXJ0aWNsZXMoKTsKLSAgICBTdHJpbmdbXSBncm91cE1lbWJlcklEcyA9IG5ldyBTdHJpbmdbcGFydGljbGVzLnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aWNsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIFhTRFBhcnRpY2xlIHhzZFBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKXBhcnRpY2xlcy5nZXQoaSk7Ci0gICAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgeHNkUGFydGljbGVDb250ZW50ID0geHNkUGFydGljbGUuZ2V0Q29udGVudCgpOwotICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gdGhpc0NvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RDb21wb25lbnQpCi0gICAgICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQoKFhTRENvbXBvbmVudCl4c2RQYXJ0aWNsZUNvbnRlbnQpOwotICAgICAgZWxzZQotICAgICAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KG51bGwpOwotICAgICAgeHNkQ29uZmlnLnNldFN0eWxlKHRoaXNDb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0UGFydEVuY29kaW5nKHRoaXNDb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgICAgeHNkQ29uZmlnLnNldFdTRExQYXJ0TmFtZSh0aGlzQ29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICAgIGdyb3VwTWVtYmVySURzW2ldID0gZ2VuSUQoKTsKLSAgICAgIGFkZEZyYWdtZW50KGdyb3VwTWVtYmVySURzW2ldLCBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KHhzZENvbmZpZywgZ3JvdXBNZW1iZXJJRHNbaV0sIGdyb3VwTWVtYmVySURzW2ldKSk7Ci0gICAgfQotICAgIHNldEdyb3VwTWVtYmVySURzKGdyb3VwSUQsIGdyb3VwTWVtYmVySURzKTsKLSAgICByZXR1cm4gZ3JvdXBJRDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFGaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjA3OTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxRml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBYU0RHcm91cFNlcUZpeEZyYWdtZW50IGV4dGVuZHMgWFNER3JvdXBTZXFGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RHcm91cFNlcUZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcUZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OWI2NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNER3JvdXBTZXFGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTREdyb3VwU2VxRnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cEZyYWdtZW50IGltcGxlbWVudHMgSVhTREdyb3VwU2VxRnJhZ21lbnQgewotICBwdWJsaWMgWFNER3JvdXBTZXFGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVHcm91cFNlcUluc3RhbmNlKCkgewotICAgIHJldHVybiBjcmVhdGVHcm91cEluc3RhbmNlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkgewotICAgIHJldHVybiBjcmVhdGVHcm91cFNlcUluc3RhbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxUmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMmQ5NzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNER3JvdXBTZXFGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxUmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNETWFwRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRE1hcEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljM2EwOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNETWFwRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RBdHRyaWJ1dGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRE1hcEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNETWFwRnJhZ21lbnQgZXh0ZW5kcyBYU0RGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RNYXBGcmFnbWVudCB7Ci0gIHByaXZhdGUgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByaXZhdGUgVmVjdG9yIGZyYWdtZW50c09yZGVyXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZnJhZ21lbnRzXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYXR0cmlidXRlRnJhZ21lbnRzXzsKLQotICBwdWJsaWMgWFNETWFwRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIGZyYWdtZW50c09yZGVyXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmcmFnbWVudHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGF0dHJpYnV0ZUZyYWdtZW50c18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBib29sZWFuIHZhbHVlc1ZhbGlkID0gdHJ1ZTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCkpOwotICAgIFZlY3RvciBmcmFncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgYXR0ZnJhZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAocGFyYW1zW2ldICE9IG51bGwpIHsKLSAgICAgICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldEZyYWdtZW50KHBhcmFtc1tpXSk7Ci0gICAgICAgICAgaWYgKGZyYWcgIT0gbnVsbCkgewotICAgICAgICAgICAgZnJhZ3MuYWRkKGZyYWcpOwotICAgICAgICAgICAgaWYgKCFmcmFnLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgICAgICAgICAgdmFsdWVzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudCBhZnJhZyA9IGdldEF0dHJpYnV0ZUZyYWdtZW50KHBhcmFtc1tpXSk7Ci0gICAgICAgICAgCWlmIChhZnJhZyAhPSBudWxsKSB7Ci0gICAgICAgICAgCSAgYXR0ZnJhZ3MuYWRkKGFmcmFnKTsKLSAgICAgICAgICAgICAgaWYgKCFhZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgICAgICAgICAgIHZhbHVlc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9ICAKLSAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgCQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGFkZEF0dHJpYnV0ZUZyYWdtZW50cyhhdHRmcmFncyk7Ci0gICAgYWRkRnJhZ21lbnRzKGZyYWdzKTsKLSAgICByZXR1cm4gdmFsdWVzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBTdHJpbmdbXSBwYXJhbXMpIHsKLSAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldEZyYWdtZW50KHBhcmFtS2V5KTsKLSAgICBpZiAoZnJhZyAhPSBudWxsKQotICAgICAgZnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXksIHBhcmFtcyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0RnJhZ21lbnQocGFyYW1LZXkpOwotICAgIHJldHVybiAoZnJhZyAhPSBudWxsKSA/IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFmcmFnbWVudHNbaV0udmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0RnJhZ21lbnQocGFyYW1LZXkpOwotICAgIHJldHVybiAoZnJhZyAhPSBudWxsKSA/IGZyYWcudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpIDogdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0RnJhZ21lbnQocGFyYW1LZXkpOwotICAgIHJldHVybiAoZnJhZyAhPSBudWxsKSA/IGZyYWcudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCkgOiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgfQotCi0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl87Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudChTdHJpbmcgaWQsIElYU0RGcmFnbWVudCBmcmFnKSB7Ci0gICAgYWRkRnJhZ21lbnQoaWQsIGZyYWcsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKFN0cmluZ1tdIGlkLCBJWFNERnJhZ21lbnRbXSBmcmFncykgewotICAgIGFkZEZyYWdtZW50cyhpZCwgZnJhZ3MsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnQoSVhTREZyYWdtZW50IGZyYWcpIHsKLSAgICBhZGRGcmFnbWVudChmcmFnLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50cyhJWFNERnJhZ21lbnRbXSBmcmFncykgewotICAgIGFkZEZyYWdtZW50cyhmcmFncywgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudHMoVmVjdG9yIGZyYWdzKSB7Ci0gICAgYWRkRnJhZ21lbnRzKGZyYWdzLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50KFN0cmluZyBpZCwgSVhTREZyYWdtZW50IGZyYWcsIGJvb2xlYW4gYWRkVG9Db250cm9sbGVyKSB7Ci0gICAgZnJhZ21lbnRzT3JkZXJfLmFkZChpZCk7Ci0gICAgZnJhZ21lbnRzXy5wdXQoaWQsIGZyYWcpOwotICAgIGNvbnRyb2xsZXJfLmFkZFRvQ2FjaGUoaWQsIGZyYWcpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBhZGRBdHRyaWJ1dGVGcmFnbWVudChTdHJpbmcgaWQsIElYU0RGcmFnbWVudCBmcmFnKSB7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnRzXy5wdXQoaWQsIGZyYWcpOwotICAgIGNvbnRyb2xsZXJfLmFkZFRvQ2FjaGUoaWQsIGZyYWcpOwotICB9Ci0gIAotICBwdWJsaWMgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCkgewotICAgIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGZyYWdtZW50cyA9IG5ldyBYU0RBdHRyaWJ1dGVGcmFnbWVudFthdHRyaWJ1dGVGcmFnbWVudHNfLnNpemUoKV07Ci0gICAgSXRlcmF0b3IgaXQgPSBhdHRyaWJ1dGVGcmFnbWVudHNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgaW50IGkgPSAwOwotICAgIHdoaWxlKGl0Lmhhc05leHQoKSl7Ci0gICAgICBmcmFnbWVudHNbaV0gPSAoSVhTREF0dHJpYnV0ZUZyYWdtZW50KWl0Lm5leHQoKTsKLSAgICAgIGkrKzsgCi0gICAgfQotICAgIHJldHVybiBmcmFnbWVudHM7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50cyhTdHJpbmdbXSBpZCwgSVhTREZyYWdtZW50W10gZnJhZ3MsIGJvb2xlYW4gYWRkVG9Db250cm9sbGVyKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZC5sZW5ndGggJiYgaSA8IGZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBhZGRGcmFnbWVudChpZFtpXSwgZnJhZ3NbaV0sIGFkZFRvQ29udHJvbGxlcik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnQoSVhTREZyYWdtZW50IGZyYWcsIGJvb2xlYW4gYWRkVG9Db250cm9sbGVyKSB7Ci0gICAgYWRkRnJhZ21lbnQoZnJhZy5nZXRJRCgpLCBmcmFnLCBhZGRUb0NvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKElYU0RGcmFnbWVudFtdIGZyYWdzLCBib29sZWFuIGFkZFRvQ29udHJvbGxlcikgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFkZEZyYWdtZW50KGZyYWdzW2ldLmdldElEKCksIGZyYWdzW2ldLCBhZGRUb0NvbnRyb2xsZXIpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50cyhWZWN0b3IgZnJhZ3MsIGJvb2xlYW4gYWRkVG9Db250cm9sbGVyKSB7Ci0gICAgSXRlcmF0b3IgaXQgPSBmcmFncy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgIE9iamVjdCBvYmogPSBpdC5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSVhTREZyYWdtZW50KSB7Ci0gICAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gKElYU0RGcmFnbWVudClvYmo7Ci0gICAgICAgIGFkZEZyYWdtZW50KGZyYWcuZ2V0SUQoKSwgZnJhZywgYWRkVG9Db250cm9sbGVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRBdHRyaWJ1dGVGcmFnbWVudHMoVmVjdG9yIGZyYWdzKSB7Ci0gICAgSXRlcmF0b3IgaXQgPSBmcmFncy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgIE9iamVjdCBvYmogPSBpdC5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSVhTREF0dHJpYnV0ZUZyYWdtZW50KSB7Ci0gICAgICAgIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBmcmFnID0gKElYU0RBdHRyaWJ1dGVGcmFnbWVudClvYmo7Ci0gICAgICAgIGFkZEF0dHJpYnV0ZUZyYWdtZW50KGZyYWcuZ2V0SUQoKSwgZnJhZyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0RnJhZ21lbnRzT3JkZXIoKSB7Ci0gICAgU3RyaW5nW10gZnJhZ21lbnRzT3JkZXIgPSBuZXcgU3RyaW5nW2ZyYWdtZW50c09yZGVyXy5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzT3JkZXIubGVuZ3RoOyBpKyspIHsKLSAgICAgIGZyYWdtZW50c09yZGVyW2ldID0gKFN0cmluZylmcmFnbWVudHNPcmRlcl8uZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gZnJhZ21lbnRzT3JkZXI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBzZXRGcmFnbWVudHNPcmRlcihTdHJpbmdbXSBmcmFnbWVudHNPcmRlcikgewotICAgIGlmIChmcmFnbWVudHNPcmRlci5sZW5ndGggIT0gZnJhZ21lbnRzT3JkZXJfLnNpemUoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBWZWN0b3IgZnJhZ21lbnRzT3JkZXJDb3B5ID0gbmV3IFZlY3RvcihmcmFnbWVudHNPcmRlcl8pOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzT3JkZXIubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICghZnJhZ21lbnRzT3JkZXJDb3B5LnJlbW92ZShmcmFnbWVudHNPcmRlcltpXSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZnJhZ21lbnRzT3JkZXJfLmNsZWFyKCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBmcmFnbWVudHNPcmRlci5sZW5ndGg7IGorKykgewotICAgICAgZnJhZ21lbnRzT3JkZXJfLmFkZChmcmFnbWVudHNPcmRlcltqXSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBnZXRBdHRyaWJ1dGVGcmFnbWVudChTdHJpbmcgaWQpIHsKLSAgICByZXR1cm4gKElYU0RBdHRyaWJ1dGVGcmFnbWVudClhdHRyaWJ1dGVGcmFnbWVudHNfLmdldChpZCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoU3RyaW5nIGlkKSB7Ci0gICAgcmV0dXJuIChJWFNERnJhZ21lbnQpZnJhZ21lbnRzXy5nZXQoaWQpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudFtdIGdldEZyYWdtZW50cyhTdHJpbmdbXSBpZHMpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFncyA9IG5ldyBJWFNERnJhZ21lbnRbaWRzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFncy5sZW5ndGg7IGkrKykgewotICAgICAgZnJhZ3NbaV0gPSBnZXRGcmFnbWVudChpZHNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gZnJhZ3M7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50W10gZ2V0QWxsRnJhZ21lbnRzKCkgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IG5ldyBJWFNERnJhZ21lbnRbZnJhZ21lbnRzT3JkZXJfLnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHNPcmRlcl8uc2l6ZSgpOyBpKyspIHsKLSAgICAgIGZyYWdtZW50c1tpXSA9IGdldEZyYWdtZW50KChTdHJpbmcpZnJhZ21lbnRzT3JkZXJfLmdldChpKSk7Ci0gICAgfQotICAgIHJldHVybiBmcmFnbWVudHM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVGcmFnbWVudChTdHJpbmcgaWQpIHsKLSAgICByZW1vdmVGcmFnbWVudChpZCwgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVGcmFnbWVudHMoU3RyaW5nW10gaWRzKSB7Ci0gICAgcmVtb3ZlRnJhZ21lbnRzKGlkcywgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVBbGxGcmFnbWVudHMoKSB7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlRnJhZ21lbnQoU3RyaW5nIGlkLCBib29sZWFuIHJlbW92ZUZyb21Db250cm9sbGVyKSB7Ci0gICAgZnJhZ21lbnRzT3JkZXJfLnJlbW92ZShpZCk7Ci0gICAgZnJhZ21lbnRzXy5yZW1vdmUoaWQpOwotICAgIGlmIChyZW1vdmVGcm9tQ29udHJvbGxlcikKLSAgICAgIGNvbnRyb2xsZXJfLnJlbW92ZUZyb21DYWNoZShpZCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVGcmFnbWVudHMoU3RyaW5nW10gaWRzLCBib29sZWFuIHJlbW92ZUZyb21Db250cm9sbGVyKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHJlbW92ZUZyYWdtZW50KGlkc1tpXSwgcmVtb3ZlRnJvbUNvbnRyb2xsZXIpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUFsbEZyYWdtZW50cyhib29sZWFuIHJlbW92ZUZyb21Db250cm9sbGVyKSB7Ci0gICAgaWYgKHJlbW92ZUZyb21Db250cm9sbGVyKQotICAgIHsKLSAgICAgIEVudW1lcmF0aW9uIGlkcyA9IGZyYWdtZW50c18ua2V5cygpOwotICAgICAgd2hpbGUgKGlkcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlkID0gKFN0cmluZylpZHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgY29udHJvbGxlcl8ucmVtb3ZlRnJvbUNhY2hlKGlkKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZnJhZ21lbnRzT3JkZXJfLmNsZWFyKCk7Ci0gICAgZnJhZ21lbnRzXy5jbGVhcigpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKSB7Ci0gICAgICBFbnVtZXJhdGlvbiBpZHMgPSBhdHRyaWJ1dGVGcmFnbWVudHNfLmtleXMoKTsKLSAgICAgIHdoaWxlIChpZHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpZCA9IChTdHJpbmcpaWRzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGNvbnRyb2xsZXJfLnJlbW92ZUZyb21DYWNoZShpZCk7Ci0gICAgICB9Ci0gICAgCi0gICAgICBhdHRyaWJ1dGVGcmFnbWVudHNfLmNsZWFyKCk7Ci0gIH0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTc5YzZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQgewotICBwcml2YXRlIGludCBjYWxlbmRhclR5cGVfOwotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIGludCBjYWxlbmRhclR5cGUpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBjYWxlbmRhclR5cGVfID0gY2FsZW5kYXJUeXBlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgU3RyaW5nQnVmZmVyIGZyYWdtZW50TGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4V0ZyYWdtZW50SlNQLmpzcD8iKTsKLSAgICBmcmFnbWVudExpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKS5hcHBlbmQoJz0nKS5hcHBlbmQoY2FsZW5kYXJUeXBlXyk7Ci0gICAgcmV0dXJuIGZyYWdtZW50TGluay50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2NlMjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQgewotICBwcml2YXRlIGludCBjYWxlbmRhclR5cGVfOwotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgaW50IGNhbGVuZGFyVHlwZSkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIGNhbGVuZGFyVHlwZV8gPSBjYWxlbmRhclR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgU3RyaW5nQnVmZmVyIGZyYWdtZW50TGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VXRnJhZ21lbnRKU1AuanNwPyIpOwotICAgIGZyYWdtZW50TGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpLmFwcGVuZCgnPScpLmFwcGVuZChjYWxlbmRhclR5cGVfKTsKLSAgICByZXR1cm4gZnJhZ21lbnRMaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYTNlOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLk9wdGlvblZlY3RvcjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBFTGlzdCBlbGlzdCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGVsaXN0KTsKLSAgfQotICAKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIE9wdGlvblZlY3RvciB2KQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgdik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNFbnVtRml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZTllOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLk9wdGlvblZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERW51bWVyYXRpb25GYWNldDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IHsKLSAgcHJpdmF0ZSBPcHRpb25WZWN0b3Igb3B0aW9uVmVjdG9yXzsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIEVMaXN0IGVsaXN0KSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgb3B0aW9uVmVjdG9yXyA9IG5ldyBPcHRpb25WZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTxlbGlzdC5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBlbnVtVmFsdWUgPSAoKFhTREVudW1lcmF0aW9uRmFjZXQpZWxpc3QuZ2V0KGkpKS5nZXRMZXhpY2FsVmFsdWUoKTsKLSAgICAgIG9wdGlvblZlY3Rvcl8uYWRkT3B0aW9uKGVudW1WYWx1ZSxlbnVtVmFsdWUpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIE9wdGlvblZlY3RvciB2KQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgb3B0aW9uVmVjdG9yXyA9IG5ldyBPcHRpb25WZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTx2LnNpemUoKTtpKyspCi0gICAgICBvcHRpb25WZWN0b3JfLmFkZE9wdGlvbih2LmdldERpc3BsYXlWYWx1ZShpKSx2LmdldFZhbHVlKGkpKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIE9wdGlvblZlY3RvciBnZXRPcHRpb25WZWN0b3IoKQotICB7Ci0gICAgcmV0dXJuIG9wdGlvblZlY3Rvcl87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGU1OGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLk9wdGlvblZlY3RvcjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgRUxpc3QgZWxpc3QpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBlbGlzdCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIE9wdGlvblZlY3RvciB2KQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgdik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyODU2OGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljSW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0ZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWE0MTBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0ZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RTaW1wbGVBdG9taWNGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCBleHRlbmRzIFhTREZyYWdtZW50IGltcGxlbWVudHMgSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0gICAgU3RyaW5nIHBhcmFtID0gZ2V0UGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIHBhcmFtSW5kZXgpOwotICAgIGlmIChwYXJhbSAhPSBudWxsICYmICEoKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCkpLmlzVmFsaWRMaXRlcmFsKHBhcmFtKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTc1ODAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMzM2NmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlTGlzdEZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZUxpc3RGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdEZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YzY2NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE3ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RTaW1wbGVMaXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRExlbmd0aEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNYXhMZW5ndGhGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETWluTGVuZ3RoRmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTRFNpbXBsZUxpc3RGcmFnbWVudCBleHRlbmRzIFhTRE1hcEZyYWdtZW50IGltcGxlbWVudHMgSVhTRFNpbXBsZUxpc3RGcmFnbWVudAotewotICBwdWJsaWMgWFNEU2ltcGxlTGlzdEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyLnNldE5hbWUobmFtZSk7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgZnJhZ21lbnRzW2ldLnNldE5hbWUobmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBuZXcgU3RyaW5nW2luc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGhdOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBpbnRlcm5hbEVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHksIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBwYXJhbXNbaV0gPSAiIjsKLSAgICAgIE5vZGVMaXN0IG5vZGVMaXN0ID0gaW5zdGFuY2VEb2N1bWVudHNDb3B5W2ldLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGlmIChub2RlTGlzdC5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5vZGVMaXN0Lml0ZW0oMCk7Ci0gICAgICAgIGlmIChub2RlTGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLlRFWFRfTk9ERSkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyYW1zW2ldID0gbm9kZS5nZXROb2RlVmFsdWUoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUxpc3RJbnN0YW5jZSgpKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocGFyYW1zW2ldLnRyaW0oKSk7Ci0gICAgICBTdHJpbmdbXSBjaGlsZFBhcmFtcyA9IG5ldyBTdHJpbmdbc3QuY291bnRUb2tlbnMoKV07Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkUGFyYW1zLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBjaGlsZFBhcmFtc1tqXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgICAgY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlcyhjaGlsZEZyYWcuZ2V0SUQoKSwgY2hpbGRQYXJhbXMpOwotICAgICAgcGFyYW1zVmFsaWQgPSBwYXJhbXNWYWxpZCAmJiBjaGlsZEZyYWcudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykKLSAgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2ZyYWdtZW50cy5sZW5ndGhdOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgU3RyaW5nQnVmZmVyIGxpc3RWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtcyA9IGZyYWdtZW50c1tpXS5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZ21lbnRzW2ldLmdldElEKCkpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IHBhcmFtcyAhPSBudWxsICYmIGogPCBwYXJhbXMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChqICE9IDApCi0gICAgICAgICAgbGlzdFZhbHVlLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5MSVNUX1NFUEVSQVRPUik7Ci0gICAgICAgIGxpc3RWYWx1ZS5hcHBlbmQocGFyYW1zW2pdKTsKLSAgICAgIH0KLSAgICAgIE5vZGUgdGV4dE5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUobGlzdFZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgaW5zdGFuY2VEb2N1bWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IGluc3RhbmNlRG9jdW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiAoZ2VuWFNJVHlwZSA/IGFkZFhTSVR5cGUoaW5zdGFuY2VEb2N1bWVudHMsIG5hbWVzcGFjZVRhYmxlKSA6IGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlTGlzdEluc3RhbmNlKCkKLSAgewotICAgIFN0cmluZyBuZXdJRCA9IGdlbklEKCk7Ci0gICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIGludCBtaW4gPSAwOwotICAgIGludCBtYXggPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQ7Ci0gICAgWFNETGVuZ3RoRmFjZXQgeHNkTGVuZ3RoRmFjZXQgPSBzaW1wbGVUeXBlLmdldExlbmd0aEZhY2V0KCk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoeHNkTGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBtaW4gPSB4c2RMZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgICAgbWF4ID0geHNkTGVuZ3RoRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFhTRE1pbkxlbmd0aEZhY2V0IHhzZE1pbkxlbmd0aEZhY2V0ID0gc2ltcGxlVHlwZS5nZXRNaW5MZW5ndGhGYWNldCgpOwotICAgICAgWFNETWF4TGVuZ3RoRmFjZXQgeHNkTWF4TGVuZ3RoRmFjZXQgPSBzaW1wbGVUeXBlLmdldE1heExlbmd0aEZhY2V0KCk7Ci0gICAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgICAgaWYgKHhzZE1pbkxlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgICAgIG1pbiA9IHhzZE1pbkxlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBpZiAoeHNkTWF4TGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgICAgbWF4ID0geHNkTWF4TGVuZ3RoRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICB9Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gdGhpc0NvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudChzaW1wbGVUeXBlLmdldEl0ZW1UeXBlRGVmaW5pdGlvbigpKTsKLSAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICB4c2RDb25maWcuc2V0UGFydEVuY29kaW5nKHRoaXNDb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgIHhzZENvbmZpZy5zZXRXU0RMUGFydE5hbWUodGhpc0NvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgeHNkQ29uZmlnLnNldE1pbk9jY3VycyhtaW4pOwotICAgIHhzZENvbmZpZy5zZXRNYXhPY2N1cnMobWF4KTsKLSAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoeHNkQ29uZmlnLCBuZXdJRCwgZ2V0TmFtZSgpKTsKLSAgICBmcmFnLnNldElEKG5ld0lEKTsKLSAgICBmcmFnLnNldE5hbWUoZ2V0TmFtZSgpKTsKLSAgICBhZGRGcmFnbWVudChuZXdJRCwgZnJhZyk7Ci0gICAgcmV0dXJuIG5ld0lEOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTGlzdEluc3RhbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTg1ODRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVMaXN0RnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMyYzkzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uRml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZmYzgxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RTaW1wbGVVbmlvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNEU2ltcGxlVW5pb25GcmFnbWVudCBleHRlbmRzIFhTRE1hcEZyYWdtZW50IGltcGxlbWVudHMgSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgewotICBwcml2YXRlIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uW10gbWVtYmVyVHlwZXNfOwotCi0gIHB1YmxpYyBYU0RTaW1wbGVVbmlvbkZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICAgIG1lbWJlclR5cGVzXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgc3VwZXIuc2V0TmFtZShuYW1lKTsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgZnJhZ21lbnRzW2ldLnNldE5hbWUobmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICBpbnQgbnVtVHlwZXMgPSBnZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKS5sZW5ndGg7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIFZlY3RvciBtZW1iZXJGcmFnbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudCBjb21wYXRpYmxlRnJhZyA9IG51bGw7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVR5cGVzOyBqKyspIHsKLSAgICAgICAgSVhTREZyYWdtZW50IG1lbWJlckZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVVbmlvbkluc3RhbmNlKGopKTsKLSAgICAgICAgRWxlbWVudFtdIG1lbWJlckluc3RhbmNlRG9jdW1lbnQgPSBuZXcgRWxlbWVudFsxXTsKLSAgICAgICAgbWVtYmVySW5zdGFuY2VEb2N1bWVudFswXSA9IHNldEVsZW1lbnRUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzQ29weVtpXSwgbWVtYmVyRnJhZy5nZXROYW1lKCkpOwotICAgICAgICBpZiAobWVtYmVyRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMobWVtYmVySW5zdGFuY2VEb2N1bWVudCkpIHsKLSAgICAgICAgICBpZiAobWVtYmVyRnJhZy52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKSB7Ci0gICAgICAgICAgICBjb21wYXRpYmxlRnJhZyA9IG1lbWJlckZyYWc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoY29tcGF0aWJsZUZyYWcgPT0gbnVsbCkKLSAgICAgICAgICAgIGNvbXBhdGlibGVGcmFnID0gbWVtYmVyRnJhZzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGNvbXBhdGlibGVGcmFnICE9IG51bGwpCi0gICAgICAgIG1lbWJlckZyYWdtZW50cy5hZGQoY29tcGF0aWJsZUZyYWcpOwotICAgICAgZWxzZQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICBhZGRGcmFnbWVudHMobWVtYmVyRnJhZ21lbnRzKTsKLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKSB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgVmVjdG9yIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgRWxlbWVudFtdIGZyYWdtZW50SW5zdGFuY2VzID0gZnJhZ21lbnRzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICAgIGlmIChmcmFnbWVudEluc3RhbmNlcy5sZW5ndGggPiAwKQotICAgICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuYWRkKGZyYWdtZW50SW5zdGFuY2VzWzBdKTsKLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudHNDb3B5LnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50c0NvcHkuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSkpOwotICB9Ci0KLSAgcHVibGljIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uW10gZ2V0TWVtYmVyVHlwZURlZmluaXRpb25zKCkgewotICAgIGlmIChtZW1iZXJUeXBlc18gPT0gbnVsbCkgewotICAgICAgRUxpc3QgbWVtYmVyVHlwZXMgPSAoKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCkpLmdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpOwotICAgICAgbWVtYmVyVHlwZXNfID0gbmV3IFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uW21lbWJlclR5cGVzLnNpemUoKV07Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lbWJlclR5cGVzXy5sZW5ndGg7IGkrKykgewotICAgICAgICBtZW1iZXJUeXBlc19baV0gPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pbWVtYmVyVHlwZXMuZ2V0KGkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWVtYmVyVHlwZXNfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVVbmlvbkluc3RhbmNlKGludCBtZW1iZXJUeXBlSW5kZXgpIHsKLSAgICBnZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKTsKLSAgICBpZiAobWVtYmVyVHlwZUluZGV4IDwgMCB8fCBtZW1iZXJUeXBlSW5kZXggPiBtZW1iZXJUeXBlc18ubGVuZ3RoIC0gMSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFN0cmluZyBuZXdJRCA9IGdlbklEKCk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gdGhpc0NvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudChtZW1iZXJUeXBlc19bbWVtYmVyVHlwZUluZGV4XSk7Ci0gICAgeHNkQ29uZmlnLnNldFN0eWxlKHRoaXNDb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgeHNkQ29uZmlnLnNldFBhcnRFbmNvZGluZyh0aGlzQ29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudCh4c2RDb25maWcsIG5ld0lELCBnZXROYW1lKCkpOwotICAgIGZyYWcuc2V0SUQobmV3SUQpOwotICAgIGZyYWcuc2V0TmFtZShnZXROYW1lKCkpOwotICAgIGFkZEZyYWdtZW50KG5ld0lELCBmcmFnKTsKLSAgICByZXR1cm4gbmV3SUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkgewotICAgIHJldHVybiBjcmVhdGVVbmlvbkluc3RhbmNlKDApOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkODRiNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlVW5pb25GcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL0hUVFBVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9IVFRQVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTY1YzhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL0hUVFBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RTaW1wbGVBdG9taWNGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEU2ltcGxlTGlzdEZyYWdtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBIVFRQVXRpbAotewotICBwcml2YXRlIEhUVFBVdGlsKCkKLSAgewotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2VuVVJMRW5jb2RlZFBhcmFtZXRlcnMoSVhTREZyYWdtZW50IGZyYWdtZW50KQotICB7Ci0gICAgaWYgKGZyYWdtZW50IGluc3RhbmNlb2YgSVhTRFNpbXBsZUxpc3RGcmFnbWVudCkKLSAgICAgIHJldHVybiBnZW5VUkxFbmNvZGVkUGFyYW1zRnJvbUxpc3RGcmFnbWVudCgoSVhTRFNpbXBsZUxpc3RGcmFnbWVudClmcmFnbWVudCk7Ci0gICAgZWxzZSBpZiAoZnJhZ21lbnQgaW5zdGFuY2VvZiBJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQpCi0gICAgICByZXR1cm4gZ2VuVVJMRW5jb2RlZFBhcmFtc0Zyb21BdG9taWNGcmFnbWVudCgoSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50KWZyYWdtZW50KTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2VuVVJMRW5jb2RlZFhNTFBhcmFtZXRlcnMoZnJhZ21lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdlblVSTEVuY29kZWRQYXJhbXNGcm9tQXRvbWljRnJhZ21lbnQoSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IGZyYWdtZW50KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHVybEVuY29kZWRQYXJhbSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBmcmFnbWVudC5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZChVUkxVdGlscy5lbmNvZGUoZnJhZ21lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKCI9Iik7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShwYXJhbXNbaV0pKTsKLSAgICAgIGlmIChpIDwgcGFyYW1zLmxlbmd0aCAtIDEpCi0gICAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIiYiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVybEVuY29kZWRQYXJhbS50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdlblVSTEVuY29kZWRQYXJhbXNGcm9tTGlzdEZyYWdtZW50KElYU0RTaW1wbGVMaXN0RnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdXJsRW5jb2RlZFBhcmFtID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnbWVudC5nZXRBbGxGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZChVUkxVdGlscy5lbmNvZGUoZnJhZ21lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKCI9Iik7Ci0gICAgICBTdHJpbmdbXSBwYXJhbXMgPSBjaGlsZEZyYWdzW2ldLmdldFBhcmFtZXRlclZhbHVlcyhjaGlsZEZyYWdzW2ldLmdldElEKCkpOwotICAgICAgU3RyaW5nQnVmZmVyIHBhcmFtQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwYXJhbXMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtQnVmZmVyLmFwcGVuZChwYXJhbXNbal0pOwotICAgICAgICBpZiAoaiA8IHBhcmFtcy5sZW5ndGggLSAxKQotICAgICAgICAgIHBhcmFtQnVmZmVyLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5MSVNUX1NFUEVSQVRPUik7Ci0gICAgICB9Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShwYXJhbUJ1ZmZlci50b1N0cmluZygpKSk7Ci0gICAgICBpZiAoaSA8IGNoaWxkRnJhZ3MubGVuZ3RoIC0gMSkKLSAgICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZCgiJiIpOwotICAgIH0KLSAgICByZXR1cm4gdXJsRW5jb2RlZFBhcmFtLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2VuVVJMRW5jb2RlZFhNTFBhcmFtZXRlcnMoSVhTREZyYWdtZW50IGZyYWdtZW50KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHVybEVuY29kZWRQYXJhbSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KENvbnN0YW50cy5VUklfU09BUDExX0VOViwgQ29uc3RhbnRzLk5TX1BSRUZJWF9TT0FQX0VOVik7Ci0gICAgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KENvbnN0YW50cy5VUklfMjAwMV9TQ0hFTUFfWFNJLCBDb25zdGFudHMuTlNfUFJFRklYX1NDSEVNQV9YU0kpOwotICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChDb25zdGFudHMuVVJJXzIwMDFfU0NIRU1BX1hTRCwgQ29uc3RhbnRzLk5TX1BSRUZJWF9TQ0hFTUFfWFNEKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFswXTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGZyYWdtZW50Lmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyh0cnVlLCBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgWE1MVXRpbHMuY3JlYXRlTmV3RG9jdW1lbnQobnVsbCkpOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpCi0gICAgewotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKGZyYWdtZW50LmdldE5hbWUoKSkpOwotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZCgiPSIpOwotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZChVUkxVdGlscy5lbmNvZGUoWE1MVXRpbHMuc2VyaWFsaXplKGluc3RhbmNlRG9jdW1lbnRzW2ldLCB0cnVlKSkpOwotICAgICAgaWYgKGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGggLSAxKQotICAgICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKCImIik7Ci0gICAgfQotICAgIHJldHVybiB1cmxFbmNvZGVkUGFyYW0udG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvT3B0aW9uVmVjdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9PcHRpb25WZWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhZTViMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9PcHRpb25WZWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIE9wdGlvblZlY3RvcgotewotICBwcml2YXRlIFZlY3RvciBvcHRpb25zXzsKLSAgCi0gIHB1YmxpYyBPcHRpb25WZWN0b3IoKQotICB7Ci0gICAgb3B0aW9uc18gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZE9wdGlvbihTdHJpbmcgZGlzcGxheVZhbHVlLFN0cmluZyB2YWx1ZSkKLSAgewotICAgIG9wdGlvbnNfLmFkZEVsZW1lbnQobmV3IE9wdGlvbihkaXNwbGF5VmFsdWUsdmFsdWUpKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5VmFsdWUoaW50IHBvc2l0aW9uKQotICB7Ci0gICAgT3B0aW9uIG9wdGlvbiA9IChPcHRpb24pb3B0aW9uc18uZWxlbWVudEF0KHBvc2l0aW9uKTsKLSAgICByZXR1cm4gb3B0aW9uLmdldERpc3BsYXlWYWx1ZSgpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKGludCBwb3NpdGlvbikKLSAgewotICAgIE9wdGlvbiBvcHRpb24gPSAoT3B0aW9uKW9wdGlvbnNfLmVsZW1lbnRBdChwb3NpdGlvbik7Ci0gICAgcmV0dXJuIG9wdGlvbi5nZXRWYWx1ZSgpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IHNpemUoKQotICB7Ci0gICAgcmV0dXJuIG9wdGlvbnNfLnNpemUoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBPcHRpb24KLSAgewotICAgIHByaXZhdGUgU3RyaW5nIGRpc3BsYXlWYWx1ZV87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgdmFsdWVfOwotICAgIHB1YmxpYyBPcHRpb24oU3RyaW5nIGRpc3BsYXlWYWx1ZSxTdHJpbmcgdmFsdWUpCi0gICAgewotICAgICAgZGlzcGxheVZhbHVlXyA9IGRpc3BsYXlWYWx1ZTsKLSAgICAgIHZhbHVlXyA9IHZhbHVlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERpc3BsYXlWYWx1ZSgpCi0gICAgewotICAgICAgcmV0dXJuIGRpc3BsYXlWYWx1ZV87Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VmFsdWUoKQotICAgIHsKLSAgICAgIHJldHVybiB2YWx1ZV87Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9YU0RUeXBlRGVmaW5pdGlvblV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL1hTRFR5cGVEZWZpbml0aW9uVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzU5ZTE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL1hTRFR5cGVEZWZpbml0aW9uVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RUeXBlRGVmaW5pdGlvblV0aWwgewotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uVXRpbCgpIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgbnMgPSB0eXBlLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIHJldHVybiAobnMgIT0gbnVsbCAmJiBucy5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuVVJJX1hTRCkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSb290VHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZSkgewotICAgIGlmICh0eXBlID09IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBiYXNlVHlwZSA9IHR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICBpZiAoYmFzZVR5cGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIFN0cmluZyB0eXBlTlMgPSB0eXBlLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIFN0cmluZyBiYXNlVHlwZU5TID0gYmFzZVR5cGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGJhc2VUeXBlTmFtZSA9IGJhc2VUeXBlLmdldE5hbWUoKTsKLSAgICBib29sZWFuIHNhbWVOUzsKLSAgICBib29sZWFuIHNhbWVOYW1lOwotICAgIGlmICh0eXBlTlMgPT0gbnVsbCAmJiBiYXNlVHlwZU5TID09IG51bGwpCi0gICAgICBzYW1lTlMgPSB0cnVlOwotICAgIGVsc2UgaWYgKHR5cGVOUyAhPSBudWxsICYmIGJhc2VUeXBlTlMgIT0gbnVsbCAmJiB0eXBlTlMuZXF1YWxzKGJhc2VUeXBlTlMpKQotICAgICAgc2FtZU5TID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICBzYW1lTlMgPSBmYWxzZTsKLSAgICBpZiAodHlwZU5hbWUgPT0gbnVsbCAmJiBiYXNlVHlwZU5hbWUgPT0gbnVsbCkKLSAgICAgIHNhbWVOYW1lID0gdHJ1ZTsKLSAgICBlbHNlIGlmICh0eXBlTmFtZSAhPSBudWxsICYmIGJhc2VUeXBlTmFtZSAhPSBudWxsICYmIHR5cGVOYW1lLmVxdWFscyhiYXNlVHlwZU5hbWUpKQotICAgICAgc2FtZU5hbWUgPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHNhbWVOYW1lID0gZmFsc2U7Ci0gICAgcmV0dXJuIChzYW1lTlMgJiYgc2FtZU5hbWUpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFhTRFR5cGVEZWZpbml0aW9uIHJlc29sdmVUb1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFhTRFR5cGVEZWZpbml0aW9uIGN1cnJUeXBlID0gdHlwZTsKLSAgICB3aGlsZSAoIWlzWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKGN1cnJUeXBlKSkgewotICAgICAgaWYgKGlzUm9vdFR5cGVEZWZpbml0aW9uKGN1cnJUeXBlKSkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICBjdXJyVHlwZSA9IGN1cnJUeXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgfQotICAgIHJldHVybiBjdXJyVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NvYXBFbmNBcnJheShYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gY3VyclR5cGUgPSB0eXBlOwotICAgIGlmIChjdXJyVHlwZSAhPSBudWxsKQotICAgIHdoaWxlKGN1cnJUeXBlICE9IG51bGwpIHsKLSAgICAgIFN0cmluZyBucyA9IGN1cnJUeXBlLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgU3RyaW5nIG5hbWUgPSBjdXJyVHlwZS5nZXROYW1lKCk7Ci0gICAgICBpZiAoRnJhZ21lbnRDb25zdGFudHMuVVJJX1NPQVAuZXF1YWxzKG5zKSAmJiBGcmFnbWVudENvbnN0YW50cy5RTkFNRV9MT0NBTF9OQU1FX0FSUkFZLmVxdWFscyhuYW1lKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlIGlmIChpc1Jvb3RUeXBlRGVmaW5pdGlvbihjdXJyVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGVsc2UKLSAgICAgICAgY3VyclR5cGUgPSBjdXJyVHlwZS5nZXRCYXNlVHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY29tcGxleCB0eXBlIGNvbnRlbnQgZ2l2ZW4gYSBjb21wbGV4IHR5cGUuCi0gICAqIElmIGNvbXBsZXhUeXBlIGlzIGEgdXNlciBkZWZpbmVkIHR5cGU6Ci0gICAqICAgVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHVzZXIgZGVmaW5lZCBjb21wbGV4IGNvbnRlbnQgb2YgdGhpcyB0eXBlIG9yIHRoZSBjb250ZW50IG9mIHRoZSBleHRlbmRlZAotICAgKiAgIG9yIGRlcml2ZWQgdHlwZSBpZmYgdGhlIGV4dGVuZGVkIG9yIGRlcml2ZWQgdHlwZSBpcyBub3QgYSBidWlsdC1pbiBYU0QgdHlwZSAoZm9yIGV4YW1wbGUsIHhzZDphbnlUeXBlKS4KLSAgICogSWYgY29tcGxleFR5cGUgaXMgYSBidWlsdC1pbiBYU0QgdHlwZToKLSAgICogICBJdCB3aWxsIHJldHVybiB0aGUgY29tcGxleCBjb250ZW50IG9mIHRoaXMgYnVpbHQtaW4gWFNEIGNvbXBsZXggdHlwZS4gIEl0IHdpbGwgbm90IHJldHVybiB0aGUKLSAgICogICBjb21wbGV4IGNvbnRlbnQgb2YgaXRzIGV4dGVuZGVkIG9yIGRlcml2ZWQgdHlwZS4KLSAgICogQHBhcmFtIGNvbXBsZXhUeXBlIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4IHR5cGUuCi0gICAqIEByZXR1cm4gWFNEQ29tcGxleFR5cGVDb250ZW50IFhTRENvbXBsZXhUeXBlQ29udGVudCB0aGUgcmVzb2x2ZWQgY29tcGxleCB0eXBlIGNvbnRlbnQuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIFhTRENvbXBsZXhUeXBlQ29udGVudCBnZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlKQotICB7Ci0gICAgaWYgKCFpc1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihjb21wbGV4VHlwZSkpCi0gICAgewotICAgICAgWFNEVHlwZURlZmluaXRpb24gdHlwZSA9IGNvbXBsZXhUeXBlOwotICAgICAgd2hpbGUgKCFpc1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbih0eXBlKSAmJiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikpCi0gICAgICB7Ci0gICAgICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSAoKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbil0eXBlKS5nZXRDb250ZW50KCk7Ci0gICAgICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgIT0gbnVsbCkKLSAgICAgICAgICByZXR1cm4gY29tcGxleFR5cGVDb250ZW50OwotICAgICAgICBpZiAoaXNSb290VHlwZURlZmluaXRpb24odHlwZSkpCi0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHR5cGUgPSB0eXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGNvbXBsZXhUeXBlLmdldENvbnRlbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmMzhlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIERldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gIHB1YmxpYyBTdHJpbmcgZm9ybUxpbmtfOwotCi0gIHB1YmxpYyBEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCwgU3RyaW5nIGZvcm1MaW5rKSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIGZvcm1MaW5rXyA9IGZvcm1MaW5rOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkgewotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgcmV0dXJuIGZvcm1MaW5rXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL0ludm9rZVdTRExPcGVyYXRpb25Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvSW52b2tlV1NETE9wZXJhdGlvblRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y5NDY5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvSW52b2tlV1NETE9wZXJhdGlvblRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZnJhZ21lbnRWaWV3SURfOwotICBwcml2YXRlIFN0cmluZyBmcmFnbWVudE5hbWVBbmNob3JJRF87Ci0gIHByaXZhdGUgU3RyaW5nIGVuZFBvaW50XzsKLQotICBwdWJsaWMgSW52b2tlV1NETE9wZXJhdGlvblRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgIndzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9lbmFibGVkLmdpZiIsICJ3c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25faGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICBmcmFnbWVudFZpZXdJRF8gPSBGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STTsKLSAgICBmcmFnbWVudE5hbWVBbmNob3JJRF8gPSBudWxsOwotICAgIGVuZFBvaW50XyA9IG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKSB7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICBTdHJpbmdCdWZmZXIgZm9ybUxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9ybUxpbmsuYXBwZW5kKCJ3c2RsL2Zvcm1zL0ludm9rZVdTRExPcGVyYXRpb25Gb3JtLmpzcCIpOwotICAgIFN0cmluZyBuYW1lQW5jaG9ySUQgPSBnZXRGcmFnbWVudE5hbWVBbmNob3JJRCgpOwotICAgIGlmIChuYW1lQW5jaG9ySUQgIT0gbnVsbCAmJiBuYW1lQW5jaG9ySUQubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICBmb3JtTGluay5hcHBlbmQoIiMiKTsKLSAgICAgIGZvcm1MaW5rLmFwcGVuZChuYW1lQW5jaG9ySUQpOwotICAgICAgc2V0RnJhZ21lbnROYW1lQW5jaG9ySUQobnVsbCk7Ci0gICAgfQotICAgIHJldHVybiBmb3JtTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtQWN0aW9uTGluayhpbnQgb3BlcmF0aW9uVHlwZSxTdHJpbmcgZnJhZ21lbnRWaWV3SUQpCi0gIHsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpCi0gICAgewotICAgICAgY2FzZSBXU0RMT3BlcmF0aW9uRWxlbWVudC5PUEVSQVRJT05fVFlQRV9TT0FQOgotICAgICAgICBpZiAoZnJhZ21lbnRWaWV3SUQuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFKSkKLSAgICAgICAgICByZXR1cm4gIndzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbkpTUC5qc3AiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuICJ3c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcCI7Ci0gICAgICBjYXNlIFdTRExPcGVyYXRpb25FbGVtZW50Lk9QRVJBVElPTl9UWVBFX0hUVFBfR0VUOgotICAgICAgICByZXR1cm4gIndzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwIjsKLSAgICAgIGNhc2UgV1NETE9wZXJhdGlvbkVsZW1lbnQuT1BFUkFUSU9OX1RZUEVfSFRUUF9QT1NUOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJ3c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AiOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RnJhZ21lbnRWaWV3SUQoKSB7Ci0gICAgcmV0dXJuIGZyYWdtZW50Vmlld0lEXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEZyYWdtZW50Vmlld0lEKFN0cmluZyBmcmFnbWVudFZpZXdJRCkgewotICAgIGZyYWdtZW50Vmlld0lEXyA9IGZyYWdtZW50Vmlld0lEOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGcmFnbWVudE5hbWVBbmNob3JJRCgpIHsKLSAgICByZXR1cm4gZnJhZ21lbnROYW1lQW5jaG9ySURfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RnJhZ21lbnROYW1lQW5jaG9ySUQoU3RyaW5nIGZyYWdtZW50TmFtZUFuY2hvcklEKSB7Ci0gICAgZnJhZ21lbnROYW1lQW5jaG9ySURfID0gZnJhZ21lbnROYW1lQW5jaG9ySUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVuZFBvaW50KCkKLSAgewotICAgIHJldHVybiBlbmRQb2ludF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmRQb2ludChTdHJpbmcgZW5kUG9pbnQpCi0gIHsKLSAgICBlbmRQb2ludF8gPSBlbmRQb2ludDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL09wZW5XU0RMVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL09wZW5XU0RMVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjhjMWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9PcGVuV1NETFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIE9wZW5XU0RMVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLQotICAgIHB1YmxpYyBPcGVuV1NETFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfZW5hYmxlZC5naWYiLCAid3NkbC9pbWFnZXMvb3Blbl93c2RsX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzZGwvZm9ybXMvT3BlbldTRExGb3JtLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvU09BUE1lc3NhZ2VRdWV1ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1NPQVBNZXNzYWdlUXVldWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRmMGFmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvU09BUE1lc3NhZ2VRdWV1ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci0KLXB1YmxpYyBjbGFzcyBTT0FQTWVzc2FnZVF1ZXVlIGV4dGVuZHMgTWVzc2FnZVF1ZXVlCi17Ci0gIHByaXZhdGUgVmVjdG9yIGNhY2hlZE1lc3NhZ2VMaXN0XzsKLQotICBwdWJsaWMgU09BUE1lc3NhZ2VRdWV1ZSgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGNhY2hlZE1lc3NhZ2VMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsZWFyKCkKLSAgewotICAgIGNhY2hlZE1lc3NhZ2VMaXN0Xy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgIG1lc3NhZ2VMaXN0Xy5yZW1vdmVBbGxFbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlc0Zyb21MaXN0KCkKLSAgewotICAgIGlmIChtZXNzYWdlTGlzdF8uc2l6ZSgpID09IDApCi0gICAgICBjb3B5TWVzc2FnZXMoY2FjaGVkTWVzc2FnZUxpc3RfLG1lc3NhZ2VMaXN0Xyk7Ci0gICAgZWxzZQotICAgICAgY29weU1lc3NhZ2VzKG1lc3NhZ2VMaXN0XyxjYWNoZWRNZXNzYWdlTGlzdF8pOwotICAgIHJldHVybiBzdXBlci5nZXRNZXNzYWdlc0Zyb21MaXN0KCk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY29weU1lc3NhZ2VzKFZlY3RvciBzb3VyY2VMaXN0LFZlY3RvciBkZXN0TGlzdCkKLSAgewotICAgIGZvciAoaW50IGk9MDtpPHNvdXJjZUxpc3Quc2l6ZSgpO2krKykKLSAgICAgIGRlc3RMaXN0LmFkZEVsZW1lbnQoc291cmNlTGlzdC5lbGVtZW50QXQoaSkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEFkZFRvRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExBZGRUb0Zhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U5YjAwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEFkZFRvRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWRkVG9GYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gIHB1YmxpYyBXU0RMQWRkVG9GYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExCaW5kaW5nRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwNDc5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmluZGluZ0RldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wgewotCi0gIHB1YmxpYyBXU0RMQmluZGluZ0RldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCwgIndzZGwvZm9ybXMvV1NETEJpbmRpbmdEZXRhaWxzRm9ybS5qc3AiKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExCaW5kaW5nTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExCaW5kaW5nTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmZjMDkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQmluZGluZ05vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLQotLy8gV1NETCBiaW5kaW5nIG5vZGUgZm9yIHRoZSBXU0RMIE5hdmlnYXRvciBUcmVlIFZpZXcKLXB1YmxpYyBjbGFzcyBXU0RMQmluZGluZ05vZGUgZXh0ZW5kcyBXU0RMTmF2aWdhdG9yTm9kZQotewotICBwdWJsaWMgV1NETEJpbmRpbmdOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ3c2RsL2ltYWdlcy93c2RsX2JpbmRpbmdfbm9kZS5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTikpIHsKLSAgICAgICAgICBXU0RMT3BlcmF0aW9uTm9kZSB3c2RsT3BlcmF0aW9uTm9kZSA9IG5ldyBXU0RMT3BlcmF0aW9uTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICBhZGRDaGlsZCh3c2RsT3BlcmF0aW9uTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9PUEVSQVRJT04pKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgV1NETEJpbmRpbmdEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NETF9CSU5ESU5HX0RFVEFJTFMiKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWE4MTAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgV1NETERldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wgewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1fVklFV19JRCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPVVJDRV9WSUVXX0lEID0gMTsKLQotICBwcml2YXRlIGludCB2aWV3SWRfOwotCi0gIHB1YmxpYyBXU0RMRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0LCAid3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm0uanNwIik7Ci0gICAgdmlld0lkXyA9IEZPUk1fVklFV19JRDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0Vmlld0lkKCkgewotICAgIHJldHVybiB2aWV3SWRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Vmlld0lkKGludCB2aWV3SWQpIHsKLSAgICBpZiAodmlld0lkID09IEZPUk1fVklFV19JRCB8fCB2aWV3SWQgPT0gU09VUkNFX1ZJRVdfSUQpCi0gICAgICB2aWV3SWRfID0gdmlld0lkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdG9nZ2xlVmlld0lkKCkgewotICAgIGlmICh2aWV3SWRfID09IEZPUk1fVklFV19JRCkKLSAgICAgIHZpZXdJZF8gPSBTT1VSQ0VfVklFV19JRDsKLSAgICBlbHNlCi0gICAgICB2aWV3SWRfID0gRk9STV9WSUVXX0lEOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMzdkOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9GaWxlU3lzdGVtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wgewotICBwdWJsaWMgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM4NTI0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbCBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoVG9vbCB7Ci0gIHB1YmxpYyBXU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgIHJldHVybiAid3NkbC9mb3Jtcy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmM2UzYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIGV4dGVuZHMgTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgewotICBwdWJsaWMgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgcmV0dXJuICJ3c2RsL2Zvcm1zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE1haW5Ob2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE1haW5Ob2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzczZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExNYWluTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotCi0vLyBSb290IG5vZGUgZm9yIHRoZSBXU0RMIE5hdmlnYXRvciBUcmVlIFZpZXcKLXB1YmxpYyBjbGFzcyBXU0RMTWFpbk5vZGUgZXh0ZW5kcyBXU0RMTmF2aWdhdG9yTm9kZQotewotICBwdWJsaWMgV1NETE1haW5Ob2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLDEsImltYWdlcy9yb290X21haW4uZ2lmIik7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETCkpIHsKLSAgICAgICAgICBXU0RMTm9kZSB3c2RsTm9kZSA9IG5ldyBXU0RMTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICBhZGRDaGlsZCh3c2RsTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETCkpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETCkpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgT3BlbldTRExUb29sKHRvb2xNYW5hZ2VyXywgd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9PUEVOX1dTREwiKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExOYXZpZ2F0b3JOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE5hdmlnYXRvck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3NTgwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE5hdmlnYXRvck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlRvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETE5hdmlnYXRvck5vZGUgZXh0ZW5kcyBOb2RlCi17Ci0gIHB1YmxpYyBXU0RMTmF2aWdhdG9yTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgsU3RyaW5nIGltYWdlUGF0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLGltYWdlUGF0aCk7Ci0gIH0KLQotICAvLyB3c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICB9Ci0KLSAgLy8gd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXyxmYWxzZSk7Ci0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjEyNzRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotCi0vLyBXU0RMIG5vZGUgZm9yIHRoZSBXU0RMIE5hdmlnYXRvciBUcmVlIFZpZXcKLXB1YmxpYyBjbGFzcyBXU0RMTm9kZSBleHRlbmRzIFdTRExOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBXU0RMTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwiaW1hZ2VzL3dzZGwuZ2lmIik7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFKSkgewotICAgICAgICAgIFdTRExTZXJ2aWNlTm9kZSB3c2RsU2VydmljZU5vZGUgPSBuZXcgV1NETFNlcnZpY2VOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgIGFkZENoaWxkKHdzZGxTZXJ2aWNlTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICAgIHNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBXU0RMRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTRExfREVUQUlMUyIpKTsKLSAgICBuZXcgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wodG9vbE1hbmFnZXJfLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgbmV3IFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfSU1QT1JUX1RPX0ZTIikpOwotICAgIG5ldyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wodG9vbE1hbmFnZXJfLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIikpOwotICAgIG5ldyBXU0RMQWRkVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXywgd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfV1NETF9UT19GQVZPUklURVMiKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMT3BlcmF0aW9uTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExPcGVyYXRpb25Ob2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOGUzYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExPcGVyYXRpb25Ob2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi0vLyBXU0RMIG9wZXJhdGlvbiBub2RlIGZvciB0aGUgV1NETCBOYXZpZ2F0b3IgVHJlZSBWaWV3Ci1wdWJsaWMgY2xhc3MgV1NETE9wZXJhdGlvbk5vZGUgZXh0ZW5kcyBXU0RMTmF2aWdhdG9yTm9kZQotewotICBwdWJsaWMgV1NETE9wZXJhdGlvbk5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsIndzZGwvaW1hZ2VzL3dzZGxfb3BlcmF0aW9uX25vZGUuZ2lmIik7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IEludm9rZVdTRExPcGVyYXRpb25Ub29sKHRvb2xNYW5hZ2VyXywgd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9JTlZPS0VfV1NETF9PUEVSQVRJT04iKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExQZXJzcGVjdGl2ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExQZXJzcGVjdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFiZDg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMUGVyc3BlY3RpdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVjb3JlUGFja2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5PcGVuV1NETEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5VcGRhdGVXU0RMQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuQmluZGluZ1R5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMQmluZGluZ0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RQYWNrYWdlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RSZXNvdXJjZUZhY3RvcnlJbXBsOwotCi1wdWJsaWMgY2xhc3MgV1NETFBlcnNwZWN0aXZlIGV4dGVuZHMgUGVyc3BlY3RpdmUKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0NPTlRFTlRfREVGQVVMVCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19DT05URU5UX1JFU1VMVF9GT1JNID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0NPTlRFTlRfUkVTVUxUX1NPVVJDRSA9IDI7Ci0KLSAgcHJpdmF0ZSBCYXNpY01vZGVsIG1vZGVsXzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIHByaXZhdGUgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIHByaXZhdGUgU3RyaW5nIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIHByaXZhdGUgU3RyaW5nIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIHByaXZhdGUgaW50IHN0YXR1c0NvbnRlbnRUeXBlXzsKLQotICBwcml2YXRlIFNPQVBNZXNzYWdlUXVldWUgc29hcFJlcXVlc3RRdWV1ZV87Ci0gIHByaXZhdGUgU09BUE1lc3NhZ2VRdWV1ZSBzb2FwUmVzcG9uc2VRdWV1ZV87Ci0gIHByaXZhdGUgTm9kZSBvcGVyYXRpb25Ob2RlXzsKLQotICBzdGF0aWMKLSAgewotICAgIC8vIEluaXRpYWxpemUgdGhlIFhTRCBzdWJzeXN0ZW0uCi0gICAgKG5ldyBSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeUltcGwoKSkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCJ4c2QiLG5ldyBYU0RSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgLy8gSW5pdC5pbml0KCk7Ci0gICAgRWNvcmVQYWNrYWdlSW1wbC5pbml0KCk7Ci0gICAgWFNEUGFja2FnZUltcGwuaW5pdCgpOwotICB9Ci0KLSAgcHVibGljIFdTRExQZXJzcGVjdGl2ZShDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcigid3NkbCIsY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0UGVyc3BlY3RpdmUoU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBtb2RlbF8gPSBuZXcgQmFzaWNNb2RlbCgid3NkbE1vZGVsIik7Ci0gICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1dTRExfTUFJTiIpLCBtb2RlbF8pOwotICAgIG1vZGVsXy5zZXRSb290RWxlbWVudCh0cmVlRWxlbWVudCk7Ci0gICAgbm9kZU1hbmFnZXJfID0gbmV3IE5vZGVNYW5hZ2VyKGNvbnRyb2xsZXJfKTsKLSAgICBXU0RMTWFpbk5vZGUgd3NkbE1haW5Ob2RlID0gbmV3IFdTRExNYWluTm9kZSh0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXJfKTsKLSAgICBub2RlTWFuYWdlcl8uc2V0Um9vdE5vZGUod3NkbE1haW5Ob2RlKTsKLQotICAgIC8vIFN0YXJ0aW5nIGZyYW1lc2V0IHNpemVzLgotICAgIGlmICghRGlyVXRpbHMuaXNSVEwoKSkKLSAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiMzAlLCoiOwotICAgIGVsc2UKLSAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiKiwzMCUiOwotICAgIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSAiNzUlLCoiOwotICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLQotICAgIC8vIE1lc3NhZ2Ugc3RhdHVzIHBhbmUKLSAgICBzdGF0dXNDb250ZW50VHlwZV8gPSBTVEFUVVNfQ09OVEVOVF9ERUZBVUxUOwotICAgIHNvYXBSZXF1ZXN0UXVldWVfID0gbmV3IFNPQVBNZXNzYWdlUXVldWUoKTsKLSAgICBzb2FwUmVzcG9uc2VRdWV1ZV8gPSBuZXcgU09BUE1lc3NhZ2VRdWV1ZSgpOwotICAgIG9wZXJhdGlvbk5vZGVfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRXU0RMKFN0cmluZ1tdIHdzZGxVUkxzKSB7Ci0gICAgaWYgKHdzZGxVUkxzICE9IG51bGwpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbFVSTHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgT3BlbldTRExBY3Rpb24gb3BlbldTRExBY3Rpb24gPSBuZXcgT3BlbldTRExBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0RMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgU3RyaW5nIGRlY29kZWRXU0RMVVJMID0gVVJMVXRpbHMuZGVjb2RlKHdzZGxVUkxzW2ldKTsKLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLCBkZWNvZGVkV1NETFVSTCk7Ci0gICAgICAgIG9wZW5XU0RMQWN0aW9uLnJ1bigpOwotICAgICAgfQotICAgICAgaWYgKHdzZGxVUkxzLmxlbmd0aCA+IDApCi0gICAgICAgIGNvbnRyb2xsZXJfLnNldEN1cnJlbnRQZXJzcGVjdGl2ZShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBwcmVsb2FkRW5kcG9pbnRzKFN0cmluZ1tdIHdzZGxVUkxzLCBTdHJpbmdbXSBlbmRwb2ludHMpCi0gIHsKLSAgICBpZiAod3NkbFVSTHMgIT0gbnVsbCAmJiB3c2RsVVJMcy5sZW5ndGggPiAwICYmIGVuZHBvaW50cyAhPSBudWxsICYmIGVuZHBvaW50cy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyB3c2RsVVJMID0gd3NkbFVSTHNbMF07Ci0gICAgICBWZWN0b3Igd3NkbE5vZGVzID0gbm9kZU1hbmFnZXJfLmdldFJvb3ROb2RlKCkuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChJdGVyYXRvciB3c2RsTm9kZXNJdGVyYXRvciA9IHdzZGxOb2Rlcy5pdGVyYXRvcigpOyB3c2RsTm9kZXNJdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBOb2RlIHdzZGxOb2RlID0gKE5vZGUpd3NkbE5vZGVzSXRlcmF0b3IubmV4dCgpOwotICAgICAgICBpZiAod3NkbE5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMod3NkbFVSTCkpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3Igc2VydmljZU5vZGVzID0gd3NkbE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgIGZvciAoSXRlcmF0b3Igc2VydmljZU5vZGVzSXRlcmF0b3IgPSBzZXJ2aWNlTm9kZXMuaXRlcmF0b3IoKTsgc2VydmljZU5vZGVzSXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzSXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICAgIFN0cmluZ1tdIG5vZGVJZHMgPSBuZXcgU3RyaW5nW2JpbmRpbmdOb2Rlcy5zaXplKCldOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlSWRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICBub2RlSWRzW2ldID0gU3RyaW5nLnZhbHVlT2YoKChOb2RlKWJpbmRpbmdOb2Rlcy5nZXQoaSkpLmdldE5vZGVJZCgpKTsKLSAgICAgICAgICAgIFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVXU0RMQmluZGluZ0FjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJZHMpOwotICAgICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoV1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQsIGVuZHBvaW50cyk7Ci0gICAgICAgICAgICBhY3Rpb24uc2V0UHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlKTsKLSAgICAgICAgICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBwcmVzZWxlY3RTZXJ2aWNlT3JCaW5kaW5nKFN0cmluZ1tdIHdzZGxVUkxzLFN0cmluZ1tdIHNlcnZpY2VRTmFtZVN0cmluZ3MsU3RyaW5nW10gYmluZGluZ05hbWVTdHJpbmdzKQotICB7Ci0gICAgaWYgKHdzZGxVUkxzICE9IG51bGwgJiYgd3NkbFVSTHMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3NkbFVSTCA9IHdzZGxVUkxzWzBdOwotICAgICAgaWYgKHNlcnZpY2VRTmFtZVN0cmluZ3MgIT0gbnVsbCAmJiBzZXJ2aWNlUU5hbWVTdHJpbmdzLmxlbmd0aCA+IDApCi0gICAgICAgIHByZXNlbGVjdFNlcnZpY2Uod3NkbFVSTCxzZXJ2aWNlUU5hbWVTdHJpbmdzWzBdKTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKGJpbmRpbmdOYW1lU3RyaW5ncyAhPSBudWxsICYmIGJpbmRpbmdOYW1lU3RyaW5ncy5sZW5ndGggPiAwKQotICAgICAgICAgIHByZXNlbGVjdEJpbmRpbmcod3NkbFVSTCxiaW5kaW5nTmFtZVN0cmluZ3NbMF0pOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHByZXNlbGVjdFNlcnZpY2UoU3RyaW5nIHdzZGxVUkwsU3RyaW5nIHNlcnZpY2VRTmFtZVN0cmluZykKLSAgewotICAgIFZlY3RvciB3c2RsTm9kZXMgPSBub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8d3NkbE5vZGVzLnNpemUoKTtpKyspCi0gICAgewotICAgICAgTm9kZSB3c2RsTm9kZSA9IChOb2RlKXdzZGxOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAod3NkbE5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMod3NkbFVSTCkpCi0gICAgICB7Ci0gICAgICAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSB3c2RsTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGo9MDtqPHNlcnZpY2VOb2Rlcy5zaXplKCk7aisrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBzZXJ2aWNlTm9kZSA9IChOb2RlKXNlcnZpY2VOb2Rlcy5lbGVtZW50QXQoaik7Ci0gICAgICAgICAgV1NETFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFdTRExTZXJ2aWNlRWxlbWVudClzZXJ2aWNlTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2UoKTsKLSAgICAgICAgICBpZiAoc2VydmljZS5nZXRRTmFtZSgpLnRvU3RyaW5nKCkuZXF1YWxzKHNlcnZpY2VRTmFtZVN0cmluZykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbm9kZU1hbmFnZXJfLnNldFNlbGVjdGVkTm9kZUlkKHNlcnZpY2VOb2RlLmdldE5vZGVJZCgpKTsKLSAgICAgICAgICAgIG5vZGVNYW5hZ2VyXy5tYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpOwotICAgICAgICAgICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCBwcmVzZWxlY3RCaW5kaW5nKFN0cmluZyB3c2RsVVJMLFN0cmluZyBiaW5kaW5nTmFtZVN0cmluZykKLSAgewotICAgIFZlY3RvciB3c2RsTm9kZXMgPSBub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8d3NkbE5vZGVzLnNpemUoKTtpKyspCi0gICAgewotICAgICAgTm9kZSB3c2RsTm9kZSA9IChOb2RlKXdzZGxOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAod3NkbE5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMod3NkbFVSTCkpCi0gICAgICB7Ci0gICAgICAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSB3c2RsTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGo9MDtqPHNlcnZpY2VOb2Rlcy5zaXplKCk7aisrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBzZXJ2aWNlTm9kZSA9IChOb2RlKXNlcnZpY2VOb2Rlcy5lbGVtZW50QXQoaik7Ci0gICAgICAgICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICBmb3IgKGludCBrPTA7azxiaW5kaW5nTm9kZXMuc2l6ZSgpO2srKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIGJpbmRpbmdOb2RlID0gKE5vZGUpYmluZGluZ05vZGVzLmVsZW1lbnRBdChrKTsKLSAgICAgICAgICAgIFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCA9IChXU0RMQmluZGluZ0VsZW1lbnQpYmluZGluZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChiaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKS50b1N0cmluZygpLmVxdWFscyhiaW5kaW5nTmFtZVN0cmluZykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChiaW5kaW5nTm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgICAgICAgICAgIG5vZGVNYW5hZ2VyXy5tYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpOwotICAgICAgICAgICAgICBjb250cm9sbGVyXy5zZXRDdXJyZW50UGVyc3BlY3RpdmUoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwpOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgIAotICAgICAgfQotICAgIH0gICAgCi0gIH0KLQotICBwdWJsaWMgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVNYW5hZ2VyXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQYW5lc0ZpbGUoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZyYW1lc2V0c0ZpbGUoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAid3NkbE5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gIndzZGxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIndzZGxTdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICB7Ci0gICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhTdHJpbmcgY29scykKLSAgewotICAgIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgewotICAgIHJldHVybiBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgewotICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgewotICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKQotICB7Ci0gICAgcmV0dXJuIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN3aXRjaFBlcnNwZWN0aXZlRm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgcmV0dXJuIFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb24uZ2V0Rm9ybUFjdGlvbkxpbmsodGFyZ2V0UGVyc3BlY3RpdmVJZCxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U3RhdHVzQ29udGVudFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHN0YXR1c0NvbnRlbnRUeXBlXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN0YXR1c0NvbnRlbnRUeXBlKGludCBzdGF0dXNDb250ZW50VHlwZSkKLSAgewotICAgIHN0YXR1c0NvbnRlbnRUeXBlXyA9IHN0YXR1c0NvbnRlbnRUeXBlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFNPQVBNZXNzYWdlUXVldWUgZ2V0U09BUFJlcXVlc3RRdWV1ZSgpCi0gIHsKLSAgICByZXR1cm4gc29hcFJlcXVlc3RRdWV1ZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU09BUE1lc3NhZ2VRdWV1ZSBnZXRTT0FQUmVzcG9uc2VRdWV1ZSgpCi0gIHsKLSAgICByZXR1cm4gc29hcFJlc3BvbnNlUXVldWVfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGUgZ2V0T3BlcmF0aW9uTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uTm9kZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRPcGVyYXRpb25Ob2RlKE5vZGUgb3BlcmF0aW9uTm9kZSkKLSAgewotICAgIG9wZXJhdGlvbk5vZGVfID0gb3BlcmF0aW9uTm9kZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U09BUEVudmVsb3BlWE1MTGluayhpbnQgc29hcEVudmVsb3BlVHlwZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBsaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9zb2FwX2VudmVsb3BlX3htbC5qc3A/Iik7Ci0gICAgbGluay5hcHBlbmQoV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEUpLmFwcGVuZCgnPScpLmFwcGVuZChzb2FwRW52ZWxvcGVUeXBlKTsKLSAgICByZXR1cm4gbGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRCaW5kaW5nVHlwZVN0cmluZyhpbnQgYmluZGluZ1R5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGJpbmRpbmdUeXBlKQotICAgIHsKLSAgICAgIGNhc2UgQmluZGluZ1R5cGVzLlNPQVA6Ci0gICAgICAgIHJldHVybiBnZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9TT0FQIik7Ci0gICAgICBjYXNlIEJpbmRpbmdUeXBlcy5IVFRQX0dFVDoKLSAgICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFX0hUVFBfR0VUIik7Ci0gICAgICBjYXNlIEJpbmRpbmdUeXBlcy5IVFRQX1BPU1Q6Ci0gICAgICAgIHJldHVybiBnZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9IVFRQX1BPU1QiKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9VTlNVUFBPUlRFRCIpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMU2VydmljZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMWZlZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlcnZpY2VEZXRhaWxzVG9vbCBleHRlbmRzIERldGFpbHNUb29sIHsKLQotICBwdWJsaWMgV1NETFNlcnZpY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQsICJ3c2RsL2Zvcm1zL1dTRExTZXJ2aWNlRGV0YWlsc0Zvcm0uanNwIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMU2VydmljZU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMU2VydmljZU5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MjMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFNlcnZpY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLS8vIFdTREwgc2VydmljZSBub2RlIGZvciB0aGUgV1NETCBOYXZpZ2F0b3IgVHJlZSBWaWV3Ci1wdWJsaWMgY2xhc3MgV1NETFNlcnZpY2VOb2RlIGV4dGVuZHMgV1NETE5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFdTRExTZXJ2aWNlTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwid3NkbC9pbWFnZXMvd3NkbF9zZXJ2aWNlX25vZGUuZ2lmIik7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9CSU5ESU5HKSkgewotICAgICAgICAgIFdTRExCaW5kaW5nTm9kZSB3c2RsQmluZGluZ05vZGUgPSBuZXcgV1NETEJpbmRpbmdOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgIGFkZENoaWxkKHdzZGxCaW5kaW5nTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9CSU5ESU5HKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICAgIHNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBXU0RMU2VydmljZURldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNmb3JtZXIvRnJhZ21lbnRUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zZm9ybWVyL0ZyYWdtZW50VHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNkZTY5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNmb3JtZXIvRnJhZ21lbnRUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBGcmFnbWVudFRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0KLSAgcHVibGljIEZyYWdtZW50VHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZCgiPHJvb3Q+Iik7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gKElYU0RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIEVsZW1lbnRbXSBlbGVtZW50cyA9IG5ldyBFbGVtZW50WzBdOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGVsZW1lbnRzID0gZnJhZy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoIW9wZXJFbGVtZW50LmlzVXNlTGl0ZXJhbCgpLCBuZXcgSGFzaHRhYmxlKCksIFhNTFV0aWxzLmNyZWF0ZU5ld0RvY3VtZW50KG51bGwpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHNiLmFwcGVuZChYTUxVdGlscy5zZXJpYWxpemUoZWxlbWVudHNbaV0sIHRydWUpKTsKLSAgICB9Ci0gICAgc2IuYXBwZW5kKCI8L3Jvb3Q+Iik7Ci0gICAgcHJvcGVydGllcy5wdXQoRnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlQsIHNiLnRvU3RyaW5nKCkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIFN0cmluZyBzb3VyY2UgPSAoU3RyaW5nKSBwcm9wZXJ0aWVzLmdldChGcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVCk7Ci0gICAgaWYgKHNvdXJjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBFbGVtZW50IHJvb3QgPSBYTUxVdGlscy5zdHJpbmdUb0VsZW1lbnQoc291cmNlKTsKLSAgICAgICAgaWYgKHJvb3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSByb290LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICBWZWN0b3IgY2hpbGRyZW5WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgTm9kZSBjaGlsZCA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgICAgIGNoaWxkcmVuVmVjdG9yLmFkZChjaGlsZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIEVsZW1lbnRbXSBjaGlsZHJlbiA9IChFbGVtZW50W10pY2hpbGRyZW5WZWN0b3IudG9BcnJheShuZXcgRWxlbWVudFswXSk7Ci0gICAgICAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpIGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydClpdC5uZXh0KCk7Ci0gICAgICAgICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IChJWFNERnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICAgICAgICBmcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhjaGlsZHJlbik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0NodW5rZWRJbnB1dFN0cmVhbS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9DaHVua2VkSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhMjhhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0NodW5rZWRJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmEuaW8uRmlsdGVySW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1wdWJsaWMgY2xhc3MgQ2h1bmtlZElucHV0U3RyZWFtIGV4dGVuZHMgRmlsdGVySW5wdXRTdHJlYW0KLXsKLSAgcHJvdGVjdGVkIGxvbmcgY2h1bmtTaXplID0gMGw7Ci0gIHByb3RlY3RlZCB2b2xhdGlsZSBib29sZWFuIGNsb3NlZCA9IGZhbHNlOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgbWF4Q2hhckxvbmcgPSAoTG9uZy50b0hleFN0cmluZyhMb25nLk1BWF9WQUxVRSkpLnRvU3RyaW5nKCkubGVuZ3RoKCk7Ci0KLSAgcHJpdmF0ZSBDaHVua2VkSW5wdXRTdHJlYW0oKQotICB7Ci0gICAgc3VwZXIobnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgQ2h1bmtlZElucHV0U3RyZWFtKElucHV0U3RyZWFtIGlzKQotICB7Ci0gICAgc3VwZXIoaXMpOwotICB9Ci0KLSAgcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBieXRlW10gZCA9IG5ldyBieXRlWzFdOwotICAgIGludCByYyA9IHJlYWQoZCwgMCwgMSk7Ci0gICAgcmV0dXJuIHJjID4gMCA/IChkWzBdICYgMHhGRikgOiByYzsKLSAgfQotCi0gIHB1YmxpYyBpbnQgcmVhZChieXRlW10gYikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcmVhZChiLCAwLCBiLmxlbmd0aCk7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIGludCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGlmIChjbG9zZWQpCi0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBpbnQgdG90YWxyZWFkID0gMDsKLSAgICBpbnQgYnl0ZXNyZWFkID0gMDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBkbwotICAgICAgewotICAgICAgICBpZiAoY2h1bmtTaXplIDwgMUwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoMGwgPT0gZ2V0Q2h1bmtlZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0b3RhbHJlYWQgPT0gMCkKLSAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICByZXR1cm4gdG90YWxyZWFkOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBieXRlc3JlYWQgPSBpbi5yZWFkKGIsIG9mZiArIHRvdGFscmVhZCwgTWF0aC5taW4obGVuIC0gdG90YWxyZWFkLCAoaW50KSBNYXRoLm1pbihjaHVua1NpemUsIEludGVnZXIuTUFYX1ZBTFVFKSkpOwotICAgICAgICBpZiAoYnl0ZXNyZWFkID4gMCkKLSAgICAgICAgewotICAgICAgICAgIHRvdGFscmVhZCArPSBieXRlc3JlYWQ7Ci0gICAgICAgICAgY2h1bmtTaXplIC09IGJ5dGVzcmVhZDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgd2hpbGUgKGxlbiAtIHRvdGFscmVhZCA+IDAgJiYgYnl0ZXNyZWFkID4gLTEpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvdGFscmVhZDsKLSAgfQotCi0gIHB1YmxpYyBsb25nIHNraXAoZmluYWwgbG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGlmIChjbG9zZWQpCi0gICAgICByZXR1cm4gMDsKLSAgICBsb25nIHNraXBwZWQgPSAwbDsKLSAgICBieXRlW10gYiA9IG5ldyBieXRlWzEwMjRdOwotICAgIGludCBicmVhZCA9IC0xOwotICAgIGRvCi0gICAgewotICAgICAgYnJlYWQgPSByZWFkKGIsIDAsIGIubGVuZ3RoKTsKLSAgICAgIGlmIChicmVhZCA+IDApCi0gICAgICAgIHNraXBwZWQgKz0gYnJlYWQ7Ci0gICAgfQotICAgIHdoaWxlIChicmVhZCAhPSAtMSAmJiBza2lwcGVkIDwgbik7Ci0gICAgcmV0dXJuIHNraXBwZWQ7Ci0gIH0KLQotICBwdWJsaWMgaW50IGF2YWlsYWJsZSgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGNsb3NlZCkKLSAgICAgIHJldHVybiAwOwotICAgIGludCByYyA9IChpbnQpIE1hdGgubWluKGNodW5rU2l6ZSwgSW50ZWdlci5NQVhfVkFMVUUpOwotICAgIHJldHVybiBNYXRoLm1pbihyYywgaW4uYXZhaWxhYmxlKCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGxvbmcgZ2V0Q2h1bmtlZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLy9TdHJpbmdCdWZmZXIgYnVmPSBuZXcgU3RyaW5nQnVmZmVyKDEwMjQpOwotICAgIGJ5dGVbXSBidWYgPSBuZXcgYnl0ZVttYXhDaGFyTG9uZyArIDJdOwotICAgIGludCBidWZzeiA9IDA7Ci0gICAgY2h1bmtTaXplID0gLTFMOwotICAgIGludCBjID0gLTE7Ci0gICAgZG8KLSAgICB7Ci0gICAgICBjID0gaW4ucmVhZCgpOwotICAgICAgaWYgKGMgPiAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGMgIT0gJ1xyJyAmJiBjICE9ICdcbicgJiYgYyAhPSAnICcgJiYgYyAhPSAnXHQnKQotICAgICAgICB7Ci0gICAgICAgICAgYnVmW2J1ZnN6KytdID0gKChieXRlKSBjKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICB3aGlsZSAoYyA+IC0xICYmIChjICE9ICdcbicgfHwgYnVmc3ogPT0gMCkgJiYgYnVmc3ogPCBidWYubGVuZ3RoKTsKLSAgICBpZiAoYyA8IDApCi0gICAgewotICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgU3RyaW5nIHNidWYgPSBuZXcgU3RyaW5nKGJ1ZiwgMCwgYnVmc3opOwotICAgIGlmIChidWZzeiA+IG1heENoYXJMb25nKQotICAgIHsKLSAgICAgIGNsb3NlZCA9IHRydWU7Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkNodW5rZWQgaW5wdXQgc3RyZWFtIGZhaWxlZCB0byByZWNlaXZlIHZhbGlkIGNodW5rIHNpemU6IiArIHNidWYpOwotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBjaHVua1NpemUgPSBMb25nLnBhcnNlTG9uZyhzYnVmLCAxNik7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmUpCi0gICAgewotICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiJyIgKyBzYnVmICsgIicgIiArIG5lLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGlmIChjaHVua1NpemUgPCAxTCkKLSAgICAgIGNsb3NlZCA9IHRydWU7Ci0gICAgaWYgKGNodW5rU2l6ZSAhPSAwTCAmJiBjIDwgMCkKLSAgICB7Ci0gICAgICAvL0lmIGNodW5rIHNpemUgaXMgemVybyB0cnkgYW5kIGJlIHRvbGVyYW50IHRoYXQgdGhlcmUgbWF5YmUgbm8gY3Igb3IgbGYKLSAgICAgIC8vIGF0IHRoZSBlbmQuCi0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkhUVFAgQ2h1bmtlZCBzdHJlYW0gY2xvc2VkIGluIG1pZGRsZSBvZiBjaHVuay4iKTsKLSAgICB9Ci0gICAgaWYgKGNodW5rU2l6ZSA8IDBMKQotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJIVFRQIENodW5rIHNpemUgcmVjZWl2ZWQgIiArIGNodW5rU2l6ZSArICIgaXMgbGVzcyB0aGFuIHplcm8uIik7Ci0gICAgcmV0dXJuIGNodW5rU2l6ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBzeW5jaHJvbml6ZWQgKHRoaXMpCi0gICAgewotICAgICAgaWYgKGNsb3NlZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVsxMDI0XTsKLSAgICBpbnQgYnJlYWQgPSAtMTsKLSAgICBkbwotICAgIHsKLSAgICAgIGJyZWFkID0gcmVhZChiLCAwLCBiLmxlbmd0aCk7Ci0gICAgfQotICAgIHdoaWxlIChicmVhZCAhPSAtMSk7Ci0gIH0KLQotICAvKgotICAgKiBwdWJsaWMgdm9pZCBtYXJrKGludCByZWFkbGltaXQpCi0gICAqIHsKLSAgICogfQotICAgKi8KLQotICBwdWJsaWMgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJEb24ndCBzdXBwb3J0IG1hcmtlZCBzdHJlYW1zIik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9IVFRQUmVzcG9uc2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvSFRUUFJlc3BvbnNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZmUwY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9IVFRQUmVzcG9uc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLXB1YmxpYyBjbGFzcyBIVFRQUmVzcG9uc2UKLXsKLSAgcHJpdmF0ZSBib29sZWFuIHN0YXR1c1NldDsKLSAgcHJpdmF0ZSBpbnQgc3RhdHVzQ29kZTsKLSAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzTWVzc2FnZTsKLSAgcHJpdmF0ZSBIYXNodGFibGUgaGVhZGVyczsKLSAgcHJpdmF0ZSBieXRlW10gcGF5bG9hZDsKLQotICBwdWJsaWMgSFRUUFJlc3BvbnNlKCkKLSAgewotICAgIHJlc2V0KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXNldCgpCi0gIHsKLSAgICBzdGF0dXNTZXQgPSBmYWxzZTsKLSAgICBzdGF0dXNDb2RlID0gLTE7Ci0gICAgc3RhdHVzTWVzc2FnZSA9IG51bGw7Ci0gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgIGhlYWRlcnMuY2xlYXIoKTsKLSAgICBlbHNlCi0gICAgICBoZWFkZXJzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHBheWxvYWQgPSBuZXcgYnl0ZVswXTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzU3RhdHVzU2V0KCkKLSAgewotICAgIHJldHVybiBzdGF0dXNTZXQ7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFN0YXR1c0NvZGUoKQotICB7Ci0gICAgcmV0dXJuIHN0YXR1c0NvZGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKQotICB7Ci0gICAgc3RhdHVzU2V0ID0gdHJ1ZTsKLSAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNNZXNzYWdlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U3RhdHVzTWVzc2FnZShTdHJpbmcgc3RhdHVzTWVzc2FnZSkKLSAgewotICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IHN0YXR1c01lc3NhZ2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRIZWFkZXIoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaGVhZGVycy5wdXQoa2V5LCB2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEhlYWRlcihTdHJpbmcga2V5KQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpIGhlYWRlcnMuZ2V0KGtleSk7Ci0gIH0KLQotICBwdWJsaWMgTWFwIGdldEhlYWRlcnMoKQotICB7Ci0gICAgcmV0dXJuIGhlYWRlcnM7Ci0gIH0KLQotICBwdWJsaWMgYnl0ZVtdIGdldFBheWxvYWQoKQotICB7Ci0gICAgcmV0dXJuIHBheWxvYWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXlsb2FkKGJ5dGVbXSBwYXlsb2FkKQotICB7Ci0gICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9IVFRQVHJhbnNwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBUcmFuc3BvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUyN2QxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBUcmFuc3BvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxICAgMTI1Nzc3IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKiAyMDA2MDIyMiAgIDExODAxOSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MDIyMiAgIDEyODU2NCBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICogMjAwNjA4MjMgICAgOTkwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRSBzdXBwb3J0IGZvciBiYXNpYy1hdXRoZW50aWNhdGluZyBmaXJld2FsbHMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXRUaW1lb3V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMU29ja2V0RmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IHN1bi5taXNjLkJBU0U2NEVuY29kZXI7Ci0KLXB1YmxpYyBjbGFzcyBIVFRQVHJhbnNwb3J0Ci17Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBTX1BST1hZX0hPU1QgPSAiaHR0cHMucHJveHlIb3N0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUFNfUFJPWFlfUE9SVCA9ICJodHRwcy5wcm94eVBvcnQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQU19OT05fUFJPWFlfSE9TVFMgPSAiaHR0cHMubm9uUHJveHlIb3N0cyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBfUFJPWFlfSE9TVCA9ICJodHRwLnByb3h5SG9zdCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBfUFJPWFlfUE9SVCA9ICJodHRwLnByb3h5UG9ydCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBfUFJPWFlfVVNFUl9OQU1FID0gImh0dHAucHJveHlVc2VyTmFtZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBfUFJPWFlfUEFTU1dPUkQgPSAiaHR0cC5wcm94eVBhc3N3b3JkIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUF9OT05fUFJPWFlfSE9TVFMgPSAiaHR0cC5ub25Qcm94eUhvc3RzIjsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfTUVUSE9EID0gIlBPU1QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0NPTk5FQ1QgPSAiQ09OTkVDVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfVkVSU0lPTl8xXzAgPSAiSFRUUC8xLjAiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX1ZFUlNJT04gPSAiSFRUUC8xLjEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9TT0FQX0FDVElPTiA9ICJTT0FQQWN0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQVVUSCA9ICJBdXRob3JpemF0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfV1dXX0FVVEggPSAiV1dXLUF1dGhlbnRpY2F0ZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1BST1hZX0FVVEggPSAiUHJveHktYXV0aG9yaXphdGlvbiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0NPT0tJRSA9ICJDb29raWUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9DT09LSUUyID0gIkNvb2tpZTIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9IT1NUID0gIkhvc3QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9DT05URU5UX1RZUEUgPSAiQ29udGVudC1UeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQ09OVEVOVF9MRU5HVEggPSAiQ29udGVudC1MZW5ndGgiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9BQ0NFUFQgPSAiQWNjZXB0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfVVNFUl9BR0VOVCA9ICJVc2VyLUFnZW50IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQ0FDSEVfQ09OVFJPTCA9ICJDYWNoZS1Db250cm9sIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfUFJBR01BID0gIlByYWdtYSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1RSQU5TRkVSX0VOQ09ERUlORyA9ICJUcmFuc2Zlci1FbmNvZGluZyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0NPTk5FQ1RJT04gPSAiQ29ubmVjdGlvbiI7Ci0gIAotICBwcml2YXRlIGZpbmFsIGludCBIVFRQX0NPREVfQ09OVElOVUUgPSAxMDA7Ci0gIHByaXZhdGUgZmluYWwgaW50IEhUVFBfQ09ERV9PSyA9IDIwMDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgSFRUUF9DT0RFX0VYQ0VQVElPTiA9IDMwMDsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJQk1fV0VCX1NFUlZJQ0VTX0VYUExPUkVSID0gIklCTSBXZWIgU2VydmljZXMgRXhwbG9yZXIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBURVhUX1hNTCA9ICJ0ZXh0L3htbCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENPTlRFTlRfVFlQRV9WQUxVRSA9ICJ0ZXh0L3htbDsgY2hhcnNldD11dGYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFDQ0VQVF9WQUxVRSA9ICJhcHBsaWNhdGlvbi9zb2FwK3htbCwgYXBwbGljYXRpb24vZGltZSwgbXVsdGlwYXJ0L3JlbGF0ZWQsIHRleHQvKiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0lDID0gIkJhc2ljIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTk9fQ0FDSEUgPSAibm8tY2FjaGUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDSFVOS0VEID0gImNodW5rZWQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDTE9TRSA9ICJjbG9zZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBTID0gImh0dHBzIjsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFFVT1RFID0gJ1wiJzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIENPTE9OID0gJzonOwotICBwcml2YXRlIGZpbmFsIGNoYXIgU1BBQ0UgPSAnICc7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBUQUIgPSAnXHQnOwotICBwcml2YXRlIGZpbmFsIGNoYXIgUiA9ICdccic7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBOID0gJ1xuJzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFJPT1QgPSAnLyc7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIE5FV19MSU5FID0gIlxyXG4iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLQotICBwcml2YXRlIGZpbmFsIGludCBERUZBVUxUX0hUVFBfUE9SVCA9IDgwOwotICBwcml2YXRlIGZpbmFsIGludCBERUZBVUxUX0hUVFBTX1BPUlQgPSA0NDM7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfU09BUF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcgPSAiaXNvLTg4NTktMSI7Ci0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBERUZBVUxUX0NBU0VfU0VOU0lUSVZFX0ZPUl9IT1NUX05BTUUgPSBmYWxzZTsKLQotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgcHJpdmF0ZSBib29sZWFuIG1haW50YWluU2Vzc2lvbiA9IGZhbHNlOwotICBwcml2YXRlIFN0cmluZyBjb29raWU7Ci0gIHByaXZhdGUgU3RyaW5nIGNvb2tpZTI7Ci0gIHByaXZhdGUgSFRUUFJlc3BvbnNlIGh0dHBSZXNwb25zZTsKLQotICBwdWJsaWMgU3RyaW5nIGdldEh0dHBCYXNpY0F1dGhVc2VybmFtZSgpCi0gIHsKLSAgICByZXR1cm4gaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSkKLSAgewotICAgIHRoaXMuaHR0cEJhc2ljQXV0aFVzZXJuYW1lID0gaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpCi0gIHsKLSAgICByZXR1cm4gaHR0cEJhc2ljQXV0aFBhc3N3b3JkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCkKLSAgewotICAgIHRoaXMuaHR0cEJhc2ljQXV0aFBhc3N3b3JkID0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWV0aG9kKFVSTCB1cmwpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKEhUVFBfTUVUSE9EKTsKLSAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgIFN0cmluZyBwcm90b2NvbCA9IHVybC5nZXRQcm90b2NvbCgpOwotICAgIFN0cmluZyBodHRwUHJveHlIb3N0ID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBfUFJPWFlfSE9TVCk7Ci0gICAgU3RyaW5nIGh0dHBzUHJveHlIb3N0ID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBTX1BST1hZX0hPU1QpOwotICAgIGlmIChwcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJodHRwIikgJiYgaHR0cFByb3h5SG9zdCAhPSBudWxsICYmIGh0dHBQcm94eUhvc3QubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHByb3RvY29sLmVxdWFsc0lnbm9yZUNhc2UoImh0dHBzIikgJiYgaHR0cHNQcm94eUhvc3QgIT0gbnVsbCAmJiBodHRwc1Byb3h5SG9zdC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgc2IuYXBwZW5kKHVybC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBmaWxlID0gdXJsLmdldEZpbGUoKTsKLSAgICAgIGlmIChmaWxlICE9IG51bGwgJiYgZmlsZS5sZW5ndGgoKSA+IDApCi0gICAgICAgIHNiLmFwcGVuZChmaWxlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2IuYXBwZW5kKFJPT1QpOwotICAgIH0KLSAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgIHNiLmFwcGVuZChIVFRQX1ZFUlNJT04pOwotICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRIb3N0KFVSTCB1cmwpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKEhUVFBfSEVBREVSX0hPU1QpOwotICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICBzYi5hcHBlbmQodXJsLmdldEhvc3QoKSk7Ci0gICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICBpbnQgcG9ydCA9IHVybC5nZXRQb3J0KCk7Ci0gICAgaWYgKHBvcnQgPiAwKQotICAgICAgc2IuYXBwZW5kKFN0cmluZy52YWx1ZU9mKHBvcnQpKTsKLSAgICBlbHNlIGlmICh1cmwuZ2V0UHJvdG9jb2woKS5lcXVhbHNJZ25vcmVDYXNlKEhUVFBTKSkKLSAgICAgIHNiLmFwcGVuZChERUZBVUxUX0hUVFBTX1BPUlQpOwotICAgIGVsc2UKLSAgICAgIHNiLmFwcGVuZChERUZBVUxUX0hUVFBfUE9SVCk7Ci0gICAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQ09OVEVOVF9UWVBFLCBDT05URU5UX1RZUEVfVkFMVUUpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRDb250ZW50TGVuZ3RoKGJ5dGVbXSBwYXlsb2FkQXNCeXRlcykKLSAgewotICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RILCBTdHJpbmcudmFsdWVPZihwYXlsb2FkQXNCeXRlcy5sZW5ndGgpKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFNPQVBBY3Rpb24oU3RyaW5nIHNvYXBBY3Rpb24pCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKEhUVFBfSEVBREVSX1NPQVBfQUNUSU9OKTsKLSAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgc2IuYXBwZW5kKFFVT1RFKTsKLSAgICBpZiAoc29hcEFjdGlvbiAhPSBudWxsKQotICAgICAgc2IuYXBwZW5kKHNvYXBBY3Rpb24pOwotICAgIHNiLmFwcGVuZChRVU9URSk7Ci0gICAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29va2llKCkKLSAgewotICAgIGlmIChtYWludGFpblNlc3Npb24pCi0gICAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DT09LSUUsIGNvb2tpZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29va2llMigpCi0gIHsKLSAgICBpZiAobWFpbnRhaW5TZXNzaW9uKQotICAgICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQ09PS0lFMiwgY29va2llMik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V1dXQXV0aGVudGljYXRpb24oKQotICB7Ci0gICAgaWYgKGh0dHBCYXNpY0F1dGhVc2VybmFtZSAhPSBudWxsICYmIGh0dHBCYXNpY0F1dGhQYXNzd29yZCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoaHR0cEJhc2ljQXV0aFVzZXJuYW1lKTsKLSAgICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgICBzYi5hcHBlbmQoaHR0cEJhc2ljQXV0aFBhc3N3b3JkKTsKLSAgICAgIEJBU0U2NEVuY29kZXIgZW5jb2RlciA9IG5ldyBCQVNFNjRFbmNvZGVyKCk7Ci0gICAgICBTdHJpbmcgZW5jb2RlZFVzZXJOYW1lUGFzc3dvcmQgPSBlbmNvZGVyLmVuY29kZShzYi50b1N0cmluZygpLmdldEJ5dGVzKCkpOwotICAgICAgc2Iuc2V0TGVuZ3RoKDApOwotICAgICAgc2IuYXBwZW5kKEhUVFBfSEVBREVSX0FVVEgpOwotICAgICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgICBzYi5hcHBlbmQoQkFTSUMpOwotICAgICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICAgIHNiLmFwcGVuZChlbmNvZGVkVXNlck5hbWVQYXNzd29yZCk7Ci0gICAgICBzYi5hcHBlbmQoTkVXX0xJTkUpOwotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBFTVBUWV9TVFJJTkc7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFByb3h5QXV0aGVudGljYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHByb3h5VXNlck5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9VU0VSX05BTUUpOwotICAgIFN0cmluZyBwcm94eVBhc3N3b3JkID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBfUFJPWFlfUEFTU1dPUkQpOwotICAgIGlmIChwcm94eVVzZXJOYW1lICE9IG51bGwgJiYgcHJveHlQYXNzd29yZCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIocHJveHlVc2VyTmFtZSk7Ci0gICAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgICAgc2IuYXBwZW5kKHByb3h5UGFzc3dvcmQpOwotICAgICAgQkFTRTY0RW5jb2RlciBlbmNvZGVyID0gbmV3IEJBU0U2NEVuY29kZXIoKTsKLSAgICAgIFN0cmluZyBlbmNvZGVkVXNlck5hbWVQYXNzd29yZCA9IGVuY29kZXIuZW5jb2RlKHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSk7Ci0gICAgICBzYi5zZXRMZW5ndGgoMCk7Ci0gICAgICBzYi5hcHBlbmQoSFRUUF9IRUFERVJfUFJPWFlfQVVUSCk7Ci0gICAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICAgIHNiLmFwcGVuZChCQVNJQyk7Ci0gICAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgICAgc2IuYXBwZW5kKGVuY29kZWRVc2VyTmFtZVBhc3N3b3JkKTsKLSAgICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QWNjZXB0KCkKLSAgewotICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0FDQ0VQVCwgQUNDRVBUX1ZBTFVFKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VXNlckFnZW50KCkKLSAgewotICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX1VTRVJfQUdFTlQsIElCTV9XRUJfU0VSVklDRVNfRVhQTE9SRVIpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRDYWNoZUNvbnRyb2woKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQ0FDSEVfQ09OVFJPTCwgTk9fQ0FDSEUpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRQcmFnbWEoKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfUFJBR01BLCBOT19DQUNIRSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbm5lY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQ09OTkVDVElPTiwgQ0xPU0UpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRIVFRQSGVhZGVyKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoa2V5KTsKLSAgICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgICAgc2IuYXBwZW5kKHZhbHVlKTsKLSAgICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNlbmQoVVJMIHVybCwgU3RyaW5nIHNvYXBBY3Rpb24sIFN0cmluZyBwYXlsb2FkKSB0aHJvd3MgVW5rbm93bkhvc3RFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBieXRlW10gcGF5bG9hZEFzVVRGOCA9IHBheWxvYWQuZ2V0Qnl0ZXMoREVGQVVMVF9TT0FQX0VOQ09ESU5HKTsKLSAgICAgICAKLSAgICBTdHJpbmdCdWZmZXIgaHR0cEhlYWRlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRNZXRob2QodXJsKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0SG9zdCh1cmwpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRDb250ZW50VHlwZSgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRDb250ZW50TGVuZ3RoKHBheWxvYWRBc1VURjgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRBY2NlcHQoKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0VXNlckFnZW50KCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENhY2hlQ29udHJvbCgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRQcmFnbWEoKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0U09BUEFjdGlvbihzb2FwQWN0aW9uKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0V1dXQXV0aGVudGljYXRpb24oKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0UHJveHlBdXRoZW50aWNhdGlvbigpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRDb29raWUoKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0Q29va2llMigpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRDb25uZWN0aW9uKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKE5FV19MSU5FKTsgLy8gbmV3IGxpbmUgYmV0d2VlbiB0aGUgSFRUUCBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkCi0gICAgU29ja2V0IHNvY2tldCA9IGJ1aWxkU29ja2V0KHVybCk7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrZXQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgb3Mud3JpdGUoaHR0cEhlYWRlci50b1N0cmluZygpLmdldEJ5dGVzKERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcpKTsKLSAgICBvcy53cml0ZShwYXlsb2FkQXNVVEY4KTsKLSAgICBvcy5mbHVzaCgpOwotICAgIGh0dHBSZXNwb25zZSA9IG5ldyBIVFRQUmVzcG9uc2UoKTsKLSAgICByZWFkSFRUUFJlc3BvbnNlSGVhZGVyKGlzLCBodHRwUmVzcG9uc2UpOwotICAgIGludCBjb2RlID0gaHR0cFJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKTsKLSAgICBpZiAoY29kZSA9PSBIVFRQX0NPREVfQ09OVElOVUUpCi0gICAgewotICAgICAgaHR0cFJlc3BvbnNlLnJlc2V0KCk7Ci0gICAgICByZWFkSFRUUFJlc3BvbnNlSGVhZGVyKGlzLCBodHRwUmVzcG9uc2UpOwotICAgIH0KLSAgICByZWFkSFRUUFJlc3BvbnNlUGF5bG9hZChpcywgaHR0cFJlc3BvbnNlKTsKLSAgICBvcy5jbG9zZSgpOwotICAgIGlzLmNsb3NlKCk7Ci0gICAgc29ja2V0LmNsb3NlKCk7Ci0gICAgY29kZSA9IGh0dHBSZXNwb25zZS5nZXRTdGF0dXNDb2RlKCk7Ci0gICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gaHR0cFJlc3BvbnNlLmdldEhlYWRlcihIVFRQX0hFQURFUl9DT05URU5UX1RZUEUudG9Mb3dlckNhc2UoKSk7Ci0gICAgaWYgKGNvZGUgPj0gSFRUUF9DT0RFX0VYQ0VQVElPTiAmJiAoY29udGVudFR5cGUgPT0gbnVsbCB8fCBjb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoVEVYVF9YTUwudG9Mb3dlckNhc2UoKSkgPT0gLTEpKQotICAgICAgdGhyb3cgbmV3IEhUVFBUcmFuc3BvcnRFeGNlcHRpb24oY29kZSwgaHR0cFJlc3BvbnNlLmdldFN0YXR1c01lc3NhZ2UoKSwgaHR0cFJlc3BvbnNlLmdldEhlYWRlcnMoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVhZEhUVFBSZXNwb25zZUhlYWRlcihJbnB1dFN0cmVhbSBpcywgSFRUUFJlc3BvbnNlIHJlc3ApIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgYnl0ZSBiID0gMDsKLSAgICBpbnQgbGVuID0gMDsKLSAgICBpbnQgY29sb25JbmRleCA9IC0xOwotICAgIFN0cmluZyBrZXk7Ci0gICAgU3RyaW5nIHZhbHVlOwotICAgIGJvb2xlYW4gcmVhZFRvb011Y2ggPSBmYWxzZTsKLSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvczsKLSAgICBmb3IgKGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKDQwOTYpOzspCi0gICAgewotICAgICAgaWYgKCFyZWFkVG9vTXVjaCkKLSAgICAgICAgYiA9IChieXRlKWlzLnJlYWQoKTsKLSAgICAgIGlmIChiID09IC0xKQotICAgICAgICBicmVhazsKLSAgICAgIHJlYWRUb29NdWNoID0gZmFsc2U7Ci0gICAgICBpZiAoKGIgIT0gUikgJiYgKGIgIT0gTikpCi0gICAgICB7Ci0gICAgICAgIGlmICgoYiA9PSBDT0xPTikgJiYgKGNvbG9uSW5kZXggPT0gLTEpKQotICAgICAgICAgIGNvbG9uSW5kZXggPSBsZW47Ci0gICAgICAgIGxlbisrOwotICAgICAgICBiYW9zLndyaXRlKGIpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoYiA9PSBSKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGVsc2UgLy8gYiA9PSBOCi0gICAgICB7Ci0gICAgICAgIGlmIChsZW4gPT0gMCkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgYiA9IChieXRlKWlzLnJlYWQoKTsKLSAgICAgICAgcmVhZFRvb011Y2ggPSB0cnVlOwotICAgICAgICAvLyBBIHNwYWNlIG9yIHRhYiBhdCB0aGUgYmVnaW5pbmcgb2YgYSBsaW5lIG1lYW5zIHRoZSBoZWFkZXIgY29udGludWVzLgotICAgICAgICBpZiAoKGIgPT0gU1BBQ0UpIHx8IChiID09IFRBQikpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJhb3MuY2xvc2UoKTsKLSAgICAgICAgYnl0ZVtdIGJBcnJheSA9IGJhb3MudG9CeXRlQXJyYXkoKTsKLSAgICAgICAgYmFvcy5yZXNldCgpOwotICAgICAgICBpZiAoY29sb25JbmRleCAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIGtleSA9IG5ldyBTdHJpbmcoYkFycmF5LCAwLCBjb2xvbkluZGV4LCBERUZBVUxUX0hUVFBfSEVBREVSX0VOQ09ESU5HKTsKLSAgICAgICAgICB2YWx1ZSA9IG5ldyBTdHJpbmcoYkFycmF5LCBjb2xvbkluZGV4ICsgMSwgbGVuIC0gMSAtIGNvbG9uSW5kZXgsIERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcpOwotICAgICAgICAgIGNvbG9uSW5kZXggPSAtMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBrZXkgPSBuZXcgU3RyaW5nKGJBcnJheSwgMCwgbGVuLCBERUZBVUxUX0hUVFBfSEVBREVSX0VOQ09ESU5HKTsKLSAgICAgICAgICB2YWx1ZSA9IEVNUFRZX1NUUklORzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJlc3AuaXNTdGF0dXNTZXQoKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlYWRlciBzdGF0dXMgY29kZQotICAgICAgICAgIGludCBzdGFydCA9IGtleS5pbmRleE9mKFNQQUNFKSArIDE7Ci0gICAgICAgICAgU3RyaW5nIHMgPSBrZXkuc3Vic3RyaW5nKHN0YXJ0KS50cmltKCk7Ci0gICAgICAgICAgaW50IGVuZCA9IHMuaW5kZXhPZihTUEFDRSk7Ci0gICAgICAgICAgaWYgKGVuZCAhPSAtMSkKLSAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZygwLCBlbmQpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3Auc2V0U3RhdHVzQ29kZShJbnRlZ2VyLnBhcnNlSW50KHMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcC5zZXRTdGF0dXNDb2RlKC0xKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVzcC5zZXRTdGF0dXNNZXNzYWdlKGtleS5zdWJzdHJpbmcoc3RhcnQgKyBlbmQgKyAxKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHJlc3AuYWRkSGVhZGVyKGtleS50b0xvd2VyQ2FzZSgpLnRyaW0oKSwgdmFsdWUudHJpbSgpKTsKLSAgICAgICAgbGVuID0gMDsKLSAgICAgIH0KLSAgICB9Ci0gICAgYmFvcy5jbG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlYWRIVFRQUmVzcG9uc2VQYXlsb2FkKElucHV0U3RyZWFtIGlzLCBIVFRQUmVzcG9uc2UgcmVzcCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBieXRlIGIgPSAoYnl0ZSlpcy5yZWFkKCk7Ci0gICAgICB3aGlsZSAoYiAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgYmFvcy53cml0ZShiKTsKLSAgICAgICAgYiA9IChieXRlKWlzLnJlYWQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFNvY2tldFRpbWVvdXRFeGNlcHRpb24gc3RlKQotICAgIHsKLSAgICB9Ci0gICAgYmFvcy5jbG9zZSgpOwotICAgIHJlc3Auc2V0UGF5bG9hZChiYW9zLnRvQnl0ZUFycmF5KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlY2VpdmVzIHRoZSBieXRlcyBmcm9tIHRoZSBsYXN0IHdlYiBzZXJ2aWNlIGludm9jYXRpb24uICBUaGlzIGlzIHVzZWQgYnkgV1NFJ3MgZGVmYXVsdAotICAgKiBTT0FQIHRyYW5zcG9ydC4KLSAgICogCi0gICAqIEByZXR1cm4gQSBieXRlIGFycmF5LgotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0gICAqLwotICBieXRlW10gcmVjZWl2ZUJ5dGVzKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoaHR0cFJlc3BvbnNlICE9IG51bGwpCi0gICAgewotICAgICAgICBieXRlW10gcGF5bG9hZCA9IGh0dHBSZXNwb25zZS5nZXRQYXlsb2FkKCk7Ci0gICAgICAgIGlmIChDSFVOS0VELmVxdWFsc0lnbm9yZUNhc2UoaHR0cFJlc3BvbnNlLmdldEhlYWRlcihIVFRQX0hFQURFUl9UUkFOU0ZFUl9FTkNPREVJTkcudG9Mb3dlckNhc2UoKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShwYXlsb2FkKTsKLSAgICAgICAgICBDaHVua2VkSW5wdXRTdHJlYW0gY2lzID0gbmV3IENodW5rZWRJbnB1dFN0cmVhbShiYWlzKTsKLSAgICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICAgICAgICBieXRlIGI7Ci0gICAgICAgICAgd2hpbGUgKChiID0gKGJ5dGUpY2lzLnJlYWQoKSkgIT0gLTEpCi0gICAgICAgICAgICBiYW9zLndyaXRlKGIpOwotICAgICAgICAgIGJhb3MuY2xvc2UoKTsKLSAgICAgICAgICBjaXMuY2xvc2UoKTsKLSAgICAgICAgICBiYWlzLmNsb3NlKCk7Ci0gICAgICAgICAgcmV0dXJuIGJhb3MudG9CeXRlQXJyYXkoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYWZ0ZXIgV1NFIHN3dGljaGVzIHRvIHVzaW5nIGEgcGx1Z2dhYmxlIHRyYW5zcG9ydCB2aWEgZW5oYW5jZW1lbnQgMTc2NDkzLgotICAgKiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgbWV0aG9kIGlzIHJlZmFjdG9yZWQgdG8gdGhlIHJlY2VpdmVCeXRlcygpIG1ldGhvZC4gCi0gICAqIAotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHVibGljIEJ1ZmZlcmVkUmVhZGVyIHJlY2VpdmUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYnl0ZVtdIHBheWxvYWQgPSByZWNlaXZlQnl0ZXMoKTsKLSAgICAgIGlmIChwYXlsb2FkICE9IG51bGwpIHsKLSAgICAJRWxlbWVudCBzb2FwRW52ZWxvcGUgPSBYTUxVdGlscy5ieXRlQXJyYXlUb0VsZW1lbnQocGF5bG9hZCwgZmFsc2UpOwotICAgICAgICAvLyByZW1vdmUgWE1MIG5hbWVzcGFjZSBkZWNsYXJhdGlvbgotICAgICAgICBpZiAoc29hcEVudmVsb3BlICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKFhNTFV0aWxzLnNlcmlhbGl6ZShzb2FwRW52ZWxvcGUsIHRydWUpLmdldEJ5dGVzKERFRkFVTFRfU09BUF9FTkNPRElORykpLCBERUZBVUxUX1NPQVBfRU5DT0RJTkcpKTsgCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBnZXRIZWFkZXJzKCkKLSAgewotICAgIEhhc2h0YWJsZSBoZWFkZXJzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGlmIChodHRwUmVzcG9uc2UgIT0gbnVsbCkKLSAgICAgIGhlYWRlcnMucHV0QWxsKGh0dHBSZXNwb25zZS5nZXRIZWFkZXJzKCkpOwotICAgIHJldHVybiBoZWFkZXJzOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkcyB0aGUgZmlyc3QgbGluZSBvZiBhIGNvbm5lY3Rpb24gcmVxdWVzdCB0byB0aGUgcHJveHkgc2VydmVyCi0gICAqIAotICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdGhhdCB3ZSB3YW50IHRvIHVsdGltYXRlbHkgY29ubmVjdCB0by4KLSAgICogQHJldHVybiBBIHN0cmluZyBvZiB0aGUgZm9ybSAiQ09OTkVDVCAmbHQ7aG9zdG5hbWUmZ3Q7OiZsdDtwb3J0Jmd0OyBIVFRQLzEuMCIuCi0gICAqLwotICBwcml2YXRlIFN0cmluZ0J1ZmZlciBnZXRDb25uZWN0TWV0aG9kKFVSTCB1cmwpIHsKLQkKLQkgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoSFRUUF9DT05ORUNUKTsKLQkgIHNiLmFwcGVuZChTUEFDRSk7CSAgCi0JICBzYi5hcHBlbmQodXJsLmdldEhvc3QoKSk7Ci0JICBzYi5hcHBlbmQoQ09MT04pOwotCSAgc2IuYXBwZW5kKHVybC5nZXRQb3J0KCkpOwotCSAgc2IuYXBwZW5kKFNQQUNFKTsKLQkgIHNiLmFwcGVuZChIVFRQX1ZFUlNJT05fMV8wKTsKLQkgIHNiLmFwcGVuZChORVdfTElORSk7Ci0JICByZXR1cm4gc2I7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3QgYSBzb2NrZXQgdG8gdGhlIHByb3h5IHNlcnZlciB3aGljaCBiZSB1c2VkIHRvIHR1bm5lbCB0aHJvdWdoLgotICAgKiAKLSAgICogQHBhcmFtIHVybCBUaGUgVVJMIHRoYXQgd2Ugd2FudCB0byB1bHRpbWF0ZWx5IGNvbm5lY3QgdG8uCi0gICAqIEBwYXJhbSBwcm94eUhvc3QgVGhlIHByb3h5IGhvc3QuCi0gICAqIEBwYXJhbSBwcm94eVBvcnQgVGhlIHByb3h5IHBvcnQuCi0gICAqIEByZXR1cm4gQSBjb25uZWN0ZWQgc29ja2V0IHRvIHRoZSBwcm94eSBzZXJ2ZXIuIAotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIAotICAgKi8KLSAgcHJpdmF0ZSBTb2NrZXQgYnVpbGRUdW5uZWxTb2NrZXQoVVJMIHVybCwgU3RyaW5nIHByb3h5SG9zdCwgaW50IHByb3h5UG9ydCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCSAgU3RyaW5nQnVmZmVyIGh0dHBIZWFkZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JICBodHRwSGVhZGVyLmFwcGVuZChnZXRDb25uZWN0TWV0aG9kKHVybCkpOwotCSAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0UHJveHlBdXRoZW50aWNhdGlvbigpKTsgICAgICAgCi0JICBodHRwSGVhZGVyLmFwcGVuZChORVdfTElORSk7Ci0gICAgCi0JICBTb2NrZXQgdHVubmVsID0gbmV3IFNvY2tldChwcm94eUhvc3QsIHByb3h5UG9ydCk7Ci0gICAgCi0JICBJbnB1dFN0cmVhbSAgaXMgPSB0dW5uZWwuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgIE91dHB1dFN0cmVhbSBvcyA9IHR1bm5lbC5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICAKLQkgIG9zLndyaXRlKGh0dHBIZWFkZXIudG9TdHJpbmcoKS5nZXRCeXRlcyhERUZBVUxUX0hUVFBfSEVBREVSX0VOQ09ESU5HKSk7ICAgICAgICAKLQkgIG9zLmZsdXNoKCk7Ci0gICAgCi0JICBIVFRQUmVzcG9uc2UgaHR0cFJlc3BvbnNlID0gbmV3IEhUVFBSZXNwb25zZSgpOwotCSAgcmVhZEhUVFBSZXNwb25zZUhlYWRlcihpcywgaHR0cFJlc3BvbnNlKTsKLSAgICAKLQkgIGludCBjb2RlID0gaHR0cFJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKTsKLQotCSAgLy8gZW5zdXJlIHdlIGFyZSBzdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIHRoZSBwcm94eQotCSAgaWYgKGNvZGUgIT0gSFRUUF9DT0RFX09LKQotCQkgIHRocm93IG5ldyBIVFRQVHJhbnNwb3J0RXhjZXB0aW9uKGNvZGUsIGh0dHBSZXNwb25zZS5nZXRTdGF0dXNNZXNzYWdlKCksIGh0dHBSZXNwb25zZS5nZXRIZWFkZXJzKCkpOwotCSAgCi0JICByZXR1cm4gdHVubmVsOwotICB9Ci0gIAotICBwcml2YXRlIFNvY2tldCBidWlsZFNvY2tldChVUkwgdXJsKSB0aHJvd3MgVW5rbm93bkhvc3RFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTb2NrZXQgcyA9IG51bGw7Ci0gICAgU3RyaW5nIGhvc3QgPSB1cmwuZ2V0SG9zdCgpOwotICAgIGludCBwb3J0ID0gdXJsLmdldFBvcnQoKTsKLSAgICBTdHJpbmcgcHJveHlIb3N0ID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBfUFJPWFlfSE9TVCk7Ci0gICAgaW50IHByb3h5UG9ydCA9IEludGVnZXIuZ2V0SW50ZWdlcihTWVNfUFJPUF9IVFRQX1BST1hZX1BPUlQsIERFRkFVTFRfSFRUUF9QT1JUKS5pbnRWYWx1ZSgpOwotICAgIAotICAgIFN0cmluZyBub25Qcm94eUhvc3RzID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBfTk9OX1BST1hZX0hPU1RTKTsKLQotICAgIC8vICBTdHJpbmcgcHJveHlVc2VyTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX1BST1hZX1VTRVJfTkFNRSk7Ci0gICAgLy8gIFN0cmluZyBwcm94eVBhc3N3b3JkID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBfUFJPWFlfUEFTU1dPUkQpOwotICAgIGlmICh1cmwuZ2V0UHJvdG9jb2woKS5lcXVhbHNJZ25vcmVDYXNlKEhUVFBTKSkKLSAgICB7Ci0gICAgICBwcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUFNfUFJPWFlfSE9TVCk7Ci0gICAgICBwcm94eVBvcnQgPSBJbnRlZ2VyLmdldEludGVnZXIoU1lTX1BST1BfSFRUUFNfUFJPWFlfUE9SVCwgREVGQVVMVF9IVFRQU19QT1JUKS5pbnRWYWx1ZSgpOwotICAgICAgbm9uUHJveHlIb3N0cyA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQU19OT05fUFJPWFlfSE9TVFMpOwotCi0gICAgICBpZiAocHJveHlIb3N0ICE9IG51bGwgJiYgcHJveHlIb3N0Lmxlbmd0aCgpID4gMCAmJiAhaXNIb3N0SW5Ob25Qcm94eUhvc3RzKGhvc3QsIG5vblByb3h5SG9zdHMsIERFRkFVTFRfQ0FTRV9TRU5TSVRJVkVfRk9SX0hPU1RfTkFNRSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNTTCB3aXRoIHByb3h5IHNlcnZlcgotICAgICAgICBTb2NrZXQgdHVubmVsID0gYnVpbGRUdW5uZWxTb2NrZXQodXJsLCBwcm94eUhvc3QsIHByb3h5UG9ydCk7ICAgICAgIAotICAgICAgICBzID0gKChTU0xTb2NrZXRGYWN0b3J5KSBTU0xTb2NrZXRGYWN0b3J5LmdldERlZmF1bHQoKSkuY3JlYXRlU29ja2V0KHR1bm5lbCwgaG9zdCwgcG9ydCwgdHJ1ZSk7ICAgIAkgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBzID0gU1NMU29ja2V0RmFjdG9yeS5nZXREZWZhdWx0KCkuY3JlYXRlU29ja2V0KGhvc3QsIChwb3J0ID4gMCA/IHBvcnQgOiBERUZBVUxUX0hUVFBTX1BPUlQpKTsKLSAgICAgIC8vIFJlbW92aW5nIGRlcGVuZGVuY3kgb24gc29hcC5qYXIKLSAgICAgIC8vICBzID0gU1NMVXRpbHMuYnVpbGRTU0xTb2NrZXQoaG9zdCwgKHBvcnQgPiAwID8gcG9ydCA6IERFRkFVTFRfSFRUUFNfUE9SVCksIHByb3h5SG9zdCwgcHJveHlQb3J0KTsKLSAgICAgIC8vIFRPRE86Ci0gICAgICAvLyBCdWlsZCBhbiBTU0wgc29ja2V0IHRoYXQgc3VwcG9ydHMgcHJveHlVc2VyIGFuZCBwcm94eVBhc3N3b3JkLAotICAgICAgLy8gYXMgZGVtb25zdHJhdGVkIGluIHRoZSBmb2xsb3dpbmcgKG9yaWdpbmFsKSBsaW5lIG9mIGNvZGU6Ci0gICAgICAvLyAgcyA9IFNTTFV0aWxzLmJ1aWxkU1NMU29ja2V0KGhvc3QsIChwb3J0ID4gMCA/IHBvcnQgOiBERUZBVUxUX0hUVFBTX1BPUlQpLCBwcm94eUhvc3QsIHByb3h5UG9ydCwgcHJveHlVc2VyTmFtZSwgcHJveHlQYXNzd29yZCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHByb3h5SG9zdCAhPSBudWxsICYmIHByb3h5SG9zdC5sZW5ndGgoKSA+IDAgJiYgIWlzSG9zdEluTm9uUHJveHlIb3N0cyhob3N0LCBub25Qcm94eUhvc3RzLCBERUZBVUxUX0NBU0VfU0VOU0lUSVZFX0ZPUl9IT1NUX05BTUUpKQotICAgICAgcyA9IG5ldyBTb2NrZXQocHJveHlIb3N0LCBwcm94eVBvcnQpOwotICAgIGVsc2UKLSAgICAgIHMgPSBuZXcgU29ja2V0KGhvc3QsIChwb3J0ID4gMCA/IHBvcnQgOiBERUZBVUxUX0hUVFBfUE9SVCkpOwotICAgIHJldHVybiBzOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNIb3N0SW5Ob25Qcm94eUhvc3RzKFN0cmluZyBob3N0LCBTdHJpbmcgbm9uUHJveHlIb3N0cywgYm9vbGVhbiBjYXNlU2Vuc2l0aXZlKQotICB7Ci0gIAlpZiAoY2FzZVNlbnNpdGl2ZSkgcmV0dXJuIGhvc3QubWF0Y2hlcyhjcmVhdGVQYXR0ZXJuRnJvbVN0cmluZyhub25Qcm94eUhvc3RzKSk7Ci0gIAllbHNlIHJldHVybiBob3N0LnRvTG93ZXJDYXNlKCkubWF0Y2hlcyhjcmVhdGVQYXR0ZXJuRnJvbVN0cmluZyhub25Qcm94eUhvc3RzLnRvTG93ZXJDYXNlKCkpKTsgIAotICB9Ci0gIAotICAvKgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZvciBhIAotICAgKiBub3JtYWwgamF2YSBTdHJpbmcgdXNlZCBpbiB0aGUgcHJveHkgbWVjaGFuaXNtLiAKLSAgICogRm9yIGV4YW1wbGUsIHRoZSBodHRwLm5vblByb3h5SG9zdHMgY29udGFpbnMgZm9sbG93aW5nIFN0cmluZzogCi0gICAqICIxOTIuMTY4LjIuKnxsb2NhbGhvc3R8Ki5pYm0uY29tIiAuIEl0IHdvdWxkIGJlIAotICAgKiB0cmFuc2Zvcm1lZCBpbnRvOiAiMTkyXC4xNjhcLjJcLlx3Knxsb2NhbGhvc3R8XHcqXC5pYm1cLmNvbSIKLSAgICogVGh1cywgZm9sbG93aW5nIGhvc3Qgc3RyaW5nIHdvdWxkIG1hdGNoIGFib3ZlIHBhdHRlcm46Ci0gICAqIDE5Mi4xNjguMi41IDE5Mi4xNjguMi4gMTkyLjE2OC4yLjY2NiAxOTIuMTY4LjIudwotICAgKiBsb2NhbGhvc3QKLSAgICogdG9yb2xhYi5pYm0uY29tIC5pYm0uY29tIDEyMy5pYm0uY29tCi0gICAqIAotICAgKiBUd28gdHJhbnNmb3JtYXRpb25zIGFyZSBkb25lOgotICAgKiAxLiByZXBsYWNlIGFsbCAiLiIgaW50byAiXC4iIEFzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiwgJy4nIHJlcHJlc2VudHMgCi0gICAqICAgIGFueSBjaGFyYXRlci4gICJcLicgcmVwcmVzZW50cyB0aGUgcmVhbCBjaGFyYWN0ZXIgJy4nCi0gICAqIDIuIEluIG9yZGVyIHRvIGdldCB0aGUgcmVhbCBtZWFuaW5nIG9mICIqIiB1c2VkIGluIHByb3BlcnR5IAotICAgKiAgICBodHRwLm5vblByb3h5SG9zdHMsICJcdyoiIGlzIHVzZWQgdG8gcmVwbGFjZSAiKiIKLSAgICogICAgIlx3IiByZXByZXNlbnQgYSB3b3JkIGNoYXJhY3RlcjogW2EtekEtWl8wLTldCi0gICAqICAgIAotICAgKiBSZXN0cmljdGlvbjoKLSAgICogVGhlIHZhbGlkaXR5IG9mIGFkZHJlc3MgaXMgbm90IGNoZWNrZWQuIAotICAgKiAoMTkyLjE2OC4yLjU1NSBhbmQgMTkyLjE2OC4yLmNvbSBhcmUgT0spCi0gICAqIAotICAgKiBUT0RPIGNoZWNrIHdoZXRoZXIgKiBvY2N1cnMgaW4gYWRkcmVzcyBvciBob3N0bmFtZS4KLSAgICogaWYgaXQgb2NjdXVzIGluIGFkZHJlc3MgcmVwcmVzZW50YXRpb24sIHJlcGxhY2UgIioiIHdpdGggIlxkKiIKLSAgICogYW5kIGNoZWNrOiB2YWx1ZSA8IDI1NiA/Ci0gICAqLwotICBwcml2YXRlIFN0cmluZyBjcmVhdGVQYXR0ZXJuRnJvbVN0cmluZyhTdHJpbmcgc3RyKSAKLSAgewotICAgIC8qIFRoaXMgaXMgdGhlIHNhbWUgYXMgZm9sbG93aW5nIG1vcmUgdW5kZXJzdGFuZGFibGUgd2F5OgotCSAqIHJldHVybiBzdHIucmVwbGFjZSgiLiIsICJcXC4iKS5yZXBsYWNlKCIqIiwgIlxcdyoiKTsKLQkgKiBCdXQsIHJlcGxhY2UoQ2hhclNlcXVlbmNlIHRhcmdldCwgQ2hhclNlcXVlbmNlIHJlcGxhY2VtZW50KSBjYW4gb25seSBiZSAKLQkgKiBzdXBwb3J0ZWQgYWZ0ZXIgajJzZSAxLjUsIG9uIHRoZSBvdGhlciBoYW5kLCAKLQkgKiByZXBsYWNlQWxsKFN0cmluZyByZWdleCwgU3RyaW5nIHJlcGxhY2VtZW50KSBjYW4gYmUgc3VwcG9ydGVkIGJlZm9yZSAKLQkgKiBqMnNlIDEuNS4KLQkgKi8KLSAgICByZXR1cm4gc3RyID09IG51bGwgPyBudWxsIDogc3RyLnJlcGxhY2VBbGwoIlxcLiIsICJcXC4iKS5yZXBsYWNlQWxsKCJcXCoiLCAiXFx3KiIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBNZXNzYWdlUHJvY2Vzc29yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBNZXNzYWdlUHJvY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZWYzMTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQTWVzc2FnZVByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC51dGlsLlNvYXBIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JRGVzZXJpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5NZXNzYWdlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgaW1wbGVtZW50YXRpb24gZm9yIFdTRSBkZWZhdWx0IFNPQVAgdHJhbnNwb3J0J3MgSVNlcmlhbGl6ZXIgYW5kIElEZXNlcmlhbGl6ZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQTWVzc2FnZVByb2Nlc3NvciBpbXBsZW1lbnRzIElTZXJpYWxpemVyLCBJRGVzZXJpYWxpemVyIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElURVJBTCA9ICJsaXRlcmFsIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TT0FQX0VOQ09ESU5HID0gIlVURi04IjsJCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfU0VQQVJBVE9SID0gU3lzdGVtLmdldFByb3BlcnRpZXMoKS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQkKLQkvKgotCSAqIENvbnN0cnVjdG9yLgotCSAqLwotCVNPQVBNZXNzYWdlUHJvY2Vzc29yKCkge30KLQkKLQkvKgotCSAqIEpvaW4gdGhlIGVuY29kaW5nU3R5bGVzIGludG8gYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgam9pbkVuY29kaW5nU3R5bGVzKExpc3QgbGlzdCkgewotCQkKLQkJaWYgKGxpc3QuaXNFbXB0eSgpKQotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQotCQlJdGVyYXRvciBpdGVyID0gbGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0JCQlzYi5hcHBlbmQoIiAiKS5hcHBlbmQoaXRlci5uZXh0KCkpOwotCQkKLQkJcmV0dXJuIHNiLnN1YnN0cmluZygxKS50b1N0cmluZygpOwotCX0KLQkKLQkvKgotCSAqIFJldHJpZXZlcyB0aGUgZW5jb2RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYmluZGluZyBmb3IgdGhlIHNlbGVjdGVkIG9wZXJhdGlvbi4KLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25seSBmb3IgUlBDIHN0eWxlIGJpbmRpbmdzLiAgVHdvIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhcmUgcmV0dXJuZWQ6ICAKLQkgKiBJZiB0aGUgdXNlIGlzIGVuY29kZWQsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVuY29kaW5nIG5hbWVzcGFjZSBpbiBlbGVtZW50IFswXSBhbmQgdGhlIAotCSAqIGVuY29kaW5nIHN0eWxlKHMpIGluIGVsZW1lbnQgWzFdLiAgSWYgdGhlIHVzZSBpcyBsaXRlcmFsLCB0aGVuIGJvdGggdmFsdWVzIHdpbGwgYmUgbnVsbC4KLQkgKi8KLQlwcml2YXRlIFN0cmluZ1tdIGdldEVuY29kaW5nSW5mbyhNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7Ci0JCQotCQlTdHJpbmdbXSBpbmZvID0gbmV3IFN0cmluZ1tdIHsgbnVsbCwgbnVsbCB9OwotCQkKLQkJSXRlcmF0b3IgaXRlciA9IGNvbnRleHQuZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldEJpbmRpbmdJbnB1dCgpCi0JCQkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLQkJCQkKLQkJLy8gbG9vayBmb3IgdGhlIHNvYXBiaW5kOmJvZHkgZXh0ZW5zaWxpYml0eSBlbGVtZW50Ci0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXRlci5uZXh0KCk7CQkJCi0JCQlpZiAoIShlIGluc3RhbmNlb2YgU09BUEJvZHkpKQotCQkJCWNvbnRpbnVlOwotCQkJCi0JCQlTT0FQQm9keSBzb2FwQm9keSA9IChTT0FQQm9keSkgZTsKLQkJCQotCQkJLy8gdXNlPSJlbmNvZGVkIgotCQkJaWYgKCFMSVRFUkFMLmVxdWFscyhzb2FwQm9keS5nZXRVc2UoKSkpIHsKLQkJCQlpbmZvWzBdID0gc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQkJaW5mb1sxXSA9IGpvaW5FbmNvZGluZ1N0eWxlcyhzb2FwQm9keS5nZXRFbmNvZGluZ1N0eWxlcygpKTsKLQkJCX0KLQkJCQkJCi0JCQlicmVhazsKLQkJfQotCQkKLQkJLy8gbmFtZXNwYWNlIG5vdCBzcGVjaWZpZWQgb24gdGhlIHNvYXBiaW5kOmJvZHkgZWxlbWVudCwgdXNlIHRoZSBkZWZpbml0aW9uJ3MKLQkJaWYgKGluZm9bMF0gPT0gbnVsbCkKLQkJCWluZm9bMF0gPSBjb250ZXh0LmdldERlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCi0JCXJldHVybiBpbmZvOwotCX0KLQkKLQkvKgotICAgICAqIFdTLUk6IEluIGEgcnBjLWxpdGVyYWwgU09BUCBiaW5kaW5nLCB0aGUgc2VyaWFsaXplZCBjaGlsZCBlbGVtZW50IG9mIHRoZSAKLSAgICAgKiBzb2FwOkJvZHkgZWxlbWVudCBjb25zaXN0cyBvZiBhIHdyYXBwZXIgZWxlbWVudCwgd2hvc2UgbmFtZXNwYWNlIGlzIHRoZSB2YWx1ZSAKLSAgICAgKiBvZiB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50IGFuZCB3aG9zZSBsb2NhbCBuYW1lIGlzIAotICAgICAqIGVpdGhlciB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIG9yIHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gc3VmZml4ZWQgCi0gICAgICogd2l0aCAiUmVzcG9uc2UiLiBUaGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCwgYXMgb3Bwb3NlZCB0byBiZWluZyAKLSAgICAgKiBvcHRpb25hbCwgdG8gZW5zdXJlIHRoYXQgdGhlIGNoaWxkcmVuIG9mIHRoZSBzb2FwOkJvZHkgZWxlbWVudCBhcmUgbmFtZXNwYWNlLQotICAgICAqIHF1YWxpZmllZC4KLSAgICAgKi8KLQlwcml2YXRlIEVsZW1lbnQgY3JlYXRlUlBDV3JhcHBlcihEb2N1bWVudCBkb2N1bWVudCwgTWVzc2FnZUNvbnRleHQgY29udGV4dCwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlKSB7Ci0JCQotCQlTdHJpbmcgZW5jb2RpbmdOYW1lc3BhY2VVUkkgPSBnZXRFbmNvZGluZ0luZm8oY29udGV4dClbMF07Ci0JCQotCQlyZXR1cm4gU29hcEhlbHBlci5jcmVhdGVSUENXcmFwcGVyRWxlbWVudCgKLQkJCQlkb2N1bWVudCwgCi0JCQkJbmFtZXNwYWNlVGFibGUsIAotCQkJCWVuY29kaW5nTmFtZXNwYWNlVVJJLCAKLQkJCQljb250ZXh0LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCksCi0JCQkJbnVsbCk7Ci0JfQotCQotCS8qCi0JICogSW5pdGlhbGl6ZXMgdGhlIGNvbnRlbnRzIG9mIG5ldyBJU09BUE1lc3NhZ2UuCi0JICovCi0Jdm9pZCBpbml0TWVzc2FnZShJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IFhNTFV0aWxzLmNyZWF0ZU5ld0RvY3VtZW50KG51bGwpOwotCQkJCi0JCQlIYXNodGFibGUgbmFtZXNwYWNlVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQlTb2FwSGVscGVyLmFkZERlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzKG5hbWVzcGFjZVRhYmxlKTsKLQkJCQotCQkJbWVzc2FnZS5zZXRFbnZlbG9wZShTb2FwSGVscGVyLmNyZWF0ZVNvYXBFbnZlbG9wZUVsZW1lbnQoZG9jdW1lbnQsIG5hbWVzcGFjZVRhYmxlKSk7Ci0JCQltZXNzYWdlLnNldEhlYWRlcihTb2FwSGVscGVyLmNyZWF0ZVNvYXBIZWFkZXJFbGVtZW50KGRvY3VtZW50KSk7Ci0JCQkKLQkJCUVsZW1lbnQgYm9keSA9IFNvYXBIZWxwZXIuY3JlYXRlU29hcEJvZHlFbGVtZW50KGRvY3VtZW50KTsKLQkJCWlmICghbWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLmlzRG9jdW1lbnRTdHlsZSgpKSB7Ci0JCQkJRWxlbWVudCBycGNXcmFwcGVyID0gY3JlYXRlUlBDV3JhcHBlcihkb2N1bWVudCwgbWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLCBuYW1lc3BhY2VUYWJsZSk7Ci0JCQkJYm9keS5hcHBlbmRDaGlsZChycGNXcmFwcGVyKTsKLQkJCX0JCQkKLQkJCW1lc3NhZ2Uuc2V0Qm9keShib2R5KTsJCQkKLQkJCQotCQkJbWVzc2FnZS5zZXROYW1lc3BhY2VUYWJsZShuYW1lc3BhY2VUYWJsZSk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihlKTsKLQkJfQkJCi0JfQotCQotCS8qCi0JICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBsb2NhbCBuYW1lIGZyb20gdGhlIHNvYXAgZW52ZWxvcGUgbmFtZXNwYWNlCi0JICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgb24gZWxlbWVudHMgdGhhdCBhcmUgbm90IG5hbWVzcGFjZSBhd2FyZSwgYnV0IHdlIGhhdmUgdG8gZ2l2ZQotCSAqIGl0IGEgbmFtZXNwYWNlIHRhYmxlIHRvIGxvb2sgdXAgcHJlZml4ZXMuCi0JICovCi0JcHJpdmF0ZSBFbGVtZW50IGdldFNPQVBFbGVtZW50KEVsZW1lbnQgcm9vdCwgU3RyaW5nIGxvY2FsTmFtZSwgTWFwIG5hbWVzcGFjZVRhYmxlKSB7Ci0JCVN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBuYW1lc3BhY2VUYWJsZS5nZXQoQ29uc3RhbnRzLlVSSV9TT0FQMTFfRU5WKTsKLQkJaWYgKHByZWZpeCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQlOb2RlTGlzdCBsaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZShwcmVmaXggKyAiOiIgKyBsb2NhbE5hbWUpOwotCQlpZiAobGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQlyZXR1cm4gKEVsZW1lbnQpIGxpc3QuaXRlbSgwKTsKLQl9Ci0JCi0JLyoKLQkgKiBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IHdpdGggdGhlIGdpdmVuIGxvY2FsIG5hbWUgZnJvbSB0aGUgc29hcCBlbnZlbG9wZSBuYW1lc3BhY2UuCi0JICogVGhpcyB2ZXJzaW9uIGFzc3VtZSB0aGUgZWxlbWVudHMgYXJlIG5hbWVzcGFjZSBhd2FyZS4KLQkgKi8KLQlwcml2YXRlIEVsZW1lbnQgZ2V0U09BUEVsZW1lbnROUyhFbGVtZW50IHJvb3QsIFN0cmluZyBsb2NhbE5hbWUpIHsKLQkJTm9kZUxpc3QgbGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhDb25zdGFudHMuVVJJX1NPQVAxMV9FTlYsIGxvY2FsTmFtZSk7Ci0JCWlmIChsaXN0LmdldExlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gbnVsbDsJCQotCQotCQlyZXR1cm4gKEVsZW1lbnQpIGxpc3QuaXRlbSgwKTsKLQl9Ci0JCi0JLyoKLQkgKiBDb252ZXJ0IGEgTm9kZUxpc3QgdG8gYSB2ZWN0b3Igb2YgZWxlbWVudHMsIG5vZGVzIHdoaWNoIGFyZSBub3QgZWxlbWVudHMgYXJlIHNraXBwZWQuCi0JICovCi0JcHJpdmF0ZSBWZWN0b3IgdG9FbGVtZW50VmVjdG9yKE5vZGVMaXN0IG5vZGVzKSB7Ci0JCQotCQlWZWN0b3IgdmVjdG9yID0gbmV3IFZlY3RvcigpOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlOb2RlIG5vZGUgPSBub2Rlcy5pdGVtKGkpOwotCQkJaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotCQkgICAgCXZlY3Rvci5hZGQobm9kZSk7CQkgICAgCi0JCX0KLQkJCi0JCXJldHVybiB2ZWN0b3I7CQotCX0KLQkKLQkvKgotCSAqIENvbnZlcnQgYSBOb2RlTGlzdCB0byBhbiBhcnJheSBvZiBlbGVtZW50cywgbm9kZXMgd2hpY2ggYXJlIG5vdCBlbGVtZW50cyBhcmUgc2tpcHBlZC4KLQkgKi8KLQlwcml2YXRlIEVsZW1lbnRbXSB0b0VsZW1lbnRBcnJheShOb2RlTGlzdCBub2RlcykgewotCQlWZWN0b3IgdmVjdG9yID0gdG9FbGVtZW50VmVjdG9yKG5vZGVzKTsKLQkJRWxlbWVudFtdIGVsZW1lbnRzID0gbmV3IEVsZW1lbnRbdmVjdG9yLnNpemUoKV07Ci0JCXZlY3Rvci5jb3B5SW50byhlbGVtZW50cyk7Ci0JCXJldHVybiBlbGVtZW50czsKLQl9Ci0JCi0JLy8gU2VyaWFsaXplIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwkKLQkKLQkvKgotCSAqIGFkZHMgdGhlIGVuY29kaW5nIHN0eWxlIGF0dHJpYnV0ZSB0byB0aGUgZWFjaCBlbGVtZW50IGluIHRoZSBnaXZlbiBhcnJheS4KLQkgKiBub29wIGlmIGVuY29kaW5nU3R5bGUgaXMgbnVsbAotCSAqLwotCXByaXZhdGUgdm9pZCBhZGRFbmNvZGluZ1N0eWxlKEVsZW1lbnRbXSBlbGVtZW50cywgU3RyaW5nIGVuY29kaW5nU3R5bGUpIHsKLQkJCQkKLQkJLy8gZW5jb2RpbmdTdHlsZSBpcyBub24tbnVsbCBvbmx5IGlmIHVzZT0iZW5jb2RlZCIKLQkJaWYgKGVsZW1lbnRzID09IG51bGwgfHwgZW5jb2RpbmdTdHlsZSA9PSBudWxsKQotCQkJcmV0dXJuOwotCQkKLQkJZm9yIChpbnQgaT0wOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLQkgICAgICAgIGlmIChlbGVtZW50c1tpXSA9PSBudWxsKQotCSAgICAgICAgCWNvbnRpbnVlOwotCSAgICAJZWxlbWVudHNbaV0uc2V0QXR0cmlidXRlKAotCSAgICAJCQlDb25zdGFudHMuTlNfUFJFRklYX1NPQVBfRU5WICsgIjoiICsgQ29uc3RhbnRzLkFUVFJfRU5DT0RJTkdfU1RZTEUsIGVuY29kaW5nU3R5bGUpOwkJCQotCQl9Ci0JfQotCQotCS8qCi0JICogU2VyaWFsaXplIGFuIGFycmF5IG9mIGVsZW1lbnRzCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgc2VyaWFsaXplRWxlbWVudHMoRWxlbWVudFtdIGVsZW1lbnRzKSB7Ci0JCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQotCQkJU3RyaW5nIHNlcmlhbGl6ZWRGcmFnbWVudCA9IFhNTFV0aWxzLnNlcmlhbGl6ZShlbGVtZW50c1tpXSwgdHJ1ZSk7Ci0JCQlpZiAoc2VyaWFsaXplZEZyYWdtZW50ID09IG51bGwpIHsKLQkJCQkvLyBPbiBTb21lIEpSRSdzIChTdW4gamF2YSA1KSBlbGVtZW50cyB3aXRoIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSB4c2kKLQkJCQkvLyBwcmVmaXggZG8gbm90IHNlcmlhbGl6ZSBwcm9wZXJseSBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgY2FuIG5vdAotCQkJCS8vIGJlIGZvdW5kIHNvIHRoZSBzdHJpbmcgcmV0dXJuZWQgY29tZXMgYmFjayBhcyBudWxsLiBUbyB3b3JrYXJvdW5kCi0JCQkJLy8gdGhpcyBwcm9ibGVtIHRyeSBhZGRpbmcgaW4gdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBhdHRyaWJ1dGUKLQkJCQkvLyBhbmQgcmV0cnkgdGhlIHNlcmlhbGl6YXRpb24gKGJ1ZyAxNDQ4MjQpCQkJIAotCQkJCWVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZSgieG1sbnM6eHNpIiwgQ29uc3RhbnRzLlVSSV8yMDAxX1NDSEVNQV9YU0kpOwotCQkJCXNlcmlhbGl6ZWRGcmFnbWVudCA9IFhNTFV0aWxzLnNlcmlhbGl6ZShlbGVtZW50c1tpXSwgdHJ1ZSk7Ci0JCQl9Ci0JCQkKLQkJCWJ1ZmZlci5hcHBlbmQoc2VyaWFsaXplZEZyYWdtZW50KTsKLQkJCWJ1ZmZlci5hcHBlbmQoTElORV9TRVBBUkFUT1IpOwotCQl9Ci0JCQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoKLQkgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBtZXNzYWdlIGlzIGEgcmVxdWVzdCBtZXNzYWdlIHVzaW5nIFJQQyBzdHlsZQotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc1JQQ1JlcXVlc3QoSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJcmV0dXJuIAotCQkJIW1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKS5pc0RvY3VtZW50U3R5bGUoKSAmJgkJCQkJCQkvLyBycGMgc3R5bGUKLQkJCSFCb29sZWFuLlRSVUUuZXF1YWxzKG1lc3NhZ2UuZ2V0UHJvcGVydHkoU09BUFRyYW5zcG9ydC5QUk9QX1JFQURfT05MWSkpOwkvLyBub3QgcmVhZC1vbmx5Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNlcmlhbGl6ZXIjc2VyaWFsaXplKGludCwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UpCi0JICovCi0JcHVibGljIFN0cmluZyBzZXJpYWxpemUoaW50IHBhcnQsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQotCQlzd2l0Y2ggKHBhcnQpIHsKLQkJCWNhc2UgSVNPQVBNZXNzYWdlLkVOVkVMT1BFOgotCQkJCUVsZW1lbnQgZW52ZWxvcGUgPSBtZXNzYWdlLmdldEVudmVsb3BlKHRydWUpOwotCQkJCQotCQkJCWlmIChpc1JQQ1JlcXVlc3QobWVzc2FnZSkpIHsJCQkJCQotCQkJCQlFbGVtZW50IGJvZHkgPSBnZXRTT0FQRWxlbWVudE5TKGVudmVsb3BlLCBDb25zdGFudHMuRUxFTV9CT0RZKTsKLQkJCQkJaWYgKGJvZHkgPT0gbnVsbCkKLQkJCQkJCWJvZHkgPSBnZXRTT0FQRWxlbWVudChlbnZlbG9wZSwgQ29uc3RhbnRzLkVMRU1fQk9EWSwgbWVzc2FnZS5nZXROYW1lc3BhY2VUYWJsZSgpKTsKLQkJCQkJCi0JCQkJCWlmIChib2R5ICE9IG51bGwpIHsKLQkJCQkJCUVsZW1lbnRbXSBib2R5Q29udGVudCA9IHRvRWxlbWVudEFycmF5KGJvZHkuZ2V0Rmlyc3RDaGlsZCgpLmdldENoaWxkTm9kZXMoKSk7Ci0JCQkJCQlhZGRFbmNvZGluZ1N0eWxlKGJvZHlDb250ZW50LCBnZXRFbmNvZGluZ0luZm8obWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpKVsxXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJCi0JCQkJU3RyaW5nIHhtbCA9IFhNTFV0aWxzLnNlcmlhbGl6ZShlbnZlbG9wZSwgdHJ1ZSk7Ci0JCQkJaWYgKHhtbCA9PSBudWxsKQotCQkJCQl4bWwgPSBuZXcgU3RyaW5nKChieXRlW10pIG1lc3NhZ2UuZ2V0UHJvcGVydHkoU09BUFRyYW5zcG9ydC5QUk9QX1JBV19CWVRFUykpOwotCQkJCQotCQkJCXJldHVybiB4bWw7Ci0JCQkJCi0JCQljYXNlIElTT0FQTWVzc2FnZS5IRUFERVJfQ09OVEVOVDoKLQkJCQlyZXR1cm4gc2VyaWFsaXplRWxlbWVudHMobWVzc2FnZS5nZXRIZWFkZXJDb250ZW50KCkpOwotCQkJCQotCQkJY2FzZSBJU09BUE1lc3NhZ2UuQk9EWV9DT05URU5UOgkJCQkKLQkJCQlFbGVtZW50W10gYm9keUNvbnRlbnQgPSBtZXNzYWdlLmdldEJvZHlDb250ZW50KCk7Ci0JCQkJCi0JCQkJaWYgKGlzUlBDUmVxdWVzdChtZXNzYWdlKSkKLQkJCQkJYWRkRW5jb2RpbmdTdHlsZShib2R5Q29udGVudCwgZ2V0RW5jb2RpbmdJbmZvKG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKSlbMV0pOwotCQkJCQotCQkJCXJldHVybiBzZXJpYWxpemVFbGVtZW50cyhib2R5Q29udGVudCk7Ci0JCX0KLQkJCi0JCXJldHVybiAiIjsKLQl9Ci0JCi0JLy8gRGVzZXJpYWxpemUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwkJCi0JCQotCS8qCi0JICogUmV0cmlldmUgdGhlIHNvYXAgaGVhZGVyIGZyb20gdGhlIGVudmVsb3BlIGFuZCBwb3B1bGF0ZSB0aGUgZ2l2ZW4gbWVzc2FnZQotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzSGVhZGVyKEVsZW1lbnQgZW52ZWxvcGUsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB7Ci0JCQotCQlFbGVtZW50IGhlYWRlciA9IGdldFNPQVBFbGVtZW50TlMoZW52ZWxvcGUsIENvbnN0YW50cy5FTEVNX0hFQURFUik7Ci0JCWlmIChoZWFkZXIgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJCi0JCW1lc3NhZ2Uuc2V0SGVhZGVyKGhlYWRlcik7Ci0JCW1lc3NhZ2Uuc2V0SGVhZGVyQ29udGVudCh0b0VsZW1lbnRBcnJheShoZWFkZXIuZ2V0Q2hpbGROb2RlcygpKSk7Ci0JfQotCQotCS8qCi0JICogSEFDSyAtIFRoZSByb290IGVsZW1lbnQgdGFnIG5hbWUgb2YgdGhlIGluc3RhbmNlIGRvY3VtZW50Ci0JICogaXMgYW1iaWd1b3VzLiAgSXQgbGFuZHMgb24gYSB2ZXJ5IGdyZXkgYXJlYSBiZXR3ZWVuIHRoZSBTT0FQCi0JICogc3BlYyBhbmQgdGhlIFdTREwgc3BlYy4gIFRoZSB0d28gc3BlY3MgZG8gbm90IGV4cGxpY2l0bHkgZGVmaW5lCi0JICogdGhhdCB0aGUgcm9vdCBlbGVtZW50IHRhZyBuYW1lIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2YgdGhlCi0JICogV1NETCBwYXJ0LiAgVGhlIGhhY2sgaXMgdG8gdHJlYXQgZWxlbWVudHMgd2l0aCBkaWZmZXJlbnQgdGFnIG5hbWVzCi0JICogYXMgaW5zdGFuY2VzIG9mIHRoZSBXU0RMIHBhcnQuCi0JICovCi0JcHJpdmF0ZSBFbGVtZW50W10gZml4U09BUFJlc3BvbnNlKE5vZGVMaXN0IGluc3RhbmNlTGlzdCwgTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewotCQkKLQkJVmVjdG9yIGluc3RhbmNlVmVjdG9yID0gdG9FbGVtZW50VmVjdG9yKGluc3RhbmNlTGlzdCk7CQkKLQkJRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VWZWN0b3Iuc2l6ZSgpXTsKLQkJCi0JCU9wZXJhdGlvbiBvcGVyID0gY29udGV4dC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCk7CQkKLQkJTWFwIHBhcnRzTWFwID0gb3Blci5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UGFydHMoKTsKLQkJCi0JCWlmIChwYXJ0c01hcC5zaXplKCkgPT0gMSkgewotCQkJSXRlcmF0b3IgaXQgPSBwYXJ0c01hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCQkJUGFydCBwYXJ0ID0gKFBhcnQpIGl0Lm5leHQoKTsKLQkJCQotCQkJU3RyaW5nIGZyYWdOYW1lOwotCQkJaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKQotCQkJCWZyYWdOYW1lID0gcGFydC5nZXRFbGVtZW50TmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJZWxzZQotCQkJCWZyYWdOYW1lID0gcGFydC5nZXROYW1lKCk7Ci0JCSAgICAKLQkJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VWZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLQkJICAgIAlFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgaW5zdGFuY2VWZWN0b3IuZ2V0KGkpOwotCQkgICAgCQotCQkgICAgCWlmICghZWxlbWVudC5nZXRUYWdOYW1lKCkuZXF1YWxzKGZyYWdOYW1lKSkgewotCQkgICAgCQlEb2N1bWVudCBkb2MgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLQkJICAgIAkJTm9kZUxpc3QgY2hpbGRyZW4gPSBlbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQkJICAgIAkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJICAgIAkJZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KGZyYWdOYW1lKTsKLQkJICAgIAkJCi0JCSAgICAJCWZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGorKykgewotCQkgICAgCQkJaWYgKGNoaWxkcmVuLml0ZW0oaikgIT0gbnVsbCkgewotCQkgICAgCQkJCWVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW4uaXRlbShqKSk7Ci0JCQkJICAgICAgICAgICAgLy8gV2hlbiB5b3UgYXBwZW5kIGEgbm9kZSBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIsCi0JCQkJICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGVsZW1lbnQgd2lsbCBsb3NlIGl0cyByZWZlcmVuY2UgdG8gdGhpcyBub2RlLAotCQkJCSAgICAgICAgICAgIC8vIHRoZXJlZm9yZSwgdGhlIHNpemUgb2YgdGhlIG5vZGUgbGlzdCB3aWxsIGRlY3JlYXNlIGJ5IDEuCi0JCQkJICAgICAgICAgICAgai0tOwotCQkgICAgCQkJfQotCQkgICAgCQl9Ci0JCSAgICAJCQotCQkgICAgCQlmb3IgKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGorKykgewotCQkgICAgCQkJT2JqZWN0IGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaik7Ci0JCSAgICAJCQlpZiAoYXR0ciAhPSBudWxsICYmIChhdHRyIGluc3RhbmNlb2YgQXR0cikpIHsKLQkJICAgIAkJCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKWF0dHI7Ci0JCSAgICAJCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLmdldE5hbWUoKSwgYXR0cmlidXRlLmdldFZhbHVlKCkpOwotCQkgICAgCQkJfQotCQkgICAgCQl9Ci0JCSAgICAJfQotCQkgICAgCWluc3RhbmNlRG9jdW1lbnRzW2ldID0gZWxlbWVudDsKLQkJICAgIH0KLQkJfQotCQllbHNlCi0JCQlpbnN0YW5jZVZlY3Rvci5jb3B5SW50byhpbnN0YW5jZURvY3VtZW50cyk7Ci0JCQotCQlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0JfQotCQotCS8qCi0JICogUmV0cmlldmUgdGhlIHNvYXAgaGVhZGVyIGZyb20gdGhlIGVudmVsb3BlIGFuZCBwb3B1bGF0ZSB0aGUgZ2l2ZW4gbWVzc2FnZQotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzQm9keShFbGVtZW50IGVudmVsb3BlLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgewotCQkKLQkJRWxlbWVudCBib2R5ID0gZ2V0U09BUEVsZW1lbnROUyhlbnZlbG9wZSwgQ29uc3RhbnRzLkVMRU1fQk9EWSk7Ci0JCWlmIChib2R5ID09IG51bGwpCi0JCQlyZXR1cm47CQkJCQotCQkKLQkJbWVzc2FnZS5zZXRCb2R5KGJvZHkpOwotCQkKLQkJLy8gY2hlY2sgZm9yIHNvYXAgZmF1bHQKLQkJRWxlbWVudCBmYXVsdCA9IGdldFNPQVBFbGVtZW50TlMoYm9keSwgQ29uc3RhbnRzLkVMRU1fRkFVTFQpOwotCSAgICBpZiAoZmF1bHQgIT0gbnVsbCkgewotCSAgICAJbWVzc2FnZS5zZXRGYXVsdChmYXVsdCk7Ci0JICAgIAlyZXR1cm47Ci0JICAgIH0KLQkgICAgICAgIAkgICAgICAgIAotCSAgICBOb2RlTGlzdCBpbnN0YW5jZUxpc3Q7Ci0JICAgIAotCSAgICBpZiAobWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLmlzRG9jdW1lbnRTdHlsZSgpKQotCSAgICAJaW5zdGFuY2VMaXN0ID0gYm9keS5nZXRDaGlsZE5vZGVzKCk7Ci0JICAgIGVsc2UgewotCSAgICAgICAgTm9kZUxpc3QgcnBjV3JhcHBlciA9IGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiKiIsIAotCSAgICAgICAgCQltZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkuZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLQotCSAgICAgICAgLyoKLQkgICAgICAgICogSEFDSyAtIFNvbWUgb2YgdGhlIHdlYiBzZXJ2aWNlcyBvdXQgb24gdGhlIGludGVybmV0IGRvIG5vdAotCSAgICAgICAgKiBzZXQgdGhlaXIgUlBDIHdyYXBwZXIgcHJvcGVybHkuICBJdCBzaG91bGQgYmUgc2V0IHRvIHRoZSBvdXRwdXQKLQkgICAgICAgICogbWVzc2FnZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBvcGVyYXRpb24uICBUaGUgaGFjayBpcyB0bwotCSAgICAgICAgKiBhc3N1bWUgdGhlIGZpcnN0IGVsZW1lbnQgaW5zaWRlIHRoZSBib2R5IGVsZW1lbnQgaXMgdGhlCi0JICAgICAgICAqIFJQQyB3cmFwcGVyLgotCSAgICAgICAgKi8KLQkgICAgICAgIGlmIChycGNXcmFwcGVyLmdldExlbmd0aCgpIDw9IDApCi0JICAgICAgICAJcnBjV3JhcHBlciA9IGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiKiIsICIqIik7Ci0KLQkgICAgICAgIGlmIChycGNXcmFwcGVyLmdldExlbmd0aCgpID4gMCkKLQkgICAgICAgIAlpbnN0YW5jZUxpc3QgPSBycGNXcmFwcGVyLml0ZW0oMCkuZ2V0Q2hpbGROb2RlcygpOwotCSAgICAgICAgZWxzZQotCSAgICAgICAgCXJldHVybjsKLQkgICAgfQotCSAgICAKLQkgICAgbWVzc2FnZS5zZXRCb2R5Q29udGVudChmaXhTT0FQUmVzcG9uc2UoaW5zdGFuY2VMaXN0LCBtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkpKTsKLQl9Ci0JCi0JLyoKLQkgKiBEZXNlcmlhbGl6ZSB0aGUgYnl0ZSBhcnJheSBpbnRvIHRoZSBnaXZlbiBzb2FwIG1lc3NhZ2UuICBUaGUgcGFydCBwYXJhbWV0ZXJzIHRlbGxzCi0JICogdGhlIG1ldGhvZCB3aGV0aGVyIHRoZSBpbnB1dCBpcyB0aGUgd2hvbGUgZW52ZWxvcCBvciBqdXN0IHRoZSBjb250ZW50cyBvZiB0aGUKLQkgKiBoZWFkZXIgb3IgYm9keS4gCi0JICovCi0Jdm9pZCBkZXNlcmlhbGl6ZShpbnQgcGFydCwgYnl0ZVtdIHhtbCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cwkJCi0JCVBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sCi0JCVNBWEV4Y2VwdGlvbiwKLQkJSU9FeGNlcHRpb24gewotCQkKLQkJRWxlbWVudCByb290ID0gWE1MVXRpbHMuYnl0ZUFycmF5VG9FbGVtZW50KHhtbCwgdHJ1ZSk7CQkKLQkJCi0JCXN3aXRjaCAocGFydCkgewotCQkJY2FzZSBJU09BUE1lc3NhZ2UuRU5WRUxPUEU6CQkJCSAKLQkJCQltZXNzYWdlLnNldEVudmVsb3BlKHJvb3QpOwotCQkJCXByb2Nlc3NIZWFkZXIocm9vdCwgbWVzc2FnZSk7Ci0JCQkJcHJvY2Vzc0JvZHkocm9vdCwgbWVzc2FnZSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElTT0FQTWVzc2FnZS5IRUFERVJfQ09OVEVOVDoKLQkJCQltZXNzYWdlLnNldEhlYWRlckNvbnRlbnQodG9FbGVtZW50QXJyYXkocm9vdC5nZXRDaGlsZE5vZGVzKCkpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVDoKLQkJCQltZXNzYWdlLnNldEJvZHlDb250ZW50KHRvRWxlbWVudEFycmF5KHJvb3QuZ2V0Q2hpbGROb2RlcygpKSk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBUYWNrIG9uIGEgcm9vdCBlbGVtZW50IHRoZSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyBhIHNlcmllcyBvZiBlbGVtZW50cy4KLQkgKiBUaGlzIGlzIG5lZWRlZCB0byBkZXNlcmlhbGl6ZSB0aGUgc3RyaW5nLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGFkZFJvb3RFbGVtZW50KFN0cmluZyB4bWwsIE1hcCBuYW1lc3BhY2VUYWJsZSkgewotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JICAgIHNiLmFwcGVuZCgiPHJvb3QiKTsKLQkgICAgCi0JICAgIEl0ZXJhdG9yIGl0ZXIgPSBuYW1lc3BhY2VUYWJsZS5rZXlTZXQoKS5pdGVyYXRvcigpOwotCSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkgICAgCU9iamVjdCB1cmkgPSBpdGVyLm5leHQoKTsKLQkgICAgCU9iamVjdCBwcmVmaXggPSBuYW1lc3BhY2VUYWJsZS5nZXQodXJpKTsKLQkgICAgCXNiLmFwcGVuZCgiICIpLmFwcGVuZCgieG1sbnM6IikuYXBwZW5kKHByZWZpeCkuYXBwZW5kKCI9XCIiKS5hcHBlbmQodXJpKS5hcHBlbmQoIlwiIik7Ci0JICAgIH0JICAgIAotCSAgICAKLQkgICAgc2IuYXBwZW5kKCI+IikuYXBwZW5kKHhtbCkuYXBwZW5kKCI8L3Jvb3Q+Iik7Ci0JICAgIHJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklEZXNlcmlhbGl6ZXIjZGVzZXJpYWxpemUoaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkZXNlcmlhbGl6ZShpbnQgcGFydCwgU3RyaW5nIHhtbCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQkKLQkJaWYgKHBhcnQgIT0gSVNPQVBNZXNzYWdlLkVOVkVMT1BFKQotCQkJeG1sID0gYWRkUm9vdEVsZW1lbnQoeG1sLCBtZXNzYWdlLmdldE5hbWVzcGFjZVRhYmxlKCkpOwotCQkKLQkJdHJ5IHsKLQkJCWRlc2VyaWFsaXplKHBhcnQsIHhtbC5nZXRCeXRlcyhERUZBVUxUX1NPQVBfRU5DT0RJTkcpLCBtZXNzYWdlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oZSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUFRyYW5zcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTQ5MmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUFRyYW5zcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLQotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklEZXNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuTWVzc2FnZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5TT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLQotLyoqCi0gKiBXU0UncyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElTT0FQVHJhbnNwb3J0Ci0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQVHJhbnNwb3J0IGltcGxlbWVudHMgSVNPQVBUcmFuc3BvcnQgewotCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1JFQURfT05MWSA9ICJwcm9wX3JlYWRfb25seSI7Ci0Jc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1JBV19CWVRFUyA9ICJwcm9wX3Jhd19ieXRlcyI7Ci0JCi0JLyoKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKi8KLQlTT0FQVHJhbnNwb3J0KCkge30KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnQjbmV3U2VyaWFsaXplcigpCi0JICovCi0JcHVibGljIElTZXJpYWxpemVyIG5ld1NlcmlhbGl6ZXIoKSB7CQkKLQkJcmV0dXJuIG5ldyBTT0FQTWVzc2FnZVByb2Nlc3NvcigpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0I25ld0Rlc2VyaWFsaXplcigpCi0JICovCi0JcHVibGljIElEZXNlcmlhbGl6ZXIgbmV3RGVzZXJpYWxpemVyKCkgewotCQlyZXR1cm4gbmV3IFNPQVBNZXNzYWdlUHJvY2Vzc29yKCk7Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgYmluZGluZyBpcyBzdXBwb3J0ZWQKLQkgKi8KLQlwcml2YXRlIHZvaWQgY2hlY2tCaW5kaW5nKEV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmcpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQkKLQkJU3RyaW5nIGJpbmRpbmdVUkkgPSBiaW5kaW5nLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQotCQkvLyBsb29raW5nIGZvciBTT0FQIDEuMSBiaW5kaW5nCi0JCWlmICghKGJpbmRpbmcgaW5zdGFuY2VvZiBTT0FQQmluZGluZykgfHwKLQkJCSFDb25zdGFudHMuVVJJX1dTREwxMV9TT0FQLmVxdWFscyhiaW5kaW5nVVJJKSkKLQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oRXhwbG9yZXJQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9VTlNVUFBPUlRFRF9CSU5ESU5HIiwgbmV3IFN0cmluZ1tdIHsgYmluZGluZ1VSSSB9KSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnQjbmV3TWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0Lk1lc3NhZ2VDb250ZXh0KQotCSAqLwotCXB1YmxpYyBJU09BUE1lc3NhZ2UgbmV3TWVzc2FnZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJCi0JCWNoZWNrQmluZGluZyhjb250ZXh0LmdldEJpbmRpbmdQcm90b2NvbCgpKTsKLQkJCi0JCVNPQVBNZXNzYWdlUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBTT0FQTWVzc2FnZVByb2Nlc3NvcigpOwotCQlJU09BUE1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBTT0FQTWVzc2FnZShjb250ZXh0LCBwcm9jZXNzb3IpOwotCQlwcm9jZXNzb3IuaW5pdE1lc3NhZ2UobWVzc2FnZSk7CQkJCi0JCXJldHVybiBtZXNzYWdlOwkJCQkKLQl9Ci0JCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgbWVzc2FnZSB1c2VzIGEgYmluZGluZyBhbmQgdHJhbnNwb3J0IHRoYXQgd2Ugc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgY2hlY2tNZXNzYWdlKElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJCi0JCUV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmcgPSBtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkuZ2V0QmluZGluZ1Byb3RvY29sKCk7IAotCQljaGVja0JpbmRpbmcoYmluZGluZyk7Ci0JCQotCQlTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IChTT0FQQmluZGluZykgYmluZGluZzsgCi0JCQkKLQkJaWYgKCFDb25zdGFudHMuVVJJX1NPQVAxMV9IVFRQLmVxdWFscyhzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSkpCi0JCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKEV4cGxvcmVyUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfVU5TVVBQT1JURURfVFJBTlNQT1JUIiwgbmV3IFN0cmluZ1tdIHsgc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCkgfSkpOwotCX0KLQkJCi0JLyoKLQkgKiBDcmVhdGUgYW4gSFRUUFRyYW5zcG9ydCBmb3IgaW50ZXJuYWwgdXNlLgotCSAqLwotCXByaXZhdGUgSFRUUFRyYW5zcG9ydCBjcmVhdGVJbnRlcm5hbFRyYW5zcG9ydChTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgewotCi0JCUhUVFBUcmFuc3BvcnQgaW50ZXJuYWxUcmFuc3BvcnQgPSBuZXcgSFRUUFRyYW5zcG9ydCgpOwotCQkgICAgCi0JCWlmICh1c2VybmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpIHsKLQkJCWludGVybmFsVHJhbnNwb3J0LnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZSh1c2VybmFtZSk7Ci0JCQlpbnRlcm5hbFRyYW5zcG9ydC5zZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQocGFzc3dvcmQpOwotCQl9Ci0JCQotCQlyZXR1cm4gaW50ZXJuYWxUcmFuc3BvcnQ7Ci0JfQkKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0I3NlbmQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UpCi0JICovCi0JcHVibGljIElTT0FQTWVzc2FnZSBzZW5kKFN0cmluZyB1cmwsIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCQotCQljaGVja01lc3NhZ2UobWVzc2FnZSk7CQkJCi0JCQkJCQkJCQotCQl0cnkgewotCQkJSFRUUFRyYW5zcG9ydCBpbnRlcm5hbFRyYW5zcG9ydCA9IGNyZWF0ZUludGVybmFsVHJhbnNwb3J0KHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0JCQlpbnRlcm5hbFRyYW5zcG9ydC5zZW5kKE5ldFV0aWxzLmNyZWF0ZVVSTCh1cmwpLCAoU3RyaW5nKSBtZXNzYWdlLmdldFByb3BlcnR5KElTT0FQTWVzc2FnZS5QUk9QX1NPQVBfQUNUSU9OKSwgbWVzc2FnZS50b1hNTCgpKTsKLQkJCQotCQkJU09BUE1lc3NhZ2VQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IFNPQVBNZXNzYWdlUHJvY2Vzc29yKCk7Ci0JCQlJU09BUE1lc3NhZ2UgcmVwbHkgPSBuZXcgU09BUE1lc3NhZ2UobWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLCBwcm9jZXNzb3IpOwotCQkJcmVwbHkuc2V0UHJvcGVydHkoUFJPUF9SRUFEX09OTFksIEJvb2xlYW4uVFJVRSk7Ci0JCQkKLQkJCWJ5dGVbXSByYXdCeXRlcyA9IGludGVybmFsVHJhbnNwb3J0LnJlY2VpdmVCeXRlcygpOwotCQkJCi0JCQl0cnkgeyAKLQkJCQlwcm9jZXNzb3IuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkVOVkVMT1BFLCByYXdCeXRlcywgcmVwbHkpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gaWYgZXJyb3Igb2NjdXJzIGR1cmluZyBkZXNlcmlhbGl6YXRpb24sIHdlIHdhbnQgdG8gc2F2ZSBhIGNvcHkgb2YgdGhlIGFjdHVhbCByYXcgYnl0ZXMKLQkJCQlyZXBseS5zZXRQcm9wZXJ0eShQUk9QX1JBV19CWVRFUywgcmF3Qnl0ZXMpOwotCQkJfQotCQkJCQkKLQkJCXJldHVybiByZXBseTsKLQkJfQotCQljYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IGU7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIAl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKGUpOwotCSAgICB9CQkJCi0JfQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQVHJhbnNwb3J0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODczYzUyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXI7Ci0KLS8qKgotICogV1NFJ3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgSVNPQVBUcmFuc3BvcnRQcm92aWRlci4KLSAqLwotcHVibGljIGNsYXNzIFNPQVBUcmFuc3BvcnRQcm92aWRlciBpbXBsZW1lbnRzIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgewkKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXIjbmV3VHJhbnNwb3J0KCkKLQkgKi8KLQlwdWJsaWMgSVNPQVBUcmFuc3BvcnQgbmV3VHJhbnNwb3J0KCkgewotCQlyZXR1cm4gbmV3IFNPQVBUcmFuc3BvcnQoKTsJCQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NPQVBNZXNzYWdlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NPQVBNZXNzYWdlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI0ZWQ3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9TT0FQTWVzc2FnZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA3MDUxMCAgIDE4NjM3NSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ29tcGlsZSBlcnJvcnMgaW4gd3N0LndzLmV4cGxvcmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBoYXMgc29tZSBjb21tb24gcm91dGluZXMgdXNlZCBieSB0aGUgV2ViIFNlcnZpY2VzIGV4cGxvcmVyIHRvIHdvcmsgd2l0aCBJU09BUE1lc3NhZ2VzLgotICovCi1wdWJsaWMgY2xhc3MgU09BUE1lc3NhZ2VVdGlscyB7Ci0JCi0JLyoqCi0JICogRGVjb2RlcyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIHRoYXQgaGF2ZSBiZWVuIGVuY29kZWQgYnkgV1NFIGludG8gdGhlIG9wZXJhdGlvbiBlbGVtZW50IG9mIHRoZSBXU0RMIG1vZGVsLgotCSAqIFRoZSBkZWNvZGVkIGRlY2xhcmF0aW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UgdGFibGUuCi0JICogIAotCSAqIEBwYXJhbSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSBUaGUgbmFtZXNwYWNlIHRhYmxlIHRvIHBvcHVsYXRlLgotCSAqIEBwYXJhbSBvcGVyRWxlbWVudCBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgd2l0aCB0aGUgZW5jb2RlZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBuZXcgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcmUgZm91bmQgYW5kIGFkZGVkIHRvIHRoZSBuYW1lc3BhY2UgdGFibGUsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVjb2RlTmFtZXNwYWNlVGFibGUoSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCkgewotCQkJCi0JCWJvb2xlYW4gdXBkYXRlZCA9IGZhbHNlOwotCi0JCVN0cmluZ1tdIG5zRGVjbGFyYXRpb25zID0gKFN0cmluZ1tdKSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX05BTUVTUEFDRSk7Ci0JCWlmIChuc0RlY2xhcmF0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCS8vIGVhY2ggbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGlzIGRlY29kZWQgaW50byAyIHBhcnRzOiB0aGUgcHJlZml4IAotCQkvLyBpbiBlbGVtZW50IFswXSBhbmQgdGhlIG5hbWVzcGFjZSB1cmkgaW4gZWxlbWVudCBbMV0uCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbnNEZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZ1tdIHByZWZpeF9ucyA9IFNvYXBIZWxwZXIuZGVjb2RlTmFtZXNwYWNlRGVjbGFyYXRpb24obnNEZWNsYXJhdGlvbnNbaV0pOwotCQkJCi0JCQkvLyBjaGVjayBpZiB0aGUgbmFtZXNwYWNlIHVyaSBpcyBhbHJlYWR5IGEga2V5IGluIHRoZSBuYW1lc3BhY2UgdGFibGUKLQkJCS8vIGlmIGl0IGlzLCBkb24ndCBhZGQgaXQKLQkJCWlmICghc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUuY29udGFpbnNLZXkocHJlZml4X25zWzFdKSkgewotCQkJICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChwcmVmaXhfbnNbMV0sIHByZWZpeF9uc1swXSk7Ci0JCQkgICAgdXBkYXRlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiB1cGRhdGVkOwotCX0KLQotCS8qKgotCSAqIFBvcHVsYXRlIHRoZSBoZWFkZXIgY29udGVudCBvZiB0aGUgZ2l2ZW4gSVNPQVBNZXNzYWdlIHVzaW5nIHRoZSB2YWx1ZXMgZnJvbSBXU0UncyBmcmFnbWVudCBtb2RlbAotCSAqIAotCSAqIEBwYXJhbSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSBBIG5hbWVzcGFjZSB0YWJsZSB0byB1c2UgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLgotCSAqIEBwYXJhbSBvcGVyRWxlbWVudCBBY2Nlc3MgV1NFJ3MgZnJhZ21lbnRzIHZpYSB0aGlzIG9wZXJhdGlvbiBlbGVtZW50LiAKLQkgKiBAcGFyYW0gc29hcE1lc3NhZ2UgVGhlIElTT0FQTWVzc2FnZSB0byBwb3B1bGF0ZS4KLQkgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0SGVhZGVyQ29udGVudEZyb21Nb2RlbChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0JCXRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkgICAgCi0JCVZlY3RvciBoZWFkZXJFbnRyaWVzID0gbmV3IFZlY3RvcigpOwotCSAgICAKLQkgICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycygpLml0ZXJhdG9yKCk7Ci0JICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkgICAgCVNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7Ci0JICAgIAlib29sZWFuIGlzVXNlTGl0ZXJhbCA9ICJsaXRlcmFsIi5lcXVhbHMoc29hcEhlYWRlci5nZXRVc2UoKSk7ICAgICAgICAgICAKLQkgICAgCUlYU0RGcmFnbWVudCBmcmFnID0gKElYU0RGcmFnbWVudCkgb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0JICAgIAlFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcygKLQkgICAgCQkJIWlzVXNlTGl0ZXJhbCwgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIHNvYXBNZXNzYWdlLmdldEVudmVsb3BlKGZhbHNlKS5nZXRPd25lckRvY3VtZW50KCkpOwotCSAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotCSAgICAJCWlmIChpbnN0YW5jZURvY3VtZW50c1tpXSA9PSBudWxsKQotCSAgICAJCQljb250aW51ZTsKLQkgICAgCQloZWFkZXJFbnRyaWVzLmFkZEVsZW1lbnQoaW5zdGFuY2VEb2N1bWVudHNbaV0pOwotCSAgICAJfQotCSAgICB9Ci0KLQkgICAgRWxlbWVudFtdIGhlYWRlckNvbnRlbnQgPSBuZXcgRWxlbWVudFtoZWFkZXJFbnRyaWVzLnNpemUoKV07Ci0JICAgIGhlYWRlckVudHJpZXMuY29weUludG8oaGVhZGVyQ29udGVudCk7Ci0JICAgIAotCSAgICBzb2FwTWVzc2FnZS5zZXRIZWFkZXJDb250ZW50KGhlYWRlckNvbnRlbnQpOwotCX0KLQotCS8qKgotCSAqIFBvcHVsYXRlIHRoZSBib2R5IGNvbnRlbnQgb2YgdGhlIGdpdmVuIElTT0FQTWVzc2FnZSB1c2luZyB0aGUgdmFsdWVzIGZyb20gV1NFJ3MgZnJhZ21lbnQgbW9kZWwKLQkgKiAKLQkgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgQSBuYW1lc3BhY2UgdGFibGUgdG8gdXNlIGR1cmluZyB0aGlzIG9wZXJhdGlvbi4KLQkgKiBAcGFyYW0gb3BlckVsZW1lbnQgQWNjZXNzIFdTRSdzIGZyYWdtZW50cyB2aWEgdGhpcyBvcGVyYXRpb24gZWxlbWVudC4gCi0JICogQHBhcmFtIHNvYXBNZXNzYWdlIFRoZSBJU09BUE1lc3NhZ2UgdG8gcG9wdWxhdGUuCi0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldEJvZHlDb250ZW50RnJvbU1vZGVsKEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkKLQkJdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotCQkKLQkgICAgVmVjdG9yIGJvZHlFbnRyaWVzID0gbmV3IFZlY3RvcigpOwotCSAgICBib29sZWFuIGlzVXNlTGl0ZXJhbCA9IG9wZXJFbGVtZW50LmlzVXNlTGl0ZXJhbCgpOwotCi0JICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0JICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkgICAgCVBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLQkgICAgCUlYU0RGcmFnbWVudCBmcmFnID0gKElYU0RGcmFnbWVudCkgb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0JICAgIAlFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcygKLQkgICAgCQkJICFpc1VzZUxpdGVyYWwsIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBzb2FwTWVzc2FnZS5nZXRFbnZlbG9wZShmYWxzZSkuZ2V0T3duZXJEb2N1bWVudCgpKTsKLQkgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLQkgICAgCQlpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLQkgICAgCQkJY29udGludWU7Ci0JICAgIAkJYm9keUVudHJpZXMuYWRkRWxlbWVudChpbnN0YW5jZURvY3VtZW50c1tpXSk7Ci0JICAgIAl9Ci0JICAgIH0KLQotCSAgICBFbGVtZW50W10gYm9keUNvbnRlbnQgPSBuZXcgRWxlbWVudFtib2R5RW50cmllcy5zaXplKCldOwotCSAgICBib2R5RW50cmllcy5jb3B5SW50byhib2R5Q29udGVudCk7Ci0JICAgIAotCSAgICBzb2FwTWVzc2FnZS5zZXRCb2R5Q29udGVudChib2R5Q29udGVudCk7Ci0JfQotCQotCS8qCi0JICogSWYgdGhlIGF0dHJpYnV0ZSBpcyBhIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiwgdGhlIG5hbWVzcGFjZSBwcmVmaXggaXMgcmV0dXJuZWQuCi0JICogT3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldE5TUHJlZml4KEF0dHIgYXR0cmlidXRlKSB7Ci0JCVN0cmluZyBuYW1lID0gYXR0cmlidXRlLmdldE5hbWUoKTsKLQkJaWYgKG5hbWUuc3RhcnRzV2l0aCgieG1sbnM6IikpCi0JCQlyZXR1cm4gbmFtZS5zdWJzdHJpbmcoNik7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKgotCSAqIGxvb2t1cCB0aGUgcHJlZml4IG9mIHRoZSBuYW1lc3BhY2VVUkksIGFzc3VtaW5nIHRoYXQgaXQgaXMgZGVjbGFyZWQgb24gdGhlIGVsZW1lbnQgaXRzZWxmCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGxvb2t1cFByZWZpeChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lc3BhY2VVUkkpIHsKLQkJCi0JCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgcHJlZml4ID0gZ2V0TlNQcmVmaXgoYXR0cmlidXRlKTsKLQkJCWlmIChwcmVmaXggIT0gbnVsbCAmJiBhdHRyaWJ1dGUuZ2V0VmFsdWUoKS5lcXVhbHMobmFtZXNwYWNlVVJJKSkKLQkJCQlyZXR1cm4gcHJlZml4OwotCQl9CQkKLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBHaXZlbiBhbiBhcnJheSBvZiBlbGVtZW50cywgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgbWF0Y2hlcwotCSAqIHRoZSBnaXZlbiBQYXJ0LiAgQSBtYXRjaCBpcyBkZXRlcm1pbmVkIGJ5IGNvbXBhcmluZyB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBQYXJ0IGFuZCBFbGVtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gcGFydCBUaGUgUGFydCAKLQkgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGFycmF5IG9mIEVsZW1lbnRzCi0JICogQHBhcmFtIG5hbWVzcGFjZVRhYmxlIEEgbmFtZXNwYWNlIHRhYmxlIGZvciBsb29raW5nIHVwIG5hbWVzcGFjZSBwcmVmaXhlcy4KLQkgKiBAcGFyYW0gZnJhZ05hbWUgTmFtZSBvZiB0aGUgUGFydCdzIGZyYWdtZW50IChlc3NlbnRpYWxseSB0aGUgUGFydCdzIGxvY2FsIG5hbWUpLgotCSAqIEBwYXJhbSBzdGFydCBUaGUgaW5kZXggdG8gYmVnaW4gdGhlIHNlYXJjaC4KLQkgKiBAcmV0dXJuIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgLTEgaWYgbm8gbWF0Y2ggaXMgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBpbnQgZmluZEZpcnN0TWF0Y2hpbmdFbGVtZW50KFBhcnQgcGFydCwgRWxlbWVudFtdIGVsZW1lbnRzLCBNYXAgbmFtZXNwYWNlVGFibGUsIFN0cmluZyBmcmFnTmFtZSwgaW50IHN0YXJ0KSB7Ci0JCQotCQlTdHJpbmcgbmFtZXNwYWNlVVJJID0gbnVsbDsKLQkJU3RyaW5nIHByZWZpeCA9IG51bGw7Ci0JCQotCQkvLyB0cnkgdG8gZ2V0IHRoZSBwcmVmaXgKLQkJaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKSB7Ci0JCQluYW1lc3BhY2VVUkkgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQlwcmVmaXggPSAoU3RyaW5nKSBuYW1lc3BhY2VUYWJsZS5nZXQobmFtZXNwYWNlVVJJKTsJCQkJCQotCQl9Ci0JCQotCQlmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewkJCQotCQkJRWxlbWVudCBlbGVtZW50ID0gZWxlbWVudHNbaV07Ci0JCQlTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0VGFnTmFtZSgpOwotCQkJCi0JCQkvLyB0cnkgdG8gZ2V0IHByZWZpeCBhZ2FpbiwgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBjYW4gYmUgZGlyZWN0bHkgb24gdGhlIGVsZW1lbnQKLQkJCWlmIChwcmVmaXggPT0gbnVsbCAmJiBuYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKLQkJCQlwcmVmaXggPSBsb29rdXBQcmVmaXgoZWxlbWVudCwgbmFtZXNwYWNlVVJJKTsKLQkJCQotCQkJaWYgKHByZWZpeCA9PSBudWxsICYmIG5hbWUuZXF1YWxzKGZyYWdOYW1lKSkKLQkJCQlyZXR1cm4gaTsKLQkJCWVsc2UgaWYgKHByZWZpeCAhPSBudWxsICYmIG5hbWUuZXF1YWxzKHByZWZpeCArICI6IiArIGZyYWdOYW1lKSkKLQkJCQlyZXR1cm4gaTsKLQkJfQotCQkJCQotCQlyZXR1cm4gLTE7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU29hcEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU29hcEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmM4MzQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NvYXBIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNvYXBIZWxwZXIKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgSGFzaHRhYmxlIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXyA9IG51bGw7Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcygpCi0gIHsKLSAgICBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfLnB1dChDb25zdGFudHMuVVJJX1NPQVAxMV9FTlYsQ29uc3RhbnRzLk5TX1BSRUZJWF9TT0FQX0VOVik7Ci0gICAgZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfLnB1dChDb25zdGFudHMuVVJJXzIwMDFfU0NIRU1BX1hTSSxDb25zdGFudHMuTlNfUFJFRklYX1NDSEVNQV9YU0kpOwotICAgIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXy5wdXQoQ29uc3RhbnRzLlVSSV8yMDAxX1NDSEVNQV9YU0QsQ29uc3RhbnRzLk5TX1BSRUZJWF9TQ0hFTUFfWFNEKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGFkZERlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzKEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VzKQotICB7Ci0gICAgaWYgKGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXyA9PSBudWxsKQotICAgICAgaW5pdERlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzKCk7Ci0gICAgRW51bWVyYXRpb24gZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSXMgPSBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18ua2V5cygpOwotICAgIHdoaWxlIChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlVVJJcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSSA9IChTdHJpbmcpZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSXMubmV4dEVsZW1lbnQoKTsKLSAgICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZXMucHV0KGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUkksKFN0cmluZylkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18uZ2V0KGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUkkpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc0RlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZVVSSSxTdHJpbmcgbmFtZXNwYWNlUHJlZml4KQotICB7Ci0gICAgaWYgKGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXyA9PSBudWxsKQotICAgICAgaW5pdERlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzKCk7Ci0gICAgaWYgKGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXy5nZXQobmFtZXNwYWNlVVJJKSAhPSBudWxsKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRWxlbWVudCBjcmVhdGVTb2FwRW52ZWxvcGVFbGVtZW50KERvY3VtZW50IGRvYyxIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUpCi0gIHsKLSAgICBFbGVtZW50IHNvYXBFbnZlbG9wZUVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgic29hcGVudjpFbnZlbG9wZSIpOwotICAgIEVudW1lcmF0aW9uIGUgPSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5rZXlzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAgICAgU3RyaW5nQnVmZmVyIHNvYXBFbnZlbG9wZU5hbWVzcGFjZUF0dHIgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4bWxuczoiKTsKLSAgICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZUF0dHIuYXBwZW5kKChTdHJpbmcpc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUuZ2V0KHNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSSkpOwotICAgICAgc29hcEVudmVsb3BlRWxlbWVudC5zZXRBdHRyaWJ1dGUoc29hcEVudmVsb3BlTmFtZXNwYWNlQXR0ci50b1N0cmluZygpLHNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSSk7ICAgICAgCi0gICAgfSAgICAKLSAgICByZXR1cm4gc29hcEVudmVsb3BlRWxlbWVudDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbGVtZW50IGNyZWF0ZVNvYXBIZWFkZXJFbGVtZW50KERvY3VtZW50IGRvYykKLSAgewotICAgIHJldHVybiBkb2MuY3JlYXRlRWxlbWVudCgic29hcGVudjpIZWFkZXIiKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbGVtZW50IGNyZWF0ZVNvYXBCb2R5RWxlbWVudChEb2N1bWVudCBkb2MpCi0gIHsKLSAgICByZXR1cm4gZG9jLmNyZWF0ZUVsZW1lbnQoInNvYXBlbnY6Qm9keSIpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVsZW1lbnQgY3JlYXRlUlBDV3JhcHBlckVsZW1lbnQoRG9jdW1lbnQgZG9jLEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSxTdHJpbmcgZW5jb2RpbmdOYW1lc3BhY2VVUkksU3RyaW5nIG9wZXJhdGlvbk5hbWUsIFN0cmluZyBlbmNvZGluZ1N0eWxlKQotICB7Ci0gICAgaW50IG5zSWQgPSAwOwotICAgIFN0cmluZ0J1ZmZlciB3cmFwcGVyRWxlbWVudE5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgU3RyaW5nIGVuY29kaW5nTmFtZXNwYWNlUHJlZml4ID0gKFN0cmluZylzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5nZXQoZW5jb2RpbmdOYW1lc3BhY2VVUkkpOwotICAgIGlmIChlbmNvZGluZ05hbWVzcGFjZVByZWZpeCAhPSBudWxsKQotICAgICAgd3JhcHBlckVsZW1lbnROYW1lLmFwcGVuZChlbmNvZGluZ05hbWVzcGFjZVByZWZpeCk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIExvb3AgdW50aWwgd2UgZ2VuZXJhdGUgYSB1bmlxdWUgcHJlZml4LgotICAgICAgZG8KLSAgICAgIHsKLSAgICAgICAgd3JhcHBlckVsZW1lbnROYW1lLnNldExlbmd0aCgwKTsKLSAgICAgICAgd3JhcHBlckVsZW1lbnROYW1lLmFwcGVuZCgibnMiKS5hcHBlbmQobnNJZCk7Ci0gICAgICAgIGlmICghc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUuY29udGFpbnNWYWx1ZSh3cmFwcGVyRWxlbWVudE5hbWUudG9TdHJpbmcoKSkpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG5zSWQrKzsKLSAgICAgIH0gd2hpbGUgKHRydWUpOwotICAgICAgCi0gICAgICAvLyBuZWVkIHRvIGVuc3VyZSB3aGF0ZXZlciBwcmVmaXggd2UgY2hvb3NlIGlzIGFkZGVkIHRvIHRoZSBuYW1lc3BhY2UgdGFibGUKLSAgICAgIC8vIHNvIHRoYXQgaXQgd2lsbCBub3QgYmUgcmV1c2VkIGxhdGVkIG9uCi0gICAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoZW5jb2RpbmdOYW1lc3BhY2VVUkksIHdyYXBwZXJFbGVtZW50TmFtZS50b1N0cmluZygpKTsKLSAgICB9ICAgIAotICAgIFN0cmluZyB3cmFwcGVyRWxlbWVudE5hbWVQcmVmaXggPSB3cmFwcGVyRWxlbWVudE5hbWUudG9TdHJpbmcoKTsKLSAgICB3cmFwcGVyRWxlbWVudE5hbWUuYXBwZW5kKCc6JykuYXBwZW5kKG9wZXJhdGlvbk5hbWUpOwotICAgIEVsZW1lbnQgd3JhcHBlckVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh3cmFwcGVyRWxlbWVudE5hbWUudG9TdHJpbmcoKSk7Ci0gICAgU3RyaW5nQnVmZmVyIG5hbWVzcGFjZUF0dHJOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieG1sbnM6Iik7Ci0gICAgbmFtZXNwYWNlQXR0ck5hbWUuYXBwZW5kKHdyYXBwZXJFbGVtZW50TmFtZVByZWZpeCk7Ci0gICAgd3JhcHBlckVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWVzcGFjZUF0dHJOYW1lLnRvU3RyaW5nKCksZW5jb2RpbmdOYW1lc3BhY2VVUkkpOwotICAgIGlmIChlbmNvZGluZ1N0eWxlICE9IG51bGwpCi0gICAgICB3cmFwcGVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoInNvYXBlbnY6ZW5jb2RpbmdTdHlsZSIsZW5jb2RpbmdTdHlsZSk7Ci0gICAgcmV0dXJuIHdyYXBwZXJFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZW5jb2RlTmFtZXNwYWNlRGVjbGFyYXRpb24oU3RyaW5nIHByZWZpeCwgU3RyaW5nIHVyaSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBzYi5hcHBlbmQocHJlZml4KTsKLSAgICBzYi5hcHBlbmQoIiAiKTsKLSAgICBzYi5hcHBlbmQodXJpKTsKLSAgICBTdHJpbmcgcmVzdWx0ID0gVVJMVXRpbHMuZW5jb2RlKHNiLnRvU3RyaW5nKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGRlY29kZU5hbWVzcGFjZURlY2xhcmF0aW9uKFN0cmluZyBzKQotICB7Ci0gICAgU3RyaW5nIHNDb3B5ID0gVVJMVXRpbHMuZGVjb2RlKHMpOwotICAgIGludCBpbmRleCA9IHNDb3B5LmluZGV4T2YoIiAiKTsKLSAgICBTdHJpbmdbXSBuc0RlY2wgPSBuZXcgU3RyaW5nWzJdOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBuc0RlY2xbMF0gPSBzQ29weS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgbnNEZWNsWzFdID0gc0NvcHkuc3Vic3RyaW5nKGluZGV4KzEsIHNDb3B5Lmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG5zRGVjbFswXSA9IG51bGw7Ci0gICAgICBuc0RlY2xbMV0gPSBzQ29weTsKLSAgICB9Ci0gICAgcmV0dXJuIG5zRGVjbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3hzZC9XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC94c2QvV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOWRjNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3hzZC9XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcgotewotICBwcml2YXRlIGZpbmFsIGNoYXIgUE9VTkQgPSAnIyc7Ci0gIHByaXZhdGUgVmVjdG9yIHhzZFNjaGVtYUxpc3RfOwotICBwcml2YXRlIEhhc2h0YWJsZSBwYXJ0VG9YU0RDYWNoZV87Ci0KLSAgcHVibGljIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpIHsKLSAgICB4c2RTY2hlbWFMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgICBwYXJ0VG9YU0RDYWNoZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRTY2hlbWFzKFZlY3RvciBzY2hlbWFMaXN0KSB7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2NoZW1hTGlzdC5zaXplKCk7aSsrKSB7Ci0gICAgICBPYmplY3Qgc2NoZW1hID0gc2NoZW1hTGlzdC5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIHhzZFNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoc2NoZW1hKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgWFNETmFtZWRDb21wb25lbnQgZ2V0WFNEVHlwZShQYXJ0IHBhcnQsIFN0cmluZyBpZCkgewotICAgIFhTRE5hbWVkQ29tcG9uZW50IGNvbXBvbmVudCA9IGdldFhTRFR5cGVGcm9tQ2FjaGUoaWQpOwotICAgIGlmIChjb21wb25lbnQgIT0gbnVsbCkKLSAgICAgIHJldHVybiBjb21wb25lbnQ7Ci0gICAgY29tcG9uZW50ID0gZ2V0WFNEVHlwZUZyb21TY2hlbWEocGFydCk7Ci0gICAgaWYgKGNvbXBvbmVudCAhPSBudWxsKQotICAgICAgYWRkVG9DYWNoZShpZCwgY29tcG9uZW50KTsKLSAgICByZXR1cm4gY29tcG9uZW50OwotICB9Ci0KLSAgcHVibGljIFhTRE5hbWVkQ29tcG9uZW50IGdldFhTRFR5cGVGcm9tQ2FjaGUoU3RyaW5nIGlkKSB7Ci0gICAgcmV0dXJuIChYU0ROYW1lZENvbXBvbmVudClwYXJ0VG9YU0RDYWNoZV8uZ2V0KGlkKTsKLSAgfQotCi0gIHB1YmxpYyBYU0ROYW1lZENvbXBvbmVudCBnZXRYU0RUeXBlRnJvbVNjaGVtYShQYXJ0IHBhcnQpIHsKLSAgICBib29sZWFuIGlzRWxlbWVudERlY2xhcmF0aW9uID0gKHBhcnQuZ2V0VHlwZU5hbWUoKSA9PSBudWxsKTsKLSAgICBRTmFtZSBxTmFtZSA9IGlzRWxlbWVudERlY2xhcmF0aW9uID8gcGFydC5nZXRFbGVtZW50TmFtZSgpIDogcGFydC5nZXRUeXBlTmFtZSgpOwotICAgIHJldHVybiBnZXRYU0RUeXBlRnJvbVNjaGVtYShxTmFtZS5nZXROYW1lc3BhY2VVUkkoKSwgcU5hbWUuZ2V0TG9jYWxQYXJ0KCksIGlzRWxlbWVudERlY2xhcmF0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBYU0ROYW1lZENvbXBvbmVudCBnZXRYU0RUeXBlRnJvbVNjaGVtYShTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLCBib29sZWFuIGlzRWxlbWVudERlY2xhcmF0aW9uKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RTY2hlbWFMaXN0Xy5zaXplKCk7IGkrKykgewotICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpeHNkU2NoZW1hTGlzdF8uZWxlbWVudEF0KGkpOwotICAgICAgVmVjdG9yIGNvbXBvbmVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBpZiAoaXNFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICAgIGNvbXBvbmVudHMuYWRkQWxsKHhzZFNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkpOwotICAgICAgZWxzZQotICAgICAgICBjb21wb25lbnRzLmFkZEFsbCh4c2RTY2hlbWEuZ2V0VHlwZURlZmluaXRpb25zKCkpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGNvbXBvbmVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApIHsKLSAgICAgICAgWFNETmFtZWRDb21wb25lbnQgY29tcG9uZW50ICA9IChYU0ROYW1lZENvbXBvbmVudClpdC5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBjb21wTlNVUkkgPSBjb21wb25lbnQuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIFN0cmluZyBjb21wTG9jYWxuYW1lID0gY29tcG9uZW50LmdldE5hbWUoKTsKLSAgICAgICAgaWYgKGNvbXBOU1VSSSAhPSBudWxsICYmIGNvbXBMb2NhbG5hbWUgIT0gbnVsbCAmJiBjb21wTlNVUkkuZXF1YWxzKG5hbWVzcGFjZVVSSSkgJiYgY29tcExvY2FsbmFtZS5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgICAgICByZXR1cm4gY29tcG9uZW50OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBYU0ROYW1lZENvbXBvbmVudCByZXNvbHZlWFNETmFtZWRDb21wb25lbnQoWFNETmFtZWRDb21wb25lbnQgY29tcG9uZW50KQotICB7Ci0gICAgaWYgKGNvbXBvbmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB1cmkgPSBjb21wb25lbnQuZ2V0VVJJKCk7Ci0gICAgICBTdHJpbmcgcW5hbWUgPSBjb21wb25lbnQuZ2V0UU5hbWUoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkU2NoZW1hTGlzdF8uc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSAoWFNEU2NoZW1hKXhzZFNjaGVtYUxpc3RfLmVsZW1lbnRBdChpKTsKLSAgICAgICAgaWYgKHhzZFNjaGVtYSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHRhcmdldE5TID0geHNkU2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgIGlmICh0YXJnZXROUyAhPSBudWxsICYmIHRhcmdldE5TLmVxdWFscyh0cmltUU5hbWUodXJpLCBxbmFtZSkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFhTRE5hbWVkQ29tcG9uZW50IHJlc29sdmVkQ29tcG9uZW50ID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgICAgICAgICAgcmVzb2x2ZWRDb21wb25lbnQgPSB4c2RTY2hlbWEucmVzb2x2ZVR5cGVEZWZpbml0aW9uKHFuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgICAgICAgICAgcmVzb2x2ZWRDb21wb25lbnQgPSB4c2RTY2hlbWEucmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihxbmFtZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbikKLSAgICAgICAgICAgICAgcmVzb2x2ZWRDb21wb25lbnQgPSB4c2RTY2hlbWEucmVzb2x2ZU1vZGVsR3JvdXBEZWZpbml0aW9uKHFuYW1lKTsKLSAgICAgICAgICAgIGlmIChpc0NvbXBvbmVudFJlc29sdmFibGUocmVzb2x2ZWRDb21wb25lbnQpKQotICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRDb21wb25lbnQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgdHJpbVFOYW1lKFN0cmluZyB1cmksIFN0cmluZyBxbmFtZSkKLSAgewotICAgIGludCBpbmRleCA9IHVyaS5pbmRleE9mKHFuYW1lKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgewotICAgICAgU3RyaW5nIG5zID0gdXJpLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICBpZiAobnMuY2hhckF0KGluZGV4LTEpID09IFBPVU5EKQotICAgICAgICByZXR1cm4gbnMuc3Vic3RyaW5nKDAsIGluZGV4LTEpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbnM7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiB1cmk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkVG9DYWNoZShTdHJpbmcgaWQsIFhTRE5hbWVkQ29tcG9uZW50IGNvbXBvbmVudCkgewotICAgIHBhcnRUb1hTRENhY2hlXy5wdXQoaWQsY29tcG9uZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzQ29tcG9uZW50UmVzb2x2YWJsZShYU0RDb21wb25lbnQgY29tcG9uZW50KQotICB7Ci0gICAgaWYgKGNvbXBvbmVudCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBjb21wb25lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgaWYgKHNjaGVtYSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjZkNmY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZEJ1c2luZXNzVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgQWRkVG9GYXZvcml0ZXNBY3Rpb24KLXsKLSAgcHVibGljIEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgT2JqZWN0IG9iaiA9IHNlbGVjdGVkRWxlbWVudC5nZXRBbGxVRERJTGlua3MoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBvYmo7Ci0gICAgU3RyaW5nIGJ1c2luZXNzTmFtZSA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rSW5xdWlyeUFQSSgpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rQnVzaW5lc3NLZXkoKTsKLSAgICBpZiAoYnVzaW5lc3NOYW1lID09IG51bGwpCi0gICAgICBidXNpbmVzc05hbWUgPSBidXNpbmVzc0tleTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19OQU1FLCBidXNpbmVzc05hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfSU5RVUlSWV9BUEksIGlucXVpcnlBUEkpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfS0VZLCBidXNpbmVzc0tleSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuVURESV9CVVNJTkVTUyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgT2JqZWN0IG9iaiA9IHNlbGVjdGVkRWxlbWVudC5nZXRBbGxVRERJTGlua3MoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBvYmo7Ci0gICAgU3RyaW5nIGJ1c2luZXNzTmFtZSA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rSW5xdWlyeUFQSSgpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rQnVzaW5lc3NLZXkoKTsKLSAgICBpZiAoYnVzaW5lc3NOYW1lID09IG51bGwpCi0gICAgICBidXNpbmVzc05hbWUgPSBidXNpbmVzc0tleTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19OQU1FLCBidXNpbmVzc05hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfSU5RVUlSWV9BUEksIGlucXVpcnlBUEkpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfS0VZLCBidXNpbmVzc0tleSk7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkgJiYgZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUyIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYWRkVG9GYXZvcml0ZXModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX0ZBVk9SSVRFU19TVUNDRVNTRlVMIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUyIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODU1MTI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5VRERJX0JVU0lORVNTKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IG51bGw7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFVERElMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICBpbnF1aXJ5VVJMID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtJbnF1aXJ5QVBJKCk7Ci0gICAgICBidXNpbmVzc0tleSA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rQnVzaW5lc3NLZXkoKTsKLSAgICAgIGJ1c2luZXNzTmFtZSA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldE5hbWUoKTsKLSAgICAgIGlmIChidXNpbmVzc05hbWUgPT0gbnVsbCkKLSAgICAgICAgYnVzaW5lc3NOYW1lID0gYnVzaW5lc3NLZXk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyByZXR1cm4gZmFsc2UgaWYgdW5hYmxlIHRvIGZpbmQgb3IgY3JlYXRlIGEgcmVnaXN0cnkgbm9kZS9lbGVtZW50IGluIHRoZQotICAgIC8vIFVEREkgcGVyc3BlY3RpdmUKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeVVSTCwgbnVsbCwgaW5xdWlyeVVSTCkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRSIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBwcmVwYXJlIHRoZSBhY3Rpb24KLSAgICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAvLyBwb3B1bGF0ZSBwcm9wZXJ0eSB0YWJsZQotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLCBidXNpbmVzc0tleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLCBidXNpbmVzc05hbWUpOwotICAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICAgaWYgKCFhY3Rpb24ucnVuKCkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9CVVNJTkVTU19OT1RfRk9VTkQiLCBidXNpbmVzc05hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZTVmMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBBZGRUb0Zhdm9yaXRlc0FjdGlvbgotewotICBwdWJsaWMgQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIE9iamVjdCBvYmogPSBzZWxlY3RlZEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHdzaWxVZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgb2JqOwotICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUlucXVpcnlBUEkoKTsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VLZXkoKTsKLSAgICBpZiAoc2VydmljZU5hbWUgPT0gbnVsbCkKLSAgICAgIHNlcnZpY2VOYW1lID0gc2VydmljZUtleTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUsIHNlcnZpY2VOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEksIGlucXVpcnlBUEkpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVksIHNlcnZpY2VLZXkpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuVURESV9TRVJWSUNFKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBPYmplY3Qgb2JqID0gc2VsZWN0ZWRFbGVtZW50LmdldEFsbFVERElTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB3c2lsVWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIG9iajsKLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlS2V5KCk7Ci0gICAgaWYgKHNlcnZpY2VOYW1lID09IG51bGwpCi0gICAgICBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VLZXk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9OQU1FLCBzZXJ2aWNlTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOUVVJUllfQVBJLCBpbnF1aXJ5QVBJKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZLCBzZXJ2aWNlS2V5KTsKLSAgICBpZiAoaXNNdWx0aXBsZUxpbmtBY3Rpb24oKSAmJiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9GQVZPUklURVNfQUxSRUFEWV9FWElTVFMiLCBzZXJ2aWNlTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYWRkVG9GYXZvcml0ZXModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCBzZXJ2aWNlTmFtZSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVMiLCBzZXJ2aWNlTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI4NmRjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kU2VydmljZVVVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLlVERElfU0VSVklDRSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSBudWxsOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gbnVsbDsKLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESVNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgd3NpbFVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBsZS5nZXRPYmplY3QoKTsKLSAgICAgIGlucXVpcnlVUkwgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpOwotICAgICAgc2VydmljZUtleSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VLZXkoKTsKLSAgICAgIHNlcnZpY2VOYW1lID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICBpZiAoc2VydmljZU5hbWUgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlS2V5OwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gcmV0dXJuIGZhbHNlIGlmIHVuYWJsZSB0byBmaW5kIG9yIGNyZWF0ZSBhIHJlZ2lzdHJ5IG5vZGUvZWxlbWVudCBpbiB0aGUKLSAgICAvLyBVRERJIHBlcnNwZWN0aXZlCi0gICAgaWYgKCFjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlVUkwsIG51bGwsIGlucXVpcnlVUkwpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiLCBzZXJ2aWNlTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBwcmVwYXJlIHRoZSBhY3Rpb24KLSAgICBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgLy8gcG9wdWxhdGUgcHJvcGVydHkgdGFibGUKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLCBzZXJ2aWNlS2V5KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsIHNlcnZpY2VOYW1lKTsKLSAgICAvLyBydW4gdGhlIGFjdGlvbgotICAgIGlmICghYWN0aW9uLnJ1bigpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfU0VSVklDRV9OT1RfRk9VTkQiLCBzZXJ2aWNlTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCBzZXJ2aWNlTmFtZSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4YjI5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESUJ1c2luZXNzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0V1NETFNlcnZpY2VzVG9vbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFkZFRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uIHsKLSAgICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotCi0gICAgcHVibGljIEFkZFRvRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgICAgICBub2RlTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1dzaWxDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2FjdGlvbnMvV3NpbENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEFkZFRvRmF2b3JpdGVzQWN0aW9uIG5ld0FjdGlvbihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRCkpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpCi0gICAgICAgIHJldHVybiBuZXcgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICAgICAgICByZXR1cm4gbmV3IEFkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJQnVzaW5lc3NUb29sKQotICAgICAgICByZXR1cm4gbmV3IEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXcgQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGFkZFRvRmF2b3JpdGVzKEhhc2h0YWJsZSB0YWJsZSwgU3RyaW5nIHJlbCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIGZhdk5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgZmF2Um9vdEVsZW1lbnQgPSBmYXZOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSb290RWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgICAgICBpZiAoIWUuaGFzTW9yZUVsZW1lbnRzKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICByZXR1cm4gZmF2Rm9sZGVyRWxlbWVudC5hZGRGYXZvcml0ZSh0YWJsZSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlLCBTdHJpbmcgcmVsKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgZmF2Tm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBmYXZSb290RWxlbWVudCA9IGZhdk5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgRW51bWVyYXRpb24gZSA9IGZhdlJvb3RFbGVtZW50LmdldEVsZW1lbnRzKHJlbCk7Ci0gICAgICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdkZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIHJldHVybiBmYXZGb2xkZXJFbGVtZW50LmZhdm9yaXRlRXhpc3RzKHRhYmxlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMDE3MTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5PcGVuUmVnaXN0cnlBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESU1haW5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESUJ1c2luZXNzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgQWN0aW9uIG5ld0FjdGlvbihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgU3RyaW5nIG5vZGVJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRCkpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICAgICAgcmV0dXJuIG5ldyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElCdXNpbmVzc1Rvb2wpCi0gICAgICByZXR1cm4gbmV3IEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBOdWxsQWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgcHVibGlzaEFQSSwgU3RyaW5nIHJlZ2lzdHJ5TmFtZSkKLSAgewotICAgIFZlY3RvciByZWdpc3RyeU5vZGVzID0gZ2V0UmVnaXN0cnlOb2Rlc0J5SW5xdWlyeVVSTChpbnF1aXJ5QVBJKTsKLSAgICBpZiAocmVnaXN0cnlOb2RlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEFsd2F5cyBhdHRlbXB0IHRvIHVzZSBhbiBleGlzdGluZyByZWdpc3RyeS4KLSAgICAgIE5vZGUgcmVnaXN0cnlOb2RlID0gKE5vZGUpIHJlZ2lzdHJ5Tm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSByZWdpc3RyeU5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKHJlZ2lzdHJ5Tm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gb3BlbiB0aGUgcmVnaXN0cnkgaWYgaXQgaXMgbm90IGFscmVhZHkgb3BlbmVkIGluIHRoZSBVRERJIHBlcnNwZWN0aXZlCi0gICAgT3BlblJlZ2lzdHJ5QWN0aW9uIG9wZW5SZWdBY3Rpb24gPSBuZXcgT3BlblJlZ2lzdHJ5QWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAvLyBwb3B1bGF0ZSB0aGUgcHJvcGVydHkgdGFibGUKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5SZWdBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocmVnaXN0cnlOYW1lKSkKLSAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSwgcmVnaXN0cnlOYW1lKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChpbnF1aXJ5QVBJKSkKLSAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwsIGlucXVpcnlBUEkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBydW4gdGhlIGFjdGlvbgotICAgIGlmICghb3BlblJlZ0FjdGlvbi5ydW4oKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCBWZWN0b3IgZ2V0UmVnaXN0cnlOb2Rlc0J5SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIFZlY3RvciByZWdpc3RyeU5vZGVzID0gbnVsbDsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKSAobmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpKTsKLSAgICBWZWN0b3IgY2hpbGROb2RlcyA9IHVkZGlNYWluTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpIGNoaWxkTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICAgaWYgKGNoaWxkTm9kZSBpbnN0YW5jZW9mIFJlZ2lzdHJ5Tm9kZSkKLSAgICAgIHsKLSAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KSBjaGlsZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpLmVxdWFscyhpbnF1aXJ5VVJMKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChyZWdpc3RyeU5vZGVzID09IG51bGwpCi0gICAgICAgICAgICByZWdpc3RyeU5vZGVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIHJlZ2lzdHJ5Tm9kZXMuYWRkRWxlbWVudChjaGlsZE5vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZWdpc3RyeU5vZGVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZDFjOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsV3NkbFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIEFkZFRvRmF2b3JpdGVzQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoKQotICB7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBnZXRXc2RsVXJsKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTRExfVVJMLCB3c2RsVVJMKTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLldTRExfU0VSVklDRSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IGdldFdzZGxVcmwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NETF9VUkwsIHdzZGxVUkwpOwotICAgIGlmIChpc011bHRpcGxlTGlua0FjdGlvbigpICYmIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUyIsIHdzZGxVUkwpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGFkZFRvRmF2b3JpdGVzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX0ZBVk9SSVRFU19TVUNDRVNTRlVMIiwgd3NkbFVSTCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVMiLCB3c2RsVVJMKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V3NkbFVybCgpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCB3c2lsV3NkbFNlcnZpY2VFbGVtZW50OwotICAgIE9iamVjdCBvYmogPSBzZWxlY3RlZEVsZW1lbnQuZ2V0QWxsV1NETFNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICB3c2lsV3NkbFNlcnZpY2VFbGVtZW50ID0gKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpIG9iajsKLSAgICByZXR1cm4gd3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5nZXRXU0RMU2VydmljZVVSTCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTkxNDJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBBZGRUb0Zhdm9yaXRlc0FjdGlvbgotewotICBwdWJsaWMgQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoKQotICB7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSBnZXRXc2lsVXJsKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTSUxfVVJMLCB3c2lsVVJMKTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IGdldFdzaWxVcmwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NJTF9VUkwsIHdzaWxVUkwpOwotICAgIGlmIChpc011bHRpcGxlTGlua0FjdGlvbigpICYmIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9GQVZPUklURVNfQUxSRUFEWV9FWElTVFMiLCB3c2lsVVJMKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhZGRUb0Zhdm9yaXRlcyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCB3c2lsVVJMKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUyIsIHdzaWxVUkwpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRXc2lsVXJsKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudC5nZXRXc2lsVXJsKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0NsZWFyV1NJTEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYWZhMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkNsZWFyTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIENsZWFyV1NJTEFjdGlvbiBleHRlbmRzIENsZWFyTm9kZUFjdGlvbiB7Ci0KLSAgICBwdWJsaWMgQ2xlYXJXU0lMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlSWQoKSkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL0NsZWFyV1NJTEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbE5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbFN0YXR1c0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYzBkYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5XU0RMRmlsZU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxXc2RsU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFdTRExTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLQotcHVibGljIGNsYXNzIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24KLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZl87Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxGaWxlTmFtZV87Ci0gIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotCi0gIHB1YmxpYyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5vZGVNYW5hZ2VyXyA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCwgaW50IHRvb2xJZCwgaW50IHZpZXdJZCwgaW50IHZpZXdUb29sSWQpCi0gIHsKLSAgICByZXR1cm4gSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCB0b29sSWQsIHZpZXdJZCwgdmlld1Rvb2xJZCwgIndzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gd3JpdGUoT3V0cHV0U3RyZWFtIG9zKQotICB7Ci0gICAgaWYgKGRlZl8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gd3JpdGVXU0RMRGVmaW5pdGlvbihvcywgZGVmXyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0RmlsZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxGaWxlTmFtZV87Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZ2V0V1NETEZyb21VUkwoKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgTGlzdE1hbmFnZXIgd3NpbFNlcnZpY2VzID0gd3NpbEVsZW1lbnQuZ2V0QWxsV1NETFNlcnZpY2VzKCk7Ci0gICAgTGlzdEVsZW1lbnQgbGUgPSB3c2lsU2VydmljZXMuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHNlcnZpY2UgPSAoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHNlcnZpY2UuZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgICB3c2RsRmlsZU5hbWVfID0gV1NETEZpbGVOYW1lSGVscGVyLmdldFdTRExGaWxlTmFtZSh3c2RsVVJMKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZfID0gKG5ldyBVZGRpNGpIZWxwZXIoKSkuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGdldFdTRExGcm9tVURESVJlZ2lzdHJ5KCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIExpc3RNYW5hZ2VyIHdzaWxTZXJ2aWNlcyA9IHdzaWxFbGVtZW50LmdldEFsbFVERElTZXJ2aWNlcygpOwotICAgIExpc3RFbGVtZW50IGxlID0gd3NpbFNlcnZpY2VzLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIHdzZGxGaWxlTmFtZV8gPSBzZXJ2aWNlLmdldE5hbWUoKSArICIud3NkbCI7Ci0gICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSBudWxsOwotICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSBzZXJ2aWNlLmdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpOwotICAgICAgaWYgKGlucXVpcnlVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJveHkgPSBuZXcgVURESVByb3h5KCk7Ci0gICAgICAgIHByb3h5LnNldElucXVpcnlVUkwoaW5xdWlyeVVSTCk7Ci0gICAgICB9Ci0gICAgICBkZWZfID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHVkZGk0akhlbHBlci5nZXRXU0RMKHNlcnZpY2UuZ2V0U2VydmljZURlZmluaXRpb24oKSwgcHJveHkpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIHRoZSB3c2RsIHJlcHJlc2VudGluZyB0aGlzIHNlcnZpY2UgaXMgdW5yZWFjaGFibGUgdGhyb3VnaCB0aGUgVURESQotICAgICAgLy8gcmVnaXN0cnkuIFdlIHdpbGwgdHJ5IHVzaW5nIHRoZSBkaXNjb3ZlcnkgVVJMIGluc3RlYWQuCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmXyA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbihzZXJ2aWNlLmdldFVERElTZXJ2aWNlRGlzY292ZXJ5VVJMKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZTIpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICAvLyBpZiB0aGUgZGlzY292ZXJ5VVJMIGFsc28gZmFpbHMsIHJldHVybiBhbiBlcnJvcgotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICAgICAgcmV0dXJuIGdldFdTRExGcm9tVVJMKCk7Ci0gICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gICAgICByZXR1cm4gZ2V0V1NETEZyb21VRERJUmVnaXN0cnkoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE3NWJjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbiBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiB7Ci0gICAgcHJpdmF0ZSBXU0lMRG9jdW1lbnQgd3NpbERvY187Ci0gICAgcHJpdmF0ZSBXc2lsRWxlbWVudCB3c2lsRWxlbWVudF87Ci0gICAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0KLSAgICBwdWJsaWMgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkKQotICAgIHsKLSAgICAgIHJldHVybiBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLCJ3c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpIHsKLSAgICAgICAgaWYgKHdzaWxEb2NfICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB3cml0ZVdTSUxEb2N1bWVudChvcywgd3NpbERvY18pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0RmlsZU5hbWUoKSB7Ci0gICAgICAgIFN0cmluZyB3c2lsRmlsZU5hbWUgPSB3c2lsRWxlbWVudF8uZ2V0V3NpbFVybCgpOwotICAgICAgICByZXR1cm4gd3NpbEZpbGVOYW1lLnN1YnN0cmluZyh3c2lsRmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEsIHdzaWxGaWxlTmFtZS5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgICAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0KLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgICAgICAgICB3c2lsRWxlbWVudF8gPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICAgICAgd3NpbERvY18gPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9NdWx0aXBsZUxpbmtBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL011bHRpcGxlTGlua0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjRjNDlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL011bHRpcGxlTGlua0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTXVsdGlwbGVMaW5rQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwdWJsaWMgTXVsdGlwbGVMaW5rQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIGlzTXVsdGlwbGVMaW5rQWN0aW9uID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTik7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04sIGlzTXVsdGlwbGVMaW5rQWN0aW9uKTsKLSAgICAgIHJldHVybiBwcm9jZXNzTXVsdGlwbGVMaW5rQWN0aW9uUGFyYW1ldGVycyhyZXF1ZXN0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnJlbW92ZShXc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKTsKLSAgICAgIFN0cmluZyBub2RlSURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgIFN0cmluZyB0b29sSURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICAgIFN0cmluZyB2aWV3SURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICAgIFN0cmluZyB2aWV3VG9vbElEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgICAgaWYgKG5vZGVJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgbm9kZUlEU3RyaW5nKTsKLSAgICAgIGlmICh0b29sSURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5UT09MSUQsIHRvb2xJRFN0cmluZyk7Ci0gICAgICBpZiAodmlld0lEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCB2aWV3SURTdHJpbmcpOwotICAgICAgaWYgKHZpZXdUb29sSURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXVE9PTElELCB2aWV3VG9vbElEU3RyaW5nKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NNdWx0aXBsZUxpbmtBY3Rpb25QYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIG5vZGVJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIFN0cmluZ1tdIHZpZXdJRHMgPSByZXF1ZXN0LmdldFBhcmFtZXRlclZhbHVlcyhBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgbm9kZUlEKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgdmlld0lEcyk7Ci0gICAgaWYgKHZpZXdJRHMubGVuZ3RoID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlXy5jb250YWluc0tleShXc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldFZpZXdJZHMoKQotICB7Ci0gICAgT2JqZWN0IG9iamVjdCA9IHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBpZiAob2JqZWN0ID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICBlbHNlIGlmIChvYmplY3QuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpCi0gICAgICByZXR1cm4gKFN0cmluZ1tdKW9iamVjdDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsoU3RyaW5nKW9iamVjdH07Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIChpc011bHRpcGxlTGlua0FjdGlvbigpKSA/IGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKSA6IGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nW10gdmlld0lkcyA9IGdldFZpZXdJZHMoKTsKLSAgICBpZiAodmlld0lkcyAhPSBudWxsICYmIHZpZXdJZHMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpZXdJZHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCB2aWV3SWRzW2ldKTsKLSAgICAgICAgaWYgKGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkpCi0gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJZHMpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTnVsbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTnVsbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGNmNTY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL051bGxBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLQotcHVibGljIGNsYXNzIE51bGxBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIE51bGxBY3Rpb24oKQotICB7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlM2ZlNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlRW50aXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIE9wZW5XU0lMQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotCi0gIHB1YmxpYyBPcGVuV1NJTEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCk7Ci0gICAgU3RyaW5nIGluc3BlY3Rpb25UeXBlID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCwgd3NpbFVSTCk7Ci0gICAgaWYgKGluc3BlY3Rpb25UeXBlICE9IG51bGwgJiYgaW5zcGVjdGlvblR5cGUubGVuZ3RoKCkgPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUsIGluc3BlY3Rpb25UeXBlKTsKLSAgICBmb3JtVG9vbC51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkKLSAgewotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gKEZvcm1Ub29sKXdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMKTsKLSAgICBpbnQgaW5zcGVjdGlvblR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSByb290Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgcm9vdCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSBnZXRPcGVuZWRXU0lMKHJvb3QsIHdzaWxVUkwpOwotICAgIGlmICh3c2lsRWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCh3c2lsVVJMKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBwYXJzZXIucGFyc2UoV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfTk9ORSk7Ci0gICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSBwYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzaWxVUkwpOwotICAgICAgICBpbnQgdHlwZSA9IHdzRW50aXR5LmdldFR5cGUoKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gV2ViU2VydmljZUVudGl0eS5UWVBFX0hUTUwpCi0gICAgICAgICAgcmV0dXJuIG9wZW5IVE1MKHdzRW50aXR5LmdldENoaWxkcmVuKCksIGluc3BlY3Rpb25UeXBlKTsKLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTCkKLSAgICAgICAgICByZXR1cm4gb3BlbldTSUwod3NpbFVSTCwgcGFyc2VyLmdldFdTSUxEb2N1bWVudCh3c2lsVVJMKSwgaW5zcGVjdGlvblR5cGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NJTF9VUkwiLCB3c2lsVVJMKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UodC5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJlc2VsZWN0V1NJTE5vZGUobm9kZU1hbmFnZXIsIHJvb3ROb2RlLmdldENoaWxkTm9kZSh3c2lsRWxlbWVudCkuZ2V0Tm9kZUlkKCksIGluc3BlY3Rpb25UeXBlKTsKLSAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XU0lMX0FMUkVBRFlfT1BFTkVEIiwgd3NpbFVSTCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIG9wZW5IVE1MKExpc3Qgd3NpbHMsIGludCBpbnNwZWN0aW9uVHlwZSkKLSAgewotICAgIGludCBub2RlSWQgPSAtMTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSByb290Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgcm9vdCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHdzaWxzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgV2ViU2VydmljZUVudGl0eSB3c2lsRW50aXR5ID0gKFdlYlNlcnZpY2VFbnRpdHkpaXQubmV4dCgpOwotICAgICAgU3RyaW5nIHdzaWxVUkwgPSB3c2lsRW50aXR5LmdldFVSSSgpOwotICAgICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSBnZXRPcGVuZWRXU0lMKHJvb3QsIHdzaWxVUkwpOwotICAgICAgaWYgKHdzaWxFbGVtZW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICB3c2lsRG9jLnJlYWQod3NpbFVSTCk7Ci0gICAgICAgICAgd3NpbEVsZW1lbnQgPSBuZXcgV3NpbEVsZW1lbnQod3NpbFVSTCwgcm9vdC5nZXRNb2RlbCgpLCB3c2lsRG9jLCB3c2lsVVJMKTsKLSAgICAgICAgICByb290LmNvbm5lY3Qod3NpbEVsZW1lbnQsIFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgICBub2RlSWQgPSByb290Tm9kZS5nZXRDaGlsZE5vZGUod3NpbEVsZW1lbnQpLmdldE5vZGVJZCgpOwotICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX09QRU5fV1NJTF9TVUNDRVNTRlVMIiwgd3NpbFVSTCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgewotICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UodC5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XU0lMX0FMUkVBRFlfT1BFTkVEIiwgd3NpbFVSTCkpOwotICAgICAgICBub2RlSWQgPSByb290Tm9kZS5nZXRDaGlsZE5vZGUod3NpbEVsZW1lbnQpLmdldE5vZGVJZCgpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobm9kZUlkICE9IC0xKQotICAgIHsKLSAgICAgIHByZXNlbGVjdFdTSUxOb2RlKG5vZGVNYW5hZ2VyLCBub2RlSWQsIGluc3BlY3Rpb25UeXBlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gb3BlbldTSUwoU3RyaW5nIHdzaWxVUkwsIFdTSUxEb2N1bWVudCB3c2lsRG9jLCBpbnQgaW5zcGVjdGlvblR5cGUpCi0gIHsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSByb290Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgcm9vdCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSBuZXcgV3NpbEVsZW1lbnQod3NpbFVSTCwgcm9vdC5nZXRNb2RlbCgpLCB3c2lsRG9jLCB3c2lsVVJMKTsKLSAgICByb290LmNvbm5lY3Qod3NpbEVsZW1lbnQsIFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBpbnQgbm9kZUlkID0gcm9vdE5vZGUuZ2V0Q2hpbGROb2RlKHdzaWxFbGVtZW50KS5nZXROb2RlSWQoKTsKLSAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19PUEVOX1dTSUxfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICBwcmVzZWxlY3RXU0lMTm9kZShub2RlTWFuYWdlciwgbm9kZUlkLCBpbnNwZWN0aW9uVHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcHJlc2VsZWN0V1NJTE5vZGUoTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlSWQsIGludCBpbnNwZWN0aW9uVHlwZSkKLSAgewotICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKG5vZGVJZCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJZCk7Ci0gICAgc2VsZWN0ZWROb2RlLnNldFZpZXdJZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgIHRvb2xNYW5hZ2VyLnNldFNlbGVjdGVkVG9vbElkKGluc3BlY3Rpb25UeXBlKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUwsIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCBpbnNwZWN0aW9uVHlwZSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCB0cnVlKSk7ICAgICAgICAKLSAgfQotCi0gIHByaXZhdGUgV3NpbEVsZW1lbnQgZ2V0T3BlbmVkV1NJTChUcmVlRWxlbWVudCByb290LCBTdHJpbmcgd3NpbFVSTCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSByb290LmdldEVsZW1lbnRzKFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHdzaWxFbGVtZW50LmdldFdzaWxVcmwoKS5lcXVhbHMod3NpbFVSTCkpCi0gICAgICAgIHJldHVybiB3c2lsRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZGI2ZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFdzaWxMaW5rRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIE9wZW5XU0lMTGlua0FjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbgotewotICBwdWJsaWMgT3BlbldTSUxMaW5rQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAid3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLldTSUxfTElOSyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBpZiAoIShzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFdTSUxMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgV3NpbFdzaWxMaW5rRWxlbWVudCBsaW5rID0gKFdzaWxXc2lsTGlua0VsZW1lbnQpIGxlLmdldE9iamVjdCgpOwotICAgIFN0cmluZyB3c2lsVVJMID0gbGluay5nZXRXU0lMTGlua0xvY2F0aW9uKCk7Ci0gICAgLy8gcG9wdWxhdGUgYW5kIHJ1biB0aGUgT3BlbldTSUxBY3Rpb24KLSAgICBPcGVuV1NJTEFjdGlvbiBhY3Rpb24gPSBuZXcgT3BlbldTSUxBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdGFibGUucHV0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9VUkwsIHdzaWxVUkwpOwotICAgIHRhYmxlLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFLCBTdHJpbmcudmFsdWVPZihXc2lsQWN0aW9uSW5wdXRzLldTSUxfREVUQUlMUykpOwotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I2MGVhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESUJ1c2luZXNzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5Xc2lsTm9kZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlZnJlc2hBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLQotICBwdWJsaWMgUmVmcmVzaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBub2RlTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEFjdGlvbiBuZXdBY3Rpb24oSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIFN0cmluZyBub2RlSURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmcgdmlld0lEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZUlkKCk7Ci0gICAgfQotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUobm9kZUlEKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlID09IG51bGwgfHwgIShzZWxlY3RlZE5vZGUgaW5zdGFuY2VvZiBXc2lsTm9kZSkpCi0gICAgICByZXR1cm4gbmV3IE51bGxBY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIFJlZnJlc2hBY3Rpb24gYWN0aW9uOwotICAgICAgaWYgKHZpZXdJRFN0cmluZyA9PSBudWxsKQotICAgICAgICBhY3Rpb24gPSBuZXcgUmVmcmVzaFdTSUxBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgICAgYWN0aW9uID0gbmV3IFJlZnJlc2hVRERJU2VydmljZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJQnVzaW5lc3NUb29sKQotICAgICAgICBhY3Rpb24gPSBuZXcgUmVmcmVzaFVERElCdXNpbmVzc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBOdWxsQWN0aW9uKCk7Ci0gICAgICBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihub2RlSUQpKTsKLSAgICAgIHJldHVybiBhY3Rpb247Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4ZTNlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESUJ1c2luZXNzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24gZXh0ZW5kcyBSZWZyZXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWZyZXNoVURESUJ1c2luZXNzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLlVERElfQlVTSU5FU1MpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkKLSAgICB7Ci0gICAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgICAgTGlzdE1hbmFnZXIgbG0gPSB3c2lsRWxlbWVudC5nZXRBbGxVRERJTGlua3MoKTsKLSAgICAgIFZlY3RvciB1ZGRpQnVzaW5lc3NFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHZpZXdJRHMgPSBnZXRWaWV3SWRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpZXdJRHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KHZpZXdJRHNbaV0pOwotICAgICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB1ZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBsbS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50cy5hZGQodWRkaUJ1c2luZXNzRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICB3c2lsRWxlbWVudC5yZWZyZXNoU2VydmljZVByb3ZpZGVyc0Zyb21SZWdpc3RyeSh1ZGRpQnVzaW5lc3NFbGVtZW50cyk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gdWRkaUJ1c2luZXNzRWxlbWVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgaXQubmV4dCgpOwotICAgICAgICBTdHJpbmcgbmFtZSA9IHVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICBuYW1lID0gdWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0J1c2luZXNzS2V5KCk7Ci0gICAgICAgIGlmICh1ZGRpQnVzaW5lc3NFbGVtZW50LmdldFNlcnZpY2VQcm92aWRlcigpICE9IG51bGwpCi0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1JFRlJFU0hfU1VDQ0VTU0ZVTCIsIG5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9CVVNJTkVTU19OT1RfRk9VTkQiLCBuYW1lKSk7Ci0gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFVERElTZXJ2aWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESVNlcnZpY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYzNzdhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESVNlcnZpY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVURESVNlcnZpY2VBY3Rpb24gZXh0ZW5kcyBSZWZyZXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWZyZXNoVURESVNlcnZpY2VBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuVURESV9TRVJWSUNFKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZU11bHRpcGxlTGlua0FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgewotICAgICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICAgIExpc3RNYW5hZ2VyIGxtID0gd3NpbEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCk7Ci0gICAgICBWZWN0b3IgdWRkaVNlcnZpY2VFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHZpZXdJRHMgPSBnZXRWaWV3SWRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpZXdJRHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KHZpZXdJRHNbaV0pOwotICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBsbS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnRzLmFkZCh1ZGRpU2VydmljZUVsZW1lbnQpOwotICAgICAgfQotICAgICAgd3NpbEVsZW1lbnQucmVmcmVzaFNlcnZpY2VEZWZpbml0aW9uc0Zyb21SZWdpc3RyeSh1ZGRpU2VydmljZUVsZW1lbnRzKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB1ZGRpU2VydmljZUVsZW1lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSB1ZGRpU2VydmljZUVsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICBuYW1lID0gdWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlS2V5KCk7Ci0gICAgICAgIGlmICh1ZGRpU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19SRUZSRVNIX1NVQ0NFU1NGVUwiLCBuYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfU0VSVklDRV9OT1RfRk9VTkQiLCBuYW1lKSk7Ci0gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFdTSUxBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hXU0lMQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTFiZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFdTSUxBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFdTSUxBY3Rpb24gZXh0ZW5kcyBSZWZyZXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWZyZXNoV1NJTEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgewotICAgICAgU3RyaW5nIHdzaWxVUkwgPSAoKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLmdldFdzaWxVcmwoKTsKLSAgICAgIGlmICgoKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLnJlZnJlc2goKSkKLSAgICAgIHsKLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1JFRlJFU0hfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfV1NJTF9OT1RfRk9VTkQiLCB3c2lsVVJMKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTBkYmY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUmVzaXplRnJhbWVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBSZXNpemVXU0lMRnJhbWVzQWN0aW9uIGV4dGVuZHMgUmVzaXplRnJhbWVzQWN0aW9uCi17Ci0gIHB1YmxpYyBSZXNpemVXU0lMRnJhbWVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBmcmFtZXNldCBzaXplcy4KLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUpOwotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIG5ldyBmcmFtZXNldCBzaXplcy4KLSAgICBpZiAoZnJhbWVOYW1lLmVxdWFscyhXc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05UQUlORVIpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHdzaWxQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIxMDAlLDAlIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lTmFtZS5lcXVhbHMoV3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMod3NpbFBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHdzaWxQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIxMDAlLDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhXc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh3c2lsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Mod3NpbFBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjAlLDEwMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTE5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ODU4ODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTE5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLQotcHVibGljIGNsYXNzIFNlbGVjdFdTSUxOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZUFjdGlvbgotewotICAgIHB1YmxpYyBTZWxlY3RXU0lMTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgYm9vbGVhbiBrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChrZWVwSGlzdG9yeSkgewotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoIj0xIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgICB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3ODI2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZVRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RXU0lMVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVUb29sQWN0aW9uCi17Ci0gIHB1YmxpYyBTZWxlY3RXU0lMVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGggKyAxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aCAtIDFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElELCBib29sZWFuIGtlZXBIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBpZiAodmlld0lEICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgfQotICAgIGlmIChrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgiPTEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgYm9vbGVhbiBrZWVwSGlzdG9yeSA9IGZhbHNlOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBnZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpbnQgdG9vbFR5cGUgPSBnZXRTZWxlY3RlZFRvb2woKS5nZXRUb29sVHlwZSgpOwotICAgIGlmICh0b29sVHlwZSA9PSBUb29sVHlwZXMuRk9STSkKLSAgICAgIGtlZXBIaXN0b3J5ID0gdHJ1ZTsKLSAgICBlbHNlIGlmICh0b29sVHlwZSA9PSBUb29sVHlwZXMuVklFVykKLSAgICB7Ci0gICAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgICAgaWYgKHZpZXdJRCA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgIGtlZXBIaXN0b3J5ID0gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCgoVmlld1Rvb2wpIHNlbGVjdGVkVG9vbCkuZ2V0VG9vbE1hbmFnZXIodmlld0lEKS5nZXRUb29sKHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCkpLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgICBrZWVwSGlzdG9yeSA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAid3NpbE5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gIndzaWxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsUHJvcGVydGllc0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjMwOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uIGV4dGVuZHMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIAotICAgIC8vIFNhdmUgdGhlIGZyYW1lc2V0IHNpemVzIGlmZiBubyBmcmFtZSBpcyBtYXhpbWl6ZWQuCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAKLSAgICBpZiAoIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpICYmICFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIAotICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb25KU1AuanNwPyIpOwotICAgIGZvcm1MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQZXJzcGVjdGl2ZUlkKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGZvcm1MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5ZGUzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24KLXsKLSAgcHVibGljIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKQotICB7Ci0gICAgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YWQ0ODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5PcGVuV1NETEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFdzZGxTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbgotewotICBwdWJsaWMgV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAid3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLldTRExfU0VSVklDRSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgd3NpbFdzZGxTZXJ2aWNlRWxlbWVudCA9IChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KSB3c2lsRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIFN0cmluZyB3c2RsVXJsID0gd3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5nZXRXU0RMU2VydmljZVVSTCgpOwotICAgIE9wZW5XU0RMQWN0aW9uIG9wZW5XU0RMQWN0aW9uID0gbmV3IE9wZW5XU0RMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0RMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsIHdzZGxVcmwpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gb3BlbldTRExBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCB3c2RsVXJsKSk7Ci0gICAgZWxzZQotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFIiwgd3NkbFVybCkpOwotICAgIHJldHVybiBhY3Rpb25SZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFlYWY5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gewotICAgIHB1YmxpYyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICByZXR1cm4gKEZvcm1Ub29sKXdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKSB7Ci0gICAgICAgIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgdGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotCi0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLQotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuVE9PTElELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpKSk7Ci0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkpKTsKLQotICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWExYTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxXc2RsU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFdTRExTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIHsKLSAgICBwdWJsaWMgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBuZXdBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHJldHVybiBuZXcgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKSB7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgcmV0dXJuIChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaW50IHZpZXdJRCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLQotICAgICAgICBMaXN0RWxlbWVudCBsZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyB1cmwgPSBudWxsOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpIHsKLSAgICAgICAgICAgIGxlID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFdTRExTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgICAgICB1cmwgPSAoKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCkpLmdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpIHsKLSAgICAgICAgICAgIGxlID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFVERElTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgICAgICB1cmwgPSAoKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCkpLmdldFdzZGxVcmwoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBsYXVuY2hXaXphcmQodXJsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM0ZDkyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlRvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgV3NpbFRvZ2dsZU5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uIHsKLSAgICBwdWJsaWMgV3NpbFRvZ2dsZU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsIGJvb2xlYW4gb3BlbikgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSWQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGlmIChvcGVuKQotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU5fTk9ERSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHRvZ2dsZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpbnQgbm9kZUlkID0gdG9nZ2xlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgICAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdmlld0lkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgICAgICBpbnQgdmlld1Rvb2xJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCB0b29sSWQsIHZpZXdJZCwgdmlld1Rvb2xJZCwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RXU0lMTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCwgdHJ1ZSk7Ci0gICAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbEFjdGlvbklucHV0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsQWN0aW9uSW5wdXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNTk5MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsQWN0aW9uSW5wdXRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsQWN0aW9uSW5wdXRzCi17Ci0gICAgLy8gb3BlbiBXU0lMIGZvcm0KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1VSTCA9ICJ3c2lsVVJMIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX0lOU1BFQ1RJT05fVFlQRSA9ICJ3c2lsSW5zcGVjdGlvblR5cGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTSUxfREVUQUlMUyA9IDA7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NETF9TRVJWSUNFUyA9IDE7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVURESV9TRVJWSUNFUyA9IDI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVURESV9CVVNJTkVTU0VTID0gMzsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU0lMX0xJTktTID0gNDsKLQotICAgIC8vIG1hc3MgYWN0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTVVMVElQTEVfTElOS19BQ1RJT04gPSAibXVsdGlwbGVMaW5rQWN0aW9uIjsKLQotICAgIC8vIHJlc2l6ZSBXU0lMIGZyYW1lcyBhY3Rpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQgPSAiZnJhbWVzZXRDb2xzUGVyc3BlY3RpdmVDb250ZW50IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSID0gImZyYW1lc2V0Um93c0FjdGlvbnNDb250YWluZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsRnJhbWVOYW1lcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsRnJhbWVOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzM1YTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbEZyYW1lTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdzaWxGcmFtZU5hbWVzCi17Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUiA9ICJ3c2lsX25hdmlnYXRvcl9jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX05BVklHQVRPUl9UT09MQkFSID0gIndzaWxfbmF2aWdhdG9yX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX05BVklHQVRPUl9DT05URU5UID0gIndzaWxfbmF2aWdhdG9yX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX0FDVElPTlNfQ09OVEFJTkVSID0gIndzaWxfYWN0aW9uc19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1BST1BFUlRJRVNfQ09OVEFJTkVSID0gIndzaWxfcHJvcGVydGllc19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1BST1BFUlRJRVNfVE9PTEJBUiA9ICJ3c2lsX3Byb3BlcnRpZXNfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfUFJPUEVSVElFU19DT05URU5UID0gIndzaWxfcHJvcGVydGllc19jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9TVEFUVVNfQ09OVEFJTkVSID0gIndzaWxfc3RhdHVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfU1RBVFVTX1RPT0xCQVIgPSAid3NpbF9zdGF0dXNfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfU1RBVFVTX0NPTlRFTlQgPSAid3NpbF9zdGF0dXNfY29udGVudCI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxNb2RlbENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsTW9kZWxDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFhOGZhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxNb2RlbENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV3NpbE1vZGVsQ29uc3RhbnRzCi17Ci0gICAgLy8gUmVsYXRpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NJTCA9ICJyZWxXU0lMIjsKLQotICAgIC8vIExpc3QgTWFuYWdlcnMgZm9yIFdzaWxFbGVtZW50Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMgPSAid3NkbFNlcnZpY2VzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUyA9ICJ1ZGRpU2VydmljZXMiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX0xJTktTID0gInVkZGlMaW5rcyI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1dTSUxfTElOS1MgPSAid3NpbExpbmtzIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbENvbW1vbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbENvbW1vbkVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlMDFhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxDb21tb25FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotcHVibGljIGNsYXNzIFdzaWxDb21tb25FbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50Ci17Ci0gIHByaXZhdGUgU3RyaW5nIGJhc2VXc2lsVVJMOwotICBwcml2YXRlIFN0cmluZyByZWxhdGl2ZVVSSUJhc2U7Ci0KLSAgcHVibGljIFdzaWxDb21tb25FbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRCYXNlV3NpbFVSTCgpCi0gIHsKLSAgICByZXR1cm4gYmFzZVdzaWxVUkw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJhc2VXc2lsVVJMKFN0cmluZyBiYXNlV3NpbFVSTCkKLSAgewotICAgIHRoaXMuYmFzZVdzaWxVUkwgPSBiYXNlV3NpbFVSTDsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIEZXRF9TTEFTSCA9ICcvJzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIEJXRF9TTEFTSCA9ICdcXCc7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBQUk9UT0NPTF9JTkRJQ0FUT1IgPSAnOic7Ci0gIAotICBwdWJsaWMgU3RyaW5nIG1ha2VBYnNvbHV0ZShTdHJpbmcgdXJpKQotICB7Ci0gICAgaWYgKGJhc2VXc2lsVVJMICE9IG51bGwgJiYgdXJpICE9IG51bGwgJiYgdXJpLmluZGV4T2YoUFJPVE9DT0xfSU5ESUNBVE9SKSA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAocmVsYXRpdmVVUklCYXNlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlbGF0aXZlVVJJQmFzZSA9IGJhc2VXc2lsVVJMLnJlcGxhY2UoQldEX1NMQVNILCBGV0RfU0xBU0gpOwotICAgICAgICBpbnQgaW5kZXggPSByZWxhdGl2ZVVSSUJhc2UubGFzdEluZGV4T2YoRldEX1NMQVNIKTsKLSAgICAgICAgcmVsYXRpdmVVUklCYXNlID0gYmFzZVdzaWxVUkwuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSk7Ci0gICAgICB9Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHJlbGF0aXZlVVJJQmFzZSk7Ci0gICAgICBzYi5hcHBlbmQodXJpKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gdXJpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NDc2MTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkFic3RyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuSW5zcGVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLQotLyoqCi0gKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyBhIFdTSUwgZG9jdW1lbnQKLSAqLwotcHVibGljIGNsYXNzIFdzaWxFbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBXU0lMRG9jdW1lbnQgd3NpbERvY187Ci0gIHByaXZhdGUgU3RyaW5nIHRoaXNXc2lsVXJsXzsKLSAgLyoqICoqKioqKioqKioqKioqKioqKiBOYW1lc3BhY2UgKioqKioqKioqKiAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1dTREwgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfVjEgPSAidXJuOnVkZGktb3JnOmFwaSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVURESV9WMiA9ICJ1cm46dWRkaS1vcmc6YXBpX3YyIjsKLSAgLy9wcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfQklORElORyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vdWRkaS8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1dTSUxfSU5TUEVDVElPTiA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vIjsKLSAgLyoqICoqKioqKioqKioqKioqKioqKiBSZWxzICoqKioqKioqKioqKioqKiogKi8KLSAgLy8gUmVsYXRpb24gZm9yIGEgV1NJTCBkb3VjbWVudCBhbmQgaXRzIGxpbmsgbm9kZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1dTSUxfTElOSyA9ICJ3c2lsIGxpbmsgbm9kZXMiOwotCi0gIHB1YmxpYyBXc2lsRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFdTSUxEb2N1bWVudCB3c2lsRG9jdW1lbnQsIFN0cmluZyB3c2lsVVJMKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHdzaWxEb2NfID0gd3NpbERvY3VtZW50OwotICAgIHRoaXNXc2lsVXJsXyA9IHdzaWxVUkw7Ci0gICAgTGlzdE1hbmFnZXIgd3NkbFNlcnZpY2VzXyA9IG51bGw7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaVNlcnZpY2VzXyA9IG51bGw7Ci0gICAgTGlzdE1hbmFnZXIgd3NpbExpbmtzXyA9IG51bGw7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaUxpbmtzXyA9IG51bGw7Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMsIHdzZGxTZXJ2aWNlc18pOwotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTLCB1ZGRpU2VydmljZXNfKTsKLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgd3NpbExpbmtzXyk7Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MsIHVkZGlMaW5rc18pOwotICB9Ci0KLSAgLyoKLSAgICogUmVmcmVzaCB0aGUgV1NJTCBkb2N1bWVudAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcmVmcmVzaCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0lMRG9jdW1lbnQgbmV3V1NJTERvYyA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgbmV3V1NJTERvYy5yZWFkKGdldFdzaWxVcmwoKSk7Ci0gICAgICB3c2lsRG9jXyA9IG5ld1dTSUxEb2M7Ci0gICAgICBMaXN0TWFuYWdlciB3c2RsU2VydmljZXNfID0gbnVsbDsKLSAgICAgIExpc3RNYW5hZ2VyIHVkZGlTZXJ2aWNlc18gPSBudWxsOwotICAgICAgTGlzdE1hbmFnZXIgd3NpbExpbmtzXyA9IG51bGw7Ci0gICAgICBMaXN0TWFuYWdlciB1ZGRpTGlua3NfID0gbnVsbDsKLSAgICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTLCB3c2RsU2VydmljZXNfKTsKLSAgICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTLCB1ZGRpU2VydmljZXNfKTsKLSAgICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCB3c2lsTGlua3NfKTsKLSAgICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTLCB1ZGRpTGlua3NfKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIFdTSUwncyBVUkwKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVybCgpCi0gIHsKLSAgICByZXR1cm4gdGhpc1dzaWxVcmxfOwotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyB0aGUgV1NJTCBkb2N1bWVudAotICAgKi8KLSAgcHVibGljIFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzaWxEb2NfOwotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyBhbGwgYWJzdHJhY3QgbGFuZ3VhZ2VzCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFdTSUxBYnN0cmFjdExhbmdzKCkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpLmdldEFic3RyYWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRMYW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgYWxsIGFic3RyYWN0cwotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRXU0lMQWJzdHJhY3RzKCkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpLmdldEFic3RyYWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRUZXh0KCkpOwotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRBbGxXU0RMU2VydmljZXMoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgd3NkbFNlcnZpY2VzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMpOwotICAgIGlmICh3c2RsU2VydmljZXNfID09IG51bGwpCi0gICAgewotICAgICAgaW5pdEFsbFdTRExTZXJ2aWNlcygpOwotICAgICAgd3NkbFNlcnZpY2VzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbFNlcnZpY2VzXzsKLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRBbGxVRERJU2VydmljZXMoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaVNlcnZpY2VzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMpOwotICAgIGlmICh1ZGRpU2VydmljZXNfID09IG51bGwpCi0gICAgewotICAgICAgaW5pdEFsbFVERElTZXJ2aWNlcygpOwotICAgICAgdWRkaVNlcnZpY2VzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMpOwotICAgIH0KLSAgICByZXR1cm4gdWRkaVNlcnZpY2VzXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0QWxsV1NETFNlcnZpY2VzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHdzZGxTZXJ2aWNlc18gPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jXy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VMaXN0ID0gaW5zcGVjdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZUxpc3QubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gc2tpcCBhbnkgc2VydmljZSB3aXRob3V0IGEgd3NkbCBuYW1lc3BhY2UKLSAgICAgIC8vIGFuZCBpbnZhbGlkIGRlc2NyaXB0aW9ucwotICAgICAgRGVzY3JpcHRpb25bXSBkZXNjTGlzdCA9IHNlcnZpY2VMaXN0W2ldLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgaWYgKGRlc2NMaXN0Lmxlbmd0aCA8IDEpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlc2NMaXN0WzBdLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBlbHNlIGlmIChuYW1lc3BhY2UuZXF1YWxzKE5BTUVTUEFDRV9XU0RMKSkKLSAgICAgIHsKLSAgICAgICAgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCB3c2RsU2VydmljZUVsZW1lbnQgPSBuZXcgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudChuYW1lc3BhY2UsIGdldE1vZGVsKCksIHNlcnZpY2VMaXN0W2ldKTsKLSAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50LnNldEJhc2VXc2lsVVJMKGdldFdzaWxVcmwoKSk7Ci0gICAgICAgIGlmICh3c2RsU2VydmljZUVsZW1lbnQudmFsaWRhdGVXU0RMU2VydmljZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50LnNldE5hbWUod3NkbFNlcnZpY2VFbGVtZW50LmdldFdTRExTZXJ2aWNlVVJMKCkpOwotICAgICAgICAgIHdzZGxTZXJ2aWNlc18uYWRkKG5ldyBMaXN0RWxlbWVudCh3c2RsU2VydmljZUVsZW1lbnQpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUywgd3NkbFNlcnZpY2VzXyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdEFsbFVERElTZXJ2aWNlcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB1ZGRpU2VydmljZXNfID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpOwotICAgIFNlcnZpY2VbXSBzZXJ2aWNlTGlzdCA9IGluc3BlY3Rpb24uZ2V0U2VydmljZXMoKTsKLSAgICBWZWN0b3IgdWRkaVNlcnZpY2VFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VMaXN0Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vIHNraXAgYW55IHNlcnZpY2Ugd2l0aG91dCBhIHdzZGwgbmFtZXNwYWNlCi0gICAgICAvLyBhbmQgaW52YWxpZCBkZXNjcmlwdGlvbnMKLSAgICAgIERlc2NyaXB0aW9uW10gZGVzY0xpc3QgPSBzZXJ2aWNlTGlzdFtpXS5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgIGlmIChkZXNjTGlzdC5sZW5ndGggPCAxKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZXNjTGlzdFswXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZiAoKG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1VERElfVjEpIHx8IG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1VERElfVjIpKSkKLSAgICAgIHsKLSAgICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB1ZGRpU2VydmljZUVsZW1lbnQgPSBuZXcgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudChuYW1lc3BhY2UsIGdldE1vZGVsKCksIHNlcnZpY2VMaXN0W2ldKTsKLSAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50LnNldEJhc2VXc2lsVVJMKGdldFdzaWxVcmwoKSk7Ci0gICAgICAgIGlmICh1ZGRpU2VydmljZUVsZW1lbnQudmFsaWRhdGVVRERJU2VydmljZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50LnNldE5hbWUodWRkaVNlcnZpY2VFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50cy5hZGQodWRkaVNlcnZpY2VFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZWZyZXNoU2VydmljZURlZmluaXRpb25zRnJvbVJlZ2lzdHJ5KHVkZGlTZXJ2aWNlRWxlbWVudHMpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB1ZGRpU2VydmljZUVsZW1lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgdWRkaVNlcnZpY2VzXy5hZGQobmV3IExpc3RFbGVtZW50KGl0Lm5leHQoKSkpOwotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUywgdWRkaVNlcnZpY2VzXyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoU2VydmljZURlZmluaXRpb25zRnJvbVJlZ2lzdHJ5KFZlY3RvciB1ZGRpU2VydmljZUVsZW1lbnRzKQotICB7Ci0gICAgSGFzaE1hcCBpbnF1aXJ5QVBJVG9TZXJ2aWNlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1ZGRpU2VydmljZUVsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIHVkZGlTZXJ2aWNlRWxlbWVudHMuZ2V0KGkpOwotICAgICAgU3RyaW5nIGlucXVpcnlBUEkgPSB1ZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCk7Ci0gICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlBUEkpKQotICAgICAgewotICAgICAgICBWZWN0b3Igc2VydmljZXMgPSAoVmVjdG9yKSBpbnF1aXJ5QVBJVG9TZXJ2aWNlcy5nZXQoaW5xdWlyeUFQSSk7Ci0gICAgICAgIGlmIChzZXJ2aWNlcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgaW5xdWlyeUFQSVRvU2VydmljZXMucHV0KGlucXVpcnlBUEksIHNlcnZpY2VzKTsKLSAgICAgICAgfQotICAgICAgICBzZXJ2aWNlcy5hZGQodWRkaVNlcnZpY2VFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50LnNldFNlcnZpY2VEZWZpbml0aW9uKG51bGwpOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gaW5xdWlyeUFQSVRvU2VydmljZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlcyA9IChWZWN0b3IpIGlucXVpcnlBUElUb1NlcnZpY2VzLmdldChpbnF1aXJ5QVBJKTsKLSAgICAgIFVERElQcm94eSBwcm94eTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgcHJvcHMucHV0KEFjdGlvbklucHV0cy5UUkFOU1BPUlRfQ0xBU1NfTkFNRSwgQWN0aW9uSW5wdXRzLlRSQVNQT1JUX0NMQVNTKTsKLSAgICAgICAgcHJveHkgPSBuZXcgVURESVByb3h5KHByb3BzKTsKLSAgICAgICAgcHJveHkuc2V0SW5xdWlyeVVSTChuZXcgVVJMKGlucXVpcnlBUEkpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2aWNlcy5zaXplKCk7IGorKykKLSAgICAgICAgewotICAgICAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIHNlcnZpY2VzLmdldChqKTsKLSAgICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnQuc2V0U2VydmljZURlZmluaXRpb24obnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBWZWN0b3Igc2VydmljZUtleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNlcnZpY2VzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBzZXJ2aWNlS2V5cy5hZGQoKChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBzZXJ2aWNlcy5nZXQoaikpLmdldFVERElTZXJ2aWNlS2V5KCkpOwotICAgICAgfQotICAgICAgVmVjdG9yIGJ1c2luZXNzU2VydmljZXM7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgYnVzaW5lc3NTZXJ2aWNlcyA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKHNlcnZpY2VLZXlzKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCi0gICAgICB7Ci0gICAgICAgIGJ1c2luZXNzU2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlS2V5cy5zaXplKCkgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBzZXJ2aWNlS2V5cy5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYnVzaW5lc3NTZXJ2aWNlcy5hZGQoKEJ1c2luZXNzU2VydmljZSkgcHJveHkuZ2V0X3NlcnZpY2VEZXRhaWwoKFN0cmluZykgc2VydmljZUtleXMuZ2V0KGspKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKS5nZXQoMCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJ1c2luZXNzU2VydmljZXMuYWRkKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgYnVzaW5lc3NTZXJ2aWNlcy5hZGQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBrID0gMDsgayA8IHNlcnZpY2VzLnNpemUoKTsgaysrKQotICAgICAgewotICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKSBidXNpbmVzc1NlcnZpY2VzLmdldChrKTsKLSAgICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB1ZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgc2VydmljZXMuZ2V0KGspOwotICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnQuc2V0U2VydmljZURlZmluaXRpb24oYnMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRBbGxXU0lMTGlua3MoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgd3NpbExpbmtzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MpOwotICAgIGlmICh3c2lsTGlua3NfID09IG51bGwpCi0gICAgewotICAgICAgaW5pdEFsbFdTSUxMaW5rcygpOwotICAgICAgd3NpbExpbmtzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MpOwotICAgIH0KLSAgICByZXR1cm4gd3NpbExpbmtzXzsKLSAgfQotCi0gIHB1YmxpYyBMaXN0TWFuYWdlciBnZXRBbGxVRERJTGlua3MoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaUxpbmtzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MpOwotICAgIGlmICh1ZGRpTGlua3NfID09IG51bGwpCi0gICAgewotICAgICAgaW5pdEFsbFVERElMaW5rcygpOwotICAgICAgdWRkaUxpbmtzXyA9IChMaXN0TWFuYWdlcikgZ2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MpOwotICAgIH0KLSAgICByZXR1cm4gdWRkaUxpbmtzXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0QWxsVURESUxpbmtzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHVkZGlMaW5rc18gPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jXy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgTGlua1tdIGxpbmtMaXN0ID0gaW5zcGVjdGlvbi5nZXRMaW5rcygpOwotICAgIFZlY3RvciB1ZGRpQnVzaW5lc3NFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtMaXN0Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vIHByb2Nlc3MgYW55IGxpbmtzIHdpdGggVURESSBuYW1lc3BhY2UKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBsaW5rTGlzdFtpXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZiAoKG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1VERElfVjEpIHx8IG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1VERElfVjIpKSkKLSAgICAgIHsKLSAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IG5ldyBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudChuYW1lc3BhY2UsIGdldE1vZGVsKCksIGxpbmtMaXN0W2ldKTsKLSAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudC5zZXRCYXNlV3NpbFVSTChnZXRXc2lsVXJsKCkpOwotICAgICAgICBpZiAodWRkaUJ1c2luZXNzRWxlbWVudC52YWxpZGF0ZVVERElMaW5rKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50LnNldE5hbWUodWRkaUJ1c2luZXNzRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnRzLmFkZCh1ZGRpQnVzaW5lc3NFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZWZyZXNoU2VydmljZVByb3ZpZGVyc0Zyb21SZWdpc3RyeSh1ZGRpQnVzaW5lc3NFbGVtZW50cyk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHVkZGlCdXNpbmVzc0VsZW1lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgdWRkaUxpbmtzXy5hZGQobmV3IExpc3RFbGVtZW50KGl0Lm5leHQoKSkpOwotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgdWRkaUxpbmtzXyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoU2VydmljZVByb3ZpZGVyc0Zyb21SZWdpc3RyeShWZWN0b3IgdWRkaUJ1c2luZXNzRWxlbWVudHMpCi0gIHsKLSAgICBIYXNoTWFwIGlucXVpcnlBUElUb0J1c2luZXNzZXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdWRkaUJ1c2luZXNzRWxlbWVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgdWRkaUJ1c2luZXNzRWxlbWVudHMuZ2V0KGkpOwotICAgICAgU3RyaW5nIGlucXVpcnlBUEkgPSB1ZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rSW5xdWlyeUFQSSgpOwotICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChpbnF1aXJ5QVBJKSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIGJ1c2luZXNzZXMgPSAoVmVjdG9yKSBpbnF1aXJ5QVBJVG9CdXNpbmVzc2VzLmdldChpbnF1aXJ5QVBJKTsKLSAgICAgICAgaWYgKGJ1c2luZXNzZXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGJ1c2luZXNzZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgaW5xdWlyeUFQSVRvQnVzaW5lc3Nlcy5wdXQoaW5xdWlyeUFQSSwgYnVzaW5lc3Nlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnVzaW5lc3Nlcy5hZGQodWRkaUJ1c2luZXNzRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnQuc2V0U2VydmljZVByb3ZpZGVyKG51bGwpOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gaW5xdWlyeUFQSVRvQnVzaW5lc3Nlcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZykgaXQubmV4dCgpOwotICAgICAgVmVjdG9yIGJ1c2luZXNzZXMgPSAoVmVjdG9yKSBpbnF1aXJ5QVBJVG9CdXNpbmVzc2VzLmdldChpbnF1aXJ5QVBJKTsKLSAgICAgIFVERElQcm94eSBwcm94eTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgcHJvcHMucHV0KEFjdGlvbklucHV0cy5UUkFOU1BPUlRfQ0xBU1NfTkFNRSwgQWN0aW9uSW5wdXRzLlRSQVNQT1JUX0NMQVNTKTsKLSAgICAgICAgcHJveHkgPSBuZXcgVURESVByb3h5KHByb3BzKTsKLSAgICAgICAgcHJveHkuc2V0SW5xdWlyeVVSTChuZXcgVVJMKGlucXVpcnlBUEkpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBidXNpbmVzc2VzLnNpemUoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgYnVzaW5lc3Nlcy5nZXQoaik7Ci0gICAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudC5zZXRTZXJ2aWNlUHJvdmlkZXIobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBWZWN0b3IgYnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBidXNpbmVzc2VzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBidXNpbmVzc0tleXMuYWRkKCgoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIGJ1c2luZXNzZXMuZ2V0KGopKS5nZXRVRERJTGlua0J1c2luZXNzS2V5KCkpOwotICAgICAgfQotICAgICAgVmVjdG9yIGJ1c2luZXNzRW50aXRpZXM7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgYnVzaW5lc3NFbnRpdGllcyA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbChidXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQotICAgICAgewotICAgICAgICBidXNpbmVzc0VudGl0aWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAoYnVzaW5lc3NLZXlzLnNpemUoKSA+IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGJ1c2luZXNzS2V5cy5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYnVzaW5lc3NFbnRpdGllcy5hZGQoKEJ1c2luZXNzRW50aXR5KSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoKFN0cmluZykgYnVzaW5lc3NLZXlzLmdldChrKSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJ1c2luZXNzRW50aXRpZXMuYWRkKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgYnVzaW5lc3NFbnRpdGllcy5hZGQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBrID0gMDsgayA8IGJ1c2luZXNzZXMuc2l6ZSgpOyBrKyspCi0gICAgICB7Ci0gICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KSBidXNpbmVzc0VudGl0aWVzLmdldChrKTsKLSAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgYnVzaW5lc3Nlcy5nZXQoayk7Ci0gICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnQuc2V0U2VydmljZVByb3ZpZGVyKGJlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdEFsbFdTSUxMaW5rcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB3c2lsTGlua3NfID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpOwotICAgIExpbmtbXSBsaW5rTGlzdCA9IGluc3BlY3Rpb24uZ2V0TGlua3MoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtMaXN0Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vIHByb2Nlc3MgYW55IGxpbmtzIHdpdGggVURESSBuYW1lc3BhY2UKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBsaW5rTGlzdFtpXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZiAobmFtZXNwYWNlLmVxdWFscyhOQU1FU1BBQ0VfV1NJTF9JTlNQRUNUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgV3NpbFdzaWxMaW5rRWxlbWVudCB3c2lsTGlua0VsZW1lbnQgPSBuZXcgV3NpbFdzaWxMaW5rRWxlbWVudChuYW1lc3BhY2UsIGdldE1vZGVsKCksIGxpbmtMaXN0W2ldKTsKLSAgICAgICAgd3NpbExpbmtFbGVtZW50LnNldEJhc2VXc2lsVVJMKGdldFdzaWxVcmwoKSk7Ci0gICAgICAgIGlmICh3c2lsTGlua0VsZW1lbnQudmFsaWRhdGVXU0lMTGluaygpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NpbExpbmtFbGVtZW50LnNldE5hbWUod3NpbExpbmtFbGVtZW50LmdldFdTSUxMaW5rTG9jYXRpb24oKSk7Ci0gICAgICAgICAgd3NpbExpbmtzXy5hZGQobmV3IExpc3RFbGVtZW50KHdzaWxMaW5rRWxlbWVudCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTLCB3c2lsTGlua3NfKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsTGlua0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbExpbmtFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YjU5NGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsTGlua0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBMaW5rCi0qLwotcHVibGljIGNsYXNzIFdzaWxMaW5rRWxlbWVudCBleHRlbmRzIFdzaWxDb21tb25FbGVtZW50Ci17Ci0gIHByb3RlY3RlZCBMaW5rIGxpbmtfOwotCi0gIHB1YmxpYyBXc2lsTGlua0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgbGlua18gPSBsaW5rOwotICB9Ci0KLSAgcHVibGljIFZlY3RvciBnZXRMaW5rQWJzdHJhY3RMYW5ncygpCi0gIHsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtfLmdldEFic3RyYWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRMYW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0TGlua0Fic3RyYWN0cygpCi0gIHsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtfLmdldEFic3RyYWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRUZXh0KCkpOwotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFNlcnZpY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4OTM1ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgU2VydmljZQotKi8KLXB1YmxpYyBjbGFzcyBXc2lsU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBXc2lsQ29tbW9uRWxlbWVudAotewotICAgIHByb3RlY3RlZCBTZXJ2aWNlIHNlcnZpY2VfOwotCi0gICAgcHVibGljIFdzaWxTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgICAgIHNlcnZpY2VfID0gc2VydmljZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmVjdG9yIGdldFNlcnZpY2VOYW1lTGFuZ3MoKSB7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBTZXJ2aWNlTmFtZVtdIHNlcnZpY2VOYW1lcyA9IHNlcnZpY2VfLmdldFNlcnZpY2VOYW1lcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VOYW1lcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdi5hZGQoc2VydmljZU5hbWVzW2ldLmdldExhbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgcHVibGljIFZlY3RvciBnZXRTZXJ2aWNlTmFtZXMoKSB7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBTZXJ2aWNlTmFtZVtdIHNlcnZpY2VOYW1lcyA9IHNlcnZpY2VfLmdldFNlcnZpY2VOYW1lcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VOYW1lcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdi5hZGQoc2VydmljZU5hbWVzW2ldLmdldFRleHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgcHVibGljIFZlY3RvciBnZXRTZXJ2aWNlQWJzdHJhY3RMYW5ncygpIHsKLSAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gc2VydmljZV8uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2LmFkZChhYnN0cmFjdHNbaV0uZ2V0TGFuZygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmVjdG9yIGdldFNlcnZpY2VBYnN0cmFjdHMoKSB7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IHNlcnZpY2VfLmdldEFic3RyYWN0cygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdi5hZGQoYWJzdHJhY3RzW2ldLmdldFRleHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2U1MDAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24uRXh0ZW5zaW9uRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuQnVzaW5lc3NEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkw7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBVRERJIHNlcnZpY2UgaW4gYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IGV4dGVuZHMgV3NpbExpbmtFbGVtZW50Ci17Ci0gICAgcHJpdmF0ZSBCdXNpbmVzc0VudGl0eSBidXNFbnRpdHlfOwotCi0gICAgcHVibGljIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBsaW5rKTsKLSAgICAgICAgYnVzRW50aXR5XyA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb3ZpZGVyKEJ1c2luZXNzRW50aXR5IGJlKSB7Ci0gICAgICBidXNFbnRpdHlfID0gYmU7Ci0gICAgfQotCi0gICAgcHVibGljIEJ1c2luZXNzRW50aXR5IGdldFNlcnZpY2VQcm92aWRlcigpIHsKLSAgICAgICAgcmV0dXJuIGJ1c0VudGl0eV87Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gKGJ1c0VudGl0eV8gID09IG51bGwpID8gbnVsbCA6IGJ1c0VudGl0eV8uZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgICAgICByZXR1cm4gKGJ1c0VudGl0eV8gPT0gbnVsbCkgPyBudWxsIDogYnVzRW50aXR5Xy5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElMaW5rSW5xdWlyeUFQSSgpIHsKLSAgICAgICAgQnVzaW5lc3NEZXNjcmlwdGlvbiBiZCA9IGdldFZhbGlkVURESUJ1c2luZXNzRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChiZCA9PSBudWxsKSA/IG51bGwgOiBiZC5nZXRMb2NhdGlvbigpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpIHsKLSAgICAgICAgQnVzaW5lc3NEZXNjcmlwdGlvbiBiZCA9IGdldFZhbGlkVURESUJ1c2luZXNzRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChiZCA9PSBudWxsKSA/IG51bGwgOiBiZC5nZXRCdXNpbmVzc0tleSgpLmdldFRleHQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElMaW5rRGlzY292ZXJ5VVJMKCkgewotICAgICAgICBCdXNpbmVzc0Rlc2NyaXB0aW9uIGJkID0gZ2V0VmFsaWRVRERJQnVzaW5lc3NEZXNjcmlwdGlvbigpOwotICAgICAgICBpZiAoYmQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSBiZC5nZXREaXNjb3ZlcnlVUkwoKTsKLSAgICAgICAgICAgIHJldHVybiAoZGlzY292ZXJ5VVJMID09IG51bGwpID8gbnVsbCA6IGRpc2NvdmVyeVVSTC5nZXRUZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVVERElMaW5rKCkgewotICAgICAgICBCdXNpbmVzc0Rlc2NyaXB0aW9uIGJkID0gZ2V0VmFsaWRVRERJQnVzaW5lc3NEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKGJkICE9IG51bGwpOwotICAgIH0KLQotICAgIHByaXZhdGUgQnVzaW5lc3NEZXNjcmlwdGlvbiBnZXRWYWxpZFVERElCdXNpbmVzc0Rlc2NyaXB0aW9uKCkgewotICAgICAgICBFeHRlbnNpb25FbGVtZW50IGV4dEVsZW1lbnQgPSBsaW5rXy5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgICAgIC8vIFRoZSBleHRlbnNpb24gZWxlbWVudCBvZiBhIFVEREkgbGluawotICAgICAgICAvLyBtdXN0IGJlIGEgQnVzaW5lc3NEZXNjcmlwdGlvbiBlbGVtZW50Ci0gICAgICAgIGlmICghKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0Rlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAvLyBBIHZhbGlkIEJ1c2luZXNzRGVzY3JpcHRpb24gbXVzdCBoYXZlIGFuIGlucXVpcnkgQVBJCi0gICAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKChCdXNpbmVzc0Rlc2NyaXB0aW9uKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uKCk7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlBUEkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIC8vIEEgdmFsaWQgQnVzaW5lc3NEZXNjcmlwdGlvbiBtdXN0IGhhdmUgYSBidXNpbmVzcyBrZXkKLSAgICAgICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gKChCdXNpbmVzc0Rlc2NyaXB0aW9uKWV4dEVsZW1lbnQpLmdldEJ1c2luZXNzS2V5KCkuZ2V0VGV4dCgpOwotICAgICAgICBpZiAoYnVzaW5lc3NLZXkgPT0gbnVsbCB8fCBidXNpbmVzc0tleS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiAoQnVzaW5lc3NEZXNjcmlwdGlvbilleHRFbGVtZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaVNlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxVZGRpU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxOGRjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxVZGRpU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi5FeHRlbnNpb25FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgVURESSBzZXJ2aWNlIGluIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IGV4dGVuZHMgV3NpbFNlcnZpY2VFbGVtZW50Ci17Ci0gICAgcHJpdmF0ZSBCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZV87Ci0KLSAgICBwdWJsaWMgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCwgc2VydmljZSk7Ci0gICAgICAgIGJ1c1NlcnZpY2VfID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRGVmaW5pdGlvbihCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZSkgewotICAgICAgICBidXNTZXJ2aWNlXyA9IGJ1c1NlcnZpY2U7Ci0gICAgfQotCi0gICAgcHVibGljIEJ1c2luZXNzU2VydmljZSBnZXRTZXJ2aWNlRGVmaW5pdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGJ1c1NlcnZpY2VfOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIChidXNTZXJ2aWNlXyA9PSBudWxsKSA/IG51bGwgOiBidXNTZXJ2aWNlXy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIHJldHVybiAoYnVzU2VydmljZV8gPT0gbnVsbCkgPyBudWxsIDogYnVzU2VydmljZV8uZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVRERJU2VydmljZUlucXVpcnlBUEkoKSB7Ci0gICAgICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IGdldFZhbGlkVURESVNlcnZpY2VEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKHNkID09IG51bGwpID8gbnVsbCA6IHNkLmdldExvY2F0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVRERJU2VydmljZUtleSgpIHsKLSAgICAgICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gZ2V0VmFsaWRVRERJU2VydmljZURlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoc2QgPT0gbnVsbCkgPyBudWxsIDogc2QuZ2V0U2VydmljZUtleSgpLmdldFRleHQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElTZXJ2aWNlRGlzY292ZXJ5VVJMKCkgewotICAgICAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSBnZXRWYWxpZFVERElTZXJ2aWNlRGVzY3JpcHRpb24oKTsKLSAgICAgICAgaWYgKHNkID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gc2QuZ2V0RGlzY292ZXJ5VVJMKCk7Ci0gICAgICAgICAgICByZXR1cm4gKGRpc2NvdmVyeVVSTCA9PSBudWxsKSA/IG51bGwgOiBkaXNjb3ZlcnlVUkwuZ2V0VGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTZXJ2aWNlRGVzY3JpcHRpb24gZ2V0VmFsaWRVRERJU2VydmljZURlc2NyaXB0aW9uKCkgewotICAgICAgICBEZXNjcmlwdGlvbltdIGRlc2NMaXN0ID0gc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY0xpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEV4dGVuc2lvbkVsZW1lbnQgZXh0RWxlbWVudCA9IGRlc2NMaXN0W2ldLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICAgICAgICAgIC8vIFRoZSBleHRlbnNpb24gZWxlbWVudCBvZiBhIFVEREkgc2VydmljZSBkZXNjcmlwdGlvbgotICAgICAgICAgICAgLy8gbXVzdCBiZSBhIFNlcnZpY2VEZXNjcmlwdGlvbiBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoIShleHRFbGVtZW50IGluc3RhbmNlb2YgU2VydmljZURlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIEEgdmFsaWQgU2VydmljZURlc2NyaXB0aW9uIG11c3QgaGF2ZSBhbiBpbnF1aXJ5IEFQSQotICAgICAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoKChTZXJ2aWNlRGVzY3JpcHRpb24pZXh0RWxlbWVudCkuZ2V0TG9jYXRpb24oKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyBBIHZhbGlkIFNlcnZpY2VEZXNjcmlwdGlvbiBtdXN0IGhhdmUgYSBzZXJ2aWNlIGtleQotICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VLZXkgPSAoKFNlcnZpY2VEZXNjcmlwdGlvbilleHRFbGVtZW50KS5nZXRTZXJ2aWNlS2V5KCkuZ2V0VGV4dCgpOwotICAgICAgICAgICAgaWYgKHNlcnZpY2VLZXkgPT0gbnVsbCB8fCBzZXJ2aWNlS2V5Lmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXR1cm4gKFNlcnZpY2VEZXNjcmlwdGlvbilleHRFbGVtZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlVURESVNlcnZpY2UoKSB7Ci0gICAgICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IGdldFZhbGlkVURESVNlcnZpY2VEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKHNkICE9IG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICAgICAgcmV0dXJuIChuZXcgVWRkaTRqSGVscGVyKCkpLmdldFdTREwoZ2V0U2VydmljZURlZmluaXRpb24oKSwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2RsU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2JhZDMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24uRXh0ZW5zaW9uRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuSW1wbGVtZW50ZWRCaW5kaW5nOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5SZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLlJlZmVyZW5jZWRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0RMIHNlcnZpY2UgaW4gYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBXc2lsU2VydmljZUVsZW1lbnQKLXsKLSAgICBwdWJsaWMgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCwgc2VydmljZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRXU0RMU2VydmljZVVSTCgpIHsKLSAgICAgICAgRGVzY3JpcHRpb24gZGVzYyA9IGdldFZhbGlkV1NETERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoZGVzYyA9PSBudWxsKSA/IG51bGwgOiBtYWtlQWJzb2x1dGUoZGVzYy5nZXRMb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmVjdG9yIGdldFdTRExCaW5kaW5nKCkgewotICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgRGVzY3JpcHRpb25bXSBkZXNjTGlzdCA9IHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBFeHRlbnNpb25FbGVtZW50IGV4dEVsZW1lbnQgPSBkZXNjTGlzdFtpXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoZXh0RWxlbWVudCAhPSBudWxsICYmIGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBSZWZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBSZWZlcmVuY2VkU2VydmljZSByZWZTZXJ2aWNlID0gKChSZWZlcmVuY2UpZXh0RWxlbWVudCkuZ2V0UmVmZXJlbmNlZFNlcnZpY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVmU2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYuYWRkKHJlZlNlcnZpY2UuZ2V0UmVmZXJlbmNlZFNlcnZpY2VOYW1lKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBJbXBsZW1lbnRlZEJpbmRpbmdbXSBpbXBsQmluZGluZ0xpc3QgPSAoKFJlZmVyZW5jZSlleHRFbGVtZW50KS5nZXRJbXBsZW1lbnRlZEJpbmRpbmdzKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpbXBsQmluZGluZ0xpc3QubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdi5hZGQoaW1wbEJpbmRpbmdMaXN0W2pdLmdldEJpbmRpbmdOYW1lKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBEZXNjcmlwdGlvbiBnZXRWYWxpZFdTRExEZXNjcmlwdGlvbigpIHsKLSAgICAgICAgRGVzY3JpcHRpb25bXSBkZXNjTGlzdCA9IHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAvLyBza2lwIHRoaXMgZGVzY3JpcHRpb24gaWYgdGhlIGxvY2F0aW9pbiBhdHRyaWJ1dGUgaXMgYSBtYWxmb3JtZWQgVVJMCi0gICAgICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBkZXNjTGlzdFtpXS5nZXRMb2NhdGlvbigpOwotICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09IG51bGwgfHwgbG9jYXRpb24ubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIHNraXAgdGhpcyBkZXNjcmlwdGlvbiBpZiB0aGUgZXh0ZW5zaW9uIGVsZW1lbnQgaW5kaWNhdGVzCi0gICAgICAgICAgICAvLyB0aGF0IHRoZSBkZXNjcmlwdGlvbidzIGxvY2F0aW9uIGNvbnRhaW5zIG9ubHkgdGhlIHdzZGwgYmluZGluZwotICAgICAgICAgICAgRXh0ZW5zaW9uRWxlbWVudCBleHRFbGVtZW50ID0gZGVzY0xpc3RbaV0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKGV4dEVsZW1lbnQgIT0gbnVsbCAmJiBleHRFbGVtZW50IGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgQm9vbGVhbiBlbmRwb2ludFByZXNlbnQgPSAoKFJlZmVyZW5jZSlleHRFbGVtZW50KS5nZXRFbmRwb2ludFByZXNlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoZW5kcG9pbnRQcmVzZW50ICE9IG51bGwgJiYgZW5kcG9pbnRQcmVzZW50LmJvb2xlYW5WYWx1ZSgpID09IGZhbHNlKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGEgdmFsaWQgZGVzY3JpcHRpb24gaXMgZm91bmQKLSAgICAgICAgICAgIHJldHVybiBkZXNjTGlzdFtpXTsKLSAgICAgICAgfQotICAgICAgICAvLyBubyB2YWxpZCBkZXNjcmlwdGlvbiBpcyBmb3VuZCBmb3IgdGhpcyBzZXJ2aWNlCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlV1NETFNlcnZpY2UoKSB7Ci0gICAgICAgIERlc2NyaXB0aW9uIGRlc2MgPSBnZXRWYWxpZFdTRExEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKGRlc2MgIT0gbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIGdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsV3NpbExpbmtFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2lsTGlua0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0YTU3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2lsTGlua0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBsaW5rIGluIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBXc2lsV3NpbExpbmtFbGVtZW50IGV4dGVuZHMgV3NpbExpbmtFbGVtZW50Ci17Ci0gIHB1YmxpYyBXc2lsV3NpbExpbmtFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwsIGxpbmspOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0lMTGlua0xvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBtYWtlQWJzb2x1dGUobGlua18uZ2V0TG9jYXRpb24oKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVdTSUxMaW5rKCkKLSAgewotICAgIHJldHVybiAobGlua18uZ2V0TG9jYXRpb24oKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldFdTSUxMaW5rTG9jYXRpb24oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiNTMyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGYyZDU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OWUzZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkU2VydmljZVRvRmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk4YmViMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQwYTQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFdTSUxUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9GYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODBhZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFdTSUxUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFdTSUxUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkV1NJTFRvRmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQ2xlYXJXU0lMVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0NsZWFyV1NJTFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM1ODBmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQ2xlYXJXU0lMVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5DbGVhcldTSUxBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIENsZWFyV1NJTFRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQ2xlYXJXU0lMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIsICJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIHJldHVybiBDbGVhcldTSUxBY3Rpb24uZ2V0QWN0aW9uTGluayh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVJZCgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmYzODY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9GaWxlU3lzdGVtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wgewotICAgIHB1YmxpYyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWNhMmQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9GaWxlU3lzdGVtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wgewotICAgIHB1YmxpYyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIHJldHVybiBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlSWQoKSwgdG9vbElkXywgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0VURESUJ1c2luZXNzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJQnVzaW5lc3NUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZWU1NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJQnVzaW5lc3NUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGlzdFVERElCdXNpbmVzc1Rvb2wgZXh0ZW5kcyBWaWV3VG9vbCB7Ci0gICAgcHVibGljIExpc3RVRERJQnVzaW5lc3NUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIG5ldyBXc2lsU2V0RGVmYXVsdFZpZXdUb29sKHZpZXdUb29sTWFuYWdlciwgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiQUxUX0JBQ0tfVE9fVE9QIikpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFRvb2xzKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIG5ldyBVZGRpQnVzaW5lc3NEZXRhaWxzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX1VERElfTElOS19ERVRBSUxTIikpOwotICAgICAgICBuZXcgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZVRvb2wodmlld1Rvb2xNYW5hZ2VyLCB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIkFMVF9BRERfQlVTSU5FU1NfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgICAgICAgbmV3IEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sKHZpZXdUb29sTWFuYWdlciwgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJBTFRfQUREX1VERElfQlVTSU5FU1NfVE9fRkFWT1JJVEVTIikpOwotICAgICAgICBuZXcgUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIkFMVF9SRUZSRVNIX1VERElfQlVTSU5FU1MiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuIFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygid3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcCIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0VURESVNlcnZpY2VzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJU2VydmljZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYjA2OTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJU2VydmljZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGlzdFVERElTZXJ2aWNlc1Rvb2wgZXh0ZW5kcyBWaWV3VG9vbCB7Ci0gICAgcHVibGljIExpc3RVRERJU2VydmljZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgbmV3IFdzaWxTZXREZWZhdWx0Vmlld1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJBTFRfQkFDS19UT19UT1AiKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkVG9vbHMoVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBVZGRpU2VydmljZURldGFpbHNUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX1NFUlZJQ0VfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHZpZXdUb29sTWFuYWdlciwgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIikpOwotICAgICAgICBuZXcgSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wodmlld1Rvb2xNYW5hZ2VyLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0lNUE9SVF9UT19GUyIpKTsKLSAgICAgICAgbmV3IFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh2aWV3VG9vbE1hbmFnZXIsIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgICAgIG5ldyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfU0VSVklDRV9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgICAgICBuZXcgQWRkU2VydmljZVRvRmF2b3JpdGVzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1NFUlZJQ0VfVE9fRkFWT1JJVEVTIikpOwotICAgICAgICBuZXcgUmVmcmVzaFVERElTZXJ2aWNlVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUkVGUkVTSF9VRERJX1NFUlZJQ0UiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuIFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygid3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcCIpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RXU0RMU2VydmljZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTRExTZXJ2aWNlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZiOWVkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTRExTZXJ2aWNlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGlzdFdTRExTZXJ2aWNlc1Rvb2wgZXh0ZW5kcyBWaWV3VG9vbCB7Ci0gICAgcHVibGljIExpc3RXU0RMU2VydmljZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgbmV3IFdzaWxTZXREZWZhdWx0Vmlld1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJBTFRfQkFDS19UT19UT1AiKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkVG9vbHMoVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBXc2RsU2VydmljZURldGFpbHNUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX1NFUlZJQ0VfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHZpZXdUb29sTWFuYWdlciwgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIikpOwotICAgICAgICBuZXcgSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wodmlld1Rvb2xNYW5hZ2VyLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0lNUE9SVF9UT19GUyIpKTsKLSAgICAgICAgbmV3IFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh2aWV3VG9vbE1hbmFnZXIsIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgICAgIG5ldyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFIikpOwotICAgICAgICBuZXcgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0RMX1NFUlZJQ0VfVE9fRkFWT1JJVEVTIikpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RXU0lMTGlua3NUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTSUxMaW5rc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ1YjgyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTSUxMaW5rc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGlzdFdTSUxMaW5rc1Rvb2wgZXh0ZW5kcyBWaWV3VG9vbCB7Ci0gICAgcHVibGljIExpc3RXU0lMTGlua3NUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFNldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBuZXcgV3NpbFNldERlZmF1bHRWaWV3VG9vbCh2aWV3VG9vbE1hbmFnZXIsICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIkFMVF9CQUNLX1RPX1RPUCIpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRUb29scyhUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBuZXcgV3NpbExpbmtEZXRhaWxzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfTElOS19ERVRBSUxTIikpOwotICAgICAgICBuZXcgT3BlbldTSUxMaW5rVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NJTF9MSU5LIikpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMTGlua1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9PcGVuV1NJTExpbmtUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNTFjZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMTGlua1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxMaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NJTExpbmtUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIE9wZW5XU0lMTGlua1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9vcGVuX3dzaWxfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBPcGVuV1NJTExpbmtBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvT3BlbldTSUxUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvT3BlbldTSUxUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTFhNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NJTFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIE9wZW5XU0lMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9vcGVuX3dzaWxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL09wZW5XU0lMRm9ybS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hVRERJQnVzaW5lc3NUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmNzNiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgUmVmcmVzaFVERElCdXNpbmVzc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIsICJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gUmVmcmVzaEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoVURESVNlcnZpY2VUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElTZXJ2aWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGM4MmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoVURESVNlcnZpY2VUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hVRERJU2VydmljZVRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgUmVmcmVzaFVERElTZXJ2aWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBSZWZyZXNoQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hXU0lMVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hXU0lMVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2U4YTUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoV1NJTFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFdTSUxUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIFJlZnJlc2hXU0lMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICByZXR1cm4gUmVmcmVzaEFjdGlvbi5nZXRBY3Rpb25MaW5rKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvVWRkaUJ1c2luZXNzRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjQ2MTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBVZGRpQnVzaW5lc3NEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgVWRkaUJ1c2luZXNzRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9VZGRpQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1VkZGlTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpU2VydmljZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NDAwMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1VkZGlTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVWRkaVNlcnZpY2VEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgVWRkaVNlcnZpY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1VkZGlTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NzdkMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb1dvcmtiZW5jaFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoVG9vbCBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoVG9vbAotewotICBwdWJsaWMgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMUGVyc3BlY3RpdmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlODFmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV1NJTFBlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NJTFBlcnNwZWN0aXZlIGV4dGVuZHMgUGVyc3BlY3RpdmUKLXsKLSAgICBwcml2YXRlIEJhc2ljTW9kZWwgbW9kZWxfOwotICAgIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICAgIHByaXZhdGUgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIHByaXZhdGUgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIHByaXZhdGUgU3RyaW5nIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0KLSAgICBwdWJsaWMgV1NJTFBlcnNwZWN0aXZlKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKCJ3c2lsIixjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBpbml0UGVyc3BlY3RpdmUoU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gICAgewotICAgICAgICBtb2RlbF8gPSBuZXcgQmFzaWNNb2RlbCgiV3NpbE1vZGVsIik7Ci0gICAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KGdldE1lc3NhZ2UoIldTSUxfTUFJTl9OT0RFIiksIG1vZGVsXyk7Ci0gICAgICAgIG1vZGVsXy5zZXRSb290RWxlbWVudCh0cmVlRWxlbWVudCk7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IG5ldyBOb2RlTWFuYWdlcihjb250cm9sbGVyXyk7Ci0gICAgICAgIFdzaWxNYWluTm9kZSB3c2lsTWFpbk5vZGUgPSBuZXcgV3NpbE1haW5Ob2RlKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlcl8pOwotICAgICAgICBub2RlTWFuYWdlcl8uc2V0Um9vdE5vZGUod3NpbE1haW5Ob2RlKTsKLQotICAgICAgICAvLyBTdGFydGluZyBmcmFtZXNldCBzaXplcy4KLSAgICAgICAgaWYgKCFEaXJVdGlscy5pc1JUTCgpKQotICAgICAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiMzAlLCoiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIqLDMwJSI7Ci0gICAgICAgIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gIjc1JSwqIjsKLSAgICAgICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIH0KLQotICAgIHB1YmxpYyBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpIHsKLSAgICAgICAgcmV0dXJuIG5vZGVNYW5hZ2VyXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gICAgewotICAgICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQYW5lc0ZpbGUoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEZyYW1lc2V0c0ZpbGUoKQotICAgIHsKLSAgICAgIHJldHVybiAid3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1Byb2Nlc3NXU0lMRnJhbWVzZXRzRm9ybS5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbE5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbFN0YXR1c0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgICB7Ci0gICAgICByZXR1cm4gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICAgIHsKLSAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBjb2xzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhTdHJpbmcgY29scykKLSAgICB7Ci0gICAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBjb2xzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKQotICAgIHsKLSAgICAgIHJldHVybiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgICB7Ci0gICAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICAgIHsKLSAgICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN3aXRjaFBlcnNwZWN0aXZlRm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICAgIHsKLSAgICAgIHJldHVybiBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uLmdldEZvcm1BY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsZm9ySGlzdG9yeSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzZGxTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2RsU2VydmljZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTkyMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzZGxTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NkbFNlcnZpY2VEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgV3NkbFNlcnZpY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dzZGxTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmEwZmRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sIGV4dGVuZHMgQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sIHsKLQotICBwdWJsaWMgV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M0ZDQwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbERldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgV3NpbERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvZm9ybXMvV3NpbERldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjFlZGE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9Xb3JrYmVuY2hUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wgZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaFRvb2wgewotICAgIHB1YmxpYyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzaWwvZm9ybXMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNWQ3NWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCB7Ci0gICAgcHVibGljIFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzaWwvZm9ybXMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxMaW5rRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGlua0RldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNzgxOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxMaW5rRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NpbExpbmtEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgV3NpbExpbmtEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dzaWxMaW5rRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTWFpbk5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTWFpbk5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU3ZDVjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE1haW5Ob2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsTWFpbk5vZGUgZXh0ZW5kcyBXc2lsTmF2aWdhdG9yTm9kZSB7Ci0KLSAgICBwdWJsaWMgV3NpbE1haW5Ob2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIDEsICJpbWFnZXMvcm9vdF9tYWluLmdpZiIpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhXc2lsTW9kZWxDb25zdGFudHMuUkVMX1dTSUwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdzaWxOb2RlIHdzaWxOb2RlID0gbmV3IFdzaWxOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZCh3c2lsTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV3NpbE1vZGVsQ29uc3RhbnRzLlJFTF9XU0lMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhXc2lsTW9kZWxDb25zdGFudHMuUkVMX1dTSUwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBPcGVuV1NJTFRvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NJTCIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5hdmlnYXRvck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTmF2aWdhdG9yTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2MzNGQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTmF2aWdhdG9yTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuV3NpbFRvZ2dsZU5vZGVBY3Rpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXc2lsTmF2aWdhdG9yTm9kZSBleHRlbmRzIE5vZGUgewotCi0gICAgcHVibGljIFdzaWxOYXZpZ2F0b3JOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCwgU3RyaW5nIGltYWdlUGF0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgaW1hZ2VQYXRoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gV3NpbFRvZ2dsZU5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKSB7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sIGZhbHNlKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNjQ1OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgV3NpbE5vZGUgZXh0ZW5kcyBXc2lsTmF2aWdhdG9yTm9kZSB7Ci0KLSAgICBwdWJsaWMgV3NpbE5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCAid3NpbC9pbWFnZXMvd3NpbF9ub2RlLmdpZiIpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBXc2lsRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IExpc3RXU0RMU2VydmljZXNUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1dTRExfU0VSVklDRVMiKSk7Ci0gICAgICAgIG5ldyBMaXN0VURESVNlcnZpY2VzVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9VRERJX1NFUlZJQ0VTIikpOwotICAgICAgICBuZXcgTGlzdFVERElCdXNpbmVzc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfVURESV9MSU5LUyIpKTsKLSAgICAgICAgbmV3IExpc3RXU0lMTGlua3NUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1dTSUxfTElOS1MiKSk7Ci0gICAgICAgIG5ldyBXU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBVExfSU1QT1JUX1dTSUxfVE9fV09SS0JFTkNIIikpOwotICAgICAgICBuZXcgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbVRvb2wodG9vbE1hbmFnZXJfLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0lMX0lNUE9SVF9UT19GUyIpKTsKLSAgICAgICAgbmV3IEFkZFdTSUxUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0lMX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbFNldERlZmF1bHRWaWV3VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxTZXREZWZhdWx0Vmlld1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdjMTEzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbFNldERlZmF1bHRWaWV3VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2V0RGVmYXVsdFZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NpbFNldERlZmF1bHRWaWV3VG9vbCBleHRlbmRzIFNldERlZmF1bHRWaWV3VG9vbCB7Ci0gICAgcHVibGljIFdzaWxTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCBmYWxzZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3RyYW5zZm9ybWVyL1dTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC90cmFuc2Zvcm1lci9XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNWZhMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3RyYW5zZm9ybWVyL1dTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5WaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJQnVzaW5lc3NUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RXU0RMU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RXU0lMTGlua3NUb29sOwotCi1wdWJsaWMgY2xhc3MgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lciBleHRlbmRzIFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTk9ORSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBXU0RMX1NFUlZJQ0UgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgVURESV9TRVJWSUNFID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFVERElfQlVTSU5FU1MgPSAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgV1NJTF9MSU5LID0gNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEZST01fVE9PTElEID0gNTsKLSAgcHJpdmF0ZSBieXRlIHR5cGU7Ci0KLSAgcHVibGljIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgdGhpcyhjb250cm9sbGVyLCAiIiwgQWN0aW9uSW5wdXRzLlZJRVdJRCwgRlJPTV9UT09MSUQpOwotICB9Ci0KLSAgcHVibGljIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyLCBTdHJpbmcgbGlzdE1hbmFnZXJLZXksIFN0cmluZyB2aWV3S2V5LCBieXRlIHR5cGUpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCBsaXN0TWFuYWdlcktleSwgdmlld0tleSk7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgaWYgKHR5cGUgPT0gRlJPTV9UT09MSUQpCi0gICAgewotICAgICAgTm9kZSBjdXJyTm9kZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgIGlmIChjdXJyTm9kZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGludCB0b29sSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnRpZXMuZ2V0KEFjdGlvbklucHV0cy5UT09MSUQpKTsKLSAgICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IGN1cnJOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgICAgVG9vbCB0b29sID0gdG9vbE1hbmFnZXIuZ2V0VG9vbCh0b29sSWQpOwotICAgICAgICAgIGlmICh0b29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpCi0gICAgICAgICAgICBsaXN0TWFuYWdlcktleSA9IFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUzsKLSAgICAgICAgICBlbHNlIGlmICh0b29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gICAgICAgICAgICBsaXN0TWFuYWdlcktleSA9IFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUzsKLSAgICAgICAgICBlbHNlIGlmICh0b29sIGluc3RhbmNlb2YgTGlzdFVERElCdXNpbmVzc1Rvb2wpCi0gICAgICAgICAgICBsaXN0TWFuYWdlcktleSA9IFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUzsKLSAgICAgICAgICBlbHNlIGlmICh0b29sIGluc3RhbmNlb2YgTGlzdFdTSUxMaW5rc1Rvb2wpCi0gICAgICAgICAgICBsaXN0TWFuYWdlcktleSA9IFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NJTF9MSU5LUzsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5ub3JtYWxpemUocHJvcGVydGllcyk7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgTm9kZSBjdXJyTm9kZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoY3Vyck5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUcmVlRWxlbWVudCBjdXJyRWxlbWVudCA9IGN1cnJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoY3VyckVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIGN1cnJFbGVtZW50OwotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFdTRExfU0VSVklDRSA6Ci0gICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVURESV9TRVJWSUNFIDoKLSAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFVERElTZXJ2aWNlcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBVRERJX0JVU0lORVNTIDoKLSAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFVERElMaW5rcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBXU0lMX0xJTksgOgotICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsV1NJTExpbmtzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEZST01fVE9PTElEIDoKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpbnQgdG9vbElkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuVE9PTElEKSk7Ci0gICAgICAgICAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gY3Vyck5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgICAgICAgVG9vbCB0b29sID0gdG9vbE1hbmFnZXIuZ2V0VG9vbCh0b29sSWQpOwotICAgICAgICAgICAgICBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVM7Ci0gICAgICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsV1NETFNlcnZpY2VzKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVM7Ci0gICAgICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RVRERJQnVzaW5lc3NUb29sKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1M7Ci0gICAgICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsVURESUxpbmtzKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RXU0lMTGlua3NUb29sKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1M7Ci0gICAgICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsV1NJTExpbmtzKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZGVOb3JtYWxpemUocHJvcGVydGllcyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGx1Z2luL0V4cGxvcmVyUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsdWdpbi9FeHBsb3JlclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2MzZTZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGx1Z2luL0V4cGxvcmVyUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hXaXphcmRUYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXMuRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotCi0vKioKLSAqIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4KLSAqLwotcHVibGljIGNsYXNzIEV4cGxvcmVyUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotICAvKioKLSAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENIQVJTRVQgPSAiVVRGLTgiOwotICAKLSAgLyoqCi0gICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIEV4cGxvcmVyUGx1Z2luIGluc3RhbmNlXzsKLSAgcHJpdmF0ZSBCdW5kbGVDb250ZXh0IGNvbnRleHQ7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4gVGhlICJwbHVnaW4iIGVsZW1lbnQKLSAgICogaW4gcGx1Z2luLnhtbCBzaG91bGQgaW5jbHVkZSB0aGUgYXR0cmlidXRlIGNsYXNzID0KLSAgICogIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW4iLgotICAgKiAKLSAgICogQHBhcmFtIGRlc2NyaXB0b3IKLSAgICogICAgICAgICAgICBUaGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbi4KLSAgICovCi0gIHB1YmxpYyBFeHBsb3JlclBsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgICogKEV4cGxvcmVyUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyIik7Ci0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBFeHBsb3JlclBsdWdpbiBzaW5nbGV0b24uCi0gICAqLwotICBzdGF0aWMgcHVibGljIEV4cGxvcmVyUGx1Z2luIGdldEluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbGVkIG9uY2UgYnkgdGhlIHBsYXRmb3JtIHdoZW4gdGhpcyBwbHVnaW4gaXMgZmlyc3QgbG9hZGVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBidW5kbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGJ1bmRsZSk7Ci0gICAgLy8gaW5pdCB0aGUgc2hlbGwgb2YgTGF1bmNoV2l6YXJkVGFzawotICAgIHRoaXMuY29udGV4dCA9IGJ1bmRsZTsKLSAgICBMYXVuY2hXaXphcmRUYXNrLmdldEluc3RhbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbGVkIG9uY2UgYnkgdGhlIHBsYXRmb3JtIHdoZW4gdGhpcyBwbHVnaW4gaXMgdW5sb2FkZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgYnVuZGxlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdG9wKGJ1bmRsZSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20gdGhlCi0gICAqIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBsb2NhbGUuCi0gICAqIAotICAgKiBAcGFyYW0ga2V5Ci0gICAqICAgICAgICAgICAgVGhlIG1lc3NhZ2Uga2V5IHN0cmluZyBwcmVmaXhlZCBieSBhICIlIiBzeW1ib2wuIFRoYXQgaXMsIHRoZQotICAgKiAgICAgICAgICAgIHN0cmluZyBwYXNzZWQgaW4gbXVzdCBiZSBvZiB0aGUgZm9ybSAiJUtFWSIgd2hlcmUgdGhlCi0gICAqICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBjb250YWlucyBhIGxpbmUgb2YgdGhlIGZvcm06ICJLRVkgPQotICAgKiAgICAgICAgICAgIHZhbHVlIi4KLSAgICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gUGxhdGZvcm0uZ2V0UmVzb3VyY2VTdHJpbmcoaW5zdGFuY2VfLmdldEJ1bmRsZSgpLCBrZXkpOyAKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbSB0aGUKLSAgICogcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBmb3IgdGhlIGFwcHJvcHJpYXRlIGxvY2FsZS4gU3Vic3RpdHV0aW9uIHNlcXVlbmNlcwotICAgKiBpbiB0aGUgbWVzc2FnZSBzdHJpbmcgYXJlIHJlcGxhY2VkIGJ5IHRoZSBnaXZlbiBhcnJheSBvZiBzdWJzdGl0dXRpb24KLSAgICogb2JqZWN0cyAod2hpY2ggYXJlIG1vc3QgZnJlcXVlbnRseSBzdHJpbmdzKS4gU2VlIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0Ci0gICAqIGZvciBmdXJ0aGVyIGRldGFpbHMgb24gc3Vic3RpdHV0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGtleQotICAgKiAgICAgICAgICAgIFRoZSBtZXNzYWdlIGtleSBzdHJpbmcgcHJlZml4ZWQgYnkgYSAiJSIgc3ltYm9sLiBUaGF0IGlzLCB0aGUKLSAgICogICAgICAgICAgICBzdHJpbmcgcGFzc2VkIGluIG11c3QgYmUgb2YgdGhlIGZvcm0gIiVLRVkiIHdoZXJlIHRoZQotICAgKiAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGFpbnMgYSBsaW5lIG9mIHRoZSBmb3JtOiAiS0VZID0KLSAgICogICAgICAgICAgICB2YWx1ZSIuCi0gICAqIEBwYXJhbSBhcmdzCi0gICAqICAgICAgICAgICAgVGhlIHN1YnN0aXR1dGlvbiB2YWx1ZXMgZm9yIHRoZSBtZXNzYWdlIGFzIHJlcXVpcmVkIGJ5IHRoZQotICAgKiAgICAgICAgICAgIG1lc3NhZ2UgaW4gcGx1Z2luLnByb3BlcnRpZXMgYW5kIGJ5IHRoZSBydWxlcyBvZiBjbGFzcwotICAgKiAgICAgICAgICAgIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0LgotICAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncykKLSAgewotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRNZXNzYWdlKGtleSksIGFyZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlIGFzIHJlbGF0aXZlIHRvIHRoZQotICAgKiBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgbmFtZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2VfLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7Ci0gICAgICBVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsIG5hbWUpOwotICAgICAgcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZWUgSVBsdWdpbkhlbHBlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1zZ0xvZ2dlckNvbmZpZyhIYXNodGFibGUgbXNnTG9nZ2VyQ29uZmlnKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIElQbHVnaW5IZWxwZXIuCi0gICAqLwotICBwdWJsaWMgSGFzaHRhYmxlIGdldE1zZ0xvZ2dlckNvbmZpZyhQbHVnaW4gcGx1Z2luKQotICB7Ci0gICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgSVBsdWdpbkhlbHBlci4KLSAgICovCi0gIHB1YmxpYyBIYXNodGFibGUgZ2V0TXNnTG9nZ2VyQ29uZmlnKCkKLSAgewotICAgIHJldHVybiBnZXRNc2dMb2dnZXJDb25maWcodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBsdWdpblN0YXRlTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtLmdldFBsdWdpblN0YXRlTG9jYXRpb24odGhpcykuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKS50b09TU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpCi0gIHsKLQkvLyBUT0RPOiBnZXRQbHVnaW5JbnN0YWxsTG9jYXRpb24gY2FuIHJldHVybiBudWxsIGFuZCBjYXVzZSB0cm91YmxlIGZvciB0aGUgV1NFJ3MgZmF2b3VyaXRlcyBtZWNoYW5pc20uIDg5MTAxIHNob3VsZCBjb3JyZWN0IHRoaXMuCi0JcmV0dXJuIGdldFBsdWdpbkluc3RhbGxMb2NhdGlvbigpK0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQuRkFWT1JJVEVTX0RFRkFVTFQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGx1Z2luSW5zdGFsbExvY2F0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBQbGF0Zm9ybS5yZXNvbHZlKGluc3RhbmNlXy5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgQnVuZGxlQ29udGV4dCBnZXRCdW5kbGVDb250ZXh0KCkgewotCQlyZXR1cm4gZ2V0SW5zdGFuY2UoKS5jb250ZXh0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcG9wdXAvUG9wdXBUZXN0V1NETC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wb3B1cC9Qb3B1cFRlc3RXU0RMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNmU3NmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wb3B1cC9Qb3B1cFRlc3RXU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjA2ICAgMTA1MDY5IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNjA4MDMgICAxNTI3OTAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAxMjMgICAyMTYzNzIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXA7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9uaXRvci5HZXRNb25pdG9yQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotCi1wdWJsaWMgY2xhc3MgUG9wdXBUZXN0V1NETCBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb25EZWxlZ2F0ZQotewotICBwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gbnVsbDsKLQkKLSAgcHVibGljIFBvcHVwVGVzdFdTREwoKQotICB7Ci0gICAgc3VwZXIoRXhwbG9yZXJQbHVnaW4uZ2V0TWVzc2FnZSgiJVBPUFVQX1RFU1RfV1NETCIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLQlTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpOwotCVN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotICAJV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKTsKLSAgICBjb21tYW5kLnNldEZvcmNlTGF1bmNoT3V0c2lkZUlERShmYWxzZSk7Ci0gICAgVmVjdG9yIGxhdW5jaE9wdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHdzZGxVUkwgPSBudWxsOwotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXQubmV4dCgpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgICAgICB7Ci0gICAgICAgIAlGaWxlIHdzZGxGaWxlID0gKChJUmVzb3VyY2Upb2JqZWN0KS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOwotICAgICAgICAJdHJ5Ci0gICAgICAgIAl7Ci0gICAgICAgIAkJd3NkbFVSTCA9IHdzZGxGaWxlLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgICAgCX0KLSAgICAgICAgCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJd3NkbFVSTCA9IHdzZGxGaWxlLnRvU3RyaW5nKCk7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICAgIHsKLSAgICAgICAgCVNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsID0gKFNlcnZpY2VJbXBsKW9iamVjdDsgICAgICAgICAgCi0gICAgICAgIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBzZXJ2aWNlSW1wbC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7ICAgICAgICAKLSAgICAgICAgCXdzZGxVUkwgPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgICAgewotICAgICAgICAJV1NETFJlc291cmNlSW1wbCBXU0RMUkltcGwgPSAoV1NETFJlc291cmNlSW1wbClvYmplY3Q7Ci0gICAgICAgIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMUkltcGwuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgICAJd3NkbFVSTCA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgICAgCXdzZGxVUkwgPSAoU3RyaW5nKSBvYmplY3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIAkvLyBPYmplY3QgaXMgbm90IGFueSB0eXBlcyB3ZSByZWNvZ25pemVkLCB3c2RsVVJMIGlzIHN0aWxsIG51bGwuCi0gICAgICAgICAgCS8vIFRyeSBsb29raW5nIHVwIGFuIGFkYXB0ZXIgZm9yIHRoZSBvYmplY3QuCi0gICAgICAgIAkvLyBJZiBmb3VuZCwgdXBkYXRlIHdzZGxVUkwgY29udGFpbnMgdGhlIGFkYXB0ZWQgV1NETCBzdHJpbmcuICAKLSAgICAgICAgCS8vIElmIG5vdCBmb3VuZCwgd3NkbFVSTCB3b3VsZCBzdGlsbCBiZSBudWxsLgotICAgICAgICAJd3NkbFVSTCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkV1NETChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgIGFkZExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucywgd3NkbFVSTCwgc3RhdGVMb2NhdGlvbiwgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKTsgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICBjb21tYW5kLnNldExhdW5jaE9wdGlvbnMoKExhdW5jaE9wdGlvbltdKWxhdW5jaE9wdGlvbnMudG9BcnJheShuZXcgTGF1bmNoT3B0aW9uWzBdKSk7Ci0gICAgY29tbWFuZC5leGVjdXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFuZCBhZGQgdGhlIFdFQl9TRVJWSUNFX0VORFBPSU5ULCBXU0RMX1VSTCwgU1RBVEVfTE9DQVRJSU9OIGFuZCAKLSAgICogREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04gTGF1bmNoT3B0aW9ucyB0byB0aGUgbGF1bmNoT3B0aW9ucyB2ZWN0b3IKLSAgICogCi0gICAqIEBwYXJhbSBsYXVuY2hPcHRpb25zIC0gdmVjdG9yIG9mIGxhdW5jaE9wdGlvbnMgdG8gYWRkIHRvCi0gICAqIEBwYXJhbSB3c2RsVVJMCi0gICAqIEBwYXJhbSBzdGF0ZUxvY2F0aW9uCi0gICAqIEBwYXJhbSBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZExhdW5jaE9wdGlvbnMoVmVjdG9yIGxhdW5jaE9wdGlvbnMsIFN0cmluZyB3c2RsVVJMLCBTdHJpbmcgc3RhdGVMb2NhdGlvbiwgU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbikKLSAgewotCSAgR2V0TW9uaXRvckNvbW1hbmQgZ2V0TW9uaXRvckNtZCA9IG5ldyBHZXRNb25pdG9yQ29tbWFuZCgpOwotICAgICAgZ2V0TW9uaXRvckNtZC5zZXRNb25pdG9yU2VydmljZSh0cnVlKTsKLSAgICAgIGdldE1vbml0b3JDbWQuc2V0Q3JlYXRlKGZhbHNlKTsKLSAgICAgIGdldE1vbml0b3JDbWQuc2V0V2ViU2VydmljZXNQYXJzZXIobmV3IFdlYlNlcnZpY2VzUGFyc2VyKCkpOwotICAgICAgZ2V0TW9uaXRvckNtZC5zZXRXc2RsVVJJKHdzZGxVUkwpOwotICAgICAgZ2V0TW9uaXRvckNtZC5leGVjdXRlKG51bGwsIG51bGwpOwotICAgICAgTGlzdCBlbmRwb2ludHMgPSBnZXRNb25pdG9yQ21kLmdldEVuZHBvaW50cygpOwotICAgICAgZm9yIChJdGVyYXRvciBlbmRwb2ludHNJdCA9IGVuZHBvaW50cy5pdGVyYXRvcigpOyBlbmRwb2ludHNJdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgIAkgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XRUJfU0VSVklDRV9FTkRQT0lOVCwgKFN0cmluZyllbmRwb2ludHNJdC5uZXh0KCkpKTsKLSAgICAgIH0KLSAgICAgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XU0RMX1VSTCwgd3NkbFVSTCkpOwotCSAgbGF1bmNoT3B0aW9ucy5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OLHN0YXRlTG9jYXRpb24pKTsKLQkgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgcnVuKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotCSAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotCQkgIHRoaXMuc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JICBlbHNlCi0JCSAgdGhpcy5zZWxlY3Rpb24gPSBudWxsOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDI0YzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0hUVFBUcmFuc3BvcnRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEEgdHlwZSBvZiBUcmFuc3BvcnRFeGNlcHRpb24gdGhhdCBjYW4gYmUgdGhyb3duIHdoZW4gdGhlIHRyYW5zcG9ydCBwcm90b2NvbAotICogaXMgSFRUUC4gIFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgSFRUUCByZXNwb25zZSBpcyBjYXB0dXJlZCBpbiB0aGlzCi0gKiBleGNlcHRpb24gYW5kIHBhc3NlZCB1cCB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLgotICovCi1wdWJsaWMgY2xhc3MgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBleHRlbmRzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA4Mjc3MTgwNzMxNzk4ODU4ODc3TDsKLQkKLQlwcml2YXRlIGludCBzdGF0dXNDb2RlOwotCXByaXZhdGUgTWFwIGhlYWRlcnM7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHN0YXR1c0NvZGUgVGhlIEhUVFAgc3RhdHVzIGNvZGUuCi0JICogQHBhcmFtIG1lc3NhZ2UgQSBtZXNzYWdlIGFib3V0IHRoZSBwcm9ibGVtIHRoYXQgb2NjdXJyZWQuCi0JICogQHBhcmFtIGhlYWRlcnMgQSBtYXAgb2YgdGhlIEhUVFAgaGVhZGVycy4KLQkgKi8KLQlwdWJsaWMgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihpbnQgc3RhdHVzQ29kZSwgU3RyaW5nIG1lc3NhZ2UsIE1hcCBoZWFkZXJzKSB7Ci0JCXN1cGVyKG1lc3NhZ2UpOwotCQl0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOwotCQl0aGlzLmhlYWRlcnMgPSBoZWFkZXJzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBIVFRQIHN0YXR1cyBjb2RlIHVzZWQgdG8gY3JlYXRlIHRoaXMgZXhjZXB0aW9uLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIEhUVFAgc3RhdHVzIGNvZGUuCi0JICovCi0JcHVibGljIGludCBnZXRTdGF0dXNDb2RlKCkgewotCQlyZXR1cm4gc3RhdHVzQ29kZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIEhUVFAgaGVhZGVyIGZvciB0aGUgZ2l2ZW4ga2V5Ci0JICogCi0JICogQHBhcmFtIGtleSBUaGUga2V5IHZhbHVlLgotCSAqIEByZXR1cm4gVGhlIEhUVFAgaGVhZGVyIHZhbHVlIGZvciBrZXksIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gc3VjaCBoZWFkZXIuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRIZWFkZXIoU3RyaW5nIGtleSkgewotCSAgICBPYmplY3QgdmFsdWUgPSBoZWFkZXJzLmdldChrZXkpOwotCSAgICBpZiAodmFsdWUgIT0gbnVsbCkKLQkgICAgCXJldHVybiB2YWx1ZS50b1N0cmluZygpOwotCSAgICBlbHNlCi0JICAgIAlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JRGVzZXJpYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JRGVzZXJpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OGEyMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSURlc2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotLyoqCi0gKiBUaGUgSURlc2VyaWFsaXplciBpcyByZXNwb25zaWJsZSBmb3IgdGFraW5nIGFuIFhNTCBzdHJpbmcgYW5kIGRlc2VyaWFsaXppbmcgaXQKLSAqIGludG8gdmFsdWVzIHRvIHBvcHVsYXRlIGFuIElTT0FQTWVzc2FnZS4KLSAqLwotcHVibGljIGludGVyZmFjZSBJRGVzZXJpYWxpemVyIHsKLQkKLQkvKioKLQkgKiBEZXNlcmlhbGl6ZSB0aGUgWE1MIHN0cmluZyBpbnRvIHRoZSBJU09BUE1lc3NhZ2UuICBUaGUgcGFydCBwYXJhbWV0ZXIgdGVsbHMgdGhlIG1ldGhvZAotCSAqIHdoaWNoIHBhcnQgb2YgdGhlIG1lc3NhZ2UgKHRoZSBlbnZlbG9wZSBvciB0aGUgY29udGVudHMgb2YgdGhlIGhlYWRlciBvciBib2R5KSB0aGUgWE1MCi0JICogc3RyaW5nIHJlcHJlc2VudHMuICBOb3RlIHRoYXQgImNvbnRlbnRzIiByZWZlcnMgdG8gdGhlIGxpc3Qgb2YgZWxlbWVudHMgaW5zaWRlIHRoZSBoZWFkZXIKLQkgKiBvciBib2R5LCBhbmQgbm90IHRoZSBoZWFkZXIgb3IgYm9keSBlbGVtZW50IGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gcGFydCBPbmUgb2Yge0BsaW5rIElTT0FQTWVzc2FnZSNFTlZFTE9QRX0sIHtAbGluayBJU09BUE1lc3NhZ2UjSEVBREVSX0NPTlRFTlR9LCBvcgotCSAqIHtAbGluayBJU09BUE1lc3NhZ2UjQk9EWV9DT05URU5UfS4KLQkgKiBAcGFyYW0geG1sIFRoZSBYTUwgc3RyaW5nIHRvIGRlc2VyaWFsaXplLgotCSAqIEBwYXJhbSBtZXNzYWdlIFRoZSBJU09BUE1lc3NhZ2UgdG8gZGVzZXJpYWxpemUgaW50by4KLQkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlc2VyaWFsaXplKGludCBwYXJ0LCBTdHJpbmcgeG1sLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbjsJCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBNZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUE1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkMGFkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUE1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIElTT0FQTWVzc2FnZSByZXByZXNlbnRzIGEgU09BUCBtZXNzYWdlIGluIGEgd2ViIHNlcnZpY2UgaW52b2NhdGlvbiBtYWRlIGJ5IHRoZQotICogV2ViIFNlcnZpY2VzIEV4cGxvcmVyJ3MgdHJhbnNwb3J0IHN0YWNrLgotICogPGJyLz4KLSAqIDxici8+Ci0gKiBUaGUgc2V0dGVycyBvZiBJU09BUE1lc3NhZ2UgYXJlIGNhbGxlZCBieSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gcG9wdWxhdGUgdGhlCi0gKiBtZXNzYWdlIGJlZm9yZSBzZW5kaW5nLiAgV1NFIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IGFsbCBtZXNzYWdlIGVsZW1lbnRzIGl0IHNldHMKLSAqIHdpbGwgaGF2ZSB0aGUgc2FtZSBvd25lciBkb2N1bWVudC4KLSAqLwotcHVibGljIGludGVyZmFjZSBJU09BUE1lc3NhZ2UgewotCi0JLyoqCi0JICogSVNPQVBNZXNzYWdlIGRlZmluZXMgdGhpcyBwcm9wZXJ0eSBmb3Igc3RvcmluZyB0aGUgU09BUCBhY3Rpb24gdmFsdWUgaW4KLQkgKiBhIHdlYiBzZXJ2aWNlIGludm9jYXRpb24uICBUaGlzIHByb3BlcnR5IHdpbGwgYmUgc2V0IGJ5IFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCSAqIHByaW9yIHRvIHBhc3NpbmcgdGhlIG1lc3NhZ2UgdG8ge0BsaW5rIElTT0FQVHJhbnNwb3J0I3NlbmQoU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgSVNPQVBNZXNzYWdlKX0KLQkgKi8KLQlTdHJpbmcgUFJPUF9TT0FQX0FDVElPTiA9ICJwcm9wX3NvYXBfYWN0aW9uIjsKLQkKLQkvKioKLQkgKiBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBhIG1lc3NhZ2UuICBJdCBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbgotCSAqIGlzIHdvcmtpbmcgd2l0aCB0aGUgZW50aXJlIFNPQVAgZW52ZWxvcGUgZWxlbWVudC4gCi0JICovCi0JaW50IEVOVkVMT1BFID0gMDsKLQkKLQkvKioKLQkgKiBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBhIG1lc3NhZ2UuICBJdCBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbgotCSAqIGlzIHdvcmtpbmcgd2l0aCB0aGUgZWxlbWVudHMgaW5zaWRlIHRoZSBTT0FQIGhlYWRlciBlbGVtZW50LgotCSAqLwotCWludCBIRUFERVJfQ09OVEVOVCA9IDE7Ci0JCi0JLyoqCi0JICogVGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgYSBtZXNzYWdlLiAgSXQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24KLQkgKiBpcyB3b3JraW5nIHdpdGggdGhlIGVsZW1lbnRzIGluc2lkZSB0aGUgU09BUCBib2R5IGVsZW1lbnQuCi0JICovCi0JaW50IEJPRFlfQ09OVEVOVCA9IDI7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBNZXNzYWdlQ29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZXNzYWdlLiAgVGhlIE1lc3NhZ2VDb250ZXh0IGlzIGNyZWF0ZWQKLQkgKiBieSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFuZCBwYXNzZWQgdG8gdGhlIHRyYW5zcG9ydCBzdGFjayBkdXJpbmcgbWVzc2FnZSBjcmVhdGlvbi4gIAotCSAqIEltcGxlbWVudGVycyBvZiBJU09BUE1lc3NhZ2Ugc2hvdWxkIHN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSBNZXNzYWdlQ29udGV4dC4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBNZXNzYWdlQ29udGV4dCBlbmNhc3VsYXRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdlYiBzZXJ2aWNlIG9wZXJhdGlvbi4gCi0JICogQHNlZSBJU09BUFRyYW5zcG9ydCNuZXdNZXNzYWdlKE1lc3NhZ2VDb250ZXh0KQotCSAqLwotCXB1YmxpYyBNZXNzYWdlQ29udGV4dCBnZXRNZXNzYWdlQ29udGV4dCgpOwotCi0JLyoqCi0JICogU2V0cyBhIHByb3BlcnR5IGluIHRoaXMgSVNPQVBNZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSBrZXkgVGhlIGtleSAobmFtZSkgb2YgdGhlIHByb3BlcnR5Ci0JICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJvcGVydHkoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIHByb3BlcnR5IGZyb20gdGhpcyBJU09BUE1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIGtleSBUaGUga2V5IChuYW1lKSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmlldmUuCi0JICogQHJldHVybiBUaGUgdmFsdWUgYXNzb2ljYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXksIG9yIG51bGwgaWYgdGhlcmUncyBubyBzdWNoIHByb3BlcnR5LgotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHkoU3RyaW5nIGtleSk7Ci0KLQkvKioKLQkgKiBUaGUgbmFtZXNwYWNlIHRhYmxlIGhvbGRzIHRoZSBuYW1lc3BhY2UgZGVjbGFyYWlvbnMgdGhhdCBhcmUgb24gdGhlIGVudmVsb3BlIGVsZW1lbnQKLQkgKiBvZiB0aGUgU09BUCBtZXNzYWdlLiAgVGhlIHRhYmxlJ3Mga2V5cyBhcmUgdGhlIG5hbWVzcGFjZSBVUklzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUKLQkgKiBhc3NvY2lhdGVkIG5hbWVzcGFjZSBwcmVmaXhlcy4KLQkgKiA8YnIvPgotCSAqIDxici8+Ci0JICogVGhlIGVmZmVjdCBvZiBjYWxsaW5nIHRoaXMgbWV0aG9kIGlzIHRoYXQgdGhlIGRlY2xhcmF0aW9ucyBpbiB0aGUgbmFtZXNwYWNlIHRhYmxlCi0JICogYXJndW1lbnQgc2hvdWxkIGFkZCB0byBvciByZXBsYWNlIHRoZSBkZWNsYXJhdGlvbnMgb24gdGhlIGVudmVsb3BlLiAgVGhpcyBBUEkgZG9lcwotCSAqIG5vdCBzcGVjaWZ5IHdoYXQgaGFwcGVucyB0byBleGlzdGluZyBkZWNsYXJhdGlvbnMgb24gdGhlIGVudmVsb3BlIHdoaWNoIGFyZSBub3QKLQkgKiBpbiB0aGUgbmFtZXNwYWNlIHRhYmxlIHBhc3NlZCBpbi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZXNwYWNlVGFibGUgVGhlIG5hbWVzcGFjZSB0YWJsZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZVRhYmxlKE1hcCBuYW1lc3BhY2VUYWJsZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgdGFibGUgb2YgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgb24gdGhlIGVudmVsb3BlIGVsZW1lbnQgb2YgdGhlCi0JICogU09BUCBtZXNzYWdlLiAgVGhlIHRhYmxlJ3Mga2V5cyBhcmUgdGhlIG5hbWVzcGFjZSBVUklzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUKLQkgKiBhc3NvY2lhdGVkIG5hbWVzcGFjZSBwcmVmaXhlcy4KLQkgKiA8YnIvPgotCSAqIDxici8+Ci0JICogVGhlIG5hbWVzcGFjZSB0YWJsZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBtYXkgYmUgbW9kaWZpZWQgYnkgdGhlIFdlYiBTZXJ2aWNlcwotCSAqIEV4cGxvcmVyIGFuZCBsYXRlciB1cGRhdGVkIGJhY2sgdG8gdGhlIG1lc3NhZ2UgdmlhIHRoZSBzZXROYW1lc2FwY2VUYWJsZSgpIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgdGFibGUgb2YgbmFtZXNwYWNlIFVSSXMgdG8gcHJlZml4ZXMgb24gdGhlIFNPQVAgZW52ZWxvcGUuCi0JICovCi0JcHVibGljIE1hcCBnZXROYW1lc3BhY2VUYWJsZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgZW52ZWxvcGUgZWxlbWVudCBvZiB0aGlzIG1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIGVudmVsb3BlIFRoZSBlbnZlbG9wZSBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEVudmVsb3BlKEVsZW1lbnQgZW52ZWxvcGUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZW52ZWxvcGUgZWxlbWVudCBvZiB0aGlzIG1lc3NhZ2UuICBUaGUgZGVlcCBwYXJhbWV0ZXIgZGljdGF0ZXMgd2hldGhlcgotCSAqIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgd2hvbGUgZW52ZWxvcGUgd2l0aCBhbGwgaXRzIGRlc2NlbmRhbnRzIG9yIGp1c3QgdGhlIGVudmVsb3BlIAotCSAqIGVsZW1lbnQgaXRzZWxmLgotCSAqIAotCSAqIEBwYXJhbSBkZWVwIElmIHRydWUsIHRoZSBlbnZlbG9wZSBhbmQgaXRzIGRlc2NlbmRhbnRzIGFyZSByZXR1cm5lZCwgb3RoZXJ3aXNlIG9ubHkKLQkgKiB0aGUgZW52ZWxvcGUgZWxlbWVudCBpdHNlbGYgaXMgcmV0dXJuZWQuCi0JICogQHJldHVybiBBbiBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEVudmVsb3BlKGJvb2xlYW4gZGVlcCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBoZWFkZXIgZWxlbWVudCBvZiB0aGlzIG1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIGhlYWRlciBUaGUgaGVhZGVyIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SGVhZGVyKEVsZW1lbnQgaGVhZGVyKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGhlYWRlciBlbGVtZW50IG9mIHRoaXMgbWVzc2FnZS4gIFRoZSBkZWVwIHBhcmFtZXRlciBkaWN0YXRlcyB3aGV0aGVyCi0JICogdGhlIG1ldGhvZCByZXR1cm5zIHRoZSB3aG9sZSBoZWFkZXIgd2l0aCBhbGwgaXRzIGRlc2NlbmRhbnRzIG9yIGp1c3QgdGhlIGhlYWRlciAKLQkgKiBlbGVtZW50IGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gZGVlcCBJZiB0cnVlLCB0aGUgaGVhZGVyIGFuZCBpdHMgZGVzY2VuZGFudHMgYXJlIHJldHVybmVkLCBvdGhlcndpc2Ugb25seQotCSAqIHRoZSBoZWFkZXIgZWxlbWVudCBpdHNlbGYgaXMgcmV0dXJuZWQuCi0JICogQHJldHVybiBBbiBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEhlYWRlcihib29sZWFuIGRlZXApOwotCi0JLyoqCi0JICogU2V0cyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGdvZXMgaW50byB0aGUgbWVzc2FnZSdzIGhlYWRlci4KLQkgKiAKLQkgKiBAcGFyYW0gaGVhZGVyQ29udGVudCBBbiBhcnJheSBvZiBlbGVtZW50cy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIZWFkZXJDb250ZW50KEVsZW1lbnRbXSBoZWFkZXJDb250ZW50KTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIGluc2lkZSB0aGUgbWVzc2FnZSdzIGhlYWRlci4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGVsZW1lbnRzLgotCSAqLwotCXB1YmxpYyBFbGVtZW50W10gZ2V0SGVhZGVyQ29udGVudCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgYm9keSBlbGVtZW50IG9mIHRoaXMgbWVzc2FnZS4gIEZvciBhbiBSUEMgc3R5bGUgbWVzc2FnZSwgdGhlIGZpcnN0IGNoaWxkCi0JICogZWxlbWVudCBvZiB0aGUgYm9keSBzaG91bGQgYmUgdGhlIFJQQyB3cmFwcGVyIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGJvZHkgVGhlIGJvZHkgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCb2R5KEVsZW1lbnQgYm9keSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBib2R5IG9mIHRoaXMgbWVzc2FnZS4gIFRoZSBkZWVwIHBhcmFtZXRlciBkaWN0YXRlcyB3aGV0aGVyCi0JICogdGhlIG1ldGhvZCByZXR1cm5zIHRoZSB3aG9sZSBib2R5IHdpdGggYWxsIGl0cyBkZXNjZW5kYW50cyBlbGVtZW50cyBvciBqdXN0IHRoZQotCSAqIGJvZHkuICBGb3IgYW4gUlBDIHN0eWxlIG1lc3NhZ2UsIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IG9mIHRoZSAKLQkgKiBib2R5IHNob3VsZCBiZSB0aGUgUlBDIHdyYXBwZXIgZWxlbWVudCwgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlIGRlZXAKLQkgKiBwYXJhbWV0ZXIuCi0JICogCi0JICogQHBhcmFtIGRlZXAgSWYgdHJ1ZSwgdGhlIGJvZHkgYW5kIGl0cyBkZXNjZW5kYW50cyBhcmUgcmV0dXJuZWQsIG90aGVyd2lzZSBvbmx5Ci0JICogdGhlIGJvZHkgKGFuZCB0aGUgUlBDIHdyYXBwZXIgZWxlbWVudCBpZiB0aGUgbWVzc2FnZSBpcyBSUEMgc3R5bGUpIGlzIHJldHVybmVkLgotCSAqIEByZXR1cm4gQW4gZWxlbWVudC4KLQkgKi8JCi0JcHVibGljIEVsZW1lbnQgZ2V0Qm9keShib29sZWFuIGRlZXApOwotCi0JLyoqCi0JICogU2V0cyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGdvZXMgaW50byB0aGUgbWVzc2FnZSdzIGJvZHkuICBGb3IgYW4gUlBDIHN0eWxlCi0JICogbWVzc2FnZSwgdGhlIGJvZHkgY29udGVudHMgYXJlIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhlIFJQQyB3cmFwcGVyIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGJvZHlDb250ZW50IEFuIGFycmF5IG9mIGVsZW1lbnRzLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJvZHlDb250ZW50KEVsZW1lbnRbXSBib2R5Q29udGVudCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSBpbnNpZGUgdGhlIG1lc3NhZ2UncyBib2R5LiAgRm9yIGFuIFJQQyBzdHlsZQotCSAqIG1lc3NhZ2UsIHRoZSBib2R5IGNvbnRlbnRzIGFyZSB0aGUgZWxlbWVudHMgaW5zaWRlIHRoZSBSUEMgd3JhcHBlciBlbGVtZW50LgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgZWxlbWVudHMuCi0JICovCi0JcHVibGljIEVsZW1lbnRbXSBnZXRCb2R5Q29udGVudCgpOwotCi0JLyoqCi0JICogU2V0IHRoZSBmYXVsdCBlbGVtZW50IGZvciB0aGlzIG1lc3NhZ2UsIGlmIGFueS4KLQkgKiAKLQkgKiBAcGFyYW0gZmF1bHQgQSBmYXVsdCBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZhdWx0KEVsZW1lbnQgZmF1bHQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmF1bHQgZWxlbWVudCwgaWYgYW55LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGZhdWx0IGVsZW1lbnQgb3IgbnVsbCBpZiBubyBmYXVsdCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0RmF1bHQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIFhNTCBzZXJpYWxpemVkIGZvcm0gb2YgdGhpcyBJU09BUE1lc3NhZ2UuCi0JICogCi0JICogQHJldHVybiBBbiBYTUwgc3RyaW5nLgotCSAqIEBzZWUgSVNlcmlhbGl6ZXIKLQkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiAKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvWE1MKCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQVHJhbnNwb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMmEzZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLS8qKgotICogVGhlIElTT0FQVHJhbnNwb3J0IGlzIHRoZSBjb3JlIHBpZWNlIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdHJhbnNwb3J0IHN0YWNrLgotICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGludm9raW5nIHRoZSB3ZWIgc2VydmljZSBhbmQgaXQgYWxzbyBhY3RzIGFzIHRoZSBmYWN0b3J5IGZvcgotICogY3JlYXRpbmcgSVNlcmlhbGllciwgSURlc2VyaWFsaXplciwgYW5kIElTT0FQTWVzc2FnZSBpbnN0YW5jZXMgd2hpY2ggbWFrZSB1cCB0aGUKLSAqIHJlc3Qgb2YgdGhlIFdTRSB0cmFuc3BvcnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVNPQVBUcmFuc3BvcnQgewkJCi0KLQkvKioKLQkgKiBGYWN0b3J5IG1ldGhvZCBmb3IgSVNlcmlhbGl6ZXIuCi0JICogCi0JICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiBJU2VyaWFsaXplci4KLQkgKi8KLQlwdWJsaWMgSVNlcmlhbGl6ZXIgbmV3U2VyaWFsaXplcigpOwotCQotCS8qKgotCSAqIEZhY3RvcnkgbWV0aG9kIGZvciBJRGVzZXJpYWxpemVyLgotCSAqIAotCSAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2YgSURlc2VyaWFsaXplci4KLQkgKi8KLQlwdWJsaWMgSURlc2VyaWFsaXplciBuZXdEZXNlcmlhbGl6ZXIoKTsKLQkKLQkvKioKLQkgKiBGYWN0b3J5IG1ldGhvZCBmb3IgSVNPQVBNZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSBjb250ZXh0IE1lc3NhZ2VDb250ZXh0IGVuY2Fwc3VsYXRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdlYiBzZXJ2aWNlIG9wZXJhdGlvbi4KLQkgKiBAcmV0dXJuIEFuIGluc3RhbmNlIG9mIElTT0FQTWVzc2FnZS4KLQkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBJU09BUE1lc3NhZ2UgbmV3TWVzc2FnZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEludm9rZXMgdGhlIHdlYiBzZXJ2aWNlIG9wZXJhdGlvbiBieSBzZW5kaW5nIHRoZSBTT0FQIG1lc3NhZ2UsIHRoZW4gcGFyc2luZyB0aGUgcmVzdWx0cwotCSAqIGludG8gYSByZXNwb25zZSBJU09BUE1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIHVybCBUaGUgZW5kcG9pbnQgVVJMLgotCSAqIEBwYXJhbSB1c2VybmFtZSBVc2VybmFtZSB0byB1c2UgZm9yIGJhc2ljIGF1dGggcHJvdGVjdGVkIGVuZHBvaW50cy4gIFNldCB0byBudWxsIGlmIG5vdCByZXF1aXJlZC4gIAotCSAqIEBwYXJhbSBwYXNzd29yZCBQYXNzd29yZCB0byB1c2UgZm9yIGJhc2ljIGF1dGggcHJvdGVjdGVkIGVuZHBvaW50cy4gIFNldCB0byBudWxsIGlmIG5vdCByZXF1aXJlZC4KLQkgKiBAcGFyYW0gbWVzc2FnZSBUaGUgU09BUCByZXF1ZXN0IG1lc3NhZ2UuCi0JICogQHJldHVybiBBbiBJU09BUE1lc2FnZSByZXByZXNlbnRpbmcgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHdlYiBzZXJ2aWNlIGludm9jYXRpb24uCi0JICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgSVNPQVBNZXNzYWdlIHNlbmQoU3RyaW5nIHVybCwgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGUzZGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQVHJhbnNwb3J0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLS8qKgotICogSVNPQVBUcmFuc3BvcnRQcm92aWRlciBpcyBhIGZhY3RvcnkgZm9yIGNyZWF0aW5nIElTT0FQVHJhbnNwb3J0IG9iamVjdHMuCi0gKiBBbnlvbmUgd2hvIHdpc2hlcyB0byBleHRlbmQgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci53c2VUcmFuc3BvcnRQcm92aWRlcgotICogZXh0ZW5zaW9uLXBvaW50IG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBpbnRlcmZhY2UuIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgewotCi0JLyoqCi0JICogTWV0aG9kIGZvciBvYnRhaW5pbmcgYSBuZXcgSVNPQVBUcmFuc3BvcnQgZnJvbSB0aGlzIHByb3ZpZGVyLgotCSAqIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciByZXR1cm4gbnVsbC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgbmV3IElTT0FQVHJhbnNwb3J0IG9iamVjdC4KLQkgKi8KLQlwdWJsaWMgSVNPQVBUcmFuc3BvcnQgbmV3VHJhbnNwb3J0KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU2VyaWFsaXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiNjlmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotLyoqCi0gKiBUaGUgSVNlcmlhbGl6ZXIgaXMgcmVzcG9uc2libGUgZm9yIHRha2luZyBhbiBJU09BUE1lc3NhZ2UgYW5kIHNlcmlhbGl6aW5nIGl0Ci0gKiBpbnRvIGFuIFhNTCBzdHJpbmcuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVNlcmlhbGl6ZXIgewotCi0JLyoqCi0JICogU2VyaWFsaXplIHRoZSBJU09BUE1lc3NhZ2UgaW50byBhbiBYTUwgc3RyaW5nLiAgVGhlIHBhcnQgcGFyYW1ldGVyIHRlbGxzIHRoZSBtZXRob2QKLQkgKiB3aGljaCBwYXJ0IG9mIHRoZSBtZXNzYWdlICh0aGUgZW52ZWxvcGUgb3IgdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkZXIgb3IgYm9keSkgdG8KLQkgKiBzZXJpYWxpemUuICBOb3RlIHRoYXQgImNvbnRlbnRzIiByZWZlcnMgdG8gdGhlIGxpc3Qgb2YgZWxlbWVudHMgaW5zaWRlIHRoZSBoZWFkZXIKLQkgKiBvciBib2R5LCBhbmQgbm90IHRoZSBoZWFkZXIgb3IgYm9keSBlbGVtZW50IGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gcGFydCBPbmUgb2Yge0BsaW5rIElTT0FQTWVzc2FnZSNFTlZFTE9QRX0sIHtAbGluayBJU09BUE1lc3NhZ2UjSEVBREVSX0NPTlRFTlR9LCBvcgotCSAqIHtAbGluayBJU09BUE1lc3NhZ2UjQk9EWV9DT05URU5UfS4KLQkgKiBAcGFyYW0gbWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHNlcmlhbGl6ZS4KLQkgKiBAcmV0dXJuIEFuIFhNTCBzdHJpbmcuIAotCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uCi0JICovCi0JcHVibGljIFN0cmluZyBzZXJpYWxpemUoaW50IHBhcnQsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvTWVzc2FnZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L01lc3NhZ2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMzI3Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvTWVzc2FnZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLS8qKgotICogQSBNZXNzYWdlQ29udGV4dCBvYmplY3QgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lc3NhZ2UgdGhhdCBpcyB0byBiZQotICogc2VudCBvbiBhIHdlYiBzZXJ2aWNlIGludm9jYXRpb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIHBhc3NlZCB0byB0aGUKLSAqIElTT0FQVHJhbnNwb3J0IHNvIHRoYXQgaXQgY2FuIGNvbnN0cnVjdCBhbiBhcHByb3ByaWF0ZSBJU09BUE1lc3NhZ2UgdG8KLSAqIGhhbmRsZSB0aGUgaW52b2NhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VDb250ZXh0IHsKLQkKLQlwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQlwcml2YXRlIEV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmdQcm90b2NvbDsKLQlwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjsJCi0JcHJpdmF0ZSBib29sZWFuIGRvY3VtZW50U3R5bGU7CQkJCi0JCi0JLyoqCi0JICogU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgV1NETCBkZWZpbml0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBkZWZpbml0aW9uIFRoZSBXU0RMIGRlZmluaXRpb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgV1NETCBkZWZpbml0aW9uLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIFdTREwgZGVmaW5pdGlvbi4KLQkgKi8KLQlwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkgewotCQlyZXR1cm4gZGVmaW5pdGlvbjsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgYmluZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaW4gdGhlIFdTREwgZG9jdW1lbnQuCi0JICogRm9yIGEgd2ViIHNlcnZpY2UgdGhhdCB1c2VzIHRoZSBTT0FQIHByb3RvY29sLCB0aGlzIHdpbGwgYmUgYW4gaW5zdGFuY2Ugb2YKLQkgKiBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZwotCSAqIAotCSAqIEBwYXJhbSBiaW5kaW5nUHJvdG9jb2wgVGhlIGJpbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJpbmRpbmdQcm90b2NvbChFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nUHJvdG9jb2wpIHsKLQkJdGhpcy5iaW5kaW5nUHJvdG9jb2wgPSBiaW5kaW5nUHJvdG9jb2w7CQkKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYmluZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0JICogCi0JICogQHJldHVybiBUaGUgYmluZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0JICovCi0JcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGdldEJpbmRpbmdQcm90b2NvbCgpIHsKLQkJcmV0dXJuIGJpbmRpbmdQcm90b2NvbDsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudCBpbiB0aGUgV1NETCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiBUaGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikgewotCQl0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGJpbmRpbmcgb3BlcmF0aW9uIGVsZW1lbnQuCi0JICovCi0JcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbigpIHsKLQkJcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0JfQkJCi0JCQotCS8qKgotCSAqIFNldHMgdGhlIGZsYWcgb24gd2hldGhlciB0aGUgbWVzc2FnZSBjcmVhdGVkIGZyb20gdGhpcyBNZXNzYWdlQ29udGV4dAotCSAqIGlzIGRvY3VtZW50IHN0eWxlIG9yIG5vdC4KLQkgKiAKLQkgKiBAcGFyYW0gZG9jdW1lbnRTdHlsZSBUcnVlIGZvciBkb2N1bWVudCBzdHlsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50U3R5bGUoYm9vbGVhbiBkb2N1bWVudFN0eWxlKSB7Ci0JCXRoaXMuZG9jdW1lbnRTdHlsZSA9IGRvY3VtZW50U3R5bGU7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGRvY3VtZW50IHN0eWxlIHByb3BlcnR5LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGRvY3VtZW50IHN0eWxlIHByb3BlcnR5LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRTdHlsZSgpIHsKLQkJcmV0dXJuIGRvY3VtZW50U3R5bGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvU09BUE1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L1NPQVBNZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTQxZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvU09BUE1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBUaGlzIGlzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVNPQVBNZXNzYWdlIGludGVyZmFjZSB0aGF0IGV4dGVuZGVycyBvZiB0aGUgV2ViCi0gKiBTZXJ2aWNlcyBFeHBsb3JlciB0cmFuc3BvcnQgY2FuIHVzZSBpZiB0aGV5IGRvIG5vdCB3aXNoIHRvIGltcGxlbWVudCB0aGVpciBvd24gbWVzc2FnZS4gIAotICogVGhpcyBjbGFzcyBpcyAgaW1wbGVtZW50ZWQgYXMgYSBjb2xsZWN0aW9uIG9mIGxvb3NlIHBpZWNlcyBvZiB0aGUgU09BUCBtZXNzYWdlLCBhbmQgZWFjaCAKLSAqIHBpZWNlIG11c3QgYmUgc2V0IGluZGl2aWR1YWxseSAoZm9yIGV4YW1wbGUsIHNldHRpbmcgdGhlIGVudmVsb3BlIGVsZW1lbnQgd2lsbCBub3QgCi0gKiBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlIHRoZSBoZWFkZXIgb3IgYm9keSBlbGVtZW50cykuCi0gKiA8YnIvPgotICogPGJyLz4KLSAqIFRoaXMgY2xhc3MgZG9lcyBub3Qga25vdyBob3cgdG8gc2VyaWFsaXplIGl0c2VsZi4gIEl0IGRlcGVuZHMgb24gYW4gSVNlcmlhbGl6ZXIgcHJvdmlkZWQgYnkKLSAqIHRoZSB0cmFuc3BvcnQgZXh0ZW5kZXIuIAotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgU09BUE1lc3NhZ2UgaW1wbGVtZW50cyBJU09BUE1lc3NhZ2UgewotCQotCXByaXZhdGUgTWVzc2FnZUNvbnRleHQgY29udGV4dDsKLQlwcml2YXRlIElTZXJpYWxpemVyIHNlcmlhbGl6ZXI7Ci0JCQotCXByaXZhdGUgTWFwIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CQotCQotCXByaXZhdGUgRWxlbWVudCBlbnZlbG9wZSA9IG51bGw7Ci0JCi0JcHJpdmF0ZSBFbGVtZW50IGhlYWRlciA9IG51bGw7Ci0JcHJpdmF0ZSBFbGVtZW50W10gaGVhZGVyQ29udGVudCA9IG51bGw7Ci0JCi0JcHJpdmF0ZSBFbGVtZW50IGJvZHkgPSBudWxsOwotCXByaXZhdGUgRWxlbWVudFtdIGJvZHlDb250ZW50ID0gbnVsbDsJCi0JCQotCXByaXZhdGUgRWxlbWVudCBmYXVsdCA9IG51bGw7Ci0JCQotCXByaXZhdGUgU3RyaW5nIHhtbCA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHQgVGhlIE1lc3NhZ2VDb250ZXh0LgotCSAqIEBwYXJhbSBzZXJpYWxpemVyIEFuIElTZXJpYWxpemVyIHRvIHVzZSB0byBzZXJpYWxpemUgdGhpcyBtZXNzYWdlLgotCSAqLwotCXB1YmxpYyBTT0FQTWVzc2FnZShNZXNzYWdlQ29udGV4dCBjb250ZXh0LCBJU2VyaWFsaXplciBzZXJpYWxpemVyKSB7Ci0JCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0JCXRoaXMuc2VyaWFsaXplciA9IHNlcmlhbGl6ZXI7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldE1lc3NhZ2VDb250ZXh0KCkKLQkgKi8KLQlwdWJsaWMgTWVzc2FnZUNvbnRleHQgZ2V0TWVzc2FnZUNvbnRleHQoKSB7Ci0JCXJldHVybiBjb250ZXh0OwotCX0KLQkJCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0UHJvcGVydHkoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eShTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpIHsKLQkJcHJvcGVydGllcy5wdXQoa2V5LCB2YWx1ZSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldFByb3BlcnR5KGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eShTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBwcm9wZXJ0aWVzLmdldChrZXkpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXROYW1lc3BhY2VUYWJsZShqYXZhLnV0aWwuTWFwKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXROYW1lc3BhY2VUYWJsZShNYXAgbmFtZXNwYWNlVGFibGUpIHsKLQkJaWYgKG5hbWVzcGFjZVRhYmxlID09IG51bGwgfHwgZW52ZWxvcGUgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkKLQkJSXRlcmF0b3IgaXRlciA9IG5hbWVzcGFjZVRhYmxlLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLQkJCi0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSkgaXRlci5uZXh0KCk7Ci0JCQlTdHJpbmcgbmFtZSA9ICJ4bWxuczoiICsgZW50cnkuZ2V0VmFsdWUoKTsJCQkKLQkJCWVudmVsb3BlLnNldEF0dHJpYnV0ZShuYW1lLCBlbnRyeS5nZXRLZXkoKS50b1N0cmluZygpKTsJCQkKLQkJfQotCQkKLQkJeG1sID0gbnVsbDsKLQl9Ci0JCi0JLyoKLQkgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uLCB0aGUgbmFtZXNwYWNlIHByZWZpeCBpcyByZXR1cm5lZC4KLQkgKiBPdGhlcndpc2UgbnVsbCBpcyByZXR1cm5lZC4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXROU1ByZWZpeChBdHRyIGF0dHJpYnV0ZSkgewotCQlTdHJpbmcgbmFtZSA9IGF0dHJpYnV0ZS5nZXROYW1lKCk7Ci0JCWlmIChuYW1lLnN0YXJ0c1dpdGgoInhtbG5zOiIpKQotCQkJcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDYpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0TmFtZXNwYWNlVGFibGUoKQotCSAqLwotCXB1YmxpYyBNYXAgZ2V0TmFtZXNwYWNlVGFibGUoKSB7Ci0JCQotCQlIYXNodGFibGUgbmFtZXNwYWNlVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQotCQlpZiAoZW52ZWxvcGUgIT0gbnVsbCkgewotCQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbnZlbG9wZS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpIGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgcHJlZml4ID0gZ2V0TlNQcmVmaXgoYXR0cmlidXRlKTsKLQkJCQlpZiAocHJlZml4ICE9IG51bGwpCi0JCQkJCW5hbWVzcGFjZVRhYmxlLnB1dChhdHRyaWJ1dGUuZ2V0VmFsdWUoKSwgcHJlZml4KTsKLQkJCX0JCQkKLQkJfQkJCi0JCQotCQlyZXR1cm4gbmFtZXNwYWNlVGFibGU7Ci0JfQotCQotCS8qCi0JICogQXBwZW5kcyBhIGNoaWxkIG5vZGUgdG8gYSBwYXJlbnQgbm9kZSwgdGFrZXMgY2FyZSBvZiBpbXBvcnRpbmcKLQkgKiB0aGUgY2hpbGQgbm9kZSBpZiBuZWNjZXNzYXJ5LgotCSAqLwotCXByaXZhdGUgdm9pZCBhcHBlbmROb2RlKE5vZGUgcGFyZW50LCBOb2RlIGNoaWxkKSB7Ci0JCWlmIChwYXJlbnQgPT0gbnVsbCB8fCBjaGlsZCA9PSBudWxsKQotCQkJcmV0dXJuOwotCQkKLQkJRG9jdW1lbnQgb3duZXIgPSBwYXJlbnQuZ2V0T3duZXJEb2N1bWVudCgpOwotCQkKLQkJaWYgKCFvd25lci5lcXVhbHMoY2hpbGQuZ2V0T3duZXJEb2N1bWVudCgpKSkKLQkJCWNoaWxkID0gb3duZXIuaW1wb3J0Tm9kZShjaGlsZCwgdHJ1ZSk7Ci0JCQotCQlwYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotCX0KLQkKLQkvKgotCSAqIEFkZHMgYW4gYXJyYXkgb2YgZWxlbWVudHMgdG8gdGhlIHBhcmVudCBlbGVtZW50IGFzIGNoaWxkIGVsZW1lbnRzLgotCSAqLwotCXByaXZhdGUgdm9pZCBhcHBlbmRDaGlsZHJlbihFbGVtZW50IHBhcmVudCwgRWxlbWVudFtdIGNoaWxkcmVuKSB7Ci0JCWlmIChwYXJlbnQgPT0gbnVsbCB8fCBjaGlsZHJlbiA9PSBudWxsKQotCQkJcmV0dXJuOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJaWYgKGNoaWxkcmVuW2ldID09IG51bGwpCi0JCQkJY29udGludWU7Ci0JCQlhcHBlbmROb2RlKHBhcmVudCwgY2hpbGRyZW5baV0pOwotCQl9Ci0JfQkJCi0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0RW52ZWxvcGUob3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0RW52ZWxvcGUoRWxlbWVudCBlbnZlbG9wZSkgewotCQlpZiAoZW52ZWxvcGUgPT0gbnVsbCkKLQkJCXRoaXMuZW52ZWxvcGUgPSBlbnZlbG9wZTsKLQkJZWxzZQotCQkJdGhpcy5lbnZlbG9wZSA9IChFbGVtZW50KSBlbnZlbG9wZS5jbG9uZU5vZGUoZmFsc2UpOwotCQkJCQkKLQkJeG1sID0gbnVsbDsKLQl9Ci0JCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEVudmVsb3BlKGJvb2xlYW4pCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0RW52ZWxvcGUoYm9vbGVhbiBkZWVwKSB7Ci0JCWlmICghZGVlcCkKLQkJCXJldHVybiBlbnZlbG9wZTsKLQkJCi0JCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJaWYgKGVudmVsb3BlID09IG51bGwpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQkKLQkJCUVsZW1lbnQgY2xvbmVkRW52ZWxvcGUgPSAoRWxlbWVudCkgZW52ZWxvcGUuY2xvbmVOb2RlKGZhbHNlKTsKLQkJCQotCQkJaWYgKGhlYWRlckNvbnRlbnQgIT0gbnVsbCAmJiBoZWFkZXJDb250ZW50Lmxlbmd0aCA+IDApCi0JCQkJYXBwZW5kTm9kZShjbG9uZWRFbnZlbG9wZSwgZ2V0SGVhZGVyKHRydWUpKTsKLQkJCQkKLQkJCWFwcGVuZE5vZGUoY2xvbmVkRW52ZWxvcGUsIGdldEJvZHkodHJ1ZSkpOwotCQkJCi0JCQlyZXR1cm4gY2xvbmVkRW52ZWxvcGU7CQotCQl9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEhlYWRlcihvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRIZWFkZXIoRWxlbWVudCBoZWFkZXIpIHsKLQkJaWYgKGhlYWRlciA9PSBudWxsKQotCQkJdGhpcy5oZWFkZXIgPSBudWxsOwkJCQotCQllbHNlCi0JCQl0aGlzLmhlYWRlciA9IChFbGVtZW50KSBoZWFkZXIuY2xvbmVOb2RlKGZhbHNlKTsKLQotCQl4bWwgPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRIZWFkZXIoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRIZWFkZXIoYm9vbGVhbiBkZWVwKSB7Ci0JCWlmICghZGVlcCkKLQkJCXJldHVybiBoZWFkZXI7Ci0JCQotCQlzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLQkJCWlmIChoZWFkZXIgPT0gbnVsbCkKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCQotCQkJRWxlbWVudCBjbG9uZWRIZWFkZXIgPSAoRWxlbWVudCkgaGVhZGVyLmNsb25lTm9kZShmYWxzZSk7Ci0JCQlhcHBlbmRDaGlsZHJlbihjbG9uZWRIZWFkZXIsIGhlYWRlckNvbnRlbnQpOwkJCQkKLQkJCXJldHVybiBjbG9uZWRIZWFkZXI7Ci0JCX0JCQkJCi0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEhlYWRlckNvbnRlbnQob3JnLnczYy5kb20uRWxlbWVudFtdKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRIZWFkZXJDb250ZW50KEVsZW1lbnRbXSBoZWFkZXJDb250ZW50KSB7Ci0JCXRoaXMuaGVhZGVyQ29udGVudCA9IGhlYWRlckNvbnRlbnQ7Ci0JCXhtbCA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEhlYWRlckNvbnRlbnQoKQotCSAqLwotCXB1YmxpYyBFbGVtZW50W10gZ2V0SGVhZGVyQ29udGVudCgpIHsKLQkJcmV0dXJuIGhlYWRlckNvbnRlbnQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEJvZHkob3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0Qm9keShFbGVtZW50IGJvZHkpIHsJCQotCQlpZiAoYm9keSA9PSBudWxsKQotCQkJdGhpcy5ib2R5ID0gbnVsbDsKLQkJZWxzZSB7Ci0JCQl0aGlzLmJvZHkgPSAoRWxlbWVudCkgYm9keS5jbG9uZU5vZGUoZmFsc2UpOwotCQkJCi0JCQlpZiAoIWNvbnRleHQuaXNEb2N1bWVudFN0eWxlKCkgJiYgZmF1bHQgPT0gbnVsbCkgewotCQkJCU5vZGVMaXN0IGNoaWxkRWxlbWVudHMgPSBib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0JCQkJaWYgKGNoaWxkRWxlbWVudHMuZ2V0TGVuZ3RoKCkgPiAwKQotCQkJCQl0aGlzLmJvZHkuYXBwZW5kQ2hpbGQoY2hpbGRFbGVtZW50cy5pdGVtKDApLmNsb25lTm9kZShmYWxzZSkpOwotCQkJfQotCQl9CQkKLQkJeG1sID0gbnVsbDsKLQl9Ci0JCQkJCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEJvZHkoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRCb2R5KGJvb2xlYW4gZGVlcCkgewotCQlpZiAoIWRlZXApCi0JCQlyZXR1cm4gYm9keTsKLQkJCi0JCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJaWYgKGJvZHkgPT0gbnVsbCkKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCi0JCQkvLyBjb3B5IHRoZSBycGMgd3JhcHBlciBlbGVtZW50IGFzIHdlbGwsIGlmIGFueQotCQkJRWxlbWVudCBjbG9uZWRCb2R5ID0gKEVsZW1lbnQpIGJvZHkuY2xvbmVOb2RlKHRydWUpOwkJCi0JCQkKLQkJCWlmIChmYXVsdCAhPSBudWxsKQotCQkJCWFwcGVuZE5vZGUoY2xvbmVkQm9keSwgZmF1bHQpOwotCQkJZWxzZSB7Ci0JCQkJRWxlbWVudCB0YXJnZXQgPSBjbG9uZWRCb2R5OwotCQkJCQotCQkJCS8vIGNoZWNrIGZvciBycGMgd3JhcHBlcgotCQkJCWlmIChjbG9uZWRCb2R5LmdldEZpcnN0Q2hpbGQoKSAhPSBudWxsKQotCQkJCQl0YXJnZXQgPSAoRWxlbWVudCkgY2xvbmVkQm9keS5nZXRGaXJzdENoaWxkKCk7Ci0JCQkJCi0JCQkJYXBwZW5kQ2hpbGRyZW4odGFyZ2V0LCBib2R5Q29udGVudCk7Ci0JCQl9Ci0JCQkJCi0JCQlyZXR1cm4gY2xvbmVkQm9keTsJCQotCQl9Ci0JfQotCQkJCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEJvZHlDb250ZW50KG9yZy53M2MuZG9tLkVsZW1lbnRbXSkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0Qm9keUNvbnRlbnQoRWxlbWVudFtdIGJvZHlDb250ZW50KSB7Ci0JCXRoaXMuYm9keUNvbnRlbnQgPSBib2R5Q29udGVudDsKLQkJaWYgKGJvZHlDb250ZW50ICE9IG51bGwpCi0JCQlmYXVsdCA9IG51bGw7Ci0JCXhtbCA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEJvZHlDb250ZW50KCkKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFtdIGdldEJvZHlDb250ZW50KCkgewotCQlyZXR1cm4gYm9keUNvbnRlbnQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEZhdWx0KG9yZy53M2MuZG9tLkVsZW1lbnQpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEZhdWx0KEVsZW1lbnQgZmF1bHQpIHsKLQkJdGhpcy5mYXVsdCA9IGZhdWx0OwotCQlpZiAoZmF1bHQgIT0gbnVsbCkgewotCQkJaWYgKGJvZHkgIT0gbnVsbCAmJiBib2R5LmdldEZpcnN0Q2hpbGQoKSAhPSBudWxsKQotCQkJCWJvZHkucmVtb3ZlQ2hpbGQoYm9keS5nZXRGaXJzdENoaWxkKCkpOwotCQkJYm9keUNvbnRlbnQgPSBudWxsOwotCQl9Ci0JCXhtbCA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEZhdWx0KCkKLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRGYXVsdCgpIHsKLQkJcmV0dXJuIGZhdWx0OwotCX0KLQkJCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjdG9YTUwoKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgU3RyaW5nIHRvWE1MKCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCWlmICh4bWwgPT0gbnVsbCkKLQkJCXhtbCA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKEVOVkVMT1BFLCB0aGlzKTsKLQkJcmV0dXJuIHhtbDsJCQotCX0JCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvVHJhbnNwb3J0RXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9UcmFuc3BvcnRFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNhYzJmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9UcmFuc3BvcnRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLS8qKgotICogQW4gZ2VuZXJhbCBwdXJwb3NlIGV4Y2VwdGlvbiB0byBpbmRpY2F0ZSBhIHByb2JsZW0gaGFzIG9jY3VycmVkIHdoZW4KLSAqIGludm9raW5nIGEgd2ViIHNlcnZpY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFuc3BvcnRFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xNTAyMjQ3MjMwNzI2MDIxNDAzTDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlIEEgbWVzc2FnZSBhYm91dCB0aGUgcHJvYmxlbSB0aGF0IG9jY3VycmVkLgotCSAqLwotCXB1YmxpYyBUcmFuc3BvcnRFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKLQkJc3VwZXIobWVzc2FnZSk7Ci0JfQotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yIHRoYXQgYWNjZXB0cyBhIG1lc3NhZ2UgYW5kIGEgY2F1c2UuCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UgQSBtZXNzYWdlIGFib3V0IHRoZSBwcm9ibGVtIHRoYXQgb2NjdXJyZWQuCi0JICogQHBhcmFtIGNhdXNlIFRoZSBjYXVzZSBmb3IgdGhpcyBleGNlcHRpb24uCi0JICovCi0JcHVibGljIFRyYW5zcG9ydEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGNhdXNlKSB7Ci0JCXN1cGVyKG1lc3NhZ2UsIGNhdXNlKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgdGhhdCBhY2NlcHRzIGEgY2F1c2UuCi0JICogCi0JICogQHBhcmFtIGNhdXNlIFRoZSBjYXVzZSBmb3IgdGhpcyBleGNlcHRpb24uCi0JICovCi0JcHVibGljIFRyYW5zcG9ydEV4Y2VwdGlvbihUaHJvd2FibGUgY2F1c2UpIHsKLQkJc3VwZXIoY2F1c2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy9leHBsb3Jlci5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2V4cGxvcmVyLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0OTJjNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2V4cGxvcmVyLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1USVRMRV9XU0VYUExPUkVSPVdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCi0jIFRyZWUgTm9kZXMKLUFMVF9PUEVOPU9wZW4KLUFMVF9DTE9TRT1DbG9zZQotCi0jIFBlcnNwZWN0aXZlIFRvb2xiYXIKLUFMVF9CQUNLPUJhY2sKLUFMVF9GT1JXQVJEPUZvcndhcmQKLUFMVF9BQ1RJT05fRU5HSU5FPUFjdGlvbiBSZWNvcmRlcgotQUxUX1VERElfUEVSU1BFQ1RJVkU9VURESSBQYWdlCi1BTFRfV1NJTF9QRVJTUEVDVElWRT1XU0lMIFBhZ2UKLUFMVF9XU0RMX1BFUlNQRUNUSVZFPVdTREwgUGFnZQotQUxUX0ZBVk9SSVRFU19QRVJTUEVDVElWRT1GYXZvcml0ZXMKLQotIyBUb29sYmFycwotQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRT1Eb3VibGUgQ2xpY2sgdG8gTWF4aW1pemUKLUFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRT1Eb3VibGUgQ2xpY2sgdG8gUmVzdG9yZQotCi0jIFNldERlZmF1bHRWaWV3VG9vbAotQUxUX0JBQ0tfVE9fVE9QPUJhY2sgdG8gdG9wCi0KLSMgQ29tbW9uIEFjdGlvbnMKLUFMVF9SRUZSRVNIPVJlZnJlc2gKLUFMVF9DTEVBUj1DbGVhcgotQUxUX1JFU1VMVFM9UmVzdWx0cwotCi0jIENvbW1vbiBMYWJlbHMKLUFMVF9OQVZJR0FUT1I9TmF2aWdhdG9yCi1BTFRfQUNUSU9OUz1BY3Rpb25zCi1BTFRfU1RBVFVTPVN0YXR1cwotQUxUX09USEVSX0FDVElPTlM9T3RoZXIgQWN0aW9ucwotRk9STV9CVVRUT05fR089Jm5ic3A7Jm5ic3A7R28mbmJzcDsmbmJzcDsKLUZPUk1fQlVUVE9OX1JFU0VUPVJlc2V0Ci1GT1JNX0JVVFRPTl9DQU5DRUw9Q2FuY2VsCi1GT1JNX0xBQkVMX0FDVElPTlM9QWN0aW9ucwotRk9STV9MQUJFTF9BQ1RJT05TX05PTkU9Tm9uZQotCi0jIFBsYWNlaG9sZGVyIGZvciBibGFuayB0YWJsZSBlbnRyaWVzCi1UQUJMRV9CTEFOS19QTEFDRUhPTERFUj0tLQotCi0jIENvbW1vbiBGb3JtIENvbnRyb2wgVGl0bGVzCi1GT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1g9U2VsZWN0IGFsbAotRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YPVNlbGVjdCByb3cKLQotIyBDb21tb24gTWVzc2FnZXMKLU1TR19FUlJPUl9VTkVYUEVDVEVEPUlXQUIwMTM1RSBBbiB1bmV4cGVjdGVkIGVycm9yIGhhcyBvY2N1cnJlZC4KLU1TR19FUlJPUl9OT19BQ1RJT05fU0VMRUNURUQ9SVdBQjAxMjRFIFNlbGVjdCBhbiBhY3Rpb24uCi1NU0dfRVJST1JfTk9fTk9ERV9TRUxFQ1RFRD1JV0FCMDEyNUUgU2VsZWN0IGEgbm9kZS4KLU1TR19TVUJNSVRfSU5fUFJPR1JFU1M9UGxlYXNlIHdhaXQuIFRoZSBvcGVyYXRpb24gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCi1NU0dfTE9BRF9JTl9QUk9HUkVTUz1QbGVhc2Ugd2FpdCB3aGlsZSB0aGUgZm9ybSBsb2Fkcy4uLgotCi0jTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbgotQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQ9TGF1bmNoIFdlYiBTZXJ2aWNlIFdpemFyZAotRk9STV9MQUJFTF9DSE9PU0VfV0laQVJEPVNlbGVjdCBhIHdpemFyZCB0byBsYXVuY2g6Ci1GT1JNX1JBRElPX1dFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQ9V2ViIFNlcnZpY2UgQ2xpZW50Ci1GT1JNX1JBRElPX1dFQl9TRVJWSUNFX1NLRUxFVE9OX1dJWkFSRD1XZWIgU2VydmljZSBTa2VsZXRvbgotTVNHX0VSUk9SX1dJWkFSRF9BTFJFQURZX1JVTk5JTkc9SVdBQjAxMjZFIEEgV2ViIHNlcnZpY2Ugd2l6YXJkIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuICBGaW5pc2ggd2l0aCB0aGUgZXhpc3Rpbmcgd2l6YXJkIGJlZm9yZSBsYXVuY2hpbmcgYSBuZXcgb25lLgotTVNHX0VSUk9SX1dTRExfVVJMX0lTX1VOUkVBQ0hBQkxFPUlXQUIwMTI3RSBUaGUgV1NETCBkb2N1bWVudCBpcyB1bnJlYWNoYWJsZS4KLQotIyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24KLUFMVF9XU0lMX0lNUE9SVF9UT19GUz1JbXBvcnQgV1NJTCBUbyBGaWxlIFN5c3RlbQotQUxUX1dTRExfSU1QT1JUX1RPX0ZTPUltcG9ydCBXU0RMIFRvIEZpbGUgU3lzdGVtCi1NU0dfRVJST1JfUkVUUklFVklOR19XU0RMX0RPQz1JV0FCMDEyOEUgVW5hYmxlIHRvIHJldHJpZXZlIFdTREwgZG9jdW1lbnQuCi1NU0dfRVJST1JfUkVUUklFVklOR19XU0lMX0RPQz1JV0FCMDEyOUUgVW5hYmxlIHRvIHJldHJpZXZlIFdTSUwgZG9jdW1lbnQuCi1NU0dfSU1QT1JUX1dTRExfU1VDQ0VTU0ZVTD1XU0RMIGRvY3VtZW50IHN1Y2Nlc3NmdWxseSBpbXBvcnRlZC4KLU1TR19JTVBPUlRfV1NJTF9TVUNDRVNTRlVMPVdTSUwgZG9jdW1lbnQgc3VjY2Vzc2Z1bGx5IGltcG9ydGVkLgotCi0jIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uCi1BTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIPUltcG9ydCBXU0RMIFRvIHdvcmtiZW5jaAotRk9STV9MQUJFTF9JTVBPUlRfVE9fV09SS0JFTkNIX0RFU0M9U2VsZWN0IGEgd29ya2JlbmNoIHByb2plY3QgdG8gc2F2ZSB0aGUgV1NETCBmaWxlIGludG8uIFlvdSBtYXkgYWxzbyBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZS4KLVdFQl9QUk9KRUNUX05BTUU9V2ViIHByb2plY3Q6Ci1XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FPVdvcmtiZW5jaCBwcm9qZWN0OgotTEFCRUxfSU1QT1JUX1dTREw9SW1wb3J0IFdTREwgZG9jdW1lbnQKLUxBQkVMX0lNUE9SVF9UT19XU0lMPUltcG9ydCBhcyBhIHNlcnZpY2UgcmVmZXJlbmNlIHRvIGEgV1NJTCBkb2N1bWVudAotSU1QT1JURURfV1NETF9GSUxFX05BTUU9V1NETCBmaWxlIG5hbWU6Ci1XU0lMX0ZJTEVfTkFNRT1XU0lMIGZpbGUgbmFtZToKLU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRD1DYW5ub3QgY3JlYXRlIHRoZSBmaWxlICIlMiIgcmVsYXRpdmUgdG8gdGhlIHBhdGggIiUxIiBiZWNhdXNlIGF1dG9tYXRpYyBmaWxlIG92ZXJ3cml0aW5nIGhhcyBub3QgYmVlbiBlbmFibGVkLiBEbyB5b3Ugd2FudCB0byBlbmFibGUgaXQgZm9yIHRoaXMgZmlsZT8KLU1TR19FUlJPUl9JTlZBTElEX1dPUktCRU5DSF9QUk9KRUNUPUlXQUIwMTMwRSBTZWxlY3QgYSB3b3JrYmVuY2ggcHJvamVjdC4KLU1TR19FUlJPUl9JTlZBTElEX1dTRExfRklMRV9OQU1FPUlXQUIwMTMxRSBJbnZhbGlkIGZpbGUgbmFtZS4KLU1TR19FUlJPUl9JTlZBTElEX1dTSUxfRklMRV9OQU1FPUlXQUIwNDcwRSBJbnZhbGlkIFdTSUwgZmlsZSBuYW1lLgotTVNHX0VSUk9SX05PX0lNUE9SVF9PUFRJT05fU0VMRUNURUQ9SVdBQjA0NzFFIE5vIGltcG9ydCBvcHRpb24gaXMgc2VsZWN0ZWQuICBQbGVhc2UgY2hvb3NlIGF0IGxlYXN0IG9uZSBpbXBvcnQgb3B0aW9uLgotTVNHX0VSUk9SX1dSSVRJTkdfVEVNUF9GSUxFX1RPX0ZTPUlXQUIwMTMyRSBVbmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGUuCi1NU0dfSU5GT19JTVBPUlRfVE9fV09SS0JFTkNIX1NVQ0NFU1NGVUw9SVdBQjAzMTRJICUxIHdhcyBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgdG8gdGhlIHdvcmtiZW5jaC4KLU1TR19JTkZPX0lNUE9SVF9TRVJWSUNFX1JFRl9UT19XU0lMX1NVQ0NFU1NGVUw9SVdBQjA0NzJJIFNlcnZpY2UgcmVmZXJlbmNlIHdhcyBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgdG8gJTEuCi0KLSMgQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb24KLU1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVEPUNhbm5vdCBjcmVhdGUgdGhlIGZpbGUgIiUyIiByZWxhdGl2ZSB0byB0aGUgcGF0aCAiJTEiIGJlY2F1c2UgYXV0b21hdGljIGZpbGUgY2hlY2sgb3V0IGhhcyBub3QgYmVlbiBlbmFibGVkLiBEbyB5b3Ugd2FudCB0byBlbmFibGUgaXQgZm9yIHRoaXMgZmlsZT8KLQotIyBDbGVhck5vZGVBY3Rpb24KLU1TR19JTkZPX05PREVfQ0xFQVJFRD1JV0FCMDEzM0kgJTEgY2xlYXJlZC4KLQotIyBUYWJsZSB0d2lzdGVlcwotQUxUX1RXSVNUX09QRU5FRD1IaWRlCi1BTFRfVFdJU1RfQ0xPU0VEPUV4cGFuZAotCi0jIFdTREwgQnJvd3NlcgotRk9STV9MSU5LX0JST1dTRT1Ccm93c2UuLi4KLVRJVExFX1dTRExfQlJPV1NFUj1XU0RMIEJyb3dzZXIgLSAlMQotRk9STV9MQUJFTF9XU0RMX1NPVVJDRT1TZWxlY3QgYSBXU0RMIHNvdXJjZToKLUZPUk1fTEFCRUxfV1NETF9DQVRFR09SWT1DYXRlZ29yeQotRk9STV9MQUJFTF9XU0RMX0FsbD1BbGwKLUZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfV0VCUFJPSkVDVFM9V29ya3NwYWNlIFByb2plY3RzCi1GT1JNX0xBQkVMX1dTRExfU09VUkNFX0ZBVk9SSVRFUz1GYXZvcml0ZXMKLUZPUk1fTEFCRUxfV0VCX1BST0pFQ1Q9V29ya3NwYWNlIFByb2plY3QKLUZPUk1fTEFCRUxfV1NETF9VUkw9V1NETCBVUkwKLUZPUk1fQlVUVE9OX1JFRlJFU0g9UmVmcmVzaAotQUxUX1dTRExfQlJPV1NFUj1XU0RMIEJyb3dzZXIKLVdTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRVM9U2VydmljZSBJbnRlcmZhY2VzCi1XU0RMX1RZUEVfU0VSVklDRVM9U2VydmljZXMKLQotIyBDYWxlbmRhciBCcm93c2VyCi1USVRMRV9DQUxFTkRBUl9CUk9XU0VSPUNhbGVuZGFyIEJyb3dzZXIKLSMgMiBjaGFyYWN0ZXIgYWJicmV2aWF0aW9ucyBmb3IgZGF5cyBvZiB0aGUgd2Vlay4KLUZPUk1fTEFCRUxfU0hfU1VOREFZPVN1Ci1GT1JNX0xBQkVMX1NIX01PTkRBWT1NbwotRk9STV9MQUJFTF9TSF9UVUVTREFZPVR1Ci1GT1JNX0xBQkVMX1NIX1dFRE5FU0RBWT1XZQotRk9STV9MQUJFTF9TSF9USFVSU0RBWT1UaAotRk9STV9MQUJFTF9TSF9GUklEQVk9RnIKLUZPUk1fTEFCRUxfU0hfU0FUVVJEQVk9U2EKLSMgTW9udGhzIG9mIHRoZSB5ZWFyCi1GT1JNX0xBQkVMX01PTlRIPU1vbnRoOgotRk9STV9MQUJFTF9KQU5VQVJZPUphbnVhcnkKLUZPUk1fTEFCRUxfRkVCUlVBUlk9RmVicnVhcnkKLUZPUk1fTEFCRUxfTUFSQ0g9TWFyY2gKLUZPUk1fTEFCRUxfQVBSSUw9QXByaWwKLUZPUk1fTEFCRUxfTUFZPU1heQotRk9STV9MQUJFTF9KVU5FPUp1bmUKLUZPUk1fTEFCRUxfSlVMWT1KdWx5Ci1GT1JNX0xBQkVMX0FVR1VTVD1BdWd1c3QKLUZPUk1fTEFCRUxfU0VQVEVNQkVSPVNlcHRlbWJlcgotRk9STV9MQUJFTF9PQ1RPQkVSPU9jdG9iZXIKLUZPUk1fTEFCRUxfTk9WRU1CRVI9Tm92ZW1iZXIKLUZPUk1fTEFCRUxfREVDRU1CRVI9RGVjZW1iZXIKLUZPUk1fTEFCRUxfWUVBUj1ZZWFyOgotRk9STV9MQUJFTF9USU1FPVRpbWU6Ci1GT1JNX0xJTktfVE9EQVk9VG9kYXkKLUZPUk1fTElOS19QUkVWSU9VU19ZRUFSPTw8Ci1GT1JNX0xJTktfUFJFVklPVVNfTU9OVEg9PAotRk9STV9MSU5LX05FWFRfTU9OVEg9PgotRk9STV9MSU5LX05FWFRfWUVBUj0+PgotQUxUX1BSRVZJT1VTX1lFQVI9UHJldmlvdXMgWWVhcgotQUxUX1BSRVZJT1VTX01PTlRIPVByZXZpb3VzIE1vbnRoCi1BTFRfTkVYVF9NT05USD1OZXh0IE1vbnRoCi1BTFRfTkVYVF9ZRUFSPU5leHQgWWVhcgotQUxUX1RPREFZPVRvZGF5Ci1BTFRfQ0FMRU5EQVJfQlJPV1NFUj1DYWxlbmRhciBCcm93c2VyCi1NU0dfRVJST1JfSU5WQUxJRF9USU1FX0ZPUk1BVD1JV0FCMDM2OEUgVGltZSB3YXMgbm90IGZvcm1hdHRlZCBhcyBISDpNTTpTU1suU1NTXS4gRG8geW91IHdpc2ggdG8gdXNlIHRoZSBjdXJyZW50IHRpbWUgaW5zdGVhZD8KLQotIyBBY3Rpb24gZW5naW5lCi1USVRMRV9BQ1RJT05fUkVDT1JERVI9QWN0aW9uIFJlY29yZGVyCi1GT1JNX0xBQkVMX01PREU9TW9kZToKLUZPUk1fTEFCRUxfTU9ERV9QTEFZPVBsYXkKLUZPUk1fTEFCRUxfTU9ERV9TVE9QPVN0b3AKLUZPUk1fTEFCRUxfTU9ERV9SRUNPUkQ9UmVjb3JkCi1GT1JNX0xBQkVMX1NBVkU9U2F2ZQotRk9STV9MQUJFTF9QTEFZX0ZJTEU9UGxheSBmaWxlOgotTVNHX0VSUk9SX0lOVkFMSURfUExBWV9GSUxFPUlXQUIwMzYyRSBFbnRlciBhIHBsYXkgZmlsZS4KLQotIyBGcmFtZSB0aXRsZXMKLUZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1dPUktBUkVBPVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBJbnRlcm5hbCBXb3JrIEFyZWEKLUZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1RPT0xCQVI9V2ViIFNlcnZpY2VzIEV4cGxvcmVyIFRvb2xiYXIKLUZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX0NPTlRFTlQ9V2ViIFNlcnZpY2VzIEV4cGxvcmVyIFBhZ2UgQ29udGVudAotRlJBTUVfVElUTEVfV1NETF9UT09MQkFSPVdTREwgQnJvd3NlciBUb29sYmFyCi1GUkFNRV9USVRMRV9XU0RMX0NPTlRFTlQ9V1NETCBCcm93c2VyIENvbnRlbnQKLQotIyBGb3JtIHRpdGxlcwotRk9STV9USVRMRV9QQUdFX0xPQURFUj1QYWdlIExvYWRlcgotRk9STV9USVRMRV9QQUdFX0NPTlRFTlQ9TG9hZGVkIFBhZ2UgQ29udGVudAotRk9STV9USVRMRV9MQVVOQ0hfV0VCU0VSVklDRV9XSVpBUkQ9TGF1bmNoIFdlYiBTZXJ2aWNlIFdpemFyZCBGb3JtCi1GT1JNX1RJVExFX0lNUE9SVF9UT19XT1JLQkVOQ0g9SW1wb3J0IHRvIFdvcmtiZW5jaCBGb3JtCi0KLSMgU2Vzc2lvblRpbWVkT3V0IG1lc3NhZ2UKLU1TR19FUlJPUl9TRVNTSU9OX1RJTUVEX09VVD1UaGlzIHNlc3Npb24gb2YgV2ViIFNlcnZpY2UgRXhwbG9yZXIgaGFzIHRpbWVkIG91dCBhZnRlciAzMCBtaW51dGVzIG9mIGluYWN0aXZpdHkgdG8gZnJlZSB1cCBtZW1vcnkgcmVzb3VyY2VzLgotTVNHX0VSUk9SX1JFU1RBUlRfU0VTU0lPTj1SZWxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgdG8gdGVzdCB5b3VyIFdlYiBzZXJ2aWNlLgotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvZmF2b3JpdGVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvZmF2b3JpdGVzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzOTg4ZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2Zhdm9yaXRlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotdGl0bGU9RmF2b3JpdGVzCi0KLSMgTmF2aWdhdG9yCi1GQVZPUklURVNfTUFJTl9OT0RFPUZhdm9yaXRlcyBNYWluCi1GQVZPUklURVNfV1NJTF9GT0xERVJfTk9ERT1GYXZvcml0ZSBXU0lMcwotRkFWT1JJVEVTX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERT1GYXZvcml0ZSBXU0RMIFNlcnZpY2VzCi1GQVZPUklURVNfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFVEREkgU2VydmljZXMKLUZBVk9SSVRFU19VRERJX0JVU0lORVNTRVNfRk9MREVSX05PREU9RmF2b3JpdGUgVURESSBCdXNpbmVzc2VzCi1GQVZPUklURVNfVURESV9TRVJWSUNFX0lOVEVSRkFDRVNfRk9MREVSX05PREU9RmF2b3JpdGUgVURESSBTZXJ2aWNlIEludGVyZmFjZXMKLUZBVk9SSVRFU19VRERJX1JFR0lTVFJJRVNfRk9MREVSX05PREU9RmF2b3JpdGUgVURESSBSZWdpc3RyaWVzCi1GQVZPUklURVNfVVNFUl9ERUZfVURESV9SRUdJU1RSSUVTX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFVzZXIgRGVmaW5lZCBVRERJIFJlZ2lzdHJpZXMKLQotIyBGb3JtCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1dTSUw9RmF2b3JpdGUgV1NJTHMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfV1NETD1GYXZvcml0ZSBXU0RMcwotRk9STV9MQUJFTF9GQVZPUklURV9VRERJX1JFR0lTVFJZPUZhdm9yaXRlIFVEREkgUmVnaXN0cmllcwotRk9STV9MQUJFTF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZPUZhdm9yaXRlIFVzZXIgRGVmaW5lZCBVRERJIFJlZ2lzdHJpZXMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9TRVJWSUNFPUZhdm9yaXRlIFVEREkgU2VydmljZXMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9CVVNJTkVTUz1GYXZvcml0ZSBVRERJIEJ1c2luZXNzIEVudGl0aWVzCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfU0VSVklDRV9JTlRFUkZBQ0U9RmF2b3JpdGUgVURESSBTZXJ2aWNlIEludGVyZmFjZXMKLUZPUk1fTEFCRUxfUkVNT1ZFPVJlbW92ZQotRk9STV9MQUJFTF9JTVBPUlRfVE9fV1NJTF9QRVJTUEVDVElWRT1BZGQgVG8gV1NJTCBQYWdlCi1GT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFPUFkZCBUbyBVRERJIFBhZ2UKLUZPUk1fTEFCRUxfSU1QT1JUX1RPX1dTRExfUEVSU1BFQ1RJVkU9QWRkIFRvIFdTREwgUGFnZQotRk9STV9MQUJFTF9VUkw9VVJMCi1GT1JNX0xBQkVMX0lURU1fTlVNQkVSPUl0ZW0gIwotRk9STV9MQUJFTF9VRERJX1ZFUlNJT049VURESSBWZXJzaW9uCi1GT1JNX0xBQkVMX05BTUU9TmFtZQotRk9STV9MQUJFTF9ERVNDPURlc2NyaXB0aW9uCi1GT1JNX0xBQkVMX0RFRkFVTFRfTE9HSU49RGVmYXVsdCBMb2dpbgotRk9STV9MQUJFTF9ERUZBVUxUX1BBU1NXT1JEPURlZmF1bHQgUGFzc3dvcmQKLUZPUk1fTEFCRUxfSU5RVUlSWV9VUkw9SW5xdWlyeSBVUkwKLUZPUk1fTEFCRUxfUFVCTElTSF9VUkw9UHVibGlzaCBVUkwKLUZPUk1fTEFCRUxfU0VDVVJFX0lOUVVJUllfVVJMPVNlY3VyZSBJbnF1aXJ5IFVSTAotRk9STV9MQUJFTF9TRUNVUkVfUFVCTElTSF9VUkw9U2VjdXJlIFB1Ymxpc2ggVVJMCi1GT1JNX0xBQkVMX1RBWE9OT01ZPVRheG9ub215Ci1GT1JNX0xBQkVMX0xBTkdVQUdFPUxhbmd1YWdlCi1GT1JNX0xBQkVMX1JFR0lTVFJZX05BTUU9UmVnaXN0cnkgTmFtZQotRk9STV9MQUJFTF9CVVNJTkVTU19OQU1FPUJ1c2luZXNzIE5hbWUKLUZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZPUJ1c2luZXNzIEtleQotRk9STV9MQUJFTF9TRVJWSUNFX05BTUU9U2VydmljZSBOYW1lCi1GT1JNX0xBQkVMX1NFUlZJQ0VfS0VZPVNlcnZpY2UgS2V5Ci1GT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFX05BTUU9U2VydmljZSBJbnRlcmZhY2UgTmFtZQotRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9LRVk9U2VydmljZSBJbnRlcmZhY2UgS2V5Ci1GT1JNX0xBQkVMX1JFR0lTVFJZX1VSTD08YSBocmVmPSIlMSIgdGFyZ2V0PSJfYmxhbmsiPkNsaWNrIGhlcmU8L2E+IHRvIG9idGFpbiBhIHVzZXIgSUQgYW5kIHBhc3N3b3JkIGZvciB0aGlzIHJlZ2lzdHJ5LgotRk9STV9MQUJFTF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFUz1EYXRhIGZpbGVzIGZvciBVc2VyIERlZmluZWQgQ2F0ZWdvcmllcwotTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQ9SVdBQjAzMTVFIFNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbS4KLQotIyBMaXN0RmF2b3JpdGVXU0lMQWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9XU0lMPUxpc3QgRmF2b3JpdGUgV1NJTHMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9XU0lMX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFdTSUwgbGlua3MgYW5kIHByZXNzIDxzdHJvbmc+QWRkIHRvIFdTSUwgUGFnZTwvc3Ryb25nPiB0byBvcGVuIHRoZW0gaW4gdGhlIFdTSUwgbmF2aWdhdG9yLiBQcmVzcyA8c3Ryb25nPlJlbW92ZTwvc3Ryb25nPiB0byByZW1vdmUgdGhlIHNlbGVjdGlvbnMuCi0KLSMgTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1dTRExfU0VSVklDRT1MaXN0IEZhdm9yaXRlIFdTREwgU2VydmljZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9XU0RMX1NFUlZJQ0VfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgV1NETCBzZXJ2aWNlcyBhbmQgcHJlc3MgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4gdG8gcmVtb3ZlIHRoZW0uCi0KLSMgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRT1MaXN0IEZhdm9yaXRlIFVEREkgU2VydmljZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgVURESSBzZXJ2aWNlcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1VERElfQlVTSU5FU1M9TGlzdCBGYXZvcml0ZSBVRERJIEJ1c2luZXNzZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX0JVU0lORVNTX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFVEREkgYnVzaW5lc3NlcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1VERElfUkVHSVNUUlk9TGlzdCBGYXZvcml0ZSBVRERJIFJlZ2lzdHJpZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1JFR0lTVFJZX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFVEREkgcmVnaXN0cmllcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5QWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZPUxpc3QgRmF2b3JpdGUgVXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cmllcwotRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgVURESSByZWdpc3RyaWVzIGFuZCBwcmVzcyA8c3Ryb25nPkFkZCB0byBVRERJIFBhZ2U8L3N0cm9uZz4gdG8gb3BlbiB0aGVtIGluIHRoZSBVRERJIG5hdmlnYXRvci4KLQotIyBMaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZUFjdGlvbgotQUxUX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRT1MaXN0IEZhdm9yaXRlIFVEREkgU2VydmljZSBJbnRlcmZhY2VzCi1GT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDPVNlbGVjdCBhIHNldCBvZiBmYXZvcml0ZSBVRERJIHNlcnZpY2UgaW50ZXJmYWNlcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBGYXZvcml0ZXNXU0lMRGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19XU0lMX0RFVEFJTFM9RmF2b3JpdGUgV1NJTCBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzV1NETERldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfV1NETF9ERVRBSUxTPUZhdm9yaXRlIFdTREwgRGV0YWlscwotCi0jIEZhdm9yaXRlc1VERElSZWdpc3RyeURldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfVURESV9SRUdJU1RSWV9ERVRBSUxTPUZhdm9yaXRlIFVEREkgUmVnaXN0cnkgRGV0YWlscwotCi0jIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVUQUlMUz1GYXZvcml0ZSBVc2VyIERlZmluZWQgVURESSBSZWdpc3RyeSBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19VRERJX0JVU0lORVNTX0RFVEFJTFM9RmF2b3JpdGUgVURESSBCdXNpbmVzcyBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9ERVRBSUxTPUZhdm9yaXRlIFVEREkgU2VydmljZSBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUz1GYXZvcml0ZSBVRERJIFNlcnZpY2UgSW50ZXJmYWNlIERldGFpbHMKLQotIyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfV1NJTF9UT19XU0lMX1BFUlNQRUNUSVZFPUFkZCB0byBXU0lMIFBhZ2UKLU1TR19FUlJPUl9XU0lMX0FMUkVBRFlfT1BFTkVEPUlXQUIwMzE2RSAlMSBpcyBhbHJlYWR5IG9wZW5lZCBpbiBXU0lMIFBhZ2UuCi1NU0dfSU5GT19BRERfV1NJTF9UT19XU0lMX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUw9SVdBQjAzMTdJICUxIGlzIGFkZGVkIHRvIFdTSUwgUGFnZS4KLU1TR19FUlJPUl9BRERfV1NJTF9UT19XU0lMX1BFUlNQRUNUSVZFPUlXQUIwMzE4RSBXU0lMICUxIGNvdWxkIG5vdCBiZSBsb2FkZWQuCi0KLSMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfVE9fVURESV9QRVJTUEVDVElWRT1BZGQgdG8gVURESSBQYWdlCi1NU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkU9SVdBQjAzMjBFICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi1NU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMPUlXQUIwMzIxSSAlMSBpcyBhZGRlZCB0byBVRERJIFBhZ2UuCi0KLSMgRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFPUFkZCB0byBXU0RMIFBhZ2UKLU1TR19JTkZPX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTD1JV0FCMDM2OUkgJTEgaXMgYWRkZWQgdG8gV1NETCBQYWdlLgotTVNHX0VSUk9SX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkU9SVdBQjAzNzBFIFdTREwgJTEgY291bGQgbm90IGJlIGxvYWRlZC4KLQotIyBSZW1vdmVGYXZvcml0ZUFjdGlvbgotQUxUX1JFTU9WRV9GQVZPUklURT1SZW1vdmUgRmF2b3JpdGUKLU1TR19DT05GSVJNX1JFTU9WRV9OT0RFPSUxIGlzIG5vIGxvbmdlciByZXNvbHZhYmxlLiAgRG8geW91IHdpc2ggdG8gY2xlYXIgaXQ/Ci0KLSMgRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24KLUFMVF9SRVNUT1JFX0RFRkFVTFRfRkFWT1JJVEVTPVJlc3RvcmUgRGVmYXVsdCBGYXZvcml0ZXMKLU1TR19DT05GSVJNX1JFU1RPUkVfREVGQVVMVF9GQVZPUklURVM9VGhpcyBvcGVyYXRpb24gd2lsbCBvdmVyd3JpdGUgdGhlIGN1cnJlbnQgZmF2b3JpdGVzLiAgRG8geW91IHdpc2ggdG8gY29udGludWU/Ci1NU0dfRVJST1JfT1BFTl9GQVZPUklURVNfQkFDS1VQPUlXQUIwMTM0RSBVbmFibGUgdG8gbG9hZCB0aGUgZGVmYXVsdCBmYXZvcml0ZXMuCi1NU0dfSU5GT19GQVZPUklURVNfUkVTVE9SRURfVE9fREVGQVVMVD1JV0FCMDMyMkkgRGVmYXVsdCBGYXZvcml0ZXMgYXJlIHJlc3RvcmVkLgotTVNHX0VSUk9SX1NBVkVfRkFWT1JJVEVTX1dTSUw9SVdBQjAxODZFIFVuYWJsZSB0byBzYXZlIGZhdm9yaXRlcyB0byAlMS4KLQotIyBGcmFtZSB0aXRsZXMKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVI9TmF2aWdhdG9yIENvbnRhaW5lcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVI9TmF2aWdhdG9yIFRvb2xiYXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UPU5hdmlnYXRvciBDb250ZW50Ci1GUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUj1BY3Rpb25zIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVI9UHJvcGVydGllcyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVD1Qcm9wZXJ0aWVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUj1Qcm9wZXJ0aWVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVI9U3RhdHVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQ9U3RhdHVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSPVN0YXR1cyBUb29sYmFyCi0KLSMgRm9ybSB0aXRsZXMKLUZPUk1fVElUTEVfVURESV9CVVNJTkVTU19ERVRBSUxTPVVEREkgQnVzaW5lc3MgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VERElfUkVHSVNUUllfREVUQUlMUz1VRERJIFJlZ2lzdHJ5IERldGFpbHMgRm9ybQotRk9STV9USVRMRV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFVEFJTFM9VXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cnkgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VERElfU0VSVklDRV9ERVRBSUxTPVVEREkgU2VydmljZSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTPVVEREkgU2VydmljZSBJbnRlcmZhY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1dTRExfREVUQUlMUz1XU0RMIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0lMX0RFVEFJTFM9V1NJTCBEZXRhaWxzIEZvcm0KLQotIyBWaWV3IHRpdGxlcwotVklFV19USVRMRV9VRERJX0JVU0lORVNTX0xJU1Q9VURESSBCdXNpbmVzc2VzIExpc3QgVmlldwotVklFV19USVRMRV9VRERJX1JFR0lTVFJZX0xJU1Q9VURESSBSZWdpc3RyaWVzIExpc3QgVmlldwotVklFV19USVRMRV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0xJU1Q9VXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cmllcyBMaXN0IFZpZXcKLVZJRVdfVElUTEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9MSVNUPVVEREkgU2VydmljZSBJbnRlcmZhY2VzIExpc3QgVmlldwotVklFV19USVRMRV9VRERJX1NFUlZJQ0VfTElTVD1VRERJIFNlcnZpY2VzIExpc3QgVmlldwotVklFV19USVRMRV9XU0RMX1NFUlZJQ0VfTElTVD1XU0RMIFNlcnZpY2VzIExpc3QgVmlldwotVklFV19USVRMRV9XU0lMX0xJU1Q9V1NJTCBMaW5rcyBMaXN0IFZpZXcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy91ZGRpLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvdWRkaS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTNhNjE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy91ZGRpLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi10aXRsZT1VRERJCi0KLSMgTm9kZXMKLU5PREVfTkFNRV9VRERJX01BSU49VURESSBNYWluCi1OT0RFX05BTUVfUVVFUklFU19GT0xERVI9RXhlY3V0ZWQgUXVlcmllcwotTk9ERV9OQU1FX1BVQkxJU0hFRF9CVVNJTkVTU0VTX0ZPTERFUj1QdWJsaXNoZWQgQnVzaW5lc3NlcwotTk9ERV9OQU1FX1BVQkxJU0hFRF9TRVJWSUNFU19GT0xERVI9UHVibGlzaGVkIFNlcnZpY2VzCi1OT0RFX05BTUVfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19GT0xERVI9UHVibGlzaGVkIFNlcnZpY2UgSW50ZXJmYWNlcwotCi0jIE9wZW5SZWdpc3RyeUFjdGlvbgotQUxUX09QRU5fUkVHSVNUUlk9T3BlbiBSZWdpc3RyeQotRk9STV9MQUJFTF9PUEVOX1JFR0lTVFJZX0RFU0M9U3BlY2lmeSB0aGUgbmFtZSBhbmQgaW5xdWlyeSBVUkwgb2YgdGhlIHJlZ2lzdHJ5IHRvIGJlIG9wZW5lZC4gU2VsZWN0aW5nIGEgZmF2b3JpdGUgcmVnaXN0cnkgd2lsbCBhdXRvbWF0aWNhbGx5IGZpbGwgaW4gdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIG9wZW4gdGhlIHJlZ2lzdHJ5LgotRk9STV9MQUJFTF9GQVZPUklURV9SRUdJU1RSWT1GYXZvcml0ZSBSZWdpc3RyeQotRk9STV9MQUJFTF9SRUdJU1RSWV9OQU1FPVJlZ2lzdHJ5IE5hbWUKLUZPUk1fTEFCRUxfSU5RVUlSWV9VUkw9SW5xdWlyeSBVUkwKLU1TR19FUlJPUl9JTlZBTElEX1JFR0lTVFJZX05BTUU9SVdBQjAxMzZFIEVudGVyIGEgdmFsaWQgcmVnaXN0cnkgbmFtZS4KLU1TR19FUlJPUl9JTlZBTElEX0lOUVVJUllfVVJMPUlXQUIwMTM4RSBFbnRlciBhIHZhbGlkIGlucXVpcnkgVVJMLgotTVNHX0lORk9fUkVHSVNUUllfT1BFTkVEPUlXQUIwMTM5SSBUaGUgcmVnaXN0cnkgbmFtZWQgJTEgbG9jYXRlZCBhdCAlMiB3YXMgb3BlbmVkIHN1Y2Nlc3NmdWxseS4KLQotIyBVc2VyLWRlZmluZWQgQ2F0ZWdvcmllcwotRk9STV9MQUJFTF9BRERfQ0FURUdPUllfREFUQT08YSBocmVmPSIlMSI+Q2xpY2sgaGVyZTwvYT4gdG8gbG9hZCB0aGlzIGNhdGVnb3J5J3MgZGF0YS4KLUZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9GSUxFPUNhdGVnb3J5IGRhdGEgZmlsZSBuYW1lCi1NU0dfSU5GT19OT19VU0VSX0RFRklORURfQ0FURUdPUklFU19GT1VORD1JV0FCMDM3MUkgTm8gdXNlciBkZWZpbmVkIGNhdGVnb3JpZXMgZGV0ZWN0ZWQuCi1NU0dfSU5GT19OT19DQVRFR09SWV9EQVRBPUlXQUIwMzcySSBDYXRlZ29yeSBkYXRhIGZvciAlMSBpcyBub3QgYXZhaWxhYmxlIG9yIGlzIGludmFsaWQuCi1NU0dfSU5GT19VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9MT0FERUQ9SVdBQjAzNzNJIERhdGEgZm9yIHVzZXIgZGVmaW5lZCBjYXRlZ29yeSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC4KLU1TR19FUlJPUl9JTlZBTElEX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEVfS0VZPUlXQUIwMzc0RSBJbnZhbGlkIGRhdGEgZmlsZSBmb3IgdXNlciBkZWZpbmVkIGNhdGVnb3J5ICUxLiBBIGNhdGVnb3J5IGtleSAnJTInIHdhcyBmb3VuZCBidXQgJyUzJyB3YXMgZXhwZWN0ZWQuCi1NU0dfRVJST1JfSU5WQUxJRF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFX0ZPUk1BVD1JV0FCMDQ3M0UgVW5rbm93biBmb3JtYXQgaW4gbGluZTogJTEgb2YgdGhlIGRhdGEgZmlsZSBmb3IgdXNlciBkZWZpbmVkIGNhdGVnb3J5ICUyLiBUaGUgbGluZSBpczogIiUzIgotTVNHX0VSUk9SX0lOVkFMSURfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRT1JV0FCMDM3NUUgSW52YWxpZCBkYXRhIGZpbGUgZm9yIHVzZXIgZGVmaW5lZCBjYXRlZ29yeSAlMS4KLU1TR19FUlJPUl9TQVZJTkdfQ0FURUdPUllfREFUQT1JV0FCMDQ3NEUgQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBzYXZpbmcgZGF0YSBmb3IgY2F0ZWdvcnkgJTEuIEV4Y2VwdGlvbiB0ZXh0OiAlMgotCi0jIFVEREkgQ2F0ZWdvcnkgQnJvd3NlcgotVElUTEVfQ0FURUdPUllfQlJPV1NFUj1DYXRlZ29yeSBCcm93c2VyCi1BTFRfQ0FURUdPUklFUz1DYXRlZ29yaWVzCi0KLSMgRGV0YWlscwotQUxUX1JFR0lTVFJZX0RFVEFJTFM9UmVnaXN0cnkgRGV0YWlscwotQUxUX0JVU0lORVNTX0RFVEFJTFM9QnVzaW5lc3MgRGV0YWlscwotQUxUX1NFUlZJQ0VfREVUQUlMUz1TZXJ2aWNlIERldGFpbHMKLUFMVF9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTPVNlcnZpY2UgSW50ZXJmYWNlIERldGFpbHMKLUZPUk1fTEFCRUxfREVUQUlMU19FRElUQUJMRT1EZXRhaWxzIGZvciA8c3Ryb25nPiUxPC9zdHJvbmc+IGFyZSBzaG93biBiZWxvdy4gU29tZSBpdGVtcyBtYXkgYmUgYWRkZWQsIHJlbW92ZWQsIG9yIGNoYW5nZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZCBmb3IgY2hhbmdlcy4gT3RoZXIgYWN0aW9ucyBhcmUgbGlzdGVkIGF0IHRoZSBib3R0b20gb2YgdGhpcyBwYWdlLgotCi0jIEdldAotQUxUX0dFVD1HZXQKLQotIyBDb21tb24gRm9ybSBDb250cm9sIFRpdGxlCi1GT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFPU5hbWUgdmFsdWUKLUZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFPURlc2NyaXB0aW9uIHZhbHVlCi1GT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX05BTUU9Q2F0ZWdvcnkga2V5IG5hbWUKLUZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9LRVlfVkFMVUU9Q2F0ZWdvcnkga2V5IHZhbHVlCi1GT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfTkFNRT1JZGVudGlmaWVyIGtleSBuYW1lCi1GT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfVkFMVUU9SWRlbnRpZmllciBrZXkgdmFsdWUKLUZPUk1fQ09OVFJPTF9USVRMRV9ESVNDT1ZFUllfVVJMPURpc2NvdmVyeSBVUkwKLUZPUk1fQ09OVFJPTF9USVRMRV9JTlBVVF9URVhUX1ZBTFVFPVVEREkgcmVnaXN0cnkgbmFtZQotCi0jIEZpbmQgYWN0aW9ucwotQUxUX0ZJTkQ9RmluZAotQUxUX1NVQlFVRVJZPUZpbmQgJTEgU3VicXVlcnkKLUZPUk1fTEFCRUxfUVVFUllfTkFNRT1OYW1lIG9mIHRoaXMgcXVlcnkKLURFRkFVTFRfUVVFUllfTkFNRT1xdWVyeSByZXN1bHRzCi1ERUZBVUxUX1NVQlFVRVJZX05BTUU9JTEgLSAlMiBzdWJxdWVyeQotRk9STV9MQUJFTF9TRUFSQ0hfRk9SPVNlYXJjaCBmb3IKLUZPUk1fT1BUSU9OX0JVU0lORVNTRVM9QnVzaW5lc3NlcwotRk9STV9PUFRJT05fU0VSVklDRVM9U2VydmljZXMKLUZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUz1TZXJ2aWNlIEludGVyZmFjZXMKLUZPUk1fTEFCRUxfU0VBUkNIX1RZUEU9VHlwZSBvZiBzZWFyY2gKLUZPUk1fUkFESU9fU0lNUExFPVNpbXBsZQotRk9STV9SQURJT19BRFZBTkNFRD1BZHZhbmNlZAotRk9STV9SQURJT19VVUlEPVVVSUQKLUZPUk1fTEFCRUxfRklORF9CVVNJTkVTU0VTX1NJTVBMRV9ERVNDPUVudGVyIHRoZSBwYXJ0aWFsIG9yIGNvbXBsZXRlIG5hbWUgb2YgYSBidXNpbmVzcyB0byBzZWFyY2ggZm9yLiBUaGUgJyUnIHN5bWJvbCBjYW4gYmUgdXNlZCBhcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9BRFZBTkNFRF9ERVNDPUVudGVyIHZhbHVlcyBmb3Igb25lIG9yIG1vcmUgb2YgdGhlIHBhcmFtZXRlcnMgbGlzdGVkIGJlbG93LiBUaGUgJyUnIHN5bWJvbCBjYW4gYmUgdXNlZCBhcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGluIHRoZSBOYW1lIGZpZWxkIG9mIHRoZSBOYW1lcyB0YWJsZS4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9CVVNJTkVTU19VVUlEX0RFU0M9RW50ZXIgdGhlIFVVSUQgb2YgdGhlIGJ1c2luZXNzIHRvIHNlYXJjaCBmb3IuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9OQU1FUz1OYW1lcwotRk9STV9MSU5LX0FERD1BZGQKLUZPUk1fTElOS19HRVQ9R2V0Ci1GT1JNX0xJTktfRklORD1GaW5kCi1GT1JNX0xJTktfUkVNT1ZFPVJlbW92ZQotRk9STV9MQUJFTF9PV05FRD1Pd25lZAotRk9STV9MQUJFTF9QVUJMSVNIX1VSTD1QdWJsaXNoIFVSTAotRk9STV9MQUJFTF9VU0VSSUQ9VXNlciBJRAotRk9STV9MQUJFTF9QQVNTV09SRD1QYXNzd29yZAotRk9STV9MQUJFTF9MQU5HVUFHRT1MYW5ndWFnZQotRk9STV9MQUJFTF9OQU1FPU5hbWUKLUZPUk1fTEFCRUxfREVTQ1JJUFRJT049RGVzY3JpcHRpb24KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VOPUVuZ2xpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FBPUFmYXIKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FCPUFia2hhemlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQUY9QWZyaWthYW5zCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BTT1BbWhhcmljCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BUj1BcmFiaWMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FTPUFzc2FtZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BWT1BeW1hcmEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FaPUF6ZXJiYWlqYW5pCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CQT1CYXNoa2lyCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CRT1CeWVsb3J1c3NpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JHPUJ1bGdhcmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQkg9QmloYXJpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CST1CaXNsYW1hCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CTj1CZW5nYWxpOyBCYW5nbGEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JPPVRpYmV0YW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JSPUJyZXRvbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQ0E9Q2F0YWxhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQ089Q29yc2ljYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0NaPUN6ZWNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9DWT1XZWxzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfREE9RGFuaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9ERT1HZXJtYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0RaPUJodXRhbmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VMPUdyZWVrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9FTz1Fc3BlcmFudG8KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VTPVNwYW5pc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VUPUVzdG9uaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9FVT1CYXNxdWUKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZBPVBlcnNpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZJPUZpbm5pc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZKPUZpamkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZPPUZhZXJvZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9GUj1GcmVuY2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZZPUZyaXNpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0dBPUlyaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9HRD1TY290cyBHYWVsaWMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0dMPUdhbGljaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9HTj1HdWFyYW5pCi1GT1JNX09QVElPTl9MQU5HVUFHRV9HVT1HdWphcmF0aQotRk9STV9PUFRJT05fTEFOR1VBR0VfSEE9SGF1c2EKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0hJPUhpbmRpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9IUj1Dcm9hdGlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfSFU9SHVuZ2FyaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9IWT1Bcm1lbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfSUE9SW50ZXJsaW5ndWEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lFPUludGVybGluZ3VlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JSz1JbnVwaWFrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JTj1JbmRvbmVzaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JUz1JY2VsYW5kaWMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lUPUl0YWxpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lXPUhlYnJldwotRk9STV9PUFRJT05fTEFOR1VBR0VfSkE9SmFwYW5lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0pJPVlpZGRpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0pXPUphdmFuZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LQT1HZW9yZ2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfS0s9S2F6YWtoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LTD1HcmVlbmxhbmRpYwotRk9STV9PUFRJT05fTEFOR1VBR0VfS009Q2FtYm9kaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LTj1LYW5uYWRhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LTz1Lb3JlYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tTPUthc2htaXJpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LVT1LdXJkaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LWT1LaXJnaGl6Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9MQT1MYXRpbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTE49TGluZ2FsYQotRk9STV9PUFRJT05fTEFOR1VBR0VfTE89TGFvdGhpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0xUPUxpdGh1YW5pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0xWPUxhdHZpYW4sIExldHRpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01HPU1hbGFnYXN5Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9NST1NYW9yaQotRk9STV9PUFRJT05fTEFOR1VBR0VfTUs9TWFjZWRvbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTUw9TWFsYXlhbGFtCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NTj1Nb25nb2xpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01PPU1vbGRhdmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTVI9TWFyYXRoaQotRk9STV9PUFRJT05fTEFOR1VBR0VfTVM9TWFsYXkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01UPU1hbHRlc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01ZPUJ1cm1lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX05BPU5hdXJ1Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9ORT1OZXBhbGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX05MPUR1dGNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9OTz1Ob3J3ZWdpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX09DPU9jY2l0YW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX09NPShBZmFuKSBPcm9tbwotRk9STV9PUFRJT05fTEFOR1VBR0VfT1I9T3JpeWEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1BBPVB1bmphYmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1BMPVBvbGlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfUFM9UGFzaHRvLCBQdXNodG8KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1BUPVBvcnR1Z3Vlc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1FVPVF1ZWNodWEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1JNPVJoYWV0by1Sb21hbmNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9STj1LaXJ1bmRpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9STz1Sb21hbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfUlU9UnVzc2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfUlc9S2lueWFyd2FuZGEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NBPVNhbnNrcml0Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9TRD1TaW5kaGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NHPVNhbmdybwotRk9STV9PUFRJT05fTEFOR1VBR0VfU0g9U2VyYm8tQ3JvYXRpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NJPVNpbmdoYWxlc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NLPVNsb3ZhawotRk9STV9PUFRJT05fTEFOR1VBR0VfU0w9U2xvdmVuaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TTT1TYW1vYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NOPVNob25hCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TTz1Tb21hbGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NRPUFsYmFuaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TUj1TZXJiaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TUz1TaXN3YXRpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TVD1TZXNvdGhvCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TVT1TdW5kYW5lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NWPVN3ZWRpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NXPVN3YWhpbGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RBPVRhbWlsCi1GT1JNX09QVElPTl9MQU5HVUFHRV9URT1UZWd1bHUKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RHPVRhamlrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9USD1UaGFpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UST1UaWdyaW55YQotRk9STV9PUFRJT05fTEFOR1VBR0VfVEs9VHVya21lbgotRk9STV9PUFRJT05fTEFOR1VBR0VfVEw9VGFnYWxvZwotRk9STV9PUFRJT05fTEFOR1VBR0VfVE49U2V0c3dhbmEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RPPVRvbmdhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UUj1UdXJraXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UUz1Uc29uZ2EKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RUPVRhdGFyCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UVz1Ud2kKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1VLPVVrcmFpbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfVVI9VXJkdQotRk9STV9PUFRJT05fTEFOR1VBR0VfVVo9VXpiZWsKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1ZJPVZpZXRuYW1lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1ZPPVZvbGFwdWsKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1dPPVdvbG9mCi1GT1JNX09QVElPTl9MQU5HVUFHRV9YSD1YaG9zYQotRk9STV9PUFRJT05fTEFOR1VBR0VfWU89WW9ydWJhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9aSD1DaGluZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9aVT1adWx1Ci1GT1JNX0xBQkVMX0VYQUNUX05BTUVfTUFUQ0g9RXhhY3QgbWF0Y2gKLUZPUk1fTEFCRUxfQ0FTRV9TRU5TSVRJVkVfTUFUQ0g9Q2FzZSBzZW5zaXRpdmUKLUZPUk1fTEFCRUxfU09VTkRFWD1Tb3VuZCBhbGlrZQotRk9STV9MQUJFTF9JREVOVElGSUVSUz1JZGVudGlmaWVycwotRk9STV9MQUJFTF9JREVOVElGSUVSX1RZUEU9VHlwZQotCi0jIERvIG5vdCB0cmFuc2xhdGUgdGhlIHR3byBpdGVtcyBiZWxvdy4KLUZPUk1fT1BUSU9OX0lERU5USUZJRVJfRFVOUz1ELVUtTi1TCi1GT1JNX09QVElPTl9JREVOVElGSUVSX1RIT01BU19SRUdJU1RSWT1UaG9tYXMgUmVnaXN0cnkKLQotRk9STV9MQUJFTF9LRVlfTkFNRT1LZXkgbmFtZQotRk9STV9MQUJFTF9LRVlfVkFMVUU9S2V5IHZhbHVlCi1GT1JNX0xBQkVMX0NBVEVHT1JJRVM9Q2F0ZWdvcmllcwotRk9STV9MQUJFTF9DQVRFR09SWV9UWVBFPVR5cGUKLUZPUk1fT1BUSU9OX0NBVEVHT1JZX05BSUNTPU5BSUNTCi1GT1JNX09QVElPTl9DQVRFR09SWV9VTlNQU0NfNzM9VU5TUFNDIDcuMwotRk9STV9PUFRJT05fQ0FURUdPUllfR0VPPUdFTwotRk9STV9MQUJFTF9CVVNJTkVTU19DQVRFR09SSUVTPUNvbXBhcmUgd2l0aDoKLUZPUk1fT1BUSU9OX0JVU0lORVNTRVNfT05MWT1CdXNpbmVzc2VzIG9ubHkKLUZPUk1fT1BUSU9OX1NFUlZJQ0VTX09OTFk9U2VydmljZXMgb25seQotRk9STV9PUFRJT05fQk9USD1CdXNpbmVzc2VzIGFuZCBTZXJ2aWNlcwotRk9STV9MQUJFTF9ESVNDT1ZFUllVUkxTPURpc2NvdmVyeSBVUkxzCi1GT1JNX0xBQkVMX0RJU0NPVkVSWVVSTD1EaXNjb3ZlcnkgVVJMCi1GT1JNX0xBQkVMX0ZJTkRRVUFMSUZJRVJTPUZpbmQgUXVhbGlmaWVycwotRk9STV9MQUJFTF9DT01CSU5FX0tFWVM9Q29tYmluZSBrZXlzOgotRk9STV9PUFRJT05fQU5EQUxMS0VZUz1BbmQKLUZPUk1fT1BUSU9OX09SQUxMS0VZUz1PcgotRk9STV9PUFRJT05fT1JMSUtFS0VZUz1PciBMaWtlCi1GT1JNX0xBQkVMX1NPUlRfQllfTkFNRT1Tb3J0IGJ5IG5hbWU6Ci1GT1JNX1JBRElPX1NPUlRfQVNDPUFzY2VuZGluZwotRk9STV9SQURJT19TT1JUX0RFU0M9RGVzY2VuZGluZwotRk9STV9MQUJFTF9TT1JUX0JZX0RBVEU9U29ydCBieSBkYXRlOgotRk9STV9MQUJFTF9NQVhfU0VBUkNIX1NFVD1NYXhpbXVtIHNpemUgb2Ygc2VhcmNoIHNldDoKLUZPUk1fTEFCRUxfTUFYX1JFU1VMVFM9TWF4aW11bSBudW1iZXIgb2YgcmVzdWx0czoKLUZPUk1fTEFCRUxfRklORF9TRVJWSUNFU19TSU1QTEVfREVTQz1FbnRlciB0aGUgcGFydGlhbCBvciBjb21wbGV0ZSBuYW1lIG9mIGEgc2VydmljZSB0byBzZWFyY2ggZm9yLiBUaGUgJyUnIHN5bWJvbCBjYW4gYmUgdXNlZCBhcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9TRVJWSUNFX1VVSURfREVTQz1FbnRlciB0aGUgVVVJRCBvZiB0aGUgc2VydmljZSB0byBzZWFyY2ggZm9yLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9TRVJWSUNFX0lOVEVSRkFDRVNfU0lNUExFX0RFU0M9RW50ZXIgdGhlIHBhcnRpYWwgb3IgY29tcGxldGUgbmFtZSBvZiBhIHNlcnZpY2UgaW50ZXJmYWNlIHRvIHNlYXJjaCBmb3IuIFRoZSAnJScgc3ltYm9sIGNhbiBiZSB1c2VkIGFzIGEgd2lsZGNhcmQgdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VfSU5URVJGQUNFX1VVSURfREVTQz1FbnRlciB0aGUgVVVJRCBvZiB0aGUgc2VydmljZSBpbnRlcmZhY2UgdG8gc2VhcmNoIGZvci4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleGVjdXRlIHRoZSBzZWFyY2guCi1GT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFUz1TZXJ2aWNlIEludGVyZmFjZXMKLUZPUk1fTEFCRUxfVVVJRF9LRVk9VVVJRCBLZXk6Ci1GT1JNX0xBQkVMX1VTRV9TRVJWSUNFPVVzZSBzZXJ2aWNlCi1GT1JNX0xBQkVMX1NFUlZJQ0U9U2VydmljZQotRk9STV9MQUJFTF9CVVNJTkVTUz1CdXNpbmVzcwotRk9STV9MQUJFTF9QVUJMSVNIX0FTU0VSVElPTlM9UHVibGlzaGVyIEFzc2VydGlvbnMKLUZPUk1fTEFCRUxfRElSRUNUSU9OPURpcmVjdGlvbgotRk9STV9MQUJFTF9GUk9NX0tFWT1Gcm9tIEtleQotRk9STV9MQUJFTF9UT19LRVk9VG8gS2V5Ci1GT1JNX0xBQkVMX1NUQVRVUz1TdGF0dXMKLUZPUk1fTEFCRUxfQVNTRVJUSU9OX1RZUEU9QXNzZXJ0aW9uIFR5cGUKLUZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX1BBUkVOVF9DSElMRD1QYXJlbnQtQ2hpbGQKLUZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX1BFRVJfVE9fUEVFUj1QZWVyLVBlZXIKLUZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX0lERU5USVRZPUlkZW50aXR5Ci1GT1JNX0xBQkVMX0FTU0VSVElPTl9ESVJFVElPTl9ERVNDPURpcmVjdGlvbiA8c3Ryb25nPkZyb208L3N0cm9uZz4gd2lsbCBjcmVhdGUgYSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGZyb20gdGhpcyBidXNpbmVzcyB0byB0aGUgYnVzaW5lc3NlcyBhYm92ZS4gIERpcmVjdGlvbiA8c3Ryb25nPlRvPC9zdHJvbmc+IHdpbGwgY3JlYXRlIGEgcHVibGlzaGVyIGFzc2VydGlvbiBmcm9tIHRoZSBhYm92ZSBidXNpbmVzc2VzIHRvIHRoaXMgYnVzaW5lc3MuCi1GT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX0ZST009LS0tPgotRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9UTz08LS0tCi1GT1JNX0xBQkVMX1RISVNfQlVTSU5FU1M9VGhpcwotTVNHX0VSUk9SX0lOVkFMSURfUVVFUllfTkFNRT1JV0FCMDE0MEUgRW50ZXIgYSB2YWxpZCBuYW1lIGZvciB0aGUgcXVlcnkuCi1NU0dfRVJST1JfSU5WQUxJRF9OQU1FUz1JV0FCMDE0MUUgRW50ZXIgYSBzZXJpZXMgb2YgdmFsaWQgbmFtZXMuCi1NU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTD1JV0FCMDE0MkUgRW50ZXIgYSB2YWxpZCBwdWJsaXNoIFVSTC4KLU1TR19FUlJPUl9JTlZBTElEX1VTRVJJRD1JV0FCMDE0M0UgRW50ZXIgYSB2YWxpZCB1c2VyIElELgotTVNHX0VSUk9SX0lOVkFMSURfTUFYX1NFQVJDSF9TRVQ9SVdBQjAxNDVFIEVudGVyIGEgdmFsaWQgc2l6ZSBmb3IgdGhlIG1heGltdW0gc2VhcmNoIHNldC4KLU1TR19FUlJPUl9JTlZBTElEX01BWF9SRVNVTFRTPUlXQUIwMTQ2RSBFbnRlciBhIHZhbGlkIHNpemUgZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXN1bHRzLgotTVNHX0lORk9fQlVTSU5FU1NFU19GT1VORD1JV0FCMDE0N0kgTnVtYmVyIG9mIGJ1c2luZXNzZXMgZm91bmQ6ICUxCi1NU0dfRVJST1JfTk9fQlVTSU5FU1NFU19GT1VORD1JV0FCMDE0OEUgTm8gYnVzaW5lc3NlcyBmb3VuZC4KLU1TR19JTkZPX1NFUlZJQ0VTX0ZPVU5EPUlXQUIwMTQ5SSBOdW1iZXIgb2Ygc2VydmljZXMgZm91bmQ6ICUxCi1NU0dfRVJST1JfTk9fU0VSVklDRVNfRk9VTkQ9SVdBQjAxNTBFIE5vIHNlcnZpY2VzIGZvdW5kLgotTVNHX0VSUk9SX1NJTkdMRV9JVEVNPUlXQUIwMTUxRSBTZWxlY3QganVzdCBvbmUgaXRlbS4KLU1TR19RVUVTVElPTl9JVEVNX1JFUExBQ0VNRU5UPVRoZSBzZWxlY3Rpb24gd2lsbCByZXBsYWNlIGFuIGl0ZW0gYWxyZWFkeSBpbiB0aGUgdGFyZ2V0LiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPwotTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EPUlXQUIwMTUySSBOdW1iZXIgb2Ygc2VydmljZSBpbnRlcmZhY2VzIGZvdW5kOiAlMQotTVNHX0VSUk9SX05PX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORD1JV0FCMDE1M0UgTm8gc2VydmljZSBpbnRlcmZhY2VzIGZvdW5kLgotTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQ9SVdBQjAxNTRFIFNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbS4KLU1TR19FUlJPUl9JTlZBTElEX1VVSURfS0VZPUlXQUIwMTU1RSBFbnRlciBhIHZhbGlkIFVVSUQga2V5LgotTVNHX0VSUk9SX1FVRVJZX05BTUVfQ09ORkxJQ1Q9SVdBQjAxNTZFIFRoZSBzdWJxdWVyeSdzIHF1ZXJ5IG5hbWUgY2Fubm90IGJlIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hdG9yLgotTVNHX0VSUk9SX05PX0lURU1TX1RPX0dFVD1JV0FCMDE1N0UgTm8gaXRlbXMgb2YgdGhlIHNwZWNpZmllZCB0eXBlIGhhdmUgYmVlbiBwdWJsaXNoZWQgb3IgZGlzY292ZXJlZCB5ZXQuCi1NU0dfSU5GT19OT19CVVNJTkVTU0VTX09SX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORD1JV0FCMDE2MkkgTm8gQnVzaW5lc3NlcywgU2VydmljZXMgb3IgU2VydmljZSBJbnRlcmZhY2VzIGZvdW5kLgotCi0jIFJlc3VsdHMKLUFMVF9RVUVSWV9SRVNVTFRTPVF1ZXJ5IFJlc3VsdHMKLUZPUk1fTEFCRUxfU1VCUVVFUlk9VGhlIHJlc3VsdHMgbWF5IGJlIHVzZWQgYXMgaW5wdXRzIG9mIGFub3RoZXIgb3BlcmF0aW9uLiBDbGljayB0aGUgPHN0cm9uZz50YXJnZXQ8L3N0cm9uZz4gbGluayBhdCB0aGUgdG9wIHRvIHNlZSB0aGUgb3BlcmF0aW9uLiBTZWxlY3RlZCByZXN1bHRzIGNhbiBiZSB1c2VkIGluIHRoZSBvcGVyYXRpb24gYnkgY2xpY2tpbmcgdGhlIDxzdHJvbmc+VHJhbnNmZXI8L3N0cm9uZz4gYnV0dG9uLgotRk9STV9MQUJFTF9RVUVSWT1TZWxlY3QgYSByZXN1bHQgdG8gc2VlIG1vcmUgZGV0YWlscyBvciBzZWxlY3QgYSBzZXQgb2YgcmVzdWx0cyBhbmQgY2xpY2sgYSBidXR0b24gdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24uCi1GT1JNX0xJTktfVEFSR0VUPXRhcmdldAotRk9STV9CVVRUT05fVFJBTlNGRVI9VHJhbnNmZXIKLUZPUk1fQlVUVE9OX1JFRlJFU0g9UmVmcmVzaAotRk9STV9CVVRUT05fQUREX1RPX0ZBVk9SSVRFUz1BZGQgdG8gZmF2b3JpdGVzCi1GT1JNX0JVVFRPTl9VTlBVQkxJU0g9VW5wdWJsaXNoCi1GT1JNX0JVVFRPTl9DTEVBUj1DbGVhcgotCi0jIFB1Ymxpc2ggYWN0aW9ucwotQUxUX1BVQkxJU0g9UHVibGlzaAotRk9STV9MQUJFTF9QVUJMSVNIPVB1Ymxpc2g6Ci1GT1JNX09QVElPTl9CVVNJTkVTUz1CdXNpbmVzcwotRk9STV9PUFRJT05fU0VSVklDRT1TZXJ2aWNlCi1GT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRT1TZXJ2aWNlIEludGVyZmFjZQotRk9STV9MQUJFTF9QVUJMSVNIX0JVU0lORVNTX1NJTVBMRV9ERVNDPUVudGVyIGEgbmFtZSBhbmQgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBidXNpbmVzcyB0byBiZSBwdWJsaXNoZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfUFVCTElTSF9CVVNJTkVTU19BRFZBTkNFRF9ERVNDPVByb3ZpZGUgYSBuYW1lIGZvciB0aGUgYnVzaW5lc3MgdG8gYmUgcHVibGlzaGVkLiBPdGhlciBwYXJhbWV0ZXJzIG1heSBhbHNvIGJlIHNwZWNpZmllZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfU0lNUExFX0RFU0M9R2V0IG9yIGZpbmQgYSBidXNpbmVzcyBhbmQgdGhlbiBwcm92aWRlIHRoZSBXU0RMIFVSTCwgbmFtZSBhbmQgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBzZXJ2aWNlIHRvIGJlIHB1Ymxpc2hlZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfQURWQU5DRURfREVTQz1HZXQgb3IgZmluZCBhIGJ1c2luZXNzIGFuZCB0aGVuIHByb3ZpZGUgdGhlIFdTREwgVVJMIGFuZCBhIG5hbWUgZm9yIHRoZSBzZXJ2aWNlIHRvIGJlIHB1Ymxpc2hlZC4gT3RoZXIgcGFyYW1ldGVycyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfQlVTSU5FU1NfUFVCTElTSF9TRVJWSUNFX1NJTVBMRV9ERVNDPVByb3ZpZGUgdGhlIFdTREwgVVJMLCBuYW1lIGFuZCBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIHNlcnZpY2UgdG8gYmUgcHVibGlzaGVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX0JVU0lORVNTX1BVQkxJU0hfU0VSVklDRV9BRFZBTkNFRF9ERVNDPVByb3ZpZGUgdGhlIFdTREwgVVJMIGFuZCBhIG5hbWUgZm9yIHRoZSBzZXJ2aWNlIHRvIGJlIHB1Ymxpc2hlZC4gT3RoZXIgcGFyYW1ldGVycyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRV9TSU1QTEVfREVTQz1FbnRlciBhIFdTREwgVVJMLCBuYW1lIGFuZCBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIHRvIGJlIHB1Ymxpc2hlZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfSU5URVJGQUNFX0FEVkFOQ0VEX0RFU0M9UHJvdmlkZSB0aGUgV1NETCBVUkwgYW5kIG5hbWUgZm9yIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0byBiZSBwdWJsaXNoZWQuIE90aGVyIHBhcmFtZXRlcnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX1BVQkxJU0hfRk9STT1QdWJsaWNhdGlvbiBmb3JtYXQKLUZPUk1fTEFCRUxfREVTQ1JJUFRJT049RGVzY3JpcHRpb24KLUZPUk1fTEFCRUxfREVTQ1JJUFRJT05TPURlc2NyaXB0aW9ucwotTVNHX0lORk9fQlVTSU5FU1NfUFVCTElTSEVEPUlXQUIwMTU4SSBCdXNpbmVzcyAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC4KLU1TR19JTkZPX1NFUlZJQ0VfUFVCTElTSEVEPUlXQUIwMTU5SSBTZXJ2aWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVkLgotTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfUFVCTElTSEVEPUlXQUIwMTYwSSBTZXJ2aWNlIGludGVyZmFjZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC4KLU1TR19FUlJPUl9JTlZBTElEX05BTUU9SVdBQjAxNjFFIEVudGVyIGEgdmFsaWQgbmFtZS4KLU1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0U9SVdBQjAyNTBFIFNlbGVjdCBhIG5vbi1ibGFuayBsYW5ndWFnZSBmb3IgdGhlICUxIGluIHJvdyAlMi4gT25seSB0aGUgZmlyc3Qgcm93IGNhbiBoYXZlIGEgYmxhbmsgbGFuZ3VhZ2UuCi1NU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRT1JV0FCMDI1MUUgQ2hhbmdlIHRoZSBsYW5ndWFnZSBmb3IgdGhlICUxIGluIHJvdyAlMi4gVGhlIGN1cnJlbnQgb25lIGlzIGFscmVhZHkgaW4gdXNlLgotTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQ9SVdBQjAyNTJFIEVudGVyIGEgdmFsaWQgJTEgaW4gcm93ICUyCi1NU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSTD1JV0FCMDI1M0UgRW50ZXIgYSB2YWxpZCBXU0RMIFVSTC4KLU1TR19FUlJPUl9OT19OQU1FUz1JV0FCMDI1NEUgQWRkIGF0IGxlYXN0IG9uZSBuYW1lLgotTVNHX0VSUk9SX0lOVkFMSURfU0VSVklDRT1JV0FCMDI1NUUgUHJvdmlkZSBhIHZhbGlkIHNlcnZpY2UuCi1NU0dfRVJST1JfSU5WQUxJRF9CVVNJTkVTUz1JV0FCMDI1NkUgUHJvdmlkZSBhIHZhbGlkIGJ1c2luZXNzLgotCi0jIEJ1c2luZXNzIFB1Ymxpc2ggU2VydmljZSBhY3Rpb24KLUFMVF9QVUJMSVNIX1NFUlZJQ0U9UHVibGlzaCBTZXJ2aWNlCi0KLSMgTG9naW4gYWN0aW9ucwotQUxUX0xPR0lOPUxvZ2luCi1BTFRfTE9HT1VUPUxvZ291dAotTVNHX0lORk9fTk9fTVVMVElQTEVfTE9HSU49TXVsdGlwbGUgbG9naW5zIHdpdGggc2FtZSBJRCBub3QgYWxsb3dlZAotTVNHX0lORk9fTE9HR0VEX0lOX05PREU9JTEgLSBsb2dnZWQgaW4gYXMgJTIKLQotIyBXU0RMIEJyb3dzZXIKLVRJVExFX1dTRExfQlJPV1NFUj1XU0RMIEJyb3dzZXIgLSAlMQotRk9STV9MQUJFTF9XU0RMX1NPVVJDRT1TZWxlY3QgYSBXU0RMIHNvdXJjZToKLUZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfV0VCUFJPSkVDVFM9V2ViIFByb2plY3RzCi1GT1JNX0xBQkVMX1dTRExfU09VUkNFX0ZBVk9SSVRFUz1GYXZvcml0ZXMKLUZPUk1fTEFCRUxfV0VCX1BST0pFQ1Q9V2ViIFByb2plY3QKLUZPUk1fTEFCRUxfV1NETF9VUkw9V1NETCBVUkwKLUFMVF9XU0RMX0JST1dTRVI9V1NETCBCcm93c2VyCi0KLSMgRGV0YWlscwotRk9STV9MSU5LX0VESVQ9RWRpdAotRk9STV9MSU5LX0NBTkNFTD1DYW5jZWwKLUZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZPUJ1c2luZXNzIEtleQotRk9STV9MQUJFTF9TRVJWSUNFX0tFWT1TZXJ2aWNlIEtleQotRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9LRVk9VE1vZGVsIEtleQotRk9STV9MQUJFTF9VU0VSX0RFRklORURfQ0FURUdPUklFUz1Vc2VyIERlZmluZWQgQ2F0ZWdvcmllcwotRk9STV9MQUJFTF9DSEVDS0VEPUNoZWNrZWQKLUZPUk1fTEFCRUxfRklMRT1GaWxlCi1NU0dfUVVFU1RJT05fUFVCTElTSF9JVEVNPVRoZSBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHB1Ymxpc2ggaXQ/Ci1NU0dfUVVFU1RJT05fU0VSVklDRV9QVUJMSVNIX0JVU0lORVNTPVRoZSBzZXJ2aWNlIGFuZCBpdHMgYnVzaW5lc3MgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gUHJvY2VlZCB0byBwdWJsaXNoPwotTVNHX0lORk9fQlVTSU5FU1NfVVBEQVRFRD1JV0FCMDI1N0kgQnVzaW5lc3MgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLgotTVNHX0lORk9fU0VSVklDRV9VUERBVEVEPUlXQUIwMjU4SSBTZXJ2aWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KLU1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1VQREFURUQ9SVdBQjAyNTlJIFNlcnZpY2UgSW50ZXJmYWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KLU1TR19JTkZPX1JFR0lTVFJZX1VQREFURUQ9SVdBQjAzMjNJIFJlZ2lzdHJ5ICUxIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KLQotIyBVbnB1Ymxpc2hBY3Rpb24KLUFMVF9VTlBVQkxJU0hfQlVTSU5FU1M9VW5wdWJsaXNoIEJ1c2luZXNzCi1BTFRfVU5QVUJMSVNIX1NFUlZJQ0U9VW5wdWJsaXNoIFNlcnZpY2UKLUFMVF9VTlBVQkxJU0hfU0VSVklDRV9JTlRFUkZBQ0U9VW5wdWJsaXNoIFNlcnZpY2UgSW50ZXJmYWNlCi1GT1JNX0xBQkVMX1VOUFVCTElTSF9ERVNDPVByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gdW5wdWJsaXNoIHRoaXMgb2JqZWN0LiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1NU0dfSU5GT19CVVNJTkVTU19VTlBVQkxJU0hFRD1JV0FCMDI2MEkgQnVzaW5lc3MgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1bnB1Ymxpc2hlZC4KLU1TR19JTkZPX1NFUlZJQ0VfVU5QVUJMSVNIRUQ9SVdBQjAyNjFJIFNlcnZpY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1bnB1Ymxpc2hlZC4KLU1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1VOUFVCTElTSEVEPUlXQUIwMjYySSBTZXJ2aWNlIEludGVyZmFjZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHVucHVibGlzaGVkLgotCi0jIEFkZCB0byBXU0RMIFBlcnNwZWN0aXZlCi1BTFRfQUREX1RPX1dTRExfUEVSU1BFQ1RJVkU9QWRkIFRvIFdTREwgUGFnZQotTVNHX0lORk9fV1NETF9BRERFRF9UT19XU0RMX1BFUlNQRUNUSVZFPUlXQUIwMzc2SSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIFdTREwgcGFnZS4KLU1TR19FUlJPUl9XU0RMX05PVF9BRERFRF9UT19XU0RMX1BFUlNQRUNUSVZFPUlXQUIwMzc3RSAlMSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gV1NETCBwYWdlLgotCi0jIEFkZCB0byBGYXZvcml0ZXMKLUFMVF9BRERfVE9fRkFWT1JJVEVTPUFkZCBUbyBGYXZvcml0ZXMKLU1TR19JTkZPX0ZBVk9SSVRFX0FEREVEPUlXQUIwMjYzSSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIGZhdm9yaXRlcy4KLU1TR19FUlJPUl9GQVZPUklURV9OT1RfQURERUQ9SVdBQjAyNjRFICUxIGNvdWxkIG5vdCBiZSBhZGRlZCB0byBmYXZvcml0ZXMuCi1NU0dfRVJST1JfRkFWT1JJVEVfQUxSRUFEWV9FWElTVFM9SVdBQjAzMjRFICUxIGFscmVhZHkgZXhpc3RzIGluIGZhdm9ydGllcy4KLU1TR19RVUVTVElPTl9PVkVSV1JJVEVfRkFWT1JJVEVTPUZhdm9yaXRlIGFscmVhZHkgZXhpc3RzLiAgRG8geW91IHdpc2ggdG8gb3ZlcndyaXRlPwotCi0jIFJlZnJlc2gKLU1TR19JTkZPX05PREVfUkVGUkVTSEVEPUlXQUIwMjY1SSAlMSByZWZyZXNoZWQuCi1NU0dfUVVFU1RJT05fUkVNT1ZFX05PREU9JTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gRG8geW91IHdpc2ggdG8gY2xlYXIgaXQ/Ci0KLSMgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzCi1BTFRfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVM9TWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMKLUZPUk1fTEFCRUxfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfREVTQz1BZGQgZGlzY292ZXJlZCBvciBwdWJsaXNoZWQgc2VydmljZXMgdG8gdGhlIGxpc3Qgb2YgcmVmZXJlbmNlZCBzZXJ2aWNlcyBieSBjbGlja2luZyB0aGUgPHN0cm9uZz5BZGQgU2VydmljZXM8L3N0cm9uZz4gYnV0dG9uLiBSZW1vdmUgc2VsZWN0ZWQgcmVmZXJlbmNlcyBieSBjbGlja2luZyB0aGUgPHN0cm9uZz5SZW1vdmUgUmVmZXJlbmNlczwvc3Ryb25nPiBidXR0b24uIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZCBmb3IgY2hhbmdlcy4KLUZPUk1fTEFCRUxfUkVGRVJFTkNFRF9TRVJWSUNFUz1SZWZlcmVuY2VkIFNlcnZpY2VzCi1GT1JNX0JVVFRPTl9BRERfU0VSVklDRVM9QWRkIFNlcnZpY2VzCi1GT1JNX0JVVFRPTl9SRU1PVkVfUkVGRVJFTkNFUz1SZW1vdmUgUmVmZXJlbmNlcwotTVNHX0VSUk9SX05PX1JFRkVSRU5DRV9TRUxFQ1RFRD1JV0FCMDI2NkUgU2VsZWN0IGF0IGxlYXN0IG9uZSByZWZlcmVuY2VkIHNlcnZpY2UgYmVmb3JlIHByb2NlZWRpbmcuCi1NU0dfRVJST1JfTk9fU0VSVklDRVM9SVdBQjAyNjdFIEdldCBvciBmaW5kIGF0IGxlYXN0IG9uZSBzZXJ2aWNlIGJlZm9yZSBwcm9jZWVkaW5nLgotTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX1JFRkVSRU5DRUQ9SVdBQjAyNjhFIFNlcnZpY2UgJTEgY291bGQgbm90IGJlIHJlZmVyZW5jZWQuCi1NU0dfRVJST1JfUkVGRVJFTkNFX05PVF9SRU1PVkVEPUlXQUIwMjY5RSBTZXJ2aWNlIHJlZmVyZW5jZSAlMSBjb3VsZCBub3QgYmUgcmVtb3ZlZC4KLU1TR19JTkZPX1NFUlZJQ0VfUkVGRVJFTkNFRD1JV0FCMDI3MEkgU2VydmljZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHJlZmVyZW5jZWQuCi1NU0dfSU5GT19TRVJWSUNFX1JFRkVSRU5DRV9SRU1PVkVEPUlXQUIwMjcxSSBTZXJ2aWNlIHJlZmVyZW5jZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuCi0KLSMgTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9ucwotQUxUX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OUz1NYW5hZ2UgUHVibGlzaGVyIEFzc2VydGlvbnMKLUZPUk1fTEFCRUxfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TX0RFU0M9QWRkIGRpc2NvdmVyZWQgb3IgcHVibGlzaGVkIGJ1c2luZXNzZXMgdG8gdGhlIGxpc3Qgb2YgcHVibGlzaGVyIGFzc2VydGlvbnMgYnkgY2xpY2tpbmcgPHN0cm9uZz5BZGQgQXNzZXJ0aW9uczwvc3Ryb25nPi4gUmVtb3ZlIHNlbGVjdGVkIGFzc2VydGlvbnMgYnkgY2xpY2tpbmcgPHN0cm9uZz5SZW1vdmUgQXNzZXJ0aW9uczwvc3Ryb25nPi4gQ29tcGxldGUgc2VsZWN0ZWQgYXNzZXJ0aW9ucyBieSBjbGlja2luZyA8c3Ryb25nPkNvbXBsZXRlIEFzc2VydGlvbnM8L3N0cm9uZz4uIENsaWNrIDxzdHJvbmc+UmVmcmVzaCBBc3NlcnRpb25zPC9zdHJvbmc+IHRvIHJlZnJlc2ggdGhlIGxpc3Qgb2YgYXNzZXJ0aW9ucy4KLUZPUk1fTEFCRUxfSU5DT01QTEVURV9BU1NFUlRJT05TX1ZJU0lCSUxJVFlfREVTQz1QbGVhc2Ugbm90ZSB0aGF0IGluY29tcGxldGUgcHVibGlzaGVyIGFzc2VydGlvbnMgYXJlIHZpc2libGUgb25seSB0byB0aGUgb3duZXIgb2YgdGhlIGJ1c2luZXNzLgotRk9STV9MQUJFTF9CVVNJTkVTU0VTPUJ1c2luZXNzZXMKLUZPUk1fQlVUVE9OX1NIT1dfQUxMX1BVQkxJU0hFUl9BU1NFUlRJT05TPVJlZnJlc2ggQXNzZXJ0aW9ucwotRk9STV9CVVRUT05fQ09NUExFVEVfUFVCTElTSEVSX0FTU0VSVElPTlM9Q29tcGxldGUgQXNzZXJ0aW9ucwotRk9STV9CVVRUT05fQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TPUFkZCBBc3NlcnRpb25zCi1GT1JNX0JVVFRPTl9SRU1PVkVfUFVCTElTSEVSX0FTU0VSVElPTlM9UmVtb3ZlIEFzc2VydGlvbnMKLU1TR19JTkZPX1BVQkxJU0hFUl9BU1NFUlRJT05TX1JFRlJFU0hFRD1JV0FCMDMyNUkgUHVibGlzaGVyIEFzc2VydGlvbnMgYXJlIHJlZnJlc2hlZC4KLU1TR19FUlJPUl9OT19JTkNPTVBMRVRFX0FTU0VSVElPTl9TRUxFQ1RFRD1JV0FCMDMyNkUgU2VsZWN0IGF0IGxlYXN0IG9uZSBpbmNvbXBsZXRlIHB1Ymxpc2hlciBhc3NlcnRpb24uCi1NU0dfRVJST1JfTk9UX09XTkVEX0JVU0lORVNTPUlXQUIwMzI3RSBUaGlzIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIGEgYnVzaW5lc3Mgb3duZWQgYnkgYW5vdGhlciBwYXJ0eS4KLQotIyBHZXRCdXNpbmVzc2VzCi1BTFRfR0VUX0JVU0lORVNTPUdldCBCdXNpbmVzcwotQUxUX0dFVF9CVVNJTkVTU0VTPUdldCBCdXNpbmVzc2VzCi1OT0RFX05BTUVfU0VSVklDRV9CVVNJTkVTUz1CdXNpbmVzcyBmb3Igc2VydmljZSAlMQotTk9ERV9OQU1FX1NJX0JVU0lORVNTRVM9QnVzaW5lc3NlcyBmb3Igc2VydmljZSBpbnRlcmZhY2UgJTEKLU1TR19RVUVTVElPTl9SRU1PVkVfU0VSVklDRV9OT0RFPVRoZSBzZXJ2aWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIG5vZGU/Ci0KLSMgR2V0U2VydmljZUludGVyZmFjZXMKLUFMVF9HRVRfU0VSVklDRV9JTlRFUkZBQ0VTPUdldCBTZXJ2aWNlIEludGVyZmFjZXMKLU5PREVfTkFNRV9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUz1TZXJ2aWNlIGludGVyZmFjZXMgZm9yIHNlcnZpY2UgJTEKLU1TR19RVUVTVElPTl9HRVRfU0lfUkVNT1ZFX1NFUlZJQ0VfTk9ERT1UaGUgc2VydmljZSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBub2RlPwotCi0jIEdldFNlcnZpY2VzCi1BTFRfR0VUX1NFUlZJQ0VTPUdldCBTZXJ2aWNlcwotTk9ERV9OQU1FX1NJX1NFUlZJQ0VTPVNlcnZpY2VzIGZvciBzZXJ2aWNlIGludGVyZmFjZSAlMQotTk9ERV9OQU1FX0JVU0lORVNTX1NFUlZJQ0VTPVNlcnZpY2VzIGZvciBidXNpbmVzcyAlMQotTVNHX1FVRVNUSU9OX1JFTU9WRV9TSV9OT0RFPVRoZSBzZXJ2aWNlIGludGVyZmFjZSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBub2RlPwotTVNHX1FVRVNUSU9OX1JFTU9WRV9CVVNJTkVTU19OT0RFPVRoZSBidXNpbmVzcyBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBub2RlPwotCi0jIFJlZnJlc2hVRERJTm9kZXNBY3Rpb24KLU1TR19FUlJPUl9OT0RFX0RBVEFfVkFMSURBVElPTl9GQUlMRUQ9SVdBQjAyNzJFICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi0KLSMgU3VtbWFyaWVzCi1BTFRfU1VNTUFSWV9RVUVSSUVTPVN1bW1hcnkgb2YgUXVlcmllcwotQUxUX1NVTU1BUllfQlVTSU5FU1NFUz1TdW1tYXJ5IG9mIEJ1c2luZXNzZXMKLUFMVF9TVU1NQVJZX1NFUlZJQ0VTPVN1bW1hcnkgb2YgU2VydmljZXMKLUFMVF9TVU1NQVJZX1NFUlZJQ0VfSU5URVJGQUNFUz1TdW1tYXJ5IG9mIFNlcnZpY2UgSW50ZXJmYWNlcwotRk9STV9MQUJFTF9RVUVSSUVTPVF1ZXJpZXMKLQotIyBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24KLU1TR19RVUVTVElPTl9JVEVNX1ZBTElEQVRJT05fRkFJTEVEPSUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHJlbW92ZSBpdD8KLQotIyBGcmFtZSB0aXRsZXMKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVI9TmF2aWdhdG9yIENvbnRhaW5lcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVI9TmF2aWdhdG9yIFRvb2xiYXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UPU5hdmlnYXRvciBDb250ZW50Ci1GUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUj1BY3Rpb25zIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVI9UHJvcGVydGllcyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUj1Qcm9wZXJ0aWVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVD1Qcm9wZXJ0aWVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVI9U3RhdHVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVI9U3RhdHVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UPVN0YXR1cyBDb250ZW50Ci1GUkFNRV9USVRMRV9VRERJX1BFUlNQRUNUSVZFX0NPTlRFTlQ9VURESSBQYWdlIENvbnRlbnQKLUZSQU1FX1RJVExFX0NBVEVHT1JJRVNfV09SS0FSRUE9Q2F0ZWdvcmllcyBXb3JrIEFyZWEKLUZSQU1FX1RJVExFX0NBVEVHT1JJRVNfVE9PTEJBUj1DYXRlZ29yaWVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX0NBVEVHT1JJRVNfQ09OVEVOVD1DYXRlZ29yaWVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1dTRExfVE9PTEJBUj1XU0RMIEJyb3dzZXIgVG9vbGJhcgotRlJBTUVfVElUTEVfV1NETF9DT05URU5UPVdTREwgQnJvd3NlciBDb250ZW50Ci0KLSMgRm9ybSB0aXRsZXMKLUZPUk1fVElUTEVfQlVTSU5FU1NfREVUQUlMUz1CdXNpbmVzcyBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfQlVTSU5FU1NfUFVCTElTSF9TRVJWSUNFPUJ1c2luZXNzIFB1Ymxpc2ggU2VydmljZSBGb3JtCi1GT1JNX1RJVExFX0dFVF9GT1JNPVNlbGVjdCBmcm9tIERpc2NvdmVyZWQgYW5kIFB1Ymxpc2hlZCBPYmplY3RzIEZvcm0KLUZPUk1fVElUTEVfSVRFTVNfU1VNTUFSWT1TdW1tYXJ5IG9mIEl0ZW1zIEZvcm0KLUZPUk1fVElUTEVfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TPU1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBGb3JtCi1GT1JNX1RJVExFX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTPU1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzIEZvcm0KLUZPUk1fVElUTEVfT1BFTl9SRUdJU1RSWT1PcGVuIFJlZ2lzdHJ5IEZvcm0KLUZPUk1fVElUTEVfUkVHSVNUUllfREVUQUlMUz1SZWdpc3RyeSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfUkVHSVNUUllfUFVCTElTSD1SZWdpc3RyeSBQdWJsaXNoIEZvcm0KLUZPUk1fVElUTEVfUkVHSVNUUllfRklORD1SZWdpc3RyeSBGaW5kIEZvcm0KLUZPUk1fVElUTEVfUkVTVUxUUz1SZXN1bHRzIEZvcm0KLUZPUk1fVElUTEVfU0VSVklDRV9ERVRBSUxTPVNlcnZpY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFM9U2VydmljZSBJbnRlcmZhY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VOUFVCTElTSD1VbnB1Ymxpc2ggRm9ybQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzZGwucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy93c2RsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOWYyMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzZGwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSMgMjAwNzA1MDcgICAxODU2MDAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRSBzdGF0dXMgcGFuZSdzICJoZWFkZXIiIHR3aXN0aWUgc2hvdWxkIG5vdCBhcHBlYXIgZm9yIHJlc3BvbnNlcyB3aXRob3V0IGhlYWRlcnMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotdGl0bGU9V1NETAotCi0jIE5vZGVzCi1OT0RFX05BTUVfV1NETF9NQUlOPVdTREwgTWFpbgotCi0jIEZyYW1lIHRpdGxlcwotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUj1OYXZpZ2F0b3IgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUj1OYXZpZ2F0b3IgVG9vbGJhcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQ9TmF2aWdhdG9yIENvbnRlbnQKLUZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSPUFjdGlvbnMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUj1Qcm9wZXJ0aWVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSPVByb3BlcnRpZXMgVG9vbGJhcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UPVByb3BlcnRpZXMgQ29udGVudAotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUj1TdGF0dXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUj1TdGF0dXMgVG9vbGJhcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQ9U3RhdHVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1dTRExfUEVSU1BFQ1RJVkVfQ09OVEVOVD1XU0RMIFBhZ2UgQ29udGVudAotRlJBTUVfVElUTEVfWFNEX0lORk9STUFUSU9OX1RPT0xCQVI9WFNEIEluZm9ybWF0aW9uIERpYWxvZyBUb29sYmFyCi1GUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fQ09OVEVOVD1YU0QgSW5mb3JtYXRpb24gRGlhbG9nIENvbnRlbnQKLQotIyBPcGVuV1NETEFjdGlvbgotQUxUX09QRU5fV1NETD1PcGVuIFdTREwKLU1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMPUlXQUIwMzc4RSBFbnRlciBhIHZhbGlkIFdTREwgVVJMLgotTVNHX0VSUk9SX09QRU5fV1NETD1JV0FCMDM3OUUgVW5hYmxlIHRvIG9wZW4gJTEuCi1NU0dfRVJST1JfWFNEX1ZBTElEQVRJT049SVdBQjAzODBFIEVycm9ycyB3ZXJlIGVuY291bnRlcmVkIHdoaWxlIHZhbGlkYXRpbmcgWE1MIHNjaGVtYXMuCi1NU0dfSU5GT19PUEVOX1dTRExfU1VDQ0VTU0ZVTD1JV0FCMDM4MUkgJTEgd2FzIHN1Y2Nlc3NmdWxseSBvcGVuZWQuCi0KLSMgV1NETCBFbGVtZW50IGRldGFpbHMKLUFMVF9XU0RMX0RFVEFJTFM9V1NETCBEZXRhaWxzCi1GT1JNX0xBQkVMX1dTRExfREVUQUlMU19ERVNDPVNob3duIGJlbG93IGFyZSB0aGUgZGV0YWlscyBmb3IgdGhpcyBXU0RMIGRvY3VtZW50LiBDbGljayBvbiBhIHNlcnZpY2Ugb3IgYmluZGluZyB0byBzZWUgaXRzIGRldGFpbHMuCi0KLSMgV1NETCBTZXJ2aWNlIEVsZW1lbnQgZGV0YWlscwotQUxUX1dTRExfU0VSVklDRV9ERVRBSUxTPVdTREwgU2VydmljZSBEZXRhaWxzCi1GT1JNX0xBQkVMX1NFUlZJQ0VfREVUQUlMU19ERVNDPVNob3duIGJlbG93IGFyZSB0aGUgZGV0YWlscyBmb3IgdGhpcyAmbHQ7c2VydmljZSZndDsgZWxlbWVudC4gQ2xpY2sgb24gYSBiaW5kaW5nIHRvIHNlZSBpdHMgb3BlcmF0aW9ucy4KLQotQUxUX05JTD1uaWw/Ci0KLSMgV1NETCBCaW5kaW5nIEVsZW1lbnQgZGV0YWlscwotQUxUX1dTRExfQklORElOR19ERVRBSUxTPVdTREwgQmluZGluZyBEZXRhaWxzCi1GT1JNX0xBQkVMX0JJTkRJTkdfREVUQUlMU19ERVNDPVNob3duIGJlbG93IGFyZSB0aGUgZGV0YWlscyBmb3IgdGhpcyA8c3Ryb25nPiUxPC9zdHJvbmc+ICAmbHQ7YmluZGluZyZndDsgZWxlbWVudC4gQ2xpY2sgb24gYW4gb3BlcmF0aW9uIHRvIGZpbGwgaW4gaXRzIHBhcmFtZXRlcnMgYW5kIGludm9rZSBpdCBvciBzcGVjaWZ5IGFkZGl0aW9uYWwgZW5kcG9pbnRzLgotCi0jIEludm9rZVdTRExPcGVyYXRpb25BY3Rpb24KLUFMVF9JTlZPS0VfV1NETF9PUEVSQVRJT049SW52b2tlIGEgV1NETCBPcGVyYXRpb24KLU1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVD1JV0FCMDM4MkUgVW5hYmxlIHRvIGNvbm5lY3QgdG8gJTEKLU1TR19FUlJPUl9WQUxJREFUSU5HX1BBUkFNRVRFUj1JV0FCMDM4M0UgRXJyb3IgdmFsaWRhdGluZyAlMQotCi0jIFdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbgotQUxUX0FERF9XU0RMX1RPX0ZBVk9SSVRFUz1BZGQgV1NETCBUbyBGYXZvcml0ZXMKLU1TR19FUlJPUl9GQVZPUklURVNfQUxSRUFEWV9FWElTVFM9SVdBQjAzODRFICUxIGFscmVhZHkgZXhpc3RzIGluIGZhdm9yaXRlcy4KLU1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTPUlXQUIwMzg1RSBVbmFibGUgdG8gYWRkICUxIHRvIGZhdm9yaXRlcy4KLU1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTD1JV0FCMDM4NkkgJTEgaXMgYWRkZWQgdG8gZmF2b3JpdGVzLgotTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVM9RmF2b3JpdGUgYWxyZWFkeSBleGlzdHMuICBEbyB5b3Ugd2lzaCB0byBvdmVyd3JpdGU/Ci0KLSMgUmVmcmVzaFdTRExBY3Rpb24KLU1TR19JTkZPX1JFRlJFU0hfV1NETF9TVUNDRVNTRlVMPUlXQUIwMzg3SSAlMSBpcyByZWZyZXNoZWQuCi1NU0dfUVVFU1RJT05fUkVNT1ZFX1dTRExfTk9ERT0lMSBpcyBubyBsb25nZXIgcmVzb2x2YWJsZS4gIERvIHlvdSB3aXNoIHRvIGNsZWFyIGl0PwotCi0jIFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uCi1NU0dfSU5GT19VUERBVEVfV1NETF9CSU5ESU5HX1NVQ0NFU1NGVUw9SVdBQjAzODhJIEVuZHBvaW50cyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLgotCi0jIEZvcm0gdGl0bGVzCi1GT1JNX1RJVExFX09QRU5fV1NETD1PcGVuIFdTREwgRm9ybQotRk9STV9USVRMRV9XU0RMX0RFVEFJTFM9V1NETCBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NETF9TRVJWSUNFX0RFVEFJTFM9V1NETCBTZXJ2aWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0RMX0JJTkRJTkdfREVUQUlMUz1XU0RMIEJpbmRpbmcgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX0lOVk9LRV9XU0RMX09QRVJBVElPTj1XU0RMIE9wZXJhdGlvbiBGb3JtCi0KLSMgRm9ybSBMYWJlbHMKLUZPUk1fTEFCRUxfT1BFTl9XU0RMX0RFU0M9RW50ZXIgdGhlIFVSTCBvZiBhIFdTREwgZG9jdW1lbnQgYW5kIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhwbG9yZS4KLUZPUk1fTEFCRUxfU0VSVklDRVM9U2VydmljZXMKLUZPUk1fTEFCRUxfQklORElOR1M9QmluZGluZ3MKLUZPUk1fTEFCRUxfT1BFUkFUSU9OUz1PcGVyYXRpb25zCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRT1UeXBlCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9VTlNVUFBPUlRFRD1VbnN1cHBvcnRlZAotRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfU09BUD1TT0FQCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9IVFRQX0dFVD1IVFRQIEdFVAotRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfSFRUUF9QT1NUPUhUVFAgUE9TVAotRk9STV9MQUJFTF9OQU1FPU5hbWUKLUZPUk1fTEFCRUxfRE9DVU1FTlRBVElPTj1Eb2N1bWVudGF0aW9uCi1GT1JNX0xBQkVMX0VORFBPSU5UPUVuZHBvaW50Ci1GT1JNX0xBQkVMX0lOVk9LRV9XU0RMX09QRVJBVElPTl9ERVNDPUVudGVyIHRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgV1NETCBvcGVyYXRpb24gYW5kIGNsaWNrIDxzdHJvbmc+R288L1N0cm9uZz4gdG8gaW52b2tlLgotRk9STV9MQUJFTF9JTlZPS0VfV1NETF9PUEVSQVRJT05fREVTQ19OT19JTlBVVD1UaGVyZSBhcmUgbm8gaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIFdTREwgb3BlcmF0aW9uICIlMSIuIENsaWNrIDxzdHJvbmc+R288L1N0cm9uZz4gdG8gaW52b2tlLgotRk9STV9MSU5LX0FERD1BZGQKLUZPUk1fTElOS19SRU1PVkU9UmVtb3ZlCi1GT1JNX0xBQkVMX1ZBTFVFUz1WYWx1ZXMKLUZPUk1fTEFCRUxfRU5BQkxFX0RJU0FCTEVfR1JPVVA9RW5hYmxlL0Rpc2FibGUgZ3JvdXAKLUZPUk1fTEFCRUxfVU5JT05fVFlQRT1VbmlvbiB0eXBlcwotRk9STV9MQUJFTF9MQU5HVUFHRT1MYW5ndWFnZQotRk9STV9MQUJFTF9YU0RfQVBQTElDQVRJT05fSU5GT1JNQVRJT049QXBwbGljYXRpb24gSW5mb3JtYXRpb24KLUZPUk1fTEFCRUxfWFNEX0RPQ1VNRU5UQVRJT049RG9jdW1lbnRhdGlvbgotRk9STV9MQUJFTF9TT0FQX1JFUVVFU1RfRU5WRUxPUEU9U09BUCBSZXF1ZXN0IEVudmVsb3BlOgotRk9STV9MQUJFTF9TT0FQX1JFU1BPTlNFX0VOVkVMT1BFPVNPQVAgUmVzcG9uc2UgRW52ZWxvcGU6Ci1GT1JNX0xBQkVMX0dST1VQX0FMTF9PUkRFUklOR19NT1ZFX1VQPU1vdmUgZWxlbWVudCB1cAotRk9STV9MQUJFTF9HUk9VUF9BTExfT1JERVJJTkdfTU9WRV9ET1dOPU1vdmUgZWxlbWVudCBkb3duCi1GT1JNX0xBQkVMX0JBU0VfVFlQRT1CYXNlIHR5cGUKLUZPUk1fTEFCRUxfVU5CT1VOREVEPVVuYm91bmRlZAotRk9STV9MQUJFTF9MRU5HVEg9TGVuZ3RoCi1GT1JNX0xBQkVMX0xFTkdUSF9WQUxVRT1bJTEuLiUyXQotRk9STV9MQUJFTF9QQVRURVJOPVBhdHRlcm4KLUZPUk1fTEFCRUxfV0hJVEVTUEFDRT1XaGl0ZXNwYWNlCi1GT1JNX0xBQkVMX1JBTkdFX09GX1ZBTFVFUz1SYW5nZSBvZiB2YWx1ZXMKLUZPUk1fTEFCRUxfTUlOX0VYQ0xVU0lWRT0oJTEuLgotRk9STV9MQUJFTF9NSU5fSU5DTFVTSVZFPVslMS4uCi1GT1JNX0xBQkVMX01BWF9FWENMVVNJVkU9JTEpCi1GT1JNX0xBQkVMX01BWF9JTkNMVVNJVkU9JTFdCi1GT1JNX0xBQkVMX1RPVEFMX0RJR0lUUz1Ub3RhbCBkaWdpdHMKLUZPUk1fTEFCRUxfRlJBQ1RJT05fRElHSVRTPUZyYWN0aW9uIGRpZ2l0cwotRk9STV9MQUJFTF9PQ0NVUkFOQ0U9T2NjdXJhbmNlIG9mCi1GT1JNX0xBQkVMX1VOSU9OX01FTUJFUlM9VW5pb24gTWVtYmVycwotRk9STV9MQUJFTF9MSVNUX0lURU1TPUxpc3QgaXRlbXMKLUZPUk1fTEFCRUxfRUxFTUVOVFM9RWxlbWVudHMKLUZPUk1fTEFCRUxfU09BUF9FTkNfQVJSQVlTPVNPQVAgQXJyYXlzCi1GT1JNX0xBQkVMX0NPTlRFTlQ9Q29udGVudAotRk9STV9MQUJFTF9BVE9NSUNfTkFNRV9UWVBFPSUxICglMik6Ci1GT1JNX0xBQkVMX05VTEw9bnVsbAotRk9STV9MQUJFTF9HUk9VUF9OVU1CRVI9R3JvdXAgJTEKLUZPUk1fTEFCRUxfQ0hPSUNFUz1DaG9pY2VzCi1GT1JNX0xBQkVMX05PVEhJTkdfVE9fRElTUExBWV9JTl9GT1JNX1ZJRVc9VGhlcmUgaXMgbm90aGluZyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGZvcm0gdmlldy4gIFBsZWFzZSBzd2l0Y2ggdG8gdGhlIHNvdXJjZSB2aWV3IGZvciB0aGUgU09BUCByZXF1ZXN0IGFuZCByZXNwb25zZS4KLUZPUk1fTEFCRUxfU09BUF9SRVNQT05TRV9GQUlMRURfVkFMSURBVElPTl9JTl9GT1JNX1ZJRVc9VGhlIFNPQVAgcmVzcG9uc2UgZmFpbGVkIHNjaGVtYSB2YWxpZGF0aW9uLiAgUGxlYXNlIHN3aXRjaCB0byB0aGUgc291cmNlIHZpZXcgZm9yIHRoZSBTT0FQIHJlc3BvbnNlIGluIFhNTCBmb3JtYXQuCi1GT1JNX0xBQkVMX0NBTk5PVF9ESVNQTEFZX0hFQURFUl9JTl9GT1JNX1ZJRVc9VGhlIGNvbnRlbnQgb2YgdGhlIGhlYWRlciBjYW5ub3QgYmUgZGlzcGxheWVkIGluIHRoZSBmb3JtIHZpZXcuICBQbGVhc2Ugc3dpdGNoIHRvIHRoZSBzb3VyY2UgdmlldyB0byBleGFtaW5lIHRoZSByYXcgY29udGVudC4KLUZPUk1fTEFCRUxfQ0FOTk9UX0RJU1BMQVlfQk9EWV9JTl9GT1JNX1ZJRVc9VGhlIGNvbnRlbnQgb2YgdGhlIGJvZHkgY2Fubm90IGJlIGRpc3BsYXllZCBpbiB0aGUgZm9ybSB2aWV3LiAgUGxlYXNlIHN3aXRjaCB0byB0aGUgc291cmNlIHZpZXcgdG8gZXhhbWluZSB0aGUgcmF3IGNvbnRlbnQuCi1GT1JNX0xBQkVMX0JPRFlfSVNfRU1QVFk9VGhlIGJvZHkgaXMgZW1wdHkuCi1GT1JNX0xBQkVMX0VORF9QT0lOVFM9RW5kcG9pbnRzCi1GT1JNX0xBQkVMX0hFQURFUj1IZWFkZXIKLUZPUk1fTEFCRUxfQk9EWT1Cb2R5Ci1GT1JNX0xBQkVMX01VU1RVTkRFUlNUQU5EPW11c3RVbmRlcnN0YW5kCi1GT1JNX0xBQkVMX0FDVE9SPWFjdG9yCi0KLSMgU291cmNlL0Zvcm0gdmlld3MKLUZPUk1fTElOS19GT1JNPUZvcm0KLUFMVF9TV0lUQ0hfVE9fRk9STV9WSUVXPVN3aXRjaCB0byBmb3JtIHZpZXcKLUZPUk1fTElOS19TT1VSQ0U9U291cmNlCi1BTFRfU1dJVENIX1RPX1NPVVJDRV9WSUVXPVN3aXRjaCB0byBzb3VyY2UgdmlldwotRk9STV9MQUJFTF9GUkFHTUVOVF9TT0FQX1ZJRVdfQ09OVEVOVD1Tb2FwIEJvZHk6Ci1CVVRUT05fTEFCRUxfTE9BRD1Mb2FkCi1CVVRUT05fTEFCRUxfU0FWRV9BUz1TYXZlIEFzLi4uCi1NU0dfUVVFU1RJT05fU1lOQ19WSUVXUz1Gb3JtYXQgb2YgdGhlIHNvdXJjZSBjb250ZW50IG1heSBiZSBhbHRlcmVkIGFzIGEgcmVzdWx0IG9mIHN3aXRjaGluZyB0byB0aGUgZm9ybSB2aWV3LiAgRG8geW91IHdpc2ggdG8gcHJvY2Vzcz8KLU1TR19RVUVTVElPTl9TWU5DX1ZJRVdTX0RFU1BJVEVfSU5WQUxJRF9TT1VSQ0VfQ09OVEVOVD1Db250ZW50IG9mIHRoZSBzb3VyY2UgdmlldyBmYWlsZWQgc2NoZW1hIHZhbGlkYXRpb24uICBTeW5jaHJvbml6ZSBhbnl3YXlzPyAgKENvbnRlbnQgb2YgdGhlIHNvdXJjZSB2aWV3IG1heSBiZSBtb2RpZmllZCkKLQotIyBGb3JtIGNvbnRyb2wgdGl0bGVzCi1GT1JNX0NPTlRST0xfVElUTEVfRU5BQkxFX0RJU0FCTEVfR1JPVVA9RW5hYmxlL0Rpc2FibGUgZ3JvdXAKLUZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfRUxFTUVOVF9JTl9HUk9VUD1TZWxlY3QgZWxlbWVudCBpbiBncm91cAotRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9VTklPTl9UWVBFPVNlbGVjdCB1bmlvbiB0eXBlCi1GT1JNX0NPTlRST0xfVElUTEVfU09BUF9GSUxFPVNPQVAgZGF0YSBmaWxlCi0KLSMgWFNEIEluZm9ybWF0aW9uIERpYWxvZwotVElUTEVfWFNEX0lORk9STUFUSU9OX0RJQUxPRz1YU0QgSW5mb3JtYXRpb24gRGlhbG9nCi0KLSMgRXJyb3IgbWVzc2FnZXMKLU1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEPUlXQUIwMzg5RSBTZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0uCi1NU0dfRVJST1JfTUFYX09DQ1VSU19WSU9MQVRJT049SVdBQjAzOTBFIE1heGltdW0gb2NjdXJhbmNlIGlzIHJlYWNoZWQuCi1NU0dfRVJST1JfTUlOX09DQ1VSU19WSU9MQVRJT049SVdBQjAzOTFFIE1pbmltdW0gb2NjdXJhbmNlIGlzIHJlYWNoZWQuCi1NU0dfRVJST1JfQ0FOTk9UX01PVkVfRklSU1RfRUxFTUVOVF9VUD1JV0FCMDM5MkUgU2VsZWN0ZWQgZWxlbWVudCBpcyBhbHJlYWR5IHRoZSBmaXJzdCBpbiB0aGUgZ3JvdXAuCi1NU0dfRVJST1JfQ0FOTk9UX01PVkVfTEFTVF9FTEVNRU5UX0RPV049SVdBQjAzOTNFIFNlbGVjdGVkIGVsZW1lbnQgaXMgYWxyZWFkeSB0aGUgbGFzdCBpbiB0aGUgZ3JvdXAuCi0KLSMgU09BUCB0cmFuc3BvcnQgbWVzc2FnZXMKLU1TR19FUlJPUl9OT19TVUlUQUJMRV9UUkFOU1BPUlQ9RmFpbGVkIHRvIGludm9rZSBvcGVyYXRpb24sIGEgc3VpdGFibGUgdHJhbnNwb3J0IGV4dGVuc2lvbiB3YXMgbm90IGZvdW5kLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzaWwucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy93c2lsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3OThmZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzaWwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXRpdGxlPVdTSUwKLQotIyBOYXZpZ2F0b3IKLVdTSUxfTUFJTl9OT0RFPVdTSUwgTWFpbgotCi0jIEZvcm1zCi1GT1JNX0xBQkVMX1VSTD1VUkwKLUZPUk1fTEFCRUxfSVRFTV9OVU1CRVI9SXRlbSAjCi1GT1JNX0xBQkVMX1VERElfQlVTSU5FU1NfTkFNRT1VRERJIEJ1c2luZXNzIE5hbWUKLUZPUk1fTEFCRUxfVURESV9TRVJWSUNFX05BTUU9VURESSBTZXJ2aWNlIE5hbWUKLUZPUk1fTEFCRUxfTEFOR1VBR0U9TGFuZ3VhZ2UKLUZPUk1fTEFCRUxfQUJTVFJBQ1Q9QWJzdHJhY3QKLUZPUk1fTEFCRUxfTkFNRT1OYW1lCi1GT1JNX0xBQkVMX1dTRExfQklORElOR1M9V1NETCBCaW5kaW5ncwotRk9STV9MQUJFTF9OQU1FU1BBQ0VfVVJJPU5hbWVzcGFjZSBVUkkKLUZPUk1fTEFCRUxfTE9DQUxfTkFNRT1Mb2NhbCBOYW1lCi1GT1JNX0xBQkVMX0lOUVVJUllfQVBJPUlucXVpcnkgQVBJCi1GT1JNX0xBQkVMX1NFUlZJQ0VfS0VZPVNlcnZpY2UgS2V5Ci1GT1JNX0xBQkVMX0JVU0lORVNTX0tFWT1CdXNpbmVzcyBLZXkKLUZPUk1fTEFCRUxfRElTQ09WRVJZX1VSTD1EaXNjb3ZlcnkgVVJMCi1GT1JNX0xBQkVMX1dTSUw9V1NJTCBEZXRhaWxzCi1GT1JNX0xBQkVMX1dTSUxfTElOS1M9V1NJTCBMaW5rcwotRk9STV9MQUJFTF9XU0RMX1NFUlZJQ0U9V1NETCBTZXJ2aWNlcwotRk9STV9MQUJFTF9VRERJX1NFUlZJQ0U9VURESSBTZXJ2aWNlcwotRk9STV9MQUJFTF9VRERJX0JVU0lORVNTPVVEREkgQnVzaW5lc3NlcwotRk9STV9MQUJFTF9BRERfVE9fTkFWSUdBVE9SPUFkZCBUbyBOYXZpZ2F0b3IKLUZPUk1fTEFCRUxfQUREX1RPX0ZBVk9SSVRFUz1BZGQgVG8gRmF2b3JpdGVzCi1GT1JNX0xBQkVMX0FERF9UT19VRERJX1BFUlNQRUNUSVZFPUFkZCBUbyBVRERJIFBhZ2UKLUZPUk1fTEFCRUxfQUREX1RPX1dTRExfUEVSU1BFQ1RJVkU9QWRkIFRvIFdTREwgUGFnZQotRk9STV9MQUJFTF9SRUZSRVNIPVJlZnJlc2gKLUZPUk1fTEFCRUxfTkE9Ti9BCi1GT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfU0VSVklDRT1TZXJ2aWNlIFVuYXZhaWxhYmxlOgotRk9STV9MQUJFTF9VTkFWQUlMQUJMRV9VRERJX0JVU0lORVNTPUJ1c2luZXNzIFVuYXZhaWxhYmxlOgotRk9STV9MQUJFTF9DSE9PU0VfV1NJTF9JTlNQRUNUSU9OX1RZUEU9Q2hvb3NlIHRoZSB0eXBlIG9mIG9iamVjdHMgdG8gaW5zcGVjdDoKLU1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEPUlXQUIwMzI4RSBTZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0uCi0KLSMgT3BlbldTSUxBY3Rpb24KLUFMVF9PUEVOX1dTSUw9T3BlbiBXU0lMCi1GT1JNX0xBQkVMX09QRU5fV1NJTF9ERVNDPUVudGVyIHRoZSBVUkwgb2YgYSBXU0lMIGRvY3VtZW50IG9yIGEgSFRNTCBkb2N1bWVudCBhbmQgY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBvcGVuIGluc3BlY3QuCi1XU0lMX1VSTD1VUkwgdG8gZG9jdW1lbnQ6Ci1NU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSTD1JV0FCMDM5NEUgJTEgaXMgbm90IGEgdmFsaWQgV1NJTCBVUkwgb3IgSFRNTCBVUkwuCi1NU0dfRVJST1JfV1NJTF9BTFJFQURZX09QRU5FRD1JV0FCMDMyOUUgJTEgaXMgYWxyZWFkeSBvcGVuZWQgaW4gdGhlIG5hdmlnYXRvci4KLU1TR19JTkZPX09QRU5fV1NJTF9TVUNDRVNTRlVMPUlXQUIwMzMwSSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZC4KLQotIyBPcGVuV1NJTExpbmtBY3Rpb24KLUFMVF9PUEVOX1dTSUxfTElOSz1PcGVuIFdTSUwgTGluawotTVNHX0VSUk9SX1dTSUxfTElOS19BTFJFQURZX09QRU5FRD1JV0FCMDMzMUUgJTEgaXMgYWxyZWFkeSBvcGVuZWQgaW4gdGhlIG5hdmlnYXRvcgotTVNHX0lORk9fT1BFTl9XU0lMX0xJTktfU1VDQ0VTU0ZVTD1JV0FCMDMzMkkgJTEgd2FzIHN1Y2Nlc3NmdWxseSBvcGVuZWQuCi0KLSMgV3NpbERldGFpbHNBY3Rpb24KLUFMVF9XU0lMX0RFVEFJTFM9V1NJTCBEZXRhaWxzCi0KLSMgV3NpbFNlcnZpY2VEZXRhaWxzQWN0aW9uCi1BTFRfV1NJTF9TRVJWSUNFX0RFVEFJTFM9V1NJTCBTZXJ2aWNlIERldGFpbHMKLQotIyBVZGRpTGlua0RldGFpbHNBY3Rpb24KLUFMVF9VRERJX0xJTktfREVUQUlMUz1VRERJIEJ1c2luZXNzIERldGFpbHMKLQotIyBXc2lsTGlua0RldGFpbHNBY3Rpb24KLUFMVF9XU0lMX0xJTktfREVUQUlMUz1XU0lMIExpbmsgRGV0YWlscwotCi0jIExpc3RXU0RMU2VydmljZXNBY3Rpb24KLUFMVF9MSVNUX1dTRExfU0VSVklDRVM9TGlzdCBBbGwgV1NETCBTZXJ2aWNlcwotRk9STV9MQUJFTF9MSVNUX1dTRExfU0VSVklDRVNfREVTQz1TZWxlY3QgYSBzZXQgb2YgV1NETCBzZXJ2aWNlcyBhbmQgY2xpY2sgPHN0cm9uZz5BZGQgdG8gRmF2b3JpdGVzPC9zdHJvbmc+IHRvIGFkZCB0aGVzZSB0byB0aGUgbGlzdCBvZiBmYXZvcml0ZXMuCi0KLSMgTGlzdFVERElTZXJ2aWNlc0FjdGlvbgotQUxUX0xJU1RfVURESV9TRVJWSUNFUz1MaXN0IEFsbCBVRERJIFNlcnZpY2VzCi1GT1JNX0xBQkVMX0xJU1RfVURESV9TRVJWSUNFU19ERVNDPVNlbGVjdCBhIHNldCBvZiBVRERJIHNlcnZpY2VzIGFuZCBjbGljayA8c3Ryb25nPkFkZCB0byBGYXZvcml0ZXM8L3N0cm9uZz4gdG8gYWRkIHRoZXNlIHRvIHRoZSBsaXN0IG9mIGZhdm9yaXRlcy4gQ2xpY2sgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIGFkZCB0aGUgc2VsZWN0aW9ucyB0byB0aGUgVURESSBQYWdlLiBDbGljayA8c3Ryb25nPlJlZnJlc2g8L3N0cm9uZz4gdG8gcmVmcmVzaCB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0VURESUJ1c2luZXNzZXNBY3Rpb24KLUFMVF9MSVNUX1VERElfTElOS1M9TGlzdCBBbGwgVURESSBCdXNpbmVzc2VzCi1GT1JNX0xBQkVMX0xJU1RfVURESV9CVVNJTkVTU0VTX0RFU0M9U2VsZWN0IGEgc2V0IG9mIFVEREkgYnVzaW5lc3NlcyBhbmQgY2xpY2sgPHN0cm9uZz5BZGQgdG8gRmF2b3JpdGVzPC9zdHJvbmc+IHRvIGFkZCB0aGVzZSB0byB0aGUgbGlzdCBvZiBmYXZvcml0ZXMuIENsaWNrIDxzdHJvbmc+QWRkIHRvIFVEREkgUGFnZTwvc3Ryb25nPiB0byBhZGQgdGhlc2UgdG8gdGhlIFVEREkgUGFnZS4gQ2xpY2sgPHN0cm9uZz5SZWZyZXNoPC9zdHJvbmc+IHRvIHJlZnJlc2ggdGhlIHNlbGVjdGlvbnMuCi0KLSMgTGlzdFdTSUxMaW5rc0FjdGlvbgotQUxUX0xJU1RfV1NJTF9MSU5LUz1MaXN0IEFsbCBXU0lMIExpbmtzCi1GT1JNX0xBQkVMX0xJU1RfV1NJTF9MSU5LUz1TZWxlY3QgYSBzZXQgb2YgV1NJTCBsaW5rcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gTmF2aWdhdG9yPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgbmF2aWdhdG9yLgotCi0jIENsZWFyV1NJTEFjdGlvbgotQUxUX0NMRUFSX1dTSUw9Q2xlYXIgV1NJTAotCi0jIFJlZnJlc2hBY3Rpb24KLUFMVF9SRUZSRVNIX1dTSUw9UmVmcmVzaCBXU0lMCi1BTFRfUkVGUkVTSF9VRERJX0JVU0lORVNTPVJlZnJlc2ggVURESSBCdXNpbmVzcwotQUxUX1JFRlJFU0hfVURESV9TRVJWSUNFPVJlZnJlc2ggVURESSBTZXJ2aWNlCi1NU0dfRVJST1JfV1NJTF9OT1RfRk9VTkQ9SVdBQjAzMzNFIFdTSUwgJTEgY291bGQgbm90IGJlIGxvYWRlZC4KLU1TR19FUlJPUl9CVVNJTkVTU19OT1RfRk9VTkQ9SVdBQjAzMzRFIEJ1c2luZXNzICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi1NU0dfRVJST1JfU0VSVklDRV9OT1RfRk9VTkQ9SVdBQjAzMzVFIFNlcnZpY2UgJTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4KLU1TR19JTkZPX1JFRlJFU0hfU1VDQ0VTU0ZVTD1JV0FCMDMzNkkgJTEgaXMgcmVmcmVzaGVkLgotTVNHX0NPTkZJUk1fUkVNT1ZFX05PREU9JTEgaXMgbm8gbG9uZ2VyIHJlc29sdmFibGUuICBEbyB5b3Ugd2lzaCB0byBjbGVhciBpdD8KLQotIyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotQUxUX0FERF9CVVNJTkVTU19UT19VRERJX1BFUlNQRUNUSVZFPUFkZCBCdXNpbmVzcyBUbyBVRERJIFBhZ2UKLUFMVF9BRERfU0VSVklDRV9UT19VRERJX1BFUlNQRUNUSVZFPUFkZCBTZXJ2aWNlIFRvIFVEREkgUGFnZQotTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTD1JV0FCMDMzN0kgJTEgaXMgYWRkZWQgdG8gVURESSBQYWdlLgotTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFPUlXQUIwMzM4RSBVbmFibGUgdG8gYWRkICUxIHRvIFVEREkgUGFnZS4KLU1TR19FUlJPUl9CVVNJTkVTU19OT1RfRk9VTkQ9SVdBQjAzMzlFIEJ1c2luZXNzICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi1NU0dfRVJST1JfU0VSVklDRV9OT1RfRk9VTkQ9SVdBQjAzNDBFIFNlcnZpY2UgJTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4KLQotIyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFPUFkZCBXU0RMIFRvIFdTREwgUGFnZQotTVNHX0lORk9fQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMPUlXQUIwMzk1SSAlMSBpcyBhZGRlZCB0byBXU0RMIFBhZ2UuCi1NU0dfRVJST1JfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRT1JV0FCMDM5NkUgJTEgY291bGQgbm90IGJlIGxvYWRlZC4KLQotIyBBZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24KLUFMVF9BRERfV1NJTF9UT19GQVZPUklURVM9QWRkIFdTSUwgVG8gRmF2b3JpdGVzCi1NU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUz1JV0FCMDM0MUUgVW5hYmxlIHRvIGFkZCAlMSB0byBmYXZvcml0ZXMuCi1NU0dfRVJST1JfRkFWT1JJVEVTX0FMUkVBRFlfRVhJU1RTPUlXQUIwMzQyRSAlMSBhbHJlYWR5IGV4aXN0cyBpbiBmYXZvcml0ZXMuCi1NU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUw9SVdBQjAzNDNJICUxIGlzIGFkZGVkIHRvIGZhdm9yaXRlcy4KLU1TR19RVUVTVElPTl9PVkVSV1JJVEVfRkFWT1JJVEVTPUZhdm9yaXRlIGFscmVhZHkgZXhpc3RzLiAgRG8geW91IHdpc2ggdG8gb3ZlcndyaXRlPwotCi0jIEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24KLUFMVF9BRERfV1NETF9TRVJWSUNFX1RPX0ZBVk9SSVRFUz1BZGQgV1NETCBUbyBGYXZvcml0ZXMKLQotIyBBZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uCi1BTFRfQUREX1VERElfQlVTSU5FU1NfVE9fRkFWT1JJVEVTPUFkZCBVRERJIEJ1c2luZXNzIFRvIEZhdm9yaXRlcwotCi0jIEFkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbgotQUxUX0FERF9TRVJWSUNFX1RPX0ZBVk9SSVRFUz1BZGQgVURESSBTZXJ2aWNlIFRvIEZhdm9yaXRlcwotCi0jIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2gKLUFUTF9JTVBPUlRfV1NJTF9UT19XT1JLQkVOQ0g9SW1wb3J0IFdTSUwgVG8gV29ya2JlbmNoCi1GT1JNX0xBQkVMX0lNUE9SVF9XU0lMX1RPX1dPUktCRU5DSF9ERVNDPVNlbGVjdCBhIHdvcmtiZW5jaCBwcm9qZWN0IHRvIHNhdmUgdGhlIFdTSUwgZmlsZSBpbnRvLiBZb3UgbWF5IGFsc28gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBXU0lMIGZpbGUuCi0KLSMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uCi1BTFRfV1NJTF9JTVBPUlRfVE9fRlM9SW1wb3J0IFdTSUwgVG8gRmlsZSBTeXN0ZW0KLUFMVF9XU0RMX0lNUE9SVF9UT19GUz1JbXBvcnQgV1NETCBUbyBGaWxlIFN5c3RlbQotCi0jIEZyYW1lIHRpdGxlcwotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUj1OYXZpZ2F0b3IgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUj1OYXZpZ2F0b3IgVG9vbGJhcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQ9TmF2aWdhdG9yIENvbnRlbnQKLUZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSPUFjdGlvbnMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUj1Qcm9wZXJ0aWVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UPVByb3BlcnRpZXMgQ29udGVudAotRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSPVByb3BlcnRpZXMgVG9vbGJhcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUj1TdGF0dXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVD1TdGF0dXMgQ29udGVudAotRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVI9U3RhdHVzIFRvb2xiYXIKLQotIyBGb3JtIHRpdGxlcwotRk9STV9USVRMRV9PUEVOX1dTSUw9T3BlbiBXU0lMIEZvcm0KLUZPUk1fVElUTEVfVURESV9CVVNJTkVTU19ERVRBSUxTPVVEREkgQnVzaW5lc3MgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VERElfU0VSVklDRV9ERVRBSUxTPVVEREkgU2VydmljZSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NETF9TRVJWSUNFX0RFVEFJTFM9V1NETCBTZXJ2aWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0lMX0RFVEFJTFM9V1NJTCBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NJTF9MSU5LX0RFVEFJTFM9V1NJTCBMaW5rIERldGFpbHMgRm9ybQotCi0jIFZpZXcgdGl0bGVzCi1WSUVXX1RJVExFX1VERElfQlVTSU5FU1NFUz1VRERJIEJ1c2luZXNzZXMgVmlldwotVklFV19USVRMRV9VRERJX1NFUlZJQ0VTPVVEREkgU2VydmljZXMgVmlldwotVklFV19USVRMRV9XU0RMX1NFUlZJQ0VTPVdTREwgU2VydmljZXMgVmlldwotVklFV19USVRMRV9XU0lMX0xJTktTPVdTSUwgTGlua3MgVmlldwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy92aWV3cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZnJhZ21lbnQvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC92aWV3cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC92aWV3cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvdmlld3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvbGliLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvbGliLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYjU4MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2xpYi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphcgotd3NleHBsb3JlcnNyYy56aXAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwYjA0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbmVuZ2luZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRW5naW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLkFjdGlvbkRhdGFQYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5TY2VuYXJpb0Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5UcmFuc2FjdGlvbkRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5BY3Rpb25EZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5YTUxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVN0cmluZyBtb2RlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkFDVElPTl9FTkdJTkVfTU9ERSk7Ci1TdHJpbmcgc2NlbmFyaW8gPSBudWxsOwotdHJ5Ci17Ci0gIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciA9IG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcigpOwotICBwYXJzZXIucGFyc2VSZXF1ZXN0KHJlcXVlc3QsIEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKTsKLSAgc2NlbmFyaW8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5BQ1RJT05fRU5HSU5FX1NDRU5BUklPKTsKLX0KLWNhdGNoIChUaHJvd2FibGUgdCkKLXsKLX0KLUFjdGlvbkVuZ2luZSBhY3Rpb25FbmdpbmUgPSBjb250cm9sbGVyLmdldEFjdGlvbkVuZ2luZSgpOwotaWYgKG1vZGUgIT0gbnVsbCkKLXsKLSAgYWN0aW9uRW5naW5lLnNldE1vZGUoQWN0aW9uRW5naW5lLk1PREVfRElTQUJMRUQpOwotICB0cnkKLSAgewotICAgIGFjdGlvbkVuZ2luZS5zZXRNb2RlKEJ5dGUucGFyc2VCeXRlKG1vZGUpKTsKLSAgfQotICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgewotICB9Ci19Ci1pZiAoc2NlbmFyaW8gIT0gbnVsbCAmJiBzY2VuYXJpby5sZW5ndGgoKSA+IDApCi17Ci0gIFNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBudWxsOwotICB0cnkKLSAgewotICAgIEFjdGlvbkRhdGFQYXJzZXIgcGFyc2VyID0gbmV3IEFjdGlvbkRhdGFQYXJzZXIoKTsKLSAgICBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBwYXJzZXIucGFyc2VTY2VuYXJpbyhYTUxVdGlscy5zdHJpbmdUb0VsZW1lbnQoc2NlbmFyaW8pKTsKLSAgICBhY3Rpb25FbmdpbmUuZXhlY3V0ZVNjZW5hcmlvKHNjZW5hcmlvRGVzY3JpcHRvcik7Ci0gIH0KLSAgY2F0Y2ggKFRocm93YWJsZSB0KQotICB7Ci0gIH0KLSAgaWYgKHNjZW5hcmlvRGVzY3JpcHRvciAhPSBudWxsKQotICB7Ci0gICAgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10gdHJhbnNhY3Rpb25EZXNjcmlwdG9ycyA9IHNjZW5hcmlvRGVzY3JpcHRvci5nZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEFjdGlvbkRlc2NyaXB0b3JbXSBhY3Rpb25EZXNjcmlwdG9ycyA9IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbaV0uZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDwhLS0KLSAgICAgICAgPCU9YWN0aW9uRGVzY3JpcHRvcnNbal0uZ2V0SWQoKSU+Ci0gICAgICAgIDwlPWFjdGlvbkRlc2NyaXB0b3JzW2pdLmdldFN0YXR1c0lkKCklPgotICAgICAgICA8JQotICAgICAgICBMaXN0IHN0YXR1cyA9IGFjdGlvbkRlc2NyaXB0b3JzW2pdLmdldFN0YXR1cygpOwotICAgICAgICBpZiAoc3RhdHVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc3RhdHVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwlPWl0Lm5leHQoKS50b1N0cmluZygpJT4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICAgIC0tPgotICAgICAgICA8JQotICAgICAgfQotICAgIH0KLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbmVuZ2luZV9jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWJjYTZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRW5naW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotPCUKLVN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLUh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci1BY3Rpb25FbmdpbmUgYWN0aW9uRW5naW5lID0gY29udHJvbGxlci5nZXRBY3Rpb25FbmdpbmUoKTsKLVN0cmluZyBtb2RlU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkFDVElPTl9FTkdJTkVfTU9ERSk7Ci1pZiAobW9kZVN0cmluZyAhPSBudWxsICYmIG1vZGVTdHJpbmcubGVuZ3RoKCkgPiAwKQotewotICB0cnkKLSAgewotICAgIGJ5dGUgbW9kZSA9IEJ5dGUucGFyc2VCeXRlKG1vZGVTdHJpbmcpOwotICAgIGFjdGlvbkVuZ2luZS5zZXRNb2RlKG1vZGUpOwotICB9Ci0gIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgewotICB9Ci19Ci1TdHJpbmcgcGxheUZpbGVJZCA9ICJwbGF5RmlsZUlkIjsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVElUTEVfQUNUSU9OX1JFQ09SREVSIiklPjwvdGl0bGU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIHNldE1vZGUobW9kZSkKLSAgICB7Ci0gICAgICA8JQotICAgICAgU3RyaW5nQnVmZmVyIGZvcm1BY3Rpb24gPSBuZXcgU3RyaW5nQnVmZmVyKHJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiYWN0aW9uZW5naW5lX2NvbnRhaW5lci5qc3A/IikpKTsKLSAgICAgIGZvcm1BY3Rpb24uYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgICAgZm9ybUFjdGlvbi5hcHBlbmQoIj0iKTsKLSAgICAgIGZvcm1BY3Rpb24uYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAgICBmb3JtQWN0aW9uLmFwcGVuZCgiJiIpOwotICAgICAgZm9ybUFjdGlvbi5hcHBlbmQoQWN0aW9uSW5wdXRzLkFDVElPTl9FTkdJTkVfTU9ERSk7Ci0gICAgICBmb3JtQWN0aW9uLmFwcGVuZCgiPSIpOwotICAgICAgJT4KLSAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci0gICAgICBmb3JtLmFjdGlvbiA9ICc8JT1mb3JtQWN0aW9uLnRvU3RyaW5nKCklPicgKyBtb2RlOwotICAgICAgZm9ybS50YXJnZXQgPSAiX3NlbGYiOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwbGF5KCkKLSAgICB7Ci0gICAgICB2YXIgcGxheUZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiPCU9cGxheUZpbGVJZCU+Iik7Ci0gICAgICBpZiAocGxheUZpbGUudmFsdWUgIT0gbnVsbCAmJiBwbGF5RmlsZS52YWx1ZS5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmZvcm1zWzBdOwotICAgICAgICBmb3JtLmFjdGlvbiA9ICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZXhwbG9yZXIuanNwIikpJT4nOwotICAgICAgICBmb3JtLnRhcmdldCA9ICI8JT1GcmFtZU5hbWVzLldJTkRPV19OQU1FX1dTRVhQTE9SRVJfSlNQJT4iOwotICAgICAgICBmb3JtLmVuY3R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7Ci0gICAgICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Ci0gICAgICAgIGZvcm0uZW5jb2RpbmcgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7Ci0gICAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgICAgIHNldE1vZGUoJzwlPUFjdGlvbkVuZ2luZS5NT0RFX1BMQVklPicpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBhbGVydCgnPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QTEFZX0ZJTEUiKSU+Jyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2F2ZSgpCi0gICAgewotICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICAgIGZvcm0uYWN0aW9uID0gJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiYWN0aW9ucy9TYXZlQWN0aW9uRW5naW5lU2NlbmFyaW8uanNwIikpJT4nOwotICAgICAgZm9ybS50YXJnZXQgPSAiX3NlbGYiOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICB9Ci0gIDwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPGZvcm0gbWV0aG9kPSJwb3N0Ij4KLSAgICA8JQotICAgIFN0cmluZyBsYWJlbE1vZGVQbGF5ID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01PREVfUExBWSIpOwotICAgIFN0cmluZyBsYWJlbE1vZGVTdG9wID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01PREVfU1RPUCIpOwotICAgIFN0cmluZyBsYWJlbE1vZGVSZWNvcmQgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9ERV9SRUNPUkQiKTsKLSAgICBTdHJpbmcgbGFiZWxTYXZlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NBVkUiKTsKLSAgICBieXRlIG1vZGUgPSBhY3Rpb25FbmdpbmUuZ2V0TW9kZSgpOwotICAgIFN0cmluZyBpbWdQbGF5ID0gKG1vZGUgPT0gQWN0aW9uRW5naW5lLk1PREVfUExBWSkgPyAiaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYiIDogImltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmIjsKLSAgICBTdHJpbmcgaW1nU3RvcCA9IChtb2RlID09IEFjdGlvbkVuZ2luZS5NT0RFX1NUT1ApID8gImltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmIiA6ICJpbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZiI7Ci0gICAgU3RyaW5nIGltZ1JlY29yZCA9IChtb2RlID09IEFjdGlvbkVuZ2luZS5NT0RFX1JFQ09SRCkgPyAiaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcmVjb3JkLmdpZiIgOiAiaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcmVjb3JkLmdpZiI7Ci0gICAgU3RyaW5nIGltZ1NhdmUgPSAiaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYiOwotICAgICU+Ci0gICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9Mz4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cGxheSgpIj4KLSAgICAgICAgICAgIDxpbWcgY2xhc3M9Im5vcm1hbCIgYm9yZGVyPTAgYWx0PSI8JT1sYWJlbE1vZGVQbGF5JT4iIHRpdGxlPSI8JT1sYWJlbE1vZGVQbGF5JT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGltZ1BsYXkpKSU+Ij4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1BMQVkiKSU+Ci0gICAgICAgICAgPC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXRNb2RlKCc8JT1TdHJpbmcudmFsdWVPZihBY3Rpb25FbmdpbmUuTU9ERV9TVE9QKSU+JykiPgotICAgICAgICAgICAgPGltZyBjbGFzcz0ibm9ybWFsIiBib3JkZXI9MCBhbHQ9IjwlPWxhYmVsTW9kZVN0b3AlPiIgdGl0bGU9IjwlPWxhYmVsTW9kZVN0b3AlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoaW1nU3RvcCkpJT4iPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01PREVfU1RPUCIpJT4KLSAgICAgICAgICA8L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnNldE1vZGUoJzwlPVN0cmluZy52YWx1ZU9mKEFjdGlvbkVuZ2luZS5NT0RFX1JFQ09SRCklPicpIj4KLSAgICAgICAgICAgIDxpbWcgY2xhc3M9Im5vcm1hbCIgYm9yZGVyPTAgYWx0PSI8JT1sYWJlbE1vZGVSZWNvcmQlPiIgdGl0bGU9IjwlPWxhYmVsTW9kZVJlY29yZCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChpbWdSZWNvcmQpKSU+Ij4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1JFQ09SRCIpJT4KLSAgICAgICAgICA8L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnNhdmUoKSI+Ci0gICAgICAgICAgICA8aW1nIGNsYXNzPSJub3JtYWwiIGJvcmRlcj0wIGFsdD0iPCU9bGFiZWxTYXZlJT4iIHRpdGxlPSI8JT1sYWJlbFNhdmUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoaW1nU2F2ZSkpJT4iPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NBVkUiKSU+Ci0gICAgICAgICAgPC9hPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTM+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUExBWV9GSUxFIiklPjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iPCU9cGxheUZpbGVJZCU+IiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuQUNUSU9OX0VOR0lORV9TQ0VOQVJJTyU+Ij4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9mb3JtPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM4NGZjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gKEltcG9ydFRvV29ya2JlbmNoQWN0aW9uKXNlc3Npb24uZ2V0QXR0cmlidXRlKEFjdGlvbklucHV0cy5JTVBPUlRfQUNUSU9OKTsKLSAgIGlmIChhY3Rpb24uaXNUYXJnZXRGaWxlUmVzb3VyY2VSZWFkT25seSgpKQotICAgewotJT4KLSAgdmFyIHByb2NlZWQgPSB0cnVlOwotPCUgICAKLSAgICAgaWYgKCFhY3Rpb24uaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKQotICAgICB7Ci0lPgotICBwcm9jZWVkID0gY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGFjdGlvbi5nZXRXZWJTZXJ2aWNlUGx1Z2luRmlsZU1lc3NhZ2UoIk1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVEIikpJT4iKTsKLTwlICAgICAKLSAgICAgfQotJT4KLSAgaWYgKHByb2NlZWQpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoVmFsaWRhdGVFZGl0QWN0aW9uLmdldEFjdGlvbkxpbmsoKSkpJT4iOwotPCUgICAgIAotICAgfQotICAgZWxzZQotICAgewotJT4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uZ2V0QWN0aW9uTGluaygpKSklPiI7Ci08JQotICAgfQotJT4gICAgIAotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+ICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjY0ODlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsgICAgCi08JQotICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gICAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250ZW50UGFnZSgpKSklPiI7Ci08JQotICAgfQotICAgU3RyaW5nIHByb3BlcnRpZXNDb250YWluZXJWYXIgPSBhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gICAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUgICAKLSAgIH0KLSAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPgotICAgIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0lPgotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTNjYjU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTxoZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgIFN0cmluZyBwcm9wZXJ0aWVzQ29udGFpbmVyVmFyID0gYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICB7Ci0lPgotICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08JQotICAgfQotICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0lPgotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGZiN2UzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBydW4gdGhlIGFjdGlvbgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24ucnVuKCk7Ci0gICBib29sZWFuIHdyaXR0ZW4gPSBmYWxzZTsKLQotICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgIHsKLSAgICAgLy8gd3JpdGUgdG8gZmlsZSBzeXN0ZW0KLSAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotICAgICByZXNwb25zZS5zZXRIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iLCJhdHRhY2htZW50O2ZpbGVuYW1lPSIrYWN0aW9uLmdldERlZmF1bHRGaWxlTmFtZSgpKTsKLSAgICAgYWN0aW9uLndyaXRlKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKLSAgICAgd3JpdHRlbiA9IHRydWU7Ci0gICB9Ci0KLSAgIGlmICghd3JpdHRlbikKLSAgIHsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotICAgICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgICAgIHBhbmVzRmlsZS5hcHBlbmQoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgICAgIGlmIChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpICE9IG51bGwpCi0gICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIDwlPWFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCklPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgIH0KLSU+ICAgICAgCi08L2JvZHk+Ci08L2h0bWw+Ci08JQotICAgfQotJT4gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MzVjZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgIC8vTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIGlmICghaW5wdXRzVmFsaWQpCi0gICB7Ci0gICAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgewotJT4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPCUKLSAgICAgfQotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZShBY3Rpb25JbnB1dHMuSU1QT1JUX0FDVElPTixhY3Rpb24pOyAgIAotICAgICBpZiAoYWN0aW9uLmZpbGVFeGlzdHMoKSkKLSAgICAgewotJT4KLSAgdmFyIHByb2NlZWQgPSB0cnVlOwotPCUgICAgICAgIAotICAgICAgIGlmICghYWN0aW9uLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpCi0gICAgICAgewotJT4KLSAgcHJvY2VlZCA9IGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZShhY3Rpb24uZ2V0V2ViU2VydmljZVBsdWdpbkZpbGVNZXNzYWdlKCJNU0dfRVJST1JfRklMRV9PVkVSV1JJVEVfRElTQUJMRUQiKSklPiIpOwotPCUKLSAgICAgICB9Ci0lPgotICBpZiAocHJvY2VlZCkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbi5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0lPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChXcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci08L3NjcmlwdD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlmYjBkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICAvL0xvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24ucnVuKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAoIWFjdGlvblJlc3VsdCkKLSAgIHsKLSAgICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgICBpZiAoc3RhdHVzQ29udGVudFZhciAhPSBudWxsKQotICAgICB7Ci0lPiAgICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICA8JT1zdGF0dXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgIH0KLSU+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGJkMmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJldHJpZXZlSGlzdG9yeUFjdGlvbiBhY3Rpb24gPSBuZXcgUmV0cmlldmVIaXN0b3J5QWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24ucnVuKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgVVRGLTgiPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgIEJyZWFkQ3J1bWIgYiA9IGFjdGlvbi5nZXRCcmVhZENydW1iKCk7Ci0gICBpZiAoYiAhPSBudWxsKQotICAgewotICAgICBpbnQgYnJlYWRDcnVtYlBlcnNwZWN0aXZlSWQgPSBiLmdldFBlcnNwZWN0aXZlSWQoKTsKLSAgICAgaWYgKGJyZWFkQ3J1bWJQZXJzcGVjdGl2ZUlkICE9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGVyc3BlY3RpdmVJZCgpKQotICAgICB7Ci0gICAgICAgLy8gU3dpdGNoIHRoZSBwZXJzcGVjdGl2ZS4KLSU+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGJyZWFkQ3J1bWJQZXJzcGVjdGl2ZUlkLHRydWUpKSklPiI7Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIC8vIEp1bXAgdG8gdGhlIHBhZ2UgcmV0cmlldmVkIGZyb20gaGlzdG9yeS4KLSU+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChiLmdldFVSTCgpKSklPiI7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2F2ZUFjdGlvbkVuZ2luZVNjZW5hcmlvLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TYXZlQWN0aW9uRW5naW5lU2NlbmFyaW8uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDBiOWQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TYXZlQWN0aW9uRW5naW5lU2NlbmFyaW8uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuU2NlbmFyaW9EZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLkFjdGlvbkRhdGFQYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudzNjLmRvbS5FbGVtZW50IiU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1yZXNwb25zZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7Ci1yZXNwb25zZS5zZXRIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iLCJhdHRhY2htZW50O2ZpbGVuYW1lPXNjZW5hcmlvLnhtbCIpOwotU2NlbmFyaW9EZXNjcmlwdG9yIHNjZW5hcmlvRGVzY3JpcHRvciA9IGNvbnRyb2xsZXIuZ2V0QWN0aW9uRW5naW5lKCkuZ2V0U2NlbmFyaW8oKTsKLUFjdGlvbkRhdGFQYXJzZXIgcGFyc2VyID0gbmV3IEFjdGlvbkRhdGFQYXJzZXIoKTsKLUVsZW1lbnQgc2NlbmFyaW8gPSBwYXJzZXIudG9FbGVtZW50KHNjZW5hcmlvRGVzY3JpcHRvcik7Ci1pZiAoc2NlbmFyaW8gIT0gbnVsbCkKLXsKLSAgdHJ5Ci0gIHsKLSAgICBTdHJpbmcgc2NlbmFyaW9TdHJpbmcgPSBYTUxVdGlscy5zZXJpYWxpemUoc2NlbmFyaW8sIGZhbHNlKTsKLSAgICBpZiAoc2NlbmFyaW9TdHJpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKSk7Ci0gICAgICBwdy5wcmludGxuKHNjZW5hcmlvU3RyaW5nKTsKLSAgICAgIHB3LmNsb3NlKCk7Ci0gICAgfQotICB9Ci0gIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgewotICB9Ci19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGQxMTdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBQZXJzcGVjdGl2ZSBjdXJyZW50UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IFVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAoIWFjdGlvblJlc3VsdCkKLSAgIHsKLSAgICAgaWYgKGFjdGlvbi5pc1N0YWxlQnJlYWRDcnVtYigpKQotICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFJlcnVuIHRoZSBoaXN0b3J5IGFjdGlvbiB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIGl0ZW0uCi0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXROZXh0SGlzdG9yeUFjdGlvbkxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgICBTdHJpbmcgcHJvcGVydGllc0NvbnRhaW5lclZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgIGlmIChhY3Rpb24ucmVxdWlyZXNUcmVlVmlld1JlZnJlc2goKSkKLSAgICAgewotICAgICAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgLy8gVXBkYXRlIHRoZSB0cmVldmlldy4KLSAgICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0VHJlZUNvbnRlbnRQYWdlKCkpKSU+IjsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpKSklPiI7ICAKLTwvc2NyaXB0PgotPCUKLSAgICAgICB9Ci0gICAgICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgfQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gYWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgTm9kZSBwcmV2aW91c1NlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFByZXZpb3VzU2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgaW50IHNlbGVjdGVkTm9kZUlkID0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpOwotICAgICAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gVXBkYXRlIHRoZSBwZXJzcGVjdGl2ZS4KLTwlCi0gICAgICAgICBpZiAocHJldmlvdXNTZWxlY3RlZE5vZGUgIT0gbnVsbCAmJiBwcmV2aW91c1NlbGVjdGVkTm9kZS5pc1Zpc2libGUoKSkKLSAgICAgICAgIHsKLSU+Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4uYWx0ZXJJbWFnZSgnPCU9cHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQocHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkpKSU+Jyk7Ci08JQotICAgICAgICAgfQotICAgICAgICAgU3RyaW5nIHNlbGVjdGVkTm9kZUFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotJT4KLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5zZWxlY3ROb2RlKCc8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoc2VsZWN0ZWROb2RlLmdldE9wZW5JbWFnZVBhdGgoKSkpJT4nKTsKLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbi5oYXNoID0gJyM8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nOwotPCUKLSAgICAgICB9Ci0gICAgICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08JQotICAgICAgIH0KLSU+Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci08L2JvZHk+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZjE5ZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBQZXJzcGVjdGl2ZSBjdXJyZW50UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IFVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAoIWFjdGlvblJlc3VsdCkKLSAgIHsKLSAgICAgaWYgKGFjdGlvbi5pc1N0YWxlQnJlYWRDcnVtYigpKQotICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFJlcnVuIHRoZSBoaXN0b3J5IGFjdGlvbiB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIGl0ZW0uCi0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXROZXh0SGlzdG9yeUFjdGlvbkxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIGlmIChhY3Rpb24ucmVxdWlyZXNTdGF0dXNVcGRhdGUoKSkKLSAgICAgewotICAgICAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICAgICBpZiAoc3RhdHVzQ29udGVudFZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gVXBkYXRlIHRoZSBzdGF0dXMgY29udGVudCB3aXRoIGFueSBtZXNzYWdlcyBhcmlzaW5nIGZyb20gdGhpcyBhY3Rpb24uCi0gIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PiAgCi08JSAgICAKLSAgICAgICB9Ci0gICAgIH0gCi0gICAgICAgIAotICAgICBTdHJpbmcgdHJlZUNvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgICAgU3RyaW5nIHByb3BlcnRpZXNDb250YWluZXJWYXIgPSBhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICAgICBpZiAoYWN0aW9uLnJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoKCkpCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICAgICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgLy8gUmVsb2FkIHRoZSBuYXZpZ2F0b3IgdHJlZSB2aWV3IHRvIHNob3cgdGhlIHN0cnVjdHVyYWwgY2hhbmdlLgotICAgIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRUcmVlQ29udGVudFBhZ2UoKSkpJT4iOwotICB9Ci0gIGVsc2UKLSAgewotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKSkpJT4iOwotICB9Ci08JQotICAgICAgIH0KLSAgICAgICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08JQotICAgICAgIH0KLSU+Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgICAgZWxzZSBpZiAoYWN0aW9uLnJlcXVpcmVzTm9kZVNlbGVjdGlvbigpKQotICAgICB7Ci0gICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBhY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICBOb2RlIHByZXZpb3VzU2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0UHJldmlvdXNTZWxlY3RlZE5vZGUoKTsKLSAgICAgICBpbnQgc2VsZWN0ZWROb2RlSWQgPSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgICAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci0gIC8vIFVwZGF0ZSB0aGUgbmF2aWdhdG9yIHRyZWUgdG8gc2hvdyB0aGUgc2VsZWN0aW9uLgotPCUKLSAgICAgICAgIGlmIChwcmV2aW91c1NlbGVjdGVkTm9kZSAhPSBudWxsKQotICAgICAgICAgewotJT4KLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5hbHRlckltYWdlKCc8JT1wcmV2aW91c1NlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCklPicsJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChwcmV2aW91c1NlbGVjdGVkTm9kZS5nZXRDbG9zZWRJbWFnZVBhdGgoKSkpJT4nKTsKLTwlCi0gICAgICAgICB9Ci0gICAgICAgICBTdHJpbmcgc2VsZWN0ZWROb2RlQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0lPgotICA8JT10cmVlQ29udGVudFZhciU+LnNlbGVjdE5vZGUoJzwlPXNlbGVjdGVkTm9kZUFuY2hvck5hbWUlPicsJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZE5vZGUuZ2V0T3BlbkltYWdlUGF0aCgpKSklPicpOwotICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uLmhhc2ggPSAnIzwlPXNlbGVjdGVkTm9kZUFuY2hvck5hbWUlPic7Ci08JQotICAgICAgIH0KLSAgICAgICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci0gIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwlCi0gICAgICAgfQotJT4KLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBlbHNlIGlmIChhY3Rpb24ucmVxdWlyZXNWaWV3U2VsZWN0aW9uKCkpCi0gICAgIHsKLSAgICAgICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gVXBkYXRlIHRoZSBwcm9wZXJ0aWVzIGNvbnRhaW5lciB0byBzaG93IHRoZSB2aWV3LgotICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgfQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIFN0cmluZyBwcm9wZXJ0aWVzQ29udGVudFZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpOwotICAgICAgIFRvb2wgdG9vbCA9IGFjdGlvbi5nZXRTZWxlY3RlZFZpZXdUb29sKCk7Ci0gICAgICAgaWYgKHRvb2wgPT0gbnVsbCkKLSAgICAgICAgIHRvb2wgPSBhY3Rpb24uZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgaWYgKHRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgIHsKLSAgICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGVudFZhciAhPSBudWxsKQotICAgICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBVcGRhdGUgdGhlIHByb3BlcnRpZXMgY29udGVudCB3aXRoIHRoZSB0b29sJ3MgZm9ybS4KLSAgPCU9cHJvcGVydGllc0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodG9vbC5nZXRGb3JtTGluaygpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgICB9Ci0gICAgICAgfQotICAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgICBpZiAoIWFjdGlvbi5pc0hpc3RvcnlBY3Rpb24oKSkKLSAgICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gUnVuIHRoZSB0b29sJ3MgYWN0aW9uIG9ubHkgaWYgaXQgaXMgbm90IGZyb20gdGhlIGhpc3RvcnkuCi0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRvb2wuZ2V0QWN0aW9uTGluaygpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgICB9Ci0gICAgICAgICBlbHNlCi0gICAgICAgICB7Ci0gICAgICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGVudFZhciAhPSBudWxsKQotICAgICAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIDwlPXByb3BlcnRpZXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgfQotICAgICB9Ci0gICB9Ci0lPgotPC9ib2R5PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZXNzaW9uVGltZWRPdXQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1Nlc3Npb25UaW1lZE91dC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZjhlZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1Nlc3Npb25UaW1lZE91dC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCwyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgJT4KLSAgPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIi93c2V4cGxvcmVyL2Nzcy90cmVldmlldy5jc3MiKSU+Ij4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCIvd3NleHBsb3Jlci9jc3Mvd2luZG93cy5jc3MiKSU+Ij4KLTwvaGVhZD4KLTxib2R5PgotPGNlbnRlcj4KLTwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1NFU1NJT05fVElNRURfT1VUIiklPgotPGJyPgotPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUkVTVEFSVF9TRVNTSU9OIiklPgotPC9jZW50ZXI+Ci08YnI+Ci08L2JvZHk+Ci08L2h0bWw+ICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2hvd1BlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjcxZDQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmdCdWZmZXIgZnJhbWVzZXRzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIGZyYW1lc2V0c0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRGcmFtZXNldHNGaWxlKCkpOwotICAgCi0gICBTdHJpbmdCdWZmZXIgZnJhbWVzZXRzRm9ybSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIGZyYW1lc2V0c0Zvcm0uYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpKTsKLSAgIAotICAgaW50IHRhcmdldFBlcnNwZWN0aXZlSWQ7Ci0gICBib29sZWFuIGlzSGlzdG9yeTsKLSAgIHRyeQotICAgewotICAgICB0YXJnZXRQZXJzcGVjdGl2ZUlkID0gSW50ZWdlci5wYXJzZUludChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpKTsKLSAgICAgaXNIaXN0b3J5ID0gKCIxIi5lcXVhbHMocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkpKTsKLSAgIH0KLSAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgIHsKLSAgICAgdGFyZ2V0UGVyc3BlY3RpdmVJZCA9IEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJOwotICAgICBpc0hpc3RvcnkgPSBmYWxzZTsKLSAgIH0KLSAgIAotICAgaWYgKGNvbnRyb2xsZXIuaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuaygpKQotICAgewotICAgICBjb250cm9sbGVyLmVuYWJsZVBlcnNwZWN0aXZlQ29udGVudEJsYW5rKGZhbHNlKTsKLSAgICAgY29udHJvbGxlci5hZGRUb0hpc3RvcnkoY3VycmVudFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlSWQoKSxTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLHRydWUpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYW1lc2V0c0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtQWN0aW9uLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGlzSGlzdG9yeSkpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYW1lc2V0c0Zvcm0udG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgotPCUKLSAgIH0KLSU+ICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzE5YmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBVVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBhbmVzRmlsZSgpKTsKLSU+ICAgICAKLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmICghYWN0aW9uUmVzdWx0KQotICAgewotICAgICBpZiAoYWN0aW9uLmlzU3RhbGVCcmVhZENydW1iKCkpCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gUmVydW4gdGhlIGhpc3RvcnkgYWN0aW9uIHRvIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgaXRlbS4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldE5leHRIaXN0b3J5QWN0aW9uTGluaygpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIC8vIFVwZGF0ZSB0aGUgcGVyc3BlY3RpdmUuCi0gICAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250ZW50UGFnZSgpKSklPiI7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGlmIChhY3Rpb24ucmVxdWlyZXNOb2RlU2VsZWN0aW9uKCkpCi0gICAgIHsKLSAgICAgICBTdHJpbmcgcHJvcGVydGllc0NvbnRhaW5lclZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIC8vIFVwZGF0ZSB0aGUgcHJvcGVydGllcyBjb250YWluZXIuCi0gICAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotICB9Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0lPgotPC9ib2R5PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9WYWxpZGF0ZUVkaXRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1ZhbGlkYXRlRWRpdEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYjA0ZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1ZhbGlkYXRlRWRpdEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gKEltcG9ydFRvV29ya2JlbmNoQWN0aW9uKXNlc3Npb24uZ2V0QXR0cmlidXRlKEFjdGlvbklucHV0cy5JTVBPUlRfQUNUSU9OKTsKLSAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0aW9uLnZhbGlkYXRlRWRpdCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoPCU9cmVzdWx0JT4pCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uZ2V0QWN0aW9uTGluaygpKSklPiI7Ci0gIGVsc2UKLSAgewotPCUgIAotICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+ICAgIAotICAgIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0lPgotICB9Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4gCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1dyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMyOWEyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIGFjdGlvbiA9IChJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbilzZXNzaW9uLmdldEF0dHJpYnV0ZShBY3Rpb25JbnB1dHMuSU1QT1JUX0FDVElPTik7Ci0gICBhY3Rpb24ucnVuKCk7Ci0gICBTdHJpbmcgc3RhdHVzQ29udGVudFZhciA9IGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICBpZiAoc3RhdHVzQ29udGVudFZhciAhPSBudWxsKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICA8JT1zdGF0dXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4gIAotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+IApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl9icm93c2VyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfYnJvd3Nlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMGMzYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl9icm93c2VyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPgotICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVElUTEVfQ0FMRU5EQVJfQlJPV1NFUiIpJT4KLSAgPC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgbGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImNhbGVuZGFyX3Rvb2xiYXIuanNwPyIpOwotICAgbGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0lPiAgIAotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5DQUxFTkRBUl9UT09MQkFSJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBTEVOREFSX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChsaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08JQotICAgbGluay5zZXRMZW5ndGgoMCk7Ci0gICBsaW5rLmFwcGVuZCgiY2FsZW5kYXJfY29udGVudC5qc3A/Iik7Ci0gICBsaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgIGxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKS5hcHBlbmQoJz0nKS5hcHBlbmQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpKTsKLSU+ICAgICAKLSAgPGZyYW1lIG5hbWU9IjwlPUZyYW1lTmFtZXMuQ0FMRU5EQVJfQ09OVEVOVCU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQUxFTkRBUl9DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQobGluay50b1N0cmluZygpKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGU0NmU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgaW50IGNhbGVuZGFyVHlwZSA9IEludGVnZXIucGFyc2VJbnQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FMRU5EQVJfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy9jYWxlbmRhci5jc3MiKSklPiI+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBkYXlzID0gbmV3IEFycmF5KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX1NVTkRBWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9NT05EQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfVFVFU0RBWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9XRURORVNEQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfVEhVUlNEQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfRlJJREFZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX1NBVFVSREFZIikpJT4iKTsKLSAgdmFyIG1vbnRocyA9IG5ldyBBcnJheSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9KQU5VQVJZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZFQlJVQVJZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BUkNIIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FQUklMIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9KVU5FIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0pVTFkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQVVHVVNUIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUFRFTUJFUiIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PQ1RPQkVSIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05PVkVNQkVSIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFQ0VNQkVSIikpJT4iKTsKLSAgdmFyIGVuZ01vbnRocyA9IG5ldyBBcnJheSgiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiKTsKLSAgdmFyIGN1cnJlbnREYXRlOwotICB2YXIgY2FsZW5kYXJCb2R5U2V0ID0gZmFsc2U7Ci0gIHZhciBjYWxlbmRhckJvZHk7Ci0gIHZhciBzYXZlZFllYXJUZXh0VmFsdWUgPSAiIjsKLQotPCUKLSAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMKLSAgIC8vIHRpbWUgICAgICAgLSBISDpNTTpTU1suU1NTXQotICAgLy8geWVhciAgICAgICAtIFkqCi0gICAvLyBkYXRlICAgICAgIC0gWVlZWSstTU0tREQKLSAgIC8vIGRhdGVUaW1lICAgLSBZWVlZKy1NTS1ERFRISDpNTTpTU1suU1NTXVoKLSAgIC8vIGdZZWFyTW9udGggLSBZWVlZKy1NTSAKLSAgIC8vIGdEYXkgICAgICAgLSAtLS1ERAotICAgLy8gZ01vbnRoRGF5ICAtIC0tTU0tREQKLSU+Ci0gIHZhciB0aW1lUmVnRXhwID0gL14oXGR7Mn0pOihcZHsyfSk6KFxkezJ9KShcLlxkezN9KT8kLzsKLSAgdmFyIHllYXJSZWdFeHAgPSAvXihcZCopJC87Ci0gIHZhciBkYXRlUmVnRXhwID0gL14oXGR7NCx9KS0oXGR7Mn0pLShcZHsyfSkkLzsKLSAgdmFyIGRhdGVUaW1lUmVnRXhwID0gL14oXGR7NCx9KS0oXGR7Mn0pLShcZHsyfSlUKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkoXC5cZHszfSk/WiQvOwotICB2YXIgZ1llYXJNb250aFJlZ0V4cCA9IC9eKFxkezQsfSktKFxkezJ9KSQvOwotICB2YXIgZ0RheVJlZ0V4cCA9IC9eLXszfShcZHsyfSkkLzsKLSAgdmFyIGdNb250aERheVJlZ0V4cCA9IC9eLXsyfShcZHsyfSktKFxkezJ9KSQvOwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlWWVhclN0cmluZyh5ZWFyU3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIHllYXJSZWdFeHAudGVzdCh5ZWFyU3RyaW5nKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldFRpbWVQYXJhbWV0ZXJzKHRpbWVTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gdGltZVJlZ0V4cC5leGVjKHRpbWVTdHJpbmcpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0RGF0ZVBhcmFtZXRlcnMoZGF0ZVN0cmluZykKLSAgewotICAgIHJldHVybiBkYXRlUmVnRXhwLmV4ZWMoZGF0ZVN0cmluZyk7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXREYXRlVGltZVBhcmFtZXRlcnMoZGF0ZVRpbWVTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gZGF0ZVRpbWVSZWdFeHAuZXhlYyhkYXRlVGltZVN0cmluZyk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGdldEdZZWFyTW9udGhQYXJhbWV0ZXJzKGdZZWFyTW9udGhTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gZ1llYXJNb250aFJlZ0V4cC5leGVjKGdZZWFyTW9udGhTdHJpbmcpOwotICB9Ci0gIAotICBmdW5jdGlvbiBnZXRHRGF5UGFyYW1ldGVycyhnRGF5U3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIGdEYXlSZWdFeHAuZXhlYyhnRGF5U3RyaW5nKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZ2V0R01vbnRoRGF5UGFyYW1ldGVycyhnTW9udGhEYXlTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gZ01vbnRoRGF5UmVnRXhwLmV4ZWMoZ01vbnRoRGF5U3RyaW5nKTsKLSAgfQotICAKLTwlCi0gICAvLyBISDpNTTpTU1suU1NTXQotJT4KLSAgZnVuY3Rpb24gc2VyaWFsaXplVGltZShob3VycyxtaW51dGVzLHNlY29uZHMsbWlsbGlzZWNvbmRzKQotICB7Ci0gICAgdmFyIHRpbWVTdHJpbmcgPSAiIjsKLSAgICBpZiAoaG91cnMgPCAxMCkKLSAgICAgIHRpbWVTdHJpbmcgKz0gIjAiOwotICAgIHRpbWVTdHJpbmcgKz0gaG91cnMgKyAiOiI7Ci0gICAgaWYgKG1pbnV0ZXMgPCAxMCkKLSAgICAgIHRpbWVTdHJpbmcgKz0gIjAiOwotICAgIHRpbWVTdHJpbmcgKz0gbWludXRlcyArICI6IjsKLSAgICBpZiAoc2Vjb25kcyA8IDEwKQotICAgICAgdGltZVN0cmluZyArPSAiMCI7Ci0gICAgdGltZVN0cmluZyArPSBzZWNvbmRzOwotICAgIGlmIChtaWxsaXNlY29uZHMgPiAwKQotICAgIHsKLSAgICAgIHRpbWVTdHJpbmcgKz0gIi4iOwotICAgICAgaWYgKG1pbGxpc2Vjb25kcyA8IDEwMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKG1pbGxpc2Vjb25kcyA8IDEwKQotICAgICAgICAgIHRpbWVTdHJpbmcgKz0gIjAwIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRpbWVTdHJpbmcgKz0gIjAiOwotICAgICAgfQotICAgICAgdGltZVN0cmluZyArPSBtaWxsaXNlY29uZHM7Ci0gICAgfQotICAgIHJldHVybiB0aW1lU3RyaW5nOwotICB9Ci0KLTwlCi0gICAvLyBZWVlZKy1NTQotJT4gICAKLSAgZnVuY3Rpb24gc2VyaWFsaXplR1llYXJNb250aChmdWxsWWVhcixtb250aCkKLSAgewotICAgIHZhciBnWWVhck1vbnRoU3RyaW5nID0gIiI7Ci0gICAgaWYgKGZ1bGxZZWFyIDwgMTAwMCkKLSAgICB7Ci0gICAgICBpZiAoZnVsbFllYXIgPCAxMDApCi0gICAgICB7Ci0gICAgICAgIGlmIChmdWxsWWVhciA8IDEwKQotICAgICAgICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gIjAwMCI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnWWVhck1vbnRoU3RyaW5nICs9ICIwMCI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gIjAiOwotICAgIH0KLSAgICBnWWVhck1vbnRoU3RyaW5nICs9IGZ1bGxZZWFyKyItIjsKLSAgICBpZiAobW9udGggPCAxMCkKLSAgICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gIjAiOwotICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gbW9udGg7Ci0gICAgcmV0dXJuIGdZZWFyTW9udGhTdHJpbmc7ICAgIAotICB9Ci0gIAotPCUKLSAgIC8vIFlZWVkrLU1NLURECi0lPgotICBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGZ1bGxZZWFyLG1vbnRoLGRhdGUpCi0gIHsKLSAgICB2YXIgZGF0ZVN0cmluZyA9IHNlcmlhbGl6ZUdZZWFyTW9udGgoZnVsbFllYXIsbW9udGgpICsgIi0iOwotICAgIGlmIChkYXRlIDwgMTApCi0gICAgICBkYXRlU3RyaW5nICs9ICIwIjsKLSAgICBkYXRlU3RyaW5nICs9IGRhdGU7Ci0gICAgcmV0dXJuIGRhdGVTdHJpbmc7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNlcmlhbGl6ZUdEYXkoZGF0ZSkKLSAgewotICAgIHZhciBnRGF5U3RyaW5nID0gIi0tLSI7Ci0gICAgaWYgKGRhdGUgPCAxMCkKLSAgICAgIGdEYXlTdHJpbmcgKz0gIjAiOwotICAgIGdEYXlTdHJpbmcgKz0gZGF0ZTsKLSAgICByZXR1cm4gZ0RheVN0cmluZzsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2VyaWFsaXplR01vbnRoRGF5KG1vbnRoLGRhdGUpCi0gIHsKLSAgICB2YXIgZ01vbnRoRGF5U3RyaW5nID0gIi0tIjsKLSAgICBpZiAobW9udGggPCAxMCkKLSAgICAgIGdNb250aERheVN0cmluZyArPSAiMCI7Ci0gICAgZ01vbnRoRGF5U3RyaW5nICs9IG1vbnRoKyItIjsKLSAgICBpZiAoZGF0ZSA8IDEwKQotICAgICAgZ01vbnRoRGF5U3RyaW5nICs9ICIwIjsKLSAgICBnTW9udGhEYXlTdHJpbmcgKz0gZGF0ZTsKLSAgICByZXR1cm4gZ01vbnRoRGF5U3RyaW5nOwotICB9ICAgIAotCi0gIGZ1bmN0aW9uIHNldERhdGVVc2luZ0dEYXlQYXJhbWV0ZXJzKGdEYXlQYXJhbWV0ZXJzLGRhdGVPYmopCi0gIHsKLSAgICBpZiAoZ0RheVBhcmFtZXRlcnMgIT0gbnVsbCkKLSAgICAgIGRhdGVPYmouc2V0RGF0ZShnRGF5UGFyYW1ldGVyc1sxXSk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERhdGVVc2luZ0dNb250aERheVBhcmFtZXRlcnMoZ01vbnRoRGF5UGFyYW1ldGVycyxkYXRlT2JqKQotICB7Ci0gICAgaWYgKGdNb250aERheVBhcmFtZXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkYXRlT2JqLnNldE1vbnRoKGdNb250aERheVBhcmFtZXRlcnNbMV0tMSk7Ci0gICAgICBkYXRlT2JqLnNldERhdGUoZ01vbnRoRGF5UGFyYW1ldGVyc1syXSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREYXRlVXNpbmdHWWVhck1vbnRoUGFyYW1ldGVycyhnWWVhck1vbnRoUGFyYW1ldGVycyxkYXRlT2JqKQotICB7Ci0gICAgaWYgKGdZZWFyTW9udGhQYXJhbWV0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcihnWWVhck1vbnRoUGFyYW1ldGVyc1sxXSk7Ci0gICAgICBkYXRlT2JqLnNldE1vbnRoKGdZZWFyTW9udGhQYXJhbWV0ZXJzWzJdLTEpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGF0ZVVzaW5nRGF0ZVBhcmFtZXRlcnMoZGF0ZVBhcmFtZXRlcnMsZGF0ZU9iaikKLSAgewotICAgIGlmIChkYXRlUGFyYW1ldGVycyAhPSBudWxsKQotICAgIHsKLSAgICAgIHNldERhdGVVc2luZ0dZZWFyTW9udGhQYXJhbWV0ZXJzKGRhdGVQYXJhbWV0ZXJzLGRhdGVPYmopOwotICAgICAgZGF0ZU9iai5zZXREYXRlKGRhdGVQYXJhbWV0ZXJzWzNdKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREYXRlVXNpbmdEYXRlVGltZVBhcmFtZXRlcnMoZGF0ZVRpbWVQYXJhbWV0ZXJzLGRhdGVPYmopCi0gIHsKLSAgICBpZiAoZGF0ZVRpbWVQYXJhbWV0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgc2V0RGF0ZVVzaW5nRGF0ZVBhcmFtZXRlcnMoZGF0ZVRpbWVQYXJhbWV0ZXJzLGRhdGVPYmopOwotICAgICAgZGF0ZU9iai5zZXRVVENIb3VycyhkYXRlVGltZVBhcmFtZXRlcnNbNF0pOwotICAgICAgZGF0ZU9iai5zZXRVVENNaW51dGVzKGRhdGVUaW1lUGFyYW1ldGVyc1s1XSk7Ci0gICAgICBkYXRlT2JqLnNldFVUQ1NlY29uZHMoZGF0ZVRpbWVQYXJhbWV0ZXJzWzZdKTsKLSAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlVGltZVBhcmFtZXRlcnNbN107Ci0gICAgICBpZiAobWlsbGlzZWNvbmRzLmxlbmd0aCA+IDApCi08JQotICAgLy8gRWxpbWluYXRlIHRoZSBkZWNpbWFsIHBvaW50Ci0lPgotICAgICAgICBkYXRlT2JqLnNldFVUQ01pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMuc3Vic3RyKDEpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZGF0ZU9iai5zZXRVVENNaWxsaXNlY29uZHMoMCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGF0ZVVzaW5nVGltZVBhcmFtZXRlcnModGltZVBhcmFtZXRlcnMsZGF0ZU9iaikKLSAgewotICAgIGlmICh0aW1lUGFyYW1ldGVycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGRhdGVPYmouc2V0SG91cnModGltZVBhcmFtZXRlcnNbMV0pOwotICAgICAgZGF0ZU9iai5zZXRNaW51dGVzKHRpbWVQYXJhbWV0ZXJzWzJdKTsKLSAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyh0aW1lUGFyYW1ldGVyc1szXSk7Ci0gICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGltZVBhcmFtZXRlcnNbNF07Ci0gICAgICBpZiAobWlsbGlzZWNvbmRzLmxlbmd0aCA+IDApCi08JQotICAgLy8gRWxpbWluYXRlIHRoZSBkZWNpbWFsIHBvaW50Ci0lPgotICAgICAgICBkYXRlT2JqLnNldE1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMuc3Vic3RyKDEpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZGF0ZU9iai5zZXRNaWxsaXNlY29uZHMoMCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gaW5pdCgpCi0gIHsKLSAgICB2YXIgZCA9IG5ldyBEYXRlKCk7Ci08JQotICAgc3dpdGNoIChjYWxlbmRhclR5cGUpCi0gICB7Ci0gICAgIGNhc2UgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURToKLSU+Ci0gICAgc2V0RGF0ZVVzaW5nRGF0ZVBhcmFtZXRlcnMoZ2V0RGF0ZVBhcmFtZXRlcnModG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSksZCk7Ci08JQotICAgICAgIGJyZWFrOwotICAgICBjYXNlIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FOgotJT4KLSAgICBzZXREYXRlVXNpbmdEYXRlVGltZVBhcmFtZXRlcnMoZ2V0RGF0ZVRpbWVQYXJhbWV0ZXJzKHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUpLGQpOwotPCUKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HWUVBUk1PTlRIOgotJT4KLSAgICBzZXREYXRlVXNpbmdHWWVhck1vbnRoUGFyYW1ldGVycyhnZXRHWWVhck1vbnRoUGFyYW1ldGVycyh0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlKSxkKTsKLTwlICAgICAKLSAgICAgY2FzZSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HREFZOgotJT4KLSAgICBzZXREYXRlVXNpbmdHRGF5UGFyYW1ldGVycyhnZXRHRGF5UGFyYW1ldGVycyh0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlKSxkKTsKLTwlICAgCi0gICAgIGNhc2UgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR01PTlRIREFZOgotJT4KLSAgICBzZXREYXRlVXNpbmdHTW9udGhEYXlQYXJhbWV0ZXJzKGdldEdNb250aERheVBhcmFtZXRlcnModG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSksZCk7Ci08JSAgICAgICAKLSAgICAgZGVmYXVsdDoKLSAgICAgICBicmVhazsKLSAgIH0KLSU+Ci0gICAgZ2VuZXJhdGVDYWxlbmRhcihkKTsKLSAgICB2YXIgbW9udGhTZWxlY3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIik7Ci0gICAgZm9yICh2YXIgaT0wO2k8bW9udGhzLmxlbmd0aDtpKyspCi0gICAgICBtb250aFNlbGVjdG9yLm9wdGlvbnNbaV0gPSBuZXcgT3B0aW9uKG1vbnRoc1tpXSxpKTsKLSAgICBnZW5lcmF0ZUNhbGVuZGFyKGQpOwotICB9Ci0KLSAgZnVuY3Rpb24gaW5pdENhbGVuZGFySGVhZGVyKHRhYmxlKQotICB7Ci0gICAgY2FsZW5kYXJCb2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEJPRFkiKTsKLSAgICB2YXIgaGVhZGVyUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxkYXlzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7Ci0gICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF5c1tpXSkpOwotICAgICAgaGVhZGVyLmNsYXNzTmFtZT0iaGVhZGVyY29sb3IiOwotICAgICAgaGVhZGVyUm93LmFwcGVuZENoaWxkKGhlYWRlcik7Ci0gICAgfQotICAgIGNhbGVuZGFyQm9keS5hcHBlbmRDaGlsZChoZWFkZXJSb3cpOwotICAgIHRhYmxlLmFwcGVuZENoaWxkKGNhbGVuZGFyQm9keSk7Ci0gICAgY2FsZW5kYXJCb2R5U2V0ID0gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdlbmVyYXRlQ2FsZW5kYXIoZGF0ZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxlbmRhciIpOwotICAgIHZhciBkYXRlRGF0ZSA9IGRhdGUuZ2V0RGF0ZSgpOwotICAgIHZhciBkYXRlTW9udGggPSBkYXRlLmdldE1vbnRoKCk7Ci0gICAgdmFyIGRhdGVGdWxsWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKLSAgICB2YXIgZGF0ZUl0ZXJhdG9yID0gbmV3IERhdGUoKTsKLSAgICBkYXRlSXRlcmF0b3Iuc2V0VGltZShEYXRlLnBhcnNlKGVuZ01vbnRoc1tkYXRlTW9udGhdKyIgMSwgIitkYXRlRnVsbFllYXIpKTsKLSAgICB2YXIgc3RhcnRpbmdEYXRlID0gZGF0ZUl0ZXJhdG9yLmdldERhdGUoKTsgLy8gMSwyLDMuLi4KLSAgICB2YXIgc3RhcnRpbmdEYXkgPSBkYXRlSXRlcmF0b3IuZ2V0RGF5KCk7IC8vIFN1bixNb24sVHVlcy4uLgotICAgIGNsZWFyQ2FsZW5kYXIoKTsKLSAgICBmb3IgKHZhciByb3dzPTA7cm93czw2O3Jvd3MrKykKLSAgICB7Ci0gICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICAgIGZvciAodmFyIGNvbHVtbnM9MDtjb2x1bW5zPGRheXMubGVuZ3RoO2NvbHVtbnMrKykKLSAgICAgIHsKLSAgICAgICAgdmFyIGNvbHVtbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgICAgIHZhciBkYXRlSXRlcmF0b3JEYXRlID0gZGF0ZUl0ZXJhdG9yLmdldERhdGUoKTsKLSAgICAgICAgdmFyIGRhdGVJdGVyYXRvck1vbnRoID0gZGF0ZUl0ZXJhdG9yLmdldE1vbnRoKCk7Ci0gICAgICAgIHZhciBkYXRlSXRlcmF0b3JGdWxsWWVhciA9IGRhdGVJdGVyYXRvci5nZXRGdWxsWWVhcigpOwotICAgICAgICBjb2x1bW4ud2lkdGggPSAyNDsKLSAgICAgICAgY29sdW1uLmhlaWdodCA9IDI0OwotICAgICAgICBjb2x1bW4uYWxpZ24gPSAiY2VudGVyIjsKLSAgICAgICAgY29sdW1uLnZhbGlnbiA9ICJjZW50ZXIiOwotICAgICAgICBjb2x1bW4uY2xhc3NOYW1lID0gImNhbGVuZGFydGFibGVjZWxscyI7Ci0gICAgICAgIGlmICgoZGF0ZUl0ZXJhdG9yRGF0ZSA9PSBzdGFydGluZ0RhdGUgJiYgY29sdW1ucyA8IHN0YXJ0aW5nRGF5KSB8fCAoZGF0ZUl0ZXJhdG9yTW9udGggIT0gZGF0ZU1vbnRoKSkKLSAgICAgICAgICBjb2x1bW4uaW5uZXJIVE1MID0gIiZuYnNwOyI7Ci0gICAgICAgIGVsc2UgaWYgKGRhdGVJdGVyYXRvck1vbnRoID09IGRhdGVNb250aCkKLSAgICAgICAgewotICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgICAgICAgIHN3aXRjaCAoPCU9Y2FsZW5kYXJUeXBlJT4pCi0gICAgICAgICAgewotICAgICAgICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFJT46Ci0gICAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OnRyYW5zZmVyRGF0ZSgiK2RhdGVJdGVyYXRvckRhdGUrIikiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUlPjoKLSAgICAgICAgICAgICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6dHJhbnNmZXJEYXRlVGltZSgiK2RhdGVJdGVyYXRvckRhdGUrIikiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR1lFQVJNT05USCU+OgotICAgICAgICAgICAgICBsaW5rLmhyZWYgPSAiamF2YXNjcmlwdDp0cmFuc2ZlckdZZWFyTW9udGgoKSI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HREFZJT46Ci0gICAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OnRyYW5zZmVyR0RheSgiK2RhdGVJdGVyYXRvckRhdGUrIikiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR01PTlRIREFZJT46Ci0gICAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OnRyYW5zZmVyR01vbnRoRGF5KCIrZGF0ZUl0ZXJhdG9yRGF0ZSsiKSI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRhdGVJdGVyYXRvckRhdGUpKTsKLSAgICAgICAgICBjb2x1bW4uYXBwZW5kQ2hpbGQobGluayk7Ci0gICAgICAgICAgaWYgKGRhdGVJdGVyYXRvckRhdGUgPT0gZGF0ZURhdGUgJiYgZGF0ZUl0ZXJhdG9yRnVsbFllYXIgPT0gZGF0ZUZ1bGxZZWFyKQotICAgICAgICAgICAgY29sdW1uLmNsYXNzTmFtZSA9ICJ0b2RheXRhYmxlY2VsbCI7Ci0gICAgICAgICAgZGF0ZUl0ZXJhdG9yRGF0ZSsrOwotICAgICAgICAgIGRhdGVJdGVyYXRvci5zZXRUaW1lKERhdGUucGFyc2UoZW5nTW9udGhzW2RhdGVJdGVyYXRvck1vbnRoXSsiICIrZGF0ZUl0ZXJhdG9yRGF0ZSsiLCAiK2RhdGVJdGVyYXRvci5nZXRGdWxsWWVhcigpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcm93LmFwcGVuZENoaWxkKGNvbHVtbik7Ci0gICAgICB9Ci0gICAgICBjYWxlbmRhckJvZHkuYXBwZW5kQ2hpbGQocm93KTsKLSAgICB9Ci0gICAgdmFyIG1vbnRoU2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpOwotICAgIGZvciAodmFyIGk9MDtpPG1vbnRoU2VsZWN0b3Iub3B0aW9ucy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChtb250aFNlbGVjdG9yLm9wdGlvbnNbaV0udmFsdWUgPT0gZGF0ZU1vbnRoKQotICAgICAgewotICAgICAgICBtb250aFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggPSBpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmFyIHllYXJUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0Iik7Ci0gICAgeWVhclRleHQudmFsdWUgPSBkYXRlRnVsbFllYXI7Ci0gICAgc2F2ZWRZZWFyVGV4dFZhbHVlID0geWVhclRleHQudmFsdWU7Ci08JQotICAgaWYgKGNhbGVuZGFyVHlwZSA9PSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSkKLSAgIHsKLSU+Ci0gICAgdmFyIHRpbWVUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRpbWVUZXh0Iik7Ci0gICAgdGltZVRleHQudmFsdWUgPSBzZXJpYWxpemVUaW1lKGRhdGUuZ2V0SG91cnMoKSxkYXRlLmdldE1pbnV0ZXMoKSxkYXRlLmdldFNlY29uZHMoKSxkYXRlLmdldE1pbGxpc2Vjb25kcygpKTsKLTwlCi0gICB9Ci0lPgotICAgIGN1cnJlbnREYXRlID0gZGF0ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsZWFyQ2FsZW5kYXIoKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbGVuZGFyIik7Ci0gICAgaWYgKCFjYWxlbmRhckJvZHlTZXQpCi0gICAgICBpbml0Q2FsZW5kYXJIZWFkZXIodGFibGUpOwotICAgIGZvciAodmFyIGk9MTtpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB0YWJsZS5kZWxldGVSb3coaSk7Ci0gICAgICBpLS07Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdXBkYXRlQ2FsZW5kYXIobmV3TW9udGgsbmV3RnVsbFllYXIpCi0gIHsKLSAgICB2YXIgZCA9IG5ldyBEYXRlKCk7Ci0gICAgaWYgKG5ld01vbnRoID4gbW9udGhzLmxlbmd0aCkKLSAgICB7Ci0gICAgICBuZXdGdWxsWWVhcisrOwotICAgICAgbmV3TW9udGggPSAwOwotICAgIH0KLSAgICBlbHNlIGlmIChuZXdNb250aCA8IDApCi0gICAgewotICAgICAgbmV3RnVsbFllYXItLTsKLSAgICAgIG5ld01vbnRoID0gbW9udGhzLmxlbmd0aC0xOwotICAgIH0KLSAgICBkLnNldE1vbnRoKG5ld01vbnRoKTsKLSAgICBkLnNldEZ1bGxZZWFyKG5ld0Z1bGxZZWFyKTsKLTwlCi0gICBpZiAoY2FsZW5kYXJUeXBlID09IEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FKQotICAgewotJT4KLSAgICBzZXREYXRlVXNpbmdUaW1lUGFyYW1ldGVycyhnZXRUaW1lUGFyYW1ldGVycyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGltZVRleHQiKS52YWx1ZSksZCk7Ci08JQotICAgfQotJT4KLSAgICBnZW5lcmF0ZUNhbGVuZGFyKGQpOwotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvUHJldmlvdXNZZWFyKCkKLSAgewotICAgIHVwZGF0ZUNhbGVuZGFyKGN1cnJlbnREYXRlLmdldE1vbnRoKCksY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKS0xKQotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvUHJldmlvdXNNb250aCgpCi0gIHsKLSAgICB1cGRhdGVDYWxlbmRhcihjdXJyZW50RGF0ZS5nZXRNb250aCgpLTEsY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBqdW1wVG9OZXh0TW9udGgoKQotICB7Ci0gICAgdXBkYXRlQ2FsZW5kYXIoY3VycmVudERhdGUuZ2V0TW9udGgoKSsxLGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvTmV4dFllYXIoKQotICB7Ci0gICAgdXBkYXRlQ2FsZW5kYXIoY3VycmVudERhdGUuZ2V0TW9udGgoKSxjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpKzEpOwotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvVG9kYXkoKQotICB7Ci0gICAgZ2VuZXJhdGVDYWxlbmRhcihuZXcgRGF0ZSgpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldE5ld0RhdGUoKQotICB7Ci0gICAgdmFyIG1vbnRoU2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpOwotICAgIHZhciBuZXdNb250aCA9IG1vbnRoU2VsZWN0b3Iub3B0aW9uc1ttb250aFNlbGVjdG9yLnNlbGVjdGVkSW5kZXhdLnZhbHVlOwotICAgIHZhciBuZXdGdWxsWWVhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWFyVGV4dCIpLnZhbHVlOwotPCUKLSAgIC8vIFlZWVkrCi0lPgotICAgIHZhciBkID0gbmV3IERhdGUoKTsKLSAgICBpZiAodmFsaWRhdGVZZWFyU3RyaW5nKG5ld0Z1bGxZZWFyKSkKLSAgICB7Ci0gICAgICAvLyBUaGUgeWVhciBzdHJpbmcgY29udGFpbnMgb25seSBkaWdpdHMgYW5kIGlzIGhlbmNlIGEgdmFsaWQgeWVhci4KLSAgICAgIGQuc2V0RnVsbFllYXIobmV3RnVsbFllYXIpOwotICAgICAgZC5zZXRNb250aChuZXdNb250aCk7Ci0gICAgfQotICAgIGdlbmVyYXRlQ2FsZW5kYXIoZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVZZWFyVGV4dEtleVVwRXZlbnQoKQotICB7Ci0gICAgdmFyIGN1cnJlbnRZZWFyVGV4dFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0IikudmFsdWU7Ci0gICAgaWYgKGN1cnJlbnRZZWFyVGV4dFZhbHVlID09IHNhdmVkWWVhclRleHRWYWx1ZSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzZXROZXdEYXRlKCk7Ci0gIH0KLQotPCUKLSAgIC8vIFlZWVkrLU1NLURECi0lPgotICBmdW5jdGlvbiB0cmFuc2ZlckRhdGUoZGF0ZSkKLSAgewotICAgIHZhciBmdWxsWWVhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWFyVGV4dCIpLnZhbHVlOwotICAgIHZhciBtb250aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIikuc2VsZWN0ZWRJbmRleCsxOwotICAgIHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUgPSBzZXJpYWxpemVEYXRlKGZ1bGxZZWFyLG1vbnRoLGRhdGUpOwotICAgIHRvcC5vcGVuZXIuY2xvc2VDYWxlbmRhckJyb3dzZXIoKTsKLSAgfQotCi08JQotICAgLy8gWVlZWSstTU0tRERUSEg6TU06U1NbLlNTU11aCi0lPgotICBmdW5jdGlvbiB0cmFuc2ZlckRhdGVUaW1lKGRhdGUpCi0gIHsKLSAgICB2YXIgZnVsbFllYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieWVhclRleHQiKS52YWx1ZTsKLSAgICB2YXIgbW9udGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpLnNlbGVjdGVkSW5kZXgrMTsKLSAgICB2YXIgc2VyaWFsaXplZERhdGUgPSBzZXJpYWxpemVEYXRlKGZ1bGxZZWFyLG1vbnRoLGRhdGUpOwotICAgIHZhciBkID0gbmV3IERhdGUoKTsKLSAgICBzZXREYXRlVXNpbmdEYXRlUGFyYW1ldGVycyhnZXREYXRlUGFyYW1ldGVycyhzZXJpYWxpemVkRGF0ZSksZCk7Ci0gICAgdmFyIHRpbWVWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aW1lVGV4dCIpLnZhbHVlOwotICAgIHZhciB0aW1lUGFyYW1ldGVycyA9IGdldFRpbWVQYXJhbWV0ZXJzKHRpbWVWYWx1ZSk7Ci0gICAgaWYgKHRpbWVQYXJhbWV0ZXJzID09IG51bGwpCi0gICAgewotICAgICAgaWYgKCFjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9USU1FX0ZPUk1BVCIpKSU+IikpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc2V0RGF0ZVVzaW5nVGltZVBhcmFtZXRlcnModGltZVBhcmFtZXRlcnMsZCk7Ci0gICAgdG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSA9IHNlcmlhbGl6ZWREYXRlICsgIlQiICsgc2VyaWFsaXplVGltZShkLmdldFVUQ0hvdXJzKCksZC5nZXRVVENNaW51dGVzKCksZC5nZXRVVENTZWNvbmRzKCksZC5nZXRVVENNaWxsaXNlY29uZHMoKSkgKyAiWiI7Ci0gICAgdG9wLm9wZW5lci5jbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9Ci0gIAotPCUKLSAgIC8vIFlZWVkrLU1NCi0lPgotICBmdW5jdGlvbiB0cmFuc2ZlckdZZWFyTW9udGgoKQotICB7Ci0gICAgdmFyIGZ1bGxZZWFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0IikudmFsdWU7Ci0gICAgdmFyIG1vbnRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoU2VsZWN0b3IiKS5zZWxlY3RlZEluZGV4KzE7Ci0gICAgdmFyIHNlcmlhbGl6ZWRHWWVhck1vbnRoID0gc2VyaWFsaXplR1llYXJNb250aChmdWxsWWVhcixtb250aCk7Ci0gICAgdmFyIGQgPSBuZXcgRGF0ZSgpOwotICAgIHNldERhdGVVc2luZ0dZZWFyTW9udGhQYXJhbWV0ZXJzKGdldEdZZWFyTW9udGhQYXJhbWV0ZXJzKHNlcmlhbGl6ZWRHWWVhck1vbnRoKSxkKTsKLSAgICB0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlID0gc2VyaWFsaXplZEdZZWFyTW9udGg7Ci0gICAgdG9wLm9wZW5lci5jbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9ICAgICAKLSAgCi08JQotICAgLy8gLS0tREQKLSU+Ci0gIGZ1bmN0aW9uIHRyYW5zZmVyR0RheShkYXRlKSAgICAgCi0gIHsKLSAgICB0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlID0gc2VyaWFsaXplR0RheShkYXRlKTsKLSAgICB0b3Aub3BlbmVyLmNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gIH0KLTwlCi0gICAvLyAtLU1NLURECi0lPiAgCi0gIGZ1bmN0aW9uIHRyYW5zZmVyR01vbnRoRGF5KGRhdGUpCi0gIHsKLSAgICB2YXIgbW9udGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpLnNlbGVjdGVkSW5kZXgrMTsKLSAgICB0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlID0gc2VyaWFsaXplR01vbnRoRGF5KG1vbnRoLGRhdGUpOwotICAgIHRvcC5vcGVuZXIuY2xvc2VDYWxlbmRhckJyb3dzZXIoKTsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgPHRhYmxlPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJtb250aFNlbGVjdG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9OVEgiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InllYXJUZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfWUVBUiIpJT48L2xhYmVsPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ibW9udGhTZWxlY3RvciIgb25DaGFuZ2U9InNldE5ld0RhdGUoKSIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzMCUiIGFsaWduPSJsZWZ0IiB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgICAgICAgICAgPGlucHV0IGlkPSJ5ZWFyVGV4dCIgc2l6ZT02IG9ua2V5dXA9ImhhbmRsZVllYXJUZXh0S2V5VXBFdmVudCgpIiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICA8dGFibGUgaWQ9ImNhbGVuZGFyIiBib3JkZXI9MCBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTMgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLTwlCi0gICBpZiAoY2FsZW5kYXJUeXBlID09IEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FKQotICAgewotJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICA8dGFibGUgYm9yZGVyPTA+Ci0gICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0aW1lVGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1RJTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHdpZHRoPSI4MCUiPgotICAgICAgICAgICAgICA8aW5wdXQgaWQ9InRpbWVUZXh0IiB0eXBlPSJ0ZXh0IiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiIHNpemU9MTIgbWF4bGVuZ3RoPTEyPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotPCUKLSAgIH0KLSU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgPHRhYmxlIGJvcmRlcj0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpqdW1wVG9QcmV2aW91c1llYXIoKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1BSRVZJT1VTX1lFQVIiKSU+Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19QUkVWSU9VU19ZRUFSIiklPjwvYT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6anVtcFRvUHJldmlvdXNNb250aCgpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfUFJFVklPVVNfTU9OVEgiKSU+Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19QUkVWSU9VU19NT05USCIpJT48L2E+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Omp1bXBUb1RvZGF5KCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UT0RBWSIpJT4iPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1RPREFZIiklPjwvYT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6anVtcFRvTmV4dE1vbnRoKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ORVhUX01PTlRIIiklPiI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfTkVYVF9NT05USCIpJT48L2E+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Omp1bXBUb05leHRZZWFyKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ORVhUX1lFQVIiKSU+Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19ORVhUX1lFQVIiKSU+PC9hPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpbml0KCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2Y5MTE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBTEVOREFSX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uVW5sb2FkPSJ0b3Aub3BlbmVyLmNhbGVuZGFyQnJvd3NlckNsb3NlZD10cnVlIiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NhbGVuZGFyLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DQUxFTkRBUl9CUk9XU0VSIiklPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdG9wLm9wZW5lci5jYWxlbmRhckJyb3dzZXJDbG9zZWQgPSBmYWxzZTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy9jYWxlbmRhci5jc3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy9jYWxlbmRhci5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Mzg4MDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvY2FsZW5kYXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0uY2FsZW5kYXJ0YWJsZWNlbGxzIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyB0ZXh0LWFsaWduOmNlbnRlcn0KLS50b2RheXRhYmxlY2VsbCB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IHRleHQtYWxpZ246Y2VudGVyfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvdG9vbGJhci5jc3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90b29sYmFyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1ZWExMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90b29sYmFyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSN0b29sYmFyIHsgd2lkdGg6MTAwJTsgaGVpZ2h0OjI1cHg7IGJhY2tncm91bmQ6I0VDRTlEODsgYm9yZGVyLWNvbG9yOndoaXRlOyAgYm9yZGVyLXN0eWxlOnNvbGlkOyAgYm9yZGVyLXdpZHRoOjEgMSAxIDFweDsgYm9yZGVyLWJvdHRvbS1jb2xvcjojODQ4Mjg0OyBib3JkZXItcmlnaHQtY29sb3I6Izg0ODI4NDsgbWFyZ2luOjAgMCAwIDBweDt9Ci0jdG9vbGJhcmJvcmRlciB7IGhlaWdodDoyNnB4OyB3aWR0aDoxMDAlOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aDoxIDAgMCAxcHg7IGJvcmRlci1jb2xvcjojODQ4Mjg0OyB9Ci0KLS8qIGlmcmFtZSBTcGFjaW5nIENvbnRvbCAqLwotLnRvb2xiYXJib2R5bWFyZ2luIHsgbWFyZ2luOiA1IDUgMCA1OyBiYWNrZ3JvdW5kOiAjRUNFOUQ4OyB9Ci0KLS8qIFRvb2xiYXIgU3R5bGVzICovCi0udGV4dCB7Zm9udC1zaXplOjEycHg7IGZvbnQ6IGljb247fQotYTpsaW5rIHtjb2xvcjogYmxhY2s7fQotCi0vKiBKUyBSb2xsb3ZlciBTdHlsZSAqLwotSU1HIHsgYm9yZGVyLXdpZHRoOjJweDsgYm9yZGVyLXN0eWxlOnNvbGlkO30KLS5ub3JtYWwgeyBib3JkZXItY29sb3IgOiAjRUNFOUQ4OyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBib3JkZXItbGVmdC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLWNvbG9yIDojRUNFOUQ4OyBib3JkZXItcmlnaHQtY29sb3IgOiNFQ0U5RDg7fQotLmhvdmVyIHsgYm9yZGVyLWNvbG9yIDogd2hpdGU7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7IGJvcmRlci1ib3R0b20tY29sb3IgOiM4QzhFOEM7IGJvcmRlci1yaWdodC1jb2xvciA6IzhDOEU4QzsgfQotLmRvd24geyBib3JkZXItY29sb3IgOiAjOEM4RThDOyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBib3JkZXItbGVmdC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLWNvbG9yOndoaXRlOyBib3JkZXItcmlnaHQtY29sb3I6d2hpdGU7fQotCi0vKiBHbG9iYWxUb29sYmFyICovCi0uZ3Rvb2xiYXJib2R5bWFyZ2luIHttYXJnaW4gOiAwIDEgMyAwOyBiYWNrZ3JvdW5kOiAjRUNFOUQ4fQotI2dsb2JhbHRvb2xiYXJ7aGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6ICNFQ0U5RDg7IGJvcmRlci1jb2xvciA6IHdoaXRlOyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBib3JkZXItbGVmdC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLWNvbG9yIDpibGFjazsgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7IGJvcmRlci1yaWdodC1jb2xvciA6Izg0ODI4NDt9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3RyZWV2aWV3LmNzcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3RyZWV2aWV3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExZTZhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90cmVldmlldy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWEge3RleHQtZGVjb3JhdGlvbjogbm9uZTt9Ci1hOmhvdmVyIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9Ci10ZCB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogQmxhY2s7fQotLnVuc2VsZWN0ZWRUZXh0QW5jaG9yIHtjb2xvcjpibHVlOyBiYWNrZ3JvdW5kLWNvbG9yOmRvY3VtZW50LmJhY2tncm91bmRDb2xvcn0KLS5zZWxlY3RlZFRleHRBbmNob3Ige2NvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOm5hdnl9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy93aW5kb3dzLmNzcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3dpbmRvd3MuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2RiNDAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3dpbmRvd3MuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotI2NvbnRlbnRib3JkZXIgeyBib3JkZXItbGVmdDoxcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjODQ4Mjg0OyBib3JkZXItdG9wOjBweCBzb2xpZCAjODQ4Mjg0OyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjODQ4Mjg0OyBoZWlnaHQ6MTAwJTsgd2lkdGg6MTAwJTsgYmFja2dyb3VuZDp3aGl0ZTsgb3ZlcmZsb3c6YXV0bzsgcGFkZGluZy1sZWZ0OjEwcHg7IHBhZGRpbmctcmlnaHQ6MDsgcGFkZGluZy10b3A6MTA7IHBhZGRpbmctYm90dG9tOjEwfQotI3RyZWVjb250ZW50Ym9yZGVyIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICM4NDgyODQ7IGJvcmRlci1yaWdodDoxcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLXRvcDowcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzg0ODI4NDsgaGVpZ2h0OjEwMCU7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6d2hpdGU7IG92ZXJmbG93OmF1dG87IHBhZGRpbmctdG9wOjVweH0KLQotLyogaWZyYW1lIFNwYWNpbmcgQ29udG9sICovCi0uY29udGVudGJvZHltYXJnaW4geyBtYXJnaW46IDAgNSAxMiA1OyBiYWNrZ3JvdW5kOiNFQ0U5RDg7IH0KLQotLyogRG9jdW1lbnQgU3R5bGVzICAqLwotLmxhYmVscyB7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6YmxhY2s7IGZvbnQtd2VpZ2h0OiBub3JtYWw7fQotCi0vKiBmaWVsZHNldCtsZWdlbmQgU3R5bGVzICovCi0ua2V5bGluZWZpZWxkc2V0IHsgYm9yZGVyLWNvbG9yOiM4MDgwRkY7IGJvcmRlci13aWR0aDoxcHg7IGJvcmRlci1zdHlsZTpzb2xpZDsgfQotLmhlYWRlcmZpZWxkc2V0IHsgLW1vei1ib3JkZXItcmFkaXVzOiA3cHQ7IHBhZGRpbmc6IDNweDsgYm9yZGVyOjFweCBzb2xpZCAjQzBDMEMwOyB9Ci0KLS8qIHRhYmxlIFN0eWxlcyAqLwotLnRhYmxlYm9yZGVyIHtib3JkZXItbGVmdDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjBweCBzb2xpZCAjQjhCNEEzOyB9Ci0udGFibGVjZWxscyB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgdGV4dC1hbGlnbjpsZWZ0fQotLmNoZWNrYm94Y2VsbHMgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6ICNFQ0U5RDh9Ci10aC5oZWFkZXJjb2xvciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiM0OTc3QjQ7IGNvbG9yOiNGRkZGRkY7IHRleHQtYWxpZ246Y2VudGVyfQotdGguc2luZ2xlaGVhZGVyY29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjojNDk3N0I0OyBjb2xvcjojRkZGRkZGOyB0ZXh0LWFsaWduOmxlZnR9Ci0uZmlyc3Rjb2x1bW5lcnJhbnRyb3djb2xvciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCByZWQ7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I3QjRBMzsgYm9yZGVyLXRvcDoxcHggc29saWQgcmVkOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCByZWQ7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjojRTZFQUQ4OyB0ZXh0LWFsaWduOmxlZnR9Ci0ubWlkZGxlZXJyYW50cm93Y29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I3QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjdCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCByZWQ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkIHJlZDsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNFNkVBRDg7IHRleHQtYWxpZ246bGVmdH0KLS5sYXN0Y29sdW1uZXJyYW50cm93Y29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I3QjRBMzsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZWQ7IGJvcmRlci10b3A6MXB4IHNvbGlkIHJlZDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgcmVkOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6I0U2RUFEODsgdGV4dC1hbGlnbjpsZWZ0fQotLnJvd2NvbG9yIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNFNkVBRDg7IHRleHQtYWxpZ246bGVmdH0KLQotLyogRm9ybSBlbGVtZW50cyBhbmQgc3RhdHVzIGNvbnRlbnRzICovCi10ZCB7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgfQotdGggeyBmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IH0KLWlucHV0IHsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyB9Ci0uc2VsZWN0bGlzdCB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyAgYm9yZGVyLWNvbG9yOiNDN0M1QjI7fQotc2VsZWN0IHsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyB9Ci1wcmUgeyBmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IH0KLS5zbXRleHRlbnRlciB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IHdpZHRoOjEwJTsgfQotLnRleHRlbnRlciB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IHdpZHRoOjkwJTsgfQotLnRhYmxldGV4dGVudGVyIHtmb250OiBpY29uOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiBCbGFjazsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGggOiAxcHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgd2lkdGg6MTAwJTsgfQotLnRhYmxlZmlsZWJyb3dzZSB7d2lkdGg6MTAwJTsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBmb250LXNpemU6IDE0cHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgZm9udDogaWNvbjsgfQotaW5wdXQuYnV0dG9uIHtmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJvcmRlci13aWR0aCA6IDFweDsgYm9yZGVyLXN0eWxlOm91dHNldDsgaGVpZ2h0OjIycHg7fQotaW5wdXQucmFkaW8ge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDt9Ci1pbWcudHdpc3Qge2JvcmRlci13aWR0aDowIDAgMCAwcHg7IGhlaWdodDoxMHB4OyB3aWR0aDoxMXB4O30KLQotLyogRnJhZ21lbnQgU3R5bGVzICovCi0uZml4ZnJhZ3RhYmxlIHt3aWR0aDo5NSU7IGJvcmRlcjowcHggbm9uZTsgfQotLmlubmVyZml4ZnJhZ3RhYmxlIHt3aWR0aDoxMDAlOyBib3JkZXI6MHB4IG5vbmU7IH0KLS5yYW5nZWZyYWd0YWJsZSB7d2lkdGg6OTUlOyBib3JkZXItbGVmdDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjBweCBzb2xpZCAjQjhCNEEzO30KLS5pbm5lcnJhbmdlZnJhZ3RhYmxlIHt3aWR0aDoxMDAlOyBib3JkZXItbGVmdDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjBweCBzb2xpZCAjQjhCNEEzO30KLS50ZXh0YXJlYWVudGVyIHtmb250OiBpY29uOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiBCbGFjazsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGggOiAxcHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgd2lkdGg6MTAwJTsgaGVpZ2h0OjE1MHB4OyB9Ci0uYmlndGV4dGFyZWFlbnRlciB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IHdpZHRoOjEwMCU7IGhlaWdodDozMDBweDsgfQotLmZyYWdhcmVhIHsgcGFkZGluZy1sZWZ0OiAzcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IH0KLQotaWZyYW1lIHtib3JkZXItd2lkdGg6IDJweDsgYm9yZGVyLXN0eWxlOiBpbnNldDsgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmExMGUzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uID0gbmV3IEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUwsZmFsc2UpKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci0gIGVsc2UgewotICAgIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pID09IG51bGwpIHsKLSU+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0NvbmZpcm1KU1AuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgICB9Ci0gICAgZWxzZSB7Ci0lPgotICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIGZhdlByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgZmF2U3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgPC9zY3JpcHQ+Ci08JQotICAgIH0KLSAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlY2VlZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGFjdGlvbiA9IEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLm5ld0FjdGlvbihjb250cm9sbGVyKTsKLQotICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0gICAgY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxmYWxzZSkpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0gICAgaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTikgPT0gbnVsbCkgewotJT4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgIH0KLSAgICBlbHNlIHsKLSU+Ci0gICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgZmF2UHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICBmYXZTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICA8L3NjcmlwdD4KLTwlCi0gICAgfQotICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYyOThlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNBY3Rpb25JbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCxmYWxzZSkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKSA9PSBudWxsKSB7Ci0lPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0gIGVsc2UgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGZhdlByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllOTk0MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOTM1YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTAzM2IxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U4ZDE1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBGYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTFiMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5SZW1vdmVGYXZvcml0ZXNBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIFJlbW92ZUZhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVtb3ZlRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0NvbmZpcm1KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTk3MGYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlJlbW92ZUZhdm9yaXRlc0FjdGlvbiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIGlmIChjb25maXJtKCI8JT1jb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0NPTkZJUk1fUkVNT1ZFX05PREUiLCBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXROb2RlTmFtZSgpKSU+IikpIHsKLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUKSkpJT4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZmF2UHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgICAgZmF2U3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB9Ci0gICAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwM2QzNDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIENyZWF0ZSB0aGUgYWN0aW9uLgotICAgUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uIGFjdGlvbiA9IG5ldyBSZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAKLSAgIC8vIFBvcHVsYXRlIHRoZSBhY3Rpb24gd2l0aCB0aGUgcmVxdWVzdCBwcm9wZXJ0aWVzLgotICAgYm9vbGVhbiByZXN1bHQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAocmVzdWx0KQotICAgewotICAgICBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0gICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldC5zZXRBdHRyaWJ1dGUoImNvbHMiLCI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Iik7Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0LnNldEF0dHJpYnV0ZSgicm93cyIsIjwlPWZhdlBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Iik7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRiOWU3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5GYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gICAgfQotICAgIGVsc2UgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgZmF2U3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0NvbmZpcm1KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0NvbmZpcm1KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWViMTI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNDb25maXJtSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBpZiAoY29uZmlybSgiPCU9Y29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19DT05GSVJNX1JFU1RPUkVfREVGQVVMVF9GQVZPUklURVMiKSU+IikpCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NTZlMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYjdkMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZjExOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vbWFrZSBzdXJlIHRvIHJlZnJlc2ggbm9kZSB2aWV3Ci1hY3Rpb24uc2V0VHJlZVJlZnJlc2hOZWVkZWQoKTsKLQotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYTBjZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uCi1Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IFN3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfYWN0aW9uc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X2FjdGlvbnNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3OWFiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfYWN0aW9uc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjwlPWZhdlBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+IiBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250YWluZXIuanNwIikpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MGUyYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLk5BVklHQVRPUl9UT09MQkFSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X25hdmlnYXRvcl90b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05URU5UJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOGZjMDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90cmVldmlldy5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08JQotICAgIFN0cmluZyBzZWxlY3RlZEFuY2hvck5hbWUgPSAiIjsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgaW50IGZvY3VzZWROb2RlSWQgPSBub2RlTWFuYWdlci5nZXRGb2N1c2VkTm9kZUlkKCk7Ci0gICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgc2VsZWN0ZWRBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSAgICAgICAgaWYgKGZvY3VzZWROb2RlSWQgPT0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKQotICAgICAgICAgICAgZm9jdXNlZEFuY2hvck5hbWUgPSBzZWxlY3RlZEFuY2hvck5hbWU7Ci0gICAgfQotJT4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25Mb2FkPSJzZWxmLmxvY2F0aW9uLmhhc2g9JyM8JT1mb2N1c2VkQW5jaG9yTmFtZSU+JztzZXRTZWxlY3RlZEFuY2hvck5hbWUoJzwlPXNlbGVjdGVkQW5jaG9yTmFtZSU+JykiIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0cmVlY29udGVudGJvcmRlciI+Ci0gICAgPCU9bm9kZU1hbmFnZXIucmVuZGVyVHJlZVZpZXcocmVzcG9uc2UpJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNmJhZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKEZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9uYXZpZ2F0b3IuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAoZmF2UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIGVsc2UKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9OQVZJR0FUT1IiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0UmVzdG9yZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRVNUT1JFX0RFRkFVTFRfRkFWT1JJVEVTIik7Ci0gICBTdHJpbmcgYWx0UmVtb3ZlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFTU9WRV9GQVZPUklURSIpOwotJT4gICAKLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0NvbmZpcm1KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRSZXN0b3JlJT4iIHRpdGxlPSI8JT1hbHRSZXN0b3JlJT4iPjwvYT48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0UmVtb3ZlJT4iIHRpdGxlPSI8JT1hbHRSZW1vdmUlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcGVyc3BlY3RpdmVfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OTFjOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QRVJTUEVDVElWRV9DT05URU5UIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgY29scz0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIgYmdjb2xvcj0jRUNFOUQ4PgotICA8JQotICBpZiAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuaXNSVEwoKSkKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gICU+Ci08L2ZyYW1lc2V0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YTYxMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19UT09MQkFSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05URU5UJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Zjk1NmE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgICAgIGlmIChzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wgIT0gbnVsbCAmJiBzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKSB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgbG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZFRvb2wuZ2V0Rm9ybUxpbmsoKSkpJT4iOwotICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0FDVElPTl9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTk9ERV9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMTQwOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKEZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9mb3Jtcy9Qcm9jZXNzRmF2b3JpdGVzRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYWN0aW9ucy5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmIChmYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAoZmF2UGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQUNUSU9OUyIpJT48L3RkPgotPCUKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgICAgIGlmIChzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGZvcihpbnQgaT0wOyBpPHRvb2xNYW5hZ2VyLmdldE51bWJlck9mVG9vbHMoKTsgaSsrKSB7Ci0gICAgICAgICAgICBUb29sIHRvb2wgPSAoVG9vbCl0b29sTWFuYWdlci5nZXRUb29sKGkpOwotICAgICAgICAgICAgJT4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PCU9dG9vbC5yZW5kZXJUb29sKHJlc3BvbnNlLGNvbnRyb2xsZXIpJT48L3RkPgotICAgICAgICAgICAgPCUKLSAgICAgICAgfQotICAgIH0KLSU+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNWZjNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19UT09MQkFSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c190b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YjU1YzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxwcmU+Ci08JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmdldE1lc3NhZ2VzRnJvbUxpc3QoKSklPgotICAgICAgICA8L3ByZT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c190b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlM2JiNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgiZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChGYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9mb3Jtcy9Qcm9jZXNzRmF2b3JpdGVzRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3RhdHVzLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKGZhdlBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICB7Ci0gICAgIGlmIChmYXZQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsgICAgICAgCi0gICB9Ci0gICBpZiAoZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9PSBudWxsKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1NUQVRVUyIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRDbGVhciA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0NMRUFSIik7Ci0lPiAgICAgICAgICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhiNDE4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtUHJvcGVydGllcyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgIC8vIFRoZSBzZWxlY3RlZCBub2RlIG11c3QgYmUgYSBGYXZvcml0ZXNXU0RMU2VydmljZU5vZGUuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IHdzZGxFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIGZvcm1Qcm9wZXJ0aWVzLnB1dCgiZm9ybUFjdGlvbkxpbmsiLCJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AiKTsKLSAgIGZvcm1Qcm9wZXJ0aWVzLnB1dCgid3NkbFVSTCIsd3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRXU0RMQW5kV1NJTFRvV29ya2JlbmNoRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MzIzZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb25MaW5rIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1BY3Rpb25MaW5rLmFwcGVuZCgiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AiKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MGI2ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VRERJX0JVU0lORVNTX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfQlVTSU5FU1NfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfTkFNRSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1idXNFbGVtZW50LmdldE5hbWUoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9YnVzRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX0tFWSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1idXNFbGVtZW50LmdldEJ1c2luZXNzS2V5KCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWQ5MzRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VRERJX1JFR0lTVFJZX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfUkVHSVNUUllfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSByZWdFbGVtZW50LmdldE5hbWUoKTsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUdJU1RSWV9OQU1FIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXJlZ2lzdHJ5TmFtZSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9cmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSkKLSAgICAgewotJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9cHVibGlzaFVSTCU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgICB9Ci0gICAKLSAgICAgU3RyaW5nIHJlZ2lzdHJ5VVJMID0gcmVnRWxlbWVudC5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChyZWdpc3RyeVVSTCkpCi0gICAgIHsKLSU+Ci0gICAgICAgICAgICA8YnI+Ci0gICAgICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUdJU1RSWV9VUkwiLHJlZ2lzdHJ5VVJMKSU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci08JQotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcnlEaXJlY3RvcnkgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGNhdGVnb3J5RGlyZWN0b3J5LGNvbnRyb2xsZXIuZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSxyZWdpc3RyeU5hbWUpOwotICAgICAgRmlsZSBjYXRlZ29yeURpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShjYXRlZ29yeURpcmVjdG9yeS50b1N0cmluZygpKTsKLSAgICAgIFN0cmluZ1tdIGNhdGVnb3J5RmlsZXMgPSBjYXRlZ29yeURpcmVjdG9yeUZpbGUubGlzdCgpOwotICAgICAgaWYgKGNhdGVnb3J5RmlsZXMgIT0gbnVsbCkKLSAgICAgIHsKLSU+Ci08YnI+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRVMiKSU+Ci0gICAgPC90aD4KLSAgPC90cj4KLTwlICAgICAgCi0gICAgICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3J5RmlsZXMubGVuZ3RoO2krKykKLSAgICAgICAgewotJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8JT1jYXRlZ29yeUZpbGVzW2ldJT4KLSAgICA8L3RkPgotICA8L3RyPgotPCUgICAgICAgIAotICAgICAgICB9Ci0lPgotPC90YWJsZT4KLTwlICAgICAgICAKLSAgICAgIH0gICAgICAKLSU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUgICAgICAKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTQzYzUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VRERJX1NFUlZJQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9TRVJWSUNFX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgc2VyRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfTkFNRSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZXJFbGVtZW50LmdldE5hbWUoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VyRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfS0VZIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlckVsZW1lbnQuZ2V0U2VydmljZUtleSgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgICAgICAKLQotICAgIDwlCi0gICAgfQotICAgICU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50RGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnREZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ODQyM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnREZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpIHsKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNlckludEVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlckludEVsZW1lbnQuZ2V0TmFtZSgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZXJJbnRFbGVtZW50LmdldElucXVpcnlVUkwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VfS0VZIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlckludEVsZW1lbnQuZ2V0U2VydmljZUludGVyZmFjZUtleSgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgICAgICAKLQotICAgIDwlCi0gICAgfQotICAgICU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDA4YTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MTIgICAxNDE3OTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgcmVnRWxlbWVudC5yZWZyZXNoTWV0YSgpOyAgICAgIAotICAgIAotICAgICAgICBTdHJpbmcgdmVyc2lvbiA9IHJlZ0VsZW1lbnQuZ2V0VmVyc2lvbigpOwotICAgICAgICBpZiAodmVyc2lvbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VRERJX1ZFUlNJT04iKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9dmVyc2lvbiU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLQotICAgICAgICA8JQotICAgICAgICBMaXN0IG5hbWVzID0gcmVnRWxlbWVudC5nZXROYW1lcygpOwotICAgICAgICBpZiAobmFtZXMgIT0gbnVsbCAmJiAhbmFtZXMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIHdpZHRoPSIxIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUdJU1RSWV9OQU1FIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBuYW1lcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBsYW5nID0gbmFtZS5nZXRMYW5nKCk7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWxhbmcgIT0gbnVsbCA/IGxhbmcgOiAiLS0iJT48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9bmFtZS5nZXRWYWx1ZSgpJT48L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgICAgIDwlCi0gICAgICAgIExpc3QgZGVzY3MgPSByZWdFbGVtZW50LmdldERlc2NzKCk7Ci0gICAgICAgIGlmIChkZXNjcyAhPSBudWxsICYmICFkZXNjcy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgd2lkdGg9IjEiIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0MiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGRlc2NzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERlc2NyaXB0aW9uIGRlc2MgPSAoRGVzY3JpcHRpb24paXQubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgbGFuZyA9IGRlc2MuZ2V0TGFuZygpOwotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1sYW5nICE9IG51bGwgPyBsYW5nIDogIi0tIiU+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRlc2MuZ2V0VmFsdWUoKSU+PC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLQotICAgICAgICA8JQotICAgICAgICBTdHJpbmcgZGVmYXVsdExvZ2luID0gcmVnRWxlbWVudC5nZXREZWZhdWx0TG9naW4oKTsKLSAgICAgICAgaWYgKGRlZmF1bHRMb2dpbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFRkFVTFRfTE9HSU4iKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZGVmYXVsdExvZ2luJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgICAgIDwlCi0gICAgICAgIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQgPSByZWdFbGVtZW50LmdldERlZmF1bHRQYXNzd29yZCgpOwotICAgICAgICBpZiAoZGVmYXVsdFBhc3N3b3JkICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVGQVVMVF9QQVNTV09SRCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1kZWZhdWx0UGFzc3dvcmQlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0KLSAgICAgICAgPCUKLSAgICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICAgICAgaWYgKGlucXVpcnlVUkwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1pbnF1aXJ5VVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgIDwlCi0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICAgIHsKLSAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9cHVibGlzaFVSTCU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgIDwlCi0gICAgIH0KLQotICAgICBTdHJpbmcgc2VjdXJlSW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0U2VjdXJlSW5xdWlyeVVSTCgpOwotICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHNlY3VyZUlucXVpcnlVUkwpKQotICAgICB7Ci0gICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFQ1VSRV9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZWN1cmVJbnF1aXJ5VVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgPCUKLSAgICAgfQotCi0gICAgIFN0cmluZyBzZWN1cmVQdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRTZWN1cmVQdWJsaXNoVVJMKCk7Ci0gICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwoc2VjdXJlUHVibGlzaFVSTCkpCi0gICAgIHsKLSAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VDVVJFX1BVQkxJU0hfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlY3VyZVB1Ymxpc2hVUkwlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICA8JQotICAgICB9Ci0gICAgICU+Ci0gICAgIAotICAgICA8JQotICAgICBUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdFbGVtZW50LmdldFRheG9ub21pZXMoKTsKLSAgICAgaWYgKHRheG9ub21pZXMgIT0gbnVsbCAmJiB0YXhvbm9taWVzLmxlbmd0aCA+IDApCi0gICAgIHsKLSAgICAgJT4KLSAgICAgICA8YnI+Ci0gICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgPHRyPgotICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1RBWE9OT01ZIiklPgotICAgICAgICAgICA8L3RoPgotICAgICAgICAgPC90cj4KLSAgICAgICAgIDwlCi0gICAgICAgICBmb3IgKGludCBpPTA7IGk8dGF4b25vbWllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgIHsKLSAgICAgICAgICAgVGF4b25vbXkgdGF4b25vbXkgPSB0YXhvbm9taWVzW2ldOwotICAgICAgICAgJT4KLSAgICAgICAgIDx0cj4KLSAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT10YXhvbm9teS5nZXROYW1lKCklPjwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgICAgPCUKLSAgICAgICAgIH0KLSAgICAgICAgICU+Ci0gICAgICAgPC90YWJsZT4KLSAgICAgICA8JQotICAgICB9Ci0gICAgICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JSAgICAgIAotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTRExEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0RMRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDQ5NTM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTRExEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1dTRExfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfV1NETF9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpIHsKLSAgICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IHdzZGxFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzZGxFbGVtZW50LmdldFdzZGxVcmwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0lMRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzV1NJTERldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVlMWFkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0lMRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1dTSUxfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfV1NJTF9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0lMRWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCB3c2lsRWxlbWVudCA9IChGYXZvcml0ZXNXU0lMRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgICU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT13c2lsRWxlbWVudC5nZXRXc2lsVXJsKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgICAgIDwlCi0gICAgfQotICAgICU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY5YTcxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9Qcm9jZXNzRmF2b3JpdGVzRnJhbWVzZXRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZm9ybUFjdGlvbi50b1N0cmluZygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPgotICA8aW5wdXQgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkZSQU1FX05BTUUlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9Zm9ybUZyYW1lTmFtZSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiI+Ci08L2Zvcm0+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY1ZDE5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhM2RkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzQxODQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjJiOGNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfV1NJTF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZhMDk4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThhNGNlYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMWUzN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MWI5NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWExNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkxZWNiNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1MWRhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlMTMzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0Njk4NmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNTMxMjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfd3NkbF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYzAyODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfd3NkbF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfd3NkbF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGM4ZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfd3NkbF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9idXNpbmVzc19ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX2J1c2luZXNzX25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2Q2YTc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX2J1c2luZXNzX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfY2F0X25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfY2F0X25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWVjMjgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3JlZ2lzdHJ5X2NhdF9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3JlZ2lzdHJ5X25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDNjYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX2ludGVyZmFjZV9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2VfaW50ZXJmYWNlX25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTMyNWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2VfaW50ZXJmYWNlX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2Vfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMDI1MmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvd3NkbF9zZXJ2aWNlX25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmI4NDRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvd3NpbF9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy93c2lsX25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzU5MTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy93c2lsX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE1ZmU5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gaXNTb21ldGhpbmdTZWxlY3RlZCh0YWJsZUNvbnRhaW5lcklkKSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93czsgaTx0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3hDZWxsID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKS5pdGVtKDApOwotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94ID0gcm93Q2hlY2tib3hDZWxsLmNoaWxkTm9kZXNbMF07Ci0gICAgICAgICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBhbGVydCgiPCU9Y29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KHRhYmxlQ29udGFpbmVySWQsIGZvcm0sIGxvY2F0aW9uKSB7Ci0gICAgICAgIGlmIChpc1NvbWV0aGluZ1NlbGVjdGVkKHRhYmxlQ29udGFpbmVySWQpKQotICAgICAgICAgICAgc2V0TG9jYXRpb25BbmRTdWJtaXQoZm9ybSwgbG9jYXRpb24pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldExvY2F0aW9uQW5kU3VibWl0KGZvcm0sIGxvY2F0aW9uKSB7Ci0gICAgICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3JtLmFjdGlvbiA9IGxvY2F0aW9uOwotICAgICAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYTU4OGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBmYXZOYXZpZ2F0b3JDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIlPiJdOwotICB2YXIgZmF2TmF2aWdhdG9yVG9vbGJhciA9IGZhdk5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX1RPT0xCQVIlPiJdOwotICB2YXIgZmF2TmF2aWdhdG9yQ29udGVudCA9IGZhdk5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRFTlQlPiJdOwotICB2YXIgZmF2QWN0aW9uc0NvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuQUNUSU9OU19DT05UQUlORVIlPiJdOwotICB2YXIgZmF2UHJvcGVydGllc0NvbnRhaW5lciA9IGZhdkFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIGZhdlByb3BlcnRpZXNUb29sYmFyID0gZmF2UHJvcGVydGllc0NvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19UT09MQkFSJT4iXTsKLSAgdmFyIGZhdlByb3BlcnRpZXNDb250ZW50ID0gZmF2UHJvcGVydGllc0NvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05URU5UJT4iXTsKLSAgdmFyIGZhdlN0YXR1c0NvbnRhaW5lciA9IGZhdkFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05UQUlORVIlPiJdOwotICB2YXIgZmF2U3RhdHVzVG9vbGJhciA9IGZhdlN0YXR1c0NvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX1RPT0xCQVIlPiJdOwotICB2YXIgZmF2U3RhdHVzQ29udGVudCA9IGZhdlN0YXR1c0NvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiJdOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzZhZDJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotCi0gICAgZnVuY3Rpb24gZmF2SGFuZGxlQ2hlY2tBbGxDbGljayh0YWJsZUNvbnRhaW5lcklkLCBjaGVja0FsbENoZWNrYm94KSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93czsgaTx0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3hDZWxsID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKS5pdGVtKDApOwotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94ID0gcm93Q2hlY2tib3hDZWxsLmNoaWxkTm9kZXNbMF07Ci0gICAgICAgICAgICByb3dDaGVja2JveC5jaGVja2VkID0gY2hlY2tBbGxDaGVja2JveC5jaGVja2VkOwotICAgICAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpIHsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwicm93Y29sb3IiKTsKLSAgICAgICAgICAgICAgICByb3dDaGVja2JveC5uYW1lID0gIjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInRhYmxlY2VsbHMiKTsKLSAgICAgICAgICAgICAgICByb3dDaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoZWNrQm94SW5wdXQoY2hlY2tib3gsIGlzQ2hlY2tlZCkgewotICAgICAgICBpZiAoaXNDaGVja2VkKSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hlY2tib3gubmFtZSA9ICIiOwotICAgICAgICB9Ci0gICAgICAgIGhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0d2lzdEluaXQodGFibGVDb250YWluZXJJZCx0d2lzdEltYWdlTmFtZSkgewotICAgICAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgICAgIGlmICh0YWJsZS5yb3dzLmxlbmd0aCA+IG51bWJlck9mSGVhZGVyUm93cykgewotICAgICAgICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgICAgICAgIHR3aXN0KHRhYmxlQ29udGFpbmVySWQsIHR3aXN0SW1hZ2VOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgICAgICAgIHR3aXN0KHRhYmxlQ29udGFpbmVySWQsIHR3aXN0SW1hZ2VOYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYmUwOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuQUNUSU9OU19DT05UQUlORVIlPiJdLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmcmFtZXNldCIpLml0ZW0oMCk7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRnJhbWVzZXRTaXplcyhmcmFtZXNldFNpemVzRm9ybSkKLSAgewotICAgIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKTsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4udmFsdWUgPSBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldC5jb2xzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4udmFsdWUgPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQucm93czsKLSAgICBmcmFtZXNldFNpemVzRm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElCdXNpbmVzc1ZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3Y2FkYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUgPSAiZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSI7Ci0gICAgU3RyaW5nIHhkaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlID0gInhkaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlIjsKLQotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9CVVNJTkVTU19MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX0JVU0lORVNTIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9CVVNJTkVTU19ERVNDIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9VRERJX0JVU0lORVNTIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJmYXZIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9ICgoRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGZhdlVERElCdXNpbmVzc0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESUJ1c2luZXNzRWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiICB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElCdXNpbmVzc0VsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2VURESUJ1c2luZXNzRWxlbWVudC5nZXROYW1lKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1VERElfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVNT1ZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5Vmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5N2VjNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5Vmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUgPSAiZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSI7Ci0gICAgU3RyaW5nIHhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlID0gInhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlIjsKLQotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9SRUdJU1RSWV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfUkVHSVNUUlkiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1JFR0lTVFJZX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfUkVHSVNUUlkiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZSA9IHNvcnRlZFZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZmF2VURESVJlZ2lzdHJ5RWxlbWVudCA9IChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJUmVnaXN0cnlFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJUmVnaXN0cnlFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdlVERElSZWdpc3RyeUVsZW1lbnQuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFTU9WRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzZWMxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuUXVpY2tTb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUgPSAiZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSA9ICJ4ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlIjsKLQotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRV9JTlRFUkZBQ0UiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJmYXZIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGZhdlVERElTZXJJbnRFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVNlckludEVsZW1lbnQpLmdldE5vZGVJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElTZXJJbnRFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdlVERElTZXJJbnRFbGVtZW50LmdldE5hbWUoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1VERElfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQwNTc1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZVZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuUXVpY2tTb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUgPSAiZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSA9ICJ4ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlIjsKLQotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9TRVJWSUNFX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0UiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9VRERJX1NFUlZJQ0UiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9ICgoRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZSA9IHNvcnRlZFZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBmYXZVRERJU2VydmljZUVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJU2VydmljZUVsZW1lbnQpLmdldE5vZGVJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElTZXJ2aWNlRWxlbWVudCkuZ2V0Tm9kZUlkKCksIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1mYXZVRERJU2VydmljZUVsZW1lbnQuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFTU9WRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkOGQ4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5Vmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUgPSAiZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSI7Ci0gICAgU3RyaW5nIHhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlID0gInhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlIjsKLQotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUlkiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJmYXZIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9ICgoRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQgZmF2VURESVJlZ2lzdHJ5RWxlbWVudCA9IChGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVJlZ2lzdHJ5RWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVJlZ2lzdHJ5RWxlbWVudCkuZ2V0Tm9kZUlkKCksIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1mYXZVRERJUmVnaXN0cnlFbGVtZW50LmdldE5hbWUoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0RMU2VydmljZVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTZjYzFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlV1NETFRhYmxlID0gImRpdkZhdm9yaXRlV1NETFRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlV1NETFRhYmxlID0gInhkaXZGYXZvcml0ZVdTRExUYWJsZSI7Ci0KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1dTRExfU0VSVklDRV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfV1NETF9TRVJWSUNFIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfV1NETF9TRVJWSUNFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVdTRExUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlV1NETFRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfV1NETCIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlV1NETFRhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlV1NETFRhYmxlJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdldTRExTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdldTRExTZXJ2aWNlRWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2V1NETFNlcnZpY2VFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdldTRExTZXJ2aWNlRWxlbWVudC5nZXRXc2RsVXJsKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVdTRExUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fV1NETF9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVNT1ZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVdTRExUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0lMVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0lMVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMTdiZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlV1NJTFZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuUXVpY2tTb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZGYXZvcml0ZVdTSUxUYWJsZSA9ICJkaXZGYXZvcml0ZVdTSUxUYWJsZSI7Ci0gICAgU3RyaW5nIHhkaXZGYXZvcml0ZVdTSUxUYWJsZSA9ICJ4ZGl2RmF2b3JpdGVXU0lMVGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9XU0lMX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9XU0lMIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfV1NJTF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0lMRm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVdTSUxUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlV1NJTFRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfV1NJTCIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlV1NJTFRhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50IGZhdldTSUxGb2xkZXJFbGVtZW50ID0gKEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSBmYXZXU0lMRm9sZGVyRWxlbWVudC5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIHNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IGZhdldTSUxFbGVtZW50ID0gKEZhdm9yaXRlc1dTSUxFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZXU0lMRWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZXU0lMRWxlbWVudCkuZ2V0Tm9kZUlkKCksIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1mYXZXU0lMRWxlbWVudC5nZXRXc2lsVXJsKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVdTSUxUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19XU0lMX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVdTSUxUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVNT1ZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVdTSUxUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSAgICAlPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZjU0YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1Qcm9wZXJ0aWVzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JTVBPUlRfVE9fV09SS0JFTkNIIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4gICAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KChTdHJpbmcpZm9ybVByb3BlcnRpZXMuZ2V0KCJmb3JtQWN0aW9uTGluayIpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iIHZhbHVlPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUlPiI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19XT1JLQkVOQ0hfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGU+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9NDAgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIldPUktCRU5DSF9QUk9KRUNUX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgICAgICAgICAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJzZWxlY3Rfd29ya2JlbmNoX3Byb2plY3RfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUlPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0c1tpXS5pc09wZW4oKSkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3RzW2ldLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXByb2plY3ROYW1lJT4iPjwlPXByb2plY3ROYW1lJT4KLSAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRlZF9maWxlX25hbWUiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiSU1QT1JURURfV1NETF9GSUxFX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgd2lkdGg9IjYwJSI+Ci08JQotICAgU3RyaW5nIHdzZGxGaWxlTmFtZT0idGVtcC53c2RsIjsKLSAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylmb3JtUHJvcGVydGllcy5nZXQoIndzZGxVUkwiKTsKLSAgIGlmICh3c2RsVVJMICE9IG51bGwgJiYgd3NkbFVSTC5lbmRzV2l0aCgiLndzZGwiKSkKLSAgIHsKLSAgICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBNYXRoLm1heCh3c2RsVVJMLmxhc3RJbmRleE9mKCIvIiksd3NkbFVSTC5sYXN0SW5kZXhPZigiXFwiKSk7Ci0gICAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID4gMCkKLSAgICAgICB3c2RsRmlsZU5hbWUgPSB3c2RsVVJMLnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsd3NkbFVSTC5sZW5ndGgoKSk7Ci0gICB9Ci0lPiAgIAotICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9pbXBvcnRlZF9maWxlX25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NkbEZpbGVOYW1lKSU+IiBzaXplPTUwIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAgCi0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0ltcG9ydFdTRExBbmRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0V1NETEFuZFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFhNjcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0V1NETEFuZFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1Qcm9wZXJ0aWVzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiB0b2dnbGVEaXZDb250YWluZXIoZGl2SWQpCi0gIHsKLSAgICB2YXIgZGl2Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SWQpOwotICAgIGlmIChkaXZDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0gICAgICBkaXZDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGVsc2UKLSAgICAgIGRpdkNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0lNUE9SVF9UT19XT1JLQkVOQ0giKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgoU3RyaW5nKWZvcm1Qcm9wZXJ0aWVzLmdldCgiZm9ybUFjdGlvbkxpbmsiKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotCi0gIDwlCi0gIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYiOwotICBTdHJpbmcgdGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKTsKLSAgJT4KLSAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fV09SS0JFTkNIX0RFU0MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgPGxhYmVsIGZvcj0ic2VsZWN0X3dvcmtiZW5jaF9wcm9qZWN0X25hbWUiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiV09SS0JFTkNIX1BST0pFQ1RfTkFNRSIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9NDAgdmFsaWduPSJjZW50ZXIiIG5vd3JhcD4KLSAgICAgICAgPCUKLSAgICAgICAgSVdvcmtzcGFjZVJvb3QgaVdvcmtzcGFjZVJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgICAgICBJUHJvamVjdFtdIHByb2plY3RzID0gaVdvcmtzcGFjZVJvb3QuZ2V0UHJvamVjdHMoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPHNlbGVjdCBpZD0ic2VsZWN0X3dvcmtiZW5jaF9wcm9qZWN0X25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoIXByb2plY3RzW2ldLmlzT3BlbigpKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3RzW2ldLmdldE5hbWUoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9cHJvamVjdE5hbWUlPiI+PCU9cHJvamVjdE5hbWUlPgotICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIGlkPSJpbnB1dF9pbXBvcnRfd3NkbCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iIHZhbHVlPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUlPiIgb25DbGljaz0idG9nZ2xlRGl2Q29udGFpbmVyKCdkaXZfaW1wb3J0X3dzZGwnKSI+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ltcG9ydF93c2RsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkxBQkVMX0lNUE9SVF9XU0RMIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxkaXYgaWQ9ImRpdl9pbXBvcnRfd3NkbCI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ltcG9ydGVkX3dzZGxfZmlsZV9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIklNUE9SVEVEX1dTRExfRklMRV9OQU1FIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIiB3aWR0aD0iNjAlIj4KLTwlCi0gU3RyaW5nIHdzZGxGaWxlTmFtZT0idGVtcC53c2RsIjsKLSBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpZm9ybVByb3BlcnRpZXMuZ2V0KCJ3c2RsVVJMIik7Ci0gaWYgKHdzZGxVUkwgIT0gbnVsbCAmJiB3c2RsVVJMLmVuZHNXaXRoKCIud3NkbCIpKQotIHsKLSAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gTWF0aC5tYXgod3NkbFVSTC5sYXN0SW5kZXhPZigiLyIpLHdzZGxVUkwubGFzdEluZGV4T2YoIlxcIikpOwotICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPiAwKQotICAgICB3c2RsRmlsZU5hbWUgPSB3c2RsVVJMLnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsd3NkbFVSTC5sZW5ndGgoKSk7Ci0gfQotJT4gICAKLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ltcG9ydGVkX3dzZGxfZmlsZV9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzZGxGaWxlTmFtZSklPiIgc2l6ZT01MCBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci0KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVEVEX1dTRExfVVJMJT4iIHZhbHVlPSI8JT13c2RsVVJMJT4iPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJpbnB1dF9pbXBvcnRfd3NpbCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMJT4iIHZhbHVlPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX1RPX1dTSUwlPiIgb25DbGljaz0idG9nZ2xlRGl2Q29udGFpbmVyKCdkaXZfaW1wb3J0X3dzaWwnKSI+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ltcG9ydF93c2lsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkxBQkVMX0lNUE9SVF9UT19XU0lMIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxkaXYgaWQ9ImRpdl9pbXBvcnRfd3NpbCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ltcG9ydGVkX3dzaWxfZmlsZV9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIldTSUxfRklMRV9OQU1FIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIiB3aWR0aD0iNjAlIj4KLTwlCi0gU3RyaW5nIHdzaWxGaWxlTmFtZSA9IChTdHJpbmcpZm9ybVByb3BlcnRpZXMuZ2V0KCJ3c2lsRmlsZU5hbWUiKTsKLSBpZiAod3NpbEZpbGVOYW1lID09IG51bGwgfHwgd3NpbEZpbGVOYW1lLmxlbmd0aCgpIDw9IDApCi0gICB3c2lsRmlsZU5hbWUgPSB3c2RsRmlsZU5hbWUuc3Vic3RyaW5nKDAsIHdzZGxGaWxlTmFtZS5sZW5ndGgoKS00KSArICJ3c2lsIjsKLSU+ICAgCi0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9pbXBvcnRlZF93c2lsX2ZpbGVfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLldTSUxfRklMRV9OQU1FJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzaWxGaWxlTmFtZSklPiIgc2l6ZT01MCBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAgCi0gIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmMDRlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHMiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uTGluayIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9MQVVOQ0hfV0VCU0VSVklDRV9XSVpBUkQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChmb3JtQWN0aW9uTGluay50b1N0cmluZygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRCIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIT09TRV9XSVpBUkQiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fd3NfY2xpZW50X3dpemFyZCIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfV0laQVJEJT4iIGNoZWNrZWQ9dHJ1ZSB2YWx1ZT0iPCU9U3RyaW5nLnZhbHVlT2YoQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQpJT4iPjxsYWJlbCBmb3I9InJhZGlvX3dzX2NsaWVudF93aXphcmQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19XRUJfU0VSVklDRV9DTElFTlRfV0laQVJEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fd3Nfc2tlbGV0b25fd2l6YXJkIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQlPiIgdmFsdWU9IjwlPVN0cmluZy52YWx1ZU9mKEFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9TS0VMRVRPTl9XSVpBUkQpJT4iPjxsYWJlbCBmb3I9InJhZGlvX3dzX3NrZWxldG9uX3dpemFyZCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1dFQl9TRVJWSUNFX1NLRUxFVE9OX1dJWkFSRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAKLSAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL1Byb3h5TG9hZENvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9Qcm94eUxvYWRDb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ2NjkzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL1Byb3h5TG9hZENvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0gICBTdHJpbmdCdWZmZXIgdGFyZ2V0Q29udGVudExpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UQVJHRVRfUEFHRSkpOwotICAgaWYgKHNlc3Npb25JZCAhPSBudWxsKQotICAgewotICAgICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgICAgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgICBpZiAodGFyZ2V0Q29udGVudExpbmsudG9TdHJpbmcoKS5pbmRleE9mKCI/IikgIT0gLTEpCi0gICAgICAgdGFyZ2V0Q29udGVudExpbmsuYXBwZW5kKCcmJyk7Ci0gICAgIGVsc2UKLSAgICAgICB0YXJnZXRDb250ZW50TGluay5hcHBlbmQoJz8nKTsKLSAgICAgdGFyZ2V0Q29udGVudExpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgfQotICAgZWxzZQotICAgICBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIAotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1BBR0VfTE9BREVSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGxvYWRDb250ZW50KCkKLSAgewotICAgIHZhciBmcmFtZXNldCA9IHBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJveHlQYWdlIik7Ci0gICAgdmFyIGNvbnRlbnRGcmFtZSA9IGZyYW1lc2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmcmFtZSIpLml0ZW0oMSk7Ci0gICAgY29udGVudEZyYW1lLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGFyZ2V0Q29udGVudExpbmsudG9TdHJpbmcoKSkpJT4iOyAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGhhbmRsZUNvbXBsZXRpb24oKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIikuaXRlbSgwKTsKLSAgICB2YXIgdEJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBkb25lUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgZG9uZUNvbHVtbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgZG9uZUNvbHVtbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiUGFnZSBsb2FkZWQuIikpOwotICAgIGRvbmVSb3cuYXBwZW5kQ2hpbGQoZG9uZUNvbHVtbik7Ci0gICAgdEJvZHkuYXBwZW5kQ2hpbGQoZG9uZVJvdyk7ICAgCi0gIH0KLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGxvYWRDb250ZW50KCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL1Byb3h5TG9hZFBhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjI0NjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyOwotICAgU3RyaW5nQnVmZmVyIGxvYWRDb250ZW50TGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZvcm1zL1Byb3h5TG9hZENvbnRlbnQuanNwPyIpOwotICAgaWYgKHNlc3Npb25JZCAhPSBudWxsKQotICAgewotICAgICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgICAgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgICBsb2FkQ29udGVudExpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpLmFwcGVuZCgnJicpOwotICAgfQotICAgZWxzZQotICAgICBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIGxvYWRDb250ZW50TGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRBUkdFVF9QQUdFKS5hcHBlbmQoJz0nKS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UQVJHRVRfUEFHRSkpKTsKLSU+Ci08ZnJhbWVzZXQgaWQ9InByb3h5UGFnZSIgcm93cz0iMTAwJSwqIiBib3JkZXI9MD4KLSAgPGZyYW1lIHNyYz0iPCU9Y29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQobG9hZENvbnRlbnRMaW5rLnRvU3RyaW5nKCkpJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfUEFHRV9MT0FERVIiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbm9yZXNpemU+Ci0gIDxmcmFtZSB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1BBR0VfQ09OVEVOVCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBub3Jlc2l6ZT4KLTwvZnJhbWVzZXQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL2NvcHlyaWdodC5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL2NvcHlyaWdodC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmRjZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9jb3B5cmlnaHQuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9mb3JtaGVhZGVyLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvZm9ybWhlYWRlci5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZTViMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9mb3JtaGVhZGVyLmluYworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGl0bGVJbWFnZVBhdGgpKSU+IiBhbHQ9IiI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMD4gPGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiI+IDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9vdGhlckFjdGlvbnMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGU2MTU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotCi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSAoVG9vbE1hbmFnZXIpY3VycmVudFRvb2xNYW5hZ2VySGFzaC5nZXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSKTsKLSAgIGludCBudW1iZXJPZlRvb2xzID0gY3VycmVudFRvb2xNYW5hZ2VyLmdldE51bWJlck9mVG9vbHMoKTsKLSAgIGlmIChudW1iZXJPZlRvb2xzID4gMSkKLSAgIHsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxzdHJvbmc+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfT1RIRVJfQUNUSU9OUyIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMD4gPGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiI+IDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlPgotPCUKLSAgICAgZm9yIChpbnQgaT0xO2k8bnVtYmVyT2ZUb29scztpKyspCi0gICAgIHsKLSAgICAgICBUb29sIHQgPSBjdXJyZW50VG9vbE1hbmFnZXIuZ2V0VG9vbChpKTsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHQuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT10LmdldFNlbGVjdFRvb2xBY3Rpb25UYXJnZXQoKSU+Ij48JT10LmdldEFsdFRleHQoKSU+PC9hPjwvdGQ+Ci0gIDwvdHI+Ci08JQotICAgICB9Ci0lPgotPC90YWJsZT4KLTwlCi0gICB9Ci0lPiAgICAgICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmZThhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9HTyIpJT4iIGNsYXNzPSJidXR0b24iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFU0VUIiklPiIgb25DbGljaz0icmVzZXRGb3JtSW5wdXRzKCkiIGNsYXNzPSJidXR0b24iPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWN0aW9ucy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hY3Rpb25zLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVhZWQ3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hY3Rpb25zLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWRkX3RvX3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1Y2U1NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWRkX3RvX3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYWQ2NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWRkX3RvX3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYmFja19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNDY2NzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYmFja19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYmFja19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYjQxNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYmFja19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jYWxlbmRhci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jYWxlbmRhci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMjgxN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2FsZW5kYXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jbGVhcl9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc5ODQ4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jbGVhcl9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjMTBmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzMzI3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThhMmJhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMTdjMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcmVjb3JkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcmVjb3JkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMwMDRmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3NhdmUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUwMDQ4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3NhdmUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZWU5YWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4OGZiNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcmVjb3JkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcmVjb3JkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZjY2ZlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3NhdmUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlN2I5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3NhdmUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYzM2NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2V2aWV3MTYvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2V2aWV3MTYvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZXZpZXcxNi9hY3Rpb25lbmdpbmUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZXZpZXcxNi9hY3Rpb25lbmdpbmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjY0YmMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiMDI2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE2MjIxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTAwNGJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTY1Yjg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfY2xvc2VkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvbGRlcl9jbG9zZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmUwMjdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvbGRlcl9jbG9zZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9sZGVyX29wZW4uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9sZGVyX29wZW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTMyMmUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvbGRlcl9vcGVuLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvcndhcmRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjMxNDMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvcndhcmRfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvcndhcmRfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmY4YzNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvcndhcmRfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X2ZzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X2ZzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzBjN2E3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF9mc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF9mc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDZkM2U3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF9mc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY0YTA3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM4MDg1YWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9rZXlsaW5lLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2tleWxpbmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTgwNjllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2tleWxpbmUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjU4ZGM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9sYXVuY2hfd3N3aXphcmRfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjA5N2Q1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODFlNWI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9sYXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmVfbGFzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMGVmODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9sYXN0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmVfbm90bGFzdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lX25vdGxhc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkyY2UyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmVfbm90bGFzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9taW51c19sYXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX2xhc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWViYjczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX2xhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbWludXNfbm90bGFzdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9taW51c19ub3RsYXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q2NDMxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9taW51c19ub3RsYXN0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL25hdmlnYXRvci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9uYXZpZ2F0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGMwNTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL25hdmlnYXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX2xhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcGx1c19sYXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAwYzg5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX2xhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcGx1c19ub3RsYXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3BsdXNfbm90bGFzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1N2JkMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcGx1c19ub3RsYXN0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmQ1ZDE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjkwNDI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcm9vdF9tYWluLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3Jvb3RfbWFpbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YWRlMDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcm9vdF9tYWluLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3NwYWNlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3NwYWNlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgxMTkxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9zcGFjZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9zdGF0dXMuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvc3RhdHVzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhMDAxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9zdGF0dXMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjViYzlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3RvcF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3RvcF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90b3BfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzE2NDc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3RvcF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdGNsb3NlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdGNsb3NlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NDMzMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdHdpc3RjbG9zZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdHdpc3RvcGVuZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzJjNWYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNhYjNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2ZjMGFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZiODQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzJhY2ZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZThlZmM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjg4ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYjM1YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2xhdW5jaF9vcHRpb25zX3JlZ2lzdHJ5LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvbGF1bmNoX29wdGlvbnNfcmVnaXN0cnkuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWMwNzgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvbGF1bmNoX29wdGlvbnNfcmVnaXN0cnkuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTUgICAxMjg2MDIgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJDb250ZXh0LAotICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gIGphdmEudXRpbC5IYXNodGFibGUsCi0gIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzIiAlPgotCi08JQotICByZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOyAKLSAgU3RyaW5nIGtleSA9IG51bGw7Ci0gIEhhc2h0YWJsZSBvcHRpb25zID0gbmV3IEhhc2h0YWJsZSgpOwotICBFbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICB3aGlsZSAocGFyYW1OYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgewotICAgIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKXBhcmFtTmFtZXMubmV4dEVsZW1lbnQoKTsKLSAgICBTdHJpbmdbXSBwYXJhbVZhbHVlcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtTmFtZSk7Ci0gICAgaWYgKHBhcmFtVmFsdWVzICE9IG51bGwgJiYgcGFyYW1WYWx1ZXMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBpZiAoa2V5ID09IG51bGwgJiYgVVJMVXRpbHMuZGVjb2RlKHBhcmFtTmFtZSkuZXF1YWxzKFdTRXhwbG9yZXJDb250ZXh0LklEKSkKLSAgICAgICAga2V5ID0gcGFyYW1WYWx1ZXNbMF07Ci0gICAgICBlbHNlCi0gICAgICAgIG9wdGlvbnMucHV0KHBhcmFtTmFtZSwgcGFyYW1WYWx1ZXMpOwotICAgIH0KLSAgfQotICBpZiAoa2V5ICE9IG51bGwpCi0gIHsKLSAgICBMYXVuY2hPcHRpb25zTWFuYWdlciBtYW5hZ2VyID0gTGF1bmNoT3B0aW9uc01hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLSAgICBtYW5hZ2VyLm1hbmFnZShrZXksIG9wdGlvbnMsIGFwcGxpY2F0aW9uKTsKLSAgfQotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvcGVyc3BlY3RpdmVfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMDc0MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX0NPTlRFTlQiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBlcnNwZWN0aXZlSWQoKSxmYWxzZSkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvcGVyc3BlY3RpdmVfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMzM0N2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLkFjdGlvbkVuZ2luZSIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotU3RyaW5nQnVmZmVyIGhyZWZBY3Rpb25FbmdpbmUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci1ocmVmQWN0aW9uRW5naW5lLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImFjdGlvbmVuZ2luZV9jb250YWluZXIuanNwIikpKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKCI/Iik7Ci1ocmVmQWN0aW9uRW5naW5lLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKCI9Iik7Ci1ocmVmQWN0aW9uRW5naW5lLmFwcGVuZChzZXNzaW9uLmdldElkKCkpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QRVJTUEVDVElWRV9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotICA8L3NjcmlwdD4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gb3BlbkFjdGlvbkVuZ2luZUNvbnRhaW5lcigpCi0gICAgewotICAgICAgdmFyIGxpbmsgPSAiPCU9aHJlZkFjdGlvbkVuZ2luZS50b1N0cmluZygpJT4iOwotICAgICAgdmFyIGFjdGlvbkVuZ2luZUNvbnRhaW5lciA9IHdpbmRvdy5vcGVuKGxpbmssImFjdGlvbkVuZ2luZUNvbnRhaW5lciIsImhlaWdodD0xMDAsd2lkdGg9MzUwLHN0YXR1cz15ZXMsc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyIpOwotICAgICAgaWYgKGFjdGlvbkVuZ2luZUNvbnRhaW5lci5mb2N1cykKLSAgICAgICAgYWN0aW9uRW5naW5lQ29udGFpbmVyLmZvY3VzKCk7Ci0gICAgfQotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9Imd0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJnbG9iYWx0b29sYmFyIj4KLTx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1PjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVElUTEVfV1NFWFBMT1JFUiIpJT48L3RkPgotICAgIDwlCi0gICAgU3RyaW5nIGFsdEhpc3RvcnlCYWNrID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQkFDSyIpOwotICAgIFN0cmluZyBhbHRIaXN0b3J5Rm9yd2FyZCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0ZPUldBUkQiKTsKLSAgICBTdHJpbmcgYWx0QWN0aW9uRW5naW5lID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQUNUSU9OX0VOR0lORSIpOwotICAgIFN0cmluZyBhbHRVRERJID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVURESV9QRVJTUEVDVElWRSIpOwotICAgIFN0cmluZyBhbHRXU0lMID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NJTF9QRVJTUEVDVElWRSIpOwotICAgIFN0cmluZyBhbHRXU0RMID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9QRVJTUEVDVElWRSIpOwotICAgIFN0cmluZyBhbHRGYXZvcml0ZXMgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfUEVSU1BFQ1RJVkUiKTsKLSAgICAlPiAgIAotICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0xNiBoZWlnaHQ9MjY+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJldHJpZXZlSGlzdG9yeUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5KVU1QX0JBQ0spKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRIaXN0b3J5QmFjayU+IiB0aXRsZT0iPCU9YWx0SGlzdG9yeUJhY2slPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9iYWNrX2VuYWJsZWQuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2JhY2tfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYmFja19lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYmFja19oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYmFja19lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmV0cmlldmVIaXN0b3J5QWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLkpVTVBfRk9SV0FSRCkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBhbHQ9IjwlPWFsdEhpc3RvcnlGb3J3YXJkJT4iIHRpdGxlPSI8JT1hbHRIaXN0b3J5Rm9yd2FyZCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2ZvcndhcmRfZW5hYmxlZC5naWYiKSklPiIgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZm9yd2FyZF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mb3J3YXJkX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiPjwvYT48L3RkPgotICAgIDwlCi0gICAgQWN0aW9uRW5naW5lIGFjdGlvbkVuZ2luZSA9IGNvbnRyb2xsZXIuZ2V0QWN0aW9uRW5naW5lKCk7Ci0gICAgaWYgKGFjdGlvbkVuZ2luZSAhPSBudWxsICYmIGFjdGlvbkVuZ2luZS5nZXRNb2RlKCkgIT0gQWN0aW9uRW5naW5lLk1PREVfRElTQUJMRUQpCi0gICAgewotICAgICU+Ci0gICAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGhlaWdodD0yNT48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5BY3Rpb25FbmdpbmVDb250YWluZXIoKSI+PGltZyBjbGFzcz0ibm9ybWFsIiBhbHQ9IjwlPWFsdEFjdGlvbkVuZ2luZSU+IiB0aXRsZT0iPCU9YWx0QWN0aW9uRW5naW5lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZXZpZXcxNi9hY3Rpb25lbmdpbmUuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZXZpZXcxNi9hY3Rpb25lbmdpbmUuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4KLSAgICA8JQotICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBhbHQ9IjwlPWFsdFVEREklPiIgdGl0bGU9IjwlPWFsdFVEREklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUwsZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRXU0lMJT4iIHRpdGxlPSI8JT1hbHRXU0lMJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMLGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0V1NETCU+IiB0aXRsZT0iPCU9YWx0V1NETCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPiIgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiPjwvYT48L3RkPiAgICAKLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUyxmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBhbHQ9IjwlPWFsdEZhdm9yaXRlcyU+IiB0aXRsZT0iPCU9YWx0RmF2b3JpdGVzJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiPjwvYT48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjgxMzU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAKLS8vIENvbnRyaWJ1dG9yczoKLS8vICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLS8vCi0KLWZ1bmN0aW9uIGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpCi17Ci0gIHJldHVybiBuYXZpZ2F0b3IuYXBwTmFtZSA9PSAiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9jYWxlbmRhcmJyb3dzZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2NhbGVuZGFyYnJvd3Nlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YjljYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2NhbGVuZGFyYnJvd3Nlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gc2Vzc2lvbi5nZXRJZCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgY2FsZW5kYXJCcm93c2VyOwotICB2YXIgY2FsZW5kYXJCcm93c2VyQ2xvc2VkID0gdHJ1ZTsKLSAgdmFyIGNhbGVuZGFyVGFyZ2V0Um93ID0gLTE7Ci0gIHZhciBjYWxlbmRhclRhcmdldDsKLQotICBmdW5jdGlvbiBvcGVuQ2FsZW5kYXJCcm93c2VyKHR5cGUsZm9ybUNvbnRhaW5lcklkLGVsZW1lbnROYW1lLGluZGV4KQotICB7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtQ29udGFpbmVySWQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICB2YXIgZWxlbWVudHMgPSBmb3JtLmVsZW1lbnRzW2VsZW1lbnROYW1lXTsKLSAgICBpZiAoaW5kZXggPT0gMCAmJiBlbGVtZW50cy5sZW5ndGggPT0gdW5kZWZpbmVkKQotPCUKLSAgIC8vIE9ubHkgb25lIGVsZW1lbnQuCi0lPgotICAgICAgY2FsZW5kYXJUYXJnZXQgPSBlbGVtZW50czsKLSAgICBlbHNlCi0gICAgewotICAgICAgY2FsZW5kYXJUYXJnZXRSb3cgPSBpbmRleDsKLSAgICAgIGNhbGVuZGFyVGFyZ2V0ID0gZWxlbWVudHMuaXRlbShpbmRleCk7Ci0gICAgfQotICAgIHZhciBsaW5rOwotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEUlPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yRGF0ZShzZXNzaW9uSWQpKSklPiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSU+OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JEYXRlVGltZShzZXNzaW9uSWQpKSklPiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HWUVBUk1PTlRIJT46Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvckdZZWFyTW9udGgoc2Vzc2lvbklkKSkpJT4iOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR0RBWSU+OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JHRGF5KHNlc3Npb25JZCkpKSU+IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dNT05USERBWSU+OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JHTW9udGhEYXkoc2Vzc2lvbklkKSkpJT4iOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FsZW5kYXJCcm93c2VyID0gd2luZG93Lm9wZW4obGluaywiY2FsZW5kYXJCcm93c2VyIiwiaGVpZ2h0PTM1MCx3aWR0aD0yNjQsc3RhdHVzPXllcyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzIik7Ci0gICAgaWYgKGNhbGVuZGFyQnJvd3Nlci5mb2N1cykKLSAgICAgIGNhbGVuZGFyQnJvd3Nlci5mb2N1cygpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xvc2VDYWxlbmRhckJyb3dzZXIoKQotICB7Ci0gICAgaWYgKCFjYWxlbmRhckJyb3dzZXJDbG9zZWQpCi0gICAgICBjYWxlbmRhckJyb3dzZXIuY2xvc2UoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiM2I0ZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciByZXF1ZXN0U3VibWl0dGVkID0gZmFsc2U7Ci0KLSAgZnVuY3Rpb24gaGFuZGxlU3VibWl0KGZvcm0pCi0gIHsKLSAgICBpZiAocmVxdWVzdFN1Ym1pdHRlZCkKLSAgICB7Ci0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX1NVQk1JVF9JTl9QUk9HUkVTUyIpKSU+Iik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJlcXVlc3RTdWJtaXR0ZWQgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVzZXRTdWJtaXNzaW9uKCkKLSAgewotICAgIHJlcXVlc3RTdWJtaXR0ZWQgPSBmYWxzZTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9mb3JtdXRpbHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGVjODA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9mb3JtdXRpbHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCUvLyBSZXF1aXJlcyBicm93c2VyZGV0ZWN0LmpzJT4KLSAgZnVuY3Rpb24gY3JlYXRlSGlkZGVuRWxlbWVudChlbGVtZW50TmFtZSx2YWx1ZSkKLSAgewotICAgIHZhciBoaWRkZW5JbnB1dDsKLSAgICBpZiAoZWxlbWVudE5hbWUubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgICAgIGhpZGRlbklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiPGlucHV0IG5hbWU9JyIrZWxlbWVudE5hbWUrIic+Iik7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGhpZGRlbklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgaGlkZGVuSW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIixlbGVtZW50TmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGhpZGRlbklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBoaWRkZW5JbnB1dC50eXBlID0gImhpZGRlbiI7Ci0gICAgaGlkZGVuSW5wdXQudmFsdWUgPSB2YWx1ZTsKLSAgICByZXR1cm4gaGlkZGVuSW5wdXQ7Ci0gIH0KLQotICBmdW5jdGlvbiByZXNldEZvcm1JbnB1dHMoKQotICB7Ci0gICAgZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3BhbmVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9wYW5lcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNjljMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3BhbmVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgcGVyc3BlY3RpdmVXb3JrQXJlYSA9IHRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiJdOwotICB2YXIgcGVyc3BlY3RpdmVUb29sYmFyID0gdG9wLmZyYW1lc1siPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9UT09MQkFSJT4iXTsKLSAgdmFyIHBlcnNwZWN0aXZlQ29udGVudCA9IHRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfQ09OVEVOVCU+Il07Ci0KLSAgZnVuY3Rpb24gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudC5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0KLSAgZnVuY3Rpb24gdG9nZ2xlRG91YmxlQ2xpY2tDb2x1bW5UaXRsZSgpCi0gIHsKLSAgICB2YXIgZG91YmxlQ2xpY2tDb2x1bW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZG91YmxlY2xpY2tjb2x1bW4iKTsKLSAgICBpZiAoZG91YmxlQ2xpY2tDb2x1bW4gPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLTwlCi0gICBTdHJpbmcganNBbHRSZXN0b3JlID0gSFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIikpOwotJT4KLSAgICBpZiAoZG91YmxlQ2xpY2tDb2x1bW4udGl0bGUgPT0gIjwlPWpzQWx0UmVzdG9yZSU+IikKLSAgICAgIGRvdWJsZUNsaWNrQ29sdW1uLnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKSklPiI7Ci0gICAgZWxzZQotICAgICAgZG91YmxlQ2xpY2tDb2x1bW4udGl0bGUgPSAiPCU9anNBbHRSZXN0b3JlJT4iOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZTE1NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotLy8gYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLS8vIAotLy8gQ29udHJpYnV0b3JzOgotLy8gICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotLy8KLQotZnVuY3Rpb24gcmVzdW1lUHJveHlMb2FkUGFnZSgpCi17Ci0gIHZhciBwcm94eVBhZ2UgPSBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb3h5UGFnZSIpOwotICBwcm94eVBhZ2Uuc2V0QXR0cmlidXRlKCJyb3dzIiwgIjAsMTAwJSIpOwotICBwYXJlbnQuZnJhbWVzWzBdLmhhbmRsZUNvbXBsZXRpb24oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWFjMTkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLQotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdGFibGVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90YWJsZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWEyNGVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90YWJsZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgbnVtYmVyT2ZIZWFkZXJSb3dzID0gMTsKLSAgZnVuY3Rpb24gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICByZXR1cm4gY29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpLml0ZW0oMCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRTZWxlY3Qoc2VsZWN0LHZhbHVlKQotICB7Ci0gICAgZm9yICh2YXIgaT0wO2k8c2VsZWN0Lm9wdGlvbnMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoc2VsZWN0Lm9wdGlvbnNbaV0udmFsdWUgPT0gdmFsdWUpCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdC5zZWxlY3RlZEluZGV4ID0gaTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdC5vcHRpb25zW2ldLnRleHQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgdGFibGUuZGVsZXRlUm93KGkpOwotICAgICAgICBpLS07Ci0gICAgICB9Ci0gICAgfQotICAgIHZhciBjaGVja0FsbENoZWNrYm94Um93ID0gdGFibGUucm93c1swXTsKLSAgICB2YXIgY2hlY2tBbGxDaGVja2JveCA9IGNoZWNrQWxsQ2hlY2tib3hSb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICBpZiAoY2hlY2tBbGxDaGVja2JveC5jaGVja2VkKQotICAgICAgY2hlY2tBbGxDaGVja2JveC5jaGVja2VkID0gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVSb3dDaGVja2JveENsaWNrKGUpCi0gIHsKLSAgICB2YXIgY2hlY2tib3g7Ci0gICAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgICAgY2hlY2tib3ggPSBldmVudC5zcmNFbGVtZW50OwotICAgIGVsc2UKLSAgICAgIGNoZWNrYm94ID0gZS50YXJnZXQ7Ci0gICAgdmFyIGNlbGwgPSBjaGVja2JveC5wYXJlbnROb2RlOwotICAgIHZhciByb3cgPSBjZWxsLnBhcmVudE5vZGU7Ci0gICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpCi0gICAgICBoaWdobGlnaHRSb3cocm93LCJyb3djb2xvciIpOwotICAgIGVsc2UKLSAgICAgIGhpZ2hsaWdodFJvdyhyb3csInRhYmxlY2VsbHMiKTsKLQotICAgIHZhciB0Ym9keSA9IHJvdy5wYXJlbnROb2RlOwotICAgIHZhciB0YWJsZSA9IHRib2R5LnBhcmVudE5vZGU7Ci0gICAgdmFyIGNoZWNrQWxsQ2hlY2tib3ggPSB0YWJsZS5yb3dzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgaWYgKGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZCkKLSAgICAgIGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZCA9IGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gY3JlYXRlUm93Q2hlY2tib3goKQotICB7Ci0gICAgdmFyIHJvd0NoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICByb3dDaGVja2JveC5zZXRBdHRyaWJ1dGUoIm5hbWUiLHJvd0NoZWNrYm94TmFtZSk7Ci0gICAgcm93Q2hlY2tib3gudHlwZSA9ICJjaGVja2JveCI7Ci0gICAgcm93Q2hlY2tib3gudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIikpJT4iOwotICAgIHJvd0NoZWNrYm94Lm9uY2xpY2sgPSBoYW5kbGVSb3dDaGVja2JveENsaWNrOwotICAgIHJldHVybiByb3dDaGVja2JveDsKLSAgfQotCi0gIGZ1bmN0aW9uIGhhbmRsZUNoZWNrQWxsQ2xpY2sodGFibGVDb250YWluZXJJZCxjaGVja0FsbENoZWNrYm94KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgcm93Q2hlY2tib3guY2hlY2tlZCA9IGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZDsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwicm93Y29sb3IiKTsKLSAgICAgIGVsc2UKLSAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInRhYmxlY2VsbHMiKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBoaWdobGlnaHRSb3cocm93LGNsYXNzTmFtZSkKLSAgewotICAgIHZhciByb3dDb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIGZvciAodmFyIGk9MTtpPHJvd0NvbHVtbnMubGVuZ3RoO2krKykKLSAgICAgIHJvd0NvbHVtbnMuaXRlbShpKS5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gIH0KLQotICBmdW5jdGlvbiBoaWdobGlnaHRFcnJhbnRSb3cocm93LGNsYXNzTmFtZSkKLSAgewotICAgIHZhciByb3dDb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gcm93Q29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4wQ29udHJvbCA9IGNvbHVtbjAuY2hpbGROb2Rlc1swXTsKLSAgICB2YXIgc3RhcnQ7Ci0gICAgaWYgKGNvbHVtbjBDb250cm9sLnR5cGUgPT0gImNoZWNrYm94IikKLSAgICB7Ci0gICAgICBjb2x1bW4wQ29udHJvbC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgIHJvd0NvbHVtbnMuaXRlbSgxKS5jbGFzc05hbWUgPSAiZmlyc3Rjb2x1bW5lcnJhbnRyb3djb2xvciI7Ci0gICAgICBzdGFydCA9IDI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJmaXJzdGNvbHVtbmVycmFudHJvd2NvbG9yIjsKLSAgICAgIHN0YXJ0ID0gMTsKLSAgICB9Ci0gICAgcm93Q29sdW1ucy5pdGVtKHJvd0NvbHVtbnMubGVuZ3RoLTEpLmNsYXNzTmFtZSA9ICJsYXN0Y29sdW1uZXJyYW50cm93Y29sb3IiOwotICAgIGZvciAodmFyIGk9c3RhcnQ7aTxyb3dDb2x1bW5zLmxlbmd0aC0xO2krKykKLSAgICAgIHJvd0NvbHVtbnMuaXRlbShpKS5jbGFzc05hbWUgPSAibWlkZGxlZXJyYW50cm93Y29sb3IiOwotICB9Ci0KLSAgZnVuY3Rpb24gdHdpc3QodGFibGVDb250YWluZXJJZCx0d2lzdEltYWdlTmFtZSkKLSAgewotICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0d2lzdEltYWdlID0gZG9jdW1lbnQuaW1hZ2VzW3R3aXN0SW1hZ2VOYW1lXTsKLSAgICBpZiAodGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0gICAgewotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgdHdpc3RJbWFnZS5zcmMgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iOwotICAgICAgdHdpc3RJbWFnZS5hbHQgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpKSU+IjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICB0d2lzdEltYWdlLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiI7Ci0gICAgICB0d2lzdEltYWdlLmFsdCA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIikpJT4iOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKQotICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwieCIrdGFibGVDb250YWluZXJJZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheVN0cmluZyhpbnB1dFZhbHVlKQotICB7Ci0gICAgaWYgKGlucHV0VmFsdWUgPT0gbnVsbCB8fCBpbnB1dFZhbHVlLmxlbmd0aCA8IDEpCi0gICAgICByZXR1cm4gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIlRBQkxFX0JMQU5LX1BMQUNFSE9MREVSIikpJT4iOwotICAgIHJldHVybiBpbnB1dFZhbHVlOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90b29sYmFyLmpzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3Rvb2xiYXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYjFiMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3Rvb2xiYXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotLy8gYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLS8vIAotLy8gQ29udHJpYnV0b3JzOgotLy8gICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotLy8KLQotZnVuY3Rpb24gbW91c2VvdmVyKGltZykKLXsKLSAgaW1nLmNsYXNzTmFtZSA9ICJob3ZlciI7Ci19Ci0KLWZ1bmN0aW9uIG1vdXNlb3V0KGltZykKLXsKLSAgaW1nLmNsYXNzTmFtZSA9ICJub3JtYWwiOwotfQotCi1mdW5jdGlvbiBtb3VzZWRvd24oaW1nKQotewotICBpbWcuY2xhc3NOYW1lID0gImRvd24iOwotfQotCi1mdW5jdGlvbiBtb3VzZXVwKGltZykKLXsKLSAgcmV0dXJuIG1vdXNlb3V0KGltZyk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RyZWV2aWV3LmpzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RyZWV2aWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTg0M2ZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90cmVldmlldy5qcworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gCi0vLyBDb250cmlidXRvcnM6Ci0vLyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0vLwotCi0vLyBSZXF1aXJlcyBicm93c2VyZGV0ZWN0LmpzCi0KLXZhciBzZWxlY3RlZEFuY2hvck5hbWUgPSAiIjsKLQotZnVuY3Rpb24gc2V0U2VsZWN0ZWRBbmNob3JOYW1lKGFuY2hvck5hbWUpCi17Ci0gIHNlbGVjdGVkQW5jaG9yTmFtZSA9IGFuY2hvck5hbWU7Ci19Ci0KLWZ1bmN0aW9uIHNlbGVjdE5vZGUoYW5jaG9yTmFtZSxvcGVuSW1hZ2VQYXRoKQotewotICB2YXIgaXNJRSA9IGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpOwotICBpZiAoc2VsZWN0ZWRBbmNob3JOYW1lLmxlbmd0aCA+IDApCi0gIHsKLSAgICB2YXIgc2VsZWN0ZWRBbmNob3I7Ci0gICAgaWYgKGlzSUUpCi0gICAgICBzZWxlY3RlZEFuY2hvciA9IGRvY3VtZW50LmFuY2hvcnMoc2VsZWN0ZWRBbmNob3JOYW1lKTsKLSAgICBlbHNlCi0gICAgICBzZWxlY3RlZEFuY2hvciA9IGRvY3VtZW50LmFuY2hvcnNbc2VsZWN0ZWRBbmNob3JOYW1lXTsKLSAgICBpZiAoc2VsZWN0ZWRBbmNob3IpCi0gICAgICBzZWxlY3RlZEFuY2hvci5jbGFzc05hbWUgPSAidW5zZWxlY3RlZFRleHRBbmNob3IiOwotICB9Ci0gIGlmIChhbmNob3JOYW1lLmluZGV4T2YoIi0xIikgPT0gLTEpCi0gIHsKLSAgICBpZiAoaXNJRSkKLSAgICAgIGRvY3VtZW50LmFuY2hvcnMoYW5jaG9yTmFtZSkuY2xhc3NOYW1lID0gInNlbGVjdGVkVGV4dEFuY2hvciI7Ci0gICAgZWxzZQotICAgICAgZG9jdW1lbnQuYW5jaG9yc1thbmNob3JOYW1lXS5jbGFzc05hbWUgPSAic2VsZWN0ZWRUZXh0QW5jaG9yIjsKLSAgICBzZXRTZWxlY3RlZEFuY2hvck5hbWUoYW5jaG9yTmFtZSk7Ci0gICAgYWx0ZXJJbWFnZShhbmNob3JOYW1lLG9wZW5JbWFnZVBhdGgpOwotICB9Ci0gIGVsc2UKLSAgICBzZXRTZWxlY3RlZEFuY2hvck5hbWUoIiIpOwotfQotCi1mdW5jdGlvbiBhbHRlckltYWdlKGltYWdlTmFtZSxpbWFnZVBhdGgpCi17Ci0gIGRvY3VtZW50LmltYWdlc1tpbWFnZU5hbWVdLnNyYyA9IGltYWdlUGF0aDsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy93c2RsYnJvd3Nlci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvd3NkbGJyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQ1YTdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy93c2RsYnJvd3Nlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gc2Vzc2lvbi5nZXRJZCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgd3NkbFdpbmRvdzsKLSAgdmFyIHdzZGxXaW5kb3dDbG9zZWQgPSB0cnVlOwotICB2YXIgdGFyZ2V0V1NETFVSTEVsZW1lbnQ7Ci0gIGZ1bmN0aW9uIG9wZW5XU0RMQnJvd3Nlcihmb3JtQ29udGFpbmVySWQsdHlwZSkKLSAgewotICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUNvbnRhaW5lcklkKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgdGFyZ2V0V1NETFVSTEVsZW1lbnQgPSBmb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+OwotICAgIHZhciBsaW5rOwotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRSU+OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuV1NETEJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvclNlcnZpY2Uoc2Vzc2lvbklkKSkpJT4iOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSU+OgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbldTRExCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JTZXJ2aWNlSW50ZXJmYWNlKHNlc3Npb25JZCkpKSU+IjsKLSAgICB9Ci0gICAgd3NkbFdpbmRvdyA9IHdpbmRvdy5vcGVuKGxpbmssIndzZGxXaW5kb3ciLCJoZWlnaHQ9MzAwLHdpZHRoPTQ1MCxzdGF0dXM9eWVzLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMiKTsKLSAgICBpZiAod3NkbFdpbmRvdy5mb2N1cykKLSAgICAgIHdzZGxXaW5kb3cuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb3NlV1NETEJyb3dzZXIoKQotICB7Ci0gICAgaWYgKCF3c2RsV2luZG93Q2xvc2VkKQotICAgICAgd3NkbFdpbmRvdy5jbG9zZSgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2UwZjM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE5YTRmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gYWN0aW9uID0gbmV3IEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmIChpbnB1dHNWYWxpZCkKLSAgIHsKLSAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIH0KLSU+Ci0KLSAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFmN2I0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiIlPgotCi0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNmYyZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbgotICAgQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4N2VmMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBCdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiBhY3Rpb24gPSBuZXcgQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZTVkMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbiBhY3Rpb24gPSBuZXcgQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgYm9vbGVhbiBidXNpbmVzc0V4aXN0cyA9IGFjdGlvbi52YWxpZGF0ZUJ1c2luZXNzKCk7Ci0KLSAgIGlmICghYnVzaW5lc3NFeGlzdHMpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX0JVU0lORVNTX05PREUiKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2QxZTQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIlPgotCi0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci08JQotRW51bWVyYXRpb24gcGFyYW1OYW1lcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsKLXdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKXBhcmFtTmFtZXMubmV4dEVsZW1lbnQoKTsKLSAgU3RyaW5nW10gcGFyYW1WYWx1ZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbU5hbWUpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPXBhcmFtTmFtZSU+IiB2YWx1ZT0iPCU9cGFyYW1WYWx1ZXNbaV0lPiI+Ci08JQotICB9Ci19Ci0lPgotPC9mb3JtPgotPC9ib2R5PgotPC9odG1sPgotCi08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotQWRkVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IEFkZFRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKGFjdGlvbi5mYXZvcml0ZUV4aXN0cygpKSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVMiKSklPiIpKQotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlkZWM0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbiBhY3Rpb247Ci0gICBpZiAoc2VsZWN0ZWROb2RlIGluc3RhbmNlb2YgRm9sZGVyTm9kZSkKLSAgICAgYWN0aW9uID0gbmV3IENsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLSAgIGVsc2UKLSAgICAgYWN0aW9uID0gbmV3IENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gVGhlIGFjdGlvbiBtYXkgYmUgZXhlY3V0ZWQgcHJvZ3JhbW1lZCBsaW5rLgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIAotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAKLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjc3Y2EzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIENsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24gYWN0aW9uID0gbmV3IENsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Db21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjMxNTc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBDb21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gYWN0aW9uID0gbmV3IENvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKGlucHV0c1ZhbGlkKQotICAgewotICAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgfQotJT4KLQotICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICA8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2JmZWUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IGFjdGlvbi5nZXRTdWJRdWVyeUtleSgpOwotICAgU3RyaW5nQnVmZmVyIG5ld1N1YlF1ZXJ5S2V5ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgaWYgKHN1YlF1ZXJ5S2V5ICE9IG51bGwgJiYgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPiAwKQotICAgICBuZXdTdWJRdWVyeUtleS5hcHBlbmQoYWN0aW9uLmdldFN1YlF1ZXJ5S2V5KCkpLmFwcGVuZCgnOicpOwotICAgbmV3U3ViUXVlcnlLZXkuYXBwZW5kKGFjdGlvbi5nZXROZXdTdWJRdWVyeSgpKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKWFjdGlvbi5nZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgcGFyZW50Rm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlGb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKG5ld1N1YlF1ZXJ5S2V5LnRvU3RyaW5nKCkpOwotICAgU3RyaW5nIG5ld1N1YlF1ZXJ5SXRlbVN0cmluZyA9IGFjdGlvbi5nZXROZXdTdWJRdWVyeUl0ZW0oKTsKLSAgIHN1YlF1ZXJ5Rm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sbmV3U3ViUXVlcnlJdGVtU3RyaW5nKTsKLSAgIHN1YlF1ZXJ5Rm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCxuZXcgQm9vbGVhbihhY3Rpb24uaXNTdWJRdWVyeUdldCgpKSk7Ci0gICAKLSAgIC8vIEFsd2F5cyBpbml0aWFsaXplIHRoZSBxdWVyeSBuYW1lIHNvIHRoZSBzdWJxdWVyeSBtYWtlcyBzZW5zZS4KLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHBhcmVudFF1ZXJ5TmFtZSA9IChTdHJpbmcpcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgaWYgKHBhcmVudFF1ZXJ5TmFtZSA9PSBudWxsKQotICAgICBwYXJlbnRRdWVyeU5hbWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiREVGQVVMVF9RVUVSWV9OQU1FIik7Ci0gICBpbnQgbmV3U3ViUXVlcnlJdGVtID0gSW50ZWdlci5wYXJzZUludChuZXdTdWJRdWVyeUl0ZW1TdHJpbmcpOwotICAgU3RyaW5nIG5ld1N1YlF1ZXJ5SXRlbVR5cGVTdHJpbmcgPSBudWxsOwotICAgc3dpdGNoIChuZXdTdWJRdWVyeUl0ZW0pCi0gICB7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgbmV3U3ViUXVlcnlJdGVtVHlwZVN0cmluZyA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CVVNJTkVTU0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgIG5ld1N1YlF1ZXJ5SXRlbVR5cGVTdHJpbmcgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICBkZWZhdWx0OgotICAgICAgIG5ld1N1YlF1ZXJ5SXRlbVR5cGVTdHJpbmcgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0VTIik7Ci0gICB9Ci0gICBTdHJpbmdbXSBtZXNzYWdlUGFyYW1ldGVycyA9IHtwYXJlbnRRdWVyeU5hbWUsbmV3U3ViUXVlcnlJdGVtVHlwZVN0cmluZ307Ci0gICBzdWJRdWVyeUZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJERUZBVUxUX1NVQlFVRVJZX05BTUUiLG1lc3NhZ2VQYXJhbWV0ZXJzKSk7Ci0gICAKLSAgIE5vZGUgbm9kZSA9IGFjdGlvbi5nZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgIGludCBub2RlSWQgPSBub2RlLmdldE5vZGVJZCgpOwotICAgaW50IHRvb2xJZCA9IG5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpOwotICAgaW50IHZpZXdJZCA9IG5vZGUuZ2V0Vmlld0lkKCk7Ci0gICBpbnQgdmlld1Rvb2xJZCA9IG5vZGUuZ2V0Vmlld1Rvb2xJZCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsbmV3U3ViUXVlcnlLZXkudG9TdHJpbmcoKSxmYWxzZSkpKSU+IjsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Mb2dpbkFkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzM2I0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Mb2dpbkFkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHk+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgTG9naW5BZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgTG9naW5BZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5Y2U3YTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTG9nb3V0QWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBMb2dvdXRBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgTG9nb3V0QWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7IC8vYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAwNDA3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24gYWN0aW9uID0gbmV3IE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFpbnB1dHNWYWxpZCkKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgICB7Ci0gICAgICAgYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjllNDgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgaWYgKCFpbnB1dHNWYWxpZCkKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgICB7Ci0gICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHNlbGVjdGVkIG5vZGUgaXMgdmlzaWJsZS4KLSAgICAgICBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5tYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICBuYXZpZ2F0b3JDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSklPiI7Ci0gICAgcHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvT3BlblJlZ2lzdHJ5QWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYzc0M2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvT3BlblJlZ2lzdHJ5QWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0KLSAgIE9wZW5SZWdpc3RyeUFjdGlvbiBhY3Rpb24gPSBuZXcgT3BlblJlZ2lzdHJ5QWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjYmNlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVmcmVzaFVERElOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWZyZXNoVURESU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIFRoZSBhY3Rpb24gbWF5IGJlIGV4ZWN1dGVkIHZpYSBwcm9ncmFtIGxpbmsuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgYm9vbGVhbiBpc05vZGVEYXRhVmFsaWQgPSBhY3Rpb24udmVyaWZ5Tm9kZURhdGEoKTsKLQotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICBTdHJpbmcgb25Mb2FkQWN0aW9uOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHByb2Nlc3NDbGVhck5vZGVzRm9ybSgpCi0gIHsKLSAgICB2YXIgY2xlYXJOb2Rlc0Zvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICB2YXIgc3VibWl0Q2xlYXJOb2Rlc0Zvcm0gPSBmYWxzZTsKLTwlCi0gICAgIFZlY3RvciBzdGFsZU5vZGVzID0gYWN0aW9uLmdldFN0YWxlTm9kZXMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c3RhbGVOb2Rlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTm9kZSBzdGFsZU5vZGUgPSAoTm9kZSlzdGFsZU5vZGVzLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9OT0RFIixzdGFsZU5vZGUuZ2V0Tm9kZU5hbWUoKSkpJT4iKSkKLSAgICB7Ci0gICAgICBjbGVhck5vZGVzRm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iLDwlPXN0YWxlTm9kZS5nZXROb2RlSWQoKSU+KSk7Ci0gICAgICBzdWJtaXRDbGVhck5vZGVzRm9ybSA9IHRydWU7Ci0gICAgfQotPCUKLSAgICAgfQotJT4KLSAgICBpZiAoc3VibWl0Q2xlYXJOb2Rlc0Zvcm0pCi0gICAgICBjbGVhck5vZGVzRm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+ICAgIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci08L2Zvcm0+Ci08JQotICAgaWYgKCFpc05vZGVEYXRhVmFsaWQpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFN0cmluZyBub2RlTmFtZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0Tm9kZShub2RlSWQpLmdldE5vZGVOYW1lKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfTk9ERSIsbm9kZU5hbWUpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+ICAgIAotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvY2Vzc0NsZWFyTm9kZXNGb3JtKCk7Ci08L3NjcmlwdD4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdlZjM2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZnJlc2hVRERJTm9kZXNBY3Rpb24gYWN0aW9uID0gbmV3IFJlZnJlc2hVRERJTm9kZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gICAKLSAgIC8vIFJ1biB0aGUgYWN0aW9uCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHByb2Nlc3NDbGVhck5vZGVzRm9ybSgpCi0gIHsKLSAgICB2YXIgY2xlYXJOb2Rlc0Zvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLTwlCi0gICAgIFZlY3RvciBzdGFsZU5vZGVzID0gYWN0aW9uLmdldFN0YWxlTm9kZXMoKTsKLSAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHN0YWxlTm9kZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIE5vZGUgc3RhbGVOb2RlID0gKE5vZGUpc3RhbGVOb2Rlcy5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfTk9ERSIsc3RhbGVOb2RlLmdldE5vZGVOYW1lKCkpKSU+IikpCi0gICAgICBjbGVhck5vZGVzRm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iLDwlPXN0YWxlTm9kZS5nZXROb2RlSWQoKSU+KSk7Ci08JSAgICAKLSAgICAgfQotJT4KLSAgICBjbGVhck5vZGVzRm9ybS5zdWJtaXQoKTsKLSAgfSAgICAgICAgIAotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLTwvZm9ybT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9jZXNzQ2xlYXJOb2Rlc0Zvcm0oKTsKLTwvc2NyaXB0PiAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmJjOTgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWI0M2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZiZTFmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNzI3NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBlZGM4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZmZjFiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNjM4ZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMwNjJjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgxZTc1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTNhNDBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMTE5ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNDdlMDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3YWE5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mzk1ZjhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDM2MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZjYmNjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGFjdGlvbiA9IG5ldyBSZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoaW5wdXRzVmFsaWQpCi0gICB7Ci0gICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICB9Ci0lPgotCi0gICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgIDwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgyNGE5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFJlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5ODM3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIENyZWF0ZSB0aGUgYWN0aW9uLgotICAgUmVzaXplVURESUZyYW1lc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVzaXplVURESUZyYW1lc0FjdGlvbihjb250cm9sbGVyKTsKLSAgIAotICAgLy8gUG9wdWxhdGUgdGhlIGFjdGlvbiB3aXRoIHRoZSByZXF1ZXN0IHByb3BlcnRpZXMuCi0gICBib29sZWFuIHJlc3VsdCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgaWYgKHJlc3VsdCkKLSAgIHsKLSAgICAgYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotICAgICAKLSAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCA9IGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCk7Ci0gICAgdmFyIGFjdGlvbnNDb250YWluZXJGcmFtZXNldCA9IGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpOwotICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LnNldEF0dHJpYnV0ZSgiY29scyIsIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Iik7Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0LnNldEF0dHJpYnV0ZSgicm93cyIsIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIpOwotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3VkZGlfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYmIxOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvY2JwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLQotICAgQ2F0ZWdvcnlOb2RlIHNlbGVjdGVkTm9kZSA9IChDYXRlZ29yeU5vZGUpYWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpOwotICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgIE5vZGUgcHJldmlvdXNTZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRQcmV2aW91c1NlbGVjdGVkTm9kZSgpOwotICAgaW50IHNlbGVjdGVkTm9kZUlkID0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgaWYgKHByZXZpb3VzU2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICB7Ci0gICAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgICB7Ci0lPgotICA8JT10cmVlQ29udGVudFZhciU+LmFsdGVySW1hZ2UoJzwlPXByZXZpb3VzU2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHByZXZpb3VzU2VsZWN0ZWROb2RlLmdldENsb3NlZEltYWdlUGF0aCgpKSklPicpOwotPCUKLSAgICAgfQotICAgfQotICAgU3RyaW5nIHNlbGVjdGVkTm9kZUFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPiAgICAgCi0gIDwlPXRyZWVDb250ZW50VmFyJT4uc2VsZWN0Tm9kZSgnPCU9c2VsZWN0ZWROb2RlQW5jaG9yTmFtZSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkTm9kZS5nZXRPcGVuSW1hZ2VQYXRoKCkpKSU+Jyk7Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24uaGFzaCA9ICcjPCU9c2VsZWN0ZWROb2RlQW5jaG9yTmFtZSU+JzsKLTwlICAKLSAgIH0KLSAgIAotICAgQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCA9IChDYXRlZ29yeUVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBLZXllZFJlZmVyZW5jZSBrciA9IGNhdGVnb3J5RWxlbWVudC5nZXRDYXRlZ29yeSgpOwotJT4KLSAgY2F0ZWdvcnlCcm93c2VyV2luZG93Lm9wZW5lci50YXJnZXRDYXRlZ29yeUtleU5hbWVFbGVtZW50LnZhbHVlID0gIjwlPWtyLmdldEtleU5hbWUoKSU+IjsKLSAgY2F0ZWdvcnlCcm93c2VyV2luZG93Lm9wZW5lci50YXJnZXRDYXRlZ29yeUtleVZhbHVlRWxlbWVudC52YWx1ZSA9ICI8JT1rci5nZXRLZXlWYWx1ZSgpJT4iOwotICBjYXRlZ29yeUJyb3dzZXJXaW5kb3cub3BlbmVyLmNsb3NlQ2F0ZWdvcnlCcm93c2VyKCk7Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2M2NmMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNlbGVjdEZpbmRUb29sQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RGaW5kVG9vbEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi0gICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYjdkMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi0gICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzRhNDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxNjM3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotICAgCi0gICBpZiAoIWFjdGlvblJlc3VsdCkKLSAgIHsKLSAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICAgU3RyaW5nIHN1YlF1ZXJ5TGlzdEtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSk7Ci0gICAgIGludCBzdWJRdWVyeUxpc3RJdGVtSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCkpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IFVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX0lURU1fVkFMSURBVElPTl9GQUlMRUQiLGFjdGlvbi5nZXRJdGVtTmFtZSgpKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHN1YlF1ZXJ5S2V5LHN1YlF1ZXJ5TGlzdEtleSxzdWJRdWVyeUxpc3RJdGVtSWQpKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOWU3MWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24gYWN0aW9uID0gbmV3IFNlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgYm9vbGVhbiBzZXJ2aWNlRXhpc3RzID0gYWN0aW9uLnZhbGlkYXRlU2VydmljZSgpOwotCi0gICBpZiAoIXNlcnZpY2VFeGlzdHMpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX1NFUlZJQ0VfTk9ERSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2I1Zjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBTZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gc2VydmljZUV4aXN0cyA9IGFjdGlvbi52YWxpZGF0ZVNlcnZpY2UoKTsKLQotICAgaWYgKCFzZXJ2aWNlRXhpc3RzKQotICAgewotICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKShhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9TRVJWSUNFX05PREUiKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YjI4NzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgYm9vbGVhbiBzaUV4aXN0cyA9IGFjdGlvbi52YWxpZGF0ZVNlcnZpY2VJbnRlcmZhY2UoKTsKLQotICAgaWYgKCFzaUV4aXN0cykKLSAgIHsKLSAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfU0lfTk9ERSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjk2N2IxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gc2lFeGlzdHMgPSBhY3Rpb24udmFsaWRhdGVTZXJ2aWNlSW50ZXJmYWNlKCk7Ci0KLSAgIGlmICghc2lFeGlzdHMpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX1NJX05PREUiKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNDA1ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBhY3Rpb24gPSBuZXcgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgIHsKLSAgICAgaWYgKGlucHV0c1ZhbGlkKQotICAgICB7Ci0gICAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgICB9Ci0lPgotICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICA8L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZTM3NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uCi1Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uIGFjdGlvbiA9IG5ldyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gICAKLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWUwNGY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL2NicGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFRvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0KLSAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250ZW50UGFnZSgpKSklPiI7Ci0gIGVsc2UKLSAgICBjYXRlZ29yeUJyb3dzZXJXaW5kb3cubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRUcmVlQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08JQotICAgfQotJT4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZWU3NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ5OGM3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBUcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbiBhY3Rpb24gPSBuZXcgVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNIT1dfUkVTVUxUU19UQVJHRVQpICE9IG51bGwpCi0gICAgIGFjdGlvbi5lbmFibGVTaG93UmVzdWx0c1RhcmdldCgpOwotICAgZWxzZQotICAgICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICBOb2RlIHRhcmdldE5vZGUgPSBhY3Rpb24uZ2V0VGFyZ2V0Tm9kZSgpOwotICAgU3RyaW5nIHRhcmdldE5vZGVBbmNob3JOYW1lID0gdGFyZ2V0Tm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIG5hdmlnYXRvckNvbnRlbnQuc2VsZWN0Tm9kZSgnPCU9dGFyZ2V0Tm9kZUFuY2hvck5hbWUlPicsJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0YXJnZXROb2RlLmdldE9wZW5JbWFnZVBhdGgoKSkpJT4nKTsKLSAgbmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbi5oYXNoPScjPCU9dGFyZ2V0Tm9kZUFuY2hvck5hbWUlPic7Ci0gIHByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRkZWYwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpKTsKLSAgIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgcmVnRGV0YWlsc1Rvb2wgPSByZWdOb2RlLmdldFJlZ0RldGFpbHNUb29sKCk7Ci0gICByZWdEZXRhaWxzVG9vbC5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5VU0VSX0RFRklORURfQ0FURUdPUklFUyxjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICByZWdOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLnNldFNlbGVjdGVkVG9vbElkKHJlZ0RldGFpbHNUb29sLmdldFRvb2xJZCgpKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhyZWdOb2RlLmdldE5vZGVJZCgpLGZhbHNlKSkpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY1Y2JjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24iJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGFjdGlvbiA9IG5ldyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYm9vbGVhbiBwYXJhbVZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotaWYgKHBhcmFtVmFsaWQpIHsKLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMLGZhbHNlKSkpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMDNmZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1ODIwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMzFmNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gYWN0aW9uID0gbmV3IFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VucHVibGlzaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOWViNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVbnB1Ymxpc2hBY3Rpb24gYWN0aW9uID0gbmV3IFVucHVibGlzaEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmNDAyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgaWYgKCFpbnB1dHNWYWxpZCkKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgYm9vbGVhbiByZWZyZXNoUmVzdWx0ID0gYWN0aW9uLnJlZnJlc2hGcm9tUmVnaXN0cnkoKTsKLSAgICAgCi0gICAgIGlmICghcmVmcmVzaFJlc3VsdCkKLSAgICAgewotICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9BQ1RJT04sYWN0aW9uKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUFVCTElTSF9JVEVNIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwIikpJT4iOwotICBlbHNlCi0gICAgcHJvcGVydGllc0NvbnRlbnQucmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgICB9Ci0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzBlYWIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVXBkYXRlQnVzaW5lc3NBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZUJ1c2luZXNzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlTmV3UHVibGlzaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YWVhNWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlTmV3UHVibGlzaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIFVwZGF0ZUFjdGlvbiBhY3Rpb24gPSAoVXBkYXRlQWN0aW9uKXNlc3Npb24uZ2V0QXR0cmlidXRlKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9BQ1RJT04pOwotICAgc2Vzc2lvbi5yZW1vdmVBdHRyaWJ1dGUoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX0FDVElPTik7Ci0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmE3NTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVJlZ2lzdHJ5QWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVXBkYXRlUmVnaXN0cnlBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZVJlZ2lzdHJ5QWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZDk0ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFVwZGF0ZVNlcnZpY2VBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZVNlcnZpY2VBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghaW5wdXRzVmFsaWQpCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIGJvb2xlYW4gcmVmcmVzaFNlcnZpY2VSZXN1bHQgPSBhY3Rpb24ucmVmcmVzaEZyb21SZWdpc3RyeSgpOwotICAgICBib29sZWFuIHJlZnJlc2hCdXNpbmVzc1Jlc3VsdCA9IGFjdGlvbi5yZWZyZXNoQnVzaW5lc3NGcm9tUmVnaXN0cnkoKTsKLSAgICAgaWYgKCFyZWZyZXNoU2VydmljZVJlc3VsdCkKLSAgICAgewotICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9BQ1RJT04sYWN0aW9uKTsKLSAgICAgICBpZiAoIXJlZnJlc2hCdXNpbmVzc1Jlc3VsdCkKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9TRVJWSUNFX1BVQkxJU0hfQlVTSU5FU1MiKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZU5ld1B1Ymxpc2hCdXNpbmVzc0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gIGVsc2UKLSAgICBwcm9wZXJ0aWVzQ29udGVudC5yZXF1ZXN0U3VibWl0dGVkID0gZmFsc2U7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgfQotICAgICAgIGVsc2UKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9QVUJMSVNIX0lURU0iKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlTmV3UHVibGlzaEFjdGlvbkpTUC5qc3AiKSklPiI7Ci0gIGVsc2UKLSAgICBwcm9wZXJ0aWVzQ29udGVudC5yZXF1ZXN0U3VibWl0dGVkID0gZmFsc2U7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgfQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgICB9Ci0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlhOGYwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbiBhY3Rpb24gPSBuZXcgVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlTmV3UHVibGlzaEJ1c2luZXNzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VOZXdQdWJsaXNoQnVzaW5lc3NBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWY2ZWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VOZXdQdWJsaXNoQnVzaW5lc3NBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBVcGRhdGVTZXJ2aWNlQWN0aW9uIGFjdGlvbiA9IChVcGRhdGVTZXJ2aWNlQWN0aW9uKXNlc3Npb24uZ2V0QXR0cmlidXRlKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9BQ1RJT04pOwotICAgc2Vzc2lvbi5yZW1vdmVBdHRyaWJ1dGUoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX0FDVElPTik7Ci0KLSAgIFJlZ1B1Ymxpc2hUb29sIHJlZ1B1Ymxpc2hUb29sID0gYWN0aW9uLnNldHVwUmVnUHVibGlzaFRvb2woKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQocmVnUHVibGlzaFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoZmFsc2UpKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9uc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFiYTE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+IiBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGFpbmVyLmpzcCIpKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X2Jyb3dzZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X2Jyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjllNTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV9icm93c2VyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRDYXRlZ29yeVRNb2RlbEtleShjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICAKLSAgIFN0cmluZ0J1ZmZlciB0b29sYmFyTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvY2F0ZWdvcnlfdG9vbGJhci5qc3A/Iik7Ci0gICB0b29sYmFyTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVElUTEVfQ0FURUdPUllfQlJPV1NFUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjAsMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX1dPUktBUkVBJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FURUdPUklFU19XT1JLQVJFQSIpJT4iIGZyYW1lYm9yZGVyPTAgbm9yZXNpemU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQVRFR09SSUVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0b29sYmFyTGluay50b1N0cmluZygpKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19DT05URU5UJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FURUdPUklFU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5nZXRDYXRlZ29yeUNvbnRlbnRQYWdlKHNlc3Npb25JZCxjYXRlZ29yeVRNb2RlbEtleSkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzAwM2Q3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotPGpzcDp1c2VCZWFuIGlkPSJjb21tb25DYXRlZ29yeU1vZGVscyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJhcHBsaWNhdGlvbiIvPgotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FURUdPUklFU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90cmVldmlldy5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gdHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YSgpCi0gIHsKLSAgICB0b3Aub3BlbmVyLnRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiJdLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChUcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLGNhdGVnb3J5VE1vZGVsS2V5KSkpJT4iOwotICB9ICAKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPCUgICAKLSAgIC8vIENoZWNrIGlmIHRoZSBjYXRlZ29yeSBpcyBhIGNvbW1vbiBjYXRlZ29yeS4KLSAgIENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKWNvbW1vbkNhdGVnb3J5TW9kZWxzLmdldChjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICBpZiAoY2F0ZWdvcnlNb2RlbCA9PSBudWxsKQotICAgewotICAgICAvLyBUaGUgY2F0ZWdvcnkgaXMgdXNlci1kZWZpbmVkLiAgICAgCi0gICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpKTsKLSAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsgICAKLSAgICAgY2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKXJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yeShjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICB9Ci0gICBieXRlIHJjID0gQ2F0ZWdvcnlNb2RlbC5PUEVSQVRJT05fU1VDQ0VTU0ZVTDsKLSAgIGlmICghY2F0ZWdvcnlNb2RlbC5pc0RhdGFMb2FkZWQoKSkKLSAgIHsKLSAgICAgc3luY2hyb25pemVkKGNhdGVnb3J5TW9kZWwpCi0gICAgIHsKLSAgICAgICBpZiAoIWNhdGVnb3J5TW9kZWwuaXNEYXRhTG9hZGVkKCkpCi0gICAgICAgICByYyA9IGNhdGVnb3J5TW9kZWwubG9hZEZyb21EZWZhdWx0RGF0YUZpbGUoKTsKLSAgICAgfQotICAgfQotICAgaWYgKHJjICE9IENhdGVnb3J5TW9kZWwuT1BFUkFUSU9OX1NVQ0NFU1NGVUwpCi0gICB7Ci0lPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19OT19DQVRFR09SWV9EQVRBIixjYXRlZ29yeU1vZGVsLmdldERpc3BsYXlOYW1lKCkpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfQ0FURUdPUllfREFUQSIsImphdmFzY3JpcHQ6dHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YSgpIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08JSAgIAotICAgfQotICAgZWxzZQotICAgewotICAgICBOb2RlTWFuYWdlciBjYXRlZ29yeU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0Q2F0ZWdvcnlNYW5hZ2VyKGNhdGVnb3J5TW9kZWwpOwotICAgICBTdHJpbmcgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0gICAgIGludCBmb2N1c2VkTm9kZUlkID0gY2F0ZWdvcnlNYW5hZ2VyLmdldEZvY3VzZWROb2RlSWQoKTsKLSAgICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gY2F0ZWdvcnlNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgIHsKLSAgICAgICBzZWxlY3RlZEFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotICAgICAgIGlmIChmb2N1c2VkTm9kZUlkID09IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkKLSAgICAgICAgIGZvY3VzZWRBbmNob3JOYW1lID0gc2VsZWN0ZWRBbmNob3JOYW1lOwotICAgICB9Ci0lPgotPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotPCU9Y2F0ZWdvcnlNYW5hZ2VyLnJlbmRlclRyZWVWaWV3KHJlc3BvbnNlKSU+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZWxmLmxvY2F0aW9uLmhhc2g9IiM8JT1mb2N1c2VkQW5jaG9yTmFtZSU+IgotICBzZXRTZWxlY3RlZEFuY2hvck5hbWUoIjwlPXNlbGVjdGVkQW5jaG9yTmFtZSU+Iik7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0lPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2Q4ZDU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBVEVHT1JJRVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIiBvblVubG9hZD0idG9wLm9wZW5lci5jYXRlZ29yeVdpbmRvd0Nsb3NlZD10cnVlIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIj4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvaW1hZ2VzL2NhdGVnb3J5LmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0NBVEVHT1JJRVMiKSU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0b3Aub3BlbmVyLmNhdGVnb3J5V2luZG93Q2xvc2VkPWZhbHNlOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL2dlby1kYXRhLnR4dCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL2dlby1kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3OGFiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS9nZW8tZGF0YS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzgzICswLDAgQEAKLWdlbyMtLSNXb3JsZCMtLQotZ2VvI0FFI1VuaXRlZCBBcmFiIEVtaXJhdGVzIy0tCi1nZW8jQUYjQWZnaGFuaXN0YW4jLS0KLWdlbyNBRyNBbnRpZ3VhIEFuZCBCYXJidWRhIy0tCi1nZW8jQUkjQW5ndWlsbGEjLS0KLWdlbyNBTCNBbGJhbmlhIy0tCi1nZW8jQU0jQXJtZW5pYSMtLQotZ2VvI0FOI05ldGhlcmxhbmRzIEFudGlsbGVzIy0tCi1nZW8jQU8jQW5nb2xhIy0tCi1nZW8jQVEjQW50YXJjdGljYSMtLQotZ2VvI0FSI0FyZ2VudGluYSMtLQotZ2VvI0FSLUEjU2FsdGEjQVIKLWdlbyNBUi1CI0J1ZW5vcyBBaXJlcyNBUgotZ2VvI0FSLUMjRGlzdHJpdG8gRmVkZXJhbCNBUgotZ2VvI0FSLUQjU2FuIEx1aXMjQVIKLWdlbyNBUi1FI0VudHJlIFJpb3MjQVIKLWdlbyNBUi1GI0xhIFJpb2phI0FSCi1nZW8jQVItRyNTYW50aWFnbyBEZWwgRXN0ZXJvI0FSCi1nZW8jQVItSCNDaGFjbyNBUgotZ2VvI0FSLUojU2FuIEp1YW4jQVIKLWdlbyNBUi1LI0NhdGFtYXJjYSNBUgotZ2VvI0FSLUwjTGEgUGFtcGEjQVIKLWdlbyNBUi1NI01lbmRvemEjQVIKLWdlbyNBUi1OI01pc2lvbmVzI0FSCi1nZW8jQVItUCNGb3Jtb3NhI0FSCi1nZW8jQVItUSNOZXVxdWVuI0FSCi1nZW8jQVItUiNSaW8gTmVncm8jQVIKLWdlbyNBUi1TI1NhbnRhIEZlI0FSCi1nZW8jQVItVCNUdWN1bWFuI0FSCi1nZW8jQVItVSNDaHVidXQjQVIKLWdlbyNBUi1WI1RpZXJyYSBEZWwgRnVlZ28jQVIKLWdlbyNBUi1XI0NvcnJpZW50ZXMjQVIKLWdlbyNBUi1YI0NvcmRvYmEjQVIKLWdlbyNBUi1ZI0p1anV5I0FSCi1nZW8jQVItWiNTYW50YSBDcnV6I0FSCi1nZW8jQVMjQW1lcmljYW4gU2Ftb2EjLS0KLWdlbyNBVCNBdXN0cmlhIy0tCi1nZW8jQVUjQXVzdHJhbGlhIy0tCi1nZW8jQVUtQ1QjQXVzdHJhbGlhbiBDYXBpdGFsIFRlcnJpdG9yeSNBVQotZ2VvI0FVLU5TI05ldyBTb3V0aCBXYWxlcyNBVQotZ2VvI0FVLU5UI05vcnRoZXJuIFRlcnJpdG9yeSNBVQotZ2VvI0FVLVFMI1F1ZWVuc2xhbmQjQVUKLWdlbyNBVS1TQSNTb3V0aCBBdXN0cmFsaWEjQVUKLWdlbyNBVS1UUyNUYXNtYW5pYSNBVQotZ2VvI0FVLVZJI1ZpY3RvcmlhI0FVCi1nZW8jQVUtV0EjV2VzdGVybiBBdXN0cmFsaWEjQVUKLWdlbyNBVyNBcnViYSMtLQotZ2VvI0FaI0F6ZXJiYWlqYW4jLS0KLWdlbyNCQSNCb3NuaWEtSGVyY2Vnb3ZpbmEjLS0KLWdlbyNCQiNCYXJiYWRvcyMtLQotZ2VvI0JEI0JhbmdsYWRlc2gjLS0KLWdlbyNCRSNCZWxnaXVtIy0tCi1nZW8jQkYjQnVya2luYSBGYXNvIy0tCi1nZW8jQkcjQnVsZ2FyaWEjLS0KLWdlbyNCSCNCYWhyYWluIy0tCi1nZW8jQkkjQnVydW5kaSMtLQotZ2VvI0JKI0JlbmluIy0tCi1nZW8jQk0jQmVybXVkYSMtLQotZ2VvI0JOI0JydW5laSBEYXJ1c3NhbGFtIy0tCi1nZW8jQk8jQm9saXZpYSMtLQotZ2VvI0JSI0JyYXppbCMtLQotZ2VvI0JSLUFDI0FjcmUjQlIKLWdlbyNCUi1BTCNBbGFnb2FzI0JSCi1nZW8jQlItQU0jQW1hem9uYXMjQlIKLWdlbyNCUi1BUCNBbWFwYSNCUgotZ2VvI0JSLUJBI0JhaGlhI0JSCi1nZW8jQlItQ0UjQ2VhcmEjQlIKLWdlbyNCUi1ERiNEaXN0cml0byBGZWRlcmFsI0JSCi1nZW8jQlItRVMjRXNwaXJpdG8gU2FudG8jQlIKLWdlbyNCUi1HTyNHb2lhcyNCUgotZ2VvI0JSLU1BI01hcmFuaGFvI0JSCi1nZW8jQlItTUcjTWluYXMgR2VyYWlzI0JSCi1nZW8jQlItTVMjTWF0byBHcm9zc28gRG8gU3VsI0JSCi1nZW8jQlItTVQjTWF0byBHcm9zc28jQlIKLWdlbyNCUi1QQSNQYXJhI0JSCi1nZW8jQlItUEIjUGFyYWliYSNCUgotZ2VvI0JSLVBFI1Blcm5hbWJ1Y28jQlIKLWdlbyNCUi1QSSNQaWF1aSNCUgotZ2VvI0JSLVBSI1BhcmFuYSNCUgotZ2VvI0JSLVJKI1JpbyBEZSBKYW5laXJvI0JSCi1nZW8jQlItUk4jUmlvIEdyYW5kZSBEbyBOb3J0ZSNCUgotZ2VvI0JSLVJPI1JvbmRvbmlhI0JSCi1nZW8jQlItUlIjUm9yYWltYSNCUgotZ2VvI0JSLVJTI1JpbyBHcmFuZGUgRG8gU3VsI0JSCi1nZW8jQlItU0MjU2FudGEgQ2F0YXJpbmEjQlIKLWdlbyNCUi1TRSNTZXJnaXBlI0JSCi1nZW8jQlItU1AjU2FvIFBhdWxvI0JSCi1nZW8jQlItVE8jVG9jYW50aW5hI0JSCi1nZW8jQlMjQmFoYW1hcyMtLQotZ2VvI0JUI0JodXRhbiMtLQotZ2VvI0JVI0J1cm1hIChTZWUgTU0gTXlhbm1hcikjLS0KLWdlbyNCVyNCb3Rzd2FuYSMtLQotZ2VvI0JZI0JlbGFydXMjLS0KLWdlbyNCWS1CUiNCcmVzdHNrYXlhIHZvYmxhc3RzJyNCWQotZ2VvI0JZLUhPI0hvbXllbCdza2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWS1IUiNIcm9kemVuc2theWEgdm9ibGFzdHMnI0JZCi1nZW8jQlktTUEjTWFoaWx5b3dza2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWS1NSSNNaW5za2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWS1WSSNWaXRzeWVic2theWEgdm9ibGFzdHMnI0JZCi1nZW8jQlojQmVsaXplIy0tCi1nZW8jQ0EjQ2FuYWRhIy0tCi1nZW8jQ0EtQUIjQWxiZXJ0YSNDQQotZ2VvI0NBLUJDI0JyaXRpc2ggQ29sdW1iaWEjQ0EKLWdlbyNDQS1NQiNNYW5pdG9iYSNDQQotZ2VvI0NBLU5CI05ldyBCcnVuc3dpY2sjQ0EKLWdlbyNDQS1ORiNOZXdmb3VuZGxhbmQjQ0EKLWdlbyNDQS1OUyNOb3ZhIFNjb3RpYSNDQQotZ2VvI0NBLU5UI05vcnRod2VzdCBUZXJyaXRvcmllcyNDQQotZ2VvI0NBLU5VI051bmF2dXQjQ0EKLWdlbyNDQS1PTiNPbnRhcmlvI0NBCi1nZW8jQ0EtUEUjUHJpbmNlIEVkd2FyZCBJc2xhbmQjQ0EKLWdlbyNDQS1RQyNRdWViZWMjQ0EKLWdlbyNDQS1TSyNTYXNrYXRjaGV3YW4jQ0EKLWdlbyNDQS1ZVCNZdWtvbiBUZXJyaXRvcnkjQ0EKLWdlbyNDQyNDb2NvcyAoS2VlbGluZykgSXNsYW5kcyMtLQotZ2VvI0NEIyJDb25nbywgRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiIjLS0KLWdlbyNDRiNDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMjLS0KLWdlbyNDRyNDb25nbyMtLQotZ2VvI0NII1N3aXR6ZXJsYW5kIy0tCi1nZW8jQ0gtQUcjQWFyZ2F1I0NICi1nZW8jQ0gtQUkjQXBwZW56ZWxsIElubmVyLVJob2RlbiNDSAotZ2VvI0NILUFSI0FwcGVuemVsbCBBdXNzZXItUmhvZGVuI0NICi1nZW8jQ0gtQkUjQmVybiNDSAotZ2VvI0NILUJMI0Jhc2VsLUxhbmRzY2hhZnQjQ0gKLWdlbyNDSC1CUyNCYXNlbC1TdGFkdCNDSAotZ2VvI0NILUZSI0ZyaWJvdXJnI0NICi1nZW8jQ0gtR0UjR2Vuw6h2ZSNDSAotZ2VvI0NILUdMI0dsYXJ1cyNDSAotZ2VvI0NILUdSI0dyYXViw7xuZGVuI0NICi1nZW8jQ0gtSlUjSnVyYSNDSAotZ2VvI0NILUxVI0x1emVybiNDSAotZ2VvI0NILU5FI05ldWNoYXRlbCNDSAotZ2VvI0NILU5XI05pZHdhbGRlbiNDSAotZ2VvI0NILU9XI09id2FsZGVuI0NICi1nZW8jQ0gtU0cjU3QgR2FsbGVuI0NICi1nZW8jQ0gtU0gjU2NoYWZmaGF1c2VuI0NICi1nZW8jQ0gtU08jU29sb3RodXJuI0NICi1nZW8jQ0gtU1ojU2Nod3l6I0NICi1nZW8jQ0gtVEcjVGh1cmdhdSNDSAotZ2VvI0NILVRJI1RpY2lubyNDSAotZ2VvI0NILVVSI1VyaSNDSAotZ2VvI0NILVZEI1ZhdWQjQ0gKLWdlbyNDSC1WUyNWYWxhaXMjQ0gKLWdlbyNDSC1aRyNadWcjQ0gKLWdlbyNDSC1aSCNaw7xyaWNoI0NICi1nZW8jQ0kjQ290ZSBEJ0l2b2lyZSMtLQotZ2VvI0NLI0Nvb2sgSXNsYW5kcyMtLQotZ2VvI0NMI0NoaWxlIy0tCi1nZW8jQ00jQ2FtZXJvb24jLS0KLWdlbyNDTiNDaGluYSMtLQotZ2VvI0NOLTExI0JlaWppbmcjQ04KLWdlbyNDTi0xMiNUaWFuamluI0NOCi1nZW8jQ04tMTMjSGViZWkjQ04KLWdlbyNDTi0xNCNTaGFueGkjQ04KLWdlbyNDTi0xNSNOZWkgTW9uZ29sI0NOCi1nZW8jQ04tMjEjTGlhb25pbmcjQ04KLWdlbyNDTi0yMiNKaWxpbiNDTgotZ2VvI0NOLTIzI0hlaWxvbmdqaWFuZyNDTgotZ2VvI0NOLTMxI1NoYW5naGFpI0NOCi1nZW8jQ04tMzIjSmlhbmdzdSNDTgotZ2VvI0NOLTMzI1poZWppYW5nI0NOCi1nZW8jQ04tMzQjQW5odWkjQ04KLWdlbyNDTi0zNSNGdWppYW4jQ04KLWdlbyNDTi0zNiNKaWFuZ3hpI0NOCi1nZW8jQ04tMzcjU2hhbmRvbmcjQ04KLWdlbyNDTi00MSNIZW5hbiNDTgotZ2VvI0NOLTQyI0h1YmVpI0NOCi1nZW8jQ04tNDMjSHVuYW4jQ04KLWdlbyNDTi00NCNHdWFuZ2RvbmcjQ04KLWdlbyNDTi00NSNHdWFuZ3hpI0NOCi1nZW8jQ04tNDYjSGFpbmFuI0NOCi1nZW8jQ04tNTEjU2ljaHVhbiNDTgotZ2VvI0NOLTUyI0d1aXpob3UjQ04KLWdlbyNDTi01MyNZdW5uYW4jQ04KLWdlbyNDTi01NCNYaXphbmcjQ04KLWdlbyNDTi02MSNTaGFhbnhpI0NOCi1nZW8jQ04tNjIjR2Fuc3UjQ04KLWdlbyNDTi02MyNRaW5naGFpI0NOCi1nZW8jQ04tNjQjTmluZ3hpYSNDTgotZ2VvI0NOLTY1I1hpbmppYW5nI0NOCi1nZW8jQ04tNzEjVGFpd2FuI0NOCi1nZW8jQ04tOTEjWGlhbmdnYW5nIChIb25nIEtvbmcpI0NOCi1nZW8jQ04tOTIjQW9tZW4gKE1hY2F1KSNDTgotZ2VvI0NPI0NvbG9tYmlhIy0tCi1nZW8jQ1IjQ29zdGEgUmljYSMtLQotZ2VvI0NTI0Zvcm1lciBDemVjaG9zbG92YWtpYSMtLQotZ2VvI0NVI0N1YmEjLS0KLWdlbyNDViNDYXBlIFZlcmRlIy0tCi1nZW8jQ1gjQ2hyaXN0bWFzIElzbGFuZHMjLS0KLWdlbyNDWSNDeXBydXMjLS0KLWdlbyNDWiNDemVjaCBSZXB1YmxpYyMtLQotZ2VvI0RFIyJHZXJtYW55LCBGZWRlcmFsIFJlcHVibGljIG9mIiMtLQotZ2VvI0RFLUJFI0JlcmxpbiNERQotZ2VvI0RFLUJSI0JyYW5kZW5idXJnI0RFCi1nZW8jREUtQlcjQmFkZW4tV8O8cnR0ZW1iZXJnI0RFCi1nZW8jREUtQlkjQmF5ZXJuI0RFCi1nZW8jREUtSEIjQnJlbWVuIChIYW5zZXN0YWR0KSNERQotZ2VvI0RFLUhFI0hlc3NlbiNERQotZ2VvI0RFLUhII0hhbWJ1cmcgKEhhbnNlc3RhZHQpI0RFCi1nZW8jREUtTVYjTWVja2xlbmJ1cmctVm9ycG9tbWVybiNERQotZ2VvI0RFLU5JI05pZWRlcnNhY2hzZW4jREUKLWdlbyNERS1OVyNOb3JkcmhlaW4tV2VzdGZhbGVuI0RFCi1nZW8jREUtUlAjUmhlaW5sYW5kLVBmYWx6I0RFCi1nZW8jREUtU0gjU2NobGVzd2lnLUhvbHN0ZWluI0RFCi1nZW8jREUtU0wjU2FhcmxhbmQjREUKLWdlbyNERS1TTiNTYWNoc2VuI0RFCi1nZW8jREUtU1QjU2FjaHNlbi1BbmhhbHQjREUKLWdlbyNERS1USCNUaMO8cmluZ2VuI0RFCi1nZW8jREojRGppYm91dGkjLS0KLWdlbyNESyNEZW5tYXJrIy0tCi1nZW8jRE0jRG9taW5pY2EjLS0KLWdlbyNETyNEb21pbmljYW4gUmVwdWJsaWMjLS0KLWdlbyNETy0wMiNBenVhI0RPCi1nZW8jRE8tMDMjQmFob3J1Y28jRE8KLWdlbyNETy0wNCNCYXJhaG9uYSNETwotZ2VvI0RPLTA1I0RhamFiw7NuI0RPCi1nZW8jRE8tMDYjRHVhcnRlI0RPCi1nZW8jRE8tMDgjRWwgU2V5Ym8jRE8KLWdlbyNETy0wOSNFc3BhaWxsYXQjRE8KLWdlbyNETy0zMCNIYXRvIE1heW9yI0RPCi1nZW8jRE8tMTAjSW5kZXBlbmRlbmNpYSNETwotZ2VvI0RPLTExI0xhIEFsdGFncmFjaWEjRE8KLWdlbyNETy0wNyNMYSBFc3RyZWxsZXRhI0RPCi1nZW8jRE8tMTIjTGEgUm9tYW5hI0RPCi1nZW8jRE8tMTMjTGEgVmVnYSNETwotZ2VvI0RPLTE0I01hcsOtYSBUcmluaWRhZCBTw6FuY2hleiNETwotZ2VvI0RPLTI4I01vbnNlbm9yIE5vdWVsI0RPCi1nZW8jRE8tMTUjTW9udGUgQ3Jpc3RpI0RPCi1nZW8jRE8tMjkjTW9udGUgUGxhdGEjRE8KLWdlbyNETy0xNiNQZWRlcm5hbGVzI0RPCi1nZW8jRE8tMTcjUGVyYXZpYSNETwotZ2VvI0RPLTE4I1B1ZXJ0byBQbGF0YSNETwotZ2VvI0RPLTE5I1NvbGNlZG8jRE8KLWdlbyNETy0yMCNTYW1hbsOhI0RPCi1nZW8jRE8tMjEjU2FuIENyaXN0w7NiYWwjRE8KLWdlbyNETy0yMiNTYW4gSnVhbiNETwotZ2VvI0RPLTIzI1NhbiBQZWRybyBkZSBNYWNvcsOtcyNETwotZ2VvI0RPLTI0I1PDoW5jaGV6IFJhbcOtcmV6I0RPCi1nZW8jRE8tMjUjU2FudGlhZ28jRE8KLWdlbyNETy0yNiNTYW50aWFnbyBSb2Ryw61ndWV6I0RPCi1nZW8jRE8tMjcjVmFsdmVyZGUjRE8KLWdlbyNEWiNBbGdlcmlhIy0tCi1nZW8jRUMjRWN1YWRvciMtLQotZ2VvI0VFI0VzdG9uaWEjLS0KLWdlbyNFRyNFZ3lwdCMtLQotZ2VvI0VII1dlc3Rlcm4gU2FoYXJhIy0tCi1nZW8jRVIjRXJpdHJlYSMtLQotZ2VvI0VSLUFOI0Fuc2ViYSNFUgotZ2VvI0VSLURVI0RlYnViI0VSCi1nZW8jRVItREsjRGVidWJhd2kgS2V5aWggQmFocmkgW0RlYnViLUtlaWgtQmFocmldI0VSCi1nZW8jRVItR0IjR2FzaC1CYXJrYSNFUgotZ2VvI0VSLU1BI01hYWtlbCBbTWFla2VsXSNFUgotZ2VvI0VSLVNLI1NlbWVuYXdpIEtleWloIEJhaHJpIFtTZW1pZW4tS2VpaC1CYWhyaV0jRVIKLWdlbyNFUyNTcGFpbiMtLQotZ2VvI0VTLUFOI0FuZGFsdWPDrWEjRVMKLWdlbyNFUy1BTCNBbG1lcsOtYSNFUy1BTgotZ2VvI0VTLUNBI0PDoWRpeiNFUy1BTgotZ2VvI0VTLUNPI0PDs3Jkb2JhI0VTLUFOCi1nZW8jRVMtR1IjR3JhbmFkYSNFUy1BTgotZ2VvI0VTLUgjSHVlbHZhI0VTLUFOCi1nZW8jRVMtSiNKYcOpbiNFUy1BTgotZ2VvI0VTLU1BI03DoWxhZ2EjRVMtQU4KLWdlbyNFUy1TRSNTZXZpbGxhI0VTLUFOCi1nZW8jRVMtQVIjQXJhZ8OzbiNFUwotZ2VvI0VTLUhVI0h1ZXNjYSNFUy1BUgotZ2VvI0VTLVRFI1RlcnVlbCNFUy1BUgotZ2VvI0VTLVojWmFyYWdvemEjRVMtQVIKLWdlbyNFUy1PIyJBc3R1cmlhcywgUHJpbmNpcGFkbyBkZSIjRVMKLWdlbyNFUy1DTiNDYW5hcmlhcyNFUwotZ2VvI0VTLUdDI0xhcyBQYWxtYXMjRVMtQ04KLWdlbyNFUy1URiNTYW50YSBDcnV6IGRlIFRlbmVyaWZlI0VTLUNOCi1nZW8jRVMtUyNDYW50YWJyaWEjRVMKLWdlbyNFUy1DTSNDYXN0aWxsYS1MYSBNYW5jaGEjRVMKLWdlbyNFUy1BQiNBbGJhY2V0ZSNFUy1DTQotZ2VvI0VTLUNSI0N1aWRhZCBSZWFsI0VTLUNNCi1nZW8jRVMtQ1UjQ3VlbmNhI0VTLUNNCi1nZW8jRVMtR1UjR3VhZGFsYWphcmEjRVMtQ00KLWdlbyNFUy1UTyNUb2xlZG8jRVMtQ00KLWdlbyNFUy1DTCNDYXN0aWxsYSB5IExlw7NuI0VTCi1nZW8jRVMtQVYjw4F2aWxhI0VTLUNMCi1nZW8jRVMtQlUjQnVyZ29zI0VTLUNMCi1nZW8jRVMtTEUjTGXDs24jRVMtQ0wKLWdlbyNFUy1QI1BhbGVuY2lhI0VTLUNMCi1nZW8jRVMtU0EjU2FsYW1hbmNhI0VTLUNMCi1nZW8jRVMtU0cjU2Vnb3ZpYSNFUy1DTAotZ2VvI0VTLVNPI1NvcmlhI0VTLUNMCi1nZW8jRVMtVkEjVmFsbGFkb2xpZCNFUy1DTAotZ2VvI0VTLVpBI1phbW9yYSNFUy1DTAotZ2VvI0VTLUNUI0NhdGFsdW5hI0VTCi1nZW8jRVMtQiNCYXJjZWxvbmEjRVMtQ1QKLWdlbyNFUy1HRSNHaXJvbmEgW0dlcm9uYV0jRVMtQ1QKLWdlbyNFUy1MI0xsZWlkYSBbTMOpcnVkYV0jRVMtQ1QKLWdlbyNFUy1UI1RhcnJhZ29uYSNFUy1DVAotZ2VvI0VTLUVYI0V4dHJlbWFkdXJhI0VTCi1nZW8jRVMtQkEjQmFkYWpveiNFUy1FWAotZ2VvI0VTLUNDI0PDoWNlcmVzI0VTLUVYCi1nZW8jRVMtR0EjR2FsaWNpYSNFUwotZ2VvI0VTLUMjTGEgQ29ydW5hI0VTLUdBCi1nZW8jRVMtTFUjTHVnbyNFUy1HQQotZ2VvI0VTLU9SI09yZW5zZSNFUy1HQQotZ2VvI0VTLVBPI1BvbnRldmVkcmEjRVMtR0EKLWdlbyNFUy1QTSNJc2xhcyBCYWxlYXJlcyNFUwotZ2VvI0VTLUxPI0xhIFJpb2phI0VTCi1nZW8jRVMtTSMiTWFkcmlkLCBDb211bmlkYWQgZGUiI0VTCi1nZW8jRVMtTVUjIk11cmNpYSwgUmVnacOzbiBkZSIjRVMKLWdlbyNFUy1OQSMiTmF2YXJyYSwgQ29tdW5pZGFkIEZvcmFsIGRlIiNFUwotZ2VvI0VTLVBWI1Bhw61zIFZhc2NpI0VTCi1nZW8jRVMtVkkjw4FsYXZhI0VTLVBWCi1nZW8jRVMtU1MjR3VpcMO6emNvYSNFUy1QVgotZ2VvI0VTLUJJI1ZpemNheWEjRVMtUFYKLWdlbyNFUy1WQyMiVmFsZW5jaWFuYSwgQ29tdW5pZGFkIiNFUwotZ2VvI0VTLUEjQWxpY2FudGUjRVMtVkMKLWdlbyNFUy1DUyNDYXN0ZWxsw7NuI0VTLVZDCi1nZW8jRVMtViNWYWxlbmNpYSNFUy1WQwotZ2VvI0VTLUNFI0NldXRhI0VTCi1nZW8jRVMtTUwjTWVsaWxsYSNFUwotZ2VvI0VUI0V0aGlvcGlhIy0tCi1nZW8jRkkjRmlubGFuZCMtLQotZ2VvI0ZJLUFMI0FodmVuYW5tYWFuIE1hYWt1bnRhIChGaSkgw4VsYW5kcyBMw6RuIChTdikjRkkKLWdlbyNGSS1FUyNFdGVsw6QtU3VvbWVuIEzDpMOkbmkgKEZpKSBTw7ZkcmEgRmlubGFuZHMgTMOkbiAoU3YpI0ZJCi1nZW8jRkktSVMjSXTDpC1TdW9tZW4gTMOkw6RuaSAoRmkpIMOWc3RyYSBGaW5sYW5kcyBMw6RuIChTdikjRkkKLWdlbyNGSS1MTCNMYXBpbiBMw6TDpG5pIChGaSkgTGFwbGFuZHMgTMOkbiAoU3YpI0ZJCi1nZW8jRkktTFMjTMOkbnNpLVN1b21lbiBMw6TDpG5pIChGaSkgVsOkc3RyYSBGaW5sYW5kcyBMw6RuIChTdikjRkkKLWdlbyNGSS1PTCNPdWx1biBMw6TDpG5pIChGaSkgVWxlw6Vib3JncyBMw6RuIChTdikjRkkKLWdlbyNGSiNGaWppIy0tCi1nZW8jRksjRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpIy0tCi1nZW8jRk0jRmVkZXJhdGVkIFN0YXRlcyBPZiBNaWNyb25lc2lhIy0tCi1nZW8jRk8jRmFlcm9lIElzbGFuZHMjLS0KLWdlbyNGUiNGcmFuY2UjLS0KLWdlbyNGUi0wMSNBaW4jRlItVgotZ2VvI0ZSLTAyI0Fpc25lI0ZSLVMKLWdlbyNGUi0wMyNBbGxpZXIjRlItQwotZ2VvI0ZSLTA0I0FscGVzLURlLUhhdXRlLVByb3ZlbmNlI0ZSLVUKLWdlbyNGUi0wNSNIYXV0ZXMtQWxwZXMjRlItVQotZ2VvI0ZSLTA2I0FscGVzLU1hcml0aW1lcyNGUi1VCi1nZW8jRlItMDcjQXJkw6hjaGUjRlItVgotZ2VvI0ZSLTA4I0FyZGVubmVzI0ZSLUcKLWdlbyNGUi0wOSNBcmnDqGdlI0ZSLU4KLWdlbyNGUi0xMCNBdWJlI0ZSLUcKLWdlbyNGUi0xMSNBdWRlI0ZSLUsKLWdlbyNGUi0xMiNBdmV5cm9uI0ZSLU4KLWdlbyNGUi0xMyNCb3VjaGVzLUR1LVJow7RuZSNGUi1VCi1nZW8jRlItMTQjQ2FsdmFkb3MjRlItUAotZ2VvI0ZSLTE1I0NhbnRhbCNGUi1DCi1nZW8jRlItMTYjQ2hhcmVudGUjRlItVAotZ2VvI0ZSLTE3I0NoYXJlbnRlLU1hcml0aW1lI0ZSLVQKLWdlbyNGUi0xOCNDaGVyI0ZSLUYKLWdlbyNGUi0xOSNDb3Jyw6h6ZSNGUi1MCi1nZW8jRlItMjEjQ8O0dGUtRCdPciNGUi1ECi1nZW8jRlItMjIjQ8O0dGVzLUQnQXJtb3IjRlItRQotZ2VvI0ZSLTIzI0NyZXVzZSNGUi1MCi1nZW8jRlItMjQjRG9yZG9nbmUjRlItQgotZ2VvI0ZSLTI1I0RvdWJzI0ZSLUkKLWdlbyNGUi0yNiNEcsO0bWUjRlItVgotZ2VvI0ZSLTI3I0V1cmUjRlItUQotZ2VvI0ZSLTI4I0V1cmUtRXQtTG9pciNGUi1GCi1nZW8jRlItMjkjRmluaXN0w6hyZSNGUi1FCi1nZW8jRlItMkEjQ29yc2UtRHUtU3VkI0ZSLUgKLWdlbyNGUi0yQiNIYXV0ZS1Db3JzZSNGUi1ICi1nZW8jRlItMzAjR2FyZCNGUi1LCi1nZW8jRlItMzEjSGF1dGUtR2Fyb25uZSNGUi1OCi1nZW8jRlItMzIjR2VycyNGUi1OCi1nZW8jRlItMzMjR2lyb25kZSNGUi1CCi1nZW8jRlItMzQjSMOpcmF1bHQjRlItSwotZ2VvI0ZSLTM1I0lsbGUtRXQtVmlsYWluZSNGUi1FCi1nZW8jRlItMzYjSW5kcmUjRlItRgotZ2VvI0ZSLTM3I0luZHJlLUV0LUxvaXJlI0ZSLUYKLWdlbyNGUi0zOCNJc8OocmUjRlItVgotZ2VvI0ZSLTM5I0p1cmEjRlItSQotZ2VvI0ZSLTQwI0xhbmRlcyNGUi1CCi1nZW8jRlItNDEjTG9pci1FdC1DaGVyI0ZSLUYKLWdlbyNGUi00MiNMb2lyZSNGUi1WCi1nZW8jRlItNDMjSGF1dGUtTG9pcmUjRlItQwotZ2VvI0ZSLTQ0I0xvaXJlLUF0bGFudGlxdWUjRlItUgotZ2VvI0ZSLTQ1I0xvaXJldCNGUi1GCi1nZW8jRlItNDYjTG90I0ZSLU4KLWdlbyNGUi00NyNMb3QtRXQtR2Fyb25uZSNGUi1CCi1nZW8jRlItNDgjTG96w6hyZSNGUi1LCi1nZW8jRlItNDkjTWFpbmUtRXQtTG9pcmUjRlItUgotZ2VvI0ZSLTUwI01hbmNoZSNGUi1QCi1nZW8jRlItNTEjTWFybmUjRlItRwotZ2VvI0ZSLTUyI0hhdXRlLU1hcm5lI0ZSLUcKLWdlbyNGUi01MyNNYXllbm5lI0ZSLVIKLWdlbyNGUi01NCNNZXVydGhlLUV0LU1vc2VsbGUjRlItTQotZ2VvI0ZSLTU1I01ldXNlI0ZSLU0KLWdlbyNGUi01NiNNb3JiaWhhbiNGUi1FCi1nZW8jRlItNTcjTW9zZWxsZSNGUi1NCi1nZW8jRlItNTgjTmnDqHZyZSNGUi1ECi1nZW8jRlItNTkjTm9yZCNGUi1PCi1nZW8jRlItNjAjT2lzZSNGUi1TCi1nZW8jRlItNjEjT3JuZSNGUi1QCi1nZW8jRlItNjIjUGFzLURlLUNhbGFpcyNGUi1PCi1nZW8jRlItNjMjUHV5LURlLUTDtG1lI0ZSLUMKLWdlbyNGUi02NCNQeXLDqW7DqWVzLUF0bGFudGlxdWVzI0ZSLUIKLWdlbyNGUi02NSNIYXV0ZXMtUHlyw6luw6llcyNGUi1OCi1nZW8jRlItNjYjUHlyw6luw6llcy1PcmllbnRhbGVzI0ZSLUsKLWdlbyNGUi02NyNCYXMtUmhpbiNGUi1BCi1nZW8jRlItNjgjSGF1dC1SaGluI0ZSLUEKLWdlbyNGUi02OSNSaMO0bmUjRlItVgotZ2VvI0ZSLTcwI0hhdXRlLVNhw7RuZSNGUi1JCi1nZW8jRlItNzEjU2HDtG5lLUV0LUxvaXJlI0ZSLUQKLWdlbyNGUi03MiNTYXJ0aGUjRlItUgotZ2VvI0ZSLTczI1Nhdm9pZSNGUi1WCi1nZW8jRlItNzQjSGF1dGUtU2F2b2llI0ZSLVYKLWdlbyNGUi03NSNQYXJpcyNGUi1KCi1nZW8jRlItNzYjU2VpbmUtTWFyaXRpbWUjRlItUQotZ2VvI0ZSLTc3I1NlaW5lLUV0LU1hcm5lI0ZSLUoKLWdlbyNGUi03OCNZdmVsaW5lcyNGUi1KCi1nZW8jRlItNzkjRGV1eC1Tw6h2cmVzI0ZSLUIKLWdlbyNGUi04MCNTb21tZSNGUi1TCi1nZW8jRlItODEjVGFybiNGUi1OCi1nZW8jRlItODIjVGFybi1FdC1HYXJvbm5lI0ZSLU4KLWdlbyNGUi04MyNWYXIjRlItVQotZ2VvI0ZSLTg0I1ZhdWNsdXNlI0ZSLVUKLWdlbyNGUi04NSNWZW5kw6llI0ZSLVIKLWdlbyNGUi04NiNWaWVubmUjRlItVAotZ2VvI0ZSLTg3I0hhdXRlLVZpZW5uZSNGUi1MCi1nZW8jRlItODgjVm9zZ2VzI0ZSLU0KLWdlbyNGUi04OSNZb25uZSNGUi1ECi1nZW8jRlItOTAjVGVycml0b2lyZSBEZSBCZWxmb3J0I0ZSLUkKLWdlbyNGUi05MSNFc3Nvbm5lI0ZSLUoKLWdlbyNGUi05MiNIYXV0cy1EZS1TZWluZSNGUi1KCi1nZW8jRlItOTMjU2VpbmUtU2FpbnQtRGVuaXMjRlItSgotZ2VvI0ZSLTk0I1ZhbC1EZS1NYXJuZSNGUi1KCi1nZW8jRlItOTUjVmFsLUQnT2lzZSNGUi1KCi1nZW8jRlItQSNBbHNhY2UjRlIKLWdlbyNGUi1CI0FxdWl0YWluZSNGUgotZ2VvI0ZSLUMjQXV2ZXJnbmUjRlIKLWdlbyNGUi1EI0JvdXJnb2duZSNGUgotZ2VvI0ZSLUUjQnJldGFnbmUjRlIKLWdlbyNGUi1GI0NlbnRyZSNGUgotZ2VvI0ZSLUcjQ2hhbXBhZ25lLUFyZGVubmUjRlIKLWdlbyNGUi1II0NvcnNlI0ZSCi1nZW8jRlItSSNGcmFuY2hlLUNvbXTDqSNGUgotZ2VvI0ZSLUojSWxlLURlLUZyYW5jZSNGUgotZ2VvI0ZSLUsjTGFuZ3VlZG9jLVJvdXNzaWxsb24jRlIKLWdlbyNGUi1MI0xpbW91c2luI0ZSCi1nZW8jRlItTSNMb3JyYWluZSNGUgotZ2VvI0ZSLU4jTWlkaS1QeXLDqW7DqWVzI0ZSCi1nZW8jRlItTyNOb3JkLVBhcy1EZS1DYWxhaXMjRlIKLWdlbyNGUi1QI0Jhc3NlLU5vcm1hbmRpZSNGUgotZ2VvI0ZSLVEjSGF1dGUtTm9ybWFuZGllI0ZSCi1nZW8jRlItUiNQYXlzIERlIExhIExvaXJlI0ZSCi1nZW8jRlItUyNQaWNhcmRpZSNGUgotZ2VvI0ZSLVQjUG9pdG91LUNoYXJlbnRlcyNGUgotZ2VvI0ZSLVUjUHJvdmVuY2UtQWxwZXMtQ8O0dGUgRCdBenVyI0ZSCi1nZW8jRlItViNSaMO0bmUtQWxwZXMjRlIKLWdlbyNHQSNHYWJvbiMtLQotZ2VvI0dCI1VuaXRlZCBLaW5nZG9tIy0tCi1nZW8jR0ItQU5UI0FudHJpbSNHQi1OSVIKLWdlbyNHQi1BUkQjQXJkcyNHQi1OSVIKLWdlbyNHQi1BUk0jQXJtYWdoI0dCLU5JUgotZ2VvI0dCLUFWTiNBdm9uI0dCLUVORwotZ2VvI0dCLUJERiNCZWRmb3Jkc2hpcmUjR0ItRU5HCi1nZW8jR0ItQkZTI0JlbGZhc3QjR0ItTklSCi1nZW8jR0ItQktNI0J1Y2tpbmdoYW1zaGlyZSNHQi1FTkcKLWdlbyNHQi1CTEEjQmFsbHltZW5hI0dCLU5JUgotZ2VvI0dCLUJMWSNCYWxseW1vbmV5I0dCLU5JUgotZ2VvI0dCLUJOQiNCYW5icmlkZ2UjR0ItTklSCi1nZW8jR0ItQk9SI0JvcmRlcnMgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLUJSSyNCZXJrc2hpcmUjR0ItRU5HCi1nZW8jR0ItQ0FNI0NhbWJyaWRnZXNoaXJlI0dCLUVORwotZ2VvI0dCLUNFTiNDZW50cmFsIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1DR1YjQ3JhaWdhdm9uI0dCLU5JUgotZ2VvI0dCLUNIQSNDaGFubmVsIElzbGFuZHMjR0IKLWdlbyNHQi1DSFMjQ2hlc2hpcmUjR0ItRU5HCi1nZW8jR0ItQ0tGI0NhcnJpY2tmZXJndXMjR0ItTklSCi1nZW8jR0ItQ0tUI0Nvb2tzdG93biNHQi1OSVIKLWdlbyNHQi1DTFIjQ29sZXJhaW5lI0dCLU5JUgotZ2VvI0dCLUNMViNDbGV2ZWxhbmQjR0ItRU5HCi1nZW8jR0ItQ01BI0N1bWJyaWEjR0ItRU5HCi1nZW8jR0ItQ09OI0Nvcm53YWxsI0dCLUVORwotZ2VvI0dCLUNTUiNDYXN0bGVyZWFnaCNHQi1OSVIKLWdlbyNHQi1DV0QjQ2x3eWQjR0ItV0xTCi1nZW8jR0ItREJZI0RlcmJ5c2hpcmUjR0ItRU5HCi1nZW8jR0ItREZEI0R5ZmVkI0dCLVdMUwotZ2VvI0dCLURHTiNEdW5nYW5ub24jR0ItTklSCi1nZW8jR0ItREdZI0R1bWZyaWVzICYgR2FsbG93YXkgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLURPUiNEb3JzZXQjR0ItRU5HCi1nZW8jR0ItRE9XI0Rvd24jR0ItTklSCi1nZW8jR0ItRFJZI0RlcnJ5I0dCLU5JUgotZ2VvI0dCLURVUiNEdXJoYW0jR0ItRU5HCi1nZW8jR0ItRFZWI0Rldm9uI0dCLUVORwotZ2VvI0dCLUVORyNFbmdsYW5kI0dCCi1nZW8jR0ItRVNTI0Vzc2V4I0dCLUVORwotZ2VvI0dCLUVTWCNFYXN0IFN1c3NleCNHQi1FTkcKLWdlbyNHQi1GRVIjRmVybWFuYWdoI0dCLU5JUgotZ2VvI0dCLUZJRiNGaWZlIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1HTFMjR2xvdWNlc3RlcnNoaXJlI0dCLUVORwotZ2VvI0dCLUdNUCNHcmFtcGlhbiBSZWdpb24jR0ItU0NUCi1nZW8jR0ItR05UI0d3ZW50I0dCLVdMUwotZ2VvI0dCLUdTWSNHdWVybnNleSNHQi1DSEEKLWdlbyNHQi1HVEwjR3JlYXRlciBMb25kb24jR0ItRU5HCi1nZW8jR0ItR1RNI0dyZWF0ZXIgTWFuY2hlc3RlciNHQi1FTkcKLWdlbyNHQi1HV04jR3d5bmVkZCNHQi1XTFMKLWdlbyNHQi1IQU0jSGFtcHNoaXJlI0dCLUVORwotZ2VvI0dCLUhMRCNIaWdobGFuZCBSZWdpb24jR0ItU0NUCi1nZW8jR0ItSFJUI0hlcnRmb3Jkc2hpcmUjR0ItRU5HCi1nZW8jR0ItSFVNI0h1bWJlcnNpZGUjR0ItRU5HCi1nZW8jR0ItSFdSI0hlcmVmb3JkIEFuZCBXb3JjZXN0ZXIjR0ItRU5HCi1nZW8jR0ItSU9NI0lzbGUgT2YgTWFuI0dCCi1nZW8jR0ItSU9TI0lzbGVzIE9mIFNjaWxseSNHQi1FTkcKLWdlbyNHQi1JT1cjSXNsZSBPZiBXaWdodCNHQi1FTkcKLWdlbyNHQi1KU1kjSmVyc2V5I0dCLUNIQQotZ2VvI0dCLUtFTiNLZW50I0dCLUVORwotZ2VvI0dCLUxBTiNMYW5jYXNoaXJlI0dCLUVORwotZ2VvI0dCLUxFQyNMZWljZXN0ZXJzaGlyZSNHQi1FTkcKLWdlbyNHQi1MSU4jTGluY29sbnNoaXJlI0dCLUVORwotZ2VvI0dCLUxNViNMaW1hdmFkeSNHQi1OSVIKLWdlbyNHQi1MUk4jTGFybmUjR0ItTklSCi1nZW8jR0ItTFNCI0xpc2J1cm4jR0ItTklSCi1nZW8jR0ItTFROI0xvdGhpYW4gUmVnaW9uI0dCLVNDVAotZ2VvI0dCLU1GVCNNYWdoZXJhZmVsdCNHQi1OSVIKLWdlbyNHQi1NR00jTWlkIEdsYW1vcmdhbiNHQi1XTFMKLWdlbyNHQi1NU1kjTWVyc2V5c2lkZSNHQi1FTkcKLWdlbyNHQi1NWUwjTW95bGUjR0ItTklSCi1nZW8jR0ItTkJMI05vcnRodW1iZXJsYW5kI0dCLUVORwotZ2VvI0dCLU5ETiNOb3J0aCBEb3duI0dCLU5JUgotZ2VvI0dCLU5GSyNOb3Jmb2xrI0dCLUVORwotZ2VvI0dCLU5JUiNOb3J0aGVybiBJcmVsYW5kI0dCCi1nZW8jR0ItTlRBI05ld3RvbmFiYmV5I0dCLU5JUgotZ2VvI0dCLU5USCNOb3J0aGFtcHRvbnNoaXJlI0dCLUVORwotZ2VvI0dCLU5UVCNOb3R0aW5naGFtc2hpcmUjR0ItRU5HCi1nZW8jR0ItTllLI05vcnRoIFlvcmtzaGlyZSNHQi1FTkcKLWdlbyNHQi1OWU0jTmV3cnkgQW5kIE1vdXJuZSNHQi1OSVIKLWdlbyNHQi1PTUgjT21hZ2gjR0ItTklSCi1nZW8jR0ItT1JLI09ya25leSNHQi1TQ1QKLWdlbyNHQi1PWEYjT3hmb3Jkc2hpcmUjR0ItRU5HCi1nZW8jR0ItUE9XI1Bvd3lzI0dCLVdMUwotZ2VvI0dCLVNDVCNTY290bGFuZCNHQgotZ2VvI0dCLVNGSyNTdWZmb2xrI0dCLUVORwotZ2VvI0dCLVNHTSNTb3V0aCBHbGFtb3JnYW4jR0ItV0xTCi1nZW8jR0ItU0hSI1Nocm9wc2hpcmUjR0ItRU5HCi1nZW8jR0ItU09NI1NvbWVyc2V0I0dCLUVORwotZ2VvI0dCLVNSWSNTdXJyZXkjR0ItRU5HCi1nZW8jR0ItU1RCI1N0cmFiYW5lI0dCLU5JUgotZ2VvI0dCLVNURCNTdHJhdGhjbHlkZSBSZWdpb24jR0ItU0NUCi1nZW8jR0ItU1RTI1N0YWZmb3Jkc2hpcmUjR0ItRU5HCi1nZW8jR0ItU1lLI1NvdXRoIFlvcmtzaGlyZSNHQi1FTkcKLWdlbyNHQi1UQVkjVGF5c2lkZSBSZWdpb24jR0ItU0NUCi1nZW8jR0ItVFdSI1R5bmUgQW5kIFdlYXIjR0ItRU5HCi1nZW8jR0ItV0FSI1dhcndpY2tzaGlyZSNHQi1FTkcKLWdlbyNHQi1XR00jV2VzdCBHbGFtb3JnYW4jR0ItV0xTCi1nZW8jR0ItV0lMI1dpbHRzaGlyZSNHQi1FTkcKLWdlbyNHQi1XSVMjV2VzdGVybiBJc2xlcyNHQi1TQ1QKLWdlbyNHQi1XTFMjV2FsZXMjR0IKLWdlbyNHQi1XTUQjV2VzdCBNaWRsYW5kcyNHQi1FTkcKLWdlbyNHQi1XU1gjV2VzdCBTdXNzZXgjR0ItRU5HCi1nZW8jR0ItV1lLI1dlc3QgWW9ya3NoaXJlI0dCLUVORwotZ2VvI0dCLVpFVCNTaGV0bGFuZCAoWmV0bGFuZCkjR0ItU0NUCi1nZW8jR0QjR3JlbmFkYSMtLQotZ2VvI0dFI0dlb3JnaWEjLS0KLWdlbyNHRiNGcmVuY2ggR3VpYW5hIy0tCi1nZW8jR0gjR2hhbmEjLS0KLWdlbyNHSSNHaWJyYWx0YXIjLS0KLWdlbyNHTCNHcmVlbmxhbmQjLS0KLWdlbyNHTSNHYW1iaWEjLS0KLWdlbyNHTiNHdWluZWEjLS0KLWdlbyNHUCNHdWFkZWxvdXBlIy0tCi1nZW8jR1EjRXF1YXRvcmlhbCBHdWluZWEjLS0KLWdlbyNHUiNHcmVlY2UjLS0KLWdlbyNHUyNHZW9yZ2lhICYgU2FuZHdpY2ggSXNsYW5kcyMtLQotZ2VvI0dUI0d1YXRlbWFsYSMtLQotZ2VvI0dVI0d1YW0jLS0KLWdlbyNHVyNHdWluZWEtQmlzc2F1Iy0tCi1nZW8jR1kjR3V5YW5hIy0tCi1nZW8jSEsjSG9uZyBLb25nIy0tCi1nZW8jSE4jSG9uZHVyYXMjLS0KLWdlbyNIUiNDcm9hdGlhIy0tCi1nZW8jSFQjSGFpdGkjLS0KLWdlbyNIVSNIdW5nYXJ5Iy0tCi1nZW8jSUQjSW5kb25lc2lhIy0tCi1nZW8jSUUjSXJlbGFuZCMtLQotZ2VvI0lMI0lzcmFlbCMtLQotZ2VvI0lOI0luZGlhIy0tCi1nZW8jSU8jSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSMtLQotZ2VvI0lRI0lyYXEjLS0KLWdlbyNJUiMiSXJhbiwgSXNsYW1pYyBSZXB1YmxpYyBvZiIjLS0KLWdlbyNJUyNJY2VsYW5kIy0tCi1nZW8jSVQjSXRhbHkjLS0KLWdlbyNJVC0yMSNQaWVtb250ZSNJVAotZ2VvI0lULUFMI0FsZXNzYW5kcmlhI0lULTIxCi1nZW8jSVQtQVQjQXN0aSNJVC0yMgotZ2VvI0lULUJJI0JpZWxsYSNJVC0yMwotZ2VvI0lULUFPI0Fvc3RhIEFvc3RlIChmcikjSVQtMjMKLWdlbyNJVC1DTiNDdW5lbyNJVC0yNAotZ2VvI0lULU5PI05vdmFyYSNJVC0yNQotZ2VvI0lULUJHI0JlcmdhbW8jSVQtMjUKLWdlbyNJVC1CUyNCcmVzY2lhI0lULTI1Ci1nZW8jSVQtQ08jQ29tbyNJVC0yNQotZ2VvI0lULUNSI0NyZW1vbmEjSVQtMjUKLWdlbyNJVC1MQyNMZWNjbyNJVC0yNQotZ2VvI0lULUxPI0xvZGkjSVQtMjUKLWdlbyNJVC1NTiNNYW50b3ZhI0lULTI1Ci1nZW8jSVQtTUkjTWlsYW5vI0lULTI1Ci1nZW8jSVQtUFYjUGF2aWEjSVQtMjUKLWdlbyNJVC1TTyNTb25kcmlvI0lULTI1Ci1nZW8jSVQtVkEjVmFyZXNlI0lULTI1Ci1nZW8jSVQtVE8jVG9yaW5vI0lULTI2Ci1nZW8jSVQtVkIjVmVyYmFuby1DdXNpby1Pc3NvbGEjSVQtMjcKLWdlbyNJVC1WQyNWZXJjZWxsaSNJVC0yOAotZ2VvI0lULTIzI1ZhbGxlIGQnQW9zdGEjSVQKLWdlbyNJVC0yNSNMb21iYXJkaWEjSVQKLWdlbyNJVC0zMiNUcmVudGluby1BbHRvIEFkaWdlI0lUCi1nZW8jSVQtQlojQm9semFubyBCb3plbiAoZGUpI0lULTMyCi1nZW8jSVQtVE4jVHJlbnRvI0lULTMyCi1nZW8jSVQtMzQjVmVuZXRvI0lUCi1nZW8jSVQtQkwjQmVsbHVubyNJVC0zNAotZ2VvI0lULVBEI1BhZG92YSNJVC0zNAotZ2VvI0lULVJPI1JvdmlnbyNJVC0zNAotZ2VvI0lULVRWI1RyZXZpc28jSVQtMzQKLWdlbyNJVC1WRSNWZW5lemlhI0lULTM0Ci1nZW8jSVQtVlIjVmVyb25hI0lULTM0Ci1nZW8jSVQtVkkjVmljZW56YSNJVC0zNAotZ2VvI0lULTM2I0ZyaXVsaS1WZW5lemlhIEdpdWxpYSNJVAotZ2VvI0lULUdPI0dvcml6aWEjSVQtMzYKLWdlbyNJVC1QTiNQb3JkZW5vbmUjSVQtMzYKLWdlbyNJVC1UUyNUcmllc3RlI0lULTM2Ci1nZW8jSVQtVUQjVWRpbmUjSVQtMzYKLWdlbyNJVC00MiNMaWd1cmlhI0lUCi1nZW8jSVQtR0UjR2Vub3ZhI0lULTQyCi1nZW8jSVQtSU0jSW1wZXJpYSNJVC00MgotZ2VvI0lULVNQI0xhIFNwZXppYSNJVC00MgotZ2VvI0lULVNWI1Nhdm9uYSNJVC00MgotZ2VvI0lULTQ1I0VtaWxpYS1Sb21hZ25hI0lUCi1nZW8jSVQtQk8jQm9sb2duYSNJVC00NQotZ2VvI0lULUZFI0ZlcnJhcmEjSVQtNDUKLWdlbyNJVC1GTyNGb3Jsw6wjSVQtNDUKLWdlbyNJVC1NTyNNb2RlbmEjSVQtNDUKLWdlbyNJVC1QUiNQYXJtYSNJVC00NQotZ2VvI0lULVBDI1BpYWNlbnphI0lULTQ1Ci1nZW8jSVQtUkEjUmF2ZW5uYSNJVC00NQotZ2VvI0lULVJFI1JlZ2dpbyBFbWlsaWEjSVQtNDUKLWdlbyNJVC1STiNSaW1pbmkjSVQtNDUKLWdlbyNJVC01MiNUb3NjYW5hI0lUCi1nZW8jSVQtQVIjQXJlenpvI0lULTUyCi1nZW8jSVQtRkkjRmlyZW56ZSNJVC01MgotZ2VvI0lULUdSI0dyb3NzZXRvI0lULTUyCi1nZW8jSVQtTEkjTGl2b3JubyNJVC01MgotZ2VvI0lULUxVI0x1Y2NhI0lULTUyCi1nZW8jSVQtTVMjTWFzc2EtQ2FycmFyYSNJVC01MgotZ2VvI0lULVBJI1Bpc2EjSVQtNTIKLWdlbyNJVC1QVCNQaXN0b2lhI0lULTUyCi1nZW8jSVQtUE8jUHJhdG8jSVQtNTIKLWdlbyNJVC1TSSNTaWVuYSNJVC01MgotZ2VvI0lULTU1I1VtYnJpYSNJVAotZ2VvI0lULVBHI1BlcnVnaWEjSVQtNTUKLWdlbyNJVC1UUiNUZXJuaSNJVC01NQotZ2VvI0lULTU3I01hcmNoZSNJVAotZ2VvI0lULUFOI0FuY29uYSNJVC01NwotZ2VvI0lULUFQI0FzY29saSBQaWNlbm8jSVQtNTcKLWdlbyNJVC1NQyNNYWNlcmF0YSNJVC01NwotZ2VvI0lULVBTI1Blc2FybyBlIFVyYmlubyNJVC01NwotZ2VvI0lULTYyI0xhemlvI0lUCi1nZW8jSVQtRlIjRnJvc2lub25lI0lULTYyCi1nZW8jSVQtTFQjTGF0aW5hI0lULTYyCi1nZW8jSVQtUkkjUmlldGkjSVQtNjIKLWdlbyNJVC1STSNSb21hI0lULTYyCi1nZW8jSVQtVlQjVml0ZXJibyNJVC02MgotZ2VvI0lULTY1I0FicnV6em8jSVQKLWdlbyNJVC1DSCNDaGlldGkjSVQtNjUKLWdlbyNJVC1BUSNMJ0FxdWlsYSNJVC02NQotZ2VvI0lULVBFI1Blc2NhcmEjSVQtNjUKLWdlbyNJVC1URSNUZXJhbW8jSVQtNjUKLWdlbyNJVC02NyNNb2xpc2UjSVQKLWdlbyNJVC1DQiNDYW1wb2Jhc3NvI0lULTY3Ci1nZW8jSVQtSVMjSXNlcm5pYSNJVC02NwotZ2VvI0lULTcyI0NhbXBhbmlhI0lUCi1nZW8jSVQtQk4jQmVuZXZlbnRvI0lULTcyCi1nZW8jSVQtQ0UjQ2FzZXJ0YSNJVC03MgotZ2VvI0lULU5BI05hcG9saSNJVC03MgotZ2VvI0lULVNBI1NhbGVybm8jSVQtNzIKLWdlbyNJVC1BViNBdmVsbGlubyNJVC03MgotZ2VvI0lULTc1I1B1Z2xpYSNJVAotZ2VvI0lULUJBI0JhcmkjSVQtNzUKLWdlbyNJVC1CUiNCcmluZGlzaSNJVC03NQotZ2VvI0lULUZHI0ZvZ2dpYSNJVC03NQotZ2VvI0lULUxFI0xlY2NlI0lULTc1Ci1nZW8jSVQtVEEjVGFyYW50byNJVC03NQotZ2VvI0lULTc3I0Jhc2lsaWNhdGEjSVQKLWdlbyNJVC1NVCNNYXRlcmEjSVQtNzcKLWdlbyNJVC1QWiNQb3RlbnphI0lULTc3Ci1nZW8jSVQtNzgjQ2FsYWJyaWEjSVQKLWdlbyNJVC1DWiNDYXRhbnphcm8jSVQtNzgKLWdlbyNJVC1DUyNDb3NlbnphI0lULTc4Ci1nZW8jSVQtS1IjQ3JvdG9uZSNJVC03OAotZ2VvI0lULVJDI1JlZ2dpbyBDYWxhYnJpYSNJVC03OAotZ2VvI0lULVZWI1ZpYm8gVmFsZW50aWEjSVQtNzgKLWdlbyNJVC04MiNTaWNpbGlhI0lUCi1nZW8jSVQtQUcjQWdyaWdlbnRvI0lULTgyCi1nZW8jSVQtQ0wjQ2FsdGFuaXNzZXR0YSNJVC04MgotZ2VvI0lULUNUI0NhdGFuaWEjSVQtODIKLWdlbyNJVC1FTiNFbm5hI0lULTgyCi1nZW8jSVQtTUUjTWVzc2luYSNJVC04MgotZ2VvI0lULVBBI1BhbGVybW8jSVQtODIKLWdlbyNJVC1SRyNSYWd1c2EjSVQtODIKLWdlbyNJVC1TUiNTaXJhY3VzYSNJVC04MgotZ2VvI0lULVRQI1RyYXBhbmkjSVQtODIKLWdlbyNJVC04OCNTYXJkZWduYSNJVAotZ2VvI0lULUNBI0NhZ2xpYXJpI0lULTg4Ci1nZW8jSVQtTlUjTnVvcm8jSVQtODgKLWdlbyNJVC1PUiNPcmlzdGFubyNJVC04OAotZ2VvI0lULVNTI1Nhc3NhcmkjSVQtODgKLWdlbyNKTSNKYW1haWNhIy0tCi1nZW8jSk8jSm9yZGFuIy0tCi1nZW8jSlAjSmFwYW4jLS0KLWdlbyNKUC0wMSNIb2trYWlkbyNKUAotZ2VvI0pQLTAyI0FvbW9yaSNKUAotZ2VvI0pQLTAzI0l3YXRlI0pQCi1nZW8jSlAtMDQjTWl5YWdpI0pQCi1nZW8jSlAtMDUjQWtpdGEjSlAKLWdlbyNKUC0wNiNZYW1hZ2F0YSNKUAotZ2VvI0pQLTA3I0h1a3VzaW1hIChGdWt1c2hpbWEpI0pQCi1nZW8jSlAtMDgjSWJhcmFraSNKUAotZ2VvI0pQLTA5I1RvdGlnaSAoVG9jaGlnaSkjSlAKLWdlbyNKUC0xMCNHdW5tYSNKUAotZ2VvI0pQLTExI1NhaXRhbWEjSlAKLWdlbyNKUC0xMiNUaWJhIChDaGliYSkjSlAKLWdlbyNKUC0xMyNUb2t5byNKUAotZ2VvI0pQLTE0I0thbmFnYXdhI0pQCi1nZW8jSlAtMTUjTmlpZ2F0YSNKUAotZ2VvI0pQLTE2I1RveWFtYSNKUAotZ2VvI0pQLTE3I0lzaWthd2EgKElzaGlrYXdhKSNKUAotZ2VvI0pQLTE4I0h1a3VpIChGdWt1aSkjSlAKLWdlbyNKUC0xOSNZYW1hbmFzaSAoWWFtYW5hc2hpKSNKUAotZ2VvI0pQLTIwI05hZ2FubyNKUAotZ2VvI0pQLTIxI0dpaHUgKEdpZnUpI0pQCi1nZW8jSlAtMjIjU2l6dW9rYSAoU2hpenVva2EpI0pQCi1nZW8jSlAtMjMjQWl0aSAoQWljaGkpI0pQCi1nZW8jSlAtMjQjTWllI0pQCi1nZW8jSlAtMjUjU2lnYSAoU2hpZ2EpI0pQCi1nZW8jSlAtMjYjS3lvdG8jSlAKLWdlbyNKUC0yNyNPc2FrYSNKUAotZ2VvI0pQLTI4I0h5b2dvI0pQCi1nZW8jSlAtMjkjTmFyYSNKUAotZ2VvI0pQLTMwI1dha2F5YW1hI0pQCi1nZW8jSlAtMzEjVG90dG9yaSNKUAotZ2VvI0pQLTMyI1NpbWFuZSAoU2hpbWFuZSkjSlAKLWdlbyNKUC0zMyNPa2F5YW1hI0pQCi1nZW8jSlAtMzQjSGlyb3NpbWEgKEhpcm9zaGltYSkjSlAKLWdlbyNKUC0zNSNZYW1hZ3V0aSAoWWFtYWd1Y2hpKSNKUAotZ2VvI0pQLTM2I1Rva3VzaW1hIChUb2t1c2hpbWEpI0pQCi1nZW8jSlAtMzcjS2FnYXdhI0pQCi1nZW8jSlAtMzgjRWhpbWUjSlAKLWdlbyNKUC0zOSNLb3RpIChLb2NoaSkjSlAKLWdlbyNKUC00MCNIdWt1b2thIChGdWt1b2thKSNKUAotZ2VvI0pQLTQxI1NhZ2EjSlAKLWdlbyNKUC00MiNOYWdhc2FraSNKUAotZ2VvI0pQLTQzI0t1bWFtb3RvI0pQCi1nZW8jSlAtNDQjT2l0YSNKUAotZ2VvI0pQLTQ1I01peWF6YWtpI0pQCi1nZW8jSlAtNDYjS2Fnb3NpbWEgKEthZ29zaGltYSkjSlAKLWdlbyNKUC00NyNPa2luYXdhI0pQCi1nZW8jS0UjS2VueWEjLS0KLWdlbyNLRyNLeXJneXpzdGFuIy0tCi1nZW8jS0gjQ2FtYm9kaWEjLS0KLWdlbyNLSSNLaXJpYmF0aSMtLQotZ2VvI0tNI0NvbW9yb3MjLS0KLWdlbyNLTiNTdCBLaXR0cy1OZXZpcyMtLQotZ2VvI0tQIyJLb3JlYSwgRGVtIFBlb3BsZSdzIFJlcHVibGljIiMtLQotZ2VvI0tSIyJLb3JlYSwgUmVwdWJsaWMgb2YiIy0tCi1nZW8jS1ItMTEjU2VvdWwgVGV1Z2J5ZW9sc2kjS1IKLWdlbyNLUi0yNiNCdXNhbiBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi0yNyNEYWVndSBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi0zMCNEYWVqZW9uIEd3YW5nJ3llb2dzaSNLUgotZ2VvI0tSLTI5I0d3YW5nanUgR3dhbmcneWVvZ3NpI0tSCi1nZW8jS1ItMjgjSW5jaGVvbiBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi0zMSNVbHNhbiBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi00MyNDaHVuZ2NoZW9uZ2J1Z2RvI0tSCi1nZW8jS1ItNDQjQ2h1bmdjaGVvbmduYW1kbyNLUgotZ2VvI0tSLTQyI0dhbmcnd2VvbmRvI0tSCi1nZW8jS1ItNDEjR3llb25nZ2lkbyNLUgotZ2VvI0tSLTQ3I0d5ZW9uZ3NhbmdidWdkbyNLUgotZ2VvI0tSLTQ4I0d5ZW9uZ3NhbmduYW1kbyNLUgotZ2VvI0tSLTQ5I0planVkbyNLUgotZ2VvI0tSLTQ1I0plb25yYWJ1Z2RvI0tSCi1nZW8jS1ItNDYjSmVvbnJhbmFtZG8jS1IKLWdlbyNLVyNLdXdhaXQjLS0KLWdlbyNLWSNDYXltYW4gSXNsYW5kcyMtLQotZ2VvI0taI0themFraHN0YW4jLS0KLWdlbyNMQSNMYW8gUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpYyMtLQotZ2VvI0xCI0xlYmFub24jLS0KLWdlbyNMQyNTYWludCBMdWNpYSMtLQotZ2VvI0xJI0xpZWNodGVuc3RlaW4jLS0KLWdlbyNMSyNTcmkgTGFua2EjLS0KLWdlbyNMUiNMaWJlcmlhIy0tCi1nZW8jTFMjTGVzb3RobyMtLQotZ2VvI0xUI0xpdGh1YW5pYSMtLQotZ2VvI0xVI0x1eGVtYm91cmcjLS0KLWdlbyNMViNMYXR2aWEjLS0KLWdlbyNMWSNMeWJpYW4gQXJhYiBKYW1haGlyaXlhIy0tCi1nZW8jTUEjTW9yb2NjbyMtLQotZ2VvI01DI01vbmFjbyMtLQotZ2VvI01EI01vbGRvdmEjLS0KLWdlbyNNRyNNYWRhZ2FzY2FyIy0tCi1nZW8jTUgjTWFyc2hhbGwgSXNsYW5kcyMtLQotZ2VvI01LI0Zvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBPZiBNYWNlZG9uaWEjLS0KLWdlbyNNTCNNYWxpIy0tCi1nZW8jTU0jTXlhbm1hciAoRm9ybWVyIEJ1cm1hKSMtLQotZ2VvI01OI01vbmdvbGlhIy0tCi1nZW8jTU8jTWFjYXUjLS0KLWdlbyNNUCNOb3J0aGVybiBNYXJpYW5hcyMtLQotZ2VvI01RI01hcnRpbmlxdWUjLS0KLWdlbyNNUiNNYXVyaXRhbmlhIy0tCi1nZW8jTVMjTW9udHNlcnJhdCMtLQotZ2VvI01UI01hbHRhIy0tCi1nZW8jTVUjTWF1cml0aXVzIy0tCi1nZW8jTVYjTWFsZGl2ZXMjLS0KLWdlbyNNVyNNYWxhd2kjLS0KLWdlbyNNWCNNZXhpY28jLS0KLWdlbyNNWC1BR1UjQWd1YXNjYWxpZW50ZXMjTVgKLWdlbyNNWC1CQ04jQmFqYSBDYWxpZm9ybmlhI01YCi1nZW8jTVgtQkNTI0JhamEgQ2FsaWZvcm5pYSBTdXIjTVgKLWdlbyNNWC1DQU0jQ2FtcGVjaGUjTVgKLWdlbyNNWC1DSEgjQ2hpaHVhaHVhI01YCi1nZW8jTVgtQ0hQI0NoaWFwYXMjTVgKLWdlbyNNWC1DT0EjQ29haHVpbGEjTVgKLWdlbyNNWC1DT0wjQ29saW1hI01YCi1nZW8jTVgtREYjRGlzdHJpdG8gRmVkZXJhbCNNWAotZ2VvI01YLURVUiNEdXJhbmdvI01YCi1nZW8jTVgtR1JPI0d1ZXJyZXJvI01YCi1nZW8jTVgtR1VBI0d1YW5hanVhdG8jTVgKLWdlbyNNWC1ISUQjSGlkYWxnbyNNWAotZ2VvI01YLUpBTCNKYWxpc2NvI01YCi1nZW8jTVgtTUVYI01leGljbyNNWAotZ2VvI01YLU1JQyNNaWNob2FjYW4jTVgKLWdlbyNNWC1NT1IjTW9yZWxvcyNNWAotZ2VvI01YLU5BWSNOYXlhcml0I01YCi1nZW8jTVgtTkxFI051ZXZvIExlb24jTVgKLWdlbyNNWC1PQVgjT2F4YWNhI01YCi1nZW8jTVgtUFVFI1B1ZWJsYSNNWAotZ2VvI01YLVFVRSNRdWVyZXRhcm8jTVgKLWdlbyNNWC1ST08jUXVpbnRhbmEgUm9vI01YCi1nZW8jTVgtU0lOI1NpbmFsb2EjTVgKLWdlbyNNWC1TTFAjU2FuIEx1aXMgUG90b3NpI01YCi1nZW8jTVgtU09OI1Nvbm9yYSNNWAotZ2VvI01YLVRBQiNUYWJhc2NvI01YCi1nZW8jTVgtVEFNI1RhbWF1bGlwYXMjTVgKLWdlbyNNWC1UTEEjVGxheGNhbGEjTVgKLWdlbyNNWC1WRVIjVmVyYWNydXojTVgKLWdlbyNNWC1ZVUMjWXVjYXRhbiNNWAotZ2VvI01YLVpBQyNaYWNhdGVjYXMjTVgKLWdlbyNNWSNNYWxheXNpYSMtLQotZ2VvI01aI01vemFtYmlxdWUjLS0KLWdlbyNOQSNOYW1pYmlhIy0tCi1nZW8jTkMjTmV3IENhbGVkb25pYSMtLQotZ2VvI05FI05pZ2VyIy0tCi1nZW8jTkYjTm9yZm9sayBJc2xhbmQjLS0KLWdlbyNORyNOaWdlcmlhIy0tCi1nZW8jTkctRkMjQWJ1amEgQ2FwaXRhbCBUZXJyaXRvcnkjTkcKLWdlbyNORy1BQiNBYmlhI05HCi1nZW8jTkctQUQjQWRhbWF3YSNORwotZ2VvI05HLUFLI0Frd2EgSWJvbSNORwotZ2VvI05HLUFOI0FuYW1icmEjTkcKLWdlbyNORy1CQSNCYXVjaGkjTkcKLWdlbyNORy1CWSNCYXllbHNhI05HCi1nZW8jTkctQkUjQmVudWUjTkcKLWdlbyNORy1CTyNCb3JubyNORwotZ2VvI05HLUNSI0Nyb3NzIFJpdmVyI05HCi1nZW8jTkctREUjRGVsdGEjTkcKLWdlbyNORy1FQiNFYm9ueWkjTkcKLWdlbyNORy1FRCNFZG8jTkcKLWdlbyNORy1FSyNFa2l0aSNORwotZ2VvI05HLUVOI0VudWd1I05HCi1nZW8jTkctR08jR29tYmUjTkcKLWdlbyNORy1JTSNJbW8jTkcKLWdlbyNORy1KSSNKaWdhd2EjTkcKLWdlbyNORy1LRCNLYWR1bmEjTkcKLWdlbyNORy1LTiNLYW5vI05HCi1nZW8jTkctS1QjS2F0c2luYSNORwotZ2VvI05HLUtFI0tlYmJpI05HCi1nZW8jTkctS08jS29naSNORwotZ2VvI05HLUtXI0t3YXJhI05HCi1nZW8jTkctTEEjTGFnb3MjTkcKLWdlbyNORy1OQSNOYXNzYXJhd2EjTkcKLWdlbyNORy1OSSNOaWdlciNORwotZ2VvI05HLU9HI09ndW4jTkcKLWdlbyNORy1PTiNPbmRvI05HCi1nZW8jTkctT1MjT3N1biNORwotZ2VvI05HLU9ZI095byNORwotZ2VvI05HLVBMI1BsYXRlYXUjTkcKLWdlbyNORy1SSSNSaXZlcnMjTkcKLWdlbyNORy1TTyNTb2tvdG8jTkcKLWdlbyNORy1UQSNUYXJhYmEjTkcKLWdlbyNORy1ZTyNZb2JlI05HCi1nZW8jTkctWkEjWmFtZmFyYSNORwotZ2VvI05JI05pY2FyYWd1YSMtLQotZ2VvI05MI05ldGhlcmxhbmRzIy0tCi1nZW8jTk8jTm9yd2F5Iy0tCi1nZW8jTk8tMDEjw5hzdGZvbGQjTk8KLWdlbyNOTy0wMiNBa2Vyc2h1cyNOTwotZ2VvI05PLTAzI09zbG8jTk8KLWdlbyNOTy0wNCNIZWRtYXJrI05PCi1nZW8jTk8tMDUjT3BwbGFuZCNOTwotZ2VvI05PLTA2I0J1c2tlcnVkI05PCi1nZW8jTk8tMDcjVmVzdGZvbGQjTk8KLWdlbyNOTy0wOCNUZWxlbWFyayNOTwotZ2VvI05PLTA5I0F1c3QtQWdkZXIjTk8KLWdlbyNOTy0xMCNWZXN0LUFnZGVyI05PCi1nZW8jTk8tMTEjUm9nYWxhbmQjTk8KLWdlbyNOTy0xMiNOb3JkYWxhbmQjTk8KLWdlbyNOTy0xNCNTb2duIE9nIEZqb3JkYW5lI05PCi1nZW8jTk8tMTUjTcO4cmUgT2cgUm9tc2RhbCNOTwotZ2VvI05PLTE2I1PDuHItVHLDuG5kZWxhZyNOTwotZ2VvI05PLTE3I05vcmQtVHLDuG5kZWxhZyNOTwotZ2VvI05PLTE4I05vcmRsYW5kI05PCi1nZW8jTk8tMTkjVHJvbXMjTk8KLWdlbyNOTy0yMCNGaW5ubWFyayNOTwotZ2VvI05QI05lcGFsIy0tCi1nZW8jTlIjTmF1cnUjLS0KLWdlbyNOVSNOaXVlIy0tCi1nZW8jTlojTmV3IFplYWxhbmQjLS0KLWdlbyNOWi1BVUsjQXVja2xhbmQjTlotTgotZ2VvI05aLUJPUCNCYXkgT2YgUGxlbnR5I05aLU4KLWdlbyNOWi1DQU4jQ2FudGVyYnVyeSNOWi1TCi1nZW8jTlotR0lTI0dpc2Jvcm5lI05aLU4KLWdlbyNOWi1IS0IjSGF3a2VzJ1MgQmF5I05aLU4KLWdlbyNOWi1NQkgjTWFybGJvcm91Z2gjTlotUwotZ2VvI05aLU1XVCNNYW5hd2F0dS1XYW5nYW51aSNOWi1OCi1nZW8jTlotTiNOb3J0aCBJc2xhbmQjTloKLWdlbyNOWi1OU04jTmVsc29uI05aLVMKLWdlbyNOWi1OVEwjTm9ydGhsYW5kI05aLU4KLWdlbyNOWi1PVEEjT3RhZ28jTlotUwotZ2VvI05aLVMjU291dGggSXNsYW5kI05aCi1nZW8jTlotU1RMI1NvdXRobGFuZCNOWi1TCi1nZW8jTlotVEFTI1Rhc21hbiNOWi1TCi1nZW8jTlotVEtJI1RhcmFuYWtpI05aLU4KLWdlbyNOWi1XR04jV2VsbGluZ3RvbiNOWi1OCi1nZW8jTlotV0tPI1dhaWthdG8jTlotTgotZ2VvI05aLVdUQyNXZXN0IENvYXN0I05aLVMKLWdlbyNPTSNPbWFuIy0tCi1nZW8jUEEjUGFuYW1hIy0tCi1nZW8jUEUjUGVydSMtLQotZ2VvI1BGI0ZyZW5jaCBQb2x5bmVzaWEjLS0KLWdlbyNQRyNQYXB1YSBOZXcgR3VpbmVhIy0tCi1nZW8jUEgjUGhpbGlwcGluZXMjLS0KLWdlbyNQSyNQYWtpc3RhbiMtLQotZ2VvI1BMI1BvbGFuZCMtLQotZ2VvI1BMLURTI0RvbG5vxZtsxIVza2llI1BMCi1nZW8jUEwtS1AjS3VqYXdza28tcG9tb3Jza2llI1BMCi1nZW8jUEwtTFUjTHViZWxza2llI1BMCi1nZW8jUEwtTEIjTHVidXNraWUjUEwKLWdlbyNQTC1MRCPFgcOzZHpraWUjUEwKLWdlbyNQTC1NQSNNYcWCb3BvbHNraWUjUEwKLWdlbyNQTC1NWiNNYXpvd2llY2tpZSNQTAotZ2VvI1BMLU9QI09wb2xza2llI1BMCi1nZW8jUEwtUEsjUG9ka2FycGFja2llI1BMCi1nZW8jUEwtUEQjUG9kbGFza2llI1BMCi1nZW8jUEwtUE0jUG9tb3Jza2llI1BMCi1nZW8jUEwtU0wjxZpsxIVza2llI1BMCi1nZW8jUEwtU0sjxZp3acSZdG9rcnp5c2tpZSNQTAotZ2VvI1BMLVdOI1dhcm1pxYRza28tbWF6dXJza2llI1BMCi1nZW8jUEwtV1AjV2llbGtvcG9sc2tpZSNQTAotZ2VvI1BMLVpQI1phY2hvZG5pb3BvbW9yc2tpZSNQTAotZ2VvI1BNI1N0IFBpZXJyZSBBbmQgTWlxdWVsb24jLS0KLWdlbyNQTiNQaXRjYWlybiMtLQotZ2VvI1BSI1B1ZXJ0byBSaWNvIy0tCi1nZW8jUFMjIlBhbGVzdGluaWFuIFRlcnJpdG9yeSwgT2NjdXBpZWQiIy0tCi1nZW8jUFQjUG9ydHVnYWwjLS0KLWdlbyNQVyNQYWxhdSMtLQotZ2VvI1BZI1BhcmFndWF5Iy0tCi1nZW8jUUEjUWF0YXIjLS0KLWdlbyNSRSNSZXVuaW9uIy0tCi1nZW8jUk8jUm9tYW5pYSMtLQotZ2VvI1JPLUIjQnVjdXJlxZ90aSNSTwotZ2VvI1JPLUFCI0FsYmEjUk8KLWdlbyNSTy1BUiNBcmFkI1JPCi1nZW8jUk8tQUcjQXJnZcWfI1JPCi1nZW8jUk8tQkMjQmFjxIN1I1JPCi1nZW8jUk8tQkgjQmlob3IjUk8KLWdlbyNSTy1CTiNCaXN0cmnFo2EtTsSDc8SDdWQjUk8KLWdlbyNSTy1CVCNCb3RvxZ9hbmkjUk8KLWdlbyNSTy1CViNCcmHFn292I1JPCi1nZW8jUk8tQlIjQnLEg2lsYSNSTwotZ2VvI1JPLUJaI0J1esSDdSNSTwotZ2VvI1JPLUNTI0NhcmHFny1TZXZlcmluI1JPCi1nZW8jUk8tQ0wjQ8SDbMSDcmHFn2kjUk8KLWdlbyNSTy1DSiNDbHVqI1JPCi1nZW8jUk8tQ1QjQ29uc3RhbsWjYSNSTwotZ2VvI1JPLUNWI0NvdmFzbmEjUk8KLWdlbyNSTy1EQiNEw6JtYm92acWjYSNSTwotZ2VvI1JPLURKI0RvbGojUk8KLWdlbyNSTy1HTCNHYWxhxaNpI1JPCi1nZW8jUk8tR1IjR2l1cmdpdSNSTwotZ2VvI1JPLUdKI0dvcmojUk8KLWdlbyNSTy1IUiNIYXJnaGl0YSNSTwotZ2VvI1JPLUhEI0h1bmVkb2FyYSNSTwotZ2VvI1JPLUlMI0lhbG9tacWjYSNSTwotZ2VvI1JPLUlTI0lhxZ9pI1JPCi1nZW8jUk8tTU0jTWFyYW11cmXFnyNSTwotZ2VvI1JPLU1II01laGVkaW7Fo2kjUk8KLWdlbyNSTy1NUyNNdXJlxZ8jUk8KLWdlbyNSTy1OVCNOZWFtxaMjUk8KLWdlbyNSTy1PVCNPbHQjUk8KLWdlbyNSTy1QSCNQcmFob3ZhI1JPCi1nZW8jUk8tU00jU2F0dSBNYXJlI1JPCi1nZW8jUk8tU0ojU8SDbGFqI1JPCi1nZW8jUk8tU0IjU2liaXUjUk8KLWdlbyNSTy1TViNTdWNlYXZhI1JPCi1nZW8jUk8tVFIjVGVsZW9ybWFuI1JPCi1nZW8jUk8tVE0jVGltacWfI1JPCi1nZW8jUk8tVEwjVHVsY2VhI1JPCi1nZW8jUk8tVlMjVmFzbHVpI1JPCi1nZW8jUk8tVkwjVsOibGNlYSNSTwotZ2VvI1JPLVZOI1ZyYW5jZWEjUk8KLWdlbyNSVSNSdXNzaWFuIEZlZGVyYXRpb24jLS0KLWdlbyNSVS1BRCMiQWR5Z2VqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1BTCMiQWx0YWosIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtQkEjIkJhxaFrb3J0b3N0YW4sIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtQlUjIkJ1cmphdGlqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1DRSPEjGXEjWVuc2thamEgUmVzcHVibGlrYSNSVQotZ2VvI1JVLUNVI8SMdXZhxaFza2FqYSBSZXNwdWJsaWthI1JVCi1nZW8jUlUtREEjIkRhZ2VzdGFuLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUlOI0luZ3XFoXNrYWphIFJlc3B1Ymxpa2EgW1Jlc3B1Ymxpa2EgSW5ndcWhZXRpamFdI1JVCi1nZW8jUlUtS0IjS2FiYXJkaW5vLUJhbGthcnNrYWphIFJlc3B1Ymxpa2EjUlUKLWdlbyNSVS1LTCMiS2FsbXlraWphLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUtDI0thcmHEjWFqZXZvLcSMZXJrZXNza2FqYSBSZXNwdWJsaWthI1JVCi1nZW8jUlUtS1IjIkthcmVsaWphLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUtLIyJIYWthc2lqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1LTyMiS29taSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1NRSMiTWFyaWogw4hsLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLU1PIyJNb3Jkb3ZpamEsIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtU0EjIlNhaGEsIFJlc3B1Ymxpa2EgW0pha3V0aWphXSIjUlUKLWdlbyNSVS1TRSMiU2V2ZXJuYWphIE9zZXRpamEsIFJlc3B1Ymxpa2EgW0FsYW5pamFdIFtSZXNwdWJsaWthIFNldmVybmFqYSBPc2V0aWphLUFsYW5pamFdIiNSVQotZ2VvI1JVLVRBIyJUYXRhcnN0YW4sIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtVFkjIlR5dmEsIFJlc3B1Ymxpa2EgW1R1dmFdIiNSVQotZ2VvI1JVLVVEI1VkbXVydHNrYWphIFJlc3B1Ymxpa2EjUlUKLWdlbyNSVS1BTFQjQWx0YWpza2lqIGtyYWojUlUKLWdlbyNSVS1LSEEjSGFiYXJvdnNraWoga3JhaiNSVQotZ2VvI1JVLUtEQSNLcmFzbm9kYXJza2lqIGtyYWojUlUKLWdlbyNSVS1LWUEjS3Jhc25vamFyc2tpaiBrcmFqI1JVCi1nZW8jUlUtUFJJI1ByaW1vcnNraWoga3JhaiNSVQotZ2VvI1JVLVNUQSNTdGF2cm9wb2wnc2tpaiBrcmFqI1JVCi1nZW8jUlUtQU1VI0FtdXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQVJLI0FyaGFuZ2VsJ3NrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1BU1QjQXN0cmFoYW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQkVMI0JlbGdvcm9kc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUJSWSNCcmphbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1DSEUjxIxlbGphYmluc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUNISSPEjGl0aW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtSVJLI0lya3V0c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUlWQSNJdmFub3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0dEI0thbGluaW5ncmFkc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtMVSNLYWx1xb5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0FNI0thbcSNYXRza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0VNI0tlbWVyb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0lSI0tpcm92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtPUyNLb3N0cm9tc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtHTiNLdXJnYW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS1JTI0t1cnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1MRU4jTGVuaW5ncmFkc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUxJUCNMaXBldHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1NQUcjTWFnYWRhbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1NT1MjTW9za292c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU1VUiNNdXJtYW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTklaI05pxb5lZ29yb2Rza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTkdSI05vdmdvcm9kc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU5WUyNOb3Zvc2liaXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtT01TI09tc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU9SRSNPcmVuYnVyZ3NrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1PUkwjT3Jsb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtUE5aI1BlbnplbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1QRVIjUGVybXNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1QU0sjUHNrb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtUk9TI1Jvc3RvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1SWUEjUmphemFuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVNBSyNTYWhhbGluc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVNBTSNTYW1hcnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1TQVIjU2FyYXRvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1TTU8jU21vbGVuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVNWRSNTdmVyZGxvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1UQU0jVGFtYm92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVRPTSNUb21za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVFVMI1R1bCdza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVFZFI1R2ZXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVFlVI1RqdW1lbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1VTFkjVWwnamFub3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVkxBI1ZsYWRpbWlyc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVZHRyNWb2xnb2dyYWRza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVkxHI1ZvbG9nb2Rza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVk9SI1Zvcm9uZcW+c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVlBUiNKYXJvc2xhdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1NT1cjTW9za3ZhI1JVCi1nZW8jUlUtU1BFI1Nhbmt0LVBldGVyYnVyZyNSVQotZ2VvI1JVLVlFViNFdnJlanNrYWphIGF2dG9ub21uYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1BR0IjQWdpbnNraWogQnVyamF0c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtQ0hVI8SMdWtvdHNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLUVWRSPDiHZlbmtpanNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLUtITSNIYW50eS1NYW5zaWpza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1LT1AjS29taS1QZXJtamF0c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtS09SI0tvcmpha3NraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLU5FTiNOZW5ldHNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLVRBWSNUYWpteXJza2lqIChEb2xnYW5vLU5lbmV0c2tpaikgYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLVVPQiNVc3QnLU9yZHluc2tpaiBCdXJqYXRza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1ZQU4jSmFtYWxvLU5lbmV0c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlcjUndhbmRhIy0tCi1nZW8jU0EjU2F1ZGkgQXJhYmlhIy0tCi1nZW8jU0IjU29sb21vbiBJc2xhbmRzIy0tCi1nZW8jU0MjU2V5Y2hlbGxlcyMtLQotZ2VvI1NEI1N1ZGFuIy0tCi1nZW8jU0UjU3dlZGVuIy0tCi1nZW8jU0UtQUIjU3RvY2tob2xtcyBMw6RuI1NFCi1nZW8jU0UtQUMjVsOkc3RlcmJvdHRlbnMgTMOkbiNTRQotZ2VvI1NFLUJEI05vcnJib3R0ZW5zIEzDpG4jU0UKLWdlbyNTRS1DI1VwcHNhbGEgTMOkbiNTRQotZ2VvI1NFLUQjU8O2ZGVybWFubGFuZHMgTMOkbiNTRQotZ2VvI1NFLUUjw5ZzdGVyZ8O2dGxhbmRzIEzDpG4jU0UKLWdlbyNTRS1GI0rDtm5rw7ZwaW5ncyBMw6RuI1NFCi1nZW8jU0UtRyNLcm9ub2JvcmdzIEzDpG4jU0UKLWdlbyNTRS1II0thbG1hciBMw6RuI1NFCi1nZW8jU0UtSSNHb3RsYW5kcyBMw6RuI1NFCi1nZW8jU0UtSyNCbGVraW5nZSBMw6RuI1NFCi1nZW8jU0UtTSNTa8OlbmUgTMOkbiNTRQotZ2VvI1NFLU4jSGFsbGFuZHMgTMOkbiNTRQotZ2VvI1NFLU8jVsOkc3RyYSBHw7Z0YWxhbmRzIEzDpG4jU0UKLWdlbyNTRS1TI1bDpHJtbGFuZHMgTMOkbiNTRQotZ2VvI1NFLVQjw5ZyZWJybyBMw6RuI1NFCi1nZW8jU0UtVSNWw6RzdG1hbmxhbmRzIEzDpG4jU0UKLWdlbyNTRS1XI0RhbGFybmVzIEzDpG4jU0UKLWdlbyNTRS1YI0fDpHZsZWJvcmdzIEzDpG4jU0UKLWdlbyNTRS1ZI1bDpHN0ZXJub3JybGFuZHMgTMOkbiNTRQotZ2VvI1NFLVojSsOkbXRsYW5kcyBMw6RuI1NFCi1nZW8jU0cjU2luZ2Fwb3JlIy0tCi1nZW8jU0gjU3QgSGVsZW5hIy0tCi1nZW8jU0kjU2xvdmVuaWEjLS0KLWdlbyNTSiNTdmFsYmFyZCBBbmQgSmFuIE1heWVuIy0tCi1nZW8jU0sjU2xvdmFraWEjLS0KLWdlbyNTTCNTaWVycmEgTGVvbmUjLS0KLWdlbyNTTSNTYW4gTWFyaW5vIy0tCi1nZW8jU04jU2VuZWdhbCMtLQotZ2VvI1NPI1NvbWFsaWEjLS0KLWdlbyNTUiNTdXJpbmFtZSMtLQotZ2VvI1NUI1NhbyBUb21lIEFuZCBQcmluY2lwZSMtLQotZ2VvI1NWI0VsIFNhbHZhZG9yIy0tCi1nZW8jU1kjU3lyaWFuIEFyYWIgUmVwdWJsaWMjLS0KLWdlbyNTWiNTd2F6aWxhbmQjLS0KLWdlbyNUQyNUdXJrcyBBbmQgQ2FpY29zIElzbGFuZHMjLS0KLWdlbyNURCNDaGFkIy0tCi1nZW8jVEYjRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIy0tCi1nZW8jVEcjVG9nbyMtLQotZ2VvI1RII1RoYWlsYW5kIy0tCi1nZW8jVEojVGFqaWtpc3RhbiMtLQotZ2VvI1RNI1R1cmttZW5pc3RhbiMtLQotZ2VvI1ROI1R1bmlzaWEjLS0KLWdlbyNUTyNUb25nYSMtLQotZ2VvI1RQI0Vhc3QgVGltb3IjLS0KLWdlbyNUUiNUdXJrZXkjLS0KLWdlbyNUUi0wMSNBZGFuYSNUUgotZ2VvI1RSLTAyI0FkxLF5YW1hbiNUUgotZ2VvI1RSLTAzI0FmeW9uI1RSCi1nZW8jVFItMDQjQcSfcsSxI1RSCi1nZW8jVFItMDUjQW1hc3lhI1RSCi1nZW8jVFItMDYjQW5rYXJhI1RSCi1nZW8jVFItMDcjQW50YWx5YSNUUgotZ2VvI1RSLTA4I0FydHZpbiNUUgotZ2VvI1RSLTA5I0F5ZMSxbiNUUgotZ2VvI1RSLTEwI0JhbMSxa2VzaXIjVFIKLWdlbyNUUi0xMSNCaWxlY2lrI1RSCi1nZW8jVFItMTIjQmluZ8O2bCNUUgotZ2VvI1RSLTEzI0JpdGxpcyNUUgotZ2VvI1RSLTE0I0JvbHUjVFIKLWdlbyNUUi0xNSNCdXJkdXIjVFIKLWdlbyNUUi0xNiNCdXJzYSNUUgotZ2VvI1RSLTE3I8OHYW5ha2thbGUjVFIKLWdlbyNUUi0xOCPDh2Fua8SxcsSxI1RSCi1nZW8jVFItMTkjw4dvcnVtI1RSCi1nZW8jVFItMjAjRGVuaXpsaSNUUgotZ2VvI1RSLTIxI0RpeWFyYmFrxLFyI1RSCi1nZW8jVFItMjIjRWRpcm5lI1RSCi1nZW8jVFItMjMjRWxhesSxZyNUUgotZ2VvI1RSLTI0I0VyemluY2FuI1RSCi1nZW8jVFItMjUjRXJ6dXJ1bSNUUgotZ2VvI1RSLTI2I0Vza2nFn2VoaXIjVFIKLWdlbyNUUi0yNyNHYXppYW50ZXAjVFIKLWdlbyNUUi0yOCNHaXJlc3VuI1RSCi1nZW8jVFItMjkjR8O8bcO8xZ9oYW5lI1RSCi1nZW8jVFItMzAjSGFra8OicmkjVFIKLWdlbyNUUi0zMSNIYXRheSNUUgotZ2VvI1RSLTMyI0lzcGFydGEjVFIKLWdlbyNUUi0zMyPEsMOnZWwjVFIKLWdlbyNUUi0zNCPEsHN0YW5idWwjVFIKLWdlbyNUUi0zNSPEsHptaXIjVFIKLWdlbyNUUi0zNiNLYXJzI1RSCi1nZW8jVFItMzcjS2FzdGFtb251I1RSCi1nZW8jVFItMzgjS2F5c2VyaSNUUgotZ2VvI1RSLTM5I0vEsXJrbGFyZWxpI1RSCi1nZW8jVFItNDAjS8SxcsWfZWhpciNUUgotZ2VvI1RSLTQxI0tvY2FlbGkjVFIKLWdlbyNUUi00MiNLb255YSNUUgotZ2VvI1RSLTQzI0vDvHRhaHlhI1RSCi1nZW8jVFItNDQjTWFsYXR5YSNUUgotZ2VvI1RSLTQ1I01hbmlzYSNUUgotZ2VvI1RSLTQ2I0thaHJhbWFubWFyYcWfI1RSCi1nZW8jVFItNDcjTWFyZGluI1RSCi1nZW8jVFItNDgjTXXEn2xhI1RSCi1nZW8jVFItNDkjTXXFnyNUUgotZ2VvI1RSLTUwI05ldsWfZWhpciNUUgotZ2VvI1RSLTUxI05pxJ9kZSNUUgotZ2VvI1RSLTUyI09yZHUjVFIKLWdlbyNUUi01MyNSaXplI1RSCi1nZW8jVFItNTQjU2FrYXJ5YSNUUgotZ2VvI1RSLTU1I1NhbXN1biNUUgotZ2VvI1RSLTU2I1NpaXJ0I1RSCi1nZW8jVFItNTcjU2lub3AjVFIKLWdlbyNUUi01OCNTaXZhcyNUUgotZ2VvI1RSLTU5I1Rla2lyZGHEnyNUUgotZ2VvI1RSLTYwI1Rva2F0I1RSCi1nZW8jVFItNjEjVHJhYnpvbiNUUgotZ2VvI1RSLTYyI1R1bmNlbGkjVFIKLWdlbyNUUi02MyPFnmFubMSxdXJmYSNUUgotZ2VvI1RSLTY0I1XFn2FrI1RSCi1nZW8jVFItNjUjVmFuI1RSCi1nZW8jVFItNjYjWW96Z2F0I1RSCi1nZW8jVFItNjcjWm9uZ3VsZGFrI1RSCi1nZW8jVFItNjgjQWtzYXJheSNUUgotZ2VvI1RSLTY5I0JheWJ1cnQjVFIKLWdlbyNUUi03MCNLYXJhbWFuI1RSCi1nZW8jVFItNzEjS8SxcsSxa2thbGUjVFIKLWdlbyNUUi03MiNCYXRtYW4jVFIKLWdlbyNUUi03MyPFnsSxcm5hayNUUgotZ2VvI1RSLTc0I0JhcnTEsW4jVFIKLWdlbyNUUi03NSNBcmRhaGFuI1RSCi1nZW8jVFItNzYjScSfZMSxciNUUgotZ2VvI1RSLTc3I1lhbG92YSNUUgotZ2VvI1RSLTc4I0thcmFiw7xrI1RSCi1nZW8jVFItNzkjS2lsaXMjVFIKLWdlbyNUUi04MCNPc21hbml5ZSNUUgotZ2VvI1RUI1RyaW5pZGFkIEFuZCBUb2JhZ28jLS0KLWdlbyNUViNUdXZhbHUjLS0KLWdlbyNUVyMiVGFpd2FuLCBQcm92aW5jZSBPZiBDaGluYSIjLS0KLWdlbyNUWiMiVGFuemFuaWEsIFVuaXRlZCBSZXB1YmxpYyBvZiIjLS0KLWdlbyNVQSNVa3JhaW5lIy0tCi1nZW8jVUcjVWdhbmRhIy0tCi1nZW8jVU0jVVMgTWlub3IgT3V0bHlpbmcgSXNsYW5kcyMtLQotZ2VvI1VNLTY3I0pvaG5zdG9uIEF0b2xsI1VNCi1nZW8jVU0tNzEjTWlkd2F5IElzbGFuZHMjVU0KLWdlbyNVTS03NiNOYXZhc3NhIElzbGFuZCNVTQotZ2VvI1VNLTc5I1dha2UgSXNsYW5kI1VNCi1nZW8jVU0tODEjQmFrZXIgSXNsYW5kI1VNCi1nZW8jVU0tODQjSG93bGFuZCBJc2xhbmQjVU0KLWdlbyNVTS04NiNKYXJ2aXMgSXNsYW5kI1VNCi1nZW8jVU0tODkjS2luZ21hbiBSZWVmI1VNCi1nZW8jVU0tOTUjUGFsbXlyYSBBdG9sbCNVTQotZ2VvI1VTI1VuaXRlZCBTdGF0ZXMjLS0KLWdlbyNVUy1BSyNBbGFza2EjVVMKLWdlbyNVUy1BTCNBbGFiYW1hI1VTCi1nZW8jVVMtQVIjQXJrYW5zYXMjVVMKLWdlbyNVUy1BUyNBbWVyaWNhbiBTYW1vYSNVUwotZ2VvI1VTLUFaI0FyaXpvbmEjVVMKLWdlbyNVUy1DQSNDYWxpZm9ybmlhI1VTCi1nZW8jVVMtQ08jQ29sb3JhZG8jVVMKLWdlbyNVUy1DVCNDb25uZWN0aWN1dCNVUwotZ2VvI1VTLURDI0Rpc3RyaWN0IE9mIENvbHVtYmlhI1VTCi1nZW8jVVMtREUjRGVsYXdhcmUjVVMKLWdlbyNVUy1GTCNGbG9yaWRhI1VTCi1nZW8jVVMtR0EjR2VvcmdpYSNVUwotZ2VvI1VTLUdVI0d1YW0jVVMKLWdlbyNVUy1ISSNIYXdhaWkjVVMKLWdlbyNVUy1JQSNJb3dhI1VTCi1nZW8jVVMtSUQjSWRhaG8jVVMKLWdlbyNVUy1JTCNJbGxpbm9pcyNVUwotZ2VvI1VTLUlOI0luZGlhbmEjVVMKLWdlbyNVUy1LUyNLYW5zYXMjVVMKLWdlbyNVUy1LWSNLZW50dWNreSNVUwotZ2VvI1VTLUxBI0xvdWlzaWFuYSNVUwotZ2VvI1VTLU1BI01hc3NhY2h1c2V0dHMjVVMKLWdlbyNVUy1NRCNNYXJ5bGFuZCNVUwotZ2VvI1VTLU1FI01haW5lI1VTCi1nZW8jVVMtTUkjTWljaGlnYW4jVVMKLWdlbyNVUy1NTiNNaW5uZXNvdGEjVVMKLWdlbyNVUy1NTyNNaXNzb3VyaSNVUwotZ2VvI1VTLU1QI05vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyNVUwotZ2VvI1VTLU1TI01pc3Npc3NpcHBpI1VTCi1nZW8jVVMtTVQjTW9udGFuYSNVUwotZ2VvI1VTLU5DI05vcnRoIENhcm9saW5hI1VTCi1nZW8jVVMtTkQjTm9ydGggRGFrb3RhI1VTCi1nZW8jVVMtTkUjTmVicmFza2EjVVMKLWdlbyNVUy1OSCNOZXcgSGFtcHNoaXJlI1VTCi1nZW8jVVMtTkojTmV3IEplcnNleSNVUwotZ2VvI1VTLU5NI05ldyBNZXhpY28jVVMKLWdlbyNVUy1OViNOZXZhZGEjVVMKLWdlbyNVUy1OWSNOZXcgWW9yayNVUwotZ2VvI1VTLU9II09oaW8jVVMKLWdlbyNVUy1PSyNPa2xhaG9tYSNVUwotZ2VvI1VTLU9SI09yZWdvbiNVUwotZ2VvI1VTLVBBI1Blbm5zeWx2YW5pYSNVUwotZ2VvI1VTLVBSI1B1ZXJ0byBSaWNvI1VTCi1nZW8jVVMtUkkjUmhvZGUgSXNsYW5kI1VTCi1nZW8jVVMtU0MjU291dGggQ2Fyb2xpbmEjVVMKLWdlbyNVUy1TRCNTb3V0aCBEYWtvdGEjVVMKLWdlbyNVUy1UTiNUZW5uZXNzZWUjVVMKLWdlbyNVUy1UWCNUZXhhcyNVUwotZ2VvI1VTLVVNI1UuUy4gTWlub3IgT3V0bHlpbmcgSXNsYW5kcyNVUwotZ2VvI1VTLVVUI1V0YWgjVVMKLWdlbyNVUy1WQSNWaXJnaW5pYSNVUwotZ2VvI1VTLVZJI1ZpcmdpbiBJc2xhbmRzIE9mIFRoZSBVLlMuI1VTCi1nZW8jVVMtVlQjVmVybW9udCNVUwotZ2VvI1VTLVdBI1dhc2hpbmd0b24jVVMKLWdlbyNVUy1XSSNXaXNjb25zaW4jVVMKLWdlbyNVUy1XViNXZXN0IFZpcmdpbmlhI1VTCi1nZW8jVVMtV1kjV3lvbWluZyNVUwotZ2VvI1VZI1VydWd1YXkjLS0KLWdlbyNVWiNVemJla2lzdGFuIy0tCi1nZW8jVkEjVmF0aWNhbiBDaXR5IFN0YXRlIy0tCi1nZW8jVkMjU3QgVmluY2VudCBBbmQgR3JlbmFkaW5lcyMtLQotZ2VvI1ZFI1ZlbmV6dWVsYSMtLQotZ2VvI1ZHIyJWaXJnaW4gSXNsYW5kcywgQnJpdGlzaCIjLS0KLWdlbyNWSSNVbml0ZWQgU3RhdGVzIFZpcmdpbiBJc2xhbmRzIy0tCi1nZW8jVk4jVmlldCBOYW0jLS0KLWdlbyNWTi0wMSNMYWkgQ2hhdSNWTgotZ2VvI1ZOLTAyI0xhbyBDYWkjVk4KLWdlbyNWTi0wMyNIYSBHaWFuZyNWTgotZ2VvI1ZOLTA0I0NhbyBCYW5nI1ZOCi1nZW8jVk4tMDUjU29uIExhI1ZOCi1nZW8jVk4tMDYjWWVuIEJhaSNWTgotZ2VvI1ZOLTA3I1R1eWVuIFF1YW5nI1ZOCi1nZW8jVk4tMDkjTGFuZyBTb24jVk4KLWdlbyNWTi0xMyNRdWFuZyBOaW5oI1ZOCi1nZW8jVk4tMTQjSG9hIEJpbmgjVk4KLWdlbyNWTi0xNSNIYSBUYXkjVk4KLWdlbyNWTi0xOCNOaW5oIEJpbmgjVk4KLWdlbyNWTi0yMCNUaGFpIEJpbmgjVk4KLWdlbyNWTi0yMSNUaGFuaCBIb2EjVk4KLWdlbyNWTi0yMiNOZ2hlIEFuI1ZOCi1nZW8jVk4tMjMjSGEgVGluaCNWTgotZ2VvI1ZOLTI0I1F1YW5nIEJpbmgjVk4KLWdlbyNWTi0yNSNRdWFuZyBUcmkjVk4KLWdlbyNWTi0yNiNUaHVhIFRoaWVuLUh1ZSNWTgotZ2VvI1ZOLTI3I1F1YW5nIE5hbSNWTgotZ2VvI1ZOLTI4I0tvbiBUdW0jVk4KLWdlbyNWTi0yOSNRdWFuZyBOZ2FpI1ZOCi1nZW8jVk4tMzAjR2lhIExhaSNWTgotZ2VvI1ZOLTMxI0JpbmggRGluaCNWTgotZ2VvI1ZOLTMyI1BodSBZZW4jVk4KLWdlbyNWTi0zMyNEYWMgTGFjI1ZOCi1nZW8jVk4tMzQjS2hhbmggSG9hI1ZOCi1nZW8jVk4tMzUjTGFtIERvbmcjVk4KLWdlbyNWTi0zNiNOaW5oIFRodWFuI1ZOCi1nZW8jVk4tMzcjVGF5IE5pbmgjVk4KLWdlbyNWTi0zOSNEb25nIE5haSNWTgotZ2VvI1ZOLTQwI0JpbmggVGh1YW4jVk4KLWdlbyNWTi00MSNMb25nIEFuI1ZOCi1nZW8jVk4tNDMjQmEgUmlhIC0gVnVuZyBUYXUjVk4KLWdlbyNWTi00NCNBbiBHaWFuZyNWTgotZ2VvI1ZOLTQ1I0RvbmcgVGhhcCNWTgotZ2VvI1ZOLTQ2I1RpZW4gR2lhbmcjVk4KLWdlbyNWTi00NyNLaWVuIEdpYW5nI1ZOCi1nZW8jVk4tNDgjQ2FuIFRobyNWTgotZ2VvI1ZOLTQ5I1ZpbmggTG9uZyNWTgotZ2VvI1ZOLTUwI0JlbiBUcmUjVk4KLWdlbyNWTi01MSNUcmEgVmluaCNWTgotZ2VvI1ZOLTUyI1NvYyBUcmFuZyNWTgotZ2VvI1ZOLTUzI0JhYyBDYW4jVk4KLWdlbyNWTi01NCNCYWMgR2lhbmcjVk4KLWdlbyNWTi01NSNCYWMgTGlldSNWTgotZ2VvI1ZOLTU2I0JhYyBOaW5oI1ZOCi1nZW8jVk4tNTcjQmluaCBEdW9uZyNWTgotZ2VvI1ZOLTU4I0JpbmggUGh1b2MjVk4KLWdlbyNWTi01OSNDYSBNYXUjVk4KLWdlbyNWTi02MCMiRGEgTmFuZywgdGhhbmggcGhvIiNWTgotZ2VvI1ZOLTYxI0hhaSBEdW9uZyNWTgotZ2VvI1ZOLTYyIyJIYWkgUGhvbmcsIHRoYW5oIHBobyIjVk4KLWdlbyNWTi02MyNIYSBOYW0jVk4KLWdlbyNWTi02NCMiSGEgTm9pLCB0aHUgZG8iI1ZOCi1nZW8jVk4tNjUjIkhvIENoaSBNaW5oLCB0aGFuaCBwbyBbU2FpIEdvbl0iI1ZOCi1nZW8jVk4tNjYjSHVuZyBZZW4jVk4KLWdlbyNWTi02NyNOYW0gRGluaCNWTgotZ2VvI1ZOLTY4I1BodSBUaG8jVk4KLWdlbyNWTi02OSNUaGFpIE5ndXllbiNWTgotZ2VvI1ZOLTcwI1ZpbmggUGh1YyNWTgotZ2VvI1ZVI1ZhbnVhdHUjLS0KLWdlbyNXRiNXYWxsaXMgQW5kIEZ1dHVuYSBJc2xhbmRzIy0tCi1nZW8jV1MjU2Ftb2EjLS0KLWdlbyNZRSNZZW1lbiMtLQotZ2VvI1lUI01heW90dGUjLS0KLWdlbyNZVSNZdWdvc2xhdmlhIChGZWQgUmVwIE9mKSMtLQotZ2VvI1lVLUNHI0NybmEgR29yYSNZVQotZ2VvI1lVLVNSI1NyYmlqYSNZVQotZ2VvI1lVLUtNI0tvc292by1NZXRvaGlqYSNZVS1TUgotZ2VvI1lVLVZPI1ZvanZvZGluYSNZVS1TUgotZ2VvI1pBI1NvdXRoIEFmcmljYSMtLQotZ2VvI1pNI1phbWJpYSMtLQotZ2VvI1pXI1ppbWJhYndlIy0tCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS9uYWljcy1kYXRhLnR4dCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL25haWNzLWRhdGEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDZmOTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL25haWNzLWRhdGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTgxNCArMCwwIEBACi1uYWljcyMxMSNBZ3JpY3VsdHVyZSwgRm9yZXN0cnksIEZpc2hpbmcgYW5kIEh1bnRpbmcjMTEKLW5haWNzIzExMSNDcm9wIFByb2R1Y3Rpb24jMTEKLW5haWNzIzExMTEjT2lsc2VlZCBhbmQgR3JhaW4gRmFybWluZyMxMTEKLW5haWNzIzExMTExI1NveWJlYW4gRmFybWluZyMxMTExCi1uYWljcyMxMTExMiNPaWxzZWVkIChleGNlcHQgU295YmVhbikgRmFybWluZyMxMTExCi1uYWljcyMxMTExMyNEcnkgUGVhIGFuZCBCZWFuIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTQjV2hlYXQgRmFybWluZyMxMTExCi1uYWljcyMxMTExNSNDb3JuIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTYjUmljZSBGYXJtaW5nIzExMTEKLW5haWNzIzExMTE5I090aGVyIEdyYWluIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTkxI09pbHNlZWQgYW5kIEdyYWluIENvbWJpbmF0aW9uIEZhcm1pbmcjMTExMTkKLW5haWNzIzExMTE5OSNBbGwgT3RoZXIgR3JhaW4gRmFybWluZyMxMTExOQotbmFpY3MjMTExMiNWZWdldGFibGUgYW5kIE1lbG9uIEZhcm1pbmcjMTExCi1uYWljcyMxMTEyMSNWZWdldGFibGUgYW5kIE1lbG9uIEZhcm1pbmcjMTExMgotbmFpY3MjMTExMjExI1BvdGF0byBGYXJtaW5nIzExMTIxCi1uYWljcyMxMTEyMTkjT3RoZXIgVmVnZXRhYmxlIChleGNlcHQgUG90YXRvKSBhbmQgTWVsb24gRmFybWluZyMxMTEyMQotbmFpY3MjMTExMyNGcnVpdCBhbmQgVHJlZSBOdXQgRmFybWluZyMxMTEKLW5haWNzIzExMTMxI09yYW5nZSBHcm92ZXMjMTExMwotbmFpY3MjMTExMzIjQ2l0cnVzIChleGNlcHQgT3JhbmdlKSBHcm92ZXMjMTExMwotbmFpY3MjMTExMzMjTm9uY2l0cnVzIEZydWl0IGFuZCBUcmVlIE51dCBGYXJtaW5nIzExMTMKLW5haWNzIzExMTMzMSNBcHBsZSBPcmNoYXJkcyMxMTEzMwotbmFpY3MjMTExMzMyI0dyYXBlIFZpbmV5YXJkcyMxMTEzMwotbmFpY3MjMTExMzMzI1N0cmF3YmVycnkgRmFybWluZyMxMTEzMwotbmFpY3MjMTExMzM0I0JlcnJ5IChleGNlcHQgU3RyYXdiZXJyeSkgRmFybWluZyMxMTEzMwotbmFpY3MjMTExMzM1I1RyZWUgTnV0IEZhcm1pbmcjMTExMzMKLW5haWNzIzExMTMzNiNGcnVpdCBhbmQgVHJlZSBOdXQgQ29tYmluYXRpb24gRmFybWluZyMxMTEzMwotbmFpY3MjMTExMzM5I090aGVyIE5vbmNpdHJ1cyBGcnVpdCBGYXJtaW5nIzExMTMzCi1uYWljcyMxMTE0I0dyZWVuaG91c2UsIE51cnNlcnksIGFuZCBGbG9yaWN1bHR1cmUgUHJvZHVjdGlvbiMxMTEKLW5haWNzIzExMTQxI0Zvb2QgQ3JvcHMgR3Jvd24gVW5kZXIgQ292ZXIjMTExNAotbmFpY3MjMTExNDExI011c2hyb29tIFByb2R1Y3Rpb24jMTExNDEKLW5haWNzIzExMTQxOSNPdGhlciBGb29kIENyb3BzIEdyb3duIFVuZGVyIENvdmVyIzExMTQxCi1uYWljcyMxMTE0MiNOdXJzZXJ5IGFuZCBGbG9yaWN1bHR1cmUgUHJvZHVjdGlvbiMxMTE0Ci1uYWljcyMxMTE0MjEjTnVyc2VyeSBhbmQgVHJlZSBQcm9kdWN0aW9uIzExMTQyCi1uYWljcyMxMTE0MjIjRmxvcmljdWx0dXJlIFByb2R1Y3Rpb24jMTExNDIKLW5haWNzIzExMTkjT3RoZXIgQ3JvcCBGYXJtaW5nIzExMQotbmFpY3MjMTExOTEjVG9iYWNjbyBGYXJtaW5nIzExMTkKLW5haWNzIzExMTkyI0NvdHRvbiBGYXJtaW5nIzExMTkKLW5haWNzIzExMTkzI1N1Z2FyY2FuZSBGYXJtaW5nIzExMTkKLW5haWNzIzExMTk0I0hheSBGYXJtaW5nIzExMTkKLW5haWNzIzExMTk5I0FsbCBPdGhlciBDcm9wIEZhcm1pbmcjMTExOQotbmFpY3MjMTExOTkxI1N1Z2FyIEJlZXQgRmFybWluZyMxMTE5OQotbmFpY3MjMTExOTkyI1BlYW51dCBGYXJtaW5nIzExMTk5Ci1uYWljcyMxMTE5OTgjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgQ3JvcCBGYXJtaW5nIzExMTk5Ci1uYWljcyMxMTIjQW5pbWFsIFByb2R1Y3Rpb24jMTEKLW5haWNzIzExMjEjQ2F0dGxlIFJhbmNoaW5nIGFuZCBGYXJtaW5nIzExMgotbmFpY3MjMTEyMTEjQmVlZiBDYXR0bGUgUmFuY2hpbmcgYW5kIEZhcm1pbmcsIGluY2x1ZGluZyBGZWVkbG90cyMxMTIxCi1uYWljcyMxMTIxMTEjQmVlZiBDYXR0bGUgUmFuY2hpbmcgYW5kIEZhcm1pbmcjMTEyMTEKLW5haWNzIzExMjExMiNDYXR0bGUgRmVlZGxvdHMjMTEyMTEKLW5haWNzIzExMjEyI0RhaXJ5IENhdHRsZSBhbmQgTWlsayBQcm9kdWN0aW9uIzExMjEKLW5haWNzIzExMjEzI0R1YWwgUHVycG9zZSBDYXR0bGUgUmFuY2hpbmcgYW5kIEZhcm1pbmcjMTEyMQotbmFpY3MjMTEyMiNIb2cgYW5kIFBpZyBGYXJtaW5nIzExMgotbmFpY3MjMTEyMjEjSG9nIGFuZCBQaWcgRmFybWluZyMxMTIyCi1uYWljcyMxMTIzI1BvdWx0cnkgYW5kIEVnZyBQcm9kdWN0aW9uIzExMgotbmFpY3MjMTEyMzEjQ2hpY2tlbiBFZ2cgUHJvZHVjdGlvbiMxMTIzCi1uYWljcyMxMTIzMiNCcm9pbGVycyBhbmQgT3RoZXIgTWVhdCBUeXBlIENoaWNrZW4gUHJvZHVjdGlvbiMxMTIzCi1uYWljcyMxMTIzMyNUdXJrZXkgUHJvZHVjdGlvbiMxMTIzCi1uYWljcyMxMTIzNCNQb3VsdHJ5IEhhdGNoZXJpZXMjMTEyMwotbmFpY3MjMTEyMzkjT3RoZXIgUG91bHRyeSBQcm9kdWN0aW9uIzExMjMKLW5haWNzIzExMjQjU2hlZXAgYW5kIEdvYXQgRmFybWluZyMxMTIKLW5haWNzIzExMjQxI1NoZWVwIEZhcm1pbmcjMTEyNAotbmFpY3MjMTEyNDIjR29hdCBGYXJtaW5nIzExMjQKLW5haWNzIzExMjUjQW5pbWFsIEFxdWFjdWx0dXJlIzExMgotbmFpY3MjMTEyNTEjQW5pbWFsIEFxdWFjdWx0dXJlIzExMjUKLW5haWNzIzExMjUxMSNGaW5maXNoIEZhcm1pbmcgYW5kIEZpc2ggSGF0Y2hlcmllcyMxMTI1MQotbmFpY3MjMTEyNTEyI1NoZWxsZmlzaCBGYXJtaW5nIzExMjUxCi1uYWljcyMxMTI1MTkjT3RoZXIgQW5pbWFsIEFxdWFjdWx0dXJlIzExMjUxCi1uYWljcyMxMTI5I090aGVyIEFuaW1hbCBQcm9kdWN0aW9uIzExMgotbmFpY3MjMTEyOTEjQXBpY3VsdHVyZSMxMTI5Ci1uYWljcyMxMTI5MiNIb3JzZSBhbmQgT3RoZXIgRXF1aW5lIFByb2R1Y3Rpb24jMTEyOQotbmFpY3MjMTEyOTMjRnVyLUJlYXJpbmcgQW5pbWFsIGFuZCBSYWJiaXQgUHJvZHVjdGlvbiMxMTI5Ci1uYWljcyMxMTI5OSNBbGwgT3RoZXIgQW5pbWFsIFByb2R1Y3Rpb24jMTEyOQotbmFpY3MjMTEzI0ZvcmVzdHJ5IGFuZCBMb2dnaW5nIzExCi1uYWljcyMxMTMxI1RpbWJlciBUcmFjdCBPcGVyYXRpb25zIzExMwotbmFpY3MjMTEzMTEjVGltYmVyIFRyYWN0IE9wZXJhdGlvbnMjMTEzMQotbmFpY3MjMTEzMiNGb3Jlc3QgTnVyc2VyaWVzIGFuZCBHYXRoZXJpbmcgb2YgRm9yZXN0IFByb2R1Y3RzIzExMwotbmFpY3MjMTEzMjEjRm9yZXN0IE51cnNlcmllcyBhbmQgR2F0aGVyaW5nIG9mIEZvcmVzdCBQcm9kdWN0cyMxMTMyCi1uYWljcyMxMTMzI0xvZ2dpbmcjMTEzCi1uYWljcyMxMTMzMSNMb2dnaW5nIzExMzMKLW5haWNzIzExNCNGaXNoaW5nLCBIdW50aW5nIGFuZCBUcmFwcGluZyMxMQotbmFpY3MjMTE0MSNGaXNoaW5nIzExNAotbmFpY3MjMTE0MTEjRmlzaGluZyMxMTQxCi1uYWljcyMxMTQxMTEjRmluZmlzaCBGaXNoaW5nIzExNDExCi1uYWljcyMxMTQxMTIjU2hlbGxmaXNoIEZpc2hpbmcjMTE0MTEKLW5haWNzIzExNDExOSNPdGhlciBNYXJpbmUgRmlzaGluZyMxMTQxMQotbmFpY3MjMTE0MiNIdW50aW5nIGFuZCBUcmFwcGluZyMxMTQKLW5haWNzIzExNDIxI0h1bnRpbmcgYW5kIFRyYXBwaW5nIzExNDIKLW5haWNzIzExNSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEFncmljdWx0dXJlIGFuZCBGb3Jlc3RyeSMxMQotbmFpY3MjMTE1MSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIENyb3AgUHJvZHVjdGlvbiMxMTUKLW5haWNzIzExNTExI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQ3JvcCBQcm9kdWN0aW9uIzExNTEKLW5haWNzIzExNTExMSNDb3R0b24gR2lubmluZyMxMTUxMQotbmFpY3MjMTE1MTEyI1NvaWwgUHJlcGFyYXRpb24sIFBsYW50aW5nLCBhbmQgQ3VsdGl2YXRpbmcjMTE1MTEKLW5haWNzIzExNTExMyNDcm9wIEhhcnZlc3RpbmcsIFByaW1hcmlseSBieSBNYWNoaW5lIzExNTExCi1uYWljcyMxMTUxMTQjUG9zdGhhcnZlc3QgQ3JvcCBBY3Rpdml0aWVzIChleGNlcHQgQ290dG9uIEdpbm5pbmcpIzExNTExCi1uYWljcyMxMTUxMTUjRmFybSBMYWJvciBDb250cmFjdG9ycyBhbmQgQ3JldyBMZWFkZXJzIzExNTExCi1uYWljcyMxMTUxMTYjRmFybSBNYW5hZ2VtZW50IFNlcnZpY2VzIzExNTExCi1uYWljcyMxMTUyI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQW5pbWFsIFByb2R1Y3Rpb24jMTE1Ci1uYWljcyMxMTUyMSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEFuaW1hbCBQcm9kdWN0aW9uIzExNTIKLW5haWNzIzExNTMjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBGb3Jlc3RyeSMxMTUKLW5haWNzIzExNTMxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgRm9yZXN0cnkjMTE1MwotbmFpY3MjMjEjTWluaW5nIzIxCi1uYWljcyMyMTEjT2lsIGFuZCBHYXMgRXh0cmFjdGlvbiMyMQotbmFpY3MjMjExMSNPaWwgYW5kIEdhcyBFeHRyYWN0aW9uIzIxMQotbmFpY3MjMjExMTEjT2lsIGFuZCBHYXMgRXh0cmFjdGlvbiMyMTExCi1uYWljcyMyMTExMTEjQ3J1ZGUgUGV0cm9sZXVtIGFuZCBOYXR1cmFsIEdhcyBFeHRyYWN0aW9uIzIxMTExCi1uYWljcyMyMTExMTIjTmF0dXJhbCBHYXMgTGlxdWlkIEV4dHJhY3Rpb24jMjExMTEKLW5haWNzIzIxMiNNaW5pbmcgKGV4Y2VwdCBPaWwgYW5kIEdhcykjMjEKLW5haWNzIzIxMjEjQ29hbCBNaW5pbmcjMjEyCi1uYWljcyMyMTIxMSNDb2FsIE1pbmluZyMyMTIxCi1uYWljcyMyMTIxMTEjQml0dW1pbm91cyBDb2FsIGFuZCBMaWduaXRlIFN1cmZhY2UgTWluaW5nIzIxMjExCi1uYWljcyMyMTIxMTIjQml0dW1pbm91cyBDb2FsIFVuZGVyZ3JvdW5kIE1pbmluZyMyMTIxMQotbmFpY3MjMjEyMTEzI0FudGhyYWNpdGUgTWluaW5nIzIxMjExCi1uYWljcyMyMTIyI01ldGFsIE9yZSBNaW5pbmcjMjEyCi1uYWljcyMyMTIyMSNJcm9uIE9yZSBNaW5pbmcjMjEyMgotbmFpY3MjMjEyMjIjR29sZCBPcmUgYW5kIFNpbHZlciBPcmUgTWluaW5nIzIxMjIKLW5haWNzIzIxMjIyMSNHb2xkIE9yZSBNaW5pbmcjMjEyMjIKLW5haWNzIzIxMjIyMiNTaWx2ZXIgT3JlIE1pbmluZyMyMTIyMgotbmFpY3MjMjEyMjMjQ29wcGVyLCBOaWNrZWwsIExlYWQsIGFuZCBaaW5jIE1pbmluZyMyMTIyCi1uYWljcyMyMTIyMzEjTGVhZCBPcmUgYW5kIFppbmMgT3JlIE1pbmluZyMyMTIyMwotbmFpY3MjMjEyMjM0I0NvcHBlciBPcmUgYW5kIE5pY2tlbCBPcmUgTWluaW5nIzIxMjIzCi1uYWljcyMyMTIyOSNPdGhlciBNZXRhbCBPcmUgTWluaW5nIzIxMjIKLW5haWNzIzIxMjI5MSNVcmFuaXVtLVJhZGl1bS1WYW5hZGl1bSBPcmUgTWluaW5nIzIxMjI5Ci1uYWljcyMyMTIyOTkjQWxsIE90aGVyIE1ldGFsIE9yZSBNaW5pbmcjMjEyMjkKLW5haWNzIzIxMjMjTm9ubWV0YWxsaWMgTWluZXJhbCBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIKLW5haWNzIzIxMjMxI1N0b25lIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMKLW5haWNzIzIxMjMxMSNEaW1lbnNpb24gU3RvbmUgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMzEKLW5haWNzIzIxMjMxMiNDcnVzaGVkIGFuZCBCcm9rZW4gTGltZXN0b25lIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMxCi1uYWljcyMyMTIzMTMjQ3J1c2hlZCBhbmQgQnJva2VuIEdyYW5pdGUgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMzEKLW5haWNzIzIxMjMxOSNPdGhlciBDcnVzaGVkIGFuZCBCcm9rZW4gU3RvbmUgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMzEKLW5haWNzIzIxMjMyI1NhbmQsIEdyYXZlbCwgQ2xheSwgYW5kIENlcmFtaWMgYW5kIFJlZnJhY3RvcnkgTWluZXJhbHMgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMwotbmFpY3MjMjEyMzIxI0NvbnN0cnVjdGlvbiBTYW5kIGFuZCBHcmF2ZWwgTWluaW5nIzIxMjMyCi1uYWljcyMyMTIzMjIjSW5kdXN0cmlhbCBTYW5kIE1pbmluZyMyMTIzMgotbmFpY3MjMjEyMzI0I0thb2xpbiBhbmQgQmFsbCBDbGF5IE1pbmluZyMyMTIzMgotbmFpY3MjMjEyMzI1I0NsYXkgYW5kIENlcmFtaWMgYW5kIFJlZnJhY3RvcnkgTWluZXJhbHMgTWluaW5nIzIxMjMyCi1uYWljcyMyMTIzOSNPdGhlciBOb25tZXRhbGxpYyBNaW5lcmFsIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMKLW5haWNzIzIxMjM5MSNQb3Rhc2gsIFNvZGEsIGFuZCBCb3JhdGUgTWluZXJhbCBNaW5pbmcjMjEyMzkKLW5haWNzIzIxMjM5MiNQaG9zcGhhdGUgUm9jayBNaW5pbmcjMjEyMzkKLW5haWNzIzIxMjM5MyNPdGhlciBDaGVtaWNhbCBhbmQgRmVydGlsaXplciBNaW5lcmFsIE1pbmluZyMyMTIzOQotbmFpY3MjMjEyMzk5I0FsbCBPdGhlciBOb25tZXRhbGxpYyBNaW5lcmFsIE1pbmluZyMyMTIzOQotbmFpY3MjMjEzI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgTWluaW5nIzIxCi1uYWljcyMyMTMxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgTWluaW5nIzIxMwotbmFpY3MjMjEzMTEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBNaW5pbmcjMjEzMQotbmFpY3MjMjEzMTExI0RyaWxsaW5nIE9pbCBhbmQgR2FzIFdlbGxzIzIxMzExCi1uYWljcyMyMTMxMTIjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBPaWwgYW5kIEdhcyBPcGVyYXRpb25zIzIxMzExCi1uYWljcyMyMTMxMTMjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBDb2FsIE1pbmluZyMyMTMxMQotbmFpY3MjMjEzMTE0I1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgTWV0YWwgTWluaW5nIzIxMzExCi1uYWljcyMyMTMxMTUjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBOb25tZXRhbGxpYyBNaW5lcmFscyAoZXhjZXB0IEZ1ZWxzKSMyMTMxMQotbmFpY3MjMjIjVXRpbGl0aWVzIzIyCi1uYWljcyMyMjEjVXRpbGl0aWVzIzIyCi1uYWljcyMyMjExI0VsZWN0cmljIFBvd2VyIEdlbmVyYXRpb24sIFRyYW5zbWlzc2lvbiBhbmQgRGlzdHJpYnV0aW9uIzIyMQotbmFpY3MjMjIxMTEjRWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiMyMjExCi1uYWljcyMyMjExMTEjSHlkcm9lbGVjdHJpYyBQb3dlciBHZW5lcmF0aW9uIzIyMTExCi1uYWljcyMyMjExMTIjRm9zc2lsIEZ1ZWwgRWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiMyMjExMQotbmFpY3MjMjIxMTEzI051Y2xlYXIgRWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiMyMjExMQotbmFpY3MjMjIxMTE5I090aGVyIEVsZWN0cmljIFBvd2VyIEdlbmVyYXRpb24jMjIxMTEKLW5haWNzIzIyMTEyI0VsZWN0cmljIFBvd2VyIFRyYW5zbWlzc2lvbiwgQ29udHJvbCwgYW5kIERpc3RyaWJ1dGlvbiMyMjExCi1uYWljcyMyMjExMjEjRWxlY3RyaWMgQnVsayBQb3dlciBUcmFuc21pc3Npb24gYW5kIENvbnRyb2wjMjIxMTIKLW5haWNzIzIyMTEyMiNFbGVjdHJpYyBQb3dlciBEaXN0cmlidXRpb24jMjIxMTIKLW5haWNzIzIyMTIjTmF0dXJhbCBHYXMgRGlzdHJpYnV0aW9uIzIyMQotbmFpY3MjMjIxMjEjTmF0dXJhbCBHYXMgRGlzdHJpYnV0aW9uIzIyMTIKLW5haWNzIzIyMTMjV2F0ZXIsIFNld2FnZSBhbmQgT3RoZXIgU3lzdGVtcyMyMjEKLW5haWNzIzIyMTMxI1dhdGVyIFN1cHBseSBhbmQgSXJyaWdhdGlvbiBTeXN0ZW1zIzIyMTMKLW5haWNzIzIyMTMyI1Nld2FnZSBUcmVhdG1lbnQgRmFjaWxpdGllcyMyMjEzCi1uYWljcyMyMjEzMyNTdGVhbSBhbmQgQWlyLUNvbmRpdGlvbmluZyBTdXBwbHkjMjIxMwotbmFpY3MjMjMjQ29uc3RydWN0aW9uIzIzCi1uYWljcyMyMzMjQnVpbGRpbmcsIERldmVsb3BpbmcsIGFuZCBHZW5lcmFsIENvbnRyYWN0aW5nIzIzCi1uYWljcyMyMzMxI0xhbmQgU3ViZGl2aXNpb24gYW5kIExhbmQgRGV2ZWxvcG1lbnQjMjMzCi1uYWljcyMyMzMxMSNMYW5kIFN1YmRpdmlzaW9uIGFuZCBMYW5kIERldmVsb3BtZW50IzIzMzEKLW5haWNzIzIzMzIjUmVzaWRlbnRpYWwgQnVpbGRpbmcgQ29uc3RydWN0aW9uIzIzMwotbmFpY3MjMjMzMjEjU2luZ2xlIEZhbWlseSBIb3VzaW5nIENvbnN0cnVjdGlvbiMyMzMyCi1uYWljcyMyMzMyMiNNdWx0aWZhbWlseSBIb3VzaW5nIENvbnN0cnVjdGlvbiMyMzMyCi1uYWljcyMyMzMzI05vbnJlc2lkZW50aWFsIEJ1aWxkaW5nIENvbnN0cnVjdGlvbiMyMzMKLW5haWNzIzIzMzMxI01hbnVmYWN0dXJpbmcgYW5kIEluZHVzdHJpYWwgQnVpbGRpbmcgQ29uc3RydWN0aW9uIzIzMzMKLW5haWNzIzIzMzMyI0NvbW1lcmNpYWwgYW5kIEluc3RpdHV0aW9uYWwgQnVpbGRpbmcgQ29uc3RydWN0aW9uIzIzMzMKLW5haWNzIzIzNCNIZWF2eSBDb25zdHJ1Y3Rpb24jMjMKLW5haWNzIzIzNDEjSGlnaHdheSwgU3RyZWV0LCBCcmlkZ2UsIGFuZCBUdW5uZWwgQ29uc3RydWN0aW9uIzIzNAotbmFpY3MjMjM0MTEjSGlnaHdheSBhbmQgU3RyZWV0IENvbnN0cnVjdGlvbiMyMzQxCi1uYWljcyMyMzQxMiNCcmlkZ2UgYW5kIFR1bm5lbCBDb25zdHJ1Y3Rpb24jMjM0MQotbmFpY3MjMjM0OSNPdGhlciBIZWF2eSBDb25zdHJ1Y3Rpb24jMjM0Ci1uYWljcyMyMzQ5MSNXYXRlciwgU2V3ZXIsIGFuZCBQaXBlbGluZSBDb25zdHJ1Y3Rpb24jMjM0OQotbmFpY3MjMjM0OTIjUG93ZXIgYW5kIENvbW11bmljYXRpb24gVHJhbnNtaXNzaW9uIExpbmUgQ29uc3RydWN0aW9uIzIzNDkKLW5haWNzIzIzNDkzI0luZHVzdHJpYWwgTm9uYnVpbGRpbmcgU3RydWN0dXJlIENvbnN0cnVjdGlvbiMyMzQ5Ci1uYWljcyMyMzQ5OSNBbGwgT3RoZXIgSGVhdnkgQ29uc3RydWN0aW9uIzIzNDkKLW5haWNzIzIzNSNTcGVjaWFsIFRyYWRlIENvbnRyYWN0b3JzIzIzCi1uYWljcyMyMzUxI1BsdW1iaW5nLCBIZWF0aW5nLCBhbmQgQWlyLUNvbmRpdGlvbmluZyBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTExI1BsdW1iaW5nLCBIZWF0aW5nLCBhbmQgQWlyLUNvbmRpdGlvbmluZyBDb250cmFjdG9ycyMyMzUxCi1uYWljcyMyMzUyI1BhaW50aW5nIGFuZCBXYWxsIENvdmVyaW5nIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1MjEjUGFpbnRpbmcgYW5kIFdhbGwgQ292ZXJpbmcgQ29udHJhY3RvcnMjMjM1MgotbmFpY3MjMjM1MyNFbGVjdHJpY2FsIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1MzEjRWxlY3RyaWNhbCBDb250cmFjdG9ycyMyMzUzCi1uYWljcyMyMzU0I01hc29ucnksIERyeXdhbGwsIEluc3VsYXRpb24sIGFuZCBUaWxlIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1NDEjTWFzb25yeSBhbmQgU3RvbmUgQ29udHJhY3RvcnMjMjM1NAotbmFpY3MjMjM1NDIjRHJ5d2FsbCwgUGxhc3RlcmluZywgQWNvdXN0aWNhbCwgYW5kIEluc3VsYXRpb24gQ29udHJhY3RvcnMjMjM1NAotbmFpY3MjMjM1NDMjVGlsZSwgTWFyYmxlLCBUZXJyYXp6bywgYW5kIE1vc2FpYyBDb250cmFjdG9ycyMyMzU0Ci1uYWljcyMyMzU1I0NhcnBlbnRyeSBhbmQgRmxvb3IgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzU1MSNDYXJwZW50cnkgQ29udHJhY3RvcnMjMjM1NQotbmFpY3MjMjM1NTIjRmxvb3IgTGF5aW5nIGFuZCBPdGhlciBGbG9vciBDb250cmFjdG9ycyMyMzU1Ci1uYWljcyMyMzU2I1Jvb2ZpbmcsIFNpZGluZywgYW5kIFNoZWV0IE1ldGFsIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1NjEjUm9vZmluZywgU2lkaW5nLCBhbmQgU2hlZXQgTWV0YWwgQ29udHJhY3RvcnMjMjM1NgotbmFpY3MjMjM1NyNDb25jcmV0ZSBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTcxI0NvbmNyZXRlIENvbnRyYWN0b3JzIzIzNTcKLW5haWNzIzIzNTgjV2F0ZXIgV2VsbCBEcmlsbGluZyBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTgxI1dhdGVyIFdlbGwgRHJpbGxpbmcgQ29udHJhY3RvcnMjMjM1OAotbmFpY3MjMjM1OSNPdGhlciBTcGVjaWFsIFRyYWRlIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1OTEjU3RydWN0dXJhbCBTdGVlbCBFcmVjdGlvbiBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMyMzU5MiNHbGFzcyBhbmQgR2xhemluZyBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMyMzU5MyNFeGNhdmF0aW9uIENvbnRyYWN0b3JzIzIzNTkKLW5haWNzIzIzNTk0I1dyZWNraW5nIGFuZCBEZW1vbGl0aW9uIENvbnRyYWN0b3JzIzIzNTkKLW5haWNzIzIzNTk1I0J1aWxkaW5nIEVxdWlwbWVudCBhbmQgT3RoZXIgTWFjaGluZXJ5IEluc3RhbGxhdGlvbiBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMyMzU5OSNBbGwgT3RoZXIgU3BlY2lhbCBUcmFkZSBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMzMSNNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTEjRm9vZCBNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTExI0FuaW1hbCBGb29kIE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTExMSNBbmltYWwgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTEKLW5haWNzIzMxMTExMSNEb2cgYW5kIENhdCBGb29kIE1hbnVmYWN0dXJpbmcjMzExMTEKLW5haWNzIzMxMTExOSNPdGhlciBBbmltYWwgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTExCi1uYWljcyMzMTEyI0dyYWluIGFuZCBPaWxzZWVkIE1pbGxpbmcjMzExCi1uYWljcyMzMTEyMSNGbG91ciBNaWxsaW5nIGFuZCBNYWx0IE1hbnVmYWN0dXJpbmcjMzExMgotbmFpY3MjMzExMjExI0Zsb3VyIE1pbGxpbmcjMzExMjEKLW5haWNzIzMxMTIxMiNSaWNlIE1pbGxpbmcjMzExMjEKLW5haWNzIzMxMTIxMyNNYWx0IE1hbnVmYWN0dXJpbmcjMzExMjEKLW5haWNzIzMxMTIyI1N0YXJjaCBhbmQgVmVnZXRhYmxlIEZhdHMgYW5kIE9pbHMgTWFudWZhY3R1cmluZyMzMTEyCi1uYWljcyMzMTEyMjEjV2V0IENvcm4gTWlsbGluZyMzMTEyMgotbmFpY3MjMzExMjIyI1NveWJlYW4gUHJvY2Vzc2luZyMzMTEyMgotbmFpY3MjMzExMjIzI090aGVyIE9pbHNlZWQgUHJvY2Vzc2luZyMzMTEyMgotbmFpY3MjMzExMjI1I0ZhdHMgYW5kIE9pbHMgUmVmaW5pbmcgYW5kIEJsZW5kaW5nIzMxMTIyCi1uYWljcyMzMTEyMyNCcmVha2Zhc3QgQ2VyZWFsIE1hbnVmYWN0dXJpbmcjMzExMgotbmFpY3MjMzExMyNTdWdhciBhbmQgQ29uZmVjdGlvbmVyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTEzMSNTdWdhciBNYW51ZmFjdHVyaW5nIzMxMTMKLW5haWNzIzMxMTMxMSNTdWdhcmNhbmUgTWlsbHMjMzExMzEKLW5haWNzIzMxMTMxMiNDYW5lIFN1Z2FyIFJlZmluaW5nIzMxMTMxCi1uYWljcyMzMTEzMTMjQmVldCBTdWdhciBNYW51ZmFjdHVyaW5nIzMxMTMxCi1uYWljcyMzMTEzMiNDaG9jb2xhdGUgYW5kIENvbmZlY3Rpb25lcnkgTWFudWZhY3R1cmluZyBmcm9tIENhY2FvIEJlYW5zIzMxMTMKLW5haWNzIzMxMTMzI0NvbmZlY3Rpb25lcnkgTWFudWZhY3R1cmluZyBmcm9tIFB1cmNoYXNlZCBDaG9jb2xhdGUjMzExMwotbmFpY3MjMzExMzQjTm9uY2hvY29sYXRlIENvbmZlY3Rpb25lcnkgTWFudWZhY3R1cmluZyMzMTEzCi1uYWljcyMzMTE0I0ZydWl0IGFuZCBWZWdldGFibGUgUHJlc2VydmluZyBhbmQgU3BlY2lhbHR5IEZvb2QgTWFudWZhY3R1cmluZyMzMTEKLW5haWNzIzMxMTQxI0Zyb3plbiBGb29kIE1hbnVmYWN0dXJpbmcjMzExNAotbmFpY3MjMzExNDExI0Zyb3plbiBGcnVpdCwgSnVpY2UsIGFuZCBWZWdldGFibGUgTWFudWZhY3R1cmluZyMzMTE0MQotbmFpY3MjMzExNDEyI0Zyb3plbiBTcGVjaWFsdHkgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTQxCi1uYWljcyMzMTE0MiNGcnVpdCBhbmQgVmVnZXRhYmxlIENhbm5pbmcsIFBpY2tsaW5nLCBhbmQgRHJ5aW5nIzMxMTQKLW5haWNzIzMxMTQyMSNGcnVpdCBhbmQgVmVnZXRhYmxlIENhbm5pbmcjMzExNDIKLW5haWNzIzMxMTQyMiNTcGVjaWFsdHkgQ2FubmluZyMzMTE0MgotbmFpY3MjMzExNDIzI0RyaWVkIGFuZCBEZWh5ZHJhdGVkIEZvb2QgTWFudWZhY3R1cmluZyMzMTE0MgotbmFpY3MjMzExNSNEYWlyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTE1MSNEYWlyeSBQcm9kdWN0IChleGNlcHQgRnJvemVuKSBNYW51ZmFjdHVyaW5nIzMxMTUKLW5haWNzIzMxMTUxMSNGbHVpZCBNaWxrIE1hbnVmYWN0dXJpbmcjMzExNTEKLW5haWNzIzMxMTUxMiNDcmVhbWVyeSBCdXR0ZXIgTWFudWZhY3R1cmluZyMzMTE1MQotbmFpY3MjMzExNTEzI0NoZWVzZSBNYW51ZmFjdHVyaW5nIzMxMTUxCi1uYWljcyMzMTE1MTQjRHJ5LCBDb25kZW5zZWQsIGFuZCBFdmFwb3JhdGVkIERhaXJ5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTE1MQotbmFpY3MjMzExNTIjSWNlIENyZWFtIGFuZCBGcm96ZW4gRGVzc2VydCBNYW51ZmFjdHVyaW5nIzMxMTUKLW5haWNzIzMxMTYjQW5pbWFsIFNsYXVnaHRlcmluZyBhbmQgUHJvY2Vzc2luZyMzMTEKLW5haWNzIzMxMTYxI0FuaW1hbCBTbGF1Z2h0ZXJpbmcgYW5kIFByb2Nlc3NpbmcjMzExNgotbmFpY3MjMzExNjExI0FuaW1hbCAoZXhjZXB0IFBvdWx0cnkpIFNsYXVnaHRlcmluZyMzMTE2MQotbmFpY3MjMzExNjEyI01lYXQgUHJvY2Vzc2VkIGZyb20gQ2FyY2Fzc2VzIzMxMTYxCi1uYWljcyMzMTE2MTMjUmVuZGVyaW5nIGFuZCBNZWF0IEJ5cHJvZHVjdCBQcm9jZXNzaW5nIzMxMTYxCi1uYWljcyMzMTE2MTUjUG91bHRyeSBQcm9jZXNzaW5nIzMxMTYxCi1uYWljcyMzMTE3I1NlYWZvb2QgUHJvZHVjdCBQcmVwYXJhdGlvbiBhbmQgUGFja2FnaW5nIzMxMQotbmFpY3MjMzExNzEjU2VhZm9vZCBQcm9kdWN0IFByZXBhcmF0aW9uIGFuZCBQYWNrYWdpbmcjMzExNwotbmFpY3MjMzExNzExI1NlYWZvb2QgQ2FubmluZyMzMTE3MQotbmFpY3MjMzExNzEyI0ZyZXNoIGFuZCBGcm96ZW4gU2VhZm9vZCBQcm9jZXNzaW5nIzMxMTcxCi1uYWljcyMzMTE4I0Jha2VyaWVzIGFuZCBUb3J0aWxsYSBNYW51ZmFjdHVyaW5nIzMxMQotbmFpY3MjMzExODEjQnJlYWQgYW5kIEJha2VyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzExOAotbmFpY3MjMzExODExI1JldGFpbCBCYWtlcmllcyMzMTE4MQotbmFpY3MjMzExODEyI0NvbW1lcmNpYWwgQmFrZXJpZXMjMzExODEKLW5haWNzIzMxMTgxMyNGcm96ZW4gQ2FrZXMsIFBpZXMsIGFuZCBPdGhlciBQYXN0cmllcyBNYW51ZmFjdHVyaW5nIzMxMTgxCi1uYWljcyMzMTE4MiNDb29raWUsIENyYWNrZXIsIGFuZCBQYXN0YSBNYW51ZmFjdHVyaW5nIzMxMTgKLW5haWNzIzMxMTgyMSNDb29raWUgYW5kIENyYWNrZXIgTWFudWZhY3R1cmluZyMzMTE4MgotbmFpY3MjMzExODIyI0Zsb3VyIE1peGVzIGFuZCBEb3VnaCBNYW51ZmFjdHVyaW5nIGZyb20gUHVyY2hhc2VkIEZsb3VyIzMxMTgyCi1uYWljcyMzMTE4MjMjRHJ5IFBhc3RhIE1hbnVmYWN0dXJpbmcjMzExODIKLW5haWNzIzMxMTgzI1RvcnRpbGxhIE1hbnVmYWN0dXJpbmcjMzExOAotbmFpY3MjMzExOSNPdGhlciBGb29kIE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTE5MSNTbmFjayBGb29kIE1hbnVmYWN0dXJpbmcjMzExOQotbmFpY3MjMzExOTExI1JvYXN0ZWQgTnV0cyBhbmQgUGVhbnV0IEJ1dHRlciBNYW51ZmFjdHVyaW5nIzMxMTkxCi1uYWljcyMzMTE5MTkjT3RoZXIgU25hY2sgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTkxCi1uYWljcyMzMTE5MiNDb2ZmZWUgYW5kIFRlYSBNYW51ZmFjdHVyaW5nIzMxMTkKLW5haWNzIzMxMTkzI0ZsYXZvcmluZyBTeXJ1cCBhbmQgQ29uY2VudHJhdGUgTWFudWZhY3R1cmluZyMzMTE5Ci1uYWljcyMzMTE5NCNTZWFzb25pbmcgYW5kIERyZXNzaW5nIE1hbnVmYWN0dXJpbmcjMzExOQotbmFpY3MjMzExOTQxI01heW9ubmFpc2UsIERyZXNzaW5nLCBhbmQgT3RoZXIgUHJlcGFyZWQgU2F1Y2UgTWFudWZhY3R1cmluZyMzMTE5NAotbmFpY3MjMzExOTQyI1NwaWNlIGFuZCBFeHRyYWN0IE1hbnVmYWN0dXJpbmcjMzExOTQKLW5haWNzIzMxMTk5I0FsbCBPdGhlciBGb29kIE1hbnVmYWN0dXJpbmcjMzExOQotbmFpY3MjMzExOTkxI1BlcmlzaGFibGUgUHJlcGFyZWQgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTk5Ci1uYWljcyMzMTE5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTk5Ci1uYWljcyMzMTIjQmV2ZXJhZ2UgYW5kIFRvYmFjY28gUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTIxI0JldmVyYWdlIE1hbnVmYWN0dXJpbmcjMzEyCi1uYWljcyMzMTIxMSNTb2Z0IERyaW5rIGFuZCBJY2UgTWFudWZhY3R1cmluZyMzMTIxCi1uYWljcyMzMTIxMTEjU29mdCBEcmluayBNYW51ZmFjdHVyaW5nIzMxMjExCi1uYWljcyMzMTIxMTIjQm90dGxlZCBXYXRlciBNYW51ZmFjdHVyaW5nIzMxMjExCi1uYWljcyMzMTIxMTMjSWNlIE1hbnVmYWN0dXJpbmcjMzEyMTEKLW5haWNzIzMxMjEyI0JyZXdlcmllcyMzMTIxCi1uYWljcyMzMTIxMyNXaW5lcmllcyMzMTIxCi1uYWljcyMzMTIxNCNEaXN0aWxsZXJpZXMjMzEyMQotbmFpY3MjMzEyMiNUb2JhY2NvIE1hbnVmYWN0dXJpbmcjMzEyCi1uYWljcyMzMTIyMSNUb2JhY2NvIFN0ZW1taW5nIGFuZCBSZWRyeWluZyMzMTIyCi1uYWljcyMzMTIyMiNUb2JhY2NvIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTIyCi1uYWljcyMzMTIyMjEjQ2lnYXJldHRlIE1hbnVmYWN0dXJpbmcjMzEyMjIKLW5haWNzIzMxMjIyOSNPdGhlciBUb2JhY2NvIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTIyMgotbmFpY3MjMzEzI1RleHRpbGUgTWlsbHMjMzEKLW5haWNzIzMxMzEjRmliZXIsIFlhcm4sIGFuZCBUaHJlYWQgTWlsbHMjMzEzCi1uYWljcyMzMTMxMSNGaWJlciwgWWFybiwgYW5kIFRocmVhZCBNaWxscyMzMTMxCi1uYWljcyMzMTMxMTEjWWFybiBTcGlubmluZyBNaWxscyMzMTMxMQotbmFpY3MjMzEzMTEyI1lhcm4gVGV4dHVyaXppbmcsIFRocm93aW5nLCBhbmQgVHdpc3RpbmcgTWlsbHMjMzEzMTEKLW5haWNzIzMxMzExMyNUaHJlYWQgTWlsbHMjMzEzMTEKLW5haWNzIzMxMzIjRmFicmljIE1pbGxzIzMxMwotbmFpY3MjMzEzMjEjQnJvYWR3b3ZlbiBGYWJyaWMgTWlsbHMjMzEzMgotbmFpY3MjMzEzMjIjTmFycm93IEZhYnJpYyBNaWxscyBhbmQgU2NoaWZmbGkgTWFjaGluZSBFbWJyb2lkZXJ5IzMxMzIKLW5haWNzIzMxMzIyMSNOYXJyb3cgRmFicmljIE1pbGxzIzMxMzIyCi1uYWljcyMzMTMyMjIjU2NoaWZmbGkgTWFjaGluZSBFbWJyb2lkZXJ5IzMxMzIyCi1uYWljcyMzMTMyMyNOb253b3ZlbiBGYWJyaWMgTWlsbHMjMzEzMgotbmFpY3MjMzEzMjQjS25pdCBGYWJyaWMgTWlsbHMjMzEzMgotbmFpY3MjMzEzMjQxI1dlZnQgS25pdCBGYWJyaWMgTWlsbHMjMzEzMjQKLW5haWNzIzMxMzI0OSNPdGhlciBLbml0IEZhYnJpYyBhbmQgTGFjZSBNaWxscyMzMTMyNAotbmFpY3MjMzEzMyNUZXh0aWxlIGFuZCBGYWJyaWMgRmluaXNoaW5nIGFuZCBGYWJyaWMgQ29hdGluZyBNaWxscyMzMTMKLW5haWNzIzMxMzMxI1RleHRpbGUgYW5kIEZhYnJpYyBGaW5pc2hpbmcgTWlsbHMjMzEzMwotbmFpY3MjMzEzMzExI0Jyb2Fkd292ZW4gRmFicmljIEZpbmlzaGluZyBNaWxscyMzMTMzMQotbmFpY3MjMzEzMzEyI1RleHRpbGUgYW5kIEZhYnJpYyBGaW5pc2hpbmcgKGV4Y2VwdCBCcm9hZHdvdmVuIEZhYnJpYykgTWlsbHMjMzEzMzEKLW5haWNzIzMxMzMyI0ZhYnJpYyBDb2F0aW5nIE1pbGxzIzMxMzMKLW5haWNzIzMxNCNUZXh0aWxlIFByb2R1Y3QgTWlsbHMjMzEKLW5haWNzIzMxNDEjVGV4dGlsZSBGdXJuaXNoaW5ncyBNaWxscyMzMTQKLW5haWNzIzMxNDExI0NhcnBldCBhbmQgUnVnIE1pbGxzIzMxNDEKLW5haWNzIzMxNDEyI0N1cnRhaW4gYW5kIExpbmVuIE1pbGxzIzMxNDEKLW5haWNzIzMxNDEyMSNDdXJ0YWluIGFuZCBEcmFwZXJ5IE1pbGxzIzMxNDEyCi1uYWljcyMzMTQxMjkjT3RoZXIgSG91c2Vob2xkIFRleHRpbGUgUHJvZHVjdCBNaWxscyMzMTQxMgotbmFpY3MjMzE0OSNPdGhlciBUZXh0aWxlIFByb2R1Y3QgTWlsbHMjMzE0Ci1uYWljcyMzMTQ5MSNUZXh0aWxlIEJhZyBhbmQgQ2FudmFzIE1pbGxzIzMxNDkKLW5haWNzIzMxNDkxMSNUZXh0aWxlIEJhZyBNaWxscyMzMTQ5MQotbmFpY3MjMzE0OTEyI0NhbnZhcyBhbmQgUmVsYXRlZCBQcm9kdWN0IE1pbGxzIzMxNDkxCi1uYWljcyMzMTQ5OSNBbGwgT3RoZXIgVGV4dGlsZSBQcm9kdWN0IE1pbGxzIzMxNDkKLW5haWNzIzMxNDk5MSNSb3BlLCBDb3JkYWdlLCBhbmQgVHdpbmUgTWlsbHMjMzE0OTkKLW5haWNzIzMxNDk5MiNUaXJlIENvcmQgYW5kIFRpcmUgRmFicmljIE1pbGxzIzMxNDk5Ci1uYWljcyMzMTQ5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgVGV4dGlsZSBQcm9kdWN0IE1pbGxzIzMxNDk5Ci1uYWljcyMzMTUjQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTUxI0FwcGFyZWwgS25pdHRpbmcgTWlsbHMjMzE1Ci1uYWljcyMzMTUxMSNIb3NpZXJ5IGFuZCBTb2NrIE1pbGxzIzMxNTEKLW5haWNzIzMxNTExMSNTaGVlciBIb3NpZXJ5IE1pbGxzIzMxNTExCi1uYWljcyMzMTUxMTkjT3RoZXIgSG9zaWVyeSBhbmQgU29jayBNaWxscyMzMTUxMQotbmFpY3MjMzE1MTkjT3RoZXIgQXBwYXJlbCBLbml0dGluZyBNaWxscyMzMTUxCi1uYWljcyMzMTUxOTEjT3V0ZXJ3ZWFyIEtuaXR0aW5nIE1pbGxzIzMxNTE5Ci1uYWljcyMzMTUxOTIjVW5kZXJ3ZWFyIGFuZCBOaWdodHdlYXIgS25pdHRpbmcgTWlsbHMjMzE1MTkKLW5haWNzIzMxNTIjQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNQotbmFpY3MjMzE1MjEjQ3V0IGFuZCBTZXcgQXBwYXJlbCBDb250cmFjdG9ycyMzMTUyCi1uYWljcyMzMTUyMTEjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IEFwcGFyZWwgQ29udHJhY3RvcnMjMzE1MjEKLW5haWNzIzMxNTIxMiNXb21lbidzLCBHaXJscycsIGFuZCBJbmZhbnRzJyBDdXQgYW5kIFNldyBBcHBhcmVsIENvbnRyYWN0b3JzIzMxNTIxCi1uYWljcyMzMTUyMiNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTIKLW5haWNzIzMxNTIyMSNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgVW5kZXJ3ZWFyIGFuZCBOaWdodHdlYXIgTWFudWZhY3R1cmluZyMzMTUyMgotbmFpY3MjMzE1MjIyI01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBTdWl0LCBDb2F0LCBhbmQgT3ZlcmNvYXQgTWFudWZhY3R1cmluZyMzMTUyMgotbmFpY3MjMzE1MjIzI01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBTaGlydCAoZXhjZXB0IFdvcmsgU2hpcnQpIE1hbnVmYWN0dXJpbmcjMzE1MjIKLW5haWNzIzMxNTIyNCNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgVHJvdXNlciwgU2xhY2ssIGFuZCBKZWFuIE1hbnVmYWN0dXJpbmcjMzE1MjIKLW5haWNzIzMxNTIyNSNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgV29yayBDbG90aGluZyBNYW51ZmFjdHVyaW5nIzMxNTIyCi1uYWljcyMzMTUyMjgjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IE90aGVyIE91dGVyd2VhciBNYW51ZmFjdHVyaW5nIzMxNTIyCi1uYWljcyMzMTUyMyNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTIKLW5haWNzIzMxNTIzMSNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgTGluZ2VyaWUsIExvdW5nZXdlYXIsIGFuZCBOaWdodHdlYXIgTWFudWZhY3R1cmluZyMzMTUyMwotbmFpY3MjMzE1MjMyI1dvbWVuJ3MgYW5kIEdpcmxzJyBDdXQgYW5kIFNldyBCbG91c2UgYW5kIFNoaXJ0IE1hbnVmYWN0dXJpbmcjMzE1MjMKLW5haWNzIzMxNTIzMyNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgRHJlc3MgTWFudWZhY3R1cmluZyMzMTUyMwotbmFpY3MjMzE1MjM0I1dvbWVuJ3MgYW5kIEdpcmxzJyBDdXQgYW5kIFNldyBTdWl0LCBDb2F0LCBUYWlsb3JlZCBKYWNrZXQsIGFuZCBTa2lydCBNYW51ZmFjdHVyaW5nIzMxNTIzCi1uYWljcyMzMTUyMzkjV29tZW4ncyBhbmQgR2lybHMnIEN1dCBhbmQgU2V3IE90aGVyIE91dGVyd2VhciBNYW51ZmFjdHVyaW5nIzMxNTIzCi1uYWljcyMzMTUyOSNPdGhlciBDdXQgYW5kIFNldyBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1MgotbmFpY3MjMzE1MjkxI0luZmFudHMnIEN1dCBhbmQgU2V3IEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUyOQotbmFpY3MjMzE1MjkyI0Z1ciBhbmQgTGVhdGhlciBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1MjkKLW5haWNzIzMxNTI5OSNBbGwgT3RoZXIgQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTI5Ci1uYWljcyMzMTU5I0FwcGFyZWwgQWNjZXNzb3JpZXMgYW5kIE90aGVyIEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUKLW5haWNzIzMxNTk5I0FwcGFyZWwgQWNjZXNzb3JpZXMgYW5kIE90aGVyIEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTU5Ci1uYWljcyMzMTU5OTEjSGF0LCBDYXAsIGFuZCBNaWxsaW5lcnkgTWFudWZhY3R1cmluZyMzMTU5OQotbmFpY3MjMzE1OTkyI0dsb3ZlIGFuZCBNaXR0ZW4gTWFudWZhY3R1cmluZyMzMTU5OQotbmFpY3MjMzE1OTkzI01lbidzIGFuZCBCb3lzJyBOZWNrd2VhciBNYW51ZmFjdHVyaW5nIzMxNTk5Ci1uYWljcyMzMTU5OTkjT3RoZXIgQXBwYXJlbCBBY2Nlc3NvcmllcyBhbmQgT3RoZXIgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTk5Ci1uYWljcyMzMTYjTGVhdGhlciBhbmQgQWxsaWVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMQotbmFpY3MjMzE2MSNMZWF0aGVyIGFuZCBIaWRlIFRhbm5pbmcgYW5kIEZpbmlzaGluZyMzMTYKLW5haWNzIzMxNjExI0xlYXRoZXIgYW5kIEhpZGUgVGFubmluZyBhbmQgRmluaXNoaW5nIzMxNjEKLW5haWNzIzMxNjIjRm9vdHdlYXIgTWFudWZhY3R1cmluZyMzMTYKLW5haWNzIzMxNjIxI0Zvb3R3ZWFyIE1hbnVmYWN0dXJpbmcjMzE2MgotbmFpY3MjMzE2MjExI1J1YmJlciBhbmQgUGxhc3RpY3MgRm9vdHdlYXIgTWFudWZhY3R1cmluZyMzMTYyMQotbmFpY3MjMzE2MjEyI0hvdXNlIFNsaXBwZXIgTWFudWZhY3R1cmluZyMzMTYyMQotbmFpY3MjMzE2MjEzI01lbidzIEZvb3R3ZWFyIChleGNlcHQgQXRobGV0aWMpIE1hbnVmYWN0dXJpbmcjMzE2MjEKLW5haWNzIzMxNjIxNCNXb21lbidzIEZvb3R3ZWFyIChleGNlcHQgQXRobGV0aWMpIE1hbnVmYWN0dXJpbmcjMzE2MjEKLW5haWNzIzMxNjIxOSNPdGhlciBGb290d2VhciBNYW51ZmFjdHVyaW5nIzMxNjIxCi1uYWljcyMzMTY5I090aGVyIExlYXRoZXIgYW5kIEFsbGllZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzE2Ci1uYWljcyMzMTY5OSNPdGhlciBMZWF0aGVyIGFuZCBBbGxpZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxNjkKLW5haWNzIzMxNjk5MSNMdWdnYWdlIE1hbnVmYWN0dXJpbmcjMzE2OTkKLW5haWNzIzMxNjk5MiNXb21lbidzIEhhbmRiYWcgYW5kIFB1cnNlIE1hbnVmYWN0dXJpbmcjMzE2OTkKLW5haWNzIzMxNjk5MyNQZXJzb25hbCBMZWF0aGVyIEdvb2QgKGV4Y2VwdCBXb21lbidzIEhhbmRiYWcgYW5kIFB1cnNlKSBNYW51ZmFjdHVyaW5nIzMxNjk5Ci1uYWljcyMzMTY5OTkjQWxsIE90aGVyIExlYXRoZXIgR29vZCBNYW51ZmFjdHVyaW5nIzMxNjk5Ci1uYWljcyMzMiNNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjEjV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIKLW5haWNzIzMyMTEjU2F3bWlsbHMgYW5kIFdvb2QgUHJlc2VydmF0aW9uIzMyMQotbmFpY3MjMzIxMTEjU2F3bWlsbHMgYW5kIFdvb2QgUHJlc2VydmF0aW9uIzMyMTEKLW5haWNzIzMyMTExMyNTYXdtaWxscyMzMjExMQotbmFpY3MjMzIxMTE0I1dvb2QgUHJlc2VydmF0aW9uIzMyMTExCi1uYWljcyMzMjEyI1ZlbmVlciwgUGx5d29vZCwgYW5kIEVuZ2luZWVyZWQgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxCi1uYWljcyMzMjEyMSNWZW5lZXIsIFBseXdvb2QsIGFuZCBFbmdpbmVlcmVkIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMTIKLW5haWNzIzMyMTIxMSNIYXJkd29vZCBWZW5lZXIgYW5kIFBseXdvb2QgTWFudWZhY3R1cmluZyMzMjEyMQotbmFpY3MjMzIxMjEyI1NvZnR3b29kIFZlbmVlciBhbmQgUGx5d29vZCBNYW51ZmFjdHVyaW5nIzMyMTIxCi1uYWljcyMzMjEyMTMjRW5naW5lZXJlZCBXb29kIE1lbWJlciAoZXhjZXB0IFRydXNzKSBNYW51ZmFjdHVyaW5nIzMyMTIxCi1uYWljcyMzMjEyMTQjVHJ1c3MgTWFudWZhY3R1cmluZyMzMjEyMQotbmFpY3MjMzIxMjE5I1JlY29uc3RpdHV0ZWQgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxMjEKLW5haWNzIzMyMTkjT3RoZXIgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxCi1uYWljcyMzMjE5MSNNaWxsd29yayMzMjE5Ci1uYWljcyMzMjE5MTEjV29vZCBXaW5kb3cgYW5kIERvb3IgTWFudWZhY3R1cmluZyMzMjE5MQotbmFpY3MjMzIxOTEyI0N1dCBTdG9jaywgUmVzYXdpbmcgTHVtYmVyLCBhbmQgUGxhbmluZyMzMjE5MQotbmFpY3MjMzIxOTE4I090aGVyIE1pbGx3b3JrIChpbmNsdWRpbmcgRmxvb3JpbmcpIzMyMTkxCi1uYWljcyMzMjE5MiNXb29kIENvbnRhaW5lciBhbmQgUGFsbGV0IE1hbnVmYWN0dXJpbmcjMzIxOQotbmFpY3MjMzIxOTkjQWxsIE90aGVyIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMTkKLW5haWNzIzMyMTk5MSNNYW51ZmFjdHVyZWQgSG9tZSAoTW9iaWxlIEhvbWUpIE1hbnVmYWN0dXJpbmcjMzIxOTkKLW5haWNzIzMyMTk5MiNQcmVmYWJyaWNhdGVkIFdvb2QgQnVpbGRpbmcgTWFudWZhY3R1cmluZyMzMjE5OQotbmFpY3MjMzIxOTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMTk5Ci1uYWljcyMzMjIjUGFwZXIgTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzIyMSNQdWxwLCBQYXBlciwgYW5kIFBhcGVyYm9hcmQgTWlsbHMjMzIyCi1uYWljcyMzMjIxMSNQdWxwIE1pbGxzIzMyMjEKLW5haWNzIzMyMjEyI1BhcGVyIE1pbGxzIzMyMjEKLW5haWNzIzMyMjEyMSNQYXBlciAoZXhjZXB0IE5ld3NwcmludCkgTWlsbHMjMzIyMTIKLW5haWNzIzMyMjEyMiNOZXdzcHJpbnQgTWlsbHMjMzIyMTIKLW5haWNzIzMyMjEzI1BhcGVyYm9hcmQgTWlsbHMjMzIyMQotbmFpY3MjMzIyMiNDb252ZXJ0ZWQgUGFwZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMgotbmFpY3MjMzIyMjEjUGFwZXJib2FyZCBDb250YWluZXIgTWFudWZhY3R1cmluZyMzMjIyCi1uYWljcyMzMjIyMTEjQ29ycnVnYXRlZCBhbmQgU29saWQgRmliZXIgQm94IE1hbnVmYWN0dXJpbmcjMzIyMjEKLW5haWNzIzMyMjIxMiNGb2xkaW5nIFBhcGVyYm9hcmQgQm94IE1hbnVmYWN0dXJpbmcjMzIyMjEKLW5haWNzIzMyMjIxMyNTZXR1cCBQYXBlcmJvYXJkIEJveCBNYW51ZmFjdHVyaW5nIzMyMjIxCi1uYWljcyMzMjIyMTQjRmliZXIgQ2FuLCBUdWJlLCBEcnVtLCBhbmQgU2ltaWxhciBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMyMjIxCi1uYWljcyMzMjIyMTUjTm9uZm9sZGluZyBTYW5pdGFyeSBGb29kIENvbnRhaW5lciBNYW51ZmFjdHVyaW5nIzMyMjIxCi1uYWljcyMzMjIyMiNQYXBlciBCYWcgYW5kIENvYXRlZCBhbmQgVHJlYXRlZCBQYXBlciBNYW51ZmFjdHVyaW5nIzMyMjIKLW5haWNzIzMyMjIyMSNDb2F0ZWQgYW5kIExhbWluYXRlZCBQYWNrYWdpbmcgUGFwZXIgYW5kIFBsYXN0aWNzIEZpbG0gTWFudWZhY3R1cmluZyMzMjIyMgotbmFpY3MjMzIyMjIyI0NvYXRlZCBhbmQgTGFtaW5hdGVkIFBhcGVyIE1hbnVmYWN0dXJpbmcjMzIyMjIKLW5haWNzIzMyMjIyMyNQbGFzdGljcywgRm9pbCwgYW5kIENvYXRlZCBQYXBlciBCYWcgTWFudWZhY3R1cmluZyMzMjIyMgotbmFpY3MjMzIyMjI0I1VuY29hdGVkIFBhcGVyIGFuZCBNdWx0aXdhbGwgQmFnIE1hbnVmYWN0dXJpbmcjMzIyMjIKLW5haWNzIzMyMjIyNSNMYW1pbmF0ZWQgQWx1bWludW0gRm9pbCBNYW51ZmFjdHVyaW5nIGZvciBGbGV4aWJsZSBQYWNrYWdpbmcgVXNlcyMzMjIyMgotbmFpY3MjMzIyMjI2I1N1cmZhY2UtQ29hdGVkIFBhcGVyYm9hcmQgTWFudWZhY3R1cmluZyMzMjIyMgotbmFpY3MjMzIyMjMjU3RhdGlvbmVyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyMgotbmFpY3MjMzIyMjMxI0RpZS1DdXQgUGFwZXIgYW5kIFBhcGVyYm9hcmQgT2ZmaWNlIFN1cHBsaWVzIE1hbnVmYWN0dXJpbmcjMzIyMjMKLW5haWNzIzMyMjIzMiNFbnZlbG9wZSBNYW51ZmFjdHVyaW5nIzMyMjIzCi1uYWljcyMzMjIyMzMjU3RhdGlvbmVyeSwgVGFibGV0LCBhbmQgUmVsYXRlZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyMjMKLW5haWNzIzMyMjI5I090aGVyIENvbnZlcnRlZCBQYXBlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyMgotbmFpY3MjMzIyMjkxI1Nhbml0YXJ5IFBhcGVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjIyOQotbmFpY3MjMzIyMjk5I0FsbCBPdGhlciBDb252ZXJ0ZWQgUGFwZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMjI5Ci1uYWljcyMzMjMjUHJpbnRpbmcgYW5kIFJlbGF0ZWQgU3VwcG9ydCBBY3Rpdml0aWVzIzMyCi1uYWljcyMzMjMxI1ByaW50aW5nIGFuZCBSZWxhdGVkIFN1cHBvcnQgQWN0aXZpdGllcyMzMjMKLW5haWNzIzMyMzExI1ByaW50aW5nIzMyMzEKLW5haWNzIzMyMzExMCNDb21tZXJjaWFsIExpdGhvZ3JhcGhpYyBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTExI0NvbW1lcmNpYWwgR3JhdnVyZSBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTEyI0NvbW1lcmNpYWwgRmxleG9ncmFwaGljIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTMjQ29tbWVyY2lhbCBTY3JlZW4gUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExNCNRdWljayBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTE1I0RpZ2l0YWwgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExNiNNYW5pZm9sZCBCdXNpbmVzcyBGb3JtcyBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTE3I0Jvb2tzIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTgjQmxhbmtib29rLCBMb29zZWxlYWYgQmluZGVycywgYW5kIERldmljZXMgTWFudWZhY3R1cmluZyMzMjMxMQotbmFpY3MjMzIzMTE5I090aGVyIENvbW1lcmNpYWwgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzEyI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgUHJpbnRpbmcjMzIzMQotbmFpY3MjMzIzMTIxI1RyYWRlYmluZGluZyBhbmQgUmVsYXRlZCBXb3JrIzMyMzEyCi1uYWljcyMzMjMxMjIjUHJlcHJlc3MgU2VydmljZXMjMzIzMTIKLW5haWNzIzMyNCNQZXRyb2xldW0gYW5kIENvYWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzI0MSNQZXRyb2xldW0gYW5kIENvYWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMjQKLW5haWNzIzMyNDExI1BldHJvbGV1bSBSZWZpbmVyaWVzIzMyNDEKLW5haWNzIzMyNDEyI0FzcGhhbHQgUGF2aW5nLCBSb29maW5nLCBhbmQgU2F0dXJhdGVkIE1hdGVyaWFscyBNYW51ZmFjdHVyaW5nIzMyNDEKLW5haWNzIzMyNDEyMSNBc3BoYWx0IFBhdmluZyBNaXh0dXJlIGFuZCBCbG9jayBNYW51ZmFjdHVyaW5nIzMyNDEyCi1uYWljcyMzMjQxMjIjQXNwaGFsdCBTaGluZ2xlIGFuZCBDb2F0aW5nIE1hdGVyaWFscyBNYW51ZmFjdHVyaW5nIzMyNDEyCi1uYWljcyMzMjQxOSNPdGhlciBQZXRyb2xldW0gYW5kIENvYWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMjQxCi1uYWljcyMzMjQxOTEjUGV0cm9sZXVtIEx1YnJpY2F0aW5nIE9pbCBhbmQgR3JlYXNlIE1hbnVmYWN0dXJpbmcjMzI0MTkKLW5haWNzIzMyNDE5OSNBbGwgT3RoZXIgUGV0cm9sZXVtIGFuZCBDb2FsIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcjMzI0MTkKLW5haWNzIzMyNSNDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjUxI0Jhc2ljIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjUxMSNQZXRyb2NoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MQotbmFpY3MjMzI1MTIjSW5kdXN0cmlhbCBHYXMgTWFudWZhY3R1cmluZyMzMjUxCi1uYWljcyMzMjUxMyNTeW50aGV0aWMgRHllIGFuZCBQaWdtZW50IE1hbnVmYWN0dXJpbmcjMzI1MQotbmFpY3MjMzI1MTMxI0lub3JnYW5pYyBEeWUgYW5kIFBpZ21lbnQgTWFudWZhY3R1cmluZyMzMjUxMwotbmFpY3MjMzI1MTMyI1N5bnRoZXRpYyBPcmdhbmljIER5ZSBhbmQgUGlnbWVudCBNYW51ZmFjdHVyaW5nIzMyNTEzCi1uYWljcyMzMjUxOCNPdGhlciBCYXNpYyBJbm9yZ2FuaWMgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxCi1uYWljcyMzMjUxODEjQWxrYWxpZXMgYW5kIENobG9yaW5lIE1hbnVmYWN0dXJpbmcjMzI1MTgKLW5haWNzIzMyNTE4MiNDYXJib24gQmxhY2sgTWFudWZhY3R1cmluZyMzMjUxOAotbmFpY3MjMzI1MTg4I0FsbCBPdGhlciBCYXNpYyBJbm9yZ2FuaWMgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxOAotbmFpY3MjMzI1MTkjT3RoZXIgQmFzaWMgT3JnYW5pYyBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTEKLW5haWNzIzMyNTE5MSNHdW0gYW5kIFdvb2QgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxOQotbmFpY3MjMzI1MTkyI0N5Y2xpYyBDcnVkZSBhbmQgSW50ZXJtZWRpYXRlIE1hbnVmYWN0dXJpbmcjMzI1MTkKLW5haWNzIzMyNTE5MyNFdGh5bCBBbGNvaG9sIE1hbnVmYWN0dXJpbmcjMzI1MTkKLW5haWNzIzMyNTE5OSNBbGwgT3RoZXIgQmFzaWMgT3JnYW5pYyBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTE5Ci1uYWljcyMzMjUyI1Jlc2luLCBTeW50aGV0aWMgUnViYmVyLCBhbmQgQXJ0aWZpY2lhbCBhbmQgU3ludGhldGljIEZpYmVycyBhbmQgRmlsYW1lbnRzIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjUyMSNSZXNpbiBhbmQgU3ludGhldGljIFJ1YmJlciBNYW51ZmFjdHVyaW5nIzMyNTIKLW5haWNzIzMyNTIxMSNQbGFzdGljcyBNYXRlcmlhbCBhbmQgUmVzaW4gTWFudWZhY3R1cmluZyMzMjUyMQotbmFpY3MjMzI1MjEyI1N5bnRoZXRpYyBSdWJiZXIgTWFudWZhY3R1cmluZyMzMjUyMQotbmFpY3MjMzI1MjIjQXJ0aWZpY2lhbCBhbmQgU3ludGhldGljIEZpYmVycyBhbmQgRmlsYW1lbnRzIE1hbnVmYWN0dXJpbmcjMzI1MgotbmFpY3MjMzI1MjIxI0NlbGx1bG9zaWMgT3JnYW5pYyBGaWJlciBNYW51ZmFjdHVyaW5nIzMyNTIyCi1uYWljcyMzMjUyMjIjTm9uY2VsbHVsb3NpYyBPcmdhbmljIEZpYmVyIE1hbnVmYWN0dXJpbmcjMzI1MjIKLW5haWNzIzMyNTMjUGVzdGljaWRlLCBGZXJ0aWxpemVyLCBhbmQgT3RoZXIgQWdyaWN1bHR1cmFsIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjUzMSNGZXJ0aWxpemVyIE1hbnVmYWN0dXJpbmcjMzI1MwotbmFpY3MjMzI1MzExI05pdHJvZ2Vub3VzIEZlcnRpbGl6ZXIgTWFudWZhY3R1cmluZyMzMjUzMQotbmFpY3MjMzI1MzEyI1Bob3NwaGF0aWMgRmVydGlsaXplciBNYW51ZmFjdHVyaW5nIzMyNTMxCi1uYWljcyMzMjUzMTQjRmVydGlsaXplciAoTWl4aW5nIE9ubHkpIE1hbnVmYWN0dXJpbmcjMzI1MzEKLW5haWNzIzMyNTMyI1Blc3RpY2lkZSBhbmQgT3RoZXIgQWdyaWN1bHR1cmFsIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MwotbmFpY3MjMzI1NCNQaGFybWFjZXV0aWNhbCBhbmQgTWVkaWNpbmUgTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTQxI1BoYXJtYWNldXRpY2FsIGFuZCBNZWRpY2luZSBNYW51ZmFjdHVyaW5nIzMyNTQKLW5haWNzIzMyNTQxMSNNZWRpY2luYWwgYW5kIEJvdGFuaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTQxCi1uYWljcyMzMjU0MTIjUGhhcm1hY2V1dGljYWwgUHJlcGFyYXRpb24gTWFudWZhY3R1cmluZyMzMjU0MQotbmFpY3MjMzI1NDEzI0luLVZpdHJvIERpYWdub3N0aWMgU3Vic3RhbmNlIE1hbnVmYWN0dXJpbmcjMzI1NDEKLW5haWNzIzMyNTQxNCNCaW9sb2dpY2FsIFByb2R1Y3QgKGV4Y2VwdCBEaWFnbm9zdGljKSBNYW51ZmFjdHVyaW5nIzMyNTQxCi1uYWljcyMzMjU1I1BhaW50LCBDb2F0aW5nLCBhbmQgQWRoZXNpdmUgTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTUxI1BhaW50IGFuZCBDb2F0aW5nIE1hbnVmYWN0dXJpbmcjMzI1NQotbmFpY3MjMzI1NTIjQWRoZXNpdmUgTWFudWZhY3R1cmluZyMzMjU1Ci1uYWljcyMzMjU2I1NvYXAsIENsZWFuaW5nIENvbXBvdW5kLCBhbmQgVG9pbGV0IFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjU2MSNTb2FwIGFuZCBDbGVhbmluZyBDb21wb3VuZCBNYW51ZmFjdHVyaW5nIzMyNTYKLW5haWNzIzMyNTYxMSNTb2FwIGFuZCBPdGhlciBEZXRlcmdlbnQgTWFudWZhY3R1cmluZyMzMjU2MQotbmFpY3MjMzI1NjEyI1BvbGlzaCBhbmQgT3RoZXIgU2FuaXRhdGlvbiBHb29kIE1hbnVmYWN0dXJpbmcjMzI1NjEKLW5haWNzIzMyNTYxMyNTdXJmYWNlIEFjdGl2ZSBBZ2VudCBNYW51ZmFjdHVyaW5nIzMyNTYxCi1uYWljcyMzMjU2MiNUb2lsZXQgUHJlcGFyYXRpb24gTWFudWZhY3R1cmluZyMzMjU2Ci1uYWljcyMzMjU5I090aGVyIENoZW1pY2FsIFByb2R1Y3QgYW5kIFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjU5MSNQcmludGluZyBJbmsgTWFudWZhY3R1cmluZyMzMjU5Ci1uYWljcyMzMjU5MiNFeHBsb3NpdmVzIE1hbnVmYWN0dXJpbmcjMzI1OQotbmFpY3MjMzI1OTkjQWxsIE90aGVyIENoZW1pY2FsIFByb2R1Y3QgYW5kIFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1OQotbmFpY3MjMzI1OTkxI0N1c3RvbSBDb21wb3VuZGluZyBvZiBQdXJjaGFzZWQgUmVzaW5zIzMyNTk5Ci1uYWljcyMzMjU5OTIjUGhvdG9ncmFwaGljIEZpbG0sIFBhcGVyLCBQbGF0ZSwgYW5kIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1OTkKLW5haWNzIzMyNTk5OCNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBDaGVtaWNhbCBQcm9kdWN0IGFuZCBQcmVwYXJhdGlvbiBNYW51ZmFjdHVyaW5nIzMyNTk5Ci1uYWljcyMzMjYjUGxhc3RpY3MgYW5kIFJ1YmJlciBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjYxI1BsYXN0aWNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYKLW5haWNzIzMyNjExI1Vuc3VwcG9ydGVkIFBsYXN0aWNzIEZpbG0sIFNoZWV0LCBhbmQgQmFnIE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTExI1Vuc3VwcG9ydGVkIFBsYXN0aWNzIEJhZyBNYW51ZmFjdHVyaW5nIzMyNjExCi1uYWljcyMzMjYxMTIjVW5zdXBwb3J0ZWQgUGxhc3RpY3MgUGFja2FnaW5nIEZpbG0gYW5kIFNoZWV0IE1hbnVmYWN0dXJpbmcjMzI2MTEKLW5haWNzIzMyNjExMyNVbnN1cHBvcnRlZCBQbGFzdGljcyBGaWxtIGFuZCBTaGVldCAoZXhjZXB0IFBhY2thZ2luZykgTWFudWZhY3R1cmluZyMzMjYxMQotbmFpY3MjMzI2MTIjUGxhc3RpY3MgUGlwZSwgUGlwZSBGaXR0aW5nLCBhbmQgVW5zdXBwb3J0ZWQgUHJvZmlsZSBTaGFwZSBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjEyMSNVbnN1cHBvcnRlZCBQbGFzdGljcyBQcm9maWxlIFNoYXBlIE1hbnVmYWN0dXJpbmcjMzI2MTIKLW5haWNzIzMyNjEyMiNQbGFzdGljcyBQaXBlIGFuZCBQaXBlIEZpdHRpbmcgTWFudWZhY3R1cmluZyMzMjYxMgotbmFpY3MjMzI2MTMjTGFtaW5hdGVkIFBsYXN0aWNzIFBsYXRlLCBTaGVldCwgYW5kIFNoYXBlIE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTQjUG9seXN0eXJlbmUgRm9hbSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTUjVXJldGhhbmUgYW5kIE90aGVyIEZvYW0gUHJvZHVjdCAoZXhjZXB0IFBvbHlzdHlyZW5lKSBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjE2I1BsYXN0aWNzIEJvdHRsZSBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjE5I090aGVyIFBsYXN0aWNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYxCi1uYWljcyMzMjYxOTEjUGxhc3RpY3MgUGx1bWJpbmcgRml4dHVyZSBNYW51ZmFjdHVyaW5nIzMyNjE5Ci1uYWljcyMzMjYxOTIjUmVzaWxpZW50IEZsb29yIENvdmVyaW5nIE1hbnVmYWN0dXJpbmcjMzI2MTkKLW5haWNzIzMyNjE5OSNBbGwgT3RoZXIgUGxhc3RpY3MgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNjE5Ci1uYWljcyMzMjYyI1J1YmJlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2Ci1uYWljcyMzMjYyMSNUaXJlIE1hbnVmYWN0dXJpbmcjMzI2MgotbmFpY3MjMzI2MjExI1RpcmUgTWFudWZhY3R1cmluZyAoZXhjZXB0IFJldHJlYWRpbmcpIzMyNjIxCi1uYWljcyMzMjYyMTIjVGlyZSBSZXRyZWFkaW5nIzMyNjIxCi1uYWljcyMzMjYyMiNSdWJiZXIgYW5kIFBsYXN0aWNzIEhvc2VzIGFuZCBCZWx0aW5nIE1hbnVmYWN0dXJpbmcjMzI2MgotbmFpY3MjMzI2MjkjT3RoZXIgUnViYmVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYyCi1uYWljcyMzMjYyOTEjUnViYmVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyBmb3IgTWVjaGFuaWNhbCBVc2UjMzI2MjkKLW5haWNzIzMyNjI5OSNBbGwgT3RoZXIgUnViYmVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYyOQotbmFpY3MjMzI3I05vbm1ldGFsbGljIE1pbmVyYWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjcxI0NsYXkgUHJvZHVjdCBhbmQgUmVmcmFjdG9yeSBNYW51ZmFjdHVyaW5nIzMyNwotbmFpY3MjMzI3MTEjUG90dGVyeSwgQ2VyYW1pY3MsIGFuZCBQbHVtYmluZyBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzI3MQotbmFpY3MjMzI3MTExI1ZpdHJlb3VzIENoaW5hIFBsdW1iaW5nIEZpeHR1cmUgYW5kIENoaW5hIGFuZCBFYXJ0aGVud2FyZSBCYXRocm9vbSBBY2Nlc3NvcmllcyBNYW51ZmFjdHVyaW5nIzMyNzExCi1uYWljcyMzMjcxMTIjVml0cmVvdXMgQ2hpbmEsIEZpbmUgRWFydGhlbndhcmUsIGFuZCBPdGhlciBQb3R0ZXJ5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcxMQotbmFpY3MjMzI3MTEzI1BvcmNlbGFpbiBFbGVjdHJpY2FsIFN1cHBseSBNYW51ZmFjdHVyaW5nIzMyNzExCi1uYWljcyMzMjcxMiNDbGF5IEJ1aWxkaW5nIE1hdGVyaWFsIGFuZCBSZWZyYWN0b3JpZXMgTWFudWZhY3R1cmluZyMzMjcxCi1uYWljcyMzMjcxMjEjQnJpY2sgYW5kIFN0cnVjdHVyYWwgQ2xheSBUaWxlIE1hbnVmYWN0dXJpbmcjMzI3MTIKLW5haWNzIzMyNzEyMiNDZXJhbWljIFdhbGwgYW5kIEZsb29yIFRpbGUgTWFudWZhY3R1cmluZyMzMjcxMgotbmFpY3MjMzI3MTIzI090aGVyIFN0cnVjdHVyYWwgQ2xheSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3MTIKLW5haWNzIzMyNzEyNCNDbGF5IFJlZnJhY3RvcnkgTWFudWZhY3R1cmluZyMzMjcxMgotbmFpY3MjMzI3MTI1I05vbmNsYXkgUmVmcmFjdG9yeSBNYW51ZmFjdHVyaW5nIzMyNzEyCi1uYWljcyMzMjcyI0dsYXNzIGFuZCBHbGFzcyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3Ci1uYWljcyMzMjcyMSNHbGFzcyBhbmQgR2xhc3MgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzIKLW5haWNzIzMyNzIxMSNGbGF0IEdsYXNzIE1hbnVmYWN0dXJpbmcjMzI3MjEKLW5haWNzIzMyNzIxMiNPdGhlciBQcmVzc2VkIGFuZCBCbG93biBHbGFzcyBhbmQgR2xhc3N3YXJlIE1hbnVmYWN0dXJpbmcjMzI3MjEKLW5haWNzIzMyNzIxMyNHbGFzcyBDb250YWluZXIgTWFudWZhY3R1cmluZyMzMjcyMQotbmFpY3MjMzI3MjE1I0dsYXNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyBNYWRlIG9mIFB1cmNoYXNlZCBHbGFzcyMzMjcyMQotbmFpY3MjMzI3MyNDZW1lbnQgYW5kIENvbmNyZXRlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcKLW5haWNzIzMyNzMxI0NlbWVudCBNYW51ZmFjdHVyaW5nIzMyNzMKLW5haWNzIzMyNzMyI1JlYWR5LU1peCBDb25jcmV0ZSBNYW51ZmFjdHVyaW5nIzMyNzMKLW5haWNzIzMyNzMzI0NvbmNyZXRlIFBpcGUsIEJyaWNrLCBhbmQgQmxvY2sgTWFudWZhY3R1cmluZyMzMjczCi1uYWljcyMzMjczMzEjQ29uY3JldGUgQmxvY2sgYW5kIEJyaWNrIE1hbnVmYWN0dXJpbmcjMzI3MzMKLW5haWNzIzMyNzMzMiNDb25jcmV0ZSBQaXBlIE1hbnVmYWN0dXJpbmcjMzI3MzMKLW5haWNzIzMyNzM5I090aGVyIENvbmNyZXRlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjczCi1uYWljcyMzMjc0I0xpbWUgYW5kIEd5cHN1bSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3Ci1uYWljcyMzMjc0MSNMaW1lIE1hbnVmYWN0dXJpbmcjMzI3NAotbmFpY3MjMzI3NDIjR3lwc3VtIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjc0Ci1uYWljcyMzMjc5I090aGVyIE5vbm1ldGFsbGljIE1pbmVyYWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNwotbmFpY3MjMzI3OTEjQWJyYXNpdmUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzkKLW5haWNzIzMyNzk5I0FsbCBPdGhlciBOb25tZXRhbGxpYyBNaW5lcmFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjc5Ci1uYWljcyMzMjc5OTEjQ3V0IFN0b25lIGFuZCBTdG9uZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3OTkKLW5haWNzIzMyNzk5MiNHcm91bmQgb3IgVHJlYXRlZCBNaW5lcmFsIGFuZCBFYXJ0aCBNYW51ZmFjdHVyaW5nIzMyNzk5Ci1uYWljcyMzMjc5OTMjTWluZXJhbCBXb29sIE1hbnVmYWN0dXJpbmcjMzI3OTkKLW5haWNzIzMyNzk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBOb25tZXRhbGxpYyBNaW5lcmFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjc5OQotbmFpY3MjMzMjTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzMxI1ByaW1hcnkgTWV0YWwgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzMxMSNJcm9uIGFuZCBTdGVlbCBNaWxscyBhbmQgRmVycm9hbGxveSBNYW51ZmFjdHVyaW5nIzMzMQotbmFpY3MjMzMxMTEjSXJvbiBhbmQgU3RlZWwgTWlsbHMgYW5kIEZlcnJvYWxsb3kgTWFudWZhY3R1cmluZyMzMzExCi1uYWljcyMzMzExMTEjSXJvbiBhbmQgU3RlZWwgTWlsbHMjMzMxMTEKLW5haWNzIzMzMTExMiNFbGVjdHJvbWV0YWxsdXJnaWNhbCBGZXJyb2FsbG95IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzExMQotbmFpY3MjMzMxMiNTdGVlbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcgZnJvbSBQdXJjaGFzZWQgU3RlZWwjMzMxCi1uYWljcyMzMzEyMSNJcm9uIGFuZCBTdGVlbCBQaXBlIGFuZCBUdWJlIE1hbnVmYWN0dXJpbmcgZnJvbSBQdXJjaGFzZWQgU3RlZWwjMzMxMgotbmFpY3MjMzMxMjIjUm9sbGluZyBhbmQgRHJhd2luZyBvZiBQdXJjaGFzZWQgU3RlZWwjMzMxMgotbmFpY3MjMzMxMjIxI1JvbGxlZCBTdGVlbCBTaGFwZSBNYW51ZmFjdHVyaW5nIzMzMTIyCi1uYWljcyMzMzEyMjIjU3RlZWwgV2lyZSBEcmF3aW5nIzMzMTIyCi1uYWljcyMzMzEzI0FsdW1pbmEgYW5kIEFsdW1pbnVtIFByb2R1Y3Rpb24gYW5kIFByb2Nlc3NpbmcjMzMxCi1uYWljcyMzMzEzMSNBbHVtaW5hIGFuZCBBbHVtaW51bSBQcm9kdWN0aW9uIGFuZCBQcm9jZXNzaW5nIzMzMTMKLW5haWNzIzMzMTMxMSNBbHVtaW5hIFJlZmluaW5nIzMzMTMxCi1uYWljcyMzMzEzMTIjUHJpbWFyeSBBbHVtaW51bSBQcm9kdWN0aW9uIzMzMTMxCi1uYWljcyMzMzEzMTQjU2Vjb25kYXJ5IFNtZWx0aW5nIGFuZCBBbGxveWluZyBvZiBBbHVtaW51bSMzMzEzMQotbmFpY3MjMzMxMzE1I0FsdW1pbnVtIFNoZWV0LCBQbGF0ZSwgYW5kIEZvaWwgTWFudWZhY3R1cmluZyMzMzEzMQotbmFpY3MjMzMxMzE2I0FsdW1pbnVtIEV4dHJ1ZGVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzEzMQotbmFpY3MjMzMxMzE5I090aGVyIEFsdW1pbnVtIFJvbGxpbmcgYW5kIERyYXdpbmcjMzMxMzEKLW5haWNzIzMzMTQjTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IEFsdW1pbnVtKSBQcm9kdWN0aW9uIGFuZCBQcm9jZXNzaW5nIzMzMQotbmFpY3MjMzMxNDEjTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IEFsdW1pbnVtKSBTbWVsdGluZyBhbmQgUmVmaW5pbmcjMzMxNAotbmFpY3MjMzMxNDExI1ByaW1hcnkgU21lbHRpbmcgYW5kIFJlZmluaW5nIG9mIENvcHBlciMzMzE0MQotbmFpY3MjMzMxNDE5I1ByaW1hcnkgU21lbHRpbmcgYW5kIFJlZmluaW5nIG9mIE5vbmZlcnJvdXMgTWV0YWwgKGV4Y2VwdCBDb3BwZXIgYW5kIEFsdW1pbnVtKSMzMzE0MQotbmFpY3MjMzMxNDIjQ29wcGVyIFJvbGxpbmcsIERyYXdpbmcsIEV4dHJ1ZGluZywgYW5kIEFsbG95aW5nIzMzMTQKLW5haWNzIzMzMTQyMSNDb3BwZXIgUm9sbGluZywgRHJhd2luZywgYW5kIEV4dHJ1ZGluZyMzMzE0MgotbmFpY3MjMzMxNDIyI0NvcHBlciBXaXJlIChleGNlcHQgTWVjaGFuaWNhbCkgRHJhd2luZyMzMzE0MgotbmFpY3MjMzMxNDIzI1NlY29uZGFyeSBTbWVsdGluZywgUmVmaW5pbmcsIGFuZCBBbGxveWluZyBvZiBDb3BwZXIjMzMxNDIKLW5haWNzIzMzMTQ5I05vbmZlcnJvdXMgTWV0YWwgKGV4Y2VwdCBDb3BwZXIgYW5kIEFsdW1pbnVtKSBSb2xsaW5nLCBEcmF3aW5nLCBFeHRydWRpbmcsIGFuZCBBbGxveWluZyMzMzE0Ci1uYWljcyMzMzE0OTEjTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IENvcHBlciBhbmQgQWx1bWludW0pIFJvbGxpbmcsIERyYXdpbmcsIGFuZCBFeHRydWRpbmcjMzMxNDkKLW5haWNzIzMzMTQ5MiNTZWNvbmRhcnkgU21lbHRpbmcsIFJlZmluaW5nLCBhbmQgQWxsb3lpbmcgb2YgTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IENvcHBlciBhbmQgQWx1bWludW0pIzMzMTQ5Ci1uYWljcyMzMzE1I0ZvdW5kcmllcyMzMzEKLW5haWNzIzMzMTUxI0ZlcnJvdXMgTWV0YWwgRm91bmRyaWVzIzMzMTUKLW5haWNzIzMzMTUxMSNJcm9uIEZvdW5kcmllcyMzMzE1MQotbmFpY3MjMzMxNTEyI1N0ZWVsIEludmVzdG1lbnQgRm91bmRyaWVzIzMzMTUxCi1uYWljcyMzMzE1MTMjU3RlZWwgRm91bmRyaWVzIChleGNlcHQgSW52ZXN0bWVudCkjMzMxNTEKLW5haWNzIzMzMTUyI05vbmZlcnJvdXMgTWV0YWwgRm91bmRyaWVzIzMzMTUKLW5haWNzIzMzMTUyMSNBbHVtaW51bSBEaWUtQ2FzdGluZyBGb3VuZHJpZXMjMzMxNTIKLW5haWNzIzMzMTUyMiNOb25mZXJyb3VzIChleGNlcHQgQWx1bWludW0pIERpZS1DYXN0aW5nIEZvdW5kcmllcyMzMzE1MgotbmFpY3MjMzMxNTI0I0FsdW1pbnVtIEZvdW5kcmllcyAoZXhjZXB0IERpZS1DYXN0aW5nKSMzMzE1MgotbmFpY3MjMzMxNTI1I0NvcHBlciBGb3VuZHJpZXMgKGV4Y2VwdCBEaWUtQ2FzdGluZykjMzMxNTIKLW5haWNzIzMzMTUyOCNPdGhlciBOb25mZXJyb3VzIEZvdW5kcmllcyAoZXhjZXB0IERpZS1DYXN0aW5nKSMzMzE1MgotbmFpY3MjMzMyI0ZhYnJpY2F0ZWQgTWV0YWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzIxI0ZvcmdpbmcgYW5kIFN0YW1waW5nIzMzMgotbmFpY3MjMzMyMTEjRm9yZ2luZyBhbmQgU3RhbXBpbmcjMzMyMQotbmFpY3MjMzMyMTExI0lyb24gYW5kIFN0ZWVsIEZvcmdpbmcjMzMyMTEKLW5haWNzIzMzMjExMiNOb25mZXJyb3VzIEZvcmdpbmcjMzMyMTEKLW5haWNzIzMzMjExNCNDdXN0b20gUm9sbCBGb3JtaW5nIzMzMjExCi1uYWljcyMzMzIxMTUjQ3Jvd24gYW5kIENsb3N1cmUgTWFudWZhY3R1cmluZyMzMzIxMQotbmFpY3MjMzMyMTE2I01ldGFsIFN0YW1waW5nIzMzMjExCi1uYWljcyMzMzIxMTcjUG93ZGVyIE1ldGFsbHVyZ3kgUGFydCBNYW51ZmFjdHVyaW5nIzMzMjExCi1uYWljcyMzMzIyI0N1dGxlcnkgYW5kIEhhbmR0b29sIE1hbnVmYWN0dXJpbmcjMzMyCi1uYWljcyMzMzIyMSNDdXRsZXJ5IGFuZCBIYW5kdG9vbCBNYW51ZmFjdHVyaW5nIzMzMjIKLW5haWNzIzMzMjIxMSNDdXRsZXJ5IGFuZCBGbGF0d2FyZSAoZXhjZXB0IFByZWNpb3VzKSBNYW51ZmFjdHVyaW5nIzMzMjIxCi1uYWljcyMzMzIyMTIjSGFuZCBhbmQgRWRnZSBUb29sIE1hbnVmYWN0dXJpbmcjMzMyMjEKLW5haWNzIzMzMjIxMyNTYXcgQmxhZGUgYW5kIEhhbmRzYXcgTWFudWZhY3R1cmluZyMzMzIyMQotbmFpY3MjMzMyMjE0I0tpdGNoZW4gVXRlbnNpbCwgUG90LCBhbmQgUGFuIE1hbnVmYWN0dXJpbmcjMzMyMjEKLW5haWNzIzMzMjMjQXJjaGl0ZWN0dXJhbCBhbmQgU3RydWN0dXJhbCBNZXRhbHMgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjMxI1BsYXRlIFdvcmsgYW5kIEZhYnJpY2F0ZWQgU3RydWN0dXJhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyMwotbmFpY3MjMzMyMzExI1ByZWZhYnJpY2F0ZWQgTWV0YWwgQnVpbGRpbmcgYW5kIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzMjMxCi1uYWljcyMzMzIzMTIjRmFicmljYXRlZCBTdHJ1Y3R1cmFsIE1ldGFsIE1hbnVmYWN0dXJpbmcjMzMyMzEKLW5haWNzIzMzMjMxMyNQbGF0ZSBXb3JrIE1hbnVmYWN0dXJpbmcjMzMyMzEKLW5haWNzIzMzMjMyI09ybmFtZW50YWwgYW5kIEFyY2hpdGVjdHVyYWwgTWV0YWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMzIzCi1uYWljcyMzMzIzMjEjTWV0YWwgV2luZG93IGFuZCBEb29yIE1hbnVmYWN0dXJpbmcjMzMyMzIKLW5haWNzIzMzMjMyMiNTaGVldCBNZXRhbCBXb3JrIE1hbnVmYWN0dXJpbmcjMzMyMzIKLW5haWNzIzMzMjMyMyNPcm5hbWVudGFsIGFuZCBBcmNoaXRlY3R1cmFsIE1ldGFsIFdvcmsgTWFudWZhY3R1cmluZyMzMzIzMgotbmFpY3MjMzMyNCNCb2lsZXIsIFRhbmssIGFuZCBTaGlwcGluZyBDb250YWluZXIgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjQxI1Bvd2VyIEJvaWxlciBhbmQgSGVhdCBFeGNoYW5nZXIgTWFudWZhY3R1cmluZyMzMzI0Ci1uYWljcyMzMzI0MiNNZXRhbCBUYW5rIChIZWF2eSBHYXVnZSkgTWFudWZhY3R1cmluZyMzMzI0Ci1uYWljcyMzMzI0MyNNZXRhbCBDYW4sIEJveCwgYW5kIE90aGVyIE1ldGFsIENvbnRhaW5lciAoTGlnaHQgR2F1Z2UpIE1hbnVmYWN0dXJpbmcjMzMyNAotbmFpY3MjMzMyNDMxI01ldGFsIENhbiBNYW51ZmFjdHVyaW5nIzMzMjQzCi1uYWljcyMzMzI0MzkjT3RoZXIgTWV0YWwgQ29udGFpbmVyIE1hbnVmYWN0dXJpbmcjMzMyNDMKLW5haWNzIzMzMjUjSGFyZHdhcmUgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjUxI0hhcmR3YXJlIE1hbnVmYWN0dXJpbmcjMzMyNQotbmFpY3MjMzMyNiNTcHJpbmcgYW5kIFdpcmUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyNjEjU3ByaW5nIGFuZCBXaXJlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzI2Ci1uYWljcyMzMzI2MTEjU3ByaW5nIChIZWF2eSBHYXVnZSkgTWFudWZhY3R1cmluZyMzMzI2MQotbmFpY3MjMzMyNjEyI1NwcmluZyAoTGlnaHQgR2F1Z2UpIE1hbnVmYWN0dXJpbmcjMzMyNjEKLW5haWNzIzMzMjYxOCNPdGhlciBGYWJyaWNhdGVkIFdpcmUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjYxCi1uYWljcyMzMzI3I01hY2hpbmUgU2hvcHM7IFR1cm5lZCBQcm9kdWN0OyBhbmQgU2NyZXcsIE51dCwgYW5kIEJvbHQgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjcxI01hY2hpbmUgU2hvcHMjMzMyNwotbmFpY3MjMzMyNzIjVHVybmVkIFByb2R1Y3QgYW5kIFNjcmV3LCBOdXQsIGFuZCBCb2x0IE1hbnVmYWN0dXJpbmcjMzMyNwotbmFpY3MjMzMyNzIxI1ByZWNpc2lvbiBUdXJuZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjcyCi1uYWljcyMzMzI3MjIjQm9sdCwgTnV0LCBTY3JldywgUml2ZXQsIGFuZCBXYXNoZXIgTWFudWZhY3R1cmluZyMzMzI3MgotbmFpY3MjMzMyOCNDb2F0aW5nLCBFbmdyYXZpbmcsIEhlYXQgVHJlYXRpbmcsIGFuZCBBbGxpZWQgQWN0aXZpdGllcyMzMzIKLW5haWNzIzMzMjgxI0NvYXRpbmcsIEVuZ3JhdmluZywgSGVhdCBUcmVhdGluZywgYW5kIEFsbGllZCBBY3Rpdml0aWVzIzMzMjgKLW5haWNzIzMzMjgxMSNNZXRhbCBIZWF0IFRyZWF0aW5nIzMzMjgxCi1uYWljcyMzMzI4MTIjTWV0YWwgQ29hdGluZywgRW5ncmF2aW5nIChleGNlcHQgSmV3ZWxyeSBhbmQgU2lsdmVyd2FyZSksIGFuZCBBbGxpZWQgU2VydmljZXMgdG8gTWFudWZhY3R1cmVycyMzMzI4MQotbmFpY3MjMzMyODEzI0VsZWN0cm9wbGF0aW5nLCBQbGF0aW5nLCBQb2xpc2hpbmcsIEFub2RpemluZywgYW5kIENvbG9yaW5nIzMzMjgxCi1uYWljcyMzMzI5I090aGVyIEZhYnJpY2F0ZWQgTWV0YWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyOTEjTWV0YWwgVmFsdmUgTWFudWZhY3R1cmluZyMzMzI5Ci1uYWljcyMzMzI5MTEjSW5kdXN0cmlhbCBWYWx2ZSBNYW51ZmFjdHVyaW5nIzMzMjkxCi1uYWljcyMzMzI5MTIjRmx1aWQgUG93ZXIgVmFsdmUgYW5kIEhvc2UgRml0dGluZyBNYW51ZmFjdHVyaW5nIzMzMjkxCi1uYWljcyMzMzI5MTMjUGx1bWJpbmcgRml4dHVyZSBGaXR0aW5nIGFuZCBUcmltIE1hbnVmYWN0dXJpbmcjMzMyOTEKLW5haWNzIzMzMjkxOSNPdGhlciBNZXRhbCBWYWx2ZSBhbmQgUGlwZSBGaXR0aW5nIE1hbnVmYWN0dXJpbmcjMzMyOTEKLW5haWNzIzMzMjk5I0FsbCBPdGhlciBGYWJyaWNhdGVkIE1ldGFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzI5Ci1uYWljcyMzMzI5OTEjQmFsbCBhbmQgUm9sbGVyIEJlYXJpbmcgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTkyI1NtYWxsIEFybXMgQW1tdW5pdGlvbiBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTMjQW1tdW5pdGlvbiAoZXhjZXB0IFNtYWxsIEFybXMpIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5NCNTbWFsbCBBcm1zIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5NSNPdGhlciBPcmRuYW5jZSBhbmQgQWNjZXNzb3JpZXMgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk2I0ZhYnJpY2F0ZWQgUGlwZSBhbmQgUGlwZSBGaXR0aW5nIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5NyNJbmR1c3RyaWFsIFBhdHRlcm4gTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk4I0VuYW1lbGVkIElyb24gYW5kIE1ldGFsIFNhbml0YXJ5IFdhcmUgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIEZhYnJpY2F0ZWQgTWV0YWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzMjTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzMzEjQWdyaWN1bHR1cmUsIENvbnN0cnVjdGlvbiwgYW5kIE1pbmluZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzExI0FncmljdWx0dXJhbCBJbXBsZW1lbnQgTWFudWZhY3R1cmluZyMzMzMxCi1uYWljcyMzMzMxMTEjRmFybSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzExCi1uYWljcyMzMzMxMTIjTGF3biBhbmQgR2FyZGVuIFRyYWN0b3IgYW5kIEhvbWUgTGF3biBhbmQgR2FyZGVuIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzExCi1uYWljcyMzMzMxMiNDb25zdHJ1Y3Rpb24gTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMQotbmFpY3MjMzMzMTMjTWluaW5nIGFuZCBPaWwgYW5kIEdhcyBGaWVsZCBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMxCi1uYWljcyMzMzMxMzEjTWluaW5nIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzMTMKLW5haWNzIzMzMzEzMiNPaWwgYW5kIEdhcyBGaWVsZCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzEzCi1uYWljcyMzMzMyI0luZHVzdHJpYWwgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzMyMSNTYXdtaWxsIGFuZCBXb29kd29ya2luZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyCi1uYWljcyMzMzMyMiNQbGFzdGljcyBhbmQgUnViYmVyIEluZHVzdHJ5IE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzIKLW5haWNzIzMzMzI5I090aGVyIEluZHVzdHJpYWwgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMgotbmFpY3MjMzMzMjkxI1BhcGVyIEluZHVzdHJ5IE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzI5Ci1uYWljcyMzMzMyOTIjVGV4dGlsZSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyOQotbmFpY3MjMzMzMjkzI1ByaW50aW5nIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzI5NCNGb29kIFByb2R1Y3QgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzI5NSNTZW1pY29uZHVjdG9yIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzI5Ci1uYWljcyMzMzMyOTgjQWxsIE90aGVyIEluZHVzdHJpYWwgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzMjQ29tbWVyY2lhbCBhbmQgU2VydmljZSBJbmR1c3RyeSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzMxI0NvbW1lcmNpYWwgYW5kIFNlcnZpY2UgSW5kdXN0cnkgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMwotbmFpY3MjMzMzMzExI0F1dG9tYXRpYyBWZW5kaW5nIE1hY2hpbmUgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzMzEyI0NvbW1lcmNpYWwgTGF1bmRyeSwgRHJ5Y2xlYW5pbmcsIGFuZCBQcmVzc2luZyBNYWNoaW5lIE1hbnVmYWN0dXJpbmcjMzMzMzEKLW5haWNzIzMzMzMxMyNPZmZpY2UgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMzEKLW5haWNzIzMzMzMxNCNPcHRpY2FsIEluc3RydW1lbnQgYW5kIExlbnMgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzMzE1I1Bob3RvZ3JhcGhpYyBhbmQgUGhvdG9jb3B5aW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzMxCi1uYWljcyMzMzMzMTkjT3RoZXIgQ29tbWVyY2lhbCBhbmQgU2VydmljZSBJbmR1c3RyeSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzNCNWZW50aWxhdGlvbiwgSGVhdGluZywgQWlyLUNvbmRpdGlvbmluZywgYW5kIENvbW1lcmNpYWwgUmVmcmlnZXJhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzQxI1ZlbnRpbGF0aW9uLCBIZWF0aW5nLCBBaXItQ29uZGl0aW9uaW5nLCBhbmQgQ29tbWVyY2lhbCBSZWZyaWdlcmF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzQKLW5haWNzIzMzMzQxMSNBaXIgUHVyaWZpY2F0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzQxCi1uYWljcyMzMzM0MTIjSW5kdXN0cmlhbCBhbmQgQ29tbWVyY2lhbCBGYW4gYW5kIEJsb3dlciBNYW51ZmFjdHVyaW5nIzMzMzQxCi1uYWljcyMzMzM0MTQjSGVhdGluZyBFcXVpcG1lbnQgKGV4Y2VwdCBXYXJtIEFpciBGdXJuYWNlcykgTWFudWZhY3R1cmluZyMzMzM0MQotbmFpY3MjMzMzNDE1I0Fpci1Db25kaXRpb25pbmcgYW5kIFdhcm0gQWlyIEhlYXRpbmcgRXF1aXBtZW50IGFuZCBDb21tZXJjaWFsIGFuZCBJbmR1c3RyaWFsIFJlZnJpZ2VyYXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzNDEKLW5haWNzIzMzMzUjTWV0YWx3b3JraW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMwotbmFpY3MjMzMzNTEjTWV0YWx3b3JraW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzUKLW5haWNzIzMzMzUxMSNJbmR1c3RyaWFsIE1vbGQgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTEyI01hY2hpbmUgVG9vbCAoTWV0YWwgQ3V0dGluZyBUeXBlcykgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTEzI01hY2hpbmUgVG9vbCAoTWV0YWwgRm9ybWluZyBUeXBlcykgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTE0I1NwZWNpYWwgRGllIGFuZCBUb29sLCBEaWUgU2V0LCBKaWcsIGFuZCBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzMzNTEKLW5haWNzIzMzMzUxNSNDdXR0aW5nIFRvb2wgYW5kIE1hY2hpbmUgVG9vbCBBY2Nlc3NvcnkgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTE2I1JvbGxpbmcgTWlsbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM1MTgjT3RoZXIgTWV0YWx3b3JraW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM2I0VuZ2luZSwgVHVyYmluZSwgYW5kIFBvd2VyIFRyYW5zbWlzc2lvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzYxI0VuZ2luZSwgVHVyYmluZSwgYW5kIFBvd2VyIFRyYW5zbWlzc2lvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM2Ci1uYWljcyMzMzM2MTEjVHVyYmluZSBhbmQgVHVyYmluZSBHZW5lcmF0b3IgU2V0IFVuaXRzIE1hbnVmYWN0dXJpbmcjMzMzNjEKLW5haWNzIzMzMzYxMiNTcGVlZCBDaGFuZ2VyLCBJbmR1c3RyaWFsIEhpZ2gtU3BlZWQgRHJpdmUsIGFuZCBHZWFyIE1hbnVmYWN0dXJpbmcjMzMzNjEKLW5haWNzIzMzMzYxMyNNZWNoYW5pY2FsIFBvd2VyIFRyYW5zbWlzc2lvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM2MQotbmFpY3MjMzMzNjE4I090aGVyIEVuZ2luZSBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM2MQotbmFpY3MjMzMzOSNPdGhlciBHZW5lcmFsIFB1cnBvc2UgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzM5MSNQdW1wIGFuZCBDb21wcmVzc29yIE1hbnVmYWN0dXJpbmcjMzMzOQotbmFpY3MjMzMzOTExI1B1bXAgYW5kIFB1bXBpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzOTEKLW5haWNzIzMzMzkxMiNBaXIgYW5kIEdhcyBDb21wcmVzc29yIE1hbnVmYWN0dXJpbmcjMzMzOTEKLW5haWNzIzMzMzkxMyNNZWFzdXJpbmcgYW5kIERpc3BlbnNpbmcgUHVtcCBNYW51ZmFjdHVyaW5nIzMzMzkxCi1uYWljcyMzMzM5MiNNYXRlcmlhbCBIYW5kbGluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM5Ci1uYWljcyMzMzM5MjEjRWxldmF0b3IgYW5kIE1vdmluZyBTdGFpcndheSBNYW51ZmFjdHVyaW5nIzMzMzkyCi1uYWljcyMzMzM5MjIjQ29udmV5b3IgYW5kIENvbnZleWluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM5MgotbmFpY3MjMzMzOTIzI092ZXJoZWFkIFRyYXZlbGluZyBDcmFuZSwgSG9pc3QsIGFuZCBNb25vcmFpbCBTeXN0ZW0gTWFudWZhY3R1cmluZyMzMzM5MgotbmFpY3MjMzMzOTI0I0luZHVzdHJpYWwgVHJ1Y2ssIFRyYWN0b3IsIFRyYWlsZXIsIGFuZCBTdGFja2VyIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzkyCi1uYWljcyMzMzM5OSNBbGwgT3RoZXIgR2VuZXJhbCBQdXJwb3NlIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzkKLW5haWNzIzMzMzk5MSNQb3dlci1Ecml2ZW4gSGFuZHRvb2wgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTkyI1dlbGRpbmcgYW5kIFNvbGRlcmluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTkzI1BhY2thZ2luZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTk0I0luZHVzdHJpYWwgUHJvY2VzcyBGdXJuYWNlIGFuZCBPdmVuIE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5NSNGbHVpZCBQb3dlciBDeWxpbmRlciBhbmQgQWN0dWF0b3IgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTk2I0ZsdWlkIFBvd2VyIFB1bXAgYW5kIE1vdG9yIE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5NyNTY2FsZSBhbmQgQmFsYW5jZSAoZXhjZXB0IExhYm9yYXRvcnkpIE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBHZW5lcmFsIFB1cnBvc2UgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzNCNDb21wdXRlciBhbmQgRWxlY3Ryb25pYyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzNDEjQ29tcHV0ZXIgYW5kIFBlcmlwaGVyYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0Ci1uYWljcyMzMzQxMSNDb21wdXRlciBhbmQgUGVyaXBoZXJhbCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQxCi1uYWljcyMzMzQxMTEjRWxlY3Ryb25pYyBDb21wdXRlciBNYW51ZmFjdHVyaW5nIzMzNDExCi1uYWljcyMzMzQxMTIjQ29tcHV0ZXIgU3RvcmFnZSBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzQxMQotbmFpY3MjMzM0MTEzI0NvbXB1dGVyIFRlcm1pbmFsIE1hbnVmYWN0dXJpbmcjMzM0MTEKLW5haWNzIzMzNDExOSNPdGhlciBDb21wdXRlciBQZXJpcGhlcmFsIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNDExCi1uYWljcyMzMzQyI0NvbW11bmljYXRpb25zIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNAotbmFpY3MjMzM0MjEjVGVsZXBob25lIEFwcGFyYXR1cyBNYW51ZmFjdHVyaW5nIzMzNDIKLW5haWNzIzMzNDIyI1JhZGlvIGFuZCBUZWxldmlzaW9uIEJyb2FkY2FzdGluZyBhbmQgV2lyZWxlc3MgQ29tbXVuaWNhdGlvbnMgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0MgotbmFpY3MjMzM0MjkjT3RoZXIgQ29tbXVuaWNhdGlvbnMgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0MgotbmFpY3MjMzM0MyNBdWRpbyBhbmQgVmlkZW8gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0Ci1uYWljcyMzMzQzMSNBdWRpbyBhbmQgVmlkZW8gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0MwotbmFpY3MjMzM0NCNTZW1pY29uZHVjdG9yIGFuZCBPdGhlciBFbGVjdHJvbmljIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNAotbmFpY3MjMzM0NDEjU2VtaWNvbmR1Y3RvciBhbmQgT3RoZXIgRWxlY3Ryb25pYyBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzQ0Ci1uYWljcyMzMzQ0MTEjRWxlY3Ryb24gVHViZSBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTIjQmFyZSBQcmludGVkIENpcmN1aXQgQm9hcmQgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDEzI1NlbWljb25kdWN0b3IgYW5kIFJlbGF0ZWQgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxNCNFbGVjdHJvbmljIENhcGFjaXRvciBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTUjRWxlY3Ryb25pYyBSZXNpc3RvciBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTYjRWxlY3Ryb25pYyBDb2lsLCBUcmFuc2Zvcm1lciwgYW5kIE90aGVyIEluZHVjdG9yIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxNyNFbGVjdHJvbmljIENvbm5lY3RvciBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTgjUHJpbnRlZCBDaXJjdWl0IEFzc2VtYmx5IChFbGVjdHJvbmljIEFzc2VtYmx5KSBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTkjT3RoZXIgRWxlY3Ryb25pYyBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NSNOYXZpZ2F0aW9uYWwsIE1lYXN1cmluZywgRWxlY3Ryb21lZGljYWwsIGFuZCBDb250cm9sIEluc3RydW1lbnRzIE1hbnVmYWN0dXJpbmcjMzM0Ci1uYWljcyMzMzQ1MSNOYXZpZ2F0aW9uYWwsIE1lYXN1cmluZywgRWxlY3Ryb21lZGljYWwsIGFuZCBDb250cm9sIEluc3RydW1lbnRzIE1hbnVmYWN0dXJpbmcjMzM0NQotbmFpY3MjMzM0NTEwI0VsZWN0cm9tZWRpY2FsIGFuZCBFbGVjdHJvdGhlcmFwZXV0aWMgQXBwYXJhdHVzIE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDUxMSNTZWFyY2gsIERldGVjdGlvbiwgTmF2aWdhdGlvbiwgR3VpZGFuY2UsIEFlcm9uYXV0aWNhbCwgYW5kIE5hdXRpY2FsIFN5c3RlbSBhbmQgSW5zdHJ1bWVudCBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTIjQXV0b21hdGljIEVudmlyb25tZW50YWwgQ29udHJvbCBNYW51ZmFjdHVyaW5nIGZvciBSZXNpZGVudGlhbCwgQ29tbWVyY2lhbCwgYW5kIEFwcGxpYW5jZSBVc2UjMzM0NTEKLW5haWNzIzMzNDUxMyNJbnN0cnVtZW50cyBhbmQgUmVsYXRlZCBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIGZvciBNZWFzdXJpbmcsIERpc3BsYXlpbmcsIGFuZCBDb250cm9sbGluZyBJbmR1c3RyaWFsIFByb2Nlc3MgVmFyaWFibGVzIzMzNDUxCi1uYWljcyMzMzQ1MTQjVG90YWxpemluZyBGbHVpZCBNZXRlciBhbmQgQ291bnRpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDUxNSNJbnN0cnVtZW50IE1hbnVmYWN0dXJpbmcgZm9yIE1lYXN1cmluZyBhbmQgVGVzdGluZyBFbGVjdHJpY2l0eSBhbmQgRWxlY3RyaWNhbCBTaWduYWxzIzMzNDUxCi1uYWljcyMzMzQ1MTYjQW5hbHl0aWNhbCBMYWJvcmF0b3J5IEluc3RydW1lbnQgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NTE3I0lycmFkaWF0aW9uIEFwcGFyYXR1cyBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTgjV2F0Y2gsIENsb2NrLCBhbmQgUGFydCBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTkjT3RoZXIgTWVhc3VyaW5nIGFuZCBDb250cm9sbGluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NiNNYW51ZmFjdHVyaW5nIGFuZCBSZXByb2R1Y2luZyBNYWduZXRpYyBhbmQgT3B0aWNhbCBNZWRpYSMzMzQKLW5haWNzIzMzNDYxI01hbnVmYWN0dXJpbmcgYW5kIFJlcHJvZHVjaW5nIE1hZ25ldGljIGFuZCBPcHRpY2FsIE1lZGlhIzMzNDYKLW5haWNzIzMzNDYxMSNTb2Z0d2FyZSBSZXByb2R1Y2luZyMzMzQ2MQotbmFpY3MjMzM0NjEyI1ByZXJlY29yZGVkIENvbXBhY3QgRGlzYyAoZXhjZXB0IFNvZnR3YXJlKSwgVGFwZSwgYW5kIFJlY29yZCBSZXByb2R1Y2luZyMzMzQ2MQotbmFpY3MjMzM0NjEzI01hZ25ldGljIGFuZCBPcHRpY2FsIFJlY29yZGluZyBNZWRpYSBNYW51ZmFjdHVyaW5nIzMzNDYxCi1uYWljcyMzMzUjRWxlY3RyaWNhbCBFcXVpcG1lbnQsIEFwcGxpYW5jZSwgYW5kIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzUxI0VsZWN0cmljIExpZ2h0aW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNQotbmFpY3MjMzM1MTEjRWxlY3RyaWMgTGFtcCBCdWxiIGFuZCBQYXJ0IE1hbnVmYWN0dXJpbmcjMzM1MQotbmFpY3MjMzM1MTIjTGlnaHRpbmcgRml4dHVyZSBNYW51ZmFjdHVyaW5nIzMzNTEKLW5haWNzIzMzNTEyMSNSZXNpZGVudGlhbCBFbGVjdHJpYyBMaWdodGluZyBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzM1MTIKLW5haWNzIzMzNTEyMiNDb21tZXJjaWFsLCBJbmR1c3RyaWFsLCBhbmQgSW5zdGl0dXRpb25hbCBFbGVjdHJpYyBMaWdodGluZyBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzM1MTIKLW5haWNzIzMzNTEyOSNPdGhlciBMaWdodGluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzUxMgotbmFpY3MjMzM1MiNIb3VzZWhvbGQgQXBwbGlhbmNlIE1hbnVmYWN0dXJpbmcjMzM1Ci1uYWljcyMzMzUyMSNTbWFsbCBFbGVjdHJpY2FsIEFwcGxpYW5jZSBNYW51ZmFjdHVyaW5nIzMzNTIKLW5haWNzIzMzNTIxMSNFbGVjdHJpYyBIb3VzZXdhcmVzIGFuZCBIb3VzZWhvbGQgRmFuIE1hbnVmYWN0dXJpbmcjMzM1MjEKLW5haWNzIzMzNTIxMiNIb3VzZWhvbGQgVmFjdXVtIENsZWFuZXIgTWFudWZhY3R1cmluZyMzMzUyMQotbmFpY3MjMzM1MjIjTWFqb3IgQXBwbGlhbmNlIE1hbnVmYWN0dXJpbmcjMzM1MgotbmFpY3MjMzM1MjIxI0hvdXNlaG9sZCBDb29raW5nIEFwcGxpYW5jZSBNYW51ZmFjdHVyaW5nIzMzNTIyCi1uYWljcyMzMzUyMjIjSG91c2Vob2xkIFJlZnJpZ2VyYXRvciBhbmQgSG9tZSBGcmVlemVyIE1hbnVmYWN0dXJpbmcjMzM1MjIKLW5haWNzIzMzNTIyNCNIb3VzZWhvbGQgTGF1bmRyeSBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzUyMgotbmFpY3MjMzM1MjI4I090aGVyIE1ham9yIEhvdXNlaG9sZCBBcHBsaWFuY2UgTWFudWZhY3R1cmluZyMzMzUyMgotbmFpY3MjMzM1MyNFbGVjdHJpY2FsIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNQotbmFpY3MjMzM1MzEjRWxlY3RyaWNhbCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzUzCi1uYWljcyMzMzUzMTEjUG93ZXIsIERpc3RyaWJ1dGlvbiwgYW5kIFNwZWNpYWx0eSBUcmFuc2Zvcm1lciBNYW51ZmFjdHVyaW5nIzMzNTMxCi1uYWljcyMzMzUzMTIjTW90b3IgYW5kIEdlbmVyYXRvciBNYW51ZmFjdHVyaW5nIzMzNTMxCi1uYWljcyMzMzUzMTMjU3dpdGNoZ2VhciBhbmQgU3dpdGNoYm9hcmQgQXBwYXJhdHVzIE1hbnVmYWN0dXJpbmcjMzM1MzEKLW5haWNzIzMzNTMxNCNSZWxheSBhbmQgSW5kdXN0cmlhbCBDb250cm9sIE1hbnVmYWN0dXJpbmcjMzM1MzEKLW5haWNzIzMzNTkjT3RoZXIgRWxlY3RyaWNhbCBFcXVpcG1lbnQgYW5kIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNQotbmFpY3MjMzM1OTEjQmF0dGVyeSBNYW51ZmFjdHVyaW5nIzMzNTkKLW5haWNzIzMzNTkxMSNTdG9yYWdlIEJhdHRlcnkgTWFudWZhY3R1cmluZyMzMzU5MQotbmFpY3MjMzM1OTEyI1ByaW1hcnkgQmF0dGVyeSBNYW51ZmFjdHVyaW5nIzMzNTkxCi1uYWljcyMzMzU5MiNDb21tdW5pY2F0aW9uIGFuZCBFbmVyZ3kgV2lyZSBhbmQgQ2FibGUgTWFudWZhY3R1cmluZyMzMzU5Ci1uYWljcyMzMzU5MjEjRmliZXIgT3B0aWMgQ2FibGUgTWFudWZhY3R1cmluZyMzMzU5MgotbmFpY3MjMzM1OTI5I090aGVyIENvbW11bmljYXRpb24gYW5kIEVuZXJneSBXaXJlIE1hbnVmYWN0dXJpbmcjMzM1OTIKLW5haWNzIzMzNTkzI1dpcmluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzU5Ci1uYWljcyMzMzU5MzEjQ3VycmVudC1DYXJyeWluZyBXaXJpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM1OTMKLW5haWNzIzMzNTkzMiNOb25jdXJyZW50LUNhcnJ5aW5nIFdpcmluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzU5MwotbmFpY3MjMzM1OTkjQWxsIE90aGVyIEVsZWN0cmljYWwgRXF1aXBtZW50IGFuZCBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzU5Ci1uYWljcyMzMzU5OTEjQ2FyYm9uIGFuZCBHcmFwaGl0ZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzM1OTkKLW5haWNzIzMzNTk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBFbGVjdHJpY2FsIEVxdWlwbWVudCBhbmQgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzM1OTkKLW5haWNzIzMzNiNUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzM2MSNNb3RvciBWZWhpY2xlIE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzYxMSNBdXRvbW9iaWxlIGFuZCBMaWdodCBEdXR5IE1vdG9yIFZlaGljbGUgTWFudWZhY3R1cmluZyMzMzYxCi1uYWljcyMzMzYxMTEjQXV0b21vYmlsZSBNYW51ZmFjdHVyaW5nIzMzNjExCi1uYWljcyMzMzYxMTIjTGlnaHQgVHJ1Y2sgYW5kIFV0aWxpdHkgVmVoaWNsZSBNYW51ZmFjdHVyaW5nIzMzNjExCi1uYWljcyMzMzYxMiNIZWF2eSBEdXR5IFRydWNrIE1hbnVmYWN0dXJpbmcjMzM2MQotbmFpY3MjMzM2MiNNb3RvciBWZWhpY2xlIEJvZHkgYW5kIFRyYWlsZXIgTWFudWZhY3R1cmluZyMzMzYKLW5haWNzIzMzNjIxI01vdG9yIFZlaGljbGUgQm9keSBhbmQgVHJhaWxlciBNYW51ZmFjdHVyaW5nIzMzNjIKLW5haWNzIzMzNjIxMSNNb3RvciBWZWhpY2xlIEJvZHkgTWFudWZhY3R1cmluZyMzMzYyMQotbmFpY3MjMzM2MjEyI1RydWNrIFRyYWlsZXIgTWFudWZhY3R1cmluZyMzMzYyMQotbmFpY3MjMzM2MjEzI01vdG9yIEhvbWUgTWFudWZhY3R1cmluZyMzMzYyMQotbmFpY3MjMzM2MjE0I1RyYXZlbCBUcmFpbGVyIGFuZCBDYW1wZXIgTWFudWZhY3R1cmluZyMzMzYyMQotbmFpY3MjMzM2MyNNb3RvciBWZWhpY2xlIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzYzMSNNb3RvciBWZWhpY2xlIEdhc29saW5lIEVuZ2luZSBhbmQgRW5naW5lIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2MwotbmFpY3MjMzM2MzExI0NhcmJ1cmV0b3IsIFBpc3RvbiwgUGlzdG9uIFJpbmcsIGFuZCBWYWx2ZSBNYW51ZmFjdHVyaW5nIzMzNjMxCi1uYWljcyMzMzYzMTIjR2Fzb2xpbmUgRW5naW5lIGFuZCBFbmdpbmUgUGFydHMgTWFudWZhY3R1cmluZyMzMzYzMQotbmFpY3MjMzM2MzIjTW90b3IgVmVoaWNsZSBFbGVjdHJpY2FsIGFuZCBFbGVjdHJvbmljIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjMyMSNWZWhpY3VsYXIgTGlnaHRpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2MzIKLW5haWNzIzMzNjMyMiNPdGhlciBNb3RvciBWZWhpY2xlIEVsZWN0cmljYWwgYW5kIEVsZWN0cm9uaWMgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2MzIKLW5haWNzIzMzNjMzI01vdG9yIFZlaGljbGUgU3RlZXJpbmcgYW5kIFN1c3BlbnNpb24gQ29tcG9uZW50cyAoZXhjZXB0IFNwcmluZykgTWFudWZhY3R1cmluZyMzMzYzCi1uYWljcyMzMzYzNCNNb3RvciBWZWhpY2xlIEJyYWtlIFN5c3RlbSBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM1I01vdG9yIFZlaGljbGUgVHJhbnNtaXNzaW9uIGFuZCBQb3dlciBUcmFpbiBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM2I01vdG9yIFZlaGljbGUgU2VhdGluZyBhbmQgSW50ZXJpb3IgVHJpbSBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM3I01vdG9yIFZlaGljbGUgTWV0YWwgU3RhbXBpbmcjMzM2MwotbmFpY3MjMzM2MzkjT3RoZXIgTW90b3IgVmVoaWNsZSBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM5MSNNb3RvciBWZWhpY2xlIEFpci1Db25kaXRpb25pbmcgTWFudWZhY3R1cmluZyMzMzYzOQotbmFpY3MjMzM2Mzk5I0FsbCBPdGhlciBNb3RvciBWZWhpY2xlIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2MzkKLW5haWNzIzMzNjQjQWVyb3NwYWNlIFByb2R1Y3QgYW5kIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzY0MSNBZXJvc3BhY2UgUHJvZHVjdCBhbmQgUGFydHMgTWFudWZhY3R1cmluZyMzMzY0Ci1uYWljcyMzMzY0MTEjQWlyY3JhZnQgTWFudWZhY3R1cmluZyMzMzY0MQotbmFpY3MjMzM2NDEyI0FpcmNyYWZ0IEVuZ2luZSBhbmQgRW5naW5lIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2NDEKLW5haWNzIzMzNjQxMyNPdGhlciBBaXJjcmFmdCBQYXJ0cyBhbmQgQXV4aWxpYXJ5IEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjQxCi1uYWljcyMzMzY0MTQjR3VpZGVkIE1pc3NpbGUgYW5kIFNwYWNlIFZlaGljbGUgTWFudWZhY3R1cmluZyMzMzY0MQotbmFpY3MjMzM2NDE1I0d1aWRlZCBNaXNzaWxlIGFuZCBTcGFjZSBWZWhpY2xlIFByb3B1bHNpb24gVW5pdCBhbmQgUHJvcHVsc2lvbiBVbml0IFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2NDEKLW5haWNzIzMzNjQxOSNPdGhlciBHdWlkZWQgTWlzc2lsZSBhbmQgU3BhY2UgVmVoaWNsZSBQYXJ0cyBhbmQgQXV4aWxpYXJ5IEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjQxCi1uYWljcyMzMzY1I1JhaWxyb2FkIFJvbGxpbmcgU3RvY2sgTWFudWZhY3R1cmluZyMzMzYKLW5haWNzIzMzNjUxI1JhaWxyb2FkIFJvbGxpbmcgU3RvY2sgTWFudWZhY3R1cmluZyMzMzY1Ci1uYWljcyMzMzY2I1NoaXAgYW5kIEJvYXQgQnVpbGRpbmcjMzM2Ci1uYWljcyMzMzY2MSNTaGlwIGFuZCBCb2F0IEJ1aWxkaW5nIzMzNjYKLW5haWNzIzMzNjYxMSNTaGlwIEJ1aWxkaW5nIGFuZCBSZXBhaXJpbmcjMzM2NjEKLW5haWNzIzMzNjYxMiNCb2F0IEJ1aWxkaW5nIzMzNjYxCi1uYWljcyMzMzY5I090aGVyIFRyYW5zcG9ydGF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNgotbmFpY3MjMzM2OTkjT3RoZXIgVHJhbnNwb3J0YXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2OQotbmFpY3MjMzM2OTkxI01vdG9yY3ljbGUsIEJpY3ljbGUsIGFuZCBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjk5Ci1uYWljcyMzMzY5OTIjTWlsaXRhcnkgQXJtb3JlZCBWZWhpY2xlLCBUYW5rLCBhbmQgVGFuayBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzY5OQotbmFpY3MjMzM2OTk5I0FsbCBPdGhlciBUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzY5OQotbmFpY3MjMzM3I0Z1cm5pdHVyZSBhbmQgUmVsYXRlZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzNzEjSG91c2Vob2xkIGFuZCBJbnN0aXR1dGlvbmFsIEZ1cm5pdHVyZSBhbmQgS2l0Y2hlbiBDYWJpbmV0IE1hbnVmYWN0dXJpbmcjMzM3Ci1uYWljcyMzMzcxMSNXb29kIEtpdGNoZW4gQ2FiaW5ldCBhbmQgQ291bnRlcnRvcCBNYW51ZmFjdHVyaW5nIzMzNzEKLW5haWNzIzMzNzEyI0hvdXNlaG9sZCBhbmQgSW5zdGl0dXRpb25hbCBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzcxCi1uYWljcyMzMzcxMjEjVXBob2xzdGVyZWQgSG91c2Vob2xkIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzEyCi1uYWljcyMzMzcxMjIjTm9udXBob2xzdGVyZWQgV29vZCBIb3VzZWhvbGQgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzEyNCNNZXRhbCBIb3VzZWhvbGQgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzEyNSNIb3VzZWhvbGQgRnVybml0dXJlIChleGNlcHQgV29vZCBhbmQgTWV0YWwpIE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzEyNyNJbnN0aXR1dGlvbmFsIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzEyCi1uYWljcyMzMzcxMjkjV29vZCBUZWxldmlzaW9uLCBSYWRpbywgYW5kIFNld2luZyBNYWNoaW5lIENhYmluZXQgTWFudWZhY3R1cmluZyMzMzcxMgotbmFpY3MjMzM3MiNPZmZpY2UgRnVybml0dXJlIChpbmNsdWRpbmcgRml4dHVyZXMpIE1hbnVmYWN0dXJpbmcjMzM3Ci1uYWljcyMzMzcyMSNPZmZpY2UgRnVybml0dXJlIChpbmNsdWRpbmcgRml4dHVyZXMpIE1hbnVmYWN0dXJpbmcjMzM3MgotbmFpY3MjMzM3MjExI1dvb2QgT2ZmaWNlIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzIxCi1uYWljcyMzMzcyMTIjQ3VzdG9tIEFyY2hpdGVjdHVyYWwgV29vZHdvcmsgYW5kIE1pbGx3b3JrIE1hbnVmYWN0dXJpbmcjMzM3MjEKLW5haWNzIzMzNzIxNCNPZmZpY2UgRnVybml0dXJlIChleGNlcHQgV29vZCkgTWFudWZhY3R1cmluZyMzMzcyMQotbmFpY3MjMzM3MjE1I1Nob3djYXNlLCBQYXJ0aXRpb24sIFNoZWx2aW5nLCBhbmQgTG9ja2VyIE1hbnVmYWN0dXJpbmcjMzM3MjEKLW5haWNzIzMzNzkjT3RoZXIgRnVybml0dXJlIFJlbGF0ZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzNwotbmFpY3MjMzM3OTEjTWF0dHJlc3MgTWFudWZhY3R1cmluZyMzMzc5Ci1uYWljcyMzMzc5MiNCbGluZCBhbmQgU2hhZGUgTWFudWZhY3R1cmluZyMzMzc5Ci1uYWljcyMzMzkjTWlzY2VsbGFuZW91cyBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzkxI01lZGljYWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBNYW51ZmFjdHVyaW5nIzMzOQotbmFpY3MjMzM5MTEjTWVkaWNhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIE1hbnVmYWN0dXJpbmcjMzM5MQotbmFpY3MjMzM5MTExI0xhYm9yYXRvcnkgQXBwYXJhdHVzIGFuZCBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzkxMQotbmFpY3MjMzM5MTEyI1N1cmdpY2FsIGFuZCBNZWRpY2FsIEluc3RydW1lbnQgTWFudWZhY3R1cmluZyMzMzkxMQotbmFpY3MjMzM5MTEzI1N1cmdpY2FsIEFwcGxpYW5jZSBhbmQgU3VwcGxpZXMgTWFudWZhY3R1cmluZyMzMzkxMQotbmFpY3MjMzM5MTE0I0RlbnRhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIE1hbnVmYWN0dXJpbmcjMzM5MTEKLW5haWNzIzMzOTExNSNPcGh0aGFsbWljIEdvb2RzIE1hbnVmYWN0dXJpbmcjMzM5MTEKLW5haWNzIzMzOTExNiNEZW50YWwgTGFib3JhdG9yaWVzIzMzOTExCi1uYWljcyMzMzk5I090aGVyIE1pc2NlbGxhbmVvdXMgTWFudWZhY3R1cmluZyMzMzkKLW5haWNzIzMzOTkxI0pld2VscnkgYW5kIFNpbHZlcndhcmUgTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5MTEjSmV3ZWxyeSAoZXhjZXB0IENvc3R1bWUpIE1hbnVmYWN0dXJpbmcjMzM5OTEKLW5haWNzIzMzOTkxMiNTaWx2ZXJ3YXJlIGFuZCBIb2xsb3d3YXJlIE1hbnVmYWN0dXJpbmcjMzM5OTEKLW5haWNzIzMzOTkxMyNKZXdlbGVycycgTWF0ZXJpYWwgYW5kIExhcGlkYXJ5IFdvcmsgTWFudWZhY3R1cmluZyMzMzk5MQotbmFpY3MjMzM5OTE0I0Nvc3R1bWUgSmV3ZWxyeSBhbmQgTm92ZWx0eSBNYW51ZmFjdHVyaW5nIzMzOTkxCi1uYWljcyMzMzk5MiNTcG9ydGluZyBhbmQgQXRobGV0aWMgR29vZHMgTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5MyNEb2xsLCBUb3ksIGFuZCBHYW1lIE1hbnVmYWN0dXJpbmcjMzM5OQotbmFpY3MjMzM5OTMxI0RvbGwgYW5kIFN0dWZmZWQgVG95IE1hbnVmYWN0dXJpbmcjMzM5OTMKLW5haWNzIzMzOTkzMiNHYW1lLCBUb3ksIGFuZCBDaGlsZHJlbidzIFZlaGljbGUgTWFudWZhY3R1cmluZyMzMzk5MwotbmFpY3MjMzM5OTQjT2ZmaWNlIFN1cHBsaWVzIChleGNlcHQgUGFwZXIpIE1hbnVmYWN0dXJpbmcjMzM5OQotbmFpY3MjMzM5OTQxI1BlbiBhbmQgTWVjaGFuaWNhbCBQZW5jaWwgTWFudWZhY3R1cmluZyMzMzk5NAotbmFpY3MjMzM5OTQyI0xlYWQgUGVuY2lsIGFuZCBBcnQgR29vZCBNYW51ZmFjdHVyaW5nIzMzOTk0Ci1uYWljcyMzMzk5NDMjTWFya2luZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzk5NAotbmFpY3MjMzM5OTQ0I0NhcmJvbiBQYXBlciBhbmQgSW5rZWQgUmliYm9uIE1hbnVmYWN0dXJpbmcjMzM5OTQKLW5haWNzIzMzOTk1I1NpZ24gTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBNYW51ZmFjdHVyaW5nIzMzOTkKLW5haWNzIzMzOTk5MSNHYXNrZXQsIFBhY2tpbmcsIGFuZCBTZWFsaW5nIERldmljZSBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyMzMzk5OTIjTXVzaWNhbCBJbnN0cnVtZW50IE1hbnVmYWN0dXJpbmcjMzM5OTkKLW5haWNzIzMzOTk5MyNGYXN0ZW5lciwgQnV0dG9uLCBOZWVkbGUsIGFuZCBQaW4gTWFudWZhY3R1cmluZyMzMzk5OQotbmFpY3MjMzM5OTk0I0Jyb29tLCBCcnVzaCwgYW5kIE1vcCBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyMzMzk5OTUjQnVyaWFsIENhc2tldCBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyMzMzk5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgTWFudWZhY3R1cmluZyMzMzk5OQotbmFpY3MjNDIjV2hvbGVzYWxlIFRyYWRlIzQyCi1uYWljcyM0MjEjV2hvbGVzYWxlIFRyYWRlLCBEdXJhYmxlIEdvb2RzIzQyCi1uYWljcyM0MjExI01vdG9yIFZlaGljbGUgYW5kIE1vdG9yIFZlaGljbGUgUGFydHMgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxMTEjQXV0b21vYmlsZSBhbmQgT3RoZXIgTW90b3IgVmVoaWNsZSBXaG9sZXNhbGVycyM0MjExCi1uYWljcyM0MjExMiNNb3RvciBWZWhpY2xlIFN1cHBsaWVzIGFuZCBOZXcgUGFydHMgV2hvbGVzYWxlcnMjNDIxMQotbmFpY3MjNDIxMTMjVGlyZSBhbmQgVHViZSBXaG9sZXNhbGVycyM0MjExCi1uYWljcyM0MjExNCNNb3RvciBWZWhpY2xlIFBhcnRzIChVc2VkKSBXaG9sZXNhbGVycyM0MjExCi1uYWljcyM0MjEyI0Z1cm5pdHVyZSBhbmQgSG9tZSBGdXJuaXNoaW5nIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxMjEjRnVybml0dXJlIFdob2xlc2FsZXJzIzQyMTIKLW5haWNzIzQyMTIyI0hvbWUgRnVybmlzaGluZyBXaG9sZXNhbGVycyM0MjEyCi1uYWljcyM0MjEzI0x1bWJlciBhbmQgT3RoZXIgQ29uc3RydWN0aW9uIE1hdGVyaWFscyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTMxI0x1bWJlciwgUGx5d29vZCwgTWlsbHdvcmssIGFuZCBXb29kIFBhbmVsIFdob2xlc2FsZXJzIzQyMTMKLW5haWNzIzQyMTMyI0JyaWNrLCBTdG9uZSwgYW5kIFJlbGF0ZWQgQ29uc3RydWN0aW9uIE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMTMKLW5haWNzIzQyMTMzI1Jvb2ZpbmcsIFNpZGluZywgYW5kIEluc3VsYXRpb24gTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIxMwotbmFpY3MjNDIxMzkjT3RoZXIgQ29uc3RydWN0aW9uIE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMTMKLW5haWNzIzQyMTQjUHJvZmVzc2lvbmFsIGFuZCBDb21tZXJjaWFsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjE0MSNQaG90b2dyYXBoaWMgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE0MiNPZmZpY2UgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTQzI0NvbXB1dGVyIGFuZCBDb21wdXRlciBQZXJpcGhlcmFsIEVxdWlwbWVudCBhbmQgU29mdHdhcmUgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNDQjT3RoZXIgQ29tbWVyY2lhbCBFcXVpcG1lbnQgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNDUjTWVkaWNhbCwgRGVudGFsLCBhbmQgSG9zcGl0YWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE0NiNPcGh0aGFsbWljIEdvb2RzIFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTQ5I090aGVyIFByb2Zlc3Npb25hbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTUjTWV0YWwgYW5kIE1pbmVyYWwgKGV4Y2VwdCBQZXRyb2xldW0pIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxNTEjTWV0YWwgU2VydmljZSBDZW50ZXJzIGFuZCBPZmZpY2VzIzQyMTUKLW5haWNzIzQyMTUyI0NvYWwgYW5kIE90aGVyIE1pbmVyYWwgYW5kIE9yZSBXaG9sZXNhbGVycyM0MjE1Ci1uYWljcyM0MjE2I0VsZWN0cmljYWwgR29vZHMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjE2MSNFbGVjdHJpY2FsIEFwcGFyYXR1cyBhbmQgRXF1aXBtZW50LCBXaXJpbmcgU3VwcGxpZXMsIGFuZCBDb25zdHJ1Y3Rpb24gTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIxNgotbmFpY3MjNDIxNjIjRWxlY3RyaWNhbCBBcHBsaWFuY2UsIFRlbGV2aXNpb24sIGFuZCBSYWRpbyBTZXQgV2hvbGVzYWxlcnMjNDIxNgotbmFpY3MjNDIxNjkjT3RoZXIgRWxlY3Ryb25pYyBQYXJ0cyBhbmQgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTYKLW5haWNzIzQyMTcjSGFyZHdhcmUsIGFuZCBQbHVtYmluZyBhbmQgSGVhdGluZyBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxNzEjSGFyZHdhcmUgV2hvbGVzYWxlcnMjNDIxNwotbmFpY3MjNDIxNzIjUGx1bWJpbmcgYW5kIEhlYXRpbmcgRXF1aXBtZW50IGFuZCBTdXBwbGllcyAoSHlkcm9uaWNzKSBXaG9sZXNhbGVycyM0MjE3Ci1uYWljcyM0MjE3MyNXYXJtIEFpciBIZWF0aW5nIGFuZCBBaXItQ29uZGl0aW9uaW5nIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxNwotbmFpY3MjNDIxNzQjUmVmcmlnZXJhdGlvbiBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTcKLW5haWNzIzQyMTgjTWFjaGluZXJ5LCBFcXVpcG1lbnQsIGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTgxI0NvbnN0cnVjdGlvbiBhbmQgTWluaW5nIChleGNlcHQgT2lsIFdlbGwpIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTgyI0Zhcm0gYW5kIEdhcmRlbiBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBXaG9sZXNhbGVycyM0MjE4Ci1uYWljcyM0MjE4MyNJbmR1c3RyaWFsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTg0I0luZHVzdHJpYWwgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxOAotbmFpY3MjNDIxODUjU2VydmljZSBFc3RhYmxpc2htZW50IEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxOAotbmFpY3MjNDIxODYjVHJhbnNwb3J0YXRpb24gRXF1aXBtZW50IGFuZCBTdXBwbGllcyAoZXhjZXB0IE1vdG9yIFZlaGljbGUpIFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTkjTWlzY2VsbGFuZW91cyBEdXJhYmxlIEdvb2RzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxOTEjU3BvcnRpbmcgYW5kIFJlY3JlYXRpb25hbCBHb29kcyBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxOQotbmFpY3MjNDIxOTIjVG95IGFuZCBIb2JieSBHb29kcyBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxOQotbmFpY3MjNDIxOTMjUmVjeWNsYWJsZSBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjE5Ci1uYWljcyM0MjE5NCNKZXdlbHJ5LCBXYXRjaCwgUHJlY2lvdXMgU3RvbmUsIGFuZCBQcmVjaW91cyBNZXRhbCBXaG9sZXNhbGVycyM0MjE5Ci1uYWljcyM0MjE5OSNPdGhlciBNaXNjZWxsYW5lb3VzIER1cmFibGUgR29vZHMgV2hvbGVzYWxlcnMjNDIxOQotbmFpY3MjNDIyI1dob2xlc2FsZSBUcmFkZSwgTm9uZHVyYWJsZSBHb29kcyM0MgotbmFpY3MjNDIyMSNQYXBlciBhbmQgUGFwZXIgUHJvZHVjdCBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjExI1ByaW50aW5nIGFuZCBXcml0aW5nIFBhcGVyIFdob2xlc2FsZXJzIzQyMjEKLW5haWNzIzQyMjEyI1N0YXRpb25lcnkgYW5kIE9mZmljZSBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjIxCi1uYWljcyM0MjIxMyNJbmR1c3RyaWFsIGFuZCBQZXJzb25hbCBTZXJ2aWNlIFBhcGVyIFdob2xlc2FsZXJzIzQyMjEKLW5haWNzIzQyMjIjRHJ1Z3MgYW5kIERydWdnaXN0cycgU3VuZHJpZXMgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjIyMSNEcnVncyBhbmQgRHJ1Z2dpc3RzJyBTdW5kcmllcyBXaG9sZXNhbGVycyM0MjIyCi1uYWljcyM0MjIzI0FwcGFyZWwsIFBpZWNlIEdvb2RzLCBhbmQgTm90aW9ucyBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjMxI1BpZWNlIEdvb2RzLCBOb3Rpb25zLCBhbmQgT3RoZXIgRHJ5IEdvb2RzIFdob2xlc2FsZXJzIzQyMjMKLW5haWNzIzQyMjMyI01lbidzIGFuZCBCb3lzJyBDbG90aGluZyBhbmQgRnVybmlzaGluZ3MgV2hvbGVzYWxlcnMjNDIyMwotbmFpY3MjNDIyMzMjV29tZW4ncywgQ2hpbGRyZW4ncywgYW5kIEluZmFudHMnIENsb3RoaW5nIGFuZCBBY2Nlc3NvcmllcyBXaG9sZXNhbGVycyM0MjIzCi1uYWljcyM0MjIzNCNGb290d2VhciBXaG9sZXNhbGVycyM0MjIzCi1uYWljcyM0MjI0I0dyb2NlcnkgYW5kIFJlbGF0ZWQgUHJvZHVjdCBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjQxI0dlbmVyYWwgTGluZSBHcm9jZXJ5IFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQyI1BhY2thZ2VkIEZyb3plbiBGb29kIFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQzI0RhaXJ5IFByb2R1Y3QgKGV4Y2VwdCBEcmllZCBvciBDYW5uZWQpIFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ0I1BvdWx0cnkgYW5kIFBvdWx0cnkgUHJvZHVjdCBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0NSNDb25mZWN0aW9uZXJ5IFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ2I0Zpc2ggYW5kIFNlYWZvb2QgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDcjTWVhdCBhbmQgTWVhdCBQcm9kdWN0IFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ4I0ZyZXNoIEZydWl0IGFuZCBWZWdldGFibGUgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDkjT3RoZXIgR3JvY2VyeSBhbmQgUmVsYXRlZCBQcm9kdWN0cyBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI1I0Zhcm0gUHJvZHVjdCBSYXcgTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjI1MSNHcmFpbiBhbmQgRmllbGQgQmVhbiBXaG9sZXNhbGVycyM0MjI1Ci1uYWljcyM0MjI1MiNMaXZlc3RvY2sgV2hvbGVzYWxlcnMjNDIyNQotbmFpY3MjNDIyNTkjT3RoZXIgRmFybSBQcm9kdWN0IFJhdyBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjI1Ci1uYWljcyM0MjI2I0NoZW1pY2FsIGFuZCBBbGxpZWQgUHJvZHVjdHMgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjI2MSNQbGFzdGljcyBNYXRlcmlhbHMgYW5kIEJhc2ljIEZvcm1zIGFuZCBTaGFwZXMgV2hvbGVzYWxlcnMjNDIyNgotbmFpY3MjNDIyNjkjT3RoZXIgQ2hlbWljYWwgYW5kIEFsbGllZCBQcm9kdWN0cyBXaG9sZXNhbGVycyM0MjI2Ci1uYWljcyM0MjI3I1BldHJvbGV1bSBhbmQgUGV0cm9sZXVtIFByb2R1Y3RzIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyNzEjUGV0cm9sZXVtIEJ1bGsgU3RhdGlvbnMgYW5kIFRlcm1pbmFscyM0MjI3Ci1uYWljcyM0MjI3MiNQZXRyb2xldW0gYW5kIFBldHJvbGV1bSBQcm9kdWN0cyBXaG9sZXNhbGVycyAoZXhjZXB0IEJ1bGsgU3RhdGlvbnMgYW5kIFRlcm1pbmFscykjNDIyNwotbmFpY3MjNDIyOCNCZWVyLCBXaW5lLCBhbmQgRGlzdGlsbGVkIEFsY29ob2xpYyBCZXZlcmFnZSBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjgxI0JlZXIgYW5kIEFsZSBXaG9sZXNhbGVycyM0MjI4Ci1uYWljcyM0MjI4MiNXaW5lIGFuZCBEaXN0aWxsZWQgQWxjb2hvbGljIEJldmVyYWdlIFdob2xlc2FsZXJzIzQyMjgKLW5haWNzIzQyMjkjTWlzY2VsbGFuZW91cyBOb25kdXJhYmxlIEdvb2RzIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyOTEjRmFybSBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0MjI5MiNCb29rLCBQZXJpb2RpY2FsLCBhbmQgTmV3c3BhcGVyIFdob2xlc2FsZXJzIzQyMjkKLW5haWNzIzQyMjkzI0Zsb3dlciwgTnVyc2VyeSBTdG9jaywgYW5kIEZsb3Jpc3RzJyBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0MjI5NCNUb2JhY2NvIGFuZCBUb2JhY2NvIFByb2R1Y3QgV2hvbGVzYWxlcnMjNDIyOQotbmFpY3MjNDIyOTUjUGFpbnQsIFZhcm5pc2gsIGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0MjI5OSNPdGhlciBNaXNjZWxsYW5lb3VzIE5vbmR1cmFibGUgR29vZHMgV2hvbGVzYWxlcnMjNDIyOQotbmFpY3MjNDQjUmV0YWlsIFRyYWRlIzQ0Ci1uYWljcyM0NDEjTW90b3IgVmVoaWNsZSBhbmQgUGFydHMgRGVhbGVycyM0NAotbmFpY3MjNDQxMSNBdXRvbW9iaWxlIERlYWxlcnMjNDQxCi1uYWljcyM0NDExMSNOZXcgQ2FyIERlYWxlcnMjNDQxMQotbmFpY3MjNDQxMTIjVXNlZCBDYXIgRGVhbGVycyM0NDExCi1uYWljcyM0NDEyI090aGVyIE1vdG9yIFZlaGljbGUgRGVhbGVycyM0NDEKLW5haWNzIzQ0MTIxI1JlY3JlYXRpb25hbCBWZWhpY2xlIERlYWxlcnMjNDQxMgotbmFpY3MjNDQxMjIjTW90b3JjeWNsZSwgQm9hdCwgYW5kIE90aGVyIE1vdG9yIFZlaGljbGUgRGVhbGVycyM0NDEyCi1uYWljcyM0NDEyMjEjTW90b3JjeWNsZSBEZWFsZXJzIzQ0MTIyCi1uYWljcyM0NDEyMjIjQm9hdCBEZWFsZXJzIzQ0MTIyCi1uYWljcyM0NDEyMjkjQWxsIE90aGVyIE1vdG9yIFZlaGljbGUgRGVhbGVycyM0NDEyMgotbmFpY3MjNDQxMyNBdXRvbW90aXZlIFBhcnRzLCBBY2Nlc3NvcmllcywgYW5kIFRpcmUgU3RvcmVzIzQ0MQotbmFpY3MjNDQxMzEjQXV0b21vdGl2ZSBQYXJ0cyBhbmQgQWNjZXNzb3JpZXMgU3RvcmVzIzQ0MTMKLW5haWNzIzQ0MTMyI1RpcmUgRGVhbGVycyM0NDEzCi1uYWljcyM0NDIjRnVybml0dXJlIGFuZCBIb21lIEZ1cm5pc2hpbmdzIFN0b3JlcyM0NAotbmFpY3MjNDQyMSNGdXJuaXR1cmUgU3RvcmVzIzQ0MgotbmFpY3MjNDQyMTEjRnVybml0dXJlIFN0b3JlcyM0NDIxCi1uYWljcyM0NDIyI0hvbWUgRnVybmlzaGluZ3MgU3RvcmVzIzQ0MgotbmFpY3MjNDQyMjEjRmxvb3IgQ292ZXJpbmcgU3RvcmVzIzQ0MjIKLW5haWNzIzQ0MjI5I090aGVyIEhvbWUgRnVybmlzaGluZ3MgU3RvcmVzIzQ0MjIKLW5haWNzIzQ0MjI5MSNXaW5kb3cgVHJlYXRtZW50IFN0b3JlcyM0NDIyOQotbmFpY3MjNDQyMjk5I0FsbCBPdGhlciBIb21lIEZ1cm5pc2hpbmdzIFN0b3JlcyM0NDIyOQotbmFpY3MjNDQzI0VsZWN0cm9uaWNzIGFuZCBBcHBsaWFuY2UgU3RvcmVzIzQ0Ci1uYWljcyM0NDMxI0VsZWN0cm9uaWNzIGFuZCBBcHBsaWFuY2UgU3RvcmVzIzQ0MwotbmFpY3MjNDQzMTEjQXBwbGlhbmNlLCBUZWxldmlzaW9uLCBhbmQgT3RoZXIgRWxlY3Ryb25pY3MgU3RvcmVzIzQ0MzEKLW5haWNzIzQ0MzExMSNIb3VzZWhvbGQgQXBwbGlhbmNlIFN0b3JlcyM0NDMxMQotbmFpY3MjNDQzMTEyI1JhZGlvLCBUZWxldmlzaW9uLCBhbmQgT3RoZXIgRWxlY3Ryb25pY3MgU3RvcmVzIzQ0MzExCi1uYWljcyM0NDMxMiNDb21wdXRlciBhbmQgU29mdHdhcmUgU3RvcmVzIzQ0MzEKLW5haWNzIzQ0MzEzI0NhbWVyYSBhbmQgUGhvdG9ncmFwaGljIFN1cHBsaWVzIFN0b3JlcyM0NDMxCi1uYWljcyM0NDQjQnVpbGRpbmcgTWF0ZXJpYWwgYW5kIEdhcmRlbiBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIERlYWxlcnMjNDQKLW5haWNzIzQ0NDEjQnVpbGRpbmcgTWF0ZXJpYWwgYW5kIFN1cHBsaWVzIERlYWxlcnMjNDQ0Ci1uYWljcyM0NDQxMSNIb21lIENlbnRlcnMjNDQ0MQotbmFpY3MjNDQ0MTIjUGFpbnQgYW5kIFdhbGxwYXBlciBTdG9yZXMjNDQ0MQotbmFpY3MjNDQ0MTMjSGFyZHdhcmUgU3RvcmVzIzQ0NDEKLW5haWNzIzQ0NDE5I090aGVyIEJ1aWxkaW5nIE1hdGVyaWFsIERlYWxlcnMjNDQ0MQotbmFpY3MjNDQ0MiNMYXduIGFuZCBHYXJkZW4gRXF1aXBtZW50IGFuZCBTdXBwbGllcyBTdG9yZXMjNDQ0Ci1uYWljcyM0NDQyMSNPdXRkb29yIFBvd2VyIEVxdWlwbWVudCBTdG9yZXMjNDQ0MgotbmFpY3MjNDQ0MjIjTnVyc2VyeSBhbmQgR2FyZGVuIENlbnRlcnMjNDQ0MgotbmFpY3MjNDQ1I0Zvb2QgYW5kIEJldmVyYWdlIFN0b3JlcyM0NAotbmFpY3MjNDQ1MSNHcm9jZXJ5IFN0b3JlcyM0NDUKLW5haWNzIzQ0NTExI1N1cGVybWFya2V0cyBhbmQgT3RoZXIgR3JvY2VyeSAoZXhjZXB0IENvbnZlbmllbmNlKSBTdG9yZXMjNDQ1MQotbmFpY3MjNDQ1MTIjQ29udmVuaWVuY2UgU3RvcmVzIzQ0NTEKLW5haWNzIzQ0NTIjU3BlY2lhbHR5IEZvb2QgU3RvcmVzIzQ0NQotbmFpY3MjNDQ1MjEjTWVhdCBNYXJrZXRzIzQ0NTIKLW5haWNzIzQ0NTIyI0Zpc2ggYW5kIFNlYWZvb2QgTWFya2V0cyM0NDUyCi1uYWljcyM0NDUyMyNGcnVpdCBhbmQgVmVnZXRhYmxlIE1hcmtldHMjNDQ1MgotbmFpY3MjNDQ1MjkjT3RoZXIgU3BlY2lhbHR5IEZvb2QgU3RvcmVzIzQ0NTIKLW5haWNzIzQ0NTI5MSNCYWtlZCBHb29kcyBTdG9yZXMjNDQ1MjkKLW5haWNzIzQ0NTI5MiNDb25mZWN0aW9uZXJ5IGFuZCBOdXQgU3RvcmVzIzQ0NTI5Ci1uYWljcyM0NDUyOTkjQWxsIE90aGVyIFNwZWNpYWx0eSBGb29kIFN0b3JlcyM0NDUyOQotbmFpY3MjNDQ1MyNCZWVyLCBXaW5lLCBhbmQgTGlxdW9yIFN0b3JlcyM0NDUKLW5haWNzIzQ0NTMxI0JlZXIsIFdpbmUsIGFuZCBMaXF1b3IgU3RvcmVzIzQ0NTMKLW5haWNzIzQ0NiNIZWFsdGggYW5kIFBlcnNvbmFsIENhcmUgU3RvcmVzIzQ0Ci1uYWljcyM0NDYxI0hlYWx0aCBhbmQgUGVyc29uYWwgQ2FyZSBTdG9yZXMjNDQ2Ci1uYWljcyM0NDYxMSNQaGFybWFjaWVzIGFuZCBEcnVnIFN0b3JlcyM0NDYxCi1uYWljcyM0NDYxMiNDb3NtZXRpY3MsIEJlYXV0eSBTdXBwbGllcywgYW5kIFBlcmZ1bWUgU3RvcmVzIzQ0NjEKLW5haWNzIzQ0NjEzI09wdGljYWwgR29vZHMgU3RvcmVzIzQ0NjEKLW5haWNzIzQ0NjE5I090aGVyIEhlYWx0aCBhbmQgUGVyc29uYWwgQ2FyZSBTdG9yZXMjNDQ2MQotbmFpY3MjNDQ2MTkxI0Zvb2QgKEhlYWx0aCkgU3VwcGxlbWVudCBTdG9yZXMjNDQ2MTkKLW5haWNzIzQ0NjE5OSNBbGwgT3RoZXIgSGVhbHRoIGFuZCBQZXJzb25hbCBDYXJlIFN0b3JlcyM0NDYxOQotbmFpY3MjNDQ3I0dhc29saW5lIFN0YXRpb25zIzQ0Ci1uYWljcyM0NDcxI0dhc29saW5lIFN0YXRpb25zIzQ0NwotbmFpY3MjNDQ3MTEjR2Fzb2xpbmUgU3RhdGlvbnMgd2l0aCBDb252ZW5pZW5jZSBTdG9yZXMjNDQ3MQotbmFpY3MjNDQ3MTkjT3RoZXIgR2Fzb2xpbmUgU3RhdGlvbnMjNDQ3MQotbmFpY3MjNDQ4I0Nsb3RoaW5nIGFuZCBDbG90aGluZyBBY2Nlc3NvcmllcyBTdG9yZXMjNDQKLW5haWNzIzQ0ODEjQ2xvdGhpbmcgU3RvcmVzIzQ0OAotbmFpY3MjNDQ4MTEjTWVuJ3MgQ2xvdGhpbmcgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODEyI1dvbWVuJ3MgQ2xvdGhpbmcgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODEzI0NoaWxkcmVuJ3MgYW5kIEluZmFudHMnIENsb3RoaW5nIFN0b3JlcyM0NDgxCi1uYWljcyM0NDgxNCNGYW1pbHkgQ2xvdGhpbmcgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODE1I0Nsb3RoaW5nIEFjY2Vzc29yaWVzIFN0b3JlcyM0NDgxCi1uYWljcyM0NDgxOSNPdGhlciBDbG90aGluZyBTdG9yZXMjNDQ4MQotbmFpY3MjNDQ4MiNTaG9lIFN0b3JlcyM0NDgKLW5haWNzIzQ0ODIxI1Nob2UgU3RvcmVzIzQ0ODIKLW5haWNzIzQ0ODMjSmV3ZWxyeSwgTHVnZ2FnZSwgYW5kIExlYXRoZXIgR29vZHMgU3RvcmVzIzQ0OAotbmFpY3MjNDQ4MzEjSmV3ZWxyeSBTdG9yZXMjNDQ4MwotbmFpY3MjNDQ4MzIjTHVnZ2FnZSBhbmQgTGVhdGhlciBHb29kcyBTdG9yZXMjNDQ4MwotbmFpY3MjNDUjUmV0YWlsIFRyYWRlIzQ1Ci1uYWljcyM0NTEjU3BvcnRpbmcgR29vZHMsIEhvYmJ5LCBCb29rLCBhbmQgTXVzaWMgU3RvcmVzIzQ1Ci1uYWljcyM0NTExI1Nwb3J0aW5nIEdvb2RzLCBIb2JieSwgYW5kIE11c2ljYWwgSW5zdHJ1bWVudCBTdG9yZXMjNDUxCi1uYWljcyM0NTExMSNTcG9ydGluZyBHb29kcyBTdG9yZXMjNDUxMQotbmFpY3MjNDUxMTIjSG9iYnksIFRveSwgYW5kIEdhbWUgU3RvcmVzIzQ1MTEKLW5haWNzIzQ1MTEzI1Nld2luZywgTmVlZGxld29yaywgYW5kIFBpZWNlIEdvb2RzIFN0b3JlcyM0NTExCi1uYWljcyM0NTExNCNNdXNpY2FsIEluc3RydW1lbnQgYW5kIFN1cHBsaWVzIFN0b3JlcyM0NTExCi1uYWljcyM0NTEyI0Jvb2ssIFBlcmlvZGljYWwsIGFuZCBNdXNpYyBTdG9yZXMjNDUxCi1uYWljcyM0NTEyMSNCb29rIFN0b3JlcyBhbmQgTmV3cyBEZWFsZXJzIzQ1MTIKLW5haWNzIzQ1MTIxMSNCb29rIFN0b3JlcyM0NTEyMQotbmFpY3MjNDUxMjEyI05ld3MgRGVhbGVycyBhbmQgTmV3c3N0YW5kcyM0NTEyMQotbmFpY3MjNDUxMjIjUHJlcmVjb3JkZWQgVGFwZSwgQ29tcGFjdCBEaXNjLCBhbmQgUmVjb3JkIFN0b3JlcyM0NTEyCi1uYWljcyM0NTIjR2VuZXJhbCBNZXJjaGFuZGlzZSBTdG9yZXMjNDUKLW5haWNzIzQ1MjEjRGVwYXJ0bWVudCBTdG9yZXMjNDUyCi1uYWljcyM0NTIxMSNEZXBhcnRtZW50IFN0b3JlcyM0NTIxCi1uYWljcyM0NTI5I090aGVyIEdlbmVyYWwgTWVyY2hhbmRpc2UgU3RvcmVzIzQ1MgotbmFpY3MjNDUyOTEjV2FyZWhvdXNlIENsdWJzIGFuZCBTdXBlcnN0b3JlcyM0NTI5Ci1uYWljcyM0NTI5OSNBbGwgT3RoZXIgR2VuZXJhbCBNZXJjaGFuZGlzZSBTdG9yZXMjNDUyOQotbmFpY3MjNDUzI01pc2NlbGxhbmVvdXMgU3RvcmUgUmV0YWlsZXJzIzQ1Ci1uYWljcyM0NTMxI0Zsb3Jpc3RzIzQ1MwotbmFpY3MjNDUzMTEjRmxvcmlzdHMjNDUzMQotbmFpY3MjNDUzMiNPZmZpY2UgU3VwcGxpZXMsIFN0YXRpb25lcnksIGFuZCBHaWZ0IFN0b3JlcyM0NTMKLW5haWNzIzQ1MzIxI09mZmljZSBTdXBwbGllcyBhbmQgU3RhdGlvbmVyeSBTdG9yZXMjNDUzMgotbmFpY3MjNDUzMjIjR2lmdCwgTm92ZWx0eSwgYW5kIFNvdXZlbmlyIFN0b3JlcyM0NTMyCi1uYWljcyM0NTMzI1VzZWQgTWVyY2hhbmRpc2UgU3RvcmVzIzQ1MwotbmFpY3MjNDUzMzEjVXNlZCBNZXJjaGFuZGlzZSBTdG9yZXMjNDUzMwotbmFpY3MjNDUzOSNPdGhlciBNaXNjZWxsYW5lb3VzIFN0b3JlIFJldGFpbGVycyM0NTMKLW5haWNzIzQ1MzkxI1BldCBhbmQgUGV0IFN1cHBsaWVzIFN0b3JlcyM0NTM5Ci1uYWljcyM0NTM5MiNBcnQgRGVhbGVycyM0NTM5Ci1uYWljcyM0NTM5MyNNYW51ZmFjdHVyZWQgKE1vYmlsZSkgSG9tZSBEZWFsZXJzIzQ1MzkKLW5haWNzIzQ1Mzk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFN0b3JlIFJldGFpbGVycyM0NTM5Ci1uYWljcyM0NTM5OTEjVG9iYWNjbyBTdG9yZXMjNDUzOTkKLW5haWNzIzQ1Mzk5OCNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBTdG9yZSBSZXRhaWxlcnMgKGV4Y2VwdCBUb2JhY2NvIFN0b3JlcykjNDUzOTkKLW5haWNzIzQ1NCNOb25zdG9yZSBSZXRhaWxlcnMjNDUKLW5haWNzIzQ1NDEjRWxlY3Ryb25pYyBTaG9wcGluZyBhbmQgTWFpbC1PcmRlciBIb3VzZXMjNDU0Ci1uYWljcyM0NTQxMSNFbGVjdHJvbmljIFNob3BwaW5nIGFuZCBNYWlsLU9yZGVyIEhvdXNlcyM0NTQxCi1uYWljcyM0NTQyI1ZlbmRpbmcgTWFjaGluZSBPcGVyYXRvcnMjNDU0Ci1uYWljcyM0NTQyMSNWZW5kaW5nIE1hY2hpbmUgT3BlcmF0b3JzIzQ1NDIKLW5haWNzIzQ1NDMjRGlyZWN0IFNlbGxpbmcgRXN0YWJsaXNobWVudHMjNDU0Ci1uYWljcyM0NTQzMSNGdWVsIERlYWxlcnMjNDU0MwotbmFpY3MjNDU0MzExI0hlYXRpbmcgT2lsIERlYWxlcnMjNDU0MzEKLW5haWNzIzQ1NDMxMiNMaXF1ZWZpZWQgUGV0cm9sZXVtIEdhcyAoQm90dGxlZCBHYXMpIERlYWxlcnMjNDU0MzEKLW5haWNzIzQ1NDMxOSNPdGhlciBGdWVsIERlYWxlcnMjNDU0MzEKLW5haWNzIzQ1NDM5I090aGVyIERpcmVjdCBTZWxsaW5nIEVzdGFibGlzaG1lbnRzIzQ1NDMKLW5haWNzIzQ4I1RyYW5zcG9ydGF0aW9uIGFuZCBXYXJlaG91c2luZyM0OAotbmFpY3MjNDgxI0FpciBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDgxMSNTY2hlZHVsZWQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MQotbmFpY3MjNDgxMTEjU2NoZWR1bGVkIEFpciBUcmFuc3BvcnRhdGlvbiM0ODExCi1uYWljcyM0ODExMTEjU2NoZWR1bGVkIFBhc3NlbmdlciBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMTEKLW5haWNzIzQ4MTExMiNTY2hlZHVsZWQgRnJlaWdodCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMTEKLW5haWNzIzQ4MTIjTm9uc2NoZWR1bGVkIEFpciBUcmFuc3BvcnRhdGlvbiM0ODEKLW5haWNzIzQ4MTIxI05vbnNjaGVkdWxlZCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMgotbmFpY3MjNDgxMjExI05vbnNjaGVkdWxlZCBDaGFydGVyZWQgUGFzc2VuZ2VyIEFpciBUcmFuc3BvcnRhdGlvbiM0ODEyMQotbmFpY3MjNDgxMjEyI05vbnNjaGVkdWxlZCBDaGFydGVyZWQgRnJlaWdodCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMjEKLW5haWNzIzQ4MTIxOSNPdGhlciBOb25zY2hlZHVsZWQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MTIxCi1uYWljcyM0ODIjUmFpbCBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDgyMSNSYWlsIFRyYW5zcG9ydGF0aW9uIzQ4MgotbmFpY3MjNDgyMTEjUmFpbCBUcmFuc3BvcnRhdGlvbiM0ODIxCi1uYWljcyM0ODIxMTEjTGluZS1IYXVsIFJhaWxyb2FkcyM0ODIxMQotbmFpY3MjNDgyMTEyI1Nob3J0IExpbmUgUmFpbHJvYWRzIzQ4MjExCi1uYWljcyM0ODMjV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4MzEjRGVlcCBTZWEsIENvYXN0YWwsIGFuZCBHcmVhdCBMYWtlcyBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODMKLW5haWNzIzQ4MzExI0RlZXAgU2VhLCBDb2FzdGFsLCBhbmQgR3JlYXQgTGFrZXMgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDgzMQotbmFpY3MjNDgzMTExI0RlZXAgU2VhIEZyZWlnaHQgVHJhbnNwb3J0YXRpb24jNDgzMTEKLW5haWNzIzQ4MzExMiNEZWVwIFNlYSBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDgzMTEKLW5haWNzIzQ4MzExMyNDb2FzdGFsIGFuZCBHcmVhdCBMYWtlcyBGcmVpZ2h0IFRyYW5zcG9ydGF0aW9uIzQ4MzExCi1uYWljcyM0ODMxMTQjQ29hc3RhbCBhbmQgR3JlYXQgTGFrZXMgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4MzExCi1uYWljcyM0ODMyI0lubGFuZCBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODMKLW5haWNzIzQ4MzIxI0lubGFuZCBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODMyCi1uYWljcyM0ODMyMTEjSW5sYW5kIFdhdGVyIEZyZWlnaHQgVHJhbnNwb3J0YXRpb24jNDgzMjEKLW5haWNzIzQ4MzIxMiNJbmxhbmQgV2F0ZXIgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4MzIxCi1uYWljcyM0ODQjVHJ1Y2sgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4NDEjR2VuZXJhbCBGcmVpZ2h0IFRydWNraW5nIzQ4NAotbmFpY3MjNDg0MTEjR2VuZXJhbCBGcmVpZ2h0IFRydWNraW5nLCBMb2NhbCM0ODQxCi1uYWljcyM0ODQxMiNHZW5lcmFsIEZyZWlnaHQgVHJ1Y2tpbmcsIExvbmctRGlzdGFuY2UjNDg0MQotbmFpY3MjNDg0MTIxI0dlbmVyYWwgRnJlaWdodCBUcnVja2luZywgTG9uZy1EaXN0YW5jZSwgVHJ1Y2tsb2FkIzQ4NDEyCi1uYWljcyM0ODQxMjIjR2VuZXJhbCBGcmVpZ2h0IFRydWNraW5nLCBMb25nLURpc3RhbmNlLCBMZXNzIFRoYW4gVHJ1Y2tsb2FkIzQ4NDEyCi1uYWljcyM0ODQyI1NwZWNpYWxpemVkIEZyZWlnaHQgVHJ1Y2tpbmcjNDg0Ci1uYWljcyM0ODQyMSNVc2VkIEhvdXNlaG9sZCBhbmQgT2ZmaWNlIEdvb2RzIE1vdmluZyM0ODQyCi1uYWljcyM0ODQyMiNTcGVjaWFsaXplZCBGcmVpZ2h0IChleGNlcHQgVXNlZCBHb29kcykgVHJ1Y2tpbmcsIExvY2FsIzQ4NDIKLW5haWNzIzQ4NDIzI1NwZWNpYWxpemVkIEZyZWlnaHQgKGV4Y2VwdCBVc2VkIEdvb2RzKSBUcnVja2luZywgTG9uZy1EaXN0YW5jZSM0ODQyCi1uYWljcyM0ODUjVHJhbnNpdCBhbmQgR3JvdW5kIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDg1MSNVcmJhbiBUcmFuc2l0IFN5c3RlbXMjNDg1Ci1uYWljcyM0ODUxMSNVcmJhbiBUcmFuc2l0IFN5c3RlbXMjNDg1MQotbmFpY3MjNDg1MTExI01peGVkIE1vZGUgVHJhbnNpdCBTeXN0ZW1zIzQ4NTExCi1uYWljcyM0ODUxMTIjQ29tbXV0ZXIgUmFpbCBTeXN0ZW1zIzQ4NTExCi1uYWljcyM0ODUxMTMjQnVzIGFuZCBPdGhlciBNb3RvciBWZWhpY2xlIFRyYW5zaXQgU3lzdGVtcyM0ODUxMQotbmFpY3MjNDg1MTE5I090aGVyIFVyYmFuIFRyYW5zaXQgU3lzdGVtcyM0ODUxMQotbmFpY3MjNDg1MiNJbnRlcnVyYmFuIGFuZCBSdXJhbCBCdXMgVHJhbnNwb3J0YXRpb24jNDg1Ci1uYWljcyM0ODUyMSNJbnRlcnVyYmFuIGFuZCBSdXJhbCBCdXMgVHJhbnNwb3J0YXRpb24jNDg1MgotbmFpY3MjNDg1MyNUYXhpIGFuZCBMaW1vdXNpbmUgU2VydmljZSM0ODUKLW5haWNzIzQ4NTMxI1RheGkgU2VydmljZSM0ODUzCi1uYWljcyM0ODUzMiNMaW1vdXNpbmUgU2VydmljZSM0ODUzCi1uYWljcyM0ODU0I1NjaG9vbCBhbmQgRW1wbG95ZWUgQnVzIFRyYW5zcG9ydGF0aW9uIzQ4NQotbmFpY3MjNDg1NDEjU2Nob29sIGFuZCBFbXBsb3llZSBCdXMgVHJhbnNwb3J0YXRpb24jNDg1NAotbmFpY3MjNDg1NSNDaGFydGVyIEJ1cyBJbmR1c3RyeSM0ODUKLW5haWNzIzQ4NTUxI0NoYXJ0ZXIgQnVzIEluZHVzdHJ5IzQ4NTUKLW5haWNzIzQ4NTkjT3RoZXIgVHJhbnNpdCBhbmQgR3JvdW5kIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0ODUKLW5haWNzIzQ4NTk5I090aGVyIFRyYW5zaXQgYW5kIEdyb3VuZCBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDg1OQotbmFpY3MjNDg1OTkxI1NwZWNpYWwgTmVlZHMgVHJhbnNwb3J0YXRpb24jNDg1OTkKLW5haWNzIzQ4NTk5OSNBbGwgT3RoZXIgVHJhbnNpdCBhbmQgR3JvdW5kIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0ODU5OQotbmFpY3MjNDg2I1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODYxI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIENydWRlIE9pbCM0ODYKLW5haWNzIzQ4NjExI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIENydWRlIE9pbCM0ODYxCi1uYWljcyM0ODYyI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIE5hdHVyYWwgR2FzIzQ4NgotbmFpY3MjNDg2MjEjUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24gb2YgTmF0dXJhbCBHYXMjNDg2MgotbmFpY3MjNDg2OSNPdGhlciBQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiM0ODYKLW5haWNzIzQ4NjkxI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIFJlZmluZWQgUGV0cm9sZXVtIFByb2R1Y3RzIzQ4NjkKLW5haWNzIzQ4Njk5I0FsbCBPdGhlciBQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiM0ODY5Ci1uYWljcyM0ODcjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDg3MSNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uLCBMYW5kIzQ4NwotbmFpY3MjNDg3MTEjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiwgTGFuZCM0ODcxCi1uYWljcyM0ODcyI1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24sIFdhdGVyIzQ4NwotbmFpY3MjNDg3MjEjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiwgV2F0ZXIjNDg3MgotbmFpY3MjNDg3OSNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uLCBPdGhlciM0ODcKLW5haWNzIzQ4Nzk5I1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24sIE90aGVyIzQ4NzkKLW5haWNzIzQ4OCNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODgxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4OAotbmFpY3MjNDg4MTEjQWlycG9ydCBPcGVyYXRpb25zIzQ4ODEKLW5haWNzIzQ4ODExMSNBaXIgVHJhZmZpYyBDb250cm9sIzQ4ODExCi1uYWljcyM0ODgxMTkjT3RoZXIgQWlycG9ydCBPcGVyYXRpb25zIzQ4ODExCi1uYWljcyM0ODgxOSNPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEFpciBUcmFuc3BvcnRhdGlvbiM0ODgxCi1uYWljcyM0ODgyI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgUmFpbCBUcmFuc3BvcnRhdGlvbiM0ODgKLW5haWNzIzQ4ODIxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgUmFpbCBUcmFuc3BvcnRhdGlvbiM0ODgyCi1uYWljcyM0ODgzI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDg4Ci1uYWljcyM0ODgzMSNQb3J0IGFuZCBIYXJib3IgT3BlcmF0aW9ucyM0ODgzCi1uYWljcyM0ODgzMiNNYXJpbmUgQ2FyZ28gSGFuZGxpbmcjNDg4MwotbmFpY3MjNDg4MzMjTmF2aWdhdGlvbmFsIFNlcnZpY2VzIHRvIFNoaXBwaW5nIzQ4ODMKLW5haWNzIzQ4ODM5I090aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDg4MwotbmFpY3MjNDg4NCNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFJvYWQgVHJhbnNwb3J0YXRpb24jNDg4Ci1uYWljcyM0ODg0MSNNb3RvciBWZWhpY2xlIFRvd2luZyM0ODg0Ci1uYWljcyM0ODg0OSNPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFJvYWQgVHJhbnNwb3J0YXRpb24jNDg4NAotbmFpY3MjNDg4NSNGcmVpZ2h0IFRyYW5zcG9ydGF0aW9uIEFycmFuZ2VtZW50IzQ4OAotbmFpY3MjNDg4NTEjRnJlaWdodCBUcmFuc3BvcnRhdGlvbiBBcnJhbmdlbWVudCM0ODg1Ci1uYWljcyM0ODg5I090aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgVHJhbnNwb3J0YXRpb24jNDg4Ci1uYWljcyM0ODg5OSNPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFRyYW5zcG9ydGF0aW9uIzQ4ODkKLW5haWNzIzQ4ODk5MSNQYWNraW5nIGFuZCBDcmF0aW5nIzQ4ODk5Ci1uYWljcyM0ODg5OTkjQWxsIE90aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgVHJhbnNwb3J0YXRpb24jNDg4OTkKLW5haWNzIzQ5I1RyYW5zcG9ydGF0aW9uIGFuZCBXYXJlaG91c2luZyM0OQotbmFpY3MjNDkxI1Bvc3RhbCBTZXJ2aWNlIzQ5Ci1uYWljcyM0OTExI1Bvc3RhbCBTZXJ2aWNlIzQ5MQotbmFpY3MjNDkxMTEjUG9zdGFsIFNlcnZpY2UjNDkxMQotbmFpY3MjNDkyI0NvdXJpZXJzIGFuZCBNZXNzZW5nZXJzIzQ5Ci1uYWljcyM0OTIxI0NvdXJpZXJzIzQ5MgotbmFpY3MjNDkyMTEjQ291cmllcnMjNDkyMQotbmFpY3MjNDkyMiNMb2NhbCBNZXNzZW5nZXJzIGFuZCBMb2NhbCBEZWxpdmVyeSM0OTIKLW5haWNzIzQ5MjIxI0xvY2FsIE1lc3NlbmdlcnMgYW5kIExvY2FsIERlbGl2ZXJ5IzQ5MjIKLW5haWNzIzQ5MyNXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OQotbmFpY3MjNDkzMSNXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OTMKLW5haWNzIzQ5MzExI0dlbmVyYWwgV2FyZWhvdXNpbmcgYW5kIFN0b3JhZ2UjNDkzMQotbmFpY3MjNDkzMTIjUmVmcmlnZXJhdGVkIFdhcmVob3VzaW5nIGFuZCBTdG9yYWdlIzQ5MzEKLW5haWNzIzQ5MzEzI0Zhcm0gUHJvZHVjdCBXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OTMxCi1uYWljcyM0OTMxOSNPdGhlciBXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OTMxCi1uYWljcyM1MSNJbmZvcm1hdGlvbiM1MQotbmFpY3MjNTExI1B1Ymxpc2hpbmcgSW5kdXN0cmllcyM1MQotbmFpY3MjNTExMSNOZXdzcGFwZXIsIFBlcmlvZGljYWwsIEJvb2ssIGFuZCBEYXRhYmFzZSBQdWJsaXNoZXJzIzUxMQotbmFpY3MjNTExMTEjTmV3c3BhcGVyIFB1Ymxpc2hlcnMjNTExMQotbmFpY3MjNTExMTIjUGVyaW9kaWNhbCBQdWJsaXNoZXJzIzUxMTEKLW5haWNzIzUxMTEzI0Jvb2sgUHVibGlzaGVycyM1MTExCi1uYWljcyM1MTExNCNEYXRhYmFzZSBhbmQgRGlyZWN0b3J5IFB1Ymxpc2hlcnMjNTExMQotbmFpY3MjNTExMTkjT3RoZXIgUHVibGlzaGVycyM1MTExCi1uYWljcyM1MTExOTEjR3JlZXRpbmcgQ2FyZCBQdWJsaXNoZXJzIzUxMTE5Ci1uYWljcyM1MTExOTkjQWxsIE90aGVyIFB1Ymxpc2hlcnMjNTExMTkKLW5haWNzIzUxMTIjU29mdHdhcmUgUHVibGlzaGVycyM1MTEKLW5haWNzIzUxMTIxI1NvZnR3YXJlIFB1Ymxpc2hlcnMjNTExMgotbmFpY3MjNTEyI01vdGlvbiBQaWN0dXJlIGFuZCBTb3VuZCBSZWNvcmRpbmcgSW5kdXN0cmllcyM1MQotbmFpY3MjNTEyMSNNb3Rpb24gUGljdHVyZSBhbmQgVmlkZW8gSW5kdXN0cmllcyM1MTIKLW5haWNzIzUxMjExI01vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBQcm9kdWN0aW9uIzUxMjEKLW5haWNzIzUxMjEyI01vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBEaXN0cmlidXRpb24jNTEyMQotbmFpY3MjNTEyMTMjTW90aW9uIFBpY3R1cmUgYW5kIFZpZGVvIEV4aGliaXRpb24jNTEyMQotbmFpY3MjNTEyMTMxI01vdGlvbiBQaWN0dXJlIFRoZWF0ZXJzIChleGNlcHQgRHJpdmUtSW5zKSM1MTIxMwotbmFpY3MjNTEyMTMyI0RyaXZlLUluIE1vdGlvbiBQaWN0dXJlIFRoZWF0ZXJzIzUxMjEzCi1uYWljcyM1MTIxOSNQb3N0cHJvZHVjdGlvbiBTZXJ2aWNlcyBhbmQgT3RoZXIgTW90aW9uIFBpY3R1cmUgYW5kIFZpZGVvIEluZHVzdHJpZXMjNTEyMQotbmFpY3MjNTEyMTkxI1RlbGVwcm9kdWN0aW9uIGFuZCBPdGhlciBQb3N0cHJvZHVjdGlvbiBTZXJ2aWNlcyM1MTIxOQotbmFpY3MjNTEyMTk5I090aGVyIE1vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBJbmR1c3RyaWVzIzUxMjE5Ci1uYWljcyM1MTIyI1NvdW5kIFJlY29yZGluZyBJbmR1c3RyaWVzIzUxMgotbmFpY3MjNTEyMjEjUmVjb3JkIFByb2R1Y3Rpb24jNTEyMgotbmFpY3MjNTEyMjIjSW50ZWdyYXRlZCBSZWNvcmQgUHJvZHVjdGlvbi9EaXN0cmlidXRpb24jNTEyMgotbmFpY3MjNTEyMjMjTXVzaWMgUHVibGlzaGVycyM1MTIyCi1uYWljcyM1MTIyNCNTb3VuZCBSZWNvcmRpbmcgU3R1ZGlvcyM1MTIyCi1uYWljcyM1MTIyOSNPdGhlciBTb3VuZCBSZWNvcmRpbmcgSW5kdXN0cmllcyM1MTIyCi1uYWljcyM1MTMjQnJvYWRjYXN0aW5nIGFuZCBUZWxlY29tbXVuaWNhdGlvbnMjNTEKLW5haWNzIzUxMzEjUmFkaW8gYW5kIFRlbGV2aXNpb24gQnJvYWRjYXN0aW5nIzUxMwotbmFpY3MjNTEzMTEjUmFkaW8gQnJvYWRjYXN0aW5nIzUxMzEKLW5haWNzIzUxMzExMSNSYWRpbyBOZXR3b3JrcyM1MTMxMQotbmFpY3MjNTEzMTEyI1JhZGlvIFN0YXRpb25zIzUxMzExCi1uYWljcyM1MTMxMiNUZWxldmlzaW9uIEJyb2FkY2FzdGluZyM1MTMxCi1uYWljcyM1MTMyI0NhYmxlIE5ldHdvcmtzIGFuZCBQcm9ncmFtIERpc3RyaWJ1dGlvbiM1MTMKLW5haWNzIzUxMzIxI0NhYmxlIE5ldHdvcmtzIzUxMzIKLW5haWNzIzUxMzIyI0NhYmxlIGFuZCBPdGhlciBQcm9ncmFtIERpc3RyaWJ1dGlvbiM1MTMyCi1uYWljcyM1MTMzI1RlbGVjb21tdW5pY2F0aW9ucyM1MTMKLW5haWNzIzUxMzMxI1dpcmVkIFRlbGVjb21tdW5pY2F0aW9ucyBDYXJyaWVycyM1MTMzCi1uYWljcyM1MTMzMiNXaXJlbGVzcyBUZWxlY29tbXVuaWNhdGlvbnMgQ2FycmllcnMgKGV4Y2VwdCBTYXRlbGxpdGUpIzUxMzMKLW5haWNzIzUxMzMyMSNQYWdpbmcjNTEzMzIKLW5haWNzIzUxMzMyMiNDZWxsdWxhciBhbmQgT3RoZXIgV2lyZWxlc3MgVGVsZWNvbW11bmljYXRpb25zIzUxMzMyCi1uYWljcyM1MTMzMyNUZWxlY29tbXVuaWNhdGlvbnMgUmVzZWxsZXJzIzUxMzMKLW5haWNzIzUxMzM0I1NhdGVsbGl0ZSBUZWxlY29tbXVuaWNhdGlvbnMjNTEzMwotbmFpY3MjNTEzMzkjT3RoZXIgVGVsZWNvbW11bmljYXRpb25zIzUxMzMKLW5haWNzIzUxNCNJbmZvcm1hdGlvbiBTZXJ2aWNlcyBhbmQgRGF0YSBQcm9jZXNzaW5nIFNlcnZpY2VzIzUxCi1uYWljcyM1MTQxI0luZm9ybWF0aW9uIFNlcnZpY2VzIzUxNAotbmFpY3MjNTE0MTEjTmV3cyBTeW5kaWNhdGVzIzUxNDEKLW5haWNzIzUxNDEyI0xpYnJhcmllcyBhbmQgQXJjaGl2ZXMjNTE0MQotbmFpY3MjNTE0MTkjT3RoZXIgSW5mb3JtYXRpb24gU2VydmljZXMjNTE0MQotbmFpY3MjNTE0MTkxI09uLUxpbmUgSW5mb3JtYXRpb24gU2VydmljZXMjNTE0MTkKLW5haWNzIzUxNDE5OSNBbGwgT3RoZXIgSW5mb3JtYXRpb24gU2VydmljZXMjNTE0MTkKLW5haWNzIzUxNDIjRGF0YSBQcm9jZXNzaW5nIFNlcnZpY2VzIzUxNAotbmFpY3MjNTE0MjEjRGF0YSBQcm9jZXNzaW5nIFNlcnZpY2VzIzUxNDIKLW5haWNzIzUyI0ZpbmFuY2UgYW5kIEluc3VyYW5jZSM1MgotbmFpY3MjNTIxI01vbmV0YXJ5IEF1dGhvcml0aWVzIC0gQ2VudHJhbCBCYW5rIzUyCi1uYWljcyM1MjExI01vbmV0YXJ5IEF1dGhvcml0aWVzIC0gQ2VudHJhbCBCYW5rIzUyMQotbmFpY3MjNTIxMTEjTW9uZXRhcnkgQXV0aG9yaXRpZXMgLSBDZW50cmFsIEJhbmsjNTIxMQotbmFpY3MjNTIyI0NyZWRpdCBJbnRlcm1lZGlhdGlvbiBhbmQgUmVsYXRlZCBBY3Rpdml0aWVzIzUyCi1uYWljcyM1MjIxI0RlcG9zaXRvcnkgQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMgotbmFpY3MjNTIyMTEjQ29tbWVyY2lhbCBCYW5raW5nIzUyMjEKLW5haWNzIzUyMjEyI1NhdmluZ3MgSW5zdGl0dXRpb25zIzUyMjEKLW5haWNzIzUyMjEzI0NyZWRpdCBVbmlvbnMjNTIyMQotbmFpY3MjNTIyMTkjT3RoZXIgRGVwb3NpdG9yeSBDcmVkaXQgSW50ZXJtZWRpYXRpb24jNTIyMQotbmFpY3MjNTIyMiNOb25kZXBvc2l0b3J5IENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIKLW5haWNzIzUyMjIxI0NyZWRpdCBDYXJkIElzc3VpbmcjNTIyMgotbmFpY3MjNTIyMjIjU2FsZXMgRmluYW5jaW5nIzUyMjIKLW5haWNzIzUyMjI5I090aGVyIE5vbmRlcG9zaXRvcnkgQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMjIKLW5haWNzIzUyMjI5MSNDb25zdW1lciBMZW5kaW5nIzUyMjI5Ci1uYWljcyM1MjIyOTIjUmVhbCBFc3RhdGUgQ3JlZGl0IzUyMjI5Ci1uYWljcyM1MjIyOTMjSW50ZXJuYXRpb25hbCBUcmFkZSBGaW5hbmNpbmcjNTIyMjkKLW5haWNzIzUyMjI5NCNTZWNvbmRhcnkgTWFya2V0IEZpbmFuY2luZyM1MjIyOQotbmFpY3MjNTIyMjk4I0FsbCBPdGhlciBOb25kZXBvc2l0b3J5IENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIyOQotbmFpY3MjNTIyMyNBY3Rpdml0aWVzIFJlbGF0ZWQgdG8gQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMgotbmFpY3MjNTIyMzEjTW9ydGdhZ2UgYW5kIE5vbm1vcnRnYWdlIExvYW4gQnJva2VycyM1MjIzCi1uYWljcyM1MjIzMiNGaW5hbmNpYWwgVHJhbnNhY3Rpb25zIFByb2Nlc3NpbmcsIFJlc2VydmUsIGFuZCBDbGVhcmluZ2hvdXNlIEFjdGl2aXRpZXMjNTIyMwotbmFpY3MjNTIyMzkjT3RoZXIgQWN0aXZpdGllcyBSZWxhdGVkIHRvIENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIzCi1uYWljcyM1MjMjU2VjdXJpdGllcywgQ29tbW9kaXR5IENvbnRyYWN0cywgYW5kIE90aGVyIEZpbmFuY2lhbCBJbnZlc3RtZW50cyBhbmQgUmVsYXRlZCBBY3Rpdml0aWVzIzUyCi1uYWljcyM1MjMxI1NlY3VyaXRpZXMgYW5kIENvbW1vZGl0eSBDb250cmFjdHMgSW50ZXJtZWRpYXRpb24gYW5kIEJyb2tlcmFnZSM1MjMKLW5haWNzIzUyMzExI0ludmVzdG1lbnQgQmFua2luZyBhbmQgU2VjdXJpdGllcyBEZWFsaW5nIzUyMzEKLW5haWNzIzUyMzEyI1NlY3VyaXRpZXMgQnJva2VyYWdlIzUyMzEKLW5haWNzIzUyMzEzI0NvbW1vZGl0eSBDb250cmFjdHMgRGVhbGluZyM1MjMxCi1uYWljcyM1MjMxNCNDb21tb2RpdHkgQ29udHJhY3RzIEJyb2tlcmFnZSM1MjMxCi1uYWljcyM1MjMyI1NlY3VyaXRpZXMgYW5kIENvbW1vZGl0eSBFeGNoYW5nZXMjNTIzCi1uYWljcyM1MjMyMSNTZWN1cml0aWVzIGFuZCBDb21tb2RpdHkgRXhjaGFuZ2VzIzUyMzIKLW5haWNzIzUyMzkjT3RoZXIgRmluYW5jaWFsIEludmVzdG1lbnQgQWN0aXZpdGllcyM1MjMKLW5haWNzIzUyMzkxI01pc2NlbGxhbmVvdXMgSW50ZXJtZWRpYXRpb24jNTIzOQotbmFpY3MjNTIzOTIjUG9ydGZvbGlvIE1hbmFnZW1lbnQjNTIzOQotbmFpY3MjNTIzOTMjSW52ZXN0bWVudCBBZHZpY2UjNTIzOQotbmFpY3MjNTIzOTkjQWxsIE90aGVyIEZpbmFuY2lhbCBJbnZlc3RtZW50IEFjdGl2aXRpZXMjNTIzOQotbmFpY3MjNTIzOTkxI1RydXN0LCBGaWR1Y2lhcnksIGFuZCBDdXN0b2R5IEFjdGl2aXRpZXMjNTIzOTkKLW5haWNzIzUyMzk5OSNNaXNjZWxsYW5lb3VzIEZpbmFuY2lhbCBJbnZlc3RtZW50IEFjdGl2aXRpZXMjNTIzOTkKLW5haWNzIzUyNCNJbnN1cmFuY2UgQ2FycmllcnMgYW5kIFJlbGF0ZWQgQWN0aXZpdGllcyM1MgotbmFpY3MjNTI0MSNJbnN1cmFuY2UgQ2FycmllcnMjNTI0Ci1uYWljcyM1MjQxMSNEaXJlY3QgTGlmZSwgSGVhbHRoLCBhbmQgTWVkaWNhbCBJbnN1cmFuY2UgQ2FycmllcnMjNTI0MQotbmFpY3MjNTI0MTEzI0RpcmVjdCBMaWZlIEluc3VyYW5jZSBDYXJyaWVycyM1MjQxMQotbmFpY3MjNTI0MTE0I0RpcmVjdCBIZWFsdGggYW5kIE1lZGljYWwgSW5zdXJhbmNlIENhcnJpZXJzIzUyNDExCi1uYWljcyM1MjQxMiNEaXJlY3QgSW5zdXJhbmNlIChleGNlcHQgTGlmZSwgSGVhbHRoLCBhbmQgTWVkaWNhbCkgQ2FycmllcnMjNTI0MQotbmFpY3MjNTI0MTI2I0RpcmVjdCBQcm9wZXJ0eSBhbmQgQ2FzdWFsdHkgSW5zdXJhbmNlIENhcnJpZXJzIzUyNDEyCi1uYWljcyM1MjQxMjcjRGlyZWN0IFRpdGxlIEluc3VyYW5jZSBDYXJyaWVycyM1MjQxMgotbmFpY3MjNTI0MTI4I090aGVyIERpcmVjdCBJbnN1cmFuY2UgKGV4Y2VwdCBMaWZlLCBIZWFsdGgsIGFuZCBNZWRpY2FsKSBDYXJyaWVycyM1MjQxMgotbmFpY3MjNTI0MTMjUmVpbnN1cmFuY2UgQ2FycmllcnMjNTI0MQotbmFpY3MjNTI0MiNBZ2VuY2llcywgQnJva2VyYWdlcywgYW5kIE90aGVyIEluc3VyYW5jZSBSZWxhdGVkIEFjdGl2aXRpZXMjNTI0Ci1uYWljcyM1MjQyMSNJbnN1cmFuY2UgQWdlbmNpZXMgYW5kIEJyb2tlcmFnZXMjNTI0MgotbmFpY3MjNTI0MjkjT3RoZXIgSW5zdXJhbmNlIFJlbGF0ZWQgQWN0aXZpdGllcyM1MjQyCi1uYWljcyM1MjQyOTEjQ2xhaW1zIEFkanVzdGluZyM1MjQyOQotbmFpY3MjNTI0MjkyI1RoaXJkIFBhcnR5IEFkbWluaXN0cmF0aW9uIG9mIEluc3VyYW5jZSBhbmQgUGVuc2lvbiBGdW5kcyM1MjQyOQotbmFpY3MjNTI0Mjk4I0FsbCBPdGhlciBJbnN1cmFuY2UgUmVsYXRlZCBBY3Rpdml0aWVzIzUyNDI5Ci1uYWljcyM1MjUjRnVuZHMsIFRydXN0cywgYW5kIE90aGVyIEZpbmFuY2lhbCBWZWhpY2xlcyM1MgotbmFpY3MjNTI1MSNJbnN1cmFuY2UgYW5kIEVtcGxveWVlIEJlbmVmaXQgRnVuZHMjNTI1Ci1uYWljcyM1MjUxMSNQZW5zaW9uIEZ1bmRzIzUyNTEKLW5haWNzIzUyNTEyI0hlYWx0aCBhbmQgV2VsZmFyZSBGdW5kcyM1MjUxCi1uYWljcyM1MjUxOSNPdGhlciBJbnN1cmFuY2UgRnVuZHMjNTI1MQotbmFpY3MjNTI1OSNPdGhlciBJbnZlc3RtZW50IFBvb2xzIGFuZCBGdW5kcyM1MjUKLW5haWNzIzUyNTkxI09wZW4tRW5kIEludmVzdG1lbnQgRnVuZHMjNTI1OQotbmFpY3MjNTI1OTIjVHJ1c3RzLCBFc3RhdGVzLCBhbmQgQWdlbmN5IEFjY291bnRzIzUyNTkKLW5haWNzIzUyNTkzI1JlYWwgRXN0YXRlIEludmVzdG1lbnQgVHJ1c3RzIzUyNTkKLW5haWNzIzUyNTk5I090aGVyIEZpbmFuY2lhbCBWZWhpY2xlcyM1MjU5Ci1uYWljcyM1MyNSZWFsIEVzdGF0ZSBhbmQgUmVudGFsIGFuZCBMZWFzaW5nIzUzCi1uYWljcyM1MzEjUmVhbCBFc3RhdGUjNTMKLW5haWNzIzUzMTEjTGVzc29ycyBvZiBSZWFsIEVzdGF0ZSM1MzEKLW5haWNzIzUzMTExI0xlc3NvcnMgb2YgUmVzaWRlbnRpYWwgQnVpbGRpbmdzIGFuZCBEd2VsbGluZ3MjNTMxMQotbmFpY3MjNTMxMTIjTGVzc29ycyBvZiBOb25yZXNpZGVudGlhbCBCdWlsZGluZ3MgKGV4Y2VwdCBNaW5pd2FyZWhvdXNlcykjNTMxMQotbmFpY3MjNTMxMTMjTGVzc29ycyBvZiBNaW5pd2FyZWhvdXNlcyBhbmQgU2VsZi1TdG9yYWdlIFVuaXRzIzUzMTEKLW5haWNzIzUzMTE5I0xlc3NvcnMgb2YgT3RoZXIgUmVhbCBFc3RhdGUgUHJvcGVydHkjNTMxMQotbmFpY3MjNTMxMiNPZmZpY2VzIG9mIFJlYWwgRXN0YXRlIEFnZW50cyBhbmQgQnJva2VycyM1MzEKLW5haWNzIzUzMTIxI09mZmljZXMgb2YgUmVhbCBFc3RhdGUgQWdlbnRzIGFuZCBCcm9rZXJzIzUzMTIKLW5haWNzIzUzMTMjQWN0aXZpdGllcyBSZWxhdGVkIHRvIFJlYWwgRXN0YXRlIzUzMQotbmFpY3MjNTMxMzEjUmVhbCBFc3RhdGUgUHJvcGVydHkgTWFuYWdlcnMjNTMxMwotbmFpY3MjNTMxMzExI1Jlc2lkZW50aWFsIFByb3BlcnR5IE1hbmFnZXJzIzUzMTMxCi1uYWljcyM1MzEzMTIjTm9ucmVzaWRlbnRpYWwgUHJvcGVydHkgTWFuYWdlcnMjNTMxMzEKLW5haWNzIzUzMTMyI09mZmljZXMgb2YgUmVhbCBFc3RhdGUgQXBwcmFpc2VycyM1MzEzCi1uYWljcyM1MzEzOSNPdGhlciBBY3Rpdml0aWVzIFJlbGF0ZWQgdG8gUmVhbCBFc3RhdGUjNTMxMwotbmFpY3MjNTMyI1JlbnRhbCBhbmQgTGVhc2luZyBTZXJ2aWNlcyM1MwotbmFpY3MjNTMyMSNBdXRvbW90aXZlIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyCi1uYWljcyM1MzIxMSNQYXNzZW5nZXIgQ2FyIFJlbnRhbCBhbmQgTGVhc2luZyM1MzIxCi1uYWljcyM1MzIxMTEjUGFzc2VuZ2VyIENhciBSZW50YWwjNTMyMTEKLW5haWNzIzUzMjExMiNQYXNzZW5nZXIgQ2FyIExlYXNpbmcjNTMyMTEKLW5haWNzIzUzMjEyI1RydWNrLCBVdGlsaXR5IFRyYWlsZXIsIGFuZCBSViAoUmVjcmVhdGlvbmFsIFZlaGljbGUpIFJlbnRhbCBhbmQgTGVhc2luZyM1MzIxCi1uYWljcyM1MzIyI0NvbnN1bWVyIEdvb2RzIFJlbnRhbCM1MzIKLW5haWNzIzUzMjIxI0NvbnN1bWVyIEVsZWN0cm9uaWNzIGFuZCBBcHBsaWFuY2VzIFJlbnRhbCM1MzIyCi1uYWljcyM1MzIyMiNGb3JtYWwgV2VhciBhbmQgQ29zdHVtZSBSZW50YWwjNTMyMgotbmFpY3MjNTMyMjMjVmlkZW8gVGFwZSBhbmQgRGlzYyBSZW50YWwjNTMyMgotbmFpY3MjNTMyMjkjT3RoZXIgQ29uc3VtZXIgR29vZHMgUmVudGFsIzUzMjIKLW5haWNzIzUzMjI5MSNIb21lIEhlYWx0aCBFcXVpcG1lbnQgUmVudGFsIzUzMjI5Ci1uYWljcyM1MzIyOTIjUmVjcmVhdGlvbmFsIEdvb2RzIFJlbnRhbCM1MzIyOQotbmFpY3MjNTMyMjk5I0FsbCBPdGhlciBDb25zdW1lciBHb29kcyBSZW50YWwjNTMyMjkKLW5haWNzIzUzMjMjR2VuZXJhbCBSZW50YWwgQ2VudGVycyM1MzIKLW5haWNzIzUzMjMxI0dlbmVyYWwgUmVudGFsIENlbnRlcnMjNTMyMwotbmFpY3MjNTMyNCNDb21tZXJjaWFsIGFuZCBJbmR1c3RyaWFsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzIKLW5haWNzIzUzMjQxI0NvbnN0cnVjdGlvbiwgVHJhbnNwb3J0YXRpb24sIE1pbmluZywgYW5kIEZvcmVzdHJ5IE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzI0Ci1uYWljcyM1MzI0MTEjQ29tbWVyY2lhbCBBaXIsIFJhaWwsIGFuZCBXYXRlciBUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgUmVudGFsIGFuZCBMZWFzaW5nIzUzMjQxCi1uYWljcyM1MzI0MTIjQ29uc3RydWN0aW9uLCBNaW5pbmcsIGFuZCBGb3Jlc3RyeSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyNDEKLW5haWNzIzUzMjQyI09mZmljZSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyNAotbmFpY3MjNTMyNDkjT3RoZXIgQ29tbWVyY2lhbCBhbmQgSW5kdXN0cmlhbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyNAotbmFpY3MjNTMzI0xlc3NvcnMgb2YgTm9uZmluYW5jaWFsIEludGFuZ2libGUgQXNzZXRzIChleGNlcHQgQ29weXJpZ2h0ZWQgV29ya3MpIzUzCi1uYWljcyM1MzMxI0xlc3NvcnMgb2YgTm9uZmluYW5jaWFsIEludGFuZ2libGUgQXNzZXRzIChleGNlcHQgQ29weXJpZ2h0ZWQgV29ya3MpIzUzMwotbmFpY3MjNTMzMTEjTGVzc29ycyBvZiBOb25maW5hbmNpYWwgSW50YW5naWJsZSBBc3NldHMgKGV4Y2VwdCBDb3B5cmlnaHRlZCBXb3JrcykjNTMzMQotbmFpY3MjNTQjUHJvZmVzc2lvbmFsLCBTY2llbnRpZmljLCBhbmQgVGVjaG5pY2FsIFNlcnZpY2VzIzU0Ci1uYWljcyM1NDEjUHJvZmVzc2lvbmFsLCBTY2llbnRpZmljLCBhbmQgVGVjaG5pY2FsIFNlcnZpY2VzIzU0Ci1uYWljcyM1NDExI0xlZ2FsIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxMTEjT2ZmaWNlcyBvZiBMYXd5ZXJzIzU0MTEKLW5haWNzIzU0MTEyI09mZmljZXMgb2YgTm90YXJpZXMjNTQxMQotbmFpY3MjNTQxMTkjT3RoZXIgTGVnYWwgU2VydmljZXMjNTQxMQotbmFpY3MjNTQxMTkxI1RpdGxlIEFic3RyYWN0IGFuZCBTZXR0bGVtZW50IE9mZmljZXMjNTQxMTkKLW5haWNzIzU0MTE5OSNBbGwgT3RoZXIgTGVnYWwgU2VydmljZXMjNTQxMTkKLW5haWNzIzU0MTIjQWNjb3VudGluZywgVGF4IFByZXBhcmF0aW9uLCBCb29ra2VlcGluZywgYW5kIFBheXJvbGwgU2VydmljZXMjNTQxCi1uYWljcyM1NDEyMSNBY2NvdW50aW5nLCBUYXggUHJlcGFyYXRpb24sIEJvb2trZWVwaW5nLCBhbmQgUGF5cm9sbCBTZXJ2aWNlcyM1NDEyCi1uYWljcyM1NDEyMTEjT2ZmaWNlcyBvZiBDZXJ0aWZpZWQgUHVibGljIEFjY291bnRhbnRzIzU0MTIxCi1uYWljcyM1NDEyMTMjVGF4IFByZXBhcmF0aW9uIFNlcnZpY2VzIzU0MTIxCi1uYWljcyM1NDEyMTQjUGF5cm9sbCBTZXJ2aWNlcyM1NDEyMQotbmFpY3MjNTQxMjE5I090aGVyIEFjY291bnRpbmcgU2VydmljZXMjNTQxMjEKLW5haWNzIzU0MTMjQXJjaGl0ZWN0dXJhbCwgRW5naW5lZXJpbmcsIGFuZCBSZWxhdGVkIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxMzEjQXJjaGl0ZWN0dXJhbCBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzMiNMYW5kc2NhcGUgQXJjaGl0ZWN0dXJhbCBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzMyNFbmdpbmVlcmluZyBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzNCNEcmFmdGluZyBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzNSNCdWlsZGluZyBJbnNwZWN0aW9uIFNlcnZpY2VzIzU0MTMKLW5haWNzIzU0MTM2I0dlb3BoeXNpY2FsIFN1cnZleWluZyBhbmQgTWFwcGluZyBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzNyNTdXJ2ZXlpbmcgYW5kIE1hcHBpbmcgKGV4Y2VwdCBHZW9waHlzaWNhbCkgU2VydmljZXMjNTQxMwotbmFpY3MjNTQxMzgjVGVzdGluZyBMYWJvcmF0b3JpZXMjNTQxMwotbmFpY3MjNTQxNCNTcGVjaWFsaXplZCBEZXNpZ24gU2VydmljZXMjNTQxCi1uYWljcyM1NDE0MSNJbnRlcmlvciBEZXNpZ24gU2VydmljZXMjNTQxNAotbmFpY3MjNTQxNDIjSW5kdXN0cmlhbCBEZXNpZ24gU2VydmljZXMjNTQxNAotbmFpY3MjNTQxNDMjR3JhcGhpYyBEZXNpZ24gU2VydmljZXMjNTQxNAotbmFpY3MjNTQxNDkjT3RoZXIgU3BlY2lhbGl6ZWQgRGVzaWduIFNlcnZpY2VzIzU0MTQKLW5haWNzIzU0MTUjQ29tcHV0ZXIgU3lzdGVtcyBEZXNpZ24gYW5kIFJlbGF0ZWQgU2VydmljZXMjNTQxCi1uYWljcyM1NDE1MSNDb21wdXRlciBTeXN0ZW1zIERlc2lnbiBhbmQgUmVsYXRlZCBTZXJ2aWNlcyM1NDE1Ci1uYWljcyM1NDE1MTEjQ3VzdG9tIENvbXB1dGVyIFByb2dyYW1taW5nIFNlcnZpY2VzIzU0MTUxCi1uYWljcyM1NDE1MTIjQ29tcHV0ZXIgU3lzdGVtcyBEZXNpZ24gU2VydmljZXMjNTQxNTEKLW5haWNzIzU0MTUxMyNDb21wdXRlciBGYWNpbGl0aWVzIE1hbmFnZW1lbnQgU2VydmljZXMjNTQxNTEKLW5haWNzIzU0MTUxOSNPdGhlciBDb21wdXRlciBSZWxhdGVkIFNlcnZpY2VzIzU0MTUxCi1uYWljcyM1NDE2I01hbmFnZW1lbnQsIFNjaWVudGlmaWMsIGFuZCBUZWNobmljYWwgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTYxI01hbmFnZW1lbnQgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2Ci1uYWljcyM1NDE2MTEjQWRtaW5pc3RyYXRpdmUgTWFuYWdlbWVudCBhbmQgR2VuZXJhbCBNYW5hZ2VtZW50IENvbnN1bHRpbmcgU2VydmljZXMjNTQxNjEKLW5haWNzIzU0MTYxMiNIdW1hbiBSZXNvdXJjZXMgYW5kIEV4ZWN1dGl2ZSBTZWFyY2ggQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2MQotbmFpY3MjNTQxNjEzI01hcmtldGluZyBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYxCi1uYWljcyM1NDE2MTQjUHJvY2VzcywgUGh5c2ljYWwgRGlzdHJpYnV0aW9uLCBhbmQgTG9naXN0aWNzIENvbnN1bHRpbmcgU2VydmljZXMjNTQxNjEKLW5haWNzIzU0MTYxOCNPdGhlciBNYW5hZ2VtZW50IENvbnN1bHRpbmcgU2VydmljZXMjNTQxNjEKLW5haWNzIzU0MTYyI0Vudmlyb25tZW50YWwgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2Ci1uYWljcyM1NDE2OSNPdGhlciBTY2llbnRpZmljIGFuZCBUZWNobmljYWwgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2Ci1uYWljcyM1NDE3I1NjaWVudGlmaWMgUmVzZWFyY2ggYW5kIERldmVsb3BtZW50IFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxNzEjUmVzZWFyY2ggYW5kIERldmVsb3BtZW50IGluIHRoZSBQaHlzaWNhbCwgRW5naW5lZXJpbmcsIGFuZCBMaWZlIFNjaWVuY2VzIzU0MTcKLW5haWNzIzU0MTcyI1Jlc2VhcmNoIGFuZCBEZXZlbG9wbWVudCBpbiB0aGUgU29jaWFsIFNjaWVuY2VzIGFuZCBIdW1hbml0aWVzIzU0MTcKLW5haWNzIzU0MTgjQWR2ZXJ0aXNpbmcgYW5kIFJlbGF0ZWQgU2VydmljZXMjNTQxCi1uYWljcyM1NDE4MSNBZHZlcnRpc2luZyBBZ2VuY2llcyM1NDE4Ci1uYWljcyM1NDE4MiNQdWJsaWMgUmVsYXRpb25zIEFnZW5jaWVzIzU0MTgKLW5haWNzIzU0MTgzI01lZGlhIEJ1eWluZyBBZ2VuY2llcyM1NDE4Ci1uYWljcyM1NDE4NCNNZWRpYSBSZXByZXNlbnRhdGl2ZXMjNTQxOAotbmFpY3MjNTQxODUjRGlzcGxheSBBZHZlcnRpc2luZyM1NDE4Ci1uYWljcyM1NDE4NiNEaXJlY3QgTWFpbCBBZHZlcnRpc2luZyM1NDE4Ci1uYWljcyM1NDE4NyNBZHZlcnRpc2luZyBNYXRlcmlhbCBEaXN0cmlidXRpb24gU2VydmljZXMjNTQxOAotbmFpY3MjNTQxODkjT3RoZXIgU2VydmljZXMgUmVsYXRlZCB0byBBZHZlcnRpc2luZyM1NDE4Ci1uYWljcyM1NDE5I090aGVyIFByb2Zlc3Npb25hbCwgU2NpZW50aWZpYywgYW5kIFRlY2huaWNhbCBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTkxI01hcmtldGluZyBSZXNlYXJjaCBhbmQgUHVibGljIE9waW5pb24gUG9sbGluZyM1NDE5Ci1uYWljcyM1NDE5MiNQaG90b2dyYXBoaWMgU2VydmljZXMjNTQxOQotbmFpY3MjNTQxOTIxI1Bob3RvZ3JhcGh5IFN0dWRpb3MsIFBvcnRyYWl0IzU0MTkyCi1uYWljcyM1NDE5MjIjQ29tbWVyY2lhbCBQaG90b2dyYXBoeSM1NDE5MgotbmFpY3MjNTQxOTMjVHJhbnNsYXRpb24gYW5kIEludGVycHJldGF0aW9uIFNlcnZpY2VzIzU0MTkKLW5haWNzIzU0MTk0I1ZldGVyaW5hcnkgU2VydmljZXMjNTQxOQotbmFpY3MjNTQxOTkjQWxsIE90aGVyIFByb2Zlc3Npb25hbCwgU2NpZW50aWZpYywgYW5kIFRlY2huaWNhbCBTZXJ2aWNlcyM1NDE5Ci1uYWljcyM1NSNNYW5hZ2VtZW50IG9mIENvbXBhbmllcyBhbmQgRW50ZXJwcmlzZXMjNTUKLW5haWNzIzU1MSNNYW5hZ2VtZW50IG9mIENvbXBhbmllcyBhbmQgRW50ZXJwcmlzZXMjNTUKLW5haWNzIzU1MTEjTWFuYWdlbWVudCBvZiBDb21wYW5pZXMgYW5kIEVudGVycHJpc2VzIzU1MQotbmFpY3MjNTUxMTEjTWFuYWdlbWVudCBvZiBDb21wYW5pZXMgYW5kIEVudGVycHJpc2VzIzU1MTEKLW5haWNzIzU1MTExMSNPZmZpY2VzIG9mIEJhbmsgSG9sZGluZyBDb21wYW5pZXMjNTUxMTEKLW5haWNzIzU1MTExMiNPZmZpY2VzIG9mIE90aGVyIEhvbGRpbmcgQ29tcGFuaWVzIzU1MTExCi1uYWljcyM1NTExMTQjQ29ycG9yYXRlLCBTdWJzaWRpYXJ5LCBhbmQgUmVnaW9uYWwgTWFuYWdpbmcgT2ZmaWNlcyM1NTExMQotbmFpY3MjNTYjQWRtaW5pc3RyYXRpdmUgYW5kIFN1cHBvcnQgYW5kIFdhc3RlIE1hbmFnZW1lbnQgYW5kIFJlbWVkaWF0aW9uIFNlcnZpY2VzIzU2Ci1uYWljcyM1NjEjQWRtaW5pc3RyYXRpdmUgYW5kIFN1cHBvcnQgU2VydmljZXMjNTYKLW5haWNzIzU2MTEjT2ZmaWNlIEFkbWluaXN0cmF0aXZlIFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxMTEjT2ZmaWNlIEFkbWluaXN0cmF0aXZlIFNlcnZpY2VzIzU2MTEKLW5haWNzIzU2MTIjRmFjaWxpdGllcyBTdXBwb3J0IFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxMjEjRmFjaWxpdGllcyBTdXBwb3J0IFNlcnZpY2VzIzU2MTIKLW5haWNzIzU2MTMjRW1wbG95bWVudCBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTMxI0VtcGxveW1lbnQgUGxhY2VtZW50IEFnZW5jaWVzIzU2MTMKLW5haWNzIzU2MTMyI1RlbXBvcmFyeSBIZWxwIFNlcnZpY2VzIzU2MTMKLW5haWNzIzU2MTMzI0VtcGxveWVlIExlYXNpbmcgU2VydmljZXMjNTYxMwotbmFpY3MjNTYxNCNCdXNpbmVzcyBTdXBwb3J0IFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxNDEjRG9jdW1lbnQgUHJlcGFyYXRpb24gU2VydmljZXMjNTYxNAotbmFpY3MjNTYxNDIjVGVsZXBob25lIENhbGwgQ2VudGVycyM1NjE0Ci1uYWljcyM1NjE0MjEjVGVsZXBob25lIEFuc3dlcmluZyBTZXJ2aWNlcyM1NjE0MgotbmFpY3MjNTYxNDIyI1RlbGVtYXJrZXRpbmcgQnVyZWF1cyM1NjE0MgotbmFpY3MjNTYxNDMjQnVzaW5lc3MgU2VydmljZSBDZW50ZXJzIzU2MTQKLW5haWNzIzU2MTQzMSNQcml2YXRlIE1haWwgQ2VudGVycyM1NjE0MwotbmFpY3MjNTYxNDM5I090aGVyIEJ1c2luZXNzIFNlcnZpY2UgQ2VudGVycyAoaW5jbHVkaW5nIENvcHkgU2hvcHMpIzU2MTQzCi1uYWljcyM1NjE0NCNDb2xsZWN0aW9uIEFnZW5jaWVzIzU2MTQKLW5haWNzIzU2MTQ1I0NyZWRpdCBCdXJlYXVzIzU2MTQKLW5haWNzIzU2MTQ5I090aGVyIEJ1c2luZXNzIFN1cHBvcnQgU2VydmljZXMjNTYxNAotbmFpY3MjNTYxNDkxI1JlcG9zc2Vzc2lvbiBTZXJ2aWNlcyM1NjE0OQotbmFpY3MjNTYxNDkyI0NvdXJ0IFJlcG9ydGluZyBhbmQgU3Rlbm90eXBlIFNlcnZpY2VzIzU2MTQ5Ci1uYWljcyM1NjE0OTkjQWxsIE90aGVyIEJ1c2luZXNzIFN1cHBvcnQgU2VydmljZXMjNTYxNDkKLW5haWNzIzU2MTUjVHJhdmVsIEFycmFuZ2VtZW50IGFuZCBSZXNlcnZhdGlvbiBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTUxI1RyYXZlbCBBZ2VuY2llcyM1NjE1Ci1uYWljcyM1NjE1MiNUb3VyIE9wZXJhdG9ycyM1NjE1Ci1uYWljcyM1NjE1OSNPdGhlciBUcmF2ZWwgQXJyYW5nZW1lbnQgYW5kIFJlc2VydmF0aW9uIFNlcnZpY2VzIzU2MTUKLW5haWNzIzU2MTU5MSNDb252ZW50aW9uIGFuZCBWaXNpdG9ycyBCdXJlYXVzIzU2MTU5Ci1uYWljcyM1NjE1OTkjQWxsIE90aGVyIFRyYXZlbCBBcnJhbmdlbWVudCBhbmQgUmVzZXJ2YXRpb24gU2VydmljZXMjNTYxNTkKLW5haWNzIzU2MTYjSW52ZXN0aWdhdGlvbiBhbmQgU2VjdXJpdHkgU2VydmljZXMjNTYxCi1uYWljcyM1NjE2MSNJbnZlc3RpZ2F0aW9uLCBHdWFyZCwgYW5kIEFybW9yZWQgQ2FyIFNlcnZpY2VzIzU2MTYKLW5haWNzIzU2MTYxMSNJbnZlc3RpZ2F0aW9uIFNlcnZpY2VzIzU2MTYxCi1uYWljcyM1NjE2MTIjU2VjdXJpdHkgR3VhcmRzIGFuZCBQYXRyb2wgU2VydmljZXMjNTYxNjEKLW5haWNzIzU2MTYxMyNBcm1vcmVkIENhciBTZXJ2aWNlcyM1NjE2MQotbmFpY3MjNTYxNjIjU2VjdXJpdHkgU3lzdGVtcyBTZXJ2aWNlcyM1NjE2Ci1uYWljcyM1NjE2MjEjU2VjdXJpdHkgU3lzdGVtcyBTZXJ2aWNlcyAoZXhjZXB0IExvY2tzbWl0aHMpIzU2MTYyCi1uYWljcyM1NjE2MjIjTG9ja3NtaXRocyM1NjE2MgotbmFpY3MjNTYxNyNTZXJ2aWNlcyB0byBCdWlsZGluZ3MgYW5kIER3ZWxsaW5ncyM1NjEKLW5haWNzIzU2MTcxI0V4dGVybWluYXRpbmcgYW5kIFBlc3QgQ29udHJvbCBTZXJ2aWNlcyM1NjE3Ci1uYWljcyM1NjE3MiNKYW5pdG9yaWFsIFNlcnZpY2VzIzU2MTcKLW5haWNzIzU2MTczI0xhbmRzY2FwaW5nIFNlcnZpY2VzIzU2MTcKLW5haWNzIzU2MTc0I0NhcnBldCBhbmQgVXBob2xzdGVyeSBDbGVhbmluZyBTZXJ2aWNlcyM1NjE3Ci1uYWljcyM1NjE3OSNPdGhlciBTZXJ2aWNlcyB0byBCdWlsZGluZ3MgYW5kIER3ZWxsaW5ncyM1NjE3Ci1uYWljcyM1NjE5I090aGVyIFN1cHBvcnQgU2VydmljZXMjNTYxCi1uYWljcyM1NjE5MSNQYWNrYWdpbmcgYW5kIExhYmVsaW5nIFNlcnZpY2VzIzU2MTkKLW5haWNzIzU2MTkyI0NvbnZlbnRpb24gYW5kIFRyYWRlIFNob3cgT3JnYW5pemVycyM1NjE5Ci1uYWljcyM1NjE5OSNBbGwgT3RoZXIgU3VwcG9ydCBTZXJ2aWNlcyM1NjE5Ci1uYWljcyM1NjIjV2FzdGUgTWFuYWdlbWVudCBhbmQgUmVtZWRpYXRpb24gU2VydmljZXMjNTYKLW5haWNzIzU2MjEjV2FzdGUgQ29sbGVjdGlvbiM1NjIKLW5haWNzIzU2MjExI1dhc3RlIENvbGxlY3Rpb24jNTYyMQotbmFpY3MjNTYyMTExI1NvbGlkIFdhc3RlIENvbGxlY3Rpb24jNTYyMTEKLW5haWNzIzU2MjExMiNIYXphcmRvdXMgV2FzdGUgQ29sbGVjdGlvbiM1NjIxMQotbmFpY3MjNTYyMTE5I090aGVyIFdhc3RlIENvbGxlY3Rpb24jNTYyMTEKLW5haWNzIzU2MjIjV2FzdGUgVHJlYXRtZW50IGFuZCBEaXNwb3NhbCM1NjIKLW5haWNzIzU2MjIxI1dhc3RlIFRyZWF0bWVudCBhbmQgRGlzcG9zYWwjNTYyMgotbmFpY3MjNTYyMjExI0hhemFyZG91cyBXYXN0ZSBUcmVhdG1lbnQgYW5kIERpc3Bvc2FsIzU2MjIxCi1uYWljcyM1NjIyMTIjU29saWQgV2FzdGUgTGFuZGZpbGwjNTYyMjEKLW5haWNzIzU2MjIxMyNTb2xpZCBXYXN0ZSBDb21idXN0b3JzIGFuZCBJbmNpbmVyYXRvcnMjNTYyMjEKLW5haWNzIzU2MjIxOSNPdGhlciBOb25oYXphcmRvdXMgV2FzdGUgVHJlYXRtZW50IGFuZCBEaXNwb3NhbCM1NjIyMQotbmFpY3MjNTYyOSNSZW1lZGlhdGlvbiBhbmQgT3RoZXIgV2FzdGUgTWFuYWdlbWVudCBTZXJ2aWNlcyM1NjIKLW5haWNzIzU2MjkxI1JlbWVkaWF0aW9uIFNlcnZpY2VzIzU2MjkKLW5haWNzIzU2MjkyI01hdGVyaWFscyBSZWNvdmVyeSBGYWNpbGl0aWVzIzU2MjkKLW5haWNzIzU2Mjk5I0FsbCBPdGhlciBXYXN0ZSBNYW5hZ2VtZW50IFNlcnZpY2VzIzU2MjkKLW5haWNzIzU2Mjk5MSNTZXB0aWMgVGFuayBhbmQgUmVsYXRlZCBTZXJ2aWNlcyM1NjI5OQotbmFpY3MjNTYyOTk4I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFdhc3RlIE1hbmFnZW1lbnQgU2VydmljZXMjNTYyOTkKLW5haWNzIzYxI0VkdWNhdGlvbmFsIFNlcnZpY2VzIzYxCi1uYWljcyM2MTEjRWR1Y2F0aW9uYWwgU2VydmljZXMjNjEKLW5haWNzIzYxMTEjRWxlbWVudGFyeSBhbmQgU2Vjb25kYXJ5IFNjaG9vbHMjNjExCi1uYWljcyM2MTExMSNFbGVtZW50YXJ5IGFuZCBTZWNvbmRhcnkgU2Nob29scyM2MTExCi1uYWljcyM2MTEyI0p1bmlvciBDb2xsZWdlcyM2MTEKLW5haWNzIzYxMTIxI0p1bmlvciBDb2xsZWdlcyM2MTEyCi1uYWljcyM2MTEzI0NvbGxlZ2VzLCBVbml2ZXJzaXRpZXMsIGFuZCBQcm9mZXNzaW9uYWwgU2Nob29scyM2MTEKLW5haWNzIzYxMTMxI0NvbGxlZ2VzLCBVbml2ZXJzaXRpZXMsIGFuZCBQcm9mZXNzaW9uYWwgU2Nob29scyM2MTEzCi1uYWljcyM2MTE0I0J1c2luZXNzIFNjaG9vbHMgYW5kIENvbXB1dGVyIGFuZCBNYW5hZ2VtZW50IFRyYWluaW5nIzYxMQotbmFpY3MjNjExNDEjQnVzaW5lc3MgYW5kIFNlY3JldGFyaWFsIFNjaG9vbHMjNjExNAotbmFpY3MjNjExNDIjQ29tcHV0ZXIgVHJhaW5pbmcjNjExNAotbmFpY3MjNjExNDMjUHJvZmVzc2lvbmFsIGFuZCBNYW5hZ2VtZW50IERldmVsb3BtZW50IFRyYWluaW5nIzYxMTQKLW5haWNzIzYxMTUjVGVjaG5pY2FsIGFuZCBUcmFkZSBTY2hvb2xzIzYxMQotbmFpY3MjNjExNTEjVGVjaG5pY2FsIGFuZCBUcmFkZSBTY2hvb2xzIzYxMTUKLW5haWNzIzYxMTUxMSNDb3NtZXRvbG9neSBhbmQgQmFyYmVyIFNjaG9vbHMjNjExNTEKLW5haWNzIzYxMTUxMiNGbGlnaHQgVHJhaW5pbmcjNjExNTEKLW5haWNzIzYxMTUxMyNBcHByZW50aWNlc2hpcCBUcmFpbmluZyM2MTE1MQotbmFpY3MjNjExNTE5I090aGVyIFRlY2huaWNhbCBhbmQgVHJhZGUgU2Nob29scyM2MTE1MQotbmFpY3MjNjExNiNPdGhlciBTY2hvb2xzIGFuZCBJbnN0cnVjdGlvbiM2MTEKLW5haWNzIzYxMTYxI0ZpbmUgQXJ0cyBTY2hvb2xzIzYxMTYKLW5haWNzIzYxMTYyI1Nwb3J0cyBhbmQgUmVjcmVhdGlvbiBJbnN0cnVjdGlvbiM2MTE2Ci1uYWljcyM2MTE2MyNMYW5ndWFnZSBTY2hvb2xzIzYxMTYKLW5haWNzIzYxMTY5I0FsbCBPdGhlciBTY2hvb2xzIGFuZCBJbnN0cnVjdGlvbiM2MTE2Ci1uYWljcyM2MTE2OTEjRXhhbSBQcmVwYXJhdGlvbiBhbmQgVHV0b3JpbmcjNjExNjkKLW5haWNzIzYxMTY5MiNBdXRvbW9iaWxlIERyaXZpbmcgU2Nob29scyM2MTE2OQotbmFpY3MjNjExNjk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFNjaG9vbHMgYW5kIEluc3RydWN0aW9uIzYxMTY5Ci1uYWljcyM2MTE3I0VkdWNhdGlvbmFsIFN1cHBvcnQgU2VydmljZXMjNjExCi1uYWljcyM2MTE3MSNFZHVjYXRpb25hbCBTdXBwb3J0IFNlcnZpY2VzIzYxMTcKLW5haWNzIzYyI0hlYWx0aCBDYXJlIGFuZCBTb2NpYWwgQXNzaXN0YW5jZSM2MgotbmFpY3MjNjIxI0FtYnVsYXRvcnkgSGVhbHRoIENhcmUgU2VydmljZXMjNjIKLW5haWNzIzYyMTEjT2ZmaWNlcyBvZiBQaHlzaWNpYW5zIzYyMQotbmFpY3MjNjIxMTEjT2ZmaWNlcyBvZiBQaHlzaWNpYW5zIzYyMTEKLW5haWNzIzYyMTExMSNPZmZpY2VzIG9mIFBoeXNpY2lhbnMgKGV4Y2VwdCBNZW50YWwgSGVhbHRoIFNwZWNpYWxpc3RzKSM2MjExMQotbmFpY3MjNjIxMTEyI09mZmljZXMgb2YgUGh5c2ljaWFucywgTWVudGFsIEhlYWx0aCBTcGVjaWFsaXN0cyM2MjExMQotbmFpY3MjNjIxMiNPZmZpY2VzIG9mIERlbnRpc3RzIzYyMQotbmFpY3MjNjIxMjEjT2ZmaWNlcyBvZiBEZW50aXN0cyM2MjEyCi1uYWljcyM2MjEzI09mZmljZXMgb2YgT3RoZXIgSGVhbHRoIFByYWN0aXRpb25lcnMjNjIxCi1uYWljcyM2MjEzMSNPZmZpY2VzIG9mIENoaXJvcHJhY3RvcnMjNjIxMwotbmFpY3MjNjIxMzIjT2ZmaWNlcyBvZiBPcHRvbWV0cmlzdHMjNjIxMwotbmFpY3MjNjIxMzMjT2ZmaWNlcyBvZiBNZW50YWwgSGVhbHRoIFByYWN0aXRpb25lcnMgKGV4Y2VwdCBQaHlzaWNpYW5zKSM2MjEzCi1uYWljcyM2MjEzNCNPZmZpY2VzIG9mIFBoeXNpY2FsLCBPY2N1cGF0aW9uYWwgYW5kIFNwZWVjaCBUaGVyYXBpc3RzLCBhbmQgQXVkaW9sb2dpc3RzIzYyMTMKLW5haWNzIzYyMTM5I09mZmljZXMgb2YgQWxsIE90aGVyIEhlYWx0aCBQcmFjdGl0aW9uZXJzIzYyMTMKLW5haWNzIzYyMTM5MSNPZmZpY2VzIG9mIFBvZGlhdHJpc3RzIzYyMTM5Ci1uYWljcyM2MjEzOTkjT2ZmaWNlcyBvZiBBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBIZWFsdGggUHJhY3RpdGlvbmVycyM2MjEzOQotbmFpY3MjNjIxNCNPdXRwYXRpZW50IENhcmUgQ2VudGVycyM2MjEKLW5haWNzIzYyMTQxI0ZhbWlseSBQbGFubmluZyBDZW50ZXJzIzYyMTQKLW5haWNzIzYyMTQyI091dHBhdGllbnQgTWVudGFsIEhlYWx0aCBhbmQgU3Vic3RhbmNlIEFidXNlIENlbnRlcnMjNjIxNAotbmFpY3MjNjIxNDkjT3RoZXIgT3V0cGF0aWVudCBDYXJlIENlbnRlcnMjNjIxNAotbmFpY3MjNjIxNDkxI0hNTyBNZWRpY2FsIENlbnRlcnMjNjIxNDkKLW5haWNzIzYyMTQ5MiNLaWRuZXkgRGlhbHlzaXMgQ2VudGVycyM2MjE0OQotbmFpY3MjNjIxNDkzI0ZyZWVzdGFuZGluZyBBbWJ1bGF0b3J5IFN1cmdpY2FsIGFuZCBFbWVyZ2VuY3kgQ2VudGVycyM2MjE0OQotbmFpY3MjNjIxNDk4I0FsbCBPdGhlciBPdXRwYXRpZW50IENhcmUgQ2VudGVycyM2MjE0OQotbmFpY3MjNjIxNSNNZWRpY2FsIGFuZCBEaWFnbm9zdGljIExhYm9yYXRvcmllcyM2MjEKLW5haWNzIzYyMTUxI01lZGljYWwgYW5kIERpYWdub3N0aWMgTGFib3JhdG9yaWVzIzYyMTUKLW5haWNzIzYyMTUxMSNNZWRpY2FsIExhYm9yYXRvcmllcyM2MjE1MQotbmFpY3MjNjIxNTEyI0RpYWdub3N0aWMgSW1hZ2luZyBDZW50ZXJzIzYyMTUxCi1uYWljcyM2MjE2I0hvbWUgSGVhbHRoIENhcmUgU2VydmljZXMjNjIxCi1uYWljcyM2MjE2MSNIb21lIEhlYWx0aCBDYXJlIFNlcnZpY2VzIzYyMTYKLW5haWNzIzYyMTkjT3RoZXIgQW1idWxhdG9yeSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MjEKLW5haWNzIzYyMTkxI0FtYnVsYW5jZSBTZXJ2aWNlcyM2MjE5Ci1uYWljcyM2MjE5OSNBbGwgT3RoZXIgQW1idWxhdG9yeSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MjE5Ci1uYWljcyM2MjE5OTEjQmxvb2QgYW5kIE9yZ2FuIEJhbmtzIzYyMTk5Ci1uYWljcyM2MjE5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgQW1idWxhdG9yeSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MjE5OQotbmFpY3MjNjIyI0hvc3BpdGFscyM2MgotbmFpY3MjNjIyMSNHZW5lcmFsIE1lZGljYWwgYW5kIFN1cmdpY2FsIEhvc3BpdGFscyM2MjIKLW5haWNzIzYyMjExI0dlbmVyYWwgTWVkaWNhbCBhbmQgU3VyZ2ljYWwgSG9zcGl0YWxzIzYyMjEKLW5haWNzIzYyMjIjUHN5Y2hpYXRyaWMgYW5kIFN1YnN0YW5jZSBBYnVzZSBIb3NwaXRhbHMjNjIyCi1uYWljcyM2MjIyMSNQc3ljaGlhdHJpYyBhbmQgU3Vic3RhbmNlIEFidXNlIEhvc3BpdGFscyM2MjIyCi1uYWljcyM2MjIzI1NwZWNpYWx0eSAoZXhjZXB0IFBzeWNoaWF0cmljIGFuZCBTdWJzdGFuY2UgQWJ1c2UpIEhvc3BpdGFscyM2MjIKLW5haWNzIzYyMjMxI1NwZWNpYWx0eSAoZXhjZXB0IFBzeWNoaWF0cmljIGFuZCBTdWJzdGFuY2UgQWJ1c2UpIEhvc3BpdGFscyM2MjIzCi1uYWljcyM2MjMjTnVyc2luZyBhbmQgUmVzaWRlbnRpYWwgQ2FyZSBGYWNpbGl0aWVzIzYyCi1uYWljcyM2MjMxI051cnNpbmcgQ2FyZSBGYWNpbGl0aWVzIzYyMwotbmFpY3MjNjIzMTEjTnVyc2luZyBDYXJlIEZhY2lsaXRpZXMjNjIzMQotbmFpY3MjNjIzMiNSZXNpZGVudGlhbCBNZW50YWwgUmV0YXJkYXRpb24sIE1lbnRhbCBIZWFsdGggYW5kIFN1YnN0YW5jZSBBYnVzZSBGYWNpbGl0aWVzIzYyMwotbmFpY3MjNjIzMjEjUmVzaWRlbnRpYWwgTWVudGFsIFJldGFyZGF0aW9uIEZhY2lsaXRpZXMjNjIzMgotbmFpY3MjNjIzMjIjUmVzaWRlbnRpYWwgTWVudGFsIEhlYWx0aCBhbmQgU3Vic3RhbmNlIEFidXNlIEZhY2lsaXRpZXMjNjIzMgotbmFpY3MjNjIzMyNDb21tdW5pdHkgQ2FyZSBGYWNpbGl0aWVzIGZvciB0aGUgRWxkZXJseSM2MjMKLW5haWNzIzYyMzMxI0NvbW11bml0eSBDYXJlIEZhY2lsaXRpZXMgZm9yIHRoZSBFbGRlcmx5IzYyMzMKLW5haWNzIzYyMzMxMSNDb250aW51aW5nIENhcmUgUmV0aXJlbWVudCBDb21tdW5pdGllcyM2MjMzMQotbmFpY3MjNjIzMzEyI0hvbWVzIGZvciB0aGUgRWxkZXJseSM2MjMzMQotbmFpY3MjNjIzOSNPdGhlciBSZXNpZGVudGlhbCBDYXJlIEZhY2lsaXRpZXMjNjIzCi1uYWljcyM2MjM5OSNPdGhlciBSZXNpZGVudGlhbCBDYXJlIEZhY2lsaXRpZXMjNjIzOQotbmFpY3MjNjI0I1NvY2lhbCBBc3Npc3RhbmNlIzYyCi1uYWljcyM2MjQxI0luZGl2aWR1YWwgYW5kIEZhbWlseSBTZXJ2aWNlcyM2MjQKLW5haWNzIzYyNDExI0NoaWxkIGFuZCBZb3V0aCBTZXJ2aWNlcyM2MjQxCi1uYWljcyM2MjQxMiNTZXJ2aWNlcyBmb3IgdGhlIEVsZGVybHkgYW5kIFBlcnNvbnMgd2l0aCBEaXNhYmlsaXRpZXMjNjI0MQotbmFpY3MjNjI0MTkjT3RoZXIgSW5kaXZpZHVhbCBhbmQgRmFtaWx5IFNlcnZpY2VzIzYyNDEKLW5haWNzIzYyNDIjQ29tbXVuaXR5IEZvb2QgYW5kIEhvdXNpbmcsIGFuZCBFbWVyZ2VuY3kgYW5kIE90aGVyIFJlbGllZiBTZXJ2aWNlcyM2MjQKLW5haWNzIzYyNDIxI0NvbW11bml0eSBGb29kIFNlcnZpY2VzIzYyNDIKLW5haWNzIzYyNDIyI0NvbW11bml0eSBIb3VzaW5nIFNlcnZpY2VzIzYyNDIKLW5haWNzIzYyNDIyMSNUZW1wb3JhcnkgU2hlbHRlcnMjNjI0MjIKLW5haWNzIzYyNDIyOSNPdGhlciBDb21tdW5pdHkgSG91c2luZyBTZXJ2aWNlcyM2MjQyMgotbmFpY3MjNjI0MjMjRW1lcmdlbmN5IGFuZCBPdGhlciBSZWxpZWYgU2VydmljZXMjNjI0MgotbmFpY3MjNjI0MyNWb2NhdGlvbmFsIFJlaGFiaWxpdGF0aW9uIFNlcnZpY2VzIzYyNAotbmFpY3MjNjI0MzEjVm9jYXRpb25hbCBSZWhhYmlsaXRhdGlvbiBTZXJ2aWNlcyM2MjQzCi1uYWljcyM2MjQ0I0NoaWxkIERheSBDYXJlIFNlcnZpY2VzIzYyNAotbmFpY3MjNjI0NDEjQ2hpbGQgRGF5IENhcmUgU2VydmljZXMjNjI0NAotbmFpY3MjNzEjQXJ0cywgRW50ZXJ0YWlubWVudCwgYW5kIFJlY3JlYXRpb24jNzEKLW5haWNzIzcxMSNQZXJmb3JtaW5nIEFydHMsIFNwZWN0YXRvciBTcG9ydHMsIGFuZCBSZWxhdGVkIEluZHVzdHJpZXMjNzEKLW5haWNzIzcxMTEjUGVyZm9ybWluZyBBcnRzIENvbXBhbmllcyM3MTEKLW5haWNzIzcxMTExI1RoZWF0ZXIgQ29tcGFuaWVzIGFuZCBEaW5uZXIgVGhlYXRlcnMjNzExMQotbmFpY3MjNzExMTIjRGFuY2UgQ29tcGFuaWVzIzcxMTEKLW5haWNzIzcxMTEzI011c2ljYWwgR3JvdXBzIGFuZCBBcnRpc3RzIzcxMTEKLW5haWNzIzcxMTE5I090aGVyIFBlcmZvcm1pbmcgQXJ0cyBDb21wYW5pZXMjNzExMQotbmFpY3MjNzExMiNTcGVjdGF0b3IgU3BvcnRzIzcxMQotbmFpY3MjNzExMjEjU3BlY3RhdG9yIFNwb3J0cyM3MTEyCi1uYWljcyM3MTEyMTEjU3BvcnRzIFRlYW1zIGFuZCBDbHVicyM3MTEyMQotbmFpY3MjNzExMjEyI1JhY2V0cmFja3MjNzExMjEKLW5haWNzIzcxMTIxOSNPdGhlciBTcGVjdGF0b3IgU3BvcnRzIzcxMTIxCi1uYWljcyM3MTEzI1Byb21vdGVycyBvZiBQZXJmb3JtaW5nIEFydHMsIFNwb3J0cywgYW5kIFNpbWlsYXIgRXZlbnRzIzcxMQotbmFpY3MjNzExMzEjUHJvbW90ZXJzIG9mIFBlcmZvcm1pbmcgQXJ0cywgU3BvcnRzLCBhbmQgU2ltaWxhciBFdmVudHMgd2l0aCBGYWNpbGl0aWVzIzcxMTMKLW5haWNzIzcxMTMyI1Byb21vdGVycyBvZiBQZXJmb3JtaW5nIEFydHMsIFNwb3J0cywgYW5kIFNpbWlsYXIgRXZlbnRzIHdpdGhvdXQgRmFjaWxpdGllcyM3MTEzCi1uYWljcyM3MTE0I0FnZW50cyBhbmQgTWFuYWdlcnMgZm9yIEFydGlzdHMsIEF0aGxldGVzLCBFbnRlcnRhaW5lcnMsIGFuZCBPdGhlciBQdWJsaWMgRmlndXJlcyM3MTEKLW5haWNzIzcxMTQxI0FnZW50cyBhbmQgTWFuYWdlcnMgZm9yIEFydGlzdHMsIEF0aGxldGVzLCBFbnRlcnRhaW5lcnMsIGFuZCBPdGhlciBQdWJsaWMgRmlndXJlcyM3MTE0Ci1uYWljcyM3MTE1I0luZGVwZW5kZW50IEFydGlzdHMsIFdyaXRlcnMsIGFuZCBQZXJmb3JtZXJzIzcxMQotbmFpY3MjNzExNTEjSW5kZXBlbmRlbnQgQXJ0aXN0cywgV3JpdGVycywgYW5kIFBlcmZvcm1lcnMjNzExNQotbmFpY3MjNzEyI011c2V1bXMsIEhpc3RvcmljYWwgU2l0ZXMsIGFuZCBTaW1pbGFyIEluc3RpdHV0aW9ucyM3MQotbmFpY3MjNzEyMSNNdXNldW1zLCBIaXN0b3JpY2FsIFNpdGVzLCBhbmQgU2ltaWxhciBJbnN0aXR1dGlvbnMjNzEyCi1uYWljcyM3MTIxMSNNdXNldW1zIzcxMjEKLW5haWNzIzcxMjEyI0hpc3RvcmljYWwgU2l0ZXMjNzEyMQotbmFpY3MjNzEyMTMjWm9vcyBhbmQgQm90YW5pY2FsIEdhcmRlbnMjNzEyMQotbmFpY3MjNzEyMTkjTmF0dXJlIFBhcmtzIGFuZCBPdGhlciBTaW1pbGFyIEluc3RpdHV0aW9ucyM3MTIxCi1uYWljcyM3MTMjQW11c2VtZW50LCBHYW1ibGluZywgYW5kIFJlY3JlYXRpb24gSW5kdXN0cmllcyM3MQotbmFpY3MjNzEzMSNBbXVzZW1lbnQgUGFya3MgYW5kIEFyY2FkZXMjNzEzCi1uYWljcyM3MTMxMSNBbXVzZW1lbnQgYW5kIFRoZW1lIFBhcmtzIzcxMzEKLW5haWNzIzcxMzEyI0FtdXNlbWVudCBBcmNhZGVzIzcxMzEKLW5haWNzIzcxMzIjR2FtYmxpbmcgSW5kdXN0cmllcyM3MTMKLW5haWNzIzcxMzIxI0Nhc2lub3MgKGV4Y2VwdCBDYXNpbm8gSG90ZWxzKSM3MTMyCi1uYWljcyM3MTMyOSNPdGhlciBHYW1ibGluZyBJbmR1c3RyaWVzIzcxMzIKLW5haWNzIzcxMzkjT3RoZXIgQW11c2VtZW50IGFuZCBSZWNyZWF0aW9uIEluZHVzdHJpZXMjNzEzCi1uYWljcyM3MTM5MSNHb2xmIENvdXJzZXMgYW5kIENvdW50cnkgQ2x1YnMjNzEzOQotbmFpY3MjNzEzOTIjU2tpaW5nIEZhY2lsaXRpZXMjNzEzOQotbmFpY3MjNzEzOTMjTWFyaW5hcyM3MTM5Ci1uYWljcyM3MTM5NCNGaXRuZXNzIGFuZCBSZWNyZWF0aW9uYWwgU3BvcnRzIENlbnRlcnMjNzEzOQotbmFpY3MjNzEzOTUjQm93bGluZyBDZW50ZXJzIzcxMzkKLW5haWNzIzcxMzk5I0FsbCBPdGhlciBBbXVzZW1lbnQgYW5kIFJlY3JlYXRpb24gSW5kdXN0cmllcyM3MTM5Ci1uYWljcyM3MiNBY2NvbW1vZGF0aW9uIGFuZCBGb29kIFNlcnZpY2VzIzcyCi1uYWljcyM3MjEjQWNjb21tb2RhdGlvbiM3MgotbmFpY3MjNzIxMSNUcmF2ZWxlciBBY2NvbW1vZGF0aW9uIzcyMQotbmFpY3MjNzIxMTEjSG90ZWxzIChleGNlcHQgQ2FzaW5vIEhvdGVscykgYW5kIE1vdGVscyM3MjExCi1uYWljcyM3MjExMiNDYXNpbm8gSG90ZWxzIzcyMTEKLW5haWNzIzcyMTE5I090aGVyIFRyYXZlbGVyIEFjY29tbW9kYXRpb24jNzIxMQotbmFpY3MjNzIxMTkxI0JlZC1hbmQtQnJlYWtmYXN0IElubnMjNzIxMTkKLW5haWNzIzcyMTE5OSNBbGwgT3RoZXIgVHJhdmVsZXIgQWNjb21tb2RhdGlvbiM3MjExOQotbmFpY3MjNzIxMiNSViAoUmVjcmVhdGlvbmFsIFZlaGljbGUpIFBhcmtzIGFuZCBSZWNyZWF0aW9uYWwgQ2FtcHMjNzIxCi1uYWljcyM3MjEyMSNSViAoUmVjcmVhdGlvbmFsIFZlaGljbGUpIFBhcmtzIGFuZCBSZWNyZWF0aW9uYWwgQ2FtcHMjNzIxMgotbmFpY3MjNzIxMjExI1JWIChSZWNyZWF0aW9uYWwgVmVoaWNsZSkgUGFya3MgYW5kIENhbXBncm91bmRzIzcyMTIxCi1uYWljcyM3MjEyMTQjUmVjcmVhdGlvbmFsIGFuZCBWYWNhdGlvbiBDYW1wcyAoZXhjZXB0IENhbXBncm91bmRzKSM3MjEyMQotbmFpY3MjNzIxMyNSb29taW5nIGFuZCBCb2FyZGluZyBIb3VzZXMjNzIxCi1uYWljcyM3MjEzMSNSb29taW5nIGFuZCBCb2FyZGluZyBIb3VzZXMjNzIxMwotbmFpY3MjNzIyI0Zvb2QgU2VydmljZXMgYW5kIERyaW5raW5nIFBsYWNlcyM3MgotbmFpY3MjNzIyMSNGdWxsLVNlcnZpY2UgUmVzdGF1cmFudHMjNzIyCi1uYWljcyM3MjIxMSNGdWxsLVNlcnZpY2UgUmVzdGF1cmFudHMjNzIyMQotbmFpY3MjNzIyMiNMaW1pdGVkLVNlcnZpY2UgRWF0aW5nIFBsYWNlcyM3MjIKLW5haWNzIzcyMjIxI0xpbWl0ZWQtU2VydmljZSBFYXRpbmcgUGxhY2VzIzcyMjIKLW5haWNzIzcyMjIxMSNMaW1pdGVkLVNlcnZpY2UgUmVzdGF1cmFudHMjNzIyMjEKLW5haWNzIzcyMjIxMiNDYWZldGVyaWFzIzcyMjIxCi1uYWljcyM3MjIyMTMjU25hY2sgYW5kIE5vbmFsY29ob2xpYyBCZXZlcmFnZSBCYXJzIzcyMjIxCi1uYWljcyM3MjIzI1NwZWNpYWwgRm9vZCBTZXJ2aWNlcyM3MjIKLW5haWNzIzcyMjMxI0Zvb2QgU2VydmljZSBDb250cmFjdG9ycyM3MjIzCi1uYWljcyM3MjIzMiNDYXRlcmVycyM3MjIzCi1uYWljcyM3MjIzMyNNb2JpbGUgRm9vZCBTZXJ2aWNlcyM3MjIzCi1uYWljcyM3MjI0I0RyaW5raW5nIFBsYWNlcyAoQWxjb2hvbGljIEJldmVyYWdlcykjNzIyCi1uYWljcyM3MjI0MSNEcmlua2luZyBQbGFjZXMgKEFsY29ob2xpYyBCZXZlcmFnZXMpIzcyMjQKLW5haWNzIzgxI090aGVyIFNlcnZpY2VzIChleGNlcHQgUHVibGljIEFkbWluaXN0cmF0aW9uKSM4MQotbmFpY3MjODExI1JlcGFpciBhbmQgTWFpbnRlbmFuY2UjODEKLW5haWNzIzgxMTEjQXV0b21vdGl2ZSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMQotbmFpY3MjODExMTEjQXV0b21vdGl2ZSBNZWNoYW5pY2FsIGFuZCBFbGVjdHJpY2FsIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMQotbmFpY3MjODExMTExI0dlbmVyYWwgQXV0b21vdGl2ZSBSZXBhaXIjODExMTEKLW5haWNzIzgxMTExMiNBdXRvbW90aXZlIEV4aGF1c3QgU3lzdGVtIFJlcGFpciM4MTExMQotbmFpY3MjODExMTEzI0F1dG9tb3RpdmUgVHJhbnNtaXNzaW9uIFJlcGFpciM4MTExMQotbmFpY3MjODExMTE4I090aGVyIEF1dG9tb3RpdmUgTWVjaGFuaWNhbCBhbmQgRWxlY3RyaWNhbCBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTExCi1uYWljcyM4MTExMiNBdXRvbW90aXZlIEJvZHksIFBhaW50LCBJbnRlcmlvciwgYW5kIEdsYXNzIFJlcGFpciM4MTExCi1uYWljcyM4MTExMjEjQXV0b21vdGl2ZSBCb2R5LCBQYWludCwgYW5kIEludGVyaW9yIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMTIKLW5haWNzIzgxMTEyMiNBdXRvbW90aXZlIEdsYXNzIFJlcGxhY2VtZW50IFNob3BzIzgxMTEyCi1uYWljcyM4MTExOSNPdGhlciBBdXRvbW90aXZlIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMQotbmFpY3MjODExMTkxI0F1dG9tb3RpdmUgT2lsIENoYW5nZSBhbmQgTHVicmljYXRpb24gU2hvcHMjODExMTkKLW5haWNzIzgxMTE5MiNDYXIgV2FzaGVzIzgxMTE5Ci1uYWljcyM4MTExOTgjQWxsIE90aGVyIEF1dG9tb3RpdmUgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTExOQotbmFpY3MjODExMiNFbGVjdHJvbmljIGFuZCBQcmVjaXNpb24gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExCi1uYWljcyM4MTEyMSNFbGVjdHJvbmljIGFuZCBQcmVjaXNpb24gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMgotbmFpY3MjODExMjExI0NvbnN1bWVyIEVsZWN0cm9uaWNzIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMjEKLW5haWNzIzgxMTIxMiNDb21wdXRlciBhbmQgT2ZmaWNlIE1hY2hpbmUgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEyMQotbmFpY3MjODExMjEzI0NvbW11bmljYXRpb24gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMjEKLW5haWNzIzgxMTIxOSNPdGhlciBFbGVjdHJvbmljIGFuZCBQcmVjaXNpb24gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMjEKLW5haWNzIzgxMTMjQ29tbWVyY2lhbCBhbmQgSW5kdXN0cmlhbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCAoZXhjZXB0IEF1dG9tb3RpdmUgYW5kIEVsZWN0cm9uaWMpIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExCi1uYWljcyM4MTEzMSNDb21tZXJjaWFsIGFuZCBJbmR1c3RyaWFsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IChleGNlcHQgQXV0b21vdGl2ZSBhbmQgRWxlY3Ryb25pYykgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEzCi1uYWljcyM4MTE0I1BlcnNvbmFsIGFuZCBIb3VzZWhvbGQgR29vZHMgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEKLW5haWNzIzgxMTQxI0hvbWUgYW5kIEdhcmRlbiBFcXVpcG1lbnQgYW5kIEFwcGxpYW5jZSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTQKLW5haWNzIzgxMTQxMSNIb21lIGFuZCBHYXJkZW4gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExNDEKLW5haWNzIzgxMTQxMiNBcHBsaWFuY2UgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTE0MQotbmFpY3MjODExNDIjUmV1cGhvbHN0ZXJ5IGFuZCBGdXJuaXR1cmUgUmVwYWlyIzgxMTQKLW5haWNzIzgxMTQzI0Zvb3R3ZWFyIGFuZCBMZWF0aGVyIEdvb2RzIFJlcGFpciM4MTE0Ci1uYWljcyM4MTE0OSNPdGhlciBQZXJzb25hbCBhbmQgSG91c2Vob2xkIEdvb2RzIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExNAotbmFpY3MjODEyI1BlcnNvbmFsIGFuZCBMYXVuZHJ5IFNlcnZpY2VzIzgxCi1uYWljcyM4MTIxI1BlcnNvbmFsIENhcmUgU2VydmljZXMjODEyCi1uYWljcyM4MTIxMSNIYWlyLCBOYWlsLCBhbmQgU2tpbiBDYXJlIFNlcnZpY2VzIzgxMjEKLW5haWNzIzgxMjExMSNCYXJiZXIgU2hvcHMjODEyMTEKLW5haWNzIzgxMjExMiNCZWF1dHkgU2Fsb25zIzgxMjExCi1uYWljcyM4MTIxMTMjTmFpbCBTYWxvbnMjODEyMTEKLW5haWNzIzgxMjE5I090aGVyIFBlcnNvbmFsIENhcmUgU2VydmljZXMjODEyMQotbmFpY3MjODEyMTkxI0RpZXQgYW5kIFdlaWdodCBSZWR1Y2luZyBDZW50ZXJzIzgxMjE5Ci1uYWljcyM4MTIxOTkjT3RoZXIgUGVyc29uYWwgQ2FyZSBTZXJ2aWNlcyM4MTIxOQotbmFpY3MjODEyMiNEZWF0aCBDYXJlIFNlcnZpY2VzIzgxMgotbmFpY3MjODEyMjEjRnVuZXJhbCBIb21lcyBhbmQgRnVuZXJhbCBTZXJ2aWNlcyM4MTIyCi1uYWljcyM4MTIyMiNDZW1ldGVyaWVzIGFuZCBDcmVtYXRvcmllcyM4MTIyCi1uYWljcyM4MTIzI0RyeWNsZWFuaW5nIGFuZCBMYXVuZHJ5IFNlcnZpY2VzIzgxMgotbmFpY3MjODEyMzEjQ29pbi1PcGVyYXRlZCBMYXVuZHJpZXMgYW5kIERyeWNsZWFuZXJzIzgxMjMKLW5haWNzIzgxMjMyI0RyeWNsZWFuaW5nIGFuZCBMYXVuZHJ5IFNlcnZpY2VzIChleGNlcHQgQ29pbi1PcGVyYXRlZCkjODEyMwotbmFpY3MjODEyMzMjTGluZW4gYW5kIFVuaWZvcm0gU3VwcGx5IzgxMjMKLW5haWNzIzgxMjMzMSNMaW5lbiBTdXBwbHkjODEyMzMKLW5haWNzIzgxMjMzMiNJbmR1c3RyaWFsIExhdW5kZXJlcnMjODEyMzMKLW5haWNzIzgxMjkjT3RoZXIgUGVyc29uYWwgU2VydmljZXMjODEyCi1uYWljcyM4MTI5MSNQZXQgQ2FyZSAoZXhjZXB0IFZldGVyaW5hcnkpIFNlcnZpY2VzIzgxMjkKLW5haWNzIzgxMjkyI1Bob3RvZmluaXNoaW5nIzgxMjkKLW5haWNzIzgxMjkyMSNQaG90b2ZpbmlzaGluZyBMYWJvcmF0b3JpZXMgKGV4Y2VwdCBPbmUtSG91cikjODEyOTIKLW5haWNzIzgxMjkyMiNPbmUtSG91ciBQaG90b2ZpbmlzaGluZyM4MTI5MgotbmFpY3MjODEyOTMjUGFya2luZyBMb3RzIGFuZCBHYXJhZ2VzIzgxMjkKLW5haWNzIzgxMjk5I0FsbCBPdGhlciBQZXJzb25hbCBTZXJ2aWNlcyM4MTI5Ci1uYWljcyM4MTMjUmVsaWdpb3VzLCBHcmFudG1ha2luZywgQ2l2aWMsIFByb2Zlc3Npb25hbCwgYW5kIFNpbWlsYXIgT3JnYW5pemF0aW9ucyM4MQotbmFpY3MjODEzMSNSZWxpZ2lvdXMgT3JnYW5pemF0aW9ucyM4MTMKLW5haWNzIzgxMzExI1JlbGlnaW91cyBPcmdhbml6YXRpb25zIzgxMzEKLW5haWNzIzgxMzIjR3JhbnRtYWtpbmcgYW5kIEdpdmluZyBTZXJ2aWNlcyM4MTMKLW5haWNzIzgxMzIxI0dyYW50bWFraW5nIGFuZCBHaXZpbmcgU2VydmljZXMjODEzMgotbmFpY3MjODEzMjExI0dyYW50bWFraW5nIEZvdW5kYXRpb25zIzgxMzIxCi1uYWljcyM4MTMyMTIjVm9sdW50YXJ5IEhlYWx0aCBPcmdhbml6YXRpb25zIzgxMzIxCi1uYWljcyM4MTMyMTkjT3RoZXIgR3JhbnRtYWtpbmcgYW5kIEdpdmluZyBTZXJ2aWNlcyM4MTMyMQotbmFpY3MjODEzMyNTb2NpYWwgQWR2b2NhY3kgT3JnYW5pemF0aW9ucyM4MTMKLW5haWNzIzgxMzMxI1NvY2lhbCBBZHZvY2FjeSBPcmdhbml6YXRpb25zIzgxMzMKLW5haWNzIzgxMzMxMSNIdW1hbiBSaWdodHMgT3JnYW5pemF0aW9ucyM4MTMzMQotbmFpY3MjODEzMzEyI0Vudmlyb25tZW50LCBDb25zZXJ2YXRpb24gYW5kIFdpbGRsaWZlIE9yZ2FuaXphdGlvbnMjODEzMzEKLW5haWNzIzgxMzMxOSNPdGhlciBTb2NpYWwgQWR2b2NhY3kgT3JnYW5pemF0aW9ucyM4MTMzMQotbmFpY3MjODEzNCNDaXZpYyBhbmQgU29jaWFsIE9yZ2FuaXphdGlvbnMjODEzCi1uYWljcyM4MTM0MSNDaXZpYyBhbmQgU29jaWFsIE9yZ2FuaXphdGlvbnMjODEzNAotbmFpY3MjODEzOSNCdXNpbmVzcywgUHJvZmVzc2lvbmFsLCBMYWJvciwgUG9saXRpY2FsLCBhbmQgU2ltaWxhciBPcmdhbml6YXRpb25zIzgxMwotbmFpY3MjODEzOTEjQnVzaW5lc3MgQXNzb2NpYXRpb25zIzgxMzkKLW5haWNzIzgxMzkyI1Byb2Zlc3Npb25hbCBPcmdhbml6YXRpb25zIzgxMzkKLW5haWNzIzgxMzkzI0xhYm9yIFVuaW9ucyBhbmQgU2ltaWxhciBMYWJvciBPcmdhbml6YXRpb25zIzgxMzkKLW5haWNzIzgxMzk0I1BvbGl0aWNhbCBPcmdhbml6YXRpb25zIzgxMzkKLW5haWNzIzgxMzk5I090aGVyIFNpbWlsYXIgT3JnYW5pemF0aW9ucyAoZXhjZXB0IEJ1c2luZXNzLCBQcm9mZXNzaW9uYWwsIExhYm9yLCBhbmQgUG9saXRpY2FsIE9yZ2FuaXphdGlvbnMpIzgxMzkKLW5haWNzIzgxNCNQcml2YXRlIEhvdXNlaG9sZHMjODEKLW5haWNzIzgxNDEjUHJpdmF0ZSBIb3VzZWhvbGRzIzgxNAotbmFpY3MjODE0MTEjUHJpdmF0ZSBIb3VzZWhvbGRzIzgxNDEKLW5haWNzIzkyI1B1YmxpYyBBZG1pbmlzdHJhdGlvbiM5MgotbmFpY3MjOTIxI0V4ZWN1dGl2ZSwgTGVnaXNsYXRpdmUsIGFuZCBPdGhlciBHZW5lcmFsIEdvdmVybm1lbnQgU3VwcG9ydCM5MgotbmFpY3MjOTIxMSNFeGVjdXRpdmUsIExlZ2lzbGF0aXZlLCBhbmQgT3RoZXIgR2VuZXJhbCBHb3Zlcm5tZW50IFN1cHBvcnQjOTIxCi1uYWljcyM5MjExMSNFeGVjdXRpdmUgT2ZmaWNlcyM5MjExCi1uYWljcyM5MjExMiNMZWdpc2xhdGl2ZSBCb2RpZXMjOTIxMQotbmFpY3MjOTIxMTMjUHVibGljIEZpbmFuY2UgQWN0aXZpdGllcyM5MjExCi1uYWljcyM5MjExNCNFeGVjdXRpdmUgYW5kIExlZ2lzbGF0aXZlIE9mZmljZXMsIENvbWJpbmVkIzkyMTEKLW5haWNzIzkyMTE1I0FtZXJpY2FuIEluZGlhbiBhbmQgQWxhc2thIE5hdGl2ZSBUcmliYWwgR292ZXJubWVudHMjOTIxMQotbmFpY3MjOTIxMTkjT3RoZXIgR2VuZXJhbCBHb3Zlcm5tZW50IFN1cHBvcnQjOTIxMQotbmFpY3MjOTIyI0p1c3RpY2UsIFB1YmxpYyBPcmRlciwgYW5kIFNhZmV0eSBBY3Rpdml0aWVzIzkyCi1uYWljcyM5MjIxI0p1c3RpY2UsIFB1YmxpYyBPcmRlciwgYW5kIFNhZmV0eSBBY3Rpdml0aWVzIzkyMgotbmFpY3MjOTIyMTEjQ291cnRzIzkyMjEKLW5haWNzIzkyMjEyI1BvbGljZSBQcm90ZWN0aW9uIzkyMjEKLW5haWNzIzkyMjEzI0xlZ2FsIENvdW5zZWwgYW5kIFByb3NlY3V0aW9uIzkyMjEKLW5haWNzIzkyMjE0I0NvcnJlY3Rpb25hbCBJbnN0aXR1dGlvbnMjOTIyMQotbmFpY3MjOTIyMTUjUGFyb2xlIE9mZmljZXMgYW5kIFByb2JhdGlvbiBPZmZpY2VzIzkyMjEKLW5haWNzIzkyMjE2I0ZpcmUgUHJvdGVjdGlvbiM5MjIxCi1uYWljcyM5MjIxOSNPdGhlciBKdXN0aWNlLCBQdWJsaWMgT3JkZXIsIGFuZCBTYWZldHkgQWN0aXZpdGllcyM5MjIxCi1uYWljcyM5MjMjQWRtaW5pc3RyYXRpb24gb2YgSHVtYW4gUmVzb3VyY2UgUHJvZ3JhbXMjOTIKLW5haWNzIzkyMzEjQWRtaW5pc3RyYXRpb24gb2YgSHVtYW4gUmVzb3VyY2UgUHJvZ3JhbXMjOTIzCi1uYWljcyM5MjMxMSNBZG1pbmlzdHJhdGlvbiBvZiBFZHVjYXRpb24gUHJvZ3JhbXMjOTIzMQotbmFpY3MjOTIzMTIjQWRtaW5pc3RyYXRpb24gb2YgUHVibGljIEhlYWx0aCBQcm9ncmFtcyM5MjMxCi1uYWljcyM5MjMxMyNBZG1pbmlzdHJhdGlvbiBvZiBIdW1hbiBSZXNvdXJjZSBQcm9ncmFtcyAoZXhjZXB0IEVkdWNhdGlvbiwgUHVibGljIEhlYWx0aCwgYW5kIFZldGVyYW5zJyBBZmZhaXJzIFByb2dyYW1zKSM5MjMxCi1uYWljcyM5MjMxNCNBZG1pbmlzdHJhdGlvbiBvZiBWZXRlcmFucycgQWZmYWlycyM5MjMxCi1uYWljcyM5MjQjQWRtaW5pc3RyYXRpb24gb2YgRW52aXJvbm1lbnRhbCBRdWFsaXR5IFByb2dyYW1zIzkyCi1uYWljcyM5MjQxI0FkbWluaXN0cmF0aW9uIG9mIEVudmlyb25tZW50YWwgUXVhbGl0eSBQcm9ncmFtcyM5MjQKLW5haWNzIzkyNDExI0FkbWluaXN0cmF0aW9uIG9mIEFpciBhbmQgV2F0ZXIgUmVzb3VyY2UgYW5kIFNvbGlkIFdhc3RlIE1hbmFnZW1lbnQgUHJvZ3JhbXMjOTI0MQotbmFpY3MjOTI0MTIjQWRtaW5pc3RyYXRpb24gb2YgQ29uc2VydmF0aW9uIFByb2dyYW1zIzkyNDEKLW5haWNzIzkyNSNBZG1pbmlzdHJhdGlvbiBvZiBIb3VzaW5nIFByb2dyYW1zLCBVcmJhbiBQbGFubmluZywgYW5kIENvbW11bml0eSBEZXZlbG9wbWVudCM5MgotbmFpY3MjOTI1MSNBZG1pbmlzdHJhdGlvbiBvZiBIb3VzaW5nIFByb2dyYW1zLCBVcmJhbiBQbGFubmluZywgYW5kIENvbW11bml0eSBEZXZlbG9wbWVudCM5MjUKLW5haWNzIzkyNTExI0FkbWluaXN0cmF0aW9uIG9mIEhvdXNpbmcgUHJvZ3JhbXMjOTI1MQotbmFpY3MjOTI1MTIjQWRtaW5pc3RyYXRpb24gb2YgVXJiYW4gUGxhbm5pbmcgYW5kIENvbW11bml0eSBhbmQgUnVyYWwgRGV2ZWxvcG1lbnQjOTI1MQotbmFpY3MjOTI2I0FkbWluaXN0cmF0aW9uIG9mIEVjb25vbWljIFByb2dyYW1zIzkyCi1uYWljcyM5MjYxI0FkbWluaXN0cmF0aW9uIG9mIEVjb25vbWljIFByb2dyYW1zIzkyNgotbmFpY3MjOTI2MTEjQWRtaW5pc3RyYXRpb24gb2YgR2VuZXJhbCBFY29ub21pYyBQcm9ncmFtcyM5MjYxCi1uYWljcyM5MjYxMiNSZWd1bGF0aW9uIGFuZCBBZG1pbmlzdHJhdGlvbiBvZiBUcmFuc3BvcnRhdGlvbiBQcm9ncmFtcyM5MjYxCi1uYWljcyM5MjYxMyNSZWd1bGF0aW9uIGFuZCBBZG1pbmlzdHJhdGlvbiBvZiBDb21tdW5pY2F0aW9ucywgRWxlY3RyaWMsIEdhcywgYW5kIE90aGVyIFV0aWxpdGllcyM5MjYxCi1uYWljcyM5MjYxNCNSZWd1bGF0aW9uIG9mIEFncmljdWx0dXJhbCBNYXJrZXRpbmcgYW5kIENvbW1vZGl0aWVzIzkyNjEKLW5haWNzIzkyNjE1I1JlZ3VsYXRpb24sIExpY2Vuc2luZywgYW5kIEluc3BlY3Rpb24gb2YgTWlzY2VsbGFuZW91cyBDb21tZXJjaWFsIFNlY3RvcnMjOTI2MQotbmFpY3MjOTI3I1NwYWNlIFJlc2VhcmNoIGFuZCBUZWNobm9sb2d5IzkyCi1uYWljcyM5MjcxI1NwYWNlIFJlc2VhcmNoIGFuZCBUZWNobm9sb2d5IzkyNwotbmFpY3MjOTI3MTEjU3BhY2UgUmVzZWFyY2ggYW5kIFRlY2hub2xvZ3kjOTI3MQotbmFpY3MjOTI4I05hdGlvbmFsIFNlY3VyaXR5IGFuZCBJbnRlcm5hdGlvbmFsIEFmZmFpcnMjOTIKLW5haWNzIzkyODEjTmF0aW9uYWwgU2VjdXJpdHkgYW5kIEludGVybmF0aW9uYWwgQWZmYWlycyM5MjgKLW5haWNzIzkyODExI05hdGlvbmFsIFNlY3VyaXR5IzkyODEKLW5haWNzIzkyODEyI0ludGVybmF0aW9uYWwgQWZmYWlycyM5MjgxCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS91bnNwc2MtZGF0YS50eHQgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS91bnNwc2MtZGF0YS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODM1MTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvdW5zcHNjLWRhdGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTcwNTQgKzAsMCBAQAotdW5zcHNjNyMxMC4wMC4wMC4wMC4wMCNMaXZlIFBsYW50IGFuZCBBbmltYWwgTWF0ZXJpYWwgYW5kIEFjY2Vzc29yaWVzIGFuZCBTdXBwbGllcyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4wMC4wMC4wMCNMaXZlIGFuaW1hbHMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDAuMDAjTGl2ZXN0b2NrIzEwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjAxLjAwI0NhdHMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDIuMDAjRG9ncyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wNC4wMCNNaW5rIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA1LjAwI1JhdHMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDYuMDAjSG9yc2VzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA3LjAwI1NoZWVwIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA4LjAwI0dvYXRzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA5LjAwI0Fzc2VzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjEwLjAwI01pY2UjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTEuMDAjU3dpbmUjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTIuMDAjUmFiYml0cyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xMy4wMCNHdWluZWEgcGlncyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xNC4wMCNQcmltYXRlcyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xNS4wMCNBcm1hZGlsbG9zIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjE2LjAwI0NhdHRsZSMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xNy4wMCNDYW1lbHMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTYuMDAuMDAjQmlyZHMgYW5kIGZvd2wjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTYuMDEuMDAjTGl2ZSBjaGlja2VucyMxMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNi4wMi4wMCNMaXZlIGR1Y2tzIzEwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE2LjAzLjAwI0xpdmUgdHVya2V5cyMxMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNi4wNC4wMCNMaXZlIGdlZXNlIzEwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE2LjA1LjAwI0xpdmUgcGhlYXNhbnRzIzEwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE3LjAwLjAwI0xpdmUgZmlzaCMxMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wMS4wMCNMaXZlIHNhbG1vbiMxMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wMi4wMCNMaXZlIHRyb3V0IzEwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE3LjAzLjAwI0xpdmUgdGFsYXBpYSMxMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wNC4wMCNMaXZlIGNhcnAjMTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTcuMDUuMDAjTGl2ZSBlZWxzIzEwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjAwLjAwI1NoZWxsZmlzaCBhbmQgYXF1YXRpYyBpbnZlcnRlYnJhdGVzIzEwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjAxLjAwI0xpdmUgc2hyaW1wIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjAyLjAwI0xpdmUgY2xhbXMjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDMuMDAjTGl2ZSBtdXNzZWxzIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjA0LjAwI0xpdmUgb3lzdGVycyMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wNS4wMCNMaXZlIGNyYWJzIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjA2LjAwI0xpdmUgYWJhbG9uZSMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wNy4wMCNMaXZlIG9jdG9waSMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wOC4wMCNMaXZlIHNxdWlkIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE5LjAwLjAwI0luc2VjdHMjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTkuMDEuMDAjQnV0dGVyZmxpZXMjMTAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTkuMDIuMDAjQmVldGxlcyMxMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOS4wMy4wMCNCZWVzIzEwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE5LjA0LjAwI1NpbGt3b3JtcyMxMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMC4xMC4yMC4wMC4wMCNXaWxkIGFuaW1hbHMjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMjAuMDEuMDAjRWxlcGhhbnRzIzEwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjIwLjAyLjAwI0xpdmUgZm94ZXMjMTAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMDAuMDAuMDAjRG9tZXN0aWMgcGV0IHByb2R1Y3RzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjExLjExLjAwLjAwI1BldCBmb29kIGJvd2xzIG9yIGVxdWlwbWVudCMxMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMi4wMC4wMCNNZWRpY2F0ZWQgcGV0IHRyZWF0bWVudHMjMTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDAuMDAjRG9tZXN0aWMgcGV0IHRyZWF0bWVudHMgYW5kIGFjY2Vzc29yaWVzIGFuZCBlcXVpcG1lbnQjMTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDEuMDAjUGV0IHRveXMjMTAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDIuMDAjUGV0IGdyb29taW5nIHByb2R1Y3RzIzEwLjExLjEzLjAwLjAwCi11bnNwc2M3IzEwLjExLjEzLjAzLjAwI1BldCBsaXR0ZXIgb3IgZXF1aXBtZW50IGZvciBwZXQgd2FzdGUgbWFuYWdlbWVudCMxMC4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMy4wNC4wMCNQZXQgZm9vZCBib3dscyBvciBlcXVpcG1lbnQjMTAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDUuMDAjTWVkaWNhdGVkIHBldCB0cmVhdG1lbnRzIzEwLjExLjEzLjAwLjAwCi11bnNwc2M3IzEwLjEyLjAwLjAwLjAwI0FuaW1hbCBmZWVkIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjAwLjAwI0xpdmVzdG9jayBmZWVkIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjAxLjAwI1B1cmUgd2hlYXQgYnJhbiMxMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wMi4wMCNGZWVkIG9hdHMjMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDMuMDAjRmVlZCBjb3JuIzEwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjA0LjAwI0ZlZWQgc29yZ2h1bSMxMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wNS4wMCNIYXkjMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDYuMDAjT2lsIGNha2UjMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTYuMDAuMDAjQmlyZCBhbmQgZm93bCBmb29kIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE2LjAxLjAwI0xpdmUgZm9vZCBmb3IgYmlyZHMjMTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTYuMDIuMDAjQmlyZCBzZWVkIzEwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE2LjAzLjAwI0JpcmQgdHJlYXRzIG9yIHNuYWNrcyMxMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNi4wNC4wMCNQb3VsdHJ5IGZvb2QjMTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTcuMDAuMDAjRmlzaCBmb29kIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE3LjAxLjAwI0ZyZXNoIG9yIGZyb3plbiBicmluZSMxMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNy4wMi4wMCNGaXNoIGZvb2QgcGVsbGV0cyMxMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNy4wMy4wMCNGaXNoIGZvb2QgZmxha2VzIzEwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE4LjAwLjAwI0RvZyBhbmQgY2F0IGZvb2QjMTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDEuMDAjRHJ5IGZvb2QgZm9yIGRvZ3MjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDIuMDAjTW9pc3QgZm9vZCBmb3IgZG9ncyMxMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wMy4wMCNNaWxrIGZvciBkb2dzIG9yIGNhdHMjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDQuMDAjRHJ5IGZvb2QgZm9yIGNhdHMjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDUuMDAjTW9pc3QgZm9vZCBmb3IgY2F0cyMxMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wNi4wMCNUcmVhdHMgb3Igc25hY2tzIGZvciBjYXRzIG9yIGRvZ3MjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTkuMDAuMDAjUm9kZW50IGZvb2QjMTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTkuMDEuMDAjUGVsbGV0aXplZCBmb29kIGZvciByb2RlbnRzIzEwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzEwLjEyLjIwLjAwLjAwI1JlcHRpbGUgZm9vZCMxMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4yMC4wMS4wMCNQZWxsZXRpemVkIGZvb2QgZm9yIHJlcHRpbGVzIzEwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjIwLjAyLjAwI01vaXN0IGZvb2QgZm9yIHJlcHRpbGVzIzEwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjIwLjAzLjAwI0xpdmUgZm9vZCBmb3IgcmVwdGlsZXMjMTAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMDAuMDAuMDAjQW5pbWFsIGNvbnRhaW5tZW50IGFuZCBoYWJpdGF0cyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNS4wMC4wMCNBbmltYWwgc2hlbHRlcnMjMTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTUuMDYuMDAjTGl2ZXN0b2NrIHN0YWJsZXMjMTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTUuMDcuMDAjRG9tZXN0aWNpemVkIHBldCBob3VzZXMjMTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTUuMDguMDAjUGV0IGJlZHMjMTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTYuMDAuMDAjQW5pbWFsIGNvbnRhaW5tZW50IzEwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEzLjE2LjAxLjAwI0NhZ2VzIzEwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE2LjAyLjAwI0tlbm5lbHMjMTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTYuMDMuMDAjQW5pbWFsIGNhcnJ5aW5nIGNhc2VzIzEwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE2LjA0LjAwI0RvZyBydW5zIzEwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE3LjAwLjAwI0FuaW1hbCBoYWJpdGF0cyMxMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNy4wMS4wMCNUZXJyYXJpdW1zIzEwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE3LjAyLjAwI0FxdWFyaXVtcyMxMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNC4wMC4wMC4wMCNTYWRkbGVyeSBhbmQgaGFybmVzcyBnb29kcyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNS4wMC4wMCNTYWRkbGVyeSMxMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNS4wMS4wMCNTYWRkbGVzIzEwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE1LjAyLjAwI1doaXBzIzEwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjAwLjAwI0hhcm5lc3MgZ29vZHMjMTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDEuMDAjQnJpZGxlcyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wMi4wMCNZb2tlcyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wMy4wMCNIb3JzZSBiaXRzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA0LjAwI1JlaW5zIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA1LjAwI1N0aXJydXBzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA2LjAwI0xlYXNoZXMgb3IgbGVhZHMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDcuMDAjQ29sbGFycyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wOC4wMCNIYXJuZXNzZXMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDkuMDAjUmVzdHJhaW50cyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4wMC4wMC4wMCNTZWVkcyBhbmQgYnVsYnMgYW5kIHNlZWRsaW5ncyBhbmQgY3V0dGluZ3MjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDAuMDAjVmVnZXRhYmxlIHNlZWRzIGFuZCBzZWVkbGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDEuMDAjQmVhbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDIuMDAjQ2Fycm90IHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wMy4wMCNDZWxlcnkgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA0LjAwI0NoaWxpIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wNS4wMCNDb3VyZ2V0dGUgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA2LjAwI0NvdyBwZWEgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA3LjAwI0N1Y3VtYmVyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wOC4wMCNFZ2dwbGFudCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDkuMDAjRW5kaXZlIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xMC4wMCNHYXJsaWMgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjExLjAwI0xlZWsgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjEyLjAwI0xldHR1Y2Ugc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjEzLjAwI0Nvcm4gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjE0LjAwI01lbG9uIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xNS4wMCNPbmlvbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTYuMDAjU295YSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTcuMDAjU3BpbmFjaCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTguMDAjVG9tYXRvIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xOS4wMCNUdXJuaXAgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjIwLjAwI0NoYXJkIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4yMS4wMCNTd2VldCBwZXBwZXIgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjIyLjAwI0JlZXQgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjIzLjAwI0NhdWxpZmxvd2VyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4yNC4wMCNQYXJzZWx5IHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wMC4wMCNDZXJlYWwgc2VlZHMjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDEuMDAjV2hlYXQgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDIuMDAjQ29semEgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDMuMDAjQmFybGV5IHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjA0LjAwI01pbGxldCBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wNS4wMCNPYXQgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDYuMDAjU2VzYW1lIHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjA3LjAwI0xpbnNlZWQgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDguMDAjQ2FzdG9yIG9pbCBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wOS4wMCNNYWl6ZSBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4xMC4wMCNSeWUgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMTEuMDAjU29yZ2h1bSBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNy4wMC4wMCNHcmFzcyBhbmQgZm9yYWdlIHNlZWRzIGFuZCBzZWVkbGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTcuMDEuMDAjUmljZSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTcuMDIuMDAjQ2xvdmVyIHNlZWRzIG9yIHNlZWRsaW5nIzEwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE3LjAzLjAwI0FsZmFsZmEgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE3LjA0LjAwI0dyYXNzIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wMC4wMCNTcGljZSBjcm9wIHNlZWRzIGFuZCBzZWVkbGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDEuMDAjUGVwcGVyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wMi4wMCNWYW5pbGxhIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wMy4wMCNDaW5uYW1vbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDQuMDAjQ2xvdmUgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjA1LjAwI0NvcmlhbmRlciBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDYuMDAjR2luZ2VyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wNy4wMCNTYWZmcm9uIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wOC4wMCNUaHltZSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDkuMDAjQ3Vycnkgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjEwLjAwI011c3RhcmQgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjExLjAwI0dpbnNlbmcgcm9vdHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjAwLjAwI0Zsb3dlciBzZWVkcyBhbmQgYnVsYnMgYW5kIHNlZWRsaW5ncyBhbmQgY3V0dGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDEuMDAjVHVsaXAgc2VlZHMgb3IgYnVsYnMgb3Igc2VlZGxpbmdzIG9yIGN1dHRpbmdzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjAyLjAwI1Jvc2Ugc2VlZHMgb3Igc2VlZGxpbmdzIG9yIGN1dHRpbmdzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjAzLjAwI0RhZmZvZGlsIHNlZWRzIG9yIGJ1bGJzIG9yIHNlZWRsaW5ncyBvciBjdXR0aW5ncyMxMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOS4wNC4wMCNTdW5mbG93ZXIgc2VlZHMjMTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDUuMDAjSHlhY2ludGggYnVsYnMgb3Igc2hvb3RzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjA2LjAwI0xpbHkgQnVsYnMjMTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjAuMDAuMDAjVHJlZSBhbmQgc2hydWIgc2VlZHMgYW5kIGN1dHRpbmdzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIwLjAxLjAwI0ZydWl0IHRyZWUgc2VlZHMgb3IgY3V0dGluZ3MjMTAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjAuMDIuMDAjQ29uaWZlciB0cmVlIHNlZWRzIG9yIGN1dHRpbmdzIzEwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIwLjAzLjAwI051dCB0cmVlIHNlZWRzIG9yIGN1dHRpbmdzIzEwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIxLjAwLjAwI1Jlc2lkdWVzIG90aGVyIHRoYW4gYW5pbWFsIGZlZWQjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjEuMDEuMDAjUmVzaWR1ZXMgYmFib29sIHNlZWQgZXh0cmFjdGlvbiMxMC4xNS4yMS4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMS4wMi4wMCNSZXNpZHVlcyBvZiByYXBlIHNlZWRzIzEwLjE1LjIxLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIxLjAzLjAwI1Jlc2lkdWUgb2YgbGluc2VlZCMxMC4xNS4yMS4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMS4wNC4wMCNPaWwgY2FrZSBvZiBuZWVtIzEwLjE1LjIxLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIyLjAwLjAwI0ZpYnJvdXMgY3JvcCBzZWVkcyBhbmQgc2VlZGxpbmdzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIyLjAxLjAwI0NvdHRvbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMjIuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMDAuMDAuMDAjRmxvcmljdWx0dXJlIGFuZCBzaWx2aWN1bHR1cmUgcHJvZHVjdHMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDAuMDAjVHJlZXMgYW5kIHNocnVicyMxMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wMS4wMCNPbGl2ZSB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wMi4wMCNDb2ZmZWUgc2hydWJzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjAzLjAwI0NvY29hIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA0LjAwI0FwcGxlIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA1LjAwI1BlYWNoIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA2LjAwI09yYW5nZSB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wNy4wMCNSaG9kZW5kcm9uIHNocnVicyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wOC4wMCNUZWEgc2hydWJzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA5LjAwI0NvbmlmZXIgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMTAuMDAjU3BydWNlIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjExLjAwI1BpbmUgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMTIuMDAjRmlyIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjAwLjAwI0Zsb3JhbCBwbGFudHMjMTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTYuMDEuMDAjUm9zZSBwbGFudHMjMTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTYuMDIuMDAjUG9pbnNldHRpYXMgcGxhbnRzIzEwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjAzLjAwI09yY2hpZHMgcGxhbnRzIzEwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjA0LjAwI0F6YWxlYXMgcGxhbnRzIzEwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjA1LjAwI0NhY3R1cyBwbGFudHMjMTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDAuMDAjQ3V0IGZsb3dlcnMjMTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDEuMDAjQ3V0IGdsYWRpb2x1cyMxMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNy4wMi4wMCNDdXQgbGlsaWVzIzEwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE3LjAzLjAwI0N1dCBjYXJuYXRpb25zIzEwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE3LjA0LjAwI0N1dCB0dWxpcHMjMTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDUuMDAjQ3V0IHJvc2VzIzEwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE4LjAwLjAwI05vbiBmbG93ZXJpbmcgcGxhbnRzIzEwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE2LjE4LjAxLjAwI0Zlcm5zIzEwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE4LjAyLjAwI0l2aWVzIzEwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE4LjAzLjAwI1BoaWxvZGVuZHJvbnMjMTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDAuMDAjRHJpZWQgZmxvcmFsIHByb2R1Y3RzIzEwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjAxLjAwI0RyaWVkIHBvZHMjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDIuMDAjRHJpZWQgbGVhZnkgZ3JlZW5lcnkjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDMuMDAjRHJpZWQgZmVybiBncmVlbmVyeSMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wNC4wMCNEcmllZCBmdWxsIGZsb3dlcnMjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDUuMDAjRHJpZWQgdHdpZ3Mgb3Igc3RpY2tzIzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjA2LjAwI0RyaWVkIGdyYXNzIHBsdW1lcyMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wNy4wMCNEcmllZCBwcmVzc2VkIGZsb3dlcnMjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDguMDAjRHJpZWQgZmxvd2VyIHBldGFscyMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNy4wMC4wMC4wMCNGZXJ0aWxpemVycyBhbmQgcGxhbnQgbnV0cmllbnRzIGFuZCBoZXJiaWNpZGVzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjE3LjE1LjAwLjAwI09yZ2FuaWMgZmVydGlsaXplcnMgYW5kIHBsYW50IG51dHJpZW50cyMxMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNS4wMS4wMCNNYW51cmUgb3IgZ3Vhbm8jMTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTUuMDIuMDAjUGxhbnQgaG9ybW9uZXMjMTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTUuMDMuMDAjRmlzaCBtZWFsIzEwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE2LjAwLjAwI0NoZW1pY2FsIGZlcnRpbGl6ZXJzIGFuZCBwbGFudCBudXRyaWVudHMjMTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTYuMDEuMDAjTml0cm9nZW5vdXMgZmVydGlsaXplciMxMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wMi4wMCNQb3Rhc3NpYyBmZXJ0aWxpemVyIzEwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE2LjAzLjAwI1Bob3NwaGF0aWMgZmVydGlsaXplciMxMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wNC4wMCNTdWxwaHVyaWMgZmVydGlsaXplciMxMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wNS4wMCNOaXRyb2dlbiBQaG9zcGhvcm91cyBQb3Rhc3NpdW0gTWl4dHVyZXMgKE5QSykjMTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTcuMDAuMDAjSGVyYmljaWRlcyMxMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNy4wMS4wMCNXZWVkIGtpbGxlciMxMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNy4wMi4wMCNGdW5naWNpZGVzIzEwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE5LjAwLjAwLjAwI1Blc3QgY29udHJvbCBwcm9kdWN0cyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNS4wMC4wMCNJbnNlY3RpY2lkZXMgYW5kIGluc2VjdCBjb250cm9sIHRyYXBzIzEwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE5LjE1LjAxLjAwI1NwcmF5IGluc2VjdGljaWRlcyMxMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNS4wMi4wMCNCYWl0IGluc2VjdGljaWRlcyMxMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNS4wMy4wMCNTaWxpY2ljIGFjaWQjMTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTUuMDQuMDAjRmx5aW5nIGluc2VjdCBjb250cm9sIHRyYXBzIzEwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE2LjAwLjAwI1JvZGVudGljaWRlcyMxMC4xOS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNi4wMS4wMCNFeHRydWRlZCBiYWl0cyMxMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNi4wMi4wMCNNZWFsIG9yIHBlbGxldCBvciBzZWVkIGJhaXRzIzEwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE2LjAzLjAwI0xpcXVpZCBiYWl0cyMxMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNi4wNC4wMCNUcmFja2luZyBwb3dkZXJzIzEwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE3LjAwLjAwI0FuaW1hbCBjb250cm9sIHRyYXBzIzEwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE5LjE3LjAxLjAwI01vdXNlIG9yIHJhdCB0cmFwcyMxMC4xOS4xNy4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNy4wMi4wMCNXaXJlIGNhZ2UgdHJhcHMjMTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMDAuMDAuMDAuMDAjTWluZXJhbCBhbmQgVGV4dGlsZSBhbmQgSW5lZGlibGUgUGxhbnQgYW5kIEFuaW1hbCBNYXRlcmlhbHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMDAuMDAuMDAjTWluZXJhbHMgYW5kIG9yZXMgYW5kIG1ldGFscyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wMC4wMCNNaW5lcmFscyMxMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wMS4wMCNNaWNhIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjAyLjAwI0VtZXJ5IzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjAzLjAwI1F1YXJ0eiMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wNC4wMCNQeXJpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDUuMDAjU3VscGh1ciMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wNi4wMCNDaGFsayMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wNy4wMCNHcmFwaGl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wOC4wMCNEb2xvbWl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wOS4wMCNNYWduZXNpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTAuMDAjQXNiZXN0b3MjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTEuMDAjQ2FsY2l1bSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xMi4wMCNCb3JhdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTMuMDAjQ3J5b2xpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTQuMDAjRmVsZHNwYXIjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTUuMDAjTGV1Y2l0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xNi4wMCNOZXBoZWxpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTcuMDAjU3RlYXRpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTguMDAjVGFsYyMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xOS4wMCNEaWFtb25kcyMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yMC4wMCNHYXJuZXRzIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjIxLjAwI1NpbGljb24gY2FyYmlkZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yMi4wMCNBY3RpdmF0ZWQgY2FyYm9uIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjIzLjAwI011bGl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yNC4wMCNGbG91cm9zcGFyIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjI1LjAwI0tlaXNlcml0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yNi4wMCNDYXJuYWxsaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjAwLjAwI09yZXMjMTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDEuMDAjSXJvbiBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDIuMDAjVGl0YW5pdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjAzLjAwI1VyYW5pdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjA0LjAwI0NvcHBlciBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDUuMDAjQWx1bWludW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjA2LjAwI05pY2tlbCBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDcuMDAjU2lsdmVyIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wOC4wMCNMZWFkIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wOS4wMCNaaW5jIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xMC4wMCNUaW4gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjExLjAwI01hbmdhbmVzZSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTIuMDAjQ2hyb21pdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjEzLjAwI1R1bmdzdGVuIG9yIHdvbGZyYW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE0LjAwI01vbHliZGVudW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE1LjAwI0NvYmFsdCBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTYuMDAjR29sZCBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTcuMDAjVGFudGFsdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE4LjAwI1BsYXRpbnVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xOS4wMCNWZXJtaWN1bGl0ZSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMjAuMDAjVGhvcml1bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMjEuMDAjS3lhbml0ZSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMjIuMDAjQW50aW1vbnkgb3JlcyMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4yMy4wMCNaaXJjb25pdW0gb3JlcyMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wMC4wMCNCYXNlIG1ldGFscyMxMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wMS4wMCNTbGFnIG9yIGFzaCMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wMi4wMCNOYXR1cmFsIGdyYXBoaXRlIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjAzLjAwI1RpdGFuaXVtIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA0LjAwI1N0ZWVsIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA1LjAwI0FsdW1pbnVtIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA2LjAwI05pY2tlbCMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wNy4wMCNNYWduZXNpdW0jMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDguMDAjQmlzbXV0aCMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wOS4wMCNBbnRpbW9ueSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4xMC4wMCNDYWRtaXVtIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjExLjAwI05vbiBmZXJyb3VzIGFsbG95IzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjEyLjAwI0ZlcnJvdXMgYWxsb3kjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMTMuMDAjSXJvbiMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4xNC4wMCNMZWFkIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjE1LjAwI0NvcHBlciMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xOC4wMC4wMCNQcmVjaW91cyBtZXRhbHMjMTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTguMDEuMDAjR29sZCMxMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xOC4wMi4wMCNTaWx2ZXIjMTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTguMDMuMDAjUGxhdGludW0jMTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMDAuMDAuMDAjRWFydGggYW5kIHN0b25lIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjExLjE1LjAwLjAwI0RpcnQgYW5kIHNvaWwjMTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTUuMDEuMDAjU29pbCMxMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNS4wMi4wMCNGaWxsIGRpcnQjMTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTUuMDMuMDAjVG9wc29pbCMxMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wMC4wMCNTdG9uZSMxMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wMS4wMCNHeXBzdW0jMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDIuMDAjVHJhdmVydGluZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wMy4wMCNFY2F1c3NpbmUgb3IgYWxhYmFzdGVyIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA0LjAwI0dyYW5pdGUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDUuMDAjTWFyYmxlIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA2LjAwI1NsYXRlIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA3LjAwI1NhbmRzdG9uZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wOC4wMCNMaW1lc3RvbmUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDkuMDAjQmFzYWx0IzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjEwLjAwI1B1bWljZSBzdG9uZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNy4wMC4wMCNTYW5kIzExLjExLjAwLjAwLjAwCi11bnNwc2M3IzExLjExLjE3LjAxLjAwI1NpbGljYSBzYW5kIzExLjExLjE3LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjAwLjAwI0NsYXlzIzExLjExLjAwLjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjAxLjAwI1RlcnJhIGNvdHRhIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjAyLjAwI0ZpcmVjbGF5IzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjAzLjAwI0thb2xpbiBvciBvdGhlciBrYW9saW5pYyBjbGF5cyMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wNC4wMCNCZW50b25pdGUjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDUuMDAjQW5kYWx1c2l0ZSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wNi4wMCNNdWxsaXRlIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA3LjAwI0NoYW1vdHRlIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA4LjAwI0NvbW1vbiBjbGF5IzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA5LjAwI0JhbGwgY2xheSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4xMC4wMCNGdWxsZXJzIGVhcnRoIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjAwLjAwLjAwI05vbiBlZGlibGUgcGxhbnQgYW5kIGZvcmVzdHJ5IHByb2R1Y3RzIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEyLjE1LjAwLjAwI1NhcCMxMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNS4wMi4wMCNSb3NpbiMxMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNS4wMy4wMCNMYWMjMTEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDAuMDAjV29vZCMxMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wMy4wMCNMb2dzIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA0LjAwI1NvZnQgdGltYmVyIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA1LjAwI1JhdHRhbiMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wNi4wMCNDb3JrIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA3LjAwI1dvb2QgcHVscCMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wOC4wMCNCYW1ib28jMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDkuMDAjUGx5d29vZCMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4xMC4wMCNIYXJkd29vZHMjMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDAuMDAjRm9yZXN0cnkgYnkgcHJvZHVjdHMjMTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDEuMDAjU2F3IGR1c3QjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDIuMDAjV29vZCBjaGlwcyMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wMy4wMCNQZWF0IG1vc3MjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDQuMDAjV29vZCBzaGF2aW5ncyMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wNS4wMCNCYXJrIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA2LjAwI011bGNoIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA3LjAwI1dvb2Qgd29vbCMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wOC4wMCNXb29kIGZsb3VyIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA5LjAwI0JhbHNhbXMjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDAuMDAjUGxhbnQgZmliZXJzIzExLjEyLjAwLjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjAxLjAwI0hlbXAjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDIuMDAjQ290dG9uIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjAzLjAwI0ZsYXgjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDQuMDAjSnV0ZSMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wNS4wMCNTaXNhbCMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wNi4wMCNDb2NvbnV0IGZpYnJlcyBvciBjb2lyIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjA3LjAwI0FiYWNhIGZpYmVycyMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wOC4wMCNSYW1pZSMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wOS4wMCNTdHJhdyMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4xMC4wMCNCcm9vbSBjb3JuIG9yIGlzdGxlIG9yIHBpYXNzYXZhIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE5LjAwLjAwI1BlcmZ1bWVyeSBwcm9kdWN0cyMxMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOS4wMS4wMCNMaWNvcmljZSByb290cyMxMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xMy4wMC4wMC4wMCNOb24gZWRpYmxlIGFuaW1hbCBwcm9kdWN0cyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wMC4wMCNBbmltYWwgaGlkZXMgYW5kIHNraW5zIGFuZCBhbmltYWwgdGV4dGlsZSBtYXRlcmlhbHMjMTEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDEuMDAjRmVhdGhlcnMjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDIuMDAjRnVycyMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wMy4wMCNBbmltYWwgaGFpciMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wNC4wMCNIaWRlcyMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wNS4wMCNVbnByb2Nlc3NlZCBtb2hhaXIjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDYuMDAjVW5wcm9jZXNzZWQgd29vbCMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wNy4wMCNTdWVkZSMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wOC4wMCNGdWxsIGdyYWluIGxlYXRoZXIjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDAuMDAjT3RoZXIgYW5pbWFsIHByb2R1Y3RzIzExLjEzLjAwLjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjAxLjAwI0l2b3J5IzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjAyLjAwI1NlbWVuIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjAzLjAwI0V4Y3JldGlvbnMjMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDQuMDAjRmlzaCBlZ2dzIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjA1LjAwI0JvbmVzIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjA2LjAwI0FuaW1hbCBob3JucyMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wNy4wMCNFbWJyeW9zIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjA4LjAwI1NoZWxsIGFydGljbGVzIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjAwLjAwLjAwI1NjcmFwIGFuZCB3YXN0ZSBtYXRlcmlhbHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTUuMDAuMDAjTWV0YWwgd2FzdGUgYW5kIHNjcmFwIzExLjE0LjAwLjAwLjAwCi11bnNwc2M3IzExLjE0LjE1LjAxLjAwI0ZlcnJvdXMgbWV0YWwgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTUuMDIuMDAjTm9uIGZlcnJvdXMgbWV0YWwgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTUuMDMuMDAjQXV0b21vdGl2ZSB3cmVja2luZyBmb3Igd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDAuMDAjTm9uIG1ldGFsbGljIHdhc3RlIGFuZCBzY3JhcCMxMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wMS4wMCNUZXh0aWxlIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjAyLjAwI1BsYXN0aWMgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDMuMDAjT2lsIHdhc3RlcyMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wNC4wMCNQYXBlciB3YXN0ZXMjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDUuMDAjR2xhc3Mgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDYuMDAjV29vZCB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wNy4wMCNSdWJiZXIgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDguMDAjSGF6YXJkb3VzIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjA5LjAwI0NvbXBvc2l0aW9uIGxlYXRoZXIjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMTAuMDAjTGVhdGhlciB3YXN0ZSBhbmQgc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTcuMDAuMDAjRm9vZCBhbmQgdG9iYWNjbyB3YXN0ZSBhbmQgc2NyYXAjMTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTcuMDEuMDAjRm9vZCB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNy4wMi4wMCNUb2JhY2NvIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjAwLjAwLjAwI0ZpYmVycyBhbmQgdGhyZWFkcyBhbmQgeWFybnMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDAuMDAjRmliZXJzIzExLjE1LjAwLjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjAxLjAwI0FjZXRhdGUgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjAyLjAwI055bG9uIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wMy4wMCNQb2x5ZXN0ZXIgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA0LjAwI0FjcnlsaWMgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA1LjAwI1Zpc2Nvc2UgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA2LjAwI1JheW9uIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wNy4wMCNDb3R0b24gZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA4LjAwI1dvb2wgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA5LjAwI1NpbGsgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjEwLjAwI1ZlZ2V0YWJsZSBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMTEuMDAjUG9seXByb3B5bGVuZSBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMTIuMDAjR2xhc3MgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjEzLjAwI0NlcmFtaWMgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjE0LjAwI1BvbHltZXIgYXJhbWlkIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4xNS4wMCNBc2Jlc3RvcyBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDAuMDAjVGhyZWFkcyMxMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wMS4wMCNDb3R0b24gdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjAyLjAwI1NpbGsgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjAzLjAwI1BvbHllc3RlciB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDQuMDAjUG9seWFtaWRlIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wNS4wMCNCaXNtYWxlbWlkZSB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDYuMDAjRmliZXJnbGFzcyB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDcuMDAjR3JhcGhpdGUgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjA4LjAwI055bG9uIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wOS4wMCNSZXNpbiBpbXByZWduYXRlZCB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMTAuMDAjUnViYmVyIG9yIGxhdGV4IHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4xMS4wMCNTcGFuZGV4IHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wMC4wMCNZYXJucyMxMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wMS4wMCNXb29sIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDIuMDAjQ290dG9uIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDMuMDAjUG9seWVzdGVyIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDQuMDAjQWNyeWxpYyB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA1LjAwI1NpbGsgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wNi4wMCNSYW1pZSB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA3LjAwI0ZsYXggeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wOC4wMCNBbmltYWwgaGFpciB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA5LjAwI1N5bnRoZXRpYyB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjEwLjAwI0p1dGUgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4xMS4wMCNDb2lyIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMTIuMDAjUGFwZXIgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4xMy4wMCNIZW1wIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMDAuMDAuMDAjRmFicmljcyBhbmQgbGVhdGhlciBtYXRlcmlhbHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTUuMDAuMDAjU2lsayBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE1LjAxLjAwI1BsYWluIHdlYXZlIHNpbGsgZmFicmljcyMxMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNS4wMi4wMCNKYWNxdWFyZCB3ZWF2ZSBzaWxrIGZhYnJpY3MjMTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTUuMDMuMDAjS25pdCBzaWxrIGZhYnJpY3MjMTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTUuMDQuMDAjU2lsayB2ZWx2ZXRzIGZhYnJpY3MjMTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTYuMDAuMDAjV29vbCBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE2LjAxLjAwI1BsYWluIHdlYXZlIHdvb2wgZmFicmljcyMxMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNi4wMi4wMCNKYWNxdWFyZCB3ZWF2ZSB3b29sIGZhYnJpY3MjMTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTYuMDMuMDAjS25pdCB3b29sIGZhYnJpY3MjMTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDAuMDAjQ290dG9uIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDEuMDAjUGxhaW4gd2VhdmUgY290dG9uIGZhYnJpY3MjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDIuMDAjVHdpbGwgd2VhdmUgY290dG9uIGZhYnJpY3MjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDMuMDAjQ290dG9uIG94Zm9yZCBjbG90aHMjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDQuMDAjS25pdCBjb3R0b24gZmFicmljcyMxMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNy4wNS4wMCNDb3R0b24gdmVsdmV0IGZhYnJpY3MjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDAuMDAjU3ludGhldGljIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDEuMDAjUGxhaW4gd2VhdmUgc3ludGhldGljIGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDIuMDAjSmFjcXVhcmQgd2VhdmUgc3ludGhldGljIGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDMuMDAjRG9iYnkgd2VhdmUgc3ludGhldGljIGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDQuMDAjS25pdCBzeW50aGV0aWMgZmFicmljcyMxMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOC4wNS4wMCNTeW50aGV0aWMgdmVsdmV0IGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTkuMDAuMDAjQXJ0aWZpY2lhbCBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjAxLjAwI1BsYWluIHdlYXZlIGFydGlmaWNpYWwgZmFicmljcyMxMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOS4wMi4wMCNKYWNxdWFyZCB3ZWF2ZSBhcnRpZmljaWFsIGZhYnJpY3MjMTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTkuMDMuMDAjRG9iYnkgd2VhdmUgYXJ0aWZpY2lhbCBmYWJyaWNzIzExLjE2LjE5LjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjA0LjAwI0tuaXQgYXJ0aWZpY2lhbCBmYWJyaWNzIzExLjE2LjE5LjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjA1LjAwI0FydGlmaWNhbCB2ZWx2ZXQgZmFicmljcyMxMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMC4wMC4wMCNGYWJyaWNzIG9mIHZlZ2V0YWJsZSBtYXRlcmlhbCBvdGhlciB0aGFuIGNvdHRvbiMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMC4wMS4wMCNQbGFpbiB3ZWF2ZSBub24gY290dG9uIHZlZ2V0YWJsZSBmaWJlciBmYWJyaWNzIzExLjE2LjIwLjAwLjAwCi11bnNwc2M3IzExLjE2LjIwLjAyLjAwI0tuaXQgbm9uIGNvdHRvbiB2ZWdldGFibGUgZmliZXIgZmFicmljcyMxMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMC4wMy4wMCNIZXNzaWFuIG9yIGhlbXAgb3IganV0ZSBjbG90aCMxMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wMC4wMCNTcGVjaWFsdHkgZmFicmljcyBvciBjbG90aCMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wMS4wMCNDaGVlc2UgY2xvdGggb3IgZmFicmljIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjAyLjAwI0Jpc21hbGVtaWRlIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wMy4wMCNGaWJlcmdsYXNzIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wNC4wMCNHcmFwaGl0ZSBmYWJyaWMgb3IgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDUuMDAjR2xhc3MgZmFicmljIG9yIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjA3LjAwI1Jlc2luIGltcHJlZ25hdGVkIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wOC4wMCNXaXJlIG1lc2ggZmFicmljIG9yIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjA5LjAwI0xhY2UjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTAuMDAjTmV0dGluZyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xMS4wMCNNZXNoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjEyLjAwI0NvYXRlZCBmYWJyaWNzIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjEzLjAwI1VwaG9sc3RlcnkgZmFicmljcyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xNC4wMCNIb29rIGFuZCBsb29wIGZhYnJpY3Mgb3IgdGFwZXMjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTUuMDAjRWxhc3RpYyBicmFpZCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xNi4wMCNCdXJsYXAgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTcuMDAjUnViYmVyIGZhYnJpY3MjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTguMDAjUGFwZXIgeWFybiBmYWJyaWMjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTkuMDAjVHJhY2luZyBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4yMC4wMCNCb2x0aW5nIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjIxLjAwI09ybmFtZW50YWwgdHJpbW1pbmdzIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIyLjAwLjAwI05vbndvdmVuIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjIuMDEuMDAjU3B1bmJvbmRlZCBub253b3ZlbnMjMTEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjIuMDIuMDAjU3B1bmxhY2VkIG5vbndvdmVucyMxMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wMC4wMCNMZWF0aGVycyMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wMS4wMCNDaGFtb2lzIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDIuMDAjR29hdCBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjAzLjAwI1NoZWVwIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDQuMDAjUGF0ZW50IGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDUuMDAjQ293IGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDYuMDAjUGlnIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDcuMDAjU3ludGhldGljIG9yIGltaXRhdGlvbiBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjA4LjAwI0J1ZmZhbG8gbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wOS4wMCNSZXB0aWxlIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMDAuMDAuMDAuMDAjQ2hlbWljYWxzIGluY2x1ZGluZyBCaW8gQ2hlbWljYWxzIGFuZCBHYXMgTWF0ZXJpYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjAwLjAwLjAwI09yZ2FuaWMgY2hlbWljYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjAwLjAwI0FsY29ob2wjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDEuMDAjU2F0dXJhdGVkIG1vbm9oeWRyaWMgYWxjb2hvbCMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wMi4wMCNJc29wcm9weWwgYWxjb2hvbCMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wMy4wMCNVbnNhdHVyYXRlZCBtb25vaHlkcmljIGFsY29ob2wjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDQuMDAjQ3ljbGljIGFsY29ob2wgb3IgdGhlaXIgaGFsb2dlbmF0ZWQgb3Igc3VscGhvbmF0ZWQgb3Igbml0cmF0ZWQgZGVyaXZhdGl2ZXMjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDUuMDAjUGhlbm9sIGFsY29ob2wjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDYuMDAjSGFsb2dlbmF0ZWQgb3Igc3VscGhvbmF0ZWQgb3Igbml0cmF0ZWQgb3Igbml0cm9zYXRlZCBkZXJpdmF0aXZlcyBvZiBwaGVub2xzIzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjA3LjAwI01ldGh5bGF0ZWQgc3Bpcml0IzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjAwLjAwI0V0aGVycyBhbmQgYWxjb2hvbCBwZXJveGlkZXMgYW5kIGV0aGVyIHBlcm94aWRlcyBhbmQgb3RoZXIgb3JnYW5pYyBjb21wb3VuZHMjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDEuMDAjQWN5Y2xpYyBldGhlcnMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDIuMDAjQ3ljbG9uaWMgb3IgY3ljbGVuaWMgb3IgY3ljbG90ZXJwZW5pYyBldGhlcnMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDMuMDAjRXRoZXIgb3IgYXJvbWF0aWMgZXRoZXIjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDQuMDAjRXRoZXIgYWxjb2hvbCMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wNS4wMCNFdGhlciBwaGVub2xzIG9yIGV0aGVyIGFsY29ob2wgcGhlbm9scyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wNi4wMCNBbGNvaG9sIHBlcm94aWRlcyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wNy4wMCNPeGlyYW5lIG9yIGV0aHlsZW5lIG94aWRlIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjA4LjAwI0VwaWNobG9yb2h5ZHJpbiBvciAxIGNobG9ybyAyIG9yIDMgZXBveHlwcm9wYW5lIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjA5LjAwI0Vwb3hpZGVzIG9yIGVwb3h5YWxjb2hvbHMgb3IgZXBveHlwaGVub2xzIG9yIGVwb3h5ZXRoZXJzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjEwLjAwI0FjZXRhbHMgb3Iga2VtaWFjZXRhbHMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTEuMDAjQWN5Y2xpYyBhbGRlaHlkZXMgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTIuMDAjQ3ljbGljIGFsZGVoeWRlcyB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xMy4wMCNBbGNvaG9sIGFsZGVoeWRlIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjE0LjAwI1BhcmFmb3JtYWxkZWh5ZGUjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTUuMDAjQWxkZWh5ZGVzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjE2LjAwI0FjeWNsaWMga2V0b25lcyB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xNy4wMCNDeWNsb25pYyBvciBjeWNsZW5pYyBvciBjeWNsb3RlcnBlbmljIGtldG9uZXMgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTguMDAjS2V0b25lcyBvciBhcm9tYXRpYyB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xOS4wMCNLZXRvbmUgYWxjb2hvbCBvciBrZXRvbmUgYWxkZWh5ZGVzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjIwLjAwI0tldG9uZSBwaGVub2xzIG9yIGtldG9uZXMgd2l0aCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMjEuMDAjUXVpbm9uZXMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMjIuMDAjUmVubmV0IHRhYmxldHMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMjMuMDAjRW56eW1lcyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNy4wMC4wMCNNb25vY2FyYm94eWxpYyBmYXR0eSBhY2lkcyBvciBpbmR1c3RyaWFsIGFjaWQgb2lscyBmcm9tIHJlZmluaW5nIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE3LjAxLjAwI09sZWljIGFjaWQjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDIuMDAjSW5kdXN0cmlhbCBmYXR0eSBhbGNvaG9scyMxMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNy4wMy4wMCNTdGVhcmljIGFjaWQjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDQuMDAjVGFsbCBvaWwgZmF0dHkgYWNpZHMjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDUuMDAjQWNpZCBvaWxzIGZyb20gcmVmaW5pbmcjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDAuMDAjQ2FyYm94eWxpYyBhY2lkcyBhbmQgdGhlaXIgYW5oeWRyaWRlcyBhbmQgaGFsaWRlcyBhbmQgcGVyb3hpZGVzIGFuZCBwZXJveHlhY2lkcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wMS4wMCNGb3JtaWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjAyLjAwI0FjZXRpYyBhY2lkIG9yIGl0cyBzYWx0cyBvciAgYWNldGljIGFuaHlkcmlkZSMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wMy4wMCNFc3RlcnMgb2YgYWNldGljIGFjaWQjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDQuMDAjTW9ubyBvciBkaSB0cmljaGxvcmFjZXRpYyBhY2lkIG9yIHRoZWlyIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wNS4wMCNQcm9waW9uaWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjA2LjAwI0J1dHlyaWMgYWNpZHMgb3IgdmFsZXJpYyBhY2lkcyBvciB0aGVpciBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDcuMDAjUGFsbWl0aWMgYWNpZHMgb3Igc3RlYXJpYyBhY2lkcyBvciB0aGVpciBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDguMDAjU2F0dXJhdGVkIGFjcnlsaWMgbW9ub2NhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDkuMDAjVW5zYXR1cmF0ZWQgYWN5Y2xpYyBtb25vY2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xMC4wMCNDeWNsb25pYyBvciBjeWNsZW5pYyBvciBjeWNsb3RlcnBlbmljIG1vbm9jYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjExLjAwI0Fyb21hdGljIG1vbm9jYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjEyLjAwI0FjeWNsaWMgcG9seWNhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTMuMDAjQ3ljbG9uaWMgb3IgY3ljbGVuaWMgb3IgY3ljbG90ZXJwZW5pYyBwb2x5Y2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xNC4wMCNBcm9tYXRpYyBwb2x5Y2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xNS4wMCNMYWN0aWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjE2LjAwI1RhcnRhcmljIGFjaWQgb3IgaXRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xNy4wMCNBdHJpYyBhY2lkIG9yIHRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xOC4wMCNHbHVjYXJpYyBhY2lkIG9yIGl0cyBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTkuMDAjUGhlbnlsZ2x5b2NvbGljIGFjaWQgb3IgbWFuZGVsaWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjIwLjAwI0NhcmJveHlsaWMgYWNpZHMgd2l0aCBhbGNvaG9sIGZ1bmN0aW9uIGJ1dCB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4yMS4wMCNDYXJib3h5bGljIGFjaWRzIHdpdGggcGhlbm9sIGZ1bmN0aW9uIGJ1dCB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4yMi4wMCNDYXJib3h5bGljIGFjaWRzIHdpdGggYWxkZWh5ZGUgb3Iga2V0b25lIGZ1bmN0aW9uIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE5LjAwLjAwI0FtaW5lIGFuZCBveHlnZW4gZnVuY3Rpb24gYW1pbm8gY29tcG91bmRzIGFuZCB1cmVpbmVzIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE5LjAxLjAwI0dsdXRhbWljIGFjaWQgb3IgaXRzIHNhbHRzIzEyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjAwLjAwI09yZ2FubyBzdWxmdXIgY29tcG91bmRzIGFuZCBvdGhlciBvcmdhbm8gaW5vcmdhbmljIGNvbXBvdW5kcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wMS4wMCNPcmdhbm8gc3VsZnVyIGNvbXBvdW5kcyMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wMi4wMCNPdGhlciBvcmdhbm8gaW5vcmdhbmljIGNvbXBvdW5kcyMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wMy4wMCNDb21wb3VuZHMgY29udGFpbmluZyBhbiB1bmZ1c2VkIGZ1cmFuIHJpbmcgaW4gdGhlIHN0cnVjdHVyZSMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wNC4wMCNMYWN0aW5lcyMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wNS4wMCNDb21wb3VuZHMgY29udGFpbmluZyBhbiB1bmZ1c2VkIGltaWRhem9sZSByaW5nIGluIHRoZSBzdHJ1Y3R1cmUjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDYuMDAjQ29tcG91bmRzIGNvbnRhaW5pbmcgYW4gdW5mdXNlZCBweXJpZGluZSByaW5nIGluIHRoZSBzdHJ1Y3R1cmUjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDcuMDAjQ29tcG91bmRzIGNvbnRhaW5pbmcgYSBxdWlub2xpbmUgb3IgaXNvcXVpbm9saW5lIHJpbmcgc3lzdGVtIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjA4LjAwI0xhY3RhbXMjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDkuMDAjSGV0ZXJvY3ljbGljIGNvbXBvdW5kcyB3aXRoIG5pdHJvZ2VuIGhldGVybyBhdG9tIG9ubHkjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMTAuMDAjQ29tcG91bmRzIGNvbnRhaW5pbmcgYW4gdW5mdXNlZCB0aGlhem9sZSByaW5nIGluIHRoZSBzdHJ1Y3R1cmUjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDAuMDAjSHlkcm9jYXJib25zIGFuZCB0aGVpciBoYWxvZ2VuYXRlZCBhbmQgc3VscGhvbmF0ZWQgYW5kIG5pdHJvc2F0ZWQgZGVyaXZhdGl2ZXMjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDEuMDAjU2F0dXJhdGVkIGFjeWNsaWMgaHlkcm9jYXJib25zIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjAyLjAwI1Vuc2F0dXJhdGVkIGFjeWNsaWMgaHlkcm9jYXJib25zIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjAzLjAwI0N5Y2xpYyBoeWRyb2NhcmJvbnMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDQuMDAjSGFsb2dlbnRhdGVkIGRlcml2YXRpdmVzIG9mIGh5ZHJvY2FyYm9ucyMxMi4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wNS4wMCNSZWZyaWdlcmFudHMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDYuMDAjU3VscGhvbmF0ZWQgb3Igbml0cmF0ZWQgb3Igbml0cm9zYXRlZCBkZXJpdmF0aXZlcyBvZiBoeWRyb2NhcmJvbnMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDcuMDAjUGFyYWZmaW4jMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjIuMDAuMDAjUGhvc3Bob3JpYyBlc3RlcnMgYW5kIHRoZWlyIHNhbHRzIGFuZCBlc3RlcnMgb2Ygb3RoZXIgb3JnYW5pYyBhY2lkcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMi4wMS4wMCNQaG9zcGhvcmljIGVzdGVycyBvciB0aGVpciBzYWx0cyMxMi4xMC4yMi4wMC4wMAotdW5zcHNjNyMxMi4xMS4wMC4wMC4wMCNJbm9yZ2FuaWMgY2hlbWljYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjAwLjAwI0NoZW1pY2FsIGVsZW1lbnRzIzEyLjExLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjAxLjAwI0NobG9yaW5lIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjAyLjAwI0ZsdW9yaW5lIG9yIGJyb21pbmUjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDMuMDAjQ2hsb3JpbmUgbGlxdWlkIGdhcyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wNC4wMCNTdWJsaW1lcyBvciBwcmVjaXBpdGF0ZWQgc3VscGh1ciBvciBjb2xsb2lkYWwgc3VscGh1ciMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wNS4wMCNCb3JvbiBvciB0ZWxsdXJpdW0jMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDYuMDAjU2lsaWNvbiMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wNy4wMCNBbGthbGkgbWV0YWxzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjA4LjAwI0Fsa2FsaW5lIGVhcnRoIG1ldGFscyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wOS4wMCNNZXJjdXJ5IzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjEwLjAwI0h5ZHJvZ2VuIGNobG9yaWRlIG9yIGh5ZHJvY2hsb3JpYyBhY2lkIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjExLjAwI0NobG9yb3N1bGZ1cmljIGFjaWQjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTIuMDAjU3VscGh1cmljIGFjaWQjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTMuMDAjUGhvc3Bob3J1cyBwZW50YW94aWRlIG9yIHBob3NwaG9yaWMgYWNpZCBvciBwb2x5cGhvc3Bob3JpYyBhY2lkcyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xNC4wMCNPeGlkZXMgb2YgYm9yb24gb3IgYm9yaWMgYWNpZHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTUuMDAjSHlkcm9nZW4gZmx1b3JpZGUgb3IgaHlkcm9mbHVvcmljIGFjaWQjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTYuMDAjU2lsaWNvbiBkaW94aWRlIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjE3LjAwI1N1bHBodXIgZGlveGlkZSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xOC4wMCNIeWRyb2N5YW5pYyBhY2lkIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjE5LjAwI0hhbGlkZXMgb3IgaGFsaWRlIG94aWRlcyBvZiBub24gbWV0YWxzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjIwLjAwI1N1bHBoaWRlcyBvZiBub24gbWV0YWxzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjIxLjAwI1NvZGl1bSBvciBwb3Rhc3NpdW0gaHlkcm94aWRlIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjIyLjAwI0h5ZHJveGlkZSBvciBwZXJveGlkZSBvZiBtYWduZXNpdW0gb3Igb3hpZGVzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjIzLjAwI0FsdW1pbnVtIGh5ZHJveGlkZSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4yNC4wMCNIeWRyb3hpZGUgb3IgaHlkcm94eWxhbWluZSBvciB0aGVpciBpbm9yZ2FuaWMgc2FsdHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDAuMDAjTWV0YWwgb3hpZGVzIGFuZCBoeWRyb3hpZGVzIGFuZCBwZXJveGlkZXMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDEuMDAjWmluYyBveGlkZSBvciB6aW5jIHBlcm94aWRlIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjAyLjAwI0Nocm9taXVtIG94aWRlcyBvciBoeWRyb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjAzLjAwI01hbmdhbmVzZSBveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDQuMDAjSXJvbiBveGlkZXMgb3IgaHlkcm94aWRlcyBvciBlYXJ0aCBjb2xvdXJzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA1LjAwI0NvYmFsdCBveGlkZXMgb3IgaHlkcm94aWRlcyBvciBjb21tZXJjaWFsIGNvYmFsdCBveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDYuMDAjVGl0YW5pdW0gb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA3LjAwI0xlYWQgb3hpZGVzIG9yIHJlZCBsZWFkIG9yIG9yYW5nZSBsZWFkIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA4LjAwI0xpdGhpdW0gb3hpZGUgb3IgaHlkcm94aWRlIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA5LjAwI1ZhbmFkaXVtIG94aWRlcyBvciBoeWRyb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjEwLjAwI05pY2tlbCBveGlkZXMgb3IgaHlkcm94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4xMS4wMCNDb3BwZXIgb3hpZGVzIG9yIGh5ZHJveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMTIuMDAjR2VybWFuaXVtIG94aWRlcyBvciB6aXJjb25pdW0gZGlveGlkZSMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4xMy4wMCNNb2x5YmRlbnVtIG94aWRlcyBvciBoeWRyb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjE0LjAwI0FudGltb255IG94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wMC4wMCNTYWx0cyBvZiBveG9tZXRhbGxpYyBhbmQgcGVyb3hvbWV0YWxsaWMgYWNpZHMgYW5kIG90aGVyIGlub3JnYW5pYyBhY2lkcyMxMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wMS4wMCNBbHVtaW5hdGVzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjAyLjAwI1ppbmMgb3IgbGVhZCBjaHJvbWF0ZSMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wMy4wMCNTb2RpdW0gZGljaHJvbWF0ZSMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wNC4wMCNQb3Rhc3NpdW0gZGljaHJvbWF0ZSMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wNS4wMCNPdGhlciBjaHJvbWF0ZSBvciBkaWNocm9tYXRlIG9yIHBlcm94b2Nocm9tYXRlcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wNi4wMCNNYW5nYW5pdGVzIG9yIG1hbmdhbmF0ZXMgb3IgcGVybWFuZ2FuYXRlcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wNy4wMCNNb2x5YmRhdGVzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjA4LjAwI1R1bmdzdGF0ZXMgb3Igd29sZnJhbWF0ZXMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDkuMDAjU2lsdmVyIGNvbXBvdW5kcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4xMC4wMCNHb2xkIGNvbXBvdW5kcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4xMS4wMCNPdGhlciBjb21wb3VuZHMgb3IgYW1hbGdhbXMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMTIuMDAjQW1hbGdhbXMgb3RoZXIgdGhhbiBhbWFsZ2FtcyBvZiBwcmVjaW91cyBtZXRhbHMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDAuMDAjU2FsdHMgYW5kIHBlcm94eXNhbHRzIG9mIGlub3JnYW5pYyBhY2lkcyBhbmQgbWV0YWwjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDEuMDAjRmx1b3JpZGVzIG9yIGZsdW9yb3NpbGljYXRlcyBvciBmbHVvcm9hbHVtaW5hdGVzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjAyLjAwI0NobG9yaWRlcyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wMy4wMCNTb2RpdW0gY2hsb3JpZGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDQuMDAjU2FsIGFtbW9uaWFjIGJsb2NrcyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wNS4wMCNQb3Rhc3NpdW0gaW9kaW5hdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDYuMDAjU3VscGhpZGVzIG9yIHBvbHlzdWxmaWRlcyBvciBkaXRoaW9uaXRlcyBvciAgc3VsZm94eWxhdGVzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjA3LjAwI1N1bHBoaXRlcyBvciB0aGlvc3VsZmF0ZXMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDguMDAjQWx1bWludW0gc3VscGhhdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDkuMDAjQ29sbG9pZGFsIHByZWNpb3VzIG1ldGFscyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xMC4wMCNGZXJyb3VzIHN1bHBoYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjExLjAwI1NpbHZlciBuaXRyYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjEyLjAwI1NvZGl1bSBkaWh5ZHJvZ2Vybm9ydGhvcGhvc3BoYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjEzLjAwI1NvZGl1bSBwaG9zcGhhdGUgZGliYXNpYyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xNC4wMCNTb2RpdW0gYmljYXJib25hdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTUuMDAjVHJpIHNvZGl1bSBjaXRyYXRlIGRpIGh5ZHJhdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTYuMDAjU29kaXVtIGNhcmJvbmF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xNy4wMCNNZXRhbGxpYyBzb2RpdW0jMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTguMDAjU29kaXVtIHNpbGljYXRlIGxpcXVpZHMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTkuMDAjU29kaXVtIHNpbGljYXRlIGJpbmRlcnMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDAuMDAjSHlkcm9nZW4gcGVyb3hpZGUgYW5kIGh5ZHJpZGVzIGFuZCBuaXRyaWRlcyBhbmQgYXNpZGVzIGFuZCBzaWxpY2lkZXMgYW5kIGJvcmlkZXMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDEuMDAjSHlkcm9nZW4gcGVyb3hpZGUjMTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDIuMDAjUGhvc3BoaWRlcyMxMi4xMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMC4wMy4wMCNDYXJiaWRlcyMxMi4xMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMC4wNC4wMCNDYWxjaXVtIGNhcmJpZGUjMTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDUuMDAjQnJvbWlkZXMjMTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDAuMDAjSXNvdG9wZXMgYW5kIHRoZWlyIGNvbXBvdW5kcyBpbm9yZ2FuaWMgYW5kIG9yZ2FuaWMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDEuMDAjRGV1dGVyaXVtIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjAyLjAwI0RldXRlcmF0ZWQgc29sdmVudHMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDMuMDAjSGVhdnkgd2F0ZXIjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDQuMDAjQWxwaGEgc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wNS4wMCNCZXRhIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDYuMDAjQ29iYWx0IHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDcuMDAjR2FtbWEgc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wOC4wMCNOZXV0cm9uIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDkuMDAjUmFkaW9pc290b3BlIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTAuMDAjQ2FsaWJyYXRpb24gc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xMS4wMCNJbiB2aXZvIHByb2R1Y3RzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjEyLjAwI1JhZGlvY2hlbWljYWwgaXNvdG9wZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTMuMDAjUmFkaW9ncmFwaGljIHNvdXJjZSMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xNC4wMCNSYWRpb2ltbXVub2Fzc2F5IGlzb3RvcGVzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjE1LjAwI1RyaXRpdW0gdGFyZ2V0cyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xNi4wMCNFeGNpdGF0aW9uIHNvdXJjZSBvciBhbm51bGFyIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjE3LjAwI1JhZGlvcGhhcm1hY2V1dGljYWwgY29tcG91bmRzIGZvciBsYWJlbGxpbmcjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTguMDAjQ2hlbWljYWxzIGxhYmVsbGVkIEMxNCMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xOS4wMCNGaXNzaW9uYWJsZSBpc290b3BlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4yMC4wMCNJbiB2aXZvIHJhZGlvYWN0aXZlIGlzb3RvcGUgcHJvZHVjdHMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjIuMDAuMDAjQ3lhbmlkZXMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjIuMDEuMDAjQ3lhbmlkZXMgb3IgY3lhbmlkZSBveGlkZXMgb2Ygc29kaXVtIzEyLjExLjIyLjAwLjAwCi11bnNwc2M3IzEyLjExLjIyLjAyLjAwI0NvbXBsZXggY3lhbmlkZXMgb3IgdGhpb2N5YW5hdGVzIzEyLjExLjIyLjAwLjAwCi11bnNwc2M3IzEyLjExLjIyLjAzLjAwI0N5YW5pZGVzIG9yIGN5YW5pZGUgb3hpZGVzIzEyLjExLjIyLjAwLjAwCi11bnNwc2M3IzEyLjEyLjAwLjAwLjAwI0dhc2VzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjAwLjAwI0luZHVzdHJpYWwgZ2FzZXMjMTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDEuMDAjTml0cm91cyBveGlkZSBnYXMjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDIuMDAjSGVsaXVtIGdhcyMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wNC4wMCNDYXJib24gbW9ub3hpZGUjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDUuMDAjSHlkcm9nZW4gZ2FzIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjA2LjAwI0NhcmJvbiBkaW94aWRlIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjA3LjAwI05pdHJvZ2VuIGdhcyMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wOC4wMCNOZW9uIGdhcyMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4xMC4wMCNPeHlnZW4jMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMDAuMDAjUmFyZSBnYXNlcyMxMi4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4wMS4wMCNYZW5vbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMDIuMDAjUmFkb24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjAzLjAwI0tyeXB0b24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjA0LjAwI0FyZ29uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4wOS4wMCNYZW5vbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMTAuMDAjUmFkb24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjExLjAwI0tyeXB0b24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjEyLjAwI0FyZ29uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4wMC4wMC4wMCNFeHBsb3NpdmUgbWF0ZXJpYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjAwLjAwI0V4cGxvc2l2ZXMjMTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDEuMDAjRHluYW1pdGUjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDIuMDAjRXhwbG9zaXZlIGNhcnRyaWRnZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDMuMDAjUHJvcGVsbGFudCBleHBsb3NpdmVzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjA0LjAwI0V4cGxvc2l2ZSBjaGFyZ2VzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjA1LjAwI1BsYXN0aWMgZXhwbG9zaXZlcyMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wNi4wMCNBbHVtaW5pemVkIGV4cGxvc2l2ZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDcuMDAjQW1tb25pdW0gbml0cmF0ZSBleHBsb3NpdmVzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjA4LjAwI05pdHJvZ2x5Y2VyaW4gcG93ZGVyIGV4cGxvc2l2ZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTYuMDAuMDAjUHlyb3RlY2huaWNzIzEyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEzLjE2LjAxLjAwI0ZpcmV3b3JrcyMxMi4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNi4wMi4wMCNGb2cgc2lnbmFscyMxMi4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNi4wMy4wMCNSYWluIHJvY2tldHMjMTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTYuMDQuMDAjRmxhcmVzIzEyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE2LjA1LjAwI1B5cm90ZWNobmljIG1hdGVyaWFscyBmb3IgdGhlYXRlciBvciB0ZWxldmlzaW9uIzEyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjAwLjAwI0lnbml0ZXJzIzEyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjAxLjAwI0JsYXN0aW5nIGNhcHMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDIuMDAjRGV0b25hdG9ycyMxMi4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wMy4wMCNFeHBsb3NpdmVzIGZ1c2VzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjA0LjAwI0V4cGxvc2l2ZSBpbml0aWF0b3JzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjA1LjAwI0V4cGxvc2l2ZSBwcmltZXJzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjA2LjAwI01hdGNoZXMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDcuMDAjTGlnaHRlcnMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDAuMDAjUHJvcGVsbGFudHMjMTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDEuMDAjUG93ZGVyIHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjAyLjAwI1NvbGlkIHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjAzLjAwI0d1biBwcm9wZWxsYW50cyMxMi4xMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wNC4wMCNIaWdoIGVuZXJneSBwcm9wZWxsYW50cyMxMi4xMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wNS4wMCNHZWxsZWQgcHJvcGVsbGFudHMjMTIuMTMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDYuMDAjSHlicmlkIHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjAwLjAwLjAwI0VsZW1lbnRzIGFuZCBnYXNlcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNS4wMC4wMCNFYXJ0aCBtZXRhbHMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDEuMDAjQmVyeWxsaXVtIChCZSkjMTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDIuMDAjTWFnbmVzaXVtIChNZykjMTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDMuMDAjQ2FsY2l1bSAoQ2EpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjA0LjAwI1N0cm9udGl1bSAoU3IpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjA1LjAwI0Jhcml1bSAoQmEpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjA2LjAwI1JhZGl1bSAoUmEpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjAwLjAwI1JhcmUgZWFydGggbWV0YWxzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjAxLjAwI0Nlcml1bSAoQ2UpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjAyLjAwI0R5c3Byb3NpdW0gKER5KSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wMy4wMCNFcmJpdW0gKEVyKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wNC4wMCNFdXJvcGl1bSAoRXUpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjA1LjAwI0dhZG9saW5pdW0gKEdkKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wNi4wMCNIb2xtaXVtIChIbykjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDcuMDAjTGFudGhhbnVtIChMYSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDguMDAjTHV0ZXRpdW0gKEx1KSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wOS4wMCNOZW9keW1pdW0gKE5kKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xMC4wMCNQcmFzZW9keW1pdW0gKFByKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xMS4wMCNQcm9tZXRoaXVtIChQcikjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTIuMDAjU2FtYXJpdW0gKFNtKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xMy4wMCNTY2FuZGl1bSAoU2MpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjE0LjAwI1RlcmJpdW0gKFRiKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xNS4wMCNUaHVsaXVtIChUbSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTYuMDAjWXR0ZXJiaXVtIChZYikjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTcuMDAjWXR0cml1bSAoWSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDAuMDAjVHJhbnNpdGlvbiBtZXRhbHMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDEuMDAjQWN0aW5pdW0gKEFjKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wMi4wMCNBbHVtaW51bSAoQWwpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjAzLjAwI0FtZXJpY2l1bSAoQW0pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA0LjAwI0FudGltb255IChTYikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDUuMDAjQmVya2VsaXVtIChCaykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDYuMDAjQmlzbXV0aCAoQmkpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA3LjAwI0NhZG1pdW0gKENhKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wOC4wMCNDYWxpZm9ybml1bSAoQ2YpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA5LjAwI0Nocm9taXVtIChDcikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTAuMDAjQ29iYWx0IChDbykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTEuMDAjQ29wcGVyIChDdSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTIuMDAjQ3VyaXVtIChDbSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTMuMDAjRWluc3RlaW5pdW0gKEVzKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xNC4wMCNGZXJtaXVtIChGbSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTUuMDAjR2FsbGl1bSAoR2EpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjE2LjAwI0dlcm1hbml1bSAoR2UpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjE3LjAwI0dvbGQgKEF1KSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xOC4wMCNIYWZuaXVtIChIZikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTkuMDAjSW5kaXVtIChJbikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjAuMDAjSXJpZGl1bSAoSXIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjIxLjAwI0lyb24gKEZlKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yMi4wMCNMYXdyZW5jaXVtIChMcikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjMuMDAjTGVhZCAoUGIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI0LjAwI01hbmdhbmVzZSAoTW4pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI1LjAwI01lbmRlbGV2aXVtIChNZCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjYuMDAjTWVyY3VyeSAoSGcpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI3LjAwI01vbHliZGVudW0gKE1vKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yOC4wMCNOZXB0dW5pdW0gKE5wKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yOS4wMCNOaWNrZWwgKE5pKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zMC4wMCNOaW9iaXVtIChOYikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzEuMDAjTm9iZWxpdW0gKE5vKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zMi4wMCNPc21pdW0gKE9zKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zMy4wMCNQYWxsYWRpdW0gKFBkKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zNC4wMCNQbGF0aW51bSAoUHQpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM1LjAwI1BsdXRvbml1bSAoUHUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM2LjAwI1Byb3RhY3Rpbml1bSAoUGEpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM3LjAwI1JoZW5pdW0gKFJlKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zOC4wMCNSaG9kaXVtIChSaCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzkuMDAjUnV0aGVuaXVtIChSdSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDAuMDAjU2lsdmVyIChBZykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDEuMDAjVGFudGFsdW0gKFRhKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40Mi4wMCNUZWNobmV0aXVtIChUZSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDMuMDAjVGhhbGxpdW0gKFRsKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40NC4wMCNUaG9yaXVtIChUaCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDUuMDAjVGluIChTbikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDYuMDAjVGl0YW5pdW0gKFRpKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40Ny4wMCNUdW5nc3RlbiAoVykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDguMDAjVXJhbml1bSAoVSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDkuMDAjVmFuYWRpdW0gKFYpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjUwLjAwI1ppbmMgKFpuKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41MS4wMCNaaXJjb25pdW0gKFpyKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41Mi4wMCNCb2hyaXVtIChCaCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTMuMDAjRHVibml1bSAoRGIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU0LjAwI0hhc3NpdW0gKEhzKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41NS4wMCNSdXRoZXJmb3JkaXVtIChSZikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTYuMDAjU2VhYm9yZ2l1bSAoU2cpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU3LjAwI1VudW5uaWxpdW0gKFV1bSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTguMDAjVW51bnVuaXVtIChVdXUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU5LjAwI1VudW5iaXVtIChVdWIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjYwLjAwI1BvbG9uaXVtICgoUG8pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjAwLjAwI0Fsa2FsaSBtZXRhbHMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDEuMDAjQ2VzaXVtIChDcykjMTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDIuMDAjRnJhbmNpdW0gKEZtKSMxMi4xNC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wMy4wMCNMaXRoaXVtIChMaSkjMTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDQuMDAjUG90YXNzaXVtIChLKSMxMi4xNC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wNS4wMCNSdWJpZGl1bSAoUmIpIzEyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjA2LjAwI1NvZGl1bSAoTmEpIzEyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjAwLjAwI05vbiBtZXRhbHMgYW5kIHB1cmUgYW5kIGVsZW1lbnRhbCBnYXNlcyMxMi4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wMS4wMCNDaGxvcmluZSAgKENsKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wMi4wMCNIeWRyb2dlbiAoSCkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDMuMDAjTml0cm9nZW4gIChOKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wNC4wMCNPeHlnZW4gKE8pIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjA1LjAwI0ZsdW9yaW5lICAoRikjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDYuMDAjQXJzZW5pYyAoQXMpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjA3LjAwI0Jvcm9uIChCaCkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDguMDAjQ2FyYm9uIChDKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wOS4wMCNQaG9zcGhvcnVzIChQKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xMC4wMCNTZWxlbml1bSAoU2UpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjExLjAwI1NpbGljb24gKFNpKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xMi4wMCNTdWxmdXIgKFMpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjEzLjAwI1RlbGx1cml1bSAoVGUpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjE0LjAwI0FzdGF0aW5lIChBdCkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMTUuMDAjQnJvbWluZSBCciMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xNi4wMCNJb2RpbmUgKEkpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjAwLjAwI05vYmxlIGdhc2VzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjAxLjAwI1hlbm9uIGdhcyAgKFhlKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wMi4wMCNSYWRvbiBnYXMgKFJuKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wMy4wMCNLcnlwdG9uIGdhcyAoS3IpIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjA0LjAwI0FyZ29uIGdhcyAoQXIpIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjA1LjAwI0hlbGl1bSBnYXMgKEhlKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wNi4wMCNOZW9uIGdhcyAoTmUpIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjAwLjAwI0luZHVzdHJpYWwgdXNlIGdhc2VzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjAxLjAwI0h5ZHJvZ2VuIGNvbXBvdW5kIGdhc2VzIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjAyLjAwI0NobG9yaW5hdGVkIG1peGVkIGdhc2VzIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjAzLjAwI0FtbW9uaWEjMTIuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjEuMDQuMDAjQ2FyYm9uIGRpb3hpZGUgZ2FzIChDTzIpIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjA1LjAwI0luZHVzdHJpYWwgYWlyIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjA2LjAwI0luZXJ0IGdhcyBtaXh0dXJlcyMxMi4xNC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xNS4wMC4wMC4wMCNBY2lkcyBhbmQgdGhlaXIgc2FsdHMgYW5kIGVzdGVycyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wMC4wMCNDYXJib3h5bGljIGFjaWRzIGFuZCB0aGVpciBzYWx0cyBhbmQgZXN0ZXJzIzEyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjAxLjAwI0FjZXRpYyBhY2lkIG9yIGl0cyBzYWx0cyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wMi4wMCNBY3ljbGljIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjAzLjAwI0FsZGVoeWRpYyBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wNC4wMCNCdXR5cmljIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjA1LjAwI0NhcmJvY3lsaWMgYWNpZHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDYuMDAjSHlkcm94eSBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wNy4wMCNLZXRvIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjA4LjAwI1Byb3Bpb25pYyBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wOS4wMCNBY3J5bGljIGFjaWQgZXN0ZXJzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjEwLjAwI0VzdGVycyBvZiBtZXRoYWNyeWxpYyBhY2lkIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjAwLjAwI0hldGVyb2N5Y2xpYyBhY2lkcyBhbmQgdGhlaXIgc2FsdHMgYW5kIGVzdGVycyMxMi4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wMS4wMCNJbmRvbGVhY2V0aWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDIuMDAjSXNvbmljb3RpbmljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjAzLjAwI0lzb25pcGVjb3RpYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wNC4wMCNOaWNvdGluaWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDUuMDAjTmlwZWNvdGljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjA2LjAwI09yb3RpYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wNy4wMCNQaWNvbGluaWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDguMDAjUGlwZWNvbGljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjAwLjAwI0ZhdHR5IGFjaWRzIGFuZCB0aGVpciBzYWx0cyBhbmQgZXN0ZXJzIzEyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjAxLjAwI0RlY2Fub2ljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjAyLjAwI1Vuc2F0dXJhdGVkIGZhdHR5IGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjAzLjAwI1ZvbGF0aWxlIGZhdHR5IGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjA0LjAwI0hlcHRhbm9pYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wNS4wMCNMYXVyaWMgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDYuMDAjTXljb2xpYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wNy4wMCNNeXJpc3RpYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wOC4wMCNQYWxtaXRpYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wOS4wMCNTdGVhcmljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjAwLjAwI05vbiBjYXJib3h5bGljIGFjaWRzIGFuZCB0aGVpciBzYWx0cyMxMi4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wMS4wMCNDYXJib25pYyBhY2lkcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wMi4wMCNOaXRyaWMgYWNpZHMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDMuMDAjUGhvc3Bob3JvdXMgYWNpZHMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDQuMDAjU3VsZnVyIGFjaWRzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjA1LjAwI0NobG9yaWRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wNi4wMCNIeWRyb2NobG9yaWRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wNy4wMCNOaXRyYXRlcyBvciBuaXRyaXRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wOC4wMCNTaWxpY2F0ZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDkuMDAjUGhvc3BoYXRlcyBvciBwaG9zcGhpZGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjEwLjAwI0JpY2FyYm9uYXRlcyBvciBjYXJiaWRlcyBvciBjYXJib25hdGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjExLjAwI0ZsdW9yaWRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4xMi4wMCNCcm9taWRlcyBvciBicm9tYXRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4xMy4wMCNJb2RpZGVzIG9yIGlvZGF0ZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTkuMDAuMDAjSW5vcmdhbmljIHN1bGZ1ciBjb21wb3VuZHMjMTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTkuMDEuMDAjSHlkcm9nZW4gc3VsZmlkZSMxMi4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOS4wMi4wMCNTdWxmdXJpYyBBY2lkIzEyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE5LjAzLjAwI1NvZGl1bSBzdWxmYXRlIzEyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjAwLjAwLjAwI0FkZGl0aXZlcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wMC4wMCNJbmRpY2F0b3JzIGFuZCBSZWFnZW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wMS4wMCNBZmZpbml0eSBsYWJlbHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDIuMDAjQ3Jvc3MgbGlua2luZyBhZ2VudHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDMuMDAjUmVhZ2VudCBraXRzIzEyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE1LjA0LjAwI1N1bGZoeWRyeWwgcmVhZ2VudHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDUuMDAjSW50ZXJjYWxhdGluZyBhZ2VudHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDYuMDAjRGl2ZXJ0aW5nIGFnZW50cyMxMi4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNi4wMC4wMCNDYXRhbHlzdHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTYuMDEuMDAjQWNpZCBjYXRhbHlzdHMjMTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTYuMDIuMDAjQ29tYnVzdGlvbiBjYXRhbHlzdHMjMTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTYuMDMuMDAjQ3VzdG9tIGNhdGFseXN0cyMxMi4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNi4wNC4wMCNDcmFja2luZyBjYXRhbHlzdHMjMTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDAuMDAjQnVmZmVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wMS4wMCNBbXBob2x5dGUgbWl4dHVyZXMjMTIuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDIuMDAjQmljYXJib25hdGUgYnVmZmVycyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wMy4wMCNPdGhlciBidWZmZXJzIzEyLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjA0LjAwI0FjaWQgYnVmZmVycyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wNS4wMCNCYXNpYyBidWZmZXJzIzEyLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjA2LjAwI05ldXRyYWwgYnVmZmVycyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wMC4wMCNDb2xsb2lkcyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wMS4wMCNHZWxzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjAyLjAwI1N1c3BlbnNpb25zIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjAzLjAwI0Flcm9zb2xzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjA0LjAwI0VtdWxzaW9ucyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wNS4wMCNOYXR1cmFsIGdlbGxpbmcgYWdlbnRzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjA2LjAwI1N5bnRoZXRpYyBnZWxsaW5nIGFnZW50cyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wNy4wMCNHZWwgc3RhYmlsaXplcnMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDguMDAjU3VzcGVuZGluZyBhZ2VudHMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDAuMDAjU3VyZmFjdGFudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDEuMDAjQW50aSBmb2FtaW5nIGFnZW50cyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wMi4wMCNEZXRlcmdlbnQgc3VyZmFjdGFudHMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDMuMDAjRm9hbWluZyBhZ2VudHMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDQuMDAjRGlzcGVyc2luZyBhZ2VudHMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDUuMDAjRmx1c2hlcyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wNi4wMCNXZXR0aW5nIGFnZW50cyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wNy4wMCNXYXRlciBmbG9vZCBhZGRpdGl2ZXMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDAuMDAjUGxhc3RpY2l6ZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIwLjAxLjAwI1BodGhhbGF0ZXMjMTIuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDIuMDAjUG9seW1lcmljcyMxMi4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMC4wMy4wMCNBZ3JpY3VsdHVyYWwgb2lscyMxMi4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMC4wNC4wMCNTdWxmb25hbWlkZXMjMTIuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDUuMDAjR2x1dGFyYXRlcyMxMi4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMS4wMC4wMCNGbGFtZSByZXRhcmRhbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIxLjAxLjAwI0Jyb21pbmF0ZWQjMTIuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDAuMDAjQW50aSBveGlkYW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wMS4wMCNBc2NvcmJpYyBhY2lkIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjAyLjAwI0JldGEgY2Fyb3RlbmUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDMuMDAjQnV0eWxhdGVkIGh5ZHJveHlhbmlzb2xlIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjA0LjAwI0J1dHlsYXRlZCBoeWRyb3h5dG9sdWVuZSMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wNS4wMCNDYWxjaXVtIGNpdHJhdGUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDYuMDAjQ2FudGhheGFudGhpbiMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wNy4wMCNNZWxhdG9uaW4jMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDguMDAjTm9yZGloeWRyb2d1YWlhcmV0aWMgYWNpZCMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wOS4wMCNQcm9weWwgZ2FsbGF0ZSMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4xMC4wMCNTaWx5bWFyaW4jMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMTEuMDAjU3VsZnVyIGRpb3hpZGUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjMuMDAuMDAjQ3VyaW5nIGFnZW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMy4wMS4wMCNXYXRlcmJvcm5lIGN1cmluZyBhZ2VudHMjMTIuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjMuMDIuMDAjQ2VtZW50IGFjY2VsZXJhdG9ycyMxMi4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMy4wMy4wMCNDZW1lbnQgcmV0YXJkZXJzIzEyLjE2LjIzLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI0LjAwLjAwI1BvbHltZXIgYnJlYWtlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjQuMDEuMDAjQWNpZGljIHBvbHltZXIgYnJlYWtlcnMjMTIuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjQuMDIuMDAjT3JnYW5pYyBwb2x5bWVyIGJyZWFrZXJzIzEyLjE2LjI0LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI1LjAwLjAwI0VtdWxzaW9uIGJyZWFrZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI1LjAxLjAwI1dhdGVyIGluIG9pbCBlbXVsc2lvbiBicmVha2VycyMxMi4xNi4yNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNS4wMi4wMCNPaWwgaW4gd2F0ZXIgZW11bHNpb24gYnJlYWtlcnMjMTIuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjUuMDMuMDAjRmxvdGF0aW9uIGFpZHMjMTIuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjYuMDAuMDAjQ2xheSBzdGFiaWxpemVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNi4wMS4wMCNJbm9yZ2FuaWMgY2xheSBzdGFiaWxpemVycyMxMi4xNi4yNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNi4wMi4wMCNPcmdhbmljIGNsYXkgc3RhYmlsaXplcnMjMTIuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjcuMDAuMDAjRmx1aWQgbG9zcyBhZGRpdGl2ZXMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjcuMDEuMDAjTmF0dXJhbCBwb2x5bWVyIGZsdWlkIGxvc3MgYWRkaXRpdmVzIzEyLjE2LjI3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI3LjAyLjAwI01vZGlmaWVkIHBvbHltZXIgZmx1aWQgbG9zcyBhZGRpdGl2ZXMjMTIuMTYuMjcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjguMDAuMDAjRnJpY3Rpb24gcmVkdWNlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjguMDEuMDAjQW5pb25pYyBmcmljdGlvbiByZWR1Y2VycyMxMi4xNi4yOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOC4wMi4wMCNDYXRpb25pYyBmcmljdGlvbiByZWR1Y2VycyMxMi4xNi4yOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOS4wMC4wMCNQYXJhZmZpbiBhc3BoYWx0ZW5lIGNvbnRyb2wgYWdlbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI5LjAxLjAwI1NvbHZlbnQgdHlwZSBwYXJhZmZpbiBhc3BoYWx0ZW5lIGNvbnRyb2wgYWdlbnRzIzEyLjE2LjI5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI5LjAyLjAwI0NyeXN0YWwgbW9kaWZpZWQgcGFyYWZmaW4gYXNwaGFsdGVuZSBjb250cm9sIGFnZW50cyMxMi4xNi4yOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOS4wMy4wMCNEaXNwZXJzYW50IHR5cGUgcGFyYWZmaW4gYXNwaGFsdGVuZSBjb250cm9sIGFnZW50cyMxMi4xNi4yOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMC4wMC4wMCNNdWQgcmVtb3ZhbCBtaXh0dXJlcyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMC4wMS4wMCNNdWQgY2xlYW5vdXQgYWdlbnRzIzEyLjE2LjMwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMxLjAwLjAwI0FudGkgc2x1ZGdlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzEuMDEuMDAjQW50aSBzbHVkZ2UgYWRkaXRpdmVzIzEyLjE2LjMxLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMyLjAwLjAwI0FudGkgZ2FzIG1pZ3JhdGlvbiBhZ2VudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzIuMDEuMDAjQW50aSBnYXMgbWlncmF0aW9uIGFkZGl0aXZlcyMxMi4xNi4zMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMy4wMC4wMCNFeHBhbmRpbmcgYWdlbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMzLjAxLjAwI0NlbWVudCBleHBhbmRpbmcgYWdlbnRzIzEyLjE2LjMzLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM0LjAwLjAwI0V4dGVuZGVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNC4wMS4wMCNDZW1lbnQgZXh0ZW5kZXJzIzEyLjE2LjM0LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM1LjAwLjAwI09pbCB3ZWxsIHNlYWxhbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM1LjAxLjAwI0NlbWVudGluZyBzZWFsYW50cyMxMi4xNi4zNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNi4wMC4wMCNDb3Jyb3Npb24gaW5oaWJpdG9ycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNi4wMS4wMCNPaWwgcHJvZHVjdGlvbiBjb3Jyb3Npb24gaW5oaWJpdG9ycyMxMi4xNi4zNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNi4wMi4wMCNHYXMgcHJvZHVjdGlvbiBjb3Jyb3Npb24gaW5oaWJpdG9ycyMxMi4xNi4zNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNy4wMC4wMCNHYXMgaHlkcmF0ZSBjb250cm9sbGVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNy4wMS4wMCNLaW5ldGljIGh5ZHJhdGUgY29udHJvbGxlcnMjMTIuMTYuMzcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzguMDAuMDAjU2NhdmVuZ2VycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zOC4wMS4wMCNIeWRyb2dlbiBzdWxmaWRlIHNjYXZlbmdlcnMjMTIuMTYuMzguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzguMDIuMDAjT3h5Z2VuIHNjYXZlbmdlcnMjMTIuMTYuMzguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzkuMDAuMDAjU2NhbGUgY29udHJvbGxlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzkuMDEuMDAjU2NhbGUgaW5oaWJpdG9yIzEyLjE2LjM5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM5LjAyLjAwI1NjYWxlIHJlbW92ZXJzIGFuZCBjb252ZXJ0ZXJzIzEyLjE2LjM5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjQwLjAwLjAwI0JhY3RlcmljaWRlcyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi40MC4wMS4wMCNSZWdpc3RlcmVkIG1pY3JvYmlvY2lkZXMjMTIuMTYuNDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDEuMDAuMDAjSW4gc2l0dSMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi40MS4wMS4wMCNJbiBzaXR1IGFkZGl0aXZlcyMxMi4xNi40MS4wMC4wMAotdW5zcHNjNyMxMi4xNi40MS4wMi4wMCNBY2lkIGFkZGl0aXZlcyMxMi4xNi40MS4wMC4wMAotdW5zcHNjNyMxMi4xNi40Mi4wMC4wMCNSZXRhcmRlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDIuMDEuMDAjQWNpZCBjb3Jyb3Npb24gaW5oaWJpdG9ycyMxMi4xNi40Mi4wMC4wMAotdW5zcHNjNyMxMi4xNi40My4wMC4wMCNJcm9uIGNvbnRyb2xsZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQzLjAxLjAwI0lyb24gY29udHJvbCBhZGRpdGl2ZXMjMTIuMTYuNDMuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDQuMDAuMDAjTm9uIGVtdWxzaWZpZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQ0LjAxLjAwI05vbiBlbXVsc2lmeWluZyBhZGRpdGl2ZXMjMTIuMTYuNDQuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMDAuMDAuMDAjQ29sb3JhbnRzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjE3LjE1LjAwLjAwI0R5ZXMjMTIuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDEuMDAjRmx1b3Jlc2NlbnQgZHllcyMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wMi4wMCNQaHRoYWxlaW4gZHllcyMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wMy4wMCNSb3NhbmlsaW5lIGR5ZXMjMTIuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDQuMDAjRm9vZCBvciBkcnVnIG9yIGNvc21ldGljIHNhZmUgKEZEQykgZHllcyMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wNS4wMCNMYWtlZCMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wNi4wMCNOYXR1cmFsIGR5ZXMjMTIuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTYuMDAuMDAjUGlnbWVudHMjMTIuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTYuMDEuMDAjTmF0dXJhbCBwaWdtZW50cyMxMi4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNi4wMi4wMCNJbm9yZ2FuaWMgbWV0YWwgb3hpZGVzIzEyLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE2LjAzLjAwI0NhcmJvbiBibGFjayMxMi4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNi4wNC4wMCNUaXRhbml1bSBkaW94aWRlIzEyLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE2LjA1LjAwI09yZ2FuaWMgcGlnbWVudHMjMTIuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTcuMDAuMDAjQ29sb3IgY29tcG91bmRzIGFuZCBkaXNwZXJzaW9ucyMxMi4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNy4wMS4wMCNQb2x5bWVyIG1hc3RlcmJhdGNoZXMjMTIuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTcuMDIuMDAjUGlnbWVudCBkaXNwZXJzaW9ucyMxMi4xNy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNy4wMy4wMCNJbmtzIzEyLjE3LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE4LjAwLjAwLjAwI1dheGVzIGFuZCBvaWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjE4LjE1LjAwLjAwI1dheGVzIzEyLjE4LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE4LjE1LjAxLjAwI1N5bnRoZXRpYyB3YXhlcyMxMi4xOC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNS4wMi4wMCNOYXR1cmFsIHdheGVzIzEyLjE4LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE4LjE1LjAzLjAwI1BhcmFmZmlucyMxMi4xOC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNS4wNC4wMCNQZXRyb2xhdHVtcyMxMi4xOC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNi4wMC4wMCNPaWxzIzEyLjE4LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE4LjE2LjAxLjAwI1N5bnRoZXRpYyBvaWxzIzEyLjE4LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE4LjE2LjAyLjAwI05hdHVyYWwgb2lscyMxMi4xOC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xOS4wMC4wMC4wMCNTb2x2ZW50cyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xOS4xNS4wMC4wMCNIeWRyb2NhcmJvbmF0ZWQgc29sdmVudHMjMTIuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTUuMDEuMDAjQXJvbWF0aWMgc29sdmVudHMjMTIuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTUuMDIuMDAjQWxpcGhhdGljIHNvbHZlbnRzIzEyLjE5LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE5LjE2LjAwLjAwI094eWdlbmF0ZWQgc29sdmVudHMjMTIuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTYuMDEuMDAjQWxjb2hvbCBzb2x2ZW50cyMxMi4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xOS4xNi4wMi4wMCNBY3RpdmUgc29sdmVudHMjMTIuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMDAuMDAuMDAjQ2hlbWljYWwgaW50ZXJtZWRpYXRlcyBhbmQgZml4YXRpdmVzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIwLjE1LjAwLjAwI0ludGVybWVkaWF0ZXMjMTIuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTUuMDEuMDAjRXRoZXIgaW50ZXJtZWRpYXRlcyMxMi4yMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNS4wMi4wMCNLZXRvbmUgaW50ZXJtZWRpYXRlcyMxMi4yMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNS4wMy4wMCNBbGRlaHlkZSBpbnRlcm1lZGlhdGVzIzEyLjIwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE1LjA0LjAwI1Blcm94aWRlIGludGVybWVkaWF0ZXMjMTIuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTUuMDUuMDAjQWNyeWxhdGUgb3IgbWV0aGFjcnlsYXRlIGludGVybWVkaWF0ZXMjMTIuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTYuMDAuMDAjRml4YXRpdmVzIzEyLjIwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIwLjE2LjAxLjAwI0Zvcm1hbGRlaHlkZXMjMTIuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTYuMDIuMDAjR2x1dHJhbHMjMTIuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTYuMDMuMDAjVGFubmlucyMxMi4yMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNy4wMC4wMCNBbWluZXMgYW5kIGFtaWRlcyBhbmQgaW1pbmVzIGFuZCBpbWlkZXMjMTIuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDEuMDAjUHJpbWFyeSMxMi4yMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNy4wMi4wMCNTZWNvbmRhcnkjMTIuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDMuMDAjVGVydGlhcnkjMTIuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDQuMDAjU3BlY2lhbHR5IzEyLjIwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE3LjA1LjAwI1N1bHBob25hdGVkIzEyLjIwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIxLjAwLjAwLjAwI0NhcmJvbiBiYXNlZCBjaGVtaWNhbHMgYW5kIGNvbXBvdW5kZWQgY2hlbWljYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjAwLjAwI0FsY29ob2xzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjAxLjAwI0FtaW5vIGFsY29ob2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjAyLjAwI0Jlbnp5bCBhbGNvaG9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wMy4wMCNDaGxvcm9oeWRyaW5zIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjA0LjAwI0V0aGFub2wjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDUuMDAjRmF0dHkgYWxjb2hvbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDYuMDAjR2x5Y29scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wNy4wMCNIZXhhbm9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wOC4wMCNNZXRoYW5vbCMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wOS4wMCNQb2x5IHZpbnlsIG9yIFBWICBhbGNvaG9sIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjEwLjAwI1Byb3Bhbm9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4xMS4wMCNTdWdhciBhbGNvaG9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4xMi4wMCNCdXR5bCBhbGNvaG9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4xMy4wMCNJc29wcm9weWwgYWxjb2hvbCMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNi4wMC4wMCNIeWRyb2NhcmJvbnMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTYuMDEuMDAjQWN5Y2xpYyBvciBjeWNsaWMgb3IgcG9seWN5Y2xpYyBoeWRyb2NhcmJvbnMjMTIuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTYuMDIuMDAjSGFsb2dlbmF0ZWQgaHlkcm9jYXJib25zIzEyLjIxLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE2LjAzLjAwI1N1bHBob25hdGVkIGh5ZHJvY2FyYm9ucyMxMi4yMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNi4wNC4wMCNOaXRyb3NhdGVkIGh5ZHJvY2FyYm9ucyMxMi4yMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNy4wMC4wMCNBbGRlaHlkZXMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTcuMDEuMDAjQWNldGFsYWxkZWh5ZXMjMTIuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTcuMDIuMDAjR2x5b3hhbHMjMTIuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDAuMDAjRXRoZXJzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE4LjAxLjAwI0FjZXRhbCBldGhlcnMjMTIuMjEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDIuMDAjRXRoeWwgZXRoZXJzIzEyLjIxLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE4LjAzLjAwI01ldGh5bCBldGhlcnMjMTIuMjEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDQuMDAjUGhlbnlsIGV0aGVycyMxMi4yMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOC4wNS4wMCNNZXRoeWwgdGV0cmEgYnV0eWwgZXRoZXIjMTIuMjEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTkuMDAuMDAjS2V0b25lcyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOS4wMS4wMCNBY2V0b25lcyMxMi4yMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOS4wMi4wMCNDYW1waG9ycyMxMi4yMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOS4wMy4wMCNLZXRvbmUgYm9kaWVzIzEyLjIxLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE5LjA0LjAwI01hbm5pY2ggYmFzZXMjMTIuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjAuMDAuMDAjUGhlbm9scyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMC4wMS4wMCNCcm9tcGhlbm9sIGJsdWUjMTIuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjAuMDIuMDAjQ3Jlc29scyMxMi4yMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMS4wMC4wMCNDYXJib2h5ZHJhdGVzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIxLjAxLjAwI1NpbXBsZSBzdWdhcnMgb3IgaXRzIGRlcml2YXRpdmVzIzEyLjIxLjIxLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIxLjAyLjAwI0d1bSByZXNpbnMjMTIuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjEuMDMuMDAjU3RhcmNoZXMjMTIuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDAuMDAjQ29tcG91bmRzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjAxLjAwI0NoZW1pY2FsIGFsbG95cyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wMi4wMCNDeWFuaWRlcyBvciBjeWFuYXRlcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wMy4wMCNBbHVtaW51bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDQuMDAjQmFyaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wNS4wMCNCb3JvbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDYuMDAjQnJvbWluZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDcuMDAjQ2FsY2l1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDguMDAjQ2FyYm9uIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wOS4wMCNDaGxvcmluZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTAuMDAjRmx1b3JpbmUgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjExLjAwI0dvbGQgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjEyLjAwI0lvZGluZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTMuMDAjSXJvbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTQuMDAjTWFnbmVzaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xNS4wMCNOaXRyb2dlbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTYuMDAjTml0cmlsZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTcuMDAjT3h5Z2VuIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xOC4wMCNQaG9zcGhvcm91cyBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTkuMDAjUG90YXNzaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yMC4wMCNTZWxlbml1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjEuMDAjU2lsaWNvbiBvciBzaWxpY29uZSBvciBzaWxpY2FuZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjIuMDAjU29kaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yMy4wMCNTdWxmdXIgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjI0LjAwI1RpbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjUuMDAjWmluYyBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjYuMDAjSGV0ZXJvY3ljbGljIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yNy4wMCNDb2JhbHQgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjI4LjAwI0FudGltb255IGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yOS4wMCNUaXRhbml1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDAuMDAjT3hpZGVzIGluY2x1ZGVzIGFsbCBveGlkZWQgc3Vic3RhbmNlcyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wMS4wMCNBbHVtaW51bSBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDIuMDAjQ2FyYm9uIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wMy4wMCNIeXBvY2hsb3JvdXMgYWNpZCMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wNC4wMCNNYWduZXNpdW0gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjA1LjAwI05pdHJvZ2VuIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wNi4wMCNPc21pdW0gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjA3LjAwI1Blcm94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wOC4wMCNTaWxpY29uIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wOS4wMCNTdWxmdXIgb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjEwLjAwI1Rob3JpdW0gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjExLjAwI1dhdGVyIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xMi4wMCNaaW5jIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xMy4wMCNIeWRyb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjE0LjAwI01ldGFsIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xNS4wMCNOb24gbWV0YWwgb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjE2LjAwI0V0aHlsZW5lIG94aWRlIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjAwLjAwI0lzb3RvcGVzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjAxLjAwI0RldXRlcmF0ZWQgc29sdmVudHMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDIuMDAjSGVhdnkgd2F0ZXIjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDMuMDAjQWxwaGEgc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wNC4wMCNCZXRhIHNvdXJjZXMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDUuMDAjQ29iYWx0IHNvdXJjZXMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDYuMDAjR2FtbWEgc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wNy4wMCNSYWRpb2lzb3RvcGUgc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wOC4wMCNDYWxpYnJhdGlvbiBzb3VyY2VzIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIyLjAwLjAwLjAwI0JpbyBjaGVtaWNhbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDAuMDAjUHJvdGVpbnMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDEuMDAjQWxidW1pbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDIuMDAjQmFjdGVyaWFsIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjAzLjAwI0Jsb29kIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA0LjAwI0JvbmUgbW9ycGhvZ2VuZXRpYyBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wNS4wMCNDYXJyaWVyIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA2LjAwI0NvbnRyYWN0aWxlIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA3LjAwI0RpZXRhcnkgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDguMDAjRGVveHlyaWJvbnVjbGVpYyBhY2lkIChETkEpIGJpbmRpbmcgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDkuMDAjRWdnIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjEwLjAwI0dsb2J1bGlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xMS4wMCNHbHljb3Byb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjEyLjAwI0hlbWVwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xMy4wMCNJbnRlcmZlcm9ucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xNC4wMCNMZWN0aW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjE1LjAwI0xpcG9wcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xNi4wMCNNZW1icmFuZSBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xNy4wMCNNZXRhbGxvcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTguMDAjTmVydmUgdGlzc3VlIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjE5LjAwI05lY3VsZW9wcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yMC4wMCNQZXB0b25lcyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yMS4wMCNQbGFudCBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yMi4wMCNQcmlvbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjMuMDAjQ3l0b3BsYXNtaWMgb3IgbnVjbGVhciByZWNlcHRvcnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjQuMDAjUmVjb21iaW5hbnQgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjUuMDAjU2VycGlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yNi4wMCNUcmFuc2NyaXB0aW9uIGZhY3RvcnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjcuMDAjVmlyYWwgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjguMDAjU2NsZXJvcHJvdGVpbiMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wMC4wMCNBbnRpYm9kaWVzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE2LjAxLjAwI1ZpcmFsIGFudGlib2RpZXMjMTIuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTYuMDIuMDAjQW50aXRveGlucyMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wMy4wMCNCYWN0ZXJpYWwgYW50aWJvZGllcyMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wNC4wMCNBdXRvYW50aWJvZGllcyMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wNS4wMCNJbW11bmUgc2VyYSMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wNi4wMCNJbW11bm9nbG9idWxpbnMjMTIuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTcuMDAuMDAjTnV0cmllbnRzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE3LjAxLjAwI1ZpdGFtaW5zIzEyLjIyLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjAwLjAwI0VuenltZXMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDEuMDAjSHlkcm9sYXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wMi4wMCNJc29lbnp5bWVzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjAzLjAwI0lzb21lcmFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDQuMDAjTGlnYXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wNS4wMCNMeWFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDYuMDAjTXVsdGllbnp5bWUgY29tcGxleGVzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjA3LjAwI094aWRvcmVkdWN0YXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wOC4wMCNQZXJtZWFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDkuMDAjVHJhbnNmZXJlYXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4xMC4wMCNDYXRhbGFzZSMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wMC4wMCNUaXNzdWVzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjAxLjAwI0Nvbm5lY3RpdmUgdGlzc3VlcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wMi4wMCNFcGl0aGVsaXVtcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wMy4wMCNFeG9jcmluZSBnbGFuZHMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDQuMDAjTHltcGhvaWQgdGlzc3VlcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wNS4wMCNNZW1icmFuZXMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDYuMDAjTXVzY2xlcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wNy4wMCNOZXJ2ZSB0aXNzdWVzIzEyLjIyLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjAwLjAwI0N1bHR1cmVzIGFuZCBmbHVpZHMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDEuMDAjQWdhciMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wMi4wMCNCcm90aCMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wMy4wMCNTZXJ1bSBmcmVlIGN1bHR1cmUgbWVkaWEjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDQuMDAjQ29uZGl0aW9uZWQgY3VsdHVyZSBtZWRpYSMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wNS4wMCNCYWN0ZXJpYSBjdWx0dXJlcyMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wNi4wMCNCbG9vZCMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wNy4wMCNVcmVhIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjA4LjAwI0JpbGUjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDkuMDAjUGxhc21hIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjEwLjAwI1NlbWVuIGN1bHR1cmVzIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIxLjAwLjAwI051Y2xlaWMgYWNpZHMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjEuMDEuMDAjUmlib251Y2xlaWMgYWNpZCAoUk5BKSMxMi4yMi4yMS4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMS4wMi4wMCNEZW94eXJpYm9udWNsZWljIGFjaWQgKEROQSkjMTIuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDAuMDAjQW1pbm8gYWNpZHMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDEuMDAjQnJhbmNoZWQgY2hhaW4gYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDIuMDAjQ3ljbGljIGFtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjAzLjAwI0RpYW1pbm8gYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDQuMDAjRGljYXJib3h5bGljIGFtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjA1LjAwI0Vzc2VudGlhbCBhbWlubyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wNi4wMCNTdWxmdXIgYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDcuMDAjQW1pbm9idXR5cmljIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjA4LjAwI0FtaW5vY2Fwcm9pYyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wOS4wMCNPeGFtaWMgYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMTAuMDAjUGhvc3Bob2FtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjExLjAwI1F1aXNxdWFsaWMgYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjMuMDAuMDAjQW1pbmVzIGFuZCBhbWlkZXMgYW5kIGltaW5lcyBhbmQgaW1pZGVzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjAxLjAwI1ByaW1hcnkjMTIuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjMuMDIuMDAjU2Vjb25kYXJ5IzEyLjIyLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjAzLjAwI1RlcnRpYXJ5IzEyLjIyLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjA0LjAwI1NwZWNpYWx0eSMxMi4yMi4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMy4wNS4wMCNTdWxwaG9uYXRlZCMxMi4yMi4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMy4wMC4wMC4wMCNJbm9yZ2FuaWMgY29tcG91bmRzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEwLjAwLjAwI01pbmVyYWwgYWNpZHMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTAuMDEuMDAjSHlkcm9mbG9yaWMgYWNpZCMxMi4yMy4xMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMC4wMi4wMCNIeWRyb2ZsdW9yb3NpbGljaWMgYWNpZCMxMi4yMy4xMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMC4wMy4wMCNIeWRyb2Zsb3VyaWMgYWNpZCMxMi4yMy4xMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMS4wMC4wMCNCYXNlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMS4wMS4wMCNTb2RpdW0gaHlkcm94aWRlIzEyLjIzLjExLjAwLjAwCi11bnNwc2M3IzEyLjIzLjExLjAyLjAwI1BvdGFzc2l1bSBoeWRyb3hpZGUjMTIuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTIuMDAuMDAjU2FsdHMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTIuMDEuMDAjQW1tb25pdW0gbml0cmF0ZSMxMi4yMy4xMi4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMy4wMC4wMCNTdWxwaGF0ZXMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTMuMDEuMDAjRmVycmljIHN1bHBoYXRlIzEyLjIzLjEzLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEzLjAyLjAwI0NvcHBlciBzdWxwaGF0ZSMxMi4yMy4xMy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMy4wMy4wMCNBbHVtaW5pdW0gc3VscGhhdGUjMTIuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTMuMDQuMDAjU29kaXVtIHN1bHBoYXRlIzEyLjIzLjEzLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEzLjA1LjAwI1NvZGl1bSB0aGlvc3VscGhhdGUjMTIuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDAuMDAjQ2hsb3JpZGVzIGNobG9yYXRlcyBhbmQgcGVyY2hsb3JhdGVzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjAxLjAwI1NvZGl1bSBjaGxvcml0ZSMxMi4yMy4xNC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNC4wMi4wMCNGZXJyaWMgQ2hsb3JpZGUjMTIuMjMuMTQuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDMuMDAjQWx1bWluaXVtIGNobG9yaWRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjA0LjAwI1BvbHkgYWx1bWluaXVtIGNobG9yaWRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjA1LjAwI0FsdW1pbml1bSBjaGxvcm9oeWRyYXRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjA2LjAwI1NvZGl1bSBoeXBvY2hsb3JpdGUjMTIuMjMuMTQuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTUuMDAuMDAjQm9yaWRlcyBhbmQgYm9yYXRlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNS4wMS4wMCNTb2RpdW0gYm9yYXRlIzEyLjIzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE2LjAwLjAwI0h5ZHJpZGVzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE2LjAxLjAwI0FsdW1pbml1bSBoeWRyaXRlIzEyLjIzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE2LjAyLjAwI01hZ25lc2l1bSBoeWRyaXRlIzEyLjIzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE3LjAwLjAwI1N1bHBoaWRlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNy4wMS4wMCNIeWRyb2dlbiBzdWxwaGlkZSMxMi4yMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNy4wMi4wMCNQb2x5IHN1bHBoaWRlIzEyLjIzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE3LjAzLjAwI1NvZGl1bSBzdWxwaGlkZSMxMi4yMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNy4wNC4wMCNJcm9uIHN1bHBoaWRlIzEyLjIzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE4LjAwLjAwI0lub3JnYW5pYyBveGlkaXNpbmcgYWdlbnRzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE4LjAxLjAwI1BvdGFzc2l1bSBwZXJtYW5nYW5hdGUjMTIuMjMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTguMDIuMDAjUG90YXNzaXVtIGRpY2hyb21hdGUjMTIuMjMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTguMDMuMDAjTWFuZ2FuZXNlIGRpb3hpZGUjMTIuMjMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjQuMDAuMDAuMDAjQWxjb2hvbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDAuMDAjTW9ub2h5ZHJpYyBhbGNvaG9scyMxMi4yNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wMS4wMCNFdGhhbm9sIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjAyLjAwI0lzb3Byb3Bhbm9sIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjAzLjAwI01ldGhhbm9sIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjA0LjAwI1BlbnRhbm9scyMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wNS4wMCNPY3Rhbm9scyMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wNi4wMCNJbm9zaXRvbHMjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDcuMDAjRmF0dHkgYWxjb2hvbHMjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDguMDAjQWxseWwgYWxjb2hvbCMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMS4wMC4wMCNQb2x5aHlkcmljIGFsY29ob2xzIzEyLjI0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjExLjAxLjAwI0dseWNvbCMxMi4yNC4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMS4wMi4wMCNHbHljZXJvbCMxMi4yNC4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMi4wMC4wMCNUaGlvIGFsY29ob2xzIzEyLjI0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEyLjAxLjAwI0V0aGFuZSB0aGlvbCMxMi4yNC4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMi4wMi4wMCNNZXRoYW5lIHRoaW9sIzEyLjI0LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI1LjAwLjAwLjAwI0Fsa2FuZXMgQWxrZW5lcyBBbGt5bmVzIGFuZCBBcm9tYXRpY3MjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTAuMDAuMDAjQWxrYW5lcyMxMi4yNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMC4wMS4wMCNQZW50YW5lIzEyLjI1LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEwLjAyLjAwI0hleGFuZSMxMi4yNS4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMS4wMC4wMCNDeWNsaWMgaHlkcm9jYXJib25zIzEyLjI1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjExLjAxLjAwI1RvbHVlbmUjMTIuMjUuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTEuMDIuMDAjWHlsZW5lcyMxMi4yNS4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMS4wMy4wMCNCZW56ZW5lIzEyLjI1LjExLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEyLjAwLjAwI0Fsa2VuZXMjMTIuMjUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTIuMDEuMDAjUHJvcGVuZSMxMi4yNS4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMi4wMi4wMCNCdXRlbmUjMTIuMjUuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTIuMDMuMDAjU3R5cmVuZSMxMi4yNS4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMy4wMC4wMCNBbGt5bmVzIzEyLjI1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEzLjAxLjAwI0FjeXRlbGVuZSMxMi4yNS4xMy4wMC4wMAotdW5zcHNjNyMxMi4yNi4wMC4wMC4wMCNBcm9tYXRpYyBkZXJpdmF0aXZlcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMC4wMC4wMCNBcm9tYXRpYyBzdWxwaG9uaWMgYWNpZHMjMTIuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTAuMDEuMDAjQmVuemVuZSBzdWxwaG9uaWMgYWNpZHMjMTIuMjYuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTAuMDIuMDAjSGFsb2dlbmF0ZWQgc3VscGhvbmljIGFjaWRzIzEyLjI2LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEwLjAzLjAwI05pdHJvc3VscGhvbmljIGFjaWRzIzEyLjI2LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEwLjA0LjAwI0FtaW5vIHN1bHBob25pYyBhY2lkcyMxMi4yNi4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMC4wNS4wMCNTdWxwaG9ueWwgY2hsb3JpZGVzIzEyLjI2LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjExLjAwLjAwI0Fyb21hdGljIG5pdHJvIGNvbXBvdW5kcyMxMi4yNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMS4wMS4wMCNOaXRybyBiZW56ZW5lcyMxMi4yNi4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMS4wMi4wMCNOaXRybyB0b2x1ZW5lcyMxMi4yNi4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMS4wMy4wMCNDYXByb2xhY3RhbSMxMi4yNi4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMi4wMC4wMCNDeWNsaWMgYWxjb2hvbHMjMTIuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDEuMDAjSGV4YW5vbHMjMTIuMjYuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDIuMDAjTmFwdGhvbHMjMTIuMjYuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDMuMDAjWHlsZW5vbHMjMTIuMjYuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDQuMDAjQmVuenlsIGFsY29ob2xzIzEyLjI2LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEzLjAwLjAwI1BodGhhbGF0ZXMjMTIuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTMuMDEuMDAjRGkgb2N0eWwgUGh0aGFsYXRlIzEyLjI2LjEzLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEzLjAyLjAwI0RpIGV0aHlsIHBodGhhbGF0ZXMjMTIuMjYuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMDAuMDAuMDAuMDAjUmVzaW4gYW5kIFJvc2luIGFuZCBSdWJiZXIgYW5kIEZvYW0gYW5kIEZpbG0gYW5kIEVsYXN0b21lcmljIE1hdGVyaWFscyMxMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4wMC4wMC4wMCNSdWJiZXIgYW5kIGVsYXN0b21lcnMjMTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDAuMDAjTmF0dXJhbCBydWJiZXIjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDEuMDAjTGF0ZXggcnViYmVyIzEzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE1LjAyLjAwI0NyZXBlIHJ1YmJlciMxMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNS4wMy4wMCNTbW9rZWQgc2hlZXQgcnViYmVyIzEzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE1LjA0LjAwI05hdHVyYWwgZm9hbSBydWJiZXIjMTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDUuMDAjQmxvY2sgb3IgY3J1bWIgcnViYmVyIzEzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjAwLjAwI1Byb2Nlc3NlZCBhbmQgc3ludGhldGljIHJ1YmJlciMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wMS4wMCNWdWxjYW5pemVkIHJ1YmJlciMxMy4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wMi4wMCNDaGxvcmluYXRlZCBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDMuMDAjSHlkcm9jaGxvcmlkZSBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDQuMDAjQ3ljbGl6ZWQgcnViYmVyIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjA1LjAwI0lzb21lcml6ZWQgcnViYmVyIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjA2LjAwI1RoZXJtcGxhc3RpYyBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDcuMDAjUnViYmVyIGNvbXBvdW5kIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjAwLjAwI0VsYXN0b21lcnMjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDEuMDAjQWNyeWxvbml0cmlsZSBidXRhZGllbmUgKE5CUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDIuMDAjSGlnaGx5IHNhdHVyYXRlZCBuaXRyaWxlIChITkJSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wMy4wMCNGbHVvcm9jYXJib24gKEZLTSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDQuMDAjRXRoeWxlbmUgcHJvcHlsZW5lIChFUCkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDUuMDAjU3R5cmVuZSBidXRhZGllbmUgKFNCUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDYuMDAjQ2hsb3JvcHJlbmUgKENSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wNy4wMCNJc29idXR5bGVuZSBpc29wcmVuZSAoSUlSL1hJSVIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjA4LjAwI1NpbGljb25lIChWTVEgYW5kIFBNUSBhbmQgUFZNUSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDkuMDAjRmx1b3Jvc2lsaWNvbmUgKEZWTVEpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjEwLjAwI1BvbHlhY3J5bGF0ZSAoQUNNKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xMS4wMCNFdGh5bGVuZSBhY3J5bGljIChBRU0pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjEyLjAwI0NobG9yb3N1bGZvbmF0ZWQgcG9seWV0aHlsZW5lIChDU00pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjEzLjAwI0NobG9yb3BvbHlldGh5bGVuZSAoQ00pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjE0LjAwI0VwaWNobG9yb2h5ZHJpbiAoRUNPKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xNS4wMCNOYXR1cmFsIHBvbHlpc29wcmVuZSAoTlIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjE2LjAwI1N5bnRoZXRpYyBwb2x5aXNvcHJlbmUgKElSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xNy4wMCNQb2x5ZXN0ZXIgdXJldGhhbmUgKEFVKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xOC4wMCNQb2x5ZXRoZXIgdXJldGhhbmUgKEVVKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xOS4wMCNQb2x5YnV0YWRpZW5lIChCUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMjAuMDAjUG9seWV0aGVyIGJsb2NrIGFtaWRlIChQRUJBKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4yMS4wMCNTdHlyZW5lIGJsb2NrIGNvcGxveW1lciAoVEVTKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4yMi4wMCNDb3BvbHllc3RlciMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4yMy4wMCNUaGVybW9wbGFzdGljIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjI0LjAwI1BvbHlvbGVuZmluaWMjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDAuMDAjVGhlcm1vcGxhc3RpYyBlbGFzdG9tZXJzIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjE4LjAxLjAwI1BvbHlldGhlciBibG9jayBhbWlkZSAoUEVCQSkjMTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDIuMDAjUG9seW9sZW5maW5pYyAoVFBPKSMxMy4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOC4wMy4wMCNFdGhlciBlc3RlciBibG9jayBjb3Bsb3ltZXIgKFRFRUUpIzEzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE4LjA0LjAwI1RoZXJtb3BsYXN0aWMgZWxhc3RvbWVyIHBvbHl1cmV0aGFuZSAoVFBVUikjMTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDUuMDAjU3R5cmVuZSBibG9jayBjb3Bsb3ltZXIgKFRFUykjMTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDAuMDAjVGhlcm1vc2V0IHBsYXN0aWNzIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjAxLjAwI0Vwb3h5IChFUCkjMTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDIuMDAjUGhlbm9saWMgKFBGKSMxMy4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wMy4wMCNVbnNhdHVyYXRlIHBvbHllc3RlciAoVVApIzEzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjA0LjAwI1VyZWEgKFVGKSMxMy4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wNS4wMCNNZWxhbWluZSAoTUYpIzEzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjA2LjAwI1RoZXJtb3NldCBwb2x5dXJldGhhbmUgKFBVUikjMTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDAuMDAjVGhlcm1vcGxhc3RpYyBwbGFzdGljcyMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wMS4wMCNBY3J5bG9uaXRyaWxlIGJ1dGFkaWVuZSBzdHlyZW5lIChBQlMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjAyLjAwI0Fjcnlsb25pdHJpbGUgYnV0YWRpZW5lIHN0eXJlbmUgKEFCUykgYWxsb3lzIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjAzLjAwI0FjZXRhbCBwb2x5bWVyIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA0LjAwI0FjcnlsaWMjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDUuMDAjQWNyeWxvbml0cmlsZSBzdHlyZW5lIGFjcnlsaWMgKEFTQSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDYuMDAjQWNyeWxvbml0cmlsZSBzdHlyZW5lIGFjcnlsaWMgKEFTQSkgYWxsb3lzIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA3LjAwI0NlbGx1bG9zaWNzIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA4LjAwI0ZsdW9yb3BvbHltZXJzIChQVEZFKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wOS4wMCNFdGh5bGVuZSB2aW55bCBhY2V0YXRlIChFVkEpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjEwLjAwI0xpcXVpZCBjcnlzdGFsIHBvbHltZXIgKExDUCkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTEuMDAjUG9seWFtaWRlIG55bG9ucyAoUEEpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjEyLjAwI1BvbHlidXR5bGVuZSB0ZXJlcHRoYWxhdGUgKFBCVCkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTMuMDAjUG9seWNhcmJvbmF0ZSAoUEMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjE0LjAwI1BvbHlldGhlcmV0aGVya2V0b25lIChQRUVLKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xNS4wMCNQb2x5ZXRoZXJpbWlkIChQRUkpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjE2LjAwI1BvbHlldGhlcnN1bGZvbmUgKFBFUykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTcuMDAjSGlnaCBkZW5zaXR5IHBvbHlldGh5bGVuZSAoSERQRSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTguMDAjTG93IGRlbnNpdHkgcG9seWV0aHlsZW5lIChMRFBFKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xOS4wMCNNZWRpdW0gZGVuc2l0eSBwb2x5ZXRoeWxlbmUgKE1EUEUpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjIwLjAwI1BvbHlldGh5bGVuZSB0ZXJlcHRoYWxhdGUgKFBFVCkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjEuMDAjUG9seWltaWRlIChQSSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjIuMDAjUG9seXByb3B5bGVuZSAoUFApIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjIzLjAwI1BvbHlwaHRoYWxhbWlkZSAoUFBBKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yNC4wMCNQb2x5dGhlbnlsZW5lIG94aWRlIChQUE8pIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjI1LjAwI1BvbHlwaGVueWxlbmUgc3VsZmlkZSAoUFBTKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yNi4wMCNQb2x5c3R5cmVuZSAoUFMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjI3LjAwI0hpZ2ggaW1wYWN0IHBvbHlzdHlyZW5lIChISVBTKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yOC4wMCNQb2x5c3VsZm9uZSAoUFNVKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yOS4wMCNSaWdpZCB0aGVybW9wbGFzdGljIHBvbHl1cmV0aGFuZSAoUlBUVSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMzAuMDAjUG9seXZpbnlsIGNobG9yaWRlIChQVkMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjMxLjAwI1N0eXJlbmUgYWNyeWxvbml0cmlsZSAoU0FOKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wMC4wMCNSZXNpbnMjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDEuMDAjUGxhc3RpYyByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDIuMDAjSW5kZW5lIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wMy4wMCNVcmVhIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wNC4wMCNQaGVub2xpYyByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDUuMDAjVGhlcm1vcGxhc3RpYyByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDYuMDAjQWxreWQgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjA3LjAwI01lbGFtaW5lIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wOC4wMCNQb2x5YWNldGFsIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wOS4wMCNQb2x5YW1pZGUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjEwLjAwI1BvbHljYXJib25hdGUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjExLjAwI1BvbHlldGh5bGVuZSB0ZXJlcGh0aGFsYXRlIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xMi4wMCNQb2x5ZXRoZXIgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjEzLjAwI0FsbHlsIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xNC4wMCNQb2x5dXJldGhhbmUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjE1LjAwI0Vwb3h5IHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xNi4wMCNQZXRyb2xldW0gcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIyLjAwLjAwI1BsYXN0aWMgZmlsbXMjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjIuMDEuMDAjUG9seXVyZXRoYW5lIGZpbG1zIzEzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIyLjAyLjAwI1NpbGljb25lIGNvYXRlZCBmaWxtcyMxMy4xMC4yMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4wMC4wMC4wMCNSZXNpbnMgYW5kIHJvc2lucyBhbmQgb3RoZXIgcmVzaW4gZGVyaXZlZCBtYXRlcmlhbHMjMTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDAuMDAjUmVzaW5zIzEzLjExLjAwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjAxLjAwI0Vwb3h5IzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjAyLjAwI1BoZW5vbGljIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjAzLjAwI1Vuc2F0dXJhdGVkIHBvbHllc3RlciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wNC4wMCNBY3J5bG9uaXRyaWxlIGJ1dGFkaWVuZSBzdHlyZW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA1LjAwI0Fjcnlsb25pdHJpbGUgc3R5cmVuZSBhY3J5bGljIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA2LjAwI0Fjcnlsb25pdHJpbGUgc3R5cmVuZSBhY3J5bGljIGFsbG95cyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wNy4wMCNGbHVvcm9wb2x5bWVycyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wOC4wMCNFdGh5bGVuZSB2aW55bCBhY2V0YXRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA5LjAwI0xpcXVpZCBjcnlzdGFsIHBvbHltZXIjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTAuMDAjTnlsb24jMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTEuMDAjUG9seWJ1dHlsZW5lIHRlcmVwdGhhdGxhdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTIuMDAjUG9seWNhcmJvbmF0ZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xMy4wMCNQb2x5ZXRoZXJldGhlcmtldG9uZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xNC4wMCNQb2x5ZXRoZXJpbWlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xNS4wMCNQb2x5ZXRoZXJzdWxmb25lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjE2LjAwI1BvbHlldGh5bGVuZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xNy4wMCNQb2x5ZXRoeWxlbmUgdGVycHRoYWxhdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTguMDAjUG9seWltaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjE5LjAwI1BvbHlwcm9weWxlbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjAuMDAjUG9seXBodGhhbGFtaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjIxLjAwI1BvbHlldGh5bGVuZSBveGlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yMi4wMCNQb2x5cGhlbnlsZW5lIHN1bGZpZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjMuMDAjUG9seXN0eXJlbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjQuMDAjUG9seXN1bGZvbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjUuMDAjUG9seXZpbnlsIGNobG9yaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjI2LjAwI1N0eXJlbmUgYWNyeWxvbml0cmlsZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yNy4wMCNVcmVhIGZvcm1hbGRlaHlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yOC4wMCNBbGt5ZCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yOS4wMCNNZWxhbWluZSBmb3JtYWxkZWh5ZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzAuMDAjUG9seWFjZXRhbCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zMS4wMCNQb2x5YW1pZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzIuMDAjQWxseWwjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzMuMDAjRXRoeWxlbmUgYWNyeWxpYyBhY2lkIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM0LjAwI1BvbHl2aW55bCBjaGxvcmlkZSBjb21wb3VuZCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zNS4wMCNTb2x1dGlvbiB2aW55bCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zNi4wMCNQaGVub3h5IzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM3LjAwI0NvbXBvdW5kZWQgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM4LjAwI1BvbHl2aW5seSBweXJvbGlkaW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM5LjAwI1BvbHlldGh5bGVuZSB0ZXJlcGh0aGFsYXRlIG9yIGdseWNvbCBtb2RpZmllZCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40MC4wMCNIeWRyb2NhcmJvbiB0YWNraWZpZXIjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDEuMDAjUG9seWNhcmJvbmF0ZSBibGVuZHMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDIuMDAjUG9seXZpbnlsIGFsY29ob2wjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDMuMDAjUG9seXZpbnlsIGJ1dHlyYWwjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDQuMDAjUG9seWVzdGVyIG1vbGRpbmcgY29tcG91bmRzIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ1LjAwI1BvbHl2aW55bCBhY2V0YXRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ2LjAwI1BvbHl2aW55bCBldGhlciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40Ny4wMCNQb2x5dmlueWwgZm9ybWFsIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ4LjAwI1N0eXJlbmUgYWNyeWxpYyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40OS4wMCNFdGh5bGVuZSBwcm9weWxlbmUgcG9seW1lcnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTAuMDAjUG9seXByb3B5bGVuZSBveGlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41MS4wMCNQb2x5cHJvcHlsZW5lIGV0aGVyIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjUyLjAwI1BvbHlwcm9weWxlbmUgc3VsZm9uZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41My4wMCNQb2x5bWV0aHlsYWNyeWxhdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTQuMDAjU3R5cmVuZSBtYWxlaWMgYW5oeWRyaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU1LjAwI1N5bmRpb3RhdGljIHBvbHlzdHlyZW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU2LjAwI0NobG9yaW5hdGVkIHBvbHl2aW55bCBjaGxvcmlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41Ny4wMCNUaGVybW9wbGFzdGljIHBvbHllc3RlciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41OC4wMCNJbmRlbmUgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU5LjAwI1BsYXN0aWMgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjYwLjAwI1BldHJvbGV1bSByZXNpbnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNjEuMDAjUG9seXVyZXRoYW5lIHJlc2lucyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC42Mi4wMCNQb2x5ZXRoZXIgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjExLjAwLjAwI1Jvc2lucyMxMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMS4wMS4wMCNXb29kIHJvc2luIzEzLjExLjExLjAwLjAwCi11bnNwc2M3IzEzLjExLjExLjAyLjAwI0d1bSByb3NpbiMxMy4xMS4xMS4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMS4wMy4wMCNUYWxsIG9pbCByb3NpbiMxMy4xMS4xMS4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wMC4wMCNGaWxtcyMxMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wMS4wMCNQb2x5ZXRoeWxlbmUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDIuMDAjUG9seXVyZXRoYW5lIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjAzLjAwI0FjZXRhdGUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDQuMDAjQWNyeWxpYyBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wNS4wMCNDb2V4dHJ1ZGVkIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA2LjAwI0Zsb3Vyb3BvbHltZXIgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDcuMDAjTWV0YWxpemVkIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA4LjAwI055bG9uIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA5LjAwI1BvbHljYXJib25hdGUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTAuMDAjUG9seWVzdGVyIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjExLjAwI1BvbHlwcm9weWxlbmUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTIuMDAjQmlheGlhbGx5IG9yaWVudGF0ZWQgcG9seXByb3B5bGVuZSMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xMy4wMCNQb2x5bWlkZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xNC4wMCNQb2x5c3R5cmVuZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xNS4wMCNGbGV4aWJsZSBwb2x5dmlueWwgY2hsb3JpZGUgZmlsbSMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xNi4wMCNSaWdpZCBwb2x5dmlueWwgY2hsb3JpZGUgZmlsbSMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xNy4wMCNFdGh5bGVuZSB2aW55bCBhbGNvaG9sIGZpbG0jMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTguMDAjUG9seXZpbnlsaWRlbmUgY2hsb3JpZGUjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTkuMDAjUG9seXZpbnlsIGFsY29ob2wgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDAuMDAjRm9hbXMjMTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDEuMDAjUG9seW9sZWZpbiBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjAyLjAwI1BvbHlldGhlciBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjAzLjAwI1NpbGljb25lIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDQuMDAjRXRoeWxlbmUgcHJvcHlsZW5lIHRlcnBvbHltZXIgZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wNS4wMCNOZW9wcmVuZSBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjA2LjAwI1BvbHl2aW55bCBjaGxvcmlkZSBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjA3LjAwI1J1YmJlciBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjA4LjAwI1BvbHlzdHlyZW5lIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTQuMDAuMDAuMDAuMDAjUGFwZXIgTWF0ZXJpYWxzIGFuZCBQcm9kdWN0cyMxNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMC4wMC4wMC4wMCNQYXBlciBtYXRlcmlhbHMjMTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTAuMTUuMDAuMDAjUmF3IG1hdGVyaWFscyMxNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMC4xNS4wMS4wMCNQYXBlciBwdWxwIzE0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjAwLjAwLjAwI1BhcGVyIHByb2R1Y3RzIzE0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjAwLjAwI1ByaW50aW5nIGFuZCB3cml0aW5nIHBhcGVyIzE0LjExLjAwLjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjAxLjAwI09uaW9uIHNraW4gcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDIuMDAjVmVsbHVtIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjAzLjAwI1BhcmNobWVudCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wNC4wMCNUcmFjdG9yIGZlZWQgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDUuMDAjTWltZW9ncmFwaCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wNi4wMCNDb21wdXRlciBwcmludG91dCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wNy4wMCNQcmludGVyIG9yIGNvcGllciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wOC4wMCNGYWNzaW1pbGUgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDkuMDAjU3RhdGlvbmVyeSMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xMC4wMCNQbG90dGVyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjExLjAwI1dyaXRpbmcgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTIuMDAjR3JhcGggcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTMuMDAjTGVkZ2VyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjE0LjAwI1BhcGVyIHBhZHMgb3Igbm90ZWJvb2tzIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjE1LjAwI0NhbGN1bGF0b3Igb3IgY2FzaCByZWdpc3RlciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xNi4wMCNOb3RlYm9vayBmaWxsZXIgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTcuMDAjQnVzaW5lc3MgZm9ybXMjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTguMDAjSW5kZXggY2FyZHMjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTkuMDAjQ2FyZHN0b2NrIHBhcGVycyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yMC4wMCNCbG90dGVyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjIxLjAwI0xhc2VyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjIyLjAwI0lua2pldCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yMy4wMCNUcmFjaW5nIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjI0LjAwI0Zvb2xzY2FwIHNoZWV0cyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yNS4wMCNNdWx0aXB1cnBvc2UgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjYuMDAjVGVsZXBob25lIG1lc3NhZ2UgcGFkcyBvciBib29rcyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yOC4wMCNNYWduZXQgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjkuMDAjVGVsZXggcm9sbHMjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMzAuMDAjU2VsZiBhZGhlc2l2ZSBub3RlIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjAwLjAwI05vdmVsdHkgcGFwZXIjMTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDEuMDAjR2lmdCB3cmFwcGluZyBwYXBlciBvciBiYWdzIG9yIGJveGVzIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA0LjAwI0J1c2luZXNzIGNhcmRzIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA1LjAwI0dyZWV0aW5nIG9yIG5vdGUgb3IgcG9zdCBjYXJkcyMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wNi4wMCNBcnQgb3IgY3JhZnQgcGFwZXIjMTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDcuMDAjUG9zdGVyIGJvYXJkcyMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wOC4wMCNHaWZ0IGNlcnRpZmljYXRlIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA5LjAwI0NvdmVyIHBhcGVyIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjAwLjAwI1BlcnNvbmFsIHBhcGVyIHByb2R1Y3RzIzE0LjExLjAwLjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjAxLjAwI0ZhY2lhbCB0aXNzdWVzIzE0LjExLjE3LjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjAyLjAwI1RvaWxldCBzZWF0IGNvdmVycyMxNC4xMS4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wMy4wMCNQYXBlciB0b3dlbHMjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDQuMDAjVG9pbGV0IHRpc3N1ZSMxNC4xMS4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wNS4wMCNQYXBlciBuYXBraW5zIG9yIHNlcnZpZXR0ZXMjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDYuMDAjUGFwZXIgdGFibGUgY2xvdGgjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTguMDAuMDAjQnVzaW5lc3MgdXNlIHBhcGVycyMxNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xOC4wMS4wMCNUaWNrZXRzIG9yIHRpY2tldCByb2xscyMxNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xOC4wMi4wMCNSZWNlaXB0cyBvciByZWNlaXB0IGJvb2tzIzE0LjExLjE4LjAwLjAwCi11bnNwc2M3IzE0LjExLjE4LjAzLjAwI1ZvdWNoZXJzIzE0LjExLjE4LjAwLjAwCi11bnNwc2M3IzE0LjExLjE4LjA0LjAwI0JpbGxzIG9yIGJpbGwgYm9va3MjMTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTguMDUuMDAjQ2hlY2tzIG9yIGNoZWNrIGJvb2tzIzE0LjExLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjAwLjAwLjAwI0luZHVzdHJpYWwgdXNlIHBhcGVycyMxNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNS4wMC4wMCNQYXBlcmJvYXJkIGFuZCBwYWNrYWdpbmcgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjE1LjAxLjAwI0JsZWFjaGVkIHBhcGVyYm9hcmQjMTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTUuMDIuMDAjVW5ibGVhY2hlZCBwYXBlcmJvYXJkIzE0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE1LjAzLjAwI0NhcmRib2FyZCMxNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNS4wNC4wMCNQYWNrYWdpbmcgcGFwZXIjMTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTYuMDAuMDAjVGlzc3VlIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wMS4wMCNVbmJsZWFjaGVkIGNyZXBlIHBhcGVycyMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wMi4wMCNTZW1pIGJsZWFjaGVkIGNyZXBlIHBhcGVycyMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wMy4wMCNXZXQgc3RyZW5ndGggdGlzc3VlIHBhcGVycyMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wNC4wMCNBY2lkIGZyZWUgdGlzc3VlIHBhcGVycyMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wNS4wMCNLcmFmdCB0aXNzdWUgcGFwZXIjMTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTcuMDAuMDAjTGFtaW5hdGVkIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNy4wMS4wMCNQYXBlcnMgYm9uZGVkIHdpdGggZmlsbSMxNC4xMi4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNy4wMi4wMCNDeWxpbmRlciBwYXBlcnMgb3IgbXVsdGkgbGF5ZXIgaGVhdnl3ZWlnaHQgcGFwZXIjMTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDAuMDAjQ29hdGVkIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wMS4wMCNDbGF5IGNvYXRlZCBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDIuMDAjUG9seWV0aHlsZW5lIGNvYXRlZCBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDMuMDAjUG9seWVzdGVyIGNvYXRlZCBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDQuMDAjU2lsaWNvbmUgY29hdGVkIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wNS4wMCNMYXRleCB0cmVhdGVkIGNvYXRlZCBwYXBlciMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wNi4wMCNXYXhlZCBwYXBlciMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wNy4wMCNCdXRjaGVyIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wOC4wMCNGcmVlemVyIHBhcGVyIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjA5LjAwI01hc2tpbmcgcGFwZXIjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMTAuMDAjQ2FyYm9uIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOS4wMC4wMCNOZXdzcHJpbnQgYW5kIG9mZnNldCBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTkuMDEuMDAjU3RhbmRhcmQgbmV3c3ByaW50IzE0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE5LjAyLjAwI0NvbG9yZWQgbmV3c3ByaW50IzE0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE5LjAzLjAwI0hpZ2ggYnJpZ2h0bmVzcyBuZXdzcHJpbnQjMTQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTkuMDQuMDAjT2Zmc2V0IHBhcGVyIzE0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE0LjEyLjIwLjAwLjAwI1NwZWNpYWx0eSBjb2F0ZWQgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIwLjAxLjAwI0J1dGNoZXIgcGFwZXJzIzE0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIwLjAyLjAwI0ZyZWV6ZXIgcGFwZXIjMTQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDAuMDAjVW5jb2F0ZWQgYmFzZSBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDEuMDAjU3VwZXIgY2FsZW5kYXJlZCBrcmFmdCBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wMi4wMCNNYWNoaW5lIGZpbmlzaGVkIG9yIGdsYXplZCBrcmFmdCBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wMy4wMCNOb24gdHJlYXRlZCB1bmNvYXRlZCBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wNC4wMCNOb24gdHJlYXRlZCBjcmVwZSBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wNS4wMCNMYXRleCB0cmVhdGVkIGNyZXBlIHBhcGVyIzE0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIxLjA2LjAwI0xhdGV4IHRyZWF0ZWQgdW5jb2F0ZWQgcGFwZXIjMTQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMTUuMDAuMDAuMDAuMDAjRnVlbHMgYW5kIEZ1ZWwgQWRkaXRpdmVzIGFuZCBMdWJyaWNhbnRzIGFuZCBBbnRpIGNvcnJvc2l2ZSBNYXRlcmlhbHMjMTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMDAuMDAuMDAjRnVlbHMjMTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDAuMDAjUGV0cm9sZXVtIGFuZCBkaXN0aWxsYXRlcyMxNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wMS4wMCNGdWVsIG9pbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wMi4wMCNLZXJvc2VuZSMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wMy4wMCNOYXBodGhhIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjA0LjAwI0F2aWF0aW9uIGZ1ZWwjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDUuMDAjRGllc2VsIGZ1ZWwjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDYuMDAjR2Fzb2xpbmUjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDcuMDAjUGV0cm9sIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjA4LjAwI0NydWRlIG9pbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wOS4wMCNNYXJpbmUgZnVlbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4xMC4wMCNDb25kZW5zYXRlIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE2LjAwLjAwI0NvYWwgYW5kIGxpZ25pdGUgYW5kIHBlYXQjMTUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTYuMDEuMDAjQ29hbCMxNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNi4wMi4wMCNMaWduaXRlIzE1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE2LjAzLjAwI1BlYXQjMTUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTYuMDQuMDAjQ29rZSMxNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNi4wNS4wMCNDaGFyY29hbCMxNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMS4wMC4wMC4wMCNHYXNlb3VzIGZ1ZWxzIGFuZCBhZGRpdGl2ZXMjMTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDAuMDAjR2FzZW91cyBmdWVscyMxNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wMS4wMCNQcm9wYW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjAyLjAwI01ldGhhbmUjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDMuMDAjUHJvcHlsZW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjA0LjAwI0V0aHlsZW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjA1LjAwI0J1dGFuZSMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wNi4wMCNBY2V0eWxlbmUjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDcuMDAjV2F0ZXIgZ2FzIG9yIHByb2R1Y2VyIGdhcyMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wOC4wMCNDb2FsIGdhcyMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wOS4wMCNMaXF1aWZpZWQgcGV0cm9sZXVtIGdhcyMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4xMC4wMCNGdWVsIGFkZGl0aXZlcyMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNi4wMC4wMCNGdWVsIGFkZGl0aXZlcyMxNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNi4wMS4wMCNFdGhhbm9sIzE1LjExLjE2LjAwLjAwCi11bnNwc2M3IzE1LjExLjE2LjAyLjAwI01ldGhhbm9sIzE1LjExLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEyLjAwLjAwLjAwI0x1YnJpY2FudHMgYW5kIG9pbHMgYW5kIGdyZWFzZXMgYW5kIGFudGkgY29ycm9zaXZlcyMxNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wMC4wMCNMdWJyaWNhdGluZyBwcmVwYXJhdGlvbnMjMTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDEuMDAjRW5naW5lIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wMi4wMCNDdXR0aW5nIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wMy4wMCNHZWFyIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wNC4wMCNIeWRyYXVsaWMgb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjA1LjAwI1RyYW5zZm9ybWVyIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wNy4wMCNMaXRoaXVtIGdyZWFzZSMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wOC4wMCNUcmFuc21pc3Npb24gb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjA5LjAwI0JyYWtlIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xMC4wMCNBbnRpZ2FsbGluZyMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xMS4wMCNBc3NlbWJseSBwYXN0ZXMjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTIuMDAjQW50aSBhZGhlc2l2ZXMjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTMuMDAjR3JhcGhpdGUgbHVicmljYW50cyMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xNC4wMCNTcHJheSBsdWJyaWNhbnRzIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjE1LjAwI0FudGkgc2VpemUgb3IgYW50aSBzdGFpbiBjb21wb3VuZHMjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTYuMDAjTGVhayBzdG9wIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE2LjAwLjAwI1dheGVzIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE2LjAxLjAwI1BhcmFmZmluIHdheCMxNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNi4wMi4wMCNTZWFsaW5nIHdheCMxNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNi4wMy4wMCNPbGVmaW4gd2F4IzE1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE3LjAwLjAwI1NwZWNpYWx0eSBsdWJyaWNhbnRzIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE3LjAxLjAwI1BldHJvbGF0dW0jMTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDAuMDAjQW50aSBjb3Jyb3NpdmVzIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE4LjAxLjAwI01vaXN0dXJlIHJlcGVsbGVudCMxNS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOC4wMi4wMCNBbnRpIGNvcnJvc2lvbiBsdWJyaWNhbnQjMTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDMuMDAjUnVzdCByZW1vdmVyIzE1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE4LjA0LjAwI1J1c3QgcHJvb2ZpbmcgcHJlcGFyYXRpb24jMTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDUuMDAjQW50aSB3ZWxkIHBhc3RlcyMxNS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOS4wMC4wMCNHcmVhc2VzIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE5LjAxLjAwI1NpbGljb25lIGdyZWFzZSMxNS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOS4wMi4wMCNHcmVhc2UjMTUuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTkuMDMuMDAjVGVmbG9uIGdyZWFzZSMxNS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOS4wNC4wMCNXb29sIGdyZWFzZSMxNS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNS4xMy4wMC4wMC4wMCNGdWVsIGZvciBudWNsZWFyIHJlYWN0b3JzIzE1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEzLjE1LjAwLjAwI051Y2xlYXIgZnVlbCMxNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNS4wMi4wMCNEZXBsZXRlZCB1cmFuaXVtIzE1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEzLjE1LjAzLjAwI0VucmljaGVkIHVyYW5pdW0jMTUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTUuMDQuMDAjSXJpZGl1bSMxNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNS4wNS4wMCNFbnJpY2hlZCBwbHV0b25pdW0jMTUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTUuMDYuMDAjRGVwbGV0ZWQgcGx1dG9uaXVtIzE1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEzLjE2LjAwLjAwI0Zpc3Npb24gZnVlbCBhc3NlbWJsaWVzIzE1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEzLjE2LjAxLjAwI051Y2xlYXIgZnVlbCByb2QjMTUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMDAuMDAuMDAuMDAjTWluaW5nIE1hY2hpbmVyeSBhbmQgQWNjZXNzb3JpZXMjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMDAuMDAuMDAjTWluaW5nIGFuZCBxdWFycnlpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTUuMDAuMDAjQ3V0dGluZyBlcXVpcG1lbnQjMjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTUuMDEuMDAjQ29udGludW91cyBtaW5pbmcgZXF1aXBtZW50IzIwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE1LjAyLjAwI0xvbmd3YWxsIHNoZWFycyMyMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNS4wMy4wMCNDb2FsIGN1dHRlcnMjMjAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTUuMDQuMDAjUm9jayBjdXR0ZXJzIzIwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE2LjAwLjAwI1NjcmVlbnMgYW5kIGZlZWRpbmcgZXF1aXBtZW50IzIwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEwLjE2LjAxLjAwI1NjcmVlbnMjMjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTYuMDIuMDAjRmVlZGVycyMyMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wMC4wMCNDcnVzaGVycyBhbmQgYnJlYWtlcnMgYW5kIGdyaW5kZXJzIzIwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjAxLjAwI1JvY2sgY3J1c2hlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDIuMDAjUm9sbCBjcnVzaGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wMy4wMCNDb25lIGNydXNoZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA0LjAwI0d5cmF0b3J5IGNydXNoZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA1LjAwI0ltcGFjdCBjcnVzaGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wNi4wMCNKYXcgY3J1c2hlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDcuMDAjQ3J1c2hpbmcgcGxhbnRzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA4LjAwI1JvZCBtaWxscyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wOS4wMCNCYWxsIG1pbGxzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjEwLjAwI1B1bHZlcml6aW5nIG1hY2hpbmVyeSMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4xMS4wMCNSb2NrIGJyZWFrZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjEyLjAwI0VhcnRoIGdyaW5kZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjEzLjAwI0N5Y2xvbmUgb3Igdm9ydGV4IGdyaW5kZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjExLjAwLjAwLjAwI1dlbGwgZHJpbGxpbmcgYW5kIG9wZXJhdGlvbiBlcXVpcG1lbnQjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDAuMDAjRHJpbGxpbmcgYW5kIGV4cGxvcmF0aW9uIGVxdWlwbWVudCMyMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wMS4wMCNHYXMgd2VsbCBkcmlsbGluZyBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDIuMDAjT2lsIHdlbGwgZHJpbGxpbmcgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjAzLjAwI1N1YnNlYSBzeXN0ZW0gZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA0LjAwI1dhdGVyIHdlbGwgZHJpbGxpbmcgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA1LjAwI1VyYW5pdW0gZXhwbG9yYXRpb24gZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA2LjAwI1dlbGxoZWFkIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wNy4wMCNNdWQgb3Igd29ya292ZXIgZmx1aWQgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA4LjAwI1NlaXNtaWMgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjAwLjAwI0RyaWxsaW5nIGFuZCBvcGVyYXRpb24gbWFjaGluZXJ5IzIwLjExLjAwLjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjAxLjAwI0JvcmluZyBvciBzaW5raW5nIG1hY2hpbmVyeSMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wMi4wMCNEb3duaG9sZSBhc3NlbWJseSBtYWNoaW5lcnkjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDMuMDAjSGFtbWVyIGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wNC4wMCNDcmF3bGVyIGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wNS4wMCNSb2NrIGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wNi4wMCNQbmV1bWF0aWMgdmlicmF0b3JzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjA3LjAwI1R1bm5lbGluZyBtYWNoaW5lcnkjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDguMDAjU3RyaWtpbmcgaGFtbWVycyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wOS4wMCNTaW5rZXIgZHJpbGxzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjEwLjAwI1Nld2VyIGluc3BlY3Rpb24gbWFjaGluZXJ5IzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjExLjAwI1JvdGFyeSBkcmlsbHMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTIuMDAjRHJpbGxpbmcgcmlncyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xMy4wMCNMb25nIGhvbGUgZHJpbGxzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjE0LjAwI0luZHVzdHJpYWwgZHJpbGwgYml0cyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xNS4wMCNEcmlmdGVycyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xNi4wMCNEZXJyaWNrcyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xNy4wMCNEcmlsbGluZyBjYXJyaWFnZXMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTguMDAjRG93bmhvbGUgZmlzaGluZyBwb2xlcyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xOS4wMCNXZWxsIGRyaWxsaW5nIGJpdCBjb25lcyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNy4wMC4wMCNEcmlsbGluZyBhbmQgb3BlcmF0aW9uIGFjY2Vzc29yaWVzIzIwLjExLjAwLjAwLjAwCi11bnNwc2M3IzIwLjExLjE3LjAxLjAwI0F1ZGlvIHZpc3VhbCBpbnN0cnVtZW50cyBmb3Igd2VsbCBpbnNwZWN0aW9uIzIwLjExLjE3LjAwLjAwCi11bnNwc2M3IzIwLjExLjE3LjAyLjAwI1BhY2tlcnMgb3IgdHViaW5nIGFuY2hvcnMjMjAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTcuMDMuMDAjRHJpbGxpbmcgY2FzaW5ncyMyMC4xMS4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNy4wNC4wMCNEcmlsbGluZyBzY3JlZW5zIzIwLjExLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjAwLjAwLjAwI09pbCBhbmQgZ2FzIGRyaWxsaW5nIGFuZCBleHBsb3JhdGlvbiBlcXVpcG1lbnQjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDAuMDAjQWNpZGl6aW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wMS4wMCNBY2lkaXppbmcgYmxlbmRpbmcgdW5pdHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDIuMDAjQWNpZGl6aW5nIGRlbnNpdHkgc2Vuc29ycyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wMy4wMCNBY2lkaXppbmcgcHVtcGluZyB1bml0cyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wNC4wMCNBY2lkaXppbmcgdW5pdHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDUuMDAjQWNpZGl6aW5nIGFpciBwaXBpbmcjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDYuMDAjQWNpZGl6aW5nIGJhbGwgaW5qZWN0b3JzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA3LjAwI0J1bGsgbGlxdWlkIGFjaWQgZXF1aXBtZW50IzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA4LjAwI0FjaWRpemluZyBkcm9wIGJveGVzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA5LjAwI0FjaWRpemluZyBmbG93IG1ldGVycyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4xMC4wMCNBY2lkaXppbmcganVuY3Rpb24gYm94ZXMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTEuMDAjQWNpZGl6aW5nIHByZXNzdXJlIHNlbnNvcnMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTIuMDAjQWNpZGl6aW5nIHByb2Nlc3MgcGlwaW5nIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjEzLjAwI0FjaWRpemluZyBzdHJhaWdodCBqb2ludHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTQuMDAjQWNpZGl6aW5nIHN3aXZlbHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTUuMDAjQWNpZGl6aW5nIHRyZWF0aW5nIGlyb25zIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjE2LjAwI0FjaWRpemluZyB0cmVlIHNhdmVycyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wMC4wMCNDZW1lbnRpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjAxLjAwI0JsZW5kaW5nIHVuaXRzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjAyLjAwI0JyaWRnZSBwbHVncyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wMy4wMCNCdWxrIGxpcXVpZCBjZW1lbnQgZXF1aXBtZW50IzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA0LjAwI0NlbWVudCBidWxrIG1hdGVyaWFsIGVxdWlwbWVudCMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wNS4wMCNDZW1lbnQgZGVuc2l0eSBzZW5zb3JzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA2LjAwI0NlbWVudCBmbG9hdGluZyBidWxrIHVuaXRzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA3LjAwI0NlbWVudCBmbG9hdGluZyBlcXVpcG1lbnQgc3RhZ2UgdG9vbHMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDguMDAjQ2VtZW50IGZsb2F0aW5nIGVxdWlwbWVudCB3aXBlciBwbHVncyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wOS4wMCNDZW1lbnQgcHVtcGluZyB1bml0cyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xMC4wMCNDZW1lbnQgcmV0YWluZXJzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjExLjAwI0NlbnRyYWxpemVycyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xMi4wMCNFeHByZXNzIGxhdGNoIGNvdXBsZXJzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjEzLjAwI0Zsb2F0IGNvbGxhcnMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTQuMDAjRmxvYXQgc2hvZXMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTUuMDAjT2lsZmllbGQgY2VtZW50aW5nIHRvb2xzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjE2LjAwI1JldHJpZXZhYmxlIGNlbWVudGluZyBwYWNrZXJzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjE3LjAwI1NhZmV0eSBzbGluZ3MjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTguMDAjU3Vic2VhIGNlbWVudCBoZWFkcyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xOS4wMCNTdXJmYWNlIGNlbWVudCBoZWFkcyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wMC4wMCNGcmFjdHVyaW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wMS4wMCNCdWxrIGxpcXVpZCBmcmFjdHVyaW5nIGVxdWlwbWVudCMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wMi4wMCNGcmFjdHVyaW5nIGJ1bGsgcHJvcHBhbnQgZXF1aXBtZW50IzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjAzLjAwI0ZyYWN0dXJpbmcgY29udHJvbCB1bml0cyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wNC4wMCNGcmFjdHVyaW5nIGRlbnNpdHkgc2Vuc29ycyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wNS4wMCNGcmFjdHVyaW5nIG1hbmlmb2xkIHVuaXRzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjA2LjAwI0ZyYWN0dXJpbmcgcHJvcHBhbnQgY29udmV5aW5nIGVxdWlwbWVudCMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wNy4wMCNGcmFjdHVyaW5nIHB1bXBpbmcgdW5pdHMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDguMDAjRnJhY3R1cmluZyBzbHVycnkgYmxlbmRpbmcgdW5pdHMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDkuMDAjR2VsIGJsZW5kaW5nIHVuaXRzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjEwLjAwI0ZyYWN0dXJpbmcgbWlzc2lsZXMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMTEuMDAjUHVtcCBpbnRlZ3JpdHkgbW9uaXRvcnMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMTIuMDAjRnJhY3R1cmluZyBzZXJ2aWNlIHBhY2tlcnMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMTMuMDAjU3RpbXVsYXRpb24gcHVtcGluZyB1bml0cyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wMC4wMCNTYW5kIGNvbnRyb2wgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjAxLjAwI0JsYW5raW5nIHBsdWdzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjAyLjAwI0Zsb2F0ZXJzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjAzLjAwI0ZyYWMgcGFjayBzeXN0ZW1zIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjA0LjAwI0dyYXZlbCBwYWNrIHN5c3RlbXMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDUuMDAjR3VpZGUgc2hvZXMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDYuMDAjSG9vayB1cCBuaXBwbGVzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjA3LjAwI01ha2UgdXAgc3VicyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wOC4wMCNQcm9kdWN0aW9uIHR1YmluZyBvdmVyc2hvdHMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDkuMDAjU2FuZCBjb250cm9sIGJsYW5rcyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xMC4wMCNTYW5kIGNvbnRyb2wgYnVsayBsaXF1aWQgZXF1aXBtZW50IzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjExLjAwI1NhbmQgY29udHJvbCBidWxrIHByb3BwYW50IGVxdWlwbWVudCMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xMi4wMCNTYW5kIGNvbnRyb2wgZGVuc2l0eSBzZW5zb3JzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjEzLjAwI1NhbmQgY29udHJvbCBtYW5pZm9sZCB1bml0cyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xNC4wMCNTYW5kIGNvbnRyb2wgcHJvcHBhbnQgY29udmV5aW5nIGVxdWlwbWVudCMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xNS4wMCNTYW5kIGNvbnRyb2wgcHVtcGluZyB1bml0cyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xNi4wMCNTYW5kIGNvbnRyb2wgc2NyZWVucyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xNy4wMCNTYW5kIGNvbnRyb2wgc2x1cnJ5IGJsZW5kaW5nIHVuaXRzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjE4LjAwI1NhbmQgZGV0ZWN0b3JzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjE5LjAwI1NlYWwgYXNzZW1ibHkgbG9jYXRvcnMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMjAuMDAjU2hlYXIgam9pbnRzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjIxLjAwI1NsZWV2ZSBzaGlmdGluZyB0b29scyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4yMi4wMCNTbGlkaW5nIHNsZWV2ZXMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMjMuMDAjVmVsb2NpdHkgc3RyaW5ncyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wMC4wMCNDb21wbGV0aW9uIHRvb2xzIGFuZCBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDEuMDAjQmFsbCBjYXRjaGVyIHN1YnMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDIuMDAjQmxhc3Qgam9pbnRzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjAzLjAwI0JsYXN0IG5pcHBsZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDQuMDAjQ29tcGxldGlvbiBidWxsIHBsdWdzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA1LjAwI0NpcmN1bGF0aW9uIHByb2R1Y3Rpb24gZGV2aWNlcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wNi4wMCNDb21wbGV0aW9uIHRlc3QgZXF1aXBtZW50IzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA3LjAwI0NvbnRyb2wgbGluZSBwcm90ZWN0b3JzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA4LjAwI0RlZmxlY3Rpb24gdG9vbHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDkuMDAjQ29tcGxldGlvbiBleHBhbnNpb24gam9pbnRzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjEwLjAwI0Zsb3cgY291cGxpbmdzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjExLjAwI0dhcyBsaWZ0IGVxdWlwbWVudCMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xMi4wMCNIYW5nZXIgbGFuZGluZyB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xMy4wMCNDb21wbGV0aW9uIGh5ZHJhdWxpYyBwdW1wcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xNC4wMCNIeWRyYXVsaWMgc2V0dGluZyB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xNS4wMCNJbmplY3Rpb24gc3lzdGVtcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xNi4wMCNMYW5kaW5nIG5pcHBsZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTcuMDAjTGluZXIgaGFuZ2VycyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xOC4wMCNQYWNrZXIgcHVsbGluZyB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xOS4wMCNQYWNrZXIgcnVubmluZyB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yMC4wMCNQcm9kdWN0aW9uIHBhY2tlcnMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjEuMDAjUHVtcCBkb3duIHRocm91Z2ggZmxvdyBsaW5lIGVxdWlwbWVudCMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yMi4wMCNDb21wbGV0aW9uIHNhZmV0eSBqb2ludHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjMuMDAjQ29tcGxldGlvbiBzZWFsIGFzc2VtYmxpZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjQuMDAjU2VhbCBib3JlcyBvciBwb2xpc2hlZCBib3JlcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yNS4wMCNTaWRlIHBvY2tldCBtYW5kcmVscyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yNi4wMCNTbGlkaW5nIHNsZWV2ZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjcuMDAjU3Vic3VyZmFjZSBzYWZldHkgdmFsdmVzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjI4LjAwI1RyYXZlbCBqb2ludHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjkuMDAjVHViaW5nIGFuY2hvcnMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMzAuMDAjVHdpbiBmbG93IGFzc2VtYmxpZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDAuMDAjQ29udmVudGlvbmFsIGRyaWxsaW5nIHRvb2xzIzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjAxLjAwI0Jsb3dvdXQgcHJldmVudGVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wMi4wMCNCbG93b3V0IHByZXZlbnRlciBjb250cm9scyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wMy4wMCNDYXNpbmcgc2NyYXBlcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDQuMDAjRHJpbGwgY29sbGFycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wNS4wMCNDb3JpbmcgZXF1aXBtZW50IzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjA2LjAwI0RyaWxsIHBpcGUgdGhyZWFkIHByb3RlY3RvcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDcuMDAjRHJpbGwgcGlwZSB0b29sIGpvaW50cyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wOC4wMCNEcmlsbCBwaXBlIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjA5LjAwI0dhdWdlIHJpbmdzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjEwLjAwI0hvbGUgb3BlbmVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xMS4wMCNIb2xlIHJlYW1lcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMTIuMDAjRmlzaGluZyBqYXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjEzLjAwI0Rvd25ob2xlIHNob2NrIGFic29yYmVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xNC4wMCNEb3duaG9sZSBzdGFiaWxpemVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xNS4wMCNEcmlsbGluZyBzdWJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjE2LjAwI1RocnVzdGVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wMC4wMCNEcmlsbGluZyBiaXRzIzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjAxLjAwI0ZpeGVkIGN1dHRlciBkcmlsbCBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjAyLjAwI05hdHVyYWwgZGlhbW9uZCBkcmlsbCBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjAzLjAwI05venpsZSBkcmlsbCBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjA0LjAwI1BEQyBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjA1LjAwI1JvbGxlciBjb25lIGJ1dHRvbiBpbnNlcnQgZHJpbGwgYml0cyMyMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wNi4wMCNSb2xsZXIgc3RlZWwgdG9vdGggZHJpbGwgYml0cyMyMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wMC4wMCNGaXNoaW5nIHRvb2xzIzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjAxLjAwI0J1bXBlciBzdWJzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjAyLjAwI0Nhc2luZyBwYXRjaGVzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjAzLjAwI0phciBib29zdGVycyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wNC4wMCNKdW5rIHN1YnMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDUuMDAjTWlsbHMgb3IgYnVybmluZyBzaG9lcyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wNi4wMCNPdmVyc2hvdHMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDcuMDAjT2lsZmllbGQgZmlzaGluZyBzcGVhcnMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDguMDAjVW5zcGVjaWZpZWQgZmlzaGluZyB0b29scyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOC4wMC4wMCNEaXJlY3Rpb25hbCBkcmlsbGluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTguMDEuMDAjR2Vvc3RlZXJpbmcgdG9vbHMjMjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTguMDIuMDAjTXVkIG1vdG9ycyMyMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOC4wMy4wMCNSb3Rhcnkgc3RlZXJhYmxlIHRvb2xzIzIwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE4LjA0LjAwI0RpcmVjdGlvbmFsIGRyaWxsaW5nIHN1cmZhY2UgY29udHJvbCBzeXN0ZW1zIzIwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE4LjA1LjAwI1N0cmFpZ2h0IGhvbGUgZGlyZWN0aW9uYWwgZHJpbGxpbmcgdG9vbHMjMjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDAuMDAjV2VsbCBtZWFzdXJlbWVudCBhbmQgbG9nZ2luZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDEuMDAjQWNvdXN0aWMgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDIuMDAjRHJpbGxpbmcgb3IgbXVkIGNvbnRyb2wgaW5zdHJ1bWVudHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDMuMDAjRHJpbGxpbmcgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDQuMDAjRmxvdyBtZWFzdXJlbWVudCBlcXVpcG1lbnQjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDUuMDAjTnVjbGVhciBtYWduZXRpYyByZXNvbmFuY2UgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDYuMDAjTnVjbGVhciB0b29scyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wNy4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgZXF1aXBtZW50IzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjA4LjAwI1Jlc2lzdGl2aXR5IHRvb2xzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjA5LjAwI1N1cnZleWluZyBzeXN0ZW1zIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjEwLjAwI1RlbGVtZXRyeSBzeXN0ZW1zIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjExLjAwI1VsdHJhc29uaWMgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMTIuMDAjV2VsbCBsb2dnaW5nIGJvdHRvbSBob2xlIHByZXNzdXJlIGVxdWlwbWVudCMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4xMy4wMCNXZWxsIGxvZ2dpbmcgZG93bmhvbGUgdGVzdCBlcXVpcG1lbnQjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMTQuMDAjV2VsbCBsb2dnaW5nIHVuaXRzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjAwLjAwI0ZpeHR1cmluZyBhbmQgdGVzdCBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDEuMDAjRHJpZnQgYmFycyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wMi4wMCNEcmlmdCBzbGVldmVzIzIwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjAzLjAwI0RyaWZ0IHJhYmJpdHMjMjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDQuMDAjVGVzdCBmaXh0dXJlcyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wNS4wMCNUZXN0IG5pcHBsZXMjMjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDYuMDAjVGVzdCBwbHVncyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wMC4wMCNQZXJmb3JhdGluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDEuMDAjQ2Fwc3VsZSBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjAyLjAwI0Nhc2luZyBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjAzLjAwI0RlcGxveW1lbnQgaGVhZHMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDQuMDAjUGVyZm9yYXRpbmcgZXhwbG9zaXZlcyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wNS4wMCNGaXJpbmcgaGVhZHMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDYuMDAjR3VuIGFkYXB0ZXJzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjA3LjAwI0hpZ2ggc2hvdCBkZW5zaXR5IGd1bnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDguMDAjUGVyZm9yYXRpbmcgYnVsbCBwbHVncyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wOS4wMCNQbHVnIHNldHRpbmcgdG9vbHMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMTAuMDAjUGVyZm9yYXRpbmcgcG9zaXRpb25pbmcgZXF1aXBtZW50IzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjExLjAwI1NjYWxsb3BlZCBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjEyLjAwI1RhbmRlbSBzdWJzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjEzLjAwI1Rocm91Z2ggdHViaW5nIHBlcmZvcmF0aW9uIGd1biBhY2Nlc3NvcmllcyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4xNC4wMCNUaHJvdWdoIHR1YmluZyBwZXJmb3JhdGlvbiBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjE1LjAwI1VuZGVyIGJhbGFuY2UgdmVudCBzdWJzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjAwLjAwI1dlbGwgdGVzdGluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDEuMDAjRmxhcmUgYm9vbXMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDIuMDAjRmxhcmUgYnVybmVycyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wMy4wMCNDYXNlZCBob2xlIHRlc3QgdG9vbHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDQuMDAjQ2hva2UgbWFuaWZvbGRzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjA1LjAwI0RpdmVydGluZyBtYW5pZm9sZHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDYuMDAjRmxvd2hlYWQgYmFza2V0cyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wNy4wMCNGbG93aGVhZCBzd2l2ZWxzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjA4LjAwI0Zsb3doZWFkcyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wOS4wMCNGb3JtYXRpb24gc2h1dCBpbiB0b29scyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xMC4wMCNHYXMgZmxhcmVzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjExLjAwI011ZCBnYXMgYW5hbHl6ZXJzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjEyLjAwI09pbCBzYW1wbGVycyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xMy4wMCNXZWxsIHRlc3Rpbmcgc2VwYXJhdG9ycyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xNC4wMCNXZWxsIHRlc3Rpbmcgc3VyZmFjZSBwaXBpbmcjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTUuMDAjU3VyZ2UgdGFua3MjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTYuMDAjV2VsbCB0ZXN0aW5nIGRvd25ob2xlIHRvb2xzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjAwLjAwI1NsaWNrbGluZSBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDEuMDAjU2xpY2tsaW5lIGFkYXB0ZXIgaGVhZHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDIuMDAjU2xpY2tsaW5lIGJhY2tvZmZzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjAzLjAwI1NsaWNrbGluZSBiZWxsIGd1aWRlcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wNC4wMCNTbGlja2xpbmUgYmxpbmQgYm94ZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDUuMDAjU2xpY2tsaW5lIGJvdHRvbSBob2xlIHByZXNzdXJlIGVxdWlwbWVudCMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wNi4wMCNTbGlja2xpbmUgY2FsaXBlciB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wNy4wMCNTbGlja2xpbmUgY2VtZW50IGR1bXAgYmFpbGluZyBlcXVpcG1lbnQjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDguMDAjU2xpY2tsaW5lIGNoZW1pY2FsIGN1dHRlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDkuMDAjU2xpY2tsaW5lIGNsYW1wIG9uIHRvb2wgc3RyaW5nIGNlbnRyYWxpemVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xMC4wMCNTbGlja2xpbmUgY2xhbXAgb24gd2lyZWxpbmUgY2VudHJhbGl6ZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjExLjAwI1NsaWNrbGluZSBjb2xsYXIgbG9jYXRvcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTIuMDAjU2xpY2tsaW5lIGNvbGxlY3RvcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTMuMDAjU2xpY2tsaW5lIGNvbGxpZGluZyB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xNC4wMCNTbGlja2xpbmUgY3Jvc3NvdmVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xNS4wMCNTbGlja2xpbmUgZGVwdGggbWVhc3VyZW1lbnQgZXF1aXBtZW50IzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjE2LjAwI1NsaWNrbGluZSBkZXdhciBmbGFza3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTcuMDAjU2xpY2tsaW5lIGRpcG1ldGVyIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjE4LjAwI1NsaWNrbGluZSBkaXJlY3Rpb25hbCB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xOS4wMCNTbGlja2xpbmUgZ28gZGV2aWwgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjAuMDAjU2xpY2tsaW5lIGhvbGUgcHVuY2hlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjEuMDAjU2xpY2tsaW5lIGpldCBjdXR0ZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjIyLjAwI1NsaWNrbGluZSBqdW5rIHNob3RzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjIzLjAwI1NsaWNrbGluZSBraWNrb3ZlciB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yNC4wMCNTbGlja2xpbmUga251Y2tsZSBqb2ludHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjUuMDAjU2xpY2tsaW5lIGxlYWQgaW1wcmVzc2lvbiBibG9ja3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjYuMDAjU2xpY2tsaW5lIGxvY2F0b3IgbWFuZHJlbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjcuMDAjU2xpY2tsaW5lIGxvY2sgbWFuZHJlbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjguMDAjU2xpY2tsaW5lIGx1YnJpY2F0b3JzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjI5LjAwI1NsaWNrbGluZSBtZWNoYW5pY2FsIGJhaWxlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzAuMDAjU2xpY2tsaW5lIG1lY2hhbmljYWwgcGx1Z2JhY2tzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjMxLjAwI090aGVyIFNsaWNrbGluZSBUb29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zMi4wMCNTbGlja2xpbmUgcGFyYWZmaW4gc2NyYXBwZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjMzLjAwI1NsaWNrbGluZSByb3BlIHNvY2tldHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzQuMDAjU2xpY2tsaW5lIHJ1bm5pbmcgb3IgcHVsbGluZyBwcm9uZ3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzUuMDAjU2xpY2tsaW5lIHNldmVyaW5nIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjM2LjAwI1NsaWNrbGluZSBzaGVhdmVzIG9yIGZsb29yIGJsb2NrcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zNy4wMCNTbGlja2xpbmUgYm90dG9tIGhvbGUgcHJlc3N1cmUgZXF1aXBtZW50IzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjM4LjAwI1NsaWNrbGluZSBwdWxsaW5nIHRvb2wgYWNjZXNzb3JpZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzkuMDAjU2xpY2tsaW5lIHB1bGxpbmcgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDAuMDAjU2xpY2tsaW5lIHJ1bm5pbmcgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDEuMDAjU2xpY2tsaW5lIHVuaXRzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQyLjAwI1NsaWNrbGluZSB3aXJlIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQzLjAwI1NsaWNrbGluZSBzb25pYyB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40NC4wMCNTbGlja2xpbmUgc3BhY2VyIGJhcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDUuMDAjU2xpY2tsaW5lIHN3YWdlcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40Ni4wMCNTbGlja2xpbmUgdGVuc2lvbiBkZXZpY2VzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQ3LjAwI1NsaWNrbGluZSB0dWJpbmcgcGx1Z3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDguMDAjU2xpY2tsaW5lIHVsdHJhc29uaWMgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDkuMDAjV2lyZWxpbmUgR3JhYnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNTAuMDAjV2lyZWxpbmUgSmFycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41MS4wMCNXaXJlbGluZSBTY3JhcGVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41Mi4wMCNXaXJlbGluZSBTcGVhciMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41My4wMCNXaXJlbGluZSBTdGVtcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41NC4wMCNXaXJlbGluZSBWYWx2ZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDAuMDAjUHJvZHVjdGlvbiBzeXN0ZW1zIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wMS4wMCNDYWJsZSB0aHVtcGVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wMi4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIGV2YXBvcmF0b3JzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjAzLjAwI0hpcG90IHRlc3RlcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDQuMDAjT2lsZmllbGQgbGFwcGluZyBtYWNoaW5lcyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wNS4wMCNNb3RvciBlbmQgbGlmdHMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDYuMDAjT2lsIGRpZWxlY3RyaWMgdGVzdGVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wNy4wMCNPaWwgdmFjdXVtIGZpbGxpbmcgdW5pdHMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDguMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBzaGFmdCBzdHJhaWdodGVuZXJzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjA5LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gc3Bvb2xlcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMTAuMDAjVmlicmF0aW9uIGFuYWx5emVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wMC4wMCNDb2lsZWQgdHViaW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wMS4wMCNCbGFzdGVyIHRvb2xzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjAyLjAwI0NvaWxlZCB0dWJpbmcgdHJ1Y2sgY3JhbmUgdW5pdHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDMuMDAjQ29pbGVkIHR1YmluZyB1bml0cyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wNC4wMCNDb2lsZWQgdHViaW5nIGhvc2UgcGFja2FnZXMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDUuMDAjQ29pbGVkIHR1YmluZyBpbmZsYXRhYmxlIHN5c3RlbXMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDYuMDAjQ29pbGVkIHR1YmluZyBpbmplY3RvciBoZWFkcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wNy4wMCNDb2lsZWQgdHViaW5nIGxpZnRpbmcgZXF1aXBtZW50IzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjA4LjAwI09wZXJhdG9yIGhvdXNlcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wOS4wMCNDb2lsZWQgdHViaW5nIHBvd2VyIHBhY2tzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjEwLjAwI0NvaWxlZCB0dWJpbmcgcmVlbHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMTEuMDAjQ29pbGVkIHR1YmluZyBzcG9vbGluZyByZWVscyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4xMi4wMCNUdWJpbmcgZ3VpZGVzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjEzLjAwI1dlbGxoZWFkIGhvb2t1cHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMTQuMDAjV2VsbGhlYWQgc3VwcG9ydCBzdHJ1Y3R1cmVzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjE1LjAwI09pbGZpZWxkIGNvaWxlZCB0dWJpbmcjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDAuMDAjU2Vpc21pYyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDEuMDAjU2Vpc21pYyBhbmFsb2cgc2Vuc29ycyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wMi4wMCNTZWlzbWljIGFycmF5cyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wMy4wMCNTZWlzbWljIHN0cmVhbWVyIGNhYmxlIGJpcmRzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjA0LjAwI1NlaXNtaWMgZHJpbGwgdGFua2VycyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wNS4wMCNTZWlzbWljIGdlb3Bob25lcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wNi4wMCNTZWlzbWljIGdyYXZpdHkgc3lzdGVtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wNy4wMCNTZWlzbWljIGd1biB3aW5jaCBzeXN0ZW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjA4LjAwI1NlaXNtaWMgaHlkcm9waG9uZXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDkuMDAjU2Vpc21pYyBpbXB1bHNlIHNvdXJjZXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTAuMDAjU2Vpc21pYyBtYXJpbmUgc3RyZWFtZXIgY2FibGVzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjExLjAwI1NlaXNtaWMgb2NlYW4gYm90dG9tIGNhYmxlcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xMi4wMCNTZWlzbWljIG1hZ25ldGljIHN5c3RlbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTMuMDAjU2Vpc21pYyBwb3NpdGlvbmluZyBlcXVpcG1lbnQjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTQuMDAjU2Vpc21pYyByYW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE1LjAwI1NlaXNtaWMgcmVjZWl2ZXJzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE2LjAwI1NlaXNtaWMgcmVmcmFjdGlvbiBzeXN0ZW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE3LjAwI1NlaXNtaWMgc291cmNlIGNvbnRyb2xsZXJzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE4LjAwI1NlaXNtaWMgc3Bvb2xpbmcgZGV2aWNlcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xOS4wMCNTZWlzbWljIHRvdyBibG9ja3MjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMjAuMDAjU2Vpc21pYyB0b3cgcG9pbnRzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjIxLjAwI1NlaXNtaWMgdmlicmF0b3JzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjIyLjAwI1NlaXNtaWMgcmVjb3JkaW5nIHN5c3RlbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMjMuMDAjU2Vpc21pYyBkYXRhIHByb2Nlc3Npbmcgc3lzdGVtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wMC4wMCNPaWwgY291bnRyeSB0dWJ1bGFyIGdvb2RzIzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjAxLjAwI09pbCBjb3VudHJ5IGNhc2luZyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wMi4wMCNPaWwgY291bnRyeSBjb3VwbGluZ3MjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDMuMDAjT2lsIGNvdW50cnkgcHVwIGpvaW50cyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wNC4wMCNPaWwgY291bnRyeSB0dWJpbmcjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDUuMDAjT2lsIGNvdW50cnkgcGlwZSBjb2F0aW5ncyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wNi4wMCNDb25kdWN0b3IgY2FzaW5nIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjA3LjAwI0NvbmR1Y3RvciBjYXNpbmcgcnVubmluZyBlcXVpcG1lbnQjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDguMDAjRHJpbGwgcGlwZSBjcm9zc292ZXJzIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjA5LjAwI09pbCBjb3VudHJ5IHRocmVhZCBwcm90ZWN0b3JzIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjAwLjAwI0RyaWxsaW5nIGFuZCB3b3Jrb3ZlciByaWdzIGFuZCBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDEuMDAjTXVkIGFnaXRhdG9ycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wMi4wMCNNdWQgdGFua3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDMuMDAjQWlyIGRyaWxsaW5nIGVxdWlwbWVudCMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wNC4wMCNCYXJnZSByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjA1LjAwI0Jsb3cgb3V0IHByZXZlbnRlcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDYuMDAjRmx1aWQgZGl2ZXJ0ZXJzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjA3LjAwI0RyYXd3b3JrcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wOC4wMCNEcmlsbCBmbG9vciBlcXVpcG1lbnQjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDkuMDAjRHJpbGwgc3dpdmVscyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xMC4wMCNEcmlsbGluZyByaWcgc2hpcHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTEuMDAjRHJpbGwgcmlnIGVsZXZhdG9ycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xMi4wMCNEcmlsbCByaWcgYmFpbHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTMuMDAjSHlkcmF1bGljIHdvcmtvdmVyIHVuaXRzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE0LjAwI0RyaWxsIHJpZyBqYWNraW5nIHN5c3RlbXMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTUuMDAjSmFja3VwIG1hcmluZSBkcmlsbGluZyByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE2LjAwI0tlbGx5IGJ1c2hpbmdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE3LjAwI0tlbGx5IHZhbHZlcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xOC4wMCNLZWxseSB3aXBlcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTkuMDAjS2VsbHlzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjIwLjAwI0xhbmQgZHJpbGxpbmcgcmlncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yMS4wMCNNdWQgY2xlYW5pbmcgZXF1aXBtZW50IzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjIyLjAwI011ZCBtYW5pZm9sZHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjMuMDAjTXVkIG1peGVycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yNC4wMCNQaXBlIGhhbmRsaW5nIGVxdWlwbWVudCMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yNS4wMCNQbGF0Zm9ybSBkcmlsbGluZyByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI2LjAwI1Bvd2VyIHN3aXZlbCBvciB0b3AgZHJpdmVzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI3LjAwI1JpZyBza2lkcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yOC4wMCNEcmlsbCByaWcgcmlzZXJzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI5LjAwI0RyaWxsIHJpZyByb3RhcnkgdGFibGVzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjMwLjAwI1NlbGYgZWxldmF0aW5nIHdvcmtvdmVyIHBsYXRmb3JtcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zMS4wMCNTZW1pIHN1Ym1lcnNpYmxlIGRyaWxsaW5nIHJpZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzIuMDAjRHJpbGwgZmxvb3Igc2xpcHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzMuMDAjTWFrZXVwIHRvbmdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjM0LjAwI0lyb24gcm91Z2huZWNrcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zNS4wMCNUcmF2ZWxpbmcgZXF1aXBtZW50IzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjM2LjAwI1dvcmtvdmVyIGJvYXRzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjM3LjAwI1dvcmtvdmVyIHJpZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjkuMDAuMDAjU3VyZmFjZSBkYXRhIGxvZ2dpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI5LjAxLjAwI1N1cmZhY2UgZGF0YSBsb2dnaW5nIGNvbmR1aXRzIzIwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI5LjAyLjAwI1N1cmZhY2UgZGF0YSBsb2dnaW5nIHNlbnNvcnMjMjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjkuMDMuMDAjU3VyZmFjZSBkYXRhIGxvZ2dpbmcgdW5pdHMjMjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMzAuMDAuMDAjTXVsdGlsYXRlcmFsIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4zMC4wMS4wMCNNdWx0aWxhdGVyYWwgY2FzaW5nIzIwLjEyLjMwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjMwLjAyLjAwI011bHRpbGF0ZXJhbCBqdW5jdGlvbnMjMjAuMTIuMzAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMzAuMDMuMDAjTXVsdGlsYXRlcmFsIHBhY2tlcnMjMjAuMTIuMzAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMDAuMDAuMDAjT2lsIGFuZCBnYXMgZHJpbGxpbmcgYW5kIG9wZXJhdGlvbiBtYXRlcmlhbHMjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDAuMDAjRHJpbGxpbmcgbXVkIGFuZCBtYXRlcmlhbHMjMjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDEuMDAjRmlsdHJhdGlvbiBjb250cm9sIGFnZW50cyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wMi4wMCNGbHVpZCBzcGFjZXJzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjAzLjAwI0xvc3QgY2lyY3VsYXRpb24gYWdlbnRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA0LjAwI09pbCBiYXNlZCBtdWRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA1LjAwI1JhdGUgb2YgcGVuZXRyYXRpb24gZW5oYW5jZXJzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA2LjAwI1Nwb3R0aW5nIGZsdWlkcyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wNy4wMCNTeW50aGV0aWMgYmFzZWQgbXVkcyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wOC4wMCNNdWQgdGhpbm5pbmcgYWdlbnRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA5LjAwI1dhdGVyIGJhc2VkIG11ZHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMTAuMDAjTXVkIHdlaWdodGluZyBhZ2VudHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDAuMDAjV2VsbCBmcmFjdHVyaW5nIHByb3BwYW50cyMyMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wMS4wMCNDZXJhbWljIHByb3BwYW50cyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wMi4wMCNGcmFjdHVyaW5nIHNhbmRzIzIwLjEzLjExLjAwLjAwCi11bnNwc2M3IzIwLjEzLjExLjAzLjAwI1Jlc2luIGNvYXRlZCBjZXJhbWljIHByb3BwYW50cyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wNC4wMCNSZXNpbiBjb2F0ZWQgZnJhY3R1cmluZyBzYW5kcyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wNS4wMCNSZXNpbiBjb2F0ZWQgc2ludGVyZWQgYmF1eGl0ZXMjMjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDYuMDAjU2ludGVyZWQgYmF1eGl0ZXMjMjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTIuMDAuMDAjQ29tcGxldGlvbiBmbHVpZHMjMjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTIuMDEuMDAjRGl2YWxlbnQgYnJpbmVzIzIwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEyLjAyLjAwI01vbm92YWxlbnQgYnJpbmVzIzIwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjAwLjAwI09pbCB3ZWxsIGNlbWVudCMyMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wMS4wMCNPaWwgd2VsbCBidWxrIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wMi4wMCNPaWwgd2VsbCBjbGFzcyBhIHR5cGUgSSBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDMuMDAjT2lsIHdlbGwgY2xhc3MgYiB0eXBlIElJIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wNC4wMCNPaWwgd2VsbCBjbGFzcyBjIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wNS4wMCNPaWwgd2VsbCBjbGFzcyBnIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wNi4wMCNPaWwgd2VsbCBjbGFzcyBoIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wNy4wMCNPaWwgd2VsbCBsaWdodHdlaWdodCBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDguMDAjT2lsIHdlbGwgc3RhbmRhcmQgZmluZSB0eXBlIElJSSBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMDAuMDAuMDAjT2lsIGFuZCBnYXMgb3BlcmF0aW5nIGFuZCBwcm9kdWN0aW9uIGVxdWlwbWVudCMyMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wMC4wMCNXZWxsaGVhZCBlcXVpcG1lbnQjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDEuMDAjV2VsbGhlYWQgYWN0dWF0b3JzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjAyLjAwI1dlbGxoZWFkIGJlYW0gcHVtcHMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDMuMDAjV2VsbGhlYWQgZmxvdyBsaW5lcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wNC4wMCNXZWxsaGVhZCBnYXRlIHZhbHZlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wNS4wMCNXZWxsaGVhZCBwcm9kdWN0aW9uIGNob2tlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wNi4wMCNXZWxsaGVhZCBzdWIgc3VyZmFjZSBmbG93IG9yIGNocmlzdG1hcyB0cmVlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wNy4wMCNXZWxsaGVhZCBzdXJmYWNlIGZsb3cgb3IgY2hyaXN0bWFzIHRyZWVzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjA4LjAwI1dlbGxoZWFkIHN1cmZhY2Ugc2FmZXR5IHZhbHZlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMS4wMC4wMCNDaGVtaWNhbCBpbmplY3Rpb24gc3lzdGVtcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMS4wMS4wMCNQYXJhZmZpbiBpbmplY3Rpb24gc3lzdGVtcyMyMC4xNC4xMS4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMi4wMC4wMCNEZXNhbmRpbmcgZXF1aXBtZW50IzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEyLjAxLjAwI1Byb2R1Y3Rpb24gZGVzYW5kaW5nIGVxdWlwbWVudCMyMC4xNC4xMi4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMy4wMC4wMCNEb3duaG9sZSBqZXQgcHVtcHMgYW5kIGFuY2hvcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTMuMDEuMDAjRG93bmhvbGUgamV0IHB1bXBzIzIwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE0LjAwLjAwI0Rvd25ob2xlIHByb2R1Y3Rpb24gYWNjZXNzb3JpZXMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTQuMDEuMDAjVHViaW5nIHN0b3BzIzIwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE1LjAwLjAwI0Rvd25ob2xlIHB1bXBzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE1LjAxLjAwI0VsZWN0cmljIGRvd25ob2xlIHB1bXBzIzIwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE2LjAwLjAwI0V4cG9ydCBwdW1wcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNi4wMS4wMCNQbmV1bWF0aWMgZXhwb3J0IHB1bXBzIzIwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjAwLjAwI09mZnNob3JlIHByb2R1Y3Rpb24gYW5kIHN0b3JhZ2UgcGxhdGZvcm1zIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjAxLjAwI0ZpeGVkIG9mZnNob3JlIHByb2R1Y3Rpb24gcGxhdGZvcm1zIzIwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjAyLjAwI0Zsb2F0aW5nIG9mZnNob3JlIHByb2R1Y3Rpb24gcGxhdGZvcm1zIzIwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjAzLjAwI0Zsb2F0aW5nIG9mZnNob3JlIHN0b3JhZ2UgcGxhdGZvcm1zIzIwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjA0LjAwI0Zsb2F0aW5nIG9mZnNob3JlIHRlbnNpb24gbGVnICBwcm9kdWN0aW9uIHBsYXRmb3JtcyMyMC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNy4wNS4wMCNGbG9hdGluZyBvZmZzaG9yZSB0ZW5zaW9uIGxlZyBzdG9yYWdlIHBsYXRmb3JtcyMyMC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4xOC4wMC4wMCNXZWxsIHByb2R1Y3Rpb24gZmxvdyBtZWFzdXJlbWVudCBtZXRlcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTguMDEuMDAjV2VsbCBwcm9kdWN0aW9uIGdhcyB0dXJiaW5lIG1ldGVycyMyMC4xNC4xOC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xOS4wMC4wMCNHYXMgdHJlYXRpbmcgZXF1aXBtZW50IzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE5LjAxLjAwI09pbCB3ZWxsIHByb2R1Y3Rpb24gZ2FzIHRyZWF0aW5nIGVxdWlwbWVudCMyMC4xNC4xOS4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMC4wMC4wMCNHbHljb2wgcmVnZW5lcmF0b3JzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIwLjAxLjAwI09pbCB3ZWxsIGdseWNvbCByZWdlbmVyYXRvcnMjMjAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjEuMDAuMDAjSGVhdGVyIHRyZWF0ZXJzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIxLjAxLjAwI09pbCB3ZWxsIGhlYXRlciB0cmVhdGVycyMyMC4xNC4yMS4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMi4wMC4wMCNMaW5lIGhlYXRlcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjIuMDEuMDAjRWxlY3RyaWNhbCBsaW5lIGhlYXRlcnMjMjAuMTQuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjMuMDAuMDAjUHJvZHVjdGlvbiBpbmplY3Rpb24gc2tpZHMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjMuMDEuMDAjUG5ldW1hdGljIG1ldGhhbm9sIGluamVjdGlvbnMgc2tpZHMjMjAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjQuMDAuMDAjT2NlYW4gZmxvb3IgZXF1aXBtZW50IzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI0LjAxLjAwI1N1YnNlYSBwcm9kdWN0aW9uIHdlbGxoZWFkIGVxdWlwbWVudCMyMC4xNC4yNC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNS4wMC4wMCNQcm9kdWNlZCB3YXRlciB0cmVhdGluZyBlcXVpcG1lbnQjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjUuMDEuMDAjT2lsIGZpZWxkIHdhdGVyIG9pbCBjZW50cmlmdWdlcyMyMC4xNC4yNS4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNi4wMC4wMCNQcm9kdWN0aW9uIGNvbnRyb2wgc3lzdGVtIGluc3RydW1lbnRhdGlvbiMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNi4wMS4wMCNXaXJlbGVzcyBwcm9kdWN0aW9uIGNvbnRyb2wgc3lzdGVtcyMyMC4xNC4yNi4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNy4wMC4wMCNQdW1waW5nIHVuaXRzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI3LjAxLjAwI1N1Y2tlciByb2QgcHVtcCBqYWNrcyMyMC4xNC4yNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNy4wMi4wMCNSb2QgcHVtcHMjMjAuMTQuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjcuMDMuMDAjTWVjaGFuaWNhbCByb2QgcHVtcHMjMjAuMTQuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjguMDAuMDAjUHJvZHVjdGlvbiBzZXBhcmF0b3JzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI4LjAxLjAwI09pbCB3YXRlciBzZXBhcmF0b3JzIzIwLjE0LjI4LjAwLjAwCi11bnNwc2M3IzIwLjE0LjI5LjAwLjAwI1N0b3JhZ2UgdmVzc2VscyBhbmQgdGFua3MjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjkuMDEuMDAjT2lsIHN0b3JhZ2UgdGFua3MjMjAuMTQuMjkuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMzAuMDAuMDAjU3Vja2VyIHJvZHMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMzAuMDEuMDAjQWxsb3kgc3RlZWwgc3Vja2VyIHJvZHMjMjAuMTQuMzAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMzAuMDIuMDAjUG9ueSByb2RzIzIwLjE0LjMwLjAwLjAwCi11bnNwc2M3IzIxLjAwLjAwLjAwLjAwI0Zhcm1pbmcgYW5kIEZpc2hpbmcgYW5kIEZvcmVzdHJ5IGFuZCBXaWxkbGlmZSBNYWNoaW5lcnkgYW5kIEFjY2Vzc29yaWVzIzIxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjAwLjAwLjAwI0FncmljdWx0dXJhbCBhbmQgZm9yZXN0cnkgYW5kIGxhbmRzY2FwZSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wMC4wMCNBZ3JpY3VsdHVyYWwgbWFjaGluZXJ5IGZvciBzb2lsIHByZXBhcmF0aW9uIzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjAxLjAwI1Bsb3VnaHMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDIuMDAjSGFycm93cyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wMy4wMCNDdWx0aXZhdG9ycyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wNC4wMCNXZWVkZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjA1LjAwI0hvZWluZyBtYWNoaW5lcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wNi4wMCNHcmFkZXJzIG9yIGxhbmQgbGV2ZWxlcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDcuMDAjQWdyaWN1bHR1cmFsIHJvbGxlcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDguMDAjUm9sbGVycyBmb3IgbGF3biBvciBzcG9ydHMgZ3JvdW5kcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wOS4wMCNUcmVuY2hlciBkcmFpbmFnZSBtYWNoaW5lIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjEwLjAwI0lycmlnYXRpb24gcGlwZXMgb3IgdHViZXMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMTEuMDAjSXJyaWdhdGlvbiB0cmlja2xlcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xMi4wMCNJcnJpZ2F0aW9uIG92ZXJoZWFkcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xMy4wMCNEaXNrcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xNC4wMCNTdWJzb2lsZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjE1LjAwI0hlZGdlIGNsaXBwZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjE2LjAwI0RpYmJsZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjAwLjAwI0FncmljdWx0dXJhbCBtYWNoaW5lcnkgZm9yIHBsYW50aW5nIGFuZCBzZWVkaW5nIzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjAxLjAwI1BsYW50ZXJzIzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjAyLjAwI1RyYW5zcGxhbnRlcnMjMjEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTYuMDMuMDAjR3JhaW4gZHJpbGxzIzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjA0LjAwI1NlZWQgZHJpbGxzIzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjA1LjAwI1NlZWQgdHJlYXRpbmcgZXF1aXBtZW50IzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjA2LjAwI0hvbGUgZGlnZ2VycyMyMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNy4wMC4wMCNBZ3JpY3VsdHVyYWwgbWFjaGluZXJ5IGZvciBoYXJ2ZXN0aW5nIzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjAxLjAwI01vd2VycyMyMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNy4wMi4wMCNIYXltYWtpbmcgbWFjaGluZXJ5IzIxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjAzLjAwI0hhcnZlc3RlcnMjMjEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTcuMDQuMDAjQ29tYmluZSBoYXJ2ZXN0ZXJzIzIxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjA1LjAwI1RocmVzaGluZyBtYWNoaW5lcyMyMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wMC4wMCNEaXNwZXJzaW5nIGFuZCBzcHJheWluZyBhcHBsaWFuY2VzIGZvciBhZ3JpY3VsdHVyZSMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wMS4wMCNTcHJheWVycyMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wMi4wMCNEdXN0ZXJzIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjAzLjAwI1dhdGVyIHNwcmlua2xlcnMjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDQuMDAjRmVydGlsaXplciBzcHJlYWRlcnMgb3IgZGlzdHJpYnV0b3JzIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjA1LjAwI0ZvZyBvciBtaXN0IGdlbmVyYXRvcnMjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDYuMDAjQ29tcG9zdGVyIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjA3LjAwI1BvbGxpbmF0aW9uIGVxdWlwbWVudCBvciBzdXBwbGllcyMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wOC4wMCNGcm9zdCBwcm90ZWN0aW9uIGVxdWlwbWVudCMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wMC4wMCNQb3VsdHJ5IGFuZCBsaXZlc3RvY2sgZXF1aXBtZW50IzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjAxLjAwI01pbGtpbmcgbWFjaGluZXMjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDIuMDAjQW5pbWFsIGh1c2JhbmRyeSBlcXVpcG1lbnQjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDMuMDAjSW5jdWJhdG9ycyBvciBicm9vZGVycyBmb3IgcG91bHRyeSMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wNC4wMCNGZWVkIG1peGVycyMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wNS4wMCNMaXZlc3RvY2sgaWRlbnRpZmljYXRpb24gZXF1aXBtZW50IzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjA2LjAwI0VnZyBpbnNwZWN0aW9uIG9yIGNvbGxlY3RpbmcgZXF1aXBtZW50IzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjA3LjAwI0FuaW1hbCB3YXRlcmluZyBtYWNoaW5lcyMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wOC4wMCNNaWxrIGNvb2xpbmcgdGFua3MjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDkuMDAjQW5pbWFsIHNoZWFyaW5nIG9yIGNsaXBwaW5nIGVxdWlwbWVudCMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wMC4wMCNBZ3JpY3VsdHVyYWwgbWFjaGluZXJ5IGZvciBjbGVhbmluZyBhbmQgc29ydGluZyBhbmQgZ3JhZGluZyMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wMS4wMCNDbGVhbmluZyBtYWNoaW5lcyBmb3Igc2VlZCBvciBncmFpbiBvciBkcmllZCBsZWd1bWlub3VzIHZlZ2V0YWJsZXMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDIuMDAjU29ydGluZyBtYWNoaW5lcyBmb3Igc2VlZCBvciBncmFpbiBvciBkcmllZCBsZWd1bWlub3VzIHZlZ2V0YWJsZXMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDMuMDAjR3JhZGluZyBtYWNoaW5lcyBmb3Igc2VlZCBvciBncmFpbiBvciBkcmllZCBsZWd1bWlub3VzIHZlZ2V0YWJsZXMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDQuMDAjUmljZSBjbGVhbmluZyBvciBodWxsaW5nIGVxdWlwbWVudCMyMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wNS4wMCNHcmluZGluZyBtaWxscyMyMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wNi4wMCNIYW1tZXIgbWlsbHMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjEuMDAuMDAjQWdyaWN1bHR1cmFsIHByb2Nlc3NpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjEuMDEuMDAjQWdyaWN1bHR1cmFsIGJyaXF1ZXR0aW5nIG9yIHBlbHRpbmcgbWFjaGluZXMjMjEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDAuMDAjRm9yZXN0cnkgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDEuMDAjRGVjb3J0aWNhdG9ycyMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wMi4wMCNMdW1iZXJpbmcgZXF1aXBtZW50IzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjAzLjAwI1JlZm9yZXN0YXRpb24gZXF1aXBtZW50IzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjA0LjAwI0ZvcmVzdHJ5IHNhd3MjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDUuMDAjRm9yZXN0cnkgc2tpZGRlcnMjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDYuMDAjRm9yZXN0cnkgaW5jcmVtZW50IGJvcmVycyMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wNy4wMCNGb3Jlc3RyeSBpcHNvbWV0ZXIjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDAuMDAjR3JlZW5ob3VzZSBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDEuMDAjR3JlZW5ob3VzZSBpcnJpZ2F0aW9uIGVxdWlwbWVudCMyMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMy4wMi4wMCNHcmVlbmhvdXNlIHBvdHMjMjEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDMuMDAjR3JlZW5ob3VzZSB2ZW50aWxhdGlvbiBlcXVpcG1lbnQjMjEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDQuMDAjR3JlZW5ob3VzZSBpc29sYXRpb24gZXF1aXBtZW50IzIxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzIxLjEwLjI0LjAwLjAwI0luc2VjdCBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjQuMDEuMDAjQmVla2VlcGluZyBlcXVpcG1lbnQjMjEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjQuMDIuMDAjU2lsa3dvcm0gZXF1aXBtZW50IzIxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzIxLjEwLjI0LjAzLjAwI0J1dHRlcmZseSBicmVlZGluZyBlcXVpcG1lbnQjMjEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjQuMDQuMDAjQmVldGxlIGJyZWVkaW5nIGVxdWlwbWVudCMyMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMyMS4xMS4wMC4wMC4wMCNGaXNoaW5nIGFuZCBhcXVhY3VsdHVyZSBlcXVpcG1lbnQjMjEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDAuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIGVxdWlwbWVudCMyMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wMS4wMCNDb21tZXJjaWFsIGZpc2ggaG9va3MjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDIuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIHJlZWxzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjAzLjAwI0NvbW1lcmNpYWwgZmlzaGluZyBsaW5lIHRhY2tsZSMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wNC4wMCNDb21tZXJjaWFsIGZpc2hpbmcgbmV0cyMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wNi4wMCNDb21tZXJjaWFsIGZpc2hpbmcgZmxvYXRzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjA3LjAwI0NvbW1lcmNpYWwgc2lua2VycyBvciB3ZWlnaHRzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjA4LjAwI0Zpc2hpbmcgbmV0IGhhdWxlcnMjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTYuMDAuMDAjQXF1YWN1bHR1cmUgZXF1aXBtZW50IzIxLjExLjAwLjAwLjAwCi11bnNwc2M3IzIxLjExLjE2LjAxLjAwI01hcmluZSBoYXRjaGVyeSBlcXVpcG1lbnQjMjEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTYuMDIuMDAjUGlzY2ljdWx0dXJlIHN1cHBsaWVzIzIxLjExLjE2LjAwLjAwCi11bnNwc2M3IzIyLjAwLjAwLjAwLjAwI0J1aWxkaW5nIGFuZCBDb25zdHJ1Y3Rpb24gTWFjaGluZXJ5IGFuZCBBY2Nlc3NvcmllcyMyMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4wMC4wMC4wMCNIZWF2eSBjb25zdHJ1Y3Rpb24gbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDAuMDAjRWFydGggbW92aW5nIG1hY2hpbmVyeSMyMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wMS4wMCNGcm9udCBlbmQgbG9hZGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wMi4wMCNHcmFkZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjAzLjAwI0xvYWRlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDQuMDAjUGlsZSBkcml2ZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjA1LjAwI1JvbGxlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDYuMDAjRWFydGhtb3Zpbmcgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDcuMDAjVGFtcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wOC4wMCNUcmVuY2hpbmcgbWFjaGluZXMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDkuMDAjQmFja2hvZXMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTAuMDAjQnVsbGRvemVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xMS4wMCNDb21wYWN0b3JzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjEzLjAwI0RyYWdsaW5lcyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xNC4wMCNEcmVkZ2VycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xNS4wMCNFeGNhdmF0b3JzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE2LjAwI0RpdGNoZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE3LjAwI0NoZXJyeSBwaWNrZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE4LjAwI0VsZXZhdGluZyBzY3JhcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xOS4wMCNUd2luIGVuZ2luZSBvcGVuIGJvd2wgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjAuMDAjVHdpbiBlbmdpbmUgZWxldmF0aW5nIHNjcmFwZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjIxLjAwI1B1bGxlZCBzY3JhcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yMi4wMCNUcmFjayBidWxsZG96ZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjIzLjAwI1doZWVsIGJ1bGxkb3plcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjQuMDAjTW9iaWxlIGV4Y2F2YXRvcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjUuMDAjV2hlZWwgZXhjYXZhdG9ycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yNi4wMCNUcmFjayBleGNhdmF0b3JzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjI3LjAwI0ludGVncmF0ZWQgdG9vbCBjYXJyaWVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yOC4wMCNXaGVlbCBsb2FkZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjI5LjAwI1NraWQgc3RlZXIgbG9hZGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4zMC4wMCNPcGVuIGJvd2wgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMzEuMDAjU25vdyBibG93ZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjMyLjAwI1RyYWNrIGxvYWRlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDAuMDAjUGF2aW5nIGVxdWlwbWVudCMyMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNi4wMi4wMCNSYW1taW5nIGVxdWlwbWVudCMyMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNi4wMy4wMCNSb2FkIHdpZGVuZXJzIzIyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE2LjA0LjAwI1ZpYnJhdG9yeSBwbGF0ZXMjMjIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDUuMDAjQXNwaGFsdCBmaW5pc2hlcnMjMjIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDYuMDAjQ2hpcCBTcHJlYWRlcnMjMjIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTcuMDAuMDAjSGVhdnkgZXF1aXBtZW50IGNvbXBvbmVudHMjMjIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTcuMDEuMDAjRWFydGhtb3Zpbmcgc2hvdmVscyMyMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNy4wMi4wMCNFYXJ0aG1vdmluZyBidWNrZXRzIzIyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE3LjAzLjAwI0VhcnRobW92aW5nIGJsYWRlcyMyMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNy4wNC4wMCNTY2FyaWZpZXJzIzIyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE4LjAwLjAwI0FlcmlhbCBsaWZ0cyMyMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xOC4wMS4wMCNNYW5saWZ0IG9yIHBlcnNvbm5lbCBsaWZ0IzIyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE4LjAyLjAwI1BsYXRmb3JtIGxpZnQjMjIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTguMDMuMDAjQXJ0aWN1bGF0aW5nIGJvb20gbGlmdCMyMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xOC4wNC4wMCNUZWxlc2NvcGluZyBib29tIGxpZnQjMjIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjMuMDAuMDAuMDAuMDAjSW5kdXN0cmlhbCBNYW51ZmFjdHVyaW5nIGFuZCBQcm9jZXNzaW5nIE1hY2hpbmVyeSBhbmQgQWNjZXNzb3JpZXMjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMDAuMDAuMDAjUmF3IG1hdGVyaWFscyBwcm9jZXNzaW5nIG1hY2hpbmVyeSMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wMC4wMCNNYWNoaW5lcnkgZm9yIHdvcmtpbmcgd29vZCBhbmQgc3RvbmUgYW5kIGNlcmFtaWMgYW5kIHRoZSBsaWtlIzIzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjAxLjAwI0NvcGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wMi4wMCNEcmlsbGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wMy4wMCNCcm9hY2hpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDQuMDAjQmVuZGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wNS4wMCNCb3JpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDYuMDAjR3JpbmRpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDcuMDAjTW9sZGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wOC4wMCNDdXR0aW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjA5LjAwI1NhbmRpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTAuMDAjUG9saXNoaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjExLjAwI1R1cm5pbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTIuMDAjU2F3aW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjEzLjAwI01pbGxpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTQuMDAjUGxhbmluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xNS4wMCNFbmdyYXZpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTYuMDAjR2xhc3MgYmVhZCBwZWVuZXIgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTcuMDAjR3JpdCBibGFzdCBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xOC4wMCNTaG90IHBlZW4gbWFjaGluZSMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xOS4wMCNSb2JvdCBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4yMC4wMCNSYW0gZWxlY3RybyBkaXNjaGFyZ2UgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMjEuMDAjV2lyZSBjYXRob2RlIGVsZWN0cm9kZSBkaXNjaGFyZ2UgbWFjaGluZSMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4yMi4wMCNDaGlwIGJyZWFrZXIjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMDAuMDAuMDAjUGV0cm9sZXVtIHByb2Nlc3NpbmcgbWFjaGluZXJ5IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjAwLjAwI1BldHJvbGV1bSBkaXN0aWxsaW5nIGFuZCBwcm9jZXNzaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIzLjExLjAwLjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjAxLjAwI0Rpc3RpbGxhdGUgaHlkcm9wcm9jZXNzaW5nIGVxdWlwbWVudCMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wMi4wMCNDcnVkZSBkaXN0aWxsaW5nIG1hY2hpbmVyeSMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wMy4wMCNDYXRhbHl0aWMgY3JhY2tpbmcgZXF1aXBtZW50IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjA0LjAwI0h5ZHJvY3JhY2tpbmcgZXF1aXBtZW50IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjA1LjAwI0lzb21lcml6YXRpb24gbWFjaGluZXJ5IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjA2LjAwI0Nva2luZyBtYWNoaW5lcnkjMjMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDcuMDAjR2FzIHJlY292ZXJ5IG1hY2hpbmVyeSMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wMC4wMCNIeWRyb3RyZWF0aW5nIG1hY2hpbmVyeSMyMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wMS4wMCNOYXB0aGEgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjAyLjAwI0Rpc3RpbGxhdGUgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjAzLjAwI0NhdGFseXRpYyBmZWVkIGh5ZHJvdHJlYXRlciMyMy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wNC4wMCNMdWJlIGh5ZHJvdHJlYXRlciMyMy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wNS4wMCNHYXNvbGluZSBoeWRyb3RyZWF0ZXIjMjMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTYuMDYuMDAjUmVzaWQgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjAwLjAwLjAwI1RleHRpbGUgYW5kIGZhYnJpYyBtYWNoaW5lcnkgYW5kIGFjY2Vzc29yaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjAwLjAwI1RleHRpbGUgcHJvY2Vzc2luZyBtYWNoaW5lcnkgYW5kIGFjY2Vzc29yaWVzIzIzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjAxLjAwI0VtYnJvaWRlcnkgbWFraW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjAyLjAwI0ZlbHRpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDMuMDAjV2luZGluZyBvciByZWVsaW5nIG9yIHNwb29saW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA0LjAwI1R3aXN0aW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA1LjAwI1N0aXRjaCBib25kaW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA2LjAwI0tuaXR0aW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA3LjAwI1dlYXZpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDguMDAjRmluaXNoaW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA5LjAwI1NwaW5uaW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjEwLjAwI0xhY2UgbWFraW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjAwLjAwI1RleHRpbGUgd29ya2luZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjMjMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDEuMDAjQnV0dG9uIGNvdmVyaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjAyLjAwI0J1dHRvbiBzZXdpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDMuMDAjQnV0dG9uaG9sZSBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wNC4wMCNDbG90aCBjdXR0aW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjA1LjAwI0N1c2hpb24gZmlsbGluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wNi4wMCNGb2xkaW5nIG9yIHJld2luZGluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wNy4wMCNCbGVhY2hpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDguMDAjRmFicmljIG9yIGNsb3RoIGZvbGRpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDkuMDAjUmVlbGluZyBvciB1bnJlZWxpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMTAuMDAjRHllaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjExLjAwI0N1dHRpbmcgb3IgcGlua2luZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4xMi4wMCNTZXdpbmcgbWFjaGluZSBuZWVkbGVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjEzLjAwI1NpbGsgcHJvY2Vzc2luZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4xNC4wMCNTZXdpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMTUuMDAjRmFicmljIGN1dHRpbmcgdGFibGVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEzLjAwLjAwLjAwI0xhcGlkYXJ5IG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjAwLjAwI0dyaW5kaW5nIGFuZCBzYW5kaW5nIGFuZCBwb2xpc2hpbmcgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wMS4wMCNBYnJhc2l2ZSBjb21wb3VuZHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDIuMDAjRmVsdCB3aGVlbHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDMuMDAjR3JpbmRpbmcgd2hlZWxzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjA0LjAwI1BvbGlzaGluZyBjb21wb3VuZHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDUuMDAjUG9saXNoaW5nIGhlYWRzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjA2LjAwI1BvbGlzaGluZyB3aGVlbHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDcuMDAjU2FuZGluZyBjbG90aHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDguMDAjU2FuZGluZyBkcnVtcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wOS4wMCNUdW1ibGVycyBvciBwb2xpc2hlcnMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMTAuMDAjVHVtYmxpbmcgc3VwcGxpZXMgb3IgbWVkaWEjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMTEuMDAjV2F0ZXIgc3dpdmVscyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xMi4wMCNXYXRlciB0cmF5cyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xMy4wMCNTYW5kaW5nIGJsb2NrcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xNC4wMCNNb3VudGVkIHN0b25lcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xNS4wMCNHcmluZGluZyB3aGVlbCBkcmVzc2VycyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNi4wMC4wMCNGYWNldGluZyBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzIzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEzLjE2LjAxLjAwI0ZhY2V0aW5nIGFjY2Vzc29yaWVzIzIzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE2LjAyLjAwI0ZhY2V0aW5nIG1hY2hpbmVzIzIzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE2LjAzLjAwI0ZhY2V0aW5nIGxhcHMjMjMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTYuMDQuMDAjRmFjZXRpbmcgc2F3cyMyMy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNy4wMC4wMCNDYWJiaW5nIGVxdWlwbWVudCMyMy4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNy4wMS4wMCNDYWJiaW5nIGFjY2Vzc29yaWVzIzIzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE3LjAyLjAwI0NhYmJpbmcgYmVsdHMjMjMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTcuMDMuMDAjQ2FiYmluZyBkaXNjcyMyMy4xMy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNy4wNC4wMCNDYWJvY2hvbiBtYWNoaW5lcyMyMy4xMy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNC4wMC4wMC4wMCNMZWF0aGVyd29ya2luZyByZXBhaXJpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTYuMDAuMDAjTGVhdGhlciBwcmVwYXJpbmcgbWFjaGluZXJ5IGFuZCBhY2Nlc3NvcmllcyMyMy4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wMS4wMCNMZWF0aGVyIGZsZXNoaW5nIG1hY2hpbmVzIzIzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE2LjAyLjAwI0xlYXRoZXIgdGFubmluZyBtYWNoaW5lcyMyMy4xNC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wMy4wMCNMZWF0aGVyIGR5ZWluZyBtYWNoaW5lcyMyMy4xNC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wNC4wMCNMZWF0aGVyIGRlZ3JlYXNpbmcgbWFjaGluZXMjMjMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTYuMDUuMDAjTGVhdGhlciBwcmVzc2VzIzIzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE3LjAwLjAwI0xlYXRoZXIgd29ya2luZyBhbmQgcmVwYWlyaW5nIG1hY2hpbmVyeSBhbmQgYWNjZXNzb3JpZXMjMjMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTcuMDEuMDAjTGVhdGhlciBjdXR0aW5nIG1hY2hpbmVzIzIzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE3LjAyLjAwI0xlYXRoZXIgcml2ZXRpbmcgbWFjaGluZXMjMjMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTcuMDMuMDAjTGVhdGhlciBuYWlsaW5nIG1hY2hpbmVzIzIzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE3LjA0LjAwI0xlYXRoZXJ3b3JraW5nIHdvcmtzaG9wIGVxdWlwbWVudCMyMy4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNS4wMC4wMC4wMCNJbmR1c3RyaWFsIHByb2Nlc3MgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjAwLjAwI1J1YmJlciBhbmQgcGxhc3RpYyBwcm9jZXNzaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wMS4wMCNCbG93IG1vbGRpbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDIuMDAjQ29hdGluZyBtYWNoaW5lcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wMy4wMCNFeHRydWRlcnMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDQuMDAjSW5qZWN0aW9uIG1vbGRpbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDUuMDAjUnViYmVyIG9yIHBsYXN0aWMgbWl4ZXJzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjA2LjAwI1J1YmJlciBvciBwbGFzdGljIHByZXNzZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDcuMDAjVGhlcm1vIGZvcm1pbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDguMDAjVmFjdXVtIG1vbGRpbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDkuMDAjVnVsY2FuaXppbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMTAuMDAjUGxhc3RpYyBjdXR0aW5nIG1hY2hpbmVyeSMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xMS4wMCNQbGFzdGljIGdyaW5kaW5nIG1hY2hpbmVyeSMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xMi4wMCNSdWJiZXIgb3IgcGxhc3RpYyBtaWxscyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xMy4wMCNSdWJiZXIgb3IgcGxhc3RpYyBleHRydXNpb24gZGllcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xNC4wMCNQbGFzdGljIGluamVjdGlvbiBtb2xkcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xNS4wMCNUaGVybW9mb3JtaW5nIG1vbGRzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjE2LjAwI0VqZWN0b3IgcGlucyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wMC4wMCNDZW1lbnQgYW5kIGNlcmFtaWNzIGFuZCBnbGFzcyBpbmR1c3RyeSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDEuMDAjQmxvd2VycyBvciBkcnllcnMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDIuMDAjQ3J1c2hlcnMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDMuMDAjRnVzaW9uIHdlbGRpbmcgb3IgZ2xhc3MgZHJhd2luZyBtYWNoaW5lcyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wNC4wMCNHcmluZGluZyBvciBwb2xpc2hpbmcgbWFjaGluZXMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDUuMDAjTWl4aW5nIG9yIGtuZWFkaW5nIG1hY2hpbmVzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjA2LjAwI0NlbWVudCBvciBjZXJhbWljIG9yIGdsYXNzIG9yIHNpbWlsYXIgbWF0ZXJpYWwgbW9sZGluZyBtYWNoaW5lcyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wNy4wMCNQcmVzc2VzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjA4LjAwI1NpZnRlcnMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDAuMDAjT3B0aWNhbCBpbmR1c3RyeSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDEuMDAjTGVucyBncmluZGluZyBtYWNoaW5lcyMyMy4xNS4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNy4wMi4wMCNMZW5zIG1lYXN1cmluZyBlcXVpcG1lbnQjMjMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDMuMDAjTGVucyBwb2xpc2hpbmcgZXF1aXBtZW50IzIzLjE1LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE3LjA0LjAwI0xlbnMgdGVzdGluZyBlcXVpcG1lbnQjMjMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDUuMDAjT3B0aWNhbCB2YWN1dW0gY29hdGluZyBlcXVpcG1lbnQjMjMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDAuMDAjUGhhcm1hY2V1dGljYWwgaW5kdXN0cnkgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjAxLjAwI0FtcG91bGUgZmlsbGluZyBlcXVpcG1lbnQjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDIuMDAjQm90dGxlIGNhcHBlcnMgb3IgY290dG9uIGluc2VydGVycyBvciBzYWZldHkgc2VhbCBhcHBsaWNhdG9ycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wMy4wMCNDYXBzdWxhdGluZyBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wNC4wMCNSZWFjdG9ycyBvciBmZXJtZW50ZXJzIG9yIGRpZ2VzdGVycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wNS4wMCNGaWxsaW5nIG9yIHNlYWxpbmcgYXVnZXIgZG9zZSBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wNi4wMCNQaGFybWFjZXV0aWNhbCBmaWx0ZXJzIG9yIHVsdHJhIGZpbHRlcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDcuMDAjRnJlZXplZHJ5ZXJzIG9yIGx5b3BoaWx6ZXJzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjA4LjAwI1BoYXJtYWNldXRpY2FsIGdyYW51bGF0b3JzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjA5LjAwI1BoYW1hY2V1dGljYWwgc2lldmUgb3Igc2NyZWVuaW5nIG1hY2hpbmVzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjEwLjAwI1N0ZXJpbGUgb3IgYXNlcHRpYyBwcm9jZXNzaW5nIG9yIGZpbGxpbmcgbWFjaGluZXMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMTEuMDAjVGFibGV0IG9yIGNhcHN1bGUgdGVzdGluZyBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4xMi4wMCNUYWJsZXQgY291bnRlcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMTMuMDAjVGFibGV0dGluZyBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4xNC4wMCNWYWNjaW5lIHByb2R1Y3Rpb24gZXF1aXBtZW50IzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjE1LjAwI1Zlc3NlbCBtaXhlcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDAuMDAjUGFwZXIgbWFraW5nIGFuZCBwYXBlciBwcm9jZXNzaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wMS4wMCNDdXR0ZXJzIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjAyLjAwI1NsaXR0ZXJzIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjAzLjAwI1dhc2hpbmcgb3IgZGV3YXRlcmluZyBtYWNoaW5lcyMyMy4xNS4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wNC4wMCNXaW5kZXJzIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjA1LjAwI1dvb2QgcHVscCBvciBkaXNzb2x2ZXIgbWFjaGluZXMjMjMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDYuMDAjQ2FsZW5kZXJzIGZvciBwYXBlciBvciBjYXJkYm9hcmQgbWFraW5nIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjIwLjAwLjAwI1dlYiBoYW5kbGluZyBhbmQgY29udHJvbCBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjAuMDEuMDAjQ29yb25hIHRyZWF0ZXJzIzIzLjE1LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIwLjAyLjAwI0ZsYW1lIHRyZWF0ZXJzIzIzLjE1LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIxLjAwLjAwI1NlcGFyYXRpb24gbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjEuMDEuMDAjVmlicmF0b3J5IHNlcGFyYXRpb24gZXF1aXBtZW50IGFuZCBwYXJ0cyBhbmQgc2NyZWVucyMyMy4xNS4yMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMS4wMi4wMCNTdGF0aW9uYXJ5IHNlcGFyYXRpb24gZXF1aXBtZW50IGFuZCBwYXJ0cyBhbmQgc2NyZWVucyMyMy4xNS4yMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMS4wMy4wMCNBaXIgY2xhc3NpZmljYXRpb24gZXF1aXBtZW50IGFuZCBwYXJ0cyBhbmQgc2NyZWVucyMyMy4xNS4yMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMS4wNC4wMCNDZW50aWZ1Z2FsIHNlcGFyYXRpb24gZXF1aXBtZW50IG9yIHBhcnRzIG9yIHNjcmVlbnMjMjMuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjIuMDAuMDAjTWFudWZhY3R1cmluZyB0YWJsZXMgYW5kIHN0YW5kcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMi4wMS4wMCNSb3RhcnkgdGFibGVzIzIzLjE1LjIyLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIyLjAyLjAwI1N0YWNrIHN0YW5kcyMyMy4xNS4yMi4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMi4wMy4wMCNFbmdpbmUgYW5kIGNvbXBvbmVudCB0ZXN0IHN0YW5kcyMyMy4xNS4yMi4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMi4wNC4wMCNNYWNoaW5lIGd1YXJkaW5nIzIzLjE1LjIyLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIzLjAwLjAwI1JvdGFyeSB0YWJsZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjQuMDAuMDAjU3RhY2sgc3RhbmRzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI1LjAwLjAwI0VuZ2luZSBhbmQgY29tcG9uZW50IHRlc3Qgc3RhbmRzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI2LjAwLjAwI01hY2hpbmUgZ3VhcmRpbmcjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjcuMDAuMDAjQWlyIGNsYXNzaWZpY2F0aW9uIGVxdWlwbWVudCBhbmQgcGFydHMgYW5kIHNjcmVlbnMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjguMDAuMDAjQ2VudGlmdWdhbCBzZXBhcmF0aW9uIGVxdWlwbWVudCBvciBwYXJ0cyBvciBzY3JlZW5zIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI5LjAwLjAwI1BhY2thZ2luZyBtYWNoaW5lcnkjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjkuMDEuMDAjV3JhcHBpbmcgbWFjaGluZXJ5IzIzLjE1LjI5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjI5LjAyLjAwI0Zvcm0gb3IgZmlsbCBvciBzZWFsIG1hY2hpbmVyeSMyMy4xNS4yOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yOS4wMy4wMCNQYWNrYWdpbmcgdmFjdXVtIzIzLjE1LjI5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjAwLjAwI0hvbGRpbmcgYW5kIHBvc2l0aW9uaW5nIGFuZCBndWlkaW5nIHN5c3RlbXMgYW5kIGRldmljZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDEuMDAjQ2FsaWJyYXRpb24gamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjAyLjAwI0d1aWRlIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wMy4wMCNNYXN0ZXIgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA0LjAwI05lZWRsZSBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDUuMDAjU2hhZnQgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA2LjAwI0NoZWNraW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wNy4wMCNTZXR0aW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wOC4wMCNDYW1lcmEgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA5LjAwI1BpY2t1cCBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTAuMDAjUmVtb3ZhbCBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTEuMDAjTm96emxlIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xMi4wMCNTbGlkaW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xMy4wMCNDZW50ZXJpbmcgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE0LjAwI0luc3BlY3RpbmcgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE1LjAwI0ZlZWRlciBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTYuMDAjQ2x1dGNoIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xNy4wMCNBbGlnbm1lbnQgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE4LjAwI1Bvc2l0aW9uaW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xOS4wMCNMaWZ0ZXIgcGxhdGUjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjAuMDAjVGFwZSBndWlkZSMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yMS4wMCNUYXBlIGZlZWQgamF3IzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjIyLjAwI1Bvd2VyIGZlZWRlciMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yMy4wMCNGZWVkZXIgaGFybmVzcyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yNC4wMCNGZWVkIGphdyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yNS4wMCNNZWNoYW5pY2FsIGdyaXBwZXIjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjYuMDAjSG9sZGVyIGphdyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yNy4wMCNKYXcgYXNzZW1ibHkjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjguMDAjU3RhdGlvbmFyeSBqYXcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjkuMDAjSmlnIGJsb2NrIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjMwLjAwI0xpbmVhciBtb3Rpb24gZ3VpZGVzIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjMxLjAwI01lYXN1cmluZyBqaWdzIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjMyLjAwI1JpbmcgamlncyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMS4wMC4wMCNJbmR1c3RyaWFsIG1hY2hpbmVyeSBjb21wb25lbnRzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMxLjAxLjAwI1BpdGNoIHN0b3BwZXIjMjMuMTUuMzEuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzEuMDIuMDAjUGFwZXIgc3RvcHBlciMyMy4xNS4zMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMS4wMy4wMCNTdG9wcGVyIHBhZCMyMy4xNS4zMS4wMC4wMAotdW5zcHNjNyMyMy4xNi4wMC4wMC4wMCNGb3VuZHJ5ICBtYWNoaW5lcyBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wMC4wMCNGb3VuZHJ5IG1hY2hpbmVzIGFuZCBlcXVpcG1lbnQjMjMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDEuMDAjRm91bmRyeSBibG93ZXJzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjAyLjAwI0ZvdW5kcnkgYnVybmVycyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wMy4wMCNDb3JlIGRyeWluZyBvdmVucyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wNC4wMCNGb3JnaW5nIHByZXNzZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDUuMDAjSG90IG1ldGFsIG1peGVycyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wNi4wMCNGb3VuZHJ5IGNydWNpYmxlcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wNy4wMCNGb3VuZHJ5IGNvbnZlcnRlcnMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDguMDAjT3BlbiBkaWUgZm9yZ2luZyBwcmVzcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wOS4wMCNGb3JnaW5nIHN0YW1waW5nIG1hY2hpbmVzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjEwLjAwI0Nhc3RpbmcgbWFjaGluZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMTEuMDAjRm9yZ2luZyByb2xscyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xMi4wMCNSYWRpYWwgZm9yZ2luZyBtYWNoaW5lcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xMy4wMCNDb2xkIGZvcm1pbmcgcHJlc3NlcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xNC4wMCNTaXppbmcgb3IgZW1ib3NzaW5nIHByZXNzZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMTUuMDAjRW5kIGZvcmdpbmcgbWFjaGluZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDAuMDAjRm91bmRyeSBzdXBwbGllcyMyMy4xNi4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wMS4wMCNGb3VuZHJ5IGJlbGxvd3MjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDIuMDAjRm91bmRyeSBjbGF5cyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wMy4wMCNGb3VuZHJ5IGZsYXNrcyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wNC4wMCNGb3VuZHJ5IGZsdXhlcyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wNS4wMCNGb3VuZHJ5IGxhZGxlcyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wNi4wMCNGb3VuZHJ5IG1vbGRzIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjA3LjAwI0ZvdW5kcnkgc2FuZCMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wOC4wMCNGb3VuZHJ5IHNob3ZlbHMjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMDAuMDAuMDAjV29ya3Nob3AgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjAwLjAwI1NvbGRlcmluZyBhbmQgYnJhemluZyBhbmQgd2VsZGluZyBtYWNoaW5lcnkgYW5kIHN1cHBsaWVzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjAxLjAwI0FudGkgc3BhdHRlciBzcHJheXMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDIuMDAjR2FzIHdlbGRpbmcgb3IgYnJhemluZyByb2RzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjAzLjAwI0ZpbGxlciBtZXRhbCMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wNC4wMCNCbG93IHBpcGVzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA1LjAwI0lyb24gcG93ZGVyIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA2LjAwI1NvbGRlcmluZyBmbHVpZCMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wNy4wMCNTb2xkZXJpbmcgaXJvbnMgb3IgZ3VucyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wOC4wMCNXZWxkZXJzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA5LjAwI1NvbGRlciMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xMC4wMCNXZWxkaW5nIHdpcmUjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTEuMDAjV2VsZGluZyB0b29scyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xMi4wMCNXZWxkaW5nIHJvZHMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTMuMDAjV2VsZGluZyByZWN0aWZpZXJzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjE0LjAwI1dlbGRpbmcgZ2VuZXJhdG9ycyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xNS4wMCNXZWxkaW5nIGVsZWN0cm9kZXMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTcuMDAjQmxvdyB0b3JjaGVzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjE4LjAwI1BsYXNtYSB3ZWxkaW5nIG1hY2hpbmVyeSMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xOS4wMCNUdW5nc3RlbiBpbmVydCBnYXMgKFRJRykgd2VsZGluZyBtYWNoaW5lcnkjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjAuMDAjVWx0cmFzb3VuZCB3ZWxkaW5nIG1hY2hpbmVyeSMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yMS4wMCNMYXNlciB3ZWxkaW5nIG1hY2hpbmVyeSMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yMi4wMCNTb2xkZXJpbmcgZmx1eGVzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjIzLjAwI1RlbXBlcmF0dXJlIGluZGljYXRpbmcgc3RpY2tzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI0LjAwI0JyYXplIHJpbmdzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI1LjAwI1NvbGRlcmluZyB0aXBzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI2LjAwI0Rlc29sZGVyaW5nIHRpcHMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjcuMDAjRGVzb2xkZXJpbmcgYnJhaWQjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjguMDAjV2VsZGluZyBzY3JlZW5zIG9yIGN1cnRhaW5zIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI5LjAwI1dlbGRpbmcgb3Igc29sZGVyaW5nIGtpdCMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4zMC4wMCNTb2xkZXJpbmcgb3IgZGVzb2xkZXJpbmcgb3IgY29tYmluZWQgc3RhdGlvbnMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMzEuMDAjRGVzb2xkZXJpbmcgR3VuIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjAwLjAwI01hY2hpbmUgdG9vbHMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDEuMDAjQm9yaW5nIHRvb2xzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjAyLjAwI0JhciBvciByb2QgY3V0dGVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wMy4wMCNQaXBlIG9yIHR1YmUgY3V0dGVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wNC4wMCNXaXJlIG9yIGNhYmxlIGN1dHRlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDUuMDAjRGVidXJyaW5nIGVxdWlwbWVudCMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wNi4wMCNMYXRoZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDcuMDAjTGF0aGUgdG9vbHMgb3IgZGllcyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wOC4wMCNMYXNlciBjdXR0aW5nIHRvb2xzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjA5LjAwI1R3aXN0IGRyaWxscyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xMC4wMCNSZWFtZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjExLjAwI0NvdW50ZXJib3JlcyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xMi4wMCNNaWxsaW5nIGN1dHRlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTMuMDAjSG9icyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xNC4wMCNHZWFyIHNoYXBlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTUuMDAjU2hhdmluZyBjdXR0ZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjE2LjAwI1dhdGVyIGpldCBjdXR0aW5nIG1hY2hpbmVzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjE3LjAwI0Jyb2FjaGluZyB0b29scyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xOC4wMCNJbmRleGFibGUgaW5zZXJ0cyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xOS4wMCNCb3JpbmcgdG9vbHMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMjAuMDAjQnJvYWNoZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMjEuMDAjSW5zZXJ0aW9uIHRvb2xzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjIyLjAwI1dvcmtzaG9wIHByZXNzZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDAuMDAjTWV0YWwgYmVuZGluZyBhbmQgZm9ybWluZyBtYWNoaW5lcnkjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDEuMDAjVGFuZ2VudCBiZW5kZXJzIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjAyLjAwI1dpbmcgYmVuZGVycyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wMy4wMCNUdWJlIGJlbmRpbmcgbWFjaGluZXJ5IzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjA0LjAwI1BpcGUgYmVuZGluZyBtYW5kcmVscyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wNS4wMCNEaWUgYmVuZHMjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDYuMDAjU2VxdWVudGlhbCBmb3JtaW5nIG1hY2hpbmVzIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjA3LjAwI1R1YmUgZW5kIGZpbmlzaGVycyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wOC4wMCNNYWNoaW5lIG1vdW50aW5nIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjAwLjAwI01ldGFsIGZhYnJpY2F0aW5nIGRpZXMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDEuMDAjU3RhbXBpbmcgb3IgZm9ybWluZyBkaWVzIzIzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjAyLjAwI0RpZSBjYXN0aW5nIGRpZXMjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDMuMDAjTWV0YWwgZXh0cnVzaW9uIGRpZXMjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDQuMDAjQ3V0dGluZyBkaWVzIG9yIHRvb2xpbmcjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDUuMDAjUm90YXJ5IGRpZXMjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDYuMDAjU3RlZWwgcnVsZSBkaWVzIzIzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjAwLjAwI1NwZWNpYWwgdG9vbGluZyBmaXh0dXJlcyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wMS4wMCNIb2xkaW5nIGZpeHR1cmVzIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjAyLjAwI0dhdWdlcyBhbmQgaW5zcGVjdGlvbiBmaXh0dXJlcyMyMy4xNy4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wMy4wMCNGYWJyaWNhdGVkIHRvb2xpbmcgZml4dHVyZXMjMjMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTkuMDQuMDAjQ2FzdGluZyB0b29saW5nIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjA1LjAwI0ZvcmdpbmcgdG9vbGluZyMyMy4xNy4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wNi4wMCNBc3NlbWJseSBvciBkaXNhc3NlbWJseSB0b29saW5nIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjAwLjAwI01ldGFsIHdvcmtpbmcgbWFjaGluZXJ5IGF0dGFjaG1lbnRzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjAxLjAwI0J1cnJzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjAyLjAwI0Zvcm0gUmVsaWVmIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjAzLjAwI01hY2hpbmUgdGhyZWFkaW5nIHRhcHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDQuMDAjTWFjaGluZSB0aHJlYWRpbmcgZGllcyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wNS4wMCNNYWNoaW5lIGVuZCBtaWxscyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wNi4wMCNNZXRhbCBzdGFtcHMgb3IgcHVuY2hlcyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wNy4wMCNNZXRhbCBjdXR0aW5nIGJhbmQgc2F3IGJsYWRlcyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wOC4wMCNNZXRhbCBjdXR0aW5nIGNpcmN1bGFyIHNhdyBibGFkZXMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDkuMDAjQ2FyYmlkZSBpbnNlcnRzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjEwLjAwI0NlcmFtaWMgaW5zZXJ0cyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4xMS4wMCNTdGVlbCBpbnNlcnRzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjEyLjAwI0RpYW1vbmQgaW5zZXJ0cyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4xMy4wMCNUaHJlYWRpbmcgbWlsbHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjEuMDAuMDAjSG9sZGluZyBmaXh0dXJlcyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMi4wMC4wMCNHYXVnZXMgYW5kIGluc3BlY3Rpb24gZml4dHVyZXMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjMuMDAuMDAjRmFicmljYXRlZCB0b29saW5nIGZpeHR1cmVzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjI0LjAwLjAwI0Nhc3RpbmcgdG9vbGluZyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yNS4wMC4wMCNGb3JnaW5nIHRvb2xpbmcjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjYuMDAuMDAjQXNzZW1ibHkgb3IgZGlzYXNzZW1ibHkgdG9vbGluZyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4wMC4wMC4wMCNJbmR1c3RyaWFsIGZvb2QgYW5kIGJldmVyYWdlIGVxdWlwbWVudCMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wMC4wMCNGb29kIHByZXBhcmF0aW9uIG1hY2hpbmVyeSMyMy4xOC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wMS4wMCNGaWxsaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wMi4wMCNNaWxsaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wMy4wMCNNaXhpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjA0LjAwI1NpZnRpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjA1LjAwI0RlaHlkcmF0aW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wNi4wMCNXYXNoaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wNy4wMCNDcnVzaGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDguMDAjQmxhbmNoaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wOS4wMCNTb3J0aW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4xMC4wMCNNZWF0IHR5ZXJzIzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE2LjAwLjAwI0Zvb2QgY3V0dGluZyBtYWNoaW5lcnkjMjMuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDEuMDAjRGljaW5nIG1hY2hpbmVyeSMyMy4xOC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wMi4wMCNTbGljaW5nIG1hY2hpbmVyeSMyMy4xOC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wMy4wMCNDaG9wcGluZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDQuMDAjQ3V0dGluZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDUuMDAjR3JhdGluZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDYuMDAjUGVlbGluZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTcuMDAuMDAjRm9vZCBjb29raW5nIGFuZCBzbW9raW5nIG1hY2hpbmVyeSMyMy4xOC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNy4wMS4wMCNTbW9raW5nIG1hY2hpbmVyeSMyMy4xOC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNy4wMi4wMCNSb2FzdGluZyBtYWNoaW5lcnkjMjMuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTcuMDMuMDAjQ29va2luZyBtYWNoaW5lcnkjMjMuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTcuMDQuMDAjU3RlYW1pbmcgbWFjaGluZXJ5IzIzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE4LjAwLjAwI0luZHVzdHJpYWwgYmV2ZXJhZ2UgcHJvY2Vzc2luZyBtYWNoaW5lcnkjMjMuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTguMDEuMDAjQ29mZmVlIGJyZXdpbmcgZXF1aXBtZW50IG9yIHN1cHBsaWVzIzIzLjE4LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE4LjAyLjAwI0p1aWNpbmcgbWFjaGluZXJ5IzIzLjE4LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE4LjAzLjAwI0ljZSBtYWtpbmcgbWFjaGluZXMjMjMuMTguMTguMDAuMDAKLXVuc3BzYzcjMjMuMTguMTguMDQuMDAjSWNlIGNyZWFtIG1hY2hpbmVzIzIzLjE4LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE5LjAwLjAwLjAwI01peGVycyBhbmQgdGhlaXIgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjAwLjAwI0JhdGNoIG1peGVycyMyMy4xOS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMC4wMS4wMCNDaGFuZ2UgY2FuIG1peGVycyMyMy4xOS4xMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMC4wMi4wMCNIZWxpY2FsIGJsYWRlIG1peGVyIzIzLjE5LjEwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjAzLjAwI0RvdWJsZSBhcm0ga25lYWRpbmcgbWl4ZXJzIzIzLjE5LjEwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjA0LjAwI0ludGVuc2l2ZSBtaXhlcnMjMjMuMTkuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTAuMDUuMDAjUm9sbCBtaXhlcnMjMjMuMTkuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTEuMDAuMDAjQ29udGludW91cyBtaXhlcnMjMjMuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTEuMDEuMDAjU2luZ2xlIHNjcmV3IG1peGVycyMyMy4xOS4xMS4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMS4wMi4wMCNUd2luIHNjcmV3IGV4dHJ1ZGVyIzIzLjE5LjExLjAwLjAwCi11bnNwc2M3IzIzLjIwLjAwLjAwLjAwI01hc3MgdHJhbnNmZXIgZXF1aXBtZW50IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjAwLjAwI0dhcyBsaXF1aWQgY29udGFjdGluZyBzeXN0ZW1zIzIzLjIwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjAxLjAwI1BsYXRlIGNvbHVtbnMjMjMuMjAuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDIuMDAjUGFja2VkIGNvbHVtbnMjMjMuMjAuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDMuMDAjTGlxdWlkIGRpc3BlcnNlZCBjb250YWN0b3IjMjMuMjAuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDQuMDAjV2V0dGVkIHdhbGwgY29sdW1uIzIzLjIwLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjA1LjAwI0J1YmJsZSBjb2x1bW5zIzIzLjIwLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjExLjAwLjAwI0Fkc29ycHRpb24gYW5kIGlvbiBleGNoYW5nZSMyMy4yMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMS4wMS4wMCNBZHNvcmJlciB2ZXNzZWwjMjMuMjAuMTEuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTEuMDIuMDAjQW1iaWVudCBwcmVzc3VyZSBhZHNvcmJlciB2ZXNzZWwjMjMuMjAuMTEuMDAuMDAKLXVuc3BzYzcjMjMuMjEuMDAuMDAuMDAjRWxlY3Ryb25pYyBtYW51ZmFjdHVyaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4yMS4xMC4wMC4wMCNFbGVjdHJvbmljIGFzc2VtYmx5IG1hY2hpbmVyeSBhbmQgc3VwcG9ydCBlcXVpcG1lbnQjMjMuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMjEuMTAuMDEuMDAjQ2hpcCBwbGFjZXJzIzIzLjIxLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIxLjEwLjAyLjAwI0dsdWUgZGlzcGVuc2luZyBtYWNoaW5lcnkjMjMuMjEuMTAuMDAuMDAKLXVuc3BzYzcjMjQuMDAuMDAuMDAuMDAjTWF0ZXJpYWwgSGFuZGxpbmcgYW5kIENvbmRpdGlvbmluZyBhbmQgU3RvcmFnZSBNYWNoaW5lcnkgYW5kIHRoZWlyIEFjY2Vzc29yaWVzIGFuZCBTdXBwbGllcyMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4wMC4wMC4wMCNNYXRlcmlhbCBoYW5kbGluZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wMC4wMCNJbmR1c3RyaWFsIHRydWNrcyMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wMS4wMCNDYXJ0cyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wMi4wMCNCdWxrIHRyYW5zcG9ydGVycyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wMy4wMCNEb2xsaWVzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA0LjAwI0hhbmQgdHJ1Y2tzIG9yIGFjY2Vzc29yaWVzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA1LjAwI1BhbGxldCB0cnVja3MjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDYuMDAjUHVzaGNhcnRzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA3LjAwI1doZWVsYmFycm93cyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wOC4wMCNDcmVlcGVycyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wOS4wMCNXYWdvbnMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMTAuMDAjVGlsdCB0cnVja3MjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMTEuMDAjU2hlbGYgdHJvbGxleXMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDAuMDAjTGlmdGluZyBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjAxLjAwI0VsZXZhdG9ycyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wMi4wMCNIb2lzdHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDMuMDAjRm9ya2xpZnRzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA0LjAwI0xpZnRzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA1LjAwI0xvYWRpbmcgZXF1aXBtZW50IzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA2LjAwI1N0YWNrZXJzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA3LjAwI0NyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wOC4wMCNXaW5jaGVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA5LjAwI1RpbHRzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjEwLjAwI01hbmlwdWxhdG9ycyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xMS4wMCNTbGluZ3MjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTIuMDAjSmFja3MjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTMuMDAjQmxvY2tzIG9yIHB1bGxleXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTQuMDAjQWlyIGJhZ3MgZm9yIGxvYWRpbmcjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTUuMDAjTG9hZGluZyByYW1wcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xNi4wMCNCZWxvdyB0aGUgaG9vayBkZXZpY2UjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTcuMDAjU2Npc3NvciBsaWZ0IzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjE4LjAwI1BpcGUgbGF5ZXIjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTkuMDAjQnJpZGdlIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yMC4wMCNUcmFjayBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjEuMDAjQWxsIHRlcnJhaW4gY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjIyLjAwI1JvdWdoIHRlcnJhaW4gY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjIzLjAwI1Rvd2VyIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yNC4wMCNIeWRyYXVsaWMgdHJ1Y2sgY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI1LjAwI0NvbnZlbnRpb25hbCB0cnVjayBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjYuMDAjRXNjYWxhdG9yIG9yIHdhbGt3YXlzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI3LjAwI0dpcmRlciB0cm9sbGV5cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yOC4wMCNBZGp1c3RhYmxlIGZvcmtzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI5LjAwI0ZvcmtsaWZ0IGFjY2Vzc29yaWVzIG9yIHN1cHBsaWVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjMwLjAwI1dvcmtzaG9wIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4zMS4wMCNTdWN0aW9uIGN1cHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMzIuMDAjU2lkZSBzaGlmdHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDAuMDAjQ29udmV5b3JzIGFuZCBhY2Nlc3NvcmllcyMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wMS4wMCNDb252ZXlvciByb2xsZXIjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDIuMDAjQmFsbCB0cmFuc2ZlciB0YWJsZXMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDMuMDAjUm9jayBiaW5zIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjA0LjAwI0NvbnZleW9yIGZlZWRlcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDUuMDAjQ29udmV5b3Igc2NyZXcjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDYuMDAjVHJvbGxleXMgb3IgYWNjZXNzb3JpZXMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDcuMDAjQ29udmV5b3IgcmFpbHMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDguMDAjRXh0ZW5kYWJsZSBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDkuMDAjUm9sbGVyIGNvbnZleW9ycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xMC4wMCNQYWNrYWdlIHN0b3BzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjExLjAwI1R1cm50YWJsZXMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTIuMDAjQmVsdCBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTMuMDAjQnVja2V0IGNvbnZleW9ycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xNC4wMCNBaXIgY29udmV5b3JzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjE1LjAwI0NvbnZleW9yIGJlbHRpbmcjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTYuMDAjQ29udmV5b3IgcHVsbGV5cyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xNy4wMCNDb252ZXlvciBpZGxlcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTguMDAjQ29udmV5b3IgYmVsdCBsYWNpbmcgb3IgZmFzdGVuZXJzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjE5LjAwI0NvbnZleW9yIGJlbHQgYnJ1c2hlcyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4yMC4wMCNXZWFyIHN0cmlwcyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4yMS4wMCNUcm9sbGV5IGxpZCMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4yMi4wMCNDaGFpbiBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDAuMDAjRG9jayBlcXVpcG1lbnQjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDEuMDAjRG9jayBsZXZlbGVycyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wMi4wMCNEb2NrIHNlYWxzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjAzLjAwI0RvY2sgcmFtcHMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDQuMDAjU3RyaXAgZG9vcnMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDUuMDAjRG9jayBidW1wZXJzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjA2LjAwI0RvY2sgbGFkZGVycyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wNy4wMCNEb2NrIHBsYXRlcyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wOC4wMCNXaGVlbCBjaG9ja3MjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDkuMDAjRG9jayByYWlscyBhbmQgYWNjZXNzb3JpZXMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDAuMDAjRHJ1bSBoYW5kbGluZyBlcXVpcG1lbnQjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDEuMDAjRHJ1bSBvcGVuZXJzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjAyLjAwI0RydW0gZ3JhYnMjMjQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDMuMDAjRHJ1bSBsaWZ0ZXJzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjA0LjAwI0RydW0gY3JhZGxlcyMyNC4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wNS4wMCNTcGlsbCBkZWNrIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjA2LjAwI0RydW0gcmVjdXBlcmF0b3JzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjA3LjAwI1NwaWxsIGNvbnRhaW5tZW50IHN1cHBvcnRzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjAwLjAwI1NoZWx2aW5nIGFuZCBzdG9yYWdlIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjAxLjAwI1JhY2sgc3lzdGVtcyBmb3IgcmFjayBtb3VudCBlbGVjdHJvbmljIGVxdWlwbWVudCMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wMi4wMCNCaW4gaGFuZGxlcnMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDMuMDAjUGFsbGV0cyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wNC4wMCNTdG9yYWdlIHJhY2tzIG9yIHNoZWx2ZXMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDUuMDAjQXV0b21hdGVkIHN0b3JhZ2Ugb3IgcmV0cmlldmFsIHN5c3RlbXMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDYuMDAjV29yayBiZW5jaGVzIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjA3LjAwI1JlZWwgc3RvcmFnZSBzaGVsdmVzIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjA4LjAwI1BvcnRhYmxlIHJlZWwgaG9sZGVycyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wMC4wMCNXYXJlaG91c2luZyBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjAxLjAwI0NhcmdvIGhhbmRsaW5nIGVxdWlwbWVudCMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wMi4wMCNXYXJlaG91c2UgY2Fyb3VzZWxzIzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjAzLjAwI1dhcmVob3VzZSBjYXNlcnMjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDQuMDAjRGVwYWxsZXRpemVycyMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wNS4wMCNQYWxsZXRpemVycyMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wNi4wMCNJbmR1c3RyaWFsIHNocmluayB3cmFwIGVxdWlwbWVudCMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wNy4wMCNDYXJ0b25pbmcgbWFjaGluZXJ5IzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjA4LjAwI1BhY2thZ2luZyBjb21wYWN0b3JzIzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjAwLjAwI1BhY2tpbmcgdG9vbHMjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDEuMDAjU3RyZXRjaCBmaWxtIGRpc3BlbnNlcnMjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDIuMDAjQm94IHNlYWxpbmcgdGFwZSBkaXNwZW5zZXJzIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjAzLjAwI0JhZyBzZWFsaW5nIHRvb2xzIGFuZCBlcXVpcG1lbnQjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDQuMDAjU3RyYXBwaW5nIGRpc3BlbnNlciMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wNS4wMCNTdHJhcHBpbmcgdGVuc2lvbmVycyBvciBzZWFsZXJzIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjA2LjAwI0NhcnRvbiBmb3JtaW5nIG1hY2hpbmVzIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjA3LjAwI1RhcGluZyBtYWNoaW5lcyMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4wMC4wMC4wMCNDb250YWluZXJzIGFuZCBzdG9yYWdlIzI0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjAwLjAwI0JhZ3MjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDEuMDAjQ2FudmFzIGJhZ3MjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDIuMDAjUGFwZXIgYmFncyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wMy4wMCNQbGFzdGljIGJhZ3MjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDQuMDAjUG91Y2hlcyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wNS4wMCNGbGV4aWJsZSBpbnRlcm1lZGlhdGUgYnVsayBjb250YWluZXJzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjA2LjAwI0xhdW5kcnkgbmV0cyBvciBiYWdzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjA3LjAwI1Rvb2wgYmFncyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wOC4wMCNUZW50IGJhZyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNi4wMC4wMCNDb3ZlcnMgYW5kIGNhcHMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDAuMDAjVGFua3MgYW5kIGN5bGluZGVycyBhbmQgdGhlaXIgYWNjZXNzb3JpZXMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDEuMDAjUmVzZXJ2b2lycyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wMi4wMCNBaXIgb3IgZ2FzIHRhbmtzIG9yIGN5bGluZGVycyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wMy4wMCNTdG9yYWdlIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA0LjAwI0NhbGlicmF0aW5nIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA1LjAwI0NoZW1pY2FsIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA2LjAwI0RpcCB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wNy4wMCNFeHBhbnNpb24gdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDguMDAjRnVlbCBzdG9yYWdlIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA5LjAwI1Byb2Nlc3NpbmcgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMTAuMDAjV2F0ZXIgc3RvcmFnZSB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4xMS4wMCNDYXJib3lzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjEyLjAwI0NvbnRhaW5tZW50IGJhc2luIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjEzLjAwI1JpbnNlIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjAwLjAwI0JpbnMgYW5kIGJhc2tldHMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDEuMDAjQmlucyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wMi4wMCNCYXNrZXRzIzI0LjExLjIwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjAzLjAwI05vbiBtZXRhbGxpYyBiaW5zIzI0LjExLjIwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjA0LjAwI01ldGFsbGljIGJpbnMjMjQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDUuMDAjTWV0YWxsaWMgYmFza2V0cyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wNi4wMCNOb24gbWV0YWxsaWMgYmFza2V0cyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wMC4wMCNDYXNrcyBhbmQgYmFycmVscyBhbmQgZHJ1bXMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDEuMDAjQ2Fza3MjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDIuMDAjQmFycmVscyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wMy4wMCNTdGFpbmxlc3Mgc3RlZWwgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDQuMDAjU3RlZWwgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDUuMDAjUG9seWV0aHlsZW5lIGRydW1zIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjA2LjAwI0NvbXBvc2l0ZSBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wNy4wMCNGaWJlciBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wOC4wMCNNZXRhbGxpYyBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wOS4wMCNOb24gbWV0YWxsaWMgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMTAuMDAjSW50ZXJtZWRpYXRlIGJ1bGsgY29udGFpbmVycyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4xMS4wMCNTdGFiaWxpemVyIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjEyLjAwI0RydW0gbGlkIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjAwLjAwI0NhbnMgYW5kIHBhaWxzIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjAxLjAwI1N0ZWVsIHBhaWxzIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjAyLjAwI0dhc29saW5lIGNhbnMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDMuMDAjUGxhc3RpYyBwYWlscyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wNC4wMCNNZXRhbGxpYyBwYWlscyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wNS4wMCNOb24gbWV0YWxsaWMgcGFpbHMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDYuMDAjTWV0YWxsaWMgZmxhbW1hYmxlIGxpcXVpZCBjYW5zIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjA3LjAwI05vbiBtZXRhbGxpYyBmbGFtbWFibGUgbGlxdWlkIGNhbnMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDguMDAjU3ByYXkga2l0IzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjA5LjAwI0plcnJ5Y2FucyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wMC4wMCNTdG9yYWdlIGNoZXN0cyBhbmQgY2FiaW5ldHMgYW5kIHRydW5rcyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wMS4wMCNUb29sIGNoZXN0cyBvciBib3hlcyBvciBjYWJpbmV0cyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wMi4wMCNIYXphcmRvdXMgbWF0ZXJpYWxzIGNhYmluZXRzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjAzLjAwI1Rvb2wgYmVsdHMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDQuMDAjQm94IzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjA1LjAwI0RyYXdlcnMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDYuMDAjQm94IG9yIHNoZWxmIHBhcnRpdGlvbnMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDcuMDAjTWFpbCBib3hlcyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wOC4wMCNBbnRpc3RhdGljIGJveGVzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjA5LjAwI0JveCBsaWRzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjAwLjAwI0NvcnJ1Z2F0ZWQgYW5kIG90aGVyIGJveGVzIGZvciBkaXN0cmlidXRpb24jMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDEuMDAjU2xvdHRlZCBjb3JydWdhdGVkIGNhcnRvbnMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDIuMDAjT25lIHBpZWNlIGRpZSBjdXQgc2hpcHBpbmcgY2FydG9ucyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wMy4wMCNEaWUgY3V0IGNvcnJ1Z2F0ZWQgc2hpcHBpbmcgY2FydG9ucyB3aXRoIHNlcGFyYXRlIGxpZHMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDQuMDAjTW9sZGVkIGJveGVzIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjA1LjAwI1JpZ2lkIGJveGVzIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjA2LjAwI0ZsZXhpYmxlIGludGVybWVkaWF0ZSBidWxrIGNvbnRhaW5lcnMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDcuMDAjSW50ZXJtZWRpYXRlIGJ1bGsgY29udGFpbmVycyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNi4wMC4wMCNMaXF1aWQgY29udGFpbmVycyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNi4wMS4wMCNKdWdzIzI0LjExLjI2LjAwLjAwCi11bnNwc2M3IzI0LjExLjI2LjAyLjAwI0phcnMjMjQuMTEuMjYuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMDAuMDAuMDAjUGFja2FnaW5nIG1hdGVyaWFscyMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wMC4wMCNQYWNrYWdpbmcgYm94ZXMgYW5kIGJhZ3MgYW5kIHBvdWNoZXMjMjQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDEuMDAjUG9seSBiYWdzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjAyLjAwI1BhY2thZ2luZyBwb3VjaGVzIG9yIGJhZ3MjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDMuMDAjUGFja2FnaW5nIGJveGVzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjA0LjAwI0NhcmRlZCBwYWNrYWdpbmcjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDUuMDAjVGFycGF1bGlucyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wNi4wMCNDb25kdWN0aXZlIGJveGVzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjA3LjAwI1JpZ2lkIHNldCB1cCBib3hlcyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wOC4wMCNFZ2cgdHJheXMjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDAuMDAjUGFja2FnaW5nIGNhbnMjMjQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDEuMDAjQWVyb3NvbCBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjAyLjAwI1BhaW50IG9yIHZhcm5pc2ggY2FucyMyNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wMy4wMCNCZXZlcmFnZSBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjA0LjAwI0Zvb2QgY2FucyMyNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wNS4wMCNTdGVlbCBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjA2LjAwI0FsdW1pbnVtIGNhbnMjMjQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDAuMDAjQm90dGxlcyMyNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wMS4wMCNTcXVlZXplIGJvdHRsZXMjMjQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDIuMDAjUGxhc3RpYyBib3R0bGVzIzI0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjAzLjAwI0dsYXNzIGJvdHRsZXMjMjQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDQuMDAjQ2FwcyBvciB0b3BzIzI0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjA1LjAwI0FwcGxpY2F0b3IgYm90dGxlcyMyNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wNi4wMCNBcHBsaWNhdG9ycyMyNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMy4wMC4wMC4wMCNJbmR1c3RyaWFsIHJlZnJpZ2VyYXRpb24jMjQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDAuMDAjSW5kdXN0cmlhbCByZWZyaWdlcmF0b3JzIzI0LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEzLjE1LjAxLjAwI0NvbWJpbmVkIHJlZnJpZ2VyYXRvciBmcmVlemVycyMyNC4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wMi4wMCNMaXF1aWQgbml0cm9nZW4gcmVmcmlnZXJhdG9ycyMyNC4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wMy4wMCNXYWxrIGluIHJlZnJpZ2VyYXRvcnMjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDQuMDAjUmVmcmlnZXJhdGVkIGNvbnRhaW5lcnMjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDUuMDAjUmVmcmlnZXJhdGVkIHZlc3NlbHMjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDYuMDAjUmVmcmlnZXJhdGVkIHRhbmtzIzI0LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjAwLjAwI0luZHVzdHJpYWwgZnJlZXplcnMjMjQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDEuMDAjQ2hlc3QgZnJlZXplcnMjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDIuMDAjVXByaWdodCBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wMy4wMCNMb3cgdGVtcGVyYXR1cmUgZnJlZXplcnMjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDQuMDAjRnJlZXplIGRyeWluZyBlcXVpcG1lbnQjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDUuMDAjV2FsayBpbiBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wNi4wMCNQbGF0ZSBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wNy4wMCNCbGFzdCBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xOS4wMC4wMCNJY2UgbWFrZXJzIzI0LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEzLjE5LjAxLjAwI0ljZSBjdWJlIG1ha2VycyMyNC4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xOS4wMi4wMCNJY2UgYmxvY2sgbWFrZXJzIzI0LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI0LjE0LjAwLjAwLjAwI1BhY2tpbmcgc3VwcGxpZXMjMjQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDAuMDAjU2VjdXJpbmcgYW5kIHByb3RlY3Rpbmcgc3VwcGxpZXMjMjQuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDEuMDAjU3RyZXRjaCB3cmFwIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjAyLjAwI1NocmluayB3cmFwIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjAzLjAwI1BvbHlldGh5bGVuZSBmaWxtcyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wNC4wMCNUYW1wZXIgcHJvb2Ygb3Igc2VjdXJpdHkgc2VhbHMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDUuMDAjUG9seWV0aHlsZW5lIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjA2LjAwI1RhcnBhdWxpbnMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDcuMDAjQW50aSBzdGF0aWMgcGFja2FnaW5nIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjA4LjAwI0NhcnRvbiBjb3JuZXIgc3VwcG9ydCMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wOS4wMCNSdWJiZXIgY29yZCMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4xMC4wMCNDYWJsZSBwcm90ZWN0b3JzIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjExLjAwI0xvYWQgYmluZGVycyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wMC4wMCNDdXNoaW9uaW5nIHN1cHBsaWVzIzI0LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjAxLjAwI0J1YmJsZSB3cmFwIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjAyLjAwI1RoZXJtb2Zvcm1pbmcgbWF0ZXJpYWxzIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjAzLjAwI0N1c2hpb25pbmcjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDQuMDAjV2FkZGluZyBtYXRlcmlhbHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDUuMDAjQWlyIGZpbGxlZCBwYWNraW5nIG1hdGVyaWFscyMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wNi4wMCNQYWNraW5nIHBlYW51dHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDcuMDAjQ2FyZGJvYXJkIGluc2VydHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDguMDAjUHJvdGVjdGl2ZSBlbmRzIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjAwLjAwI1BhY2thZ2luZyB0dWJlcyBhbmQgY29yZXMgYW5kIGxhYmVscyBhbmQgYWNjZXNzb3JpZXMjMjQuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDEuMDAjUGFwZXIgdHViZXMgb3IgY29yZXMjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDIuMDAjVHViZSBvciBjb3JlIGVuZCBwbHVncyMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wMy4wMCNQYXBlciBwaWVjZXMjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDQuMDAjUHJpbnRlZCBpbnNlcnRzIG9yIGluc3RydWN0aW9ucyMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wNS4wMCNDb2xsYXBzaWJsZSB0dWJlcyMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wNi4wMCNTcG9vbCMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wNy4wMCNSZWVsIzI0LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI1LjAwLjAwLjAwLjAwI0NvbW1lcmNpYWwgYW5kIE1pbGl0YXJ5IGFuZCBQcml2YXRlIFZlaGljbGVzIGFuZCB0aGVpciBBY2Nlc3NvcmllcyBhbmQgQ29tcG9uZW50cyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4wMC4wMC4wMCNNb3RvciB2ZWhpY2xlcyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wMC4wMCNQYXNzZW5nZXIgbW90b3IgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDEuMDAjTWluaWJ1c2VzIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjAyLjAwI0J1c3NlcyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wMy4wMCNBdXRvbW9iaWxlcyBvciBjYXJzIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjA0LjAwI1N0YXRpb24gd2Fnb25zIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjA1LjAwI01pbml2YW5zIG9yIHZhbnMjMjUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDYuMDAjTGltb3VzaW5lcyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wNy4wMCNMaWdodCB0cnVja3Mgb3Igc3BvcnQgdXRpbGl0eSB2ZWhpY2xlcyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNi4wMC4wMCNQcm9kdWN0IGFuZCBtYXRlcmlhbCB0cmFuc3BvcnQgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTYuMDEuMDAjRHVtcCB0cnVja3MjMjUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTYuMDIuMDAjVG93IHRydWNrcyMyNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNi4wNC4wMCNEZWxpdmVyeSB0cnVja3MjMjUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTYuMDkuMDAjU2x1ZGdlIG9yIHNld2FnZSBoYW5kbGluZyB0cnVja3MjMjUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTcuMDAuMDAjU2FmZXR5IGFuZCByZXNjdWUgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTcuMDEuMDAjRmlyZSBvciByZXNjdWUgdHJ1Y2tzIzI1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE3LjAyLjAwI1BvbGljZSB2ZWhpY2xlcyMyNS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNy4wMy4wMCNBbWJ1bGFuY2VzIzI1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE4LjAwLjAwI01vdG9yaXplZCBjeWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTguMDEuMDAjTW90b3JjeWNsZXMjMjUuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTguMDIuMDAjU2Nvb3RlcnMjMjUuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTguMDMuMDAjTW9wZWRzIzI1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjAwLjAwI1NwZWNpYWxpemVkIGFuZCByZWNyZWF0aW9uYWwgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTkuMDEuMDAjQWdyaWN1bHR1cmFsIHRyYWN0b3JzIzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjAyLjAwI01vdG9yIGhvbWVzIzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjAzLjAwI1Nub3dtb2JpbGVzIG9yIHNub3cgc2Nvb3RlciMyNS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wNC4wMCNHb2xmIGNhcnRzIzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjA1LjAwI0FsbCB0ZXJyYWluIHZlaGljbGVzIHRyYWNrZWQgb3Igd2hlZWxlZCMyNS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wNi4wMCNHbyBjYXJ0IzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjIwLjAwLjAwI1dhciB2ZWhpY2xlcyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMC4wMS4wMCNUYW5rcyMyNS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMC4wMi4wMCNBcm1vcmVkIGZpZ2h0aW5nIHZlaGljbGVzIzI1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIwLjAzLjAwI1NlbGYgcHJvcGVsbGVkIGFydGlsbGVyeSMyNS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wMC4wMCNUcnVjayB0cmFjdG9ycyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wMS4wMCNMb3cgY2FiIGZvcndhcmQgdHJhY3RvcnMjMjUuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjEuMDIuMDAjTG9uZyBub3NlIHRyYWN0b3JzIHdpdGggc2xlZXBlciMyNS4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wMy4wMCNMb25nIG5vc2UgdHJhY3RvcnMgd2l0aG91dCBzbGVlcGVyIzI1LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIxLjA0LjAwI0NhYiBvdmVyIGVuZ2luZSB0cmFjdG9ycyB3aXRoIHNsZWVwZXIjMjUuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjEuMDUuMDAjQ2FiIG92ZXIgZW5naW5lIHRyYWN0b3JzIHdpdGhvdXQgc2xlZXBlciMyNS4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4xMS4wMC4wMC4wMCNNYXJpbmUgdHJhbnNwb3J0IzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjAwLjAwI0NvbW1lcmNpYWwgbWFyaW5lIGNyYWZ0IzI1LjExLjAwLjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjAxLjAwI1RyYXdsZXJzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjAyLjAwI0Zpc2hpbmcgYm9hdHMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDMuMDAjQ2FyZ28gb3IgY29udGFpbmVyIHNoaXBzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA0LjAwI0RyZWRnaW5nIGNyYWZ0IzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA1LjAwI1RhbmtlcnMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDYuMDAjVHVnIGJvYXRzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA3LjAwI0JhcmdlcyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wOC4wMCNQYXNzZW5nZXIgb3IgYXV0b21vYmlsZSBmZXJyaWVzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA5LjAwI0NydWlzZSBzaGlwcyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4xMC4wMCNTYWx2YWdlIHNoaXBzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjExLjAwI09pbCBvciBnYXMgY3JldyBib2F0IzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjEyLjAwI09pbCBvciBnYXMgd29ya2JvYXQjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMTMuMDAjU2Vpc21pYyB2ZXNzZWwjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTYuMDAuMDAjU2FmZXR5IGFuZCByZXNjdWUgd2F0ZXIgY3JhZnQjMjUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTYuMDEuMDAjTGlmZWJvYXRzIG9yIGxpZmVyYWZ0cyMyNS4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNi4wMi4wMCNGaXJlIGZpZ2h0aW5nIHdhdGVyY3JhZnQjMjUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTYuMDMuMDAjUmVzY3VlIHNoaXBzIG9yIGJvYXRzIzI1LjExLjE2LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjAwLjAwI01pbGl0YXJ5IHdhdGVyY3JhZnQjMjUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDEuMDAjU3VibWFyaW5lcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wMi4wMCNBaXJjcmFmdCBjYXJyaWVycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wMy4wMCNBbW11bml0aW9uIHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjA0LjAwI0FtcGhpYmlvdXMgYXNzYXVsdCBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wNS4wMCNBbXBoaWJpb3VzIHRyYW5zcG9ydCBkb2NrcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wNi4wMCNBbXBoaWJpb3VzIGNvbW1hbmQgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDcuMDAjQ29tbWFuZCBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wOC4wMCNDcnVpc2VycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wOS4wMCNEZXN0cm95ZXJzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjEwLjAwI0RvY2sgbGFuZGluZyBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xMS4wMCNGYXN0IGNvbWJhdCBzdXBwb3J0IHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjEyLjAwI0ZyaWdhdGVzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjEzLjAwI0ZsZWV0IG9pbGVycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xNC4wMCNVdGlsaXR5IGxhbmRpbmcgd2F0ZXJjcmFmdCMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xNS4wMCNNZWNoYW5pemVkIG9yIHV0aWxpdHkgd2F0ZXJjcmFmdCMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xNi4wMCNNaW5lIGh1bnRpbmcgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTcuMDAjTWluZSBjb3VudGVybWVhc3VyZXMgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTguMDAjQ29hc3RhbCBwYXRyb2wgd2F0ZXJjcmFmdCMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xOS4wMCNTdWJtYXJpbmUgdGVuZGVycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4yMC4wMCNUYW5rIGxhbmRpbmcgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMjEuMDAjQWlyIGN1c2hpb25lZCBsYW5kaW5nIHdhdGVyY3JhZnQjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDAuMDAjUmVjcmVhdGlvbmFsIHdhdGVyY3JhZnQjMjUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDEuMDAjUmVjcmVhdGlvbmFsIHNhaWxib2F0cyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wMi4wMCNSZWNyZWF0aW9uYWwgbW90b3Jib2F0cyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wMy4wMCNSZWNyZWF0aW9uYWwgcm93Ym9hdHMjMjUuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDQuMDAjQ2Fub2VzIG9yIGtheWFrcyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wNS4wMCNQZXJzb25hbCBtb3Rvcml6ZWQgd2F0ZXJjcmFmdCMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wNi4wMCNSYWZ0cyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wMC4wMCNNYXJpbmUgY3JhZnQgc3lzdGVtcyBhbmQgc3ViYXNzZW1ibGllcyMyNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wMS4wMCNNYXJpbmUgY3JhZnQgY29tbXVuaWNhdGlvbnMgc3lzdGVtcyMyNS4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wMi4wMCNNYXJpbmUgcHJvcGVsbGVycyMyNS4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wMy4wMCNTYWlscyMyNS4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wNC4wMCNQYWRkbGVzIzI1LjExLjE5LjAwLjAwCi11bnNwc2M3IzI1LjExLjE5LjA1LjAwI01hcmluZSBiYWxsYXN0IHN5c3RlbXMjMjUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMDAuMDAuMDAjUmFpbHdheSBhbmQgdHJhbXdheSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNS4wMC4wMCNMb2NvbW90aXZlcyBhbmQgZWxlY3RyaWMgdHJvbGxleXMjMjUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTUuMDEuMDAjRGllc2VsIGZyZWlnaHQgbG9jb21vdGl2ZXMjMjUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTUuMDIuMDAjRWxlY3RyaWMgZnJlaWdodCBsb2NvbW90aXZlcyMyNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNS4wMy4wMCNEaWVzZWwgcGFzc2VuZ2VyIGxvY29tb3RpdmVzIzI1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE1LjA0LjAwI0VsZWN0cmljIHBhc3NlbmdlciBsb2NvbW90aXZlcyMyNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNi4wMC4wMCNSYWlsd2F5IGFuZCB0cmFtd2F5IGNhcnMjMjUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDEuMDAjRnJlaWdodCByYWlsIGNhcnMjMjUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDIuMDAjVGFua2VyIHJhaWwgY2FycyMyNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNi4wMy4wMCNQYXNzZW5nZXIgcmFpbCBjYXJzIzI1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE2LjA0LjAwI0hvcHBlciByYWlsIGNhcnMjMjUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDUuMDAjU3RyZWV0Y2FycyBvciB0cmFtd2F5IGNhcnMjMjUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTcuMDAuMDAjUmFpbHJvYWQgc3VwcG9ydCBlcXVpcG1lbnQgYW5kIHN5c3RlbXMjMjUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTcuMDEuMDAjUmFpbCBzd2l0Y2hpbmcgc3lzdGVtcyMyNS4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNy4wMi4wMCNSYWlsd2F5IHNsZWVwZXJzIzI1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE3LjAzLjAwI1JhaWx3YXkgdHJhY2tzIzI1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE3LjA0LjAwI1JhaWx3YXkgZnJvZ3Mgb3IgZmlzaCBwbGF0ZXMjMjUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMDAuMDAuMDAjQWlyY3JhZnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDAuMDAjUG93ZXJlZCBmaXhlZCB3aW5nIGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjAxLjAwI0ZpeGVkIHdpbmcgYWdyaWN1bHR1cmFsIGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjAyLjAwI0NhcmdvIHByb3BlbGxlciBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wMy4wMCNTZWFwbGFuZXMjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDQuMDAjQ29tbWVyY2lhbCBwYXNzZW5nZXIgcHJvcGVsbGVyIGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjA1LjAwI0NhcmdvIGpldCBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wNi4wMCNDb21tZXJjaWFsIHBhc3NlbmdlciBqZXQgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDcuMDAjUHJpdmF0ZSBvciBidXNpbmVzcyBwcm9wZWxsZXIgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDguMDAjUHJpdmF0ZSBvciBidXNpbmVzcyBqZXQgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTYuMDAuMDAjQ2l2aWxpYW4gYW5kIGNvbW1lcmNpYWwgcm90YXJ5IHdpbmcgYWlyY3JhZnQjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTYuMDEuMDAjUGFzc2VuZ2VyIHRyYW5zcG9ydCBoZWxpY29wdGVycyMyNS4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNi4wMi4wMCNDYXJnbyB0cmFuc3BvcnQgaGVsaWNvcHRlcnMjMjUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTYuMDMuMDAjQWdyaWN1bHR1cmFsIGhlbGljb3B0ZXJzIzI1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE2LjA0LjAwI01lZGljYWwgb3IgcmVzY3VlIGhlbGljb3B0ZXJzIzI1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjAwLjAwI01pbGl0YXJ5IGZpeGVkIHdpbmcgYWlyY3JhZnQjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDEuMDAjQm9tYmVyIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjAyLjAwI0ZpZ2h0ZXIgYm9tYmVyIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjAzLjAwI0ZpZ2h0ZXIgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDQuMDAjQXR0YWNrIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjA1LjAwI1RhcmdldCBvciByZWNvbm5haXNzYW5jZSBkcm9uZXMjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDYuMDAjTWlsaXRhcnkgc2VhcGxhbmVzIzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjA3LjAwI1JlY29ubmFpc3NhbmNlIG9yIHN1cnZlaWxsYW5jZSBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wOC4wMCNBbnRpIHN1Ym1hcmluZSBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wOS4wMCNNaWxpdGFyeSB0cmFuc3BvcnQgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTguMDAuMDAjU3BlY2lhbHR5IGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE4LjAxLjAwI0FpcnNoaXBzIzI1LjEzLjE4LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE5LjAwLjAwI01pbGl0YXJ5IHJvdGFyeSB3aW5nIGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE5LjAyLjAwI01pbGl0YXJ5IHRyYW5zcG9ydCBoZWxpY29wdGVycyMyNS4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOS4wMy4wMCNBdHRhY2sgaGVsaWNvcHRlcnMjMjUuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDQuMDAjUmVjb25uYWlzc2FuY2UgaGVsaWNvcHRlcnMjMjUuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDUuMDAjQW50aSBzdWJtYXJpbmUgaGVsaWNvcHRlcnMjMjUuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDYuMDAjVGlsdCByb3RvciB3aW5nIGFpcmNyYWZ0IzI1LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjAwLjAwI1JlY3JlYXRpb25hbCBhaXJjcmFmdCMyNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMC4wMS4wMCNIYW5nIGdsaWRlcnMjMjUuMTMuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjAuMDIuMDAjSG90IGFpciBiYWxsb29ucyMyNS4xMy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMC4wMy4wMCNHbGlkZXJzIzI1LjEzLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjA0LjAwI1BhcmFnbGlkZXJzIzI1LjEzLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjA1LjAwI1VsdHJhIGxpZ2h0IGFpcmNyYWZ0IzI1LjEzLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIxLjAwLjAwI0FpcmNyYWZ0IG1hbmFnZW1lbnQgc2VydmljZXMjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjEuMDEuMDAjQWlyY3JhZnQgcGlsb3RzIzI1LjEzLjIxLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIxLjAyLjAwI0FpcmNyYWZ0IG1haW50ZW5hbmNlIG9yIHNlcnZpY2VzIzI1LjEzLjIxLjAwLjAwCi11bnNwc2M3IzI1LjE1LjAwLjAwLjAwI1NwYWNlY3JhZnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTUuMDAuMDAjU3BhY2VzaGlwcyMyNS4xNS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNS4wMS4wMCNNYW5uZWQgc3BhY2VjcmFmdCMyNS4xNS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNS4wMi4wMCNTcGFjZWNyYWZ0IHN0cnVjdHVyZXMjMjUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDAuMDAjU2F0ZWxsaXRlcyMyNS4xNS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wMS4wMCNDb21tdW5pY2F0aW9uIHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDIuMDAjV2VhdGhlciBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjAzLjAwI01pbGl0YXJ5IHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDQuMDAjU2NpZW50aWZpYyBvciByZXNlYXJjaCBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjA1LjAwI05hdmlnYXRpb24gc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wNi4wMCNHZW9zdGF0aW9uYXJ5IHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDcuMDAjTG93IGVhcnRoIG9yYml0IHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDguMDAjU3VuIHN5bmNocm9ub3VzIG9yYml0IHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDkuMDAjR2Vvc3luY2hyb25vdXMgc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNi4wMC4wMC4wMCNOb24gbW90b3JpemVkIGN5Y2xlcyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wMC4wMCNQZWRhbCBwb3dlcmVkIHZlaGljbGVzIzI1LjE2LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjAxLjAwI1RvdXJpbmcgYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDIuMDAjVW5pY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjAzLjAwI1RyaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wNC4wMCNUYW5kZW0gYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDUuMDAjTW91bnRhaW4gYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDYuMDAjUmFjaW5nIGJpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjA3LjAwI0JpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjA4LjAwI1JlY3VtYmVudCBiaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wOS4wMCNDaGlsZHJlbnMgYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMDAuMDAuMDAjVHJhbnNwb3J0YXRpb24gY29tcG9uZW50cyBhbmQgc3lzdGVtcyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wMC4wMCNXaW5kc2hpZWxkIHdpcGVycyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wMS4wMCNBaXJjcmFmdCB3aW5kc2hpZWxkIHdpcGVycyMyNS4xNy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wMi4wMCNBdXRvbW90aXZlIHdpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjAzLjAwI0xvY29tb3RpdmUgd2luZHNoaWVsZCB3aXBlcnMjMjUuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTUuMDQuMDAjTWFyaW5lIHdpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjA1LjAwI1RydWNrIHdpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjA2LjAwI1dpbmRzaGllbGQgd2lwZXIgcHVtcCMyNS4xNy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNi4wMC4wMCNEZWZyb3N0aW5nIGFuZCBkZWZvZ2dpbmcgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNi4wMS4wMCNBaXJjcmFmdCBvbmJvYXJkIGRlZnJvc3Rpbmcgb3IgZGVmb2dnaW5nIHN5c3RlbXMjMjUuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTYuMDIuMDAjQXV0b21vdGl2ZSBkZWZyb3N0aW5nIG9yIGRlZm9nZ2luZyBzeXN0ZW1zIzI1LjE3LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE2LjAzLjAwI1RyYWluIGRlZnJvc3Rpbmcgb3IgZGVmb2dnaW5nIHN5c3RlbXMjMjUuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDAuMDAjQnJha2luZyBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjAxLjAwI0FpcmNyYWZ0IGJyYWtpbmcgc3lzdGVtcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wMi4wMCNBdXRvbW90aXZlIGJyYWtpbmcgc3lzdGVtcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wMy4wMCNUcmFpbiBicmFraW5nIHN5c3RlbXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDQuMDAjRHJhZyBjaHV0ZXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDUuMDAjUm90b3JzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjA2LjAwI0JyYWtlIGNhbGlwZXJzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjA3LjAwI0RydW0gYnJha2UjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDguMDAjRGlzYyBicmFrZSMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wOS4wMCNMaXF1aWQgY29vbGVkIGJyYWtlIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjEwLjAwI01hc3RlciBjeWxpbmRhcnMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTEuMDAjU2xhdmUgY3lsaW5kZXJzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjEyLjAwI0RydW0gYnJha2Ugc2hvZXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTMuMDAjRGlzYyBicmFrZSBwYWRzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjE0LjAwI0JyYWtlIGRydW0jMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTUuMDAjRGlzYyBicmFrZSByb3RvcnMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTYuMDAjQnJha2UgbGluZXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTkuMDAuMDAjV2hlZWxzIGFuZCB3aGVlbCB0cmltcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wMS4wMCNBdXRvbW9iaWxlIHJpbXMgb3Igd2hlZWxzIzI1LjE3LjE5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE5LjAyLjAwI1RyYWluIHdoZWVscyMyNS4xNy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wMy4wMCNUcnVjayByaW1zIG9yIHdoZWVscyMyNS4xNy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wNC4wMCNBaXJjcmFmdCB3aGVlbHMjMjUuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTkuMDUuMDAjVGlyZSB2YWx2ZXMjMjUuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDAuMDAjU3VzcGVuc2lvbiBzeXN0ZW0gY29tcG9uZW50cyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wMS4wMCNBdXRvbW9iaWxlIHN1c3BlbnNpb24gc3lzdGVtcyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wMi4wMCNUcnVjayBzdXNwZW5zaW9uIHN5c3RlbXMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDMuMDAjVHJ1Y2sgc2hvY2sgYWJzb3JiZXJzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA0LjAwI0F1dG9tb2JpbGUgc2hvY2sgYWJzb3JiZXJzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA1LjAwI1RyYWluIHN1c3BlbnNpb24gc3lzdGVtcyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wNi4wMCNTdGVlcmluZyBzeXN0ZW1zIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA3LjAwI1N0cnV0cyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wOC4wMCNCYWxsIGpvaW50cyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wOS4wMCNBdXRvbW90aXZlIGJ1c2hpbmdzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjEwLjAwI1N3YXkgYmFycyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4xMS4wMCNTaG9jayBhYnNvcmJlciMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wMC4wMCNWZWhpY2xlIHNhZmV0eSBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjAxLjAwI0FpcmJhZ3MjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDIuMDAjQWlyY3JhZnQgbGFwYmVsdHMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDMuMDAjQWlyY3JhZnQgaGFybmVzcyByZXN0cmFpbnRzIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjA0LjAwI1NlYXRiZWx0cyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wNS4wMCNDb2xsaXNpb24gYXZvaWRhbmNlIHN5c3RlbXMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDYuMDAjSW1wYWN0IHNlbnNpbmcgc3lzdGVtcyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wNy4wMCNBdXRvbW90aXZlIHNlYXRiZWx0cyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wOC4wMCNIZWFkIHJlc3RyYWludHMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjIuMDAuMDAjVmVoaWNsZSBkb29ycyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wMS4wMCNSZW1vdmFibGUgYXV0b21vdGl2ZSBkb29ycyMyNS4xNy4yMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wMi4wMCNBaXJjcmFmdCBkb29ycyMyNS4xNy4yMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wMy4wMCNBdXRvbW90aXZlIGRvb3JzIzI1LjE3LjIyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIyLjA0LjAwI1JvbGwgdXAgdHJ1Y2sgZG9vcnMjMjUuMTcuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjIuMDUuMDAjVGFpbGdhdGVzIG9yIGxpZnRnYXRlcyMyNS4xNy4yMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMy4wMC4wMCNWZWhpY2xlIHdpbmRvd3MgYW5kIHdpbmRzaGllbGRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIzLjAxLjAwI0F1dG9tb3RpdmUgd2luZHNoaWVsZHMjMjUuMTcuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjMuMDIuMDAjQWlyY3JhZnQgd2luZG93cyMyNS4xNy4yMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMy4wMy4wMCNBdXRvbW90aXZlIHdpbmRvd3MjMjUuMTcuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjMuMDQuMDAjQWlyY3JhZnQgd2luZHNoaWVsZHMjMjUuMTcuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDAuMDAjRnVlbCB0YW5rcyBhbmQgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wMS4wMCNBaXJjcmFmdCBpbnRlcm5hbCBmdWVsIHRhbmtzIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjAyLjAwI0FpcmNyYWZ0IGZ1ZWwgZHJvcCB0YW5rcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wMy4wMCNBaXJjcmFmdCBwcm9wZWxsZW50IHRhbmtzIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjA0LjAwI0h5YnJpZCBmdWVsIHN0b3JhZ2Ugc3lzdGVtcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wNS4wMCNGdWVsIGluamVjdGlvbiBzeXN0ZW1zIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjA2LjAwI0Z1ZWwgdGFua3MjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDcuMDAjQnJlYXRoZXIgZWxlbWVudHMjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDguMDAjRnVlbCBvciBvaWwgY2FwcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wMC4wMCNUaXJlcyBhbmQgdGlyZSB0dWJlcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wMS4wMCNBaXJjcmFmdCB0aXJlcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wMi4wMCNBdXRvbW9iaWxlIHRpcmUgdHViZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDMuMDAjSGVhdnkgdHJ1Y2sgdGlyZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDQuMDAjQXV0b21vYmlsZSBvciBsaWdodCB0cnVjayB0aXJlcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wNS4wMCNCaWN5Y2xlIHR1YmVzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjA2LjAwI0JpY3ljbGUgdGlyZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDcuMDAjVGlyZSBjb3JkIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjA4LjAwI1RpcmUgdHJlYWRzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjAwLjAwI1ZlaGljbGUgdHJpbSBhbmQgZXh0ZXJpb3IgY292ZXJpbmcjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDEuMDAjQXV0b21vdGl2ZSB0cmltIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjAyLjAwI0F1dG9tb3RpdmUgZmVuZGVycyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wMy4wMCNWZWhpY2xlIGJ1bXBlcnMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDQuMDAjVmVoaWNsZSBtaXJyb3JzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjA1LjAwI1ZlaGljbGUgZ3JpbGxlcyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wNi4wMCNWZWhpY2xlIGhvb2RzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjA3LjAwI1ZlaGljbGUgc2lkZSBwYW5lbHMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDguMDAjRmFzY2lhcyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wMC4wMCNFbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wMS4wMCNBaXJjcmFmdCBlbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4yNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wMi4wMCNTcGFjZSBlbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4yNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wMy4wMCNNYXJpbmUgZW52aXJvbm1lbnRhbCBjb250cm9sIHN5c3RlbXMjMjUuMTcuMjcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjcuMDQuMDAjVmVoaWNsZSBjbGltYXRlIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4yNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOC4wMC4wMCNIeWRyYXVsaWMgc3lzdGVtcyBhbmQgY29tcG9uZW50cyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOC4wMS4wMCNBaXJjcmFmdCBoeWRyYXVsaWMgc3lzdGVtcyMyNS4xNy4yOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOC4wMi4wMCNBdXRvbW90aXZlIGh5ZHJhdWxpYyBzeXN0ZW1zIzI1LjE3LjI4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI4LjAzLjAwI01hcmluZSBoeWRyYXVsaWMgc3lzdGVtcyMyNS4xNy4yOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wMC4wMCNFeHRlcmlvciB2ZWhpY2xlIGxpZ2h0aW5nIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjI5LjAxLjAwI0V4dGVyaW9yIGF1dG9tb2JpbGUgbGlnaHRpbmcjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDIuMDAjRXh0ZXJpb3IgYWlyY3JhZnQgbGlnaHRpbmcjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDMuMDAjRXh0ZXJpb3IgcmFpbGNhciBsaWdodGluZyMyNS4xNy4yOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wNC4wMCNFeHRlcmlvciBzaGlwIG9yIGJvYXQgbGlnaHRpbmcjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDUuMDAjSGVhZGxhbXAgd2lwZXIgb3Igd2FzaGVyIHN5c3RlbXMjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDYuMDAjUmVmbGVjdG9ycyMyNS4xNy4yOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMC4wMC4wMCNJbnRlcmlvciB2ZWhpY2xlIGxpZ2h0aW5nIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMwLjAxLjAwI0ludGVyaW9yIGF1dG9tb2JpbGUgbGlnaHRpbmcjMjUuMTcuMzAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDIuMDAjSW50ZXJpb3IgYWlyY3JhZnQgbGlnaHRpbmcjMjUuMTcuMzAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDMuMDAjSW50ZXJpb3IgcmFpbGNhciBsaWdodGluZyMyNS4xNy4zMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMC4wNC4wMCNJbnRlcmlvciBzaGlwIG9yIGJvYXQgbGlnaHRpbmcjMjUuMTcuMzAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDUuMDAjTGlnaHQgcGxhdGUgYXNzZW1ibGllcyMyNS4xNy4zMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wMC4wMCNMb2NhdGlvbiBhbmQgbmF2aWdhdGlvbiBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjAxLjAwI0FpcmNyYWZ0IGRpZ2l0YWwgYWx0aXR1ZGUgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjAyLjAwI0FpcmNyYWZ0IG5hdmlnYXRpb24gYmVhY29ucyMyNS4xNy4zMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wMy4wMCNUZXJyYWluIGZvbGxvd2luZyBzeXN0ZW1zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjA0LjAwI0FpcmNyYWZ0IGd1aWRhbmNlIHN5c3RlbXMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDUuMDAjQWlyY3JhZnQgc3RlZXJpbmcgY29udHJvbHMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDYuMDAjU3BhY2VjcmFmdCBhdHRpdHVkZSBjb250cm9sIHN5c3RlbXMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDcuMDAjVmVoaWN1bGFyIGdsb2JhbCBwb3NpdGlvbmluZyBzeXN0ZW1zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMyLjAwLjAwI0NvbW11bmljYXRpb25zIHJlbGF0ZWQgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wMS4wMCNBaXJjcmFmdCBjb21tdW5pY2F0aW9uIHN5c3RlbXMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDIuMDAjRmxpZ2h0IHJlY29yZGVycyMyNS4xNy4zMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wMy4wMCNBaXJjcmFmdCBjb3VudGVybWVhc3VyZXMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDQuMDAjQWlyY3JhZnQgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHN5c3RlbXMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDUuMDAjQWlyY3JhZnQgdGVsZW1ldHJ5IHN5c3RlbXMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDYuMDAjQWlyY3JhZnQgaW50ZXJmYWNlIGVsZWN0cm9uaWNzIzI1LjE3LjMyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMzLjAwLjAwI01hc3RlciBjb250cm9sIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzMuMDEuMDAjRmxpZ2h0IGNvbXB1dGVyIHN5c3RlbXMjMjUuMTcuMzMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzMuMDIuMDAjU3BhY2VjcmFmdCBjb21tYW5kIG1vZHVsZXMjMjUuMTcuMzMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzMuMDMuMDAjQXV0b21vdGl2ZSBjb21wdXRlciBzeXN0ZW1zIzI1LjE3LjMzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMzLjA0LjAwI0VsZWN0cm9uaWMgaWduaXRpb24gc3lzdGVtcyMyNS4xNy4zMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNC4wMC4wMCNWZWhpY2xlIGVtZXJnZW5jeSBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM0LjAxLjAwI0FpcmNyYWZ0IGZpcmUgY29udHJvbCBvciBleHRpbmd1aXNoaW5nIHN5c3RlbXMjMjUuMTcuMzQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzQuMDIuMDAjQWlyY3JhZnQgZXNjYXBlIG9yIGVqZWN0aW9uIHN5c3RlbXMjMjUuMTcuMzQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzQuMDMuMDAjQWlyY3JhZnQgd2FybmluZyBzeXN0ZW1zIzI1LjE3LjM0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM1LjAwLjAwI1ZlaGljbGUgcG93ZXIgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNS4wMS4wMCNTcGFjZWNyYWZ0IHNvbGFyIGNlbGxzIzI1LjE3LjM1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM1LjAyLjAwI1NwYWNlY3JhZnQgc29sYXIgYXJyYXlzIzI1LjE3LjM1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM2LjAwLjAwI1ZlaGljbGUgaW5zdHJ1bWVudGF0aW9uIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM2LjAxLjAwI0FpcmNyYWZ0IGNvY2twaXQgZGlzcGxheXMjMjUuMTcuMzYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzcuMDAuMDAjRXhoYXVzdCBhbmQgZW1pc3Npb24gY29udHJvbHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzcuMDEuMDAjQ2F0YWx5dGljIGNvbnZlcnRlcnMjMjUuMTcuMzcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzcuMDIuMDAjTXVmZmxlcnMjMjUuMTcuMzcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzcuMDMuMDAjRXhoYXVzdCBtYW5pZm9sZHMjMjUuMTcuMzcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDAuMDAjRHJpdmV0cmFpbiBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjAxLjAwI0RyaXZpbmcgYXhsZXMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDIuMDAjTm9uIGRyaXZpbmcgYXhsZXMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDMuMDAjQXhsZSBob3VzaW5ncyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wNC4wMCNBeGxlIHNwaW5kbGVzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA1LjAwI0RpZmZlcmVudGlhbHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDYuMDAjQ29uc3RhbnQgdmVsb2NpdHkgam9pbnRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA3LjAwI0F4bGUgc2hhZnRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA4LjAwI0F4bGUgcmVwYWlyIGtpdHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDkuMDAjQXhsZSBodWJzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjEwLjAwI1VuaXZlcnNhbCBqb2ludHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTEuMDAjRHJpdmUgc2hhZnRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjEyLjAwI01hbnVhbCB0cmFuc21pc3Npb25zIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjEzLjAwI0F1dG9tYXRpYyB0cmFuc21pc3Npb25zIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjE0LjAwI1Bvd2VyIHRha2Ugb2ZmcyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xNS4wMCNDbHV0Y2ggY2FibGVzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjE2LjAwI0h5ZHJhdWxpYyBjbHV0Y2ggcGFydHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTcuMDAjRHJpdmV0cmFpbiBjaGFpbnMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzkuMDAuMDAjRWxlY3RyaWNhbCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM5LjAxLjAwI0lnbml0aW9uIzI1LjE3LjM5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQwLjAwLjAwI0VuZ2luZSBjb29sYW50IHN5c3RlbSMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MC4wMS4wMCNGYW4jMjUuMTcuNDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDAuMDIuMDAjVmVoaWNsZSByYWRpYXRvcnMjMjUuMTcuNDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDAuMDMuMDAjUmFkaWF0b3IgY2FwcyMyNS4xNy40MC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MC4wNC4wMCNFbmdpbmUgY29vbGFudCMyNS4xNy40MC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wMC4wMCNSb29mIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDEuMDAjRW1lcmdlbmN5IHZlaGljbGUgZXhpdHMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDIuMDAjUGVybWFuZW50IGNvbnZlcnRpYmxlIHJvb2YgdG9wcyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wMy4wMCNSZW1vdmFibGUgaGFyZCByb29mIHRvcHMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDQuMDAjUmVtb3ZhYmxlIHNvZnQgcm9vZiB0b3BzIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjA1LjAwI1Jvb2YgcmFjayBzeXN0ZW1zIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjA2LjAwI1N1bnJvb2ZzIG9yIG1vb25yb29mcyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wNy4wMCNXaW5kIGRlZmxlY3RvcnMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDAuMDAjU3RlZXJpbmcgc3lzdGVtIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjAxLjAwI1N0ZWVyaW5nIHNhY2tzIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjAyLjAwI1N0ZWVyaW5nIHN1c3BlbnNpb24jMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDMuMDAjQmFsbCBqb2ludCMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wNC4wMCNQb3dlciBzdGVlcmluZyBzeXN0ZW0jMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDUuMDAjVGllIFJvZHMjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDYuMDAjRHJhZyBsaW5rIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjA3LjAwI1N0ZWVyaW5nIGxpbmthZ2UjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDguMDAjSHVibG9jayMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wOS4wMCNQaW5pb25zIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjEwLjAwI1Bvd2VyIHN0ZWVyaW5nIHR1bmluZyBjYWJsZSMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40My4wMC4wMCNWZWhpY2xlIGV4aGF1c3Qgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40My4wMS4wMCNDYXRhbHl0aWMgY29udmVydGVycyMyNS4xNy40My4wMC4wMAotdW5zcHNjNyMyNS4xNy40My4wMi4wMCNNdWZmbGVycyBvciByZXNvbmF0b3JzIzI1LjE3LjQzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjAwLjAwI1ZlaGljbGUgaW50ZXJpb3Igc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wMS4wMCNCZXplbHMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDIuMDAjQ29uc29sZXMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDMuMDAjRG9vciBwYW5lbHMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDQuMDAjSGVhZGxpbmVycyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wNS4wMCNJbnN0cnVtZW50IGNsdXN0ZXJzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjA2LjAwI0luc3RydW1lbnQgcGFuZWxzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjA3LjAwI1BlZGFscyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wOC4wMCNQb3dlciBwb3J0cyBvciBsaWdodGVycyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wOS4wMCNTdW4gdmlzb3JzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjAwLjAwI1ZlaGljbGUgc2FmZXR5IGFuZCBzZWN1cml0eSBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjAxLjAwI0FpciBiYWcgcHJvcGVsbGFudCBjYW5pc3RlcnMjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDIuMDAjQWlyIGJhZ3MjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDMuMDAjVmVoaWNsZSBob3JucyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wNC4wMCNSZW1vdGUgbG9ja2luZyBzeXN0ZW0jMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDUuMDAjVmVoaWNsZSBzdGFiaWxpdHkgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjA2LjAwI1ZlaGljbGUgdHJhY3Rpb24gY29udHJvbCBzeXN0ZW1zIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjA3LjAwI1ZlaGljbGUgbmF2aWdhdGlvbiBzeXN0ZW1zIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjA4LjAwI1doZWVsIGNsYW1wcyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40Ni4wMC4wMCNWZWhpY2xlIHNlYXRpbmcgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40Ni4wMS4wMCNTZWF0IGNvdmVycyMyNS4xNy40Ni4wMC4wMAotdW5zcHNjNyMyNS4xNy40Ni4wMi4wMCNTZWF0IGN1c2hpb25zIG9yIGJvbHN0ZXJzIzI1LjE3LjQ2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ2LjAzLjAwI1NlYXQgZnJhbWVzIzI1LjE3LjQ2LjAwLjAwCi11bnNwc2M3IzI1LjE4LjAwLjAwLjAwI1ZlaGljbGUgYm9kaWVzIGFuZCB0cmFpbGVycyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wMC4wMCNBaXJjcmFmdCBmdXNlbGFnZSBhbmQgY29tcG9uZW50cyMyNS4xOC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wMS4wMCNBaXJjcmFmdCBzcG9pbGVycyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wMi4wMCNBaXJjcmFmdCBmaW5zIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjAzLjAwI0FpcmNyYWZ0IGhvcml6b250YWwgc3RhYmlsaXplcnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDQuMDAjQWlyY3JhZnQgY2FuYXJkcyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wNS4wMCNBaXJjcmFmdCBzbGF0cyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wNi4wMCNBaXJjcmFmdCBmbGFwcyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wNy4wMCNBaXJjcmFmdCBydWRkZXJzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjA4LjAwI0FpcmNyYWZ0IGVsZXZhdG9ycyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wOS4wMCNBaXJjcmFmdCBhaWxlcm9ucyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xMC4wMCNBaXJjcmFmdCBwcm9wZWxsZXIjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTEuMDAjQWlyY3JhZnQgd2luZ3MjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTIuMDAjQWlyY3JhZnQgZnVzZWxhZ2UjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTMuMDAjQWlyY3JhZnQgcmFkb21lcyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xNC4wMCNBaXJjcmFmdCByb3RvcnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTUuMDAjQWlyY3JhZnQgbGlmdCBmYW5zIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjE2LjAwI0FpcmNyYWZ0IGNhbm9waWVzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjE3LjAwI0FpcmNyYWZ0IGZ1cm5pc2hpbmdzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE2LjAwLjAwI0F1dG9tb3RpdmUgY2hhc3NpcyMyNS4xOC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNi4wMS4wMCNBdXRvbW9iaWxlIGNoYXNzaXMjMjUuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTYuMDIuMDAjVHJ1Y2sgY2hhc3NpcyMyNS4xOC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNi4wMy4wMCNNb3RvcmN5Y2xlIGZyYW1lcyMyNS4xOC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNi4wNC4wMCNUcnVjayBjaGFzc2lzIzI1LjE4LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjAwLjAwI1Byb2R1Y3QgYW5kIG1hdGVyaWFsIHRyYWlsZXJzIzI1LjE4LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjAxLjAwI0NvbnRhaW5lciB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wMi4wMCNGbGF0YmVkIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjAzLjAwI0xpdmVzdG9jayB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wNC4wMCNOb24gdGVtcGVyYXR1cmUgY29udHJvbGxlZCB0YW5rZXIgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDUuMDAjVGVtcGVyYXR1cmUgY29udHJvbGxlZCB0YW5rZXIgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDYuMDAjVGVtcGVyYXR1cmUgY29udHJvbGxlZCBjb250YWluZXIgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDcuMDAjQXV0b21vYmlsZSBjYXJyaWVyIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjA4LjAwI1RyYWlsZXIgaGl0Y2hlcyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wOS4wMCNTa2lwIGxvYWRlciMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4xMC4wMCNUcmFpbGVyIGVuZCBwbGF0ZXMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMTEuMDAjU25vd21vYmlsZSB0cmFpbGVyIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjEyLjAwI01vdG9yY3ljbGUgdHJhaWxlciMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4xMy4wMCNCb2F0IFRyYWlsZXIjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMDAuMDAuMDAjVHJhbnNwb3J0YXRpb24gc2VydmljZXMgZXF1aXBtZW50IzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjAwLjAwI0FpciB0cmFuc3BvcnRhdGlvbiBzdXBwb3J0IHN5c3RlbXMgYW5kIGVxdWlwbWVudCMyNS4xOS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wMS4wMCNHcm91bmQgc3VwcG9ydCB0cmFpbmluZyBzeXN0ZW1zIzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjAyLjAwI0dyb3VuZCBzdXBwb3J0IHRlc3Qgb3IgbWFpbnRlbmFuY2Ugc3lzdGVtcyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wMy4wMCNJbnRlZ3JhdGVkIG1haW50ZW5hbmNlIGluZm9ybWF0aW9uIHN5c3RlbXMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDQuMDAjQWlyY3JhZnQgZmxpZ2h0IHNpbXVsYXRvcnMgb3IgdHJhaW5lcnMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDUuMDAjQWlyY3JhZnQgY2FyZ28gaGFuZGxpbmcgZXF1aXBtZW50IzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjA2LjAwI0FpcmNyYWZ0IHJlZnVlbGluZyBlcXVpcG1lbnQjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDcuMDAjQWlyY3JhZnQgZGVpY2luZyBlcXVpcG1lbnQjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDguMDAjSmV0d2F5cyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wOS4wMCNBaXJjcmFmdCBwdXNoYmFjayBvciB0b3cgdHJhY3RvcnMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMTAuMDAjR3JvdW5kIHBvd2VyIHVuaXRzIGZvciBhaXJjcmFmdCMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4xMS4wMCNMYXZhdG9yeSBzZXJ2aWNlIGVxdWlwbWVudCBmb3IgYWlyY3JhZnQjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMTIuMDAjQWlyc3RhaXJzIG9yIHN0YWlyIHRydWNrcyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wMC4wMCNTcGFjZSB0cmFuc3BvcnRhdGlvbiBzdXBwb3J0IHN5c3RlbXMgYW5kIGVxdWlwbWVudCMyNS4xOS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wMS4wMCNTcGFjZWNyYWZ0IGZsaWdodCBzaW11bGF0b3JzIzI1LjE5LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE2LjAyLjAwI1BheWxvYWQgZGVsaXZlcnkgc3lzdGVtcyBmb3Igc3BhY2VjcmFmdCMyNS4xOS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wMy4wMCNMaXF1aWQgbGF1bmNoIHZlaGljbGVzIzI1LjE5LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE2LjA0LjAwI1NvbGlkIGxhdW5jaCB2ZWhpY2xlcyMyNS4xOS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wNS4wMCNTcGFjZWNyYWZ0IHNlcnZpY2UgbW9kdWxlcyMyNS4xOS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNy4wMC4wMCNWZWhpY2xlIHNlcnZpY2luZyBlcXVpcG1lbnQjMjUuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTcuMDEuMDAjV2hlZWwgYmFsYW5jaW5nIGVxdWlwbWVudCMyNS4xOS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNy4wMi4wMCNXaGVlbCBhbGlnbm1lbnQgZXF1aXBtZW50IzI1LjE5LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE3LjAzLjAwI1RpcmUgY2hhbmdpbmcgbWFjaGluZXMjMjUuMTkuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTcuMDQuMDAjRW5naW5lIG9yIHZlaGljbGUgc3RhbmRzIzI1LjE5LjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjAwLjAwLjAwI0Flcm9zcGFjZSBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIGFuZCBlcXVpcG1lbnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDAuMDAjQWlyY3JhZnQgZnVzZWxhZ2UgYW5kIGNvbXBvbmVudHMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDEuMDAjQWlyY3JhZnQgc3BvaWxlcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDIuMDAjQWlyY3JhZnQgZmlucyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wMy4wMCNBaXJjcmFmdCBob3Jpem9udGFsIHN0YWJpbGl6ZXJzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjA0LjAwI0FpcmNyYWZ0IGNhbmFyZHMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDUuMDAjQWlyY3JhZnQgc2xhdHMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDYuMDAjQWlyY3JhZnQgZmxhcHMgb3IgZmxhcCBkcml2ZXMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDcuMDAjQWlyY3JhZnQgcnVkZGVycyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wOC4wMCNBaXJjcmFmdCBlbGV2YXRvcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDkuMDAjQWlyY3JhZnQgYWlsZXJvbnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTAuMDAjQWlyY3JhZnQgcHJvcGVsbGVycyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xMS4wMCNBaXJjcmFmdCB3aW5ncyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xMi4wMCNBaXJjcmFmdCBmdXNlbGFnZXMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTMuMDAjQWlyY3JhZnQgcmFkb21lcyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xNC4wMCNBaXJjcmFmdCByb3RvcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTUuMDAjQWlyY3JhZnQgbGlmdCBmYW5zIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjE2LjAwI0FpcmNyYWZ0IGNhbm9waWVzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjE3LjAwI0FpcmNyYWZ0IGZ1cm5pc2hpbmdzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjAwLjAwI0Flcm9zcGFjZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGlvbiBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjAxLjAwI0FpcmNyYWZ0IGRpZ2l0YWwgYWx0aXR1ZGUgY29udHJvbCBzeXN0ZW1zIzI1LjIwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjAyLjAwI0FpcmNyYWZ0IG5hdmlnYXRpb24gYmVhY29ucyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wMy4wMCNBaXIgdG8gZ3JvdW5kIHRlcnJhaW4gZm9sbG93aW5nIHN5c3RlbXMjMjUuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTYuMDQuMDAjQWlyY3JhZnQgZ3VpZGFuY2Ugc3lzdGVtcyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wNS4wMCNBaXJjcmFmdCBzdGVlcmluZyBjb250cm9scyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wNi4wMCNTcGFjZWNyYWZ0IGFsdGl0dWRlIGNvbnRyb2wgc3lzdGVtcyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wMC4wMCNGbGlnaHQgY29tbXVuaWNhdGlvbnMgcmVsYXRlZCBzeXN0ZW1zIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjAxLjAwI0FpcmNyYWZ0IGNvbW11bmljYXRpb24gc3lzdGVtcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wMi4wMCNGbGlnaHQgZGF0YSByZWNvcmRlcnMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDMuMDAjQWlyY3JhZnQgY291bnRlcm1lYXN1cmVzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA0LjAwI0VuY3J5cHRpb24gb3IgZGVjcnlwdGlvbiBzeXN0ZW1zIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA1LjAwI0FpcmNyYWZ0IHRlbGVtZXRyeSBzeXN0ZW1zIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA2LjAwI0FpcmNyYWZ0IGludGVyZmFjZSBlbGVjdHJvbmljcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wNy4wMCNBaXJjcmFmdCBneXJvcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wOC4wMCNBaXJjcmFmdCBjYW1lcmFzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA5LjAwI0FpcmNyYWZ0IHByb2JlcyBvciBzZW5zb3JzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjEwLjAwI0FpcmNyYWZ0IHdhdmVndWlkZXMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTguMDAuMDAjQWlyY3JhZnQgbWFzdGVyIGNvbnRyb2wgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOC4wMS4wMCNGbGlnaHQgY29tcHV0ZXIgc3lzdGVtcyMyNS4yMC4xOC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOC4wMi4wMCNTcGFjZWNyYWZ0IGNvbW1hbmQgbW9kdWxlcyMyNS4yMC4xOC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOS4wMC4wMCNBaXJjcmFmdCBlbWVyZ2VuY3kgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOS4wMS4wMCNBaXJjcmFmdCBmaXJlIGNvbnRyb2wgb3IgZXh0aW5ndWlzaGluZyBzeXN0ZW1zIzI1LjIwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE5LjAyLjAwI0FpcmNyYWZ0IGVzY2FwZSBvciBlamVjdGlvbiBzeXN0ZW1zIzI1LjIwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE5LjAzLjAwI0FpcmNyYWZ0IHdhcm5pbmcgc3lzdGVtcyMyNS4yMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOS4wNC4wMCNQYXJhY2h1dGVzIzI1LjIwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjIwLjIwLjAwLjAwI0FpcmNyYWZ0IHBvd2VyIHN5c3RlbXMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjAuMDEuMDAjU3BhY2VjcmFmdCBzb2xhciBjZWxscyMyNS4yMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMC4wMi4wMCNTcGFjZWNyYWZ0IHNvbGFyIGFycmF5cyMyNS4yMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMC4wMy4wMCNBaXJjcmFmdCBwb3dlciBzdXBwbHkgdW5pdHMjMjUuMjAuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjAuMDQuMDAjQXV4aWxsaWFyeSBwb3dlciB1bml0IHN5c3RlbXMgKEFQVXMpIzI1LjIwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIxLjAwLjAwI0ZsaWdodCBpbnN0cnVtZW50YXRpb24jMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDEuMDAjQWVyb3NwYWNlIGNvY2twaXQgaW5kaWNhdG9ycyMyNS4yMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMS4wMi4wMCNBZXJvc3BhY2UgY29ja3BpdCBnYXVnZXMjMjUuMjAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDMuMDAjQWVyb3NwYWNlIGNvY2twaXQgZGlzcGxheSBwYW5lbHMjMjUuMjAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDQuMDAjQWVyb3NwYWNlIGNvY2twaXQgc3dpdGNoIHBhbmVscyMyNS4yMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMS4wNS4wMCNBZXJvc3BhY2UgaGVhZCB1cCBkaXNwbGF5IChIVURzKSMyNS4yMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wMC4wMCNBaXJjcmFmdCBsYW5kaW5nIGFuZCBicmFraW5nIHN5c3RlbXMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjIuMDEuMDAjQWlyY3JhZnQgYnJha2luZyBzeXN0ZW1zIzI1LjIwLjIyLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjAyLjAwI0FpcmNyYWZ0IGRyYWcgY2h1dGVzIzI1LjIwLjIyLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjAzLjAwI0FpcmNyYWZ0IHdoZWVscyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wNC4wMCNMYW5kaW5nIGdlYXIgYXNzZW1ibGllcyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wNS4wMCNBaXJjcmFmdCB0aXJlcyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wNi4wMCNBaWNyYWZ0IGFudGkgc2tpZCBjb250cm9scyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMy4wMC4wMCNBaXJjcmFmdCBwYXNzZW5nZXIgcmVzdHJhaW50cyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMy4wMS4wMCNBaXJjcmFmdCBsYXBiZWx0cyMyNS4yMC4yMy4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMy4wMi4wMCNBaXJjcmFmdCBoYXJuZXNzIHJlc3RyYWludHMjMjUuMjAuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjQuMDAuMDAjQWlyY3JhZnQgZnVlbCB0YW5rcyBhbmQgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wMS4wMCNBaXJjcmFmdCBpbnRlcm5hbCBmdWVsIHRhbmtzIzI1LjIwLjI0LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjAyLjAwI0FpcmNyYWZ0IGZ1ZWwgZHJvcCB0YW5rcyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wMy4wMCNBaXJjcmFmdCBwcm9wZWxsYW50IHRhbmtzIzI1LjIwLjI0LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjA0LjAwI0FpcmNyYWZ0IGh5YnJpZCBmdWVsIHN0b3JhZ2Ugc3lzdGVtcyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wNS4wMCNBaXJjcmFmdCBmdWVsIG1hbmFnZW1lbnQgc3lzdGVtcyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wNi4wMCNQb3N0Ym9vc3RlcnMjMjUuMjAuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDAuMDAjQWlyY3JhZnQgZXF1aXBtZW50IzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjAxLjAwI0FpcmNyYWZ0IGh5ZHJhdWxpYyBzeXN0ZW1zIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjAyLjAwI0V4dGVyaW9yIGFpcmNyYWZ0IGxpZ2h0aW5nIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjAzLjAwI0ludGVyaW9yIGFpcmNyYWZ0IGxpZ2h0aW5nIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA0LjAwI0FpcmNyYWZ0IHdpbmRzaGllbGQgd2lwZXJzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA1LjAwI0FpcmNyYWZ0IG9uYm9hcmQgZGVmcm9zdGluZyBvciBkZWZvZ2dpbmcgc3lzdGVtcyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wNi4wMCNBaXJjcmFmdCBkb29ycyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wNy4wMCNBaXJjcmFmdCB3aW5kb3dzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA4LjAwI0FpcmNyYWZ0IHdpbmRzaGllbGRzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA5LjAwI0FpcmNyYWZ0IHNob2NrIG1vdW50cyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4xMC4wMCNBaXJjcmFmdCBzbGlwIHJpbmcgYXNzZW1ibGllcyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wMC4wMCNBaXJjcmFmdCBlbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyBhbmQgY29tcG9uZW50cyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wMS4wMCNBaXJjcmFmdCBlbnZpcm9ubWVudCBjb250cm9sbGVycyMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wMi4wMCNBaXJjcmFmdCBlbnZpcm9ubWVudCByZWd1bGF0b3JzIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjAzLjAwI0FpcmNyYWZ0IGNvb2xpbmcgdHVyYmluZXMjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDQuMDAjQWlyY3JhZnQgY29vbGluZyBmYW5zIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjA1LjAwI0FpcmNyYWZ0IGhlYXQgZXhjaGFuZ2VycyMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wNi4wMCNBaXJjcmFmdCB3YXRlciBzZXBhcmF0b3JzIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjA3LjAwI0FpcmNyYWZ0IG94eWdlbiBlcXVpcG1lbnQjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjcuMDAuMDAjQWlyY3JhZnQgYWNjdW11bGF0b3JzIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjI3LjAxLjAwI0h5ZHJhdWxpYyBhaXJjcmFmdCBhY2N1bXVsYXRvcnMjMjUuMjAuMjcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjcuMDIuMDAjUG5ldW1hdGljIGFpcmNyYWZ0IGFjY3VtdWxhdG9ycyMyNS4yMC4yNy4wMC4wMAotdW5zcHNjNyMyNi4wMC4wMC4wMC4wMCNQb3dlciBHZW5lcmF0aW9uIGFuZCBEaXN0cmlidXRpb24gTWFjaGluZXJ5IGFuZCBBY2Nlc3NvcmllcyMyNi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMC4wMC4wMC4wMCNQb3dlciBzb3VyY2VzIzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjAwLjAwI0VuZ2luZXMjMjYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDEuMDAjSHlkcmF1bGljIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDIuMDAjUG5ldW1hdGljIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDMuMDAjR2FzIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDQuMDAjRGllc2VsIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDUuMDAjU3RlYW0gZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wNi4wMCNUdXJiaW5lIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDcuMDAjVHVyYm9mYW4gZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wOC4wMCNUaGVybWFsIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDkuMDAjSHlkcm9lbGVjdHJpYyBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjEwLjAwI1JvdGFyeSBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjExLjAwI0h5ZHJhdWxpYyB0dXJiaW5lIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMTIuMDAjVHVyYm9wcm9wIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMTMuMDAjRW5naW5lIFJlcGFpciBLaXQjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDAuMDAjTW90b3JzIzI2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjAxLjAwI0luZHVjdGlvbiBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDIuMDAjQWx0ZXJuYXRpbmcgY3VycmVudCAoQUMpIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wMy4wMCNEaXJlY3QgY3VycmVudCAoREMpIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wNC4wMCNBbHRlcm5hdGluZyBjdXJyZW50IG9yIGRpcmVjdCBjdXJyZW50IChBQy9EQykgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjA1LjAwI0R5bmFtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDYuMDAjU2Vydm9tb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDcuMDAjVG9ycXVlIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wOC4wMCNMaXF1aWQgcm9ja2V0IG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wOS4wMCNTeW5jaHJvbm91cyBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMTAuMDAjU29saWQgcm9ja2V0IG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xMS4wMCNTaW5nbGUgcGhhc2UgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjEyLjAwI011bHRpIHBoYXNlIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xMy4wMCNIeWRyYXVsaWMgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjE0LjAwI1N0ZXAgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjE1LjAwI0FsdGVybmF0b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjE2LjAwI0NhcmJvbiBCcnVzaGVzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjAwLjAwI0VuZ2luZSBjb21wb25lbnRzIzI2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjAxLjAwI0FpcmNyYWZ0IGJ1cm5lcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDIuMDAjQWlyY3JhZnQgZW5naW5lIGNvbXByZXNzb3JzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjAzLjAwI0FpcmNyYWZ0IGVuZ2luZSBkaWZmdXNlcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDQuMDAjRW5naW5lIG1vdW50cyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wNS4wMCNBaXJjcmFmdCBkcml2ZSBzaGFmdHMgcG93ZXIgdGFrZSBvZmZzIG9yIHNjcmV3IGphY2tzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjA2LjAwI0FpcmNyYWZ0IHRyYW5zbWlzc2lvbiB1bml0cyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wNy4wMCNCYWxhbmNlIHNoYWZ0cyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wOC4wMCNDYW0gZm9sbG93ZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjA5LjAwI0NhbXNoYWZ0IGxpZnRlcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTAuMDAjQ2FyYnVyZXRvcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTEuMDAjQ29ubmVjdGluZyByb2RzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjEyLjAwI0NyYW5rY2FzZSB2ZW50aWxsYXRpb24gdmFsdmVzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjEzLjAwI0N5bGluZGVyIGhlYWRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE0LjAwI0VuZ2luZSBjb29sYW50IHJhZGlhdG9ycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xNS4wMCNFbmdpbmUgY292ZXJzIG9yIHBhbnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTYuMDAjRW5naW5lIGZvcmdpbmdzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE3LjAwI0VuZ2luZSBoZWF0ZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE4LjAwI0VuZ2luZSBpZ25pdGlvbiBzeXN0ZW1zIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE5LjAwI1N1cGVyY2hhcmdlciMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yMC4wMCNUdXJib2NoYXJnZXIjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjEuMDAjRW5naW5lIHB1bGxleXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjIuMDAjRnVlbCBpbmplY3Rpb24gc3lzdGVtcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yMy4wMCNGdWVsIHZhcG9yIGNhbmlzdGVyIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI0LjAwI0dsb3cgcGx1Z3MjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjUuMDAjT2lsIGRpcCBzdGlja3MgYW5kIHR1YmVzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI2LjAwI09pbCBzdHJhaW5lcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjcuMDAjUGlzdG9uIHJpbmdzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI4LjAwI1B1c2ggcm9kIHR1YmVzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI5LjAwI1JvY2tlciBhcm0gYmFsbHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzAuMDAjUm9ja2VyIGFybSBzaGFmdHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzEuMDAjUm9ja2VyIGFybXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzIuMDAjU3BhcmsgcGx1Z3MjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzMuMDAjQ2FyYnVyZXRvciBqZXQjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzQuMDAjQ2FyYnVyZXRvciBkaWFwaHJhZ21zIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjM1LjAwI09pbCBwYW4jMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzYuMDAjUGlzdG9ucyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zNy4wMCNUaW1pbmcgY2hhaW4jMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzguMDAjSW50YWtlIG1hbmlmb2xkcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zOS4wMCNFeGhhdXN0IG1hbmlmb2xkcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40MC4wMCNGdWVsIGluamVjdG9ycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40MS4wMCNFbmdpbmUgc2xlZXZlcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40Mi4wMCNGdWVsIGluamVjdGlvbiBtYW5pZm9sZHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDMuMDAjRW5naW5lIHZhbHZlcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40NC4wMCNUdXJib2NoYXJnZXIjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDUuMDAjY2Ftc2hhZnQjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDYuMDAjQ3lsaW5kZXIgaGVhZCMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40Ny4wMCNQdXNoIHJvZHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDguMDAjRW5naW5lIGZseXdoZWVsIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQ5LjAwI0NyYW5rc2hhZnQjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNTAuMDAjVGhyb3R0bGUjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNTEuMDAjRWxlY3Ryb25pYyBlbmdpbmUgY29udHJvbHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNTIuMDAjVmlicmF0aW9uIGRhbXBlcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDAuMDAjTW90b3Igb3IgZ2VuZXJhdG9yIGNvbXBvbmVudHMjMjYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDEuMDAjTW90b3IgYnJ1c2hlcyMyNi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOC4wMi4wMCNBcm1hdHVyZXMjMjYuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDMuMDAjUm90b3JzIG9yIHN0YXRvcnMjMjYuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDQuMDAjTW90b3IgbW91bnRzIG9yIGJhc2VzIzI2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjAwLjAwI0ludGVybmFsIGNvbWJ1c3Rpb24gZW5naW5lIGNvbXBvbmVudHMjMjYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTkuMDEuMDAjQ3Jhbmsgc2hhZnRzIzI2LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjAyLjAwI1NwYXJrIHBsdWdzIzI2LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjAzLjAwI0NhbXNoYWZ0IzI2LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjA0LjAwI0Z1ZWwgaW5qZWN0aW9uIG5venpsZSMyNi4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOS4wNS4wMCNDeWxpbmRlciBibG9jayMyNi4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4wMC4wMC4wMCNCYXR0ZXJpZXMgYW5kIGdlbmVyYXRvcnMgYW5kIGtpbmV0aWMgcG93ZXIgdHJhbnNtaXNzaW9uIzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjAwLjAwI0tpbmV0aWMgcG93ZXIgdHJhbnNtaXNzaW9uIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjAxLjAwI0NvbW11dGF0b3JzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjAzLjAwI0FkanVzdGFibGUgc3BlZWQgZHJpdmVzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA0LjAwI0JlbHQgZHJpdmVzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA1LjAwI0NoYWluIGRyaXZlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wNi4wMCNMaW5lYXIgbW90aW9uIGRldmljZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDcuMDAjQ2x1dGNoZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDguMDAjUG93ZXIgdGFrZSBvZmZzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA5LjAwI1RyYW5zbWlzc2lvbiB5b2tlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xMC4wMCNUcmFuc21pc3Npb24gc2hhZnRzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjExLjAwI1VuaXZlcnNhbCBqb2ludHMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTIuMDAjQXhsZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTMuMDAjUG93ZXIgdHJhbnNtaXNzaW9uIGNoYWlucyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xNC4wMCNLbnVja2xlIGpvaW50cyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xNS4wMCNTZXJ2byBjb250cm9sbGVyIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjE2LjAwI1N0ZXAgZHJpdmUgb3Igc3RlcHBlciBkcml2ZSBvciBzdGVwIGluZGV4ZXIjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTcuMDAjUGxhbmV0IGNhcnJpZXIjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTguMDAjVGVuc2lvbiBzdHJ1dCMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xOS4wMCNUb3JxdWUgY29udmVydGVycyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4yMC4wMCNUcnVubmlvbnMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMjEuMDAjUHVzaGVyIGhlYWQjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMjIuMDAjUHVzaGVyIGFzc2VtYmx5IzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjIzLjAwI0JhY2tzdG9wcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wMC4wMCNQb3dlciBnZW5lcmF0b3JzIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjAxLjAwI0RpZXNlbCBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjAyLjAwI0h5ZHJvIGVsZWN0cmljIGdlbmVyYXRvcnMjMjYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDMuMDAjV2luZCBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjA0LjAwI0dhcyBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjA1LjAwI1RoZXJtYWwgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wNi4wMCNIeWRyYXVsaWMgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wNy4wMCNTb2xhciBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjAwLjAwI0JhdHRlcmllcyBhbmQgYWNjZXNzb3JpZXMjMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDEuMDAjUmVjaGFyZ2VhYmxlIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wMi4wMCNBbGthbGluZSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDMuMDAjVmVoaWNsZSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDQuMDAjQmF0dGVyeSBjaGFyZ2VycyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wNS4wMCNEcnkgY2VsbCBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDYuMDAjRWxlY3Ryb25pYyBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDcuMDAjTGVhZCBhY2lkIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wOC4wMCNOaWNrZWwgaXJvbiBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDkuMDAjTmlja2VsIGNhZG1pdW0gYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjEwLjAwI1Byb2R1Y3Qgc3BlY2lmaWMgYmF0dGVyeSBwYWNrcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xMS4wMCNMaXRoaXVtIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xMi4wMCNOaWNrZWwgaHlkcm9nZW4gYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjEzLjAwI1RoZXJtYWwgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE0LjAwI1p5bmMgYWlyIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE1LjAwI1ppbmMgY29hbCBiYXR0ZXJ5IzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE2LjAwI01lcmN1cnkgb3hpZGUgYmF0dGVyeSMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xNy4wMCNNYW5nYW5lc2UgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE4LjAwI1NpbHZlciBveGlkZSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTkuMDAjQmF0dGVyeSB0ZXN0ZXJzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjAwLjAwI0RyaXZlIGNvbXBvbmVudHMjMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDEuMDAjViBiZWx0cyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wMi4wMCNHZWFyZWQgdGltaW5nIGJlbHRzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjAzLjAwI1JvdW5kIGJlbHRzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA0LjAwI0ZsYXQgYmVsdHMjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDUuMDAjQmVsdCB0ZW5zaW9uZXJzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA2LjAwI1RyYW5zbWlzc2lvbiBwdWxsZXlzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA3LjAwI1RpbWluZyBwdWxsZXkjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDguMDAjVHJhbnRvcnF1ZSMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wOS4wMCNCZWx0IGd1YXJkcyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wMC4wMCNDbHV0Y2hlcyMyNi4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wMS4wMCNQbGF0ZSBjbHV0Y2hlcyMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wMi4wMCNEaWFwaHJhZ20gY2x1dGNoIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjAzLjAwI0NlbnRyaWZ1Z2FsIGNsdXRjaCMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wNC4wMCNTZW1pIGNlbnRyaWZ1Z2FsIGNsdXRjaCMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wNS4wMCNGcmVlIHdoZWVsIGNsdXRjaCMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wNi4wMCNUb3JxdWUgY29udmVydGVyIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjA3LjAwI0ZsdWlkIGNvdXBsaW5nIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjA4LjAwI0NhbSBjbHV0Y2hlcyMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMC4wMC4wMCNDbHV0Y2ggcGFydHMgYW5kIGFjY2Vzc29yaWVzIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIwLjAxLjAwI1ByZXNzdXJlIHBsYXRlIzI2LjExLjIwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIwLjAyLjAwI0RyaXZlbiBwbGF0ZSMyNi4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMC4wMy4wMCNDbHV0Y2ggcGxhdGVzIzI2LjExLjIwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIxLjAwLjAwI0luZHVzdHJpYWwgYnJha2luZyBzeXN0ZW1zIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIxLjAxLjAwI0FpciBvciBwbmV1bWF0aWMgYnJha2luZyBzeXN0ZW1zIzI2LjExLjIxLjAwLjAwCi11bnNwc2M3IzI2LjExLjIxLjAyLjAwI0h5ZHJhdWxpYyBicmFraW5nIHN5c3RlbXMjMjYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjEuMDMuMDAjTWVjaGFuaWNhbCBicmFraW5nIHN5c3RlbXMjMjYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjEuMDQuMDAjQnJha2luZyBjbHV0Y2ggYXNzZW1ibGllcyMyNi4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNi4xMi4wMC4wMC4wMCNFbGVjdHJpY2FsIHdpcmUgYW5kIGNhYmxlIGFuZCBoYXJuZXNzIzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjAwLjAwI0VsZWN0cmljYWwgd2lyZSMyNi4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4wMS4wMCNIZWF0aW5nIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMDUuMDAjRml4dHVyZSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjA3LjAwI1JhZGlvIG9yIHRlbGV2aXNpb24gd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4wOC4wMCNBdXRvbW90aXZlIG9yIGFpcmNyYWZ0IHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMDkuMDAjTWFnbmV0IHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTAuMDAjVHJvbGxleSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjE0LjAwI1VuZGVyZ3JvdW5kIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTUuMDAjU2lsaWNvbiBhc2Jlc3RvcyAoU0EpIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTcuMDAjQ29wcGVyIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTkuMDAjQ29wcGVyIGNsYWQgYWx1bWludW0gd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4yMC4wMCNDb3BwZXIgc3RlZWwgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4yMS4wMCNCcm9uemUgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4yMi4wMCNCYXJlIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMjMuMDAjQ292ZXJlZCBidXQgbm90IGluc3VsYXRlZCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjI0LjAwI0luc3VsYXRlZCBvciBjb3ZlcmVkIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzIuMDAjSW50ZXIgY29ubmVjdCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjMzLjAwI0thcHRhbiB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjM0LjAwI1BvbHltaWRlIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzUuMDAjRXh0ZW5zaW9uIGNvcmQjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzYuMDAjRXh0ZW5zaW9uIGNvcmQjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzcuMDAjV2lyZSBhc3NlbWJseSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4zOC4wMCNXaXJlIGFzc2VtYmx5IzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjAwLjAwI0VsZWN0cmljYWwgY2FibGUjMjYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDEuMDAjSGVhdGluZyBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wMi4wMCNTdWJtYXJpbmUgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDMuMDAjQ29udHJvbCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wNC4wMCNTaWduYWwgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDUuMDAjQXV0b21vdGl2ZSBvciBhaXJjcmFmdCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wNi4wMCNDb2F4aWFsIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjA3LjAwI0ZpYmVyIG9wdGljIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjA4LjAwI0FlcmlhbCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wOS4wMCNOZXR3b3JrIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjEwLjAwI0Jyb256ZSBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xMS4wMCNCYXJlIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjEyLjAwI0NvdmVyZWQgYnV0IG5vdCBpbnN1bGF0ZWQgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTMuMDAjSW5zdWxhdGVkIG9yIGNvdmVyZWQgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTQuMDAjQnVpbGRpbmcgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTUuMDAjUG93ZXIgY2FibGUgZm9yIGRpcmVjdCBidXJpYWwjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTYuMDAjVGVsZWNvbW11bmljYXRpb25zIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjE3LjAwI1RyaWF4aWFsIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjE4LjAwI0Nyb3NzbGlua2VkIHBvbHlrYWVuZSBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xOS4wMCNGbG9yb3BvbHltZXIgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjAuMDAjSW50ZXIgY29ubmVjdCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4yMS4wMCNLYXB0YW4gY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjIuMDAjUG9seW1pZGUgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjMuMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjQuMDAjUmliYm9uIG9yIGZsYXQgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjUuMDAjQ29wcGVyIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjAwLjAwI1dpcmluZyBoYXJuZXNzIzI2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjAxLjAwI1BhbmVsIHdpcmluZyBoYXJuZXNzIzI2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjAyLjAwI1RydW5rIHdpcmluZyBoYXJuZXNzIzI2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjAzLjAwI0NvbW11bmljYXRpb24gd2lyaW5nIGhhcm5lc3MjMjYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTcuMDQuMDAjU3BlY2lhbHR5IHdpcmluZyBoYXJuZXNzIzI2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEzLjAwLjAwLjAwI1Bvd2VyIGdlbmVyYXRpb24jMjYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDAuMDAjUG93ZXIgcGxhbnRzIzI2LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjAxLjAwI0RpZXNlbCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDIuMDAjR2VvdGhlcm1hbCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDMuMDAjSHlkcm8gcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjA0LjAwI0dhcyBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDUuMDAjTWFyaW5lIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wNi4wMCNQZXRyb2wgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjA3LjAwI1NvbGFyIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wOC4wMCNTdGVhbSBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDkuMDAjV2luZCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMTAuMDAjVGhlcm1hbCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMDAuMDAuMDAjQXRvbWljIGFuZCBudWNsZWFyIGVuZXJneSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyNi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNi4wMC4wMCNTdWJjcml0aWNhbCBhc3NlbWJseSBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTYuMDEuMDAjU3ViY3JpdGljYWwgYXNzZW1ibHkgZnVlbCMyNi4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNi4wMi4wMCNTdWJjcml0aWNhbCBhc3NlbWJseSBjb21wb25lbnRzIzI2LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE2LjAzLjAwI1N1YmNyaXRpY2FsIGFzc2VtYmx5IG1vZGVyYXRvciMyNi4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNy4wMC4wMCNEb3NpbWV0cnkgZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjE3LjAxLjAwI0lvbml6YXRpb24gY2hhbWJlciBkb3NpbWV0ZXJzIzI2LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE3LjAyLjAwI0Rvc2ltZXRlcnMjMjYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTcuMDMuMDAjU2Vjb25kYXJ5IHN0YW5kYXJkIGRvc2ltZXRyeSBzeXN0ZW1zIzI2LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE3LjA0LjAwI1BoYW50b20gZG9zaW1ldGVycyMyNi4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wMC4wMCNIb3QgY2VsbCBkZXZpY2VzIzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjAxLjAwI0hvdCBjZWxsIHJlbW90ZSBoYW5kbGluZyBlcXVpcG1lbnQjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDIuMDAjSG90IGNlbGwgcmVtb3RlIHZpZXdpbmcgZGV2aWNlIzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjAzLjAwI0hvdCBjZWxsIHNoaWVsZGluZyBkb29ycyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wNC4wMCNIb3QgY2VsbCBzYW1wbGVycyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wNS4wMCNIb3QgY2VsbCBzYW1wbGUgcHJvY2Vzc2luZyBlcXVpcG1lbnQjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDYuMDAjSG90IGNlbGwgc3BlY2lhbCB0b29scyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wNy4wMCNIb3QgY2VsbCBsZWFkIGdsYXNzIHdpbmRvd3MjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDguMDAjSG90IGNlbGwgZGVjb250YW1pbmF0aW9uIHN5c3RlbXMjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDkuMDAjSG90IGNlbGwgcGVuZXRyYXRpb24gZGV2aWNlcyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wMC4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBpbnN0cnVtZW50cyMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wMS4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBhaXJib3JuZSBkdXN0IG1lYXN1cmluZyBzeXN0ZW1zIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjAyLjAwI0JldGEgZ2F1Z2UgbWVhc3VyaW5nIHN5c3RlbXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDQuMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgbGlxdWlkIGxldmVsIGdhdWdlcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wNS4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBtYXNzIHBlciB1bml0IG9yZSBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wNi4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBtb2lzdHVyZSBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wNy4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyB0aGlja25lc3MgbWVhc3VyaW5nIHN5c3RlbXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDguMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgZmxvdyBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wOS4wMCNJc290b3BlIHNlcGFyYXRvcnMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMTAuMDAjSXNvdG9wZSBwcm9kdWN0aW9uIGZhY2lsaXRpZXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMTEuMDAjSXNvdG9wZSBjYWxpYnJhdG9yIGFjdGl2aXR5IG1ldGVycyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wMC4wMCNJcnJhZGlhdGlvbiBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDEuMDAjSXJyYWRpYXRpb24gZ2FtbWEgc291cmNlcyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wMi4wMCNNYWduZXQgc3lzdGVtcyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wMy4wMCNOSU0gbnVjbGVhciBlbGVjdHJvbmljIHVuaXRzIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjA0LjAwI05ldXRyb24gaXJyYWRpYXRvcnMjMjYuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDUuMDAjSXJyYWRpYXRpb24gdGVzdGluZyBjYXBzdWxlcyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wNi4wMCNJcnJhZGlhdGlvbiBzYW1wbGUgdHJhbnNmZXIgc3lzdGVtIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjA3LjAwI05ldXRyb24gZ2VuZXJhdG9ycyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMS4wMC4wMCNOdWNsZWFyIHJlYWN0b3IgZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIxLjAxLjAwI051Y2xlYXIgcmVhY3RvciBzcGVjaW1lbiBpcnJhZGlhdGlvbiBjb250YWluZXJzIzI2LjE0LjIxLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIxLjA2LjAwI051Y2xlYXIgcmVhY3RvciBjb250cm9sIHJvZCBzeXN0ZW1zIzI2LjE0LjIxLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIxLjA4LjAwI051Y2xlYXIgcmVhY3RvciBpbiBjb3JlIG5ldXRyb24gZmx1eCBpbnN0cnVtZW50YXRpb24jMjYuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjEuMTcuMDAjTnVjbGVhciByZWFjdG9yIGVhcnRocXVha2UgaW5zdHJ1bWVudGF0aW9uIzI2LjE0LjIxLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIyLjAwLjAwI051Y2xlYXIgZnVlbCBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjIuMDEuMDAjTnVjbGVhciBmdWVsIGNsYWRkaW5nIHR1YmVzIzI2LjE0LjIyLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIyLjAyLjAwI051Y2xlYXIgZnVlbCBlbGVtZW50IGZhaWx1cmUgZGV0ZWN0aW9uIHN5c3RlbXMjMjYuMTQuMjIuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDAuMDAjUmFkaWF0aW9uIHNoaWVsZGluZyBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDIuMDAjTGVhZCBzY3JlZW5zIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjAzLjAwI0ZpbG0gYmFkZ2VzIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjA0LjAwI1JhZGlvZ3JhcGhpYyBlcXVpcG1lbnQjMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDYuMDAjU2hpZWxkZWQgY29udGFpbmVycyBmb3IgcmFkaWF0aW9uIHByb3RlY3Rpb24jMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDcuMDAjTGVhZCBjaGFtYmVycyBvciBzYWZlcyBmb3IgcmFkaWF0aW9uIHByb3RlY3Rpb24jMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDguMDAjTGVhZCBicmlja3MgZm9yIHJhZGlhdGlvbiBwcm90ZWN0aW9uIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjEwLjAwI0dsb3ZlIGJveGVzIGZvciByYWRpYXRpb24gcHJvdGVjdGlvbiMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4xMS4wMCNSYWRpYXRpb24gc2hpZWxkaW5nIHdpbmRvd3MjMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMTIuMDAjTGVhZCBmb3IgcmFkaWF0aW9uIHNoaWVsZGluZyMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wMC4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDEuMDAjUmFkaW9hY3RpdmUgd2FzdGUgdHJlYXRtZW50IGNvbXBhY3RvcnMgb3IgaW5jaW5lcmF0b3JzIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjAyLjAwI051Y2xlYXIgcmFkaWF0aW9uIGFic29yYmVycyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wMy4wMCNBdG9taWMgZW5lcmd5IGV2YXBvcmF0b3JzIG9yIGNvbmNlbnRyYXRvcnMgb3IgZHJ5ZXJzIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjA0LjAwI0Rvb3IgaW50ZXJsb2NraW5nIHN5c3RlbXMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDUuMDAjUmFkaW9hY3RpdmUgd2FzdGUgZG9zYWdlIHN5c3RlbXMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDYuMDAjUmFkaW9hY3RpdmUgd2FzdGUgc29saWRpZmljYXRpb24gc3lzdGVtcyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wNy4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSBkaXNwb3NhbCBzeXN0ZW1zIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjA4LjAwI1JhZGlvYWN0aXZlIHdhc3RlIHRyZWF0bWVudCBmYWNpbGl0aWVzIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI3LjAwLjAwLjAwLjAwI1Rvb2xzIGFuZCBHZW5lcmFsIE1hY2hpbmVyeSMyNy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4wMC4wMC4wMCNIYW5kIHRvb2xzIzI3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjAwLjAwI0N1dHRpbmcgYW5kIGNyaW1waW5nIGFuZCBwdW5jaGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wMS4wMCNLbmlmZSBibGFkZXMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDIuMDAjUmF6b3Iga25pdmVzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjAzLjAwI1V0aWxpdHkga25pdmVzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA0LjAwI1BvY2tldCBrbml2ZXMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDUuMDAjUHVuY2hlcyBvciBuYWlsIHNldHMgb3IgZHJpZnRzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA2LjAwI1NoZWFycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wNy4wMCNNZXRhbCBjdXR0ZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA4LjAwI1Nhd3MjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDkuMDAjQXVnZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjEwLjAwI1N0cmlwcGluZyB0b29scyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xMS4wMCNXaXJlIGN1dHRlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTIuMDAjQm9sdCBjdXR0ZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjEzLjAwI0hvc2UgY3V0dGVyIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjE0LjAwI0dsYXNzIGN1dHRlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTUuMDAjSGFuZCBvciBwdXNoIGRyaWxsIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjE2LjAwI1B1bmNoaW5nIHBsaWVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xNy4wMCNLbmlmZSBibGFkZSBzZXRzIG9yIGRpc3BlbnNlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMjAuMDAjTnV0IHNwbGl0dGVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4yMS4wMCNOaWJibGVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wMC4wMCNGb3JtaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjAxLjAwI01hbGxldHMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDIuMDAjSGFtbWVycyMyNy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wMy4wMCNBbnZpbHMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDQuMDAjSGF0Y2hldHMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDUuMDAjUGlja3MjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDYuMDAjQm9sdCBjdXR0ZXJzIzI3LjExLjE2LjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjA3LjAwI1N3YWdpbmcgdG9vbHMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDAuMDAjV3JlbmNoZXMgYW5kIGRyaXZlcnMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDEuMDAjU2NyZXdkcml2ZXJzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjAyLjAwI051dCBkcml2ZXJzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjAzLjAwI1NvY2tldCBzZXRzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjA0LjAwI1NvY2tldHMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDUuMDAjQm94IGVuZCB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wNi4wMCNPcGVuIGVuZCB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wNy4wMCNBZGp1c3RhYmxlIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjA4LjAwI1BpcGUgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDkuMDAjU2NyZXcgZXh0cmFjdG9ycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xMC4wMCNIZXgga2V5cyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xMS4wMCNSYXRjaGV0cyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xMi4wMCNQdWxsZXJzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjEzLjAwI0NvbWJpbmF0aW9uIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjE0LjAwI1NwZWNpYWx0eSB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xNS4wMCNUb3JxdWUgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTYuMDAjVG9yeCBrZXlzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjE3LjAwI1BpcGUgZXh0cmFjdG9ycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xOC4wMCNUYXAgZXh0cmFjdG9ycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xOS4wMCNUb3JxdWUgd3JlbmNoIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjIwLjAwI1QgaGFuZGxlIHRhcCB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yMS4wMCNDcmFua3MjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjIuMDAjRGllIHN0b2NrcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yMy4wMCNUdWJlIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjI0LjAwI0hvb2sgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjUuMDAjT2Zmc2V0IHNvY2tldCB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yNi4wMCNTcGFubmVyIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjAwLjAwI01lYXN1cmluZyBhbmQgbGF5b3V0IHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjAxLjAwI1RhcGUgbWVhc3VyZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDIuMDAjTGV2ZWxzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjAzLjAwI1NxdWFyZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDQuMDAjUGx1bWIgYm9icyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wNS4wMCNQcm90cmFjdG9ycyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wNi4wMCNOYWlsIG9yIHJvdXRlciBnYXVnZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDcuMDAjU3RyYWlnaHQgZWRnZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDguMDAjUnVsZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDkuMDAjQmV2ZWxzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjEwLjAwI1N0dWQgZmluZGVycyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4xMS4wMCNDYWxpcGVycyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wMC4wMCNSb3VnaCBhbmQgZmluaXNoaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjAxLjAwI0NvbGQgY2hpc2VscyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wMi4wMCNGaWxlcyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wMy4wMCNQbGFuZXMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDQuMDAjUmFzcHMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDUuMDAjR3JpbmRlcnMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDYuMDAjV29vZCBjaGlzZWxzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjA3LjAwI1dpcmUgYnJ1c2hlcyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wOC4wMCNTaGFycGVuaW5nIHRvb2xzIG9yIGtpdHMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDkuMDAjU3BhdHVsYXMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMTEuMDAjQ3Jvc3MgY3V0IGNoaXNlbHMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDAuMDAjR2FyZGVuIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjAxLjAwI01hY2hldGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjAyLjAwI1NwYWRlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wMy4wMCNSYWtlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wNC4wMCNTaG92ZWxzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjA1LjAwI0F4ZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDYuMDAjU2N5dGhlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wNy4wMCNTZWNhdGV1cnMgb3IgcHJ1bmluZyBzaGVhcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDguMDAjSG9lcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wOS4wMCNTY3JhcGVycyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xMC4wMCNHYXJkZW4gZm9ya3MjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTEuMDAjVG9vbCBoYW5kbGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjEyLjAwI0dhcmRlbiByaWRkbGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjEzLjAwI1Bvc3QgaG9sZSBkaWdnZXIjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTQuMDAjTGF3bm1vd2VycyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xNS4wMCNMYXduIHNjYXJpZmllcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTYuMDAjSGVkZ2UgY2xpcHBlcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTcuMDAjRGlnZ2luZyBiYXJzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjAwLjAwI0hvbGRpbmcgYW5kIGNsYW1waW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjAxLjAwI1BpcGUgdmlzZXMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDIuMDAjQmVuY2ggdmlzZXMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDMuMDAjSGFuZCBjbGFtcHMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDQuMDAjVG9uZ3MjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDUuMDAjVHdlZXplcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDYuMDAjTGluZW1hbnMgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjA3LjAwI0FkanVzdGFibGUgd2lkZW1vdXRoIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wOC4wMCNOZWVkbGVub3NlIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wOS4wMCNNYWduZXRpYyB0b29scyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xMC4wMCNSZXRhaW5pbmcgcmluZyBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTEuMDAjQWxsaWdhdG9yIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xMi4wMCNUb25ndWUgYW5kIGdyb292ZSBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTMuMDAjU2xpcCBvciBncm9vdmUgam9pbnQgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE0LjAwI0RpYWdvbmFsIGN1dCBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTUuMDAjTG9ja2luZyBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTYuMDAjRmVuY2UgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE3LjAwI0VuZCBjdXQgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE4LjAwI1dpcmUgbHVnIGNyaW1waW5nIHRvb2wjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTkuMDAjTGlnaHQgYnVsYiBjaGFuZ2VyIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjIwLjAwI0MgY2xhbXBzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjIxLjAwI0Nvcm5lciBjbGFtcHMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjIuMDAjU2hlZXQgbWV0YWwgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjIzLjAwI0JlbmNoIGRvZyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yNC4wMCNUZW5zaW9uZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjI1LjAwI1JvdW5kIG5vc2UgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjI2LjAwI0ZsYXQgbm9zZSBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjcuMDAjU3RyYXAgd3JlbmNoZXMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjIuMDAuMDAjTWFzb25yeSBhbmQgY29uY3JldGUgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjIuMDEuMDAjVHJvd2VscyMyNy4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMi4wMi4wMCNGbG9hdHMjMjcuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjIuMDMuMDAjRWRnZXJzIzI3LjExLjIyLjAwLjAwCi11bnNwc2M3IzI3LjExLjIyLjA0LjAwI0NlbWVudCBtaXhlcnMjMjcuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjMuMDAuMDAjTWFya2luZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wMS4wMCNCcmFuZGVycyMyNy4xMS4yMy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wMi4wMCNBd2xzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjAzLjAwI1NjcmliZXJzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjA0LjAwI0NoYWxrIGxpbmVzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjA1LjAwI01ldGFsIG1hcmtlcnMgb3IgaG9sZGVycyMyNy4xMS4yMy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wNi4wMCNNZXRhbCBzdGFtcHMjMjcuMTEuMjMuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjQuMDAuMDAjRmFzdGVuZXIgc2V0dGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wMS4wMCNTdGFwbGUgZ3VucyMyNy4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wMi4wMCNSaXZldCB0b29scyMyNy4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wMy4wMCNCYW5kZXJzIzI3LjExLjI0LjAwLjAwCi11bnNwc2M3IzI3LjExLjI0LjA0LjAwI0FuY2hvciBzZXR0aW5nIHRvb2xzIzI3LjExLjI0LjAwLjAwCi11bnNwc2M3IzI3LjExLjI0LjA1LjAwI0JvbHQgaGVhdGVycyMyNy4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wMC4wMCNQcnlpbmcgYW5kIGJlbmRpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDEuMDAjUGlwZSBiZW5kaW5nIHRvb2xzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjAyLjAwI1ByeSBiYXJzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjAzLjAwI0NvbmR1aXQgYmVuZGVycyMyNy4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wNC4wMCNXZWRnZXMjMjcuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDUuMDAjUGFja2luZyBob29rcyMyNy4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wNi4wMCNIaWNrZXlzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI2LjAwLjAwI1NlYWxpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjYuMDEuMDAjUHV0dHkga25pdmVzIzI3LjExLjI2LjAwLjAwCi11bnNwc2M3IzI3LjExLjI2LjAyLjAwI0NhdWxraW5nIHRvb2xzIzI3LjExLjI2LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjAwLjAwI1Bvd2VyIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjAxLjAwI1Bvd2VyIGJsb3dlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDIuMDAjUG93ZXIgYnVmZmVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wMy4wMCNQb3dlciBkcmlsbHMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDQuMDAjUG93ZXIgZ3JpbmRlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDUuMDAjRGVtb2xpdGlvbiBoYW1tZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjA2LjAwI1Bvd2VyIHBsYW5lcyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wNy4wMCNQb3dlciByb3V0ZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjA4LjAwI1Bvd2VyIHNhbmRlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDkuMDAjUG93ZXIgc2F3cyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xMC4wMCNQb3dlciBzY3Jld2d1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTEuMDAjUG93ZXIgc3RhcGxlIGd1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTIuMDAjUG93ZXIgdHJpbW1lcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTMuMDAjSW1wYWN0IHdyZW5jaGVzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjE0LjAwI1Bvd2VyIGNhdWxraW5nIGd1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTUuMDAjUG93ZXIgY2hpcHBlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTYuMDAjUG93ZXIgbmFpbCBndW5zIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjE3LjAwI0hlYXQgZ3VucyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xOC4wMCNFbmdyYXZlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTkuMDAjR2x1ZSBndW5zIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjIwLjAwI1RvcnF1ZSB0b29scyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4yMS4wMCNCaXNjdWl0IGpvaW50ZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjAwLjAwI1Rvb2wgYXR0YWNobWVudHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDEuMDAjRHJpbGwgYml0cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wMi4wMCNTYXcgYmxhZGVzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjAzLjAwI0VuZCBtaWxscyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wNC4wMCNTdGFtcGluZyBkaWVzIG9yIHB1bmNoZXMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDUuMDAjVGhyZWFkaW5nIGRpZXMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDYuMDAjVGhyZWFkaW5nIHRhcHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDcuMDAjQ2h1Y2tzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjA4LjAwI0NvbGxldHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDkuMDAjVG9vbCBob2xkZXJzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjEwLjAwI1RocmVhZCByZXBhaXIga2l0cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xMS4wMCNBcmJvcnMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTIuMDAjQ291bnRlcnNpbmtzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjEzLjAwI0V4dGVuc2lvbiBwb2xlIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE0LjAwI1NjcmV3ZHJpdmVyIGJpdHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTUuMDAjTnV0IGRyaXZlciBiaXRzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE2LjAwI0FicmFzaXZlIGRpc2sjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTcuMDAjSG9sZSBzYXdzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE4LjAwI1Zpc2UgamF3IGxpbmVycyBvciBjYXBzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE5LjAwI1NraXZpbmcgdG9vbCBjdXR0ZXIgYmxhZGVzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjIxLjAwI1JvdXRlciBiaXRzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjAwLjAwI0Rpc3BlbnNpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDEuMDAjR3JlYXNlIGd1bnMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDIuMDAjSW5kdXN0cmlhbCBmdW5uZWxzIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjAzLjAwI0hhbmQgc3ByYXllcnMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDQuMDAjUmVzaW4gZ3VucyMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wNS4wMCNPaWwgY2FuIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjA2LjAwI0NhdWxraW5nIGd1bnMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDcuMDAjQnJvYWRjYXN0IHNwcmVhZGVycyMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMC4wMC4wMCNCcnVzaGVzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjMwLjAxLjAwI1NjcmF0Y2ggYnJ1c2hlcyMyNy4xMS4zMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMC4wMi4wMCNUdWJlIGJydXNoZXMjMjcuMTEuMzAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzAuMDMuMDAjQXBwbGljYXRvciBicnVzaGVzIzI3LjExLjMwLjAwLjAwCi11bnNwc2M3IzI3LjExLjMxLjAwLjAwI1B1bGxpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzEuMDEuMDAjRmlzaCB0YXBlIzI3LjExLjMxLjAwLjAwCi11bnNwc2M3IzI3LjExLjMxLjAyLjAwI0Z1c2UgcHVsbGVycyMyNy4xMS4zMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMi4wMC4wMCNUb29sIGtpdHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzIuMDEuMDAjR2VuZXJhbCB0b29sIGtpdHMjMjcuMTEuMzIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzIuMDIuMDAjQmVhcmluZyBmaXR0aW5nIHRvb2wga2l0cyMyNy4xMS4zMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMi4wMy4wMCNDb21wdXRlciB0b29sIGtpdHMjMjcuMTEuMzIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzIuMDQuMDAjRWxlY3RyaWNpYW4ga2l0cyMyNy4xMS4zMi4wMC4wMAotdW5zcHNjNyMyNy4xMi4wMC4wMC4wMCNIeWRyYXVsaWMgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTUuMDAuMDAjSHlkcmF1bGljIHByZXNzZXMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTUuMDEuMDAjUHJlc3MgcmV0dXJuIHNwcmluZ3MjMjcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTYuMDAuMDAjSHlkcmF1bGljIGN5bGluZGVycyBhbmQgcGlzdG9ucyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNi4wMS4wMCNDeWxpbmRlciBwaXN0b25zIzI3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE2LjAyLjAwI0h5ZHJhdWxpYyBjeWxpbmRlcnMjMjcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDAuMDAjSHlkcmF1bGljIGhvc2UgYW5kIHR1YmUgZml0dGluZ3MjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDEuMDAjSHlkcmF1bGljIHF1aWNrIGNvbm5lY3RvcnMjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDIuMDAjSHlkcmF1bGljIHRlZXMgb3IgY3Jvc3NlcyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wMy4wMCNGZXJydWxlcyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wNC4wMCNIeWRyYXVsaWMgdW5pb25zIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjA1LjAwI0h5ZHJhdWxpYyBvciBjb21wcmVzc2lvbiBlbGJvd3MjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDYuMDAjRmVycnVsZSBudXRzIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjA3LjAwI0NyaW1wIGNvbm5lY3RvcnMjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTguMDAuMDAjSHlkcmF1bGljIHF1aWNrIGNvbm5lY3RvcnMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTkuMDAuMDAjSHlkcmF1bGljIHRlZXMgb3IgY3Jvc3NlcyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4yMC4wMC4wMCNGZXJydWxlcyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4zMC4wMC4wMCNIeWRyYXVsaWMgdW5pb25zIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjQwLjAwLjAwI0h5ZHJhdWxpYyBvciBjb21wcmVzc2lvbiBlbGJvd3MjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuNTAuMDAuMDAjRmVycnVsZSBudXRzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjYwLjAwLjAwI0NyaW1wIGNvbm5lY3RvcnMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuNjEuMDAuMDAjSHlkcmF1bGljIHRvb2xzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjYxLjAxLjAwI01hbmhvbGUgY292ZXIgbGlmdGVycyMyNy4xMi42MS4wMC4wMAotdW5zcHNjNyMyNy4xMy4wMC4wMC4wMCNQbmV1bWF0aWMgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDAuMDAjUG5ldW1hdGljIHRvb2xzIzI3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjAxLjAwI1BuZXVtYXRpYyBpbXBhY3Qgd3JlbmNoZXMjMjcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDIuMDAjQ29tcHJlc3NlZCBhaXIgZ3VuIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjAzLjAwI1BuZXVtYXRpYyBzY3Jld2RyaXZlciMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wNC4wMCNQbmV1bWF0aWMgaGFtbWVyIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjA1LjAwI1BuZXVtYXRpYyBkcmlsbCMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wNi4wMCNQbmV1bWF0aWMgbmFpbCBkcml2ZXJzIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjA3LjAwI1BuZXVtYXRpYyBzYW5kaW5nIG1hY2hpbmVzIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjAwLjAwI0FpciBmaXR0aW5ncyBhbmQgY29ubmVjdG9ycyMyNy4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNi4wMS4wMCNBaXIgbWFuaWZvbGRzIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjAyLjAwI0ZpbHRlcnMjMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDMuMDAjUmVndWxhdG9yIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjA0LjAwI0x1YnJpY2F0b3IjMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDUuMDAjQWlyIGN1cnRhaW4jMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDYuMDAjQWlyIGNvdXBsaW5nIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzMwLjAwLjAwLjAwLjAwI1N0cnVjdHVyZXMgYW5kIEJ1aWxkaW5nIGFuZCBDb25zdHJ1Y3Rpb24gYW5kIE1hbnVmYWN0dXJpbmcgQ29tcG9uZW50cyBhbmQgU3VwcGxpZXMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMDAuMDAuMDAjU3RydWN0dXJhbCBtYXRlcmlhbHMgYW5kIGJhc2ljIHNoYXBlcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wMC4wMCNBbmdsZXMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDEuMDAjRmVycm91cyBhbGxveSBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjAzLjAwI0lyb24gYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA0LjAwI1N0ZWVsIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA2LjAwI0FsdW1pbnVtIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wNy4wMCNNYWduZXNpdW0gYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA4LjAwI1RpdGFuaXVtIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wOS4wMCNDb3BwZXIgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjEwLjAwI0JyYXNzIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xMS4wMCNCcm9uemUgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjEyLjAwI1ppbmMgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjEzLjAwI1RpbiBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTQuMDAjTGVhZCBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTUuMDAjUGxhc3RpYyBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTYuMDAjUnViYmVyIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xNy4wMCNQcmVjaW91cyBtZXRhbCBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDAuMDAjQmFyIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjAxLjAwI0ZlcnJvdXMgYWxsb3kgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wMi4wMCNOb24gZmVycm91cyBhbGxveSBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjAzLjAwI0lyb24gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wNC4wMCNTdGVlbCBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjA2LjAwI0FsdW1pbnVtIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDcuMDAjTWFnbmVzaXVtIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDguMDAjVGl0YW5pdW0gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wOS4wMCNDb3BwZXIgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xMC4wMCNCcmFzcyBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjExLjAwI0Jyb256ZSBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjEyLjAwI1ppbmMgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xMy4wMCNUaW4gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xNC4wMCNMZWFkIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTUuMDAjUGxhc3RpYyBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjE2LjAwI1ByZWNpb3VzIG1ldGFsIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTcuMDAjV29vZGVuIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDAuMDAjQmVhbXMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDEuMDAjRmVycm91cyBhbGxveSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wMi4wMCNOb24gZmVycm91cyBhbGxveSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wMy4wMCNJcm9uIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjA0LjAwI1N0ZWVsIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wNi4wMCNBbHVtaW51bSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wNy4wMCNNYWduZXNpdW0gYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDguMDAjVGl0YW5pdW0gYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDkuMDAjQ29wcGVyIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjEwLjAwI0JyYXNzIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjExLjAwI0Jyb256ZSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xMi4wMCNaaW5jIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjEzLjAwI1RpbiBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xNC4wMCNMZWFkIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjE1LjAwI1BsYXN0aWMgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTYuMDAjUnViYmVyIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjE3LjAwI0NvbmNyZXRlIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjE4LjAwI1ByZWNpb3VzIG1ldGFsIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjAwLjAwI0NoYW5uZWxzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjAxLjAwI0ZlcnJvdXMgYWxsb3kgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDMuMDAjSXJvbiBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wNC4wMCNTdGVlbCBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDYuMDAjQWx1bWludW0gY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDcuMDAjTWFnbmVzaXVtIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjA4LjAwI1RpdGFuaXVtIGNoYW5ubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wOS4wMCNDb3BwZXIgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTAuMDAjQnJhc3MgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTEuMDAjQnJvbnplIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjEyLjAwI1ppbmMgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTMuMDAjVGluIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjE0LjAwI0xlYWQgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTUuMDAjUGxhc3RpYyBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xNi4wMCNSdWJiZXIgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTcuMDAjUHJlY2lvdXMgbWV0YWwgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDAuMDAjQ29pbCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wMS4wMCNGZXJyb3VzIGFsbG95IGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wMy4wMCNJcm9uIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDQuMDAjU3RlZWwgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wNi4wMCNBbHVtaW51bSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjA3LjAwI01hZ25lc2l1bSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjA4LjAwI1RpdGFuaXVtIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDkuMDAjQ29wcGVyIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTAuMDAjQnJhc3MgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xMS4wMCNCcm9uemUgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xMi4wMCNaaW5jIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTMuMDAjVGluIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTQuMDAjTGVhZCBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjE1LjAwI1BsYXN0aWMgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xNi4wMCNQcmVjaW91cyBtZXRhbCBjb2lscyMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xNy4wMCNOb24gbWV0YWxsaWMgY29pbHMjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTguMDAjUGVyZm9yYXRlZCBzdGVlbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xOS4wMCNFbWJvc3NlZCBzdGVlbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4yMC4wMCNDb21wcmVzc2VkIGZpYmVyIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMjEuMDAjRmliZXIgYW5kIHJ1YmJlciBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjIyLjAwI0dyYXBoaXRlIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDAuMDAjRm9pbCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wMS4wMCNGZXJyb3VzIGFsbG95IGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wMy4wMCNJcm9uIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDQuMDAjU3RlZWwgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wNi4wMCNBbHVtaW51bSBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjA3LjAwI01hZ25lc2l1bSBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjA4LjAwI1RpdGFuaXVtIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDkuMDAjQ29wcGVyIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTAuMDAjQnJhc3MgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4xMS4wMCNCcm9uemUgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4xMi4wMCNaaW5jIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTMuMDAjVGluIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTQuMDAjTGVhZCBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjE1LjAwI1BsYXN0aWMgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wMC4wMCNQaXBlIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjAxLjAwI0ZlcnJvdXMgYWxsb3kgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wMi4wMCNOb24gZmVycm91cyBhbGxveSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjAzLjAwI0lyb24gcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wNC4wMCNTdGVlbCBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjA1LjAwI1N0YWlubGVzcyBzdGVlbCBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjA2LjAwI0FsdW1pbnVtIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDcuMDAjTWFnbmVzaXVtIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDguMDAjVGl0YW5pdW0gcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wOS4wMCNDb3BwZXIgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xMC4wMCNCcmFzcyBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjExLjAwI0Jyb256ZSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjEyLjAwI1ppbmMgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xMy4wMCNUaW4gcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xNC4wMCNMZWFkIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTUuMDAjUGxhc3RpYyBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjE2LjAwI1J1YmJlciBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjE3LjAwI0NvbmNyZXRlIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDAuMDAjUGxhdGUjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDEuMDAjRmVycm91cyBhbGxveSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wMi4wMCNOb24gZmVycm91cyBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wMy4wMCNJcm9uIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjA0LjAwI1N0ZWVsIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjA1LjAwI1N0YWlubGVzcyBzdGVlbCBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wNi4wMCNBbHVtaW51bSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wNy4wMCNNYWduZXNpdW0gcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDguMDAjVGl0YW5pdW0gcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDkuMDAjQ29wcGVyIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjEwLjAwI0JyYXNzIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjExLjAwI0Jyb256ZSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xMi4wMCNaaW5jIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjEzLjAwI1RpbiBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xNC4wMCNMZWFkIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE1LjAwI1BsYXN0aWMgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTYuMDAjUnViYmVyIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE3LjAwI0NvbmNyZXRlIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE4LjAwI1ByZWNpb3VzIG1ldGFsIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE5LjAwI05vbiBtZXRhbGxpYyBwbGF0ZXMjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDAuMDAjUHJvZmlsZXMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDEuMDAjRmVycm91cyBhbGxveSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wMi4wMCNOb24gZmVycm91cyBhbGxveSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wMy4wMCNJcm9uIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjA0LjAwI1N0ZWVsIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjA1LjAwI1N0YWlubGVzcyBzdGVlbCBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wNi4wMCNBbHVtaW51bSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wNy4wMCNNYWduZXNpdW0gcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDguMDAjVGl0YW5pdW0gcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDkuMDAjQ29wcGVyIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjEwLjAwI0JyYXNzIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjExLjAwI0Jyb256ZSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xMi4wMCNaaW5jIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjEzLjAwI1RpbiBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xNC4wMCNMZWFkIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjE1LjAwI1BsYXN0aWMgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMTYuMDAjUnViYmVyIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjAwLjAwI1JvZCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wMS4wMCNGZXJyb3VzIGFsbG95IHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wMy4wMCNJcm9uIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDQuMDAjU3RlZWwgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wNi4wMCNBbHVtaW51bSByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjA3LjAwI01hZ25lc2l1bSByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjA4LjAwI1RpdGFuaXVtIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDkuMDAjQ29wcGVyIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTAuMDAjQnJhc3Mgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xMS4wMCNCcm9uemUgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xMi4wMCNaaW5jIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTMuMDAjVGluIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTQuMDAjTGVhZCByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjE1LjAwI1BsYXN0aWMgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xNi4wMCNSdWJiZXIgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wMC4wMCNTaGVldCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wMS4wMCNGZXJyb3VzIGFsbG95IHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjAzLjAwI0lyb24gc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDQuMDAjU3RlZWwgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjA2LjAwI0FsdW1pbnVtIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjA3LjAwI01hZ25lc2l1bSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wOC4wMCNUaXRhbml1bSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wOS4wMCNDb3BwZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTAuMDAjQnJhc3Mgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTEuMDAjQnJvbnplIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjEyLjAwI1ppbmMgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTMuMDAjVGluIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjE0LjAwI0xlYWQgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTUuMDAjUGxhc3RpYyBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xNi4wMCNSdWJiZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTcuMDAjQXJtb3Igc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTguMDAjQmVyeWxsaXVtIGFsbG95IHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjE5LjAwI0NvbXBvc2l0ZSBtZXRhbCBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yMC4wMCNOaWNrZWwgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjEuMDAjRm9hbSBSdWJiZXIgU2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjIuMDAjQ29yayBhbmQgcnViYmVyIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjIzLjAwI0NvbXByZXNzZWQgZmliZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjQuMDAjTWV0YWwgaW5zZXJ0ZWQgY29tcHJlc3NlZCBmaWJlciBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yNS4wMCNGaWJlciBhbmQgcnViYmVyIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjI2LjAwI0FzYmVzdG9zIHNoZWV0cyMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wMC4wMCNTdHJpcCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wMS4wMCNGZXJyb3VzIGFsbG95IHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjAzLjAwI0lyb24gc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDQuMDAjU3RlZWwgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjA2LjAwI0FsdW1pbnVtIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjA3LjAwI01hZ25lc2l1bSBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wOC4wMCNUaXRhbml1bSBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wOS4wMCNDb3BwZXIgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTAuMDAjQnJhc3Mgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTEuMDAjQnJvbnplIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjEyLjAwI1ppbmMgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTMuMDAjVGluIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjE0LjAwI0xlYWQgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTUuMDAjUGxhc3RpYyBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4xNi4wMCNSdWJiZXIgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDAuMDAjVHViZSBhbmQgdHViaW5nIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjAxLjAwI0ZlcnJvdXMgYWxsb3kgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjAyLjAwI0NvcHBlciB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDMuMDAjVGl0YW5pdW0gdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjA0LjAwI01hZ25lc2l1bSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDUuMDAjVGluIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wNi4wMCNCcmFzcyB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDcuMDAjTGVhZCB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDguMDAjQnJvbnplIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wOS4wMCNaaW5jIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xMC4wMCNTdGVlbCB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTEuMDAjSXJvbiB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTIuMDAjQ2VtZW50IHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xMy4wMCNQbGFzdGljIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xNC4wMCNSdWJiZXIgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjE1LjAwI0dsYXNzIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xNi4wMCNTdG9uZSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTcuMDAjTm9uIGZlcnJvdXMgYWxsb3kgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjE4LjAwI0FsdW1pbnVtIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjIwLjAwI1ByZWNpb3VzIG1ldGFsIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOC4wMC4wMCNQaWxpbmcjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjguMDEuMDAjQWx1bWludW0gcGlsaW5ncyMzMC4xMC4yOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOC4wMi4wMCNDb25jcmV0ZSBwaWxpbmdzIzMwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI4LjAzLjAwI1N0ZWVsIHBpbGluZ3MjMzAuMTAuMjguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDAuMDAjUG9zdCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOS4wMS4wMCNDZW1lbnQgb3IgY29uY3JldGUgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDIuMDAjU3RlZWwgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDMuMDAjTWV0YWwgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDQuMDAjV29vZGVuIHBvc3RzIzMwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI5LjA1LjAwI1BsYXN0aWMgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDYuMDAjRmliZXJnbGFzcyBwb3N0cyMzMC4xMC4yOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMC4wMC4wMCNTaGFmdGluZyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMC4wMS4wMCNTdGVlbCBzaGFmdGluZyMzMC4xMC4zMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMC4wMi4wMCNTdGFpbmxlc3Mgc3RlZWwgc2hhZnRpbmcjMzAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzEuMDAuMDAjUmFpbHMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzEuMDEuMDAjU3RlZWwgcmFpbCMzMC4xMC4zMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMS4wMi4wMCNBbHVtaW51bSByYWlsIzMwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMxLjAzLjAwI01ldGFsIHJhaWwjMzAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzIuMDAuMDAjR3JhdGluZyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMi4wMS4wMCNTdGVlbCBncmF0aW5nIzMwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjAyLjAwI1N0YWlubGVzcyBzdGVlbCBncmF0aW5nIzMwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjAzLjAwI0FsdW1pbnVtIGdyYXRpbmcjMzAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzIuMDQuMDAjRmliZXJnbGFzcyBncmF0aW5nIzMwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjA1LjAwI0lyb24gZ3JhdGluZyMzMC4xMC4zMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wMC4wMCNCaWxsZXRzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjAxLjAwI0FsdW1pbnVtIGJpbGxldCMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wMi4wMCNCcmFzcyBiaWxsZXQjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDMuMDAjQnJvbnplIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDQuMDAjQ29wcGVyIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDUuMDAjTGVhZCBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjA2LjAwI1ppbmMgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wNy4wMCNTdGVlbCBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjA4LjAwI1RpdGFuaXVtIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDkuMDAjTWFnbmVzaXVtIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMTAuMDAjUHJlY2lvdXMgbWV0YWwgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4xMS4wMCNOb24gZmVycm91cyBtZXRhbCBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjEyLjAwI0ZlcnJvdXMgbWV0YWwgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4xMy4wMCNOb24gbWV0YWxsaWMgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wMC4wMCNJbmdvdHMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDEuMDAjQWx1bWludW0gaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjAyLjAwI0JyYXNzIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wMy4wMCNMZWFkIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wNC4wMCNaaW5jIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wNS4wMCNTdGVlbCBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDYuMDAjTWFnbmVzaXVtIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wNy4wMCNCcm9uemUgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjA4LjAwI0NvcHBlciBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDkuMDAjVGl0YW5pdW0gaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjEwLjAwI1ByZWNpb3VzIG1ldGFsIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4xMS4wMCNGZXJyb3VzIGFsbG95IGV4dHJ1c2lvbiBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZXh0cnVzaW9uIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4xMy4wMCNOb24gbWV0YWxsaWMgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjAwLjAwI0hvbmV5Y29tYiBjb3JlIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjAxLjAwI0FsdW1pbnVtIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjAyLjAwI01hZ25lc2l1bSBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wMy4wMCNGb2FtIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA0LjAwI1BsYXN0aWMgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDUuMDAjV29vZGVuIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA2LjAwI0ZlcnJvdXMgbWV0YWwgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDcuMDAjQnJvbnplIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA4LjAwI0NvcHBlciBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wOS4wMCNTdGVlbCBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4xMC4wMCNMZWFkIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjExLjAwI1ppbmMgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTIuMDAjVGl0YW5pdW0gaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTMuMDAjQnJhc3MgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTQuMDAjTm9uIGZlcnJvdXMgbWV0YWwgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTUuMDAjUHJlY2lvdXMgbWV0YWwgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDAuMDAjU3RydWN0dXJhbCBwcm9kdWN0cyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wMS4wMCNXb29kIGJlYW1zIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjAyLjAwI1dvb2QgY29tcG9zaXRlIGJlYW1zIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjAzLjAwI0ZyYW1pbmcgbHVtYmVyIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjA0LjAwI1dvb2Qgc2hlYXRoaW5nIG9yIHNoZWV0cyMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wNS4wMCNXb29kIHBsYW5rcyMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wNi4wMCNXb29kIHRydXNzZXMjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDcuMDAjV29vZCBqb2lzdHMjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzcuMDAuMDAjQnJhaWQjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzcuMDEuMDAjU3RhaW5sZXNzIHN0ZWVsIGJyYWlkIzMwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzMwLjExLjAwLjAwLjAwI0NvbmNyZXRlIGFuZCBjZW1lbnQgYW5kIHBsYXN0ZXIjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTUuMDAuMDAjQ29uY3JldGUgYW5kIG1vcnRhcnMjMzAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTUuMDEuMDAjRm9hbWVkIGNvbmNyZXRlIzMwLjExLjE1LjAwLjAwCi11bnNwc2M3IzMwLjExLjE1LjAyLjAwI0NvbmR1Y3RpdmUgY29uY3JldGUjMzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTUuMDMuMDAjSW5zdWxhdGluZyBjb25jcmV0ZSMzMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNS4wNC4wMCNNb3J0YXJzIzMwLjExLjE1LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjAwLjAwI0NlbWVudCBhbmQgbGltZSMzMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wMS4wMCNDZW1lbnQjMzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDIuMDAjQ2hsb3JpbmF0ZWQgbGltZSMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wMy4wMCNIeWRyYXVsaWMgbGltZSMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wNC4wMCNIeWRyYXRlZCBsaW1lIzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjA1LjAwI0xlYW4gbGltZSMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wNi4wMCNHcm91dCMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wNy4wMCNVbnNsYWtlZCBsaW1lIzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE3LjAwLjAwI1BsYXN0ZXJzIzMwLjExLjAwLjAwLjAwCi11bnNwc2M3IzMwLjExLjE3LjAxLjAwI0d5cHN1bSBwbGFzdGVyIzMwLjExLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEyLjAwLjAwLjAwI1JvYWRzIGFuZCBsYW5kc2NhcGUjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTUuMDAuMDAjQml0dW1pbm91cyBkZXJpdmF0aXZlcyMzMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNS4wMS4wMCNDb2FsIHRhciMzMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNS4wMi4wMCNUYXJzIzMwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEyLjE1LjAzLjAwI0NyZXNvdGUjMzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDAuMDAjQXNwaGFsdHMjMzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDEuMDAjQXNwaGFsdCMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wMi4wMCNQaXRjaCMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wMy4wMCNHaWxzb25pdGUjMzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDQuMDAjQ3V0YmFjayBwcm9kdWN0cyMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wNS4wMCNNYW5ob2xlIGZyYW1lcyB3aXRoIGNvdmVycyMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMy4wMC4wMC4wMCNTdHJ1Y3R1cmFsIGJ1aWxkaW5nIHByb2R1Y3RzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEzLjE1LjAwLjAwI0Jsb2NrcyMzMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNS4wMS4wMCNDZW1lbnQgYmxvY2tzIzMwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE1LjAyLjAwI0NvbmNyZXRlIGJsb2NrcyMzMC4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNS4wMy4wMCNTdG9uZSBibG9ja3MjMzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTUuMDQuMDAjQ2VyYW1pYyBibG9ja3MjMzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTYuMDAuMDAjQnJpY2tzIzMwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEzLjE2LjAxLjAwI0NlbWVudCBicmlja3MjMzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTYuMDIuMDAjQ2VyYW1pYyBicmlja3MjMzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTYuMDMuMDAjQ29uY3JldGUgYnJpY2tzIzMwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE2LjA0LjAwI1N0b25lIGJyaWNrcyMzMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wMC4wMCNUaWxlcyBhbmQgZmxhZ3N0b25lcyMzMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wMS4wMCNDZW1lbnQgdGlsZXMgb3IgZmxhZ3N0b25lcyMzMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wMi4wMCNTdG9uZSB0aWxlcyBvciBmbGFnc3RvbmVzIzMwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE3LjAzLjAwI0NvbmNyZXRlIHRpbGVzIG9yIGZsYWdzdG9uZXMjMzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTcuMDQuMDAjQ2VyYW1pYyB0aWxlcyBvciBmbGFnc3RvbmVzIzMwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE3LjA1LjAwI0hlYWQgc3RvbmVzIzMwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMwLjE0LjAwLjAwLjAwI0luc3VsYXRpb24jMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDAuMDAjVGhlcm1hbCBpbnN1bGF0aW9uIzMwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjAxLjAwI1dlYXRoZXIgc3RyaXBwaW5nIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjAyLjAwI0luc3VsYXRpb24gYmxhbmtldHMjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDMuMDAjRm9hbSBpbnN1bGF0aW9uIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA0LjAwI0luc3VsYXRpb24gYmF0dHMjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDUuMDAjVGhlcm1hbCBpbnN1bGF0aW9uIHNsZWV2aW5nIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA2LjAwI0xvb3NlIGZpbGwgaW5zdWxhdGlvbiMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wNy4wMCNSaWdpZCBib2FyZCBpbnN1bGF0aW9uIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA4LjAwI0ZpYmVyIGluc3VsYXRpb24jMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDkuMDAjUmVmcmFjdG9yaWVzIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjEwLjAwI0Rvb3Igc3dlZXAjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMTEuMDAjV2luZG93IGZpbG0jMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTYuMDAuMDAjU3BlY2lhbHR5IGluc3VsYXRpb24jMzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTYuMDEuMDAjQWNvdXN0aWNhbCBpbnN1bGF0aW9uIzMwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE2LjAyLjAwI05vbiB0aGVybWFsIGluc3VsYXRpb24gc2xlZXZpbmcjMzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTYuMDMuMDAjSGVhdCBTaGllbGRzIzMwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjAwLjAwLjAwI0V4dGVyaW9yIGZpbmlzaGluZyBtYXRlcmlhbHMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDAuMDAjUm9vZmluZyBtYXRlcmlhbHMjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDEuMDAjUm9sbCByb29maW5nIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjAyLjAwI1Jvb2YgdmFsbGV5cyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wMy4wMCNSb29maW5nIGZhYnJpY3MjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDQuMDAjUm9vZmluZyBmZWx0cyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wNS4wMCNSb29maW5nIG1lbWJyYW5lcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wNi4wMCNSb29maW5nIHRpbGVzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjA3LjAwI1NoYWtlcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wOC4wMCNTaGluZ2xlcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wOS4wMCNUcnVzc2VzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjEwLjAwI1NsYXRlIHJvb2ZpbmcjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDAuMDAjUm9vZmluZyBhY2Nlc3NvcmllcyMzMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wMS4wMCNSb29mIGZhc2NpYXMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDIuMDAjRmxhc2hpbmdzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjAzLjAwI0dyYXZlbCBzdG9wcyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wNC4wMCNSb29maW5nIGJydXNoZXMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDUuMDAjUm9vZmluZyBkcmFpbnMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDYuMDAjUm9vZmluZyBtb3BzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjA3LjAwI1Jvb2ZpbmcgdmVudHMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDguMDAjU29mZml0cyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wOS4wMCNSb29mIGN1cmJzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjEwLjAwI1Jvb2YgcmlwcGVycyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNy4wMC4wMCNSYWluIGd1dHRlcnMgYW5kIGFjY2Vzc29yaWVzIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjE3LjAxLjAwI0Rvd25zcG91dHMjMzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTcuMDIuMDAjRHJpcCBjYXBzIzMwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE3LjAzLjAwI0d1dHRlcnMjMzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTcuMDQuMDAjU3BsYXNoYmxvY2tzIzMwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjAwLjAwI1NpZGluZyBhbmQgZXh0ZXJpb3Igd2FsbCBtYXRlcmlhbHMjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDEuMDAjU2h1dHRlcnMjMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDIuMDAjU2lkaW5nIzMwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjAzLjAwI1NpZGluZyBidXR0IGpvaW50cyMzMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wNC4wMCNTaWRpbmcgY29ybmVycyMzMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wNS4wMCNTdHVjY28jMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDYuMDAjR2xhc3MgY3VydGFpbndhbGxpbmcjMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTkuMDAuMDAjRmluaXNoaW5nIG1hdGVyaWFscyBhbmQgcHJvZHVjdHMjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTkuMDEuMDAjQXduaW5ncyMzMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOS4wMi4wMCNFeHRlcmlvciB0cmltIG1hdGVyaWFscyMzMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNS4yMC4wMC4wMCNGZW5jaW5nIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjIwLjAxLjAwI01ldGFsIGZlbmNpbmcjMzAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMjAuMDIuMDAjV29vZCBmZW5jaW5nIzMwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjIxLjAwLjAwI1N1cmZhY2UjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMjEuMDEuMDAjU2hvdCBzdGVlbCMzMC4xNS4yMS4wMC4wMAotdW5zcHNjNyMzMC4xNi4wMC4wMC4wMCNJbnRlcmlvciBmaW5pc2hpbmcgbWF0ZXJpYWxzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjAwLjAwI1dhbGwgZmluaXNoaW5nIG1hdGVyaWFscyMzMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wMS4wMCNXYWxsYm9hcmQjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDIuMDAjV2FsbHBhcGVycyMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wMy4wMCNEcnl3YWxsIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjA0LjAwI0Nvcm5lciBndWFyZHMjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDUuMDAjUGFuZWxzIG9yIHBhbmVsbGluZyMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wNi4wMCNQbGFzdGVyIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjA3LjAwI0RyeXdhbGwgam9pbnQgY29tcG91bmRzIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjA4LjAwI1dhbGxwYXBlciByb2xsZXIjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTYuMDAuMDAjQ2VpbGluZyBtYXRlcmlhbHMjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTYuMDEuMDAjQWNvdXN0aWMgY2VpbGluZyB0aWxlcyMzMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNi4wMi4wMCNDZWlsaW5nIHBhbmVscyMzMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNi4wMy4wMCNDb2ZmZXJzIzMwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE2LjA0LjAwI1N1c3BlbmRlZCBjZWlsaW5nIHN5c3RlbXMjMzAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDAuMDAjRmxvb3JpbmcjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDEuMDAjQ2FycGV0aW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjAyLjAwI1dvb2QgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDMuMDAjTGlub2xldW0jMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDUuMDAjUnViYmVyIGZsb29yaW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjA2LjAwI1N0b25lIG9yIHRpbGUgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDcuMDAjVmlueWwgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDguMDAjS25vdHRlZCBjYXJwZXRpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDkuMDAjVHVmdGVkIGNhcnBldGluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xMC4wMCNMYW1pbmF0ZSBmbG9vcmluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xMS4wMCNPdXRkb29yIGNhcnBldGluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xMi4wMCNGbG9vcmluZyBqb2lzdHMjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTMuMDAjQ2FycGV0IHBhZHMjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTQuMDAjQ29yayBmbG9vcmluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xNS4wMCNEdWNrYm9hcmRzIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjE2LjAwI1RpbGUgc3BhY2VycyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOC4wMC4wMCNDYWJpbmV0cnkjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTguMDEuMDAjQ2FiaW5ldHMjMzAuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTguMDIuMDAjQ291bnRlcnRvcHMjMzAuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDAuMDAjTW9sZGluZyBhbmQgbWlsbHdvcmsjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDEuMDAjTG91dmVycyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wMi4wMCNDb2x1bW5zIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjAzLjAwI1dhaW5zY290aW5nIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA0LjAwI0Nvcm5pY2VzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA1LjAwI0Rvb3Igc3Vycm91bmRzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA2LjAwI01vbGRpbmcjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDcuMDAjU3RhaXJzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA4LjAwI1N0YWlyIHBhcnRzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjAwLjAwLjAwI0Rvb3JzIGFuZCB3aW5kb3dzIGFuZCBnbGFzcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wMC4wMCNEb29ycyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wMS4wMCNHbGFzcyBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wMi4wMCNTY3JlZW4gZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDMuMDAjUm9sbGluZyBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wNC4wMCNXb29kZW4gZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDUuMDAjTWV0YWwgZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDYuMDAjU3Rvcm0gZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDcuMDAjRG9vciBmcmFtZXMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDguMDAjUG9ja2V0IGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjA5LjAwI1Jldm9sdmluZyBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4xMC4wMCNBdXRvbWF0aWMgZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMTEuMDAjU3dpbmcgZG9vciMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4xMi4wMCNEb29yIG9wZW5lcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDAuMDAjV2luZG93cyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wNC4wMCNEb3VibGUgaHVuZyB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA1LjAwI1NpbmdsZSBodW5nIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDYuMDAjQ2FzZW1lbnQgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wNy4wMCNIb3Jpem9udGFsIHNsaWRlciB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA4LjAwI1RpbHQgb3IgdHJhbnNvbSB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA5LjAwI0ZpeGVkIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTAuMDAjQmF5IHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTEuMDAjQm93IHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTIuMDAjUHJvamVjdGVkIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTMuMDAjV2luZG93IHdhbGxzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjE0LjAwI1dpbmRvdyBzY3JlZW5zIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjE1LjAwI0ZyZW5jaCB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjAwLjAwI0dsYXNzIHByb2R1Y3RzIzMwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjAxLjAwI1BhdmluZyBibG9ja3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDMuMDAjQmV2ZWxlZCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wNC4wMCNMZWFkZWQgZ2xhc3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDUuMDAjTGFtaW5hdGVkIGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjA2LjAwI1RlbXBlcmVkIGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjA3LjAwI1NhZmV0eSBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wOC4wMCNGbG9hdCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wOS4wMCNXaXJlZCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOC4wMC4wMCNTa3lsaWdodHMjMzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTguMDEuMDAjRml4ZWQgc2t5bGlnaHRzIzMwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE4LjAyLjAwI1ZlbnRlZCBza3lsaWdodHMjMzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTguMDMuMDAjVHViZSBza3lsaWdodHMjMzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDAuMDAjV2luZG93IGZyYW1lcyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wMS4wMCNEb3VibGUgaHVuZyB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjAyLjAwI1NpbmdsZSBodW5nIHdpbmRvdyBmcmFtZXMjMzAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDMuMDAjQ2FzZW1lbnQgd2luZG93IGZyYW1lcyMzMC4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wNC4wMCNIb3Jpem9udGFsIHNsaWRlciB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjA1LjAwI1RpbHQgb3IgdHJhbnNvbSB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjA2LjAwI0ZpeGVkIHdpbmRvdyBmcmFtZXMjMzAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMjAuMDAuMDAjR2F0ZXMjMzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMjAuMDEuMDAjU2luZ2xlIGJhciBnYXRlIzMwLjE3LjIwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjIwLjAyLjAwI0RvdWJsZSBiYXIgZ2F0ZSMzMC4xNy4yMC4wMC4wMAotdW5zcHNjNyMzMC4xOC4wMC4wMC4wMCNQbHVtYmluZyBmaXh0dXJlcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wMC4wMCNTYW5pdGFyeSB3YXJlIzMwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjAxLjAwI0JhdGh0dWJzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjAyLjAwI0JpZGV0cyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wMy4wMCNTaG93ZXJzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA0LjAwI1NpbmtzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA1LjAwI1RvaWxldHMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDYuMDAjVXJpbmFscyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wNy4wMCNCYXRodHViIG9yIHNob3dlciBlbmNsb3N1cmVzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA4LjAwI1Jlc3Ryb29tIHBhcnRpdGlvbnMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDkuMDAjU29hcCBkaXNoZXMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMTAuMDAjTmFwa2luIHJpbmdzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE5LjAwLjAwLjAwI0NvbnN0cnVjdGlvbiBhbmQgbWFpbnRlbmFuY2Ugc3VwcG9ydCBlcXVpcG1lbnQjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDAuMDAjTGFkZGVycyBhbmQgc2NhZmZvbGRpbmcjMzAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDEuMDAjTGFkZGVycyMzMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNS4wMi4wMCNTY2FmZm9sZGluZyMzMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNS4wMy4wMCNTdGVwIHN0b29sIzMwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE5LjE1LjA0LjAwI1N0ZXAgc3Rvb2wjMzAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDUuMDAjU3RlcCBzdG9vbCMzMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNi4wMC4wMCNMYWRkZXJzIGFuZCBzY2FmZm9sZGluZyBhY2Nlc3NvcmllcyMzMC4xOS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNi4wMS4wMCNIYW5kcmFpbHMjMzAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTYuMDIuMDAjU2NhZmZvbGRpbmcgc3RhYmlsaXplcnMjMzAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTYuMDMuMDAjU2NhZmZvbGRpbmcgZmxvb3JpbmcjMzAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMDAuMDAuMDAjUHJlZmFicmljYXRlZCBzdHJ1Y3R1cmVzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIwLjE1LjAwLjAwI1ByZWZhYnJpY2F0ZWQgZmFybSBzdHJ1Y3R1cmVzIzMwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIwLjE1LjAxLjAwI1NpbG9zIzMwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE1LjAyLjAwI0dyZWVuaG91c2VzIzMwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjAwLjAwI1ByZWZhYnJpY2F0ZWQgcmVzaWRlbnRpYWwgc3RydWN0dXJlcyMzMC4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNi4wMS4wMCNIb3VzZXMjMzAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTYuMDIuMDAjTW9iaWxlIGhvbWVzIzMwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjAzLjAwI0NhYmlucyMzMC4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNi4wNC4wMCNHYXJhZ2VzIzMwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjA1LjAwI0dhemVibyMzMC4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wMC4wMCNQcmVmYWJyaWNhdGVkIGNvbW1lcmNpYWwgYW5kIGluZHVzdHJpYWwgc3RydWN0dXJlcyMzMC4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wMS4wMCNJbiBwbGFudCBvZmZpY2VzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjAyLjAwI1NwcmF5IGJvb3RocyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wMy4wMCNTdG9yYWdlIHNoZWRzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA0LjAwI0NsZWFuIHJvb21zIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA1LjAwI0d1YXJkaG91c2VzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA2LjAwI1BvcnRhYmxlIHRvaWxldHRlcyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wNy4wMCNXYXJlaG91c2VzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA4LjAwI0F1ZGl0b3JpdW0jMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDkuMDAjQ29uc2VydmF0b3J5IzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjEwLjAwI09mZmljZSBraXRjaGVucyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOC4wMC4wMCNQcmVmYWJyaWNhdGVkIGVtZXJnZW5jeSByZWxpZWYgc3RydWN0dXJlcyMzMC4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOC4wMS4wMCNTaGVsdGVycyMzMC4yMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOC4wMi4wMCNFbWVyZ2VuY3kgdGVudCBoYWxscyMzMC4yMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOC4wMy4wMCNDb250YWluZXIgdW5pdHMjMzAuMjAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTkuMDAuMDAjUHJlZmFicmljYXRlZCBtZWRpY2FsIHN0cnVjdHVyZXMjMzAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTkuMDEuMDAjTWVkaWNhbCB1bml0cyMzMC4yMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOS4wMi4wMCNMYWJvcmF0b3J5IHVuaXRzIzMwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE5LjAzLjAwI0RlbnRhbCB1bml0cyMzMC4yMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOS4wNC4wMCNTdXJnaWNhbCB1bml0cyMzMC4yMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4wMC4wMC4wMCNFbGVjdHJpY2FsIGVxdWlwbWVudCBhbmQgY29tcG9uZW50cyBhbmQgc3VwcGxpZXMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDAuMDAjUG93ZXIgY29udmVyc2lvbiMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wMS4wMCNUcmFuc2Zvcm1lcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDIuMDAjUG93ZXIgc3VwcGx5IHVuaXRzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjAzLjAwI1Bvd2VyIGRpc3RyaWJ1dGlvbiB1bml0cyAoUERVcykjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDQuMDAjUG93ZXIgYWRhcHRlcnMgb3IgaW52ZXJ0ZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA1LjAwI0ZyZXF1ZW5jeSBjb252ZXJ0ZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA2LjAwI1NpZ25hbCBjb252ZXJ0ZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA3LjAwI1RyYW5zZHVjZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA4LjAwI1JlZ3VsYXRvcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDkuMDAjTWFnbmV0aWMgY29pbHMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTAuMDAjVW5pbnRlcnJ1cHRpYmxlIHBvd2VyIHN1cHBsaWVzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjExLjAwI1NvbGVub2lkcyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4xMi4wMCNDaG9rZXMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTMuMDAjRWxlY3RyaWMgcm90YXJ5IGNvbnZlcnRlcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTQuMDAjQ2FwYWNpdG9yIGJhbmtzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjE1LjAwI1JlYWN0b3JzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE2LjAwLjAwI0NvbmR1aXRzIGFuZCByYWNld2F5cyMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wMS4wMCNDYWJsZSB0cmF5cyMzMC4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wMi4wMCNFbGVjdHJpY2FsIGNvbmR1aXQjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDMuMDAjRWxlY3RyaWNhbCByYWNld2F5cyMzMC4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wNC4wMCNXaXJpbmcgZHVjdHMjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDUuMDAjV2lyZXdheXMjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDYuMDAjV2lyaW5nIHRyb3VnaHMjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDAuMDAjRWxlY3RyaWNhbCBib3hlcyBhbmQgZW5jbG9zdXJlcyBhbmQgZml0dGluZ3MjMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDEuMDAjRWxlY3RyaWNhbCBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wMi4wMCNFbGVjdHJpY2FsIGJveCBjb3ZlcnMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDMuMDAjV2VhdGhlcnByb29mIGJveGVzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjA0LjAwI1N3aXRjaCBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wNS4wMCNGbG9vciBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wNi4wMCNPdXRsZXQgYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDcuMDAjU3BlY2lhbHR5IGVsZWN0cmljYWwgYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDguMDAjVXRpbGl0eSBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wOS4wMCNFbGVjdHJpY2FsIGZpdHRpbmdzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjEwLjAwI0VsZWN0cmljYWwgYnVzaGluZ3MjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMTEuMDAjQ2VpbGluZyBmbGFuZ2VzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjAwLjAwI0x1Z3MgY29ubmVjdG9ycyBhbmQgdGVybWluYWxzIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjAxLjAwI0VsZWN0cmljYWwgdGVybWluYWxzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjAyLjAwI0VsZWN0cmljYWwgcGx1Z3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDMuMDAjVHdpc3QgbG9jayBwbHVncyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wNC4wMCNFbGVjdHJpY2FsIHNsZWV2ZXMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDUuMDAjQ2FibGUgb3Igd2lyZSBsdWdzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjA2LjAwI0VsZWN0cmljYWwgcmVjZXB0YWNsZXMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDcuMDAjVGVybWluYWwgc3RyaXBzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjA4LjAwI01lY2hhbmljYWwgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wOS4wMCNSaW5nIG9yIGZsYWcgdGVybWluYWxzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjEwLjAwI1dpcmUgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xMS4wMCNUZXJtaW5hbCBibG9ja3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTIuMDAjRnVzZSBibG9ja3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTMuMDAjQmFja3NoZWxsIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTQuMDAjQ2lyY3VsYXIgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xNS4wMCNDb2F4aWFsIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTYuMDAjRmxhdCBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjE3LjAwI0VsZWN0cm9uaWMgY29ubmVjdG9yIGNhcHMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTguMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xOS4wMCNFbGVjdHJpY2FsIG1ldGFsbGljIHR1YmluZyAoRU1UKSBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjIwLjAwI0NvbXByZXNzaW9uIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjEuMDAjU2V0IHNjcmV3IGNvdXBsaW5ncyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yMi4wMCNGbGV4IGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjMuMDAjTGlxdWlkIHRpZ2h0IGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjQuMDAjQ29ubmVjdG9yIGFzc2VtYmxpZXMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjUuMDAjTWVjaGFuaWNhbCBjb3VwbGluZ3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjYuMDAjU3ByaW5nIGphdyBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjI3LjAwI1Rlcm1pbmFsIGJsb2NrIGNvdmVycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yOC4wMCNUZXJtaW5hbCBibG9jayBzZXBhcmF0b3IjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjkuMDAjSnVtcGVyIGJhciMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4zMC4wMCNXaXJpbmcgdGFwcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4zMS4wMCNFbGVjdHJpY2FsIHRhcHMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMzIuMDAjRmliZXIgb3B0aWMgY29ubmVjdG9yIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjAwLjAwI1N3aXRjaGVzIGFuZCBjb250cm9scyBhbmQgcmVsYXlzIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjAxLjAwI1NhZmV0eSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wMi4wMCNEaW1tZXIgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDMuMDAjRHJ1bSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wNC4wMCNUaW1lIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjA1LjAwI1NuYXAgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDYuMDAjTWVjaGFuaWNhbCBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wNy4wMCNQcmVzc3VyZSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wOC4wMCNUb2dnbGUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDkuMDAjU2xpZGUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTAuMDAjTGltaXQgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTEuMDAjQ29udHJvbGxlciBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xMi4wMCNWYXJpYWJsZSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xMy4wMCNQdXNoIGJ1dHRvbiBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xNC4wMCNSb3Rhcnkgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTUuMDAjUG93ZXIgcmVsYXlzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjE2LjAwI0dlbmVyYWwgcHVycG9zZSByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTcuMDAjU29ja2V0IHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xOC4wMCNBbHRlcm5hdGluZyB2b2x0YWdlIHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xOS4wMCNNZXJjdXJ5IHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yMC4wMCNUaW1lIHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yMS4wMCNPdmVybG9hZCByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjIuMDAjTW90b3Igc3RhcnRlciBjb250cm9scyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yMy4wMCNFbGVjdHJpY2FsIGNvbnRhY3RzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI0LjAwI1RpbWVyIGNvbnRyb2xzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI1LjAwI1Bob3RvY29udHJvbHMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjYuMDAjTm9uIGZ1c2libGUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjcuMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjguMDAjUHJveGltaXR5IHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI5LjAwI0VuY29kZXJzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjMwLjAwI1Bob3RvZWxlY3RyaWMgc2Vuc29ycyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4zMS4wMCNDb250YWN0b3JzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjAwLjAwI0NpcmN1aXQgcHJvdGVjdGlvbiBkZXZpY2VzIGFuZCBhY2Nlc3NvcmllcyMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wMS4wMCNDaXJjdWl0IGJyZWFrZXJzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjAyLjAwI01hZ25ldGljIGNpcmN1aXQgYnJlYWtlcnMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDMuMDAjTWluaWF0dXJlIGNpcmN1aXQgYnJlYWtlcnMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDQuMDAjVGltZSBkZWxheSBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wNS4wMCNQbHVnIGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjA2LjAwI0NhcnRyaWRnZSBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wNy4wMCNHbGFzcyBib2R5IGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjA4LjAwI0NsYXNzIHR5cGUgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDkuMDAjTWlkZ2V0IGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjEwLjAwI1N1cmdlIHN1cHByZXNzZXJzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjExLjAwI0NlcmFtaWMgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMTIuMDAjQmxhZGUgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDAuMDAjRWxlY3RyaWNhbCBoYXJkd2FyZSBhbmQgc3VwcGxpZXMjMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDEuMDAjRWxlY3RyaWNhbCBoYW5nZXJzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjAyLjAwI0NhYmxlIGNsaXBzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjAzLjAwI0NhYmxlIHRpZXMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDQuMDAjV2FsbHBsYXRlcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wNS4wMCNTd2l0Y2hwbGF0ZXMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDYuMDAjQ2FibGUgY2xhbXBzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjA3LjAwI1RyYW5zZm9ybWVyIGJ1c2hpbmdzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjA4LjAwI0hhcm5lc3MgYm9hcmQgbmFpbHMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDkuMDAjRGluIFJhaWwjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTAuMDAjSGFuZGxlIHRpZSMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xMS4wMCNFbGVjdHJpY2FsIHJlY2VwdGFjbGUgbXVsdGlwbGllcnMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTIuMDAjVHViaW5ncyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xMy4wMCNFbmQgY2FwcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xNC4wMCNTcGlyYWwgd3JhcHBpbmcjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTUuMDAjR3JvbW1ldCBlZGdpbmcjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTYuMDAjQ29ycnVnYXRlZCBsb29tIHR1YmVzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjE3LjAwI0V4cGFuZGFibGUgYnJhaWRlZCBzbGVldmUjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTguMDAjQ2FibGUgdGllIG1vdW50cyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4wMC4wMC4wMCNQZXJtYW5lbnQgc3RydWN0dXJlcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wMC4wMCNDb21tZXJjaWFsIGFuZCBlbnRlcnRhaW5tZW50IHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDEuMDAjU2hvcHBpbmcgbWFsbHMjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDIuMDAjUGFya2luZyBzdHJ1Y3R1cmVzIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjAzLjAwI0NhZmV0ZXJpYSMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wNC4wMCNTaG9wIGJ1aWxkaW5ncyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wNS4wMCNTaG9wcGluZyBjZW50ZXIjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDYuMDAjQ2FudGVlbiMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wNy4wMCNUaGVhdGVyIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjA4LjAwI0F1ZGl0b3JpdW0jMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDkuMDAjTWFya2V0IzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjEwLjAwI0NoaWxkcmVucyBwbGF5IGFyZWEjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMTEuMDAjWm9vIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjEyLjAwI0dhcmRlbnMjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMTMuMDAjUGFya3MjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMTQuMDAjV2F0ZXJzaWRlIGxlaXN1cmUgZmFjaWxpdGllcyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wMC4wMCNUcmFuc3BvcnQgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wMS4wMCNTdGVlbCBicmlkZ2VzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjAyLjAwI0RyeSBkb2NrIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjAzLjAwI0J1cyBzdGF0aW9uIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA0LjAwI0J1cyBnYXJhZ2UjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDUuMDAjU2VydmljZSBhcmVhIGJ1aWxkaW5nIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA2LjAwI1JhaWx3YXkgc3RhdGlvbiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wNy4wMCNSYWlsd2F5IGRlcG90IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA4LjAwI1VuZGVyZ3JvdW5kIHJhaWx3YXkgc3RhdGlvbiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wOS4wMCNSYWlsIHRlcm1pbmFsIGJ1aWxkaW5nIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjEwLjAwI1RyYW13YXkgZGVwb3QjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTEuMDAjVHJhbXdheSBwbGF0Zm9ybXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTIuMDAjQWlycG9ydCBidWlsZGluZ3MjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTMuMDAjQWlycG9ydCBjb250cm9sIHRvd2VyIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE0LjAwI0FpcmZpZWxkIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE1LjAwI1J1bndheSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xNi4wMCNRdWF5IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE3LjAwI1BpZXIjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTguMDAjRG9jayMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xOS4wMCNXaGFyZiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yMC4wMCNNYXJpbmEjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjEuMDAjWWFjaHQgaGFyYm9yIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjIyLjAwI0JyZWFrd2F0ZXIjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjMuMDAjU2Vhd2FsbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yNC4wMCNGZXJyeSB0ZXJtaW5hbCBidWlsZGluZyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yNS4wMCNSbyBybyB0ZXJtaW5hbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yNi4wMCNMaWdodGhvdXNlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI3LjAwI1JvYWQgYnJpZGdlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI4LjAwI1JhaWx3YXkgYnJpZGdlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI5LjAwI0Zvb3RicmlkZ2UjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzAuMDAjUm9hZCB2aWFkdWN0IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjMxLjAwI1JhaWx3YXkgdmlhZHVjdCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zMi4wMCNVbmRlcnBhc3MjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzMuMDAjT3ZlcnBhc3MjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzQuMDAjU3Vid2F5IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM1LjAwI0N1bHZlcnRzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM2LjAwI1JvYWQgdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM3LjAwI1JhaWx3YXkgdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM4LjAwI1BlZGVzdHJpYW4gdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM5LjAwI0NhbmFsIHR1bm5lbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40MC4wMCNVbmRlciByaXZlciB0dW5uZWwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDEuMDAjVW5kZXJzZWEgdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQyLjAwI0hpZ2h3YXlzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQzLjAwI0Nyb3Nzcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40NC4wMCNSaW5nIHJvYWQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDUuMDAjVHJ1bmsgcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40Ni4wMCNTZWNvbmRhcnkgcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40Ny4wMCNBY2Nlc3Mgcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40OC4wMCNTbGlwIHJvYWQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDkuMDAjRHVhbCBjYXJyaWFnZXdheSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41MC4wMCNTaW5nbGUgY2FycmlhZ2V3YXkjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTEuMDAjUm9hZCBqdW5jdGlvbiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41Mi4wMCNQZWRlc3RyaWFuIHdheXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTMuMDAjUGVkZXN0cmlhbiBvdmVycGFzcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41NC4wMCNGb290cGF0aCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41NS4wMCNDeWNsZSBwYXRoIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjU2LjAwI1BpcGVsaW5lIGNhcnJ5aW5nIGJyaWRnZSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41Ny4wMCNQaXBlbGluZXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTguMDAjUHVtcGluZyBzdGF0aW9uIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjU5LjAwI1Nld2FnZSBwdW1waW5nIHN0YXRpb25zIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjYwLjAwI1Nld2FnZSBvdXRmYWxsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjYxLjAwI1BhcmtpbmcgbG90IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjYyLjAwI1Bhcmtpbmcgc3RydWN0dXJlcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC42My4wMCNNb3RvcndheSBzZXJ2aWNlIGFyZWEjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDAuMDAjUHVibGljIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDEuMDAjUG9zdCBvZmZpY2UjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDIuMDAjQmFuayMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wMy4wMCNQb2xpY2Ugc3RhdGlvbiMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wNC4wMCNDb3VydCBidWlsZGluZyMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wNS4wMCNQcmlzb24gYnVpbGRpbmcjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDYuMDAjRmlyZSBzdGF0aW9uIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjA3LjAwI0FtYnVsYW5jZSBzdGF0aW9uIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjA4LjAwI01vdW50YWluIHJlc2N1ZSBidWlsZGluZyMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wOS4wMCNMaWZlYm9hdCBzdGF0aW9uIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjEwLjAwI0NvYXN0Z3VhcmQgYnVpbGRpbmcjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTEuMDAjUmVzY3VlIHNlcnZpY2Ugc3RhdGlvbiMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4xMi4wMCNDaXZpYyBjZW50ZXIjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTMuMDAjQ3JlbWF0b3JpdW0jMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTQuMDAjQXJ0IGdhbGxlcnkjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTUuMDAjUHJlaGlzdG9yaWMgbW9udW1lbnQjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTYuMDAjVGlja2V0IG9mZmljZXMjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDAuMDAjVXRpbGl0aWVzIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDEuMDAjUmFkYXIgc3RhdGlvbiMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wMi4wMCNTdWJzdGF0aW9uIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjAzLjAwI051Y2xlYXIgcG93ZXIgc3RhdGlvbiMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wNC4wMCNXYXRlciB0b3dlciMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wNS4wMCNXZWxscyMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wNi4wMCNNb2JpbGUgdGVsZXBob25lIGJhc2Ugc3RhdGlvbnMjMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDcuMDAjRGFtIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjA4LjAwI09pbCBvciBnYXMgcGxhdGZvcm1zIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjAwLjAwI0VkdWNhdGlvbmFsIGFuZCByZXNlYXJjaCBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjAxLjAwI1NjaG9vbHMjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDIuMDAjUG9seXRlY2huaWMjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDMuMDAjVm9jYXRpb25hbCBjb2xsZWdlIzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjA0LjAwI0xlY3R1cmUgdGhlYXRlciMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wNS4wMCNMaWJyYXJ5IzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjA2LjAwI0xhbmd1YWdlIGxhYm9yYXRvcnkjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDcuMDAjTGFib3JhdG9yeSBidWlsZGluZyMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wOC4wMCNNZXRlb3JvbG9naWNhbCBzdGF0aW9ucyMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wOS4wMCNSZXNlYXJjaCBvciB0ZXN0aW5nIGZhY2lsaXRpZXMjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDAuMDAjSG9zcGl0YWwgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wMS4wMCNDbGluaWMjMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDIuMDAjTnVyc2luZyBob21lIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjAzLjAwI09wZXJhdGluZyB0aGVhdGVyIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjA0LjAwI0ludGVuc2l2ZSBjYXJlIHVuaXQjMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDUuMDAjRGlhZ25vc3RpYyBzY3JlZW5pbmcgcm9vbSMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wNi4wMCNTY3JlZW5pbmcgcm9vbXMjMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDcuMDAjRmx1b3Jvc2NvcHkgcm9vbSMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wOC4wMCNQYXRob2xvZ3kgcm9vbSMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wOS4wMCNDYXRoZXRlciByb29tIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjAwLjAwI0FjY29tbW9kYXRpb24gc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wMS4wMCNSZXNpZGVudGlhbCBob21lcyMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wMi4wMCNGbGF0cyMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wMy4wMCNDaGlsZHJlbnMgaG9tZSMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wNC4wMCNEYXljYXJlIGNlbnRlciMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wNS4wMCNSZXRpcmVtZW50IGhvbWUjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDYuMDAjT2xkIHBlb3BsZXMgaG9tZSMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wNy4wMCNIb3N0ZWwjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDAuMDAjU3BvcnRzIGFuZCBoZWFsdGggc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wMS4wMCNTdGFkaXVtIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjAyLjAwI1Nwb3J0cyBncm91bmQjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDMuMDAjUnVubmluZyB0cmFjayMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wNC4wMCNTcG9ydHMgaGFsbCMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wNS4wMCNTcGEjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDYuMDAjR3ltbmFzaXVtIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjA3LjAwI1N3aW1taW5nIHBvb2wjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDguMDAjV2F0ZXIgc3BvcnRzIGZhY2lsaXRpZXMjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjcuMDAuMDAjSW5kdXN0cmlhbCBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI3LjAxLjAwI1dvcmtzaG9wcyMzMC4yMi4yNy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNy4wMi4wMCNDb2xkIHN0b3JhZ2UgaW5zdGFsbGF0aW9ucyMzMC4yMi4yNy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNy4wMy4wMCNXYXJlaG91c2Ugc3RvcmVzIzMwLjIyLjI3LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI4LjAwLjAwI0FncmljdWx0dXJhbCBhbmQgZmFybWluZyBhbmQgZmlzaGluZyBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI4LjAxLjAwI0Jhcm4jMzAuMjIuMjguMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjguMDIuMDAjQ293c2hlZHMjMzAuMjIuMjguMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjguMDMuMDAjSXJyaWdhdGlvbiBjaGFubmVsIzMwLjIyLjI4LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI5LjAwLjAwI0RlZmVuc2Ugc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOS4wMS4wMCNNaWxpdGFyeSBidW5rZXIjMzAuMjIuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjkuMDIuMDAjTWlsaXRhcnkgc2hlbHRlciMzMC4yMi4yOS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOS4wMy4wMCNCYXJyYWNrcyMzMC4yMi4yOS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOS4wNC4wMCNNaWxpdGFyeSBtZXNzIzMwLjIyLjI5LjAwLjAwCi11bnNwc2M3IzMwLjIyLjMwLjAwLjAwI1JlbGlnaW91cyBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjMwLjAxLjAwI0NodXJjaGVzIzMwLjIyLjMwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjMwLjAyLjAwI1RlbXBsZXMjMzAuMjIuMzAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMzAuMDMuMDAjTW9zcXVlcyMzMC4yMi4zMC4wMC4wMAotdW5zcHNjNyMzMS4wMC4wMC4wMC4wMCNNYW51ZmFjdHVyaW5nIENvbXBvbmVudHMgYW5kIFN1cHBsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjAwLjAwLjAwI0Nhc3RpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjAwLjAwI0RpZSBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wMS4wMCNBbHVtaW51bSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDIuMDAjRmVycm91cyBhbGxveSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDMuMDAjSXJvbiBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDYuMDAjU3RlZWwgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjA3LjAwI01hZ25lc2l1bSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDguMDAjWmluYyBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDkuMDAjVGluIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xMC4wMCNUaXRhbml1bSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTEuMDAjQmVyeWxsaXVtIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xMi4wMCNQcmVjaW91cyBtZXRhbCBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTMuMDAjQ29wcGVyIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xNC4wMCNMZWFkIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xNS4wMCNCcmFzcyBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTYuMDAjQnJvbnplIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wMC4wMCNTYW5kIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDIuMDAjRmVycm91cyBhbGxveSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjAzLjAwI1N0ZWVsIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDUuMDAjSXJvbiBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjA2LjAwI0FsdW1pbnVtIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDcuMDAjTWFnbmVzaXVtIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDguMDAjVGl0YW5pdW0gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wOS4wMCNCZXJ5bGxpdW0gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xMC4wMCNDb3BwZXIgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xMS4wMCNCcmFzcyBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjEyLjAwI0Jyb256ZSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjEzLjAwI1ppbmMgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xNC4wMCNUaW4gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xNS4wMCNMZWFkIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMTYuMDAjUHJlY2lvdXMgbWV0YWwgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wMC4wMCNQZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wMS4wMCNOb24gZmVycm91cyBhbGxveSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wMi4wMCNGZXJyb3VzIGFsbG95IHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjAzLjAwI1N0ZWVsIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wNS4wMCNJcm9uIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA2LjAwI0FsdW1pbnVtIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA3LjAwI01hZ25lc2l1bSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wOC4wMCNUaXRhbml1bSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wOS4wMCNCZXJ5bGxpdW0gcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMTAuMDAjQ29wcGVyIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjExLjAwI0JyYXNzIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjEyLjAwI0Jyb256ZSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xMy4wMCNaaW5jIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjE0LjAwI1RpbiBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xNS4wMCNMZWFkIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjE2LjAwI1ByZWNpb3VzIG1ldGFsIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjAwLjAwI1NoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wMi4wMCNGZXJyb3VzIGFsbG95IHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDMuMDAjU3RlZWwgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wNS4wMCNJcm9uIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDYuMDAjQWx1bWludW0gc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wNy4wMCNNYWduZXNpdW0gc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wOC4wMCNUaXRhbml1bSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjA5LjAwI0JlcnlsbGl1bSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjEwLjAwI0NvcHBlciBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjExLjAwI0JyYXNzIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTIuMDAjQnJvbnplIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTMuMDAjWmluYyBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjE0LjAwI1RpbiBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjE1LjAwI0xlYWQgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4xNi4wMCNQcmVjaW91cyBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjAwLjAwI0ludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wMi4wMCNGZXJyb3VzIGFsbG95IGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDMuMDAjU3RlZWwgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wNS4wMCNJcm9uIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDYuMDAjQWx1bWludW0gaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wNy4wMCNNYWduZXNpdW0gaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wOC4wMCNaaW5jIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDkuMDAjVGluIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMTAuMDAjTGVhZCBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjExLjAwI1ByZWNpb3VzIG1ldGFsIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMTIuMDAjVGl0YW5pdW0gaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wMC4wMCNDZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wMi4wMCNGZXJyb3VzIGFsbG95IGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjAzLjAwI1N0ZWVsIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wNS4wMCNJcm9uIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA2LjAwI0FsdW1pbnVtIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA3LjAwI01hZ25lc2l1bSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wOC4wMCNUaXRhbml1bSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wOS4wMCNCZXJ5bGxpdW0gY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMTAuMDAjQ29wcGVyIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjExLjAwI0JyYXNzIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjEyLjAwI0Jyb256ZSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xMy4wMCNaaW5jIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjE0LjAwI1RpbiBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xNS4wMCNMZWFkIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjAwLjAwI0NlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDIuMDAjRmVycm91cyBhbGxveSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDMuMDAjU3RlZWwgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDUuMDAjSXJvbiBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDYuMDAjQWx1bWludW0gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA3LjAwI01hZ25lc2l1bSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDguMDAjVGl0YW5pdW0gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA5LjAwI0JlcnlsbGl1bSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTAuMDAjQ29wcGVyIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xMS4wMCNCcmFzcyBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTIuMDAjQnJvbnplIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xMy4wMCNaaW5jIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xNC4wMCNUaW4gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjE1LjAwI0xlYWQgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wMC4wMCNHcmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDIuMDAjRmVycnJvdXMgYWxsb3kgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wMy4wMCNTdGVlbCBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA1LjAwI0lyb24gZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wNi4wMCNBbHVtaW51bSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA3LjAwI01hZ25lc2l1bSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA4LjAwI1RpdGFuaXVtIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDkuMDAjQmVyeWxsaXVtIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTAuMDAjQ29wcGVyIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTEuMDAjQnJhc3MgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xMi4wMCNCcm9uemUgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xMy4wMCNaaW5jIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTQuMDAjVGluIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTUuMDAjTGVhZCBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjE2LjAwI1ByZWNpb3VzIG1ldGFsIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDAuMDAjUGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wMi4wMCNGZXJyb3VzIGFsbG95IHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wMy4wMCNTdGVlbCBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wNS4wMCNJcm9uIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wNi4wMCNBbHVtaW51bSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDcuMDAjTWFnbmVzaXVtIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wOC4wMCNUaXRhbml1bSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDkuMDAjQmVyeWxsaXVtIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xMC4wMCNDb3BwZXIgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjExLjAwI0JyYXNzIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xMi4wMCNCcm9uemUgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjEzLjAwI1ppbmMgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjE0LjAwI1RpbiBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTUuMDAjTGVhZCBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTYuMDAjUHJlY2lvdXMgbWV0YWwgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjAwLjAwI1YgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wMS4wMCNOb24gZmVycm91cyBhbGxveSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDIuMDAjRmVycm91cyBhbGxveSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDMuMDAjU3RlZWwgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA0LjAwI1N0YWlubGVzcyBzdGVlbCB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDUuMDAjSXJvbiB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDYuMDAjQWx1bWludW0gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA3LjAwI01hZ25lc2l1bSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDguMDAjVGl0YW5pdW0gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA5LjAwI0JlcnlsbGl1bSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTAuMDAjQ29wcGVyIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xMS4wMCNCcmFzcyB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTIuMDAjQnJvbnplIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xMy4wMCNaaW5jIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xNC4wMCNUaW4gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjE1LjAwI0xlYWQgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjE2LjAwI1ByZWNpb3VzIG1ldGFsIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMS4wMC4wMC4wMCNFeHRydXNpb25zIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjAwLjAwI1Byb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wMS4wMCNBbHVtaW51bSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDIuMDAjQmVyeWxsaXVtIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wMy4wMCNCcmFzcyBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDQuMDAjQnJvbnplIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wNS4wMCNDb3BwZXIgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA2LjAwI0ZlcnJvdXMgYWxsb3kgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA3LjAwI0xlYWQgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA4LjAwI01hZ25lc2l1bSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjEwLjAwI1BsYXN0aWMgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjExLjAwI1ByZWNpb3VzIG1ldGFsIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xMi4wMCNSdWJiZXIgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjEzLjAwI1N0YWlubGVzcyBzdGVlbCBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTQuMDAjU3RlZWwgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjE1LjAwI1RpbiBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTYuMDAjVGl0YW5pdW0gcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjE3LjAwI1ppbmMgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjAwLjAwI0ltcGFjdCBleHRydXNpb25zIzMxLjExLjAwLjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjAxLjAwI0FsdW1pbnVtIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjAyLjAwI0JlcnlsbGl1bSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wMy4wMCNCcmFzcyBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wNC4wMCNCcm9uemUgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDUuMDAjQ29wcGVyIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjA2LjAwI0ZlcnJvdXMgYWxsb3kgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDcuMDAjTGVhZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wOC4wMCNNYWduZXNpdW0gaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTAuMDAjUGxhc3RpYyBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xMS4wMCNQcmVjaW91cyBtZXRhbCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xMi4wMCNSdWJiZXIgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTMuMDAjU3RhaW5sZXNzIHN0ZWVsIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjE0LjAwI1N0ZWVsIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjE1LjAwI1RpbiBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xNi4wMCNUaXRhbml1bSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xNy4wMCNaaW5jIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjAwLjAwI0NvbGQgZXh0cnVzaW9ucyMzMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wMS4wMCNBbHVtaW51bSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDIuMDAjQmVyeWxsaXVtIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wMy4wMCNCcmFzcyBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDQuMDAjQnJvbnplIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wNS4wMCNDb3BwZXIgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA2LjAwI0ZlcnJvdXMgYWxsb3kgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA3LjAwI0xlYWQgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA4LjAwI01hZ25lc2l1bSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjEwLjAwI1BsYXN0aWMgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjExLjAwI1ByZWNpb3VzIG1ldGFsIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xMi4wMCNSdWJiZXIgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjEzLjAwI1N0YWlubGVzcyBzdGVlbCBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTQuMDAjU3RlZWwgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjE1LjAwI1RpbiBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTYuMDAjVGl0YW5pdW0gY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjE3LjAwI1ppbmMgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjAwLjAwLjAwI01hY2hpbmVkIGNhc3RpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjAwLjAwI01hY2hpbmVkIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wMS4wMCNOb24gZmVycm91cyBhbGxveSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDIuMDAjRmVycm91cyBhbGxveSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDMuMDAjU3RlZWwgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA0LjAwI1N0YWlubGVzcyBzdGVlbCB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDUuMDAjSXJvbiB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDYuMDAjQWx1bWludW0gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA3LjAwI01hZ25lc2l1bSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDguMDAjVGl0YW5pdW0gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA5LjAwI0JlcnlsbGl1bSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTAuMDAjQ29wcGVyIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xMS4wMCNCcmFzcyB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTIuMDAjQnJvbnplIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xMy4wMCNaaW5jIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xNC4wMCNUaW4gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE1LjAwI0xlYWQgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE2LjAwI1ByZWNpb3VzIG1ldGFsIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xNy4wMCNDb21wb3NpdGUgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE4LjAwI05pY2tlbCBhbGxveSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTkuMDAjTm9uIG1ldGFsbGljIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wMC4wMCNNYWNoaW5lZCBkaWUgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDEuMDAjQWx1bWludW0gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjAyLjAwI0ZlcnJvdXMgYWxsb3kgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjAzLjAwI0lyb24gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA0LjAwI05vbiBmZXJyb3VzIGFsbG95IGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA2LjAwI1N0ZWVsIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wNy4wMCNNYWduZXNpdW0gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA4LjAwI1ppbmMgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA5LjAwI1RpbiBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTAuMDAjVGl0YW5pdW0gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjExLjAwI0JlcnlsbGl1bSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTIuMDAjUHJlY2lvdXMgbWV0YWwgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjEzLjAwI0NvcHBlciBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTQuMDAjTGVhZCBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTUuMDAjQnJhc3MgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjE2LjAwI0Jyb256ZSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTcuMDAjQ29tcG9zaXRlIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xOC4wMCNOaWNrZWwgQWxsb3kgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjE5LjAwI05vbiBtZXRhbGxpYyBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDAuMDAjTWFjaGluZWQgc2FuZCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wMS4wMCNOb24gZmVycm91cyBhbGxveSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjAyLjAwI0ZlcnJvdXMgYWxsb3kgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wMy4wMCNTdGVlbCBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA1LjAwI0lyb24gc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wNi4wMCNBbHVtaW51bSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA3LjAwI01hZ25lc2l1bSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA4LjAwI1RpdGFuaXVtIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDkuMDAjQmVyeWxsaXVtIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTAuMDAjQ29wcGVyIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTEuMDAjQnJhc3Mgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xMi4wMCNCcm9uemUgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xMy4wMCNaaW5jIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTQuMDAjVGluIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTUuMDAjTGVhZCBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjE2LjAwI1ByZWNpb3VzIG1ldGFsIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTcuMDAjQ29tcG9zaXRlIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTguMDAjTmlja2VsIEFsbG95IHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTkuMDAjTm9uIG1ldGFsbGljIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDAuMDAjTWFjaGluZWQgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDIuMDAjRmVycm91cyBhbGxveSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wMy4wMCNTdGVlbCBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDUuMDAjSXJvbiBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wNi4wMCNBbHVtaW51bSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wNy4wMCNNYWduZXNpdW0gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDguMDAjVGl0YW5pdW0gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDkuMDAjQmVyeWxsaXVtIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjEwLjAwI0NvcHBlciBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xMS4wMCNCcmFzcyBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xMi4wMCNCcm9uemUgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTMuMDAjWmluYyBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xNC4wMCNUaW4gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTUuMDAjTGVhZCBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xNi4wMCNQcmVjaW91cyBtZXRhbCBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xNy4wMCNDb21wb3NpdGUgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTguMDAjTmlja2VsIGFsbG95IHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjE5LjAwI05vbiBtZXRhbGxpYyBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wMC4wMCNNYWNoaW5lZCBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjAyLjAwI0ZlcnJvdXMgYWxsb3kgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjAzLjAwI1N0ZWVsIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA1LjAwI0lyb24gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA2LjAwI0FsdW1pbnVtIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wNy4wMCNNYWduZXNpdW0gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA4LjAwI1RpdGFuaXVtIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wOS4wMCNCZXJ5bGxpdW0gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjEwLjAwI0NvcHBlciBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTEuMDAjQnJhc3MgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjEyLjAwI0Jyb256ZSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTMuMDAjWmluYyBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTQuMDAjVGluIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xNS4wMCNMZWFkIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xNi4wMCNQcmVjaW91cyBtZXRhbCBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTcuMDAjQ29tcG9zaXRlIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xOC4wMCNOaWNrZWwgYWxsb3kgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjE5LjAwI05vbiBtZXRhbGxpYyBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDAuMDAjTWFjaGluZWQgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjAyLjAwI0ZlcnJvdXMgYWxsb3kgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wMy4wMCNTdGVlbCBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA1LjAwI0lyb24gc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wNi4wMCNBbHVtaW51bSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA3LjAwI01hZ25lc2l1bSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA4LjAwI1RpdGFuaXVtIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDkuMDAjQmVyeWxsaXVtIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTAuMDAjQ29wcGVyIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTEuMDAjQnJhc3Mgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xMi4wMCNCcm9uemUgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xMy4wMCNaaW5jIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTQuMDAjVGluIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTUuMDAjTGVhZCBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjE2LjAwI1ByZWNpb3VzIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTcuMDAjQ29tcG9zaXRlIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTguMDAjTmlja2VsIGFsbG95IHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTkuMDAjTm9uIG1ldGFsbGljIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDAuMDAjTWFjaGluZWQgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wMS4wMCNOb24gZmVycm91cyBhbGxveSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjAyLjAwI0ZlcnJvdXMgYWxsb3kgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wMy4wMCNTdGVlbCBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA1LjAwI0lyb24gaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wNi4wMCNBbHVtaW51bSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA3LjAwI01hZ25lc2l1bSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA4LjAwI1ppbmMgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wOS4wMCNUaW4gaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4xMC4wMCNMZWFkIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMTEuMDAjUHJlY2lvdXMgbWV0YWwgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4xMi4wMCNUaXRhbml1bSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjEzLjAwI0NvbXBvc2l0ZSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjE0LjAwI05pY2tlbCBhbGxveSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjE1LjAwI05vbiBtZXRhbGxpYyBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjAwLjAwI01hY2hpbmVkIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjAyLjAwI0ZlcnJvdXMgYWxsb3kgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDMuMDAjU3RlZWwgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA1LjAwI0lyb24gY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDYuMDAjQWx1bWludW0gY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDcuMDAjTWFnbmVzaXVtIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA4LjAwI1RpdGFuaXVtIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA5LjAwI0JlcnlsbGl1bSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xMC4wMCNDb3BwZXIgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTEuMDAjQnJhc3MgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTIuMDAjQnJvbnplIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjEzLjAwI1ppbmMgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTQuMDAjVGluIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjE1LjAwI0xlYWQgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTYuMDAjUHJlY2lvdXMgbWV0YWwgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTcuMDAjQ29tcG9zaXRlIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjE4LjAwI05pY2tlbCBhbGxveSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xOS4wMCNOb24gbWV0YWxsaWMgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDAuMDAjTWFjaGluZWQgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wMi4wMCNGZXJyb3VzIGFsbG95IGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wMy4wMCNTdGVlbCBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wNS4wMCNJcm9uIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wNi4wMCNBbHVtaW51bSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDcuMDAjTWFnbmVzaXVtIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wOC4wMCNUaXRhbml1bSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDkuMDAjQmVyeWxsaXVtIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xMC4wMCNDb3BwZXIgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjExLjAwI0JyYXNzIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xMi4wMCNCcm9uemUgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjEzLjAwI1ppbmMgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjE0LjAwI1RpbiBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTUuMDAjTGVhZCBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTYuMDAjUHJlY2lvdXMgbWV0YWwgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjE3LjAwI0NvbXBvc2l0ZSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTguMDAjTmlja2VsIGFsbG95IGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xOS4wMCNOb24gbWV0YWxsaWMgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjAwLjAwI01hY2hpbmVkIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wMi4wMCNGZXJycm91cyBhbGxveSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjAzLjAwI1N0ZWVsIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDUuMDAjSXJvbiBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjA2LjAwI0FsdW1pbnVtIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDcuMDAjTWFnbmVzaXVtIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDguMDAjVGl0YW5pdW0gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wOS4wMCNCZXJ5bGxpdW0gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xMC4wMCNDb3BwZXIgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xMS4wMCNCcmFzcyBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjEyLjAwI0Jyb256ZSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjEzLjAwI1ppbmMgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xNC4wMCNUaW4gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xNS4wMCNMZWFkIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTYuMDAjUHJlY2lvdXMgbWV0YWwgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xNy4wMCNDb21wb3NpdGUgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xOC4wMCNOaWNrZWwgYWxsb3kgbWV0YWwgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xOS4wMCNOb24gbWV0YWxsaWMgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4wMC4wMC4wMCNGb3JnaW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wMC4wMCNPcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wMi4wMCNGZXJyb3VzIGFsbG95IG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjAzLjAwI1N0ZWVsIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wNS4wMCNJcm9uIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA2LjAwI0FsdW1pbnVtIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA3LjAwI01hZ25lc2l1bSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wOC4wMCNUaXRhbml1bSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wOS4wMCNCZXJ5bGxpdW0gb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMTAuMDAjQ29wcGVyIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjExLjAwI0JyYXNzIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjEyLjAwI0Jyb256ZSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xMy4wMCNaaW5jIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjE0LjAwI1RpbiBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xNS4wMCNMZWFkIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjE2LjAwI1ByZWNpb3VzIG1ldGFsIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjAwLjAwI0Nsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wMi4wMCNGZXJyb3VzIGFsbG95IGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDMuMDAjU3RlZWwgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wNS4wMCNJcm9uIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDYuMDAjQWx1bWludW0gY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wNy4wMCNNYWduZXNpdW0gY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wOC4wMCNUaXRhbml1bSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjA5LjAwI0JlcnlsbGl1bSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjEwLjAwI0NvcHBlciBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjExLjAwI0JyYXNzIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTIuMDAjQnJvbnplIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTMuMDAjWmluYyBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjE0LjAwI1RpbiBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjE1LjAwI0xlYWQgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4xNi4wMCNQcmVjaW91cyBtZXRhbCBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjAwLjAwI0ltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjAyLjAwI0ZlcnJvdXMgYWxsb3kgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDMuMDAjU3RlZWwgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA1LjAwI0lyb24gaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDYuMDAjQWx1bWludW0gaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDcuMDAjTWFnbmVzaXVtIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA4LjAwI1RpdGFuaXVtIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA5LjAwI0JlcnlsbGl1bSBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4xMC4wMCNDb3BwZXIgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTEuMDAjQnJhc3MgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTIuMDAjQnJvbnplIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjEzLjAwI1ppbmMgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTQuMDAjVGluIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjE1LjAwI0xlYWQgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTYuMDAjUHJlY2lvdXMgbWV0YWwgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDAuMDAjRHJvcCBmb3JnaW5ncyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjAyLjAwI1ppbmMgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wMy4wMCNGZXJyb3VzIGFsbG95IGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDQuMDAjVGluIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDUuMDAjTGVhZCBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjA2LjAwI1N0ZWVsIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDcuMDAjUHJlY2lvdXMgbWV0YWwgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wOC4wMCNTdGFpbmxlc3Mgc3RlZWwgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wOS4wMCNJcm9uIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTAuMDAjQWx1bWludW0gZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xMS4wMCNNYWduZXNpdW0gZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xMi4wMCNUaXRhbml1bSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjEzLjAwI0JlcnlsbGl1bSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjE0LjAwI0NvcHBlciBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjE1LjAwI0JyYXNzIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTYuMDAjQnJvbnplIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTcuMDAjQ29sZCBzdGVlbCBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjE4LjAwI1NlbWkgZmluaXNoZWQgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wMC4wMCNSb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wMS4wMCNBbHVtaW51bSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wMi4wMCNCZXJ5bGxpdW0gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDMuMDAjQnJhc3Mgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDQuMDAjQnJvbnplIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA1LjAwI0NvcHBlciByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wNi4wMCNJcm9uIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA3LjAwI0xlYWQgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDguMDAjTWFnbmVzaXVtIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA5LjAwI1ByZWNpb3VzIG1ldGFsIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjEwLjAwI1N0YWlubGVzcyBzdGVlbCByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xMS4wMCNUaW4gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTIuMDAjVGl0YW5pdW0gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTMuMDAjWmluYyByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xNC4wMCNOb24gZmVycm91cyBhbGxveSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xNS4wMCNGZXJyb3VzIGFsbG95IHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjE2LjAwI1N0ZWVsIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjIwLjAwLjAwI1Bvd2RlcmVkIG1ldGFsIGNvbXBvbmVudHMjMzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMjAuMDEuMDAjRmVycm91cyBwb3dkZXJlZCBtZXRhbCBjb21wb25lbnRzIzMxLjEzLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjIwLjAyLjAwI05vbiBmZXJyb3VzIHBvd2RlcmVkIG1ldGFsIHBhcnRzIzMxLjEzLjIwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjAwLjAwLjAwI01vbGRpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjE1LjAwLjAwI0luamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNS4wMS4wMCNQbGFzdGljIGluamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNS4wMi4wMCNSdWJiZXIgaW5qZWN0aW9uIG1vbGRpbmdzIzMxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE1LjAzLjAwI0dsYXNzIGluamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNi4wMC4wMCNWYWN1dW0gbW9sZGluZ3MjMzEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTYuMDEuMDAjUGxhc3RpYyB2YWN1dW0gbW9sZGluZ3MjMzEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTYuMDIuMDAjUnViYmVyIHZhY3V1bSBtb2xkaW5ncyMzMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNi4wMy4wMCNHbGFzcyB2YWN1dW0gbW9sZGluZ3MjMzEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTcuMDAuMDAjQmxvdyBtb2xkaW5ncyMzMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNy4wMS4wMCNQbGFzdGljIGJsb3cgbW9sZGluZ3MjMzEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTcuMDIuMDAjUnViYmVyIGJsb3cgbW9sZGluZ3MjMzEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTguMDAuMDAjUmVhY3Rpb24gaW5qZWN0aW9uIG1vbGRpbmdzIChSSU0pIzMxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjE4LjAxLjAwI1BsYXN0aWMgcmVhY3Rpb24gaW5qZWN0aW9uIG1vbGRpbmdzIzMxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE4LjAyLjAwI1J1YmJlciByZWFjdGlvbiBpbmplY3Rpb24gbW9sZGluZ3MjMzEuMTQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTUuMDAuMDAuMDAjUm9wZSBhbmQgY2hhaW4gYW5kIGNhYmxlIGFuZCB3aXJlIGFuZCBzdHJhcCMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wMC4wMCNSb3BlcyMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wMS4wMCNDb3R0b24gcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wMi4wMCNQb2x5ZXN0ZXIgcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wMy4wMCNQb2x5cHJvcHlsZW5lIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDQuMDAjTnlsb24gcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wNS4wMCNXaXJlIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDYuMDAjSGVtcCByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjA3LjAwI1N0cmluZyBvciB0d2luZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wOC4wMCNTaXNhbCByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjAwLjAwI0NoYWlucyMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wMS4wMCNTYWZldHkgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjAyLjAwI1NraWQgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjAzLjAwI1JvbGxlciBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDQuMDAjUHJvb2YgY29pbCBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDUuMDAjU2FzaCBjaGFpbiMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wNi4wMCNKYWNrIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wNy4wMCNDb2lsIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wOC4wMCNCYWxsIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wOS4wMCNDaGFpbiBsaW5rcyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wMC4wMCNNZWNoYW5pY2FsIGNhYmxlIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjAxLjAwI01lY2hhbmljYWwgY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjAyLjAwI05vbiBlbGVjdHJpYyBjb250cm9sIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wMy4wMCNMaWZ0aW5nIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wNC4wMCNUcmFjayBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDUuMDAjTm9uIGVsZWN0cmljYWwgc3RlZWwgY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjA2LjAwI05vbiBlbGVjdHJpY2FsIGNvcHBlciBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDcuMDAjTm9uIGVsZWN0cmljYWwgYWx1bWludW0gY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE4LjAwLjAwI01lY2hhbmljYWwgd2lyZSMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOC4wMS4wMCNNZWNoYW5pY2FsIHdpcmUjMzEuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTguMDIuMDAjQmFyYmVkIHdpcmUjMzEuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTguMDMuMDAjUGlhbm8gc3RlZWwgd2lyZSMzMS4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOS4wMC4wMCNTdHJhcHMjMzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTkuMDEuMDAjTWV0YWwgc3RyYXBzIzMxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE5LjAyLjAwI0xlYXRoZXIgc3RyYXBzIzMxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE5LjAzLjAwI0ZpYmVyIHN0cmFwcyMzMS4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOS4wNC4wMCNQbGFzdGljIHN0cmFwcyMzMS4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNS4yMC4wMC4wMCNTZWN1cml0eSB3aXJlIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjIwLjAxLjAwI1Jhem9yIHdpcmUjMzEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMjAuMDIuMDAjQmFyYmVkIHdpcmUjMzEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMjEuMDAuMDAjRWxlY3RyaWNhbCB3aXJlIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjIxLjAxLjAwI1dpcmUgYXNzZW1ibHkjMzEuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMDAuMDAuMDAjSGFyZHdhcmUjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDAuMDAjU2NyZXdzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjAxLjAwI0NhcCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDIuMDAjQW5jaG9yIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wMy4wMCNEcml2ZSBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDQuMDAjTWFjaGluZSBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDUuMDAjU2V0IHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wNi4wMCNTaGVldCBtZXRhbCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDcuMDAjVGFwcGluZyBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDguMDAjV29vZCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDkuMDAjRHJ5d2FsbCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTAuMDAjQ2FwdGl2ZSBzY3JldyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xMS4wMCNMb2NraW5nIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xMi4wMCNUaHJlYWQgcm9sbGluZyBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTMuMDAjRmxhdGhlYWQgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjE0LjAwI1dlbGQgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjE1LjAwI0ZsYXQgaGVhZCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTYuMDAjVGh1bWIgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjE3LjAwI1Nob3VsZGVyIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wMC4wMCNCb2x0cyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wMS4wMCNBbmNob3IgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDIuMDAjQmxpbmQgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDMuMDAjQ2FycmlhZ2UgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDQuMDAjQ2xldmlzIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA1LjAwI0N5bGluZGVyIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA2LjAwI0Rvb3IgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDcuMDAjRXhwYW5zaW9uIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA4LjAwI0xhZyBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wOS4wMCNUb2dnbGUgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTAuMDAjRXllIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjExLjAwI0xvY2tpbmcgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTIuMDAjUGluIG9yIGNvbGxhciBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xMy4wMCNUZW5zaW9uIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjE0LjAwI1N0cnVjdHVyYWwgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTUuMDAjVG9ycXVlIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjE2LjAwI1UgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTcuMDAjV2luZyBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xOC4wMCNUaHJlYWRlZCByb2QjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTkuMDAjU3R1ZCBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4yMC4wMCNIZXhhZ29uYWwgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDAuMDAjTnV0cyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wMS4wMCNBbmNob3IgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wMi4wMCNCZWFyaW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDMuMDAjQmxpbmQgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wNC4wMCNCYXJyZWwgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wNS4wMCNDYXAgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wNi4wMCNDYXB0aXZlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDcuMDAjQ2FzdGxlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDguMDAjQ2hhbm5lbCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjA5LjAwI0NsYW1waW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTAuMDAjRXhwYW5zaW9uIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTEuMDAjRXllIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTIuMDAjRmxhbmdlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTMuMDAjSG9zZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE0LjAwI0luc2VydCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE1LjAwI1NlbGYgbG9ja2luZyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE2LjAwI0xvY2tudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE3LjAwI1dpbmcgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xOC4wMCNUb2dnbGUgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xOS4wMCNTd2l2ZWwgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yMC4wMCNTdG9wIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjEuMDAjU3ByaW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjIuMDAjVW5pb24gbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yMy4wMCNOdXRwbGF0ZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI0LjAwI1ByZXNzIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjUuMDAjQ2xpcCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI2LjAwI0RvbWUgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yNy4wMCNIZXhhZ29uYWwgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yOC4wMCNDb3VwbGluZyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI5LjAwI0tudXJsZWQgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wMC4wMCNXYXNoZXJzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjAxLjAwI0xvY2tpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wMi4wMCNCZXZlbCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjAzLjAwI0JpbmRpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wNC4wMCNDdXJ2ZWQgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wNS4wMCNFbGVjdHJpY2FsIGluc3VsYXRpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wNi4wMCNGaW5pc2hpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wNy4wMCNGbGF0IHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDguMDAjT3BlbiB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjA5LjAwI1JlZHVjaW5nIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTAuMDAjU2hpbSB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjExLjAwI1NwcmluZyB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjEyLjAwI1NxdWFyZSB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjEzLjAwI1N3aXZlbCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjE0LjAwI1RocnVzdCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjE1LjAwI1Nob3VsZGVyIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTYuMDAjU3BhY2VycyBvciBzdGFuZG9mZnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTcuMDAjQ29uaWNhbCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjAwLjAwI1NwcmluZ3MjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDEuMDAjSGVsaWNhbCBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjAyLjAwI0xlYWYgc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wMy4wMCNTcGlyYWwgc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wNC4wMCNDb21wcmVzc2lvbiBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjA1LjAwI0RpZSBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjA2LjAwI0Rpc2sgc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wNy4wMCNFeHRlbnNpb24gc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wOC4wMCNUb3JzaW9uIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDAuMDAjTmFpbHMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDEuMDAjQnJhZHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDIuMDAjQ2FwIG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjAzLjAwI0ZpbmlzaGluZyBuYWlscyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wNC4wMCNNYXNvbnJ5IG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjA1LjAwI1Jvb2ZpbmcgbmFpbHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDYuMDAjV2lyZSBuYWlscyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wNy4wMCNVcGhvbHN0ZXJ5IG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjA4LjAwI0RyaXZlIHBpbnMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDAuMDAjQW5jaG9ycyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wMS4wMCNDb25jcmV0ZSBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjAyLjAwI1dlZGdlIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDMuMDAjV2FsbCBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjA0LjAwI1NjcmV3IGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDUuMDAjUmVzaW4gYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wNi4wMCNQaXBlIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDcuMDAjTmFpbCBleHBhbnNpb24gYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wOC4wMCNUaWUgZG93biBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjAwLjAwI1JpdmV0cyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wMS4wMCNCbGluZCByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDIuMDAjQ3Jvd25oZWFkIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wMy4wMCNGbGF0IGhlYWQgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA0LjAwI0Z1bGwgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA1LjAwI1JhdGNoZXQgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA2LjAwI1Rpbm5lcnMgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA3LjAwI0NvbXByZXNzaW9uIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wOC4wMCNDb29wZXJzIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wOS4wMCNCdXR0b24gaGVhZCByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDAuMDAjTW91bnRpbmcgaGFyZHdhcmUjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDEuMDAjTW91bnRpbmcgcHJvZmlsZXMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDMuMDAjTW91bnRpbmcgYmFycyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wNC4wMCNNb3VudGluZyBzdHJpcHMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDUuMDAjTW91bnRpbmcgY2xpcHMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDYuMDAjTW91bnRpbmcgaGFuZ2VycyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wNy4wMCNNb3VudGluZyBwbGF0ZXMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDguMDAjTW91bnRpbmcgcGFuZWxzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjA5LjAwI01vdW50aW5nIHJhY2tzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjEwLjAwI01vdW50aW5nIHN0cmFwcyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4xMS4wMCNXYWxsIGJ1c2hpbmdzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjAwLjAwI01pc2NlbGxhbmVvdXMgZmFzdGVuZXJzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjAxLjAwI0dyb21tZXRzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjAyLjAwI0hhc3BzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjAzLjAwI0hpbmdlcyMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wNC4wMCNIYXJkd2FyZSBzdGFwbGVzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjA1LjAwI1R1cm5idWNrbGVzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjA2LjAwI1N0cmFwcGluZyBvciBiYW5kaW5nIGJ1Y2tsZXMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDcuMDAjTGF0Y2gjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDguMDAjQ290dGVyIHBpbnMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjUuMDAuMDAjQnJhY2tldHMgYW5kIGJyYWNlcyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wMS4wMCNTaGVsZiBicmFja2V0cyMzMS4xNi4yNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wMi4wMCNBbmdsZSBicmFja2V0cyMzMS4xNi4yNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wMy4wMCNCcmFjZXMjMzEuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjUuMDQuMDAjRWxlY3RyaWNhbCBmaXh0dXJlIGJyYWNrZXRzIzMxLjE2LjI1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI1LjA1LjAwI01hZ25ldGljIG1vdW50aW5nIGJyYWNrZXRzIzMxLjE2LjI1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjAwLjAwI0hvb2tzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjAxLjAwI1N3aXZlbCBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wMi4wMCNTcHJpbmcgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDMuMDAjUyBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wNC4wMCNTYWZldHkgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDUuMDAjTGlmdGluZyBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wNi4wMCNKIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjA3LjAwI0d1eSB3aXJlIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjA4LjAwI0dyYWIgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDkuMDAjU2NyZXcgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMTAuMDAjUGVnIGJvYXJkIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjExLjAwI1NsaXAgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjcuMDAuMDAjUm9sbGluZyBoYXJkd2FyZSMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNy4wMS4wMCNDYXN0ZXJzIzMxLjE2LjI3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI3LjAyLjAwI1doZWVscyMzMS4xNi4yNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNy4wMy4wMCNTbGlkZXJzIzMxLjE2LjI3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjAwLjAwI01pc2NlbGxhbmVvdXMgaGFyZHdhcmUjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDEuMDAjSGFuZGxlcyBvciBrbm9icyMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wMi4wMCNJbnNlcnRzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjAzLjAwI1NoYWNrbGVzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjA0LjAwI0Rvb3Igc3RvcHMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDUuMDAjQ2FibGUgdGhpbWJsZSMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wNi4wMCNTY3JldyBjb3ZlcnMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDcuMDAjTGV2ZXJzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjA4LjAwI1BhbmljIGJhcnMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDAuMDAjQ2xhbXBzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI5LjAxLjAwI0VhciBjbGFtcHMjMzEuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDIuMDAjU3ByaW5nIGNsYW1wcyMzMS4xNi4yOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOS4wMy4wMCNTY3JldyBjbGFtcHMjMzEuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDQuMDAjV2lyZSByb3BlIGNsYW1wcyMzMS4xNi4yOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOS4wNS4wMCNCZWFtIGNsYW1wcyMzMS4xNi4yOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMC4wMC4wMCNDb3VwbGluZ3MjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzAuMDEuMDAjRWxhc3RvbWVyaWMgY291cGxpbmdzIzMxLjE2LjMwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMwLjAyLjAwI0dlYXIgY291cGxpbmdzIzMxLjE2LjMwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMwLjAzLjAwI01ldGFsbGljIGNvdXBsaW5ncyMzMS4xNi4zMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMC4wNC4wMCNNaW5pYXR1cmUgY291cGxpbmdzIzMxLjE2LjMwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMxLjAwLjAwI0Nvbm5lY3RvcnMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzEuMDEuMDAjUXVpY2sgZGlzY29ubmVjdHMjMzEuMTYuMzEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzEuMDIuMDAjRmVycnVsZSMzMS4xNi4zMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMS4wMy4wMCNUcmFpbGVyIENvbm5lY3RvciMzMS4xNi4zMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wMC4wMCNSZXRhaW5pbmcgaGFyZHdhcmUjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDEuMDAjU3ByaW5nIHBpbnMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDIuMDAjUmV0YWluaW5nIHJpbmdzIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjAzLjAwI0Rvd2VsIHBpbiMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wNC4wMCNDb3R0ZXIgcGluIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjA1LjAwI1RhcGVyIHBpbnMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDYuMDAjR3Jvb3ZlZCBwaW5zIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjA3LjAwI1NoYWZ0IG9yIHdvb2RydWZmIGtleXMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDguMDAjS2V5c3RvY2sjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDkuMDAjQmVhcmluZyBob2xkZXJzIG9yIHJldGFpbmVycyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4xMC4wMCNSZXRhaW5pbmcgY29sbGFycyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMy4wMC4wMCNTcGFjZXIjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzMuMDEuMDAjU2hpbSMzMS4xNi4zMy4wMC4wMAotdW5zcHNjNyMzMS4xNy4wMC4wMC4wMCNCZWFyaW5ncyBhbmQgYnVzaGluZ3MgYW5kIHdoZWVscyBhbmQgZ2VhcnMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDAuMDAjQmVhcmluZ3MjMzEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDEuMDAjRmxhbmdlZCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wMi4wMCNSYWRpYWwgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDMuMDAjV2hlZWwgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDQuMDAjQmFsbCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wNS4wMCNSb2xsZXIgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDYuMDAjTGluZWFyIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjA3LjAwI1RocnVzdCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wOC4wMCNSb2QgZW5kIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjA5LjAwI1NsZWV2ZSBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xMC4wMCNTcGhlcmljYWwgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTEuMDAjUGlsbG93IGJsb2NrIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjEyLjAwI05lZWRsZSBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xMy4wMCNIYW5nZXIgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTQuMDAjRG9vciBjbG9zZXJzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE1LjAwI1BsYWluIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE2LjAwI1RhcGVyZWQgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTcuMDAjTmVlZGxlIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE4LjAwI0JlYXJpbmcgQ2FnZSMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xOS4wMCNCZWFyaW5nIGJsb2NrcyBvciBob3VzaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4yMC4wMCNCZWFyaW5nIGpvdXJuYWxzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjIxLjAwI0JlYXJpbmcgcm9sbGVycyBvciBiYWxscyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wMC4wMCNCdXNoaW5ncyMzMS4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wMS4wMCNUcmFuc2Zvcm1lciBidXNoaW5ncyMzMS4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wMi4wMCNXYWxsIGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjAzLjAwI0RyaWxsIGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjA0LjAwI1BpbG90IGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjA1LjAwI1NoYWZ0IGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjAwLjAwI0dlYXJzIzMxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjAxLjAwI0dlYXIgYm94ZXMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDIuMDAjUmFjayBvciBwaW5pb24gZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDMuMDAjRGlmZmVyZW50aWFsIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA0LjAwI0ZyaWN0aW9uIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA1LjAwI0hlbGljYWwgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDYuMDAjQ29uaWNhbCBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wNy4wMCNTcHVyIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA4LjAwI0JldmVsIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA5LjAwI1JhY2sgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMTAuMDAjUGluaW9uIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjExLjAwI1JpbmcgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMTIuMDAjV29ybSBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4xMy4wMCNTaWRlIEdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjE0LjAwI0hlbGljYWwgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDAuMDAjSW5kdXN0cmlhbCB3aGVlbHMjMzEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDEuMDAjQ29nIHdoZWVscyMzMS4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOC4wMi4wMCNJbXBlbGxlciB3aGVlbHMjMzEuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDMuMDAjRmx5d2hlZWxzIzMxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE4LjA0LjAwI1NoZWF2ZXMjMzEuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDUuMDAjV2hlZWwgYnJ1c2hlcyMzMS4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOS4wMC4wMCNTcHJvY2tldHMjMzEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTkuMDEuMDAjUm9sbGVyIGNoYWluIHNwcm9ja2V0cyMzMS4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOS4wMi4wMCNTcGxpdCBzcHJvY2tldHMjMzEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTguMDAuMDAuMDAjR2Fza2V0cyBhbmQgc2VhbHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDAuMDAjR2Fza2V0cyMzMS4xOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wMS4wMCNQbGFzdGljIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDIuMDAjUnViYmVyIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDMuMDAjTWV0YWwgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wNC4wMCNUZXh0aWxlIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDUuMDAjQ29yayBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjA2LjAwI08gcmluZyBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjA3LjAwI0VsZWN0cm9tYWduZXRpYyBpbnRlcmZlcmVuY2UgKEVNSSkgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wOC4wMCNCb2x0ZWQgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wOS4wMCNHYXNrZXQga2l0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4xMC4wMCNTaWxpY29uZSBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjExLjAwI0xpcXVpZCBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjAwLjAwI1NlYWxzIzMxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjAxLjAwI1BsYXN0aWMgc2VhbHMjMzEuMTguMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTYuMDIuMDAjUnViYmVyIHNlYWxzIzMxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjAzLjAwI01ldGFsbGljIHNlYWxzIzMxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjA0LjAwI1NlYWwgbWVjaGFuaWNhbCMzMS4xOC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNy4wMC4wMCNQYWNraW5ncyBhbmQgZ2xhbmRzIzMxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE4LjE3LjAxLjAwI1BhY2tpbmdzIzMxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE3LjAyLjAwI0dsYW5kcyMzMS4xOC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xOS4wMC4wMC4wMCNHcmluZGluZyBhbmQgcG9saXNoaW5nIGFuZCBzbW9vdGhpbmcgbWF0ZXJpYWxzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjAwLjAwI0FicmFzaXZlcyBhbmQgYWJyYXNpdmUgbWVkaWEjMzEuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDEuMDAjQWJyYXNpdmUgcGFwZXJzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjAyLjAwI0J1ZmZzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjAzLjAwI0FicmFzaXZlIHdoZWVscyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wNC4wMCNBYnJhc2l2ZSBjbG90aCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wNS4wMCNBYnJhc2l2ZSBwYWRzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA2LjAwI0FicmFzaXZlIGRpc2NzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA3LjAwI0FicmFzaXZlIGJlbHRzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA4LjAwI0JvcnQjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDkuMDAjQWJyYXNpdmUgcG9saXNoZXJzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjEwLjAwI0FicmFzaXZlIHN0b25lcyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xMS4wMCNTdGVlbCB3b29sIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjEyLjAwI1Nob3QgYmxhc3QjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTMuMDAjR2xhc3MgYmVhZCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xNC4wMCNUdW1ibGUgbWVkaWEjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTUuMDAjQWJyYXNpdmUgbWVzaCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xNi4wMCNBYnJhc2l2ZSBjYXJ0cmlkZ2Ugcm9sbHMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTcuMDAjRW1lcnkgYm9hcmRzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE2LjAwLjAwI0FicmFzaXZlIHdoZWVscyMzMS4xOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNi4wMS4wMCNBYnJhc2l2ZSBjdWJpYyBib3Jvem9uIG5pdHJhdGUgd2hlZWxzIzMxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE2LjAyLjAwI0FicmFzaXZlIGRpYW1vbmQgd2hlZWxzIzMxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE2LjAzLjAwI1R1bmdzdGVuIGNhcmJpZGUgYWJyYXNpdmUgd2hlZWxzIzMxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjAwLjAwLjAwI0FkaGVzaXZlcyBhbmQgc2VhbGFudHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDAuMDAjVGFwZSMzMS4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wMS4wMCNEdWN0IHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDIuMDAjRWxlY3RyaWNhbCBpbnN1bGF0aW5nIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDMuMDAjTWFza2luZyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA0LjAwI0NhcnBldCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA1LjAwI0RvdWJsZSBzaWRlZCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA2LjAwI0Jpc21hbGVtaWRlIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDcuMDAjRmliZXJnbGFzcyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA4LjAwI0dyYXBoaXRlIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDkuMDAjTnlsb24gdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xMC4wMCNSZXNpbiBpbXByZWduYXRlZCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjExLjAwI1dpcmUgbWVzaCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjEyLjAwI1RyYW5zcGFyZW50IHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTMuMDAjTm9uIHNraWQgc2FmZXR5IHRhcGVzIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE0LjAwI1BvbHl0ZXRyYWZsdW9yb2V0aHlsZW5lIChQVEZFKSB0aHJlYWQgc2VhbGluZyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE1LjAwI1BhcGVyIHRhcGVzIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE2LjAwI1JlZmxlY3RpdmUgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xNy4wMCNQYWNrYWdpbmcgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xOC4wMCNFbGVjdHJpY2FsbHkgY29uZHVjdGl2ZSB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE5LjAwI1BpcGUgb3IgaG9zZSByZXBhaXIgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yMC4wMCNBaXNsZSBtYXJraW5nIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjEuMDAjRm9pbCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjIyLjAwI0FkaGVzaXZlIHRyYW5zZmVyIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjMuMDAjQ2xvdGggdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yNC4wMCNDb2xvciBjb2RpbmcgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yNS4wMCNWaW55bCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjI2LjAwI01hZ25ldGljIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDAuMDAjT3RoZXIgYWRoZXNpdmVzIGFuZCBzZWFsYW50cyMzMS4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wMS4wMCNDaGVtaWNhbCBhZGhlc2l2ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDIuMDAjUGFzdGVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjAzLjAwI0d1bXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDQuMDAjUnViYmVyIGNlbWVudHMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDUuMDAjUHV0dGllcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wNi4wMCNDYXVsa3MjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDcuMDAjRXBveHkgYm9uZCMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wOC4wMCNGb2FtIGFkaGVzaXZlcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wOS4wMCNIb3QgbWVsdCBhZGhlc2l2ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMTAuMDAjR2x1ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMTEuMDAjRmlsbSBhZGhlc2l2ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMTIuMDAjVGhyZWFkIHNlYWxhbnRzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjEzLjAwI1JlIHVzYWJsZSBhZGhlc2l2ZSMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4xNC4wMCNTZWFsaW5nIHdheGVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjAwLjAwLjAwI1BhaW50cyBhbmQgcHJpbWVycyBhbmQgZmluaXNoZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDAuMDAjUGFpbnRzIGFuZCBwcmltZXJzIzMxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjAxLjAwI0VuYW1lbCBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDIuMDAjV2F0ZXIgYmFzZWQgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjAzLjAwI1BpZ21lbnQgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA0LjAwI0NvYXRpbmcgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA1LjAwI09pbCBiYXNlZCBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDYuMDAjTGF0ZXggcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA3LjAwI1NwcmF5IHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wOC4wMCNBY3J5bGljIHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wOS4wMCNFbmFtZWwgcHJpbWVycyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4xMC4wMCNQb2x5dXJldGhhbmUgcHJpbWVycyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4xMS4wMCNVcmV0aGFuZSBwcmltZXJzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjEyLjAwI0xhdGV4IHByaW1lcnMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDAuMDAjUGFpbnQgYWRkaXRpdmVzIzMxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjAxLjAwI0NhbGNpbWluZXMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDIuMDAjVGV4dHVyaW5nIG1hdGVyaWFscyMzMS4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wMy4wMCNQYWludCBkcmllcnMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDQuMDAjUGFpbnQgZXh0ZW5kZXJzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjA1LjAwI0FudGkgc2xpcCBhZ2VudHMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDYuMDAjTGV2ZWxpbmcgYWdlbnRzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjA3LjAwI0FudGkgZm9hbWluZyBhZ2VudHMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDAuMDAjTWlzY2VsbGFuZW91cyBmaW5pc2hlcyMzMS4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wMS4wMCNHbGF6ZXMjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDIuMDAjTHVzdGVycyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wMy4wMCNMYWNxdWVycyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wNC4wMCNTZWFsZXJzIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjA1LjAwI1NoZWxsYWNzIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjA2LjAwI1N0YWlucyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wNy4wMCNWYXJuaXNoZXMjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDguMDAjUG93ZGVyIGNvYXQjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTguMDAuMDAjUGFpbnQgc29sdmVudHMgYW5kIHRoaW5uZXJzIzMxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE4LjAxLjAwI1BhaW50IG9yIHZhcm5pc2ggcmVtb3ZlcnMjMzEuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTguMDIuMDAjUGFpbnQgb3IgdmFybmlzaCBzdHJpcHBlcnMjMzEuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTguMDMuMDAjUGFpbnQgb3IgdmFybmlzaCB0aGlubmVycyMzMS4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wMC4wMCNQYWludCBhcHBsaWNhdG9ycyBhbmQgcGFpbnRpbmcgYWNjZXNzb3JpZXMjMzEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDEuMDAjRHJvcCBjbG90aHMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDIuMDAjRWRnaW5nIHRvb2xzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjAzLjAwI01hc2tpbmcgZXF1aXBtZW50IzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjA0LjAwI1BhaW50IGJydXNoZXMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDUuMDAjUGFpbnQgbWl4ZXJzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjA2LjAwI1BhaW50IHJvbGxlcnMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDguMDAjUGFpbnQgc3ByYXllcnMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDkuMDAjUGFpbnQgdHJheXMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMTAuMDAjUGFpbnQgbWl0dHMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMTIuMDAjVGVsZXNjb3BpbmcgcG9sZXMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMTMuMDAjUGFpbnQgbm96emxlcyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4xNC4wMCNBaXIgYnJ1c2hlcyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4xNS4wMCNQYWludCBzdHJhaW5lcnMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMDAuMDAuMDAjRHllaW5nIGFuZCB0YW5uaW5nIGV4dHJhY3RzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIyLjE1LjAwLjAwI0R5ZWluZyBwcm9kdWN0cyMzMS4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNS4wMS4wMCNJbm9yZ2FuaWMgZHllcyMzMS4yMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNS4wMi4wMCNPcmdhbmljIGR5ZXMgb2YgYW5pbWFsIG9yaWdpbiMzMS4yMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNS4wMy4wMCNPcmdhbmljIGR5ZXMgb2YgdmVnZXRhYmxlIG9yaWdpbiMzMS4yMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNi4wMC4wMCNUYW5uaW5nIHByb2R1Y3RzIzMxLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIyLjE2LjAxLjAwI0lub3JnYW5pYyB0YW5uaW5nIGV4dHJhY3RzIzMxLjIyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIyLjE2LjAyLjAwI09yZ2FuaWMgdGFubmluZyBleHRyYWN0cyBvZiBhbmltYWwgb3JpZ2luIzMxLjIyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIyLjE2LjAzLjAwI09yZ2FuaWMgdGFubmluZyBleHRyYWN0cyBvZiB2ZWdldGFibGUgb3JpZ2luIzMxLjIyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIzLjAwLjAwLjAwI01hY2hpbmVkIHJhdyBzdG9jayMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wMC4wMCNNYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjAyLjAwI0JlcnlsbGl1bSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDMuMDAjQnJhc3MgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDUuMDAjQ29wcGVyIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wNi4wMCNJcm9uIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wNy4wMCNMZWFkIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wOC4wMCNNYWduZXNpdW0gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjA5LjAwI1ByZWNpb3VzIG1ldGFsIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xMC4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjExLjAwI1RpbiBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTIuMDAjVGl0YW5pdW0gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjEzLjAwI1ppbmMgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjE0LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xNS4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xNi4wMCNTdGVlbCBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTcuMDAjQ29tcG9zaXRlIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xOC4wMCNOaWNrZWwgYWxsb3kgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjE5LjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDAuMDAjTWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDIuMDAjQmVyeWxsaXVtIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjAzLjAwI0JyYXNzIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wNS4wMCNDb3BwZXIgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDYuMDAjSXJvbiBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wNy4wMCNMZWFkIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjA4LjAwI01hZ25lc2l1bSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wOS4wMCNQcmVjaW91cyBtZXRhbCBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xMC4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTEuMDAjVGluIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjEyLjAwI1RpdGFuaXVtIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjEzLjAwI1ppbmMgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTUuMDAjRmVycm91cyBhbGxveSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xNi4wMCNTdGVlbCBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xNy4wMCNDb21wb3NpdGUgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTguMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjE5LjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wMC4wMCNTaGltIHN0b2NrIzMxLjIzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEzLjAxLjAwI0JyYXNzIHNoaW0gc3RvY2sjMzEuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTMuMDIuMDAjU3RlZWwgc2hpbSBzdG9jayMzMS4yMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wMy4wMCNTdGFpbmxlc3Mgc3RlZWwgc2hpbSBzdG9jayMzMS4yMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wNC4wMCNBbHVtaW51bSBzaGltIHN0b2NrIzMxLjIzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEzLjA1LjAwI0NvcHBlciBzaGltIHN0b2NrIzMxLjIzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjI0LjAwLjAwLjAwI0luZHVzdHJpYWwgb3B0aWNzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE1LjAwLjAwI0xlbnNlcyBhbmQgcHJpc21zIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE1LjAxLjAwI0xlbnNlcyMzMS4yNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNS4wMi4wMCNQcmlzbXMjMzEuMjQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDAuMDAjT3B0aWNhbCBibGFua3MjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDEuMDAjRmlsdGVyIGJsYW5rcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wMi4wMCNHbGFzcyBkaXNrcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wMy4wMCNNb2xkZWQgZ2xhc3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDQuMDAjUHJpc20gYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA1LjAwI1NpbGljb24gYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA2LjAwI0dlcm1hbml1bSBibGFua3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDcuMDAjUm91bmQgYmFyIHN0b2NrIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA4LjAwI1NxdWFyZSBiYXIgc3RvY2sjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDkuMDAjV2l0bmVzcyBzYW1wbGUgYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjEwLjAwI0luZnJhcmVkIG9wdGljYWwgbWF0ZXJpYWwgYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE3LjAwLjAwI01pcnJvcnMjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTcuMDEuMDAjRGlhbW9uZCB0dXJuZWQgbWlycm9ycyMzMS4yNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNy4wMi4wMCNNZXRhbGxpYyBtaXJyb3JzIzMxLjI0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE3LjAzLjAwI1BhcmFib2xpYyBtaXJyb3JzIzMxLjI0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE3LjA0LjAwI1VuY29hdGVkIG1pcnJvcnMjMzEuMjQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDAuMDAjT3B0aWNhbCBmaWx0ZXJzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjAxLjAwI0Jyb2FkIGJhbmQgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wMi4wMCNHcmFkaWVudCBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjAzLjAwI0luZnJhcmVkIGZpbHRlcnMjMzEuMjQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDQuMDAjTGFzZXIgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wNS4wMCNOYXJyb3cgYmFuZCBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjA2LjAwI1BlbGljbGUgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wNy4wMCNWaXN1YWwgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wMC4wMCNPcHRpY2FsIGRvbWVzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjAxLjAwI1NwZWNpYWx0eSBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wMi4wMCNEaWFtb25kIHR1cm5lZCBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wMy4wMCNNZXRhbGxpYyBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wNC4wMCNNb2xkZWQgZ2xhc3MgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDUuMDAjTW9sZGVkIHBvbHljYXJib25hdGUgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDYuMDAjUmVwbGljYXRlZCBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wNy4wMCNTaGFwZWQgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDguMDAjRnJhbmdpYmxlIGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjIwLjAwLjAwI0xlbnMgYW5kIGxhc2VyIHdpbmRvd3MjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjAuMDEuMDAjRXh0ZXJuYWwgbGVucyBvciBsYXNlciB3aW5kb3dzIzMxLjI0LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIwLjAyLjAwI0luZnJhcmVkIGxlbnMgb3IgbGFzZXIgd2luZG93cyMzMS4yNC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMC4wMy4wMCNWaXN1YWwgbGVucyBvciBsYXNlciB3aW5kb3dzIzMxLjI0LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIxLjAwLjAwI09wdGljYWwgZGV2aWNlIGFjY2Vzc29yaWVzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIxLjAxLjAwI1ByaXNtIGhvbGRlcnMjMzEuMjQuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjEuMDIuMDAjTGVucyBob2xkZXJzIzMxLjI0LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIxLjAzLjAwI09wdGljYWwgc2xpdHMjMzEuMjQuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMDAuMDAuMDAjUG5ldW1hdGljIGFuZCBoeWRyYXVsaWMgYW5kIGVsZWN0cmljIGNvbnRyb2wgc3lzdGVtcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wMC4wMCNBY3R1YXRvcnMjMzEuMjUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDEuMDAjRWxlY3RyaWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjAyLjAwI0VsZWN0cm9uaWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjAzLjAwI0h5ZHJhdWxpYyBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDQuMDAjUG5ldW1hdGljIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wNS4wMCNWYWx2ZSBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDYuMDAjR2VhciBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDcuMDAjUm90YXJ5IGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wOC4wMCNQaG90b2VsZWN0cmljIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wOS4wMCNFbGVjdHJvbWFnbmV0aWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjEwLjAwI1NvbGVub2lkcyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4xMS4wMCNMaW5lYXIgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI2LjAwLjAwLjAwI0hvdXNpbmdzIGFuZCBjYWJpbmV0cyBhbmQgY2FzaW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wMC4wMCNIb3VzaW5ncyBhbmQgY2FiaW5ldHMjMzEuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTUuMDEuMDAjUGxhc3RpYyBob3VzaW5ncyBvciBjYWJpbmV0cyMzMS4yNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wMi4wMCNNZXRhbCBob3VzaW5ncyBvciBjYWJpbmV0cyMzMS4yNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wMy4wMCNTdGVlbCBob3VzaW5ncyBvciBjYWJpbmV0cyMzMS4yNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wNC4wMCNHZWFyIGJveGVzIG9yIGhvdXNpbmdzIzMxLjI2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE2LjAwLjAwI1NoZWxscyBhbmQgY2FzaW5ncyMzMS4yNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNi4wMS4wMCNQbGFzdGljIHNoZWxscyBvciBjYXNpbmdzIzMxLjI2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE2LjAyLjAwI01ldGFsIHNoZWxscyBvciBjYXNpbmdzIzMxLjI2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE2LjAzLjAwI1N0ZWVsIHNoZWxscyBvciBjYXNpbmdzIzMxLjI2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI3LjAwLjAwLjAwI01hY2hpbmUgbWFkZSBwYXJ0cyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNS4wMC4wMCNHZW5lcmFsIG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNS4wMS4wMCNNZXRhbCBnZW5lcmFsIG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNS4wMi4wMCNOb24gbWV0YWwgZ2VuZXJhbCBtYWNoaW5lIG1hZGUgcGFydHMjMzEuMjcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjcuMTYuMDAuMDAjU2NyZXcgbWFjaGluZSBtYWRlIHBhcnRzIzMxLjI3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI3LjE2LjAxLjAwI01ldGFsIHNjcmV3IG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNi4wMi4wMCNOb24gbWV0YWwgc2NyZXcgbWFjaGluZSBtYWRlIHBhcnRzIzMxLjI3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI4LjAwLjAwLjAwI1N0YW1waW5ncyBhbmQgc2hlZXQgY29tcG9uZW50cyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wMC4wMCNTdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDEuMDAjU3RhbXBlZCBtZXRhbCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjAyLjAwI0FsdW1pbnVtIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wMy4wMCNGZXJyb3VzIGFsbG95IHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wNC4wMCNJcm9uIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wNS4wMCNOb24gZmVycm91cyBhbGxveSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDYuMDAjU3RhaW5sZXNzIHN0ZWVsIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wNy4wMCNDYXJib24gU3RlZWwgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjA4LjAwI01hZ25lc2l1bSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDkuMDAjWmluYyBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTAuMDAjVGluIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xMS4wMCNUaXRhbml1bSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTIuMDAjQmVyeWxsaXVtIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xMy4wMCNQcmVjaW91cyBtZXRhbCBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTQuMDAjQ29wcGVyIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xNS4wMCNMZWFkIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xNi4wMCNCcmFzcyBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTcuMDAjQnJvbnplIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xOC4wMCNDb21wb3NpdGUgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjE5LjAwI05pY2tlbCBhbGxveSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMjAuMDAjTm9uIG1ldGFsbGljIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4yMS4wMCNDb2F0ZWQgU3RhbXBpbmdzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE2LjAwLjAwI0Zvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjE2LjAxLjAwI0Zvcm1lZCBtZXRhbCBjb21wb25lbnRzIzMxLjI4LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE3LjAwLjAwI1dlbGRlZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjE3LjAxLjAwI1dlbGRlZCBtZXRhbCBjb21wb25lbnRzIzMxLjI4LjE3LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjAwLjAwI1B1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wMS4wMCNBbHVtaW51bSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDIuMDAjRmVycm91cyBhbGxveSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDMuMDAjSXJvbiBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDYuMDAjQ2FyYm9uIFN0ZWVsIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wNy4wMCNDb21wb3NpdGUgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjA4LjAwI05pY2tlbCBhbGxveSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDkuMDAjTm9uIG1ldGFsbGljIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xMC4wMCNUaXRhbml1bSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTEuMDAjQmVyeWxsaXVtIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xMi4wMCNQcmVjaW91cyBtZXRhbCBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTMuMDAjQ29wcGVyIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xNC4wMCNMZWFkIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xNS4wMCNCcmFzcyBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTYuMDAjQnJvbnplIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xNy4wMCNNYWduZXNpdW0gcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjE4LjAwI1ppbmMgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjE5LjAwI1RpbiBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDAuMDAjRHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wMS4wMCNBbHVtaW51bSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjAyLjAwI0JlcnlsbGl1bSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjAzLjAwI0JyYXNzIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDQuMDAjQnJvbnplIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDUuMDAjQ29tcG9zaXRlIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDYuMDAjQ29wcGVyIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDcuMDAjRmVycm91cyBhbGxveSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjA4LjAwI0lyb24gZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wOS4wMCNMZWFkIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTAuMDAjTWFnbmVzaXVtIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTEuMDAjTmlja2VsIGFsbG95IGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xMy4wMCNOb24gbWV0YWxsaWMgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xNC4wMCNQcmVjaW91cyBtZXRhbCBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjE1LjAwI1N0YWlubGVzcyBzdGVlbCBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjE2LjAwI1N0ZWVsIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTcuMDAjVGluIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTguMDAjVGl0YW5pdW0gZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xOS4wMCNaaW5jIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDAuMDAjSHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDEuMDAjQWx1bWludW0gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDIuMDAjQmVyeWxsaXVtIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjAzLjAwI0JyYXNzIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjA0LjAwI0Jyb256ZSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wNS4wMCNDb21wb3NpdGUgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDYuMDAjQ29wcGVyIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjA3LjAwI0ZlcnJvdXMgYWxsb3kgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDguMDAjSXJvbiBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wOS4wMCNMZWFkIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjEwLjAwI01hZ25lc2l1bSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xMS4wMCNOaWNrZWwgYWxsb3kgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTMuMDAjTm9uIG1ldGFsbGljIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjE0LjAwI1ByZWNpb3VzIG1ldGFsIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjE1LjAwI1N0YWlubGVzcyBzdGVlbCBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xNi4wMCNTdGVlbCBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xNy4wMCNUaW4gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTguMDAjVGl0YW5pdW0gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTkuMDAjWmluYyBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wMC4wMCNTcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjAxLjAwI0FsdW1pbnVtIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDIuMDAjQmVyeWxsaXVtIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDMuMDAjQnJhc3Mgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wNC4wMCNCcm9uemUgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wNS4wMCNDb21wb3NpdGUgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wNi4wMCNDb3BwZXIgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wNy4wMCNGZXJyb3VzIGFsbG95IHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDguMDAjSXJvbiBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjA5LjAwI0xlYWQgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xMC4wMCNNYWduZXNpdW0gc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xMS4wMCNOaWNrZWwgYWxsb3kgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xMi4wMCNOb24gZmVycm91cyBhbGxveSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjEzLjAwI05vbiBtZXRhbGxpYyBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjE0LjAwI1ByZWNpb3VzIG1ldGFsIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTYuMDAjU3RlZWwgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xNy4wMCNUaW4gc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xOC4wMCNUaXRhbml1bSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjE5LjAwI1ppbmMgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wMC4wMCNSb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjAxLjAwI0FsdW1pbnVtIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDIuMDAjQmVyeWxsaXVtIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDMuMDAjQnJhc3Mgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wNC4wMCNCcm9uemUgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wNS4wMCNDb21wb3NpdGUgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wNi4wMCNDb3BwZXIgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wNy4wMCNGZXJyb3VzIGFsbG95IHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDguMDAjSXJvbiByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjA5LjAwI0xlYWQgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xMC4wMCNNYWduZXNpdW0gcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xMS4wMCNOaWNrZWwgYWxsb3kgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xMi4wMCNOb24gZmVycm91cyBhbGxveSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjEzLjAwI05vbiBtZXRhbGxpYyByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjE0LjAwI1ByZWNpb3VzIG1ldGFsIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTYuMDAjU3RlZWwgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xNy4wMCNUaW4gcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xOC4wMCNUaXRhbml1bSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjE5LjAwI1ppbmMgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wMC4wMCNTdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjAxLjAwI0FsdW1pbnVtIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDIuMDAjQmVyeWxsaXVtIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDMuMDAjQnJhc3Mgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wNC4wMCNCcm9uemUgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wNS4wMCNDb21wb3NpdGUgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wNi4wMCNDb3BwZXIgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wNy4wMCNGZXJyb3VzIGFsbG95IHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDguMDAjSXJvbiBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjA5LjAwI0xlYWQgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xMC4wMCNNYWduZXNpdW0gc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xMS4wMCNOaWNrZWwgYWxsb3kgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xMi4wMCNOb24gZmVycm91cyBhbGxveSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjEzLjAwI05vbiBtZXRhbGxpYyBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjE0LjAwI1ByZWNpb3VzIG1ldGFsIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTYuMDAjU3RlZWwgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xNy4wMCNUaW4gc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xOC4wMCNUaXRhbml1bSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjE5LjAwI1ppbmMgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wMC4wMCNFeHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDEuMDAjQWx1bWludW0gZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjAyLjAwI0JlcnlsbGl1bSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDMuMDAjQnJhc3MgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA0LjAwI0Jyb256ZSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDUuMDAjQ29tcG9zaXRlIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wNi4wMCNDb3BwZXIgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA3LjAwI0ZlcnJvdXMgYWxsb3kgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA4LjAwI0lyb24gZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA5LjAwI0xlYWQgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjEwLjAwI01hZ25lc2l1bSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTEuMDAjTmlja2VsIGFsbG95IGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xMi4wMCNOb24gZmVycm91cyBhbGxveSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTMuMDAjTm9uIG1ldGFsbGljIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xNC4wMCNQcmVjaW91cyBtZXRhbCBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xNi4wMCNTdGVlbCBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTcuMDAjVGluIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xOC4wMCNUaXRhbml1bSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTkuMDAjWmluYyBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMDAuMDAuMDAjTWFjaGluZWQgZXh0cnVzaW9ucyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wMC4wMCNNYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDMuMDAjQnJhc3MgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDQuMDAjQnJvbnplIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA1LjAwI0NvcHBlciBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wNi4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA3LjAwI0xlYWQgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjEwLjAwI1BsYXN0aWMgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTEuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTIuMDAjUnViYmVyIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjEzLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xNC4wMCNTdGVlbCBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xNS4wMCNUaW4gbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTYuMDAjVGl0YW5pdW0gbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTcuMDAjWmluYyBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xOC4wMCNDb21wb3NpdGUgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTkuMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjIwLjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wMC4wMCNNYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDMuMDAjQnJhc3MgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDQuMDAjQnJvbnplIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA1LjAwI0NvcHBlciBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wNi4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA3LjAwI0xlYWQgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjEwLjAwI1BsYXN0aWMgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTEuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTIuMDAjUnViYmVyIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjEzLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xNC4wMCNTdGVlbCBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xNS4wMCNUaW4gbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTYuMDAjVGl0YW5pdW0gbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTcuMDAjWmluYyBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xOC4wMCNDb21wb3NpdGUgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTkuMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjIwLjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wMC4wMCNNYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjAyLjAwI0JlcnlsbGl1bSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDMuMDAjQnJhc3MgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDUuMDAjQ29wcGVyIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wNi4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wNy4wMCNMZWFkIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wOC4wMCNNYWduZXNpdW0gbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xMC4wMCNQbGFzdGljIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xMS4wMCNQcmVjaW91cyBtZXRhbCBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTIuMDAjUnViYmVyIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xMy4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE0LjAwI1N0ZWVsIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xNS4wMCNUaW4gbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE2LjAwI1RpdGFuaXVtIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xNy4wMCNaaW5jIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xOC4wMCNDb21wb3NpdGUgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE5LjAwI05pY2tlbCBhbGxveSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMjAuMDAjTm9uIG1ldGFsbGljIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wMC4wMCNNYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDMuMDAjQnJhc3MgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDQuMDAjQnJvbnplIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA1LjAwI0NvcHBlciBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wNi4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA3LjAwI0xlYWQgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjEwLjAwI1BsYXN0aWMgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTEuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTIuMDAjUnViYmVyIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjEzLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xNC4wMCNTdGVlbCBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xNS4wMCNUaW4gbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTYuMDAjVGl0YW5pdW0gbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTcuMDAjWmluYyBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xOC4wMCNDb21wb3NpdGUgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTkuMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjIwLjAwI05vbiAgIG1ldGFsbGljIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE1LjAwLjAwI01hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjE2LjAwLjAwI01hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNy4wMC4wMCNNYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xOC4wMC4wMCNNYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4wMC4wMC4wMCNNYWNoaW5lZCBmb3JnaW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMC4wMC4wMCNNYWNoaW5lZCByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wMC4wMCNNYWNoaW5lZCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wMi4wMCNGZXJyb3VzIGFsbG95IG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjAzLjAwI1N0ZWVsIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wNS4wMCNJcm9uIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA2LjAwI0FsdW1pbnVtIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA3LjAwI01hZ25lc2l1bSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wOC4wMCNUaXRhbml1bSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wOS4wMCNCZXJ5bGxpdW0gb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTAuMDAjQ29wcGVyIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjExLjAwI0JyYXNzIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjEyLjAwI0Jyb256ZSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xMy4wMCNaaW5jIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE0LjAwI1RpbiBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xNS4wMCNMZWFkIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE2LjAwI1ByZWNpb3VzIG1ldGFsIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE3LjAwI0NvbXBvc2l0ZSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xOC4wMCNOaWNrZWwgYWxsb3kgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTkuMDAjTm9uIG1ldGFsbGljIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjAwLjAwI01hY2hpbmVkIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wMi4wMCNGZXJyb3VzIGFsbG95IGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDMuMDAjU3RlZWwgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wNS4wMCNJcm9uIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDYuMDAjQWx1bWludW0gY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wNy4wMCNNYWduZXNpdW0gY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wOC4wMCNUaXRhbml1bSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjA5LjAwI0JlcnlsbGl1bSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjEwLjAwI0NvcHBlciBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjExLjAwI0JyYXNzIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTIuMDAjQnJvbnplIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTMuMDAjWmluYyBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE0LjAwI1RpbiBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE1LjAwI0xlYWQgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xNi4wMCNQcmVjaW91cyBtZXRhbCBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE3LjAwI0NvbXBvc2l0ZSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE4LjAwI05pY2tlbCBhbGxveSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE5LjAwI05vbiBtZXRhbGxpYyBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjAwLjAwI01hY2hpbmVkIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjAyLjAwI0ZlcnJvdXMgYWxsb3kgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDMuMDAjU3RlZWwgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA1LjAwI0lyb24gaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDYuMDAjQWx1bWludW0gaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDcuMDAjTWFnbmVzaXVtIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA4LjAwI1RpdGFuaXVtIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA5LjAwI0JlcnlsbGl1bSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xMC4wMCNDb3BwZXIgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTEuMDAjQnJhc3MgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTIuMDAjQnJvbnplIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjEzLjAwI1ppbmMgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTQuMDAjVGluIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjE1LjAwI0xlYWQgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTYuMDAjUHJlY2lvdXMgbWV0YWwgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTcuMDAjQ29tcG9zaXRlIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjE4LjAwI05pY2tlbCBhbGxveSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xOS4wMCNOb24gbWV0YWxsaWMgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDAuMDAjTWFjaGluZWQgZHJvcCBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjAyLjAwI1ppbmMgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wMy4wMCNGZXJyb3VzIGFsbG95IGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDQuMDAjVGluIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDUuMDAjTGVhZCBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjA2LjAwI1N0ZWVsIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDcuMDAjUHJlY2lvdXMgbWV0YWwgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wOC4wMCNTdGFpbmxlc3Mgc3RlZWwgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wOS4wMCNJcm9uIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTAuMDAjQWx1bWludW0gZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xMS4wMCNNYWduZXNpdW0gZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xMi4wMCNUaXRhbml1bSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjEzLjAwI0JlcnlsbGl1bSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjE0LjAwI0NvcHBlciBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjE1LjAwI0JyYXNzIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTYuMDAjQnJvbnplIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTcuMDAjQ29tcG9zaXRlIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTguMDAjTmlja2VsIGFsbG95IGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTkuMDAjTm9uIG1ldGFsbGljIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDAuMDAjTWFjaGluZWQgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDEuMDAjQWx1bWludW0gcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDIuMDAjQmVyeWxsaXVtIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjAzLjAwI0JyYXNzIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjA0LjAwI0Jyb256ZSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wNS4wMCNDb3BwZXIgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDYuMDAjSXJvbiByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wNy4wMCNMZWFkIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjA4LjAwI01hZ25lc2l1bSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wOS4wMCNQcmVjaW91cyBtZXRhbCByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xMC4wMCNTdGFpbmxlc3Mgc3RlZWwgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTEuMDAjVGluIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjEyLjAwI1RpdGFuaXVtIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjEzLjAwI1ppbmMgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTUuMDAjRmVycm91cyBhbGxveSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xNi4wMCNTdGVlbCByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xNy4wMCNDb21wb3NpdGUgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTguMDAjTmlja2VsIGFsbG95IHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjE5LjAwI05vbiBtZXRhbGxpYyByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNi4wMC4wMCNNYWNoaW5lZCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNy4wMC4wMCNNYWNoaW5lZCBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjE4LjAwLjAwI01hY2hpbmVkIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjE5LjAwLjAwI01hY2hpbmVkIGRyb3AgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMDAuMDAuMDAjRmFicmljYXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDAuMDAjU29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjAxLjAwI0FsdW1pbnVtIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjAzLjAwI0hhc3RhbGxveSBYIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wNC4wMCNJbmNvbmVsIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjA2LjAwI05vbiBtZXRhbGxpYyBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDcuMDAjT3RoZXIgZmVycm91cyBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMTAuMDAjVGl0YW5pdW0gc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMTIuMDAjQ29wcGVyIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4xMy4wMCNCcmFzcyBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDAuMDAjUml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDEuMDAjQWx1bWludW0gcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA0LjAwI0luY29uZWwgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wNy4wMCNPdGhlciBmZXJyb3VzIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4xMC4wMCNUaXRhbml1bSByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjEzLjAwI0JyYXNzIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjAwLjAwI0JvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDEuMDAjQWx1bWludW0gYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wMi4wMCNDYXJib24gc3RlZWwgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjA0LjAwI0luY29uZWwgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4xMC4wMCNUaXRhbml1bSBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjExLjAwI1dhc3BhbGxveSBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjEyLjAwI0NvcHBlciBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjEzLjAwI0JyYXNzIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wMS4wMCNBbHVtaW51bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wMi4wMCNDYXJib24gc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDQuMDAjSW5jb25lbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjA3LjAwI090aGVyIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjEwLjAwI1RpdGFuaXVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjExLjAwI1dhc3BhbGxveSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMTMuMDAjQnJhc3MgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDAuMDAjV2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDEuMDAjQWx1bWludW0gd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjAzLjAwI0hhc3RhbGxveSBYIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA0LjAwI0luY29uZWwgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA2LjAwI05vbiBtZXRhbGxpYyB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4xMC4wMCNUaXRhbml1bSB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4xMS4wMCNXYXNwYWxsb3kgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMTIuMDAjQ29wcGVyIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjEzLjAwI0JyYXNzIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjAwLjAwI1NvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDEuMDAjQWx1bWludW0gc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wMi4wMCNDYXJib24gc3RlZWwgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wMy4wMCNIYXN0YWxsb3kgWCBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjA0LjAwI0luY29uZWwgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wNi4wMCNOb24gbWV0YWxsaWMgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4xMC4wMCNUaXRhbml1bSBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjExLjAwI1dhc3BhbGxveSBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjEyLjAwI0NvcHBlciBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjEzLjAwI0JyYXNzIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDAuMDAjQm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wMS4wMCNBbHVtaW51bSBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjAyLjAwI0NhcmJvbiBzdGVlbCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjAzLjAwI0hhc3RhbGxveSBYIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDQuMDAjSW5jb25lbCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA2LjAwI05vbiBtZXRhbGxpYyBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wOC4wMCNPdGhlciBub24gZmVycm91cyBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjEwLjAwI1RpdGFuaXVtIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMTEuMDAjV2FzcGFsbG95IGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMTIuMDAjQ29wcGVyIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMTMuMDAjQnJhc3MgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4wMC4wMC4wMCNGYWJyaWNhdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjAwLjAwI0JvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wMS4wMCNBbHVtaW51bSBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDQuMDAjSW5jb25lbCBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjEwLjAwI1RpdGFuaXVtIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4xMS4wMCNXYXNwYWxsb3kgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjEyLjAwI0NvcHBlciBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMTMuMDAjQnJhc3MgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjAwLjAwI1NvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjAxLjAwI0FsdW1pbnVtIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjAyLjAwI0NhcmJvbiBzdGVlbCBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wNC4wMCNJbmNvbmVsIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDcuMDAjT3RoZXIgZmVycm91cyBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMTAuMDAjVGl0YW5pdW0gc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMTEuMDAjV2FzcGFsbG95IHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4xMy4wMCNCcmFzcyBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wMC4wMCNSaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjAxLjAwI0FsdW1pbnVtIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDMuMDAjSGFzdGFsbG95IFggcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wNC4wMCNJbmNvbmVsIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDYuMDAjTm9uIG1ldGFsbGljIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDcuMDAjT3RoZXIgZmVycm91cyByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMTAuMDAjVGl0YW5pdW0gcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4xMi4wMCNDb3BwZXIgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4xMy4wMCNCcmFzcyByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDEuMDAjQWx1bWludW0gd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjA0LjAwI0luY29uZWwgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4xMC4wMCNUaXRhbml1bSB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjEzLjAwI0JyYXNzIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4xMS4wMCNXYXNwYWxsb3kgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjAwLjAwI1NvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wMS4wMCNBbHVtaW51bSBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wMy4wMCNIYXN0YWxsb3kgWCBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDQuMDAjSW5jb25lbCBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wNi4wMCNOb24gbWV0YWxsaWMgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjA3LjAwI090aGVyIGZlcnJvdXMgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjEwLjAwI1RpdGFuaXVtIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjEyLjAwI0NvcHBlciBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMTMuMDAjQnJhc3Mgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjAwLjAwI0JvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wMS4wMCNBbHVtaW51bSBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDQuMDAjSW5jb25lbCBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjEwLjAwI1RpdGFuaXVtIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4xMS4wMCNXYXNwYWxsb3kgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjEyLjAwI0NvcHBlciBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMTMuMDAjQnJhc3MgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjAwLjAwLjAwI0ZhYnJpY2F0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjAwLjAwI0JvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDEuMDAjQWx1bWludW0gYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjA0LjAwI0luY29uZWwgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4xMC4wMCNUaXRhbml1bSBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjExLjAwI1dhc3BhbGxveSBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjEyLjAwI0NvcHBlciBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjEzLjAwI0JyYXNzIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDAuMDAjQm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wMS4wMCNBbHVtaW51bSBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDQuMDAjSW5jb25lbCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjEwLjAwI1RpdGFuaXVtIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMTIuMDAjQ29wcGVyIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMTMuMDAjQnJhc3MgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wMC4wMCNTb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjAxLjAwI0FsdW1pbnVtIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wNC4wMCNJbmNvbmVsIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDcuMDAjT3RoZXIgZmVycm91cyBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMTAuMDAjVGl0YW5pdW0gc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4xMy4wMCNCcmFzcyBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjAwLjAwI1VsdHJhIHZpb2xldCB3ZWxkZWQgKFVWKSBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDEuMDAjQWx1bWludW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDIuMDAjQ2FyYm9uIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjAzLjAwI0hhc3RhbGxveSBYIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA0LjAwI0luY29uZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA2LjAwI05vbiBtZXRhbGxpYyB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4xMC4wMCNUaXRhbml1bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4xMS4wMCNXYXNwYWxsb3kgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMTIuMDAjQ29wcGVyIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjEzLjAwI0JyYXNzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjAwLjAwI1NvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wMS4wMCNBbHVtaW51bSBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDQuMDAjSW5jb25lbCBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjA3LjAwI090aGVyIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjEwLjAwI1RpdGFuaXVtIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4xMS4wMCNXYXNwYWxsb3kgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMTMuMDAjQnJhc3Mgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjAxLjAwI0FsdW1pbnVtIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjAyLjAwI0NhcmJvbiBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wNC4wMCNJbmNvbmVsIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDcuMDAjT3RoZXIgZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wOC4wMCNPdGhlciBub24gZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMTAuMDAjVGl0YW5pdW0gd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMTEuMDAjV2FzcGFsbG95IHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4xMy4wMCNCcmFzcyB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wMC4wMCNSaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wMS4wMCNBbHVtaW51bSByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wMi4wMCNDYXJib24gc3RlZWwgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDMuMDAjSGFzdGFsbG95IFggcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDQuMDAjSW5jb25lbCByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDYuMDAjTm9uIG1ldGFsbGljIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjA3LjAwI090aGVyIGZlcnJvdXMgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjEwLjAwI1RpdGFuaXVtIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjExLjAwI1dhc3BhbGxveSByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4xMi4wMCNDb3BwZXIgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMTMuMDAjQnJhc3Mgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMDAuMDAuMDAjRmFicmljYXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wMS4wMCNBbHVtaW51bSB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDIuMDAjQ2FyYm9uIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDQuMDAjSW5jb25lbCB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjA3LjAwI090aGVyIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjEwLjAwI1RpdGFuaXVtIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4xMS4wMCNXYXNwYWxsb3kgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMTMuMDAjQnJhc3Mgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjAwLjAwI1JpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wMS4wMCNBbHVtaW51bSByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wMy4wMCNIYXN0YWxsb3kgWCByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDQuMDAjSW5jb25lbCByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wNi4wMCNOb24gbWV0YWxsaWMgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjA3LjAwI090aGVyIGZlcnJvdXMgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjEwLjAwI1RpdGFuaXVtIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjEyLjAwI0NvcHBlciByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMTMuMDAjQnJhc3Mgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjAwLjAwI1VsdHJhIHZpb2xldCB3ZWxkZWQgKFVWKSBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wMi4wMCNDYXJib24gc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjAzLjAwI0hhc3RhbGxveSBYIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjA2LjAwI05vbiBtZXRhbGxpYyB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjA5LjAwI1N0YWlubGVzcyBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjExLjAwI1dhc3BhbGxveSB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMTIuMDAjQ29wcGVyIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDAuMDAjU29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDEuMDAjQWx1bWludW0gc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjAzLjAwI0hhc3RhbGxveSBYIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA0LjAwI0luY29uZWwgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA2LjAwI05vbiBtZXRhbGxpYyBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4xMC4wMCNUaXRhbml1bSBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMTIuMDAjQ29wcGVyIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjEzLjAwI0JyYXNzIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjAwLjAwI1NvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDAuMDAjQm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDEuMDAjQWx1bWludW0gYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjAzLjAwI0hhc3RhbGxveSBYIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA0LjAwI0luY29uZWwgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA2LjAwI05vbiBtZXRhbGxpYyBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4xMC4wMCNUaXRhbml1bSBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4xMS4wMCNXYXNwYWxsb3kgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMTIuMDAjQ29wcGVyIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjEzLjAwI0JyYXNzIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjAwLjAwI0JvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjAxLjAwI0FsdW1pbnVtIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wNC4wMCNJbmNvbmVsIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDcuMDAjT3RoZXIgZmVycm91cyBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMTAuMDAjVGl0YW5pdW0gYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjEyLjAwI0NvcHBlciBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4xMy4wMCNCcmFzcyBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4wMC4wMC4wMCNGYWJyaWNhdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wMC4wMCNVbHRyYSB2aW9sZXQgd2VsZGVkIChVVikgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjAyLjAwI0NhcmJvbiBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wMy4wMCNIYXN0YWxsb3kgWCB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjA1LjAwI0xvdyBhbGxveSBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wNi4wMCNOb24gbWV0YWxsaWMgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wOC4wMCNPdGhlciBub24gZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMTEuMDAjV2FzcGFsbG95IHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjEyLjAwI0NvcHBlciB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wMC4wMCNXZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wMS4wMCNBbHVtaW51bSB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDMuMDAjSGFzdGFsbG95IFggd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDQuMDAjSW5jb25lbCB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDYuMDAjTm9uIG1ldGFsbGljIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjA3LjAwI090aGVyIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjEwLjAwI1RpdGFuaXVtIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4xMi4wMCNDb3BwZXIgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMTMuMDAjQnJhc3Mgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDAuMDAjUml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDEuMDAjQWx1bWludW0gcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA0LjAwI0luY29uZWwgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4xMC4wMCNUaXRhbml1bSByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjEzLjAwI0JyYXNzIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjAwLjAwI0JvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDEuMDAjQWx1bWludW0gYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjA0LjAwI0luY29uZWwgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4xMC4wMCNUaXRhbml1bSBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjExLjAwI1dhc3BhbGxveSBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjEyLjAwI0NvcHBlciBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjEzLjAwI0JyYXNzIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDAuMDAjQm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wMS4wMCNBbHVtaW51bSBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDQuMDAjSW5jb25lbCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjEwLjAwI1RpdGFuaXVtIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMTIuMDAjQ29wcGVyIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMTMuMDAjQnJhc3MgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wMC4wMCNTb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjAyLjAwI0NhcmJvbiBzdGVlbCBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDMuMDAjSGFzdGFsbG95IFggc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDYuMDAjTm9uIG1ldGFsbGljIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMTEuMDAjV2FzcGFsbG95IHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4xMi4wMCNDb3BwZXIgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wMC4wMCNTb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjAxLjAwI0FsdW1pbnVtIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wNC4wMCNJbmNvbmVsIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDcuMDAjT3RoZXIgZmVycm91cyBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMTAuMDAjVGl0YW5pdW0gc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4xMy4wMCNCcmFzcyBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjAwLjAwLjAwI0ZhYnJpY2F0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wMC4wMCNCb25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wMS4wMCNBbHVtaW51bSBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDMuMDAjSGFzdGFsbG95IFggYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDQuMDAjSW5jb25lbCBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDYuMDAjTm9uIG1ldGFsbGljIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjEwLjAwI1RpdGFuaXVtIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjExLjAwI1dhc3BhbGxveSBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4xMi4wMCNDb3BwZXIgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMTMuMDAjQnJhc3MgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDAuMDAjQm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDEuMDAjQWx1bWludW0gYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA0LjAwI0luY29uZWwgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4xMC4wMCNUaXRhbml1bSBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4xMS4wMCNXYXNwYWxsb3kgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMTIuMDAjQ29wcGVyIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjEzLjAwI0JyYXNzIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjAwLjAwI1NvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDAuMDAjV2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjAxLjAwI0FsdW1pbnVtIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjAzLjAwI0hhc3RhbGxveSBYIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wNC4wMCNJbmNvbmVsIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjA2LjAwI05vbiBtZXRhbGxpYyB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDcuMDAjT3RoZXIgZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMTAuMDAjVGl0YW5pdW0gd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMTIuMDAjQ29wcGVyIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4xMy4wMCNCcmFzcyB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDEuMDAjQWx1bWludW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjAyLjAwI0NhcmJvbiBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjA0LjAwI0luY29uZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wOC4wMCNPdGhlciBub24gZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4xMC4wMCNUaXRhbml1bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMTEuMDAjV2FzcGFsbG95IHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjEzLjAwI0JyYXNzIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wMC4wMCNTb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wMS4wMCNBbHVtaW51bSBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wMi4wMCNDYXJib24gc3RlZWwgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDQuMDAjSW5jb25lbCBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjA3LjAwI090aGVyIGZlcnJvdXMgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjEwLjAwI1RpdGFuaXVtIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjExLjAwI1dhc3BhbGxveSBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMTMuMDAjQnJhc3Mgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDAuMDAjUml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjAxLjAwI0FsdW1pbnVtIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wMi4wMCNDYXJib24gc3RlZWwgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wNC4wMCNJbmNvbmVsIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDcuMDAjT3RoZXIgZmVycm91cyByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMTAuMDAjVGl0YW5pdW0gcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjExLjAwI1dhc3BhbGxveSByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4xMy4wMCNCcmFzcyByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMDAuMDAuMDAjUmVmcmFjdG9yaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEwLjAwLjAwI0NlcmFtaWMgZmlicmUgcHJvZHVjdHMjMzEuMzcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTAuMDEuMDAjSW5zdWxhdGlvbiBib2FyZHMjMzEuMzcuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTAuMDIuMDAjSW5zdWxhdGluZyB3b29sIzMxLjM3LjEwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjAwLjAwI1JlZnJhY3RvcnkgYnJpY2tzIzMxLjM3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjAxLjAwI011bGxpdGUgYnJpY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjAyLjAwI1NpbGxpbWFuaXRlIGJyaWNrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wMy4wMCNBY2lkIHJlc2lzdGFudCBicmlja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDQuMDAjU2lsaWNhIGJyaWNrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wNS4wMCNIaWdoIGFsdW1pbmEgYnJpY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjA2LjAwI0NhbGNpdW0gc2lsaWNhdGUgYmxvY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjA3LjAwI1NoYXBlZCBicmlja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDAuMDAjQ2FzdGFibGVzIzMxLjM3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjAxLjAwI0RlbnNlIGNhc3RhYmxlcyMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wMi4wMCNJbnN1bGF0aW5nIGNhc3RhYmxlcyMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wMy4wMCNMb3cgY2VtZW50IGNhc3RhYmxlcyMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wNC4wMCNBY2lkIG9yIGFsa2FsaSByZXNpc3RhbnQgY2FzdGFibGUjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDUuMDAjQWJyYXNpb24gcmVzaXN0YW50IGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjA2LjAwI1NpYyBjYXN0YWJsZSMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wNy4wMCNTZWxmIGZsb3cgY2FzdGFibGUjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDguMDAjVGFidWxhciBhbHVtaW5hIGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjA5LjAwI0Vyb3Npb24gcmVzaXN0YW50IGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEzLjAwLjAwI1NoYXBlZCByZWZyYWN0b3JpZXMjMzEuMzcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTMuMDEuMDAjUG9yb3VzIGJsb2NrcyMzMS4zNy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMy4wMi4wMCNaaXJjb24gbm96emxlcyMzMS4zNy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zOC4wMC4wMC4wMCNNYWduZXRzIGFuZCBtYWduZXRpYyBtYXRlcmlhbHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzguMTAuMDAuMDAjUGVybWFuZW50IG1hZ25ldHMjMzEuMzguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzguMTAuMDEuMDAjTG9kZSBzdG9uZSMzMS4zOC4xMC4wMC4wMAotdW5zcHNjNyMzMS4zOC4xMC4wMi4wMCNBbG5pY28gbWFnbmV0cyMzMS4zOC4xMC4wMC4wMAotdW5zcHNjNyMzMi4wMC4wMC4wMC4wMCNFbGVjdHJvbmljIENvbXBvbmVudHMgYW5kIFN1cHBsaWVzIzMyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEwLjAwLjAwLjAwI1ByaW50ZWQgY2lyY3VpdHMgYW5kIGludGVncmF0ZWQgY2lyY3VpdHMgYW5kIG1pY3JvYXNzZW1ibGllcyMzMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wMC4wMCNQcmludGVkIGNpcmN1aXRzIGFuZCBjaXJjdWl0IGNhcmQgYXNzZW1ibGllcyMzMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wMS4wMCNCYXJlIHByaW50ZWQgY2lyY3VpdCBib2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDIuMDAjUHJpbnRlZCBjaXJjdWl0IGFzc2VtYmxpZXMgKFBDQXMpIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjAzLjAwI01peGVkIGNpcmN1aXQgYXNzZW1ibGllcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wNC4wMCNTdXJmYWNlIG1vdW50IGNpcmN1aXQgYXNzZW1ibGllcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wNS4wMCNQbGF0ZWQgdGhyb3VnaCBjaXJjdWl0IGFzc2VtYmxpZXMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDYuMDAjRG91YmxlIHNpZGVkIGNpcmN1aXQgY2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDcuMDAjQmFja3BsYW5lIGNpcmN1aXQgY2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDguMDAjTXVsdGlsYXllciBjaXJjdWl0IGNhcmRzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjA5LjAwI1NpbmdsZSBzaWRlZCBjaXJjdWl0IGNhcmRzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjEwLjAwI1ByaW50ZWQgd2lyZSBib2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDAuMDAjRWxlY3Ryb25pYyBjb21wb25lbnRzIGZvciBtZW1vcnkgb3Igc21hcnQgY2FyZHMjMzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDEuMDAjUmFuZG9tIGFjY2VzcyBtZW1vcnkgKFJBTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDIuMDAjRHluYW1pYyByYW5kb20gYWNjZXNzIG1lbW9yeSAoRFJBTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDMuMDAjU3RhdGljIHJhbmRvbSBhY2Nlc3MgbWVtb3J5IChTUkFNKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wNC4wMCNQcm9ncmFtbWFibGUgcmVhZCBvbmx5IG1lbW9yeSAoUFJPTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDUuMDAjRXJhc2VhYmxlIHByb2dyYW1tYWJsZSByZWFkIG9ubHkgbWVtb3J5IChFUFJPTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDYuMDAjRWxlY3Ryb25pY2FsbHkgZXJhc2VhYmxlIHByb2dyYW1tYWJsZSByZWFkIG9ubHkgbWVtb3J5IChFRVBST00pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjA3LjAwI01vbm9saXRpaGMgbWVtb3J5IGludGVncmF0ZWQgY2lyY3VpdHMgKE1NSUMpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjA4LjAwI1JlYWQgb25seSBtZW1vcnkgKFJPTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDkuMDAjQXBwbGljYXRpb24gc3BlY2lmaWMgaW50ZWdyYXRlZCBjaXJjdWl0cyAoQVNJQykjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTAuMDAjVGhpbiBxdWFkIGZsYXQgcGFjayAoVFFGUCkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTEuMDAjUHJvZ3JhbW1hYmxlIGFycmF5IGxvZ2ljIChQQUwpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjEyLjAwI0dhdGUgYXJyYXkgbG9naWMgKEdBTCkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTMuMDAjVHJhbnNpc3RvciB0cmFuc2lzdG9yIGxvZ2ljIChUVEwpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE0LjAwI0VtaXR0ZXIgY291cGxlZCBsb2dpYyAoRUNMKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xNS4wMCNCaXBvbGFyIG9yIG1ldGFsIG94aWRlIHNlbWljb25kdWN0b3IgdGVjaG5vbG9neSAoQklNT1MpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE2LjAwI0JpcG9sYXIgY29tcGxlbWVudGFyeSBtZXRhbCBveGlkZSBzZW1pY29uZHVjdG9yIHRlY2hub2xvZ3kgKEJJQ01PUykjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTcuMDAjU21hcnQgY2FyZHMjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTguMDAjVXBzY3JlZW5lZCBpbnRlZ3JhdGVkIGNpcmN1aXRzIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE5LjAwI0xpbmVhciBpbnRlZ3JhdGVkIGNpcmN1aXRzIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjIwLjAwI0RpZ2l0YWwgaW50ZWdyYXRlZCBjaXJjdWl0cyMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4yMS4wMCNTeW5jaHJvbm91cyBkeW5hbWljIHJhbmRvbSBhY2Nlc3MgbWVtb3J5IChTRFJBTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMjIuMDAjRmxhc2ggbWVtb3J5IzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjIzLjAwI1JhbWJ1cyBkeW5hbWljIHJhbmRvbSBhY2Nlc3MgbWVtb3J5UkRSQU0jMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMjQuMDAjU3luY2hyb25vdXMgZ3JhcGhpYyByYW5kb20gYWNjZXNzIG1lbW9yeSBTR1JBTSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNy4wMC4wMCNIeWJyaWQgaW50ZWdyYXRlZCBjaXJjdWl0cyMzMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNy4wMS4wMCNNaWNyb3Byb2Nlc3NvcnMjMzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTcuMDIuMDAjQ2xvY2sgb3NjaWxsYXRvcnMjMzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTcuMDMuMDAjTWljcm9jb250cm9sbGVycyMzMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMC4xOC4wMC4wMCNVbm1vdW50ZWQgaW50ZWdyYXRlZCBjaXJjdWl0cyMzMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xOC4wMS4wMCNVbm1vdW50ZWQgZGllcyMzMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xOC4wMi4wMCNVbm1vdW50ZWQgd2FmZXJzIzMyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE4LjAzLjAwI1VubW91bnRlZCBjaGlwcyMzMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMS4wMC4wMC4wMCNEaW9kZXMgYW5kIHRyYW5zaXN0b3JzIGFuZCBzZW1pY29uZHVjdG9yIGRldmljZXMjMzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDAuMDAjRGlvZGVzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjAxLjAwI01pY3Jvd2F2ZSBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDIuMDAjWmVuZXIgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjAzLjAwI0xpZ2h0IGVtaXR0aW5nIGRpb2RlcyAoTEVEcykjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDQuMDAjU2Nob3R0a3kgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjA1LjAwI1R1bm5lbCBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDYuMDAjUGhvdG9zZW5zaXRpdmUgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjA3LjAwI1ZhcmlhYmxlIGNhcGFjaXRhbmNlIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wOC4wMCNTb2xhciBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDkuMDAjUG93ZXIgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjEwLjAwI1JhZGlvIGZyZXF1ZW5jeSAoUkYpIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4xMS4wMCNTbWFsbCBzaWduYWwgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjAwLjAwI1RyYW5zaXN0b3JzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjAxLjAwI1Bob3RvIHNlbnNpdGl2ZSB0cmFuc2lzdG9ycyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wMi4wMCNGaWVsZCBlZmZlY3QgdHJhbnNpc3RvcnMgKEZFVCkjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDMuMDAjTWV0YWwgb3hpZGUgc2lsaWNvbmUgZmllbGQgZWZmZWN0IHRyYW5zaXN0b3JzIChNT1NGRVQpIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA0LjAwI1RyYW5zaXN0b3IgY2hpcHMjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDUuMDAjVHJhbnNpc3RvciBkaWVzIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA2LjAwI1RyYW5zaXN0b3Igd2FmZXJzIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA3LjAwI0JpcG9sYXIgZGFybGluZ3RvbiBvciByYWRpbyBmcmVxdWVuY3kgKFJGKSB0cmFuc2lzdG9ycyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wOC4wMCNVbmlqdW5jdGlvbiB0cmFuc2lzdG9ycyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wOS4wMCNJbnN1bGF0ZWQgZ2F0ZSBiaXBvbGFyIHRyYW5zaXN0b3JzIChJR0JUKSMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4xMC4wMCNKdW5jdGlvbiBmaWVsZCBlZmZlY3QgdHJhbnNpc3RvcnMgKEpGRVQpIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE3LjAwLjAwI1NlbWljb25kdWN0b3IgZGV2aWNlcyMzMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wMS4wMCNQaG90b3ZvbHRhaWMgY2VsbHMjMzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDIuMDAjVGh5cmlzdG9ycyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wMy4wMCNEaWFjcyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wNC4wMCNUcmlhY3MjMzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDUuMDAjT3B0aWNhbCBjb3VwbGVkIGlzb2xhdG9ycyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wNi4wMCNDcnlzdGFsIG9zY2lsbGF0b3JzIzMyLjExLjE3LjAwLjAwCi11bnNwc2M3IzMyLjExLjE4LjAwLjAwI0ludGVncmF0ZWQgY2lyY3VpdCBjb21wb25lbnRzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE4LjAxLjAwI0ludGVyZ3JhdGVkIGNpcmN1aXQgbGlkcyMzMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOC4wMi4wMCNJbnRlZ3JhdGVkIGNpcmN1aXQgcGFja2FnZXMjMzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTguMDMuMDAjU3Vic3RyYXRlcyMzMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wMC4wMCNSYWRpbyBmcmVxdWVuY3kgKFJGKSBjb21wb25lbnRzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjAxLjAwI0FtcGxpZmllcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDIuMDAjQXR0ZW51YXRvcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDMuMDAjQ2lyY3VsYXRvcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDQuMDAjQ291cGxlcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDUuMDAjRGVsYXkgbGluZXMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDYuMDAjRGV0ZWN0b3JzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjA3LjAwI0R1bW15IGxvYWRzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjA4LjAwI1JhZGlvIGZyZXF1ZW5jeSAoUkYpIGZpbHRlcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDkuMDAjSXNvbGF0b3JzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjEwLjAwI01peGVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xMS4wMCNQaGFzZSBzaGlmdGVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xMi4wMCNQb3dlciBkaXZpZGVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xMy4wMCNXYXZlIHR1YmUgYW1wbGlmaWVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xNC4wMCNUZXJtaW5hdGlvbnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMTUuMDAjTW9kdWxhdG9ycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMi4wMC4wMC4wMCNQcmludGVkIGNvbXBvbmVudHMjMzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTUuMDAuMDAjQ2FwYWNpdG9ycyMzMi4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNS4wMS4wMCNGaXhlZCBjYXBhY2l0b3JzIzMyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE1LjAyLjAwI1ZhcmlhYmxlIGNhcGFjaXRvcnMgb3IgdmFyYWN0b3JzIzMyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE1LjAzLjAwI0FkanVzdGFibGUgcHJlIHNldCBjYXBhY2l0b3JzIzMyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE1LjA0LjAwI0NhcGFjaXRvciBuZXR3b3JrcyMzMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wMC4wMCNSZXNpc3RvcnMjMzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDEuMDAjVGhlcm1pc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDIuMDAjRnVzaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjAzLjAwI1ZhcmlhYmxlIHJlc2lzdG9ycyBvciB2YXJpc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDQuMDAjRml4ZWQgY2FyYm9uIHJlc2lzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wNS4wMCNGaXhlZCB0aGljayBmaWxtIHJlc2lzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wNi4wMCNGaXhlZCB0aGluIGZpbG0gcmVzaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjA3LjAwI1Jlc2lzdG9yIG5ldHdvcmtzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjA4LjAwI1dpcmUgd291bmQgcmVzaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjAwLjAwI0Rpc2NyZXRlIGNvbXBvbmVudHMjMzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDEuMDAjUmVjdGlmaWVycyMzMi4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNy4wMi4wMCNJbmR1Y3RvcnMjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDMuMDAjRmVycml0ZXMjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDQuMDAjU3RhdGljIGNvbnZlcnRlcnMjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDUuMDAjSW52ZXJ0ZXJzIzMyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjA2LjAwI1Jlc2lzdG9yIG9yIGNhcGFjaXRvciAoUi9DKSBuZXR3b3JrcyMzMi4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMy4wMC4wMC4wMCNQYXNzaXZlIGNvbXBvbmVudHMjMzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTMuMTAuMDAuMDAjVGVtcGVyYXR1cmUgY29udHJvbHMjMzIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTMuMTAuMDEuMDAjSGVhdCBzaW5rcyMzMi4xMy4xMC4wMC4wMAotdW5zcHNjNyMzOS4wMC4wMC4wMC4wMCNMaWdodGluZyBhbmQgRWxlY3RyaWNhbCBBY2Nlc3NvcmllcyBhbmQgU3VwcGxpZXMjMzkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMDAuMDAuMDAjTGFtcHMgYW5kIGxpZ2h0YnVsYnMgYW5kIGxhbXAgY29tcG9uZW50cyMzOS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wMC4wMCNMYW1wcyMzOS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wMS4wMCNIYWxvZ2VuIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjAyLjAwI01lZGljYWwgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDMuMDAjU29sYXIgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDQuMDAjQWxjb2hvbCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wNS4wMCNGbHVvcmVzY2VudCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wNi4wMCNBcmMgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDguMDAjU2hhZG93bGVzcyBvciBzY2lhbHl0aWMgb3BlcmF0aW9uIGxpZ2h0IzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjA5LjAwI1N0YWdlIG9yIHN0dWRpbyBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xMC4wMCNGaWxhbWVudCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xMS4wMCNIaWdoIGludGVuc2l0eSBkaXNjaGFyZ2UgKEhJRCkgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTIuMDAjSW5jYW5kZXNjZW50IGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjEzLjAwI0luZnJhcmVkIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjE0LjAwI01ldGFsIGhhbGlkZSBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xNS4wMCNWYXBvciBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xNi4wMCNVbHRyYXZpb2xldCAoVVYpIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjE3LjAwI0hpZ2ggcHJlc3N1cmUgc29kaXVtIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE3LjAwLjAwI0J1bGIgZ2xhc3MjMzkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTcuMDEuMDAjRmx1b3Jlc2NlbnQgdHViZXMjMzkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTguMDAuMDAjTGFtcCBjb21wb25lbnRzIzM5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjEwLjE4LjAxLjAwI0xhbXAgZmlsYW1lbnQjMzkuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTkuMDAuMDAjTW9iaWxlIGFuZCBmaXhlZCBmbG9vZGxpZ2h0aW5nIzM5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjEwLjE5LjAxLjAwI0xpZ2h0IHRvd2VyIzM5LjEwLjE5LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE5LjAyLjAwI0xpZ2h0IGNhcnQjMzkuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTkuMDMuMDAjTGlnaHQgc3RhbmQjMzkuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMDAuMDAuMDAjTGlnaHRpbmcgYW5kIGZpeHR1cmVzIGFuZCBhY2Nlc3NvcmllcyMzOS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wMC4wMCNJbnRlcmlvciBsaWdodGluZyBhbmQgZml4dHVyZXMjMzkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDEuMDAjRmx1b3Jlc2NlbnQgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDIuMDAjVmFuaXR5IGxpZ2h0aW5nIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjAzLjAwI1dhbGwgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDQuMDAjU3RhZ2Ugb3Igc3R1ZGlvIGxpZ2h0aW5nIHN5c3RlbXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDUuMDAjUmVjZXNzZWQgbGlnaHRpbmcjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDYuMDAjQ2hhbmRlbGllcnMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDcuMDAjRGVzayBmaXh0dXJlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wOC4wMCNUcmFjayBsaWdodGluZyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wOS4wMCNGbG9vciB0b3JjaGllcmUjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTAuMDAjVGFibGUgbGFtcHMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTEuMDAjRGVjb3JhdGl2ZSBsaWdodGluZyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xMi4wMCNMYWJvcmF0b3J5IGJlbmNoIGxpZ2h0cyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xMy4wMCNJbnRlcmlvciBzb2xhciBsaWdodGluZyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xNC4wMCNUcmVlIGxpZ2h0cyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xNS4wMCNEb3dubGlnaHRpbmcgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTYuMDAjVGFzayBsaWdodGluZyBmaXh0dXJlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xNy4wMCNXYXggY2FuZGxlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xOC4wMCNIYW5kIG9yIGV4dGVuc2lvbiBsaWdodCMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xOS4wMCNDYW5kbGUgaG9sZGVycyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4yMC4wMCNIYWxvZ2VuIGxpZ2h0aW5nIGZpeHR1cmVzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE2LjAwLjAwI0V4dGVyaW9yIGxpZ2h0aW5nIGFuZCBmaXh0dXJlcyMzOS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNi4wMy4wMCNSb2Fkd2F5IG9yIGhpZ2h3YXkgbGlnaHRpbmcjMzkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTYuMDUuMDAjTGFuZHNjYXBlIG9yIGFyZWEgbGlnaHRpbmcjMzkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTYuMDYuMDAjVW5kZXJ3YXRlciBsaWdodGluZyMzOS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNi4wOC4wMCNSZXNpZGVudGlhbCBzdHJlZXQgbGlnaHRzIzM5LjExLjE2LjAwLjAwCi11bnNwc2M3IzM5LjExLjE2LjA5LjAwI0tlcm9zZW5lIG9yIHByb3BhbmUgb3IgYnV0YW5lIGxhbnRlcm5zIzM5LjExLjE2LjAwLjAwCi11bnNwc2M3IzM5LjExLjE3LjAwLjAwI0VtZXJnZW5jeSBsaWdodGluZyMzOS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNy4wMi4wMCNGbGFzaGxpZ2h0cyMzOS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNy4wMy4wMCNTdG9ybSBsaWdodHMjMzkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTcuMDQuMDAjRmxvb2QgbGlnaHRzIzM5LjExLjE3LjAwLjAwCi11bnNwc2M3IzM5LjExLjE3LjA1LjAwI0xpZ2h0IHN0aWNrcyMzOS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wMC4wMCNMaWdodGluZyBhY2Nlc3NvcmllcyMzOS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wMS4wMCNMYW1wIGJhbGxhc3RzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjAyLjAwI0xhbXAgaG91c2luZ3MjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDMuMDAjTGFtcCBzb2NrZXRzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjA0LjAwI0xhbXAgYmFzZXMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDUuMDAjTGFtcCBicmFja2V0cyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wNi4wMCNMaWdodCBib3hlcyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wOC4wMCNHcmlsbGVzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjA5LjAwI0xpZ2h0IGNvbmRpdGlvbmVyIGZpbHRlcnMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMTAuMDAjTGFtcCBzdGFydGVyIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjExLjAwI0VsZWN0cmlmaWVkIHRyYWNrcyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4xMi4wMCNMYW1wIGNvdmVycyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOS4wMC4wMCNIYXphcmRvdXMgbG9jYXRpb24gbGlnaHRpbmcgYW5kIGZpeHR1cmVzIzM5LjExLjAwLjAwLjAwCi11bnNwc2M3IzM5LjExLjE5LjAxLjAwI0hhemFyZG91cyBsb2NhdGlvbiBmbG91cmVzY2VudCBmaXh0dXJlcyMzOS4xMS4xOS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOS4wMi4wMCNIYXphcmRvdXMgbG9jYXRpb24gaW5jYW5kZXNjZW50IGZpeHR1cmVzIzM5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQwLjAwLjAwLjAwLjAwI0Rpc3RyaWJ1dGlvbiBhbmQgQ29uZGl0aW9uaW5nIFN5c3RlbXMgYW5kIEVxdWlwbWVudCBhbmQgQ29tcG9uZW50cyM0MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4wMC4wMC4wMCNIZWF0aW5nIGFuZCB2ZW50aWxhdGlvbiBhbmQgYWlyIGNpcmN1bGF0aW9uIzQwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjAwLjAwI1ZlbnRpbGF0aW9uIzQwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjAxLjAwI0FpciBjb2xsZWN0b3JzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjAyLjAwI0FpciBleGhhdXN0ZXJzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjAzLjAwI1ZlbnRzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjA0LjAwI1ZlbnRpbGF0aW9uIGRhbXBlcnMjNDAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTUuMDUuMDAjQWlyIGRpZmZ1c2VycyM0MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNS4wNi4wMCNWZW50aWxhdGlvbiBwaXBlcyM0MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNi4wMC4wMCNBaXIgY2lyY3VsYXRpb24jNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTYuMDEuMDAjQmxvd2VycyM0MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNi4wMi4wMCNBaXIgY2lyY3VsYXRvcnMjNDAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTYuMDMuMDAjSW1wZWxsZXJzIzQwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE2LjA0LjAwI0ZhbnMjNDAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTcuMDAuMDAjQ29vbGluZyM0MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNy4wMS4wMCNBaXIgY29uZGl0aW9uZXJzIzQwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE3LjAyLjAwI0Nvb2xpbmcgZXhjaGFuZ2VycyM0MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNy4wMy4wMCNFdmFwb3JhdGl2ZSBjb29sZXJzIzQwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE3LjA0LjAwI0NvbmRlbnNpbmcgdW5pdHMjNDAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDAuMDAjSGVhdGluZyBlcXVpcG1lbnQjNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDEuMDAjUmFkaWF0b3JzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjAyLjAwI0hlYXQgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wMy4wMCNGaXJlcGxhY2VzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA0LjAwI0hlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDUuMDAjRnVybmFjZXMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDYuMDAjSGVhdCBwdW1wcyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wNy4wMCNTb2xhciBoZWF0aW5nIHVuaXRzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA4LjAwI0hlYXRpbmcgc3RvdmVzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA5LjAwI0NpcmN1bGF0aW9uIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTAuMDAjQ29pbCBkdWN0IGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTEuMDAjQ29udmVjdGlvbiBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjEyLjAwI0RpdmlkZWQgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xMy4wMCNEb3VibGUgc3BsaXQgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xNC4wMCNGaW5uZWQgdHVidWxhciBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE1LjAwI0ltbWVyc2lvbiBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE2LjAwI0tldHRsZSBleGNoYW5nZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE3LjAwI09uZSBwYXNzIGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTguMDAjUHJvY2VzcyBhaXIgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xOS4wMCNTcGFjZSBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjIwLjAwI1NwbGl0IGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjEuMDAjU3RyaXAgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yMi4wMCNUdWJ1bGFyIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjMuMDAjVHdvIHBhc3MgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yNC4wMCNRdWFydHogaGVhdGVyIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjI1LjAwI0RvbWVzdGljIHdhdGVyIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjYuMDAjQ29tbWVyY2lhbCB3YXRlciBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE5LjAwLjAwI0h1bWlkaXR5IGNvbnRyb2wjNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTkuMDEuMDAjVmFwb3JpemVycyM0MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOS4wMi4wMCNEZWh1bWlkaWZpZXJzIzQwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE5LjAzLjAwI0h1bWlkaWZpZXJzIzQwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQwLjEwLjIwLjAwLjAwI0JvaWxlcnMjNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMjAuMDEuMDAjRmlyZSB0dWJlIGJvaWxlcnMjNDAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMjAuMDIuMDAjV2F0ZXIgdHViZSBib2lsZXIjNDAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMjAuMDMuMDAjRWxlY3RyaWMgYm9pbGVycyM0MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4wMC4wMC4wMCNGbHVpZCBhbmQgZ2FzIGRpc3RyaWJ1dGlvbiM0MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNS4wMC4wMCNGbHVpZCBhbmQgZ2FzIGNvbmR1aXRzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjE1LjAyLjAwI0R1Y3RzIzQwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE1LjA0LjAwI0hvc2VzIzQwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjAwLjAwI1ZhbHZlcyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wMS4wMCNDaGVjayB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDIuMDAjTmVlZGxlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wMy4wMCNQbmV1bWF0aWMgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjA0LjAwI1NhZmV0eSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDUuMDAjU29sZW5vaWQgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjA2LjAwI1JlbGllZiB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDcuMDAjQmFsbCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDguMDAjSHlkcmF1bGljIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wOS4wMCNDb250cm9sIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xMC4wMCNGbG9hdCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTEuMDAjR2xvYmUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjEyLjAwI0V4cGFuc2lvbiB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTMuMDAjR2F0ZSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTQuMDAjQnV0dGVyZmx5IHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xNS4wMCNGbGFwIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xNi4wMCNWYWx2ZSBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTcuMDAjQW5nbGUgZ2xvYmUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjE4LjAwI0JhbGwgY2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjE5LjAwI0J1dHRlcmZseSBsdWcgcGF0dGVybiB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjAuMDAjQnV0dGVyZmx5IHdhZmVyIHBhdHRlcm4gdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjIxLjAwI0RpYXBocmFnbSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjIuMDAjSW5saW5lIGNoZWNrIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yMy4wMCNLbmlmZSBnYXRlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yNC4wMCNMdWJyaWNhdGVkIHBsdWcgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjI1LjAwI011ZCBvciBzbHVzaCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjYuMDAjTm9ubHVicmljYXRlZCBwbHVnIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yNy4wMCNPcmlmaWNlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yOC4wMCNQaWxvdCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjkuMDAjUGluY2ggdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjMwLjAwI1Bpc3RvbiBjaGVjayB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzEuMDAjUHVtcCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzIuMDAjU2VudGluZWwgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjMzLjAwI1NsaWRlciB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzQuMDAjU3dpbmcgY2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjM1LjAwI1R1cmJpbmUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjM2LjAwI1ZhbHZlIGtpdHMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzcuMDAjV2FmZXIgY2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjAwLjAwI0hhcmR3YXJlIGFuZCBmaXR0aW5ncyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wMS4wMCNEcmFpbnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDIuMDAjRmF1Y2V0cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wMy4wMCNTaG93ZXIgaGVhZHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDQuMDAjU3BpZ290cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wNS4wMCNTcG91dHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDYuMDAjUGlwZSBwbHVncyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wNy4wMCNQaXBlIGNsYW1wcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wOC4wMCNMaXF1aWQgdHJhcHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDkuMDAjU3RlYW0gdHJhcHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTAuMDAjUGx1bWJpbmcgZmxhbmdlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xMS4wMCNNZXRhbCBvciBydWJiZXIgZXhwYW5zaW9uIGpvaW50cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xMi4wMCNQaXBlIGNhcHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTMuMDAjUGx1bWJpbmcgdW5pb25zIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE0LjAwI1BsdW1iaW5nIGNyb3NzZXMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTUuMDAjUGx1bWJpbmcgbmlwcGxlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xNi4wMCNQIHRyYXBzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE3LjAwI1BpcGUgYmVuZHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTguMDAjUGx1bWJpbmcgZWxib3dzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE5LjAwI1BsdW1iaW5nIGFkYXB0ZXJzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjIwLjAwI1BsdW1iaW5nIGNvbm5lY3RvcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjEuMDAjUGx1bWJpbmcgY291cGxpbmdzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjIyLjAwI0hhbGYgY291cGxpbmdzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjIzLjAwI1JlZHVjaW5nIGNvdXBsaW5ncyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yNC4wMCNQbHVtYmluZyBidXNoaW5ncyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yNS4wMCNQbHVtYmluZyBoYW5nZXJzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI2LjAwI0h5ZHJhbnRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI3LjAwI1BsdW1iaW5nIHZlbnRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI4LjAwI0ZsdWlkIHJlZ3VsYXRvcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjkuMDAjUGx1bWJpbmcgdGVlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zMC4wMCNTdHJhaW5lcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzEuMDAjTm96emxlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zMi4wMCNQbHVtYmluZyBzcGlkZXJzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjMzLjAwI1BpcGUgZml0dGluZyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zNC4wMCNIb3NlIGZpdHRpbmcjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzUuMDAjRnVubmVscyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zNi4wMCNHcmVhc2UgZml0dGluZyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zNy4wMCNEaWFwaHJhZ21zIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjAwLjAwI1R1YmUgYW5kIHR1YmluZyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wMS4wMCNGZXJyb3VzIGFsbG95IHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wMi4wMCNDb3BwZXIgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjAzLjAwI1RpdGFuaXVtIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wNC4wMCNNYWduZXNpdW0gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA1LjAwI1RpbiB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDYuMDAjQnJhc3MgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA3LjAwI0xlYWQgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA4LjAwI0Jyb256ZSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDkuMDAjWmluYyB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTAuMDAjU3RlZWwgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjExLjAwI0lyb24gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjEyLjAwI0NlbWVudCB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTMuMDAjUGxhc3RpYyB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTQuMDAjUnViYmVyIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xNS4wMCNHbGFzcyB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTYuMDAjU3RvbmUgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjE3LjAwI05vbiBmZXJyb3VzIGFsbG95IHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xOC4wMCNBbHVtaW51bSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTkuMDAjU3RhaW5sZXNzIHN0ZWVsIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4yMC4wMCNQcmVjaW91cyBtZXRhbCB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMjEuMDAjTnlsb24gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE5LjAwLjAwI0R1Y3RzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjE5LjAxLjAwI0ZsZXhpYmxlIGR1Y3RzIzQwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE5LjAyLjAwI1JpZ2lkIGR1Y3RzIzQwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjAwLjAwI0hvc2VzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjAxLjAwI0FjaWQgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDIuMDAjQWlyIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjAzLjAwI0RyaWxsIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjA0LjAwI01hcmluZSBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wNS4wMCNNYXRlcmlhbCBoYW5kbGluZyBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wNi4wMCNPaWwgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDcuMDAjU3BlY2lhbCBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wOC4wMCNXYXRlciBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wOS4wMCNBaXIgd2F0ZXIgZ2FzIG11bHRpcHVycG9zZSBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4xMC4wMCNUZWZsb24gbGluZWQgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDAuMDAjUGlwZSM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wMS4wMCNDYXJib24gc3RlZWwgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wMi4wMCNEdWN0aWxlIGlyb24gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wMy4wMCNIaWdoIG5pY2tlbCBhbGxveSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjA0LjAwI0hpZ2ggeWllbGQgc3RlZWwgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wNS4wMCNGZXJyaXRpYyBhbGxveSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjA2LjAwI0FsdW1pbnVtIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDcuMDAjQnJhc3MgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wOC4wMCNCcm9uemUgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wOS4wMCNDb25jcmV0ZSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjEwLjAwI0NvcHBlciBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjExLjAwI0Nhc3QgaXJvbiBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjEyLjAwI0xlYWQgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xMy4wMCNNYWduZXNpdW0gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xNC4wMCNOb24gZmVycm91cyBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjE1LjAwI1BsYXN0aWMgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xNi4wMCNSdWJiZXIgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xNy4wMCNTdGFpbmxlc3Mgc3RlZWwgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xOC4wMCNUaW4gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xOS4wMCNUaXRhbml1bSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjIwLjAwI1ppbmMgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4yMS4wMCNIb3NlIHJlZWxzIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIyLjAwLjAwI0ZsdWlkIGFuZCBnYXMgcmVndWxhdG9ycyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMi4wMS4wMCNHYXMgcmVndWxhdG9ycyM0MC4xNC4yMi4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMi4wMi4wMCNGbHVpZCByZWd1bGF0b3JzIzQwLjE0LjIyLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjAwLjAwI1BpcGUgZml0dGluZ3MjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDEuMDAjUGlwZSBhbmdsZSBmYWNlIHJpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjAyLjAwI1BpcGUgYnJhbmNoIG91dGxldHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDMuMDAjUGlwZSBsYXRlcmFscyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wNC4wMCNQaXBlIGluc2VydHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDUuMDAjUGlwZSByZWR1Y2VycyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wNi4wMCNQaXBlIHNhZGRsZXMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDcuMDAjUGlwZSBzdHViZW5kcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wOC4wMCNQaXBlIHd5ZXMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDkuMDAjUGlwZSBiZW5kcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xMC4wMCNQaXBlIGNhcHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTEuMDAjUGlwZSBoYWxmIGNvdXBsaW5ncyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xMi4wMCNQaXBlIGV4cGFuc2lvbiBqb2ludHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTMuMDAjUGlwZSBwbHVncyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xNC4wMCNQaXBlIGJ1c2hpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjE1LjAwI1BpcGUgY291cGxpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjE2LjAwI1BpcGUgY3Jvc3NlcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xNy4wMCNQaXBlIGVsYm93cyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xOC4wMCNQaXBlIG5pcHBsZXMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTkuMDAjUGlwZSB0ZWVzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjIwLjAwI1BpcGUgdW5pb25zIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjIxLjAwI1BpcGUgcmVkdWNpbmcgY291cGxpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjIyLjAwI1BpcGUgcmVwYWlyIGNsYW1wcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4yMy4wMCNSdXB0dXJlIGRpc2sjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDAuMDAjUGlwZSBmbGFuZ2VzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjAxLjAwI0FtbW9uaWEgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wMi4wMCNCYWNrdXAgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wMy4wMCNCbGluZCBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA0LjAwI0xhcGpvaW50IGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDUuMDAjTG9uZyB3ZWxkbmVjayBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA2LjAwI09yaWZpY2UgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wNy4wMCNQbGF0ZSBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA4LjAwI1NsaXBvbiBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA5LjAwI1NvY2tldHdlbGQgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4xMC4wMCNTcGVjdGFjbGUgYmxpbmQgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4xMS4wMCNUaHJlYWRlZCBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjEyLjAwI1dlbGRuZWNrIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjUuMDAuMDAjVHJhcHMgYW5kIHN0cmFpbmVycyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNS4wMS4wMCNMaXF1aWQgc3RyYWluZXJzIzQwLjE0LjI1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI1LjAyLjAwI0xpcXVpZCB0cmFwcyM0MC4xNC4yNS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNS4wMy4wMCNTdGVhbSB0cmFwcyM0MC4xNC4yNS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNS4wNC4wMCNTdGVhbSBzdHJhaW5lcnMjNDAuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjYuMDAuMDAjVHViZSBmaXR0aW5ncyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNi4wMS4wMCNCcmFzcyB0dWJlIGZpdHRpbmdzIzQwLjE0LjI2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI2LjAyLjAwI0NhcmJvbiBzdGVlbCB0dWJlIGZpdHRpbmdzIzQwLjE0LjI2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI2LjAzLjAwI1N0YWlubGVzcyBzdGVlbCB0dWJlIGZpdHRpbmdzIzQwLjE0LjI2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjAwLjAwLjAwI0luZHVzdHJpYWwgcHVtcHMgYW5kIGNvbXByZXNzb3JzIzQwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjAwLjAwI1B1bXBzIzQwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjAxLjAwI0FpciBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wMi4wMCNWYWN1dW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDMuMDAjQ2VudHJpZnVnYWwgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDQuMDAjQ2lyY3VsYXRpbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDUuMDAjRG9zaW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjA2LjAwI0hhbmQgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDcuMDAjSXJyaWdhdGlvbiBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wOC4wMCNNdWQgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDkuMDAjUmVjaXByb2NhdGluZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xMC4wMCNXYXRlciBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xMS4wMCNXZWxsIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjEyLjAwI1N1bXAgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTMuMDAjU3VibWVyc2libGUgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTQuMDAjU3RlYW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTUuMDAjU29sZW5vaWQgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTYuMDAjU2hlYXIgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTcuMDAjU2V3YWdlIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjE4LjAwI1NlYWxsZXNzIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjE5LjAwI1Nhbml0YXJ5IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjIwLjAwI1NhbXBsaW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjIxLjAwI1JvdGFyeSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yMi4wMCNSZXZlcnNlIG9zbW9zaXMgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjMuMDAjUG9zaXRpdmUgZGlzcGxhY2VtZW50IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI0LjAwI09pbCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yNS4wMCNTbHVkZ2UgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjYuMDAjVHVyYmluZSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yNy4wMCNQbHVuZ2VyIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI4LjAwI09zY2lsbGF0aW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI5LjAwI0RydW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzAuMDAjRHJlZGdlIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjMxLjAwI0Rld2F0ZXJpbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzIuMDAjRnVlbCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zMy4wMCNIeWRyYXVsaWMgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzQuMDAjQ3J5b2dlbmljIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM1LjAwI1NsdWRnZSBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM2LjAwI1Nld2FnZSBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM3LjAwI1N1Ym1lcnNpYmxlIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzguMDAjV2F0ZXIgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zOS4wMCNXZWxsIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDAuMDAjU3VtcCBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQxLjAwI0Rvc2luZyBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQyLjAwI0NlbnRyaWZ1Z2FsIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDMuMDAjQ2lyY3VsYXRpb24gcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40NC4wMCNSb3RhcnkgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40NS4wMCNQdW1wIHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40Ni4wMCNBeGlhbCBzcGxpdCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40Ny4wMCNEZWVwd2VsbCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40OC4wMCNEaWFwaHJhZ20gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDkuMDAjRG91YmxlIGRpYXBocmFnbSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41MC4wMCNEdXBsZXggcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTEuMDAjR2VhciBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41Mi4wMCNNZXRlcmluZyBvciBpbmplY3Rpb24gb3IgcHJvcG9ydGlvbmluZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41My4wMCNQcm9ncmVzc2l2ZSBjYXZpdHkgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTQuMDAjUmFtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU1LjAwI1JvdGFyeSBjYW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTYuMDAjUm90YXJ5IGxvYmUgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTcuMDAjUm90YXRpbmcgcGlzdG9uIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU4LjAwI1NjcmV3IFB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU5LjAwI1NpbXBsZXggcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNjAuMDAjU2xpZGluZyB2YW5lIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjYxLjAwI1RyaXBsZXggcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNjIuMDAjV29ybSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wMC4wMCNDb21wcmVzc29ycyM0MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wMS4wMCNBaXIgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDIuMDAjQXhpYWwgZmxvdyBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wMy4wMCNEaWFwaHJhZ20gY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDQuMDAjR2FzIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA1LjAwI01vdG9yIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA2LjAwI1JlY2lwcm9jYXRpbmcgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDcuMDAjUmVmcmlnZXJhbnQgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDguMDAjUm90YXJ5IGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA5LjAwI1NjcmV3IGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjEwLjAwI0NvbXByZXNzb3IgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjExLjAwI0JhcnJlbCBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xMi4wMCNDZW50cmlmdWdhbCBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xMy4wMCNDb21iaW5hdGlvbiBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xNC4wMCNTZW1pIHJhZGlhbCBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xNS4wMCNUdXJibyBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xNi4wMCNDb21wcmVzc29yIGtpdHMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTcuMDAuMDAjUHVtcCBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNDAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTcuMDEuMDAjUHVtcCBjYXNpbmdzIzQwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE3LjAyLjAwI1B1bXAgcGFja2luZ3MjNDAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMDAuMDAuMDAjSW5kdXN0cmlhbCBmaWx0ZXJpbmcgYW5kIHB1cmlmaWNhdGlvbiM0MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wMC4wMCNGaWx0ZXJzIzQwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjAxLjAwI1ZhY3V1bSBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjAyLjAwI1dhdGVyIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDMuMDAjRHVzdCBjb2xsZWN0b3JzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA0LjAwI09pbCBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA1LjAwI0FpciBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA2LjAwI0ZpbHRlcmluZyBtYWNoaW5lcnkjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDcuMDAjRmlsdGVyIG1lbWJyYW5lcyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wOC4wMCNCYWcgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wOS4wMCNBYnNvcnB0aW9uIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTAuMDAjQmFnIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTEuMDAjQ29hbGVzY2luZyBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjEyLjAwI0VsZWN0cm9uaWMgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xMy4wMCNGdWVsIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTQuMDAjR2FzIHBpcGVsaW5lIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTUuMDAjSHlkcmF1bGljIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTYuMDAjSW4gbGluZSBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjE3LjAwI0xpZ2h0IGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTguMDAjTWljcm9maWJlciBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjE5LjAwI1BhbmVsIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMjAuMDAjUmFkaWFsIGZpbiBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjIxLjAwI0ZpbHRlciBCYXNlIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjIyLjAwI0ZpbHRlciBGaW5zIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjIzLjAwI0Z1ZWwjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMjQuMDAjUGFpbnQjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTYuMDAuMDAjUHVyaWZpY2F0aW9uIzQwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE2LjE2LjAxLjAwI0FpciBzY3J1YmJlcnMjNDAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTYuMDIuMDAjQWlyIGNsZWFuZXJzIzQwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE3LjAwLjAwI1NlcGFyYXRvcnMjNDAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTcuMDEuMDAjQ2VudHJpZnVnZXMjNDAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTcuMDIuMDAjV2V0IHNjcnViYmVycyM0MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNy4wMy4wMCNNaXN0IGVsaW1pbmF0b3JzIzQwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE4LjAwLjAwI0ZpbHRlciBtZWRpYSM0MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xOC4wMS4wMCNNZXRhbCBmYWJyaWMgbWVkaWEjNDAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTguMDIuMDAjUHJlc3NlZCBmZWx0cyM0MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xOC4wMy4wMCNGaWx0ZXIgcGFwZXJzIzQwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE4LjA1LjAwI0ZpbHRlciBjbG90aCM0MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM0MS4wMC4wMC4wMC4wMCNMYWJvcmF0b3J5IGFuZCBNZWFzdXJpbmcgYW5kIE9ic2VydmluZyBhbmQgVGVzdGluZyBFcXVpcG1lbnQjNDEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMDAuMDAuMDAjTGFib3JhdG9yeSBhbmQgc2NpZW50aWZpYyBlcXVpcG1lbnQjNDEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDAuMDAjTGFib3JhdG9yeSBibGVuZGluZyBhbmQgZGlzcGVyc2luZyBhbmQgaG9tb2dlbml6aW5nIGFuZCBtaXhpbmcgYW5kIHN0aXJyaW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wMS4wMCNNaXhlcnMgb3IgYmxlbmRlcnMgb3IgZW11bHNpZmllcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDIuMDAjU3RvbWFjaGVycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wMy4wMCNMYWJvcmF0b3J5IHNwcmF5ZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjA0LjAwI0hvbW9nZW5pc2VycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wNS4wMCNGcmVuY2ggcHJlc3N1cmUgY2VsbHMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDYuMDAjUm9sbGVyIG1peGVycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wNy4wMCNSb3RhdG9ycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wOC4wMCNWaWJyYXRvcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTAuMDAjTWFnbmV0aWMgc3BpbiBiYXJzIG9yIHJldHJpZXZlcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTEuMDAjU3RpcnJpbmcgdGFibGVzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjEyLjAwI011bHRpIGJhbmsgb3IgZmxvY2N1bGF0aW9uIGVxdWlwbWVudCM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4xMy4wMCNTaGFrZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjE0LjAwI0xhYm9yYXRvcnkgY2VudHJpZnVnZXMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTUuMDAjTGlxdWlkIG1lYXN1cmluZyBjYW5zIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjE2LjAwI0xpcXVpZCBkaXNwZW5zZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjAwLjAwI0xhYm9yYXRvcnkgZml4dHVyZXMgYW5kIGFjY2Vzc29yaWVzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjAzLjAwI0xhYm9yYXRvcnkgc3RhbmRzIG9yIGNsYW1wcyBvciB0b25ncyM0MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4wNC4wMCNTbGlkZSBjb250YWluZXJzIzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjA1LjAwI1NsaWRlIGRyeWluZyBwbGF0ZXMjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDcuMDAjTWljcm9zbGlkZSBtYWtpbmcgZXF1aXBtZW50IzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjA4LjAwI01pY3Jvc2xpZGUgc3RvcmFnZSBlcXVpcG1lbnQjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDkuMDAjU3RhdGljIGVsaW1pbmF0b3JzIzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjExLjAwI1NsaWRlIHdhcm1lcnMjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDAuMDAjTGFib3JhdG9yeSBib3JpbmcgYW5kIGdyaW5kaW5nIGFuZCBjdXR0aW5nIGFuZCBjcnVzaGluZyBhbmQgcHJlc3NpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjAxLjAwI01pbGxzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjAyLjAwI1Blc3RsZSBvciBtb3J0YXJzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjAzLjAwI1Rpc3N1ZSBncmluZGVycyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wNC4wMCNNaWNyb3RvbWVzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjA1LjAwI0NydXNoZXJzIG9yIHB1bHZlcmlzZXJzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjA2LjAwI0Rpc2ludGVncmF0b3JzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjA3LjAwI0xhYm9yYXRvcnkgcHJlc3NlcyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wMC4wMCNMYWJvcmF0b3J5IGVsZWN0cm9uIGFuZCBzb2xpZCBzdGF0ZSBwaHlzaWNzIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wMS4wMCNFbGVjdHJvbiBndW5zIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjAyLjAwI1ggcmF5IGdlbmVyYXRvcnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDMuMDAjQ291bG9tZXRlcnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDQuMDAjRWxlY3Ryb3Njb3BlcyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wNS4wMCNGbHV4bWV0ZXJzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA2LjAwI01hZ25ldG9tZXRlcnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDcuMDAjRWxlY3Ryb24gZGlmZnJhY3Rpb24gYXBwYXJhdHVzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA4LjAwI05ldXRyb24gZGlmZnJhY3Rpb24gYXBwYXJhdHVzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA5LjAwI09wdGljYWwgZGlmZnJhY3Rpb24gYXBwYXJhdHVzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjEwLjAwI0RpZmZyYWN0b21ldGVycyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOS4wMC4wMCNMYWJvcmF0b3J5IGlvbmljIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOS4wMS4wMCNJb24gc291cmNlcyM0MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOS4wMi4wMCNJb24gZXhjaGFuZ2UgYXBwYXJhdHVzIzQxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE5LjAzLjAwI0lvbiBpbXBsYW50YXRpb24gZXF1aXBtZW50IzQxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjAwLjAwI1NhbXBsaW5nIGFuZCBwdXJpZmljYXRpb24gZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjAxLjAwI1NhbXBsZSBjaGFuZ2VycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wMi4wMCNTYW1wbGUgb3hpZGlzZXIjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDMuMDAjU2FtcGxlIHByZXBhcmF0aW9uIGxpbmUjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDQuMDAjU2FtcGxlIHByZXBhcmF0aW9uIGJvbWJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA1LjAwI1dhdGVyIHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA2LjAwI0FpciBzYW1wbGVycyBvciBjb2xsZWN0b3JzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA3LjAwI1JlYWdlbnQga2l0cyBmb3IgdXNlIHdpdGggYWlyIHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA4LjAwI0ZpbHRlcnMgb3Igb3RoZXIgc3BhcmUgcGFydHMgZm9yIHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA5LjAwI0R1c3QgZmFsbCBob2xkZXJzIG9yIGphcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTEuMDAjU3VscGh1ciBkaW94aWRlIG9yIHNtb2tlIHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjEyLjAwI1NhbXBsZSBhcHBsaWNhdG9ycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xMy4wMCNQbGFudCBzYW1wbGVzIGFuYWx5c2lzIGVxdWlwbWVudCM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xNC4wMCNBaXIgcG9sbHV0YW50IHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjE1LjAwI1dhdGVyIHB1cmlmaWNhdGlvbiByZWFnZW50cyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xNi4wMCNEZWlvbmlzYXRpb24gb3IgZGVtaW5lcmFsaXNhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTcuMDAjQmFzZSBleGNoYW5nZSBlcXVpcG1lbnQjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTguMDAjUmV2ZXJzZSBvc21vc2lzIGVxdWlwbWVudCM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xOS4wMCNVbHRyYSB2aW9sZXQgd2F0ZXIgcHVyaWZpY2F0aW9uIHVuaXRzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjIwLjAwI1VsdHJhIHB1cmUgd2F0ZXIgc3lzdGVtcyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yMS4wMCNXYXRlciBhbmFseXNpcyBzeXN0ZW1zIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjIyLjAwI0RlaHlkcmF0b3JzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjIzLjAwI0Rlb3hpZGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yNC4wMCNEaXNzb2x2ZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjI1LjAwI1NwZWNpbWVuIGhvbGRlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjYuMDAjU3BlY2ltZW4gY29sbGVjdG9ycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yNy4wMCNTYW1wbGUgaG9sZGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yOC4wMCNMdWJyaWNhbnQgc2FtcGxlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDAuMDAjTGFib3JhdG9yeSBmZXJtZW50YXRpb24gYW5kIGluY3ViYXRpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjAxLjAwI1N0YW5kYXJkIGZlcm1lbnRhdGlvbiB1bml0cyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wMi4wMCNDb250aW51b3VzIGN1bHR1cmUgYXBwYXJhdHVzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjAzLjAwI0FuYWVyb2JpYyBqYXJzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjA0LjAwI0RpZ2VzdGlvbiBzeXN0ZW1zIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjA1LjAwI1dhdGVyIGphY2tldGVkIGluY3ViYXRvcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDYuMDAjQ08yIGluY3ViYXRvcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDcuMDAjVGlzc3VlIGN1bHR1cmUgaW5jdWJhdG9ycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wOC4wMCNJbmN1YmF0b3Igb3ZlbnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDkuMDAjQ29vbGVkIGluY3ViYXRvcnMgKEJPRCkjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMTAuMDAjU2hha2luZyBpbmN1YmF0b3JzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjExLjAwI0luc3Bpc3NhdG9ycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4xMi4wMCNQbGF0ZSBpbmN1YmF0b3JzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjEzLjAwI0luIHZpdHJvIGN1bHR1cmUgZXF1aXBtZW50IzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjE0LjAwI0JhY3RlcmlhIGVxdWlwbWVudCM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wMC4wMCNMYWJvcmF0b3J5IGhlYXRpbmcgYW5kIGRyeWluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDEuMDAjR2FzIGJ1cm5lcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDIuMDAjU3Bpcml0IGJ1cm5lcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDMuMDAjTGFib3JhdG9yeSBpbmNpbmVyYXRvcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDQuMDAjTGFib3JhdG9yeSBoZWF0ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjA1LjAwI01hbnRsZXMgb3IgdGFwZXMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDYuMDAjSG90IHBsYXRlcyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wNy4wMCNXYXJtaW5nIGNhYmluZXRzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjA4LjAwI0RyeWluZyBvdmVucyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wOS4wMCNJbmR1Y3Rpb24gZHJ5ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjEwLjAwI0luZnJhcmVkIGRyeWVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xMS4wMCNTcHJheSBkcnllcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTIuMDAjSG90IGFpciBibG93ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjEzLjAwI0RyeWluZyBjYWJpbmV0cyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xNC4wMCNGcmVlemUgZHJ5ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjE1LjAwI0xhYm9yYXRvcnkgZnVybmFjZXMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTYuMDAjQWdlaW5nIG92ZW5zIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjE4LjAwI1F1YXJ0eiBvdmVuIHBvdHMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTkuMDAjTWljcm93YXZlIG9yIHJhZGlhbnQgaGVhdCBvdmVucyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4yMC4wMCNEZXNpY2NhdG9ycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4yMS4wMCNUZW1wZXJhdHVyZSBjeWNsaW5nIGNoYW1iZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjAwLjAwI0xhYm9yYXRvcnkgZW50b21vbG9naWNhbCBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjAxLjAwI0luc2VjdCBjb250YWluZXJzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjAyLjAwI1JlYXJpbmcgZmFjaWxpdGllcyBmb3IgZW50b21vbG9neSM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wMy4wMCNGYWJyaWMgb3IgbmV0dGluZyBmb3IgZW50b21vbG9neSM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wNC4wMCNFbnRvbW9sb2dpY2FsIHBpbm5pbmcgZXF1aXBtZW50IzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA1LjAwI0VudG9tb2xvZ2ljYWwgbW91bnRpbmcgbWF0ZXJpYWxzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA2LjAwI0VudG9tb2xvZ2ljYWwgdHJheXMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDcuMDAjRW50b21vbG9naWNhbCBjYXRjaGluZyBlcXVpcG1lbnQjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDguMDAjRW50b21vbG9naWNhbCBhc3BpcmF0b3JzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA5LjAwI0VudG9tb2xvZ2ljYWwgZGlwcGVycyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4xMC4wMCNFbnRvbW9sb2dpY2FsIG1vbm9jdXBzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjExLjAwI0VudG9tb2xvZ2ljYWwgc3RpY2t5IHRyYXBzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjEyLjAwI0luc2VjdCB0ZXN0IGtpdHMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMTMuMDAjRW50b21vbG9naWNhbCBkaXNwbGF5IHVuaXRzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjAwLjAwI0FuaW1hbCBsYWJvcmF0b3J5IGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDEuMDAjQ2FnZXMgZm9yIHNtYWxsIGFuaW1hbHMjNDEuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDIuMDAjQXF1YXJpYSBlcXVpcG1lbnQjNDEuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDMuMDAjQW5pbWFsIGlkZW50aWZpY2F0aW9uIHN1cHBsaWVzIzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjA0LjAwI0FuaW1hbCBjYXRjaGluZyBkZXZpY2VzIzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjA1LjAwI0Zpc2ggYWVyYXRpb24gc3lzdGVtcyM0MS4xMC4yNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNi4wNi4wMCNBbmltYWwgZmVlZGluZyBuZWVkbGVzIzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI3LjAwLjAwI0NyeXN0YWxsb2dyYXBoeSBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDEuMDAjQ3J5c3RhbCBsYXR0aWNlIG1vZGVscyM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wMi4wMCNTY2ludGlsbGF0aW9uIGNyeXN0YWwgYXNzZW1ibGllcyM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wMy4wMCNMaWdodCBzY2F0dGVyaW5nIGVxdWlwbWVudCM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wNC4wMCNYIHJheSBkaWZmcmFjdGlvbiBlcXVpcG1lbnQjNDEuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDUuMDAjQ3J5c3RhbGxpc2VycyM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wNi4wMCNDcnlzdGFsIGdyb3dpbmcgZXF1aXBtZW50IzQxLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjAwLjAwI0hpc3RvbG9neSBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDEuMDAjVGlzc3VlIGVtYmVkZGluZyBzdGF0aW9ucyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wMi4wMCNFbWJlZGRpbmcgbW9sZHMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDMuMDAjRW1iZWRkaW5nIGNhcHN1bGVzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjA0LjAwI0VtYmVkZGluZyBjb21wb3VuZHMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDUuMDAjSGlzdG9sb2dpY2FsIHN0YWluaW5nIGFwcGFyYXR1cyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wOS4wMCNUaXNzdWUgcHJvY2Vzc29ycyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4xMC4wMCNUaXNzdWUgY3VsdHVyZSBhcHBhcmF0dXMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMTEuMDAjSGlzdG9sb2dpY2FsIGtuaXZlcyBvciBrbmlmZSBob2xkZXJzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjEyLjAwI0hpc3RvbG9naWNhbCBnbGFzcyBrbmlmZSBtYWtlcnMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMTMuMDAjSGlzdG9sb2dpY2FsIGhvbmVzIG9yIHN0cmFwcyBvciBjb21wb3VuZHMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMTQuMDAjVWx0cmFzb25pYyBkaXNpbnRlZ3JhdG9ycyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wMC4wMCNMYWJvcmF0b3J5IGNvb2xpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjAxLjAwI1JlZnJpZ2VyYXRlZCBjb29saW5nIHBsYXRlIHByb2JlcyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wMi4wMCNGcmVlemluZyBzcHJheSBhZXJvc29scyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wMy4wMCNDcnlvc3RhdHMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDQuMDAjRmFuIGNpcmN1bGF0ZWQgb3ZlbnMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDUuMDAjVWx0cmEgY29sZCBjYWJpbmV0cyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wNi4wMCNDcnlvZ2VuaWMgZnJlZXplcnMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDcuMDAjQ2hpbGxpbmcgdW5pdHMgb3IgY29sZCB3YXRlciBjaXJjdWxhdGlvbiM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wOC4wMCNSZWZyaWdlcmF0ZWQgY29vbGluZyBtb2R1bGVzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjA5LjAwI0NhZGF2ZXIgc3RvcmFnZSByZWZyaWdlcmF0b3JzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjAwLjAwI0xhYm9yYXRvcnkgc3VwcGxpZXMjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDEuMDAjVGVzdCB0dWJlcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wMy4wMCNQaXBldHRlcyBvciBhY2Nlc3NvcmllcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wNC4wMCNGbGFza3MjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDUuMDAjQmVha2VycyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wNi4wMCNTdGlycmluZyByb2RzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjA3LjAwI0xhYm9yYXRvcnkgb3Igc2FtcGxpbmcgc3lyaW5nZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDguMDAjRGVzaWNjYW50cyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wOS4wMCNXYXRjaCBnbGFzc2VzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjEwLjAwI0J1cmV0cyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xMS4wMCNNZWFzdXJpbmcgY3lsaW5kZXIjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTIuMDAjTGFib3JhdG9yeSBkaXNoZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTMuMDAjU2xpZGVzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjE0LjAwI1N0b3BwZXJzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjE1LjAwI1R1YmluZyBjb25uZWN0b3JzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjE2LjAwI0xhYm9yYXRvcnkgY2FzZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTcuMDAjTGFib3JhdG9yeSBzY29vcHMgb3Igc3BhdHVsYXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzIuMDAuMDAjTGFib3JhdG9yeSBjbGVhbmluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzIuMDEuMDAjQ2hlbWljYWwgZW5naW5lZXJpbmcgd2FzaGVycyM0MS4xMC4zMi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMi4wMi4wMCNMYWJvcmF0b3J5IHdhc2hpbmcgbWFjaGluZXMjNDEuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzIuMDMuMDAjUGlwZXR0ZSB3YXNoZXJzIzQxLjEwLjMyLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMyLjA0LjAwI1VsdHJhc29uaWMgY2xlYW5lcnMjNDEuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDAuMDAjRmx1aWQgbWVjaGFuaWNzIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wMS4wMCNMaXF1aWQgc2NpbnRpbGxhdGlvbiBjb3VudGVycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wMi4wMCNCYXR0ZXJ5IGFjaWQgaHlkcm9tZXRlcnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDMuMDAjRGVuc2l0b21ldGVycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wNC4wMCNWYWN1dW0gb3ZlbnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDUuMDAjSGlnaCB2YWN1dW0gZXF1aXBtZW50IzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjA2LjAwI1BuZXVtYXRpYyB2YWN1dW0gZXF1aXBtZW50IzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjA3LjAwI1ZhY3V1bSBvciBtZXJjdXJ5IHZhcG91ciBlcXVpcG1lbnQjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDguMDAjSGlnaCB2YWN1dW0gY29tYnVzdGlvbiBhcHBhcmF0dXMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDkuMDAjRmxvdyBpbmplY3Rpb24gYW5hbHlzaXMgZXF1aXBtZW50IzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjEwLjAwI0dhcyBvciB2YXBvdXIgY29uY2VudHJhdGlvbiBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMTEuMDAjTWFub21ldGVycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4xMi4wMCNWaXNjb3NpbWV0ZXJzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjEzLjAwI0RlcHRoIGluZGljYXRvcnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMTQuMDAjTWljcm9zY29waWMgc3RydWN0dXJlIGVzdGltYXRpb24gYXBwYXJhdHVzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjE1LjAwI1NvbHV0aW9uIHN0cmVuZ3RoIGVzdGltYXRpb24gYXBwYXJhdHVzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjAwLjAwI0xhYm9yYXRvcnkgZW52aXJvbm1lbnRhbCBjb25kaXRpb25pbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjAxLjAwI0NvbnRhbWluYXRpb24gY29udHJvbCBzY3JlZW5zIzQxLjEwLjM0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjAyLjAwI0Vudmlyb25tZW50YWwgY2hhbWJlcnMjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDMuMDAjTWljcm9iaW9sb2dpY2FsIGFpcmNvbnRyb2wjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDQuMDAjR3Jvd3RoIGNoYW1iZXJzIzQxLjEwLjM0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjA1LjAwI1dhbGsgaW4gY2hhbWJlcnMjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDYuMDAjR2xvdmUgYm94ZXMjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzUuMDAuMDAjTGFib3JhdG9yeSB2ZW50aWxhdGluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzUuMDEuMDAjRWJ1bGlvbWV0ZXIjNDEuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzUuMDIuMDAjRnVtZSBob29kcyM0MS4xMC4zNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNS4wMy4wMCNGdW1lIGN1cGJvYXJkcyM0MS4xMC4zNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNS4wNC4wMCNMYW1pbmFyIGZsb3cgY2FiaW5ldHMgb3Igc3RhdGlvbnMjNDEuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDAuMDAjTGFib3JhdG9yeSBkZWNhbnRpbmcgYW5kIGRpc3RpbGxpbmcgYW5kIGV2YXBvcmF0aW5nIGFuZCBmaWx0ZXJpbmcgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wMS4wMCNGbGFzayBvciByZXRvcnQgdW5pdHMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDIuMDAjQmkgZGlzdGlsbGF0aW9uIHVuaXRzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjAzLjAwI0V2YXBvcmF0b3JzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA0LjAwI1ZhY3V1bSBldmFwb3JhdG9ycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wNS4wMCNFeHRyYWN0aW5nIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wNi4wMCNMaW5lIGZpbHRlcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDcuMDAjR2VsIGZpbHRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA4LjAwI1VsdHJhIGZpbHRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA5LjAwI1NpbnRlcmVkIGNlbGwgZmlsdGVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xMC4wMCNUaGluIGNoYW5uZWwgZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTEuMDAjUmV2ZXJzZSBvc21vc2lzIGZpbHRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjEyLjAwI01vbGVjdWxhciBmaWx0cmF0aW9uIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xMy4wMCNDYXJ0cmlkZ2UgZWxlbWVudCBmaWx0ZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE0LjAwI0ZpbHRlciBob2xkZXJzIG9yIGN5Y2xvbmVzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE1LjAwI011bHRpIHNoZWV0IG9yIHByZXNzIG9yIGZpbHRlciM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xNi4wMCNBaXIgZmlsdHJhdGlvbiBzeXN0ZW1zIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE3LjAwI0hlcGEgZmlsdGVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xOC4wMCNGbHVpZCBwcmVzc2VzIGZpbHRlciM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xOS4wMCNTZWRpbWVudG9sb2dpY2FsIGFuYWx5emluZyB1bml0IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjIwLjAwI0xhYm9yYXRvcnkgc2VwYXJhdG9ycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yMS4wMCNMYWJvcmF0b3J5IHNpZnRpbmcgZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjIyLjAwI1Rlc3Qgc2lldmVzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjIzLjAwI0xhYm9yYXRvcnkgc2NydWJiZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI0LjAwI1RpdHJhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjUuMDAjTGFib3JhdG9yeSBkaWx1dGVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yNi4wMCNGcmFjdGlvbmF0aW9uIGFwcGFyYXR1cyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yNy4wMCNEaXN0aWxsYXRpb24gcGlwaW5ncyBvciBjb2x1bW5zIG9yIGZpdHRpbmdzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI4LjAwI1JlZmx1eCBjb21wb25lbnRzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI5LjAwI0hlYXQgZXhjaGFuZ2UgY29uZGVuc2VycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wMC4wMCNMYWJvcmF0b3J5IGJhdGhzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjAxLjAwI0NpcmN1bGF0aW5nIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjAyLjAwI1RoZXJtb3N0YXRpYyBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wMy4wMCNNdWx0aXBsZSBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wNC4wMCNCaW9sb2dpY2FsIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA1LjAwI09yZ2FuIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA2LjAwI1dhdGVyIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA3LjAwI09pbCBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wOC4wMCNTYW5kIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA5LjAwI1JlZnJpZ2VyYXRlZCBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4wMC4wMC4wMCNNZWFzdXJpbmcgYW5kIG9ic2VydmluZyBhbmQgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wMC4wMCNXZWlnaHQgbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjAxLjAwI0VsZWN0cm9uaWMgdG9wbG9hZGluZyBiYWxhbmNlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wMi4wMCNMYWJvcmF0b3J5IGJhbGFuY2VzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjAzLjAwI01lY2hhbmljYWwgYmFsYW5jZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDQuMDAjUHVsbCBzcHJpbmcgYmFsYW5jZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDUuMDAjQ2FsaWJyYXRpb24gd2VpZ2h0cyBvciB3ZWlnaHQgc2V0cyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wNi4wMCNBbmltYWwgd2VpZ2hpbmcgc2NhbGVzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjA3LjAwI0JlbmNoIHNjYWxlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wOC4wMCNCb2R5d2VpZ2h0IG1lYXN1cmluZyBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDkuMDAjRmxvb3Igb3IgcGxhdGZvcm0gc2NhbGVzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjEwLjAwI1Bvc3RhbCBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMTEuMDAjVHJ1Y2sgb3IgcmFpbCBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDAuMDAjTGVuZ3RoIGFuZCB0aGlja25lc3MgYW5kIGRpc3RhbmNlIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wMS4wMCNNaWNyb21ldGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wMi4wMCNQZWRvbWV0ZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjAzLjAwI1JhbmdlZmluZGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wNC4wMCNSdWxlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDUuMDAjU3RyYWluIGdhdWdlcyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wNi4wMCNUZWxsdXJvbWV0ZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjA3LjAwI1RocmVhZCBjb3VudGVycyBvciBnYXVnZXMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDguMDAjQ2FsaXBlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTMuMDAjRGlzdGFuY2UgbWV0ZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjE0LjAwI0hlaWdodCBnYXVnZXMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTUuMDAjTGFzZXIgbWVhc3VyaW5nIHN5c3RlbXMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTYuMDAjTWVhc3VyaW5nIHdoZWVscyBmb3IgZGlzdGFuY2UjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTcuMDAjRmVlbGVyIGdhdWdlcyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xOC4wMCNHYWdlIGJsb2NrIHNldCM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xOS4wMCNHbyBvciBubyBnbyBnYXVnZSM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4yMC4wMCNFdGFsb24gd2VkZ2UjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDAuMDAjVmlld2luZyBhbmQgb2JzZXJ2aW5nIGluc3RydW1lbnRzIGFuZCBhY2Nlc3NvcmllcyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wMS4wMCNJb24gbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDIuMDAjTW9ub2N1bGFyIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjAzLjAwI1N0ZXJlbyBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wNC4wMCNJbGx1bWluYXRvcnMgZm9yIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA1LjAwI09iamVjdGl2ZXMgZm9yIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA2LjAwI1Bob3RvIGF0dGFjaG1lbnRzIGZvciBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wNy4wMCNQcm9maWxlIHByb2plY3RvcnMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDguMDAjVmlkZW8gYXR0YWNobWVudHMgZm9yIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA5LjAwI0Jpbm9jdWxhciBtaWNyb3Njb3BlIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjEwLjAwI0NvbWJpbmF0aW9uIGVsZWN0cm9uIGFuZCBsaWdodCBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xMS4wMCNFbGVjdHJvbiBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xMi4wMCNJbnZlcnRlZCBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xMy4wMCNNYWduaWZpZXJzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjE0LjAwI0xvdXBlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xNS4wMCNUZWxlc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjE2LjAwI0JvcmVzY29wZSBpbnNwZWN0aW9uIGVxdWlwbWVudCM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xNy4wMCNCaW5vY3VsYXJzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjAwLjAwI05vbiBkZXN0cnVjdGl2ZSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDEuMDAjRWRkeSBjdXJyZW50IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wMi4wMCNMaXF1aWQgcGVuZXRyYW50IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wMy4wMCNNYWduZXRpYyBwYXJ0aWNsZSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDQuMDAjVWx0cmFzb25pYyBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDUuMDAjQ08gNjAgcmFkaW9ncmFwaHkgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjA2LjAwI0NTIDEzNyByYWRpb2dyYXBoeSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDcuMDAjSVIgMTkyIHJhZGlvZ3JhcGh5IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wOC4wMCNYIHJheSByYWRpb2dyYXBoeSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDAuMDAjSW5kaWNhdGluZyBhbmQgcmVjb3JkaW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjAxLjAwI0NvdW50ZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjAyLjAwI0VsZWN0cm9uaWMgY291bnRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDMuMDAjTWV0YWwgZGV0ZWN0b3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjA0LjAwI0VsZWN0cm9uaWMgY29sdW1ucyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wNS4wMCNFbGVjdHJvbmljIG1lYXN1cmluZyBwcm9iZXMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDYuMDAjQ2hhcnQgcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjA3LjAwI0RpZ2l0YWwgcmVhZG91dCByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDguMDAjR3JhcGhpYyByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDkuMDAjTWFnbmV0aWMgdGFwZSByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTAuMDAjTXVsdGlwZW4gcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjExLjAwI09zY2lsbG9ncmFwaGljIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xMi4wMCNQaHlzaW9sb2dpY2FsIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xMy4wMCNQb2ludCBwbG90dGluZyByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTQuMDAjU2Vydm8gcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjE1LjAwI0JpIG1ldGFsbGljIHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTYuMDAjTm9uIGNvbnRhY3Qgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xNy4wMCNEaWdpdGFsIHRlc3RlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTguMDAjR3lyb3Njb3BpYyBpbnN0cnVtZW50cyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xOS4wMCNEZXRlY3Rpb24gYXBwYXJhdHVzIGZvciBub24gbWV0YWxpYyBvYmplY3RzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjIwLjAwI0Nvb3JkaW5hdGUgbWVhc3VyaW5nIG1hY2hpbmVzIChDTU0pIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjIxLjAwI1NwZWVkIHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjIuMDAjTGFtcCBmYWlsdXJlIHNlbnNvciM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yMy4wMCNQcmUgaWduaXRpb24ga25vY2sgc2Vuc29yIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjI0LjAwI094eWdlbiBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjI1LjAwI1NwZWVkIHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjYuMDAjUHJveGltaXR5IHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjcuMDAjUHJlc3N1cmUgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yOC4wMCNDdXJyZW50IHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDAuMDAjTGlnaHQgYW5kIHdhdmUgYW5kIHNvdW5kIGdlbmVyYXRpbmcgYW5kICBtZWFzdXJpbmcgZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjAxLjAwI0xpZ2h0IGFic29ycHRpb25tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDIuMDAjQWNvdXN0aWMgdGVzdGluZyByb29tcyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wMy4wMCNBbmVjaG9pYyBjaGFtYmVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wNC4wMCNGcmVxdWVuY3kgYW5hbHl6ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjA1LjAwI0ZyZXF1ZW5jeSBjb3VudGVycyBvciB0aW1lciBvciBkaXZpZGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wNi4wMCNFbGVjdHJpY2FsIGZyZXF1ZW5jeSBtZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDcuMDAjSW50ZXJmZXJvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjA4LjAwI0xhc2VycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wOS4wMCNMaWdodG1ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xMC4wMCNMdXhtZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTEuMDAjT3B0aWNhbCBjYWxsaWJyYXRpb24gc2V0cyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xMi4wMCNQaG90b21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xMy4wMCNQb2xhcmltZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTQuMDAjUG9sYXJpc2NvcGVzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE1LjAwI1JlZmxlY3RvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE2LjAwI1NvbmFycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xNy4wMCNTb25vbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE4LjAwI1NvdW5kIG1lYXN1cmluZyBhcHBhcmF0dXMgb3IgZGVjaWJlbCBtZXRlciM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xOS4wMCNTcGVjdHJvZmx1b3JpbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjIwLjAwI1NwZWN0cm9ncmFwaHMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjEuMDAjU3BlY3Ryb21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yMi4wMCNNYXNzIHNwZWN0cm9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjMuMDAjUHJvdG9uIHNwZWN0cm9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjQuMDAjU3BlY3Ryb3Bob3RvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjI1LjAwI1N0cm9ib3Njb3BlcyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yNi4wMCNTb3VuZCB2ZWxvY2l0eSBhbmFseXplcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjcuMDAjVGhpY2tuZXNzIG1lYXN1cmluZyBkZXZpY2VzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIxLjAwLjAwI1RyYW5zZHVjZXJzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIxLjAxLjAwI1BpZXpvIGVsZWN0cmljIGNyeXN0YWxzIzQxLjExLjIxLjAwLjAwCi11bnNwc2M3IzQxLjExLjIxLjAyLjAwI1N0cmFpbiBnYXVnZXMjNDEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjEuMDMuMDAjRmliZXIgc2Vuc29ycyM0MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wMC4wMCNUZW1wZXJhdHVyZSBhbmQgaGVhdCBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDEuMDAjQ2Fsb3JpbWV0ZXJzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjAyLjAwI0hlYXQgdHJhY2luZyBlcXVpcG1lbnQjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDMuMDAjTWVsdGluZyBwb2ludCByZWNvcmRlcnMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDQuMDAjUHlyb21ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wNS4wMCNUZW1wZXJhdHVyZSByZWd1bGF0b3JzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjA2LjAwI1RoZXJtb2NvdXBsZXMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDcuMDAjVGhlcm1vZ3JhcGhzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjA5LjAwI1RoZXJtb3N0YXRzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjEwLjAwI1JlbW90ZSByZWFkaW5nIHRoZXJtb21ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4xMS4wMCNSZXNpc3RhbmNlIHRoZXJtb21ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4xMi4wMCNTdXJmYWNlIHRoZXJtb21ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4xMy4wMCNIYW5kaGVsZCB0aGVybW9tZXRlciM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMy4wMC4wMCNIdW1pZGl0eSBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjMuMDEuMDAjSHlncm9tZXRlcnMjNDEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjMuMDIuMDAjUHN5Y2hyb21ldGVycyM0MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMy4wMy4wMCNUZW1wZXJhdHVyZSBodW1pZGl0eSB0ZXN0ZXJzIzQxLjExLjIzLjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjAwLjAwI1ByZXNzdXJlIG1lYXN1cmluZyBhbmQgY29udHJvbCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wMS4wMCNEZXB0aCBnYXVnZXMjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDIuMDAjTWFub3N0YXRzIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjAzLjAwI1ByZXNzdXJlIHJlYWRpbmcgaW5kaWNhdG9ycyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wNC4wMCNQcmVzc3VyZSByZWd1bGF0b3IjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDUuMDAjUHJlc3N1cmUgb3IgdmFjdXVtIHJlY29yZGVycyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wNi4wMCNWYWN1dW0gZ2F1Z2VzIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjA3LjAwI0xpcXVpZCBsZXZlbCBjb250cm9scyBvciBpbnN0cnVtZW50cyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wMC4wMCNGbG93IG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wMS4wMCNGbG93bWV0ZXJzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjAyLjAwI1JoZW9tZXRlcnMjNDEuMTEuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDMuMDAjUm90YW1ldGVycyM0MS4xMS4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wNC4wMCNXYXRlciBtZXRlcnMjNDEuMTEuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDUuMDAjV2F0ZXIgbWV0ZXIgc3BhcmVzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjA2LjAwI1ZlbnR1cmlzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI3LjAwLjAwI1NlZWQgYW5kIGZlZWQgZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjI3LjAxLjAwI0dyYWluIGFuYWx5emVycyM0MS4xMS4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNy4wMi4wMCNTZWVkIGNvdW50ZXJzIzQxLjExLjI3LjAwLjAwCi11bnNwc2M3IzQxLjExLjI3LjAzLjAwI0ZpYmVyIGFwcGFyYXR1cyBmb3IgZmVlZCBzYW1wbGUgYW5hbHlzaXMjNDEuMTEuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjguMDAuMDAjVHJhbnNwb3J0YXRpb24gcmVsYXRlZCBlcXVpcG1lbnQgYW5kIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjI4LjAxLjAwI1NwZWVkb21ldGVycyM0MS4xMS4yOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOC4wMi4wMCNUYWNob21ldGVycyM0MS4xMS4yOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wMC4wMCNOYXZpZ2F0aW9uYWwgZXF1aXBtZW50IGFuZCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wMS4wMCNEaXJlY3Rpb24gZmluZGluZyBjb21wYXNzZXMjNDEuMTEuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjkuMDIuMDAjUmFkaW8gbmF2aWdhdGlvbiBpbnN0cnVtZW50cyM0MS4xMS4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wMy4wMCNTZXh0YW50cyM0MS4xMS4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wNC4wMCNDb21wbGV4IGNvbnRyb2xsaW5nIGRldmljZXMjNDEuMTEuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDAuMDAjQ2hlbWljYWwgZXZhbHVhdGlvbiBpbnN0cnVtZW50cyBhbmQgc3VwcGxpZXMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDEuMDAjRGlnaXRhbCBhbmFseXplciBjb250cm9sbGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wMi4wMCNDaGVtaWx1bWluZXNjZW5jZSBvciBiaW9sdW1pbmVzY2VuY2UgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjAzLjAwI0VsZWN0cm9ncmF2aW1ldHJ5IGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wNC4wMCNGbGFtZSBpb25pemF0aW9uIGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wNS4wMCNJb24gYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA2LjAwI1JhZGlvbWV0cnkgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA3LjAwI1JhbmRvbSBhY2Nlc3MgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA4LjAwI0NpbnRpZ3JhcGhpYyBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDkuMDAjVGhlcm1hbCBkaWZmZXJlbnRpYWwgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjEwLjAwI1RoZXJtbyBncmF2aW1ldHJ5IGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xMS4wMCNDaHJvbWF0b2dyYXBoaWMgZGV0ZWN0b3JzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjEyLjAwI0Nocm9tYXRvZ3JhcGhpYyBzY2FubmVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xMy4wMCNHYXMgY2hyb21hdG9ncmFwaHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTQuMDAjSW9uIGNocm9tYXRvZ3JhcGhzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjE1LjAwI0xpcXVpZCBjaHJvbWF0b2dyYXBocyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xNi4wMCNUaGlubGF5ZXIgY2hyb21hdG9ncmFwaHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTguMDAjSGlnaCBwcmVzc3VyZSBsaXF1aWQgY2hyb21hdG9ncmFwaCBjaHJvbWF0b2dyYXBoeSM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xOS4wMCNIaWdoIHByZXNzdXJlIHRoaW4gbGF5ZXIgY2hyb21hdG9ncmFwaCAoVExDKSM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yMC4wMCNDb2xvcmltZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjEuMDAjQ29uZHVjdGltZXRyaWMgaW5zdHJ1bWVudHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjIuMDAjRmx1b3JpbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjIzLjAwI0dlbCBwYXJ0aXRpb24gZXF1aXBtZW50IzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI0LjAwI0h5ZHJvbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI1LjAwI01vbm9jaHJvbWF0b3JzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI2LjAwI05lcGhlbG9tZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjcuMDAjT3Ntb21ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yOC4wMCNwSCBtZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjkuMDAjUG9sYXJvZ3JhcGhzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjMwLjAwI1JhZGlvY2hyb21hdG9ncmFwaGljIHNjYW5uZXIjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMzEuMDAjU2FjY2hhcm9tZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMzIuMDAjU2FsaW5pdHkgbWV0ZXIjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMzMuMDAjVm9sdW1ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wMC4wMCNHYXMgYW5hbHl6ZXJzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjAxLjAwI0F1dG9tb3RpdmUgZXhoYXVzdCBlbWlzc2lvbiBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDIuMDAjQ2F0YWx5dGljIGNvbWJ1c3Rpb24gYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjAzLjAwI0NoZW1pY2FsIGFic29ycHRpb24gZ2FzIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wNC4wMCNFeHBsb3NpbWV0ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA1LjAwI0h5ZHJvY2FyYm9ucyBhbmFseXplcnMgb3IgZGV0ZWN0b3JzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA2LjAwI0luZnJhIHJlZCBvciB1bHRyYSB2aW9sZXQgYWJzb3JwdGlvbiBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDcuMDAjTml0cm9nZW4gYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA4LjAwI05pdHJvZ2VuIG94aWRlIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wOS4wMCNPUlNBVCBlcXVpcG1lbnQjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTAuMDAjT3h5Z2VuIGdhcyBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTEuMDAjT3pvbmUgYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjEyLjAwI1BhcmFtYWduZXRpYyBzdXNjZXB0aWJpbGl0eSBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTMuMDAjU3VsZnVyIGRpb3hpZGUgYW5hbHl6ZXJzIG9yIGRldGVjdG9ycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4xNC4wMCNUaGVybWFsIGNvbmR1Y3Rpdml0eSBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTUuMDAjUmFkb24gZGV0ZWN0b3JzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjE2LjAwI0dhcyBkZXRlY3RvciB0dWJlcyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wMC4wMCNMaXF1aWQgYW5kIHNvbGlkIGFuYWx5emVycyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wMS4wMCNBY2lkIG9yIGJhc2UgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjAyLjAwI0FsYnVtaW5vbWV0ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjAzLjAwI0FtaW5vIGFjaWQgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA0LjAwI0JhdXhpdGUgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA1LjAwI0NhbGNpdW0gYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA2LjAwI0NobG9yaWRlIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wNy4wMCNEaXNzb2x2ZWQgb3h5Z2VuIG1lYXN1cmVtZW50IG1ldGVyIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA4LjAwI0VsZWN0cm9seXRlIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wOS4wMCNFbnp5bWUgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjEwLjAwI0ZhdHR5IGFjaWQgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjExLjAwI0hhbGlkZSBkZXRlY3RvciBsYW1wIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjEyLjAwI0xhY3RhdGUgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjEzLjAwI01pbmVyYWwgb2lsIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTQuMDAjT2lsIGNvbnRlbnQgbW9uaXRvcnMgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjE1LjAwI09yZ2FuaWMgY2FyYm9uIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xNi4wMCNQZXRyb2xldW0gdGVzdGluZyBlcXVpcG1lbnQjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTcuMDAjUHJvdGVpbiBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTguMDAjVXJhbml1bSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTkuMDAjV2F0ZXIgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjIwLjAwI0x1YnJpY2F0aW5nIG9pbCB0ZXN0aW5nIGtpdCM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4yMS4wMCNQYWludCB0ZXN0ZXIjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDAuMDAjTnVjbGVhciBldmFsdWF0aW9uIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjAxLjAwI0FscGhhIGNvdW50ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjAyLjAwI0FscGhhIGJldGEgY291bnRlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDMuMDAjQmV0YSBjb3VudGVycyM0MS4xMS4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wNC4wMCNCZXRhIGdhbW1hIGNvdW50ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjA1LjAwI0dhbW1hIGNvdW50ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjA2LjAwI0tWUCBtZXRlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDcuMDAjWCByYXkgbWljcm9hbmFseXNlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDAuMDAjRWxlY3RyaWNhbCBtZWFzdXJpbmcgYW5kIHRlc3RpbmcgZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjAxLjAwI0FtbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjAyLjAwI1BoYXNlbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjAzLjAwI0JyaWRnZXMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDQuMDAjQ2FwYWNpdGFuY2UgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA1LjAwI1RoZXJtb2FuYWx5c2lzIGRlcml2YXRvZ3JhcGhzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA2LjAwI0ZyZWV6ZSB3YXRjaCBpbmRpY2F0b3JzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA3LjAwI0hlYXQgc3RyZXNzIG1vbml0b3JzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA4LjAwI0NvaW5jaWRlbmNlIG9yIGFudGljb2luY2lkZW5jZSBjb3VudGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wOS4wMCNDb25kdWN0aXZpdHkgY2VsbHMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTAuMDAjQ29uZHVjdGl2aXR5IG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xMS4wMCNDcm9zcyB0YWxrIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xMi4wMCNFYXJ0aCByZXNpc3RhbmNlIHRlc3RlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTMuMDAjRWxlY3RyaWNhbCB2YWx1ZSByZWNvcmRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTQuMDAjRWxlY3Ryb21hZ25ldGljIGZpZWxkIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xNS4wMCNFbGVjdHJvbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjE2LjAwI0VsZWN0cm9uaWMgbG9hZHMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTcuMDAjRmllbGQgc3RyZW5ndGggbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xOC4wMCNHYWluIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xOS4wMCNHYWx2YW5vbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjIwLjAwI0hpZ2ggdm9sdGFnZSBjYWJsZSBkZXRlY3Rpb24jNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjEuMDAjSW1wZWRhbmNlIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yMi4wMCNDYWxpYnJhdGVkIGluZHVjdGFuY2UgY29pbHMgb3IgYm94ZXMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjMuMDAjSW5zdWxhdGlvbiByZXNpc3RhbmNlIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yNC4wMCNJbnN1bGF0aW9uIHRlc3RlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjUuMDAjSW9uaXphdGlvbiBjaGFtYmVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yNi4wMCNJb25tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjcuMDAjTGluZSBlYXJ0aCBsb29wIHRlc3RlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjguMDAjTWVnb2htbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjI5LjAwI01pY3Jvd2F2ZSBsZWFrYWdlIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zMC4wMCNNdWx0aW1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zMS4wMCNPaG1tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzIuMDAjT3NjaWxsb2dyYXBocyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zMy4wMCNQb3RlbnRpb21ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zNC4wMCNRIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zNS4wMCNDYWxpYnJhdGVkIHJlc2lzdGFuY2UgbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zNi4wMCNMZXZlbCBnZW5lcmF0b3JzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjM3LjAwI1ZvbHRhZ2Ugb3IgY3VycmVudCBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzguMDAjT3NjaWxsb3Njb3BlcyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zOS4wMCNBY2NlbGVyb21ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi40MC4wMCNXYXR0bWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjQxLjAwI0dGSSBjaXJjdWl0IHRlc3RvcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuNDIuMDAjQ2lyY3VpdCB0ZXN0ZXIjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuNDMuMDAjRGVtYW5kIG1ldGVycyBvciByZWdpc3RlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuNDQuMDAjQ2lyY3VpdCB0cmFjZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjAwLjAwI0VsZWN0cm9uaWMgYW5kIGNvbW11bmljYXRpb24gbWVhc3VyaW5nIGFuZCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjAxLjAwI0NhdGhvZGUgcmF5IHR1YmUgdGVzdGVyIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjAyLjAwI0NvbXBhcmF0b3JzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjAzLjAwI0RpcmVjdGlvbmFsIGNvdXBsZXIjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDQuMDAjSW50ZWdyYXRlZCBjaXJjdWl0IHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDUuMDAjTG9naWMgc3RhdGUgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wNi4wMCNTZW1pY29uZHVjdG9yIHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDcuMDAjVHJhbnNpc3RvciBjaXJjdWl0IHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDguMDAjUG93ZXIgbWV0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjA5LjAwI01vZHVsYXRpb24gbWV0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjEwLjAwI0xldmVsIG1ldGVyIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjExLjAwI05ldHdvcmsgYW5hbHl6ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjEyLjAwI1RhcGUgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4xMy4wMCNUYXBlc3BlZWQgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4xNC4wMCNEaWZmZXJlbnRpYXRvciM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wMC4wMCNHZW9waHlzaWNhbCBhbmQgZ2VvdGVjaG5pY2FsIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjAxLjAwI0dlb2xvZ2ljYWwgY29tcGFzc2VzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjAyLjAwI0dlb2xvZ2ljYWwgcHJvc3BlY3RpbmcgYXBwYXJhdHVzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjAzLjAwI0VsZWN0cm9tYWduZXRpYyBnZW9waHlzaWNhbCBpbnN0cnVtZW50cyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wNC4wMCNHcmF2aXR5IGdlb3BoeXNpY2FsIGluc3RydW1lbnRzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjA1LjAwI0luZHVjZWQgcG9sYXJpemF0aW9uIChJUCkgZ2VvcGh5c2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDYuMDAjTWFnbmV0b21ldGVyIGdlb3BoeXNpY2FsIGluc3RydW1lbnRzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjA3LjAwI1Jlc2lzdGl2aXR5IGdlb3BoeXNpY2FsIGluc3RydW1lbnRzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjA4LjAwI0dyYXZpbWV0ZXJzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjAwLjAwI1NvaWwgbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wMS4wMCNCb3JlIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wMi4wMCNEaXNzb2x1dGlvbiBvciBkaXNpbnRlZ3JhdGlvbiB0ZXN0ZXJzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjAzLjAwI1BhcnRpY2xlIHNpemUgbWVhc3VyaW5nIGFwcGFyYXR1cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wNC4wMCNQZW5ldHJvbWV0ZXJzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjA1LjAwI1Blcm1lYWJpbGl0eSB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wNi4wMCNQZXJtZWFiaWxpdHkgb3IgcG9yb3NpdHkgZXN0aW1hdGlvbiBhcHBhcmF0dXMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDcuMDAjUG9yb3NpbWV0ZXJzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjA4LjAwI1NhbmQgdGVzdGluZyBhcHBhcmF0dXMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDkuMDAjU29pbCBjb3JlIHNhbXBsaW5nIGFwcGFyYXR1cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4xMC4wMCNTb2lsIHRlc3Rpbmcga2l0cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MC4wMC4wMCNSb2NrIGFuZCBzdHJhdGEgbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40MC4wMS4wMCNDbGlub21ldGVycyM0MS4xMS40MC4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wMC4wMCNTZWlzbW9sb2dpY2FsIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjAyLjAwI0VhcnRocXVha2Ugc2ltdWxhdG9ycyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wMy4wMCNTZWlzbWljIGFsYXJtIG1vZHVsZXMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDQuMDAjU2Vpc21pYyBhbXBsaWZpZXJzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjA1LjAwI1BvcnRhYmxlIHNlaXNtaWMgYXBwYXJhdHVzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjA2LjAwI1NlaXNtaWMgcmVjb3JkZXJzIG9yIHNlaXNtb2dyYXBocyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wNy4wMCNTZWlzbW9tZXRlcnMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDguMDAjVmlicm9tZXRlcnMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDAuMDAjTGFuZCBzdXJ2ZXlpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDEuMDAjTWVhc3VyaW5nIHRhcGVzIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjAyLjAwI01lYXN1cmluZyByb2RzIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjAzLjAwI01lYXN1cmluZyB0YWJsZXMjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDQuMDAjVGhlb2RvbGl0ZXMjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDUuMDAjTG9jYXRpb24gc3Rha2UjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDYuMDAjTG9jYXRpb24gaHViIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQzLjAwLjAwI0h5ZHJvbG9naWNhbCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40My4wMS4wMCNPcGVuIHN0cmVhbSBjdXJyZW50IG1ldGVycyM0MS4xMS40My4wMC4wMAotdW5zcHNjNyM0MS4xMS40My4wMi4wMCNMb2dnaW5nIGluc3RydW1lbnRzIGZvciB3YXRlciB3ZWxscyM0MS4xMS40My4wMC4wMAotdW5zcHNjNyM0MS4xMS40My4wMy4wMCNPcGVuIHN0cmVhbSB3YXRlciBsZXZlbCByZWNvcmRlcnMjNDEuMTEuNDMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDAuMDAjTWV0ZW9yb2xvZ2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDEuMDAjQW5lbW9tZXRlcnMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDIuMDAjQmFyb21ldGVycyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wMy4wMCNQcmVjaXBpdGF0aW9uIG9yIGV2YXBvcmF0aW9uIHJlY29yZGVycyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wNC4wMCNSYWRpb3NvbmRlIGFwcGFyYXR1cyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wNS4wMCNSYWluZmFsbCByZWNvcmRlcnMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDYuMDAjUHJlY2lwaXRhdGlvbiBvciBldmFwb3JhdGlvbiBzdXJmYWNlIG9ic2VydmluZyBhcHBhcmF0dXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDcuMDAjU29sYXIgcmFkaWF0aW9uIHN1cmZhY2Ugb2JzZXJ2aW5nIGFwcGFyYXR1cyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wOC4wMCNUZW1wZXJhdHVyZSBvciBodW1pZGl0eSBzdXJmYWNlIG9ic2VydmluZyBhcHBhcmF0dXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDkuMDAjV2luZCBzdXJmYWNlIG9ic2VydmluZyBhcHBhcmF0dXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMTAuMDAjV2VhdGhlciBzdGF0aW9ucyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4xMS4wMCNNZXRlb3JvbG9neSBpbnN0cnVtZW50IGFjY2Vzc29yaWVzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjAwLjAwI01lY2hhbmljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDEuMDAjRHluYW1vbWV0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjAyLjAwI0VsYXN0b21ldGVycyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wMy4wMCNFeHRlbnNvbWV0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjA0LjAwI1BpdGNoIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wNS4wMCNSb3VuZG5lc3MgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wNi4wMCNTcGhlcm9tZXRlcnMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDcuMDAjU3ByaW5nIHRlc3RpbmcgbWFjaGluZXMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDguMDAjU3VyZmFjZSB0ZXN0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjA5LjAwI1RlbnNpb21ldGVycyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4xMC4wMCNUb3JxdWUgbGltaXRlciM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wMC4wMCNNZXRhbHMgYW5kIG1ldGFsbHVyZ3kgYW5kIHN0cnVjdHVyYWwgbWF0ZXJpYWxzIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDEuMDAjQWJyYXNpb24gdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wMi4wMCNDb21wcmVzc2lvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjAzLjAwI0NvbmNyZXRlIG9yIGNlbWVudCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjA0LjAwI0NvcnJvc2lvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjA1LjAwI0NyYWNrIG9yIGNvcnJvc2lvbiBkZXRlY3RvcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDYuMDAjQ3JlZXAgdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wNy4wMCNEdWN0aWxpdHkgdGVzdGluZyBtYWNoaW5lcyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wOC4wMCNGYXRpZ3VlIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDkuMDAjRm9yZ2luZyB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xMC4wMCNGb3VuZHJ5IHRlc3RpbmcgYXBwYXJhdHVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjExLjAwI0hhcmRuZXNzIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTIuMDAjSW1wYWN0IHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTMuMDAjTG9hZCBmcmFtZSM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xNC4wMCNNZXRhbCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE1LjAwI1Bob3RvZWxhc3RpYyB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE2LjAwI1Byb29mc3RyZXNzIGluZGljYXRvcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTcuMDAjUmVsYXhhdGlvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE4LjAwI1JvdWdobmVzcyBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTkuMDAjU2hlYXIgc3RyZW5ndGggdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yMC4wMCNTaG9jayB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yMS4wMCNUZW5zaW9uIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMjIuMDAjVG9yc2lvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjIzLjAwI0ZsZXh1cmUgb3IgdHJhbnN2ZXJzZSB0ZXN0aW5nIG1hY2hpbmVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjI0LjAwI1ZpYnJhdGlvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjI1LjAwI1dlYXIgdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yNi4wMCNXZWxkaW5nIHRlc3RpbmcgYXBwYXJhdHVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ3LjAwLjAwI1BhcGVyIGFuZCB3b29kIGFuZCB0ZXh0aWxlIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDEuMDAjQ2FyZGJvYXJkIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDIuMDAjVGV4dGlsZXMgZmFzdG5lc3MgdGVzdGVycyM0MS4xMS40Ny4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wMy4wMCNMZWF0aGVyIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDQuMDAjUGFwZXIgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ny4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wNS4wMCNUZXh0aWxlIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDYuMDAjV29vZCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ3LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ4LjAwLjAwI0NlcmFtaWNzIGFuZCBnbGFzcyB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQ4LjAxLjAwI0NlcmFtaWNzIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDguMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDguMDIuMDAjR2xhc3MgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40OC4wMC4wMAotdW5zcHNjNyM0MS4xMS40OC4wMy4wMCNQb3R0ZXJ5IHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDguMDAuMDAKLXVuc3BzYzcjNDEuMTEuNTEuMDAuMDAjQ29hbCBhbmQgb3JlIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNTEuMDEuMDAjQ29hbCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjUxLjAwLjAwCi11bnNwc2M3IzQxLjExLjUyLjAwLjAwI1JhZGFyIGFuZCBzb25hciBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjUyLjAxLjAwI1JhZGFyYmFzZWQgc3VydmVpbGxhbmNlIHN5c3RlbXMjNDEuMTEuNTIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNTIuMDIuMDAjRmVlZCBob3JucyM0MS4xMS41Mi4wMC4wMAotdW5zcHNjNyM0Mi4wMC4wMC4wMC4wMCNNZWRpY2FsIEVxdWlwbWVudCBhbmQgQWNjZXNzb3JpZXMgYW5kIFN1cHBsaWVzIzQyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjAwLjAwLjAwI0hvc3BpdGFsIGFuZCBtZWRpY2FsIGFuZCBkZW50YWwgZXF1aXBtZW50IzQyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE1LjAwLjAwI0FuZXN0aGVzaWEgZXF1aXBtZW50IGFuZCBpbnN0cnVtZW50cyBhbmQgYWNjZXNzb3JpZXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTUuMDIuMDAjSGVhbHRoY2FyZSBnYXMgbWFjaGluZXMjNDIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTUuMDMuMDAjQW5lc3RoZXNpYSBtYWNoaW5lcyM0Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNS4wNC4wMCNSZWdpb25hbCBhbmFlc3RoZXNpYSBraXRzIG9yIG5lZWRsZXMjNDIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDAuMDAjTWVkaWNhbCBlcXVpcG1lbnQgYW5kIGluc3RydW1lbnRzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjAxLjAwI01lZGljYWwgdGhlcm1vbWV0ZXJzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjAyLjAwI1NwZWN1bHVtcyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wMy4wMCNPdG9zY29wZXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDQuMDAjQXVkaW9tZXRlcnMgb3IgdHltcGFub21ldGVycyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wNS4wMCNTdGV0aG9zY29wZXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDYuMDAjRXJnb25vbWV0ZXJzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjA3LjAwI0VsZWN0cm8gdGhlcmFweSBhcHBhcmF0dXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDguMDAjUGhvdG8gdGhlcmFweSBhcHBhcmF0dXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDkuMDAjSHlkcm90aGVyYXB5IHN1cHBsaWVzIG9yIGFjY2Vzc29yaWVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjEwLjAwI0FjdXB1bmN0dXJlIHVuaXRzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjExLjAwI1N0ZXRob2dyYXBocyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4xMi4wMCNNZWRpY2FsIHB1bXBzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjEzLjAwI01lZGljYWwgdmFsdmVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjE0LjAwI0VuZG9zY29wZXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDAuMDAjTWVkaWNhbCB0ZXN0aW5nIGFuZCBhbmFseXppbmcgYW5kIGRpYWdub3N0aWMgZXF1aXBtZW50IzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjAxLjAwI1NraW4gdGVzdCBzdHJpcHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDIuMDAjQmxvb2QgYW5hbHl6ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjAzLjAwI0Jsb29kIGNlbGwgY291bnRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDQuMDAjSGFlbW9nbG9iaW5vbWV0ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjA1LjAwI0JpbGlydWJpbiBtZXRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDYuMDAjSGFlbWFjeXRvbWV0ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjA3LjAwI0NvbG9ueSBjb3VudGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wOC4wMCNGZXJyaXRpbiB0ZXN0IGtpdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDkuMDAjRW56eW1lIGxpbmtlZCBpbW11bm9zb3JiZW50IGFzc2F5IChFTElTQSkgdGVzdCBraXQjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTAuMDAjSHVtYW4gaW1tdW5lIGRlZmljaWVuY3kgKEhJVikgdGVzdCBraXRzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjExLjAwI1N5ZmFjYXJkIHN5cGhpbGlzIHRlc3RzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjEyLjAwI1ByZWduYW5jeSB0ZXN0IGtpdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTMuMDAjUmFkaW8gaW1tdW5vYXNzYXkgKFJJQSkgdGVzdCBraXRzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjE0LjAwI1BvbGlvIGNhc2UgaW52ZXN0aWdhdGlvbiBraXQjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTUuMDAjVXJpbmUgYmxvb2QgdGVzdCBzdHJpcHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTYuMDAjQ2VsbCBzaXplIGFuYWx5emVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xNy4wMCNXaG9sZSBib2R5IGNvdW50ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjE4LjAwI0Jpb21lZGljYWwgY291bnRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTkuMDAjTWVkaWNhbCBtdWx0aXByb2JlIHN5c3RlbSBjb3VudGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yMC4wMCNBbGxlcmd5IG9yIGRpYWdub3N0aWMga2l0cyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yMS4wMCNVcmluYXJ5IHRlc3Qgc2V0IzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjIyLjAwI0RpZmZlcmVudGlhbCBjZWxsIGNvdW50ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjIzLjAwI1BsYXNtYSB2aXNjb3NpdHkgbWVhc3VyZW1lbnQjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjQuMDAjUGxhdGVsZXQgYW5hbHlzaXMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjUuMDAjQmxvb2QgZ2x1Y29zZSBtZXRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjYuMDAjSGVtb2N1bHR1cmUgdGVzdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjcuMDAjQm9keWZhdCBhbmFseXNlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjguMDAjU2FtcGxlIGNvbGxlY3Rpb24gc3lzdGVtcyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wMC4wMCNYIHJheSBhbmQgYWxwaGEgYW5kIGJldGEgYW5kIGdhbW1hIHJhZGlhdGlvbiBhcHBhcmF0dXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDEuMDAjRGlhZ25vc3RpYyB4IHJheSBlcXVpcG1lbnQjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDIuMDAjUmFkaW90aGVyYXB5IHNpbXVsYXRvciM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wMy4wMCNDYWxpYnJhdGlvbiBlcXVpcG1lbnQjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDQuMDAjQmlvbWVkaWNhbCByZXNlYXJjaCBzdXBwb3J0IHVuaXRzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjA1LjAwI0NvbXB1dGVkIHRvbW9ncmFwaHkgKENUKSBzY2FubmVycyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wNi4wMCNXYXRlciBwaGFudG9tcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wNy4wMCNSYWRpb2Jpb2xvZ2ljYWwgaW5zdHJ1bWVudHMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDguMDAjR2FtbWEgc2NpbnRpbGxhdG9ycyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wOS4wMCNHYW1tYSBjYW1lcmFzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjEwLjAwI0xpbmVhciBhY2NlbGVyYXRvcnMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTEuMDAjUmFkaW90aGVyYXB5IGJyYWNoeXRoZXJhcHkgZXF1aXBtZW50IzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjEyLjAwI1JhZGlvdGhlcmFweSB0ZWxldGhlcmFweSBjb2JhbHQgNjAgbWFjaGluZSM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xMy4wMCNSYWRpb3RoZXJhcHkgdGVsZXRoZXJhcHkgc3VwZXJmaWNpYWwgeCByYXkgbWFjaGluZSM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xNC4wMCNSYWRpb3RoZXJhcHkgdGVsZXRoZXJhcHkgb3J0aG92b2x0YWdlIHggcmF5IG1hY2hpbmUjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTUuMDAjUmFkaW90aGVyYXB5IHRlbGV0aGVyYXB5IGxpbmVhciBhY2NlbGVyYXRvcnMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTYuMDAjUmFkaW9pc290b3BlIHNjYW5uZXJzIGZvciBtZWRpY2FsIHB1cnBvc2VzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjE3LjAwI0RlbnRhbCB4IHJheSB1bml0cyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xOC4wMCNBbmdpb2dyYXBoeSBzdXBwbGllcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xOS4wMCNBbmdpb2dyYXBoeSBkZXZpY2VzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjIwLjAwI0FuZ2lvcGxhc3R5IHN1cHBsaWVzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjIxLjAwI0FuZ2lvcGxhc3R5IGRldmljZXMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDAuMDAjT3h5Z2VuIHRoZXJhcHkgZXF1aXBtZW50IzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjAxLjAwI0luaGFsYXRpb24gZXF1aXBtZW50IzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjAyLjAwI01lZGljYWwgaHVtaWRpZmllcnMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDMuMDAjUmVzdXNjaXRhdG9ycyBvciByZXNwaXJhdG9ycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wNC4wMCNBc3BpcmF0b3JzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjA1LjAwI0luc3VmZmxhdG9ycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wNi4wMCNSZXN1c2NpdGF0aW9uIGVtZXJnZW5jeSBvdXRmaXRzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjA3LjAwI05lYnVsaXplcnMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDguMDAjQWVyb3NvbCB0aGVyYXB5IGFwcGFyYXR1cyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wOS4wMCNNZWRpY2FsIHZlbnRpbGF0aW9uIHN5c3RlbXMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTAuMDAjTWFza3Mgb3IgYnJlYXRoaW5nIGJhZ3MjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTEuMDAjSGVhcnQgbHVuZyBhcHBhcmF0dXMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTIuMDAjQnJlYXRoaW5nIGRldmljZSB3aXRoIGh5Z2llbmljIGJhcnJpZXIjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTMuMDAjT3h5Z2VuIG1hc2tzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjE0LjAwI01vYmlsZSBzdWN0aW9uIHVuaXQjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTUuMDAjSHlwZXJiYXJpYyB0cmVhdG1lbnQgY2hhbWJlciM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xNi4wMCNPeHlnZW5hdG9ycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xNy4wMCNBaXIgb3h5Z2VuIHVuaXRzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjAwLjAwI01lZGljYWwgYW5kIHN1cmdpY2FsIGFuZCBsYWJvcmF0b3J5IHN0ZXJpbGl6ZXJzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjAxLjAwI0F1dG9jbGF2ZXMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDIuMDAjU3RlYW0gc3RlcmlsaXplcnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDMuMDAjQm9pbGluZyBkaXNpbmZlY3RvcnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDQuMDAjSG90IGFpciBzdGVyaWxpemVycyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wNS4wMCNDaGVtaWNhbCBzdGVyaWxpemVycyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wNi4wMCNMYWJvcmF0b3J5IHN0ZXJpbGl6ZXJzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjA3LjAwI1N0ZXJpbGl6YXRpb24gb3ZlbnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDguMDAjR2VybWljaWRhbCBsYW1wcyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wOS4wMCNTdGVyaWxpemluZyBsYW1wcyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4xMC4wMCNEZWNvbnRhbWluYXRpb24gd2FzaGluZyBlcXVpcG1lbnQjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDAuMDAjU3VyZ2ljYWwgc2V0cyBhbmQgaW5zdHJ1bWVudHMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDEuMDAjQ3J5byBzdXJnZXJ5IGVxdWlwbWVudCM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wMi4wMCNBdXRvcHN5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjAzLjAwI1N1Y3Rpb24gdW5pdHMgb3IgcGFydHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDQuMDAjU3VyZ2ljYWwgbGFzZXJzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjA1LjAwI0VsZWN0cm8gY2F1dGVyeSBzdXJnaWNhbCBlcXVpcG1lbnQjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDYuMDAjRWFyIG9yIG5vc2Ugb3IgdGhyb2F0IChFTlQpIHN1cmdlcnkgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDcuMDAjR3luZWNvbG9naWNhbCBzdXJnZXJ5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjA4LjAwI0NhcmRpb2xvZ3kgc3VyZ2VyeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wOS4wMCNNaWNybyBzdXJnZXJ5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjEwLjAwI09ydGhvcGVkaWMgc3VyZ2VyeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xMS4wMCNTdXR1cmUgY2xpcHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTIuMDAjRGlzc2VjdGluZyBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xMy4wMCNEaXNzZWN0aW5nIHBpbnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTQuMDAjSW1wbGFudCBzeXN0ZW1zIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjE1LjAwI0Jsb29kIGxhbmNldHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTYuMDAjU2NhbHBlbHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTcuMDAjU3VyZ2ljYWwgYmxhZGVzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjE4LjAwI0NyYW5pb2NsYXN0cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xOS4wMCNTdXJnaWNhbCBzY2lzc29ycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yMC4wMCNTdXJnaWNhbCBzaGVhcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjEuMDAjU3VyZ2ljYWwgZHJpbGxzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjIyLjAwI1N1cmdpY2FsIHdpcmUgc2F3cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yMy4wMCNTdXJnaWNhbCBwZXJmb3JhdG9ycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yNC4wMCNDdXJldHRlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yNS4wMCNTdXJnaWNhbCBjbGFtcHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjYuMDAjU3VyZ2ljYWwgaW5zdHJ1bWVudCBob2xkZXJzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjI3LjAwI1N1cmdpY2FsIGVsZXZhdG9ycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yOC4wMCNSYXNwYXRvcnkgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjkuMDAjRm9yY2VwcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zMC4wMCNTdXJnaWNhbCByZXRyYWN0b3JzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjMxLjAwI1N1cmdpY2FsIHNwcmVhZGVycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zMi4wMCNVdGVyaW5lIHNvdW5kIGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjMzLjAwI0RpbGF0b3JzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM0LjAwI1N1cmdpY2FsIGRpc2hlcyBvciBwb3RzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM1LjAwI1N1cmdpY2FsIHByb2JlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zNi4wMCNTdXJnaWNhbCBtYWxsZXRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM3LjAwI0RlY2FwaXRhdGlvbiBob29rcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zOC4wMCNTdXR1cmVzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM5LjAwI0NhdGd1dCBjaHJvbWljIHN1dHVyZXMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuNDAuMDAjTGFyeW5nb3Njb3BlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS40MS4wMCNTdXJnaWNhbCBzaGF2aW5nIGtpdHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDAuMDAjUmVoYWJpbGl0YXRpb24gZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wMS4wMCNTcGxpbnRzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjAyLjAwI1BzeWNob2xvZ2ljYWwgYXB0aXR1ZGUgdGVzdGluZyBhcHBhcmF0dXMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDMuMDAjTWFzc2FnZSBhcHBhcmF0dXMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDQuMDAjVHJhY3Rpb24gcHVsbGV5cyBvciBiZWx0cyBvciB3ZWlnaHRzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA1LjAwI1BoeXNpY2FsIHRoZXJhcHkgcmVoYWJpbGl0YXRpb24gZXF1aXBtZW50IG9yIGFjY2Vzc29yaWVzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA2LjAwI092ZXJiZWQgZnJhbWVzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA3LjAwI1JlaGFiaWxpdGF0aW9uIHN0aW11bGF0b3JzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA4LjAwI1BhdGllbnQgbGlmdGVycyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wOS4wMCNTaG9ydCB3YXZlIGRpYXRoZXJteSBlcXVpcG1lbnQjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTAuMDAjTW9pc3QgaGVhdCB0aGVyYXB5IGVxdWlwbWVudCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xMS4wMCNIZWF0IG9yIGNvbGQgcGFja3MjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTIuMDAjUGh5c2lvbG9naWNhbCBlcXVpcG1lbnQjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTMuMDAjU3RpbXVsYXRvcnMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTQuMDAjUmVoYWJpbGl0YXRpb24gc3VwcGxpZXMgZm9yIHRoZSBibGluZCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xNS4wMCNFbGVjdHJvbXlvZ3JhcGgjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTYuMDAjUmVoYWJpbGl0YXRpb24gc3VwcGxpZXMgZm9yIHNwZWVjaCBoYW5kaWNhcHBlZCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xNy4wMCNFbGVjdHJvIHNsZWVwIGFwcGFyYXR1cyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xOC4wMCNWaXN1YWwgZXhlcmNpc2UgdHJhaW5pbmcgYWlkcyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xOS4wMCNPcnRob3BlZGljIGN1c2hpb25zIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjAwLjAwI09waHRoYWxtb2xvZ3kgaW5zdHJ1bWVudHMgYW5kIGFwcGxpYW5jZXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDEuMDAjT3B0aGFsbW9sb2dpY2FsIHB1bmNoZXMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDIuMDAjUGhvdG9jb2FndWxhdG9ycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wMy4wMCNTbGl0IGxhbXBzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjA0LjAwI1BlcmltZXRlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDUuMDAjVG9ub21ldGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wNi4wMCNSZXRpbm9tZXRlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDcuMDAjRXlld2FzaGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wOC4wMCNPcGh0aGFsbW9tZXRlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDkuMDAjT3BodGhhbG1vc2NvcGVzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjEwLjAwI0VtZXJnZW5jeSBleWUgY2FyZSBlcXVpcG1lbnQjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMTEuMDAjS2VyYXRvbWV0ZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjEyLjAwI1Zpc2lvbiB0ZXN0ZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjEzLjAwI1N5bm90b3Njb3BlcyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4xNC4wMCNPcGh0aGFsbWljIG9wZXJhdGlvbiBpbnN0cnVtZW50cyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wMC4wMCNHeW5lY29sb2dpY2FsIGFuZCBvYnN0ZXRyaWNhbCBpbnN0cnVtZW50cyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wMS4wMCNJbnRyYSB1dGVyaW5lIGRldmljZSAoSVVEKSBpbnNlcnRpb24ga2l0cyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wMi4wMCNUdWJhbCBsaWdhdGlvbiBraXRzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjAzLjAwI1Zhc2VjdG9teSBraXRzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjA0LjAwI0xhcGFyb3Njb3BpYyBlcXVpcG1lbnQjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDUuMDAjU2lsYXN0aWMgYmFuZHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDYuMDAjTWVuc3RydWF0aW9uIHJlZ3VsYXRpb24ga2l0cyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wNy4wMCNTcGVybW9raW5lc2VtZXRlciM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wOC4wMCNVdGVyaW5lIG9yIGd5bmVjb2xvZ2ljYWwgdGVzdHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDkuMDAjT2JzdGV0cmljYWwgcmV0cmFjdG9ycyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xMC4wMCNVbWJpbGljYWwgdGFwZXMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTEuMDAjQnJlYXN0IHB1bXBzIG9yIGFjY2Vzc29yaWVzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjEyLjAwI01pZHdpZmUgZXF1aXBtZW50IG9yIGtpdHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTMuMDAjSHlzdGVyb3Njb3BpYyBlcXVpcG1lbnQjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTQuMDAjVmFnaW5vc2NvcGUjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTUuMDAjVXJldGhyb3Njb3BlIGN5c3RlcnNjb3BlIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjE2LjAwI1VtYmlsaWNhbCBjb3JkIGNsYW1wcyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xNy4wMCNWYWN1dW0gZXh0cmFjdG9ycyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xOC4wMCNJbiB2aXRybyBmZXJ0aWxpemF0aW9uIGVxdWlwbWVudCBvciBzdXBwbGllcyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xOS4wMCNFbmRvbWV0cmlhbCBiaW9wc3kgZXF1aXBtZW50IzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjIwLjAwI0ludHJhdXRlcmluZSBpbnNlbWluYXRpb24gY2F0aGV0ZXJzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjIxLjAwI1BlbHZpbWV0ZXJzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjAwLjAwI0ZpYmVyIG9wdGljIGV4YW1pbmF0aW9uIGluc3RydW1lbnRzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjAxLjAwI0xpZ2h0IHNvdXJjZXMjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDIuMDAjRW5kb3Njb3B5IGVxdWlwbWVudCM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wMy4wMCNQcm90b3Njb3BlcyM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wNC4wMCNDdWxkb3Njb3BlcyM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wNS4wMCNHYXN0cm9zY29wZXMjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDYuMDAjRXNvcGhhZ29zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wNy4wMCNTaWdtb2lkb3Njb3BlIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjA4LjAwI0Jyb25jaG9zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wOS4wMCNDb2xvbm9zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4xMC4wMCNBcnRocm9zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wMC4wMCNFbGVjdHJvIGRpYWdub3N0aWMgYXBwYXJhdHVzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjAxLjAwI0VsZWN0cm9jYXJkaW9ncmFwaHMgKEVDR3MpIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjAyLjAwI0NhcmRpb3Njb3BlcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wMy4wMCNTdGVyZW90YWN0aWMgc3lzdGVtcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wNC4wMCNBY2hpbGxlYW4gcmVmbGV4b21ldGVyIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA1LjAwI1RoZXNpb21ldGVyIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA2LjAwI1BuZXVtb3RhY2hvZ3JhcGhzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA3LjAwI0Jpb3ZpZGVvZ3JhcGhzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA4LjAwI1BoeXNpb2xvZ2ljYWwgbGV2ZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA5LjAwI05lcnZlIGNoYW1iZXIgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjEwLjAwI1VsdHJhc29uaWMgZGlhZ25vc3RpYyBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTEuMDAjVWx0cmFzb3VuZCBzY2FubmVycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xMi4wMCNEb3BwbGVyIHVsdHJhc291bmQgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjEzLjAwI1VsdHJhc29uaWMgc3VyZ2VyeSBlcXVpcG1lbnQgb3IgdWx0cmFzb25pYyBhc3BpcmF0aW9uIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjE0LjAwI1VsdHJhc291bmQgcGh5c2lvdGhlcmFweSBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTUuMDAjQ2FyZGlvIHNvbmFycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xNi4wMCNTaG9ydCB3YXZlIG1lZGljYWwgYXBwYXJhdHVzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjE3LjAwI0Jsb29kIHByZXNzdXJlIG1lYXN1cmluZyBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTguMDAjRWxlY3Ryb2VuY2VwaGFsb2dyYXBocyAoRUVHcykjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTkuMDAjU3Bpcm9tZXRlcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjAuMDAjR3luZWNvbG9naWNhbCBkaWFnbm9zdGljIGVxdWlwbWVudCM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yMS4wMCNDb2xwb3Njb3BlcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yMi4wMCNBbW5pb3Njb3BlcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yMy4wMCNGZXRhbCBtb25pdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yNC4wMCNEZWxpdmVyeSBtb25pdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yNS4wMCNOZW9uYXRhbCBtb25pdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yNi4wMCNIZWFydCBtb25pdG9yIHN5c3RlbXMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjcuMDAjSW50ZW5zaXZlIGNhcmUgbW9uaXRvcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjguMDAjRWxlY3Ryb21lZGljYWwgdGVzdGluZyBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjkuMDAjRGVmaWJyaWxsYXRvciB0ZXN0ZXIjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzAuMDAjQXVkaW9tZXRlciBjYWxpYnJhdGlvbiB0ZXN0ZXIjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzEuMDAjRWxlY3Ryb2RlIG9yIGVsZWN0cm9tZWRpY2FsIHRlc3RlciM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zMi4wMCNWZW50aWxhdG9yIHRlc3QgbWV0ZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjMzLjAwI0VDRyBwYXRpZW50IHNpbXVsYXRvcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzQuMDAjRWxlY3Ryb3N1cmdpY2FsIGFuYWx5emVycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zNS4wMCNFbGVjdHJvbWVkaWNhbCBzYWZldHkgYW5hbHl6ZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjM2LjAwI0VsZWN0cm9tZWRpY2FsIHRlc3Qgc3lzdGVtcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zNy4wMCNFbGVjdHJvbmljIHB1bHNlIG1vbml0b3JzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjM4LjAwI1ZhZ2luYWwgdWx0cmFzb3VuZCBwcm9iZSM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zOS4wMCNNZWRpY2FsIGNvbmR1Y3RpdmUgZ2VscyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wMC4wMCNEaWFseXNpcyBlcXVpcG1lbnQgYW5kIGluc3RydW1lbnRzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjAxLjAwI0Jsb29kIGJhZyBzYW1wbGVyIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjAyLjAwI0Jsb29kIHdhcm1lciM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wMy4wMCNEaWFseXNpcyBpbnN0cnVtZW50IHNldHMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDQuMDAjUGVyaXRvbmVhbCBkaWFseXNpcyB1bml0cyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wNS4wMCNIYWVtb2RpYWx5c2lzIHVuaXRzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjA2LjAwI0Jsb29kIGZpbHRlcnMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDcuMDAjQmxvb2Qgc2VwYXJhdG9yIHN0YW5kIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjA4LjAwI1BsYXNtYXBob3Jlc2lzIGVxdWlwbWVudCM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wOS4wMCNBbmdpb2dyYXBoaWMgaW5qZWN0b3JzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjEwLjAwI0hlbWFmaWx0ZXJzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjExLjAwI0RpYWx5c2lzIHR1YmluZyBvciBtZW1icmFuZXMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTIuMDAjQmxvb2Qgb3h5Z2VuIGRlbWFuZCBhcHBhcmF0dXMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTMuMDAjQ2xvdCBjb2FndWxhdGlvbiBkZXRlY3Rpb24gc3lzdGVtcyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4xNC4wMCNNZWRpY2FsIGRyYWlucyBvciBkcmFpbmFnZSBraXRzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjE1LjAwI0t5bW9ncmFwaHMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTYuMDAjQmxvb2Qgc2FtcGxpbmcgZXF1aXBtZW50IzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjAwLjAwI0RlbnRhbCBpbnN0cnVtZW50cyBhbmQgYXBwbGlhbmNlcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wMS4wMCNEZW50YWwgbWl4aW5nIHNsYWJzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjAyLjAwI0JhbmRzIGZvciBkZW50YWwgbWF0cml4IzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjAzLjAwI0RlbnRhbCByZXRhaW5lcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDQuMDAjRGVudGFsIGhhbmRwaWVjZXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDUuMDAjRGVudGFsIGNyeW9zdXJnaWNhbCBpbnN0cnVtZW50YXRpb24jNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDYuMDAjRGVudGFsIGZvcm1lcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDcuMDAjUGVyaW9kb250aXVtIGNvbnRyb2wgaW5zdHJ1bWVudHMgb3IgcGVyaW90ZXN0IzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjA4LjAwI0RlbnRhbCB0cmF5cyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wOS4wMCNEZW50YWwgcHJvYmVzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjEwLjAwI0RlbnRhbCBzY2FsZXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTEuMDAjRGVudGFsIHNwYXR1bGFzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjEyLjAwI0RlbnRhbCBlbGV2YXRvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTMuMDAjRGVudGFsIGV4Y2F2YXRvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTQuMDAjRGVudGFsIGZpbmdlciBwcm90ZWN0b3JzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjE1LjAwI0RlbnRhbCB0d2VlemVycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xNi4wMCNEZW50YWwgc2Npc3NvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTcuMDAjRGVudGFsIGZvcmNlcHMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTguMDAjRGVudGFsIG1pcnJvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTkuMDAjT3J0aG9kb250aWMgYXBwbGlhbmNlcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4yMC4wMCNEZW50YWwgaW1wcmVzc2lvbiB0cmF5cyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4yMS4wMCNEZW50YWwgc3lyaW5nZXMgb3IgbmVlZGxlcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4yMi4wMCNEZW50YWwgZHJpbGxzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjIzLjAwI0VuZG9kb250aWNzIGFjY2Vzc29yaWVzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjAwLjAwI0NhcmRpb2xvZ3kgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOS4wMS4wMCNIZWFydCB2YWx2ZXMjNDIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjkuMDIuMDAjSGVhcnQgY2F0aGV0ZXJzIzQyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjAzLjAwI0RlZnJpYmlsYXRvcnMjNDIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjkuMDQuMDAjQW9ydGljIGJhbGxvb24gZXF1aXBtZW50IzQyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjA1LjAwI1BhY2VtYWtlcnMjNDIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDAuMDAjTWVkaWNhbCBjb25zdW1hYmxlcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wMS4wMCNCbG9vZCBvciBpbnRyYXZlbm91cyAoSVYpIGJvdHRsZXMgb3IgYmFncyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wMi4wMCNUb25ndWUgZGVwcmVzc29ycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wMy4wMCNTdXR1cmUgbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wNC4wMCNCaW9wc3kgbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wNS4wMCNCaW9wc3kgY2Fwc3VsZXMgb3IgcHVuY2hlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wNi4wMCNEaXNzZWN0aW5nIG5lZWRsZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDcuMDAjQWN1cHVuY3R1cmUgbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wOC4wMCNNZWRpY2FsIGRpc3Bvc2FsIGNvbnRhaW5lcnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDkuMDAjSGFlbWF0b2NyaXQgdHViZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTAuMDAjU3dhYnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTEuMDAjQmxvb2QgdHJhbnNmdXNpb24gbmVlZGxlcyBvciBjYW5udWxhZSM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xMi4wMCNUcmFuc2ZlciBzd2FicyBvciBhcHBsaWNhdG9ycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xMy4wMCNVcmluZSBiYWdzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjE0LjAwI1NwZWNpbWVuIGNvbnRhaW5lcnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTUuMDAjUGxhc3RlciBvZiBwYXJpcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xNi4wMCNTdGVyaWxlIHN0cmlwcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xNy4wMCNHYXV6ZSBjbG90aCM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xOC4wMCNDb3R0b24gd29vbCM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xOS4wMCNTdGVyaWxlIHN1cmdpY2FsIGNvbXByZXNzZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjAuMDAjQmFuZGFnZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjEuMDAjRmlyc3QgYWlkIGtpdHMgb3Iga2l0IHJlZmlsbHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjIuMDAjSHlwb2Rlcm1pYyBzeXJpbmdlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yMy4wMCNDb3R0b24gc3dhYnMgb24gc3RpY2tzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjI0LjAwI0luZnVzaW9uIHNldHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjUuMDAjTmFzb2dhc3RyaWMgdHViZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjYuMDAjRGVzdHJ1Y3Rpb24gY2xpcHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjcuMDAjRHJlc3NpbmdzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjI4LjAwI0ltcGxhbnRhYmxlIGRydWcgZGVsaXZlcnkgc3lzdGVtcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yOS4wMCNBdXRvbWF0aWMgbWFzcyB2YWNjaW5hdG9ycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zMC4wMCNQaXBldHRpbmcgc3lyaW5nZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzEuMDAjU2NhbHAgdmVpbiBuZWVkbGVzIG9yIHN0b3Bjb2NrcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zMi4wMCNIeXBvZGVybWljIG5lZWRsZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzMuMDAjTWVkaWNhbCBqZXQgaW5qZWN0b3JzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM0LjAwI0xhbmNldHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzUuMDAjQ2F0aGV0ZXIgZm9yIGluZnVzaW9uIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM2LjAwI0ludGF2ZW5vdXMgKElWKSBlcXVpcG1lbnQgdHViZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzcuMDAjRXlld2FzaCBzb2x1dGlvbnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzguMDAjRXhhbWluYXRpb24gZ2xvdmVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM5LjAwI1BhdGhvZ2VuIGNsZWFudXAga2l0cyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC40MC4wMCNEaWFiZXRpYyBzeXJpbmdlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC40MS4wMCNEaWFiZXRpYyBwZW4gbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC40Mi4wMCNMYW5jZXQgZGV2aWNlIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjExLjAwLjAwLjAwI0Fzc2lzdGl2ZSBhbmQgY29ycmVjdGl2ZSBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDAuMDAjUHJvc3RoZXNlcyBhbmQgcGFydHMgdGhlcmVvZiM0Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wMS4wMCNBbmtsZSBvciBmb290IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjAyLjAwI0NlcnZpY2FsIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjAzLjAwI0NlcnZpY28gdGhvcmF0aWMgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDQuMDAjQ2VydmljbyB0aG9yYXRpYyBsdW1ibyBzYWNyYWwgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDUuMDAjRWxib3cgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDYuMDAjRWxib3cgd3Jpc3Qgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDcuMDAjRmluZ2VyIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjA4LjAwI0Zvb3Qgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDkuMDAjSGFuZCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xMC4wMCNIaXAgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTEuMDAjSGlwIGtuZWUgYW5rbGUgZm9vdCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xMi4wMCNIaXAgb3Iga25lZSBvciBhbmtsZSBvcnRob3NlcyBqb2ludHMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTMuMDAjU2hvdWxkZXIgb3IgZWxib3cgb3Igd3Jpc3Qgb3J0aG9zZXMgam9pbnRzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE0LjAwI0tuZWUgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTUuMDAjS25lZSBhbmtsZSBmb290IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE2LjAwI0x1bWJvIG9yIHNhY3JhbCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xNy4wMCNTYWNybyBpbGlhYyBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xOC4wMCNTaG91bGRlciBvciBlbGJvdyBvciB3cmlzdCBvciBoYW5kIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE5LjAwI1Rob3JhY28gb3IgbHVtYm8gb3Igc2FjcmFsIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjIwLjAwI1dyaXN0IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjIxLjAwI1dyaXN0IG9yIGhhbmQgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjIuMDAjV3Jpc3Qgb3IgaGFuZCBvciBmaW5nZXIgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjMuMDAjQW5rbGUgZGlzYXJ0aWN1bGF0aW9uIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjQuMDAjQXVyYWwgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yNS4wMCNDb3NtZXRpYyBvciBza2luIGNvdmVyaW5nIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjYuMDAjRWxib3cgZGlzYXJ0aWN1bGF0aW9uIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjcuMDAjSGlwIGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjI4LjAwI0hvb2sgb3IgZnVuY3Rpb25hbCB0b29sIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjkuMDAjS25lZSBvciBoaXAgam9pbnQgcHJvc3RoZXNlcyBvciB0b3JxdWUgcmVkdWNlcnMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzAuMDAjV3Jpc3Qgb3IgZWxib3cgam9pbnQgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zMS4wMCNLbmVlIGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjMyLjAwI01hbW1hcnkgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zMy4wMCNOYXNhbCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM0LjAwI09jdWxhciBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM1LjAwI0JhY2sgZmlsbGVyIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzYuMDAjUGFsYXRlIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzcuMDAjUGFydGlhbCBmb290IGluY2x1ZGluZyB0b2UgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zOC4wMCNQYXJ0aWFsIGhhbmQgaW5jbHVkaW5nIGZpbmdlciBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM5LjAwI1Nob3VsZGVyIGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQwLjAwI1NvY2tldCBvciBhbGlnbm1lbnQgdW5pdCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQxLjAwI1RlbXBvcmFyeSBwcm9zdGhlc2VzIGZvciBlYXJseSBtb2JpbGl6YXRpb24gb2YgbG93ZXIgbGltYiBhbXB1dGVlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40Mi4wMCNUcmFuc2ZlbW9yYWwgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40My4wMCNUcmFuc2h1bWVyYWwgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40NC4wMCNUcmFuc3JhZGlhbCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQ1LjAwI1RyYW5zdGliaWFsIGluY2x1ZGluZyBhbmtsZSBvciBmb290IGRldmljZSBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQ2LjAwI1dyaXN0IGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQ3LjAwI1Byb3N0aGV0aWMgaGFuZHMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDguMDAjVmFzY3VsYXIgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wMC4wMCNDb21tdW5pY2F0aW9uIGFuZCBlZHVjYXRpb25hbCBtYXRlcmlhbCBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjAxLjAwI0JyYWlsbGUgd3JpdGluZyBwYXBlciBvciBwbGFzdGljIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjAyLjAwI1N3aXRjaGJvYXJkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjAzLjAwI0NoYXJhY3RlciByZWFkaW5nIG1hY2hpbmVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDQuMDAjU3ludGhldGljIHNwZWVjaCBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDUuMDAjVGFjdGlsZSBkaXNwbGF5cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjA2LjAwI0xldHRlciBvciBzeW1ib2wgYm9hcmRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDcuMDAjRGlhbG9ndWUgdW5pdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wOC4wMCNWb2ljZSBnZW5lcmF0b3JzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDkuMDAjVm9pY2UgYW1wbGlmaWVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjEwLjAwI0hlYXJpbmcgYWlkcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xMS4wMCNXcml0aW5nIGZyYW1lcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjEyLjAwI1JhaW4gaW5kaWNhdG9ycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjEzLjAwI0xpZ2h0IGluZGljYXRvcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xNC4wMCNTb3VuZCBpbmRpY2F0b3JzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTUuMDAjU3BlZWNoIHRyYWluaW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xNi4wMCNMYW5ndWFnZSB0cmFpbmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTcuMDAjQnJhaWxsZSBlcXVpcG1lbnQjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTguMDAjQm9vayBvciBtYW51c2NyaXB0IGhvbGRlcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xOS4wMCNQYWdlIHR1cm5lcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4yMC4wMCNTaWduYXR1cmUgZ3VpZGVzIG9yIHN0YW1wcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjIxLjAwI0VyZ29ub21pY2FsbHkgZGVzaWduZWQgc3RhdGlvbmVyeSBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDAuMDAjRnVybml0dXJlIGFuZCBhY2Nlc3NvcmllcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjAxLjAwI1ByZXNzdXJlIHNvcmUgcHJldmVudGlvbiBmdXJuaXR1cmUjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDIuMDAjUHJlc3N1cmUgc29yZSBwcmV2ZW50aW9uIG1hdHRyZXNzZXMgb3IgY292ZXJpbmdzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjAzLjAwI0JhY2twYWRzIG9yIGJhY2tyZXN0cyBvciBzaW1pbGFyIGFkYXB0YXRpb25zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDQuMDAjQXJtIHJlc3RzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDUuMDAjQmVkIGV4dGVuc2lvbnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wNi4wMCNCZWQgbGlmdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wNy4wMCNCZWQgc2hvcnRlbmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDguMDAjRXJnb25vbWljYWxsIGRlc2lnbmVkIGJlZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wOS4wMCNCbGFua2V0IHN1cHBvcnRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMTAuMDAjTWVjaGFuaXplZCBjaGFpcnMgdG8gYXNzaXN0IHdpdGggc2l0dGluZyBvciBzdGFuZGluZyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjExLjAwI0NveGl0IG9yIGFydGhyb2Rlc2lzIGNoYWlycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjEyLjAwI0xlZyBleHRlbmRlcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xMy4wMCNMZWcgc3VwcG9ydHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xNC4wMCNNb2R1bGFyIG9yIHNwZWNpYWwgc2l0dGluZyBmdXJuaXR1cmUgc3lzdGVtcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjE1LjAwI0hlaWdodCBhZGp1c3RhYmxlIHBsaW50aHMgb3IgYnJhY2tldHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xNi4wMCNFcmdvbm9taWNhbGx5IGRlc2lnbmVkIHRhYmxlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjAwLjAwI1BlcnNvbmFsIGNhcmUgZGV2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjAxLjAwI0FpZHMgdG8gYXNzaXN0IGluIGRyZXNzaW5nIG9uZXMgc2VsZiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjAyLjAwI0FpZHMgZm9yIHdhc2hpbmcgb25lcyBzZWxmIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDMuMDAjQWlkcyBmb3IgZHJ5aW5nIG9uZXMgc2VsZiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA0LjAwI0JhdGhpbmcgc3RyZXRjaGVycyBvciBzaG93ZXIgdGFibGVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDUuMDAjRGlhcGVyIGNoYW5naW5nIHRhYmxlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA2LjAwI0JlZHBhbnMgb3IgY29tbW9kZSBjaGFpcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wNy4wMCNCdXR0b25pbmcgb3IgZmFzdGVuaW5nIGRldmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wOC4wMCNFeHRlbmRlZCBoYW5kbGUgY29tYnMgb3IgYnJ1c2hlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA5LjAwI1RvaWxldCBhdHRhY2hlZCBkb3VjaGVzIG9yIGFpciBkcnllcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4xMC4wMCNUb2lsZXQgc2VhdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4xMS4wMCNIYW5kIGdyaXAgdG9vdGhicnVzaGVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTIuMDAjQm9keSB3b3JuIHVyaW5lIGFic29yYmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTMuMDAjVXJpbmUgY29sbGVjdGlvbiBzeXN0ZW1zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTQuMDAjSW5jb250aW5lbmNlIGFsYXJtcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjE1LjAwI09zdG9teSBiYWdzIG9yIGFjY2Vzc29yaWVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDAuMDAjUHJvdGVjdGlvbiBhbmQgbW9iaWxpdHkgZGV2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjAxLjAwI0NydXRjaGVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjAyLjAwI1RyaXBvZHMgb3IgcXVhZHJvcG9kcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wMy4wMCNXYWxraW5nIHN0aWNrcyBhY2Nlc3NvcmllcyBvciBwYXJ0cyB0aGVyZW9mIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA0LjAwI1JvbGxhdG9ycyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wNS4wMCNXYWxrZXJzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA2LjAwI1doZWVsY2hhaXJzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA3LjAwI1doZWVsY2hhaXIgYWNjZXNzb3JpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDguMDAjU3VwcG9ydCByYWlscyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA5LjAwI1JvcGUgbGFkZGVycyBvciBsaWZ0aW5nIGJlbHRzIG9yIGhhcm5lc3NlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjEwLjAwI0xpZnRpbmcgb3IgdHVybmluZyBjdXNoaW9ucyBjYXJwZXRzIG9yIHNoZWV0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjExLjAwI0hvaXN0cyBvciB0cm9sbGV5cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xMi4wMCNXaGVlbGNoYWlyIHJhbXBzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjEzLjAwI1doZWVsY2hhaXIgbGlmdGluZyBwbGF0Zm9ybXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTQuMDAjTmF2aWdhdGlvbiBvciBvcmllbnRhdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTUuMDAjQ2hhaXIgbGlmdHMgb3IgY2hhaXIgdHJhbnNwb3J0ZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTYuMDAjV2FybmluZyBvciBhbGFybSBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTcuMDAjQWlyd2F5IHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjE4LjAwI0VhciBvciBoZWFyaW5nIHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjE5LjAwI0ZhY2Ugb3IgZXllIHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjIwLjAwI0hhbmQgb3IgYXJtIG9yIGVsYm93IHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjIxLjAwI0hlYWQgcHJvdGVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjIuMDAjTG93ZXIgZXh0cmVtaXR5IHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjIzLjAwI0JhdGh0dWIgbGVuZ3RoIG9yIHdpZHRoIHJlZHVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjQuMDAjVHJ1bmsgb3Igd2hvbGUgYm9keSBwcm90ZWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yNS4wMCNCb2R5IHN1cHBvcnQgdW5pdHMgZm9yIGhvaXN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjI2LjAwI0Rvb3Igd2FybmVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjI3LjAwI0Zsb2F0YXRpb24gb3Igc3dtbWluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjguMDAjUmVsaWVmIG1hcHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yOS4wMCNOb24gY29zbWV0aWMgc2tpbiBjbGVhbmluZyBvciBwcm90ZWN0aXZlIHByb2R1Y3RzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMzAuMDAjU3RhdGlvbmFyeSBob2lzdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4zMS4wMCNTdG9tYSBzaGllbGRzIG9yIHByb3RlY3RvcnMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMzIuMDAjVGFjdGlsZSBzdGlja3MgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4zMy4wMCNUb2lsZXQgYXJtIG9yIGJhY2tyZXN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjAwLjAwI1JlY3JlYXRpb25hbCBhbmQgdHJhaW5pbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjAxLjAwI0NhbXBpbmcgZXF1aXBtZW50IGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDIuMDAjVGlsdGluZyB0YWJsZXMgZm9yIGJhbGFuY2UgdHJhaW5pbmcgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wMy4wMCNCaW9mZWVkYmFjayBkZXZpY2VzIGZvciBtb3ZlbWVudCBzdHJlbmd0aCBvciBiYWxhbmNlIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDQuMDAjU3BvcnRzIGV4ZXJjaXNlIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wNS4wMCNGaXNoaW5nIG9yIGh1bnRpbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA2LjAwI1BsYXlpbmcgb3IgdHJhaW5pbmcgYmFsbHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wNy4wMCNDaGVzcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA4LjAwI1BsYXlpbmcgY2FyZHMgb3IgaG9sZGVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA5LjAwI0dhcmRlbmluZyB0b29scyBvciBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMTAuMDAjSGFuZGljcmFmdCB0b29scyBtYXRlcmlhbHMgb3IgZXF1aXBtZW50IGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMTEuMDAjUGhvdG9ncmFwaGljIGVxdWlwbWVudCBvciBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMTIuMDAjQ2FyYXZhbm5pbmcgZXF1aXBtZW50IGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMTMuMDAjVmlicmF0aW5nIGNoYWlycyBmb3IgdHJhaW5pbmcgZGVhZiBwZW9wbGUjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDAuMDAjU3BlY2lhbGl6ZWQgYWlkcyBmb3IgaG91c2VrZWVwaW5nIGFuZCBoYW5kbGluZyBnb29kcyBhbmQgbWVhc3VyaW5nIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDEuMDAjV2VpZ2hpbmcgb3IgbWVhc3VyaW5nIGFpZHMgb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjAyLjAwI0N1dHRpbmcgb3IgY2hvcHBpbmcgb3IgZGl2aWRpbmcgYWlkcyBvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDMuMDAjQ2xlYW5pbmcgb3IgcGVlbGluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDQuMDAjQmFraW5nIG9yIGNvb2tpbmcgb3IgZnJ5aW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wNS4wMCNGb29kIG9yIGRyaW5rIHNlcnZpY2UgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA2LjAwI0Zvb2Qgc3RvcHBlcnMgb3IgZnVubmVscyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA3LjAwI1RhYmxld2FyZSBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA4LjAwI1B1c2hlciBlZGdlcyBvciBwbGF0ZSBidWZmZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDkuMDAjRmVlZGluZyBhcHBhcmF0dXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xMC4wMCNGZWVkaW5nIHByb2JlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjExLjAwI1Nob2UgY2xlYW5pbmcgYXBwYXJhdHVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTIuMDAjU2V3aW5nIG9yIGtuaXR0aW5nIG9yIGNyb2NoZXRpbmcgb3IgZGFybmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTMuMDAjQm90dGxlIG9yIGNhbiBvciBjb250YWluZXIgb3BlbmVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE0LjAwI1R1YmUgc3F1ZWV6aW5nIGtleXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xNS4wMCNHcmFzcGluZyBhaWRzIHRvIGFzc2lzdCBvciByZXBsYWNlIGhhbmQgb3IgZmluZ2VyIGZ1bmN0aW9uIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTYuMDAjR3JpcCBhZGFwdGVycyBvciBhdHRhY2htZW50cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE3LjAwI0JvZHkgd29ybiBob2xkZXJzIHRvIGFzc2lzdCBoYW5kIG9yIGZpbmdlciBmdW5jdGlvbiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE4LjAwI1N0YW5kcyB0byBhc3Npc3QgaGFuZCBvciBmaW5nZXIgZnVuY3Rpb24gZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xOS4wMCNPcGVyYXRpbmcgc3RpY2tzIHN1Y2ggYXMgaGVhZCBvciBjaGluIG9yIG1vdXRoIHN0aWNrcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjIwLjAwI0V4dGVuZGVycyB3aXRob3V0IGdyaXAgZnVuY3Rpb24gZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yMS4wMCNGaXhlZCBwb3NpdGlvbmluZyBzeXN0ZW1zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjIuMDAjQmFsYW5jZXMgb3IgZXF1aXBtZW50IGZvciBob2lzdGluZyBvciBiYWxhbmNpbmcgb2JqZWN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjIzLjAwI01hbmlwdWxhdG9ycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI0LjAwI1JvYm90cyB0byBhc3Npc3QgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI1LjAwI0luZGljYXRvcnMgc3VjaCBhcyBzaWduYWwgbGlnaHRzIG9yIGJ1enplcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yNi4wMCNQb2ludGluZyBsYW1wcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI3LjAwI01lYXN1cmluZyBhaWRzIG9yIHRvb2xzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjguMDAjT2JqZWN0IHBvc2l0aW9uaW5nIGxpZnRpbmcgb3IgdGlsdGluZyBzeXN0ZW1zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjkuMDAjTWFudWFsIGV4dGVuZGVkIHJlYWNoIGdyaXBwaW5nIHRvbmdzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMDAuMDAuMDAjVmV0ZXJpbmFyeSBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjAwLjAwI1ZldGVyaW5hcnkgZXF1aXBtZW50IzQyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjAxLjAwI1ZldGVyaW5hcnkgYmxvb2QgcHJlc3N1cmUgdGVzdGVycyM0Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNS4wMi4wMCNWZXRlcmluYXJ5IGt5bW9ncmFwaCB0ZXN0ZXIjNDIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTUuMDMuMDAjVmV0ZXJpbmFyeSBweXJvZ2VuaWMgdGVzdGVyIzQyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjA0LjAwI1ZldGVyaW5hcnkgc3RlcmVvdG94aWMgZXF1aXBtZW50IzQyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjA1LjAwI1ZldGVyaW5hcnkgZWxlY3Ryb2NhcmRpb2dyYXBoIChFQ0cpIzQyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjAwLjAwI1ZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDEuMDAjR2FzdHJvaW50ZXN0aW5hbCB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjAyLjAwI0Jsb29kIG9yIGJsb29kIGZvcm1pbmcgdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wMy4wMCNSZXNwaXJhdG9yeSBzeXN0ZW0gdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wNC4wMCNNdXNjdWxvIHNrZWxldGFsIG9yIG5lcnZvdXMgc3lzdGVtIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDUuMDAjQ2FyZGlvdmFzY3VsYXIgc3lzdGVtIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDYuMDAjRGVybWF0b2xvZ2ljYWxzIG9yIGFudGlwcm90b3pvYSB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjA3LjAwI0dlbml0byB1cmluYXJ5IHN5c3RlbSBzZXggb3IgaG9ybW9uZSB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQzLjAwLjAwLjAwLjAwI0NvbW11bmljYXRpb25zIGFuZCBDb21wdXRlciBFcXVpcG1lbnQgYW5kIFBlcmlwaGVyYWxzIGFuZCBDb21wb25lbnRzIGFuZCBTdXBwbGllcyM0My4wMC4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4wMC4wMC4wMCNTb2Z0d2FyZSM0My4wMC4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4xNS4wMC4wMCNEYXRhYmFzZSBzeXN0ZW1zIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE1LjAxLjAwI0RhdGFiYXNlIHNvZnR3YXJlIzQzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE2LjAwLjAwI09wZXJhdGluZyBzeXN0ZW1zIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE2LjAxLjAwI01haW5mcmFtZSBvcGVyYXRpbmcgc3lzdGVtIHNvZnR3YXJlIzQzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE2LjAyLjAwI1BlcnNvbmFsIGNvbXB1dGVyIChQQykgb3BlcmF0aW5nIHN5c3RlbSBzb2Z0d2FyZSM0My4xNi4xNi4wMC4wMAotdW5zcHNjNyM0My4xNi4xNi4wMy4wMCNPcGVuIHN5c3RlbXMgb3BlcmF0aW5nIHN5c3RlbXMjNDMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTYuMDQuMDAjQ2x1c3RlcmluZyBzb2Z0d2FyZSM0My4xNi4xNi4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wMC4wMCNCdXNpbmVzcyB0cmFuc2FjdGlvbiBhbmQgcGVyc29uYWwgYnVzaW5lc3Mgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDEuMDAjSW52ZXN0bWVudCBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjAyLjAwI1RheCBwcmVwYXJhdGlvbiBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wMy4wMCNGYWNpbGl0aWVzIG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDQuMDAjU29mdHdhcmUgc3VpdGVzIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA1LjAwI0ludmVudG9yeSBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA2LjAwI0ZpbmFuY2lhbCBhbmFseXNpcyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wNy4wMCNBY2NvdW50aW5nIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA4LjAwI1RpbWUgYWNjb3VudGluZyBvciBodW1hbiByZXNvdXJjZXMgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDkuMDAjQW5hbHl0aWNhbCBvciBzY2llbnRpZmljIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjEwLjAwI01hdGhlbWF0aWNhbCBvciBmb3JlY2FzdGluZyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4xMS4wMCNBdWN0aW9uIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjEyLjAwI1NhbGVzIG9yIG1hcmtldGluZyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wMC4wMCNEb2N1bWVudCBjcmVhdGlvbiBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wMS4wMCNEb2N1bWVudCBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjAyLjAwI0VsZWN0cm9uaWMgcHVibGlzaGluZyBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wMy4wMCNPcHRpY2FsIGNoYXJhY3RlciByZWFkZXIgKE9DUikgc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDQuMDAjVm9pY2UgcmVjb2duaXRpb24gc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDUuMDAjRGVza3RvcCBwdWJsaXNoaW5nIHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjA2LjAwI1ByZXNlbnRhdGlvbiBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wNy4wMCNXb3JkIHByb2Nlc3Npbmcgc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDguMDAjU2Nhbm5lciBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wOS4wMCNTcGVsbCBjaGVja2VycyM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wMC4wMCNEcmF3aW5nIGFuZCBpbWFnaW5nIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjAxLjAwI0NvbXB1dGVyIGFpZGVkIGRlc2lnbiAoQ0FEKSBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wMi4wMCNHcmFwaGljcyBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wMy4wMCNFZHVjYXRpb25hbCBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wNC4wMCNDb21wdXRlciBhaWRlZCBtYW51ZmFjdHVyaW5nIChDQU0pIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjA1LjAwI0NoYXJ0aW5nIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjA2LjAwI0Zvcm0gbWFraW5nIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjA3LjAwI01hcHBpbmcgc29mdHdhcmUjNDMuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjAuMDAuMDAjU2NoZWR1bGluZyBhbmQgcHJvZHVjdGl2aXR5IHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIwLjAxLjAwI1Byb2plY3QgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMC4wMi4wMCNTY2hlZHVsaW5nIHNvZnR3YXJlIzQzLjE2LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIwLjAzLjAwI0NvbnRhY3QgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMS4wMC4wMCNTcHJlYWRzaGVldHMgYW5kIGVuaGFuY2VtZW50IHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIxLjAxLjAwI1NwcmVhZHNoZWV0IHNvZnR3YXJlIzQzLjE2LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIyLjAwLjAwI011bHRpbWVkaWEgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjIuMDEuMDAjTXVzaWMgb3Igc291bmQgZWRpdGluZyBzb2Z0d2FyZSM0My4xNi4yMi4wMC4wMAotdW5zcHNjNyM0My4xNi4yMy4wMC4wMCNQcmludCBzaG9wIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIzLjAxLjAwI0FkZHJlc3MgYm9vayBtYWtpbmcgc29mdHdhcmUjNDMuMTYuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjMuMDIuMDAjTGFiZWwgbWFraW5nIHNvZnR3YXJlIzQzLjE2LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjAwLjAwI1Byb2dyYW1taW5nIGxhbmd1YWdlcyBhbmQgdG9vbHMjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDEuMDAjQ29tcGlsaW5nIHNvZnR3YXJlcyM0My4xNi4yNC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wMi4wMCNDb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDMuMDAjRGV2ZWxvcG1lbnQgc29mdHdhcmUjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDQuMDAjR3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIChHVUkpIHRvb2xzIzQzLjE2LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjA1LjAwI1Byb2dyYW1taW5nIGxhbmd1YWdlcyM0My4xNi4yNC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wNi4wMCNQcm9ncmFtIHRlc3Rpbmcgc29mdHdhcmUjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDAuMDAjU29mdHdhcmUgdXRpbGl0aWVzIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjAxLjAwI0JhY2t1cCBvciByZWNvdmVyeSBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wMi4wMCNCYXIgY29kaW5nIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjAzLjAwI0ZpbGUgc2VjdXJpdHkgb3IgZGF0YSBzZWN1cml0eSBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wNC4wMCNGb3JlaWduIGxhbmd1YWdlIHRyYW5zbGF0aW9uIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA1LjAwI1ByaW50IHV0aWxpdHkgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDYuMDAjU3RvcmFnZSBtZWRpYSBsb2FkaW5nIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA3LjAwI1ZpcnVzIHByb3RlY3Rpb24gc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDguMDAjR2VuZXJhbCB1dGlsaXR5IHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA5LjAwI0NvbXByZXNzaW9uIHV0aWxpdGllcyM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4xMC4wMCNTeXN0ZW0gbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4xMS4wMCNTdG9yYWdlIG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMTIuMDAjVmVyc2lvbiBjaGVja2VyIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjAwLjAwI05ldHdvcmtpbmcgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDEuMDAjUGxhdGZvcm0gaW50ZXJjb25uZWN0aXZpdHkgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDIuMDAjT3B0aWNhbCBqdWtlYm94IHNlcnZlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wMy4wMCNPcGVyYXRpbmcgc3lzdGVtIGVuaGFuY2VtZW50IHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA0LjAwI05ldHdvcmsgb3BlcmF0aW5nIHN5c3RlbSBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wNS4wMCNOZXR3b3JraW5nIGRldmVsb3BlcnMgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDYuMDAjTmV0d29yayBjb25uZWN0aXZpdHkgdGVybWluYWwgZW11bGF0aW9uIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA3LjAwI01haW5mcmFtZSB0cmFuc2FjdGlvbiBwcm9jZXNzaW5nIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA4LjAwI0xpY2Vuc2UgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wOS4wMCNHYXRld2F5IHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjEwLjAwI0NvbXBhY3QgZGlzYyAoQ0QpIHNlcnZlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xMS4wMCNBZG1pbmlzdHJhdGlvbiBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xMi4wMCNUcmFuc2FjdGlvbiBzZXJ2ZXIgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTMuMDAjU3dpdGNoIG9yIHJvdXRlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xNC4wMCNNdWx0aXBsZXhlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xNS4wMCNDb21tdW5pY2F0aW9ucyBzZXJ2ZXIgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTYuMDAjQnJpZGdlIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjAwLjAwI0NvbW11bmljYXRpb24gU29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDEuMDAjRGVza3RvcCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wMi4wMCNTZXJ2ZXIgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDMuMDAjSW50ZXJhY3RpdmUgdm9pY2UgcmVzcG9uc2Ugc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDQuMDAjTW9kZW0gc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDUuMDAjUmVtb3RlIGFjY2VzcyBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wNi4wMCNWaWRlbyBjb25mZXJlbmNpbmcgc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDcuMDAjRXhjaGFuZ2Ugc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjguMDAuMDAjSW50ZXJuZXQgYW5kIGludHJhbmV0IHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI4LjAxLjAwI0ludGVybmV0IGJyb3dzaW5nIHNvZnR3YXJlIzQzLjE2LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI4LjAyLjAwI1dlYiBzZXJ2ZXIgc29mdHdhcmUjNDMuMTYuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDAuMDAjTWlzY2VsbGFuZW91cyBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wMS4wMCNDb21wdXRlciBnYW1lIHNvZnR3YXJlIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjAyLjAwI1NjcmVlbiBzYXZlcnMjNDMuMTYuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDMuMDAjVHJhaW5pbmcgc29mdHdhcmUjNDMuMTYuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDQuMDAjRW50ZXJ0YWlubWVudCBzb2Z0d2FyZSM0My4xNi4yOS4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wNS4wMCNGYW1pbHkgdGl0bGVzIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjA2LjAwI0VkdWNhdGlvbmFsIHNvZnR3YXJlIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjAwLjAwI0luZHVzdHJ5IHNwZWNpZmljIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjAxLjAwI1BvaW50IG9mIHNhbGUgKFBPUykgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDIuMDAjRmxpZ2h0IGNvbnRyb2wgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDMuMDAjQXZpYXRpb24gZ3JvdW5kIHN1cHBvcnQgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDQuMDAjQXZpYXRpb24gdGVzdCBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wNS4wMCNJbmR1c3RyaWFsIGNvbnRyb2wgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDYuMDAjTGlicmFyeSBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wNy4wMCNDb21wbGlhbmNlIHNvZnR3YXJlIzQzLjE2LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMxLjAwLjAwI0RyaXZlcnMgYW5kIHN5c3RlbSBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMS4wMS4wMCNFdGhlcm5ldCBkcml2ZXJzIzQzLjE2LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMxLjAyLjAwI0dyYXBoaWNzIGNhcmQgZHJpdmVycyM0My4xNi4zMS4wMC4wMAotdW5zcHNjNyM0My4xNy4wMC4wMC4wMCNIYXJkd2FyZSBhbmQgYWNjZXNzb3JpZXMjNDMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDAuMDAjVGVsZXBob255IGVxdWlwbWVudCM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wMS4wMCNFeGNoYW5nZSBjb21wb25lbnRzIChDT0RFQykjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDIuMDAjRXhjaGFuZ2UgZGF0YSBpbnRlcmZhY2UgY2FyZHMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDMuMDAjRXhjaGFuZ2UgZGF0YWNvbSBtb2R1bGVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA0LjAwI1Bob25lIGV4Y2hhbmdlIGludGVyZmFjZXMgb3IgY29tcG9uZW50cyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wNS4wMCNFeGNoYW5nZSB0cnVuayBpbnRlcmZhY2Ugb3IgY2FyZCBjb21wb25lbnRzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA2LjAwI1ByZW1pc2UgYnJhbmNoIGV4Y2hhbmdlIChQQlgpIHN5c3RlbXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDcuMDAjVGVsZXBob25lIHN3aXRjaGluZyBlcXVpcG1lbnQjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDguMDAjU3dpdGNoYm9hcmQgZXF1aXBtZW50IzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA5LjAwI1B1bmNoIGRvd24gYmxvY2tzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjEwLjAwI0FuYWxvZyBvciBkaWdpdGFsIHRlbGVwaG9uZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTEuMDAjQW5hbG9nIG9yIGRpZ2l0YWwgY2VsbHVsYXIgdGVsZXBob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xMi4wMCNNb2JpbGUgdGVsZXBob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xMy4wMCNDb3JkbGVzcyB0ZWxlcGhvbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE0LjAwI1BheSB0ZWxlcGhvbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE1LjAwI0Fuc3dlcmluZyBtYWNoaW5lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xNi4wMCNUZWxlcGhvbmUgaGVhZHNldHMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTcuMDAjVm9pY2UgbWFpbCBzeXN0ZW1zIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE4LjAwI0NhbGwgbWFuYWdlbWVudCBzeXN0ZW0jNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTkuMDAjQ2VsbHVsYXIgdGVsZXBob25lIGFjY2Vzc29yaWVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjIwLjAwI1RlbGVwaG9uZSByZXN0cyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yMS4wMCNUZWxlcGhvbmUgYWRhcHRlcnMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjIuMDAjVGVsZXBob25lIGxpbmUgbXVsdGlwbGllcnMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjMuMDAjVGVsZXBob25lIGxpbmUgbW9kdWxhciBjb3VwbGVycyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yNC4wMCNWaWRlb3Bob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yNS4wMCNEaWFsZXJzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjI2LjAwI1RlbGVwaG9uZSBhbXBsaWZpZXJzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjI3LjAwI1RlbGVwaG9uZSBzdGFuZHMgb3IgaG9sZGVycyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yOC4wMCNJbnRlZ3JhdGVkIHNlcnZpY2VzIGRpZ2l0YWwgbmV0d29yayBleGNoYW5nZXMgSVNETiM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yOS4wMCNUZWxlcGhvbmUgamFja3MjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDAuMDAjQW50ZW5uYXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDEuMDAjVHJhbnNtaXR0ZXJzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjAyLjAwI1JlY2VpdmVycyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wMy4wMCNUdW5lcnMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDQuMDAjU2hvcnQgd2F2ZSBlcXVpcG1lbnQjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDUuMDAjQWlyY3JhZnQgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDYuMDAjQXV0b21vdGl2ZSBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wNy4wMCNCcm9hZGNhc3QgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDguMDAjTWljcm93YXZlIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjA5LjAwI1RlbGV2aXNpb24gYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMTAuMDAjU2F0ZWxsaXRlIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjExLjAwI1JhZGlvIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjEyLjAwI1JhZGFyIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjEzLjAwI0NvbW11bmljYXRpb25zIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjE0LjAwI0NvbW11bmljYXRpb24gdG93ZXJzIG9yIHN1cHBvcnQjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDAuMDAjVGVsZWNvbW11bmljYXRpb25zIGVxdWlwbWVudCM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wMS4wMCNXaXJlbGVzcyBiYXNlIHN0YXRpb25zIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjAyLjAwI1RlbGVncmFwaCBlcXVpcG1lbnQjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDMuMDAjVGVsZXR5cGUgZXF1aXBtZW50IzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA0LjAwI1RlbGVjb25mZXJlbmNpbmcgZXF1aXBtZW50IzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA1LjAwI1NhdGVsbGl0ZSBjb21tdW5pY2F0aW9uIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wNi4wMCNQYWdlcnMgb3IgYmVlcGVycyM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wNy4wMCNJbnRlcmNvbW11bmljYXRpb25zIG9yIHBhZ2luZyBzeXN0ZW1zIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA4LjAwI1B1YmxpYyBhZGRyZXNzIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wOS4wMCNFbGVjdHJvbmljIHNvdW5kIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4xMC4wMCNEaWN0YXRpbmcgbWFjaGluZXMjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMTEuMDAjTGluZSBjb25kaXRpb25lcnMjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMTIuMDAjQ2hhbm5lbCBzZXJ2aWNlIHVuaXQgb3IgZGF0YSBzZXJ2aWNlIHVuaXQgKENTVSBvciBEU1UpIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjAwLjAwI0NvbXB1dGVycyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wMS4wMCNOb3RlYm9vayBjb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDIuMDAjRG9ja2luZyBzdGF0aW9ucyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wMy4wMCNXb3Jrc3RhdGlvbnMgb3IgZGVza3RvcCBjb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDQuMDAjUGVyc29uYWwgZGlnaXRhbCBhc3Npc3RhbnRzIChQREFzKSBvciBwZW4gYmFzZWQgY29tcHV0ZXJzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjA1LjAwI01haW5mcmFtZSBjb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDYuMDAjU2VydmVycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wNy4wMCNQb3J0IHJlcGxpY2F0b3JzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjA4LjAwI01pbmljb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDkuMDAjUG9pbnQgb2Ygc2FsZSAoUE9TKSB0ZXJtaW5hbHMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTAuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgKFBMQykjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTEuMDAjQ29uc29sZSAgbWFpbmZyYW1lIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjEyLjAwI0NvbnNvbGUgY29udHJvbGxlciAgbWFpbmZyYW1lIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjEzLjAwI0NoYW5uZWwgY29udmVydGVyIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjE0LjAwI0NoYW5uZWwgdG8gY2hhbm5lbCBpbnRlcmZhY2UgbWFpbmZyYW1lIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjE1LjAwI0NvbnRyb2wgdW5pdCM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xNi4wMCNDb3VwbGVyIGZhY2lsaXR5ICBtYWluZnJhbWUjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTcuMDAjUG93ZXIgY29vbGVyIHVuaXQgIG1haW5mcmFtZSM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xOC4wMCNUaGluIGNsaWVudCBvciBkaXNrbGVzcyB3b3Jrc3RhdGlvbnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTkuMDAjQ29uc29sZSBleHRlbmRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDAuMDAjTWVtb3J5IGFuZCBjZW50cmFsIHByb2Nlc3NpbmcgdW5pdHMgQ1BVcyBhbmQgYWNjZXNzb3JpZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDEuMDAjQ2FjaGUgbWVtb3J5IG1vZHVsZXMjNDMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDIuMDAjQ2VudHJhbCBwcm9jZXNzaW5nIHVuaXQgKENQVSkgcHJvY2Vzc29ycyM0My4xNy4xOS4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wMy4wMCNDZW50YWwgcHJvY2Vzc2luZyB1bml0IChDUFUpIG1vdGhlcmJvYXJkcyBvciBkYXVnaHRlcmJvYXJkcyM0My4xNy4xOS4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wNC4wMCNNZW1vcnkgbW9kdWxlcyM0My4xNy4xOS4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wNS4wMCNDZW50cmFsIHByb2Nlc3NpbmcgdW5pdCBjb29sZXJzIzQzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjAwLjAwI0NvbXB1dGVyIGNvbnRyb2wgYW5kIGludGVyZmFjZSBib2FyZHMgYW5kIGNhcmRzIGFuZCBjYWJsZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDEuMDAjUGFyYWxsZWwgdG8gc21hbGwgY29tcHV0ZXIgc3lzdGVtIGludGVyZmFjZSBjb252ZXJ0ZXJzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjAyLjAwI1BhcmFsbGVsIHRvIHNlcmlhbCBjb252ZXJ0ZXJzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjAzLjAwI1NlcmlhbCBpbmZyYXJlZCBwb3J0cyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wNC4wMCNWaWRlbyBhY2NlbGVyYXRvciBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wNS4wMCNHcmFwaGljIGFjY2VsZXJhdG9yIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA2LjAwI05ldHdvcmsgaW50ZXJmYWNlIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA3LjAwI0F1ZGlvIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA4LjAwI0VtdWxhdGlvbiBhZGFwdGVycyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wOS4wMCNTZXJpYWwgcG9ydCBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xMC4wMCNQYXJhbGxlbCBwb3J0IGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjExLjAwI1NtYWxsIGNvbXB1dGVyIHN5c3RlbSBpbnRlcmZhY2UgKFNDU0kpIGNvbnRyb2xsZXIgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTIuMDAjRGVjb2RlciM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xMy4wMCNQcm9ncmFtbWFibGUgbG9naWMgY29udHJvbGxlciBpbnB1dCBtb2R1bGUjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTQuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgY291bnRlciBtb2R1bGUjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTUuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgY29tbXVuaWNhdGlvbiBtb2R1bGUjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTYuMDAjV2lyZWxlc3MgbmV0d29yayBpbnRlcmZhY2UgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTcuMDAjVGltZWtlZXBpbmcgY2FyZCBtYWNoaW5lIGFuZCBjb21wdXRlciBpbnRlcmZhY2UgZGV2aWNlIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjE4LjAwI1Byb2Nlc3NvciBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wMC4wMCNBdWRpbyBhbmQgdmlzdWFsIGFjY2Vzc29yaWVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjAxLjAwI011c2ljYWwgaW5zdHJ1bWVudCBkaWdpdGFsIGludGVyZmFjZSAoTUlESSkgaW50ZXJmYWNlcyBvciBhZGFwdGVycyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wMi4wMCNTaWduYWwgcHJvY2Vzc29yIHVwZ3JhZGVzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjAzLjAwI1ZpZGVvIGNhcHR1cmUgYm9hcmRzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA0LjAwI1RlbGV2aXNpb24gY2FyZHMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDUuMDAjUmFkaW8gY2FyZHMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDYuMDAjTXVsdGltZWRpYSBraXRzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA3LjAwI0NvbXB1dGVyIHNwZWFrZXJzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA4LjAwI0NvbXB1dGVyIGhlYWRzZXQjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDkuMDAjU2V0IHRvcCBib3hlcyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4xMC4wMCNWaWRlbyBjYXNzZXR0ZSBjb250YWluZXJzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjAwLjAwI0lucHV0IGRldmljZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDEuMDAjQmFyIGNvZGUgcmVhZGVycyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wMi4wMCNHcmFwaGljcyB0YWJsZXRzIG9yIGRpZ2l0aXplcnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDMuMDAjSm95c3RpY2tzIG9yIGdhbWUgcGFkcyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wNC4wMCNLZXlib2FyZHMgb3Iga2V5cGFkcyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wNS4wMCNDb21wdXRlciBtb3VzZSM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wNi4wMCNSZW1vdGUgdXNlciBpbnRlcmZhY2VzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjA3LjAwI1NjYW5uZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjA4LjAwI1RvdWNoIHBhZHMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDkuMDAjVG91Y2ggc2NyZWVucyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xMC4wMCNUcmFja2JhbGxzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjExLjAwI1ZvaWNlIG1pY3JvcGhvbmVzIGZvciBjb21wdXRlcnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTIuMDAjUHVuY2ggY2FyZCByZWFkZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjEzLjAwI0xpZ2h0IHBlbiM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xNC4wMCNTdHlsdXMgcGVuIGZvciBtb2JpbGUgY29tcHV0ZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE1LjAwI01vdXNlIHBhZCM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xNi4wMCNQcm9ncmFtbWFibGUgbG9naWMgY29udHJvbGxlciBoYW5kaGVsZCBwcm9ncmFtbWVyIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE3LjAwI0VHUiAgRWxlY3Ryb25pYyBnYXRlIHJlYWRlciM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xOC4wMCNEdW1iIHRlcm1pbmFsIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE5LjAwI1B1bmNoZWQgY2FyZHMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDAuMDAjRWxlY3Ryb25pYyBkYXRhIHN0b3JhZ2UgZXF1aXBtZW50IzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjAxLjAwI1JlYWQgb25seSBjb21wYWN0IGRpc2MgKENEKSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDIuMDAjQ29tcGFjdCBkaXNjIChDRCkganVrZWJveGVzIG9yIGNoYW5nZXJzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjAzLjAwI0NvbWJpbmF0aW9uIGZsb3BweSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDQuMDAjRGlzayBhcnJheXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDUuMDAjRmxvcHB5IGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wNi4wMCNIaWdoIGNhcGFjaXR5IHJlbW92YWJsZSBtZWRpYSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDcuMDAjTXVsdGkgZHJpdmUgaGFyZCBkcml2ZSB0b3dlcnMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDguMDAjUmVjb3JkYWJsZSBjb21wYWN0IGRpc2MgKENEKSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDkuMDAjUmVlbCB0byByZWVsIHRhcGUgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjEwLjAwI1NpbmdsZSBvcHRpY2FsIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xMS4wMCNUYXBlIGFycmF5cyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xMi4wMCNUYXBlIGRyaXZlIGF1dG8gbG9hZGVycyBvciBsaWJyYXJpZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTMuMDAjSGFyZCBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTQuMDAjQ29tcHV0ZXIgRFZEIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xNS4wMCNBcnJheSBjb250cm9sbGVyIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjE2LjAwI01QMyBwbGF5ZXIjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTcuMDAjTWVtb3J5IGNhcmQgcmVhZGVycyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xOC4wMCNQZXJpcGhlcmFsIGNvbXBvbmVudCBtaWNyb2NoYW5uZWwgaW50ZXJjb25uZWN0IGFyY2hpdGVjdHVyZSAgcmVhZGVyIGFuZCB3cml0ZXIgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI0LjAwLjAwI01vbml0b3JzIGFuZCBkaXNwbGF5cyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNC4wMS4wMCNNb25pdG9ycyM0My4xNy4yNC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNC4wMi4wMCNGbGF0IHBhbmVsIGRpc3BsYXlzIzQzLjE3LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI0LjAzLjAwI1RvdWNoIHNjcmVlbiBtb25pdG9ycyM0My4xNy4yNC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNC4wNC4wMCNNb25pdG9yIGFjY2Vzc29yaWVzIzQzLjE3LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjAwLjAwI1ByaW50ZXJzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjAxLjAwI1Bsb3R0ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjAyLjAwI0JhbmQgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDMuMDAjRG90IG1hdHJpeCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wNC4wMCNMYWJlbCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wNS4wMCNMYXJnZSBmb3JtYXQgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDYuMDAjTGluZSBtYXRyaXggcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDcuMDAjUGFnZSBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wOC4wMCNUaGVybWFsIHRhcGUgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDkuMDAjSW5ramV0IHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjEwLjAwI0xhc2VyIHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjExLjAwI0J1YmJsZSBqZXQgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMTIuMDAjQmFnIHRhZyBwcmludGVyIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjEzLjAwI1ByaW50ZXIgc2VwZXJhdG9yIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjE0LjAwI011bHRpIGZ1bmN0aW9uIHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjE1LjAwI0FUQiBhaXJsaW5lIHRpY2tldCBvciBib2FyZGluZyBwYXNzIHByaW50ZXIjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDAuMDAjRW5jbG9zdXJlcyBhbmQgZnJhbWVzIGFuZCBiYWNrcGxhbmVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjAxLjAwI0NoYXNzaXMjNDMuMTcuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDIuMDAjTmV0d29yayBjaGFzc2lzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjAzLjAwI0RyaXZlIGNhYmluZXRzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjA0LjAwI0V4cGFuc2lvbiBzbG90IGV4cGFuZGVyIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjA1LjAwI1JhY2tzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjA2LjAwI1Byb2dyYW1tYWJsZSBsb2dpYyBjb250cm9sbGVyIHJhY2sgb3IgYmFzZSM0My4xNy4yNi4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wNy4wMCNSZW1vdmFibGUgZHJpdmUgZnJhbWVzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjAwLjAwI05ldHdvcmsgaGFyZHdhcmUgYW5kIGNvbXBvbmVudHMgYW5kIGFjY2Vzc29yaWVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjAxLjAwI0h1YnMgb3IgY29uY2VudHJhdG9ycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wMi4wMCNSb3V0ZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjAzLjAwI1JlcGVhdGVycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wNC4wMCNOZXR3b3JrIGJyaWRnZXMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDUuMDAjU3dpdGNoZXMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDYuMDAjTWVkaWEgZmlsdGVycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wNy4wMCNXaWRlIGFyZWEgbmV0d29yayAoV0FOKSBjYXJkcyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wOC4wMCNNdWx0aXN0YXRpb24gYWNjZXNzIHVuaXRzIChNQVVzKSM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wOS4wMCNEYXRhIHNlcnZpY2UgdW5pdHMgKERTVXMpIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjEwLjAwI05ldHdvcmsgYWRhcHRlcnMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTEuMDAjTG9hZCBiYWxhbmNlciM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xMi4wMCNQcmludGVyICBhY2N1bXVsYXRvciM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xMy4wMCNFbnRlcnByaXNlIFN5c3RlbSBDb25uZWN0aXZpdHkgRVNDT04gRGlyZWN0b3IjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTQuMDAjTmV0d29yayBtYW5hZ2VtZW50IHN5c3RlbSM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xNS4wMCNGaXJld2FsbCBmaXJld2FsbCBhcHBsaWFuY2UjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTYuMDAjQ2FibGUgbmV0d29yayB0ZXN0ZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjE3LjAwI0RhdGEgc3luY2hyb25pemF0aW9uIGRldmljZSM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xOC4wMCNEaWdpdGFsIGNyb3NzIGNvbm5lY3RzIGVxdWlwbWVudCM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xOS4wMCNPcHRpY2FsIGNyb3NzIGNvbm5lY3RzIGVxdWlwbWVudCM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4yMC4wMCNTY3JlZW4gYW1wbGlmaWVyIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjIxLjAwI1RpbWUgZGl2aXNpb25hbCBtdWx0aXBsZXgjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMjIuMDAjQ29ubmVjdGlvbiBwYW5lbHMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMjMuMDAjVm9pY2UgZWNobyBjYW5jZWxsZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjI0LjAwI1BhdGNoIHBhbmVsIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjAwLjAwI01vZGVtcyBhbmQgcmVsYXRlZCBoYXJkd2FyZSM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wMS4wMCNNb2RlbXMgb3IgbmV0d29yayBjb21ibyBjYXJkcyM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wMi4wMCNNb2RlbXMjNDMuMTcuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDMuMDAjSW50ZWdyYXRlZCBzZXJ2aWNlcyBkaWdpdGFsIG5ldHdvcmsgKElTRE4pIGFkYXB0ZXJzIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjA0LjAwI01vZGVtIGJhbmtzIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjA1LjAwI01vZGVtIHRlbGVhZGFwdG9ycyM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wNi4wMCNNdWx0aXBsZXhvciBNVVhzIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjA3LjAwI0FkZCBkcm9wIG11bHRpcGxleGVyIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjAwLjAwI05ldHdvcmsgc3dpdGNoZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDEuMDAjTG9jYWwgYXJlYSBuZXR3b3JrIChMQU4pIHN3aXRjaGVzIzQzLjE3LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjAyLjAwI0FzeW5jaHJvbm91cyB0cmFuc2ZlciBtb2RlIChBVE0pIHN3aXRjaGVzIzQzLjE3LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjAzLjAwI0ZpYmVyIGRpc3RyaWJ1dGVkIGRhdGEgaW50ZXJmYWNlIChGRERJKSAgc3dpdGNoZXMjNDMuMTcuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDQuMDAjV2lkZSBhcmVhIG5ldHdvcmsgKFdBTikgc3dpdGNoZXMjNDMuMTcuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDUuMDAjSW50ZWxsaWdlbnQgbmV0d29yayBzd2l0Y2hpbmcgc3lzdGVtIzQzLjE3LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjAwLjAwI05ldHdvcmsgcmVwZWF0ZXJzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjAxLjAwI0F0dGFjaGVkIHJlc291cmNlIGNvbXB1dGVyIG5ldHdvcmsgKEFSQ25ldCkgcmVwZWF0ZXJzIzQzLjE3LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjAyLjAwI0V0aGVybmV0IHJlcGVhdGVycyM0My4xNy4zMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMC4wMy4wMCNGaWJlciBkaXN0cmlidXRlZCBkYXRhIGludGVyZmFjZSAoRkRESSkgcmVwZWF0ZXJzIzQzLjE3LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjA0LjAwI1Rva2VuIHJpbmcgcmVwZWF0ZXJzIzQzLjE3LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjAwLjAwI1JhZGlvIHN5c3RlbXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzEuMDEuMDAjVHJhbnNtaXR0ZXJzIzQzLjE3LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjAyLjAwI1JlY2VpdmVycyM0My4xNy4zMS4wMC4wMAotdW5zcHNjNyM0My4xNy4zMS4wMy4wMCNUcmFuc2NlaXZlcnMjNDMuMTcuMzEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzEuMDQuMDAjVHVuZXJzIzQzLjE3LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjA1LjAwI1Nob3J0IHdhdmUgZXF1aXBtZW50IzQzLjE3LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjAwLjAwI0F1dG9tYXRlZCBkYXRhIGNvbGxlY3Rpb24gZXF1aXBtZW50IzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjAxLjAwI0JhciBjb2RlIGVxdWlwbWVudCM0My4xNy4zMi4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wMi4wMCNSYWRpbyBmcmVxdWVuY3kgaWRlbnRpZmljYXRpb24gKElEKSBlcXVpcG1lbnQjNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDMuMDAjUmFkaW8gZnJlcXVlbmN5IGRhdGEgY29tbXVuaWNhdGlvbiBlcXVpcG1lbnQjNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDQuMDAjQ2FtZXJhIGJhc2VkIHZpc2lvbiBzeXN0ZW1zIGZvciBhdXRvbWF0ZWQgZGF0YSBjb2xsZWN0aW9uIzQzLjE3LjMyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjA1LjAwI0N1cnJlbmN5IHJlY29nbml0aW9uIGVxdWlwbWVudCM0My4xNy4zMi4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wNi4wMCNNYWduZXRpYyBjYXJkIHJlYWRlcnMjNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDAuMDAjQ29tcHV0ZXIgZGF0YSBzd2l0Y2hlcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wMS4wMCNTZXJpYWwgZGF0YSBzd2l0Y2hlcyM0My4xNy4zMy4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wMi4wMCNLZXlib2FyZCB2aWRlbyBtb3VzZSAoS1ZNKSBzd2l0Y2ggYm94ZXMjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDMuMDAjTWFudWFsIHByaW50ZXIgc3dpdGNoZXMjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDQuMDAjQXV0b21hdGljIHByaW50ZXIgc3dpdGNoZXMjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDUuMDAjQ29uc29sZSBzd2l0Y2gjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDYuMDAjUGFyYWxsZWwgZGF0YSBzd2l0Y2hlcyM0My4xNy4zMy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNC4wMC4wMCNDb21wdXRlciBhY2Nlc3NvcnkgY292ZXJzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjM0LjAxLjAwI0tleSBib2FyZCBza2lucyM0My4xNy4zNC4wMC4wMAotdW5zcHNjNyM0My4xNy4zNC4wMi4wMCNOb3RlYm9vayBvciBwYWxtdG9wIHNraW5zIzQzLjE3LjM0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM1LjAwLjAwI0tleSBib2FyZCBza2lucyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wMC4wMCNDb21wdXRlciBjYWJsZXMgYW5kIGFjY2Vzc29yaWVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjAxLjAwI01vdXNlIGFkYXB0ZXIjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDIuMDAjS2V5Ym9hcmQgZXh0ZW5zaW9uIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wMy4wMCNNb2RlbSBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDQuMDAjQ29yZCBjb3ZlcnMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDUuMDAjUGFyYWxsZWwgY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjA2LjAwI1NlcmlhbCBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDcuMDAjVW5pdmVyc2FsIHNlcmlhbCBidXMgVVNCIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wOC4wMCNOZXR3b3JrIHBhdGNoIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wOS4wMCNDb21wdXRlciBhdWRpbyBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMTAuMDAjQ29tcHV0ZXIgdmlkZW8gY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjExLjAwI0ludGVyIGRldmljZSBsaW5rIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4xMi4wMCNDb21wdXRlciBjYWJsZSBraXRzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjEzLjAwI0NhYmxlIGphY2tzIG9yIGNvbm5lY3RvcnMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDAuMDAjU3RvcmFnZSBkcml2ZSBjb21wb25lbnRzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjAxLjAwI0hlYWQgYXNzZW1ibGllcyBvciBwYXJ0cyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wMi4wMCNMZWFkIGFzc2VtYmxpZXMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDMuMDAjSGVhZCBzdGFjayBhc3NlbWJsaWVzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjA0LjAwI0NvbWIgYXNzZW1ibGllcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wNS4wMCNDcmFzaCBzdG9wcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wNi4wMCNQbGF0dGVycyBvciBkaXNrcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wNy4wMCNIZWFkIG1vdW50aW5nIGFybXMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDguMDAjUmVhZCB3cml0ZSBoZWFkcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wOS4wMCNNb3RvciBkcml2ZXMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMDAuMDAuMDAjQ29tbXVuaWNhdGlvbnMgYW5kIGNvbXB1dGVyIHN1cHBsaWVzIzQzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQzLjE4LjE1LjAwLjAwI0F1ZGlvIHJlY29yZGluZyBtZWRpYSM0My4xOC4wMC4wMC4wMAotdW5zcHNjNyM0My4xOC4xNS4wMS4wMCNCbGFuayBhdWRpbyB0YXBlcyM0My4xOC4xNS4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wMC4wMCNEYXRhIHN0b3JhZ2UgbWVkaWEjNDMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDEuMDAjRmxvcHB5IGRpc2tldHRlcyM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wMi4wMCNSZWNvcmRhYmxlIGNvbXBhY3QgZGlzY3MgKENEcykjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDMuMDAjQmxhbmsgZGF0YSB0YXBlcyM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wNC4wMCNIaWdoIGRlbnNpdHkgcmVtb3ZhYmxlIG1lZGlhIGJsYW5rIGRpc2tzIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjA1LjAwI0JsYW5rIGRpZ2l0YWwgdmlkZW8gZGlzY3MgRFZEIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjA2LjAwI0RhdGEgc3RvcmFnZSBjYXJkcyM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wNy4wMCNNYWduZXRvIG9wdGljYWwgZGlza3MjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDAuMDAjTXVsdGltZWRpYSBzdG9yYWdlIzQzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjAxLjAwI011bHRpbWVkaWEgdG93ZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjAyLjAwI011bHRpbWVkaWEgZHJhd2VycyM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wMy4wMCNDb21wYWN0IGRpc2MgKENEKSBjYXNlcyM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wNC4wMCNEaXNrZXR0ZSBob2xkZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjA1LjAwI0Rpc2tldHRlIHN0b3JhZ2UjNDMuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDYuMDAjTXVsdGltZWRpYSB0cmF5cyBvciBvcmdhbml6ZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjA3LjAwI1ppcCBtYWlsZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE4LjAwLjAwI01vbml0b3Igc3RhbmRzIG9yIHJpc2VycyM0My4xOC4wMC4wMC4wMAotdW5zcHNjNyM0My4xOC4xOS4wMC4wMCNNb25pdG9yIGFybXMjNDMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDQuMDAuMDAuMDAuMDAjT2ZmaWNlIEVxdWlwbWVudCBhbmQgQWNjZXNzb3JpZXMgYW5kIFN1cHBsaWVzIzQ0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjAwLjAwLjAwI09mZmljZSBtYWNoaW5lcyBhbmQgdGhlaXIgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzQ0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE1LjAwLjAwI0R1cGxpY2F0aW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE1LjAxLjAwI1Bob3RvY29waWVycyM0NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNS4wMi4wMCNGYWNzaW1pbGUgbWFjaGluZXMjNDQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTUuMDMuMDAjTXVsdGlmdW5jdGlvbiBtYWNoaW5lcyM0NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNi4wMC4wMCNQYXBlciBwcm9jZXNzaW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE2LjAxLjAwI1BhcGVyIGN1dHRpbmcgbWFjaGluZXMjNDQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTYuMDIuMDAjUGFwZXIgcHVuY2hpbmcgb3IgYmluZGluZyBtYWNoaW5lcyM0NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNi4wMy4wMCNQYXBlciBzaHJlZGRpbmcgbWFjaGluZXMgb3IgYWNjZXNzb3JpZXMjNDQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDAuMDAjUHJpbnRlciBhbmQgcGhvdG9jb3BpZXIgYW5kIGZhY3NpbWlsZSBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wMS4wMCNDb2xvciBvcHRpb25zIG9yIHVwZ3JhZGVzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjAyLjAwI0R1cGxleGVyIHRyYXlzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjAzLjAwI0R1cGxleGVyIHVuaXRzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjA0LjAwI0ZhY3NpbWlsZSBoYW5kc2V0cyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wNS4wMCNQcmludGVyIHRyYXlzIG9yIGZlZWRlcnMjNDQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDYuMDAjUGhvdG9jb25kdWN0b3Igb3IgaW1hZ2luZyB1bml0cyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wNy4wMCNTdGFwbGVyIHVuaXRzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjAwLjAwI0NhbGN1bGF0aW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjAxLjAwI0NhbGN1bGF0b3JzIzQ0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjAyLjAwI0FkZGluZyBtYWNoaW5lcyM0NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOC4wMy4wMCNBY2NvdW50aW5nIG1hY2hpbmVzIzQ0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjA0LjAwI0Nhc2ggcmVnaXN0ZXJzIzQ0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE5LjAwLjAwI0NoZWNrIGVuZG9yc2luZyBhbmQgd3JpdGluZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOS4wMS4wMCNDaGVjayBlbmRvcnNpbmcgbWFjaGluZXMjNDQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTkuMDIuMDAjQ2hlY2sgd3JpdGluZyBtYWNoaW5lcyM0NC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMC4wMC4wMCNMYW1pbmF0aW5nIHN1cHBsaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIwLjAxLjAwI0xhbWluYXRpb24gZmlsbSM0NC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMC4wMi4wMCNMYW1pbmF0b3IgcG91Y2hlcyM0NC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wMC4wMCNNYWlsIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjAxLjAwI0ZyYW5raW5nIG9yIHBvc3RhZ2UgbWFjaGluZXMjNDQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDIuMDAjTWFpbCBvcGVuaW5nIG1hY2hpbmVzIzQ0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjAzLjAwI01haWwgc2VhbGluZyBtYWNoaW5lcyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wNC4wMCNTdGFtcCBjYW5jZWxpbmcgbWFjaGluZXMjNDQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDUuMDAjQWRkcmVzc2luZyBtYWNoaW5lcyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wNi4wMCNMZXR0ZXIgZm9sZGVycyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMi4wMC4wMCNTY2FubmVyIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIyLjAxLjAwI0VuZG9yc2VycyM0NC4xMC4yMi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wMC4wMCNQYWNraW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjAxLjAwI0J1bmRsaW5nIG1hY2hpbmVzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjAyLjAwI1BhcmNlbCB3cmFwcGluZyBtYWNoaW5lcyM0NC4xMC4yMy4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wMy4wMCNTZWFsIHByZXNzZXMjNDQuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjMuMDQuMDAjU2VhbGluZyBtYWNoaW5lcyM0NC4xMC4yMy4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wNS4wMCNTdHJhcHBpbmcgdGVuc2lvbmVycyBvciBzZWFsZXJzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjA2LjAwI1R5aW5nIG1hY2hpbmVzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjAwLjAwI0xhYmVsaW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjAxLjAwI1RhcGUgbGFiZWwgbWFrZXJzIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjAyLjAwI0RhdGluZyBvciBudW1iZXJpbmcgbWFjaGluZXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDMuMDAjSWRlbnRpZmljYXRpb24gKElEKSBwcmVzcyBtYWNoaW5lcyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wNC4wMCNMYWJlbCBhcHBseWluZyBtYWNoaW5lcyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wNS4wMCNMYWJlbCBtYWtpbmcgbWFjaGluZXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDYuMDAjTGV0dGVyaW5nIGVxdWlwbWVudCM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wNy4wMCNUYXBlIGVtYm9zc2VyIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjA4LjAwI0F1dG9tYXRpYyBsYWJlbGluZyBzeXN0ZW1zIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjA5LjAwI1NlbWkgYXV0b21hdGljIGxhYmVsaW5nIHN5c3RlbXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMTEuMDAjTGFiZWwgZGlzcGVuc2VycyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNS4wMC4wMCNTb3J0aW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI1LjAxLjAwI01vbmV5IGNvdW50aW5nIG1hY2hpbmVzIzQ0LjEwLjI1LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI1LjAyLjAwI1NvcnRlcnMjNDQuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDAuMDAjVHlwaW5nIG1hY2hpbmVzIGFuZCBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wMi4wMCNUeXBld3JpdGVycyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wMy4wMCNQcmludHdoZWVscyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wNC4wMCNTdGVub3R5cGUgbWFjaGluZXMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDUuMDAjRGljdGF0aW9uIG1hY2hpbmVzIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjA2LjAwI1R5cGVyd3JpdGVyIHJpYmJvbnMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDcuMDAjV29yZCBwcm9jZXNzb3JzIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjA4LjAwI1R5cGV3cml0ZXIgcHJpbnRpbmcgZWxlbWVudHMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjguMDAuMDAjQmluZGluZyBhbmQgbGFtaW5hdGlvbiBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOC4wMS4wMCNMYW1pbmF0b3JzIzQ0LjEwLjI4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjAwLjAwI09mZmljZSBtYWNoaW5lIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjAxLjAwI1RyYXZlbCBraXRzIGZvciBvZmZpY2UgbWFjaGluZXMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDIuMDAjU3RvcmFnZSBhY2Nlc3NvcmllcyBmb3Igb2ZmaWNlIG1hY2hpbmVzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjAzLjAwI1RhcGUgY2xlYW5lcnMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDQuMDAjQWlyIGNvbXByZXNzZWQgc3ByYXkjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDUuMDAjU21hbGwgcGFwZXIgYmFncyBvZiB3ZXQgYWJzb3JiaW5nIHNhbHRzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjA2LjAwI0NvbXB1dGVyIG9yIG9mZmljZSBlcXVpcG1lbnQgY2xlYW5pbmcga2l0IzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjA3LjAwI0VxdWlwbWVudCBkdXN0IGNvdmVycyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wOC4wMCNDb21wYWN0IGRpc2MgY2xlYW5lcnMgb3Igc2NyYXRjaCByZW1vdmVycyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wOS4wMCNDb21wYWN0IGRpc2MgZHJpdmUgY2xlYW5lciM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4xMC4wMCNMYW1pbmF0b3IgdHJheXMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMTEuMDAjQ2xlYW5pbmcgd2lwZXMgZm9yIG9mZmljZSBtYWNoaW5lcyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4xMi4wMCNDbGVhbmluZyBzb2x1dGlvbnMgZm9yIG9mZmljZSBlcXVpcG1lbnQjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMTMuMDAjQ29tcGFjdCBkaXNjIGRlc3Ryb3llciM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMC4wMC4wMCNGdXNlcnMgYW5kIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMwLjAxLjAwI0Z1c2VyIGNsZWFuaW5nIHBhZHMjNDQuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzAuMDIuMDAjRnVzZXIgb2lsIzQ0LjEwLjMwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMwLjAzLjAwI0Z1c2VyIHdpcGVyIzQ0LjEwLjMwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMwLjA0LjAwI0Z1c2VycyM0NC4xMC4zMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wMC4wMCNQcmludGVyIGFuZCBmYWNzaW1pbGUgYW5kIHBob3RvY29waWVyIHN1cHBsaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjAxLjAwI1ByaW50ZXIgb3IgZmFjc2ltaWxlIG9yIHBob3RvY29waWVyIGJlbHRzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjAyLjAwI1ByaW50ZXIgb3IgZmFjc2ltaWxlIG9yIHBob3RvY29waWVyIHJpYmJvbnMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDMuMDAjVG9uZXIjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDQuMDAjVHJhbnNmZXIgcm9sbHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDUuMDAjSW5rIGNhcnRyaWRnZXMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDYuMDAjSW5rIHN0aWNrcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wNy4wMCNQcmludGVyIG9yIGZhY3NpbWlsZSBvciBwaG90b2NvcGllciBjbGVhbmluZyBzdXBwbGllcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wOC4wMCNEZXZlbG9wZXIgZm9yIHByaW50ZXJzIG9yIHBob3RvY29waWVycyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wOS4wMCNQcmludGVyIG9yIGZhY3NpbWlsZSBvciBwaG90b2NvcGllciBkcnVtcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xMC4wMCNQcmludCBoZWFkcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xMS4wMCNJbmsgcm9sbHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTIuMDAjUHJpbnRlciByaWJib24jNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTMuMDAjUGhhc2VycyBvciBpbmtqZXQga2l0cyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xNC4wMCNMYXNlcmpldCBjb2F0aW5nIGtpdHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTUuMDAjSW1hZ2luZyBmaWxtcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xNi4wMCNLaXQgZm9yIHByaW50ZXIjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTcuMDAjRmFjc2ltaWxlIHJpYmJvbnMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDAuMDAjT2ZmaWNlIHRpbWUgcmVjb3JkaW5nIG1hY2hpbmVzIGFuZCBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMi4wMS4wMCNUaW1lIGNhcmQgbWFjaGluZXMjNDQuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDIuMDAjVGltZSBzdGFtcGluZyBtYWNoaW5lcyM0NC4xMC4zMi4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMi4wMy4wMCNUaW1lIGNhcmQgbWFjaGluZSByZXBsYWNlbWVudCByaWJib24jNDQuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDQuMDAjVGltZSBjYXJkIHJhY2tzIzQ0LjEwLjMyLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMyLjA1LjAwI1RpbWUgY2FyZHMgb3Igc2hlZXRzIzQ0LjEwLjMyLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMzLjAwLjAwI1RpbWUgY2FyZCBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zNC4wMC4wMCNUaW1lIHN0YW1waW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjM1LjAwLjAwI0JpbmRpbmcgbWFjaGluZSBzdXBsaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjM1LjAxLjAwI1dpcmUgYmluZGluZyBlbGVtZW50cyBvciBjb21icyM0NC4xMC4zNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zNS4wMi4wMCNCaW5kaW5nIGNvdmVycyM0NC4xMC4zNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4wMC4wMC4wMCNPZmZpY2UgYW5kIGRlc2sgYWNjZXNzb3JpZXMjNDQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDAuMDAjT3JnYW5pemVycyBhbmQgYWNjZXNzb3JpZXMjNDQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDEuMDAjTWVzc2FnZSBob2xkZXJzIG9yIGRpc3BlbnNlcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDIuMDAjRGVzayBkcmF3ZXIgb3JnYW5pemVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wMy4wMCNEZXNrdG9wIHRyYXlzIG9yIG9yZ2FuaXplcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDQuMDAjRGlza2V0dGUgaG9sZGVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wNS4wMCNDb3B5IGhvbGRlcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDYuMDAjUGFwZXIgb3IgcGFkIGhvbGRlciM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wNy4wMCNCb29rIGVuZHMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDguMDAjU3RheSBwdXQgcGVuIG9yIGhvbGRlciM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wOS4wMCNQZW4gb3IgcGVuY2lsIGhvbGRlcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMTAuMDAjSGFuZ2luZyBvcmdhbml6ZXJzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjExLjAwI0Rpc3BsYXkgcmFja3Mgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMTIuMDAjTGl0ZXJhdHVyZSByYWNrIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjEzLjAwI1N1cHBvcnRzIGZvciBkaWFyaWVzIG9yIGNhbGVuZGFycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4xNC4wMCNTdGFtcCByYWNrcyBvciBvcmdhbml6ZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjE1LjAwI0ZpbGUgc3RvcmFnZSBib3hlcyBvciBvcmdhbml6ZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjAwLjAwI0Nhc2ggaGFuZGxpbmcgc3VwcGxpZXMjNDQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDEuMDAjQ3VycmVuY3kgYmFncyBvciB3YWxsZXRzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjAyLjAwI0NvdW50ZXJmZWl0IGJpbGwgZGV0ZWN0b3IgcGVucyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wMy4wMCNDb2luIHNvcnRlcnMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDQuMDAjQ29pbiB3cmFwcGVycyBvciBiaWxsIHN0cmFwcyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wNS4wMCNDYXNoIG9yIHRpY2tldCBib3hlcyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wNi4wMCNDYXNoIGJveCB0cmF5cyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wNy4wMCNDaGVjayBmaWxlcyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wOC4wMCNDb2luIGJhbmtzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjA5LjAwI0NvdW50ZXJmZWl0IGJpbGwgZGV0ZWN0b3JzIG9yIHN1cHBsaWVzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjAwLjAwI0RyYWZ0aW5nIHN1cHBsaWVzIzQ0LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjAxLjAwI1N0ZW5jaWxzIG9yIGxldHRlcmluZyBhaWRzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjAyLjAwI0RyYWZ0aW5nIGZpbG1zIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjAzLjAwI0NvbXBhc3NlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wNC4wMCNEcmFmdGluZyBwYXBlcnMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDUuMDAjQ3VydmVzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjA2LjAwI1Byb3RyYWN0b3JzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjA3LjAwI1NjYWxlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wOC4wMCNUIHNxdWFyZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDkuMDAjVGVtcGxhdGVzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjEwLjAwI1RyaWFuZ2xlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4xMS4wMCNDb2xvciBjaGFydHMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMTIuMDAjRHJhZnRpbmcga2l0cyBvciBzZXRzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjEzLjAwI0RyYWZ0aW5nIGRvdHMgb3IgdGFwZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDAuMDAjQm9hcmRzIzQ0LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjAxLjAwI1BsYW5uaW5nIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wMi4wMCNFbGVjdHJvbmljIGNvcHlib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDMuMDAjRWFzZWxzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjA0LjAwI0xldHRlciBib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDUuMDAjRHJ5IGVyYXNlIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wNi4wMCNDaGFsayBib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDcuMDAjQnVsbGV0aW4gYm9hcmRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjA4LjAwI01hZ25ldGljIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wOS4wMCNCb2FyZCBjbGVhbmluZyBraXRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjAwLjAwI1BsYW5uaW5nIHN5c3RlbXMjNDQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDEuMDAjQWRkcmVzcyBib29rcyBvciByZWZpbGxzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjAyLjAwI0NhbGVuZGFycyM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wNC4wMCNNZWV0aW5nIHBsYW5uZXJzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjA1LjAwI0FwcG9pbnRtZW50IGJvb2tzIG9yIHJlZmlsbHMjNDQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDYuMDAjRGlhcmllcyBvciByZWZpbGxzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjA3LjAwI1N1Z2dlc3Rpb24gYm94IzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjA4LjAwI1dhbGwgcGxhbm5lcnMgb3IgcmVmaWxscyM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4wMC4wMC4wMCNPZmZpY2Ugc3VwcGxpZXMjNDQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDAuMDAjTWFpbGluZyBzdXBwbGllcyM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wMS4wMCNNYWlsZXIgdHViZXMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDMuMDAjTWFpbGVycyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wNC4wMCNXaW5kb3cgZW52ZWxvcGVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA1LjAwI1NwZWNpYWx0eSBlbnZlbG9wZXMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDYuMDAjU3RhbmRhcmQgZW52ZWxvcGVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA3LjAwI0NhdGFsb2cgb3IgY2xhc3AgZW52ZWxvcGVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA4LjAwI01lc3NhZ2UgZHJvcHBlcnMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDkuMDAjTWFpbGluZyBiYWdzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjEwLjAwI01haWxpbmcgc2VhbHMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMTEuMDAjTWFpbGluZyBib3hlcyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4wMC4wMCNEZXNrIHN1cHBsaWVzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjA0LjAwI1N0YW1wcyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4wNS4wMCNUYXBlIGRpc3BlbnNlcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMDYuMDAjRmluZ2VyIHN0YWxscyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xMS4wMCNQYXBlciBvciBleWVsZXQgcHVuY2hlcyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xMi4wMCNQYXBlciBjdXR0ZXJzIG9yIHJlZmlsbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTMuMDAjU3RhcGxlIHJlbW92ZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjE0LjAwI0NhbGwgYmVsbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTUuMDAjU3RhcGxlcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTcuMDAjTWFudWFsIGxldHRlciBvcGVuZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjE4LjAwI1NjaXNzb3JzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjE5LjAwI1BlbmNpbCBzaGFycGVuZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjIwLjAwI0ZpbmdlciBzdGFsbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjEuMDAjRGVzayBwYWRzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjIyLjAwI01vaXN0ZW5lcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjMuMDAjTWVjaGFuaWNhbCBsZXR0ZXIgb3BlbmVyIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI0LjAwI0VtYm9zc2luZyB0b29scyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yNS4wMCNQYXBlciB3ZWlnaHRzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI2LjAwI0FkaGVzaXZlIHJlbW92ZXIjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjcuMDAjQm9va21hcmtzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI4LjAwI0NsaXAgaG9sZGVycyBvciBkaXNwZW5zZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI5LjAwI1BhcGVyIGNsaXAgZGlzcGVuc2VyIG9yIGhvbGRlciM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4zMC4wMCNTdGFwbGVyIGtpdCM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4zMS4wMCNHbHVlIGRpc3BlbnNlcnMgb3IgcmVmaWxscyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wMC4wMCNXcml0aW5nIGluc3RydW1lbnRzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjAxLjAwI1JvbGxlcmJhbGwgcGVucyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wMi4wMCNQZW4gb3IgcGVuY2lsIHNldHMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDMuMDAjRm91bnRhaW4gcGVucyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wNC4wMCNCYWxsIHBvaW50IHBlbnMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDUuMDAjTWVjaGFuaWNhbCBwZW5jaWxzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA2LjAwI1dvb2RlbiBwZW5jaWxzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA3LjAwI0NvbG9yZWQgcGVuY2lscyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wOC4wMCNNYXJrZXJzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA5LjAwI0NyYXlvbnMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMTAuMDAjV3JpdGluZyBjaGFsayBvciBhY2Nlc3NvcmllcyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xMS4wMCNGZWx0IHBlbiM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xMi4wMCNNYXJrZXIgcmVmaWxscyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xMy4wMCNQZW4gbmlicyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xNC4wMCNQZW5jaWwgb3IgcGVuIGdyaXBzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjE1LjAwI0NvbWJpbmF0aW9uIHBlbiBvciBwZW5jaWwjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDAuMDAjQ29ycmVjdGlvbiBtZWRpYSM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wMS4wMCNDb3JyZWN0aW9uIGZpbG0gb3IgdGFwZSM0NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wMi4wMCNDb3JyZWN0aW9uIGZsdWlkIzQ0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjA0LjAwI0VyYXNlcnMjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDUuMDAjQ29ycmVjdGlvbiBwZW5zIzQ0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjA2LjAwI0NvcnJlY3Rpb24gcGVuIHJlZmlsbHMjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDcuMDAjRXJhc2VyIHJlZmlsbHMjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTkuMDAuMDAjSW5rIGFuZCBsZWFkIHJlZmlsbHMjNDQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTkuMDEuMDAjSW5kaWEgaW5rIzQ0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE5LjAyLjAwI0xlYWQgcmVmaWxscyM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wMy4wMCNQZW4gcmVmaWxscyM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wNC4wMCNJbmsgcmVmaWxscyM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wNS4wMCNJbmsgb3Igc3RhbXAgcGFkcyM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wMC4wMCNGb2xkZXJzIGFuZCBiaW5kZXJzIGFuZCBpbmRleGVzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjAxLjAwI0luZGV4IGNhcmQgZmlsZXMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDIuMDAjU2hlZXQgcHJvdGVjdG9ycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wMy4wMCNCaW5kZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjA0LjAwI0RhdGEgYmluZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wNS4wMCNNYWdhemluZSBvciBib29rIGNvdmVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wNi4wMCNIYW5naW5nIGZpbGUgZm9sZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wNy4wMCNQcmVzZW50YXRpb24gYmluZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wOC4wMCNUYWIgaW5kZXhlcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wOS4wMCNSb3Rhcnkgb3IgYnVzaW5lc3MgY2FyZCBmaWxlcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xMC4wMCNEaXZpZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xMS4wMCNGb2xkZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjEyLjAwI0NsaXBib2FyZHMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTMuMDAjUmVwb3J0IGNvdmVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xNC4wMCNTaGVldCBsaWZ0ZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE1LjAwI0ZpbGUgYmFja2VycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xNi4wMCNEb2N1bWVudCBob2xkZXIjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTcuMDAjSGFuZ2luZyBmb2xkZXJzIG9yIGFjY2Vzc29yaWVzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE4LjAwI0ZpbGUgaW5zZXJ0cyBvciB0YWJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE5LjAwI0ZpbGUgcG9ja2V0cyBvciBhY2Nlc3NvcmllcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4yMC4wMCNDYXJkIHBvY2tldHMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMjEuMDAjUG9zdGFnZSBzdGFtcCBhbGJ1bXMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMjIuMDAjQmluZGluZyBiYXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjAwLjAwI0Zhc3RlbmluZyBzdXBwbGllcyM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wMS4wMCNSdWJiZXIgYmFuZHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDIuMDAjUHJvbmdzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjAzLjAwI0NsYXNwIGZhc3RlbmVycyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wNC4wMCNQYXBlciBjbGlwcyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wNS4wMCNCaW5kZXIgb3IgYnVsbGRvZyBjbGlwcyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wNi4wMCNQaW5zIG9yIHRhY2tzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjA3LjAwI1N0YXBsZXMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDguMDAjRmlsaW5nIHBvY2tldHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDkuMDAjVmVsY3JvIGZhc3RlbmVycyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xMC4wMCNBZGhlc2l2ZSBtb3VudHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTEuMDAjSG9sZSByZWluZm9yY2VtZW50cyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xMi4wMCNSb3VuZCBoZWFkIGZhc3RlbmVycyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xMy4wMCNUYWcgZmFzdGVuZXJzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjE0LjAwI1NjcmV3IHBvc3RzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjE1LjAwI0FkaGVzaXZlIGNvcm5lcnMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTYuMDAjQmFnIGNsaXBzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjE3LjAwI0Jvb2sgcmluZ3MjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDUuMDAuMDAuMDAuMDAjUHJpbnRpbmcgYW5kIFBob3RvZ3JhcGhpYyBhbmQgQXVkaW8gYW5kIFZpc3VhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjAwLjAwLjAwI1ByaW50aW5nIGFuZCBwdWJsaXNoaW5nIGVxdWlwbWVudCM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wMC4wMCNQcmludGluZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCM0NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wMS4wMCNIZWxpb2dyYXBoaWMgcHJpbnRlcnMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDIuMDAjT2Zmc2V0IHByaW50aW5nIHByZXNzZXMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDMuMDAjTGV0dGVycHJlc3MgZXF1aXBtZW50IzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA0LjAwI0xpdGhvZ3JhcGhpYyBlcXVpcG1lbnQjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDUuMDAjUGhvdG9ncmF2dXJlIHByaW50aW5nIG1hY2hpbmVzIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA2LjAwI1NpbGsgc2NyZWVuIHByaW50aW5nIG1hY2hpbmVzIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA3LjAwI1ByaW50aW5nIHByZXNzZXMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDguMDAjUGVyZm9yYXRpbmcgbWFjaGluZXMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDkuMDAjVWx0cmF2aW9sZXQgKFVWKSByb3RhcnkgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xMC4wMCNGbGV4b2dyYXBoaWMgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xMS4wMCNJbmtqZXQgcHJpbnRlciBmb3IgY29tbWVyY2lhbCBwcmludGluZyBhcHBsaWNhdGlvbnMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMTIuMDAjVGhlcm1hbCB0cmFuc2ZlciBwcmludGVyIGZvciBjb21tZXJjaWFsIHByaW50aW5nIGFwcGxpY2F0aW9ucyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xMy4wMCNIb3Qgc3RhbXAgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xNC4wMCNQYWQgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xNS4wMCNDb3JlIHByaW50ZXIjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDAuMDAjUHJpbnRpbmcgbWFjaGluZXJ5IGFjY2Vzc29yaWVzIzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjAyLjAwI09mZnNldCBkYXJrcm9vbSBlcXVpcG1lbnQjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDMuMDAjT2Zmc2V0IHByaW50aW5nIGNvbnN1bWFibGVzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjA0LjAwI09mZnNldCBwcmludGluZyBwbGF0ZSBwcm9jZXNzb3JzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjA1LjAwI09mZnNldCBwbGF0ZXMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDYuMDAjT2Zmc2V0IGZpbG0gcHJvY2Vzc29ycyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wNy4wMCNTaWxrIHNjcmVlbiBhcmMgbGFtcHMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDguMDAjU2lsayBzY3JlZW4gc2NyZWVucyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wOS4wMCNTaWxrIHNjcmVlbiBwcmludGluZyByYWNrcyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4xMC4wMCNTaWxrIHNjcmVlbiB2YWN1dW0gcHJpbnRpbmcgZnJhbWVzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjExLjAwI1NpbGsgc2NyZWVuIHNxdWVlZ2VlcyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wMC4wMCNQcmludGluZyBhY2Nlc3NvcmllcyM0NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wMS4wMCNQcmludGluZyBhc3NlbWJsZXJzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjAyLjAwI1ByaW50aW5nIGd1aWxsb3RpbmVzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjAzLjAwI1ByaW50aW5nIGNvbGxhdG9ycyBvciBkZWNvbGxhdG9ycyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wNC4wMCNQcmludGluZyBjdXR0ZXJzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjA1LjAwI1ByaW50aW5nIHRyaW1tZXJzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjA2LjAwI1ByaW50aW5nIHB1bmNoZXMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDcuMDAjUHJpbnRpbmcgcGxhdGVzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjA4LjAwI1ByaW50aW5nIGF3bHMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDAuMDAjQm9vayBiaW5kaW5nIGFuZCBzZXdpbmcgbWFjaGluZXJ5IzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjAxLjAwI0Jvb2sgY3JlYXNpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDIuMDAjQm9vayBjdXR0aW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjAzLjAwI0Jvb2sgcHVuY2hpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDQuMDAjQm9vayBzdGl0Y2hpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDUuMDAjQm9vayBqb2dnaW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjA2LjAwI0Jvb2sgZ2F0aGVyaW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjA3LjAwI0Jvb2sgZm9sZGluZyBtYWNoaW5lcyM0NS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wMC4wMCNQcmludGluZyBsYWJvcmF0b3J5IGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNDUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTkuMDEuMDAjQmFuZGluZyBtYWNoaW5lcyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wMi4wMCNQbGF0ZW1ha2VycyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wMy4wMCNQYXBlciBkcmlsbGluZyBtYWNoaW5lcyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wNC4wMCNFbmxhcmdlcnMjNDUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTkuMDUuMDAjRHJhd2luZyBvciByZXRvdWNoaW5nIGJvYXJkcyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4yMC4wMC4wMCNDb21wb3NpbmcgbWFjaGluZXMgYW5kIGFjY2Vzc29yaWVzIzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjAxLjAwI0ludGVydHlwZSBjb21wb3NpbmcgbWFjaGluZXMjNDUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMjAuMDIuMDAjTGlub3R5cGUgY29tcG9zaW5nIG1hY2hpbmVzIzQ1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjAzLjAwI1Bob3RvY29tcG9zaXRpb24gbWF0ZXJpYWxzIzQ1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjA0LjAwI01vbm90eXBlIGNvbXBvc2luZyBtYWNoaW5lcyM0NS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4yMC4wNS4wMCNQaG90b3R5cGVzZXR0aW5nIG1hY2hpbmVzIzQ1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjAwLjAwLjAwI0F1ZGlvIGFuZCB2aXN1YWwgcHJlc2VudGF0aW9uIGVxdWlwbWVudCM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNS4wMC4wMCNMZWN0ZXJucyBhbmQgc291bmQgc3lzdGVtcyBhbmQgYWNjZXNzb3JpZXMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTUuMDEuMDAjRnJlZSBzdGFuZGluZyBsZWN0ZXJucyM0NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNS4wMi4wMCNUYWJsZSB0b3AgbGVjdGVybnMjNDUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDAuMDAjUHJvamVjdG9ycyBhbmQgc3VwcGxpZXMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDEuMDAjUG9pbnRlcnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDIuMDAjUHJvamVjdGlvbiBidWxicyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wMy4wMCNQcm9qZWN0aW9uIHNjcmVlbnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDQuMDAjU2xpZGUgcHJvamVjdG9ycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wNS4wMCNUcmFuc3BhcmVuY3kgZXF1aXBtZW50IG9yIHN1cHBsaWVzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjA2LjAwI0xpcXVpZCBjcnlzdGFsIGRpc3BsYXkgcHJvamVjdGlvbiBwYW5lbHMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDcuMDAjT3ZlcmhlYWQgcHJvamVjdG9ycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wOC4wMCNGaWxtIHByb2plY3RvcnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDkuMDAjQ29tcHV0ZXIgc2NyZWVuIHByb2plY3RvciM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xMC4wMCNFcGlkaWFzY29wZXMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTEuMDAjTWljcm9maWNoZSBvciBtaWNyb2ZpbG0gdmlld2VycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xMi4wMCNEaXNzb2x2ZSBjb250cm9scyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xMy4wMCNDYXRob2RlIHJheSB0dWJlIGRhdGEjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTQuMDAjTGlxdWlkIGNyeXN0YWwgZGlzcGxheSBkYXRhIG9yIHZpZGVvIHByb2plY3RvciM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xNS4wMCNQcm9qZWN0aW9uIGxlbnNlcyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xNi4wMCNWaWRlbyBwcm9qZWN0b3JzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjE4LjAwI1ByZXNlbnRhdGlvbiBsaWdodCBib3hlcyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNy4wMC4wMCNBdWRpbyBwcmVzZW50YXRpb24gZXF1aXBtZW50IGFuZCBoYXJkd2FyZSBhbmQgY29udHJvbGxlcnMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTcuMDEuMDAjQXNzaXN0aXZlIGxpc3RlbmluZyBkZXZpY2VzIzQ1LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE3LjAyLjAwI0F1ZGlvIGphY2sgYm94ZXMjNDUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTcuMDMuMDAjTGlzdGVuaW5nIGNlbnRlcnMjNDUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDAuMDAjVmlkZW8gYW5kIGNvbWJpbmF0aW9uIHZpZGVvIGFuZCBhdWRpbyBwcmVzZW50YXRpb24gZXF1aXBtZW50IGFuZCBoYXJkd2FyZSBhbmQgY29udHJvbGxlcnMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDEuMDAjTWVkaWEgY29udHJvbCBzeXN0ZW1zIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjAyLjAwI1RlbGV2aXNpb24gbW91bnRzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjAzLjAwI1NjYW4gY29udmVydGVycyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wNC4wMCNMaW5lIGRvdWJsZXJzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjA1LjAwI1ZpZGVvIGVkaXRvcnMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDYuMDAjRGlzdGFuY2UgbGVhcm5pbmcgc3lzdGVtcyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wNy4wMCNJbnRlcmZhY2VzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjA4LjAwI0xpZ2h0aW5nIGNvbnRyb2xzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE5LjAwLjAwI1Bob25lIGFuZCB2aWRlbyBjb25mZXJlbmNlIGVxdWlwbWVudCBhbmQgaGFyZHdhcmUgYW5kIGNvbnRyb2xsZXJzIzQ1LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjE5LjAxLjAwI0F1ZGlvY29uZmVyZW5jaW5nIHN5c3RlbXMjNDUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTkuMDIuMDAjVmlkZW9jb25mZXJlbmNpbmcgc3lzdGVtcyM0NS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMi4wMC4wMC4wMCNQaG90b2dyYXBoaWMgZXF1aXBtZW50IzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjAwLjAwI0NhbWVyYXMjNDUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDEuMDAjU3RpbGwgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wMi4wMCNJbnN0YW50IHByaW50IGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDMuMDAjRGlzcG9zYWJsZSBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjA0LjAwI0RpZ2l0YWwgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wNS4wMCNDaW5lbWF0b2dyYXBoaWMgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wNi4wMCNWaWRlbyBjb25mZXJlbmNlIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDguMDAjTWljcm9maWxtIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTAuMDAjQWVyaWFsIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTEuMDAjSGlnaCBzcGVlZCBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjEyLjAwI1VuZGVyd2F0ZXIgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xMy4wMCNPZmZzZXQgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xNC4wMCNQaG90b2NvcGllciBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjE1LjAwI0hhbmQgaGVsZCBjYW1jb3JkZXJzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjE2LjAwI0RpZ2l0YWwgY2FtY29yZGVyIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjE3LjAwI0RvY3VtZW50IGNhbWVyYSM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xOC4wMCNDYW1lcmEga2l0cyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wMC4wMCNDYW1lcmEgYWNjZXNzb3JpZXMjNDUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDEuMDAjQ2FtZXJhIGZsYXNoZXMgb3IgbGlnaHRpbmcjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDIuMDAjQ2FtZXJhIHRyaXBvZHMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDMuMDAjQ2FtZXJhIGxlbnNlcyBvciBmaWx0ZXJzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA0LjAwI0NhbWVyYSBzaHV0dGVycyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wNS4wMCNTY3JlZW4gZnJhbWVzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA2LjAwI0NhbWVyYSBoYXJuZXNzZXMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDcuMDAjQ2FtZXJhIGJsb2NrcyBvciBob2xkZXJzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA4LjAwI0NhbWVyYSBhc3NlbWJsaWVzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA5LjAwI0NhbWVyYSBicmFja2V0cyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xMC4wMCNDYW1lcmEgY2FibGVzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjExLjAwI0xlbnMgY292ZXIjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTIuMDAjQ2FtZXJhIHRhYmxlcyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xMy4wMCNDYW1lcmEgZW5jbG9zdXJlcyBvciBjb3ZlcnMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTQuMDAjUmV0cm9maXQga2l0cyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xNS4wMCNDYW1lcmEgcmluZ3MjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTYuMDAjUGFuIGhlYWRzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE3LjAwLjAwI1Bob3RvZ3JhcGhpYyBwcm9jZXNzaW5nIGVxdWlwbWVudCM0NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wMS4wMCNGaWxtIGRyaWVycyM0NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wMi4wMCNGaWxtIHdhc2hlcnMjNDUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTcuMDMuMDAjRmlsbSBzcGxpY2VycyM0NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wNC4wMCNGaWxtIGVkaXRvcnMjNDUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTcuMDUuMDAjUGhvdG9ncmFwaGljIGVubGFyZ2VycyM0NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMy4wMC4wMC4wMCNQaG90b2dyYXBoaWMgYW5kIHJlY29yZGluZyBtZWRpYSM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wMC4wMCNTdGlsbCBwaWN0dXJlIGZpbG0jNDUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDEuMDAjQ29sb3IgZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wMi4wMCNCbGFjayBhbmQgd2hpdGUgZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wMy4wMCNJbnN0YW50IHBpY3R1cmUgZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wNC4wMCNNaWNyb2ZpbG0jNDUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDUuMDAjWCByYXkgZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wNi4wMCNQaG90b2dyYXBoeSBwYXBlciM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNi4wMC4wMCNNb3ZpbmcgcGljdHVyZSBtZWRpYSM0NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNi4wMS4wMCNNb3Rpb24gcGljdHVyZSBjYW1lcmEgZmlsbSM0NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNi4wNC4wMCNCbGFuayB2aWRlbyB0YXBlcyM0NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNy4wMC4wMCNNZWRpYSBzdG9yYWdlIzQ1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE3LjAxLjAwI1NsaWRlIHRyYXlzIzQ1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjE0LjAwLjAwLjAwI1Bob3RvZ3JhcGhpYyBmaWxtbWFraW5nIHN1cHBsaWVzIzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE1LjAwLjAwI1Bob3RvZ3JhcGhpYyBwcm9jZXNzaW5nIGNoZW1pY2FscyM0NS4xNC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNS4wMS4wMCNEZXZlbG9wZXIgc29sdXRpb24jNDUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTUuMDIuMDAjRml4YXRpdmUjNDUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTYuMDAuMDAjRGFya3Jvb20gc3VwcGxpZXMjNDUuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTYuMDEuMDAjRGV2ZWxvcGluZyB0cmF5cyM0NS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNi4wMi4wMCNEZXZlbG9waW5nIHRhbmtzIzQ1LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE2LjAzLjAwI0RldmVsb3BpbmcgdG9uZ3MjNDUuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMDAuMDAuMDAuMDAjRGVmZW5zZSBhbmQgTGF3IEVuZm9yY2VtZW50IGFuZCBTZWN1cml0eSBhbmQgU2FmZXR5IEVxdWlwbWVudCBhbmQgU3VwcGxpZXMjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMDAuMDAuMDAjTGlnaHQgd2VhcG9ucyBhbmQgYW1tdW5pdGlvbiM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wMC4wMCNGaXJlYXJtcyM0Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wMS4wMCNNYWNoaW5lIGd1bnMjNDYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTUuMDIuMDAjUG9saWNlIG9yIHNlY3VyaXR5IHNob3RndW5zIzQ2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE1LjAzLjAwI01pbGl0YXJ5IHJpZmxlcyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wNC4wMCNIYW5kZ3VucyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wNS4wMCNBaXIgcmlmbGVzIG9yIGFpciBoYW5kZ3VucyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wNi4wMCNQYXJ0cyBvZiBndW5zIG9yIHBpc3RvbHMjNDYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTYuMDAuMDAjQW1tdW5pdGlvbiM0Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNi4wMS4wMCNEZWZlbnNlIG9yIGxhdyBlbmZvcmNlbWVudCBhbW11bml0aW9uIzQ2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE3LjAwLjAwI0FtbXVuaXRpb24gaGFuZGxpbmcgc3lzdGVtcyM0Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNy4wMS4wMCNUYW5rIGFtbXVuaXRpb24gaGFuZGxpbmcgc3lzdGVtcyM0Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNy4wMi4wMCNBaXJjcmFmdCBhbW11bml0aW9uIGhhbmRsaW5nIHN5c3RlbXMjNDYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTguMDAuMDAjQXJtcyBhbmQgYW1tdW5pdGlvbiBhY2Nlc3NvcmllcyM0Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xOC4wMS4wMCNHdW4gY2FzZXMjNDYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDYuMTEuMDAuMDAuMDAjQ29udmVudGlvbmFsIHdhciB3ZWFwb25zIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjExLjE1LjAwLjAwI0JvbWJzIGFuZCBncmVuYWRlcyM0Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNS4wMS4wMCNHcmVuYWRlcyM0Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNS4wMi4wMCNNaW5lcyM0Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNS4wMy4wMCNNb3J0YXIgYm9tYnMjNDYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTYuMDAuMDAjR3VuIHN5c3RlbXMjNDYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTYuMDEuMDAjQ2hhaW4gZ3VuIHN5c3RlbXMjNDYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTYuMDIuMDAjR2F0bGluZyBndW4gc3lzdGVtcyM0Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNy4wMC4wMCNJbmZyYXJlZCAoSVIpIHNlbnNvcnMjNDYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTcuMDEuMDAjSW5mcmFyZWQgKElSKSBjb29sZXJzIzQ2LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE3LjAyLjAwI0luZnJhcmVkIChJUikgZGV0ZWN0b3JzIzQ2LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE4LjAwLjAwI05hdmFsIHdlYXBvbnMjNDYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTguMDEuMDAjVG9ycGVkb2VzIzQ2LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjAwLjAwLjAwI01pc3NpbGVzIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjAwLjAwI0d1aWRlZCBtaXNzaWxlcyM0Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wMS4wMCNBaXIgdG8gYWlyIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjAyLjAwI0FudGlhaXJjcmFmdCBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wMy4wMCNBbnRpbWlzc2lsZSBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wNC4wMCNBbnRpc2hpcCBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wNS4wMCNBbnRpdGFuayBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wNi4wMCNCYWxsaXN0aWMgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDcuMDAjQ3J1aXNlIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjA4LjAwI1N1cmZhY2UgdG8gYWlyIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjA5LjAwI0FudGliYWxsaXN0aWMgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMTAuMDAjU3VyZmFjZSB0byBzdXJmYWNlIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjExLjAwI0FpciB0byBzdXJmYWNlIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjEyLjAwI1RyYWluaW5nIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE2LjAwLjAwI01pc3NpbGUgc3Vic3lzdGVtcyM0Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wMS4wMCNFbGVjdHJvbmljIHNhZmUgb3IgYXJtIGRldmljZXMjNDYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTYuMDIuMDAjU29saWQgbWlzc2lsZSBib29zdGVycyM0Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wMy4wMCNNaXNzaWxlIHdhcmhlYWRzIzQ2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE2LjA0LjAwI1NhZmV0eSBwaW4gcHVsbGVycyM0Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wNS4wMCNKZXQgcmVhY3Rpb24gY29udHJvbCBhc3NlbWJsaWVzIzQ2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjAwLjAwLjAwI1JvY2tldHMgYW5kIHN1YnN5c3RlbXMjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTUuMDAuMDAjTGF1bmNoIHZlaGljbGVzIGFuZCByb2NrZXRzIzQ2LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE1LjAxLjAwI011bHRpIHN0YWdlIHJvY2tldHMjNDYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTUuMDIuMDAjUmV1c2FibGUgcm9ja2V0cyM0Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wMy4wMCNTaW5nbGUgc3RhZ2Ugcm9ja2V0cyM0Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wNC4wMCNMaXF1aWQgcm9ja2V0cyM0Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wNS4wMCNTb2xpZCByb2NrZXRzIzQ2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjAwLjAwI0Jvb3N0ZXJzIzQ2LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjAxLjAwI1JldXNhYmxlIGJvb3N0ZXJzIzQ2LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjAyLjAwI1NvbGlkIGJvb3N0ZXJzIzQ2LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjAzLjAwI011bHRpIHN0YWdlIGJvb3N0ZXJzIzQ2LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjA0LjAwI0xpcXVpZCBib29zdGVycyM0Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNC4wMC4wMC4wMCNMYXVuY2hlcnMjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTQuMTUuMDAuMDAjTWlzc2lsZSBhbmQgcm9ja2V0IGxhdW5jaGVycyM0Ni4xNC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNC4xNS4wMS4wMCNNaXNzaWxlIGxhdW5jaGVycyM0Ni4xNC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNC4xNS4wMi4wMCNSb2NrZXQgbGF1bmNoZXJzIzQ2LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjAwLjAwLjAwI0xhdyBlbmZvcmNlbWVudCM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wMC4wMCNDcm93ZCBjb250cm9sIGVxdWlwbWVudCM0Ni4xNS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wMS4wMCNCYXJyaWNhZGVzIzQ2LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE1LjAyLjAwI1Jpb3QgaGVsbWV0cyM0Ni4xNS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wMy4wMCNSaW90IHNoaWVsZHMjNDYuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTUuMDQuMDAjQm9keSBhcm1vdXIjNDYuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTUuMDUuMDAjQmFycmllcnMjNDYuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDAuMDAjU2VjdXJpdHkgYW5kIGNvbnRyb2wgZXF1aXBtZW50IzQ2LjE1LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjAxLjAwI0hhbmRjdWZmcyM0Ni4xNS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNi4wMi4wMCNOaWdodCBzdGlja3MjNDYuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDMuMDAjRmluZ2VycHJpbnQgZXF1aXBtZW50IzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjA0LjAwI0FsY29ob2wgYW5hbHlzZXJzIzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjA1LjAwI1dlYXBvbnMgb3IgZXhwbG9zaXZlcyBkZXRlY3RvcnMjNDYuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDYuMDAjTmFyY290aWMgdGVzdCBraXRzIzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjAwLjAwLjAwI1B1YmxpYyBzYWZldHkgYW5kIGNvbnRyb2wjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDAuMDAjVHJhZmZpYyBjb250cm9sIzQ2LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjAxLjAwI0FpcnBvcnQgc2lnbmFsaW5nIHN5c3RlbXMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDIuMDAjUmFpbHdheSBzaWduYWxpbmcgc3lzdGVtcyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wMy4wMCNNYXJpbmUgc2lnbmFsaW5nIHN5c3RlbXMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDQuMDAjVHJhZmZpYyBzaWduYWxzIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjA1LjAwI1BhcmtpbmcgbWV0ZXJzIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjA2LjAwI1Nub3cgb3IgaWNlIG1lbHRlciM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wNy4wMCNCYXJyaWVyIHRhcGUjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDguMDAjVHJhZmZpYyBvciBmbG9vciBjb25lcyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wOS4wMCNTcGVlZCBzdG9wcGVycyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNi4wMC4wMCNXYXRlciBzYWZldHkjNDYuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTYuMDEuMDAjUm9wZSBmbG9hdCBsaW5lcyM0Ni4xNi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNi4wMi4wMCNMaWZlIHJpbmdzIzQ2LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE2LjAzLjAwI1Bvb2wgYWxhcm1zIzQ2LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE2LjA0LjAwI0xpZmUgdmVzdHMgb3IgcHJlc2VydmVycyM0Ni4xNi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4wMC4wMC4wMCNTZWN1cml0eSBzdXJ2ZWlsbGFuY2UgYW5kIGRldGVjdGlvbiM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wMC4wMCNMb2NrcyBhbmQgc2VjdXJpdHkgaGFyZHdhcmUjNDYuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDEuMDAjUGFkbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDIuMDAjQ2FibGUgbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDMuMDAjTG9jayBzZXRzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjA0LjAwI1B1c2hidXR0b24gbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDUuMDAjS2V5cyBvciBhY2Nlc3NvcmllcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wNi4wMCNTYWZlcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wNy4wMCNTZWN1cml0eSBiYXJzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjA4LjAwI051bWJlciBsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wOS4wMCNLZXkgY2FiaW5ldHMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMTAuMDAjVGltZSBsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4xMS4wMCNMb2Nrb3V0IGRldmljZXMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMTIuMDAjSW5zdHJ1bWVudCBsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4xMy4wMCNMb2NraW5nIGNhbSM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4xNC4wMCNTZWN1cml0eSBjaGFpbnMgb3IgYWNjZXNzb3JpZXMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDAuMDAjU3VydmVpbGxhbmNlIGFuZCBkZXRlY3Rpb24gZXF1aXBtZW50IzQ2LjE3LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjAyLjAwI1NhZmV0eSBob3JucyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wMy4wMCNDbG9jayB0aW1lcnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDQuMDAjQWxhcm0gc3lzdGVtcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wNS4wMCNEb29yIGNoaW1lcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wNi4wMCNTaXJlbnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDcuMDAjQnV6emVycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wOC4wMCNNb3Rpb24gZGV0ZWN0b3JzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjA5LjAwI0NvbnZleCBzZWN1cml0eSBtaXJyb3JzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjEwLjAwI1NlY3VyaXR5IGNhbWVyYXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTEuMDAjVmlkZW8gaWRlbnRpZmljYXRpb24gc3lzdGVtcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xMi4wMCNWaWRlbyBtb25pdG9ycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xMy4wMCNHYXMgZGV0ZWN0b3JzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjE0LjAwI1N1cnZlaWxsYW5jZSBjYW1lcmFzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjE1LjAwI0xpZ2h0IGVuaGFuY2luZyBjYW1lcmFzIG9yIHZpc2lvbiBkZXZpY2VzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjE2LjAwI1JhZGFyIGRldGVjdG9ycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xNy4wMCNEb29yIGV5ZXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTguMDAjRG9vciBiZWxscyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4wMC4wMC4wMCNQZXJzb25hbCBzYWZldHkgYW5kIHByb3RlY3Rpb24jNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDAuMDAjU2FmZXR5IGFwcGFyZWwjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDEuMDAjUHJvdGVjdGl2ZSBhcHJvbnMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDIuMDAjQnVsbGV0IHByb29mIHZlc3RzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjAzLjAwI1Byb3RlY3RpdmUgY292ZXJhbGxzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA0LjAwI1Byb3RlY3RpdmUgZ2xvdmVzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA1LjAwI1Byb3RlY3RpdmUga25lZSBwYWRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA2LjAwI1Byb3RlY3RpdmUgcG9uY2hvcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wNy4wMCNTYWZldHkgdmVzdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDguMDAjRmlyZSByZXRhcmRhbnQgYXBwYXJlbCM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wOS4wMCNIYXphcmRvdXMgbWF0ZXJpYWwgcHJvdGVjdGl2ZSBhcHBhcmVsIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjEwLjAwI0ZpcmUgcmV0YXJkYW50IGdsb3ZlcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xMS4wMCNIYXphcmRvdXMgbWF0ZXJpYWwgcHJvdGVjdGl2ZSBnb29kcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xMi4wMCNDbGVhbnJvb20gYXBwYXJlbCM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xMy4wMCNDbGVhbnJvb20gZ2xvdmVzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE0LjAwI0VsYm93IHByb3RlY3RvcnMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTUuMDAjSW5zZWN0aWNpZGUgcHJvdGVjdGl2ZSBjbG90aGluZyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xNi4wMCNTYWZldHkgc2xlZXZlcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xNy4wMCNJbnN1bGF0ZWQgb3IgZmxvdGF0aW9uIHN1aXRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE4LjAwI0hlYXQgcmVzaXN0YW50IGNsb3RoaW5nIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE5LjAwI1NhZmV0eSBoYXJuZXNzZXMgb3IgYmVsdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjAuMDAjTGVnIHByb3RlY3RvcnMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjEuMDAjUmFkaWF0aW9uIHByb3RlY3Rpb24gY2xvdGhpbmcgb3IgY29hdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjIuMDAjU2FmZXR5IGhvb2RzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjIzLjAwI0luc3VsYXRlZCBjbG90aGluZyBmb3IgY29sZCBlbnZpcm9ubWVudHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjQuMDAjUGVyc29uYWwgZmxvdGF0aW9uIGRldmljZXMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjUuMDAjUHJvdGVjdGl2ZSByYWlud2VhciBvciB3ZXQgZW52aXJvbm1lbnQgYXBwYXJlbCM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yNi4wMCNQcm90ZWN0aXZlIHNoaXJ0cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yNy4wMCNQcm90ZWN0aXZlIHBhbnRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjI4LjAwI1Byb3RlY3RpdmUgZnJvY2sjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjkuMDAjSW5zdWxhdGVkIGNsb3RoaW5nIGZvciBjb2xkIGVudmlyb25tZW50cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4zMC4wMCNQcm90ZWN0aXZlIGZpbmdlciBjb3RzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjMxLjAwI1JlZmxlY3RpdmUgc3VzcGVuZGVycyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4zMi4wMCNMYWIgY29hdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDAuMDAjU2FmZXR5IGZvb3R3ZWFyIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjAxLjAwI0ZpcmUgcmV0YXJkYW50IGZvb3R3ZWFyIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjAyLjAwI0hhemFyZG91cyBtYXRlcmlhbCBwcm90ZWN0aXZlIGZvb3R3ZWFyIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjAzLjAwI0NsZWFucm9vbSBmb290d2VhciM0Ni4xOC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNi4wNC4wMCNTYWZldHkgYm9vdHMjNDYuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDUuMDAjU2FmZXR5IHNob2VzIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjA2LjAwI0Zvb3R3ZWFyIGNvdmVycyM0Ni4xOC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNy4wMC4wMCNGYWNlIGFuZCBoZWFkIHByb3RlY3Rpb24jNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDEuMDAjSGFyZCBoYXRzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjAyLjAwI0ZhY2lhbCBzaGllbGRzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjAzLjAwI1dlbGRpbmcgbWFza3MjNDYuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDQuMDAjU2FmZXR5IGhlbG1ldHMjNDYuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDUuMDAjTW90b3JjeWNsZSBoZWxtZXRzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjA2LjAwI0hlbG1ldCBwYXJ0cyBvciBhY2Nlc3NvcmllcyM0Ni4xOC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOC4wMC4wMCNWaXNpb24gcHJvdGVjdGlvbiBhbmQgYWNjZXNzb3JpZXMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDEuMDAjRXlld2VhciBob2xkZXJzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjAyLjAwI1NhZmV0eSBnbGFzc2VzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjAzLjAwI0V5ZSBzaGllbGRzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjA0LjAwI0dvZ2dsZXMjNDYuMTguMTguMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDUuMDAjVmlkZW8gZGlzcGxheSBmaWx0ZXJzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjA2LjAwI0xlbnMgY2xlYW5lciM0Ni4xOC4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOS4wMC4wMCNIZWFyaW5nIHByb3RlY3RvcnMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTkuMDEuMDAjRWFyIHBsdWdzIzQ2LjE4LjE5LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE5LjAyLjAwI0VhciBtdWZmcyM0Ni4xOC4xOS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMC4wMC4wMCNSZXNwaXJhdG9yeSBwcm90ZWN0aW9uIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjAxLjAwI01hc2tzIzQ2LjE4LjIwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjAyLjAwI1Jlc3BpcmF0b3JzIzQ2LjE4LjIwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjAzLjAwI0dhcyBtYXNrcyM0Ni4xOC4yMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMC4wNC4wMCNSZXNwaXJhdGlvbiBhaXIgc3VwcGx5aW5nIHNlbGYgY29udGFpbmVkIGJyZWF0aGluZyBhcHBhcmF0dXMgKFNDQkEpIzQ2LjE4LjIwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjA1LjAwI01hc2sgZmlsdGVycyM0Ni4xOC4yMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wMC4wMCNBbnRpIHN0YXRpYyBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjAxLjAwI0FudGlzdGF0aWMgd3Jpc3Qgc3RyYXBzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjAyLjAwI0hlZWwgZ3JvdW5kaW5nIHN0cmFwcyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wMy4wMCNHcm91bmRpbmcgaGFyZHdhcmUjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDQuMDAjQW50aSBzdGF0aWMgZmxvb3IgbWF0cyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wNS4wMCNBbnRpIHN0YXRpYyB3b3JrdGFibGUgbWF0cyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wNi4wMCNBbnRpc3RhdGljIGJlbHRzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjA3LjAwI0FudGlzdGF0aWMgbWFpbnRlbmFuY2Uga2l0cyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wOC4wMCNBbnRpc3RhdGljIHRvZSBzdHJhcHMjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDAuMDAjRXJnb25vbWljIHN1cHBvcnQgYWlkcyM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wMS4wMCNCYWNrIHN1cHBvcnQgYmVsdHMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDIuMDAjRWxib3cgc3VwcG9ydHMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDMuMDAjQmFjayBzdXBwb3J0IHJlc3RzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA0LjAwI1dyaXN0IGJyYWNlcyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wNS4wMCNGb290IHJlc3RzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA2LjAwI1dyaXN0IHJlc3RzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA3LjAwI0Fua2xlIHN1cHBvcnRzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA4LjAwI1Nob2UgaW5zb2xlcyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wMC4wMCNGYWxsIHByb3RlY3Rpb24jNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjMuMDEuMDAjTGlmZWxpbmVzIG9yIGxpZmVsaW5lIGVxdWlwbWVudCM0Ni4xOC4yMy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wMi4wMCNGYWxsIHByb3RlY3Rpb24gbGFueWFyZCM0Ni4xOC4yMy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wMy4wMCNTYWZldHkgaGFybmVzcyB3aW5kZXJzIzQ2LjE4LjIzLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIzLjA0LjAwI0FuY2hvcmFnZSBjb25uZWN0b3IjNDYuMTguMjMuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjMuMDUuMDAjU2VsZiByZXRyYWN0aW5nIGxhbnlhcmQjNDYuMTguMjMuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjQuMDAuMDAjRGVjb250YW1pbmF0aW9uIGFpZHMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjQuMDEuMDAjRGVjb250YW1pbmF0aW9uIHNob3dlciM0Ni4xOC4yNC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yNS4wMC4wMCNQZXJzb25hbCBzYWZldHkgZGV2aWNlcyBvciB3ZWFwb25zIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjI1LjAxLjAwI1JlcGVsbGVudHMgZm9yIGNhbmluZSBhdHRhY2tzIzQ2LjE4LjI1LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjAwLjAwLjAwI0ZpcmUgcHJvdGVjdGlvbiM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNS4wMC4wMCNGaXJlIHByZXZlbnRpb24jNDYuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTUuMDEuMDAjU21va2UgZGV0ZWN0b3JzIzQ2LjE5LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE1LjAyLjAwI0hlYXQgZGV0ZWN0b3JzIzQ2LjE5LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE1LjAzLjAwI0ZpcmUgcmVzaXN0YW50IGNvYXRpbmdzIG9yIHB1dHRpZXMgb3Igc2VhbGFudHMjNDYuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDAuMDAjRmlyZSBmaWdodGluZyBlcXVpcG1lbnQjNDYuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDEuMDAjRmlyZSBleHRpbmd1aXNoZXJzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjAyLjAwI0ZpcmUgc3ByaW5rbGVyIHN5c3RlbXMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDMuMDAjRmlyZSBob3NlcyBvciBub3p6bGVzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjA0LjAwI0ZpcmUgYmxhbmtldHMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDUuMDAjRmlyZSBzdXBwcmVzc2lvbiBoYW5kIHRvb2xzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjA2LjAwI0ZpcmUgc3VwcHJlc3Npb24gZm9hbSBvciBzaW1pbGFyIGNvbXBvdW5kcyM0Ni4xOS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wNy4wMCNGaXJlIGJyZWF0aGluZyBhcHBhcmF0dXMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMDAuMDAuMDAuMDAjQ2xlYW5pbmcgRXF1aXBtZW50IGFuZCBTdXBwbGllcyM0Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMC4wMC4wMC4wMCNXYXRlciBhbmQgd2FzdGV3YXRlciB0cmVhdG1lbnQgc3VwcGx5IGFuZCBkaXNwb3NhbCM0Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wMC4wMCNXYXRlciB0cmVhdG1lbnQgYW5kIHN1cHBseSBlcXVpcG1lbnQjNDcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDEuMDAjQWN0aXZhdGVkIGNhcmJvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDIuMDAjQW1tb25pYSByZW1vdmFsIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wMy4wMCNDYXJib24gZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDQuMDAjQmFjdGVyaWFsIHJlbW92YWwgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjA1LjAwI0NobG9yaW5lIGhhbmRsaW5nIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wNi4wMCNDb3Jyb3Npb24gY29udHJvbCBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDcuMDAjR3JpdCBjaGFtYmVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wOC4wMCNEZXNhbGluYXRpb24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjA5LjAwI0ZsdW9yaWRhdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTAuMDAjSXJvbiByZW1vdmFsIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xMS4wMCNJb24gZXhjaGFuZ2UgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjEyLjAwI01peGVycyBvciBhZ2l0YXRvcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTMuMDAjT3h5Z2VuIGdlbmVyYXRvcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTQuMDAjV2F0ZXIgcHVyaWZpY2F0aW9uIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xNi4wMCNUdXJiaWRpbWV0ZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjE3LjAwI1VsdHJhdmlvbGV0IGRpc2luZmVjdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTguMDAjV2F0ZXIgY29uZGl0aW9uZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjE5LjAwI1dhdGVyIHNvZnRlbmluZyBhY2Nlc3NvcmllcyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yMS4wMCNVbHRyYWZpbHRyYXRpb24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjIyLjAwI1BhY2thZ2VkIHdhdGVyIHRyZWF0bWVudCBzeXN0ZW1zIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjIzLjAwI0NvbGxlY3Rpb24gdGFua3MjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjQuMDAjU2x1ZGdlIG9yIHNld2FnZSBjb21wb3N0aW5nIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yNS4wMCNEZXdhdGVyaW5nIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yNi4wMCNTbHVkZ2UgcGVsbGV0aXplcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjcuMDAjU2x1ZGdlIHNocmVkZGVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yOC4wMCNXYXRlciB0cmVhdG1lbnQgZHJ5ZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjI5LjAwI0luY2luZXJhdG9ycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zMC4wMCNPZG9yIGNvbnRyb2wgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjMxLjAwI1NlcHRpYyB0YW5rcyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zMi4wMCNTZXR0bGluZyB0YW5rcyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zMy4wMCNMaWZ0IHN0YXRpb25zIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjM0LjAwI1Nld2FnZSBkaXN0cmlidXRvcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzUuMDAjU2x1ZGdlIGRpc3Bvc2FsIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zNi4wMCNTbHVkZ2UgY29sbGVjdG9ycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zNy4wMCNTbHVkZ2UgY29uZGl0aW9uaW5nIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zOC4wMCNTbHVkZ2Ugb3Igc2V3YWdlIGRpZ2VzdGVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zOS4wMCNTbHVkZ2Ugb3Igc2V3YWdlIHJlbW92YWwgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjAwLjAwI1dhdGVyIHRyZWF0bWVudCBjb25zdW1hYmxlcyM0Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wMS4wMCNBbGdhZWNpZGVzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjAyLjAwI0FudGlzY2FsYW50cyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wMy4wMCNEZXNjYWxlcnMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDQuMDAjQm9pbGVyIGZlZWQgY2hlbWljYWxzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjA1LjAwI0JhY3RlcmlhbCByZW1vdmFsIGNoZW1pY2FscyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wNi4wMCNDb3Jyb3Npb24gY29udHJvbCBjaGVtaWNhbHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDcuMDAjT2RvciBjb250cm9sIGNoZW1pY2FscyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wOC4wMCNGbG9jY3VsZW50cyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wOS4wMCNNaWNyb2Jpb2NpZGVzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjEwLjAwI1dhdGVyIHNvZnRlbmluZyBjb21wb3VuZHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMTEuMDAjRGVtdWxzaWZpZXJzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjEyLjAwI1BvbHllbGVjdHJvbHl0ZXMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMDAuMDAuMDAjSW5kdXN0cmlhbCBsYXVuZHJ5IGFuZCBkcnkgY2xlYW5pbmcgZXF1aXBtZW50IzQ3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjAwLjAwI1dhc2hpbmcgYW5kIGRyeWluZyBlcXVpcG1lbnQjNDcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTUuMDEuMDAjTGF1bmRyeSB0eXBlIGNvbWJpbmVkIHdhc2hpbmcgb3IgZHJ5aW5nIG1hY2hpbmVzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjAyLjAwI0xhdW5kcnkgdHlwZSB3YXNoaW5nIG1hY2hpbmVzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjAzLjAwI0Nsb3RoZXMgZHJ5ZXJzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjA0LjAwI0xhdW5kcnkgdHlwZSBkcnlpbmcgbWFjaGluZXMjNDcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTUuMDUuMDAjTGF1bmRyeSBlcXVpcG1lbnQgc3RhbmRzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE2LjAwLjAwI0lyb25pbmcgZXF1aXBtZW50IzQ3LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjExLjE2LjAxLjAwI0lyb25pbmcgbWFjaGluZXMgb3IgcHJlc3NlcyM0Ny4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNi4wMi4wMCNGb2xkaW5nIG1hY2hpbmVzIzQ3LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE2LjAzLjAwI1N0ZWFtIHByZXNzaW5nIG1hY2hpbmVzIzQ3LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE3LjAwLjAwI0RyeSBjbGVhbmluZyBlcXVpcG1lbnQjNDcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTcuMDEuMDAjRHJ5IGNsZWFuaW5nIG1hY2hpbmVzIzQ3LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjAwLjAwLjAwI0phbml0b3JpYWwgZXF1aXBtZW50IzQ3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE1LjAwLjAwI0phbml0b3IgY2FydHMgYW5kIGFjY2Vzc29yaWVzIzQ3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE1LjAxLjAwI0phbml0b3IgY2FydHMjNDcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTUuMDIuMDAjSmFuaXRvciBjYXJ0IGFjY2Vzc29yaWVzIzQ3LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjAwLjAwI0Zsb29yIG1hY2hpbmVzIGFuZCBhY2Nlc3NvcmllcyM0Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wMi4wMCNWYWN1dW0gY2xlYW5lcnMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDMuMDAjRmxvb3IgcG9saXNoZXJzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA0LjAwI1dldCBvciBkcnkgY29tYmluYXRpb24gdmFjdXVtIGNsZWFuZXJzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA1LjAwI0Zsb29yIHNjcnViYmVycyM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wNi4wMCNDYXJwZXQgc3dlZXBlcnMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDcuMDAjVmFjdXVtIGNsZWFuZXIgc3VwcGxpZXMgb3IgYWNjZXNzb3JpZXMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDguMDAjRmxvb3IgbWFjaGluZSBwYWRzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA5LjAwI0NhcnBldCBjbGVhbmluZyBlcXVpcG1lbnQjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMTAuMDAjRmxvb3Igd2FzaGluZyBtYWNoaW5lIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjAwLjAwI1dhc3RlIGNvbnRhaW5lcnMgYW5kIGFjY2Vzc29yaWVzIzQ3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjAxLjAwI1RyYXNoIGJhZ3MjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDIuMDAjV2FzdGUgY29udGFpbmVycyBvciByaWdpZCBsaW5lcnMjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDMuMDAjU21va2luZyB1cm5zIG9yIGFjY2Vzc29yaWVzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjA0LjAwI1dhc3RlIGNvbnRhaW5lciBsaWRzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjA1LjAwI1VybiBzYW5kIGJhZ3MjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDYuMDAjQXNoIHRyYXlzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjA3LjAwI01vdGlvbiBzaWNrbmVzcyBiYWdzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjAwLjAwI0NsZWFuaW5nIGVxdWlwbWVudCM0Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wMS4wMCNDbGVhbmluZyBkdXN0ZXJzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjAyLjAwI0xpbnQgcmVtb3ZlcnMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDMuMDAjU3F1ZWVnZXMgb3Igd2FzaGVycyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wNC4wMCNDbGVhbmluZyBwYWlscyBvciBidWNrZXRzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA1LjAwI1ByZXNzdXJlIG9yIHN0ZWFtIGNsZWFuZXJzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA2LjAwI01vcCB3cmluZ2VyIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA3LjAwI0RyYWluIG9yIHRvaWxldCBwbHVuZ2VyIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA4LjAwI0RyYWluIG9yIHBpcGUgY2xlYW5pbmcgZXF1aXBtZW50IzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA5LjAwI0RlZ3JlYXNpbmcgcGFucyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4xMC4wMCNDbGVhbmluZyByYWcgZGlzcGVuc2VyIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjExLjAwI0R1Y3QgY2xlYW5pbmcgbWFjaGluZXMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMDAuMDAuMDAjQ2xlYW5pbmcgYW5kIGphbml0b3JpYWwgc3VwcGxpZXMjNDcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTUuMDAuMDAjQ2xlYW5pbmcgcmFncyBhbmQgY2xvdGhzIGFuZCB3aXBlcyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNS4wMS4wMCNSYWdzIzQ3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE1LjAyLjAwI1dpcGVzIzQ3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjAwLjAwI0Jyb29tcyBhbmQgbW9wcyBhbmQgYnJ1c2hlcyBhbmQgYWNjZXNzb3JpZXMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDEuMDAjRHVzdCBicnVzaGVzIG9yIHBhbnMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDIuMDAjU2NvdXJpbmcgcGFkcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wMy4wMCNTcG9uZ2VzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjA0LjAwI0Jyb29tcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wNS4wMCNDbGVhbmluZyBicnVzaGVzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjA2LjAwI0R1c3QgbW9wcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wNy4wMCNXZXQgbW9wcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wOC4wMCNUb2lsZXQgYnJ1c2hlcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wOS4wMCNCcm9vbSBvciBtb3AgaGFuZGxlcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4xMC4wMCNGbG9vciBmaW5pc2ggYXBwbGljYXRvciM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4xMS4wMCNUcmFzaCBwaWNrZXIjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMTIuMDAjUmVwbGFjZW1lbnQgcnViYmVycyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4xMy4wMCNNb3Agb3IgYnJvb20gaG9sZGVyIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjE0LjAwI0NsZWFuaW5nIGVxdWlwbWVudCBjbGFtcHMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDAuMDAjUmVzdHJvb20gc3VwcGxpZXMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDEuMDAjUGFwZXIgdG93ZWwgZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wMi4wMCNTYW5pdGFyeSBnb29kcyBkaXNwZW5zZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjAzLjAwI1Nhbml0YXJ5IHdhc3RlIHJlY2VwdGFjbGVzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA0LjAwI0luc3RpdHV0aW9uYWwgc29hcCBvciBsb3Rpb24gZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wNS4wMCNVcmluYWwgb3IgdG9pbGV0IGFjY2Vzc29yaWVzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA2LjAwI0FpciBmcmVzaGVuZXIgZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wNy4wMCNJbnN0aXR1dGlvbmFsIGhhbmQgZHJ5ZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA4LjAwI0JhdGhyb29tIHRpc3N1ZSBkaXNwZW5zZXIjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDkuMDAjRmFjaWFsIHRpc3N1ZSBkaXNwZW5zZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjEwLjAwI1RvaWxldCB0aXNzdWUgZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4xMS4wMCNDbGVhbmVyIGRpc3BlbnNlciM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wMC4wMCNDbGVhbmluZyBhbmQgZGlzaW5mZWN0aW5nIHNvbHV0aW9ucyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wMS4wMCNGbG9vciBjbGVhbmVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wMi4wMCNGbG9vciB3YXhlcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wMy4wMCNIb3VzZWhvbGQgZGlzaW5mZWN0YW50cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wNC4wMCNBbW1vbmlhcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wNS4wMCNHZW5lcmFsIHB1cnBvc2UgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDYuMDAjRnVybml0dXJlIHBvbGlzaCBvciB3YXhlcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wNy4wMCNCbGVhY2hlcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wOC4wMCNEcnkgZ2VybWljaWRhbCM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wOS4wMCNTaG9lIGNsZWFuaW5nIG9yIHBvbGlzaGluZyBwcm9kdWN0cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xMC4wMCNEaXNod2FzaGluZyBwcm9kdWN0cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xMS4wMCNMYXVuZHJ5IHByb2R1Y3RzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjEyLjAwI0FpciBmcmVzaGVuZXIjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTMuMDAjU2NyZWVuIGNsZWFuZXIjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTQuMDAjTWV0YWwgY2xlYW5lcnMgb3IgcG9saXNoZXMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTUuMDAjRHJhaW4gY2xlYW5lciM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xNi4wMCNEZW9kb3JpemVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xNy4wMCNIb3VzZWhvbGQgb3IgYXV0b21vdGl2ZSBwcm90ZWN0YW50cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xOC4wMCNBaXIgc2FuaXRpemVyIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjE5LjAwI0NhdXN0aWMgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjAuMDAjUGV0cm9sZXVtIGRlcml2YXRpdmUgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjEuMDAjRGVncmVhc2luZyBjb21wb3VuZHMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjIuMDAjQ2FyYm9uIHJlbW92aW5nIGNvbXBvdW5kcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4yMy4wMCNEZWljZXJzIGFuZCBkZWZyb3N0ZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjI0LjAwI0dsYXNzIG9yIHdpbmRvdyBjbGVhbmVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4yNS4wMCNDb250YWN0IHN1cmZhY2UgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDAuMDAjQWJzb3JiZW50cyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wMS4wMCNNYXRzIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjAyLjAwI0dyYW51bGFyIGFic29yYmVudCM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wMy4wMCNQbHVnZ2luZyBjb21wb3VuZCM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wNC4wMCNBYnNvcmJlbnQgc29ja3MjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDUuMDAjU3BpbGwga2l0cyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wNi4wMCNQYW5zIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjA3LjAwI0Fic29yYmVudCBib29tcyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wOC4wMCNBYnNvcmJlbnQgcGlsbG93cyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4yMC4wMC4wMCNNYXRzIzQ3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjIxLjAwLjAwI0NsZWFuaW5nIGtpdHMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMjEuMDEuMDAjSW5kdXN0cmlhbCBjbGVhbmluZyBraXRzIzQ3LjEzLjIxLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjIxLjAyLjAwI0dlbmVyYWwgcHVycG9zZSBjbGVhbmluZyBraXRzIzQ3LjEzLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjAwLjAwLjAwLjAwI1NlcnZpY2UgSW5kdXN0cnkgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIzQ4LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjAwLjAwLjAwI0luc3RpdHV0aW9uYWwgZm9vZCBzZXJ2aWNlcyBlcXVpcG1lbnQjNDguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDAuMDAjQ29va2luZyBhbmQgd2FybWluZyBlcXVpcG1lbnQjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDEuMDAjQ29tbWVyY2lhbCB1c2UgYmFpbiBtYXJpZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDIuMDAjQ29tbWVyY2lhbCB1c2UgYmFyYmVxdWUgb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDMuMDAjQ29tbWVyY2lhbCB1c2UgYnJvaWxlcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDQuMDAjQ29tbWVyY2lhbCB1c2UgY2hhcmNvYWwgZ3JpbGxzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjA1LjAwI0NvbW1lcmNpYWwgdXNlIGNvZmZlZSBvciBpY2VkIHRlYSBtYWtlcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDYuMDAjQ29tbWVyY2lhbCB1c2UgY29mZmVlIHdhcm1lcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDcuMDAjQ29tbWVyY2lhbCB1c2UgY29udmVjdGlvbiBvdmVucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wOC4wMCNDb21tZXJjaWFsIHVzZSBjb252ZXllciB0b2FzdGVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wOS4wMCNDb21tZXJjaWFsIHVzZSBkZWVwIGZyeWVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xMC4wMCNDb21tZXJjaWFsIHVzZSBmb29kIHdhcm1lcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTEuMDAjQ29tbWVyY2lhbCB1c2UgZ3JpZGRsZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTIuMDAjQ29tbWVyY2lhbCB1c2UgZ3JpbGxzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjEzLjAwI0NvbW1lcmNpYWwgdXNlIGhlYXQgbGFtcHMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTQuMDAjQ29tbWVyY2lhbCB1c2UgaGlnaCBwcmVzc3VyZSBzdGVhbWVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xNS4wMCNDb21tZXJjaWFsIHVzZSBob3QgZG9nIGdyaWxscyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xNi4wMCNDb21tZXJjaWFsIHVzZSBtaWNyb3dhdmUgb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTcuMDAjQ29tbWVyY2lhbCB1c2Ugb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTguMDAjQ29tbWVyY2lhbCB1c2UgcGFzdGEgY29va2VycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xOS4wMCNDb21tZXJjaWFsIHVzZSBwaXp6YSBvdmVucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yMC4wMCNDb21tZXJjaWFsIHVzZSBwb3Bjb3JuIG1hY2hpbmVzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjIxLjAwI0NvbW1lcmNpYWwgdXNlIHJhbmdlcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yMi4wMCNDb21tZXJjaWFsIHVzZSByb3Rpc3NlcmllcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yMy4wMCNDb21tZXJjaWFsIHVzZSBzbW9rZXJzIG9yIHNtb2tlIG92ZW5zIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI0LjAwI0NvbW1lcmNpYWwgdXNlIHN0ZWFtZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI1LjAwI0NvbW1lcmNpYWwgdXNlIHRvYXN0ZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI2LjAwI0NvbW1lcmNpYWwgdXNlIHdhZmZsZSBpcm9ucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yNy4wMCNCYXJiZWN1ZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjguMDAjQ29tbWVyY2lhbCB1c2UgY3JlcGUgbWFjaGluZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjkuMDAjUHJlc3N1cmUgY29va2VycyBvciBwcmVzc3VyZSBmcnllcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMzAuMDAjQ29tbWVyY2lhbCB1c2UgcmljZSBjb29rZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjMxLjAwI0NvbW1lcmNpYWwgc2FsbW9uIHBvYWNoZXJzIG9yIGtldHRsZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDAuMDAjRm9vZCBwcmVwYXJhdGlvbiBlcXVpcG1lbnQjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDEuMDAjQ29tbWVyY2lhbCB1c2UgYmxlbmRlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDIuMDAjQ29tbWVyY2lhbCB1c2UgZWxlY3RyaWMgY2FuIG9wZW5lcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDMuMDAjQ29tbWVyY2lhbCB1c2UgZm9vZCBjaG9wcGVycyBvciBjdWJlcnMgb3IgZGljZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjA0LjAwI0NvbW1lcmNpYWwgdXNlIGNvZmZlZSBncmluZGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wNS4wMCNDb21tZXJjaWFsIHVzZSBmb29kIGdyaW5kZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjA2LjAwI0NvbW1lcmNpYWwgdXNlIGdyYXRlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDcuMDAjQ29tbWVyY2lhbCB1c2UganVpY2VycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wOC4wMCNDb21tZXJjaWFsIHVzZSBtaXhlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDkuMDAjQ29tbWVyY2lhbCB1c2UgcGFzdGEgbWFjaGluZXMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTAuMDAjQ29tbWVyY2lhbCB1c2UgcGVlbGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xMS4wMCNDb21tZXJjaWFsIHVzZSBzY2FsZXMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTIuMDAjQ29tbWVyY2lhbCB1c2UgZm9vZCBwcm9jZXNzb3JzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjEzLjAwI0NvbW1lcmNpYWwgdXNlIGRvdWdoIG1hY2hpbmVzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjE0LjAwI0NvbW1lcmNpYWwgdXNlIGljaW5nIHNldHMgb3IgYmFncyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xNS4wMCNDb21tZXJjaWFsIHVzZSBkaXNod2FzaGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xNi4wMCNDb21tZXJjaWFsIHVzZSBicmVhZCBzbGljZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjE3LjAwI0NvbW1lcmNpYWwgdXNlIHBsYXN0aWMgc2hvdmVscyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wMC4wMCNGb29kIGFuZCBiZXZlcmFnZSBkaXNwZW5zaW5nIGVxdWlwbWVudCM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wMS4wMCNDYXJib25hdGVkIGJldmVyYWdlIGRpc3BlbnNlciM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wMi4wMCNOb24gY2FyYm9uYXRlZCBiZXZlcmFnZSBkaXNwZW5zZXIjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDMuMDAjTWlsayBkaXNwZW5zZXJzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA0LjAwI1N5cnVwIHB1bXBzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA1LjAwI0NhcHB1Y2Npbm8gb3IgZXNwcmVzc28gbWFjaGluZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDYuMDAjTWlsa3NoYWtlIG1hY2hpbmVzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA3LjAwI1NvZnQgc2VydmUgbWFjaGluZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDguMDAjU2x1c2ggbWFjaGluZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDkuMDAjSWNlIGRpc3BlbnNlcnMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMTAuMDAjRHJpbmtpbmcgZm91bnRhaW5zIG9yIGJ1YmJsZXJzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjExLjAwI0JvdHRsZWQgd2F0ZXIgZGlzcGVuc2VycyBvciBhY2Nlc3NvcmllcyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4xMi4wMCNDdXAgZGlzcGVuc2VyIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjEzLjAwI0NvY2t0YWlsIHNoYWtlcnMgb3IgYWNjZXNzb3JpZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMTQuMDAjSG90IHdhdGVyIGRpc3BlbnNlciM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wMC4wMCNDb29rd2FyZSBhbmQga2l0Y2hlbiB0b29scyM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wMS4wMCNDb21tZXJjaWFsIHVzZSBjdXRsZXJ5IzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjAyLjAwI0NvbW1lcmNpYWwgdXNlIG1vbGRzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjAzLjAwI0NvbW1lcmNpYWwgdXNlIHNjb29wcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wNC4wMCNDb21tZXJjaWFsIHVzZSBtZWFzdXJpbmcgY3VwcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wNS4wMCNDb21tZXJjaWFsIHVzZSBtaXhpbmcgYm93bHMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDYuMDAjQ29tbWVyY2lhbCB1c2UgY2FrZSBvciBwaWUgcGFucyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wNy4wMCNDb21tZXJjaWFsIHVzZSBwaXp6YSBwYW5zIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjA4LjAwI0NvbW1lcmNpYWwgdXNlIHNhdWNlIG9yIHNhdXRlIHBhbnMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDkuMDAjQ29tbWVyY2lhbCB1c2Ugc3RvY2sgb3Igc2F1Y2UgcG90cyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xMC4wMCNDb21tZXJjaWFsIHVzZSBwb3Qgb3IgcGFuIGNvdmVycyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xMS4wMCNDb21tZXJjaWFsIHVzZSByb2xsaW5nIHBpbnMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTIuMDAjQ29tbWVyY2lhbCB1c2Ugc3RyYWluZXJzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjEzLjAwI0NvbW1lcmNpYWwgdXNlIHdoaXNrcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xNC4wMCNDb21tZXJjaWFsIHVzZSB3b2tzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjE1LjAwI0NvbW1lcmNpYWwgdXNlIGxhZGxlcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xNi4wMCNDb21tZXJjaWFsIHVzZSBjdXRsZXJ5IHBvdWNoIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjE3LjAwI0Nha2UgZGVjb3JhdGluZyBlcXVpcG1lbnQgb3IgbW91bGRzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjAwLjAwI1RhYmxldG9wIGFuZCBzZXJ2aW5nIGVxdWlwbWVudCM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wMS4wMCNGb29kIHNlcnZpY2UgZGlubmVyd2FyZSM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wMi4wMCNGb29kIHNlcnZpY2UgZmxhdHdhcmUjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDMuMDAjRm9vZCBzZXJ2aWNlIGdsYXNzZXMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDQuMDAjRm9vZCBzZXJ2aWNlIHN0ZW13YXJlIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjA1LjAwI0Zvb2Qgc2VydmljZSBjdXBzIG9yIG11Z3MjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDYuMDAjRm9vZCBzZXJ2aWNlIHNlcnZpbmcgYmFza2V0cyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wNy4wMCNGb29kIHNlcnZpY2UgcGl0Y2hlcnMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDguMDAjRm9vZCBzZXJ2aWNlIGNoYWZlcnMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDkuMDAjRm9vZCBzZXJ2aWNlIGNvZmZlZSBvciB0ZWEgcG90cyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xMC4wMCNGb29kIHNlcnZpY2Ugc291cCBjcm9ja3MjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTEuMDAjRm9vZCBzZXJ2aWNlIGljZSBidWNrZXRzIG9yIHdpbmUgY29vbGVycyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xMi4wMCNGb29kIHNlcnZpY2UgY29uZGltZW50IGRpc3BlbnNlcnMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTMuMDAjRm9vZCBzZXJ2aWNlIHB1bmNoIGJvd2xzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjE0LjAwI0Zvb2Qgc2VydmljZSB3aW5lIGNhcmFmZXMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTUuMDAjRm9vZCBzZXJ2aWNlIHRyYXlzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjE2LjAwI0Zvb2Qgc2VydmljZSBuYXBraW4gZGlzcGVuc2VycyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xNy4wMCNGb29kIHNlcnZpY2UgZm9uZHVlIHBvdHMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDAuMDAjUmVzdGF1cmFudCBmdXJuaXR1cmUjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDEuMDAjUmVzdGF1cmFudCBjaGFpcnMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDIuMDAjQm9vdGhzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjAzLjAwI1NhbGFkIGJhcnMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDQuMDAjVGFibGV0b3BzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjA1LjAwI1Jlc3RhdXJhbnQgb3IgYmFyIHN0b29scyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wNi4wMCNQZXJtYW5lbnQgYmFycyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wNy4wMCNQb3J0YWJsZSBiYXJzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjAwLjAwI1N0b3JhZ2UgYW5kIGhhbmRsaW5nIGVxdWlwbWVudCM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wMS4wMCNEaXNwbGF5IGNhc2VzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjAyLjAwI0hlYXRlZCBkaXNwbGF5IGNhc2VzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjAzLjAwI1JlZnJpZ2VyYXRlZCBkaXNwbGF5IGNhc2VzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjA0LjAwI0ljZSBjcmVhbSBkaXNwbGF5IGNhc2VzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjA1LjAwI0dsYXNzIGNoaWxsaW5nIGVxdWlwbWVudCM0OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wNi4wMCNDb29sIGNvbnRhaW5lcnMjNDguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMDAuMDAuMDAjVmVuZGluZyBtYWNoaW5lcyM0OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMC4wMC4wMCNMaXF1aWQgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMC4wMS4wMCNNYWNoaW5lcyBkaXNwZW5zaW5nIHNpbmdsZSBzZXJ2aW5ncyB3aXRoIGN1cHMjNDguMTEuMTAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTAuMDIuMDAjTWFjaGluZXMgZGlzcGVuc2luZyBidWxrIHF1YW50aXRpZXMjNDguMTEuMTAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDAuMDAjUGllY2UgYW5kIHBhcnQgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wMS4wMCNCb3R0bGUgb3IgY2FuIHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDIuMDAjR3VtYmFsbCBjYW5keSBvciBjaGlsZHJlbnMgbm92ZWx0aWVzIG1hY2hpbmVzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjAzLjAwI1NuYWNrIG9yIHNtYWxsIHBhY2thZ2UgZ29vZHMgZGlzcGxheSBtYWNoaW5lcyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wNC4wMCNBIGxhIGNhcnRlIGZvb2RzIHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDUuMDAjRnJvemVuIGNvbmZlY3Rpb25zIG1hY2hpbmVzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjA2LjAwI1BlcnNvbmFsIGFjY29tbW9kYXRpb24gaXRlbSBkaXNwZW5zZXJzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjA3LjAwI0NpZ2FyZXR0ZSBtYWNoaW5lcyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMi4wMC4wMCNQcmVwYXJlZCB0byBvcmRlciBmb29kIHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTIuMDEuMDAjRnJlbmNoIGZyeSB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjEyLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEyLjAyLjAwI1BvcGNvcm4gdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4xMi4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMy4wMC4wMCNTZXJ2aWNlIGFuZCB0aWNrZXQgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMy4wMS4wMCNUaWNrZXQgZGlzcGVuc2luZyBtYWNoaW5lcyM0OC4xMS4xMy4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMy4wMi4wMCNJbnN1cmFuY2UgcG9saWN5IHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMTMuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTMuMDMuMDAjU3RhbXAgbWFjaGluZXMjNDguMTEuMTMuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTQuMDAuMDAjQ3VycmVuY3kgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xNC4wMS4wMCNBdXRvbWF0aWMgdGVsbGVyIG1hY2hpbmVzIChBVE1zKSM0OC4xMS4xNC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xNC4wMi4wMCNCaWxsIHRvIGNvaW4gY2hhbmdlcnMjNDguMTEuMTQuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTQuMDMuMDAjRm9yZWlnbiBjdXJyZW5jeSBleGNoYW5nZSBtYWNoaW5lcyM0OC4xMS4xNC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xNC4wNC4wMCNFbGVjdHJvbmljIGZ1bmRzIHRyYW5zZmVyIHBvaW50IG9mIHNhbGUgZXF1aXBtZW50IzQ4LjExLjE0LjAwLjAwCi11bnNwc2M3IzQ4LjEyLjAwLjAwLjAwI0dhbWJsaW5nIG9yIHdhZ2VyaW5nIGVxdWlwbWVudCM0OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMS4wMC4wMCNDb2luIG9wZXJhdGVkIGdhbWJsaW5nIG1hY2hpbmVzIzQ4LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjExLjAxLjAwI1Bva2VyIG9yIHNsb3QgbWFjaGluZXMjNDguMTIuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTIuMDAuMDAjR2FtYmxpbmcgdGFibGVzIGFuZCBnYW1lcyM0OC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMi4wMS4wMCNSb3VsZXR0ZSB3aGVlbHMjNDguMTIuMTIuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTIuMDIuMDAjQ2FyZCB0YWJsZXMjNDguMTIuMTIuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTMuMDAuMDAjR2FtYmxpbmcgbWFuYWdlbWVudCBhbmQgbmV0d29ya2VkIHdhZ2VyaW5nIHN5c3RlbXMjNDguMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTMuMDEuMDAjVGFibGUgZ2FtYmxpbmcgbWFuYWdlbWVudCBzeXN0ZW1zIzQ4LjEyLjEzLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjEzLjAyLjAwI05ldHdvcmtlZCB3YWdlcmluZyBnYW1lcyM0OC4xMi4xMy4wMC4wMAotdW5zcHNjNyM0OS4wMC4wMC4wMC4wMCNTcG9ydHMgYW5kIFJlY3JlYXRpb25hbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIGFuZCBBY2Nlc3NvcmllcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMC4wMC4wMC4wMCNDb2xsZWN0aWJsZXMgYW5kIGF3YXJkcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wMC4wMCNBcnQjNDkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDEuMDAjUGFpbnRpbmdzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjAyLjAwI1NjdWxwdHVyZXMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDMuMDAjU3RhdHVhcnkjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDQuMDAjUG9ydHJhaXRzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA1LjAwI0RyYXdpbmdzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA2LjAwI1BpY3R1cmVzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA3LjAwI0xpdGhvZ3JhcGhzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA4LjAwI1Bvc3RlcnMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDkuMDAjRGVjb3JhdGl2ZSBwb3QjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMTAuMDAjU2Nyb2xscyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4xMS4wMCNQaG90b2dyYXBocyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4xMi4wMCNGbG93ZXIgdmFzZXMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDAuMDAjQ29sbGVjdGlibGVzIzQ5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjAxLjAwI0FudGlxdWVzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjAyLjAwI1NvdXZlbmlycyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wMy4wMCNNaW50IGNvaW4gY29sbGVjdGlvbnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDQuMDAjU3RhbXAgY29sbGVjdGlvbnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDUuMDAjQW50aXF1ZSBydWdzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA2LjAwI0RpZ2dpbmdzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA3LjAwI0NvbWljIGJvb2sgY29sbGVjdGlvbnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDguMDAjQW50aXF1ZSBtdXNpY2FsIGluc3RydW1lbnRzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA5LjAwI09ybmFtZW50cyBvciBkZWNvcmF0aW9ucyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4xMC4wMCNLZXkgY2hhaW5zIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjExLjAwI0NoYXJtcyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4xMi4wMCNIb2xvZ3JhbXMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMTMuMDAjR2xhc3MgY3J5c3RhbHMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDAuMDAjQXdhcmRzIzQ5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjAxLjAwI01lZGFscyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wMi4wMCNUcm9waGllcyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wMy4wMCNNZWRhbGxpb25zIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA0LjAwI1BsYXF1ZXMjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDUuMDAjQ2VydGlmaWNhdGVzIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA2LjAwI1Bob3RvIGF3YXJkIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA3LjAwI0FjaGlldmVtZW50IGNlcnRpZmljYXRlIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA4LjAwI0Nyb3ducyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4wMC4wMC4wMCNNdXNpY2FsIGluc3RydW1lbnRzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE1LjAwLjAwI0tleWJvYXJkIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE1LjAxLjAwI011c2ljYWwgb3JnYW5zIzQ5LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE1LjAyLjAwI0FjY29yZGlvbnMjNDkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTUuMDMuMDAjUGlhbm9zIzQ5LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjAwLjAwI0JyYXNzIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjAxLjAwI1RydW1wZXRzIzQ5LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjAyLjAwI1Ryb21ib25lcyM0OS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNi4wMy4wMCNTb3VzYXBob25lcyM0OS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNi4wNC4wMCNTYXhvcGhvbmVzIzQ5LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjA1LjAwI1doaXN0bGUjNDkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDAuMDAjV29vZHdpbmQgaW5zdHJ1bWVudHMjNDkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDEuMDAjQ2xhcmluZXRzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjAyLjAwI09ib2VzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjAzLjAwI011c2ljYWwgZmx1dGVzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjA0LjAwI1BpY2NvbG9lcyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wNS4wMCNNdXNpY2FsIGNvcm5ldHMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDYuMDAjQmFncGlwZXMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDcuMDAjSGFybW9uaWNhcyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wOC4wMCNLYXpvb3MjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDAuMDAjU3RyaW5nIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjAxLjAwI0hhcnBzaWNob3JkcyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wMi4wMCNDbGF2aWNob3JkcyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wMy4wMCNHdWl0YXJzIzQ5LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjA0LjAwI1Zpb2xpbnMjNDkuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDUuMDAjSGFycHMjNDkuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDYuMDAjQmFuam9lcyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wMC4wMCNQZXJjdXNzaW9uIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjAxLjAwI0N5bWJhbHMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDIuMDAjQmVsbHMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDMuMDAjVGFtYm91cmluZXMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDQuMDAjQ2FzdGFuZXRzIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjA1LjAwI0RydW1zIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjA2LjAwI1h5bG9waG9uZXMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDcuMDAjQm9kaHJhbiM0OS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wMC4wMCNNdXNpY2FsIGluc3RydW1lbnQgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjAxLjAwI01ldHJvbm9tZXMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDIuMDAjUmVlZHMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDMuMDAjSW5zdHJ1bWVudCBzdHJpbmdzIG9yIHBpY2tzIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjA0LjAwI1R1bmluZyBwaW5zIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjA1LjAwI011c2ljYWwgaW5zdHJ1bWVudCBzdGFuZHMgb3Igc2hlZXQgaG9sZGVycyM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wNi4wMCNBY2Nlc3NvcmllcyBmb3Igc3RyaW5nZWQgaW5zdHJ1bWVudHMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDcuMDAjUGVyY3Vzc2lvbiBpbnN0cnVtZW50IGFjY2Vzc29yeSM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wOC4wMCNNdXNpYyBib3hlcyBvciBtZWNoYW5pc21zIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjEyLjAwLjAwLjAwI0NhbXBpbmcgYW5kIG91dGRvb3IgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wMC4wMCNDYW1waW5nIGFuZCBvdXRkb29yIGVxdWlwbWVudCM0OS4xMi4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wMS4wMCNUYXJwYXVsaW5zIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjAyLjAwI1NsZWVwaW5nIHBhZHMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDMuMDAjVGVudHMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDQuMDAjU2xlZXBpbmcgYmFncyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wNS4wMCNJY2UgY2hlc3RzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjA2LjAwI1RlbnQgcmVwYWlyIGtpdHMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDcuMDAjUG5ldW1hdGljIG1hdHRyZXNzZXMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDguMDAjTW9zcXVpdG8gbmV0cyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wOS4wMCNDYW1waW5nIG9yIG91dGRvb3Igc3RvdmVzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjEwLjAwI0RyaW5rIGNvb2xlcnMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTYuMDAuMDAjQ2FtcGluZyBmdXJuaXR1cmUjNDkuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTYuMDEuMDAjQ2FtcGluZyBjaGFpcnMgb3Igc3Rvb2xzIzQ5LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE2LjAyLjAwI0NhbXBpbmcgdGFibGVzIzQ5LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE2LjAzLjAwI0NhbXBpbmcgY290cyM0OS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4wMC4wMC4wMCNGaXNoaW5nIGFuZCBodW50aW5nIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wMC4wMCNGaXNoaW5nIHRhY2tsZSM0OS4xMy4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wMS4wMCNGaXNoaW5nIHJvZHMjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDIuMDAjRmlzaGluZyBsaW5lIzQ5LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE1LjAzLjAwI0Zpc2hpbmcgcmVlbHMjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDQuMDAjRmlzaGluZyBsdXJlcyM0OS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wNS4wMCNGaXNoaW5nIGJhaXQjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDYuMDAjRmlzaGluZyB3ZWlnaHRzIG9yIHNpbmtlcnMjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDAuMDAjSHVudGluZyBwcm9kdWN0cyM0OS4xMy4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wMS4wMCNBbmltYWwgY2FsbHMjNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDIuMDAjU3BvcnRpbmcgZGVjb3lzIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjAzLjAwI1Nwb3J0aW5nIHRyYXBzIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjA0LjAwI1Nwb3J0aW5nIHNob3RndW5zIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjA1LjAwI1Nwb3J0aW5nIHJpZmxlcyM0OS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wNi4wMCNTcG9ydGluZyBhbW11bml0aW9uIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjA3LjAwI0d1biBiYXJyZWwjNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMDAuMDAuMDAjV2F0ZXJzcG9ydHMgZXF1aXBtZW50IzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjAwLjAwI1NjdWJhIGFuZCBzbm9ya2VsaW5nIGdlYXIjNDkuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDEuMDAjQm91eWFuY3kgY29tcGVuc2F0b3JzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjAyLjAwI1NjdWJhIHRhbmtzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjAzLjAwI1NjdWJhIHJlZ3VsYXRvcnMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDQuMDAjRGl2aW5nIGluc3RydW1lbnRzIG9yIGFjY2Vzc29yaWVzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjA1LjAwI01hc2tzIG9yIGZpbnMgb3Igc25vcmtlbHMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDYuMDAjV2V0c3VpdHMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDcuMDAjRHJ5c3VpdHMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDAuMDAjU3VyZiBhbmQgc3dpbSBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzQ5LjE0LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjAyLjAwI1dha2Vib2FyZHMgb3Iga25lZWJvYXJkcyBvciBib29naWVib2FyZHMjNDkuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDMuMDAjV2F0ZXIgc2tpcyBvciBhY2Nlc3NvcmllcyM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wNC4wMCNXaW5kc3VyZmluZyBlcXVpcG1lbnQjNDkuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDUuMDAjU3VyZmJvYXJkcyM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wNi4wMCNTd2ltIGdvZ2dsZXMgb3Igc3dpbSBmaW5zIzQ5LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjA3LjAwI1BhcmFzYWlsaW5nIGVxdWlwbWVudCM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNS4wMC4wMC4wMCNXaW50ZXIgc3BvcnRzIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNS4wMC4wMCNTa2lpbmcgYW5kIHNub3dib2FyZGluZyBlcXVpcG1lbnQjNDkuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTUuMDEuMDAjU2tpIGJvb3RzIzQ5LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjAyLjAwI1NraXMjNDkuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTUuMDMuMDAjU2tpIHBvbGVzIzQ5LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjA0LjAwI0JpbmRpbmdzIzQ5LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjA1LjAwI1Nub3dib2FyZHMjNDkuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTYuMDAuMDAjU2thdGluZyBhbmQgaWNlIGhvY2tleSBlcXVpcG1lbnQjNDkuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTYuMDEuMDAjSG9ja2V5IHB1Y2tzIzQ5LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE2LjAyLjAwI0ljZSBza2F0ZXMjNDkuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTYuMDMuMDAjSG9ja2V5IHN0aWNrcyM0OS4xNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4wMC4wMC4wMCNGaWVsZCBhbmQgY291cnQgc3BvcnRzIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wMC4wMCNGaWVsZCBzcG9ydHMgZXF1aXBtZW50IzQ5LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjAxLjAwI0Zvb3RiYWxsIGJsb2NraW5nIHNsZWRzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjAyLjAwI0Jhc2ViYWxsIGdsb3ZlcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wMy4wMCNCYXNlYmFsbHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDQuMDAjRm9vdGJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA1LjAwI1NvY2NlciBiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wNi4wMCNCYXNlYmFsbCBiYXRzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA3LjAwI0Jhc2ViYWxsIGJhc2VzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA4LjAwI1BpdGNoaW5nIG1hY2hpbmVzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA5LjAwI1NvZnRiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xMC4wMCNGb290YmFsbCB0YWNrbGluZyBkdW1taWVzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjExLjAwI0xhY3Jvc3NlIHN0aWNrcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xMi4wMCNMYWNyb3NzZSBiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xMy4wMCNGaWVsZCBob2NrZXkgc3RpY2tzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE0LjAwI0ZpZWxkIGhvY2tleSBiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xNS4wMCNUZWFtIGhhbmRiYWxsIGJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE2LjAwI1RlYW0gaGFuZGJhbGwgc2Nob29sIHNldHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTcuMDAjQmFzZWJhbGwgb3Igc29mdGJhbGwgcHJvdGVjdGl2ZSBnZWFyIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE4LjAwI0Jhc2ViYWxsIGJhdHRpbmcgYWlkcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xOS4wMCNCYXNlYmFsbCBiYWNrc3RvcHMgb3IgZmVuY2VzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjIwLjAwI1NvZnRiYWxsIGJhdHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjEuMDAjU29mdGJhbGwgZ2xvdmVzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjIyLjAwI0Zvb3RiYWxsIGtpY2tpbmcgdGVlcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yMy4wMCNGbGFnIGZvb3RiYWxsIGdlYXIjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjQuMDAjU29jY2VyIGZpZWxkIG1hcmtpbmcgZXF1aXBtZW50IzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjI1LjAwI1NvY2NlciBwcm90ZWN0aXZlIGVxdWlwbWVudCM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yNi4wMCNTb2NjZXIgdHJhaW5pbmcgYWlkcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wMC4wMCNSYWNxdWV0IGFuZCBjb3VydCBzcG9ydHMgZXF1aXBtZW50IzQ5LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjAxLjAwI1JhY3F1ZXRiYWxsIHJhY2tldHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDIuMDAjQmFkbWludG9uIHJhY2tldHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDMuMDAjQmFza2V0YmFsbHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDQuMDAjVGVubmlzIGJhbGxzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjA1LjAwI1JhY3F1ZXQgYmFsbHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDYuMDAjU3F1YXNoIGJhbGxzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjA3LjAwI1Rlbm5pcyByYWNxdWV0cyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wOC4wMCNWb2xsZXliYWxscyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wOS4wMCNCYWRtaW50b24gYmlyZGllcyBvciBzaHV0dGxlY29ja3MjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTAuMDAjU3F1YXNoIHJhY3F1ZXRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjExLjAwI1Rlbm5pcyB0cmFpbmluZyBhaWRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjEyLjAwI1Rlbm5pcyBjb3VydCBlcXVpcG1lbnQjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTMuMDAjVm9sbGV5YmFsbCBzdG9yYWdlIGZvciBiYWxscyBvciBuZXRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjE0LjAwI1ZvbGxleWJhbGwgZ3ltbmFzaXVtIHN0YW5kYXJkcyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xNS4wMCNCYXNrZXRiYWxsIGNvbXBsZXRlIGdhbWUgc3lzdGVtcyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xNi4wMCNGbG9vciBob2NrZXkgcHJvdGVjdGl2ZSBlcXVpcG1lbnQjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTcuMDAjVGV0aGVyIHBvbGVzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjE4LjAwI1RldGhlciBiYWxscyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wMC4wMCNUcmFjayBzcG9ydHMgZXF1aXBtZW50IzQ5LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjAxLjAwI0phdmVsaW5zIzQ5LjE2LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjAyLjAwI0p1bXBpbmcgYmFycyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wMy4wMCNEaXNjdXMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDQuMDAjU2hvdHB1dHMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDUuMDAjVmF1bHRpbmcgcG9sZXMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDYuMDAjSHVyZGxlcyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wNy4wMCNCYXRvbnMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMDAuMDAuMDAjR3ltbmFzdGljcyBhbmQgYm94aW5nIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wMC4wMCNHeW1uYXN0aWNzIGVxdWlwbWVudCM0OS4xNy4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wMS4wMCNHeW1uYXN0aWMgYmFycyBvciBiZWFtcyM0OS4xNy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wMi4wMCNHeW1uYXN0aWMgcm9wZXMgb3IgcmluZ3Mgb3IgY2xpbWJpbmcgYWNjZXNzb3JpZXMjNDkuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTUuMDMuMDAjR3ltbmFzdGljIHZhdWx0aW5nIGVxdWlwbWVudCM0OS4xNy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wNC4wMCNHeW1uYXN0aWMgdHJhbXBvbGluZXMjNDkuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTUuMDUuMDAjQmFsYW5jZSBlcXVpcG1lbnQjNDkuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTYuMDAuMDAjQm94aW5nIGVxdWlwbWVudCM0OS4xNy4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNi4wMS4wMCNCb3hpbmcgcmluZ3MjNDkuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTYuMDIuMDAjUHVuY2hpbmcgYmFncyM0OS4xNy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNi4wMy4wMCNCb3hpbmcgZ2xvdmVzIzQ5LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjAwLjAwLjAwI1RhcmdldCBhbmQgdGFibGUgZ2FtZXMgYW5kIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wMC4wMCNUYWJsZSBnYW1lcyBhbmQgZXF1aXBtZW50IzQ5LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjAxLjAwI0JpbGxpYXJkIHRhYmxlcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wMi4wMCNQb29sIGN1ZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDMuMDAjU2h1ZmZsZWJvYXJkIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjA0LjAwI1BpbmJhbGwgZ2FtZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDUuMDAjQmlsbGlhcmQgYmFsbHMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDYuMDAjQWlyIGhvY2tleSB0YWJsZXMgb3IgYWNjZXNzb3JpZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDcuMDAjVGVubmlzIHRhYmxlcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wOC4wMCNUYWJsZSB0ZW5uaXMgcGFkZGxlcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wOS4wMCNUYWJsZSB0ZW5uaXMgYmFsbHMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMTAuMDAjRm9vc2JhbGwgdGFibGVzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjExLjAwI0Zvb3NiYWxscyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4xMi4wMCNGb29zYmFsbCByZXBsYWNlbWVudCBwbGF5ZXJzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjEzLjAwI0JpbGxpYXJkIGN1ZSB0aXBzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjE0LjAwI0JpbGxpYXJkIGNoYWxrIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjE1LjAwI0JpbGxpYXJkIHJhY2tzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjAwLjAwI1RhcmdldCBnYW1lcyBhbmQgZXF1aXBtZW50IzQ5LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjAxLjAwI0FyY2hlcnkgdGFyZ2V0cyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wMi4wMCNBcmNoZXJ5IGJvd3MjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDMuMDAjQXJjaGVyeSBhcnJvd3MjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDQuMDAjRGFydHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDUuMDAjRGFydCBib2FyZHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDYuMDAjVHJhcHNob290aW5nIGVxdWlwbWVudCM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wNy4wMCNUaHJvd2luZyB0YXJnZXRzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjA4LjAwI0FyY2hlcnkgYm93IHN0cmluZ3MjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDkuMDAjQXJjaGVyeSBnbG92ZXMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMTAuMDAjQXJjaGVyeSBhcm0gZ3VhcmRzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjExLjAwI0FyY2hlcnkgdGFyZ2V0IHN0YW5kcyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4xMi4wMCNBcmNoZXJ5IGJhY2tzdG9wcyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4wMC4wMC4wMCNGaXRuZXNzIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4wMC4wMCNBZXJvYmljIHRyYWluaW5nIGVxdWlwbWVudCM0OS4yMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4wMS4wMCNUcmVhZG1pbGxzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjAyLjAwI1N0YWlyIGNsaW1iZXJzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjAzLjAwI1N0YXRpb25hcnkgYmljeWNsZXMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMDQuMDAjUm93aW5nIG1hY2hpbmVzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjEyLjAwI0p1bXAgcm9wZXMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMTMuMDAjRXhlcmNpc2UgdHJhbXBvbGluZXMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMTQuMDAjRXhlcmNpc2UgYmFsbHMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMTUuMDAjU3RlcCBhZXJvYmljIGVxdWlwbWVudCM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wMC4wMCNXZWlnaHQgYW5kIHJlc2lzdGFuY2UgdHJhaW5pbmcgZXF1aXBtZW50IzQ5LjIwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjAxLjAwI0R1bWJiZWxscyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wMi4wMCNCYXJiZWxscyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wMy4wMCNMb3dlciBib2R5IHJlc2lzdGFuY2UgbWFjaGluZXMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDQuMDAjV2VpZ2h0IGJlbmNoZXMgb3IgcmFja3MjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDUuMDAjVXBwZXIgYm9keSByZXNpc3RhbmNlIG1hY2hpbmVzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA2LjAwI0ZpdG5lc3Mgd2VpZ2h0cyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wNy4wMCNQaWxhdGVzIG1hY2hpbmVzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA4LjAwI0dyaXAgc3RyZW5ndGhlbmVyIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA5LjAwI1Jlc2lzdGFuY2UgYmFuZHMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMTAuMDAjUmVzaXN0YW5jZSB0dWJlcyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4wMC4wMC4wMCNPdGhlciBzcG9ydHMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDAuMDAjR29sZiBlcXVpcG1lbnQjNDkuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDEuMDAjR29sZiBiYWdzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjAyLjAwI0dvbGYgYmFsbHMjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDMuMDAjR29sZiBjbHVicyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wNC4wMCNHb2xmIHRlZXMjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDUuMDAjR29sZiBjbHViIGhlYWQgY292ZXJzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjA2LjAwI0dvbGYgZ2xvdmVzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjA3LjAwI0Rpdm90IGZpeGVycyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNy4wMC4wMCNCb3dsaW5nIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzQ5LjIxLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE3LjAxLjAwI0Jvd2xpbmcgZXF1aXBtZW50IzQ5LjIxLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE3LjAyLjAwI0Jvd2xpbmcgc3VwcGxpZXMjNDkuMjEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTcuMDMuMDAjQm93bGluZyBhY2Nlc3NvcmllcyM0OS4yMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wMC4wMCNQaHlzaWNhbCBlZHVjYXRpb24gY2xhc3Nyb29tIGVxdWlwbWVudCM0OS4yMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wMS4wMCNQYXJhY2h1dGUgZXF1aXBtZW50IzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjAyLjAwI0h1bGEgaG9vcHMgb3IgaG9vcCBlcXVpcG1lbnQjNDkuMjEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDMuMDAjT3JpZW50ZWVyaW5nIGVxdWlwbWVudCM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wNC4wMCNUZWFtIGlkZW50aWZpY2F0aW9uIG1hdGVyaWFscyBvciBtYXJrZXJzIzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjA1LjAwI0xhbnlhcmRzIzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjA2LjAwI1BoeXNpY2FsIGVkdWNhdGlvbiBlcXVpcG1lbnQgc3RvcmFnZSM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wNy4wMCNQaHlzaWNhbCBlZHVjYXRpb24gYXNzZXNzbWVudCB0b29scyM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMi4wMC4wMC4wMCNTcG9ydHMgYWNjZXNzb3JpZXMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDAuMDAjU3BvcnQgYWNjZXNzb3JpZXMjNDkuMjIuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDEuMDAjU3BvcnQgc2NvcmVib2FyZHMjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDIuMDAjU3BvcnQgZ29hbHMjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDMuMDAjU3BvcnQgc2FmZXR5IGVxdWlwbWVudCBvdGhlciB0aGFuIGhlYWRnZWFyIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjA0LjAwI1Nwb3J0IHNhZmV0eSBoZWFkZ2VhciM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wNS4wMCNTcG9ydCBuZXRzIG9yIG5ldHRpbmcjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDYuMDAjU3BvcnQgbWF0cyBvciBwYWRkaW5nIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjA3LjAwI0Jhc2tldGJhbGwgYmFja2JvYXJkcyM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wOC4wMCNCYXNrZXRiYWxsIGhvb3AjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDkuMDAjUm9sbGVyIHNrYXRlcyBvciByb2xsZXIgYmxhZGVzIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjAwLjAwLjAwI1RveXMgYW5kIGdhbWVzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjAwLjAwI1RveXMjNDkuMjMuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDEuMDAjTXVzaWNhbCB0b3lzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjAyLjAwI0VkdWNhdGlvbmFsIHRveXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDMuMDAjVG95IGJhbGxvb25zIG9yIGJhbGxzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA0LjAwI0RvbGxzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA1LjAwI0RvbGwgaG91c2VzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA2LjAwI1N0dWZmZWQgYW5pbWFscyBvciBwdXBwZXRzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA3LjAwI1BsYXlob3VzZXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDguMDAjQnVpbGRpbmcgYmxvY2tzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA5LjAwI1JpZGluZyB0b3lzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjEwLjAwI1B1bGwgdG95cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xMS4wMCNDaGlsZHJlbnMgc2NpZW5jZSBraXRzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjEyLjAwI1RveSB2ZWhpY2xlcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xMy4wMCNUb3kgdHJhaW5zIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE0LjAwI0luZmxhdGFibGUgdG95cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xNS4wMCNEb2xsIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE2LjAwI1lvIHlvcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xNy4wMCNLaXRlcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xOC4wMCNQb2dzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE5LjAwI0thbGVpZG9zY29wZXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMjAuMDAjUG9tIHBvbXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMjEuMDAjUGluYXRhcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4yMi4wMCNCb29tZXJhbmdzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjIzLjAwI0ZseWluZyBkaXNjcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4yNC4wMCNUb3kgcGFpbHMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDAuMDAjR2FtZXMjNDkuMjMuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDEuMDAjRWR1Y2F0aW9uYWwgZ2FtZXMjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDIuMDAjQm9hcmQgZ2FtZXMjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDMuMDAjUGxheWluZyBjYXJkcyM0OS4yMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wNC4wMCNWaWRlbyBnYW1lcyM0OS4yMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wNS4wMCNQdXp6bGVzIzQ5LjIzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE2LjA2LjAwI0RpY2UjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMDAuMDAuMDAjUmVjcmVhdGlvbiBhbmQgcGxheWdyb3VuZCBhbmQgc3dpbW1pbmcgYW5kIHNwYSBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjAwLjAwI1BsYXlncm91bmQgZXF1aXBtZW50IzQ5LjI0LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjAxLjAwI1BsYXlncm91bmQgc3dpbmdzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjAyLjAwI1BsYXlncm91bmQgY2xpbWJpbmcgYXBwYXJhdHVzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjAzLjAwI1BsYXlncm91bmQgbWVycnkgZ28gcm91bmRzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA0LjAwI1BsYXlncm91bmQgc2xpZGVzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA1LjAwI1BsYXlncm91bmQgc2VlIHNhd3MjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDYuMDAjUGxheWdyb3VuZCB0dW5uZWxzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA3LjAwI1BsYXlncm91bmQgc2FuZGJveGVzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA4LjAwI1BsYXlncm91bmQgYmxlYWNoZXJzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA5LjAwI1dhbGwgY2xpbWJpbmcgZXF1aXBtZW50IzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjEwLjAwI1JvcGUgY2xpbWJpbmcgZXF1aXBtZW50IzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE2LjAwLjAwI1JlY3JlYXRpb25hbCBlcXVpcG1lbnQjNDkuMjQuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTYuMDEuMDAjQ3JvcXVldCBzZXRzIzQ5LjI0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE2LjAyLjAwI0xhd24gYm93bGluZyBlcXVpcG1lbnQjNDkuMjQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTYuMDMuMDAjSG9yc2VzaG9lIGVxdWlwbWVudCM0OS4yNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNi4wNC4wMCNMYXduIGRhcnRzIzQ5LjI0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjAwLjAwI1N3aW1taW5nIHBvb2wgYW5kIHNwYSBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQ5LjI0LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjAxLjAwI0RpdmluZyBib2FyZHMjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDIuMDAjUG9vbCBzbGlkZXMjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDMuMDAjU3BhIGJsb3dlciM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wNC4wMCNXYXRlciB0ZXN0IGtpdCBvciBzb2x1dGlvbnMjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDUuMDAjQXV0b21hdGljIHBvb2wgY2xlYW5lciM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wNi4wMCNTb2xhciBibGFua2V0IzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjA3LjAwI1Bvb2wgb3Igc3BhIGhlYXRlciM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wOC4wMCNPem9uZSBnZW5lcmF0b3IjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDkuMDAjU29sYXIgYmxhbmtldCByZWVscyM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNS4wMC4wMC4wMCNBcnRzIGFuZCBjcmFmdHMgc3VwcGxpZXMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDAuMDAjQXJ0IHN1cHBsaWVzIzQ5LjI1LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjAxLjAwI0FydCBwYWludHMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDIuMDAjTW9kZWxpbmcgY2xheSM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wMy4wMCNBcnQgcGFpbnRicnVzaGVzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA0LjAwI1BpY3R1cmUgb3IgcG9zdGVyIGZyYW1lcyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wNS4wMCNQaWN0dXJlIGFsYnVtcyBvciBvcmdhbml6ZXJzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA2LjAwI0N1dHRpbmcgbWF0cyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wNy4wMCNDYXJ2aW5nIGJvYXJkIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA4LjAwI1BhbGV0dGVzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA5LjAwI0dsaXR0ZXIjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMTAuMDAjQmVhZHMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMTEuMDAjRGVjb3JhdGl2ZSB0YXBlcyBvciB0d2lzdHMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDAuMDAjQ3JhZnQgc3VwcGxpZXMjNDkuMjUuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDEuMDAjTW9kZWwga2l0cyM0OS4yNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wMi4wMCNQb3R0ZXJzIHdoZWVscyM0OS4yNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wMy4wMCNEZWNvcmF0aXZlIGJ1dHRvbnMjNDkuMjUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDQuMDAjRGVjb3JhdGl2ZSBzaGFwZXMgb3Igc3RyaW5ncyM0OS4yNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wNS4wMCNDcmFmdCBraXRzIzQ5LjI1LjE2LjAwLjAwCi11bnNwc2M3IzUwLjAwLjAwLjAwLjAwI0Zvb2QgQmV2ZXJhZ2UgYW5kIFRvYmFjY28gUHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMDAuMDAuMDAjRnJ1aXRzIGFuZCB2ZWdldGFibGVzIGFuZCBudXRzIGFuZCBzZWVkcyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wMC4wMCNWZWdldGFibGVzIzUwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjAxLjAwI0JlYW5zIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjAyLjAwI1NwaW5hY2gjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDMuMDAjUG90YXRvZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDQuMDAjUGVhcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wNS4wMCNPbmlvbnMgb3Igb3RoZXIgYWxsaWFjZW91cyB2ZWdldGFibGVzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjA2LjAwI0xldHR1Y2UjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDcuMDAjQ2FiYmFnZSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wOC4wMCNTcXVhc2hlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wOS4wMCNZYW1zIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjEwLjAwI0NhcnJvdHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTEuMDAjUnV0YWJhZ2FzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjEyLjAwI0VnZ3BsYW50cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xMy4wMCNQZXBwZXJzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE0LjAwI1JodWJhcmIjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTUuMDAjRW5kaXZlIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE2LjAwI0FzcGFyYWd1cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xNy4wMCNBcnRpY2hva2VzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE4LjAwI1BhcnNuaXBzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE5LjAwI0NlbGVyeSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yMC4wMCNSYWRpc2hlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yMS4wMCNNdXNocm9vbXMgb3Igb3RoZXIgZWRpYmxlIGZ1bmdpIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjIyLjAwI0hvcnNlcmFkaXNoIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjIzLjAwI1R1cm5pcHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjQuMDAjTXVzdGFyZCBncmVlbnMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjUuMDAjS2FsZSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yNi4wMCNDb2xsYXJkcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yNy4wMCNCcnVzc2VsIHNwcm91dHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjguMDAjQnJvY2NvbGkjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjkuMDAjQ2F1bGlmbG93ZXJzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjMwLjAwI09rcmEjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzEuMDAjQ3VjdW1iZXJzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjMyLjAwI1RvbWF0b2VzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjMzLjAwI0JlZXRzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjM0LjAwI01hbmlvYyByb290cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zNS4wMCNMZW50aWxzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjM2LjAwI0Nvcm4jNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzcuMDAjUHVtcGtpbnMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzguMDAjRnJlc2ggdmVnZXRhYmxlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zOS4wMCNGcm96ZW4gdmVnZXRhYmxlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS40MC4wMCNTaGVsZiBzdGFibGUgdmVnZXRhYmxlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wMC4wMCNGcnVpdHMjNTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDEuMDAjTGltZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDIuMDAjTWFuZ29lcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wMy4wMCNHdWF2YXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDQuMDAjR3JhcGVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA1LjAwI0RhdGVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA2LjAwI0Fwcmljb3RzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA3LjAwI0JlcnJpZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDguMDAjUGVhY2hlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wOS4wMCNDaGVycmllcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xMC4wMCNCYW5hbmFzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjExLjAwI01lbG9ucyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xMi4wMCNQb21lZ3JhbmF0ZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTMuMDAjUGFwYXlhcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xNC4wMCNLaXdpcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xNS4wMCNMaWNoZWVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE2LjAwI1BlYXJzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE3LjAwI1BsdW1zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE4LjAwI0FwcGxlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xOS4wMCNQYXNzaW9uIGZydWl0IzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjIwLjAwI05lY3RhcmluZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjEuMDAjUGluZWFwcGxlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yMi4wMCNGaWdzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjIzLjAwI1RhbmdlbG9zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjI0LjAwI01hbmRhcmlucyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yNS4wMCNPcmFuZ2VzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjI2LjAwI1RhbmdlcmluZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjcuMDAjR3JhcGVmcnVpdCM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yOC4wMCNMZW1vbnMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjkuMDAjRHVyaWFucyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zMC4wMCNDb2NvbnV0cyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zMS4wMCNBdm9jYWRvcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zMi4wMCNRdWluY2VzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjMzLjAwI09saXZlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zNC4wMCNGcmVzaCBmcnVpdCM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zNS4wMCNGcm96ZW4gZnJ1aXQjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMzYuMDAjU2hlbGYgc3RhYmxlIGZydWl0IzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjAwLjAwI051dHMgYW5kIHNlZWRzIzUwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjAxLjAwI0NoZXN0bnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wMy4wMCNQZWNhbnMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDQuMDAjQnJhemlsIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDUuMDAjQ2FzaGV3cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wNi4wMCNBbG1vbmRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjA3LjAwI01hY2FkYW1pYSBudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjA4LjAwI0hhemVsbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wOS4wMCNQaW5lIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTAuMDAjUGlzdGFjaGlvcyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xMS4wMCNXYWxudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjEyLjAwI0JldGVsIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTMuMDAjUGVhbnV0cyBvciBncm91bmRudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjE0LjAwI01peGVkIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTUuMDAjTnV0IG1lYXQjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTYuMDAjV2hvbGUgbnV0cyBvciBzZWVkcyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xNy4wMCNTaGVsbGVkIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjExLjAwLjAwLjAwI01lYXQgYW5kIHBvdWx0cnkgcHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDAuMDAjTWVhdCBhbmQgcG91bHRyeSM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wMS4wMCNDaGlja2VuIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjAyLjAwI1R1cmtleSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wMy4wMCNEdWNrIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjA0LjAwI09zdHJpY2gjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDUuMDAjUGFydHJpZGdlIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjA2LjAwI0RvdmUjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDcuMDAjUGhlYXNhbnQjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDguMDAjUXVhaWwjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDkuMDAjR29vc2UjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMTAuMDAjRnJlc2ggbWVhdCBhbmQgcG91bHRyeSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4xMS4wMCNGcm96ZW4gbWVhdCBhbmQgcG91bHRyeSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4xMi4wMCNTaGVsZiBzdGFibGUgbWVhdCBhbmQgcG91bHRyeSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wMC4wMCNGcmVzaCBhbmQgZnJvemVuIHJlZCBtZWF0IGFuZCBieXByb2R1Y3RzIzUwLjExLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjAxLjAwI0JlZWYjNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDIuMDAjVmVhbCM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wMy4wMCNNdXR0b24jNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDQuMDAjTGFtYiM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wNS4wMCNCdWZmYWxvIzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjA2LjAwI0hvcnNlbWVhdCM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wNy4wMCNBc3Mgb3IgbXVsZSBvciBoaW5ueSBtZWF0IzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE3LjAwLjAwI0ZyZXNoIGFuZCBmcm96ZW4gcG9yayBhbmQgYnlwcm9kdWN0cyM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNy4wMS4wMCNQb3JrIzUwLjExLjE3LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjAwLjAwI0ZyZXNoIGFuZCBmcm96ZW4gb3JnYW4gbWVhdCBhbmQgYnlwcm9kdWN0cyM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wMS4wMCNPcmdhbiBtZWF0IzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjAyLjAwI0xpdmVyIzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjAzLjAwI0dpenphcmQjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDQuMDAjVHJpcGUjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDUuMDAjU3RvbWFjaCM1MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wNi4wMCNLaWRuZXkjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDcuMDAjQnJhaW5zIzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjAwLjAwI0RlbGljYXRlc3NlbiBtZWF0IHByb2R1Y3RzIzUwLjExLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjAxLjAwI1NhbGFtaSM1MC4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wMi4wMCNLYWJhbmEjNTAuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDMuMDAjUGFzdHJhbWkjNTAuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDQuMDAjUm9hc3QgYmVlZiM1MC4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wNS4wMCNDb3JuZWQgYmVlZiBvciBzaWx2ZXJzaWRlIzUwLjExLjE5LjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjA2LjAwI0ZyYW5rZnVydCBvciBob3QgZG9nIzUwLjExLjE5LjAwLjAwCi11bnNwc2M3IzUwLjExLjIwLjAwLjAwI1Byb2Nlc3NlZCBhbmQgcHJlcGFyZWQgbWVhdHMjNTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMjAuMDEuMDAjRnJlc2ggcHJvY2Vzc2VkIG9yIHByZXBhcmVkIG1lYXRzIzUwLjExLjIwLjAwLjAwCi11bnNwc2M3IzUwLjExLjIwLjAyLjAwI0Zyb3plbiBwcm9jZXNzZWQgb3IgcHJlcGFyZWQgbWVhdHMjNTAuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMjAuMDMuMDAjU2hlbGYgc3RhYmxlIHByb2Nlc3NlZCBvciBwcmVwYXJlZCBtZWF0cyM1MC4xMS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4wMC4wMC4wMCNTZWFmb29kIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjAwLjAwI0Zpc2gjNTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDEuMDAjTGVtb25maXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjAyLjAwI0RvZ2Zpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDMuMDAjR3JvdXBlciM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wNC4wMCNNYWhpIG1haGkjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDUuMDAjTW9ua2Zpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDYuMDAjUG9tcGFubyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wNy4wMCNCYXNzIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjA4LjAwI1NoYXJrIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjA5LjAwI1RpbGFwaWEjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTAuMDAjU3dvcmRmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjExLjAwI0FuY2hvdmllcyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xMi4wMCNDYXJwIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjEzLjAwI0NhdGZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTQuMDAjRWVsIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE1LjAwI1N0dXJnZW9uIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE2LjAwI1R1bmEjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTcuMDAjQ29kIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE4LjAwI0hhbGlidXQjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTkuMDAjSGFkZG9jayM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yMC4wMCNPY2VhbiBwZXJjaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yMS4wMCNPcmFuZ2Ugcm91Z2h5IzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjIyLjAwI1BhcnJvdCBmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjIzLjAwI1Bpa2UjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjQuMDAjUmVkIHNuYXBwZXIjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjUuMDAjUm9ja2Zpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjYuMDAjU21lbHQjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjcuMDAjU29sZSM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yOC4wMCNXaGl0aW5nIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjI5LjAwI1NhbG1vbiM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zMC4wMCNNYWNrZXJlbCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zMS4wMCNTYXJkaW5lcyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zMi4wMCNUcm91dCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zMy4wMCNTdXJpbWkjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzQuMDAjQmxhY2tmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjM1LjAwI0hlcnJpbmcjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzYuMDAjRnJlc2ggZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zNy4wMCNGcm96ZW4gZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zOC4wMCNTaGVsZiBzdGFibGUgZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zOS4wMCNGcmVzaCBmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjAwLjAwI1NoZWxsZmlzaCM1MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wMS4wMCNBYmFsb25lIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjAyLjAwI1NjYWxsb3BzIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjAzLjAwI0NsYW1zIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA0LjAwI0NyYWJzIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA1LjAwI0NvbmNoIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA2LjAwI0NyYXlmaXNoIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA3LjAwI0xvYnN0ZXIjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDguMDAjTXVzc2VscyM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wOS4wMCNPeXN0ZXJzIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjEwLjAwI1NocmltcCM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4xMS4wMCNGcmVzaCBzaGVsbGZpc2gjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMTIuMDAjRnJvemVuIHNoZWxsZmlzaCM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4xMy4wMCNTaGVsZiBzdGFibGUgc2hlbGxmaXNoIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjAwLjAwI0FxdWF0aWMgaW52ZXJ0ZWJyYXRlcyM1MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wMS4wMCNTcXVpZCM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wMi4wMCNPY3RvcHVzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjAzLjAwI0FuZW1vbmVzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjA0LjAwI1NlYSBjdWN1bWJlcnMjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDUuMDAjRnJlc2ggYXF1YXRpYyBpbnZlcnRlYnJhdGVzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjA2LjAwI0Zyb3plbiBhcXVhdGljIGludmVydGVicmF0ZXMjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDcuMDAjU2hlbGYgc3RhYmxlIGFxdWF0aWMgaW52ZXJ0ZWJyYXRlcyM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wMC4wMCNBcXVhdGljIHBsYW50cyM1MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wMS4wMCNTZWF3ZWVkcyM1MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wMi4wMCNGcmVzaCBhcXVhdGljIHBsYW50cyM1MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wMy4wMCNGcm96ZW4gYXF1YXRpYyBwbGFudHMjNTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTguMDQuMDAjU2hlbGYgc3RhYmxlIGFxdWF0aWMgcGxhbnRzIzUwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUwLjEzLjAwLjAwLjAwI0RhaXJ5IHByb2R1Y3RzIGFuZCBlZ2dzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjAwLjAwI0RhaXJ5IHByb2R1Y3RzIGFuZCBkYWlyeSBzdWJzdGl0dXRlcyM1MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wMS4wMCNDb2ZmZWUgY3JlYW1lciM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wMi4wMCNCdXR0ZXIjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDMuMDAjTWlsayM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wNC4wMCNTb2Z0IGNoZWVzZXMjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDUuMDAjWW9ndXJ0cyM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wNi4wMCNJY2UgY3JlYW1zIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjA3LjAwI1NvdXIgY3JlYW1zIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjA4LjAwI0hhcmQgY2hlZXNlcyM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wOS4wMCNCdXR0ZXJtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjEwLjAwI0luZmFudCBmb3JtdWxhIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjExLjAwI0N1c3RhcmQjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMTIuMDAjRXZhcG9yYXRlZCBtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjEzLjAwI1N3ZWV0ZW5lZCBjb25kZW5zZWQgbWlsayM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4xNC4wMCNQb3dkZXJlZCBtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjE1LjAwI0NyZWFtIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjE2LjAwI0xvbmcgbGlmZSBtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjAwLjAwI0VnZ3MgYW5kIGVnZyBzdWJzdGl0dXRlcyM1MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wMS4wMCNFZ2dzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjAyLjAwI0VnZyBzdWJzdGl0dXRlcyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wMy4wMCNNZXJpbmd1ZSBwb3dkZXJzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA0LjAwI0VnZyB3aGl0ZXMjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDUuMDAjRWdnIHlvbGtzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA2LjAwI0ZyZXNoIGVnZ3MjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDcuMDAjRWdnIHN1YnN0aXR1dGVzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA4LjAwI0VnZyB3aGl0ZXMgb3IgeW9sa3MjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDkuMDAjUHJlcGFyZWQgZWdncyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNy4wMC4wMCNNaWxrIGFuZCBidXR0ZXIgcHJvZHVjdHMjNTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTcuMDEuMDAjRnJlc2ggbWlsayBhbmQgYnV0dGVyIHByb2R1Y3RzIzUwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE3LjAyLjAwI1NoZWxmIHN0YWJsZSBtaWxrIGFuZCBidXR0ZXIgcHJvZHVjdHMjNTAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTguMDAuMDAjQ2hlZXNlIzUwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEzLjE4LjAxLjAwI05hdHVyYWwgY2hlZXNlIzUwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE4LjAyLjAwI1Byb2Nlc3NlZCBjaGVlc2UjNTAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTguMDMuMDAjSW1pdGF0aW9uIGNoZWVzZSM1MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNC4wMC4wMC4wMCNHcmFpbnMgYW5kIGNlcmVhbHMgYW5kIHRoZWlyIGZsb3VycyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wMC4wMCNHcmFpbnMgYW5kIGNlcmVhbHMjNTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDEuMDAjTWlsbGV0IzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjAyLjAwI0hvcHMjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDMuMDAjQnVja3doZWF0IzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjA0LjAwI1J5ZSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wNS4wMCNDb3JuIGNlcmVhbHMjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDYuMDAjU29yZ2h1bSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wNy4wMCNPYXRzIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjA4LjAwI1JpY2UjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDkuMDAjQmFybGV5IzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjEwLjAwI1doZWF0IzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjExLjAwI1Bhc3RhIG9yIG5vb2RsZSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4xMi4wMCNCcmFuIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjEzLjAwI3Nob3J0IGdyYWluIHJpY2UjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDAuMDAjRmxvdXJzIzUwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjAxLjAwI01pbGxldCBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wMi4wMCNPYXQgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDMuMDAjQmFybGV5IGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA0LjAwI1JpY2UgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDUuMDAjQnVja3doZWF0IGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA2LjAwI1J5ZSBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wNy4wMCNDb3JuIGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA4LjAwI1doZWF0IGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA5LjAwI1NlbGYgcmlzaW5nIGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjEwLjAwI0xvbmcgR3JhaW4gUmljZSM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4wMC4wMC4wMCNFZGlibGUgb2lscyBhbmQgZmF0cyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wMC4wMCNFZGlibGUgdmVnZXRhYmxlIGFuZCBwbGFudCBvaWxzIGFuZCBmYXRzIzUwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjAxLjAwI1NveWJlYW4gb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjAyLjAwI0Nvcm4gb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjAzLjAwI0Nhbm9sYSBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDQuMDAjU2VzYW1lIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wNS4wMCNQZWFudXQgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjA2LjAwI09saXZlIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wNy4wMCNQYWxtIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wOC4wMCNTYWZmbG93ZXIgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjA5LjAwI0Nhc3RvciBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMTAuMDAjU3VuZmxvd2VyIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4xMS4wMCNDb3R0b25zZWVkIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4xMi4wMCNDb2x6YSBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMTMuMDAjRWRpYmxlIHZlZ2V0YWJsZSBvciBwbGFudCBvaWxzIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjE0LjAwI0VkaWJsZSB2ZWdldGFibGUgb3IgcGxhbnQgZmF0cyM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wMC4wMCNFZGlibGUgYW5pbWFsIG9pbHMgYW5kIGZhdHMjNTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDEuMDAjTGFyZCM1MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wMi4wMCNUYWxsb3cjNTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDMuMDAjQ29kIGxpdmVyIG9pbCM1MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wNC4wMCNFZGlibGUgYW5pbWFsIG9pbHMjNTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDUuMDAjRWRpYmxlIGFuaW1hbCBmYXRzIzUwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjAwLjAwI09pbHMgYW5kIGZhdHMgYW5kIG90aGVyIzUwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjAxLjAwI1Nob3J0ZW5pbmdzIzUwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjAyLjAwI01hcmdhcmluZSM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wMy4wMCNMaW5zZWVkIG9pbCM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wNC4wMCNDb2NvYSBidXR0ZXIjNTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTcuMDUuMDAjSG9wIE9pbCM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wNi4wMCNNYWNhZGFtaWEgb2lsIzUwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE2LjAwLjAwLjAwI0Nob2NvbGF0ZSBhbmQgc3VnYXJzIGFuZCBzd2VldGVuZXJzIGFuZCBjb25mZWN0aW9uYXJ5IHByb2R1Y3RzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjAwLjAwI0Nob2NvbGF0ZSBhbmQgc3VnYXJzIGFuZCBzd2VldGVuaW5nIHByb2R1Y3RzIzUwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjAxLjAwI0Jyb3duIHN1Z2FyIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjAyLjAwI1doaXRlIHN1Z2FycyM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wMy4wMCNTdWdhciBjYW5lIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA0LjAwI0ZydWN0b3NlIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA1LjAwI1BhbG0gc3VnYXIjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDYuMDAjR2x1Y29zZSM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wNy4wMCNCZWV0IHN1Z2FyIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA4LjAwI1JhdyBzdWdhciM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wOS4wMCNOYXR1cmFsIHN1Z2FycyBhbmQgc3dlZXRlbmluZyBwcm9kdWN0cyM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4xMC4wMCNBcnRpZmljaWFsIHN3ZWV0ZW5pbmcgYWdlbnRzIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjExLjAwI0Nob2NvbGF0ZSBhbmQgY2hvY29sYXRlIHN1YnN0aXR1dGUjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMTIuMDAjU3lydXBzIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjAwLjAwI1N5cnVwcyBhbmQgb3RoZXIgc3dlZXRlbmVycyM1MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wMS4wMCNNb2xhc3NlcyM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wMi4wMCNIb25leSM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wMy4wMCNCbGFjayB0cmVhY2xlIzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjA0LjAwI0Nvcm4gc3lydXAjNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDUuMDAjQXNwZXJ0YW1lIzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjA2LjAwI1NhY2NoYXJyaW4jNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDcuMDAjTWFwbGUgc3lydXAjNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTcuMDAuMDAjQ2hvY29sYXRlIGFuZCBjYXJvYiBhbmQgY2hvY29sYXRlIHN1YnN0aXR1dGVzIzUwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE3LjAxLjAwI0Nob2NvbGF0ZSM1MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNy4wMi4wMCNDYXJvYiM1MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNy4wMy4wMCNDb2NvYSM1MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wMC4wMCNDb25mZWN0aW9uYXJ5IHByb2R1Y3RzIzUwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjA0LjAwI0NoZXdpbmcgZ3VtcyM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wNS4wMCNDYW5keSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wNi4wMCNMaWNvcmljZSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wNy4wMCNqZWxsaWVkIGNvbmZlY3Rpb25hcnkjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDguMDAjRnVkZ2UjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDkuMDAjTWVkaWNhdGVkIGNvbmZlY3Rpb25lcnkgb3IgbG96ZW5nZXMjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMTAuMDAjU3VnYXIgZnJlZSBjb25mZWN0aW9uYXJ5IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjExLjAwI01hcnNobWFsbG93IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjEyLjAwI05vdWdhdCM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4xMy4wMCNDaG9jb2xhdGUgb3IgY2hvY29sYXRlIHN1YnN0aXR1dGUgY2FuZHkjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMTQuMDAjU3VnYXIgb3Igc3VnYXIgc3Vic3RpdHV0ZSBjYW5keSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4xNS4wMCNDaGV3aW5nIGd1bSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4wMC4wMC4wMCNTZWFzb25pbmdzIGFuZCBwcmVzZXJ2YXRpdmVzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjAwLjAwI0hlcmJzIGFuZCBzcGljZXMgYW5kIGV4dHJhY3RzIzUwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjAxLjAwI1NhbHQjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDMuMDAjTnV0bWVnIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA0LjAwI0JheSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wNS4wMCNBbmlzZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wNi4wMCNTYWZmcm9uIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA3LjAwI0Jhc2lsIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA4LjAwI0dpbmdlciM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wOS4wMCNMYXZlbmRlciM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xMC4wMCNNYWNlIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjExLjAwI1BhcHJpa2EjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTIuMDAjQ2hpY29yeSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xMy4wMCNHYXJsaWMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTQuMDAjQ3VtaW4jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTUuMDAjQ2xvdmVzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE2LjAwI0Npbm5hbW9uIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE3LjAwI0NpbGFudHJvIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE4LjAwI0FsbHNwaWNlIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE5LjAwI01hcmpvcmFtIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjIwLjAwI1lhcnJvdyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yMS4wMCNUaHltZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yMi4wMCNUYXJyYWdvbiM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yMy4wMCNTZXNhbWUjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjQuMDAjU2FnZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yNS4wMCNSb3NlbWFyeSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yNi4wMCNQYXJzbGV5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjI3LjAwI0NoYW1vbWlsZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yOC4wMCNNaW50cyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yOS4wMCNDYXJhd2F5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjMwLjAwI0xlbW9uZ3Jhc3MjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzEuMDAjTGVtb24gYmFsbSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zMi4wMCNEaWxsIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjMzLjAwI0Zlbm5lbCM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zNC4wMCNDdXJyeSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zNS4wMCNDb21mcmV5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjM2LjAwI0NoaXZlcyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zNy4wMCNDaGVydmlsIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjM4LjAwI09yZWdhbm8jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzkuMDAjUGVwcGVyY29ybnMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDAuMDAjQ2FyZGFtb20jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDEuMDAjQ29yaWFuZGVyIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQyLjAwI0ZsYXZvcmluZyBleHRyYWN0cyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40My4wMCNDaGlsaSBwb3dkZXIjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDQuMDAjUG9wcHkgc2VlZHMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDUuMDAjTWl4ZWQgaGVyYnMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDYuMDAjVmFuaWxsYSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40Ny4wMCNTZWFzb25pbmcgbWl4IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQ4LjAwI0ZyZXNoIGhlcmJzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQ5LjAwI0RyaWVkIGhlcmJzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjUwLjAwI1NwaWNlcyBvciBleHRyYWN0cyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNi4wMC4wMCNQcmVzZXJ2YXRpdmVzIGFuZCBhZGRpdGl2ZXMjNTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTYuMDEuMDAjUGVjdGluIzUwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE2LjAyLjAwI0Zvb2QgY29sb3JpbmdzIzUwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE2LjAzLjAwI01vbm9zb2RpdW0gZ2x1dGFtYXRlIChNU0cpIzUwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjAwLjAwI1ZpbmVnYXJzIGFuZCBjb29raW5nIHdpbmVzIzUwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjAxLjAwI0NpZGVyIHZpbmVhZ2FyIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjAyLjAwI0JhbHNhbWljIHZpbmVnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDMuMDAjRGlzdGlsbGVkIHZpbmVnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDQuMDAjUmljZSB2aW5lZ2FyIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjA1LjAwI1dpbmUgdmluZWdhciM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wNi4wMCNJbmZ1c2VkIHZpbmVnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDcuMDAjVmluZWdhcnMjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDguMDAjQ29va2luZyB3aW5lcyM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wMC4wMCNTYXVjZXMgYW5kIHNwcmVhZHMgYW5kIGNvbmRpbWVudHMjNTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDEuMDAjTXVzdGFyZHMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDIuMDAjQ2F0c3VwIG9yIGtldGNodXAgb3IgdG9tYXRvIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjAzLjAwI0JhcmJlY3VlIHNhdWNlcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wNC4wMCNNYXJpbmFkZXMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDUuMDAjSG90IHNhdWNlcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wNi4wMCNNYXlvbm5haXNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjA3LjAwI1NveSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wOC4wMCNTYWxhZCBkcmVzc2luZ3MjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDkuMDAjV29yY2hlc3RlcnNoaXJlIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjEwLjAwI1NhbHNhIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjExLjAwI1JlbGlzaGVzIG9yIGNodXRuZXlzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjEyLjAwI0NvbnNlcnZlIG9yIGphbSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xMy4wMCNEaXAgb3IgY2hpbGxlZCBkaXBwaW5nIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE0LjAwI1N3ZWV0IGFuZCBzb3VyIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE1LjAwI1RhcnRhcmUgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTYuMDAjTWludCBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xNy4wMCNHcmF2eSBzYXVjZSBvciBwb3dkZXIjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTguMDAjTm9vZGxlIG9yIHBhc3RhIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE5LjAwI0Zvb2Qgc3ByZWFkcyBvciBwYXN0ZXMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjAuMDAjVG9tYXRvIHBhc3RlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjIxLjAwI0JsYWNrIGJlYW4gc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjIuMDAjU2F0YXkgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjMuMDAjVGVyaXlha2kgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjQuMDAjU2VhZm9vZCBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yNS4wMCNQZXN0byM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yNi4wMCNTdGVhayBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yNy4wMCNPeXN0ZXIgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjguMDAjUGx1bSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yOS4wMCNXaGl0ZSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4zMC4wMCNEaXBwaW5nIHNhdWNlcyBvciBjb25kaW1lbnRzIG9yIHNwcmVhZHMgb3IgbWFyaW5hZGVzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjMxLjAwI0Nvb2tpbmcgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMzIuMDAjU2FsYWQgZHJlc3Npbmcgb3IgZGlwcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4zMy4wMCNTYXZvcnkgc3ByZWFkIG9yIHBhdGUjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTkuMDAuMDAjUGlja2xlcyBhbmQgcmVsaXNoIGFuZCBvbGl2ZXMjNTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTkuMDEuMDAjUGlja2xlcyM1MC4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOS4wMi4wMCNSZWxpc2gjNTAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTkuMDMuMDAjT2xpdmVzIzUwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE5LjA0LjAwI0NodXRuZXlzIzUwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjAwLjAwLjAwI0JyZWFkIGFuZCBiYWtlcnkgcHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTUuMDAuMDAjTGVhdmVuaW5nIGFnZW50cyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNS4wMS4wMCNZZWFzdCM1MC4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNS4wMi4wMCNCYWtpbmcgcG93ZGVyIzUwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE1LjAzLjAwI0Jha2luZyBzb2RhIzUwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE1LjA0LjAwI0Jha2VycyBhbW1vbmlhIzUwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE2LjAwLjAwI1RoaWNrZW5lcnMjNTAuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTYuMDEuMDAjR2VsYXRpbnMjNTAuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTYuMDIuMDAjRm9vZCBncmFkZSBzdGFyY2hlcyM1MC4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNi4wMy4wMCNUYXBpb2NhIzUwLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE2LjA0LjAwI0Fycm93cm9vdCM1MC4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNi4wNS4wMCNGb29kIGdyYWRlIGFnYXIjNTAuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDAuMDAjQmFraW5nIG1peGVzIGFuZCBzdXBwbGllcyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wMS4wMCNGb29kIGdsYXplcyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wMi4wMCNJY2luZ3MjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDMuMDAjQ2FrZSBkZWNvcmF0aW9ucyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wNC4wMCNDYWtlIG9yIHB1ZGRpbmcgbWl4dHVyZXMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDUuMDAjUGllIGZpbGxpbmdzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjA2LjAwI0Jha2luZyBtaXhlcyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wNy4wMCNDb2F0aW5nIG1peCBvciBicmVhZGNydW1icyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wOC4wMCNCYWtpbmcgbWl4ZXMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDkuMDAjQmFraW5nIHN1cHBsaWVzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjAwLjAwI0Jha2VkIGdvb2RzIzUwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjAxLjAwI1Bhc3RyeSBzaGVsbHMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDIuMDAjQ3JhY2tlcnMgb3IgZHJ5IG9yIHNhdm91cnkgYmlzY3VpdHMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDMuMDAjQnJlYWQjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDQuMDAjUGFzdHJpZXMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDUuMDAjQ2FrZXMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDYuMDAjQ29va2llIG9yIHN3ZWV0IGJpc2N1aXQjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDcuMDAjQmlzY3VpdHMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDguMDAjVW5sZWF2ZW5lZCBicmVhZCM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wOS4wMCNNdWZmaW5zIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjEwLjAwI0RvbnV0cyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4xMS4wMCNQaXp6YSBvciBwaXp6YSBiYXNlcyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4xMi4wMCNDb3JuZXRzIG9yIGNvbmVzIG9yIHdhZmZsZXMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTkuMDAuMDAjQnJlYWQgYW5kIGJpc2N1aXRzIGFuZCBjb29raWVzIzUwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjE5LjAxLjAwI0ZyZXNoIGJyZWFkIzUwLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE5LjAyLjAwI0Zyb3plbiBicmVhZCM1MC4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOS4wMy4wMCNQbGFpbiBzYXZvcnkgYmlzY3VpdHMjNTAuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTkuMDQuMDAjRHJpZWQgYnJlYWRzIG9yIGJyZWFkIHNoZWxscyBvciBjcm91dG9ucyM1MC4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOS4wNS4wMCNTd2VldCBiaXNjdWl0cyBvciBjb29raWVzIzUwLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjIwLjAwLjAwI0Nha2VzIGFuZCBwaWVzIGFuZCBwYXN0cmllcyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4yMC4wMS4wMCNGcmVzaCBjYWtlcyBvciBwaWVzIG9yIHBhc3RyaWVzIzUwLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjIwLjAyLjAwI0Zyb3plbiBjYWtlcyBvciBwaWVzIG9yIHBhc3RyaWVzIzUwLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjAwLjAwLjAwI1ByZXBhcmVkIGFuZCBwcmVzZXJ2ZWQgZm9vZHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDAuMDAjUHJlcGFyZWQgc291cHMgYW5kIHN0ZXdzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjAxLjAwI1N0ZXdzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjAyLjAwI1NvdXBzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjAzLjAwI1N0b2NrIG9yIHN0b2NrIGN1YmVzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjA0LjAwI1N0ZXcgb3IgY2Fzc2Vyb2xlIGJhc2UjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDUuMDAjRnJlc2ggcHJlcGFyZWQgc291cHMgb3Igc3Rld3MjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDYuMDAjRnJvemVuIHByZXBhcmVkIHNvdXBzIG9yIHN0ZXdzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjA3LjAwI1NoZWxmIHN0YWJsZSBwcmVwYXJlZCBzb3VwcyBvciBzdGV3cyM1MC4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wMC4wMCNGcm96ZW4gZm9vZHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDEuMDAjRnJvemVuIGRlc3NlcnRzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjAyLjAwI0Zyb3plbiBtZWF0cyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wMy4wMCNGcm96ZW4gZnJ1aXRzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA0LjAwI0Zyb3plbiB2ZWdldGFibGVzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA1LjAwI0Zyb3plbiBwcmVwYXJlZCBtZWFscyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wNi4wMCNGcm96ZW4gZmlzaCM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wNy4wMCNGcm96ZW4gY3J1c3RhY2VhbnMjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDguMDAjRnJvemVuIG1vbGx1c2tzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA5LjAwI0Zyb3plbiBwcmVwYXJlZCBwYXN0cnkgdW5iYWtlZCM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4xMC4wMCNGcm96ZW4gc2F2b3VyaWVzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjAwLjAwI0Nhbm5lZCBmb29kcyBhbmQgYm90dGxlZCBldGMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDEuMDAjQ2FubmVkIGZydWl0cyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wMi4wMCNDYW5uZWQgdmVnZXRhYmxlcyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wMy4wMCNDYW5uZWQgZmlzaCM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wNC4wMCNDYW5uZWQgbWVhdCM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wNS4wMCNDYW5uZWQgSW5mYW50IGZvb2RzIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjA2LjAwI0ZydWl0IGphbXMjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDcuMDAjTWFybWFsYWRlIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjA4LjAwI0Nhbm5lZCBwcmVwYXJlZCBtZWFscyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wOS4wMCNDYW5uZWQgZGVzc2VydHMjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTguMDAuMDAjRHJpZWQgZm9vZHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTguMDEuMDAjRHJpZWQgZmlzaCM1MC4xOS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOC4wMi4wMCNEcmllZCBtZWF0IzUwLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE4LjAzLjAwI0RyaWVkIHZlZ2V0YWJsZXMjNTAuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTguMDQuMDAjRHJpZWQgZnJ1aXRzIzUwLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjAwLjAwI1NhbHRlZCBhbmQgc21va2VkIGZvb2RzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjAxLjAwI1NhbHRlZCBvciBzbW9rZWQgZmlzaCM1MC4xOS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wMi4wMCNTYWx0ZWQgb3Igc21va2VkIG1lYXRzIzUwLjE5LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjAzLjAwI1NhbHRlZCBvciBzbW9rZWQgc2hlbGxmaXNoIG9yIGNydXN0YWNlYW5zIG9yIHJvZSM1MC4xOS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wNC4wMCNTYWx0ZWQgb3Igc21va2VkIGZydWl0cyM1MC4xOS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wNS4wMCNTYWx0ZWQgb3Igc21va2VkIG51dHMjNTAuMTkuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjAuMDAuMDAjUGlja2xlZCBmb29kcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wMS4wMCNQaWNrbGVkIGZpc2gjNTAuMTkuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjAuMDIuMDAjUGlja2xlZCBjcnVzdGFjZWFucyM1MC4xOS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wMy4wMCNQaWNrbGVkIG1lYXRzIzUwLjE5LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIwLjA0LjAwI1BpY2tsZWQgdmVnZXRhYmxlcyM1MC4xOS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wNS4wMCNQaWNrbGVkIGVnZ3MjNTAuMTkuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDAuMDAjU25hY2sgZm9vZHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDEuMDAjUHJldHplbHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDIuMDAjQ29ybiBjaGlwcyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wMy4wMCNQb3RhdG8gY2hpcHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDQuMDAjUG9wY29ybiM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wNS4wMCNGaXNoIGZpbmdlcnMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDYuMDAjRnJ1aXQgc25hY2tzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjA3LjAwI090aGVyIGZsYXZvdXJlZCBzbmFjayBmb29kcyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wOC4wMCNGcnVpdCBvciBudXQgbWl4IzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjA5LjAwI0NyaXNwcyBvciBjaGlwcyBvciBwcmV0emVscyBvciBtaXhlcyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4xMC4wMCNOdXRzIG9yIGRyaWVkIGZydWl0cyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4xMS4wMCNEcmllZCBvciBwcm9jZXNzZWQgbWVhdHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMTIuMDAjUG9wcGVkIGNvcm4jNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjIuMDAuMDAjU3ByZWFkcyBhbmQgY29uc2VydmVzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIyLjAxLjAwI1BlYW51dCBidXR0ZXIjNTAuMTkuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjIuMDIuMDAjWWVhc3Qgb3IgdmVnZXRhYmxlIGV4dHJhY3Qgc3ByZWFkcyM1MC4xOS4yMi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMi4wMy4wMCNKYW1zIG9yIGplbGxpZXMgb3IgcXVpbmNlcyM1MC4xOS4yMi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMy4wMC4wMCNEZXNlcnRzIGFuZCBkZXNlcnQgdG9wcGluZ3MjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjMuMDEuMDAjUHJlcGFyZWQgZGVzZXJ0cyM1MC4xOS4yMy4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMy4wMi4wMCNEZXNlcnQgdG9wcGluZ3MjNTAuMTkuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjMuMDMuMDAjRmxhdm9yZWQgaWNlcyBvciBpY2UgY3JlYW0gb3IgaWNlIGNyZWFtIGRlc2VydHMgb3IgZnJvemVuIHlvZ3VydHMjNTAuMTkuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjQuMDAuMDAjSmFtcyBhbmQgamVsbGllcyBhbmQgbnV0IGFuZCBzd2VldCBzcHJlYWRzIGFuZCBmcnVpdCBjb25zZXJ2ZXMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjQuMDEuMDAjSmFtcyBvciBqZWxsaWVzIG9yIGZydWl0IHByZXNlcnZlcyM1MC4xOS4yNC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNC4wMi4wMCNOdXQgb3IgbWl4ZWQgc3ByZWFkcyM1MC4xOS4yNC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNC4wMy4wMCNIb25leSM1MC4xOS4yNC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNS4wMC4wMCNTYW5kd2ljaGVzIGFuZCBmaWxsZWQgcm9sbHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjUuMDEuMDAjRnJlc2ggc2FuZHdpY2hlcyBvciBmaWxsZWQgcm9sbHMjNTAuMTkuMjUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjUuMDIuMDAjRnJvemVuIHNhbmR3aWNoZXMgb3IgZmlsbGVkIHJvbGxzIzUwLjE5LjI1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI2LjAwLjAwI1ByZXBhcmVkIHBvdGF0b2VzIGFuZCByaWNlIGFuZCBwYXN0YSBhbmQgc3R1ZmZpbmcjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjYuMDEuMDAjRnJlc2ggcHJlcGFyZWQgcG90YXRvZXMgb3IgcmljZSBvciBwYXN0YSBvciBzdHVmZmluZyM1MC4xOS4yNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNi4wMi4wMCNGcm96ZW4gcHJlcGFyZWQgcG90YXRvZXMgb3IgcmljZSBvciBwYXN0YSBvciBzdHVmZmluZyM1MC4xOS4yNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNi4wMy4wMCNTaGVsZiBzdGFibGUgcHJlcGFyZWQgcG90YXRvZXMgb3IgcmljZSBvciBwYXN0YSBvciBzdHVmZmluZyM1MC4xOS4yNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNy4wMC4wMCNQYWNrYWdlZCBjb21iaW5hdGlvbiBtZWFscyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNy4wMS4wMCNGcmVzaCBjb21iaW5hdGlvbiBtZWFscyM1MC4xOS4yNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNy4wMi4wMCNGcm96ZW4gY29tYmluYXRpb24gbWVhbHMjNTAuMTkuMjcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjcuMDMuMDAjU2hlbGYgc3RhYmxlIGNvbWJpbmF0aW9uIG1lYWxzIzUwLjE5LjI3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI4LjAwLjAwI1Nhdm9yeSBwaWVzIGFuZCBxdWljaGVzIGFuZCBwYXN0aWVzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjI4LjAxLjAwI0ZyZXNoIHNhdm9yeSBwaWVzIG9yIHF1aWNoZXMgb3IgcGFzdGllcyM1MC4xOS4yOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOC4wMi4wMCNGcm96ZW4gc2F2b3J5IHBpZXMgb3IgcXVpY2hlcyBvciBwYXN0aWVzIzUwLjE5LjI4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI4LjAzLjAwI1NoZWxmIHN0YWJsZSBzYXZvcnkgcGllcyBvciBxdWljaGVzIG9yIHBhc3RpZXMjNTAuMTkuMjguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjkuMDAuMDAjUGxhaW4gcGFzdGEgYW5kIG5vb2RsZXMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjkuMDEuMDAjRnJlc2ggcGxhaW4gcGFzdGEgb3Igbm9vZGxlcyM1MC4xOS4yOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOS4wMi4wMCNTaGVsZiBzdGFibGUgcGxhaW4gcGFzdGEgb3Igbm9vZGxlcyM1MC4xOS4yOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4zMC4wMC4wMCNJbmZhbnQgZm9vZHMgYW5kIGJldmVyYWdlcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4zMC4wMS4wMCNJbmZhbnQgZm9vZHMjNTAuMTkuMzAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMzAuMDIuMDAjSW5mYW50IGJldmVyYWdlcyM1MC4xOS4zMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4wMC4wMC4wMCNCZXZlcmFnZXMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTUuMDAuMDAjV2F0ZXIjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTUuMDEuMDAjU3BhcmtsaW5nIHdhdGVyIzUwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE1LjAyLjAwI1NwcmluZyB3YXRlciM1MC4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNS4wMy4wMCNNaW5lcmFsIHdhdGVyIzUwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE1LjA0LjAwI0Rpc3RpbGxlZCBvciBwdXJpZmllZCB3YXRlciM1MC4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wMC4wMCNKdWljZXMjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDEuMDAjQmxlbmRlZCBqdWljZXMjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDIuMDAjR3VhdmEganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDMuMDAjUHJ1bmUganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDQuMDAjVG9tYXRvIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA1LjAwI0NyYW5iZXJyeSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wNi4wMCNHcmFwZWZydWl0IGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA3LjAwI0dyYXBlIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA4LjAwI1BpbmVhcHBsZSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wOS4wMCNPcmFuZ2UganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMTAuMDAjQXBwbGUganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMTEuMDAjTGVtb24ganVpY2VzIG9yIGxlbW9uYWRlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjEyLjAwI0luZmFudCBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wMC4wMCNDb2ZmZWUgYW5kIHRlYSM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wMS4wMCNJbnN0YW50IGNvZmZlZSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wMi4wMCNHcm91bmQgY29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjAzLjAwI1dob2xlIGJlYW4gY29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA0LjAwI0dyZWVuIGNvZmZlZSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wNS4wMCNDb2ZmZWUgc3Vic3RpdHV0ZXMjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDYuMDAjQ29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA3LjAwI0NvZmZlZSBzdWJzdGl0dXRlcyM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wOC4wMCNDb2ZmZWUgZHJpbmtzIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA5LjAwI0luc3RhbnQgY29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjEwLjAwI0xlYWYgdGVhIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjExLjAwI0luc3RhbnQgdGVhIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjEyLjAwI1RlYSBkcmlua3MjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMTMuMDAjVGVhIGJhZ3MjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDAuMDAjVGVhIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjE4LjAxLjAwI0dyZWVuIHRlYSM1MC4yMC4xOC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOC4wMi4wMCNCbGFjayB0ZWEjNTAuMjAuMTguMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDMuMDAjSGVyYmFsIHRlYSM1MC4yMC4xOC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOC4wNC4wMCNQb3dkZXJlZCB0ZWEjNTAuMjAuMTguMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDUuMDAjVGVhIGJhZ3MjNTAuMjAuMTguMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDAuMDAjU29mdCBkcmlua3MjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDEuMDAjTm9uIGNhcmJvbmF0ZWQgc29mdCBkcmlua3MjNTAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDIuMDAjQ2FyYm9uYXRlZCBzb2Z0IGRyaW5rcyM1MC4yMC4xOS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOS4wMy4wMCNDb3JkaWFscyBvciBjb2xvdXJpbmdzIzUwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE5LjA0LjAwI1Nwb3J0cyBvciBoaWdoIGVuZXJneSBkcmlua3MjNTAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDUuMDAjU295IGJldmVyYWdlIzUwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjAwLjAwI0JlZXIgYW5kIHdpbmUjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDEuMDAjQ2hhbXBhZ25lIzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjAyLjAwI0JlZXIjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDMuMDAjV2luZSM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wNC4wMCNTcGFya2xpbmcgd2luZXMjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDUuMDAjRm9ydGlmaWVkIHdpbmUjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDYuMDAjUG9ydCM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wNy4wMCNTaGVycnkjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDguMDAjV2luZSBjb29sZXIgYmV2ZXJhZ2UjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDAuMDAjU3Bpcml0cyBhbmQgbGlxdW9ycyM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wMS4wMCNCcmFuZHkjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDIuMDAjQ29nbmFjIG9yIGFybWFnbmFjIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjAzLjAwI1doaXNrZXkjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDQuMDAjVm9ka2EjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDUuMDAjVGVxdWlsYSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wNi4wMCNHaW4jNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDcuMDAjTGlxdWV1cnMjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDguMDAjUnVtIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjA5LjAwI0JvdXJib24jNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTAuMDAjU2NvdGNoIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjExLjAwI0NpZGVyIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjEyLjAwI1NjaG5hcHBzIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjEzLjAwI091em8jNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTQuMDAjQXBlcml0aWZzIG9yIGJpdHRlcnMjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTUuMDAjVmVybW91dGgjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTYuMDAjU2FtYnVjYSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xNy4wMCNTYWtlIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjE4LjAwI011c2NhdCBvciBtYWRlaXJhIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjAwLjAwI0FsY29ob2xpYyBiZXZlcmFnZXMjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDEuMDAjQmVlciM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wMi4wMCNDaWRlciBvciBwZXJyeSM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wMy4wMCNXaW5lIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjA0LjAwI0ZvcnRpZmllZCB3aW5lIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjA1LjAwI1NwYXJrbGluZyB3aW5lIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjA2LjAwI1NwaXJpdHMgb3IgbGlxdW9ycyM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wNy4wMCNBbGNvaG9sIGNvY2t0YWlscyBvciBkcmluayBtaXhlcyM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wMC4wMCNOb24gYWxjb2hvbGljIGJldmVyYWdlcyM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wMS4wMCNXYXRlciM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wMi4wMCNJY2UjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDMuMDAjRnJvemVuIGp1aWNlcyM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wNC4wMCNTaGVsZiBzdGFibGUganVpY2UjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDUuMDAjRnJlc2gganVpY2UjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDYuMDAjU29mdCBkcmlua3MjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDcuMDAjQ2hvY29sYXRlIG9yIG1hbHQgb3Igb3RoZXIgaG90IGJldmVyYWdlcyM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wOC4wMCNBbGNvaG9sIGZyZWUgY29ja3RhaWxzIG9yIGRyaW5rIG1peGVzIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjA5LjAwI1Nwb3J0IGRyaW5rIG1peGVzIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjEwLjAwI1NwcmluZyB3YXRlciM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMS4wMC4wMC4wMCNUb2JhY2NvIGFuZCBzbW9raW5nIHByb2R1Y3RzIGFuZCBzdWJzdGl0dXRlcyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wMC4wMCNUb2JhY2NvIGFuZCBzdWJzdGl0dXRlcyM1MC4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wMS4wMCNUb2JhY2NvIGxlYWYjNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDIuMDAjQ2lnYXJldHRlcyBvciBjaWdhcnMjNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDMuMDAjUGlwZSB0b2JhY2NvIG9yIGxlYWYgdG9iYWNjbyM1MC4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wNC4wMCNDaGV3aW5nIHRvYmFjY28jNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDUuMDAjSGVyYmFsIGNpZ2FyZXR0ZXMjNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDAuMDAjVG9iYWNjbyBwcm9kdWN0IGFjY2Vzc29yaWVzIGFuZCBzdXBwbGllcyM1MC4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wMS4wMCNQaXBlIHRvYmFjY28jNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDIuMDAjQ2lnYXJzIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjAzLjAwI0NpZ2FyZXR0ZXMjNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDQuMDAjU21va2VsZXNzIHRvYmFjY28jNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDUuMDAjUmVhZHkgcnViYmVkIHRvYmFjY28jNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDYuMDAjQ2lnYXJldHRlIHBhcGVycyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wNy4wMCNDaWdhcmV0dGUgcGFwZXJzIG9yIGZpbHRlcnMjNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDguMDAjQ2lnYXJldHRlIGxpZ2h0ZXJzIG9yIGZsaW50cyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wOS4wMCNTbW9raW5nIHBpcGVzIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIyLjAwLjAwLjAwI0NlcmVhbCBhbmQgcHVsc2UgcHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTAuMDAuMDAjUHVsc2VzIzUwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEwLjAxLjAwI1B1bHNlIGdyYWlucyM1MC4yMi4xMC4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMC4wMi4wMCNQdWxzZSBmbG91ciM1MC4yMi4xMC4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMS4wMC4wMCNDZXJlYWxzIzUwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjExLjAxLjAwI0NlcmVhbCBncmFpbnMjNTAuMjIuMTEuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTEuMDIuMDAjQ2VyZWFsIGZsb3VyIzUwLjIyLjExLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEyLjAwLjAwI1Byb2Nlc3NlZCBjZXJlYWxzIzUwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEyLjAxLjAwI1JlYWR5IHRvIGVhdCBvciBob3QgY2VyZWFscyM1MC4yMi4xMi4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMi4wMi4wMCNIZWFsdGggb3IgYnJlYWtmYXN0IGJhcnMjNTAuMjIuMTIuMDAuMDAKLXVuc3BzYzcjNTEuMDAuMDAuMDAuMDAjRHJ1Z3MgYW5kIFBoYXJtYWNldXRpY2FsIFByb2R1Y3RzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjAwLjAwLjAwI0FudGkgaW5mZWN0aXZlIGRydWdzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjAwLjAwI0FudGliaW90aWNzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjAxLjAwI0FtaW5vZ2x5Y29zaWRlcyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wMi4wMCNDZXBoYWxvc3BvcmlucyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wMy4wMCNDaGxvcmFtcGhlbmljb2wjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDQuMDAjQ2xpbmRhbXljaW4gb3IgbGluY29teWNpbiM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wNS4wMCNGbHVvcm9xdWlub2xvbmVzIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjA2LjAwI01hY3JvbGlkZSM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wNy4wMCNQZW5pY2lsbGlucyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wOC4wMCNBbnRpYmlvdGljIHN1bGZvbmFtaWRlcyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wOS4wMCNUZXRyYWN5Y2xpbmVzIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE2LjAwLjAwI0FtZWJpY2lkZXMgYW5kIFRyaWNob21vbmFjaWRlcyBhbmQgQW50aXByb3Rvem9hbHMjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTYuMDEuMDAjQXRvdmFxdW9uZSM1MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNi4wMi4wMCNFZmxvcm5pdGhpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNi4wMy4wMCNNZXRyb25pZGF6b2xlIzUxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjAwLjAwI0FudGhlbG1pbnRpY3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDEuMDAjQWxiZW5kYWRvbGUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDIuMDAjTWViZW5kYXpvbGUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDMuMDAjT3hhbW5pcXVpbmUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDQuMDAjUGlwZXJhemluZSBjaXRyYXRlIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjA1LjAwI1ByYXppcXVhbnRlbCM1MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wNi4wMCNQeXJhbnRlbCBwYW1vYXRlIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjA3LjAwI1RoaWFiZW5kYXpvbGUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDAuMDAjQW50aWZ1bmdhbCBkcnVncyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wMS4wMCNBbXBob3RlcmljaW4gYiM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wMi4wMCNCdXRlbmFmaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDMuMDAjQnV0b2NvbmF6b2xlIG5pdHJhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDQuMDAjQ2ljbG9waXJveCBvbGFtaW5lIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjA1LjAwI0Nsb3RyaW1hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wNi4wMCNFY29uYXpvbGUgbml0cmF0ZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wNy4wMCNGbHVjb25hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wOC4wMCNGbHVjeXRvc2luZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wOS4wMCNHcmlzZW9mdWx2aW4jNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTAuMDAjSXRyYWNvbmF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjExLjAwI0tldG9jb25hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xMi4wMCNNaWNvbmF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjEzLjAwI05hZnRpZmluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjE0LjAwI05hdGFteWNpbiM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xNS4wMCNOeXN0YXRpbiM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xNi4wMCNPeGljb25hem9sZSBuaXRyYXRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjE3LjAwI1N1bGNvbmF6b2xlIG5pdHJhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTguMDAjVGVyYmluYWZpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xOS4wMCNUZXJjb25hem9sZSBuaXRyYXRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjIwLjAwI1Rpb2NvbmF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjIxLjAwI1RvbG5hZnRhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDAuMDAjQW50aW1hbGFyaWFsIGRydWdzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjAxLjAwI0FtaW5vcXVpbm9saW5lcyM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wMi4wMCNNZWZsb3F1aW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDMuMDAjUHJpbWFxdWluZSBwaG9zcGhhdGUjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDQuMDAjUXVpbmluZSBzdWxmYXRlIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjA1LjAwI0NobG9yb3F1aW5lIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjA2LjAwI1Byb2d1YW5pbCM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wNy4wMCNQeXJpbWV0aGFtaW5lIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjAwLjAwI0FudGl0dWJlcmN1bGFyIGRydWdzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjAxLjAwI0N5Y2xvc2VyaW5lIzUxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjAyLjAwI0V0aGFtYnV0b2wgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMC4wMy4wMCNJc29uaWF6aWQjNTEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjAuMDQuMDAjUmlmdWJ1dGluIzUxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjA1LjAwI1JpZmFtcGluIzUxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIxLjAwLjAwI0xlcHJvc3RhdGljcyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMS4wMS4wMCNDbG9mYXppbWluZSM1MS4xMC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMS4wMi4wMCNEYXBzb25lIzUxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjAwLjAwI1VyaW5hcnkgYW50aSBpbmZlY3RpdmVzIGFuZCBhbmFsZ2VzaWNzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjAxLjAwI0Npbm94YWNpbiM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wMi4wMCNGbGF2b3hhdGUgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wMy4wMCNNZXRoZW5hbWluZSBoaXBwdXJhdGUjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDQuMDAjTWV0aGVuYW1pbmUgbWFuZGVsYXRlIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA1LjAwI05hbGlkaXhpYyBhY2lkIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA2LjAwI05pdHJvZnVyYW50b2luIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA3LjAwI094eWJ1dHluaW4gY2hsb3JpZGUjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDguMDAjUGVudG9zYW4gcG9seXN1bGZhdGUgc29kaXVtIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA5LjAwI1BoZW5hem9weXJpZGluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjEwLjAwI0FudGlzZXB0aWMgc29sdXRpb25zIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjAwLjAwI0FudGl2aXJhbCBkcnVncyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wMS4wMCNBY3ljbG92aXIjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDIuMDAjQW1hbnRhZGluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjAzLjAwI0N5ZG9mb3ZpciM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wNC4wMCNEaWRhbm9zaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA1LjAwI0ZhbWNpY2xvdmlyIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA2LjAwI0Zvc2Nhcm5ldCBzb2RpdW0jNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDcuMDAjR2FuY2ljbG92aXIgc29kaXVtIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA4LjAwI0lkb3h1cmlkaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA5LjAwI0luZGluYXZpciBzdWxmYXRlIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjEwLjAwI0xhbWl2dWRpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTEuMDAjTmV2aXJhcGluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xMi4wMCNSaWJhdmlyaW4jNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTMuMDAjUmltYW50YWRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xNC4wMCNSaXRvbmF2aXIjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTUuMDAjU2FxdWluYXZpciBtZXN5bGF0ZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xNi4wMCNTdGF2aWRpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTcuMDAjVHJpZmx1cmFkaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjE4LjAwI1ZhbGFjeWNsb3ZpciBoeWRyb2NobG9yaWRlIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjE5LjAwI1ZpZGFyYWJpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMjAuMDAjWmFsY2l0YWJpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMjEuMDAjWmlkb3Z1ZGluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMS4wMC4wMC4wMCNBbnRpbmVvcGxhc3RpYyBhZ2VudHMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDAuMDAjQWxreWxhdGluZyBhZ2VudHMjNTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDEuMDAjQW1pZm9zdGluZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wMi4wMCNCdXN1bGZhbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wMy4wMCNDYXJib3BsYXRpbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wNC4wMCNDYXJtdXN0aW5lIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjA1LjAwI0NobG9yYW1idWNpbCM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wNi4wMCNDaXNwbGF0aW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDcuMDAjQ3ljbG9waG9zcGhhbWlkZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wOC4wMCNEYWNhcmJhemluZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wOS4wMCNJZm9zZmFtaWRlIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjEwLjAwI0xvbXVzdGluZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xMS4wMCNNZWNobG9yZXRoYW1pbmUgaHlkcm9jaGxvcmlkZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xMi4wMCNNZWxwaGFsYW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTMuMDAjTWVzbmEjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTQuMDAjUGlwb2Jyb21hbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xNS4wMCNTdHJlcHRvem9jaW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTYuMDAjVGhpb3RlcGEjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTcuMDAjVXJhY2lsIG11c3RhcmQjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDAuMDAjQW50aW1ldGFib2xpdGVzIzUxLjExLjAwLjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjAxLjAwI0NsYWRyaWJpbmUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDIuMDAjQ3l0YXJhYmluZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wMy4wMCNGbG94dXJpZGluZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wNC4wMCNGbHVkYXJhYmluZSBwaG9zcGhhdGUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDUuMDAjRmx1b3JvdXJhY2lsIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjA2LjAwI0h5ZHJveHl1cmVhIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjA3LjAwI0lkYXJ1YmljaW4gaHlkcm9jaGxvcmlkZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wOC4wMCNMZXZhbWlzb2xlIGh5ZHJvY2hsb3JpZGUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDkuMDAjTWVyY2FwdG9wdXJpbmUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMTAuMDAjTWV0aG90cmV4YXRlIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjExLjAwI1Rlbmlwb3NpZGUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMTIuMDAjVGhpb2d1YW5pbmUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDAuMDAjQW50aW5lb3BsYXN0aWMgYW50aWJpb3RpY3MjNTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDEuMDAjQmxlb215Y2luIHN1bGZhdGUjNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDIuMDAjRGFjdGlub215Y2luIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjAzLjAwI0RhdW5vcnViaWNpbnMjNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDQuMDAjTWl0b215Y2luIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA1LjAwI01pdG90YW5lIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA2LjAwI01pdG94YW50cm9uZSBoeWRyb2NobG9yaWRlIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA3LjAwI1BlbnRvc3RhdGluIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA4LjAwI1BsaWNhbXljaW4jNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDAuMDAjSG9ybW9uZXMgYW5kIGFudGlob3Jtb25lcyM1MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wMS4wMCNBbmFzdHJvem9sZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wMi4wMCNCaWNhbHV0YW1pZGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDMuMDAjRXN0cmFtdXN0aW5lIHBob3NwaGF0ZSBzb2RpdW0jNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDQuMDAjRmx1dGFtaWRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjA1LjAwI0dvc2VyZWxpbiBhY2V0YXRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjA2LjAwI0lyaW5vdGVjYW4gaHlkcm9jaGxvcmlkZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wNy4wMCNMZXVwcm9saWRlIGFjZXRhdGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDguMDAjTmlsdXRhbWlkZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wOS4wMCNUYW1veGlmZW4jNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMTAuMDAjVGVzdG9sYWN0b25lIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjExLjAwI1RvcG90ZWNhbiBoeWRyb2NobG9yaWRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjEyLjAwI1ZpbmJsYXN0aW5lIHN1bGZhdGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMTMuMDAjVmluY3Jpc3RpbmUgc3VsZmF0ZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4xNC4wMCNWaW5vcmVsYmluZSB0YXJ0cmF0ZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wMC4wMCNOYXR1cmFsIGFudGluZW9wbGFzdGljIHByb2R1Y3RzIzUxLjExLjAwLjAwLjAwCi11bnNwc2M3IzUxLjExLjE5LjAxLjAwI0FzcGFyYWdpbmFzZSM1MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wMi4wMCNEb2NldGF4ZWwjNTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTkuMDMuMDAjSW50ZXJmZXJvbiM1MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wNC4wMCNQYWNsaXRheGVsIzUxLjExLjE5LjAwLjAwCi11bnNwc2M3IzUxLjExLjE5LjA1LjAwI1BvcmZpbWVyIHNvZGl1bSM1MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMi4wMC4wMC4wMCNDYXJkaW92YXNjdWxhciBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNS4wMC4wMCNBbnRpYXJyeXRobWljIGFnZW50cyM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNS4wMS4wMCNBZGVub3NpbmUjNTEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTUuMDIuMDAjRGlnb3hpbiM1MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNS4wMy4wMCNRdWluaWRpbmUgZ2x1Y29uYXRlIzUxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE2LjAwLjAwI0FudGlhbmdpbmFsIGRydWdzIzUxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEyLjE2LjAxLjAwI0FteWwgbml0cmF0ZSM1MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNi4wMi4wMCNJc29zb3JiaWRlIGRpbml0cmF0ZSM1MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNi4wMy4wMCNOaXRyb2dseWNlcmluIzUxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE2LjA0LjAwI1BlbnRhZXJ5dGhyaXRvbCB0ZXRyYW5pdHJhdGUjNTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDAuMDAjQW50aWh5cGVydGVuc2l2ZSBkcnVncyM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wMS4wMCNEaWF6b3hpZGUjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDIuMDAjVGVyYXpvc2luIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjAzLjAwI0NhcHRvcHJpbCM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wNC4wMCNMaXNpbm9wcmlsIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjA1LjAwI0ZlbG9kaXBpbmUjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDYuMDAjSXNyYWRpcGluZSM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wNy4wMCNWZXJhcGFtaWwjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDguMDAjTWV0aHlsZG9wYSM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wOS4wMCNDYXJ2ZWRpbG9sIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjEwLjAwI0xvc2FydGFuIHBvdGFzc2l1bSM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4xMS4wMCNNaW5veGlkaWwjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTguMDAuMDAjQW50aWh5cGVybGlwaWRlbWljIGFuZCBoeXBvY2hvbGVzdGVyb2xlbWljIGFnZW50cyM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wMS4wMCNGbHV2YXN0YXRpbiBzb2RpdW0jNTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTguMDIuMDAjTG92YXN0YXRpbiM1MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wMy4wMCNTaW12YXN0YXRpbiM1MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wNC4wMCNDbG9maWJyYXRlIzUxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE4LjA1LjAwI0dlbWZpYnJvemlsIzUxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE5LjAwLjAwI0RydWdzIHVzZWQgZm9yIGNvbmdlc3RpdmUgaGVhcnQgZmFpbHVyZSM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOS4wMS4wMCNBbXJpbm9uZSBsYWN0YXRlIzUxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE5LjAyLjAwI01pbHJpbm9uZSBsYWN0YXRlIzUxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE5LjAzLjAwI0RpZ2l0b3hpbiM1MS4xMi4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMy4wMC4wMC4wMCNIZW1hdG9saWMgZHJ1Z3MjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTUuMDAuMDAjQW50aWFuZW1pYyBkcnVncyM1MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNS4wMS4wMCNGZXJyb3VzIGZ1bWFyYXRlIzUxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE1LjAyLjAwI0ZlcnJvdXMgZ2x1Y29uYXRlIzUxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE1LjAzLjAwI0ZlcnJvdXMgc3VsZmF0ZSM1MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNi4wMC4wMCNBbnRpY29hZ3VsYW50cyM1MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNi4wMS4wMCNBcHJvdGluaW4jNTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTYuMDIuMDAjSGVwYXJpbiBjYWxjaXVtIzUxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE2LjAzLjAwI0hlcGFyaW4gc29kaXVtIzUxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE2LjA0LjAwI1dhcmZhcmluIHNvZGl1bSM1MS4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNy4wMC4wMCNUaHJvbWJvbHl0aWMgZHJ1Z3MgYW5kIHBsYXRlbGV0IGFnZ3JlZ2F0aW9uIGluaGliaXRvcnMjNTEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTcuMDEuMDAjQWJjaXhpbWFiIzUxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE3LjAyLjAwI0FsdGVwbGFzZSM1MS4xMy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNy4wMy4wMCNTdHJlcHRva2luYXNlIzUxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE3LjA0LjAwI1Vyb2tpbmFzZSM1MS4xMy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNC4wMC4wMC4wMCNDZW50cmFsIG5lcnZvdXMgc3lzdGVtIGRydWdzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjAwLjAwI0FudGljb252dWxzYW50cyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wMS4wMCNBY2V0YXpvbGFtaWRlIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjAyLjAwI0Nsb25hemVwYW0jNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDMuMDAjRmVsYmFtYXRlIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjA0LjAwI0xhbW90cmlnaW5lIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjA1LjAwI1BoZW5vYmFyYml0YWwjNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDYuMDAjUGhlbm9iYXJiaXRhbCBzb2RpdW0jNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDcuMDAjUGhlbnl0b2luIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjA4LjAwI0V0aG9zdXhpbWlkZSM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wMC4wMCNBbnRpZGVwcmVzc2FudHMjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDEuMDAjQW1pdHJpcHR5bGluZSBoeWRyb2NobG9yaWRlIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjAyLjAwI0RveGVwaW4gaHlkcm9jaGxvcmlkZSM1MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wMy4wMCNJbWlwcmFtaW5lIHBhbW9hdGUjNTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDQuMDAjTWlydGF6YXBpbmUjNTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDUuMDAjUGFyb3hldGluZSBoeWRyb2NobG9yaWRlIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjA2LjAwI1RyYXpvZG9uZSBoeWRyb2NobG9yaWRlIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjAwLjAwI0FudGlwc3ljaG90aWMgYWdlbnRzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjAxLjAwI1BoZW5vdGhpYXppbmVzIzUxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjAyLjAwI0hhbG9wZXJpZG9sIzUxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjAzLjAwI09sYW56YXBpbmUjNTEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTcuMDQuMDAjUmlzcGVyaWRvbmUjNTEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDAuMDAjSHlwbm90aWNzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE4LjAxLjAwI1BlbnRvYmFyYml0YWwjNTEuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDIuMDAjU2Vjb2JhcmJpdGFsIHNvZGl1bSM1MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOC4wMy4wMCNDaGxvcmFsIGh5ZHJhdGUjNTEuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDQuMDAjRXN0YXpvbGFtIzUxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE4LjA1LjAwI1RyaWF6b2xhbSM1MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wMC4wMCNUcmFucXVpbGl6ZXJzIGFuZCBhbnRpbWFuaWMgZHJ1Z3MjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDEuMDAjQWxwcmF6b2xhbSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wMi4wMCNEaWF6ZXBhbSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wMy4wMCNMaXRoaXVtIGNhcmJvbmF0ZSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wNC4wMCNMaXRoaXVtIGNpdHJhdGUjNTEuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDUuMDAjTWlkYXpvbGFtIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDYuMDAjVGVtYXplcGFtIzUxLjE0LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE0LjIwLjAwLjAwI05vbiBuYXJjb3RpYyBhbmFsZ2VzaWNzIGFuZCBhbnRpcHlyZXRpY3MjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjAuMDEuMDAjQWNldGFtaW5vcGhlbiM1MS4xNC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMC4wMi4wMCNBY2V0eWxzYWxpY3lsaWMgYWNpZCM1MS4xNC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMC4wMy4wMCNNZXNhbGFtaW5lIzUxLjE0LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIwLjA0LjAwI01lcHJvYnJvbWF0ZSM1MS4xNC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wMC4wMCNOb25zdGVyb2lkYWwgYW50aSBpbmZsYW1tYXRvcnkgZHJ1Z3MgKE5TQUlEcykjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDEuMDAjQXVyYW5vZmluIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjAyLjAwI0NhcnBvZmVuIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjAzLjAwI0RpY2xvZmVuYWMgcG90YXNzaXVtIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA0LjAwI0RpY2xvZmVuYWMgc29kaXVtIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA1LjAwI0ZsdXJiaXByb2ZlbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wNi4wMCNJYnVwcm9mZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDcuMDAjSW5kb21ldGhhY2luIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA4LjAwI0tldG9wcm9mZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDkuMDAjTmFwcm94ZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMTAuMDAjTmFwcm94ZW4gc29kaXVtIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjExLjAwI094YXByb3ppbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4xMi4wMCNTdWxpbmRhYyM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4xMy4wMCNTdXByb2ZlbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wMC4wMCNOYXJjb3RpYyBhbmFsZ2VzaWNzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjAxLjAwI0J1dG9ycGhhbm9sIHRhcnRyYXRlIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjAyLjAwI0NvZGVpbmUgcGhvc3BoYXRlIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjAzLjAwI0NvZGVpbmUgc3VsZmF0ZSM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wNS4wMCNNZXBlcmlkaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDYuMDAjTW9ycGhpbmUgc3VsZmF0ZSM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wNy4wMCNPeHljb2RvbmUjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDguMDAjU3VmZW50YW5pbCM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMy4wMC4wMCNOYXJjb3RpYyBhbnRhZ29uaXN0cyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMy4wMS4wMCNOYWxtZWZlbmUgaHlkcm9jaGxvcmlkZSM1MS4xNC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMy4wMi4wMCNOYWxveG9uZSBoeWRyb2NobG9yaWRlIzUxLjE0LjIzLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIzLjAzLjAwI05hbHRyZXhvbmUjNTEuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjQuMDAuMDAjRHJ1Z3MgdXNlZCBmb3IgdmFzY3VsYXIgYW5kIG1pZ3JhaW5lIGhlYWRhY2hlcyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNC4wMS4wMCNNZXRoeXNlcmdpZGUgbWFsZWF0ZSM1MS4xNC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNC4wMi4wMCNTdW1hdHJpcHRhbiBzdWNjaW5hdGUjNTEuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjUuMDAuMDAjQW50aXBhcmtpbnNvbiBkcnVncyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNS4wMS4wMCNCcm9tb2NyaXB0aW5lIG1lc3lsYXRlIzUxLjE0LjI1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI1LjAyLjAwI0NhcmJpZG9wYSM1MS4xNC4yNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNS4wMy4wMCNMZXZvZG9wYSM1MS4xNC4yNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNS4wNC4wMCNTZWxlZ2lsaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDAuMDAjU3RpbXVsYW50cyBhbmQgYW5vcmV4aWFudHMjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDEuMDAjQW1waGV0YW1pbmUgc3VsZmF0ZSM1MS4xNC4yNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNi4wMi4wMCNGZW5mbHVyYW1pbmUjNTEuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDMuMDAjTWF6aW5kb2wjNTEuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDQuMDAjUGVtb2xpbmUjNTEuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDUuMDAjUGhlbmRpbWV0cmF6aW5lIHRhcnRyYXRlIzUxLjE0LjI2LjAwLjAwCi11bnNwc2M3IzUxLjE1LjAwLjAwLjAwI0F1dG9ub21pYyBuZXJ2b3VzIHN5c3RlbSBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wMC4wMCNDaG9saW5lcmdpYyBkcnVncyBhbmQgY2hvbGluZXN0ZXJhc2UgaW5oaWJpdG9ycyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wMS4wMCNCZXRoYW5lY2hvbCBjaGxvcmlkZSM1MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wMi4wMCNFZHJvcGhvbml1bSBjaGxvcmlkZSM1MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wMy4wMCNQaHlzb3N0aWdtaW5lIHNhbGljeWxhdGUjNTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTUuMDQuMDAjUGlsb2NhcnBpbmUgbml0cmF0ZSM1MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wMC4wMCNDaG9saW5lcmdpYyBibG9ja2luZyBhZ2VudHMjNTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTYuMDEuMDAjQXRyb3BpbmUgc3VsZmF0ZSM1MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wMi4wMCNCZW56dHJvcGluZSBtZXN5bGF0ZSM1MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wMy4wMCNQcm9jeWNsaWRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wNC4wMCNUcmloZXh5cGhlbmlkeWwgaHlkcm9jaGxvcmlkZSM1MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wMC4wMCNTeW1wYXRob21pbWV0aWMgb3IgYWRyZW5lcmdpYyBkcnVncyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wMS4wMCNBbGJ1dGVyb2wjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDIuMDAjQnJpbW9uaWRpbmUgdGFydHJhdGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDMuMDAjRXBpbmVwaHJpbmUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDQuMDAjRXBpbmVwaHJpbmUgYm9yYXRlIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjA1LjAwI0VwaW5lcGhyaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDYuMDAjSXNvcHJvdGVyZW5vbCM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wNy4wMCNJc29wcm90ZXJlbm9sIHN1bGZhdGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDguMDAjTGV2YXJ0ZXJlbm9sIGJpdGFydHJhdGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDkuMDAjUGhlbnlscHJvcGFub2xhbWluZSBoeWRyb2NobG9yaWRlIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjAwLjAwI0FkcmVuZXJnaWMgYmxvY2tpbmcgYWdlbnRzIzUxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjAxLjAwI0F0ZW5vbG9sIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjAyLjAwI0VzbW9sb2wgaHlkcm9jaGxvcmlkZSM1MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4wMy4wMCNOYWRvbG9sIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjA0LjAwI1BpbmRvbG9sIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjA1LjAwI1RpbW9sb2wgbWFsZWF0ZSM1MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4xMC4wMCNQaGVudG9sYW1pbmUgbWVzeWxhdGUjNTEuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTkuMDAuMDAjU2tlbGV0YWwgbXVzY2xlIHJlbGF4YW50cyBhbmQgY2VudHJhbGx5IGFjdGluZyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOS4wMS4wMCNCYWNsb2ZlbiM1MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOS4wMi4wMCNDaGxvcnpveGF6b25lIzUxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE5LjAzLjAwI0RhbnRyb2xlbmUgc29kaXVtIzUxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE5LjA0LjAwI01ldGhvY2FyYmFtb2wjNTEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTkuMDUuMDAjQ2FyaXNvcHJvZG9sIzUxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE1LjIwLjAwLjAwI05ldXJvbXVzY3VsYXIgYmxvY2tpbmcgYWdlbnRzIzUxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjIwLjAxLjAwI0F0cmFjdXJpdW0gYmVzeWxhdGUjNTEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMjAuMDIuMDAjTWl2YWN1cml1bSBjaHlsb3JpZGUjNTEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMjAuMDMuMDAjUm9jdXJvbml1bSBicm9taWRlIzUxLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjIwLjA0LjAwI1ZlY3Vyb25pdW0gYnJvbWlkZSM1MS4xNS4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNi4wMC4wMC4wMCNEcnVncyBhZmZlY3RpbmcgdGhlIHJlc3BpcmF0b3J5IHRyYWN0IzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjE1LjAwLjAwI0FudGlhc3RobWF0aWMgZHJ1Z3MjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTUuMDEuMDAjQml0b2x0ZXJvbCBtZXN5bGF0ZSM1MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wMi4wMCNOZWRvY3JvbWlsIHNvZGl1bSM1MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wMy4wMCNQaXJidXRlcm9sIGFjZXRhdGUjNTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTUuMDQuMDAjQW1pbm9waHlsbGluZSM1MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wNS4wMCNUaGVvcGh5bGxpbmUjNTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDAuMDAjQW50aWhpc3RhbWluZXMgb3IgSDEgYmxvY2tlcnMjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDEuMDAjQXN0ZW1pem9sZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wMi4wMCNDbGVtYXN0aW5lIGZ1bWFyYXRlIzUxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjAzLjAwI0RleGNobG9ycGhlbmlyYW1pbmUgbWFsZWF0ZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wNC4wMCNEaW1lbmh5ZHJpbmF0ZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wNS4wMCNMZXZvY2FiYXN0aW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDYuMDAjTG9yYXRpZGluZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wNy4wMCNUZXJmZW5hZGluZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNy4wMC4wMCNEcnVncyB1c2VkIGZvciByZXNwaXJhdG9yeSB0cmFjdCBkaXNvcmRlcnMjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDEuMDAjQWNldHlsY3lzdGVpbmUjNTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDIuMDAjQmVyYWN0YW50IzUxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE3LjAzLjAwI0J1ZGVzb25pZGUjNTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDQuMDAjQ29sZm9zY2VyaWwgcGFsbWl0YXRlIzUxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE3LjA1LjAwI0lwcmF0cm9waXVtIGJyb21pZGUjNTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTguMDAuMDAjQ291Z2ggYW5kIGNvbGQgYW5kIGFudGlhbGxlcmd5IHByb2R1Y3RzIzUxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjE4LjAxLjAwI0JlbnpvbmF0YXRlIzUxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE4LjAyLjAwI0d1YWlmZW5lc2luIzUxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE5LjAwLjAwI05hc2FsIGRlY29uZ2VzdGFudHMjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTkuMDEuMDAjT3h5bWV0YXpvbGluZSBoeWRyb2NobG9yaWRlIzUxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE5LjAyLjAwI1BzZXVkb2VwaGVkcmluZSBoeWRyb2NobG9yaWRlIzUxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE5LjAzLjAwI1h5bG9tZXRhem9saW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMDAuMDAuMDAjRHJ1Z3MgYWZmZWN0aW5nIHRoZSBnYXN0cm9pbnRlc3RpbmFsIHN5c3RlbSM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNS4wMC4wMCNBbnRhY2lkcyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNS4wMS4wMCNDYWxjaXVtIGNhcmJvbmF0ZSM1MS4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNS4wMi4wMCNNYWdhbGRyYXRlIzUxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE1LjAzLjAwI01hZ25lc2l1bSBoeWRyb3hpZGUjNTEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTUuMDQuMDAjU29kaXVtIGJpY2FyYm9uYXRlIGFudGFjaWRzIzUxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjAwLjAwI0xheGF0aXZlcyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wMS4wMCNDYXNjYXJhIHNhZ3JhZGEjNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDIuMDAjRG9jdXNhdGUgY2FsY2l1bSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wMy4wMCNEb2N1c2F0ZSBwb3Rhc3NpdW0jNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDQuMDAjRG9jdXNhdGUgc29kaXVtIzUxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjA1LjAwI0xhY3R1bG9zZSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wNi4wMCNNYWduZXNpdW0gc3VsZmF0ZSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wNy4wMCNQc3lsbGl1bSBoeWRyb3BoaWxpYyBtdWNpbG9pZCM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNy4wMC4wMCNBbnRpZGlhcnJoZWFscyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNy4wMS4wMCNEaWZlbm94aW4gaHlkcm9jaGxvcmlkZSM1MS4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNy4wMi4wMCNMb3BlcmFtaWRlIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTcuMDMuMDAjUGFyZWdvcmljIzUxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjAwLjAwI0FudGllbWV0aWNzIGFuZCBhbnRpbmF1c2VhbnRzIzUxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjAxLjAwI0Ryb25hYmlub2wjNTEuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTguMDIuMDAjR3JhbmlzZXRyb24gaHlkcm9jaGxvcmlkZSM1MS4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOC4wMy4wMCNNZWNsaXppbmUgaHlkcm9jaGxvcmlkZSM1MS4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOC4wNC4wMCNPbmRhbnNldHJvbiBoeWRyb2NobG9yaWRlIzUxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjA1LjAwI1RyaW1ldGhvYmVuemFtaWRlIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDAuMDAjQW50aXVsY2VyIGFuZCByZWxhdGVkIGdhc3Ryb2ludGVzdGluYWwgKEdJKSBkcnVncyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wMS4wMCNDaW1ldGlkaW5lIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjAyLjAwI0ZhbW90aWRpbmUjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDMuMDAjTml6YXRpZGluZSM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wNC4wMCNSYW5pdGlkaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDUuMDAjQ2lzYXByaWRlIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjA2LjAwI0xhbnNvcHJhem9sZSM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wNy4wMCNMaWJyYXgjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDguMDAjTWlzb3Byb3N0b2wjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMjAuMDAuMDAjRHJ1Z3MgdXNlZCBmb3IgZ2FsbGJsYWRkZXIgZGlzZWFzZSM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4yMC4wMS4wMCNDaGVub2Rpb2wjNTEuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMjAuMDIuMDAjTW9ub2N0YW5vaW4jNTEuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMjAuMDMuMDAjVXJzb2Rpb2wjNTEuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMDAuMDAuMDAjSG9ybW9uZXMgYW5kIGhvcm1vbmUgYW50YWdvbmlzdHMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDAuMDAjQW50aWRpYWJldGljIGFnZW50cyBhbmQgaHlwZXJnbHljZW1pYyBhZ2VudHMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDEuMDAjQWNhcmJvc2UjNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDIuMDAjQWNldG9oZXhhbWlkZSM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wMy4wMCNDaGxvcnByb3BhbWlkZSM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wNC4wMCNHbGltZXBpcmlkZSM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wNS4wMCNHbGlwaXppZGUjNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDYuMDAjSW5zdWxpbiM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wOC4wMCNHbHVjYWdvbiM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wMC4wMCNUaHlyb2lkIGFuZCBhbnRpdGh5cm9pZCBkcnVncyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wMS4wMCNMZXZvdGh5cm94aW5lIHNvZGl1bSM1MS4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wMi4wMCNMaW90aHlyb25pbmUgc29kaXVtIzUxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE2LjAzLjAwI0xpb3RyaXgjNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDQuMDAjVGh5cm90cm9waW4jNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDUuMDAjTWV0aGltYXpvbGUjNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDYuMDAjUHJvcHlsdGhpb3VyYWNpbCM1MS4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wMC4wMCNDb3J0aWNvc3Rlcm9pZHMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDEuMDAjQmV0YW1ldGhhc29uZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wMi4wMCNDb3J0aWNvdHJvcGluIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjAzLjAwI0Nvc3ludHJvcGluIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjA0LjAwI0RleGFtZXRoYXNvbmUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDUuMDAjRmx1bmlzb2xpZGUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDYuMDAjSHlkcm9jb3J0aXNvbmUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDcuMDAjTWV0aHlscHJlZG5pc29sb25lIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjA4LjAwI1ByZWRuaXNvbG9uZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wOS4wMCNUcmlhbWNpbm9sb25lIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjAwLjAwI0VzdHJvZ2VucyBhbmQgcHJvZ2VzdGlucyBhbmQgaW50ZXJuYWwgY29udHJhY2VwdGl2ZXMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDEuMDAjQ2hsb3JvdHJpYW5pc2VuZSM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wMi4wMCNFc3Ryb25lIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjAzLjAwI0VzdHJvZ2VucyBjb25qdWdhdGVkIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA0LjAwI0VzdHJvcGlwYXRlIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA1LjAwI0xldm9ub3JnZXN0cmVsIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA2LjAwI01lZ2VzdHJvbCBhY2V0YXRlIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA3LjAwI0V0aGlueWwgZXN0cmFkaW9sIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA4LjAwI01lc3RyYW5vbCM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wMC4wMCNHb25hZG90cm9waWMgaG9ybW9uZXMgYW5kIG92YXJpYW4gc3RpbXVsYW50cyBhbmQgaW5oaWJpdG9ycyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wMS4wMCNDaG9yaW9uaWMgZ29uYWRvdHJvcGluIzUxLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE5LjAyLjAwI0RhbmF6b2wjNTEuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTkuMDMuMDAjR29uYWRvcmVsaW4gYWNldGF0ZSM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wNC4wMCNIaXN0cmVsaW4gYWNldGF0ZSM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wNS4wMCNNZW5vdHJvcGlucyM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wNi4wMCNVcm9mb2xsaXRyb3BpbiM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMC4wMC4wMCNBbmRyb2dlbnMgYW5kIGFuZHJvZ2VuIGluaGliaXRvcnMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDEuMDAjRmluYXN0ZXJpZGUjNTEuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDIuMDAjVGVzdG9zdGVyb25lIzUxLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIwLjAzLjAwI1Rlc3Rvc3Rlcm9uZSBjeXBpb25hdGUjNTEuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDQuMDAjVGVzdG9zdGVyb25lIGVuYW50aGF0ZSM1MS4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMC4wNS4wMCNUZXN0b3N0ZXJvbmUgcHJvcGlvbmF0ZSM1MS4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMS4wMC4wMCNQb3N0ZXJpb3IgcGl0dWl0YXJ5IGhvcm1vbmVzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIxLjAxLjAwI0Rlc21vcHJlc3NpbiBhY2V0YXRlIzUxLjE4LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIxLjAyLjAwI1Zhc29wcmVzc2luIzUxLjE4LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIyLjAwLjAwI0RydWdzIGZvciBpbmR1Y2luZyBsYWJvciM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMi4wMS4wMCNEaW5vcHJvc3RvbmUjNTEuMTguMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjIuMDIuMDAjTWV0aHlsZXJnb25vdmluZSBtYWxlYXRlIzUxLjE4LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIyLjAzLjAwI094eXRvY2luIzUxLjE4LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIzLjAwLjAwI0dyb3d0aCBob3Jtb25lcyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMy4wMS4wMCNTb21hdHJlbSM1MS4xOC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMy4wMi4wMCNTb21hdHJvcGluIzUxLjE4LjIzLjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjAwLjAwI0NhbGNpdW0gc2FsdHMgYW5kIGNhbGNpdW0gcmVndWxhdG9ycyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wMS4wMCNDYWxjaXVtIGNobG9yaWRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjAyLjAwI0NhbGNpdW0gY2l0cmF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wMy4wMCNDYWxjaXVtIGdsdWNvbmF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wNC4wMCNDYWxjaXVtIGxhY3RhdGUjNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDUuMDAjRGliYXNlIGNhbGNpdW0gcGhvc3BoYXRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA2LjAwI0FsZW5kcm9uYXRlIHNvZGl1bSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wNy4wMCNDYWxjaXRvbmluIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA4LjAwI0NlbGx1bG9zZSBzb2RpdW0gcGhvc3BoYXRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA5LjAwI0dhbGxpdW0gbml0cmF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOS4wMC4wMC4wMCNBZ2VudHMgYWZmZWN0aW5nIHdhdGVyIGFuZCBlbGVjdHJvbHl0ZXMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDAuMDAjRGl1cmV0aWNzIzUxLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjAxLjAwI0NobG9yb3RoaWF6aWRlIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjAyLjAwI0NobG9ydGhhbGlkb25lIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjAzLjAwI01lbnRvbGF6b25lIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA0LjAwI0J1bWV0YW5pZGUjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDUuMDAjRXRoYWNyeW5hdGUgc29kaXVtIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA2LjAwI0FtaWxvcmlkZSBoeWRyb2NobG9yaWRlIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA3LjAwI1NwaXJvbm9sYWN0b25lIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA4LjAwI1RyaWFtdGVyZW5lIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA5LjAwI01hbm5pdG9sIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE2LjAwLjAwI0VsZWN0cm9seXRlcyM1MS4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNi4wMS4wMCNEZXh0cm9zZSM1MS4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNi4wMi4wMCNTb2RpdW0gY2hsb3JpZGUgZWxlY3Ryb2x5dGVzIzUxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE3LjAwLjAwI0Fsa2FsaW5pemluZyBhZ2VudHMjNTEuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTcuMDEuMDAjVHJvbWV0aGFtaW5lIzUxLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE4LjAwLjAwI1BvdGFzc2l1bSBzYWx0cyM1MS4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xOC4wMS4wMCNQb3Rhc3NpdW0gYmljYXJib25hdGUjNTEuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTguMDIuMDAjUG90YXNzaXVtIGNobG9yaWRlIzUxLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE4LjAzLjAwI1BvdGFzc2l1bSBnbHVjb25hdGUjNTEuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTEuMjAuMDAuMDAuMDAjSW1tdW5vbW9kdWxhdGluZyBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNS4wMC4wMCNJbW11bm9zdXBwcmVzc2FudHMjNTEuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTUuMDEuMDAjQXphdGhpb3ByaW5lIzUxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE1LjAyLjAwI0N5Y2xvc3BvcmluZSM1MS4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNS4wMy4wMCNNeWNvcGhlbm9sYXRlIG1vZmV0aWwjNTEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTUuMDQuMDAjVGFjcm9saW11cyM1MS4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wMC4wMCNWYWNjaW5lcyM1MS4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wMS4wMCNBbnRocmF4IGFudGlnZW4jNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDIuMDAjQnJ1Y2VsbGEgYW50aWdlbiM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wMy4wMCNDaG9sZXJhIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA0LjAwI0RpcGh0ZXJpYSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wNS4wMCNFbmNlcGhhbGl0aXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDYuMDAjSGVtb3BoaWx1cyBpbmZsdWVuemFlIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA3LjAwI0hlcGF0aXRpcyBiIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA4LjAwI0luZmx1ZW56YSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wOS4wMCNNZWFzbGVzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjEwLjAwI01lbmluZ29jb2NjdXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTEuMDAjTW9yYmlsbGkjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTIuMDAjTXVtcHMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTMuMDAjUGFyb3RpdGlzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjE0LjAwI1BlcnR1c3NpcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xNS4wMCNQbmV1bW9jb2NjdXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTYuMDAjUG9saW9teWVsaXRpcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xNy4wMCNSYWJpZXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTguMDAjUm90YSB2aXJ1cyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xOS4wMCNSdWJlbGxhIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjIwLjAwI1NtYWxscG94IzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjIxLjAwI1RldGFudXMgdG94b2lkIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjIyLjAwI1R1YmVyY3Vsb3NpcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yMy4wMCNUeXBob2lkIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjI0LjAwI1ZhcmljZWxsYSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yNS4wMCNZZWxsb3cgZmV2ZXIjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMjYuMDAjSGVwYXRpdGlzIGEjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMDAuMDAuMDAjTWlzY2VsbGFuZW91cyBkcnVnIGNhdGVnb3JpZXMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTUuMDAuMDAjQW50aWdvdXQgZHJ1Z3MjNTEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTUuMDEuMDAjQWxsb3B1cmlub2wjNTEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTUuMDIuMDAjQ29sY2hpY2luZSM1MS4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNS4wMy4wMCNQcm9iZW5lY2lkIzUxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE1LjA0LjAwI1N1bGZpbnB5cmF6b25lIzUxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjAwLjAwI0FudGlkb3RlcyM1MS4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wMS4wMCNEZWZlcm94YW1pbmUgbWVzeWxhdGUjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDIuMDAjRGV4cmF6b3hhbmUjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDMuMDAjRGlnb3hpbiBpbW11bmUgZmFiIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjA0LjAwI0RpbWVyY2Fwcm9sIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjA1LjAwI0VkZXRhdGUgZGlzb2RpdW0jNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDYuMDAjRmx1bWF6ZW5pbCM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wNy4wMCNJcGVjYWMjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDguMDAjUGVuaWNpbGxhbWluZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wOS4wMCNQcm90YW1pbmUgc3VsZmF0ZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4xMC4wMCNTb2RpdW0gcG9seXN0eXJlbmUgc3VsZm9uYXRlIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjExLjAwI1RyaWVudGluZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNy4wMC4wMCNOdXRyaXRpb3VzIGZvb2QjNTEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTcuMDEuMDAjUmVzaWR1ZSBvZiBtYWl6ZSBnZXJtIzUxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE4LjAwLjAwI0FuYWVzdGhldGljIGRydWdzIzUxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIxLjE4LjAxLjAwI0NobG9yb2Zvcm0jNTEuMjEuMTguMDAuMDAKLXVuc3BzYzcjNTIuMDAuMDAuMDAuMDAjRG9tZXN0aWMgQXBwbGlhbmNlcyBhbmQgU3VwcGxpZXMgYW5kIENvbnN1bWVyIEVsZWN0cm9uaWMgUHJvZHVjdHMjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMDAuMDAuMDAjRmxvb3IgY292ZXJpbmdzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjAwLjAwI1J1Z3MgYW5kIG1hdHMjNTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDEuMDAjT3JpZW50YWwgcnVncyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wMi4wMCNBcmVhIHJ1Z3MjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDMuMDAjV29vbCBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA0LjAwI0NvdHRvbiBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA1LjAwI1N5bnRoZXRpYyBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA2LjAwI0JyYWlkZWQgcnVncyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wNy4wMCNCYXRoIG1hdHMjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDguMDAjRG9vciBtYXRzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA5LjAwI0RlY29yYXRpdmUgbWF0cyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4xMC4wMCNBbnRpIGZhdGlndWUgbWF0cyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4xMS4wMCNSdWJiZXIgb3IgdmlueWwgbWF0cyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4xMi4wMCNDaGFpciBtYXQjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMTMuMDAjQ2FycGV0IHByb3RlY3RvciM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4wMC4wMC4wMCNBY2NvbW1vZGF0aW9uIGZ1cm5pdHVyZSM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wMC4wMCNGdXJuaXR1cmUjNTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDEuMDAjU29mYXMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDIuMDAjU3RhbmRzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjAzLjAwI0Jvb2tjYXNlcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wNC4wMCNFbnRlcnRhaW5tZW50IGNlbnRlcnMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDUuMDAjRnV0b25zIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjA2LjAwI0NoYWlycyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wNy4wMCNDb2F0IHJhY2tzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjA4LjAwI1dhbGwgcmFja3MjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDkuMDAjTWF0dHJlc3NlcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xMC4wMCNDb3RzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjExLjAwI0JlZHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTIuMDAjRm9vdCBzdG9vbHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTMuMDAjVGFibGVzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjE0LjAwI0NoZXN0cyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xNS4wMCNTdG9vbHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTYuMDAjRHJlc3NlcnMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTcuMDAjUGFydGl0aW9ucyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wMC4wMCNPdXRkb29yIGZ1cm5pdHVyZSM1Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wMS4wMCNPdXRkb29yIGNoYWlycyM1Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wMi4wMCNPdXRkb29yIHRhYmxlcyBvciBwaWNuaWMgdGFibGVzIzUyLjExLjE2LjAwLjAwCi11bnNwc2M3IzUyLjExLjE2LjAzLjAwI091dGRvb3Igc3dpbmdzIzUyLjExLjE2LjAwLjAwCi11bnNwc2M3IzUyLjExLjE2LjA0LjAwI091dGRvb3IgYmVuY2hlcyM1Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wNS4wMCNPdXRkb29yIHVtYnJlbGxhcyM1Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNy4wMC4wMCNPZmZpY2UgZnVybml0dXJlIzUyLjExLjAwLjAwLjAwCi11bnNwc2M3IzUyLjExLjE3LjAxLjAwI0NyZWRlbnphcyM1Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNy4wMy4wMCNEZXNrcyM1Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMi4wMC4wMC4wMCNCZWRjbG90aGVzIGFuZCB0YWJsZSBhbmQga2l0Y2hlbiBsaW5lbiBhbmQgdG93ZWxzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjAwLjAwI0JlZGNsb3RoZXMjNTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDEuMDAjUXVpbHRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjAyLjAwI0NvbWZvcnRlcnMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDMuMDAjQ29tZm9ydGVyIGNvdmVycyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wNC4wMCNNYXR0cmVzcyBjb3ZlcnMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDUuMDAjUGlsbG93cyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wNi4wMCNNYXR0cmVzcyBwYWRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA3LjAwI0ZlYXRoZXJiZWRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA4LjAwI0JsYW5rZXRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA5LjAwI1NoZWV0cyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4xMC4wMCNEdXN0IHJ1ZmZsZXMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMTEuMDAjRHV2ZXRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjEyLjAwI1BpbGxvdyBjYXNlcyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4xMy4wMCNCZWQgc3ByZWFkcyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wMC4wMCNUYWJsZSBhbmQga2l0Y2hlbiBsaW5lbiM1Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wMS4wMCNEaXNoIHRvd2VscyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wMi4wMCNOYXBraW5zIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjAzLjAwI1RhYmxlIHJ1bm5lcnMjNTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDQuMDAjVGFibGUgY2xvdGhzIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjA1LjAwI0RvbWVzdGljIG92ZW4gbWl0cyBvciBwb3QgaG9sZGVycyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wNi4wMCNQbGFjZSBtYXRzIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjA3LjAwI1RhYmxlIHNraXJ0cyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNy4wMC4wMCNUb3dlbHMjNTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTcuMDEuMDAjQmF0aCB0b3dlbHMjNTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTcuMDIuMDAjQmVhY2ggdG93ZWxzIzUyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE3LjAzLjAwI1dhc2ggY2xvdGhzIzUyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE3LjA0LjAwI0hhbmQgdG93ZWxzIzUyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEzLjAwLjAwLjAwI1dpbmRvdyB0cmVhdG1lbnRzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEzLjE1LjAwLjAwI0N1cnRhaW5zIGFuZCBkcmFwZXJpZXMjNTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTUuMDEuMDAjQ3VydGFpbnMjNTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTUuMDMuMDAjRHJhcGVyaWVzIzUyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE2LjAwLjAwI0JsaW5kcyBhbmQgc2hhZGVzIzUyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEzLjE2LjAxLjAwI1ZlbmV0aWFuIGJsaW5kcyM1Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNi4wMi4wMCNSb2xsIHVwIHNoYWRlcyM1Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNi4wMy4wMCNJbnRlcmlvciBzaHV0dGVycyM1Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNi4wNC4wMCNWZXJ0aWNhbCBibGluZHMjNTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTcuMDAuMDAjV2luZG93IHRyZWF0bWVudCBhY2Nlc3NvcmllcyBhbmQgaGFyZHdhcmUjNTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTcuMDEuMDAjVmFsYW5jZXMjNTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTcuMDIuMDAjQ3VydGFpbiByb2RzIzUyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE3LjAzLjAwI1JvZCBmaW5pYWxzIzUyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE3LjA0LjAwI0N1cnRhaW4gcmluZ3Mgb3IgY2xpcHMjNTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMDAuMDAuMDAjRG9tZXN0aWMgYXBwbGlhbmNlcyM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wMC4wMCNEb21lc3RpYyBraXRjaGVuIGFwcGxpYW5jZXMjNTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDEuMDAjRG9tZXN0aWMgcmVmcmlnZXJhdG9ycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wMi4wMCNEb21lc3RpYyBtaWNyb3dhdmUgb3ZlbnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDMuMDAjRG9tZXN0aWMgZ2FyYmFnZSBkaXNwb3NhbHMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDQuMDAjRG9tZXN0aWMgcmFuZ2VzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA1LjAwI0RvbWVzdGljIGRpc2ggd2FzaGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wNi4wMCNEb21lc3RpYyBmcmVlemVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wNy4wMCNEb21lc3RpYyB1cHJpZ2h0IGZyZWV6ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA4LjAwI0RvbWVzdGljIGNoZXN0IGZyZWV6ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA5LjAwI0RvbWVzdGljIGNvbWJpbmF0aW9uIHJlZnJpZ2VyYXRvciBmcmVlemVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xMC4wMCNEb21lc3RpYyBwb3J0YWJsZSBhaXIgY29uZGl0aW9uZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjExLjAwI0RvbWVzdGljIGp1aWNlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTIuMDAjRG9tZXN0aWMgd2FmZmxlIGlyb25zIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjEzLjAwI0RvbWVzdGljIGVsZWN0cmljIGNhbiBvcGVuZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE0LjAwI0RvbWVzdGljIGZvb2QgcHJvY2Vzc29ycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xNS4wMCNEb21lc3RpYyB0cmFzaCBjb21wYWN0b3JzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE2LjAwI0RvbWVzdGljIGRlZXAgZnJ5ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE3LjAwI0RvbWVzdGljIHBvcGNvcm4gcG9wcGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xOC4wMCNEb21lc3RpYyBicmVhZCBtYWtpbmcgbWFjaGluZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTkuMDAjRG9tZXN0aWMgY29udmVjdGlvbmFsIG92ZW5zIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjIwLjAwI0RvbWVzdGljIG1peGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yMS4wMCNEb21lc3RpYyB0b2FzdGVyIG92ZW5zIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjIyLjAwI0RvbWVzdGljIHRvYXN0ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjIzLjAwI0RvbWVzdGljIGVsZWN0cmljYWwga2V0dGxlcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yNC4wMCNEb21lc3RpYyBibGVuZGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yNS4wMCNEb21lc3RpYyBob3QgcGxhdGVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjI2LjAwI0RvbWVzdGljIGNvZmZlZSBtYWtlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjcuMDAjRG9tZXN0aWMgZWxlY3RyaWMga25pdmVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjI4LjAwI0RvbWVzdGljIGVsZWN0cmljIHdva3MjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjkuMDAjRG9tZXN0aWMgY29mZmVlIGdyaW5kZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjMwLjAwI1BhcnRzIG9mIGRpc2h3YXNoaW5nIG1hY2hpbmVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjMxLjAwI0RvbWVzdGljIGZvb2QgY2hvcHBlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzIuMDAjRG9tZXN0aWMgZWxlY3RyaWMgc2tpbGxldHMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzMuMDAjRG9tZXN0aWMgZWxlY3RyaWMgZ3JpZGRsZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzQuMDAjRG9tZXN0aWMgZWxlY3RyaWMgc2FuZHdpY2ggbWFrZXIjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzUuMDAjRG9tZXN0aWMgaW5kb29yIGVsZWN0cmljIGdyaWxscyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zNi4wMCNEb21lc3RpYyBwaXplbGxlIG9yIGNvb2tpZSBtYWtlciM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zNy4wMCNEb21lc3RpYyBjcm9jayBwb3QjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDAuMDAjRG9tZXN0aWMgbGF1bmRyeSBhcHBsaWFuY2VzIGFuZCBzdXBwbGllcyM1Mi4xNC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wMS4wMCNEb21lc3RpYyBjbG90aGVzIHdhc2hlcnMjNTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDIuMDAjRG9tZXN0aWMgdHVtYmxlIGRyeWVycyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wMy4wMCNEb21lc3RpYyBjbG90aGluZyBpcm9ucyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wNC4wMCNGb290d2VhciBkcnllcnMjNTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDUuMDAjTGF1bmRyeSBoYW1wZXJzIzUyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE2LjA2LjAwI0xhdW5kcnkgYmFza2V0cyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNy4wMC4wMCNEb21lc3RpYyBiYXRoIGFwcGxpYW5jZXMjNTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTcuMDEuMDAjRG9tZXN0aWMgZWxlY3RyaWMgdG9vdGhicnVzaGVzIzUyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE3LjAzLjAwI0RvbWVzdGljIGhhaXIgZHJ5ZXJzIzUyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE3LjA0LjAwI0RvbWVzdGljIGVsZWN0cmljIHJhem9ycyM1Mi4xNC4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNy4wNS4wMCNQYXJ0cyBvZiBzaGF2ZXJzIG9yIGhhaXIgcmVtb3ZlcnMjNTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTcuMDYuMDAjTmFpbCBkcnllcnMjNTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTguMDAuMDAjT3RoZXIgZG9tZXN0aWMgaG91c2Vob2xkIGFwcGxpYW5jZXMjNTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTguMDEuMDAjRG9tZXN0aWMgc2V3aW5nIG1hY2hpbmVzIzUyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE4LjAyLjAwI0RvbWVzdGljIHNwYWNlIGhlYXRlcnMjNTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTguMDMuMDAjRG9tZXN0aWMgZWxlY3RyaWMgYmxhbmtldHMjNTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMDAuMDAuMDAjRG9tZXN0aWMga2l0Y2hlbndhcmUjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDAuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBraXRjaGVud2FyZSM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wMS4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIGNvb2t3YXJlIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjAyLjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgZGlzaGVzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjAzLjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgZmxhdHdhcmUjNTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDQuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBjdXBzIG9yIGdsYXNzZXMgb3IgbGlkcyM1Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wNS4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIHN0aXJyZXJzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjA2LjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgZm9vZCBjb250YWluZXJzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjA3LjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgZHJpbmtpbmcgc3RyYXdzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjAwLjAwI0RvbWVzdGljIGtpdGNoZW4gdG9vbHMgYW5kIHV0ZW5zaWxzIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjAxLjAwI0RvbWVzdGljIHJvbGxpbmcgcGlucyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wMi4wMCNEb21lc3RpYyBtaXhpbmcgYm93bHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDMuMDAjRG9tZXN0aWMgZ3JhdGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wNC4wMCNEb21lc3RpYyBzdHJhaW5lcnMgb3IgY29sYW5kZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjA1LjAwI0RvbWVzdGljIGNhbiBvciBib3R0bGUgb3BlbmVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wNi4wMCNEb21lc3RpYyBjdXR0aW5nIGJvYXJkcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wNy4wMCNEb21lc3RpYyBtZWFzdXJpbmcgY3VwcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wOC4wMCNCYXN0ZXJzIG9yIGJhc3RpbmcgYnJ1c2hlcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wOS4wMCNWZWdldGFibGUgcGVlbGVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjEwLjAwI0Nvb2tpZSBjdXR0ZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjExLjAwI0RvbWVzdGljIGtpdGNoZW4gdG9uZ3MjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTIuMDAjRG9tZXN0aWMga2l0Y2hlbiB3aXJlIHdoaXBzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjEzLjAwI0RvbWVzdGljIGZvb2Qgc2NyYXBlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTQuMDAjRG9tZXN0aWMgY29vbGluZyByYWNrcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xNS4wMCNEb21lc3RpYyBwaXp6YSBjdXR0ZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjE2LjAwI0RvbWVzdGljIGtpdGNoZW4gc3BhdHVsYXMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTcuMDAjRG9tZXN0aWMgd29vZGVuIHNwb29ucyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xOC4wMCNEb21lc3RpYyB3b29kZW4gb3ZlbiBwYWRkbGUjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTkuMDAjRG9tZXN0aWMgcGFzdHJ5IGJsZW5kZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjAuMDAjRG9tZXN0aWMgc2lmdGVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjIxLjAwI0RvbWVzdGljIGNvb2tpZSBzdGFtcGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yMi4wMCNEb21lc3RpYyBwYXN0cnkgZGVjb3JhdGluZyBndW4jNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjMuMDAjRG9tZXN0aWMgY29va2llIHByZXNzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI0LjAwI0RvbWVzdGljIGtuaWZlIHNoYXJwZW5lcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjUuMDAjRG9tZXN0aWMgYmlzY3VpdCBjdXR0ZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI2LjAwI0RvbWVzdGljIG1hbmRvbGluIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI3LjAwI0RvbWVzdGljIGdhcmxpYyBwcmVzcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yOC4wMCNEb21lc3RpYyBlZ2cgc2xpY2VyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI5LjAwI0RvbWVzdGljIGVnZyBzZXBhcmF0b3IjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzAuMDAjRG9tZXN0aWMgY2hlZXNlIHNsaWNlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zMS4wMCNEb21lc3RpYyBmb29kIG1pbGwjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzIuMDAjRG9tZXN0aWMga2l0Y2hlbiBmdW5uZWxzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjMzLjAwI0RvbWVzdGljIGdhcm5pc2hpbmcgdG9vbHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzQuMDAjRG9tZXN0aWMgYXBwbGUgY29yZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzUuMDAjRG9tZXN0aWMgbWVsb24gb3IgYnV0dGVyIGJhbGxlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zNi4wMCNEb21lc3RpYyBmb29kIHNjb29wcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zNy4wMCNEb21lc3RpYyBwdW1wa2luIGNhcnZlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zOC4wMCNEb21lc3RpYyB2ZWdldGFibGUgYnJ1c2gjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzkuMDAjRG9tZXN0aWMgZWdnIGJlYXRlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40MC4wMCNEb21lc3RpYyBwYXN0YSBkcnlpbmcgcmFjayM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40MS4wMCNEb21lc3RpYyB3aGlwcGVkIGNyZWFtIG1ha2VyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQyLjAwI0RvbWVzdGljIGRvdWdoIHByZXNzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQzLjAwI0RvbWVzdGljIHJhdmlvbGkgbWFrZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDQuMDAjRG9tZXN0aWMgbWlzdCBzcHJheWVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ1LjAwI0RvbWVzdGljIHBhc3RyeSBicnVzaCM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40Ni4wMCNEb21lc3RpYyBraXRjaGVuIG9yIGRpZXQgc2NhbGVzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ3LjAwI0RvbWVzdGljIGtpdGNoZW4gdGltZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ4LjAwI0RvbWVzdGljIGtpdGNoZW4gb3IgZm9vZCB0aGVybW9tZXRlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDkuMDAjRG9tZXN0aWMgYnJlYWQgc2xpY2luZyBndWlkZSM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi41MC4wMCNEb21lc3RpYyBkcmFpbiBib2FyZHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDAuMDAjRG9tZXN0aWMgZmxhdHdhcmUgYW5kIGN1dGxlcnkjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDEuMDAjRG9tZXN0aWMgc2VydmluZyB1dGVuc2lscyM1Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNy4wMi4wMCNEb21lc3RpYyBrbml2ZXMjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDMuMDAjRG9tZXN0aWMgZm9ya3MjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDQuMDAjRG9tZXN0aWMgc3Bvb25zIzUyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjA1LjAwI1Nwb29uIHJlc3RzIzUyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjA2LjAwI0Nob3BzdGlja3MjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDAuMDAjRG9tZXN0aWMgY29va3dhcmUjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDEuMDAjRG9tZXN0aWMgZHV0Y2ggb3ZlbnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDIuMDAjRG9tZXN0aWMgZnJ5aW5nIHBhbnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDMuMDAjRG9tZXN0aWMgc2F1Y2VwYW5zIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjA0LjAwI0RvbWVzdGljIGtldHRsZXMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDUuMDAjRG9tZXN0aWMgd29rcyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wNi4wMCNEb21lc3RpYyBzdGVhbWVycyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wNy4wMCNEb21lc3RpYyBzdG9jayBwb3RzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjA4LjAwI0RvbWVzdGljIHByZXNzdXJlIGNvb2tlcnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDkuMDAjRG9tZXN0aWMgc2F1dGUgcGFucyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4xMC4wMCNEb21lc3RpYyBjaGFmaW5nIGRpc2hlcyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4xMS4wMCNEb21lc3RpYyBncmlkZGxlcyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4xMi4wMCNEb21lc3RpYyBkb3VibGUgYm9pbGVycyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4xMy4wMCNEb21lc3RpYyBzcGxhdHRlciBzaGllbGQjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDAuMDAjRG9tZXN0aWMgYmFrZXdhcmUjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDEuMDAjRG9tZXN0aWMgbXVmZmluIHBhbnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDIuMDAjRG9tZXN0aWMgYmFraW5nIHBhbnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDMuMDAjRG9tZXN0aWMgY2FrZSBvciBwaWUgcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wNC4wMCNEb21lc3RpYyByb2FzdGluZyBwYW5zIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjA1LjAwI0RvbWVzdGljIGJha2luZyBzaGVldHMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDYuMDAjRG9tZXN0aWMgYnJvaWxpbmcgcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wNy4wMCNEb21lc3RpYyBiYWtpbmcgbW9sZHMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDguMDAjRG9tZXN0aWMgcGl6emEgcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wOS4wMCNEb21lc3RpYyB0b3J0aWxsYSBiYWtlcnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDAuMDAjRG9tZXN0aWMgZGlzaGVzIGFuZCBzZXJ2aW5nd2FyZSBhbmQgc3RvcmFnZSBjb250YWluZXJzIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjAxLjAwI0RvbWVzdGljIHBpdGNoZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjAyLjAwI0RvbWVzdGljIGZvb2Qgc3RvcmFnZSBjb250YWluZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjAzLjAwI0RvbWVzdGljIHB1bmNoIGJvd2xzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA0LjAwI0RvbWVzdGljIHBsYXRlcyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wNS4wMCNEb21lc3RpYyBzYXVjZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA2LjAwI0RvbWVzdGljIHRyYXlzIG9yIHBsYXR0ZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA3LjAwI0RvbWVzdGljIHNlcnZpbmcgYm93bHMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDguMDAjRG9tZXN0aWMgdGVhIG9yIGNvZmZlZSBwb3RzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA5LjAwI0RvbWVzdGljIHNvdXAgb3Igc2FsYWQgYm93bHMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTAuMDAjRG9tZXN0aWMgdmFjdXVtIGZsYXNrcyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4xMS4wMCNJbm5lcnMgZm9yIHZhY2N1bSBmbGFza3MjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTIuMDAjSWNlIHRyYXlzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjEzLjAwI1NwaWNlIG9yIHNhbHQgb3IgcGVwcGVyIHNoYWtlcnMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTQuMDAjQ2FyYWZlIHNldHMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTUuMDAjRG9tZXN0aWMgY2FrZSBwbGF0ZSB3aXRoIGRvbWUjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjEuMDAuMDAjRG9tZXN0aWMgZHJpbmtpbmcgdXRlbnNpbHMjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjEuMDEuMDAjRG9tZXN0aWMgY29mZmVlIG9yIHRlYSBjdXBzIzUyLjE1LjIxLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIxLjAyLjAwI0RvbWVzdGljIGRyaW5raW5nIGdsYXNzZXMjNTIuMTUuMjEuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjEuMDMuMDAjRG9tZXN0aWMgbXVncyM1Mi4xNS4yMS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMS4wNC4wMCNEb21lc3RpYyBzdGVtd2FyZSM1Mi4xNS4yMS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMi4wMC4wMCNEaXNod2FzaGluZyBhbmQgZGlzaCBzdG9yYWdlIGFjY2Vzc29yaWVzIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIyLjAxLjAwI1NoZWxmIGxpbmVyIzUyLjE1LjIyLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIyLjAyLjAwI0Rpc2ggZHJhaW5lciM1Mi4xNS4yMi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMi4wMy4wMCNTb2FwIGRpc3BlbnNpbmcgYnJ1c2gjNTIuMTUuMjIuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMDAuMDAuMDAjQ29uc3VtZXIgZWxlY3Ryb25pY3MjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDAuMDAjQXVkaW8gYW5kIHZpc3VhbCBlcXVpcG1lbnQjNTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDEuMDAjQ29tcGFjdCBkaXNjIHBsYXllcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDIuMDAjQ2Fzc2V0dGUgcGxheWVycyBvciByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDMuMDAjRGlnaXRhbCB2aWRlbyBkaXNjIHBsYXllcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDQuMDAjVmlkZW8gY2Fzc2V0dGUgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA1LjAwI1RlbGV2aXNpb25zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA2LjAwI0hlYWRwaG9uZXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDcuMDAjQ2xvY2sgcmFkaW9zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA4LjAwI0xhc2VyIGRpc2MgcGxheWVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wOS4wMCNQb3J0YWJsZSBzdGVyZW8gc3lzdGVtcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xMC4wMCNIb21lIHN0ZXJlbyBzeXN0ZW1zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjExLjAwI1JhZGlvcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xMi4wMCNTcGVha2VycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xMy4wMCNDb21iaW5hdGlvbiB0ZWxldmlzaW9uIHZpZGVvIGNhc3NldHRlIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xNC4wMCNIZWFkcGhvbmVzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjE1LjAwI0NvbXBhY3QgZGlzayBwbGF5ZXJzIG9yIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xNi4wMCNEaWdpdGFsIHZpZGVvIGRpc2sgcGxheWVycyBvciByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTcuMDAjRXF1YWxpemVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xOC4wMCNHbG9iYWwgcG9zaXRpb25pbmcgc3lzdGVtIHJlY2VpdmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xOS4wMCNIZWFkcGhvbmVzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjIwLjAwI01pY3JvcGhvbmVzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjIxLjAwI011bHRpbWVkaWEgcmVjZWl2ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjIyLjAwI1JhZGlvIGZyZXF1ZW5jeSBzY2FubmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yMy4wMCNSYWRpbyBmcmVxdWVuY3kgdHJhbnNtaXR0ZXJzcmVjZWl2ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjI0LjAwI1JhZGlvIHJlY2VpdmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yNS4wMCNSZW1vdGUgY29udHJvbCM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yNi4wMCNTYXRlbGxpdGUgcmVjZWl2ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjI3LjAwI1N1Yndvb2ZlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjguMDAjVGVsZXZpc2lvbnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjkuMDAjVmlkZW8gY2Fzc2V0dGUgcGxheWVycyBvciByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzAuMDAjVmlkZW8gbW9uaXRvcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzEuMDAjUmFkaW8gcGhvbm9ncmFwaHMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzIuMDAjS2FyYW9rZSBzeXN0ZW1zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjMzLjAwI01lZ2FwaG9uZXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzQuMDAjSW50ZWdyYXRlZCBjaXJjdXQgSUMgY2hpcCByZWNvcmRlciM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zNS4wMCNEaWdpdGFsIHZvaWNlIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zNi4wMCNNaW5pZGlzYyBwbGF5ZXJzIG9yIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNi4wMC4wMCNBdWRpbyB2aXN1YWwgZXF1aXBtZW50IGFjY2Vzc29yaWVzIzUyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE2LjE2LjAxLjAwI0Nhc3NldHRlIHN0b3JhZ2UjNTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTYuMDIuMDAjQXVkaW8gb3IgdmlkZW8gaGVhZCBjbGVhbmVycyM1Mi4xNi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNy4wMC4wMC4wMCNEb21lc3RpYyB3YWxsIHRyZWF0bWVudHMjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTcuMTAuMDAuMDAjQmF0aHJvb20gd2FsbCB0cmVhdG1lbnRzIzUyLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE3LjEwLjAxLjAwI0hhbmdpbmcgdG9pbGV0cnkgb3JnYW5pemVyIG9yIHNoZWxmIzUyLjE3LjEwLjAwLjAwCi11bnNwc2M3IzUzLjAwLjAwLjAwLjAwI0FwcGFyZWwgYW5kIEx1Z2dhZ2UgYW5kIFBlcnNvbmFsIENhcmUgUHJvZHVjdHMjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMDAuMDAuMDAjQ2xvdGhpbmcjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTUuMDAuMDAjU2xhY2tzIGFuZCB0cm91c2VycyBhbmQgc2hvcnRzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE1LjAxLjAwI0JveXMgc2xhY2tzIG9yIHRyb3VzZXJzIG9yIHNob3J0cyM1My4xMC4xNS4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wMi4wMCNNZW5zIHNsYWNrcyBvciB0cm91c2VycyBvciBzaG9ydHMjNTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTUuMDMuMDAjR2lybHMgc2xhY2tzIG9yIHRyb3VzZXJzIG9yIHNob3J0cyM1My4xMC4xNS4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wNC4wMCNXb21lbnMgc2xhY2tzIG9yIHRyb3VzZXJzIG9yIHNob3J0cyM1My4xMC4xNS4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wNS4wMCNJbmZhbnRzIHNsYWNrcyBvciB0cm91c2VycyBvciBzaG9ydHMjNTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTYuMDAuMDAjU2hpcnRzIGFuZCBibG91c2VzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjAxLjAwI0JveXMgc2hpcnRzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjAyLjAwI01lbnMgc2hpcnRzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjAzLjAwI0dpcmxzIHNoaXJ0cyBvciBibG91c2VzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjA0LjAwI1dvbWVucyBzaGlydHMgb3IgYmxvdXNlcyM1My4xMC4xNi4wMC4wMAotdW5zcHNjNyM1My4xMC4xNi4wNS4wMCNJbmZhbnRzIHNoaXJ0cyBvciBibG91c2VzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE3LjAwLjAwI1N3ZWF0ZXJzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE3LjAxLjAwI0JveXMgc3dlYXRlcnMjNTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTcuMDIuMDAjTWVucyBzd2VhdGVycyM1My4xMC4xNy4wMC4wMAotdW5zcHNjNyM1My4xMC4xNy4wMy4wMCNHaXJscyBzd2VhdGVycyM1My4xMC4xNy4wMC4wMAotdW5zcHNjNyM1My4xMC4xNy4wNC4wMCNXb21lbnMgc3dlYXRlcnMjNTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTcuMDUuMDAjSW5mYW50cyBzd2VhdGVycyM1My4xMC4xNy4wMC4wMAotdW5zcHNjNyM1My4xMC4xOC4wMC4wMCNDb2F0cyBhbmQgamFja2V0cyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4xOC4wMS4wMCNCb3lzIGNvYXRzIG9yIGphY2tldHMjNTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDIuMDAjTWVucyBjb2F0cyBvciBqYWNrZXRzIzUzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE4LjAzLjAwI0dpcmxzIGNvYXRzIG9yIGphY2tldHMjNTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDQuMDAjV29tZW5zIGNvYXRzIG9yIGphY2tldHMjNTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDUuMDAjSW5mYW50cyBjb2F0cyBvciBqYWNrZXRzIzUzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE5LjAwLjAwI1N1aXRzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE5LjAxLjAwI0JveXMgc3VpdHMjNTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTkuMDIuMDAjTWVucyBzdWl0cyM1My4xMC4xOS4wMC4wMAotdW5zcHNjNyM1My4xMC4xOS4wMy4wMCNHaXJscyBzdWl0cyM1My4xMC4xOS4wMC4wMAotdW5zcHNjNyM1My4xMC4xOS4wNC4wMCNXb21lbnMgc3VpdHMjNTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTkuMDUuMDAjSW5mYW50cyBzdWl0cyM1My4xMC4xOS4wMC4wMAotdW5zcHNjNyM1My4xMC4yMC4wMC4wMCNEcmVzc2VzIGFuZCBza2lydHMgYW5kIHNhcmlzIGFuZCBraW1vbm9zIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIwLjAxLjAwI0dpcmxzIGRyZXNzZXMgb3Igc2tpcnRzIG9yIHNhcmlzIG9yIGtpbW9ub3MjNTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjAuMDIuMDAjV29tZW5zIGRyZXNzZXMgb3Igc2tpcnRzIG9yIHNhcmlzIG9yIGtpbW9ub3MjNTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjAuMDMuMDAjSW5mYW50cyBkcmVzc2VzIG9yIHNraXJ0cyBvciBzYXJpcyBvciBraW1vbm9zIzUzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIxLjAwLjAwI092ZXJhbGxzIGFuZCBjb3ZlcmFsbHMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDEuMDAjQm95cyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDIuMDAjTWVucyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDMuMDAjR2lybHMgb3ZlcmFsbHMgb3IgY292ZXJhbGxzIzUzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIxLjA0LjAwI1dvbWVucyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDUuMDAjSW5mYW50cyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjIuMDAuMDAjRm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjAxLjAwI0JveXMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjAyLjAwI01lbnMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjAzLjAwI0dpcmxzIGZvbGtsb3JpYyBjbG90aGluZyM1My4xMC4yMi4wMC4wMAotdW5zcHNjNyM1My4xMC4yMi4wNC4wMCNXb21lbnMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjA1LjAwI0luZmFudHMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjAwLjAwI1VuZGVyZ2FybWVudHMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDEuMDAjVW5kZXJzaGlydHMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDIuMDAjU2xpcHMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDMuMDAjVW5kZXJwYW50cyM1My4xMC4yMy4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wNC4wMCNCcmFzc2llcmVzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjA1LjAwI0luZmFudCBkaWFwZXJzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjA2LjAwI0FkdWx0IGRpYXBlcnMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDcuMDAjQm9keSBzaGFwaW5nIGdhcm1lbnRzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI0LjAwLjAwI0hvc2llcnkjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjQuMDEuMDAjU3RvY2tpbmdzIzUzLjEwLjI0LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI0LjAyLjAwI1NvY2tzIzUzLjEwLjI0LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI0LjAzLjAwI1BhbnR5IGhvc2UjNTMuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjQuMDQuMDAjVGlnaHRzIzUzLjEwLjI0LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjAwLjAwI0Nsb3RoaW5nIGFjY2Vzc29yaWVzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjAxLjAwI0JlbHRzIG9yIHN1c3BlbmRlcnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDIuMDAjVGllcyBvciBzY2FydmVzIG9yIG11ZmZsZXJzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjAzLjAwI0hhdHMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDQuMDAjR2xvdmVzIG9yIG1pdHRlbnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDUuMDAjVW1icmVsbGFzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjA2LjAwI1N3ZWF0IGJhbmRzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjA3LjAwI0Nsb3RoaW5nIGhhbmdlcnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDguMDAjQXJtYmFuZHMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDkuMDAjR2FydGVycyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xMC4wMCNUYXNzbGVzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjExLjAwI0JhbmRhbm5hcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xMi4wMCNIYW5ka2VyY2hpZWZzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjEzLjAwI0hlYWRiYW5kcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xNC4wMCNQb2NrZXQgcHJvdGVjdG9ycyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xNS4wMCNCdXR0b24gY292ZXJzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjAwLjAwI05pZ2h0d2VhciM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNi4wMS4wMCNCb3lzIHBhamFtYXMgb3IgbmlnaHRzaGlydHMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDIuMDAjTWVucyBwYWphbWFzIG9yIG5pZ2h0c2hpcnRzIzUzLjEwLjI2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjAzLjAwI0dpcmxzIHBhamFtYXMgb3IgbmlnaHRzaGlydHMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDQuMDAjV29tZW5zIHBhamFtYXMgb3IgbmlnaHRzaGlydHMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDUuMDAjSW5mYW50cyBwYWphbWFzIG9yIG5pZ2h0c2hpcnRzIzUzLjEwLjI2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjA2LjAwI0JhdGggcm9iZXMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjcuMDAuMDAjVW5pZm9ybXMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjcuMDEuMDAjTWlsaXRhcnkgdW5pZm9ybXMjNTMuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjcuMDIuMDAjQ3VzdG9tcyB1bmlmb3JtcyM1My4xMC4yNy4wMC4wMAotdW5zcHNjNyM1My4xMC4yNy4wMy4wMCNQb2xpY2UgdW5pZm9ybXMjNTMuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDAuMDAjU3dpbXdlYXIjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDEuMDAjTWVucyBzd2ltd2VhciM1My4xMC4yOC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wMi4wMCNXb21lbnMgc3dpbXdlYXIjNTMuMTAuMjguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDMuMDAjQm95cyBzd2ltd2VhciM1My4xMC4yOC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wNC4wMCNHaXJscyBzd2ltd2VhciM1My4xMC4yOC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wNS4wMCNJbmZhbnRzIHN3aW13ZWFyIzUzLjEwLjI4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI5LjAwLjAwI0F0aGxldGljIHdlYXIjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjkuMDEuMDAjV29tZW5zIGF0aGxldGljIHdlYXIjNTMuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjkuMDIuMDAjTWVucyBhdGhsZXRpYyB3ZWFyIzUzLjEwLjI5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI5LjAzLjAwI0JveXMgYXRobGV0aWMgd2VhciM1My4xMC4yOS4wMC4wMAotdW5zcHNjNyM1My4xMC4yOS4wNC4wMCNHaXJscyBhdGhsZXRpYyB3ZWFyIzUzLjEwLjI5LjAwLjAwCi11bnNwc2M3IzUzLjExLjAwLjAwLjAwI0Zvb3R3ZWFyIzUzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjAwLjAwI0Jvb3RzIzUzLjExLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjAxLjAwI01lbnMgYm9vdHMjNTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDIuMDAjV29tZW5zIGJvb3RzIzUzLjExLjE1LjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjAzLjAwI0JveXMgYm9vdHMjNTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDQuMDAjR2lybHMgYm9vdHMjNTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDUuMDAjSW5mYW50cyBib290cyM1My4xMS4xNS4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wMC4wMCNTaG9lcyM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wMS4wMCNNZW5zIHNob2VzIzUzLjExLjE2LjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjAyLjAwI1dvbWVucyBzaG9lcyM1My4xMS4xNi4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wMy4wMCNCb3lzIHNob2VzIzUzLjExLjE2LjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjA0LjAwI0dpcmxzIHNob2VzIzUzLjExLjE2LjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjA1LjAwI0luZmFudHMgc2hvZXMjNTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDAuMDAjU2xpcHBlcnMjNTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDEuMDAjTWVucyBzbGlwcGVycyM1My4xMS4xNy4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wMi4wMCNXb21lbnMgc2xpcHBlcnMjNTMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDMuMDAjQm95cyBzbGlwcGVycyM1My4xMS4xNy4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wNC4wMCNHaXJscyBzbGlwcGVycyM1My4xMS4xNy4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wNS4wMCNJbmZhbnRzIHNsaXBwZXJzIzUzLjExLjE3LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjAwLjAwI1NhbmRhbHMjNTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTguMDEuMDAjTWVucyBzYW5kYWxzIzUzLjExLjE4LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjAyLjAwI1dvbWVucyBzYW5kYWxzIzUzLjExLjE4LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjAzLjAwI0JveXMgc2FuZGFscyM1My4xMS4xOC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOC4wNC4wMCNHaXJscyBzYW5kYWxzIzUzLjExLjE4LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjA1LjAwI0luZmFudHMgc2FuZGFscyM1My4xMS4xOC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wMC4wMCNBdGhsZXRpYyBmb290d2VhciM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wMS4wMCNNZW5zIGF0aGxldGljIGZvb3R3ZWFyIzUzLjExLjE5LjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjAyLjAwI1dvbWVucyBhdGhsZXRpYyBmb290d2VhciM1My4xMS4xOS4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wMy4wMCNCb3lzIGF0aGxldGljIGZvb3R3ZWFyIzUzLjExLjE5LjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjA0LjAwI0dpcmxzIGF0aGxldGljIGZvb3R3ZWFyIzUzLjExLjE5LjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjA1LjAwI0luZmFudHMgYXRobGV0aWMgZm9vdHdlYXIjNTMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMjAuMDAuMDAjU2hvZSBhY2Nlc3NvcmllcyM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4yMC4wMS4wMCNTaG9laG9ybnMjNTMuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMjAuMDIuMDAjU2hvZWxhY2VzIzUzLjExLjIwLjAwLjAwCi11bnNwc2M3IzUzLjEyLjAwLjAwLjAwI0x1Z2dhZ2UgYW5kIGhhbmRiYWdzIGFuZCBwYWNrcyBhbmQgY2FzZXMjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTUuMDAuMDAjTHVnZ2FnZSM1My4xMi4wMC4wMC4wMAotdW5zcHNjNyM1My4xMi4xNS4wMS4wMCNHYXJtZW50IGJhZ3MjNTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTUuMDIuMDAjTHVnZ2FnZSBzZXRzIzUzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE1LjAzLjAwI0luZGl2aWR1YWwgbHVnZ2FnZSBwaWVjZXMjNTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDAuMDAjUHVyc2VzIGFuZCBoYW5kYmFncyBhbmQgYmFncyM1My4xMi4wMC4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wMS4wMCNIYW5kYmFncyBvciBwdXJzZXMjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDIuMDAjRHVmZmxlIGJhZ3MjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDMuMDAjQmFja3BhY2tzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjA0LjAwI0V5ZWdsYXNzIGNhc2VzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjA1LjAwI0NvaW4gcHVyc2VzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjA2LjAwI0xpcHN0aWNrIGNhc2VzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjA3LjAwI0NpZ2FyIGNhc2UjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTcuMDAuMDAjQnVzaW5lc3MgY2FzZXMjNTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTcuMDEuMDAjQnJpZWZjYXNlcyM1My4xMi4xNy4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wMi4wMCNBdHRhY2hlcyM1My4xMi4xNy4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wNC4wMCNQb3J0Zm9saW9zIzUzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE3LjA1LjAwI0VxdWlwbWVudCBjYXNlcyM1My4xMi4xNy4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wNi4wMCNDb21wdXRlciBiYWdzIzUzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE4LjAwLjAwI1RyYXZlbCBraXRzIGFuZCBhY2Nlc3NvcmllcyM1My4xMi4wMC4wMC4wMAotdW5zcHNjNyM1My4xMi4xOC4wMS4wMCNUcmF2ZWwga2l0cyM1My4xMi4xOC4wMC4wMAotdW5zcHNjNyM1My4xMi4xOC4wMi4wMCNUcmF2ZWwgY2FydHMjNTMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTguMDMuMDAjR2FybWVudCBicnVzaGVzIzUzLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE4LjA0LjAwI01ha2V1cCBvciBtYW5pY3VyZSBjYXNlcyM1My4xMi4xOC4wMC4wMAotdW5zcHNjNyM1My4xMy4wMC4wMC4wMCNQZXJzb25hbCBjYXJlIHByb2R1Y3RzIzUzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjAwLjAwI0RlbnRhbCM1My4xMy4wMC4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wMS4wMCNNb3V0aHdhc2gjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDIuMDAjVG9vdGhwYXN0ZSM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wMy4wMCNUb290aGJydXNoZXMjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDQuMDAjRGVudGFsIGZsb3NzIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjA1LjAwI0luZmFudCBzb290aGVyIG9yIHBhY2lmaWVyIG9yIGR1bW15IzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjA2LjAwI0RlbnRhbCBraXRzIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjA3LjAwI1Rvb3RocGlja3MjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDguMDAjRGVudHVyZSBjbGVhbmluZyB0YWJsZXRzIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjAwLjAwI0JhdGggYW5kIGJvZHkjNTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDEuMDAjU2hvd2VyIGNhcHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDIuMDAjSGFpciBjYXJlIHN1cHBsaWVzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjAzLjAwI1Jhem9ycyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wNC4wMCNIYWlyIGNvbWJzIG9yIGJydXNoZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDUuMDAjVmFuaXR5IGtpdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDYuMDAjRGVvZG9yYW50cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wNy4wMCNIYW5kIG9yIGJvZHkgbG90aW9ucyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wOC4wMCNTb2FwcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wOS4wMCNTdW4gcHJvdGVjdGlvbiBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xMC4wMCNFeWUgY2FyZSBzdXBwbGllcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xMS4wMCNTaGF2aW5nIGNyZWFtcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xMi4wMCNCYXRoIGdlbHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTMuMDAjU2tpbiBjYXJlIHByb2R1Y3RzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE0LjAwI0Zvb3QgY2FyZSBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xNS4wMCNGZW1pbmluZSBoeWdpZW5lIHByb2R1Y3RzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE2LjAwI1BhcmEgcGhhcm1hY2V1dGljYWwgY3JlYW1zIG9yIGxvdGlvbnMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTcuMDAjTWFuaWN1cmUgaW1wbGVtZW50cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xOC4wMCNQZWRpY3VyZSBpbXBsZW1lbnRzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE5LjAwI0Nvc21ldGljcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yMC4wMCNQZXJmdW1lcyBvciBjb2xvZ25lcyBvciBmcmFncmFuY2VzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjIxLjAwI05haWwgY2xpcHBlcnMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjIuMDAjQ29uZG9tcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yMy4wMCNIYWlyIHJlbW92YWwgb3IgZGVwaWxhdG9yeSBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yNC4wMCNEaXNwb3NhYmxlIHBlcnNvbmFsIHdpcGVzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjI1LjAwI0hhaXIgb3IgYmVhcmQgbmV0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yNi4wMCNIYW5kIHNhbml0aXplciM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yNy4wMCNIYW5kIGNsZWFuZXIjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjguMDAjU2hhbXBvb3MjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjkuMDAjTWFrZXVwIGtpdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzAuMDAjTGlwIGJhbG0jNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzEuMDAjVGF0dG9vcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zMi4wMCNIb3Qgcm9sbGVycyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zMy4wMCNCYXJyZXR0ZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzQuMDAjQ2hlbWljYWwgcHJvdGVjdGlvbiBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zNS4wMCNTaGF2aW5nIGJydXNoZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTcuMDAuMDAjRXlld2VhciM1My4xMy4wMC4wMC4wMAotdW5zcHNjNyM1My4xMy4xNy4wMS4wMCNPcHRpY2FsIGdsYXNzZXMgb3Igc3BlY3RhY2xlcyM1My4xMy4xNy4wMC4wMAotdW5zcHNjNyM1My4xMy4xNy4wMi4wMCNDb250YWN0IGxlbnNlcyM1My4xMy4xNy4wMC4wMAotdW5zcHNjNyM1My4xMy4xNy4wMy4wMCNTdW5nbGFzc2VzIzUzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUzLjE0LjAwLjAwLjAwI1Nld2luZyBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDAuMDAjU2V3aW5nIGZhc3RlbmVycyM1My4xNC4wMC4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wMS4wMCNTdHJhaWdodCBwaW5zIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjAyLjAwI1NhZmV0eSBwaW5zIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjAzLjAwI1ppcHBlcnMjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDQuMDAjQnVja2xlcyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wNS4wMCNCdXR0b25zIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjA2LjAwI1NuYXBzIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjA3LjAwI0NsYXNwcyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wOC4wMCNHYXJtZW50IHJpdmV0IzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjAwLjAwI01pc2NlbGxhbmVvdXMgc2V3aW5nIHN1cHBsaWVzIzUzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjAxLjAwI1BpbiBjdXNoaW9ucyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wMi4wMCNTZXdpbmcga2l0cyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wMy4wMCNUaGltYmxlcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wNC4wMCNTZXdpbmcgcGF0dGVybnMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDUuMDAjU2V3aW5nIG5lZWRsZXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDYuMDAjQm9iYmlucyBvciBib2JiaW4gaG9sZGVycyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wNy4wMCNTZWFtIGdhdWdlIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjA4LjAwI0JvZGtpbiM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wOS4wMCNMb29wIHR1cm5lciM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xMC4wMCNGYWJyaWMgb3IgdGFpbG9ycyBjaGFsayBob2xkZXJzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjExLjAwI0ZhYnJpYyBtYXJrZXJzIG9yIGZhYnJpYyBwZW5jaWxzIG9yIGZhYnJpYyBjaGFsayM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xMi4wMCNTZXJyYXRlZCBwYXR0ZXJuIHRyYWNpbmcgd2hlZWwjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTMuMDAjVHJhbnNmZXIgcGFwZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTQuMDAjVGFwZXN0cnkgbmVlZGxlcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xNS4wMCNXZWF2aW5nIG5lZWRsZXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTYuMDAjTG9vcGVyIGxvb21zIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjE3LjAwI0NvdHRvbiBqZXJzZXkgbG9vcHMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTguMDAjTmVlZGxlcG9pbnQgY2FudmFzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjE5LjAwI01hZ25ldCB3YW5kcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yMC4wMCNTZWFtIHJpcHBlciM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yMS4wMCNOZWVkbGUgdGhyZWFkZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjIuMDAjRHJlc3NtYWtlcnMgcnVsZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjMuMDAjTGlxdWlkIHRocmVhZCBsb2NrIG9yIHJlaW5mb3JjZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjQuMDAjQ3Jvc3Mgc3RpdGNoIGZhYnJpYyBvciBuZWVkbGVzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI1LjAwI0Nyb3NzIHN0aXRjaCBkZXNpZ25zIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI2LjAwI0VtYnJvaWRlcnkgaG9vcHMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjcuMDAjQ3JvY2hldCBob29rcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yOC4wMCNRdWlsdGVycyBiYXN0aW5nIHRvb2xzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI5LjAwI1F1aWx0ZXJzIHBpbnMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMzAuMDAjUGF0dGVybiBjdXR0aW5nIG1hdHMgb3IgYm9hcmRzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzU0LjAwLjAwLjAwLjAwI1RpbWVwaWVjZXMgYW5kIEpld2VscnkgYW5kIEdlbXN0b25lIFByb2R1Y3RzIzU0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEwLjAwLjAwLjAwI0pld2VscnkjNTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDAuMDAjRmluZSBqZXdlbHJ5IzU0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjAxLjAwI0dvbGQgb3Igc2lsdmVyIG9yIHBsYXRpbnVtIGNoYWlucyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wMi4wMCNGaW5lIGpld2VscnkgbmVja2xhY2VzIzU0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjAzLjAwI0ZpbmUgamV3ZWxyeSByaW5ncyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wNC4wMCNGaW5lIGpld2VscnkgZWFycmluZ3MjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDUuMDAjRmluZSBib2R5IGpld2VscnkjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDYuMDAjRmluZSBqZXdlbHJ5IGJyYWNlbGV0cyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wNy4wMCNUaWFyYXMjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTYuMDAuMDAjSW1pdGF0aW9uIGpld2VscnkjNTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTYuMDEuMDAjQnJhY2VsZXRzIzU0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE2LjAyLjAwI05lY2tsYWNlcyM1NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wMy4wMCNSaW5ncyM1NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wNC4wMCNFYXJyaW5ncyM1NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wNS4wMCNCb2R5IGpld2VscnkjNTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMDAuMDAuMDAjVGltZXBpZWNlcyM1NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNS4wMC4wMCNXYXRjaGVzIzU0LjExLjAwLjAwLjAwCi11bnNwc2M3IzU0LjExLjE1LjAxLjAwI1dyaXN0IHdhdGNoZXMjNTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTUuMDIuMDAjUG9ja2V0IHdhdGNoZXMjNTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTYuMDAuMDAjQ2xvY2tzIzU0LjExLjAwLjAwLjAwCi11bnNwc2M3IzU0LjExLjE2LjAxLjAwI1dhbGwgY2xvY2tzIzU0LjExLjE2LjAwLjAwCi11bnNwc2M3IzU0LjExLjE2LjAyLjAwI01hbnRlbCBvciB0YWJsZSBjbG9ja3MjNTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTYuMDMuMDAjRnJlZSBzdGFuZGluZyBjbG9ja3MjNTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTYuMDQuMDAjSG91cmdsYXNzZXMjNTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDAuMDAjV2F0Y2ggb3IgY2xvY2sgcGFydHMjNTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDEuMDAjV2F0Y2ggb3IgY2xvY2sgZGlhbHMjNTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDIuMDAjV2F0Y2ggb3IgY2xvY2sgY3J5c3RhbHMjNTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDMuMDAjV2F0Y2ggb3IgY2xvY2sgcGxhdGVzIG9yIGJyaWRnZXMjNTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDQuMDAjV2F0Y2ggc3RyYXBzIG9yIGJhbmRzIG9yIGJyYWNlbGV0cyBvciBmb2JzIzU0LjExLjE3LjAwLjAwCi11bnNwc2M3IzU0LjEyLjAwLjAwLjAwI0dlbXN0b25lcyM1NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNS4wMC4wMCNQcmVjaW91cyBzdG9uZXMjNTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDEuMDAjRGlhbW9uZCBnZW1zdG9uZXMjNTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDIuMDAjRW1lcmFsZCBnZW1zdG9uZXMjNTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDMuMDAjUnVieSBnZW1zdG9uZXMjNTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDQuMDAjU2FwcGhpcmUgZ2Vtc3RvbmVzIzU0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE2LjAwLjAwI1NlbWkgcHJlY2lvdXMgc3RvbmVzIzU0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEyLjE2LjAxLjAwI0dhcm5ldCBnZW1zdG9uZXMjNTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTYuMDIuMDAjSmFkZSBnZW1zdG9uZXMjNTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTYuMDMuMDAjT3BhbCBnZW1zdG9uZXMjNTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTcuMDAuMDAjUGVhcmxzIzU0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEyLjE3LjAxLjAwI0N1bHR1cmVkIHBlYXJscyM1NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNy4wMi4wMCNOYXR1cmFsIHBlYXJscyM1NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NC4xMi4xOC4wMC4wMCNJbmR1c3RyaWFsIHByZWNpb3VzIGFuZCBzZW1pIHByZWNpb3VzIHN0b25lcyM1NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMi4xOC4wMS4wMCNJbmR1c3RyaWFsIGRpYW1vbmRzIzU0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE4LjAyLjAwI0luZHVzdHJpYWwgZ2FybmV0cyM1NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1NS4wMC4wMC4wMC4wMCNQdWJsaXNoZWQgUHJvZHVjdHMjNTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMDAuMDAuMDAjUHJpbnRlZCBtZWRpYSM1NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wMC4wMCNQcmludGVkIHB1YmxpY2F0aW9ucyM1NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wMS4wMCNDaGFydHMgb3IgbWFwcyBvciBhdGxhc2VzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjAyLjAwI0RpcmVjdG9yaWVzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjAzLjAwI0NhdGFsb2dzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjA0LjAwI05ld3NwYXBlcnMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDUuMDAjQ29taWMgYm9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDYuMDAjTWFnYXppbmVzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjA3LjAwI1BpY3R1cmUgb3IgZHJhd2luZyBvciBjb2xvcmluZyBib29rcyBmb3IgY2hpbGRyZW4jNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDguMDAjRW5jeWNsb3BlZGlhcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wOS4wMCNFZHVjYXRpb25hbCBvciB2b2NhdGlvbmFsIHRleHRib29rcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xMC4wMCNMZWlzdXJlIHJlYWRpbmcgYm9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTEuMDAjUmVmZXJlbmNlIGJvb2tzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjEyLjAwI0RpY3Rpb25hcmllcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xMy4wMCNUcmFkaW5nIGNhcmRzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE0LjAwI1NoZWV0IG11c2ljIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE1LjAwI1Byb21vdGlvbmFsIG1hdGVyaWFsIG9yIGFubnVhbCByZXBvcnRzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE2LjAwI09wZXJhdGlvbiBhbmQgaW5zdHJ1Y3Rpb24gbWFudWFscyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xNy4wMCNDbGVhcmFuY2UgYW5kIGRpbWVuc2lvbmFsIGRyYXdpbmdzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE4LjAwI1RlY2huaWNhbCBkaWFncmFtcyBvciBkcmF3aW5ncyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xOS4wMCNQZXJpb2RpY2FscyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4yMC4wMCNJbnN0cnVjdGlvbiBzaGVldHMgb3IgYm9va2xldHMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjEuMDAjT3duZXIgb3IgdXNlciBtYW51YWxzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjIyLjAwI1RlcnJlc3RyaWFsIG9yIGNlbGVzdGlhbCBnbG9iZXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjMuMDAjRXhlcmNpc2UgYm9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjQuMDAjUmVmZXJlbmNlIGJvb2tzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjI1LjAwI0VuY3ljbG9wZWRpYXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjYuMDAjRGljdGlvbmFyaWVzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjAwLjAwLjAwI0VsZWN0cm9uaWMgcmVmZXJlbmNlIG1hdGVyaWFsIzU1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjAwLjAwI0VsZWN0cm9uaWMgcHVibGljYXRpb25zIGFuZCBtdXNpYyM1NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wMS4wMCNFbGVjdHJvbmljIGRpcmVjdG9yaWVzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjAyLjAwI0VsZWN0cm9uaWMgZGljdGlvbmFyaWVzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjAzLjAwI0VsZWN0cm9uaWMgZW5jeWNsb3BlZGlhcyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wNC4wMCNFbGVjdHJvbmljIGNhdGFsb2dzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA1LjAwI0Jvb2tzIG9uIHRhcGUgb3IgY29tcGFjdCBkaXNjIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA2LjAwI0VsZWN0cm9uaWMgbWFnYXppbmVzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA3LjAwI0VsZWN0cm9uaWMgbmV3c3BhcGVycyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wOC4wMCNFbGVjdHJvbmljIGNoYXJ0cyBvciBtYXBzIG9yIGF0bGFzZXMjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDkuMDAjQmFja2dyb3VuZCBtdXNpYyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4xMC4wMCNNb3Rpb24gcGljdHVyZXMgb24gY2VsbHVsb2lkIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjExLjAwI01vdGlvbiBwaWN0dXJlcyBvbiB2aWRlbyB0YXBlIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjEyLjAwI011c2ljIG9uIHRhcGUgb3IgY29tcGFjdCBkaXNjIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE2LjAwLjAwI0VsZWN0cm9uaWMgU29mdHdhcmUgcmVmZXJlbmNlIG1hdGVyaWFsIzU1LjExLjAwLjAwLjAwCi11bnNwc2M3IzU1LjExLjE2LjAxLjAwI0VsZWN0cm9uaWMgU29mdHdhcmUgRG9jdW1lbnRhdGlvbiBhbmQgVXNlciBNYW51YWxzIzU1LjExLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjAwLjAwLjAwI1NpZ25hZ2UgYW5kIGFjY2Vzc29yaWVzIzU1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEyLjE1LjAwLjAwI1RhZ3MjNTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTUuMDEuMDAjTHVnZ2FnZSB0YWdzIzU1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE1LjAyLjAwI1NlY3VyaXR5IHRhZ3MjNTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTUuMDMuMDAjSWRlbnRpZmljYXRpb24gdGFncyM1NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wMC4wMCNMYWJlbHMjNTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDEuMDAjTGFiZWwgcmVtb3Zpbmcga2l0cyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wMi4wMCNDbG90aGluZyBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDMuMDAjUHJlc3N1cmUgc2Vuc2l0aXZlIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wNC4wMCNDYW5uaW5nIG9yIGJvdHRsaW5nIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wNS4wMCNBZGRyZXNzaW5nIG9yIG1haWxpbmcgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjA2LjAwI1NlbGYgYWRoZXNpdmUgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjA3LjAwI0RlY2FscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wOC4wMCNCYXIgY29kZSBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDkuMDAjUGFja2FnaW5nIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xMC4wMCNDb25zZWN1dGl2ZWx5IG51bWJlcmVkIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xMS4wMCNMYWJlbCBtYWtpbmcgdGFwZXMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTIuMDAjUHJpbnRlciBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTMuMDAjQ29sb3IgY29kaW5nIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xNC4wMCNSZW1vdmFibGUgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjE1LjAwI0FkaGVzaXZlIGRvdHMgb3IgYXJyb3dzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjE2LjAwI1NlbGYgYWRoZXNpdmUgZmxhZ3MjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDAuMDAjU2lnbmFnZSM1NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wMS4wMCNNZXRhbGxpYyBuYW1lcGxhdGVzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjAyLjAwI05vbiBtZXRhbGxpYyBuYW1lcGxhdGVzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjAzLjAwI0lsbHVtaW5hdGVkIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjA0LjAwI1NhZmV0eSBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wNS4wMCNTZWxmIGFkaGVzaXZlIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjA2LjAwI0Jhbm5lcnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDcuMDAjTWFnbmV0aWMgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDguMDAjTmVvbiBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wOS4wMCNNb3ZpbmcgbWVzc2FnZSBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xMC4wMCNUcmFmZmljIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjExLjAwI0JpbGxib2FyZHMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTIuMDAjRGlyZWN0aW9uYWwgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTMuMDAjUG9pbnQgb2YgcHVyY2hhc2Ugc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTQuMDAjUGVubmFudHMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTUuMDAjRmxhZ3MjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTYuMDAjV29vZGVuIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjE3LjAwI01hcmtlciBwbGF0ZXMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTguMDAjSW5mb3JtYXRpb25hbCBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xOS4wMCNTaWduYWxsaW5nIGNvbXBvbmVudHMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMjAuMDAjRW1ibGVtcyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4yMS4wMCNWaW55bCBsZXR0ZXJzIG9yIG51bWJlcnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMjIuMDAjRmxhZ3BvbGVzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjIzLjAwI1NpZ24gaG9sZGVycyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xOC4wMC4wMCNJZGVudGlmaWNhdGlvbiBkb2N1bWVudHMjNTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTguMDEuMDAjQ2FyIHRheCBkaXNjcyM1NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xOC4wMi4wMCNJZGVudGlmaWNhdGlvbiBjYXJkcyM1NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xOC4wMy4wMCNQYXNzcG9ydHMjNTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTguMDQuMDAjQmFkZ2VzIG9yIGJhZGdlIGhvbGRlcnMjNTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTYuMDAuMDAuMDAuMDAjRnVybml0dXJlIGFuZCBGdXJuaXNoaW5ncyM1Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4wMC4wMC4wMCNBY2NvbW1vZGF0aW9uIGZ1cm5pdHVyZSM1Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wMC4wMCNGdXJuaXR1cmUjNTYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDEuMDAjU3RhbmRzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjAyLjAwI1NvZmFzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjAzLjAwI0NvYXQgcmFja3MjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDQuMDAjQ2hhaXJzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjA1LjAwI0VudGVydGFpbm1lbnQgY2VudGVycyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wNi4wMCNGdXRvbnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDcuMDAjQm9va2Nhc2VzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjA4LjAwI01hdHRyZXNzZXMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDkuMDAjRHJlc3NlcnMgb3IgYXJtb2lyZXMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTAuMDAjUGFydGl0aW9ucyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xMi4wMCNTdG9vbHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTMuMDAjQ290cyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xNC4wMCNGb290IHN0b29scyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xNS4wMCNCZWRzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjE2LjAwI0NoZXN0cyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xOC4wMCNXYWxsIHJhY2tzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjE5LjAwI1RhYmxlcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yMC4wMCNMb2NrZXJzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjIxLjAwI0JlZCBoZWFkYm9hcmQgb3IgZm9vdGJvYXJkIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjIyLjAwI0FybSBjaGFpciM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yMy4wMCNVbWJyZWxsYSBzdGFuZHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjQuMDAjSXJvbmluZyBib2FyZHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjUuMDAjSXJvbmluZyBib2FyZCBjb3ZlcnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjYuMDAjRnJpZGdlIGJhciM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yNy4wMCNIb3VzZWhvbGQgdHlwZSBsaW5lbiBkcmllcnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjguMDAjQXJ0aWZpY2lhbCBwbGFudHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjkuMDAjTWFnYXppbmUgcmFja3MjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDAuMDAjT3V0ZG9vciBmdXJuaXR1cmUjNTYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDEuMDAjT3V0ZG9vciB1bWJyZWxsYXMjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDIuMDAjT3V0ZG9vciBjaGFpcnMjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDMuMDAjT3V0ZG9vciB0YWJsZXMgb3IgcGljbmljIHRhYmxlcyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wNC4wMCNPdXRkb29yIHN3aW5ncyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wNS4wMCNPdXRkb29yIGJlbmNoZXMjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDYuMDAjRmxvd2VyIHN0YW5kcyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wNy4wMCNPdXRzaWRlIGNsb3RoZXMgZHJ5ZXIjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDAuMDAjT2ZmaWNlIGZ1cm5pdHVyZSM1Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wMS4wMCNDcmVkZW56YXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDIuMDAjRmlsaW5nIGNhYmluZXRzIG9yIGFjY2Vzb3JpZXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDMuMDAjRGVza3MjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDQuMDAjVGFibGUgYmFzZSM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wNS4wMCNTaG93Y2FzZXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDYuMDAjQ29uZmVyZW5jaW5nIHRhYmxlcyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wNy4wMCNEcmFmdGluZyB0YWJsZXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDguMDAjTW9iaWxlIGZpbGVzIG9yIGVxdWlwbWVudCBjYXJ0cyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wOS4wMCNUYWJsZSB0b3BzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjAwLjAwI0JhYnkgYW5kIHRvZGRsZXIgZnVybml0dXJlIGFuZCBhY2Nlc3NvcmllcyM1Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wMy4wMCNDYXJyaWFnZXMgb3IgcGVyYW1idWxhdG9ycyBvciBzdHJvbGxlcnMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDQuMDAjQ3JpYnMgb3IgcGxheXBlbnMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDUuMDAjQ2FyIHNlYXRzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjA2LjAwI0hpZ2ggY2hhaXJzIG9yIGFjY2Vzc29yaWVzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjA3LjAwI0JvdW5jZXIgc2VhdHMgb3IganVtcGVycyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wOC4wMCNTd2luZ3Mgb3IganVtcGVycyBvciBhY2Nlc3NvcmllcyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wOS4wMCNQb3R0eSBzZWF0cyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4xMC4wMCNCYWJ5IGJhdGhzIG9yIHR1YnMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMTEuMDAjQmFzc2luZXRzIG9yIGNyYWRsZXMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMTIuMDAjQ2hhbmdpbmcgdGFibGVzIG9yIGFjY2Vzc29yaWVzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjExLjAwLjAwLjAwI0NvbW1lcmNpYWwgYW5kIGluZHVzdHJpYWwgZnVybml0dXJlIzU2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjAwLjAwI1dvcmtzdGF0aW9ucyBhbmQgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjAxLjAwI01vZHVsYXIgcmVjZXB0aW9uIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wMi4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBleGVjdXRpdmUgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjAzLjAwI01vZHVsYXIgZXhlY3V0aXZlIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wNC4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBtYW5hZ2VyaWFsIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wNS4wMCNNb2R1bGFyIG1hbmFnZXJpYWwgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjA2LjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIHN0YWZmIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wNy4wMCNNb2R1bGFyIHN0YWZmIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wOC4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciB0ZWNobmljYWwgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjA5LjAwI01vZHVsYXIgdGVjaG5pY2FsIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4xMC4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBjbGVyaWNhbCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMTEuMDAjTW9kdWxhciBjbGVyaWNhbCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMTIuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgcmVjZXB0aW9uIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4xMy4wMCNDb25mZXJlbmNlIG9yIG5vbiBtb2R1bGFyIHJvb20gcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDAuMDAjUGFuZWwgc3lzdGVtcyM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNi4wMS4wMCNTY3JlZW5zIGZvciBwYW5lbCBzeXN0ZW1zIzU2LjExLjE2LjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjAyLjAwI1N0b3JhZ2UgZm9yIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDMuMDAjT3JnYW5pemF0aW9uIGZvciBwYW5lbCBzeXN0ZW1zIzU2LjExLjE2LjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjA0LjAwI1dvcmsgc3VyZmFjZXMgZm9yIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDUuMDAjTGlnaHRpbmcgb3IgcG93ZXIgb3IgZGF0YSBjb21wb25ldHMgZm9yIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDYuMDAjUGFydHMgb3IgYWNjZXNzb3JpZXMgcGFuZWwgc3lzdGVtcyM1Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wMC4wMCNDYXNlZ29vZCBhbmQgbm9uIG1vZHVsYXIgc3lzdGVtcyM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wMS4wMCNDYXNlZ29vZCAgb3Igbm9uIG1vZHVsYXIgZGVzayM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wMi4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBjcmVkZW56YSM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wMy4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBzdG9yYWdlIzU2LjExLjE3LjAwLjAwCi11bnNwc2M3IzU2LjExLjE3LjA0LjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIG9yZ2FuaXphdGlvbiM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wNS4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBsaWdodGluZyBvciBwb3dlciBvciBkYXRhIGNvbXBvbmVudHMjNTYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTcuMDYuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgcGFydHMgb3IgYWNjZXNzb3JpZXMjNTYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDAuMDAjRnJlZXN0YW5kaW5nIGZ1cm5pdHVyZSM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOC4wMS4wMCNGcmVlc3RhbmRpbmcgbGlnaHRpbmcgb3IgcG93ZXIgb3IgZGF0YSBjb21wb25lbnRzIzU2LjExLjE4LjAwLjAwCi11bnNwc2M3IzU2LjExLjE4LjAyLjAwI0ZyZWVzdGFuZGluZyB0YWJsZXMjNTYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDMuMDAjRnJlZXN0YW5kaW5nIHN0b3JhZ2UjNTYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDQuMDAjRnJlZXN0YW5kaW5nIG9yZ2FuaXphdGlvbiM1Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOC4wNS4wMCNGcmVlc3RhbmRpbmcgcGFydHMgb3IgYWNjZXNzb3JpZXMjNTYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDAuMDAjSW5kdXN0cmlhbCBmdXJuaXR1cmUjNTYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDEuMDAjSW5kdXN0cmlhbCBsaWdodGluZyBvciBwb3dlciBvciBkYXRhIGNvbXBvbmVudHMjNTYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDIuMDAjSW5kdXN0cmlhbCB3b3JrIHN1cmZhY2VzIzU2LjExLjE5LjAwLjAwCi11bnNwc2M3IzU2LjExLjE5LjAzLjAwI0luZHVzdHJpYWwgc3RvcmFnZSB1bml0cyM1Ni4xMS4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOS4wNC4wMCNJbmR1c3RyaWFsIG9yZ2FuaXphdGlvbiM1Ni4xMS4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOS4wNS4wMCNJbmR1c3RyaWFsIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzU2LjExLjE5LjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjAwLjAwI0NvbXB1dGVyIHN1cHBvcnQgZnVybml0dXJlIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjAxLjAwI0NvbXB1dGVyIHN1cHBvcnQgbGlnaHRpbmcgb3IgcG93ZXIgb3IgZGF0YSBjb21wb25lbnRzIzU2LjExLjIwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjAyLjAwI0NvbXB1dGVyIHN1cHBvcnQgd29yayBzdXJmYWNlcyM1Ni4xMS4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMC4wMy4wMCNDb21wdXRlciBzdXBwb3J0IHN0b3JhZ2UgYWNjZXNzb3JpZXMjNTYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjAuMDQuMDAjQ29tcHV0ZXIgc3VwcG9ydCBvcmdhbml6YXRpb24jNTYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjAuMDUuMDAjQ29tcHV0ZXIgc3VwcG9ydCBwYXJ0cyBvciBhY2Nlc3NvcmllcyM1Ni4xMS4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wMC4wMCNTZWF0aW5nIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjAxLjAwI0F1ZGl0b3JpdW0gb3Igc3RhZGl1bSBvciBzcGVjaWFsIHVzZSBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjAyLjAwI1Rhc2sgc2VhdGluZyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wMy4wMCNHdWVzdCBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA0LjAwI0V4ZWN1dGl2ZSBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA1LjAwI0xvdW5nZSBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA2LjAwI1N0b29sIHNlYXRpbmcjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDcuMDAjU2VhdGluZyBwYXJ0cyBvciBhY2Nlc3NvcmllcyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wOC4wMCNDb21iaW5hdGlvbiBjaGFpciB3aXRoIGRlc2sjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDkuMDAjQmVuY2hlcyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4wMC4wMC4wMCNDbGFzc3Jvb20gYW5kIGluc3RydWN0aW9uYWwgYW5kIGluc3RpdHV0aW9uYWwgZnVybml0dXJlIGFuZCBmaXh0dXJlcyM1Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wMC4wMCNMaWJyYXJ5IGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjAxLjAwI0Jvb2sgY2FydHMgb3IgYm9vayB0cnVja3MjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDIuMDAjQ2lyY3VsYXRpb24gb3IgbGlicmFyaWFuIGRlc2tzIG9yIGNvbXBvbmVudHMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDMuMDAjQm9vayByZXR1cm5zIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA0LjAwI0NhcmQgY2F0YWxvZyB1bml0cyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wNS4wMCNEaWN0aW9uYXJ5IHN0YW5kcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wNi4wMCNVcGhvbHN0ZXJlZCBiZW5jaGVzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA3LjAwI1B1YmxpYyBhY2Nlc3MgdGFibGVzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA4LjAwI0Jvb2sgYnJvd3NlciB1bml0cyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wOS4wMCNTbG9wZWQgcmVhZGluZyB0YWJsZXMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMTAuMDAjQm9vayBraW9za3MjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMTEuMDAjTGlicmFyeSBjb21wYWN0IGRpc2Mgb3IgYXVkaW8gY2Fzc2V0dGUgZGlzcGxheWVycyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4xMi4wMCNSb3RhcnkgaXNsYW5kIHN0YW5kcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4xNC4wMCNIYW5nIHVwIGJhZyByYWNrcyBvciBiYWdzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjExLjAwLjAwI0FydCBjbGFzc3Jvb20gZnVybmlzaGluZ3MjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTEuMDEuMDAjQXJ0IGhvcnNlIzU2LjEyLjExLjAwLjAwCi11bnNwc2M3IzU2LjEyLjExLjAyLjAwI0FydCBzdHVkZW50IGJlbmNoIzU2LjEyLjExLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEyLjAwLjAwI0ZpcnN0IGFpZCByb29tIGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEyLjAxLjAwI0ZpcnN0IGFpZCBjb3VjaGVzIzU2LjEyLjEyLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEzLjAwLjAwI0dlbmVyYWwgZWR1Y2F0aW9uYWwgZmFjaWxpdHkgZml4dHVyZXMjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTMuMDEuMDAjU3RhbmRpbmcgcmlzZXJzIzU2LjEyLjEzLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEzLjAyLjAwI1RhYmxlIG9yIGNoYWlyIG1vdmVycyBvciBjYWRkeXMjNTYuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTMuMDMuMDAjUnViYmVyIGJydXNoIGZsb29yIG1hdHRpbmcjNTYuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTMuMDQuMDAjUGxhbm5pbmcgdGFibGVzIzU2LjEyLjEzLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE0LjAwLjAwI0NhZmV0ZXJpYSBhbmQgbHVuY2hyb29tIGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE0LjAxLjAwI01vYmlsZSBiZW5jaCB0YWJsZXMjNTYuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTQuMDIuMDAjTW9iaWxlIHN0b29sIHRhYmxlcyM1Ni4xMi4xNC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNC4wMy4wMCNNb2JpbGUgdGFibGVzIzU2LjEyLjE0LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjAwLjAwI0dlbmVyYWwgY2xhc3Nyb29tIGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjAxLjAwI0FjdGl2aXR5IHRhYmxlcyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wMi4wMCNDbGFzc3Jvb20gY2hhaXJzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjAzLjAwI0NsYXNzcm9vbSBiZW5jaGVzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA0LjAwI0NsYXNyb29tIHN0b29scyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wNS4wMCNDbGFzc3Jvb20gdGFibGVzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA2LjAwI1N0dWRlbnQgZGVza3MjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDcuMDAjU3R1ZHkgY2FycmVscyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wOC4wMCNTdHVkZW50IGNvbXB1dGVyIGRlc2tzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA5LjAwI1N0dWRlbnQgY29tcHV0ZXIgdGFibGVzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjAwLjAwI0NyZWF0aXZlIHBsYXkgYW5kIHJlc3QgdGltZSBmdXJuaXNoaW5ncyBmb3IgZGF5Y2FyZSBhbmQgZWFybHkgY2hpbGRob29kIGZhY2lsaXRpZXMjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDEuMDAjVG9kZGxlciBvciBjaGlsZCBzaXplIGxpdmluZyByb29tIHNldHMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDIuMDAjVG9kZGxlciBvciBjaGlsZCBzaXplIHNvZmFzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjAzLjAwI1RvZGRsZXIgb3IgY2hpbGQgc2l6ZSBlYXN5IGNoYWlycyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wNC4wMCNUb2RkbGVyIG9yIGNoaWxkIHNpemUgYmVhbiBiYWcgY2hhaXJzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjA1LjAwI0xvdyByaXNlIHJvb20gZGl2aWRlcnMgb3IgcGxheSBwYW5lbHMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDYuMDAjQ2hpbGRzIHJlc3QgbWF0cyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wNy4wMCNDaGlsZHMgcmVzdCBtYXQgcmFja3Mgb3IgaG9sZGVycyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wOC4wMCNDaGlsZHJlbnMgY290cyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wOS4wMCNDaGlsZHJlbnMgY290IGNhcnJpZXJzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjEwLjAwI0NoaWxkcmVucyBjb3QgYWN0aXZpdHkgc3lzdGVtcyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNy4wMC4wMCNCb29rIGFuZCBnZW5lcmFsIHN0b3JhZ2UgdW5pdHMgZm9yIGNsYXNzcm9vbXMjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTcuMDEuMDAjR2VuZXJhbCBzdG9yYWdlIHVuaXRzIzU2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE3LjAyLjAwI0Jvb2sgc3RvcmFnZSB1bml0cyM1Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNy4wMy4wMCNDdWJiaWUgdW5pdHMjNTYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTcuMDQuMDAjSW5zdGl0dXRpb25hbCBTdG9yYWdlIENhYmluZXRzIzU2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE4LjAwLjAwI1ZvY2F0aW9uYWwgY2xhc3Nyb29tIGZ1cm5pc2hpbmdzIGFuZCBmaXh0dXJlcyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wMS4wMCNUZWNobmljYWwgZWR1Y2F0aW9uIHRvb2wgc3RvcmFnZSBjYWJpbmV0cyBvciBjYWJpbmV0cyB3aXRoIHRvb2xzIzU2LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE4LjAyLjAwI0dlbmVyYWwgc2hvcCB0b29sIHN0b3JhZ2UgY2FiaW5ldHMgb3IgY2FiaW5ldHMgd2l0aCB0b29scyM1Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wMy4wMCNXb3Jkd29ya2luZyB0b29sIHN0b3JhZ2UgY2FiaW5ldHMgb3IgY2FiaW5ldHMgd2l0aCB0b29scyM1Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wNC4wMCNJbnN0cnVjdG9ycyB0ZWNobmljYWwgZGVzayM1Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wNS4wMCNGbGF0IGZpbGVzIzU2LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE5LjAwLjAwI0RlbW9uc3RyYXRpb24gZnVybmlzaGluZ3MjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTkuMDEuMDAjU2V3aW5nIG1hY2hpbmUgZGVtb25zdHJhdG9yIHRhYmxlcyM1Ni4xMi4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4yMC4wMC4wMCNMYWJvcmF0b3J5IGZ1cm5pdHVyZSM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4yMC4wMS4wMCNMYWJvcmF0b3J5IGJlbmNoZXMjNTYuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMjAuMDIuMDAjTGFib3JhdG9yeSBzdG9yYWdlIHVuaXRzIG9yIGFjY2Vzc29yaWVzIzU2LjEyLjIwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjIwLjAzLjAwI0xhYm9yYXRvcnkgd29ya3N0YXRpb25zIzU2LjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjAwLjAwLjAwLjAwI011c2ljYWwgSW5zdHJ1bWVudHMgYW5kIEdhbWVzIGFuZCBUb3lzIGFuZCBBcnRzIGFuZCBDcmFmdHMgYW5kIEVkdWNhdGlvbmFsIEVxdWlwbWVudCBhbmQgTWF0ZXJpYWxzIGFuZCBBY2Nlc3NvcmllcyBhbmQgU3VwcGxpZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMDAuMDAuMDAjRGV2ZWxvcG1lbnRhbCBhbmQgcHJvZmVzc2lvbmFsIHRlYWNoaW5nIGFpZHMgYW5kIG1hdGVyaWFscyBhbmQgYWNjZXNzb3JpZXMgYW5kIHN1cHBsaWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjAwLjAwI01hdGgga2l0cyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wMS4wMCNBZGRpdGlvbiBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDIuMDAjRGl2aXNpb24gbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjAzLjAwI0ZyYWN0aW9uIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wNC4wMCNNaWRkbGUgU2Nob29sIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wNS4wMCNFYXJseSBjaGlsZGhvb2QgbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjA2LjAwI01lYXN1cmVtZW50IG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wNy4wMCNNdWx0aXBsaWNhdGlvbiBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDguMDAjRWxlbWVudGFyeSBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDkuMDAjU3VidHJhY3Rpb24gbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjEwLjAwI0hpZ2ggc2Nob29sIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMS4wMC4wMCNFbGVjdHJvbmljIGxlYXJuaW5nIGFpZHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDEuMDAjRWxlY3Ryb25pYyBjYXJkIHJlYWRlcnMjNjAuMTAuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDIuMDAjQ3VycmljdWx1bSBiYXNlZCBlbGVjdHJvbmljIGxlYXJuaW5nIGFpZHMjNjAuMTAuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDMuMDAjRWxlY3Ryb25pYyBnbG9iZXMjNjAuMTAuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDQuMDAjRWxlY3Ryb25pYyBxdWl6IG1hY2hpbmVzIzYwLjEwLjExLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEyLjAwLjAwI0VkdWNhdGlvbmFsIGluY2VudGl2ZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDEuMDAjQmlibGUgYmFzZWQgY2hhcnQgc3RpY2tlcnMjNjAuMTAuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDIuMDAjQmlibGUgYmFzZWQgaW5jZW50aXZlIGNoYXJ0cyM2MC4xMC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMi4wMy4wMCNJbmNlbnRpdmUgY2hhcnQgc3RpY2tlcnMjNjAuMTAuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDQuMDAjSW5jZW50aXZlIGNoYXJ0cyM2MC4xMC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMi4wNS4wMCNJbmNlbnRpdmUgcHVuY2hjYXJkcyM2MC4xMC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wMC4wMCNFZHVjYXRpb25hbCBzdGlja2VycyBhbmQgc3VwcGxpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDEuMDAjQmlibGUgYmFzZWQgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDIuMDAjR2lhbnQgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDMuMDAjTm90YXJ5IHNlYWwgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDQuMDAjUGhvdG8gc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDUuMDAjUmV3YXJkIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjA2LjAwI1NjZW50ZWQgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDcuMDAjU2hhcGUgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDguMDAjU3BhcmtsZSBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wOS4wMCNSZXdhcmQgc3RhciBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xMC4wMCNTdGlja2VyIGFzc29ydG1lbnRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjExLjAwI1N0aWNrZXIgYm9va3MjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTIuMDAjU3RpY2tlciBib3hlcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xMy4wMCNUYXR0b28gc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTQuMDAjQWRkaXRpb24gZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTUuMDAjQWxsIGZhY3RzIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE2LjAwI0JsYW5rIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE3LjAwI0RpdmlzaW9uIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE4LjAwI0VsZWN0cm9uaWMgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTkuMDAjRXF1aXZhbGVudCBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yMC4wMCNGcmFjdGlvbiBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yMS4wMCNHcmVhdGVyIHRoYW4gb3IgbGVzcyB0aGFuIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjIyLjAwI011bHRpcGxpY2F0aW9uIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjIzLjAwI1N1YnRyYWN0aW9uIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI0LjAwI0FscGhhYmV0IGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI1LjAwI1dvcmQgYnVpbGRpbmcgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjYuMDAjUGhvbmljcyBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yNy4wMCNIYW5kd3JpdGluZyBvciB3cml0aW5nIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI4LjAwI051bWJlciBjbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yOS4wMCNNb25leSBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4zMC4wMCNUaW1lIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjMxLjAwI1N0YXRlIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjAwLjAwI0NsYXNzcm9vbSBhd2FyZHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTQuMDEuMDAjQmFkZ2VzIzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjAyLjAwI0F3YXJkIGJ1dHRvbnMjNjAuMTAuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTQuMDMuMDAjQ2VsZWJyYXRpb24gY3Jvd25zIzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjA0LjAwI1Jld2FyZCBqZXdsZXJ5IzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjA1LjAwI0NsYXNzcm9vbSByaWJib25zIG9yIHJvc2V0dGVzIzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjAwLjAwI0VkdWNhdGlvbmFsIGNlcnRpZmljYXRlcyBvciBkaXBsb21hcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wMS4wMCNCaWJsZSBiYXNlZCBjZXJ0aWZpY2F0ZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDIuMDAjQmxhbmsgY2VydGlmaWNhdGVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjAzLjAwI0NlcnRpZmljYXRlIGZyYW1lcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wNC4wMCNDZXJ0aWZpY2F0ZSBob2xkZXJzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjA1LjAwI0NlcnRpZmljYXRlIHJpYmJvbnMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDYuMDAjRGlwbG9tYXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDcuMDAjRm9yZWlnbiBsYW5ndWFnZSBjZXJ0aWZpY2F0ZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDguMDAjR2VuZXJhbCBwcmFpc2UgY2VydGlmaWNhdGVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjA5LjAwI0dyYWRlIHNwZWNpZmljIGNlcnRpZmljYXRlcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4xMC4wMCNTdWJqZWN0IHNwZWNpZmljIGNlcnRpZmljYXRlcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wMC4wMCNUZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wMS4wMCNBc3Nlc3NtZW50IHJlc291cmNlIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjAyLjAwI0NhbGVuZGFycyBvciBjdXQgb3V0cyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wMy4wMCNDaGFyYWN0ZXIgZWR1Y2F0aW9uIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wNC4wMCNDbGFzc3Jvb20gYWN0aXZpdHkgYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDUuMDAjQ3JpdGljYWwgdGhpbmtpbmcgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA2LjAwI0Nyb3NzIGN1cnJpY3VsdW0gZ3VpZGVzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA3LjAwI0N1cnJpY3VsdW0gZ3VpZGVzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA4LjAwI0ZhYnJpYyBjaGFydHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDkuMDAjRmxhbm5lbCBib2FyZCBhaWRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjEwLjAwI0VkdWNhdG9yIGdpZnRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjExLjAwI0dyYWRpbmcgc3RhbXBzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjEyLjAwI0hhbGwgcGFzc2VzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjEzLjAwI0hvbWUgZWR1Y2F0aW9uIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xNC4wMCNIb21ld29yayBhc3NpZ25tZW50IHJlc291cmNlcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xNS4wMCNJZGVhIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjE2LjAwI01hZ25ldGljIGJvYXJkIGFpZHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTcuMDAjTmFtZSBwbGF0ZXMgb3IgdGFncyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xOC4wMCNUZWFjaGVyIHBsYW4gYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTkuMDAjUG9ja2V0IGNoYXJ0cyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yMC4wMCNUZWFjaGVyIGNvbW11bmljYXRpb24gcG9zdGNhcmRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjIxLjAwI1Byb2Zlc3Npb25hbCB0ZWFjaGVyIHJlc291cmNlIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjIyLjAwI1RlYWNoZXIgY2xhc3Nyb29tIGdyYWRpbmcgYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjMuMDAjQ2xhc3Nyb29tIHN0dWRlbnQgc2VhdGluZyBjaGFydHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjQuMDAjU3Vic3RpdHV0ZSB0ZWFjaGVyIGZvbGRlcnMgb3IgZm9ybXMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjUuMDAjVGVjaG5vbG9neSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yNi4wMCNUZWNobm9sb2d5IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjcuMDAjVGVzdCB0YWtpbmcgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjI4LjAwI1RoZW1lIHVuaXQgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjI5LjAwI01pZGRsZSBvciBqdW5pb3Igc2Nob29sIHRlYWNoaW5nIGtpdHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMzAuMDAjTGFib3JhdG9yeSBtYW51YWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjAwLjAwI0NodXJjaCBzY2hvb2wgZWR1Y2F0aW9uYWwgcmVzb3VyY2VzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjAxLjAwI0JpYmxlIHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTguMDIuMDAjQmlibGUgYmFzZWQgZHJhbWFzIzYwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjAzLjAwI0JpYmxlIGJhc2VkIHJlc291cmNlIG9yIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjA0LjAwI1N1bmRheSBzY2hvb2wgYWN0aXZpdHkgcmVzb3VyY2UgYm9va3MjNjAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTguMDUuMDAjVmFjYXRpb24gYmlibGUgc2Nob29sIHJlc291cmNlcyM2MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wMC4wMCNBbHBoYWJldCBza2lsbHMgbWF0ZXJpYWxzIGFuZCByZXNvdXJjZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDEuMDAjQWxwaGFiZXQgYWN0aXZpdHkgYm9va3MjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDIuMDAjQWxwaGFiZXQgY3ViZXMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDMuMDAjQWxwaGFiZXQgZGVzayB0YXBlcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wNC4wMCNBbHBoYWJldCBraXRzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjA1LjAwI0FscGhhYmV0IGxldHRlciB0aWxlcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wNi4wMCNBbHBoYWJldCBwb3N0ZXIgY2FyZHMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDcuMDAjQWxwaGFiZXQgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wOC4wMCNBbHBoYWJldCByZXNvdXJjZSBib29rcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wOS4wMCNBbHBoYWJldCBzdGFtcHMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMTAuMDAjQWxwaGFiZXQgd2FsbCBjYXJkcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4xMS4wMCNUYWN0aWxlIGFscGhhYmV0cyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wMC4wMCNXb3JkIGJ1aWxkaW5nIHJlc291cmNlIG1hdGVyaWFscyBhbmQgYWNjZXNzb3JpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDEuMDAjU3BlZWNoIG1pcnJvciM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wMi4wMCNTcGVsbGluZyByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDMuMDAjV29yZCBidWlsZGluZyBhY3Rpdml0eSBib29rcyM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wNC4wMCNXb3JkIGJ1aWxkaW5nIGtpdHMjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDUuMDAjV29yZCBidWlsZGluZyByZXNvdXJjZSBib29rcyM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wNi4wMCNXb3JkIGJ1aWxkaW5nIHRpbGVzIzYwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjA3LjAwI1dvcmQgd2FsbHMjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDAuMDAjTGFuZ3VhZ2UgYXJ0cyByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDEuMDAjQWRqZWN0aXZlIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjAyLjAwI0FkdmVyYiByZXNvdXJjZSBib29rcyM2MC4xMC4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMS4wMy4wMCNHcmFtbWFyIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjA0LjAwI05vdW4gcmVzb3VyY2UgYm9va3MjNjAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDUuMDAjUHVuY3R1dGF0aW9uIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjA2LjAwI1ZlcmIgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDAuMDAjUGhvbmljcyByZXNvdXJjZSBtYXRlcmlhbHMgYW5kIGFjY2Vzc29yaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIyLjAxLjAwI1Bob25pY3MgYWN0aXZpdHkgYm9va3MjNjAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDIuMDAjUGhvbmljcyBkcmlsbCBjYXJkcyM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wMy4wMCNQaG9uaWNzIGtpdCM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wNC4wMCNQaG9uaWNzIHBpY3R1cmUgY2FyZHMjNjAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDUuMDAjUGhvbmljcyByZXNvdXJjZSBib29rcyM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wNi4wMCNQaG9uaWNzIHRpbGVzIzYwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjAwLjAwI1JlYWRpbmcgYm9va3MgYW5kIHJlc291cmNlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wMS4wMCNSZWFkaW5nIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjAyLjAwI0JlZ2lubmluZyByZWFkaW5nIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjAzLjAwI0JpYmxlIGJhc2VkIGNoaWxkcmVucyBsaXRlcmF0dXJlIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA0LjAwI0NoaWxkcmVucyBsaXRlcmF0dXJlIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA1LjAwI0NyaXRpY2FsIHJlYWRpbmcgc2tpbGxzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA2LjAwI0ZsYW5uZWwgYm9hcmRzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA3LjAwI1BvZXRyeSByZXNvdXJjZSBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wOC4wMCNSZWFkaW5nIGNvbXByZWhlbnNpb24gbWF0ZXJpYWxzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA5LjAwI1JlYWRpbmcgZGV2ZWxvcG1lbnQgbWF0ZXJpYWxzIG9yIGtpdHMjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMTAuMDAjUmVhZGluZyByZXNvdXJjZSBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4xMS4wMCNSZWFkaW5nIHRoZW1hdGljIHVuaXRzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjEyLjAwI1ZvY2FidWxhcnkgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDAuMDAjRWFybHkgbGVhcm5pbmcgbWF0aCBhbmQgY291bnRpbmcgcmVzb3VyY2VzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wMS4wMCNBYmFjdXMgb3IgY291bnRpbmcgZnJhbWVzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjAyLjAwI0FjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIGZvciB3b3JraW5nIHdpdGggZWFybHkgbWF0aCBtYW5pcHVsYXRpdmVzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjAzLjAwI0FjdGl2aXR5IGNhcmRzIGZvciB3b3JraW5nIHdpdGggZWFybHkgbWF0aCBtYW5pcHVsYXRpdmVzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjA0LjAwI0JlYWRzIG9yIGJlYWQgYWN0aXZpdHkgc2V0cyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wNS4wMCNDb3VudGVycyBvciBjb3VudGVyIGFjdGl2aXR5IHNldHMgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDYuMDAjQ291bnRpbmcgb3Igc29ydGluZyB0cmF5cyBvciBib3dscyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wNy4wMCNMYWNlcyBvciBsYWNpbmcgc2V0cyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wOC4wMCNMaW5raW5nIG1hbmlwdWxhdGl2ZXMgb3IgbGlua2luZyBhY3Rpdml0eSBzZXRzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjA5LjAwI01hdGggZ2FtZSBjaGlwcyBvciB0b2tlbnMjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMTAuMDAjTnVtYmVyIGNhcmRzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjExLjAwI051bWJlciBmb3JtcyBtb2RlbHMgb3IgYWNjZXNzb3JpZXMjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMTIuMDAjUGVnYm9hcmRzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjEzLjAwI1BlZ3MgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMTQuMDAjU29ydGluZyBtYW5pcHVsYXRpdmVzIG9yIHNvcnRpbmcgYWN0aXZpdHkgc2V0cyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wMC4wMCNCYXNpYyBtYXRoIG9wZXJhdGlvbnMgYW5kIG51bWVyYXRpb24gcmVzb3VyY2VzIGFuZCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDEuMDAjQWRkaXRpb24gYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDIuMDAjQmFzaWMgb3BlcmF0aW9ucyBtb2RlbHMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDMuMDAjQmFzaWMgb3BlcmF0aW9ucyByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA0LjAwI0RpdmlzaW9uIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA1LjAwI011bHRpcGxpY2F0aW9uIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA2LjAwI1N1YnRyYWN0aW9uIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA3LjAwI051bWJlciBkZXNrIHRhcGVzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA4LjAwI0h1bmRyZWRzIGNoYXJ0cyBvciBib2FyZHMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDkuMDAjSHVuZHJlZHMgbnVtYmVyIHRpbGVzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjEwLjAwI051bWJlciBraXRzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjExLjAwI051bWJlciBsaW5lcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4xMi4wMCNOdW1iZXJhdGlvbiBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4xMy4wMCNEb21pbm9lcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wMC4wMCNQcm9iYWJpbGl0eSBvciBjaGFuY2Ugb3IgZGF0YSBvciBwcm9ibGVtIHNvbHZpbmcgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDEuMDAjVHdvIHNpZGVkIGNvdW50ZXJzIG9yIHRva2VucyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wMi4wMCNTcGlubmVycyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wMy4wMCNEaWNlIHNldHMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDQuMDAjUHJvYmFiaWxpdHkgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDUuMDAjTG9naWMgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDYuMDAjQXR0cmlidXRlIGJsb2NrcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wNy4wMCNBdHRyaWJ1dGUgYmxvY2tzIGFjdGl2aXR5IGNhcmRzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjA4LjAwI0F0dHJpYnV0ZSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wOS4wMCNHcmFwaGluZyBtYXQjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTAuMDAjR3JhcGhpbmcgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTEuMDAjTG9naWMgZ2FtZXMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTIuMDAjQXR0cmlidXRlIHNldHMgb3Iga2l0cyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4xMy4wMCNQcm9ibGVtIHNvbHZpbmcgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTQuMDAjUHJvYmxlbSBzb2x2aW5nIGFjdGl2aXR5IGNhcmRzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjAwLjAwI1BhdHRlcm5pbmcgb3IgbWF0Y2hpbmcgb3Igc3BhdGlhbCBwZXJjZXB0aW9uIG9yIGxvZ2ljYWwgdGhpbmtpbmcgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDEuMDAjUGF0dGVybiBibG9ja3Mgb3IgcGFycXVldHJ5IGJsb2NrcyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wMi4wMCNQYXR0ZXJuIGJsb2NrcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wMy4wMCNQYXR0ZXJuIGJsb2NrIGFjdGl2aXR5IG9yIHBhdHRlcm4gY2FyZHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDQuMDAjUGF0dGVybiBibG9jayBnYW1lcyBvciBhY3Rpdml0eSBzZXRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA1LjAwI1BhdHRlcm4gYmxvY2sgc3RpY2tlcnMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDYuMDAjUGF0dGVybiBibG9ja3MgbWlycm9yIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA3LjAwI1BhdHRlcm4gYmxvY2tzIGNoYXJ0cyBvciBwb3N0ZXJzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA4LjAwI1BhcnF1ZXRyeSBibG9ja3MjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDkuMDAjUGFycXVldHJ5IGJsb2NrcyBhY3Rpdml0eSBvciBwYXR0ZXJuIGNhcmRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjEwLjAwI1BhcnF1ZXRyeSBibG9ja3MgYWN0aXZpdHkgc2V0cyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xMS4wMCNUYW5ncmFtcyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xMi4wMCNUYW5ncmFtIGFjdGl2aXR5IG9yIHBhdHRlcm4gY2FyZHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTMuMDAjVGFuZ3JhbSBwdXp6bGUgYWN0aXZpdHkgc2V0cyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xNC4wMCNUYW5ncmFtcyBwdXp6bGVzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjE1LjAwI1BlbnRvbWlub2VzIGFjdGl2aXR5IGFuZCByZXNvdXJjZSBib29rcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xNi4wMCNQZW50b21pbm9lcyBhY3Rpdml0eSBvciBwYXR0ZXJuIGNhcmRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjE3LjAwI1BlbnRvbWlub2VzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjE4LjAwI1BlbnRvbWlub2VzIGFjdGl2aXR5IHNldHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDAuMDAjQmFzZSB0ZW4gYW5kIHBsYWNlIHZhbHVlIHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjAxLjAwI0Jhc2UgdGVuIGJsb2NrcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wMi4wMCNCYXNlIHRlbiBvciBwbGFjZSB2YWx1ZSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wMy4wMCNCYXNlIHRlbiBvciBwbGFjZSB2YWx1ZSBhY3Rpdml0eSBjYXJkcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wNC4wMCNCYXNlIHRlbiBydWJiZXIgc3RhbXBzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjA1LjAwI1BsYWNlIHZhbHVlIGdyaWRzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjA2LjAwI1BsYWNlIHZhbHVlIGdhbWVzIG9yIGFjdGl2aXR5IHNldHMjNjAuMTAuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDcuMDAjUGxhY2UgdmFsdWUgbW9kZWxzIG9yIGFjY2Vzc29yaWVzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjAwLjAwI01vbmV5IGFuZCB0aW1lIHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjAxLjAwI01vbmV5IGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjAyLjAwI0J1bGsgYmlsbHMgZm9yIHRoZSBjbGFzc3Jvb20jNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDMuMDAjQnVsayBjb2lucyBmb3IgdGhlIGNsYXNzcm9vbSM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wNC4wMCNDb2luIGN1YmVzIG9yIGRpY2UjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDUuMDAjTWFnbmV0aWMgbW9uZXkjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDYuMDAjT3ZlcmhlYWQgYmlsbHMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDcuMDAjT3ZlcmhlYWQgY29pbnMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDguMDAjTW9uZXkgcHV6emxlcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wOS4wMCNNb25leSBydWJiZXIgc3RhbXBzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjEwLjAwI0NvaW4gYmFuayM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xMS4wMCNNb25leSBnYW1lcyBvciBraXRzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjEyLjAwI1BsYXkgY2FzaCByZWdpc3RlcnMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTMuMDAjTW9uZXkgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xNC4wMCNUaW1lIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjE1LjAwI1RpbWUgcnViYmVyIHN0YW1wcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xNi4wMCNUaW1lIGtpdHMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTcuMDAjVGltZSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjAwLjAwI0ZyYWN0aW9ucyBhbmQgcGVudG9taW5vZXMgYW5kIGRlY2ltYWxzIHRlYWNoaW5nIGFpZHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDEuMDAjRnJhY3Rpb24gY2lyY2xlcyBvciBzcXVhcmVzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjAyLjAwI0RlY2ltYWwgc3F1YXJlcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wMy4wMCNGcmFjdGlvbiBhY3Rpdml0eSBib29rcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wNC4wMCNGcmFjdGlvbiBiYXJzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA1LjAwI0ZyYWN0aW9uIGNoYXJ0cyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wNi4wMCNGcmFjdGlvbiBkaWNlIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA3LjAwI0ZyYWN0aW9uIGdhbWVzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA4LjAwI0ZyYWN0aW9uIGtpdHMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDkuMDAjRnJhY3Rpb24gdGlsZXMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMTAuMDAjRnJhY3Rpb25zIGRpc2NzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjEyLjAwI1BlbnRvbWlub2VzIGFjdGl2aXR5IGJvb2sjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMTMuMDAjUGVudG9taW5vZXMgcGF0dGVybiBjYXJkcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wMC4wMCNHZW9tZXRyeSB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wMS4wMCNHZW9tZXRyeSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wMi4wMCNHZW9tZXRyeSBjaGFydHMgb3IgcG9zdGVycyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wMy4wMCNHZW9ib2FyZHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDQuMDAjR2VvbWV0cmljIGNvbnN0cnVjdGlvbiBzZXRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjA1LjAwI0RvdWJsZSBzaWRlZCBnZW9ib2FyZHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDYuMDAjR2VvYm9hcmQgZ2FtZXMgb3IgYWN0aXZpdHkga2l0cyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wNy4wMCNHZW9ib2FyZCBydWJiZXIgYmFuZHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDguMDAjR2VvYm9hcmRzIGFjdGl2aXR5IGNhcmRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjA5LjAwI0dlb21ldHJpYyBjaGFsa2JvYXJkIGRyYXdpbmcgaW5zdHJ1bWVudHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMTAuMDAjR2VvbWV0cnkgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4xMS4wMCNHZW9NaXJyb3IjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMTIuMDAjR2VvbWV0cmljIHNvbGlkcyBtb2RlbHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzIuMDAuMDAjQWxnZWJyYSB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMi4wMS4wMCNBbGdlYnJhIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMyLjAyLjAwI0NlbnRpbWV0ZXIgY3ViZXMjNjAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzIuMDMuMDAjQWxnZWJyYSBvciBwcmUgYWxnZWJyYSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMyLjA0LjAwI0FsZ2VicmEgbW9kZWxzIG9yIGFjY2Vzc29yaWVzIzYwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMzLjAwLjAwI1ByZWNhbGN1bHVzIGFuZCBjYWxjdWx1cyB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMy4wMS4wMCNDYWxjdWx1cyBhY3Rpdml0eSBvciByZXNvdXJjZXMgYm9va3MjNjAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzMuMDIuMDAjUHJlY2FsY3VsdXMgb3IgY2FsY3VsdXMgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMy4wMy4wMCNQcmVjYWxjdWx1cyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wMC4wMCNHZW9ncmFwaHkgYW5kIG1hcCBza2lsbHMgcmVzb3VyY2VzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wMS4wMCNHb2VncmFwaHkgY2hhcnRzIG9yIHBvc3RlcnMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDIuMDAjQ29udGluZW50cyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wMy4wMCNFbGVjdHJvbmljIHNvY2lhbCBzdHVkaWVzIGxlYXJuaW5nIGFpZHMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDQuMDAjR2VvZ3JhcGh5IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDUuMDAjTWFwIHJhY2tzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjA2LjAwI01hcCBzdGVuY2lsIGtpdHMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDcuMDAjUG9ydGFibGUgd2FsbCBtYXBzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjA4LjAwI0dlb2dyYXBoeSByZXNvdXJjZSBvciBhY3Rpdml0eSBib29rcyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNS4wMC4wMCNQb2xpdGljYWwgc2NpZW5jZSM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNS4wMS4wMCNFY29ub21pY3MgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzUuMDIuMDAjR292ZXJubWVudCBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNS4wMy4wMCNHb3Zlcm5tZW50IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzUuMDQuMDAjU3RhdGUgdGhlbWUgdW5pdHMjNjAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDAuMDAjTXVsdGljdWx0dXJhbCBhY3Rpdml0aWVzIGFuZCByZXNvdXJjZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDEuMDAjQW5jaWVudCBjaXZpbGl6YXRpb25zIHJlc291cmNlcyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wMi4wMCNDdXN0b21zIG9yIHJpdHVhbHMgb3IgdHJhZGl0aW9ucyByZXNvdXJjZXMjNjAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDMuMDAjRXRobmljIGRpdmVyc2l0eSByZXNvdXJjZXMjNjAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDQuMDAjR2VuZWFsb2d5IHJlc291cmNlcyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wNS4wMCNNdWx0aWN1bHR1cmFsIGhvbGlkYXlzIHJlc291cmNlcyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wNi4wMCNNdWx0aWN1bHR1cmFsIHRoZW1lIHVuaXRzIzYwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjAwLjAwI0ZvcmVpZ24gbGFuZ3VhZ2VzIHJlc291cmNlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNy4wMS4wMCNSZXNvdXJjZXMgZm9yIExlYXJuaW5nIHRvIHNwZWFrIHNwYW5pc2gjNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDIuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBmcmVuY2gjNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDMuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBnZXJtYW4jNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDQuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBlbmdsaXNoIzYwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjA1LjAwI1Jlc291cmNlcyBmb3IgTGVhcm5pbmcgdG8gc3BlYWsgbGF0aW4jNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDYuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBpdGFsaWFuIzYwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjAwLjAwI0hpc3RvcnkgdGVhY2hpbmcgcmVzb3VyY2VzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjAxLjAwI0FmcmljYW4gaGlzdG9yeSByZXNvdXJjZSBib29rcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wMi4wMCNIaXN0b3J5IGNoYXJ0cyBvciBwb3N0ZXJzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjAzLjAwI0V1cm9wZWFuIGhpc3RvcnkgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDQuMDAjSGlzdG9yaWNhbCBtYXBzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjA1LjAwI0hpc3RvcnkgdGhlbWUgdW5pdHMjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDYuMDAjSGlzdG9yeSBwaG90byBjYXJkcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wNy4wMCNIaXN0b3J5IHJlc291cmNlIGJvb2tzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjA4LjAwI1dvbWFucyBoaXN0b3J5IHJlc291cmNlcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wOS4wMCNXb3JsZCBoaXN0b3J5IHJlc291cmNlcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wMC4wMCNMaXZpbmcgb3JnYW5pc21zIGFuZCBwcmVzZXJ2ZWQgc3BlY2ltZW5zIGFuZCByZWxhdGVkIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wMS4wMCNMaXZlIGFtcGhpYmlhIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjAyLjAwI1ByZXNlcnZlZCBhbXBoaWJpYSM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wMy4wMCNBbXBoaWJpYSBtb2RlbHMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDQuMDAjRnVuZ2kgY3VsdHVyZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDUuMDAjQ3VsdHVyZSBraXRzIG9yIHN1cHBsaWVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjA2LjAwI1Byb3Rvem9hbiBjdWx0dXJlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wNy4wMCNBcXVhcmlhIHBsYW50cyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wOC4wMCNUZXJyYXJpdW0gcGxhbnRzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjA5LjAwI0xpdmUgaW52ZXJ0ZWJyYXRlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xMC4wMCNQcmVzZXJ2ZWQgaW52ZXJ0ZWJyYXRlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xMS4wMCNMaXZlIHZlcnRlYnJhdGVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjEyLjAwI1ByZXNlcnZlZCB2ZXJ0ZWJyYXRlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xMy4wMCNMaXZlIHJlcHRpbGlhIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjE0LjAwI1ByZXNlcnZlZCByZXB0aWxsYSM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xNS4wMCNEaXNzZWN0aW9uIGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTguMDAjQmlvc3BoZXJlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xOS4wMCNCaW9sb2d5IGV4cGVyaW1lbnQga2l0cyBvciBzdXBwbGllcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yMC4wMCNTdGFpbmluZyBraXRzIG9yIHN1cHBsaWVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjIxLjAwI1ByZXNlcnZlZCBsaWZlIGN5Y2xlIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yMi4wMCNCaW9sb2d5IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjMuMDAjU2tlbGV0b24gb3IgYm9uZSBvciBzaGVsbCBzcGVjaW1lbiM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yNC4wMCNCaW9sb2d5IHJlc291cmNlIG9yIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI1LjAwI0Jpb2xvZ3kgc3R1ZHkgb3IgYWN0aXZpdHkga2l0cyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yNi4wMCNCaW9sb2d5IGNoYXJ0cyBvciBwb3N0ZXJzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI3LjAwI1ByZXNlcnZlZCBwbGFudCBib2R5IG9yIG9yZ2FuIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yOC4wMCNCaW9sb2d5IGFjdGl2aXR5IG9yIHBob3RvIGNhcmRzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI5LjAwI1BsYW50IGxpZmUgY3ljbGUgc3BlY2ltZW5zIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjMwLjAwI0NvbWJpbmF0aW9uIG9yZ2FuaXNtIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4zMS4wMCNBbmltYWwgYm9keSBvciBib2R5IHBhcnQgb3Igb3JnYW4gc3BlY2ltZW5zIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjMyLjAwI0Vjb3N5c3RlbSBkaXNwbGF5cyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4zMy4wMCNIdW1hbiBib2R5IG9yIGJvZHkgcGFydCBvciBvcmdhbiBzcGVjaW1lbnMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMzQuMDAjVGlzc3VlIGN1bHR1cmVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjAwLjAwI0Jpb3RlY2hub2xvZ3kgYW5kIGJpbyBjaGVtaXN0cnkgYW5kIGdlbmV0aWNzIGFuZCBtaWNyb2Jpb2xvZ3kgYW5kIHJlbGF0ZWQgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjAxLjAwI0Rlb3h5cmlib251Y2xlaWMgYWNpZCBETkEgbW9kZWxzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjAyLjAwI0Rlb3h5cmlib251Y2xlaWMgYWNpZCBETkEgZXhwZXJpbWVudCBraXRzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjAzLjAwI0dlbmV0aWMgYm9va3MjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDQuMDAjR2VuZXRpYyBraXRzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjA1LjAwI0JhY3RlcmlhIHRlYWNoaW5nIGtpdHMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDYuMDAjQmFjdGVyaWEgdGVzdGluZyBzdXBwbGllcyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wNy4wMCNFbnp5bW9sb2d5IGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDguMDAjUHJvdGVpbiB0ZXN0aW5nIGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDAuMDAjQm9keSBzeXN0ZW1zIGFuZCByZWxhdGVkIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wMS4wMCNCb2R5IG1vZGVscyM2MC4xMC40MS4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wMi4wMCNDZWxsIG1vZGVscyM2MC4xMC40MS4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wMy4wMCNDZWxsIHRlYWNoaW5nIGtpdHMjNjAuMTAuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDQuMDAjQm9keSBzeXN0ZW1zIHRlYWNoaW5nIGtpdHMjNjAuMTAuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDUuMDAjQm9keSBzeXN0ZW1zIHRlYWNoaW5nIGFpZHMjNjAuMTAuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDIuMDAuMDAjV2F0ZXIgdGVzdGluZyBhbmQgY29uc2VydmF0aW9uIGFuZCBlY29sb2d5IzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQyLjAxLjAwI1dhdGVyIHRlc3RpbmcgY2hlbWljYWxzIzYwLjEwLjQyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQyLjAyLjAwI1dhdGVyIHRlc3RpbmcgYW5kIHNhbXBsaW5nIGtpdHMjNjAuMTAuNDIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDIuMDMuMDAjV2F0ZXIgbW9kZWxzIzYwLjEwLjQyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQyLjA0LjAwI1dhdGVyIGVjb2xvZ3kgc3VwcGxpZXMjNjAuMTAuNDIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDMuMDAuMDAjQXN0cm9ub215IzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQzLjAxLjAwI0FzdHJvbm9teSBtb2RlbHMjNjAuMTAuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDMuMDIuMDAjQXN0cm9ub215IGNoYXJ0cyM2MC4xMC40My4wMC4wMAotdW5zcHNjNyM2MC4xMC40My4wMy4wMCNBc3Ryb25vbXkgc3R1ZHkga2l0cyM2MC4xMC40My4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wMC4wMCNHZW9sb2d5IGFuZCBlYXJ0aCBzY2llbmNlIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjAxLjAwI1JvY2sgc3BlY2ltZW4gc2V0cyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wMi4wMCNSb2NrIHNwZWNpbWVucyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wMy4wMCNGb3NzaWxzIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjA0LjAwI0xhbmRmb3JtIG1vZGVscyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wNS4wMCNGb3NzaWwgbW9kZWxzIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjA2LjAwI0dlb2xvZ3kgdG9vbHMgb3IgZmllbGQjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDcuMDAjU3RyZWFtIHRhYmxlcyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wOC4wMCNHZW9sb2d5IHN0dWR5IGtpdHMjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDAuMDAjQ2hlbWlzdHJ5IGFuZCBlbGVjdHJvY2hlbWlzdHJ5IGFuZCBtaWNyb2NoZW1pc3RyeSM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wMS4wMCNQZXJpb2RpYyB0YWJsZSBwb3N0ZXJzIG9yIGJvYXJkcyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wMi4wMCNDb25zdW1lciBhbmFseXNpcyBraXRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjAzLjAwI0NoZW1pc3RyeSBjbGFzcyBraXRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA0LjAwI0NoZW1pc3RyeSBkZW1vbnN0cmF0aW9uIGtpdHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDUuMDAjQXRvbWljIG1vZGVscyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wNi4wMCNNb2xlY3VsYXIgbW9kZWxzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA3LjAwI0VsZWN0cm9jaGVtaWNhbCBkZW1vbnN0cmF0aW9uIHRvb2xzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA4LjAwI0VsZWN0cm9jaGVtaWNhbCBraXRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA5LjAwI0Z1ZWwgY2VsbHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMTAuMDAjTWljcm9jaGVtaXN0cnkga2l0cyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4xMS4wMCNNaWNyb2NoZW1pc3RyeSB0b29scyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wMC4wMCNNZWNoYW5pY2FsIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjAxLjAwI0ZvcmNlIHRhYmxlcyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wMi4wMCNHcmF2aXR5IG1vZGVscyBvciBtb2RlbCBzZXRzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjA0LjAwI0luY2xpbmVkIHBsYW5lcyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wNS4wMCNGcmljdGlvbiBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDYuMDAjUGh5c2ljIGNhcnMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDcuMDAjUGVuZHVsdW0gYXBwYXJhdHVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjA4LjAwI1RvcnF1ZSBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDkuMDAjUHJvamVjdGlsZSBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMTAuMDAjQWlyIHRhYmxlcyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4xMS4wMCNBaXIgYXBwYXJhdHVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjEyLjAwI0xpZ2h0IG9yIHBob3RvIGFwcGFyYXR1cyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wMC4wMCNFbmVyZ3kgYW5kIHBvd2VyIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjAxLjAwI1NvbGFyIGNvbGxlY3RpbmcgZGV2aWNlcyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wMi4wMCNTb2xhciBraXRzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjAzLjAwI0VuZXJneSBkZW1vbnN0cmF0aW9uIGtpdHMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDQuMDAjRW5lcmd5IGNsYXNzIGtpdHMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDUuMDAjTWF0dGVyIGRlbW9uc3RyYXRpb24ga2l0cyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wNi4wMCNNYXR0ZXIgY2xhc3Mga2l0cyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wNy4wMCNNb25vbWV0ZXJzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjA4LjAwI0dhcyBkaWZmdXNpb24gYXBwYXJhdHVzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjAwLjAwI1dhdmUgYW5kIHNvdW5kIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjAxLjAwI1dhdmUgZ2VuZXJhdG9ycyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wMi4wMCNXYXZlIHRhbmtzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjAzLjAwI1dhdmUgc3ByaW5ncyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wNC4wMCNXYXZlIGRlbW9uc3RyYXRpb24gc2V0cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wNS4wMCNUdW5pbmcgZm9ya3MjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDYuMDAjRG9wcGxlciBkZW1vbnN0cmF0b3JzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjA3LjAwI1Jlc29uYW5jZSBhcHBhcmF0dXMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDguMDAjU291bmQgbWV0ZXJzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjA5LjAwI1dhdmUgYXBwYXJhdHVzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjEwLjAwI1NwZWN0cm9zY29wZXMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTEuMDAjU3BlY3RydW0gY2hhcnRzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjEyLjAwI0xpZ2h0IGRlbW9uc3RyYXRpb24ga2l0cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xMy4wMCNDb2xvciBjaGFydHMgb3Igc2FtcGxlcyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xNC4wMCNSYWRpb21ldGVyIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjE1LjAwI1JlZmxlY3Rpb24gb3IgcmVmcmFjdGlvbiBhcHBhcmF0dXMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTYuMDAjT3B0aWNzIHNldHMgb3Iga2l0cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wMC4wMCNFbGVjdHJpY2FsIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjAxLjAwI1ZhbiBkZWdyYWZmIGdlbmVyYXRvcnMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDIuMDAjRWxlY3Ryb3N0YXRpYyBhcHBhcmF0dXMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDMuMDAjRWxlY3Ryb3N0YXRpYyBraXRzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA0LjAwI0VsZWN0cmljaXR5IGtpdHMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDUuMDAjRWxlY3RyaWNpdHkgZGVtb25zdHJhdGlvbiBib2FyZHMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDYuMDAjQmF0dGVyeSBraXRzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA3LjAwI0hhbmQgaGVsZCBnZW5lcmF0b3JzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA4LjAwI0VsZWN0cm9tYWduZXRpYyBhcHBhcmF0dXMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDkuMDAjTWFnbmV0aXNtIGFwcGFyYXR1cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4xMC4wMCNFbGVjdHJvbWFnbmV0cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4xMS4wMCNFbGVjdHJpYyBiZWxscyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4xMi4wMCNFbGVjdHJpYyBsZWFkIHdpcmVzIG9yIGNhYmxlcyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wMC4wMCNOdWNsZWFyIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjAxLjAwI1JhZGlvYWN0aXZpdHkgc2V0cyM2MC4xMC41MC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wMi4wMCNHZWlnZXIgY291bnRlcnMjNjAuMTAuNTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTAuMDMuMDAjRWxlY3Ryb24gYXBwYXJhdHVzIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjA0LjAwI1JhZGlhdGlvbiB3YXJuaW5nIHNpZ25zIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjA1LjAwI051Y2xlYXIgcGh5c2ljcyB0cmFuc3BhcmVuY2llcyM2MC4xMC41MC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wNi4wMCNOdWNsZWFyIHBoeXNpY3MgY2hhcnRzIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUxLjAwLjAwI1JvY2tldHJ5IGFuZCBmbGlnaHQgbWF0ZXJpYWxzIGFuZCBzdXBwbGllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MS4wMS4wMCNSb2NrZXQgc2V0cyM2MC4xMC41MS4wMC4wMAotdW5zcHNjNyM2MC4xMC41MS4wMi4wMCNMYXVuY2hpbmcgYXBwYXJhdHVzIzYwLjEwLjUxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUxLjAzLjAwI0FsdGl0dWRlIG1lYXN1cmluZyBkZXZpY2VzIzYwLjEwLjUxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUxLjA0LjAwI0FpcnBsYW5lIGtpdHMjNjAuMTAuNTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTIuMDAuMDAjTGlmZSBza2lsbHMgcmVzb3VyY2VzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUyLjAxLjAwI0J1aWxkaW5nIGxpc3RlbmluZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTIuMDIuMDAjU3R1ZHkgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUyLjAzLjAwI1Rlc3QgcHJlcGFyYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDAuMDAjQ2FyZWVyIGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wMS4wMCNDYXJlZXIgZWR1Y2F0aW9uIG9yIHBsYW5uaW5nIG9yIGRlY2lzaW9uIG1ha2luZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDIuMDAjQmFzaWMgam9iIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wMy4wMCNKb2Igc2VhcmNoIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wNC4wMCNUaW1lIG1hbmFnZW1lbnQgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjA1LjAwI0ludGVydmlldyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDYuMDAjUmVzdW1lIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wNy4wMCNXb3JrIGV0aGljcyBvciBhdHRpdHVkZSB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wOC4wMCNUZWFtIGJ1aWxkaW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wOS4wMCNCdXNpbmVzcyBldGlxdWV0dGUgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDAuMDAjQ29uc3VtZXIgZWNvbm9taWNzIGFuZCBtb25leSBtYW5hZ2VtZW50IGFuZCBpbmRlcGVuZGVudCBsaXZpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDEuMDAjUGVyc29uYWwgZmluYW5jZSBvciBtb25leSBtYW5hZ2VtZW50IGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wMi4wMCNTaG9wcGluZyBvciBjb25zdW1lciBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDMuMDAjSW5kZXBlbmRlbnQgbGl2aW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA0LjAwI1VuZGVyc3RhbmRpbmcgY29uc3VtZXIgY3JlZGl0IG9yIGxvYW5zIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA1LjAwI0luc3VyYW5jZSBjb3ZlcmFnZSBvciBpbnN1cmFuY2UgY29tcGFyaXNvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wNi4wMCNIb21lIGJ1eWluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wNy4wMCNBcGFydG1lbnQgcmVudGFsIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA4LjAwI0NhciBidXlpbmcgZWR1Y2F0aW9uYWwgYWlkcyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wOS4wMCNCcmFuZCBtYXJrZXRpbmcgb3IgYWR2ZXJ0aXNpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTAuMDAjUmVsYXRpb25zaGlwIGJ1aWxkaW5nIG9yIGZhbWlseSBsaWZlIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xMS4wMCNEZXZlbG9waW5nIHNlbGYgY29uY2VwdCBhbmQgc2VsZiBlc3RlZW0gaW5zdHVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xMi4wMCNWaW9sZW5jZSBhdm9pZGFuY2UgZWR1Y2F0aW9uIG9yIHZpb2xlbmNlIHByZXZlbnRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTMuMDAjQW5nZXIgcmVzb2x1dGlvbiB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xNC4wMCNUZWFjaGluZyBwYXRpZW5jZSBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTUuMDAjVG9sZXJhbmNlIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjE2LjAwI1BlcnNvbmFsIHNhZmV0eSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xNy4wMCNQZXJzb25hbCBjb25mbGljdCByZXNvbHV0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjE4LjAwI1ByYWN0aWNhbCB0ZWVuIGFkdmljZSBndWlkZXMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTkuMDAjRGV2ZWxvcGluZyBzb2NpYWwgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjIwLjAwI01hbm5lcnMgb3IgZXRpcXVldHRlIG9yIGNvdXJ0ZXN5IGluc3RydWN0aW9uYWwgYWlkcyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yMS4wMCNVbmRlcnN0YW5kaW5nIG9yIGRlYWxpbmcgd2l0aCBjdWx0dXJhbCBkaXZlcnNpdHkgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjIuMDAjSG93IHRvIHJlYWQgYm9keSBsYW5ndWFnZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yMy4wMCNEZXZlbG9waW5nIHJlc2lsaWVuY3kgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjQuMDAjVW5kZXJzdGFuZGluZyBjb21tdW5pdHkgc2VydmljZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yNS4wMCNEZXZlbG9waW5nIHJlZnVzYWwgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI2LjAwI1Jlc3BvbnNpYmlsaXR5IG9yIERkZWNpc2lvbiBtYWtpbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI3LjAwI1VuZGVyc3RhbmRpbmcgdGVlbnMgbGVnYWwgcmlnaHRzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI4LjAwI1JlcGVyY3Vzc2lvbnMgb2YgZHJvcHBpbmcgb3V0IG9mIHNjaG9vbCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yOS4wMCNSYWNlIHJlbGF0aW9ucyB2aWRlb3MjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTUuMDAuMDAjSG9tZSBhbmQgaW50ZXJpb3IgZGVzaWduIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjU1LjAxLjAwI0Zlbmcgc2h1aSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NS4wMC4wMAotdW5zcHNjNyM2MC4xMC41NS4wMi4wMCNJbnN0cnVjdGlvbmFsIG1hdGVyaWFscyBmb3IgdXNpbmcgY29sb3Igb3IgcGFpbnQgZm9yIGhvbWUgZGVjb3JhdGlvbiM2MC4xMC41NS4wMC4wMAotdW5zcHNjNyM2MC4xMC41NS4wMy4wMCNJbnN0cnVjdGlvbmFsIG1hdGVyaWFscyBmb3IgaG9tZSBwbGFubmluZyBvciBkZXNpZ24jNjAuMTAuNTUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTUuMDQuMDAjTGFuZHNjYXBpbmcgZGVzaWduIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU1LjA1LjAwI0luc3RydWN0aW9uYWwgbWF0ZXJpYWxzIGZvciBob21lIGRlY29yYXRpbmcgb3IgZnVybmlzaGluZyM2MC4xMC41NS4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wMC4wMCNIZWFsdGggZWR1Y2F0aW9uIGFuZCBudXRyaXRpb24gYW5kIGZvb2QgcHJlcGFyYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDEuMDAjRGlldGFyeSBndWlkZWxpbmVzIG9yIGJhbGFuY2VkIGRpZXRzIGVkdWNhdGlvbmFsIHJlc291cmNlcyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wMi4wMCNOdXRyaXRpb25hbCBjdXJyaWN1bHVtIG1lbnUgcGxhbm5pbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjAzLjAwI1VuZGVyc3RhbmRpbmcgbnV0cml0aW9uIGxhYmVsaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjA0LjAwI0Zvb2Qgc2hvcHBpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDUuMDAjSGVhbHRoeSBmb29kIGNob2ljZXMgZGVtb25zdHJhdGlvbiB1bml0cyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wNi4wMCNVbmRlcnN0YW5kaW5nIHRoZSBlZmZlY3RzIG9mIGRpZXRhcnkgZmF0IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjA3LjAwI1VuZGVyc3RhbmRpbmcgdmVnZXRhcmlhbmlzbSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wOC4wMCNSZWNpcGUgYm9va3Mgb3IgY29vayBib29rcyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wOS4wMCNFYXRpbmcgZGlzb3JkZXJzIGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xMC4wMCNXZWlnaHQgY29udHJvbCBvciBleGVyY2lzZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xMS4wMCNLaXRjaGVuIG1lYXN1cmVtZW50cyBvZiBzb2xpZHMgb3IgbGlxdWlkcyBpbnN0cnVjdGlvbmFsIGFpZHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTIuMDAjS2l0Y2hlbiBlcXVpdmFsYW50cyBvciBraXRjaGVuIG1hdGggaW5zdHJ1Y3Rpb25hbCBhaWRzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjEzLjAwI0tpdGNoZW4gdXRlbnNpbHMgaW5zdHJ1Y3Rpb25hbCBhaWRzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjE0LjAwI0tpdGNoZW4gc2FmZXR5IG9yIHNhbml0YXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTUuMDAjRm9vZCBzYWZldHkgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTYuMDAjRm9vZCBzY2llbmNlIGFjdGl2aXRpZXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTcuMDAjQ29va2luZyBza2lsbHMgaW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTguMDAjVGFibGUgbWFubmVycyBvciBlYXRpbmcgZXRpcXVldHRlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjE5LjAwI1RhYmxlIHNldHRpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjAuMDAjRm9vZCBzZXJ2aWNlIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjIxLjAwI0RydWcgb3IgdG9iYWNjbyBvciBhbGNvaG9sIGFidXNlIGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yMi4wMCNTbW9raW5nIFNpbXVsYXRvcnMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjMuMDAjVW5kZXJzdGFuZGluZyBhZGRpY3Rpb24gb3IgYWRkaWN0aW9uIGF2b2lkYW5jZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yNC4wMCNUZWVuIGRlcHJlc3Npb24gc3ltcHRvbXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjUuMDAjVGVlbiBzdWljaWRlIGF2b2lkYW5jZSB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yNi4wMCNDb3Bpbmcgd2l0aCBzdHJlc3MgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTcuMDAuMDAjTWVtb3J5IGJvb2tzIGFuZCBzdXBwbGllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ny4wMS4wMCNNZW1vcnkgYm9va3MjNjAuMTAuNTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTcuMDIuMDAjTWVtb3J5IGJvb2sgcG9zdHMgb3IgZXh0ZW5kZXJzIzYwLjEwLjU3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU3LjAzLjAwI01lbW9yeSBib29rIHBhcGVyIzYwLjEwLjU3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU3LjA0LjAwI0FjaWQgZnJlZSBtZW1vcnkgYm9vayBnbHVlIHN0aWNrcyM2MC4xMC41Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ny4wNS4wMCNBY2lkIGZyZWUgbWVtb3J5IGJvb2sgdGFwZSM2MC4xMC41Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wMC4wMCNDbG90aGluZyBhbmQgdGV4dGlsZSBkZXNpZ24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDEuMDAjU2V3aW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wMi4wMCNTZXdpbmcgcHJvamVjdCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDMuMDAjVW5kZXJzdGFuZGluZyBjbG90aGluZyBjb25zdHJ1Y3Rpb24gb3Igd29ya21hbnNoaXAgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDQuMDAjQ2xvdGhpbmcgZGVzaWduIG9yIGZhc2hpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDUuMDAjUGVyc29uYWwgY29sb3IgYW5hbHlzaXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDYuMDAjRmFzaGlvbiBtZXJjaGFuZGlzaW5nIG9yIHJldGFpbCBmdW5kYW1lbnRhbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDcuMDAjU2NpZW5jZSBvZiBmYWJyaWNzIG9yIGZpYmVycyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wOC4wMCNDbG90aGluZyBjYXJlIG9yIG1haW50ZW5hbmNlIG9yIGxhdW5kZXJpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDkuMDAjTWF0ZXJpYWxzIGZvciB0ZWFjaGluZyB0aGUgYXJ0IG9mIGRlc2lnbiBjb2xvciBvbiBmYWJyaWMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMTAuMDAjRmFicmljIGR5ZXMgb3IgcGFpbnRzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjExLjAwI1F1aWx0aW5nIHByb2plY3RzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjAwLjAwI0RhdGluZyBhbmQgc2V4IGFuZCB0ZWVuIHByZWduYW5jeSBhbmQgcGFyZW50aW5nIHNraWxscyBhbmQgY2hpbGQgZGV2ZWxvcG1lbnQgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDEuMDAjU2V4IGVkdWNhdGlvbiBvciBzZXh1YWxseSB0cmFuc21pdHRlZCBkaXNlYXNlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjAyLjAwI1ByZW5hdGFsIG51dHJpdGlvbiByZXNvdXJjZXMgb3IgZmV0YWwgYWJ1c2UgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDMuMDAjUGFyZW50aW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wNC4wMCNDaGlsZCBkZXZlbG9wbWVudCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wNS4wMCNVbmRlcnN0YW5kaW5nIGRhdGUgcmFwZSBvciBkYXRpbmcgc2tpbGxzIG9yIGhhcmFzc21lbnQgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDYuMDAjQ2hpbGRiaXJ0aCBlZHVjYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDcuMDAjUHJlZ25hbmN5IGZyb20gY29uY2VwdGlvbiB0aHJvdWdoIGJpcnRoIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjA4LjAwI1VuZGVyc3RhbmRpbmcgdGhlIHJpc2tzIG9mIGJpcnRoIGRlZmVjdHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDkuMDAjUHJlZ25hbmN5IHNpbXVsYXRvcnMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTAuMDAjSW5mYW50IHNpbXVsYXRvcnMgYW5kIGFjY2Vzc29yaWVzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjExLjAwI0luZmFudCBjYXJlIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjEyLjAwI1VuZGVyc3RhbmRpbmcgcGh5c2ljYWwgb3IgZW1vdGlvbmFsIGNoaWxkIGFidXNlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjEzLjAwI0Rpc2NpcGxpbmUgc2tpbGwgZWR1Y2F0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIGZvciBwYXJlbnRzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjE0LjAwI0hvbWUgc2FmZXR5IG9yIGNoaWxkcHJvb2ZpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTUuMDAjQ2FyZGlvIHB1bG1vbmFyeSByZXN1c2l0YXRpb24gb3IgIGJhc2ljIGxpZmUgc3VwcG9ydCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xNi4wMCNVbmRlcnN0YW5kaW5nIGNoaWxkaG9vZCBpbGxuZXNzZXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTcuMDAjVW5kZXJzdGFuZGluZyBhdHRlbnRpb24gZGVmaWNpdCBoeXBlcmFjdGl2aXR5IGRpc29yZGVyIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjE4LjAwI0NoaWxkIGNhcmVnaXZlciBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xOS4wMCNCYWJ5c2l0dGluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MC4wMC4wMCNDdXJyaWN1bHVtIGd1aWRlcyBhbmQgcHJvamVjdHMgYW5kIGFjdGl2aXRpZXMgYW5kIGxlc3NvbnMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjAuMDEuMDAjTWlkZGxlIHNjaG9vbCBjdXJyaWN1bHVtIHJlc291cmNlIG9yIGlkZWEgYm9va3MjNjAuMTAuNjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjAuMDIuMDAjSGlnaCBTY2hvb2wgY3VycmljdWx1bSByZXNvdXJjZSBvciBpZGVhIGJvb2tzIzYwLjEwLjYwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYwLjAzLjAwI0hvbWUgZWNvbm9taWNzIGluZGVwZW5kZW50IHN0dWR5IHByb2plY3RzIzYwLjEwLjYwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYwLjA0LjAwI0hvbWUgZWNvbm9taWNzIHByb2plY3RzIG9yIGFjdGl2aXRpZXMgcmVzb3VyY2VzIG9yIGd1aWRlcyM2MC4xMC42MC4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wMC4wMCNWb2NhdGlvbmFsIHRlYWNoaW5nIGFpZHMgYW5kIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wMS4wMCNBdXRvbW90aXZlIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjAyLjAwI0NvbnN0cnVjdGlvbiB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wMy4wMCNEcmFmdGluZyBvciBkZXNpZ24gdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDQuMDAjRWxlY3Ryb25pY3Mgb3IgZWxlY3RyaWNpdHkgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDUuMDAjR3JhcGhpYyBhcnRzIG9yIHBob3RvZ3JhcGh5IHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjA2LjAwI0hvcnRpY3VsdHVyZSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wNy4wMCNNYW51ZmFjdHVyaW5nIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjAwLjAwI1RlY2hub2xvZ3kgdGVhY2hpbmcgYWlkcyBhbmQgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjAxLjAwI0FncmljdWx0dXJlIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjAyLjAwI0Jpb3RlY2hub2xvZ3kgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDMuMDAjQ29tbXVuaWNhdGlvbnMgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDQuMDAjQ29tcHV0ZXIgc2NpZW5jZSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wNS4wMCNFbmVyZ3kgb3IgcG93ZXIgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDYuMDAjRW52aXJvbm1lbnRhbCB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wNy4wMCNNYXRlcmlhbHMgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDguMDAjTWVkaWNhbCB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wOS4wMCNUcmFuc3BvcnRhdGlvbiB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42My4wMC4wMCNGb3JlbnNpYyBzY2llbmNlIHRlYWNoaW5nIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjMuMDEuMDAjRm9yZW5zaWMgc2NpZW5jZSBraXRzIzYwLjEwLjYzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjY0LjAwLjAwI0VsZWN0cm9uaWNzIHRlYWNoaW5nIHN1cHBsaWVzIGFuZCBlcXVpcG1lbnQjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjQuMDEuMDAjRWxlY3Ryb25pY3Mga2l0cyM2MC4xMC42NC4wMC4wMAotdW5zcHNjNyM2MC4xMC42NC4wMi4wMCNFbGVjdHJvbmljcyB0ZWFjaGluZyBzdXBwbGllcyM2MC4xMC42NC4wMC4wMAotdW5zcHNjNyM2MC4xMC42NC4wMy4wMCNGb3JlbnNpYyBzY2llbmNlIHRlYWNoaW5nIHN1cHBsaWVzIzYwLjEwLjY0LjAwLjAwCi11bnNwc2M3IzYwLjExLjAwLjAwLjAwI0NsYXNzcm9vbSBkZWNvcmF0aXZlcyBhbmQgc3VwcGxpZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTAuMDAuMDAjQ2xhc3Nyb29tIENoYXJ0cyBvciBjbGFzc3Jvb20gcG9zdGVycyM2MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMC4wMS4wMCNDaGFydCBwYWNrcyM2MC4xMS4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMC4wMi4wMCNDbGFzc3Jvb20gY2hhcnRzIzYwLjExLjEwLjAwLjAwCi11bnNwc2M3IzYwLjExLjEwLjAzLjAwI0NsYXNzcm9vbSBwb3N0ZXJzIG9yIHNldHMjNjAuMTEuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTAuMDQuMDAjRG8gaXQgeW91cnNlbGYgcG9zdGVycyM2MC4xMS4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wMC4wMCNCdWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjAwLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjAxLjAwI0JpZyBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjAyLjAwI0NhbGVuZGFyIGJ1bGxldGluZyBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjAzLjAwI0Vhcmx5IGNoaWxkaG9vZCBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA0LjAwI0xhbmd1YWdlIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDUuMDAjTWF0aCBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA2LjAwI011bHRpcHVycG9zZSBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA3LjAwI1NjaWVuY2UgYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wOC4wMCNTZWFzb25hbCBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA5LjAwI1NvY2lhbCBzdHVkaWVzIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDAuMDAjQnVsbGV0aW4gYm9hcmQgYm9yZGVycyBhbmQgdHJpbW1lcnMjNjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDEuMDAjQ2xhc3Nyb29tIGJhbm5lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDIuMDAjQm9yZGVyIHBhY2tzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjAzLjAwI0NsYXNzcm9vbSBoZWFkZXJzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjA0LjAwI0NvcnJpZ3VhdGVkIGJvcmRlcnMgb3IgdHJpbW1lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDUuMDAjRGllIGN1dCBzaGFwZWQgc2NhbGxvcGVkIGJvcmRlcnMgb3IgdHJpbW1lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDYuMDAjU3BhcmtsZSBib3JkZXJzIG9yIHRyaW1tZXJzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjA3LjAwI1N0cmFpZ2h0IGJvcmRlcnMgb3IgdHJpbW1lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDguMDAjQm9yZGVyIG9yIFRyaW1tZXIgc3RvcmFnZSM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wMC4wMCNEZWNvcmF0aXZlIGxldHRlcnMgYW5kIG51bWJlcnMjNjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDEuMDAjTGV0dGVyZWQgb3IgbnVtYmVyZWQgYmxvY2tzIzYwLjExLjEzLjAwLjAwCi11bnNwc2M3IzYwLjExLjEzLjAyLjAwI0Nhc3VhbCBsZXR0ZXJzIG9yIG51bWJlcnMjNjAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDMuMDAjSXRhbGljIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wNC4wMCNTZWxmIGFkaGVzaXZlIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wNS4wMCNTcGFya2xlIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wNi4wMCNUcmFjaW5nIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wMC4wMCNTcGVjaWFsdHkgZGVjb3JhdGl2ZXMgZm9yIHRoZSBjbGFzc3Jvb20gYW5kIGRlY29yYXRpdmUgYWNjZXNzb3JpZXMjNjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDEuMDAjQ2xhc3Nyb29tIGRlY29yYXRpdmUga2l0cyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wMi4wMCNEb29yIGRlY29yYXRpb25zIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjAzLjAwI01vYmlsZXMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDQuMDAjVHdvIHNpZGVkIGRlY29yYXRpb25zIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjA1LjAwI1dpbmRvdyBjbGluZyBkZWNvcmF0aW9ucyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wNy4wMCNEZWNvcmF0aXZlIFN0b3JhZ2UgU3lzdGVtcyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wOC4wMCNEZWNvcmF0aXZlIHRhcGVzIG9yIHR3aXN0cyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wOS4wMCNEZWNvcmF0aXZlIGJ1dHRvbnMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMTAuMDAjRGVjb3JhdGl2ZSBzaGFwZXMgb3Igc3RyaW5ncyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4wMC4wMC4wMCNBcnRzIGFuZCBjcmFmdHMgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyBhbmQgc3VwcGxpZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDAuMDAjQXJ0IzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjAxLjAwI1BhaW50aW5ncyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wMi4wMCNTY3VscHR1cmVzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjAzLjAwI1N0YXR1YXJ5IzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjA0LjAwI1BvcnRyYWl0cyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wNS4wMCNEcmF3aW5ncyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wNi4wMCNQaWN0dXJlcyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wNy4wMCNMaXRob2dyYXBocyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wOC4wMCNQb3N0ZXJzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjA5LjAwI0RlY29yYXRpdmUgcG90IzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjEwLjAwI1Njcm9sbHMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMTEuMDAjUGhvdG9ncmFwaHMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDAuMDAjQ2FudmFzZXMgYW5kIGZpbG1zIGFuZCBib2FyZHMgYW5kIGFydGlzdHMgcGFwZXJzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjAxLjAwI1N1bHBoaXRlIGRyYXdpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDIuMDAjR3JvdW5kd29vZCBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjAzLjAwI1RyYWNpbmcgb3IgdmVsbHVtIGRyYXdpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDQuMDAjQm9uZCBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjA1LjAwI0NoYXJjb2FsIG9yIHBhc3RlbCBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjA2LjAwI0JyaXN0b2wgZHJhd2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wNy4wMCNXYXRlcmNvbG9yIHBhcGVyIHNoZWV0cyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wOC4wMCNXYXRlcmNvbG9yIHBhcGVyIHBhZHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDkuMDAjV2F0ZXJjb2xvciBwYXBlciBibG9ja3MjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTAuMDAjRmluZ2VyIHBhaW50IHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjExLjAwI1N1bHBoaXRlIGNvbnN0cnVjdGlvbiBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xMi4wMCNHcm91bmR3b29kIGNvbnN0cnVjdGlvbiBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xMy4wMCNGb2lsIGNvbnN0cnVjdGlvbiBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xNC4wMCNPcmlnYW1pIGNyYWZ0IHBhcGVycyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xNS4wMCNQYXBlciBvciBwbGFzdGljIENvbmZldHRpIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjE2LjAwI0NyZXBlIHBhcGVyIGZvciBjcmFmdHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTcuMDAjQ3JhZnQgdGlzc3VlIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjE4LjAwI0NvcnJ1Z2F0ZWQgY3JhZnQgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTkuMDAjUGF0dGVybiBwcmludGVkIGNyYWZ0IHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjIwLjAwI1NlbGYgYWRoZXNpdmUgY3JhZnQgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjEuMDAjR2xvdyBpbiB0aGUgZGFyayBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yMy4wMCNIYW5kIG1hZGUgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjQuMDAjS3JhZnQgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjUuMDAjQ2FudmFzIHBhbmVscyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yNi4wMCNQcmVzdHJldGNoZWQgY2FudmFzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjI3LjAwI1ByaW1lZCBjYW52YXMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjguMDAjVW5wcmltZWQgY2FudmFzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjI5LjAwI01hc29uaXRlIHBhbmVscyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zMC4wMCNDYW52YXMgbGlrZSBwYXBlciBwYWRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjMxLjAwI0phcGFuZXNlIHByaW50bWFraW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjMyLjAwI0xpdGhvZ3JhcGh5IG9yIGludGFnbGlvIHByaW50bWFraW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjMzLjAwI0Jsb2NrcHJpbnRpbmcgcHJpbnRtYWtpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzQuMDAjRm9pbCBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zNS4wMCNBY2V0YXRlIG9yIHZpbnlsIG9yIHBvbHllc3RlciBmaWxtcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zNi4wMCNDZWxsb3BoYW5lIGZpbG1zIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjM3LjAwI0FjcnlsaWMgc2hlZXRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjM4LjAwI0lsbHVzdHJhdGlvbiBib2FyZHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzkuMDAjTWF0IGJvYXJkcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40MC4wMCNNb3VudGluZyBib2FyZCM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40MS4wMCNGb2FtIGNvcmUgbW91bnRpbmcgYm9hcmQjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDIuMDAjVGFnYm9hcmQgb3IgcmFpbHJvYWQgYm9hcmQjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDMuMDAjRGlzcGxheSBib2FyZCM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40NC4wMCNTY3JhdGNoIGFydCBwYXBlcnMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDUuMDAjU2NyYXRjaCBhcnQgYm9hcmRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjQ2LjAwI1NjcmF0Y2ggYXJ0IGFjY2Vzc29yaWVzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjAwLjAwI0NsYXNzcm9vbSBhbmQgZmluZSBhcnQgcGFpbnQgYW5kIG1lZGl1bXMgYW5kIGFwcGxpY2F0b3JzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wMS4wMCNUcmFkaXRpb25hbCBsaXF1aWQgdGVtcGVyYSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wMi4wMCNDb250ZW1wb3JhcnkgbGlxdWlkIHRlbXBlcmEgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDMuMDAjUG93ZGVyZWQgdGVtcGVyYSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wNC4wMCNXYXNoYWJsZSB0ZW1wZXJhIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjA1LjAwI1RlbXBlcmEgY2FrZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDYuMDAjTGlxdWlkIGZhY2Ugb3IgYm9keSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wNy4wMCNDYWtlIGZhY2Ugb3IgYm9keSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wOC4wMCNNYXJrZXIgZmFjZSBvciBib2R5IHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjA5LjAwI1RlbXBvcmFyeSB0YXR0b28gcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTAuMDAjV2FzaGFibGUgZmluZ2VyIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjExLjAwI1NjaG9vbCBzdHlsZSBhY3J5bGljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjEyLjAwI0FjcnlsaWMgYWlyYnJ1c2ggcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTMuMDAjU3ludGhldGljIGhlYXQgdHJlYXRlZCBvaWwgcGFpbnQgb3IgbWVkaXVtcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xNC4wMCNXYXRlciBzb2x1YmxlIG9pbCBwYWludCBvciBtZWRpdW1zIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjE1LjAwI0xvdyB2aXNjb3NpdHkgcmVtb3ZhYmxlIGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTYuMDAjTG93IHZpc2Nvc2l0eSBwZXJtYW5lbnQgZ2xhc3Mgb3IgY2VyYW1pYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xNy4wMCNIaWdoIHZpc2Nvc2l0eSBHZWwgcmVtb3ZhYmxlIGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTguMDAjSGlnaCB2aXNjb3NpdHkgR2VsIHBlcm1hbmVudCBnbGFzcyBvciBjZXJhbWljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjE5LjAwI092ZW4gYmFrZWQgZ2xhc3Mgb3IgY2VyYW1pYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yMC4wMCNNYXJrZXIgZGVsaXZlcnkgc3lzdGVtIGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjEuMDAjUGFuIHdhdGVyY29sb3IgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjIuMDAjVHViZSB3YXRlcmNvbG9yIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjIzLjAwI0xpcXVpZCB3YXRlcmNvbG9yIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI0LjAwI0xpcXVpZCB3YXRlcmNvbG9yIGZyaXNrZXQgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjUuMDAjV2F0ZXJjb2xvciBwYWludGluZyBtZWRpdW1zIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI2LjAwI1dhdGVyY29sb3IgYnJ1c2hlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yNy4wMCNPcmllbnRhbCBicnVzaGVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI4LjAwI1V0aWxpdHkgYnJ1c2hlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yOS4wMCNTcGVjaWFsdHkgYnJ1c2hlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zMC4wMCNFYXNlbCBicnVzaGVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjMxLjAwI1BhbGV0dGUga25pdmVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjMyLjAwI0JyYXllcnMgZm9yIGhhbmQgcHJpbnRpbmcjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzMuMDAjU3BvbmdlIHN0YW1wcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zNC4wMCNTY3JhcGVycyBmb3IgcGFpbnQgYXBwbGljYXRpb24jNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzUuMDAjUGlwZXR0ZXMgZm9yIHBhaW50IG9yIGR5ZSBtaXhpbmcjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzYuMDAjQ29tYnMgb3IgdG9vbHMgZm9yIHBhaW50IG9yIGluayBhcHBsaWNhdGlvbiM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zNy4wMCNQYWxldHRlcyBmb3IgcGFpbnQgb3IgaW5rIG1peGluZyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zOC4wMCNQYWludCBwb3RzIGZvciBwYWludCBzdG9yYWdlIG9yIG1peGluZyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zOS4wMCNQYWludCBjdXBzIG9yIGJvdHRsZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDEuMDAjQnJ1c2ggb3IgdG9vbCBjbGVhbmVycyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40Mi4wMCNQYWludCBhcHJvbnMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDMuMDAjQXJ0aXN0cyBTbW9ja3MjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDQuMDAjU3RyZXRjaGVyIHN0cmlwcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40NS4wMCNDYW52YXMgc3RyZXRjaGVycyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40Ni4wMCNNZXRhbCBlYXNlbHMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDcuMDAjV29vZCBlYXNlbHMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDguMDAjVGFibGUgdG9wIGVhc2VscyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40OS4wMCNQcmVzZW50YXRpb24gZWFzZWxzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjAwLjAwI0FydCBhbmQgY3JhZnQgY3V0dGluZyBwcm9kdWN0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wMS4wMCNHdWlsbG90aW5lIHBhcGVyIHRyaW1tZXJzIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjAyLjAwI01hdCBjdXR0ZXIjNjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTMuMDMuMDAjTWF0IGtuaXZlcyM2MC4xMi4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wNC4wMCNBcnRpc3Qga25pdmVzIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjA1LjAwI1JvdGFyeSBwYXBlciBvciBmYWJyaWMgY3V0dGVyIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjA2LjAwI0NpcmNsZSBvciBvdmFsIHBhcGVyIGN1dHRlcnMjNjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDAuMDAjUGljdHVyZSBGcmFtaW5nIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjAxLjAwI1ByZSBhc3NlbWJsZWQgd29vZCBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wMi4wMCNXb29kIHNlY3Rpb24gcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDMuMDAjUHJlIGFzc2VtYmxlZCBtZXRhbCBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wNC4wMCNNZXRhbCBzZWN0aW9uIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjA1LjAwI0FkanVzdGFibGUgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDYuMDAjUGxhc3RpYyBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wNy4wMCNDbGVhciBib3ggcGljdHVyZSBmcmFtZSM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wOC4wMCNQb2ludCBkcml2ZXJzIG9yIGFjY2Vzc29yaWVzIGZvciBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wOS4wMCNNaXRyZSBib3gjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMTAuMDAjUGljdHVyZSBIYW5naW5nIGRldmljZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMTEuMDAjQWNyeWxpYyBwYW5lbHMgZm9yIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjEyLjAwI0dsYXNzIHBhbmVscyBmb3IgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDAuMDAjRHJhd2luZyB0b29scyBhbmQgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjAxLjAwI1dhdGVyIGJhc2VkIG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDIuMDAjU29sdmVudCBiYXNlZCBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjAzLjAwI1dhc2hhYmxlIG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDQuMDAjQ2FsbGlncmFwaHkgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wNS4wMCNGYWJyaWMgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wNi4wMCNNZXRhbGxpYyBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjA3LjAwI1RlbXBlcmEgb3IgY2hhbGsgd2luZG93IG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDguMDAjUGFpbnQgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wOS4wMCNXYXggYmFzZWQgY3JheW9ucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xMC4wMCNTb3kgYmFzZWQgY3JheW9ucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xMS4wMCNTcGVjaWFsdHkgY3JheW9ucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xMi4wMCNXYXRlcmNvbG9yIGNyYXlvbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTMuMDAjRHJ5IHBhc3RlbCM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xNC4wMCNDaGFsayBwYXN0ZWwjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTUuMDAjT2lsIGJhc2VkIHBhc3RlbCM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xNi4wMCNDb21wcmVzc2VkIGNoYXJjb2FsIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjE3LjAwI1ZpbmUgY2hhcmNvYWwjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTguMDAjR3JhcGhpdGUgcGVuY2lscyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xOS4wMCNXYXggYmFzZWQgY29sb3JlZCBkcmF3aW5nIHBlbmNpbHMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjAuMDAjQ2hhcmNvYWwgcGVuY2lscyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yMS4wMCNXYXRlcmNvbG9yIHBlbmNpbHMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjIuMDAjV2F0ZXJiYXNlZCBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjIzLjAwI1Blcm1hbmVudCBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjI0LjAwI0dlbCBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjI1LjAwI1RlY2huaWNhbCBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjI2LjAwI0NhbGxpZ3JhcGh5IHBlbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjguMDAjV2F0ZXIgYmFzZWQgZHJhd2luZyBpbmsjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjkuMDAjU29sdmVudCBiYXNlZCBkcmF3aW5nIGluayM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zMC4wMCNDYWxsaWdyYXBoeSBkcmF3aW5nIGluayM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zMS4wMCNQaW5rIHBlbmNpbCBlcmFzZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjMyLjAwI0tuZWFkZWQgZXJhc2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zMy4wMCNWaW55bCBlcmFzZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjM0LjAwI1BsYXN0aWMgZXJhc2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zNS4wMCNHdW0gZXJhc2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wMC4wMCNTdHVkaW8gYWlkcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wMS4wMCNXb29kIE1hbm5lcXVpbnMjNjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTYuMDIuMDAjQ2xlYXIgYWNyeWxpYyBtaXJyb3JzIG9yIHBhbmVscyM2MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wMy4wMCNQbGFzdGljIFJ1YmJpbmcgcGxhdGVzIzYwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE2LjA0LjAwI1N0dWRpbyBhaWQgYWNjZXNzb3JpZXMjNjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTYuMDUuMDAjQW5hdG9taWNhbCBtb2RlbHMjNjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDAuMDAjUHJpbnRtYWtpbmcgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjAxLjAwI1J1YmJlciBzdGFtcGluZyBzdGFtcHMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDIuMDAjUnViYmVyIHN0YW1waW5nIHN0YW1wIHBhZHMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDMuMDAjUnViYmVyIHN0YW1waW5nIGFjY2Vzc29yaWVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjA0LjAwI0xpbm9sZXVtIGZvciBibG9jayBwcmludGluZyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wNS4wMCNXb29kIGJsb2NrcyBmb3IgcHJpbnRpbmcjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDYuMDAjU3ludGhldGljIGJsb2NrcyBmb3IgcHJpbnRpbmcjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDcuMDAjQmxvY2sgcHJpbnRpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDguMDAjSW50YWdsaW8gb3IgbGl0aG9ncmFwaHkgcGxhdGVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjA5LjAwI0ludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IGJsYW5rZXRzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjEwLjAwI0ludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IHdpcGVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjExLjAwI0ludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IGhvdCBwbGF0ZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTIuMDAjSW50YWdsaW8gb3IgbGl0aG9ncmFwaHkgcHJpbnRpbmcgcHJlc3NlcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4xMy4wMCNQcmludGluZyBCYXJlbnMgYW5kIEJyYXllcnMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTQuMDAjSW50YWdsaW8gRXRjaGluZyBvciBlbmdyYXZpbmcgdG9vbHMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTUuMDAjU2lsa3NjcmVlbiBzY3JlZW5zIG9yIHByaW50aW5nIHN0YXRpb25zIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjE2LjAwI1NpbGtzY3JlZW4gYWNjZXNzb3JpZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDAuMDAjUHJpbnRpbmcgYW5kIGRyYXdpbmcgaW5rcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wMS4wMCNXYXRlciBiYXNlZCBwb3N0ZXIgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wMi4wMCNXYXRlciBiYXNlZCBhY3J5bGljIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDMuMDAjT2lsIGJhc2VkIHNpbGtzY3JlZW4gaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wNC4wMCNXYXRlciBiYXNlZCBUZXh0aWxlIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDUuMDAjT2lsIGJhc2VkIHRleHRpbGUgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wNi4wMCNQcmludG1ha2luZyBzdWJsaW1hdGlvbiBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjA3LjAwI09pbCBiYXNlZCBpbnRhZ2xpbyBvciBsaXRob2dyYXBoeSBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjA4LjAwI09pbCBiYXNlZCBtb25vcHJpbnQgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wOS4wMCNXYXRlciBiYXNlZCBtb25vcHJpbnQgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4xMC4wMCNXYXRlciBiYXNlZCBkcmF3aW5nIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMTEuMDAjU29sdmVudCBiYXNlZCBkcmF3aW5nIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMTIuMDAjQ2FsbGlncmFwaHkgZHJhd2luZyBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjEzLjAwI1NpbGtzY3JlZW4gaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wMC4wMCNBcnQgZmFicmljIGFuZCBmYWJyaWMgZGVjb3JhdGlvbiBtYXRlcmlhbHMgYW5kIHN1cHBsaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjAxLjAwI011c2xpbiM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wMi4wMCNGZWx0IzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjAzLjAwI0NyYWZ0IGZ1ciM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wNC4wMCNDb3R0b24gYmxlbmRzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjA1LjAwI0NhbnZhcyBpbXByaW50YWJsZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDYuMDAjUHJlIHNlbnNpdGl6ZWQgaW1wcmludGFibGVzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjA3LjAwI0NvdHRvbiBpbXByaW50YWJsZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDguMDAjQmxlbmRlZCBpbXByaW50YWJsZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDkuMDAjQmF0aWsgd2F4ZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMTAuMDAjQmF0aWsgYWNjZXNzb3JpZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMTEuMDAjQmF0aWsgZmFicmljIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjAwLjAwI1Nld2luZyBhbmQgc3RpdGNoZXJ5IGFuZCB3ZWF2aW5nIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDEuMDAjV2VhdmluZyBvciB0YXBlc3RyeSBuZWVkbGVzIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjAyLjAwI1dlYXZpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDMuMDAjSGFuZCBzZXdpbmcgbmVlZGxlcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wNC4wMCNTdHJpbmcgYXJ0IGtpdHMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDUuMDAjSGFuZCBsb29tcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wNi4wMCNUYWJsZSBsb29tcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wNy4wMCNGbG9vciBsb29tcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wOC4wMCNSZXhsYWNlIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjA5LjAwI0xhY2luZyBvciBzdHJpbmdpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjEuMDAuMDAjQ2FuZGxlbWFraW5nIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIxLjAxLjAwI0NhbmRsZW1ha2luZyB3aWNrcyM2MC4xMi4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMS4wMi4wMCNDYW5kbGVtYWtpbmcgZm9ybXMjNjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjEuMDMuMDAjQ2FuZGxlbWFraW5nIGFjY2Vzc29yaWVzIzYwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjAwLjAwI1dvb2QgY3JhZnRzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjAxLjAwI1dvb2QgY3JhZnQgbWF0ZXJpYWxzIzYwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjAyLjAwI0ZpbmlzaGluZyBtYXRlcmlhbHMjNjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjIuMDMuMDAjV29vZCBidXJuaW5nIHRvb2xzIzYwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjA0LjAwI0NhcnZpbmcgdG9vbHMjNjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjMuMDAuMDAjQmFza2V0cnkgbWFraW5nIHN1cHBsaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIzLjAxLjAwI0Jhc2tldHJ5IHJlZWQjNjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjMuMDIuMDAjQmFza2V0cnkgcHJvamVjdCBraXRzIzYwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI0LjAwLjAwI1N0YWluZWQgZ2xhc3MgbWFraW5nIHN1cHBsaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI0LjAxLjAwI1N0YWluZWQgR2xhc3MgZnJhZ21lbnRzIzYwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI0LjAyLjAwI1N0YWluZWQgZ2xhc3MgdG9vbHMgb3IgYWNjZXNzb3JpZXMjNjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDAuMDAjUGFwZXIgY3JhZnRzIGFuZCBoYW5kIG1hZGUgcGFwZXJtYWtpbmcjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDEuMDAjUGFwZXIgc2hhcGluZyB0b29scyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wMi4wMCNQYXBlciBwaWN0dXJlIGZyYW1lcyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wMy4wMCNQYXBlciBwbGF0ZXMgb3IgdHJheXMjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDQuMDAjUGFwZXIgZmlsdGVycyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wNS4wMCNDb3JydWdhdGVkIGNhcmRib2FyZCBzaGFwZXMjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDYuMDAjUGFwZXIgRG9pbGllcyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wNy4wMCNEZWNrbGVzIG9yIG1vbGRzIGZvciBoYW5kIG1hZGUgcGFwZXIjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDguMDAjQ291Y2ggc2hlZXRzIG9yIGZlbHRzIGZvciBoYW5kIG1hZGUgcGFwZXIjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDkuMDAjUHVscCBvciByYXcgbWF0ZXJpYWxzIGZvciBoYW5kIG1hZGUgcGFwZXIjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjYuMDAuMDAjTW9zYWljcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNi4wMS4wMCNNb3NhaWMgdGlsZXMjNjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjYuMDIuMDAjTW9zYWljIG1vbGRzIzYwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI2LjAzLjAwI01vc2FpYyB0b29scyM2MC4xMi4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNi4wNC4wMCNNb3NhaWMgYWNjZXNzb3JpZXMjNjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjcuMDAuMDAjRW5hbWVsaW5nIHBhaW50cyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjcuMDEuMDAjRW5hbWVsaW5nIHBhaW50cyBvciBtZWRpdW1zIzYwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI3LjAyLjAwI0NvcHBlciBzaGFwZXMjNjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjcuMDMuMDAjRW5hbWVsaW5nIGFjY2Vzc29yaWVzIzYwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI3LjA0LjAwI0VuYW1lbGluZyBLaWxucyM2MC4xMi4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOC4wMC4wMCNNYXNrbWFraW5nIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI4LjAxLjAwI01hc2ttYWtpbmcgZm9ybXMjNjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDAuMDAjQmVhZHMgb3IgYmVhZGluZyBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wMS4wMCNTZWVkIGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjAyLjAwI1BvbnkgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDMuMDAjV29vZCBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wNC4wMCNTdHJhdyBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wNS4wMCNDZXJhbWljIGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjA2LjAwI0dsYXNzIGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjA3LjAwI0Fzc29ydGVkIG9yIGRlY29yYXRpdmUgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDguMDAjQmVhZCBhY2Nlc3NvcmllcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMC4wMC4wMCNGb2FtIGNyYWZ0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMC4wMS4wMCNTdHlyb2ZvYW0gc2hhcGVzIzYwLjEyLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMwLjAyLjAwI1Rvb2xzIGZvciBmb2FtIGNyYWZ0cyM2MC4xMi4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMS4wMC4wMCNDaGVuaWxsZSBzdGVtIGNyYWZ0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMS4wMS4wMCNKdW1ibyBjaGVuaWxsZSBzdGVtcyM2MC4xMi4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMS4wMi4wMCNDb3R0b24gY2hlbmlsbGUgc3RlbXMjNjAuMTIuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzEuMDMuMDAjQnVtcHMgY2hlbmlsbGUgc3RlbXMjNjAuMTIuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDAuMDAjUmliYm9uIG1ha2luZyBtYXRlcmlhbHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDEuMDAjUGFwZXIgcmliYm9ucyM2MC4xMi4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMi4wMi4wMCNTaWxrIHJpYmJvbnMjNjAuMTIuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDMuMDAjU3ludGhldGljIHJpYmJvbnMjNjAuMTIuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDQuMDAjRGVjb3JhdGl2ZSByaWJib25zIzYwLjEyLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMzLjAwLjAwI0NyYWZ0IFBvbXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzMuMDEuMDAjQWNyeWxpYyBjcmFmdCBwb21zIzYwLjEyLjMzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMzLjAyLjAwI0dsaXR0ZXIgY3JhZnQgcG9tcyM2MC4xMi4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMy4wMy4wMCNDcmFmdCBwb20gYmVhZHojNjAuMTIuMzMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzQuMDAuMDAjV2lnZ2xlIGV5ZXMgbWF0ZXJpYWxzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM0LjAxLjAwI05vbiBzZWxmIGFkaGVzaXZlIHdpZ2dsZSBleWVzIzYwLjEyLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM0LjAyLjAwI1NlbGYgYWRoZXNpdmUgd2lnZ2xlIGV5ZXMjNjAuMTIuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzQuMDMuMDAjRGVjb3JhdGl2ZSB3aWdnbGUgZXllcyM2MC4xMi4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNS4wMC4wMCNMZWF0aGVyIGNyYWZ0IG1hdGVyaWFscyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNS4wMS4wMCNMZWF0aGVyIG9yIGxlYXRoZXIgbGFjaW5nIG1hdGVyaWFscyM2MC4xMi4zNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNS4wMi4wMCNMZWF0aGVyIGFjY2Vzc29yaWVzIzYwLjEyLjM1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjAwLjAwI0dsaXR0ZXIjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDEuMDAjR2xpdHRlciBnbHVlIzYwLjEyLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjAyLjAwI0dsaXR0ZXIgZG90cyM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wMy4wMCNHbGl0dGVyIGpld2VscyM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wNC4wMCNQbGFzdGljIGdsaXR0ZXIjNjAuMTIuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDUuMDAjSXJyaWRlc2NlbnQgZ2xpdHRlciM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wNi4wMCNNZXRhbGxpYyBnbGl0dGVyIzYwLjEyLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM3LjAwLjAwI01hY3JhbWUgY3JhZnQgbWF0ZXJpYWxzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNy4wMS4wMCNNYWNyYW1lIGNvcmQjNjAuMTIuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzcuMDIuMDAjTWFjcmFtZSBiZWFkcyM2MC4xMi4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNy4wMy4wMCNNYWNyYW1lIGFjY2Vzc29yaWVzIzYwLjEyLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM4LjAwLjAwI01hcmJsaW5nIHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zOC4wMS4wMCNNYXJibGluZyBpbmtzIzYwLjEyLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM4LjAyLjAwI01hcmJsaW5nIGFjY2Vzc29yaWVzIzYwLjEyLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM5LjAwLjAwI1NlcXVpbnMgYW5kIHRyaW1zIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM5LjAxLjAwI0RlY29yYXRpdmUgc2VxdWlucyBvciB0cmltcyM2MC4xMi4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMi40MC4wMC4wMCNDb3JrIGNyYWZ0IHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40MC4wMS4wMCNDb3JrIHNoZWV0cyM2MC4xMi40MC4wMC4wMAotdW5zcHNjNyM2MC4xMi40MC4wMi4wMCNDb3JrIHN0b3BwZXJzIzYwLjEyLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQxLjAwLjAwI011bHRpY3VsdHVyYWwgcHJvamVjdCBtYXRlcmlhbHMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQxLjAxLjAwI011bHRpY3VsdHVyYWwgcGFpbnRpbmcgcHJvZHVjdHMjNjAuMTIuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDEuMDIuMDAjTXVsdGljdWx0dXJhbCBjcmFmdHMgcHJvZHVjdHMjNjAuMTIuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDIuMDAuMDAjQ3Jvc3MgY3VycmljdWxhciBwcm9qZWN0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40Mi4wMS4wMCNNeWxhciBzY3VscHR1cmVzIzYwLjEyLjQyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjAwLjAwI0NsYXkgYW5kIG1vZGVsaW5nIGNvbXBvdW5kcyBhbmQgY2VyYW1pY3MgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wMS4wMCNNb2lzdCBraWxuIGZpcmVkIGNsYXkjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDIuMDAjRHJ5IGtpbG4gZmlyZWQgY2xheSM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wMy4wMCNLaWxuIGZ1cm5pdHVyZSM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wNC4wMCNLaWxucyBmb3IgZmlyaW5nIGNlcmFtaWNzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA1LjAwI0tpbG4gYWNjZXNzb3JpZXMgZm9yIGZpcmluZyBjZXJhbWljcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wNi4wMCNQb3R0ZXJzIHdoZWVscyBmb3IgaGFuZCBtYWRlIGNlcmFtaWNzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA3LjAwI0V4dHJ1ZGVycyBmb3IgbW9kZWxpbmcgbWF0ZXJpYWxzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA4LjAwI0NvbmVzIGZvciBmaXJpbmcga2lsbnMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDkuMDAjUG90dGVyeSBCYXR0cyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xMC4wMCNEZWNvcmF0aW5nIHdoZWVscyBmb3IgcG90dGVyeSM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xMS4wMCNDbGF5IG9yIG1vZGVsaW5nIHRvb2xzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjEyLjAwI0ZpcmVkIGNlcmFtaWMgdGlsZXMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTMuMDAjQ2xheSBzdG9yYWdlIGNvbnRhaW5lcnMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTQuMDAjUGxhc2ljaXplZCBub24gaGFyZGVuaW5nIG1vZGVsaW5nIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xNS4wMCNPaWxiYXNlZCBub25oYXJkZW5pbmcgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjE2LjAwI0FpciBkcnkgY2xheSBvciBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTcuMDAjTW9kZWxpbmcgZG91Z2gjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTguMDAjUGFwaWVyIE1hY2hlIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjE5LjAwI1NwZWNpYWx0eSBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMjAuMDAjUGxhc3RlciBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMjEuMDAjT3ZlbiBoYXJkZW5pbmcgY2xheSBvciBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMjIuMDAjUGxhc3RpYyBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMjMuMDAjQ2FzdHMgb3IgbW9sZHMgZm9yIHNoYXBpbmcgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjAwLjAwI0FydCBtZXRhbHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDEuMDAjQ29wcGVyIHRvb2xpbmcgZm9pbCM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wMi4wMCNBbHVtaW51bSB0b29saW5nIGZvaWwjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDMuMDAjQWx1bWludW0gd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wNC4wMCNCcmFzcyB0b29saW5nIGZvaWwjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDUuMDAjQnJhc3Mgd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wNi4wMCNTaWx2ZXIgc2hlZXRzIG9yIHBsYXRlcyM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wNy4wMCNTaWx2ZXIgd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wOC4wMCNQZXd0ZXIgcGVsbGV0cyBvciBzaG90cyM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wOS4wMCNQZXd0ZXIgaW5nb3RzIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjEwLjAwI051IGdvbGQgc2hlZXRzIHBsYXRlcyM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4xMS4wMCNOdSBnb2xkIHdpcmUjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMTIuMDAjR2FsdmFuaXplZCBzdG92ZXBpcGUgd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wMC4wMCNTY3VscHR1cmUgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjAxLjAwI1BsYXN0ZXIgd3JhcCM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wMi4wMCNDYXN0aW5nIHJlc2lucyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wMy4wMCNTY3VscHR1cmUgYWNjZXNzb3JpZXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDQuMDAjUHV6emxlIHJhY2tzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjA1LjAwI0J1YmJsZXMgb3IgYWNjZXNzb3JpZXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDYuMDAjUGxhc3RpYyBzYW5kIG9yIHdhdGVyIHRvb2xzIG9yIG1vbGRzIG9yIHRveXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDcuMDAjUGxheSBzYW5kIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjA4LjAwI1NhbmQgb3Igd2F0ZXIgdGFibGVzIG9yIGFjdGl2aXR5IGNlbnRlcnMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDkuMDAjVmVoaWNsZSBzZXRzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjEwLjAwI1dhdGVyd2F5IHNldHMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMTEuMDAjUGxheSB0b29scyBvciBwbGF5IHRvb2wga2l0cyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xMi4wMCNTY29vdGVyIGJvYXJkcyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xMy4wMCNCZWFuYmFncyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xNC4wMCNUYWN0aWxlIHRveXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMTUuMDAjQ29nbml0aXZlIHRveXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMDAuMDAuMDAjTXVzaWNhbCBJbnN0cnVtZW50cyBhbmQgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEwLjAwLjAwI0tleWJvYXJkIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEwLjAxLjAwI1BpYW5vcyM2MC4xMy4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMC4wMi4wMCNBY2NvcmRpb25zIzYwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEwLjAzLjAwI011c2ljYWwgb3JnYW5zIzYwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjAwLjAwI0JyYXNzIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjAxLjAwI1RydW1wZXRzIzYwLjEzLjExLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjAyLjAwI1Ryb21ib25lcyM2MC4xMy4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMS4wMy4wMCNTb3VzYXBob25lcyM2MC4xMy4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMS4wNC4wMCNTYXhvcGhvbmVzIzYwLjEzLjExLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjA1LjAwI1doaXN0bGUjNjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDAuMDAjV29vZHdpbmQgaW5zdHJ1bWVudHMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDEuMDAjQ2xhcmluZXRzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjAyLjAwI09ib2VzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjAzLjAwI011c2ljYWwgZmx1dGVzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjA0LjAwI1BpY2NvbG9lcyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wNS4wMCNNdXNpY2FsIGNvcm5ldHMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDYuMDAjQmFncGlwZXMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDcuMDAjSGFybW9uaWNhcyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wOC4wMCNLYXpvb3MjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDAuMDAjU3RyaW5nIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjAxLjAwI0hhcnBzaWNob3JkcyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wMi4wMCNDbGF2aWNob3JkcyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wMy4wMCNHdWl0YXJzIzYwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjA0LjAwI1Zpb2xpbnMjNjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDUuMDAjSGFycHMjNjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDYuMDAjQmFuam9lcyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNC4wMC4wMCNQZXJjdXNzaW9uIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjAxLjAwI0N5bWJhbHMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDIuMDAjQmVsbHMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDMuMDAjVGFtYm91cmluZXMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDQuMDAjQ2FzdGFuZXRzIzYwLjEzLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjA1LjAwI0RydW1zIzYwLjEzLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjA2LjAwI1h5bG9waG9uZXMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDAuMDAjTXVzaWNhbCBpbnN0cnVtZW50IHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wMS4wMCNNZXRyb25vbWVzIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjAyLjAwI1JlZWRzIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjAzLjAwI0luc3RydW1lbnQgc3RyaW5ncyBvciBwaWNrcyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wNC4wMCNUdW5pbmcgcGlucyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wNS4wMCNNdXNpY2FsIGluc3RydW1lbnQgc3RhbmRzIG9yIHNoZWV0IGhvbGRlcnMjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDYuMDAjQWNjZXNzb3JpZXMgZm9yIHN0cmluZ2VkIGluc3RydW1lbnRzIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjA3LjAwI1BlcmN1c3Npb24gaW5zdHJ1bWVudCBhY2Nlc3NvcnkjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDguMDAjTXVzaWMgYm94ZXMgb3IgbWVjaGFuaXNtcyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNi4wMC4wMCNNdXNpY2FsIGluc3RydW1lbnQgc2V0cyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNi4wMS4wMCNSaHl0aG0gYmFuZCBzZXRzIzYwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE3LjAwLjAwI0FsdGVybmF0aXZlIHNvdW5kcyBtdXNpY2FsIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjE3LjAxLjAwI0Jvb213aGFja2VycyM2MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNy4wMi4wMCNEaXNjbyB0YXBzIzYwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE4LjAwLjAwI011c2ljIGFuZCBkYW5jZSBhY2Nlc3NvcmllcyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xOC4wMS4wMCNEYW5jaW5nIHNjYXJ2ZXMjNjAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTguMDIuMDAjUmh5dGhtIHN0aWNrcyBvciBsdW1taSBzdGlja3MjNjAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTguMDMuMDAjUmh5dGhtIHdhbmRzIG9yIGhvb3BzIzYwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzYwLjE0LjAwLjAwLjAwI1RveXMgYW5kIGdhbWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjAwLjAwI1RveXMjNjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDEuMDAjVG95IGJhbGxvb25zIG9yIGJhbGxzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjAyLjAwI0RvbGxzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjAzLjAwI0RvbGwgaG91c2VzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA0LjAwI1N0dWZmZWQgYW5pbWFscyBvciBwdXBwZXRzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA1LjAwI1BsYXlob3VzZXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDYuMDAjQnVpbGRpbmcgYmxvY2tzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA3LjAwI1JpZGluZyB0b3lzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA4LjAwI1B1bGwgdG95cyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wOS4wMCNDaGlsZHJlbnMgc2NpZW5jZSBraXRzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjEwLjAwI1RveSB2ZWhpY2xlcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xMS4wMCNUb3kgdHJhaW5zIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjEyLjAwI0luZmxhdGFibGUgdG95cyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xMy4wMCNEb2xsIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjE0LjAwI1lvIHlvcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xNS4wMCNLaXRlcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xNi4wMCNQb2dzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjE3LjAwI0thbGVpZG9zY29wZXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTguMDAjUG9tIHBvbXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTkuMDAjUGluYXRhcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4yMC4wMCNCb29tZXJhbmdzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjIxLjAwI0ZseWluZyBkaXNjcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4yMi4wMCNUb3kgcGFpbHMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDAuMDAjR2FtZXMjNjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDEuMDAjRWR1Y2F0aW9uYWwgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDIuMDAjQm9hcmQgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDMuMDAjUGxheWluZyBjYXJkcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wNC4wMCNWaWRlbyBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wNS4wMCNQdXp6bGVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjA2LjAwI0RpY2UjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDcuMDAjQmluZ28jNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDguMDAjQ2xhc3NpYyBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wOS4wMCNDb2xsYWJvcmF0aXZlIGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjEwLjAwI1N0cmF0ZWd5IGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjExLjAwI0dhbWUgYWNjZXNzb3JpZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMTIuMDAjR2FtZSBib29rcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4xMy4wMCNMb3R0byBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4xNC4wMCNNZW1vcnkgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTIuMDAuMDAjQWN0aXZlIFBsYXkgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM2MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wMS4wMCNCYWxhbmNlIG9yIGdyb3NzIG1vdG9yIGVxdWlwbWVudCM2MC4xNC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wMi4wMCNCYWxsIHBvb2xzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjEyLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEyLjAzLjAwI1BsYXkgaG91c2VzIG9yIGh1dHMjNjAuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTIuMDQuMDAjVHJpa2VzIG9yIHdhZ29ucyM2MC4xNC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wNS4wMCNTb2Z0IHBsYXkgY2VudGVycyM2MC4xNC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wMC4wMCNDaGlsZHJlbnMgYmxvY2tzIGFuZCBidWlsZGluZyBzeXN0ZW1zIzYwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjAyLjAwI0NvbnN0cnVjdGlvbiBzZXRzIzYwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjAzLjAwI1BsYXltYXRzIzYwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjA0LjAwI1JhaWxwbGF5IHN5c3RlbXMgb3IgYWNjZXNzb3JpZXMjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDUuMDAjVW5pdCBibG9ja3MjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDYuMDAjUGxheSB2ZWhpY2xlcyM2MC4xNC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wNy4wMCNQbGF5IGFuaW1hbHMjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDAuMDAjRHJhbWF0aWMgcGxheSBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzYwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjAxLjAwI0Nvc3R1bWVzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjAyLjAwI0RyZXNzIHVwIENlbnRlcnMjNjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDMuMDAjSG91c2VrZWVwaW5nIHVuaXRzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjA0LjAwI1BsYXkgZm9vZCBkaXNoZXMgb3IgYWNjZXNzb3JpZXMjNjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDUuMDAjUHJldGVuZCBwbGF5IGtpdHMgb3Igc3VwcGxpZXMjNjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjNzAuMDAuMDAuMDAuMDAjRmFybWluZyBhbmQgRmlzaGluZyBhbmQgRm9yZXN0cnkgYW5kIFdpbGRsaWZlIENvbnRyYWN0aW5nIFNlcnZpY2VzIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEwLjAwLjAwLjAwI0Zpc2hlcmllcyBhbmQgYXF1YWN1bHR1cmUjNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDAuMDAjRmlzaGVyaWVzIG9wZXJhdGlvbnMjNzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDEuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIG9wZXJhdGlvbnMjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDIuMDAjRmlzaGluZyBwb3J0IHNlcnZpY2VzIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjAzLjAwI0Zpc2hpbmcgb25zaG9yZSBmYWNpbGl0aWVzIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA0LjAwI0RlZXAgc2VhIGZpc2hpbmcgb3BlcmF0aW9ucyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wNS4wMCNTb25hciBmaXNoaW5nIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA2LjAwI1doYWxpbmcjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDcuMDAjVHJhd2xpbmcjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDguMDAjTGluZSBmaXNoaW5nIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA5LjAwI1NlaW5lIG9wZXJhdGlvbnMjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMTAuMDAjRmlzaGluZyBuZXRzIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjAwLjAwI0Zpc2hlcmllcyBvdmVyc2lnaHQjNzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDEuMDAjRmlzaGVyeSBpbmZvcm1hdGlvbiBvciBkb2N1bWVudGF0aW9uIHNlcnZpY2VzIzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjAyLjAwI0Zpc2hlcnkgcmVzZWFyY2ggb3IgZXhwZXJpbWVudGF0aW9uIHNlcnZpY2VzIzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjAzLjAwI0Zpc2hlcnkgZGF0YSBjb2xsZWN0aW9uIG9yIGRpc3RyaWJ1dGlvbiM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wNC4wMCNGaXNoZXJ5IGNvbW1lcmNpYWwgbWFuYWdlbWVudCM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wNS4wMCNGaXNoaW5nIGZsZWV0IG1hbmFnZW1lbnQjNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDYuMDAjRmlzaGluZyBjb29wZXJhdGl2ZXMjNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDcuMDAjRmlzaGVyeSByZXNvdXJjZXMgcHJvdGVjdGlvbiBvciBjb25zZXJ2YXRpb24jNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTcuMDAuMDAjRmlzaGVyeSBpbmR1c3RyeSBhbmQgdGVjaG5vbG9neSM3MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNy4wMS4wMCNGaXNoaW5nIHRlY2hub2xvZ3kgc2VydmljZXMjNzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTcuMDIuMDAjRmlzaGVyeSBieSBwcm9kdWN0cyBwcm9kdWN0aW9uIHNlcnZpY2VzIzcwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE3LjAzLjAwI0Zpc2ggcHJvZHVjdGlvbiM3MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNy4wNC4wMCNGaXNoIHN0b3JhZ2UjNzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDAuMDAjRmlzaGVyaWVzIHJlc291cmNlcyM3MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wMS4wMCNJbmxhbmQgd2F0ZXIgZmlzaGVyeSByZXNvdXJjZXMjNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDIuMDAjRmlzaCBwb25kIHJlc291cmNlcyM3MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wMy4wMCNGaXNoIGhhdGNoZXJpZXMjNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDQuMDAjRmlzaCByYW5jaGVzIzcwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE4LjA1LjAwI0Zpc2hlcnkgYnkgcHJvZHVjdCByZXNvdXJjZXMjNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDYuMDAjRmlzaGVyaWVzIHJlc291cmNlIGV2YWx1YXRpb24jNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDAuMDAjQXF1YWN1bHR1cmUjNzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDEuMDAjTWFyaWN1bHR1cmUjNzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDIuMDAjT3N0cmVpY3VsdHVyZSM3MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wMy4wMCNTaGVsbGZpc2ggY3VsdHVyZSM3MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wNC4wMCNTaHJpbXAgZmFybWluZyM3MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wNS4wMCNGaXNoIGZhcm1pbmcjNzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMDAuMDAuMDAjSG9ydGljdWx0dXJlIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjAwLjAwI1BsYW50cyBhbmQgb3JuYW1lbnRhbCB0cmVlcyM3MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wMS4wMCNQbGFudGluZyBzZXJ2aWNlcyBvciBvcm5hbWVudGFsIHBsYW50IG9yIGJ1c2ggb3IgdHJlZSM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wMi4wMCNQcnVuaW5nIHNlcnZpY2VzIG9yIG9ybmFtZW50YWwgcGxhbnQgb3IgYnVzaCM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wMy4wMCNUcmVlIHRyaW1taW5nIHNlcnZpY2VzIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjA0LjAwI0JyYWNpbmcgc2VydmljZXMjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDUuMDAjVHJlZSBzdXJnZXJ5IHNlcnZpY2VzIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjA2LjAwI0FyYm9yaXN0IHNlcnZpY2VzIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjA3LjAwI1JlbW92YWwgc2VydmljZXMgb3Igb3JuYW1lbnRhbCBwbGFudCBvciBidXNoIG9yIHRyZWUjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDguMDAjUGxhbnRzIG9yIG9ybmFtZW50YWwgdHJlZSBzcHJheWluZyBzZXJ2aWNlcyM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNi4wMC4wMCNGbG93ZXJpbmcgcGxhbnRzIzcwLjExLjAwLjAwLjAwCi11bnNwc2M3IzcwLjExLjE2LjAxLjAwI1BsYW50aW5nIHNlcnZpY2VzIzcwLjExLjE2LjAwLjAwCi11bnNwc2M3IzcwLjExLjE2LjAyLjAwI051cnNlcnkgc2VydmljZXMjNzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTYuMDMuMDAjRmxvcmljdWx0dXJlIHNlcnZpY2VzIzcwLjExLjE2LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjAwLjAwI1BhcmtzIGFuZCBnYXJkZW5zIGFuZCBvcmNoYXJkcyM3MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wMS4wMCNPcmNoYXJkIG1hbmFnZW1lbnQgb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDIuMDAjVmluZXlhcmQgbWFuYWdlbWVudCBvciBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wMy4wMCNHYXJkZW4gcGxhbnRpbmcgb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDQuMDAjSG9ydGljdWx0dXJhbCBjb3Vuc2VsaW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA1LjAwI0NlbWV0ZXJ5IHVwa2VlcCBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wNi4wMCNMYXduIGNhcmUgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDcuMDAjSGlnaHdheSBsYXduIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA4LjAwI011bGNoaW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA5LjAwI1NlZWRpbmcgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMTAuMDAjTW93aW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjExLjAwI1NwcmlnZ2luZyBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4xMi4wMCNQYXJrcyBvciBnYXJkZW5zIHNwcmF5aW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjEzLjAwI1BhcmtzIG1hbmFnZW1lbnQgb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMDAuMDAuMDAjTGl2ZXN0b2NrIHNlcnZpY2VzIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjAwLjAwI0RhaXJ5aW5nIzcwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjAxLjAwI0RhaXJ5IGhlcmQgbWFuYWdlbWVudCM3MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wMi4wMCNEYWlyeSBpbmR1c3RyeSBkZXZlbG9wbWVudCM3MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wMy4wMCNEYWlyeSB0ZWNobm9sb2d5IzcwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjA0LjAwI0RhaXJ5IGxhYm9yYXRvcmllcyBzZXJ2aWNlcyM3MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wNS4wMCNEYWlyeSBmYXJtIGluIGhvdXNlIHByb2Nlc3NpbmcjNzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDAuMDAjTGl2ZXN0b2NrIGluZHVzdHJ5IzcwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjAxLjAwI0xpdmVzdG9jayBicmVlZGluZyM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wMi4wMCNMaXZlc3RvY2sgZ2VuZXRpY3Mgc2VydmljZXMjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDMuMDAjU2VyaWN1bHR1cmUjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDQuMDAjQW5pbWFsIGh1c2JhbmRyeSM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wNS4wMCNGYXJtIHJlYXJpbmcgc3lzdGVtcyM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wNi4wMCNQb3VsdHJ5IHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDcuMDAjU21hbGwgYW5pbWFsIGJyZWVkaW5nIHNlcnZpY2VzIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjA4LjAwI0JvdmluZSBwcm9kdWN0aW9uIHNlcnZpY2VzIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjEwLjAwI0FwaWN1bHR1cmUjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTcuMDAuMDAjTGl2ZXN0b2NrIG1hbmFnZW1lbnQjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTcuMDEuMDAjTGl2ZXN0b2NrIHNlbGVjdGlvbiM3MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wMi4wMCNMaXZlc3RvY2sgc2hvd2luZyBzZXJ2aWNlcyM3MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wMy4wMCNMaXZlc3RvY2sgc2xhdWdodGVyaW5nIHNlcnZpY2VzIzcwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE3LjA0LjAwI0hlcmQgbWFuYWdlbWVudCM3MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wNS4wMCNMaXZlc3RvY2sgYnJlZWRpbmcgb3IgZ3Jvb21pbmcgc2VydmljZXMjNzAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTguMDAuMDAjUGV0cyBpbmR1c3RyeSM3MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOC4wMS4wMCNQZXQgYnJlZWRpbmcgc2VydmljZXMjNzAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTguMDIuMDAjUGV0IGdyb29taW5nIHNlcnZpY2VzIzcwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE4LjAzLjAwI0tlbm5lbHMgc2VydmljZXMjNzAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTkuMDAuMDAjUGFzdHVyZSBhbmQgcmFuZ2Ugc2VydmljZXMjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTkuMDEuMDAjUGFzdHVyZSBpbXByb3ZlbWVudCM3MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOS4wMi4wMCNSYW5nZSBtYW5hZ2VtZW50IzcwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE5LjAzLjAwI1JhbmdlIHJlc2VhcmNoIzcwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjAwLjAwI0FuaW1hbCBoZWFsdGgjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDEuMDAjQW5pbWFsIG51dHJpdGlvbiM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wMi4wMCNBbmltYWwgZGlzZWFzZSBjb250cm9sIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjAzLjAwI0FuaW1hbCB0cnlwYW5vc29taWFzaXMjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDQuMDAjRm9vdCBvciBtb3V0aCBjb250cm9sIHNlcnZpY2VzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA1LjAwI0FuaW1hbCBoZWFsdGggcHJldmVudGl2ZSBtZWRpY2F0aW9uIHNlcnZpY2VzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA2LjAwI0FuaW1hbCB2YWNjaW5hdGlvbiBzZXJ2aWNlcyM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wNy4wMCNWZXRlcmluYXJ5IGFkbWluaXN0cmF0aW9uIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA4LjAwI1ZldGVyaW5hcnkgbGFib3JhdG9yeSB0ZWNobm9sb2d5IzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA5LjAwI0FuaW1hbCBob3NwaXRhbCBzZXJ2aWNlcyM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4xMC4wMCNBbmltYWwgaGVhbHRoIGluZm9ybWF0aW9uIHNlcnZpY2VzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEzLjAwLjAwLjAwI0xhbmQgYW5kIHNvaWwgcHJlcGFyYXRpb24gYW5kIG1hbmFnZW1lbnQgYW5kIHByb3RlY3Rpb24jNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDAuMDAjTGFuZCBhbmQgc29pbCBwcm90ZWN0aW9uIzcwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjAxLjAwI0Rlc2VydGlmaWNhdGlvbiBhc3Nlc3NtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDIuMDAjU29pbCBjb25zZXJ2YXRpb24gb3IgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNS4wMy4wMCNFcm9zaW9uIGNvbnRyb2wgc2VydmljZXMjNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDQuMDAjU2FuZCBkdW5lIGZpeGF0aW9uIzcwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjA1LjAwI1NvaWwgY29uZGl0aW9uaW5nIzcwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjA2LjAwI1NvaWwgaW1wcm92ZW1lbnQjNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDAuMDAjTGFuZCBhbmQgc29pbCBwcmVwYXJhdGlvbiM3MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNi4wMS4wMCNGZXJ0aWxpemVyIGFwcGxpY2F0aW9uIHNlcnZpY2VzIzcwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE2LjAyLjAwI0xpbWUgc3ByZWFkaW5nIHNlcnZpY2VzIzcwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE2LjAzLjAwI1Bsb3dpbmcgc2VydmljZXMjNzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDQuMDAjU2VlZCBiZWQgcHJlcGFyYXRpb24gc2VydmljZXMjNzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDUuMDAjU29pbCBjaGVtaWNhbCB0cmVhdG1lbnQgc2VydmljZXMjNzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDAuMDAjTGFuZCBhbmQgc29pbCBtYW5hZ2VtZW50IzcwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjAxLjAwI0xhbmQgdXNlIHBsYW5uaW5nIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjAyLjAwI0xhbmQgZXZhbHVhdGlvbiM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wMy4wMCNMYW5kIHJlY2xhbWF0aW9uIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjA0LjAwI0Fncm8gZWNvbG9naWNhbCB6b25lcyBhc3Nlc3NtZW50IG9yIHBsYW5uaW5nIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjA1LjAwI1NvaWwgY2xhc3NpZmljYXRpb24jNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDYuMDAjV2F0ZXJzaGVkIG1hbmFnZW1lbnQjNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDcuMDAjU29pbCBmZXJ0aWxpdHkgYW5hbHlzaXMjNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDguMDAjUGVkb2xvZ3kjNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMDAuMDAuMDAjQ3JvcCBwcm9kdWN0aW9uIGFuZCBtYW5hZ2VtZW50IGFuZCBwcm90ZWN0aW9uIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjAwLjAwI0Nyb3AgcHJvZHVjdGlvbiM3MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wMS4wMCNTZWVkIHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDIuMDAjSHlkcm9wb25pY3MjNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDMuMDAjR3Jhc3Mgb3IgZm9kZGVyIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDQuMDAjQXJvbWF0aWMgcGxhbnRzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDUuMDAjQmV2ZXJhZ2UgY3JvcHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wNi4wMCNDb2NvYSBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjA3LjAwI1N1Z2FyYmVldCBvciBzdWdhcmNhbmUgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wOC4wMCNOdXQgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wOS4wMCNFc3NlbnRpYWwgb2lsIGNyb3BzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTAuMDAjRmliZXIgY3JvcHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xMS4wMCNGcnVpdCBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjEyLjAwI0dyYWluIG9yIGxlZ3VtZSBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjEzLjAwI0luc2VjdGljaWRhbCBwbGFudHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xNC4wMCNNZWRpY2luYWwgcGxhbnRzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTUuMDAjUm9vdHMgb3IgdHViZXJzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTYuMDAjQ2VyZWFscyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjE3LjAwI1J1YmJlciBwbGFudCBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjE4LjAwI1NwaWNlIGNyb3BzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTkuMDAjVG9iYWNjbyBjcm9wIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMjAuMDAjVmVnZXRhYmxlIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDAuMDAjQ3JvcCBwcm90ZWN0aW9uIzcwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjAxLjAwI0Nyb3Agc3ByYXlpbmcgc2VydmljZXMjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDIuMDAjQmlvbG9naWNhbCBjb250cm9sIHNlcnZpY2VzIzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjAzLjAwI1dlZWQgY29udHJvbCBzZXJ2aWNlcyM3MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wNC4wMCNIZXJiaWNpZGUgc2VydmljZXMjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDUuMDAjSW50ZWdyYXRlZCBwZXN0IG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDYuMDAjUGxhbnQgcGF0aG9sb2d5IzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjA3LjAwI0xvY3VzdCBjb250cm9sIzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjAwLjAwI0Nyb3AgbWFuYWdlbWVudCM3MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wMS4wMCNHcmVlbmhvdXNlIHNlcnZpY2VzIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjAyLjAwI0ZlcnRpbGl6ZXIgc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDMuMDAjQ3JvcCBhZG1pbmlzdHJhdGlvbiM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wNC4wMCNDcm9wIHN1YnN0aXR1dGlvbiM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wNS4wMCNFeHRlbnNpb24gc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDYuMDAjQ3JvcCBzcGVjaWFsaXphdGlvbiM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wNy4wMCNDdWx0aXZhdGlvbiBmYXJtaW5nIHN5c3RlbSBtYW5hZ2VtZW50IzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjA4LjAwI0Nyb3Agcm90YXRpb24gb3IgZGl2ZXJzaWZpY2F0aW9uIGNvdW5zZWxpbmcgc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDkuMDAjUGxhbnQgdGF4b25vbXkgc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMTAuMDAjRmllbGQgY3JvcCBlbnRvbW9sb2d5IzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjAwLjAwI0Nyb3AgcGxhbnRpbmcgYW5kIGN1bHRpdmF0aW9uIzcwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjAxLjAwI09yY2hhcmQgdHJlZSBvciB2aW5lIHBsYW50aW5nIHNlcnZpY2VzIzcwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjAyLjAwI1Nwcm91dCBvciB0d2lnIHNlcnZpY2VzIzcwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjAzLjAwI0Nyb3AgY3VsdGl2YXRpbmcgc2VydmljZXMjNzAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTguMDQuMDAjQ3JvcCBwbGFudGluZyBzZXJ2aWNlcyM3MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOS4wMC4wMCNDcm9wIGhhcnZlc3RpbmcjNzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTkuMDEuMDAjQ2FzaCBncmFpbnMgaGFydmVzdGluZyBzZXJ2aWNlcyM3MC4xNC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOS4wMi4wMCNGcnVpdCBvciB0cmVlIG51dHMgaGFydmVzdGluZyBzZXJ2aWNlcyM3MC4xNC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOS4wMy4wMCNGaWVsZCBjcm9wIGhhcnZlc3Rpbmcgc2VydmljZXMjNzAuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTkuMDQuMDAjU2VlZCBoYXJ2ZXN0aW5nIHNlcnZpY2VzIzcwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjAwLjAwI1Bvc3QgaGFydmVzdGluZyBjcm9wIHByb2Nlc3NpbmcjNzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDEuMDAjU2lsb3MgcmVsYXRlZCBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wMi4wMCNHcmFpbiBkcnllcnMgc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDMuMDAjQ3JvcCBwcm9jZXNzaW5nIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjA0LjAwI0ZpZWxkIGNyb3BzIG1hcmtldCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wNS4wMCNDYXNoIGdyYWluIGNyb3BzIG1hcmtldCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wNi4wMCNWZWdldGFibGUgY3JvcHMgbWFya2V0IHByZXBhcmF0aW9uIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjA3LjAwI0ZydWl0IGNyb3BzIG1hcmtldCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wOC4wMCNUcmVlIG51dCBjcm9wcyBtYXJrZXQgcHJlcGFyYXRpb24gc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDkuMDAjR2lubmluZyBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4xMC4wMCNDcm9wIGNsZWFuaW5nIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjExLjAwI0Nvb2xpbmcgb3IgcmVmcmlnZXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4xMi4wMCNTcHJheWluZyBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4wMC4wMC4wMCNGb3Jlc3RyeSM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wMC4wMCNGb3Jlc3RyeSBtYW5hZ2VtZW50IzcwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjAxLjAwI0ZvcmVzdCByZXNvdXJjZXMgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wMi4wMCNGb3Jlc3QgcGVzdCBjb250cm9sIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjAzLjAwI0ZvcmVzdCBvcmdhbml6YXRpb25zIG9yIGFzc29jaWF0aW9ucyBvciBjb29wZXJhdGl2ZXMjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDQuMDAjRm9yZXN0IGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjA1LjAwI0ZvcmVzdCBpbnZlbnRvcnkjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDYuMDAjRm9yZXN0IG1vbml0b3Jpbmcgb3IgZXZhbHVhdGlvbiM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wNy4wMCNBZmZvcmVzdGF0aW9uIHNlcnZpY2VzIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjA4LjAwI0ZvcmVzdHJ5IGV4dGVuc2lvbiBzZXJ2aWNlcyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wOS4wMCNGb3Jlc3QgbnVyc2VyeSBtYW5hZ2VtZW50IzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjEwLjAwI0ZvcmVzdCBzZWN0b3JhbCBwbGFubmluZyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wMC4wMCNGb3Jlc3RyeSBpbmR1c3RyeSM3MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wMS4wMCNOb253b29kIHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDIuMDAjRXNzZW50aWFsIG9pbHMgcHJvZHVjdGlvbiM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wMy4wMCNUaW1iZXIgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wNC4wMCNEeWVzIHByb2R1Y3Rpb24jNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDUuMDAjRWRpYmxlIGZvcmVzdHJ5IHByb2R1Y3Rpb24jNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDYuMDAjV29vZCB0ZXN0aW5nIHNlcnZpY2VzIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjA3LjAwI1RpbWJlciBwcm9kdWN0aW9uIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjAwLjAwI0ZvcmVzdHJ5IGhhcnZlc3RpbmcjNzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDEuMDAjTG9nZ2luZyBvciBmZWxsaW5nIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjAyLjAwI0ZvcmVzdCBoYXJ2ZXN0aW5nIG1vdW50YWlub3VzIGFyZWFzIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjAzLjAwI0ZvcmVzdCBoYXJ2ZXN0aW5nIHNwZWNpYWxpemVkIG9wZXJhdGlvbnMjNzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDQuMDAjUGxhbnRhdGlvbiBoYXJ2ZXN0aW5nIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjA1LjAwI1N3YW1wIG9yIG1hbmdyb3ZlIGZvcmVzdCBoYXJ2ZXN0aW5nIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjA2LjAwI1RlbXBlcmF0ZSBmb3Jlc3QgaGFydmVzdGluZyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wNy4wMCNUcm9waWNhbCBoaWdoIGZvcmVzdHMgaGFydmVzdGluZyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wMC4wMCNGb3Jlc3RyeSBjb25zZXJ2YXRpb24gc2VydmljZXMjNzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDEuMDAjQ29uc2VydmF0aW9uIG9mIGZvcmVzdCBnZW5ldGljIHJlc291cmNlcyM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wMi4wMCNGb3Jlc3QgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wMy4wMCNGb3Jlc3QgYXJpZCBsYW5kIHJlaGFiaWxpdGF0aW9uIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjA0LjAwI0ZvcmVzdCB3aW5kIGJyZWFrcyBvciBzaGVsdGVyIGJlbHRzIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjA1LjAwI0ZvcmVzdCByZXNlcnZlcyBvciBwYXJrcyBjb25zZXJ2YXRpb24gc2VydmljZXMjNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDYuMDAjRm9yZXN0cnkgd2F0ZXJzaGVkIG1hbmFnZW1lbnQjNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDcuMDAjRm9yZXN0cnkgdG9ycmVudCBjb250cm9sIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjAwLjAwI0ZvcmVzdHJ5IHJlc291cmNlcyM3MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wMS4wMCNGb3Jlc3QgcmVzb3VyY2VzIGRldmVsb3BtZW50IzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjAyLjAwI0Fncm9mb3Jlc3RyeSByZXNvdXJjZXMjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDMuMDAjRnVlbCB3b29kIHJlc291cmNlcyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wNC4wMCNTaWx2aWN1bHR1cmUjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDUuMDAjQXJpZCByYWluZmVkIHBsYW50YXRpb24gcmVzb3VyY2VzIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjA2LjAwI0Jyb2FkIGxlYWZlZCBwbGFudGF0aW9uIHJlc291cmNlcyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wNy4wMCNDb25pZmVycyBwbGFudGF0aW9ucyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wOS4wMCNUcm9waWNhbCByYWluIGZvcmVzdCBwbGFudGF0aW9ucyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4xMC4wMCNNYW5ncm92ZSBzd2FtcHMgcmVzb3VyY2VzIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE2LjAwLjAwLjAwI1dpbGRsaWZlIGFuZCBmbG9yYSM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNS4wMC4wMCNGYXVuYSM3MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNS4wMS4wMCNGYXVuYSBwcm90ZWN0aW9uIzcwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE2LjE2LjAwLjAwI0Zsb3JhIzcwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE2LjE2LjAxLjAwI0Zsb3JhIHByb3RlY3Rpb24jNzAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTcuMDAuMDAjRWNvc3lzdGVtcyM3MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNy4wMS4wMCNFY29kZXZlbG9wbWVudCBzZXJ2aWNlcyM3MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNy4wMi4wMCNNYXJpbmUgZWNvc3lzdGVtIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTcuMDMuMDAjVGVycmVzdHJpYWwgZWNvc3lzdGVtIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTcuMDQuMDAjRWNvc3lzdGVtcyBwcm90ZWN0aW9uIHNlcnZpY2VzIzcwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjAwLjAwLjAwI1dhdGVyIHJlc291cmNlcyBkZXZlbG9wbWVudCBhbmQgb3ZlcnNpZ2h0IzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjAwLjAwI0RldmVsb3BtZW50IzcwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjAxLjAwI1dhdGVyIHF1YWxpdHkgYXNzZXNzbWVudCBzZXJ2aWNlcyM3MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNS4wMi4wMCNXYXRlciByZXNvdXJjZXMgcGxhbm5pbmcgc2VydmljZXMjNzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTUuMDMuMDAjR3JvdW5kIG9yIHN1cmZhY2Ugd2F0ZXIgc3VydmV5aW5nIzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjA0LjAwI1dhdGVyIHJlc291cmNlcyBtYXBwaW5nIHNlcnZpY2VzIzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjA1LjAwI1JpdmVyIGJhc2luIGRldmVsb3BtZW50IzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjA2LjAwI0dyb3VuZCBvciBzdXJmYWNlIHdhdGVyIG1vZGVsaW5nIHNlcnZpY2VzIzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjAwLjAwI092ZXJzaWdodCM3MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wMS4wMCNXYXRlciBxdWFsaXR5IG1hbmFnZW1lbnQjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDIuMDAjV2F0ZXIgdGVzdGluZyBzZXJ2aWNlcyM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wMy4wMCNGbG9vZHBsYWluIG1hbmFnZW1lbnQjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDQuMDAjV2F0ZXIgY29uc2VydmF0aW9uIGFkdmlzb3J5IHNlcnZpY2VzIzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjA1LjAwI1dhdGVyIHJpZ2h0cyBhZHZpc29yeSBzZXJ2aWNlcyM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wNi4wMCNXYXRlciByZXNvdXJjZSByZWNvdmVyeSBzZXJ2aWNlcyM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wNy4wMCNXYXRlciBwcmljaW5nIHNlcnZpY2VzIzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjAwLjAwI0lycmlnYXRpb24jNzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDEuMDAjQ2FuYWwgbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wMi4wMCNEYW0gbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wMy4wMCNSZXNlcnZvaXJzIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDQuMDAjUHVtcGluZyBzdGF0aW9uIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDUuMDAjUGlwZWxpbmVzIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDYuMDAjRGlrZSBvciBlbWJhbmttZW50IG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDcuMDAjV2F0ZXIgd2VsbCBtYWludGVuYW5jZSBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjA4LjAwI0lycmlnYXRpb24gYWR2aXNvcnkgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDkuMDAjSXJyaWdhdGlvbiBzeXN0ZW1zIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTguMDAuMDAjRHJhaW5hZ2Ugc2VydmljZXMjNzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTguMDEuMDAjTGFuZCBkcmFpbmFnZSBzZXJ2aWNlcyM3MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xOC4wMi4wMCNTdG9ybSB3YXRlciBkcmFpbmFnZSM3MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xOC4wMy4wMCNGbG9vZCBwcm90ZWN0aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjNzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNzEuMDAuMDAuMDAuMDAjTWluaW5nIGFuZCBPaWwgYW5kIEdhcyBTZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMC4wMC4wMC4wMCNNaW5pbmcgc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTUuMDAuMDAjTWluZSBleHBsb3JhdGlvbiM3MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNS4wMS4wMCNNaW5lIGRldmVsb3BtZW50IzcxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE1LjAyLjAwI1Rlc3QgYm9yaW5nIG9yIGNvcmUgZHJpbGxpbmcjNzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTYuMDAuMDAjTWluZSBkcmlsbGluZyBhbmQgYmxhc3Rpbmcgc2VydmljZXMjNzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTYuMDEuMDAjU2hhZnQgc2lua2luZyM3MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNi4wMi4wMCNNaW5lIGJsYXN0aW5nIHNlcnZpY2VzIzcxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjAwLjAwI0V4dHJhY3Rpb24jNzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDEuMDAjU2hhZnQgbWluaW5nIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjAyLjAwI09wZW4gcGl0IG1pbmluZyBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wMy4wMCNTdHJpcCBtaW5pbmcgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDQuMDAjSW4gc2l0dSBsZWFjaGluZyAoSVNMKSBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wNS4wMCNQdW1waW5nIG9yIGRyYWluaW5nIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjA2LjAwI092ZXJidXJkZW4gcmVtb3ZhbCM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wNy4wMCNJbXBvdW5kbWVudCBvciBzdG9yYWdlIG9mIHdhdGVyIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjA4LjAwI1NvaWwgZmx1c2hpbmcgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDkuMDAjTWluZSBmaWxsaW5nIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjExLjAwLjAwLjAwI09pbCBhbmQgZ2FzIGV4cGxvcmF0aW9uIHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE1LjAwLjAwI09pbCBhbmQgZ2FzIGV4cGxvcmF0aW9uIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE1LjAxLjAwI1NlaXNtb2dyYXBoaWMgc3VydmV5cyM3MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNS4wMi4wMCNPZmZzaG9yZSBleHBsb3JhdGlvbiM3MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNS4wMy4wMCNXZWxsIHN1cnZleWluZyM3MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wMC4wMCNXZWxsIGRyaWxsaW5nIGFuZCBtYWludGVuYW5jZSM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wMS4wMCNEaXJlY3Rpb25hbCBkcmlsbGluZyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wMi4wMCNPaWwgd2VsbCBkcmlsbGluZyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wMy4wMCNEcmlsbGluZyBvZiB3YXRlciBpbnRha2Ugd2VsbHMjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDQuMDAjUmVkcmlsbGluZyBvciByZXdvcmtpbmcgb2Ygd2VsbHMjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDUuMDAjQWNpZGl6aW5nIG9yIGNoZW1pY2FsIHRyZWF0aW5nIG9mIHdlbGxzIzcxLjExLjE2LjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjA2LjAwI1Rvb2wgZmlzaGluZyBzZXJ2aWNlcyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wNy4wMCNPaWwgd2VsbCBwbGF0Zm9ybSBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNy4wMC4wMCNFeHRyYWN0aW9uIHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE3LjAxLjAwI0Zsb3cgcmF0ZSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNy4wMi4wMCNPaWwgc2FtcGxpbmcgc2VydmljZXMjNzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTcuMDMuMDAjT2lsIGZpZWxkIGRyaWxsaW5nIG9yIG11ZCBzZXJ2aWNlcyM3MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNy4wNC4wMCNJbXBvdW5kIG9yIHN0b3JhZ2Ugb2Ygd2F0ZXIjNzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDAuMDAjV2VsbCByZXN0b3JhdGlvbiBhbmQgcmVjbGFtYXRpb24jNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDEuMDAjQ2xlYW5pbmcgb3Igc3dhYmJpbmcgb2Ygd2VsbHMjNzEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDIuMDAjU29pbCBmbHVzaGluZyBzZXJ2aWNlcyM3MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOC4wMy4wMCNNaW5lIGZpbGxpbmcgc2VydmljZXMjNzEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDQuMDAjV2VsbCBwbHVnZ2luZyBvciBhYmFuZG9ubWVudCBzZXJ2aWNlcyM3MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOC4wNS4wMCNDZW1lbnRpbmcgc2VydmljZXMgZm9yIHdlbGwgY2FzaW5ncyM3MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOS4wMC4wMCNXZWxsIGVtZXJnZW5jeSBzZXJ2aWNlcyM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOS4wMS4wMCNXZWxsIGZpcmUgZmlnaHRpbmcgc2VydmljZXMjNzEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTkuMDIuMDAjV2VsbCBjYXBwaW5nIHNlcnZpY2VzIzcxLjExLjE5LjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjAwLjAwI0Nhc2VkIGhvbGUgd2VsbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjAxLjAwI0Nhc2VkIGhvbGUgZm9ybWF0aW9uIHNhbXBsaW5nIHRlc3Rpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDIuMDAjQ2FzaW5nIHRoaWNrbmVzcyBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wMy4wMCNDaGVtaWNhbCBjdXR0ZXJzIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjA0LjAwI0VsZWN0cm9tYWduZXRpYyBwaXBlIHJlY292ZXJ5IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjA1LjAwI1dlbGwgZmxvdyBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wNi4wMCNXZWxsIGZsdWlkIGRlbnNpdHkgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDcuMDAjV2VsbCBmbHVpZCB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wOC4wMCNGcmVlIHBvaW50IHRvb2wgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDkuMDAjR2FtbWEgcmF5IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjEwLjAwI0pldCBjdXR0ZXIgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTEuMDAjTWVhc3VyZW1lbnQgd2hpbGUgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTIuMDAjTmV1dHJvbiBwb3Jvc2l0eSBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xMy4wMCNOdWNsZWFyIHNwZWN0cm9zY29weSBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xNC4wMCNXZWxsIHBhY2tlciBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xNS4wMCNQZXJtYW5lbnQgbWFnbmV0cyBwaXBlIHJlY292ZXJ5IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjE2LjAwI1dlbGwgcGx1Z2dpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTcuMDAjV2VsbCBwcmVzc3VyZSBtZWFzdXJlbWVudCBjb250cm9sIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjE4LjAwI1Byb2R1Y3Rpb24gbG9nZ2luZyBib3JlaG9sZSBmbHVpZCBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xOS4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgZGVuc2l0eSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yMC4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgZG93bmhvbGUgdmlkZW8gc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjEuMDAjUHJvZHVjdGlvbiBsb2dnaW5nIGZsb3cgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjIuMDAjUHJvZHVjdGlvbiBsb2dnaW5nIHByZXNzdXJlIG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjIzLjAwI090aGVyIHByb2R1Y3Rpb24gbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yNC4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjUuMDAjU2V2ZXJpbmcgY29sbGlkaW5nIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI2LjAwI1dlbGwgbG9nZ2luZyBzb25pYyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yNy4wMCNTdHVjayBwb2ludCB0b29sIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI4LjAwI1RoZXJtYWwgZGVjYXkgd2VsbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI5LjAwI1dlbGwgdHVidWxhciBjb3Jyb3Npb24gZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4zMC4wMCNXZWxsIHBlcmZvcm1hbmNlIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjMxLjAwI1dlbGwgdHVidWxhciBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wMC4wMCNPcGVuIGhvbGUgd2VsbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjAxLjAwI0RpZ2l0YWwgc29uaWMgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wMi4wMCNCb3JlaG9sZSBnZW9tZXRyeSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjAzLjAwI0RlbnNpdHkgbGl0aG9sb2d5IG51Y2xlYXIgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wNC4wMCNEaXBtZXRlciBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA1LjAwI0RpcG9sZSBzb25pYyBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA2LjAwI0RpcmVjdGlvbmFsIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDcuMDAjRGlyZWN0aW9uYWwgc3VydmV5IHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA4LjAwI0VsZWN0cm9tYWduZXRpYyBwcm9wYWdhdGlvbiBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA5LjAwI0Zvcm1hdGlvbiB0ZXN0aW5nIHNhbXBsaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjEwLjAwI0ZyYWN0dXJlIGlkZW50aWZpY2F0aW9uIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTEuMDAjR2FtbWEgcmF5IGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTIuMDAjR2FtbWEgcmF5IHNwZWN0cm9zY29weSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjEzLjAwI0dlb2NoZW1pY2FsIG51Y2xlYXIgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xNC4wMCNXZWxsIGltYWdpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTUuMDAjTWFnbmV0aWMgcmVzb25hbmNlIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTYuMDAjTWljcm9yZXNpc3Rpdml0eSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjE3LjAwI05ldXRyb24gcG9yb3NpdHkgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xOC4wMCNQZXRyb3BoeXNpY3Mgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTkuMDAjUmVzaXN0aXZpdHkgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4yMC4wMCNTbGltIGFjY2VzcyBzb25pYyBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjIxLjAwI1NvbmljIGNlbWVudCBib25kIHJhdGlvIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMjIuMDAjV2VsbCBzb25pYyBpbWFnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjAwLjAwI090aGVyIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDEuMDAjTG9nZ2luZyB3aXRoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDIuMDAjTG9nZ2luZyB3aGlsZSBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMi4wMy4wMCNMb2dnaW5nIGR1cmluZyBmaXNoaW5nIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjA0LjAwI0xvZ2dpbmcgd2hpbGUgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDUuMDAjRHJpbGwgcGlwZSBjb252ZXllZCB3ZWxsIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjA2LjAwI0dlbmVyYWwgd2VsbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjAwLjAwI1NlaXNtaWMgc2VydmljZXMjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDEuMDAjVHdvIGRpbWVuc2lvbmFsIGxhbmQgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wMi4wMCNUd28gZGltZW5zaW9uYWwgbWFyaW5lIHNlaXNtaWMgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDMuMDAjVHdvIGRpbWVuc2lvbmFsIHNlaXNtaWMgZGF0YSBwcm9jZXNzaW5nIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjA0LjAwI1RocmVlIGRpbWVuc2lvbmFsIGxhbmQgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wNS4wMCNUaHJlZSBkaW1lbnNpb25hbCBtYXJpbmUgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wNi4wMCNUaHJlZSBkaW1lbnNpb25hbCBzZWlzbWljIGRhdGEgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wNy4wMCNGb3VyIGRpbWVuc2lvbmFsIGxhbmQgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wOC4wMCNGb3VyIGRpbWVuc2lvbmFsIG1hcmluZSBzZWlzbWljIGFjcXVpc2l0aW9uIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjA5LjAwI0ZvdXIgZGltZW5zaW9uYWwgc2Vpc21pYyBkYXRhIHByb2Nlc3Npbmcgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTAuMDAjQ2hlY2tzaG90IHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTEuMDAjQ3Jvc3Mgd2VsbCBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjEyLjAwI0RldmlhdGVkIHdlbGwgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xMy4wMCNHZW9waHlzaWNzIHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTQuMDAjT2Zmc2V0IHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTUuMDAjUXVpY2tzaG90IHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTYuMDAjU2Vpc21pYyBkYXRhIGFjcXVpc2l0aW9uIHdoaWxlIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE3LjAwI1NsaW0gaG9sZSBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE4LjAwI1NlaXNtaWMgc3VydmV5IGV2YWx1YXRpb24gb3IgZGVzaWduIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE5LjAwI1ZlcnRpY2FsIHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMjAuMDAjV2Fsa2F3YXkgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4yMS4wMCNHZW9sb2dpY2FsIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjAwLjAwLjAwI1dlbGwgZHJpbGxpbmcgY29uc3RydWN0aW9uIGFuZCBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wMC4wMCNDZW1lbnQgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wMS4wMCNPaWxmaWVsZCBjYXNpbmcgaGFyZHdhcmUgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDIuMDAjT2lsZmllbGQgY2VtZW50IGxhYiB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjAzLjAwI0Rvd25ob2xlIG9pbGZpZWxkIHRvb2xzIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjA0LjAwI09pbGZpZWxkIGZpbHRlcmluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wNS4wMCNGb2FtIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wNi4wMCNHZW90aGVybWFsIHdlbGwgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjA3LjAwI0xpbmVyIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wOC4wMCNPaWx3ZWxsIGxvc3QgY2lyY3VsYXRpb24gc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDkuMDAjT2lsZmllbGQgbXVkIHJlbW92YWwgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTAuMDAjUGx1ZyBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTEuMDAjV2VsbCBzaXRlIHByZXNzdXJlIHB1bXBpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTIuMDAjT2lsZmllbGQgcHJlc3N1cmUgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xMy4wMCNTdXJmYWNlIGNhc2luZyBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTQuMDAjSW50ZXJtZWRpYXRlIGNhc2luZyBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTUuMDAjUHJvZHVjdGlvbiBzdHJpbmcgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjE2LjAwI1NxdWVlemUgd2VsbCBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTcuMDAjV2VsbCB3YXRlciBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjE4LjAwI1dlbGwgY2VtZW50IGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTkuMDAjV2VsbCBjZW1lbnQgZ3JvdXRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMjAuMDAjV2VsbCBjZW1lbnRpbmcgYWRkaXRpdmVzIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjIxLjAwI1dlbGwgY2VtZW50aW5nIGRlc2lnbiBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4yMi4wMCNXZWxsIGNsZWFuaW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjIzLjAwI1dlbGwgcmVwYWlyIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjAwLjAwI0NvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDEuMDAjQWNpZGl6aW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wMi4wMCNDYWJsZSBpbnN0YWxsYXRpb24gdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjAzLjAwI0NlbWVudGluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDQuMDAjQ2hlbWljYWwgY3V0dGluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDUuMDAjQ2xlYW4gb3V0IHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wNi4wMCNDb21wbGV0aW9uIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wNy4wMCNDb252ZXlpbmcgaW5mbGF0YWJsZXMgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjA4LjAwI0NvcmluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDkuMDAjRXh0ZW5kZWQgcmVhY2ggd2VsbCBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xMC4wMCNGaXNoaW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xMS4wMCNGcmFjdHVyaW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xMi4wMCNIaWdoIHByZXNzdXJlIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTMuMDAjSG9yaXpvbnRhbCBpc29sYXRpb24gb2lsZmllbGQgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTQuMDAjTG9nZ2luZyB3aXRoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTUuMDAjTWlsbGluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTYuMDAjTml0cm9nZW4gcmVsYXRlZCBhcHBsaWNhdGlvbnMgdGhyb3VnaCBjb2lsZWQgdHViaW5nIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjE3LjAwI1BlcmZvcmF0aW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xOC4wMCNQaXBlbGluZSBvciBmbG93bGluZSBsYXlpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTkuMDAjUGlwZWxpbmUgaW50ZXJ2ZW50aW9uIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjIwLjAwI1NhbmQgY29udHJvbCB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMjEuMDAjQWJyYXNpdmUgdHVidWxhciBjbGVhbmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4yMi4wMCNXZWxsIGtpbGwgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjIzLjAwI0Nhc2luZyBleGl0IHdpdGggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wMC4wMCNDb3Jpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDEuMDAjQ29udmVudGlvbmFsIGNvcmluZyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wMi4wMCNDb3JlIGlzb2xhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wMy4wMCNDb3JlIHByZXNlcnZhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wNC4wMCNIb3Jpem9udGFsIGNvcmluZyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wNS4wMCNPcmllbnRlZCBjb3Jpbmcgc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDYuMDAjUmlnIHNpdGUgY29yZSBhbmFseXNpcyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wNy4wMCNTcG9uZ2UgY29yaW5nIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjA4LjAwI1dpcmVsaW5lIHJldHJpZXZhYmxlIGNvcmluZyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wMC4wMCNEb3duaG9sZSB0b29sIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjAxLjAwI0Rvd25ob2xlIHZpYnJhdGlvbiBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjAyLjAwI0Rvd25ob2xlIGhvbGUgb3BlbmluZyBzZXJ2aWNlcyM3MS4xMi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wMy4wMCNSZWFtaW5nIHdoaWxlIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjA0LjAwI0Rvd25ob2xlIHRvcnF1ZSBvciBkcmFnIHJlZHVjdGlvbiBzZXJ2aWNlcyM3MS4xMi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wNS4wMCNEb3duaG9sZSB1bmRlcnJlYW1pbmcgc2VydmljZXMjNzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDAuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjAxLjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCBkZXNpZ24gc2VydmljZXMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDIuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IGh5ZHJhdWxpYyBvcHRpbWl6YXRpb24gc2VydmljZXMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDMuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IHBsYW5uaW5nIHNlcnZpY2VzIzcxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjA0LjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCByZWNvcmRpbmcgc2VydmljZXMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDUuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IHJlcGFpciBzZXJ2aWNlcyM3MS4xMi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wNi4wMCNPaWxmaWVsZCBkcmlsbGluZyBiaXQgZm9vdGFnZSBjb250cmFjdHMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDcuMDAjV2VsbCBzaXRlIGRyaWxsaW5nIG9wdGltaXphdGlvbiBhc3Npc3RhbmNlIHNlcnZpY2UjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDAuMDAjRHJpbGxpbmcgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDEuMDAjQWNvdXN0aWMgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wMi4wMCNBY291c3RpYyB0ZWxlbWV0cnkgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wMy4wMCNDYWxpcGVyIG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDQuMDAjRGVuc2l0eSBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjA1LjAwI09pbGZpZWxkIGRyaWxsaW5nIHBlcmZvcm1hbmNlIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjA2LjAwI0VsZWN0cm9tYWduZXRpYyB0ZWxlbWV0cnkgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wNy4wMCNGb3JtYXRpb24gZGlwIG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDguMDAjRm9ybWF0aW9uIHByZXNzdXJlIG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDkuMDAjR2VvbG9naWNhbGx5IHN0ZWVyZWQgd2VsbHMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTAuMDAjR2Vvc3RvcHBpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTEuMDAjTXVkIGxvZ2dpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTIuMDAjTnVjbGVhciBtYWduZXRpYyByZXNvbmFuY2Ugc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTMuMDAjUG9yb3NpdHkgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4xNC4wMCNSZXNpc3Rpdml0eSBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjE1LjAwI1dlbGwgc3VydmV5aW5nIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTYuMDAjU3VydmV5aW5nIHdpcmVsaW5lIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjAwLjAwI09pbCB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjAxLjAwI1dlbGwgY2FzaW5nIGNyZXcgc2VydmljZSM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wMi4wMCNXZWxsIGNhc2luZyBwbGFubmluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wMy4wMCNXZWxsIGNhc2luZyBtaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA0LjAwI0NvaWxlZCB0dWJpbmcgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDUuMDAjV2VsbCBjb21wbGV0aW9uIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA2LjAwI0NvbnZlbnRpb25hbCB3ZWxsIGRpcmVjdGlvbmFsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA3LjAwI1dlbGwgZGlyZWN0aW9uYWwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDguMDAjV2VsbCBkcmlsbGluZyBjb250cmFjdCBkZXZlbG9wbWVudCBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wOS4wMCNXZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjEwLjAwI1dlbGwgZHJpbGxpbmcgZW5naW5lZXJpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTEuMDAjV2VsbCBkcmlsbGluZyBtdWQgb3IgZmx1aWQgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTIuMDAjV2VsbCBkcmlsbGluZyBvZiB3YXRlciBpbnRha2Ugd2VsbCBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xMy4wMCNXZWxsIGRyaWxsaW5nIHJpZyBtb25pdG9yIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjE0LjAwI1dlbGwgZHJpbGxpbmcgc29saWRzIGNvbnRyb2wjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTUuMDAjV2VsbCBkcmlsbGluZyBzdGFiaWxpemluZyBvciBob2xlIG9wZW5pbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTYuMDAjV2VsbCBkcmlsbGluZyBzdXBlcnZpc2lvbiM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xNy4wMCNXZWxsIGRyaWxsaW5nIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTguMDAjV2VsbCBkcmlsbGluZyBvdGhlciBnZW5lcmFsIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjE5LjAwI0V4dGVuZGVkIHJlYWNoIGRpcmVjdGlvbmFsIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjAuMDAjTXVsdGlsYXRlcmFsIGRpcmVjdGlvbmFsIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjEuMDAjT2lsIGNvdW50cnkgdHVidWxhciBtb2RpZmljYXRpb24gb3IgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yMi4wMCNXZWxsIGRyaWxsaW5nIHBpY2t1cCBvciBsYXlkb3duIHNlcnZpY2UjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjMuMDAjV2VsbCBkcmlsbGluZyBwaXBlIHN0b3JhZ2UjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjQuMDAjV2VsbCBkcmlsbGluZyBwaXBlIHRocmVhZGluZyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yNS4wMCNSYXRob2xlIHdlbGwgZHJpbGxpbmcgc2VydmljZSM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yNi4wMCNTaG9ydCByYWRpdXMgZGlyZWN0aW9uYWwgd2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yNy4wMCNTdGVlcmFibGUgdW5kZXJyZWFtaW5nIHdoaWxlIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjguMDAjVWx0cmEgc2hvcnQgcmFkaXVzIGRpcmVjdGlvbmFsIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjkuMDAjVW5kZXJiYWxhbmNlZCB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjMwLjAwI1dlbGwgcGxhbm5pbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzEuMDAjV2VsbCByZWRyaWxsaW5nIG9yIHJld29ya2luZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zMi4wMCNXZWxsIGRyaWxsaW5nIGRldmlhdGlvbiBjb250cm9sIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjMzLjAwI09pbGZpZWxkIGdyYXZlbCBwYWNraW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjM0LjAwI09pbGZpZWxkIGh1bGwgc3lzdGVtcyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zNS4wMCNSaWcgd2VsbCBwdWxsaW5nIGNyZXcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzYuMDAjV2VsbGhlYWQgZXF1aXBtZW50IHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjM3LjAwI1NpZGV0cmFja2luZyB3aXRoIHdoaXBzdG9jayBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wMC4wMCNPaWxmaWVsZCBmaXNoaW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjAxLjAwI09pbGZpZWxkIGZpc2hpbmcgc2VydmljZSBkZXNpZ24gc2VydmljZXMjNzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDIuMDAjT2lsZmllbGQgZmlzaGluZyBzZXJ2aWNlIGVjb25vbWljIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDMuMDAjT2lsZmllbGQgZmlzaGluZyBzZXJ2aWNlIG9wZXJhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wNC4wMCNPaWxmaWVsZCBqdW5rIHJlY292ZXJ5IHNlcnZpY2VzIzcxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjA1LjAwI09pbGZpZWxkIHBpcGUgcmVjb3Zlcnkgc2VydmljZSM3MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wNi4wMCNPaWxmaWVsZCBmaXNoaW5nIG9yIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE4LjAwLjAwI0dhcyBsaWZ0IHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE4LjAxLjAwI0NvaWxlZCB0dWJpbmcgZ2FzIGxpZnQgc2VydmljZXMjNzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTguMDIuMDAjR2FzIGxpZnQgZml4aW5nIG9yIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTguMDMuMDAjR2FzIGxpZnQga2lja292ZXIgc2VydmljZXMjNzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTguMDQuMDAjR2FzIGxpZnQgc2FuZCBjb250YWlubWVudCBzZXJ2aWNlcyM3MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOS4wMC4wMCNEb3duIGhvbGUgZmx1aWQgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTkuMDEuMDAjRG93biBob2xlIGZsdWlkIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTkuMDIuMDAjRG93biBob2xlIGZsdWlkIGxhYm9yYXRvcnkgc2VydmljZXMjNzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTkuMDMuMDAjRG93biBob2xlIGZsdWlkIHNhbXBsaW5nIHNlcnZpY2VzIzcxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjAwLjAwI1dlbGwgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDEuMDAjQ29pbGVkIHR1YmluZyB3ZWxsIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjAyLjAwI1NsaWNrbGluZSB3ZWxsIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjAzLjAwI1Rocm91Z2ggdHViaW5nIHdlbGwgcGVyZm9yYXRpb24gc2VydmljZXMjNzEuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDQuMDAjVHViaW5nIGNvbnZleWVkIHdlbGwgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDUuMDAjV2lyZWxpbmUgd2VsbCBwZXJmb3JhdGluZyBzZXJ2aWNlcyM3MS4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMC4wNi4wMCNXZWxsIHR1YmluZyBwdW5jaGVyIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjAwLjAwI09pbGZpZWxkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wMS4wMCNBY2lkIHNhbmQgY29udHJvbCBwdW1waW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjAyLjAwI1NhbmQgY29udHJvbCBibGVuZGluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wMy4wMCNDbGVhbmluZyBmbHVpZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDQuMDAjQ29tcGxldGlvbiBmbHVpZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDUuMDAjV2VsbCBjb25zb2xpZGF0aW9uIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjA2LjAwI09pbGZpZWxkIGZpbHRlcmluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wNy4wMCNGcmFjdHVyaW5nIGZsdWlkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wOC4wMCNGcmFjdHVyaW5nIHByZSBmcmFjIGRlc2lnbiB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjA5LjAwI0dlbmVyYWwgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjEwLjAwI0dyYXZlbCBjYXJyaWVyIGZsdWlkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xMS4wMCNTYW5kIGNvbnRyb2wgbGFiIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMTIuMDAjTXVsdGl6b25lIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xMy4wMCNTYW5kIGNvbnRyb2wgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xNC4wMCNTYW5kIGNvbnRyb2wgdGVtcG9yYXJ5IGlzb2xhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xNS4wMCNXZWxsIHRvb2wgcmVkcmVzc2luZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xNi4wMCNOb24gZnJhY3R1cmluZyBzYW5kIGNvbnRyb2wgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMi4wMC4wMCNTbGlja2xpbmUgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjIuMDEuMDAjU2xpY2tsaW5lIGZpc2hpbmcgc2VydmljZXMjNzEuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjIuMDIuMDAjU2xpY2tsaW5lIGxpZnRpbmcgc2VydmljZXMjNzEuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjIuMDMuMDAjU2xpY2tsaW5lIG1hbmlwdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wMC4wMCNTdWJzZWEgd2VsbCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wMS4wMCNTdWJzZWEgd2VsbCBkaXZpbmcgc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDIuMDAjU3Vic2VhIHdlbGwgcmVtb3RlIG9wZXJhdGlvbiB2ZWhpY2xlIHJvdiBzZXJ2aWNlcyM3MS4xMi4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wMy4wMCNTdWJzZWEgd2VsbCBmaXh0dXJpbmcgb3IgdGVzdCBlcXVpcG1lbnQgc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDQuMDAjU3Vic2VhIHdlbGwgaW50ZXJ2ZW50aW9uIG9yIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDUuMDAjU3Vic2VhIHdlbGwgc2FmZXR5IHRlc3QgdHJlZSBzZXJ2aWNlcyM3MS4xMi4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wNi4wMCNTdWJzZWEgd2VsbCBlcXVpcG1lbnQgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDAuMDAjV2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjAxLjAwI0RyaWxsIHN0ZW0gZmxvdyBtZXRlcmluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wMi4wMCNEcmlsbCBzdGVtIHN1cmZhY2UgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wMy4wMCNEcmlsbCBzdGVtIHRlc3RpbmcgcGFja2VyIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjA0LjAwI0RyaWxsIHN0ZW0gdGVzdGluZyBwcmVzc3VyZSBjb250cm9sIHRlc3Qgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDUuMDAjRHJpbGwgc3RlbSB0ZXN0aW5nIHB1bHNlIG9wZXJhdGVkIHRlc3Qgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDYuMDAjRHJpbGwgc3RlbSB0ZXN0aW5nIGZvciB1bHRyYSBoaWdoIHByZXNzIGhpZ2ggdGVtcCBlbnZpcm9ubWVudCBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wNy4wMCNEcmlsbCBzdGVtIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDguMDAjUGVyaW9kaWMgd2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjA5LjAwI1N1cmZhY2Ugd2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjEwLjAwI1VuZGVyYmFsYW5jZWQgdGVzdGluZyB3aGlsZSBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wMC4wMCNXYXRlciBvciBnYXMgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wMS4wMCNXYXRlciBvciBnYXMgY29udHJvbCBkZXNpZ24gc2VydmljZXMjNzEuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjUuMDIuMDAjV2F0ZXIgb3IgZ2FzIGNvbnRyb2wgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wMy4wMCNXYXRlciBvciBnYXMgY29udHJvbCBpc29sYXRpb24gc2VydmljZXMjNzEuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjUuMDQuMDAjV2F0ZXIgb3IgZ2FzIGNvbnRyb2wgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wNS4wMCNXYXRlciBvciBnYXMgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wMC4wMCNXZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDEuMDAjV2VsbCBjYXNpbmcgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wMi4wMCNXZWxsIGNvbXBsZXRpb24gZmx1aWRzIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjAzLjAwI0dhcyBsaWZ0IHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wNC4wMCNIb3Jpem9udGFsIGNhc2VkIGhvbGUgc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDUuMDAjSG9yaXpvbnRhbCBvcGVuIGhvbGUgc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDYuMDAjSW50ZWxsaWdlbnQgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjA3LjAwI0xpbmVyIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wOC4wMCNNdWx0aWxhdGVyYWwgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjA5LjAwI1Blcm1hbmVudCB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMTAuMDAjU2FuZCBjb250cm9sIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4xMS4wMCNUZW1wb3JhcnkgZHJpbGwgc3RlbSB0ZXN0aW5nIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4xMi4wMCNUdWJpbmcgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjEzLjAwI1VuZGVyYmFsYW5jZWQgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjAwLjAwI1dlbGwgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDEuMDAjT2lsIHdlbGwgcGxhdGZvcm0gbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDIuMDAjT2lsZmllbGQgcHVtcGluZyB1bml0IG1haW50ZW5hbmNlIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjAzLjAwI09pbGZpZWxkIHJvZCBwdW1wIHJlcGFpciBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wNC4wMCNPaWxmaWVsZCBzbnViYmluZyBzZXJ2aWNlIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjA1LjAwI09pbGZpZWxkIHN1Y2tlciByb2QgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDYuMDAjV2VsbCBzd2FiYmluZyBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wNy4wMCNPaWxmaWVsZCB0dWJpbmcgYW5jaG9yIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjA4LjAwI09pbGZpZWxkIHB1bXAgbWVjaGFuaWMgc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDAuMDAjV2VsbCBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjAxLjAwI0Rvd25ob2xlIHJlY29yZGluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wMi4wMCNXZWxsIGZsb3cgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wMy4wMCNPaWwgb3IgZ2FzIHdlbGwgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wNC4wMCNXZWxsIHNpdGUgcGhhc2UgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wNS4wMCNXZWxsIHNpdGUgcHVtcCBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjA2LjAwI1dlbGwgc2l0ZSBzdXJmYWNlIGRhdGEgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDcuMDAjV2VsbCBzaXRlIHN1cmZhY2UgcmVhZG91dCBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wOC4wMCNXZWxsIHNpdGUgc3VyZmFjZSByZWNvcmRpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDkuMDAjU3VyZmFjZSB3ZWxsIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMTAuMDAjU3Vic3VyZmFjZSB3ZWxsIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjkuMDAuMDAjT2lsZmllbGQgcmlncyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOS4wMS4wMCNEZWVwd2F0ZXIgb2lsZmllbGQgcmlnIHNlcnZpY2VzIzcxLjEyLjI5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjAyLjAwI0phY2t1cCBvaWxmaWVsZCByaWcgc2VydmljZXMjNzEuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjkuMDMuMDAjQmFyZ2Ugb2lsZmllbGQgcmlnIHNlcnZpY2VzIzcxLjEyLjI5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjA0LjAwI0xhbmQgb2lsZmllbGQgcmlnIHNlcnZpY2VzIzcxLjEyLjI5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjA1LjAwI1BsYXRmb3JtIG9pbGZpZWxkIHJpZyBzZXJ2aWNlcyM3MS4xMi4yOS4wMC4wMAotdW5zcHNjNyM3MS4xMy4wMC4wMC4wMCNPaWwgYW5kIGdhcyBleHRyYWN0aW9uIGFuZCBwcm9kdWN0aW9uIGVuaGFuY2VtZW50IHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjAwLjAwI1dlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wMS4wMCNBY2lkIGJhc2VkIGZsdWlkIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wMi4wMCNFbXVsc2lvbiBiYXNlZCBmbHVpZCB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDMuMDAjRm9hbSBiYXNlZCBmbHVpZCB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDQuMDAjT2lsIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wNS4wMCNPaWwgd2VsbCBzY2FsZSBjb250cm9sIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjA2LjAwI1dlbGwgZnJhY3R1cmUgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wNy4wMCNXZWxsIGZyYWN0dXJpbmcgZG93bmhvbGUgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wOC4wMCNXZWxsIGZyYWN0dXJpbmcgaGVpZ2h0IGNvbnRyb2wgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDkuMDAjV2VsbCBmcmFjdHVyaW5nIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTAuMDAjV2VsbCBmcmFjdHVyaW5nIHNlcnZpY2UgZGVzaWduIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjExLjAwI1dlbGwgZnJhY3R1cmluZyBzZXJ2aWNlIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTIuMDAjV2VsbCBmcmFjdHVyaW5nIHN1cmZhY2UgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xMy4wMCNXZWxsIGZyYWN0dXJpbmcgdHJlYXRtZW50IHF1YWxpdHkgY29udHJvbCBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xNC4wMCNPaWwgYmFzZWQgZmx1aWQgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjE1LjAwI090aGVyIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xNi4wMCNXZWxsIGZyYWN0dXJpbmcgc3RyZXNzIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTcuMDAjV2F0ZXIgYmFzZWQgZmx1aWQgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjAwLjAwI01hdHJpeCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wMS4wMCNBY2lkIGJhc2VkIG1hdHJpeCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wMi4wMCNGb3JtYXRpb24gc2VhbGVyIG1hdHJpeCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wMy4wMCNNYXRyaXggb3JnYW5pYyBjbGVhbnVwIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjA0LjAwI01hdHJpeCBvcmdhbmljIGluaGliaXRpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDUuMDAjTWF0cml4IHNjYWxlIGNsZWFudXAgc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDYuMDAjTWF0cml4IHNjYWxlIGluaGliaXRpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDcuMDAjTWF0cml4IHRyZWF0bWVudCBkZXNpZ24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDguMDAjTWF0cml4IHRyZWF0bWVudCBkaXZlcnNpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDkuMDAjTWF0cml4IHRyZWF0bWVudCBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjEwLjAwI01hdHJpeCB0cmVhdG1lbnQgcXVhbGl0eSBjb250cm9sIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjExLjAwI05vbiBhY2lkIGJhc2VkIG1hdHJpeCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMi4wMC4wMCNPaWxmaWVsZCBuaXRyb2dlbiBzZXJ2aWNlcyM3MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMi4wMS4wMCNOaXRyb2dlbiB3ZWxsIHNlcnZpY2VzIzcxLjEzLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjAwLjAwI090aGVyIG9pbGZpZWxkIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDEuMDAjQm90dG9tIGludGFrZSBvaWxmaWVsZCBwdW1waW5nIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjAyLjAwI0NhYmxlIGRlcGxveWVkIG9pbGZpZWxkIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDMuMDAjQ28yIG9pbGZpZWxkIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDQuMDAjQ29pbGVkIHR1YmluZyBkZXBsb3llZCBvaWxmaWVsZCBwdW1waW5nIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjA1LjAwI0Rvd25ob2xlIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDYuMDAjRHVhbCBjb21wbGV0aW9uIHdlbGwgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDcuMDAjSG9yaXpvbnRhbCBwdW1waW5nIHdlbGwgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDguMDAjT2lsZmllbGQgcHVtcGluZyBpbnN0YWxsYXRpb24gcHVsbCBvciBvcGVyYXRpb24gc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDkuMDAjV2VsbCBwcm9maWxlIG1vZGlmaWNhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4xMC4wMCNPaWxmaWVsZCBzcG9vbGluZyBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xNC4wMC4wMCNXZWxsIHByb2R1Y3Rpb24gc2VydmljZXMjNzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTQuMDEuMDAjT2lsZmllbGQgZmxhcmUgc3lzdGVtIHNlcnZpY2VzIzcxLjEzLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEzLjE0LjAyLjAwI09pbGZpZWxkIGhvdCBvaWwgb3Igd2F0ZXIgc2VydmljZSM3MS4xMy4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xNC4wMy4wMCNPaWxmaWVsZCBzdGVhbWluZyBzZXJ2aWNlcyM3MS4xMy4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNC4wMC4wMC4wMCNPaWwgYW5kIGdhcyByZXN0b3JhdGlvbiBhbmQgcmVjbGFtYXRpb24gc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTAuMDAuMDAjRW1lcmdlbmN5IHdlbGwgY29udHJvbCBzZXJ2aWNlcyM3MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMC4wMS4wMCNXZWxsIHByZXNzdXJlIGNvbnRyb2wgc2VydmljZXMjNzEuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTAuMDIuMDAjV2VsbCBjYXBwaW5nIHNlcnZpY2VzIzcxLjE0LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEwLjAzLjAwI1dlbGwgZmlyZSBmaWdodGluZyBzZXJ2aWNlcyM3MS4xNC4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMC4wNC4wMCNXaWxkIHdlbGwgY29udHJvbCBzZXJ2aWNlcyM3MS4xNC4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMS4wMC4wMCNXZWxsIHBsdWdnaW5nIGFuZCBhYmFuZG9ubWVudCBzZXJ2aWNlcyM3MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMS4wMS4wMCNXZWxsIGFiYW5kb25tZW50IHNlcnZpY2VzIzcxLjE0LjExLjAwLjAwCi11bnNwc2M3IzcxLjE0LjExLjAyLjAwI1dlbGwgcGx1Z2dpbmcgc2VydmljZXMjNzEuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTIuMDAuMDAjV2VsbCBzaXRlIHJlc3RvcmF0aW9uIzcxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEyLjAxLjAwI1dlbGwgY2xlYW5pbmcgb3Igc3dhYmJpbmcgc2VydmljZXMjNzEuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTIuMDIuMDAjV2VsbCBzaXRlIHJlc3RvcmF0aW9uIHNlcnZpY2VzIzcxLjE0LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE1LjAwLjAwLjAwI09pbCBhbmQgZ2FzIGRhdGEgbWFuYWdlbWVudCBhbmQgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMC4wMC4wMCNPaWxmaWVsZCBkYXRhIGNvbW11bmljYXRpb24gc2VydmljZXMjNzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTAuMDEuMDAjTG9nIGRhdGEgdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzcxLjE1LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjAyLjAwI0xvZyBncmFwaGljcyB0cmFuc21pc3Npb24gc2VydmljZXMjNzEuMTUuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTAuMDMuMDAjUmVhbCB0aW1lIHdlbGwgZGF0YSBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjE1LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjA0LjAwI1NhdGVsbGl0ZSB3ZWxsIGRhdGEgdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzcxLjE1LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjA1LjAwI1dlbGwgZGF0YSB0cmFuc21pc3Npb24gc2VydmljZXMjNzEuMTUuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTEuMDAuMDAjT2lsZmllbGQgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjAxLjAwI09pbGZpZWxkIGFzc2V0IGRhdGEgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNS4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMS4wMi4wMCNPaWxmaWVsZCBkYXRhIG1pbmluZyBzZXJ2aWNlcyM3MS4xNS4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMS4wMy4wMCNMb2cgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjExLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjA0LjAwI09pbGZpZWxkIG1hcHBpbmcgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjExLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjA1LjAwI1NlaXNtaWMgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjExLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEyLjAwLjAwI09pbGZpZWxkIGVjb25vbWljIGFuZCByaXNrIG1vZGVsIHNlcnZpY2VzIzcxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEyLjAxLjAwI09pbGZpZWxkIGJ1ZGdldGluZyBzZXJ2aWNlcyM3MS4xNS4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMi4wMi4wMCNPaWxmaWVsZCBjYXBpdGFsIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjE1LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEyLjAzLjAwI09pbGZpZWxkIGRlY2lzaW9uIHRyZWUgc2VydmljZXMjNzEuMTUuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDAuMDAjT2lsZmllbGQgaW50ZXJwcmV0YXRpb24gc2VydmljZXMjNzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDEuMDAjT2lsZmllbGQgYnViYmxlIG1hcCBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wMi4wMCNPaWxmaWVsZCBjYXNlIHN0dWRpZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDMuMDAjT2lsZmllbGQgZGVjbGluZSBhbmFseXNpcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wNC4wMCNPaWxmaWVsZCBmaWVsZCBzdHVkaWVzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA1LjAwI09pbGZpZWxkIGZyYWN0dXJpbmcgaW50ZXJwcmV0YXRpb24gc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDYuMDAjR2VvbG9neSBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wNy4wMCNHZW9waHlzaWNzIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA4LjAwI0dyYXZlbCBwYWNrIGludGVycHJldGF0aW9uIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA5LjAwI09pbGZpZWxkIGdyaWQgbWFwcGluZyBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4xMC4wMCNPaWxmaWVsZCBtYXBwaW5nIG9yIHZpc3VhbGl6YXRpb24gc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTEuMDAjUGV0cm9waHlzaWNzIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjEyLjAwI1Jlc2Vydm9pciBlbmdpbmVlcmluZyBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4xMy4wMCNSZXNlcnZvaXIgbW9kZWxpbmcgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTQuMDAjUmVzZXJ2b2lyIHNpbXVsYXRpb24gc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTUuMDAjUm9jayBtZWNoYW5pY3Mgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDAuMDAjV2VsbCBzZXJ2aWNlIGVuZ2luZWVyaW5nIzcxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjAxLjAwI1dlbGwgY2VtZW50aW5nIGpvYiBkZXNpZ24gc2VydmljZXMjNzEuMTUuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDIuMDAjQ29pbGVkIHR1YmluZyBqb2IgZGVzaWduIHNlcnZpY2VzIzcxLjE1LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjAzLjAwI1dlbGwgZHJpbGxpbmcgam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wNC4wMCNXZWxsIGZyYWN0dXJpbmcgam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wNS4wMCNNYXRyaXggc3RpbXVsYXRpb24gam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wNi4wMCNXZWxsIHNhbmQgY29udHJvbCBqb2IgZGVzaWduIHNlcnZpY2VzIzcxLjE1LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjAwLjAwLjAwI09pbCBhbmQgZ2FzIHdlbGwgcHJvamVjdCBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjAwLjAwI09pbGZpZWxkIE1vZGVsaW5nIFNlcnZpY2VzIzcxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjAxLjAwI09pbGZpZWxkIGNvbXBsZXRpb24gbW9kZWxzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjAyLjAwI09pbGZpZWxkIGRyaWxsaW5nIG1vZGVscyM3MS4xNi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMC4wMy4wMCNPaWxmaWVsZCBlY29ub21pYyBtb2RlbHMjNzEuMTYuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTAuMDQuMDAjT2lsZmllbGQgZmllbGQgZGV2ZWxvcG1lbnQgbW9kZWxzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjA1LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gbW9kZWxzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjA2LjAwI09pbGZpZWxkIHJpc2sgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wMC4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIGVuZ2luZWVyaW5nIG1hbmFnZW1lbnQjNzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDEuMDAjT2lsZmllbGQgYXJ0aWZpY2lhbCBsaWZ0IHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjAyLjAwI0VuaGFuY2VkIG9pbCByZWNvdmVyeSBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wMy4wMCNXZWxsIGluamVjdGlvbiBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wNC4wMCNPaWxmaWVsZCBub2RhbCBhbmFseXNpcyBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wNS4wMCNXZWxsIHBlcmZvcmF0aW9uIHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjA2LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gY2hlbWlzdHJ5IHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjA3LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wOC4wMCNPaWxmaWVsZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDkuMDAjV2VsbCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4xMC4wMCNVbmRlcmdyb3VuZCBnYXMgc3RvcmFnZSBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4xMS4wMCNPaWxmaWVsZCB3YXRlciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjAwLjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gb3BlcmF0aW9ucyBtYW5hZ2VtZW50IzcxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjAxLjAwI09pbGZpZWxkIGhvdCBvaWxpbmcgc2VydmljZSM3MS4xNi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wMi4wMCNPaWxmaWVsZCBsZWFzZSBvcGVyYXRpb25zIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjAzLjAwI09pbGZpZWxkIGxvZ2dpbmcgc2VydmljZXMjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDQuMDAjT2lsZmllbGQgcGFyYWZmaW4gY3V0dGluZyBzZXJ2aWNlIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjA1LjAwI09pbGZpZWxkIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjA2LjAwI09pbGZpZWxkIHByb2Nlc3Npbmcgc2VydmljZXMjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDcuMDAjV2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjAwLjAwI09pbGZpZWxkIHByb2plY3QgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wMS4wMCNPaWxmaWVsZCBhdWRpdHMgb3IgaW5zcGVjdGlvbiBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wMi4wMCNPaWxmaWVsZCBlbWVyZ2VuY3kgcmVzcG9uc2UgcGxhbm5pbmcgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDMuMDAjT2lsZmllbGQgZmllbGQgZGV2ZWxvcG1lbnQgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDQuMDAjT2lsZmllbGQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wNS4wMCNPaWxmaWVsZCByZXBvcnRpbmcgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDYuMDAjT2lsZmllbGQgc3VjY2Vzc2lvbiBwbGFuIG9yIGhhbmRvdmVyIHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjA3LjAwI09pbGZpZWxkIHRyYWluaW5nIG1hdHJpeCBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wOC4wMCNXZWxsIHNpdGUgbG9naXN0aWNzIG9yIHByb2N1cmVtZW50IHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjAwLjAwI1dlbGwgY29uc3RydWN0aW9uIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDEuMDAjQ29pbGVkIHR1YmluZyBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wMi4wMCNXZWxsIGNvbXBsZXRpb24gZW5naW5lZXJpbmcgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDMuMDAjRGVhZG1hbiBhbmNob3Igc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDQuMDAjV2VsbCBkcmlsbGluZyBlbmdpbmVlcmluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wNS4wMCNXZWxsIHNpdGUgcGl0IGxpbmluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wNi4wMCNXZWxsIHBsdWcgb3IgYWJhbmRvbm1lbnQgc2VydmljZSM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wNy4wMCNXZWxsIHB1bGxpbmcgdW5pdCBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wOC4wMCNTaG9yZWJhc2Ugc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDkuMDAjVGVzdCBwaXQgbGluaW5nIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjEwLjAwI1dlbGwgc2l0ZSB2YWN1dW0gdHJ1Y2sgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMTEuMDAjVW5kZXJiYWxhbmNlZCBhcHBsaWNhdGlvbnMgZW5naW5lZXJpbmcgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMTIuMDAjV2VsbCB3b3Jrb3ZlciBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4xMy4wMCNXZWxsIGZhYnJpY2F0aW9uIG9yIGNvbnN0cnVjdGlvbiBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wMC4wMCNXZWxsIHNpdGUgb3BlcmF0aW9ucyBzZXJ2aWNlcyM3MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wMS4wMCNXZWxsIHNpdGUgZWxlY3RyaWNhbCBvciBpbnN0cnVtZW50YXRpb24gc2VydmljZXMjNzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTUuMDIuMDAjV2VsbCBzaXRlIGhlYXZ5IGVxdWlwbWVudCBvciBjcmFuZSBzZXJ2aWNlcyM3MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wMy4wMCNXZWxsIHNpdGUgaW5zcGVjdGlvbiBvciBlcXVpcG1lbnQgdGVzdGluZyBzZXJ2aWNlcyM3MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wNC4wMCNXZWxsIHNpdGUgaW5zdHJ1bWVudCBhbmQgbWV0ZXIgc2VydmljZXMjNzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTUuMDUuMDAjV2VsbCBzaXRlIHZhbHZlIG9yIHZhbHZlIHBhcnQgc2VydmljZXMjNzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMDAuMDAuMDAuMDAjQnVpbGRpbmcgYW5kIENvbnN0cnVjdGlvbiBhbmQgTWFpbnRlbmFuY2UgU2VydmljZXMjNzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMDAuMDAuMDAjQnVpbGRpbmcgY29uc3RydWN0aW9uIGFuZCBzdXBwb3J0IGFuZCBtYWludGVuYW5jZSBhbmQgcmVwYWlyIHNlcnZpY2VzIzcyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE1LjAwLjAwI0J1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDEuMDAjSGFuZHltYW4gc2VydmljZXMjNzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDIuMDAjU2NhZmZvbGRpbmcgc2VydmljZXMjNzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDMuMDAjUmlnZ2luZyBzZXJ2aWNlcyM3Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNS4wNC4wMCNEaXNhc3RlciBwcm9vZmluZyBvciBjb250aW5nZW5jeSBzZXJ2aWNlcyM3Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNS4wNS4wMCNMb2Nrc21pdGggc2VydmljZXMjNzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDAuMDAjUm9vZmluZyBhbmQgc2lkaW5nIGFuZCBzaGVldCBtZXRhbCB3b3JrIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjAxLjAwI1Jvb2ZpbmcgaW5zdGFsbGF0aW9uIG9yIHJlcGFpciM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wMi4wMCNTa3lsaWdodCBpbnN0YWxsYXRpb24jNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDMuMDAjR3V0dGVyIG9yIGRvd25zcG91dCBzZXJ2aWNlcyM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wNC4wMCNBcmNoaXRlY3R1cmFsIHNoZWV0IG1ldGFsIHdvcmsjNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDUuMDAjQ2VpbGluZyBlcmVjdGlvbiBvciByZXBhaXIjNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDYuMDAjQ2h1dGUgaW5zdGFsbGF0aW9uIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjA3LjAwI1NpZGluZyBpbnN0YWxsYXRpb24gb3IgcmVwYWlyIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjAwLjAwI0NvbmNyZXRlIHdvcmsjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTcuMDEuMDAjRXh0ZXJpb3IgY29uY3JldGUgb3Igc3R1Y2NvIHNlcnZpY2VzIzcyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjAyLjAwI0dyb3V0aW5nIHNlcnZpY2VzIzcyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjAzLjAwI1NpZGV3YWxrIG9yIGN1cmIgY29uc3RydWN0aW9uIzcyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjA0LjAwI0ZvdW5kYXRpb24gb3Igc2xhYiB3b3JrIzcyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE4LjAwLjAwI0V4dGVyaW9yIGNsZWFuaW5nIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE4LjAxLjAwI1NhbmRibGFzdGluZyM3Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOC4wMi4wMCNIaWdoIHByZXNzdXJlIHdhdGVyIGJsYXN0aW5nIzcyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE4LjAzLjAwI1N0ZWFtIGNsZWFuaW5nIzcyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE5LjAwLjAwI0ludGVyaW9yIGZpbmlzaGluZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOS4wMS4wMCNJbnRlcmlvciBkZXNpZ24gb3IgZGVjb3JhdGluZyM3Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOS4wMi4wMCNQbGFzdGVyaW5nIG9yIGRyeXdhbGwjNzIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTkuMDMuMDAjRmluaXNoIGNhcnBlbnRyeSBvciBjYWJpbmV0cnkjNzIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDAuMDAjQ29hdGluZyBhbmQgY2F1bGtpbmcgYW5kIHdlYXRoZXIgYW5kIHdhdGVyIGFuZCBmaXJlcHJvb2ZpbmcjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDEuMDAjQ2F1bGtpbmcjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDIuMDAjUGxhc3RpYyBlbmNhc2VtZW50IG9yIGNvYXRpbmcgb2Ygc3RydWN0dXJhbCBtYXRlcmlhbHMjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDMuMDAjQ29hdGluZyBvciBnbGF6aW5nIG9mIG1ldGFsIG9yIHdvb2Qgb3IgY29uY3JldGUgc3RydWN0dXJhbCBtYXRlcmlhbHMjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDQuMDAjRGFtcHByb29maW5nIzcyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIwLjA1LjAwI0ZpcmVwcm9vZmluZyBvZiBidWlsZGluZ3MjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDYuMDAjV3JhcHBpbmcgb2YgcGlwZXMjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDAuMDAjUGVzdCBjb250cm9sIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjAxLjAwI0JpcmQgcHJvb2Zpbmcgc2VydmljZXMjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDIuMDAjVGVybWl0ZSBjb250cm9sIHNlcnZpY2VzIzcyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjAzLjAwI0V4dGVybWluYXRpb24gb3IgZnVtaWdhdGlvbiBzZXJ2aWNlcyM3Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wNC4wMCNTdHJ1Y3R1cmFsIHBlc3QgY29udHJvbCM3Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wNS4wMCNBbmltYWwgdHJhcHBpbmcjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDYuMDAjUm9kZW50IGNvbnRyb2wjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjIuMDAuMDAjRWxlY3RyaWNhbCBzZXJ2aWNlcyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMi4wMS4wMCNFbGVjdHJpYyBwb3dlciBzeXN0ZW1zIGluc3RhbGxhdGlvbiBvciBzZXJ2aWNlIzcyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIyLjAyLjAwI0VsZWN0cm9uaWMgY29udHJvbHMgaW5zdGFsbGF0aW9uIzcyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIyLjAzLjAwI0NvbW11bmljYXRpb24gZXF1aXBtZW50IGluc3RhbGxhdGlvbiM3Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMi4wNC4wMCNTYWZldHkgb3Igc2VjdXJpdHkgc3lzdGVtcyBpbnN0YWxsYXRpb24jNzIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjIuMDUuMDAjQ2FibGluZyBzZXJ2aWNlIzcyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjAwLjAwI1BsdW1iaW5nIGFuZCBoZWF0aW5nIGFuZCBhaXIgY29uZGl0aW9uaW5nIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjAxLjAwI0JvaWxlciBpbnN0YWxsYXRpb24gb3IgYWRqdXN0bWVudCBvciBtYWludGVuYW5jZSBvciByZXBhaXIgc2VydmljZXMjNzIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjMuMDIuMDAjSGVhdGluZyBzeXN0ZW1zIGluc3RhbGxhdGlvbiByZXBhaXIgb3IgbWFpbnRlbmFuY2UjNzIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjMuMDMuMDAjUGx1bWJpbmcgc3lzdGVtIGNvbnN0cnVjdGlvbiM3Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMy4wNC4wMCNQbHVtYmluZyBzeXN0ZW0gbWFpbnRlbmFuY2Ugb3IgcmVwYWlyIzcyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjA1LjAwI0FpciBjb25kaXRpb25pbmcgaW5zdGFsbGF0aW9uIG9yIG1haW50ZW5hbmNlIG9yIHJlcGFpciBzZXJ2aWNlcyM3Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wMC4wMCNQYWludGluZyBhbmQgcGFwZXIgaGFuZ2luZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wMS4wMCNFeHRlcmlvciBwYWludGluZyBzZXJ2aWNlcyM3Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wMi4wMCNJbnRlcmlvciBwYWludGluZyBzZXJ2aWNlcyM3Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wMy4wMCNXYWxsY292ZXJpbmcgc2VydmljZXMjNzIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjQuMDQuMDAjSW5kdXN0cmlhbCBvciBzcGVjaWFsaXplZCBwYWludCBhcHBsaWNhdGlvbiBmb3IgYWlyY3JhZnQgb3Igc2hpcCBvciBicmlkZ2UjNzIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjQuMDUuMDAjUGF2ZW1lbnQgbWFya2luZyBzZXJ2aWNlcyM3Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wMC4wMCNNYXNvbnJ5IGFuZCBzdG9uZXdvcmsgYW5kIHRpbGUgc2V0dGluZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wMS4wMCNCcmlja2xheWluZyM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wMi4wMCNDaGltbmV5IGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wMy4wMCNNYXJibGUgb3Igc3RvbmUgb3IgdGlsZSBpbnN0YWxsYXRpb24jNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDQuMDAjUmV0YWluaW5nIHdhbGwgY29uc3RydWN0aW9uIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjA1LjAwI0ZyZXNjbyB3b3JrIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjA2LjAwI0Fjb3VzdGljYWwjNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDcuMDAjSW5zdWxhdGluZyBtYXRlcmlhbCBpbnN0YWxsYXRpb24jNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDguMDAjUmVzdG9yYXRpb24gb2YgbWFzb25yeSBvciBzdG9uZXdvcmsgb3IgdGlsZSM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNi4wMC4wMCNDYXJwZW50cnkjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjYuMDEuMDAjUm91Z2ggY2FycGVudHJ5IzcyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI2LjAyLjAwI1dpbmRvd3Mgb3IgZG9vciBvciBmaXh0dXJlIGluc3RhbGxhdGlvbiM3Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNi4wMy4wMCNGdXJuaXR1cmUgaW5zdGFsbGF0aW9uIzcyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI3LjAwLjAwI0Zsb29yaW5nIHNlcnZpY2UjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjcuMDEuMDAjRmxvb3Igc2hlYXRoaW5nIG9yIGxheWluZyBvciBpbnN0YWxsYXRpb24gb3IgZmluaXNoaW5nIzcyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI3LjAyLjAwI0Zsb29yIGNvdmVyaW5nIGluc3RhbGxhdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNy4wMy4wMCNGbG9vciBjbGVhbmluZyBzZXJ2aWNlcyM3Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOC4wMC4wMCNSZWZ1cmJpc2hpbmcgc2VydmljZXMjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjguMDEuMDAjUmVub3ZhdGlvbiBvZiBidWlsZGluZ3Mgb3IgbGFuZG1hcmtzIG9yIG1vbnVtZW50cyM3Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOC4wMi4wMCNSZXN0b3JhdGlvbiBvZiBidWlsZGluZ3Mgb3IgbGFuZG1hcmtzIG9yIG1vbnVtZW50cyM3Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOS4wMC4wMCNHcm91bmRzIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjI5LjAxLjAwI1Nub3cgUmVtb3ZhbCBTZXJ2aWNlcyM3Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOS4wMi4wMCNMYW5kc2NhcGluZyBzZXJ2aWNlcyM3Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4zMC4wMC4wMCNTaXRlIHByZXBhcmF0aW9uIHNlcnZpY2VzIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjMwLjAxLjAwI0xhbmQgY2xlYXJpbmcgc2VydmljZXMjNzIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMzAuMDIuMDAjTGFuZCBsZXZlbGxpbmcgc2VydmljZXMjNzIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMzAuMDMuMDAjRGVtb2xpdGlvbiBzZXJ2aWNlcyM3Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4zMC4wNC4wMCNEaWdnaW5nIHNlcnZpY2VzIzcyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzcyLjExLjAwLjAwLjAwI0dlbmVyYWwgYnVpbGRpbmcgY29uc3RydWN0aW9uIzcyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjExLjE1LjAwLjAwI1ByaXZhdGUgaG91c2luZyM3Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNS4wMS4wMCNTaW5nbGUgZmFtaWx5IGhvdXNpbmcgY29uc3RydWN0aW9uIG9yIHJlbW9kZWxpbmcgb3IgcmVwYWlyIzcyLjExLjE1LjAwLjAwCi11bnNwc2M3IzcyLjExLjE1LjAyLjAwI1Jlc2lkZW50aWFsIG11bHRpIHRlbmFudCBjb25zdHJ1Y3Rpb24gb3IgcmVtb2RlbGluZyBvciByZXBhaXIjNzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTYuMDAuMDAjSW5kdXN0cmlhbCBwbGFudHMjNzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTYuMDEuMDAjQ29tbWVyY2lhbCBvZmZpY2UgYnVpbGRpbmcgY29uc3RydWN0aW9uIG9yIHJlbW9kZWxpbmcgb3IgcmVub3ZhdGlvbiBvciByZXBhaXIjNzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTYuMDIuMDAjSW5kdXN0cmlhbCBidWlsZGluZ3Mgb3Igd2FyZWhvdXNlIGNvbnN0cnVjdGlvbiBvciByZW1vZGVsaW5nIG9yIHJlbm92YXRpb24gb3IgcmVwYWlyIzcyLjExLjE2LjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjAwLjAwI1B1YmxpYyB1c2UgYnVpbGRpbmdzIzcyLjExLjAwLjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjAxLjAwI1NwZWNpYWxpemVkIHB1YmxpYyB1c2UgYnVpbGRpbmcgY29uc3RydWN0aW9uIzcyLjExLjE3LjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjAyLjAwI05vbiByZXNpZGVudGlhbCBhZ3JpY3VsdHVyYWwgYnVpbGRpbmcgY29uc3RydWN0aW9uIzcyLjExLjE3LjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjAzLjAwI1NlcnZpY2Ugc3RhdGlvbiBvciBzZXJ2aWNlIGdhcmFnZSBjb25zdHJ1Y3Rpb24jNzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTcuMDQuMDAjQ29tbWVyY2lhbCBidWlsZGluZyBjb25zdHJ1Y3Rpb24gb3IgZXJlY3Rpb24gb3IgcmVub3ZhdGlvbiBvciByZXBhaXIjNzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTguMDAuMDAjQ29tbWVyY2lhbCBidWlsZGluZ3MjNzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTguMDEuMDAjUmVzdGF1cmFudCBjb25zdHJ1Y3Rpb24gb3IgcmVub3ZhdGlvbiBvciByZXBhaXIgb3IgbWFpbnRlbmFuY2UjNzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTguMDIuMDAjU2hvcHBpbmcgY2VudGVyIG9yIHN0b3JlIGNvbnN0cnVjdGlvbiBvciByZW5vdmF0aW9uIG9yIHJlcGFpciBvciBtYWludGVuYW5jZSM3Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOC4wMy4wMCNPZmZpY2UgYnVpbGRpbmcgY29uc3RydWN0aW9uIG9yIHJlbm92YXRpb24gb3IgcmVwYWlyIG9yIG1haW50ZW5hbmNlIzcyLjExLjE4LjAwLjAwCi11bnNwc2M3IzcyLjExLjE4LjA0LjAwI0JhdGhyb29tIHJlbm92YXRpb24jNzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTkuMDAuMDAjTGFuZCBhbmQgYnVpbGRpbmcgc2l0ZSBwcmVwYXJhdGlvbiM3Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOS4wMS4wMCNMYW5kIGNsZWFyaW5nIzcyLjExLjE5LjAwLjAwCi11bnNwc2M3IzcyLjExLjE5LjAyLjAwI0xhbmQgbGV2ZWxpbmcjNzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTkuMDMuMDAjQnVpbGRpbmcgZGVtb2xpdGlvbiM3Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4wMC4wMC4wMCNJbmZyYXN0cnVjdHVyZSBjb25zdHJ1Y3Rpb24gYW5kIG1haW50ZW5hbmNlIzcyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjAwLjAwI0hpZ2h3YXlzIGFuZCBzdHJlZXRzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjAxLjAwI0hpZ2h3YXkgb3Igc3RyZWV0IG9yIHJvYWQgY29uc3RydWN0aW9uIzcyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjAyLjAwI0hpZ2h3YXkgb3Igc3RyZWV0IG9yIHJvYWQgc3VyZmFjaW5nIG9yIHBhdmluZyBvciBtYWludGVuYW5jZSM3Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNS4wMy4wMCNIaWdod2F5IG9yIHN0cmVldCBndWFyZHJhaWwgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjA0LjAwI0hpZ2h3YXkgb3Igc3RyZWV0IHNpZ24gb3IgdHJhZmZpYyBzaWduYWwgaW5zdGFsbGF0aW9uIzcyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjAwLjAwI1dhdGVyIGFuZCBzZXdlciBhbmQgdXRpbGl0eSBsaW5lcyM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wMS4wMCNFbGVjdHJpYyBwb3dlciBsaW5lIGNvbnN0cnVjdGlvbiBvciBpbnN0YWxsYXRpb24jNzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDIuMDAjQ2FibGUgbGF5aW5nIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjAzLjAwI0FxdWVkdWN0IGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wNC4wMCNTZXdlciBsaW5lIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wNS4wMCNXYXRlciBtYWluIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wNi4wMCNWb2ljZSBvciBkYXRhIGxpbmUgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjA3LjAwI1dhdGVyIGluZHVzdHJpYWwgcGxhbnQgY29uc3RydWN0aW9uIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjAwLjAwI0RhbXMgYW5kIG1hcmluZSBjb25zdHJ1Y3Rpb24jNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDEuMDAjRGFtIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wMi4wMCNQaWVyIG9yIGRvY2sgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjAzLjAwI0hhcmJvciBvciBicmVha3dhdGVyIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wNC4wMCNEeWtlIG9yIGxldmVlIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wNS4wMCNEcmVkZ2luZyBvciBjYWlzc29uIGRyaWxsaW5nIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjA2LjAwI0NhbmFsIG9yIGRyYWluYWdlIG9yIGlycmlnYXRpb24gc3lzdGVtIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wNy4wMCNQb25kIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOC4wMC4wMCNSYWlscm9hZHMgYW5kIHN1YndheXMgYW5kIHRyYW13YXlzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE4LjAxLjAwI0N1dHRpbmcgb2YgcmlnaHQgb2Ygd2F5IzcyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE4LjAyLjAwI1JhaWxyb2FkIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOC4wMy4wMCNTdWJ3YXkgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE4LjA0LjAwI1RyYW0gY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE5LjAwLjAwI0FpcnBvcnRzIGFuZCBhdmlhdGlvbiM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOS4wMS4wMCNBaXJwb3J0IHJ1bndheSBjb25zdHJ1Y3Rpb24jNzIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTkuMDIuMDAjQWlycG9ydCB0ZXJtaW5hbCBjb25zdHJ1Y3Rpb24jNzIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTkuMDMuMDAjSGVsaXBhZCBjb25zdHJ1Y3Rpb24jNzIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjAuMDAuMDAjQnJpZGdlcyBhbmQgdHVubmVscyBhbmQgdmlhZHVjdHMjNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjAuMDEuMDAjQnJpZGdlIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMC4wMi4wMCNUdW5uZWwgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIwLjAzLjAwI1ZpYWR1Y3QgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIxLjAwLjAwI0NvbnN0cnVjdGlvbiBxdWFudGl0eSBzdXJ2ZXlvcnMjNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjEuMDEuMDAjV2F0ZXIgb3Igd2FzdGV3YXRlciBxdWFudGl0eSBzdXJ2ZXlvcnMjNzIuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjIuMDAuMDAjQ29uc3RydWN0aW9uIGNvbnN1bHRhbmN5IHNlcnZpY2VzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIyLjAxLjAwI1NpdGUgc3VwZXJ2aXNpb24jNzIuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjIuMDIuMDAjSW5kdXN0cmlhbCBwbGFudCBkZXNpZ24jNzIuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzMuMDAuMDAuMDAuMDAjSW5kdXN0cmlhbCBQcm9kdWN0aW9uIGFuZCBNYW51ZmFjdHVyaW5nIFNlcnZpY2VzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjAwLjAwLjAwI1BsYXN0aWMgYW5kIGNoZW1pY2FsIGluZHVzdHJpZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDAuMDAjUGV0cm9jaGVtaWNhbCBhbmQgcGxhc3RpYyBwcm9kdWN0aW9uIzczLjEwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjAxLjAwI1BldHJvbGV1bSByZWZpbmluZyBzZXJ2aWNlcyM3My4xMC4xNS4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wMi4wMCNOYXR1cmFsIGdhcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE1LjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjAzLjAwI09pbHMgb3IgZ3JlYXNlcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE1LjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjA0LjAwI0NvYWwgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNS4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wNS4wMCNQbGFzdGljcyBvciByZXNpbnMgb3IgZmliZXJzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDYuMDAjQ3JlZGl0IGNhcmQgcHJvZHVjdGlvbiBvciBlbWJvc3Npbmcgc2VydmljZXMjNzMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDAuMDAjQ2hlbWljYWxzIGFuZCBmZXJ0aWxpemVycyBwcm9kdWN0aW9uIzczLjEwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjAxLjAwI0lub3JnYW5pYyBjaGVtaWNhbHMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wMi4wMCNTb2RhIGFzaCBvciBjaGxvcmluZSBvciBjYXVzdGljIHNvZGEgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wMy4wMCNJbm9yZ2FuaWMgYWNpZHMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wNC4wMCNPcmdhbmljIGNoZW1pY2FsIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDUuMDAjQWNldHlsZW5lIG9yIGRlcml2YXRpdmVzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDYuMDAjRXRoeWxlbmUgb3IgZGVyaXZhdGl2ZXMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wNy4wMCNFdGhhbm9sIG9yIG1ldGhhbm9sIG9yIGRlcml2YXRpdmVzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDguMDAjRmVydGlsaXplcnMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wOS4wMCNQb3Rhc2ggbWluaW5nIG9yIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMTAuMDAjUGVzdGljaWRlIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMTEuMDAjUGFpbnRzIG9yIHZhcm5pc2hlcyBvciBsYWNxdWVycyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjEyLjAwI1NvYXAgb3IgY2xlYW5pbmcgcHJlcGFyYXRpb25zIG9yIHBlcmZ1bWVzIG9yIGNvc21ldGljcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjEzLjAwI1NvbHZlbnRzIG9yIGdseWNvbHMgb3IgZGV0ZXJnZW50cyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjE0LjAwI0Zlcm1lbnRzIG9yIGVuenltZXMgc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTcuMDAuMDAjUGhhcm1hY2V1dGljYWwgcHJvZHVjdGlvbiM3My4xMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMC4xNy4wMS4wMCNEcnVncyBvciBtZWRpY2luZSBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE3LjAwLjAwCi11bnNwc2M3IzczLjEwLjE3LjAyLjAwI1ZhY2NpbmVzIG9yIHNlcmEgb3IgYW50aWJpb3RpY3MgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNy4wMC4wMAotdW5zcHNjNyM3My4xMC4xNy4wMy4wMCNQYXJhcGhhcm1hY2V1dGljYWwgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNy4wMC4wMAotdW5zcHNjNyM3My4xMC4xOC4wMC4wMCNCaW9jaGVtaWNhbCBhbmQgYmlvdGVjaG5vbG9neSBwcm9kdWN0aW9uIzczLjEwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE4LjAxLjAwI0Jpb21hc3MgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xOC4wMC4wMAotdW5zcHNjNyM3My4xMC4xOC4wMi4wMCNCaW9wcm90ZWluIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTkuMDAuMDAjUnViYmVyIHByb2R1Y3Rpb24jNzMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTkuMDEuMDAjUnViYmVyIG1pbGxpbmcgc2VydmljZXMjNzMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTkuMDIuMDAjUnViYmVyIHRpcmVzIG9yIHR1YmVzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTkuMDMuMDAjUnViYmVyIG9yIHBsYXN0aWMgZm9vdHdlYXIgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xOS4wMC4wMAotdW5zcHNjNyM3My4xMS4wMC4wMC4wMCNXb29kIGFuZCBwYXBlciBpbmR1c3RyaWVzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjAwLjAwI1dvb2QgcHJvY2Vzc2luZyM3My4xMS4wMC4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wMS4wMCNTYXdtaWxsaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjAyLjAwI1ZlbmVlciBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjAzLjAwI1dvb2QgYmFzZSBwYW5lbHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wNC4wMCNXb29kZW4gY29udGFpbmVycyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjA1LjAwI0Z1cm5pdHVyZSBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjA2LjAwI0NvcmsgcHJvZHVjdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wNy4wMCNDYW5lIG9yIHdpY2tlcndhcmUgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNi4wMC4wMCNQdWxwIGFuZCBwYXBlciBwcm9jZXNzaW5nIzczLjExLjAwLjAwLjAwCi11bnNwc2M3IzczLjExLjE2LjAxLjAwI1B1bHAgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMS4xNi4wMC4wMAotdW5zcHNjNyM3My4xMS4xNi4wMi4wMCNQYXBlciBvciBwYXBlciBib2FyZCBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjExLjE2LjAwLjAwCi11bnNwc2M3IzczLjExLjE2LjAzLjAwI0hhcmRib2FyZCBvciBmaWJlcmJvYXJkIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTYuMDQuMDAjUGFwZXIgcHJvZHVjdGlvbiBvciByZWN5Y2xpbmcgc2VydmljZXMjNzMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMDAuMDAuMDAjTWV0YWwgYW5kIG1pbmVyYWwgaW5kdXN0cmllcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wMC4wMCNNZXRhbCBzbWVsdGluZyBhbmQgcmVmaW5pbmcgYW5kIGZvcm1pbmcgcHJvY2Vzc2VzIzczLjEyLjAwLjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjAxLjAwI0ZlcnJvdXMgYWxsb3kgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wMi4wMCNCYXNpYyBtZXRhbCBjb21iaW5hdGlvbiBwcm9jZXNzZXMgc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDMuMDAjUmVmcmFjdG9ycyBzZXJ2aWNlcyBmb3IgaXJvbiBvciBzdGVlbCBwcm9kdWN0aW9uIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA0LjAwI0lyb24gb3Igc3RlZWwgbWFraW5nIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA1LjAwI0lyb24gb3Igc3RlZWwgZm9yZ2luZyBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wNi4wMCNQcmUgZmluaXNoaW5nIGlyb24gb3Igc3RlZWwgcHJvY2Vzc2VzIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA3LjAwI0ZpbmlzaGluZyBtZXRhbCBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA4LjAwI1NtZWx0aW5nIG1ldGFsIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA5LjAwI1JlZmluaW5nIG1ldGFsIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjAwLjAwI01ldGFsIGZpbmlzaGluZyM3My4xMi4wMC4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wMS4wMCNNZXRhbCBjdXR0aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjAyLjAwI0JsYWNrc21pdGggc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDMuMDAjTWV0YWwgaGVhdGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wNC4wMCNNZXRhbCBwbGF0aW5nIG9yIHJlcGxhdGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wNS4wMCNNZXRhbCByb2xsaW5nIG9wZXJhdGlvbnMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDYuMDAjTWV0YWwgZm9yZ2luZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wNy4wMCNNZXRhbCBkcmF3aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjA4LjAwI01ldGFsIGV4dHJ1ZGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wOS4wMCNTdXJmYWNlIG1ldGFsIGZpbmlzaGluZyBvciB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMTAuMDAjSG9yc2VzaG9laW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjExLjAwI1RpbnNtaXRoaW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjEyLjAwI1JlYmFiYml0aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjEzLjAwI01ldGFsIGNhc3Rpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTcuMDAuMDAjV2VsZGluZyBhbmQgYnJhemluZyBhbmQgc29sZGVyaW5nIzczLjEyLjAwLjAwLjAwCi11bnNwc2M3IzczLjEyLjE3LjAxLjAwI1dlbGRpbmcgc2VydmljZXMjNzMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTcuMDIuMDAjQnJhemluZyBzZXJ2aWNlcyM3My4xMi4xNy4wMC4wMAotdW5zcHNjNyM3My4xMi4xNy4wMy4wMCNTb2xkZXJpbmcgc2VydmljZXMjNzMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTcuMDQuMDAjQ2FzdGluZyBzZXJ2aWNlcyM3My4xMi4xNy4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wMC4wMCNOb24gbWV0YWxsaWMgbWluZXJhbCBwcm9kdWN0cyBpbmR1c3RyeSBzZXJ2aWNlcyM3My4xMi4wMC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wMS4wMCNQb3R0ZXJ5IG9yIGNoaW5hIG9yIGVhcnRoZW53YXJlIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDIuMDAjR2xhc3Mgb3IgZ2xhc3MgcHJvZHVjdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wMy4wMCNTdHJ1Y3R1cmFsIGNsYXkgcHJvZHVjdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wNC4wMCNDZW1lbnQgb3IgbGltZSBvciBwbGFzdGVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDUuMDAjQ29uY3JldGUgb3IgYWdncmVnYXRlcyBvciBzdG9uZSBwcm9kdWN0cyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjA2LjAwI0FicmFzaXZlcyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjA3LjAwI0FzYmVzdG9zIHByb2R1Y3RzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTMuMDAuMDAuMDAjRm9vZCBhbmQgYmV2ZXJhZ2UgaW5kdXN0cmllcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wMC4wMCNCZXZlcmFnZSBwcm9jZXNzaW5nIzczLjEzLjAwLjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjAxLjAwI1NwaXJpdHMgZGlzdGlsbGluZyBvciBibGVuZGluZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wMi4wMCNXaW5lIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDMuMDAjQnJld2VyeSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjA0LjAwI05vbiBhbGNvaG9saWMgZnJ1aXQgYmFzZWQgYmV2ZXJhZ2UgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wNS4wMCNXYXRlciBiZXZlcmFnZXMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wNi4wMCNJbmZ1c2VkIGJldmVyYWdlcyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjA3LjAwI0NvZmZlZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjA4LjAwI1RlYSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjAwLjAwI01lYXQgYW5kIHBvdWx0cnkgYW5kIHNlYWZvb2QgcHJvY2Vzc2luZyM3My4xMy4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wMS4wMCNNZWF0IHByb2R1Y3RzIG9yIGJ5IHByb2R1Y3RzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDIuMDAjRmlzaCBvciBmaXNoIHByb2R1Y3RzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDMuMDAjUG91bHRyeSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjA0LjAwI01lYXQgaHlnaWVuZSBvciBpbnNwZWN0aW9uIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjA1LjAwI01lYXQgcGxhbnQgb3BlcmF0aW9uIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDYuMDAjU2xhdWdodGVyIGhvdXNlcyBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wNy4wMCNCdXRjaGVyIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjA4LjAwI0NvbGQgc3RvcmFnZSBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNy4wMC4wMCNGcnVpdHMgYW5kIHZlZ2V0YWJsZXMgcHJvY2Vzc2luZyM3My4xMy4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xNy4wMS4wMCNGcnVpdCBvciB2ZWdldGFibGUgY2xlYW5pbmcgc2VydmljZXMjNzMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTcuMDIuMDAjRnJ1aXQgb3IgdmVnZXRhYmxlIHNwcmF5aW5nIHNlcnZpY2VzIzczLjEzLjE3LjAwLjAwCi11bnNwc2M3IzczLjEzLjE3LjAzLjAwI0ZydWl0IG9yIHZlZ2V0YWJsZSBwYWNraW5nIHNlcnZpY2VzIzczLjEzLjE3LjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjAwLjAwI0RhaXJ5IGFuZCBlZ2dzIHByb2Nlc3NpbmcjNzMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTguMDEuMDAjTWlsayBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjAyLjAwI0VnZyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjAzLjAwI0NoZWVzZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjA0LjAwI0J1dHRlciBvciBjcmVhbSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjAwLjAwI0dyYWlucyBhbmQgc3VnYXIgYW5kIG9pbHMgYW5kIGZhdCBwcm9jZXNzaW5nIzczLjEzLjAwLjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjAxLjAwI01pbGxpbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDIuMDAjQ2VyZWFsIHByb2R1Y3RzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDMuMDAjU3VnYXIgb3Igc3VnYXIgcHJvZHVjdHMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wNC4wMCNWZWdldGFibGUgb2lscyBvciBmYXRzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDUuMDAjU3BpY2UgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wNi4wMCNCYWtlcnkgcHJvZHVjdHMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xNC4wMC4wMC4wMCNGaWJlcnMgYW5kIHRleHRpbGVzIGFuZCBmYWJyaWMgaW5kdXN0cmllcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wMC4wMCNGaWJlciBwcm9kdWN0aW9uIzczLjE0LjAwLjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjAxLjAwI1JheW9uIG9yIGFjZXRhdGUgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wMi4wMCNHbGFzcyBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjAzLjAwI1NpbGsgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wNC4wMCNDb3R0b24gZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wNS4wMCNXb29sIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDYuMDAjUG9seWVzdGVyIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDcuMDAjUG9seWFtaWRlIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDguMDAjQWNyeWxpYyBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE2LjAwLjAwI1RocmVhZCBhbmQgeWFybiBwcm9jZXNzaW5nIzczLjE0LjAwLjAwLjAwCi11bnNwc2M3IzczLjE0LjE2LjAxLjAwI1RocmVhZCBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjE0LjE2LjAwLjAwCi11bnNwc2M3IzczLjE0LjE2LjAyLjAwI1lhcm4gcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xNC4xNi4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wMC4wMCNGYWJyaWNzIGFuZCBsZWF0aGVyIHByb2R1Y3Rpb24jNzMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDEuMDAjQnJvYWQgd292ZW4gZmFicmljcyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjAyLjAwI05hcnJvdyB3b3ZlbiBmYWJyaWNzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDMuMDAjS25pdHdlYXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wNC4wMCNDYXJwZXQgb3IgcnVnIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDUuMDAjQ29yZGFnZSBvciByb3BlIG9yIHR3aW5lIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDYuMDAjRHllaW5nIG9yIHByaW50aW5nIG9yIGZpbmlzaGluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wNy4wMCNXb3ZlbiBzdWl0cyBvciBjb2F0cyBvciBvdmVyY29hdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wOC4wMCNXb3ZlbiBvdXRlcndlYXIgY2xvdGhpbmcgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wOS4wMCNGdXIgZHJlc3Npbmcgb3IgZHllaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjEwLjAwI0xlYXRoZXIgZm9vdHdlYXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4xMS4wMCNMZWF0aGVyIGx1Z2dhZ2Ugb3IgaGFuZGJhZ3MgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4xMi4wMCNMZWF0aGVyIHRhbm5pbmcgb3IgZmluaXNoaW5nIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMTMuMDAjTm9ud292ZW4gZmFicmljIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjE0LjAwI0JyYWlkZWQgeWFybiBvciBmYWJyaWMgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMTUuMDAjSW5kdXN0cmlhbCBzZXdpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMDAuMDAuMDAjTWFudWZhY3R1cmluZyBzdXBwb3J0IHNlcnZpY2VzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjE1LjAwLjAwI0Fzc2VtYmx5IHNlcnZpY2VzIzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjE1LjAxLjAwI0Fzc2VtYmx5IGxpbmUgd29yayM3My4xNS4xNS4wMC4wMAotdW5zcHNjNyM3My4xNS4xNS4wMi4wMCNKb2ludCBzZWFsaW5nIHNlcnZpY2VzIzczLjE1LjE1LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjAwLjAwI1BhY2thZ2luZyBzZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wMS4wMCNDYW5uaW5nIHBsYW50cyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wMi4wMCNQYWNrYWdpbmcgb2YgYWdyaWN1bHR1cmFsIGJ5IHByb2R1Y3RzIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjAzLjAwI1BhY2thZ2luZyBvZiBub24gZm9vZCBwcm9kdWN0cyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wNC4wMCNQYWNrYWdpbmcgb2YgcGhhcm1hY2V1dGljYWxzIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjA1LjAwI1BvaW50IG9mIHB1cmNoYXNlIGRpc3BsYXkgcGFja2FnaW5nIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjA2LjAwI01hbnVhbCBoYW5kIHBhY2thZ2luZyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wNy4wMCNNYWNoaW5lIGFzc2lzdGVkIHBhY2thZ2luZyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNy4wMC4wMCNNYXRlcmlhbCB0cmVhdG1lbnQjNzMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTcuMDEuMDAjV2F0ZXIgcHJvb2ZpbmcgbWF0ZXJpYWwgdHJlYXRtZW50IHNlcnZpY2VzIzczLjE1LjE3LjAwLjAwCi11bnNwc2M3IzczLjE1LjE3LjAyLjAwI0ZpcmUgcHJvdGVjdGlvbiBtYXRlcmlhbCB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTcuMDMuMDAjQW50aWNvcnJvc2lvbiBtYXRlcmlhbCB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTguMDAuMDAjQ29udmVydGluZyBzZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wMS4wMCNTaGVldGluZyBzZXJ2aWNlcyM3My4xNS4xOC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wMi4wMCNTbGl0dGluZyBzZXJ2aWNlcyM3My4xNS4xOC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wMy4wMCNEaWUgY3V0dGluZyBzZXJ2aWNlcyM3My4xNS4xOC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wNC4wMCNGb2xkaW5nIHNlcnZpY2VzIzczLjE1LjE4LjAwLjAwCi11bnNwc2M3IzczLjE1LjE4LjA1LjAwI0xhbWluYXRpbmcgc2VydmljZXMjNzMuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTkuMDAuMDAjSW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wMS4wMCNGbGV4b2dyYXBoaWMgaW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4xOS4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wMi4wMCNSb3RvZ3JhdnVyZSBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjAzLjAwI1NjcmVlbiBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjA0LjAwI09mZnNldCBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjA1LjAwI0RpZ2l0YWwgaW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4xOS4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wNi4wMCNUaGVybWFsIHRyYW5zZmVyIGluZHVzdHJpYWwgcHJpbnRpbmcgc2VydmljZXMjNzMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjAuMDAuMDAjRmlsbGluZyBTZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMC4wMS4wMCNMaXF1aWQgZmlsbGluZyBzZXJ2aWNlcyM3My4xNS4yMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMC4wMi4wMCNBZXJvc29sIGZpbGxpbmcgc2VydmljZXMjNzMuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjAuMDMuMDAjUGFzdGUgZmlsbGluZyBzZXJ2aWNlcyM3My4xNS4yMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMC4wNC4wMCNQb3dkZXIgZmlsbGluZyBzZXJ2aWNlcyM3My4xNS4yMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMS4wMC4wMCNNYW51ZmFjdHVyaW5nIGVxdWlwbWVudCBtYWludGVuYW5jZSBhbmQgcmVwYWlyIHNlcnZpY2VzIzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjIxLjAxLjAwI01hbnVmYWN0dXJpbmcgZXF1aXBtZW50IG1haW50ZW5hbmNlIHNlcnZpY2VzIzczLjE1LjIxLjAwLjAwCi11bnNwc2M3IzczLjE1LjIxLjAyLjAwI01hbnVmYWN0dXJpbmcgZXF1aXBtZW50IHJlcGFpciBzZXJ2aWNlcyM3My4xNS4yMS4wMC4wMAotdW5zcHNjNyM3My4xNi4wMC4wMC4wMCNNYWNoaW5lcnkgYW5kIHRyYW5zcG9ydCBlcXVpcG1lbnQgbWFudWZhY3R1cmUjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDAuMDAjTWFudWZhY3R1cmUgb2YgbWFjaGluZXJ5IzczLjE2LjAwLjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjAxLjAwI0VuZ2luZSBvciB0dXJiaW5lIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDIuMDAjQWdyaWN1bHR1cmFsIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wMy4wMCNNYWNoaW5lIHRvb2xzIG9yIG1ldGFsIG9yIHdvb2Qgd29ya2luZyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA0LjAwI1NwZWNpYWwgaW5kdXN0cmlhbCBwbGFudHMgb3IgbWFjaGluZXJ5IG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDUuMDAjQ29uc3RydWN0aW9uIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wNi4wMCNNaW5pbmcgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA3LjAwI0Zvb2QgcHJvZHVjdHMgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA4LjAwI1BhcGVyIHByaW50aW5nIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDkuMDAjTWV0YWxsdXJnaWNhbCBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjEwLjAwI0NoZW1pY2FsIG9yIHBoYXJtYWNldXRpY2FsIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTEuMDAjQ2VtZW50IHBsYW50IG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTIuMDAjVGV4dGlsZSBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjEzLjAwI1Bvd2VyIHBsYW50IGJvaWxlcnMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTQuMDAjRnVybmFjZXMgb3Igb3ZlbnMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTUuMDAjT2ZmaWNlIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTYuMDAjTGlmdGluZyBvciBob2lzdGluZyBvciBjb252ZXlpbmcgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjE3LjAwI0FpciBjb25kaXRpb25pbmcgb3IgdmVudGlsYXRpbmcgb3IgcmVmcmlnZXJhdGlvbiBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTguMDAjRG9tZXN0aWMgYXBwbGlhbmNlcyBvciBtYWNoaW5lcyBleGNlcHQgZWxlY3RyaWNhbCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xOS4wMCNQdW1wcyBvciBjb21wcmVzc29ycyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wMC4wMCNNYW51ZmFjdHVyZSBvZiB0cmFuc3BvcnQgZXF1aXBtZW50IzczLjE2LjAwLjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjAxLjAwI0Zpc2hpbmcgc2hpcCBvciBib2F0IGJ1aWxkaW5nIHNlcnZpY2VzIzczLjE2LjE2LjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjAyLjAwI1JhaWxyb2FkIHJvbGxpbmcgc3RvY2sgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDMuMDAjTG9jb21vdGl2ZSBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wNC4wMCNNb3RvciB2ZWhpY2xlcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wNS4wMCNNb3RvciB2ZWhpY2xlcyBwYXJ0cyBvciBhY2Nlc3NvcmllcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wNi4wMCNNb3RvcmN5Y2xlIG9yIGJpY3ljbGUgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDcuMDAjQWlyIG9yIHNwYWNlY3JhZnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMDAuMDAuMDAjTWFudWZhY3R1cmUgb2YgZWxlY3RyaWNhbCBnb29kcyBhbmQgcHJlY2lzaW9uIGluc3RydW1lbnRzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjAwLjAwI01hbnVmYWN0dXJlIG9mIGVsZWN0cmljYWwgZ29vZHMjNzMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDEuMDAjUG93ZXIgZ2VuZXJhdGlvbiBvciB0cmFuc21pc3Npb24gb3IgZGlzdHJpYnV0aW9uIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wMi4wMCNEcnkgb3Igc3RvcmFnZSBiYXR0ZXJ5IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjAzLjAwI0VsZWN0cmljYWwgdG9vbHMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDQuMDAjTWVhc3VyaW5nIG9yIHRlc3RpbmcgaW5zdHJ1bWVudHMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDUuMDAjUmFkaW8gb3IgdGVsZXZpc2lvbiBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wNi4wMCNDb21tdW5pY2F0aW9uIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wNy4wMCNFbGVjdHJpY2FsIGhvdXNlaG9sZCBhcHBsaWFuY2VzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjA4LjAwI0luc3VsYXRlZCB3aXJlIG9yIGNhYmxlIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjA5LjAwI0VsZWN0cmljYWwgYWNjZXNzb3JpZXMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMTAuMDAjRWxlY3RyaWNhbCBhY2Nlc3NvcmllcyBvciBzdXBwbGllcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4xMS4wMCNFbGVjdHJvbmljIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4xMi4wMCNFbGVjdHJvbmljIGNvbXB1dGVycyBvciBkYXRhIHByb2Nlc3NpbmcgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE2LjAwLjAwI01hbnVmYWN0dXJlIG9mIHByZWNpc2lvbiBpbnN0cnVtZW50cyM3My4xNy4wMC4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wMS4wMCNTY2llbnRpZmljIGluc3RydW1lbnRzIG9yIG1lYXN1cmluZyBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTYuMDIuMDAjTWVkaWNhbCBvciBkZW50YWwgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE2LjAwLjAwCi11bnNwc2M3IzczLjE3LjE2LjAzLjAwI1Bob3RvZ3JhcGhpYyBvciBvcHRpY2FsIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNi4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wNC4wMCNXYXRjaGVzIG9yIGNsb2NrcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNi4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wNS4wMCNMYWJvcmF0b3J5IGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNi4wMC4wMAotdW5zcHNjNyM3My4xOC4wMC4wMC4wMCNNYWNoaW5pbmcgYW5kIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDAuMDAjTWFjaGluaW5nIHNlcnZpY2VzIzczLjE4LjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjAxLjAwI1R1cm5pbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDIuMDAjRWxlY3RybyBkaXNjaGFyZ2UgbWFjaGluaW5nIChFRE0pIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjAzLjAwI0VsZWN0cm8gY2hlbWljYWwgbWFjaGluaW5nIChFQ00pIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjA0LjAwI0NoZW0gbWlsbGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wNS4wMCNQdW5jaGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wNi4wMCNTdGFtcGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wNy4wMCNCb3Jpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDguMDAjRHJpbGxpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDkuMDAjVGFwcGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xMC4wMCNMYXNlciBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xMS4wMCNCZW5kaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjEyLjAwI0dyaW5kaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjEzLjAwI1Nob3QgYmxhc3Rpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTQuMDAjUG9saXNoaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjE1LjAwI0ZsYW1lIGN1dHRpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTYuMDAjTGFzZXIgY3V0dGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xNy4wMCNQbGFzbWEgY3V0dGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xOC4wMCNXYXRlciBqZXQgY3V0dGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xOS4wMCNSb2xsaW5nIFNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjIwLjAwI1N1cmZhY2UgdHJlYXRtZW50IHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjIxLjAwI01pbGxpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMjIuMDAjU3ByYXlpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMjMuMDAjU2hhcnBlbmluZyBzZXJ2aWNlIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjAwLjAwI0NvYXRpbmcgc2VydmljZXMjNzMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDEuMDAjRWxlY3RybyBjb2F0aW5nIHNlcnZpY2VzIzczLjE4LjExLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjAyLjAwI0RpcHBpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDMuMDAjV3JhcHBpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDQuMDAjUGFpbnRpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDUuMDAjV2ViIGNvYXRpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDYuMDAjUGxhdGluZyBzZXJ2aWNlcyM3My4xOC4xMS4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wMC4wMCNGb3JtaW5nIHNlcnZpY2VzIzczLjE4LjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjAxLjAwI0RyYXcgZm9ybWluZyBzZXJ2aWNlcyM3My4xOC4xMi4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wMi4wMCNIeWRybyBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjAzLjAwI1JvbGwgZm9ybWluZyBzZXJ2aWNlcyM3My4xOC4xMi4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wNC4wMCNTdHJldGNoIGZvcm1pbmcgc2VydmljZXMjNzMuMTguMTIuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTIuMDUuMDAjU3BpbiBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjA2LjAwI0V4cGxvc2l2ZSBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEzLjAwLjAwI0hlYXQgdHJlYXRtZW50IHNlcnZpY2VzIzczLjE4LjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEzLjAxLjAwI1F1ZW5jaCBhbmQgdGVtcGVyIHNlcnZpY2VzIzczLjE4LjEzLjAwLjAwCi11bnNwc2M3IzczLjE4LjEzLjAyLjAwI0FubmVhbGluZyBzZXJ2aWNlcyM3My4xOC4xMy4wMC4wMAotdW5zcHNjNyM3My4xOC4xMy4wMy4wMCNOb3JtYWxpemluZyBzZXJ2aWNlcyM3My4xOC4xMy4wMC4wMAotdW5zcHNjNyM3My4xOC4xMy4wNC4wMCNBZ2luZyBvciBzdGFiaWxpemluZyBzZXJ2aWNlcyM3My4xOC4xMy4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wMC4wMCNXZWxkaW5nIGFuZCBicmF6aW5nIGFuZCBzb2xkZXJpbmcgc2VydmljZXMjNzMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDEuMDAjQXJjIHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDIuMDAjTWV0YWwgaW5lcnQgZ2FzIChNSUcpIHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDMuMDAjVHVuZ3N0ZW4gaW5lcnQgZ2FzIChUSUcpIHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDQuMDAjTGFzZXIgd2VsZGluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wNS4wMCNTcG90IHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDYuMDAjUHJvamVjdGlvbiB3ZWxkaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjA3LjAwI0JyYXppbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDguMDAjU29sZGVyaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3Izc2LjAwLjAwLjAwLjAwI0luZHVzdHJpYWwgQ2xlYW5pbmcgU2VydmljZXMjNzYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMDAuMDAuMDAjRGVjb250YW1pbmF0aW9uIHNlcnZpY2VzIzc2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEwLjE1LjAwLjAwI0Rpc2luZmVjdGlvbiM3Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNS4wMS4wMCNXYXNocm9vbSBzYW5pdGF0aW9uIHNlcnZpY2VzIzc2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEwLjE1LjAyLjAwI1Jlc3Qgcm9vbSBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNS4wMy4wMCNEaXNpbmZlY3Rpb24gb3IgZGVvZG9yaXppbmcgc2VydmljZXMjNzYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTYuMDAuMDAjSGF6YXJkb3VzIG1hdGVyaWFsIGRlY29udGFtaW5hdGlvbiM3Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNi4wMS4wMCNSYWRpb2FjdGl2ZSBkZWNvbnRhbWluYXRpb24gc2VydmljZXMjNzYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTYuMDIuMDAjQXNiZXN0b3MgZGVjb250YW1pbmF0aW9uIG9yIHJlbW92YWwjNzYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMDAuMDAuMDAjQ2xlYW5pbmcgYW5kIGphbml0b3JpYWwgc2VydmljZXMjNzYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTUuMDAuMDAjR2VuZXJhbCBidWlsZGluZyBhbmQgb2ZmaWNlIGNsZWFuaW5nIHNlcnZpY2VzIzc2LjExLjAwLjAwLjAwCi11bnNwc2M3Izc2LjExLjE1LjAxLjAwI0J1aWxkaW5nIGNsZWFuaW5nIHNlcnZpY2VzIzc2LjExLjE1LjAwLjAwCi11bnNwc2M3Izc2LjExLjE1LjAyLjAwI0J1aWxkaW5nIG1haW50ZW5hbmNlIG9yIHJlcGFpciBzZXJ2aWNlcyM3Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNS4wMy4wMCNMaWdodGluZyBtYWludGVuYW5jZSBzZXJ2aWNlcyM3Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNS4wNC4wMCNXaW5kb3cgb3Igd2luZG93IGJsaW5kIGNsZWFuaW5nIHNlcnZpY2VzIzc2LjExLjE1LjAwLjAwCi11bnNwc2M3Izc2LjExLjE2LjAwLjAwI0J1aWxkaW5nIGNvbXBvbmVudCBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wMS4wMCNBY291c3RpY2FsIHRpbGUgb3IgY2VpbGluZyBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wMi4wMCNBaXIgZHVjdCBjbGVhbmluZyM3Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wMy4wMCNDaGltbmV5IGNsZWFuaW5nIzc2LjExLjE2LjAwLjAwCi11bnNwc2M3Izc2LjExLjE2LjA0LjAwI0Zsb29yIHdheGluZyBvciBjYXJwZXQgY2xlYW5pbmcjNzYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTYuMDUuMDAjRXhoYXVzdCBob29kIG9yIGZhbiBjbGVhcmluZyM3Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNy4wMC4wMCNCdWlsZGluZyBzaXRlIGNsZWFuIHVwIzc2LjExLjAwLjAwLjAwCi11bnNwc2M3Izc2LjExLjE3LjAxLjAwI0NvbnN0cnVjdGlvbiBzaXRlIGNsZWFuIHVwIHNlcnZpY2VzIzc2LjExLjE3LjAwLjAwCi11bnNwc2M3Izc2LjExLjE3LjAyLjAwI0NvbnN0cnVjdGlvbiBzaXRlIGhhdWwgYXdheSBzZXJ2aWNlcyM3Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM3Ni4xMi4wMC4wMC4wMCNSZWZ1c2UgZGlzcG9zYWwgYW5kIHRyZWF0bWVudCM3Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNS4wMC4wMCNSZWZ1c2UgY29sbGVjdGlvbiBhbmQgZGlzcG9zYWwjNzYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTUuMDEuMDAjR2FyYmFnZSBjb2xsZWN0aW9uIG9yIGRlc3RydWN0aW9uIG9yIHByb2Nlc3Npbmcgb3IgZGlzcG9zYWwjNzYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTUuMDIuMDAjTGlxdWlkIHdhc3RlIGNvbGxlY3Rpb24gb3IgcHJvY2Vzc2luZyBvciBkaXNwb3NhbCM3Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNS4wMy4wMCNTdHJlZXQgY2xlYW5pbmcgc2VydmljZXMjNzYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTYuMDAuMDAjTm9uaGF6YXJkb3VzIHdhc3RlIGRpc3Bvc2FsIzc2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEyLjE2LjAxLjAwI0dhcmJhZ2UgZHVtcCM3Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNi4wMi4wMCNTYW5pdGFyeSBsYW5kZmlsbCBvcGVyYXRpb25zIzc2LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE2LjAzLjAwI1NsdWRnZSBkaXNwb3NhbCM3Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNi4wNC4wMCNEZWFkIGFuaW1hbCBkaXNwb3NhbCBzZXJ2aWNlcyM3Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNy4wMC4wMCNMaXF1aWQgd2FzdGUgdHJlYXRtZW50Izc2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEyLjE3LjAxLjAwI1Nld2FnZSB0cmVhdG1lbnQgc2VydmljZXMjNzYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTcuMDIuMDAjQ2hlbWljYWwgdHJlYXRtZW50IHNlcnZpY2VzIzc2LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE4LjAwLjAwI1JlZnVzZSB0cmVhdG1lbnQjNzYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTguMDEuMDAjUmVjeWNsaW5nIHNlcnZpY2VzIzc2LjEyLjE4LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE5LjAwLjAwI0hhemFyZG91cyB3YXN0ZSBkaXNwb3NhbCM3Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xOS4wMS4wMCNNZWRpY2FsIHdhc3RlIGRpc3Bvc2FsIzc2LjEyLjE5LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE5LjAyLjAwI0FjaWQgd2FzdGUgY29sbGVjdGlvbiBvciBkaXNwb3NhbCM3Ni4xMi4xOS4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xOS4wMy4wMCNDaGVtaWNhbCBkZXRveGlmaWNhdGlvbiM3Ni4xMi4xOS4wMC4wMAotdW5zcHNjNyM3Ni4xMy4wMC4wMC4wMCNUb3hpYyBhbmQgaGF6YXJkb3VzIHdhc3RlIGNsZWFudXAjNzYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTUuMDAuMDAjTnVjbGVhciB3YXN0ZSB0cmVhdG1lbnQjNzYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTUuMDEuMDAjUmFkaW9hY3RpdmUgd2FzdGUgbWF0ZXJpYWwgdHJlYXRtZW50Izc2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEzLjE1LjAyLjAwI1JhZGlvYWN0aXZlIGNvbnRhaW5tZW50IHNlcnZpY2VzIzc2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEzLjE2LjAwLjAwI1RveGljIHNwaWxsIGNsZWFudXAjNzYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTYuMDEuMDAjVG94aWMgc3BpbGwgY29udGFpbm1lbnQjNzYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTYuMDIuMDAjVG94aWMgc3Vic3RhbmNlcyBzcGlsbCBjbGVhbnVwIzc2LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEzLjE3LjAwLjAwI09pbCBzcGlsbCBjbGVhbnVwIzc2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEzLjE3LjAxLjAwI09pbCByZXNpZHVlIGRpc3Bvc2FsIG9yIGNvbnRyb2wgc2VydmljZXMjNzYuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTcuMDIuMDAjT2lsIHNwaWxsIHRyZWF0bWVudCBzZXJ2aWNlcyM3Ni4xMy4xNy4wMC4wMAotdW5zcHNjNyM3Ny4wMC4wMC4wMC4wMCNFbnZpcm9ubWVudGFsIFNlcnZpY2VzIzc3LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjAwLjAwLjAwI0Vudmlyb25tZW50YWwgbWFuYWdlbWVudCM3Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNS4wMC4wMCNFbnZpcm9ubWVudGFsIGltcGFjdCBhc3Nlc3NtZW50Izc3LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjAxLjAwI1Jpc2sgb3IgaGF6YXJkIGFzc2Vzc21lbnQjNzcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTUuMDIuMDAjRW52aXJvbm1lbnRhbCBzdGFuZGFyZHMjNzcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTUuMDMuMDAjRW52aXJvbm1lbnRhbCBpbmRpY2F0b3JzIGFuYWx5c2lzIzc3LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjA0LjAwI0Vudmlyb25tZW50YWwgaW1wYWN0IGFzc2Vzc21lbnQgIChFSUEpIHNlcnZpY2VzIzc3LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjA1LjAwI0Vudmlyb25tZW50YWwgbW9uaXRvcmluZyM3Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNi4wMC4wMCNFbnZpcm9ubWVudGFsIHBsYW5uaW5nIzc3LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjAxLjAwI1VyYmFuIGVudmlyb25tZW50YWwgZGV2ZWxvcG1lbnQgcGxhbm5pbmcjNzcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTYuMDIuMDAjRm9yZXN0IGNvbnNlcnZhdGlvbiBzdHJhdGVneSBwbGFubmluZyM3Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNi4wMy4wMCNNYXJpbmUgY29uc2VydmF0aW9uIHN0cmF0ZWd5IHBsYW5uaW5nIzc3LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjA0LjAwI05hdHVyYWwgcmVzb3VyY2VzIG1hbmFnZW1lbnQgb3IgY29uc2VydmF0aW9uIHN0cmF0ZWd5IHBsYW5uaW5nIHNlcnZpY2VzIzc3LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjA1LjAwI0Vudmlyb25tZW50YWwgaW5zdGl0dXRpb24gYnVpbGRpbmcgb3IgcGxhbm5pbmcjNzcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDAuMDAjRW52aXJvbm1lbnRhbCBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wMS4wMCNFbnZpcm9ubWVudGFsIHNjaWVuY2VzIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjAyLjAwI0Vudmlyb25tZW50YWwgY2hlbWlzdHJ5IGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjAzLjAwI0Vudmlyb25tZW50YWwgZXRoaWNzIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjA0LjAwI0Vudmlyb25tZW50YWwgdGVjaG5vbG9neSBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wNS4wMCNFbnZpcm9ubWVudGFsIGVjb25vbWljcyBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wNi4wMCNFbnZpcm9ubWVudGFsIGxhdyBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wNy4wMCNFY29sb2d5IGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjAwLjAwI0Vudmlyb25tZW50YWwgYXVkaXRpbmcjNzcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDEuMDAjRW52aXJvbm1lbnRhbCBpbmZvcm1hdGlvbiBzeXN0ZW1zIzc3LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjAyLjAwI0NvcnBvcmF0ZSBlbnZpcm9ubWVudGFsIGF1ZGl0aW5nIHNlcnZpY2VzIzc3LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjAzLjAwI1NlY3RvcmFsIGVudmlyb25tZW50YWwgYXVkaXRpbmcgc2VydmljZXMjNzcuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDQuMDAjQWN0aXZpdHkgc3BlY2lmaWMgZW52aXJvbm1lbnRhbCBhdWRpdGluZyBzZXJ2aWNlcyM3Ny4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wNS4wMCNFbnZpcm9ubWVudGFsIHF1YWxpdHkgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wNi4wMCNFbnZpcm9ubWVudGFsIHNlY3VyaXR5IGNvbnRyb2wgc2VydmljZXMjNzcuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDAuMDAjUG9sbHV0aW9uIGludmVzdGlnYXRpb24gc2VydmljZXMjNzcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDEuMDAjSW5kdXN0cmlhbCBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDIuMDAjSW5kdXN0cmlhbCB3YXN0ZSBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDMuMDAjR2Fzd29ya3Mgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjA0LjAwI0NoZW1pY2FsIHdvcmtzIG9yIG9pbCByZWZpbmVyeSB3YXN0ZSBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDUuMDAjV29vZCB0cmVhdG1lbnQgcGxhbnQgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjA2LjAwI09pbCBkZXBvdCBvciB0ZXJtaW5hbCBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDcuMDAjRHJ5IGNsZWFuaW5nIHBsYW50cyBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDguMDAjRm91bmRyeSBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDkuMDAjUmVjeWNsaW5nIHBsYW50IHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4xMC4wMCNGb29kIHByb2Nlc3NpbmcgcGxhbnQgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjExLjAwLjAwLjAwI0Vudmlyb25tZW50YWwgcHJvdGVjdGlvbiM3Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wMC4wMCNFbnZpcm9ubWVudGFsIHNhZmV0eSBzZXJ2aWNlcyM3Ny4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wMS4wMCNMYW5kc2NhcGUgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wMi4wMCNPem9uZSBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjAzLjAwI0Zvb2Qgb3IgZmVlZCBjb250YW1pbmF0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDQuMDAjR2VuZXRpYyByZXNvdXJjZXMgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wNS4wMCNUb3hpYyBzdWJzdGFuY2VzIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDYuMDAjUmFkaWF0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDcuMDAjRW5kYW5nZXJlZCBzcGVjaWVzIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDguMDAjTmF0dXJhbCByaXNrcyBvciBoYXphcmRzIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTYuMDAuMDAjRW52aXJvbm1lbnRhbCByZWhhYmlsaXRhdGlvbiM3Ny4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNi4wMS4wMCNJbmR1c3RyaWFsIHNpdGUgcmVoYWJpbGl0YXRpb24jNzcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTYuMDIuMDAjRW52aXJvbm1lbnRhbCBkZWNvbnRhbWluYXRpb24gc2VydmljZXMjNzcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTYuMDMuMDAjTGFuZCByZWNsYW1hdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4wMC4wMC4wMCNQb2xsdXRpb24gdHJhY2tpbmcgYW5kIG1vbml0b3JpbmcgYW5kIHJlaGFiaWxpdGF0aW9uIzc3LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjAwLjAwI0FpciBwb2xsdXRpb24jNzcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDEuMDAjQWlyIHF1YWxpdHkgbWFuYWdlbWVudCM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wMi4wMCNUcmFuc2JvdW5kYXJ5IGFpciBwb2xsdXRpb24gbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjAzLjAwI0FpciBwb2xsdXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wNC4wMCNBaXIgcG9sbHV0aW9uIG1vbml0b3Jpbmcgb3IgbWVhc3VyZW1lbnQgc2VydmljZXMjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDUuMDAjVG94aWMgZ2FzIGRldGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wNi4wMCNNZXRoYW5lIG1vbml0b3JpbmcjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDcuMDAjQ2FyYm9uIGRpb3hpZGUgbW9uaXRvcmluZyBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wOC4wMCNBaXJib3JuZSBwYXJ0aWNsZSBtb25pdG9yaW5nIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjA5LjAwI096b25lIGRlcGxldGlvbiBtb25pdG9yaW5nIHNlcnZpY2VzIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjAwLjAwI1NvaWwgcG9sbHV0aW9uIzc3LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjAxLjAwI1NvaWwgcG9sbHV0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDIuMDAjUG9sbHV0ZWQgc29pbCByZW1vdmFsIHNlcnZpY2VzIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjAzLjAwI1BvbGx1dGVkIHNvaWwgdHJlYXRtZW50IG9yIHJlaGFiaWxpdGF0aW9uIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjA0LjAwI1NvaWwgcG9sbHV0aW9uIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjA1LjAwI1NvaWwgcG9sbHV0aW9uIG1hcHBpbmcjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDYuMDAjU29pbCBwb2xsdXRpb24gbWVhc3VyZW1lbnQgb3IgbW9uaXRvcmluZyM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wNy4wMCNPcmdhbmljIGZlcnRpbGl6ZXIgcG9sbHV0aW9uIGFzc2Vzc21lbnQjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDguMDAjUGVzdGljaWRlcyBwb2xsdXRpb24gYXNzZXNzbWVudCM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wOS4wMCNOaXRyYXRlcyBwb2xsdXRpb24gYXNzZXNzbWVudCM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4xMC4wMCNQaG9zcGhhdGVzIHBvbGx1dGlvbiBhc3Nlc3NtZW50Izc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjAwLjAwI1dhdGVyIHBvbGx1dGlvbiM3Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wMS4wMCNTdXJmYWNlIHdhdGVyIHBvbGx1dGlvbiBtb25pdG9yaW5nIG9yIGNvbnRyb2wgc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDIuMDAjU3VyZmFjZSB3YXRlciBwb2xsdXRpb24gcmVoYWJpbGl0YXRpb24gc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDMuMDAjU3VyZmFjZSB3YXRlciBwb2xsdXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wNC4wMCNTdXJmYWNlIHdhdGVyIHRyZWF0bWVudCBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wNS4wMCNTdXJmYWNlIHdhdGVyIHBvbGx1dGlvbiBkcmFpbmFnZSBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wNi4wMCNUcmFuc2JvdW5kYXJ5IHdhdGVyIHBvbGx1dGlvbiBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDcuMDAjR3JvdW5kd2F0ZXIgcG9sbHV0aW9uIG1vbml0b3Jpbmcgb3IgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wOC4wMCNHcm91bmR3YXRlciBwb2xsdXRpb24gZHJhaW5hZ2Ugc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDkuMDAjR3JvdW5kd2F0ZXIgcG9sbHV0aW9uIHRyZWF0bWVudCBvciByZWhhYmlsaXRhdGlvbiM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMy4wMC4wMC4wMCNQb2xsdXRhbnRzIHRyYWNraW5nIGFuZCBtb25pdG9yaW5nIGFuZCByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM3Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNS4wMC4wMCNPaWwgcG9sbHV0aW9uIzc3LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEzLjE1LjAxLjAwI09pbCBzcGlsbGFnZSBtb25pdG9yaW5nIHNlcnZpY2VzIzc3LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE1LjAyLjAwI09pbCBzcGlsbGFnZSBjb250cm9sIHNlcnZpY2VzIzc3LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE1LjAzLjAwI09pbCBzcGlsbGFnZSByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM3Ny4xMy4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wMC4wMCNOb2lzZSBwb2xsdXRpb24jNzcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTYuMDEuMDAjTm9pc2UgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wMi4wMCNOb2lzZSBwb2xsdXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wMy4wMCNOb2lzZSBwb2xsdXRpb24gbW9uaXRvcmluZyBzZXJ2aWNlcyM3Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wNC4wMCNOb2lzZSBwb2xsdXRpb24gYWR2aXNvcnkgc2VydmljZXMjNzcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTcuMDAuMDAjVG94aWMgc3Vic3RhbmNlcyBwb2xsdXRpb24jNzcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTcuMDEuMDAjVG94aWMgc3Vic3RhbmNlcyBtb25pdG9yaW5nIHNlcnZpY2VzIzc3LjEzLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE3LjAyLjAwI1RveGljIHN1YnN0YW5jZXMgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjNzcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzguMDAuMDAuMDAuMDAjVHJhbnNwb3J0YXRpb24gYW5kIFN0b3JhZ2UgYW5kIE1haWwgU2VydmljZXMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMDAuMDAuMDAjTWFpbCBhbmQgY2FyZ28gdHJhbnNwb3J0Izc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE1LjAwLjAwI0FpciBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTUuMDEuMDAjRG9tZXN0aWMgYWlyIGNhcmdvIHRyYW5wb3NydCM3OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNS4wMi4wMCNJbnRlcm5hdGlvbmFsIGFpciBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTUuMDMuMDAjQXJtb3JlZCBhaXIgdHJhbnNwb3J0Izc4LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE2LjAwLjAwI1JhaWwgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE2LjAxLjAwI0JveGNhciB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTYuMDIuMDAjQnVsayBjYXJnbyByYWlsIHRyYXNucG9ydCBzZXJ2aWNlcyM3OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNi4wMy4wMCNMaXZlc3RvY2sgcmFpbCB0cmFuc3BvcnQjNzguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTYuMDQuMDAjVmVoaWNsZSB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDAuMDAjTWFyaW5lIGNhcmdvIHRyYW5zcG9ydCM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNy4wMS4wMCNEb21lc3RpYyB2ZXNzZWwgdHJhbnNwb3J0IHNlcnZpY2VzIzc4LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE3LjAyLjAwI0ludGVybmF0aW9uYWwgdmVzc2VsIHRyYW5zcG9ydCBzZXJ2aWNlcyM3OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNy4wMy4wMCNEb21lc3RpYyBiYXJnZSB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDQuMDAjSW50ZXJuYXRpb25hbCBiYXJnZSB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDUuMDAjQXJtb3JlZCBtYXJpbmUgdHJhbnNwb3J0Izc4LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE4LjAwLjAwI1JvYWQgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE4LjAxLjAwI0xvY2FsIGFyZWEgdHJ1Y2tpbmcgc2VydmljZXMjNzguMTAuMTguMDAuMDAKLXVuc3BzYzcjNzguMTAuMTguMDIuMDAjUmVnaW9uYWwgb3IgbmF0aW9uYWwgdHJ1Y2tpbmcgc2VydmljZXMjNzguMTAuMTguMDAuMDAKLXVuc3BzYzcjNzguMTAuMTguMDMuMDAjVmVoaWNsZSBjYXJyaWVyIHNlcnZpY2VzIzc4LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE4LjA0LjAwI1JlbG9jYXRpb24gc2VydmljZXMjNzguMTAuMTguMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDAuMDAjSW50ZXJtb2RhbCBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDEuMDAjQWlyIHRvIG9jZWFuIHRyYW5zcG9ydGF0aW9uIzc4LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE5LjAyLjAwI09jZWFuIHRvIHJhaWwgdHJhbnNwb3J0YXRpb24jNzguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDMuMDAjT2NlYW4gdG8gdHJ1Y2sgdHJhbnNwb3J0YXRpb24jNzguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDQuMDAjQWlyIHRvIHRydWNrIHRyYW5zcG9ydCM3OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOS4wNS4wMCNSYWlsIHRydWNrIHRyYW5zcG9ydGF0aW9uIzc4LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc4LjEwLjIwLjAwLjAwI1NwYWNlY3JhZnQgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIwLjAxLjAwI1NhdGVsbGl0ZSBsYXVuY2ggc2VydmljZXMjNzguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjAuMDIuMDAjRXhwZXJpbWVudGFsIHBheWxvYWQgc2VydmljZXMjNzguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjEuMDAuMDAjUGlwZWxpbmUgc2VydmljZXMjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjEuMDEuMDAjUGV0cm9sZXVtIHByb2R1Y3RzIHRyYW5zcG9ydCM3OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMS4wMi4wMCNXYXRlciB0cmFuc3BvcnQjNzguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDAuMDAjUG9zdGFsIGFuZCBzbWFsbCBwYXJjZWwgYW5kIGNvdXJpZXIgc2VydmljZXMjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDEuMDAjTmF0aW9uYWwgcG9zdGFsIGRlbGl2ZXJ5IHNlcnZpY2VzIzc4LjEwLjIyLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjAyLjAwI1Bvc3Qgb2ZmaWNlIGJveCBzZXJ2aWNlcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wMy4wMCNNYWlsaW5nIG9yIG1haWwgcGljayB1cCBvciBkZWxpdmVyeSBzZXJ2aWNlcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wNC4wMCNMZXR0ZXIgb3Igc21hbGwgcGFyY2VsIHdvcmxkd2lkZSBkZWxpdmVyeSBzZXJ2aWNlcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wNS4wMCNMZXR0ZXIgb3Igc21hbGwgcGFyY2VsIGxvY2FsIGRlbGl2ZXJ5IHNlcnZpY2VzIzc4LjEwLjIyLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjA2LjAwI0JpY3ljbGUgb3Igc2Nvb3RlciBtZXNzZW5nZXIgc2VydmNpZXMjNzguMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzguMTEuMDAuMDAuMDAjUGFzc2VuZ2VyIHRyYW5zcG9ydCM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNS4wMC4wMCNBaXIgdHJhbnNwb3J0YXRpb24jNzguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTUuMDEuMDAjSGVsaWNvcHRlciBzZXJ2aWNlcyM3OC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNS4wMi4wMCNDb21tZXJjaWFsIGFpcnBsYW5lIHRyYXZlbCM3OC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNS4wMy4wMCNDaGFydGVyZWQgYWlycGxhbmUgdHJhdmVsIzc4LjExLjE1LjAwLjAwCi11bnNwc2M3Izc4LjExLjE2LjAwLjAwI1JhaWx3YXkgdHJhbnNwb3J0YXRpb24jNzguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTYuMDEuMDAjTGlnaHQgcmFpbCB2ZWhpY2xlIHRyYW5zcG9ydCAoTFJWKSBzZXJ2aWNlcyM3OC4xMS4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNi4wMi4wMCNTdWJ3YXkgdHJhbnNwb3J0Izc4LjExLjE2LjAwLjAwCi11bnNwc2M3Izc4LjExLjE2LjAzLjAwI0NvbnRpbmVudGFsIG9yIGludGVyIGNvbnRpbmVudGFsIHJhaWwgc2VydmljZXMjNzguMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTcuMDAuMDAjTWFyaW5lIHRyYW5zcG9ydGF0aW9uIzc4LjExLjAwLjAwLjAwCi11bnNwc2M3Izc4LjExLjE3LjAxLjAwI1dhdGVyIHRheGlzIzc4LjExLjE3LjAwLjAwCi11bnNwc2M3Izc4LjExLjE3LjAyLjAwI092ZXJuaWdodCBzaGlwIGNydWlzZXMjNzguMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTcuMDMuMDAjU2lnaHRzZWVpbmcgYm9hdCBleGN1cnNpb25zIzc4LjExLjE3LjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjAwLjAwI1JvYWQgdHJhbnNwb3J0YXRpb24jNzguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDEuMDAjQ2FyIHJlbnRhbCBzZXJ2aWNlcyM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wMi4wMCNTY2hlZHVsZWQgYnVzIHNlcnZpY2VzIzc4LjExLjE4LjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjAzLjAwI0NoYXJ0ZXJlZCBidXMgc2VydmljZXMjNzguMTEuMTguMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDQuMDAjVGF4aWNhYiBzZXJ2aWNlcyM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wNS4wMCNUcmFuc3BvcnRhdGlvbiBtYWludGVuYW5jZSM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wNi4wMCNWZWhpY2xlIHJlbnRhbCBvciBsZWFzaW5nIzc4LjExLjE4LjAwLjAwCi11bnNwc2M3Izc4LjExLjE5LjAwLjAwI1NwYWNlIHRyYW5zcG9ydGF0aW9uIzc4LjExLjAwLjAwLjAwCi11bnNwc2M3Izc4LjExLjE5LjAxLjAwI0V4cGVyaW1lbnRhbCBvciBlZHVjYXRpb25hbCBtaXNzaW9ucyM3OC4xMS4xOS4wMC4wMAotdW5zcHNjNyM3OC4xMi4wMC4wMC4wMCNNYXRlcmlhbCBwYWNraW5nIGFuZCBoYW5kbGluZyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNS4wMC4wMCNQYWNraW5nIzc4LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEyLjE1LjAxLjAwI0NvbnRhaW5lcml6YXRpb24gb2YgZ29vZHMjNzguMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTIuMTUuMDIuMDAjQ3JhdGluZyBzZXJ2aWNlcyM3OC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNi4wMC4wMCNNYXRlcmlhbCBoYW5kbGluZyBzZXJ2aWNlcyM3OC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNi4wMS4wMCNGcmVpZ2h0IGxvYWRpbmcgb3IgdW5sb2FkaW5nIzc4LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEyLjE2LjAyLjAwI1dlaWdoaW5nIHNlcnZpY2VzIzc4LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEzLjAwLjAwLjAwI1N0b3JhZ2UjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTUuMDAuMDAjRmFybSBwcm9kdWN0cyB3YXJlaG91c2luZyM3OC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNS4wMS4wMCNTaWxvIHNlcnZpY2VzIzc4LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE1LjAyLjAwI0dyYWluIGVsZXZhdG9yIHNlcnZpY2VzIzc4LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE2LjAwLjAwI0dlbmVyYWwgZ29vZHMgc3RvcmFnZSM3OC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNi4wMS4wMCNQYWxsZXRpemVkIGNhcmdvIHN0b3JhZ2UjNzguMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTYuMDIuMDAjRmlsZSBhcmNoaXZlIHN0b3JhZ2UjNzguMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTcuMDAuMDAjQnVsayBzdG9yYWdlIzc4LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEzLjE3LjAxLjAwI0luIGdyb3VuZCBzdG9yYWdlIHNlcnZpY2VzIzc4LjEzLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjAwLjAwI1NwZWNpYWxpemVkIHdhcmVob3VzaW5nIGFuZCBzdG9yYWdlIzc4LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjAxLjAwI1JlZnJpZ2VyYXRlZCBzdG9yYWdlIzc4LjEzLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjAyLjAwI0N1c3RvbXMgYm9uZGVkIHN0b3JhZ2Ugc2VydmljZXMjNzguMTMuMTguMDAuMDAKLXVuc3BzYzcjNzguMTMuMTguMDMuMDAjSGF6YXJkb3VzIG1hdGVyaWFscyBzdG9yYWdlIzc4LjEzLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjA0LjAwI0RvY3VtZW50IHN0b3JhZ2Ugc2VydmljZXMjNzguMTMuMTguMDAuMDAKLXVuc3BzYzcjNzguMTQuMDAuMDAuMDAjVHJhbnNwb3J0IG9wZXJhdGlvbnMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTUuMDAuMDAjVHJhbnNwb3J0IGFycmFuZ2VtZW50cyM3OC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNS4wMS4wMCNGcmVpZ2h0IGZvcndhcmRlcnMgc2VydmljZXMjNzguMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTUuMDIuMDAjQ3VzdG9tcyBicm9rZXJhZ2Ugc2VydmljZXMjNzguMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTUuMDMuMDAjVHJhbnNwb3J0YXRpb24gaW5kdXN0cnkgdGFyaWZmIGNvbXBhcmlzb24gb3IgZnJlaWdodCBhdWRpdCBzZXJ2aWNlcyM3OC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNi4wMC4wMCNJbnNwZWN0aW9uIzc4LjE0LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE0LjE2LjAxLjAwI1BhY2tpbmcgaW5zcGVjdGlvbiBzZXJ2aWNlcyM3OC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNi4wMi4wMCNDYXJnbyBzdXJ2ZXkgc2VydmljZXMjNzguMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTYuMDMuMDAjUGVzdCBjb250cm9sIGluc3BlY3Rpb25zIzc4LjE0LjE2LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE3LjAwLjAwI05hdmlnYXRpb25hbCBzZXJ2aWNlcyM3OC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNy4wMS4wMCNUdWdib2F0IHNlcnZpY2VzIzc4LjE0LjE3LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE3LjAyLjAwI0RyYXdicmlkZ2Ugb3BlcmF0aW9ucyM3OC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wMC4wMCNUZXJtaW5hbCBzZXJ2aWNlcyM3OC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wMS4wMCNTdGV2ZWRvcmluZyBzZXJ2aWNlcyM3OC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wMi4wMCNWZXNzZWwgZG9ja2luZyBzZXJ2aWNlcyM3OC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wMy4wMCNWZXNzZWwgc3RvcmVzIHNlcnZpY2VzIzc4LjE0LjE4LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE4LjA0LjAwI1Bhcmtpbmcgc3RydWN0dXJlcyM3OC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xNS4wMC4wMC4wMCNUcmFuc3BvcnQgaW5kdXN0cnkgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgYW5kIHJlcGFpciBzZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNS4wMS4wMC4wMCNQYW5lbCBhbmQgcGFpbnQgc2VydmljZXMjNzguMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTUuMDEuMDEuMDAjUGFuZWxiZWF0aW5nIHNlcnZpY2VzIzc4LjE1LjAxLjAwLjAwCi11bnNwc2M3Izc4LjE1LjAyLjAwLjAwI1RyYW5zcG9ydCBmdWVsbGluZyBhbmQgdmVoaWNsZSBzdG9yYWdlIGFuZCBzdXBwb3J0IHNlcnZpY2VzIzc4LjE1LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE1LjAyLjAxLjAwI0Z1ZWxsaW5nIG9mIHZlaGljbGVzIzc4LjE1LjAyLjAwLjAwCi11bnNwc2M3Izc4LjE1LjAyLjAyLjAwI1RyYW5zcG9ydGF0aW9uIHN0b3JhZ2UjNzguMTUuMDIuMDAuMDAKLXVuc3BzYzcjNzguMTYuMDAuMDAuMDAjUGFuZWwgYW5kIHBhaW50IHNlcnZpY2VzIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjE3LjAwLjAwLjAwI1BhbmVsYmVhdGluZyBzZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOC4wMC4wMC4wMCNUcmFuc3BvcnRhdGlvbiBvciB2ZWhpY2xlIHJlcGFpciBzZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOC4wMS4wMC4wMCNWZWhpY2xlIHJlcGFpciBzZXJ2aWNlcyM3OC4xOC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOC4wMS4wMS4wMCNWZWhpY2xlIGJvZHkgcmVwYWlyIG9yIHBhaW50aW5nIHNlcnZpY2VzIzc4LjE4LjAxLjAwLjAwCi11bnNwc2M3Izc4LjE4LjAxLjAyLjAwI1RyYW5zbWlzc2lvbiByZXBhaXIjNzguMTguMDEuMDAuMDAKLXVuc3BzYzcjNzguMTkuMDAuMDAuMDAjVmVoaWNsZSByZXBhaXIgc2VydmljZXMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTkuMTEuMDAuMDAjVmVoaWNsZSBib2R5IHJlcGFpciBvciBwYWludGluZyBzZXJ2aWNlcyM3OC4xOS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOS4xMi4wMC4wMCNUcmFuc21pc3Npb24gcmVwYWlyIzc4LjE5LjAwLjAwLjAwCi11bnNwc2M3IzgwLjAwLjAwLjAwLjAwI01hbmFnZW1lbnQgYW5kIEJ1c2luZXNzIFByb2Zlc3Npb25hbHMgYW5kIEFkbWluaXN0cmF0aXZlIFNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEwLjAwLjAwLjAwI01hbmFnZW1lbnQgYWR2aXNvcnkgc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDAuMDAjQnVzaW5lc3MgYW5kIGNvcnBvcmF0ZSBtYW5hZ2VtZW50IzgwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjAxLjAwI05ldyBidXNpbmVzcyBzdGFydCB1cCBjb25zdWx0YXRpb24gc2VydmljZXMjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDIuMDAjQ29ycG9yYXRlIG1lcmdlcnMgY29uc3VsdGF0aW9uIHNlcnZpY2VzIzgwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjAzLjAwI0NvcnBvcmF0ZSBkaXZlc3RpdHVyZSBjb25zdWx0YXRpb24gc2VydmljZXMjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDQuMDAjU3RyYXRlZ2ljIHBsYW5uaW5nIGNvbnN1bHRhdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wNS4wMCNDb3Jwb3JhdGUgb2JqZWN0aXZlcyBvciBwb2xpY3kgZGV2ZWxvcG1lbnQjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDYuMDAjT3JnYW5pemF0aW9uYWwgc3RydWN0dXJlIGNvbnN1bHRhdGlvbiM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wNy4wMCNJbmZvcm1hdGlvbiB0ZWNobm9sb2d5IGNvbnN1bHRhdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wMC4wMCNQcm9qZWN0IG1hbmFnZW1lbnQjODAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTYuMDEuMDAjRmVhc2liaWxpdHkgc3R1ZGllcyBvciBzY3JlZW5pbmcgb2YgcHJvamVjdCBpZGVhcyM4MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wMi4wMCNSZWdpb25hbCBvciBsb2NhdGlvbiBzdHVkaWVzIGZvciBwcm9qZWN0cyM4MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wMy4wMCNFY29ub21pYyBvciBmaW5hbmNpYWwgZXZhbHVhdGlvbiBvZiBwcm9qZWN0cyM4MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wNC4wMCNQcm9qZWN0IGFkbWluaXN0cmF0aW9uIG9yIHBsYW5uaW5nIzgwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE3LjAwLjAwI0luZHVzdHJpYWwgbWFuYWdlbWVudCM4MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wMS4wMCNGYWN0b3J5IG1hbmFnZW1lbnQgc2VydmljZXMjODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDIuMDAjUHJvZHVjdGl2aXR5IG9yIGVmZmljaWVuY3kgc3R1ZGllcyBvciBpbXBsZW1lbnRhdGlvbiM4MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wMy4wMCNTcGVjaWZpY2F0aW9uIHN0YW5kYXJkaXphdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wNC4wMCNTdXBwbHkgY2hhaW4gYW5hbHlzaXMgb3IgcmUgZW5naW5lZXJpbmcgc2VydmljZXMjODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDUuMDAjQ28gb3BlcmF0aXZlIG9yIGNvbnNvcnRpdW0gc2VydmljZXMjODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDYuMDAjUHJvZmVzc2lvbmFsIHByb2N1cmVtZW50IHNlcnZpY2VzIzgwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgwLjExLjAwLjAwLjAwI0h1bWFuIHJlc291cmNlcyBzZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wMC4wMCNIdW1hbiByZXNvdXJjZSBkZXZlbG9wbWVudCM4MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wMS4wMCNNYW5hZ2VtZW50IGRldmVsb3BtZW50IzgwLjExLjE1LjAwLjAwCi11bnNwc2M3IzgwLjExLjE1LjAyLjAwI0NvbXBlbnNhdGlvbiBvciBiZW5lZml0cyBwbGFubmluZyM4MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wMy4wMCNMYWJvciBvciB1bmlvbiByZWxhdGlvbnMjODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDQuMDAjTGFib3IgdHJhaW5pbmcgb3IgZGV2ZWxvcG1lbnQjODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDUuMDAjSHVtYW4gcmVzb3VyY2VzIHByb2R1Y3Rpdml0eSBhdWRpdHMjODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDYuMDAjUGVyc29ubmVsIHJlbG9jYXRpb24jODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDAuMDAjVGVtcG9yYXJ5IHBlcnNvbm5lbCBzZXJ2aWNlcyM4MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wMS4wMCNUZW1wb3JhcnkgY2xlcmljYWwgb3IgYWRtaW5zdHJhdGl2ZSBhc3Npc3RhbmNlIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjAyLjAwI1RlbXBvcmFyeSBtYXJrZXRpbmcgc3RhZmYgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDMuMDAjVGVtcG9yYXJ5IHByb2R1Y3Rpb24gc3RhZmZpbmcgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDQuMDAjVGVtcG9yYXJ5IHRlY2huaWNpYW4gc3RhZmZpbmcgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDUuMDAjVGVtcG9yYXJ5IGZpbmFuY2lhbCBzdGFmZmluZyBuZWVkcyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wNi4wMCNUZW1wb3JhcnkgbWVkaWNhbCBzdGFmZmluZyBuZWVkcyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wNy4wMCNUZW1wb3JhcnkgbGVnYWwgc3RhZmZpbmcgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDguMDAjVGVtcG9yYXJ5IGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgc29mdHdhcmUgZGV2ZWxvcGVycyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wOS4wMCNUZW1wb3JhcnkgaW5mb3JtYXRpb24gdGVjaG5vbG9neSBzeXN0ZW1zIG9yIGRhdGFiYXNlIGFkbWluaXN0cmF0b3JzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjEwLjAwI1RlbXBvcmFyeSBpbmZvcm1hdGlvbiB0ZWNobm9sb2d5IG5ldHdvcmtpbmcgc3BlY2lhbGlzdHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMTEuMDAjVGVtcG9yYXJ5IHdhcmVob3VzZSBzdGFmZiM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4xMi4wMCNUZW1wb3JhcnkgZHJpdmVycyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4xMy4wMCNUZW1wb3JhcnkgbWFudWFsIGxhYm9yIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjE0LjAwI1RlbXBvcmFyeSBwcm9mZXNzaW9uYWwgc3RhZmYjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMTUuMDAjVGVtcG9yYXJ5IG1hY2hpbmlzdCBwZXJzb25uZWwjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTcuMDAuMDAjUGVyc29ubmVsIHJlY3J1aXRtZW50IzgwLjExLjAwLjAwLjAwCi11bnNwc2M3IzgwLjExLjE3LjAxLjAwI1N0YWZmIHJlY3J1aXRpbmcgc2VydmljZXMjODAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTcuMDIuMDAjUmVmZXJlbmNlIG9yIGJhY2tncm91bmQgY2hlY2sgc2VydmljZXMjODAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTcuMDMuMDAjUmVzdW1lIG9yIGN1cnJpY3VsdW0gdml0YWUgc2NyZWVuaW5nIHNlcnZpY2VzIzgwLjExLjE3LjAwLjAwCi11bnNwc2M3IzgwLjExLjE4LjAwLjAwI0luZm9ybWF0aW9uIHRlY2hub2xvZ3kgY29udHJhY3RvcnMjODAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTguMDEuMDAjVGVtcG9yYXJ5IGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgY29udHJhY3RvcnMjODAuMTEuMTguMDAuMDAKLXVuc3BzYzcjODAuMTIuMDAuMDAuMDAjTGVnYWwgc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTUuMDAuMDAjQ3JpbWluYWwgbGF3IHNlcnZpY2VzIzgwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEyLjE1LjAxLjAwI0p1dmVuaWxlIGp1c3RpY2UgbGF3IHNlcnZpY2VzIzgwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE1LjAyLjAwI0FwcGVsbGF0ZSBwcm9jZWR1cmUgc2VydmljZXMjODAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTUuMDMuMDAjRGVmZW5zZSBvciBjcmltaW5hbCBsYXcgc2VydmljZXMjODAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDAuMDAjQnVzaW5lc3MgbGF3IHNlcnZpY2VzIzgwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjAxLjAwI0dvdmVybm1lbnQgYW50aXRydXN0IG9yIHJlZ3VsYXRpb25zIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wMi4wMCNCYW5rcnVwdGN5IGxhdyBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wMy4wMCNQYXJ0bmVyc2hpcCBsYXcjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDQuMDAjUGF0ZW50IG9yIHRyYWRlbWFyayBvciBjb3B5cmlnaHQgbGF3IzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjA1LjAwI0xpcXVpZGF0aW9uIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wNi4wMCNSZWFsIGVzdGF0ZSBsYXcjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDcuMDAjVGF4YXRpb24gbGF3IzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjA4LjAwI01lcmdlcnMgb3IgYWNxdWlzaXRpb25zIGxhdyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wOS4wMCNMZWdhbCByZXNlYXJjaCBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4xMC4wMCNEZWJ0IGNvbGxlY3Rpb24gbGF3IHNlcnZpY2VzIzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE3LjAwLjAwI0NpdmlsIGxpYWJpbGl0eSBzZXJ2aWNlcyM4MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNy4wMS4wMCNNYWxwcmFjdGljZSBvciBuZWdsaWdlbmNlIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNy4wMi4wMCNQZXJzb25hbCBpbmp1cnkgbGF3IHNlcnZpY2VzIzgwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE3LjAzLjAwI1Byb3BlcnR5IGxhdyBzZXJ2aWNlcyM4MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNy4wNC4wMCNDb250cmFjdCBsYXcgc2VydmljZXMjODAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTguMDAuMDAjRmFtaWx5IGxhdyBzZXJ2aWNlcyM4MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xOC4wMS4wMCNEaXZvcmNlIGxhdyBzZXJ2aWNlcyM4MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xOC4wMi4wMCNBZG9wdGlvbiBsYXcgc2VydmljZXMjODAuMTIuMTguMDAuMDAKLXVuc3BzYzcjODAuMTIuMTguMDMuMDAjSW1taWdyYXRpb24gb3IgbmF0dXJhbGl6YXRpb24gbGF3IzgwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE4LjA0LjAwI0d1YXJkaWFuc2hpcCBvciBjdXN0b2R5IGxhdyBzZXJ2aWNlcyM4MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMy4wMC4wMC4wMCNSZWFsIGVzdGF0ZSBzZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNS4wMC4wMCNMZWFzZSBhbmQgcmVudGFsIG9mIHByb3BlcnR5IG9yIGJ1aWxkaW5nIzgwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEzLjE1LjAxLjAwI1Jlc2lkZW50aWFsIHJlbnRhbCM4MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNS4wMi4wMCNDb21tZXJjaWFsIG9yIGluZHVzdHJpYWwgZmFjaWxpdHkgcmVudGFsIzgwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE1LjAzLjAwI0xhbmQgbGVhc2VzIzgwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjAwLjAwI1NhbGUgb2YgcHJvcGVydHkgYW5kIGJ1aWxkaW5nIzgwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjAxLjAwI1JlYWwgZXN0YXRlIGJyb2tlcnMgb3IgYWdlbnRzIzgwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjAyLjAwI1JlYWwgZXN0YXRlIGF1Y3Rpb24jODAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTYuMDMuMDAjU2FsZSBvZiByZXNpZGVudGlhbCBsYW5kIzgwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjA0LjAwI1NhbGUgb2YgY29tbWVyY2lhbCBvciBpbmR1c3RyaWFsIGxhbmQjODAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTYuMDUuMDAjU2FsZSBvZiBjb21tZXJjaWFsIGJ1aWxkaW5nIzgwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE3LjAwLjAwI0VzY3JvdyBhbmQgdGl0bGUgc2VydmljZXMjODAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTcuMDEuMDAjVGl0bGUgcmVjb252ZXlhbmNlIHNlcnZpY2VzIzgwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE3LjAyLjAwI1RpdGxlIHNlYXJjaCBzZXJ2aWNlcyM4MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNy4wMy4wMCNFc2Nyb3cgYWNjb3VudCBzZXJ2aWNlcyM4MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMy4xOC4wMC4wMCNSZWFsIGVzdGF0ZSBtYW5hZ2VtZW50IHNlcnZpY2VzIzgwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEzLjE4LjAxLjAwI1Byb3BlcnR5IG1hbmFnZW1lbnQjODAuMTMuMTguMDAuMDAKLXVuc3BzYzcjODAuMTMuMTguMDIuMDAjUmVhbCBlc3RhdGUgYXBwcmFpc2FsIHNlcnZpY2VzIzgwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE4LjAzLjAwI1JlYWwgZXN0YXRlIGxpc3Rpbmcgc2VydmljZXMjODAuMTMuMTguMDAuMDAKLXVuc3BzYzcjODAuMTQuMDAuMDAuMDAjTWFya2V0aW5nIGFuZCBkaXN0cmlidXRpb24jODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDAuMDAjTWFya2V0IHJlc2VhcmNoIzgwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjAxLjAwI01hcmtldGluZyBhbmFseXNpcyM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wMi4wMCNEaXN0cmlidXRpdmUgb3Igc2VydmljZSB0cmFkZSBzdGF0aXN0aWNzIzgwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjAzLjAwI0NvbW1vZGl0eSBwcmljZSBmb3JlY2FzdGluZyM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wNC4wMCNQcmVwYXJhdGlvbiBvZiBjb21tb2RpdHkgbWFya2V0IHN1cnZleXMjODAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDUuMDAjTWFya2V0aW5nIHBsYW5zIzgwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjA2LjAwI0ludGVybmV0IGJhc2VkIG1hcmtldCByZXNlYXJjaCM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wMC4wMCNTYWxlcyBhbmQgYnVzaW5lc3MgcHJvbW90aW9uIGFjdGl2aXRpZXMjODAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDEuMDAjU2FsZXMgcHJvbW90aW9uIHNlcnZpY2VzIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjAyLjAwI1B1YmxpYyByZWxhdGlvbiBzZXJ2aWNlcyM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wMy4wMCNUZWxlbWFya2V0aW5nIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA0LjAwI0JyYW5kaW5nIG9mIHByb2R1Y3QgbmFtaW5nIHNlcnZpY2VzIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA1LjAwI1Byb21vdGlvbmFsIG1lcmNoYW5kaXNlIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA2LjAwI0RpcmVjdCBtYXJrZXRpbmcgZnVsZmlsbG1lbnQjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDcuMDAjRXZlbnRzIG1hbmFnZW1lbnQjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDguMDAjTGV0dGVyIHNob3Agc2VydmljZXMjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDkuMDAjU3BvbnNvcnNoaXAgb2YgZXZlbnQgb3IgY2VsZWJyaXR5IzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjEwLjAwI0Nsb3NlIG91dHMjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDAuMDAjRGlzdHJpYnV0aW9uIzgwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE0LjE3LjAxLjAwI0RpcmVjdCBzYWxlcyBzZXJ2aWNlcyM4MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNy4wMi4wMCNXaG9sZXNhbGUgZGlzdHJpYnV0aW9uIHNlcnZpY2VzIzgwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE3LjAzLjAwI1JldGFpbCBkaXN0cmlidXRpb24gc2VydmljZXMjODAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDQuMDAjRnJhbmNoaXNlIG9wZXJhdGlvbnMjODAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDUuMDAjQXVjdGlvbiBzZXJ2aWNlcyM4MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xNC4xOC4wMC4wMCNNYWlsaW5nIHNlcnZpY2VzIzgwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE0LjE4LjAxLjAwI01haWxpbmcgbGlzdCBjb21waWxhdGlvbiBzZXJ2aWNlcyM4MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MC4xNC4xOC4wMi4wMCNNYWlsaW5nIGxpc3QgbWFuYWdlbWVudCBzZXJ2aWNlIzgwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE4LjAzLjAwI0FkZHJlc3Npbmcgc2VydmljZSM4MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MC4xNS4wMC4wMC4wMCNUcmFkZSBwb2xpY3kgYW5kIHNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjE1LjE1LjAwLjAwI1RyYWRlIGZhY2lsaXRhdGlvbiM4MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wMS4wMCNDb21tb2RpdHkgcG9saWN5IG9yIHByb2plY3Rpb25zIHNlcnZpY2VzIzgwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE1LjAyLjAwI1RyYWRlIGV4cGFuc2lvbiM4MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wMy4wMCNUcmFkZSBpbmZvcm1hdGlvbiBzZXJ2aWNlcyM4MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wNC4wMCNUcmFkZSBwcm9tb3Rpb24gc2VydmljZXMjODAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTUuMDUuMDAjTXVsdGluYXRpb25hbCBtYXJrZXRpbmcgZW50ZXJwcmlzZXMjODAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTYuMDAuMDAjSW50ZXJuYXRpb25hbCB0cmFkZSBzZXJ2aWNlcyM4MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNi4wMS4wMCNFeHBvcnQgZGV2ZWxvcG1lbnQjODAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTYuMDIuMDAjSW1wb3J0IHBsYW5uaW5nIzgwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE2LjAzLjAwI0V4cG9ydCBwcm9qZWN0aW9ucyM4MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNi4wNC4wMCNJbXBvcnQgcHJvY3VyZW1lbnQgc2VydmljZXMjODAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTYuMDAuMDAuMDAjQnVzaW5lc3MgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDAuMDAjTWFuYWdlbWVudCBzdXBwb3J0IHNlcnZpY2VzIzgwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjAxLjAwI09mZmljZSBhZG1pbmlzdHJhdGlvbiBvciBzZWNyZXRhcmlhbCBzZXJ2aWNlcyM4MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wMi4wMCNNZWV0aW5nIHBsYW5uaW5nIHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjAzLjAwI0tleWJvYXJkIGVudHJ5IHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjA0LjAwI0NsZXJpY2FsIHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjA1LjAwI0ZsZWV0IG1hbmFnZW1lbnQgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDYuMDAjRGF0YSBhcmNoaXZpbmcgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDcuMDAjQXVkaW8gdmlzdWFsIHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE2LjAwLjAwI0J1c2luZXNzIGZhY2lsaXRpZXMgb3ZlcnNpZ2h0IzgwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE2LjE2LjAxLjAwI1Byb3BlcnR5IG1hbmFnbWVudCBzZXJ2aWNlcyM4MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM4MS4wMC4wMC4wMC4wMCNFbmdpbmVlcmluZyBhbmQgUmVzZWFyY2ggYW5kIFRlY2hub2xvZ3kgQmFzZWQgU2VydmljZXMjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMDAuMDAuMDAjUHJvZmVzc2lvbmFsIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjAwLjAwI0NpdmlsIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjAxLjAwI1dlbGwgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDIuMDAjVGVjaG5pY2FsIGRyYXdpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDMuMDAjSGFyYm9yIG9yIHdhdGVyIHBvcnRzIGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjA1LjAwI1N0cnVjdHVyYWwgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDYuMDAjTmF2YWwgYXJjaGl0ZWN0dXJlIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjA3LjAwI0RhbSBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wOC4wMCNBcmNoaXRlY3R1cmFsIGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjA5LjAwI0FpcnBvcnQgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMTAuMDAjSGlnaHdheSBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4xMS4wMCNSYWlsd2F5IGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE2LjAwLjAwI01lY2hhbmljYWwgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTYuMDEuMDAjTWVjaGFuaWNhbCBkcmF3aW5nIzgxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE2LjAyLjAwI01lY2hhbmljYWwgcHJvZHVjdCBlbmNsb3N1cmVzIGRlc2lnbiM4MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNi4wMy4wMCNNYWNoaW5lIHRvb2wgZGVzaWduIzgxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE2LjA0LjAwI1Bvd2VyIHRyYW5zbWlzc2lvbiBkZXNpZ24jODEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTcuMDAuMDAjRWxlY3RyaWNhbCBhbmQgZWxlY3Ryb25pYyBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNy4wMS4wMCNFbGVjdHJpY2FsIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzgxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE3LjAyLjAwI0VsZWN0cm9uaWMgY2lyY3VpdCBkZXNpZ24jODEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTguMDAuMDAjQ2hlbWljYWwgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTguMDEuMDAjUGxhc3RpY3MgZW5naW5lZXJpbmcjODEuMTAuMTguMDAuMDAKLXVuc3BzYzcjODEuMTAuMTkuMDAuMDAjT2lsIGFuZCBnYXMgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTkuMDEuMDAjRHJpbGxpbmcgZW5naW5lZXJpbmcgZm9yIG9pbCBvciBnYXMjODEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTkuMDIuMDAjUHJvZHVjdGlvbiBlbmdpbmVlcmluZyBmb3Igb2lsIG9yIGdhcyM4MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xOS4wMy4wMCNSZXNlcnZvaXIgZW5naW5lZXJpbmcgZm9yIG9pbCBvciBnYXMjODEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjAuMDAuMDAjTWluaW5nIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIwLjAxLjAwI0h5ZHJhdWxpYyBtaW5pbmcjODEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjEuMDAuMDAjT2NlYW4gZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjEuMDEuMDAjQ29hc3RhbCBlbmdpbmVlcmluZyM4MS4xMC4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMi4wMC4wMCNUcmFuc3BvcnRhdGlvbiBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMi4wMS4wMCNUcmFmZmljIGVuZ2luZWVyaW5nIzgxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIyLjAyLjAwI1VyYmFuIHRyYW5zcG9ydCBuZXR3b3JrIzgxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIyLjAzLjAwI0lubGFuZCB3YXRlcndheXMjODEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjMuMDAuMDAjQWVyb25hdXRpY2FsIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIzLjAxLjAwI0F2aW9uaWNzIGRlc2lnbiM4MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM4MS4xMC4yNC4wMC4wMCNBdmlvbmljcyBkZXNpZ24jODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMDAuMDAuMDAjQ29tcHV0ZXIgc2VydmljZXMjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDAuMDAjU29mdHdhcmUgb3IgaGFyZHdhcmUgZW5naW5lZXJpbmcjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDEuMDAjTWFpbmZyYW1lIHNvZnR3YXJlIGFwcGxpY2F0aW9ucyBkZXNpZ24jODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDIuMDAjUGVyc29uYWwgY29tcHV0ZXIgKFBDKSBhcHBsaWNhdGlvbiBkZXNpZ24jODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDMuMDAjU3lzdGVtcyBpbnRlZ3JhdGlvbiBkZXNpZ24jODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDQuMDAjQXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDUuMDAjT3BlcmF0aW5nIHN5c3RlbSBwcm9ncmFtbWluZyBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wNi4wMCNDbGllbnQgb3Igc2VydmVyIHByb2dyYW1taW5nIHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjA3LjAwI0VSUCBvciBkYXRhYmFzZSBhcHBsaWNhdGlvbnMgcHJvZ3JhbW1pbmcgc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDguMDAjQXBwbGljYXRpb24gaW1wbGVtZW50YXRpb24gc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDkuMDAjSW50ZXJuZXQgb3IgaW50cmFuZXQgY2xpZW50IGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjEwLjAwI0ludGVybmV0IG9yIGludHJhbmV0IHNlcnZlciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4xMS4wMCNIdW1hbiByZXNvdXJjZXMgcHJvZHVjdGl2aXR5IGF1ZGl0cyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wMC4wMCNDb21wdXRlciBwcm9ncmFtbWVycyM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wMS4wMCNQcm9ncmFtbWluZyBmb3IgVmlzdWFsIEJhc2ljIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjAyLjAwI1Byb2dyYW1taW5nIGZvciBKYXZhIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjAzLjAwI1Byb2dyYW1taW5nIGZvciBIVE1MIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA0LjAwI1Byb2dyYW1taW5nIGZvciBBTEdPTCM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wNS4wMCNQcm9ncmFtbWluZyBmb3IgQXNzZW1ibGVyIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA2LjAwI1Byb2dyYW1taW5nIGZvciBCYXNpYyM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wNy4wMCNQcm9ncmFtbWluZyBmb3IgQyBvciBDKysjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDguMDAjUHJvZ3JhbW1pbmcgZm9yIENPQk9MIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA5LjAwI1Byb2dyYW1taW5nIGZvciBGT1JUUkFOIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjEwLjAwI1Byb2dyYW1taW5nIGZvciBQYXNjYWwjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMTEuMDAjUHJvZ3JhbW1pbmcgZm9yIFBMLzEjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMTIuMDAjUHJvZ3JhbW1pbmcgb3IgUHJvcHJpZXRhcnkgTGFuZ3VhZ2VzIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE3LjAwLjAwI01hbmFnZW1lbnQgaW5mb3JtYXRpb24gc3lzdGVtcyAoTUlTKSM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wMS4wMCNXaWRlIGFyZWEgbmV0d29yayBjb21tdW5pY2F0aW9ucyBkZXNpZ24jODEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTcuMDIuMDAjTG9jYWwgYXJlYSBuZXR3b3JrIGNvbW11bmljYXRpb25zIGRlc2lnbiM4MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wMy4wMCNFbGVjdHJvbmljIGRhdGEgaW50ZXJjaGFuZ2UgKEVESSkgZGVzaWduIzgxLjExLjE3LjAwLjAwCi11bnNwc2M3IzgxLjExLjE3LjA0LjAwI0RhdGFiYXNlIGRlc2lnbiM4MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wNS4wMCNTeXN0ZW1zIGFyY2hpdGVjdHVyZSM4MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wMC4wMCNTeXN0ZW0gYWRtaW5pc3RyYXRvcnMjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDEuMDAjQ29tcHV0ZXIgb3IgbmV0d29yayBvciBpbnRlcm5ldCBzZWN1cml0eSM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wMi4wMCNNYWluZnJhbWUgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDMuMDAjTG9jYWwgYXJlYSBuZXR3b3JrIChMQU4pIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDQuMDAjV2lkZSBhcmVhIG5ldHdvcmsgKFdBTikgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wNS4wMCNQcm9wcmlldGFyeSBvciBsaWNlbnNlZCBzeXN0ZW1zIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDYuMDAjRGF0YWJhc2UgYW5hbHlzaXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDcuMDAjRGF0YSBzdG9yYWdlIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjA4LjAwI1N5c3RlbXMgYW5hbHlzaXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDkuMDAjU3lzdGVtIGluc3RhbGxhdGlvbiM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xMC4wMCNTb2Z0d2FyZSBjb2RpbmcjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTEuMDAjVGVjaG5pY2FsIHN1cHBvcnQgb3IgaGVscCBkZXNrIHNlcnZpY2VzIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjEyLjAwI0NvbXB1dGVyIGhhcmR3YXJlIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTMuMDAjQ29tcHV0ZXIgc29mdHdhcmUgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xNC4wMCNDbyBsb2NhdGlvbiBzZXJ2aWNlIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjE1LjAwI1ByaW50ZXIgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgc2VydmljZXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTYuMDAjTWFpbmZyYW1lIGNvbXB1dGVyIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTcuMDAjVGVsZWNvbSBlcXVpcG1lbnQgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOS4wMC4wMCNJbmZvcm1hdGlvbiByZXRyaWV2YWwgc3lzdGVtcyM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOS4wMS4wMCNEYXRhYmFzZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwjODEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTkuMDIuMDAjT24gbGluZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwjODEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTkuMDMuMDAjUmVtb3RlIGRhdGFiYXNlIGluZm9ybWF0aW9uIHJldHJpZXZhbCM4MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wMC4wMCNEYXRhIHNlcnZpY2VzIzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjAxLjAwI09uIGxpbmUgZGF0YSBwcm9jZXNzaW5nIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjAyLjAwI0RhdGEgcHJvY2Vzc2luZyBvciBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wMy4wMCNEYXRhIGNlbnRlciBzZXJ2aWNlcyM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wNC4wMCNEaXNhc3RlciByZWNvdmVyeSBzZXJ2aWNlcyM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wNS4wMCNEb2N1bWVudCBzY2FubmluZyBzZXJ2aWNlIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjA2LjAwI0RhdGEgc3RvcmFnZSBzZXJ2aWNlIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjA3LjAwI0NvbnRlbnQgb3IgZGF0YSBzdGFuZGFyZGl6YXRpb24gc2VydmljZXMjODEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDAuMDAjSW50ZXJuZXQgc2VydmljZXMjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDEuMDAjSW50ZXJuZXQgc2VydmljZSBwcm92aWRlcnMgKElTUCkjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDIuMDAjRWxlY3Ryb25pYyBtYWlsIHNlcnZpY2UgcHJvdmlkZXIjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDMuMDAjV29ybGQgd2lkZSB3ZWIgKFdXVykgc2l0ZSBkZXNpZ24gc2VydmljZXMjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDQuMDAjV2ViIHNlYXJjaCBlbmdpbmUgcHJvdmlkZXJzIzgxLjExLjIxLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjA1LjAwI1dvcmxkIHdpZGUgd2ViIChXV1cpIHNpdGUgb3BlcmF0aW9uIChob3N0KSBzZXJ2aWNlcyM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wNi4wMCNBcHBsaWNhdGlvbiBzZXJ2aWNlIHByb3ZpZGVycyM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wNy4wMCNJbnRlcm5ldCBkb21haW4gbmFtZXMjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjIuMDAuMDAjU29mdHdhcmUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjIuMDEuMDAjTWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgZmVlcyM4MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMi4wMi4wMCNTb2Z0d2FyZSBwYXRjaGVzIG9yIHVwZ3JhZGVzIzgxLjExLjIyLjAwLjAwCi11bnNwc2M3IzgxLjEyLjAwLjAwLjAwI0Vjb25vbWljcyM4MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wMC4wMCNFY29ub21pYyBhbmFseXNpcyM4MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wMS4wMCNNYWNybyBlY29ub21pYyBhbmFseXNpcyM4MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wMi4wMCNNaWNybyBlY29ub21pYyBhbmFseXNpcyM4MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wMy4wMCNFY29ub21ldHJpY3MjODEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTUuMDQuMDAjRWNvbm9taWMgZm9yZWNhc3RzIzgxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjAwLjAwI01vbmV0YXJ5IHN5c3RlbXMgYW5kIGlzc3VlcyM4MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wMS4wMCNNb25ldGFyeSBwb2xpY3kjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDIuMDAjTW9uZXRhcnkgc3lzdGVtcyM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wMy4wMCNNb25ldGFyeSBhbmFseXNpcyM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wNC4wMCNNb25ldGFyeSBsaXF1aWRpdHkjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDUuMDAjUHJlY2lvdXMgbWV0YWxzIHJlc2VydmVzIzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjA2LjAwI0ZvcmVpZ24gZXhjaGFuZ2UgY29udHJvbCM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wNy4wMCNDdXJyZW5jeSBleGNoYW5nZSBtYXJrZXRzIzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEzLjAwLjAwLjAwI1N0YXRpc3RpY3MjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTMuMTUuMDAuMDAjTWV0aG9kb2xvZ3kgYW5kIGFuYWx5c2lzIzgxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEzLjE1LjAxLjAwI0ZhY3RvciBhbmFseXNpcyM4MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMy4xNS4wMi4wMCNNdWx0aXZhcmlhdGUgYW5hbHlzaXMjODEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTMuMTUuMDMuMDAjUmVncmVzc2lvbiBhbmFseXNpcyM4MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMy4xNS4wNC4wMCNTYW1wbGluZyBzdXJ2ZXlzIzgxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEzLjE1LjA1LjAwI1RpbWUgc2VyaWVzIGFuYWx5c2lzIzgxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjAwLjAwLjAwI01hbnVmYWN0dXJpbmcgdGVjaG5vbG9naWVzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjAwLjAwI1F1YWxpdHkgY29udHJvbCM4MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wMS4wMCNNYXRlcmlhbHMgdGVzdGluZyM4MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wMi4wMCNNYXRlcmlhbHMgc3ludGhlc2lzIzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjAzLjAwI01hdGVyaWFscyBpbnNwZWN0aW9uIzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjA0LjAwI0VxdWlwbWVudCB0ZXN0IG9yIGNhbGlicmF0aW9uIzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjA1LjAwI1Byb2R1Y3Rpb24gc3RhbmRhcmRzIGRldmVsb3BtZW50IzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjA2LjAwI1Byb2R1Y3QgdGVzdGluZyM4MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wMC4wMCNTdXBwbHkgY2hhaW4gbWFuYWdlbWVudCM4MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wMS4wMCNMb2dpc3RpY3MjODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDIuMDAjVHJhbnNpdCBhbmFseXNpcyM4MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wMy4wMCNUcmFuc3BvcnQgZmluYW5jZSBvciBlY29ub21pY3MjODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDQuMDAjVHJhbnNwb3J0IGZhY2lsaXRhdGlvbiM4MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wNS4wMCNUcmFuc3BvcnQgaW5mcmFzdHJ1Y3R1cmUjODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDYuMDAjVHJhbnNwb3J0IHBsYW5uaW5nIzgxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE3LjAwLjAwI1Byb2R1Y3Rpb24gcGxhbm5pbmcgYW5kIGNvbnRyb2wjODEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTcuMDEuMDAjUHJvZHVjdGlvbiBwbGFubmluZyM4MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNy4wMi4wMCNQcm9kdWN0aW9uIGNvbnRyb2wjODEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTcuMDMuMDAjUHJvZHVjdGlvbiBzY2hlZHVsaW5nIzgxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE3LjA0LjAwI1Byb2R1Y3Rpb24gc3RhdGlzdGljcyBjb2xsZWN0aW9uIG9yIGFuYWx5c2lzIHNlcnZpY2VzIzgxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjAwLjAwI0ZhY2lsaXRpZXMgbWFuYWdlbWVudCM4MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wMS4wMCNTYWZldHkgb3IgcmlzayBhbmFseXNpcyM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wMi4wMCNJbmR1c3RyaWFsIGh5Z2llbmUgb3IgdmVudGlsYXRpb24jODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDMuMDAjQWNvdXN0aWNzIG9yIG5vaXNlIGNvbnRyb2wjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDQuMDAjRXF1aXBtZW50IGluc3BlY3Rpb24gc2VydmljZSM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wNS4wMCNCdWlsZGluZyBpbnNwZWN0aW9uIHNlcnZpY2UjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDYuMDAjUG93ZXIgbGluZSBpbnNwZWN0aW9uIHNlcnZpY2UjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDcuMDAjUGx1bWJpbmcgb3Igc2V3ZXIgaW5zcGVjdGlvbiBzZXJ2aWNlIzgxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjAwLjAwLjAwI0VhcnRoIHNjaWVuY2Ugc2VydmljZXMjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTUuMDAuMDAjTWV0ZW9yb2xvZ3kjODEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTUuMDEuMDAjQ2xpbWF0b2xvZ3kjODEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTUuMDIuMDAjTWV0ZW9yb2xvZ2ljYWwgc2VydmljZXMjODEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTUuMDMuMDAjSHlkcm9tZXRlb3JvbG9neSM4MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNi4wMC4wMCNDYXJ0b2dyYXBoeSM4MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNi4wMS4wMCNNYXBwaW5nIzgxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE2LjAyLjAwI01hcCBwcm9kdWN0aW9uIzgxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE2LjAzLjAwI1Bob3RvZ3JhbW1ldHJ5IzgxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE2LjA0LjAwI0xhbmQgc3VydmV5aW5nIzgxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE3LjAwLjAwI0dlb2xvZ3kjODEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTcuMDEuMDAjUGhvdG9nZW9sb2d5IzgxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE3LjAyLjAwI1N0cmF0aWdyYXBoaWMgZ2VvbG9neSM4MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNy4wMy4wMCNHZW9sb2dpY2FsIHN1cnZleXMjODEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTcuMDQuMDAjR2VvbG9naWNhbCBleHBsb3JhdGlvbiM4MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNy4wNS4wMCNBcmNoYWVvbG9naWNhbCBzZXJ2aWNlcyM4MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wMC4wMCNPY2Vhbm9ncmFwaHkgYW5kIGh5ZHJvbG9neSM4MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wMS4wMCNPY2Vhbm9ncmFwaGljIHN1cnZleSM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wMi4wMCNFc3R1YXJpbmUgb2NlYW5vZ3JhcGh5IzgxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjAzLjAwI1BoeXNpY2FsIG9jZWFub2dyYXBoeSM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wNC4wMCNIeWRyb2xvZ2ljYWwgc3VydmV5cyM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wNS4wMCNCYXRoeW1ldHJpYyBzdXJ2ZXlzIzgxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjA2LjAwI1VuZGVyd2F0ZXIgZXhwbG9yYXRpb24jODEuMTUuMTguMDAuMDAKLXVuc3BzYzcjODEuMTUuMTkuMDAuMDAjR2VvcGh5c2ljcyM4MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOS4wMS4wMCNHZW9waHlzaWNhbCBzdXJ2ZXlzIzgxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE5LjAyLjAwI0dlb3BoeXNpY2FsIGV4cGxvcmF0aW9uIzgxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE5LjAzLjAwI0dlb3BoeXNpY2FsIHBob3RvIGludGVycHJldGF0aW9uIzgxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE5LjA0LjAwI0Flcm8gbWFnbmV0aWMgZ2VvcGh5c2ljcyM4MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM4Mi4wMC4wMC4wMC4wMCNFZGl0b3JpYWwgYW5kIERlc2lnbiBhbmQgR3JhcGhpYyBhbmQgRmluZSBBcnQgU2VydmljZXMjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMDAuMDAuMDAjQWR2ZXJ0aXNpbmcjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDAuMDAjUHJpbnQgYWR2ZXJ0aXNpbmcjODIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDEuMDAjQmlsbGJvYXJkIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjAyLjAwI1Bvc3RlciBhZHZlcnRpc2luZyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wMy4wMCNNYWdhemluZSBhZHZlcnRpc2luZyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wNC4wMCNOZXdzcGFwZXIgYWR2ZXJ0aXNpbmcjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDUuMDAjSGFuZGJpbGwgb3IgY291cG9uIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjA2LjAwI1RyYW5zaXQgYWR2ZXJ0aXNpbmcgc2VydmljZXMjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDcuMDAjU2hvcHBpbmcgbmV3cyBvciBhZHZlcnRpc2luZyBvciBkaXN0cmlidXRpb24gc2VydmljZSM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wOC4wMCNZZWxsb3cgIHBhZ2VzIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE2LjAwLjAwI0Jyb2FkY2FzdCBhZHZlcnRpc2luZyM4Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNi4wMS4wMCNSYWRpbyBhZHZlcnRpc2luZyM4Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNi4wMi4wMCNUZWxldmlzaW9uIGFkdmVydGlzaW5nIzgyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE2LjAzLjAwI0ludGVybmV0IGFkdmVydGlzaW5nIzgyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE3LjAwLjAwI0FlcmlhbCBhZHZlcnRpc2luZyM4Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNy4wMS4wMCNCYW5uZXIgYWR2ZXJ0aXNpbmcgc2VydmljZXMjODIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTcuMDIuMDAjU2t5d3JpdGluZyBhZHZlcnRpc2luZyBzZXJ2aWNlcyM4Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xOC4wMC4wMCNBZHZlcnRpc2luZyBhZ2VuY3kgc2VydmljZXMjODIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTguMDEuMDAjQWR2ZXJ0aXNpbmcgY2FtcGFpZ24gc2VydmljZXMjODIuMTAuMTguMDAuMDAKLXVuc3BzYzcjODIuMTEuMDAuMDAuMDAjV3JpdGluZyBhbmQgdHJhbnNsYXRpb25zIzgyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE1LjAwLjAwI1RlY2huaWNhbCB3cml0aW5nIzgyLjExLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE1LjAxLjAwI0luc3RydWN0aW9uIHdyaXRpbmcgc2VydmljZXMjODIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTUuMDIuMDAjTWFudWFsIHdyaXRpbmcgc2VydmljZXMjODIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTUuMDMuMDAjQWNhZGVtaWMgb3Igc2NpZW50aWZpYyBhcnRpY2xlIHdyaXRpbmcjODIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTYuMDAuMDAjTm9uIHRlY2huaWNhbCB3cml0aW5nIzgyLjExLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE2LjAxLjAwI0xldHRlciB3cml0aW5nIHNlcnZpY2VzIzgyLjExLjE2LjAwLjAwCi11bnNwc2M3IzgyLjExLjE2LjAyLjAwI1Jlc3VtZSB3cml0aW5nIHNlcnZpY2VzIzgyLjExLjE2LjAwLjAwCi11bnNwc2M3IzgyLjExLjE2LjAzLjAwI0NvdXJ0IHJlcG9ydGluZyBzZXJ2aWNlcyM4Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNi4wNC4wMCNUcmFuc2NyaWJpbmcgc2VydmljZXMjODIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTcuMDAuMDAjQ3JlYXRpdmUgd3JpdGluZyM4Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNy4wMS4wMCNBcnRpY2xlIHdyaXRlcnMgc2VydmljZXMjODIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTcuMDIuMDAjQm9vayBhdXRob3JzIHNlcnZpY2VzIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjAzLjAwI1BvZXRyeSBhdXRob3JzIHNlcnZpY2VzIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjA0LjAwI0NvcHl3cml0aW5nIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjA1LjAwI1NwZWVjaCB3cml0aW5nIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE4LjAwLjAwI0VkaXRvcmlhbCBhbmQgc3VwcG9ydCBzZXJ2aWNlcyM4Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOC4wMS4wMCNFZGl0aW5nIHNlcnZpY2VzIzgyLjExLjE4LjAwLjAwCi11bnNwc2M3IzgyLjExLjE4LjAyLjAwI0ZhY3QgY2hlY2tpbmcgc2VydmljZXMjODIuMTEuMTguMDAuMDAKLXVuc3BzYzcjODIuMTEuMTguMDMuMDAjUHJvb2ZyZWFkaW5nIHNlcnZpY2VzIzgyLjExLjE4LjAwLjAwCi11bnNwc2M3IzgyLjExLjE4LjA0LjAwI1dyaXR0ZW4gdHJhbnNsYXRpb24gc2VydmljZXMjODIuMTEuMTguMDAuMDAKLXVuc3BzYzcjODIuMTEuMTkuMDAuMDAjTmV3cyBhbmQgcHVibGljaXR5IHNlcnZpY2VzIzgyLjExLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE5LjAxLjAwI1ByZXNzIHJlbGVhc2Ugc2VydmljZXMjODIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTkuMDIuMDAjU3BlY2lhbCBpbnRlcmVzdCBuZXdzbGV0dGVyIHNlcnZpY2VzIzgyLjExLjE5LjAwLjAwCi11bnNwc2M3IzgyLjExLjE5LjAzLjAwI05ld3MgYWdlbmN5IHdpcmUgc2VydmljZXMjODIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTkuMDQuMDAjTmV3c3BhcGVyIG9yIGFkdmVydGlzaW5nIG1hdGVyaWFsIGRlbGl2ZXJ5IHNlcnZpY2VzIzgyLjExLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjAwLjAwLjAwI1JlcHJvZHVjdGlvbiBzZXJ2aWNlcyM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wMC4wMCNQcmludGluZyM4Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wMS4wMCNQbGFubmluZyBvciBsYXlvdXQgb2YgZ3JhcGhpYyBwcm9kdWN0aW9uIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjAyLjAwI1R5cGVzZXR0aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjAzLjAwI0RpZ2l0YWwgcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDQuMDAjTGV0dGVycHJlc3Mgb3Igc2NyZWVuIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA1LjAwI1Byb21vdGlvbmFsIG9yIGFkdmVydGlzaW5nIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA2LjAwI1B1YmxpY2F0aW9uIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA3LjAwI1N0YXRpb25lcnkgb3IgYnVzaW5lc3MgZm9ybSBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wOC4wMCNXcmFwIG9yIHRhZyBvciBsYWJlbCBvciBzZWFsIG9yIGJhZyBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wOS4wMCNTZWN1cml0eSBvciBmaW5hbmNpYWwgaW5zdHJ1bWVudHMgcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMTAuMDAjVGV4dGlsZSBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4xMS4wMCNUZWNobmljYWwgbWFudWFsIGFuZCBpbnN0cnVjdGlvbiBzaGVldCBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4xMi4wMCNFbWJvc3NpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTYuMDAuMDAjRW5ncmF2aW5nIzgyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEyLjE2LjAxLjAwI0N1cnJlbmN5IGVuZ3JhdmluZyM4Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNi4wMi4wMCNFbmdyYXZlZCByb2xsIHByaW50aW5nIzgyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE2LjAzLjAwI01ldGFsIHBsYXRlIGVuZ3JhdmluZyM4Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNy4wMC4wMCNQaG90b2NvcHlpbmcjODIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTcuMDEuMDAjQmxhY2sgYW5kIHdoaXRlIGNvcHkgb3IgY29sbGF0aW5nIHNlcnZpY2VzIzgyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE3LjAyLjAwI0NvbG9yIGNvcHkgb3IgY29sbGF0aW5nIHNlcnZpY2VzIzgyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE4LjAwLjAwI1B1Ymxpc2hpbmcjODIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTguMDEuMDAjVGV4dGJvb2sgb3IgcmVzZWFyY2ggcHVibGlzaGluZyM4Mi4xMi4xOC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOC4wMi4wMCNBdXRob3IgZnVuZGVkIHB1Ymxpc2hpbmcgc2VydmljZXMjODIuMTIuMTguMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDAuMDAjQm9va2JpbmRpbmcjODIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDEuMDAjVGhyZWFkIHN0aXRjaCBib29rYmluZGluZyM4Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wMi4wMCNTcGlyYWwgYmluZGluZyM4Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wMy4wMCNHbHVlZCBiaW5kaW5nIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjA0LjAwI0NvbWIgb3IgY2xhbXAgdHlwZSBiaW5kaW5nIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjA1LjAwI0JpbmRpbmcgcmVzdG9yYXRpb24gb3IgcmVwYWlyIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjA2LjAwI0Jyb256aW5nIG9yIGdpbGRpbmcgb3IgZWRnaW5nIG9yIGRlY2tsaW5nIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEzLjAwLjAwLjAwI1Bob3RvZ3JhcGhpYyBzZXJ2aWNlcyM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNS4wMC4wMCNGaWxtIHByb2Nlc3Npbmcgc2VydmljZXMjODIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTUuMDEuMDAjU3RpbGwgZmlsbSBwcm9jZXNzaW5nIG9yIHJlcHJvZHVjdGlvbiM4Mi4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNS4wMi4wMCNNb3Rpb24gcGljdHVyZSBmaWxtIHByb2Nlc3Npbmcgb3IgcmVwcm9kdWN0aW9uIzgyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE1LjAzLjAwI01pY3JvZmljaGUgc2VydmljZXMjODIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTUuMDQuMDAjQ29sb3Igc2VwYXJhdGlvbiM4Mi4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNi4wMC4wMCNQaG90b2dyYXBoZXJzIGFuZCBjaW5lbWF0b2dyYXBoZXJzIzgyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEzLjE2LjAxLjAwI0FlcmlhbCBwaG90b2dyYXBoeSBzZXJ2aWNlcyM4Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNi4wMi4wMCNNb3Rpb24gcGljdHVyZSBjaW5lbWF0b2dyYXBoeSM4Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNi4wMy4wMCNWaWRlbyBwcm9kdWN0aW9uIHNlcnZpY2VzIzgyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE2LjA0LjAwI1N0dWRpbyBwaG90b2dyYXBoeSBzZXJ2aWNlcyBvciBzdGlsbCBwaG90b2dyYXBocyM4Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNC4wMC4wMC4wMCNHcmFwaGljIGRlc2lnbiM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wMC4wMCNBcnQgZGVzaWduIHNlcnZpY2VzIzgyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjAxLjAwI0xheW91dCBvciBncmFwaGljcyBlZGl0aW5nIHNlcnZpY2VzIzgyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjAyLjAwI0FydCBkZXNpZ24gb3IgZ3JhcGhpY3MjODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDMuMDAjUGhvdG9jb21wb3NpdGlvbiM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wNC4wMCNDaGFydCBvciBncmFwaCBkZXNpZ24gc2VydmljZXMjODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDUuMDAjQ29tcHV0ZXIgZ2VuZXJhdGVkIGRlc2lnbiBzZXJ2aWNlcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wNi4wMCNQYWNrYWdlIGRlc2lnbiBzZXJ2aWNlcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wNy4wMCNTaWxrc2NyZWVuIGRlc2lnbiBzZXJ2aWNlcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNi4wMC4wMCNHcmFwaGljIGRpc3BsYXkgc2VydmljZXMjODIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTYuMDEuMDAjUGhvdG9ncmFwaGljIG9yIHBpY3R1cmUgbW91bnRpbmcgb3IgZnJhbWluZyBzZXJ2aWNlcyM4Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNi4wMi4wMCNBcnRpY2xlIGRpc3BsYXkgYXJyYW5nZW1lbnQjODIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTUuMDAuMDAuMDAjUHJvZmVzc2lvbmFsIGFydGlzdHMgYW5kIHBlcmZvcm1lcnMjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDAuMDAjVmlzdWFsIGFydCBzZXJ2aWNlcyM4Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wMS4wMCNQYWludGVycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wMi4wMCNMaXRob2dyYXBoZXJzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjAzLjAwI0NhcnRvb25pc3RzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjA0LjAwI1NjdWxwdG9ycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wNS4wMCNDZXJhbWljcyBtYWtlcnMgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDYuMDAjR2xhc3MgYmxvd2VycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wNy4wMCNUZXh0aWxlIHNwaW5uZXJzIG9yIGxvb21lcnMgb3Igd2VhdmVycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wOC4wMCNUYXhpZGVybXkgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTYuMDAuMDAjQ2lyY3VzIHBlcmZvcm1lcnMjODIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTYuMDEuMDAjQW5pbWFsIHRyYWluZXJzIHNlcnZpY2VzIzgyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE2LjAyLjAwI0Fjcm9iYXRzIHNlcnZpY2VzIzgyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE2LjAzLjAwI01hZ2ljaWFucyBzZXJ2aWNlcyM4Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNi4wNC4wMCNDbG93bnMgc2VydmljZXMjODIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDAuMDAjUGVyZm9ybWluZyBhcnRzIHByb2Zlc3Npb25hbHMjODIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDEuMDAjQWN0aW5nIHNlcnZpY2VzIzgyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjAyLjAwI0NvbWVkaWFucyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wMy4wMCNEYW5jZXJzIHNlcnZpY2VzIzgyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjA0LjAwI011c2ljaWFucyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wNS4wMCNWb2NhbGlzdHMgc2VydmljZXMjODIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDYuMDAjQ2hvcmVvZ3JhcGhpYyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4My4wMC4wMC4wMC4wMCNQdWJsaWMgVXRpbGl0aWVzIGFuZCBQdWJsaWMgU2VjdG9yIFJlbGF0ZWQgU2VydmljZXMjODMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMDAuMDAuMDAjVXRpbGl0aWVzIzgzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjAwLjAwI1dhdGVyIGFuZCBzZXdlciB1dGlsaXRpZXMjODMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDEuMDAjU3VwcGx5IG9mIHdhdGVyIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjAyLjAwI1dhdGVyIHJlc291cmNlIG1hbmFnZW1lbnQjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDMuMDAjV2F0ZXIgcXVhbGl0eSBjb250cm9sIG1hbmFnZW1lbnQjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDQuMDAjV2F0ZXIgZGlzdHJpYnV0aW9uIG1hbmFnZW1lbnQjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDUuMDAjV2F0ZXIgcG9saWN5IGFkdmlzb3J5IHNlcnZpY2VzIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjA2LjAwI1dhdGVyIHRyZWF0bWVudCBzZXJ2aWNlcyM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wNy4wMCNEZXNhbGluYXRpb24gc2VydmljZXMjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDguMDAjVG93biB3YXRlciM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wOS4wMCNTZXJ2aWNlIHdhdGVyIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjEwLjAwI0NoaWxsZWQgd2F0ZXIjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTYuMDAuMDAjT2lsIGFuZCBnYXMgdXRpbGl0aWVzIzgzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjE2LjAxLjAwI1N1cHBseSBvZiBuYXR1cmFsIGdhcyM4My4xMC4xNi4wMC4wMAotdW5zcHNjNyM4My4xMC4xNi4wMi4wMCNTdXBwbHkgb2YgZnVlbCBvaWwjODMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTYuMDMuMDAjT2lsIHBpcGVsaW5lIHNlcnZpY2VzIzgzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE2LjA0LjAwI0dhcyBwaXBlbGluZSBzZXJ2aWNlcyM4My4xMC4xNi4wMC4wMAotdW5zcHNjNyM4My4xMC4xNi4wNS4wMCNHYXMgZmFjaWxpdHkgY2hhcmdlIzgzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjAwLjAwI0VsZWN0cmljIHV0aWxpdGllcyM4My4xMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wMS4wMCNTdXBwbHkgb2Ygc2luZ2xlIHBoYXNlIGVsZWN0cmljaXR5IzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjAyLjAwI1N1cHBseSBvZiB0d28gcGhhc2UgZWxlY3RyaWNpdHkjODMuMTAuMTguMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDMuMDAjU3VwcGx5IG9mIHRocmVlIHBoYXNlIGVsZWN0cmljaXR5IzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjA0LjAwI0VsZWN0cmljIHBvd2VyIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wNS4wMCNJbmR1c3RyaWFsIGVsZWN0cmljIHBvd2VyIGRpc3RyaWJ1dGlvbiM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wNi4wMCNSdXJhbCBlbGVjdHJpY2FsIHBvd2VyIGRpc3RyaWJ1dGlvbiM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wNy4wMCNNdW5pY2lwYWwgZWxlY3RyaWMgcG93ZXIgZGlzdHJpYnV0aW9uIzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE5LjAwLjAwI0VuZXJneSBjb25zZXJ2YXRpb24jODMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTkuMDEuMDAjRW5lcmd5IGNvbnNlcnZhdGlvbiBwcm9ncmFtcyM4My4xMC4xOS4wMC4wMAotdW5zcHNjNyM4My4xMC4xOS4wMi4wMCNFbmVyZ3kgdXNlIHJlZHVjdGlvbiBtZWFzdXJlcyM4My4xMC4xOS4wMC4wMAotdW5zcHNjNyM4My4xMC4yMC4wMC4wMCNGdW5lcmFsIHNlcnZpY2VzIzgzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjIwLjAxLjAwI0dyYXZlIGRpZ2dpbmcjODMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMDAuMDAuMDAjVGVsZWNvbW11bmljYXRpb25zIG1lZGlhIHNlcnZpY2VzIzgzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjAwLjAwI0xvY2FsIGFuZCBsb25nIGRpc3RhbmNlIHRlbGVwaG9uZSBjb21tdW5pY2F0aW9ucyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wMS4wMCNMb2NhbCB0ZWxlcGhvbmUgc2VydmljZSM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wMi4wMCNMb25nIGRpc3RhbmNlIHRlbGVwaG9uZSBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wMy4wMCNQYXkgcGhvbmUgcHJvdmlkZXIgc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDQuMDAjUHJlIHBhaWQgcGhvbmUgY2FyZCBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wNS4wMCNEaXJlY3RvcnkgYXNzaXN0YW5jZSBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wNi4wMCNDb25mZXJlbmNlIGNhbGxpbmcgc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDcuMDAjQ2FsbCBjZW50cmUgYnVyZWF1IHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjA4LjAwI1RvbGwgZnJlZSBpbmJvdW5kIHRlbGVwaG9uZSBzZXJ2aWNlIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjA5LjAwI1RlbGVwaG9uZSBlcXVpcG1lbnQgcmVwYWlyIHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE2LjAwLjAwI01vYmlsZSBjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4xNi4wMS4wMCNUZWxlY29tbXVuaWNhdGlvbiBzaWduYWwgZW5oYW5jZW1lbnQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4xNi4wMC4wMAotdW5zcHNjNyM4My4xMS4xNi4wMi4wMCNTYXRlbGxpdGUgb3IgZWFydGggY29tbXVuaWNhdGlvbiBzeXN0ZW1zIHNlcnZpY2VzIzgzLjExLjE2LjAwLjAwCi11bnNwc2M3IzgzLjExLjE2LjAzLjAwI0NlbGx1bGFyIHRlbGVwaG9uZSBzZXJ2aWNlcyM4My4xMS4xNi4wMC4wMAotdW5zcHNjNyM4My4xMS4xNi4wNC4wMCNQYWdpbmcgc2VydmljZXMjODMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTcuMDAuMDAjRmFjc2ltaWxlIGFuZCB0ZWxlZ3JhcGggc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTcuMDEuMDAjRmFjc2ltaWxlIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM4My4xMS4xNy4wMC4wMAotdW5zcHNjNyM4My4xMS4xNy4wMi4wMCNUZWxlZ3JhcGggdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzgzLjExLjE3LjAwLjAwCi11bnNwc2M3IzgzLjExLjE3LjAzLjAwI1RlbGV4IHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM4My4xMS4xNy4wMC4wMAotdW5zcHNjNyM4My4xMS4xOC4wMC4wMCNUZWxldmlzaW9uIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjE4LjAxLjAwI0NhYmxlIHRlbGV2aXNpb24gc2VydmljZXMjODMuMTEuMTguMDAuMDAKLXVuc3BzYzcjODMuMTEuMTguMDIuMDAjQ2xvc2VkIGNpcmN1aXQgdGVsZXZpc2lvbiBzZXJ2aWNlcyM4My4xMS4xOC4wMC4wMAotdW5zcHNjNyM4My4xMS4xOC4wMy4wMCNUZWxldmlzaW9uIGFudGVubmEgY29uc3RydWN0aW9uIG9yIHJlbnRhbCBzZXJ2aWNlcyM4My4xMS4xOC4wMC4wMAotdW5zcHNjNyM4My4xMS4xOC4wNC4wMCNUZWxldmlzaW9uIGJyb2FkY2FzdGluZyBzdGF0aW9uIG1hbmFnZW1lbnQjODMuMTEuMTguMDAuMDAKLXVuc3BzYzcjODMuMTEuMTkuMDAuMDAjUmFkaW8gc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTkuMDEuMDAjUmFkaW8gYnJvYWRjYXN0aW5nIHN0YXRpb24gbWFuYWdlbWVudCM4My4xMS4xOS4wMC4wMAotdW5zcHNjNyM4My4xMS4xOS4wMi4wMCNBbWF0ZXVyIHJhZGlvIG5ldHdvcmtzIG9yIHNlcnZpY2VzIzgzLjExLjE5LjAwLjAwCi11bnNwc2M3IzgzLjExLjE5LjAzLjAwI1NtYWxsIHNjYWxlIHJhZGlvIHN5c3RlbXMjODMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTkuMDQuMDAjUmFkaW8gc3R1ZGlvIG9yIGVxdWlwbWVudCBzZXJ2aWNlcyM4My4xMS4xOS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMC4wMC4wMCNGaWJlciB0ZWxlY29tbXVuaWNhdGlvbnMgc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjAuMDEuMDAjRGFyayBmaWJlciM4My4xMS4yMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMC4wMi4wMCNEZW5zZSB3YXZlbGVuZ3RoIGRpdmlzaW9uIG11bHRpcGxleGluZyBEV0RNIzgzLjExLjIwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIwLjAzLjAwI1dhdmUgZGl2aXNpb24gbXVsdGlwbGV4aW5nIFdETSM4My4xMS4yMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMC4wNC4wMCNPY3ggb3B0aWNhbCBjYXJyaWVyIHNlcnZpY2UjODMuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDAuMDAjU3dpdGNoZWQgZGlhbCB1cCBhbmQgbGVhc2VkIGRlZGljYXRlZCBsaW5lIGNpcmN1aXQgdGVsZWNvbW11bmljYXRpb25zIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjAxLjAwI0hpZ2ggc3BlZWQgY2lyY3VpdCBzd2l0Y2hlZCBkaWFsIHVwIHNlcnZpY2VzIzgzLjExLjIxLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjAyLjAwI0lTRE4gaW50ZWdyYXRlZCBzZXJ2aWNlcyBkaWdpdGFsIG5ldHdvcmsgc2VydmljZXMjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDMuMDAjUG9pbnQgdG8gcG9pbnQgZGlnaXRhbCB0ZWxlY29tbXVuaWNhdGlvbnMgY2lyY3VpdCM4My4xMS4yMS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMS4wNC4wMCNNdWx0aSBwb2ludCBhbmFsb2cgdGVsZWNvbW11bmljYXRpb25zIGNpcmN1aXQjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDUuMDAjUG9pbnQgdG8gcG9pbnQgYW5hbG9nIHRlbGVjb21tdW5pY2F0aW9ucyBjaXJjdWl0IzgzLjExLjIxLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjA2LjAwI3hEU0wgZGlnaXRhbCBzdWJzY3JpYmVyIGxpbmUjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjIuMDAuMDAjRW5oYW5jZWQgdGVsZWNvbW11bmljYXRpb25zIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIyLjAxLjAwI0FUTSBhc3luY3Jvbm91cyB0cmFuc2ZlciBtb2RlIG1hbmFnZWQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4yMi4wMC4wMAotdW5zcHNjNyM4My4xMS4yMi4wMi4wMCNGcmFtZSByZWxheSBwdWJsaWMgbWFuYWdlZCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjIyLjAwLjAwCi11bnNwc2M3IzgzLjExLjIyLjAzLjAwI1ZQTiB2aXJ0dWFsIHByaXZhdGUgbmV0d29yayBtYW5hZ2VkIG5ldHdvcmsgc2VydmljZXMjODMuMTEuMjIuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjIuMDQuMDAjWDc1IG1hbmFnZWQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4yMi4wMC4wMAotdW5zcHNjNyM4My4xMS4yMi4wNS4wMCNYMjUgbWFuYWdlZCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjIyLjAwLjAwCi11bnNwc2M3IzgzLjEyLjAwLjAwLjAwI0luZm9ybWF0aW9uIHNlcnZpY2VzIzgzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEyLjE1LjAwLjAwI0xpYnJhcmllcyM4My4xMi4wMC4wMC4wMAotdW5zcHNjNyM4My4xMi4xNS4wMS4wMCNHZW5lcmFsIG11bmljaXBhbCBwdWJsaWMgdXNlIGxpYnJhcmllcyM4My4xMi4xNS4wMC4wMAotdW5zcHNjNyM4My4xMi4xNS4wMi4wMCNDb2xsZWdlIG9yIHVuaXZlcnNpdHkgbGlicmFyaWVzIzgzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE1LjAzLjAwI1ByaXZhdGVseSBvd25lZCBsaWJyYXJpZXMjODMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTUuMDQuMDAjTmF0aW9uYWwgZ292ZXJubWVudCBvciBtaWxpdGFyeSBwb3N0IGxpYnJhcmllcyM4My4xMi4xNS4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wMC4wMCNJbmZvcm1hdGlvbiBjZW50ZXJzIzgzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjAxLjAwI0NoYW1iZXJzIG9mIGNvbW1lcmNlIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjAyLjAwI1RvdXJpc20gYm9hcmQgc2VydmljZXMjODMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTYuMDMuMDAjQ29tcHV0ZXJpemVkIGluZm9ybWF0aW9uIHJldHJpZXZhbCBzeXN0ZW1zIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjA0LjAwI09ubGluZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwgc3lzdGVtcyM4My4xMi4xNi4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wNS4wMCNSZW1vdGUgZGF0YWJhc2UgaW5mb3JtYXRpb24gcmV0cmlldmFsIHNlcnZpY2VzIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjA2LjAwI1NraXAgdHJhY2luZyM4My4xMi4xNi4wMC4wMAotdW5zcHNjNyM4My4xMi4xNy4wMC4wMCNNYXNzIGNvbW11bmljYXRpb24gc2VydmljZXMjODMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTcuMDEuMDAjVGVsZXZpc2lvbiByZWxhdGVkIHNlcnZpY2VzIzgzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE3LjAyLjAwI1JhZGlvIHJlbGF0ZWQgc2VydmljZXMjODMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTcuMDMuMDAjSW50ZXJuZXQgcmVsYXRlZCBzZXJ2aWNlcyM4My4xMi4xNy4wMC4wMAotdW5zcHNjNyM4My4xMi4xNy4wNC4wMCNDaXRpemVuIHdhcm5pbmcgc3lzdGVtcyM4My4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NC4wMC4wMC4wMC4wMCNGaW5hbmNpYWwgYW5kIEluc3VyYW5jZSBTZXJ2aWNlcyM4NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMC4wMC4wMC4wMCNEZXZlbG9wbWVudCBmaW5hbmNlIzg0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEwLjE1LjAwLjAwI0RldmVsb3BtZW50IGFzc2lzdGFuY2UjODQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTUuMDEuMDAjRmluYW5jaWFsIGFzc2lzdGFuY2UjODQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTUuMDIuMDAjU2F2aW5ncyBtb2JpbGl6YXRpb24gcHJvZ3JhbXMjODQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTUuMDMuMDAjR3VhcmFudGVlIGFncmVlbWVudHMjODQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTYuMDAuMDAjQWlkIGZpbmFuY2luZyM4NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNi4wMS4wMCNDbyBmaW5hbmNpbmcjODQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTYuMDIuMDAjQmkgbGF0ZXJhbCBvciBtdWx0aSBsYXRlcmFsIGFpZCM4NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNi4wMy4wMCNOb24gZ292ZXJubWVudGFsIGFpZCM4NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNi4wNC4wMCNHb3Zlcm5tZW50IGFpZCM4NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wMC4wMCNEZWJ0IG1hbmFnZW1lbnQjODQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTcuMDEuMDAjRGVidCBuZWdvdGlhdGlvbiM4NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wMi4wMCNEZWJ0IHJlb3JnYW5pemF0aW9uIzg0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE3LjAzLjAwI0RlYnQgc2VydmljaW5nIzg0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE3LjA0LjAwI0RlYnQgY29sbGVjdGlvbiBzZXJ2aWNlcyM4NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wNS4wMCNSZXBvc3Nlc3Npb24gc2VydmljZXMjODQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTEuMDAuMDAuMDAjQWNjb3VudGluZyBhbmQgYXVkaXRpbmcjODQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDAuMDAjQWNjb3VudGluZyBzZXJ2aWNlcyM4NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wMS4wMCNDb3N0IGFjY291bnRpbmcjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDIuMDAjRmluYW5jaWFsIGFjY291bnRpbmcjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDMuMDAjVGF4IGFjY291bnRpbmcjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDQuMDAjQm9va2tlZXBpbmcgc2VydmljZXMjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDUuMDAjUGF5cm9sbCBhY2NvdW50aW5nIHNlcnZpY2VzIzg0LjExLjE1LjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjA2LjAwI0JpbGxpbmcgc2VydmljZXMjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDcuMDAjSW52ZW50b3J5IGFjY291bnRpbmcjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTYuMDAuMDAjQXVkaXQgc2VydmljZXMjODQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTYuMDEuMDAjWWVhciBlbmQgYXVkaXRzIzg0LjExLjE2LjAwLjAwCi11bnNwc2M3Izg0LjExLjE2LjAyLjAwI1F1YXJ0ZXJseSByZXZpZXdzIzg0LjExLjE2LjAwLjAwCi11bnNwc2M3Izg0LjExLjE2LjAzLjAwI0ludGVybmFsIGF1ZGl0cyM4NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNy4wMC4wMCNDb3Jwb3JhdGUgZmluYW5jZSM4NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNy4wMS4wMCNUcmVhc3VyeSBzZXJ2aWNlcyM4NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNy4wMi4wMCNJbnZlc3RvciByZWxhdGlvbnMgc2VydmljZXMgb3IgcHJvZ3JhbXMjODQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTcuMDMuMDAjQnVkZ2V0IHByZXBhcmF0aW9uIG9yIHJldmlldyBzZXJ2aWNlcyM4NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMS4xOC4wMC4wMCNUYXhhdGlvbiBpc3N1ZXMgYW5kIHByZXBhcmF0aW9uIzg0LjExLjAwLjAwLjAwCi11bnNwc2M3Izg0LjExLjE4LjAxLjAwI1RheCBwcmVwYXJlcnMjODQuMTEuMTguMDAuMDAKLXVuc3BzYzcjODQuMTEuMTguMDIuMDAjVGF4IGFkdmlzb3J5IHNlcnZpY2VzIzg0LjExLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEyLjAwLjAwLjAwI0JhbmtpbmcgYW5kIGludmVzdG1lbnQjODQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTUuMDAuMDAjQmFua2luZyBpbnN0aXR1dGlvbnMjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTUuMDEuMDAjUHJpdmF0ZWx5IG93bmVkIGJhbmtzIzg0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE1LjAyLjAwI1B1YmxpY2x5IG93bmVkIGJhbmtzIzg0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE1LjAzLjAwI0NyZWRpdCB1bmlvbnMjODQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTUuMDQuMDAjRGV2ZWxvcG1lbnQgZmluYW5jZSBpbnN0aXR1dGlvbnMjODQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDAuMDAjRnVuZHMgdHJhbnNmZXIgYW5kIGNsZWFyYW5jZSBhbmQgZXhjaGFuZ2Ugc2VydmljZXMjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDEuMDAjRnVuZHMgY2xlYXJhbmNlIHNlcnZpY2VzIzg0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE2LjAyLjAwI0xldHRlciBvZiBjcmVkaXQgc2VydmljZXMjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDMuMDAjQ3VycmVuY3kgZXhjaGFuZ2Ugc2VydmljZXMjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDQuMDAjU3BvdCBleGNoYW5nZSB0cmFuc2FjdGlvbiBzZXJ2aWNlcyM4NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNi4wNS4wMCNDdXJyZW5jeSBjb252ZXJzaW9uIHNlcnZpY2UjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDYuMDAjUmVtaXR0YW5jZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzg0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE3LjAwLjAwI0ludmVzdG1lbnQgYWR2aWNlIzg0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjE3LjAxLjAwI0ludmVzdG1lbnQgYWR2aXNlcnMjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDIuMDAjSW52ZXN0bWVudCBwb2xpY3kjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDMuMDAjSW52ZXN0bWVudCBhbmFseXNpcyM4NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNy4wNC4wMCNJbnZlc3RtZW50IGFncmVlbWVudHMjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDUuMDAjTWFya2V0IGRhdGEjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTguMDAuMDAjU2VjdXJpdGllcyBhbmQgY29tbW9kaXRpZXMgbWFya2V0cyBzZXJ2aWNlcyM4NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wMS4wMCNTdG9jayBtYXJrZXQgdHJhZGluZyBzZXJ2aWNlcyM4NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wMi4wMCNDb21tb2RpdGllcyBvciBmdXR1cmVzIG1hcmtldCBzZXJ2aWNlcyM4NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wMy4wMCNHb3Zlcm5tZW50IGJvbmRzIzg0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE4LjA0LjAwI1ByaXZhdGVseSBpc3N1ZWQgYm9uZHMjODQuMTIuMTguMDAuMDAKLXVuc3BzYzcjODQuMTIuMTguMDUuMDAjUHJlY2lvdXMgbWV0YWxzIG1hcmtldCBzZXJ2aWNlcyM4NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOS4wMC4wMCNNb3J0Z2FnZSBiYW5raW5nIzg0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjE5LjAxLjAwI0hvdXNpbmcgZmluYW5jZSM4NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOS4wMi4wMCNSZSBmaW5hbmNpbmcgc2VydmljZXMjODQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTkuMDMuMDAjQ29tbWVyY2lhbCBtb3J0Z2FnZSBmaW5hbmNlIzg0LjEyLjE5LjAwLjAwCi11bnNwc2M3Izg0LjEyLjIwLjAwLjAwI0Nhc2ggdmF1bHQgc2VydmljZXMjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMjAuMDEuMDAjRGVwb3NpdCB2ZXJpZmljYXRpb24gc2VydmljZXMjODQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjODQuMTMuMDAuMDAuMDAjSW5zdXJhbmNlIGFuZCByZXRpcmVtZW50IHNlcnZpY2VzIzg0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjAwLjAwI0luc3VyYW5jZSBzZXJ2aWNlcyBmb3Igc3RydWN0dXJlcyBhbmQgcHJvcGVydHkgYW5kIHBvc3Nlc3Npb25zIzg0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjAxLjAwI0J1aWxkaW5nIG9yIGJ1aWxkaW5nIGNvbnRlbnRzIGluc3VyYW5jZSM4NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNS4wMi4wMCNIb21lb3duZXJzIG9yIHJlbnRlcnMgaW5zdXJhbmNlIzg0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjAzLjAwI0NhciBvciB0cnVjayBpbnN1cmFuY2UjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDQuMDAjQ2FyZ28gaW5zdXJhbmNlIzg0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjA1LjAwI01hcmluZSBpbnN1cmFuY2UjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDYuMDAjUmVpbnN1cmFuY2Ugc2VydmljZXMjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDAuMDAjTGlmZSBhbmQgaGVhbHRoIGFuZCBhY2NpZGVudCBpbnN1cmFuY2UjODQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDEuMDAjTGlmZSBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDIuMDAjSGVhbHRoIG9yIGhvc3BpdGFsaXphdGlvbiBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDMuMDAjQWNjaWRlbnRhbCBpbmp1cnkgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjA0LjAwI0Rpc2FiaWxpdHkgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjA1LjAwI1dvcmttZW5zIGluc3VyYW5jZSM4NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wNi4wMCNVbmVtcGxveW1lbnQgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjA3LjAwI0xpYWJpbGl0eSBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTcuMDAuMDAjUGVuc2lvbiBmdW5kcyM4NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNy4wMS4wMCNFbXBsb3llciBhZG1pbmlzdGVyZWQgcGVuc2lvbiBmdW5kcyM4NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNy4wMi4wMCNVbmlvbiBvciBndWlsZCBhZG1pbmlzdGVyZWQgcGVuc2lvbiBmdW5kcyM4NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMy4xOC4wMC4wMCNSZXRpcmVtZW50IGZ1bmRzIzg0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjE4LjAxLjAwI1NlbGYgZGlyZWN0ZWQgb3IgZW1wbG95ZXIgc3BvbnNvcmVkIHJldGlyZW1lbnQgZnVuZHMjODQuMTMuMTguMDAuMDAKLXVuc3BzYzcjODQuMTMuMTguMDIuMDAjU2VsZiBkaXJlY3RlZCBvciBzZWxmIGluaXRpYXRlZCByZXRpcmVtZW50IHBsYW5zIzg0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg0LjE0LjAwLjAwLjAwI0NyZWRpdCBhZ2VuY2llcyM4NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNS4wMC4wMCNHb3Zlcm5tZW50YWwgY3JlZGl0IGFnZW5jaWVzIzg0LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg0LjE0LjE1LjAxLjAwI0Zhcm0gY3JlZGl0IHNlcnZpY2VzIzg0LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE1LjAyLjAwI1NtYWxsIGJ1c2luZXNzIGxvYW4gYWdlbmNpZXMjODQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTUuMDMuMDAjTWlub3JpdHkgb3duZWQgYnVzaW5lc3MgcHJvZ3JhbXMjODQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTYuMDAuMDAjUGVyc29uYWwgY3JlZGl0IGFnZW5jaWVzIzg0LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg0LjE0LjE2LjAxLjAwI0NvbnN1bWVyIGNyZWRpdCBnYXRoZXJpbmcgb3IgcmVwb3J0aW5nIHNlcnZpY2VzIzg0LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE2LjAyLjAwI0NyZWRpdCBjYXJkIHNlcnZpY2UgcHJvdmlkZXJzIzg0LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE3LjAwLjAwI0J1c2luZXNzIGNyZWRpdCBhZ2VuY2llcyM4NC4xNC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNy4wMS4wMCNCdXNpbmVzcyBjcmVkaXQgZ2F0aGVyaW5nIG9yIHJlcG9ydGluZyBzZXJ2aWNlcyM4NC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNy4wMi4wMCNWYWx1ZSBhZGRlZCBuZXR3b3JrIChWQU4pIHNlcnZpY2VzIzg0LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg1LjAwLjAwLjAwLjAwI0hlYWx0aGNhcmUgU2VydmljZXMjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTAuMDAuMDAuMDAjQ29tcHJlaGVuc2l2ZSBoZWFsdGggc2VydmljZXMjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDAuMDAjSGVhbHRoY2FyZSBjZW50ZXJzIzg1LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjAxLjAwI0VtZXJnZW5jeSBvciBzdXJnaWNhbCBob3NwaXRhbCBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wMi4wMCNQcml2YXRlIHNwZWNpYWxpemVkIGNsaW5pYyBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wMy4wMCNNZWRpY2FsIG9mZmljZSBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wNC4wMCNQc3ljaGlhdHJpYyBob3NwaXRhbCBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wNS4wMCNSZXNwaXJhdG9yeSBob3NwaXRhbCBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wNi4wMCNTdWJzdGFuY2UgYWJ1c2UgaG9zcGl0YWwgc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDcuMDAjVXJnZW50IGNhcmUgY2VudGVycyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wOC4wMCNNb2JpbGUgaGVhbHRoY2FyZSBjZW50ZXJzIG9yIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjA5LjAwI0d5bmVjb2xvZ2ljYWwgb3Igb2JzdGV0cmljYWwgaG9zcGl0YWwgc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDAuMDAjSGVhbHRoY2FyZSBwcm92aWRlciBzdXBwb3J0IHBlcnNvbnMjODUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDEuMDAjTnVyc2luZyBzZXJ2aWNlcyM4NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNi4wMi4wMCNNaWR3aWZlcnkgb3IgY2hpbGQgYmlydGggcHJlcGFyYXRpb24gc2VydmljZXMjODUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDMuMDAjUGVyc29uYWwgY2FyZSBzZXJ2aWNlcyBpbiBzcGVjaWFsaXplZCBpbnN0aXR1dGlvbnMjODUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDQuMDAjUGh5c2ljaWFucyBwZXJzb25uZWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyM4NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNi4wNS4wMCNIb21lIGhlYWx0aCBhc3Npc3RhbnRzIzg1LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjAwLjAwI0hlYWx0aCBhZG1pbmlzdHJhdGlvbiBzZXJ2aWNlcyM4NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wMS4wMCNIZWFsdGggcG9saWN5Izg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjAyLjAwI0hlYWx0aCBsZWdpc2xhdGlvbiBvciByZWd1bGF0aW9ucyM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wMy4wMCNIZWFsdGggc2VydmljZSBwbGFubmluZyM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wNC4wMCNIZWFsdGggZWNvbm9taWNzIzg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjA1LjAwI1B1YmxpYyBoZWFsdGggYWRtaW5pc3RyYXRpb24jODUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDYuMDAjVHJhZGl0aW9uYWwgaGVhbHRoY2FyZSBzZXJ2aWNlcyM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wNy4wMCNIZWFsdGggc3lzdGVtcyBldmFsdWF0aW9uIHNlcnZpY2VzIzg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjExLjAwLjAwLjAwI0Rpc2Vhc2UgcHJldmVudGlvbiBhbmQgY29udHJvbCM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wMC4wMCNDb250YWdpb3VzIGRpc2Vhc2UgcHJldmVudGlvbiBhbmQgY29udHJvbCM4NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wMS4wMCNBaWRzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wMi4wMCNQYXJhc2l0aWMgZGlzZWFzZSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDMuMDAjRnVuZ2FsIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wNC4wMCNUdWJlcmN1bG9zaXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA1LjAwI0xlcHJvc3kgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA2LjAwI0JhY3RlcmlhbCBkaXNlYXNlIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wNy4wMCNTZXh1YWxseSB0cmFuc21pdHRlZCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDguMDAjVmlyYWwgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA5LjAwI1pvb25vdGljIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4xMC4wMCNWYWNjaW5hdGlvbiBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4xMS4wMCNRdWFyYW50aW5lIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjEyLjAwI0ltbXVuaXphdGlvbiBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4xMy4wMCNEaXNpbnNlY3RpemF0aW9uIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjE0LjAwI0VwaWRlbWljcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDAuMDAjTm9uIGNvbnRhZ2lvdXMgZGlzZWFzZSBwcmV2ZW50aW9uIGFuZCBjb250cm9sIzg1LjExLjAwLjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjAxLjAwI0JvbmUgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjAyLjAwI0NhbmNlciBvciBsZXVrZW1pYSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDMuMDAjRW5kb2NyaW5lIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wNC4wMCNIZWFydCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDUuMDAjSW1tdW5vbG9naWMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjA2LjAwI0FsbGVyZ2llcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDcuMDAjTmV1cm9sb2dpY2FsIGRpc29yZGVycyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDguMDAjTnV0cml0aW9uYWwgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjA5LjAwI1JhZGlhdGlvbiBzaWNrbmVzcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTAuMDAjRGlnZXN0aXZlIHN5c3RlbSBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTEuMDAjRXllIGRpc2Vhc2UgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjEyLjAwI1Jlc3BpcmF0b3J5IGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xMy4wMCNUcm9waWNhbCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTQuMDAjQ2hpbGRob29kIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xNS4wMCNEaWFycmhlYWwgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjE2LjAwI0FsY29ob2xpc20gcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjE3LjAwI0RydWcgYWRkaWN0aW9uIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNy4wMC4wMCNEaXNlYXNlIHZlY3RvcnMgbWFuYWdlbWVudCBhbmQgY29udHJvbCM4NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNy4wMS4wMCNUaWNrcyBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTcuMDIuMDAjVHNldHNlIGZsaWVzIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNy4wMy4wMCNCYWN0ZXJpYSBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTcuMDQuMDAjTW9zcXVpdG8gbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjAwLjAwLjAwI01lZGljYWwgcHJhY3RpY2UjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDAuMDAjUHJpbWFyeSBjYXJlIHByYWN0aXRpb25lcnMgc2VydmljZXMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDEuMDAjUHJpbWFyeSBjYXJlIHBoeXNpY2lhbnMgaG9tZSB2aXNpdHMgc2VydmljZXMjODUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDIuMDAjUHJpbWFyeSBjYXJlIHBoeXNpY2lhbnMgY29uc3VsdGF0aW9uIHNlcnZpY2VzIzg1LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE1LjAzLjAwI1ByaW1hcnkgY2FyZSBwaHlzaWNpYW5zIGNvbnRyb2wgc2VydmljZXMjODUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDQuMDAjUHJpbWFyeSBjYXJlIHBoeXNpY2lhbnMgZW1lcmdlbmN5IG1lZGljYWwgc2VydmljZXMjODUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDAuMDAjTWVkaWNhbCBkb2N0b3JzIHNwZWNpYWxpc3Qgc2VydmljZXMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDEuMDAjR3luZWNvbG9naWMgb3Igb2JzdGV0cmljIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjAyLjAwI05lcGhyb2xvZ3kgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDMuMDAjQ2FyZGlvbG9neSBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wNC4wMCNQdWxvbW9uYXJ5IHNwZWNpYWxpc3RzIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA1LjAwI0dhc3Ryb2VudGVyb2xvZ2lzdHMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDYuMDAjR2VyaWF0cmljIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA3LjAwI1BzeWNoaWF0cmlzdCBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wOC4wMCNQc3ljaG9sb2dpc3RzIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA5LjAwI1N1cmdlcnkgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMTAuMDAjT3BodGhhbG1vbG9naXN0cyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4xMS4wMCNEZXJtYXRvbG9neSBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4xMi4wMCNPcnRob3BlZGljcyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4xMy4wMCNQZWRpYXRyaWMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMTQuMDAjTmVydm91cyBzeXN0ZW0gc3BlY2lhbGlzdCBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wMC4wMCNIZWFsdGhjYXJlIHByb3ZpZGVycyBzcGVjaWFsaXN0cyBzZXJ2aWNlcyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wMS4wMCNQc3ljaG90aGVyYXBpc3RzIHNlcnZpY2VzIzg1LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE3LjAyLjAwI09wdG9tZXRyaXN0cyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wMy4wMCNQb2RpYXRyaXN0cyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wNC4wMCNTcGVlY2ggc3BlY2lhbGlzdHMgc2VydmljZXMjODUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDUuMDAjQWN1cHVuY3R1cmlzdHMgc2VydmljZXMjODUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDYuMDAjQ2hpcm9wcmFjdG9ycyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wMC4wMCNNZWRpY2FsIGxhYm9yYXRvcmllcyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wMS4wMCNCbG9vZCBhbmFseXNpcyBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjAyLjAwI0JhY3RlcmlvbG9naWNhbCBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjAzLjAwI0Jpb2xvZ2ljYWwgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wNC4wMCNQYXRob2xvZ2ljYWwgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wNS4wMCNVcmluYWx5c2lzIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDYuMDAjTmV1cm9sb2dpY2FsIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDcuMDAjVWx0cmFzb3VuZCBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjA4LjAwI1ggcmF5IGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDkuMDAjQmxvb2Qgb3Igc3Blcm0gb3IgdHJhbnNwbGFudCBvcmdhbiBiYW5rcyBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4xMC4wMCNEcnVnIG9yIGFsY29ob2wgc2NyZWVuaW5nIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE5LjAwLjAwI1BoYXJtYWNpc3RzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjE5LjAxLjAwI1BoYXJtYWNldXRpY2FsIHByZXBhcmF0aW9uIHNlcnZpY2VzIzg1LjEyLjE5LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE5LjAyLjAwI0NvbW1lcmNpYWwgcGhhcm1hY2V1dGljYWwgc2VydmljZXMjODUuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjAuMDAuMDAjRGVudGFsIHNlcnZpY2VzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjAxLjAwI0RlbnRpc3RzIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjAyLjAwI0RlbnRhbCBoeWdpZW5pc3RzIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjAzLjAwI0RlbnRpc3Qgc3VwcG9ydCBzdGFmZiBzZXJ2aWNlcyM4NS4xMi4yMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMC4wNC4wMCNPcmFsIHN1cmdlb25zIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjA1LjAwI09ydGhvZG9udGljIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjAwLjAwI1JlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjAxLjAwI1BoeXNpY2FsIHRoZXJhcHkgc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDIuMDAjT2NjdXBhdGlvbmFsIHRoZXJhcHkgc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDMuMDAjUmVoYWJpbGl0YXRpb24gc2VydmljZXMgZm9yIHN1YnN0YW5jZSBhYnVzZSM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wNC4wMCNBdGhsZXRpYyByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wNS4wMCNFYXRpbmcgZGlzb3JkZXJzIHNlcnZpY2VzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjA2LjAwI0JyYWluIG9yIHNwaW5hbCBjb3JkIGluanVyeSBzZXJ2aWNlcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wNy4wMCNCbGluZCBvciB2aXNpb24gaW1wYWlyZWQgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDguMDAjU3BlZWNoIG9yIGxhbmd1YWdlIHRoZXJhcHkjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDkuMDAjUmVoYWJpbGl0YXRpb24gc2VydmljZXMgZm9yIHBlb3BsZSB3aXRoIGNocm9uaWMgZGlzYWJpbGl0aWVzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEzLjAwLjAwLjAwI01lZGljYWwgc2NpZW5jZSByZXNlYXJjaCBhbmQgZXhwZXJpbWVudGF0aW9uIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjAwLjAwI0V4cGVyaW1lbnRhbCBtZWRpY2luZSBzZXJ2aWNlcyM4NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNS4wMS4wMCNPcmdhbiB0cmFuc3BsYW50IHNlcnZpY2VzIzg1LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjAyLjAwI0NsaW5pY2FsIGh1bWFuIGRydWcgdHJpYWxzIzg1LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjAzLjAwI0FuaW1hbCBleHBlcmltZW50YXRpb24jODUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTUuMDQuMDAjSHVtYW4gZXhwZXJpbWVudGF0aW9uIzg1LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjA1LjAwI1NwYWNlIGV4cGVyaW1lbnRhdGlvbiM4NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wMC4wMCNNZWRpY2FsIGV0aGljcyM4NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wMS4wMCNFdXRoYW5hc2lhIGlzc3VlcyM4NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wMi4wMCNNZWRpY2FsIGNvZGUgb2YgY29uZHVjdCM4NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wMy4wMCNNZWRpY2FsIHNvY2lldGllcyM4NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wNC4wMCNJbnRlcm5hdGlvbmFsIGRydWcgbW9uaXRvcmluZyBzZXJ2aWNlcyM4NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wMC4wMCNNZWRpY2FsIHNjaWVuY2UgYW5kIHJlc2VhcmNoIzg1LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjAxLjAwI1BoYXJtYWNldXRpY2FsIHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjAyLjAwI0JhY3RlcmlvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wMy4wMCNCaW9tZWRpY2FsIHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjA0LjAwI0NhcmRpb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDUuMDAjQW5hdG9teSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wNi4wMCNQYXRob2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDcuMDAjRW1icnlvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wOC4wMCNFcGlkZW1pb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDkuMDAjR2VuZXRpY3MgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMTAuMDAjSW1tdW5vbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4xMS4wMCNQaHlzaW9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjEyLjAwI1RveGljb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMTMuMDAjTmV1cm9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjE0LjAwLjAwLjAwI0FsdGVybmF0aXZlIGFuZCBob2xpc3RpYyBtZWRpY2luZSM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNS4wMC4wMCNGYWl0aCBoZWFsZXJzIzg1LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg1LjE0LjE1LjAxLjAwI1dpdGNoIGRvY3RvcnMgb3Igdm9vZG9vIHNlcnZpY2VzIzg1LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE1LjAyLjAwI0ZhaXRoIGhlYWxlcnMgc2VydmljZXMjODUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTUuMDMuMDAjU2hhbWFucyM4NS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNS4wNC4wMCNFbmVyZ3kgd29yayM4NS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNi4wMC4wMCNIZXJiYWwgdHJlYXRtZW50cyM4NS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNi4wMS4wMCNIZXJiYWwgbWVkaWNpbmUgb3IgaGVyYmFsaXN0cyBzZXJ2aWNlcyM4NS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNi4wMi4wMCNBbGdhZSBvciBzZWEgd2VlZCBtZWRpY2FsIGN1cmVzIzg1LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE2LjAzLjAwI0hvdCBzcHJpbmdzIGN1cmUgc2VydmljZXMjODUuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTcuMDAuMDAjSG9tZW9wYXRoaWMgcHJhY3RpY2UjODUuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTcuMDEuMDAjSW5pdGlhbCBkaWFnbm9zdGljIGFzc2Vzc21lbnQjODUuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTcuMDIuMDAjUmVtZWR5IGNvbnN1bHRhdGlvbnMjODUuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTUuMDAuMDAuMDAjRm9vZCBhbmQgbnV0cml0aW9uIHNlcnZpY2VzIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjAwLjAwI0Zvb2QgdGVjaG5vbG9neSM4NS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wMS4wMCNGb29kIGh5Z2llbmUgY29udHJvbCBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wMi4wMCNGb29kIGNvbnRhbWluYXRpb24gY29udHJvbCBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wMy4wMCNGb29kIHByZXNlcnZhdGlvbiBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDQuMDAjRm9vZCBwcmVwYXJhdGlvbiBjb3Vuc2VsaW5nIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDUuMDAjRm9vZCByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wNi4wMCNTdHVkaWVzIG9uIGZvb2RzIG9yIGZvb2QgaGFiaXRzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjA3LjAwI0Zvb2QgYWRkaXRpdmUgb3IgcXVhbGl0eSBzdGFuZGFyZHMgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDguMDAjRm9vZCBhbmFseXNpcyBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wOS4wMCNGb29kIGxlZ2lzbGF0aW9uIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjAwLjAwI051dHJpdGlvbiBpc3N1ZXMjODUuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDEuMDAjTnV0cml0aW9uIHByb2dyYW1taW5nIHNlcnZpY2VzIzg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjAyLjAwI0JyZWFzdCBvciBib3R0bGUgZmVlZGluZyBwb2xpY3kjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDMuMDAjTnV0cml0aW9uYWwgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDQuMDAjTnV0cml0aW9uIHByb2plY3QgZXZhbHVhdGlvbiM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wNS4wMCNGb29kIG9yIG51dHJpdGlvbiBkZXZlbG9wbWVudCBzdHJhdGVnaWVzIzg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjA2LjAwI051dHJpZW50IGRlZmljaWVuY3kgY29udHJvbCBwcm9ncmFtcyM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wNy4wMCNEaWV0IGNvbnRyb2wgb3IgcHJvZ3JhbXMjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTcuMDAuMDAjRm9vZCBwb2xpY3kgcGxhbm5pbmcgYW5kIGFpZCM4NS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wMS4wMCNGb29kIHN0YW5kYXJkcyM4NS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wMi4wMCNGb29kIGFpZCBnbG9iYWwgaW5mb3JtYXRpb24gb3IgZWFybHkgd2FybmluZyBzeXN0ZW1zIHNlcnZpY2VzIzg1LjE1LjE3LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE3LjAzLjAwI0Fzc2Vzc21lbnQgb2YgZW1lcmdlbmN5IGZvb2QgcmVxdWlyZW1lbnRzIzg1LjE1LjE3LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE3LjA0LjAwI05hdGlvbmFsIGZvb2QgaW50ZXJ2ZW50aW9uIHBvbGljeSBvciBwcm9ncmFtcyM4NS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wNS4wMCNFdmFsdWF0aW9uIG9mIGZvb2QgYWlkIG51dHJpdGlvbmFsIGltcGFjdCM4NS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Ni4wMC4wMC4wMC4wMCNFZHVjYXRpb24gYW5kIFRyYWluaW5nIFNlcnZpY2VzIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjAwLjAwLjAwI1ZvY2F0aW9uYWwgdHJhaW5pbmcjODYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDAuMDAjQWdyaWN1bHR1cmUgYW5kIGZvcmVzdHJ5IGFuZCBvdGhlciBuYXR1cmFsIHJlc291cmNlcyB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wMS4wMCNBZ3JvIGluZHVzdHJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDIuMDAjRGFpcnkgaW5kdXN0cnkgdm9jYXRpb25hbCB0cmFpbmluZyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wMy4wMCNNZWF0IGluZHVzdHJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDQuMDAjQWdyaWN1bHR1cmUgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wNS4wMCNSdXJhbCB5b3V0aCBvciBmYXJtZXJzIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDYuMDAjRm9yZXN0cnkgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wNy4wMCNGaXNoZXJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDguMDAjRW52aXJvbm1lbnRhbCB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjA5LjAwI05hdHVyYWwgcmVzb3VyY2VzIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDAuMDAjU2NpZW50aWZpYyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjAxLjAwI0NvbXB1dGVyIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDIuMDAjRW5lcmd5IHJlbGF0ZWQgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wMy4wMCNDaGVtaXN0cnkgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wNC4wMCNCaW9sb2d5IHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDUuMDAjTWVkaWNhbCB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjA2LjAwI0VsZWN0cm9uaWNzIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDcuMDAjVGVsZWNvbW11bmljYXRpb25zIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDguMDAjSHlkcmF1bGljcyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjA5LjAwI0luZHVzdHJpYWwgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4xMC4wMCNFbmdpbmVlcmluZyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjAwLjAwI05vbiBzY2llbnRpZmljIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDEuMDAjQ29tbXVuaWNhdGlvbnMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wMi4wMCNUb3VyaXNtIHJlbGF0ZWQgdHJhaW5pbmcjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDMuMDAjTGlicmFyeSBvciBkb2N1bWVudGF0aW9uIHRyYWluaW5nIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjA0LjAwI1Byb2N1cmVtZW50IG9yIHN1cHBseSBjaGFpbiB0cmFpbmluZyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wNS4wMCNDbGVyaWNhbCB0cmFpbmluZyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wNi4wMCNIZWFsdGggYXNzaXN0YW5jZSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjA3LjAwI1BlcnNvbmFsIGNhcmUgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wOC4wMCNMaXRlcmFjeSBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wOS4wMCNTYWZldHkgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMTAuMDAjVGVhY2hlciB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xMS4wMCNGaXJlIGZpZ2h0aW5nIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjEyLjAwI0hhbmRjcmFmdHMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xMy4wMCNMYXcgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xNC4wMCNMYXcgZW5mb3JjZW1lbnQgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xNS4wMCNSb2FkIG9yIHJhaWwgdHJhbnNwb3J0YXRpb24gdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xNi4wMCNTaGlwcGluZyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjAwLjAwI0luIHNlcnZpY2UgdHJhaW5pbmcgYW5kIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjAxLjAwI0Jhbmsgb3IgZmluYW5jZSBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDIuMDAjUmUgdHJhaW5pbmcgb3IgcmVmcmVzaGluZyB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wMy4wMCNWb2NhdGlvbmFsIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA0LjAwI0NvbW1lcmNpYWwgc2VjdG9yIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA1LjAwI0luZHVzdHJpYWwgc2VjdG9yIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA2LjAwI0hlYWx0aCBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDcuMDAjTWFuYWdlbWVudCBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDguMDAjUHVibGljIHNlY3RvciBtYW5wb3dlciBkZXZlbG9wbWVudCBzZXJ2aWNlcyM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wOS4wMCNNZXJjaGFudCBtYXJpbmUgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4wMC4wMC4wMCNBbHRlcm5hdGl2ZSBlZHVjYXRpb25hbCBzeXN0ZW1zIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjAwLjAwI0Rpc3RhbmNlIGxlYXJuaW5nIHNlcnZpY2VzIzg2LjExLjAwLjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjAxLjAwI0Rpc3RhbmNlIGxlYXJuaW5nIGd1aWRhbmNlIHNlcnZpY2VzIzg2LjExLjE1LjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjAyLjAwI0Rpc3RhbmNlIHRlYWNoaW5nIHNlcnZpY2VzIzg2LjExLjE1LjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjAzLjAwI0NlcnRpZmljYXRlZCBkaXN0YW5jZSBsZWFybmluZyBzZXJ2aWNlcyM4Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNS4wNC4wMCNOb24gY2VydGlmaWNhdGVkIGRpc3RhbmNlIGxlYXJuaW5nIHNlcnZpY2VzIzg2LjExLjE1LjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjA1LjAwI0Rpc3RhbmNlIGxlYXJuaW5nIGFzc2Vzc21lbnQgc2VydmljZXMjODYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTYuMDAuMDAjQWR1bHQgZWR1Y2F0aW9uIzg2LjExLjAwLjAwLjAwCi11bnNwc2M3Izg2LjExLjE2LjAxLjAwI0V2ZW5pbmcgY291cnNlcyM4Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNi4wMi4wMCNQYXJ0IHRpbWUgYWR1bHQgZWR1Y2F0aW9uIHNlcnZpY2VzIzg2LjExLjE2LjAwLjAwCi11bnNwc2M3Izg2LjExLjE2LjAzLjAwI1BhcmVudCBlZHVjYXRpb24jODYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTYuMDQuMDAjRW1wbG95ZWUgRWR1Y2F0aW9uIzg2LjExLjE2LjAwLjAwCi11bnNwc2M3Izg2LjExLjE3LjAwLjAwI0xhbmd1YWdlIHNjaG9vbGluZyM4Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNy4wMS4wMCNDb252ZXJzYXRpb25hbCBmb3JlaWduIGxhbmd1YWdlIGluc3RydWN0aW9uIzg2LjExLjE3LjAwLjAwCi11bnNwc2M3Izg2LjExLjE3LjAyLjAwI0ZvcmVpZ24gbGFuZ3VhZ2UgaW1tZXJzaW9uIGluc3RydWN0aW9uIzg2LjExLjE3LjAwLjAwCi11bnNwc2M3Izg2LjExLjE4LjAwLjAwI0VkdWNhdGlvbmFsIGV4Y2hhbmdlcyM4Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xOC4wMS4wMCNFZHVjYXRpb25hbCBleGNoYW5nZXMgYmV0d2VlbiB1bml2ZXJzaXRpZXMjODYuMTEuMTguMDAuMDAKLXVuc3BzYzcjODYuMTEuMTguMDIuMDAjRWR1Y2F0aW9uYWwgZXhjaGFuZ2VzIGJldHdlZW4gc2Nob29scyM4Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4wMC4wMC4wMCNFZHVjYXRpb25hbCBpbnN0aXR1dGlvbnMjODYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTUuMDAuMDAjRWxlbWVudGFyeSBhbmQgc2Vjb25kYXJ5IHNjaG9vbHMjODYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTUuMDEuMDAjUHJlIHNjaG9vbCBlZHVjYXRpb25hbCBzZXJ2aWNlcyM4Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNS4wMi4wMCNSZWxpZ2lvdXMgZWxlbWVudGFyeSBvciBzZWNvbmRhcnkgc2Nob29scyM4Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNS4wMy4wMCNQcml2YXRlIGVsZW1lbnRhcnkgb3Igc2Vjb25kYXJ5IHNjaG9vbHMjODYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTUuMDQuMDAjUHVibGljIGVsZW1lbnRhcnkgb3Igc2Vjb25kYXJ5IHNjaG9vbHMjODYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTYuMDAuMDAjSnVuaW9yIGNvbGxlZ2VzIzg2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEyLjE2LjAxLjAwI0NvbW11bml0eSBjb2xsZWdlcyM4Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNi4wMi4wMCNUZWNobmljYWwgaW5zdGl0dXRlcyM4Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNy4wMC4wMCNVbml2ZXJzaXR5IGFuZCBjb2xsZWdlcyM4Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNy4wMS4wMCNVbmRlcmdyYWR1YXRlIHByb2dyYW1zIzg2LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE3LjAyLjAwI1Bvc3RncmFkdWF0ZSBwcm9ncmFtcyM4Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xOC4wMC4wMCNQcm9mZXNzaW9uYWwgc2Nob29scyM4Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xOC4wMi4wMCNUaGVvbG9naWNhbCBzZW1pbmFyaWVzIzg2LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE4LjAzLjAwI1RlY2huaWNhbCBwcm9mZXNzaW9uYWwgc2Nob29scyM4Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xOC4wNC4wMCNOb24gdGVjaG5pY2FsIHByb2Zlc3Npb25hbCBzY2hvb2xzIzg2LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjAwLjAwLjAwI1NwZWNpYWxpemVkIGVkdWNhdGlvbmFsIHNlcnZpY2VzIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE1LjAwLjAwI0ZpbmUgYXJ0cyM4Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNS4wMS4wMCNUaGVhdGVyIHN0dWRpZXMjODYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTUuMDIuMDAjUGFpbnRpbmcjODYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTUuMDMuMDAjU2N1bHB0dXJlIzg2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE1LjA0LjAwI01lZGlhIHN0dWRpZXMjODYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTYuMDAuMDAjTXVzaWMgYW5kIGRyYW1hIzg2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE2LjAxLjAwI011c2ljIHNjaG9vbHMjODYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTYuMDIuMDAjRGFuY2UgZWR1Y2F0aW9uIzg2LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE2LjAzLjAwI0RyYW1hIHN0dWRpZXMjODYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTcuMDAuMDAjRHJpdmluZyBhbmQgZmx5aW5nIGFuZCBzYWlsaW5nIzg2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE3LjAxLjAwI1ZlaGljbGUgZHJpdmluZyBzY2hvb2xzIHNlcnZpY2VzIzg2LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE3LjAyLjAwI0ZsaWdodCBzY2hvb2wgc2VydmljZXMjODYuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTcuMDMuMDAjWWFjaHRpbmcgb3IgYm9hdGluZyBzY2hvb2wgc2VydmljZXMjODYuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTguMDAuMDAjTWlsaXRhcnkgZWR1Y2F0aW9uIzg2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE4LjAxLjAwI1NlcnZpY2UgYWNhZGVtaWVzIzg2LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE4LjAyLjAwI1BpbG90IHNjaG9vbHMjODYuMTMuMTguMDAuMDAKLXVuc3BzYzcjODYuMTMuMTguMDMuMDAjTWlsaXRhcnkgcG9saWNlIHRyYWluaW5nIzg2LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE4LjA0LjAwI1dhciBjb2xsZWdlIzg2LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE5LjAwLjAwI1NjaG9vbHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM4Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOS4wMS4wMCNQcmltYXJ5IHNjaG9vbGluZyBzZXJ2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzg2LjEzLjE5LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE5LjAyLjAwI1NlY29uZGFyeSBzY2hvb2xpbmcgc2VydmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM4Ni4xMy4xOS4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOS4wMy4wMCNTcGVjaWFsaXplZCBzY2hvb2xzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjODYuMTMuMTkuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTkuMDQuMDAjU3BlY2lhbGl6ZWQgcmVoYWJpbGl0YXRpb24gc2VydmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM4Ni4xMy4xOS4wMC4wMAotdW5zcHNjNyM4Ni4xNC4wMC4wMC4wMCNFZHVjYXRpb25hbCBmYWNpbGl0aWVzIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjE0LjE1LjAwLjAwI0VkdWNhdGlvbmFsIGd1aWRhbmNlIHNlcnZpY2VzIzg2LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg2LjE0LjE1LjAxLjAwI0VkdWNhdGlvbmFsIGFkdmlzb3J5IHNlcnZpY2VzIzg2LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE1LjAyLjAwI1VuaXZlcnNpdGllcyBjb29wZXJhdGlvbiBndWlkYW5jZSBzZXJ2aWNlcyM4Ni4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNS4wMy4wMCNTdHVkeSBhYnJvYWQgYWR2aXNvcnkgc2VydmljZXMjODYuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTYuMDAuMDAjU3R1ZGVudHMgb3JnYW5pemF0aW9ucyM4Ni4xNC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNi4wMS4wMCNTdHVkZW50cyBob2JieSBjbHVicyM4Ni4xNC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNi4wMi4wMCNTdHVkZW50cyB1bmlvbnMjODYuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTYuMDMuMDAjU3R1ZGVudHMgdHJhdmVsbGluZyBvcmdhbml6YXRpb25zIzg2LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE3LjAwLjAwI0VkdWNhdGlvbmFsIHRlY2hub2xvZ3kjODYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTcuMDEuMDAjTGFuZ3VhZ2UgbGFib3JhdG9yaWVzIzg2LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE3LjAyLjAwI0F1ZGlvIHZpc3VhbCB0ZWNobm9sb2d5Izg2LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE3LjAzLjAwI0NvbXB1dGVyIHByb2dyYW1tZWQgaW5zdHJ1Y3Rpb24jODYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTcuMDQuMDAjTGlicmFyeSBvciBkb2N1bWVudGF0aW9uIHNlcnZpY2VzIzg2LjE0LjE3LjAwLjAwCi11bnNwc2M3IzkwLjAwLjAwLjAwLjAwI1RyYXZlbCBhbmQgRm9vZCBhbmQgTG9kZ2luZyBhbmQgRW50ZXJ0YWlubWVudCBTZXJ2aWNlcyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMC4wMC4wMC4wMCNSZXN0YXVyYW50cyBhbmQgY2F0ZXJpbmcjOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTUuMDAuMDAjRWF0aW5nIGFuZCBkcmlua2luZyBlc3RhYmxpc2htZW50cyM5MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNS4wMS4wMCNSZXN0YXVyYW50cyM5MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNS4wMi4wMCNCYXJzIzkwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE1LjAzLjAwI0Zhc3QgZm9vZCBlc3RhYmxpc2htZW50cyM5MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNS4wNC4wMCNPbiBzdHJlZXQgZm9vZCB2ZW5kb3JzIzkwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjAwLjAwI0JhbnF1ZXQgYW5kIGNhdGVyaW5nIHNlcnZpY2VzIzkwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjAxLjAwI0JhbnF1ZXQgZmFjaWxpdGllcyM5MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNi4wMi4wMCNQYXJ0eSB0ZW50IHNlcnZpY2VzIzkwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjAzLjAwI0NhdGVyaW5nIHNlcnZpY2VzIzkwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjA0LjAwI0NvbnN0cnVjdGlvbiBvciB3b3JrIHNpdGUgY2F0ZXJpbmcgc2VydmljZXMjOTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTcuMDAuMDAjQ2FmZXRlcmlhIHNlcnZpY2VzIzkwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjE3LjAxLjAwI09uIHNpdGUgY2FmZXRlcmlhIG1hbmFnZW1lbnQjOTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTguMDAuMDAjQ2FycnlvdXQgYW5kIHRha2Vhd2F5IHNlcnZpY2VzIzkwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjE4LjAxLjAwI1Byb2Zlc3Npb25hbGx5IHByZXBhcmVkIGNhcnJ5b3V0IG1lYWxzIzkwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE4LjAyLjAwI0RlbGl2ZXJlZCBtZWFscyBzZXJ2aWNlcyM5MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5MC4xMS4wMC4wMC4wMCNIb3RlbHMgYW5kIGxvZGdpbmcgYW5kIG1lZXRpbmcgZmFjaWxpdGllcyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNS4wMC4wMCNIb3RlbHMgYW5kIG1vdGVscyBhbmQgaW5ucyM5MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNS4wMS4wMCNIb3RlbHMjOTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTUuMDIuMDAjTG9kZ2VzIG9yIHJlc29ydHMjOTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTUuMDMuMDAjQmVkIGFuZCBicmVha2Zhc3QgaW5ucyM5MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNS4wNC4wMCNDb3R0YWdlIHJlbnRhbCBzZXJ2aWNlcyM5MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNi4wMC4wMCNNZWV0aW5nIGZhY2lsaXRpZXMjOTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTYuMDEuMDAjQ29uZmVyZW5jZSBjZW50ZXJzIzkwLjExLjE2LjAwLjAwCi11bnNwc2M3IzkwLjExLjE2LjAyLjAwI1ZpZGVvY29uZmVyZW5jaW5nIGZhY2lsaXRpZXMjOTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTYuMDMuMDAjTWVldGluZyBvciBiYW5xdWV0IHJvb21zIzkwLjExLjE2LjAwLjAwCi11bnNwc2M3IzkwLjExLjE3LjAwLjAwI0NhbXBpbmcgYW5kIHdpbGRlcm5lc3MgZmFjaWxpdGllcyM5MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNy4wMS4wMCNDYW1wc2l0ZXMjOTAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTcuMDIuMDAjR292ZXJubWVudCBvd25lZCBwYXJrcyM5MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNy4wMy4wMCNSZWNyZWF0aW9uYWwgdmVoaWNsZSBjYW1wc2l0ZSBmYWNpbGl0aWVzIzkwLjExLjE3LjAwLjAwCi11bnNwc2M3IzkwLjEyLjAwLjAwLjAwI1RyYXZlbCBmYWNpbGl0YXRpb24jOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTUuMDAuMDAjVHJhdmVsIGFnZW50cyM5MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNS4wMS4wMCNUb3VyIGFycmFuZ2VtZW50IHNlcnZpY2VzIzkwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE1LjAyLjAwI1RyYXZlbCBhZ2VuY2llcyM5MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNS4wMy4wMCNDaGFydGVyaW5nIHNlcnZpY2VzIzkwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE2LjAwLjAwI1RyYXZlbCBkb2N1bWVudCBhc3Npc3RhbmNlIzkwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEyLjE2LjAxLjAwI1Bhc3Nwb3J0IHNlcnZpY2VzIzkwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE2LjAyLjAwI1Zpc2Egb3IgYXV4aWxsaWFyeSBkb2N1bWVudCBzZXJ2aWNlcyM5MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNy4wMC4wMCNHdWlkZXMgYW5kIGludGVycHJldGVycyM5MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNy4wMS4wMCNBcmVhIG9yIHRvdXIgZ3VpZGVzIzkwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE3LjAyLjAwI0ludGVycHJldGVycyM5MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM5MC4xMy4wMC4wMC4wMCNQZXJmb3JtaW5nIGFydHMjOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTUuMDAuMDAjTGl2ZSBwZXJmb3JtYW5jZXMjOTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTUuMDEuMDAjVGhlYXRyaWNhbCBwZXJmb3JtYW5jZXMgb3IgcGxheXMjOTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTUuMDIuMDAjRGFuY2UgcGVyZm9ybWFuY2VzIzkwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEzLjE1LjAzLjAwI09wZXJhIzkwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEzLjE1LjA0LjAwI0NvbmNlcnRzIzkwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEzLjE2LjAwLjAwI1RhcGVkIG9yIG1vdGlvbiBwaWN0dXJlIHBlcmZvcm1hbmNlcyM5MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNi4wMS4wMCNNb3Rpb24gcGljdHVyZXMjOTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTYuMDIuMDAjVmlkZW90YXBlZCBlbnRlcnRhaW5tZW50IzkwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkwLjE0LjAwLjAwLjAwI0NvbW1lcmNpYWwgc3BvcnRzIzkwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjE0LjE1LjAwLjAwI1Byb2Zlc3Npb25hbCBzcG9ydGluZyBldmVudHMjOTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTUuMDEuMDAjTGVhZ3VlIHBsYXkjOTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTUuMDIuMDAjQ29tcGV0aXRpdmUgZXZlbnRzIzkwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE1LjAzLjAwI0V4aGliaXRpb25zIzkwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE2LjAwLjAwI1Nwb3J0cyBldmVudCBwcm9tb3Rpb24gYW5kIHNwb25zb3JzaGlwIzkwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE0LjE2LjAxLjAwI0NvbXBhbnkgc3BvbnNvcmVkIHByb2Zlc3Npb25hbCBzcG9ydHMgZXZlbnRzIzkwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE2LjAyLjAwI0NvbXBhbnkgc3BvbnNvcmVkIGFtYXRldXIgc3BvcnRzIGV2ZW50cyM5MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNi4wMy4wMCNTcG9ydGluZyBldmVudCBwcm9tb3Rpb24gc2VydmljZXMjOTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTcuMDAuMDAjQW1hdGV1ciBhbmQgcmVjcmVhdGlvbmFsIHNwb3J0cyM5MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNy4wMS4wMCNZb3V0aCBjb21wZXRpdGl2ZSBzcG9ydHMgbGVhZ3VlcyM5MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNy4wMi4wMCNBZHVsdCBzcG9ydHMgbGVhZ3VlcyM5MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNy4wMy4wMCNZb3V0aCBzcG9ydHMjOTAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMDAuMDAuMDAjRW50ZXJ0YWlubWVudCBzZXJ2aWNlcyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNS4wMC4wMCNUb3VyaXN0IGF0dHJhY3Rpb25zIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE1LjAxLjAwI011c2V1bXMjOTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTUuMDIuMDAjSGlzdG9yaWNhbCBvciBjdWx0dXJhbCBzaXRlcyM5MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNS4wMy4wMCNab29sb2dpY2FsIGdhcmRlbnMjOTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTYuMDAuMDAjVHJhdmVsbGluZyBzaG93cyM5MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNi4wMS4wMCNDaXJjdXNlcyM5MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNi4wMi4wMCNUb3VyaW5nIGNvbXBhbmllcyM5MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNi4wMy4wMCNBcnQgZXhoaWJpdGlvbnMjOTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTcuMDAuMDAjQW11c2VtZW50IHBhcmtzIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE3LjAxLjAwI1RoZW1lIHBhcmtzIzkwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE3LjAyLjAwI1dhdGVyIHBhcmtzIzkwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE3LjAzLjAwI01pbmlhdHVyZSBnb2xmIGNvdXJzZXMjOTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTguMDAuMDAjQ2Fybml2YWxzIGFuZCBmYWlycyM5MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOC4wMS4wMCNUcmF2ZWxsaW5nIGNhcm5pdmFscyM5MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOC4wMi4wMCNGYWlyIG9yZ2FuaXphdGlvbiBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzkwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE5LjAwLjAwI0dhbWJsaW5nIGFuZCBiZXR0aW5nIGVzdGFibGlzaG1lbnRzIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE5LjAxLjAwI0Nhc2lub3MjOTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTkuMDIuMDAjQ2FyZCBjbHVicyM5MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOS4wMy4wMCNSYWNldHJhY2tzIzkwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzkwLjE1LjIwLjAwLjAwI05pZ2h0Y2x1YnMgYW5kIGRhbmNlIGhhbGxzIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjIwLjAxLjAwI05pZ2h0Y2x1YnMjOTAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMjAuMDIuMDAjRGFuY2UgaGFsbHMjOTAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjOTEuMDAuMDAuMDAuMDAjUGVyc29uYWwgYW5kIERvbWVzdGljIFNlcnZpY2VzIzkxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjEwLjAwLjAwLjAwI1BlcnNvbmFsIGFwcGVhcmFuY2UjOTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTUuMDAuMDAjU3BhIGFuZCB3b3Jrb3V0IGFuZCByZWp1dmVuYXRpb24gZmFjaWxpdGllcyM5MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wMS4wMCNIZWFsdGggb3IgZml0bmVzcyBjbHVicyM5MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wMi4wMCNTcGFzIzkxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE1LjAzLjAwI01hc3NhZ2Ugc2VydmljZXMjOTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTUuMDQuMDAjQWVyb2JpY3Mgb3IgZXhlcmNpc2UgY2xhc3NlcyM5MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wNS4wMCNUdXJraXNoIG9yIHN0ZWFtIG9yIHJpdHVhbCBiYXRocyM5MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wMC4wMCNGYWNlIGFuZCBib2R5IGNhcmUgYW5kIGFkb3JubWVudCM5MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wMS4wMCNGYWNpYWwgb3IgYm9keSB0cmVhdG1lbnRzIzkxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjAyLjAwI01ha2UgdXAgY29uc3VsdGF0aW9uIzkxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjAzLjAwI1RhdHRvbyBzZXJ2aWNlcyM5MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wNC4wMCNCb2R5IHBpZXJjaW5nIHNlcnZpY2VzIzkxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjA1LjAwI0VsZWN0cm9seXNpcyM5MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNy4wMC4wMCNIYWlyIGNhcmUjOTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTcuMDEuMDAjSGFpciBjdXR0aW5nIG9yIGNvbG9yIHNlcnZpY2VzIzkxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE3LjAyLjAwI0hhaXIgd2VhdmluZyBvciByZXBsYWNlbWVudCBzZXJ2aWNlcyM5MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOC4wMC4wMCNDbG90aGluZyByZW50YWwjOTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTguMDEuMDAjVHV4ZWRvIG9yIGZvcm1hbHdlYXIgcmVudGFsIzkxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE4LjAyLjAwI0V2ZW5pbmcgb3IgYnJpZGFsIGdvd24gb3IgZHJlc3MgcmVudGFsIzkxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE4LjAzLjAwI0Nvc3R1bWUgcmVudGFsIzkxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE5LjAwLjAwI0Zhc2hpb24gY29uc3VsdGFudHMjOTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTkuMDEuMDAjQ29sb3IgY29uc3VsdGFudCM5MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOS4wMi4wMCNGYXNoaW9uIHN0eWxpc3QjOTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTkuMDMuMDAjV2FyZHJvYmUgY29uc3VsdGFudCM5MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM5MS4xMS4wMC4wMC4wMCNEb21lc3RpYyBhbmQgcGVyc29uYWwgYXNzaXN0YW5jZSM5MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNS4wMC4wMCNMYXVuZGVyaW5nIHNlcnZpY2VzIzkxLjExLjAwLjAwLjAwCi11bnNwc2M3IzkxLjExLjE1LjAxLjAwI1VuaWZvcm0gcmVudGFsIzkxLjExLjE1LjAwLjAwCi11bnNwc2M3IzkxLjExLjE1LjAyLjAwI0xhdW5kcnkgc2VydmljZXMjOTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTUuMDMuMDAjRHJ5IGNsZWFuaW5nIzkxLjExLjE1LjAwLjAwCi11bnNwc2M3IzkxLjExLjE1LjA0LjAwI0NvaW4gb3BlcmF0ZWQgc2VsZiBzZXJ2aWNlIGxhdW5kcmllcyM5MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNi4wMC4wMCNIb3VzZWhvbGQgYXNzaXN0YW5jZSBhbmQgY2FyZSM5MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNi4wMS4wMCNIb3VzZWtlZXBpbmcgc2VydmljZXMjOTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTYuMDIuMDAjWWFyZCBvciBwb29sIGNhcmUgc2VydmljZXMjOTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTYuMDMuMDAjQ29va2luZyBvciBmb29kIHByZXBhcmF0aW9uIHNlcnZpY2VzIzkxLjExLjE2LjAwLjAwCi11bnNwc2M3IzkxLjExLjE3LjAwLjAwI0NvbnN1bWVyIGJ1eWluZyBhbmQgYmFydGVyaW5nIHNlcnZpY2VzIzkxLjExLjAwLjAwLjAwCi11bnNwc2M3IzkxLjExLjE3LjAxLjAwI1VzZWQgY2xvdGhpbmcgY29uc2lnbm1lbnQgc2VydmljZXMjOTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTcuMDIuMDAjQmFydGVyIGNsdWJzIG9yIGNvbnNvcnRpdW1zIzkxLjExLjE3LjAwLjAwCi11bnNwc2M3IzkxLjExLjE3LjAzLjAwI1dhcmRyb2JlIGJ1eWluZyBzZXJ2aWNlcyM5MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOC4wMC4wMCNQZXJzb25hbCBpdGVtIGNhcmUgYW5kIHN0b3JhZ2UjOTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTguMDEuMDAjVmFsZXQgc2VydmljZXMjOTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTguMDIuMDAjQ2hlY2sgcm9vbSBjb25jZXNzaW9ucyM5MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOC4wMy4wMCNMb2NrZXIgcmVudGFsIzkxLjExLjE4LjAwLjAwCi11bnNwc2M3IzkxLjExLjE4LjA0LjAwI0Z1ciBzdG9yYWdlIzkxLjExLjE4LjAwLjAwCi11bnNwc2M3IzkxLjExLjE5LjAwLjAwI1BlcnNvbmFsIGNhcmUgc2VydmljZXMjOTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTkuMDEuMDAjSW5mYW50IG9yIGNoaWxkIGRheWNhcmUgc2VydmljZXMjOTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTkuMDIuMDAjTmFubnkgb3IgYmFieXNpdHRpbmcgc2VydmljZXMjOTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTkuMDMuMDAjRWxkZXJseSBkYXljYXJlIHNlcnZpY2VzIzkxLjExLjE5LjAwLjAwCi11bnNwc2M3IzkxLjExLjE5LjA0LjAwI0Fzc2lzdGVkIGxpdmluZyBzZXJ2aWNlcyM5MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM5Mi4wMC4wMC4wMC4wMCNOYXRpb25hbCBEZWZlbnNlIGFuZCBQdWJsaWMgT3JkZXIgYW5kIFNlY3VyaXR5IGFuZCBTYWZldHkgU2VydmljZXMjOTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMDAuMDAuMDAjUHVibGljIG9yZGVyIGFuZCBzYWZldHkjOTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTUuMDAuMDAjUG9saWNlIHNlcnZpY2VzIzkyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjE1LjAxLjAwI1BvbGljaW5nIHNlcnZpY2VzIzkyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE1LjAyLjAwI1NwZWNpYWwgd2VhcG9ucyBhbmQgdGFjdGljcyAoU1dBVCkgb3IgcmlvdCB0ZWFtcyM5Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNS4wMy4wMCNDb21tdW5pdHkgb3V0cmVhY2ggcHJvZ3JhbXMjOTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTUuMDQuMDAjQ3JpbWUgZGV0ZXJyZW5jZSBwcm9ncmFtcyM5Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNi4wMC4wMCNGaXJlIHNlcnZpY2VzIzkyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjE2LjAxLjAwI011bmljaXBhbCBvciBuYXRpb25hbCBmaXJlZmlnaHRpbmcgc2VydmljZXMjOTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTYuMDIuMDAjVm9sdW50ZWVyIGZpcmUgZGVwYXJ0bWVudCBzZXJ2aWNlcyM5Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNi4wMy4wMCNGaXJlIHByZXZlbnRpb24gc2VydmljZXMjOTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTYuMDQuMDAjRm9yZXN0IG9yIHdpbGRlcm5lc3MgZmlyZWZpZ2h0aW5nIHNlcnZpY2VzIzkyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE3LjAwLjAwI0phaWwgYW5kIHByaXNvbiBzeXN0ZW0jOTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTcuMDEuMDAjSmFpbCBvciBwcmlzb24gb3IgcGVuaXRlbnRpYXJ5IHNlcnZpY2VzIzkyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE3LjAyLjAwI1lvdXRoIGNhbXBzIG9yIGZhY2lsaXRpZXMgc2VydmljZXMjOTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTcuMDMuMDAjSGFsZiB3YXkgaG91c2Ugc2VydmljZXMjOTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTcuMDQuMDAjTWVudGFsbHkgaW1wYWlyZWQgY3JpbWluYWwgZmFjaWxpdGllcyM5Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOC4wMC4wMCNDb3VydCBzeXN0ZW0jOTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDEuMDAjU2hlcmlmZnMgc2VydmljZXMjOTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDIuMDAjUGxlYSBiYXJnYWluIGFncmVlbWVudHMjOTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDMuMDAjQ2l2aWwgY2FzZSBjb3VydCBleHBlbnNlcyM5Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOC4wNC4wMCNDcmltaW5hbCBjYXNlIGZlZXMgb3IgZmluZXMjOTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDUuMDAjQXBwZWFscyBwcm9jZXNzIG9yIGp1ZGljaWFsIHJldmlldyM5Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOS4wMC4wMCNSZXNjdWUgc2VydmljZXMjOTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTkuMDEuMDAjU2VhcmNoIGFuZCByZXNjdWUgdGVhbXMjOTIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTkuMDIuMDAjQW1idWxhbmNlIHNlcnZpY2VzIzkyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE5LjAzLjAwI0xpZmUgc2F2aW5nIGhlbGljb3B0ZXIgc2VydmljZXMjOTIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTkuMDQuMDAjTGlmZWd1YXJkIHNlcnZpY2VzIGZvciBwb29sIG9yIGJlYWNoIzkyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkyLjExLjAwLjAwLjAwI01pbGl0YXJ5IHNlcnZpY2VzIGFuZCBuYXRpb25hbCBkZWZlbnNlIzkyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjAwLjAwI01haW50ZW5hbmNlIG9mIGludGVybmF0aW9uYWwgcGVhY2UgYW5kIHNlY3VyaXR5IzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjAxLjAwI0Rpc3B1dGUgbWVkaWF0aW9uIG9yIGNvbmNpbGlhdGlvbiBvciBuZWdvdGlhdGlvbiBvciBzZXR0bGVtZW50IzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjAyLjAwI1BlYWNlIGtlZXBpbmcgb3BlcmF0aW9ucyM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wMy4wMCNDZWFzZSBmaXJlIGFncmVlbWVudHMgb3IgdHJ1Y2Ugc3VwZXJ2aXNpb24jOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDQuMDAjRmFjdCBmaW5kaW5nIG1pc3Npb25zIzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjA1LjAwI1dhciBwcmV2ZW50aW9uIHN0cmF0ZWdpZXMjOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDYuMDAjQ291bnRlcnRlcnJvcmlzbSM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wNy4wMCNFbWJhcmdvZXMjOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDAuMDAjRGlzYXJtYW1lbnQjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDEuMDAjQXJtcyBsaW1pdGF0aW9ucyM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wMi4wMCNDb252ZW50aW9uYWwgYXJtcyBkaXNhcm1hbWVudCM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wMy4wMCNOdWNsZWFyIGZyZWV6ZXMgb3IgZGlzYXJtYW1lbnQjOTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDQuMDAjV2VhcG9ucyBkZXN0cnVjdGlvbiM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wNS4wMCNEaXNhcm1hbWVudCBuZWdvdGlhdGlvbnMgb3IgYWdyZWVtZW50cyM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wNi4wMCNNdXR1YWwgb3IgYmFsYW5jZWQgZm9yY2UgcmVkdWN0aW9ucyM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wMC4wMCNNaWxpdGFyeSBzY2llbmNlIGFuZCByZXNlYXJjaCM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wMS4wMCNNaWxpdGFyeSBoaXN0b3J5IzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjAyLjAwI0NvbnZlbnRpb25hbCB3ZWFwb25zIHVzYWdlIzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjAzLjAwI0NoZW1pY2FsIHdlYXBvbnMgdXNhZ2UjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDQuMDAjR3VlcmlsbGEgd2FyZmFyZSM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wNS4wMCNNaWxpdGFyeSBzdHJhdGVneSM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wNi4wMCNBZXJpYWwgbWFuZXV2ZXJzIzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjA3LjAwI05hdmFsIG9yIHN1Ym1hcmluZSBtYW5ldXZlcnMjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDguMDAjTGFuZCBtYW5ldXZlcnMjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDAuMDAjTWlsaXRhcnkgcGVyc29ubmVsIGFuZCBkaXNjaXBsaW5lIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjAxLjAwI0NpdmlsIGRlZmVuc2UjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDIuMDAjQ29tcHVsc29yeSBtaWxpdGFyeSBzZXJ2aWNlcyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wMy4wMCNWb2x1bnRhcnkgbWlsaXRhcnkgc2VydmljZXMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDQuMDAjTWlsaXRhcnkgcmVzZXJ2aXN0cyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wNS4wMCNHdWVyaWxsYXMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDYuMDAjTWVyY2VuYXJpZXMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDcuMDAjVmV0ZXJhbnMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDguMDAjTWlsaXRhcnkgY291cnRzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjA5LjAwI01pbGl0YXJ5IG9mZmVuc2VzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjEwLjAwI01pbGl0YXJ5IHBlcnNvbm5lbCM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOS4wMC4wMCNNaWxpdGFyeSBwb2xpY3kjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDEuMDAjTmF0aW9uYWwgc2VjdXJpdHkjOTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDIuMDAjRGVmZW5zZSBjb250cmFjdHMjOTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDMuMDAjTm9uIGZpcnN0IHVzZSBwb2xpY3kjOTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDQuMDAjQXJtcyByYWNlIzkyLjExLjE5LjAwLjAwCi11bnNwc2M3IzkyLjExLjE5LjA1LjAwI01pbGl0YXJ5IHJlbGF0aW9ucyM5Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMC4wMC4wMCNNaWxpdGFyeSB6b25lcyM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMC4wMS4wMCNEZW1pbGl0YXJpemVkIHpvbmVzIzkyLjExLjIwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIwLjAyLjAwI051Y2xlYXIgb3IgY2hlbWljYWwgd2VhcG9uIGZyZWUgem9uZXMjOTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjAuMDMuMDAjUGVhY2Ugem9uZXMjOTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjAuMDQuMDAjTm8gZmx5IHpvbmVzIzkyLjExLjIwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIxLjAwLjAwI051Y2xlYXIgd2FyZmFyZSM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMS4wMS4wMCNOdWNsZWFyIHNhZmVndWFyZHMjOTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjEuMDIuMDAjTnVjbGVhciB3ZWFwb24gdGVzdHMjOTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjEuMDMuMDAjTnVjbGVhciBub24gcHJvbGlmZXJhdGlvbiM5Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wMC4wMCNNaWxpdGFyeSB0YWN0aWNzIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjAxLjAwI1dlYXBvbnMgZGVwbG95bWVudCM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wMi4wMCNNaWxpdGFyeSByZWNvbm5haXNzYW5jZSM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wMy4wMCNBcm1zIHRyYW5zZmVycyM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wNC4wMCNNaWxpdGFyeSBhc3Npc3RhbmNlIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjA1LjAwI1Ryb29wIHdpdGhkcmF3YWxzIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjA2LjAwI1JhcGlkIGRlcGxveW1lbnQgZm9yY2VzIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjA3LjAwI0Vudmlyb25tZW50YWwgd2FyZmFyZSM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMy4wMC4wMCNNaWxpdGFyeSBiYXNlcyM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMy4wMS4wMCNEb21lc3RpYyBtaWxpdGFyeSBiYXNlcyM5Mi4xMS4yMy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMy4wMi4wMCNGb3JlaWduIG1pbGl0YXJ5IGJhc2VzIzkyLjExLjIzLjAwLjAwCi11bnNwc2M3IzkyLjExLjIzLjAzLjAwI05hdmFsIGJhc2VzIzkyLjExLjIzLjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjAwLjAwI0FybWVkIGNvbmZsaWN0cyBhbmQgaW5jaWRlbnRzIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjAxLjAwI0JvcmRlciBpbmNpZGVudHMjOTIuMTEuMjQuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDIuMDAjTGltaXRlZCB3YXIjOTIuMTEuMjQuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDMuMDAjTnVjbGVhciB3YXIjOTIuMTEuMjQuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDQuMDAjU3BhY2UgYmFzZWQgd2FyIzkyLjExLjI0LjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjA1LjAwI1Jlc3BvbnNlIHRvIHRlcnJvcmlzdCBhdHRhY2tzIzkyLjExLjI0LjAwLjAwCi11bnNwc2M3IzkyLjEyLjAwLjAwLjAwI1NlY3VyaXR5IGFuZCBwZXJzb25hbCBzYWZldHkjOTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTUuMDAuMDAjR3VhcmQgc2VydmljZXMjOTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTUuMDEuMDAjQXJtb3JlZCBjYXIgc2VydmljZXMjOTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTUuMDIuMDAjQnVyZ2xhcnkgcHJvdGVjdGlvbiBzZXJ2aWNlcyM5Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNS4wMy4wMCNHdWFyZCBkb2cgcmVudGFsIzkyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE1LjA0LjAwI1NlY3VyaXR5IGd1YXJkIHNlcnZpY2VzIzkyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE2LjAwLjAwI0RldGVjdGl2ZSBzZXJ2aWNlcyM5Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNi4wMS4wMCNEZXRlY3RpdmUgYWdlbmNpZXMjOTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTYuMDIuMDAjRmluZ2VycHJpbnQgc2VydmljZXMjOTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTYuMDMuMDAjTGllIGRldGVjdGlvbiBzZXJ2aWNlcyM5Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNi4wNC4wMCNQcml2YXRlIGludmVzdGlnYXRpb24gc2VydmljZXMjOTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTcuMDAuMDAjU2VjdXJpdHkgc3lzdGVtcyBzZXJ2aWNlcyM5Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNy4wMS4wMCNTdXJ2ZWlsbGFuY2Ugb3IgYWxhcm0gbWFpbnRlbmFuY2Ugb3IgbW9uaXRvcmluZyM5Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNy4wMi4wMCNGaXJlIGFsYXJtIG1haW50ZW5hbmNlIG9yIG1vbml0b3JpbmcjOTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTcuMDMuMDAjU3RvcmUgb3IgYnVzaW5lc3MgYW50aSB0aGVmdCBzZXJ2aWNlcyM5Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNy4wNC4wMCNDb25maW5lbWVudCBzdXJ2ZWlsbGFuY2Ugc3lzdGVtcyBtYWludGVuYW5jZSBvciBtb25pdG9yaW5nIzkyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjAwLjAwLjAwLjAwI1BvbGl0aWNzIGFuZCBDaXZpYyBBZmZhaXJzIFNlcnZpY2VzIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEwLjAwLjAwLjAwI1BvbGl0aWNhbCBzeXN0ZW1zIGFuZCBpbnN0aXR1dGlvbnMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDAuMDAjUG9saXRpY2FsIGJvZGllcyM5My4xMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wMS4wMCNQb2xpdGljYWwgcGFydGllcyByZXByZXNlbnRhdGlvbiBzZXJ2aWNlcyM5My4xMC4xNS4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wMi4wMCNQb2xpdGljYWwgcGFydGllcyBmdW5kIHJhaXNpbmcgc2VydmljZXMjOTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDMuMDAjUG9saXRpY2FsIHBhcnRpZXMgcHVibGljIGFwcGVhcmFuY2Ugc2VydmljZXMjOTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDQuMDAjUG9saXRpY2FsIGxlZ2lzbGF0dXJlIHNlcnZpY2VzIzkzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE1LjA1LjAwI1BvbGl0aWNhbCBqdWRpY2lhbCBwb3dlciBvciBzZXJ2aWNlcyM5My4xMC4xNS4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wNi4wMCNQb2xpdGljYWwgZXhlY3V0aXZlIHBvd2VyIG9yIHNlcnZpY2VzIzkzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjAwLjAwI1BvbGl0aWNhbCBvZmZpY2lhbHMjOTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDEuMDAjQ2FiaW5ldCBvZmZpY2VycyBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wMi4wMCNHb3Zlcm5vcnMgc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDMuMDAjSGVhZHMgb2Ygc3RhdGVzIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjA0LjAwI1ByZXNpZGVudGlhbCBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wNS4wMCNQcmltZSBtaW5pc3RlcnMgc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDYuMDAjTW9uYXJjaCBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wNy4wMCNTdGF0ZXNtZW4gc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDguMDAjUGFybGlhbWVudCBtZW1iZXJzIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjAwLjAwI0xlZ2lzbGF0aXZlIGJvZGllcyBhbmQgcHJhY3RpY2UjOTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDEuMDAjTmF0aW9uYWwgY291bmNpbCBzZXJ2aWNlcyM5My4xMC4xNy4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wMi4wMCNDb3Jwb3JhdGUgc3RhdGVzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjAzLjAwI0JpbGwgZHJhZnRpbmcgc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDQuMDAjTGVnaXNsYXRpdmUgaGVhcmluZ3Mgc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDUuMDAjSW50ZWxsaWdlbmNlIHNlcnZpY2VzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjA2LjAwI0xlZ2lzbGF0b3JzIHNlcnZpY2VzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjA3LjAwI1BhcmxpYW1lbnRhcnkgcHJhY3RpY2Ugc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMDAuMDAuMDAjU29jaW8gcG9saXRpY2FsIGNvbmRpdGlvbnMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDAuMDAjUG9saXRpY2FsIG1vdmVtZW50cyM5My4xMS4wMC4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wMS4wMCNFeHRyZW1pc3QgbW92ZW1lbnRzIzkzLjExLjE1LjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjAyLjAwI1BlYWNlIG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wMy4wMCNQcm90ZXN0IG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wNC4wMCNVbmRlcmdyb3VuZCBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDUuMDAjU3R1ZGVudCBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDYuMDAjUGVhc2FudCBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDcuMDAjT3Bwb3NpdGlvbiBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDAuMDAjUG9saXRpY2FsIHJlcHJlc2VudGF0aW9uIGFuZCBwYXJ0aWNpcGF0aW9uIzkzLjExLjAwLjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjAxLjAwI1BvbGl0aWNhbCByZXByZXNlbnRhdGlvbiM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wMi4wMCNQb2xpdGljYWwgcGFydGljaXBhdGlvbiM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wMy4wMCNQcm9wb3J0aW9uYWwgcmVwcmVzZW50YXRpb24jOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDQuMDAjVm90ZSBjYXRjaGVyIHNlcnZpY2VzIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjA1LjAwI1ZvdGVyIHJlZ2lzdHJhdGlvbiBvciBjb3VudGluZyBvciBhbmFseXNpcyBvciBzY3J1dGlueSBzZXJ2aWNlcyM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wNi4wMCNQcmVzc3VyZSBncm91cHMgcmVwcmVzZW50YXRpb24gb3IgcGFydGljaXBhdGlvbiBzZXJ2aWNlcyM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wNy4wMCNFbGVjdGlvbiBhbmFseXNpcyBzZXJ2aWNlcyM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wOC4wMCNFbGVjdGlvbiBvcmdhbml6YXRpb24gc2VydmljZXMjOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMDAuMDAuMDAjSW50ZXJuYXRpb25hbCByZWxhdGlvbnMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDAuMDAjRGlwbG9tYWN5IzkzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjAxLjAwI0RpcGxvbWF0aWMgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDIuMDAjQ29uc3VsYXIgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDMuMDAjRGlwbG9tYXRzIHNlY3VyaXR5IHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA0LjAwI0RpcGxvbWF0aWMgcHJpdmlsZWdlcyBvciBpbW11bml0aWVzIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA1LjAwI1N0YXRlIGltbXVuaXRpZXMgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDYuMDAjRW1iYXNzaWVzIG9yIGFtYmFzc2Fkb3JzIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA3LjAwI1N0YXRlIHZpc2l0cyBvcmdhbml6YXRpb24gc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDguMDAjSW50ZXJuYXRpb25hbCBsYXcgcHJlc2NyaXB0aW9uIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA5LjAwI0ludGVybmF0aW9uYWwgbGF3IHByb21vdGlvbiBvciByZWNvZ25pdGlvbiBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wMC4wMCNJbnRlcm5hdGlvbmFsIHJlbGF0aW9ucyBhbmQgY29vcGVyYXRpb24jOTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDEuMDAjTXVsdGlsYXRlcmFsIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjAyLjAwI01pbGl0YXJ5IGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjAzLjAwI1BvbGl0aWNhbCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wNC4wMCNJbnRlcm5hdGlvbmFsIGVjb25vbWljIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA1LjAwI05vcnRoIHNvdXRoIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA2LjAwI0Vhc3Qgd2VzdCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wNy4wMCNJbnRlcm5hdGlvbmFsIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA4LjAwI05vbiBnb3Zlcm5tZW50YWwgbGlhaXNvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wOS4wMCNOb24gYWxpZ25lZCBjb3VudHJpZXMgY29vcGVyYXRpb24jOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMTAuMDAjQWxpZ25lZCBjb3VudHJpZXMgY29vcGVyYXRpb24jOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMTEuMDAjUG9saXRpY2FsIGNyaW1lcyBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xMi4wMCNQZWFjZSB0cmVhdGllcyBjb29wZXJhdGlvbiM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xMy4wMCNUcmVhdHkgc2lnbmF0dXJlIG9yIGFjY2Vzc2lvbnMgb3IgcmVjdGlmaWNhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xNC4wMCNJbnRlcm5hdGlvbmFsIHdhdGVyY291cnNlIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjE1LjAwI1RlcnJpdG9yaWFsIGNsYWltcyBvciBuZWdvdGlhdGlvbnMgdGhpcmQgcGFydHkgc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDAuMDAjSW50ZXJuYXRpb25hbCBvcmdhbml6YXRpb25zIzkzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjAxLjAwI1N5c3RlbSBvZiBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjAyLjAwI1NlY3VyaXR5IGNvdW5jaWwgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDMuMDAjRWNvbm9taWMgb3Igc29jaWFsIGNvdW5jaWwgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDQuMDAjU2VjcmV0YXJpYXQgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDUuMDAjVHJ1c3RzaGlwIGNvdW5jaWwgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDYuMDAjR2VuZXJhbCBhc3NlbWJseSBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wNy4wMCNJbnRlcm5hdGlvbmFsIGNvdXJ0IG9mIGp1c3RpY2Ugc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDguMDAjSW50ZXJuYXRpb25hbCBwb2xpdGljYWwgb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wOS4wMCNJbnRlcm5hdGlvbmFsIGNoYXJpdHkgb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4xMC4wMCNJbnRlcm5hdGlvbmFsIGh1bWFuIHJlbGllZiBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjExLjAwI0ludGVybmF0aW9uYWwgaGVhbHRoIG9yZ2FuaXphdGlvbnMgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMDAuMDAuMDAjSHVtYW5pdGFyaWFuIGFpZCBhbmQgcmVsaWVmIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjAwLjAwI1JlZnVnZWUgcHJvZ3JhbXMjOTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDEuMDAjUHJvdGVjdGlvbiBvZiBodW1hbiByaWdodHMgc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDIuMDAjUHJvbW90aW9uIG9mIGh1bWFuIHJpZ2h0cyBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wMy4wMCNIdW1hbiByaWdodHMgZWR1Y2F0aW9uIG9yIGluZm9ybWF0aW9uIGRpc3NlbWluYXRpb24gc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDQuMDAjUmVmdWdlZSBlbWVyZ2VuY3kgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wNS4wMCNSZWZ1Z2VlIGNhbXBzIHNlcnZpY2VzIzkzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjA2LjAwI1JlZnVnZWUgcmVzZXR0bGVtZW50cyBvciByZXBhdHJpYXRpb24gc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDcuMDAjRGlzcGxhY2VkIHBlcnNvbnMgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wMC4wMCNGb29kIGFuZCBudXRyaXRpb24gcG9saWN5IHBsYW5uaW5nIGFuZCBwcm9ncmFtcyM5My4xMy4wMC4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wMS4wMCNIdW5nZXIgZXJhZGljYXRpb24gcHJvZ3JhbXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDIuMDAjRW1lcmdlbmN5IGZvb2Qgc3VwcGx5IHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjAzLjAwI1dvcmxkIGZvb2QgcHJvZ3JhbSBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wNC4wMCNGb29kIG9yIGFncmljdWx0dXJlIG9yZ2FuaXphdGlvbiBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wNS4wMCNDb21tb24gZnVuZCBmb3IgY29tbW9kaXRpZXMgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDYuMDAjSW50ZXJuYXRpb25hbCBmdW5kIGZvciBhZ3JpY3VsdHVyYWwgZGV2ZWxvcG1lbnQgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDcuMDAjRm9vZCBkaXN0cmlidXRpb24gc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDguMDAjRm9vZCBzdXBwbHkgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDkuMDAjRm9vZCBhaWQgcG9saWNpZXMgb3IgcHJvZ3JhbXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMTAuMDAjRm9vZCBwbGFubmluZyBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4xMS4wMCNGb29kIHNlY3VyaXR5IHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjEyLjAwI0Zvb2QgcmVzZXJ2ZXMgbWFuYWdlbWVudCM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4xMy4wMCNGb29kIHNob3J0YWdlIG9yIHN1cnBsdXMgbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE3LjAwLjAwI0hlYWx0aCBwcm9ncmFtcyM5My4xMy4wMC4wMC4wMAotdW5zcHNjNyM5My4xMy4xNy4wMS4wMCNBbnRpIHRvYmFjY28gY2FtcGFpZ25zIzkzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE3LjAyLjAwI1Nhbml0YXRpb24gcHJvZ3JhbXMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDMuMDAjUmVzZWFyY2ggcHJvZ3JhbXMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDQuMDAjRGlzZWFzZSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDUuMDAjRHJ1ZyBhYnVzZSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgcHJvZ3JhbXMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTguMDAuMDAjRGlzYXN0ZXIgcHJlcGFyZWRuZXNzIGFuZCByZWxpZWYjOTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTguMDEuMDAjRGlzYXN0ZXIgd2FybmluZyBzZXJ2aWNlcyM5My4xMy4xOC4wMC4wMAotdW5zcHNjNyM5My4xMy4xOC4wMi4wMCNEaXNhc3RlciBwcmVwYXJlZG5lc3MgcmVzcG9uc2Ugc2VydmljZXMjOTMuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTguMDMuMDAjRW1lcmdlbmN5IGhvdXNpbmcgc2VydmljZXMjOTMuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMDAuMDAuMDAjQ29tbXVuaXR5IGFuZCBzb2NpYWwgc2VydmljZXMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDAuMDAjU29jaWFsIGRldmVsb3BtZW50IGFuZCBzZXJ2aWNlcyM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wMS4wMCNTb2NpYWwgcG9saWN5IHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjAyLjAwI1NvY2lhbCBzZWN1cml0eSBsZWdpc2xhdGlvbiBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wMy4wMCNTb2NpYWwgcGxhbm5pbmcgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDQuMDAjRm9zdGVyIGhvbWUgY2FyZSBzZXJ2aWNlcyBvciBvcnBoYW5hZ2UjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDUuMDAjQWRvcHRpb24gc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDYuMDAjU29jaWFsIHdlbGZhcmUgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDcuMDAjU29jaWFsIHdvcmsgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDguMDAjVm9sdW50YXJ5IHNlcnZpY2UgbWFuYWdlbWVudCM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wOS4wMCNTb2NpYWwgcHJvYmxlbXMgYW5hbHlzaXMgb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xMC4wMCNTb2NpYWwgc3RydWN0dXJlIHN0dWRpZXMgb3IgcmVsYXRlZCBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xMS4wMCNTb2NpYWwgZ3JvdXBzIHN0dWRpZXMgb3IgcmVsYXRlZCBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xMi4wMCNZb3V0aCBtb3ZlbWVudHMgb3Igb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xMy4wMCNTb2NpYWwganVzdGljZSBvciBsZWdpc2xhdGlvbiBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xNC4wMCNTb2NpbyBjdWx0dXJhbCBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wMC4wMCNQb3B1bGF0aW9uIzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjAxLjAwI1BvcHVsYXRpb24gY2Vuc3VzIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjAyLjAwI1BvcHVsYXRpb24gc2FtcGxlIHN1cnZleXMgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDMuMDAjQmlydGggcmVwb3J0aW5nIG9yIGNvbnRyb2wgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDQuMDAjUG9wdWxhdGlvbiBjb250cm9sIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjA1LjAwI1BvcHVsYXRpb24gdHJlbmRzIG9yIHByb2plY3Rpb25zIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjA2LjAwI0JpcnRoIHN0YXRpc3RpY3Mgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDcuMDAjTWFycmlhZ2UgcmVzZWFyY2ggb3Igc3RhdGlzdGljcyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wOC4wMCNQb3B1bGF0aW9uIGRpc3RyaWJ1dGlvbiBvciBhbmFseXNpcyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wOS4wMCNQb3B1bGF0aW9uIGNvbXBvc2l0aW9uIGFuYWx5c2lzIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjEwLjAwI0RlbW9ncmFwaGljIHN0dWRpZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMTEuMDAjSW1taWdyYXRpb24gYW5hbHlzaXMgb3Igc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMTIuMDAjRmFtaWx5IHBsYW5uaW5nIHByb2dyYW1zIG9yIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjEzLjAwI0h1bWFuIHJlcHJvZHVjdGlvbiBhbmFseXNpcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wMC4wMCNDdWx0dXJlIzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjAxLjAwI0N1bHR1cmFsIGV2ZW50cyBvcmdhbml6YXRpb25zIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjAyLjAwI0N1bHR1cmUgcHJvbW90aW9uYWwgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDMuMDAjQXJ0IHJlbGF0ZWQgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDQuMDAjU29uZyB3cml0aW5nIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA1LjAwI0xpdGVyYXJ5IHdyaXRpbmcgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDYuMDAjTWlub3JpdGllcyBwcm90ZWN0aW9uIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA3LjAwI0N1bHR1cmFsIGhlcml0YWdlIHByZXNlcnZhdGlvbiBvciBwcm9tb3Rpb24gc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDguMDAjTXVzZXVtIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA5LjAwI0N1bHR1cmFsIHBvbGljeSBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4xMC4wMCNBcmNoYWljIG9yIGluZGlnZW5vdXMgbGFuZ3VhZ2Ugc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTEuMDAjVHJhZGl0aW9uYWwgaGFuZGNyYWZ0cyBwcm9tb3Rpb24gc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTIuMDAjUHJvdGVjdGlvbiBvZiBpbnRlbGxlY3R1YWwgb3IgY3VsdHVyYWwgcHJvcGVydHkgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTMuMDAjSGlzdG9yaWMgc2l0ZXMgb3IgbW9udW1lbnRzIHByb3RlY3Rpb24gc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTQuMDAjTXl0aG9sb2d5IzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjAwLjAwI0VtcGxveW1lbnQjOTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDEuMDAjRW1wbG95bWVudCBwcm9tb3Rpb24gb3IgcGxhbm5pbmcgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDIuMDAjUmVjcnVpdG1lbnQgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDMuMDAjSW50ZXJuYXRpb25hbCBsYWJvciBzdGFuZGFyZHMgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDQuMDAjSW50ZXJuYXRpb25hbCBsYWJvciByZWdpc3RyYXRpb24gc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDUuMDAjVW5lbXBsb3ltZW50IHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjA2LjAwI0VtcGxveW1lbnQgc3RhdGlzdGljcyBvciBmb3JlY2FzdGluZyBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wNy4wMCNXb3JrIHRpbWUgYXJyYW5nZW1lbnRzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjA4LjAwI09jY3VwYXRpb25hbCBoZWFsdGggb3Igc2FmZXR5IHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjEwLjAwI0NhcmVlciBkZXZlbG9wbWVudCBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4xMS4wMCNQcm9tb3Rpb25hbCBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4xMi4wMCNMYWJvciBpbnNwZWN0aW9uIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjEzLjAwI1dvcmsgY291bmNpbCBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4xNC4wMCNJbnRlcm5hdGlvbmFsIGxhYm9yIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjAwLjAwI1J1cmFsIGRldmVsb3BtZW50IzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjAxLjAwI0FncmljdWx0dXJhbCBjb21tZXJjaWFsIGJhbmtpbmcgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDIuMDAjUnVyYWwgaW52ZXN0bWVudCBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wMy4wMCNBZ3JpY3VsdHVyYWwgaW5zdGl0dXRpb25zIG9yZ2FuaXphdGlvbiBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjA0LjAwI0FncmljdWx0dXJhbCBvciBydXJhbCBjb29wZXJhdGl2ZXMgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDUuMDAjQWdyaWN1bHR1cmFsIHJlc2VhcmNoIHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjA2LjAwI0Zhcm1lcnMgb3IgcGVhc2FudHMgb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wNy4wMCNXb21lbnMgc2VydmljZXMgaW4gYWdyaWN1bHR1cmFsIHByb2R1Y3Rpb24gb3IgcnVyYWwgZGV2ZWxvcG1lbnQjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDguMDAjQWdyYXJpYW4gcmVmb3JtIG9yIGxhbmQgc2V0dGxlbWVudCBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wOS4wMCNMYW5kIGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjEwLjAwI0lzbGFuZCBkZXZlbG9wbWVudCBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wMC4wMCNVcmJhbiBkZXZlbG9wbWVudCM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wMS4wMCNVcmJhbiBkZXZlbG9wbWVudCBwbGFubmluZyBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wMi4wMCNVcmJhbiBsYW5kIGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjAzLjAwI1VyYmFuIGludmVzdG1lbnQgcHJvZ3JhbW1pbmcgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDQuMDAjU2x1bSByZWRldmxvcG1lbnQgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDUuMDAjVXJiYW4gbGlnaHRpbmcgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDYuMDAjVXJiYW4gZGV2ZWxvcG1lbnQgY29udHJvbCBvciByZWd1bGF0aW9ucyBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wNy4wMCNVcmJhbiBidWlsZGluZyBzdGFuZGFyZHMgb3IgcmVndWxhdGlvbnMgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDguMDAjVXJiYW4gY29tbXVuaXR5IHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjA5LjAwI1VyYmFuIHByb2plY3Qgb3IgcHJvZ3JhbSBhZG1pbmlzdHJhdGlvbiBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjAwLjAwI1JlZ2lvbmFsIGRldmVsb3BtZW50IzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjAxLjAwI1JlZ2lvbmFsIGRldmVsb3BtZW50IHBsYW5uaW5nIHNlcnZpY2VzIzkzLjE0LjIxLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjAyLjAwI0Vjb25vbWljIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjE0LjIxLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjAzLjAwI1RlY2huaWNhbCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xNC4yMS4wMC4wMAotdW5zcHNjNyM5My4xNC4yMS4wNC4wMCNTZWN0b3JhbCBwbGFubmluZyBzZXJ2aWNlcyM5My4xNC4yMS4wMC4wMAotdW5zcHNjNyM5My4xNS4wMC4wMC4wMCNQdWJsaWMgYWRtaW5pc3RyYXRpb24gYW5kIGZpbmFuY2Ugc2VydmljZXMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDAuMDAjUHVibGljIGFkbWluaXN0cmF0aW9uIzkzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjAxLjAwI1B1YmxpYyBlbnRlcnByaXNlcyBtYW5hZ2VtZW50IG9yIGZpbmFuY2lhbCBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wMi4wMCNQdWJsaWMgZW50ZXJwcmlzZXMgaW5mb3JtYXRpb24gb3IgY29udHJvbCBzeXN0ZW1zIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjAzLjAwI1ByaXZhdGl6YXRpb24gcHJvZ3JhbXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDQuMDAjQWRtaW5pc3RyYXRpdmUgcmVmb3JtIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA1LjAwI0FkbWluaXN0cmF0aXZlIGFnZW5jaWVzIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA2LjAwI0FkbWluaXN0cmF0aXZlIGVjb25vbWljIGNvdW5jaWwgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDcuMDAjQWRtaW5pc3RyYXRpdmUgcHJvY2VkdXJlcyBvciBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wOC4wMCNHb3Zlcm5tZW50IGRlcGFydG1lbnRzIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA5LjAwI0dvdmVybm1lbnQgaW5mb3JtYXRpb24gc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMTAuMDAjQWRtaW5pc3RyYXRpdmUgZmVlcyBvciB0YXggY29sbGVjdGlvbiBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xMS4wMCNBZG1pbmlzdHJhdGl2ZSBhY3RzIHJhdGlmaWNhdGlvbiBvciBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xMi4wMCNQdWJsaWMgaW5zdGl0dXRpb25zIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjEzLjAwI011bHRpbmF0aW9uYWwgcHVibGljIGNvcnBvcmF0aW9ucyBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xNC4wMCNPbWJ1ZHNtYW4gc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMTUuMDAjTmF0aW9uYWwgcGxhbm5pbmcgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDAuMDAjUHVibGljIGZpbmFuY2UjOTMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDEuMDAjUHJvZ3JhbSBidWRnZXRpbmcgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDIuMDAjR292ZXJubWVudCBidWRnZXRpbmcgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDMuMDAjQnVkZ2V0IG9yIHB1YmxpYyBpbnZlc3RtZW50IG1hbmFnZW1lbnQjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDQuMDAjTWlsaXRhcnkgZXhwZW5kaXR1cmVzIGJ1ZGdldGluZyBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wNS4wMCNHb3Zlcm5tZW50IGZpbmFuY2Ugc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDYuMDAjR292ZXJubWVudCBhY2NvdW50aW5nIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjA3LjAwI0dvdmVybm1lbnQgYXVkaXRpbmcgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDguMDAjR292ZXJubWVudCBvciBjZW50cmFsIGJhbmsgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDkuMDAjTG90dGVyaWVzIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjEwLjAwI1RheCBjb2xsZWN0aW9uIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjExLjAwI1N1YnNpZGllcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNy4wMC4wMCNDdXJyZW5jeSM5My4xNS4wMC4wMC4wMAotdW5zcHNjNyM5My4xNS4xNy4wMS4wMCNDdXJyZW5jaWVzIG9yIGNvaW5hZ2UjOTMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTcuMDIuMDAjTmF0aW9uYWwgYmFuayBub3RlcyM5My4xNS4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4wMC4wMC4wMCNUYXhhdGlvbiM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNi4xNS4wMC4wMCNJbmNvbWUgdGF4IzkzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE2LjE1LjAxLjAwI05hdGlvbmFsIGluY29tZSB0YXgjOTMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTUuMDIuMDAjTXVuaWNpcGFsIGluY29tZSB0YXgjOTMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTUuMDMuMDAjQ2FwaXRhbCBnYWlucyB0YXgjOTMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTUuMDQuMDAjRXhjZXNzIHByb2ZpdHMgdGF4IzkzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjAwLjAwI1RheGVzIG90aGVyIHRoYW4gaW5jb21lIHRheCM5My4xNi4wMC4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wMS4wMCNQcm9wZXJ0eSB0YXgjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDIuMDAjTGFuZCB0YXgjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDMuMDAjVmFsdWUgYWRkZWQgdGF4IChWQVQpIzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjA0LjAwI1BheXJvbGwgdGF4IzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjA1LjAwI1NhbGVzIHRheCM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wNi4wMCNTb2NpYWwgc2VjdXJpdHkgdGF4IzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjA3LjAwI0luaGVyaXRhbmNlIG9yIHRyYW5zZmVyIHRheCM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wMC4wMCNUYXggYWRtaW5pc3RyYXRpb24jOTMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTcuMDEuMDAjVGF4IGNvbGxhdGlvbiM5My4xNi4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wMi4wMCNUYXggaW5jZW50aXZlcyM5My4xNi4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wMy4wMCNUYXggc3lzdGVtcyM5My4xNi4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wNC4wMCNUYXggcmV2ZW51ZSBhZG1pbmlzdHJhdGlvbiM5My4xNi4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wMC4wMCNUYXhhdGlvbiBpc3N1ZXMjOTMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDEuMDAjVGF4IHJlZm9ybSM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wMi4wMCNUYXhhdGlvbiBwb2xpY3kjOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDMuMDAjVGF4IHJlc2VhcmNoIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjA0LjAwI0ludmVzdG1lbnQgdGF4IGNyZWRpdCM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wNS4wMCNUYXggZGVkdWN0aW9ucyM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wNi4wMCNUYXggZXZhc2lvbiM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wNy4wMCNUYXggc2hlbHRlcnMgb3IgaGF2ZW5zIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjA4LjAwI1RheCByZXR1cm5zIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE3LjAwLjAwLjAwI1RyYWRlIHBvbGljeSBhbmQgcmVndWxhdGlvbiM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xNS4wMC4wMCNUcmFkZSBwb2xpY3kjOTMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTUuMDEuMDAjVHJhZGUgYWdyZWVtZW50cyM5My4xNy4xNS4wMC4wMAotdW5zcHNjNyM5My4xNy4xNS4wMi4wMCNUcmFkZSBuZWdvdGlhdGlvbnMjOTMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTUuMDMuMDAjRm9ybXVsYXRpb24gb2YgbmF0aW9uYWwgY29tbW9kaXR5IHBvbGljaWVzIzkzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE1LjA0LjAwI0RldmVsb3BtZW50IG9mIHNtYWxsIHNjYWxlIGluZHVzdHJpZXMjOTMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTYuMDAuMDAjSW50ZXJuYXRpb25hbCB0cmFkZSM5My4xNy4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xNi4wMS4wMCNJbnRlcm5hdGlvbmFsIGNvbW1vZGl0eSBhZ3JlZW1lbnRzIzkzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE2LjAyLjAwI0V4cG9ydCBwb2xpY3kjOTMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTYuMDMuMDAjR2xvYmFsIHRyYWRlIHBvbGljaWVzIG9yIHByb2NlZHVyZXMjOTMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTYuMDQuMDAjQmlsYXRlcmFsIHRyYWRlIGFncmVlbWVudHMjOTMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTcuMDAuMDAjQ3VzdG9tcyBhZG1pbmlzdHJhdGlvbiBhbmQgY29tcGxpYW5jZSM5My4xNy4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xNy4wMS4wMCNDdXN0b21zIGNvbnZlbnRpb25zIzkzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE3LjAyLjAwI0N1c3RvbXMgZm9ybWFsaXRpZXMjOTMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTcuMDMuMDAjQ3VzdG9tcyBvZmZlbmNlcyM5My4xNy4xNy4wMC4wMAotdW5zcHNjNyM5My4xNy4xOC4wMC4wMCNUcmFkZSBhbmFseXNpcyM5My4xNy4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xOC4wMS4wMCNUcmFkZSBwcm9qZWN0aW9ucyM5My4xNy4xOC4wMC4wMAotdW5zcHNjNyM5My4xNy4xOC4wMi4wMCNCYWxhbmNlIG9mIHRyYWRlIHByb2plY3Rpb25zIzkzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE4LjAzLjAwI1RyYWRlIHN0YXRpc3RpY3MjOTMuMTcuMTguMDAuMDAKLXVuc3BzYzcjOTQuMDAuMDAuMDAuMDAjT3JnYW5pemF0aW9ucyBhbmQgQ2x1YnMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMDAuMDAuMDAjV29yayByZWxhdGVkIG9yZ2FuaXphdGlvbnMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDAuMDAjQnVzaW5lc3MgYXNzb2NpYXRpb25zIzk0LjEwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjAxLjAwI0FncmljdWx0dXJhbCBpbmR1c3RyeSBhc3NvY2lhdGlvbnMjOTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDIuMDAjUmVndWxhdG9yeSBhc3NvY2lhdGlvbnMjOTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDMuMDAjU2VjdG9yYWwgYnVzaW5lc3MgYXNzb2NpYXRpb25zIzk0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjA0LjAwI0ludGVybmF0aW9uYWwgYnVzaW5lc3MgYXNzb2NpYXRpb25zIzk0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjA1LjAwI0VtcGxveWVycyBhc3NvY2lhdGlvbnMjOTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDAuMDAjUHJvZmVzc2lvbmFsIGFzc29jaWF0aW9ucyM5NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wMS4wMCNEZW50YWwgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjAyLjAwI01lZGljYWwgaGVhbHRoIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wMy4wMCNOdXJzaW5nIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wNC4wMCNBY2NvdW50aW5nIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wNS4wMCNBcmNoaXRlY3QgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjA2LjAwI0JhciBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDcuMDAjRWR1Y2F0aW9uYWwgb3IgdGVhY2hlciBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDguMDAjRW5naW5lZXJpbmcgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjA5LjAwI1NjaWVudGlmaWMgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjEwLjAwI1Byb2Zlc3Npb25hbCBzdGFuZGFyZHMgcmV2aWV3IGJvYXJkcyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNy4wMC4wMCNTdGFmZiBhc3NvY2lhdGlvbnMjOTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDEuMDAjU3RhZmYgaG9iYnkgY2x1YnMjOTQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDIuMDAjU3RhZmYgc3BvcnRzIGFzc29jaWF0aW9ucyM5NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNy4wMy4wMCNXb21lbiBzdGFmZiBhc3NvY2lhdGlvbnMjOTQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDQuMDAjUGVuc2lvbm5pc3Qgc3RhZmYgYXNzb2NpYXRpb25zIzk0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE3LjA1LjAwI01hbmFnZW1lbnQgc3RhZmYgYXNzb2NpYXRpb25zIzk0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjAwLjAwI1RyYWRlIHVuaW9ucyM5NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wMS4wMCNMYWJvciBvciBnZW5lcmFsIHdvcmtlcnMgdHJhZGUgdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjAyLjAwI1RyYWRlIHVuaW9uIGFjdGl2aXN0cyBzZXJ2aWNlcyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wMy4wMCNUcmFkZSB1bmlvbiBpbmZvcm1hdGlvbiBzZXJ2aWNlcyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wNC4wMCNUcmFuc3BvcnQgdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjA1LjAwI1RlYWNoZXJzIHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wNi4wMCNNZWRpY2FsIHBlcnNvbm5lbCB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDcuMDAjRW1wbG95ZXJzIHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wOC4wMCNDaXZpbCBzZXJ2YW50cyB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDkuMDAjUGVyc29uYWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4xMC4wMCNBdmlhdGlvbiB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTEuMDAuMDAuMDAjUmVsaWdpb3VzIG9yZ2FuaXphdGlvbnMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTcuMDAuMDAjUmVsaWdpb3VzIHJlc2lkZW5jZXMjOTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTcuMDEuMDAjUHJpdmF0ZSByZWxpZ2lvdXMgaG9tZSByZXNpZGVuY2VzIzk0LjExLjE3LjAwLjAwCi11bnNwc2M3Izk0LjExLjE3LjAyLjAwI0NvbW11bml0eSByZWxpZ2lvdXMgaG9tZSByZXNpZGVuY2VzIzk0LjExLjE3LjAwLjAwCi11bnNwc2M3Izk0LjExLjE3LjAzLjAwI1JlbGlnaW91cyByZXRyZWF0IHJlc2lkZW5jZXMjOTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTcuMDQuMDAjVGVtcG9yYXJ5IHJlbGlnaW91cyBob21lIHJlc2lkZW5jZXMjOTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTguMDAuMDAjUGlsZ3JpbWFnZSBvcmdhbml6YXRpb25zIGFuZCBzZXJ2aWNlcyM5NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOC4wMS4wMCNNZWNjYSBwaWxncmltYWdlIG9yZ2FuaXphdGlvbnMgb3Igc2VydmljZXMjOTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTguMDIuMDAjVmF0aWNhbiBwaWxncmltYWdlIG9yZ2FuaXphdGlvbnMgb3Igc2VydmljZXMjOTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTguMDMuMDAjUGlsZ3JpbWFnZSB0cmF2ZWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOC4wNC4wMCNQaWxncmltYWdlIHRvdXIgb3BlcmF0b3JzIHNlcnZpY2VzIzk0LjExLjE4LjAwLjAwCi11bnNwc2M3Izk0LjExLjE5LjAwLjAwI01pc3Npb25hcnkgc2VydmljZXMjOTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTkuMDEuMDAjUmVsaWdpb3VzIG9yZGVycyBzZXJ2aWNlcyM5NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOS4wMi4wMCNFdmFuZ2VsaWNhbCBtaXNzaW9uYXJ5IHNlcnZpY2VzIzk0LjExLjE5LjAwLjAwCi11bnNwc2M3Izk0LjExLjE5LjAzLjAwI0VkdWNhdGlvbmFsIG1pc3Npb25hcnkgc2VydmljZXMjOTQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDAuMDAjRGVub21pbmF0aW9uYWwgc2VydmljZXMjOTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDEuMDAjSGluZHVpc20gc2VydmljZXMjOTQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDIuMDAjQnVkZGhpc20gc2VydmljZXMjOTQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDMuMDAjQ2hyaXN0aWFuIHNlcnZpY2VzIzk0LjExLjIwLjAwLjAwCi11bnNwc2M3Izk0LjExLjIwLjA0LjAwI0lzbGFtIHNlcnZpY2VzIzk0LjExLjIwLjAwLjAwCi11bnNwc2M3Izk0LjExLjIwLjA1LjAwI0p1ZGFpc20gc2VydmljZXMjOTQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMDAuMDAuMDAjQ2x1YnMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDAuMDAjU3BvcnQgY2x1YnMjOTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDEuMDAjSWNlIHNwb3J0cyBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wMi4wMCNCb2F0aW5nIG9yIHN3aW1taW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjAzLjAwI0d1biBvciBodW50aW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA0LjAwI091dGRvb3IgZmllbGQgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDUuMDAjSW5kb29yIG9yIG91dGRvb3IgY291cnQgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDYuMDAjV2ludGVyIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA3LjAwI0JlYWNoIG9yIHdhdGVyIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA4LjAwI0N5Y2xpbmcgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDkuMDAjTW91bnRhaW5lZXJpbmcgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMTAuMDAjUmFjaW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjExLjAwI0ZseWluZyBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4xMi4wMCNQcm9mZXNzaW9uYWwgb3Igc2VtaXByb2Zlc3Npb25hbCBzcG9ydHMgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMTMuMDAjU3RhZGl1bSBldmVudCBvcGVyYXRvciBzZXJ2aWNlcyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4xNC4wMCNTcG9ydCBjbHViIG1hbmFnZXJzIG9yIHByb21vdGVycyBzZXJ2aWNlcyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wMC4wMCNIb2JieSBjbHVicyM5NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wMS4wMCNQbGF5aW5nIGNhcmQgaG9iYnkgY2x1YnMjOTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDIuMDAjSGFuZGNyYWZ0cyBjbHVicyM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wMy4wMCNQb2V0cnkgb3IgbGl0ZXJhdHVyZSBob2JieSBjbHVicyM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wNC4wMCNDb29raW5nIGhvYmJ5IGNsdWJzIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjA1LjAwI0dhcmRlbmluZyBob2JieSBjbHVicyM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wNi4wMCNDb2xsZWN0b3IgaG9iYnkgY2x1YiM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wNy4wMCNTY291dGluZyBjbHViIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE3LjAwLjAwI0FtYXRldXJzIGNsdWJzIzk0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEyLjE3LjAxLjAwI0FtYXRldXIgZHJhbWEgY2x1YnMgb3Igc2VydmljZXMjOTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTcuMDIuMDAjQW1hdGV1ciBtdXNpYyBjbHVicyBvciBzZXJ2aWNlcyM5NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNy4wMy4wMCNBbWF0ZXVyIGRhbmNlIGNsdWJzIG9yIHNlcnZpY2VzIzk0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE3LjA0LjAwI0FtYXRldXIgZmluZSBhcnRzIGNsdWJzIG9yIHNlcnZpY2VzIzk0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE4LjAwLjAwI1NvY2lhbCBjbHVicyM5NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wMS4wMCNZb3V0aCBjbHVicyM5NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wMi4wMCNTZW5pb3IgY2l0aXplbnMgY2x1YnMjOTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTguMDMuMDAjU29jaWFsIGdhdGhlcmluZyBjbHVicyM5NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wNC4wMCNTb2NpYWwgY2x1YnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM5NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wNS4wMCNXYXIgdmV0ZXJhbnMgc29jaWFsIGNsdWJzIzk0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjAwLjAwLjAwI0NpdmljIG9yZ2FuaXphdGlvbnMgYW5kIGFzc29jaWF0aW9ucyBhbmQgbW92ZW1lbnRzIzk0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjE1LjAwLjAwI05vbiBnb3Zlcm5tZW50YWwgb3JnYW5pemF0aW9ucyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNS4wMS4wMCNFbnZpcm9ubWVudGFsIG5vbiBnb3Zlcm5tZW50YWwgc2VydmljZXMjOTQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTUuMDIuMDAjRW1lcmdlbmN5IHJlbGllZiBub24gZ292ZXJubWVudGFsIHNlcnZpY2VzIzk0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE1LjAzLjAwI1RlY2huaWNhbCBhc3Npc3RhbmNlIG5vbiBnb3Zlcm5tZW50YWwgc2VydmljZXMjOTQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTUuMDQuMDAjRGV2ZWxvcG1lbnQgYWlkIG5vbiBnb3Zlcm5lbW50YWwgc2VydmljZXMjOTQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDAuMDAjQ2hhcml0eSBvcmdhbml6YXRpb25zIzk0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjAxLjAwI0NoYXJpdHkgb3JnYW5pemF0aW9ucyBzaGVsdGVyIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjAyLjAwI0Zvb2QgcmVsaWVmIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjAzLjAwI0xlZ2FsIGFzc2lzdGFuY2Ugc2VydmljZXMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDQuMDAjUmVzb3VyY2UgbW9iaWxpemF0aW9uIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjA1LjAwI0ludGVybmF0aW9uYWwgYWlkIGFzc2lzdGFuY2Ugc2VydmljZXMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDYuMDAjT3JwaGFuYWdlIG9yIGFkb3B0aW9uIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjA3LjAwI0VkZXJseSBhc3Npc3RhbmNlIG9yZ2FuaXphdGlvbnMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDguMDAjUHJpc29uZXIgYXNzaXN0YW5jZSBvcmdhbml6YXRpb25zIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE3LjAwLjAwI0dyZWVuIGFzc29jaWF0aW9ucyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNy4wMS4wMCNSYWRpY2FsIGdyZWVuIGFzc29jaWF0aW9ucyM5NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNy4wMi4wMCNFY29mZW1pbmlzdHMgYXNzb2NpYXRpb25zIzk0LjEzLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE3LjAzLjAwI0Vjb2xvZ2ljYWwgcG9saXRpY2FsIG9yZ2FuaXphdGlvbnMjOTQuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTcuMDQuMDAjR3JlZW4gYWN0aXZpc3RzIG1vdmVtZW50cyBvciBzZXJ2aWNlcyM5NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wMC4wMCNNb3ZlbWVudHMjOTQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTguMDEuMDAjR2F5IG9yIGxlc2JpYW4gb3IgYmlzZXh1YWwgb3IgdHJhbnNnZW5kZXIgbW92ZW1lbnRzIzk0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE4LjAyLjAwI0FudGkgcmFjaXNtIG1vdmVtZW50cyM5NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wMy4wMCNXb21lbiBsaWJlcmF0aW9uIG1vdmVtZW50cyM5NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wNC4wMCNGcmF0ZXJuYWwgYXNzb2NpYXRpb25zIzk0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE4LjA1LjAwI0V0aG5pYyBtaW5vcml0aWVzIGN1bHR1cmFsIHByZXNlcnZhdGlvbiBzZXJ2aWNlcyM5NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOS4wMC4wMCNBbmltYWwgcHJvdGVjdGlvbiBhc3NvY2lhdGlvbnMjOTQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTkuMDEuMDAjQW5pbWFsIGxpYmVyYXRpb24gbW92ZW1lbnRzIzk0LjEzLjE5LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE5LjAyLjAwI0VuZGFuZ2VyZWQgc3BlY2llcyBwcm90ZWN0aW9uIGFzc29jaWF0aW9ucyM5NC4xMy4xOS4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOS4wMy4wMCNUaHJlYXRlbmVkIGFuaW1hbHMgcHJvdGVjdGlvbiBhc3NvY2lhdGlvbnMjOTQuMTMuMTkuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMjAuMDAuMDAjSHVtYW4gcmlnaHRzIGFkdm9jYWN5IGFuZCBkZWZlbnNlIGFzc29jaWF0aW9ucyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wMS4wMCNDaGlsZHJlbiByaWdodHMgZGVmZW5zZSBzZXJ2aWNlcyM5NC4xMy4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wMi4wMCNQcmlzb25lcnMgZGVmZW5zZSBzZXJ2aWNlcyM5NC4xMy4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wMy4wMCNQaHlzaWNhbCBvciBtZW50YWwgdG9ydHVyZSBkZWZlbnNlIGFzc29jaWF0aW9ucyM5NC4xMy4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wNC4wMCNGcmVlZG9tIG9mIHNwZWVjaCBkZWZlbnNlIGFzc29jaWF0aW9ucyM5NC4xMy4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wNS4wMCNWb3RpbmcgcmlnaHRzIGRlZmVuc2UgYXNzb2NpYXRpb25zIzk0LjEzLjIwLjAwLjAwCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGU5ZjlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHByb2Nlc3NQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLGZhbHNlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLTwvc2NyaXB0PgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VBZHZhbmNlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0FkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3ViUXVlcnlHZXQiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+ICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0VfQURWQU5DRURfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgbm93cmFwIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ3B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQnLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2Vfd3NkbF91cmwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBib29sZWFuIHRhYmxlSGFzRXJyb3JzID0gIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgU3RyaW5nW10gc2VydmljZUludGVyZmFjZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRVMiLChuZXcgQm9vbGVhbih0YWJsZUhhc0Vycm9ycykpLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyksInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VJbnRlcmZhY2VTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmE4YTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBtdXN0IGJlIGEgYnVzaW5lc3Mgbm9kZS4KLSAgIE5vZGUgYnVzTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoYnVzTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgc3ViUXVlcnlLZXlQcm9wZXJ0eS5zZXRTdWJRdWVyeUtleShzdWJRdWVyeUtleSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwlCi0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotICAgLy8gYnVzaW5lc3MgcGFyZW50IG5vZGUgbWF5IGJlIGVpdGhlciB0aGUgcHVibGlzaGVkIGl0ZW1zIGZvbGRlciBvciBhIHF1ZXJ5IG5vZGUuCi0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKGJ1c05vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0JVU0lORVNTX1BVQkxJU0hfU0VSVklDRSIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHNlY3Rpb25JZHMgPSBbInB1Ymxpc2hTZXJ2aWNlU2ltcGxlIiwicHVibGlzaFNlcnZpY2VBZHZhbmNlZCJdOwotICB2YXIgc3R5bGVGb3JtID0gInB1Ymxpc2hTZXJ2aWNlU3R5bGUiOwotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0FkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLGZhbHNlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZvcm0pCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotPCUKLSAgIFN0cmluZyBwdWJsaXNoU2VydmljZVN0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zW3N0eWxlRm9ybV0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+WzwlPXB1Ymxpc2hTZXJ2aWNlU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VTaW1wbGVTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybSA9IHB1Ymxpc2hTZXJ2aWNlU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtKTsKLSAgICBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMKSklPiI7Ci0gICAgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSklPiI7Ci0gICAgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04lPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04pKSU+IjsKLSAgICAKLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT5dKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0gPSBwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiKTsKLSAgICBwdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCkpJT4iOwotPCUKLSAgIFZlY3RvciBzZXJ2aWNlSW50ZXJmYWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgIFZlY3RvciBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZKTsKLSAgIGlmIChzZXJ2aWNlSW50ZXJmYWNlcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZUludGVyZmFjZXNDb3B5ID09IG51bGwpCi0gICAgICAgc2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2VydmljZUludGVyZmFjZXNDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VJbnRlcmZhY2VzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyxmYWxzZSk7Ci0gICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2VydmljZUludGVyZmFjZXNDb3B5LmFkZEVsZW1lbnQoc2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLHNlcnZpY2VJbnRlcmZhY2VzQ29weSk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHNlcnZpY2VJbnRlcmZhY2VzID0gbmV3IFZlY3RvcigpOwotICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxzZXJ2aWNlSW50ZXJmYWNlcyk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLHNlcnZpY2VJbnRlcmZhY2VzQ29weSk7Ci0gICB9Ci0lPgotPCUKLSAgIFZlY3RvciBzZXJ2aWNlTmFtZVZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgaWYgKHNlcnZpY2VOYW1lVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VOYW1lVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlzZXJ2aWNlTmFtZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIHNlcnZpY2VEZXNjcmlwdGlvblZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgIGlmIChzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZURlc2NyaXB0aW9uVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBzZXJ2aWNlQ2F0QmFnID0gKENhdGVnb3J5QmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgaWYgKHNlcnZpY2VDYXRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2VydmljZUNhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRDYXRlZ29yeVJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSAgIAotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSU+Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0lPgotICAgIHNob3dQdWJsaXNoRm9ybSg8JT1wdWJsaXNoU2VydmljZVN0eWxlSW5kZXglPik7ICAgIAotICB9Ci0gIAotICBmdW5jdGlvbiBzaG93UHVibGlzaEZvcm0oc3R5bGUpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICBmb3IgKHZhciBpPTA7aTxzZWN0aW9uSWRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGkgPT0gc3R5bGUpCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkc1tpXSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOyAgICAKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ1ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUFVCTElTSF9TRVJWSUNFIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgPGZvcm0gbmFtZT0icHVibGlzaFNlcnZpY2VTdHlsZSIgc3R5bGU9Im1hcmdpbi10b3A6MDsiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9GT1JNIiklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPiAgICAgICAgCi0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TSU1QTEUiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC9kaXY+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci08L3NjcmlwdD4gIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVhNGQ5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX1BVQkxJU0hfU0VSVklDRV9TSU1QTEVfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBub3dyYXAgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIG5vd3JhcCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdwdWJsaXNoU2VydmljZVNpbXBsZScsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfZGVzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9kZXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNpbmVzc0RldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNpbmVzc0RldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEwYTA5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzaW5lc3NEZXRhaWxzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudFRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0JVU0lORVNTX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9kZXRhaWxzdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICB2YXIgYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMc1RhYmxlID0gZ2V0VGFibGUoImJ1c2luZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTHMiKTsKLSAgICB2YXIgYnVzaW5lc3NEZXRhaWxzTmFtZXNUYWJsZSA9IGdldFRhYmxlKCJidXNpbmVzc0RldGFpbHNOYW1lcyIpOwotICAgIHZhciBidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnMiKTsKLSAgICB2YXIgYnVzaW5lc3NEZXRhaWxzSWRlbnRpZmllcnNUYWJsZSA9IGdldFRhYmxlKCJidXNpbmVzc0RldGFpbHNJZGVudGlmaWVycyIpOwotPCUKLSAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICBpZiAoZGlzY292ZXJ5VVJMVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGRpc2NvdmVyeVVSTFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGlzY292ZXJ5VVJMVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gKERpc2NvdmVyeVVSTClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxpKTsKLSAgICAgICBib29sZWFuIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93KCJidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0Rpc2NvdmVyeVVSTFJvdygiYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMcyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShkaXNjb3ZlcnlVUkwuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KGJ1c2luZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTHNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBuYW1lSW5kZXhWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgaWYgKG5hbWVJbmRleFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxuYW1lSW5kZXhWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KW5hbWVJbmRleFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJidXNpbmVzc0RldGFpbHNOYW1lcyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSIpKSU+Iiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coImJ1c2luZXNzRGV0YWlsc05hbWVzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9bmFtZS5nZXRMYW5nKCklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhidXNpbmVzc0RldGFpbHNOYW1lc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGRlc2NyaXB0aW9uSW5kZXhWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKTsKLSAgIGlmIChkZXNjcmlwdGlvbkluZGV4VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uSW5kZXhWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uSW5kZXhWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coImJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1kZXNjcmlwdGlvbi5nZXRMYW5nKCklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coYnVzaW5lc3NEZXRhaWxzRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgaWRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgaWYgKGlkVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGlkVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClpZFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTLGkpOwotICAgICAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93KCJidXNpbmVzc0RldGFpbHNJZGVudGlmaWVycyIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNJZGVudGlmaWVyUm93KCJidXNpbmVzc0RldGFpbHNJZGVudGlmaWVycyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhidXNpbmVzc0RldGFpbHNJZGVudGlmaWVyc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUgICAgICAgCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBjYXRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICBpZiAoY2F0VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGNhdFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyxpKTsKLSAgICAgICBib29sZWFuIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3coImJ1c2luZXNzRGV0YWlsc0NhdGVnb3JpZXMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzQ2F0ZWdvcnlSb3coImJ1c2luZXNzRGV0YWlsc0NhdGVnb3JpZXMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coYnVzaW5lc3NEZXRhaWxzQ2F0ZWdvcmllc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgICAgICB9ICAgICAgIAotICAgICB9Ci0gICB9Ci0KLSAgIC8vIEF1dGhlbnRpY2F0aW9uLgotICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICAgIGlmICg8JT0hcmVnRWxlbWVudC5pc0xvZ2dlZEluKCklPikKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXNpbmVzc0RldGFpbHNBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLQotICAgIHNob3dNYWluRm9ybSgpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKCkKLSAgewotICAgIGNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpOwotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NEZXRhaWxzRGlzY292ZXJ5VVJMVGFibGUoImJ1c2luZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTHMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRJU0NPVkVSWVVSTF9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5ESVNDT1ZFUllVUkxfVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RJU0NPVkVSWVVSTCU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJidXNpbmVzc0RldGFpbHNOYW1lcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5OQU1FX1ZJRVdJRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0xhbmd1YWdlSW5wdXRUYWJsZSgiYnVzaW5lc3NEZXRhaWxzRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0lkZW50aWZpZXJUYWJsZSgiYnVzaW5lc3NEZXRhaWxzSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNDYXRlZ29yeVRhYmxlKCJidXNpbmVzc0RldGFpbHNDYXRlZ29yaWVzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9CVVNJTkVTU19ERVRBSUxTIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZJT4iIHZhbHVlPSI8JT1mb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKSU+Ij4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVUQUlMU19FRElUQUJMRSIsc2VsZWN0ZWROb2RlLmdldE5vZGVOYW1lKCkpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19LRVkiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiYnVzaW5lc3NEZXRhaWxzTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiYnVzaW5lc3NEZXRhaWxzRGVzY3JpcHRpb25zIik7Ci0gICBTdHJpbmdbXSBkZXNjU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OUyIsIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNJZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJidXNpbmVzc0RldGFpbHNDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNDYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImJ1c2luZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTHMiKTsKLSAgIEJvb2xlYW4gZGlzY292ZXJ5VVJMU3BlY2lmaWNJbmZvID0gbmV3IEJvb2xlYW4oIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkaXNjb3ZlcnlVUkxTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzRGlzY292ZXJ5VVJMc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJidXNpbmVzc0RldGFpbHNBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC9kaXY+Ci0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9HZXRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9HZXRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkYjdjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvR2V0Rm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgc3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlci5yZW1vdmVBbGxFbGVtZW50cygpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5KTsKLSAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBTdHJpbmcgcGFyZW50UXVlcnlLZXk7Ci0gICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IHN1YlF1ZXJ5S2V5Lmxhc3RJbmRleE9mKCc6Jyk7Ci0gICBpZiAobGFzdFNlcGFyYXRvclBvcyA9PSAtMSkKLSAgICAgcGFyZW50UXVlcnlLZXkgPSAiIjsKLSAgIGVsc2UKLSAgICAgcGFyZW50UXVlcnlLZXkgPSBzdWJRdWVyeUtleS5zdWJzdHJpbmcoMCxsYXN0U2VwYXJhdG9yUG9zKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBwYXJlbnRGb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHBhcmVudFF1ZXJ5S2V5KTsKLSAgIE9iamVjdCBxdWVyeUl0ZW1Qcm9wZXJ0eSA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKTsKLSAgIE9iamVjdCBxdWVyeVN0eWxlQnVzID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMpOwotICAgT2JqZWN0IHF1ZXJ5U3R5bGVTZXIgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMpOwotICAgT2JqZWN0IHF1ZXJ5U3R5bGVTZXJJbnQgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgIEhhc2h0YWJsZSBwYXJlbnRRdWVyeURhdGEgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICBpZiAocXVlcnlJdGVtUHJvcGVydHkgIT0gbnVsbCkKLSAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sIHF1ZXJ5SXRlbVByb3BlcnR5KTsKLSAgIGlmIChxdWVyeVN0eWxlQnVzICE9IG51bGwpCi0gICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLCBxdWVyeVN0eWxlQnVzKTsKLSAgIGlmIChxdWVyeVN0eWxlU2VyICE9IG51bGwpCi0gICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUywgcXVlcnlTdHlsZVNlcik7Ci0gICBpZiAocXVlcnlTdHlsZVNlckludCAhPSBudWxsKQotICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLCBxdWVyeVN0eWxlU2VySW50KTsKLSAgIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgc3ViUXVlcnlUcmFuc2ZlclRhcmdldCA9IG5ldyBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KHNlbGVjdGVkTm9kZSxzdWJRdWVyeUtleSxwYXJlbnRRdWVyeURhdGEpOwotICAgdHJlZUVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VULHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpOwotICAgc3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlci5hZGRFbGVtZW50KHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpOwotICAgYm9vbGVhbiBoYXNUYXJnZXQgPSB0cnVlOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfR0VUX0ZPUk0iKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvcmVzdWx0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci08JQotICAgaW50IHF1ZXJ5SXRlbSA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkpOwotICAgSGFzaHRhYmxlIGFsbFVuaXF1ZU5vZGVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgVmVjdG9yIGFsbE5vZGVzID0gbmV3IFZlY3RvcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICB7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgcmVnTm9kZS5nZXRBbGxCdXNpbmVzc05vZGVzKGFsbE5vZGVzKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgcmVnTm9kZS5nZXRBbGxTZXJ2aWNlTm9kZXMoYWxsTm9kZXMpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgcmVnTm9kZS5nZXRBbGxTZXJ2aWNlSW50ZXJmYWNlTm9kZXMoYWxsTm9kZXMpOwotICAgfQotICAgCi0gICBmb3IgKGludCBpPTA7aTxhbGxOb2Rlcy5zaXplKCk7aSsrKQotICAgewotICAgICBOb2RlIG5vZGUgPSAoTm9kZSlhbGxOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgIGFsbFVuaXF1ZU5vZGVzLnB1dChub2RlLmdldFRyZWVFbGVtZW50KCkuZ2V0S2V5KCksbm9kZSk7Ci0gICB9Ci0KLSAgIGlmICghYWxsVW5pcXVlTm9kZXMuaXNFbXB0eSgpKQotICAgewotICAgICBPYmplY3RbXSBpdGVtTm9kZXMgPSBhbGxVbmlxdWVOb2Rlcy52YWx1ZXMoKS50b0FycmF5KCk7Ci0gICAgIFF1aWNrU29ydC5zb3J0KGl0ZW1Ob2RlcywwLGl0ZW1Ob2Rlcy5sZW5ndGgtMSk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGl0ZW1Ob2Rlcy5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgTm9kZSBpdGVtTm9kZSA9IChOb2RlKWl0ZW1Ob2Rlc1tpXTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGl0ZW1Ob2RlLmdldE5vZGVJZCgpLGZhbHNlKTsKLSAgICAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gbnVsbDsKLSAgICAgICBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICAgICAgewotICAgICAgICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgICAgIG5hbWUgPSBiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICAgZGVzY3JpcHRpb24gPSBiZS5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICB9Ci0gICAgICAgZWxzZSBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICAgICBuYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgIGRlc2NyaXB0aW9uID0gYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotICAgICAgIGVsc2UgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZU5vZGUpCi0gICAgICAgewotICAgICAgICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBUTW9kZWwgdE1vZGVsID0gc2lFbGVtZW50LmdldFRNb2RlbCgpOwotICAgICAgICAgbmFtZSA9IHRNb2RlbC5nZXROYW1lU3RyaW5nKCk7Ci0gICAgICAgICBkZXNjcmlwdGlvbiA9IHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICB9Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiR2V0Iiw8JT1pdGVtTm9kZS5nZXROb2RlSWQoKSU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uKSU+Iik7Ci08JQotICAgICB9Ci0lPgotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JSZXR1cm4oKSkpJT4iOwotPCUKLSAgIH0KLSU+Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08ZGl2IGlkPSJjb250ZW50Ij4KLSAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVCIpOwotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9mb3Jtcy9yZXN1bHRzZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPGZvcm0gdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBTdHJpbmcgdGFibGVUaXRsZTsKLSAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgewotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgZGVmYXVsdDoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUyIpOwotICAgfQotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0ge3RhYmxlVGl0bGUsIiJ9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIkdldCIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG90aGVyUHJvcGVydGllcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3Jlc3VsdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9UUkFOU0ZFUiIpJT4iIG9uQ2xpY2s9InRyYW5zZmVyU2VsZWN0aW9ucygnR2V0Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVGUkVTSCIpJT4iIG9uQ2xpY2s9InJlZnJlc2hTZWxlY3Rpb25zKCdHZXQnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0FERF9UT19GQVZPUklURVMiKSU+IiBvbkNsaWNrPSJhZGRTZWxlY3Rpb25zVG9GYXZvcml0ZXMoJ0dldCcsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQ0xFQVIiKSU+IiBvbkNsaWNrPSJjbGVhclNlbGVjdGlvbnMoJ0dldCcsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9JdGVtc1N1bW1hcnlGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9JdGVtc1N1bW1hcnlGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNmZGFjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvSXRlbXNTdW1tYXJ5Rm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIGludCBxdWVyeUl0ZW0gPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSlub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgVmVjdG9yIHN1bW1hcnlOb2RlcyA9IG5ldyBWZWN0b3IoKTsKLSAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFF1ZXJ5UGFyZW50RWxlbWVudCkKLSAgICAgcmVnTm9kZS5nZXREaXNjb3ZlcmVkTm9kZXMoc3VtbWFyeU5vZGVzLHF1ZXJ5SXRlbSk7Ci0gICBlbHNlIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCkKLSAgIHsKLSAgICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICAgIHsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICAgcmVnTm9kZS5nZXRQdWJsaXNoZWRCdXNpbmVzc05vZGVzKHN1bW1hcnlOb2Rlcyk7Ci0gICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgIHJlZ05vZGUuZ2V0UHVibGlzaGVkU2VydmljZU5vZGVzKHN1bW1hcnlOb2Rlcyk7Ci0gICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgIHJlZ05vZGUuZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzKHN1bW1hcnlOb2Rlcyk7Ci0gICAgIH0KLSAgIH0KLSAgIGJvb2xlYW4gaGFzVGFyZ2V0ID0gZmFsc2U7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JVEVNU19TVU1NQVJZIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotPCUgICAKLSAgIEhhc2h0YWJsZSBhbGxVbmlxdWVOb2RlcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgIGZvciAoaW50IGk9MDtpPHN1bW1hcnlOb2Rlcy5zaXplKCk7aSsrKQotICAgewotICAgICBOb2RlIHN1bW1hcnlOb2RlID0gKE5vZGUpc3VtbWFyeU5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgYWxsVW5pcXVlTm9kZXMucHV0KHN1bW1hcnlOb2RlLmdldFRyZWVFbGVtZW50KCkuZ2V0S2V5KCksc3VtbWFyeU5vZGUpOwotICAgfQotICAgCi0gICBpZiAoIWFsbFVuaXF1ZU5vZGVzLmlzRW1wdHkoKSkKLSAgIHsKLSAgICAgT2JqZWN0W10gaXRlbU5vZGVzID0gYWxsVW5pcXVlTm9kZXMudmFsdWVzKCkudG9BcnJheSgpOwotICAgICBRdWlja1NvcnQuc29ydChpdGVtTm9kZXMsMCxpdGVtTm9kZXMubGVuZ3RoLTEpOwotICAgICBmb3IgKGludCBpPTA7aTxpdGVtTm9kZXMubGVuZ3RoO2krKykKLSAgICAgewotICAgICAgIE5vZGUgaXRlbU5vZGUgPSAoTm9kZSlpdGVtTm9kZXNbaV07Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhpdGVtTm9kZS5nZXROb2RlSWQoKSxmYWxzZSk7Ci0gICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgICAgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgUXVlcnlOb2RlKQotICAgICAgIHsKLSAgICAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBuYW1lID0gcXVlcnlFbGVtZW50LmdldE5hbWUoKTsKLSAgICAgICAgIFN0cmluZyBudW1iZXJPZkNoaWxkTm9kZXNTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihpdGVtTm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpKTsKLSAgICAgICAgIHN3aXRjaCAocXVlcnlFbGVtZW50LmdldFF1ZXJ5VHlwZSgpKQotICAgICAgICAgewotICAgICAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTRVNfRk9VTkQiLG51bWJlck9mQ2hpbGROb2Rlc1N0cmluZyk7Ci0gICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VTX0ZPVU5EIixudW1iZXJPZkNoaWxkTm9kZXNTdHJpbmcpOwotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIixudW1iZXJPZkNoaWxkTm9kZXNTdHJpbmcpOwotICAgICAgICAgfSAgICAgICAgICAgICAKLSAgICAgICB9Ci0gICAgICAgZWxzZSBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICAgICAgewotICAgICAgICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgICAgIG5hbWUgPSBiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICAgZGVzY3JpcHRpb24gPSBiZS5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICB9Ci0gICAgICAgZWxzZSBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICAgICBuYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgIGRlc2NyaXB0aW9uID0gYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotICAgICAgIGVsc2UgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZU5vZGUpCi0gICAgICAgewotICAgICAgICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBUTW9kZWwgdE1vZGVsID0gc2lFbGVtZW50LmdldFRNb2RlbCgpOwotICAgICAgICAgbmFtZSA9IHRNb2RlbC5nZXROYW1lU3RyaW5nKCk7Ci0gICAgICAgICBkZXNjcmlwdGlvbiA9IHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICB9Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiU3VtbWFyeSIsPCU9aXRlbU5vZGUuZ2V0Tm9kZUlkKCklPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbiklPiIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08ZGl2IGlkPSJjb250ZW50Ij4KLSAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGUgPSBzZWxlY3RlZFRvb2wuZ2V0QWx0VGV4dCgpOwotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gc2VsZWN0ZWRUb29sLmdldEhpZ2hsaWdodGVkSW1hZ2VMaW5rKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvZm9ybXMvcmVzdWx0c2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDxmb3JtIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgU3RyaW5nIHRhYmxlVGl0bGU7Ci0gICBzd2l0Y2ggKHF1ZXJ5SXRlbSkKLSAgIHsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fUVVFUklFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUVVFUklFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgZGVmYXVsdDoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUyIpOwotICAgfQotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0ge3RhYmxlVGl0bGUsIiJ9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIlN1bW1hcnkiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvdGhlclByb3BlcnRpZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9yZXN1bHRzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFRlJFU0giKSU+IiBvbkNsaWNrPSJyZWZyZXNoU2VsZWN0aW9ucygnU3VtbWFyeScsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLTwlCi0gICBpZiAocXVlcnlJdGVtICE9IFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9RVUVSSUVTKQotICAgewotJT4gICAgICAgICAgICAgCi0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0FERF9UT19GQVZPUklURVMiKSU+IiBvbkNsaWNrPSJhZGRTZWxlY3Rpb25zVG9GYXZvcml0ZXMoJ1N1bW1hcnknLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci08JQotICAgfQotJT4gICAgICAgICAgICAgCi0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0NMRUFSIiklPiIgb25DbGljaz0iY2xlYXJTZWxlY3Rpb25zKCdTdW1tYXJ5Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTG9naW5VZGRpRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTG9naW5VZGRpRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZDI0YjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0xvZ2luVWRkaUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIG11c3QgYmUgYSByZWdpc3RyeSBub2RlLgotICAgTm9kZSByZWdOb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIHJlZ05vZGUuZ2V0VG9vbE1hbmFnZXIoKS5zZXRTZWxlY3RlZFRvb2xJZCgxKTsKLSAgIExpc3QgdG9vbHMgPSByZWdOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFRvb2xzKCk7Ci0gICBJdGVyYXRvciBpdGVyID0gdG9vbHMuaXRlcmF0b3IoKTsKLSAgIFRvb2wgdCA9IG51bGw7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkocmVnTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+TmV3IExvZ2luIEZvcm08L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0ocHVibGlzaFZhbHVlKQotICB7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ1ZGRpL2ltYWdlcy9wdWJsaXNoX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSAiTG9naW4iOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8L2Rpdj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sb2dpbl9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNob3dNYWluRm9ybSgwKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOGY5NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5yZXNwb25zZS5Db21wbGV0aW9uU3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgU3RyaW5nIHB1YkFzc2VydGlvbkZvcm0gPSAic2hvd1B1Ymxpc2hlckFzc2VydGlvbnNGb3JtIjsKLSAgIFN0cmluZyBwdWJsaXNoZXJBc3NlcnRpb25zQnVzaW5lc3MgPSAicHVibGlzaGVyQXNzZXJ0aW9uc0J1c2luZXNzIjsKLQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOyAgIAotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgIFN0cmluZyBkaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSA9ICJkaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSI7Ci0gICBTdHJpbmcgeGRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlID0gInhkaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSI7Ci0lPgotCi08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICBzdWJRdWVyeUtleVByb3BlcnR5LnNldFN1YlF1ZXJ5S2V5KHN1YlF1ZXJ5S2V5KTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPCUKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIGNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpOwotPCUKLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjwlPXB1YkFzc2VydGlvbkZvcm0lPiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0gICAKLSAgIFZlY3RvciBidXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyk7Ci0gICBMaXN0TWFuYWdlciBidXNpbmVzc0NvcHkgPSAoTGlzdE1hbmFnZXIpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU19DT1BZKTsKLSAgIGlmIChidXNpbmVzcyAhPSBudWxsKQotICAgewotICAgICBpZiAoYnVzaW5lc3NDb3B5ID09IG51bGwpCi0gICAgICAgYnVzaW5lc3NDb3B5ID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgIGVsc2UKLSAgICAgICBidXNpbmVzc0NvcHkuY2xlYXIoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8YnVzaW5lc3Muc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWJ1c2luZXNzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJ1c2luZXNzQ29weS5hZGQobGlzdEVsZW1lbnQpOwotJT4KLSAgICBhZGRQdWJsaXNoZXJBc3NlcnRpb25SZXN1bHRSb3coIjwlPXB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyU+Iiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlNfQ09QWSxidXNpbmVzc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBidXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgYnVzaW5lc3NDb3B5ID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMsYnVzaW5lc3MpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TX0NPUFksYnVzaW5lc3NDb3B5KTsKLSAgIH0KLSU+Ci0gIH0KLQotICBmdW5jdGlvbiBwb3B1bGF0ZUFzc2VydGlvblRhYmxlKCkgewotPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgQnVzaW5lc3NFbGVtZW50KQotICAgIHsKLSAgICAgIExpc3RNYW5hZ2VyIHB1YkFzc2VydGlvbnMgPSAoKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldFB1Ymxpc2hlckFzc2VydGlvbnMoKTsKLSAgICAgIGlmIChwdWJBc3NlcnRpb25zID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGFjdGlvbiA9IG5ldyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICAgICAgYWN0aW9uLnJ1bigpOwotJT4KLSAgICAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPCUKLSAgICAgICAgcHViQXNzZXJ0aW9ucyA9ICgoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UHVibGlzaGVyQXNzZXJ0aW9ucygpOwotICAgICAgfQotCi0gICAgICBwdWJBc3NlcnRpb25zID0gKChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRQdWJsaXNoZXJBc3NlcnRpb25zKCk7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gKChwdWJBc3NlcnRpb25zICE9IG51bGwpID8gcHViQXNzZXJ0aW9ucy5nZXRMaXN0RWxlbWVudHMoKSA6IG51bGwpOwotICAgICAgd2hpbGUgKGUgIT0gbnVsbCAmJiBlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQgcHViQXNzZXJ0aW9uRWxlbWVudCA9IChQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgICAgICBpbnQgdmlld0lkID0gbGUuZ2V0Vmlld0lkKCk7Ci0gICAgICAgIFN0cmluZyBkaXJlY3Rpb247Ci0gICAgICAgIGlmICgoKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKS5lcXVhbHMocHViQXNzZXJ0aW9uRWxlbWVudC5nZXRGcm9tS2V5KCkpKQotICAgICAgICAgIGRpcmVjdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX0ZST00iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGRpcmVjdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX1RPIik7Ci0gICAgICAgIExpc3RFbGVtZW50IHNwID0gKExpc3RFbGVtZW50KXB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U2VydmljZVByb3ZpZGVyKCk7Ci0gICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBzcC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICAgaW50IHRhcmdldFRvb2xJZCA9IHNwLmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gc3AuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgIGludCBzdWJRdWVyeUl0ZW1JZCA9IHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U3ViUXVlcnlJdGVtSWQoKTsKLSAgICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TLHN1YlF1ZXJ5SXRlbUlkLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLGZhbHNlKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoKEJ1c2luZXNzRW50aXR5KXNwLmdldE9iamVjdCgpKS5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICBTdHJpbmcgZGVzYyA9ICgoQnVzaW5lc3NFbnRpdHkpc3AuZ2V0T2JqZWN0KCkpLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgICBTdHJpbmcgc3RhdHVzID0gcHViQXNzZXJ0aW9uRWxlbWVudC5nZXRTdGF0dXMoKTsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSBwdWJBc3NlcnRpb25FbGVtZW50LmdldEtleWVkUmVmKCkuZ2V0S2V5VmFsdWUoKTsKLSU+Ci0gICAgICBhZGRBc3NlcnRpb24oIjwlPWRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4iLDwlPXZpZXdJZCU+LCI8JT1kaXJlY3Rpb24lPiIsIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzYyklPiIsIjwlPXN0YXR1cyU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHR5cGUpJT4iKTsKLTwlCi0gICAgICB9Ci0gICAgfQotJT4KLSAgfQotCi0gIGZ1bmN0aW9uIGFkZEFzc2VydGlvbih0YWJsZUNvbnRhaW5lcklkLHZpZXdJZCxkaXJlY3Rpb24sdXJsLG5hbWUsZGVzYyxzdGF0dXMsdHlwZSkKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW41ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIHJvd0NoZWNrYm94Lm5hbWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQlPiI7Ci0gICAgcm93Q2hlY2tib3gudmFsdWUgPSB2aWV3SWQ7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9USElTX0JVU0lORVNTIiklPiIpKTsKLQotICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlyZWN0aW9uKSk7Ci0KLSAgICB2YXIgbmFtZURldGFpbHNMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIG5hbWVEZXRhaWxzTGluay5ocmVmID0gdXJsOwotICAgIG5hbWVEZXRhaWxzTGluay50YXJnZXQgPSAiPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IjsKLSAgICBuYW1lRGV0YWlsc0xpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmFtZSkpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQobmFtZURldGFpbHNMaW5rKTsKLQotICAgIGNvbHVtbjQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcoZGVzYykpKTsKLQotICAgIGNvbHVtbjUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RhdHVzKSk7Ci0KLSAgICBjb2x1bW42LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR5cGUpKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjQuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjUuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjYuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjUpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW42KTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLQotICB9Ci0KLSAgZnVuY3Rpb24gYWRkUHVibGlzaGVyQXNzZXJ0aW9uUmVzdWx0Um93KHRhYmxlQ29udGFpbmVySWQsbm9kZUlkLHVybCxuYW1lLGRlc2NyaXB0aW9uKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsbm9kZUlkKSk7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9USElTX0JVU0lORVNTIiklPiIpKTsKLQotICAgIHZhciBkaXJlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBkaXJlY3Rpb24uaWQgPSAibGFiZWxfcHVibGlzaGVyX2Fzc2VydGlvbl9kaXJlY3Rpb24iOwotICAgIGRpcmVjdGlvbi5uYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfRElSRUNUSU9OJT4iOwotICAgIGRpcmVjdGlvbi5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgZGlyZWN0aW9uLm9wdGlvbnNbMF0gPSBuZXcgT3B0aW9uKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9GUk9NIiklPiIsICI8JT1TdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLkRJUkVDVElPTl9GUk9NKSU+Iik7Ci0gICAgZGlyZWN0aW9uLm9wdGlvbnNbMV0gPSBuZXcgT3B0aW9uKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9UTyIpJT4iLCAiPCU9U3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5ESVJFQ1RJT05fVE8pJT4iKTsKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRpcmVjdGlvbik7Ci0KLSAgICB2YXIgbmFtZURldGFpbHNMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIG5hbWVEZXRhaWxzTGluay5ocmVmID0gdXJsOwotICAgIG5hbWVEZXRhaWxzTGluay50YXJnZXQgPSAiPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IjsKLSAgICBuYW1lRGV0YWlsc0xpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmFtZSkpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQobmFtZURldGFpbHNMaW5rKTsKLQotICAgIGNvbHVtbjQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcoZGVzY3JpcHRpb24pKSk7Ci0KLSAgICB2YXIgYXNzZXJ0aW9uVHlwZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIGFzc2VydGlvblR5cGUuaWQgPSAibGFiZWxfcHVibGlzaGVyX2Fzc2VydGlvbl90eXBlIjsKLSAgICBhc3NlcnRpb25UeXBlLm5hbWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFJT4iOwotICAgIGFzc2VydGlvblR5cGUuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIGFzc2VydGlvblR5cGUub3B0aW9uc1swXSA9IG5ldyBPcHRpb24oIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fVFlQRV9QQVJFTlRfQ0hJTEQiKSU+IiwgIjwlPVN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRV9QQVJFTlRfQ0hJTEQpJT4iKTsKLSAgICBhc3NlcnRpb25UeXBlLm9wdGlvbnNbMV0gPSBuZXcgT3B0aW9uKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX1RZUEVfUEVFUl9UT19QRUVSIiklPiIsICI8JT1TdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEVfUEVFUl9UT19QRUVSKSU+Iik7Ci0gICAgYXNzZXJ0aW9uVHlwZS5vcHRpb25zWzJdID0gbmV3IE9wdGlvbigiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX0lERU5USVRZIiklPiIsICI8JT1TdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEVfSURFTlRJVFkpJT4iKTsKLSAgICBjb2x1bW41LmFwcGVuZENoaWxkKGFzc2VydGlvblR5cGUpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMy5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uNS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjMpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW40KTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoZm9ybSxsb2NhdGlvbikKLSAgewotICAgIGZvcm0uYWN0aW9uID0gbG9jYXRpb247Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoIjwlPXB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyU+IiwgIjwlPVVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEJT4iLCBmb3JtLCBmYWxzZSk7Ci0gICAgICBmb3JtLnN1Ym1pdCgpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGNoZWNrVGFibGVFbnRyaWVzQW5kU3VibWl0KHRhYmxlQ29udGFpbmVySWQsZm9ybSxsb2NhdGlvbikKLSAgewotICAgIGlmIChnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCkgPiAwKSB7Ci0gICAgICBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoZm9ybSxsb2NhdGlvbik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGFsZXJ0KCI8JT1jb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2hlY2tUYWJsZVNpemVBbmRTdWJtaXQodGFibGVDb250YWluZXJJZCxmb3JtLGxvY2F0aW9uKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID4gbnVtYmVyT2ZIZWFkZXJSb3dzKSB7Ci0gICAgICBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoZm9ybSxsb2NhdGlvbik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGFsZXJ0KCI8JT1jb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxkaXYgaWQ9InB1Ymxpc2hlckFzc2VydGlvbnMiPgotICAgICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgICA8dGFibGUgd2lkdGg9IjkwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TX0RFU0MiKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+JywnPCU9eGRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfQVNTRVJUSU9OUyIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gICAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPSgoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXREZWZhdWx0TmFtZVN0cmluZygpJT48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48bGFiZWwgZm9yPSJsYWJlbF9wdWJsaXNoZXJfYXNzZXJ0aW9uX2RpcmVjdGlvbiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElSRUNUSU9OIiklPjwvbGFiZWw+PC90aD4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1MiKSU+PC90aD4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC90aD4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU1RBVFVTIiklPjwvdGg+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjxsYWJlbCBmb3I9ImxhYmVsX3B1Ymxpc2hlcl9hc3NlcnRpb25fdHlwZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQVNTRVJUSU9OX1RZUEUiKSU+PC9sYWJlbD48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDx0YWJsZSB3aWR0aD0iOTAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5DT01QTEVURV9BU1NFUlRJT05TX1ZJU0lCSUxJVFlfREVTQyIpJT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0KLTwlCi0gICBib29sZWFuIHRhYmxlSGFzRXJyb3JzID0gIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TKTsKLSAgIFN0cmluZ1tdIGJ1c1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9CVVNJTkVTU0VTIiwobmV3IEJvb2xlYW4odGFibGVIYXNFcnJvcnMpKS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSwicHVibGlzaGVyQXNzZXJ0aW9ucyIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKHB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYnVzU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNQdWJsaXNoZXJBc3NlcnRpb25zX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZChwdWJBc3NlcnRpb25Gb3JtKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fU0hPV19BTExfUFVCTElTSEVSX0FTU0VSVElPTlMiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQodGhpcy5mb3JtLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AiKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQ09NUExFVEVfUFVCTElTSEVSX0FTU0VSVElPTlMiKSU+IiBvbkNsaWNrPSJjaGVja1RhYmxlRW50cmllc0FuZFN1Ym1pdCgnPCU9ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPicsdGhpcy5mb3JtLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9Db21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIikpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT4iIG9uQ2xpY2s9ImNoZWNrVGFibGVTaXplQW5kU3VibWl0KCc8JT1wdWJsaXNoZXJBc3NlcnRpb25zQnVzaW5lc3MlPicsdGhpcy5mb3JtLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCIpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRU1PVkVfUFVCTElTSEVSX0FTU0VSVElPTlMiKSU+IiBvbkNsaWNrPSJjaGVja1RhYmxlRW50cmllc0FuZFN1Ym1pdCgnPCU9ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPicsdGhpcy5mb3JtLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCIpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgPC9mb3JtPgotCi0gICAgPC9kaXY+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHBvcHVsYXRlQXNzZXJ0aW9uVGFibGUoKTsKLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNjA5ZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgU3RyaW5nIHNrID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICBzdWJRdWVyeUtleVByb3BlcnR5LnNldFN1YlF1ZXJ5S2V5KHNrKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleSk7Ci0gICBWZWN0b3IgcmVmZXJlbmNlZFNlcnZpY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFUyk7Ci0gICBpZiAocmVmZXJlbmNlZFNlcnZpY2VzID09IG51bGwpCi0gICB7Ci0gICAgIHJlZmVyZW5jZWRTZXJ2aWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgQnVzaW5lc3NFbnRpdHkgYnVzaW5lc3NFbnRpdHkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgIFN0cmluZyBidXNpbmVzc0tleSA9IGJ1c2luZXNzRW50aXR5LmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgIEJ1c2luZXNzU2VydmljZXMgYnVzaW5lc3NTdmNzID0gYnVzaW5lc3NFbnRpdHkuZ2V0QnVzaW5lc3NTZXJ2aWNlcygpOwotICAgICBpZiAoYnVzaW5lc3NTdmNzICE9IG51bGwpCi0gICAgIHsKLSAgICAgICBWZWN0b3IgYnVzaW5lc3NTdmNWZWN0b3IgPSBidXNpbmVzc1N2Y3MuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICAgZm9yIChpbnQgaT0wO2k8YnVzaW5lc3NTdmNWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICB7Ci0gICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZSA9IChCdXNpbmVzc1NlcnZpY2UpYnVzaW5lc3NTdmNWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgaWYgKCFidXNTZXJ2aWNlLmdldEJ1c2luZXNzS2V5KCkuZXF1YWxzKGJ1c2luZXNzS2V5KSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQoYnVzU2VydmljZSk7Ci0gICAgICAgICAgIHJlZmVyZW5jZWRTZXJ2aWNlcy5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVMscmVmZXJlbmNlZFNlcnZpY2VzKTsKLSAgIH0KLQotICAgZm9yIChpbnQgaT0wO2k8cmVmZXJlbmNlZFNlcnZpY2VzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXJlZmVyZW5jZWRTZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMsZmFsc2UpOwotICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICBTdHJpbmcgbmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1JlZmVyZW5jZXMiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uKSU+Iik7Ci08JQotICAgfQotCi0gICBWZWN0b3Igc2VydmljZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyk7Ci0gICBpZiAoc2VydmljZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyxmYWxzZSk7Ci0gICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBTdHJpbmcgbmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzU2VydmljZXMiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1JlZmVyZW5jZVRhYmxlKHRhYmxlQ29udGFpbmVySWQsaW5wdXROYW1lLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaW5wdXRzID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChpbnB1dE5hbWUsaW5wdXRzLml0ZW0oMCkuY2hlY2tlZCkpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZWZlcmVuY2VUYWJsZSgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzUmVmZXJlbmNlcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUkVGRVJFTkNFRF9TRVJWSUNFX1NFTEVDVF9TVEFURSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzU2VydmljZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzQWRkU2VydmljZXMoZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNTZXJ2aWNlcyIpOwotICAgIGlmICh0YWJsZS5yb3dzLmxlbmd0aCA9PSBudW1iZXJPZkhlYWRlclJvd3MpCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRVMiKSklPiIpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OJT4udmFsdWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fQUREJT4iOwotICAgICAgcHJvY2Vzc0Zvcm0oZm9ybSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1JlbW92ZVJlZmVyZW5jZXMoZm9ybSkKLSAgewotICAgIHZhciBudW1iZXJPZlNlbGVjdGlvbnMgPSBnZXROdW1iZXJPZlNlbGVjdGlvbnMoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1JlZmVyZW5jZXMiKTsKLSAgICBpZiAoZ2V0TnVtYmVyT2ZTZWxlY3Rpb25zKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNSZWZlcmVuY2VzIikgPT0gMCkKLSAgICAgIGFsZXJ0KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19SRUZFUkVOQ0VfU0VMRUNURUQiKSklPiIpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OJT4udmFsdWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fUkVNT1ZFJT4iOwotICAgICAgcHJvY2Vzc0Zvcm0oZm9ybSk7Ci0gICAgfQotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGRpdiBpZD0ibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzIj4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDowOyI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTiU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX0RFU0MiKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgU3RyaW5nW10gcHJvamVjdGlvbnNTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfUkVGRVJFTkNFRF9TRVJWSUNFUyIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyksIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlcyIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzUmVmZXJlbmNlcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHByb2plY3Rpb25zU3BlY2lmaWNJbmZvKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmVuYWJsZUR5bmFtaWMoZmFsc2UpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgU3RyaW5nW10gc2VydmljZXNTcGVjaWZpY0luZm8gPSB7IkZPUk1fT1BUSU9OX1NFUlZJQ0VTIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSwibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzU2VydmljZXMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzZXJ2aWNlc1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0F1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0FERF9TRVJWSUNFUyIpJT4iIG9uQ2xpY2s9InByb2Nlc3NBZGRTZXJ2aWNlcyh0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFTU9WRV9SRUZFUkVOQ0VTIiklPiIgb25DbGljaz0icHJvY2Vzc1JlbW92ZVJlZmVyZW5jZXModGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2Zvcm0+Ci0gICAgPC9kaXY+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9PcGVuUmVnaXN0cnlGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9PcGVuUmVnaXN0cnlGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5ZGRmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvT3BlblJlZ2lzdHJ5Rm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTUgICAxMzUzMDcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci1Ob2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLVVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLU9wZW5SZWdpc3RyeVRvb2wgb3BlblJlZ2lzdHJ5VG9vbCA9IChPcGVuUmVnaXN0cnlUb29sKSh1ZGRpTWFpbk5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotRW51bWVyYXRpb24gZmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzID0gb3BlblJlZ2lzdHJ5VG9vbC5nZXRGYXZvcml0ZVJlZ2lzdHJ5RWxlbWVudHMoKTsKLVZlY3RvciBmYXZvcml0ZVJlZ2lzdHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLXdoaWxlIChmYXZvcml0ZVJlZ2lzdHJ5RWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gIGZhdm9yaXRlUmVnaXN0cnlMaXN0LmFkZEVsZW1lbnQoZmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzLm5leHRFbGVtZW50KCkpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfT1BFTl9SRUdJU1RSWSIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gZmlsbEZhdm9yaXRlSW5mbyhmYXZvcml0ZVJlZ2lzdHJ5U2VsZWN0KQotICAgIHsKLSAgICAgIHZhciBzZWxlY3RlZEZhdm9yaXRlUmVnaXN0cnlJbmRleCA9IGZhdm9yaXRlUmVnaXN0cnlTZWxlY3Quc2VsZWN0ZWRJbmRleC0xOwotICAgICAgaWYgKHNlbGVjdGVkRmF2b3JpdGVSZWdpc3RyeUluZGV4ID49IDApCi0gICAgICB7Ci0gICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9wZW5SZWdpc3RyeUZvcm0iKTsKLSAgICAgICAgc3dpdGNoIChzZWxlY3RlZEZhdm9yaXRlUmVnaXN0cnlJbmRleCkKLSAgICAgICAgewotICAgICAgICAgIDwlCi0gICAgICAgICAgZm9yIChpbnQgaT0wO2k8ZmF2b3JpdGVSZWdpc3RyeUxpc3Quc2l6ZSgpO2krKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudClmYXZvcml0ZVJlZ2lzdHJ5TGlzdC5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgJT4KLSAgICAgICAgICAgIGNhc2UgPCU9aSU+OgotICAgICAgICAgICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShmYXZSZWdFbGVtZW50LmdldE5hbWUoKSklPiI7Ci0gICAgICAgICAgICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShmYXZSZWdFbGVtZW50LmdldElucXVpcnlVUkwoKSklPiI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIDwlCi0gICAgICAgICAgfQotICAgICAgICAgICU+Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gICAgewotICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3BlblJlZ2lzdHJ5Rm9ybSIpOwotICAgICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylvcGVuUmVnaXN0cnlUb29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSkpJT4iOwotICAgICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpb3BlblJlZ2lzdHJ5VG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKSklPiI7Ci0gICAgICBzaG93TWFpbkZvcm0oKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICAgIHsKLSAgICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB9Ci0KLSAgIAotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgPCUKLSAgICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ1ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fUkVHSVNUUlkiKTsKLSAgICAgICU+Ci0gICAgICA8JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8dGFibGU+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PUEVOX1JFR0lTVFJZX0RFU0MiKSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICAKLSAgICAgIDxmb3JtIGlkPSJvcGVuUmVnaXN0cnlGb3JtIiBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgCi0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3JlZ2lzdHJ5X25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFR0lTVFJZX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgaWYgKCFvcGVuUmVnaXN0cnlUb29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3JlZ2lzdHJ5X25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfaW5xdWlyeV91cmwiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIGlmICghb3BlblJlZ2lzdHJ5VG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfaW5xdWlyeV91cmwiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvZm9ybT4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBzZXREZWZhdWx0cygpOwotICAgICAgPC9zY3JpcHQ+Ci0gICAgICAKLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjNlZGUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZm9ybUFjdGlvbi50b1N0cmluZygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPgotICA8aW5wdXQgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkZSQU1FX05BTUUlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9Zm9ybUZyYW1lTmFtZSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iPgotPC9mb3JtPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0RldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdEZXRhaWxzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YWY0NWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0RldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI2OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIFRoZSBzZWxlY3RlZCBub2RlIG11c3QgYmUgYSByZWdpc3RyeSBub2RlLgotICAgTm9kZSByZWdpc3RyeU5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gcmVnaXN0cnlOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGN1cnJlbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKSk7ICAgCi0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICByZWdFbGVtZW50LnJlZnJlc2hNZXRhKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9SRUdJU1RSWV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgdmFyIHJlZ2lzdHJ5RGV0YWlsc05hbWVUYWJsZSA9IGdldFRhYmxlKCJyZWdpc3RyeURldGFpbHNOYW1lIik7Ci08JQotICAgU3RyaW5nIG5hbWUgPSByZWdFbGVtZW50LmdldE5hbWUoKTsKLSAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FKTsgICAKLSU+Ci0gICAgYWRkRGV0YWlsc1NpbmdsZUl0ZW1Sb3coInJlZ2lzdHJ5RGV0YWlsc05hbWUiLGZhbHNlKTsKLSAgICBzZXREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3coInJlZ2lzdHJ5RGV0YWlsc05hbWUiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIpOwotPCUKLSAgIGlmIChpc0Vycm9yKQotICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocmVnaXN0cnlEZXRhaWxzTmFtZVRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgfQotICAgCi0gICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgYm9vbGVhbiBjb250YWluc1VzZXJEZWZpbmVkQ2F0ZWdvcmllczsKLSAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXMgIT0gbnVsbCAmJiB1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICB7Ci0lPgotICAgIHZhciByZWdpc3RyeUNhdGVnb3JpZXNUYWJsZSA9IGdldFRhYmxlKCJyZWdpc3RyeVVzZXJEZWZpbmVkQ2F0ZWdvcmllcyIpOwotPCUgICAKLSAgICAgY29udGFpbnNVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSB0cnVlOwotICAgICBBcnJheUxpc3QgdXNlckRlZmluZWRDYXRlZ29yaWVzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgZG8KLSAgICAgewotICAgICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0xpc3QuYWRkKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5uZXh0RWxlbWVudCgpKTsKLSAgICAgfSB3aGlsZSAodXNlckRlZmluZWRDYXRlZ29yaWVzLmhhc01vcmVFbGVtZW50cygpKTsKLSAgICAgQ2F0ZWdvcnlNb2RlbFtdIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5ID0gbmV3IENhdGVnb3J5TW9kZWxbdXNlckRlZmluZWRDYXRlZ29yaWVzTGlzdC5zaXplKCldOwotICAgICB1c2VyRGVmaW5lZENhdGVnb3JpZXNMaXN0LnRvQXJyYXkodXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXkpOwotICAgICBRdWlja1NvcnQuc29ydCh1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheSwwLHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5Lmxlbmd0aC0xKTsKLSAgICAgU3RyaW5nQnVmZmVyIGZpbGVOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICBmb3IgKGludCBpPTA7aTx1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheS5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgbmFtZSA9IHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5W2ldLmdldERpc3BsYXlOYW1lKCk7Ci0gICAgICAgU3RyaW5nIHRNb2RlbEtleSA9IHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5W2ldLmdldFRNb2RlbEtleSgpOwotICAgICAgIGJvb2xlYW4gY2hlY2tlZCA9IHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5W2ldLmlzQ2hlY2tlZCgpOwotICAgICAgIGZpbGVOYW1lLnNldExlbmd0aCgwKTsKLSAgICAgICBpZiAodXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXlbaV0uaXNEYXRhTG9hZGVkKCkpCi0gICAgICAgICBmaWxlTmFtZS5hcHBlbmQodXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXlbaV0uZ2V0Q2F0ZWdvcnlLZXkoKSkuYXBwZW5kKCIudHh0Iik7Ci0gICAgICAgZWxzZQotICAgICAgICAgZmlsZU5hbWUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKSk7Ci0gICAgICAgYm9vbGVhbiBoYXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5VU0VSX0RFRklORURfQ0FURUdPUklFUyx0TW9kZWxLZXkpOwotJT4KLSAgICBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvdygicmVnaXN0cnlVc2VyRGVmaW5lZENhdGVnb3JpZXMiLCI8JT10TW9kZWxLZXklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+Iiw8JT1jaGVja2VkJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShmaWxlTmFtZS50b1N0cmluZygpKSU+Iiw8JT1oYXNFcnJvciU+KTsKLTwlCi0gICAgICAgaWYgKGhhc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHJlZ2lzdHJ5Q2F0ZWdvcmllc1RhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzKzwlPWklPl0sImVycmFudFJvdyIpOwotPCUgICAgICAgCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0gICBlbHNlCi0gICAgIGNvbnRhaW5zVXNlckRlZmluZWRDYXRlZ29yaWVzID0gZmFsc2U7ICAgCi0lPiAgICAgICAKLSAgICBzaG93TWFpbkZvcm0oKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKCkKLSAgewotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0RldGFpbHNTaW5nbGVJdGVtVGFibGUoInJlZ2lzdHJ5RGV0YWlsc05hbWUiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZVJlZ2lzdHJ5QWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRUdJU1RSWV9ERVRBSUxTIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVRBSUxTX0VESVRBQkxFIixyZWdpc3RyeU5vZGUuZ2V0Tm9kZU5hbWUoKSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicmVnaXN0cnlEZXRhaWxzTmFtZSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFR0lTVFJZX05BTUUiKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9cmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgewotJT4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9VUkwiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9cmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIH0KLSAgIAotICAgaWYgKGNvbnRhaW5zVXNlckRlZmluZWRDYXRlZ29yaWVzKQotICAgewotICAgICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicmVnaXN0cnlVc2VyRGVmaW5lZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRfY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgfQotICAgaWYgKHJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotJT4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVNFUklEIiklPgotICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgIDwlPXJlZ0VsZW1lbnQuZ2V0VXNlcklkKCklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIH0KLSAgIAotICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IHJlZ0VsZW1lbnQuZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHJlZ2lzdHJhdGlvblVSTCkpCi0gICB7Ci0lPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFR0lTVFJZX1VSTCIscmVnaXN0cmF0aW9uVVJMKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgfQotJT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L2Rpdj4gICAgICAKLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsgIAotPC9zY3JpcHQ+ICAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MDdkMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZJTkRfQURWQU5DRURfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTM1IHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJpbnB1dF9maW5kX2J1c2luZXNzZXNfYWR2YW5jZV9vd25lZCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+IiBvbkNsaWNrPSJ0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LHRoaXMuY2hlY2tlZCkiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfYnVzaW5lc3Nlc19hZHZhbmNlX293bmVkIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PV05FRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkSWRlbnRpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvaWRlbnRpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgU3RyaW5nW10gc2lTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VTIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyksImZpbmRCdXNpbmVzc2VzQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoc2lTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRGlzY292ZXJ5VVJMcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5ldyBCb29sZWFuKGZhbHNlKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2Rpc2NvdmVyeVVSTHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDb21tb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYWR2YW5jZWRDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MTQ4MzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0iZmluZEJ1c2luZXNzZXMiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gbmFtZT0iZmluZEJ1c2luZXNzZXNTdHlsZSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFQVJDSF9UWVBFIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfYnVzaW5lc3Nfc2ltcGxlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9idXNpbmVzc19zaW1wbGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NJTVBMRSIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfYnVzaW5lc3NfYWR2YW5jZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9idXNpbmVzc19hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfYnVzaW5lc3NfdXVpZCIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX2J1c2luZXNzX3V1aWQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1VVSUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3NVVUlEIik7Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSB7InVkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uSlNQLmpzcCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSwiRk9STV9MQUJFTF9GSU5EX0JVU0lORVNTX1VVSURfREVTQyJ9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG90aGVyUHJvcGVydGllcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjN2UzNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIGNvdWxkIGJlIHRoZSByZWdpc3RyeSBvciBxdWVyeSBub2Rlcy4KLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJmaW5kQnVzaW5lc3Nlc1NpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9CVVNJTkVTU0VTX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9idXNpbmVzc2VzX3NpbXBsZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfZmluZF9idXNpbmVzc2VzX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWMzNWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgY291bGQgYmUgdGhlIHJlZ2lzdHJ5IG9yIHF1ZXJ5IG5vZGVzLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgc3ViUXVlcnlLZXlQcm9wZXJ0eS5zZXRTdWJRdWVyeUtleShzdWJRdWVyeUtleSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwlCi0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgTm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfUkVHSVNUUllfRklORCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHNlY3Rpb25JZHMgPSBbImZpbmRCdXNpbmVzc2VzIiwiZmluZFNlcnZpY2VzIiwiZmluZFNlcnZpY2VJbnRlcmZhY2VzIl07Ci0gIHZhciBmaW5kQnVzaW5lc3Nlc1NlY3Rpb25JZHMgPSBbImZpbmRCdXNpbmVzc2VzU2ltcGxlIiwiZmluZEJ1c2luZXNzZXNBZHZhbmNlZCIsImZpbmRCdXNpbmVzc1VVSUQiXTsKLSAgdmFyIGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHMgPSBbImZpbmRTZXJ2aWNlc1NpbXBsZSIsImZpbmRTZXJ2aWNlc0FkdmFuY2VkIiwiZmluZFNlcnZpY2VVVUlEIl07Ci0gIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNTZWN0aW9uSWRzID0gWyJmaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGUiLCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZCIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJRCJdOwotICB2YXIgc3R5bGVGb3JtcyA9IFsiZmluZEJ1c2luZXNzZXNTdHlsZSIsImZpbmRTZXJ2aWNlc1N0eWxlIiwiZmluZFNlcnZpY2VJbnRlcmZhY2VzU3R5bGUiXTsKLSAgdmFyIGF1dGhlbnRpY2F0aW9uU2VjdGlvbklkcyA9IFsiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIiwiZmluZFNlcnZpY2VzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iXTsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZVF1ZXJ5TmFtZSgpCi0gIHsKLTwlCi0gICBTdHJpbmcgc3ViUXVlcnlLZXlWYWx1ZSA9IHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKTsKLSAgIGJvb2xlYW4gaXNTdWJRdWVyeSA9IChzdWJRdWVyeUtleVZhbHVlICE9IG51bGwgJiYgc3ViUXVlcnlLZXlWYWx1ZS5sZW5ndGgoKSA+IDApOwotJT4gICAKLSAgICBpZiAoPCU9aXNTdWJRdWVyeSU+KQotICAgIHsKLSAgICAgIC8vIFN1YnF1ZXJpZXMgbXVzdCBoYXZlIGEgbmFtZSB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mIHRoZSBjdXJyZW50IHF1ZXJ5IG9yIHRoZSBjbG9zZXN0IHF1ZXJ5IGVuY2xvc2luZyB0aGlzIG9iamVjdC4KLTwlCi0gICBTdHJpbmcgY3VycmVudFF1ZXJ5TmFtZSA9ICIiOwotICAgaWYgKHNlbGVjdGVkTm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICAgY3VycmVudFF1ZXJ5TmFtZSA9IHNlbGVjdGVkTm9kZS5nZXROb2RlTmFtZSgpOwotICAgZWxzZSBpZiAoc2VsZWN0ZWROb2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgewotICAgICBOb2RlIHBhcmVudE5vZGUgPSBzZWxlY3RlZE5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgUXVlcnlOb2RlKQotICAgICAgIGN1cnJlbnRRdWVyeU5hbWUgPSBwYXJlbnROb2RlLmdldE5vZGVOYW1lKCk7Ci0gICB9Ci0lPiAgICAKLSAgICAgIHZhciBxdWVyeU5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlOYW1lIikudmFsdWU7Ci0gICAgICBpZiAocXVlcnlOYW1lID09ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY3VycmVudFF1ZXJ5TmFtZSklPiIpCi0gICAgICB7Ci0gICAgICAgIGFsZXJ0KCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1FVRVJZX05BTUVfQ09ORkxJQ1QiKSU+Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoIWhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlUXVlcnlOYW1lKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+LnZhbHVlID0gIjwlPXN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSU+IjsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+LnZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1ZXJ5TmFtZSIpLnZhbHVlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAocHJvY2Vzc0Zvcm0oZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTmFtZUZpbmRRdWFsaWZpZXJzKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkTmFtZXMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0lkZW50aWZpZXJUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZElkZW50aWZpZXJzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSx0cnVlKTsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRGlzY292ZXJ5VVJMVGFibGUoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NGaW5kUXVhbGlmaWVyVGFibGUoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKHByb2Nlc3NGb3JtKGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgiZmluZFNlcnZpY2VzQWR2YW5jZWRCdXNpbmVzcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgiZmluZFNlcnZpY2VzQWR2YW5jZWROYW1lcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc05hbWVGaW5kUXVhbGlmaWVycygiZmluZFNlcnZpY2VzQWR2YW5jZWROYW1lcyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSgiZmluZFNlcnZpY2VzQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgiZmluZFNlcnZpY2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc0ZpbmRRdWFsaWZpZXJUYWJsZSgiZmluZFNlcnZpY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKHByb2Nlc3NGb3JtKGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRTZXJ2aWNlIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NOYW1lRmluZFF1YWxpZmllcnMoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZSIsZm9ybSk7Ci0gICAgICBwcm9jZXNzSWRlbnRpZmllclRhYmxlKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZElkZW50aWZpZXJzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc0ZpbmRRdWFsaWZpZXJUYWJsZSgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgLy8gU2V0IHRoZSBxdWVyeSBuYW1lCi0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1ZXJ5TmFtZSIpLnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKSklPiI7Ci0gICAgdmFyIHNlYXJjaEZvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2hGb3IiKTsKLSAgICBzZWFyY2hGb3Iuc2VsZWN0ZWRJbmRleCA9IDwlPWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKSU+OwotICAgIHNldERlZmF1bHRzRm9yRmluZEJ1c2luZXNzZXNGb3JtcygpOwotICAgIHNldERlZmF1bHRzRm9yRmluZFNlcnZpY2VzRm9ybXMoKTsKLSAgICBzZXREZWZhdWx0c0ZvckZpbmRTZXJ2aWNlSW50ZXJmYWNlc0Zvcm1zKCk7Ci0gICAgc2hvd01haW5Gb3JtKHNlYXJjaEZvci52YWx1ZSk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhhZHZhbmNlZEZvcm0scXVlcnlJdGVtSW5kZXgsaXNPd25lZENoZWNrZWQpCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBhZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+LmNoZWNrZWQgPSBpc093bmVkQ2hlY2tlZDsKLSAgICBhZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBhZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBhZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgdG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24ocXVlcnlJdGVtSW5kZXgsaXNPd25lZENoZWNrZWQpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0QWR2YW5jZWRDb21tb25TZWN0aW9uRGVmYXVsdHMoZm9ybSxtYXhTZWFyY2hTZXQsbWF4UmVzdWx0cykKLSAgewotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCU+LnZhbHVlID0gbWF4U2VhcmNoU2V0OwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyU+LnZhbHVlID0gbWF4UmVzdWx0czsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yRmluZEJ1c2luZXNzZXNGb3JtcygpCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBmaW5kQnVzaW5lc3NlcyBmb3JtLgotPCUKLSAgIFN0cmluZyBmaW5kQnVzaW5lc3Nlc1N0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3Jtc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+XV0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT5bPCU9ZmluZEJ1c2luZXNzZXNTdHlsZUluZGV4JT5dLmNoZWNrZWQgPSB0cnVlOwotICAgIHZhciBmaW5kQnVzaW5lc3Nlc1NpbXBsZVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kQnVzaW5lc3Nlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBmaW5kQnVzaW5lc3Nlc1NpbXBsZUZvcm0gPSBmaW5kQnVzaW5lc3Nlc1NpbXBsZVNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIGZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZEJ1c2luZXNzZXNTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPl0pOwotICAgIHZhciBmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRm9ybSA9IGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICB2YXIgaXNPd25lZENoZWNrZWQgPSA8JT0oZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX09XTkVEKSAhPSBudWxsKSU+OwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4saXNPd25lZENoZWNrZWQpOwotPCUKLSAgIFZlY3RvciBidXNOYW1lVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgaWYgKGJ1c05hbWVWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8YnVzTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpYnVzTmFtZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkTmFtZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIElkZW50aWZpZXJCYWcgYnVzSWRCYWcgPSAoSWRlbnRpZmllckJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgaWYgKGJ1c0lkQmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IGJ1c0lkQmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZElkZW50aWZpZXJSb3coImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRJZGVudGlmaWVycyIpOwotICAgIHNldElkZW50aWZpZXJSb3dTZXR0aW5ncygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZElkZW50aWZpZXJzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBidXNDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgaWYgKGJ1c0NhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBidXNDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0gICAgc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBidXNTZXJ2aWNlSW50ZXJmYWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBWZWN0b3IgYnVzU2VydmljZUludGVyZmFjZXNDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgaWYgKGJ1c1NlcnZpY2VJbnRlcmZhY2VzICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPT0gbnVsbCkKLSAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8YnVzU2VydmljZUludGVyZmFjZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWJ1c1NlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyxmYWxzZSk7Ci0gICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgYnVzU2VydmljZUludGVyZmFjZXNDb3B5LmFkZEVsZW1lbnQoYnVzU2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkU2VydmljZUludGVyZmFjZXMiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKSklPiIpOwotPCUKLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFksYnVzU2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgYnVzU2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyxidXNTZXJ2aWNlSW50ZXJmYWNlcyk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotCi0gICBEaXNjb3ZlcnlVUkxzIGJ1c0Rpc2NvdmVyeVVSTHMgPSAoRGlzY292ZXJ5VVJMcylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICBpZiAoYnVzRGlzY292ZXJ5VVJMcyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gYnVzRGlzY292ZXJ5VVJMcy5nZXREaXNjb3ZlcnlVUkxWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gKERpc2NvdmVyeVVSTClkaXNjb3ZlcnlVUkxWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGREaXNjb3ZlcnlVUkxSb3coImZpbmRCdXNpbmVzc2VzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIik7Ci0gICAgc2V0RGlzY292ZXJ5VVJMUm93U2V0dGluZ3MoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShkaXNjb3ZlcnlVUkwuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIEZpbmRRdWFsaWZpZXJzIGJ1c0ZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19GSU5EUVVBTElGSUVSUyk7Ci0gICBpZiAoYnVzRmluZFF1YWxpZmllcnMgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBidXNGaW5kUXVhbGlmaWVycy5nZXRGaW5kUXVhbGlmaWVyVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGZpbmRRdWFsaWZpZXJWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEZpbmRRdWFsaWZpZXIgZmluZFF1YWxpZmllciA9IChGaW5kUXVhbGlmaWVyKWZpbmRRdWFsaWZpZXJWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBzZXRGaW5kUXVhbGlmaWVyKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZmluZFF1YWxpZmllci5nZXRUZXh0KCkpJT4iLCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkTmFtZXMiLCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgICBzZXRBZHZhbmNlZENvbW1vblNlY3Rpb25EZWZhdWx0cyhmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRm9ybSwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VUKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfUkVTVUxUUykpJT4iKTsKLQotICAgIC8vIFVVSUQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBmaW5kQnVzaW5lc3Nlc1VVSURTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZEJ1c2luZXNzZXNTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCU+XSk7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzVVVJREZvcm0gPSBmaW5kQnVzaW5lc3Nlc1VVSURTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmaW5kQnVzaW5lc3Nlc1VVSURGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9LRVklPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpKSU+IjsKLQotICAgIHNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPWZpbmRCdXNpbmVzc2VzU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yRmluZFNlcnZpY2VzRm9ybXMoKQotICB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmluZFNlcnZpY2VzIGZvcm0uCi08JQotICAgU3RyaW5nIGZpbmRTZXJ2aWNlc1N0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zW3N0eWxlRm9ybXNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT5dXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT5bPCU9ZmluZFNlcnZpY2VzU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICB2YXIgZmluZFNlcnZpY2VzU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBmaW5kU2VydmljZXNTaW1wbGVGb3JtID0gZmluZFNlcnZpY2VzU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZFNlcnZpY2VzU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpJT4iOwotCi0gICAgLy8gQWR2YW5jZWQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBmaW5kU2VydmljZXNBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kU2VydmljZXNTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPl0pOwotICAgIHZhciBmaW5kU2VydmljZXNBZHZhbmNlZEZvcm0gPSBmaW5kU2VydmljZXNBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHZhciBpc093bmVkQ2hlY2tlZCA9IDwlPShmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9PV05FRCkgIT0gbnVsbCklPjsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhmaW5kU2VydmljZXNBZHZhbmNlZEZvcm0sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4saXNPd25lZENoZWNrZWQpOwotPCUKLSAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZKTsKLSAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNlcnZpY2VCdXNpbmVzc0NvcHkgPT0gbnVsbCkKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlQnVzaW5lc3Muc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VCdXNpbmVzcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyxmYWxzZSk7Ci0gICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weS5hZGRFbGVtZW50KHNlcnZpY2VCdXNpbmVzcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coImZpbmRTZXJ2aWNlc0FkdmFuY2VkQnVzaW5lc3MiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFksc2VydmljZUJ1c2luZXNzQ29weSk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHNlcnZpY2VCdXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1Msc2VydmljZUJ1c2luZXNzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLQotICAgVmVjdG9yIHNlcnZpY2VOYW1lVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICBpZiAoc2VydmljZU5hbWVWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZU5hbWVWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKXNlcnZpY2VOYW1lVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygiZmluZFNlcnZpY2VzQWR2YW5jZWROYW1lcyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBzZXJ2aWNlQ2F0QmFnID0gKENhdGVnb3J5QmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgaWYgKHNlcnZpY2VDYXRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2VydmljZUNhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRDYXRlZ29yeVJvdygiZmluZFNlcnZpY2VzQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0gICAgc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncygiZmluZFNlcnZpY2VzQWR2YW5jZWRDYXRlZ29yaWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBWZWN0b3Igc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgVmVjdG9yIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZKTsKLSAgIGlmIChzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPT0gbnVsbCkKLSAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlU2VydmljZUludGVyZmFjZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyxmYWxzZSk7Ci0gICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weS5hZGRFbGVtZW50KHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coImZpbmRTZXJ2aWNlc0FkdmFuY2VkU2VydmljZUludGVyZmFjZXMiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKSklPiIpOwotPCUKLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzID0gbmV3IFZlY3RvcigpOwotICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFksc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSk7Ci0gICB9Ci0KLSAgIEZpbmRRdWFsaWZpZXJzIHNlcnZpY2VGaW5kUXVhbGlmaWVycyA9IChGaW5kUXVhbGlmaWVycylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9GSU5EUVVBTElGSUVSUyk7Ci0gICBpZiAoc2VydmljZUZpbmRRdWFsaWZpZXJzICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBmaW5kUXVhbGlmaWVyVmVjdG9yID0gc2VydmljZUZpbmRRdWFsaWZpZXJzLmdldEZpbmRRdWFsaWZpZXJWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gKEZpbmRRdWFsaWZpZXIpZmluZFF1YWxpZmllclZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIHNldEZpbmRRdWFsaWZpZXIoIjwlPUhUTUxVdGlscy5KU01hbmdsZShmaW5kUXVhbGlmaWVyLmdldFRleHQoKSklPiIsImZpbmRTZXJ2aWNlc0FkdmFuY2VkTmFtZXMiLCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiLCJmaW5kU2VydmljZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHNldEFkdmFuY2VkQ29tbW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybSwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1NFQVJDSF9TRVQpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMpKSU+Iik7Ci0KLSAgICAvLyBVVUlEIGZvcm0gZGV0YWlscy4KLSAgICB2YXIgZmluZFNlcnZpY2VzVVVJRFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kU2VydmljZXNTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlc1VVSURGb3JtID0gZmluZFNlcnZpY2VzVVVJRFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIGZpbmRTZXJ2aWNlc1VVSURGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9LRVklPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSkpJT4iOwotCi0gICAgc2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+LDwlPWZpbmRTZXJ2aWNlc1N0eWxlSW5kZXglPik7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0c0ZvckZpbmRTZXJ2aWNlSW50ZXJmYWNlc0Zvcm1zKCkKLSAgewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZpbmRTZXJ2aWNlSW50ZXJmYWNlcyBmb3JtLgotPCUKLSAgIFN0cmluZyBmaW5kU2VydmljZUludGVyZmFjZXNTdHlsZUluZGV4ID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3Jtc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT5dXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+WzwlPWZpbmRTZXJ2aWNlSW50ZXJmYWNlc1N0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kU2VydmljZUludGVyZmFjZXNTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT5dKTsKLSAgICB2YXIgZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybSA9IGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZVNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpJT4iOwotCi0gICAgLy8gQWR2YW5jZWQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kU2VydmljZUludGVyZmFjZXNTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPl0pOwotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0gPSBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotCi0gICAgdmFyIGlzT3duZWRDaGVja2VkID0gPCU9KGZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9PV05FRCkgIT0gbnVsbCklPjsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LGlzT3duZWRDaGVja2VkKTsKLSAgICB2YXIgaXNVc2VTZXJ2aWNlQ2hlY2tlZCA9IDwlPShmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UpICE9IG51bGwpJT47Ci0gICAgZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UlPi5jaGVja2VkID0gaXNVc2VTZXJ2aWNlQ2hlY2tlZDsKLSAgICB0b2dnbGVGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2VQYXJhbWV0ZXJzKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSk7Ci0gICAgZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSklPiI7Ci0KLTwlCi0gICBWZWN0b3Igc2lTZXJ2aWNlID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSk7Ci0gICBWZWN0b3Igc2lTZXJ2aWNlQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0VfQ09QWSk7Ci0gICBpZiAoc2lTZXJ2aWNlICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChzaVNlcnZpY2VDb3B5ID09IG51bGwpCi0gICAgICAgc2lTZXJ2aWNlQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIHNpU2VydmljZUNvcHkucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2lTZXJ2aWNlLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzaVNlcnZpY2UuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTLGZhbHNlKTsKLSAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIHNpU2VydmljZUNvcHkuYWRkRWxlbWVudChzaVNlcnZpY2UuZWxlbWVudEF0KGkpKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2UiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShicy5nZXREZWZhdWx0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFX0NPUFksc2lTZXJ2aWNlQ29weSk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHNpU2VydmljZSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgc2lTZXJ2aWNlQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0Usc2lTZXJ2aWNlKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0VfQ09QWSxzaVNlcnZpY2VDb3B5KTsKLSAgIH0KLQotICAgSWRlbnRpZmllckJhZyBzaUlkQmFnID0gKElkZW50aWZpZXJCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgIGlmIChzaUlkQmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNpSWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkSWRlbnRpZmllclJvdygiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRJZGVudGlmaWVycyIpOwotICAgIHNldElkZW50aWZpZXJSb3dTZXR0aW5ncygiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRJZGVudGlmaWVycyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgQ2F0ZWdvcnlCYWcgc2lDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotICAgaWYgKHNpQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNpQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIEZpbmRRdWFsaWZpZXJzIHNpRmluZFF1YWxpZmllcnMgPSAoRmluZFF1YWxpZmllcnMpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0ZJTkRRVUFMSUZJRVJTKTsKLSAgIGlmIChzaUZpbmRRdWFsaWZpZXJzICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBmaW5kUXVhbGlmaWVyVmVjdG9yID0gc2lGaW5kUXVhbGlmaWVycy5nZXRGaW5kUXVhbGlmaWVyVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGZpbmRRdWFsaWZpZXJWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEZpbmRRdWFsaWZpZXIgZmluZFF1YWxpZmllciA9IChGaW5kUXVhbGlmaWVyKWZpbmRRdWFsaWZpZXJWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBzZXRGaW5kUXVhbGlmaWVyKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZmluZFF1YWxpZmllci5nZXRUZXh0KCkpJT4iLCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZE5hbWUiLCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZENhdGVnb3JpZXMiLCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHNldEFkdmFuY2VkQ29tbW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VUKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUykpJT4iKTsKLQotICAgIC8vIFVVSUQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNVVUlEU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT5dKTsKLSAgICB2YXIgZmluZFNlcnZpY2VJbnRlcmZhY2VzVVVJREZvcm0gPSBmaW5kU2VydmljZUludGVyZmFjZXNVVUlEU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZFNlcnZpY2VJbnRlcmZhY2VzVVVJREZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSkpJT4iOwotCi0gICAgc2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1maW5kU2VydmljZUludGVyZmFjZXNTdHlsZUluZGV4JT4pOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKHNlYXJjaEZvclZhbHVlU3RyaW5nKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIHF1ZXJ5SW5mb0l0ZW1MaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1ZXJ5SW5mb0l0ZW1MaXN0Iik7Ci0gICAgdmFyIHNlYXJjaEZvckluZGV4ID0gcGFyc2VJbnQoc2VhcmNoRm9yVmFsdWVTdHJpbmcpOwotICAgIGZvciAodmFyIGk9MDtpPHNlY3Rpb25JZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaSA9PSBzZWFyY2hGb3JJbmRleCkKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkc1tpXSkuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZWxzZQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLTwlCi0gICBpZiAoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLmxlbmd0aCgpIDwgMSkKLSAgIHsKLSU+Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1ZXJ5SW5mb0l0ZW1MaXN0Iikuc3R5bGUuZGlzcGxheSA9ICIiOwotPCUKLSAgIH0KLSU+Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd0ZpbmRGb3JtKHF1ZXJ5SXRlbUluZGV4LHN0eWxlKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIGZpbmRTZWN0aW9uSWRzOwotICAgIHN3aXRjaCAocXVlcnlJdGVtSW5kZXgpCi0gICAgewotICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+OgotICAgICAgICBmaW5kU2VjdGlvbklkcyA9IGZpbmRCdXNpbmVzc2VzU2VjdGlvbklkczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+OgotICAgICAgICBmaW5kU2VjdGlvbklkcyA9IGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT46Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBmaW5kU2VjdGlvbklkcyA9IGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHM7Ci0gICAgfQotICAgIGZvciAodmFyIGk9MDtpPGZpbmRTZWN0aW9uSWRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGkgPT0gc3R5bGUpCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHRvZ2dsZUFkdmFuY2VkQXV0aGVudGljYXRpb25TZWN0aW9uKHF1ZXJ5SXRlbUluZGV4LGlzQ2hlY2tlZCkKLSAgewotICAgIGlmIChpc0NoZWNrZWQgJiYgPCU9IXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpJT4pCi0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdXRoZW50aWNhdGlvblNlY3Rpb25JZHNbcXVlcnlJdGVtSW5kZXhdKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXV0aGVudGljYXRpb25TZWN0aW9uSWRzW3F1ZXJ5SXRlbUluZGV4XSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotCi0gIGZ1bmN0aW9uIHRvZ2dsZUZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVBhcmFtZXRlcnMoZm9ybSkKLSAgewotICAgIHZhciBpc1VzZVNlcnZpY2VDaGVja2VkID0gZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFJT4uY2hlY2tlZDsKLSAgICB2YXIgaXNPd25lZENoZWNrZWQgPSBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQlPi5jaGVja2VkOwotICAgIGlmIChpc1VzZVNlcnZpY2VDaGVja2VkKQotICAgIHsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2VTZWN0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkT3duZWQiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgdG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LGZhbHNlKTsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZE5hbWVGaW5kUXVhbGlmaWVyc1NlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnNTZWN0aW9uIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2VTZWN0aW9uIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZE93bmVkIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgdG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LGlzT3duZWRDaGVja2VkKTsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZE5hbWVGaW5kUXVhbGlmaWVyc1NlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVyc1NlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgfQotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkiPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZTsKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKTsKLSAgIGlmIChzdWJRdWVyeUtleSAhPSBudWxsICYmIHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpID4gMCkKLSAgIHsKLSAgICAgaW50IHF1ZXJ5SXRlbSA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkpOwotICAgICBzd2l0Y2ggKHF1ZXJ5SXRlbSkKLSAgICAgewotICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgICB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VCUVVFUlkiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CVVNJTkVTU0VTIikpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgICB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VCUVVFUlkiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVQlFVRVJZIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0VTIikpOwotICAgICB9Ci0gICB9Ci0gICBlbHNlCi0gICAgIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GSU5EIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvZm9ybXMvZmluZGZvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgPGxhYmVsIGZvcj0icXVlcnlOYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9RVUVSWV9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQ+IDxpbnB1dCBpZD0icXVlcnlOYW1lIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiREVGQVVMVF9RVUVSWV9OQU1FIikpJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDxkaXYgaWQ9InF1ZXJ5SW5mb0l0ZW1MaXN0IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIHZhbGlnbj0ibWlkZGxlIiBub3dyYXAgaGVpZ2h0PTQwPgotICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzZWFyY2hGb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFQVJDSF9GT1IiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIG5vd3JhcCBoZWlnaHQ9NDA+Ci0gICAgICAgICAgICAgIDxzZWxlY3QgaWQ9InNlYXJjaEZvciIgb25DaGFuZ2U9InNob3dNYWluRm9ybSh0aGlzLnZhbHVlKSIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CVVNJTkVTU0VTIiklPgotICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRVMiKSU+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0VTIiklPgotICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgd2lkdGg9IjkwJSIgaGVpZ2h0PTQwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYmFkMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgY291bGQgYmUgdGhlIHJlZ2lzdHJ5IG9yIHF1ZXJ5IG5vZGVzLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+ICAgIAotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4gPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9BRFZBTkNFRF9ERVNDIiklPiA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX3VzZV9zZXJ2aWNlIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFJT4iIG9uQ2xpY2s9InRvZ2dsZUZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVBhcmFtZXRlcnModGhpcy5mb3JtKSI+PGxhYmVsIGZvcj0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX3VzZV9zZXJ2aWNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VfU0VSVklDRSIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIFN0cmluZ1tdIHNlcnZpY2VTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfU0VSVklDRSIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyksImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0V9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2UiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzZXJ2aWNlU3BlY2lmaWNJbmZvKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2VTZWN0aW9uIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLSAgICA8ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZE93bmVkIj4KLSAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTM1IHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV9vd25lZCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+IiBvbkNsaWNrPSJ0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sdGhpcy5jaGVja2VkKSI+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2Vfb3duZWQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09XTkVEIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC9kaXY+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZE5hbWUiPgotICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlZF9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VkX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZUZpbmRRdWFsaWZpZXJzU2VjdGlvbiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbmFtZXNfZmluZFF1YWxpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+Ci0gICAgPC9kaXY+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzU2VjdGlvbiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYWR2YW5jZWRDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllZDljNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIG5hbWU9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc1N0eWxlIj4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VBUkNIX1RZUEUiKSU+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TSU1QTEUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2UiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfdXVpZCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfdXVpZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fVVVJRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEIik7Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSB7InVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb25KU1AuanNwIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLCJGT1JNX0xBQkVMX0ZJTkRfU0VSVklDRV9JTlRFUkZBQ0VfVVVJRF9ERVNDIn07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFVVSURGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzU5MzRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgY291bGQgYmUgdGhlIHJlZ2lzdHJ5IG9yIHF1ZXJ5IG5vZGVzLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZJTkRfU0VSVklDRV9JTlRFUkZBQ0VTX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZXNfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlc19zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjk3NmE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlc0FkdmFuY2VkIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4gICAgCi0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZJTkRfQURWQU5DRURfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTM1IHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJpbnB1dF9maW5kX3NlcnZpY2VzX2FkdmFuY2Vfb3duZWQiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQlPiIgb25DbGljaz0idG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sdGhpcy5jaGVja2VkKSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9zZXJ2aWNlc19hZHZhbmNlX293bmVkIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PV05FRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgU3RyaW5nW10gYnVzU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0JVU0lORVNTIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpLCJmaW5kU2VydmljZXNBZHZhbmNlZCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWRCdXNpbmVzcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGJ1c1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlc0FkdmFuY2VkTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIFN0cmluZ1tdIHNpU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFUyIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpLCJmaW5kU2VydmljZXNBZHZhbmNlZCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlc0FkdmFuY2VkU2VydmljZUludGVyZmFjZXMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzaVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2FkdmFuY2VkQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NGYzOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlcyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBuYW1lPSJmaW5kU2VydmljZXNTdHlsZSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFQVJDSF9UWVBFIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfc2VydmljZV9zaW1wbGUiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfc2VydmljZV9zaW1wbGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NJTVBMRSIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfc2VydmljZV9hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfc2VydmljZV9hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfc2VydmljZV91dWlkIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX3V1aWQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1VVSUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlVVVJRCIpOwotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0geyJ1ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uSlNQLmpzcCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLCJGT1JNX0xBQkVMX0ZJTkRfU0VSVklDRV9VVUlEX0RFU0MifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvdGhlclByb3BlcnRpZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kVVVJREZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYjcyODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VzU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9TRVJWSUNFU19TSU1QTEVfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfc2VydmljZXNfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZXNfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFVVSURGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kVVVJREZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTM5ZGIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kVVVJREZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgY291bGQgYmUgdGhlIHJlZ2lzdHJ5IG9yIHF1ZXJ5IG5vZGVzLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotICAgCi0gICBTdHJpbmcgZm9ybUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IChTdHJpbmdbXSkoc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCkpOwotICAgU3RyaW5nIGFjdGlvbkxpbmsgPSAoU3RyaW5nKW90aGVyUHJvcGVydGllc1swXTsKLSAgIFN0cmluZyB1dWlkRW50cnlLZXkgPSAoU3RyaW5nKW90aGVyUHJvcGVydGllc1sxXTsKLSAgIFN0cmluZyBkZXNjcmlwdGlvbktleSA9IChTdHJpbmcpb3RoZXJQcm9wZXJ0aWVzWzJdOwotJT4KLTxkaXYgaWQ9IjwlPWZvcm1Db250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbkxpbmspKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoZGVzY3JpcHRpb25LZXkpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9IjwlPShmb3JtQ29udGFpbmVySWQrIl9pbnB1dF91dWlkX2tleSIpJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VVSURfS0VZIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZCh1dWlkRW50cnlLZXkpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT0oZm9ybUNvbnRhaW5lcklkKyJfaW5wdXRfdXVpZF9rZXkiKSU+IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfS0VZJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZTFhOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfQlVTSU5FU1NfQURWQU5DRURfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWROYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREZXNjcmlwdGlvbnMiKTsKLSAgIFN0cmluZ1tdIGRlc2NTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfREVTQ1JJUFRJT05TIiwiRk9STV9MQUJFTF9ERVNDUklQVElPTiIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRlc2NTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkSWRlbnRpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvaWRlbnRpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmV3IEJvb2xlYW4oIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUykpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGlzY292ZXJ5VVJMc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgCi08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2IzMGMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoQnVzaW5lc3MiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gbmFtZT0icHVibGlzaEJ1c2luZXNzU3R5bGUiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0ZPUk0iKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9idXNpbmVzc19zaW1wbGUiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19wdWJsaXNoX2J1c2luZXNzX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9idXNpbmVzc19hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19wdWJsaXNoX2J1c2luZXNzX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMTkzZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaEJ1c2luZXNzU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9CVVNJTkVTU19TSU1QTEVfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hCdXNpbmVzc1NpbXBsZUF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX2J1c2luZXNzX3NpbXBsZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9idXNpbmVzc19zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX2J1c2luZXNzX3NpbXBsZV9kZXNjIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlX2Rlc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzQzZDY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgbXVzdCBiZSBhIHJlZ2lzdHJ5IG5vZGUuCi0gICBOb2RlIHJlZ05vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHJlZ05vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotJT4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgIHN1YlF1ZXJ5S2V5UHJvcGVydHkuc2V0U3ViUXVlcnlLZXkoc3ViUXVlcnlLZXkpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08JQotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9SRUdJU1RSWV9QVUJMSVNIIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHNlY3Rpb25JZHMgPSBbInB1Ymxpc2hCdXNpbmVzcyIsInB1Ymxpc2hTZXJ2aWNlIiwicHVibGlzaFNlcnZpY2VJbnRlcmZhY2UiXTsKLSAgdmFyIHB1Ymxpc2hCdXNpbmVzc1NlY3Rpb25JZHMgPSBbInB1Ymxpc2hCdXNpbmVzc1NpbXBsZSIsInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkIl07Ci0gIHZhciBwdWJsaXNoU2VydmljZVNlY3Rpb25JZHMgPSBbInB1Ymxpc2hTZXJ2aWNlU2ltcGxlIiwicHVibGlzaFNlcnZpY2VBZHZhbmNlZCJdOwotICB2YXIgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTZWN0aW9uSWRzID0gWyJwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZSIsInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWQiXTsKLSAgdmFyIHN0eWxlRm9ybXMgPSBbInB1Ymxpc2hCdXNpbmVzc1N0eWxlIiwicHVibGlzaFNlcnZpY2VTdHlsZSIsInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU3R5bGUiXTsKLQotICBmdW5jdGlvbiBwcm9jZXNzUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NJZGVudGlmaWVyVGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRGlzY292ZXJ5VVJMVGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMcyIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQnVzaW5lc3MiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQnVzaW5lc3MiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NJZGVudGlmaWVyVGFibGUoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRJZGVudGlmaWVycyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIHZhciBwdWJsaXNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2giKTsKLSAgICBwdWJsaXNoLnNlbGVjdGVkSW5kZXggPSA8JT1mb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSklPjsKLSAgICBzZXREZWZhdWx0c0ZvclB1Ymxpc2hCdXNpbmVzc0Zvcm1zKCk7Ci0gICAgc2V0RGVmYXVsdHNGb3JQdWJsaXNoU2VydmljZUZvcm1zKCk7Ci0gICAgc2V0RGVmYXVsdHNGb3JQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm1zKCk7Ci08JQotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSU+Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hCdXNpbmVzc1NpbXBsZUF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZVNpbXBsZUF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0lPgotICAgIHNob3dNYWluRm9ybShwdWJsaXNoLnZhbHVlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZvcm0pCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0c0ZvclB1Ymxpc2hCdXNpbmVzc0Zvcm1zKCkKLSAgewotICAgIC8vIEluaXRpYWxpemUgdGhlIHB1Ymxpc2hCdXNpbmVzcyBmb3JtLgotPCUKLSAgIFN0cmluZyBwdWJsaXNoQnVzaW5lc3NTdHlsZUluZGV4ID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zW3N0eWxlRm9ybXNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+WzwlPXB1Ymxpc2hCdXNpbmVzc1N0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc1NpbXBsZVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoQnVzaW5lc3NTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT5dKTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybSA9IHB1Ymxpc2hCdXNpbmVzc1NpbXBsZVNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0pOwotICAgIHB1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSkpJT4iOwotICAgIHB1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04lPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hCdXNpbmVzc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybSA9IHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtKTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzQWR2YW5jZWROYW1lc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXMiKTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgIHZhciBwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLTwlCi0gICBWZWN0b3IgYnVzTmFtZVZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgIGlmIChidXNOYW1lVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGJ1c05hbWVWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWJ1c05hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgYnVzRGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgaWYgKGJ1c0Rlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGJ1c0Rlc2NyaXB0aW9uVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilidXNEZXNjcmlwdGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9ucyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBJZGVudGlmaWVyQmFnIGJ1c0lkQmFnID0gKElkZW50aWZpZXJCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgIGlmIChidXNJZEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBidXNJZEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRJZGVudGlmaWVyUm93KCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZElkZW50aWZpZXJzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBidXNDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgaWYgKGJ1c0NhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBidXNDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSAgCi0gICBEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMgPSAoRGlzY292ZXJ5VVJMcylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICBpZiAoZGlzY292ZXJ5VVJMcyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gZGlzY292ZXJ5VVJMcy5nZXREaXNjb3ZlcnlVUkxWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gKERpc2NvdmVyeVVSTClkaXNjb3ZlcnlVUkxWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGREaXNjb3ZlcnlVUkxSb3coInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMcyIpOwotICAgIHNldERpc2NvdmVyeVVSTFJvd1NldHRpbmdzKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRpc2NvdmVyeVVSTC5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaEJ1c2luZXNzQWR2YW5jZWREaXNjb3ZlcnlVUkxzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotJT4gICAgICAgCi0gICAgc2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9cHVibGlzaEJ1c2luZXNzU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yUHVibGlzaFNlcnZpY2VGb3JtcygpCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFNlcnZpY2VTdHlsZUluZGV4ID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+XV0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+WzwlPXB1Ymxpc2hTZXJ2aWNlU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VTaW1wbGVTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaFNlcnZpY2VTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT5dKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtID0gcHVibGlzaFNlcnZpY2VTaW1wbGVTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0pOwotPCUKLSAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICBWZWN0b3Igc2VydmljZUJ1c2luZXNzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VCdXNpbmVzcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZUJ1c2luZXNzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VCdXNpbmVzcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyxmYWxzZSk7Ci0gICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weS5hZGRFbGVtZW50KHNlcnZpY2VCdXNpbmVzcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQnVzaW5lc3MiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlQnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSU+Ci08JQotICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VzICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPT0gbnVsbCkKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUludGVyZmFjZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkuYWRkRWxlbWVudChzZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIiw8JT10YXJnZXROb2RlSWQlPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldE5hbWVTdHJpbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFksc2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLHNlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFksc2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLSU+Ci0gICAgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaFNlcnZpY2VTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPl0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybSA9IHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIpOwotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotPCUKLSAgIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgc2VydmljZUJ1c2luZXNzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSk7Ci0gICBpZiAoc2VydmljZUJ1c2luZXNzICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChzZXJ2aWNlQnVzaW5lc3NDb3B5ID09IG51bGwpCi0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUJ1c2luZXNzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlQnVzaW5lc3MuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkuYWRkRWxlbWVudChzZXJ2aWNlQnVzaW5lc3MuZWxlbWVudEF0KGkpKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQnVzaW5lc3MiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFksc2VydmljZUJ1c2luZXNzQ29weSk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHNlcnZpY2VCdXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1Msc2VydmljZUJ1c2luZXNzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSU+Ci0gICAgcHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpKSU+IjsKLTwlCi0gICBWZWN0b3Igc2VydmljZU5hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChzZXJ2aWNlTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpc2VydmljZU5hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoc2VydmljZURlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VEZXNjcmlwdGlvblZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pc2VydmljZURlc2NyaXB0aW9uVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgQ2F0ZWdvcnlCYWcgc2VydmljZUNhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChzZXJ2aWNlQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNlcnZpY2VDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0gICAgc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1wdWJsaXNoU2VydmljZVN0eWxlSW5kZXglPik7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0c0ZvclB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybXMoKQotICB7Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zW3N0eWxlRm9ybXNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+XV0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPls8JT1wdWJsaXNoU2VydmljZUludGVyZmFjZVN0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybSA9IHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtKTsKLSAgICBwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSklPiI7Ci0gICAgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTikpJT4iOwotCi0gICAgLy8gQWR2YW5jZWQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT5dKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0gPSBwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0pOwotICAgIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSklPiI7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci08JQotICAgVmVjdG9yIHNpRGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotICAgaWYgKHNpRGVzY3JpcHRpb25WZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2lEZXNjcmlwdGlvblZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pc2lEZXNjcmlwdGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBJZGVudGlmaWVyQmFnIHNpSWRCYWcgPSAoSWRlbnRpZmllckJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgaWYgKHNpSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lJZEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRJZGVudGlmaWVyUm93KCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkSWRlbnRpZmllcnMiKTsKLSAgICBzZXRJZGVudGlmaWVyUm93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRJZGVudGlmaWVycyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgQ2F0ZWdvcnlCYWcgc2lDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotICAgaWYgKHNpQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNpQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRDYXRlZ29yaWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgICBzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPXB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dNYWluRm9ybShwdWJsaXNoVmFsdWUpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgcHVibGlzaCA9IHBhcnNlSW50KHB1Ymxpc2hWYWx1ZSk7Ci0gICAgZm9yICh2YXIgaT0wO2k8c2VjdGlvbklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChpID09IHB1Ymxpc2gpCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkc1tpXSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1B1Ymxpc2hGb3JtKHF1ZXJ5SXRlbUluZGV4LHN0eWxlKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIHB1Ymxpc2hTZWN0aW9uSWRzOwotICAgIHN3aXRjaCAocXVlcnlJdGVtSW5kZXgpCi0gICAgewotICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+OgotICAgICAgICBwdWJsaXNoU2VjdGlvbklkcyA9IHB1Ymxpc2hCdXNpbmVzc1NlY3Rpb25JZHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPjoKLSAgICAgICAgcHVibGlzaFNlY3Rpb25JZHMgPSBwdWJsaXNoU2VydmljZVNlY3Rpb25JZHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT46Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwdWJsaXNoU2VjdGlvbklkcyA9IHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2VjdGlvbklkczsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGZvciAodmFyIGk9MDtpPHB1Ymxpc2hTZWN0aW9uSWRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGkgPT0gc3R5bGUpCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ1ZGRpL2ltYWdlcy9wdWJsaXNoX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0giKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIHZhbGlnbj0ibWlkZGxlIiBub3dyYXA+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJwdWJsaXNoIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIG5vd3JhcD4KLSAgICAgICAgICAgIDxzZWxlY3QgaWQ9InB1Ymxpc2giIG9uQ2hhbmdlPSJzaG93TWFpbkZvcm0odGhpcy52YWx1ZSkiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTIiklPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0UiKSU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFIiklPgotICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC9kaXY+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVmNmMwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+ICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+ICAgIAotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0FEVkFOQ0VEX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIGJvb2xlYW4gdGFibGVIYXNFcnJvcnMgPSAhZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgIFN0cmluZ1tdIGJ1c1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9CVVNJTkVTUyIsKG5ldyBCb29sZWFuKHRhYmxlSGFzRXJyb3JzKSkudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyksInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRCdXNpbmVzcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGJ1c1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgbm93cmFwIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2Vfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VBZHZhbmNlZCcsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZV93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHRhYmxlSGFzRXJyb3JzID0gIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgU3RyaW5nW10gc2VydmljZUludGVyZmFjZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRVMiLChuZXcgQm9vbGVhbih0YWJsZUhhc0Vycm9ycykpLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyksInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VJbnRlcmZhY2VTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmEzZmY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIG5hbWU9InB1Ymxpc2hTZXJ2aWNlU3R5bGUiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0ZPUk0iKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZWNhNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9JTlRFUkZBQ0VfQURWQU5DRURfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZCcsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYTgyY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VJbnRlcmZhY2UiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gbmFtZT0icHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTdHlsZSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfRk9STSIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YjA2ZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRV9TSU1QTEVfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQXV0aGVudGljYXRpb24iKTsKLSU+ICAgICAgCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIG5vd3JhcCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZScsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGVfd3NkbF91cmwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX2Rlc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4gICAgICAgICAgCi0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWNhZjFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+ICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZVNpbXBsZUF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBib29sZWFuIHRhYmxlSGFzRXJyb3JzID0gIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgU3RyaW5nW10gYnVzU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0JVU0lORVNTIiwobmV3IEJvb2xlYW4odGFibGVIYXNFcnJvcnMpKS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSwicHVibGlzaFNlcnZpY2VTaW1wbGUiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1N9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZVNpbXBsZUJ1c2luZXNzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYnVzU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBub3dyYXAgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIG5vd3JhcCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdwdWJsaXNoU2VydmljZVNpbXBsZScsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfZGVzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9kZXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZXN1bHRzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVzdWx0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDQ2ZmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZXN1bHRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgc3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlci5yZW1vdmVBbGxFbGVtZW50cygpOwotJT4KLTwvanNwOnVzZUJlYW4+ICAgCi08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgc3ViUXVlcnlUcmFuc2ZlclRhcmdldCA9IG51bGw7Ci0gICBib29sZWFuIGhhc1RhcmdldCA9IGZhbHNlOwotICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgUXVlcnlFbGVtZW50KQotICAgewotICAgICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ID0gKFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpdHJlZUVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VUKTsKLSAgICAgaWYgKHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgIT0gbnVsbCAmJiBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0LmdldFRhcmdldEZvcm1Ub29sKCkgIT0gbnVsbCkKLSAgICAgewotICAgICAgIHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLmFkZEVsZW1lbnQoc3ViUXVlcnlUcmFuc2ZlclRhcmdldCk7Ci0gICAgICAgaGFzVGFyZ2V0ID0gdHJ1ZTsKLSAgICAgfQotICAgfQotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfUkVTVUxUUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotPCUKLSAgIFZlY3RvciBjaGlsZE5vZGVzID0gc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgIGZvciAoaW50IGk9MDtpPGNoaWxkTm9kZXMuc2l6ZSgpO2krKykKLSAgIHsKLSAgICAgTm9kZSBjaGlsZE5vZGUgPSAoTm9kZSljaGlsZE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgU3RyaW5nIHVybCA9IFNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhjaGlsZE5vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpOwotICAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgIGlmIChjaGlsZE5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICAgIHsKLSAgICAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpY2hpbGROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICAgbmFtZSA9IGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgZGVzY3JpcHRpb24gPSBiZS5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgfQotICAgICBlbHNlIGlmIChjaGlsZE5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgewotICAgICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KWNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgIG5hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgIGRlc2NyaXB0aW9uID0gYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgIH0KLSAgICAgZWxzZSBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZU5vZGUpCi0gICAgIHsKLSAgICAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpY2hpbGROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgVE1vZGVsIHRNb2RlbCA9IHNpRWxlbWVudC5nZXRUTW9kZWwoKTsKLSAgICAgICBuYW1lID0gdE1vZGVsLmdldE5hbWVTdHJpbmcoKTsKLSAgICAgICBkZXNjcmlwdGlvbiA9IHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgfQotJT4KLSAgICBhZGRSZXN1bHRSb3coIlJlc3VsdHMiLDwlPWNoaWxkTm9kZS5nZXROb2RlSWQoKSU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uKSU+Iik7Ci08JQotICAgfQotJT4KLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08ZGl2IGlkPSJjb250ZW50Ij4KLSAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1FVRVJZX1JFU1VMVFMiKTsKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2Zvcm1zL3Jlc3VsdHNmb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8Zm9ybSB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIFN0cmluZyB0YWJsZVRpdGxlOwotICAgaW50IGl0ZW1UeXBlID0gSW50ZWdlci5wYXJzZUludCh0cmVlRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5RVUVSWV9UWVBFKSk7ICAgCi0gICBzd2l0Y2ggKGl0ZW1UeXBlKQotICAgewotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgZGVmYXVsdDoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUyIpOwotICAgfQotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0ge3RhYmxlVGl0bGUsIiJ9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIlJlc3VsdHMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvdGhlclByb3BlcnRpZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9yZXN1bHRzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgIDx0cj4KLTwlCi0gICBpZiAoaGFzVGFyZ2V0KQotICAgewotJT4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fVFJBTlNGRVIiKSU+IiBvbkNsaWNrPSJ0cmFuc2ZlclNlbGVjdGlvbnMoJ1Jlc3VsdHMnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci08JQotICAgfQotJT4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFRlJFU0giKSU+IiBvbkNsaWNrPSJyZWZyZXNoU2VsZWN0aW9ucygnUmVzdWx0cycsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9ImFkZFNlbGVjdGlvbnNUb0Zhdm9yaXRlcygnUmVzdWx0cycsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQ0xFQVIiKSU+IiBvbkNsaWNrPSJjbGVhclNlbGVjdGlvbnMoJ1Jlc3VsdHMnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9TZXJ2aWNlRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1NlcnZpY2VEZXRhaWxzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MTYwMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1NlcnZpY2VEZXRhaWxzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGN1cnJlbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1NFUlZJQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIHZhciBzZXJ2aWNlRGV0YWlsc1dTRExVUkxUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlRGV0YWlsc1dTRExVUkwiKTsKLSAgICB2YXIgc2VydmljZURldGFpbHNOYW1lc1RhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VEZXRhaWxzTmFtZXMiKTsKLSAgICB2YXIgc2VydmljZURldGFpbHNEZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotPCUKLSAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgU3RyaW5nIHdzZGxVUkwgPSBudWxsOwotICAgaWYgKHdzZGxVUkxMaXN0RWxlbWVudCA9PSBudWxsKQotICAgewotICAgICB0cnkKLSAgICAgewotICAgICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgICAgd3NkbFVSTCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpLCBzZXJ2aWNlRWxlbWVudC5nZXRSZWdpc3RyeUVsZW1lbnQoKS5nZXRQcm94eSgpKTsKLSAgICAgICB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgICAgaWYgKHdzZGxVUkwgPT0gbnVsbCkKLSAgICAgICAgIHdzZGxVUkwgPSAidGVtcC53c2RsIjsKLSAgICAgfQotICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgIHsKLSAgICAgICB3c2RsVVJMID0gIiI7Ci0gICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgIH0KLSAgICAgd3NkbFVSTExpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHdzZGxVUkwpOwotICAgICB3c2RsVVJMTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKC0xLC0xLDApOwotICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwsd3NkbFVSTExpc3RFbGVtZW50KTsKLSAgIH0KLSAgIGVsc2UKLSAgICAgd3NkbFVSTCA9IChTdHJpbmcpd3NkbFVSTExpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAod3NkbFVSTExpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNTaW5nbGVJdGVtUm93KCJzZXJ2aWNlRGV0YWlsc1dTRExVUkwiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3coInNlcnZpY2VEZXRhaWxzV1NETFVSTCIsPCU9VURESUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUod3NkbFVSTCklPiIpOwotPCUKLSAgIGlmIChpc0Vycm9yKQotICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZURldGFpbHNXU0RMVVJMVGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICB9Ci0KLSAgIFZlY3RvciBuYW1lSW5kZXhWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICBpZiAobmFtZUluZGV4VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPG5hbWVJbmRleFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpbmFtZUluZGV4VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSk7Ci0gICAgICAgaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJzZXJ2aWNlRGV0YWlsc05hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZURldGFpbHNOYW1lcyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPW5hbWUuZ2V0TGFuZygpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZURldGFpbHNOYW1lc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGRlc2NyaXB0aW9uSW5kZXhWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgaWYgKGRlc2NyaXB0aW9uSW5kZXhWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25JbmRleFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGVzY3JpcHRpb25JbmRleFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coInNlcnZpY2VEZXRhaWxzRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coInNlcnZpY2VEZXRhaWxzRGVzY3JpcHRpb25zIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9ZGVzY3JpcHRpb24uZ2V0TGFuZygpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHNlcnZpY2VEZXRhaWxzRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgY2F0VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoY2F0VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGNhdFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93KCJzZXJ2aWNlRGV0YWlsc0NhdGVnb3JpZXMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzQ2F0ZWdvcnlSb3coInNlcnZpY2VEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICAvLyBBdXRoZW50aWNhdGlvbi4KLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZpY2VEZXRhaWxzQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4KLQotICAgIHNob3dNYWluRm9ybSgpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKCkKLSAgewotICAgIGNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpOwotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NEZXRhaWxzU2luZ2xlSXRlbVRhYmxlKCJzZXJ2aWNlRGV0YWlsc1dTRExVUkwiLCI8JT1VRERJQWN0aW9uSW5wdXRzLldTRExfVVJMX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0xhbmd1YWdlSW5wdXRUYWJsZSgic2VydmljZURldGFpbHNOYW1lcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5OQU1FX1ZJRVdJRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0xhbmd1YWdlSW5wdXRUYWJsZSgic2VydmljZURldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX1ZJRVdJRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzQ2F0ZWdvcnlUYWJsZSgic2VydmljZURldGFpbHNDYXRlZ29yaWVzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRm9ybSh0aGlzKSI+Ci0gICAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU0VSVklDRV9ERVRBSUxTIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZJT4iIHZhbHVlPSI8JT1mb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZJT4iIHZhbHVlPSI8JT1mb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpJT4iPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVRBSUxTX0VESVRBQkxFIixzZWxlY3RlZE5vZGUuZ2V0Tm9kZU5hbWUoKSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfS0VZIiklPgotICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgIDwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZURldGFpbHNXU0RMVVJMIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIikpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlRGV0YWlsc05hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZURldGFpbHNEZXNjcmlwdGlvbnMiKTsKLSAgIFN0cmluZ1tdIGRlc2NTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfREVTQ1JJUFRJT05TIiwiRk9STV9MQUJFTF9ERVNDUklQVElPTiIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRlc2NTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlRGV0YWlsc0NhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZURldGFpbHNBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC9kaXY+Ci0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1NlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NWE2YjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1NlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGN1cnJlbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7ICAgCi0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgdmFyIHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTFRhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTCIpOwotICAgIHZhciBzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWVUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiKTsKLSAgICB2YXIgc2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgIHZhciBzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0lkZW50aWZpZXJzVGFibGUgPSBnZXRUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNJZGVudGlmaWVycyIpOwotICAgIHZhciBzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXNUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiKTsKLTwlCi0gICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICBpZiAod3NkbFVSTExpc3RFbGVtZW50ID09IG51bGwpCi0gICB7Ci0gICAgIHRyeQotICAgICB7Ci0gICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgICB3c2RsVVJMID0gdWRkaTRqSGVscGVyLmdldFdTREwoc2lFbGVtZW50LmdldFRNb2RlbCgpKTsKLSAgICAgICB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgICAgaWYgKHdzZGxVUkwgPT0gbnVsbCkKLSAgICAgICAgIHdzZGxVUkwgPSAidGVtcC53c2RsIjsKLSAgICAgfQotICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgIHsKLSAgICAgICB3c2RsVVJMID0gIiI7Ci0gICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICB9Ci0gICAgIHdzZGxVUkxMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh3c2RsVVJMKTsKLSAgICAgd3NkbFVSTExpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbygtMSwtMSwwKTsKLSAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMTGlzdEVsZW1lbnQpOwotICAgfQotICAgZWxzZQotICAgICB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAod3NkbFVSTExpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNTaW5nbGVJdGVtUm93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1dTRExVUkwiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTCIsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUod3NkbFVSTCklPiIpOwotPCUKLSAgIGlmIChpc0Vycm9yKQotICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMVGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlICAgCi0gICB9Ci0KLSAgIExpc3RFbGVtZW50IG5hbWVMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKW5hbWVMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICBpc05ld0l0ZW0gPSAobmFtZUxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNTaW5nbGVJdGVtUm93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzTmFtZSIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+Iik7Ci08JQotICAgaWYgKGlzRXJyb3IpCi0gICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWVUYWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgIH0KLSAgIAotICAgVmVjdG9yIGRlc2NyaXB0aW9uSW5kZXhWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgIGlmIChkZXNjcmlwdGlvbkluZGV4VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uSW5kZXhWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uSW5kZXhWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1kZXNjcmlwdGlvbi5nZXRMYW5nKCklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlICAgICAgIAotICAgICAgIH0KLSAgICAgfQotICAgfQotICAgCi0gICBWZWN0b3IgaWRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgaWYgKGlkVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGlkVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClpZFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzSWRlbnRpZmllcnMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzSWRlbnRpZmllclJvdygic2VydmljZUludGVyZmFjZURldGFpbHNJZGVudGlmaWVycyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUgICAgICAgCi0gICAgIH0KLSAgIH0KLSAgIAotICAgVmVjdG9yIGNhdFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChjYXRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzQ2F0ZWdvcnlSb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotICAgCi0gICAvLyBBdXRoZW50aWNhdGlvbi4KLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4gICAKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4gIAotICAgIHNob3dNYWluRm9ybSgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzRGV0YWlsc1NpbmdsZUl0ZW1UYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMIiwiPCU9VURESUFjdGlvbklucHV0cy5XU0RMX1VSTF9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzU2luZ2xlSXRlbVRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNJZGVudGlmaWVyVGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNDYXRlZ29yeVRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgIAotPC9zY3JpcHQ+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkiPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPiAgCi0gICAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4gICAgICAKLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSU+IiB2YWx1ZT0iPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSklPiI+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFVEFJTFNfRURJVEFCTEUiLHNlbGVjdGVkTm9kZS5nZXROb2RlTmFtZSgpKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+ICAgICAgICAKLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIikpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIikpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgCi08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRlc2NTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0lkZW50aWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNJZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgIAotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZUludGVyZmFjZURldGFpbHNBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC9kaXY+Ci0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7ICAKLTwvc2NyaXB0PiAgICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDIyOGIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtUHJvcGVydGllcyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgU3RyaW5nIHdzZGxVUkw7Ci0gICAvLyBzZWxlY3RlZE5vZGUgc2hvdWxkIGJlIGVpdGhlciBhIHNlcnZpY2Ugb3IgYSBzZXJ2aWNlIGludGVyZmFjZSBub2RlLgotICAgaWYgKHNlbGVjdGVkTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgewotICAgICBTZXJ2aWNlTm9kZSBzZXJ2aWNlTm9kZSA9IChTZXJ2aWNlTm9kZSlzZWxlY3RlZE5vZGU7Ci0gICAgIHdzZGxVUkwgPSBzZXJ2aWNlTm9kZS5nZXRXU0RMVVJMRnJvbURldGFpbHNUb29sKCk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIFNlcnZpY2VJbnRlcmZhY2VOb2RlIHNpTm9kZSA9IChTZXJ2aWNlSW50ZXJmYWNlTm9kZSlzZWxlY3RlZE5vZGU7Ci0gICAgIHdzZGxVUkwgPSBzaU5vZGUuZ2V0V1NETFVSTEZyb21EZXRhaWxzVG9vbCgpOwotICAgfQotICAgZm9ybVByb3BlcnRpZXMucHV0KCJmb3JtQWN0aW9uTGluayIsInVkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCIpOwotICAgZm9ybVByb3BlcnRpZXMucHV0KCJ3c2RsVVJMIix3c2RsVVJMKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZmYTI1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uTGluayIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtQWN0aW9uTGluay5hcHBlbmQoInVkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AiKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVW5wdWJsaXNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVW5wdWJsaXNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YTMzNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VucHVibGlzaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAKLSAgIEZvcm1Ub29sIHVucHVibGlzaFRvb2wgPSAoRm9ybVRvb2wpKG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotJT4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VTlBVQkxJU0giKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotPCUKLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0lPgotICAgIHZhciBhdXRoZW50aWNhdGlvblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidW5wdWJsaXNoQXV0aGVudGljYXRpb24iKTsKLSAgICBhdXRoZW50aWNhdGlvblNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpdW5wdWJsaXNoVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKSklPiI7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKXVucHVibGlzaFRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpKSU+IjsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZyl1bnB1Ymxpc2hUb29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpKSU+IjsgICAgCi08JQotICAgfQotJT4KLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSB1bnB1Ymxpc2hUb29sLmdldEhpZ2hsaWdodGVkSW1hZ2VMaW5rKCk7Ci0gICBTdHJpbmcgdGl0bGUgPSB1bnB1Ymxpc2hUb29sLmdldEFsdFRleHQoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5QVUJMSVNIX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJ1bnB1Ymxpc2hBdXRoZW50aWNhdGlvbiIpOwotJT4gICAgICAgCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvYWR2YW5jZWRDb21tb25fdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2FkdmFuY2VkQ29tbW9uX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JlODUzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvYWR2YW5jZWRDb21tb25fdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9IChGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBjb2xzcGFuPTMgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVhfU0VBUkNIX1NFVCIpJT4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQpKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQlPiIgY2xhc3M9InNtdGV4dGVudGVyIj4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BWF9SRVNVTFRTIiklPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUykpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyU+IiBjbGFzcz0ic210ZXh0ZW50ZXIiPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNzc5YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQWJzdHJhY3RVRERJRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci1Ob2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLVRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci1TdHJpbmcgdXNlcm5hbWUgPSBudWxsOwotU3RyaW5nIHBhc3N3b3JkID0gbnVsbDsKLWlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBBYnN0cmFjdFVERElFbGVtZW50KQotewotICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9ICgoQWJzdHJhY3RVRERJRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldFJlZ2lzdHJ5RWxlbWVudCgpOwotICB1c2VybmFtZSA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci19Ci1pZiAodXNlcm5hbWUgPT0gbnVsbCkKLSAgdXNlcm5hbWUgPSAiIjsKLWlmIChwYXNzd29yZCA9PSBudWxsKQotICBwYXNzd29yZCA9ICIiOwotJT4KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8bGFiZWwgZm9yPSI8JT10YWJsZUNvbnRhaW5lcklkKyJfaW5wdXRfcHVibGlzaF91cmwiJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfVVJMIiklPjwvbGFiZWw+Ci0gICAgICAgIDwlCi0gICAgICAgIGlmICghZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3B1Ymxpc2hfdXJsIiU+IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3VzZXJfaWQiJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VTRVJJRCIpJT48L2xhYmVsPgotICAgICAgICA8JQotICAgICAgICBpZiAoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCkpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT10YWJsZUNvbnRhaW5lcklkKyJfaW5wdXRfdXNlcl9pZCIlPiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QodXNlcm5hbWUpJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj48bGFiZWwgZm9yPSI8JT10YWJsZUNvbnRhaW5lcklkKyJfaW5wdXRfcGFzc3dvcmQiJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BBU1NXT1JEIiklPjwvbGFiZWw+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSI8JT10YWJsZUNvbnRhaW5lcklkKyJfaW5wdXRfcGFzc3dvcmQiJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QocGFzc3dvcmQpJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPjwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTQ5YTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPiAKLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQVRFR09SSUVTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkQ2F0ZWdvcnlSb3coJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZENhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4gIAotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FURUdPUllfVFlQRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9WQUxVRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLSAgIGlmICh0YWJsZUNvbnRhaW5lcklkLnN0YXJ0c1dpdGgoImZpbmRCdXNpbmVzc2VzIikpCi0gICB7Ly8gY29uZGl0aW9uIHRvIHR1cm4gb2ZmIGZvciBldmVyeXRoaW5nIG90aGVyIHRoYW4gZmluZCBieSBidXNpbmVzcyBzZWFyY2hlcy4KLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iYnVzaW5lc3NfY2F0ZWdvcmllcyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfQ0FURUdPUklFUyIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICA8c2VsZWN0IGlkPSJidXNpbmVzc19jYXRlZ29yaWVzIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgPG9wdGlvbj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFU19PTkxZIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuc2VydmljZVN1YnNldCU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRVNfT05MWSIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLmNvbWJpbmVDYXRlZ29yeUJhZ3MlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JPVEgiKSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUgICAKLSAgIH0KLSU+ICAgICAKLTwvZGl2PiAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNDYXRlZ29yaWVzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRjZmU0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQVRFR09SSUVTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRGV0YWlsc0NhdGVnb3J5Um93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRydWUpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZERldGFpbHNDYXRlZ29yeVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0U2VsZWN0ZWREZXRhaWxzQ2F0ZWdvcnlSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNhbmNlbFNlbGVjdGVkRGV0YWlsc0NhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIiklPjwvYT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQVRFR09SWV9UWVBFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX1ZBTFVFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzRGlzY292ZXJ5VVJMc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0Rpc2NvdmVyeVVSTHNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDNkNzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzRGlzY292ZXJ5VVJMc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgYm9vbGVhbiBoYXNFcnJvcnMgPSAoKEJvb2xlYW4pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCkpLmJvb2xlYW5WYWx1ZSgpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPiAgCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZVVJMUyIpJT48L3N0cm9uZz4KLTwlCi0gICBpZiAoaGFzRXJyb3JzKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPiAgICAgIAotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvdygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWREZXRhaWxzRGlzY292ZXJ5VVJMUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNhbmNlbFNlbGVjdGVkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWVVSTCIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0lkZW50aWZpZXJzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzSWRlbnRpZmllcnNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDdiYzU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzSWRlbnRpZmllcnNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JREVOVElGSUVSUyIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZERldGFpbHNJZGVudGlmaWVyUm93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRydWUpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZERldGFpbHNJZGVudGlmaWVyUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRTZWxlY3RlZERldGFpbHNJZGVudGlmaWVyUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjYW5jZWxTZWxlY3RlZERldGFpbHNJZGVudGlmaWVyUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIiklPjwvYT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JREVOVElGSUVSX1RZUEUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfVkFMVUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOGQ1ZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSAoU3RyaW5nW10pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0gICBTdHJpbmdbXSB0aXRsZUtleXMgPSB7b3RoZXJQcm9wZXJ0aWVzWzBdLG90aGVyUHJvcGVydGllc1sxXX07Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9IG90aGVyUHJvcGVydGllc1syXS5lcXVhbHMoQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRpdGxlS2V5c1swXSklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgCi0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotPCUKLSAgIFN0cmluZyB0ZXh0Q29udHJvbFRpdGxlS2V5OwotICAgaWYgKHRpdGxlS2V5c1swXS5lcXVhbHMoIkZPUk1fTEFCRUxfTkFNRVMiKSkKLSAgICAgdGV4dENvbnRyb2xUaXRsZUtleSA9ICJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIjsKLSAgIGVsc2UKLSAgICAgdGV4dENvbnRyb2xUaXRsZUtleSA9ICJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSI7Ci0lPiAgICAgICAgIAotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRleHRDb250cm9sVGl0bGVLZXkpKSU+Jyx0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0U2VsZWN0ZWREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2FuY2VsU2VsZWN0ZWREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodGl0bGVLZXlzWzFdKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYzdjZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmcgaXRlbUhlYWRlciA9IChTdHJpbmcpc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1pdGVtSGVhZGVyJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGlzY292ZXJ5VVJMc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGlzY292ZXJ5VVJMc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiM2Y1MzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2Rpc2NvdmVyeVVSTHNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIGJvb2xlYW4gaGFzRXJyb3JzID0gKChCb29sZWFuKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpKS5ib29sZWFuVmFsdWUoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4gIAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWVVSTFMiKSU+PC9zdHJvbmc+Ci08JQotICAgaWYgKGhhc0Vycm9ycykKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4gICAgICAgICAgICAgICAgICAKLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZERpc2NvdmVyeVVSTFJvdygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWVVSTCIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9maW5kUXVhbGlmaWVyc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTM3MjE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9maW5kUXVhbGlmaWVyc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7ICAgCi0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZJTkRRVUFMSUZJRVJTIiklPjwvc3Ryb25nPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPjxsYWJlbCBmb3I9ImNvbWJpbmVfa2V5cyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ09NQklORV9LRVlTIiklPjwvbGFiZWw+PC90ZD4KLSAgICAgIDx0ZD4KLSAgICAgICAgPHNlbGVjdCBpZD0iY29tYmluZV9rZXlzIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5hbmRBbGxLZXlzJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BTkRBTExLRVlTIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIub3JBbGxLZXlzJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9PUkFMTEtFWVMiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5vckxpa2VLZXlzJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9PUkxJS0VLRVlTIiklPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU09SVF9CWV9OQU1FIiklPjwvdGQ+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9ImFkdmFuY2Vfc29ydF9ieV9uYW1lX2FzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX05BTUUlPiIgdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5TmFtZUFzYyU+IiBjaGVja2VkPjxsYWJlbCBmb3I9ImFkdmFuY2Vfc29ydF9ieV9uYW1lX2FzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU09SVF9BU0MiKSU+PC9sYWJlbD4KLSAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0iYWR2YW5jZV9zb3J0X2J5X25hbWVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX05BTUUlPiIgdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5TmFtZURlc2MlPiI+PGxhYmVsIGZvcj0iYWR2YW5jZV9zb3J0X2J5X25hbWVfZGVzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU09SVF9ERVNDIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NPUlRfQllfREFURSIpJT48L3RkPgotICAgICAgPHRkPgotICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJhZHZhbmNlX3NvcnRfYnlfZGF0ZV9hc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU09SVF9CWV9EQVRFJT4iIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeURhdGVBc2MlPiIgY2hlY2tlZD48bGFiZWwgZm9yPSJhZHZhbmNlX3NvcnRfYnlfZGF0ZV9hc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NPUlRfQVNDIiklPjwvbGFiZWw+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9ImFkdmFuY2Vfc29ydF9ieV9kYXRlX2Rlc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU09SVF9CWV9EQVRFJT4iIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeURhdGVEZXNjJT4iPjxsYWJlbCBmb3I9ImFkdmFuY2Vfc29ydF9ieV9kYXRlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NPUlRfREVTQyIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZGZvcm1oZWFkZXIuaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2ZpbmRmb3JtaGVhZGVyLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U4MmUyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZGZvcm1oZWFkZXIuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0aXRsZUltYWdlUGF0aCkpJT4iIGFsdD0iIj4KLSAgICAgIDxzdHJvbmc+PCU9dGl0bGUlPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIHdpZHRoPSIqIj4mbmJzcDs8L3RkPgotPCUKLSAgIGludCBjb2xzcGFuID0gMjsKLSAgIGlmIChzdWJRdWVyeUtleSAhPSBudWxsICYmIHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpID4gMCkKLSAgIHsKLSAgICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgaW50IHRvb2xJZCA9IGZvcm1Ub29sLmdldFRvb2xJZCgpOwotICAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgICBpbnQgdmlld1Rvb2xJZCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCk7Ci0gICAgIGludCBjb3VudCA9IDE7Ci0lPgotICAgIDx0ZCBhbGlnbj0icmlnaHQiPgotICAgICAgPGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCwiIixmYWxzZSkpKSU+Ij48JT1jb3VudCU+PC9hPgotICAgIDwvdGQ+Ci08JQotICAgICBTdHJpbmcgY3VycmVudFN1YlF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXk7Ci0gICAgIGludCBzZXBhcmF0b3JQb3MgPSAtMTsKLSAgICAgd2hpbGUgKChzZXBhcmF0b3JQb3MgPSBjdXJyZW50U3ViUXVlcnlLZXkuaW5kZXhPZignOicpKSAhPSAtMSkKLSAgICAgewotICAgICAgIGNvdW50Kys7Ci0lPgotICAgIDx0ZCBhbGlnbj0icmlnaHQiPgotICAgICAgPGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCxjdXJyZW50U3ViUXVlcnlLZXkuc3Vic3RyaW5nKDAsc2VwYXJhdG9yUG9zKSxmYWxzZSkpKSU+Ij48JT1jb3VudCU+PC9hPgotICAgIDwvdGQ+ICAgICAgCi08JSAgIAotICAgICAgIGN1cnJlbnRTdWJRdWVyeUtleSA9IGN1cnJlbnRTdWJRdWVyeUtleS5zdWJzdHJpbmcoc2VwYXJhdG9yUG9zKzEsY3VycmVudFN1YlF1ZXJ5S2V5Lmxlbmd0aCgpKTsKLSAgICAgfQotICAgICBjb2xzcGFuICs9IGNvdW50OwotICAgfQotJT4gICAgCi0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIGNvbHNwYW49PCU9Y29sc3BhbiU+PiA8aW1nIGhlaWdodD0yIHdpZHRoPSIxMDAlIiBhbGlnbj0idG9wIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIj4gPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvaWRlbnRpZmllcnNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhYzQ2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvaWRlbnRpZmllcnNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsgICAKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JREVOVElGSUVSUyIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZElkZW50aWZpZXJSb3coJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+ICAKLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICAKLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JREVOVElGSUVSX1RZUEUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfVkFMVUUiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNThkMTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IChTdHJpbmdbXSlzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIFN0cmluZ1tdIHRpdGxlS2V5cyA9IHtvdGhlclByb3BlcnRpZXNbMF0sb3RoZXJQcm9wZXJ0aWVzWzFdfTsKLSAgIGJvb2xlYW4gaGFzRXJyb3JzID0gb3RoZXJQcm9wZXJ0aWVzWzJdLmVxdWFscyhCb29sZWFuLlRSVUUudG9TdHJpbmcoKSk7Ci0gICBib29sZWFuIGlzRmluZCA9IHRhYmxlQ29udGFpbmVySWQuc3RhcnRzV2l0aCgiZmluZCIpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRpdGxlS2V5c1swXSklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotPCUKLSAgIFN0cmluZyB0ZXh0Q29udHJvbFRpdGxlS2V5OwotICAgaWYgKHRpdGxlS2V5c1swXS5lcXVhbHMoIkZPUk1fTEFCRUxfTkFNRVMiKSkKLSAgICAgdGV4dENvbnRyb2xUaXRsZUtleSA9ICJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIjsKLSAgIGVsc2UKLSAgICAgdGV4dENvbnRyb2xUaXRsZUtleSA9ICJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSI7Ci0lPiAgICAgICAKLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkTGFuZ3VhZ2VJbnB1dFJvdygnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRleHRDb250cm9sVGl0bGVLZXkpKSU+JykiPgotICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT4KLSAgICAgIDwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0aXRsZUtleXNbMV0pJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JSAKLSAgIGlmIChpc0ZpbmQpCi0gICB7Ly8gY29uZGl0aW9uIHRvIHR1cm4gb2ZmIHdoZW4gcHVibGlzaGluZyB0byBjb21lLgotJT4gICAgIAotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL25hbWVzX2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICB9Ci0lPiAgICAgCi08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9sb2dpbl9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbG9naW5fYXV0aGVudGljYXRpb25fdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmE4YzVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9sb2dpbl9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkFic3RyYWN0VURESUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci1Ob2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLVRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi1SZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9ICgoQWJzdHJhY3RVRERJRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldFJlZ2lzdHJ5RWxlbWVudCgpOwotU3RyaW5nIHVzZXJuYW1lID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLVN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLQotaWYgKHVzZXJuYW1lID09IG51bGwpIHsKLQl1c2VybmFtZSA9ICIiOwotfQotCi1pZiAocGFzc3dvcmQgPT0gbnVsbCkgewotCXBhc3N3b3JkID0gIiI7Ci19Ci0KLWlmIChwdWJsaXNoVVJMID09IG51bGwpIHsKLQlwdWJsaXNoVVJMID0gIiI7Ci19Ci0KLSU+Ci0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQlPiIgdmFsdWU9InRydWUiLz4KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iIHZhbHVlPSJRdWVyeSBSZXN1bHRzIi8+Ci0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQlPiIgdmFsdWU9IjEwMCIvPgotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTJT4iIHZhbHVlPSIxMCIvPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgPGxhYmVsPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfVVJMIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+IiB2YWx1ZT0iPCU9cHVibGlzaFVSTCU+IiBjbGFzcz0idGV4dGVudGVyIi8+Ci0gICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8bGFiZWw+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVNFUklEIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iPCU9dXNlcm5hbWUlPiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPiIgY2xhc3M9InRleHRlbnRlciIvPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj48bGFiZWw+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUEFTU1dPUkQiKSU+PC9sYWJlbD48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgdmFsdWUgPSI8JT1wYXNzd29yZCU+IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiLz48L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbmFtZXNfZmluZFF1YWxpZmllcnNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL25hbWVzX2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNlZTY4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbmFtZXNfZmluZFF1YWxpZmllcnNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJmaW5kX3F1YWxpZmllcl9leGFjdF9uYW1lX21hdGNoIiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5leGFjdE5hbWVNYXRjaCU+Ij48bGFiZWwgZm9yPSJmaW5kX3F1YWxpZmllcl9leGFjdF9uYW1lX21hdGNoIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FWEFDVF9OQU1FX01BVENIIiklPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImZpbmRfcXVhbGlmaWVyX2Nhc2Vfc2Vuc2l0aXZlX21hdGNoIiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5jYXNlU2Vuc2l0aXZlTWF0Y2glPiI+PGxhYmVsIGZvcj0iZmluZF9xdWFsaWZpZXJfY2FzZV9zZW5zaXRpdmVfbWF0Y2giPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBU0VfU0VOU0lUSVZFX01BVENIIiklPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MzE4NTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3Jlc3VsdHNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ1tdIHNwZWNpZmljSW5mbyA9IChTdHJpbmdbXSlzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIFN0cmluZyB0aXRsZSA9IHNwZWNpZmljSW5mb1swXTsKLSAgIFN0cmluZyBwYXJlbnRDb250YWluZXJJZCA9IHNwZWNpZmljSW5mb1sxXTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9yZXN1bHRzZm9ybWhlYWRlci5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c2Zvcm1oZWFkZXIuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDNjMjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9yZXN1bHRzZm9ybWhlYWRlci5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGl0bGVJbWFnZVBhdGgpKSU+IiBhbHQ9IiI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotPCUKLSAgIGludCBjb2xzcGFuID0gMTsKLSAgIGlmIChoYXNUYXJnZXQpCi0gICB7Ci0gICAgIFN0cmluZyByZXR1cm5MaW5rID0gVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvclJldHVybigpOwotJT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSIqIj4mbmJzcDs8L3RkPgotICAgIDx0ZCBhbGlnbj0icmlnaHQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChyZXR1cm5MaW5rKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfVEFSR0VUIiklPjwvYT4KLSAgICA8L3RkPgotPCUKLSAgICAgY29sc3BhbiArPSAyOwotICAgfQotJT4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgY29sc3Bhbj08JT1jb2xzcGFuJT4+IDxpbWcgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiIGFsaWduPSJ0b3AiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiPiA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNvbHNwYW49PCU9Y29sc3BhbiU+PgotPCUKLSAgIGlmIChoYXNUYXJnZXQpCi0gICB7Ci0lPgotPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU1VCUVVFUlkiKSU+Ci08JQotICAgfQotJT4KLTwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1FVRVJZIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkX2NhdGVnb3JpZXNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkX2NhdGVnb3JpZXNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjFmZjAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZF9jYXRlZ29yaWVzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPiAKLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VSX0RFRklORURfQ0FURUdPUklFUyIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDwhLS0KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0U2VsZWN0ZWREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2FuY2VsU2VsZWN0ZWREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICAtLT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6Jyc7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDwhLS0KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgLS0+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTUlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICA8IS0tCi0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DSEVDS0VEIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iNzAlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSUxFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iKiI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICAgIC0tPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzUHVibGlzaGVyQXNzZXJ0aW9uc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNQdWJsaXNoZXJBc3NlcnRpb25zX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyODIyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNQdWJsaXNoZXJBc3NlcnRpb25zX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdbXSBzcGVjaWZpY0luZm8gPSAoU3RyaW5nW10pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0gICBTdHJpbmcgdGFibGVUaXRsZUtleSA9IHNwZWNpZmljSW5mb1swXTsKLSAgIGJvb2xlYW4gaGFzRXJyb3JzID0gc3BlY2lmaWNJbmZvWzFdLmVxdWFscyhCb29sZWFuLlRSVUUudG9TdHJpbmcoKSk7Ci0gICBTdHJpbmcgcXVlcnlJdGVtU3RyaW5nID0gc3BlY2lmaWNJbmZvWzJdOwotICAgU3RyaW5nIHBhcmVudENvbnRhaW5lcklkID0gc3BlY2lmaWNJbmZvWzNdOwotICAgU3RyaW5nIHRyYW5zZmVyVGFyZ2V0S2V5ID0gc3BlY2lmaWNJbmZvWzRdOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRhYmxlVGl0bGVLZXkpJT48L3N0cm9uZz4KLTwlCi0gICBpZiAoaGFzRXJyb3JzKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPiAgICAgICAgIAotICAgIDwvdGQ+Ci08JQotICAgaWYgKHNlY3Rpb25IZWFkZXJJbmZvLmlzRHluYW1pYygpKQotICAgewotJT4gICAgICAgCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6aW5pdGlhdGVTdWJRdWVyeSgnPCU9cGFyZW50Q29udGFpbmVySWQlPicsJzwlPXRyYW5zZmVyVGFyZ2V0S2V5JT4nLDwlPXF1ZXJ5SXRlbVN0cmluZyU+LHRydWUpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0dFVCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDppbml0aWF0ZVN1YlF1ZXJ5KCc8JT1wYXJlbnRDb250YWluZXJJZCU+JywnPCU9dHJhbnNmZXJUYXJnZXRLZXklPicsPCU9cXVlcnlJdGVtU3RyaW5nJT4sZmFsc2UpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0ZJTkQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci08JQotICAgfQotJT4gICAgICAgCi0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9KChCdXNpbmVzc0VsZW1lbnQpdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKS5nZXRCdXNpbmVzc0VudGl0eSgpLmdldERlZmF1bHROYW1lU3RyaW5nKCklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVJFQ1RJT04iKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BU1NFUlRJT05fVFlQRSIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWIzZGE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gc3BlY2lmaWNJbmZvID0gKFN0cmluZ1tdKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nIHRhYmxlVGl0bGVLZXkgPSBzcGVjaWZpY0luZm9bMF07Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9IHNwZWNpZmljSW5mb1sxXS5lcXVhbHMoQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkpOwotICAgU3RyaW5nIHF1ZXJ5SXRlbVN0cmluZyA9IHNwZWNpZmljSW5mb1syXTsKLSAgIFN0cmluZyBwYXJlbnRDb250YWluZXJJZCA9IHNwZWNpZmljSW5mb1szXTsKLSAgIFN0cmluZyB0cmFuc2ZlclRhcmdldEtleSA9IHNwZWNpZmljSW5mb1s0XTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0YWJsZVRpdGxlS2V5KSU+PC9zdHJvbmc+Ci08JQotICAgaWYgKGhhc0Vycm9ycykKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4gICAgICAgICAKLSAgICA8L3RkPgotPCUKLSAgIGlmIChzZWN0aW9uSGVhZGVySW5mby5pc0R5bmFtaWMoKSkKLSAgIHsKLSU+ICAgICAgIAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmluaXRpYXRlU3ViUXVlcnkoJzwlPXBhcmVudENvbnRhaW5lcklkJT4nLCc8JT10cmFuc2ZlclRhcmdldEtleSU+Jyw8JT1xdWVyeUl0ZW1TdHJpbmclPix0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19HRVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6aW5pdGlhdGVTdWJRdWVyeSgnPCU9cGFyZW50Q29udGFpbmVySWQlPicsJzwlPXRyYW5zZmVyVGFyZ2V0S2V5JT4nLDwlPXF1ZXJ5SXRlbVN0cmluZyU+LGZhbHNlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19GSU5EIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotPCUKLSAgIH0KLSU+ICAgICAgIAotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FmZDk0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNkNmE3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODVjMDk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjMwNDNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWQ3Y2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19vcGVuX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvY2F0ZWdvcnkuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9jYXRlZ29yeS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MTRkN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9jYXRlZ29yeS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMThkNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9maW5kX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9maW5kX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvZmluZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NDBhMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9maW5kX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc1MDY2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1Njk5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzQyNjNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmNlZjFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTg5NGZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDVlYTVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWZmODU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hlcl9hc3NlcnRpb25zX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGU5OTJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MzdkN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNTUwMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfb3Blbl9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Y2ExNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyeS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJ5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwNzY2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJ5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlkNzk2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxNTA2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWdpc3RyeS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ2lzdHJ5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0M2NhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ2lzdHJ5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVnc3RyeWNhdF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWdzdHJ5Y2F0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzN2Q1OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWdzdHJ5Y2F0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E2NzE0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzMjVjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlNGE3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJkOTgyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfb3Blbl9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFmY2MwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOThmNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNjU0NGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODJiNGMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjg2MDUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OTIyYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2guZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjU0MTY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzMwYjBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0ZGQzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhiZDgzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZWIxOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NzEzZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl9jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl9jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGRjOWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL25hdmlnYXRvcl90b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEVOVCU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VjOWNhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdHJlZXZpZXcuY3NzIikpJT4iPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3RyZWV2aWV3LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTwlCi0gICBTdHJpbmcgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIGludCBmb2N1c2VkTm9kZUlkID0gbmF2aWdhdG9yTWFuYWdlci5nZXRGb2N1c2VkTm9kZUlkKCk7Ci0gICBTdHJpbmcgZm9jdXNlZEFuY2hvck5hbWUgPSBTdHJpbmcudmFsdWVPZihmb2N1c2VkTm9kZUlkKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgIHsKLSAgICAgc2VsZWN0ZWRBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSAgICAgaWYgKGZvY3VzZWROb2RlSWQgPT0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKQotICAgICAgIGZvY3VzZWRBbmNob3JOYW1lID0gc2VsZWN0ZWRBbmNob3JOYW1lOwotICAgfQotJT4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25Mb2FkPSJzZWxmLmxvY2F0aW9uLmhhc2g9JyM8JT1mb2N1c2VkQW5jaG9yTmFtZSU+JztzZXRTZWxlY3RlZEFuY2hvck5hbWUoJzwlPXNlbGVjdGVkQW5jaG9yTmFtZSU+JykiIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0cmVlY29udGVudGJvcmRlciI+Ci08JT1uYXZpZ2F0b3JNYW5hZ2VyLnJlbmRlclRyZWVWaWV3KHJlc3BvbnNlKSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmZlNTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoInVkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChVRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvbmF2aWdhdG9yLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgZWxzZQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX05BVklHQVRPUiIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRSZWZyZXNoID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfUkVGUkVTSCIpOwotICAgU3RyaW5nIGFsdENsZWFyID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQ0xFQVIiKTsKLSU+ICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdFJlZnJlc2glPiIgdGl0bGU9IjwlPWFsdFJlZnJlc2glPiI+PC9hPjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MWQxYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLlBST1BFUlRJRVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05URU5UJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ5MTA1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROYXZpZ2F0b3JOb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUgIT0gbnVsbCkKLSAgIHsKLSAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgIGVsc2UKLSAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTmF2aWdhdG9yTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgbG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZFRvb2wuZ2V0Rm9ybUxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0FDVElPTl9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOWNkMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ1ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoVURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9hY3Rpb25zLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAodWRkaVBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICB9Ci0gICBpZiAoZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9PSBudWxsKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0FDVElPTlMiKSU+PC90ZD4KLTwlCi0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROYXZpZ2F0b3JOb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUgIT0gbnVsbCkKLSAgIHsKLSAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgIGVsc2UKLSAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTmF2aWdhdG9yTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8dG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpO2krKykKLSAgICAgewotICAgICAgIFRvb2wgdG9vbCA9IChUb29sKXRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0lPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48JT10b29sLnJlbmRlclRvb2wocmVzcG9uc2UsY29udHJvbGxlciklPjwvdGQ+Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9jYnBhbmVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2NicGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzI3MTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2NicGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIGNhdGVnb3J5QnJvd3NlcldpbmRvdyA9IHRvcDsKLSAgdmFyIGNhdGVnb3J5QnJvd3NlcldpbmRvd1dvcmtBcmVhID0gdG9wLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19XT1JLQVJFQSU+Il07Ci0gIHZhciBjYXRlZ29yeUJyb3dzZXJXaW5kb3dUb29sYmFyID0gY2F0ZWdvcnlCcm93c2VyV2luZG93LmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19UT09MQkFSJT4iXTsKLSAgdmFyIGNhdGVnb3J5QnJvd3NlcldpbmRvd0NvbnRlbnQgPSBjYXRlZ29yeUJyb3dzZXJXaW5kb3cuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX0NPTlRFTlQlPiJdOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9kZXRhaWxzdGFibGVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmRlMzcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTU1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3codGFibGVDb250YWluZXJJZCx0ZXh0Q29udHJvbFRpdGxlLGhhc0Vycm9yKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNzAlIjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIjwlPUFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCU+IikpOyA8JS8vIHZpZXdJZCU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwgbGFuZ3VhZ2UlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIHRleHQlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIix0ZXh0Q29udHJvbFRpdGxlKSk7IDwlLy8gY29udHJvbCB0aXRsZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7IDwlLy8gbW9kZSU+Ci0gICAgaWYgKGhhc0Vycm9yKQotICAgIHsKLSAgICAgIHZhciBsYW5ndWFnZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgbGFuZ3VhZ2VTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCk7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGxhbmd1YWdlU2VsZWN0KTsKLSAgICAgIAotICAgICAgdmFyIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICB0ZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIHRleHRJbnB1dC50aXRsZSA9IHRleHRDb250cm9sVGl0bGU7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKHRleHRJbnB1dCk7Ci0gICAgICAKLSAgICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgCi0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4pCi0gIHsKLSAgICBmb3IgKHZhciBpPTA7aTxjb2x1bW4uY2hpbGROb2Rlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGNvbHVtbi5yZW1vdmVDaGlsZChjb2x1bW4uY2hpbGROb2Rlc1tpXSk7Ci0gICAgICBpLS07Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgcmVtb3ZlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQocmVtb3ZlTGluaywicmVtb3ZlRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIHJlbW92ZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChyZW1vdmVMaW5rKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGVkaXRMaW5rLCJlZGl0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsgIAotICB9ICAKLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNMYW5ndWFnZUlucHV0Um93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgCi0gICAgdmFyIGxhbmdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICB2YXIgaW5wdXRWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICB2YXIgdGV4dENvbnRyb2xUaXRsZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIikKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gdHJ1ZTsKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgCi0gICAgdmFyIGxhbmd1YWdlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQobGFuZ3VhZ2VTZWxlY3QsY29sdW1uMUNvbnRyb2wpOwotICAgIGxhbmd1YWdlU2VsZWN0LmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICBzZXRMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCxsYW5nSWQpOwotICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZCh0ZXh0SW5wdXQsY29sdW1uMkNvbnRyb2wpOwotICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIHRleHRJbnB1dC50aXRsZSA9IHRleHRDb250cm9sVGl0bGU7Ci0gICAgdGV4dElucHV0LnZhbHVlID0gaW5wdXRWYWx1ZTsKLQotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjMpOwotICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyh0YWJsZUNvbnRhaW5lcklkLGluZGV4LHZpZXdJZCxsYW5nSWQsaW5wdXRWYWx1ZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytpbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlID0gdmlld0lkOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IGxhbmdJZDsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPSBpbnB1dFZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKTsKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgc2V0TGFuZ3VhZ2VTZWxlY3QoY29sdW1uMUNvbnRyb2wsbGFuZ0lkKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgdmFyIHRlbXBTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgIHBvcHVsYXRlTGFuZ3VhZ2VTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgICB2YXIgbGFuZ3VhZ2UgPSBzZXRMYW5ndWFnZVNlbGVjdCh0ZW1wU2VsZWN0LGxhbmdJZCk7Ci0gICAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhsYW5ndWFnZSkpLGNvbHVtbjFDb250cm9sKTsKLSAgICB9Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjJDb250cm9sLnZhbHVlID0gaW5wdXRWYWx1ZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhpbnB1dFZhbHVlKSksY29sdW1uMkNvbnRyb2wpCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZURldGFpbHNMYW5ndWFnZUlucHV0Um93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgpOwotICAgIGZpeERldGFpbHNMYW5ndWFnZUlucHV0Um93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgCi0gICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICB2YXIgbGFuZ0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciBpbnB1dFZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciByb3dBY3Rpb25MaW5rSHJlZiA9IGNvbHVtbjMuY2hpbGROb2Rlc1tjb2x1bW4zLmNoaWxkTm9kZXMubGVuZ3RoLTFdLmhyZWY7Ci0gICAgaWYgKHJvd0FjdGlvbkxpbmtIcmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgIT0gMCkKLSAgICAgIHJldHVybjsKLSAgICAgIAotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlTGFuZ3VhZ2VTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgdmFyIGxhbmd1YWdlID0gc2V0TGFuZ3VhZ2VTZWxlY3QodGVtcFNlbGVjdCxsYW5nSWQpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGxhbmd1YWdlKSksY29sdW1uMUNvbnRyb2wpOwotICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhpbnB1dFZhbHVlKSksY29sdW1uMkNvbnRyb2wpOwotCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMyk7Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMscm93SW5kZXgpOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmaXhEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpOwotICB9Ci0gIAotICBmdW5jdGlvbiBmaXhEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICA8JS8vIEZpeCB0aGUgbGlua3MlPgotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW2ldOwotICAgICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSBjb2x1bW5zLml0ZW0oMCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIAotICAgICAgZm9yICh2YXIgaj0xO2o8Y29sdW1ucy5sZW5ndGg7aisrKQotICAgICAgewotICAgICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgICBjb2x1bW5zLml0ZW0oaikuY2xhc3NOYW1lID0gInJvd2NvbG9yIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgICB2YXIgbGluayA9IGNvbHVtbjMuY2hpbGROb2Rlc1tjb2x1bW4zLmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgICAgdmFyIHJlbW92ZUxpbms7Ci0gICAgICBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6cmVtb3ZlIikgPT0gMCkKLSAgICAgICAgcmVtb3ZlTGluayA9IHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlbW92ZUxpbmsgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4zKTsgICAgICAgICAgICAKLSAgICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKTsKLSAgICAgIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpyZW1vdmUiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4zLGkpOwotICAgICAgZWxzZSBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyxpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmVkaXQiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyxpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGVkaXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotICAgIAotICBmdW5jdGlvbiBjYW5jZWxTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNhbmNlbERldGFpbHNMYW5ndWFnZUlucHV0Um93RWRpdCh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0lkZW50aWZpZXJSb3codGFibGVDb250YWluZXJJZCxoYXNFcnJvcikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIAotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICIxMCUiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNDAlIjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLndpZHRoID0gIjQwJSI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIjwlPUFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCU+IikpOyA8JS8vIHZpZXdJZCU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwga2V5IHR5cGUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIGtleSBuYW1lJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBrZXkgdmFsdWUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixoYXNFcnJvcikpOyA8JS8vIG1vZGUlPgotICAgIAotICAgIHZhciBpZGVudGlmaWVyVHlwZVNlbGVjdDsKLSAgICB2YXIga2V5TmFtZVRleHRJbnB1dDsKLSAgICBpZiAoaGFzRXJyb3IpCi0gICAgewotICAgICAgaWRlbnRpZmllclR5cGVTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgIGlkZW50aWZpZXJUeXBlU2VsZWN0Lm9uY2hhbmdlID0gaGFuZGxlSWRlbnRpZmllckNoYW5nZTsKLSAgICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QoaWRlbnRpZmllclR5cGVTZWxlY3QpOwotICAgICAgaWRlbnRpZmllclR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChpZGVudGlmaWVyVHlwZVNlbGVjdCk7ICAgIAotICAgIAotICAgICAga2V5TmFtZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgICBrZXlOYW1lVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfTkFNRSIpJT4iOwotICAgICAgY29sdW1uMi5hcHBlbmRDaGlsZChrZXlOYW1lVGV4dElucHV0KTsKLQotICAgICAgdmFyIGtleVZhbHVlVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgIGtleVZhbHVlVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgICBrZXlWYWx1ZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX1ZBTFVFIiklPiI7Ci0gICAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGtleVZhbHVlVGV4dElucHV0KTsgICAgICAKLSAgICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICAgIGlmIChoYXNFcnJvcikKLSAgICAgIGtleU5hbWVUZXh0SW5wdXQudmFsdWUgPSBpZGVudGlmaWVyVHlwZVNlbGVjdC5vcHRpb25zWzBdLnRleHQ7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzSWRlbnRpZmllclJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgcmVtb3ZlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQocmVtb3ZlTGluaywicmVtb3ZlRGV0YWlsc0lkZW50aWZpZXJSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIHJlbW92ZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChyZW1vdmVMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoZWRpdExpbmssImVkaXREZXRhaWxzSWRlbnRpZmllclJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9ICAKLQotICBmdW5jdGlvbiBhZGREZXRhaWxzSWRlbnRpZmllclJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgY2FuY2VsTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoY2FuY2VsTGluaywiY2FuY2VsRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBjYW5jZWxMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoY2FuY2VsTGluayk7ICAKLSAgfQotCi0gIGZ1bmN0aW9uIGVkaXREZXRhaWxzSWRlbnRpZmllclJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIAotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciB0TW9kZWxLZXkgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgICAgIAotICAgIHZhciBrZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciBrZXlWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIikKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgdmFyIGlkZW50aWZpZXJUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgaWRlbnRpZmllclR5cGVTZWxlY3Qub25jaGFuZ2UgPSBoYW5kbGVJZGVudGlmaWVyQ2hhbmdlOwotICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QoaWRlbnRpZmllclR5cGVTZWxlY3QpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGlkZW50aWZpZXJUeXBlU2VsZWN0LGNvbHVtbjFDb250cm9sKTsKLSAgICBpZGVudGlmaWVyVHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgc2V0VE1vZGVsS2V5U2VsZWN0KGlkZW50aWZpZXJUeXBlU2VsZWN0LHRNb2RlbEtleSk7ICAgIAotICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICB2YXIga2V5TmFtZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMi5yZXBsYWNlQ2hpbGQoa2V5TmFtZVRleHRJbnB1dCxjb2x1bW4yQ29udHJvbCk7Ci0gICAga2V5TmFtZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleU5hbWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9OQU1FIiklPiI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC52YWx1ZSA9IGtleU5hbWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBrZXlWYWx1ZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQsY29sdW1uM0NvbnRyb2wpOwotICAgIGtleVZhbHVlVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9WQUxVRSIpJT4iOwotICAgIGtleVZhbHVlVGV4dElucHV0LnZhbHVlID0ga2V5VmFsdWU7Ci0gICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICAKLSAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHJvd0luZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERldGFpbHNJZGVudGlmaWVyUm93KHRhYmxlQ29udGFpbmVySWQsaW5kZXgsdmlld0lkLHRNb2RlbEtleSxrZXlOYW1lLGtleVZhbHVlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzK2luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWUgPSB2aWV3SWQ7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID0gdE1vZGVsS2V5OwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9IGtleU5hbWU7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlID0ga2V5VmFsdWU7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBzZXRUTW9kZWxLZXlTZWxlY3QoY29sdW1uMUNvbnRyb2wsdE1vZGVsS2V5KTsKLSAgICBlbHNlCi0gICAgewotICAgICAgdmFyIHRlbXBTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgICB2YXIgdE1vZGVsS2V5VmFsdWUgPSBzZXRUTW9kZWxLZXlTZWxlY3QodGVtcFNlbGVjdCx0TW9kZWxLZXkpOwotICAgICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodE1vZGVsS2V5VmFsdWUpLGNvbHVtbjFDb250cm9sKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBjb2x1bW4yQ29udHJvbC52YWx1ZSA9IGtleU5hbWU7Ci0gICAgZWxzZQotICAgICAgY29sdW1uMi5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5TmFtZSksY29sdW1uMkNvbnRyb2wpOwotICAgICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjNDb250cm9sLnZhbHVlID0ga2V5VmFsdWU7Ci0gICAgZWxzZQotICAgICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5VmFsdWUpLGNvbHVtbjNDb250cm9sKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZURldGFpbHNJZGVudGlmaWVyUm93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgpOwotICAgIGZpeERldGFpbHNJZGVudGlmaWVyUm93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNJZGVudGlmaWVyUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICB2YXIga2V5TmFtZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICB2YXIga2V5VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWU7Ci0gICAgdmFyIHJvd0FjdGlvbkxpbmtIcmVmID0gY29sdW1uNC5jaGlsZE5vZGVzW2NvbHVtbjQuY2hpbGROb2Rlcy5sZW5ndGgtMV0uaHJlZjsKLSAgICBpZiAocm93QWN0aW9uTGlua0hyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSAhPSAwKQotICAgICAgcmV0dXJuOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgdmFyIHRNb2RlbEtleVZhbHVlID0gc2V0VE1vZGVsS2V5U2VsZWN0KHRlbXBTZWxlY3QsdE1vZGVsS2V5KTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0TW9kZWxLZXlWYWx1ZSksY29sdW1uMUNvbnRyb2wpOwotICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlOYW1lKSxjb2x1bW4yQ29udHJvbCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIGNvbHVtbjMucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGtleVZhbHVlKSxjb2x1bW4zQ29udHJvbCk7Ci0KLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkRGV0YWlsc0lkZW50aWZpZXJSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCk7Ci0gICAgPCUvLyBGaXggdGhlIGxpbmtzJT4KLSAgICBmaXhEZXRhaWxzSWRlbnRpZmllclJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpOwotICB9Ci0gIAotICBmdW5jdGlvbiBmaXhEZXRhaWxzSWRlbnRpZmllclJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBmb3IgKHZhciBqPTE7ajxjb2x1bW5zLmxlbmd0aDtqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAicm93Y29sb3IiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgIH0KLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgICAgdmFyIGxpbmsgPSBjb2x1bW40LmNoaWxkTm9kZXNbY29sdW1uNC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICAgIHZhciByZW1vdmVMaW5rOwotICAgICAgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OnJlbW92ZSIpID09IDApCi0gICAgICAgIHJlbW92ZUxpbmsgPSB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZW1vdmVMaW5rID0gZmFsc2U7ICAgICAgCi0gICAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICAgIAotICAgICAgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OnJlbW92ZSIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDplZGl0IikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0U2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBlZGl0RGV0YWlsc0lkZW50aWZpZXJSb3codGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9ICAKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsU2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjYW5jZWxEZXRhaWxzSWRlbnRpZmllclJvd0VkaXQodGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9ICAKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQsaGFzRXJyb3IpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW40ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAKLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotICAgIAotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiNSUiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNTUlIjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLndpZHRoID0gIjI1JSI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIjwlPUFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCU+IikpOyA8JS8vIHZpZXdJZCU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwga2V5IHR5cGUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIGtleSBuYW1lJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBrZXkgdmFsdWUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixoYXNFcnJvcikpOyA8JS8vIG1vZGUlPgotICAgIAotICAgIGlmIChoYXNFcnJvcikKLSAgICB7Ci0gICAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgICBwb3B1bGF0ZUNhdGVnb3J5VHlwZVNlbGVjdChjYXRlZ29yeVR5cGVTZWxlY3QpOwotICAgICAgY2F0ZWdvcnlUeXBlU2VsZWN0LmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY2F0ZWdvcnlUeXBlU2VsZWN0KTsKLSAgICAgIAotICAgICAgdmFyIGtleU5hbWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAga2V5TmFtZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAga2V5TmFtZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9OQU1FIiklPiI7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGtleU5hbWVUZXh0SW5wdXQpOwotICAgICAgCi0gICAgICB2YXIga2V5VmFsdWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGtleVZhbHVlVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX1ZBTFVFIiklPiI7Ci0gICAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGtleVZhbHVlVGV4dElucHV0KTsKLSAgICAgIGFkZENhdGVnb3J5Um93QnJvd3NlTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICB9Ci0gICAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOyAgICAgIAotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBjYW5jZWxMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoY2FuY2VsTGluayk7ICAKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNDYXRlZ29yeVJvd0Jyb3dzZUNhbmNlbEFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoZWRpdExpbmssImVkaXREZXRhaWxzQ2F0ZWdvcnlSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNDYXRlZ29yeVJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgcmVtb3ZlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQocmVtb3ZlTGluaywicmVtb3ZlRGV0YWlsc0NhdGVnb3J5Um93Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICByZW1vdmVMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQocmVtb3ZlTGluayk7ICAKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNDYXRlZ29yeVJvd0Jyb3dzZVJlbW92ZUFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiBlZGl0RGV0YWlsc0NhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgCi0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZQotICAgIHZhciBrZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciBrZXlWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIikKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgdmFyIGNhdGVnb3J5VHlwZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoY2F0ZWdvcnlUeXBlU2VsZWN0LGNvbHVtbjFDb250cm9sKTsKLSAgICBjYXRlZ29yeVR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIHNldFRNb2RlbEtleVNlbGVjdChjYXRlZ29yeVR5cGVTZWxlY3QsdE1vZGVsS2V5KTsgICAgCi0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBrZXlOYW1lVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChrZXlOYW1lVGV4dElucHV0LGNvbHVtbjJDb250cm9sKTsKLSAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9OQU1FIiklPiI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC52YWx1ZSA9IGtleU5hbWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBrZXlWYWx1ZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQsY29sdW1uM0NvbnRyb2wpOwotICAgIGtleVZhbHVlVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9LRVlfVkFMVUUiKSU+IjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC52YWx1ZSA9IGtleVZhbHVlOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgIAotICAgIGFkZERldGFpbHNDYXRlZ29yeVJvd0Jyb3dzZUNhbmNlbEFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZXRhaWxzQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxpbmRleCx2aWV3SWQsdE1vZGVsS2V5LGtleU5hbWUsa2V5VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MraW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZSA9IHZpZXdJZDsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPSB0TW9kZWxLZXk7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlID0ga2V5TmFtZTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWUgPSBrZXlWYWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHNldFRNb2RlbEtleVNlbGVjdChjb2x1bW4xQ29udHJvbCx0TW9kZWxLZXkpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgcG9wdWxhdGVDYXRlZ29yeVR5cGVTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgICB2YXIgdE1vZGVsS2V5VmFsdWUgPSBzZXRUTW9kZWxLZXlTZWxlY3QodGVtcFNlbGVjdCx0TW9kZWxLZXkpOwotICAgICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodE1vZGVsS2V5VmFsdWUpLGNvbHVtbjFDb250cm9sKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBjb2x1bW4yQ29udHJvbC52YWx1ZSA9IGtleU5hbWU7Ci0gICAgZWxzZQotICAgICAgY29sdW1uMi5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5TmFtZSksY29sdW1uMkNvbnRyb2wpOwotICAgICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjNDb250cm9sLnZhbHVlID0ga2V5VmFsdWU7Ci0gICAgZWxzZQotICAgICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5VmFsdWUpLGNvbHVtbjNDb250cm9sKTsgCi0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVEZXRhaWxzQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7Ci0gICAgZml4RGV0YWlsc0NhdGVnb3J5Um93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNDYXRlZ29yeVJvd0VkaXQodGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICB2YXIgY29sdW1uNCA9IGNvbHVtbnMuaXRlbSg0KTsKLSAgICAKLSAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgIHZhciB0TW9kZWxLZXkgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgdmFyIGtleU5hbWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgdmFyIGtleVZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgIHZhciByb3dBY3Rpb25MaW5rSHJlZiA9IGNvbHVtbjQuY2hpbGROb2Rlc1tjb2x1bW40LmNoaWxkTm9kZXMubGVuZ3RoLTFdLmhyZWY7Ci0gICAgaWYgKHJvd0FjdGlvbkxpbmtIcmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgIT0gMCkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPSBmYWxzZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgdmFyIHRlbXBTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBwb3B1bGF0ZUNhdGVnb3J5VHlwZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICB2YXIgdE1vZGVsS2V5VmFsdWUgPSBzZXRUTW9kZWxLZXlTZWxlY3QodGVtcFNlbGVjdCx0TW9kZWxLZXkpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRNb2RlbEtleVZhbHVlKSxjb2x1bW4xQ29udHJvbCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGtleU5hbWUpLGNvbHVtbjJDb250cm9sKTsKLSAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5VmFsdWUpLGNvbHVtbjNDb250cm9sKTsKLQotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOyAgICAKLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQscm93SW5kZXgpOwotICAgIGlmIChyb3dJbmRleCA9PSB0YXJnZXRDYXRlZ29yeVJvdykKLSAgICAgIGNsb3NlQ2F0ZWdvcnlCcm93c2VyKCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkRGV0YWlsc0NhdGVnb3J5Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgcmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySWQpOwotICAgIDwlLy8gRml4IHRoZSBsaW5rcyU+Ci0gICAgZml4RGV0YWlsc0NhdGVnb3J5Um93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpeERldGFpbHNDYXRlZ29yeVJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBmb3IgKHZhciBqPTE7ajxjb2x1bW5zLmxlbmd0aDtqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAicm93Y29sb3IiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgIH0KLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotPCUgICAgICAKLSAgICAgIC8vIEJyb3dzZSwgUmVtb3ZlCi0gICAgICAvLyBCcm93c2UsIENhbmNlbAotICAgICAgLy8gRWRpdAotICAgICAgLy8gQnJvd3NlCi0lPiAgICAgIAotICAgICAgdmFyIGxhc3RMaW5rID0gY29sdW1uNC5jaGlsZE5vZGVzW2NvbHVtbjQuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICAgIGlmIChsYXN0TGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6cmVtb3ZlIikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlUmVtb3ZlQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgICAgZWxzZSBpZiAobGFzdExpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNDYXRlZ29yeVJvd0Jyb3dzZUNhbmNlbEFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxpKTsKLSAgICAgIGVsc2UgaWYgKGxhc3RMaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDplZGl0IikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgICAgZWxzZSBpZiAobGFzdExpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0Om9wZW4iKSA9PSAwKQotICAgICAgICBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0U2VsZWN0ZWREZXRhaWxzQ2F0ZWdvcnlSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgZWRpdERldGFpbHNDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxTZWxlY3RlZERldGFpbHNDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjYW5jZWxEZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQsdE1vZGVsS2V5LGNhdGVnb3J5TmFtZSxpc0NoZWNrZWQsZmlsZU5hbWUsaGFzRXJyb3IpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICAvL3ZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgLy92YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgLy92YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgLy92YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgCi0gICAgLy9jb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4xLndpZHRoID0gIjE1JSI7Ci0gICAgLy9jb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAvL2NvbHVtbjIud2lkdGggPSAiMTAlIjsKLSAgICAvL2NvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIC8vY29sdW1uMy53aWR0aCA9ICI3MCUiOwotICAgIC8vY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgCi0gICAgLy92YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIC8vY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgCi0gICAgLy9jb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsZmlsZU5hbWUpKTsgIDwlLy8gb3JpZ2luYWwgZmlsZSBuYW1lJT4KLSAgICAvL2NvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixoYXNFcnJvcikpOyAgPCUvLyBtb2RlJT4KLSAgICAvL2NvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIix0TW9kZWxLZXkpKTsgPCUvLyB0TW9kZWxLZXklPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2F0ZWdvcnlOYW1lKSk7Ci0gICAgCi0gICAgLy9jb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGlzQ2hlY2tlZCkpOwotICAgIAotICAgIC8vaWYgKGhhc0Vycm9yKQotICAgIC8vewotICAgIC8vICBjb2x1bW4zLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSU+Iix0TW9kZWxLZXkpKTsKLSAgICAvLyAgdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgLy8gIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX0ZJTEVOQU1FJT4iKTsKLSAgICAvLyAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsImZpbGUiKTsKLSAgICAvLyAgZmlsZUlucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0ZJTEUiKSklPiI7Ci0gICAgLy8gIGZpbGVJbnB1dC5jbGFzc05hbWUgPSAidGFibGVmaWxlYnJvd3NlIjsKLSAgICAvLyAgY29sdW1uMy5hcHBlbmRDaGlsZChmaWxlSW5wdXQpOwotICAgIC8vICBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0NhbmNlbExpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICAvL30KLSAgICAvL2Vsc2UKLSAgICAvL3sKLSAgICAvLyAgY29sdW1uMy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmaWxlTmFtZSkpOwotICAgIC8vICBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXRMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgLy99Ci0gICAgCi0gICAgLy9uZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIC8vbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIC8vbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjMpOwotICAgIC8vbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIAotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXRMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChlZGl0TGluaywiZWRpdERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBlZGl0TGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChlZGl0TGluayk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIAotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOyAgICAKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICB2YXIgY29sdW1uNCA9IGNvbHVtbnMuaXRlbSg0KTsKLSAgICAKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgcmV0dXJuOwotICAgIHZhciB0TW9kZWxLZXkgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4zKTsKLSAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSU+Iix0TW9kZWxLZXkpKTsKLSAgICB2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwiPCU9VURESUFjdGlvbklucHV0cy5DQVRFR09SWV9GSUxFTkFNRSU+Iik7Ci0gICAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsImZpbGUiKTsKLSAgICBmaWxlSW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfRklMRSIpKSU+IjsKLSAgICBmaWxlSW5wdXQuY2xhc3NOYW1lID0gInRhYmxlZmlsZWJyb3dzZSI7Ci0gICAgY29sdW1uMy5hcHBlbmRDaGlsZChmaWxlSW5wdXQpOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgIAotICAgIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93Q2FuY2VsTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0NhbmNlbExpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgY2FuY2VsTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoY2FuY2VsTGluaywiY2FuY2VsRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dFZGl0Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBjYW5jZWxMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoY2FuY2VsTGluayk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93RWRpdCh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIAotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPT0gInRydWUiKTsKLSAgICBpZiAoIWVkaXRhYmxlKQotICAgICAgcmV0dXJuOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjMpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlKSk7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uNCk7Ci0gICAgCi0gICAgYWRkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dFZGl0TGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0U2VsZWN0ZWREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBlZGl0RGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbFNlbGVjdGVkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2FuY2VsRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9ICAKLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCxoYXNFcnJvcikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiODUlIjsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAKLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotICAgIAotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iKSk7IDwlLy8gdmlld0lkJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBEaXNjb3ZlcnkgVVJMJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsaGFzRXJyb3IpKTsgPCUvLyBtb2RlJT4KLSAgICBpZiAoaGFzRXJyb3IpCi0gICAgewotICAgICAgdmFyIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICB0ZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIHRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RJU0NPVkVSWV9VUkwiKSU+IjsKLSAgICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsKLSAgICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMix0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4yLHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICB9Ci0gICAgCi0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgCi0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHJlbW92ZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KHJlbW92ZUxpbmssInJlbW92ZURldGFpbHNEaXNjb3ZlcnlVUkxSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIHJlbW92ZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChyZW1vdmVMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChlZGl0TGluaywiZWRpdERldGFpbHNEaXNjb3ZlcnlVUkxSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgY2FuY2VsTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoY2FuY2VsTGluaywiY2FuY2VsRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNEaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICAKLSAgICB2YXIgZGlzY292ZXJ5VVJMID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPT0gInRydWUiKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXTsKLSAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZCh0ZXh0SW5wdXQsY29sdW1uMUNvbnRyb2wpOwotICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIHRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RJU0NPVkVSWV9VUkwiKSU+IjsKLSAgICB0ZXh0SW5wdXQudmFsdWUgPSBkaXNjb3ZlcnlVUkw7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMik7Ci0gICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4yLHJvd0luZGV4KTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkLGluZGV4LHZpZXdJZCxkaXNjb3ZlcnlVUkwpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MraW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZSA9IHZpZXdJZDsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPSBkaXNjb3ZlcnlVUkw7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBjb2x1bW4xQ29udHJvbC52YWx1ZSA9IGRpc2NvdmVyeVVSTDsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhkaXNjb3ZlcnlVUkwpKSxjb2x1bW4xQ29udHJvbCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZURldGFpbHNEaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7Ci0gICAgZml4RGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpOwotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxEZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIAotICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgdmFyIGRpc2NvdmVyeVVSTCA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICB2YXIgcm93QWN0aW9uTGlua0hyZWYgPSBjb2x1bW4yLmNoaWxkTm9kZXNbY29sdW1uMi5jaGlsZE5vZGVzLmxlbmd0aC0xXS5ocmVmOwotICAgIGlmIChyb3dBY3Rpb25MaW5rSHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpICE9IDApCi0gICAgICByZXR1cm47Ci0gICAgICAKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPSBmYWxzZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM107Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcoZGlzY292ZXJ5VVJMKSksY29sdW1uMUNvbnRyb2wpOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjIpOwotICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiByZW1vdmVTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCk7Ci0gICAgZml4RGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpOwotICB9Ci0gIAotICBmdW5jdGlvbiBmaXhEZXRhaWxzRGlzY292ZXJ5VVJMUm93TGlua3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIDwlLy8gRml4IHRoZSBsaW5rcyU+Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IGNvbHVtbnMuaXRlbSgwKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgCi0gICAgICBmb3IgKHZhciBqPTE7ajxjb2x1bW5zLmxlbmd0aDtqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAicm93Y29sb3IiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgIH0KLSAgICAgIAotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICAgIHZhciBsaW5rID0gY29sdW1uMi5jaGlsZE5vZGVzW2NvbHVtbjIuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4yKTsKLSAgICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPT0gInRydWUiKTsKLSAgICAgIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpyZW1vdmUiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDplZGl0IikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMixpKTsgCi0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0U2VsZWN0ZWREZXRhaWxzRGlzY292ZXJ5VVJMUm93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGVkaXREZXRhaWxzRGlzY292ZXJ5VVJMUm93KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2FuY2VsRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXQodGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzU2luZ2xlSXRlbVJvdyh0YWJsZUNvbnRhaW5lcklkLGhhc0Vycm9yKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAKLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4wLndpZHRoID0gIjkwJSI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgCi0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gaXRlbSB2YWx1ZSU+Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7IDwlLy8gbW9kZSU+Ci0gICAgCi0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dCcm93c2VBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsd3NkbFR5cGUsY29sdW1uKQotICB7Ci0gICAgdmFyIGJyb3dzZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgYnJvd3NlTGluay5ocmVmID0gImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdjb250ZW50Ym9yZGVyJywiK3dzZGxUeXBlKyIpIjsKLSAgICBicm93c2VMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGJyb3dzZUxpbmspOyAgICAKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93QnJvd3NlQ2FuY2VsQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCx3c2RsVHlwZSxjb2x1bW4pCi0gIHsKLSAgICBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dCcm93c2VBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsd3NkbFR5cGUsY29sdW1uKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgdmFyIGNhbmNlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgY2FuY2VsTGluay5ocmVmID0gImphdmFzY3JpcHQ6Y2FuY2VsRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93RWRpdCgnIit0YWJsZUNvbnRhaW5lcklkKyInKSI7Ci0gICAgY2FuY2VsTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGNhbmNlbExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbikKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBlZGl0TGluay5ocmVmID0gImphdmFzY3JpcHQ6ZWRpdERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvdygnIit0YWJsZUNvbnRhaW5lcklkKyInKSI7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxEZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMCA9IGNvbHVtbnMuaXRlbSgwKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAKLSAgICBjb2x1bW4wLmNoaWxkTm9kZXNbMl0udmFsdWUgPSBmYWxzZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMENvbnRyb2wgPSBjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICBjb2x1bW4wLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXRXU0RMVVJMRGlzcGxheShjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWUpKSxjb2x1bW4wQ29udHJvbCk7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMSk7Ci0gICAgCi0gICAgYWRkRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4xKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgCi0gICAgdmFyIHdzZGxUeXBlID0gY29sdW1uMC5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIGNvbHVtbjAuY2hpbGROb2Rlc1syXS52YWx1ZSA9IHRydWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjBDb250cm9sID0gY29sdW1uMC5jaGlsZE5vZGVzW2NvbHVtbjAuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgdmFyIHdzZGxVUkxFZGl0Q29udHJvbCA9IGNyZWF0ZVdTRExVUkxFZGl0Q29udHJvbCgpOwotICAgIGNvbHVtbjAucmVwbGFjZUNoaWxkKHdzZGxVUkxFZGl0Q29udHJvbCxjb2x1bW4wQ29udHJvbCk7Ci0gICAgd3NkbFVSTEVkaXRDb250cm9sLmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgd3NkbFVSTEVkaXRDb250cm9sLnZhbHVlID0gZ2V0V1NETFVSTERpc3BsYXkoY29sdW1uMC5jaGlsZE5vZGVzWzBdLnZhbHVlKTsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4xKTsKLSAgICAKLSAgICBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dCcm93c2VDYW5jZWxBY3Rpb25MaW5rcyh0YWJsZUNvbnRhaW5lcklkLHdzZGxUeXBlLGNvbHVtbjEpOwotICB9Ci0gIAotICBmdW5jdGlvbiBjcmVhdGVXU0RMVVJMRWRpdENvbnRyb2woKQotICB7Ci0gICAgdmFyIGNvbnRyb2w7Ci0gICAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgICAgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxpbnB1dCBuYW1lPSc8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPic+Iik7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgY29udHJvbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIpOwotICAgIH0KLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotICAKLSAgZnVuY3Rpb24gZ2V0V1NETFVSTERpc3BsYXkod3NkbFVSTCkKLSAgewotICAgIGlmICh3c2RsVVJMLmxlbmd0aCA8IDEpCi0gICAgICB3c2RsVVJMRGlzcGxheSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfV1NETF9VUkxfSVNfVU5SRUFDSEFCTEUiKSklPiI7Ci0gICAgZWxzZQotICAgICAgd3NkbFVSTERpc3BsYXkgPSB3c2RsVVJMOwotICAgIHJldHVybiB3c2RsVVJMRGlzcGxheTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQsd3NkbFR5cGUsd3NkbFVSTCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotCi0gICAgY29sdW1uMC5pbnNlcnRCZWZvcmUoY3JlYXRlSGlkZGVuRWxlbWVudCgiIix3c2RsVHlwZSksY29sdW1uMC5jaGlsZE5vZGVzWzFdKTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMC5jaGlsZE5vZGVzWzJdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgdmFyIHdzZGxVUkxEaXNwbGF5ID0gZ2V0V1NETFVSTERpc3BsYXkod3NkbFVSTCk7Ci0gICAgY29sdW1uMC5jaGlsZE5vZGVzWzBdLnZhbHVlID0gd3NkbFVSTDsKLSAgICAKLSAgICB2YXIgY29sdW1uMENvbnRyb2w7ICAgIAotICAgIGlmIChlZGl0YWJsZSkKLSAgICB7Ci0gICAgICBjb2x1bW4wQ29udHJvbCA9IGNyZWF0ZVdTRExVUkxFZGl0Q29udHJvbCgpOwotICAgICAgY29sdW1uMENvbnRyb2wuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0Jyb3dzZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCx3c2RsVHlwZSxjb2x1bW4xKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbHVtbjBDb250cm9sID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod3NkbFVSTERpc3BsYXkpOwotICAgICAgYWRkRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4xKTsKLSAgICB9Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjb2x1bW4wQ29udHJvbCk7Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgY29sdW1uMENvbnRyb2wudmFsdWUgPSB3c2RsVVJMRGlzcGxheTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbikKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIGNhbmNlbExpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OmNhbmNlbERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0VkaXQoJyIrdGFibGVDb250YWluZXJJZCsiJykiOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uKSAgCi0gIHsKLSAgICB2YXIgZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgZWRpdExpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OmVkaXREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3coJyIrdGFibGVDb250YWluZXJJZCsiJykiOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNOYW1lU2luZ2xlSXRlbVJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgCi0gICAgY29sdW1uMC5jaGlsZE5vZGVzWzFdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMENvbnRyb2wgPSBjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4wLnJlcGxhY2VDaGlsZCh0ZXh0SW5wdXQsY29sdW1uMENvbnRyb2wpOwotICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIHRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lOUFVUX1RFWFRfVkFMVUUiKSU+IjsKLSAgICB0ZXh0SW5wdXQudmFsdWUgPSBjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0KLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4xKTsKLSAgICAKLSAgICBhZGREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMSk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0VkaXQodGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIAotICAgIGNvbHVtbjAuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbCA9IGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgIGNvbHVtbjAucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbHVtbjAuY2hpbGROb2Rlc1swXS52YWx1ZSksY29sdW1uMENvbnRyb2wpOwotICAgIAotICAgIGZvciAodmFyIGk9MDtpPGNvbHVtbjEuY2hpbGROb2Rlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGNvbHVtbjEucmVtb3ZlQ2hpbGQoY29sdW1uMS5jaGlsZE5vZGVzW2ldKTsKLSAgICAgIGktLTsKLSAgICB9Ci0gICAgYWRkRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4xKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGV0YWlsc05hbWVTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQsbmFtZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIAotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4wLmNoaWxkTm9kZXNbMV0udmFsdWUgPT0gInRydWUiKTsKLSAgICBjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWUgPSBuYW1lOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbDsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgewotICAgICAgY29sdW1uMENvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgY29sdW1uMENvbnRyb2wuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGNvbHVtbjBDb250cm9sLnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSU5QVVRfVEVYVF9WQUxVRSIpJT4iOwotICAgICAgY29sdW1uMENvbnRyb2wudmFsdWUgPSBuYW1lOwotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OU19OT05FIiklPiIpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbHVtbjBDb250cm9sID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmFtZSk7Ci0gICAgICBhZGREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjEpOwotICAgIH0KLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNvbHVtbjBDb250cm9sKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0RldGFpbHNEaXNjb3ZlcnlVUkxUYWJsZSh0YWJsZUNvbnRhaW5lcklkLG1vZGlmaWVkTmFtZSx2aWV3SWROYW1lLGRpc2NvdmVyeVVSTE5hbWUsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPT0gInRydWUiKTsKLSAgICAgIHZhciBkaXNjb3ZlcnlVUkw7Ci0gICAgICBpZiAoZWRpdGFibGUpCi0gICAgICAgIGRpc2NvdmVyeVVSTCA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgZGlzY292ZXJ5VVJMID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KHZpZXdJZE5hbWUsdmlld0lkKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoZGlzY292ZXJ5VVJMTmFtZSxkaXNjb3ZlcnlVUkwpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChtb2RpZmllZE5hbWUsZWRpdGFibGUpKTsgICAgICAgIAotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0RldGFpbHNMYW5ndWFnZUlucHV0VGFibGUodGFibGVDb250YWluZXJJZCxtb2RpZmllZE5hbWUsdmlld0lkTmFtZSxsYW5nSWROYW1lLGlucHV0TmFtZSxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgdmFyIGxhbmdJZCxpbnB1dFRleHQ7Ci0gICAgICBpZiAoZWRpdGFibGUpCi0gICAgICB7Ci0gICAgICAgIGxhbmdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XS52YWx1ZTsKLSAgICAgICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgICAgIGlucHV0VGV4dCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbGFuZ0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgICAgICBpbnB1dFRleHQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgICB9Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQodmlld0lkTmFtZSx2aWV3SWQpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChsYW5nSWROYW1lLGxhbmdJZCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGlucHV0TmFtZSxpbnB1dFRleHQpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChtb2RpZmllZE5hbWUsZWRpdGFibGUpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NEZXRhaWxzSWRlbnRpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKTsKLSAgICAgIHZhciB0TW9kZWxLZXksaWRLZXlOYW1lLGlkS2V5VmFsdWU7Ci0gICAgICBpZiAoZWRpdGFibGUpCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XS52YWx1ZTsKLSAgICAgICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgICAgIGlkS2V5TmFtZSA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgICAgIGlkS2V5VmFsdWUgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICAgICAgaWRLZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgICAgICBpZEtleVZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgICAgfQotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfVklFV0lEJT4iLHZpZXdJZCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSU+Iix0TW9kZWxLZXkpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FJT4iLGlkS2V5TmFtZSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFJT4iLGlkS2V5VmFsdWUpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5JREVOVElGSUVSX01PRElGSUVEJT4iLGVkaXRhYmxlKSk7ICAgICAgCi0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRGV0YWlsc0NhdGVnb3J5VGFibGUodGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgdmFyIHRNb2RlbEtleSxjYXRLZXlOYW1lLGNhdEtleVZhbHVlOwotICAgICAgaWYgKGVkaXRhYmxlKQotICAgICAgewotICAgICAgICB0TW9kZWxLZXkgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV0udmFsdWU7Ci0gICAgICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgICAgICBjYXRLZXlOYW1lID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAgICAgY2F0S2V5VmFsdWUgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICAgICAgY2F0S2V5TmFtZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICAgICAgY2F0S2V5VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWU7Ci0gICAgICB9Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVklFV0lEJT4iLHZpZXdJZCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUlPiIsdE1vZGVsS2V5KSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUlPiIsY2F0S2V5TmFtZSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSU+IixjYXRLZXlWYWx1ZSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX01PRElGSUVEJT4iLGVkaXRhYmxlKSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRGV0YWlsc1NpbmdsZUl0ZW1UYWJsZSh0YWJsZUNvbnRhaW5lcklkLG1vZGlmaWVkTmFtZSxpbnB1dE5hbWUsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0yXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIHZhciBpbnB1dFZhbHVlOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGlucHV0VmFsdWUgPSBjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0xXS52YWx1ZTsKLSAgICBlbHNlCi0gICAgICBpbnB1dFZhbHVlID0gY29sdW1uMC5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChpbnB1dE5hbWUsaW5wdXRWYWx1ZSkpOwotICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChtb2RpZmllZE5hbWUsZWRpdGFibGUpKTsgICAgCi0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvcmVzdWx0cy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiNjY3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciBudW1iZXJTZWxlY3RlZCA9IDA7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIG51bWJlclNlbGVjdGVkKys7Ci0gICAgfQotICAgIHJldHVybiBudW1iZXJTZWxlY3RlZDsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc1Jlc3VsdEZvcm0odGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUodGFibGVDb250YWluZXJJZCwiPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+Iixmb3JtLHRydWUpOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgICAvLyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZC4KLSAgICB2YXIgbnVtYmVyU2VsZWN0ZWQgPSBnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKG51bWJlclNlbGVjdGVkID4gMCkKLSAgICAgIHByb2Nlc3NSZXN1bHRGb3JtKHRhYmxlQ29udGFpbmVySWQsZm9ybSk7Ci0gICAgZWxzZQotICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVmcmVzaFNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgZm9ybS5hY3Rpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gICAgLy8gRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgc2VsZWN0ZWQuCi0gICAgdmFyIG51bWJlclNlbGVjdGVkID0gZ2V0TnVtYmVyT2ZTZWxlY3Rpb25zKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGlmIChudW1iZXJTZWxlY3RlZCA+IDApCi0gICAgICBwcm9jZXNzUmVzdWx0Rm9ybSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pOwotICAgIGVsc2UKLSAgICAgIGFsZXJ0KCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSU+Iik7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZFNlbGVjdGlvbnNUb0Zhdm9yaXRlcyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgICAvLyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZC4KLSAgICB2YXIgbnVtYmVyU2VsZWN0ZWQgPSBnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKG51bWJlclNlbGVjdGVkID4gMCkKLSAgICAgIHByb2Nlc3NSZXN1bHRGb3JtKHRhYmxlQ29udGFpbmVySWQsZm9ybSk7Ci0gICAgZWxzZQotICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotICAKLTwlCi0gICBpZiAoc3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlci5zaXplKCkgPiAwKQotICAgewotICAgICBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0IHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgPSAoU3ViUXVlcnlUcmFuc2ZlclRhcmdldClzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLmVsZW1lbnRBdCgwKTsKLSAgICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gc3ViUXVlcnlUcmFuc2ZlclRhcmdldC5nZXRTdWJRdWVyeUtleSgpOwotICAgICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IHN1YlF1ZXJ5S2V5Lmxhc3RJbmRleE9mKCc6Jyk7Ci0gICAgIFN0cmluZyB0YXJnZXRRdWVyeUtleTsKLSAgICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPT0gLTEpCi0gICAgICAgdGFyZ2V0UXVlcnlLZXkgPSAiIjsKLSAgICAgZWxzZQotICAgICAgIHRhcmdldFF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXkuc3Vic3RyaW5nKDAsbGFzdFNlcGFyYXRvclBvcyk7Ci0gICAgIFN0cmluZyB0YXJnZXRQcm9wZXJ0eSA9IHN1YlF1ZXJ5S2V5LnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsc3ViUXVlcnlLZXkubGVuZ3RoKCkpOwotJT4gICAgIAotICBmdW5jdGlvbiB0cmFuc2ZlclNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgZm9ybS5hY3Rpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIC8vIEVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVkLgotICAgIHZhciBudW1iZXJTZWxlY3RlZCA9IGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAobnVtYmVyU2VsZWN0ZWQgPiAwKQotICAgIHsKLTwlCi0gICAgIGlmICh0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKSB8fCB0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUykgfHwgdGFyZ2V0UHJvcGVydHkuZXF1YWxzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSkpCi0gICAgIHsKLSU+Ci0gICAgICBpZiAobnVtYmVyU2VsZWN0ZWQgIT0gMSkKLSAgICAgIHsKLSAgICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1NJTkdMRV9JVEVNIikpJT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi08JQotICAgICAgIEZvcm1Ub29sIHRhcmdldEZvcm1Ub29sID0gc3ViUXVlcnlUcmFuc2ZlclRhcmdldC5nZXRUYXJnZXRGb3JtVG9vbCgpOwotICAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSB0YXJnZXRGb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSl0YXJnZXRGb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHRhcmdldFF1ZXJ5S2V5KTsKLSAgICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzID0gKFZlY3Rvcil0YXJnZXRGb3JtVG9vbFBJLmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTsKLSAgICAgICBpZiAoc2VydmljZUJ1c2luZXNzICE9IG51bGwgJiYgc2VydmljZUJ1c2luZXNzLnNpemUoKSA+IDApCi0gICAgICAgewotJT4KLSAgICAgIGlmICghY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fSVRFTV9SRVBMQUNFTUVOVCIpKSU+IikpCi0gICAgICAgIHJldHVybjsKLTwlCi0gICAgICAgfQotICAgICB9Ci0lPgotICAgICAgcHJvY2Vzc1Jlc3VsdEZvcm0odGFibGVDb250YWluZXJJZCxmb3JtKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotPCUKLSAgIH0KLSU+ICAgICAgIAotPC9zY3JpcHQ+ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjRhZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZnJhbWVzZXRTaXplc0Zvcm0pCi0gIHsKLSAgICB0b2dnbGVEb3VibGVDbGlja0NvbHVtblRpdGxlKCk7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9VURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPi52YWx1ZSA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LmNvbHM7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9VURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4udmFsdWUgPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQucm93czsKLSAgICBmcmFtZXNldFNpemVzRm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q4NjRjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBuYXZpZ2F0b3JDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIG5hdmlnYXRvclRvb2xiYXIgPSBuYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfVE9PTEJBUiU+Il07Ci0gIHZhciBuYXZpZ2F0b3JDb250ZW50ID0gbmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRFTlQlPiJdOwotICB2YXIgYWN0aW9uc0NvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHByb3BlcnRpZXNDb250YWluZXIgPSBhY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIlPiJdOwotICB2YXIgcHJvcGVydGllc1Rvb2xiYXIgPSBwcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19UT09MQkFSJT4iXTsKLSAgdmFyIHByb3BlcnRpZXNDb250ZW50ID0gcHJvcGVydGllc0NvbnRhaW5lci5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEVOVCU+Il07Ci0gIHZhciBzdGF0dXNDb250YWluZXIgPSBhY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBzdGF0dXNUb29sYmFyID0gc3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX1RPT0xCQVIlPiJdOwotICB2YXIgc3RhdHVzQ29udGVudCA9IHN0YXR1c0NvbnRhaW5lci5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iXTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZiMjc4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvd3NkbGJyb3dzZXIuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gc2Vzc2lvbi5nZXRJZCgpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJjb21tb25DYXRlZ29yeU1vZGVscyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJhcHBsaWNhdGlvbiIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFJlcXVpcmVzIGJyb3dzZXJkZXRlY3QuanMsIHRhYmxlcy5qc3AgKGV4cGxvcmVyKQotICB2YXIgcm93Q2hlY2tib3hOYW1lID0gInJvd0NoZWNrYm94TmFtZSI7Ci0gIHZhciBjYXRlZ29yeVdpbmRvdzsKLSAgdmFyIGNhdGVnb3J5V2luZG93Q2xvc2VkID0gdHJ1ZTsKLSAgdmFyIHRhcmdldENhdGVnb3J5Um93ID0gLTE7Ci0gIHZhciB0YXJnZXRDYXRlZ29yeUtleU5hbWVFbGVtZW50OwotICB2YXIgdGFyZ2V0Q2F0ZWdvcnlLZXlWYWx1ZUVsZW1lbnQ7Ci0gIHZhciBsYW5ndWFnZUFycmF5ID0gbmV3IEFycmF5KCk7Ci0gIHZhciBjYXRlZ29yeUFycmF5ID0gbmV3IEFycmF5KCk7Ci0gIHZhciB3aWxkY2FyZENhdGVnb3J5QnJvd3NlclVSTFJlID0gLyglKS87Ci0KLSAgZnVuY3Rpb24gY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkKLSAgewotICAgIGNsb3NlQ2F0ZWdvcnlCcm93c2VyKCk7Ci0gICAgY2xvc2VXU0RMQnJvd3NlcigpOwotICB9Ci0KLSAgZnVuY3Rpb24gTGFuZ3VhZ2UoZGlzcGxheU5hbWUsbGFuZ0lkKQotICB7Ci0gICAgdGhpcy5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lOwotICAgIHRoaXMubGFuZ0lkID0gbGFuZ0lkOwotICB9Ci0KLSAgZnVuY3Rpb24gY29tcGFyZUxhbmd1YWdlRGlzcGxheU5hbWVzKGEsYikKLSAgewotICAgIHZhciByZXN1bHQgPSBhLmRpc3BsYXlOYW1lLmxvY2FsZUNvbXBhcmUoYi5kaXNwbGF5TmFtZSk7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICByZXR1cm4gLTE7Ci0gICAgZWxzZSBpZiAocmVzdWx0ID4gMCkKLSAgICAgIHJldHVybiAxOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0VE1vZGVsS2V5U2VsZWN0KGl0ZW1TZWxlY3QsdE1vZGVsS2V5KQotICB7Ci0gICAgZm9yICh2YXIgaT0wO2k8aXRlbVNlbGVjdC5vcHRpb25zLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGl0ZW1TZWxlY3Qub3B0aW9uc1tpXS52YWx1ZS50b0xvd2VyQ2FzZSgpID09IHRNb2RlbEtleS50b0xvd2VyQ2FzZSgpKQotICAgICAgewotICAgICAgICBpdGVtU2VsZWN0Lm9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gaXRlbVNlbGVjdC5vcHRpb25zW2ldLnRleHQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2V0TGFuZ3VhZ2VTZWxlY3QobGFuZ3VhZ2VTZWxlY3QsbGFuZ3VhZ2VWYWx1ZSkKLSAgewotICAgIHZhciBzdGFydDsKLTwlCi0gICAvLyBDb21wYXJlIHdpdGggdGhlIGVtcHR5IHN0cmluZyBvbmx5IGlmIHRoZSBsYW5ndWFnZVZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcuCi0lPgotICAgIGlmIChsYW5ndWFnZVZhbHVlLmxlbmd0aCA8IDEpCi0gICAgICBzdGFydCA9IDA7Ci0gICAgZWxzZQotICAgICAgc3RhcnQgPSAxOwotICAgIGZvciAodmFyIGk9c3RhcnQ7aTxsYW5ndWFnZVNlbGVjdC5vcHRpb25zLmxlbmd0aDtpKyspCi0gICAgewotPCUKLSAgIC8vIFVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBjaGVjayBpZiBsYW5ndWFnZVZhbHVlIGJlZ2lucyB3aXRoIGEga2V5IHdob3NlIGl0ZW0gaXMgaW4gdGhlIHBpY2sgbGlzdC4gVGhpcyBlbmFibGVzICJFbmdsaXNoIiB0byBiZSBzZWxlY3RlZAotICAgLy8gZm9yIGVuLXh4eCAoZGlhbGVjdHMpLgotJT4KLSAgICAgIHZhciByZWdFeHAgPSBuZXcgUmVnRXhwKCJeIitsYW5ndWFnZVNlbGVjdC5vcHRpb25zW2ldLnZhbHVlLCJpIik7Ci0gICAgICBpZiAocmVnRXhwLnRlc3QobGFuZ3VhZ2VWYWx1ZSkpCi0gICAgICB7Ci0gICAgICAgIGxhbmd1YWdlU2VsZWN0Lm9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gbGFuZ3VhZ2VTZWxlY3Qub3B0aW9uc1tpXS50ZXh0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHBvcHVsYXRlTGFuZ3VhZ2VTZWxlY3QobGFuZ3VhZ2VTZWxlY3QpCi0gIHsKLSAgICBpZiAobGFuZ3VhZ2VBcnJheS5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiIiwiIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9FTiIpKSU+IiwiZW4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FBIikpJT4iLCJhYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQUIiKSklPiIsImFiIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BRiIpKSU+IiwiYWYiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FNIikpJT4iLCJhbSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQVIiKSklPiIsImFyIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BUyIpKSU+IiwiYXMiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FZIikpJT4iLCJheSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQVoiKSklPiIsImF6Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CQSIpKSU+IiwiYmEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JFIikpJT4iLCJiZSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQkciKSklPiIsImJnIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CSCIpKSU+IiwiYmgiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JJIikpJT4iLCJiaSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQk4iKSklPiIsImJuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CTyIpKSU+IiwiYm8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JSIikpJT4iLCJiciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQ0EiKSklPiIsImNhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9DTyIpKSU+IiwiY28iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0NaIikpJT4iLCJjeiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQ1kiKSklPiIsImN5Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9EQSIpKSU+IiwiZGEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0RFIikpJT4iLCJkZSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRFoiKSklPiIsImR6Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9FTCIpKSU+IiwiZWwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VPIikpJT4iLCJlbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRVMiKSklPiIsImVzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9FVCIpKSU+IiwiZXQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VVIikpJT4iLCJldSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRkEiKSklPiIsImZhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9GSSIpKSU+IiwiZmkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZKIikpJT4iLCJmaiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRk8iKSklPiIsImZvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9GUiIpKSU+IiwiZnIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZZIikpJT4iLCJmeSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfR0EiKSklPiIsImdhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9HRCIpKSU+IiwiZ2QiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0dMIikpJT4iLCJnbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfR04iKSklPiIsImduIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9HVSIpKSU+IiwiZ3UiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0hBIikpJT4iLCJoYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSEkiKSklPiIsImhpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9IUiIpKSU+IiwiaHIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0hVIikpJT4iLCJodSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSFkiKSklPiIsImh5Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JQSIpKSU+IiwiaWEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lFIikpJT4iLCJpZSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSUsiKSklPiIsImlrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JTiIpKSU+IiwiaW4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lTIikpJT4iLCJpcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSVQiKSklPiIsIml0Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JVyIpKSU+IiwiaXciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0pBIikpJT4iLCJqYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSkkiKSklPiIsImppIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9KVyIpKSU+IiwianciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tBIikpJT4iLCJrYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS0siKSklPiIsImtrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LTCIpKSU+Iiwia2wiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tNIikpJT4iLCJrbSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS04iKSklPiIsImtuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LTyIpKSU+Iiwia28iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tTIikpJT4iLCJrcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS1UiKSklPiIsImt1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LWSIpKSU+Iiwia3kiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0xBIikpJT4iLCJsYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTE4iKSklPiIsImxuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9MTyIpKSU+IiwibG8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0xUIikpJT4iLCJsdCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTFYiKSklPiIsImx2Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NRyIpKSU+IiwibWciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01JIikpJT4iLCJtaSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTUsiKSklPiIsIm1rIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NTCIpKSU+IiwibWwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01OIikpJT4iLCJtbiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTU8iKSklPiIsIm1vIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NUiIpKSU+IiwibXIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01TIikpJT4iLCJtcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTVQiKSklPiIsIm10Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NWSIpKSU+IiwibXkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX05BIikpJT4iLCJuYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTkUiKSklPiIsIm5lIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9OTCIpKSU+IiwibmwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX05PIikpJT4iLCJubyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfT0MiKSklPiIsIm9jIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9PTSIpKSU+Iiwib20iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX09SIikpJT4iLCJvciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUEEiKSklPiIsInBhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9QTCIpKSU+IiwicGwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1BTIikpJT4iLCJwcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUFQiKSklPiIsInB0Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9RVSIpKSU+IiwicXUiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1JNIikpJT4iLCJybSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUk4iKSklPiIsInJuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9STyIpKSU+Iiwicm8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1JVIikpJT4iLCJydSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUlciKSklPiIsInJ3Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TQSIpKSU+Iiwic2EiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NEIikpJT4iLCJzZCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU0ciKSklPiIsInNnIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TSCIpKSU+Iiwic2giKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NJIikpJT4iLCJzaSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU0siKSklPiIsInNrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TTCIpKSU+Iiwic2wiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NNIikpJT4iLCJzbSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU04iKSklPiIsInNuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TTyIpKSU+Iiwic28iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NRIikpJT4iLCJzcSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1IiKSklPiIsInNyIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TUyIpKSU+Iiwic3MiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NUIikpJT4iLCJzdCIpCi0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TVSIpKSU+Iiwic3UiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NWIikpJT4iLCJzdiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1ciKSklPiIsInN3Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UQSIpKSU+IiwidGEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RFIikpJT4iLCJ0ZSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVEciKSklPiIsInRnIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9USCIpKSU+IiwidGgiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RJIikpJT4iLCJ0aSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVEsiKSklPiIsInRrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UTCIpKSU+IiwidGwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1ROIikpJT4iLCJ0biIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVE8iKSklPiIsInRvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UUiIpKSU+IiwidHIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RTIikpJT4iLCJ0cyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVFQiKSklPiIsInR0Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UVyIpKSU+IiwidHciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1VLIikpJT4iLCJ1ayIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVVIiKSklPiIsInVyIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9VWiIpKSU+IiwidXoiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1ZJIikpJT4iLCJ2aSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVk8iKSklPiIsInZvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9XTyIpKSU+Iiwid28iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1hIIikpJT4iLCJ4aCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfWU8iKSklPiIsInlvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9aSCIpKSU+IiwiemgiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1pVIikpJT4iLCJ6dSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheS5zb3J0KGNvbXBhcmVMYW5ndWFnZURpc3BsYXlOYW1lcyk7Ci0gICAgfQotCi0gICAgZm9yICh2YXIgaT0wO2k8bGFuZ3VhZ2VBcnJheS5sZW5ndGg7aSsrKQotICAgICAgbGFuZ3VhZ2VTZWxlY3Qub3B0aW9uc1tpXSA9IG5ldyBPcHRpb24obGFuZ3VhZ2VBcnJheVtpXS5kaXNwbGF5TmFtZSxsYW5ndWFnZUFycmF5W2ldLmxhbmdJZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3ModGFibGVDb250YWluZXJJZCxuYW1lSW5kZXgsbGFuZ3VhZ2VWYWx1ZSxuYW1lVGV4dFZhbHVlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzK25hbWVJbmRleF07Ci0gICAgdmFyIGxhbmd1YWdlU2VsZWN0ID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgIHZhciBuYW1lVGV4dCA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDEpOwotICAgIHNldExhbmd1YWdlU2VsZWN0KGxhbmd1YWdlU2VsZWN0LGxhbmd1YWdlVmFsdWUpOwotICAgIG5hbWVUZXh0LnZhbHVlID0gbmFtZVRleHRWYWx1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkQ2F0ZWdvcnlSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICAvLyBDaGVjayBpZiBhbnkgcm93cyBhYm92ZSBhbmQgaW5jbHVkaW5nIHRoZSB0YXJnZXRDYXRlZ29yeVJvdyBhcmUgc2VsZWN0ZWQuCi0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIG5ld1RhcmdldENhdGVnb3J5Um93ID0gdGFyZ2V0Q2F0ZWdvcnlSb3c7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTw9dGFyZ2V0Q2F0ZWdvcnlSb3c7aSsrKQotICAgIHsKLSAgICAgIHZhciB0YWJsZVJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZVJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICB7Ci0gICAgICAgIGlmIChpID09IHRhcmdldENhdGVnb3J5Um93KQotICAgICAgICAgIG5ld1RhcmdldENhdGVnb3J5Um93ID0gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdUYXJnZXRDYXRlZ29yeVJvdy0tOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3VGFyZ2V0Q2F0ZWdvcnlSb3cgPT0gLTEpCi0gICAgICBjbG9zZUNhdGVnb3J5QnJvd3NlcigpOwotICAgIHRhcmdldENhdGVnb3J5Um93ID0gbmV3VGFyZ2V0Q2F0ZWdvcnlSb3c7Ci0gICAgcmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySWQpOwotICAgIC8vIEZpeCB0aGUgYnJvd3NlLi4uIGxpbmtzLgotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciB0YWJsZVJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgYnJvd3NlTGluayA9IHRhYmxlUm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIikuaXRlbSgwKTsKLSAgICAgIHNldEpTTGlua1Jvd1RhcmdldChicm93c2VMaW5rLCJvcGVuQ2F0ZWdvcnlCcm93c2VyIix0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFkZExhbmd1YWdlSW5wdXRSb3codGFibGVDb250YWluZXJJZCx0ZXh0Q29udHJvbFRpdGxlKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBsYW5ndWFnZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlTGFuZ3VhZ2VTZWxlY3QobGFuZ3VhZ2VTZWxlY3QpOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQobGFuZ3VhZ2VTZWxlY3QpOwotCi0gICAgdmFyIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMi5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgbGFuZ3VhZ2VTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIHRleHRJbnB1dC50aXRsZSA9IHRleHRDb250cm9sVGl0bGU7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI5MCUiOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKHRhYmxlQ29udGFpbmVySWQsaWRlbnRpZmllckluZGV4LHRNb2RlbEtleSxrZXlOYW1lLGtleVZhbHVlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzK2lkZW50aWZpZXJJbmRleF07Ci0gICAgdmFyIGlkZW50aWZpZXJUeXBlU2VsZWN0ID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgIHZhciByb3dFbGVtZW50Q29sbGVjdGlvbiA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICB2YXIga2V5TmFtZVRleHQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDEpOwotICAgIHZhciBrZXlWYWx1ZVRleHQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDIpOwotICAgIHNldFRNb2RlbEtleVNlbGVjdChpZGVudGlmaWVyVHlwZVNlbGVjdCx0TW9kZWxLZXkpOwotICAgIGtleU5hbWVUZXh0LnZhbHVlID0ga2V5TmFtZTsKLSAgICBrZXlWYWx1ZVRleHQudmFsdWUgPSBrZXlWYWx1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QoaWRlbnRpZmllclR5cGVTZWxlY3QpCi0gIHsKLSAgICB2YXIgY291bnRlciA9IDA7Ci0gICAgaWRlbnRpZmllclR5cGVTZWxlY3Qub3B0aW9uc1tjb3VudGVyKytdID0gbmV3IE9wdGlvbigiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9JREVOVElGSUVSX0RVTlMiKSklPiIsIjwlPVRNb2RlbC5EX1VfTl9TX1RNT0RFTF9LRVklPiIpOwotICAgIGlkZW50aWZpZXJUeXBlU2VsZWN0Lm9wdGlvbnNbY291bnRlcisrXSA9IG5ldyBPcHRpb24oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fSURFTlRJRklFUl9USE9NQVNfUkVHSVNUUlkiKSklPiIsIjwlPVRNb2RlbC5USE9NQVNfUkVHSVNURVJfVE1PREVMX0tFWSU+Iik7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVJZGVudGlmaWVyQ2hhbmdlKGUpCi0gIHsKLSAgICB2YXIgaWRlbnRpZmllclNlbGVjdDsKLSAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgICBpZGVudGlmaWVyU2VsZWN0ID0gZXZlbnQuc3JjRWxlbWVudDsKLSAgICBlbHNlCi0gICAgICBpZGVudGlmaWVyU2VsZWN0ID0gZS50YXJnZXQ7Ci0gICAgdmFyIGNlbGwgPSBpZGVudGlmaWVyU2VsZWN0LnBhcmVudE5vZGU7Ci0gICAgdmFyIHJvdyA9IGNlbGwucGFyZW50Tm9kZTsKLSAgICB2YXIgaW5wdXRFbGVtZW50cyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxpbnB1dEVsZW1lbnRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGlucHV0RWxlbWVudHMuaXRlbShpKS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgaW5wdXRFbGVtZW50cy5pdGVtKGkpLnZhbHVlID0gaWRlbnRpZmllclNlbGVjdC5vcHRpb25zW2lkZW50aWZpZXJTZWxlY3Quc2VsZWN0ZWRJbmRleF0udGV4dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gYWRkSWRlbnRpZmllclJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICB2YXIga2V5VHlwZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIGtleVR5cGVTZWxlY3Qub25jaGFuZ2UgPSBoYW5kbGVJZGVudGlmaWVyQ2hhbmdlOwotICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3Qoa2V5VHlwZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChrZXlUeXBlU2VsZWN0KTsKLQotICAgIHZhciBrZXlOYW1lVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGtleU5hbWVUZXh0SW5wdXQpOwotCi0gICAgdmFyIGtleVZhbHVlVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGtleVZhbHVlVGV4dElucHV0KTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGtleVR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiCi0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI1JSI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleU5hbWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfTkFNRSIpKSU+IjsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4yLndpZHRoID0gIjQwJSI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9WQUxVRSIpKSU+IjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLndpZHRoID0gIjU1JSI7Ci0KLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gICAga2V5TmFtZVRleHRJbnB1dC52YWx1ZSA9IGtleVR5cGVTZWxlY3Qub3B0aW9uc1swXS50ZXh0OwotICB9Ci0gIAotICBmdW5jdGlvbiBDYXRlZ29yeShkaXNwbGF5TmFtZSx0TW9kZWxLZXkpCi0gIHsKLSAgICB0aGlzLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7Ci0gICAgdGhpcy50TW9kZWxLZXkgPSB0TW9kZWxLZXk7Ci0gIH0KLQotICBmdW5jdGlvbiBjb21wYXJlQ2F0ZWdvcnlEaXNwbGF5TmFtZXMoYSxiKQotICB7Ci0gICAgdmFyIHJlc3VsdCA9IGEuZGlzcGxheU5hbWUubG9jYWxlQ29tcGFyZShiLmRpc3BsYXlOYW1lKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChyZXN1bHQgPiAwKQotICAgICAgcmV0dXJuIDE7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIDA7Ci0gIH0gIAotCi0gIGZ1bmN0aW9uIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCkKLSAgewotICAgIGlmIChjYXRlZ29yeUFycmF5Lmxlbmd0aCA9PSAwKQotICAgIHsKLTwlCi0gICBFbnVtZXJhdGlvbiBjb21tb25DYXRlZ29yaWVzID0gY29tbW9uQ2F0ZWdvcnlNb2RlbHMuZWxlbWVudHMoKTsKLSAgIHdoaWxlIChjb21tb25DYXRlZ29yaWVzLmhhc01vcmVFbGVtZW50cygpKQotICAgewotICAgICBDYXRlZ29yeU1vZGVsIGNvbW1vbkNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbCljb21tb25DYXRlZ29yaWVzLm5leHRFbGVtZW50KCk7Ci0lPgotICAgICAgY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUFycmF5Lmxlbmd0aF0gPSBuZXcgQ2F0ZWdvcnkoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb21tb25DYXRlZ29yeU1vZGVsLmdldERpc3BsYXlOYW1lKCkpJT4iLCI8JT1jb21tb25DYXRlZ29yeU1vZGVsLmdldFRNb2RlbEtleSgpJT4iKTsKLTwlCi0gICB9Ci0gICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsKQotICAgewotICAgICB3aGlsZSAodXNlckRlZmluZWRDYXRlZ29yaWVzLmhhc01vcmVFbGVtZW50cygpKQotICAgICB7Ci0gICAgICAgQ2F0ZWdvcnlNb2RlbCB1c2VyRGVmaW5lZENhdGVnb3J5ID0gKENhdGVnb3J5TW9kZWwpdXNlckRlZmluZWRDYXRlZ29yaWVzLm5leHRFbGVtZW50KCk7Ci0lPgotICAgICAgY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUFycmF5Lmxlbmd0aF0gPSBuZXcgQ2F0ZWdvcnkoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VyRGVmaW5lZENhdGVnb3J5LmdldERpc3BsYXlOYW1lKCkpJT4iLCI8JT11c2VyRGVmaW5lZENhdGVnb3J5LmdldFRNb2RlbEtleSgpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgICBjYXRlZ29yeUFycmF5LnNvcnQoY29tcGFyZUNhdGVnb3J5RGlzcGxheU5hbWVzKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh2YXIgaT0wO2k8Y2F0ZWdvcnlBcnJheS5sZW5ndGg7aSsrKQotICAgICAgY2F0ZWdvcnlUeXBlU2VsZWN0Lm9wdGlvbnNbaV0gPSBuZXcgT3B0aW9uKGNhdGVnb3J5QXJyYXlbaV0uZGlzcGxheU5hbWUsY2F0ZWdvcnlBcnJheVtpXS50TW9kZWxLZXkpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0SlNMaW5rUm93VGFyZ2V0KGxpbmssanNGdW5jdGlvbix0YWJsZUNvbnRhaW5lcklkLHJvdykKLSAgewotICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OiIranNGdW5jdGlvbisiKCciK3RhYmxlQ29udGFpbmVySWQrIicsIityb3crIikiOwotICB9Ci0KLSAgZnVuY3Rpb24gb3BlbkNhdGVnb3J5QnJvd3Nlcih0YWJsZUNvbnRhaW5lcklkLHJvdykKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjYXRlZ29yeVNlbGVjdCA9IHRhYmxlLnJvd3Nbcm93XS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICB2YXIgc2VsZWN0ZWRDYXRlZ29yeU9wdGlvbiA9IGNhdGVnb3J5U2VsZWN0Lm9wdGlvbnNbY2F0ZWdvcnlTZWxlY3Qub3B0aW9ucy5zZWxlY3RlZEluZGV4XTsKLSAgICB2YXIgY2F0ZWdvcnlUeXBlID0gdGFibGUucm93c1tyb3ddLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApLm9wdGlvbnMuc2VsZWN0ZWRJbmRleDsKLSAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3Nbcm93XS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB0YXJnZXRDYXRlZ29yeVJvdyA9IHJvdzsKLSAgICB0YXJnZXRDYXRlZ29yeUtleU5hbWVFbGVtZW50ID0gY29sdW1ucy5pdGVtKDIpLmNoaWxkTm9kZXNbMF07Ci0gICAgdGFyZ2V0Q2F0ZWdvcnlLZXlWYWx1ZUVsZW1lbnQgPSBjb2x1bW5zLml0ZW0oMykuY2hpbGROb2Rlc1swXTsKLSAgICB2YXIgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5nZXRXaWxkQ2FyZEFjdGlvbkxpbmsoc2Vzc2lvbklkKSkpJT4iOwotICAgIGNhdGVnb3J5V2luZG93ID0gd2luZG93Lm9wZW4obGluay5yZXBsYWNlKHdpbGRjYXJkQ2F0ZWdvcnlCcm93c2VyVVJMUmUsc2VsZWN0ZWRDYXRlZ29yeU9wdGlvbi52YWx1ZSksImNhdGVnb3J5V2luZG93IiwiaGVpZ2h0PTMwMCx3aWR0aD0zMDAsc3RhdHVzPXllcyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzIik7Ci0gICAgaWYgKGNhdGVnb3J5V2luZG93LmZvY3VzKQotICAgICAgY2F0ZWdvcnlXaW5kb3cuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb3NlQ2F0ZWdvcnlCcm93c2VyKCkKLSAgewotICAgIGlmICghY2F0ZWdvcnlXaW5kb3dDbG9zZWQpCi0gICAgICBjYXRlZ29yeVdpbmRvdy5jbG9zZSgpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncyh0YWJsZUNvbnRhaW5lcklkLGNhdGVnb3J5SW5kZXgsdE1vZGVsS2V5LGtleU5hbWUsa2V5VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MrY2F0ZWdvcnlJbmRleF07Ci0gICAgdmFyIGNhdGVnb3J5VHlwZVNlbGVjdCA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICB2YXIgcm93RWxlbWVudENvbGxlY3Rpb24gPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgdmFyIGtleU5hbWVUZXh0ID0gcm93RWxlbWVudENvbGxlY3Rpb24uaXRlbSgxKTsKLSAgICB2YXIga2V5VmFsdWVUZXh0ID0gcm93RWxlbWVudENvbGxlY3Rpb24uaXRlbSgyKTsKLSAgICBzZXRUTW9kZWxLZXlTZWxlY3QoY2F0ZWdvcnlUeXBlU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAga2V5TmFtZVRleHQudmFsdWUgPSBrZXlOYW1lOwotICAgIGtleVZhbHVlVGV4dC52YWx1ZSA9IGtleVZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGJyb3dzZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGJyb3dzZUxpbmssIm9wZW5DYXRlZ29yeUJyb3dzZXIiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGJyb3dzZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoYnJvd3NlTGluayk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGNhdGVnb3J5VHlwZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjYXRlZ29yeVR5cGVTZWxlY3QpOwotCi0gICAgdmFyIGtleU5hbWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoa2V5TmFtZVRleHRJbnB1dCk7Ci0KLSAgICB2YXIga2V5VmFsdWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQpOwotCi0gICAgYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjYXRlZ29yeVR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiNSUiOwotICAgIGtleU5hbWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlOYW1lVGV4dElucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9OQU1FIikpJT4iOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNTUlIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleVZhbHVlVGV4dElucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9WQUxVRSIpKSU+IjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLndpZHRoID0gIjI1JSI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0KLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGlzY292ZXJ5VVJMUm93U2V0dGluZ3ModGFibGVDb250YWluZXJJZCxkaXNjb3ZlcnlVUkxJbmRleCxkaXNjb3ZlcnlVUkwpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MrZGlzY292ZXJ5VVJMSW5kZXhdOwotICAgIHZhciByb3dFbGVtZW50Q29sbGVjdGlvbiA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICB2YXIgZGlzY292ZXJ5VVJMVGV4dElucHV0ID0gcm93RWxlbWVudENvbGxlY3Rpb24uaXRlbSgxKTsKLSAgICBkaXNjb3ZlcnlVUkxUZXh0SW5wdXQudmFsdWUgPSBkaXNjb3ZlcnlVUkw7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBkaXNjb3ZlcnlVUkxUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoZGlzY292ZXJ5VVJMVGV4dElucHV0KTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGRpc2NvdmVyeVVSTFRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGRpc2NvdmVyeVVSTFRleHRJbnB1dC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ESVNDT1ZFUllfVVJMIikpJT4iOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiOTUlIjsKLQotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRSZXN1bHRSb3codGFibGVDb250YWluZXJJZCxub2RlSWQsdXJsLG5hbWUsZGVzY3JpcHRpb24pCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixub2RlSWQpKTsKLQotICAgIHZhciBuYW1lRGV0YWlsc0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgbmFtZURldGFpbHNMaW5rLmhyZWYgPSB1cmw7Ci0gICAgbmFtZURldGFpbHNMaW5rLnRhcmdldCA9ICI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iOwotICAgIG5hbWVEZXRhaWxzTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuYW1lKSk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChuYW1lRGV0YWlsc0xpbmspOwotCi0gICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhkZXNjcmlwdGlvbikpKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiNDglIjsKLSAgICBjb2x1bW4yLndpZHRoID0gIjQ4JSI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRGaW5kUXVhbGlmaWVyVGFibGUoY29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOwotICAgIHJldHVybiBjb250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIikuaXRlbSgxKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldEZpbmRRdWFsaWZpZXIoZmluZFF1YWxpZmllcixuYW1lVGFibGVDb250YWluZXJJZCxjYXRlZ29yeVRhYmxlQ29udGFpbmVySWQsZmluZFF1YWxpZmllcnNUYWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHR3aXN0T3Blbk5hbWVzID0gZmFsc2U7Ci0gICAgdmFyIHR3aXN0T3BlbkNhdGVnb3JpZXMgPSBmYWxzZTsKLSAgICB2YXIgdHdpc3RPcGVuRmluZFF1YWxpZmllcnMgPSBmYWxzZTsKLQotICAgIGlmIChmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLmV4YWN0TmFtZU1hdGNoJT4iKQotICAgIHsKLSAgICAgIHZhciBmcVRhYmxlID0gZ2V0RmluZFF1YWxpZmllclRhYmxlKG5hbWVUYWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBleGFjdE5hbWVNYXRjaENoZWNrYm94ID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgZXhhY3ROYW1lTWF0Y2hDaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgIHR3aXN0T3Blbk5hbWVzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5jYXNlU2Vuc2l0aXZlTWF0Y2glPiIpCi0gICAgewotICAgICAgdmFyIGZxVGFibGUgPSBnZXRGaW5kUXVhbGlmaWVyVGFibGUobmFtZVRhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIGNhc2VTZW5zaXRpdmVNYXRjaENoZWNrYm94ID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDEpOwotICAgICAgY2FzZVNlbnNpdGl2ZU1hdGNoQ2hlY2tib3guY2hlY2tlZCA9IHRydWU7Ci0gICAgICB0d2lzdE9wZW5OYW1lcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc2VydmljZVN1YnNldCU+IiB8fCBmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLmNvbWJpbmVDYXRlZ29yeUJhZ3MlPiIpCi0gICAgewotICAgICAgdmFyIGZxVGFibGUgPSBnZXRGaW5kUXVhbGlmaWVyVGFibGUoY2F0ZWdvcnlUYWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBjYXRlZ29yeVNlbGVjdCA9IGZxVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpLml0ZW0oMCk7Ci0gICAgICBzZXRTZWxlY3QoY2F0ZWdvcnlTZWxlY3QsZmluZFF1YWxpZmllcik7Ci0gICAgICB0d2lzdE9wZW5DYXRlZ29yaWVzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5hbmRBbGxLZXlzJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIub3JBbGxLZXlzJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIub3JMaWtlS2V5cyU+IikKLSAgICB7Ci0gICAgICB2YXIgZnFUYWJsZSA9IGdldFRhYmxlKGZpbmRRdWFsaWZpZXJzVGFibGVDb250YWluZXJJZCk7Ci0gICAgICB2YXIga2V5U2VsZWN0ID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICAgIHNldFNlbGVjdChrZXlTZWxlY3QsZmluZFF1YWxpZmllcik7Ci0gICAgICBpZiAoZmluZFF1YWxpZmllciAhPSAiPCU9RmluZFF1YWxpZmllci5hbmRBbGxLZXlzJT4iKQotICAgICAgICB0d2lzdE9wZW5GaW5kUXVhbGlmaWVycyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5TmFtZUFzYyU+IiB8fCBmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeU5hbWVEZXNjJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5RGF0ZUFzYyU+IiB8fCBmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeURhdGVEZXNjJT4iKQotICAgIHsKLSAgICAgIHZhciBmcVRhYmxlID0gZ2V0VGFibGUoZmluZFF1YWxpZmllcnNUYWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBzb3J0Q29sbGVjdGlvbiA9IGZxVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgICBmb3IgKHZhciBpPTA7aTxzb3J0Q29sbGVjdGlvbi5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBpZiAoc29ydENvbGxlY3Rpb24uaXRlbShpKS52YWx1ZSA9PSBmaW5kUXVhbGlmaWVyKQotICAgICAgICAgIHNvcnRDb2xsZWN0aW9uLml0ZW0oaSkuY2hlY2tlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoZmluZFF1YWxpZmllciAhPSAiPCU9RmluZFF1YWxpZmllci5zb3J0QnlOYW1lQXNjJT4iICYmIGZpbmRRdWFsaWZpZXIgIT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5RGF0ZUFzYyU+IikKLSAgICAgICAgdHdpc3RPcGVuRmluZFF1YWxpZmllcnMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICh0d2lzdE9wZW5OYW1lcykKLSAgICAgIHR3aXN0T3BlbihuYW1lVGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKHR3aXN0T3BlbkNhdGVnb3JpZXMpCi0gICAgICB0d2lzdE9wZW4oY2F0ZWdvcnlUYWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAodHdpc3RPcGVuRmluZFF1YWxpZmllcnMpCi0gICAgICB0d2lzdE9wZW4oZmluZFF1YWxpZmllcnNUYWJsZUNvbnRhaW5lcklkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUodGFibGVDb250YWluZXJJZCxsYW5nVmFyLHRleHRWYXIsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBsYW5ndWFnZVNlbGVjdHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Ci0gICAgdmFyIHRleHRJbnB1dHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxsYW5ndWFnZVNlbGVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaGlkZGVuTGFuZ3VhZ2VTZWxlY3QgPSBjcmVhdGVIaWRkZW5FbGVtZW50KGxhbmdWYXIsbGFuZ3VhZ2VTZWxlY3RzW2ldLnZhbHVlKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuTGFuZ3VhZ2VTZWxlY3QpOwotICAgIH0KLQotICAgIGZvciAodmFyIGk9MDtpPHRleHRJbnB1dHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAodGV4dElucHV0c1tpXS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgdmFyIGhpZGRlblRleHRJbnB1dCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQodGV4dFZhcix0ZXh0SW5wdXRzW2ldLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5UZXh0SW5wdXQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NOYW1lRmluZFF1YWxpZmllcnModGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0RmluZFF1YWxpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBuYW1lRmluZFF1YWxpZmllckNoZWNrYm94ZXMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxuYW1lRmluZFF1YWxpZmllckNoZWNrYm94ZXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaXRlbSA9IG5hbWVGaW5kUXVhbGlmaWVyQ2hlY2tib3hlcy5pdGVtKGkpOwotICAgICAgaWYgKGl0ZW0uY2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgdmFyIGhpZGRlbkZpbmRRdWFsaWZpZXIgPSBjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIlPiIsaXRlbS52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuRmluZFF1YWxpZmllcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0lkZW50aWZpZXJUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgaWRlbnRpZmllclR5cGVTZWxlY3RzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwotICAgIHZhciB0ZXh0SW5wdXRzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8aWRlbnRpZmllclR5cGVTZWxlY3RzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGhpZGRlbklkZW50aWZpZXJUeXBlU2VsZWN0ID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUlPiIsaWRlbnRpZmllclR5cGVTZWxlY3RzW2ldLnZhbHVlKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuSWRlbnRpZmllclR5cGVTZWxlY3QpOwotICAgIH0KLQotICAgIHZhciBpc0tleU5hbWUgPSB0cnVlOwotICAgIGZvciAodmFyIGk9MDtpPHRleHRJbnB1dHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAodGV4dElucHV0c1tpXS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgIGlmIChpc0tleU5hbWUpCi0gICAgICAgICAgbmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUlPiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUlPiI7Ci0gICAgICAgIHZhciBoaWRkZW5UZXh0SW5wdXQgPSBjcmVhdGVIaWRkZW5FbGVtZW50KG5hbWUsdGV4dElucHV0c1tpXS52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dElucHV0KTsKLSAgICAgICAgaXNLZXlOYW1lID0gIWlzS2V5TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0saXNGaW5kQnVzaW5lc3MpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKLSAgICB2YXIgdGV4dElucHV0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPGNhdGVnb3J5VHlwZVNlbGVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaGlkZGVuQ2F0ZWdvcnlUeXBlU2VsZWN0ID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFJT4iLGNhdGVnb3J5VHlwZVNlbGVjdHNbaV0udmFsdWUpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5DYXRlZ29yeVR5cGVTZWxlY3QpOwotICAgIH0KLQotICAgIHZhciBpc0tleU5hbWUgPSB0cnVlOwotICAgIGZvciAodmFyIGk9MDtpPHRleHRJbnB1dHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAodGV4dElucHV0c1tpXS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgIGlmIChpc0tleU5hbWUpCi0gICAgICAgICAgbmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FJT4iOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSU+IjsKLSAgICAgICAgdmFyIGhpZGRlblRleHRJbnB1dCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQobmFtZSx0ZXh0SW5wdXRzW2ldLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5UZXh0SW5wdXQpOwotICAgICAgICBpc0tleU5hbWUgPSAhaXNLZXlOYW1lOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc0ZpbmRCdXNpbmVzcykKLSAgICB7Ci0gICAgICB0YWJsZSA9IGdldEZpbmRRdWFsaWZpZXJUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBjYXRlZ29yeUZpbmRRdWFsaWZpZXIgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICAgIGlmIChjYXRlZ29yeUZpbmRRdWFsaWZpZXIuc2VsZWN0ZWRJbmRleCAhPSAwKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuRmluZFF1YWxpZmllciA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiU+IixjYXRlZ29yeUZpbmRRdWFsaWZpZXIudmFsdWUpOwotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlbkZpbmRRdWFsaWZpZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NEaXNjb3ZlcnlVUkxUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGV4dElucHV0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPHRleHRJbnB1dHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAodGV4dElucHV0c1tpXS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgdmFyIGhpZGRlblRleHRJbnB1dCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMJT4iLHRleHRJbnB1dHNbaV0udmFsdWUpOwotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlblRleHRJbnB1dCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZpbmRRdWFsaWZpZXJUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgZmluZFF1YWxpZmllclNlbGVjdHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8ZmluZFF1YWxpZmllclNlbGVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgZmluZFF1YWxpZmllclNlbGVjdCA9IGZpbmRRdWFsaWZpZXJTZWxlY3RzLml0ZW0oaSk7Ci0gICAgICB2YXIgaGlkZGVuRmluZFF1YWxpZmllciA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiU+IixmaW5kUXVhbGlmaWVyU2VsZWN0LnZhbHVlKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuRmluZFF1YWxpZmllcik7Ci0gICAgfQotCi0gICAgdmFyIGZpbmRRdWFsaWZpZXJTb3J0UmFkaW9zID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8ZmluZFF1YWxpZmllclNvcnRSYWRpb3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoZmluZFF1YWxpZmllclNvcnRSYWRpb3MuaXRlbShpKS5jaGVja2VkKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuU29ydEVsZW1lbnQgPSBjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIlPiIsZmluZFF1YWxpZmllclNvcnRSYWRpb3MuaXRlbShpKS52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuU29ydEVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NSZXN1bHRUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGlucHV0TmFtZSxmb3JtLHNlbGVjdGVkT25seSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBpbnB1dHMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgICAgaWYgKHNlbGVjdGVkT25seSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGlucHV0cy5pdGVtKDApLmNoZWNrZWQpCi0gICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGlucHV0TmFtZSxpbnB1dHMuaXRlbSgxKS52YWx1ZSkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoaW5wdXROYW1lLGlucHV0cy5pdGVtKDEpLnZhbHVlKSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gaW5pdGlhdGVTdWJRdWVyeShmb3JtQ29udGFpbmVySWQsbmV3U3ViUXVlcnlLZXkscXVlcnlJdGVtLGlzR2V0KQotICB7Ci0gICAgaWYgKGlzR2V0KQotICAgIHsKLSAgICAgIHZhciBoYXNHZXRJdGVtcyA9IGZhbHNlOwotICAgICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICAgICB7Ci0gICAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPjoKLSAgICAgICAgICBoYXNHZXRJdGVtcyA9IDwlPXJlZ05vZGUuaGFzQnVzaW5lc3MoKSU+OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+OgotICAgICAgICAgIGhhc0dldEl0ZW1zID0gPCU9cmVnTm9kZS5oYXNTZXJ2aWNlKCklPjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT46Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgaGFzR2V0SXRlbXMgPSA8JT1yZWdOb2RlLmhhc1NlcnZpY2VJbnRlcmZhY2UoKSU+OwotICAgICAgfQotICAgICAgaWYgKCFoYXNHZXRJdGVtcykKLSAgICAgIHsKLSAgICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0lURU1TX1RPX0dFVCIpKSU+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmFyIGZvcm1Db250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtQ29udGFpbmVySWQpOwotICAgIHZhciBmb3JtID0gZm9ybUNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+LnZhbHVlID0gaXNHZXQ7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPi52YWx1ZSA9IG5ld1N1YlF1ZXJ5S2V5OwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+LnZhbHVlID0gcXVlcnlJdGVtOwotICAgIHZhciBva1RvU3VibWl0ID0gZmFsc2U7Ci0gICAgaWYgKGZvcm1Db250YWluZXJJZCA9PSAiZmluZEJ1c2luZXNzZXNBZHZhbmNlZCIpCi0gICAgICBva1RvU3VibWl0ID0gcHJvY2Vzc0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtKGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAiZmluZFNlcnZpY2VzQWR2YW5jZWQiKQotICAgICAgb2tUb1N1Ym1pdCA9IHByb2Nlc3NGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0oZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZCIpCi0gICAgICBva1RvU3VibWl0ID0gcHJvY2Vzc0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybShmb3JtKTsKLSAgICBlbHNlIGlmIChmb3JtQ29udGFpbmVySWQgPT0gInB1Ymxpc2hTZXJ2aWNlU2ltcGxlIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtKGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAicHVibGlzaFNlcnZpY2VBZHZhbmNlZCIpCi0gICAgICBva1RvU3VibWl0ID0gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtKGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAicHVibGlzaGVyQXNzZXJ0aW9ucyIpCi0gICAgICBva1RvU3VibWl0ID0gaGFuZGxlU3VibWl0KGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzRm9ybShmb3JtKTsKLSAgICBpZiAob2tUb1N1Ym1pdCkKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWQzNzU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c190b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk1NGI1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8cHJlPgotPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuZ2V0TWVzc2FnZXNGcm9tTGlzdCgpKSU+Ci0gICAgICAgIDwvcHJlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJkOWU5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ1ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoVURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3N0YXR1cy5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh1ZGRpUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKHVkZGlQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfU1RBVFVTIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdENsZWFyID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQ0xFQVIiKTsKLSU+ICAgICAgICAgICAKLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IiB0YXJnZXQ9IjwlPVVERElGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3VkZGlfcGVyc3BlY3RpdmVfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvdWRkaV9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2ZmIzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvdWRkaV9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfVURESV9QRVJTUEVDVElWRV9DT05URU5UIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgY29scz0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iIGJnY29sb3I9I0VDRTlEOD4KLSAgPCUKLSAgaWYgKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmlzUlRMKCkpCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL25hdmlnYXRvcl9jb250YWluZXIuanNwIikpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gICU+Ci08L2ZyYW1lc2V0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmMzNWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuQ2xlYXJXU0RMQWN0aW9uIiU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1pZiAoY29udHJvbGxlci5nZXRTZXNzaW9uSWQoKSA9PSBudWxsKSB7Ci0lPgotCi0gPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0JICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnQgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX0NPTlRFTlQlPiJdOwotCQlwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiaHR0cDovLzwlPXJlcXVlc3QuZ2V0U2VydmVyTmFtZSgpJT46PCU9cmVxdWVzdC5nZXRTZXJ2ZXJQb3J0KCklPjwlPXJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSU+L2FjdGlvbnMvU2Vzc2lvblRpbWVkT3V0LmpzcCI7Ci0gPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1DbGVhcldTRExBY3Rpb24gYWN0aW9uID0gbmV3IENsZWFyV1NETEFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jIiAlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9DcmVhdGVJbnN0YW5jZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9DcmVhdGVJbnN0YW5jZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNDAzODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvQ3JlYXRlSW5zdGFuY2VBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuQ3JlYXRlSW5zdGFuY2VBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8JQotICBDcmVhdGVJbnN0YW5jZUFjdGlvbiBhY3Rpb24gPSBuZXcgQ3JlYXRlSW5zdGFuY2VBY3Rpb24oY29udHJvbGxlcik7Ci0gIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gIGFjdGlvbi5leGVjdXRlKCk7Ci0gICU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmJmNDcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbiBhY3Rpb24gPSBuZXcgSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICBpZiAoaW5wdXRzVmFsaWQpCi0gIHsKLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gIH0KLSAgJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGMyZDQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBJbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uIGFjdGlvbiA9IG5ldyBJbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICBpZiAoaW5wdXRzVmFsaWQpCi0gIHsKLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gIH0KLSAgJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyMzlmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQuSFRUUFRyYW5zcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5IVFRQVHJhbnNwb3J0RXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW4ubWlzYy5CQVNFNjREZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24gYWN0aW9uID0gbmV3IEludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbihjb250cm9sbGVyKTsKLVN0cmluZyBodHRwQmFzaWNBdXRoRGF0YSA9IHJlcXVlc3QuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfQVVUSCk7Ci1pZiAoaHR0cEJhc2ljQXV0aERhdGEgIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoRGF0YS5sZW5ndGgoKSA+IDApCi17Ci0gIGludCBiYXNpY0luZGV4ID0gaHR0cEJhc2ljQXV0aERhdGEuaW5kZXhPZihIVFRQVHJhbnNwb3J0LkJBU0lDKTsKLSAgaWYgKGJhc2ljSW5kZXggIT0gLTEpCi0gIHsKLSAgICBCQVNFNjREZWNvZGVyIGRlY29kZXIgPSBuZXcgQkFTRTY0RGVjb2RlcigpOwotICAgIGh0dHBCYXNpY0F1dGhEYXRhID0gbmV3IFN0cmluZyhkZWNvZGVyLmRlY29kZUJ1ZmZlcihodHRwQmFzaWNBdXRoRGF0YS5zdWJzdHJpbmcoYmFzaWNJbmRleCArIEhUVFBUcmFuc3BvcnQuQkFTSUMubGVuZ3RoKCkgKyAxKSkpOwotICAgIGludCBjb2xvbkluZGV4ID0gaHR0cEJhc2ljQXV0aERhdGEuaW5kZXhPZihIVFRQVHJhbnNwb3J0LkNPTE9OKTsKLSAgICBpZiAoY29sb25JbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBhY3Rpb24uYWRkUHJvcGVydHkoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUsIGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KSk7Ci0gICAgICBhY3Rpb24uYWRkUHJvcGVydHkoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQsIGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgaHR0cEJhc2ljQXV0aERhdGEubGVuZ3RoKCkpKTsKLSAgICB9Ci0gIH0KLX0KLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1ib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLWlmICghaW5wdXRzVmFsaWQpCi17Ci0lPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotICAgIDxoZWFkPgotICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICA8L2hlYWQ+Ci0gICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgPC9zY3JpcHQ+Ci0gICAgPC9ib2R5PgotICA8L2h0bWw+Ci08JQotfQotZWxzZQotewotICB0cnkKLSAgewotICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotICAgICAgPGhlYWQ+Ci0gICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgIDwvaGVhZD4KLSAgICAgIDxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICA8JQotICAgICAgICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICAgICAgewotICAgICAgICAgICU+Ci0gICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9yZXN1bHRfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgPCUKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAlPgotICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgIDwlCi0gICAgICAgICAgfQotICAgICAgICAgICU+Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgPC9ib2R5PgotICAgIDwvaHRtbD4KLTwlCi0gIH0KLSAgY2F0Y2ggKEhUVFBUcmFuc3BvcnRFeGNlcHRpb24gaHR0cGUpCi0gIHsKLSAgICBpbnQgY29kZSA9IGh0dHBlLmdldFN0YXR1c0NvZGUoKTsKLSAgICBpZiAoY29kZSA9PSBIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCkKLSAgICB7Ci0gICAgICByZXNwb25zZS5zZXRTdGF0dXMoY29kZSk7Ci0gICAgICByZXNwb25zZS5zZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCwgU3RyaW5nLnZhbHVlT2YoMCkpOwotICAgICAgU3RyaW5nIHd3d0F1dGhEYXRhID0gaHR0cGUuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfV1dXX0FVVEgudG9Mb3dlckNhc2UoKSk7Ci0gICAgICBpZiAod3d3QXV0aERhdGEgPT0gbnVsbCkKLSAgICAgICAgd3d3QXV0aERhdGEgPSBodHRwZS5nZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9XV1dfQVVUSCk7Ci0gICAgICBpZiAod3d3QXV0aERhdGEgPT0gbnVsbCkKLSAgICAgICAgd3d3QXV0aERhdGEgPSBIVFRQVHJhbnNwb3J0LkJBU0lDOwotICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfV1dXX0FVVEgsIHd3d0F1dGhEYXRhKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShTdHJpbmcudmFsdWVPZihjb2RlKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShodHRwZS5nZXRNZXNzYWdlKCkpOwotICAgICAgJT4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLSAgICAgICAgICA8aGVhZD4KLSAgICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgICAgICAgPC9oZWFkPgotICAgICAgICAgIDxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgIDwvYm9keT4KLSAgICAgICAgPC9odG1sPgotICAgICAgPCUKLSAgICB9Ci0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxY2M5ZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQuSFRUUFRyYW5zcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5IVFRQVHJhbnNwb3J0RXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW4ubWlzYy5CQVNFNjREZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLUludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uIGFjdGlvbiA9IG5ldyBJbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1ib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgCi1pZiAoYWN0aW9uLndhc1NhdmVBc1NlbGVjdGVkKCkpCi17Ci0gIC8vIHdyaXRlIHRvIGZpbGUgc3lzdGVtCi0gIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKLSAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIiwiYXR0YWNobWVudDtmaWxlbmFtZT0iK2FjdGlvbi5nZXREZWZhdWx0U2F2ZUFzRmlsZU5hbWUoKSk7Ci0gIGFjdGlvbi53cml0ZVNvdXJjZUNvbnRlbnQocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpOyAgICAKLX0KLWVsc2UKLXsKLSAgaWYgKCFpbnB1dHNWYWxpZCkKLSAgewotICAlPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLSAgICAgIDxoZWFkPgotICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgICA8L2hlYWQ+Ci0gICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgPC9ib2R5PgotICAgIDwvaHRtbD4KLSAgPCUKLSAgfQotICBlbHNlCi0gIHsKLSAgICBpZiAoYWN0aW9uLndhc05ld0ZpbGVTZWxlY3RlZCgpKQotICAgIHsgICAgIAotICAlPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci0gICAgICAgIDxoZWFkPgotICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPjwvc2NyaXB0PgotICAgICAgICA8L2hlYWQ+Ci0gICAgICAgIDxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPC9ib2R5PgotICAgICAgPC9odG1sPgotICAgIDwlICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIGh0dHBCYXNpY0F1dGhEYXRhID0gcmVxdWVzdC5nZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9BVVRIKTsKLSAgICAgIGlmIChodHRwQmFzaWNBdXRoRGF0YSAhPSBudWxsICYmIGh0dHBCYXNpY0F1dGhEYXRhLmxlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgaW50IGJhc2ljSW5kZXggPSBodHRwQmFzaWNBdXRoRGF0YS5pbmRleE9mKEhUVFBUcmFuc3BvcnQuQkFTSUMpOwotICAgICAgICBpZiAoYmFzaWNJbmRleCAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIEJBU0U2NERlY29kZXIgZGVjb2RlciA9IG5ldyBCQVNFNjREZWNvZGVyKCk7Ci0gICAgICAgICAgaHR0cEJhc2ljQXV0aERhdGEgPSBuZXcgU3RyaW5nKGRlY29kZXIuZGVjb2RlQnVmZmVyKGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZyhiYXNpY0luZGV4ICsgSFRUUFRyYW5zcG9ydC5CQVNJQy5sZW5ndGgoKSArIDEpKSk7Ci0gICAgICAgICAgaW50IGNvbG9uSW5kZXggPSBodHRwQmFzaWNBdXRoRGF0YS5pbmRleE9mKEhUVFBUcmFuc3BvcnQuQ09MT04pOwotICAgICAgICAgIGlmIChjb2xvbkluZGV4ICE9IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGFjdGlvbi5hZGRQcm9wZXJ0eShXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSwgaHR0cEJhc2ljQXV0aERhdGEuc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpKTsKLSAgICAgICAgICAgIGFjdGlvbi5hZGRQcm9wZXJ0eShXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9QQVNTV09SRCwgaHR0cEJhc2ljQXV0aERhdGEuc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxLCBodHRwQmFzaWNBdXRoRGF0YS5sZW5ndGgoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICAgJT4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLSAgICAgICAgICA8aGVhZD4KLSAgICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgICAgICAgPC9oZWFkPgotICAgICAgICAgIDxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgICAgd3NkbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgPC9ib2R5PgotICAgICAgICA8L2h0bWw+Ci08JQotICAgICAgfQotICAgICAgY2F0Y2ggKEhUVFBUcmFuc3BvcnRFeGNlcHRpb24gaHR0cGUpCi0gICAgICB7Ci0gICAgICAgIGludCBjb2RlID0gaHR0cGUuZ2V0U3RhdHVzQ29kZSgpOwotICAgICAgICBpZiAoY29kZSA9PSBIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhjb2RlKTsKLSAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCwgU3RyaW5nLnZhbHVlT2YoMCkpOwotICAgICAgICAgIFN0cmluZyB3d3dBdXRoRGF0YSA9IGh0dHBlLmdldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRILnRvTG93ZXJDYXNlKCkpOwotICAgICAgICAgIGlmICh3d3dBdXRoRGF0YSA9PSBudWxsKQotICAgICAgICAgICAgd3d3QXV0aERhdGEgPSBodHRwZS5nZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9XV1dfQVVUSCk7Ci0gICAgICAgICAgaWYgKHd3d0F1dGhEYXRhID09IG51bGwpCi0gICAgICAgICAgICB3d3dBdXRoRGF0YSA9IEhUVFBUcmFuc3BvcnQuQkFTSUM7Ci0gICAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfV1dXX0FVVEgsIHd3d0F1dGhEYXRhKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoU3RyaW5nLnZhbHVlT2YoY29kZSkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGh0dHBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgJT4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci0gICAgICAgICAgICA8aGVhZD4KLSAgICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPjwvc2NyaXB0PgotICAgICAgICAgICAgPC9oZWFkPgotICAgICAgICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICAgICAgd3NkbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICA8L2JvZHk+Ci0gICAgICAgICAgPC9odG1sPgotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZmUyNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvT3BlbldTRExBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLk9wZW5XU0RMQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIE9wZW5XU0RMQWN0aW9uIGFjdGlvbiA9IG5ldyBPcGVuV1NETEFjdGlvbihjb250cm9sbGVyKTsKLQotICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gIGlmICghaW5wdXRzVmFsaWQpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08JQotICB9Ci0gIGVsc2UgewotICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKSB7Ci0gICAgICB3c2RsTmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgd3NkbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLSAgICB9Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvUmVmcmVzaFdTRExBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvUmVmcmVzaFdTRExBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGJlYTU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlJlZnJlc2hXU0RMQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLkNsZWFyV1NETEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLWlmIChjb250cm9sbGVyLmdldFNlc3Npb25JZCgpID09IG51bGwpIHsKLSU+Ci0KLSA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLQkgICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudCA9IHRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfQ09OVEVOVCU+Il07Ci0JCXBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICJodHRwOi8vPCU9cmVxdWVzdC5nZXRTZXJ2ZXJOYW1lKCklPjo8JT1yZXF1ZXN0LmdldFNlcnZlclBvcnQoKSU+PCU9cmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpJT4vYWN0aW9ucy9TZXNzaW9uVGltZWRPdXQuanNwIjsKLSA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSU+CQotCi0gPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSA8L3NjcmlwdD4KLSA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotIDwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgUmVmcmVzaFdTRExBY3Rpb24gYWN0aW9uID0gbmV3IFJlZnJlc2hXU0RMQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gIC8vIFRoZSBhY3Rpb24gbWF5IGJlIGV4ZWN1dGVkIHZpYSBwcm9ncmFtIGxpbmsuCi0gIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBpZiAocGFyYW1zVmFsaWQpIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKWFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgd3NkbE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gIAotICAgIC8vIFJ1biB0aGUgYWN0aW9uLgotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgCi0gICAgaWYgKGFjdGlvblJlc3VsdCkgewotIAklPgotCSA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAJaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKSB7Ci0gICAgICAJd3NkbE5hdmlnYXRvckNvbnRlbnQubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIAl3c2RsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAJd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIAl9Ci0gICAgCWVsc2UgewotICAgICAgCXBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAJfQotICAJPC9zY3JpcHQ+Ci0gICA8JQotICAgfQotICAgZWxzZSB7Ci0gICAlPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIAlpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX1dTRExfTk9ERSIsIHdzZGxOb2RlLmdldE5vZGVOYW1lKCkpKSU+IikpCi0gICAgICAJcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJXU0RMQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlEKSkpJT4iOwotICAgIAllbHNlIHsKLSAgICAgIAl3c2RsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAJd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIAl9Ci0gIAk8L3NjcmlwdD4KLSAgIDwlCi0gIH0KLSB9Ci0lPgotPCUKLX0KLSU+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE3NjQ3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIENyZWF0ZSB0aGUgYWN0aW9uLgotICAgUmVzaXplV1NETEZyYW1lc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVzaXplV1NETEZyYW1lc0FjdGlvbihjb250cm9sbGVyKTsKLSAgIAotICAgLy8gUG9wdWxhdGUgdGhlIGFjdGlvbiB3aXRoIHRoZSByZXF1ZXN0IHByb3BlcnRpZXMuCi0gICBib29sZWFuIHJlc3VsdCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgaWYgKHJlc3VsdCkKLSAgIHsKLSAgICAgYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotICAgICAKLSAgICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCA9IGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCk7Ci0gICAgdmFyIGFjdGlvbnNDb250YWluZXJGcmFtZXNldCA9IGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpOyAgCi0gICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuc2V0QXR0cmlidXRlKCJjb2xzIiwiPCU9d3NkbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iKTsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQuc2V0QXR0cmlidXRlKCJyb3dzIiwiPCU9d3NkbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Iik7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZDQ0YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotaWYgKGNvbnRyb2xsZXIuZ2V0U2Vzc2lvbklkKCkgPT0gbnVsbCkgewotJT4KLQotIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotCSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50ID0gdG9wLmZyYW1lc1siPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9DT05URU5UJT4iXTsKLQkJcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gImh0dHA6Ly88JT1yZXF1ZXN0LmdldFNlcnZlck5hbWUoKSU+OjwlPXJlcXVlc3QuZ2V0U2VydmVyUG9ydCgpJT48JT1yZXF1ZXN0LmdldENvbnRleHRQYXRoKCklPi9hY3Rpb25zL1Nlc3Npb25UaW1lZE91dC5qc3AiOwotIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotJT4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYyIgJT4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NzY0MTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAxYzc2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24KLVN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb24gYWN0aW9uID0gbmV3IFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb24oY29udHJvbGxlcik7Ci0gICAKLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIAotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICAKLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoUmVhZE9ubHlGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFJlYWRPbmx5RnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZDc2OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoUmVhZE9ubHlGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1pZiAod3NkbFBlcnNwZWN0aXZlLmdldFN0YXR1c0NvbnRlbnRUeXBlKCkgPT0gV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9GT1JNKQotICB3c2RsUGVyc3BlY3RpdmUuc2V0U3RhdHVzQ29udGVudFR5cGUoV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9TT1VSQ0UpOwotZWxzZQotICB3c2RsUGVyc3BlY3RpdmUuc2V0U3RhdHVzQ29udGVudFR5cGUoV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9GT1JNKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFdTRExEZXRhaWxzVmlld3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoV1NETERldGFpbHNWaWV3c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxN2FkZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoV1NETERldGFpbHNWaWV3c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMRGV0YWlsc1Rvb2wiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHdzZGxOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1XU0RMRGV0YWlsc1Rvb2wgd3NkbERldGFpbHNUb29sID0gKFdTRExEZXRhaWxzVG9vbCl3c2RsTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotd3NkbERldGFpbHNUb29sLnRvZ2dsZVZpZXdJZCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uQWJvcnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uQWJvcnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWUyZDg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkFib3J0SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5JbnZva2VXU0RMT3BlcmF0aW9uVG9vbCIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi1JbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbCA9IChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCljb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci1pZiAoaW52b2tlV1NETE9wZXJhdGlvblRvb2wuZ2V0RnJhZ21lbnRWaWV3SUQoKS5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0pKQotICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRGcmFnbWVudFZpZXdJRChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSk7Ci1lbHNlCi0gIGludm9rZVdTRExPcGVyYXRpb25Ub29sLnNldEZyYWdtZW50Vmlld0lEKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NWFjMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlN5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi1TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24gYWN0aW9uID0gbmV3IFN5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbihjb250cm9sbGVyKTsKLWJvb2xlYW4gcGFyYW1WYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci1TdHJpbmcgdmlld0lEID0gKFN0cmluZylhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX0lEKTsKLWJvb2xlYW4gc291cmNlVG9Gb3JtID0gdmlld0lELmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STSk7Ci1pZiAoc291cmNlVG9Gb3JtKSB7Ci0gIGlmIChwYXJhbVZhbGlkKSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgaWYgKCFjb25maXJtKCI8JT1jb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9TWU5DX1ZJRVdTIiklPiIpKQotICAgICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkFib3J0SlNQLmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgaWYgKCFjb25maXJtKCI8JT1jb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9TWU5DX1ZJRVdTX0RFU1BJVEVfSU5WQUxJRF9TT1VSQ0VfQ09OVEVOVCIpJT4iKSkKLSAgICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25BYm9ydEpTUC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci1hY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNTg2ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVRvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBUb2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjE2YzIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1VwZGF0ZVdTRExCaW5kaW5nQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5VcGRhdGVXU0RMQmluZGluZ0FjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1pZiAoY29udHJvbGxlci5nZXRTZXNzaW9uSWQoKSA9PSBudWxsKSB7Ci0lPgotCi0gPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0JICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnQgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX0NPTlRFTlQlPiJdOwotCQlwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiaHR0cDovLzwlPXJlcXVlc3QuZ2V0U2VydmVyTmFtZSgpJT46PCU9cmVxdWVzdC5nZXRTZXJ2ZXJQb3J0KCklPjwlPXJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSU+L2FjdGlvbnMvU2Vzc2lvblRpbWVkT3V0LmpzcCI7Ci0gPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gIFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVXU0RMQmluZGluZ0FjdGlvbihjb250cm9sbGVyKTsKLSAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjA2NTJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24iJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmNDgwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotPCUKLUVudW1lcmF0aW9uIHBhcmFtTmFtZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Ci13aGlsZSAocGFyYW1OYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZylwYXJhbU5hbWVzLm5leHRFbGVtZW50KCk7Ci0gIFN0cmluZ1tdIHBhcmFtVmFsdWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1OYW1lKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbVZhbHVlcy5sZW5ndGg7IGkrKykgewotJT4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1wYXJhbU5hbWUlPiIgdmFsdWU9IjwlPXBhcmFtVmFsdWVzW2ldJT4iPgotPCUKLSAgfQotfQotJT4KLTwvZm9ybT4KLTwvYm9keT4KLTwvaHRtbD4KLQotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKGFjdGlvbi5mYXZvcml0ZUV4aXN0cygpKSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVMiKSklPiIpKQotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZjAyZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjM4MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gbmV3IFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjg3NjBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBhY3Rpb24gPSBuZXcgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9GcmFnbWVudHNGb3JtVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvRnJhZ21lbnRzRm9ybVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmFmNDIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9GcmFnbWVudHNGb3JtVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1ub2RlSUQuZGVsZXRlKDAsIG5vZGVJRC5sZW5ndGgoKSk7Ci1ub2RlSUQuYXBwZW5kKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSk7Ci1JbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbCA9IChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi1JdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKCkuaXRlcmF0b3IoKTsKLQotaWYgKGl0Lmhhc05leHQoKSkgewotCVN0cmluZyBoZWFkZXJEaXZJZCA9ICJIZWFkZXIiOwotCVN0cmluZyBoZWFkZXJJbWdJZCA9ICJ4SGVhZGVyIjsKLSAgICAlPgotCTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JICA8dHI+Ci0JICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9aGVhZGVyRGl2SWQlPicsJzwlPWhlYWRlckltZ0lkJT4nKSI+PGltZyBuYW1lPSI8JT1oZWFkZXJJbWdJZCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0JICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9IRUFERVIiKSU+PC9zdHJvbmc+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4KLQkKLQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotCSAgPHRyPgotCSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotCSAgPC90cj4KLQk8L3RhYmxlPgotCQotCTxkaXYgaWQ9IjwlPWhlYWRlckRpdklkJT4iPgotCTwlCi0Jd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCSAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gKFNPQVBIZWFkZXIpIGl0Lm5leHQoKTsKLQkgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7CSAgIAotCSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotCSAgZnJhZ0lELmFwcGVuZChmcmFnLmdldElEKCkpOwotCSAgJT4KLQkgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1mcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotCSAgPCUgIAotCX0KLQklPgotCTwvZGl2PgotICAgIDwlICAgIAotfQotCi1ib29sZWFuIGhhc0lucHV0ID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4ocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImhhc0lucHV0IikpOwotU3RyaW5nIGJvZHlEaXZJZCA9ICJCb2R5IjsKLQotaWYgKGhhc0lucHV0KSB7Ci0JU3RyaW5nIGJvZHlJbWdJZCA9ICJ4Qm9keSI7Ci0gICAgJT4KLQk8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotCSAgPHRyPgotCSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWJvZHlEaXZJZCU+JywnPCU9Ym9keUltZ0lkJT4nKSI+PGltZyBuYW1lPSI8JT1ib2R5SW1nSWQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotCSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPjxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQk9EWSIpJT48L3N0cm9uZz48L3RkPgotCSAgPC90cj4KLQk8L3RhYmxlPiAKLQkKLQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotCSAgPHRyPgotCSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotCSAgPC90cj4KLQk8L3RhYmxlPgotICAgIDwlCi19Ci0lPgotCi08ZGl2IGlkPSI8JT1ib2R5RGl2SWQlPiIgY2xhc3M9ImZyYWdhcmVhIj4KLTwlCi1pdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICBQYXJ0IHBhcnQgPSAoUGFydClpdC5uZXh0KCk7Ci0gIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChmcmFnLmdldElEKCkpOwotICAlPgotICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgPCUKLX0KLSU+Ci08L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvRnJhZ21lbnRzU29hcFZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c1NvYXBWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlZWU4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvRnJhZ21lbnRzU29hcFZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKiAyMDA2MDcyNiAgIDE0NDgyNCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudzNjLmRvbS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KSh3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgIElTT0FQVHJhbnNwb3J0IHNvYXBUcmFuc3BvcnQgPSBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKS5uZXdUcmFuc3BvcnQoKTsKLSAgIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSA9IHNvYXBUcmFuc3BvcnQubmV3TWVzc2FnZShvcGVyRWxlbWVudC5nZXRNZXNzYWdlQ29udGV4dCgpKTsKLSAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVFVRVNUX1RNUCwgc29hcE1lc3NhZ2UpOwotICAgCi0gICBIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgPSBuZXcgSGFzaHRhYmxlKHNvYXBNZXNzYWdlLmdldE5hbWVzcGFjZVRhYmxlKCkpOyAgICAgIAotICAgCi0gICBTdHJpbmcgY2FjaGVkSGVhZGVyQ29udGVudCA9IG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSKTsKLSAgIFN0cmluZyBjYWNoZWRCb2R5Q29udGVudCA9IG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlQpOwotICAgCi0gICAvLyBpZiBlaXRoZXIgaGVhZGVyIG9yIGJvZHkgaGFzIGJlZW4gY2FjaGVkLCBuZWVkIHRvIGVuc3VyZSBuYW1lc3BhY2UgdGFibGUgaXMgdXBkYXRlZAotICAgLy8gZnJvbSB0aGUgY2FjaGVkIGNvcHkKLSAgIGlmIChjYWNoZWRIZWFkZXJDb250ZW50ICE9IG51bGwgfHwgY2FjaGVkQm9keUNvbnRlbnQgIT0gbnVsbCkgewotCSAgIGlmIChTT0FQTWVzc2FnZVV0aWxzLmRlY29kZU5hbWVzcGFjZVRhYmxlKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCkpCi0JCSAgIHNvYXBNZXNzYWdlLnNldE5hbWVzcGFjZVRhYmxlKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlKTsKLSAgIH0KLQkgICAgICAgICAgICAKLSAgIFN0cmluZyBoZWFkZXJDb250ZW50OwotICAgU3RyaW5nIGJvZHlDb250ZW50OwotICAgCi0gICBpZiAoY2FjaGVkSGVhZGVyQ29udGVudCAhPSBudWxsKQotICAgICAgIGhlYWRlckNvbnRlbnQgPSBjYWNoZWRIZWFkZXJDb250ZW50OwotICAgZWxzZSB7Ci0JICAgdHJ5IHsKLQkgICAgICAgU09BUE1lc3NhZ2VVdGlscy5zZXRIZWFkZXJDb250ZW50RnJvbU1vZGVsKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotCSAgICAgICAKLQkgICAgICAgLy8gZW5zdXJlIG5hbWVzcGFjZSB0YWJsZSB1cGRhdGVkIGluIG1lc3NhZ2UgYmVmb3JlIHNlcmlhbGl6ZSBvcGVyYXRpb24KLQkgICAgICAgc29hcE1lc3NhZ2Uuc2V0TmFtZXNwYWNlVGFibGUoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUpOwotCSAgICAgICBoZWFkZXJDb250ZW50ID0gc29hcFRyYW5zcG9ydC5uZXdTZXJpYWxpemVyKCkuc2VyaWFsaXplKElTT0FQTWVzc2FnZS5IRUFERVJfQ09OVEVOVCwgc29hcE1lc3NhZ2UpOwotCSAgIH0KLQkgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJICAgaGVhZGVyQ29udGVudCA9ICIiOwotCSAgIH0KLSAgIH0KLSAgIAotICAgaWYgKGNhY2hlZEJvZHlDb250ZW50ICE9IG51bGwpCi0JICAgYm9keUNvbnRlbnQgPSBjYWNoZWRCb2R5Q29udGVudDsKLSAgIGVsc2UgewotCSAgIHRyeSB7Ci0JICAgICAgIFNPQVBNZXNzYWdlVXRpbHMuc2V0Qm9keUNvbnRlbnRGcm9tTW9kZWwoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7Ci0JICAgICAgIAotCSAgICAgICAvLyBlbnN1cmUgbmFtZXNwYWNlIHRhYmxlIHVwZGF0ZWQgaW4gbWVzc2FnZSBiZWZvcmUgc2VyaWFsaXplIG9wZXJhdGlvbgotCSAgICAgICBzb2FwTWVzc2FnZS5zZXROYW1lc3BhY2VUYWJsZShzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSk7Ci0JICAgICAgIGJvZHlDb250ZW50ID0gc29hcFRyYW5zcG9ydC5uZXdTZXJpYWxpemVyKCkuc2VyaWFsaXplKElTT0FQTWVzc2FnZS5CT0RZX0NPTlRFTlQsIHNvYXBNZXNzYWdlKTsKLQkgICB9Ci0JICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgIGJvZHlDb250ZW50ID0gIiI7Ci0JICAgfQotICAgfSAgICAgIAotICAgCi0gICAvLyBjYWNoZSB0aGUgbmFtZXNwYWNlIHRhYmxlCi0gICBFbnVtZXJhdGlvbiBlbm0gPSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5rZXlzKCk7Ci0gICB3aGlsZSAoZW5tLmhhc01vcmVFbGVtZW50cygpKQotICAgewotICAgICBTdHJpbmcgdXJpID0gKFN0cmluZyllbm0ubmV4dEVsZW1lbnQoKTsKLSAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUuZ2V0KHVyaSk7Ci0gICAgIFN0cmluZyB2YWx1ZSA9IFNvYXBIZWxwZXIuZW5jb2RlTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4LCB1cmkpOwotICAgICAlPgotICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVF9OQU1FU1BBQ0UlPiIgdmFsdWU9IjwlPXZhbHVlJT4iPgotICAgICA8JQotICAgfQotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLTwlCi0JRWxlbWVudCBzb2FwRW52ZWxvcGVFbGVtZW50ID0gc29hcE1lc3NhZ2UuZ2V0RW52ZWxvcGUoZmFsc2UpOwotICAgIFN0cmluZ0J1ZmZlciBoZWFkZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCI8Iik7Ci0gICAgaGVhZGVyLmFwcGVuZChzb2FwRW52ZWxvcGVFbGVtZW50LmdldFRhZ05hbWUoKSk7Ci0gICAgTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBzb2FwRW52ZWxvcGVFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICBpbnQgbnVtYmVyT2ZBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICBpZiAobnVtYmVyT2ZBdHRyaWJ1dGVzID09IDApCi0gICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICBmb3IgKGludCBpPTA7aTxudW1iZXJPZkF0dHJpYnV0ZXM7aSsrKQotICAgIHsKLSAgICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgICBOb2RlIGF0dHJOb2RlID0gYXR0cmlidXRlcy5pdGVtKGkpOwotICAgICAgaGVhZGVyLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlTmFtZSgpKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlVmFsdWUoKSkuYXBwZW5kKCdcIicpOwotICAgICAgaWYgKGkgPT0gbnVtYmVyT2ZBdHRyaWJ1dGVzLTEpCi0gICAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTg+Ci0gICAgICA8aW1nIHdpZHRoPTggaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIH0KLSAgICAKLSAgICBFbGVtZW50IHNvYXBIZWFkZXJFbGVtZW50ID0gc29hcE1lc3NhZ2UuZ2V0SGVhZGVyKGZhbHNlKTsKLSAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgIGhlYWRlci5hcHBlbmQoJzwnKS5hcHBlbmQoc29hcEhlYWRlckVsZW1lbnQuZ2V0VGFnTmFtZSgpKTsKLSAgICBhdHRyaWJ1dGVzID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotICAgIG51bWJlck9mQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7Ci0gICAgaWYgKG51bWJlck9mQXR0cmlidXRlcyA9PSAwKQotICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9OD4KLSAgICAgIDxpbWcgd2lkdGg9OCBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgZm9yIChpbnQgaT0wO2k8bnVtYmVyT2ZBdHRyaWJ1dGVzO2krKykKLSAgICB7Ci0gICAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgICAgTm9kZSBhdHRyTm9kZSA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLSAgICAgIGhlYWRlci5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZVZhbHVlKCkpLmFwcGVuZCgnXCInKTsKLSAgICAgIGlmIChpID09IG51bWJlck9mQXR0cmlidXRlcy0xKQotICAgICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIH0KLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPSIxNiI+Ci0gICAgICA8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPiAgICAKLSAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iPCU9V1NETEFjdGlvbklucHV0cy5TRUxFQ1RFRF9GSUxFX0hFQURFUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TT0FQX0ZJTEUiKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9BY3Rpb24oJzwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fQlJPV1NFX0ZJTEVfSEVBREVSJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkJVVFRPTl9MQUJFTF9MT0FEIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9BY3Rpb24oJzwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fU0FWRV9BU19IRUFERVIlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQlVUVE9OX0xBQkVMX1NBVkVfQVMiKSU+PC9hPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9Mz4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0iMTYiPgotICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB3aWR0aD0iMTAwJSI+Ci0gICAgICA8dGV4dGFyZWEgaWQ9InNvYXBfaGVhZGVyX2NvbnRlbnQiIG5hbWU9IjwlPUZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX0hFQURFUiU+IiBjbGFzcz0idGV4dGFyZWFlbnRlciI+PCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChoZWFkZXJDb250ZW50KSU+PC90ZXh0YXJlYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICBoZWFkZXIuYXBwZW5kKCI8LyIpLmFwcGVuZChzb2FwSGVhZGVyRWxlbWVudC5nZXRUYWdOYW1lKCkpLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0xIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9OD4KLSAgICAgIDxpbWcgd2lkdGg9OCBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgRWxlbWVudCBzb2FwQm9keUVsZW1lbnQgPSBzb2FwTWVzc2FnZS5nZXRCb2R5KGZhbHNlKTsKLSAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgIGhlYWRlci5hcHBlbmQoJzwnKS5hcHBlbmQoc29hcEJvZHlFbGVtZW50LmdldFRhZ05hbWUoKSk7Ci0gICAgYXR0cmlidXRlcyA9IHNvYXBCb2R5RWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgbnVtYmVyT2ZBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICBpZiAobnVtYmVyT2ZBdHRyaWJ1dGVzID09IDApCi0gICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD04PgotICAgICAgPGltZyB3aWR0aD04IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICBmb3IgKGludCBpPTA7aTxudW1iZXJPZkF0dHJpYnV0ZXM7aSsrKQotICAgIHsKLSAgICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgICBOb2RlIGF0dHJOb2RlID0gYXR0cmlidXRlcy5pdGVtKGkpOwotICAgICAgaGVhZGVyLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlTmFtZSgpKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlVmFsdWUoKSkuYXBwZW5kKCdcIicpOwotICAgICAgaWYgKGkgPT0gbnVtYmVyT2ZBdHRyaWJ1dGVzLTEpCi0gICAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTE2PgotICAgICAgPGltZyB3aWR0aD0xNiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgfQotCi0gICAgRWxlbWVudCB3cmFwcGVyRWxlbWVudCA9IG51bGw7Ci0gICAgaWYgKCFvcGVyRWxlbWVudC5pc0RvY3VtZW50U3R5bGUoKSkKLSAgICB7ICAgICAgCi0gICAgICAvLyBHZW5lcmF0ZSBhbiBSUEMgc3R5bGUgd3JhcHBlciBlbGVtZW50LiAgICAgIAotICAgICAgd3JhcHBlckVsZW1lbnQgPSAoRWxlbWVudCkgc29hcEJvZHlFbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgICBoZWFkZXIuYXBwZW5kKCc8JykuYXBwZW5kKHdyYXBwZXJFbGVtZW50LmdldFRhZ05hbWUoKSk7Ci0gICAgICBhdHRyaWJ1dGVzID0gd3JhcHBlckVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotICAgICAgbnVtYmVyT2ZBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICAgIGlmIChudW1iZXJPZkF0dHJpYnV0ZXMgPT0gMCkKLSAgICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQXR0cmlidXRlcztpKyspCi0gICAgICB7Ci0gICAgICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgICAgIE5vZGUgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0gICAgICAgIGhlYWRlci5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZVZhbHVlKCkpLmFwcGVuZCgnXCInKTsKLSAgICAgICAgaWYgKGkgPT0gbnVtYmVyT2ZBdHRyaWJ1dGVzLTEpCi0gICAgICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MjQ+Ci0gICAgICA8aW1nIHdpZHRoPTI0IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgc291cmNlQ29udGVudEluZGVudGF0aW9uSW1hZ2VXaWR0aCA9IDE2OwotICAgIGlmICh3cmFwcGVyRWxlbWVudCAhPSBudWxsKQotICAgICAgc291cmNlQ29udGVudEluZGVudGF0aW9uSW1hZ2VXaWR0aCArPSA4OwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTM+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9PCU9c291cmNlQ29udGVudEluZGVudGF0aW9uSW1hZ2VXaWR0aCU+PgotICAgICAgPGltZyB3aWR0aD08JT1zb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoJT4gaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPiAgICAKLSAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iPCU9V1NETEFjdGlvbklucHV0cy5TRUxFQ1RFRF9GSUxFJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NPQVBfRklMRSIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb0FjdGlvbignPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9CUk9XU0VfRklMRSU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJCVVRUT05fTEFCRUxfTE9BRCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmRvQWN0aW9uKCc8JT1XU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVMlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQlVUVE9OX0xBQkVMX1NBVkVfQVMiKSU+PC9hPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9Mz4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD08JT1zb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoJT4+Ci0gICAgICA8aW1nIHdpZHRoPTwlPXNvdXJjZUNvbnRlbnRJbmRlbnRhdGlvbkltYWdlV2lkdGglPiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHdpZHRoPSIxMDAlIj4KLSAgICAgIDx0ZXh0YXJlYSBpZD0ic29hcF9ib2R5X2NvbnRlbnQiIG5hbWU9IjwlPUZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UJT4iIGNsYXNzPSJiaWd0ZXh0YXJlYWVudGVyIj48JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KGJvZHlDb250ZW50KSU+PC90ZXh0YXJlYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICBpZiAod3JhcHBlckVsZW1lbnQgIT0gbnVsbCkKLSAgIHsKLSAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgaGVhZGVyLmFwcGVuZCgiPC8iKS5hcHBlbmQod3JhcHBlckVsZW1lbnQuZ2V0VGFnTmFtZSgpKS5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTE2PgotICAgICAgPGltZyB3aWR0aD0xNiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICB9Ci0KLSAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICBoZWFkZXIuYXBwZW5kKCI8LyIpLmFwcGVuZChzb2FwQm9keUVsZW1lbnQuZ2V0VGFnTmFtZSgpKS5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MSBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTg+Ci0gICAgICA8aW1nIHdpZHRoPTggaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgIGhlYWRlci5hcHBlbmQoIjwvIikuYXBwZW5kKHNvYXBFbnZlbG9wZUVsZW1lbnQuZ2V0VGFnTmFtZSgpKS5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MSBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9JbnZva2VXU0RMT3BlcmF0aW9uRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvSW52b2tlV1NETE9wZXJhdGlvbkZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmQyZDRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9JbnZva2VXU0RMT3BlcmF0aW9uRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTIgICAxMjEyMTAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gIEludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgU3RyaW5nIGZyYWdtZW50Vmlld0lEID0gaW52b2tlV1NETE9wZXJhdGlvblRvb2wuZ2V0RnJhZ21lbnRWaWV3SUQoKTsKLSAgaW50IG9wZXJhdGlvblR5cGUgPSBvcGVyRWxlbWVudC5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gIFN0cmluZyBpbnZva2VXU0RMT3BlcmF0aW9uVVJMID0gcmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGludm9rZVdTRExPcGVyYXRpb25Ub29sLmdldEZvcm1BY3Rpb25MaW5rKG9wZXJhdGlvblR5cGUsZnJhZ21lbnRWaWV3SUQpKSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JTlZPS0VfV1NETF9PUEVSQVRJT04iKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy9mcmFnbWVudHRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGRvQWN0aW9uKGFjdGlvbikKLSAgewotICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBmb3JtLjwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04lPi52YWx1ZSA9IGFjdGlvbjsKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgICBmb3JtLjwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04lPi52YWx1ZSA9ICI8JT1pbnZva2VXU0RMT3BlcmF0aW9uVVJMJT4iOwotICAgICAgcmVzZXRTdWJtaXNzaW9uKCk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBjbG9zZUNoaWxkV2luZG93cygpCi0gIHsKLSAgICBjbG9zZVhTREluZm9EaWFsb2coKTsKLSAgICBjbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VDaGlsZFdpbmRvd3MoKSI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1pbnZva2VXU0RMT3BlcmF0aW9uVVJMJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04lPiIgdmFsdWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fRk9STSU+Ij4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25faGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0lOVk9LRV9XU0RMX09QRVJBVElPTiIpOwotICAgIGlmIChvcGVyYXRpb25UeXBlID09IFdTRExPcGVyYXRpb25FbGVtZW50Lk9QRVJBVElPTl9UWVBFX1NPQVApCi0gICAgewotICAgICU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0aXRsZUltYWdlUGF0aCkpJT4iIGFsdD0iIj4KLSAgICAgIDxzdHJvbmc+PCU9dGl0bGUlPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIHdpZHRoPSIqIj4mbmJzcDs8L3RkPgotICAgIDx0ZCBhbGlnbj0icmlnaHQiIGNsYXNzPSJsYWJlbHMiPgotPCUKLSAgIGlmIChmcmFnbWVudFZpZXdJRC5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UpKQotICAgewotJT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c3luY2hyb25pemVGcmFnbWVudFZpZXdzKCc8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STSU+JykiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NXSVRDSF9UT19GT1JNX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0ZPUk0iKSU+PC9hPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN5bmNocm9uaXplRnJhZ21lbnRWaWV3cygnPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UlPicpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fU09VUkNFX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1NPVVJDRSIpJT48L2E+Ci08JQotICAgfQotJT4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCBjb2xzcGFuPTM+PGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0gICAgPCUKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgfQotICAgICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0KLSAgICAgICAgPCUgICAgICAgICAgIAotCQkvL2hlcmUgd2UgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhpcyBvcGVyYXRpb24KLQkJYm9vbGVhbiBoYXNJbnB1dCA9IHRydWU7Ci0JCXNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOyAgCi0JCUl0ZXJhdG9yIGl0ZXIgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsgICAgICAgIAotCQlTdHJpbmcgb3BlcmF0aW9uTmFtZSA9IG9wZXJFbGVtZW50LmdldE5hbWUoKTsKLQotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0JCXsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KWl0ZXIubmV4dCgpOyAKLQkJCUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7ICAKLQkJCW9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbiBkZWYgPSBmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkvL3dlIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBvcGVyYXRpb24ncyBpbnB1dCBtZXNzYWdlCi0JCQlpZiAoZGVmID09IG51bGwpCi0JCQl7Ci0JCQkJLy90aGlzIGlzIHRoZSBwYXR0ZXJuIDxlbGVtZW50IG5hbWU9ImZvbyI+PC9lbGVtZW50PgotCQkJCWhhc0lucHV0ID0gZmFsc2U7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJb3JnLnczYy5kb20uRWxlbWVudCBlbGVtZW50ID0gZGVmLmdldEVsZW1lbnQoKTsJCQkJCi0JCQkJaWYgKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKCJjb21wbGV4VHlwZSIpICYmICFlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkKLQkJCQl7CS8vdGhpcyBpcyB0aGUgcGF0dGVybiAgPGVsZW1lbnQgbmFtZT0iZm9vIj48Y29tcGxleFR5cGUvPjwvZWxlbWVudD4KLQkJCQkJLy90aGVyZSBjb3VsZCBiZSBvdGhlciBwYXR0ZXJucyB3aXRoIG5vIGlucHV0IGJ1dCB0aGV5IGFyZSB1bmNvbW1vbgotCQkJCQloYXNJbnB1dCA9IGZhbHNlOwotCQkJCX0KLQkJCX0gCi0gICAgICAJfQotCQlpZiAoaGFzSW5wdXQgfHwgIW9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKCkuaXNFbXB0eSgpKQotCQl7Ci0JCQlvdXQucHJpbnQod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5WT0tFX1dTRExfT1BFUkFUSU9OX0RFU0MiKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlvdXQucHJpbnQod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5WT0tFX1dTRExfT1BFUkFUSU9OX0RFU0NfTk9fSU5QVVQiLCBvcGVyYXRpb25OYW1lICkpOwotCQl9Ci0gICAgICAgICU+Ci0gICAgICAgICAKLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJrZXlsaW5lZmllbGRzZXQiPgotICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRU5EX1BPSU5UUyIpJT48L2xhYmVsPgotICAgICAgICAgICAgPC9sZWdlbmQ+Ci0gICAgICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9IjwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4iIG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudClvcGVyRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGVuZFBvaW50cyA9IGJpbmRpbmdFbGVtZW50LmdldEVuZFBvaW50cygpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY3VyckVuZFBvaW50ID0gaW52b2tlV1NETE9wZXJhdGlvblRvb2wuZ2V0RW5kUG9pbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRQb2ludHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1lbmRQb2ludHNbaV0lPiIgPCVpZiAoZW5kUG9pbnRzW2ldLmVxdWFscyhjdXJyRW5kUG9pbnQpKSB7JT5zZWxlY3RlZDwlfSU+PjwlPWVuZFBvaW50c1tpXSU+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDwvZmllbGRzZXQ+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPCUKLSAgICBpZiAoZnJhZ21lbnRWaWV3SUQuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFKSkKLSAgICB7Ci0gICAgJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9GcmFnbWVudHNTb2FwVmlldy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPCUKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL0ZyYWdtZW50c0Zvcm1WaWV3LmpzcCIgZmx1c2g9InRydWUiPgotCTxqc3A6cGFyYW0gbmFtZT0iaGFzSW5wdXQiIHZhbHVlPSI8JT1oYXNJbnB1dCU+Ii8+Ci08L2pzcDppbmNsdWRlPgotICAgIDwlCi0gICAgfQotICAgICU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9PcGVuV1NETEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL09wZW5XU0RMRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZTM2ZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL09wZW5XU0RMRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHMiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKXdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9PUEVOX1dTREwiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvd3NkbGJyb3dzZXIuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZVdTRExCcm93c2VyKCkiPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvT3BlbldTRExBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NETCIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8dGFibGU+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PUEVOX1dTRExfREVTQyIpJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4gICAgICAgIAotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICBpZiAoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpKSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBTdHJpbmcgd3NkbFVybCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICAgICAgICAgICAgaWYgKHdzZGxVcmwgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB3c2RsVXJsID0gIiI7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcignY29udGVudGJvcmRlcicsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzZGxVcmwpJT4iIHNpemU9IjUwIiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBjbG9zZVdTRExCcm93c2VyKCk7Ci08L3NjcmlwdD4gIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1Byb2Nlc3NXU0RMRnJhbWVzZXRzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U1MmY0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGZvcm1BY3Rpb24udG9TdHJpbmcoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj4KLSAgPGlucHV0IG5hbWU9IjwlPUFjdGlvbklucHV0cy5GUkFNRV9OQU1FJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPWZvcm1GcmFtZU5hbWUlPiI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Ij4KLTwvZm9ybT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c0Zvcm1WaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c0Zvcm1WaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiMzg4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNGb3JtVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA3MDUwNyAgIDE4NTYwMCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIHN0YXR1cyBwYW5lJ3MgImhlYWRlciIgdHdpc3RpZSBzaG91bGQgbm90IGFwcGVhciBmb3IgcmVzcG9uc2VzIHdpdGhvdXQgaGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnBhcnNlcnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotd3NkbFBlcnNwZWN0aXZlLnNldFN0YXR1c0NvbnRlbnRUeXBlKFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfRk9STSk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE9wZXJhdGlvbk5vZGUoKTsKLW5vZGVJRC5kZWxldGUoMCwgbm9kZUlELmxlbmd0aCgpKTsKLW5vZGVJRC5hcHBlbmQob3Blck5vZGUuZ2V0Tm9kZUlkKCkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLU9wZXJhdGlvbiBvcGVyID0gb3BlckVsZW1lbnQuZ2V0T3BlcmF0aW9uKCk7Ci1pZiAob3Blci5nZXRPdXRwdXQoKSA9PSBudWxsKQotewotJT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05PVEhJTkdfVE9fRElTUExBWV9JTl9GT1JNX1ZJRVciKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotZWxzZQotewotICBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UgPSAoSVNPQVBNZXNzYWdlKSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVTUE9OU0UpOwotICBFbGVtZW50W10gaGVhZGVyQ29udGVudCA9IHNvYXBNZXNzYWdlLmdldEhlYWRlckNvbnRlbnQoKTs7Ci0gIEVsZW1lbnRbXSBib2R5Q29udGVudCAgID0gc29hcE1lc3NhZ2UuZ2V0Qm9keUNvbnRlbnQoKTsKLSAgCi0gIGJvb2xlYW4gY2FjaGVkID0gKChCb29sZWFuKW9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETEFjdGlvbklucHV0cy5TT0FQX1JFU1BPTlNFX0NBQ0hFRCkpLmJvb2xlYW5WYWx1ZSgpOwotCi0gIGlmIChzb2FwTWVzc2FnZS5nZXRCb2R5KGZhbHNlKSA9PSBudWxsKSAvLyBib2R5IGlzIG1hbmRhdG9yeQotICB7Ci0gICU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NPQVBfUkVTUE9OU0VfRkFJTEVEX1ZBTElEQVRJT05fSU5fRk9STV9WSUVXIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotCWlmIChoZWFkZXJDb250ZW50ICE9IG51bGwgJiYgaGVhZGVyQ29udGVudC5sZW5ndGggPiAwKSB7CQkKLQotCQlTdHJpbmcgaGVhZGVyRGl2SWQgPSAiSGVhZGVyIjsKLQkJU3RyaW5nIGhlYWRlckltZ0lkID0gInhIZWFkZXIiOwkJCi0JICAgICU+Ci0JICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JCSAgPHRyPgotCQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1oZWFkZXJEaXZJZCU+JywnPCU9aGVhZGVySW1nSWQlPicpIj48aW1nIG5hbWU9IjwlPWhlYWRlckltZ0lkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLQkJICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9IRUFERVIiKSU+PC9zdHJvbmc+PC90ZD4KLQkJICA8L3RyPgotCQk8L3RhYmxlPgotCQkKLQkJPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLQkJICA8dHI+Ci0JCSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotCQkgIDwvdHI+Ci0JCTwvdGFibGU+Ci0JCQotCQk8ZGl2IGlkPSI8JT1oZWFkZXJEaXZJZCU+IiBjbGFzcz0iZnJhZ2FyZWEiPgotCQk8JQotCQlib29sZWFuIGhhc1NPQVBIZWFkZXJzID0gZmFsc2U7CQkKLQkJSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycyhmYWxzZSkuaXRlcmF0b3IoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSAmJiBzdGFydCA8IGhlYWRlckNvbnRlbnQubGVuZ3RoKSB7Ci0JCQlTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaXQubmV4dCgpOwkJCQkJCQkJCQotCQkJSVhTREZyYWdtZW50IGZyYWdtZW50ID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlciwgZmFsc2UpOwotCQkJCi0JCQlpZiAoIWNhY2hlZCkgewkJCQkKLQkJCQlpbnQgcG9zID0gU09BUE1lc3NhZ2VVdGlscy5maW5kRmlyc3RNYXRjaGluZ0VsZW1lbnQoCi0JCQkJCXNvYXBIZWFkZXIuZ2V0RVBhcnQoKSwKLQkJCQkJaGVhZGVyQ29udGVudCwKLQkJCQkJc29hcE1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSwKLQkJCQkJZnJhZ21lbnQuZ2V0TmFtZSgpLAotCQkJCQlzdGFydCk7Ci0JCQkJCi0JCQkJaWYgKHBvcyA9PSAtMSkKLQkJCQkJY29udGludWU7Ci0JCQkJCi0JCQkJRWxlbWVudCBlbGVtZW50ID0gaGVhZGVyQ29udGVudFtwb3NdOwotCQkJCXN0YXJ0ID0gcG9zICsgMTsKLQkJCQkKLQkJCQlpZiAoIWZyYWdtZW50LnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhuZXcgRWxlbWVudFtdIHsgZWxlbWVudCB9KSkKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0JCQllbHNlIGlmICghZnJhZ21lbnQudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkKLQkJCQljb250aW51ZTsKLQkJCQotCQkJaGFzU09BUEhlYWRlcnMgPSB0cnVlOwkJCQkKLQkJCWZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLQkJCWZyYWdJRC5hcHBlbmQoZnJhZ21lbnQuZ2V0SUQoKSk7Ci0JCQklPgotCQkJPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYWdtZW50LmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0JCQk8JSAgCi0JCX0JCQotCQlpZiAoIWhhc1NPQVBIZWFkZXJzKSB7Ci0JCQklPgotCQkJPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkJICAgICAgPHRyPgotCQkgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLQkJICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBTk5PVF9ESVNQTEFZX0hFQURFUl9JTl9GT1JNX1ZJRVciKSU+Ci0JCSAgICAgICAgPC90ZD4KLQkJICAgICAgPC90cj4KLQkJICAgIDwvdGFibGU+Ci0JCQk8JQotCQl9Ci0JCSU+Ci0JCTwvZGl2PgotCQk8JSAgIAotCX0KLQkJCi0JU3RyaW5nIGJvZHlEaXZJZCA9ICJCb2R5IjsKLQlTdHJpbmcgYm9keUltZ0lkID0gInhCb2R5IjsJICAJCQotCSU+CQkJCi0JPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1ib2R5RGl2SWQlPicsJzwlPWJvZHlJbWdJZCU+JykiPjxpbWcgbmFtZT0iPCU9Ym9keUltZ0lkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JPRFkiKSU+PC9zdHJvbmc+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4gCi0JCi0JPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4KLQkKLQk8ZGl2IGlkPSI8JT1ib2R5RGl2SWQlPiIgY2xhc3M9ImZyYWdhcmVhIj4KLQk8JQkKLQlib29sZWFuIGhhc1NPQVBCb2R5ID0gZmFsc2U7Ci0JaWYgKGJvZHlDb250ZW50ICE9IG51bGwgJiYgYm9keUNvbnRlbnQubGVuZ3RoID4gMCkgewkJCQkKLQkJCi0JICAgIE1hcCBwYXJ0c01hcCA9IG9wZXIuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCk7Ci0JICAgIEl0ZXJhdG9yIGl0ID0gcGFydHNNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkgICAgSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMgPSBudWxsOwotCSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotCSAgICB7Ci0JICAgICAgSVhTREZyYWdtZW50IGZyYWdtZW50ID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQoKFBhcnQpaXQubmV4dCgpLCBmYWxzZSk7Ci0JICAgICAgaWYgKCFjYWNoZWQpCi0JICAgICAgewotCSAgICAgICAgaWYgKCFvcGVyRWxlbWVudC5pc1VzZUxpdGVyYWwoKSAmJiAoZnJhZ21lbnQgaW5zdGFuY2VvZiBJU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50KSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgaWYgKHVyaVJlZmVyZW5jZXMgPT0gbnVsbCkKLQkgICAgICAgICAgICB1cmlSZWZlcmVuY2VzID0gU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LnBhcnNlVVJJUmVmZXJlbmNlcyhzb2FwTWVzc2FnZS5nZXRFbnZlbG9wZSh0cnVlKSwgdHJ1ZSk7Ci0JICAgICAgICAgICgoSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudClmcmFnbWVudCkuc2V0VVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzKTsKLQkgICAgICAgIH0KLQkgICAgICAgIGlmICghZnJhZ21lbnQuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGJvZHlDb250ZW50KSkKLQkgICAgICAgIAljb250aW51ZTsKLQkgICAgICB9Ci0JICAgICAgZWxzZSBpZiAoIWZyYWdtZW50LnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0JCQljb250aW51ZTsKLQkJCQotCQkgIGhhc1NPQVBCb2R5ID0gdHJ1ZTsJCQkJCi0JICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotCSAgICAgIGZyYWdJRC5hcHBlbmQoZnJhZ21lbnQuZ2V0SUQoKSk7Ci0JICAgICAgJT4KLQkgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLQkgICAgICA8JQotCSAgICB9Ci0JICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETEFjdGlvbklucHV0cy5TT0FQX1JFU1BPTlNFX0NBQ0hFRCwgbmV3IEJvb2xlYW4odHJ1ZSkpOwotCX0KLQkKLQlpZiAoc29hcE1lc3NhZ2UuZ2V0RmF1bHQoKSA9PSBudWxsICYmIChib2R5Q29udGVudCA9PSBudWxsIHx8IGJvZHlDb250ZW50Lmxlbmd0aCA9PSAwKSkgewotCQklPgotCQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotCSAgICAgIDx0cj4KLQkgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLQkgICAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQk9EWV9JU19FTVBUWSIpJT4KLQkgICAgICAgIDwvdGQ+Ci0JICAgICAgPC90cj4KLQkgICAgPC90YWJsZT4KLQkJPCUKLSAgICB9Ci0JZWxzZSBpZiAoIWhhc1NPQVBCb2R5KSB7Ci0JCSU+Ci0JCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JICAgICAgPHRyPgotCSAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotCSAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQU5OT1RfRElTUExBWV9CT0RZX0lOX0ZPUk1fVklFVyIpJT4KLQkgICAgICAgIDwvdGQ+Ci0JICAgICAgPC90cj4KLQkgICAgPC90YWJsZT4KLQkJPCUKLQl9IAotICAgICU+Ci0gICAgPC9kaXY+Ci0gICAgPCUKLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c1NvYXBWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c1NvYXBWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkzMWViZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNTb2FwVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDkgICAxMDMwNzIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDUxNSAgIDE0MDYwNyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci13c2RsUGVyc3BlY3RpdmUuc2V0U3RhdHVzQ29udGVudFR5cGUoV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9TT1VSQ0UpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRPcGVyYXRpb25Ob2RlKCk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotU3RyaW5nIHNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCA9ICJTT0FQUmVxdWVzdCI7Ci1TdHJpbmdCdWZmZXIgc29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLXNvYXBSZXF1ZXN0VHdpc3RJbWFnZU5hbWUuYXBwZW5kKHNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCk7Ci1TdHJpbmcgc29hcFJlc3BvbnNlVGFibGVDb250YWluZXJJZCA9ICJTT0FQUmVzcG9uc2UiOwotU3RyaW5nQnVmZmVyIHNvYXBSZXNwb25zZVR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotc29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUuYXBwZW5kKHNvYXBSZXNwb25zZVRhYmxlQ29udGFpbmVySWQpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBzZWN0aW9uSWRzID0gWyI8JT1zb2FwUmVxdWVzdFRhYmxlQ29udGFpbmVySWQlPiIsIjwlPXNvYXBSZXNwb25zZVRhYmxlQ29udGFpbmVySWQlPiJdOwotICBmdW5jdGlvbiB0b2dnbGVTT0FQRW52ZWxvcGUoc29hcEVudmVsb3BlVHlwZSx0d2lzdEltYWdlTmFtZSkKLSAgewotPCUKLSAgICAvLyBJZiBib3RoIGVudmVsb3BlcyBhcmUgZXhwYW5kZWQsIGVhY2ggc2hvdWxkIGhhdmUgNTAlIGhlaWdodC4gT3RoZXJ3aXNlLCB0aGUgcmVtYWluaW5nIGRpc3BsYXllZCBlbnZlbG9wZSBzaG91bGQgYmUgcmVzZXQgdG8gMTAwJSBoZWlnaHQuCi0lPgotICAgIHZhciBzb2FwU2VjdGlvbklkID0gc2VjdGlvbklkc1tzb2FwRW52ZWxvcGVUeXBlXTsKLSAgICB2YXIgc29hcFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzb2FwU2VjdGlvbklkKTsKLSAgICB2YXIgc29hcFNlY3Rpb25UYWJsZSA9IGdldFRhYmxlKHNvYXBTZWN0aW9uSWQpOwotICAgIHZhciBvdGhlclNvYXBTZWN0aW9uSWQgPSBzZWN0aW9uSWRzWzEtc29hcEVudmVsb3BlVHlwZV07Ci0gICAgdmFyIG90aGVyU29hcFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdGhlclNvYXBTZWN0aW9uSWQpOwotICAgIHZhciBvdGhlclNvYXBTZWN0aW9uVGFibGUgPSBnZXRUYWJsZShvdGhlclNvYXBTZWN0aW9uSWQpOwotICAgIGlmIChzb2FwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICB7Ci0gICAgICBpZiAob3RoZXJTb2FwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID09ICIiKQotICAgICAgewotICAgICAgICBzb2FwU2VjdGlvblRhYmxlLmhlaWdodCA9ICI1MCUiOwotICAgICAgICBvdGhlclNvYXBTZWN0aW9uVGFibGUuaGVpZ2h0ID0gIjUwJSI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHNvYXBTZWN0aW9uVGFibGUuaGVpZ2h0ID0gIjEwMCUiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKG90aGVyU29hcFNlY3Rpb24uc3R5bGUuZGlzcGxheSA9PSAiIikKLSAgICAgICAgb3RoZXJTb2FwU2VjdGlvblRhYmxlLmhlaWdodCA9ICIxMDAlIjsKLSAgICB9Ci0gICAgdHdpc3Qoc29hcFNlY3Rpb25JZCx0d2lzdEltYWdlTmFtZSk7Ci0gIH0KLTwvc2NyaXB0PgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnRvZ2dsZVNPQVBFbnZlbG9wZSg8JT1XU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVFVRVNUJT4sJzwlPXNvYXBSZXF1ZXN0VHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9c29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT0FQX1JFUVVFU1RfRU5WRUxPUEUiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPGRpdiBpZD0iPCU9c29hcFJlcXVlc3RUYWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgaGVpZ2h0PSI1MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHBhZGRpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxpZnJhbWUgbmFtZT0icmVxdWVzdEVudmVsb3BlRnJhbWUiIGZyYW1lYm9yZGVyPTAgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQod3NkbFBlcnNwZWN0aXZlLmdldFNPQVBFbnZlbG9wZVhNTExpbmsoV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVRVUVTVCkpKSU+IiB3aWR0aD0iOTUlIiBoZWlnaHQ9IjEwMCUiPjwvaWZyYW1lPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdHdpc3QoIjwlPXNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCU+IiwiPCU9c29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iKTsKLTwvc2NyaXB0PgotCi08JQotaWYgKG9wZXJFbGVtZW50LmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpICE9IG51bGwpCi17Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0b2dnbGVTT0FQRW52ZWxvcGUoPCU9V1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVTUE9OU0UlPiwnPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU09BUF9SRVNQT05TRV9FTlZFTE9QRSIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08ZGl2IGlkPSI8JT1zb2FwUmVzcG9uc2VUYWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgaGVpZ2h0PSI1MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHBhZGRpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAJPCEtLSB0aGUgb25sb2FkIGNhbGwgaXMgdG8gZml4IGJ1ZyAxNDA2MDcgaW4gYnVnemlsbGEgLS0+Ci0gICAgICAgIDxpZnJhbWUgb25sb2FkPSJqYXZhc2NyaXB0OnJlcXVlc3RFbnZlbG9wZUZyYW1lLmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpIiBmcmFtZWJvcmRlcj0wIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHdzZGxQZXJzcGVjdGl2ZS5nZXRTT0FQRW52ZWxvcGVYTUxMaW5rKFdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFX1JFU1BPTlNFKSkpJT4iIHdpZHRoPSI5NSUiIGhlaWdodD0iMTAwJSI+PC9pZnJhbWU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiPCU9c29hcFJlc3BvbnNlVGFibGVDb250YWluZXJJZCU+IiwiPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+Iik7Ci08L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExCaW5kaW5nRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExCaW5kaW5nRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGJlM2EzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMQmluZGluZ0RldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgYmluZGluZ05vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1dTRExfQklORElOR19ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciByb3dDaGVja2JveE5hbWUgPSAicm93Q2hlY2tib3hOYW1lIjsKLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NETF9CSU5ESU5HX0RFVEFJTFMiKTsKLSAgIFdTRExCaW5kaW5nRWxlbWVudCB3c2RsQmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KWJpbmRpbmdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBWZWN0b3Igb3BlcmF0aW9uTm9kZXMgPSBiaW5kaW5nTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci08aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1iaW5kaW5nTm9kZS5nZXROb2RlSWQoKSU+Ij4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HX0RFVEFJTFNfREVTQyIsd3NkbFBlcnNwZWN0aXZlLmdldEJpbmRpbmdUeXBlU3RyaW5nKHdzZGxCaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nVHlwZSgpKSklPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIFN0cmluZyBkb2N1bWVudGF0aW9uID0gd3NkbEJpbmRpbmdFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTik7Ci0gICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA+IDApCi0gICB7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MTA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgfQotCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIk9wZXJhdGlvbnMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvcGVyYXRpb25Ob2Rlcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL29wZXJhdGlvbnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIGlmIChvcGVyYXRpb25Ob2Rlcy5zaXplKCkgPiAwKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiT3BlcmF0aW9ucyIsInhPcGVyYXRpb25zIik7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0KLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiRW5kcG9pbnRzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMod3NkbEJpbmRpbmdFbGVtZW50KTsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL2VuZHBvaW50X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIGlmICh3c2RsQmluZGluZ0VsZW1lbnQuZ2V0RW5kUG9pbnRzKCkubGVuZ3RoID4gMCkKLSAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdE9wZW4oIkVuZHBvaW50cyIpOwotPC9zY3JpcHQ+Ci08JQotICB9Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETERldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTdjOTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgd3NkbE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gd3NkbE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gIFdTRExEZXRhaWxzVG9vbCB3c2RsRGV0YWlsc1Rvb2wgPSAoV1NETERldGFpbHNUb29sKWN1cnJlbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1dTRExfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzd2l0Y2hXU0RMRGV0YWlsc1ZpZXcoKSB7Ci0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9Td2l0Y2hXU0RMRGV0YWlsc1ZpZXdzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NkbC9pbWFnZXMvb3Blbl93c2RsX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTRExfREVUQUlMUyIpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRpdGxlSW1hZ2VQYXRoKSklPiIgYWx0PSIiPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IioiPiZuYnNwOzwvdGQ+Ci0gICAgPHRkIGFsaWduPSJyaWdodCIgY2xhc3M9ImxhYmVscyI+Ci08JQotICAgaWYgKHdzZGxEZXRhaWxzVG9vbC5nZXRWaWV3SWQoKSA9PSBXU0RMRGV0YWlsc1Rvb2wuU09VUkNFX1ZJRVdfSUQpCi0gICB7ICAgICAKLSU+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN3aXRjaFdTRExEZXRhaWxzVmlldygpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fRk9STV9WSUVXIiklPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19GT1JNIiklPjwvYT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzd2l0Y2hXU0RMRGV0YWlsc1ZpZXcoKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1dJVENIX1RPX1NPVVJDRV9WSUVXIiklPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19TT1VSQ0UiKSU+PC9hPgotPCUKLSAgIH0KLSU+ICAgCi0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgY29sc3Bhbj0zPjxpbWcgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiIGFsaWduPSJ0b3AiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgaWYgKHdzZGxEZXRhaWxzVG9vbC5nZXRWaWV3SWQoKSA9PSBXU0RMRGV0YWlsc1Rvb2wuRk9STV9WSUVXX0lEKQotICB7Ci0lPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm1WaWV3LmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIH0KLSAgZWxzZQotICB7Ci0lPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBoZWlnaHQ9IjEwMCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHBhZGRpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpZnJhbWUgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvZm9ybXMvV1NETERldGFpbHNTb3VyY2VWaWV3LmpzcCIpKSU+IiB3aWR0aD0iOTUlIiBoZWlnaHQ9IjEwMCUiPjwvaWZyYW1lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgfQotJT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm1WaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm1WaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUyNWM1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETERldGFpbHNGb3JtVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfREVUQUlMU19ERVNDIiklPjwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLU5vZGUgd3NkbE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLVdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KXdzZGxOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTik7Ci1pZiAoZG9jdW1lbnRhdGlvbiAhPSBudWxsICYmIGRvY3VtZW50YXRpb24ubGVuZ3RoKCkgPiAwKQotewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLX0KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC90aD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9d3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpJT48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MTA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JSAgIAotc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLXNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJTZXJ2aWNlcyIpOwotVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLXNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzZXJ2aWNlTm9kZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9zZXJ2aWNlc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTEwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUgICAKLVZlY3RvciBiaW5kaW5nTm9kZXMgPSBuZXcgVmVjdG9yKCk7Ci1mb3IgKGludCBpPTA7aTxzZXJ2aWNlTm9kZXMuc2l6ZSgpO2krKykKLXsKLSAgTm9kZSBzZXJ2aWNlTm9kZSA9IChOb2RlKXNlcnZpY2VOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gIFZlY3RvciBzZXJ2aWNlQmluZGluZ05vZGVzID0gc2VydmljZU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICBmb3IgKGludCBqPTA7ajxzZXJ2aWNlQmluZGluZ05vZGVzLnNpemUoKTtqKyspCi0gIHsKLSAgICBOb2RlIHNlcnZpY2VCaW5kaW5nTm9kZSA9IChOb2RlKXNlcnZpY2VCaW5kaW5nTm9kZXMuZWxlbWVudEF0KGopOwotICAgIGJpbmRpbmdOb2Rlcy5hZGRFbGVtZW50KHNlcnZpY2VCaW5kaW5nTm9kZSk7Ci0gIH0KLX0KLXNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci1zZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiQmluZGluZ3MiKTsKLXNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhiaW5kaW5nTm9kZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9iaW5kaW5nc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi1pZiAoc2VydmljZU5vZGVzLnNpemUoKSA+IDApCi17Ci0lPgotICB0d2lzdCgiU2VydmljZXMiLCJ4U2VydmljZXMiKTsKLTwlCi19Ci1pZiAoYmluZGluZ05vZGVzLnNpemUoKSA+IDApCi17Ci0lPgotICB0d2lzdCgiQmluZGluZ3MiLCJ4QmluZGluZ3MiKTsKLTwlCi19Ci0lPgotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETERldGFpbHNTb3VyY2VWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc1NvdXJjZVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzBhNGI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc1NvdXJjZVZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC94bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLnhtbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZmFjdG9yeS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1EZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsRWxlbWVudC5nZXREZWZpbml0aW9uKCk7Ci1XU0RMRmFjdG9yeSB3c2RsRmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLVdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLVN0cmluZ1dyaXRlciBzdHJpbmdXcml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci10cnkKLXsKLSAgd3NkbFdyaXRlci53cml0ZVdTREwoZGVmaW5pdGlvbiwgc3RyaW5nV3JpdGVyKTsKLSAgJT4KLSAgPCU9c3RyaW5nV3JpdGVyLnRvU3RyaW5nKCklPgotICA8JQotfQotY2F0Y2ggKFdTRExFeGNlcHRpb24gd3NkbGUpCi17Ci0gICU+Ci0gIDw/eG1sIHZlcnNpb249IjEuMCI/PgotICA8JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWQ5ZDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFN0cmluZyB3c2RsVXJsID0gKChXU0RMRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSkuZ2V0V3NkbFVybCgpOwotICAgZm9ybVByb3BlcnRpZXMucHV0KCJmb3JtQWN0aW9uTGluayIsIndzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCIpOwotICAgZm9ybVByb3BlcnRpZXMucHV0KCJ3c2RsVVJMIix3c2RsVXJsKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRXU0RMQW5kV1NJTFRvV29ya2JlbmNoRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTNkODBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb25MaW5rIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLWZvcm1BY3Rpb25MaW5rLmFwcGVuZCgid3NkbC9hY3Rpb25zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMU2VydmljZURldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMU2VydmljZURldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmNGJkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETFNlcnZpY2VEZXRhaWxzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICBOb2RlIHNlcnZpY2VOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfREVUQUlMU19ERVNDIiklPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIFdTRExTZXJ2aWNlRWxlbWVudCB3c2RsU2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxTZXJ2aWNlRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgaWYgKGRvY3VtZW50YXRpb24ubGVuZ3RoKCkgPiAwKQotICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTEwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLSAgIFZlY3RvciBiaW5kaW5nTm9kZXMgPSBzZXJ2aWNlTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIkJpbmRpbmdzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYmluZGluZ05vZGVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+Ci08JQotICAgaWYgKGJpbmRpbmdOb2Rlcy5zaXplKCkgPiAwKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiQmluZGluZ3MiLCJ4QmluZGluZ3MiKTsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL2JpbmRpbmdzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2ZWU2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HUyIpJT48L3N0cm9uZz48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIyMCUiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIyMCUiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JJTkRJTkdfVFlQRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRE9DVU1FTlRBVElPTiIpJT48L3RoPgotICAgIDwvdHI+Ci08JQotICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IChWZWN0b3Ipc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0gICBmb3IgKGludCBpPTA7aTxiaW5kaW5nTm9kZXMuc2l6ZSgpO2krKykKLSAgIHsKLSAgICAgTm9kZSBiaW5kaW5nTm9kZSA9IChOb2RlKWJpbmRpbmdOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgIFdTRExCaW5kaW5nRWxlbWVudCB3c2RsQmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KWJpbmRpbmdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgIEJpbmRpbmcgYmluZGluZyA9IHdzZGxCaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nKCk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoYmluZGluZ05vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpKSklPiI+PCU9YmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpJT48L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0QmluZGluZ1R5cGVTdHJpbmcod3NkbEJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmdUeXBlKCkpJT48L3RkPgotPCUKLSAgICAgV1NETFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpd3NkbEJpbmRpbmdFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSB3c2RsU2VydmljZUVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9ET0NVTUVOVEFUSU9OKTsKLSAgICAgaWYgKGRvY3VtZW50YXRpb24ubGVuZ3RoKCkgPCAxKQotICAgICAgIGRvY3VtZW50YXRpb24gPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIlRBQkxFX0JMQU5LX1BMQUNFSE9MREVSIik7ICAgICAKLSU+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gICAgPC90cj4KLTwlCi0gICB9Ci0lPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvZW5kcG9pbnRfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL2VuZHBvaW50X3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNkZDJlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvZW5kcG9pbnRfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBhZGRFbmRwb2ludCh0YWJsZUNvbnRhaW5lcklELCBpZCwgbmFtZSwgdmFsdWUsIGlzUmVtb3ZhYmxlKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGlmICghaXNSZW1vdmFibGUpCi0gICAgewotICAgICAgcm93Q2hlY2tib3guZGlzYWJsZWQgPSB0cnVlOwotICAgIH0KLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBlbmRQb2ludDsKLSAgICBpZiAoaXNSZW1vdmFibGUpCi0gICAgewotICAgICAgZW5kUG9pbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgZW5kUG9pbnQudHlwZSA9ICJ0ZXh0IjsKLSAgICAgIGVuZFBvaW50LmlkID0gaWQ7Ci0gICAgICBlbmRQb2ludC5uYW1lID0gbmFtZTsKLSAgICAgIGlmICh2YWx1ZSAhPSBudWxsKQotICAgICAgICBlbmRQb2ludC52YWx1ZSA9IHZhbHVlOwotICAgICAgZW5kUG9pbnQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgZW5kUG9pbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChlbmRQb2ludCk7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gaGFuZGxlRW5kcG9pbnRDaGVja0FsbENsaWNrKHRhYmxlQ29udGFpbmVySWQsY2hlY2tBbGxDaGVja2JveCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveENlbGwgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLml0ZW0oMCk7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSByb3dDaGVja2JveENlbGwuY2hpbGROb2Rlc1swXTsKLSAgICAgIGlmICghcm93Q2hlY2tib3guZGlzYWJsZWQpCi0gICAgICB7Ci0gICAgICAgIHJvd0NoZWNrYm94LmNoZWNrZWQgPSBjaGVja0FsbENoZWNrYm94LmNoZWNrZWQ7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGhpZ2hsaWdodFJvdyh0YWJsZS5yb3dzW2ldLCJyb3djb2xvciIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInRhYmxlY2VsbHMiKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLTwvc2NyaXB0PgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpOyAgIAotICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudClzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIFN0cmluZ1tdIGVuZHBvaW50cyA9IGJpbmRpbmdFbGVtZW50LmdldEVuZFBvaW50cygpOwotICAgU3RyaW5nIGFkZHJlc3NMb2NhdGlvbiA9ICgoV1NETFNlcnZpY2VFbGVtZW50KWJpbmRpbmdFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKSkuZ2V0QWRkcmVzc0xvY2F0aW9uKGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmcoKSk7ICAgCi0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTkRfUE9JTlRTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRW5kcG9pbnQoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1XU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCU+JywgJzwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4nLCAnPCU9YWRkcmVzc0xvY2F0aW9uJT4nLCB0cnVlKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUVuZHBvaW50Q2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VORF9QT0lOVFMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gIGJvb2xlYW4gaXNEZWZhdWx0QWRkZWQgPSBmYWxzZTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRwb2ludHMubGVuZ3RoOyBpKyspCi0gIHsKLSAgICBpZiAoZW5kcG9pbnRzW2ldLmVxdWFscyhhZGRyZXNzTG9jYXRpb24pICYmICFpc0RlZmF1bHRBZGRlZCkKLSAgICB7Ci0lPgotICAgIGFkZEVuZHBvaW50KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPicsICIiLCAnPCU9ZW5kcG9pbnRzW2ldJT4nLCBmYWxzZSk7Ci0gICAgCi08JQotICAgICAgaXNEZWZhdWx0QWRkZWQgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotJT4KLSAgICBhZGRFbmRwb2ludCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4nLCAnPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPicsICc8JT1lbmRwb2ludHNbaV0lPicsIHRydWUpOwotPCUKLSAgICB9Ci0gIH0KLSU+Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9vcGVyYXRpb25zX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9vcGVyYXRpb25zX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlODI2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvb3BlcmF0aW9uc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOyAgIAotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PUEVSQVRJT05TIiklPjwvc3Ryb25nPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjIwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRE9DVU1FTlRBVElPTiIpJT48L3RoPgotICAgIDwvdHI+Ci08JQotICAgVmVjdG9yIG9wZXJhdGlvbk5vZGVzID0gKFZlY3RvcilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIGZvciAoaW50IGk9MDtpPG9wZXJhdGlvbk5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgb3BlcmF0aW9uTm9kZSA9IChOb2RlKW9wZXJhdGlvbk5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgd3NkbE9wZXJhdGlvbkVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3BlcmF0aW9uTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG9wZXJhdGlvbk5vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpKSklPiI+PCU9d3NkbE9wZXJhdGlvbkVsZW1lbnQuZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLTwlICAgICAKLSAgICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSB3c2RsT3BlcmF0aW9uRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA8IDEpCi0gICAgICAgZG9jdW1lbnRhdGlvbiA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSU+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gICAgPC90cj4KLTwlICAgCi0gICB9ICAgCi0lPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvc2VydmljZXNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL3NlcnZpY2VzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzNTljOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvc2VydmljZXNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsgICAKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPjxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRVMiKSU+PC9zdHJvbmc+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMjAlIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ET0NVTUVOVEFUSU9OIiklPjwvdGg+Ci0gICAgPC90cj4KLTwlCi0gICBWZWN0b3Igc2VydmljZU5vZGVzID0gKFZlY3RvcilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VOb2Rlcy5zaXplKCk7aSsrKQotICAgewotICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgV1NETFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXJ2aWNlTm9kZS5nZXROb2RlSWQoKSxmYWxzZSkpKSU+Ij48JT13c2RsU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCklPjwvYT48L3RkPgotPCUgICAgIAotICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxTZXJ2aWNlRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA8IDEpCi0gICAgICAgZG9jdW1lbnRhdGlvbiA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSU+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gICAgPC90cj4KLTwlICAgCi0gICB9ICAgCi0lPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYzIzNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheUZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVNPQVBFbmNBcnJheUZyYWdtZW50IGZyYWcgPSAoSVNPQVBFbmNBcnJheUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcUZpeFdGcmFnbWVudEpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGYyZTZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVNPQVBFbmNBcnJheUZyYWdtZW50IGZyYWcgPSAoSVNPQVBFbmNBcnJheUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci1mb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgIDwlPWZyYWcuZ2V0TmFtZSgpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHNwYW4gaWQ9IjwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+Ij4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLSAgICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnbWVudHNbal0uZ2V0SUQoKSk7Ci0lPgotICAgICAgPHRyPgotICAgICAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnbWVudHNbal0uZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci08JQotICAgIH0KLSU+Ci0gIDwvdGFibGU+Ci0gIDwvc3Bhbj4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMmE2OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBTZXFGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cFNlcUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT0FQX0VOQ19BUlJBWVMiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIFN0cmluZyBncm91cElEOwotICAgIGlmIChpIDwgZ3JvdXBJRHMubGVuZ3RoKQotICAgICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICAgIGVsc2UKLSAgICAgIGdyb3VwSUQgPSBmcmFnLmNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKTsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSAgICAgICU+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8JQotICAgICAgICB9Ci0gICAgICAlPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEhlYWRlcldyYXBwZXJXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBIZWFkZXJXcmFwcGVyV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5MThjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEhlYWRlcldyYXBwZXJXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50IHdyYXBwZXJGcmFnbWVudCA9IChTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gd3JhcHBlckZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0KLVN0cmluZyBtdXN0VW5kZXJzdGFuZElEID0gd3JhcHBlckZyYWdtZW50LmdldE11c3RVbmRlcnN0YW5kSUQoKTsKLVN0cmluZyBhY3RvcklEID0gd3JhcHBlckZyYWdtZW50LmdldEFjdG9ySUQoKTsKLQotU3RyaW5nIGZpZWxkc2V0Q2xhc3MgPSAgQnJvd3NlckRldGVjdC5pc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIocmVxdWVzdCkgPyAiIiA6ICJoZWFkZXJmaWVsZHNldCI7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImZpeGZyYWd0YWJsZSI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0JICA8ZmllbGRzZXQgY2xhc3M9IjwlPWZpZWxkc2V0Q2xhc3MlPiI+Ci0JCTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+CSAgICAgIAkgIAotCQk8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iZml4ZnJhZ3RhYmxlIj4KLQkJICA8dHI+Ci0JCSAgICA8dGQgaGVpZ2h0PSIzIj48IS0tIHNwYWNlciAtLT48L3RkPgotCQkgIDwvdHI+Ci0JCSAgPHRyPgotCQkgICAgPHRkPgotCQkgICAgICA8JSBpZiAod3JhcHBlckZyYWdtZW50LmlzTXVzdFVuZGVyc3RhbmQoKSkgeyAlPiAgICAJCi0JCSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iPCU9bXVzdFVuZGVyc3RhbmRJRCU+IiBuYW1lPSI8JT1tdXN0VW5kZXJzdGFuZElEJT4iIGNoZWNrZWQvPgotCQkgICAgICA8JSB9IGVsc2UgeyAlPgotCQkgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IjwlPW11c3RVbmRlcnN0YW5kSUQlPiIgbmFtZT0iPCU9bXVzdFVuZGVyc3RhbmRJRCU+Ii8+Ci0JCSAgICAgIDwlIH0gJT4gICAgICAJCi0JCSAgICA8L3RkPgotCQkgICAgPHRkIGNsYXNzPSJsYWJlbCI+Ci0JCSAgICAgIDxsYWJlbCBmb3I9IjwlPW11c3RVbmRlcnN0YW5kSUQlPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTVVTVFVOREVSU1RBTkQiKSU+PC9sYWJlbD4KLQkJICAgIDwvdGQ+Ci0JCSAgICA8dGQ+fDwvdGQ+Ci0JCSAgICA8dGQgY2xhc3M9ImxhYmVsIj4KLQkJICAgICAgPGxhYmVsIGZvcj0iPCU9YWN0b3JJRCU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RPUiIpJT48L2xhYmVsPgotCQkgICAgPC90ZD4KLQkJICAgIDx0ZD4KLQkJICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDVweCI+Ci0gICAgICAJCSAgICA8JSBpZiAoIXdyYXBwZXJGcmFnbWVudC52YWxpZGF0ZUFjdG9yKCkpIHsgJT4KLSAgICAgIAkJICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICAgICAgICAgIDwlIH0gJT4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgCQk8L3RkPiAgICAJCi0JCSAgICA8dGQgd2lkdGg9IjEwMCUiPiAgICAJCi0JCSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9YWN0b3JJRCU+IiBuYW1lPSI8JT1hY3RvcklEJT4iIHZhbHVlPSI8JT13cmFwcGVyRnJhZ21lbnQuZ2V0QWN0b3IoKSU+IiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiLz4KLQkJICAgIDwvdGQ+Ci0JCSAgPC90cj4KLQkJICA8dHI+Ci0JCSAgICA8dGQgaGVpZ2h0PSIzIj48IS0tIHNwYWNlciAtLT48L3RkPgotCQkgIDwvdHI+ICAgIAotCQk8L3RhYmxlPgotCSAgPC9maWVsZHNldD4KLQk8L3RkPgotICA8L3RyPgotICA8dHI+Ci0JPHRkIGhlaWdodD0iNSI+PCEtLSBzcGFjZXIgLS0+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4N2Q0YmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTE2ICAgMTg1NTk2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgbWlzaW50ZXJwcmV0cyByZXNwb25zZSBtZXNzYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICAKLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8JQotICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykgewotICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gICAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGgpIHsKLSAgICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVDb21wbGV4SW5zdGFuY2UoKTsKLSAgICAgIGNoaWxkRnJhZyA9IGZyYWcuZ2V0RnJhZ21lbnQoY2hpbGRGcmFnSUQpOwotICAgIH0KLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdJRCk7Ci0gICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgIGF0dHJpYnV0ZS5hcHBlbmQoImZhbHNlIik7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZD4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Y2hpbGRGcmFnSUQlPiI+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgCi0gICAgaWYoYXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKS5zdGFydHNXaXRoKGNoaWxkRnJhZ0lEKSl7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9YXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKSU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDwlCi0gICAgfSAgCi0gIH0gIAotfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViNTQwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUxNiAgIDE4NTU5NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG1pc2ludGVycHJldHMgcmVzcG9uc2UgbWVzc2FnZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci1mb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoOyBpKyspIHsKLSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ3NbaV0uZ2V0SUQoKSk7Ci0lPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgIDwlPWZyYWcuZ2V0TmFtZSgpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHNwYW4gaWQ9IjwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+Ij4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgIDx0cj4KLSAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgICA8L3RkPgotICAgICAgPHRkPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnc1tpXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8JQotCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgCi0gICAgaWYgKGF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCkuc3RhcnRzV2l0aChjaGlsZEZyYWdzW2ldLmdldElEKCkpKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9YXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKSU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPCUKLSAgICB9ICAKLSAgfQotfSAgCi0gICU+Ci0gIAotICA8L3RhYmxlPgotICA8L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTU5OGQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDIwMSAgIDE5Nzg2NSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NPTlRFTlQiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1jaGlsZEZyYWdJRCU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgCi0gICAgaWYoYXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKS5zdGFydHNXaXRoKGNoaWxkRnJhZ0lEKSl7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICAlPgotICAgICAgCi0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgd2lkdGg9MTA+Ci0gICAgICAgICAgCi0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgIDwlCi0gICAgCi0gICAgCi0gICAgfSAgCi0gIH0KLX0KLSU+Ci08L3RhYmxlPgotPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNTYyMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhGaXhXRnJhZ21lbnRKU1AuanNwLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiAyCi0qIFZlcnNpb24gMS4yIDA1LzA1LzI2IDE2OjE4OjIzCi0qLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRENvbXBsZXhGcmFnbWVudCBmcmFnID0gKElYU0RDb21wbGV4RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIAotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDwlCi0gIAotICAKLSAgCi0gICAgCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgICBhdHRyaWJ1dGUuZGVsZXRlKDAsIGF0dHJpYnV0ZS5sZW5ndGgoKSk7Ci0gICAgYXR0cmlidXRlLmFwcGVuZCgiZmFsc2UiKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1jaGlsZEZyYWdJRCU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgCi0gIAotIAotICBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBmcmFnLmdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICBJWFNEQXR0cmlidXRlRnJhZ21lbnQgYXR0cmlidXRlRnJhZ21lbnQ7Ci0gIGZvcihpbnQgaiA9IDA7IGogPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBqKyspewotICAgIGF0dHJpYnV0ZUZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnRzW2pdOwotICAgIGlmKGF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCkuc3RhcnRzV2l0aChjaGlsZEZyYWdJRCkpewotICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9YXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKSU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC90ZD4KLSAgICAgPC90cj4KLSAgICAKLSAgICA8JQotICAgIH0KLSAgfSAgICAKLX0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjNjAyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPCUKLS8qKgotKiA8Y29weXJpZ2h0PgotKgotKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTQotKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQotKiByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSoKLSogPC9jb3B5cmlnaHQ+Ci0qCi0qIEZpbGUgcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcCwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIgMQotKiBWZXJzaW9uIDEuMSAwMy8wMi8yOCAxNTozMzo1NwotKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhdHRyaWJ1dGUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRENvbXBsZXhGcmFnbWVudCBmcmFnID0gKElYU0RDb21wbGV4RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZUJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJREJhc2UpLnRvU3RyaW5nKCk7Ci1JWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGg7IGkrKykgewotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKTsKLSU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4nLCc8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4nKSI+PGltZyBuYW1lPSI8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgPCU9ZnJhZy5nZXROYW1lKCklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8c3BhbiBpZD0iPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4iPgotICA8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gICAgPHRyPgotICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwlCi0KLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZihhdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpLnN0YXJ0c1dpdGgoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKSl7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAKLSAgICAgIAotICAgICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgPCUKLSAgICAKLSAgICAKLSAgICB9ICAKLSAgfQotfQotICAlPgotICAKLSAgPC90YWJsZT4KLSAgPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTQyZjE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSYW5nZVdGcmFnbWVudEpTUC5qc3AsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yIDIKLSogVmVyc2lvbiAxLjIgMDUvMDUvMjYgMTY6MTg6MjQKLSovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhdHRyaWJ1dGUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEQ29tcGxleEZyYWdtZW50IGZyYWcgPSAoSVhTRENvbXBsZXhGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzQXR0cmlidXRlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DT05URU5UIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gICAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGgpIHsKLSAgICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVDb21wbGV4SW5zdGFuY2UoKTsKLSAgICAgIGNoaWxkRnJhZyA9IGZyYWcuZ2V0RnJhZ21lbnQoY2hpbGRGcmFnSUQpOwotICAgIH0KLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdJRCk7Ci0gICU+Ci0gIAotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlUm93Q2hlY2tib3hDbGljaygpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWNoaWxkRnJhZ0lEJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotICAKLSAgPCUKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZihhdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpLnN0YXJ0c1dpdGgoY2hpbGRGcmFnSUQpKXsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotICAgICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgICAgICU+Ci0gICAgICAKLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiB3aWR0aD0xMD4KLSAgICAgICAgICAKLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCklPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgPC90cj4KLSAgICAgPCUKLSAgICAKLSAgICAKLSAgICB9ICAKLSAgfQotfQotJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOGFkODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLk5vZGVMaXN0IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9InNlc3Npb25JRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlIQotcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTE5TX0xBTkcgPSAieG1sOmxhbmciOwotcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfWE1MTlNfTEFORyA9ICJlbi1VUyI7Ci0lPgotCi08JQotSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JRC50b1N0cmluZygpKTsKLUNvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpOwotWFNEQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gbnVsbDsKLUVMaXN0IGFwcEluZm9MaXN0ID0gbnVsbDsKLUVMaXN0IGRvY0xpc3QgPSBudWxsOwotaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICBhbm5vdGF0aW9uID0gKChYU0RUeXBlRGVmaW5pdGlvbil4c2RDb21wb25lbnQpLmdldEFubm90YXRpb24oKTsKLWVsc2UgaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgYW5ub3RhdGlvbiA9ICgoWFNERWxlbWVudERlY2xhcmF0aW9uKXhzZENvbXBvbmVudCkuZ2V0QW5ub3RhdGlvbigpOwotaWYgKGFubm90YXRpb24gIT0gbnVsbCkgewotICBhcHBJbmZvTGlzdCA9IGFubm90YXRpb24uZ2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbigpOwotICBkb2NMaXN0ID0gYW5ub3RhdGlvbi5nZXRVc2VySW5mb3JtYXRpb24oKTsKLX0KLVN0cmluZyBhcHBJbmZvQ29udGFpbmVySUQgPSAiOjphcHBJbmZvIjsKLVN0cmluZyB4YXBwSW5mb0NvbnRhaW5lcklEID0gIng6OmFwcEluZm8iOwotU3RyaW5nIGRvY3VtZW50YXRpb25Db250YWluZXJJRCA9ICI6OmRvY3VtZW50YXRpb24iOwotU3RyaW5nIHhkb2N1bWVudGF0aW9uQ29udGFpbmVySUQgPSAieDo6ZG9jdW1lbnRhdGlvbiI7Ci0lPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gdHdpc3QodGFibGVDb250YWluZXJJZCx0d2lzdEltYWdlTmFtZSkKLSAgewotICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0d2lzdEltYWdlID0gZG9jdW1lbnQuaW1hZ2VzW3R3aXN0SW1hZ2VOYW1lXTsKLSAgICBpZiAodGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0gICAgewotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgdHdpc3RJbWFnZS5zcmMgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iOwotICAgICAgdHdpc3RJbWFnZS5hbHQgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpKSU+IjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICB0d2lzdEltYWdlLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiI7Ci0gICAgICB0d2lzdEltYWdlLmFsdCA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIikpJT4iOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHR3aXN0Q2xvc2UodGFibGVDb250YWluZXJJZCkKLSAgewotICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklkKS5zdHlsZS5kaXNwbGF5ID09ICIiKQotICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwieCIrdGFibGVDb250YWluZXJJZCk7Ci0gIH0KLTwvc2NyaXB0PgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWFwcEluZm9Db250YWluZXJJRCU+JywnPCU9eGFwcEluZm9Db250YWluZXJJRCU+JykiPjxpbWcgbmFtZT0iPCU9eGFwcEluZm9Db250YWluZXJJRCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9YU0RfQVBQTElDQVRJT05fSU5GT1JNQVRJT04iKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9YXBwSW5mb0NvbnRhaW5lcklEJT4iPgotPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfWFNEX0FQUExJQ0FUSU9OX0lORk9STUFUSU9OIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIGJvb2xlYW4gb3BlbkFwcEluZm9UYWJsZSA9IGZhbHNlOwotICBpZiAoYXBwSW5mb0xpc3QgIT0gbnVsbCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXBwSW5mb0xpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgIEVsZW1lbnQgZSA9IChFbGVtZW50KWFwcEluZm9MaXN0LmdldChpKTsKLSAgICAgIFN0cmluZyBhcHBJbmZvTGFuZyA9IGUuZ2V0QXR0cmlidXRlKFhNTE5TX0xBTkcpOwotICAgICAgU3RyaW5nIGFwcEluZm9UZXh0ID0gbnVsbDsKLSAgICAgIE5vZGVMaXN0IG5sID0gZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5sLmdldExlbmd0aCgpOyBqKyspIHsKLSAgICAgICAgaWYgKG5sLml0ZW0oaikuZ2V0Tm9kZVR5cGUoKSA9PSBvcmcudzNjLmRvbS5Ob2RlLlRFWFRfTk9ERSkgewotICAgICAgICAgIGFwcEluZm9UZXh0ID0gbmwuaXRlbShqKS5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGFwcEluZm9UZXh0ICE9IG51bGwpCi0gICAgICB7IAotICAgICAgICBvcGVuQXBwSW5mb1RhYmxlID0gdHJ1ZTsKLSAgICAgICAgaWYgKGFwcEluZm9UZXh0LnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgICAgYXBwSW5mb1RleHQgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIlRBQkxFX0JMQU5LX1BMQUNFSE9MREVSIik7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPSgoYXBwSW5mb0xhbmcgIT0gbnVsbCAmJiBhcHBJbmZvTGFuZy5sZW5ndGgoKSA+IDApID8gYXBwSW5mb0xhbmcgOiBERUZBVUxUX1hNTE5TX0xBTkcpJT48L3RkPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9YXBwSW5mb1RleHQlPjwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gICAgICB9Ci0gICAgfQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLWlmICghb3BlbkFwcEluZm9UYWJsZSkgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdENsb3NlKCc8JT1hcHBJbmZvQ29udGFpbmVySUQlPicpOwotPC9zY3JpcHQ+Ci08JQotfQotJT4KLQotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPicsJzwlPXhkb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPicpIj48aW1nIG5hbWU9IjwlPXhkb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgIDxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfWFNEX0RPQ1VNRU5UQVRJT04iKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9ZG9jdW1lbnRhdGlvbkNvbnRhaW5lcklEJT4iPgotPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfWFNEX0RPQ1VNRU5UQVRJT04iKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgYm9vbGVhbiBvcGVuRG9jVGFibGUgPSBmYWxzZTsKLSAgaWYgKGRvY0xpc3QgIT0gbnVsbCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZG9jTGlzdC5zaXplKCk7IGkrKykgewotICAgICAgRWxlbWVudCBlID0gKEVsZW1lbnQpZG9jTGlzdC5nZXQoaSk7Ci0gICAgICBTdHJpbmcgZG9jTGFuZyA9IGUuZ2V0QXR0cmlidXRlKFhNTE5TX0xBTkcpOwotICAgICAgU3RyaW5nIGRvY1RleHQgPSBudWxsOwotICAgICAgTm9kZUxpc3QgbmwgPSBlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykgewotICAgICAgICBpZiAobmwuaXRlbShqKS5nZXROb2RlVHlwZSgpID09IG9yZy53M2MuZG9tLk5vZGUuVEVYVF9OT0RFKSB7Ci0gICAgICAgICAgZG9jVGV4dCA9IG5sLml0ZW0oaikuZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAKLSAgICAgIGlmIChkb2NUZXh0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9wZW5Eb2NUYWJsZSA9IHRydWU7Ci0gICAgICAgIGlmIChkb2NUZXh0LnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgICAgZG9jVGV4dCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9KChkb2NMYW5nICE9IG51bGwgJiYgZG9jTGFuZy5sZW5ndGgoKSA+IDApID8gZG9jTGFuZyA6IERFRkFVTFRfWE1MTlNfTEFORyklPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1kb2NUZXh0JT48L3RkPgotICA8L3RyPgotICA8JQotICAgICAgfQotICAgIH0KLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KLTwlCi1pZiAoIW9wZW5Eb2NUYWJsZSkgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdENsb3NlKCc8JT1kb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPicpOwotPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5YzlmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5ycGMuTmFtZXNwYWNlQ29uc3RhbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuSGFzaHRhYmxlIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLUhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLS8vIFRPRE86IFJlcGxhY2UgIlNPQVAtRU5WIiBieSBOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU09BUF9FTlZFTE9QRSAoPSJzb2FwZW52IikKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU09BUF9FTlZFTE9QRSwiU09BUC1FTlYiKTsKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU0NIRU1BX1hTSSxOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU0NIRU1BX1hTSSk7Ci1zb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoTmFtZXNwYWNlQ29uc3RhbnRzLk5TVVJJX1NDSEVNQV9YU0QsTmFtZXNwYWNlQ29uc3RhbnRzLk5TUFJFRklYX1NDSEVNQV9YU0QpOwotRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gZnJhZy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoIW9wZXJFbGVtZW50LmlzVXNlTGl0ZXJhbCgpLCBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgWE1MVXRpbHMuY3JlYXRlTmV3RG9jdW1lbnQobnVsbCkpOwotU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICBpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLSAgICBjb250aW51ZTsKLSAgc2IuYXBwZW5kKFhNTFV0aWxzLnNlcmlhbGl6ZShpbnN0YW5jZURvY3VtZW50c1tpXSwgdHJ1ZSkpOwotICBzYi5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLX0KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48JT1mcmFnLmdldE5hbWUoKSU+PC9sYWJlbD4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDx0ZXh0YXJlYSBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiBjbGFzcz0idGV4dGFyZWFlbnRlciIgcmVhZG9ubHk+PCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChzYi50b1N0cmluZygpKSU+PC90ZXh0YXJlYT4KLTwlCi0gICAgICAvKgotICAgICAgU3RyaW5nQnVmZmVyIHVybCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHVybC5hcHBlbmQocmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50WE1MLmpzcD8iKSkpOwotICAgICAgdXJsLmFwcGVuZChXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKS5hcHBlbmQoIj0iKS5hcHBlbmQoZnJhZ0lEKS5hcHBlbmQoIiYiKTsKLSAgICAgIHVybC5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCI9IikuYXBwZW5kKG5vZGVJRCkuYXBwZW5kKCImIik7Ci0gICAgICB1cmwuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgiPSIpLmFwcGVuZChzZXNzaW9uLmdldElkKCkpOwotICAgICAgKi8KLSU+Ci0gICAgICA8IS0tCi0gICAgICA8aWZyYW1lIHNyYz0iIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxNTBweCI+PC9pZnJhbWU+Ci0gICAgICAtLT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50WE1MLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50WE1MLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUwODlmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFJGcmFnbWVudFhNTC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L3htbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudzNjLmRvbS5FbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcueG1sLnNheC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcueG1sLnNheC5oZWxwZXJzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5ycGMuTmFtZXNwYWNlQ29uc3RhbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwucGFyc2Vycy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotPCUKLVN0cmluZyBmcmFnSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKTsKLVN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLVN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLUh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlEKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lEKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLUhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLS8vIFRPRE86IFJlcGxhY2UgIlNPQVAtRU5WIiBieSBOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU09BUF9FTlZFTE9QRSAoPSJzb2FwZW52IikKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU09BUF9FTlZFTE9QRSwiU09BUC1FTlYiKTsKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU0NIRU1BX1hTSSxOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU0NIRU1BX1hTSSk7Ci1zb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoTmFtZXNwYWNlQ29uc3RhbnRzLk5TVVJJX1NDSEVNQV9YU0QsTmFtZXNwYWNlQ29uc3RhbnRzLk5TUFJFRklYX1NDSEVNQV9YU0QpOwotRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMF07Ci1TdHJpbmdCdWZmZXIgc2IgPSBudWxsOwotdHJ5Ci17Ci0gIGluc3RhbmNlRG9jdW1lbnRzID0gZnJhZy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoIW9wZXJFbGVtZW50LmlzVXNlTGl0ZXJhbCgpLCBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgWE1MVXRpbHMuY3JlYXRlTmV3RG9jdW1lbnQobnVsbCkpOwotICBpZiAoaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoID09IDEpCi0gIHsKLSAgICBieXRlW10gYiA9IFhNTFV0aWxzLnNlcmlhbGl6ZShpbnN0YW5jZURvY3VtZW50c1swXSwgdHJ1ZSkuZ2V0Qnl0ZXMoSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYik7Ci0gICAgU0FYUGFyc2VyRmFjdG9yeSBzYXhGYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgIHNheEZhY3Rvcnkuc2V0VmFsaWRhdGluZyh0cnVlKTsKLSAgICBTQVhQYXJzZXIgc2F4UGFyc2VyID0gc2F4RmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLSAgICBzYXhQYXJzZXIucGFyc2UoYmFpcywKLSAgICAgIG5ldyBEZWZhdWx0SGFuZGxlcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgYmFpcy5jbG9zZSgpOwotICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihuZXcgU3RyaW5nKGIpKTsKLSAgfQotfQotY2F0Y2ggKFRocm93YWJsZSB0KQotewotfQotaWYgKHNiID09IG51bGwpCi17Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mcmFnLmdldE5hbWUoKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldID09IG51bGwpCi0gICAgICBjb250aW51ZTsKLSAgICBzYi5hcHBlbmQoSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChYTUxVdGlscy5zZXJpYWxpemUoaW5zdGFuY2VEb2N1bWVudHNbaV0sIHRydWUpKSk7Ci0gIH0KLSU+Ci08JT1zYi50b1N0cmluZygpJT4KLTwvYm9keT4KLTwvaHRtbD4KLTwlCi19Ci1lbHNlCi17Ci0lPgotPCU9c2IudG9TdHJpbmcoKSU+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4NTIwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyBwYXJhbSA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWUoZnJhZy5nZXRJRCgpLCAwKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8dGV4dGFyZWEgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9InRleHRhcmVhZW50ZXIiPjwlPSgocGFyYW0gIT0gbnVsbCkgPyBIVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHBhcmFtKSA6ICIiKSU+PC90ZXh0YXJlYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uUkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uUkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA5MzFmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvblJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0REZWxlZ2F0aW9uRnJhZ21lbnQgd3JhcHBlckZyYWdtZW50ID0gKElYU0REZWxlZ2F0aW9uRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLWZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLWZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM0NjA3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvbldGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRERlbGVnYXRpb25GcmFnbWVudCB3cmFwcGVyRnJhZ21lbnQgPSAoSVhTRERlbGVnYXRpb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IHdyYXBwZXJGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IHdyYXBwZXJGcmFnbWVudC5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjMjYyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25XRnJhZ21lbnRKU1AuanNwLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiwgMjAwMzEyMzFhIDEKLSogVmVyc2lvbiAxLjEgMDMvMDIvMjggMTU6MzQ6MDQKLSovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gZWxlbWVudEZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZWxlbWVudEZyYWdtZW50LmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1mcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci1mcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLWVsZW1lbnRJRC5kZWxldGUoMCwgZWxlbWVudElELmxlbmd0aCgpKTsKLWVsZW1lbnRJRC5hcHBlbmQoZWxlbWVudEZyYWdtZW50LmdldElEKCkpOwotJT4KLQotIAotCi08dGFibGUgIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KCJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi0gCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1NjQ0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IGVsZW1lbnRGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGVsZW1lbnRGcmFnbWVudC5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci1lbGVtZW50SUQuZGVsZXRlKDAsIGVsZW1lbnRJRC5sZW5ndGgoKSk7Ci1lbGVtZW50SUQuYXBwZW5kKGVsZW1lbnRGcmFnbWVudC5nZXRJRCgpKTsKLSU+Ci0KLSAKLQotPHRhYmxlICBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLSAKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVJGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhM2NlZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWE0OTQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotaW50IG1pbk9jY3VycyA9IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLWludCBtYXhPY2N1cnMgPSB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7Ci1pZiAobWluT2NjdXJzID09IG1heE9jY3VycykgewotJT4KLTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9bWF4T2NjdXJzJT4iLz4KLTwlCi19IGVsc2UgewotICBTdHJpbmdbXSBwYXJhbXMgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpOwotJT4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09DQ1VSQU5DRSIpJT4mbmJzcDs8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBpZiAobWF4T2NjdXJzICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCkgewotICAgICAgJT4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGkgPSBtaW5PY2N1cnM7IGkgPD0gbWF4T2NjdXJzOyBpKyspIHsKLSAgICAgICAgJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1pJT4iIDwlIGlmIChwYXJhbXMgIT0gbnVsbCAmJiBpID09IHBhcmFtcy5sZW5ndGgpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9aSU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8JQotICAgICAgfSBlbHNlIHsKLSAgICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9KChwYXJhbXMgIT0gbnVsbCkgPyBTdHJpbmcudmFsdWVPZihwYXJhbXMubGVuZ3RoKSA6ICIiKSU+IiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiPgotICAgICAgPCUKLSAgICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICAgJT4KLSAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBBbGxXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQWxsV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5MDI5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBBbGxXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwQWxsRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBBbGxGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotYm9vbGVhbiBlbmFibGVHcm91cCA9ICh4c2RDb25maWcuZ2V0TWluT2NjdXJzKCkgPiAwIHx8IGZyYWcuZ2V0R3JvdXBJRHMoKS5sZW5ndGggPiAwKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgZ3JvdXBJRCA9IGZyYWcuZ2V0R3JvdXBBbGxJbnN0YW5jZSgpOwotU3RyaW5nIGdyb3VwQ2hlY2tib3hJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlhTRF9BTExfR1JPVVBfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIGdyb3VwTWVtYmVyUmFkaW9JRCA9IChuZXcgU3RyaW5nQnVmZmVyKGdyb3VwQ2hlY2tib3hJRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGluaXRHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBncm91cENoZWNrYm94SUQsIGVuYWJsZSkgewotICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGdyb3VwQ2hlY2tib3hJRCk7Ci0gICAgY2hlY2tib3guY2hlY2tlZCA9IGVuYWJsZTsKLSAgICBlbmFibGVHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBjaGVja2JveCk7Ci0gIH0KLQotICBmdW5jdGlvbiBlbmFibGVHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBjaGVja2JveCkgewotICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciBjaGVja2JveFRhYmxlID0gY2hlY2tib3gucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGU7Ci0gICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHsKLSAgICAgIGlmICh0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJRCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgY2hlY2tib3gubmFtZSA9IGZyYWdJRDsKLSAgICAgIGNoZWNrYm94LnZhbHVlID0gZ3JvdXBJRDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBpZiAodGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAiIikKLSAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJRCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgY2hlY2tib3gubmFtZSA9ICIiOwotICAgICAgY2hlY2tib3gudmFsdWUgPSAiIjsKLSAgICB9Ci0gICAgdmFyIHRkcyA9IGNoZWNrYm94VGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNoZWNrYm94Q2VsbEluZGV4ID0gY2hlY2tib3gucGFyZW50Tm9kZS5jZWxsSW5kZXg7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChpID09IGNoZWNrYm94Q2VsbEluZGV4IHx8IGNoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIHRkcy5pdGVtKGkpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgdGRzLml0ZW0oaSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBncm91cEFsbE9yZGVyaW5nTW92ZVVwKHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAodGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmNlbGxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCkuY2hlY2tlZCkgewotICAgICAgYWxlcnQoJzwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQ0FOTk9UX01PVkVfRklSU1RfRUxFTUVOVF9VUCIpJT4nKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yICh2YXIgaSA9IG51bWJlck9mSGVhZGVyUm93cyArIDE7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAodGFibGUucm93c1tpXS5jZWxsc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApLmNoZWNrZWQpIHsKLSAgICAgICAgc3dhcFJvd3ModGFibGUsIGktMSwgaSk7Ci0gICAgICAgIHRhYmxlLnJvd3NbaS0xXS5jZWxsc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApLmNoZWNrZWQgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGFsZXJ0KCc8JT1jb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPicpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ3JvdXBBbGxPcmRlcmluZ01vdmVEb3duKHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAodGFibGUucm93c1t0YWJsZS5yb3dzLmxlbmd0aCAtIDFdLmNlbGxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCkuY2hlY2tlZCkgewotICAgICAgYWxlcnQoJzwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQ0FOTk9UX01PVkVfTEFTVF9FTEVNRU5UX0RPV04iKSU+Jyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGZvciAodmFyIGkgPSBudW1iZXJPZkhlYWRlclJvd3M7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aCAtIDE7IGkrKykgewotICAgICAgaWYgKHRhYmxlLnJvd3NbaV0uY2VsbHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKS5jaGVja2VkKSB7Ci0gICAgICAgIHN3YXBSb3dzKHRhYmxlLCBpLCBpKzEpOwotICAgICAgICB0YWJsZS5yb3dzW2krMV0uY2VsbHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKS5jaGVja2VkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBhbGVydCgnPCU9Y29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4nKTsKLSAgfQotCi0gIDwlCi0gIC8vIHJvd0luZGV4MSBtdXN0IGJlIHNtYWxsZXIgdGhhbiByb3dJbmRleDIgaW4gb3JkZXIgdG8gd29yawotICAlPgotICBmdW5jdGlvbiBzd2FwUm93cyh0YWJsZSwgcm93SW5kZXgxLCByb3dJbmRleDIpIHsKLSAgICB2YXIgcm93MUNoaWxkTm9kZXMgPSBjbG9uZUFycmF5KHRhYmxlLnJvd3Nbcm93SW5kZXgxXS5jaGlsZE5vZGVzKTsKLSAgICB2YXIgcm93MkNoaWxkTm9kZXMgPSBjbG9uZUFycmF5KHRhYmxlLnJvd3Nbcm93SW5kZXgyXS5jaGlsZE5vZGVzKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgyKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgxKTsKLSAgICB2YXIgcm93MSA9IHRhYmxlLmluc2VydFJvdyhyb3dJbmRleDEpOwotICAgIHZhciByb3cyID0gdGFibGUuaW5zZXJ0Um93KHJvd0luZGV4Mik7Ci0gICAgYXBwZW5kVG9Sb3cocm93MSwgcm93MkNoaWxkTm9kZXMpOwotICAgIGFwcGVuZFRvUm93KHJvdzIsIHJvdzFDaGlsZE5vZGVzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb25lQXJyYXkob2xkQXJyYXkpIHsKLSAgICB2YXIgYXJyYXlDbG9uZSA9IG5ldyBBcnJheSgpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFycmF5Q2xvbmVbaV0gPSBvbGRBcnJheVtpXS5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheUNsb25lOwotICB9Ci0KLSAgZnVuY3Rpb24gYXBwZW5kVG9Sb3cocm93LCBub2Rlc0FycmF5KSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlc0FycmF5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICByb3cuYXBwZW5kQ2hpbGQobm9kZXNBcnJheVtpXSk7Ci0gICAgfQotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8JQotICAgIGlmICh4c2RDb25maWcuZ2V0TWluT2NjdXJzKCkgPiAwKSB7Ci0gICAgJT4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWdyb3VwSUQlPiI+Ci0gICAgPCUKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iPCU9Z3JvdXBDaGVja2JveElEJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9FTkFCTEVfRElTQUJMRV9HUk9VUCIpJT4iIG9uQ2xpY2s9ImphdmFzY3JpcHQ6ZW5hYmxlR3JvdXBBbGwoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT10d2lzdEltYWdlTmFtZSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWdyb3VwSUQlPicsIHRoaXMpIiBjaGVja2VkPjxsYWJlbCBmb3I9IjwlPWdyb3VwQ2hlY2tib3hJRCU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTkFCTEVfRElTQUJMRV9HUk9VUCIpJT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpncm91cEFsbE9yZGVyaW5nTW92ZVVwKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfR1JPVVBfQUxMX09SREVSSU5HX01PVkVfVVAiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Z3JvdXBBbGxPcmRlcmluZ01vdmVEb3duKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfR1JPVVBfQUxMX09SREVSSU5HX01PVkVfRE9XTiIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9MTA+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTEVNRU5UUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRJRCgpKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9Z3JvdXBNZW1iZXJSYWRpb0lEJT4iIHZhbHVlPSI8JT1mcmFnSUQudG9TdHJpbmcoKSU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfRUxFTUVOVF9JTl9HUk9VUCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiB3aWR0aD0iMTAwJSI+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1ncm91cElEJT4iIHZhbHVlPSI8JT1mcmFnSUQudG9TdHJpbmcoKSU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLWlmICghZW5hYmxlR3JvdXApIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGluaXRHcm91cEFsbCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPXR3aXN0SW1hZ2VOYW1lJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9Z3JvdXBJRCU+JywgJzwlPWdyb3VwQ2hlY2tib3hJRCU+JywgPCU9ZW5hYmxlR3JvdXAlPik7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyM2RjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGNob29zZShzZWxlY3QpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVDb250YWluZXJJRCA9ICc8JT1GcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCU+JzsKLSAgICAgIHRhYmxlQ29udGFpbmVySUQgKz0gc2VsZWN0Lm9wdGlvbnMoaSkudmFsdWU7Ci0gICAgICBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2VsZWN0Lm9wdGlvbnMoaSkuc2VsZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzaG93KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgaWYgKHNob3cpCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cENob2ljZUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIT0lDRVMiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VMRU1FTlRTIiklPjwvdGg+Ci0gIDwvdHI+Ci08JQotICBYU0RQYXJ0aWNsZVtdIGNob2ljZXMgPSBmcmFnLmdldENob2ljZXMoKTsKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgICBTdHJpbmcgZ3JvdXBJRDsKLSAgICBpbnQgY2hvaWNlSW5kZXg7Ci0gICAgaWYgKGkgPCBncm91cElEcy5sZW5ndGgpIHsKLSAgICAgIGdyb3VwSUQgPSBncm91cElEc1tpXTsKLSAgICAgIGNob2ljZUluZGV4ID0gZnJhZy5nZXRDaG9pY2VJbmRleChncm91cElEKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBncm91cElEID0gZnJhZy5jcmVhdGVHcm91cENob2ljZUluc3RhbmNlKDApOwotICAgICAgY2hvaWNlSW5kZXggPSAwOwotICAgIH0KLSAgICBJWFNERnJhZ21lbnRbXSBjaG9pY2VGcmFncyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9Z3JvdXBJRCU+IiBuYW1lPSI8JT1ncm91cElEJT4iIG9uQ2hhbmdlPSJqYXZhc2NyaXB0OmNob29zZSh0aGlzKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0NIT0lDRVMiKSU+Ij4KLTwlCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgWFNEQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IGNob2ljZUZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9ICIiOwotICAgICAgICAgICAgaWYoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgICAgICAgICBuYW1lID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24peHNkQ29tcG9uZW50KS5nZXRRTmFtZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBuYW1lID0geHNkQ29tcG9uZW50LmdldEVsZW1lbnQoKS5nZXRUYWdOYW1lKCk7ICAKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaiA9PSBjaG9pY2VJbmRleCkgewotJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSU+IiBzZWxlY3RlZD48JT1uYW1lJT4KLTwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPWNob2ljZUZyYWdzW2pdLmdldElEKCklPiI+PCU9bmFtZSU+Ci08JQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci08JQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgICAgIGZyYWdJRC5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSk7Ci0gICAgICAgICAgU3RyaW5nIGNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci0gICAgICAgICAgPHNwYW4gaWQ9IjwlPWNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEJT4iPgotICAgICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNob2ljZUZyYWdzW2pdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHNob3dUYWJsZSgnPCU9Y2hvaWNlRnJhZ1RhYmxlQ29udGFpbmVySUQlPicsIDwlPShqID09IGNob2ljZUluZGV4KSU+KTsKLSAgICAgICAgICA8L3NjcmlwdD4KLTwlCi0gICAgICAgIH0KLSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzZiODU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBDaG9pY2VGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cENob2ljZUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci1pZiAoZ3JvdXBJRHMubGVuZ3RoID09IDEpIHsKLSAgaW50IGNob2ljZUluZGV4ID0gZnJhZy5nZXRDaG9pY2VJbmRleChncm91cElEc1swXSk7Ci0gIElYU0RGcmFnbWVudCBjaG9pY2VGcmFnID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1swXSlbY2hvaWNlSW5kZXhdOwotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hvaWNlRnJhZy5nZXRJRCgpKTsKLSU+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaG9pY2VGcmFnLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotZWxzZSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICBpbnQgY2hvaWNlSW5kZXggPSBmcmFnLmdldENob2ljZUluZGV4KGdyb3VwSURzW2ldKTsKLSAgICBJWFNERnJhZ21lbnQgY2hvaWNlRnJhZyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pW2Nob2ljZUluZGV4XTsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaG9pY2VGcmFnLmdldElEKCkpOwotJT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0dST1VQX05VTUJFUiIsIFN0cmluZy52YWx1ZU9mKGkgKyAxKSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxzcGFuIGlkPSI8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPiI+Ci0gICAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hvaWNlRnJhZy5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDwvc3Bhbj4KLTwlCi0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTFiN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlUmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGNob29zZShzZWxlY3QpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVDb250YWluZXJJRCA9ICc8JT1GcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCU+JzsKLSAgICAgIHRhYmxlQ29udGFpbmVySUQgKz0gc2VsZWN0Lm9wdGlvbnMoaSkudmFsdWU7Ci0gICAgICBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2VsZWN0Lm9wdGlvbnMoaSkuc2VsZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzaG93KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgaWYgKHNob3cpCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cENob2ljZUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgbmFtZUFuY2hvcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuTkFNRV9BTkNIT1JfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotJT4KLTxhIG5hbWU9IjwlPW5hbWVBbmNob3JJRCU+Ii8+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIT0lDRVMiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VMRU1FTlRTIiklPjwvdGg+Ci0gIDwvdHI+Ci08JQotICBYU0RQYXJ0aWNsZVtdIGNob2ljZXMgPSBmcmFnLmdldENob2ljZXMoKTsKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIFN0cmluZyBncm91cElEOwotICAgIGludCBjaG9pY2VJbmRleDsKLSAgICBpZiAoaSA8IGdyb3VwSURzLmxlbmd0aCkgewotICAgICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICAgICAgY2hvaWNlSW5kZXggPSBmcmFnLmdldENob2ljZUluZGV4KGdyb3VwSUQpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGdyb3VwSUQgPSBmcmFnLmNyZWF0ZUdyb3VwQ2hvaWNlSW5zdGFuY2UoMCk7Ci0gICAgICBjaG9pY2VJbmRleCA9IDA7Ci0gICAgfQotICAgIElYU0RGcmFnbWVudFtdIGNob2ljZUZyYWdzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9Z3JvdXBJRCU+IiBuYW1lPSI8JT1ncm91cElEJT4iIG9uQ2hhbmdlPSJqYXZhc2NyaXB0OmNob29zZSh0aGlzKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0NIT0lDRVMiKSU+Ij4KLTwlCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKWNob2ljZUZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICBpZiAoaiA9PSBjaG9pY2VJbmRleCkgewotJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSU+IiBzZWxlY3RlZD48JT14c2RFbGVtZW50LmdldFFOYW1lKCklPgotPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSU+Ij48JT14c2RFbGVtZW50LmdldFFOYW1lKCklPgotPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0lPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotPCUKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKGNob2ljZUZyYWdzW2pdLmdldElEKCkpOwotICAgICAgICAgIFN0cmluZyBjaG9pY2VGcmFnVGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGNob2ljZUZyYWdzW2pdLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotICAgICAgICAgIDxzcGFuIGlkPSI8JT1jaG9pY2VGcmFnVGFibGVDb250YWluZXJJRCU+Ij4KLSAgICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaG9pY2VGcmFnc1tqXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICBzaG93VGFibGUoJzwlPWNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEJT4nLCA8JT0oaiA9PSBjaG9pY2VJbmRleCklPik7Ci0gICAgICAgICAgPC9zY3JpcHQ+Ci08JQotICAgICAgICB9Ci0lPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotPCUKLSAgfQotJT4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwUkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkZmRhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySURCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEQmFzZSkudG9TdHJpbmcoKTsKLVN0cmluZ1tdIGdyb3VwSURzID0gZnJhZy5nZXRHcm91cElEcygpOwotaWYgKGdyb3VwSURzLmxlbmd0aCA9PSAxKSB7Ci0gIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1swXSk7Ci0lPgotICA8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgIGZyYWdJRC5hcHBlbmQoZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0uZ2V0SUQoKSk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotICA8L3RhYmxlPgotPCUKLX0KLWVsc2UgewotICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzW2ldKTsKLSU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPicsJzwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPicpIj48aW1nIG5hbWU9IjwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9HUk9VUF9OVU1CRVIiLCBTdHJpbmcudmFsdWVPZihpICsgMSkpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8c3BhbiBpZD0iPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4iPgotICAgIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLTwlCi0gICAgfQotJT4KLSAgICA8L3RhYmxlPgotICAgIDwvc3Bhbj4KLTwlCi0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVkODFjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cFNlcUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwU2VxRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZ1tdIGdyb3VwSURzID0gZnJhZy5nZXRHcm91cElEcygpOwotZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykgewotICBTdHJpbmcgZ3JvdXBJRDsKLSAgaWYgKGkgPCBncm91cElEcy5sZW5ndGgpCi0gICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICBlbHNlCi0gICAgZ3JvdXBJRCA9IGZyYWcuY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpOwotICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0lPgotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWdyb3VwSUQlPiI+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi0gIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotICA8L3RhYmxlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzQxZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxUmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwU2VxRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBTZXFGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjcmVhdGVJbnN0YW5jZSgnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4sICc8JT1mcmFnSUQlPicsICc8JT1uYW1lQW5jaG9ySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTEVNRU5UUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBTdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgU3RyaW5nIGdyb3VwSUQ7Ci0gICAgaWYgKGkgPCBncm91cElEcy5sZW5ndGgpCi0gICAgICBncm91cElEID0gZ3JvdXBJRHNbaV07Ci0gICAgZWxzZQotICAgICAgZ3JvdXBJRCA9IGZyYWcuY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpOwotICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1ncm91cElEJT4iPgotICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldElEKCkpOwotICAgICAgJT4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvRGlhbG9nLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvRGlhbG9nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxM2M0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb0RpYWxvZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgbm9kZUlkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICBTdHJpbmcgZnJhZ21lbnRJZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+Ci0gICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlRJVExFX1hTRF9JTkZPUk1BVElPTl9ESUFMT0ciKSU+Ci0gIDwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIGxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3A/Iik7Ci0gICBsaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgIGxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgbGluay5hcHBlbmQoJyYnKS5hcHBlbmQoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkuYXBwZW5kKCc9JykuYXBwZW5kKGZyYWdtZW50SWQpOwotJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLlhTRF9JTkZPX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfWFNEX0lORk9STUFUSU9OX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChsaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08JSAgICAgIAotICAgbGluay5zZXRMZW5ndGgoMCk7Ci0gICBsaW5rLmFwcGVuZCgid3NkbC9mcmFnbWVudC9YU0RJbmZvX2NvbnRlbnQuanNwPyIpOwotICAgbGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICBsaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgIGxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpLmFwcGVuZCgnPScpLmFwcGVuZChmcmFnbWVudElkKTsKLSU+ICAKLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLlhTRF9JTkZPX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfWFNEX0lORk9STUFUSU9OX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChsaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiOTY0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9InNlc3Npb25JRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgc2Vzc2lvbklELmFwcGVuZChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKSk7Ci0gICBmcmFnSUQuYXBwZW5kKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpKTsKLQotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JRC50b1N0cmluZygpKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBub2RlSUQuYXBwZW5kKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci0gICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYWcuZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMTg2YjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChyZXF1ZXN0LmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKSk7ICAgCi0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfWFNEX0lORk9STUFUSU9OX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uVW5sb2FkPSJ0b3Aub3BlbmVyLnhzZEluZm9EaWFsb2dDbG9zZWQ9dHJ1ZSIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIj4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2RsLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1mcmFnLmdldE5hbWUoKSU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0b3Aub3BlbmVyLnhzZEluZm9EaWFsb2dDbG9zZWQgPSBmYWxzZTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzRkM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TdHJpbmcgZnJhZ0lEU3RyaW5nID0gZnJhZ0lELnRvU3RyaW5nKCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWZyYWcuZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLVhTRFR5cGVEZWZpbml0aW9uIHhzZEJ1aWx0SW5UeXBlID0gWFNEVHlwZURlZmluaXRpb25VdGlsLnJlc29sdmVUb1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihzaW1wbGVUeXBlKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWdJRFN0cmluZyU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnSURTdHJpbmcpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8JQotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9IjYwJSI+Ci0gICAgICA8JQotICAgICAgU3RyaW5nIHZhbHVlID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZShmcmFnLmdldElEKCksIGkpOwotICAgICAgJT4KLSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWdJRFN0cmluZyU+IiB2YWx1ZT0iPCU9KCh2YWx1ZSAhPSBudWxsKSA/IEhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QodmFsdWUpIDogIiIpJT4iIHNpemU9IjUwIiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuQ2FsZW5kYXJCcm93c2VyKDwlPXJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKSU+LCdjb250ZW50Ym9yZGVyJywnPCU9ZnJhZ0lEU3RyaW5nJT4nLDwlPWklPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSIzMCUiPiZuYnNwOzwvdGQ+ICAgIAotICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjUyM2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci1YU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotaW50IGNhbGVuZGFyVHlwZSA9IEludGVnZXIucGFyc2VJbnQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAlPgotICAgIAotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyg8JT1jYWxlbmRhclR5cGUlPiwnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgbnVsbCwgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkRGF0ZVRpbWVSb3dzKDwlPWNhbGVuZGFyVHlwZSU+LCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIHdpZHRoPSI5MCUiIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVkFMVUVTIiklPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotU3RyaW5nW10gdmFsdWVzID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKTsKLWludCBpID0gMDsKLWlmICh2YWx1ZXMgIT0gbnVsbCkgewotICBmb3IgKCA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBhZGRTaW1wbGVBdG9taWNEYXRlVGltZVJvd3MoPCU9Y2FsZW5kYXJUeXBlJT4sIjwlPXRhYmxlQ29udGFpbmVySUQlPiIsIjwlPWZyYWcuZ2V0SUQoKSU+IiwiPCU9ZnJhZy5nZXRJRCgpJT4iLCI8JT12YWx1ZXNbaV0lPiIsPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotZm9yICggOyBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyg8JT1jYWxlbmRhclR5cGUlPiwiPCU9dGFibGVDb250YWluZXJJRCU+IiwiPCU9ZnJhZy5nZXRJRCgpJT4iLCI8JT1mcmFnLmdldElEKCklPiIsbnVsbCw8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPik7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bUZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OTczMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1GaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci0gICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudCBmcmFnID0gKFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotICAgSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICBYU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8bGFiZWwgZm9yPSI8JT1mcmFnLmdldElEKCklPiI+PGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+PC9sYWJlbD4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8JT0oeHNkQnVpbHRJblR5cGUgIT0gbnVsbCA/IHhzZEJ1aWx0SW5UeXBlLmdldE5hbWUoKSA6IHNpbXBsZVR5cGUuZ2V0TmFtZSgpKSU+Ci0gICAgPC90ZD4KLSAgICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICA8dGQ+Ci08JQotICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLSAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBmcmFnLmdldE9wdGlvblZlY3RvcigpOwotICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykKLSAgIHsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci08JQotICAgICBTdHJpbmcgc2VsZWN0ZWRWYWx1ZSA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWUoZnJhZy5nZXRJRCgpLCBpKTsKLSU+Ci0gICAgICA8c2VsZWN0IGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLTwlICAgICAgICAgICAgICAKLSAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvcHRpb25WZWN0b3Iuc2l6ZSgpOyBqKyspCi0gICAgIHsKLSAgICAgICBTdHJpbmcgZGlzcGxheVZhbHVlID0gb3B0aW9uVmVjdG9yLmdldERpc3BsYXlWYWx1ZShqKTsKLSAgICAgICBTdHJpbmcgdmFsdWUgPSBvcHRpb25WZWN0b3IuZ2V0VmFsdWUoaik7Ci0gICAgICAgaWYgKHZhbHVlLmVxdWFscyhzZWxlY3RlZFZhbHVlKSkKLSAgICAgICB7Ci0lPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT12YWx1ZSU+IiBzZWxlY3RlZD48JT1kaXNwbGF5VmFsdWUlPgotPCUKLSAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgIHsKLSU+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXZhbHVlJT4iPjwlPWRpc3BsYXlWYWx1ZSU+Ci08JQotICAgICAgIH0KLSAgICAgfQotJT4KLSAgICAgIDwvc2VsZWN0PgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08JQotICAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxN2E5ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQgZnJhZyA9IChYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLSAgIElYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLSAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBmcmFnLmdldE9wdGlvblZlY3RvcigpOwotICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICBYU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSAgIFN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotICAgU3RyaW5nIG9wdGlvbnNDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlhTRF9BVE9NSUNfRU5VTV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNwYW4gaWQ9IjwlPW9wdGlvbnNDb250YWluZXJJRCU+Ij4KLTwlCi0gICBmb3IgKGludCBqID0gMDsgaiA8IG9wdGlvblZlY3Rvci5zaXplKCk7IGorKykgewotJT4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1vcHRpb25zQ29udGFpbmVySUQlPiIgdmFsdWU9IjwlPW9wdGlvblZlY3Rvci5nZXREaXNwbGF5VmFsdWUoaiklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9b3B0aW9uc0NvbnRhaW5lcklEJT4iIHZhbHVlPSI8JT1vcHRpb25WZWN0b3IuZ2V0VmFsdWUoaiklPiI+Ci08JQotICAgfQotJT4KLTwvc3Bhbj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBhZGRTaW1wbGVBdG9taWNFbnVtUm93cyh0YWJsZUNvbnRhaW5lcklELCBvcHRpb25zQ29udGFpbmVySUQsIGlkLCBuYW1lLCB2YWx1ZSwgbWF4T2NjdXJzKSB7Ci0gICAgaWYgKGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpKQotICAgICAgcmV0dXJuOwotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKHNlbGVjdCk7Ci0gICAgc2VsZWN0LmlkID0gaWQ7Ci0gICAgc2VsZWN0Lm5hbWUgPSBuYW1lOwotICAgIHNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgdmFyIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnNDb250YWluZXJJRCk7Ci0gICAgdmFyIGluZGV4ID0gMDsKLSAgICBmb3IgKHZhciBrID0gMDsgayA8IG9wdGlvbnMubGVuZ3RoOyBrICs9IDIpIHsKLSAgICAgIHNlbGVjdC5vcHRpb25zW2luZGV4XSA9IG5ldyBPcHRpb24ob3B0aW9uc1trXS52YWx1ZSxvcHRpb25zW2srMV0udmFsdWUpOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPT0gb3B0aW9uc1trKzFdLnZhbHVlKQotICAgICAgICBzZWxlY3Qub3B0aW9uc1tpbmRleF0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zQ29udGFpbmVySUQpIHsKLSAgICB2YXIgb3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnNDb250YWluZXJJRCk7Ci0gICAgdmFyIG9wdGlvbnMgPSBvcHRpb25zQ29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIHJldHVybiBvcHRpb25zOwotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkU2ltcGxlQXRvbWljRW51bVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1vcHRpb25zQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsIG51bGwsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVkFMVUVTIiklPjwvdGg+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLVN0cmluZ1tdIHZhbHVlcyA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSk7Ci1pbnQgaSA9IDA7Ci1pZiAodmFsdWVzICE9IG51bGwpIHsKLSAgZm9yICggOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgYWRkU2ltcGxlQXRvbWljRW51bVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1vcHRpb25zQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT12YWx1ZXNbaV0lPicsICc8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPicpOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotZm9yICggOyBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGFkZFNpbXBsZUF0b21pY0VudW1Sb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9b3B0aW9uc0NvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCBudWxsLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0ZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNmFkODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0ZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotYm9vbGVhbiBhdHRyaWJ1dGVCb29sID0gQm9vbGVhbi52YWx1ZU9mKGF0dHJpYnV0ZS50b1N0cmluZygpKS5ib29sZWFuVmFsdWUoKSA7Ci0KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSAmJiAhKGF0dHJpYnV0ZUJvb2wpICl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICAKLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDwlCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBTdHJpbmcgdmFsdWUgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlKGZyYWcuZ2V0SUQoKSwgaSk7Ci0gICAgICAlPgotICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT0oKHZhbHVlICE9IG51bGwpID8gSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh2YWx1ZSkgOiAiIiklPiIgc2l6ZT0iNTAiIGNsYXNzPSJ0YWJsZXRleHRlbnRlciI+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNJbmZvRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyY2VmZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJzZXNzaW9uSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLUh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSUQudG9TdHJpbmcoKSk7Ci1Db250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0KLWludCBtaW5MZW5ndGggPSAtMTsKLWludCBtYXhMZW5ndGggPSAtMTsKLVZlY3RvciBwYXR0ZXJuVmVjdG9yID0gbmV3IFZlY3RvcigpOwotU3RyaW5nIHdoaXRlU3BhY2UgPSBudWxsOwotYm9vbGVhbiBtaW5FeGNsdXNpdmUgPSB0cnVlOwotT2JqZWN0IG1pbiA9IG51bGw7Ci1ib29sZWFuIG1heEV4Y2x1c2l2ZSA9IHRydWU7Ci1PYmplY3QgbWF4ID0gbnVsbDsKLWludCB0b3RhbERpZ2l0cyA9IC0xOwotaW50IGZyYWN0aW9uRGlnaXRzID0gLTE7Ci0KLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIGN1cnJUeXBlID0gc2ltcGxlVHlwZTsKLXdoaWxlICghWFNEVHlwZURlZmluaXRpb25VdGlsLmlzUm9vdFR5cGVEZWZpbml0aW9uKGN1cnJUeXBlKSkgewotICAvLyBtaW5MZW5ndGgKLSAgaWYgKG1pbkxlbmd0aCA8IDApIHsKLSAgICBYU0RMZW5ndGhGYWNldCB4c2RMZW5ndGhGYWNldCA9IGN1cnJUeXBlLmdldExlbmd0aEZhY2V0KCk7Ci0gICAgWFNETWluTGVuZ3RoRmFjZXQgeHNkTWluTGVuZ3RoRmFjZXQgPSBjdXJyVHlwZS5nZXRNaW5MZW5ndGhGYWNldCgpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKHhzZExlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgICBtaW5MZW5ndGggPSB4c2RMZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgIGVsc2UgaWYgKHhzZE1pbkxlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgICBtaW5MZW5ndGggPSB4c2RNaW5MZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICB9Ci0gIC8vIG1heExlbmd0aAotICBpZiAobWF4TGVuZ3RoIDwgMCkgewotICAgIFhTRExlbmd0aEZhY2V0IHhzZExlbmd0aEZhY2V0ID0gY3VyclR5cGUuZ2V0TGVuZ3RoRmFjZXQoKTsKLSAgICBYU0RNYXhMZW5ndGhGYWNldCB4c2RNYXhMZW5ndGhGYWNldCA9IGN1cnJUeXBlLmdldE1heExlbmd0aEZhY2V0KCk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoeHNkTGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgIG1heExlbmd0aCA9IHhzZExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoeHNkTWF4TGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgIG1heExlbmd0aCA9IHhzZE1heExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gIH0KLSAgLy8gcGF0dGVyblZlY3RvcgotICBFTGlzdCB4c2RQYXR0ZXJuRmFjZXRzID0gY3VyclR5cGUuZ2V0UGF0dGVybkZhY2V0cygpOwotICBpZiAoeHNkUGF0dGVybkZhY2V0cyAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RQYXR0ZXJuRmFjZXRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBYU0RQYXR0ZXJuRmFjZXQgeHNkUGF0dGVybkZhY2V0ID0gKFhTRFBhdHRlcm5GYWNldCl4c2RQYXR0ZXJuRmFjZXRzLmdldChpKTsKLSAgICAgIEVMaXN0IHBhdHRlcm5zID0geHNkUGF0dGVybkZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhdHRlcm5zLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIHBhdHRlcm5WZWN0b3IuYWRkKHBhdHRlcm5zLmdldChqKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIC8vIHdoaXRlU3BhY2UKLSAgaWYgKHdoaXRlU3BhY2UgPT0gbnVsbCkgewotICAgIFhTRFdoaXRlU3BhY2VGYWNldCB4c2RXaGl0ZVNwYWNlRmFjZXQgPSBjdXJyVHlwZS5nZXRXaGl0ZVNwYWNlRmFjZXQoKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmICh4c2RXaGl0ZVNwYWNlRmFjZXQgIT0gbnVsbCkKLSAgICAgIHdoaXRlU3BhY2UgPSB4c2RXaGl0ZVNwYWNlRmFjZXQuZ2V0VmFsdWUoKS5nZXROYW1lKCk7Ci0gIH0KLSAgLy8gbWluIGluL2V4Y2x1c2l2ZQotICBpZiAobWluID09IG51bGwgKSB7Ci0gICAgWFNETWluRXhjbHVzaXZlRmFjZXQgeHNkTWluRXhjbHVzaXZlRmFjZXQgPSBjdXJyVHlwZS5nZXRNaW5FeGNsdXNpdmVGYWNldCgpOwotICAgIFhTRE1pbkluY2x1c2l2ZUZhY2V0IHhzZE1pbkluY2x1c2l2ZUZhY2V0ID0gY3VyclR5cGUuZ2V0TWluSW5jbHVzaXZlRmFjZXQoKTsKLSAgICBpZiAoeHNkTWluRXhjbHVzaXZlRmFjZXQgIT0gbnVsbCkgewotICAgICAgbWluID0geHNkTWluRXhjbHVzaXZlRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIG1pbkV4Y2x1c2l2ZSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKHhzZE1pbkluY2x1c2l2ZUZhY2V0ICE9IG51bGwpIHsKLSAgICAgIG1pbiA9IHhzZE1pbkluY2x1c2l2ZUZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBtaW5FeGNsdXNpdmUgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgLy8gbWF4IGluL2V4Y2x1c2l2ZQotICBpZiAobWF4ID09IG51bGwpIHsKLSAgICBYU0RNYXhFeGNsdXNpdmVGYWNldCB4c2RNYXhFeGNsdXNpdmVGYWNldCA9IGN1cnJUeXBlLmdldE1heEV4Y2x1c2l2ZUZhY2V0KCk7Ci0gICAgWFNETWF4SW5jbHVzaXZlRmFjZXQgeHNkTWF4SW5jbHVzaXZlRmFjZXQgPSBjdXJyVHlwZS5nZXRNYXhJbmNsdXNpdmVGYWNldCgpOwotICAgIGlmICh4c2RNYXhFeGNsdXNpdmVGYWNldCAhPSBudWxsKSB7Ci0gICAgICBtYXggPSB4c2RNYXhFeGNsdXNpdmVGYWNldC5nZXRWYWx1ZSgpOwotICAgICAgbWF4RXhjbHVzaXZlID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoeHNkTWF4SW5jbHVzaXZlRmFjZXQgIT0gbnVsbCkgewotICAgICAgbWF4ID0geHNkTWF4SW5jbHVzaXZlRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIG1heEV4Y2x1c2l2ZSA9IGZhbHNlOwotICAgIH0KLSAgfQotICAvLyB0b3RhbERpZ2l0cwotICBpZiAodG90YWxEaWdpdHMgPCAwKSB7Ci0gICAgWFNEVG90YWxEaWdpdHNGYWNldCB4c2RUb3RhbERpZ2l0c0ZhY2V0ID0gY3VyclR5cGUuZ2V0VG90YWxEaWdpdHNGYWNldCgpOwotICAgIGlmICh4c2RUb3RhbERpZ2l0c0ZhY2V0ICE9IG51bGwpCi0gICAgICB0b3RhbERpZ2l0cyA9IHhzZFRvdGFsRGlnaXRzRmFjZXQuZ2V0VmFsdWUoKTsKLSAgfQotICAvLyBmcmFjdGlvbkRpZ2l0cwotICBpZiAoZnJhY3Rpb25EaWdpdHMgPCAwKSB7Ci0gICAgWFNERnJhY3Rpb25EaWdpdHNGYWNldCB4c2RGcmFjdGlvbkRpZ2l0c0ZhY2V0ID0gY3VyclR5cGUuZ2V0RnJhY3Rpb25EaWdpdHNGYWNldCgpOwotICAgIGlmICh4c2RGcmFjdGlvbkRpZ2l0c0ZhY2V0ICE9IG51bGwpCi0gICAgICBmcmFjdGlvbkRpZ2l0cyA9IHhzZEZyYWN0aW9uRGlnaXRzRmFjZXQuZ2V0VmFsdWUoKTsKLSAgfQotICAvLyB3YWxrIHRvIGJhc2UgdHlwZQotICBjdXJyVHlwZSA9IGN1cnJUeXBlLmdldEJhc2VUeXBlRGVmaW5pdGlvbigpOwotfQotJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CQVNFX1RZUEUiKSU+Ci0gICAgPC90aD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8JT1YU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpLmdldE5hbWUoKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTwlCi1TdHJpbmcgbWluTGVuZ3RoU3RyaW5nID0gKG1pbkxlbmd0aCA8IDApID8gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5CT1VOREVEIikgOiBTdHJpbmcudmFsdWVPZihtaW5MZW5ndGgpOwotU3RyaW5nIG1heExlbmd0aFN0cmluZyA9IChtYXhMZW5ndGggPCAwKSA/IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQk9VTkRFRCIpIDogU3RyaW5nLnZhbHVlT2YobWF4TGVuZ3RoKTsKLVN0cmluZ1tdIGxlbmd0aFZhbHVlcyA9IHttaW5MZW5ndGhTdHJpbmcsIG1heExlbmd0aFN0cmluZ307Ci1pZiAobWluTGVuZ3RoID49IDAgfHwgbWF4TGVuZ3RoID49IDApIHsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MRU5HVEgiKSU+Ci0gICAgICA8L3RoPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEVOR1RIX1ZBTFVFIiwgbGVuZ3RoVmFsdWVzKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KLQotPCUKLWlmIChwYXR0ZXJuVmVjdG9yLnNpemUoKSA+IDApIHsKLSAgU3RyaW5nIHBhdHRlcm5Db250YWluZXJJRCA9ICI6OnBhdHRlcm4iOwotICBTdHJpbmcgeHBhdHRlcm5Db250YWluZXJJRCA9ICJ4OjpwYXR0ZXJuIjsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1wYXR0ZXJuQ29udGFpbmVySUQlPicsJzwlPXhwYXR0ZXJuQ29udGFpbmVySUQlPicpIj48aW1nIG5hbWU9IjwlPXhwYXR0ZXJuQ29udGFpbmVySUQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgIDxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUEFUVEVSTiIpJT48L3N0cm9uZz4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHNwYW4gaWQ9IjwlPXBhdHRlcm5Db250YWluZXJJRCU+Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QQVRURVJOIiklPgotICAgICAgPC90aD4KLSAgICA8L3RyPgotICAgIDwlCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBwYXR0ZXJuVmVjdG9yLnNpemUoKTsgaysrKSB7Ci0gICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICA8JT0oU3RyaW5nKXBhdHRlcm5WZWN0b3IuZ2V0KGspJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgPC90YWJsZT4KLSAgPC9zcGFuPgotPCUKLX0KLSU+Ci0KLTwlCi1pZiAod2hpdGVTcGFjZSAhPSBudWxsKSB7Ci0lPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV0hJVEVTUEFDRSIpJT4KLSAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JT13aGl0ZVNwYWNlJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgotCi08JQotU3RyaW5nIGxvd2VyQm91bmQ7Ci1pZiAobWluRXhjbHVzaXZlKQotICBsb3dlckJvdW5kID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUlOX0VYQ0xVU0lWRSIsIChtaW4gPT0gbnVsbCkgPyB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTkJPVU5ERUQiKSA6IG1pbi50b1N0cmluZygpKTsKLWVsc2UKLSAgbG93ZXJCb3VuZCA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01JTl9JTkNMVVNJVkUiLCAobWluID09IG51bGwpID8gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5CT1VOREVEIikgOiBtaW4udG9TdHJpbmcoKSk7Ci1TdHJpbmcgdXBwZXJCb3VuZDsKLWlmIChtYXhFeGNsdXNpdmUpCi0gIHVwcGVyQm91bmQgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVhfRVhDTFVTSVZFIiwgKG1heCA9PSBudWxsKSA/IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQk9VTkRFRCIpIDogbWF4LnRvU3RyaW5nKCkpOwotZWxzZQotICB1cHBlckJvdW5kID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFYX0lOQ0xVU0lWRSIsIChtYXggPT0gbnVsbCkgPyB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTkJPVU5ERUQiKSA6IG1heC50b1N0cmluZygpKTsKLWlmIChtaW4gIT0gbnVsbCB8fCBtYXggIT0gbnVsbCkgewotJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JBTkdFX09GX1ZBTFVFUyIpJT4KLSAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JT1sb3dlckJvdW5kICsgdXBwZXJCb3VuZCU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KLQotPCUKLWlmICh0b3RhbERpZ2l0cyA+PSAwKSB7Ci0lPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVE9UQUxfRElHSVRTIiklPgotICAgICAgPC90aD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDwlPXRvdGFsRGlnaXRzJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgotCi08JQotaWYgKGZyYWN0aW9uRGlnaXRzID49IDApIHsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GUkFDVElPTl9ESUdJVFMiKSU+Ci0gICAgICA8L3RoPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCU9ZnJhY3Rpb25EaWdpdHMlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmRkNGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotU3RyaW5nW10gbGFiZWxBcmdzID0ge2ZyYWcuZ2V0TmFtZSgpLCAoeHNkQnVpbHRJblR5cGUgIT0gbnVsbCA/IHhzZEJ1aWx0SW5UeXBlLmdldE5hbWUoKSA6IHNpbXBsZVR5cGUuZ2V0TmFtZSgpKX07Ci1TdHJpbmdbXSBwYXJhbXMgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FUT01JQ19OQU1FX1RZUEUiLCBsYWJlbEFyZ3MpJT4KLSAgICA8L3RoPgotICAgIDx0ZCBoZWFkZXJzPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHdpZHRoPSIxMDAlIiB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSgocGFyYW1zICE9IG51bGwgJiYgcGFyYW1zLmxlbmd0aCA+IDApID8gSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhwYXJhbXNbMF0pIDogd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTlVMTCIpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgaWYgKHBhcmFtcyAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPjwvdGQ+Ci0gICAgICAgIDx0ZCBoZWFkZXJzPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHdpZHRoPSIxMDAlIiB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKHBhcmFtc1tpXSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8JQotICAgIH0KLSAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjY4ZDc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gYWRkU2ltcGxlQXRvbWljUm93cyh0YWJsZUNvbnRhaW5lcklELCBpZCwgbmFtZSwgdmFsdWUsIG1heE9jY3VycykgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoaW5wdXQpOwotICAgIGlucHV0LnR5cGUgPSAidGV4dCI7Ci0gICAgaW5wdXQuaWQgPSBpZDsKLSAgICBpbnB1dC5uYW1lID0gbmFtZTsKLSAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKQotICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZTsKLSAgICBpbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotPC9zY3JpcHQ+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkU2ltcGxlQXRvbWljUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgbnVsbCwgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9WQUxVRVMiKSU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotU3RyaW5nW10gdmFsdWVzID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKTsKLWludCBpID0gMDsKLWlmICh2YWx1ZXMgIT0gbnVsbCkgewotICBmb3IgKCA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBhZGRTaW1wbGVBdG9taWNSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9dmFsdWVzW2ldJT4nLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLWZvciAoIDsgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBhZGRTaW1wbGVBdG9taWNSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCBudWxsLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDljMjMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdEZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZUxpc3RGcmFnbWVudCBmcmFnID0gKElYU0RTaW1wbGVMaXN0RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLUlYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi1mb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gIFN0cmluZyBjaGlsZEZyYWdJRDsKLSAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgY2hpbGRGcmFnSUQgPSBjaGlsZEZyYWcuZ2V0SUQoKTsKLSAgfQotICBlbHNlIHsKLSAgICBjaGlsZEZyYWdJRCA9IGZyYWcuY3JlYXRlTGlzdEluc3RhbmNlKCk7Ci0gICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gIH0KLSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWNoaWxkRnJhZ0lEJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPCUKLX0KLSU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzI4NjE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlTGlzdEZyYWdtZW50IGZyYWcgPSAoSVhTRFNpbXBsZUxpc3RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGg7IGkrKykgewotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKTsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnc1tpXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08JQotfQotJT4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2ViYmEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlTGlzdEZyYWdtZW50IGZyYWcgPSAoSVhTRFNpbXBsZUxpc3RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0lURU1TIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gICAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGgpIHsKLSAgICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVMaXN0SW5zdGFuY2UoKTsKLSAgICAgIGNoaWxkRnJhZyA9IGZyYWcuZ2V0RnJhZ21lbnQoY2hpbGRGcmFnSUQpOwotICAgIH0KLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdJRCk7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Y2hpbGRGcmFnSUQlPiI+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkODM0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZnJhZyA9IChJWFNEU2ltcGxlVW5pb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gY2hhbmdlVW5pb25NZW1iZXJUeXBlKHNlbGVjdCkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZUNvbnRhaW5lcklEID0gJzwlPUZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEJT4nOwotICAgICAgdGFibGVDb250YWluZXJJRCArPSBzZWxlY3Qub3B0aW9ucyhpKS52YWx1ZTsKLSAgICAgIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzZWxlY3Qub3B0aW9ucyhpKS5zZWxlY3RlZCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1RhYmxlKHRhYmxlQ29udGFpbmVySUQsIHNob3cpIHsKLSAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAoc2hvdykKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5JT05fVFlQRSIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5JT05fTUVNQkVSUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbltdIG1lbWJlclR5cGVzID0gZnJhZy5nZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKTsKLSAgSVhTREZyYWdtZW50W10gbWVtYmVyRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICAgaW50IHR5cGVTZWxlY3Rpb25JbmRleCA9IDA7Ci0gICAgU3RyaW5nW10gbmV3TWVtYmVyRnJhZ0lEcyA9IG5ldyBTdHJpbmdbbWVtYmVyVHlwZXMubGVuZ3RoXTsKLSAgICBJWFNERnJhZ21lbnRbXSBuZXdNZW1iZXJGcmFncyA9IG5ldyBJWFNERnJhZ21lbnRbbWVtYmVyVHlwZXMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG1lbWJlclR5cGVzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBpZiAoaSA8IG1lbWJlckZyYWdzLmxlbmd0aCAmJiBtZW1iZXJGcmFnc1tpXS5nZXRYU0RUeXBlRGVmaW5pdGlvbigpLmdldFFOYW1lKCkuZXF1YWxzKG1lbWJlclR5cGVzW2pdLmdldFFOYW1lKCkpKSB7Ci0gICAgICAgIG5ld01lbWJlckZyYWdJRHNbal0gPSBtZW1iZXJGcmFnc1tpXS5nZXRJRCgpOwotICAgICAgICBuZXdNZW1iZXJGcmFnc1tqXSA9IG1lbWJlckZyYWdzW2ldOwotICAgICAgICB0eXBlU2VsZWN0aW9uSW5kZXggPSBqOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIG5ld01lbWJlckZyYWdJRHNbal0gPSBmcmFnLmNyZWF0ZVVuaW9uSW5zdGFuY2Uoaik7Ci0gICAgICAgIG5ld01lbWJlckZyYWdzW2pdID0gZnJhZy5nZXRGcmFnbWVudChuZXdNZW1iZXJGcmFnSURzW2pdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8c2VsZWN0IGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIG9uQ2hhbmdlPSJqYXZhc2NyaXB0OmNoYW5nZVVuaW9uTWVtYmVyVHlwZSh0aGlzKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1VOSU9OX1RZUEUiKSU+Ij4KLSAgICAgICAgICA8JQotICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbWVtYmVyVHlwZXMubGVuZ3RoOyBrKyspIHsKLSAgICAgICAgICAgIGlmIChrID09IHR5cGVTZWxlY3Rpb25JbmRleCkgewotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1uZXdNZW1iZXJGcmFnSURzW2tdJT4iIHNlbGVjdGVkPjwlPW1lbWJlclR5cGVzW2tdLmdldFFOYW1lKCklPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPW5ld01lbWJlckZyYWdJRHNba10lPiI+PCU9bWVtYmVyVHlwZXNba10uZ2V0UU5hbWUoKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgICU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgbWVtYmVyVHlwZXMubGVuZ3RoOyBsKyspIHsKLSAgICAgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZnJhZ0lELmFwcGVuZChuZXdNZW1iZXJGcmFnSURzW2xdKTsKLSAgICAgICAgICBTdHJpbmcgbWVtYmVyVGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKG5ld01lbWJlckZyYWdzW2xdLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzcGFuIGlkPSI8JT1tZW1iZXJUYWJsZUNvbnRhaW5lcklEJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1uZXdNZW1iZXJGcmFnc1tsXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC9zcGFuPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICBzaG93VGFibGUoJzwlPW1lbWJlclRhYmxlQ29udGFpbmVySUQlPicsIDwlPShsID09IHR5cGVTZWxlY3Rpb25JbmRleCklPik7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU2MWZlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlVW5pb25GcmFnbWVudCBmcmFnID0gKElYU0RTaW1wbGVVbmlvbkZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1JWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdzW2ldLmdldElEKCkpOwotJT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwlCi19Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJhbmdlV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU2MTEwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZnJhZyA9IChJWFNEU2ltcGxlVW5pb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGNoYW5nZVVuaW9uTWVtYmVyVHlwZShzZWxlY3QpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVDb250YWluZXJJRCA9ICc8JT1GcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCU+JzsKLSAgICAgIHRhYmxlQ29udGFpbmVySUQgKz0gc2VsZWN0Lm9wdGlvbnMoaSkudmFsdWU7Ci0gICAgICBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2VsZWN0Lm9wdGlvbnMoaSkuc2VsZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzaG93KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgaWYgKHNob3cpCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIG5vd3JhcD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTklPTl9UWVBFIiklPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjEwMCUiIG5vd3JhcD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTklPTl9NRU1CRVJTIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uW10gbWVtYmVyVHlwZXMgPSBmcmFnLmdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpOwotICBJWFNERnJhZ21lbnRbXSBtZW1iZXJGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVtYmVyRnJhZ3MubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIGludCB0eXBlU2VsZWN0aW9uSW5kZXggPSAwOwotICAgIFN0cmluZ1tdIG5ld01lbWJlckZyYWdJRHMgPSBuZXcgU3RyaW5nW21lbWJlclR5cGVzLmxlbmd0aF07Ci0gICAgSVhTREZyYWdtZW50W10gbmV3TWVtYmVyRnJhZ3MgPSBuZXcgSVhTREZyYWdtZW50W21lbWJlclR5cGVzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGorKykgewotICAgICAgaWYgKGkgPCBtZW1iZXJGcmFncy5sZW5ndGggJiYgbWVtYmVyRnJhZ3NbaV0uZ2V0WFNEVHlwZURlZmluaXRpb24oKS5nZXRRTmFtZSgpLmVxdWFscyhtZW1iZXJUeXBlc1tqXS5nZXRRTmFtZSgpKSkgewotICAgICAgICBuZXdNZW1iZXJGcmFnSURzW2pdID0gbWVtYmVyRnJhZ3NbaV0uZ2V0SUQoKTsKLSAgICAgICAgbmV3TWVtYmVyRnJhZ3Nbal0gPSBtZW1iZXJGcmFnc1tpXTsKLSAgICAgICAgdHlwZVNlbGVjdGlvbkluZGV4ID0gajsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBuZXdNZW1iZXJGcmFnSURzW2pdID0gZnJhZy5jcmVhdGVVbmlvbkluc3RhbmNlKGopOwotICAgICAgICBuZXdNZW1iZXJGcmFnc1tqXSA9IGZyYWcuZ2V0RnJhZ21lbnQobmV3TWVtYmVyRnJhZ0lEc1tqXSk7Ci0gICAgICB9Ci0gICAgfQotICAgICU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxzZWxlY3QgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgb25DaGFuZ2U9ImphdmFzY3JpcHQ6Y2hhbmdlVW5pb25NZW1iZXJUeXBlKHRoaXMpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfVU5JT05fVFlQRSIpJT4iPgotICAgICAgICAgIDwlCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKGsgPT0gdHlwZVNlbGVjdGlvbkluZGV4KSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPW5ld01lbWJlckZyYWdJRHNba10lPiIgc2VsZWN0ZWQ+PCU9bWVtYmVyVHlwZXNba10uZ2V0UU5hbWUoKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9bmV3TWVtYmVyRnJhZ0lEc1trXSU+Ij48JT1tZW1iZXJUeXBlc1trXS5nZXRRTmFtZSgpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGwrKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKG5ld01lbWJlckZyYWdJRHNbbF0pOwotICAgICAgICAgIFN0cmluZyBtZW1iZXJUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQobmV3TWVtYmVyRnJhZ3NbbF0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPHNwYW4gaWQ9IjwlPW1lbWJlclRhYmxlQ29udGFpbmVySUQlPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPW5ld01lbWJlckZyYWdzW2xdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3NwYW4+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgIHNob3dUYWJsZSgnPCU9bWVtYmVyVGFibGVDb250YWluZXJJRCU+JywgPCU9KGwgPT0gdHlwZVNlbGVjdGlvbkluZGV4KSU+KTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25fZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYwNTU5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmYzQwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL29wZW5fd3NkbF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmZhODE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU1YmFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvd3NkbF9iaW5kaW5nX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX2JpbmRpbmdfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzg2YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX2JpbmRpbmdfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfb3BlcmF0aW9uX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX29wZXJhdGlvbl9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxMWJhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfb3BlcmF0aW9uX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkMDhiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvZnJhZ21lbnR0YWJsZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvZnJhZ21lbnR0YWJsZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzBjZGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL2ZyYWdtZW50dGFibGVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvY2FsZW5kYXJicm93c2VyLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLQotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciB4c2RJbmZvRGlhbG9nOwotICB2YXIgeHNkSW5mb0RpYWxvZ0Nsb3NlZCA9IHRydWU7Ci0gIHZhciByb3dDaGVja2JveE5hbWUgPSAicm93Q2hlY2tib3hOYW1lIjsKLSAgdmFyIHVuYm91bmRlZCA9IDwlPUZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCU+OwotCi0gIGZ1bmN0aW9uIGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAobWF4T2NjdXJzICE9IHVuYm91bmRlZCAmJiAodGFibGUucm93cy5sZW5ndGggLSBudW1iZXJPZkhlYWRlclJvd3MpID49IG1heE9jY3VycykgewotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX01BWF9PQ0NVUlNfVklPTEFUSU9OIikpJT4iKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklELCBtaW5PY2N1cnMpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgcm93c0xlbmd0aCA9IHRhYmxlLnJvd3MubGVuZ3RoIC0gbnVtYmVyT2ZIZWFkZXJSb3dzOwotICAgIHZhciBjaGVja2VkUm93cyA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IG51bWJlck9mSGVhZGVyUm93czsgaSA8IHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZVJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZVJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNoZWNrZWRSb3dzKys7Ci0gICAgfQotICAgIGlmIChjaGVja2VkUm93cyA9PSAwKQotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSklPiIpOwotICAgIGVsc2UgaWYgKChyb3dzTGVuZ3RoIC0gY2hlY2tlZFJvd3MpIDwgbWluT2NjdXJzKQotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX01JTl9PQ0NVUlNfVklPTEFUSU9OIikpJT4iKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJRCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzQXR0cmlidXRlKHRhYmxlQ29udGFpbmVySUQsIG1pbk9jY3VycykgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciByb3dzTGVuZ3RoID0gdGFibGUucm93cy5sZW5ndGggLSBudW1iZXJPZkhlYWRlclJvd3M7Ci0gICAgdmFyIGNoZWNrZWRSb3dzID0gMDsKLSAgICBmb3IgKHZhciBpID0gbnVtYmVyT2ZIZWFkZXJSb3dzOyBpIDwgdGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIHRhYmxlUm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlUm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2hlY2tlZFJvd3MrKzsKLSAgICB9Ci0gICAgaWYgKGNoZWNrZWRSb3dzID09IDApCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpKSU+Iik7Ci0gICAgZWxzZSBpZiAoKHJvd3NMZW5ndGggLSBjaGVja2VkUm93cykgPCBtaW5PY2N1cnMpCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTUlOX09DQ1VSU19WSU9MQVRJT04iKSklPiIpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVNlbGVjdGVkUm93c0F0dHJpYnV0ZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgfQotICAKLSAgCi0gIGZ1bmN0aW9uIGNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWREYXRlVGltZVJvd3MoY2FsZW5kYXJUeXBlLHRhYmxlQ29udGFpbmVySUQsbWluT2NjdXJzKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIG5ld0NhbGVuZGFyVGFyZ2V0Um93ID0gY2FsZW5kYXJUYXJnZXRSb3c7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGktbnVtYmVyT2ZIZWFkZXJSb3dzID09IGNhbGVuZGFyVGFyZ2V0Um93KQotICAgICAgICAgIG5ld0NhbGVuZGFyVGFyZ2V0Um93ID0gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdDYWxlbmRhclRhcmdldFJvdy0tOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3Q2FsZW5kYXJUYXJnZXRSb3cgPT0gLTEpCi0gICAgICBjbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICAgIGNhbGVuZGFyVGFyZ2V0Um93ID0gbmV3Q2FsZW5kYXJUYXJnZXRSb3c7Ci0gICAgICAKLSAgICBjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklELG1pbk9jY3Vycyk7Ci08JQotICAgLy8gRml4IHRoZSBicm93c2UuLi4gbGlua3MuCi0lPgotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciBkYXRlVGltZVRleHRGaWVsZCA9IGNvbHVtbnMuaXRlbSgxKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgc2V0RGF0ZVRpbWVCcm93c2VMaW5rSHJlZihjb2x1bW5zLml0ZW0oMikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKS5pdGVtKDApLGNhbGVuZGFyVHlwZSxkYXRlVGltZVRleHRGaWVsZC5uYW1lLGktbnVtYmVyT2ZIZWFkZXJSb3dzKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMsIGZyYWdtZW50SUQsIG5hbWVBbmNob3JJRCkgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIG5ld0NvbHVtbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgbmV3Q29sdW1uLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEJT4iLCBmcmFnbWVudElEKSk7Ci0gICAgbmV3Q29sdW1uLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEJT4iLCBuYW1lQW5jaG9ySUQpKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQobmV3Q29sdW1uKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIik7Ci0gICAgZm9ybVswXS5hY3Rpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvQ3JlYXRlSW5zdGFuY2VBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIGZvcm1bMF0uc3VibWl0KCk7Ci0gIH0KLQotICBmdW5jdGlvbiBvcGVuWFNESW5mb0RpYWxvZyhsaW5rKSB7Ci0gICAgeHNkSW5mb0RpYWxvZyA9IHdpbmRvdy5vcGVuKGxpbmssICJYU0RJbmZvcm1hdGlvbkRpYWxvZyIsICJoZWlnaHQ9NTAwLHdpZHRoPTUwMCxzY3JvbGxiYXJzPW5vLHJlc2l6YWJsZT15ZXMiKTsKLSAgICBpZiAoeHNkSW5mb0RpYWxvZy5mb2N1cykKLSAgICAgIHhzZEluZm9EaWFsb2cuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb3NlWFNESW5mb0RpYWxvZygpCi0gIHsKLSAgICBpZiAoIXhzZEluZm9EaWFsb2dDbG9zZWQpCi0gICAgICB4c2RJbmZvRGlhbG9nLmNsb3NlKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzeW5jaHJvbml6ZUZyYWdtZW50Vmlld3Modmlld0lEKSB7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpOwotICAgIGlmICh2aWV3SUQgPT0gIjwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFJT4iKQotICAgICAgZm9ybVswXS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX0lEJT4iLCI8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSU+IikpOwotICAgIGVsc2UKLSAgICAgIGZvcm1bMF0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19JRCU+IiwiPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0lPiIpKTsKLSAgICBmb3JtWzBdLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIGZvcm1bMF0uc3VibWl0KCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyhjYWxlbmRhclR5cGUsdGFibGVDb250YWluZXJJRCxpZCxuYW1lLHZhbHVlLG1heE9jY3VycykgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBpbnB1dC50eXBlID0gInRleHQiOwotICAgIGlucHV0LmlkID0gaWQ7Ci0gICAgaW5wdXQubmFtZSA9IG5hbWU7Ci0gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkKLSAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7Ci0gICAgaW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGlucHV0KTsKLSAgICAKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGNyZWF0ZURhdGVUaW1lQnJvd3NlTGluayhjYWxlbmRhclR5cGUsbmFtZSx0YWJsZS5yb3dzLmxlbmd0aC0xKSk7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI5MCUiOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0gIAotICAKLSAgZnVuY3Rpb24gY3JlYXRlRGF0ZVRpbWVCcm93c2VMaW5rKGNhbGVuZGFyVHlwZSxuYW1lLHBvc2l0aW9uKQotICB7Ci0gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0RGF0ZVRpbWVCcm93c2VMaW5rSHJlZihsaW5rLGNhbGVuZGFyVHlwZSxuYW1lLHBvc2l0aW9uKTsKLSAgICBsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIikpJT4iKSk7Ci0gICAgcmV0dXJuIGxpbms7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERhdGVUaW1lQnJvd3NlTGlua0hyZWYobGluayxjYWxlbmRhclR5cGUsbmFtZSxwb3NpdGlvbikKLSAgewotICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0Om9wZW5DYWxlbmRhckJyb3dzZXIoIitjYWxlbmRhclR5cGUrIiwnY29udGVudGJvcmRlcicsJyIrbmFtZSsiJywiK3Bvc2l0aW9uKyIpIjsKLSAgICByZXR1cm4gbGluazsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGMzODQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRnJhbWVzZXRTaXplcyhmcmFtZXNldFNpemVzRm9ybSkKLSAgewotICAgIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKTsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+LnZhbHVlID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuY29sczsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPi52YWx1ZSA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5yb3dzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjUwOWMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgd3NkbE5hdmlnYXRvckNvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2RsTmF2aWdhdG9yVG9vbGJhciA9IHdzZGxOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9UT09MQkFSJT4iXTsKLSAgdmFyIHdzZGxOYXZpZ2F0b3JDb250ZW50ID0gd3NkbE5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRFTlQlPiJdOwotICB2YXIgd3NkbEFjdGlvbnNDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyID0gd3NkbEFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzZGxQcm9wZXJ0aWVzVG9vbGJhciA9IHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgd3NkbFByb3BlcnRpZXNDb250ZW50ID0gd3NkbFByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEVOVCU+Il07Ci0gIHZhciB3c2RsU3RhdHVzQ29udGFpbmVyID0gd3NkbEFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIlPiJdOwotICB2YXIgd3NkbFN0YXR1c1Rvb2xiYXIgPSB3c2RsU3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9V1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfVE9PTEJBUiU+Il07Ci0gIHZhciB3c2RsU3RhdHVzQ29udGVudCA9IHdzZGxTdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05URU5UJT4iXTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zb2FwX2VudmVsb3BlX3htbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZWVjOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+PCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQveG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuKiIgJT48anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz48JQotaW50IHNvYXBFbnZlbG9wZVR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFKSk7Ci1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KSB3c2RsUGVyc3BlY3RpdmUuZ2V0T3BlcmF0aW9uTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci1JU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2U7Ci1zd2l0Y2ggKHNvYXBFbnZlbG9wZVR5cGUpCi17Ci0gIGNhc2UgV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVRVUVTVDoKLSAgICBzb2FwTWVzc2FnZSA9IChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVFVRVNUKTsKLSAgICBicmVhazsKLSAgY2FzZSBXU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVNQT05TRToKLSAgZGVmYXVsdDoKLSAgICBzb2FwTWVzc2FnZSA9IChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVNQT05TRSk7Ci0gICAgYnJlYWs7Ci19Ci1TdHJpbmcgbWVzc2FnZXMgPSBzb2FwTWVzc2FnZS50b1hNTCgpOwotJT48JT1tZXNzYWdlcyU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZDkzYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfYWN0aW9uc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfc3RhdHVzX2NvbnRhaW5lci5qc3AiKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyMzcwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9UT09MQkFSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05URU5UJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDVhMjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAgICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3RyZWV2aWV3LmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotPC9oZWFkPgotPCUKLSAgICBTdHJpbmcgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgaW50IGZvY3VzZWROb2RlSWQgPSBub2RlTWFuYWdlci5nZXRGb2N1c2VkTm9kZUlkKCk7Ci0gICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgc2VsZWN0ZWRBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSAgICAgICAgaWYgKGZvY3VzZWROb2RlSWQgPT0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKQotICAgICAgICAgICAgZm9jdXNlZEFuY2hvck5hbWUgPSBzZWxlY3RlZEFuY2hvck5hbWU7Ci0gICAgfQotJT4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25Mb2FkPSJzZWxmLmxvY2F0aW9uLmhhc2g9JyM8JT1mb2N1c2VkQW5jaG9yTmFtZSU+JztzZXRTZWxlY3RlZEFuY2hvck5hbWUoJzwlPXNlbGVjdGVkQW5jaG9yTmFtZSU+JykiIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gICAgPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotICAgICAgICA8JT1ub2RlTWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotICAgIDwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzNhMDRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX25hdmlnYXRvcl90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoIndzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChXU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9uYXZpZ2F0b3IuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAod3NkbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICBlbHNlCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTkFWSUdBVE9SIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdFJlZnJlc2ggPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9SRUZSRVNIIik7Ci0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdFJlZnJlc2glPiIgdGl0bGU9IjwlPWFsdFJlZnJlc2glPiI+PC9hPjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyMTUxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgY29scz0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8JQotICBpZiAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuaXNSVEwoKSkKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfYWN0aW9uc19jb250YWluZXIuanNwIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX25hdmlnYXRvcl9jb250YWluZXIuanNwIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX25hdmlnYXRvcl9jb250YWluZXIuanNwIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfYWN0aW9uc19jb250YWluZXIuanNwIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gICU+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTY5MjAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfUFJPUEVSVElFU19UT09MQkFSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfcHJvcGVydGllc190b29sYmFyLmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfUFJPUEVSVElFU19DT05URU5UJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJlNDgyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgICAgIGlmIChzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wgIT0gbnVsbCAmJiBzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKSB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgbG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZFRvb2wuZ2V0Rm9ybUxpbmsoKSkpJT4iOwotICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0FDVElPTl9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTk9ERV9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWVjZTY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ3c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoV1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2FjdGlvbnMuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAod3NkbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICB7Ci0gICAgIGlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQUNUSU9OUyIpJT48L3RkPgotPCUKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyOwotICAgICAgICBpZiAoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICAgICBmb3IoaW50IGk9MDsgaTx0b29sTWFuYWdlci5nZXROdW1iZXJPZlRvb2xzKCk7IGkrKykgewotICAgICAgICAgICAgVG9vbCB0b29sID0gKFRvb2wpdG9vbE1hbmFnZXIuZ2V0VG9vbChpKTsKLSAgICAgICAgICAgICU+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjwlPXRvb2wucmVuZGVyVG9vbChyZXNwb25zZSxjb250cm9sbGVyKSU+PC90ZD4KLSAgICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICB9Ci0lPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzI3MTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Jlc3VsdF9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBpbnQgdmlld0lEID0gd3NkbFBlcnNwZWN0aXZlLmdldFN0YXR1c0NvbnRlbnRUeXBlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc3dpdGNoUmVhZE9ubHlGcmFnbWVudHNWaWV3KCkgewotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvU3dpdGNoUmVhZE9ubHlGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgYWxpZ249InJpZ2h0IiBjbGFzcz0ibGFiZWxzIj4KLTwlCi0gICAgICAgIGlmICh2aWV3SUQgPT0gd3NkbFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9TT1VSQ0UpCi0gICAgICAgIHsgICAgIAotJT4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN3aXRjaFJlYWRPbmx5RnJhZ21lbnRzVmlldygpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fRk9STV9WSUVXIiklPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19GT1JNIiklPjwvYT4KLTwlCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0lPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c3dpdGNoUmVhZE9ubHlGcmFnbWVudHNWaWV3KCkiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NXSVRDSF9UT19TT1VSQ0VfVklFVyIpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfU09VUkNFIiklPjwvYT4KLTwlCi0gICAgICAgIH0KLSU+ICAgCi0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotICBpZiAodmlld0lEID09IHdzZGxQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfU09VUkNFKQotICB7Ci0lPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c1NvYXBWaWV3LmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIH0KLSAgZWxzZQotICB7Ci0lPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c0Zvcm1WaWV3LmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwODg0MjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRTcmMgPSAid3NkbF9zdGF0dXNfY29udGVudC5qc3AiOwotICAgc3dpdGNoICh3c2RsUGVyc3BlY3RpdmUuZ2V0U3RhdHVzQ29udGVudFR5cGUoKSkKLSAgIHsKLSAgICAgY2FzZSBXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX0ZPUk06Ci0gICAgICAgc3RhdHVzQ29udGVudFNyYyA9ICJ3c2RsX3Jlc3VsdF9jb250ZW50LmpzcCI7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9TT1VSQ0U6Ci0gICAgIAlzdGF0dXNDb250ZW50U3JjID0gIndzZGxfcmVzdWx0X2NvbnRlbnQuanNwIjsKLSAgICAgCWJyZWFrOwotICAgfQotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX3N0YXR1c190b29sYmFyLmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKHN0YXR1c0NvbnRlbnRTcmMpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNzkxZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTdGF0dXNDb250ZW50VHlwZShXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfREVGQVVMVCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPHByZT4KLTwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmdldE1lc3NhZ2VzRnJvbUxpc3QoKSklPgotICAgICAgICA8L3ByZT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmUwOTdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ3c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoV1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL1Byb2Nlc3NXU0RMRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3RhdHVzLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzZGxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAod3NkbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05URU5UJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2Jyb3dzZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2Jyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWI2Y2RkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF9icm93c2VyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFN0cmluZyB3c2RsVHlwZVN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XU0RMX1RZUEUpOwotICAgaW50IHdzZGxUeXBlID0gQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRTsKLSAgIHRyeQotICAgewotICAgICB3c2RsVHlwZSA9IEludGVnZXIucGFyc2VJbnQod3NkbFR5cGVTdHJpbmcpOwotICAgfQotICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgewotICAgfQotICAgY29udHJvbGxlci5zZXRXU0RMVHlwZSh3c2RsVHlwZSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT4KLTwlCi0gICBTdHJpbmcgd3NkbFNvdXJjZTsKLSAgIGlmICh3c2RsVHlwZSA9PSBBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFKQotICAgICB3c2RsU291cmNlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJXU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0VTIik7Ci0gICBlbHNlCi0gICAgIHdzZGxTb3VyY2UgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIldTRExfVFlQRV9TRVJWSUNFUyIpOwotICAgICAKLSAgIFN0cmluZ0J1ZmZlciBzZXNzaW9uSWRQYXJhbSA9IG5ldyBTdHJpbmdCdWZmZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBzZXNzaW9uSWRQYXJhbS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgIAotICAgU3RyaW5nQnVmZmVyIHRvb2xiYXJMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbF90b29sYmFyLmpzcD8iKTsKLSAgIHRvb2xiYXJMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSU+Ci0gICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJUSVRMRV9XU0RMX0JST1dTRVIiLHdzZGxTb3VyY2UpJT4KLSAgPC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPUZyYW1lTmFtZXMuV1NETF9UT09MQkFSJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1dTRExfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRvb2xiYXJMaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GcmFtZU5hbWVzLldTRExfQ09OVEVOVCU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9XU0RMX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLCJ3c2RsX2NvbnRlbnQuanNwIikpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmE5MzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA1MjQgICAxNDI0OTkgamVmZmxpdUBjYS5pYm0uY29tIC0gSmVmZnJleSBMaXUKLSAqIDIwMDcwMTA5ICAgMTY5NTUzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV2ViU2VydmljZUZpbmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldlYlNlcnZpY2VDYXRlZ29yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgaW50IHdzZGxUeXBlID0gY29udHJvbGxlci5nZXRXU0RMVHlwZSgpOwotICAgCi0gICBWZWN0b3Igd3NJbmZvQ2FjaGUgPSBuZXcgVmVjdG9yKCk7Ci0gICBpbnQgd29ya3NwYWNlU3RhcnQgPSAtMTsKLSAgIGludCB3b3Jrc3BhY2VFbmQgICA9IC0xOwotICAgCi0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1dTRExfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIAotICAKLSAgZnVuY3Rpb24gZmlsbENhdGVnb3JpZXMoKQotICB7Ci0gICAgdmFyIHkgPSAwOwotICAgIHZhciB4ID0gMDsKLSAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfQWxsIiklPiIsIjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX0FsbCIpJT4iKTsKLSAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU09VUkNFX0ZBVk9SSVRFUyIpJT4iLCI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfRkFWT1JJVEVTIiklPiIpOwotPCUKLSAgIHsKLSAgICAgV2ViU2VydmljZUNhdGVnb3J5W10gY2F0ZWdvcmllcyA9IFdlYlNlcnZpY2VGaW5kZXIuaW5zdGFuY2UoKS5nZXRXZWJTZXJ2aWNlQ2F0ZWdvcmllcygpOwotICAgICBmb3IgKGludCBpPTA7aTxjYXRlZ29yaWVzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBTdHJpbmcgbGFiZWwgPSBIVE1MVXRpbHMuSlNNYW5nbGUoY2F0ZWdvcmllc1tpXS5nZXRMYWJlbCgpKTsKLSAgICAgICBpZihjYXRlZ29yaWVzW2ldLmdldElkKCkuZXF1YWxzKCJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuY2F0ZWdvcnkud29ya3NwYWNlIikpewotJT4KLSAgICB2YXIgeSA9IHg7Ci08JSAgICAKLSAgICAgICB9ICAgIAotJT4gICAgCi0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9bGFiZWwlPiIsIjwlPWxhYmVsJT4iKTsKLTwlICAgICAgIAotICAgICB9Ci0gICB9IAotJT4KLSAgICBpZiAoZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4ub3B0aW9ucy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5DQVRFR09SWSU+Lm9wdGlvbnNbeV0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgZmlsbFdTRExGaWxlc0J5Q2F0ZWdvcnkoZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4ub3B0aW9uc1t5XS52YWx1ZSk7Ci0gICAgfQotICAKLSAgfSAgICAKLSAgCi0gIGZ1bmN0aW9uIGZpbGxXZWJQcm9qZWN0cygpCi0gIHsKLSAgICB2YXIgeCA9IDA7Ci08JQotICAgewotICAgICBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBpV29ya3NwYWNlUm9vdC5nZXRQcm9qZWN0cygpOwotICAgICBmb3IgKGludCBpPTA7aTxwcm9qZWN0cy5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgaWYgKCFwcm9qZWN0c1tpXS5pc09wZW4oKSkKLSAgICAgICAgIGNvbnRpbnVlOwotICAgICAgIFN0cmluZyBuYW1lID0gSFRNTFV0aWxzLkpTTWFuZ2xlKHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5QUk9KRUNUJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9bmFtZSU+IiwiPCU9bmFtZSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIGlmIChkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUFJPSkVDVCU+Lm9wdGlvbnMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUFJPSkVDVCU+Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgZmlsbFdTRExGaWxlcyhkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUFJPSkVDVCU+Lm9wdGlvbnNbMF0udmFsdWUpOwotICAgIH0KLSAgfQotCi08JSEgcHJpdmF0ZSBWZWN0b3Igd3NkbFVSTHNfID0gbmV3IFZlY3RvcigpOyAlPgotCi0gICBmdW5jdGlvbiBmaWxsV1NETEZpbGVzQnlDYXRlZ29yeSh3ZWJTZXJ2aWNlRmluZGVyTGFiZWwpCi0gICB7Ci0gICAgdmFyIGN1cnJlbnROdW1iZXJPZk9wdGlvbnMgPSBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnMubGVuZ3RoOwotICAgIGZvciAodmFyIGk9MDtpPGN1cnJlbnROdW1iZXJPZk9wdGlvbnM7aSsrKQotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zWzBdID0gbnVsbDsKLSAgICBpZiAod2ViU2VydmljZUZpbmRlckxhYmVsID09ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfQWxsIikpJT4iKXsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9qZWN0cyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IAotICAgICAgZmlsbEFsbFdTRExGaWxlcygpOwotICAgIH0KLSAgICBpZiAod2ViU2VydmljZUZpbmRlckxhYmVsID09ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU09VUkNFX0ZBVk9SSVRFUyIpKSU+Iil7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvamVjdHMiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOyAKLSAgICAgIGZpbGxGYXZvcml0ZVdTRExGaWxlcygpOwotICAgIH0KLSAgICAKLTwlCi0gICB7Ci0gICAgICAgICAKLSAgICAgV2ViU2VydmljZUZpbmRlciBmaW5kZXIgPSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCk7Ci0gICAgIFdlYlNlcnZpY2VDYXRlZ29yeVtdIGNhdGVnb3JpZXMgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNhdGVnb3JpZXMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8Y2F0ZWdvcmllcy5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5ID0gY2F0ZWdvcmllc1tpXTsKLSU+Ci0gICAgaWYgKHdlYlNlcnZpY2VGaW5kZXJMYWJlbCA9PSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNhdGVnb3J5LmdldExhYmVsKCkpJT4iKQotICAgIHsKLSAgICB2YXIgeCA9IDA7Ci0gICAgICAgIAotPCUKLSAgICAgICBJdGVyYXRvciBpdCA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnkoY2F0ZWdvcnksbnVsbCk7Ci0gICAgICAgaWYoY2F0ZWdvcnkuZ2V0SWQoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5jYXRlZ29yeS53b3Jrc3BhY2UiKSl7Ci0KLSAgICAJICAgd29ya3NwYWNlU3RhcnQgPSB3c0luZm9DYWNoZS5zaXplKCk7Ci0gICAgCSAgIHdvcmtzcGFjZUVuZCAgID0gd29ya3NwYWNlU3RhcnQ7Ci0gICAgCSAgIAotICAgIAkgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgIAkgICB3c0luZm9DYWNoZS5hZGQoaXQubmV4dCgpKTsKLSAgICAgICAgCSAgIHdvcmtzcGFjZUVuZCsrOwotICAgIAkgICB9Ci0lPgotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2plY3RzIikuc3R5bGUuZGlzcGxheSA9ICIiOyAKLSAgICAgIGZpbGxXZWJQcm9qZWN0cygpOwotPCUKLSAgICAgICB9Ci0gICAgICAgZWxzZXsKLSU+Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvamVjdHMiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgCi08JSAgCi0gICAgICAgICB3aGlsZShpdC5oYXNOZXh0KCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgIFdlYlNlcnZpY2VJbmZvIHdzaSA9IChXZWJTZXJ2aWNlSW5mbylpdC5uZXh0KCk7Ci0gICAgICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKHdzaS5nZXRXc2RsVVJMKCkpOwotJT4KLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9d3NkbCU+IiwgIjwlPXdzZGwlPiIpOyAKLTwlCi0gICAgICAgICAgIHdzSW5mb0NhY2hlLmFkZCh3c2kpOwotICAgICAgICAgfQotICAgICAgIH0KLSU+Ci0gICAgfQotPCUKLSAgICAgfQotICAgfQotJT4KLSAgfQotICAKLSAgZnVuY3Rpb24gZmlsbEFsbFdTRExGaWxlcygpCi0gIHsKLSAgICB2YXIgeCA9IDA7Ci0gICAgdmFyIGN1cnJlbnROdW1iZXJPZk9wdGlvbnMgPSBkb2N1bWVudC5mb3Jtc1swXS53ZWJQcm9qZWN0V1NETFVSTC5vcHRpb25zLmxlbmd0aDsKLSAgICBmb3IgKHZhciBpPTA7aTxjdXJyZW50TnVtYmVyT2ZPcHRpb25zO2krKykKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLndlYlByb2plY3RXU0RMVVJMLm9wdGlvbnNbMF0gPSBudWxsOwotPCUKLSAgICAgVHJlZVNldCB1cmxzID0gbmV3IFRyZWVTZXQoKTsKLSAgICAgSXRlcmF0b3Igd3NJdGVyYXRvciA9IHdzSW5mb0NhY2hlLml0ZXJhdG9yKCk7Ci0gICAgIHdoaWxlICh3c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgewotICAgICAgIFdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IChXZWJTZXJ2aWNlSW5mbyl3c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICBTdHJpbmcgd3NkbCA9IEhUTUxVdGlscy5KU01hbmdsZSh3c0luZm8uZ2V0V3NkbFVSTCgpKTsKLSAgICAgICB1cmxzLmFkZCh3c2RsKTsKLSAgICAgfQotICAgICAKLSAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgIE5vZGVNYW5hZ2VyIGZhdm9yaXRlc05vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVzTWFpbkVsZW1lbnQgPSBmYXZvcml0ZXNOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgIFRyZWVFbGVtZW50IGZhdm9yaXRlV1NETFNlcnZpY2VzRWxlbWVudCA9IChUcmVlRWxlbWVudCkoZmF2b3JpdGVzTWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSkubmV4dEVsZW1lbnQoKSk7Ci0gICAgIEVudW1lcmF0aW9uIGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50cyA9IGZhdm9yaXRlV1NETFNlcnZpY2VzRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpOwotICAgICB3aGlsZSAoZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnRzLmhhc01vcmVFbGVtZW50cygpKQotICAgICB7Ci0gICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudClmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICBTdHJpbmcgd3NkbCA9IEhUTUxVdGlscy5KU01hbmdsZSgoZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRMb2NhdGlvbigpKTsKLSAgICAgICB1cmxzLmFkZCh3c2RsKTsKLSAgICAgfQotICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHVybHMuaXRlcmF0b3IoKTsKLSAgICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKLSAgICAgICBTdHJpbmcgd3NkbCA9IEhUTUxVdGlscy5KU01hbmdsZShpdGVyYXRvci5uZXh0KCkudG9TdHJpbmcoKSk7Ci0lPgotICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPXdzZGwlPiIsICI8JT13c2RsJT4iKTsgCi08JQotCi0gICAgIH0KLSAgIAotJT4gICAgICAKLSAgfQotICAKLSAgZnVuY3Rpb24gZmlsbFdTRExGaWxlcyhzZWxlY3RlZFdlYlByb2plY3ROYW1lKQotICB7Ci0gICAgdmFyIGN1cnJlbnROdW1iZXJPZk9wdGlvbnMgPSBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnMubGVuZ3RoOwotICAgIGZvciAodmFyIGk9MDtpPGN1cnJlbnROdW1iZXJPZk9wdGlvbnM7aSsrKQotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zWzBdID0gbnVsbDsKLTwlCi0gICB7Ci0KLSAgICAgSVdvcmtzcGFjZVJvb3QgaVdvcmtzcGFjZVJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgICBJUHJvamVjdFtdIHByb2plY3RzID0gaVdvcmtzcGFjZVJvb3QuZ2V0UHJvamVjdHMoKTsKLSAgICAgICAKLSAgICAgZm9yIChpbnQgaT0wO2k8cHJvamVjdHMubGVuZ3RoO2krKykKLSAgICAgewotICAgICAgIGlmICghcHJvamVjdHNbaV0uaXNPcGVuKCkpCi0gICAgICAgICBjb250aW51ZTsKLSAgICAgICB7Ci0lPgotICAgIGlmIChzZWxlY3RlZFdlYlByb2plY3ROYW1lID09ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHJvamVjdHNbaV0uZ2V0TmFtZSgpKSU+IikKLSAgICB7Ci0gICAgICB2YXIgeD0wOwotPCUKLSAgICAgICAgIFN0cmluZyBwbGF0Zm9ybVByb3RvY29sID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7Ci0gICAgICAgICBTdHJpbmcgaHR0cFByb3RvY29sID0gImh0dHA6Ly8iOwotICAgICAgICAgU3RyaW5nIGh0dHBzUHJvdG9jb2wgPSAiaHR0cHM6Ly8iOwotICAgICAgICAgd3NkbFVSTHNfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0KLQkJIEl0ZXJhdG9yIHdzID0gd3NJbmZvQ2FjaGUuc3ViTGlzdCh3b3Jrc3BhY2VTdGFydCwgd29ya3NwYWNlRW5kKS5pdGVyYXRvcigpOwotCi0gICAgICAgICB3aGlsZSAod3MuaGFzTmV4dCgpKQotICAgICAgICAgewotICAgICAgICAgICAgV2ViU2VydmljZUluZm8gd3NJbmZvID0gKFdlYlNlcnZpY2VJbmZvKXdzLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB1cmwgPSB3c0luZm8uZ2V0V3NkbFVSTCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgLy8gZmlsdGVyIHdzZGwgVVJMcyB3aXRoIHNhbWUgcHJvamVjdCBuYW1lIGFzIHNlbGVjdGVkIHByb2plY3QKLSAgICAgICAgICAvLyBvbmx5IGxvb2sgYXQgd29ya3NwYWNlIFVSTHMgcmV0dXJuZWQgZnJvbSB0aGUgd2ViIHNlcnZpY2UgZmluZGVyCi0gICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKHBsYXRmb3JtUHJvdG9jb2wpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAvL3N0cmlwIG9mZiBwbGF0Zm9ybVByb3RvY29sIHRvIGxvb2sgYXQgdGhlIHdvcmtzcGFjZSBwYXRoCi0gICAgICAgICAgICAgUGF0aCB3c2RsUGF0aCA9IG5ldyBQYXRoKHVybC5zdWJzdHJpbmcocGxhdGZvcm1Qcm90b2NvbC5sZW5ndGgoKSsxKSk7Ci0gICAgICAgICAgICAgU3RyaW5nIHBhdGhQcm9qTmFtZSA9IHdzZGxQYXRoLnNlZ21lbnQoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgIGlmIChwYXRoUHJvak5hbWUuZXF1YWxzKHByb2plY3RzW2ldLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgd3NkbFVSTHNfLmFkZCh1cmwpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gYWxzbyBhZGQgYW55IGh0dHAgb3IgaHR0cHMgVVJMcyByZXR1cm5lZAotICAgICAgICAgIGVsc2UgaWYgKHVybC5zdGFydHNXaXRoKGh0dHBQcm90b2NvbCkgfHwgdXJsLnN0YXJ0c1dpdGgoaHR0cHNQcm90b2NvbCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgICAgd3NkbFVSTHNfLmFkZCh1cmwpOwotICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgICAgIGlmICh3c2RsVHlwZSA9PSBBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFKQotICAgICAgICAgewotICAgICAgICAgCi0gICAgICAgICB9Ci0KLSAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c2RsVVJMc18uaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgIHsKLSAgICAgICAgICAgICBTdHJpbmcgd3NkbCA9IEhUTUxVdGlscy5KU01hbmdsZShpdC5uZXh0KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT13c2RsJT4iLCAiPCU9d3NkbCU+Iik7IAotICAgICAgICAgICAgIDwlCi0gICAgICAgICB9Ci0lPgotICAgIH0KLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0lPgotICB9Ci0gIAotICBmdW5jdGlvbiBmaWxsRmF2b3JpdGVXU0RMRmlsZXMoKQotICB7Ci0gICAgdmFyIGN1cnJlbnROdW1iZXJPZk9wdGlvbnMgPSBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnMubGVuZ3RoOwotICAgIGZvciAodmFyIGk9MDtpPGN1cnJlbnROdW1iZXJPZk9wdGlvbnM7aSsrKQotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zWzBdID0gbnVsbDsKLSAgICB2YXIgeCA9IDA7Ci08JQotICAgRW51bWVyYXRpb24gZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnRzMiA9IGZhdm9yaXRlV1NETFNlcnZpY2VzRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpOwotICAgd2hpbGUgKGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50czIuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICB7Ci0gICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnRzMi5uZXh0RWxlbWVudCgpOwotICAgICBTdHJpbmcgdXJsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKChmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudC5nZXRTZXJ2aWNlKCkuZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldExvY2F0aW9uKCkpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPXVybCU+IiwiPCU9dXJsJT4iKTsKLTwlICAgICAKLSAgIH0KLSU+ICAKLSAgCi0gIH0KLSAgCi0gIAotICAKLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgZmlsbENhdGVnb3JpZXMoKTsKLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7ICAgICAgCi0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgIDxmb3JtIHN0eWxlPSJtYXJnaW4tdG9wOjAiPgotCi0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+IDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NPVVJDRSIpJT4gPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8ZGl2IGlkPSJ3b3JrYmVuY2giID4KLSAgICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9DQVRFR09SWSIpJT48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIG5vd3JhcD4KLSAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9IjwlPUFjdGlvbklucHV0cy5DQVRFR09SWSU+IiBvbkNoYW5nZT0iZmlsbFdTRExGaWxlc0J5Q2F0ZWdvcnkodGhpcy52YWx1ZSkiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0iZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPiAgICAKLSAgICAgICAgICA8ZGl2IGlkPSJwcm9qZWN0cyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPiAgICAgICAgICAKLSAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9XRUJQUk9KRUNUUyIpJT48L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0icHJvamVjdCIgb25DaGFuZ2U9ImZpbGxXU0RMRmlsZXModGhpcy52YWx1ZSkiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVGUkVTSCIpJT4iIG9uQ2xpY2s9ImRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIG5vd3JhcCBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fR08iKSU+IiBvbkNsaWNrPSJ0b3Aub3BlbmVyLnRhcmdldFdTRExVUkxFbGVtZW50LnZhbHVlPXRoaXMuZm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+LnZhbHVlO3RvcC5jbG9zZSgpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgbm93cmFwIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9DQU5DRUwiKSU+IiBvbkNsaWNrPSJ0b3AuY2xvc2UoKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAKLSAgICAgIDwvZm9ybT4KLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+ICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2M2FhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGxfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1dTRExfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25VbmxvYWQ9InRvcC5vcGVuZXIud3NkbFdpbmRvd0Nsb3NlZD10cnVlIiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGwuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfQlJPV1NFUiIpJT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHRvcC5vcGVuZXIud3NkbFdpbmRvd0Nsb3NlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZXhwbG9yZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2V4cGxvcmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUwMGMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZXhwbG9yZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiJT4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIGluaXRXaW5kb3dOYW1lKG5hbWUpCi0gICAgewotICAgICAgd2luZG93Lm5hbWUgPSBuYW1lOwotICAgIH0KLSAgPC9zY3JpcHQ+Ci0gIDwlCi0gIFN0cmluZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldElkKCk7Ci0gICU+Ci0gIDxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiI+Ci0gICAgPCUhCi0gICAgcHJpdmF0ZSB2b2lkIHJlc2V0Q29udHJvbGxlcihTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbixTdHJpbmcgc2Vzc2lvbklkLEh0dHBTZXNzaW9uIHNlc3Npb24sSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsQ29udHJvbGxlciBjb250cm9sbGVyKXsKLQkgICAgLy8gQWRkIHRoZSBzZXNzaW9uIHRvIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBhbGxvd3MgdXMgdG8gcmVzdXJyZWN0IHRoZSBzZXNzaW9uIGV2ZW4gaWYgdGhlIGJyb3dzZXIgY2hvb3NlcyBub3QgdG8gcGFydGljaXBhdGUuCi0JICAgIGFwcGxpY2F0aW9uLnNldEF0dHJpYnV0ZShzZXNzaW9uSWQsc2Vzc2lvbik7Ci0gICAgCi0JICAgIC8vIFNldCBNYXggaW5hY3Rpdml0eSB0aW1lIG91dCB2YWx1ZSB0byAzMG1pbnMuCi0JICAgIHNlc3Npb24uc2V0TWF4SW5hY3RpdmVJbnRlcnZhbCgxODAwKTsKLQkKLQkgICAgLy8gTGF1bmNoT3B0aW9uTWFuYWdlciAoYmVsb3cpIGhhbmRsZXMgbW9zdCBvcHRpb25zLAotCSAgICAvLyBidXQgbmVlZCB0byBnZXQgc3RhdGUgYW5kIGluc3RhbGwgbG9jYXRpb25zIGVhcmxpZXIsCi0JICAgIC8vIHNwZWNpZmljYWxseSBiZWZvcmUgY29udHJvbGxlci5pbml0KCkuCi0JICAgIEVudW1lcmF0aW9uIHBhcmFtTmFtZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Ci0JICAgIHdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKQotCSAgICB7Ci0JICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpcGFyYW1OYW1lcy5uZXh0RWxlbWVudCgpOwotCSAgICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1OYW1lKTsKLQkgICAgICBpZiAocGFyYW1WYWx1ZXMgIT0gbnVsbCAmJiBwYXJhbVZhbHVlcy5sZW5ndGggPiAwKQotCSAgICAgIHsKLQkgICAgICAgIFN0cmluZyBkZWNvZGVkUGFyYW1OYW1lID0gVVJMVXRpbHMuZGVjb2RlKHBhcmFtTmFtZSk7Ci0JICAgICAgICBpZiAoZGVjb2RlZFBhcmFtTmFtZS5lcXVhbHMoTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTikpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGNvbnRyb2xsZXIuc2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKHBhcmFtVmFsdWVzWzBdKTsKLQkgICAgICAgIH0KLQkgICAgICAgIGVsc2UgaWYgKGRlY29kZWRQYXJhbU5hbWUuZXF1YWxzKExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04pKQotCSAgICAgICAgewotCSAgICAgICAgICBjb250cm9sbGVyLnNldFN0YXRlTG9jYXRpb24ocGFyYW1WYWx1ZXNbMF0pOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCQotCSAgICAvLyBjb250cm9sbGVyLmluaXQoKQotCSAgICBjb250cm9sbGVyLmluaXQoc2Vzc2lvbklkLGFwcGxpY2F0aW9uLHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSk7Ci0gICAgfQotICAgICU+Ci0gICAgPCUvL3Jlc2V0Q29udHJvbGxlcihhcHBsaWNhdGlvbixzZXNzaW9uSWQsc2Vzc2lvbixyZXF1ZXN0LGNvbnRyb2xsZXIpOyU+Ci0gIDwvanNwOnVzZUJlYW4+Ci0gIDwlCi0gIC8vIENoZWNrIGlmIHNlc3Npb24gQ29udHJvbGxlciBuZWVkcyB0byBiZSByZS1pbml0aWFsaXplZAotICBpZiAoY29udHJvbGxlci5nZXRTZXNzaW9uSWQoKT09bnVsbCl7Ci0JICByZXNldENvbnRyb2xsZXIoYXBwbGljYXRpb24sc2Vzc2lvbklkLHNlc3Npb24scmVxdWVzdCxjb250cm9sbGVyKTsKLSAgfQotIAotICAvLyBwcmVsb2FkIGZyb20gTGF1bmNoT3B0aW9uTWFuYWdlcgotICBTdHJpbmcga2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVVJMVXRpbHMuZW5jb2RlKFdTRXhwbG9yZXJDb250ZXh0LklEKSk7Ci0gIGlmIChrZXkgIT0gbnVsbCAmJiBrZXkubGVuZ3RoKCkgPiAwKQotICB7Ci0gICAgTGF1bmNoT3B0aW9uc01hbmFnZXIgbWFuYWdlciA9IExhdW5jaE9wdGlvbnNNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0gICAgbWFuYWdlci5tYW5hZ2Uoa2V5LCBzZXNzaW9uSWQsIGFwcGxpY2F0aW9uKTsKLSAgfQotICAgIAotICAlPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL2FjdGlvbmVuZ2luZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIlRJVExFX1dTRVhQTE9SRVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTwlCi0vLyByZXNldCBwZXJzcGVjdGl2ZSBjb250ZW50IHRvIGJsYW5rCi1jb250cm9sbGVyLmVuYWJsZVBlcnNwZWN0aXZlQ29udGVudEJsYW5rKHRydWUpOwotJT4KLTxmcmFtZXNldCByb3dzPSIwLDM1LCoiIGJvcmRlcj0wIG9ubG9hZD0iaW5pdFdpbmRvd05hbWUoJzwlPUZyYW1lTmFtZXMuV0lORE9XX05BTUVfV1NFWFBMT1JFUl9KU1AlPicpIj4KLSAgPGZyYW1lIG5hbWU9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfV09SS0FSRUEiKSU+IiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9UT09MQkFSJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgicGVyc3BlY3RpdmVfdG9vbGJhci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9DT05URU5UJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgicGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9DbGVhck5vZGVDb25maXJtSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyTm9kZUNvbmZpcm1KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWM2ODE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyTm9kZUNvbmZpcm1KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgMTU1NDM0ICAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEJhY2sgU2xhc2ggJ1wnIG5vdCBhcHBlYXJpbmcgaW4gIldTSUwgbm8gbG9uZ2VyIHJlc29sdmFibGUiIGVycm9yIG1lc3NhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5DbGVhcldTSUxBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0NPTkZJUk1fUkVNT1ZFX05PREUiLCBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Tm9kZU5hbWUoKSkpJT4iKSkgewotICAgICAgICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJXU0lMQWN0aW9uLmdldEFjdGlvbkxpbmsoY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldE5vZGVJZCgpKSkpJT4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB9Ci0gICAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiYjEzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5DbGVhcldTSUxBY3Rpb24iJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICAgQ2xlYXJXU0lMQWN0aW9uIGFjdGlvbiA9IG5ldyBDbGVhcldTSUxBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU1Yjk0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWRjZDhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFiODM3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLU9wZW5XU0lMQWN0aW9uIGFjdGlvbiA9IG5ldyBPcGVuV1NJTEFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1ib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLWlmICghaW5wdXRzVmFsaWQpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHdzaWxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0gIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gIGlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpIHsKLSAgICAgICAgd3NpbE5hdmlnYXRvckNvbnRlbnQubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgd3NpbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZGNiZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLk9wZW5XU0lMTGlua0FjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLU9wZW5XU0lMTGlua0FjdGlvbiBhY3Rpb24gPSBuZXcgT3BlbldTSUxMaW5rQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKCFpbnB1dHNWYWxpZCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgICB3c2lsTmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICB3c2lsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWVjYzc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgICBBY3Rpb24gYWN0aW9uID0gUmVmcmVzaEFjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0KLSAgICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICA8JQotICAgIGlmICghYWN0aW9uUmVzdWx0KSB7Ci0gICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBSZWZyZXNoV1NJTEFjdGlvbikgewotICAgICAgICAlPgotICAgICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL2FjdGlvbnMvQ2xlYXJOb2RlQ29uZmlybUpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICA8JQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAlPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWM1MmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gQ3JlYXRlIHRoZSBhY3Rpb24uCi0gICBSZXNpemVXU0lMRnJhbWVzQWN0aW9uIGFjdGlvbiA9IG5ldyBSZXNpemVXU0lMRnJhbWVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0gICAvLyBQb3B1bGF0ZSB0aGUgYWN0aW9uIHdpdGggdGhlIHJlcXVlc3QgcHJvcGVydGllcy4KLSAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAocmVzdWx0KQotICAgewotICAgICBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0gICAgIAotICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuc2V0QXR0cmlidXRlKCJjb2xzIiwiPCU9d3NpbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iKTsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQuc2V0QXR0cmlidXRlKCJyb3dzIiwiPCU9d3NpbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Iik7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmOTRjODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTE5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMTm9kZUFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgICBTZWxlY3RXU0lMTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0V1NJTE5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi0gICAgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4ZGZkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMVG9vbEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIFNlbGVjdFdTSUxUb29sQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RXU0lMVG9vbEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZDA3YjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uCi0gICBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uIGFjdGlvbiA9IG5ldyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gICAKLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgCi0gICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTMxMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gbmV3IFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOTljZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotQWRkVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gQWRkVG9GYXZvcml0ZXNBY3Rpb24ubmV3QWN0aW9uKHJlcXVlc3QsIGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uCi1hY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYzNTVlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gIDwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgQWN0aW9uIGFjdGlvbiA9IEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLm5ld0FjdGlvbihyZXF1ZXN0LCBjb250cm9sbGVyKTsKLQotICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gIGlmIChhY3Rpb25SZXN1bHQpCi0gIHsKLSAgICBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5tYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpOwotICAlPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksZmFsc2UpKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWQyMmZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24iJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGFjdGlvbiA9IG5ldyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLWlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMLGZhbHNlKSkpJT4iOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2Yzk2NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9Xc2lsQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotPCUKLSAgICBFbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICAgIHdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZylwYXJhbU5hbWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbVZhbHVlcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtTmFtZSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1wYXJhbU5hbWUlPiIgdmFsdWU9IjwlPXBhcmFtVmFsdWVzW2ldJT4iPgotPCUKLSAgICAgIH0KLSAgICB9Ci0lPgotICA8L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+Ci08JQotaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pID09IG51bGwpIHsKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBpZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVMiKSklPiIpKQotICAgICAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci1lbHNlIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOwotICA8L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RhYWM2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NGM4MzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gYWN0aW9uID0gbmV3IFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODJjZGIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxUb2dnbGVOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1Xc2lsVG9nZ2xlTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgV3NpbFRvZ2dsZU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL09wZW5XU0lMRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvT3BlbldTSUxGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiMzU2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvT3BlbldTSUxGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscyIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci1Gb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfT1BFTl9XU0lMIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgPCUKLSAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL29wZW5fd3NpbF9oaWdobGlnaHRlZC5naWYiOwotICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NJTCIpOwotICAlPgotICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1BFTl9XU0lMX0RFU0MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+ICAgICAgICAKLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfd3NpbF91cmwiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJXU0lMX1VSTCIpJT48L2xhYmVsPgotICAgICAgICA8JQotICAgICAgICBpZiAoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMKSkgewotICAgICAgICAlPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgd3NpbFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCk7Ci0gICAgICAgIGlmICh3c2lsVVJMID09IG51bGwpCi0gICAgICAgICAgd3NpbFVSTCA9ICIiOwotICAgICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF93c2lsX3VybCIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2lsVVJMKSU+IiBzaXplPSI1MCIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDwlCi0gIFN0cmluZyBpbnNwZWN0aW9uVHlwZVN0cmluZyA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSk7Ci0gIGludCBpbnNwZWN0aW9uVHlwZSA9IFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9ERVRBSUxTOwotICBpZiAoaW5zcGVjdGlvblR5cGVTdHJpbmcgIT0gbnVsbCkKLSAgICBpbnNwZWN0aW9uVHlwZSA9IEludGVnZXIucGFyc2VJbnQoaW5zcGVjdGlvblR5cGVTdHJpbmcpOwotICAlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnNwZWN0aW9uX3R5cGUiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIT09TRV9XU0lMX0lOU1BFQ1RJT05fVFlQRSIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxzZWxlY3QgaWQ9Imluc3BlY3Rpb25fdHlwZSIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0lMX0RFVEFJTFMlPiIgPCUgaWYgKGluc3BlY3Rpb25UeXBlID09IFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9ERVRBSUxTKSB7ICU+c2VsZWN0ZWQ8JSB9ICU+PjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTSUwiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0RMX1NFUlZJQ0VTJT4iIDwlIGlmIChpbnNwZWN0aW9uVHlwZSA9PSBXc2lsQWN0aW9uSW5wdXRzLldTRExfU0VSVklDRVMpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TRVJWSUNFIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuVURESV9TRVJWSUNFUyU+IiA8JSBpZiAoaW5zcGVjdGlvblR5cGUgPT0gV3NpbEFjdGlvbklucHV0cy5VRERJX1NFUlZJQ0VTKSB7ICU+c2VsZWN0ZWQ8JSB9ICU+PjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VERElfU0VSVklDRSIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLlVERElfQlVTSU5FU1NFUyU+IiA8JSBpZiAoaW5zcGVjdGlvblR5cGUgPT0gV3NpbEFjdGlvbklucHV0cy5VRERJX0JVU0lORVNTRVMpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9CVVNJTkVTUyIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLldTSUxfTElOS1MlPiIgPCUgaWYgKGluc3BlY3Rpb25UeXBlID09IFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9MSU5LUykgeyAlPnNlbGVjdGVkPCUgfSAlPj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0lMX0xJTktTIiklPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzJlNmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZm9ybUFjdGlvbi50b1N0cmluZygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPgotICA8aW5wdXQgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkZSQU1FX05BTUUlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9Zm9ybUZyYW1lTmFtZSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iPgotPC9mb3JtPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1VkZGlCdXNpbmVzc0RldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9VZGRpQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YmU5YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1VkZGlCdXNpbmVzc0RldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBudWxsOwotICAgIFN0cmluZyBkaXNjb3ZlcnlVUkwgPSBudWxsOwotICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IGxpbmsgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJTGlua3MoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBsaW5rID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgICAgICBpZiAobGluayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKGxpbmsuZ2V0TGlua0Fic3RyYWN0cygpKTsKLSAgICAgICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKGxpbmsuZ2V0TGlua0Fic3RyYWN0TGFuZ3MoKSk7Ci0gICAgICAgICAgICBpbnF1aXJ5QVBJID0gbGluay5nZXRVRERJTGlua0lucXVpcnlBUEkoKTsKLSAgICAgICAgICAgIGJ1c2luZXNzS2V5ID0gbGluay5nZXRVRERJTGlua0J1c2luZXNzS2V5KCk7Ci0gICAgICAgICAgICBkaXNjb3ZlcnlVUkwgPSBsaW5rLmdldFVERElMaW5rRGlzY292ZXJ5VVJMKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9CVVNJTkVTU19ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1VERElfTElOS19ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBsaW5rICE9IG51bGwpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPXZpZXdJRCU+Ij4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfQVBJIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPSgoaW5xdWlyeUFQSSAhPSBudWxsKSA/IGlucXVpcnlBUEkgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX0tFWSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKGJ1c2luZXNzS2V5ICE9IG51bGwpID8gYnVzaW5lc3NLZXkgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChkaXNjb3ZlcnlVUkwgIT0gbnVsbCkgPyBkaXNjb3ZlcnlVUkwgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyOTZjMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1VkZGlTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0cyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgaW50IHZpZXdJRCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IG51bGw7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBudWxsOwotICAgIFN0cmluZyBkaXNjb3ZlcnlVUkwgPSBudWxsOwotICAgIFdzaWxTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESVNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgc2VydmljZSA9IChXc2lsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5hbWVzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VOYW1lcygpKTsKLSAgICAgICAgICAgIG5hbWVMYW5ncy5hZGRBbGwoc2VydmljZS5nZXRTZXJ2aWNlTmFtZUxhbmdzKCkpOwotICAgICAgICAgICAgYWJzdHJhY3RzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VBYnN0cmFjdHMoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdExhbmdzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VBYnN0cmFjdExhbmdzKCkpOwotICAgICAgICAgICAgaW5xdWlyeUFQSSA9ICgoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRVRERJU2VydmljZUlucXVpcnlBUEkoKTsKLSAgICAgICAgICAgIHNlcnZpY2VLZXkgPSAoKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpc2VydmljZSkuZ2V0VURESVNlcnZpY2VLZXkoKTsKLSAgICAgICAgICAgIGRpc2NvdmVyeVVSTCA9ICgoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRVRERJU2VydmljZURpc2NvdmVyeVVSTCgpOwotICAgICAgICB9Ci0gICAgfQotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VERElfU0VSVklDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfU0VSVklDRV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPXZpZXdJRCU+Ij4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9BUEkiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChpbnF1aXJ5QVBJICE9IG51bGwpID8gaW5xdWlyeUFQSSA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0tFWSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKHNlcnZpY2VLZXkgIT0gbnVsbCkgPyBzZXJ2aWNlS2V5IDogd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkEiKSklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWV9VUkwiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChkaXNjb3ZlcnlVUkwgIT0gbnVsbCkgPyBkaXNjb3ZlcnlVUkwgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbE5hbWVUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUwOGZiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1XU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JTVBPUlRfVE9fV09SS0JFTkNIIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfRklMRSU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iPgotICA8JQotICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFUTF9JTVBPUlRfV1NJTF9UT19XT1JLQkVOQ0giKTsKLSAgJT4KLSAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9XU0lMX1RPX1dPUktCRU5DSF9ERVNDIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgIDxsYWJlbCBmb3I9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIldPUktCRU5DSF9QUk9KRUNUX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIiBub3dyYXA+Ci0gICAgICAgIDwlCi0gICAgICAgIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzZWxlY3QgaWQ9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuV09SS0JFTkNIX1BST0pFQ1RfTkFNRSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXByb2plY3RzW2ldLmlzT3BlbigpKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3RzW2ldLmdldE5hbWUoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9cHJvamVjdE5hbWUlPiI+PCU9cHJvamVjdE5hbWUlPgotICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRlZF93c2lsX2ZpbGVfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJXU0lMX0ZJTEVfTkFNRSIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iIHdpZHRoPSI2MCUiPgotPCUKLSBTdHJpbmcgd3NpbEZpbGVOYW1lID0gInRlbXAud3NpbCI7Ci0gU3RyaW5nIHdzaWxVUkwgPSB3c2lsRWxlbWVudC5nZXRXc2lsVXJsKCk7Ci0gaWYgKHdzaWxVUkwuZW5kc1dpdGgoIi53c2lsIikpCi0gewotICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBNYXRoLm1heCh3c2lsVVJMLmxhc3RJbmRleE9mKCIvIiksIHdzaWxVUkwubGFzdEluZGV4T2YoIlxcIikpOwotICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPiAwKQotICAgICB3c2lsRmlsZU5hbWUgPSB3c2lsVVJMLnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsIHdzaWxVUkwubGVuZ3RoKCkpOwotIH0KLSU+ICAgCi0gICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfaW1wb3J0ZWRfd3NpbF9maWxlX25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NpbEZpbGVOYW1lKSU+IiBzaXplPTUwIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAKLSAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NkbFNlcnZpY2VEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NkbFNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MjI0MzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzZGxTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLlFOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0cyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgIFN0cmluZyBiaW5kaW5nVGFibGUgPSAiYmluZGluZ1RhYmxlIjsKLSAgICBTdHJpbmcgeGJpbmRpbmdUYWJsZSA9ICJ4YmluZGluZ1RhYmxlIjsKLQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPWNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlID0gbnVsbDsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICAgVmVjdG9yIHdzZGxCaW5kaW5ncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsV1NETFNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgc2VydmljZSA9IChXc2lsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5hbWVzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VOYW1lcygpKTsKLSAgICAgICAgICAgIG5hbWVMYW5ncy5hZGRBbGwoc2VydmljZS5nZXRTZXJ2aWNlTmFtZUxhbmdzKCkpOwotICAgICAgICAgICAgYWJzdHJhY3RzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VBYnN0cmFjdHMoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdExhbmdzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VBYnN0cmFjdExhbmdzKCkpOwotICAgICAgICAgICAgd3NkbFVSTCA9ICgoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRXU0RMU2VydmljZVVSTCgpOwotICAgICAgICAgICAgd3NkbEJpbmRpbmdzID0gKChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KXNlcnZpY2UpLmdldFdTRExCaW5kaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NETF9TRVJWSUNFX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX1NFUlZJQ0VfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQgJiYgc2VydmljZSAhPSBudWxsKSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iIHZhbHVlPSI8JT12aWV3SUQlPiI+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT13c2RsVVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsTmFtZVRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1iaW5kaW5nVGFibGUlPicsJzwlPXhiaW5kaW5nVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhiaW5kaW5nVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9CSU5ESU5HUyIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWJpbmRpbmdUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUVTUEFDRV9VUkkiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MT0NBTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSB3c2RsQmluZGluZ3MuZWxlbWVudHMoKTsKLSAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgUU5hbWUgcW5hbWUgPSAoUU5hbWUpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9cW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCklPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPXFuYW1lLmdldExvY2FsTmFtZSgpJT48L3RkPgotICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWJpbmRpbmdUYWJsZSU+JywnPCU9eGJpbmRpbmdUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbERldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU4OTc3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbERldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKHdzaWxFbGVtZW50LmdldFdTSUxBYnN0cmFjdHMoKSk7Ci0gICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKHdzaWxFbGVtZW50LmdldFdTSUxBYnN0cmFjdExhbmdzKCkpOwotICAgIH0KLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0lMX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NJTF9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbEVsZW1lbnQuZ2V0V3NpbFVybCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VhZmY3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1Qcm9wZXJ0aWVzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICB7Ci0gICAgaW50IHZpZXdJZCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBMaXN0RWxlbWVudCBsZSA9IHdzaWxFbGVtZW50LmdldEFsbFdTRExTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJZCk7Ci0gICAgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCB3c2lsV3NkbFNlcnZpY2VFbGVtZW50ID0gKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgZm9ybVByb3BlcnRpZXMucHV0KCJ3c2RsVVJMIix3c2lsV3NkbFNlcnZpY2VFbGVtZW50LmdldFdTRExTZXJ2aWNlVVJMKCkpOwotICB9Ci0gIGZvcm1Qcm9wZXJ0aWVzLnB1dCgiZm9ybUFjdGlvbkxpbmsiLCJ3c2lsL2FjdGlvbnMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AiKTsKLSU+ICAgCi08L2pzcDp1c2VCZWFuPgotPCUKLSAgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICB7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRXU0RMQW5kV1NJTFRvV29ya2JlbmNoRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0gIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICB7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OTE5NWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbkxpbmsiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUFjdGlvbkxpbmsuYXBwZW5kKCJ3c2lsL2FjdGlvbnMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMaW5rRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMaW5rRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjY0YTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsTGlua0RldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgIGludCB2aWV3SUQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbFdzaWxMaW5rRWxlbWVudCBsaW5rID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsV1NJTExpbmtzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgbGluayA9IChXc2lsV3NpbExpbmtFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgICAgICBpZiAobGluayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhYnN0cmFjdExhbmdzLmFkZEFsbChsaW5rLmdldExpbmtBYnN0cmFjdExhbmdzKCkpOwotICAgICAgICAgICAgYWJzdHJhY3RzLmFkZEFsbChsaW5rLmdldExpbmtBYnN0cmFjdHMoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NJTF9MSU5LX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX0xJTktfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQgJiYgbGluayAhPSBudWxsKSB7Ci0gICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1saW5rLmdldFdTSUxMaW5rTG9jYXRpb24oKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9hZGRfdG9fVURESV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY1ZDE5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9hZGRfdG9fVURESV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhM2RkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfVURESV9zZXJ2aWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzUxZGFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfVURESV9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2UxMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYzAyODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGM4ZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NJTF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmEwOTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzRiYmU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQxZTM3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxYjk3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9vcGVuX3dzaWxfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU5Y2M2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxNzc1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL29wZW5fd3NpbF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL3dzaWxfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL3dzaWxfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTkxNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy93c2lsX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNGQwODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0cyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi1TdHJpbmcgYWJzdHJhY3RUYWJsZSA9ICJhYnN0cmFjdFRhYmxlIjsKLVN0cmluZyB4YWJzdHJhY3RUYWJsZSA9ICJ4YWJzdHJhY3RUYWJsZSI7Ci1TdHJpbmcgc2hvd0FsbEFic3RyYWN0SUQgPSAic2hvd0FsbEFic3RyYWN0SUQiOwotV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIHNob3dBYnN0cmFjdCh0YWJsZUNvbnRhaW5lcklEKSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgICAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICAgICAgdmFyIGhpZGRlbklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzwlPXNob3dBbGxBYnN0cmFjdElEJT4nKTsKLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgJT4KLSAgICAgICAgICAgYWRkUm93VG9BYnN0cmFjdFRhYmxlKHRhYmxlQm9keSwKLSAgICAgICAgICAgICAgICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylhYnN0cmFjdExhbmdzLmVsZW1lbnRBdChpKSklPiIsCi0gICAgICAgICAgICAgICAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpYWJzdHJhY3RzLmVsZW1lbnRBdChpKSklPiIpOwotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkUm93VG9BYnN0cmFjdFRhYmxlKHRhYmxlQm9keSwgbGFuZywgYWJzdCkgewotICAgICAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICAgICAgYWRkS2V5VmFsdWVUb1JvdyhuZXdSb3csIGxhbmcsIGFic3QpOwotICAgICAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICB9Ci08L3NjcmlwdD4KLQotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1hYnN0cmFjdFRhYmxlJT4nLCc8JT14YWJzdHJhY3RUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGFic3RyYWN0VGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUJTVFJBQ1QiKSU+PC9zdHJvbmc+Ci0gICAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT1hYnN0cmFjdFRhYmxlJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQlNUUkFDVCIpJT48L3RoPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgc2hvd0Fic3RyYWN0KCc8JT1hYnN0cmFjdFRhYmxlJT4nKTsKLSAgICB0d2lzdEluaXQoJzwlPWFic3RyYWN0VGFibGUlPicsJzwlPXhhYnN0cmFjdFRhYmxlJT4nKTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjI1ZjAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gaXNTb21ldGhpbmdTZWxlY3RlZCh0YWJsZUNvbnRhaW5lcklkKSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93czsgaTx0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3hDZWxsID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKS5pdGVtKDApOwotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94ID0gcm93Q2hlY2tib3hDZWxsLmNoaWxkTm9kZXNbMF07Ci0gICAgICAgICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBhbGVydCgiPCU9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCh0YWJsZUNvbnRhaW5lcklkLCBmb3JtLCBsb2NhdGlvbikgewotICAgICAgICBpZiAoaXNTb21ldGhpbmdTZWxlY3RlZCh0YWJsZUNvbnRhaW5lcklkKSkKLSAgICAgICAgICAgIHNldExvY2F0aW9uQW5kU3VibWl0KGZvcm0sIGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXRMb2NhdGlvbkFuZFN1Ym1pdChmb3JtLCBsb2NhdGlvbikgewotICAgICAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgICAgICB7Ci0gICAgICAgICAgZm9ybS5hY3Rpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwotICAgICAgICB9Ci0gICAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsTmFtZVRhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxOYW1lVGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDYwYzljLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxOYW1lVGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZUxhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZXMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotU3RyaW5nIG5hbWVUYWJsZSA9ICJuYW1lVGFibGUiOwotU3RyaW5nIHhuYW1lVGFibGUgPSAieG5hbWVUYWJsZSI7Ci1TdHJpbmcgc2hvd0FsbE5hbWVJRCA9ICJzaG93QWxsTmFtZUlEIjsKLVdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPWNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBzaG93TmFtZSh0YWJsZUNvbnRhaW5lcklEKSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgICAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICAgICAgdmFyIGhpZGRlbklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzwlPXNob3dBbGxOYW1lSUQlPicpOwotICAgICAgICA8JQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgIGFkZFJvd1RvTmFtZVRhYmxlKHRhYmxlQm9keSwKLSAgICAgICAgICAgICAgICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZyluYW1lTGFuZ3MuZWxlbWVudEF0KGkpKSU+IiwKLSAgICAgICAgICAgICAgICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZyluYW1lcy5lbGVtZW50QXQoaSkpJT4iKTsKLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFkZFJvd1RvTmFtZVRhYmxlKHRhYmxlQm9keSwgbGFuZywgbmFtZSkgewotICAgICAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICAgICAgYWRkS2V5VmFsdWVUb1JvdyhuZXdSb3csIGxhbmcsIG5hbWUpOwotICAgICAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICB9Ci08L3NjcmlwdD4KLQotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1uYW1lVGFibGUlPicsJzwlPXhuYW1lVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhuYW1lVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3N0cm9uZz4KLSAgICAgICAgPC90ZD4KLSAgICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPW5hbWVUYWJsZSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgc2hvd05hbWUoJzwlPW5hbWVUYWJsZSU+Jyk7Ci0gICAgdHdpc3RJbml0KCc8JT1uYW1lVGFibGUlPicsJzwlPXhuYW1lVGFibGUlPicpOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjNWIzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHdzaWxOYXZpZ2F0b3JDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05UQUlORVIlPiJdOwotICB2YXIgd3NpbE5hdmlnYXRvclRvb2xiYXIgPSB3c2lsTmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfVE9PTEJBUiU+Il07Ci0gIHZhciB3c2lsTmF2aWdhdG9yQ29udGVudCA9IHdzaWxOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05URU5UJT4iXTsKLSAgdmFyIHdzaWxBY3Rpb25zQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9BQ1RJT05TX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2lsUHJvcGVydGllc0NvbnRhaW5lciA9IHdzaWxBY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2lsUHJvcGVydGllc1Rvb2xiYXIgPSB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfUFJPUEVSVElFU19UT09MQkFSJT4iXTsKLSAgdmFyIHdzaWxQcm9wZXJ0aWVzQ29udGVudCA9IHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRFTlQlPiJdOwotICB2YXIgd3NpbFN0YXR1c0NvbnRhaW5lciA9IHdzaWxBY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzaWxTdGF0dXNUb29sYmFyID0gd3NpbFN0YXR1c0NvbnRhaW5lci5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX1RPT0xCQVIlPiJdOwotICB2YXIgd3NpbFN0YXR1c0NvbnRlbnQgPSB3c2lsU3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEVOVCU+Il07Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjUxMjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotCi0gICAgZnVuY3Rpb24gd3NpbEhhbmRsZUNoZWNrQWxsQ2xpY2sodGFibGVDb250YWluZXJJZCwgY2hlY2tBbGxDaGVja2JveCkgewotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgICAgICAgcm93Q2hlY2tib3guY2hlY2tlZCA9IGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZDsKLSAgICAgICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInJvd2NvbG9yIik7Ci0gICAgICAgICAgICAgICAgcm93Q2hlY2tib3gubmFtZSA9ICI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInRhYmxlY2VsbHMiKTsKLSAgICAgICAgICAgICAgICByb3dDaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoZWNrQm94SW5wdXQoY2hlY2tib3gsIGlzQ2hlY2tlZCkgewotICAgICAgICBpZiAoaXNDaGVja2VkKSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlUm93Q2hlY2tib3hDbGljaygpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHR3aXN0SW5pdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKSB7Ci0gICAgICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID4gbnVtYmVyT2ZIZWFkZXJSb3dzKSB7Ci0gICAgICAgICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkS2V5VmFsdWVUb1Jvdyhyb3csIGtleSwgdmFsdWUpIHsKLSAgICAgICAgdmFyIGtleVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXkpOwotICAgICAgICB2YXIgdmFsdWVUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpOwotICAgICAgICB2YXIgbmV3Q29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgdmFyIG5ld0NvbDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICBuZXdDb2wuYXBwZW5kQ2hpbGQoa2V5VGV4dCk7Ci0gICAgICAgIG5ld0NvbC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgICAgIG5ld0NvbDIuYXBwZW5kQ2hpbGQodmFsdWVUZXh0KTsKLSAgICAgICAgbmV3Q29sMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgICAgIHJvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwotICAgICAgICByb3cuYXBwZW5kQ2hpbGQobmV3Q29sMik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2xlYXJUYWJsZSh0YWJsZUJvZHksIG51bUhlYWRlcikgewotICAgICAgICBmb3IodmFyIGkgPSBudW1IZWFkZXI7IGkgPCB0YWJsZUJvZHkucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdGFibGVCb2R5LmRlbGV0ZVJvdyhpKTsKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgfQotICAgIH0KLQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODI2NzNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX0FDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZnJhbWVzZXRTaXplc0Zvcm0pCi0gIHsKLSAgICB0b2dnbGVEb3VibGVDbGlja0NvbHVtblRpdGxlKCk7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9V3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPi52YWx1ZSA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LmNvbHM7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9V3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4udmFsdWUgPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQucm93czsKLSAgICBmcmFtZXNldFNpemVzRm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY5OTI1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvVWRkaUJ1c2luZXNzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZVRERJQnVzaW5lc3NMaXN0ID0gImRpdlVERElCdXNpbmVzc0xpc3QiOwotICAgIFN0cmluZyB4ZGl2VURESUJ1c2luZXNzTGlzdCA9ICJ4ZGl2VURESUJ1c2luZXNzTGlzdCI7Ci0KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9CVVNJTkVTU0VTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfVURESV9MSU5LUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9VRERJX0JVU0lORVNTRVNfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2VURESUJ1c2luZXNzTGlzdCU+JywnPCU9eGRpdlVERElCdXNpbmVzc0xpc3QlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZVRERJQnVzaW5lc3NMaXN0JT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VERElfQlVTSU5FU1MiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9IndzaWxIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lURU1fTlVNQkVSIiklPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9CVVNJTkVTU19OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBMaXN0TWFuYWdlciB1ZGRpTGlua3MgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESUxpbmtzKCk7Ci0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9IHVkZGlMaW5rcy5nZXRMaXN0RWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICBpbnQgaXRlbU51bSA9IDE7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3J0ZWRWZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoTGlzdEVsZW1lbnQpc29ydGVkVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUxpbmsgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdWRkaUxpbmsuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPWxlLmdldFZpZXdJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0JICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvYT48L3RkPgotICAgICAgIAkgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9bmFtZSU+PC9hPjwvdGQ+Ci0gICAgICAgCSAgICAgICAgICA8JQotICAgICAgIAkgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAlPgotCSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvdGQ+Ci0gICAgICAgCSAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfQlVTSU5FU1MiKSU+Jm5ic3A7PCU9dWRkaUxpbmsuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpJT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1OdW0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdlVERElCdXNpbmVzc0xpc3QlPicsJzwlPXhkaXZVRERJQnVzaW5lc3NMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESUJ1c2luZXNzTGlzdCU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUZSRVNIIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVmcmVzaEFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyZWI0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvVWRkaVNlcnZpY2VzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdlVERElTZXJ2aWNlTGlzdCA9ICJkaXZVRERJU2VydmljZUxpc3QiOwotICAgIFN0cmluZyB4ZGl2VURESVNlcnZpY2VMaXN0ID0gInhkaXZVRERJU2VydmljZUxpc3QiOwotCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1VERElfU0VSVklDRVMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfVURESV9TRVJWSUNFUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9VRERJX1NFUlZJQ0VTX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCc8JT14ZGl2VURESVNlcnZpY2VMaXN0JT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2VURESVNlcnZpY2VMaXN0JT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VERElfU0VSVklDRSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdlVERElTZXJ2aWNlTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lURU1fTlVNQkVSIiklPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9TRVJWSUNFX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHVkZGlTZXJ2aWNlcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gdWRkaVNlcnZpY2VzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdWRkaVNlcnZpY2UuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPWxlLmdldFZpZXdJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAJPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBsZS5nZXRWaWV3SWQoKSwgMCwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPVN0cmluZy52YWx1ZU9mKGl0ZW1OdW0pJT48L2E+PC90ZD4KLQkgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9bmFtZSU+PC9hPjwvdGQ+Ci0JICAgICAgICAgICAgICAgICA8JQotCSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICAgICAgCTx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPVN0cmluZy52YWx1ZU9mKGl0ZW1OdW0pJT48L3RkPgotCQkJCTx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfU0VSVklDRSIpJT4mbmJzcDs8JT11ZGRpU2VydmljZS5nZXRVRERJU2VydmljZUtleSgpJT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1OdW0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdlVERElTZXJ2aWNlTGlzdCU+JywnPCU9eGRpdlVERElTZXJ2aWNlTGlzdCU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJU2VydmljZUxpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVGUkVTSCIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVmcmVzaEFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhZjRkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvV3NkbFNlcnZpY2VzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdldTRExMaXN0ID0gImRpdldTRExMaXN0IjsKLSAgICBTdHJpbmcgeGRpdldTRExMaXN0ID0gInhkaXZXU0RMTGlzdCI7Ci0KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfV1NETF9TRVJWSUNFUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfV1NETF9TRVJWSUNFUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9XU0RMX1NFUlZJQ0VTX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdldTRExMaXN0JT4nLCc8JT14ZGl2V1NETExpc3QlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZXU0RMTGlzdCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NFUlZJQ0UiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZXU0RMTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2V1NETExpc3QlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSVRFTV9OVU1CRVIiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHdzZGxTZXJ2aWNlcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0RMU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gd3NkbFNlcnZpY2VzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlID0gKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB3c2RsVVJMID0gd3NkbFNlcnZpY2UuZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iIHZhbHVlPSI8JT1sZS5nZXRWaWV3SWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgbGUuZ2V0Vmlld0lkKCksIDAsIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1TdHJpbmcudmFsdWVPZihpdGVtTnVtKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48JT13c2RsVVJMJT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICBpdGVtTnVtKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZXU0RMTGlzdCU+JywnPCU9eGRpdldTRExMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19XU0RMX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZXU0RMTGlzdCU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2V1NETExpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JkYjg5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvV3NpbExpbmtzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxMaW5rQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2V1NJTExpc3QgPSAiZGl2V1NJTExpc3QiOwotICAgIFN0cmluZyB4ZGl2V1NJTExpc3QgPSAieGRpdldTSUxMaXN0IjsKLQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9XU0lMX0xJTktTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfV1NJTF9MSU5LUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9XU0lMX0xJTktTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuV1NJTExpbmtBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2V1NJTExpc3QlPicsJzwlPXhkaXZXU0lMTGlzdCU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdldTSUxMaXN0JT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTSUxfTElOS1MiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZXU0lMTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2V1NJTExpc3QlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSVRFTV9OVU1CRVIiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHdzaWxMaW5rcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0lMTGlua3MoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gd3NpbExpbmtzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsV3NpbExpbmtFbGVtZW50IHdzaWxMaW5rID0gKFdzaWxXc2lsTGlua0VsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSB3c2lsTGluay5nZXRXU0lMTGlua0xvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9bGUuZ2V0Vmlld0lkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9dXJsJT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICBpdGVtTnVtKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZXU0lMTGlzdCU+JywnPCU9eGRpdldTSUxMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19OQVZJR0FUT1IiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdldTSUxMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbldTSUxMaW5rQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfYWN0aW9uc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfYWN0aW9uc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjRhYjk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX2FjdGlvbnNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIiklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3N0YXR1c19jb250YWluZXIuanNwIiklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYTNlNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5YzM5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90cmVldmlldy5jc3MiKSklPiI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90cmVldmlldy5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLTwvaGVhZD4KLTwlCi0gICAgU3RyaW5nIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIGludCBmb2N1c2VkTm9kZUlkID0gbm9kZU1hbmFnZXIuZ2V0Rm9jdXNlZE5vZGVJZCgpOwotICAgIFN0cmluZyBmb2N1c2VkQW5jaG9yTmFtZSA9IFN0cmluZy52YWx1ZU9mKGZvY3VzZWROb2RlSWQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgIHNlbGVjdGVkQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICAgICAgIGlmIChmb2N1c2VkTm9kZUlkID09IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkKLSAgICAgICAgICAgIGZvY3VzZWRBbmNob3JOYW1lID0gc2VsZWN0ZWRBbmNob3JOYW1lOwotICAgIH0KLSU+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uTG9hZD0ic2VsZi5sb2NhdGlvbi5oYXNoPScjPCU9Zm9jdXNlZEFuY2hvck5hbWUlPic7c2V0U2VsZWN0ZWRBbmNob3JOYW1lKCc8JT1zZWxlY3RlZEFuY2hvck5hbWUlPicpIiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICAgIDxkaXYgaWQ9InRyZWVjb250ZW50Ym9yZGVyIj4KLSAgICAgICAgPCU9bm9kZU1hbmFnZXIucmVuZGVyVHJlZVZpZXcocmVzcG9uc2UpJT4KLSAgICA8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3YmQzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ3c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoV3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL2Zvcm1zL1Byb2Nlc3NXU0lMRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvbmF2aWdhdG9yLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgZWxzZQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX05BVklHQVRPUiIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRSZWZyZXNoID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRUZSRVNIX1dTSUwiKTsKLSAgIFN0cmluZyBhbHRDbGVhciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQ0xFQVJfV1NJTCIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0UmVmcmVzaCU+IiB0aXRsZT0iPCU9YWx0UmVmcmVzaCU+Ij48L2E+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTljYzBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxmcmFtZXNldCBjb2xzPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDwlCi0gIGlmIChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5pc1JUTCgpKQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX0FDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX0FDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NGMwZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDJmMzkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pIHsKLSAgICAgICAgJT4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICBsb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkVG9vbC5nZXRGb3JtTGluaygpKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQUNUSU9OX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc190b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OWIxYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoIndzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChXc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL2Zvcm1zL1Byb2Nlc3NXU0lMRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYWN0aW9ucy5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh3c2lsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9BQ1RJT05TIiklPjwvdGQ+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgICAgIGlmIChzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGZvcihpbnQgaT0wOyBpPHRvb2xNYW5hZ2VyLmdldE51bWJlck9mVG9vbHMoKTsgaSsrKSB7Ci0gICAgICAgICAgICBUb29sIHRvb2wgPSAoVG9vbCl0b29sTWFuYWdlci5nZXRUb29sKGkpOwotICAgICAgICAgICAgJT4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PCU9dG9vbC5yZW5kZXJUb29sKHJlc3BvbnNlLGNvbnRyb2xsZXIpJT48L3RkPgotICAgICAgICAgICAgPCUKLSAgICAgICAgfQotICAgIH0KLSU+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWZhYzE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19UT09MQkFSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9zdGF0dXNfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05URU5UJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmViZTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0Jb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPHByZT4KLTwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmdldE1lc3NhZ2VzRnJvbUxpc3QoKSklPgotICAgICAgICA8L3ByZT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGNiZjdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3N0YXR1cy5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh3c2lsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfU1RBVFVTIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdENsZWFyID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQ0xFQVIiKTsKLSU+ICAgICAgICAgICAKLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIHRhcmdldD0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEVOVCU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdENsZWFyJT4iIHRpdGxlPSI8JT1hbHRDbGVhciU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiOWIyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi0uY2R0cHJvamVjdAotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotcGFyc2VyLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWI2NjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMDdkOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNXZWQgSnVuIDA2IDE0OjMzOjUzIEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YjBiNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozOTo1OSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMyMGE1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAyLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5wbHVnaW4uUGFyc2VyUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3Zlcnk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5hcGFjaGUud3NpbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMS4xLjApIiwKLSBvcmcudWRkaTRqO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjQsMi4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMjNkNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTVhYzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gUGFyc2VyCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjby9ESVNDT0NvbnRyYWN0UmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09Db250cmFjdFJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmI0MGEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjby9ESVNDT0NvbnRyYWN0UmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY287Ci0KLXB1YmxpYyBjbGFzcyBESVNDT0NvbnRyYWN0UmVmZXJlbmNlIGV4dGVuZHMgRElTQ09SZWZlcmVuY2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZG9jUmVmXzsKLSAgCi0gIHB1YmxpYyBESVNDT0NvbnRyYWN0UmVmZXJlbmNlKFN0cmluZyByZWYsU3RyaW5nIGRvY1JlZikKLSAgewotICAgIHN1cGVyKHJlZik7Ci0gICAgZG9jUmVmXyA9IGRvY1JlZjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXREb2NSZWYoKQotICB7Ci0gICAgcmV0dXJuIGRvY1JlZl87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjby9ESVNDT1BhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNWI3YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9tc2RubWFnL2lzc3Vlcy8wMi8wMi94bWwvZGVmYXVsdC5hc3B4IGZvciBtb3JlCi0gKiBkZXRhaWxzIG9uIERJU0NPLgotICovCi1wdWJsaWMgY2xhc3MgRElTQ09QYXJzZXIKLXsKLSAgcHJpdmF0ZSBEb2N1bWVudEJ1aWxkZXIgcGFyc2VyXzsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTlNfRElTQ08gPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvZGlzY28vIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRElTQ09WRVJZID0gImRpc2NvdmVyeSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERJU0NPVkVSWV9SRUYgPSAiZGlzY292ZXJ5UmVmIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTlNfQ09OVFJBQ1RfUkVGID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL2Rpc2NvL3NjbC8iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDT05UUkFDVF9SRUYgPSAiY29udHJhY3RSZWYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSRUYgPSAicmVmIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRE9DX1JFRiA9ICJkb2NSZWYiOwotCi0gIHB1YmxpYyBESVNDT1BhcnNlcigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRvY0J1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgZG9jQnVpbGRlckZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0gICAgICBwYXJzZXJfID0gZG9jQnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkKLSAgICB7Ci0gICAgICBwYXJzZXJfID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRElTQ09SZWZlcmVuY2VbXSBwYXJzZShTdHJpbmcgZGlzY29VUkksIElucHV0U291cmNlIHNvdXJjZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHBhcnNlcl8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEb2N1bWVudCBkb2MgPSBwYXJzZXJfLnBhcnNlKHNvdXJjZSk7Ci0gICAgICBFbGVtZW50IHJvb3RFbGVtZW50ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgLy8gUm9vdCBlbGVtZW50IG11c3QgYnkgPGRpc2NvOmRpc2NvdmVyeQotICAgICAgLy8geG1sbnM6ZGlzY289Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL2Rpc2NvLyI+Ci0gICAgICBpZiAocm9vdEVsZW1lbnQgIT0gbnVsbCAmJiByb290RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoTlNfRElTQ08pICYmIHJvb3RFbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhESVNDT1ZFUlkpKQotICAgICAgewotICAgICAgICBOb2RlTGlzdCBjaGlsZE5vZGVzID0gcm9vdEVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBWZWN0b3IgZGlzY29SZWZlcmVuY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgY2hpbGROb2RlID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgICAgIGlmIChjaGlsZE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KWNoaWxkTm9kZTsKLSAgICAgICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSBlbGVtZW50LmdldExvY2FsTmFtZSgpOwotICAgICAgICAgICAgU3RyaW5nIG5zVVJJID0gZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIGlmIChuc1VSSS5lcXVhbHMoTlNfRElTQ08pICYmIGxvY2FsTmFtZS5lcXVhbHMoRElTQ09WRVJZX1JFRikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIERJU0NPIGxpbmsuCi0gICAgICAgICAgICAgIFN0cmluZyByZWYgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSShkaXNjb1VSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoUkVGKSk7Ci0gICAgICAgICAgICAgIGRpc2NvUmVmZXJlbmNlcy5hZGRFbGVtZW50KG5ldyBESVNDT1JlZmVyZW5jZShyZWYpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG5zVVJJLmVxdWFscyhOU19DT05UUkFDVF9SRUYpICYmIGxvY2FsTmFtZS5lcXVhbHMoQ09OVFJBQ1RfUkVGKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV1NETCBsaW5rLgotICAgICAgICAgICAgICBTdHJpbmcgcmVmID0gY29udmVydFRvQWJzb2x1dGVVUkkoZGlzY29VUkksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFJFRikpOwotICAgICAgICAgICAgICBTdHJpbmcgZG9jUmVmID0gY29udmVydFRvQWJzb2x1dGVVUkkoZGlzY29VUkksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKERPQ19SRUYpKTsKLSAgICAgICAgICAgICAgZGlzY29SZWZlcmVuY2VzLmFkZEVsZW1lbnQobmV3IERJU0NPQ29udHJhY3RSZWZlcmVuY2UocmVmLCBkb2NSZWYpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW50IG51bWJlck9mRElTQ09SZWZlcmVuY2VzID0gZGlzY29SZWZlcmVuY2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG51bWJlck9mRElTQ09SZWZlcmVuY2VzID4gMCkKLSAgICAgICAgewotICAgICAgICAgIERJU0NPUmVmZXJlbmNlW10gcmVmZXJlbmNlcyA9IG5ldyBESVNDT1JlZmVyZW5jZVtudW1iZXJPZkRJU0NPUmVmZXJlbmNlc107Ci0gICAgICAgICAgZGlzY29SZWZlcmVuY2VzLmNvcHlJbnRvKHJlZmVyZW5jZXMpOwotICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZSBkb2N1bWVudCBpcyBub3QgYSB2YWxpZCBESVNDTyBkb2N1bWVudC4KLSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRUb0Fic29sdXRlVVJJKFN0cmluZyBkaXNjb1VSSSwgU3RyaW5nIHJlZlVSSSkKLSAgewotICAgIGlmIChyZWZVUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAocmVmVVJJLmluZGV4T2YoIjovLyIpID4gLTEpCi0gICAgICB7Ci0gICAgICAgIC8vIHJlZlVSSSBpcyBhbHJlYWR5IGFic29sdXRlLgotICAgICAgICByZXR1cm4gcmVmVVJJOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWJzb2x1dGVVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGRpc2NvVVJJLnN1YnN0cmluZygwLCBNYXRoLm1heChkaXNjb1VSSS5sYXN0SW5kZXhPZignXFwnKSwgZGlzY29VUkkubGFzdEluZGV4T2YoJy8nKSArIDEpKSk7Ci0gICAgICAgIGFic29sdXRlVVJJLmFwcGVuZChyZWZVUkkpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVVUkkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjby9ESVNDT1JlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZWQzYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY287Ci0KLXB1YmxpYyBjbGFzcyBESVNDT1JlZmVyZW5jZQotewotICBwcml2YXRlIFN0cmluZyByZWZfOwotICAKLSAgcHVibGljIERJU0NPUmVmZXJlbmNlKFN0cmluZyByZWYpCi0gIHsKLSAgICByZWZfID0gcmVmOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFJlZigpCi0gIHsKLSAgICByZXR1cm4gcmVmXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9OZXRVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9OZXRVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWYwNGE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjb3ZlcnkvTmV0VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3Zlcnk7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotCi1pbXBvcnQgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcjsKLQotcHVibGljIGZpbmFsIGNsYXNzIE5ldFV0aWxzCi17Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgamF2YS5uZXQuVVJMQ29ubmVjdGlvbiBnaXZlbiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTC4gVGhpcyBjbGFzcyBlbnN1cmVzCi0gICAqIHRoYXQgcHJveHkgc2V0dGluZ3MgaW4gV1NBRCBhcmUgcmVzcGVjdGVkLgotICAgKiBAcGFyYW0gdXJsU3RyaW5nIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTC4KLSAgICogQHJldHVybiBqYXZhLm5ldC5VUkxDRG9ubmVjdGlvbiBVUkxDb25uZWN0aW9uIHRvIHRoZSBVUkwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFVSTENvbm5lY3Rpb24gZ2V0VVJMQ29ubmVjdGlvbihTdHJpbmcgdXJsU3RyaW5nKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMIHVybCA9IGNyZWF0ZVVSTCh1cmxTdHJpbmcpOwotICAgICAgVVJMQ29ubmVjdGlvbiB1YyA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotICAgICAgU3RyaW5nIHByb3h5VXNlck5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlVc2VyTmFtZSIpOwotICAgICAgU3RyaW5nIHByb3h5UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlQYXNzd29yZCIpOwotICAgICAgaWYgKHByb3h5VXNlck5hbWUgIT0gbnVsbCAmJiBwcm94eVBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciB1c2VyTmFtZVBhc3N3b3JkID0gbmV3IFN0cmluZ0J1ZmZlcihwcm94eVVzZXJOYW1lKTsKLSAgICAgICAgdXNlck5hbWVQYXNzd29yZC5hcHBlbmQoJzonKS5hcHBlbmQocHJveHlQYXNzd29yZCk7Ci0gICAgICAgIEJBU0U2NEVuY29kZXIgZW5jb2RlciA9IG5ldyBCQVNFNjRFbmNvZGVyKCk7Ci0gICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGVuY29kZXIuZW5jb2RlKHVzZXJOYW1lUGFzc3dvcmQudG9TdHJpbmcoKS5nZXRCeXRlcygpKTsKLSAgICAgICAgdXNlck5hbWVQYXNzd29yZC5zZXRMZW5ndGgoMCk7Ci0gICAgICAgIHVzZXJOYW1lUGFzc3dvcmQuYXBwZW5kKCJCYXNpYyAiKS5hcHBlbmQoZW5jb2RpbmcpOwotICAgICAgICB1Yy5zZXRSZXF1ZXN0UHJvcGVydHkoIlByb3h5LWF1dGhvcml6YXRpb24iLHVzZXJOYW1lUGFzc3dvcmQudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdWM7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGphdmEuaW8uSW5wdXRTdHJlYW0gZm9yIGEgVVJMIGdpdmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMLiBUaGlzIGNsYXNzCi0gICAqIGVuc3VyZXMgdGhhdCBwcm94eSBzZXR0aW5ncyBpbiBXU0FEIGFyZSByZXNwZWN0ZWQuCi0gICAqIEBwYXJhbSB1cmxTdHJpbmcgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMLgotICAgKiBAcmV0dXJuIGphdmEuaW8uSW5wdXRTdHJlYW0gSW5wdXRTdHJlYW0gZm9yIHJlYWRpbmcgdGhlIFVSTCBzdHJlYW0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIElucHV0U3RyZWFtIGdldFVSTElucHV0U3RyZWFtKFN0cmluZyB1cmxTdHJpbmcpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkxDb25uZWN0aW9uIHVjID0gZ2V0VVJMQ29ubmVjdGlvbih1cmxTdHJpbmcpOwotICAgICAgaWYgKHVjICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElucHV0U3RyZWFtIGlzID0gdWMuZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICAgICAgcmV0dXJuIGlzOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIFVSTCBmcm9tIGEgc3RyaW5nLgotICAgKiBAcGFyYW0gdXJsU3RyaW5nIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTC4KLSAgICogQHJldHVybiBVUkwgamF2YS5sYW5nLlVSTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJMLgotICAgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBVUkwgY3JlYXRlVVJMKFN0cmluZyB1cmxTdHJpbmcpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLSAgewotICAJcmV0dXJuIG5ldyBVUkwodXJsU3RyaW5nKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9XZWJTZXJ2aWNlc1BhcnNlckV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9XZWJTZXJ2aWNlc1BhcnNlckV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzc4YmNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjb3ZlcnkvV2ViU2VydmljZXNQYXJzZXJFeHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3Zlcnk7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZXNQYXJzZXJFeHQgZXh0ZW5kcyBXZWJTZXJ2aWNlc1BhcnNlciB7Ci0KLSAgICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXJFeHQoKSB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyRXh0KFN0cmluZyB1cmkpIHsKLSAgICAgICAgc3VwZXIodXJpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgVVJMIGNyZWF0ZVVSTChTdHJpbmcgdXJsKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIE5ldFV0aWxzLmNyZWF0ZVVSTCh1cmwpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjA1OTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0NvbnN0YW50cwotewotICAvLyBOYW1lc3BhY2UKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1dTREwgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVURESV9WMSA9ICJ1cm46dWRkaS1vcmc6YXBpIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfVjIgPSAidXJuOnVkZGktb3JnOmFwaV92MiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VRERJX0JJTkRJTkcgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3VkZGkvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1dTSUxfSU5TUEVDVElPTiA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzTGluay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNMaW5rLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODEwZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNMaW5rLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTGluawotewotICBwcm90ZWN0ZWQgTGluayBsaW5rXzsKLQotICBwdWJsaWMgRmF2b3JpdGVzTGluaygpCi0gIHsKLSAgICBsaW5rXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgTGluayBnZXRMaW5rKCkKLSAgewotICAgIHJldHVybiBsaW5rXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExpbmsoTGluayBsaW5rKQotICB7Ci0gICAgbGlua18gPSBsaW5rOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YjE1NjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5JbnNwZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5CdXNpbmVzc0Rlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmltcGwuQWJzdHJhY3RJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLkRlc2NyaXB0aW9uSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5MaW5rSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5TZXJ2aWNlTmFtZUltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmltcGwuZXh0ZW5zaW9uLnVkZGkuQnVzaW5lc3NEZXNjcmlwdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmltcGwuZXh0ZW5zaW9uLnVkZGkuU2VydmljZURlc2NyaXB0aW9uSW1wbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQnVzaW5lc3NLZXk7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLlNlcnZpY2VLZXk7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdCBpbXBsZW1lbnRzIElGYXZvcml0ZXNSZWdpc3RyeVR5cGUKLXsKLSAgcHVibGljIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0KCkKLSAgewotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRSZWFkTG9jYXRpb24oKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRXcml0ZUxvY2F0aW9uKCk7Ci0gIHByb3RlY3RlZCBhYnN0cmFjdCBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50KCk7Ci0KLSAgcHVibGljIHZvaWQgaW5pdCgpCi0gIHsKLSAgICBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBXU0lMRG9jdW1lbnQgbG9hZFdTSUxEb2N1bWVudChTdHJpbmcgcGF0aCwgYm9vbGVhbiBmb3JjZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gV1NJTERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0gICAgICB3c2lsRG9jLnJlYWQobmV3IEZpbGVSZWFkZXIobmV3IEZpbGUocGF0aCkpKTsKLSAgICAgIHJldHVybiB3c2lsRG9jOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgaWYgKGZvcmNlKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIHQyKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGYXZvcml0ZXNWZXJzaW9uKCkKLSAgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBpbnNwZWN0aW9uLmdldEFic3RyYWN0cygpOwotICAgIGlmIChhYnN0cmFjdHMubGVuZ3RoID4gMCkKLSAgICAgIHJldHVybiBhYnN0cmFjdHNbMF0uZ2V0VGV4dCgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RmF2b3JpdGVzVmVyc2lvbihTdHJpbmcgdmVyc2lvbikKLSAgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgQWJzdHJhY3QgYWJzdCA9IG5ldyBBYnN0cmFjdEltcGwoKTsKLSAgICBhYnN0LnNldFRleHQodmVyc2lvbik7Ci0gICAgaW5zcGVjdGlvbi5yZW1vdmVBYnN0cmFjdHMoKTsKLSAgICBpbnNwZWN0aW9uLmFkZEFic3RyYWN0KGFic3QpOwotICB9Ci0KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNhdmUoKSB0aHJvd3MgV1NJTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgaWYgKHdzaWxEb2MgIT0gbnVsbCkKLSAgICAgIHdzaWxEb2Mud3JpdGUoZ2V0V3JpdGVMb2NhdGlvbigpKTsKLSAgfQotCi0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5W10gZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJpZXMoKQotICB7Ci0gICAgTGlua1tdIGxpbmtzID0gbG9hZFVERElSZWdpc3RyaWVzKCk7Ci0gICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5W10gcmVnaXN0cmllcyA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlbbGlua3MubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHJlZ2lzdHJpZXNbaV0gPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5KCk7Ci0gICAgICByZWdpc3RyaWVzW2ldLnNldExpbmsobGlua3NbaV0pOwotICAgIH0KLSAgICByZXR1cm4gcmVnaXN0cmllczsKLSAgfQotCi0gIHB1YmxpYyBJRmF2b3JpdGVzVURESUJ1c2luZXNzW10gZ2V0RmF2b3JpdGVzVURESUJ1c2luZXNzZXMoKQotICB7Ci0gICAgTGlua1tdIGxpbmtzID0gbG9hZFVERElCdXNpbmVzc2VzKCk7Ci0gICAgRmF2b3JpdGVzVURESUJ1c2luZXNzW10gYnVzaW5lc3NlcyA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NbbGlua3MubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGJ1c2luZXNzZXNbaV0gPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzKCk7Ci0gICAgICBidXNpbmVzc2VzW2ldLnNldExpbmsobGlua3NbaV0pOwotICAgIH0KLSAgICByZXR1cm4gYnVzaW5lc3NlczsKLSAgfQotCi0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVNlcnZpY2VbXSBnZXRGYXZvcml0ZXNVRERJU2VydmljZXMoKQotICB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gbG9hZFVERElTZXJ2aWNlcygpOwotICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlW10gdWRkaVNlcnZpY2VzID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlW3NlcnZpY2VzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB1ZGRpU2VydmljZXNbaV0gPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2UoKTsKLSAgICAgIHVkZGlTZXJ2aWNlc1tpXS5zZXRTZXJ2aWNlKHNlcnZpY2VzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVkZGlTZXJ2aWNlczsKLSAgfQotCi0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VbXSBnZXRGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZXMoKQotICB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gbG9hZFVERElTZXJ2aWNlSW50ZXJmYWNlcygpOwotICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlW10gc2VySW50cyA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZVtzZXJ2aWNlcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgc2VySW50c1tpXSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSgpOwotICAgICAgc2VySW50c1tpXS5zZXRTZXJ2aWNlKHNlcnZpY2VzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlckludHM7Ci0gIH0KLQotICBwdWJsaWMgSUZhdm9yaXRlc1dTRExbXSBnZXRGYXZvcml0ZXNXU0RMcygpCi0gIHsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBsb2FkV1NETFNlcnZpY2VzKCk7Ci0gICAgRmF2b3JpdGVzV1NETFtdIHdzZGxzID0gbmV3IEZhdm9yaXRlc1dTRExbc2VydmljZXMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHdzZGxzW2ldID0gbmV3IEZhdm9yaXRlc1dTREwoKTsKLSAgICAgIHdzZGxzW2ldLnNldFNlcnZpY2Uoc2VydmljZXNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gd3NkbHM7Ci0gIH0KLQotICBwdWJsaWMgSUZhdm9yaXRlc1dTSUxbXSBnZXRGYXZvcml0ZXNXU0lMcygpCi0gIHsKLSAgICBMaW5rW10gbGlua3MgPSBsb2FkV1NJTHMoKTsKLSAgICBGYXZvcml0ZXNXU0lMW10gd3NpbHMgPSBuZXcgRmF2b3JpdGVzV1NJTFtsaW5rcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgd3NpbHNbaV0gPSBuZXcgRmF2b3JpdGVzV1NJTCgpOwotICAgICAgd3NpbHNbaV0uc2V0TGluayhsaW5rc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiB3c2lsczsKLSAgfQotCi0gIHB1YmxpYyBMaW5rW10gbG9hZFVERElSZWdpc3RyaWVzKCkgewotICAgIHJldHVybiBsb2FkTGlua3NCeU5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjEpOwotICB9Ci0gICAgCi0gIHB1YmxpYyBMaW5rW10gbG9hZFVERElCdXNpbmVzc2VzKCkgewotICAgIHJldHVybiBsb2FkTGlua3NCeU5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjIpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2VbXSBsb2FkVURESVNlcnZpY2VzKCkgewotICAgIHJldHVybiBsb2FkU2VydmljZXNCeU5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjIpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2VbXSBsb2FkVURESVNlcnZpY2VJbnRlcmZhY2VzKCkgewotICAgIHJldHVybiBsb2FkU2VydmljZXNCeU5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjEpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2VbXSBsb2FkV1NETFNlcnZpY2VzKCkgewotICAgIHJldHVybiBsb2FkU2VydmljZXNCeU5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1dTREwpOwotICB9Ci0KLSAgcHVibGljIExpbmtbXSBsb2FkV1NJTHMoKSB7Ci0gICAgcmV0dXJuIGxvYWRMaW5rc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfV1NJTF9JTlNQRUNUSU9OKTsKLSAgfQotCi0gIHByaXZhdGUgU2VydmljZVtdIGxvYWRTZXJ2aWNlc0J5TmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpIHsKLSAgICBWZWN0b3Igc2VydmljZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIGlmICh3c2lsRG9jICE9IG51bGwpCi0gICAgewotICAgICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBpbnNwZWN0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICAgRGVzY3JpcHRpb25bXSBkZXNjID0gc2VydmljZXNbaV0uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICAgICBpZiAoZGVzY1swXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCkuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgICAgIHNlcnZpY2VWZWN0b3IuYWRkKHNlcnZpY2VzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gbmV3IFNlcnZpY2Vbc2VydmljZVZlY3Rvci5zaXplKCldOwotICAgIHNlcnZpY2VWZWN0b3IuY29weUludG8oc2VydmljZXMpOwotICAgIHJldHVybiBzZXJ2aWNlczsKLSAgfQotCi0gIHByaXZhdGUgTGlua1tdIGxvYWRMaW5rc0J5TmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpIHsKLSAgICBWZWN0b3IgbGlua1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIGlmICh3c2lsRG9jICE9IG51bGwpCi0gICAgewotICAgICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgICBMaW5rW10gbGlua3MgPSBpbnNwZWN0aW9uLmdldExpbmtzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpZiAobGlua3NbaV0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICAgIGxpbmtWZWN0b3IuYWRkKGxpbmtzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgTGlua1tdIGxpbmtzID0gbmV3IExpbmtbbGlua1ZlY3Rvci5zaXplKCldOwotICAgIGxpbmtWZWN0b3IuY29weUludG8obGlua3MpOwotICAgIHJldHVybiBsaW5rczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElSZWdpc3RyeShJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gICAgYWRkVURESVJlZ2lzdHJ5KHJlZ2lzdHJ5LmdldE5hbWUoKSwgcmVnaXN0cnkuZ2V0SW5xdWlyeVVSTCgpLCByZWdpc3RyeS5nZXRQdWJsaXNoVVJMKCksIHJlZ2lzdHJ5LmdldFJlZ2lzdHJhdGlvblVSTCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElCdXNpbmVzcyhJRmF2b3JpdGVzVURESUJ1c2luZXNzIGJ1c2luZXNzKQotICB7Ci0gICAgYWRkVURESUJ1c2luZXNzKGJ1c2luZXNzLmdldE5hbWUoKSwgYnVzaW5lc3MuZ2V0SW5xdWlyeVVSTCgpLCBidXNpbmVzcy5nZXRCdXNpbmVzc0tleSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElTZXJ2aWNlKElGYXZvcml0ZXNVRERJU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgYWRkVURESVNlcnZpY2Uoc2VydmljZS5nZXROYW1lKCksIHNlcnZpY2UuZ2V0SW5xdWlyeVVSTCgpLCBzZXJ2aWNlLmdldFNlcnZpY2VLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZShJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2Ugc2VydmljZUludGVyZmFjZSkKLSAgewotICAgIGFkZFVERElTZXJ2aWNlSW50ZXJmYWNlKHNlcnZpY2VJbnRlcmZhY2UuZ2V0TmFtZSgpLCBzZXJ2aWNlSW50ZXJmYWNlLmdldElucXVpcnlVUkwoKSwgc2VydmljZUludGVyZmFjZS5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzV1NETChJRmF2b3JpdGVzV1NETCB3c2RsKQotICB7Ci0gICAgYWRkV1NETFNlcnZpY2Uod3NkbC5nZXRXc2RsVXJsKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzV1NJTChJRmF2b3JpdGVzV1NJTCB3c2lsKQotICB7Ci0gICAgYWRkV1NJTExpbmsod3NpbC5nZXRXc2lsVXJsKCkpOwotICB9Ci0KLSAgcHVibGljIExpbmsgYWRkVURESVJlZ2lzdHJ5KFN0cmluZyByZWdpc3RyeU5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgcHVibGlzaEFQSSwgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCkgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgTGluayBsaW5rID0gbmV3IExpbmtJbXBsKCk7Ci0gICAgLy8gcmVnaXN0cnkgbmFtZQotICAgIEFic3RyYWN0IGFic3QgPSBuZXcgQWJzdHJhY3RJbXBsKCk7Ci0gICAgYWJzdC5zZXRUZXh0KHJlZ2lzdHJ5TmFtZSk7Ci0gICAgbGluay5hZGRBYnN0cmFjdChhYnN0KTsKLSAgICAvLyBpbnF1aXJ5IFVSTAotICAgIEFic3RyYWN0IGFic3QyID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGFic3QyLnNldFRleHQoaW5xdWlyeUFQSSk7Ci0gICAgbGluay5hZGRBYnN0cmFjdChhYnN0Mik7Ci0gICAgLy8gcHVibGlzaCBVUkwKLSAgICBBYnN0cmFjdCBhYnN0MyA9IG5ldyBBYnN0cmFjdEltcGwoKTsKLSAgICBpZiAocHVibGlzaEFQSSAhPSBudWxsKQotICAgICAgYWJzdDMuc2V0VGV4dChwdWJsaXNoQVBJKTsKLSAgICBlbHNlCi0gICAgICBhYnN0My5zZXRUZXh0KCIiKTsKLSAgICBsaW5rLmFkZEFic3RyYWN0KGFic3QzKTsKLSAgICAvLyByZWdpc3RyYXRpb24gVVJMCi0gICAgQWJzdHJhY3QgYWJzdDQgPSBuZXcgQWJzdHJhY3RJbXBsKCk7Ci0gICAgaWYgKHJlZ2lzdHJhdGlvblVSTCAhPSBudWxsKQotICAgICAgYWJzdDQuc2V0VGV4dChyZWdpc3RyYXRpb25VUkwpOwotICAgIGVsc2UKLSAgICAgIGFic3Q0LnNldFRleHQoIiIpOwotICAgIGxpbmsuYWRkQWJzdHJhY3QoYWJzdDQpOwotICAgIC8vIGFkZCBuYW1lc3BhY2UKLSAgICBsaW5rLnNldFJlZmVyZW5jZWROYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9VRERJX1YxKTsKLSAgICBpbnNwZWN0aW9uLmFkZExpbmsobGluayk7Ci0gICAgcmV0dXJuIGxpbms7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRVRERJQnVzaW5lc3MoU3RyaW5nIGJ1c2luZXNzTmFtZSwgU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBidXNpbmVzc0tleSkgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgTGluayBsaW5rID0gbmV3IExpbmtJbXBsKCk7Ci0gICAgQWJzdHJhY3QgYWJzdCA9IG5ldyBBYnN0cmFjdEltcGwoKTsKLSAgICBhYnN0LnNldFRleHQoYnVzaW5lc3NOYW1lKTsKLSAgICBsaW5rLmFkZEFic3RyYWN0KGFic3QpOwotICAgIGxpbmsuc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjIpOwotICAgIEJ1c2luZXNzRGVzY3JpcHRpb24gYmQgPSBuZXcgQnVzaW5lc3NEZXNjcmlwdGlvbkltcGwoKTsKLSAgICBiZC5zZXRMb2NhdGlvbihpbnF1aXJ5QVBJKTsKLSAgICBCdXNpbmVzc0tleSBrZXkgPSBuZXcgQnVzaW5lc3NLZXkoYnVzaW5lc3NLZXkpOwotICAgIGJkLnNldEJ1c2luZXNzS2V5KGtleSk7Ci0gICAgbGluay5zZXRFeHRlbnNpb25FbGVtZW50KGJkKTsKLSAgICBpbnNwZWN0aW9uLmFkZExpbmsobGluayk7Ci0gICAgcmV0dXJuIGxpbms7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBhZGRVRERJU2VydmljZShTdHJpbmcgc2VydmljZU5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgc2VydmljZUtleSkgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKCk7Ci0gICAgU2VydmljZU5hbWUgbmFtZSA9IG5ldyBTZXJ2aWNlTmFtZUltcGwoKTsKLSAgICBuYW1lLnNldFRleHQoc2VydmljZU5hbWUpOwotICAgIHNlcnZpY2UuYWRkU2VydmljZU5hbWUobmFtZSk7Ci0gICAgRGVzY3JpcHRpb24gZGVzYyA9IG5ldyBEZXNjcmlwdGlvbkltcGwoKTsKLSAgICBkZXNjLnNldFJlZmVyZW5jZWROYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9VRERJX1YyKTsKLSAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSBuZXcgU2VydmljZURlc2NyaXB0aW9uSW1wbCgpOwotICAgIHNkLnNldExvY2F0aW9uKGlucXVpcnlBUEkpOwotICAgIFNlcnZpY2VLZXkga2V5ID0gbmV3IFNlcnZpY2VLZXkoc2VydmljZUtleSk7Ci0gICAgc2Quc2V0U2VydmljZUtleShrZXkpOwotICAgIGRlc2Muc2V0RXh0ZW5zaW9uRWxlbWVudChzZCk7Ci0gICAgc2VydmljZS5hZGREZXNjcmlwdGlvbihkZXNjKTsKLSAgICBpbnNwZWN0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBhZGRVRERJU2VydmljZUludGVyZmFjZShTdHJpbmcgc2VySW50TmFtZSwgU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBzZXJJbnRLZXkpIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IG5ldyBTZXJ2aWNlSW1wbCgpOwotICAgIFNlcnZpY2VOYW1lIG5hbWUgPSBuZXcgU2VydmljZU5hbWVJbXBsKCk7Ci0gICAgbmFtZS5zZXRUZXh0KHNlckludE5hbWUpOwotICAgIHNlcnZpY2UuYWRkU2VydmljZU5hbWUobmFtZSk7Ci0gICAgRGVzY3JpcHRpb24gZGVzYyA9IG5ldyBEZXNjcmlwdGlvbkltcGwoKTsKLSAgICBkZXNjLnNldFJlZmVyZW5jZWROYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9VRERJX1YxKTsKLSAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSBuZXcgU2VydmljZURlc2NyaXB0aW9uSW1wbCgpOwotICAgIHNkLnNldExvY2F0aW9uKGlucXVpcnlBUEkpOwotICAgIFNlcnZpY2VLZXkga2V5ID0gbmV3IFNlcnZpY2VLZXkoc2VySW50S2V5KTsKLSAgICBzZC5zZXRTZXJ2aWNlS2V5KGtleSk7Ci0gICAgZGVzYy5zZXRFeHRlbnNpb25FbGVtZW50KHNkKTsKLSAgICBzZXJ2aWNlLmFkZERlc2NyaXB0aW9uKGRlc2MpOwotICAgIGluc3BlY3Rpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLSAgICByZXR1cm4gc2VydmljZTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFdTRExTZXJ2aWNlKFN0cmluZyB1cmwpIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IG5ldyBTZXJ2aWNlSW1wbCgpOwotICAgIERlc2NyaXB0aW9uIGRlc2MgPSBuZXcgRGVzY3JpcHRpb25JbXBsKCk7Ci0gICAgZGVzYy5zZXRMb2NhdGlvbih1cmwpOwotICAgIGRlc2Muc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1dTREwpOwotICAgIHNlcnZpY2UuYWRkRGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgaW5zcGVjdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIExpbmsgYWRkV1NJTExpbmsoU3RyaW5nIHVybCkgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgTGluayBsaW5rID0gbmV3IExpbmtJbXBsKCk7Ci0gICAgbGluay5zZXRMb2NhdGlvbih1cmwpOwotICAgIGxpbmsuc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1dTSUxfSU5TUEVDVElPTik7Ci0gICAgaW5zcGVjdGlvbi5hZGRMaW5rKGxpbmspOwotICAgIHJldHVybiBsaW5rOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESVJlZ2lzdHJ5KElGYXZvcml0ZXNVRERJUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgICBpZiAocmVnaXN0cnkgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJUmVnaXN0cnkpCi0gICAgICByZW1vdmVMaW5rKCgoRmF2b3JpdGVzVURESVJlZ2lzdHJ5KXJlZ2lzdHJ5KS5nZXRMaW5rKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESUJ1c2luZXNzKElGYXZvcml0ZXNVRERJQnVzaW5lc3MgYnVzaW5lc3MpCi0gIHsKLSAgICBpZiAoYnVzaW5lc3MgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJQnVzaW5lc3MpCi0gICAgICByZW1vdmVMaW5rKCgoRmF2b3JpdGVzVURESUJ1c2luZXNzKWJ1c2luZXNzKS5nZXRMaW5rKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESVNlcnZpY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBpZiAoc2VydmljZSBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlKQotICAgICAgcmVtb3ZlU2VydmljZSgoKEZhdm9yaXRlc1VERElTZXJ2aWNlKXNlcnZpY2UpLmdldFNlcnZpY2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZShJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2Ugc2VydmljZUludGVyZmFjZSkKLSAgewotICAgIGlmIChzZXJ2aWNlSW50ZXJmYWNlIGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UpCi0gICAgICByZW1vdmVTZXJ2aWNlKCgoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2Upc2VydmljZUludGVyZmFjZSkuZ2V0U2VydmljZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1dTREwoSUZhdm9yaXRlc1dTREwgd3NkbCkKLSAgewotICAgIGlmICh3c2RsIGluc3RhbmNlb2YgRmF2b3JpdGVzV1NETCkKLSAgICAgIHJlbW92ZVNlcnZpY2UoKChGYXZvcml0ZXNXU0RMKXdzZGwpLmdldFNlcnZpY2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNXU0lMKElGYXZvcml0ZXNXU0lMIHdzaWwpCi0gIHsKLSAgICBpZiAod3NpbCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTSUwpCi0gICAgICByZW1vdmVMaW5rKCgoRmF2b3JpdGVzV1NJTCl3c2lsKS5nZXRMaW5rKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlU2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIGluc3BlY3Rpb24ucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUxpbmsoTGluayBsaW5rKQotICB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBpbnNwZWN0aW9uLnJlbW92ZUxpbmsobGluayk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNzVmZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzU2VydmljZQotewotICBwcm90ZWN0ZWQgU2VydmljZSBzZXJ2aWNlXzsKLQotICBwdWJsaWMgRmF2b3JpdGVzU2VydmljZSgpCi0gIHsKLSAgICBzZXJ2aWNlXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgc2VydmljZV8gPSBzZXJ2aWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJQnVzaW5lc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1MWNiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuQnVzaW5lc3NEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzcyBleHRlbmRzIEZhdm9yaXRlc0xpbmsgaW1wbGVtZW50cyBJRmF2b3JpdGVzVURESUJ1c2luZXNzCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVRERJQnVzaW5lc3MoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKGxpbmtfLmdldEFic3RyYWN0cygpKVswXS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuICgoQnVzaW5lc3NEZXNjcmlwdGlvbilsaW5rXy5nZXRFeHRlbnNpb25FbGVtZW50KCkpLmdldExvY2F0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEJ1c2luZXNzS2V5KCkKLSAgewotICAgIHJldHVybiAoKEJ1c2luZXNzRGVzY3JpcHRpb24pbGlua18uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpKS5nZXRCdXNpbmVzc0tleSgpLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEJ1c2luZXNzS2V5KFN0cmluZyBrZXkpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZTI4YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkFic3RyYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIucGx1Z2luLlBhcnNlclBsdWdpbjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElSZWdpc3RyeSBleHRlbmRzIEZhdm9yaXRlc0xpbmsgaW1wbGVtZW50cyBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5Ci17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnkoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IChsaW5rXy5nZXRBYnN0cmFjdHMoKSlbMF0uZ2V0VGV4dCgpOwotICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoIiUiKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgdHJhbnNsYXRlZE5hbWUgPSBQYXJzZXJQbHVnaW4uZ2V0TWVzc2FnZShuYW1lKTsKLSAgICAgIGlmICh0cmFuc2xhdGVkTmFtZSAhPSBudWxsKQotICAgICAgICBuYW1lID0gdHJhbnNsYXRlZE5hbWU7Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiAobGlua18uZ2V0QWJzdHJhY3RzKCkpWzFdLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHVibGlzaFVSTCgpCi0gIHsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtfLmdldEFic3RyYWN0cygpOwotICAgIGlmIChhYnN0cmFjdHMubGVuZ3RoID4gMikKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IGFic3RyYWN0c1syXS5nZXRUZXh0KCk7Ci0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsICYmIHB1Ymxpc2hVUkwubGVuZ3RoKCkgPiAwKQotICAgICAgICByZXR1cm4gcHVibGlzaFVSTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpCi0gIHsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtfLmdldEFic3RyYWN0cygpOwotICAgIGlmIChhYnN0cmFjdHMubGVuZ3RoID4gMykKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gYWJzdHJhY3RzWzNdLmdldFRleHQoKTsKLSAgICAgIGlmIChyZWdpc3RyYXRpb25VUkwgIT0gbnVsbCAmJiByZWdpc3RyYXRpb25VUkwubGVuZ3RoKCkgPiAwKQotICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uVVJMOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAobGlua18uZ2V0QWJzdHJhY3RzKCkpWzBdLnNldFRleHQobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgKGxpbmtfLmdldEFic3RyYWN0cygpKVsxXS5zZXRUZXh0KGlucXVpcnlVUkwpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFVSTChTdHJpbmcgcHVibGlzaFVSTCkKLSAgewotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua18uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgaWYgKGFic3RyYWN0cy5sZW5ndGggPiAyKQotICAgICAgYWJzdHJhY3RzWzJdLnNldFRleHQocHVibGlzaFVSTCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZWdpc3RyYXRpb25VUkwoU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCkKLSAgewotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua18uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgaWYgKGFic3RyYWN0cy5sZW5ndGggPiAzKQotICAgICAgYWJzdHJhY3RzWzNdLnNldFRleHQocmVnaXN0cmF0aW9uVVJMKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzAwOWE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlIGV4dGVuZHMgRmF2b3JpdGVzU2VydmljZSBpbXBsZW1lbnRzIElGYXZvcml0ZXNVRERJU2VydmljZQotewotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2UoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKHNlcnZpY2VfLmdldFNlcnZpY2VOYW1lcygpKVswXS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gKFNlcnZpY2VEZXNjcmlwdGlvbikoc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2QuZ2V0TG9jYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUtleSgpCi0gIHsKLSAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSAoU2VydmljZURlc2NyaXB0aW9uKShzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgIHJldHVybiBzZC5nZXRTZXJ2aWNlS2V5KCkuZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUtleShTdHJpbmcga2V5KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYyZDlmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSBleHRlbmRzIEZhdm9yaXRlc1NlcnZpY2UgaW1wbGVtZW50cyBJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChzZXJ2aWNlXy5nZXRTZXJ2aWNlTmFtZXMoKSlbMF0uZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IChTZXJ2aWNlRGVzY3JpcHRpb24pKHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNkLmdldExvY2F0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKQotICB7Ci0gICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gKFNlcnZpY2VEZXNjcmlwdGlvbikoc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2QuZ2V0U2VydmljZUtleSgpLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VJbnRlcmZhY2VLZXkoU3RyaW5nIGtleSkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1dTREwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzV1NETC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTUzMmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzV1NETC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMIGV4dGVuZHMgRmF2b3JpdGVzU2VydmljZSBpbXBsZW1lbnRzIElGYXZvcml0ZXNXU0RMCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNXU0RMKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGdldFdzZGxVcmwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVybCgpCi0gIHsKLSAgICByZXR1cm4gKHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRMb2NhdGlvbigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVybChTdHJpbmcgd3NkbFVSTCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1dTSUwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzV1NJTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2NmMzJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzV1NJTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMIGV4dGVuZHMgRmF2b3JpdGVzTGluayBpbXBsZW1lbnRzIElGYXZvcml0ZXNXU0lMCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNXU0lMKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGdldFdzaWxVcmwoKTsKLSAgfQotCi0KLSAgcHVibGljIFN0cmluZyBnZXRXc2lsVXJsKCkKLSAgewotICAgIHJldHVybiBsaW5rXy5nZXRMb2NhdGlvbigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V3NpbFVybChTdHJpbmcgd3NpbFVSTCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNSZWdpc3RyeVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWM5NGE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZQotewotICBwdWJsaWMgSUZhdm9yaXRlc1VERElSZWdpc3RyeVtdIGdldEZhdm9yaXRlc1VERElSZWdpc3RyaWVzKCk7Ci0gIHB1YmxpYyBJRmF2b3JpdGVzVURESUJ1c2luZXNzW10gZ2V0RmF2b3JpdGVzVURESUJ1c2luZXNzZXMoKTsKLSAgcHVibGljIElGYXZvcml0ZXNVRERJU2VydmljZVtdIGdldEZhdm9yaXRlc1VERElTZXJ2aWNlcygpOwotICBwdWJsaWMgSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlW10gZ2V0RmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VzKCk7Ci0gIHB1YmxpYyBJRmF2b3JpdGVzV1NETFtdIGdldEZhdm9yaXRlc1dTRExzKCk7Ci0gIHB1YmxpYyBJRmF2b3JpdGVzV1NJTFtdIGdldEZhdm9yaXRlc1dTSUxzKCk7Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVJlZ2lzdHJ5KElGYXZvcml0ZXNVRERJUmVnaXN0cnkgcmVnaXN0cnkpOwotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJQnVzaW5lc3MoSUZhdm9yaXRlc1VERElCdXNpbmVzcyBidXNpbmVzcyk7Ci0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElTZXJ2aWNlKElGYXZvcml0ZXNVRERJU2VydmljZSBzZXJ2aWNlKTsKLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlIHNlcnZpY2VJbnRlcmZhY2UpOwotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNXU0RMKElGYXZvcml0ZXNXU0RMIHdzZGwpOwotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNXU0lMKElGYXZvcml0ZXNXU0lMIHdzaWwpOwotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElSZWdpc3RyeShJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IHJlZ2lzdHJ5KTsKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESUJ1c2luZXNzKElGYXZvcml0ZXNVRERJQnVzaW5lc3MgYnVzaW5lc3MpOwotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJU2VydmljZShJRmF2b3JpdGVzVURESVNlcnZpY2Ugc2VydmljZSk7Ci0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSBzZXJ2aWNlSW50ZXJmYWNlKTsKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzV1NETChJRmF2b3JpdGVzV1NETCB3c2RsKTsKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzV1NJTChJRmF2b3JpdGVzV1NJTCB3c2lsKTsgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESUJ1c2luZXNzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJQnVzaW5lc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE1NWYzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJQnVzaW5lc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNVRERJQnVzaW5lc3MKLXsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpOwotICBwdWJsaWMgU3RyaW5nIGdldEJ1c2luZXNzS2V5KCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpOwotICBwdWJsaWMgdm9pZCBzZXRCdXNpbmVzc0tleShTdHJpbmcga2V5KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNzMzMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5Ci17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpOwotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVVJMKFN0cmluZyBwdWJsaXNoVVJMKTsKLSAgcHVibGljIHZvaWQgc2V0UmVnaXN0cmF0aW9uVVJMKFN0cmluZyByZWdpc3RyYXRpb25VUkwpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ODBhNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNVRERJU2VydmljZQotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUtleSgpOwotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKTsKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUtleShTdHJpbmcga2V5KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDI3Yzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UKLXsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpOwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCk7Ci0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VJbnRlcmZhY2VLZXkoU3RyaW5nIGtleSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNXU0RMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNXU0RMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZjM2NmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzV1NETC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1dTREwKLXsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVybCgpOwotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgdm9pZCBzZXRXc2RsVXJsKFN0cmluZyB3c2RsVVJMKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTSUwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTSUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4ZGM0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNXU0lMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzV1NJTAotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRXc2lsVXJsKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyB2b2lkIHNldFdzaWxVcmwoU3RyaW5nIHdzaWxVUkwpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3BsdWdpbi9QYXJzZXJQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9wbHVnaW4vUGFyc2VyUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MzJiMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3BsdWdpbi9QYXJzZXJQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIucGx1Z2luOwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5NZXNzYWdlVXRpbHM7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXJzZXJQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBQYXJzZXJQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBQYXJzZXJQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSAgID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLlBhcnNlclBsdWdpblJlc291cmNlcyIpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUGFyc2VyUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBQYXJzZXJQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCi0JIC8qKgotCSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotCSAgKiB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBmb3IgdGhlIGFwcHJvcHJpYXRlIGxvY2FsZS4KLQkgICogQHBhcmFtIGtleSBUaGUgbWVzc2FnZSBrZXkgc3RyaW5nIHByZWZpeGVkIGJ5IGEgIiUiIHN5bWJvbC4KLQkgICogVGhhdCBpcywgdGhlIHN0cmluZyBwYXNzZWQgaW4gbXVzdCBiZSBvZiB0aGUgZm9ybSAiJUtFWSIKLQkgICogd2hlcmUgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGFpbnMgYSBsaW5lIG9mIHRoZQotCSAgKiBmb3JtOiAiS0VZID0gdmFsdWUiLgotCSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbWVzc2FnZS4KLQkgICovCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIGtleSApCi0JICB7Ci0JICAgIE1lc3NhZ2VVdGlscyBtc2dVdGlscyA9IG5ldyBNZXNzYWdlVXRpbHMoICJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLnBsdWdpbiIsIHBsdWdpbiApOwotCSAgICAKLQkgICAgaWYoIGtleS5zdGFydHNXaXRoKCIlIikpCi0JICAgIHsKLQkgICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKCAxLCBrZXkubGVuZ3RoKCkgKTsKLQkgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIG1zZ1V0aWxzLmdldE1lc3NhZ2Uoa2V5KTsKLQkgIH0KLQotCSAgLyoqCi0JICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaW5nIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tCi0JICAqIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGZvciB0aGUgYXBwcm9wcmlhdGUgbG9jYWxlLgotCSAgKiBTdWJzdGl0dXRpb24gc2VxdWVuY2VzIGluIHRoZSBtZXNzYWdlIHN0cmluZwotCSAgKiBhcmUgcmVwbGFjZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIHN1YnN0aXR1dGlvbiBvYmplY3RzICh3aGljaAotCSAgKiBhcmUgbW9zdCBmcmVxdWVudGx5IHN0cmluZ3MpLiBTZWUgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQgZm9yCi0JICAqIGZ1cnRoZXIgZGV0YWlscyBvbiBzdWJzdGl0dXRpb24uCi0JICAqIEBwYXJhbSBrZXkgVGhlIG1lc3NhZ2Uga2V5IHN0cmluZyBwcmVmaXhlZCBieSBhICIlIiBzeW1ib2wuCi0JICAqIFRoYXQgaXMsIHRoZSBzdHJpbmcgcGFzc2VkIGluIG11c3QgYmUgb2YgdGhlIGZvcm0gIiVLRVkiCi0JICAqIHdoZXJlIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRhaW5zIGEgbGluZSBvZiB0aGUKLQkgICogZm9ybTogIktFWSA9IHZhbHVlIi4KLQkgICogQHBhcmFtIGFyZ3MgVGhlIHN1YnN0aXR1dGlvbiB2YWx1ZXMgZm9yIHRoZSBtZXNzYWdlCi0JICAqIGFzIHJlcXVpcmVkIGJ5IHRoZSBtZXNzYWdlIGluIHBsdWdpbi5wcm9wZXJ0aWVzIGFuZAotCSAgKiBieSB0aGUgcnVsZXMgb2YgY2xhc3MgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQuCi0JICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBtZXNzYWdlLgotCSAgKi8KLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzICkKLQkgIHsKLQkgICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldE1lc3NhZ2Uoa2V5KSxhcmdzKTsKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL0hUTUxIZWFkSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvSFRNTEhlYWRIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2M2M2MGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvSFRNTEhlYWRIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQyMzI0IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi1wdWJsaWMgY2xhc3MgSFRNTEhlYWRIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIKLXsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFNUQVJUX1RBRyA9ICc8JzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIEVORF9UQUcgPSAnPic7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhFQURfU1RBUlRfVEFHID0gIjxoZWFkPiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhFQURfRU5EX1RBRyA9ICI8L2hlYWQ+IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUk9PVF9TVEFSVF9UQUcgPSAiPHJvb3Q+IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUk9PVF9FTkRfVEFHID0gIjwvcm9vdD4iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVVEY4ID0gIlVURi04IjsKLSAgCi0gIC8vSFRNTCBNRVRBIHRhZyBpbmZvcm1hdGlvbiB1c2VkIHRvIGRldGVjdCB0aGUgY2hhcnNldC4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRNTF9DT05URU5UID0gImNvbnRlbnQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0VRVUlWID0gImh0dHAtZXF1aXYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0VRVUlWX0NPTlRFTlRfVFlQRSA9ICJDb250ZW50LVR5cGUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDSEFSU0VUID0gImNoYXJzZXQiOwotICAKLSAgLy8gV1NJTCB0YWcgaW5mb3JtYXRpb24uCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIE1FVEEgPSAibWV0YSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIE5BTUUgPSAibmFtZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZJQ0VfSU5TUEVDVElPTiA9ICJzZXJ2aWNlSW5zcGVjdGlvbiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENPTlRFTlQgPSAiY29udGVudCI7Ci0gIAotICAvLyBESVNDTyB0YWcgaW5mb3JtYXRpb24uCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIExJTksgPSAibGluayI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFRZUEUgPSAidHlwZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFRFWFRfWE1MID0gInRleHQveG1sIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUkVMID0gInJlbCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFMVEVSTkFURSA9ICJhbHRlcm5hdGUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIUkVGID0gImhyZWYiOwotICAgIAotICBwcml2YXRlIFN0cmluZyBiYXNlVVJJXzsKLSAgcHJpdmF0ZSBWZWN0b3Igd3NpbHNfOwotICBwcml2YXRlIFZlY3RvciBkaXNjb3NfOwotICBwcml2YXRlIFN0cmluZyBieXRlRW5jb2RpbmcgPSBVVEY4OyAvL0RlZmF1bHQgdG8gVVRGLTguCi0gIAotICBwdWJsaWMgSFRNTEhlYWRIYW5kbGVyKFN0cmluZyBiYXNlVVJJKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBiYXNlVVJJXyA9IGJhc2VVUkk7Ci0gICAgd3NpbHNfID0gbmV3IFZlY3RvcigpOwotICAgIGRpc2Nvc18gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLSAKLSAgcHVibGljIFN0cmluZ1tdIGdldFdzaWxzKCkKLSAgewotICAgIFN0cmluZ1tdIHdzaWxzID0gbmV3IFN0cmluZ1t3c2lsc18uc2l6ZSgpXTsKLSAgICB3c2lsc18uY29weUludG8od3NpbHMpOwotICAgIHJldHVybiB3c2lsczsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldERpc2NvcygpCi0gIHsKLSAgICBTdHJpbmdbXSBkaXNjb3MgPSBuZXcgU3RyaW5nW2Rpc2Nvc18uc2l6ZSgpXTsKLSAgICBkaXNjb3NfLmNvcHlJbnRvKGRpc2Nvcyk7Ci0gICAgcmV0dXJuIGRpc2NvczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcU5hbWVMQyA9IHFOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgaWYgKHFOYW1lTEMuZXF1YWxzKE1FVEEpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lVmFsdWUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKE5BTUUpOwotICAgICAgaWYgKFNFUlZJQ0VfSU5TUEVDVElPTi5lcXVhbHMobmFtZVZhbHVlKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHdzaWxVUkkgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKENPTlRFTlQpOwotICAgICAgICBpZiAoYmFzZVVSSV8gIT0gbnVsbCAmJiB3c2lsVVJJLmluZGV4T2YoIjovIikgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgc2IuYXBwZW5kKGJhc2VVUklfLnN1YnN0cmluZygwLCBiYXNlVVJJXy5sYXN0SW5kZXhPZigiLyIpKzEpKTsKLSAgICAgICAgICBzYi5hcHBlbmQod3NpbFVSSSk7Ci0gICAgICAgICAgd3NpbFVSSSA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF3c2lsc18uY29udGFpbnMod3NpbFVSSSkpCi0gICAgICAgICAgd3NpbHNfLmFkZCh3c2lsVVJJKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAocU5hbWVMQy5lcXVhbHMoTElOSykpCi0gICAgewotICAgICAgLy8gU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbXNkbm1hZy9pc3N1ZXMvMDIvMDIveG1sL2RlZmF1bHQuYXNweCBmb3IgbW9yZSBkZXRhaWxzIG9uIERJU0NPLgotICAgICAgU3RyaW5nIHR5cGUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFRZUEUpOwotICAgICAgU3RyaW5nIHJlbCA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoUkVMKTsKLSAgICAgIFN0cmluZyBocmVmID0gYXR0cmlidXRlcy5nZXRWYWx1ZShIUkVGKTsKLSAgICAgIGlmIChURVhUX1hNTC5lcXVhbHModHlwZSkgJiYgQUxURVJOQVRFLmVxdWFscyhyZWwpICYmIGhyZWYgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGRpc2NvVVJJID0gaHJlZjsKLSAgICAgICAgaWYgKGRpc2NvVVJJLmluZGV4T2YoIjovIikgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgc2IuYXBwZW5kKGJhc2VVUklfLnN1YnN0cmluZygwLGJhc2VVUklfLmxhc3RJbmRleE9mKCIvIikrMSkpOwotICAgICAgICAgIHNiLmFwcGVuZChkaXNjb1VSSSk7Ci0gICAgICAgICAgZGlzY29VUkkgPSBzYi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZGlzY29zXy5jb250YWlucyhkaXNjb1VSSSkpCi0gICAgICAgICAgZGlzY29zXy5hZGQoZGlzY29VUkkpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiB0aGUgcHJvdmlkZWQgdGFnIGluIHRoZSBwcm92aWRlZCBkb2N1bWVudCB0byB0aGUgcHJvdmlkZWQgU3RyaW5nQnVmZmVyLgotICAgKiBAcGFyYW0gdGFyZ2V0Ci0gICAqIEBwYXJhbSBkb2N1bWVudAotICAgKiBAcGFyYW0gdGFnCi0gICAqIEBwYXJhbSBlbmNvZGluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4gZmFsc2UgaWYgdGhlIHZhbHVlIG9mIHRoZSBlbmNvZGluZyBwYXJhbWV0ZXIgbWF0Y2hlZCB0aGUgZGV0ZWN0ZWQgY2hhcnNldCBvciBpZiBubyBjaGFyc2V0IHdhcyBkZXRlY3RlZC4KLSAgICogUmV0dXJucyB0cnVlIGlmIGEgY2hhcnNldCB3YXMgZGV0ZWN0ZWQgYW5kIGl0IGRpZCBub3QgZXF1YWwgdGhlIGVuY29kaW5nIHBhcmFtZXRlci4gSWYgdHJ1ZSBpcyByZXR1cm5lZAotICAgKiB0aGUgaGFydmVzdGluZyBvZiB0aGUgdGFncyB3b3VsZCBoYXZlIHN0b3BwZWQgYXQgdGhlIHBvaW50IHRoZSBjaGFyc2V0IHdhcyBkZXRlY3RlZC4gVGhlIGNhbGxlcgotICAgKiBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBhZ2FpbiB3aXRoIHRoZSBjb3JyZWN0IGVuY29kaW5nLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGhhcnZlc3RUYWdzKFN0cmluZ0J1ZmZlciB0YXJnZXQsU3RyaW5nIGRvY3VtZW50LFN0cmluZyB0YWcsIFN0cmluZyBlbmNvZGluZykKLSAgewotCWJvb2xlYW4gY2hhbmdlRW5jb2RpbmcgPSBmYWxzZTsKLSAgICBpbnQgaW5kZXggPSBkb2N1bWVudC5pbmRleE9mKFNUQVJUX1RBRyk7Ci0gICAgaW50IGRvY3VtZW50TGVuZ3RoID0gZG9jdW1lbnQubGVuZ3RoKCk7Ci0gICAgaW50IHRhZ0xlbmd0aCA9IHRhZy5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaW5kZXggIT0gLTEgJiYgKGluZGV4KzErdGFnTGVuZ3RoKTxkb2N1bWVudExlbmd0aCkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gZG9jdW1lbnQuc3Vic3RyaW5nKGluZGV4KzEsaW5kZXgrMSt0YWdMZW5ndGgpOwotICAgICAgaWYgKHN0ci50b0xvd2VyQ2FzZSgpLmVxdWFscyh0YWcpKQotICAgICAgewotICAgICAgICBzdHIgPSBkb2N1bWVudC5zdWJzdHJpbmcoaW5kZXgsZG9jdW1lbnQuaW5kZXhPZihFTkRfVEFHLGluZGV4KzEpKzEpOwotICAgICAgICB0YXJnZXQuYXBwZW5kKHN0cik7Ci0gICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGgoKTsKLSAgICAgICAgCi0gICAgICAgIC8vSWYgdGFnIGlzIE1FVEEgYW5kIGRlY2xhcmVzIHRoZSBjaGFyc2V0LCBmaW5kIG91dCB3aGF0IGl0IGlzCi0gICAgICAgIC8vYW5kIGlmIGl0IG1hdGNoZXMgd2hhdCB3YXMgcGFzc2VkIGluLiBJZiBpdCBtYXRjaGVzLCBjb250aW51ZSAKLSAgICAgICAgLy93aXRoIHRoZSBwYXJzaW5nIGFuZCByZXR1cm4gZmFsc2Ugd2hlbiBjb21wbGV0ZS4gCi0gICAgICAgIC8vSWYgdGhlIGRldGVjdGVkIGNoYXJzZXQgaXMgZGlmZmVyZW50IGZyb20gd2hhdCB3YXMgcGFzc2VkIGluLCAKLSAgICAgICAgLy8tIGNoYW5nZSBieXRlRW5jb2RpbmcgdG8gZXF1YWwgdGhlIGRldGVjdGVkIGNoYXJzZXQuCi0gICAgICAgIC8vLSBzdG9wIHBhcnNpbmcuCi0gICAgICAgIC8vLSByZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKHRhZy5lcXVhbHMoTUVUQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgaWR4T2ZDb250ZW50ID0gc3RyLmluZGV4T2YoSFRNTF9DT05URU5UKTsKLSAgICAgICAgICBpbnQgaWR4T2ZIVFRQRVFVSVYgPSBzdHIuaW5kZXhPZihIVFRQX0VRVUlWKTsKLSAgICAgICAgICBpZiAoaWR4T2ZIVFRQRVFVSVYhPSAtMSAmJiBpZHhPZkNvbnRlbnQgIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAJLy9DaGVjayBpZiB0aGUgaHR0cC1lcXVpdiBhdHRyaWJ1dGUgaXMgc2V0IHRvIENvbnRlbnQtVHlwZS4KLSAgICAgICAgICAJaW50IGlkeE9mSFRUUEVRVUlWT3BlblF1b3RlID0gc3RyLmluZGV4T2YoIlwiIiwgaWR4T2ZIVFRQRVFVSVYrMSk7Ci0gICAgICAgIAlpbnQgaWR4T2ZIVFRQRVFVSVZDbG9zaW5nUXVvdGUgPSBzdHIuaW5kZXhPZigiXCIiLCBpZHhPZkhUVFBFUVVJVk9wZW5RdW90ZSsxKTsKLSAgICAgICAgCVN0cmluZyBoVFRQRVFVSVZWYWx1ZVVudHJpbW1lZCA9IHN0ci5zdWJzdHJpbmcoaWR4T2ZIVFRQRVFVSVZPcGVuUXVvdGUrMSwgaWR4T2ZIVFRQRVFVSVZDbG9zaW5nUXVvdGUpOwotICAgICAgICAJaWYgKGhUVFBFUVVJVlZhbHVlVW50cmltbWVkLnRyaW0oKS5lcXVhbHMoSFRUUF9FUVVJVl9DT05URU5UX1RZUEUpKQotICAgICAgICAJewotICAgICAgICAJICAvL1RoaXMgTUVUQSB0YWcgY29udGFpbnMgdGhlIGNoYXJzZXQuIEdldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRlbnQgYXR0cmlidXRlCi0gICAgICAgIAkgIGludCBpZHhPZk9wZW5RdW90ZSA9IHN0ci5pbmRleE9mKCJcIiIsIGlkeE9mQ29udGVudCsxKTsKLSAgICAgICAgCSAgaW50IGlkeE9mQ2xvc2luZ1F1b3RlID0gc3RyLmluZGV4T2YoIlwiIiwgaWR4T2ZPcGVuUXVvdGUrMSk7Ci0gICAgICAgIAkgIFN0cmluZyBjb250ZW50VmFsdWUgPSBzdHIuc3Vic3RyaW5nKGlkeE9mT3BlblF1b3RlKzEsIGlkeE9mQ2xvc2luZ1F1b3RlKTsKLSAgICAgICAgCSAgCi0gICAgICAgIAkgIC8vR2V0IHRoZSBjaGFyc2V0Ci0gICAgICAgIAkgIGludCBpZHhPZkNoYXJTZXQgPSBjb250ZW50VmFsdWUuaW5kZXhPZihDSEFSU0VUKTsKLSAgICAgICAgCSAgaW50IGlkeE9mRXF1YWxzID0gY29udGVudFZhbHVlLmluZGV4T2YoIj0iLCBpZHhPZkNoYXJTZXQrQ0hBUlNFVC5sZW5ndGgoKSk7Ci0gICAgICAgIAkgIFN0cmluZyBkZXRlY3RlZEVuY29kaW5nVmFsdWVVbnRyaW1tZWQgPSBjb250ZW50VmFsdWUuc3Vic3RyaW5nKGlkeE9mRXF1YWxzKzEpOwotICAgICAgICAJICBTdHJpbmcgZGV0ZWN0ZWRFbmNvZGluZ1ZhbHVlID0gZGV0ZWN0ZWRFbmNvZGluZ1ZhbHVlVW50cmltbWVkLnRyaW0oKTsKLSAgICAgICAgCSAgaWYgKCFkZXRlY3RlZEVuY29kaW5nVmFsdWUuZXF1YWxzKGVuY29kaW5nKSkKLSAgICAgICAgCSAgewotICAgICAgICAJICAgIGJ5dGVFbmNvZGluZyA9IGRldGVjdGVkRW5jb2RpbmdWYWx1ZTsKLSAgICAgICAgCSAgICBjaGFuZ2VFbmNvZGluZyA9IHRydWU7Ci0gICAgICAgIAkgICAgYnJlYWs7Ci0gICAgICAgIAkgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgaW5kZXgrKzsKLSAgICAgIGluZGV4ID0gZG9jdW1lbnQuaW5kZXhPZihTVEFSVF9UQUcsaW5kZXgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY2hhbmdlRW5jb2Rpbmc7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICAqIElmIHRoZSBwcm92aWRlZCBieXRlIGFycmF5IHJlcGVyZXNlbnRzIHRoZSBjb250ZW50cyBvZiBhbiBIVE1MCi0gICAqIGRvY3VtZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBhIGJ5dGUgYXJyYXkgaW4gd2hpY2gKLSAgICogPHVsPgotICAgKiA8bGk+dGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgSEVBRCB0YWdzIGFyZSByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIAotICAgKiBvcGVuaW5nIGFuZCBjbG9zaW5nIDxyb290PiB0YWdzPC9saT4KLSAgICogPGxpPm9ubHkgdGhlIE1FVEEgYW5kIExJTksgZWxlbWVudHMgYXJlIGluIHRoZSBIVE1MIGRvY3VtZW50Ci0gICAqIGFyZSBpbmNsdWRlZCBpbiB0aGUgY29udGVudHMgYmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZwotICAgKiA8cm9vdD4gdGFncy4KLSAgICogPC91bD4KLSAgICogVGhpcyBtZXRob2Qgd2lsbCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBieXRlRW5jb2RpbmcgU3RyaW5nCi0gICAqIGF0dHJpYnV0ZSBvbiB0aGlzIGNsYXNzIGlmIGl0IGlzIHNvbWV0aGluZyBvdGhlciB0aGFuCi0gICAqIFVURi04LiBDYWxsZXJzIG9mIHRoaXMgbWV0aG9kIHNob3VsZCBjYWxsIGdldEJ5dGVFbmNvZGluZygpCi0gICAqIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVkIHRvIGtub3cgdGhlIGNoYXJzZXQKLSAgICogdmFsdWUgdXNlZCBieSB0aGlzIG1ldGhvZCB0byBkZWNvZGUvZW5kY29kZSB0aGUgYnl0ZSBhcnJheS4KLSAgICogQHBhcmFtIGIKLSAgICogQHJldHVybiBieXRlW10KLSAgICovCi0gIHB1YmxpYyBieXRlW10gaGFydmVzdEhlYWRUYWdzKGJ5dGVbXSBiKQotICB7Ci0gICAgU3RyaW5nIHM7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgIAkvL0Fzc3VtZSB0aGUgZGVmYXVsdCBieXRlIGVuY29kaW5nIG9mIFVURi04IGZvciBub3cuCi0gICAgCXMgPSBuZXcgU3RyaW5nKGIsIGJ5dGVFbmNvZGluZyk7Ci0gICAgfQotICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLSAgICB7Ci0gICAgICBzID0gbmV3IFN0cmluZyhiKTsKLSAgICB9Ci0gICAgU3RyaW5nIGhlYWQgPSBzLnRvTG93ZXJDYXNlKCk7Ci0gICAgaW50IGhlYWRTdGFydEluZGV4ID0gaGVhZC5pbmRleE9mKEhFQURfU1RBUlRfVEFHKTsKLSAgICBpbnQgaGVhZEVuZEluZGV4ID0gaGVhZC5pbmRleE9mKEhFQURfRU5EX1RBRyk7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZChST09UX1NUQVJUX1RBRyk7Ci0gICAgaWYgKGhlYWRTdGFydEluZGV4ICE9IC0xICYmIGhlYWRFbmRJbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBoZWFkID0gcy5zdWJzdHJpbmcoaGVhZFN0YXJ0SW5kZXgsIGhlYWRFbmRJbmRleCtIRUFEX0VORF9UQUcubGVuZ3RoKCkpOwotICAgICAgYm9vbGVhbiBlbmNvZGluZ0NoYW5nZWQgPSBoYXJ2ZXN0VGFncyhzYixoZWFkLE1FVEEsIGJ5dGVFbmNvZGluZyk7Ci0gICAgICBpZiAoZW5jb2RpbmdDaGFuZ2VkKQotICAgICAgewotICAgIAkgIC8vVGhlIGhhcnZlc3RUYWdzIG1ldGhvZCBkZXRlY3RlZCBhIGRpZmZlcmVudCBjaGFyc2V0Ci0gICAgCSAgLy90aGFuIHRoZSBvbmUgdGhhdCB3YXMgcGFzc2VkIGluLiBTdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcKLSAgICAJICAvL3dpdGggdGhlIGNvcnJlY3QgY2hhcnNldC4KLSAgICAJICAgIFN0cmluZyBzMjsKLSAgICAJICAgIHRyeQotICAgIAkgICAgewotICAgIAkgICAgCXMyID0gbmV3IFN0cmluZyhiLCBieXRlRW5jb2RpbmcpOwotICAgIAkgICAgfQotICAgIAkgICAgY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKQotICAgIAkgICAgewotICAgIAkgICAgICBzMiA9IG5ldyBTdHJpbmcoYik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICBTdHJpbmcgaGVhZDIgPSBzMi50b0xvd2VyQ2FzZSgpOwotICAgIAkgICAgaW50IGhlYWQyU3RhcnRJbmRleCA9IGhlYWQyLmluZGV4T2YoSEVBRF9TVEFSVF9UQUcpOwotICAgIAkgICAgaW50IGhlYWQyRW5kSW5kZXggPSBoZWFkMi5pbmRleE9mKEhFQURfRU5EX1RBRyk7Ci0gICAgCSAgICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAJICAgIHNiLmFwcGVuZChST09UX1NUQVJUX1RBRyk7Ci0gICAgCSAgICBpZiAoaGVhZDJTdGFydEluZGV4ICE9IC0xICYmIGhlYWQyRW5kSW5kZXggIT0gLTEpCi0gICAgCSAgICB7Ci0gICAgCSAgICAgIGhlYWQyID0gczIuc3Vic3RyaW5nKGhlYWQyU3RhcnRJbmRleCwgaGVhZDJFbmRJbmRleCtIRUFEX0VORF9UQUcubGVuZ3RoKCkpOwotICAgIAkgICAgICBoYXJ2ZXN0VGFncyhzYixoZWFkMixNRVRBLCBieXRlRW5jb2RpbmcpOwotICAgIAkgICAgICBoYXJ2ZXN0VGFncyhzYixoZWFkMixMSU5LLGJ5dGVFbmNvZGluZyk7Ci0gICAgCSAgICB9ICAgIAkgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoYXJ2ZXN0VGFncyhzYixoZWFkLExJTkssYnl0ZUVuY29kaW5nKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc2IuYXBwZW5kKFJPT1RfRU5EX1RBRyk7Ci0gICAgdHJ5Ci0gICAgewotICAgIAlyZXR1cm4gc2IudG9TdHJpbmcoKS5nZXRCeXRlcyhieXRlRW5jb2RpbmcpOyAgICAgIAotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKQotICAgIHsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpLmdldEJ5dGVzKCk7Ci0gICAgfSAgICAKLSAgICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRCeXRlRW5jb2RpbmcoKQotICB7Ci0JICByZXR1cm4gYnl0ZUVuY29kaW5nOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9JbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9JbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhN2ZlMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLXB1YmxpYyBjbGFzcyBJbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0yNTMzOTgxMTc2Mjg1NTYxMjM0TDsKLQotICBwdWJsaWMgSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbihTdHJpbmcgYXJnKQotICB7Ci0gICAgc3VwZXIoYXJnKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvVURESVVSSUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvVURESVVSSUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzNlODk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1VERElVUklIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgVURESVVSSUhlbHBlcgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllTRVJWSUNFX1VSSV9URU1QTEFURSA9ICJ1ZGRpc2VydmljZTpxdWVyeTp7MH06cXVlcnk6ezF9IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VLRVlfVVJJX1RFTVBMQVRFID0gInVkZGlzZXJ2aWNlOnNlcnZpY2VLZXk6ezB9OnNlcnZpY2VLZXk6ezF9IjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldFF1ZXJ5U2VydmljZVVSSShTdHJpbmcgcXVlcnksU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICBTdHJpbmdbXSB1cmlQYXJhbXMgPSB7cXVlcnksaW5xdWlyeVVSTH07Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFFVRVJZU0VSVklDRV9VUklfVEVNUExBVEUsdXJpUGFyYW1zKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0U2VydmljZUtleVVSSShTdHJpbmcgc2VydmljZUtleSxTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIFN0cmluZ1tdIHVyaVBhcmFtcyA9IHtzZXJ2aWNlS2V5LGlucXVpcnlVUkx9OwotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChTRVJWSUNFS0VZX1VSSV9URU1QTEFURSx1cmlQYXJhbXMpOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBwYXJzZVVSSShTdHJpbmcgcGF0dGVybixTdHJpbmcgdXJpKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTWVzc2FnZUZvcm1hdCBtZiA9IG5ldyBNZXNzYWdlRm9ybWF0KHBhdHRlcm4pOwotICAgICAgT2JqZWN0W10gcGFyc2VkUmVzdWx0cyA9IG1mLnBhcnNlKHVyaSk7Ci0gICAgICBpZiAocGFyc2VkUmVzdWx0cyAhPSBudWxsICYmIHBhcnNlZFJlc3VsdHMubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nW10gcmVzdWx0cyA9IG5ldyBTdHJpbmdbcGFyc2VkUmVzdWx0cy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpPTA7aTxwYXJzZWRSZXN1bHRzLmxlbmd0aDtpKyspCi0gICAgICAgICAgcmVzdWx0c1tpXSA9IChTdHJpbmcpcGFyc2VkUmVzdWx0c1tpXTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBwYXJzZVNlcnZpY2VLZXlVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHJldHVybiBwYXJzZVVSSShTRVJWSUNFS0VZX1VSSV9URU1QTEFURSx1cmkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHBhcnNlUXVlcnlTZXJ2aWNlVVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICByZXR1cm4gcGFyc2VVUkkoUVVFUllTRVJWSUNFX1VSSV9URU1QTEFURSx1cmkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XU0lMTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dTSUxNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjg2YmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dTSUxNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgV1NJTE1lc3NhZ2VzIGV4dGVuZHMgTkxTCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwud3NpbCI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHN0YXRpYwotICB7Ci0gICAgTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV1NJTE1lc3NhZ2VzLmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTlZBTElEX0FSR1VNRU5UUzsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lMTEVHQUxfQVJHVU1FTlRTOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSSTsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOVkFMSURfV1NJTF9VUkk7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTlJFU09MVkFCTEVfV1NETDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfTUFMRk9STUVEX1dTREw7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XUklURV9XU0lMOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjZhZTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNDkxODIxMTAyMTYyMDMxNjA0OUw7Ci0KLSAgcHJpdmF0ZSBJT0V4Y2VwdGlvbiBpb2VfOwotICBwcml2YXRlIFN0cmluZyB3d3dBdXRoTXNnXzsKLSAgcHJpdmF0ZSBTdHJpbmcgdXJsXzsKLQotICBwdWJsaWMgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24oSU9FeGNlcHRpb24gaW9lLCBTdHJpbmcgd3d3QXV0aE1zZywgU3RyaW5nIHVybCkKLSAgewotICAgIHN1cGVyKGlvZS5nZXRNZXNzYWdlKCkpOwotICAgIGlvZV8gPSBpb2U7Ci0gICAgd3d3QXV0aE1zZ18gPSB3d3dBdXRoTXNnOwotICAgIHVybF8gPSB1cmw7Ci0gIH0KLQotICBwdWJsaWMgSU9FeGNlcHRpb24gZ2V0SU9FeGNlcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIGlvZV87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdXV0F1dGhlbnRpY2F0aW9uTXNnKCkKLSAgewotICAgIHJldHVybiB3d3dBdXRoTXNnXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJMKCkKLSAgewotICAgIHJldHVybiB1cmxfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dXV0F1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmRlYmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dXV0F1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgV1dXQXV0aGVudGljYXRpb25IYW5kbGVyCi17Ci0gIHB1YmxpYyB2b2lkIGhhbmRsZVdXV0F1dGhlbnRpY2F0aW9uKFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHd3d2FlKTsKLSAgcHVibGljIFN0cmluZyBnZXRVc2VybmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlRW50aXR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlRW50aXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MTdiZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV2ViU2VydmljZUVudGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VFbnRpdHkKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9VTktOT1dOID0gLTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfSFRNTCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfV1NJTCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfV1NETCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfVURESV9TRVJWSUNFID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9ESVNDTyA9IDQ7Ci0KLSAgcHJpdmF0ZSBPYmplY3QgcGFyZW50XzsKLSAgcHJpdmF0ZSBMaXN0IGNoaWxkcmVuXzsKLSAgcHJpdmF0ZSBpbnQgdHlwZV87Ci0gIHByaXZhdGUgU3RyaW5nIHVyaV87Ci0gIHByaXZhdGUgYnl0ZVtdIGJ5dGVzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cFVzZXJuYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cFBhc3N3b3JkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZG9jdW1lbnRhdGlvbl87Ci0gIHByaXZhdGUgT2JqZWN0IG1vZGVsXzsKLQotICBwdWJsaWMgV2ViU2VydmljZUVudGl0eSgpCi0gIHsKLSAgICBwYXJlbnRfID0gbnVsbDsKLSAgICBjaGlsZHJlbl8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgdHlwZV8gPSBUWVBFX1VOS05PV047Ci0gICAgdXJpXyA9IG51bGw7Ci0gICAgYnl0ZXNfID0gbnVsbDsKLSAgICBodHRwVXNlcm5hbWVfID0gbnVsbDsKLSAgICBodHRwUGFzc3dvcmRfID0gbnVsbDsKLSAgICBkb2N1bWVudGF0aW9uXyA9IG51bGw7Ci0gICAgbW9kZWxfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KCkKLSAgewotICAgIHJldHVybiBwYXJlbnRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyZW50KE9iamVjdCBwYXJlbnQpCi0gIHsKLSAgICBwYXJlbnRfID0gcGFyZW50OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0Q2hpbGRyZW4oKQotICB7Ci0gICAgcmV0dXJuIGNoaWxkcmVuXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZENoaWxkKE9iamVjdCBjaGlsZCkKLSAgewotICAgIGNoaWxkcmVuXy5hZGQoY2hpbGQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlQ2hpbGQoT2JqZWN0IGNoaWxkKQotICB7Ci0gICAgY2hpbGRyZW5fLnJlbW92ZShjaGlsZCk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHR5cGVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VHlwZShpbnQgdHlwZSkKLSAgewotICAgIHR5cGVfID0gdHlwZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkKLSAgewotICAgIHJldHVybiB1cmlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICB1cmlfID0gdXJpOwotICB9Ci0KLSAgcHVibGljIGJ5dGVbXSBnZXRCeXRlcygpCi0gIHsKLSAgICByZXR1cm4gYnl0ZXNfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Qnl0ZXMoYnl0ZVtdIGJ5dGVzKQotICB7Ci0gICAgYnl0ZXNfID0gYnl0ZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEhUVFBVc2VybmFtZSgpCi0gIHsKLSAgICByZXR1cm4gaHR0cFVzZXJuYW1lXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEhUVFBVc2VybmFtZShTdHJpbmcgaHR0cFVzZXJuYW1lKQotICB7Ci0gICAgaHR0cFVzZXJuYW1lXyA9IGh0dHBVc2VybmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SFRUUFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBodHRwUGFzc3dvcmRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SFRUUFBhc3N3b3JkKFN0cmluZyBodHRwUGFzc3dvcmQpCi0gIHsKLSAgICBodHRwUGFzc3dvcmRfID0gaHR0cFBhc3N3b3JkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERvY3VtZW50YXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGRvY3VtZW50YXRpb25fOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudGF0aW9uKFN0cmluZyBkb2N1bWVudGF0aW9uKQotICB7Ci0gICAgZG9jdW1lbnRhdGlvbl8gPSBkb2N1bWVudGF0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldE1vZGVsKCkKLSAgewotICAgIHJldHVybiBtb2RlbF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZGVsKE9iamVjdCBtb2RlbCkKLSAgewotICAgIG1vZGVsXyA9IG1vZGVsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNFbnRpdHlSZXNvbHZlZCgpCi0gIHsKLSAgICByZXR1cm4gKGJ5dGVzXyAhPSBudWxsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV2ViU2VydmljZXNQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dlYlNlcnZpY2VzUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1Y2I0MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV2ViU2VydmljZXNQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDQgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MTcgICAxNDIzMjQgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDcxMSAgIDE1MDMwMSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDgxOCAgIDE1NDM5MyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDkwNiAgIDE1NjQyMCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5JbnNwZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi5FeHRlbnNpb25FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlVERElDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvLkRJU0NPQ29udHJhY3RSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjby5ESVNDT1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvLkRJU0NPUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IHN1bi5taXNjLkJBU0U2NEVuY29kZXI7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlc1BhcnNlcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJTRV9OT05FID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFSU0VfV1NJTCA9IDE8PDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlNFX1dTREwgPSAxPDwxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJTRV9MSU5LUyA9IDE8PDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlNFX0RJU0NPID0gMTw8MzsKLQotICBwcml2YXRlIFN0cmluZyB1cmlfOwotICBwcml2YXRlIEhhc2h0YWJsZSB1cmlUb0VudGl0eVRhYmxlXzsKLQotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWVfOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmRfOwotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICB0aGlzKG51bGwpOwotICB9Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyKFN0cmluZyB1cmkpCi0gIHsKLSAgICB1cmlfID0gdXJpOwotICAgIHVyaVRvRW50aXR5VGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGh0dHBCYXNpY0F1dGhVc2VybmFtZV8gPSBudWxsOwotICAgIGh0dHBCYXNpY0F1dGhQYXNzd29yZF8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHVyaV8gPSB1cmk7Ci0gIH0KLQotICBwdWJsaWMgV2ViU2VydmljZUVudGl0eSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIGlmICh1cmkgIT0gbnVsbCkKLSAgICAgIHJldHVybiAoV2ViU2VydmljZUVudGl0eSl1cmlUb0VudGl0eVRhYmxlXy5nZXQodXJpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHdzaWxVUkkKLSAgICogQHJldHVybgotICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIGdldFdTSUxEb2N1bWVudFZlcmJvc2UoU3RyaW5nLCBTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgV1NJTERvY3VtZW50IGdldFdTSUxEb2N1bWVudChTdHJpbmcgd3NpbFVSSSApCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0V1NJTERvY3VtZW50VmVyYm9zZSh3c2lsVVJJLCAiVVRGLTgiICk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSB3c2lsVVJJCi0gICAqIEByZXR1cm4KLSAgICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbgotICAgKiBAdGhyb3dzIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gICAqIEB0aHJvd3MgV1NJTEV4Y2VwdGlvbgotICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIGdldFdTSUxEb2N1bWVudFZlcmJvc2UoU3RyaW5nLCBTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgV1NJTERvY3VtZW50IGdldFdTSUxEb2N1bWVudFZlcmJvc2UoU3RyaW5nIHdzaWxVUkkgKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24sIFdTSUxFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKCB3c2lsVVJJLCAiVVRGLTgiICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50VmVyYm9zZShTdHJpbmcgd3NpbFVSSSwgU3RyaW5nIGJ5dGVFbmNvZGluZyApIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiwgV1NJTEV4Y2VwdGlvbgotICB7Ci0gICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3c2lsVVJJKTsKLSAgICAKLSAgICBpZiAod3NFbnRpdHkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c0VudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICB3c0VudGl0eS5zZXRVUkkod3NpbFVSSSk7Ci0gICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQod3NpbFVSSSwgd3NFbnRpdHkpOwotICAgIH0KLSAgICAKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvY3VtZW50ID0gKFdTSUxEb2N1bWVudCl3c0VudGl0eS5nZXRNb2RlbCgpOwotICAgIAotICAgIGlmICh3c2lsRG9jdW1lbnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBGb3Igc29tZSByZWFzb24gV1NETDRKIGlzIG5vdCByZWFkaW5nIHRoZSBjb250ZW50IHR5cGUgcHJvcGVybHkgZm9yIHBsYXRmb3JtIHJlc291cmNlcy4gIFRoZXJlZm9yZSwgd2Ugd2lsbCBnZXQKLSAgICAgIC8vIHRoZSBzdHJlYW0gZGlyZWN0bHkgZnJvbSBFY2xpcHNlIGlmIHdlIGZpbmQgYSBwbGF0Zm9ybSBwcm90b2NvbCBzcGVjaWZpZWQgaW4gdGhlIFVSTC4KLSAgICAgIGlmKCB3c2lsVVJJLnN0YXJ0c1dpdGgoICJwbGF0Zm9ybTovcmVzb3VyY2UiICkgKQotICAgICAgewotICAgICAgICBTdHJpbmcgICAgcGF0aCAgICAgPSB3c2lsVVJJLnN1YnN0cmluZygxOCk7Ci0gICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlciggcGF0aCApOwotICAgICAgICAKLSAgICAgICAgaWYoIHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUgKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgSUZpbGUgICAgICAgICAgICAgZmlsZSAgID0gKElGaWxlKXJlc291cmNlOwotICAgICAgICAgICAgSW5wdXRTdHJlYW0gICAgICAgc3RyZWFtID0gZmlsZS5nZXRDb250ZW50cygpOwotICAgICAgICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKCBzdHJlYW0sIGZpbGUuZ2V0Q2hhcnNldCgpICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgICB3c2lsRG9jdW1lbnQgPSBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgIHdzaWxEb2N1bWVudC5yZWFkKCByZWFkZXIgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICl7fQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFRPRE8gdGhlIGZvbGxvd2luZyAzIGxpbmVzIG9mIGNvZGUgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQsIHNpbmNlCi0gICAgICAgIC8vIHRoZSBXU0RMNEogcGFyc2VyIGRvZXMgbm90IG5lZWQgYSBieXRlIHN0cmVhbS4KLSAgICAgICAgYnl0ZVtdIGIgPSBnZXRJbnB1dFN0cmVhbUFzQnl0ZUFycmF5KHdzaWxVUkkpOwotICAgICAgICB3c0VudGl0eS5zZXRCeXRlcyhiKTsKLSAgICAgICAgc2V0SFRUUFNldHRpbmdzKHdzRW50aXR5KTsKLSAgICAgIAotICAgICAgICAvLyBUaGlzIHBhcnNlciBvbmx5IGNoZWNrcyB0aGUgaGVhZGVyIG9mIEhUTUwgZm9yIGEgcGFydGljdWxhciBlbmNvZGluZy4KLSAgICAgICAgLy8gSXQgZG9lc24ndCBjaGVjayB0aGUgZW5jb2RpbmcgZm9yIGdlbmVyYWwgWE1MIGRvY3VtZW50cyBsaWtlIFdTREwgYW5kIFdTSUwuCi0gICAgICAgIC8vIFRoaXMgY2F1c2luZyB0aGlzIHBhcnNlciB0byBhbHdheSB1c2UgVVRGLTggYXMgdGhlIGVuY29kaW5nLiAgVGhlcmVmb3JlLAotICAgICAgICAvLyBzaW5jZSB3ZSBjYW4gbm90IHRydXN0IHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgd2Ugd2lsbCBub3QgdXNlIGl0LiAgSW5zdGVhZCwKLSAgICAgICAgLy8gd2Ugd2lsbCBqdXN0IGxldCB0aGUgV1NJTCBwYXJzZXIgZmlndXJlIG91dCB3aGF0IGVuY29kaW5nIHRvIHVzZS4KLSAgICAgIAotICAgICAgICAvL0lucHV0U3RyZWFtUmVhZGVyIGlzciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYiksIGJ5dGVFbmNvZGluZyApOwotICAgICAgICB3c2lsRG9jdW1lbnQgPSBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgd3NpbERvY3VtZW50LnJlYWQod3NpbFVSSSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHdzRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTSUwpOwotICAgICAgd3NFbnRpdHkuc2V0TW9kZWwod3NpbERvY3VtZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzaWxEb2N1bWVudDsKLSAgfQotCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldFdTRExEZWZpbml0aW9uKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIGdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh3c2RsVVJJKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRXU0RMRGVmaW5pdGlvblZlcmJvc2UoU3RyaW5nIHdzZGxVUkkpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3c2RsVVJJKTsKLSAgICBpZiAod3NFbnRpdHkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c0VudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICB3c0VudGl0eS5zZXRVUkkod3NkbFVSSSk7Ci0gICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQod3NkbFVSSSwgd3NFbnRpdHkpOwotICAgIH0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbil3c0VudGl0eS5nZXRNb2RlbCgpOwotICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgewotICAgICAgYnl0ZVtdIGIgPSBnZXRJbnB1dFN0cmVhbUFzQnl0ZUFycmF5KHdzZGxVUkkpOwotICAgICAgd3NFbnRpdHkuc2V0Qnl0ZXMoYik7Ci0gICAgICBzZXRIVFRQU2V0dGluZ3Mod3NFbnRpdHkpOwotICAgICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKTsKLSAgICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmNyZWF0ZVdTREw0SkZhY3RvcnkoKTsKLSAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgICAgZGVmaW5pdGlvbiA9IHdzZGxSZWFkZXIucmVhZFdTREwod3NkbFVSSSwgbmV3IElucHV0U291cmNlKGJhaXMpKTsKLSAgICAgIHdzRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpOwotICAgICAgd3NFbnRpdHkuc2V0TW9kZWwoZGVmaW5pdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGFyc2UoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcGFyc2VVUkwoUEFSU0VfV1NJTCB8IFBBUlNFX1dTREwgfCBQQVJTRV9MSU5LUyB8IFBBUlNFX0RJU0NPKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhcnNlKGludCBwYXJzZU9wdGlvbikgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIHBhcnNlVVJMKHBhcnNlT3B0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwYXJzZVVSTChpbnQgcGFyc2VPcHRpb24pIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAKLSAgICAvLyBUaGlzIHZhcmlhYmxlIG1ha2VzIHRoaXMgb2JqZWN0IGEgbGl0dGxlIG1vcmUgdGhyZWFkIHNhZmUgdGhhbiBpdCB3YXMKLSAgICAvLyBiZWZvcmUsIGFsdGhvdWdoIHRoaXMgb2JqZWN0IGlzIG5vdCBjb21wbGV0ZWx5IHRocmVhZCBzYWZlLiAgVGhlIHNjZW5hcmlvCi0gICAgLy8gdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGF2b2lkIGlzIHdoZXJlIG9uZSBjYWxsIHRvIHRoaXMgbWV0aG9kIGdldHMgYmxvY2tlZAotICAgIC8vIGF0IHRoZSBnZXRJbnB1dFN0cmVhbUFzQnl0ZUFycmF5IGNhbGwuICBUaGVuIGEgc2Vjb25kIGNhbGwgdG8gdGhlIG1ldGhvZAotICAgIC8vIGlzIG1hZGUgdGhhdCBjaGFuZ2VzIHRoZSB1cmlfIGdsb2JhbCB2YXJpYWJsZS4gIFdoZW4gdGhlIGZpcnN0IGNhbGwKLSAgICAvLyBjb21wbGV0ZXMgaXQgd291bGQgdXNlIHVyaV8gdmFsdWUgZnJvbSB0aGUgc2Vjb25kIGludm9jYXRpb24gaW5zdGVhZAotICAgIC8vIG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBmaXJzdC4gIFN0b3JpbmcgdGhlIHVyaV8gaW50byB0aGlzIHZhcmlhYmxlIGhlbHBzIAotICAgIC8vIGF2b2lkIHRoaXMgYmFkIHNjZW5hcmlvLgotICAgIFN0cmluZyB0aGVVcmkgPSB1cmlfOwotICAgIAotICAgIHdzRW50aXR5LnNldFVSSSh0aGVVcmkpOwotICAgIGJ5dGVbXSBiID0gZ2V0SW5wdXRTdHJlYW1Bc0J5dGVBcnJheSh0aGVVcmkpOwotICAgIHdzRW50aXR5LnNldEJ5dGVzKGIpOwotICAgIHNldEhUVFBTZXR0aW5ncyh3c0VudGl0eSk7Ci0gICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KHRoZVVyaSwgd3NFbnRpdHkpOwotICAgIC8vIHBhcnNlIHVyaV8gYXMgYSBIVE1MIGRvY3VtZW50Ci0gICAgSFRNTEhlYWRIYW5kbGVyIGhlYWRIYW5kbGVyID0gbmV3IEhUTUxIZWFkSGFuZGxlcih0aGVVcmkpOwotICAgIGJ5dGVbXSBoZWFkID0gaGVhZEhhbmRsZXIuaGFydmVzdEhlYWRUYWdzKGIpOwotICAgIFN0cmluZyBieXRlRW5jb2RpbmcgPSBoZWFkSGFuZGxlci5nZXRCeXRlRW5jb2RpbmcoKTsKLSAgICBTQVhQYXJzZXJGYWN0b3J5IGZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZShmYWxzZSk7Ci0gICAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLSAgICBTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGhlYWQpOwotICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgaXNyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGJhaXMsIGJ5dGVFbmNvZGluZyk7Ci0gICAgICBJbnB1dFNvdXJjZSBpcyA9IG5ldyBJbnB1dFNvdXJjZShpc3IpOwotICAgICAgcGFyc2VyLnBhcnNlKGlzLCBoZWFkSGFuZGxlcik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgfQotICAgIFN0cmluZ1tdIHdzaWxVUklzID0gaGVhZEhhbmRsZXIuZ2V0V3NpbHMoKTsKLSAgICBTdHJpbmdbXSBkaXNjb1VSSXMgPSBoZWFkSGFuZGxlci5nZXREaXNjb3MoKTsKLSAgICAvLyB0cnVlIGlmIHVyaV8gaXMgYSBIVE1MIGRvY3VtZW50Ci0gICAgaWYgKHdzaWxVUklzLmxlbmd0aCA+IDAgfHwgZGlzY29VUklzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfSFRNTCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzaWxVUklzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgYWJzb2x1dGVVUkkgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSSh0aGVVcmksIHdzaWxVUklzW2ldKTsKLSAgICAgICAgV2ViU2VydmljZUVudGl0eSB3c2lsRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgICAgd3NpbEVudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0lMKTsKLSAgICAgICAgd3NpbEVudGl0eS5zZXRVUkkoYWJzb2x1dGVVUkkpOwotICAgICAgICBhc3NvY2lhdGUod3NFbnRpdHksIHdzaWxFbnRpdHkpOwotICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQoYWJzb2x1dGVVUkksIHdzaWxFbnRpdHkpOwotICAgICAgICBpZiAoKHBhcnNlT3B0aW9uIHwgUEFSU0VfV1NJTCkgPT0gcGFyc2VPcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZVdTSUwoYWJzb2x1dGVVUkksIHBhcnNlT3B0aW9uLCBieXRlRW5jb2RpbmcgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGk9MDtpPGRpc2NvVVJJcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IGRpc2NvRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgICAgZGlzY29FbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfRElTQ08pOwotICAgICAgICBkaXNjb0VudGl0eS5zZXRVUkkoZGlzY29VUklzW2ldKTsKLSAgICAgICAgYXNzb2NpYXRlKHdzRW50aXR5LGRpc2NvRW50aXR5KTsKLSAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KGRpc2NvVVJJc1tpXSxkaXNjb0VudGl0eSk7Ci0gICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9ESVNDTykgPT0gcGFyc2VPcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZURJU0NPKGRpc2NvVVJJc1tpXSxwYXJzZU9wdGlvbik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGZhbHNlIGlmIHVyaV8gaXMgbm90IGEgSFRNTCBkb2N1bWVudAotICAgIC8vIHRoZW4gcGFyc2UgdXJpXyBhcyBhIFdTSUwgZG9jdW1lbnQKLSAgICBlbHNlCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHBhcnNlV1NJTCh0aGVVcmksIHBhcnNlT3B0aW9uLCBieXRlRW5jb2RpbmcgKTsKLSAgICAgICAgLy8gbm8gZXhjZXB0aW9uIHRocm93biBpZiB1cmlfIGlzIGEgV1NJTCBkb2N1bWVudAotICAgICAgICB3c0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0lMKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICAgIHsKLSAgICAgICAgLy8gZXhjZXB0aW9uIHRocm93biBpZiB1cmlfIGlzIG5vdCBhIFdTSUwgZG9jdW1lbnQKLSAgICAgICAgLy8gdGhlbiBwYXJzZSB1cmlfIGFzIGEgRElTQ08gZG9jdW1lbnQuCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcGFyc2VESVNDTyh0aGVVcmksIHBhcnNlT3B0aW9uKTsKLSAgICAgICAgICAvLyBubyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgYSBESVNDTyBkb2N1bWVudAotICAgICAgICAgIHdzRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX0RJU0NPKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIHQyKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZXhjZXB0aW9uIHRocm93biBpZiB1cmlfIGlzIG5vdCBhIERJU0NPIGRvY3VtZW50Ci0gICAgICAgICAgLy8gdGhlbiBwYXJzZSB1cmlfIGFzIGEgV1NETCBkb2N1bWVudAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlV1NETCh0aGVVcmkpOwotICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uIHRocm93biBpZiB1cmlfIGlzIGEgV1NETCBkb2N1bWVudAotICAgICAgICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gdDMpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHRocm93biBpZiB1cmlfIGlzIG5vdCBhIFdTREwgZG9jdW1lbnQKLSAgICAgICAgICAgIC8vIHRoZW4gZG8gbm90aGluZwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwYXJzZVdTSUwoU3RyaW5nIHdzaWxVUkksIGludCBwYXJzZU9wdGlvbiwgU3RyaW5nIGJ5dGVFbmNvZGluZyApIHRocm93cyBXU0lMRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgV2ViU2VydmljZUVudGl0eSB3c2lsRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzaWxVUkkpOwotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gKFdTSUxEb2N1bWVudCl3c2lsRW50aXR5LmdldE1vZGVsKCk7Ci0gICAgaWYgKHdzaWxEb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3BzIGZyb20gb2NjdXJyaW5nIHdoZW4gYSBXU0lMIGN5Y2xlcyBvY2N1ci4KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudFZlcmJvc2Uod3NpbFVSSSwgYnl0ZUVuY29kaW5nICk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gaW5zcGVjdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRGVzY3JpcHRpb25bXSBkZXNjcyA9IHNlcnZpY2VzW2ldLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgLy8gU2V0IHRoZSBkb2N1bWVudGF0aW9uIHRvIHRoZSA8c2VydmljZT4gZWxlbWVudCdzIGZpcnN0IGFic3RyYWN0LgotICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSBudWxsOwotICAgICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBzZXJ2aWNlc1tpXS5nZXRBYnN0cmFjdHMoKTsKLSAgICAgIGlmIChhYnN0cmFjdHMgIT0gbnVsbCAmJiBhYnN0cmFjdHMubGVuZ3RoID4gMCkKLSAgICAgICAgZG9jdW1lbnRhdGlvbiA9IGFic3RyYWN0c1swXS5nZXRUZXh0KCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGRlc2NzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgCVN0cmluZyByZWZlcmVuY2VkTlMgPSBkZXNjc1tqXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCk7Ci0gICAgICAJLy8gSWYgYSA8ZGVzY3JpcHRpb24+IGVsZW1lbnQgY29udGFpbnMgYW4gYWJzdHJhY3QsIHVzZSBpdCB0byBvdmVycmlkZSB0aGUgc2VydmljZSBkb2N1bWVudGF0aW9uLiAgICAgIAkKLSAgICAgIAlhYnN0cmFjdHMgPSBkZXNjc1tqXS5nZXRBYnN0cmFjdHMoKTsKLSAgICAgIAlpZiAoYWJzdHJhY3RzICE9IG51bGwgJiYgYWJzdHJhY3RzLmxlbmd0aCA+IDApCi0gICAgICAJICBkb2N1bWVudGF0aW9uID0gYWJzdHJhY3RzWzBdLmdldFRleHQoKTsKLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuTlNfVVJJX1dTREwuZXF1YWxzKHJlZmVyZW5jZWROUykpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBkZXNjc1tqXS5nZXRMb2NhdGlvbigpOwotICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsICYmIGxvY2F0aW9uLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYWJzb2x1dGVVUkkgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSSh3c2lsVVJJLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IHdzZGxFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICAgICAgd3NkbEVudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKTsKLSAgICAgICAgICAgIHdzZGxFbnRpdHkuc2V0VVJJKGFic29sdXRlVVJJKTsKLSAgICAgICAgICAgIHdzZGxFbnRpdHkuc2V0RG9jdW1lbnRhdGlvbihkb2N1bWVudGF0aW9uKTsKLSAgICAgICAgICAgIGFzc29jaWF0ZSh3c2lsRW50aXR5LCB3c2RsRW50aXR5KTsKLSAgICAgICAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dChhYnNvbHV0ZVVSSSwgd3NkbEVudGl0eSk7Ci0gICAgICAgICAgICBpZiAoKHBhcnNlT3B0aW9uIHwgUEFSU0VfV1NETCkgPT0gcGFyc2VPcHRpb24pCi0gICAgICAgICAgICAgIHBhcnNlV1NETChhYnNvbHV0ZVVSSSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKFVERElDb25zdGFudHMuTlNfVVJJX1VERElfVjIuZXF1YWxzKHJlZmVyZW5jZWROUykpCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpb25FbGVtZW50IGVlID0gZGVzY3Nbal0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgICAgICAgIGlmIChlZSBpbnN0YW5jZW9mIFNlcnZpY2VEZXNjcmlwdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSAoU2VydmljZURlc2NyaXB0aW9uKWVlOwotICAgICAgICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSBzZC5nZXRMb2NhdGlvbigpOwotICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBzZC5nZXRTZXJ2aWNlS2V5KCkuZ2V0VGV4dCgpOwotICAgICAgICAgICAgV2ViU2VydmljZUVudGl0eSB1ZGRpU2VydmljZUVudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgICAgICB1ZGRpU2VydmljZUVudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9VRERJX1NFUlZJQ0UpOwotICAgICAgICAgICAgU3RyaW5nIHVkZGlTZXJ2aWNlS2V5VVJJID0gVURESVVSSUhlbHBlci5nZXRTZXJ2aWNlS2V5VVJJKHNlcnZpY2VLZXksaW5xdWlyeVVSTCk7Ci0gICAgICAgICAgICB1ZGRpU2VydmljZUVudGl0eS5zZXRVUkkodWRkaVNlcnZpY2VLZXlVUkkpOwotICAgICAgICAgICAgdWRkaVNlcnZpY2VFbnRpdHkuc2V0RG9jdW1lbnRhdGlvbihkb2N1bWVudGF0aW9uKTsKLSAgICAgICAgICAgIGFzc29jaWF0ZSh3c2lsRW50aXR5LHVkZGlTZXJ2aWNlRW50aXR5KTsKLSAgICAgICAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dCh1ZGRpU2VydmljZUtleVVSSSx1ZGRpU2VydmljZUVudGl0eSk7Ci0gICAgICAgICAgICAvLyBUT0RPOiBwYXJzZSBXU0RMIGlmIG5lY2Vzc2FyeS4uLgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBMaW5rW10gbGlua3MgPSBpbnNwZWN0aW9uLmdldExpbmtzKCk7ICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKFdTSUxDb25zdGFudHMuTlNfVVJJX1dTSUwuZXF1YWxzKGxpbmtzW2ldLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uID0gbnVsbDsKLSAgICAgICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rc1tpXS5nZXRBYnN0cmFjdHMoKTsKLSAgICAgICAgaWYgKGFic3RyYWN0cyAhPSBudWxsICYmIGFic3RyYWN0cy5sZW5ndGggPiAwKQotICAgICAgICAgIGRvY3VtZW50YXRpb24gPSBhYnN0cmFjdHNbMF0uZ2V0VGV4dCgpOwotICAgICAgICBTdHJpbmcgbGlua0xvY2F0aW9uID0gbGlua3NbaV0uZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgU3RyaW5nIGFic29sdXRlVVJJID0gY29udmVydFRvQWJzb2x1dGVVUkkod3NpbFVSSSwgbGlua0xvY2F0aW9uKTsKLSAgICAgICAgLy8gUHJldmVudCBjeWNsZXMuCi0gICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NpbExpbmtFbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkoYWJzb2x1dGVVUkkpOwotICAgICAgICBpZiAod3NpbExpbmtFbnRpdHkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHdzaWxMaW5rRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgICAgICB3c2lsTGlua0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0lMKTsKLSAgICAgICAgICB3c2lsTGlua0VudGl0eS5zZXRVUkkoYWJzb2x1dGVVUkkpOwotICAgICAgICAgIHdzaWxMaW5rRW50aXR5LnNldERvY3VtZW50YXRpb24oZG9jdW1lbnRhdGlvbik7Ci0gICAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KGFic29sdXRlVVJJLCB3c2lsTGlua0VudGl0eSk7Ci0gICAgICAgICAgaWYgKChwYXJzZU9wdGlvbiB8IFBBUlNFX0xJTktTKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgICAgIHBhcnNlV1NJTChhYnNvbHV0ZVVSSSwgcGFyc2VPcHRpb24sIGJ5dGVFbmNvZGluZyApOwotICAgICAgICB9Ci0gICAgICAgIGFzc29jaWF0ZSh3c2lsRW50aXR5LHdzaWxMaW5rRW50aXR5KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBwYXJzZURJU0NPKFN0cmluZyBkaXNjb1VSSSwgaW50IHBhcnNlT3B0aW9uKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiwgRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlRW50aXR5IGRpc2NvRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKGRpc2NvVVJJKTsKLSAgICBieXRlW10gYiA9IGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkoZGlzY29VUkkpOwotICAgIGRpc2NvRW50aXR5LnNldEJ5dGVzKGIpOwotICAgIHNldEhUVFBTZXR0aW5ncyhkaXNjb0VudGl0eSk7Ci0gICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKTsKLSAgICBESVNDT1BhcnNlciBwYXJzZXIgPSBuZXcgRElTQ09QYXJzZXIoKTsKLSAgICBESVNDT1JlZmVyZW5jZVtdIHJlZmVyZW5jZXMgPSBwYXJzZXIucGFyc2UoZGlzY29VUkksbmV3IElucHV0U291cmNlKGJhaXMpKTsKLSAgICBpZiAocmVmZXJlbmNlcyAhPSBudWxsICYmIHJlZmVyZW5jZXMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpPTA7aTxyZWZlcmVuY2VzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyZWZlcmVuY2VzW2ldIGluc3RhbmNlb2YgRElTQ09Db250cmFjdFJlZmVyZW5jZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGNvbnRyYWN0UmVmCi0gICAgICAgICAgRElTQ09Db250cmFjdFJlZmVyZW5jZSByZWZlcmVuY2UgPSAoRElTQ09Db250cmFjdFJlZmVyZW5jZSlyZWZlcmVuY2VzW2ldOwotICAgICAgICAgIFN0cmluZyByZWYgPSByZWZlcmVuY2UuZ2V0UmVmKCk7Ci0gICAgICAgICAgU3RyaW5nIGRvY1JlZiA9IHJlZmVyZW5jZS5nZXREb2NSZWYoKTsKLSAgICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IHdzZGxFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICAgIHdzZGxFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCk7Ci0gICAgICAgICAgd3NkbEVudGl0eS5zZXRVUkkocmVmKTsKLSAgICAgICAgICB3c2RsRW50aXR5LnNldERvY3VtZW50YXRpb24oZG9jUmVmKTsKLSAgICAgICAgICBhc3NvY2lhdGUoZGlzY29FbnRpdHksd3NkbEVudGl0eSk7Ci0gICAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KHJlZix3c2RsRW50aXR5KTsKLSAgICAgICAgICBpZiAoKHBhcnNlT3B0aW9uIHwgUEFSU0VfV1NETCkgPT0gcGFyc2VPcHRpb24pCi0gICAgICAgICAgICBwYXJzZVdTREwocmVmKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBkaXNjb3ZlcnlSZWYKLSAgICAgICAgICBTdHJpbmcgcmVmID0gcmVmZXJlbmNlc1tpXS5nZXRSZWYoKTsKLSAgICAgICAgICAvLyBQcmV2ZW50IGN5Y2xlcy4KLSAgICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IGRpc2NvTGlua0VudGl0eSA9IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSShyZWYpOwotICAgICAgICAgIGlmIChkaXNjb0xpbmtFbnRpdHkgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBkaXNjb0xpbmtFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICAgICAgZGlzY29MaW5rRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX0RJU0NPKTsKLSAgICAgICAgICAgIGRpc2NvTGlua0VudGl0eS5zZXRVUkkocmVmKTsKLSAgICAgICAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dChyZWYsZGlzY29MaW5rRW50aXR5KTsKLSAgICAgICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9MSU5LUykgPT0gcGFyc2VPcHRpb24pCi0gICAgICAgICAgICAgIHBhcnNlRElTQ08ocmVmLHBhcnNlT3B0aW9uKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYXNzb2NpYXRlKGRpc2NvRW50aXR5LGRpc2NvTGlua0VudGl0eSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIERlZmluaXRpb24gcGFyc2VXU0RMKFN0cmluZyB3c2RsVVJJKSB0aHJvd3MgV1NETEV4Y2VwdGlvbiwgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBnZXRXU0RMRGVmaW5pdGlvblZlcmJvc2Uod3NkbFVSSSk7Ci0gIH0KLQotICBwcml2YXRlIGJ5dGVbXSBnZXRJbnB1dFN0cmVhbUFzQnl0ZUFycmF5KFN0cmluZyB1cmlTdHJpbmcpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgLy8gVHJ5IHRvIGdldCBhIGNhY2hlZCBjb3B5IG9mIHRoZSBieXRlW10KLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHVyaVN0cmluZyk7Ci0gICAgaWYgKHdzRW50aXR5ICE9IG51bGwpCi0gICAgewotICAgICAgYnl0ZVtdIGJ5dGVzID0gd3NFbnRpdHkuZ2V0Qnl0ZXMoKTsKLSAgICAgIGlmIChieXRlcyAhPSBudWxsKQotICAgICAgICByZXR1cm4gYnl0ZXM7Ci0gICAgfQotICAgIC8vIEdldCB0aGUgYnl0ZVtdIGJ5IG9wZW5pbmcgYSBzdHJlYW0gdG8gdGhlIFVSSQotICAgIFVSTCB1cmwgPSBjcmVhdGVVUkwodXJpU3RyaW5nKTsKLSAgICBVUkxDb25uZWN0aW9uIGNvbm4gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLSAgICAvLyBwcm94eSBzZXJ2ZXIgc2V0dGluZwotICAgIFN0cmluZyBwcm94eVVzZXJOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5VXNlck5hbWUiKTsKLSAgICBTdHJpbmcgcHJveHlQYXNzd29yZCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wcm94eVBhc3N3b3JkIik7Ci0gICAgaWYgKHByb3h5VXNlck5hbWUgIT0gbnVsbCAmJiBwcm94eVBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHVzZXJOYW1lUGFzc3dvcmQgPSBuZXcgU3RyaW5nQnVmZmVyKHByb3h5VXNlck5hbWUpOwotICAgICAgdXNlck5hbWVQYXNzd29yZC5hcHBlbmQoJzonKS5hcHBlbmQocHJveHlQYXNzd29yZCk7Ci0gICAgICBCQVNFNjRFbmNvZGVyIGVuY29kZXIgPSBuZXcgQkFTRTY0RW5jb2RlcigpOwotICAgICAgU3RyaW5nIGVuY29kaW5nID0gZW5jb2Rlci5lbmNvZGUodXNlck5hbWVQYXNzd29yZC50b1N0cmluZygpLmdldEJ5dGVzKCkpOwotICAgICAgdXNlck5hbWVQYXNzd29yZC5zZXRMZW5ndGgoMCk7Ci0gICAgICB1c2VyTmFtZVBhc3N3b3JkLmFwcGVuZCgiQmFzaWMgIikuYXBwZW5kKGVuY29kaW5nKTsKLSAgICAgIGNvbm4uc2V0UmVxdWVzdFByb3BlcnR5KCJQcm94eS1hdXRob3JpemF0aW9uIiwgdXNlck5hbWVQYXNzd29yZC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiBzZXR0aW5nCi0gICAgaWYgKGh0dHBCYXNpY0F1dGhVc2VybmFtZV8gIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoUGFzc3dvcmRfICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihodHRwQmFzaWNBdXRoVXNlcm5hbWVfKTsKLSAgICAgIHNiLmFwcGVuZCgnOicpLmFwcGVuZChodHRwQmFzaWNBdXRoUGFzc3dvcmRfKTsKLSAgICAgIEJBU0U2NEVuY29kZXIgZW5jb2RlciA9IG5ldyBCQVNFNjRFbmNvZGVyKCk7Ci0gICAgICBTdHJpbmcgZW5jb2RpbmcgPSBlbmNvZGVyLmVuY29kZShzYi50b1N0cmluZygpLmdldEJ5dGVzKCkpOwotICAgICAgc2Iuc2V0TGVuZ3RoKDApOwotICAgICAgc2IuYXBwZW5kKCJCYXNpYyAiKS5hcHBlbmQoZW5jb2RpbmcpOwotICAgICAgY29ubi5zZXRSZXF1ZXN0UHJvcGVydHkoIkF1dGhvcml6YXRpb24iLCBzYi50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwotICAgICAgU3RyaW5nIHd3d0F1dGhNc2cgPSBjb25uLmdldEhlYWRlckZpZWxkKCJXV1ctQXV0aGVudGljYXRlIik7Ci0gICAgICBpZiAod3d3QXV0aE1zZyAhPSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24obmV3IElPRXhjZXB0aW9uKCksIHd3d0F1dGhNc2csIHVyaVN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgewotICAgICAgU3RyaW5nIHd3d0F1dGhNc2cgPSBjb25uLmdldEhlYWRlckZpZWxkKCJXV1ctQXV0aGVudGljYXRlIik7Ci0gICAgICBpZiAod3d3QXV0aE1zZyAhPSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24oaW9lLCB3d3dBdXRoTXNnLCB1cmlTdHJpbmcpOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBpb2U7Ci0gICAgfQotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIGJ5dGVbXSBiID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgaW50IGJ5dGVSZWFkID0gaXMucmVhZChiKTsKLSAgICB3aGlsZSAoYnl0ZVJlYWQgIT0gLTEpCi0gICAgewotICAgICAgYmFvcy53cml0ZShiLCAwLCBieXRlUmVhZCk7Ci0gICAgICBieXRlUmVhZCA9IGlzLnJlYWQoYik7Ci0gICAgfQotICAgIGlzLmNsb3NlKCk7Ci0gICAgcmV0dXJuIGJhb3MudG9CeXRlQXJyYXkoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBVUkwgY3JlYXRlVVJMKFN0cmluZyB1cmwpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBuZXcgVVJMKHVybCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNzb2NpYXRlKFdlYlNlcnZpY2VFbnRpdHkgcGFyZW50LCBXZWJTZXJ2aWNlRW50aXR5IGNoaWxkKQotICB7Ci0gICAgcGFyZW50LmFkZENoaWxkKGNoaWxkKTsKLSAgICBjaGlsZC5zZXRQYXJlbnQocGFyZW50KTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRUb0Fic29sdXRlVVJJKFN0cmluZyBiYXNlVVJJLFN0cmluZyByZWZVUkkpCi0gIHsKLSAgICBpZiAocmVmVVJJICE9IG51bGwgJiYgcmVmVVJJLmluZGV4T2YoIjoiKSA8IDApCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIGFic29sdXRlVVJJID0gbmV3IFN0cmluZ0J1ZmZlcihiYXNlVVJJLnN1YnN0cmluZygwLE1hdGgubWF4KGJhc2VVUkkubGFzdEluZGV4T2YoJ1xcJyksYmFzZVVSSS5sYXN0SW5kZXhPZignLycpKzEpKSk7Ci0gICAgICBhYnNvbHV0ZVVSSS5hcHBlbmQocmVmVVJJKTsKLSAgICAgIHJldHVybiBhYnNvbHV0ZVVSSS50b1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gcmVmVVJJOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEhUVFBTZXR0aW5ncyhXZWJTZXJ2aWNlRW50aXR5IGVudGl0eSkKLSAgewotICAgIGlmIChodHRwQmFzaWNBdXRoVXNlcm5hbWVfICE9IG51bGwgJiYgaHR0cEJhc2ljQXV0aFBhc3N3b3JkXyAhPSBudWxsKQotICAgIHsKLSAgICAgIGVudGl0eS5zZXRIVFRQVXNlcm5hbWUoaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyk7Ci0gICAgICBlbnRpdHkuc2V0SFRUUFBhc3N3b3JkKGh0dHBCYXNpY0F1dGhQYXNzd29yZF8pOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoVXNlcm5hbWVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSkKLSAgewotICAgIGh0dHBCYXNpY0F1dGhVc2VybmFtZV8gPSB1c2VybmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoUGFzc3dvcmRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKFN0cmluZyBwYXNzd29yZCkKLSAgewotICAgIGh0dHBCYXNpY0F1dGhQYXNzd29yZF8gPSBwYXNzd29yZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvd3NpbC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvd3NpbC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzQ1MzBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL3dzaWwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGZvciBBZGRXU0RMVG9XU0lMQ29tbWFuZAotIwotTVNHX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTPUlXQUIwMDU1RSBJbnZhbGlkIGNvbW1hbmQgYXJndW1lbnRzLgotTVNHX0VSUk9SX0lMTEVHQUxfQVJHVU1FTlRTPUlXQUIwMTA1RSBJbGxlZ2FsIGFyZ3VtZW50LgotTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkk9SVdBQjAxODVFIEludmFsaWQgV1NETCBVUkkuCi1NU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSST1JV0FCMDIwNkUgSW52YWxpZCBXU0lMIFVSSS4KLU1TR19FUlJPUl9VTlJFU09MVkFCTEVfV1NETD1JV0FCMDQwNUUgV1NETCBpcyB1bnJlc29sdmFibGUuCi1NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT049SVdBQjA0NTFFIEFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGhhcyBvY2N1cmVkLgotTVNHX0VSUk9SX01BTEZPUk1FRF9XU0RMPUlXQUIwNDUyRSBXU0RMIGlzIG1hbGZvcm1lZCwgZXJyb3IgcGFyc2luZyBXU0RMLgotTVNHX0VSUk9SX1dSSVRFX1dTSUw9SVdBQjA0NTNFIEVycm9yIHdyaXRpbmcgV1NJTC4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3BhcnNlci9QbHVnaW5NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvcGFyc2VyL1BsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MzQ0MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvcGFyc2VyL1BsdWdpbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBjbGFzcyBQbHVnaW5NZXNzYWdlcyBleHRlbmRzIE5MUwotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5wbHVnaW4iOyAvLyROT04tTkxTLTEkCi0gIAotICBzdGF0aWMKLSAgewotICAgIE5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFBsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVA7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1hNRVRIT0RTOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfTlRUQ09NTTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYjY3NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvcGFyc2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSMKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVA9U0FQIFVEREkgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVD1TQVAgVURESSBUZXN0IFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM9WE1ldGhvZHMgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9OVFRDT01NPU5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwZGI4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0uc2V0dGluZ3MKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YzBmNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFiZDU2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSQotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLnN3dDtidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucztidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuZm9ybXM7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNWFjM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHNjaGVtYS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBpY29ucy8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb2JqMTYvZmlsZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vYmoxNi9maWxlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MmRlZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vYmoxNi9maWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL29iajE2L2ZsZHJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb2JqMTYvZmxkcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzkxZjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb2JqMTYvZmxkcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi9mYXZvcml0ZV9vdnIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi9mYXZvcml0ZV9vdnIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmIxNjc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvZmF2b3JpdGVfb3ZyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvaW52YWxpZHR5cGVfb3ZyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvaW52YWxpZHR5cGVfb3ZyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5ZGNjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L2ludmFsaWR0eXBlX292ci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L3VubW9kaWZpYWJsZV9vdnIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi91bm1vZGlmaWFibGVfb3ZyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA5M2Q4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L3VubW9kaWZpYWJsZV9vdnIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi93YXJuaW5nX292ci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L3dhcm5pbmdfb3ZyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUyZGFjNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L3dhcm5pbmdfb3ZyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYWExMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1TZXJ2aWNlIHBvbGljeQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi1TRVJWSUNFX1BPTElDWV9OQU1FPVNlcnZpY2UgcG9saWN5IFVJCi1QUkVGRVJFTkNFX1NFUlZJQ0VQT0xJQ0lFUz1TZXJ2aWNlIFBvbGljaWVzCi1DT01QTElBTkNFX0xFVkVMX0xPTkdOQU1FPUNvbXBsaWFuY2UgbGV2ZWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRiZmQ2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJzZXJ2aWNlcG9saWN5dWkiIG5hbWU9IiVTRVJWSUNFX1BPTElDWV9OQU1FIiBzY2hlbWE9InNjaGVtYS9zZXJ2aWNlUG9saWN5dWkuZXhzZCIvPgotICAgCi0gIDwhLS0gV2UgbmVlZCB0aGlzIHBsdWdpbiB0byBiZSBsb2FkZWQgYXQgc3RhcnR1cCB0aW1lIHNvIHRoYXQgdGhlCi0gICAgICAgU2VydmljZVBvbGljeVByb3BlcnR5VGVzdGVyIGNsYXNzIHdpbGwgYWx3YXlzIGJlIGxvYWRlZC4gIElmIHRoaXMgaXMKLSAgICAgICBub3QgZG9uZSB0aGVuIHRoZSBTZXJ2aWNlIFBvbGljeSBwcm9qZWN0IHByb3BlcnR5IHBhZ2Ugd2lsbCBhcHBlYXIKLSAgICAgICBvbiBhbGwgcHJvamVjdCBwcm9wZXJ0eSBwYWdlcyB1bnRpbCB0aGUgcGx1Z2luIGhhcyBiZWVuIGxvYWRlZC4gCi0gICAgICAgLS0+Ci0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiLz4KLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KLSAgICAgIDxwYWdlIG5hbWU9IiVQUkVGRVJFTkNFX1NFUlZJQ0VQT0xJQ0lFUyIKLSAgICAgIAkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcmVmZXJlbmNlcy5TZXJ2aWNlUG9saWNpZXNQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9saWN5dWkiPgotICAgICA8c2VydmljZVBvbGljeVVJPgotICAgICAgIDxvcGVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcCIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3NpLioiPgotICAgICAgICAgPGRlc2NyaXB0b3IgbG9uZ05hbWU9IiVDT01QTElBTkNFX0xFVkVMX0xPTkdOQU1FIi8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5zdWdnZXN0aW9uRW51bSIvPgotICAgICAgICAgPGVuYWJsZWQgbXVsdGlzZWxlY3Q9InRydWUiLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgPC9zZXJ2aWNlUG9saWN5VUk+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByb3BlcnR5UGFnZXMiPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfU0VSVklDRVBPTElDSUVTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcm9wZXJ0aWVzLlNlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByb3BlcnRpZXMuV1NJQ29tcGxpYW5jZVByb3BlcnR5UGFnZSI+Ci0gICAgICAgICAgIAotICAgICAgICAgICAgPGVuYWJsZWRXaGVuPgotICAgICAgICAgICAgICAgPGFkYXB0IHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ij4gCi0gICAgICAgICAgICAgICAgIDx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuaXNFbmFibGVkIi8+Ci0gICAgICAgICAgICAgICA8L2FkYXB0PiAKLSAgICAgICAgICAgIDwvZW5hYmxlZFdoZW4+Ci0gICAgICA8L3BhZ2U+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLnByb3BlcnR5VGVzdGVycyI+Ci0gICAgPHByb3BlcnR5VGVzdGVyCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLmVuYWJsZWQiCi0gICAgICB0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCIKLSAgICAgIG5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIgotICAgICAgcHJvcGVydGllcz0iaXNFbmFibGVkIgotICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcm9wZXJ0aWVzLlNlcnZpY2VQb2xpY3lQcm9wZXJ0eVRlc3RlciI+Ci0gICAgPC9wcm9wZXJ0eVRlc3Rlcj4KLSAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NjaGVtYS9zZXJ2aWNlUG9saWN5dWkuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NjaGVtYS9zZXJ2aWNlUG9saWN5dWkuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg2YzU1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zY2hlbWEvc2VydmljZVBvbGljeXVpLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kudWkiIGlkPSJzZXJ2aWNlUG9saWN5VUkiIG5hbWU9IlNlcnZpY2UgcG9saWN5IFVJIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBleHRlbmRlcnMgdG8gYWRkIHNlcnZpY2UgcG9saWN5IFVJIG9wZXJhdGlvbnMgZm9yIHRoZQotICAgICAgICAgc2VydmljZSBwb2xpY2llcyB0aGF0IHRoZXkgaGF2ZSBhZGRlZC4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2VydmljZVBvbGljeVVJIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InNlcnZpY2VQb2xpY3lVSSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBleHRlbnNpb24gaXMgaW50ZW5kZWQgZm9yIGV4dGVuZGVycyB3aG8gd2FudCB0byBhZGQgVUkgb3BlcmF0aW9ucyB0byB0aGUgU2VydmljZSBwb2xpY2llcyB0aGF0IHRoZXkgaGF2ZSBkZWZpbmVkLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGNob2ljZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ib3BlcmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InF1aWNrRml4IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L2Nob2ljZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImRlc2NyaXB0b3IiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIEEgZGVzY3JpcHRvciBmb3IgdGhpcyBTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gb3IgYWN0aW9uLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoaXMgc2VydmljZSBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2hvcnROYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgc2VydmljZSBvcGVyYXRpb24uICBOb3RlOiBpZiBhIHNob3J0IG5hbWUgaXMgbm90IHNwZWNpZmllZCBpdCBpcyBkZWZhdWx0ZWQgdG8gdGhlIHZhbHVlIG9mIHRoZSBsb25nIG5hbWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibG9uZ05hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGxvbmcgbmFtZSBvZiB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uLiAgTm90ZTogaWYgYSBsb25nIG5hbWUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSBzaG9ydE5hbWUgdmFsdWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29udGV4dEhlbHBJZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY29udGV4dCBoZWxwIGlkIGZvciB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uIGlmIGl0IGlzIHJlcXVpcmVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imljb25wYXRoIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgcGx1Z2luIHJlbGF0aXZlIHBhdGggdG8gc29tZSBpY29uIGZpbGUgZm9yIHRoaXMgc2VydmljZSBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9Im9wZXJhdGlvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgRGVmaW5lcyBhIFNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZGVzY3JpcHRvciIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJlbmFibGVkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgPGNob2ljZT4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2VsZWN0aW9uIi8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNvbXBsZXgiLz4KLSAgICAgICAgICAgIDwvY2hvaWNlPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyB1bmlxdWUgaWQgb2YgdGhpcyBzZXJ2aWNlIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lQYXR0ZXJuIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGUgc3BlY2lmaWVzIHdoaWNoIHNlcnZpY2UgcG9saWNlcyB0aGlzIG9wZXJhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGguICBBbnkgSmF2YSByZWd1bGFyIGV4cHJlc3Npb24gbWF5IGJlIHNwZWNpZmllZC4gIFRoaXMgZXhwcmVzc2lvbiB3aWxsIGJlIHVzZWQgdG8gbWF0Y2ggdGhlIGlkcyBvZiBhbGwga25vd24gc2VydmljZSBwb2xpY3kgaWRzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9IndvcmtzcGFjZU9ubHkiIHR5cGU9ImJvb2xlYW4iPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGluZGljYXRlcyBpZiB0aGlzIG9wZXJhdGlvbiBpcyBvbmx5IHRvIGJlIHVzZWQgaW4gdGhlIHdvcmtzcGFjZSBwcmVmZXJlbmNlIHBhZ2UuICBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGl0IGlzIGRlZmF1bHRlZCB0byBmYWxzZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0ZGF0YSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJkZWZhdWx0IiB2YWx1ZT0idHJ1ZSI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImVudW1lcmF0aW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgZGVmaW5lcyB0aGUgZW51bWVyYXRpb24gdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGguCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBpZCBvZiB0aGlzIGVudW1lcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlZmF1bHRJdGVtIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXQgYnkgdGhlIGVudW1lcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJzZWxlY3Rpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNvbWUga2luZCBvZiBVSSBib29sZWFuIHNlbGVjdGlvbi4gIEFsbCBzZXJ2aWNlIHBvbGljaWVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlvbiBzaG91bGQgdXNlIHRoZSBvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuYm9vbGVhbkVudW0gZW51bWVyYXRpb24uCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imljb24iIHR5cGU9ImJvb2xlYW4iPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIGJvb2xlYW4gc2VsZWN0aW9uIHNob3VsZCBiZSByZW5kZXJlZCB2aWEgYW4gaWNvbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iY29tcGxleCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGNvbXBsZXggdG8gcmVuZGVyIGFuZCBwZXJzaXN0LiAgVGhlIGxhdW5jaENsYXNzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBsYXVuY2ggYSBkaWFsb2cgdG8gc2V0IG1vcmUgY29tcGxleCBkYXRhLiAgVGhlIGV4dGVuZGVyIHdpbGwgbmVlZCB0byBjYWxsIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBBUEkgdG8gcGVyc2lzdCBkYXRhIG9uIGVhY2ggcG9saWN5IGFzIHJlcXVpcmVkLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYXVuY2hDbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGNsYXNzIHRoYXQgY2FuIGJlIHVzZWQgdG8gbGF1bmNoIGEgZGlhbG9nLiAgVGhlIGNsYXNzIHNwZWNpZmllZCBtdXN0IGltcGxlbWVudCB0aGUgSUxhdW5jaE9wZXJhdGlvbiBpbnRlcmZhY2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImVuYWJsZWQiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIEluZGljYXRlcyBpZiB0aGlzIG9wZXJhdGlvbiBpcyBlbmFibGVkL2dyYXllZCBvdXQgb3Igbm90IGluIHRoZSBVSS4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZW5hYmxlZENsYXNzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBzcGVjaWZpZWQgaW4gdGhlIGF0dHJpYnV0ZSBtdWNoIGltcGxlbWVudCB0aGUgSUVuYWJsZU9wZXJhdGlvbiBpbnRlcmZhY2UuICBUaGlzIGNsYXNzIGFsbG93cyBleHRlbmRlcnMgdG8gcHJvdmlkZSBhIG1vcmUgY29tcGxleCBsb2dpYyBmb3Igd2hlbiB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtdWx0aXNlbGVjdCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgaWYgdGhpcyBvcGVyYXRpb24gYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvbiBvZiBwb2xpY3kgb2JqZWN0cyBvciBub3QuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InF1aWNrRml4Ij4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgYWxsb3dzIGV4dGVuZGVycyB0byBhZGQgcXVpY2sgZml4ZXMgdG8gdGhlIFNlcnZpY2UgcG9saWN5IFVJIGZyYW1ld29ya3MuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImFjdGlvbiIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGx1Z2luSWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIHBsdWdpbiBpZCB0aGF0IHRoZSBlbmNsb3NlZCBxdWljayBmaXggYWN0aW9ucyBhcHBseSB0by4gIFRoaXMgaXMgdGhlIGlkIHRoYXQgd2lsbCBtYXRjaCB0aGUgcGx1Z2luIGlkIGZyb20gdGhlIElTdGF0dXMgb2YgYSBTZXJ2aWNlUG9saWN5IG9iamVjdC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjb2RlIHRoYXQgdGhlIGVuY2xvc2VkIHF1aWNrIGZpeCBhY3Rpb25zIGFwcGx5IHRvLiAgVGhpcyBpcyB0aGUgY29kZSB0aGF0IHdpbGwgbWF0Y2ggdGhlIGNvZGUgZnJvbSB0aGUgSVN0YXR1cyBvZiBhIFNlcnZpY2VQb2xpY3kgb2JqZWN0LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJhY3Rpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBlbGVtZW50IGlzIHVzZWQgdG8gYWRkIGEgcXVpY2sgZml4IGFjdGlvbi4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZGVzY3JpcHRvciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgdGhlIGZyYW1ld29yayB3aWxsIGNhbGwgZm9yIGEgcGFydGljdWxhciBxdWljayBmaXggYWN0aW9uLiAgVGhpcyBjbGFzcyBtdXN0IGltcGxlbWVudCB0aGUgSVF1aWNrRml4QWN0aW9uIGludGVyZmFjZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgMS4wCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9CYXNlT3BlcmF0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9CYXNlT3BlcmF0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjkwZjhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvQmFzZU9wZXJhdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2Rpbmcgb2Ygc2VydmljZSBwb2xpY3kKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklFbmFibGVPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklMYXVuY2hPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscy5SZWdpc3RyeVV0aWxzOwotCi1wdWJsaWMgY2xhc3MgQmFzZU9wZXJhdGlvbkltcGwgCi17Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgIGlkOwotICBwcml2YXRlIElEZXNjcmlwdG9yICAgICAgICAgICBkZXNjcmlwdG9yOwotICBwcml2YXRlIE9wZXJhdGlvbktpbmQgICAgICAgICBvcGVyYXRpb25LaW5kOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICBwb2xpY3lJZFBhdHRlcm47Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgICAgIG11bHRpU2VsZWN0ID0gZmFsc2U7Ci0gIHByaXZhdGUgSUxhdW5jaE9wZXJhdGlvbiAgICAgIGxhdW5jaE9wZXJhdGlvbk9iamVjdDsKLSAgcHJpdmF0ZSBJRW5hYmxlT3BlcmF0aW9uICAgICAgZW5hYmxlT3BlcmF0aW9uT2JqZWN0OwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICBlbnVtSWQ7Ci0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVuYWJsZWRFbGVtZW50OwotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBjb21wbGV4RWxlbWVudDsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICAgd29ya3NwYWNlT25seTsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgZGVmYXVsdEl0ZW07ICAKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICAgdXNlRGVmYXVsdERhdGE7Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiBpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotICBwdWJsaWMgYm9vbGVhbiBpc1dvcmtzcGFjZU9ubHkoKQotICB7Ci0gICAgcmV0dXJuIHdvcmtzcGFjZU9ubHk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXb3Jrc3BhY2VPbmx5KCBib29sZWFuIHdvcmtzcGFjZU9ubHkgKQotICB7Ci0gICAgdGhpcy53b3Jrc3BhY2VPbmx5ID0gd29ya3NwYWNlT25seTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oIGJvb2xlYW4gaXNJY29uICkKLSAgewotICAgIGlmKCBpc0ljb24gKQotICAgIHsKLSAgICAgIG9wZXJhdGlvbktpbmQgPSBPcGVyYXRpb25LaW5kLmljb25TZWxlY3Rpb247Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBvcGVyYXRpb25LaW5kID0gT3BlcmF0aW9uS2luZC5zZWxlY3Rpb247ICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yKCkKLSAgewotICAgIHJldHVybiBkZXNjcmlwdG9yOwotICB9Ci0KLSAgcHVibGljIE9wZXJhdGlvbktpbmQgZ2V0T3BlcmF0aW9uS2luZCgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uS2luZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW51bWVyYXRpb25JZCgpCi0gIHsKLSAgICByZXR1cm4gZW51bUlkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW51bWVyYXRpb25JZCggU3RyaW5nIGVudW1JZCApCi0gIHsKLSAgICB0aGlzLmVudW1JZCAgID0gZW51bUlkOyAgCi0gICAgb3BlcmF0aW9uS2luZCA9IE9wZXJhdGlvbktpbmQuZW51bWVyYXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UG9saWN5SWRQYXR0ZXJuKCkKLSAgewotICAgIHJldHVybiBwb2xpY3lJZFBhdHRlcm47Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIAotICAgIC8vIElmIHdlIGRvbid0IGFsbG93IG11bHRpIHNlbGVjdCBhbmQgbXVsdGlwbGUgcG9saWNpZXMgaGF2ZSBiZWVuIHNlbGVjdGVkCi0gICAgLy8gdGhlbiB0aGlzIG9wZXJhdGlvbiBpcyBub3QgZW5hYmxlZC4KLSAgICBpZiggIW11bHRpU2VsZWN0ICYmIHNlbGVjdGVkUG9saWNpZXMuc2l6ZSgpID4gMSApCi0gICAgewotICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlmKCByZXN1bHQgJiYgZW5hYmxlZEVsZW1lbnQgIT0gbnVsbCApCi0gICAgewotICAgICAgLy8gV2UgaGF2ZSBhbiBleHRlbnNpb24gZm9yIHRoaXMgZW5hYmxlbWVudCBjb2RlIHNvIHdlIHdpbGwgY2FsbCB0aGlzCi0gICAgICAvLyBjb2RlLgotICAgICAgaWYoIGVuYWJsZU9wZXJhdGlvbk9iamVjdCA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgZW5hYmxlZENsYXNzTmFtZSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlTmFtZSggZW5hYmxlZEVsZW1lbnQsICJlbmFibGVkY2xhc3MiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBlbmFibGVPcGVyYXRpb25PYmplY3QgPSAoSUVuYWJsZU9wZXJhdGlvbillbmFibGVkRWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCBlbmFibGVkQ2xhc3NOYW1lICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmxvZ0Vycm9yKCAiRXJyb3IgbG9hZGluZyBzZXJ2aWNlIHBvbGljeSB1aSBcImVuYWJsZWRcIiBjbGFzcy4iLCBleGMgKTsgICAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIGVuYWJsZU9wZXJhdGlvbk9iamVjdCAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGVuYWJsZU9wZXJhdGlvbk9iamVjdC5pc0VuYWJsZWQoIHNlbGVjdGVkUG9saWNpZXMgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgbGF1bmNoT3BlcmF0aW9uKCBJU2VydmljZVBvbGljeSB0aGlzUG9saWN5LCBMaXN0PElTZXJ2aWNlUG9saWN5PiBzZWxlY3RlZFBvbGljaWVzICkKLSAgewotICAgIGlmKCBsYXVuY2hPcGVyYXRpb25PYmplY3QgPT0gbnVsbCApCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFN0cmluZyBsYXVuY2hDbGFzc05hbWUgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZU5hbWUoIGNvbXBsZXhFbGVtZW50LCAibGF1bmNoY2xhc3MiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgbGF1bmNoT3BlcmF0aW9uT2JqZWN0ID0gKElMYXVuY2hPcGVyYXRpb24pY29tcGxleEVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbiggbGF1bmNoQ2xhc3NOYW1lICk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5sb2dFcnJvciggIkVycm9yIGxvYWRpbmcgc2VydmljZSBwb2xpY3kgdWkgbGF1bmNoIGNsYXNzLiIsIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCBsYXVuY2hPcGVyYXRpb25PYmplY3QgIT0gbnVsbCApCi0gICAgewotICAgICAgbGF1bmNoT3BlcmF0aW9uT2JqZWN0LmxhdW5jaCggc2VsZWN0ZWRQb2xpY2llcyApOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzTXVsdGlTZWxlY3QoKQotICB7Ci0gICAgcmV0dXJuIG11bHRpU2VsZWN0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TXVsdGlTZWxlY3QoYm9vbGVhbiBtdWx0aVNlbGVjdCkKLSAgewotICAgIHRoaXMubXVsdGlTZWxlY3QgPSBtdWx0aVNlbGVjdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0b3IoSURlc2NyaXB0b3IgZGVzY3JpcHRvcikKLSAgewotICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQb2xpY3lJZFBhdHRlcm4oU3RyaW5nIHBvbGljeUlkUGF0dGVybikKLSAgewotICAgIHRoaXMucG9saWN5SWRQYXR0ZXJuID0gcG9saWN5SWRQYXR0ZXJuOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVuYWJsZWRFbGVtZW50KQotICB7Ci0gICAgdGhpcy5lbmFibGVkRWxlbWVudCA9IGVuYWJsZWRFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q29tcGxleEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbXBsZXhFbGVtZW50KQotICB7Ci0gICAgdGhpcy5jb21wbGV4RWxlbWVudCA9IGNvbXBsZXhFbGVtZW50OwotICAgIG9wZXJhdGlvbktpbmQgPSBPcGVyYXRpb25LaW5kLmNvbXBsZXg7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0SXRlbSggU3RyaW5nIGRlZmF1bHRJdGVtICkKLSAgewotICAgIHRoaXMuZGVmYXVsdEl0ZW0gPSBkZWZhdWx0SXRlbTsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRJdGVtKCkKLSAgewotICAgIGlmKCBkZWZhdWx0SXRlbSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgICAgcGxhdGZvcm0gPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlbnVtTGlzdCA9IHBsYXRmb3JtLmdldFN0YXRlRW51bWVyYXRpb24oIGVudW1JZCApOwotICAgICAgCi0gICAgICBpZiggZW51bUxpc3QgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRJdGVtID0gZW51bUxpc3QuZ2V0KDApLmdldElkKCk7Ci0gICAgICAKLSAgICAgICAgLy8gTm8gZGVmYXVsdCBpdGVtIGhhcyBiZWVuIHNwZWNpZmllZCBzbyB3ZSB3aWxsIHNlYXJjaCB0aGUgZW51bWVyYXRpb24gZm9yIG9uZS4KLSAgICAgICAgLy8gSWYgbm9uZSB3YXMgc3BlY2lmaWVkIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBlbnVtZXJhdGlvbiBpcyB1c2VkLgotICAgICAgICBmb3IoIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtIDogZW51bUxpc3QgKQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIGl0ZW0uaXNEZWZhdWx0KCkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRlZmF1bHRJdGVtID0gaXRlbS5nZXRJZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgICAgCi0gICAgcmV0dXJuIGRlZmF1bHRJdGVtOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNVc2VEZWZhdWx0RGF0YSgpCi0gIHsKLSAgICByZXR1cm4gdXNlRGVmYXVsdERhdGE7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVc2VEZWZhdWx0RGF0YSggYm9vbGVhbiB1c2VEZWZhdWx0RGF0YSApCi0gIHsKLSAgICB0aGlzLnVzZURlZmF1bHREYXRhID0gdXNlRGVmYXVsdERhdGE7Ci0gIH0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvSUNvbk1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvSUNvbk1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY5NDk2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL0lDb25NYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI1ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkNvbXBvc2l0ZUltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGNsYXNzIElDb25NYW5hZ2VyCi17Ci0gIHByaXZhdGUgTWFwPFN0cmluZywgSW1hZ2U+IGljb25UYWJsZTsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZmF2b3JpdGUgPSAiZmF2IjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGludmFsaWQgID0gImludiI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3YXJuaW5nICA9ICJ3YXIiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgbG9jayAgICAgPSAibG9jIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZm9sZGVyQmFzZVVSTDsgCi0gIHByaXZhdGUgU3RyaW5nIGxlYWZCYXNlVVJMOwotICBwcml2YXRlIEltYWdlICBmYXZvcml0ZUltYWdlOwotICBwcml2YXRlIEltYWdlICBpbnZhbGlkSW1hZ2U7Ci0gIHByaXZhdGUgSW1hZ2UgIHdhcm5pbmdJbWFnZTsKLSAgcHJpdmF0ZSBJbWFnZSAgbG9ja0ltYWdlOwotICAKLSAgcHJpdmF0ZSBEZWNvcmF0b3JEZXNjcmlwdG9yIGljb25DcmVhdG9yOwotICAKLSAgcHVibGljIElDb25NYW5hZ2VyKCkKLSAgewotICAgIGljb25UYWJsZSA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW1hZ2U+KCk7Ci0gICAgYWRkT3ZlcmxheUljb25zKCk7ICAKLSAgICBpY29uQ3JlYXRvciA9IG5ldyBEZWNvcmF0b3JEZXNjcmlwdG9yKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9sZGVyQmFzZVVybCgpCi0gIHsKLSAgICByZXR1cm4gZm9sZGVyQmFzZVVSTDsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldExlYWZCYXNlVXJsKCkKLSAgewotICAgIHJldHVybiBsZWFmQmFzZVVSTDsgIAotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYWRkT3ZlcmxheUljb25zKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEJ1bmRsZSBidW5kbGUgICAgICA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCk7Ci0gICAgICBVUkwgICAgZm9sZGVyVXJsICAgPSBGaWxlTG9jYXRvci5maW5kKCBidW5kbGUsIG5ldyBQYXRoKCAiaWNvbnMvZnVsbC9vYmoxNi9mbGRyX29iai5naWYiICksIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgVVJMICAgIGxlYWZVcmwgICAgID0gRmlsZUxvY2F0b3IuZmluZCggYnVuZGxlLCBuZXcgUGF0aCggImljb25zL2Z1bGwvb2JqMTYvZmlsZV9vYmouZ2lmIiApLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFVSTCAgICBmYXZvcml0ZVVybCA9IEZpbGVMb2NhdG9yLmZpbmQoIGJ1bmRsZSwgbmV3IFBhdGgoICJpY29ucy9mdWxsL292cjE2L2Zhdm9yaXRlX292ci5naWYiICksIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgVVJMICAgIGludmFsaWRVcmwgID0gRmlsZUxvY2F0b3IuZmluZCggYnVuZGxlLCBuZXcgUGF0aCggImljb25zL2Z1bGwvb3ZyMTYvaW52YWxpZHR5cGVfb3ZyLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICBVUkwgICAgd2FybmluZ1VybCAgPSBGaWxlTG9jYXRvci5maW5kKCBidW5kbGUsIG5ldyBQYXRoKCAiaWNvbnMvZnVsbC9vdnIxNi93YXJuaW5nX292ci5naWYiICksIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgVVJMICAgIGxvY2tVcmwgICAgID0gRmlsZUxvY2F0b3IuZmluZCggYnVuZGxlLCBuZXcgUGF0aCggImljb25zL2Z1bGwvb3ZyMTYvdW5tb2RpZmlhYmxlX292ci5naWYiICksIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBnZXRJY29uSW1hZ2UoIGZvbGRlclVybCApOwotICAgICAgZ2V0SWNvbkltYWdlKCBsZWFmVXJsICk7Ci0gICAgICBmYXZvcml0ZUltYWdlICAgPSBnZXRJY29uSW1hZ2UoIGZhdm9yaXRlVXJsICk7Ci0gICAgICBpbnZhbGlkSW1hZ2UgICAgPSBnZXRJY29uSW1hZ2UoIGludmFsaWRVcmwgKTsKLSAgICAgIHdhcm5pbmdJbWFnZSAgICA9IGdldEljb25JbWFnZSggd2FybmluZ1VybCApOwotICAgICAgbG9ja0ltYWdlICAgICAgID0gZ2V0SWNvbkltYWdlKCBsb2NrVXJsICk7Ci0gICAgICAKLSAgICAgIGZvbGRlckJhc2VVUkwgPSBmb2xkZXJVcmwudG9TdHJpbmcoKTsKLSAgICAgIGxlYWZCYXNlVVJMICAgPSBsZWFmVXJsLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGNhdGNoKCBUaHJvd2FibGUgZXhjICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkubG9nRXJyb3IoICJFcnJvciByZWFkaW5nIGljb24gb3ZlcmxheXMiLCBleGMgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaGFzQ2hhbmdlZCggU3RyaW5nW10gc3RyaW5nMSwgU3RyaW5nW10gc3RyaW5nMiApCi0gIHsKLSAgICBpZiggc3RyaW5nMSA9PSBudWxsIHx8IHN0cmluZzIgPT0gbnVsbCB8fCBzdHJpbmcxLmxlbmd0aCAhPSBzdHJpbmcyLmxlbmd0aCApIHJldHVybiB0cnVlOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzdHJpbmcxLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgU3RyaW5nIHZhbHVlMSA9IHN0cmluZzFbaW5kZXhdOwotICAgICAgU3RyaW5nIHZhbHVlMiA9IHN0cmluZzJbaW5kZXhdOwotICAgICAgCi0gICAgICAvLyBXZSBjYW4gZG8gcG9pbnRlciBjb21wYXJpc29uIHNpbmNlIHdlIGFyZSB1c2luZyBjb25zdGFudCBTdHJpbmdzLgotICAgICAgaWYoIHZhbHVlMSAhPSB2YWx1ZTIgKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgSW1hZ2UgZ2V0SWNvbk92ZXJsYXkoIFN0cmluZyBiYXNlVXJsLCBTdHJpbmdbXSBvdmVybGF5cyApCi0gIHsKLSAgICBTdHJpbmcgaW1hZ2VVcmwgID0gZ2V0SW1hZ2VVUkwoIGJhc2VVcmwsIG92ZXJsYXlzICk7IAotICAgIEltYWdlICByZXN1bHQgICAgPSAoSW1hZ2UpaWNvblRhYmxlLmdldCggaW1hZ2VVcmwgKTsKLSAgICAKLSAgICBpZiggcmVzdWx0ID09IG51bGwgKQotICAgIHsKLSAgICAgIEltYWdlIGJhc2VJbWFnZSA9IChJbWFnZSlpY29uVGFibGUuZ2V0KCBiYXNlVXJsICk7Ci0gICAgICAKLSAgICAgIGlmKCBiYXNlSW1hZ2UgPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gbG9hZCB0aGlzIGJhc2VJbWFnZQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGJhc2VJbWFnZSA9IGdldEljb25JbWFnZSggbmV3IFVSTCggYmFzZVVybCApICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmxvZ0Vycm9yKCAiRXJyb3IgbG9hZGluZyBpbWFnZSBmcm9tOiIgKyBiYXNlVXJsLCBleGMpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWNvbkNyZWF0b3Iuc2V0QmFzZUltYWdlKCBiYXNlSW1hZ2UsIG92ZXJsYXlzICk7Ci0gICAgICAKLSAgICAgIHJlc3VsdCA9IGljb25DcmVhdG9yLmNyZWF0ZUltYWdlKCk7Ci0gICAgICBpY29uVGFibGUucHV0KCBpbWFnZVVybCwgcmVzdWx0ICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNPdmVybGF5KCBTdHJpbmdbXSBvdmVybGF5cywgU3RyaW5nIHZhbHVlICkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgCi0gICAgZm9yKCBTdHJpbmcgb3ZlcmxheSA6IG92ZXJsYXlzICkKLSAgICB7Ci0gICAgICAvLyBOb3RlOiBXZSBhcmUgdXNpbmcgc3RyaW5nIHBvaW50ZXIgY29tcGFyaXNvbiBoZXJlIHNpbmNlLCB0aGUgc3RyaW5ncwotICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgdGhlIGNvbnN0YW50cyBkZWZpbmVkIGFib3ZlLgotICAgICAgaWYoIG92ZXJsYXkgPT0gdmFsdWUgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0gICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRJbWFnZVVSTCggU3RyaW5nIGJhc2VVcmwsIFN0cmluZ1tdIG92ZXJsYXlzICkKLSAgewotICAgIFN0cmluZyB1cmwgPSBiYXNlVXJsOwotICAgIAotICAgIGZvciggU3RyaW5nIHZhbHVlIDogb3ZlcmxheXMgKQotICAgIHsKLSAgICAgIGlmKCB2YWx1ZSAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgdXJsID0gdXJsICsgIjoiICsgdmFsdWU7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHVybDsKLSAgfQotICAKLSAgcHVibGljIEltYWdlIGdldEljb25JbWFnZSggVVJMIHVybCApCi0gIHsKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnRvU3RyaW5nKCk7Ci0gICAgSW1hZ2UgIGltYWdlICAgICA9IGljb25UYWJsZS5nZXQoIHVybFN0cmluZyApOwotICAgIAotICAgIGlmKCBpbWFnZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBJbWFnZURlc2NyaXB0b3IgaW1hZ2VEZXNjID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwodXJsKTsKLSAgICAgIAotICAgICAgaW1hZ2UgPSBpbWFnZURlc2MuY3JlYXRlSW1hZ2UoKTsKLSAgICAgIGljb25UYWJsZS5wdXQoIHVybFN0cmluZywgaW1hZ2UgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGltYWdlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotICAgIGZvciggSW1hZ2UgaW1hZ2UgOiBpY29uVGFibGUudmFsdWVzKCkgKQotICAgIHsKLSAgICAgIGltYWdlLmRpc3Bvc2UoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgRGVjb3JhdG9yRGVzY3JpcHRvciBleHRlbmRzIENvbXBvc2l0ZUltYWdlRGVzY3JpcHRvcgotICB7Ci0gICAgcHJpdmF0ZSBJbWFnZSAgICBiYXNlSW1hZ2U7Ci0gICAgcHJpdmF0ZSBQb2ludCAgICBzaXplOwotICAgIHByaXZhdGUgU3RyaW5nW10gb3ZlcmxheXM7Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgZHJhd0NvbXBvc2l0ZUltYWdlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLSAgICB7Ci0gICAgICBkcmF3SW1hZ2UoIGJhc2VJbWFnZS5nZXRJbWFnZURhdGEoKSwgMCwgMCk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBvdmVybGF5cy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBpZiggaGFzT3ZlcmxheShvdmVybGF5cywgZmF2b3JpdGUpICkKLSAgICAgICAgewotICAgICAgICAgIGRyYXdJbWFnZSggZmF2b3JpdGVJbWFnZS5nZXRJbWFnZURhdGEoKSwgc2l6ZS54IC0gZmF2b3JpdGVJbWFnZS5nZXRCb3VuZHMoKS53aWR0aCwgMCApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggaGFzT3ZlcmxheSggb3ZlcmxheXMsIHdhcm5pbmcgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBkcmF3SW1hZ2UoIHdhcm5pbmdJbWFnZS5nZXRJbWFnZURhdGEoKSwgMCwgc2l6ZS55IC0gd2FybmluZ0ltYWdlLmdldEJvdW5kcygpLmhlaWdodCApOyAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIGhhc092ZXJsYXkoIG92ZXJsYXlzLCBpbnZhbGlkICkgKQotICAgICAgICB7Ci0gICAgICAgICAgZHJhd0ltYWdlKCBpbnZhbGlkSW1hZ2UuZ2V0SW1hZ2VEYXRhKCksIDAsIHNpemUueSAtIGludmFsaWRJbWFnZS5nZXRCb3VuZHMoKS5oZWlnaHQgKTsgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBoYXNPdmVybGF5KCBvdmVybGF5cywgbG9jayApICkKLSAgICAgICAgewotICAgICAgICAgIGRyYXdJbWFnZSggbG9ja0ltYWdlLmdldEltYWdlRGF0YSgpLCAKLSAgICAgICAgICAgICAgICAgICAgIHNpemUueCAtIGxvY2tJbWFnZS5nZXRCb3VuZHMoKS53aWR0aCwgCi0gICAgICAgICAgICAgICAgICAgICBzaXplLnkgLSBsb2NrSW1hZ2UuZ2V0Qm91bmRzKCkuaGVpZ2h0ICk7ICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QmFzZUltYWdlKCBJbWFnZSBpbWFnZSwgU3RyaW5nW10gb3ZlcmxheXMgKQotICAgIHsgCi0gICAgICBSZWN0YW5nbGUgYm91bmRzID0gaW1hZ2UuZ2V0Qm91bmRzKCk7Ci0gICAgICAKLSAgICAgIHRoaXMuYmFzZUltYWdlID0gaW1hZ2U7Ci0gICAgICB0aGlzLnNpemUgICAgICA9IG5ldyBQb2ludCggYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0ICk7Ci0gICAgICB0aGlzLm92ZXJsYXlzICA9IG92ZXJsYXlzOwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgUG9pbnQgZ2V0U2l6ZSgpCi0gICAgewotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1BvbGljeU9wZXJhdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvUG9saWN5T3BlcmF0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmU3NjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvUG9saWN5T3BlcmF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUKLSAqIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklQb2xpY3lPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBQb2xpY3lPcGVyYXRpb25JbXBsIGltcGxlbWVudHMgSVBvbGljeU9wZXJhdGlvbgotewotICBwcml2YXRlIEJhc2VPcGVyYXRpb25JbXBsIGJhc2VPcGVyYXRpb247Ci0gIHByaXZhdGUgSVNlcnZpY2VQb2xpY3kgICAgcG9saWN5OwotICAKLSAgcHVibGljIFBvbGljeU9wZXJhdGlvbkltcGwoIEJhc2VPcGVyYXRpb25JbXBsIGJhc2VPcGVyYXRpb24sIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gIHsKLSAgICB0aGlzLmJhc2VPcGVyYXRpb24gPSBiYXNlT3BlcmF0aW9uOwotICAgIHRoaXMucG9saWN5ICAgICAgICA9IHBvbGljeTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0SXRlbSgpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXREZWZhdWx0SXRlbSgpOwotICB9Ci0KLSAgcHVibGljIElEZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKQotICB7Ci0gICAgcmV0dXJuIGJhc2VPcGVyYXRpb24uZ2V0RGVzY3JpcHRvcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbnVtZXJhdGlvbklkKCkKLSAgewotICAgIHJldHVybiBiYXNlT3BlcmF0aW9uLmdldEVudW1lcmF0aW9uSWQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGJhc2VPcGVyYXRpb24uZ2V0SWQoKTsKLSAgfQotCi0gIHB1YmxpYyBPcGVyYXRpb25LaW5kIGdldE9wZXJhdGlvbktpbmQoKQotICB7Ci0gICAgcmV0dXJuIGJhc2VPcGVyYXRpb24uZ2V0T3BlcmF0aW9uS2luZCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQb2xpY3lJZFBhdHRlcm4oKQotICB7Ci0gICAgcmV0dXJuIGJhc2VPcGVyYXRpb24uZ2V0UG9saWN5SWRQYXR0ZXJuKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMgKQotICB7Ci0gICAgcmV0dXJuIGJhc2VPcGVyYXRpb24uaXNFbmFibGVkKCBzZWxlY3RlZFBvbGljaWVzICk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1dvcmtzcGFjZU9ubHkoKQotICB7Ci0gICAgcmV0dXJuIGJhc2VPcGVyYXRpb24uaXNXb3Jrc3BhY2VPbmx5KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsYXVuY2hPcGVyYXRpb24oIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMpCi0gIHsKLSAgICBiYXNlT3BlcmF0aW9uLmxhdW5jaE9wZXJhdGlvbiggcG9saWN5LCBzZWxlY3RlZFBvbGljaWVzICk7Ci0gIH0KLQotICBwdWJsaWMgSVNlcnZpY2VQb2xpY3kgZ2V0U2VydmljZVBvbGljeSgpCi0gIHsKLSAgICByZXR1cm4gcG9saWN5OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0ZUl0ZW0oIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgSVBvbGljeVN0YXRlIHN0YXRlICAgICAgID0gZ2V0U3RhdGUoIHByb2plY3QgKTsKLSAgICBTdHJpbmcgICAgICAga2V5ICAgICAgICAgPSBiYXNlT3BlcmF0aW9uLmdldElkKCk7Ci0gICAgU3RyaW5nICAgICAgIGRlZmF1bHRJdGVtID0gYmFzZU9wZXJhdGlvbi5nZXREZWZhdWx0SXRlbSgpOwotICAgIAotICAgIGlmKCBiYXNlT3BlcmF0aW9uLmlzVXNlRGVmYXVsdERhdGEoKSApCi0gICAgewotICAgICAga2V5ID0gSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIGRlZmF1bHRJdGVtICE9IG51bGwgKQotICAgIHsKLSAgICAgIHN0YXRlLnB1dERlZmF1bHRWYWx1ZSgga2V5LCBkZWZhdWx0SXRlbSwgZmFsc2UgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXRlLmdldFZhbHVlKCBrZXkgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN0YXRlSXRlbSggSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHN0YXRlSXRlbSApCi0gIHsKLSAgICBJUG9saWN5U3RhdGUgc3RhdGUgPSBnZXRTdGF0ZSggcHJvamVjdCApOwotICAgIFN0cmluZyAgICAgICBrZXkgICA9IGJhc2VPcGVyYXRpb24uZ2V0SWQoKTsKLSAgICAKLSAgICBpZiggYmFzZU9wZXJhdGlvbi5pc1VzZURlZmF1bHREYXRhKCkgKQotICAgIHsKLSAgICAgIGtleSA9IElQb2xpY3lTdGF0ZS5EZWZhdWx0VmFsdWVLZXk7Ci0gICAgfQotICAgIAotICAgIHN0YXRlLnB1dFZhbHVlKCBrZXksIHN0YXRlSXRlbSApOwotICB9Ci0gIAotICBwcml2YXRlIElQb2xpY3lTdGF0ZSBnZXRTdGF0ZSggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICByZXR1cm4gcHJvamVjdCA9PSBudWxsID8gcG9saWN5LmdldFBvbGljeVN0YXRlKCkgOiBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoIHByb2plY3QgKTsgICAKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVXNlRGVmYXVsdERhdGEoKSAKLSAgewotCSAgcmV0dXJuIGJhc2VPcGVyYXRpb24uaXNVc2VEZWZhdWx0RGF0YSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1F1aWNrRml4QWN0aW9uSW5mb0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvUXVpY2tGaXhBY3Rpb25JbmZvSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzhmZmIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvUXVpY2tGaXhBY3Rpb25JbmZvSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTIwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTsKLQotcHVibGljIGNsYXNzIFF1aWNrRml4QWN0aW9uSW5mb0ltcGwgaW1wbGVtZW50cyBJUXVpY2tGaXhBY3Rpb25JbmZvCi17Ci0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQ7Ci0gIHByaXZhdGUgSURlc2NyaXB0b3IgICAgICAgICAgIGRlc2NyaXB0b3I7Ci0gIAotICBwdWJsaWMgUXVpY2tGaXhBY3Rpb25JbmZvSW1wbCggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIElEZXNjcmlwdG9yIGRlc2NyaXB0b3IgKQotICB7Ci0gICAgdGhpcy5lbGVtZW50ICAgID0gZWxlbWVudDsKLSAgICB0aGlzLmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwotICB9Ci0gIAotICBwdWJsaWMgSVF1aWNrRml4QWN0aW9uIGdldEFjdGlvbigpCi0gIHsKLSAgICBJUXVpY2tGaXhBY3Rpb24gcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBPYmplY3QgYWN0aW9uID0gZWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCAiY2xhc3MiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgaWYoIGFjdGlvbiBpbnN0YW5jZW9mIElRdWlja0ZpeEFjdGlvbiApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChJUXVpY2tGaXhBY3Rpb24pYWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5sb2dFcnJvciggIkVycm9yIGxvYWRpbmcgcXVpY2sgZml4IGFjdGlvbi4iLCBleGMgKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIElEZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKQotICB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2Nyb2xsZWRQYWdlQ29udGVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TY3JvbGxlZFBhZ2VDb250ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYmVmYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TY3JvbGxlZFBhZ2VDb250ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuRm9ybUNvbG9yczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy53aWRnZXRzLkZvcm1Ub29sa2l0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLndpZGdldHMuU2hhcmVkU2Nyb2xsZWRDb21wb3NpdGU7Ci0KLQotcHVibGljIGNsYXNzIFNjcm9sbGVkUGFnZUNvbnRlbnQgZXh0ZW5kcyBTaGFyZWRTY3JvbGxlZENvbXBvc2l0ZSB7Ci0KLQlwcml2YXRlIEZvcm1Ub29sa2l0IGZUb29sa2l0OwotCQotCXB1YmxpYyBTY3JvbGxlZFBhZ2VDb250ZW50KENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcyhwYXJlbnQsIFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0JfQotCQotCXB1YmxpYyBTY3JvbGxlZFBhZ2VDb250ZW50KENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSkgewotCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKLQkJCi0JCXNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0JCQotCQlmVG9vbGtpdD0gZ2V0RGlhbG9nc0Zvcm1Ub29sa2l0KCk7Ci0JCQotCQlzZXRFeHBhbmRIb3Jpem9udGFsKHRydWUpOwotCQlzZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKLQkJCi0JCUNvbXBvc2l0ZSBib2R5PSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKLQkJYm9keS5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQlzZXRDb250ZW50KGJvZHkpOwotCX0KLQkKLQlwdWJsaWMgRm9ybVRvb2xraXQgZ2V0RGlhbG9nc0Zvcm1Ub29sa2l0KCkgewotCQlpZiAoZlRvb2xraXQgPT0gbnVsbCkgewotCQkJRm9ybUNvbG9ycyBjb2xvcnM9IG5ldyBGb3JtQ29sb3JzKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCWNvbG9ycy5zZXRCYWNrZ3JvdW5kKG51bGwpOwotCQkJY29sb3JzLnNldEZvcmVncm91bmQobnVsbCk7CQotCQkJZlRvb2xraXQ9IG5ldyBGb3JtVG9vbGtpdChjb2xvcnMpOwotCQl9Ci0JCXJldHVybiBmVG9vbGtpdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGFwdENoaWxkKENvbnRyb2wgY2hpbGRDb250cm9sKSB7Ci0JCWZUb29sa2l0LmFkYXB0KGNoaWxkQ29udHJvbCwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCQotCXB1YmxpYyBDb21wb3NpdGUgZ2V0Qm9keSgpIHsKLQkJcmV0dXJuIChDb21wb3NpdGUpIGdldENvbnRlbnQoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljaWVzQ29tcG9zaXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDVmYmQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljaWVzQ29tcG9zaXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEwNiAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEyMCAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkgCi0gKiAyMDA3MTIxMiAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICogMjAwODAyMTEgICAyMTg1MjAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMjQgICAyMjIwOTUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgVUkgbm93IGxpc3RlbnMgZm9yIHN0YXRlIGNoYW5nZXMuCi0gKiAyMDA4MDMyNCAgIDIyMzYzNCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBTZXJ2aWNlIFBvbGljaWVzIHByZWZlcmVuY2UgdHJlZSBzaG91bGQgYmUgMyBsZXZlbCB0cmVlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU2Nyb2xsZWRDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5FeHBhbnNpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5FeHBhbnNpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy53aWRnZXRzLkV4cGFuZGFibGVDb21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5JV29ya2JlbmNoSGVscFN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lSZWxhdGlvbnNoaXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy5TZXJ2aWNlVXRpbHM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSBpbXBsZW1lbnRzCi0JCVNlbGVjdGlvbkxpc3RlbmVyLCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciAgewotCi0JcHJpdmF0ZSBTY3JvbGxlZENvbXBvc2l0ZSBvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGU7Ci0JLy9hIHNjcm9sbGFibGUgY29tcG9zaXRlIGNvbnRhaW5pbmcgb3BlcmF0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzZWxlY3RlZCBwb2xpY2llcwotCXByaXZhdGUgQ29tcG9zaXRlIG9wZXJhdGlvbnNDb21wb3NpdGU7Ci0JcHJpdmF0ZSBJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtOwotCXByaXZhdGUgQ29tcG9zaXRlIG1hc3RlckNvbXBvc2l0ZTsKLQlwcml2YXRlIENvbXBvc2l0ZSBkZXRhaWxzQ29tcG9zaXRlOwotCXByaXZhdGUgVHJlZSBtYXN0ZXJQb2xpY3lUcmVlOwotCS8vdGVydGlhcnkgYW5kIGhpZ2hlciBsZXZlbCBwb2xpY3kgbm9kZXMgaW4gYSBzZXBhcmF0ZSB0cmVlCi0JcHJpdmF0ZSBUcmVlIGRldGFpbHNQb2xpY3lUcmVlOwotCXByaXZhdGUgVGV4dCB0ZXh0X0RldGFpbHNQYW5lbF9kZXNjcmlwdGlvbjsKLQlwcml2YXRlIFRleHQgdGV4dF9EZXRhaWxzUGFuZWxfZGVwZW5kZW5jaWVzOwotCXByaXZhdGUgTGFiZWwgbGFiZWxfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uOwotCXByaXZhdGUgTGFiZWwgbGFiZWxfZGV0YWlsc1BhbmVsX2RlcGVuZGFuY2llczsKLQlwcml2YXRlIEhhc2h0YWJsZTxTdHJpbmcsIElTdGF0dXM+IGFsbEVycm9yczsKLQlwcml2YXRlIElTdGF0dXMgZXJyb3I7Ci0JcHJpdmF0ZSBib29sZWFuIGJDb21wbGV4T3BDb21wbGV0ZWQgPSB0cnVlOwotCXByaXZhdGUgTGlzdDxDaGlsZENoYW5nZUV2ZW50PiBsaXN0Q2hpbGRDaGFuZ2VFdmVudHM7Ci0JcHJpdmF0ZSBJQ29uTWFuYWdlciBpY29uTWFuYWdlciA9IG5ldyBJQ29uTWFuYWdlcigpOwotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0JcHJpdmF0ZSBTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcjsKLQlwcml2YXRlIEV4cGFuZGFibGVDb21wb3NpdGUgZXhjb21wb3NpdGU7Ci0JcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0KLQkJCS5nZXRJbnN0YW5jZSgpOwotCXByaXZhdGUgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgcGxhdGZvcm1VSSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJCi0JCQkuZ2V0SW5zdGFuY2UoKTsKLQlwcml2YXRlIElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyIHN0YXRlQ2hhbmdlTGlzdGVuZXIgID0gbmV3IFN0YXRlQ2hhbmdlTGlzdGVuZXIoKTsKLQlwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlRW5hYmxlZCAgID0gdHJ1ZTsKLQlwcml2YXRlIEhhc2hTZXQ8SVNlcnZpY2VQb2xpY3k+ICAgIHN0YXRlQ2hhbmdlUG9saWN5U2V0ID0gbmV3IEhhc2hTZXQ8SVNlcnZpY2VQb2xpY3k+KCk7Ci0JcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICAgICBsYXN0U2VsZWN0ZWRTcCAgICAgICA9IG51bGw7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGV4cGFuZGFibGUgY29tcG9zaXRlCi0JICogQHBhcmFtIHBhcmVudAotCSAqIEBwYXJhbSBuQ29sdW1ucwotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIEV4cGFuZGFibGVDb21wb3NpdGUgY3JlYXRlRXhwYW5kYWJsZUNvbXBvc2l0ZShDb21wb3NpdGUgcGFyZW50LAotCQkJaW50IG5Db2x1bW5zKSB7Ci0JCUV4cGFuZGFibGVDb21wb3NpdGUgZXhjb21wb3NpdGUgPSBuZXcgRXhwYW5kYWJsZUNvbXBvc2l0ZShwYXJlbnQsCi0JCQkJU1dULk5PTkUsIEV4cGFuZGFibGVDb21wb3NpdGUuVFdJU1RJRQotCQkJCQkJfCBFeHBhbmRhYmxlQ29tcG9zaXRlLkNMSUVOVF9JTkRFTlQpOwotCQlleGNvbXBvc2l0ZS5zZXRFeHBhbmRlZChmYWxzZSk7Ci0JCWV4Y29tcG9zaXRlLnNldFZpc2libGUoZmFsc2UpOwotCQlleGNvbXBvc2l0ZS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnRSZWdpc3RyeSgpLmdldEJvbGQoCi0JCQkJSkZhY2VSZXNvdXJjZXMuRElBTE9HX0ZPTlQpKTsKLQkJZXhjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuRklMTCwKLQkJCQl0cnVlLCBmYWxzZSwgbkNvbHVtbnMsIDEpKTsKLQkJZXhjb21wb3NpdGUuYWRkRXhwYW5zaW9uTGlzdGVuZXIobmV3IEV4cGFuc2lvbkFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBleHBhbnNpb25TdGF0ZUNoYW5nZWQoRXhwYW5zaW9uRXZlbnQgZSkgewotCQkJCWV4cGFuZGVkU3RhdGVDaGFuZ2VkKChFeHBhbmRhYmxlQ29tcG9zaXRlKSBlLmdldFNvdXJjZSgpKTsKLQkJCX0KLQkJfSk7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUoZXhjb21wb3NpdGUpOwotCQlyZXR1cm4gZXhjb21wb3NpdGU7Ci0JfQotCQotCS8qKgotCSAqIEBhdXRob3IgZXJpY2RwCi0JICogSGVscGVyIGNsYXNzIHRoYXQgZW5jYXBzdWxhdGVzIGRhdGEgcmVxdWlyZWQgd2hlbiBhbiBhY3Rpb24gY29udHJvbCBjaGFuZ2VzIHN0YXRlCi0JICoKLQkgKi8KLQlwcml2YXRlIGNsYXNzIEFjdGlvbkNvbnRyb2xEYXRhIHsKLQkJcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiBzcExpc3Q7Ci0JCXByaXZhdGUgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb0xpc3Q7Ci0vLwkJcHJpdmF0ZSBJUG9saWN5T3BlcmF0aW9uIHBvOwotCi0JCXB1YmxpYyBBY3Rpb25Db250cm9sRGF0YShMaXN0PElTZXJ2aWNlUG9saWN5PiBzcExpc3QsIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9MaXN0KSB7Ci0JCQl0aGlzLnNwTGlzdCA9IHNwTGlzdDsKLQkJCXRoaXMucG9MaXN0ID0gcG9MaXN0OwotCQl9Ci0JCXB1YmxpYyBMaXN0PElTZXJ2aWNlUG9saWN5PiBnZXRTcExpc3QoKSB7Ci0JCQlyZXR1cm4gc3BMaXN0OwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0U3BMaXN0KExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwTGlzdCkgewotCQkJdGhpcy5zcExpc3QgPSBzcExpc3Q7Ci0JCX0KLS8vCi0vLwkJcHVibGljIElQb2xpY3lPcGVyYXRpb24gZ2V0UG8oKSB7Ci0vLwkJCXJldHVybiBwbzsKLS8vCQl9Ci0vLwotLy8JCXB1YmxpYyB2b2lkIHNldFBvKElQb2xpY3lPcGVyYXRpb24gcG8pIHsKLS8vCQkJdGhpcy5wbyA9IHBvOwotLy8JCX0KLQotCQlwdWJsaWMgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBnZXRQb0xpc3QoKSB7Ci0JCQlyZXR1cm4gcG9MaXN0OwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0UG9MaXN0KExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9MaXN0KSB7Ci0JCQl0aGlzLnBvTGlzdCA9IHBvTGlzdDsKLQkJfQotCX0KLQotCS8qKgotCSAqIE1ha2VzIHRoZSBzY3JvbGxhYmxlIGNvbXBvc2l0ZSBhd2FyZSBvZiB0aGlzIGNvbnRyb2wsIHNvIGV4cGFuZC9jb2xsYXBzZQotCSAqIG9mIHRoZSBzY3JvbGxhYmxlIGNvbXBvc2l0ZSB3aWxsIG1vdmUgdGhpcyBjb250cm9sIGRvd24vdXAgYWNjb3JkaW5nbHkKLQkgKiBAcGFyYW0gY29udHJvbCB0aGUgY29udHJvbCB0byBtYWtlIHRoZSBzY3JvbGxhYmxlIGNvbXBvc2l0ZSBhd2FyZSBvZgotCSAqLwotCXByaXZhdGUgdm9pZCBtYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKENvbnRyb2wgY29udHJvbCkgewotCQlTY3JvbGxlZFBhZ2VDb250ZW50IHBhcmVudFNjcm9sbGVkQ29tcG9zaXRlID0gZ2V0UGFyZW50U2Nyb2xsZWRDb21wb3NpdGUoY29udHJvbCk7Ci0JCWlmIChwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSAhPSBudWxsKSB7Ci0JCQlwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZS5hZGFwdENoaWxkKGNvbnRyb2wpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTY3JvbGxlZFBhZ2VDb250ZW50IGdldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlKENvbnRyb2wgY29udHJvbCkgewotCQlDb250cm9sIHBhcmVudCA9IGNvbnRyb2wuZ2V0UGFyZW50KCk7Ci0JCXdoaWxlICghKHBhcmVudCBpbnN0YW5jZW9mIFNjcm9sbGVkUGFnZUNvbnRlbnQpICYmIHBhcmVudCAhPSBudWxsKSB7Ci0JCQlwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7Ci0JCX0KLQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFNjcm9sbGVkUGFnZUNvbnRlbnQpIHsKLQkJCXJldHVybiAoU2Nyb2xsZWRQYWdlQ29udGVudCkgcGFyZW50OwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgZmluYWwgdm9pZCBleHBhbmRlZFN0YXRlQ2hhbmdlZChFeHBhbmRhYmxlQ29tcG9zaXRlIGV4cGFuZGFibGUpIHsKLQkJU2Nyb2xsZWRQYWdlQ29udGVudCBwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSA9IGdldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlKGV4cGFuZGFibGUpOwotCQlpZiAocGFyZW50U2Nyb2xsZWRDb21wb3NpdGUgIT0gbnVsbCkgewotCQkJcGFyZW50U2Nyb2xsZWRDb21wb3NpdGUucmVmbG93KHRydWUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHBhcmVudAotCSAqIEByZXR1cm4gYSBzY3JvbGxhYmxlIGNvbXBvc2l0ZSBjb250YWluaW5nIGFuIGV4cGFuZGFibGUgY29udGVudAotCSAqCi0JICovCi0JcHJpdmF0ZSBDb21wb3NpdGUgY3JlYXRlRGV0YWlsc1Njcm9sbFBhZ2VDb250ZW50KENvbXBvc2l0ZSBwYXJlbnQpIHsKLQotCQlpbnQgbkNvbHVtbnMgPSAxOwotCi0JCWZpbmFsIFNjcm9sbGVkUGFnZUNvbnRlbnQgcGFnZUNvbnRlbnQgPSBuZXcgU2Nyb2xsZWRQYWdlQ29udGVudChwYXJlbnQpOwotCi0JCUdyaWRMYXlvdXQgcGFnZUNvbnRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlwYWdlQ29udExheW91dC5udW1Db2x1bW5zID0gbkNvbHVtbnM7Ci0JCXBhZ2VDb250TGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXBhZ2VDb250TGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gcGFnZUNvbnRlbnQuZ2V0Qm9keSgpOwotCQljb21wb3NpdGUuc2V0TGF5b3V0KHBhZ2VDb250TGF5b3V0KTsKLQotCQlleGNvbXBvc2l0ZSA9IGNyZWF0ZUV4cGFuZGFibGVDb21wb3NpdGUoY29tcG9zaXRlLCBuQ29sdW1ucyk7Ci0KLQkJQ29tcG9zaXRlIGlubmVyID0gbmV3IENvbXBvc2l0ZShleGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQlpbm5lci5zZXRGb250KGNvbXBvc2l0ZS5nZXRGb250KCkpOwotCQlpbm5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQobkNvbHVtbnMsIGZhbHNlKSk7Ci0JCWV4Y29tcG9zaXRlLnNldENsaWVudChpbm5lcik7Ci0JCS8vZGV0YWlscyBwb2xpY3kgdHJlZSBmb3IgdGVydGlhcnkgYW5kIGhpZ2hlciBsZXZlbCBzZXJ2aWNlIHBvbGljaWVzCi0JCWRldGFpbHNQb2xpY3lUcmVlID0gbmV3IFRyZWUoaW5uZXIsIFNXVC5CT1JERVIgfCBTV1QuTVVMVEkpOwotCQlkZXRhaWxzUG9saWN5VHJlZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJR3JpZERhdGEgZGV0YWlsc1ByZWZUcmVlR0QgPSBuZXcgR3JpZERhdGEoCi0JCQkJR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLQkJZGV0YWlsc1ByZWZUcmVlR0QuaGVpZ2h0SGludCA9IDUwOwotCQlkZXRhaWxzUG9saWN5VHJlZS5zZXRMYXlvdXREYXRhKGRldGFpbHNQcmVmVHJlZUdEKTsKLQkJZGV0YWlsc1BvbGljeVRyZWUuc2V0VG9vbFRpcFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFNQX0RFVEFJTFNUUkVFKTsKLQkJLy9tYWtlIHRoZSBzY3JvbGxhYmxlIGNvbXBvc2l0ZSBhd2FyZSBvZiB0aGUgdHJlZSBzbyBleHBhbmQvY29sbGFwc2Ugd29ya3MgcHJvcGVybHkKLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShkZXRhaWxzUG9saWN5VHJlZSk7Ci0JCQotCQljcmVhdGVQb2xpY3lPcGVyYXRpb25zQ29tcG9zaXRlKGNvbXBvc2l0ZSk7Ci0KLQkJbGFiZWxfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCi0JCWxhYmVsX0RldGFpbHNQYW5lbF9kZXNjcmlwdGlvbgotCQkJCS5zZXRUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVTQ1JJUFRJT04pOwotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKGxhYmVsX0RldGFpbHNQYW5lbF9kZXNjcmlwdGlvbik7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uID0gbmV3IFRleHQoY29tcG9zaXRlLCBTV1QuV1JBUAotCQkJCXwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5SRUFEX09OTFkpOwotCQlHcmlkRGF0YSBkZXRhaWxzR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMCi0JCQkJfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotCQlkZXRhaWxzR0QuaGVpZ2h0SGludCA9IDUwOwotCQlkZXRhaWxzR0Qud2lkdGhIaW50ID0gNDAwOwotCQl0ZXh0X0RldGFpbHNQYW5lbF9kZXNjcmlwdGlvbi5zZXRMYXlvdXREYXRhKGRldGFpbHNHRCk7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uLnNldFRvb2xUaXBUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BTUF9ERVNDUklQVElPTik7Ci0KLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZSh0ZXh0X0RldGFpbHNQYW5lbF9kZXNjcmlwdGlvbik7Ci0JCWxhYmVsX2RldGFpbHNQYW5lbF9kZXBlbmRhbmNpZXMgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUobGFiZWxfZGV0YWlsc1BhbmVsX2RlcGVuZGFuY2llcyk7Ci0JCWxhYmVsX2RldGFpbHNQYW5lbF9kZXBlbmRhbmNpZXMKLQkJCQkuc2V0VGV4dChXc3RTUFVJUGx1Z2luTWVzc2FnZXMuTEFCRUxfU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ0lFUyk7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2RlcGVuZGVuY2llcyA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULldSQVAKLQkJCQl8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuUkVBRF9PTkxZKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVwZW5kZW5jaWVzLnNldFRvb2xUaXBUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BTUF9ERVBFTkRFTkNJRVMpOwotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKHRleHRfRGV0YWlsc1BhbmVsX2RlcGVuZGVuY2llcyk7Ci0JCUdyaWREYXRhIGRlcGVuZGVuY2llc0dEID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTAotCQkJCXwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLQkJZGVwZW5kZW5jaWVzR0QuaGVpZ2h0SGludCA9IDEwMDsKLQkJZGVwZW5kZW5jaWVzR0Qud2lkdGhIaW50ID0gNDAwOwotCQl0ZXh0X0RldGFpbHNQYW5lbF9kZXBlbmRlbmNpZXMuc2V0TGF5b3V0RGF0YShkZXBlbmRlbmNpZXNHRCk7Ci0KLQkJcmV0dXJuIHBhZ2VDb250ZW50OwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgdGhlIHNjcm9sbGFibGUgY29tcG9zaXRlIHRoYXQgd2lsbCBjb250YWluIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIGEgcG9saWN5IG9wZXJhdGlvbgotCSAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb21wb3NpdGUKLQkgKi8KLQlwcml2YXRlIHZvaWQgY3JlYXRlUG9saWN5T3BlcmF0aW9uc0NvbXBvc2l0ZShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCW9wZXJhdGlvbnNTY3JvbGxlZENvbXBvc2l0ZSA9IG5ldyBTY3JvbGxlZENvbXBvc2l0ZShwYXJlbnQsCi0JCQkJU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLnNldEV4cGFuZEhvcml6b250YWwodHJ1ZSk7Ci0JCW9wZXJhdGlvbnNTY3JvbGxlZENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKLQkJR3JpZERhdGEgb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlR0QgPSBuZXcgR3JpZERhdGEoCi0JCQkJR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlR0QuaGVpZ2h0SGludCA9NjA7Ci0JCW9wZXJhdGlvbnNTY3JvbGxlZENvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG9wZXJhdGlvbnNTY3JvbGxlZENvbXBvc2l0ZUdEKTsKLQkJb3BlcmF0aW9uc0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUob3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLAotCQkJCVNXVC5OT05FKTsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLnNldENvbnRlbnQob3BlcmF0aW9uc0NvbXBvc2l0ZSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlvcGVyYXRpb25zQ29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOwotLy8JCUdyaWREYXRhIG9wZXJhdGlvbnNDb21wb3NpdGVHRCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotLy8JCW9wZXJhdGlvbnNDb21wb3NpdGVHRC5oZWlnaHRIaW50ID0gMTAwMDsKLS8vCQlvcGVyYXRpb25zQ29tcG9zaXRlR0Qud2lkdGhIaW50ID0gMTAwMDsKLS8vCQlvcGVyYXRpb25zQ29tcG9zaXRlLnNldExheW91dERhdGEob3BlcmF0aW9uc0NvbXBvc2l0ZUdEKTsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLnNldE1pblNpemUob3BlcmF0aW9uc0NvbXBvc2l0ZS5jb21wdXRlU2l6ZSgKLQkJCQk0MDAsIDEwMCkpOwotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKG9wZXJhdGlvbnNTY3JvbGxlZENvbXBvc2l0ZSk7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUob3BlcmF0aW9uc0NvbXBvc2l0ZSk7Ci0JfQotCi0JcHVibGljIFNlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZShDb21wb3NpdGUgcGFyZW50LCBJUHJvamVjdCBwcm9qZWN0LAotCQkJU2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQotCQlzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsKLQkJdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKLQkJdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwotCQlhbGxFcnJvcnMgPSBuZXcgSGFzaHRhYmxlPFN0cmluZywgSVN0YXR1cz4oKTsKLQkJaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotCQlHcmlkTGF5b3V0IHBhcmVudExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCXBhcmVudExheW91dC5udW1Db2x1bW5zID0gMjsKLQkJcGFyZW50TGF5b3V0Lmhvcml6b250YWxTcGFjaW5nID0gMDsKLQkJdGhpcy5zZXRMYXlvdXQocGFyZW50TGF5b3V0KTsKLQkJdGhpcy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJbWFzdGVyQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuTk9ORSk7Ci0KLQkJR3JpZExheW91dCBtYXN0ZXJMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQltYXN0ZXJMYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0JCW1hc3RlckxheW91dC5ob3Jpem9udGFsU3BhY2luZyA9IDA7Ci0JCW1hc3RlckNvbXBvc2l0ZS5zZXRMYXlvdXQobWFzdGVyTGF5b3V0KTsKLQkJbWFzdGVyQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfVkVSVElDQUwpKTsKLQotCQlkZXRhaWxzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgZGV0YWlsc0xheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWRldGFpbHNMYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0JCWRldGFpbHNMYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSAwOwotCQlkZXRhaWxzQ29tcG9zaXRlLnNldExheW91dChkZXRhaWxzTGF5b3V0KTsKLQkJZGV0YWlsc0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJbWFzdGVyUG9saWN5VHJlZSA9IG5ldyBUcmVlKG1hc3RlckNvbXBvc2l0ZSwgU1dULkJPUkRFUiB8IFNXVC5NVUxUSSk7Ci0JCW1hc3RlclBvbGljeVRyZWUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9WRVJUSUNBTCkpOwotCQltYXN0ZXJQb2xpY3lUcmVlLnNldFRvb2xUaXBUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BTUF9UUkVFKTsKLQotCQlDb21wb3NpdGUgb3RoZXJzQ29tcG9zaXRlID0gY3JlYXRlRGV0YWlsc1Njcm9sbFBhZ2VDb250ZW50KGRldGFpbHNDb21wb3NpdGUpOwotCQlHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5GSUxMLCB0cnVlLAotCQkJCXRydWUpOwotCQlvdGhlcnNDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7Ci0KLQkJbWFzdGVyUG9saWN5VHJlZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQotCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBwb2xpY3lMaXN0ID0gcGxhdGZvcm0uZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyhudWxsKTsKLQkJCi0JCXBvbGljeUxpc3QgPSBTZXJ2aWNlVXRpbHMuc29ydExpc3QoIHBvbGljeUxpc3QgKTsKLQkJCi0JCWZvciAoSVNlcnZpY2VQb2xpY3kgcG9saWN5IDogcG9saWN5TGlzdCkgewotCQkJYWRkUG9saWN5KHBvbGljeSwgbWFzdGVyUG9saWN5VHJlZSwgdHJ1ZSk7Ci0JCX0KLQkJVHJlZUl0ZW1bXSB0cmVlSXRlbXMgPSBtYXN0ZXJQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCWlmICh0cmVlSXRlbXMubGVuZ3RoID4gMCkgewotCQkJLy9zZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHRyZWUgJiBmaXJlIGV2ZW50IHNvIFVJIGlzIHVwZGF0ZWQKLQkJCW1hc3RlclBvbGljeVRyZWUuc2V0U2VsZWN0aW9uKHRyZWVJdGVtc1swXSk7Ci0JCQltYXN0ZXJQb2xpY3lUcmVlLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBpbWFnZSBvbiB0aSwgaWYgYXNzb2NpYXRlZCBzZXJ2aWNlIHBvbGljeSBkZWZpbmVzIGFuIGljb24KLQkgKiBpdCB3aWxsIHdpbGwgYmUgdXNlZCwgb3RoZXJ3aXNlIGRlZmF1bHQgRm9sZGVyL0xlYWYgaWNvbnMgd2lsbCBiZSB1c2VkCi0JICogQHBhcmFtIHRpIHRoZSBUcmVlSXRlbSB0byBzZXQgdGhlIGltYWdlIGZvcgotCSAqIEBwYXJhbSBzcCB0aGUgc2VydmljZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHRpCi0JICogQHBhcmFtIGljb25PdmVybGF5cyBkZXNjcmlwdGlvbiBvZiB3aGljaCBvdmVybGF5cyBzaG91bGQgYmUgYXBwbGllZCAKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0SW1hZ2UoVHJlZUl0ZW0gdGksIElTZXJ2aWNlUG9saWN5IHNwLCBTdHJpbmdbXSBpY29uT3ZlcmxheXMpIHsKLQkJSW1hZ2UgaSA9IChzcC5nZXRDaGlsZHJlbigpLnNpemUoKSA9PSAwKSA/IGljb25NYW5hZ2VyLmdldEljb25PdmVybGF5KAotCQkJCWljb25NYW5hZ2VyLmdldExlYWZCYXNlVXJsKCksIGljb25PdmVybGF5cykgOiBpY29uTWFuYWdlcgotCQkJCS5nZXRJY29uT3ZlcmxheShpY29uTWFuYWdlci5nZXRGb2xkZXJCYXNlVXJsKCksIGljb25PdmVybGF5cyk7Ci0JCWlmIChzcC5nZXREZXNjcmlwdG9yKCkgIT0gbnVsbCkgewotCQkJU3RyaW5nIGljb25QYXRoQnVuZGxlSUQgPSBudWxsOwotCQkJU3RyaW5nIGljb25QYXRoID0gbnVsbDsKLQkJCWljb25QYXRoQnVuZGxlSUQgPSBzcC5nZXREZXNjcmlwdG9yKCkuZ2V0SWNvbkJ1bmRsZUlkKCk7Ci0JCQlpY29uUGF0aCA9IHNwLmdldERlc2NyaXB0b3IoKS5nZXRJY29uUGF0aCgpOwotCQkJaWYgKGljb25QYXRoQnVuZGxlSUQgIT0gbnVsbCAmJiBpY29uUGF0aCAhPSBudWxsCi0JCQkJCSYmIGljb25QYXRoQnVuZGxlSUQubGVuZ3RoKCkgPiAwICYmIGljb25QYXRoLmxlbmd0aCgpID4gMCkgewotCQkJCUJ1bmRsZSBiID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGljb25QYXRoQnVuZGxlSUQpOwotCQkJCWkgPSBpY29uTWFuYWdlci5nZXRJY29uT3ZlcmxheShGaWxlTG9jYXRvci5maW5kKGIsCi0JCQkJCQluZXcgUGF0aChpY29uUGF0aCksIG51bGwpLnRvU3RyaW5nKCksIGljb25PdmVybGF5cyk7Ci0JCQl9Ci0JCX0KLQkJdGkuc2V0SW1hZ2UoaSk7Ci0JCS8vIGltYWdlIGhhcyBjaGFuZ2VkLCBub3RpZnkgY2hhbmdlIGxpc3RlbmVycyBzbyB0cmVlIGdldHMgdXBkYXRlZAotCQl0aS5ub3RpZnlMaXN0ZW5lcnMoU1dULk1vZGlmeSwgbmV3IEV2ZW50KCkpOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXM0dGhMZXZlbE9ySGlnaGVyUG9saWN5IChJU2VydmljZVBvbGljeSBzcCkgewotCQlyZXR1cm4gc3AuZ2V0UGFyZW50UG9saWN5KCkgIT0gbnVsbAotCQkmJiBzcC5nZXRQYXJlbnRQb2xpY3koKS5nZXRQYXJlbnRQb2xpY3koKSAhPSBudWxsICYmIHNwLmdldFBhcmVudFBvbGljeSgpLmdldFBhcmVudFBvbGljeSgpLmdldFBhcmVudFBvbGljeSgpICE9IG51bGw7Ci0JCQotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXMzcmRMZXZlbFBvbEluTWFzdGVyVHJlZVdpdGhDaGlsZHJlbiAoTGlzdDxJU2VydmljZVBvbGljeT4gc3BMaXN0SW5NYXN0ZXJUcmVlKSB7Ci0JCXJldHVybiBzcExpc3RJbk1hc3RlclRyZWUuZ2V0KDApLmdldFBhcmVudFBvbGljeSgpICE9IG51bGwgJiYgc3BMaXN0SW5NYXN0ZXJUcmVlLmdldCgwKS5nZXRQYXJlbnRQb2xpY3koKS5nZXRQYXJlbnRQb2xpY3koKSAhPSBudWxsCi0JCSYmIHNwTGlzdEluTWFzdGVyVHJlZS5nZXQoMCkuZ2V0Q2hpbGRyZW4oKS5zaXplKCkgPiAwIDsKLQl9Ci0JLyoqCi0JICogQWRkIHNlcnZpY2UgcG9saWN5IHNwIGFuZCBjaGlsZHJlbiBvZiBzcCB0byB0aGUgcGFyZW50Ci0JICogQHBhcmFtIHNwIHRoZSBzZXJ2aWNlIHBvbGljeSB0byBhZGQKLQkgKiBAcGFyYW0gcGFyZW50IGVpdGhlciBhIFRyZWUgKG1hc3RlclBvbGljeVRyZWUgb3IgRGV0YWlsc1BvbGljeVRyZWUpLCBvciBhIFRyZWVJdGVtCi0JICogdG8gYWRkIHNlcnZpY2UgcG9saWN5IGNoaWxkcmVuIHRvCi0JICogQHBhcmFtIGFkZFVwVG9MZXZlbDNPbmx5IGZhbHNlIGlmIHNob3VsZCBhZGQgNHRoIGFuZCBoaWdoZXIgbGV2ZWwKLQkgKiBjaGlsZCBwb2xpY2llcwotCSAqLwotCXByaXZhdGUgdm9pZCBhZGRQb2xpY3koSVNlcnZpY2VQb2xpY3kgc3AsIFdpZGdldCBwYXJlbnQsCi0JCQlib29sZWFuIGFkZFVwVG9MZXZlbDNPbmx5KSB7Ci0JCXNwLmFkZFBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0JCWFkZFN0YXRlTGlzdGVuZXIoIHNwICk7Ci0JCWlmIChhZGRVcFRvTGV2ZWwzT25seSAmJiBpczR0aExldmVsT3JIaWdoZXJQb2xpY3koc3ApICkKLQkJCS8vIGRvbid0IGFkZCA0dGggbGV2ZWwgYW5kIGhpZ2hlciBicmFuY2hlcywgdGhlc2UgYXJlIGFkZGVkIG9uIGRlbWFuZAotCQkJLy8gdG8gYSBkaWZmZXJlbnQgdHJlZQotCQkJcmV0dXJuOwotCQlUcmVlSXRlbSB0aTsKLQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFRyZWVJdGVtKQotCQkJdGkgPSBuZXcgVHJlZUl0ZW0oKFRyZWVJdGVtKSBwYXJlbnQsIFNXVC5OT05FKTsKLQkJZWxzZQotCQkJdGkgPSBuZXcgVHJlZUl0ZW0oKFRyZWUpIHBhcmVudCwgU1dULk5PTkUpOwotCQl0aS5zZXRUZXh0KHNwLmdldERlc2NyaXB0b3IoKS5nZXRMb25nTmFtZSgpKTsKLQkJdGkuc2V0RGF0YShzcCk7Ci0KLQkJc2V0SW1hZ2UodGksIHNwLCBnZXRJY29uT3ZlcmxheUluZm8oc3AsIGZhbHNlKSk7Ci0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoaWxkcmVuUG9saWN5TGlzdCA9IHNwLmdldENoaWxkcmVuKCk7Ci0JCQotCQljaGlsZHJlblBvbGljeUxpc3QgPSBTZXJ2aWNlVXRpbHMuc29ydExpc3QoIGNoaWxkcmVuUG9saWN5TGlzdCApOwotCQkKLQkJZm9yIChJU2VydmljZVBvbGljeSBwb2xpY3kgOiBjaGlsZHJlblBvbGljeUxpc3QpIHsKLQkJCWFkZFBvbGljeShwb2xpY3ksIHRpLCBhZGRVcFRvTGV2ZWwzT25seSk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgaWNvbiBvdmVybGF5IGluZm9ybWF0aW9uCi0JICogQHBhcmFtIHNwIHRoZSBzZXJ2aWNlIHBvbGljeSB0aGF0IHNob3VsZCBoYXZlIHNvbWUgb3ZlcmxheSBpbWFnZXMgYXNzb2NpYXRlZCB3aXRoIGl0Ci0JICogQHBhcmFtIGludmFsaWQgdHJ1ZSBpZiB0aGUgc2VydmljZSBwb2xpY3kgaXMgdmFsaWQKLQkgKiBAcmV0dXJuIFN0cmluZ1tdIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBvdmVybGF5cyB0byBhcHBseSB0byB0aGUgaWNvbiB0aGF0Ci0JICogaXMgYXNzb2NpYXRlZCB3aXRoIHNwCi0JICovCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRJY29uT3ZlcmxheUluZm8oSVNlcnZpY2VQb2xpY3kgc3AsIGJvb2xlYW4gaW52YWxpZCkgewotCQlTdHJpbmdbXSBvdmVyTGF5cyA9IG5ldyBTdHJpbmdbNF07Ci0JCQkJCi0JCUlQb2xpY3lTdGF0ZSBwb2xTdGF0ZSA9IChwcm9qZWN0ID09IG51bGwpID8gc3AuZ2V0UG9saWN5U3RhdGUoKSA6IHNwCi0JCQkJLmdldFBvbGljeVN0YXRlKHByb2plY3QpOwotCQlJUG9saWN5U3RhdGVFbnVtIHBvbEVudW0gPSAocHJvamVjdCA9PSBudWxsKSA/IHNwLmdldFBvbGljeVN0YXRlRW51bSgpCi0JCQkJOiBzcC5nZXRQb2xpY3lTdGF0ZUVudW0ocHJvamVjdCk7Ci0JCWlmICghcG9sU3RhdGUuaXNNdXRhYmxlKCkpCi0JCQlvdmVyTGF5c1swXSA9IGljb25NYW5hZ2VyLmxvY2s7Ci0JCWlmICgoc3AuZ2V0U3RhdHVzKCkgIT0gbnVsbCAmJiBzcC5nZXRTdGF0dXMoKS5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHx8IGludmFsaWQpCi0JCQlvdmVyTGF5c1sxXSA9IGljb25NYW5hZ2VyLmludmFsaWQ7Ci0JCWlmICgoc3AuZ2V0U3RhdHVzKCkgIT0gbnVsbCAmJiBzcC5nZXRTdGF0dXMoKS5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykpCi0JCQlvdmVyTGF5c1syXSA9IGljb25NYW5hZ2VyLndhcm5pbmc7Ci0JCWlmIChwb2xFbnVtICE9IG51bGwpIHsKLQkJCWlmIChwb2xFbnVtLmdldEVudW1JZCgpLmVxdWFscygKLQkJCQkJIm9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5ib29sZWFuRW51bSIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAocG9saWN5SGFzSWNvblNlbGVjdGlvbk9wZXJhdGlvblNlbGVjdGVkKHNwKSkKLQkJCQkJb3ZlckxheXNbM10gPSBpY29uTWFuYWdlci5mYXZvcml0ZTsKLQkJCX0KLQkJCQkKLQkJfQotCQlyZXR1cm4gb3ZlckxheXM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHNwCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIHBvbGljeUhhc0ljb25TZWxlY3Rpb25PcGVyYXRpb25TZWxlY3RlZChJU2VydmljZVBvbGljeSBzcCkgewotCQlib29sZWFuIGljb25TZWxlY3Rpb25PcGVyYXRpb25TZWxlY3RlZCA9IGZhbHNlOwotCQlMaXN0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvbkxpc3QgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnMoc3AsIHByb2plY3QgPT0gbnVsbCk7Ci0JCWZvciAoSVBvbGljeU9wZXJhdGlvbiBvcGVyYXRpb25JdGVtIDogb3BlcmF0aW9uTGlzdCkgewotCQkJaWYgKG9wZXJhdGlvbkl0ZW0uZ2V0T3BlcmF0aW9uS2luZCgpLmVxdWFscyhPcGVyYXRpb25LaW5kLmljb25TZWxlY3Rpb24pKSB7Ci0JCQkJU3RyaW5nIHN0YXRlSUQgPSBvcGVyYXRpb25JdGVtLmdldFN0YXRlSXRlbShwcm9qZWN0KTsKLQkJCQlpZiAoc3RhdGVJRC5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC50cnVlIikpICAvLyROT04tTkxTLTEkCi0JCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJCi0JCX0KLQkJcmV0dXJuIGljb25TZWxlY3Rpb25PcGVyYXRpb25TZWxlY3RlZDsKLQl9Ci0KLQkvKioKLQkgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqLwotCXB1YmxpYyB2b2lkIHBlcmZvcm1EZWZhdWx0cygpIHsKLQkJaW5pdGlhbGl6ZURlZmF1bHRzKCk7Ci0JCVRyZWVJdGVtIHNlbGVjdGVkID0gbnVsbDsKLQkJSVNlcnZpY2VQb2xpY3kgZm9jdXNTUCA9IG51bGw7Ci0JCS8vIGZpcmUgc2VsZWN0aW9uIGV2ZW50IHRvIHRyZWUgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggb3BlcmF0aW9uIFVJIHNvCi0JCS8vIG9wZXJhdGlvbiBVSSBnZXRzIHVwZGF0ZWQKLQkJaWYgKGRldGFpbHNQb2xpY3lUcmVlLmlzVmlzaWJsZSgpCi0JCQkJJiYgZGV0YWlsc1BvbGljeVRyZWUuZ2V0U2VsZWN0aW9uKCkubGVuZ3RoID4gMCkgewotCQkJZGV0YWlsc1BvbGljeVRyZWUubm90aWZ5TGlzdGVuZXJzKFNXVC5TZWxlY3Rpb24sIG5ldyBFdmVudCgpKTsKLQkJCXNlbGVjdGVkID0gZGV0YWlsc1BvbGljeVRyZWUuZ2V0U2VsZWN0aW9uKClbMF07Ci0JCQlmb2N1c1NQID0gKElTZXJ2aWNlUG9saWN5KSBzZWxlY3RlZC5nZXREYXRhKCk7Ci0JCX0gZWxzZSBpZiAobWFzdGVyUG9saWN5VHJlZS5nZXRTZWxlY3Rpb24oKS5sZW5ndGggPiAwKSB7Ci0JCQltYXN0ZXJQb2xpY3lUcmVlLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0JCQlzZWxlY3RlZCA9IG1hc3RlclBvbGljeVRyZWUuZ2V0U2VsZWN0aW9uKClbMF07Ci0JCQlmb2N1c1NQID0gKElTZXJ2aWNlUG9saWN5KSBzZWxlY3RlZC5nZXREYXRhKCk7Ci0JCX0KLQotCQllcnJvciA9IHZhbGlkYXRlQWxsUG9saWNpZXMoZm9jdXNTUCk7Ci0KLQl9Ci0JcHJpdmF0ZSBjbGFzcyBDaGlsZENoYW5nZUV2ZW50IHsKLQkJcHVibGljIENoaWxkQ2hhbmdlRXZlbnQoTGlzdDxJU2VydmljZVBvbGljeT4gY2hhbmdlZENoaWxkcmVuLCBMaXN0PEJvb2xlYW4+IGFkZGVkICkgewotCQkJdGhpcy5jaGFuZ2VkQ2hpbGRyZW4gPSBjaGFuZ2VkQ2hpbGRyZW47Ci0JCQl0aGlzLmFkZGVkID0gYWRkZWQ7Ci0JCQkKLQkJfQotCQlwcml2YXRlIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoYW5nZWRDaGlsZHJlbjsKLQkJcHJpdmF0ZSBMaXN0PEJvb2xlYW4+IGFkZGVkOwotCQlwdWJsaWMgTGlzdDxJU2VydmljZVBvbGljeT4gZ2V0Q2hhbmdlZENoaWxkcmVuKCkgewotCQkJcmV0dXJuIGNoYW5nZWRDaGlsZHJlbjsKLQkJfQotCQlwdWJsaWMgdm9pZCBzZXRDaGFuZ2VkQ2hpbGRyZW4oTGlzdDxJU2VydmljZVBvbGljeT4gY2hhbmdlZENoaWxkcmVuKSB7Ci0JCQl0aGlzLmNoYW5nZWRDaGlsZHJlbiA9IGNoYW5nZWRDaGlsZHJlbjsKLQkJfQotCQlwdWJsaWMgTGlzdDxCb29sZWFuPiBnZXRBZGRlZCgpIHsKLQkJCXJldHVybiBhZGRlZDsKLQkJfQotCQlwdWJsaWMgdm9pZCBzZXRBZGRlZChMaXN0PEJvb2xlYW4+IGFkZGVkKSB7Ci0JCQl0aGlzLmFkZGVkID0gYWRkZWQ7Ci0JCX0KLQl9Ci0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciNjaGlsZENoYW5nZShMaXN0PG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeT4sIExpc3Q8amF2YS5sYW5nLkJvb2xlYW4+KQotCSAqLwotCXB1YmxpYyB2b2lkIGNoaWxkQ2hhbmdlKCBMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGlsZCwgTGlzdDxCb29sZWFuPiBhZGRlZCApIHsKLQkJLy9pZ25vcmUgZXZlbnRzIHVubGVzcyB3ZSBhcmUgaW4gYSBjb21wbGV4IG9wZXJhdGlvbgotCQlpZiAoIWJDb21wbGV4T3BDb21wbGV0ZWQpCi0JCQkvL2NhY2hlIHRoZSBldmVudCB1bnRpbCBjb21wbGV4IG9wZXJhdGlvbiBjb21wbGV0ZWQKLQkJCWxpc3RDaGlsZENoYW5nZUV2ZW50cy5hZGQobmV3IENoaWxkQ2hhbmdlRXZlbnQoY2hpbGQsIGFkZGVkKSk7Ci0JCQkKLQl9Ci0JCi0JCi0JLyoqCi0JICogQHBhcmFtIGNoaWxkCi0JICogQHBhcmFtIGFkZGVkCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NDaGlsZENoYW5nZUV2ZW50KENoaWxkQ2hhbmdlRXZlbnQgY2NlLAotCQkJSGFzaHRhYmxlPFN0cmluZywgSVNlcnZpY2VQb2xpY3k+IGh0VG9wTGV2ZWxBZGR0aW9ucykgewotCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGFuZ2VkU2VydmljZVBvbGljeUxpc3QgPSBjY2UuZ2V0Q2hhbmdlZENoaWxkcmVuKCk7Ci0JCUxpc3Q8Qm9vbGVhbj4gY2hhbmdlZFNlcnZpY2VQb2xpY3lBZGRlZExpc3QgPSBjY2UuZ2V0QWRkZWQoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFuZ2VkU2VydmljZVBvbGljeUxpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCUlTZXJ2aWNlUG9saWN5IG5leHRDaGFuZ2VkU2VydmljZVBvbGljeSA9IGNoYW5nZWRTZXJ2aWNlUG9saWN5TGlzdC5nZXQoaSk7Ci0JCQlib29sZWFuIGFkZGVkID0gY2hhbmdlZFNlcnZpY2VQb2xpY3lBZGRlZExpc3QuZ2V0KGkpOwotCQkJaWYgKCFhZGRlZCkgewotCQkJCS8vZGVsZXRlIG5vZGUKLQkJCQlwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudFJlbW92ZVNlcnZpY2VQb2xpY3kobmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5KTsKLQkJCX0gZWxzZSB7Ci0JCQkJLy9hbiBhZGRpdGlvbiwgb25seSBwcm9jZXNzIHRvcCBsZXZlbCBhZGRpdGlvbnMgYXMgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBvcGVyYXRpb24gKGFkZHMgY2hpbGRyZW4gdG9vKQotCQkJCWlmIChodFRvcExldmVsQWRkdGlvbnMuY29udGFpbnNLZXkobmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5LmdldElkKCkpKSB7Ci0JCQkJCXByb2Nlc3NDaGlsZENoYW5nZUV2ZW50QWRkU2VydmljZVBvbGljeShuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3kpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCQotCS8qKgotCSAqIEBwYXJhbSBuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3kKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnRSZW1vdmVTZXJ2aWNlUG9saWN5KElTZXJ2aWNlUG9saWN5IG5leHRDaGFuZ2VkU2VydmljZVBvbGljeSkgewotCQlib29sZWFuIGlzNHRoTGV2ZWxPckhpZ2hlciA9IGlzNHRoTGV2ZWxPckhpZ2hlclBvbGljeShuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3kpOwotCQkKLQkJcmVtb3ZlU3RhdGVMaXN0ZW5lciggbmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5ICk7Ci0JCQotCQlpZiAoaXM0dGhMZXZlbE9ySGlnaGVyKSB7Ci0JCQlpZiAoZGV0YWlsc1BvbGljeVRyZWUuaXNWaXNpYmxlKCkpIHsKLQkJCQlUcmVlSXRlbVtdIGNoaWxkcmVuID0gZGV0YWlsc1BvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJCQlUcmVlSXRlbSBmb3VuZCA9IG51bGw7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCQkJIGZvdW5kID0gZmluZFBvbGljeShuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3ksIGNoaWxkcmVuW2ldKTsJCi0JCQkJCSBpZiAoZm91bmQgIT0gbnVsbCkKLQkJCQkJCSBicmVhazsKLQkJCQl9Ci0JCQkJaWYgKGZvdW5kICE9IG51bGwgJiYgIWZvdW5kLmlzRGlzcG9zZWQoKSkgewotCQkJCQlwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudERlbGV0ZVRyZWVJdGVtKGZvdW5kKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlUcmVlSXRlbVtdIGNoaWxkcmVuID0gbWFzdGVyUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQkJVHJlZUl0ZW0gZm91bmQgPSBudWxsOwotCQkJZm9yIChpbnQgaT0wOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCQkgZm91bmQgPSBmaW5kUG9saWN5KG5leHRDaGFuZ2VkU2VydmljZVBvbGljeSwgY2hpbGRyZW5baV0pOwkKLQkJCQkgaWYgKGZvdW5kICE9IG51bGwpCi0JCQkJCSBicmVhazsKLQkJCX0KLQkJCWlmIChmb3VuZCAhPSBudWxsICYmICFmb3VuZC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCQlwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudERlbGV0ZVRyZWVJdGVtKGZvdW5kKTsKLQkJCQkKLQkJCX0KLQotCQkJCi0JCQkKLQkJfQotCQkKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGUgdGhlIGl0ZW0sIGFuZCBjaG9vc2Ugc2V0IGEgbmV3IHNlbGVjdGlvbiBhcyBhcHByb3ByaWF0ZSBmcm9tIG9uZSBvZiB0aGUgcG9saWN5IHRyZWVzIAotCSAqIEBwYXJhbSBkZWxldGVJdGVtCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NDaGlsZENoYW5nZUV2ZW50RGVsZXRlVHJlZUl0ZW0oVHJlZUl0ZW0gZGVsZXRlSXRlbSkgewotCQlUcmVlIHBhcmVudFRyZWUgPSBkZWxldGVJdGVtLmdldFBhcmVudCgpOwotCQlUcmVlIHNlbGVjdGlvblRyZWUgPSBwYXJlbnRUcmVlOwotCQlUcmVlSXRlbSBwYXJlbnRUcmVlSXRlbSA9IGRlbGV0ZUl0ZW0uZ2V0UGFyZW50SXRlbSgpOwotCQkvL2luZGV4IG9mIGZvdW5kIGluIHRoZSB0cmVlCi0JCWludCBpZHggPSAocGFyZW50VHJlZUl0ZW0gPT0gbnVsbCkgPyBwYXJlbnRUcmVlLmluZGV4T2YoZGVsZXRlSXRlbSkgOiBwYXJlbnRUcmVlSXRlbS5pbmRleE9mKGRlbGV0ZUl0ZW0pOwotCQkvL2lzIGluZGV4IHRoZSBsYXN0IGluZGV4IGluIHRoZSB0cmVlCi0JCWJvb2xlYW4gaXNMYXN0SW5kZXggPSAocGFyZW50VHJlZUl0ZW0gPT0gbnVsbCkgPyBwYXJlbnRUcmVlLmluZGV4T2YoZGVsZXRlSXRlbSkgPT0gcGFyZW50VHJlZS5nZXRJdGVtQ291bnQoKSAtMSA6IHBhcmVudFRyZWVJdGVtLmluZGV4T2YoZGVsZXRlSXRlbSkgPT0gcGFyZW50VHJlZUl0ZW0uZ2V0SXRlbUNvdW50KCkgLTE7Ci0JCS8vbnVtYmVyIG9mIHNpYmxpbmdzCi0JCWludCBzaWJsaW5nc0NvdW50ID0gKHBhcmVudFRyZWVJdGVtID09IG51bGwpID8gcGFyZW50VHJlZS5nZXRJdGVtQ291bnQoKSAtMSA6IHBhcmVudFRyZWVJdGVtLmdldEl0ZW1Db3VudCgpIC0xOwotCQlib29sZWFuIGhhc1BhcmVudCA9IChwYXJlbnRUcmVlSXRlbSA9PSBudWxsKSA/IHBhcmVudFRyZWUuZ2V0SXRlbUNvdW50KCkgPT0gMCA6IHBhcmVudFRyZWVJdGVtLmdldEl0ZW1Db3VudCgpID09IDA7Ci0JCWRlbGV0ZUl0ZW0uZGlzcG9zZSgpOwotCQlpZiAocGFyZW50VHJlZUl0ZW0gPT0gbnVsbCkgCi0JCQlwYXJlbnRUcmVlLnJlZHJhdygpOwotCQllbHNlCi0JCQlwYXJlbnRUcmVlLnJlZHJhdygpOwotCQlUcmVlSXRlbSBzZWxlY3RJdGVtID0gbnVsbDsKLQkJaWYgKHNpYmxpbmdzQ291bnQgPT0gMCkgewotCQkJaWYgKGhhc1BhcmVudCkgewotCQkJLy9ubyBzaWJsaW5ncywgc2VsZWN0IHBhcmVudAotCQkJaWYgIChwYXJlbnRUcmVlSXRlbSA9PSBudWxsKSAKLQkJCQlzZWxlY3RJdGVtID0gcGFyZW50VHJlZS5nZXRJdGVtKDApOwotCQkJZWxzZSAKLQkJCQlzZWxlY3RJdGVtID0gcGFyZW50VHJlZUl0ZW07Ci0JCQl9IGVsc2UgewotCQkJCWlmIChwYXJlbnRUcmVlID09IGRldGFpbHNQb2xpY3lUcmVlKQotCQkJCQkvL3NlbGVjdCBzb21ldGhpbmcgZnJvbSBtYXN0ZXIgdHJlZQotCQkJCQlpZiAobWFzdGVyUG9saWN5VHJlZS5nZXRJdGVtcygpLmxlbmd0aCA+IDApIHsKLQkJCQkJCXNlbGVjdEl0ZW0gPSBtYXN0ZXJQb2xpY3lUcmVlLmdldEl0ZW0oMCk7Ci0JCQkJCQlzZWxlY3Rpb25UcmVlID0gbWFzdGVyUG9saWN5VHJlZTsKLQkJCQkJfQotCQkJCQotCQkJfQotCQkJCi0JCX0gZWxzZSB7Ci0JCQlpZiAgKHBhcmVudFRyZWVJdGVtID09IG51bGwpIHsKLQkJCQlpZiAoaXNMYXN0SW5kZXgpCi0JCQkJCXNlbGVjdEl0ZW0gPSBwYXJlbnRUcmVlLmdldEl0ZW0oaWR4IC0xKTsKLQkJCQllbHNlIAotCQkJCQlzZWxlY3RJdGVtID0gcGFyZW50VHJlZS5nZXRJdGVtKGlkeCk7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChpc0xhc3RJbmRleCkKLQkJCQkJc2VsZWN0SXRlbSA9IHBhcmVudFRyZWVJdGVtLmdldEl0ZW0oaWR4IC0xKTsKLQkJCQllbHNlIAotCQkJCQlzZWxlY3RJdGVtID0gcGFyZW50VHJlZUl0ZW0uZ2V0SXRlbShpZHgpOwotCi0JCQl9Ci0JCX0KLQkJaWYgKHNlbGVjdEl0ZW0gIT0gbnVsbCkgewotCQkJc2VsZWN0aW9uVHJlZS5zZXRTZWxlY3Rpb24oc2VsZWN0SXRlbSk7Ci0JCQlzZWxlY3Rpb25UcmVlLm5vdGlmeUxpc3RlbmVycyhTV1QuU2VsZWN0aW9uLCBuZXcgRXZlbnQoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcG9saWN5VG9BZGQKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnRBZGRTZXJ2aWNlUG9saWN5KElTZXJ2aWNlUG9saWN5IHBvbGljeVRvQWRkKSB7Ci0JCWJvb2xlYW4gaXM0dGhMZXZlbE9ySGlnaGVyID0gaXM0dGhMZXZlbE9ySGlnaGVyUG9saWN5KHBvbGljeVRvQWRkKTsKLQkJSVNlcnZpY2VQb2xpY3kgcGFyZW50ID0gcG9saWN5VG9BZGQuZ2V0UGFyZW50UG9saWN5KCk7Ci0JCWlmIChpczR0aExldmVsT3JIaWdoZXIpIHsKLQkJCWlmIChkZXRhaWxzUG9saWN5VHJlZS5pc1Zpc2libGUoKSkgewotCQkJCVRyZWVJdGVtW10gY2hpbGRyZW4gPSBkZXRhaWxzUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQkJCVRyZWVJdGVtIGZvdW5kID0gbnVsbDsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCQkgZm91bmQgPSBmaW5kUG9saWN5KHBhcmVudCwgY2hpbGRyZW5baV0pOwkKLQkJCQkJIGlmIChmb3VuZCAhPSBudWxsKQotCQkJCQkJIGJyZWFrOwotCQkJCX0KLQkJCQlpZiAoZm91bmQgIT0gbnVsbCAmJiAhZm91bmQuaXNEaXNwb3NlZCgpKSB7Ci0JCQkJCWFkZFBvbGljeShwb2xpY3lUb0FkZCwgZm91bmQsIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkJLy9sZXNzIHRoYW4gNHRoIGxldmVsIHBvbGljeQotCQkJCVRyZWVJdGVtW10gY2hpbGRyZW4gPSBtYXN0ZXJQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCQkJVHJlZUl0ZW0gZm91bmQgPSBudWxsOwotCQkJCWZvciAoaW50IGk9MDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCSBmb3VuZCA9IGZpbmRQb2xpY3kocGFyZW50LCBjaGlsZHJlbltpXSk7CQotCQkJCQkgaWYgKGZvdW5kICE9IG51bGwpCi0JCQkJCQkgYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChmb3VuZCAhPSBudWxsICYmICFmb3VuZC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCQkJYWRkUG9saWN5KHBvbGljeVRvQWRkLCBmb3VuZCwgZmFsc2UpOwotCQkJCQkKLQkJCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBGaW5kIHRoZSBwb2xpY3kgd2l0aGluIHRoZSB0cmVlIHRpCi0JICogQHBhcmFtIHBvbGljeVRvRmluZAotCSAqLwotCXByaXZhdGUgVHJlZUl0ZW0gZmluZFBvbGljeShJU2VydmljZVBvbGljeSBwb2xpY3lUb0ZpbmQsIFRyZWVJdGVtIHRpKSB7Ci0JCVRyZWVJdGVtIHRvUmV0dXJuID0gbnVsbDsKLQkJaWYgKHRpID09IG51bGwgfHwgISh0aS5nZXREYXRhKCkgaW5zdGFuY2VvZiBJU2VydmljZVBvbGljeSkpCi0JCQlyZXR1cm4gdG9SZXR1cm47Ci0JCUlTZXJ2aWNlUG9saWN5IHNwID0gKElTZXJ2aWNlUG9saWN5KXRpLmdldERhdGEoKTsKLQkJaWYgKHNwLmdldElkKCkuZXF1YWxzKHBvbGljeVRvRmluZC5nZXRJZCgpKSkKLQkJCXJldHVybiB0aTsKLQkJZWxzZSB7Ci0JCQlUcmVlSXRlbVtdIHRpQ2hpbGRyZW4gPSB0aS5nZXRJdGVtcygpOwotCQkJZm9yIChpbnQgaSA9MDsgaSA8IHRpQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCQl0b1JldHVybiA9IGZpbmRQb2xpY3kocG9saWN5VG9GaW5kLCB0aUNoaWxkcmVuW2ldKTsKLQkJCQlpZiAodG9SZXR1cm4gIT0gbnVsbCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHRvUmV0dXJuOwotCX0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHVzaW5nIGRlZmF1bHQgdmFsdWVzIGluIHRoZSBwcmVmZXJlbmNlCi0JICogc3RvcmUuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVEZWZhdWx0cygpIHsKLQkJaWYgKHByb2plY3QgPT0gbnVsbCkKLQkJCXBsYXRmb3JtLnJlc3RvcmVEZWZhdWx0cygpOwotCQllbHNlCi0JCQlwbGF0Zm9ybS5yZXN0b3JlRGVmYXVsdHMocHJvamVjdCk7Ci0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQlpZiAoZS5nZXRTb3VyY2UoKSA9PSBtYXN0ZXJQb2xpY3lUcmVlIHx8IGUuZ2V0U291cmNlKCkgPT0gZGV0YWlsc1BvbGljeVRyZWUpIHsKLQkJCVRyZWVJdGVtW10gc2VsZWN0ZWRJdGVtczsKLQkJCWlmIChlLmdldFNvdXJjZSgpID09IG1hc3RlclBvbGljeVRyZWUpCi0JCQkJc2VsZWN0ZWRJdGVtcyA9IG1hc3RlclBvbGljeVRyZWUuZ2V0U2VsZWN0aW9uKCk7Ci0JCQllbHNlCi0JCQkJc2VsZWN0ZWRJdGVtcyA9IGRldGFpbHNQb2xpY3lUcmVlLmdldFNlbGVjdGlvbigpOwotCQkJLy9wb3NzaWJsZSB0aGF0IGFuIGV2ZW50IGlzIGZpcmVkIGFuZCBubyBub2RlcyBzZWxlY3RlZAotCQkJaWYgKCEoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSkKLQkJCQlyZXR1cm47Ci0JCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBzcCA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNlbGVjdGVkSXRlbXMubGVuZ3RoOyBpKyspIHsKLQkJCQlzcC5hZGQoKElTZXJ2aWNlUG9saWN5KSBzZWxlY3RlZEl0ZW1zW2ldLmdldERhdGEoKSk7Ci0JCQl9Ci0JCQkvL3VwZGF0ZSB0aGUgY29udGV4dCBzZW5zaXRpdmUgaGVscAotCQkJdXBkYXRlQ1NIKHNwKTsKLQkJCXVwZGF0ZUluZm9QYW5lbHMoc3ApOwotCi0JCQlpZiAoZS5nZXRTb3VyY2UoKSA9PSBtYXN0ZXJQb2xpY3lUcmVlKSB7Ci0JCQkJLy8gaWYgc2VsZWN0ZWQgbm9kZSBpbiBtYXN0ZXIgdHJlZSBpcyAzcmQgbGV2ZWwgJiBoYXMKLQkJCQkvLyBjaGlsZHJlbiwgcG9wdWxhdGUgZGV0YWlscyB0cmVlCi0JCQkJaWYgKGlzM3JkTGV2ZWxQb2xJbk1hc3RlclRyZWVXaXRoQ2hpbGRyZW4oc3ApKSB7Ci0JCQkJCXBvcHVsYXRlRGV0YWlsc1BvbGljeVRyZWUoc3ApOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8vaWYgZXhwYW5kYWJsZSBjb21wb3NpdGUgd2FzIHZpc2libGUsIGNvbGxhcHNlIGFuZCBzZXQgaW52aXNpYmxlCi0JCQkJCWlmIChleGNvbXBvc2l0ZS5nZXRWaXNpYmxlKCkpIHsKLQkJCQkJCWV4Y29tcG9zaXRlLnNldFZpc2libGUoZmFsc2UpOwotCQkJCQkJZXhjb21wb3NpdGUuc2V0RXhwYW5kZWQoZmFsc2UpOwotCQkJCQkJZXhwYW5kZWRTdGF0ZUNoYW5nZWQoZXhjb21wb3NpdGUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJYWRkQWN0aW9uQnV0dG9ucyhzcCk7Ci0JCQlsYXN0U2VsZWN0ZWRTcCA9IHNwOwotCi0JCX0gZWxzZSB7Ci0JCQkvLyBhbiBhY3Rpb24gY29udHJvbCBmaXJlZCBhIGNoYW5nZSBldmVudAotCQkJQ29udHJvbCBhY3Rpb25Db250cm9sID0gKENvbnRyb2wpIGUuZ2V0U291cmNlKCk7Ci0JCQl1cGRhdGVQb2xpY3koYWN0aW9uQ29udHJvbCk7Ci0JCQkKLQkJCWlmKCBsYXN0U2VsZWN0ZWRTcCAhPSBudWxsICkKLQkJCXsKLQkJCSAgYWRkQWN0aW9uQnV0dG9ucyhsYXN0U2VsZWN0ZWRTcCk7ICAKLQkJCX0KLQkJCQotCQkJLy9wb2xpY3kgdXBkYXRlcyBtaWdodCBkZWxldGUgbm9kZXMgaW4gdGhlIHRyZWUsIHNvIG1ha2Ugc3VyZSBhY3Rpb24gY29udHJvbCBub3QgZGlzcG9zZWQKLQkJCUlTZXJ2aWNlUG9saWN5IGNoYW5nZWRTUCA9IG51bGw7Ci0JCQlpZiAoIWFjdGlvbkNvbnRyb2wuaXNEaXNwb3NlZCgpKQotCQkJCWNoYW5nZWRTUCA9ICgoQWN0aW9uQ29udHJvbERhdGEpIGFjdGlvbkNvbnRyb2wuZ2V0RGF0YSgpKQotCQkJCQkuZ2V0U3BMaXN0KCkuZ2V0KDApOwotCQkJZXJyb3IgPSB2YWxpZGF0ZUFsbFBvbGljaWVzKGNoYW5nZWRTUCk7Ci0JCQkvL2luZm9ybSBsaXN0ZW5lcnMgdGhhdCBhIGNvbnRyb2wgaGFzIGNoYW5nZWQsIGFzIGNvbXBvc2l0ZSBtYXkgYmUgaW4gZXJyb3Igbm93Ci0JCQlsaXN0ZW5lci53aWRnZXRTZWxlY3RlZChlKTsKLQotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBQb3B1bGF0ZSB0aGUgZGV0YWlscyBwb2xpY3kgdHJlZSB3aXRoIHNwIGFuZCB0aGVpciBjaGlsZHJlbgotCSAqIEBwYXJhbSBzcCBhIGxpc3Qgb2YgdG9wIGxldmVsIGRldGFpbHMgdHJlZSBzZXJ2aWNlIHBvbGljaWVzCi0JICovCi0JcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRGV0YWlsc1BvbGljeVRyZWUoTGlzdDxJU2VydmljZVBvbGljeT4gc3ApIHsKLQkJTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGRwb2xpY3lMaXN0ID0gc3AuZ2V0KDApCi0JCQkJLmdldENoaWxkcmVuKCk7Ci0JCWRldGFpbHNQb2xpY3lUcmVlLnJlbW92ZUFsbCgpOwotCQlmb3IgKElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IGNoaWxkcG9saWN5TGlzdCkgewotCQkJYWRkUG9saWN5KHBvbGljeSwgZGV0YWlsc1BvbGljeVRyZWUsIGZhbHNlKTsKLQkJfQotCQkvLyB1cGRhdGUgZGV0YWlscyBwcmVmZXJlbmNlIHRyZWUKLQkJVHJlZUl0ZW1bXSB0cmVlSXRlbXMgPSBkZXRhaWxzUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRyZWVJdGVtcy5sZW5ndGg7IGkrKykgewotCQkJdXBkYXRlVmFsaWRTdGF0ZXModHJlZUl0ZW1zW2ldLCB0cnVlKTsKLQkJfQotCi0JCWV4Y29tcG9zaXRlLnNldFZpc2libGUodHJ1ZSk7Ci0JCWV4Y29tcG9zaXRlLnNldFRleHQoc3AuZ2V0KDApLmdldERlc2NyaXB0b3IoKS5nZXRMb25nTmFtZSgpCi0JCQkJKyAiICgiICsgV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlRFWFRfREVUQUlMUyArICIpIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkvLyB0ZXh0IGhhcyBjaGFuZ2VkLCBzbyBuZWVkIHRvIGZvcmNlIGxheW91dCBzbyB1cGRhdGVkCi0JCWV4Y29tcG9zaXRlLmxheW91dCgpOwotCX0KLQotCS8qKgotCSAqIFVwZGF0ZXMgdGhlIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcyBwYW5lbHMgZm9yIHRoZSBmaXJzdCBzZXJ2aWNlCi0JICogcG9saWN5IGluIHNwTGlzdAotCSAqIEBwYXJhbSBzcExpc3QgYSBsaXN0IG9mIHNlbGVjdGVkIHNlcnZpY2UgcG9saWNpZXMKLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlSW5mb1BhbmVscyhMaXN0PElTZXJ2aWNlUG9saWN5PiBzcExpc3QpIHsKLQkJU3RyaW5nIGRlc2MgPSAoc3BMaXN0LmdldCgwKSA9PSBudWxsCi0JCQkJfHwgc3BMaXN0LmdldCgwKS5nZXREZXNjcmlwdG9yKCkgPT0gbnVsbCB8fCBzcExpc3QuZ2V0KDApCi0JCQkJLmdldERlc2NyaXB0b3IoKS5nZXREZXNjcmlwdGlvbigpID09IG51bGwpID8gIiIgOiBzcExpc3QuZ2V0KDApIC8vJE5PTi1OTFMtMSQKLQkJCQkuZ2V0RGVzY3JpcHRvcigpLmdldERlc2NyaXB0aW9uKCk7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uLnNldFRleHQoZGVzYyk7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2RlcGVuZGVuY2llcy5zZXRUZXh0KGdldERlcGVuZGFuY2llc1RleHQoc3BMaXN0Ci0JCQkJLmdldCgwKSkpOwotCX0KLQotCS8qKgotCSAqIFVwZGF0ZXMgdGhlIGNvbnRleHQgc2Vuc2l0aXZlIGhlbHAgZm9yIHRoZSBjb21wb3NpdGUgd2l0aCAKLQkgKiB0aGF0IGRlZmluZWQgZm9yIHRoZSBmaXJzdCBwb2xpY3kgaW4gc3BMaXN0IChvciBhIHBhcmVudCBvZiAKLQkgKiBmaXJzdCBwb2xpY3kgaW4gc3BMaXN0IHBvbGljeSBkb2VzIG5vdCBkZWZpbmUgYW55IENTSCkKLQkgKiBAcGFyYW0gc3BMaXN0IHRoZSBsaXN0IG9mIHNlbGVjdGVkIHNlcnZpY2UgcG9saWNpZXMKLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlQ1NIKExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwTGlzdCkgewotCQlTdHJpbmcgQ1NIX0lEID0gKHNwTGlzdC5nZXQoMCkgPT0gbnVsbCB8fCBzcExpc3QuZ2V0KDApLmdldERlc2NyaXB0b3IoKSA9PSBudWxsKSA/IG51bGwKLQkJCQk6IHNwTGlzdC5nZXQoMCkuZ2V0RGVzY3JpcHRvcigpLmdldENvbnRleHRIZWxwSWQoKTsKLQkJSVNlcnZpY2VQb2xpY3kgcGFyZW50U1AgPSBzcExpc3QuZ2V0KDApOwotCQl3aGlsZSAoKENTSF9JRCA9PSBudWxsIHx8IENTSF9JRC5sZW5ndGgoKSA9PSAwKSkgewotCQkJcGFyZW50U1AgPSBwYXJlbnRTUC5nZXRQYXJlbnRQb2xpY3koKTsKLQkJCWlmIChwYXJlbnRTUCA9PSBudWxsKQotCQkJCWJyZWFrOwotCQkJQ1NIX0lEID0gKHBhcmVudFNQLmdldERlc2NyaXB0b3IoKSA9PSBudWxsKSA/IG51bGwgOiBwYXJlbnRTUAotCQkJCQkuZ2V0RGVzY3JpcHRvcigpLmdldENvbnRleHRIZWxwSWQoKTsKLQkJfQotCQloZWxwU3lzdGVtLnNldEhlbHAodGhpcywgQ1NIX0lEKTsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZXMgYWxsIFNlcnZpY2UgUG9saWNpZXMgaW4gdGhlIG1vZGVsCi0JICogCi0JICogQHBhcmFtIElTZXJ2aWNlUG9saWN5Ci0JICogICAgICAgICAgICB0aGUgZm9jdXMgcG9saWN5LCBpLmUuIG9uZSB0aGF0IGNoYW5nZWQgc3RhdGUKLQkgKiBAcmV0dXJuIElTdGF0dXMgbnVsbCBpZiBubyBTZXJ2aWNlIHBvbGljaWVzIGluIGVycm9yLCBvdGhlcndpc2UgYSBTZXJ2aWNlCi0JICogICAgICAgICBQb2xpY3kgZXJyb3IgKHRoZSBmb2N1Y1BvbGljeSBlcnJvciBpZiBpdCBpcyBpbiBlcnJvcikuCi0JICogICAgICAgICBQb3N0Y29uZGl0aW9uLSB0aGUgZXJyb3IgcHJvcGVydHkgaXMgdXBkYXRlZC4KLQkgKi8KLQlwcml2YXRlIElTdGF0dXMgdmFsaWRhdGVBbGxQb2xpY2llcyhJU2VydmljZVBvbGljeSBmb2N1c1BvbGljeSkgewotCQkvLyByZW1vdmUgYWxsIGVycm9ycyBhcyBnb2luZyB0byByZS12YWxpZGF0ZQotCQlhbGxFcnJvcnMuY2xlYXIoKTsKLQkJLy8gcmUtdmFsaWRhdGUgYWxsIHBvbGljaWVzIGluIG1vZGVsCi0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlcnZpY2VQb2xpY3lMaXN0ID0gcGxhdGZvcm0KLQkJCQkuZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyhudWxsKTsKLQkJZm9yIChJU2VydmljZVBvbGljeSBzZXJ2aWNlUG9saWN5SXRlbSA6IHNlcnZpY2VQb2xpY3lMaXN0KSB7Ci0JCQl2YWxpZGF0ZVBvbGljeShzZXJ2aWNlUG9saWN5SXRlbSk7Ci0JCX0KLQkJLy8gZGVmaW5lIGVycm9yIG1lc3NhZ2UKLQkJSVN0YXR1cyBlcnJvciA9IChmb2N1c1BvbGljeSA9PSBudWxsKSA/IG51bGwgOiBhbGxFcnJvcnMKLQkJCQkuZ2V0KGZvY3VzUG9saWN5LmdldElkKCkpOwotCQlpZiAoZXJyb3IgPT0gbnVsbCkKLQkJCWlmICghYWxsRXJyb3JzLmlzRW1wdHkoKSkKLQkJCQllcnJvciA9IGFsbEVycm9ycy5nZXQoYWxsRXJyb3JzLmtleXMoKS5uZXh0RWxlbWVudCgpKTsKLQotCQkvLyB1cGRhdGUgbWFzdGVyIHBvbGljeSB0cmVlCi0JCVRyZWVJdGVtW10gdHJlZUl0ZW1zID0gbWFzdGVyUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRyZWVJdGVtcy5sZW5ndGg7IGkrKykgewotCQkJdXBkYXRlVmFsaWRTdGF0ZXModHJlZUl0ZW1zW2ldLCBmYWxzZSk7Ci0JCX0KLQkJaWYgKGRldGFpbHNQb2xpY3lUcmVlLmlzVmlzaWJsZSgpKSB7Ci0JCQkvLyB1cGRhdGUgZGV0YWlscyBwcmVmZXJlbmNlIHRyZWUKLQkJCXRyZWVJdGVtcyA9IGRldGFpbHNQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHRyZWVJdGVtcy5sZW5ndGg7IGkrKykgewotCQkJCXVwZGF0ZVZhbGlkU3RhdGVzKHRyZWVJdGVtc1tpXSwgZmFsc2UpOwotCQkJfQotCi0JCX0KLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCS8qKgotCSAqIFVwZGF0ZXMgdGhlIHBvbGljeSB0cmVlcyB0byByZWZsZWN0IHZhbGlkIG9yIGludmFsaWQgc3RhdGVzLCBpbnZhbGlkIHN0YXRlcyBhcmUgCi0JICogcHJvcGFnYXRlZCB1cCB0aHJvdWdoIHRoZSB0cmVlLCBhbmQgdXAgdG8gbWFzdGVyIHRyZWUgaWYgdXBkYXRlRGV0YWlsc09ubHkgaXMgZmFsc2UKLQkgKiBAcGFyYW0gdGkgdGhlIFRyZWVJdGVtIHRvIHVwZGF0ZSwgdXBkYXRlcyB0aSBhbmQgYWxsIGl0J3MgY2hpbGRyZW4KLQkgKiBAcGFyYW0gdXBkYXRlRGV0YWlsc09ubHkgaWYgZmFsc2UgdGhlbiBwcm9wYWdhdGUgaW52YWxpZCBzdGF0ZXMgaW50bwotCSAqIG1hc3RlciB0cmVlIAotCSAqLwotCXByaXZhdGUgdm9pZCB1cGRhdGVWYWxpZFN0YXRlcyhUcmVlSXRlbSB0aSwgYm9vbGVhbiB1cGRhdGVEZXRhaWxzT25seSkgewotCQkvLyBhc3N1bWUgdHJlZSBpdGVtIGlzIHZhbGlkIGZvciBub3cKLQkJSVNlcnZpY2VQb2xpY3kgc3AgPSAoSVNlcnZpY2VQb2xpY3kpIHRpLmdldERhdGEoKTsKLQkJc2V0VmFsaWRQb2xpY3lTdGF0ZSh0aSk7Ci0KLQkJaWYgKGFsbEVycm9ycy5jb250YWluc0tleShzcC5nZXRJZCgpKSkKLQkJCXNldEludmFsaWRQb2xpY3lTdGF0ZSh0aSwgdXBkYXRlRGV0YWlsc09ubHkpOwotCQlUcmVlSXRlbVtdIHRyZWVJdGVtcyA9IHRpLmdldEl0ZW1zKCk7Ci0JCWlmICh0aS5nZXRJdGVtcygpLmxlbmd0aCA9PSAwKSB7Ci0JCQlpZiAoc3AuZ2V0Q2hpbGRyZW4oKS5zaXplKCkgIT0gMCAmJiBwb2xpY3lDaGlsZHJlbkludmFsaWQoc3ApKQotCQkJCXNldEludmFsaWRQb2xpY3lTdGF0ZSh0aSwgdXBkYXRlRGV0YWlsc09ubHkpOwotCQl9IGVsc2UgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmVlSXRlbXMubGVuZ3RoOyBpKyspIHsKLQotCQkJCXVwZGF0ZVZhbGlkU3RhdGVzKHRyZWVJdGVtc1tpXSwgdXBkYXRlRGV0YWlsc09ubHkpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBDaGVja3Mgd2hldGhlciB0aGUgc3AgaGFzIGludmFsaWQgY2hpbGRyZW4KLQkgKiBAcGFyYW0gc3AgdGhlIHNlcnZpY2UgcG9saWN5IHdob3NlIGNoaWxkcmVuIG1heSBiZSBpbnZhbGlkCi0JICogQHJldHVybiB0cnVlIGlmIHNwIGhhcyBhbiBpbnZhbGlkIGNoaWxkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIHBvbGljeUNoaWxkcmVuSW52YWxpZChJU2VydmljZVBvbGljeSBzcCkgewotCQlib29sZWFuIHRvUmV0dXJuID0gZmFsc2U7Ci0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlcnZpY2VQb2xpY3lMaXN0ID0gc3AuZ2V0Q2hpbGRyZW4oKTsKLQkJZm9yIChJU2VydmljZVBvbGljeSBzZXJ2aWNlUG9saWN5SXRlbSA6IHNlcnZpY2VQb2xpY3lMaXN0KSB7Ci0JCQlpZiAoYWxsRXJyb3JzLmNvbnRhaW5zS2V5KHNlcnZpY2VQb2xpY3lJdGVtLmdldElkKCkpKQotCQkJCXJldHVybiB0cnVlOwotCQkJZWxzZQotCQkJCXRvUmV0dXJuID0gcG9saWN5Q2hpbGRyZW5JbnZhbGlkKHNlcnZpY2VQb2xpY3lJdGVtKTsKLQkJfQotCQlyZXR1cm4gdG9SZXR1cm47Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGVzIHRoZSBTZXJ2aWNlIFBvbGljaWVzIGZvciB0aGUgc3AgYW5kIGFsbCBpdCdzIGNoaWxkcmVuLCBjcmVhdGluZyAKLQkgKiBlcnJvciBzdGF0dXMgb2JqZWN0cyBmb3IgYW55IHVuc2F0aXNmaWVkIHJlbGF0aW9uc2hpcHMKLQkgKiAKLQkgKiBAcGFyYW0gc3AKLQkgKiAgICAgICAgICAgIHRoZSBzZXJ2aWNlIHBvbGljeSB0byB2YWxpZGF0ZQotCSAqLwotCXByaXZhdGUgdm9pZCB2YWxpZGF0ZVBvbGljeShJU2VydmljZVBvbGljeSBzcCkgewotCQlTdHJpbmcgb3BlcmF0aW9uTG9uZ05hbWU7Ci0JCVN0cmluZyBvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZTsKLQkJU3RyaW5nIGRlcGVuZGFudFBvbGljeVNob3J0TmFtZTsKLQkJTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiByZWxhdGlvblNoaXBMaXN0ID0gc3AuZ2V0UmVsYXRpb25zaGlwcygpOwotCQlTdHJpbmcgY3VycmVudFZhbHVlSUQgPSBudWxsOwotCQlpZiAocmVsYXRpb25TaGlwTGlzdCAhPSBudWxsICYmIHJlbGF0aW9uU2hpcExpc3Quc2l6ZSgpID4gMCkgewotCQlmb3IgKElQb2xpY3lSZWxhdGlvbnNoaXAgcmVsYXRpb25TaGlwSXRlbSA6IHJlbGF0aW9uU2hpcExpc3QpIHsKLQkJCS8vb3BlcmF0aW9ucyBmb3IgdGhlIHBvbGljeQotCQkJTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb2xpY3lPcGVyYXRpb25zTGlzdCA9IHBsYXRmb3JtVUkKLQkJCQkJLmdldE9wZXJhdGlvbnMocmVsYXRpb25TaGlwSXRlbS5nZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKQotCQkJCQkJCS5nZXRQb2xpY3koKSwgcHJvamVjdCA9PSBudWxsKTsKLQkJCS8vZGVmYXVsdCBvcGVyYXRpb24gbmFtZQotCQkJb3BlcmF0aW9uTG9uZ05hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJZm9yIChJUG9saWN5T3BlcmF0aW9uIHBvbGljeU9wZXJhdGlvbkl0ZW0gOiBwb2xpY3lPcGVyYXRpb25zTGlzdCkgewotCQkJCWlmIChwb2xpY3lPcGVyYXRpb25JdGVtLmlzVXNlRGVmYXVsdERhdGEoKSkgewotCQkJCQlvcGVyYXRpb25Mb25nTmFtZSA9IHBvbGljeU9wZXJhdGlvbkl0ZW0uZ2V0RGVzY3JpcHRvcigpCi0JCQkJCQkJLmdldExvbmdOYW1lKCk7Ci0JCQkJCWN1cnJlbnRWYWx1ZUlEID0gcG9saWN5T3BlcmF0aW9uSXRlbS5nZXRTdGF0ZUl0ZW0ocHJvamVjdCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCS8vIGEgbGlzdCBvZiBzdGF0ZXMKLQkJCUxpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBzcFN0YXRlRW51bWVyYXRpb25MaXN0ID0gcmVsYXRpb25TaGlwSXRlbQotCQkJCQkuZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCkuZ2V0RW51bWVyYXRpb25MaXN0KCk7Ci0JCQkvLyBhIGxpc3Qgb2YgcmVsYXRlZCBwb2xpY2llcyBhbmQgdGhlaXIgYWNjZXB0YWJsZSBzdGF0ZXMgdG8gc2F0aXNmeSBhIHN0YXRlRW51bWVyYXRpb25JdGVtIGluIHNwU3RhdGVFbnVtZXJhdGlvbkxpc3QKLQkJCUxpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gcmVsYXRlZFBvbGljaWVzID0gcmVsYXRpb25TaGlwSXRlbQotCQkJCQkuZ2V0UmVsYXRlZFBvbGljaWVzKCk7Ci0JCQlmb3IgKElTdGF0ZUVudW1lcmF0aW9uSXRlbSBzdGF0ZUVudW1lcmF0aW9uSXRlbSA6IHNwU3RhdGVFbnVtZXJhdGlvbkxpc3QpIHsKLQkJCQlpZiAoc3RhdGVFbnVtZXJhdGlvbkl0ZW0uZ2V0SWQoKSAhPSBjdXJyZW50VmFsdWVJRCkKLQkJCQkJY29udGludWU7Ci0JCQkJLy9sb25nIG5hbWUgb2YgdGhlIHJlbGF0ZWQgcG9saWN5IG9wZXJhdGlvbgotCQkJCW9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lID0gc3RhdGVFbnVtZXJhdGlvbkl0ZW0uZ2V0TG9uZ05hbWUoKTsKLQkJCQlmb3IgKElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgcmVsYXRlZFBvbGljeUVudW1lcmF0aW9uSXRlbSA6IHJlbGF0ZWRQb2xpY2llcykgewotCQkJCQlkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWUgPSByZWxhdGVkUG9saWN5RW51bWVyYXRpb25JdGVtCi0JCQkJCQkJLmdldFBvbGljeSgpLmdldERlc2NyaXB0b3IoKS5nZXRTaG9ydE5hbWUoKTsKLQkJCQkJLy90aGUgbGlzdCBvZiByZWxhdGVkIHNwIHN0YXRlcyB0aGF0IHNhdGlzZnkgdGhlIHN0YXRlRW51bWVyYXRpb25JdGVtCi0JCQkJCUxpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiByZWxhdGVkU1BTdGF0ZUVudW1lcmF0aW9uTGlzdCA9IHJlbGF0ZWRQb2xpY3lFbnVtZXJhdGlvbkl0ZW0KLQkJCQkJCQkuZ2V0RW51bWVyYXRpb25MaXN0KCk7Ci0JCQkJCS8vdGhlIGxpc3Qgb2YgdmFsaWQgaWRzIGZvciB0aGUgcmVsYXRlZCBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24KLQkJCQkJTGlzdDxTdHJpbmc+IHZhbGlkSWRzID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRlZFNQU3RhdGVFbnVtZXJhdGlvbkxpc3QKLQkJCQkJCQkuc2l6ZSgpOyBpKyspIHsKLQkJCQkJCXZhbGlkSWRzCi0JCQkJCQkJCS5hZGQocmVsYXRlZFNQU3RhdGVFbnVtZXJhdGlvbkxpc3QKLQkJCQkJCQkJCQkuZ2V0KGkpLmdldElkKCkpOwotCi0JCQkJCX0KLQkJCQkJLy9nZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlbGF0ZWQgc2VydmljZSBwb2xpY3kgZGVmYXVsdCBvcGVyYXRpb24KLQkJCQkJU3RyaW5nIGN1cnJlbnRJdGVtSUQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCQlMaXN0PElQb2xpY3lPcGVyYXRpb24+IHJlbGF0ZWRTZXJ2aWNlUG9saWN5UG9saWN5T3BlcmF0aW9uc0xpc3QgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnMocmVsYXRlZFBvbGljeUVudW1lcmF0aW9uSXRlbS5nZXRQb2xpY3koKSwgcHJvamVjdCA9PW51bGwpOwotCQkJCQlJUG9saWN5T3BlcmF0aW9uIHJlbGF0ZWRQb2xpY3lPcGVyYXRpb25JdGVtID0gbnVsbDsKLQkJCQkJZm9yIChJUG9saWN5T3BlcmF0aW9uIHJlbGF0ZWRTZXJ2aWNlUG9saWN5UG9saWN5T3BlcmF0aW9uSXRlbSA6IHJlbGF0ZWRTZXJ2aWNlUG9saWN5UG9saWN5T3BlcmF0aW9uc0xpc3QpIHsKLQkJCQkJCWlmIChyZWxhdGVkU2VydmljZVBvbGljeVBvbGljeU9wZXJhdGlvbkl0ZW0uaXNVc2VEZWZhdWx0RGF0YSgpKSB7Ci0JCQkJCQkJY3VycmVudEl0ZW1JRCA9IHJlbGF0ZWRTZXJ2aWNlUG9saWN5UG9saWN5T3BlcmF0aW9uSXRlbS5nZXRTdGF0ZUl0ZW0ocHJvamVjdCk7Ci0JCQkJCQkJcmVsYXRlZFBvbGljeU9wZXJhdGlvbkl0ZW0gPSByZWxhdGVkU2VydmljZVBvbGljeVBvbGljeU9wZXJhdGlvbkl0ZW07Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJCi0JCQkJCWlmICghdmFsaWRJZHMKLQkJCQkJCQkuY29udGFpbnMoY3VycmVudEl0ZW1JRCkpIHsKLQkJCQkJCS8vIHBvbGljeSBzdGF0ZSBpcyBpbnZhbGlkCi0JCQkJCQlJU3RhdHVzIGVycm9yID0gY3JlYXRlVW5zYXRpc2ZpZWRSZWxhdGlvbnNoaXBFcnJvcihzcCwKLQkJCQkJCQkJb3BlcmF0aW9uTG9uZ05hbWUsCi0JCQkJCQkJCW9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lLAotCQkJCQkJCQlkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWUsCi0JCQkJCQkJCXJlbGF0ZWRQb2xpY3lPcGVyYXRpb25JdGVtLAotCQkJCQkJCQlyZWxhdGVkU1BTdGF0ZUVudW1lcmF0aW9uTGlzdCk7Ci0JCQkJCQlhbGxFcnJvcnMucHV0KHNwLmdldElkKCksIGVycm9yKTsKLQotCQkJCQl9Ci0KLQotCQkJCX0KLQotCQkJfQotCi0JCX0KLQkJfQotCi0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlcnZpY2VQb2xpY3lDaGlsZHJlbkxpc3QgPSBzcC5nZXRDaGlsZHJlbigpOwotCQlmb3IgKElTZXJ2aWNlUG9saWN5IHNlcnZpY2VQb2xpY3lDaGlsZHJlbkl0ZW0gOiBzZXJ2aWNlUG9saWN5Q2hpbGRyZW5MaXN0KSB7Ci0JCQl2YWxpZGF0ZVBvbGljeShzZXJ2aWNlUG9saWN5Q2hpbGRyZW5JdGVtKTsKLQotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBpY29uIGZvciB0aGUgdGkgZGVub3RpbmcgaXQgYXMgdmFsaWQKLQkgKiBAcGFyYW0gdGkgYSB2YWxpZCB0cmVlIGl0ZW0KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0VmFsaWRQb2xpY3lTdGF0ZShUcmVlSXRlbSB0aSkgewotCQlJU2VydmljZVBvbGljeSBzcCA9IChJU2VydmljZVBvbGljeSkgdGkuZ2V0RGF0YSgpOwotCQlzZXRJbWFnZSh0aSwgc3AsIGdldEljb25PdmVybGF5SW5mbyhzcCwgZmFsc2UpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBpY29uIGZvciB0aSBkZW5vdGluZyBpdCBhcyBpbnZhbGlkLCBhcyB3ZWxsIGFzIHRpJ3MgcGFyZW50IHRyZWUgaXRlbXMKLQkgKiBAcGFyYW0gdGkgYW4gaW52YWxpZCB0cmVlIGl0ZW0KLQkgKiBAcGFyYW0gdXBkYXRlRGV0YWlsc09ubHkgdHJ1ZSBpbmRpY2F0ZXMgZG8gbm90IHVwZGF0ZSBwYXJlbnQgdHJlZSBpdGVtcyBvbmx5IGluIG1hc3RlciB0cmVlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldEludmFsaWRQb2xpY3lTdGF0ZShUcmVlSXRlbSB0aSwgYm9vbGVhbiB1cGRhdGVEZXRhaWxzT25seSkgewotCQlJU2VydmljZVBvbGljeSBTUCA9IChJU2VydmljZVBvbGljeSkgdGkuZ2V0RGF0YSgpOwotCQlzZXRJbWFnZSh0aSwgU1AsIGdldEljb25PdmVybGF5SW5mbyhTUCwgdHJ1ZSkpOwotCQlUcmVlSXRlbSBwYXJlbnQ7Ci0JCWlmICh0aS5nZXRQYXJlbnQoKSA9PSBtYXN0ZXJQb2xpY3lUcmVlIHx8IHVwZGF0ZURldGFpbHNPbmx5KQotCQkJcGFyZW50ID0gdGkuZ2V0UGFyZW50SXRlbSgpOwotCQllbHNlCi0JCQlwYXJlbnQgPSAodGkuZ2V0UGFyZW50SXRlbSgpID09IG51bGwgJiYgU1AuZ2V0UGFyZW50UG9saWN5KCkgIT0gbnVsbCkgPyBnZXRQYXJlbnRJbk1hc3RlclRyZWUoU1AKLQkJCQkJLmdldElkKCkpCi0JCQkJCTogdGkuZ2V0UGFyZW50SXRlbSgpOwotCQl3aGlsZSAocGFyZW50ICE9IG51bGwpIHsKLQkJCXNldEltYWdlKHBhcmVudCwgKElTZXJ2aWNlUG9saWN5KSBwYXJlbnQuZ2V0RGF0YSgpLAotCQkJCQlnZXRJY29uT3ZlcmxheUluZm8oKElTZXJ2aWNlUG9saWN5KSBwYXJlbnQuZ2V0RGF0YSgpLAotCQkJCQkJCXRydWUpKTsKLQkJCWlmICh1cGRhdGVEZXRhaWxzT25seSkKLQkJCQlwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50SXRlbSgpOwotCQkJZWxzZSB7Ci0JCQkJcGFyZW50ID0gKHBhcmVudC5nZXRQYXJlbnRJdGVtKCkgPT0gbnVsbCAmJiAoKElTZXJ2aWNlUG9saWN5KSBwYXJlbnQKLQkJCQkJCS5nZXREYXRhKCkpLmdldFBhcmVudFBvbGljeSgpICE9IG51bGwpID8gZ2V0UGFyZW50SW5NYXN0ZXJUcmVlKCgoSVNlcnZpY2VQb2xpY3kpIHBhcmVudAotCQkJCQkJLmdldERhdGEoKSkuZ2V0UGFyZW50UG9saWN5KCkuZ2V0SWQoKSkKLQkJCQkJCTogcGFyZW50LmdldFBhcmVudEl0ZW0oKTsKLQkJCX0KLQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBlcnJvciBzdGF0dXMgb2JqZWN0IGZvciB0aGUgc3AuIFRoZSBlcnJvciBtZXNzYWdlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IAotCSAqIGFuIHVuc2F0aXNmaWVkIHJlbGF0aW9uc2hpcAotCSAqIEBwYXJhbSBzcAotCSAqIEBwYXJhbSBvcGVyYXRpb25Mb25nTmFtZQotCSAqIEBwYXJhbSBvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZQotCSAqIEBwYXJhbSBkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWUKLQkgKiBAcGFyYW0gcmVsYXRlZE9wZXJhdGlvbgotCSAqIEBwYXJhbSByZWxhdGVkT3BlcmF0aW9uQWNjZXB0YWJsZVZhbHVlcwotCSAqIEByZXR1cm4gYW4gRXJyb3Igc3RhdHVzCi0JICovCi0JcHJpdmF0ZSBJU3RhdHVzIGNyZWF0ZVVuc2F0aXNmaWVkUmVsYXRpb25zaGlwRXJyb3IoSVNlcnZpY2VQb2xpY3kgc3AsCi0JCQlTdHJpbmcgb3BlcmF0aW9uTG9uZ05hbWUsIFN0cmluZyBvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZSwKLQkJCVN0cmluZyBkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWUsCi0JCQlJUG9saWN5T3BlcmF0aW9uIHJlbGF0ZWRPcGVyYXRpb24sCi0JCQlMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gcmVsYXRlZE9wZXJhdGlvbkFjY2VwdGFibGVWYWx1ZXMpIHsKLQkJU3RyaW5nIGRlcGVuZGFudE9wZXJhdGlvblNob3J0TmFtZTsKLQkJU3RyaW5nIGRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3Q7Ci0JCWRlcGVuZGFudE9wZXJhdGlvblNob3J0TmFtZSA9IHJlbGF0ZWRPcGVyYXRpb24KLQkJCQkuZ2V0RGVzY3JpcHRvcigpLmdldFNob3J0TmFtZSgpOwotCQlkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0ID0gbmV3IFN0cmluZygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlbGF0ZWRPcGVyYXRpb25BY2NlcHRhYmxlVmFsdWVzLnNpemUoKTsgaSsrKSB7Ci0JCQlJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbSA9IHJlbGF0ZWRPcGVyYXRpb25BY2NlcHRhYmxlVmFsdWVzLmdldChpKTsKLQkJCWlmIChpICE9IDApCi0JCQkJZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdCArPSAiIHwgIjsgLy8kTk9OLU5MUy0xJAotCQkJZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdCArPSBpdGVtLmdldFNob3J0TmFtZSgpOwotCi0JCX0KLQkJU3RyaW5nW10gYXJncyA9IHsgc3AuZ2V0RGVzY3JpcHRvcigpLmdldExvbmdOYW1lKCksIG9wZXJhdGlvbkxvbmdOYW1lLAotCQkJCW9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lLCBkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWUsCi0JCQkJZGVwZW5kYW50T3BlcmF0aW9uU2hvcnROYW1lLAotCQkJCWRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3R9OwotCQlJU3RhdHVzIGVycm9yID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsCi0JCQkJU2VydmljZVBvbGljeUFjdGl2YXRvclVJLlBMVUdJTl9JRCwgTkxTLmJpbmQoCi0JCQkJCQlXc3RTUFVJUGx1Z2luTWVzc2FnZXMuU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ1lfRVJST1IsCi0JCQkJCQlhcmdzKSk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcGFyZW50SUQgdGhlIGlkIHRvIGZpbmQgaW4gdGhlIG1hc3RlciB0cmVlCi0JICogQHJldHVybiBhIFRyZWVJdGVtIHdpdGggdGhlIGlkIGluIHRoZSBtYXN0ZXIgdHJlZQotCSAqLwotCXByaXZhdGUgVHJlZUl0ZW0gZ2V0UGFyZW50SW5NYXN0ZXJUcmVlKFN0cmluZyBwYXJlbnRJRCkgewotCQlUcmVlSXRlbSBwYXJlbnQgPSBudWxsOwotCQlUcmVlSXRlbVtdIHJvb3ROb2RlcyA9IG1hc3RlclBvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByb290Tm9kZXMubGVuZ3RoOyBpKyspIHsKLQkJCXBhcmVudCA9IGZpbmRDaGlsZE5vZGUocm9vdE5vZGVzW2ldLCBwYXJlbnRJRCk7Ci0JCQlpZiAocGFyZW50ICE9IG51bGwpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIHBhcmVudDsKLQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBUcmVlSXRlbSBhc3NvY2lhdGVkIHdpdGggYSBjaGlsZCBwb2xpY3kgb2YgdGkKLQkgKiBAcGFyYW0gdGkKLQkgKiBAcGFyYW0gaWQgdGhlIHBvbGljeSBpZCBvZiBhIGNoaWxkIG5vZGUgb2YgdGkKLQkgKiBAcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gY2hpbGQgcG9saWN5IG1hdGNoaW5nIGlkCi0JICovCi0JcHJpdmF0ZSBUcmVlSXRlbSBmaW5kQ2hpbGROb2RlKFRyZWVJdGVtIHRpLCBTdHJpbmcgaWQpIHsKLQkJVHJlZUl0ZW0gdG9SZXR1cm4gPSBudWxsOwotCQlpZiAoKChJU2VydmljZVBvbGljeSkgdGkuZ2V0RGF0YSgpKS5nZXRJZCgpLmVxdWFscyhpZCkpIHsKLQkJCXRvUmV0dXJuID0gdGk7Ci0JCX0gZWxzZSB7Ci0JCQlUcmVlSXRlbVtdIGNoaWxkSXRlbXMgPSB0aS5nZXRJdGVtcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdG9SZXR1cm4gPSBmaW5kQ2hpbGROb2RlKGNoaWxkSXRlbXNbaV0sIGlkKTsKLQkJCX0KLQotCQl9Ci0JCXJldHVybiB0b1JldHVybjsKLQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgZGVwZW5kYW5jeSBpbmZvcm1hdGlvbiBhYm91dCBzcCwgdGhhdCBpcyBpbmZvcm1hdGlvbiBhYm91dAotCSAqIGl0J3MgcmVsYXRpb25zaGlwcyAoaWYgYW55KSB3aXRoIG90aGVyIHNlcnZpY2UgcG9saWNpZXMKLQkgKiBAcGFyYW0gc3AgdGhlIHNlcnZpY2UgcG9saWN5IHRvIGdldCBkZXBlbmRlbmN5IGluZm8gYWJvdXQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RGVwZW5kYW5jaWVzVGV4dChJU2VydmljZVBvbGljeSBzcCkgewotCQkvLyB0aGUgcmVsYXRpb25zaGlwcyBkZWZpbmVkIGZvciB0aGUgcG9saWN5Ci0JCUxpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gcmVsYXRpb25TaGlwTGlzdCA9IHNwLmdldFJlbGF0aW9uc2hpcHMoKTsKLQkJaWYgKHJlbGF0aW9uU2hpcExpc3QgPT0gbnVsbCB8fCByZWxhdGlvblNoaXBMaXN0LnNpemUoKSA9PSAwKQotCQkJcmV0dXJuIFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTX05PTkU7Ci0JCVN0cmluZyB0b1JldHVybiA9IG5ldyBTdHJpbmcoKTsKLQotCQlTdHJpbmcgb3BlcmF0aW9uTG9uZ05hbWU7Ci0JCVN0cmluZyBvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZTsKLQkJU3RyaW5nIGRlcGVuZGFudFBvbGljeVNob3J0TmFtZTsKLQkJU3RyaW5nIGRlcGVuZGFudE9wZXJhdGlvblNob3J0TmFtZTsKLQkJU3RyaW5nIGRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3Q7Ci0KLQkJZm9yIChJUG9saWN5UmVsYXRpb25zaGlwIHJlbGF0aW9uU2hpcEl0ZW0gOiByZWxhdGlvblNoaXBMaXN0KSB7Ci0JCQlMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeU9wZXJhdGlvbnNMaXN0ID0gcGxhdGZvcm1VSQotCQkJCQkuZ2V0T3BlcmF0aW9ucyhyZWxhdGlvblNoaXBJdGVtLmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpCi0JCQkJCQkJLmdldFBvbGljeSgpLCBwcm9qZWN0ID09IG51bGwpOwotCQkJb3BlcmF0aW9uTG9uZ05hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJZm9yIChJUG9saWN5T3BlcmF0aW9uIHBvbGljeU9wZXJhdGlvbkl0ZW0gOiBwb2xpY3lPcGVyYXRpb25zTGlzdCkgewotCQkJCWlmIChwb2xpY3lPcGVyYXRpb25JdGVtLmlzVXNlRGVmYXVsdERhdGEoKSkgewotCQkJCQlvcGVyYXRpb25Mb25nTmFtZSA9IHBvbGljeU9wZXJhdGlvbkl0ZW0uZ2V0RGVzY3JpcHRvcigpCi0JCQkJCQkJLmdldExvbmdOYW1lKCk7Ci0JCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJLy8gcG9saWNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWxhdGlvbnNoaXAgaXRlbQotCQkJTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiByZWxhdGVkUG9saWNpZXMgPSByZWxhdGlvblNoaXBJdGVtCi0JCQkJCS5nZXRSZWxhdGVkUG9saWNpZXMoKTsKLQkJCUxpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBzcFN0YXRlRW51bWVyYXRpb25MaXN0ID0gcmVsYXRpb25TaGlwSXRlbQotCQkJCQkuZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCkuZ2V0RW51bWVyYXRpb25MaXN0KCk7Ci0JCQlmb3IgKElTdGF0ZUVudW1lcmF0aW9uSXRlbSBzdGF0ZUVudW1lcmF0aW9uSXRlbSA6IHNwU3RhdGVFbnVtZXJhdGlvbkxpc3QpIHsKLQkJCQlvcGVyYXRpb25TZWxlY3Rpb25Mb25nTmFtZSA9IHN0YXRlRW51bWVyYXRpb25JdGVtLmdldExvbmdOYW1lKCk7Ci0JCQkJZm9yIChJUG9saWN5RW51bWVyYXRpb25MaXN0IHJlbGF0ZWRQb2xpY3lFbnVtZXJhdGlvbkl0ZW0gOiByZWxhdGVkUG9saWNpZXMpIHsKLQkJCQkJZGVwZW5kYW50UG9saWN5U2hvcnROYW1lID0gcmVsYXRlZFBvbGljeUVudW1lcmF0aW9uSXRlbQotCQkJCQkJCS5nZXRQb2xpY3koKS5nZXREZXNjcmlwdG9yKCkuZ2V0U2hvcnROYW1lKCk7Ci0JCQkJCUxpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiByZWxhdGVkU1BTdGF0ZUVudW1lcmF0aW9uTGlzdCA9IHJlbGF0ZWRQb2xpY3lFbnVtZXJhdGlvbkl0ZW0KLQkJCQkJCQkuZ2V0RW51bWVyYXRpb25MaXN0KCk7Ci0JCQkJCUxpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcmVsYXRlZFBvbGljeU9wZXJhdGlvbnNMaXN0ID0gcGxhdGZvcm1VSQotCQkJCQkJCS5nZXRPcGVyYXRpb25zKHJlbGF0ZWRQb2xpY3lFbnVtZXJhdGlvbkl0ZW0KLQkJCQkJCQkJCS5nZXRQb2xpY3koKSwgKHByb2plY3QgPT0gbnVsbCkpOwotCQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TaG9ydE5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCQlmb3IgKElQb2xpY3lPcGVyYXRpb24gcmVsYXRlZFBvbGljeU9wZXJhdGlvbkl0ZW0gOiByZWxhdGVkUG9saWN5T3BlcmF0aW9uc0xpc3QpIHsKLQkJCQkJCWlmIChyZWxhdGVkUG9saWN5T3BlcmF0aW9uSXRlbS5pc1VzZURlZmF1bHREYXRhKCkpCi0JCQkJCQkJZGVwZW5kYW50T3BlcmF0aW9uU2hvcnROYW1lID0gcmVsYXRlZFBvbGljeU9wZXJhdGlvbkl0ZW0KLQkJCQkJCQkJCS5nZXREZXNjcmlwdG9yKCkuZ2V0U2hvcnROYW1lKCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCWRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3QgPSBuZXcgU3RyaW5nKCk7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRlZFNQU3RhdGVFbnVtZXJhdGlvbkxpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCQkJCUlTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtID0gcmVsYXRlZFNQU3RhdGVFbnVtZXJhdGlvbkxpc3QKLQkJCQkJCQkJLmdldChpKTsKLQkJCQkJCWlmIChpICE9IDApCi0JCQkJCQkJZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdCArPSAiIHwgIjsgLy8kTk9OLU5MUy0xJAotCQkJCQkJZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdCArPSBpdGVtCi0JCQkJCQkJCS5nZXRTaG9ydE5hbWUoKTsKLQotCQkJCQl9Ci0JCQkJCVN0cmluZ1tdIGFyZ3MgPSB7IG9wZXJhdGlvbkxvbmdOYW1lLAotCQkJCQkJCW9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lLAotCQkJCQkJCWRlcGVuZGFudFBvbGljeVNob3J0TmFtZSwKLQkJCQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TaG9ydE5hbWUsCi0JCQkJCQkJZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdCB9OwotCQkJCQl0b1JldHVybiArPSBOTFMuYmluZCgKLQkJCQkJCQlXc3RTUFVJUGx1Z2luTWVzc2FnZXMuU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ0lFUywKLQkJCQkJCQlhcmdzKQotCQkJCQkJCSsgIlxyXG4iOyAvLyROT04tTkxTLTEkCi0KLQkJCQl9Ci0KLQkJCX0KLQotCQl9Ci0JCXJldHVybiB0b1JldHVybjsKLQl9Ci0KLQotCS8qKgotCSAqIFNhdmVzIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlIHRoZSB3aWRnZXQgZGF0YSAod2lkZ2V0IGRhdGEgY29udGFpbnMgYWxsIAotCSAqIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbnMgdGhlIGNvbnRyb2wgYXBwbGllcyB0bykKLQkgKiBAcGFyYW0gYWN0aW9uQ29udHJvbCBhIHdpZGdldCB3aG8ncyBkYXRhIG5lZWRzIHRvIGJlIHNhdmVkIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlCi0JICogCi0JICovCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZVBvbGljeShDb250cm9sIGFjdGlvbkNvbnRyb2wpIHsKLQotCQlMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeU9wZXJhdGlvbkxpc3QgPSAoKEFjdGlvbkNvbnRyb2xEYXRhKSBhY3Rpb25Db250cm9sLmdldERhdGEoKSkuZ2V0UG9MaXN0KCk7Ci0JCUlQb2xpY3lPcGVyYXRpb24gcG8wID0gcG9saWN5T3BlcmF0aW9uTGlzdC5nZXQoMCk7Ci0JCQotCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBzZXJ2aWNlUG9saWN5TGlzdCA9ICgoQWN0aW9uQ29udHJvbERhdGEpIGFjdGlvbkNvbnRyb2wKLQkJCQkuZ2V0RGF0YSgpKS5nZXRTcExpc3QoKTsKLQkJaWYgKGFjdGlvbkNvbnRyb2wgaW5zdGFuY2VvZiBCdXR0b24KLQkJCQkmJiBwbzAuZ2V0T3BlcmF0aW9uS2luZCgpLmVxdWFscyhPcGVyYXRpb25LaW5kLmNvbXBsZXgpKQotCQkJdXBkYXRlQ29tcGxleE9wZXJhdGlvblByZWZlcmVuY2UocG8wLCBzZXJ2aWNlUG9saWN5TGlzdCk7Ci0JCWVsc2UKLQkJCWZvciAoSVBvbGljeU9wZXJhdGlvbiBwb2xpY3lPcGVyYXRpb25JdGVtIDogcG9saWN5T3BlcmF0aW9uTGlzdCkgewotCi0JCQkJdXBkYXRlU2VsZWN0aW9uT3BlcmF0aW9uUHJlZmVyZW5jZShhY3Rpb25Db250cm9sLCBwb2xpY3lPcGVyYXRpb25JdGVtKTsKLQkJCX0KLQotCX0KLQotCXB1YmxpYyBib29sZWFuIG9rVG9MZWF2ZSgpIHsKLQkJcmV0dXJuIGFsbEVycm9ycy5zaXplKCkgPT0gMDsKLQotCX0KLQotCS8qKgotCSAqIFNhdmVzIHZhbHVlIG9mIGVudW1lcmF0aW9uLCBzZWxlY3Rpb24sIGFuZCBpY29uc2VsZWN0aW9uIHR5cGUgb3BlcmF0aW9ucwotCSAqIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlCi0JICogQHBhcmFtIGFjdGlvbkNvbnRyb2wgdGhlIGFjdGlvbiBjb250cm9sIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByZWZlcmVuY2UKLQkgKiBAcGFyYW0gcG8gCi0JICogQHBhcmFtIHNwCi0JICovCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZVNlbGVjdGlvbk9wZXJhdGlvblByZWZlcmVuY2UoQ29udHJvbCBhY3Rpb25Db250cm9sLCBJUG9saWN5T3BlcmF0aW9uIHBvKSB7Ci0JCVN0cmluZyBzZWxlY3RlZFZhbHVlOwotCQkKLQkJLy8gV2UgYXJlIHVwZGF0aW5nIHRoZSBzdGF0ZSBvZiBhIHNlcnZpY2UgcG9saWN5LiAgV2UgZG9uJ3Qgd2FudCB0aGlzCi0JCS8vIHVwZGF0ZSB0byB0cmlnZ2VyIG91ciBzdGF0ZSBjaGFuZ2UgbGlzdGVuZXIuCi0JCWVuYWJsZVN0YXRlTGlzdGVuZXIoIGZhbHNlICk7Ci0JCQotCQlpZiAoYWN0aW9uQ29udHJvbCBpbnN0YW5jZW9mIENvbWJvKSB7Ci0JCQlzZWxlY3RlZFZhbHVlID0gKChDb21ibykgYWN0aW9uQ29udHJvbCkuZ2V0VGV4dCgpOwotCQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1JdGVtTGlzdCA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybQotCQkJCQkuZ2V0SW5zdGFuY2UoKS5nZXRTdGF0ZUVudW1lcmF0aW9uKHBvLmdldEVudW1lcmF0aW9uSWQoKSk7Ci0JCQlmb3IgKElTdGF0ZUVudW1lcmF0aW9uSXRlbSBlbnVtSXRlbSA6IGVudW1JdGVtTGlzdCkgewotCQkJCWlmIChlbnVtSXRlbS5nZXRMb25nTmFtZSgpLmVxdWFscyhzZWxlY3RlZFZhbHVlKSkgewotCQkJCQlwby5zZXRTdGF0ZUl0ZW0ocHJvamVjdCwgZW51bUl0ZW0uZ2V0SWQoKSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQl9IGVsc2UgewotCQkJaWYgKCgoQnV0dG9uKSBhY3Rpb25Db250cm9sKS5nZXRTZWxlY3Rpb24oKSkgewotCQkJCXBvLnNldFN0YXRlSXRlbShwcm9qZWN0LCAib3JnLmVjbGlwc2Uud3N0LnRydWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJfSBlbHNlCi0JCQkJcG8uc2V0U3RhdGVJdGVtKHByb2plY3QsICJvcmcuZWNsaXBzZS53c3QuZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotCi0JCX0KLQotCQkvLyBSZWVuYWJsZSBvdXIgc3RhdGUgY2hhbmdlIGxpc3RlbmVyLgotCQllbmFibGVTdGF0ZUxpc3RlbmVyKCB0cnVlICk7Ci0JfQotCi0JCi0JcHJpdmF0ZSB2b2lkIGFkZFN0YXRlTGlzdGVuZXIoIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0JewotCSAgaWYoIHN0YXRlQ2hhbmdlUG9saWN5U2V0LmNvbnRhaW5zKCBwb2xpY3kgKSApIHJldHVybjsKLQkgIAotCSAgaWYoIHByb2plY3QgPT0gbnVsbCApCi0JICB7Ci0JICAgIHBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpLmFkZFBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoIHN0YXRlQ2hhbmdlTGlzdGVuZXIsIGZhbHNlICk7Ci0JICB9Ci0JICBlbHNlCi0JICB7Ci0JICAgIHBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApLmFkZFBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoIHN0YXRlQ2hhbmdlTGlzdGVuZXIsIGZhbHNlICk7Ci0JICB9Ci0JICAKLQkgIHN0YXRlQ2hhbmdlUG9saWN5U2V0LmFkZCggcG9saWN5ICk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCByZW1vdmVTdGF0ZUxpc3RlbmVyKCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotCXsKLSAgICBpZiggc3RhdGVDaGFuZ2VQb2xpY3lTZXQuY29udGFpbnMoIHBvbGljeSApICkgcmV0dXJuOwotICAgIAotICAgIGlmKCBwcm9qZWN0ID09IG51bGwgKQotICAgIHsKLQkgICAgcG9saWN5LmdldFBvbGljeVN0YXRlKCkucmVtb3ZlUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciggc3RhdGVDaGFuZ2VMaXN0ZW5lciApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcG9saWN5LmdldFBvbGljeVN0YXRlKCBwcm9qZWN0ICkucmVtb3ZlUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciggc3RhdGVDaGFuZ2VMaXN0ZW5lciApOyAgICAgIAotICAgIH0KLSAgICAKLQkgIHN0YXRlQ2hhbmdlUG9saWN5U2V0LnJlbW92ZSggcG9saWN5ICk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBlbmFibGVTdGF0ZUxpc3RlbmVyKCBib29sZWFuIGVuYWJsZWQgKQotCXsKLQkgIHN0YXRlQ2hhbmdlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0JfQotCQotCS8qKgotCSAqIExhdW5jaGVzIHRoZSBjb21wbGV4IG9wZXJhdGlvbiBmb3IgdGhlIGxpc3Qgb2Ygc2VydmljZSBwb2xpY2llcwotCSAqIEBwYXJhbSBwbyBhICJjb21wbGV4IiBwb2xpY3kgb3BlcmF0aW9uIAotCSAqIEBwYXJhbSBzcHMgYSBsaXN0IG9mIHNlcnZpY2UgcG9saWNpZXMgdG8gYXBwbHkgdGhlIG9wZXJhdGlvbiB0bwotCSAqLwotCXByaXZhdGUgdm9pZCAgdXBkYXRlQ29tcGxleE9wZXJhdGlvblByZWZlcmVuY2UoSVBvbGljeU9wZXJhdGlvbiBwbywKLQkJCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwcykgewotCQkvL2NvbXBsZXggb3BlcmF0aW9ucyBjYW4gcmVzdWx0IGluIGFkZGVkIGFuZCBkZWxldGVkIG5vZGVzLCBjYWNoZSB0aGVtIHVudGlsIG9wZXJhdGlvbiBjb21wbGV0ZWQKLQkJYkNvbXBsZXhPcENvbXBsZXRlZCA9IGZhbHNlOwotCQlsaXN0Q2hpbGRDaGFuZ2VFdmVudHMgPSBuZXcgVmVjdG9yPENoaWxkQ2hhbmdlRXZlbnQ+KCk7Ci0JCXRyeSB7Ci0JCQlwby5sYXVuY2hPcGVyYXRpb24oc3BzKTsKLQkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0JCQkvL2p1c3Qgd2FudCB0byBtYWtlIHN1cmUgZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQgc28gY2FuIHVwZGF0ZSBVSSBvZiBhZGRpdGlvbnMvZGVsZXRpb25zCi0JCX0gZmluYWxseSB7Ci0JCQliQ29tcGxleE9wQ29tcGxldGVkID10cnVlOwotCQkJSGFzaHRhYmxlPFN0cmluZywgSVNlcnZpY2VQb2xpY3k+IHRvcExldmVsQWRkcyA9IGdldEhpZ2hlc3RMZXZlbENoaWxkcmVuKGxpc3RDaGlsZENoYW5nZUV2ZW50cywgdHJ1ZSk7Ci0JCQlmb3IgKENoaWxkQ2hhbmdlRXZlbnQgY2hpbGRDaGFuZ2VFdmVudEl0ZW0gOiBsaXN0Q2hpbGRDaGFuZ2VFdmVudHMpIHsKLQkJCQlwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudChjaGlsZENoYW5nZUV2ZW50SXRlbSwgdG9wTGV2ZWxBZGRzKTsKLQkJCX0KLQkJCQotCQl9Ci0JfQotCXByaXZhdGUgSGFzaHRhYmxlPFN0cmluZywgSVNlcnZpY2VQb2xpY3k+IGdldEhpZ2hlc3RMZXZlbENoaWxkcmVuIChMaXN0PENoaWxkQ2hhbmdlRXZlbnQ+IGh0Q2hpbGRDaGFuZ2VFdmVudHMsIGJvb2xlYW4gZm9yQWRkT25seSkgewotCQlIYXNodGFibGU8U3RyaW5nLCBJU2VydmljZVBvbGljeT4gdG9SZXR1cm4gPSBuZXcgSGFzaHRhYmxlPFN0cmluZywgSVNlcnZpY2VQb2xpY3k+KCk7Ci0JCUl0ZXJhdG9yPENoaWxkQ2hhbmdlRXZlbnQ+IGVsZW1lbnRzID0gaHRDaGlsZENoYW5nZUV2ZW50cy5pdGVyYXRvcigpOwotCQlDaGlsZENoYW5nZUV2ZW50IG5leHQ7Ci0JCUhhc2h0YWJsZTxTdHJpbmcsIElTZXJ2aWNlUG9saWN5PiBhbGxTcHMgPSBuZXcgSGFzaHRhYmxlPFN0cmluZywgSVNlcnZpY2VQb2xpY3k+KCk7Ci0JCXdoaWxlIChlbGVtZW50cy5oYXNOZXh0KCkpIHsKLQkJCW5leHQgPSBlbGVtZW50cy5uZXh0KCk7Ci0JCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGFuZ2VkQ2hpbGRyZW5MaXN0ID0gbmV4dC5nZXRDaGFuZ2VkQ2hpbGRyZW4oKTsKLQkJCUxpc3Q8Qm9vbGVhbj4gYWRkZWRMaXN0ID0gbmV4dC5nZXRBZGRlZCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFuZ2VkQ2hpbGRyZW5MaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQkJaWYgKGZvckFkZE9ubHkgJiYgYWRkZWRMaXN0LmdldChpKS5ib29sZWFuVmFsdWUoKSA9PSB0cnVlKQotCQkJCQlhbGxTcHMucHV0KGNoYW5nZWRDaGlsZHJlbkxpc3QuZ2V0KGkpLmdldElkKCksIGNoYW5nZWRDaGlsZHJlbkxpc3QuZ2V0KGkpKTsKLQkJCX0KLQkJfQotCQlFbnVtZXJhdGlvbjxJU2VydmljZVBvbGljeT4gc2VydmljZVBvbGljeUVsZW1lbnRzID0gYWxsU3BzLmVsZW1lbnRzKCk7Ci0JCUlTZXJ2aWNlUG9saWN5IG5leHRTZXJ2aWNlUG9saWN5RWxlbWVudDsKLQkJd2hpbGUgKHNlcnZpY2VQb2xpY3lFbGVtZW50cy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJbmV4dFNlcnZpY2VQb2xpY3lFbGVtZW50ID0gc2VydmljZVBvbGljeUVsZW1lbnRzLm5leHRFbGVtZW50KCk7Ci0JCQlpZiAobmV4dFNlcnZpY2VQb2xpY3lFbGVtZW50LmdldFBhcmVudFBvbGljeSgpID09IG51bGwgfHwgIWFsbFNwcy5jb250YWluc0tleShuZXh0U2VydmljZVBvbGljeUVsZW1lbnQuZ2V0UGFyZW50UG9saWN5KCkuZ2V0SWQoKSkpIHsKLQkJCQl0b1JldHVybi5wdXQobmV4dFNlcnZpY2VQb2xpY3lFbGVtZW50LmdldElkKCksIG5leHRTZXJ2aWNlUG9saWN5RWxlbWVudCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHRvUmV0dXJuOwotCX0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdXBlci5kaXNwb3NlKCk7Ci0JCWljb25NYW5hZ2VyLmRpc3Bvc2UoKTsKLQkJCi0JCWZvciggSVNlcnZpY2VQb2xpY3kgcG9saWN5IDogc3RhdGVDaGFuZ2VQb2xpY3lTZXQgKQotCQl7Ci0JCSAgSVBvbGljeVN0YXRlIHN0YXRlID0gcHJvamVjdCA9PSBudWxsID8gcG9saWN5LmdldFBvbGljeVN0YXRlKCkgOiBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoIHByb2plY3QgKTsKLQkJICAKLQkJICBzdGF0ZS5yZW1vdmVQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKCBzdGF0ZUNoYW5nZUxpc3RlbmVyICk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgVUkgd2lkZ2V0cyBmb3Igb3BlcmF0aW9ucyBhcHBsaWNhYmxlIHRvIHRoZSBsaXN0IG9mIHNlcnZpY2UgcG9saWNpZXMgc3AKLQkgKiBAcGFyYW0gc3BMaXN0IHRoZSBsaXN0IG9mIHNlcnZpY2UgcG9saWNpZXMgdG8gY3JlYXRlIFVJIHdpZGdldHMsIHRoZSBVSSB3aWRnZXRzCi0JICogd2lsbCBiZSB1c2VkIHRvIGRlZmluZSBvcGVyYXRpb25zL3ByZWZlcmVuY2VzIHRvIGFwcGx5IHRvIHRoZSBzZXJ2aWNlIHBvbGljaWVzIGluIHRoZSBsaXN0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZEFjdGlvbkJ1dHRvbnMoTGlzdDxJU2VydmljZVBvbGljeT4gc3BMaXN0KSB7Ci0JICAKLQkJLy8gcmVtb3ZlIGV4aXN0aW5nIGFjdGlvbiBjb250cm9scwotCQlDb250cm9sW10gdG9SZW1vdmUgPSBvcGVyYXRpb25zQ29tcG9zaXRlLmdldENoaWxkcmVuKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdG9SZW1vdmUubGVuZ3RoOyBpKyspIHsKLQkJCXRvUmVtb3ZlW2ldLmRpc3Bvc2UoKTsKLQkJfQotCQlMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IHBvbGljeU9wZXJhdGlvbkxpc3RMaXN0ID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zTGlzdChzcExpc3QsIChwcm9qZWN0ID09IG51bGwpKTsKLQotCQlmb3IgKExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5T3BlcmF0aW9uTGlzdCA6IHBvbGljeU9wZXJhdGlvbkxpc3RMaXN0KSB7Ci0JCQlpZiAocG9saWN5T3BlcmF0aW9uTGlzdC5zaXplKCkgPiAwKSB7Ci0JCQlpZiAocG9saWN5T3BlcmF0aW9uTGlzdC5nZXQoMCkuZ2V0T3BlcmF0aW9uS2luZCgpID09IElQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5jb21wbGV4KSB7Ci0JCQkJYWRkQ29tcGxleE9wZXJhdGlvblVJKHBvbGljeU9wZXJhdGlvbkxpc3QsIHNwTGlzdCk7Ci0JCQl9IGVsc2UKLQkJCQlhZGRTZWxlY3Rpb25PcGVyYXRpb25VSShwb2xpY3lPcGVyYXRpb25MaXN0LCBzcExpc3QpOwotCQkJfQotCi0JCX0KLQkJLy8ganVzdCByZW1vdmVkIGFuZCBhZGRlZCBzb21lIGNvbnRyb2xzIHNvIGZvcmNlIGNvbXBvc2l0ZQotCQkvLyB0byByZS1sYXlvdXQgaXQncyBjb250cm9scwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShvcGVyYXRpb25zQ29tcG9zaXRlLmNvbXB1dGVTaXplKAotCQkJCVNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCkpOwotCQlvcGVyYXRpb25zQ29tcG9zaXRlLmxheW91dCgpOwotCX0KLQkvKioKLQkgKiBDcmVhdGVzIFVJIHdpZGdldHMgZm9yIHBvbGljeSBvcGVyYXRpb25zIG9mIGVudW1lcmF0aW9uLCBzZWxlY3Rpb24sIGFuZCAKLQkgKiBpY29uc2VsZWN0aW9uIHR5cGVzCi0JICogQHBhcmFtIHBvIHRoZSBwb2xpY3kgb3BlcmF0aW9uIHRvIGNyZWF0ZSBhIFVJIHdpZGdldCBmb3IKLQkgKiBAcGFyYW0gc3AgdGhlIHNlcnZpY2UgcG9saWNpZXMgdGhpcyBvcGVyYXRpb24gd2lsbCBhcHBseSB0bwotCSAqLwotCXByaXZhdGUgdm9pZCBhZGRTZWxlY3Rpb25PcGVyYXRpb25VSShMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvcywgTGlzdDxJU2VydmljZVBvbGljeT4gc3BzKSB7Ci0JCS8vdXNlIHRoZSBmaXJzdCBvcGVyYXRpb24gaW5zdGFuY2UgaW4gdGhlIGxpc3QgZm9yIGRhdGEKLQkJSVBvbGljeU9wZXJhdGlvbiBwbzAgPSBwb3MuZ2V0KDApOwotCQkvL0lTZXJ2aWNlUG9saWN5IHNwMCA9IHBvcy5nZXQoMCkuZ2V0U2VydmljZVBvbGljeSgpOwotCQlJRGVzY3JpcHRvciBkID0gcG8wLmdldERlc2NyaXB0b3IoKTsKLQkJQ29udHJvbCBzZWxlY3Rpb25Db250cm9sOwotCQlpZiAocG8wLmdldE9wZXJhdGlvbktpbmQoKSA9PSBJUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQuZW51bWVyYXRpb24pIHsKLQkJCUxhYmVsIGwgPSBuZXcgTGFiZWwob3BlcmF0aW9uc0NvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQkJbC5zZXRUZXh0KGQuZ2V0TG9uZ05hbWUoKSArICI6Iik7IC8vJE5PTi1OTFMtMSQKLQkJCUNvbWJvIGNiID0gbmV3IENvbWJvKG9wZXJhdGlvbnNDb21wb3NpdGUsIFNXVC5EUk9QX0RPV04KLQkJCQkJfCBTV1QuUkVBRF9PTkxZKTsKLQkJCXNlbGVjdGlvbkNvbnRyb2wgPSBjYjsKLQkJCWNiLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1JdGVtTGlzdCA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybQotCQkJCQkuZ2V0SW5zdGFuY2UoKS5nZXRTdGF0ZUVudW1lcmF0aW9uKHBvMC5nZXRFbnVtZXJhdGlvbklkKCkpOwotCQkJZm9yIChJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZW51bUl0ZW0gOiBlbnVtSXRlbUxpc3QpIHsKLQkJCQljYi5hZGQoZW51bUl0ZW0uZ2V0TG9uZ05hbWUoKSk7Ci0JCQl9Ci0JCQlsLnNldEVuYWJsZWQocG8wLmlzRW5hYmxlZChzcHMpKTsKLQkJCWNiLnNldEVuYWJsZWQocG8wLmlzRW5hYmxlZChzcHMpKTsKLQkJCWlmIChjYi5pc0VuYWJsZWQoKSkKLQkJCQljYi5zZXRUZXh0KGdldEVudW1lcmF0aW9uT3BlcmF0aW9uQ3VycmVudFNlbGVjdGlvbihwbzApKTsKLQkJfSBlbHNlIHsKLQkJCS8vIGEgc2VsZWN0aW9uIG9yIGljb24KLQkJCUJ1dHRvbiBjaGVja0JveCA9IG5ldyBCdXR0b24ob3BlcmF0aW9uc0NvbXBvc2l0ZSwgU1dULkNIRUNLKTsKLQkJCXNlbGVjdGlvbkNvbnRyb2wgPSBjaGVja0JveDsKLQkJCWNoZWNrQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQkJR3JpZERhdGEgY2hlY2tCb3hHRCA9IG5ldyBHcmlkRGF0YSgpOwotCQkJY2hlY2tCb3hHRC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCQljaGVja0JveC5zZXRMYXlvdXREYXRhKGNoZWNrQm94R0QpOwotCQkJY2hlY2tCb3guc2V0VGV4dChkLmdldExvbmdOYW1lKCkpOwotCQkJY2hlY2tCb3guc2V0RW5hYmxlZChwbzAuaXNFbmFibGVkKHNwcykpOwotCQkJaWYgKGNoZWNrQm94LmlzRW5hYmxlZCgpKQotCQkJCWNoZWNrQm94Ci0JCQkJCQkuc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbk9wZXJhdGlvbkN1cnJlbnRTZWxlY3Rpb24ocG8wKSk7Ci0KLQkJfQotCi0JCXNlbGVjdGlvbkNvbnRyb2wuc2V0RGF0YShuZXcgQWN0aW9uQ29udHJvbERhdGEoc3BzLCBwb3MpKTsKLQotCX0KLQkvKioKLQkgKiBAcGFyYW0gc3AgYSBzZXJ2aWNlIHBvbGljeSB3aXRoIGEgc2VsZWN0aW9uIG9yIGljb25zZWxlY3Rpb24gb3BlcmF0aW9uIGRlZmluZWQKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgc2VsZWN0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gZ2V0U2VsZWN0aW9uT3BlcmF0aW9uQ3VycmVudFNlbGVjdGlvbihJUG9saWN5T3BlcmF0aW9uIHBvKSB7Ci0JCXJldHVybiBwby5nZXRTdGF0ZUl0ZW0ocHJvamVjdCkuZXF1YWxzKCJvcmcuZWNsaXBzZS53c3QudHJ1ZSIpID8gdHJ1ZSA6IGZhbHNlOyAvLyROT04tTkxTLTEkCi0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3AgYSBzZXJ2aWNlIHBvbGljeSB3aXRoIGFuIGVudW1lcmF0aW9uIG9wZXJhdGlvbiBkZWZpbmVkCi0JICogQHJldHVybiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVudW1lcmF0aW9uIGl0ZW0KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRFbnVtZXJhdGlvbk9wZXJhdGlvbkN1cnJlbnRTZWxlY3Rpb24oSVBvbGljeU9wZXJhdGlvbiBwbykgewotCQlTdHJpbmcgY3VycmVudFNlbGVjdGlvbiA9ICIiOyAvLyROT04tTkxTLTEkCi0JCUxpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlbnVtSXRlbUxpc3QgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0KLQkJLmdldEluc3RhbmNlKCkuZ2V0U3RhdGVFbnVtZXJhdGlvbihwby5nZXRFbnVtZXJhdGlvbklkKCkpOwotCQlmb3IgKElTdGF0ZUVudW1lcmF0aW9uSXRlbSBlbnVtSXRlbSA6IGVudW1JdGVtTGlzdCkgewotCQkJaWYgKGVudW1JdGVtLmdldElkKCkuZXF1YWxzKHBvLmdldFN0YXRlSXRlbShwcm9qZWN0KSkpIHsKLQkJCQljdXJyZW50U2VsZWN0aW9uID0gZW51bUl0ZW0uZ2V0TG9uZ05hbWUoKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gY3VycmVudFNlbGVjdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIFVJIHdpZGdldHMgZm9yIHBvbGljeSBvcGVyYXRpb25zIG9mIGNvbXBsZXggdHlwZQotCSAqIEBwYXJhbSBwbyB0aGUgcG9saWN5IG9wZXJhdGlvbiB0byBjcmVhdGUgYSBVSSB3aWRnZXQgZm9yCi0JICogQHBhcmFtIHNwcyB0aGUgc2VydmljZSBwb2xpY2llcyB0aGlzIG9wZXJhdGlvbiB3aWxsIGFwcGx5IHRvCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZENvbXBsZXhPcGVyYXRpb25VSShMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvcywKLQkJCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwcykgewotCQlJUG9saWN5T3BlcmF0aW9uIHBvMCA9IHBvcy5nZXQoMCk7Ci0JCUlEZXNjcmlwdG9yIGQgPSBwbzAuZ2V0RGVzY3JpcHRvcigpOwotCQlCdXR0b24gcHVzaEJ1dHRvbiA9IG5ldyBCdXR0b24ob3BlcmF0aW9uc0NvbXBvc2l0ZSwgU1dULlBVU0gpOwotCQlHcmlkRGF0YSBwdXNoQnV0dG9uR0QgPSBuZXcgR3JpZERhdGEoKTsKLQkJcHVzaEJ1dHRvbkdELmhvcml6b250YWxTcGFuID0gMjsKLQkJcHVzaEJ1dHRvbi5zZXRMYXlvdXREYXRhKHB1c2hCdXR0b25HRCk7Ci0JCXB1c2hCdXR0b24uc2V0VGV4dChkLmdldExvbmdOYW1lKCkpOwotCQlwdXNoQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQlwdXNoQnV0dG9uLnNldERhdGEobmV3IEFjdGlvbkNvbnRyb2xEYXRhKHNwcywgcG9zKSk7Ci0JCXB1c2hCdXR0b24uc2V0RW5hYmxlZChwbzAuaXNFbmFibGVkKHNwcykpOwotICAKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLyAgCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdGhlIGVycm9yIHRoYXQgc2hvdWxkIGJlIHNob3duLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmFsaWRhdGlvbiBlcnJvcnMsCi0JICogcmV0dXJuIHRoZSB2YWxpZGF0aW9uIGVycm9yIGZvciBhIHNlcnZpY2UgcG9saWN5IHRoYXQganVzdCBjaGFuZ2VzIHN0YXRlIChvZnRlbiB0aGUKLQkgKiBzZWxlY3RlZCBzZXJ2aWNlIHBvbGljeSkKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBnZXRFcnJvcigpIHsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFN0YXRlQ2hhbmdlTGlzdGVuZXIgaW1wbGVtZW50cyBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcgotCXsKLSAgICBwdWJsaWMgdm9pZCBwb2xpY3lTdGF0ZUNoYW5nZShJU2VydmljZVBvbGljeSBwb2xpY3ksIFN0cmluZyBrZXksIFN0cmluZyBvbGRWYWx1ZSwgU3RyaW5nIG5ld1ZhbHVlKQotICAgIHsKLSAgICAgIC8vIFdlIGFyZSBub3QgZW5hYmxlZCBmb3Igc3RhdGUgY2hhbmdlIGV2ZW50cyBzbyB3ZSB3aWxsIGlnbm9yZSB0aGlzIGV2ZW50LgotICAgICAgaWYoICFzdGF0ZUNoYW5nZUVuYWJsZWQgKSByZXR1cm47Ci0gICAgICAKLSAgICAgIGVycm9yID0gdmFsaWRhdGVBbGxQb2xpY2llcyggcG9saWN5ICk7Ci0gICAgICAKLSAgICAgIC8vaW5mb3JtIGxpc3RlbmVycyB0aGF0IGEgY29udHJvbCBoYXMgY2hhbmdlZCwgYXMgY29tcG9zaXRlIG1heSBiZSBpbiBlcnJvciBub3cKLSAgICAgIGxpc3RlbmVyLndpZGdldFNlbGVjdGVkKCBudWxsICk7Ci0gICAgfQkgIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWQxYTk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nIG9mIHNlcnZpY2UgcG9saWN5Ci0gKiAyMDA4MDEwOSAgIDIxMzQ5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDMyNSAgIDIyMjA5NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUG9saWN5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb25JbmZvOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsCi17Ci0gIHByaXZhdGUgTWFwPFN0cmluZywgQmFzZU9wZXJhdGlvbkltcGw+ICAgICAgICAgICAgIGJhc2VPcGVyYXRpb25NYXA7Ci0gIHByaXZhdGUgTWFwPElTZXJ2aWNlUG9saWN5LCBTZXQ8SVBvbGljeU9wZXJhdGlvbj4+IHBvbGljeUNhY2hlOwotICBwcml2YXRlIE1hcDxTdHJpbmcsTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPj4gICAgICBxdWlja0ZpeGVzOwotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJSW1wbCgpCi0gIHsKLSAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICBwbGF0Zm9ybSAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICBTZXJ2aWNlUG9saWN5UmVnaXN0cnlVSSByZWdpc3RyeSAgPSBuZXcgU2VydmljZVBvbGljeVJlZ2lzdHJ5VUkoKTsKLSAgICBTZXQ8U3RyaW5nPiAgICAgICAgICAgICBwb2xpY3lJZHMgPSBwbGF0Zm9ybS5nZXRBbGxQb2xpY3lJZHMoKTsKLSAgICAKLSAgICBiYXNlT3BlcmF0aW9uTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCYXNlT3BlcmF0aW9uSW1wbD4oKTsKLSAgICBwb2xpY3lDYWNoZSAgICAgID0gbmV3IEhhc2hNYXA8SVNlcnZpY2VQb2xpY3ksIFNldDxJUG9saWN5T3BlcmF0aW9uPj4oKTsKLSAgICBxdWlja0ZpeGVzICAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+PigpOwotICAgIHJlZ2lzdHJ5LmxvYWQoIGJhc2VPcGVyYXRpb25NYXAsIHF1aWNrRml4ZXMgKTsKLSAgICBjcmVhdGVPcGVyYXRpb25DYWNoZSggcG9saWN5SWRzICk7Ci0gICAgCi0gICAgcGxhdGZvcm0uYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lciggbmV3IENoaWxkTGlzdGVuZXIoKSwgZmFsc2UgKTsKLSAgfQotICAgICAgCi0gIHB1YmxpYyBMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+IGdldFF1aWNrRml4ZXMoIElTdGF0dXMgc3RhdHVzICkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgcGx1Z2luSWQgPSBzdGF0dXMuZ2V0UGx1Z2luKCk7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICBjb2RlICAgICA9IHN0YXR1cy5nZXRDb2RlKCk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICBrZXkgICAgICA9IHBsdWdpbklkICsgIjoiICsgY29kZTsgLy8kTk9OLU5MUy0xJAotICAgIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gcmVzdWx0ICAgPSBxdWlja0ZpeGVzLmdldCgga2V5ICk7Ci0gICAgCi0gICAgaWYoIHJlc3VsdCA9PSBudWxsICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPElRdWlja0ZpeEFjdGlvbkluZm8+KCk7Ci0gICAgICBxdWlja0ZpeGVzLnB1dCgga2V5LCByZXN1bHQgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gZ2V0QWxsT3BlcmF0aW9ucygpCi0gIHsKLSAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvbnMgPSBuZXcgVmVjdG9yPElQb2xpY3lPcGVyYXRpb24+KCk7Ci0gICAgCi0gICAgZm9yKCBTZXQ8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9uU2V0IDogcG9saWN5Q2FjaGUudmFsdWVzKCkgKQotICAgIHsKLSAgICAgIG9wZXJhdGlvbnMuYWRkQWxsKCBvcGVyYXRpb25TZXQgKTsgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gb3BlcmF0aW9uczsKLSAgfQotICAKLSAgcHVibGljIFNldDxJUG9saWN5T3BlcmF0aW9uPiBnZXRPcGVyYXRpb25zRm9yUG9saWN5KCBJU2VydmljZVBvbGljeSBwb2xpY3ksIGJvb2xlYW4gaXNXb3Jrc3BhY2UgKQotICB7Ci0gICAgU2V0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeU9wZXJhdGlvbnMgICA9IHBvbGljeUNhY2hlLmdldCggcG9saWN5ICk7Ci0gICAgU2V0PElQb2xpY3lPcGVyYXRpb24+IHJlc3VsdCAgICAgICAgICAgICA9IG5ldyBIYXNoU2V0PElQb2xpY3lPcGVyYXRpb24+KCk7Ci0gICAgCi0gICAgaWYoIHBvbGljeU9wZXJhdGlvbnMgIT0gbnVsbCApCi0gICAgewotICAgICAgcmVzdWx0LmFkZEFsbCggcG9saWN5T3BlcmF0aW9ucyApOyAgCi0gICAgCi0gICAgICBpZiggIWlzV29ya3NwYWNlICkKLSAgICAgIHsKLSAgICAgICAgZm9yKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiA6IHBvbGljeU9wZXJhdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIG9wZXJhdGlvbi5pc1dvcmtzcGFjZU9ubHkoKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0LnJlbW92ZSggb3BlcmF0aW9uICk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGdldE9wZXJhdGlvbnNMaXN0KCBMaXN0PElTZXJ2aWNlUG9saWN5PiBwb2xpY2llcywgYm9vbGVhbiBpc1dvcmtzcGFjZSApCi0gIHsKLSAgICBNYXA8U3RyaW5nLCBMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBvcGVyYXRpb25NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+KCk7Ci0gICAgCi0gICAgZm9yKCBJU2VydmljZVBvbGljeSBwb2xpY3kgOiBwb2xpY2llcyApCi0gICAgewotICAgICAgU2V0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvbnMgPSBwb2xpY3lDYWNoZS5nZXQoIHBvbGljeSApOwotCi0gICAgICBpZiggb3BlcmF0aW9ucyAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZm9yKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBpZCAgICAgICAgPSBvcGVyYXRpb24uZ2V0SWQoKTsKLSAgICAgICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGVudHJ5TGlzdCA9IG9wZXJhdGlvbk1hcC5nZXQoIGlkICk7Ci0gICAgICAgIAotICAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBhZGQgdGhpcyBvcGVyYXRpb24gaWYgaXQgaXMgZm9yIHRoZSB3b3Jrc3BhY2UgcHJlZmVyZW5jZSBwYWdlIG9yCi0gICAgICAgICAgLy8gaWYgd2UgYXJlIG9uIHRoZSBwcm9qZWN0IHByZWZlcmVuY2UgcGFnZSBhbmQgdGhlIG9wZXJhdGlvbiBpcyBub3Qgb25seQotICAgICAgICAgIC8vIGZvciB0aGUgd29ya3NwYWNlIGxldmVsLgotICAgICAgICAgIGlmKCBpc1dvcmtzcGFjZSB8fCAhb3BlcmF0aW9uLmlzV29ya3NwYWNlT25seSgpICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiggZW50cnlMaXN0ID09IG51bGwgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBlbnRyeUxpc3QgPSBuZXcgVmVjdG9yPElQb2xpY3lPcGVyYXRpb24+KCk7Ci0gICAgICAgICAgICAgIG9wZXJhdGlvbk1hcC5wdXQoIGlkLCBlbnRyeUxpc3QgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBlbnRyeUxpc3QuYWRkKCBvcGVyYXRpb24gKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5ldyBWZWN0b3I8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4oIG9wZXJhdGlvbk1hcC52YWx1ZXMoKSApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgY3JlYXRlT3BlcmF0aW9uQ2FjaGUoIFNldDxTdHJpbmc+IHBvbGljeUlkcyApCi0gIHsKLSAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgICAgICBwbGF0Zm9ybSAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgQ29sbGVjdGlvbjxCYXNlT3BlcmF0aW9uSW1wbD4gb3BlcmF0aW9ucyA9IGJhc2VPcGVyYXRpb25NYXAudmFsdWVzKCk7Ci0gICAgCi0gICAgZm9yKCBCYXNlT3BlcmF0aW9uSW1wbCBvcGVyYXRpb24gOiBvcGVyYXRpb25zICkKLSAgICB7Ci0gICAgICBTdHJpbmcgIHBvbGljeVBhdHRlcm4gPSBvcGVyYXRpb24uZ2V0UG9saWN5SWRQYXR0ZXJuKCk7Ci0gICAgICBQYXR0ZXJuIHBhdHRlcm4gICAgICAgPSBQYXR0ZXJuLmNvbXBpbGUoIHBvbGljeVBhdHRlcm4gKTsKLSAgICAgIAotICAgICAgZm9yKCBTdHJpbmcgcG9saWN5SWQgOiBwb2xpY3lJZHMgKQotICAgICAgewotICAgICAgICBNYXRjaGVyIG1hdGNoZXIgPSBwYXR0ZXJuLm1hdGNoZXIoIHBvbGljeUlkICk7Ci0gICAgICAgIAotICAgICAgICBpZiggbWF0Y2hlci5tYXRjaGVzKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIHBvbGljeSAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCBwb2xpY3lJZCApOwotICAgICAgICAgIFNldDxJUG9saWN5T3BlcmF0aW9uPiBvcGVyYXRpb25zU2V0ID0gcG9saWN5Q2FjaGUuZ2V0KHBvbGljeSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIG9wZXJhdGlvbnNTZXQgPT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgb3BlcmF0aW9uc1NldCA9IG5ldyBIYXNoU2V0PElQb2xpY3lPcGVyYXRpb24+KCk7Ci0gICAgICAgICAgICBwb2xpY3lDYWNoZS5wdXQoIHBvbGljeSwgb3BlcmF0aW9uc1NldCApOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBvcGVyYXRpb25zU2V0LmFkZCggbmV3IFBvbGljeU9wZXJhdGlvbkltcGwoIG9wZXJhdGlvbiwgcG9saWN5ICkgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgQ2hpbGRMaXN0ZW5lciBpbXBsZW1lbnRzIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCBjaGlsZENoYW5nZShMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGlsZExpc3QsIExpc3Q8Qm9vbGVhbj4gYWRkZWRMaXN0KQotICAgIHsKLSAgICAgIFNldDxTdHJpbmc+IGlkU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRMaXN0LnNpemUoKTsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIElTZXJ2aWNlUG9saWN5IHBvbGljeSA9IGNoaWxkTGlzdC5nZXQoIGluZGV4ICk7Ci0gICAgICAgIGJvb2xlYW4gICAgICAgIGFkZGVkICA9IGFkZGVkTGlzdC5nZXQoIGluZGV4ICk7Ci0gICAgICAgIAotICAgICAgICBpZiggYWRkZWQgKQotICAgICAgICB7Ci0gICAgICAgIAotICAgICAgICAgIGlkU2V0LmFkZCggcG9saWN5LmdldElkKCkgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwb2xpY3lDYWNoZS5yZW1vdmUoIHBvbGljeSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmKCBpZFNldC5zaXplKCkgPiAwICkKLSAgICAgIHsKLSAgICAgICAgY3JlYXRlT3BlcmF0aW9uQ2FjaGUoIGlkU2V0ICk7Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UmVnaXN0cnlVSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UmVnaXN0cnlVSS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjFmNjg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVJlZ2lzdHJ5VUkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscy5SZWdpc3RyeVV0aWxzOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeVJlZ2lzdHJ5VUkKLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVklDRV9QT0xJQ1lfSUQgPSBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuUExVR0lOX0lEICsgIi5zZXJ2aWNlcG9saWN5dWkiOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgU2VydmljZVBvbGljeVJlZ2lzdHJ5VUkoKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxvYWQoIE1hcDxTdHJpbmcsIEJhc2VPcGVyYXRpb25JbXBsPiBvcGVyYXRpb25NYXAsIE1hcDxTdHJpbmcsIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4+IHF1aWNrRml4ZXMgKQotICB7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihTRVJWSUNFX1BPTElDWV9JRCk7Ci0gICAgCi0gICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA6IGVsZW1lbnRzICkKLSAgICB7Ci0gICAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBlbGVtZW50LmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgCi0gICAgICBpZiggZWxlbWVudE5hbWUuZXF1YWxzKCAic2VydmljZXBvbGljeXVpIikgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNoaWxkcmVuID0gZWxlbWVudC5nZXRDaGlsZHJlbigpOwotICAgICAgICAKLSAgICAgICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGQgOiBjaGlsZHJlbiApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbmFtZSA9IGNoaWxkLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBuYW1lLmVxdWFscyggIm9wZXJhdGlvbiIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkU2VydmljZVBvbGljeXVpKCBjaGlsZCwgb3BlcmF0aW9uTWFwICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAicXVpY2tmaXgiKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUXVpY2tGaXgoIGNoaWxkLCBxdWlja0ZpeGVzICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvciggIlVuZGVmaW5lZCBzZXJ2aWNlIHBvbGljeSB1aSBlbGVtZW50LCAiICsgbmFtZSArICIgZm91bmQuIiApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXJyb3IoICJVbmRlZmluZWQgc2VydmljZSBwb2xpY3kgdWkgZWxlbWVudCwgIiArIGVsZW1lbnROYW1lICsgIiBmb3VuZC4iICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgIH0gCi0gIH0KLSAgIAotICBwcml2YXRlIHZvaWQgbG9hZFNlcnZpY2VQb2xpY3l1aSggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBCYXNlT3BlcmF0aW9uSW1wbD4gb3BlcmF0aW9uTWFwICkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgImlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybiAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAicG9saWN5cGF0dGVybiIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZU9ubHkgICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgIndvcmtzcGFjZW9ubHkiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICB1c2VEZWZhdWx0U3RyaW5nID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJkZWZhdWx0ZGF0YSIgKTsgLy8kTk9OLU5MUy0xJAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNoaWxkcmVuICAgICAgICAgPSBlbGVtZW50LmdldENoaWxkcmVuKCk7Ci0gICAgSURlc2NyaXB0b3IgICAgICAgICAgICAgZGVzY3JpcHRvciAgICAgICA9IG51bGw7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgZW51bUlkICAgICAgICAgICA9IG51bGw7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgZGVmYXVsdEl0ZW0gICAgICA9IG51bGw7Ci0gICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICAgICAgICA9IGZhbHNlOwotICAgIGJvb2xlYW4gICAgICAgICAgICAgICAgIGljb24gICAgICAgICAgICAgPSBmYWxzZTsKLSAgICBib29sZWFuICAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdCAgICAgID0gZmFsc2U7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50ICAgZW5hYmxlZEVsZW1lbnQgICA9IG51bGw7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50ICAgbGF1bmNoRWxlbWVudCAgICA9IG51bGw7Ci0gICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgZXJyb3IgICAgICAgICAgICA9IGZhbHNlOwotICAgIGJvb2xlYW4gICAgICAgICAgICAgICAgIHVzZURlZmF1bHREYXRhICAgPSB0cnVlOwotICAgIAotICAgIGlmKCB1c2VEZWZhdWx0U3RyaW5nICE9IG51bGwgKQotICAgIHsKLSAgICAgIHVzZURlZmF1bHREYXRhID0gdXNlRGVmYXVsdFN0cmluZy5lcXVhbHMoICJ0cnVlIiApOyAgIC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGQgOiBjaGlsZHJlbiApCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBjaGlsZC5nZXROYW1lKCkudG9Mb3dlckNhc2UoKTsKLSAgICAgIAotICAgICAgaWYoIG5hbWUuZXF1YWxzKCAiZGVzY3JpcHRvciIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgZGVzY3JpcHRvciA9IFJlZ2lzdHJ5VXRpbHMubG9hZERlc2NyaXB0b3IoIGNoaWxkICk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBuYW1lLmVxdWFscyggImVudW1lcmF0aW9uIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBlbnVtSWQgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggY2hpbGQsICJpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBkZWZhdWx0SXRlbSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgImRlZmF1bHRpdGVtIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICBpZiggZW51bUlkID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3IoICJTZXJ2aWNlIHBvbGljeSB1aSBlbnVtZXJhdGlvbiBlbGVtZW50IGlzIG1pc3NpbmcgaWQgYXR0cmlidXRlLiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgfSAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAic2VsZWN0aW9uIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBTdHJpbmcgaWNvblZhbHVlID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGNoaWxkLCAiaWNvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAKLSAgICAgICAgc2VsZWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYoIGljb25WYWx1ZSAhPSBudWxsICYmIGljb25WYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCAidHJ1ZSIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIGljb24gPSB0cnVlOwotICAgICAgICAgIHVzZURlZmF1bHREYXRhID0gdHJ1ZTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBuYW1lLmVxdWFscyggImNvbXBsZXgiICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBsYXVuY2hDbGFzcyA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgImxhdW5jaGNsYXNzIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICBpZiggbGF1bmNoQ2xhc3MgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IHVpIGVudW1lcmF0aW9uIGVsZW1lbnQgaXMgbWlzc2luZyBpZCBhdHRyaWJ1dGUuIiApOyAgICAgICAgICAgICAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGxhdW5jaEVsZW1lbnQgPSBjaGlsZDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAiZW5hYmxlZCIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG11bHRpU2VsZWN0VmFsdWUgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggY2hpbGQsICJtdWx0aXNlbGVjdCIgKS50b0xvd2VyQ2FzZSgpOyAvLyROT04tTkxTLTEkCi0gICAgICAgCi0gICAgICAgIGlmKCBtdWx0aVNlbGVjdFZhbHVlICE9IG51bGwgJiYgbXVsdGlTZWxlY3RWYWx1ZS5lcXVhbHMoICJ0cnVlIiApKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aVNlbGVjdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAKLSAgICAgICAgU3RyaW5nIGVuYWJsZWRDbGFzcyA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgImVuYWJsZWRjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAKLSAgICAgICAgaWYoIGVuYWJsZWRDbGFzcyAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGVuYWJsZWRFbGVtZW50ID0gY2hpbGQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IHVpIGVsZW1lbnQsICIgKyBuYW1lICsgIiBmb3VuZC4iICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCBkZXNjcmlwdG9yID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGVsZW1lbnQgbXVzdCBoYXZlIGEgZGVzY3JpcHRvciBlbGVtZW50IGRlZmluZWQuIiApOyAgIC8vJE5PTi1OTFMtMSQKLSAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIGlkID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiSWQgYXR0cmlidXRlIG5vdCBzcGVjaWZpZWQgaW4gc2VydmljZSBwb2xpY3kgdWkgb3BlcmF0aW9uIGVsZW1lbnQuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICBlcnJvciA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmKCBwb2xpY3lQYXR0ZXJuID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiSWQgYXR0cmlidXRlIG5vdCBzcGVjaWZpZWQgaW4gc2VydmljZSBwb2xpY3kgdWkgb3BlcmF0aW9uIGVsZW1lbnQuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICBlcnJvciA9IHRydWU7ICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYoICggZW51bUlkID09IG51bGwgJiYgIXNlbGVjdGlvbiAmJiBsYXVuY2hFbGVtZW50ID09IG51bGwpICB8fAotICAgICAgICAoIGVudW1JZCAhPSBudWxsICYmIChzZWxlY3Rpb24gfHwgbGF1bmNoRWxlbWVudCAhPSBudWxsKSkgfHwKLSAgICAgICAgKCBzZWxlY3Rpb24gJiYgKGVudW1JZCAhPSBudWxsIHx8IGxhdW5jaEVsZW1lbnQgIT0gbnVsbCkpIHx8Ci0gICAgICAgICggbGF1bmNoRWxlbWVudCAhPSBudWxsICYmIChzZWxlY3Rpb24gJiYgZW51bUlkICE9IG51bGwpKSkKLSAgICB7Ci0gICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBlbGVtZW50IG11c3QgaGF2ZSBlaXRoZXIgYW4gZW51bWVyYXRpb24gZWxlbWVudCBvciBhIHNlbGVjdGlvbiBlbGVtZW50IG9yIGEgY29tcGxleCBlbGVtZW50IiApOyAvLyROT04tTkxTLTEkCi0gICAgICBlcnJvciA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmKCAhIGVycm9yICkKLSAgICB7Ci0gICAgICBCYXNlT3BlcmF0aW9uSW1wbCBvcGVyYXRpb24gICAgICAgICAgPSBuZXcgQmFzZU9wZXJhdGlvbkltcGwoKTsKLSAgICAgIGJvb2xlYW4gICAgICAgICAgIHdvcmtzcGFjZU9ubHlWYWx1ZSA9IHdvcmtzcGFjZU9ubHkgIT0gbnVsbCAmJiB3b3Jrc3BhY2VPbmx5LmVxdWFscyggInRydWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgb3BlcmF0aW9uLnNldElkKCBpZCApOwotICAgICAgb3BlcmF0aW9uLnNldFBvbGljeUlkUGF0dGVybiggcG9saWN5UGF0dGVybiApOwotICAgICAgb3BlcmF0aW9uLnNldERlc2NyaXB0b3IoIGRlc2NyaXB0b3IgKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRNdWx0aVNlbGVjdCggbXVsdGlTZWxlY3QgKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRFbnVtZXJhdGlvbklkKCBlbnVtSWQgKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRXb3Jrc3BhY2VPbmx5KCB3b3Jrc3BhY2VPbmx5VmFsdWUgKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRVc2VEZWZhdWx0RGF0YSggdXNlRGVmYXVsdERhdGEgKTsKLSAgICAgIAotICAgICAgaWYoIGRlZmF1bHRJdGVtICE9IG51bGwgKQotICAgICAgewotICAgICAgICBvcGVyYXRpb24uc2V0RGVmYXVsdEl0ZW0oIGRlZmF1bHRJdGVtICk7ICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIHNlbGVjdGlvbiApCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRFbnVtZXJhdGlvbklkKCAib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIG9wZXJhdGlvbi5zZXRTZWxlY3Rpb24oIGljb24gKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIGxhdW5jaEVsZW1lbnQgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRDb21wbGV4RWxlbWVudCggbGF1bmNoRWxlbWVudCApOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiggZW5hYmxlZEVsZW1lbnQgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRFbmFibGVkRWxlbWVudCggZW5hYmxlZEVsZW1lbnQgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgb3BlcmF0aW9uTWFwLnB1dCggaWQsIG9wZXJhdGlvbiApOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRRdWlja0ZpeCggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIE1hcDxTdHJpbmcsIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4+IHF1aWNrRml4ZXMgKQotICB7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gICBjaGlsZHJlbiA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oICJhY3Rpb24iICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgIHBsdWdpbklkID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJwbHVnaW5pZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgY29kZSAgICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgImNvZGUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+IGZpeExpc3QgID0gbmV3IFZlY3RvcjxJUXVpY2tGaXhBY3Rpb25JbmZvPigpOwotICAgIAotICAgIGZvciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkIDogY2hpbGRyZW4gKQotICAgIHsKLSAgICAgIGxvYWRBY3Rpb24oIGNoaWxkLCBmaXhMaXN0ICk7Ci0gICAgfQotICAgIAotICAgIGlmKCBwbHVnaW5JZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIk1pc3NpbmcgcGx1Z2luSWQgYXR0cmlidXRlIGZvciBTZXJ2aWNlIHBvbGljeSBVSSBxdWljayBmaXggZXh0ZW5zaW9uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmKCBjb2RlID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiTWlzc2luZyBjb2RlIGF0dHJpYnV0ZSBmb3IgU2VydmljZSBwb2xpY3kgVUkgcXVpY2sgZml4IGV4dGVuc2lvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiggZml4TGlzdC5zaXplKCkgPT0gMCApCi0gICAgewotICAgICAgZXJyb3IoICJNaXNzaW5nIGFjdGlvbiBlbGVtZW50IGZvciBTZXJ2aWNlIHBvbGljeSBVSSBxdWljayBmaXggZXh0ZW5zaW9uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFN0cmluZyBrZXkgPSBwbHVnaW5JZCArICI6IiArIGNvZGU7IC8vJE5PTi1OTFMtMSQKLSAgICBxdWlja0ZpeGVzLnB1dCgga2V5LCBmaXhMaXN0ICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkQWN0aW9uKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPiBmaXhMaXN0ICkKLSAgewotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGRlc2NFbGVtID0gZWxlbWVudC5nZXRDaGlsZHJlbiggImRlc2NyaXB0b3IiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICBjbGF6eiAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiY2xhc3MiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBpZiggZGVzY0VsZW0gPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJNaXNzaW5nIGRlc2NyaXB0b3IgZWxlbWVudCBmb3IgU2VydmljZSBwb2xpY3kgVUkgcXVpY2sgZml4IGV4dGVuc2lvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuOyAgICAgIAotICAgIH0KLSAgICAKLSAgICBpZiggY2xhenogPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJNaXNzaW5nIGNsYXNzIGF0dHJpYnV0ZSBmb3IgU2VydmljZSBwb2xpY3kgVUkgcXVpY2sgZml4IGV4dGVuc2lvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuOyAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIElEZXNjcmlwdG9yICAgICAgICAgICAgZGVzY3JpcHRvciA9IFJlZ2lzdHJ5VXRpbHMubG9hZERlc2NyaXB0b3IoIGVsZW1lbnQgKTsKLSAgICBRdWlja0ZpeEFjdGlvbkluZm9JbXBsIGFjdGlvbiAgICAgPSBuZXcgUXVpY2tGaXhBY3Rpb25JbmZvSW1wbCggZWxlbWVudCwgZGVzY3JpcHRvciApOwotICAgIAotICAgIGZpeExpc3QuYWRkKCBhY3Rpb24gKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGVycm9yKCBTdHJpbmcgbWVzc2FnZSApCi0gIHsKLSAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkubG9nRXJyb3IoIG1lc3NhZ2UsIG51bGwgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyODYzYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNSAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEwNyAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0gKiAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICogMjAwNzEyMTIgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgV3N0U1BVSVBsdWdpbk1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkuV3N0U1BVSVBsdWdpbk1lc3NhZ2VzIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdzdFNQVUlQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRVBPTElDSUVTX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNJRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QU1BfREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QU1BfREVQRU5ERU5DSUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFNQX1RSRUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QU1BfREVUQUlMU1RSRUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ0lFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DWV9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTX05PTkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTElOS19DT05GSUdXT1JLU1BBQ0VfU0VUVElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRU5BQkxFX1BST0pFQ1RfU0VUVElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfUUZMSU5LOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFWFRfUUZJWF9OT1NVRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBURVhUX0RFVEFJTFM7Ci0KLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYzVlNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MTAyNSAxOTY5OTcgICBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzCi0jIDIwMDcxMTA3IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSMgMjAwNzExMjAgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSMgMjAwNzEyMTIgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBTZXJ2aWNlIFBvbGljaWVzIFByZWZlcmVuY2UgcGFnZQotIwotCi1MQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVTQ1JJUFRJT049RGVzY3JpcHRpb246Ci1MQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTPURlcGVuZGVuY2llczoKLSNleGFtcGxlIG1lc3NhZ2UgYmVsb3cgaXMgQ29tcGxpYW5jZSBsZXZlbCAiU3VnZ2VzdCBjb21wbGlhbmNlIiByZXF1aXJlcyBXUy1JIEFQIDEuMCAgWyBzdWdnZXN0fGlnbm9yZSBdCi1TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTPXswfSBcInsxfVwiIHJlcXVpcmVzIHsyfSB7M30gW3s0fV0KLSNleGFtcGxlIG1lc3NhZ2UgYmVsb3cgaXMgV1MtSSBTU0JQIENvbXBsaWFuY2UgbGV2ZWwgIlN1Z2dlc3QgY29tcGxpYW5jZSIgcmVxdWlyZXMgV1MtSSBBUCAxLjAgIFsgc3VnZ2VzdHxpZ25vcmUgXQotU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ1lfRVJST1I9IHswfSB7MX0gXCJ7Mn1cIiByZXF1aXJlcyB7M30gezR9IFt7NX1dCi1TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTX05PTkU9Tm9uZQotVE9PTFRJUF9QU1BfREVTQ1JJUFRJT049RGVzY3JpcHRpb24gb2Ygc2VsZWN0ZWQgdHJlZSBub2RlCi1UT09MVElQX1BTUF9ERVBFTkRFTkNJRVM9RGVwZW5kZW5jaWVzIG9mIHNlbGVjdGVkIHRyZWUgbm9kZQotVE9PTFRJUF9QU1BfVFJFRT1TZWxlY3QgYSB0cmVlIG5vZGUgYW5kIHVzZSB0aGUgcGFuZWwgb24gdGhlIHJpZ2h0IHRvIGRlZmluZSByZWxhdGVkIHByZWZlcmVuY2VzCi1UT09MVElQX1BTUF9ERVRBSUxTVFJFRT1TZWxlY3QgYSB0cmVlIG5vZGUgYW5kIHVzZSB0aGUgcGFuZWwgYmVsb3cgdG8gZGVmaW5lIHJlbGF0ZWQgcHJlZmVyZW5jZXMKLUxBQkVMX1FGTElOSz1RdWljayBGaXgKLVRFWFRfUUZJWF9OT1NVRz1ObyBTdWdnZXN0aW9ucy4gU2VlIHRoZSBlcnJvciBtZXNzYWdlIGFuZCBhbnkgbGlzdGVkIGRlcGVuZGVuY2llcyBmb3IgezF9IHRvIHJlc29sdmUgdGhlIGVycm9yLgotVEVYVF9ERVRBSUxTPWRldGFpbHMKLUxJTktfQ09ORklHV09SS1NQQUNFX1NFVFRJTkdTPUNvbmZpZ3VyZSBXb3Jrc3BhY2UgU2V0dGluZ3MuLi4KLUxBQkVMX0VOQUJMRV9QUk9KRUNUX1NFVFRJTkdTPUVuYWJsZSBwcm9qZWN0IHNwZWNpZmljIHNldHRpbmdzCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJlZmVyZW5jZXMvU2VydmljZVBvbGljaWVzUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJlZmVyZW5jZXMvU2VydmljZVBvbGljaWVzUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3MDY0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3ByZWZlcmVuY2VzL1NlcnZpY2VQb2xpY2llc1ByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI1IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqIDIwMDcxMTA3IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqIDIwMDcxMTIwICAgMjA5ODU4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIEVuaGFuY2luZyBzZXJ2aWNlIHBvbGljeSBmcmFtZXdvcmsgYW5kIFVJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljaWVzUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzCi0JCUlXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSwgU2VsZWN0aW9uTGlzdGVuZXIKLQotewotCVNlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZSBwcmVmZXJlbmNlUGFnZTsKLQlDb21wb3NpdGUgc3VwZXJQYXJlbnQ7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFHRV9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZSI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIENyZWF0ZXMgcHJlZmVyZW5jZSBwYWdlIGNvbnRyb2xzIG9uIGRlbWFuZC4KLQkgKiAKLQkgKiBAcGFyYW0gcGFyZW50Q29tcG9zaXRlCi0JICogICAgICAgICAgICB0aGUgcGFyZW50IGZvciB0aGUgcHJlZmVyZW5jZSBwYWdlCi0JICovCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KSB7Ci0JCXByZWZlcmVuY2VQYWdlID0gbmV3IFNlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZShzdXBlcnBhcmVudCwgbnVsbCwgdGhpcyk7Ci0JCW9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7Ci0JCXRoaXMuc3VwZXJQYXJlbnQgPSBzdXBlcnBhcmVudDsKLQkJcmV0dXJuIHByZWZlcmVuY2VQYWdlOwotCi0JfQotCi0JLyoqCi0JICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKSB7Ci0JCXByZWZlcmVuY2VQYWdlLnBlcmZvcm1EZWZhdWx0cygpOwotCQlJU3RhdHVzIGVycm9yID0gcHJlZmVyZW5jZVBhZ2UuZ2V0RXJyb3IoKTsKLQkJaWYgKGVycm9yID09IG51bGwpIHsKLQkJCXN1cGVyLnNldFZhbGlkKHRydWUpOwotCQkJc3VwZXIuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQl9IGVsc2UgewotCQkJc3VwZXIuc2V0RXJyb3JNZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSk7Ci0JCQlzdXBlci5zZXRWYWxpZChmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICogCi0JICogQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpIHsKLQkJc3RvcmVWYWx1ZXMoKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkgewotCQlTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKS5jb21taXRDaGFuZ2VzKCk7Ci0JfQotCi0JLyoqCi0JICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENhbmNlbCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0JICovCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybUNhbmNlbCgpIHsKLQkJU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCkuZGlzY2FyZENoYW5nZXMoKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqIAotCSAqLwotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpIHsKLQkJc3RvcmVWYWx1ZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0JICovCi0JcHVibGljIGJvb2xlYW4gb2tUb0xlYXZlKCkgewotCQlyZXR1cm4gcHJlZmVyZW5jZVBhZ2UuZ2V0RXJyb3IoKSA9PSBudWxsOwotCi0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCQlwcmVmZXJlbmNlUGFnZS5kaXNwb3NlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJSVN0YXR1cyBlcnJvciA9IHByZWZlcmVuY2VQYWdlLmdldEVycm9yKCk7Ci0JCWlmIChlcnJvciA9PSBudWxsKSB7Ci0JCQlzdXBlci5zZXRWYWxpZCh0cnVlKTsKLQkJCXN1cGVyLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJfSBlbHNlIHsKLQkJCXN1cGVyLnNldEVycm9yTWVzc2FnZShlcnJvci5nZXRNZXNzYWdlKCkpOwotCQkJc3VwZXIuc2V0VmFsaWQoZmFsc2UpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJvcGVydGllcy9TZXJ2aWNlUG9saWNpZXNQcm9wZXJ0eVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJvcGVydGllcy9TZXJ2aWNlUG9saWNpZXNQcm9wZXJ0eVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNhMGFmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3Byb3BlcnRpZXMvU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTA3IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqIDIwMDcxMTA4IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqIDIwMDcxMTIwICAgMjA5ODU4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIEVuaGFuY2luZyBzZXJ2aWNlIHBvbGljeSBmcmFtZXdvcmsgYW5kIFVJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByb3BlcnRpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuQ29udHJvbEVuYWJsZVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5QcmVmZXJlbmNlc1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5Qcm9wZXJ0eVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkuV3N0U1BVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcmVmZXJlbmNlcy5TZXJ2aWNlUG9saWNpZXNQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWNpZXNQcm9wZXJ0eVBhZ2UgZXh0ZW5kcyBQcm9wZXJ0eVBhZ2UgaW1wbGVtZW50cwotCQlTZWxlY3Rpb25MaXN0ZW5lciB7Ci0KLQlwcml2YXRlIFNlcnZpY2VQb2xpY2llc0NvbXBvc2l0ZSBwcm9wZXJ0eVBhZ2U7Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBR0VfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcm9wZXJ0aWVzLldTSUNvbXBsaWFuY2VQcm9wZXJ0eVBhZ2UiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBCdXR0b24gZlVzZVByb2plY3RTZXR0aW5nczsKLQlwcml2YXRlIExpbmsgZkNoYW5nZVdvcmtzcGFjZVNldHRpbmdzOwotCXByaXZhdGUgQ29udHJvbEVuYWJsZVN0YXRlIGZCbG9ja0VuYWJsZVN0YXRlOwotCXByaXZhdGUgQ29udHJvbCBmQ29uZmlndXJhdGlvbkJsb2NrQ29udHJvbDsKLQlwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybQotCQkJLmdldEluc3RhbmNlKCk7Ci0KLQlwdWJsaWMgU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlKCkgewotCQlmQmxvY2tFbmFibGVTdGF0ZSA9IG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KSB7Ci0JCXByb2plY3QgPSAoSVByb2plY3QpIGdldEVsZW1lbnQoKS5nZXRBZGFwdGVyKElQcm9qZWN0LmNsYXNzKTsKLQkJYm9vbGVhbiBwcm9qZWN0UHJlZnNFbmFibGVkID0gcGxhdGZvcm0KLQkJCQkuaXNQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QpOwotCQlpZiAoIXByb2plY3RQcmVmc0VuYWJsZWQpIHsKLQkJCS8vZW5hYmxlIHRoZW0gc28gdGhhdCBzZXJ2aWNlIHBvbGljaWVzIGNvbXBvc2l0ZSBVSSByZWZsZWN0cyAKLQkJCS8vY3VycmVudGx5IHNldCBwcm9qZWN0IHByZWZlcmVuY2VzLCBvdGhlcndpc2Ugc2hvd3Mgd29ya3NwYWNlIAotCQkJLy9wcmVmZXJlbmNlcyBhbmQgd291bGQgbmVlZCB0byByZWRyYXcgdHJlZSB3aGVuIHVzZXIgZW5hYmxlcyB0aGVtIAotCQkJcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0LCB0cnVlKTsKLQkJfQotCQlwcm9wZXJ0eVBhZ2UgPSBuZXcgU2VydmljZVBvbGljaWVzQ29tcG9zaXRlKHN1cGVycGFyZW50LCBwcm9qZWN0LCB0aGlzKTsKLQkJcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0LCBwcm9qZWN0UHJlZnNFbmFibGVkKTsKLQkJZkNvbmZpZ3VyYXRpb25CbG9ja0NvbnRyb2wgPSBwcm9wZXJ0eVBhZ2U7Ci0JCWVuYWJsZVByZWZlcmVuY2VDb250ZW50KHByb2plY3RQcmVmc0VuYWJsZWQpOwotCQlmVXNlUHJvamVjdFNldHRpbmdzLnNldFNlbGVjdGlvbihwcm9qZWN0UHJlZnNFbmFibGVkKTsKLQkJdXBkYXRlTGlua1Zpc2liaWxpdHkoKTsKLQotCQlvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOwotCQlyZXR1cm4gcHJvcGVydHlQYWdlOwotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCXByb3BlcnR5UGFnZS53aWRnZXREZWZhdWx0U2VsZWN0ZWQoZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCQlwcm9wZXJ0eVBhZ2UuZGlzcG9zZSgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIG9rVG9MZWF2ZSgpIHsKLQkJcmV0dXJuIHByb3BlcnR5UGFnZS5nZXRFcnJvcigpID09IG51bGw7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKSB7Ci0JCWlmICghZlVzZVByb2plY3RTZXR0aW5ncy5nZXRTZWxlY3Rpb24oKSkgewotCQkJcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0LCBmYWxzZSk7Ci0JCX0KLQkJc3RvcmVWYWx1ZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ2FuY2VsIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0JICovCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybUNhbmNlbCgpIHsKLQkJcGxhdGZvcm0uZGlzY2FyZENoYW5nZXMocHJvamVjdCk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkgewotCQllbmFibGVQcm9qZWN0U3BlY2lmaWNTZXR0aW5ncyhmYWxzZSk7Ci0JCXBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCwgZmFsc2UpOwotCQlwcm9wZXJ0eVBhZ2UucGVyZm9ybURlZmF1bHRzKCk7Ci0JCUlTdGF0dXMgZXJyb3IgPSBwcm9wZXJ0eVBhZ2UuZ2V0RXJyb3IoKTsKLQkJaWYgKGVycm9yID09IG51bGwpIHsKLQkJCXN1cGVyLnNldFZhbGlkKHRydWUpOwotCQkJc3VwZXIuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQl9IGVsc2UgewotCQkJc3VwZXIuc2V0RXJyb3JNZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSk7Ci0JCQlzdXBlci5zZXRWYWxpZChmYWxzZSk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpIHsKLQkJaWYgKCFmVXNlUHJvamVjdFNldHRpbmdzLmdldFNlbGVjdGlvbigpKSB7Ci0JCQlwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QsIGZhbHNlKTsKLQkJfQotCQlzdG9yZVZhbHVlcygpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBTdG9yZXMgdGhlIHZhbHVlcyBvZiB0aGUgY29udHJvbHMgYmFjayB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RvcmVWYWx1ZXMoKSB7Ci0JCXBsYXRmb3JtLmNvbW1pdENoYW5nZXMocHJvamVjdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQlJU3RhdHVzIGVycm9yID0gcHJvcGVydHlQYWdlLmdldEVycm9yKCk7Ci0JCWlmIChlcnJvciA9PSBudWxsKSB7Ci0JCQlzdXBlci5zZXRWYWxpZCh0cnVlKTsKLQkJCXN1cGVyLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJfSBlbHNlIHsKLQkJCXN1cGVyLnNldEVycm9yTWVzc2FnZShlcnJvci5nZXRNZXNzYWdlKCkpOwotCQkJc3VwZXIuc2V0VmFsaWQoZmFsc2UpOwotCQl9Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgTGFiZWwgY3JlYXRlRGVzY3JpcHRpb25MYWJlbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCS8vCQkJZlBhcmVudENvbXBvc2l0ZT0gcGFyZW50OwotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJY29tcG9zaXRlLnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMjsKLQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOwotCQljb21wb3NpdGUKLQkJCQkuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKSk7Ci0KLQkJU2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgc2UpIHsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgc2UpIHsKLQkJCQllbmFibGVQcm9qZWN0U3BlY2lmaWNTZXR0aW5ncyhmVXNlUHJvamVjdFNldHRpbmdzCi0JCQkJCQkuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCXBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCwKLQkJCQkJCWZVc2VQcm9qZWN0U2V0dGluZ3MuZ2V0U2VsZWN0aW9uKCkpOwotCQkJfQotCQl9OwotCi0JCWZVc2VQcm9qZWN0U2V0dGluZ3MgPSBuZXcgQnV0dG9uKGNvbXBvc2l0ZSwgU1dULkNIRUNLKTsKLQkJZlVzZVByb2plY3RTZXR0aW5ncy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCWZVc2VQcm9qZWN0U2V0dGluZ3MKLQkJCQkuc2V0VGV4dChXc3RTUFVJUGx1Z2luTWVzc2FnZXMuTEFCRUxfRU5BQkxFX1BST0pFQ1RfU0VUVElOR1MpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDE7Ci0JCWdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotCQlmVXNlUHJvamVjdFNldHRpbmdzLnNldExheW91dERhdGEoZ2QpOwotCQlmQ2hhbmdlV29ya3NwYWNlU2V0dGluZ3MgPSBjcmVhdGVMaW5rKGNvbXBvc2l0ZSwKLQkJCQlXc3RTUFVJUGx1Z2luTWVzc2FnZXMuTElOS19DT05GSUdXT1JLU1BBQ0VfU0VUVElOR1MpOwotCQlmQ2hhbmdlV29ya3NwYWNlU2V0dGluZ3Muc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkVORCwKLQkJCQlTV1QuQ0VOVEVSLCBmYWxzZSwgZmFsc2UpKTsKLQotCQlMYWJlbCBob3Jpem9udGFsTGluZSA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5TRVBBUkFUT1IKLQkJCQl8IFNXVC5IT1JJWk9OVEFMKTsKLQkJaG9yaXpvbnRhbExpbmUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuRklMTCwKLQkJCQl0cnVlLCBmYWxzZSwgMiwgMSkpOwotCQlob3Jpem9udGFsTGluZS5zZXRGb250KGNvbXBvc2l0ZS5nZXRGb250KCkpOwotCi0JCXJldHVybiBzdXBlci5jcmVhdGVEZXNjcmlwdGlvbkxhYmVsKHBhcmVudCk7Ci0JfQotCi0JcHJpdmF0ZSBMaW5rIGNyZWF0ZUxpbmsoQ29tcG9zaXRlIGNvbXBvc2l0ZSwgU3RyaW5nIHRleHQpIHsKLQkJTGluayBsaW5rID0gbmV3IExpbmsoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JCWxpbmsuc2V0Rm9udChjb21wb3NpdGUuZ2V0Rm9udCgpKTsKLQkJbGluay5zZXRUZXh0KCI8QT4iICsgdGV4dCArICI8L0E+Iik7IC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0JCWxpbmsuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCW9wZW5Xb3Jrc3BhY2VQcmVmZXJlbmNlcygoTGluaykgZS53aWRnZXQpOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCW9wZW5Xb3Jrc3BhY2VQcmVmZXJlbmNlcygoTGluaykgZS53aWRnZXQpOwotCQkJfQotCQl9KTsKLQkJcmV0dXJuIGxpbms7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZUxpbmtWaXNpYmlsaXR5KCkgewotCQlpZiAoZkNoYW5nZVdvcmtzcGFjZVNldHRpbmdzID09IG51bGwKLQkJCQl8fCBmQ2hhbmdlV29ya3NwYWNlU2V0dGluZ3MuaXNEaXNwb3NlZCgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlmQ2hhbmdlV29ya3NwYWNlU2V0dGluZ3Muc2V0RW5hYmxlZCghdXNlUHJvamVjdFNldHRpbmdzKCkpOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIHVzZVByb2plY3RTZXR0aW5ncygpIHsKLQkJcmV0dXJuIGZVc2VQcm9qZWN0U2V0dGluZ3MuZ2V0U2VsZWN0aW9uKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZW5hYmxlUHJlZmVyZW5jZUNvbnRlbnQoYm9vbGVhbiBlbmFibGUpIHsKLQkJaWYgKGVuYWJsZSkgewotCQkJaWYgKGZCbG9ja0VuYWJsZVN0YXRlICE9IG51bGwpIHsKLQkJCQlmQmxvY2tFbmFibGVTdGF0ZS5yZXN0b3JlKCk7Ci0JCQkJZkJsb2NrRW5hYmxlU3RhdGUgPSBudWxsOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGZCbG9ja0VuYWJsZVN0YXRlID09IG51bGwpIHsKLQkJCQlmQmxvY2tFbmFibGVTdGF0ZSA9IENvbnRyb2xFbmFibGVTdGF0ZQotCQkJCQkJLmRpc2FibGUoZkNvbmZpZ3VyYXRpb25CbG9ja0NvbnRyb2wpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZW5hYmxlUHJvamVjdFNwZWNpZmljU2V0dGluZ3MoCi0JCQlib29sZWFuIHVzZVByb2plY3RTcGVjaWZpY1NldHRpbmdzKSB7Ci0JCWZVc2VQcm9qZWN0U2V0dGluZ3Muc2V0U2VsZWN0aW9uKHVzZVByb2plY3RTcGVjaWZpY1NldHRpbmdzKTsKLQkJZW5hYmxlUHJlZmVyZW5jZUNvbnRlbnQodXNlUHJvamVjdFNwZWNpZmljU2V0dGluZ3MpOwotCQl1cGRhdGVMaW5rVmlzaWJpbGl0eSgpOwotCQlkb1N0YXR1c0NoYW5nZWQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1N0YXR1c0NoYW5nZWQoKSB7Ci0JCWlmICh1c2VQcm9qZWN0U2V0dGluZ3MoKSkgewotCQkJSVN0YXR1cyBzdGF0dXM7Ci0JCQlzdGF0dXMgPSAocHJvcGVydHlQYWdlLmdldEVycm9yKCkgPT0gbnVsbCkgPyBuZXcgU3RhdHVzKElTdGF0dXMuT0ssCi0JCQkJCVNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5QTFVHSU5fSUQsICIiKSA6IHByb3BlcnR5UGFnZSAvLyROT04tTkxTLTEkCi0JCQkJCS5nZXRFcnJvcigpOwotCQkJdXBkYXRlU3RhdHVzKHN0YXR1cyk7Ci0JCX0gZWxzZSB7Ci0JCQl1cGRhdGVTdGF0dXMobmV3IFN0YXR1cyhJU3RhdHVzLk9LLAotCQkJCQlTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuUExVR0lOX0lELCAiIikpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlU3RhdHVzKElTdGF0dXMgc3RhdHVzKSB7Ci0JCWJvb2xlYW4gdmFsaWQgPSAoc3RhdHVzID09IG51bGwgfHwgIXN0YXR1cy5tYXRjaGVzKElTdGF0dXMuRVJST1IpKTsKLQkJc2V0VmFsaWQodmFsaWQpOwotCQlhcHBseVRvU3RhdHVzTGluZSh0aGlzLCBzdGF0dXMpOwotCX0KLQotCS8qKgotCSAqIEFwcGxpZXMgdGhlIHN0YXR1cyB0byB0aGUgc3RhdHVzIGxpbmUgb2YgYSBkaWFsb2cgcGFnZS4KLQkgKiBAcGFyYW0gcGFnZSB0aGUgZGlhbG9nIHBhZ2UKLQkgKiBAcGFyYW0gc3RhdHVzIHRoZSBzdGF0dXMgdG8gYXBwbHkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYXBwbHlUb1N0YXR1c0xpbmUoRGlhbG9nUGFnZSBwYWdlLCBJU3RhdHVzIHN0YXR1cykgewotCQlTdHJpbmcgbWVzc2FnZSA9IHN0YXR1cy5nZXRNZXNzYWdlKCk7Ci0JCWlmIChtZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQltZXNzYWdlID0gbnVsbDsKLQkJfQotCQlzd2l0Y2ggKHN0YXR1cy5nZXRTZXZlcml0eSgpKSB7Ci0JCWNhc2UgSVN0YXR1cy5PSzoKLQkJCXBhZ2Uuc2V0TWVzc2FnZShtZXNzYWdlLCBJTWVzc2FnZVByb3ZpZGVyLk5PTkUpOwotCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQlicmVhazsKLQkJY2FzZSBJU3RhdHVzLldBUk5JTkc6Ci0JCQlwYWdlLnNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKTsKLQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVN0YXR1cy5JTkZPOgotCQkJcGFnZS5zZXRNZXNzYWdlKG1lc3NhZ2UsIElNZXNzYWdlUHJvdmlkZXIuSU5GT1JNQVRJT04pOwotCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBhZ2Uuc2V0TWVzc2FnZShudWxsKTsKLQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgZmluYWwgdm9pZCBvcGVuV29ya3NwYWNlUHJlZmVyZW5jZXMoT2JqZWN0IGRhdGEpIHsKLQkJU3RyaW5nIGlkID0gU2VydmljZVBvbGljaWVzUHJlZmVyZW5jZVBhZ2UuUEFHRV9JRDsKLQkJUHJlZmVyZW5jZXNVdGlsLmNyZWF0ZVByZWZlcmVuY2VEaWFsb2dPbihnZXRTaGVsbCgpLCBpZCwKLQkJCQluZXcgU3RyaW5nW10geyBpZCB9LCBkYXRhKS5vcGVuKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3Byb3BlcnRpZXMvU2VydmljZVBvbGljeVByb3BlcnR5VGVzdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3Byb3BlcnRpZXMvU2VydmljZVBvbGljeVByb3BlcnR5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NTA1YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcm9wZXJ0aWVzL1NlcnZpY2VQb2xpY3lQcm9wZXJ0eVRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZQotICogYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkucHJvcGVydGllczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuUHJvcGVydHlUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lQcm9wZXJ0eVRlc3RlciBleHRlbmRzIFByb3BlcnR5VGVzdGVyCi17Ci0KLSAgcHVibGljIGJvb2xlYW4gdGVzdChPYmplY3QgcmVjZWl2ZXIsIFN0cmluZyBwcm9wZXJ0eSwgT2JqZWN0W10gYXJncywgT2JqZWN0IGV4cGVjdGVkVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCkuaXNFbmFibGVkKCByZWNlaXZlciApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lFbmFibGVPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUVuYWJsZU9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmEwMzU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUVuYWJsZU9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbmFibGVkQ2xhc3MgYXR0cmlidXRlIG9mIHRoZQotICogZW5hYmxlZCBlbGVtZW50LgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJRW5hYmxlT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGVkUG9saWNpZXMgdGhlIHNlbGVjdGVkIHNlcnZpY2UgcG9saWNpZXMuCi0gICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCBMaXN0PElTZXJ2aWNlUG9saWN5PiBzZWxlY3RlZFBvbGljaWVzICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lMYXVuY2hPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTZjM2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBsYXVuY2hDbGFzcyBhdHRyaWJ1dGUgb2YKLSAqIHRoZSBjb21wbGV4IGVsZW1lbnQuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElMYXVuY2hPcGVyYXRpb24KLXsKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCB0aGlzIGNvbXBsZXggb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGVkUG9saWNpZXMgYSBsaXN0IG9mIHRoZSBzZXJ2aWNlIHBvbGljaWVzIHRoYXQgd2VyZSBzZWxlY3RlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGxhdW5jaCggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUG9saWN5T3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUxYWNjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIFNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiB0aGF0IGhhcyBiZWVuIGRlZmluZWQKLSAqIGluIHRoZSBwbHVnaW4ueG1sIG1ldGEgZGF0YS4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVBvbGljeU9wZXJhdGlvbgotewotICAvKioKLSAgICogCi0gICAqIEluZGljYXRlcyB0aGUga2luZCBvZiBTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gdGhhdCB0aGlzIG9iamVjdCByZXByZXNlbnRzLgotICAgKiA8dWw+Ci0gICAqIDxsaT5lbnVtZXJhdGlvbjogaW5kaWNhdGVzIHRoYXQgYSBsaXN0IG9mIGVudW1lcmF0ZWQgdmFsdWVzIGlzIGFzc29jaWF0ZWQuPC9saT4KLSAgICogPGxpPnNlbGVjdGlvbjogaW5kaWNhdGVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHNvbWUKLSAgICogYm9vbGVhbiBvcGVyYXRpb248L2xpPgotICAgKiA8bGk+IGljb25TZWxlY3Rpb246IHRoaXMgb3BlcmF0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIHNlbGVjdGlvbiBvcGVyYXRpb24KLSAgICogZXhjZXB0IHRoYXQgaXQgdmlzdWFsIHN0YXRlIGlzIHJlbmRlcmVkIHZpYSBhbiBpY29uLjwvbGk+Ci0gICAqIDxsaT5jb21wbGV4OiBpbmRpY2F0ZXMgdGhhdCBzb21lIGNvbXBsZXggb3BlcmF0aW9uIGlzIHJlcXVpcmVkIHRvIHJlbmRlcgotICAgKiBhbmQgcGVyc2lzdCBzb21lIHBvbGljeSBkYXRhLiAgVGhpcyBvcGVyYXRpb24gd2lsbCBiZSByZW5kZXJlZCB2aWEgYSBVSQotICAgKiBidXR0b24uICBXaGVuIHRoaXMgYnV0dG9uIGlzIHNlbGVjdGVkIHRoZSBsYXVuY2ggY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICogb3BlcmF0aW9uIGlzIGNhbGxlZC48L2xpPiAgIAotICAgKiA8dWwvPiAKLSAgICovCi0gIHB1YmxpYyBlbnVtIE9wZXJhdGlvbktpbmQgeyBlbnVtZXJhdGlvbiwgc2VsZWN0aW9uLCBpY29uU2VsZWN0aW9uLCBjb21wbGV4IH07Ci0gCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB1bmlxdWUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIElEZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gc2hvdWxkIG9ubHkgYXBwZWFyCi0gICAqIGluIHRoZSB3b3Jrc3BhY2Ugc2VydmljZSBwb2xpY3kgcHJlZmVyZW5jZSBwYWdlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNXb3Jrc3BhY2VPbmx5KCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUga2luZCBvZiBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uS2luZCBnZXRPcGVyYXRpb25LaW5kKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZW51bWVyYXRpb24gSUQgaWYgdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gaXMKLSAgICogYW4gZW51bWVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVudW1lcmF0aW9uSWQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGlmIHRoaXMgaXMgYW4gZW51bWVyYXRpb24gaXQgcmV0dXJucyB0aGUgZGVmYXVsdCBpdGVtIGZvciB0aGlzCi0gICAqIGVudW1lcmF0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0SXRlbSgpOwotICAKLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gaWYgdGhpcyBpcyBhIGNvbXBsZXggb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGVkUG9saWNpZXMgdGhlIHNlbGVjdGVkIHNlcnZpY2UgcG9saWNpZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBsYXVuY2hPcGVyYXRpb24oIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMgKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGVkUG9saWNpZXMgdGhlIHNlbGVjdGVkIHNlcnZpY2UgcG9saWNpZXMuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMgKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcGVyYXRpb24uCi0gICAqIEFsbCBzZXJ2aWNlIHBvbGljeSBJRCB0aGF0IG1hdGNoIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgYXNzb2NpYXRlZAotICAgKiB3aXRoIHRoaXMgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQb2xpY3lJZFBhdHRlcm4oKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgSVNlcnZpY2VQb2xpY3kgZ2V0U2VydmljZVBvbGljeSgpOwotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IGlmIHRoaXMgaXMgcHJvamVjdCBwcm9wZXJ0eSBwYWdlIGl0ZW0uCi0gICAqIEZvciB0aGUgcHJlZmVyZW5jZSBwYWdlIGNvbnRleHQgbnVsbCBzaG91bGQgYmUgc3BlY2lmaWVkLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGN1cnJlbnQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXRlSXRlbSggSVByb2plY3QgcHJvamVjdCApOwotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGN1cnJlbnQgZW51bWVyYXRpb24gaXRlbSBmb3IgdGhpcyBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IGlmIHRoaXMgaXMgcHJvamVjdCBwcm9wZXJ0eSBwYWdlIGl0ZW0uCi0gICAqIEZvciB0aGUgcHJlZmVyZW5jZSBwYWdlIGNvbnRleHQgbnVsbCBzaG91bGQgYmUgc3BlY2lmaWVkLgotICAgKiBAcGFyYW0gc3RhdGVJdGVtIHRoZSBpdGVtLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3RhdGVJdGVtKCBJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc3RhdGVJdGVtICk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHVzZXMgZGVmYXVsdCBzdGF0ZSBvciBub3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VzZURlZmF1bHREYXRhKCk7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZmY3NGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IGV4dGVuZGVycyB0byBhZGQgcXVpY2sgZml4ZXMgdG8gdGhlIHNlcnZpY2UgcG9saWN5IHVpCi0gKiBmcmFtZXdvcmsuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElRdWlja0ZpeEFjdGlvbgotewotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHRoaXMgYWN0aW9uIHRvIHJlc29sdmUKLSAgICogYSBwYXJ0aWN1bGFyIHNlcnZpY2UgcG9saWN5IHByb2JsZW0uCi0gICAqIAotICAgKiBAcGFyYW0gcG9saWN5IFRoZSBwb2xpY3kgdGhhdCB0aGlzIHF1aWNrIGZpeCBhcHBsaWVzIHRvLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWN0aW9uKCBJU2VydmljZVBvbGljeSBwb2xpY3kpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb25JbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY2NTViNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVF1aWNrRml4QWN0aW9uSW5mbwotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGRlc2NyaXB0b3IgZm9yIHRoaXMgcXVpY2sgZml4LgotICAgKi8KLSAgcHVibGljIElEZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBhY3Rpb24gZm9yIHRoaXMgcXVpY2sgZml4LgotICAgKi8KLSAgcHVibGljIElRdWlja0ZpeEFjdGlvbiBnZXRBY3Rpb24oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzYwNDM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkgZXh0ZW5kcyBQbHVnaW4gaW1wbGVtZW50cyBJU3RhcnR1cCB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeUFjdGl2YXRvclVJIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgU2VydmljZVBvbGljeUFjdGl2YXRvclVJKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0JICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotCSAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLQkgKi8KLQkJcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBuYW1lKSB7Ci0JCQl0cnkgewotCQkJCVVSTCBpbnN0YWxsVVJMID0gcGx1Z2luLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsIG5hbWUpOwotCQkJCXJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0JCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotCSAgICAgcmV0dXJuIG51bGw7Ci0JICAgfQotCSB9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgU2VydmljZVBvbGljeUFjdGl2YXRvclVJIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCQotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCBtZXNzYWdlLCBleGMgKTsKLSAgICAKLSAgICBnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlYXJseVN0YXJ0dXAoKQotICB7Ci0gICAgLy8gRE8gbm90aGluZy4gIEFsbCB3ZSB3YW50IHRvIGRvIGlzIGdldCB0aGUgcGx1Z2luIGxvYWRlZCBhdCBVSSBzdGFydCB0aW1lLgotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZWI0YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZ2V0IFNlcnZpY2UgcG9saWN5IFVJIGluZm9ybWF0aW9uLgotICoKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJCi17Ci0gIHByaXZhdGUgc3RhdGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIGluc3RhbmNlOwotICAKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSUltcGwgcGxhdGZvcm1VSTsKLSAgCi0gIHByaXZhdGUgU2VydmljZVBvbGljeVBsYXRmb3JtVUkoKQotICB7Ci0gICAgcGxhdGZvcm1VSSA9IG5ldyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSUltcGwoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSBVSSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCBpbnN0YW5jZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGFsbCB0aGUgb3BlcmF0aW9ucyBmb3IgYWxsIGtub3duIHBvbGljaWVzLgotICAgKi8KLSAgcHVibGljIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gZ2V0QWxsT3BlcmF0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1VSS5nZXRBbGxPcGVyYXRpb25zKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUG9saWN5T3BlcmF0aW9uIGdldE9wZXJhdGlvbiggSVNlcnZpY2VQb2xpY3kgcG9saWN5LCBTdHJpbmcgaWQgKQotICB7Ci0gICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBvcGVyYXRpb25zID0gZ2V0T3BlcmF0aW9ucyggcG9saWN5LCB0cnVlICk7Ci0gICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICByZXN1bHQgICAgID0gbnVsbDsKLSAgICAKLSAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogb3BlcmF0aW9ucyApCi0gICAgewotICAgICAgaWYoIG9wZXJhdGlvbi5nZXRJZCgpLmVxdWFscyggaWQgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG9wZXJhdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeSB0aGUgcG9saWN5Ci0gICAqIEBwYXJhbSBpc1dvcmtzcGFjZSB0cnVlIGlmIHRoaXMgaXMgYSBwcmVmZXJlbmNlIHBhZ2UgY29udGV4dAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBmb3IgdGhpcyBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBnZXRPcGVyYXRpb25zKCBJU2VydmljZVBvbGljeSBwb2xpY3ksIGJvb2xlYW4gaXNXb3Jrc3BhY2UgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBWZWN0b3I8SVBvbGljeU9wZXJhdGlvbj4oIHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0ZvclBvbGljeSggcG9saWN5LCBpc1dvcmtzcGFjZSApICk7Ci0gIH0KLSAgIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBwb2xpY2llcwotICAgKiBAcGFyYW0gaXNXb3Jrc3BhY2UKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBvcGVyYXRpb25zLiAgRWFjaCBsaXN0Ci0gICAqIGFzIHRoZSB0b3AgbGV2ZWwgY29udGFpbnMgbGlzdCBvZiBJUG9saWN5T3BlcmF0aW9ucyB0aGF0IHJlZmVyZW5jZSB0aGUgCi0gICAqIHNhbWUgYmFzZSBvcGVyYXRpb24uICBIb3dldmVyLCB0aGV5IHdpbGwgZWFjaCBoYXZlIGRpZmZlcmVudCBhc3NvY2lhdGVkCi0gICAqIHBvbGljaWVzLgotICAgKi8KLSAgcHVibGljIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gZ2V0T3BlcmF0aW9uc0xpc3QoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHBvbGljaWVzLCBib29sZWFuIGlzV29ya3NwYWNlICkKLSAgewotICAgIHJldHVybiBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnNMaXN0KCBwb2xpY2llcywgaXNXb3Jrc3BhY2UgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2YgcXVpY2sgZml4ZXMgZm9yIHRoaXMgc3RhdHVzIG9iamVjdC4gIElmCi0gICAqIG5vIHF1aWNrIGZpeGVzIGFyZSBhdmFpbGFibGUgYW4gZW1wdHkgbGlzdCB3aWxsIGJlIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gZ2V0UXVpY2tGaXhlcyggSVN0YXR1cyBzdGF0dXMgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtVUkuZ2V0UXVpY2tGaXhlcyggc3RhdHVzICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvQWN0aXZpdHlVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNjNiZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjIgICAyMDk4NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGl2aXRpZXMuSUFjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpdml0aWVzLklJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLQotcHVibGljIGNsYXNzIEFjdGl2aXR5VXRpbHMKLXsKLSAgcHVibGljIHN0YXRpYyBJRmlsdGVyIGdldEN1cnJlbnRBY3Rpdml0aWVzRmlsdGVyKCkKLSAgewotICAgIGZpbmFsIElXb3JrYmVuY2ggICAgICAgd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLSAgICBmaW5hbCBJQWN0aXZpdHlNYW5hZ2VyIG1hbmFnZXIgICA9IHdvcmtiZW5jaC5nZXRBY3Rpdml0eVN1cHBvcnQoKS5nZXRBY3Rpdml0eU1hbmFnZXIoKTsKLSAgICAgICAgIAotICAgIHJldHVybiBuZXcgSUZpbHRlcigpCi0gICAgewotICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotICAgICAgeyAKLSAgICAgICAgSUlkZW50aWZpZXIgaWRlbnRpZmllciA9IG1hbmFnZXIuZ2V0SWRlbnRpZmllciggcG9saWN5LmdldElkKCkgKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBpZGVudGlmaWVyID09IG51bGwgPyBmYWxzZSA6IGlkZW50aWZpZXIuaXNFbmFibGVkKCk7Ci0gICAgICB9ICAKLSAgICB9OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9TZXJ2aWNlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI1YjU5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMjExICAgMjE4NTIwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgTGlzdDxJU2VydmljZVBvbGljeT4gc29ydExpc3QoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHVuc29ydGVkTGlzdCApCi0gIHsKLSAgICBUcmVlU2V0PElTZXJ2aWNlUG9saWN5PiBzb3J0ZWRTZXQgPSBuZXcgVHJlZVNldDxJU2VydmljZVBvbGljeT4oIG5ldyBDb21wYXJlU2VydmljZVBvbGljeSgpICk7Ci0gICAgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiAgc29ydGVkTGlzdCA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgCi0gICAgc29ydGVkU2V0LmFkZEFsbCggdW5zb3J0ZWRMaXN0ICk7Ci0gICAgc29ydGVkTGlzdC5hZGRBbGwoIHNvcnRlZFNldCApOwotICAgIAotICAgIHJldHVybiBzb3J0ZWRMaXN0OwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb21wYXJlU2VydmljZVBvbGljeSBpbXBsZW1lbnRzIENvbXBhcmF0b3I8SVNlcnZpY2VQb2xpY3k+Ci0gIHsKLSAgICBwdWJsaWMgaW50IGNvbXBhcmUoSVNlcnZpY2VQb2xpY3kgYXJnMCwgSVNlcnZpY2VQb2xpY3kgYXJnMSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZTAgPSBhcmcwLmdldERlc2NyaXB0b3IoKS5nZXRMb25nTmFtZSgpOwotICAgICAgU3RyaW5nIG5hbWUxID0gYXJnMS5nZXREZXNjcmlwdG9yKCkuZ2V0TG9uZ05hbWUoKTsKLSAgICAgIAotICAgICAgcmV0dXJuIG5hbWUwLmNvbXBhcmVUbyggbmFtZTEgKTsgCi0gICAgfSAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzc5NjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5PC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYwODE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNUaHUgTm92IDI5IDExOjU5OjMzIEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNjJhODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSwKLSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1Y2E0YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHNjaGVtYS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMwYWZjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVNlcnZpY2UgcG9saWN5Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLVNFUlZJQ0VfUE9MSUNZX05BTUU9U2VydmljZSBwb2xpY3kKLQotVFJVRV9TSE9SVE5BTUU9dHJ1ZQotRkFMU0VfU0hPUlROQU1FPWZhbHNlCi1JR05PUkVfU0hPUlROQU1FPWlnbm9yZQotV0FSTl9TSE9SVE5BTUU9d2FybgotRVJST1JfU0hPUlROQU1FPWVycm9yCi1JR05PUkVfTE9OR05BTUU9SWdub3JlCi1XQVJOX0xPTkdOQU1FPVdhcm4KLUVSUk9SX0xPTkdOQU1FPUVycm9yCi0KLVNVR19JR05PUkVfU0hPUlROQU1FPWlnbm9yZQotU1VHX1NVR0dFU1RfU0hPUlROQU1FPXN1Z2dlc3QKLVNVR19SRVFVSVJFX1NIT1JUTkFNRT1yZXF1aXJlCi1TVUdfSUdOT1JFX0xPTkdOQU1FPUlnbm9yZSBjb21wbGlhbmNlCi1TVUdfU1VHR0VTVF9MT05HTkFNRT1TdWdnZXN0IGNvbXBsaWFuY2UKLVNVR19SRVFVSVJFX0xPTkdOQU1FPVJlcXVpcmUgY29tcGxpYW5jZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YmJjNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InNlcnZpY2Vwb2xpY3kiIG5hbWU9IiVTRVJWSUNFX1BPTElDWV9OQU1FIiBzY2hlbWE9InNjaGVtYS9zZXJ2aWNlUG9saWN5LmV4c2QiLz4KLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnNlcnZpY2Vwb2xpY3kiPgotICAgICA8c2VydmljZVBvbGljeT4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIiAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ib3JnLmVjbGlwc2Uud3N0LnRydWUiPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC50cnVlIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSIlVFJVRV9TSE9SVE5BTUUiIC8+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LmZhbHNlIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSIlRkFMU0VfU0hPUlROQU1FIiAvPgotICAgICAgIDwvZW51bWVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVJR05PUkVfU0hPUlROQU1FIiBsb25nTmFtZT0iJUlHTk9SRV9MT05HTkFNRSIgLz4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3Qud2FybiIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iJVdBUk5fU0hPUlROQU1FIiBsb25nTmFtZT0iJVdBUk5fTE9OR05BTUUiIC8+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSIlRVJST1JfU0hPUlROQU1FIiBsb25nTmFtZT0iJUVSUk9SX0xPTkdOQU1FIiAvPgotICAgICAgIDwvZW51bWVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuc3VnZ2VzdGlvbkVudW0iIAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSI+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVTVUdfSUdOT1JFX1NIT1JUTkFNRSIgbG9uZ05hbWU9IiVTVUdfSUdOT1JFX0xPTkdOQU1FIiAvPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iJVNVR19TVUdHRVNUX1NIT1JUTkFNRSIgbG9uZ05hbWU9IiVTVUdfU1VHR0VTVF9MT05HTkFNRSIgLz4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVTVUdfUkVRVUlSRV9TSE9SVE5BTUUiIGxvbmdOYW1lPSIlU1VHX1JFUVVJUkVfTE9OR05BTUUiIC8+Ci0gICAgICAgPC9lbnVtZXJhdGlvbj4KLSAgICAgPC9zZXJ2aWNlUG9saWN5PgotICAgPC9leHRlbnNpb24+ICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NjaGVtYS9zZXJ2aWNlUG9saWN5LmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zY2hlbWEvc2VydmljZVBvbGljeS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGU4MThkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NjaGVtYS9zZXJ2aWNlUG9saWN5LmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5Ij4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kiIGlkPSJzZXJ2aWNlUG9saWN5IiBuYW1lPSJTZXJ2aWNlIHBvbGljeSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGlzIGV4dGVuc2lvbiBhbGxvd3MgZXh0ZW5kZXJzIHRvIGRlZmluZSBzZXJ2aWNlIHBvbGljaWVzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NoZW1hOi8vb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy9zY2hlbWEvZXhwcmVzc2lvbkxhbmd1YWdlLmV4c2QiLz4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2VydmljZVBvbGljeSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJzZXJ2aWNlUG9saWN5Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZSBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icG9saWN5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJlbnVtZXJhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibG9hZExpc3RlbmVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJlbmFibGVtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InBvbGljeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRlc2NyaXB0b3IiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icmVsYXRpb25zaGlwIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InN0YXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwYXJlbnRQb2xpY3lJZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhcmVudCBwb2xpY3kgaWQgZm9yIHRoaXMgcG9saWN5LiAgSWYgdGhpcyBpcyBhIHJvb3QgcG9saWN5IHRoaXMgYXR0cmlidXRlIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSB1bmlxdWUgaWQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZW51bUxpc3RJZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBJZiB0aGlzIHBvbGljeSZhcG9zO3Mgc3RhdGUgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVudW1lcmF0aW9uIHRoZW4gdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBpZCBvZiB0aGlzIGVudW1lcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlZmF1bHRFbnVtSWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc2hvdWxkIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBlbnVtTGlzdElkIGlzIGFsc28gc3BlY2lmaWVkLiAgSXQgaXMgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBlbnVtIHZhbHVlIGRlZmluZWQgYnkgdGhlIGVudW1lcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im11dGFibGUiIHR5cGU9ImJvb2xlYW4iIHVzZT0iZGVmYXVsdCIgdmFsdWU9ImZhbHNlIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgaWYgdGhpcyBwb2xpY3kgaGFzIG11dGFibGUgZGF0YSBvciBub3QuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImRlc2NyaXB0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2hvcnROYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgc2VydmljZSBwb2xpY3kuICBOb3RlOiBpZiBhIHNob3J0IG5hbWUgaXMgbm90IHNwZWNpZmllZCBpdCBpcyBkZWZhdWx0ZWQgdG8gdGhlIHZhbHVlIG9mIHRoZSBsb25nIG5hbWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibG9uZ05hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGxvbmcgbmFtZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5LiAgTm90ZTogaWYgYSBsb25nIG5hbWUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIHRoZSBzaG9ydE5hbWUgdmFsdWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29udGV4dEhlbHBJZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY29udGV4dCBoZWxwIGlkIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5IGlmIGl0IGlzIHJlcXVpcmVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imljb25QYXRoIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgcGx1Z2luIHJlbGF0aXZlIHBhdGggdG8gc29tZSBpY29uIGZpbGUgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InJlbGF0aW9uc2hpcCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3RhdGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBzZXJ2aWNlIHBvbGljeSBhbmQgdGhlIHN0YXRlcyBvZiBvdGhlciBzZXJ2aWNlIHBvbGljaWVzLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ0YXJnZXRQb2xpY3kiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImVudW1MaXN0IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ0YXJnZXRQb2xpY3kiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpdGVtTGlzdCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZW51bWVyYXRpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJpdGVtIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJpdGVtIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2hvcnROYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvbmdOYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJsb2FkTGlzdGVuZXIiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyIGludGVyZmFjZS4gIFRoZSBsb2FkIG1ldGhvZCBvZiB0aGlzIGNsYXNzIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIFNlcnZpY2VQb2xpY3kgZnJhbWV3b3JrIGlzIGZpcnN0IGxvYWRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0ic3RhdGUiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZWxlbWVudCBhbGxvd3MgdGhlIGV4dGVuZGVyIHRvIGRlZmluZSBzdGF0ZSBkYXRhIGZvciB0aGlzIHBvbGljeS4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ia2V5IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBrZXkgZm9yIHRoaXMgc3RhdGUgZGF0YS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhpcyBzdGF0ZSBkYXRhLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAxLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0Rlc2NyaXB0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0Rlc2NyaXB0b3JJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNGQzNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9EZXNjcmlwdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAzMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotCi1wdWJsaWMgY2xhc3MgRGVzY3JpcHRvckltcGwgaW1wbGVtZW50cyBJRGVzY3JpcHRvcgotewotICBwcml2YXRlIFN0cmluZyAgc2hvcnROYW1lOwotICBwcml2YXRlIFN0cmluZyAgbG9uZ05hbWU7Ci0gIHByaXZhdGUgU3RyaW5nICBkZXNjcmlwdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgIGljb25QYXRoOwotICBwcml2YXRlIFN0cmluZyAgaWNvbkJ1bmRsZUlkOwotICBwcml2YXRlIFN0cmluZyAgY29udGV4dEhlbHBJZDsKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0NoYW5nZWQgPSBmYWxzZTsKLSAgICAKLSAgcHVibGljIGJvb2xlYW4gaGFzQ2hhbmdlZCgpCi0gIHsKLSAgICByZXR1cm4gaGFzQ2hhbmdlZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVzZXRIYXNDaGFuZ2VkKCkKLSAgewotICAgIGhhc0NoYW5nZWQgPSBmYWxzZTsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNob3J0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gc2hvcnROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTaG9ydE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLnNob3J0TmFtZSA9IG5hbWU7Ci0gICAgCi0gICAgaWYoIGxvbmdOYW1lID09IG51bGwgKSBsb25nTmFtZSA9IHNob3J0TmFtZTsKLSAgICAKLSAgICBoYXNDaGFuZ2VkID0gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRMb25nTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbG9uZ05hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMb25nTmFtZShTdHJpbmcgbG9uZ05hbWUpCi0gIHsKLSAgICB0aGlzLmxvbmdOYW1lID0gbG9uZ05hbWU7Ci0gICAgCi0gICAgaWYoIHNob3J0TmFtZSA9PSBudWxsICkgc2hvcnROYW1lID0gbG9uZ05hbWU7Ci0gICAgCi0gICAgaGFzQ2hhbmdlZCA9IHRydWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIGhhc0NoYW5nZWQgPSB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEljb25QYXRoKCkKLSAgewotICAgIHJldHVybiBpY29uUGF0aDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SWNvblBhdGgoU3RyaW5nIGljb25QYXRoKQotICB7Ci0gICAgdGhpcy5pY29uUGF0aCA9IGljb25QYXRoOwotICAgIGhhc0NoYW5nZWQgPSB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEljb25CdW5kbGVJZCgpCi0gIHsKLSAgICByZXR1cm4gaWNvbkJ1bmRsZUlkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJY29uQnVuZGxlSWQoU3RyaW5nIGljb25CdW5kbGVJZCkKLSAgewotICAgIHRoaXMuaWNvbkJ1bmRsZUlkID0gaWNvbkJ1bmRsZUlkOwotICAgIGhhc0NoYW5nZWQgPSB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHRIZWxwSWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHRIZWxwSWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0SGVscElkKFN0cmluZyBjb250ZXh0SGVscElkKQotICB7Ci0gICAgdGhpcy5jb250ZXh0SGVscElkID0gY29udGV4dEhlbHBJZDsKLSAgICBoYXNDaGFuZ2VkID0gdHJ1ZTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvRW51bWVyYXRpb25TdGF0ZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvRW51bWVyYXRpb25TdGF0ZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJkMDg0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0VudW1lcmF0aW9uU3RhdGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotCi1wdWJsaWMgY2xhc3MgRW51bWVyYXRpb25TdGF0ZUltcGwgaW1wbGVtZW50cyBJUG9saWN5U3RhdGVFbnVtCi17Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFZBTFVFID0gSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleTsgIC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIGVudW1JZDsKLSAgcHJpdmF0ZSBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZW51bUxpc3Q7Ci0gIHByaXZhdGUgSVBvbGljeVN0YXRlICAgICAgICAgICAgICAgIHN0YXRlOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SWQ7Ci0gIAotICBwdWJsaWMgRW51bWVyYXRpb25TdGF0ZUltcGwoIFN0cmluZyBlbnVtSWQsIFN0cmluZyBkZWZhdWx0SWQsIElQb2xpY3lTdGF0ZSBzdGF0ZSApCi0gIHsKLSAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAKLSAgICB0aGlzLmVudW1JZCAgICA9IGVudW1JZDsKLSAgICB0aGlzLmVudW1MaXN0ICA9IHBsYXRmb3JtLmdldFN0YXRlRW51bWVyYXRpb24oIGVudW1JZCApOwotICAgIHRoaXMuc3RhdGUgICAgID0gc3RhdGU7Ci0gICAgdGhpcy5kZWZhdWx0SWQgPSBlbnVtTGlzdC5nZXQoMCkuZ2V0SWQoKTsKLSAgIAotICAgIGlmKCBkZWZhdWx0SWQgIT0gbnVsbCApCi0gICAgewotICAgICAgdGhpcy5kZWZhdWx0SWQgPSBkZWZhdWx0SWQ7Ci0gICAgICBzdGF0ZS5wdXREZWZhdWx0VmFsdWUoIFZBTFVFLCBkZWZhdWx0SWQsIGZhbHNlICk7IAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZW51bUl0ZW0gOiBlbnVtTGlzdCApCi0gICAgICB7Ci0gICAgICAgIGlmKCBlbnVtSXRlbS5pc0RlZmF1bHQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICB0aGlzLmRlZmF1bHRJZCA9IGVudW1JdGVtLmdldElkKCk7Ci0gICAgICAgICAgc3RhdGUucHV0RGVmYXVsdFZhbHVlKCBWQUxVRSwgIHRoaXMuZGVmYXVsdElkLCBmYWxzZSApOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbnVtSWQoKQotICB7Ci0gICAgcmV0dXJuIGVudW1JZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdElkKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0SWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRJdGVtKCBTdHJpbmcgaXRlbUlkICkKLSAgewotICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGVudW1JdGVtIDogZW51bUxpc3QgKQotICAgIHsKLSAgICAgIFN0cmluZyBlbnVtSXRlbUlkID0gZW51bUl0ZW0uZ2V0SWQoKTsKLSAgICAgIAotICAgICAgaWYoIGVudW1JdGVtSWQuZXF1YWxzKCBpdGVtSWQgKSApCi0gICAgICB7Ci0gICAgICAgIHN0YXRlLnB1dFZhbHVlKCBWQUxVRSwgZW51bUl0ZW1JZCApOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVN0YXRlRW51bWVyYXRpb25JdGVtIGdldEN1cnJlbnRJdGVtKCkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgICBjdXJyZW50RW51bSA9IHN0YXRlLmdldFZhbHVlKCBWQUxVRSApOwotICAgIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBjdXJyZW50SXRlbSA9IG51bGw7Ci0gICAgCi0gICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZW51bUl0ZW0gOiBlbnVtTGlzdCApCi0gICAgewotICAgICAgaWYoIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBjdXJyZW50RW51bSApICkKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEl0ZW0gPSBlbnVtSXRlbTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjdXJyZW50SXRlbTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9Mb2NhbFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0xvY2FsVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmMWVlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0xvY2FsVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMzAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMjUgICAyMjIwOTUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeUVudW1lcmF0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVJlbGF0aW9uc2hpcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5UmVsYXRpb25zaGlwSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLkJhY2tpbmdTdG9yZUV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIExvY2FsVXRpbHMKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfS0VZICAgICAgPSAib3JnLmVjbGlwc2Uud3N0LiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMX0lEU19LRVkgPSAibG9jYWxJZHMiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJFTlRfS0VZICAgID0gInBhcmVudElkIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVVUQUJMRV9LRVkgICA9ICJtdXRhYmxlIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ1JfS0VZICAgICA9ICJkZXNjcmlwdGlvbiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPTkdOQU1FX0tFWSAgPSAibG9uZ25hbWUiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSE9SVE5BTUVfS0VZID0gInNob3J0bmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElDT05QQVRIX0tFWSAgPSAiaWNvbnBhdGgiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJQ09OQlVORF9LRVkgID0gImljb25idW5kbGVpZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFTFBJRF9LRVkgICAgPSAiY29udGV4dGhlbHBpZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOVU1MSVNUX0tFWSAgPSAiZW51bWxpc3RpZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkVOVU1fS0VZICAgPSAiZGVmYXVsdGVudW1pZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9LRVkgICAgICAgPSAicmVsIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX1NVRkZJWCA9ICIudGFyZ2V0IjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX1NVRkZJWCA9ICIuc291cmNlIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0TG9jYWxQb2xpY3lJZHMoKQotICB7Ci0gICAgTGlzdDxTdHJpbmc+ICAgICAgICByZXN1bHQgICAgICA9IG5ldyBWZWN0b3I8U3RyaW5nPigpOwotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBnZXRQcmVmZXJlbmNlcygpOwotICAgIFN0cmluZyAgICAgICAgICAgICAga2V5ICAgICAgICAgPSBCQVNFX0tFWSArIExPQ0FMX0lEU19LRVk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBpZHNWYWx1ZSAgICA9IHByZWZlcmVuY2VzLmdldCgga2V5ICwgIiIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIGlmKCAhaWRzVmFsdWUuZXF1YWxzKCAiIiApICkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJlc3VsdCA9IGNyZWF0ZVN0cmluZ0xpc3QoIGlkc1ZhbHVlICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlTG9jYWxJZHMoIExpc3Q8U3RyaW5nPiBsb2NhbElkcyApCi0gIHsgCi0gICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IGdldFByZWZlcmVuY2VzKCk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBrZXkgICAgICAgICA9IEJBU0VfS0VZICsgTE9DQUxfSURTX0tFWTsKLSAgICAKLSAgICBpZiggbG9jYWxJZHMuc2l6ZSgpID4gMCApCi0gICAgewotICAgICAgcHJlZmVyZW5jZXMucHV0KCBrZXksIGNyZWF0ZVNwYWNlRGVsaW1pdGVkU3RyaW5nKCBsb2NhbElkcyApICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVtb3ZlQWxsUHJlZmVyZW5jZVBvbGljaWVzKCBTdHJpbmcgc3RhcnRzV2l0aCwgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmcyApCi0gIHsKLSAgICBpZiggc3RhcnRzV2l0aCA9PSBudWxsICkgc3RhcnRzV2l0aCA9IEJBU0VfS0VZOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBwcmVmcyA9PSBudWxsID8gZ2V0UHJlZmVyZW5jZXMoKSA6IHByZWZzOwotICAgICAgU3RyaW5nW10gICAgICAgICAgICBrZXlzICAgICAgICA9IHByZWZlcmVuY2VzLmtleXMoKTsKLSAgICAgIAotICAgICAgZm9yKCBTdHJpbmcga2V5IDoga2V5cyApCi0gICAgICB7Ci0gICAgICAgIGlmKCBrZXkuc3RhcnRzV2l0aCggc3RhcnRzV2l0aCApICkKLSAgICAgICAgewotICAgICAgICAgIHByZWZlcmVuY2VzLnJlbW92ZSgga2V5ICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEJhY2tpbmdTdG9yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJFcnJvciBsb2FkaW5nIHNlcnZpY2UgcG9saWN5IGxvY2FsIHByZWZlcmVuY2VzLiIsIGV4Yyk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlTG9jYWxQb2xpY3koIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSApCi0gIHsKLSAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gZ2V0UHJlZmVyZW5jZXMoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIHBvbGljeUlkICAgID0gcG9saWN5LmdldElkKCk7Ci0gICAgSURlc2NyaXB0b3IgICAgICAgICBkZXNjcmlwdG9yICA9IHBvbGljeS5nZXREZXNjcmlwdG9yKCk7Ci0gICAgSVNlcnZpY2VQb2xpY3kgICAgICBwYXJlbnQgICAgICA9IHBvbGljeS5nZXRQYXJlbnRQb2xpY3koKTsKLSAgICAKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIFBBUkVOVF9LRVksICBwYXJlbnQgPT0gbnVsbCA/IG51bGwgOiBwYXJlbnQuZ2V0SWQoKSApOwotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgTVVUQUJMRV9LRVksICIiICsgcG9saWN5LmdldFBvbGljeVN0YXRlKCkuaXNNdXRhYmxlKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgRU5VTUxJU1RfS0VZLCBwb2xpY3kuZ2V0RW51bUxpc3RJZCgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBERUZFTlVNX0tFWSwgcG9saWN5LmdldERlZmF1bHRFbnVtSWQoKSApOwotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgREVTQ1JfS0VZLCBkZXNjcmlwdG9yLmdldERlc2NyaXB0aW9uKCkgKTsKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIFNIT1JUTkFNRV9LRVksIGRlc2NyaXB0b3IuZ2V0U2hvcnROYW1lKCkgKTsKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIExPTkdOQU1FX0tFWSwgZGVzY3JpcHRvci5nZXRMb25nTmFtZSgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBJQ09OUEFUSF9LRVksIGRlc2NyaXB0b3IuZ2V0SWNvblBhdGgoKSApOwotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgSUNPTkJVTkRfS0VZLCBkZXNjcmlwdG9yLmdldEljb25CdW5kbGVJZCgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBIRUxQSURfS0VZLCBkZXNjcmlwdG9yLmdldENvbnRleHRIZWxwSWQoKSApOwotICAgIHNhdmVSZWxhdGlvbnNoaXBzKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIHBvbGljeS5nZXRSZWxhdGlvbnNoaXBzKCkgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGxvYWRMb2NhbFBvbGljeSggU3RyaW5nIHBvbGljeUlkLCBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtICkKLSAgewotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBnZXRQcmVmZXJlbmNlcygpOwotICAgIFNlcnZpY2VQb2xpY3lJbXBsICAgcG9saWN5ICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCBwb2xpY3lJZCApOwotICAgIERlc2NyaXB0b3JJbXBsICAgICAgZGVzY3JpcHRvciAgPSAoRGVzY3JpcHRvckltcGwpcG9saWN5LmdldERlc2NyaXB0b3IoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIHBhcmVudElkICAgID0gcHJlZmVyZW5jZXMuZ2V0KCBjcmVhdGVLZXkoIHBvbGljeUlkLCBQQVJFTlRfS0VZKSwgbnVsbCApOwotICAgIAotICAgIGlmKCBwYXJlbnRJZCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBJU2VydmljZVBvbGljeSBwYXJlbnRQb2xpY3kgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCBwYXJlbnRJZCApOwotICAgICAgCi0gICAgICBwb2xpY3kuc2V0UGFyZW50KCAoU2VydmljZVBvbGljeUltcGwpcGFyZW50UG9saWN5ICk7Ci0gICAgfQotICAgIAotICAgIHBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpLnNldE11dGFibGUoIHByZWZlcmVuY2VzLmdldEJvb2xlYW4oIGNyZWF0ZUtleSggcG9saWN5SWQsIE1VVEFCTEVfS0VZKSwgdHJ1ZSApICk7Ci0gICAgcG9saWN5LnNldEVudW1MaXN0SWQoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgRU5VTUxJU1RfS0VZKSwgbnVsbCApICk7Ci0gICAgcG9saWN5LnNldERlZmF1bHRFbnVtSWQoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgREVGRU5VTV9LRVkpLCBudWxsICkgKTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0aW9uKCBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIERFU0NSX0tFWSksIG51bGwgKSApOwotICAgIGRlc2NyaXB0b3Iuc2V0U2hvcnROYW1lKCBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIFNIT1JUTkFNRV9LRVkpLCBudWxsICkgKTsKLSAgICBkZXNjcmlwdG9yLnNldExvbmdOYW1lKCBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIExPTkdOQU1FX0tFWSksIG51bGwgKSApOwotICAgIGRlc2NyaXB0b3Iuc2V0SWNvblBhdGgoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgSUNPTlBBVEhfS0VZKSwgbnVsbCApICk7Ci0gICAgZGVzY3JpcHRvci5zZXRJY29uQnVuZGxlSWQoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgSUNPTkJVTkRfS0VZKSwgbnVsbCApICk7Ci0gICAgZGVzY3JpcHRvci5zZXRDb250ZXh0SGVscElkKCBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIEhFTFBJRF9LRVkpLCBudWxsICkgKTsKLSAgICBwb2xpY3kuc2V0UmVsYXRpb25zaGlwcyggbG9hZFJlbGF0aW9uc2hpcHMoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgcGxhdGZvcm0gKSApOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBJRWNsaXBzZVByZWZlcmVuY2VzIGdldFByZWZlcmVuY2VzKCkKLSAgewotICAgIHJldHVybiBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gY3JlYXRlU3RyaW5nTGlzdCggU3RyaW5nIHNwYWNlRGVsaW1pdGVkU3RyaW5nICkKLSAgewotICAgIFN0cmluZ1tdIHNwbGl0VmFsdWVzID0gc3BhY2VEZWxpbWl0ZWRTdHJpbmcuc3BsaXQoICIgIiApOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoIHNwbGl0VmFsdWVzICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVTcGFjZURlbGltaXRlZFN0cmluZyggTGlzdDxTdHJpbmc+IHN0cmluZ0xpc3QgKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3RyaW5nTGlzdC5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZyBpZCA9IHN0cmluZ0xpc3QuZ2V0KCBpbmRleCApOwotICAgICAgCi0gICAgICBidWZmZXIuYXBwZW5kKCBpZCApOwotICAgICAgCi0gICAgICBpZiggaW5kZXggPCAoc3RyaW5nTGlzdC5zaXplKCkgLSAxKSApIGJ1ZmZlci5hcHBlbmQoICcgJyApOwotICAgIH0KLQotICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlUmVsYXRpb25zaGlwcyggSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcywgU3RyaW5nIHBvbGljeUlkLCBMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMgKQotICB7Ci0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHJlbGF0aW9uc2hpcHMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBJUG9saWN5UmVsYXRpb25zaGlwICAgICAgICAgIHJlbGF0aW9uc2hpcCAgID0gcmVsYXRpb25zaGlwcy5nZXQoIGluZGV4ICk7Ci0gICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHBvbGljeUxpc3QgICAgID0gcmVsYXRpb25zaGlwLmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpOwotICAgICAgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiB0YXJnZXRQb2xpY2llcyA9IHJlbGF0aW9uc2hpcC5nZXRSZWxhdGVkUG9saWNpZXMoKTsKLSAgICAgIAotICAgICAgc2F2ZVBvbGljeVJlbGF0aW9uc2hpcCggaW5kZXgrMSwgcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBwb2xpY3lMaXN0LCBTT1VSQ0VfU1VGRklYICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IHRhcmdldEluZGV4ID0gMDsgdGFyZ2V0SW5kZXggPCB0YXJnZXRQb2xpY2llcy5zaXplKCk7IHRhcmdldEluZGV4KysgKQotICAgICAgewotICAgICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0IHRhcmdldFBvbGljeSA9IHRhcmdldFBvbGljaWVzLmdldCggdGFyZ2V0SW5kZXggKTsKLSAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICB0YXJnZXRTdWZmaXggPSBUQVJHRVRfU1VGRklYICsgKHRhcmdldEluZGV4KzEpOwotICAgICAgICAKLSAgICAgICAgc2F2ZVBvbGljeVJlbGF0aW9uc2hpcCggaW5kZXgrMSwgcHJlZmVyZW5jZXMsIHBvbGljeUlkLCB0YXJnZXRQb2xpY3ksIHRhcmdldFN1ZmZpeCApOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiBsb2FkUmVsYXRpb25zaGlwcyggSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcywgU3RyaW5nIHBvbGljeUlkLCBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtICkKLSAgewotICAgIExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyA9IG5ldyBWZWN0b3I8SVBvbGljeVJlbGF0aW9uc2hpcD4oKTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIHJlbENvdW50ICAgICAgPSAxOwotICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgc291cmNlTGlzdCAgICA9IGxvYWRQb2xpY3lSZWxhdGlvbnNoaXAoIHJlbENvdW50LCBwcmVmZXJlbmNlcywgcGxhdGZvcm0sIHBvbGljeUlkLCBTT1VSQ0VfU1VGRklYICk7Ci0gICAgCi0gICAgd2hpbGUoIHNvdXJjZUxpc3QgIT0gbnVsbCApCi0gICAgewotICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb3VudCAgPSAxOwotICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdWZmaXggPSBUQVJHRVRfU1VGRklYICsgdGFyZ2V0Q291bnQ7Ci0gICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHRhcmdldExpc3QgICA9IGxvYWRQb2xpY3lSZWxhdGlvbnNoaXAoIHJlbENvdW50LCBwcmVmZXJlbmNlcywgcGxhdGZvcm0sIHBvbGljeUlkLCB0YXJnZXRTdWZmaXggKTsKLSAgICAgIExpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gdGFyZ2V0cyAgICAgID0gbmV3IFZlY3RvcjxJUG9saWN5RW51bWVyYXRpb25MaXN0PigpOwotICAgICAgCi0gICAgICB3aGlsZSggdGFyZ2V0TGlzdCAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgdGFyZ2V0cy5hZGQoIHRhcmdldExpc3QgKTsKLSAgICAgICAgdGFyZ2V0Q291bnQrKzsKLSAgICAgICAgdGFyZ2V0U3VmZml4ID0gVEFSR0VUX1NVRkZJWCArIHRhcmdldENvdW50OwotICAgICAgICB0YXJnZXRMaXN0ID0gbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggcmVsQ291bnQsIHByZWZlcmVuY2VzLCBwbGF0Zm9ybSwgcG9saWN5SWQsIHRhcmdldFN1ZmZpeCApOwotICAgICAgfQotICAgICAgCi0gICAgICByZWxhdGlvbnNoaXBzLmFkZCggbmV3IFBvbGljeVJlbGF0aW9uc2hpcEltcGwoIHNvdXJjZUxpc3QsIHRhcmdldHMgKSApOwotICAgICAgcmVsQ291bnQrKzsKLSAgICAgIHNvdXJjZUxpc3QgPSBsb2FkUG9saWN5UmVsYXRpb25zaGlwKCByZWxDb3VudCwgcHJlZmVyZW5jZXMsIHBsYXRmb3JtLCBwb2xpY3lJZCwgU09VUkNFX1NVRkZJWCApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVsYXRpb25zaGlwczsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlUG9saWN5UmVsYXRpb25zaGlwKCBpbnQgICAgICAgICAgICAgICAgICAgIHJlbENvdW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRWNsaXBzZVByZWZlcmVuY2VzICAgIHByZWZlcmVuY2VzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIHBvbGljeUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgZW51bUxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBrZXlTdWZmaXggKQotICB7Ci0gICAgU3RyaW5nIGtleSAgID0gY3JlYXRlS2V5KCBwb2xpY3lJZCwgUkVMX0tFWSArIHJlbENvdW50ICsga2V5U3VmZml4ICk7Ci0gICAgU3RyaW5nIHZhbHVlID0gY3JlYXRlUmVsYXRpb25zaGlwVmFsdWUoIGVudW1MaXN0ICk7Ci0gICAgCi0gICAgcHJlZmVyZW5jZXMucHV0KCBrZXksIHZhbHVlICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggaW50ICAgICAgICAgICAgICAgICAgICAgICByZWxDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRWNsaXBzZVByZWZlcmVuY2VzICAgICAgIHByZWZlcmVuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgcGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICBwb2xpY3lJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgIGtleVN1ZmZpeCApCi0gIHsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgIGtleSAgICAgID0gY3JlYXRlS2V5KCBwb2xpY3lJZCwgUkVMX0tFWSArIHJlbENvdW50ICsga2V5U3VmZml4ICk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICB2YWx1ZSAgICA9IHByZWZlcmVuY2VzLmdldCgga2V5LCAiIiApOyAvLyROT04tTkxTLTEkCi0gICAgSVBvbGljeUVudW1lcmF0aW9uTGlzdCBlbnVtTGlzdCA9IG51bGw7Ci0gICAgCi0gICAgaWYoICF2YWx1ZS5lcXVhbHMoICIiICkgKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgU3RyaW5nW10gICAgICAgICAgICAgICAgICAgIHNwbGl0VmFsdWUgICAgID0gdmFsdWUuc3BsaXQoICIgIiApOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UG9saWN5SWQgPSBzcGxpdFZhbHVlWzBdOwotICAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgICAgIHRhcmdldFBvbGljeSAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggdGFyZ2V0UG9saWN5SWQgKTsKLSAgICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBpdGVtcyAgICAgICAgICA9IG5ldyBWZWN0b3I8SVN0YXRlRW51bWVyYXRpb25JdGVtPigpOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDE7IGluZGV4IDwgc3BsaXRWYWx1ZS5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbSA9IHBsYXRmb3JtLmdldFN0YXRlSXRlbUVudW1lcmF0aW9uKCBzcGxpdFZhbHVlW2luZGV4XSApOwotICAgICAgICAKLSAgICAgICAgaXRlbXMuYWRkKCBpdGVtICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGVudW1MaXN0ID0gbmV3IFBvbGljeUVudW1lcmF0aW9uTGlzdEltcGwoIGl0ZW1zLCB0YXJnZXRQb2xpY3kgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGVudW1MaXN0OwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgd2lsbCBjcmVhdGUgYSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIGVudW1lcmF0aW9ucyBpZC4KLSAgICogVGhlIGZpcnN0IGlkIGluIHRoZSBsaXN0IHdpbGwgYmUgdGhlIHBvbGljeSBpZCBmb3IgdGhpcyByZWxhdGlvbnNoaXAuCi0gICAqIFN1YnNlcXVlbnQgaWRzIHdpbGwgYmUgZW51bWVyYXRpb24gaXRlbSBpZHMuCi0gICAqIAotICAgKiBAcGFyYW0gZW51bUxpc3QKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVJlbGF0aW9uc2hpcFZhbHVlKCBJUG9saWN5RW51bWVyYXRpb25MaXN0IGVudW1MaXN0ICkKLSAgewotICAgIExpc3Q8U3RyaW5nPiAgICAgICAgICAgICAgICBzdHJpbmdMaXN0ID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGl0ZW1MaXN0ICAgPSBlbnVtTGlzdC5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLSAgICAKLSAgICBzdHJpbmdMaXN0LmFkZCggZW51bUxpc3QuZ2V0UG9saWN5KCkuZ2V0SWQoKSApOwotICAgIAotICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gOiBpdGVtTGlzdCApCi0gICAgewotICAgICAgc3RyaW5nTGlzdC5hZGQoIGl0ZW0uZ2V0SWQoKSApOyAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBjcmVhdGVTcGFjZURlbGltaXRlZFN0cmluZyggc3RyaW5nTGlzdCApOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIHNhdmUoIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMsIFN0cmluZyBwb2xpY3lJZCwgU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlICkKLSAgewotICAgIGlmKCB2YWx1ZSAhPSBudWxsICYmICF2YWx1ZS5lcXVhbHMoICIiICkgKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJlZmVyZW5jZXMucHV0KCBjcmVhdGVLZXkocG9saWN5SWQsa2V5KSwgdmFsdWUgKTsgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVLZXkoIFN0cmluZyBpZCwgU3RyaW5nIGtleSApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcig1MCk7Ci0gICAgCi0gICAgYnVmZmVyLmFwcGVuZCggQkFTRV9LRVkgKTsKLSAgICBidWZmZXIuYXBwZW5kKCBpZCApOwotICAgIGJ1ZmZlci5hcHBlbmQoICcuJyApOwotICAgIGJ1ZmZlci5hcHBlbmQoIGtleSApOwotICAgIAotICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9Qb2xpY3lTdGF0ZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvUG9saWN5U3RhdGVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYTRiNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9Qb2xpY3lTdGF0ZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEyMjEgICAyMTM0OTIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAxMDkgICAyMTQ4MTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMjUgICAyMjIwOTUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlByb2plY3RTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklQcmVmZXJlbmNlc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyOwotCi1wdWJsaWMgY2xhc3MgUG9saWN5U3RhdGVJbXBsIGltcGxlbWVudHMgSVBvbGljeVN0YXRlCi17Ci0gIHByaXZhdGUgTGlzdDxJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcj4gc3RhdGVDaGFuZ2VMaXN0ZW5lcnM7Ci0gIHByaXZhdGUgTGlzdDxJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcj4gc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQ7Ci0gIHByaXZhdGUgSVByZWZlcmVuY2VzU2VydmljZSAgICAgICAgICAgICAgc2VydmljZTsKLSAgcHJpdmF0ZSBJUHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGU7Ci0gIHByaXZhdGUgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgICAgICAgICAgcG9saWN5OwotICBwcml2YXRlIE1hcDxTdHJpbmcsVGFibGVFbnRyeT4gICAgICAgICAgIHRhYmxlOwotICBwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICAgICAgICAgIHBsYXRmb3JtOwotCi0gIHB1YmxpYyBQb2xpY3lTdGF0ZUltcGwoIElTZXJ2aWNlUG9saWN5IHBvbGljeSwgSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmljZSAgICAgICAgICAgICAgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKTsKLSAgICB0aGlzLnBsYXRmb3JtICAgICAgICAgICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgdGhpcy5wcm9qZWN0ICAgICAgICAgICAgICA9IHByb2plY3Q7Ci0gICAgdGhpcy5wb2xpY3kgICAgICAgICAgICAgICA9IHBvbGljeTsKLSAgICB0aGlzLm11dGFibGUgICAgICAgICAgICAgID0gcG9saWN5LmlzUHJlZGVmaW5lZCgpID8gZmFsc2UgOiB0cnVlOwotICAgIHRoaXMudGFibGUgICAgICAgICAgICAgICAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFRhYmxlRW50cnk+KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNvbW1pdENoYW5nZXMoKQotICB7Ci0gICAgLy8gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhpcyBwb2xpY3kgaXMgbm90IG11dGFibGUuCi0gICAgaWYoICFtdXRhYmxlICkgcmV0dXJuOwotICAgIAotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBudWxsOwotICAgIAotICAgIGlmKCBwcm9qZWN0ID09IG51bGwgKQotICAgIHsKLSAgICAgIHByZWZlcmVuY2VzID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJlZmVyZW5jZXMgPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICB9Ci0KLSAgICBmb3IoIE1hcC5FbnRyeTxTdHJpbmcsIFRhYmxlRW50cnk+IGVudHJ5IDogdGFibGUuZW50cnlTZXQoKSApCi0gICAgewotICAgICAgU3RyaW5nICAgICBrZXkgICAgICAgID0gZW50cnkuZ2V0S2V5KCk7Ci0gICAgICBTdHJpbmcgICAgIHN0b3JlS2V5ICAgPSBtYWtlU3RvcmVLZXkoIGtleSApOwotICAgICAgVGFibGVFbnRyeSB0YWJsZUVudHJ5ID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgIFN0cmluZyAgICAgdmFsdWUgICAgICA9IHRhYmxlRW50cnkudmFsdWU7Ci0gICAgICAKLSAgICAgIGlmKCB2YWx1ZSAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSB0YWJsZUVudHJ5IHZhbHVlIHNvIHRoYXQgZ2V0VmFsdWUgd2lsbCBnZXQgdGhlIG9sZCB2YWx1ZS4KLSAgICAgICAgdGFibGVFbnRyeS52YWx1ZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGdldFZhbHVlKCBrZXkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFJlc3RvcmUgdGhlIHRhYmxlRW50cnkgdmFsdWU7Ci0gICAgICAgIHRhYmxlRW50cnkudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAKLSAgICAgICAgaWYoICF2YWx1ZS5lcXVhbHMoIG9sZFZhbHVlICkgKSAKLSAgICAgICAgewotICAgICAgICAgIHByZWZlcmVuY2VzLnB1dCggc3RvcmVLZXksIHRhYmxlRW50cnkudmFsdWUgKTsKLSAgICAgICAgICBmaXJlUG9saWN5U3RhdGVDaGFuZ2UoIHN0YXRlQ2hhbmdlTGlzdGVuZXJzT25seU9uQ29tbWl0LCBrZXksIG9sZFZhbHVlLCB2YWx1ZSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIElFY2xpcHNlUHJlZmVyZW5jZXNbXSBnZXROb2RlcygpCi0gIHsKLSAgICBJRWNsaXBzZVByZWZlcmVuY2VzW10gcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiggcHJvamVjdCAhPSBudWxsICYmIHBsYXRmb3JtLmlzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0KSApCi0gICAgeyAKLSAgICAgIHJlc3VsdCAgICA9IG5ldyBJRWNsaXBzZVByZWZlcmVuY2VzWzJdOwotICAgICAgcmVzdWx0WzBdID0gbmV3IFByb2plY3RTY29wZSggcHJvamVjdCApLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7Ci0gICAgICByZXN1bHRbMV0gPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBuZXcgSUVjbGlwc2VQcmVmZXJlbmNlc1sxXTsKLSAgICAgIHJlc3VsdFswXSA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzY2FyZENoYW5nZXMoKQotICB7Ci0gICAgaWYoICFtdXRhYmxlICkgcmV0dXJuOwotICAgIAotICAgIGZvciggVGFibGVFbnRyeSBlbnRyeSA6IHRhYmxlLnZhbHVlcygpICkKLSAgICB7Ci0gICAgICBlbnRyeS52YWx1ZSA9IG51bGw7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZXN0b3JlRGVmYXVsdHMoKQotICB7Ci0gICAgLy8gV2Ugd2FudCB0byByZXN0b3JlIHRoZSBzZXR0aW5nIHRvIHRoZXJlIGRlZmF1bHQgc3RhdGUsIGJ1dCB3ZSBkb24ndAotICAgIC8vIHdhbnQgY2hhbmdlIHRoZSBiYWNrZW5kIGVjbGlwc2UgcHJlZmVyZW5jZXMsIHNpbmNlIHRoZSB1c2VyIG1pZ2h0IG5vdAotICAgIC8vIGNvbW1pdCB0aGVzZSBjaGFuZ2VzLiAgVGhlcmVmb3JlLCB3ZSB3aWxsIHNldCB0aGUgdmFsdWVzIGZvciBhbGwgdGhlCi0gICAgLy8gdGFibGUgZW50cmllcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlLiAgCi0gICAgaWYoIHByb2plY3QgPT0gbnVsbCApCi0gICAgewotICAgICAgZm9yKCBUYWJsZUVudHJ5IGVudHJ5IDogdGFibGUudmFsdWVzKCkgKQotICAgICAgewotICAgICAgICAgZW50cnkudmFsdWUgPSBlbnRyeS5kZWZhdWx0VmFsdWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBOb3RlOiBzaW5jZSB3ZSBhcmUgcmVzdG9yaW5nIHRoZSBzdGF0ZSBmb3IgYSBwcm9qZWN0IHdlIG5lZWQgdG8gZW5zdXJlCi0gICAgICAvLyAgICAgICB0aGF0IG9ubHkgdGhlIGluc3RhbmNlIHNjb3BlIHZhbHVlcyBhcmUgdXNlZC4gIChpZS4gd2Ugd2FudCB0bwotICAgICAgLy8gICAgICAgaWdub3JlIHByb2plY3Qgc2NvcGUgdmFsdWVzLikKLSAgICAgIElFY2xpcHNlUHJlZmVyZW5jZXNbXSBub2RlcyA9IG5ldyBJRWNsaXBzZVByZWZlcmVuY2VzW117bmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApfTsKLSAgICAgIAotICAgICAgZm9yKCBNYXAuRW50cnk8U3RyaW5nLFRhYmxlRW50cnk+IGVudHJ5IDogdGFibGUuZW50cnlTZXQoKSApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyAgICAgc3RvcmVLZXkgICAgID0gbWFrZVN0b3JlS2V5KCBlbnRyeS5nZXRLZXkoKSApOwotICAgICAgICBUYWJsZUVudHJ5IHRhYmxlRW50cnkgICA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgIFN0cmluZyAgICAgZGVmYXVsdFZhbHVlID0gIiI7Ci0gICAgICAgIAotICAgICAgICBpZiggdGFibGVFbnRyeS5kZWZhdWx0VmFsdWUgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0YWJsZUVudHJ5LmRlZmF1bHRWYWx1ZTsgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHRhYmxlRW50cnkudmFsdWUgPSBzZXJ2aWNlLmdldCggc3RvcmVLZXksIGRlZmF1bHRWYWx1ZSwgbm9kZXMgKTsgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgfQotICAKLSAgLyoqIAotICAgKiBUaGUgbWV0aG9kIGdldHMgdGhlIHZhbHVlIGZyb20gdGhlIGZvbGxvd2luZyBwbGFjZXMgaW4gdGhlIGdpdmVuIG9yZGVyLgotICAgKiAKLSAgICogMSkgRnJvbSB0aGUgbG9jYWwgdGFibGUuCi0gICAqIDIpIEZyb20gdGhlIHByZWZlcmVuY2Ugc3RvcmUgbm9kZXMuICBOb3RlOiB0aGlzIGNvdWxkIGluY2x1ZGUgc2VhcmNoaW5nCi0gICAqICAgICAgICAgdGhlIHByb2plY3QgcHJlZmVyZW5jZSBzdG9yZSBhbmQgdGhlIHBsdWdpbiBwcmVmZXJlbmNlIHN0b3JlLgotICAgKiAzKSBGcm9tIHRoZSBkZWZhdWx0IGluIHRoZSBsb2NhbCB0YWJsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoU3RyaW5nIGtleSkKLSAgewotICAgIFN0cmluZyAgICAgcmVzdWx0ID0gbnVsbDsKLSAgICBUYWJsZUVudHJ5IGVudHJ5ICA9IHRhYmxlLmdldCgga2V5ICk7Ci0gICAgCi0gICAgaWYoIGVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGVudHJ5ID0gbmV3IFRhYmxlRW50cnkoKTsKLSAgICAgIHRhYmxlLnB1dCgga2V5LCBlbnRyeSApOwotICAgIH0KLSAgICAKLSAgICBpZiggcHJvamVjdCA9PSBudWxsIHx8Ci0gICAgICAgICggcHJvamVjdCAhPSBudWxsICYmIHBsYXRmb3JtLmlzUHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggcHJvamVjdCApICkgKQotICAgIHsgCi0gICAgICAgIHJlc3VsdCA9IGVudHJ5LnZhbHVlOwotICAgIH0KLSAgICAKLSAgICBpZiggcmVzdWx0ID09IG51bGwgKQotICAgIHsKLSAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBsb2NhbCB2YWx1ZSBmb3IgdGhpcyBrZXkgc28gd2Ugd2lsbCBsb29rIGluIHRoZQotICAgICAgLy8gcHJlZmVyZW5jZSBzdG9yZS4KLSAgICAgIFN0cmluZyBkZWZhdWx0VmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHN0b3JlS2V5ICAgICA9IG1ha2VTdG9yZUtleSgga2V5ICk7Ci0gICAgICAKLSAgICAgIGlmKCBlbnRyeS5kZWZhdWx0VmFsdWUgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGVudHJ5LmRlZmF1bHRWYWx1ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmVzdWx0ID0gc2VydmljZS5nZXQoIHN0b3JlS2V5LCBkZWZhdWx0VmFsdWUsIGdldE5vZGVzKCkgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIG1ha2VTdG9yZUtleSggU3RyaW5nIGtleSApCi0gIHsKLSAgICByZXR1cm4gcG9saWN5LmdldElkKCkgKyAiLiIgKyBrZXk7ICAgIC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNNdXRhYmxlKCkKLSAgewotICAgIHJldHVybiBtdXRhYmxlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcHV0RGVmYXVsdFZhbHVlKCBTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdFZhbHVlLCBib29sZWFuIG92ZXJyaWRlRXhpc3RpbmcgKQotICB7Ci0gICAgaWYoICFtdXRhYmxlICkgcmV0dXJuOwotICAgIAotICAgIFRhYmxlRW50cnkgZW50cnkgPSB0YWJsZS5nZXQoIGtleSApOwotICAgIAotICAgIGlmKCBlbnRyeSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlbnRyeSA9IG5ldyBUYWJsZUVudHJ5KCk7Ci0gICAgICB0YWJsZS5wdXQoIGtleSwgZW50cnkgKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIGVudHJ5LmRlZmF1bHRWYWx1ZSA9PSBudWxsIHx8IG92ZXJyaWRlRXhpc3RpbmcgKQotICAgIHsKLSAgICAgIGVudHJ5LmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0gICAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBwdXRWYWx1ZShTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiggIW11dGFibGUgKSByZXR1cm47Ci0gICAgCi0gICAgVGFibGVFbnRyeSBlbnRyeSA9IHRhYmxlLmdldCgga2V5ICk7Ci0gICAgCi0gICAgaWYoIGVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGVudHJ5ID0gbmV3IFRhYmxlRW50cnkoKTsKLSAgICAgIHRhYmxlLnB1dCgga2V5LCBlbnRyeSApOwotICAgIH0KLQotICAgIFN0cmluZyBvbGRWYWx1ZSA9IGdldFZhbHVlKCBrZXkgKTsKLSAgICAKLSAgICBlbnRyeS52YWx1ZSA9IHZhbHVlOwotICAgIGZpcmVQb2xpY3lTdGF0ZUNoYW5nZSggc3RhdGVDaGFuZ2VMaXN0ZW5lcnMsIGtleSwgb2xkVmFsdWUsIHZhbHVlICk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbnRlcm5hbFNldE11dGFibGUoIGJvb2xlYW4gbXV0YWJsZSApCi0gIHsKLSAgICB0aGlzLm11dGFibGUgPSBtdXRhYmxlOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE11dGFibGUoYm9vbGVhbiBtdXRhYmxlKQotICB7Ci0gICAgaWYoIHBvbGljeS5pc1ByZWRlZmluZWQoKSApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggIkF0dGVtcHQgdG8gc2V0IG11dGFiaWxpdHkgb24gYSBwcmVkZWZpbmVkIHNlcnZpY2UgcG9saWN5LiIsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5tdXRhYmxlID0gbXV0YWJsZTsKLSAgICB9Ci0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgYWRkUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcihJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciwgYm9vbGVhbiBub3RpZnlPbkNvbW1pdE9ubHkgKQotICB7Ci0gICAgaWYoIG5vdGlmeU9uQ29tbWl0T25seSApCi0gICAgewotICAgICAgaWYoIHN0YXRlQ2hhbmdlTGlzdGVuZXJzT25seU9uQ29tbWl0ID09IG51bGwgKQotICAgICAgewotICAgICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVyc09ubHlPbkNvbW1pdCA9IG5ldyBWZWN0b3I8SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI+KCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJzT25seU9uQ29tbWl0LmFkZCggbGlzdGVuZXIgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmKCBzdGF0ZUNoYW5nZUxpc3RlbmVycyA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcnMgPSBuZXcgVmVjdG9yPElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPigpOwotICAgICAgfQotICAgICAgCi0gICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVycy5hZGQoIGxpc3RlbmVyICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyKQotICB7Ci0gICAgaWYoIHN0YXRlQ2hhbmdlTGlzdGVuZXJzICE9IG51bGwgKQotICAgIHsKLSAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJzLnJlbW92ZSggbGlzdGVuZXIgKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHN0YXRlQ2hhbmdlTGlzdGVuZXJzT25seU9uQ29tbWl0ICE9IG51bGwgKQotICAgIHsKLSAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJzT25seU9uQ29tbWl0LnJlbW92ZSggbGlzdGVuZXIgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBmaXJlUG9saWN5U3RhdGVDaGFuZ2UoIExpc3Q8SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI+IGxpc3RlbmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSApCi0gIHsKLSAgICBpZiggbGlzdGVuZXJzICE9IG51bGwgKQotICAgIHsKLSAgICAgIGZvciggSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMgKSAgCi0gICAgICB7Ci0gICAgICAgIGxpc3RlbmVyLnBvbGljeVN0YXRlQ2hhbmdlKCBwb2xpY3ksIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlICk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFRhYmxlRW50cnkKLSAgewotICAgIFN0cmluZyB2YWx1ZTsKLSAgICBTdHJpbmcgZGVmYXVsdFZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1NlcnZpY2VQb2xpY3lJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1NlcnZpY2VQb2xpY3lJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZmYzMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDIxNCAgIDIxODk5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDb25jdXJyZW50IGV4Y2VwdGlvbiBmaXgKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5RW51bWVyYXRpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5UmVsYXRpb25zaGlwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlBvbGljeUVudW1lcmF0aW9uTGlzdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlBvbGljeVJlbGF0aW9uc2hpcEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklTdGF0dXNDaGFuZ2VMaXN0ZW5lcjsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lJbXBsIGltcGxlbWVudHMgSVNlcnZpY2VQb2xpY3kKLXsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWZpbmVkOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOwotICBwcml2YXRlIFNlcnZpY2VQb2xpY3lJbXBsICAgICAgICAgICAgICAgIHBhcmVudDsKLSAgcHJpdmF0ZSBEZXNjcmlwdG9ySW1wbCAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOwotICBwcml2YXRlIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgICAgICAgICAgIGNvbW1pdHRlZENoaWxkcmVuOwotICBwcml2YXRlIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgICAgICAgICAgIGNoaWxkcmVuOwotICBwcml2YXRlIFBvbGljeVN0YXRlSW1wbCAgICAgICAgICAgICAgICAgIHBvbGljeVN0YXRlOwotICBwcml2YXRlIE1hcDxJUHJvamVjdCwgUG9saWN5U3RhdGVJbXBsPiAgIHByb2plY3RQb2xpY3lTdGF0ZXM7Ci0gIHByaXZhdGUgTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiAgICAgICAgcmVsYXRpb25zaGlwTGlzdDsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPiBjaGlsZENoYW5nZUxpc3RlbmVyczsKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsICAgICAgICBwbGF0Zm9ybTsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtTGlzdElkOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFbnVtSWQ7Ci0gIHByaXZhdGUgTGlzdDxJU3RhdHVzQ2hhbmdlTGlzdGVuZXI+ICAgICAgc3RhdHVzQ2hhbmdlTGlzdGVuZXJzOyAKLSAgcHJpdmF0ZSBJU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7Ci0gIAotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRQYXJlbnQ7Ci0gIHByaXZhdGUgTGlzdDxVbnJlc29sdmVkUmVsYXRpb25zaGlwPiAgICAgdW5yZXNvbHZlZFJlbGF0aW9uc2hpcExpc3Q7Ci0gIAotICBwdWJsaWMgU2VydmljZVBvbGljeUltcGwoIGJvb2xlYW4gaXNQcmVkZWZpbmVkLCBTdHJpbmcgaWQsIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgcGxhdGZvcm0gKQotICB7Ci0gICAgdGhpcy5wcmVkZWZpbmVkICAgICAgICAgICAgICAgICA9IGlzUHJlZGVmaW5lZDsgIAotICAgIHRoaXMuaWQgICAgICAgICAgICAgICAgICAgICAgICAgPSBpZDsKLSAgICB0aGlzLmNoaWxkcmVuICAgICAgICAgICAgICAgICAgID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICB0aGlzLnJlbGF0aW9uc2hpcExpc3QgICAgICAgICAgID0gbmV3IFZlY3RvcjxJUG9saWN5UmVsYXRpb25zaGlwPigpOwotICAgIHRoaXMudW5yZXNvbHZlZFJlbGF0aW9uc2hpcExpc3QgPSBuZXcgVmVjdG9yPFVucmVzb2x2ZWRSZWxhdGlvbnNoaXA+KCk7Ci0gICAgdGhpcy5wb2xpY3lTdGF0ZSAgICAgICAgICAgICAgICA9IG5ldyBQb2xpY3lTdGF0ZUltcGwoIHRoaXMsIG51bGwgKTsKLSAgICB0aGlzLnBsYXRmb3JtICAgICAgICAgICAgICAgICAgID0gcGxhdGZvcm07ICAKLSAgICB0aGlzLmNoaWxkQ2hhbmdlTGlzdGVuZXJzICAgICAgID0gbmV3IFZlY3RvcjxJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcj4oKTsKLSAgICB0aGlzLnByb2plY3RQb2xpY3lTdGF0ZXMgICAgICAgID0gbmV3IEhhc2hNYXA8SVByb2plY3QsIFBvbGljeVN0YXRlSW1wbD4oKTsKLSAgICB0aGlzLnN0YXR1cyAgICAgICAgICAgICAgICAgICAgID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNQcmVkZWZpbmVkKCkKLSAgewotICAgIHJldHVybiBwcmVkZWZpbmVkOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gaWQ7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UGFyZW50KCBTZXJ2aWNlUG9saWN5SW1wbCBwYXJlbnQgKQotICB7Ci0gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgCi0gICAgaWYoIHBhcmVudCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBwYXJlbnQuYWRkQ2hpbGQoIHRoaXMsIGZhbHNlICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjb21taXRDaGFuZ2VzKCkKLSAgewotICAgIHBvbGljeVN0YXRlLmNvbW1pdENoYW5nZXMoKTsKLSAgICAKLSAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgY2hpbGRyZW4gaW4gdGhlIGNvbW1pdHRlZENoaWxkcmVuIG9iamVjdC4KLSAgICBjb21taXR0ZWRDaGlsZHJlbiA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCBjaGlsZHJlbiApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNjYXJkQ2hhbmdlcygpCi0gIHsKLSAgICBwb2xpY3lTdGF0ZS5kaXNjYXJkQ2hhbmdlcygpOwotICAgICAgICAKLSAgICBmaXJlQ2hpbGRDaGFuZ2VzRHVldG9EaXNjYXJkKCk7Ci0gICAgCi0gICAgLy9SZXN0b3JlIGNoaWxkcmVuLgotICAgIGNoaWxkcmVuID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oIGNvbW1pdHRlZENoaWxkcmVuICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0PElTZXJ2aWNlUG9saWN5PiBnZXRDaGlsZHJlbigpCi0gIHsKLSAgICByZXR1cm4gY2hpbGRyZW47Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGRDaGlsZCggU2VydmljZVBvbGljeUltcGwgY2hpbGQsIGJvb2xlYW4gZmlyZUV2ZW50ICkKLSAgewotICAgIGNoaWxkcmVuLmFkZCggY2hpbGQgKTsKLSAgICAgIAotICAgIGlmKCBmaXJlRXZlbnQgKQotICAgIHsKLSAgICAgIGZpcmVDaGlsZENoYW5nZUV2ZW50KCBjaGlsZCwgdHJ1ZSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlQ2hpbGQoSVNlcnZpY2VQb2xpY3kgcG9saWN5VG9SZW1vdmUgKQotICB7Ci0gICAgaWYoICFwb2xpY3lUb1JlbW92ZS5pc1ByZWRlZmluZWQoKSApCi0gICAgewotICAgICAgLy8gUmVtb3ZlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhpcyBwb2xpY3kgZmlyc3QuCi0gICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGlsZFBvbGljaWVzID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oIHBvbGljeVRvUmVtb3ZlIC5nZXRDaGlsZHJlbigpICk7Ci0gICAgICAKLSAgICAgIGZvciggSVNlcnZpY2VQb2xpY3kgY2hpbGRQb2xpY3kgOiBjaGlsZFBvbGljaWVzICkKLSAgICAgIHsKLSAgICAgICAgcG9saWN5VG9SZW1vdmUucmVtb3ZlQ2hpbGQoIGNoaWxkUG9saWN5ICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGJvb2xlYW4gcmVtb3ZlZCA9IGNoaWxkcmVuLnJlbW92ZSggcG9saWN5VG9SZW1vdmUgICk7Ci0gICAgICAKLSAgICAgIGlmKCByZW1vdmVkICkKLSAgICAgIHsKLSAgICAgICAgcGxhdGZvcm0ucmVtb3ZlUG9saWN5KCBwb2xpY3lUb1JlbW92ZSApOwotICAgICAgICBmaXJlQ2hpbGRDaGFuZ2VFdmVudCggcG9saWN5VG9SZW1vdmUgLCBmYWxzZSApOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBJRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yKCkKLSAgewotICAgIGlmKCBkZXNjcmlwdG9yID09IG51bGwgKQotICAgIHsKLSAgICAgIGRlc2NyaXB0b3IgPSBuZXcgRGVzY3JpcHRvckltcGwoKTsgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZGVzY3JpcHRvcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRvciggRGVzY3JpcHRvckltcGwgZGVzY3JpcHRvciApCi0gIHsKLSAgICB0aGlzLmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwotICB9Ci0KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFBhcmVudFBvbGljeSgpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0KLSAgcHVibGljIElQb2xpY3lTdGF0ZSBnZXRQb2xpY3lTdGF0ZSgpCi0gIHsKLSAgICByZXR1cm4gcG9saWN5U3RhdGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUG9saWN5U3RhdGUgZ2V0UG9saWN5U3RhdGUoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgUG9saWN5U3RhdGVJbXBsIHByb2plY3RQb2xpY3lTdGF0ZSA9IHByb2plY3RQb2xpY3lTdGF0ZXMuZ2V0KCBwcm9qZWN0ICk7Ci0gICAgCi0gICAgaWYoIHByb2plY3RQb2xpY3lTdGF0ZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBwcm9qZWN0UG9saWN5U3RhdGUgPSBuZXcgUG9saWN5U3RhdGVJbXBsKCB0aGlzLCBwcm9qZWN0ICk7Ci0gICAgICBwcm9qZWN0UG9saWN5U3RhdGUuaW50ZXJuYWxTZXRNdXRhYmxlKCBwb2xpY3lTdGF0ZS5pc011dGFibGUoKSApOwotICAgICAgcHJvamVjdFBvbGljeVN0YXRlcy5wdXQoIHByb2plY3QsIHByb2plY3RQb2xpY3lTdGF0ZSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcHJvamVjdFBvbGljeVN0YXRlOwotICB9Ci0gIAotICBwdWJsaWMgSVBvbGljeVN0YXRlRW51bSBnZXRQb2xpY3lTdGF0ZUVudW0oKQotICB7Ci0gICAgRW51bWVyYXRpb25TdGF0ZUltcGwgbmV3RW51bSA9IG51bGw7Ci0gICAgCi0gICAgaWYoIGVudW1MaXN0SWQgIT0gbnVsbCApCi0gICAgewotICAgICAgbmV3RW51bSA9IG5ldyBFbnVtZXJhdGlvblN0YXRlSW1wbCggZW51bUxpc3RJZCwgZGVmYXVsdEVudW1JZCwgcG9saWN5U3RhdGUgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5ld0VudW07Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUG9saWN5U3RhdGVFbnVtIGdldFBvbGljeVN0YXRlRW51bSggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBFbnVtZXJhdGlvblN0YXRlSW1wbCBuZXdFbnVtID0gbnVsbDsKLSAgICAKLSAgICBpZiggZW51bUxpc3RJZCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBuZXdFbnVtID0gbmV3IEVudW1lcmF0aW9uU3RhdGVJbXBsKCBlbnVtTGlzdElkLCBkZWZhdWx0RW51bUlkLCBnZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuZXdFbnVtOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UG9saWN5U3RhdGUoIFBvbGljeVN0YXRlSW1wbCBwb2xpY3lTdGF0ZSApCi0gIHsKLSAgICB0aGlzLnBvbGljeVN0YXRlID0gcG9saWN5U3RhdGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cygpCi0gIHsKLSAgICAvLyBSZW1vdmUgYWxsIGxvY2FsIGNoaWxkcmVuIGZyb20gdGhlIHRyZWUKLSAgICAvLyBKYXZhIHdpbGwgbm90IGxldCB5b3UgcmVtb3ZlIGFuIGl0ZW0gZnJvbSBhIGNvbGxlY3Rpb24KLSAgICAvLyB0aGF0IGlzIGJlaW5nIGl0ZXJhdGVkIG92ZXIsIHNvIHdlIG5lZWQgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5Ci0gICAgLy8gY29weSBvZiB0aGUgY2hpbGRyZW4gY29sbGVjdGlvbiB0byBpdGVyYXRvciBvdmVyLgotICAgIFZlY3RvcjxJU2VydmljZVBvbGljeT4gdGVtcENoaWxkcmVuID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oIGNoaWxkcmVuICk7Ci0gICAgCi0gICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IHRlbXBDaGlsZHJlbiApCi0gICAgewotICAgICAgaWYoICFjaGlsZC5pc1ByZWRlZmluZWQoKSApCi0gICAgICB7Ci0gICAgICAgIHJlbW92ZUNoaWxkKCBjaGlsZCApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwb2xpY3lTdGF0ZS5yZXN0b3JlRGVmYXVsdHMoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVzdG9yZURlZmF1bHRzKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIFBvbGljeVN0YXRlSW1wbCBzdGF0ZUltcGwgPSBwcm9qZWN0UG9saWN5U3RhdGVzLmdldCggcHJvamVjdCApOwotICAgIAotICAgIGlmKCBzdGF0ZUltcGwgIT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdGVJbXBsLnJlc3RvcmVEZWZhdWx0cygpOwotICAgIH0KLSAgfQotICAKLSAgCi0gIHB1YmxpYyBMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IGdldFJlbGF0aW9uc2hpcHMoKQotICB7Ci0gICAgcmV0dXJuIHJlbGF0aW9uc2hpcExpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlbGF0aW9uc2hpcHMoTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiByZWxhdGlvbnNoaXBzKQotICB7Ci0gICAgaWYoICFwcmVkZWZpbmVkICkKLSAgICB7Ci0gICAgICB0aGlzLnJlbGF0aW9uc2hpcExpc3QgPSByZWxhdGlvbnNoaXBzOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW51bUxpc3RJZCgpCi0gIHsKLSAgICByZXR1cm4gZW51bUxpc3RJZDsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbnVtTGlzdElkKFN0cmluZyBlbnVtTGlzdElkKQotICB7Ci0gICAgdGhpcy5lbnVtTGlzdElkID0gZW51bUxpc3RJZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEVudW1JZCgpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdEVudW1JZDsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0RW51bUlkKFN0cmluZyBkZWZhdWx0RW51bVZhbHVlKQotICB7Ci0gICAgdGhpcy5kZWZhdWx0RW51bUlkID0gZGVmYXVsdEVudW1WYWx1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVucmVzb2x2ZWRQYXJlbnQoIFN0cmluZyBwYXJlbnRJZCApCi0gIHsKLSAgICB1bnJlc29sdmVkUGFyZW50ID0gcGFyZW50SWQ7ICAKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRVbnJlc29sdmVkUmVsYXRpb25zaGlwcyggTGlzdDxVbnJlc29sdmVkUmVsYXRpb25zaGlwPiByZWxhdGlvbnNoaXBzICkKLSAgewotICAgIHVucmVzb2x2ZWRSZWxhdGlvbnNoaXBMaXN0ID0gcmVsYXRpb25zaGlwczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVzb2x2ZSgpCi0gIHsKLSAgICBzZXRQYXJlbnQoIHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIHVucmVzb2x2ZWRQYXJlbnQgKSApOwotICAgICAgICAKLSAgICBmb3IoIFVucmVzb2x2ZWRSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwIDogdW5yZXNvbHZlZFJlbGF0aW9uc2hpcExpc3QgKQotICAgIHsKLSAgICAgIExpc3Q8U3RyaW5nPiAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRW51bUlkTGlzdCA9IHJlbGF0aW9uc2hpcC5nZXRTb3VyY2VFbnVtZXJhdGlvbkxpc3QoKTsgCi0gICAgICBMaXN0PFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+IHRhcmdldEVudW1JZExpc3QgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0RW51bWVyYXRpb25MaXN0KCk7Ci0gICAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gICAgICAgIHNvdXJjZUVudW1MaXN0ICAgPSBnZXRSZXNvbHZlZEVudW1MaXN0KCBzb3VyY2VFbnVtSWRMaXN0ICk7Ci0gICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgICAgICAgIHNvdXJjZVBvbGljeUxpc3QgPSBuZXcgUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbCggc291cmNlRW51bUxpc3QsIHRoaXMgKTsKLSAgICAgIExpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gICAgICAgdGFyZ2V0UG9saWN5TGlzdCA9IG5ldyBWZWN0b3I8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4oKTsKLSAgICAgIAotICAgICAgZm9yKCBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwIHRhcmdldEVudW0gOiB0YXJnZXRFbnVtSWRMaXN0ICkKLSAgICAgIHsKLSAgICAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgICAgIHRhcmdldFBvbGljeSAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggdGFyZ2V0RW51bS5nZXRQb2xpY3lJZCgpICk7Ci0gICAgICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiB0YXJnZXRMaXN0ICAgICAgICAgICA9IGdldFJlc29sdmVkRW51bUxpc3QoIHRhcmdldEVudW0uZ2V0RW51bUxpc3QoKSk7Ci0gICAgICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgICB0YXJnZXRFbnVtUG9saWN5TGlzdCA9IG5ldyBQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsKCB0YXJnZXRMaXN0LCB0YXJnZXRQb2xpY3kgKTsKLSAgICAgICAgCi0gICAgICAgIHRhcmdldFBvbGljeUxpc3QuYWRkKCB0YXJnZXRFbnVtUG9saWN5TGlzdCApOwotICAgICAgICAKLSAgICAgICAgaWYoIHRhcmdldFBvbGljeSA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJQb2xpY3kgaWQsICIgKyB0YXJnZXRFbnVtLmdldFBvbGljeUlkKCkgKyAiIG5vdCBmb3VuZC4iLCBudWxsICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElQb2xpY3lSZWxhdGlvbnNoaXAgcG9saWN5UmVsYXRpb25zaGlwID0gbmV3IFBvbGljeVJlbGF0aW9uc2hpcEltcGwoIHNvdXJjZVBvbGljeUxpc3QsIHRhcmdldFBvbGljeUxpc3QgKTsKLSAgICAgIAotICAgICAgcmVsYXRpb25zaGlwTGlzdC5hZGQoIHBvbGljeVJlbGF0aW9uc2hpcCApOwotICAgIH0KLSAgICAgICAgCi0gICAgdW5yZXNvbHZlZFBhcmVudCA9IG51bGw7Ci0gICAgdW5yZXNvbHZlZFJlbGF0aW9uc2hpcExpc3QgPSBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBnZXRSZXNvbHZlZEVudW1MaXN0KCBMaXN0PFN0cmluZz4gZW51bUlkTGlzdCApCi0gIHsKLSAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZW51bUxpc3QgPSBuZXcgVmVjdG9yPElTdGF0ZUVudW1lcmF0aW9uSXRlbT4oKTsKLSAgICAKLSAgICBmb3IoIFN0cmluZyBlbnVtSWQgOiBlbnVtSWRMaXN0ICkKLSAgICB7Ci0gICAgICBlbnVtTGlzdC5hZGQoIHBsYXRmb3JtLmdldFN0YXRlSXRlbUVudW1lcmF0aW9uKCBlbnVtSWQgKSApOyAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGVudW1MaXN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyKQotICB7Ci0gICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnMuYWRkKCBsaXN0ZW5lciApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyKQotICB7Ci0gICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKCBsaXN0ZW5lciApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRTdGF0dXNDaGFuZ2VMaXN0ZW5lciggSVN0YXR1c0NoYW5nZUxpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIGlmKCBzdGF0dXNDaGFuZ2VMaXN0ZW5lcnMgPT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdHVzQ2hhbmdlTGlzdGVuZXJzID0gbmV3IFZlY3RvcjxJU3RhdHVzQ2hhbmdlTGlzdGVuZXI+KCk7ICAgIAotICAgIH0KLSAgICAKLSAgICBzdGF0dXNDaGFuZ2VMaXN0ZW5lcnMuYWRkKCBsaXN0ZW5lciApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVTdGF0dXNDaGFuZ2VMaXN0ZW5lciggSVN0YXR1c0NoYW5nZUxpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIGlmKCBzdGF0dXNDaGFuZ2VMaXN0ZW5lcnMgIT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdHVzQ2hhbmdlTGlzdGVuZXJzLnJlbW92ZSggbGlzdGVuZXIgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXMoIElTdGF0dXMgc3RhdHVzICkKLSAgewotICAgIElTdGF0dXMgb2xkU3RhdHVzID0gdGhpcy5zdGF0dXM7Ci0gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7Ci0gICAgZmlyZVN0YXR1c0NoYW5nZUV2ZW50KCBvbGRTdGF0dXMsIHN0YXR1cyApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZmlyZVN0YXR1c0NoYW5nZUV2ZW50KCBJU3RhdHVzIG9sZFN0YXR1cywgSVN0YXR1cyBuZXdTdGF0dXMgKQotICB7Ci0gICAgaWYoIHN0YXR1c0NoYW5nZUxpc3RlbmVycyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBmb3IoIElTdGF0dXNDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA6IHN0YXR1c0NoYW5nZUxpc3RlbmVycyApCi0gICAgICB7Ci0gICAgICAgIGxpc3RlbmVyLnN0YXR1c0NoYW5nZSggdGhpcywgb2xkU3RhdHVzLCBuZXdTdGF0dXMpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGZpcmVDaGlsZENoYW5nZXNEdWV0b0Rpc2NhcmQoKQotICB7Ci0gICAgU2V0PElTZXJ2aWNlUG9saWN5PiBjaGlsZFNldCA9IG5ldyBIYXNoU2V0PElTZXJ2aWNlUG9saWN5PiggY2hpbGRyZW4gKTsKLSAgICBTZXQ8SVNlcnZpY2VQb2xpY3k+IGNvbW1pdHRlZENoaWxkU2V0ID0gbmV3IEhhc2hTZXQ8SVNlcnZpY2VQb2xpY3k+KCBjb21taXR0ZWRDaGlsZHJlbiApOwotICAgIAotICAgIGZvciggSVNlcnZpY2VQb2xpY3kgY2hpbGQgOiBjaGlsZFNldCApCi0gICAgewotICAgICAgaWYoIGNvbW1pdHRlZENoaWxkU2V0LmNvbnRhaW5zKCBjaGlsZCApICkKLSAgICAgIHsKLSAgICAgICAgY29tbWl0dGVkQ2hpbGRTZXQucmVtb3ZlKCBjaGlsZCApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBBIGNoaWxkIHdhcyBhZGRlZCBhbmQgaXMgbm93IGJlaW5nIGRlbGV0ZWQgYnkgdGhlIGRpc2NhcmQuCi0gICAgICAgIGZpcmVDaGlsZENoYW5nZUV2ZW50KCBjaGlsZCwgZmFsc2UgKTsKLSAgICAgICAgcGxhdGZvcm0uZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIGNoaWxkLCBmYWxzZSApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBBbnkgY2hpbGRyZW4gbGVmdCBpbiB0aGUgY29tbWl0dGVkIHNldCBtdXN0IGhhdmUgYmVlbiBkZWxldGVkIGFuZCBhcmUgbm93Ci0gICAgLy8gYmVpbmcgYWRkZWQgYmFjayBkdWUgdG8gdGhlIGRpc2NhcmQuCi0gICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IGNvbW1pdHRlZENoaWxkU2V0ICkKLSAgICB7Ci0gICAgICBmaXJlQ2hpbGRDaGFuZ2VFdmVudCggY2hpbGQsIHRydWUgKTsKLSAgICAgIHBsYXRmb3JtLmZpcmVDaGlsZENoYW5nZUV2ZW50KCBjaGlsZCwgdHJ1ZSApOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGZpcmVDaGlsZENoYW5nZUV2ZW50KCBJU2VydmljZVBvbGljeSBwb2xpY3ksIGJvb2xlYW4gaXNBZGQgKQotICB7Ci0gICAgZm9yKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA6IGNoaWxkQ2hhbmdlTGlzdGVuZXJzICkKLSAgICB7Ci0gICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiBwb2xpY3lMaXN0ID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oMSk7Ci0gICAgICBMaXN0PEJvb2xlYW4+ICAgICAgICBhZGRlZExpc3QgID0gbmV3IFZlY3RvcjxCb29sZWFuPigxKTsKLSAgICAgIAotICAgICAgcG9saWN5TGlzdC5hZGQoIHBvbGljeSApOwotICAgICAgYWRkZWRMaXN0LmFkZCggaXNBZGQgKTsKLSAgICAgIGxpc3RlbmVyLmNoaWxkQ2hhbmdlKCBwb2xpY3lMaXN0LCBhZGRlZExpc3QgKTsgICAgIAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwMGY5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzExMTMgICAyMDk3MDEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAxMTEgICAyMTQ5MDcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAyMTQgICAyMTg5OTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgQ29uY3VycmVudCBleGNlcHRpb24gZml4Ci0gKiAyMDA4MDMyNSAgIDIyMjA5NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuRXZhbHVhdGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLkV4cHJlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5JRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUHJvamVjdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuQmFja2luZ1N0b3JlRXhjZXB0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIAotewotICBwcml2YXRlIExpc3Q8SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPiAgICAgICAgbG9hZExpc3RlbmVyczsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4gICAgICAgICAgIGNvbW1pdHRlZFBvbGljeU1hcDsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4gICAgICAgICAgIHBvbGljeU1hcDsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4+IGVudW1MaXN0OwotICBwcml2YXRlIE1hcDxTdHJpbmcsIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbD4gICAgZW51bUl0ZW1MaXN0OwotICBwcml2YXRlIE1hcDxJUHJvamVjdCwgUHJvamVjdEVudHJ5PiAgICAgICAgICAgICAgZW5hYmxlZFByb2plY3RNYXA7Ci0gIHByaXZhdGUgTGlzdDxFeHByZXNzaW9uPiAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkTGlzdDsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPiAgICAgICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzOwotICBwcml2YXRlIExpc3Q8SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI+ICAgICAgICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnNPbkNvbW1pdDsKLSAgcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICAgICAgICAgICAgICAgICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5OwotICBwcml2YXRlIExpc3Q8Qm9vbGVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0Q2hpbGRDaGFuZ2VBZGRlZDsKLSAgcHJpdmF0ZSBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICAgICAgICAgICAgICAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlUG9saWN5OwotICBwcml2YXRlIExpc3Q8Qm9vbGVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVkQ2hpbGRDaGFuZ2VBZGRlZDsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI+IHByb2plY3RQbGF0Zm9ybUxpc3RlbmVyczsKLSAgCi0gIHB1YmxpYyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsKCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBsb2FkKCkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lSZWdpc3RyeSByZWdpc3RyeSAgPSBuZXcgU2VydmljZVBvbGljeVJlZ2lzdHJ5KCB0aGlzICk7Ci0gICAgTGlzdDxTdHJpbmc+ICAgICAgICAgIGxvY2FsSWRzICA9IExvY2FsVXRpbHMuZ2V0TG9jYWxQb2xpY3lJZHMoKTsKLSAgICAKLSAgICBsb2FkTGlzdGVuZXJzICAgICA9IG5ldyBWZWN0b3I8SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPigpOwotICAgIHBvbGljeU1hcCAgICAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4oKTsKLSAgICBlbnVtTGlzdCAgICAgICAgICA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+PigpOwotICAgIGVudW1JdGVtTGlzdCAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGw+KCk7Ci0gICAgZW5hYmxlZFByb2plY3RNYXAgPSBuZXcgSGFzaE1hcDxJUHJvamVjdCwgUHJvamVjdEVudHJ5PigpOwotICAgIGVuYWJsZWRMaXN0ICAgICAgID0gbmV3IFZlY3RvcjxFeHByZXNzaW9uPigpOwotICAgIAotICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzICAgICAgICAgPSBuZXcgVmVjdG9yPElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPigpOwotICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzT25Db21taXQgPSBuZXcgVmVjdG9yPElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPigpOwotICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5ICAgICAgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgIGNvbW1pdENoaWxkQ2hhbmdlQWRkZWQgICAgICAgPSBuZXcgVmVjdG9yPEJvb2xlYW4+KCk7Ci0gICAgcHJvamVjdFBsYXRmb3JtTGlzdGVuZXJzICAgICA9IG5ldyBWZWN0b3I8SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcj4oKTsKLSAgICAKLSAgICByZWdpc3RyeS5sb2FkKCBsb2FkTGlzdGVuZXJzLCBwb2xpY3lNYXAsIGVudW1MaXN0LCBlbnVtSXRlbUxpc3QgKTsKLSAgICAKLSAgICAvLyBUaGlzIGZpcnN0IGxvb3AgdGhyb3VnaCB0aGUgaWRzIHdpbGwgb25seSBjcmVhdGUgc2VydmljZSBwb2xpY3kgb2JqZWN0cwotICAgIC8vIHdpdGhvdXQgcG9wdWxhdGluZyB0aGVtIHdpdGggdGhlcmUgdmFsdWVzLgotICAgIGZvciggU3RyaW5nIGxvY2FsUG9saWN5SWQgOiBsb2NhbElkcyApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUltcGwgbG9jYWxQb2xpY3kgPSBuZXcgU2VydmljZVBvbGljeUltcGwoIGZhbHNlLCBsb2NhbFBvbGljeUlkLCB0aGlzICk7Ci0gICAgICAKLSAgICAgIHBvbGljeU1hcC5wdXQoIGxvY2FsUG9saWN5SWQsIGxvY2FsUG9saWN5ICk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgc2Vjb25kIGxvb3Agd2lsbCBwb3B1bGF0ZSB0aGUgc2VydmljZSBwb2xpY3kgdmFsdWVzIGFuZAotICAgIC8vIGNyb3NzcmVmZXJlbmNlIHBhcmVudCBhbmQgY2hpbGQgc2VydmljZSBwb2xpY2llcy4KLSAgICBmb3IoIFN0cmluZyBsb2NhbFBvbGljeUlkIDogbG9jYWxJZHMgKQotICAgIHsKLSAgICAgIExvY2FsVXRpbHMubG9hZExvY2FsUG9saWN5KCBsb2NhbFBvbGljeUlkLCB0aGlzICk7Ci0gICAgfQotICAgICAgIAotICAgIGZvciggSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyIGxvYWRMaXN0ZW5lciA6IGxvYWRMaXN0ZW5lcnMgKQotICAgIHsKLSAgICAgIGxvYWRMaXN0ZW5lci5sb2FkKCk7Ci0gICAgfQotICAgIAotICAgIGNvbW1pdENoYW5nZXMoIGZhbHNlICk7ICAgCi0KLSAgICAvLyBDb21taXQgYW55IHByb2plY3QgbGV2ZWwgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlIGJ5IGxvYWQgbGlzdGVuZXJzLgotICAgIGZvciggSVByb2plY3QgcHJvamVjdCA6IGVuYWJsZWRQcm9qZWN0TWFwLmtleVNldCgpICkKLSAgICB7Ci0gICAgICBjb21taXRDaGFuZ2VzKCBwcm9qZWN0ICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRFbmFibGVkRXhwcmVzc2lvbiggRXhwcmVzc2lvbiBleHByZXNzaW9uICkKLSAgewotICAgIGlmKCBleHByZXNzaW9uICE9IG51bGwgKQotICAgIHsKLSAgICAgIGVuYWJsZWRMaXN0LmFkZCggZXhwcmVzc2lvbiApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGJvb2xlYW4gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICBJRXZhbHVhdGlvbkNvbnRleHQgY29udGV4dCA9IG5ldyBFdmFsdWF0aW9uQ29udGV4dCggbnVsbCwgb2JqZWN0ICk7Ci0gICAgY29udGV4dC5hZGRWYXJpYWJsZSggInNlbGVjdGlvbiIsIG9iamVjdCApOyAvLyROT04tTkxTLTEkCi0gICAgY29udGV4dC5zZXRBbGxvd1BsdWdpbkFjdGl2YXRpb24oIHRydWUgKTsKLSAgICAKLSAgICBmb3IoIEV4cHJlc3Npb24gZW5hYmxlZEl0ZW0gOiBlbmFibGVkTGlzdCApCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEV2YWx1YXRpb25SZXN1bHQgZXhwUmVzdWx0ID0gZW5hYmxlZEl0ZW0uZXZhbHVhdGUoIGNvbnRleHQgKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIGFueSBleHByZXNzaW9uIHJldHVybnMgVFJVRSBvciBOT1RfTE9BREVEIHdlIHdpbGwgcmV0dXJuIHRydWUgYXMKLSAgICAgICAgLy8gdGhlIHJlc3VsdC4KLSAgICAgICAgaWYoIGV4cFJlc3VsdCAhPSBFdmFsdWF0aW9uUmVzdWx0LkZBTFNFICkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIC8vIElnbm9yZSB0aGUgZXhwcmVzc2lvbiBpZiBhbiBleGNlcHRpb24gb2NjdXJzLgotICAgICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmxvZ0Vycm9yKCAiRXJyb3IgZXZhbHVhdGluZyBlbmFibGVtZW50IGV4cHJlc3Npb24uIiwgZXhjICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgY29tbWl0Q2hhbmdlcyggYm9vbGVhbiBzYXZlTG9jYWxzICkKLSAgewotICAgIExpc3Q8U3RyaW5nPiBsb2NhbElkcyA9IG5ldyBWZWN0b3I8U3RyaW5nPigpOwotICAgIAotICAgIGlmKCBzYXZlTG9jYWxzICkgTG9jYWxVdGlscy5yZW1vdmVBbGxQcmVmZXJlbmNlUG9saWNpZXMoIG51bGwsIG51bGwgKTsKLSAgICAKLSAgICAvLyBGaXJlIGNoaWxkIGNoYW5nZSBldmVudHMgZm9yIGNvbW1pdCBsaXN0ZW5lcnMKLSAgICBmb3IoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyIDogY2hpbGRDaGFuZ2VMaXN0ZW5lcnNPbkNvbW1pdCApCi0gICAgewotICAgICAgbGlzdGVuZXIuY2hpbGRDaGFuZ2UoIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5LCBjb21taXRDaGlsZENoYW5nZUFkZGVkICk7Ci0gICAgfQotICAgIAotICAgIHJlbW92ZURlbGV0ZWRQcmVmZXJlbmNlRGF0YSgpOwotICAgIAotICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5ID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICBjb21taXRDaGlsZENoYW5nZUFkZGVkICA9IG5ldyBWZWN0b3I8Qm9vbGVhbj4oKTsKLSAgICAKLSAgICBmb3IoIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA6IHBvbGljeU1hcC52YWx1ZXMoKSApCi0gICAgewotICAgICAgcG9saWN5LmNvbW1pdENoYW5nZXMoKTsKLSAgICAgIAotICAgICAgaWYoIHNhdmVMb2NhbHMgJiYgIXBvbGljeS5pc1ByZWRlZmluZWQoKSApCi0gICAgICB7Ci0gICAgICAgIExvY2FsVXRpbHMuc2F2ZUxvY2FsUG9saWN5KCBwb2xpY3kgKTsKLSAgICAgICAgbG9jYWxJZHMuYWRkKCBwb2xpY3kuZ2V0SWQoKSApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiggc2F2ZUxvY2FscyApIExvY2FsVXRpbHMuc2F2ZUxvY2FsSWRzKCBsb2NhbElkcyApOwotICAgIAotICAgIGNvbW1pdHRlZFBvbGljeU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2VydmljZVBvbGljeUltcGw+KCk7Ci0gICAgY29tbWl0dGVkUG9saWN5TWFwLnB1dEFsbCggcG9saWN5TWFwICk7Ci0gICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5nZXREZWZhdWx0KCkuc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCByZW1vdmVEZWxldGVkUHJlZmVyZW5jZURhdGEoKQotICB7Ci0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5LnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3kuZ2V0KCBpbmRleCApOwotICAgICAgYm9vbGVhbiAgICAgICAgYWRkZWQgID0gY29tbWl0Q2hpbGRDaGFuZ2VBZGRlZC5nZXQoIGluZGV4ICk7Ci0gICAgICAKLSAgICAgIGlmKCAhYWRkZWQgKQotICAgICAgewotICAgICAgICAvLyBBZGQgcG9saWN5IGlzIGJlaW5nIGRlbGV0ZWQuICBXZSBuZWVkIHRvIHJlbW92ZSBhbnkgc3RhdGUgZGF0YQotICAgICAgICAvLyBmb3IgdGhpcyBwb2xpY3kgYXQgdGhlIHdvcmtzcGFjZSBsZXZlbCBhbmQgdGhlIHByb2plY3QgbGV2ZWwuCi0gICAgICAgIExvY2FsVXRpbHMucmVtb3ZlQWxsUHJlZmVyZW5jZVBvbGljaWVzKCBwb2xpY3kuZ2V0SWQoKSwgbnVsbCApOwotICAgICAgICAKLSAgICAgICAgZm9yKCBJUHJvamVjdCBwcm9qIDogZW5hYmxlZFByb2plY3RNYXAua2V5U2V0KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIHByb2ouZXhpc3RzKCkgJiYgcHJvai5pc09wZW4oKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcm9qUHJlZnMgPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qICkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICAgICAgICAgIExvY2FsVXRpbHMucmVtb3ZlQWxsUHJlZmVyZW5jZVBvbGljaWVzKCBwb2xpY3kuZ2V0SWQoKSwgcHJvalByZWZzICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcHJvalByZWZzLmZsdXNoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCggQmFja2luZ1N0b3JlRXhjZXB0aW9uIGV4YyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJFcnJvciBmbHVzaGluZyBwcm9qZWN0IHByb3BlcnRpZXMuIiwgZXhjICk7IC8vJE5PTi1OTFMtMSQgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWxseSB0byByZW1vdmUgYSBzZXJ2aWNlIHBvbGljeS4KLSAgICogCi0gICAqIEBwYXJhbSBwb2xpY3kKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVBvbGljeSggSVNlcnZpY2VQb2xpY3kgcG9saWN5ICkKLSAgewotICAgIHBvbGljeU1hcC5yZW1vdmUoIHBvbGljeS5nZXRJZCgpICk7Ci0gICAgZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIHBvbGljeSwgZmFsc2UgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhlIHBsYXRmb3JtIEFQSQotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUGxhdGZvcm1Qb2xpY3koIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gIHsKLSAgICBpZiggcG9saWN5LmlzUHJlZGVmaW5lZCgpICkgcmV0dXJuOwotICAgIAotICAgIElTZXJ2aWNlUG9saWN5IHBhcmVudCA9IHBvbGljeS5nZXRQYXJlbnRQb2xpY3koKTsKLSAgICAKLSAgICBpZiggcGFyZW50ID09IG51bGwgKQotICAgIHsKLSAgICAgIC8vIFJlbW92ZSBhbnkgY2hpbGRyZW4gZmlyc3QKLSAgICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoaWxkcmVuID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oIHBvbGljeS5nZXRDaGlsZHJlbigpICk7Ci0gICAgICAKLSAgICAgIGZvciggSVNlcnZpY2VQb2xpY3kgY2hpbGQgOiBjaGlsZHJlbiApCi0gICAgICB7Ci0gICAgICAgIHBvbGljeS5yZW1vdmVDaGlsZCggY2hpbGQgKTsgIAotICAgICAgfQotICAgICAgCi0gICAgICByZW1vdmVQb2xpY3koIChTZXJ2aWNlUG9saWN5SW1wbClwb2xpY3kpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKCBwb2xpY3kgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZENoaWxkQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLCBib29sZWFuIG9uQ29tbWl0ICkKLSAgewotICAgIGlmKCBvbkNvbW1pdCApCi0gICAgewotICAgICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnNPbkNvbW1pdC5hZGQoIGxpc3RlbmVyICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjaGlsZENoYW5nZUxpc3RlbmVycy5hZGQoIGxpc3RlbmVyICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciwgYm9vbGVhbiBvbkNvbW1pdCApCi0gIHsKLSAgICBpZiggb25Db21taXQgKQotICAgIHsKLSAgICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzT25Db21taXQucmVtb3ZlKCBsaXN0ZW5lciApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKCBsaXN0ZW5lciApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgcXVldWVDaGlsZENoYW5nZUxpc3RlbmVycyggYm9vbGVhbiBxdWV1ZSApCi0gIHsKLSAgICBpZiggcXVldWUgJiYgcXVldWVkQ2hpbGRDaGFuZ2VBZGRlZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkID0gbmV3IFZlY3RvcjxCb29sZWFuPigpOwotICAgICAgcXVldWVkQ2hpbGRDaGFuZ2VQb2xpY3kgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgIH0KLSAgICBlbHNlIGlmKCAhcXVldWUgJiYgcXVldWVkQ2hpbGRDaGFuZ2VBZGRlZCAhPSBudWxsICkKLSAgICB7Ci0gICAgICAvLyBRdWV1aW5nIGhhcyBiZWVuIHR1cm5lZCBvZmYgc28gd2Ugd2lsbCBmaXJlIGFsbCB0aGUgcXVldWVkIGV2ZW50cy4KLSAgICAgIGZvciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgOiBjaGlsZENoYW5nZUxpc3RlbmVycyApCi0gICAgICB7Ci0gICAgICAgIGxpc3RlbmVyLmNoaWxkQ2hhbmdlKCBxdWV1ZWRDaGlsZENoYW5nZVBvbGljeSwgcXVldWVkQ2hpbGRDaGFuZ2VBZGRlZCApOwotICAgICAgfQotICAgICAgCi0gICAgICBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkID0gbnVsbDsKLSAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlUG9saWN5ID0gbnVsbDsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGZpcmVDaGlsZENoYW5nZUV2ZW50KCBJU2VydmljZVBvbGljeSBwb2xpY3ksIGJvb2xlYW4gaXNBZGQgKQotICB7Ci0gICAgaWYoIHF1ZXVlZENoaWxkQ2hhbmdlQWRkZWQgPT0gbnVsbCApCi0gICAgewotICAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gcG9saWN5TGlzdCA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KDEpOwotICAgICAgTGlzdDxCb29sZWFuPiAgICAgICAgYWRkZWRMaXN0ICA9IG5ldyBWZWN0b3I8Qm9vbGVhbj4oMSk7Ci0gICAgICAKLSAgICAgIHBvbGljeUxpc3QuYWRkKCBwb2xpY3kgKTsKLSAgICAgIGFkZGVkTGlzdC5hZGQoIGlzQWRkICk7Ci0gICAgICAKLSAgICAgIGZvciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgOiBjaGlsZENoYW5nZUxpc3RlbmVycyApCi0gICAgICB7Ci0gICAgICAgIGxpc3RlbmVyLmNoaWxkQ2hhbmdlKCBwb2xpY3lMaXN0LCBhZGRlZExpc3QgKTsgICAgIAotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcXVldWVkQ2hpbGRDaGFuZ2VBZGRlZC5hZGQoIGlzQWRkICk7Ci0gICAgICBxdWV1ZWRDaGlsZENoYW5nZVBvbGljeS5hZGQoIHBvbGljeSApOwotICAgIH0KLSAgICAKLSAgICBjb21taXRDaGlsZENoYW5nZUFkZGVkLmFkZCggaXNBZGQgKTsKLSAgICBjb21taXRDaGlsZENoYW5nZVBvbGljeS5hZGQoIHBvbGljeSApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjb21taXRDaGFuZ2VzKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIGZvciggU2VydmljZVBvbGljeUltcGwgcG9saWN5IDogcG9saWN5TWFwLnZhbHVlcygpICkKLSAgICB7Ci0gICAgICAoKFBvbGljeVN0YXRlSW1wbClwb2xpY3kuZ2V0UG9saWN5U3RhdGUoIHByb2plY3QgKSkuY29tbWl0Q2hhbmdlcygpOwotICAgIH0KLSAgICAKLSAgICBQcm9qZWN0RW50cnkgZW50cnkgPSBnZXRQcm9qZWN0RW50cnkoIHByb2plY3QgKTsKLSAgICAKLSAgICBlbnRyeS5pc0VuYWJsZWRDb21taXR0ZWQgPSBlbnRyeS5pc0VuYWJsZWQ7ICAKLSAgICBzZXRQcm9qZWN0RW5hYmxlZCggcHJvamVjdCwgZW50cnkuaXNFbmFibGVkQ29tbWl0dGVkICk7Ci0gICAgICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJvamVjdFByZWZzID0gbmV3IFByb2plY3RTY29wZSggcHJvamVjdCApLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7Ci0gICAgICAKLSAgICAgIHByb2plY3RQcmVmcy5mbHVzaCgpOwotICAgIH0KLSAgICBjYXRjaCggQmFja2luZ1N0b3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggIkVycm9yIHdoaWxlIGNvbW1pdHRpbmcgcHJvamVjdCBwcmVmZXJlbmNlcy4iLCBleGMgKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzY2FyZENoYW5nZXMoKQotICB7Ci0gICAgcG9saWN5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4oKTsKLSAgICBwb2xpY3lNYXAucHV0QWxsKCBjb21taXR0ZWRQb2xpY3lNYXAgKTsKLSAgICAKLSAgICBjb21taXRDaGlsZENoYW5nZVBvbGljeSA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgY29tbWl0Q2hpbGRDaGFuZ2VBZGRlZCAgPSBuZXcgVmVjdG9yPEJvb2xlYW4+KCk7Ci0gICAgCi0gICAgZm9yKCBTZXJ2aWNlUG9saWN5SW1wbCBwb2xpY3kgOiBjb21taXR0ZWRQb2xpY3lNYXAudmFsdWVzKCkgKQotICAgIHsKLSAgICAgIHBvbGljeS5kaXNjYXJkQ2hhbmdlcygpOwotICAgIH0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc2NhcmRDaGFuZ2VzKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIGZvciggU2VydmljZVBvbGljeUltcGwgcG9saWN5IDogcG9saWN5TWFwLnZhbHVlcygpICkKLSAgICB7Ci0gICAgICAoKFBvbGljeVN0YXRlSW1wbClwb2xpY3kuZ2V0UG9saWN5U3RhdGUoIHByb2plY3QgKSkuZGlzY2FyZENoYW5nZXMoKTsKLSAgICB9Ci0gICAgCi0gICAgUHJvamVjdEVudHJ5IGVudHJ5ID0gZ2V0UHJvamVjdEVudHJ5KCBwcm9qZWN0ICk7Ci0gICAgCi0gICAgZW50cnkuaXNFbmFibGVkID0gZW50cnkuaXNFbmFibGVkQ29tbWl0dGVkOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cygpCi0gIHsKLSAgICBWZWN0b3I8U2VydmljZVBvbGljeUltcGw+IHRlbXBQb2xpY3lWYWx1ZXMgCi0gICAgICAgPSBuZXcgVmVjdG9yPFNlcnZpY2VQb2xpY3lJbXBsPiggcG9saWN5TWFwLnZhbHVlcygpICk7Ci0gICAgCi0gICAgZm9yKCBTZXJ2aWNlUG9saWN5SW1wbCBwb2xpY3kgOiB0ZW1wUG9saWN5VmFsdWVzICkKLSAgICB7Ci0gICAgICBwb2xpY3kucmVzdG9yZURlZmF1bHRzKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZXN0b3JlRGVmYXVsdHMoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgZm9yKCBTZXJ2aWNlUG9saWN5SW1wbCBwb2xpY3kgOiBwb2xpY3lNYXAudmFsdWVzKCkgKQotICAgIHsKLSAgICAgIHBvbGljeS5yZXN0b3JlRGVmYXVsdHMoIHByb2plY3QgKTsKLSAgICB9ICAgIAotICB9Ci0gIAotICBwdWJsaWMgU2V0PFN0cmluZz4gZ2V0QWxsUG9saWN5SWRzKCkKLSAgewotICAgIHJldHVybiBwb2xpY3lNYXAua2V5U2V0KCk7Ci0gIH0KLSAgICAKLSAgcHVibGljIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIElGaWx0ZXIgZmlsdGVyICkKLSAgewotICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHJvb3RQb2xpY2llcyA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgCi0gICAgZm9yKCBTdHJpbmcgcG9saWN5SWQgOiBwb2xpY3lNYXAua2V5U2V0KCkgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA9IHBvbGljeU1hcC5nZXQoIHBvbGljeUlkICk7Ci0gICAgICAKLSAgICAgIGlmKCBwb2xpY3kuZ2V0UGFyZW50UG9saWN5KCkgPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGlmKCBmaWx0ZXIgPT0gbnVsbCB8fCAoZmlsdGVyICE9IG51bGwgJiYgZmlsdGVyLmFjY2VwdCggcG9saWN5ICkpICkKLSAgICAgICAgewotICAgICAgICAgIHJvb3RQb2xpY2llcy5hZGQoIHBvbGljeSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByb290UG9saWNpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZXJ2aWNlUG9saWN5SW1wbCBjcmVhdGVTZXJ2aWNlUG9saWN5KCBJU2VydmljZVBvbGljeSBwYXJlbnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgaWQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgZW51bUxpc3RJZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICBkZWZhdWx0RW51bUlkICkKLSAgewotICAgIGlmKCBpZCA9PSBudWxsICkgaWQgPSAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LmlkIjsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIFN0cmluZyAgICAgICAgICAgIHVuaXF1ZUlkID0gbWFrZVVuaXF1ZUlkKCBpZCApOwotICAgIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSAgID0gbmV3IFNlcnZpY2VQb2xpY3lJbXBsKCBmYWxzZSwgdW5pcXVlSWQsIHRoaXMgKTsKLSAgICAKLSAgICBwb2xpY3kuc2V0UGFyZW50KCAoU2VydmljZVBvbGljeUltcGwpcGFyZW50ICk7Ci0gICAgcG9saWN5LnNldEVudW1MaXN0SWQoIGVudW1MaXN0SWQgKTsKLSAgICBwb2xpY3kuc2V0RGVmYXVsdEVudW1JZCggZGVmYXVsdEVudW1JZCApOwotICAgIHBvbGljeU1hcC5wdXQoIHVuaXF1ZUlkLCBwb2xpY3kgKTsKLSAgICBmaXJlQ2hpbGRDaGFuZ2VFdmVudCggcG9saWN5LCB0cnVlICk7Ci0gICAgCi0gICAgcmV0dXJuIHBvbGljeTsKLSAgfQotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lJbXBsIGdldFNlcnZpY2VQb2xpY3koIFN0cmluZyBpZCApCi0gIHsKLSAgICByZXR1cm4gaWQgPT0gbnVsbCA/IG51bGwgOiBwb2xpY3lNYXAuZ2V0KCBpZCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZ2V0U3RhdGVFbnVtZXJhdGlvbiggU3RyaW5nIGVudW1JZCApCi0gIHsKLSAgICByZXR1cm4gZW51bUxpc3QuZ2V0KCBlbnVtSWQgKTsgCi0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZ2V0U3RhdGVJdGVtRW51bWVyYXRpb24oIFN0cmluZyBzdGF0ZUl0ZW1JZCApCi0gIHsKLSAgICByZXR1cm4gZW51bUl0ZW1MaXN0LmdldCggc3RhdGVJdGVtSWQgKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIFByb2plY3RFbnRyeSBlbnRyeSAgPSBnZXRQcm9qZWN0RW50cnkoIHByb2plY3QgKTsKLSAgICAKLSAgICByZXR1cm4gZW50cnkuaXNFbmFibGVkOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gZ2V0UHJvamVjdFByZWZlcmVuY2VFbmFibGVkKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgcGx1Z2luSWQgICAgICAgICAgPSBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRDsKLSAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByb2plY3RQcmVmZXJlbmNlID0gbmV3IFByb2plY3RTY29wZSggcHJvamVjdCApLmdldE5vZGUoIHBsdWdpbklkICk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBrZXkgICAgICAgICAgICAgICA9IHBsdWdpbklkICsgIi5wcm9qZWN0RW5hYmxlZCI7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICByZXR1cm4gcHJvamVjdFByZWZlcmVuY2UuZ2V0Qm9vbGVhbigga2V5LCBmYWxzZSApOyAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggSVByb2plY3QgcHJvamVjdCwgYm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICBQcm9qZWN0RW50cnkgZW50cnkgID0gZ2V0UHJvamVjdEVudHJ5KCBwcm9qZWN0ICk7Ci0gICAgCi0gICAgZW50cnkuaXNFbmFibGVkID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBwcm9qZWN0IHBsYXRmb3JtIGxpc3RlbmVyLiAgV2hlbiBhIHBhcnRpY3VsYXIgcHJvamVjdCBpcyByZWZlcmVuY2VkCi0gICAqIGJ5IGluIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSB0aGlzIGxpc3RlbmVyIHdpbGwgYmUgY2FsbGVkIHRoZSBmaXJzdAotICAgKiB0aW1lIHRoZSBwcm9qZWN0IGlzIGxvYWRlZCBpbnRvIHRoZSBzeXN0ZW0uCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcm9qZWN0TG9hZExpc3RlbmVyKCBJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIHByb2plY3RQbGF0Zm9ybUxpc3RlbmVycy5hZGQoIGxpc3RlbmVyICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgcHJvamVjdCBwbGF0Zm9ybSBsaXN0ZW5lci4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVByb2plY3RMb2FkTGlzdGVuZXIoIElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgcHJvamVjdFBsYXRmb3JtTGlzdGVuZXJzLnJlbW92ZSggbGlzdGVuZXIgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldFByb2plY3RFbmFibGVkKCBJUHJvamVjdCBwcm9qZWN0LCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgcGx1Z2luSWQgICAgICAgICAgPSBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRDsKLSAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByb2plY3RQcmVmZXJlbmNlID0gbmV3IFByb2plY3RTY29wZSggcHJvamVjdCApLmdldE5vZGUoIHBsdWdpbklkICk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBrZXkgICAgICAgICAgICAgICA9IHBsdWdpbklkICsgIi5wcm9qZWN0RW5hYmxlZCI7IC8vJE5PTi1OTFMtMSQKLQotICAgIHByb2plY3RQcmVmZXJlbmNlLnB1dEJvb2xlYW4oIGtleSwgdmFsdWUgKTsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgUHJvamVjdEVudHJ5IGdldFByb2plY3RFbnRyeSggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBQcm9qZWN0RW50cnkgZW50cnkgID0gZW5hYmxlZFByb2plY3RNYXAuZ2V0KCBwcm9qZWN0ICk7Ci0gICAgCi0gICAgaWYoIGVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGVudHJ5ID0gbmV3IFByb2plY3RFbnRyeSgpOwotICAgICAgZW5hYmxlZFByb2plY3RNYXAucHV0KCBwcm9qZWN0LCBlbnRyeSApOwotICAgICAgZW50cnkuaXNFbmFibGVkQ29tbWl0dGVkID0gZ2V0UHJvamVjdFByZWZlcmVuY2VFbmFibGVkKCBwcm9qZWN0ICk7Ci0gICAgICBlbnRyeS5pc0VuYWJsZWQgPSBlbnRyeS5pc0VuYWJsZWRDb21taXR0ZWQ7Ci0gICAgICBmaXJlUHJvamVjdExvYWRMaXN0ZW5lciggcHJvamVjdCApOwotICAgIH0KLQotICAgIHJldHVybiBlbnRyeTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGZpcmVQcm9qZWN0TG9hZExpc3RlbmVyKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIGZvciggSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lciBsaXN0ZW5lciA6IHByb2plY3RQbGF0Zm9ybUxpc3RlbmVycyApCi0gICAgewotICAgICAgbGlzdGVuZXIubG9hZCggcHJvamVjdCApOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgbWFrZVVuaXF1ZUlkKCBTdHJpbmcgaWQgKQotICB7Ci0gICAgU3RyaW5nICByZXN1bHQgID0gaWQ7Ci0gICAgaW50ICAgICBpZENvdW50ID0gMTsKLSAgICBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoICJcXGQqJCIgKTsgLy8gTWF0Y2ggYW55IG51bWVyaWNhbCBkaWdpdHMgYXQgdGhlIGVuZCAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBzdHJpbmcuCi0gICAgCi0gICAgd2hpbGUoIHBvbGljeU1hcC5jb250YWluc0tleSggcmVzdWx0ICkgKQotICAgIHsKLSAgICAgIE1hdGNoZXIgbWF0Y2hlciA9IHBhdHRlcm4ubWF0Y2hlciggcmVzdWx0ICk7Ci0gICAgCi0gICAgICByZXN1bHQgPSBtYXRjaGVyLnJlcGxhY2VGaXJzdCggIiIgKSArIGlkQ291bnQ7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGlkQ291bnQrKzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBQcm9qZWN0RW50cnkKLSAgewotICAgICBib29sZWFuIGlzRW5hYmxlZENvbW1pdHRlZDsKLSAgICAgYm9vbGVhbiBpc0VuYWJsZWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1NlcnZpY2VQb2xpY3lSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzU3MTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuRXhwcmVzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLkV4cHJlc3Npb25Db252ZXJ0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5FeHByZXNzaW9uVGFnTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHMuUmVnaXN0cnlVdGlsczsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lSZWdpc3RyeQotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX1BPTElDWV9JRCA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICsgIi5zZXJ2aWNlcG9saWN5IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtOwotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lSZWdpc3RyeSggU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbCBwbGF0Zm9ybSApCi0gIHsKLSAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxvYWQoIExpc3Q8SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPiAgICAgICAgbG9hZExpc3RlbmVycywKLSAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU2VydmljZVBvbGljeUltcGw+ICAgICAgICAgICBwb2xpY3lNYXAsCi0gICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPj4gZW51bU1hcCwKLSAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsPiAgICBlbnVtSXRlbU1hcCApCi0gIHsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKFNFUlZJQ0VfUE9MSUNZX0lEKTsKLSAgICAKLSAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50IDogZWxlbWVudHMgKQotICAgIHsKLSAgICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGVsZW1lbnQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAKLSAgICAgIGlmKCBlbGVtZW50TmFtZS5lcXVhbHMoICJzZXJ2aWNlcG9saWN5IikgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxvYWRTZXJ2aWNlUG9saWN5KCBlbGVtZW50LCBsb2FkTGlzdGVuZXJzLCBwb2xpY3lNYXAsIGVudW1NYXAsIGVudW1JdGVtTWFwICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IGVsZW1lbnQsICIgKyBlbGVtZW50TmFtZSArICIgZm91bmQuIiApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gUmVzb2x2ZSBhbGwgcG9saWN5IHNlcnZpY2VzLgotICAgIGZvciggU3RyaW5nIHBvbGljeUlkIDogcG9saWN5TWFwLmtleVNldCgpICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5SW1wbCBwb2xpY3kgPSBwb2xpY3lNYXAuZ2V0KCBwb2xpY3lJZCApOwotICAgICAgCi0gICAgICBwb2xpY3kucmVzb2x2ZSgpOwotICAgIH0KLSAgfQotICAgCi0gIHByaXZhdGUgdm9pZCBsb2FkU2VydmljZVBvbGljeSggSUNvbmZpZ3VyYXRpb25FbGVtZW50ICAgICAgICAgICAgICAgICAgICBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPiAgICAgICAgbG9hZExpc3RlbmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4gICAgICAgICAgIHBvbGljeU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4+IGVudW1NYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsPiAgICBlbnVtSXRlbU1hcCApIAotICB7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY2hpbGRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oKTsKLSAgICAKLSAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBjaGlsZCA6IGNoaWxkRWxlbWVudHMgKQotICAgIHsKLSAgICAgIFN0cmluZyBjaGlsZE5hbWUgPSBjaGlsZC5nZXROYW1lKCkudG9Mb3dlckNhc2UoKTsKLSAgICAgIAotICAgICAgaWYoIGNoaWxkTmFtZS5lcXVhbHMoICJsb2FkbGlzdGVuZXIiICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxvYWRMb2FkTGlzdGVuZXIoIGNoaWxkLCBsb2FkTGlzdGVuZXJzICk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBjaGlsZE5hbWUuZXF1YWxzKCAicG9saWN5IiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBsb2FkUG9saWN5KCBjaGlsZCwgcG9saWN5TWFwICk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBjaGlsZE5hbWUuZXF1YWxzKCAiZW51bWVyYXRpb24iICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxvYWRFbnVtZXJhdGlvbiggY2hpbGQsIGVudW1NYXAsIGVudW1JdGVtTWFwICk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBjaGlsZE5hbWUuZXF1YWxzKCBFeHByZXNzaW9uVGFnTmFtZXMuRU5BQkxFTUVOVCApICkgCi0gICAgICB7Ci0gICAgICAgIGxvYWRFbmFibGVtZW50KCBjaGlsZCApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBlcnJvciggIlVuZGVmaW5lZCBzZXJ2aWNlIHBvbGljeSBlbGVtZW50LCAiICsgY2hpbGROYW1lICsgIiBmb3VuZC4iICk7ICAgICAgICAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZEVuYWJsZW1lbnQoIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ICkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IEV4cHJlc3Npb25Db252ZXJ0ZXIuZ2V0RGVmYXVsdCgpLnBlcmZvcm0oIGVsZW1lbnQgKTsKLSAgICAgIAotICAgICAgcGxhdGZvcm0uYWRkRW5hYmxlZEV4cHJlc3Npb24oIGV4cHJlc3Npb24gKTsKLSAgICB9Ci0gICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBlcnJvciggIkVycm9yIGxvYWRpbmcgZW5hYmxlbWVudCBleHByZXNzaW9uOiAiICsgZXhjLmdldE1lc3NhZ2UoKSApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZEVudW1lcmF0aW9uKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPj4gZW51bU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsPiAgICBlbnVtSXRlbU1hcCApCi0gIHsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgZW51bUlkICAgICAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEVudW1JZCA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiZGVmYXVsdCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdICAgICBjaGlsZEVsZW1lbnRzID0gZWxlbWVudC5nZXRDaGlsZHJlbigpOwotICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlbnVtTGlzdCAgICAgID0gbmV3IFZlY3RvcjxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+KCk7Ci0gICAgCi0gICAgaWYoIGVudW1JZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIlwiSWRcIiBhdHRyaWJ1dGUgbWlzc2luZyBmcm9tIFNlcml2Y2UgUG9saWN5IEVudW1lcmF0aW9uIGVsZW1lbnQuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGZvciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkIDogY2hpbGRFbGVtZW50cyApCi0gICAgewotICAgICAgU3RyaW5nIGNoaWxkTmFtZSA9IGNoaWxkLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgCi0gICAgICBpZiggY2hpbGROYW1lLmVxdWFscyggIml0ZW0iICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxvYWRJdGVtKCBjaGlsZCwgZW51bUxpc3QsIGVudW1JdGVtTWFwICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IGVudW1lcmF0aW9uIGVsZW1lbnQsICIgKyBjaGlsZE5hbWUgKyAiIGZvdW5kLiIgKTsgICAgICAgICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0gCi0gICAgfQotICAgIAotICAgIGlmKCBkZWZhdWx0RW51bUlkICE9IG51bGwgKQotICAgIHsKLSAgICAgIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbCBkZWZhdWx0RW51bSA9IGVudW1JdGVtTWFwLmdldCggZGVmYXVsdEVudW1JZCApOwotICAgICAgCi0gICAgICBpZiggZGVmYXVsdEVudW0gPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiRGVmYXVsdCBlbnVtIGF0dHJpYnV0ZSBmb3IgZW51bWVyYXRpb24gIiArIGVudW1JZCArICIgbm90IGZvdW5kLiIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRFbnVtLnNldERlZmF1bHQoIHRydWUgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgZW51bU1hcC5wdXQoIGVudW1JZCwgZW51bUxpc3QgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRJdGVtKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICAgICAgICAgICAgICAgIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+ICAgICAgICAgICBlbnVtTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGw+IGVudW1JdGVtTWFwKQotICB7Ci0gICAgU3RyaW5nIGl0ZW1JZCAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgc2hvcnROYW1lID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJzaG9ydG5hbWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgbG9uZ05hbWUgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJsb25nbmFtZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIGlmKCBpdGVtSWQgPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJcIklkXCIgYXR0cmlidXRlIG1pc3NpbmcgZnJvbSBTZXJpdmNlIFBvbGljeSBFbnVtZXJhdGlvbiBpdGVtIGVsZW1lbnQuIiApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIGlmKCBzaG9ydE5hbWUgPT0gbnVsbCAmJiBsb25nTmFtZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggInNob3J0TmFtZSBvciBsb25nTmFtZSBhdHRyaWJ1dGUgbWlzc2luZyBmcm9tIFNlcnZpY2UgUG9saWN5IEVudW1lcmF0aW9uIGl0ZW0gZWxlbWVudC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiggc2hvcnROYW1lID09IG51bGwgKQotICAgIHsKLSAgICAgIHNob3J0TmFtZSA9IGxvbmdOYW1lOwotICAgIH0KLSAgICBlbHNlIGlmKCBsb25nTmFtZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBsb25nTmFtZSA9IHNob3J0TmFtZTsKLSAgICB9Ci0gICAgICAKLSAgICBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGwgaXRlbSA9IG5ldyBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGwoKTsKLSAgICAKLSAgICBpdGVtLnNldElkKCBpdGVtSWQgKTsKLSAgICBpdGVtLnNldFNob3J0TmFtZSggc2hvcnROYW1lICk7Ci0gICAgaXRlbS5zZXRMb25nTmFtZSggbG9uZ05hbWUgKTsKLSAgICBlbnVtTGlzdC5hZGQoIGl0ZW0gKTsKLSAgICBlbnVtSXRlbU1hcC5wdXQoIGl0ZW1JZCwgaXRlbSApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZExvYWRMaXN0ZW5lciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcj4gbG9hZExpc3RlbmVycyApCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBPYmplY3QgbGlzdGVuZXIgPSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBpZiggbGlzdGVuZXIgaW5zdGFuY2VvZiBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIgKQotICAgICAgewotICAgICAgICBsb2FkTGlzdGVuZXJzLmFkZCggKElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcilsaXN0ZW5lciApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBlcnJvciggIkxvYWQgbGlzdGVuZXIsICIgKyBlbGVtZW50LmdldEF0dHJpYnV0ZSggImNsYXNzIiApICsgIiBkb2VzIG5vdCBpbXBsZW1lbnQgSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyIiApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJFcnJvciBsb2FkaW5nIHNlcnZpY2UgcG9saWN5IGxvYWRsaXN0ZW5lci4iLCBleGMgKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRQb2xpY3koIElDb25maWd1cmF0aW9uRWxlbWVudCBwb2xpY3ksIE1hcDxTdHJpbmcsIFNlcnZpY2VQb2xpY3lJbXBsPiBwb2xpY3lNYXAgKQotICB7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gICAgICBwb2xpY3lFbGVtZW50cyA9IHBvbGljeS5nZXRDaGlsZHJlbigpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQgICAgICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggcG9saWN5LCAicGFyZW50cG9saWN5aWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIHBvbGljeSwgImlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICBlbnVtTGlzdElkICAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3ksICJlbnVtbGlzdGlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3ksICJkZWZhdWx0ZW51bWlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICBtdXRhYmxlVmFsdWUgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3ksICJtdXRhYmxlIiApOyAvLyROT04tTkxTLTEkCi0gICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICBtdXRhYmxlICAgICAgICA9IG11dGFibGVWYWx1ZSAhPSBudWxsICYmIG11dGFibGVWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCAidHJ1ZSIgKTsgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIERlc2NyaXB0b3JJbXBsICAgICAgICAgICAgICAgZGVzY3JpcHRvciAgICAgPSBudWxsOwotICAgIExpc3Q8VW5yZXNvbHZlZFJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyAgPSBuZXcgVmVjdG9yPFVucmVzb2x2ZWRSZWxhdGlvbnNoaXA+KCk7Ci0gICAgTGlzdDxTdHJpbmdbXT4gICAgICAgICAgICAgICBzdGF0ZUtleVZhbHVlcyA9IG5ldyBWZWN0b3I8U3RyaW5nW10+KCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIG11dGFibGUgYXR0cmlidXRlIHdhcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgZW51bUxpc3RJZCBhdHRyaWJ1dGUKLSAgICAvLyBhdHRyaWJ1dGUgd2FzIHNwZWNpZmllZCB0aGVuIHRoaXMgcG9saWN5IHNob3VsZCBiZSBtdXRhYmxlLCBzaW5jZQotICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBhc3NvY2lhdGUgc3RhdGUgd2l0aCBhIHBvbGljeSB0aGF0IGlzIG5vdAotICAgIC8vIGNoYW5nZWFibGUuCi0gICAgaWYoIG11dGFibGVWYWx1ZSA9PSBudWxsICYmIGVudW1MaXN0SWQgIT0gbnVsbCApCi0gICAgewotICAgICAgbXV0YWJsZSA9IHRydWU7ICAKLSAgICB9Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgcG9saWN5RWxlbWVudCA6IHBvbGljeUVsZW1lbnRzICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBwb2xpY3lFbGVtZW50LmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgCi0gICAgICAgIGlmKCBuYW1lLmVxdWFscyggImRlc2NyaXB0b3IiKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIGRlc2NyaXB0b3IgPSBSZWdpc3RyeVV0aWxzLmxvYWREZXNjcmlwdG9yKCBwb2xpY3lFbGVtZW50ICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggbmFtZS5lcXVhbHMoICJyZWxhdGlvbnNoaXAiICkgKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICBsb2FkUmVsYXRpb25zaGlwKCBwb2xpY3lFbGVtZW50LCByZWxhdGlvbnNoaXBzICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggbmFtZS5lcXVhbHMoICJzdGF0ZSIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBrZXkgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3lFbGVtZW50LCAia2V5IiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgU3RyaW5nIHZhbHVlID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIHBvbGljeUVsZW1lbnQsICJ2YWx1ZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAotICAgICAgICAgIGlmKCBrZXkgPT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoICJTZXJ2aWNlIHBvbGljeSBzdGF0ZSBtaXNzaW5nIGF0dHJpYnV0ZSBcImtleVwiLiIgKTsgLy8kTk9OLU5MUy0xJCAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmKCB2YWx1ZSA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IHN0YXRlIG1pc3NpbmcgYXR0cmlidXRlIFwidmFsdWVcIi4iICk7IC8vJE5PTi1OTFMtMSQgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpZigga2V5ICE9IG51bGwgJiYgdmFsdWUgIT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgc3RhdGVLZXlWYWx1ZXMuYWRkKCBuZXcgU3RyaW5nW117IGtleSwgdmFsdWUgfSApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvciggIlVuZGVmaW5lZCBzZXJ2aWNlIHBvbGljeSBlbGVtZW50LCAiICsgbmFtZSArICIgZm91bmQuIiApOyAgICAgICAgICAgICAgICAgICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBTZXJ2aWNlUG9saWN5SW1wbCBuZXdQb2xpY3kgPSBuZXcgU2VydmljZVBvbGljeUltcGwoIHRydWUsIGlkLCBwbGF0Zm9ybSApOwotICAgICAgCi0gICAgICBuZXdQb2xpY3kuc2V0VW5yZXNvbHZlZFBhcmVudCggcGFyZW50SWQgKTsKLSAgICAgIG5ld1BvbGljeS5zZXRVbnJlc29sdmVkUmVsYXRpb25zaGlwcyggcmVsYXRpb25zaGlwcyApOwotICAgICAgbmV3UG9saWN5LnNldERlc2NyaXB0b3IoIGRlc2NyaXB0b3IgKTsKLSAgICAgIG5ld1BvbGljeS5zZXRFbnVtTGlzdElkKCBlbnVtTGlzdElkICk7Ci0gICAgICBuZXdQb2xpY3kuc2V0RGVmYXVsdEVudW1JZCggZGVmYXVsdEVudW1JZCApOwotICAgICAgcG9saWN5TWFwLnB1dCggaWQsIG5ld1BvbGljeSApOwotICAgICAgCi0gICAgICBQb2xpY3lTdGF0ZUltcGwgcG9saWN5U3RhdGUgPSAoUG9saWN5U3RhdGVJbXBsKW5ld1BvbGljeS5nZXRQb2xpY3lTdGF0ZSgpOwotICAgICAgCi0gICAgICAvLyBUZW1wb3JhcmlseSBhbGxvdyB0aGUgc3RhdGUgdG8gYmUgdXBkYXRlZCBmb3Igc3RhdGljIHN0YXRlIHByb3ZpZGVkCi0gICAgICAvLyBieSB0aGUgZXh0ZW5kZXIuCi0gICAgICBwb2xpY3lTdGF0ZS5pbnRlcm5hbFNldE11dGFibGUoIHRydWUgKTsKLSAgICAgIAotICAgICAgZm9yKCBTdHJpbmdbXSBrZXlWYWx1ZSA6IHN0YXRlS2V5VmFsdWVzICkKLSAgICAgIHsKLSAgICAgICAgcG9saWN5U3RhdGUucHV0VmFsdWUoIGtleVZhbHVlWzBdLCBrZXlWYWx1ZVsxXSApOwotICAgICAgfQotICAgICAgCi0gICAgICBwb2xpY3lTdGF0ZS5pbnRlcm5hbFNldE11dGFibGUoIG11dGFibGUgKTsKLSAgICB9Ci0gICAgY2F0Y2goIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGVycm9yKCAiQW4gZXJyb3Igd2FzIGZvdW5kIGxvYWRpbmcgYSBzZXJ2aWNlIHBvbGljeS4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRSZWxhdGlvbnNoaXAoIElDb25maWd1cmF0aW9uRWxlbWVudCByZWxhdGlvbnNoaXBFbGVtZW50LCBMaXN0PFVucmVzb2x2ZWRSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMgKQotICB7Ci0gICAgU3RyaW5nIGVudW1WYWx1ZUF0dHIgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggcmVsYXRpb25zaGlwRWxlbWVudCwgImVudW1saXN0IiApOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgaWYoIGVudW1WYWx1ZUF0dHIgPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJTZXJ2aWNlIHBvbGljeSByZWxhdGlvbnNoaXAgbWlzc2luZyBhdHRyaWJ1dGUgXCJlbnVtTGlzdFwiLiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgIH0KLSAgICAKLSAgICBMaXN0PFN0cmluZz4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVudW1MaXN0ICAgICAgICAgPSBBcnJheXMuYXNMaXN0KCBlbnVtVmFsdWVBdHRyLnNwbGl0KCAiICIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gICAgICAgICAgICBjaGlsZHJlbiAgICAgICAgICAgICAgID0gcmVsYXRpb25zaGlwRWxlbWVudC5nZXRDaGlsZHJlbigpOwotICAgIExpc3Q8VW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcD4gdGFyZ2V0UmVsYXRpb25zaGlwTGlzdCA9IG5ldyBWZWN0b3I8VW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcD4oKTsKLSAgICAKLSAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBjaGlsZCA6IGNoaWxkcmVuICkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGNoaWxkLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgCi0gICAgICBpZiggbmFtZS5lcXVhbHMoICJ0YXJnZXRwb2xpY3kiICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxvYWRQb2xpY3lSZWxhdGlvbnNoaXAoIGNoaWxkLCB0YXJnZXRSZWxhdGlvbnNoaXBMaXN0ICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IGVsZW1lbnQsICIgKyBuYW1lICsgIiBmb3VuZC4iICk7ICAgICAgICAgICAgICAgICAgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBVbnJlc29sdmVkUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCA9IG5ldyBVbnJlc29sdmVkUmVsYXRpb25zaGlwKCBzb3VyY2VFbnVtTGlzdCwgdGFyZ2V0UmVsYXRpb25zaGlwTGlzdCApOwotICAgIAotICAgIHJlbGF0aW9uc2hpcHMuYWRkKCByZWxhdGlvbnNoaXAgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRQb2xpY3lSZWxhdGlvbnNoaXAoIElDb25maWd1cmF0aW9uRWxlbWVudCBwb2xpY3lFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwPiBwb2xpY3lSZWxhdGlvbnNoaXBMaXN0ICkKLSAgewotICAgIFN0cmluZyBpdGVtTGlzdEF0dHIgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggcG9saWN5RWxlbWVudCwgIml0ZW1saXN0IiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIHBvbGljeUlkICAgICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggcG9saWN5RWxlbWVudCwgImlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgaWYoIGl0ZW1MaXN0QXR0ciA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IHJlbGF0aW9uc2hpcCBtaXNzaW5nIGF0dHJpYnV0ZSBcImVudW1MaXN0XCIuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIGlmKCBwb2xpY3lJZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IHJlbGF0aW9uc2hpcCBtaXNzaW5nIGF0dHJpYnV0ZSBcImlkXCIuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIExpc3Q8U3RyaW5nPiAgICAgICAgICAgICAgICAgdGFyZ2V0RW51bUxpc3QgICAgID0gQXJyYXlzLmFzTGlzdCggaXRlbUxpc3RBdHRyLnNwbGl0KCAiICIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgVW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcCBwb2xpY3lSZWxhdGlvbnNoaXAgPSBuZXcgVW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcCggcG9saWN5SWQsIHRhcmdldEVudW1MaXN0ICk7Ci0gICAgCi0gICAgcG9saWN5UmVsYXRpb25zaGlwTGlzdC5hZGQoIHBvbGljeVJlbGF0aW9uc2hpcCApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZXJyb3IoIFN0cmluZyBtZXNzYWdlICkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoIG1lc3NhZ2UsIG51bGwgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TdGF0ZUVudW1lcmF0aW9uSXRlbUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZTIyOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TdGF0ZUVudW1lcmF0aW9uSXRlbUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLQotcHVibGljIGNsYXNzIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbCBpbXBsZW1lbnRzIElTdGF0ZUVudW1lcmF0aW9uSXRlbQotewotICBwcml2YXRlIFN0cmluZyAgaWQ7Ci0gIHByaXZhdGUgU3RyaW5nICBzaG9ydE5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nICBsb25nTmFtZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRGVmYXVsdCA9IGZhbHNlOwotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gaWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNob3J0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gc2hvcnROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTaG9ydE5hbWUoU3RyaW5nIHNob3J0TmFtZSkKLSAgewotICAgIHRoaXMuc2hvcnROYW1lID0gc2hvcnROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldExvbmdOYW1lKCkKLSAgewotICAgIHJldHVybiBsb25nTmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TG9uZ05hbWUoU3RyaW5nIGxvbmdOYW1lKQotICB7Ci0gICAgdGhpcy5sb25nTmFtZSA9IGxvbmdOYW1lOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBpc0RlZmF1bHQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0KGJvb2xlYW4gaXNEZWZhdWx0KQotICB7Ci0gICAgdGhpcy5pc0RlZmF1bHQgPSBpc0RlZmF1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvVW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9VbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyN2Q3NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9VbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgVW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcAotewotICBwcml2YXRlIFN0cmluZyAgICAgICBwb2xpY3lJZDsKLSAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZW51bUxpc3Q7Ci0gIAotICBwdWJsaWMgVW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcCggU3RyaW5nIHBvbGljeUlkLCBMaXN0PFN0cmluZz4gZW51bUxpc3QgKQotICB7Ci0gICAgdGhpcy5wb2xpY3lJZCA9IHBvbGljeUlkOwotICAgIHRoaXMuZW51bUxpc3QgPSBlbnVtTGlzdDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRQb2xpY3lJZCgpCi0gIHsKLSAgICByZXR1cm4gcG9saWN5SWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0RW51bUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIGVudW1MaXN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1VucmVzb2x2ZWRSZWxhdGlvbnNoaXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvVW5yZXNvbHZlZFJlbGF0aW9uc2hpcC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTE5ZjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvVW5yZXNvbHZlZFJlbGF0aW9uc2hpcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGNsYXNzIFVucmVzb2x2ZWRSZWxhdGlvbnNoaXAgCi17Ci0gIHByaXZhdGUgTGlzdDxTdHJpbmc+IHNvdXJjZUVudW1lcmF0aW9uTGlzdDsKLSAgcHJpdmF0ZSBMaXN0PFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+IHRhcmdldEVudW1lcmF0aW9uTGlzdDsKLSAgCi0gIHB1YmxpYyBVbnJlc29sdmVkUmVsYXRpb25zaGlwKCBMaXN0PFN0cmluZz4gc291cmNlRW51bWVyYXRpb25MaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwPiB0YXJnZXRFbnVtZXJhdGlvbkxpc3QgKQotICB7Ci0gICAgdGhpcy5zb3VyY2VFbnVtZXJhdGlvbkxpc3QgPSBzb3VyY2VFbnVtZXJhdGlvbkxpc3Q7Ci0gICAgdGhpcy50YXJnZXRFbnVtZXJhdGlvbkxpc3QgPSB0YXJnZXRFbnVtZXJhdGlvbkxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0U291cmNlRW51bWVyYXRpb25MaXN0KCkKLSAgewotICAgIHJldHVybiBzb3VyY2VFbnVtZXJhdGlvbkxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0PFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+IGdldFRhcmdldEVudW1lcmF0aW9uTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0RW51bWVyYXRpb25MaXN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZjBhMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSURlc2NyaXB0b3IKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHNob3J0IG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNob3J0TmFtZSgpOwotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIHNob3J0IG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLgotICAgKiBAcGFyYW0gbmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvcnROYW1lKFN0cmluZyBuYW1lKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBsb25nIG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb25nTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsb25nIG5hbWUgZm9yIHRoZSBkZXNjcmlwdG9yLgotICAgKiBAcGFyYW0gbG9uZ05hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvbmdOYW1lKFN0cmluZyBsb25nTmFtZSk7Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGlzIGRlc2NyaXB0b3IuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgZGVzY3JpcHRvci4KLSAgICogQHBhcmFtIGRlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGljb24gcGF0aCBmb3IgdGhpcyBkZXNjcmlwdG9yLiAgVGhpcyBwYXRoCi0gICAqIGlzIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gc3BlY2lmaWVkIGJ5IHRoZSBpY29uIGJ1bmRsZSBpZC4gIFRoaXMKLSAgICogbWV0aG9kIG1heSByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGlzIGRlc2NyaXB0b3IuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEljb25QYXRoKCk7Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgaWNvbiBwYXRjaCBmb3IgdGhpcyBkZXNjcmlwdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGljb25QYXRoCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJY29uUGF0aChTdHJpbmcgaWNvblBhdGgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGJ1bmRsZSBJRCBvZiBhIHBsdWdpbiB0aGF0IGNvbnRhaW5zIGFuIGljb24uICBUaGlzCi0gICAqIG1ldGhvZCBtYXkgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gaWNvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXNjcmlwdG9yLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJY29uQnVuZGxlSWQoKTsKLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBpY29uIGJ1bmRsZSBpZCBmb3IgdGhpcyBkZXNjcmlwdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGljb25CdW5kbGVJZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWNvbkJ1bmRsZUlkKFN0cmluZyBpY29uQnVuZGxlSWQpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGNvbnRleHQgaGVscCBpZCBmb3IgdGhpcyBkZXNjcmlwdG9yLiAgVGhpcyBtZXRob2QKLSAgICogbWF5IHJldHVybiBudWxsIGlmIG5vIGNvbnRleHQgaGFzIGJlZW4gc3BlY2lmaWVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb250ZXh0SGVscElkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGNvbnRleHQgaGVscCBpZCBmb3IgdGhpcyBkZXNjcmlwdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHRIZWxwSWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHRIZWxwSWQoU3RyaW5nIGNvbnRleHRIZWxwSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxOGI4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBmaWx0ZXIgc2VydmljZSBwb2xpY2llcy4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUZpbHRlcgotewotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBwb2xpY3kgdGhlIHNlcnZpY2UgcG9saWN5LgotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHBvbGljeSBpcyBhY2NlcHRlZCBieSB0aGUgZmlsdGVyLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWNjZXB0KCBJU2VydmljZVBvbGljeSBwb2xpY3kgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeUVudW1lcmF0aW9uTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNmU2YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgZW5jYXBzdWxhdGVzIHRoZSBjb21iaW5hdGlvbiBvZiBhIHBvbGljeSBhbmQgYSBsaXN0Ci0gKiBvZiBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtcy4gIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgd2l0aCB0aGUgSVBvbGljeVJlbGF0aW9uc2hpcAotICogaW50ZXJmYWNlLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJUG9saWN5RW51bWVyYXRpb25MaXN0Ci17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgSVNlcnZpY2VQb2xpY3kgZ2V0UG9saWN5KCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2Ygc3RhdGUgZW51bWVyYXRpb24gaXRlbXMuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGdldEVudW1lcmF0aW9uTGlzdCgpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lSZWxhdGlvbnNoaXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODU0ODQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuCi0gKiBzZXJ2aWNlIHBvbGljaWVzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJUG9saWN5UmVsYXRpb25zaGlwCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzb3VyY2Ugc2VydmljZSBwb2xpY3kgYWxvbmcgd2l0aCBhIGxpc3QKLSAgICogb2YgcG9zc2libGUgc3RhdGVzIHRoYXQgdGhpcyBzb3VyY2UgcG9saWN5IGNvdWxkIGJlIGluLgotICAgKi8KLSAgcHVibGljIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2Ygb3RoZXIgdGFyZ2V0IHNlcnZpY2UgcG9saWNpZXMgYW5kIHRoZSBzdGF0ZXMgdGhhdAotICAgKiB0aGVzZSBwb2xpY2llcyBtdXN0IGJlIGluIHRvIHNhdGlzZnkgdGhlIHJlbGF0aW9uc2hpcC4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IGdldFJlbGF0ZWRQb2xpY2llcygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODkyNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcjsKLQotLyoqCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgYnkgc2VydmljZSBwb2xpY3kgZXh0ZW5kZXJzIHRvIHNhdmUgdGhlIHN0YXRlIG9mCi0gKiB0aGVyZSBwb2xpY2llcy4gIE5vdGU6IGV4dGVuZGVycyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBpZiB0aGVzZSBjaGFuZ2VzCi0gKiBhcmUgY29tbWl0dGVkIG9yIGRpc2NhcmRlZC4gIFRoaXMgaXMgaGFuZGxlZCBieSB0aGUgZnJhbWV3b3JrLiAgRm9yIGV4YW1wbGUKLSAqIGlmIGFuIGV4dGVuZGVyIG1ha2VzIGEgbnVtYmVyIG9mIGNhbGxzIHRvIHRoZSBwdXRWYWx1ZSBtZXRob2QgYW5kIGF0IHNvbWUKLSAqIHBvaW50IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5kaXNjYXJkKCkgaXMgY2FsbGVkLCB0aGUgZnJhbWV3b3JrIHdpbGwgaGFuZGxlCi0gKiB0aGUgZGlzY2FyZGluZyBvZiB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSBwdXRWYWx1ZSBtZXRob2QgY2FsbHMuCi0gKiAKLSAqIE5vdGU6IHRoaXMgZGF0YSB3aWxsIGV2ZW50dWFsbHkgYmUgc3RvcmVkIGluIEVjbGlwc2Ugd2l0aCB0aGUgZm9sbG93aW5nIGtleToKLSAqIAotICogICAgIHNlcnZpY2VQb2xpY3lJZCArICIuIiArIGtleQotICogICAgIAotICogICAgIHdoZXJlIHNlcnZpY2VQb2xpY3lJZCBpcyB0aGUgdW5pcXVlIGlkIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5IGFuZCB0aGUga2V5Ci0gKiAgICAgaXMgdGhlIGtleSBzcGVjaWZpZWQgaW4gdGhlIHB1dFZhbHVlIG1ldGhvZC4KLSAqIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lTdGF0ZQotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBEZWZhdWx0VmFsdWVLZXkgPSAiZGVmYXVsdC52YWx1ZS5rZXkiOyAvLyROT04tTkxTLTEkCi0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSBzdGF0ZSBvZiB0aGlzIHBvbGljeSBpcyBtdXRhYmxlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNdXRhYmxlKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBtdXRhYmxlIHNldHMgd2hldGhlciB0aGlzIHBvbGljeSBpcyBtdXRhYmxlIG9yIG5vdC4gIE5vdGU6Ci0gICAqIGlmIHRoZSBzZXJ2aWNlIHBvbGljeSBmb3IgdGhpcyBJUG9saWN5U3RhdGUgb2JqZWN0IGlzIHByZWRlZmluZWQgY2FsbGluZwotICAgKiB0aGlzIG1ldGhvZCB3aWxsIGhhdmUgbm8gZWZmZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TXV0YWJsZSggYm9vbGVhbiBtdXRhYmxlICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgc2V0cyBzb21lIHN0YXRlIGZvciBhIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIGtleSBhIGtleSBmb3IgdGhpcyBwb2xpY3kgc3RhdGUuCi0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgb2YgdGhlIHBvbGljeSBzdGF0ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHB1dFZhbHVlKCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUgKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBnZXRzIHNvbWUgc3RhdGUgZm9yIGEgc2VydmljZSBwb2xpY3kuICBJZiB0aGVyZQotICAgKiBpcyBubyBwZXJzaXN0ZWQgdmFsdWUgZm9yIHRoaXMga2V5IHRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUKLSAgICogcmV0dXJuZWQuICBJZiB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBrZXkgc3BlY2lmaWVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRWYWx1ZSggU3RyaW5nIGtleSApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGRlZmF1bHQgZm9yIGEgcGFydGljdWxhciBrZXkuICAKLSAgICogCi0gICAqIEBwYXJhbSBrZXkgdGhlIGtleQotICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgKiBAcGFyYW0gb3ZlcnJpZGVFeGlzdGluZyBpbmRpY2F0ZXMgaWYgYSBleGlzdGluZyBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSBvdmVycmlkZGVuLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHV0RGVmYXVsdFZhbHVlKCBTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdFZhbHVlLCBib29sZWFuIG92ZXJyaWRlRXhpc3RpbmcgKTsKLSAgCi0gIC8qKgotICAgKiBBZGRzIGEgcG9saWN5IHN0YXRlIGNoYW5nZSBsaXN0ZW5lciB0byB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lcgotICAgKiBAcGFyYW0gbm90aWZ5T25seU9uQ29tbWl0IGluZGljYXRlcyBpZiB0aGlzIGxpc3RlbmVyIHNob3VsZCBiZQotICAgKiBjYWxsZWQgZm9yIGFsbCBzdGF0ZSBjaGFuZ2VzIG9yIG9ubHkgd2hlbiB0aGUgc3RhdGUgZGF0YSBpcwotICAgKiBjb21taXR0ZWQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciggSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIsIGJvb2xlYW4gbm90aWZ5T25seU9uQ29tbWl0ICk7Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIHBvbGljeSBzdGF0ZSBjaGFuZ2UgbGlzdGVuZXIgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZUVudW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjA3MThhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMzI1ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgc3RhdGUgd2hlbiBhbiBlbnVtZXJhdGlvbiBpcyB1c2VkCi0gKiB0byBwZXJzaXN0IHN0YXRlLiAgCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lTdGF0ZUVudW0KLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFJVRV9FTlVNICA9ICJvcmcuZWNsaXBzZS53c3QudHJ1ZSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEZBTFNFX0VOVU0gPSAib3JnLmVjbGlwc2Uud3N0LmZhbHNlIjsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBlbnVtZXJhdGlvbiBpZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW51bUlkKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBlbnVtIGl0ZW0gZm9yIHRoaXMgZW51bWVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRJZCgpOwotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGN1cnJlbnQgZW51bSBpdGVtLiAgVGhpcyBlbnVtIGl0ZW0gaWQgbmVlZHMgdG8gYmUgYW5kIGVudW0gaXRlbQotICAgKiBpZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbnVtZXJhdGlvbi4KLSAgICogQHBhcmFtIGl0ZW1JZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEl0ZW0oIFN0cmluZyBpdGVtSWQgKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjdXJyZW50IGVudW0gaXRlbS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZ2V0Q3VycmVudEl0ZW0oKTsgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NjEzZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU2VydmljZVBvbGljeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVN0YXR1c0NoYW5nZUxpc3RlbmVyOwotCi1wdWJsaWMgaW50ZXJmYWNlIElTZXJ2aWNlUG9saWN5Ci17IAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoaXMgU2VydmljZSBwb2xpY3kgaXMgZGVmaW5lZCBpbiBwbHVnaW4ueG1sIAotICAgKiBtZXRhIGRhdGEuICBPdGhlcndpc2UsIGZhbHNlIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQcmVkZWZpbmVkKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgdW5pcXVlIElEIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBsaXN0IG9mIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgSVNlcnZpY2VQb2xpY3kgb2JqZWN0cy4gIAotICAgKiAgCi0gICAqLwotICBwdWJsaWMgTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiBnZXRSZWxhdGlvbnNoaXBzKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHJlbGF0aW9uc2hpcHMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gcmVsYXRpb25zaGlwcwotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVsYXRpb25zaGlwcyggTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiByZWxhdGlvbnNoaXBzICk7Ci0gIAotICAvKioKLSAgICogUmVzdG9yZXMgdGhlIHBvbGljeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuICBBbGwgbG9jYWxseSBhZGRlZAotICAgKiBjaGlsZCBwb2xpY2llcyB3aWxsIGJlIHJlbW92ZWQuICBUaGUgc3RhdGUgb2YgZWFjaCBwb2xpY3kgd2lsbAotICAgKiBiZSBzZXQgdG8gaXMgZGVmYXVsdCB2YWx1ZS4gICBOb3RlOiB0aGUgY2hhbmdlcyBtYWRlIGNhbGxpbmcKLSAgICogdGhpcyBtZXRob2QgY2FuIGJlIHVuZG9uZSBpZiB0aGUgcGxhdGZvcm0gcGVyZm9ybXMgYSBkaXNjYXJkQ2hhbmdlcwotICAgKiBvcGVyYXRpb24uICBBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgcGxhZm9ybSBwZXJmb3JtcyBhIGNvbW1pdENoYW5nZXMKLSAgICogb3BlcmF0aW9uIHRoZXNlIGNoYW5nZXMgd2lsbCBiZSBzYXZlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cygpOwotICAKLSAgLyoqCi0gICAqIFJlc3RvcmVzIHRoZSBwb2xpY3kgdG8gaXRzIG9yaWdpbmFsIHN0YXRlIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4gIAotICAgKiBUaGUgc3RhdGUgb2YgZWFjaCBwb2xpY3kgd2lsbCBiZSBzZXQgdG8gaXMgZGVmYXVsdCB2YWx1ZS4gICAKLSAgICogTm90ZTogdGhlIGNoYW5nZXMgbWFkZSBjYWxsaW5nCi0gICAqIHRoaXMgbWV0aG9kIGNhbiBiZSB1bmRvbmUgaWYgdGhlIHBsYXRmb3JtIHBlcmZvcm1zIGEgZGlzY2FyZENoYW5nZXMKLSAgICogb3BlcmF0aW9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHBsYWZvcm0gcGVyZm9ybXMgYSBjb21taXRDaGFuZ2VzCi0gICAqIG9wZXJhdGlvbiB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN0b3JlRGVmYXVsdHMoIElQcm9qZWN0IHByb2plY3QgKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBwb2xpY3kgc3RhdGUgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgSVBvbGljeVN0YXRlIGdldFBvbGljeVN0YXRlKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0LgotICAgKiBAcmV0dXJuIFRoZSBJUG9saWN5U3RhdGUgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LgotICAgKi8KLSAgcHVibGljIElQb2xpY3lTdGF0ZSBnZXRQb2xpY3lTdGF0ZSggSVByb2plY3QgcHJvamVjdCApOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0YXRlIGVudW1lcmF0aW9uIG9iamVjdCBmb3IgdGhpcyBzZXJ2aWNlCi0gICAqIHBvbGljeS4gIElmIHRoaXMgcG9saWN5IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW4gZW51bWVyYXRpb24KLSAgICogbnVsbCB3aWxsIGJlIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIElQb2xpY3lTdGF0ZUVudW0gZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc3RhdGUgZW51bWVyYXRpb24gZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LiAgSWYKLSAgICogbm8gc3RhdGUgZW51bWVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2aWNlIHBvbGljeQotICAgKiBudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgSVBvbGljeVN0YXRlRW51bSBnZXRQb2xpY3lTdGF0ZUVudW0oIElQcm9qZWN0IHByb2plY3QgKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBwYXJlbnQgcG9saWN5IGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LiAgSWYgdGhpcwotICAgKiBzZXJ2aWNlIHBvbGljeSBoYXMgbm8gcGFyZW50IHRoZW4gbnVsbCBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRQYXJlbnRQb2xpY3koKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjaGlsZCBzZXJ2aWNlIHBvbGljaWVzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LiAgQ2hhbmdlcwotICAgKiBtYWRlIHRvIHRoZSByZXR1cm5lZCBsaXN0IGRvIG5vdCBjaGFuZ2UgdGhlIHVuZGVybHlpbmcgbnVtYmVyIG9mIGNoaWxkcmVuCi0gICAqIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKi8KLSAgcHVibGljIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGdldENoaWxkcmVuKCk7Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIGNoaWxkIHNlcnZpY2UgcG9saWN5IGZyb20gdGhpcyBzZXJ2aWNlIHBvbGljeS4gIElmIHRoZSBwb2xpY3kgc3BlY2lmaWVkCi0gICAqIGlzIG51bGwgb3IgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBzZXJ2aWNlIHBvbGljeSB0aGlzIG1ldGhvZCB3aWxsIGhhdmUgbm8gZWZmZWN0LgotICAgKiBBbHNvLCBpZiB0aGlzIHNlcnZpY2UgcG9saWN5IGlzIHByZWRlZmluZWQgY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGhhdmUKLSAgICogbm8gZWZmZWN0LgotICAgKiBAcGFyYW0gcG9saWN5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVDaGlsZCggSVNlcnZpY2VQb2xpY3kgcG9saWN5ICk7Ci0gIAotICAvKioKLSAgICogQWRkcyBhIGNoaWxkIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciApOwotICAKLSAgLyoqCi0gICAqIFJlbW92ZXMgYSBjaGlsZCBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIEBwYXJhbSBsaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKTsKLSAgCi0gIC8qKgotICAgKiBBZGRzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciB0byB0aGlzIHNlcnZpY2UgcG9saWN5LiBXaGVuIHRoZSBzdGF0dXMgY2hhbmdlcwotICAgKiB0aGlzIGxpc3RlbmVyIHdpbGwgYmUgbm90aWZpZWQuCi0gICAqICAKLSAgICogQHBhcmFtIGxpc3RlbmVyCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRTdGF0dXNDaGFuZ2VMaXN0ZW5lciggSVN0YXR1c0NoYW5nZUxpc3RlbmVyIGxpc3RlbmVyICk7Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIHN0YXR1cyBjaGFuZ2UgbGlzdGVuZXIgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyCi0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVTdGF0dXNDaGFuZ2VMaXN0ZW5lciggSVN0YXR1c0NoYW5nZUxpc3RlbmVyIGxpc3RlbmVyICk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc3RhdHVzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCk7Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgc3RhdHVzIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3RhdHVzKCBJU3RhdHVzIHN0YXR1cyApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVN0YXRlRW51bWVyYXRpb25JdGVtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYWM1YWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBkZXNjcmliZSBhIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0gdGhhdCB3YXMKLSAqIGRlZmluZWQgYnkgYW4gZW51bWVyYXRpb24gaW4gcGx1Z2luLnhtbCBtZXRhIGRhdGEuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTdGF0ZUVudW1lcmF0aW9uSXRlbQoteyAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBJRCBvZiB0aGlzIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCk7Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTaG9ydE5hbWUoKTsKLSAgICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGxvbmcgbmFtZSBvZiB0aGlzIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvbmdOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIGVudW1lcmF0aW9uIGl0ZW0gaXMgdGhlIGRlZmF1bHQgZm9yIHRoaXMKLSAgICogZW51bWVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNTY2ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIAotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVBvbGljeUVudW1lcmF0aW9uTGlzdCBpbnRlcmZhY2UuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbCBpbXBsZW1lbnRzIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QKLXsKLSAgcHJpdmF0ZSBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZW51bUxpc3Q7Ci0gIHByaXZhdGUgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgICAgIHBvbGljeTsKLSAgCi0gIC8qKgotICAgKiBBIHNpbXBsZSBjb25zdHJ1Y3RvciBmb3IgdGhpcyBjbGFzcy4KLSAgICogCi0gICAqIEBwYXJhbSBlbnVtTGlzdAotICAgKiBAcGFyYW0gcG9saWN5Ci0gICAqLwotICBwdWJsaWMgUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbCggTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1MaXN0LCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotICB7Ci0gICAgdGhpcy5lbnVtTGlzdCA9IGVudW1MaXN0OwotICAgIHRoaXMucG9saWN5ICAgPSBwb2xpY3k7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCBvZiBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZ2V0RW51bWVyYXRpb25MaXN0KCkKLSAgewotICAgIHJldHVybiBlbnVtTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgSVNlcnZpY2VQb2xpY3kgZ2V0UG9saWN5KCkKLSAgewotICAgIHJldHVybiBwb2xpY3k7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvUG9saWN5UmVsYXRpb25zaGlwSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NGFlOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIAotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVBvbGljeVJlbGF0aW9uc2hpcAotICogaW50ZXJmYWNlLgotICoKLSAqLwotcHVibGljIGNsYXNzIFBvbGljeVJlbGF0aW9uc2hpcEltcGwgaW1wbGVtZW50cyBJUG9saWN5UmVsYXRpb25zaGlwCi17Ci0gIHByaXZhdGUgSVBvbGljeUVudW1lcmF0aW9uTGlzdCAgICAgICBwb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci0gIHByaXZhdGUgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiByZWxhdGVkUG9saWNlczsKLSAgCi0gIHB1YmxpYyBQb2xpY3lSZWxhdGlvbnNoaXBJbXBsKCBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHBvbGljeUVudW1lcmF0aW9uTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gcmVsYXRlZFBvbGljaWVzICkKLSAgewotICAgIHRoaXMucG9saWN5RW51bWVyYXRpb25MaXN0ID0gcG9saWN5RW51bWVyYXRpb25MaXN0OwotICAgIHRoaXMucmVsYXRlZFBvbGljZXMgICAgICAgID0gcmVsYXRlZFBvbGljaWVzOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc291cmNlIHNlcnZpY2UgcG9saWN5IGFsb25nIHdpdGggYSBsaXN0Ci0gICAqIG9mIHBvc3NpYmxlIHN0YXRlcyB0aGF0IHRoaXMgc291cmNlIHBvbGljeSBjb3VsZCBiZSBpbi4KLSAgICovCi0gIHB1YmxpYyBJUG9saWN5RW51bWVyYXRpb25MaXN0IGdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gcG9saWN5RW51bWVyYXRpb25MaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBsaXN0IG9mIG90aGVyIHRhcmdldCBzZXJ2aWNlIHBvbGljaWVzIGFuZCB0aGUgc3RhdGVzIHRoYXQKLSAgICogdGhlc2UgcG9saWNpZXMgbXVzdCBiZSBpbiB0byBzYXRpc2Z5IHRoZSByZWxhdGlvbnNoaXAuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiBnZXRSZWxhdGVkUG9saWNpZXMoKQotICB7Ci0gICAgcmV0dXJuIHJlbGF0ZWRQb2xpY2VzOwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxYTQzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeUFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeUFjdGl2YXRvciBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0JCi0JLyoqCi0JICogTG9ncyBhbiBlcnJvciB3aXRoIHRoaXMgcGx1Z2luLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlCi0JICogQHBhcmFtIGV4YwotCSAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCBtZXNzYWdlLCBleGMgKTsKLSAgICAKLSAgICBnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzc2MGQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMzI1ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI7Ci0KLS8qKgotICogCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gYWNjZXNzIGFuZCBhZGQgc2VydmljZSBwb2xpY2llcyB0byB0aGUgcGxhdGZvcm0uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeVBsYXRmb3JtCi17Ci0gIHByaXZhdGUgc3RhdGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBpbnN0YW5jZTsKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtSW1wbDsKLSAgCi0gIHByaXZhdGUgU2VydmljZVBvbGljeVBsYXRmb3JtKCkKLSAgewotICAgIHBsYXRmb3JtSW1wbCA9IG5ldyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiggaW5zdGFuY2UgPT0gbnVsbCApCi0gICAgewotICAgICAgaW5zdGFuY2UgPSBuZXcgU2VydmljZVBvbGljeVBsYXRmb3JtKCk7Ci0gICAgICBpbnN0YW5jZS5wbGF0Zm9ybUltcGwubG9hZCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIG9iamVjdAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHBsYXRmb3JtIGlzIGVuYWJsZWQgZm9yIHNwZWNpZmllZCBvYmplY3QuICBJbiBtb3N0Ci0gICAqIGNhc2VzIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHdpbGwgYmUgYW4gSVByb2plY3QuICBUaGlzIG1ldGhvZCBpcyB1c3VhbGx5IGNhbGxlZAotICAgKiB0byBkZXRlcm1pbmUgaWYgYSB0aGUgc2VydmljZSBwb2xpY3kgZW50cnkgc2hvdWxkIGFwcGVhciBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wbC5pc0VuYWJsZWQoIG9iamVjdCApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgY29tbWl0IGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSAgICogdGhlIHNlcnZpY2UgcG9saWNpZXMuICBUaGUgbWV0aG9kIG9ubHkgYXBwbGllcyB0byBzdGF0ZSBjaGFuZ2VzIGF0IHRoZSB3b3Jrc3BhY2UKLSAgICogbGV2ZWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb21taXRDaGFuZ2VzKCkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5jb21taXRDaGFuZ2VzKCB0cnVlICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZGlzY2FyZCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gICAqIHRoZSBzZXJ2aWNlIHBvbGljaWVzLiAgVGhlIG1ldGhvZCBvbmx5IGFwcGxpZXMgdG8gc3RhdGUgY2hhbmdlcyBhdCB0aGUgd29ya3NwYWNlCi0gICAqIGxldmVsLgotICAgKi8KLSAgcHVibGljIHZvaWQgZGlzY2FyZENoYW5nZXMoKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLmRpc2NhcmRDaGFuZ2VzKCk7IAotICB9Ci0gIAotICAvKioKLSAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGNvbW1pdCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gICAqIHRoZSBzZXJ2aWNlIHBvbGljaWVzIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4gIFRoZSBtZXRob2Qgb25seSBhcHBsaWVzIHRvIAotICAgKiBzdGF0ZSBjaGFuZ2VzIGF0IHRoZSBwcm9qZWN0IGxldmVsLgotICAgKi8KLSAgcHVibGljIHZvaWQgY29tbWl0Q2hhbmdlcyggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwuY29tbWl0Q2hhbmdlcyggcHJvamVjdCApOwotICB9Ci0gIAotICAvKioKLSAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGRpc2NhcmQgYWxsIHRoZSBzdGF0ZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIHRvIGFsbAotICAgKiB0aGUgc2VydmljZSBwb2xpY2llcyBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuICBUaGUgbWV0aG9kIG9ubHkgYXBwbGllcyB0byAKLSAgICogc3RhdGUgY2hhbmdlcyBhdCB0aGUgcHJvamVjdCBsZXZlbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGRpc2NhcmRDaGFuZ2VzKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5kaXNjYXJkQ2hhbmdlcyggcHJvamVjdCApOyAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYWxsIHNlcnZpY2UgcG9saWN5IElEcyB0aGF0IGFyZSBkZWZpbmVkLgotICAgKi8KLSAgcHVibGljIFNldDxTdHJpbmc+IGdldEFsbFBvbGljeUlkcygpCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmdldEFsbFBvbGljeUlkcygpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBmaWx0ZXIgYSBmaWx0ZXIgYSB0aGUgc2VydmljZSBwb2xpY2llcy4gIFRoaXMgbWV0aG9kIG1heSBiZSBudWxsIGlmCi0gICAqIG5vIGZpbHRlciBpcyByZXF1aXJlZC4KLSAgICogQHJldHVybiByZXR1cm5zIGFsbCByb290IGxldmVsIHNlcnZpY2UgcG9saWNpZXMuICBJZiBhIGZpbHRlciBpcyBzcGVjaWZpZWQKLSAgICogc29tZSBzZXJ2aWNlIHBvbGljaWVzIG1heSBiZSByZW1vdmVkIGZyb20gdGhlIHJldHVybmVkIGxpc3QuICBBIHJvb3QKLSAgICogbGV2ZWwgc2VydmljZSBwb2xpY3kgaXMgZGVmaW5lZCB0byBiZSBhIHNlcnZpY2UgcG9saWN5IHdpdGggbm8gcGFyZW50LgotICAgKiAKLSAgICovCi0gIHB1YmxpYyBMaXN0PElTZXJ2aWNlUG9saWN5PiBnZXRSb290U2VydmljZVBvbGljaWVzKCBJRmlsdGVyIGZpbHRlciApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIGZpbHRlciApOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBpZAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzZXJ2aWNlIHBvbGljeSBnaXZlbiBpdCdzIHVuaXF1ZSBJRC4KLSAgICovCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRTZXJ2aWNlUG9saWN5KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wbC5nZXRTZXJ2aWNlUG9saWN5KCBpZCApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBwcm9qZWN0IGhhcyBiZWVuIGVuYWJsZWQgZm9yCi0gICAqIHByb2plY3Qgc3BlY2lmaWMgcG9saWN5IHByZWZlcmVuY2VzLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIHJldHVybiBwbGF0Zm9ybUltcGwuaXNQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBwcm9qZWN0ICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHdoZXRoZXIgcHJvamVjdCBzcGVjaWZpYyBzZXJ2aWNlIHBvbGljeSBwcmVmZXJlbmNlcyBpcyBlbmFibGVkIG9yIG5vdC4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEBwYXJhbSB2YWx1ZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggSVByb2plY3QgcHJvamVjdCwgYm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwuc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggcHJvamVjdCwgdmFsdWUgKTsgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXN0b3JlcyB0aGUgd29ya3NwYWNlIGxldmVsIGRlZmF1bHRzLiAgTm90ZTogdGhlIHN0YXRlIGNoYW5nZXMgbWFkZSBieSAKLSAgICogY2FsbGluZyB0aGlzIG1ldGhvZCBuZWVkIHRvIGJlIGNvbW1pdHRlZCBvciBkaXNjYXJkZWQgYnkgdGhlIHBsYXRmb3JtLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdG9yZURlZmF1bHRzKCkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5yZXN0b3JlRGVmYXVsdHMoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlc3RvcmVzIHRoZSBwcm9qZWN0IGxldmVsIGRlZmF1bHRzLiAgTm90ZTogdGhlIHN0YXRlIGNoYW5nZXMgbWFkZSBieSAKLSAgICogY2FsbGluZyB0aGlzIG1ldGhvZCBuZWVkIHRvIGJlIGNvbW1pdHRlZCBvciBkaXNjYXJkZWQgYnkgdGhlIHBsYXRmb3JtLgotICAgKgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cyggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwucmVzdG9yZURlZmF1bHRzKCBwcm9qZWN0ICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGFuIElTZXJ2aWNlUG9saWN5IG9iamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBwb2xpY3kgZm9yIHRoaXMgcG9saWN5LiAgSWYgdGhpcyBwb2xpY3kgaGFzIG5vIAotICAgKiBwYXJlbnQgbnVsbCBtYXkgYmUgc3BlY2lmaWVkLgotICAgKiBAcGFyYW0gaWQgVGhpcyBpcyBhIHVuaXF1ZSBpZCBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4gIElmIHRoZSBpZCBzcGVjaWZpZWQKLSAgICogaXMgbm90IHVuaXF1ZSB0cmFpbGluZyBudW1lcmljYWwgZGlnaXRzIGluIHRoZSBpZCB3aWxsIGJlIHN0cmlwcGVkIG9mZi4gIAotICAgKiBOdW1lcmljYWwgZGlnaXRzIHdpbGwgdGhlbiBiZSBhZGRlZCB0byBlbmQgb2YgdGhlIGlkIHRvIG1ha2UgaXQgdW5pcXVlLgotICAgKiBJZiB0aGUgaWQgaXMgZW1wdHkgb3IgbnVsbCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzaWduIGEgdW5pcXVlIGlkLgotICAgKiBAcGFyYW0gZW51bUxpc3RJZCBJZiB0aGlzIHBvbGljeSdzIHN0YXRlIGlzIGRlZmluZWQgYnkgYW4gZW51bWVyYXRpb24KLSAgICogdGhlIGVudW1lcmF0aW9uIGlkIHNob3VsZCBiZSBzcGVjaWZpZWQgaGVyZS4gIE90aGVyd2lzZSBudWxsIHNob3VsZCBiZQotICAgKiBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSBkZWZhdWx0RW51bUlkIElmIHRoaXMgcG9saWN5J3Mgc3RhdGUgaXMgZGVmaW5lZCBieSBhbiBlbnVtZXJhdGlvbgotICAgKiB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgdmFsdWUuICBUaGlzIHZhbHVlIG1heSBiZSBudWxsIAotICAgKiBpZiBub3QgdXNpbmcgYW4gZW51bWVyYXRpb24gb3IgaWYgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGVudW1lcmF0aW9uCi0gICAqIHNob3VsZCBiZSB1c2VkLgotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzZXJ2aWNlIHBvbGljeSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgSVNlcnZpY2VQb2xpY3kgY3JlYXRlU2VydmljZVBvbGljeSggSVNlcnZpY2VQb2xpY3kgcGFyZW50LCBTdHJpbmcgaWQsIFN0cmluZyBlbnVtTGlzdElkLCBTdHJpbmcgZGVmYXVsdEVudW1JZCApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmNyZWF0ZVNlcnZpY2VQb2xpY3koIHBhcmVudCwgaWQsIGVudW1MaXN0SWQsIGRlZmF1bHRFbnVtSWQgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlbW92ZXMgYSBzZXJ2aWNlIHBvbGljeSBmcm9tIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybS4KLSAgICogCi0gICAqIEBwYXJhbSBwb2xpY3kgdGhlIHNlcnZpY2UgcG9saWN5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVTZXJ2aWNlUG9saWN5KCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLnJlbW92ZVBsYXRmb3JtUG9saWN5KCBwb2xpY3kgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBjYWxscyB0byBsaXN0ZW5lciB0byBhbnkgY2hpbGQgY2hhbmdlIHRoYXQgaXMKLSAgICogbWFkZSBpbiB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0gcmVnYXJkbGVzcyBvZiB3aGVyZSBpdCBpcyAKLSAgICogbG9jYXRlZCBpbiB0aGUgdHJlZSBvZiBzZXJ2aWNlIHBvbGljaWVzLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyCi0gICAqIEBwYXJhbSBvbkNvbW1pdCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGxpc3RlbmVyIHNob3VsZCBiZSBpbnZva2VkIHdoZW4KLSAgICogdGhlIHRoZSBwbGF0Zm9ybSBjaGFuZ2VzIGFyZSBjb21taXR0ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDaGlsZENoYW5nZUxpc3RlbmVyKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciwgYm9vbGVhbiBvbkNvbW1pdCApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwuYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lciggbGlzdGVuZXIsIG9uQ29tbWl0ICk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcXVldWVDaGlsZENoYW5nZUxpc3RlbmVycyggYm9vbGVhbiBxdWV1ZSApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwucXVldWVDaGlsZENoYW5nZUxpc3RlbmVycyggcXVldWUgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlbW92ZXMgYSBjaGlsZCBjaGFuZ2UgbGlzdGVuZXIgZnJvbSB0aGUgc2VydmljZSBwb2xpY3kgcGxhdGZvcm0uCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICogQHBhcmFtIG9uQ29tbWl0IGluZGljYXRlcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGxpc3RlbmVyIHNob3VsZCBiZSByZW1vdmVkCi0gICAqIGZyb20gdGhlIG9uQ29tbWl0IGxpc3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciwgYm9vbGVhbiBvbkNvbW1pdCApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwucmVtb3ZlQ2hpbGRDaGFuZ2VMaXN0ZW5lciggbGlzdGVuZXIsIG9uQ29tbWl0ICk7ICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBwcm9qZWN0IHBsYXRmb3JtIGxpc3RlbmVyLiAgV2hlbiBhIHBhcnRpY3VsYXIgcHJvamVjdCBpcyByZWZlcmVuY2VkCi0gICAqIGJ5IGluIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSB0aGlzIGxpc3RlbmVyIHdpbGwgYmUgY2FsbGVkIHRoZSBmaXJzdAotICAgKiB0aW1lIHRoZSBwcm9qZWN0IGlzIGxvYWRlZCBpbnRvIHRoZSBzeXN0ZW0uCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcm9qZWN0TG9hZExpc3RlbmVyKCBJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5hZGRQcm9qZWN0TG9hZExpc3RlbmVyKCBsaXN0ZW5lciApOwotICB9Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIHByb2plY3QgcGxhdGZvcm0gbGlzdGVuZXIuCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyCi0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVQcm9qZWN0TG9hZExpc3RlbmVyKCBJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5yZW1vdmVQcm9qZWN0TG9hZExpc3RlbmVyKCBsaXN0ZW5lciApOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gZW51bUlkCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2Ygc3RhdGUgZW51bWVyYXRpb24gaXRlbXMgZ2l2ZW4gdGhlIHVuaXF1ZQotICAgKiBlbnVtZXJhdGlvbiBJRCBmb3IgdGhpcyBlbnVtZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZ2V0U3RhdGVFbnVtZXJhdGlvbiggU3RyaW5nIGVudW1JZCApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmdldFN0YXRlRW51bWVyYXRpb24oIGVudW1JZCApOyAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gc3RhdGVJdGVtSWQKLSAgICogQHJldHVybiByZXR1cm5zIGEgc3RhdGUgZW51bWVyYXRpb24gaXRlbSBnaXZlbiB0aGlzIElEIGZvciB0aGlzIGVudW1lcmF0aW9uCi0gICAqIGl0ZW0uCi0gICAqLwotICBwdWJsaWMgSVN0YXRlRW51bWVyYXRpb25JdGVtIGdldFN0YXRlSXRlbUVudW1lcmF0aW9uKCBTdHJpbmcgc3RhdGVJdGVtSWQgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wbC5nZXRTdGF0ZUl0ZW1FbnVtZXJhdGlvbiggc3RhdGVJdGVtSWQgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MTM2MDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyCi17Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGFuIGFycmF5IG9mIGNoaWxkIGNoYW5nZXMuICBFYWNoIGNoaWxkIGl0ZW0KLSAgICogaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhZGRlZCBpdGVtIGF0IHRoZSBzYW1lIGluZGV4IHZhbHVlLgotICAgKiAKLSAgICogQHBhcmFtIGNoaWxkIHNlcnZpY2UgcG9saWNpZXMgdGhhdCBoYXZlIGNoYW5nZWQuCi0gICAqIEBwYXJhbSBhZGRlZCBpbmRpY2F0ZXMgaWYgdGhlIGFzc29jaWF0ZSBwb2xpY3kgd2FzIGFkZGVkIG9yIHJlbW92ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjaGlsZENoYW5nZSggTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGQsIExpc3Q8Qm9vbGVhbj4gYWRkZWQgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYjBkY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM7Ci0KLQotcHVibGljIGludGVyZmFjZSBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIKLXsKLSAgcHVibGljIHZvaWQgbG9hZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzM2YWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMyNCAgIDIyMjA5NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBVSSBub3cgbGlzdGVucyBmb3Igc3RhdGUgY2hhbmdlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci0KLQotcHVibGljIGludGVyZmFjZSBJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyCi17Ci0gIHB1YmxpYyB2b2lkIGxvYWQoIElQcm9qZWN0IHByb2plY3QgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTljYjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIKLXsKLSAgcHVibGljIHZvaWQgcG9saWN5U3RhdGVDaGFuZ2UoIElTZXJ2aWNlUG9saWN5IHBvbGljeSwgU3RyaW5nIGtleSwgU3RyaW5nIG9sZFZhbHVlLCBTdHJpbmcgbmV3VmFsdWUgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lTdGF0dXNDaGFuZ2VMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MTNmMmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVN0YXR1c0NoYW5nZUxpc3RlbmVyCi17Ci0gIHB1YmxpYyB2b2lkIHN0YXR1c0NoYW5nZSggSVNlcnZpY2VQb2xpY3kgcG9saWN5LCBJU3RhdHVzIG9sZFN0YXR1cywgSVN0YXR1cyBuZXdTdGF0dXMgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdXRpbHMvUmVnaXN0cnlVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYWVkNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudXRpbHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeS5EZXNjcmlwdG9ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLQotcHVibGljIGNsYXNzIFJlZ2lzdHJ5VXRpbHMKLXsKLSAgcHVibGljIHN0YXRpYyBEZXNjcmlwdG9ySW1wbCBsb2FkRGVzY3JpcHRvciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgKQotICB7Ci0gICAgRGVzY3JpcHRvckltcGwgZGVzY3JpcHRvciA9IG5ldyBEZXNjcmlwdG9ySW1wbCgpOwotICAgIAotICAgIFN0cmluZyBzaG9ydE5hbWUgICA9IGdldEF0dHJpYnV0ZSggZWxlbWVudCwgInNob3J0bmFtZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBsb25nTmFtZSAgICA9IGdldEF0dHJpYnV0ZSggZWxlbWVudCwgImxvbmduYW1lIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiZGVzY3JpcHRpb24iICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgaWNvblBhdGggICAgPSBnZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJpY29ucGF0aCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBjb250ZXh0SGVscCA9IGdldEF0dHJpYnV0ZSggZWxlbWVudCwgImNvbnRleHRoZWxwaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBpZiggc2hvcnROYW1lID09IG51bGwgJiYgbG9uZ05hbWUgPT0gbnVsbCApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggIlNob3J0IG5hbWUgb3IgTG9uZyBuYW1lIG1pc3NpbmcgZnJvbSBzZXJ2aWNlIHBvbGljeSBkZXNjcmlwdG9yLiIsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlIGlmKCBzaG9ydE5hbWUgPT0gbnVsbCApCi0gICAgewotICAgICAgc2hvcnROYW1lID0gbG9uZ05hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYoIGxvbmdOYW1lID09IG51bGwgKQotICAgIHsKLSAgICAgIGxvbmdOYW1lID0gc2hvcnROYW1lOwotICAgIH0KLSAgICAKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0aW9uKCBkZXNjcmlwdGlvbiApOwotICAgIGRlc2NyaXB0b3Iuc2V0U2hvcnROYW1lKCBzaG9ydE5hbWUgKTsKLSAgICBkZXNjcmlwdG9yLnNldExvbmdOYW1lKCBsb25nTmFtZSApOwotICAgIGRlc2NyaXB0b3Iuc2V0Q29udGV4dEhlbHBJZCggY29udGV4dEhlbHAgKTsKLSAgICAKLSAgICBpZiggaWNvblBhdGggIT0gbnVsbCApCi0gICAgewotICAgICAgZGVzY3JpcHRvci5zZXRJY29uUGF0aCggaWNvblBhdGggKTsKLSAgICAgIGRlc2NyaXB0b3Iuc2V0SWNvbkJ1bmRsZUlkKCBlbGVtZW50LmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpICk7Ci0gICAgfQotICAgIAotICAgIGRlc2NyaXB0b3IucmVzZXRIYXNDaGFuZ2VkKCk7Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBpbiBhIGxvd2VyIGNhc2UgYXR0cmlidXRlIG5hbWUuICBJdCB3aWxsIHRoZW4gcmV0dXJuCi0gICAqIHRoZSBzYW1lIGF0dHJpYnV0ZSBuYW1lIHRoYXQgaW5jbHVkZXMgcG90ZW50aWFsbHkgdXBwZXJjYXNlIGNoYXJhY3RlcnMuCi0gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBjbGllbnRzIHRvIHNwZWNpZnkgYXR0cmlidXRlIG5hbWVzIGluIGEgY2FzZSBpbnNlbnNpdGl2ZQotICAgKiBmYXNoaW9uLgotICAgKiAgCi0gICAqIEBwYXJhbSBlbGVtZW50Ci0gICAqIEBwYXJhbSBhdHRyaWJ1dGUKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZSggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyaWJ1dGUgKQotICB7Ci0gICAgU3RyaW5nW10gbmFtZXMgID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpOwotICAgIFN0cmluZyAgIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgZm9yKCBTdHJpbmcgbmFtZSA6IG5hbWVzICkKLSAgICB7Ci0gICAgICBpZiggbmFtZS50b0xvd2VyQ2FzZSgpLmVxdWFscyggYXR0cmlidXRlICkgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBuYW1lOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZSggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyaWJ1dGUgKQotICB7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7Ci0gICAgU3RyaW5nICAgdmFsdWUgPSBudWxsOwotICAgIAotICAgIGZvciggU3RyaW5nIG5hbWUgOiBuYW1lcyApCi0gICAgewotICAgICAgaWYoIG5hbWUudG9Mb3dlckNhc2UoKS5lcXVhbHMoIGF0dHJpYnV0ZSApICkKLSAgICAgIHsKLSAgICAgICAgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSggbmFtZSApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ4NjdiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi13c3VpLmphcgotYnVpbGQueG1sCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTQ4N2QyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY2NTRiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozODoxNSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OTY5MGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM5OjQ2IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVjMDljMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV1NVSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLmNvbW1hbmQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NydDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU3ZWNkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDkyMjBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcwODIwICAgMTkxNTg1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwNzExMDIgICAyMDg0OTEgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgVUkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M9V2ViIFNlcnZpY2VzCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1dTST1XaXphcmQgVmFsaWRhdGlvbgotCi0jCi0jIFBvcHVwIGFjdGlvbiBDYXRlZ29yeQotIwotTEFCRUxfUE9QVVBfQ0FURUdPUllfV0VCX1NFUlZJQ0VTPVdlYiBTZXJ2aWNlcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MTc4ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0gICAgCTxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSI+Ci0gICAgICA8L3BhZ2U+Ci0gICAgICAKLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9DQVRFR09SWV9XU0kiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlcy5XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlcy5XaXphcmRWYWxpZGF0aW9uIj4KLSAgICAgIDwvcGFnZT4KLQotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLQotICAgICAgPCEtLSBUaGUgaWQgZm9yIHRoaXMgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoYW5nZWQgZnJvbSBqc3QgdG8gd3N0IGluIHZlcnNpb24gMy4wLi0tPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUiPgotICAgICAgICAgPG1lbnUKLSAgICAgICAgICAgICAgIGxhYmVsPSIlTEFCRUxfUE9QVVBfQ0FURUdPUllfV0VCX1NFUlZJQ0VTIgotICAgICAgICAgICAgICAgcGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudSI+Ci0gICAgICAgICAgICA8c2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICBuYW1lPSJwb3B1cEFjdGlvbnMiPgotICAgICAgICAgICAgPC9zZXBhcmF0b3I+Ci0gICAgICAgICA8L21lbnU+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPiAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL1dzdFdTVUlQbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvV3N0V1NVSVBsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDRlYjNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvV3N0V1NVSVBsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwODE2ICAgMTUxNjMyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBSZW1vdmVkIHVudXNlZCBwcm9wZXJ0aWVzIGZvciAiV2FpdCBmb3Igd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIKLSMgMjAwNzA0MjQgICAxODIzNzYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgVUkKLVBMVUdJTl9WRU5ET1I9RWNsaXBzZS5vcmcKLVBMVUdJTl9ERVNDPVwKLVRoZSBXZWIgc2VydmljZXMgR1VJIHBsdWdpbiBkZWxpdmVycyB0aGUgZ3JhcGhpY2FsIFwKLXVzZXIgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZXMgZnVuY3Rpb24gaW4gdGhlIFdTVCBzdWJwcm9qZWN0LgotCi1QTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M9V2ViIFNlcnZpY2VzCi0KLQotIwotIyAgV1MtSSBQcmVmZXJlbmNlIHBhZ2VzCi0jCi0jIFdTLUkgQ29tcGxpYW5jZSBQYWdlCi0jCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1dTST1XUy1JIENvbXBsaWFuY2UKLVNUT1BfTk9OX1dTST1SZXF1aXJlIGNvbXBsaWFuY2UKLVdBUk5fTk9OX1dTST1TdWdnZXN0IGNvbXBsaWFuY2UKLUlHTk9SRV9OT05fV1NJPUlnbm9yZSBjb21wbGlhbmNlCi1GT0xMT1dfV1NJX1BSRUZFUkVOQ0U9Rm9sbG93IFByZWZlcmVuY2UKLQotVE9PTFRJUF9QV1NJX1BBR0U9V2ViIFNlcnZpY2VzIEludGVyb3BlcmFiaWxpdHkKLVRPT0xUSVBfUFdTSV9SQURJT19TVE9QX05PTl9XU0k9U3RvcCBhbmQgcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlIGlmIHlvdSBtYWtlIGEgY2hvaWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggV1MtSS4KLVRPT0xUSVBfUFdTSV9SQURJT19XQVJOSU5HX05PTl9XU0k9UHJvZHVjZSBhIHdhcm5pbmcgbWVzc2FnZSBpZiB5b3UgbWFrZSBhIGNob2ljZSB0aGF0IGRvZXMgbm90IGNvbXBseSB3aXRoIFdTLUkuCi1UT09MVElQX1BXU0lfUkFESU9fSUdOT1JFX05PTl9XU0k9U2lsZW50bHkgYWxsb3cgY2hvaWNlcyB0aGF0IGRvIG5vdCBjb21wbHkgd2l0aCBXUy1JLgotVE9PTFRJUF9QV1NJX1JBRElPX0ZPTExPV19XU0lfUFJFRkVSRU5DRT1Qcm9qZWN0IHdvdWxkIHVzZSBXUy1JIGNvbXBsaWFuY2UgbGV2ZWwgc2V0IGluIFdvcmtzcGFjZSBQcmVmZXJlbmNlLgotCi1MQUJFTF9XU0lfU1NCUD1XUy1JIFMmU0JQIGNvbXBsaWFuY2UgbGV2ZWwKLVRPT0xUSVBfUFdTSV9TU0JQX0xBQkVMPVdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIGNvbXBsaWFuY2UgbGV2ZWwKLVRPT0xUSVBfUFdTSV9TU0JQX0NPTUJPPUNob29zZSB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgY29tcGxpYW5jZSBsZXZlbAotCi1MQUJFTF9XU0lfQVA9V1MtSSBBJlAgY29tcGxpYW5jZSBsZXZlbAotVE9PTFRJUF9QV1NJX0FQX0xBQkVMPVdTLUkgQXR0YWNobWVudCBQcm9maWxlIGNvbXBsaWFuY2UgbGV2ZWwKLVRPT0xUSVBfUFdTSV9BUF9DT01CTz1DaG9vc2UgdGhlIFdTLUkgQXR0YWNobWVudCBQcm9maWxlIGNvbXBsaWFuY2UgbGV2ZWwKLQotIwotIwlXU0RMIFZhbGlkYXRpb24KLSMKLUxBQkVMX1dTRExWQUw9U2VsZWN0IHdoZXRoZXIgV1NETCB2YWxpZGF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gd2l6YXJkcyB0aGF0IGNvbnN1bWUgV1NETCBmaWxlcwotTEFCRUxfV1NETFZBTF9OT05FPSZObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uCi1MQUJFTF9XU0RMVkFMX1JFTU9URT1XaXphcmQgV1NETCB2YWxpZGF0aW9uIGZvciAmcmVtb3RlIGZpbGVzIG9ubHkKLUxBQkVMX1dTRExWQUxfQUxMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gZm9yICZhbGwgV1NETCBmaWxlcwotVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfTk9ORT1EbyBub3QgcGVyZm9ybSBXU0RMIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZSBvciBVUkwgaW5wdXQgdG8gdGhlIFdlYiBTZXJ2aWNlcyB3aXphcmQKLVRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX1JFTU9URT1Pbmx5IHBlcmZvcm0gV1NETCB2YWxpZGF0aW9uIG9uIHJlbW90ZSBXU0RMIGZpbGUgb3IgVVJMIGlucHV0IHRvIHRoZSBXZWIgU2VydmljZXMgd2l6YXJkCi1UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9BTEw9UGVyZm9ybSBXU0RMIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZSBvciBVUkwgaW5wdXQgdG8gdGhlIFdlYiBTZXJ2aWNlcyB3aXphcmQKLVRPT0xUSVBfUFdTSV9XU0RMVkFMX0xBQkVMPVNlbGVjdCB3aGV0aGVyIFdTREwgdmFsaWRhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHdpemFyZHMgdGhhdCBjb25zdW1lIFdTREwgZmlsZXMsIFxuZm9yIGV4YW1wbGUsIFdlYiBTZXJ2aWNlIHdpemFyZCBpbiBza2VsZXRvbiBzY2VuYXJpbyBhbmQgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZC4KLQotCi1XRUJTRVJWSUNFX0NBVEVHT1JZX1BSRUY9RXhwYW5kIHRoaXMgcHJlZmVyZW5jZXMgY2F0ZWdvcnkgdG8gc2V0IHNwZWNpZmljIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcy4KLVdFQlNFUlZJQ0VfQ0FURUdPUllfUFJFRl9MSU5LPVNlZSA8YSBocmVmPVwib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlcy5XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2VcIj4nU2VydmljZSBQb2xpY2llcyc8L2E+IGZvciBXUy1JIGNvbXBsaWFuY2UgcHJlZmVyZW5jZXMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0M2VjOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyOCAgIDE1MTYzMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA0MjQgICAxODIzNzYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXc3RXU1VJUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5Xc3RXU1VJUGx1Z2luIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdzdFdTVUlQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX1ZFTkRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGX0xJTks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJFRkVSRU5DRV9DQVRFR09SWV9XU0k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RPUF9OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBUk5fTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJR05PUkVfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xMT1dfV1NJX1BSRUZFUkVOQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX1NUT1BfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUkFESU9fV0FSTklOR19OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19JR05PUkVfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUkFESU9fRk9MTE9XX1dTSV9QUkVGRVJFTkNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTSV9TU0JQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9TU0JQX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9TU0JQX0NPTUJPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTSV9BUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfQVBfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX0FQX0NPTUJPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NETFZBTF9OT05FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUxfUkVNT1RFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUxfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX05PTkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfV1NETFZBTF9MQUJFTDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL2NvbW1hbmQvT3BlbkVkaXRvckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvY29tbWFuZC9PcGVuRWRpdG9yQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGU2YTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvY29tbWFuZC9PcGVuRWRpdG9yQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgxMCAgIDEzNTM5NSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRW5hYmxlIFdUUCBXZWIgc2VydmljZSBmcmFtZXdvcmsgb3BlbmluZyBKYXZhIGVkaXRvcgotICogMjAwNjEwMjUgICAxNjIyODggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdvcmtzcGFjZSBwYXRocyB3aXRoIHNwYWNlcyBicmVhayBKYXZhIEVkaXRvciBMYXVuY2gKLSAqIDIwMDgwNDExICAgMjI2NzY3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIgZG9lcyBub3QgaGFuZGxlIHBhdGhzIHcvIHNwYWNlcyB0aGF0IGFyZSBlbmNvZGVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV1NVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0vKioKLSAqIEEgY29tbWFuZCB3aGljaCwgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBpbXBsZW1lbnRhdGlvbiBVUkxzLCB3aWxsCi0gKiBvcGVuIHRoZW0gd2l0aGluIEVjbGlwc2UgdXNpbmcgdGhlIGVkaXRvciByZWdpc3RlcmVkIHdpdGggdGhlCi0gKiBmaWxlIGV4dGVuc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBPcGVuRWRpdG9yQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSVdlYlNlcnZpY2Ugd2ViU2VydmljZTsKLQlwcml2YXRlIElDb250ZXh0CWNvbnRleHQ7Ci0gCi0JLyoqCi0JICogU2V0dGVyIGZvciB0aGUgSVdlYlNlcnZpY2UKLQkgKiAKLQkgKiBAcGFyYW0gd2ViU2VydmljZSBUaGUgSVdlYlNlcnZpY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlID0gd2ViU2VydmljZTsgIAotCX0KLQkgIAotCS8qKgotCSAqIFNldHRlciBmb3IgdGhlIElDb250ZXh0Ci0JICogCi0JICogQHBhcmFtIGNvbnRleHQgVGhlIElDb250ZXh0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0Q29udGV4dCAoSUNvbnRleHQgY29udGV4dCkgewotCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuQWJzdHJhY3RPcGVyYXRpb24jZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvciwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUpCi0JICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykKLQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQotCQlpZiAoY29udGV4dC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgIT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCi0JCVN0cmluZ1tdIGltcGxVUkxzID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldEltcGxVUkxzKCk7Ci0JCQkKLQkJLy8gbm90aGluZyB0byBvcGVuCi0JCWlmIChpbXBsVVJMcyA9PSBudWxsKQotCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQotCQlJRmlsZSBmaWxlOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbXBsVVJMcy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsgICAgCQkJCQkJCi0JCQkJU3RyaW5nIGltcGxVUkwgPSBpbXBsVVJMc1tpXTsKLQkJCQlmaWxlID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvRmlsZShpbXBsVVJMKTsKLQkJCQkJCQotCQkJCWlmIChmaWxlID09IG51bGwgfHwgIWZpbGUuZXhpc3RzKCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCQotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQkKLQkJCQlpZiAocGFnZSA9PSBudWxsKQotCQkJCQljb250aW51ZTsKLQkJCQkJCQkJCi0JCQkJSURFLm9wZW5FZGl0b3IocGFnZSwgZmlsZSwgdHJ1ZSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvL1RPRE86IGZvciBXVFAgMi4wLCByZXR1cm4gcHJvcGVyIHN0YXR1cyAod2l0aCBOTFMpCi0JCQkJV1NVSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldExvZygpLmxvZygKLQkJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgV1NVSVBsdWdpbi5JRCwgMCwgZS5nZXRNZXNzYWdlKCksIGUpKTsKLQkJCX0JCQkKLQkJfQotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcGx1Z2luL1dTVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcGx1Z2luL1dTVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUwOTkwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XU1VJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW47Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSogCi0qIENvbnRyaWJ1dG9yczoKLSogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBwbHVnaW4uCi0qIDxwPgotKiBUaGlzIHBsdWdpbiBjb250YWlucyB0aGUgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSB0byB0aGUKLSogV2ViIFNlcnZpY2VzIHJ1bnRpbWUgZm91bmQgaW4gb3JnLmVjbGlwc2UuanN0LndzLgotKi8KLXB1YmxpYyBjbGFzcyBXU1VJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotCi0gLyoqCi0gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICovCi0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzLnVpIjsKLQotIC8qKgotICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICovCi0gcHJpdmF0ZSBzdGF0aWMgV1NVSVBsdWdpbiBpbnN0YW5jZV87Ci0gCi0gLyoqCi0gICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICovCi0gcHVibGljIFdTVUlQbHVnaW4oKSB7Ci0Jc3VwZXIoKTsKLQlpbnN0YW5jZV8gPSB0aGlzOwotIH0KLQotIC8qKgotICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAqIChXU1VJUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LndzLnVpIik7Ci0gKiBAcmV0dXJuIFRoZSBXU1VJUGx1Z2luIHNpbmdsZXRvbi4KLSAqLwotIHN0YXRpYyBwdWJsaWMgV1NVSVBsdWdpbiBnZXRJbnN0YW5jZSgpIHsKLSAgIHJldHVybiBpbnN0YW5jZV87Ci0gfQotCi0gLyoqCi0gKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZQotICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICogQHJldHVybiBBbiBpbWFnZSBkZXNjcmlwdG9yLCBwb3NzaWJseSBudWxsLgotICovCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBuYW1lKSB7Ci0JCXRyeSB7Ci0JCQlVUkwgaW5zdGFsbFVSTCA9IGluc3RhbmNlXy5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpOwotCQkJVVJMIGltYWdlVVJMID0gbmV3IFVSTChpbnN0YWxsVVJMLCBuYW1lKTsKLQkJCXJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgIHJldHVybiBudWxsOwotICAgfQotIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9XZWJTZXJ2aWNlc1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1dlYlNlcnZpY2VzUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE3OTQ3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1dlYlNlcnZpY2VzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQyNCAxODIzNzYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzExMjAgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5QcmVmZXJlbmNlc1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLldzdFdTVUlQbHVnaW5NZXNzYWdlczsKLQotLyoqCi0gKiBUaGUgV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZQotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKLQlwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnRDb21wb3NpdGUgPSBudWxsOwotLyoqCi0gKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBTV1QgY29udHJvbCBmb3IgdGhlIGN1c3RvbWl6ZWQgYm9keSAKLSAqIG9mIHRoaXMgcHJlZmVyZW5jZSBwYWdlIHVuZGVyIHRoZSBnaXZlbiBwYXJlbnQgY29tcG9zaXRlLgotICogPHA+Ci0gKiBUaGlzIGZyYW1ld29yayBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBjb25jcmV0ZQotICogc3ViY2xhc3Nlcy4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgY29tcG9zaXRlCi0gKiBAcmV0dXJuIHRoZSBuZXcgY29udHJvbAotICovCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlIHBhcmVudCkgewotCQlwYXJlbnRDb21wb3NpdGUgPSBwYXJlbnQ7Ci0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQljb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotCQlMYWJlbCBtZXNzYWdlID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULldSQVApOwotCQltZXNzYWdlLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLldFQlNFUlZJQ0VfQ0FURUdPUllfUFJFRik7Ci0JCUxpbmsgbGluayA9IG5ldyBMaW5rKGNvbXBvc2l0ZSwgU1dULldSQVApOwotCQlsaW5rLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLldFQlNFUlZJQ0VfQ0FURUdPUllfUFJFRl9MSU5LKTsKLQkJbGluay5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlQcmVmZXJlbmNlc1V0aWwuY3JlYXRlUHJlZmVyZW5jZURpYWxvZ09uKHBhcmVudENvbXBvc2l0ZQotCQkJCQkJLmdldFNoZWxsKCksIGUudGV4dCwgbnVsbCwgbnVsbCk7Ci0JCQkJcGFyZW50Q29tcG9zaXRlLmxheW91dCgpOwotCQkJfQotCQl9KTsKLQotCQlub0RlZmF1bHRBbmRBcHBseUJ1dHRvbigpOwotCQlEaWFsb2cuYXBwbHlEaWFsb2dGb250KGNvbXBvc2l0ZSk7Ci0JCXJldHVybiBwYXJlbnQ7Ci0JfQotCi0JLyoqCi0JICogRG8gYW55IGluaXRpYWxpemF0aW9uIHJlcXVpcmVkIGJ5IHRoZSBkZXNrdG9wLiBCeSBkZWZhdWx0IGRvIG5vdGhpbmcuCi0JICovCi1wdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggZGVza3RvcCkge30KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS91dGlscy9BZGFwdGVyVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvdXRpbHMvQWRhcHRlclV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNWU1MmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS91dGlscy9BZGFwdGVyVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA3MTYgICAxOTEzNTcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMjIwICAgMjE5NTM3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotCi0vKioKLSAqIFRoZSBBZGFwdGVyVXRpbHMgY2xhc3MgcHJvdmlkZXMgdXRpbGl0eSBtZXRob2RzIHRvIGdldCBvYmplY3RzIGZyb20gdGhlIFBsYXRmb3JtJ3MgYWRhcHRlciBleHRlbnNpb24uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlclV0aWxzIHsJCi0JCi0JLyoqCi0JICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGFuIElGaWxlIG9yIFN0cmluZyBhZGFwdGVyLgotCSAqIAotCSAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdC4KLQkgKiBAcmV0dXJuIFRydWUgdGhlIG9iamVjdCBpcyBhZGFwdGFibGUgdG8gSUZpbGUgb3IgU3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGhhc0FkYXB0ZXIoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0ID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWJvb2xlYW4gaGFzQWRhcHRlciA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuaGFzQWRhcHRlcihvYmplY3QsICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlLklGaWxlIik7Ci0JCWlmICghaGFzQWRhcHRlcikKLQkJCWhhc0FkYXB0ZXIgPSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmhhc0FkYXB0ZXIob2JqZWN0LCAiamF2YS5sYW5nLlN0cmluZyIpOwotCQlyZXR1cm4gaGFzQWRhcHRlcjsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIG9iamVjdCBPYmplY3QgdG8gYWRhcHQKLQkgKiBAcmV0dXJuIFRoZSBhZGFwdGVkIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGZpbGUgb3IgU3RyaW5nIGlmIGFuIGFkYXB0ZXIgaXMgZm91bmQuIAotCSAqICAgICAgICAgUmV0dXJucyBudWxsIGlmIGFuIGFkYXB0ZXIgaXMgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldEFkYXB0ZWRPYmplY3QgKE9iamVjdCBvYmplY3QpIHsgCi0JCWlmIChvYmplY3QgPT0gbnVsbCkgCi0JCQlyZXR1cm4gbnVsbDsKLQkJT2JqZWN0IGFkYXB0ZWRPYmplY3QgPSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmxvYWRBZGFwdGVyKG9iamVjdCwgIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIik7Ci0JCWlmIChhZGFwdGVkT2JqZWN0ID09IG51bGwpIHsKLQkJCWFkYXB0ZWRPYmplY3QgPSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmxvYWRBZGFwdGVyKG9iamVjdCwgImphdmEubGFuZy5TdHJpbmciKTsKLQkJfQotCQlyZXR1cm4gYWRhcHRlZE9iamVjdDsKLQl9Ci0JCi0JLyoqCi0JICAgKiBAcGFyYW0gb2JqZWN0IExvb2sgdXAgYW4gYWRhcHRlciBtYXBwaW5nIHRoZSBvYmplY3QgdG8gSUZpbGUgb3IgU3RyaW5nLgotCSAgICogQHJldHVybiBUaGUgV1NETCB1cmkgcmV0dXJuZWQgYnkgdGhlIGFkYXB0ZXIgb3IgbnVsbCBpZiBubyBhZGFwdGVyIGlzIGZvdW5kLgotCSAgICovCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBZGFwdGVkV1NETCAoT2JqZWN0IG9iamVjdCkgewotCQkgIFN0cmluZyB3c2RsVVJJID0gbnVsbDsKLQkJICBPYmplY3QgYWRhcHRlZE9iamVjdCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkT2JqZWN0KG9iamVjdCk7Ci0JCSAgaWYgKCBhZGFwdGVkT2JqZWN0ICE9IG51bGwpIHsKLQkJCSAgaWYgKGFkYXB0ZWRPYmplY3QgaW5zdGFuY2VvZiBJRmlsZSkKLQkJCSAgewotCQkJCSAgVVJJIHVyaSA9ICgoSUZpbGUpYWRhcHRlZE9iamVjdCkuZ2V0TG9jYXRpb25VUkkoKTsKLQkJCQkgIGlmICh1cmkgIT0gbnVsbCkgewotCQkJCQkgIHdzZGxVUkkgPSB1cmkudG9TdHJpbmcoKTsKLQkJCQkgIH0KLQkJCQkgIAotCQkJICB9IGVsc2UgaWYgKGFkYXB0ZWRPYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCQkgIHdzZGxVUkkgPSAoU3RyaW5nKSBhZGFwdGVkT2JqZWN0OwotCQkJICB9Ci0JCSAgfQotCQkgIHJldHVybiB3c2RsVVJJOwotCSAgfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS93c2kvcHJlZmVyZW5jZXMvV1NJQ29tcGxpYW5jZVByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzaS9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlmNzFkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzaS9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTAgICAxMzEzNTIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA3MjggICAxNTE2MzIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMDI1ICAgICAgICAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuV3N0V1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV1NVSVBsdWdpbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBXU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSwgU2VsZWN0aW9uTGlzdGVuZXIsIExpc3RlbmVyCi0KLXsKLQkgIAotICAvKkNPTlRFWFRfSUQgUFdTSTAwMDEgZm9yIHRoZSBXUy1JIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTSV9QQUdFID0gV1NVSVBsdWdpbi5JRCArICIuUFdTSTAwMDAiOwotICAKLSAgcHJpdmF0ZSBUZXh0IHdzZGxWYWxpZGF0aW9uTGFiZWxfOwotICAvKkNPTlRFWFRfSUQgUFdTSTAwMDkgZm9yIHRoZSBObyBXaXphcmQgV1NETCB2YWxpZGF0aW9uIGJ1dHRvbiBvbiB0aGUgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHBhZ2UqLwotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQV1NJMDAwMTAgZm9yIHRoZSBXaXphcmQgV1NETCB2YWxpZGF0aW9uIGZvciByZW1vdGUgZmlsZXMgb25seSBidXR0b24gb24gdGhlIFByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbiBwYWdlKi8KLSAgcHJpdmF0ZSBCdXR0b24gdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBXU0kwMDAxMSBmb3IgdGhlIFdpemFyZCBXU0RMIHZhbGlkYXRpb24gZm9yIGFsbCBmaWxlcyBidXR0b24gb24gdGhlIFByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbiBwYWdlKi8KLSAgcHJpdmF0ZSBCdXR0b24gdmFsaWRhdGVBbGxXc2RsQnV0dG9uXzsKLSAgCi0KLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAwOSBmb3IgdGhlIG5vIHdzZGwgdmFsaWRhdGlvbiByYWRpbyBidXR0b24gb2YgdGhlIHByb2ZpbGUgdmFsaWRhdGlvbiBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTSV9SQURJT19XU0RMVkFMX05PTkUgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAwOSI7Ci0gIC8qCi0gICAqIENPTlRFWFRfSUQgUFdSUzAwMTAgZm9yIHRoZSB3c2RsIHZhbGlkYXRpb24gb24gcmVtb3RlIGRvY3VtZW50IHJhZGlvIGJ1dHRvbiBvZiB0aGUgcHJvZmlsZSB2YWxpZGF0aW9uIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFID0gV1NVSVBsdWdpbi5JRCArICIuUFdTSTAwMDEwIjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAxMSBmb3IgdGhlIHdzZGwgdmFsaWRhdGlvbiBvbiBhbGwgZG9jdW1lbnQgcmFkaW8gYnV0dG9uIG9mIHRoZSBwcm9maWxlIHZhbGlkYXRpb24gcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9BTEwgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAxMSI7Ci0gIC8qCi0gICAqIENPTlRFWFRfSUQgUFdSUzAwMTIgZm9yIHRoZSB3c2RsIHZhbGlkYXRpb24gbGFiZWwgb2YgdGhlIHByb2ZpbGUgdmFsaWRhdGlvbiBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTSV9XU0RMVkFMX0xBQkVMID0gV1NVSVBsdWdpbi5JRCArICIuUFdTSTAwMTIiOwotCi0gLyoqCi0gICAqIENyZWF0ZXMgcHJlZmVyZW5jZSBwYWdlIGNvbnRyb2xzIG9uIGRlbWFuZC4KLSAgICogICBAcGFyYW0gcGFyZW50Q29tcG9zaXRlICB0aGUgcGFyZW50IGZvciB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgc3VwZXJwYXJlbnQpCi0gIHsKLSAgIAotICAgIElXb3JrYmVuY2hIZWxwU3lzdGVtIGhlbHBTeXN0ZW0gPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKTsKLQkKLSAgICBDb21wb3NpdGUgICBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKCBzdXBlcnBhcmVudCwgU1dULk5PTkUgKTsJCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMICkgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFdTSV9QQUdFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAocGFyZW50LElORk9QT1BfUFdTSV9QQUdFKTsKLQotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAxOwotICAgIGdsLm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAwOwotCi0gICAgCi0gICAgd3NkbFZhbGlkYXRpb25MYWJlbF8gPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5SRUFEX09OTFkpOwotICAgIHdzZGxWYWxpZGF0aW9uTGFiZWxfLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1dTRExWQUwpOwotICAgIHdzZGxWYWxpZGF0aW9uTGFiZWxfLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfV1NETFZBTF9MQUJFTCk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHdzZGxWYWxpZGF0aW9uTGFiZWxfLCBJTkZPUE9QX1BXU0lfV1NETFZBTF9MQUJFTCk7Ci0gICAgCi0gICAgdmFsaWRhdGVOb1dzZGxCdXR0b25fID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5SQURJTyk7Ci0gICAgdmFsaWRhdGVOb1dzZGxCdXR0b25fLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1dTRExWQUxfTk9ORSk7Ci0gICAgdmFsaWRhdGVOb1dzZGxCdXR0b25fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotICAgIHZhbGlkYXRlTm9Xc2RsQnV0dG9uXy5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfTk9ORSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHZhbGlkYXRlTm9Xc2RsQnV0dG9uXywgSU5GT1BPUF9QV1NJX1JBRElPX1dTRExWQUxfTk9ORSk7Ci0gICAgCi0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXyA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuUkFESU8pOwotICAgIHZhbGlkYXRlUmVtb3RlV3NkbEJ1dHRvbl8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NETFZBTF9SRU1PVEUpOwotICAgIHZhbGlkYXRlUmVtb3RlV3NkbEJ1dHRvbl8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXywgSU5GT1BPUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFKTsKLSAgICAKLSAgICB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5SQURJTyk7Ci0gICAgdmFsaWRhdGVBbGxXc2RsQnV0dG9uXy5zZXRUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9XU0RMVkFMX0FMTCk7Ci0gICAgdmFsaWRhdGVBbGxXc2RsQnV0dG9uXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9BTEwpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh2YWxpZGF0ZUFsbFdzZGxCdXR0b25fLCBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9BTEwpOwotICAgIAotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOyAgICAKLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotICB7Ci0gICAgc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0gICAgaW5pdGlhbGl6ZURlZmF1bHRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLSAgewotICAgIHBlcmZvcm1PaygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSAgIHsgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHVzaW5nIGRlZmF1bHQgdmFsdWVzCi0gICAqIGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVEZWZhdWx0cygpCi0gIHsKLQotICAgIFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQgd3NkbFZhbGlkYXRpb25Db250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVmFsaWRhdGlvbkNvbnRleHQoKTsKLSAgICBTdHJpbmcgdmFsaWRhdGlvblNlbGVjdGlvbiA9IHdzZGxWYWxpZGF0aW9uQ29udGV4dC5nZXREZWZhdWx0KCk7Ci0gICAgd3NkbFZhbGlkYXRpb25Db250ZXh0LnVwZGF0ZVdTRExWYWxpZGF0aW9uKHZhbGlkYXRpb25TZWxlY3Rpb24pOwotICAgIHZhbGlkYXRlTm9Xc2RsQnV0dG9uXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHZhbGlkYXRlUmVtb3RlV3NkbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgcHJvY2Vzc1dTRExWYWxpZGF0aW9uU2VsZWN0aW9uKHZhbGlkYXRpb25TZWxlY3Rpb24pOwotICAgIAotICAgIFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCgpLnNldFdhaXRGb3JXU0RMVmFsaWRhdGlvbihXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQoKS5nZXREZWZhdWx0KCkpOwotICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgZnJvbSB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLSAgewotICAgIFN0cmluZyB2YWxpZGF0aW9uU2VsZWN0aW9uID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVmFsaWRhdGlvbkNvbnRleHQoKS5nZXRQZXJzaXN0ZW50V1NETFZhbGlkYXRpb24oKTsKLSAgICBwcm9jZXNzV1NETFZhbGlkYXRpb25TZWxlY3Rpb24odmFsaWRhdGlvblNlbGVjdGlvbik7Ci0gICAgCi0gIH0KLQotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1dTRExWYWxpZGF0aW9uU2VsZWN0aW9uKFN0cmluZyB2YWxpZGF0aW9uU2VsZWN0aW9uKSB7Ci0KLQkJaWYgKFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfTk9fV1NETC5lcXVhbHModmFsaWRhdGlvblNlbGVjdGlvbikpIHsKLQkJCXZhbGlkYXRlTm9Xc2RsQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCX0gZWxzZSBpZiAoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9SRU1PVEVfV1NETC5lcXVhbHModmFsaWRhdGlvblNlbGVjdGlvbikpIHsKLQkJCXZhbGlkYXRlUmVtb3RlV3NkbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOwotCQl9IGVsc2UgaWYgKFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfQUxMX1dTREwuZXF1YWxzKHZhbGlkYXRpb25TZWxlY3Rpb24pKSB7Ci0JCQl2YWxpZGF0ZUFsbFdzZGxCdXR0b25fLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJfQotCi0JfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCi0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsZWQgd2hlbiBhbiBldmVudCBvY2N1cnMgb24gdGhlIHBhZ2UuIEhhbmRsZXMgdGhlIGV2ZW50IGFuZCByZXZhbGlkYXRlcyB0aGUgcGFnZS4KLSAgICogCi0gICAqIEBwYXJhbSBldmVudAotICAgKiAgICAgICAgICBUaGUgZXZlbnQgdGhhdCBvY2N1cmVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLQkgIAotCSAgU3RyaW5nIHdzZGxWYWxkYXRpb25TZWxlY3Rpb24gPSBudWxsOwotCSAgaWYgKHZhbGlkYXRlTm9Xc2RsQnV0dG9uXyA9PSBldmVudC53aWRnZXQpIHsKLQkJICB3c2RsVmFsZGF0aW9uU2VsZWN0aW9uID0gUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9OT19XU0RMOwotCSAgfQotCSAgZWxzZSBpZiAodmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXyA9PSBldmVudC53aWRnZXQpIHsKLQkJICB3c2RsVmFsZGF0aW9uU2VsZWN0aW9uID0gUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9SRU1PVEVfV1NETDsKLQkgIH0KLQkgIGVsc2UgaWYgKHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8gPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCSAgd3NkbFZhbGRhdGlvblNlbGVjdGlvbiA9IFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfQUxMX1dTREw7Ci0JICB9Ci0JICBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpLnVwZGF0ZVdTRExWYWxpZGF0aW9uKHdzZGxWYWxkYXRpb25TZWxlY3Rpb24pOwotCSAgCi0gIH0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzcnQvSU9iamVjdFNlbGVjdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzcnQvSU9iamVjdFNlbGVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1OWU2OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS93c3J0L0lPYmplY3RTZWxlY3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLQotcHVibGljIGludGVyZmFjZSBJT2JqZWN0U2VsZWN0b3IgewotCQotCXB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWwpOwotCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpOwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdCgpOwotCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsKTsKLQlwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcik7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMTg4ZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi10ZW1wLmZvbGRlcgotYnVpbGQueG1sCi13cy5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OTRlMmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3M8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDEyNTE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNUaHUgTWF5IDMxIDEzOjEyOjUzIEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmU1NmUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDoxMiBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NmEwNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4xLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGE7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb25pdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzaWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5hcGFjaGUud3NpbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMy4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC5nZW5tb2RlbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhYTRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC5nZW5tb2RlbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKLSAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9SZWdpc3RyeU1vZGVsMi9zcmMiCi0gICAgZWRpdERpcmVjdG9yeT0iL1JlZ2lzdHJ5TW9kZWwyLmVkaXQvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9SZWdpc3RyeU1vZGVsMi5lZGl0b3Ivc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9IlJlZ2lzdHJ5TW9kZWwyIiBydW50aW1lSmFyPSJ0cnVlIiBtb2RlbE5hbWU9IlJUIiBlZGl0UGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5wcm92aWRlci5SVEVkaXRQbHVnaW4iCi0gICAgZWRpdG9yUGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5wcmVzZW50YXRpb24uUlRFZGl0b3JQbHVnaW4iCi0gICAgcnVudGltZUNvbXBhdGliaWxpdHk9ImZhbHNlIj4KLSAgPGZvcmVpZ25Nb2RlbD5JbmRleC54c2Q8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5SZWdpc3RyeS54c2Q8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5VRERJUmVnaXN0cnkueHNkPC9mb3JlaWduTW9kZWw+Ci0gIDxmb3JlaWduTW9kZWw+VGF4b25vbXkueHNkPC9mb3JlaWduTW9kZWw+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlJUSW5kZXgiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwIgotICAgICAgcmVzb3VyY2U9IlhNTCIgZWNvcmVQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLyI+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRGVzY3JpcHRpb24iPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0Rlc2NyaXB0aW9uL3ZhbHVlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRGVzY3JpcHRpb24vbGFuZyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L3hNTE5TUHJlZml4TWFwIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L3hTSVNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L2luZGV4Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L25hbWUiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9JbmRleC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L3JlZ2lzdHJ5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L3RheG9ub215Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL05hbWUiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlRheG9ub215IiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMCIKLSAgICAgIHJlc291cmNlPSJYTUwiIGVjb3JlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvIj4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkvbmxuYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jYXRlZ29yeSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jb2RlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L25hbWUiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC94TUxOU1ByZWZpeE1hcCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveFNJU2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L2NhdGVnb3J5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9teSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9ubG5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2NhdGVnb3J5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2lkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2xvY2F0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvcmVmIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L3Rtb2RlbEtleSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgPC9nZW5QYWNrYWdlcz4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iUmVnaXN0cnkiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwIgotICAgICAgcmVzb3VyY2U9IlhNTCIgZWNvcmVQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8iPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9EZXNjcmlwdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL3ZhbHVlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL2xhbmciLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC94TUxOU1ByZWZpeE1hcCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveFNJU2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9yZWdpc3RyeSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9kZXNjcmlwdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9pZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9sb2NhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9yZWYiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlVERElSZWdpc3RyeSIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAiCi0gICAgICByZXNvdXJjZT0iWE1MIiBlY29yZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8iPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveE1MTlNQcmVmaXhNYXAiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC94U0lTY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3RheG9ub21pZXMiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC91ZGRpUmVnaXN0cnkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9UYXhvbm9taWVzIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9UYXhvbm9taWVzL3RheG9ub215Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS92ZXJzaW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGlzY292ZXJ5VVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvcHVibGljYXRpb25VUkwiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9zZWN1cmVkRGlzY292ZXJ5VVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvc2VjdXJlZFB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdExvZ2luIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdFBhc3N3b3JkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5L3RheG9ub21pZXMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQueHNkMmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQueHNkMmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmRhZTgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL1JULnhzZDJlY29yZQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgotPHhzZDJlY29yZTpYU0QyRWNvcmVNYXBwaW5nUm9vdCB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNkMmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL1hTRDJFY29yZSIgaW5wdXRzPSJJbmRleC54c2QjLyBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLyBUYXhvbm9teS54c2QjLyBSZWdpc3RyeS54c2QjLyBVRERJUmVnaXN0cnkueHNkIy8iCi0gICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvIgotICAgIHRvcFRvQm90dG9tPSJ0cnVlIj4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL2Jhc2U7WFNEQXR0cmlidXRlRGVjbGFyYXRpb249MiIKLSAgICAgIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1hNTE5hbWVzcGFjZURvY3VtZW50Um9vdC9iYXNlIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLy9pZDtYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbj0zIiBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9YTUxOYW1lc3BhY2VEb2N1bWVudFJvb3QvaWQiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL2xhbmc7WFNEQXR0cmlidXRlRGVjbGFyYXRpb24iIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1hNTE5hbWVzcGFjZURvY3VtZW50Um9vdC9sYW5nIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLy9sYW5nO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uL1hTRFNpbXBsZVR5cGVEZWZpbml0aW9uIgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL3NwYWNlO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uPTEiCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9YTUxOYW1lc3BhY2VEb2N1bWVudFJvb3Qvc3BhY2UiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL3NwYWNlO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uPTEvWFNEU2ltcGxlVHlwZURlZmluaXRpb24iCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9TcGFjZVR5cGUiLz4KLSAgPG5lc3RlZCBpbnB1dHM9ImJ1bmRsZWVudHJ5Oi8vMTgzOS9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCMvL3N0cmluZztYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbj03IgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9OYW1lO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0yIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL0NhdGVnb3J5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9ubG5hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkvY2F0ZWdvcnkiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlPTEiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jb2RlIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL0NhdGVnb3J5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L25hbWUiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9jYXRlZ29yeTtYU0RFbGVtZW50RGVjbGFyYXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9jYXRlZ29yeSIvPgotICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9EZXNjcmlwdGlvbiI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL0Rlc2NyaXB0aW9uO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0yL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9kZXNjcmlwdGlvbjtYU0RFbGVtZW50RGVjbGFyYXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9kZXNjcmlwdGlvbiIvPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0Rlc2NyaXB0aW9uIj4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9EZXNjcmlwdGlvbi9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vZGVzY3JpcHRpb247WFNERWxlbWVudERlY2xhcmF0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0RvY3VtZW50Um9vdC9kZXNjcmlwdGlvbiIvPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vTmFtZTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IkluZGV4LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9OYW1lO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iYnVuZGxlZW50cnk6Ly8xODM5L2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIy8vYW55VVJJO1hTRFNpbXBsZVR5cGVEZWZpbml0aW9uPTIzIgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9SZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvbmFtZSIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9SZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvZGVzY3JpcHRpb24iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2lkIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2xvY2F0aW9uIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L3JlZiIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215Ij4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9ubG5hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2NhdGVnb3J5Ii8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2UiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9pZCIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTIiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9sb2NhdGlvbiIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTMiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9uYW1lIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L3JlZiIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTQiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS90bW9kZWxLZXkiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9JbmRleDtYU0RDb21wbGV4VHlwZURlZmluaXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4Ij4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L25hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvZGVzY3JpcHRpb24iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvcmVnaXN0cnkiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MyIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvdGF4b25vbXkiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9pbmRleDtYU0RFbGVtZW50RGVjbGFyYXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0RvY3VtZW50Um9vdC9pbmRleCIvPgotICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vbmFtZTtYU0RFbGVtZW50RGVjbGFyYXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9uYW1lO1hTREVsZW1lbnREZWNsYXJhdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QvbmFtZSIvPgotICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vbmFtZTtYU0RFbGVtZW50RGVjbGFyYXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9yZWdpc3RyeTtYU0RFbGVtZW50RGVjbGFyYXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvcmVnaXN0cnkiLz4KLSAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL3RheG9ub215O1hTREVsZW1lbnREZWNsYXJhdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9teSIvPgotICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1RheG9ub21pZXM7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVGF4b25vbWllcyI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9UYXhvbm9taWVzO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVGF4b25vbWllcy90YXhvbm9teSIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy90YXhvbm9taWVzO1hTREVsZW1lbnREZWNsYXJhdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9taWVzIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJVRERJUmVnaXN0cnkueHNkIy8vVURESVJlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkiPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJVRERJUmVnaXN0cnkueHNkIy8vVURESVJlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS92ZXJzaW9uIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGlzY292ZXJ5VVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvcHVibGljYXRpb25VUkwiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0zIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9zZWN1cmVkRGlzY292ZXJ5VVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NCIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvc2VjdXJlZFB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdExvZ2luIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdFBhc3N3b3JkIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NyIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvdGF4b25vbWllcyIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy91ZGRpUmVnaXN0cnk7WFNERWxlbWVudERlY2xhcmF0aW9uIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC91ZGRpUmVnaXN0cnkiLz4KLTwveHNkMmVjb3JlOlhTRDJFY29yZU1hcHBpbmdSb290PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYTczYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgam1lcmdlci8sXAotICAgICAgICAgICAgICAgaWNvbnMvCi1zcmMuaW5jbHVkZXMgPSBjb21wb25lbnQueG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvY29tcG9uZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlMzVjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjb21wb25lbnQgeG1sbnM9Imh0dHA6Ly9lY2xpcHNlLm9yZy93dHAvcmVsZW5nL3Rvb2xzL2NvbXBvbmVudC1tb2RlbCIgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzIj4KLSAgIDxjb21wb25lbnQtZGVwZW5kcyB1bnJlc3RyaWN0ZWQ9InRydWUiPgotICAgPC9jb21wb25lbnQtZGVwZW5kcz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53cyIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5heGlzIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUud3NpbDRqIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy51ZGRpNGoiIGZyYWdtZW50PSJmYWxzZSIvPgotPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9pY29ucy9mdWxsL29iajE2L3dzaWNhdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9pY29ucy9mdWxsL29iajE2L3dzaWNhdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OTk4M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvaWNvbnMvZnVsbC9vYmoxNi93c2ljYXQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvaWNvbnMvZnVsbC9vYmoxNi93c2ljYXRfY2hpbGQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvaWNvbnMvZnVsbC9vYmoxNi93c2ljYXRfY2hpbGQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGE5ZjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2ljb25zL2Z1bGwvb2JqMTYvd3NpY2F0X2NoaWxkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2ptZXJnZXIvbWVyZ2UueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvam1lcmdlci9tZXJnZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZTIxMzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvam1lcmdlci9tZXJnZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBNZXJnZSBydWxlcyB1c2VkIGJ5IEpNZXJnZXIgLS0+Ci08bWVyZ2U6b3B0aW9ucyAKLQl4bWxuczptZXJnZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZWNsaXBzZS9lbWYvY29kZWdlbi9qbWVyZ2UvT3B0aW9ucyI+Ci0JPG1lcmdlOnB1bGwgCi0JCXNvdXJjZUdldD0iTWV0aG9kL2dldFJldHVyblR5cGUiIAotCQl0YXJnZXRQdXQ9Ik1ldGhvZC9zZXRSZXR1cm5UeXBlIi8+Ci0JPG1lcmdlOnB1bGwgCi0JCXNvdXJjZUdldD0iTWV0aG9kL2dldEV4Y2VwdGlvbnMiIAotCQl0YXJnZXRQdXQ9Ik1ldGhvZC9hZGRFeGNlcHRpb24iLz4KLQotPCEtLSBNZXJnZSBydWxlcyB0byBoYW5kbGUgYW5ub3RhdGlvbjoKLQktIFdpdGggdGhpcyBwdWxsIHJ1bGUsIGFubm90YXRpb25zIGluIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgYnkgYW5ub3RhdGlvbnMgb2YgdGhlIAotCXNhbWUgbmFtZSBpbiB0aGUgc291cmNlLgotCS0gV2l0aCB0aGlzIHN3ZWVwIHJ1bGUsIGFueSBhbm5vdGF0aW9uIGluIHRoZSB0YXJnZXQgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSAKLSAgCXNvdXJjZSBpcyBjb21tZW50ZWQgb3V0LiAKLSAgCS0gQnkgZGVmYXVsdCwgYW55IGFubm90YXRpb24gaW4gdGhlIHNvdXJjZSB0aGF0IGlzIG5vdCBpbiB0aGUgdGFyZ2V0IGFyZSBwdWxsZWQgaW50byB0aGUgdGFyZ2V0LgotLS0+Ci0KLQk8bWVyZ2U6cHVsbCAKLSAgICAJc291cmNlR2V0PSJBbm5vdGF0aW9uL2dldENvbnRlbnRzIgotICAgIAl0YXJnZXRQdXQ9IkFubm90YXRpb24vc2V0Q29udGVudHMiLz4KLSAgIAotICAJPG1lcmdlOnN3ZWVwIHNlbGVjdD0iQW5ub3RhdGlvbiIgYWN0aW9uPSJjb21tZW50Ii8+Ci0JCQotPC9tZXJnZTpvcHRpb25zPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvSW5kZXgueHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvSW5kZXgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGNmNTQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL0luZGV4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYQoteG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLXhtbG5zOnJ0aT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleCIKLXhtbG5zOnJlZz0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi14bWxuczp0YXg9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4Ij4KLQotCTx4c2Q6aW1wb3J0Ci0JbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0Jc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IgotCXNjaGVtYUxvY2F0aW9uPSIuL1JlZ2lzdHJ5LnhzZCIvPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotCXNjaGVtYUxvY2F0aW9uPSIuL1RheG9ub215LnhzZCIvPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImluZGV4IiB0eXBlPSJydGk6SW5kZXgiLz4KLQkKLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluZGV4Ij4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJydGk6TmFtZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJydGk6RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InJlZzpyZWdpc3RyeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idGF4OnRheG9ub215IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InJ0aTpOYW1lIi8+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik5hbWUiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InJ0aTpEZXNjcmlwdGlvbiIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJEZXNjcmlwdGlvbiI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1JlZ2lzdHJ5LnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1JlZ2lzdHJ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFlMTk2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9SZWdpc3RyeS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEKLXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi14bWxuczpyZWc9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSI+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCXNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJyZWdpc3RyeSIgdHlwZT0icmVnOlJlZ2lzdHJ5Ii8+Ci0JCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3RyeSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0icmVnOk5hbWUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0icmVnOkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHR5cGU9InhzZDphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYXRpb24iIHR5cGU9InhzZDphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJyZWc6TmFtZSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJyZWc6RGVzY3JpcHRpb24iLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iRGVzY3JpcHRpb24iPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9UYXhvbm9teS54c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9UYXhvbm9teS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNTZhZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVGF4b25vbXkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgoteG1sbnM6dGF4PSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIKLXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQlzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0idGF4b25vbXkiIHR5cGU9InRheDpUYXhvbm9teSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUYXhvbm9teSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibmxuYW1lIiB0eXBlPSJ0YXg6TmFtZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJ0YXg6Q2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6YW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InJlZiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InRtb2RlbEtleSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJ0YXg6Q2F0ZWdvcnkiLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ2F0ZWdvcnkiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Im5sbmFtZSIgdHlwZT0idGF4Ok5hbWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJjYXRlZ29yeSIgdHlwZT0idGF4OkNhdGVnb3J5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ0YXg6TmFtZSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVURESVJlZ2lzdHJ5LnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1VERElSZWdpc3RyeS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzYyNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVURESVJlZ2lzdHJ5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYQoteG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLXhtbG5zOnVyZz0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5IgoteG1sbnM6cmVnPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIKLXhtbG5zOnRheD0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi10YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeSI+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCXNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQkKLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi0Jc2NoZW1hTG9jYXRpb249Ii4vUmVnaXN0cnkueHNkIi8+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi0Jc2NoZW1hTG9jYXRpb249Ii4vVGF4b25vbXkueHNkIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0idWRkaVJlZ2lzdHJ5IiB0eXBlPSJ1cmc6VURESVJlZ2lzdHJ5Ii8+Ci0JCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJVRERJUmVnaXN0cnkiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0icmVnOlJlZ2lzdHJ5Ij4KLQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNjb3ZlcnlVUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0icHVibGljYXRpb25VUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJlZERpc2NvdmVyeVVSTCIgdHlwZT0ieHNkOmFueVVSSSIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cmVkUHVibGljYXRpb25VUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVmYXVsdExvZ2luIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjEiLz4KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImRlZmF1bHRQYXNzd29yZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0YXhvbm9taWVzIiB0eXBlPSJ1cmc6VGF4b25vbWllcyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0YXhvbm9taWVzIiB0eXBlPSJ1cmc6VGF4b25vbWllcyIvPgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVGF4b25vbWllcyI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0YXg6dGF4b25vbXkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQwNDJkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InJlZ2lzdHJ5IgotICAgIG5zVVJJPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIgbnNQcmVmaXg9InJlZ2lzdHJ5Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVzY3JpcHRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iRGVzY3JpcHRpb24iLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb2N1bWVudFJvb3QiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJtaXhlZCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhlZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VGZWF0dXJlTWFwRW50cnkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRXaWxkY2FyZCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSI6bWl4ZWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieE1MTlNQcmVmaXhNYXAiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieG1sbnM6cHJlZml4Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhTSVNjaGVtYUxvY2F0aW9uIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhzaTpzY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXNjcmlwdGlvbiIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9EZXNjcmlwdGlvbiIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZXNjcmlwdGlvbiIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5hbWUiIHVwcGVyQm91bmQ9Ii0yIiBlVHlwZT0iIy8vTmFtZSIKLSAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0yIgotICAgICAgICBlVHlwZT0iIy8vUmVnaXN0cnkiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0icmVnaXN0cnkiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYW1lIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Ik5hbWUiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZWdpc3RyeSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJSZWdpc3RyeSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgbG93ZXJCb3VuZD0iMSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZGVzY3JpcHRpb24iIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iZGVzY3JpcHRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWQiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iaWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVmIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InJlZiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDk1YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InJ0aW5kZXgiCi0gICAgbnNVUkk9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgiIG5zUHJlZml4PSJydGluZGV4Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVzY3JpcHRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iRGVzY3JpcHRpb24iLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb2N1bWVudFJvb3QiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJtaXhlZCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhlZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VGZWF0dXJlTWFwRW50cnkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRXaWxkY2FyZCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSI6bWl4ZWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieE1MTlNQcmVmaXhNYXAiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieG1sbnM6cHJlZml4Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhTSVNjaGVtYUxvY2F0aW9uIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhzaTpzY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXNjcmlwdGlvbiIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9EZXNjcmlwdGlvbiIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZXNjcmlwdGlvbiIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImluZGV4IiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL0luZGV4IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImluZGV4Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgdXBwZXJCb3VuZD0iLTIiIGVUeXBlPSIjLy9OYW1lIgotICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbmRleCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJJbmRleCIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgbG93ZXJCb3VuZD0iMSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZGVzY3JpcHRpb24iIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iZGVzY3JpcHRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJyZWdpc3RyeSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRheG9ub215IiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idGF4b25vbXkiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYW1lIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Ik5hbWUiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE4ODliMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InRheG9ub215IgotICAgIG5zVVJJPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIgbnNQcmVmaXg9InRheG9ub215Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ2F0ZWdvcnkiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iQ2F0ZWdvcnkiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRPbmx5Ii8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5sbmFtZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5sbmFtZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjYXRlZ29yeSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9DYXRlZ29yeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJjYXRlZ29yeSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb2RlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImNvZGUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvY3VtZW50Um9vdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSIiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9Im1peGVkIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1peGVkIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUZlYXR1cmVNYXBFbnRyeSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudFdpbGRjYXJkIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjptaXhlZCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4TUxOU1ByZWZpeE1hcCIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4bWxuczpwcmVmaXgiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieFNJU2NoZW1hTG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieHNpOnNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImNhdGVnb3J5IiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL0NhdGVnb3J5IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImNhdGVnb3J5Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgdXBwZXJCb3VuZD0iLTIiIGVUeXBlPSIjLy9OYW1lIgotICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0YXhvbm9teSIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9UYXhvbm9teSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ0YXhvbm9teSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5hbWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iTmFtZSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOjAiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxhbmciIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsYW5nIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRheG9ub215Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IlRheG9ub215Ii8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50T25seSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJubG5hbWUiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vTmFtZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJubG5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iY2F0ZWdvcnkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vQ2F0ZWdvcnkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iY2F0ZWdvcnkiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWQiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iaWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlZiIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJyZWYiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idG1vZGVsS2V5IiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InRtb2RlbEtleSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGNlNjAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InVkZGlyZWdpc3RyeSIKLSAgICBuc1VSST0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5IiBuc1ByZWZpeD0idWRkaXJlZ2lzdHJ5Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG9jdW1lbnRSb290Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IiIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ibWl4ZWQiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWl4ZWQiIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRmVhdHVyZU1hcEVudHJ5Ij4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50V2lsZGNhcmQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOm1peGVkIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhNTE5TUHJlZml4TWFwIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhtbG5zOnByZWZpeCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4U0lTY2hlbWFMb2NhdGlvbiIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4c2k6c2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbWllcyIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9UYXhvbm9taWVzIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InRheG9ub21pZXMiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ1ZGRpUmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0yIgotICAgICAgICBlVHlwZT0iIy8vVURESVJlZ2lzdHJ5IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InVkZGlSZWdpc3RyeSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRheG9ub21pZXMiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iVGF4b25vbWllcyIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbXkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teSIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ0YXhvbm9teSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVERElSZWdpc3RyeSIgZVN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJVRERJUmVnaXN0cnkiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRPbmx5Ii8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlcnNpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InZlcnNpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlzY292ZXJ5VVJMIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkaXNjb3ZlcnlVUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icHVibGljYXRpb25VUkwiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNlY3VyZWREaXNjb3ZlcnlVUkwiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InNlY3VyZWREaXNjb3ZlcnlVUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VjdXJlZFB1YmxpY2F0aW9uVVJMIgotICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJzZWN1cmVkUHVibGljYXRpb25VUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVmYXVsdExvZ2luIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZWZhdWx0TG9naW4iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVmYXVsdFBhc3N3b3JkIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZWZhdWx0UGFzc3dvcmQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbWllcyIgZVR5cGU9IiMvL1RheG9ub21pZXMiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idGF4b25vbWllcyIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTgyMWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcxMTIyICAgMjA5ODU4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwODAzMjQgICAyMjA3MzkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFRleHQgRGVzY3JpcHRpb24gbWlzc2luZyBmb3IgUHJvZmlsZSBDb21wbGFpbmNlIG5vZGVzCi0jIDIwMDgwNDAzICAgMjI1NDgwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcwotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLSMgRXh0ZW5zaW9uIHBvaW50IG5hbWVzCi1YUF9XRUJfU0VSVklDRV9MT0NBVE9SPVdlYiBTZXJ2aWNlIExvY2F0b3IKLVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9XT1JLU1BBQ0U9V29ya3NwYWNlIFdlYiBTZXJ2aWNlIExvY2F0b3IKLVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9DQVRFR09SWV9XT1JLU1BBQ0U9V29ya3NwYWNlIFdTREwgZG9jdW1lbnRzCi1YX1dTSUxfQ09OVEVOVF9UWVBFPVdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIERvY3VtZW50Ci0KLU1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUj1JV0FCMDAwMUUgVW5hYmxlIHRvIG1vbml0b3IgcG9ydCB7MH0gb2YgezF9LgotCi0jIEN1cnJlbnRseSBrbm93biBwdWJsaWMgVURESSByZWdpc3RyaWVzCi1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfU0FQPVNBUCBVRERJIFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfU0FQX1RFU1Q9U0FQIFVEREkgVGVzdCBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1hNRVRIT0RTPVhNZXRob2RzIFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfTlRUQ09NTT1OVFQgQ29tbXVuaWNhdGlvbnMgUmVnaXN0cnkKLQotCi1QUkVGRVJFTkNFX1NFUlZJQ0VQT0xJQ0lFU19DT05UQUlORVJfV1NJX0NPTVBMSUFOQ0U9UHJvZmlsZSBDb21wbGlhbmNlCi1MQUJFTF9XU0lfU1NCUD1XUy1JIEJQIDEuMSArIFNTQlAgMS4wCi1MQUJFTF9XU0lfQVA9V1MtSSBBUCAxLjAKLQotIyBTZXJ2aWNlIHBvbGljeSBkZXNjcmlwdGlvbnMKLURFU0NSSVBUSU9OX1dTSV9DT01QTElBTkNFPVdlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKSBwcm9maWxlcyBjb21wbGlhbmNlIGxldmVscy4KLURFU0NSSVBUSU9OX1dTSV9BUD1XUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wXG5cCi1SZXF1aXJlbWVudHMgZm9yIHN1cHBvcnRpbmcgaW50ZXJvcGVyYWJsZSBTT0FQIG1lc3NhZ2VzIHdpdGggYXR0YWNobWVudHMtYmFzZWQgV2ViIHNlcnZpY2VzLgotREVTQ1JJUFRJT05fV1NJX1NTQlA9V1MtSSBCYXNpYyBQcm9maWxlIDEuMSBhbmQgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMFxuXAotQmFzaWMgcHJvZmlsZSBhbmQgcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIHNlcmlhbGl6YXRpb24gb2YgYW4gZW52ZWxvcGUgYW5kIGl0cyByZXByZXNlbnRhdGlvbiBpbiBhIFNPQVAgbWVzc2FnZS4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjc4YWQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBwcm9tb3RlZCBmb3IgcHVibGljIHVzZSwgcG9zc2libHkgd2l0aCBjaGFuZ2VzLCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImxvY2F0b3IiIG5hbWU9IiVYUF9XRUJfU0VSVklDRV9MT0NBVE9SIiBzY2hlbWE9InNjaGVtYS93ZWJTZXJ2aWNlTG9jYXRvci5leHNkIi8+Ci0KLSAgIDwhLS0gRXh0ZW5zaW9uIHByb3ZpZGluZyB3b3Jrc3BhY2UgV1NETCBkaXNjb3ZlcnkgLS0+ICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IiPgotCi0gICAgICA8d2ViU2VydmljZUxvY2F0b3JDYXRlZ29yeQotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5jYXRlZ29yeS53b3Jrc3BhY2UiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9DQVRFR09SWV9XT1JLU1BBQ0UiLz4KLQotICAgICAgPHdlYlNlcnZpY2VMb2NhdG9yCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldvcmtzcGFjZVdTRExMb2NhdG9yIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5Xb3Jrc3BhY2VXU0RMTG9jYXRvciIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuY2F0ZWdvcnkud29ya3NwYWNlIgotICAgICAgICAgICAgbGFiZWw9IiVYX1dFQl9TRVJWSUNFX0xPQ0FUT1JfV09SS1NQQUNFIj4KLSAgICAgIDwvd2ViU2VydmljZUxvY2F0b3I+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tIEV4dGVuc2lvbiB0byBiaW5kIGEgZmlsZSB0eXBlIHRvIFdTSUwgZmlsZXMgLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS50ZWFtLmNvcmUuZmlsZVR5cGVzIj4KLSAgICAgIDxmaWxlVHlwZXMKLSAgICAgICAgICAgIHR5cGU9InRleHQiCi0gICAgICAgICAgICBleHRlbnNpb249IndzaWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIEV4dGVuc2lvbiB0byBkZWZpbmUgYSBjb250ZW50IHR5cGUgZm9yIFdTSUwgZmlsZXMgLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4KLSAgICAgIDxjb250ZW50LXR5cGUKLSAgICAgICAgICAgIHByaW9yaXR5PSJoaWdoIgotICAgICAgICAgICAgbmFtZT0iJVhfV1NJTF9DT05URU5UX1RZUEUiCi0gICAgICAgICAgICBpZD0id3NpbHNvdXJjZSIKLSAgICAgICAgICAgIGJhc2UtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLSAgICAgICAgICAgIGRlZmF1bHQtY2hhcnNldD0iVVRGLTgiCi0gICAgICAgICAgICBmaWxlLWV4dGVuc2lvbnM9IndzaWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuc2VydmljZXBvbGljeSI+Ci0gICAgIDxzZXJ2aWNlUG9saWN5PgotICAgICAgICAgPGxvYWRMaXN0ZW5lciBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLk1pZ3JhdGVXU0lwcmVmZXJlbmNlc0xvYWRMaXN0ZW5lciIvPgotICAgICA8L3NlcnZpY2VQb2xpY3k+Ci0gICA8L2V4dGVuc2lvbj4gCi0gICAKLSAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5wcm9wZXJ0eVRlc3RlcnMiPgotICAgIDxwcm9wZXJ0eVRlc3RlcgotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLndzLnNlcnZpY2UucG9saWN5IgotICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiCi0gICAgICBuYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLndzLnNlcnZpY2UucG9saWN5IgotICAgICAgcHJvcGVydGllcz0icHJvamVjdEhhc1dTRExmaWxlcyIKLSAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuV1NETEZpbGVQcm9wZXJ0eVRlc3RlciI+Ci0gICAgPC9wcm9wZXJ0eVRlc3Rlcj4KLSAgPC9leHRlbnNpb24+Ci0gIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnNlcnZpY2Vwb2xpY3kiPgotICAgICA8c2VydmljZVBvbGljeT4KLSAgICAgICA8ZW5hYmxlbWVudD4KLSAgICAgICAgICAgPG9yPgotICAgICAgICAgICAgIDx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcm9qZWN0RmFjZXQiCi0gICAgICAgICAgICAgICAgICAgdmFsdWU9ImpzdC53ZWIiLz4KLSAgICAgICAgICAgICA8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJvamVjdEZhY2V0IgotICAgICAgICAgICAgICAgICAgIHZhbHVlPSJqc3QuZWpiIi8+Ci0gICAgICAgICAgICAgPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLndzLnNlcnZpY2UucG9saWN5LnByb2plY3RIYXNXU0RMZmlsZXMiLz4KLSAgICAgICAgICAgPC9vcj4KLSAgICAgICA8L2VuYWJsZW1lbnQ+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wIj4KLSAgICAgICAgIDwhLS0gQ09OVEVYVF9JRCBQU1BXMDAwMSBmb3IgdGhlIFNlcnZpY2UgUG9saWNpZXMgV1MtSSBQcmVmZXJlbmNlcyBjYXRlZ29yeSAtLT4KLSAgICAgICAgIDxkZXNjcmlwdG9yIGxvbmdOYW1lPSIlUFJFRkVSRU5DRV9TRVJWSUNFUE9MSUNJRVNfQ09OVEFJTkVSX1dTSV9DT01QTElBTkNFIiBpY29uUGF0aD0iaWNvbnMvZnVsbC9vYmoxNi93c2ljYXQuZ2lmIiBjb250ZXh0SGVscElkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuUFNQVzAwMDEiCi0gICAgICAgICAJZGVzY3JpcHRpb249IiVERVNDUklQVElPTl9XU0lfQ09NUExJQU5DRSIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lhcCIgcGFyZW50UG9saWN5SWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcCIgZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnN1Z2dlc3Rpb25FbnVtIiBkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiPgotICAgICAgICAgPCEtLSBDT05URVhUX0lEIFBTUFcwMDAyIGZvciB0aGUgU2VydmljZSBQb2xpY2llcyBXUy1JIEFQIDEuMCBQcmVmZXJlbmNlIC0tPgotICAgICAgICAgPGRlc2NyaXB0b3IgbG9uZ05hbWU9IiVMQUJFTF9XU0lfQVAiIGljb25QYXRoPSJpY29ucy9mdWxsL29iajE2L3dzaWNhdF9jaGlsZC5naWYiIGNvbnRleHRIZWxwSWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5QU1BXMDAwMiIKLSAgICAgICAgIAlkZXNjcmlwdGlvbj0iJURFU0NSSVBUSU9OX1dTSV9BUCIvPgotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0Ij4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaXNzYnAiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCBvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiLz4KLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPgotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaXNzYnAiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIvPgotICAgICAgICAgPC9yZWxhdGlvbnNoaXA+Ci0gICAgICAgICA8c3RhdGUga2V5PSJkZWZhdWx0UHJvdG9jb2wiIHZhbHVlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaXNzYnAiIHBhcmVudFBvbGljeUlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAiIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5zdWdnZXN0aW9uRW51bSIgZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0Ij4KLSAgICAgICAgIDwhLS0gQ09OVEVYVF9JRCBQU1BXMDAwMyBmb3IgdGhlIFNlcnZpY2UgUG9saWNpZXMgV1MtSSBTU0JQIDEuMCBQcmVmZXJlbmNlIC0tPgotICAgICAgICAgPGRlc2NyaXB0b3IgbG9uZ05hbWU9IiVMQUJFTF9XU0lfU1NCUCIgaWNvblBhdGg9Imljb25zL2Z1bGwvb2JqMTYvd3NpY2F0X2NoaWxkLmdpZiIgY29udGV4dEhlbHBJZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlBTUFcwMDAzIgotICAgICAgICAgCWRlc2NyaXB0aW9uPSIlREVTQ1JJUFRJT05fV1NJX1NTQlAiLz4KLSAgICAgICAgIDxzdGF0ZSBrZXk9ImRlZmF1bHRQcm90b2NvbCIgdmFsdWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgPC9zZXJ2aWNlUG9saWN5PgotICAgPC9leHRlbnNpb24+Ci0KLSAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zY2hlbWEvd2ViU2VydmljZUxvY2F0b3IuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NjaGVtYS93ZWJTZXJ2aWNlTG9jYXRvci5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk3ZDBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NjaGVtYS93ZWJTZXJ2aWNlTG9jYXRvci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53cyI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzIiBpZD0id2ViU2VydmljZUxvY2F0b3IiIG5hbWU9IldlYiBTZXJ2aWNlIExvY2F0b3IiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcHJvdmlkZWQgdG8gcmVnaXN0ZXIgbG9jYXRvcnMgdGhhdCBleHRlbmQgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvci4KLSAgICAgICAgIFRoZXNlIGxvY2F0b3JzIGFyZSB1c2VkIGJ5IFdlYlNlcnZpY2VGaW5kZXIgdG8gbG9jYXRlIFdlYiBzZXJ2aWNlcyBmb3IgdGhlIHB1cnBvc2Ugb2YgV2ViIHNlcnZpY2UgZGlzY292ZXJ5LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGFsbD4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZUxvY2F0b3IiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZUxvY2F0b3JDYXRlZ29yeSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9hbGw+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VMb2NhdG9yIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3IuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIGZvciB0aGUgbG9jYXRvciBjbGFzcyB3aGljaCBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBzaG9ydCBsYWJlbCB0byBpZGVudGlmeSB0aGUgV2ViIFNlcnZpY2UgTG9jYXRvci4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGEgZGVzY3JpcHRpb24gb2YgdGhlIHB1cnBvc2Ugb2YgdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3IuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpY29uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGFuIGljb24gdGhhdCByZXByZXNlbnRzIHRoZSBXZWIgU2VydmljZSBMb2NhdG9yLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGEgY2F0ZWdvcnkgdG8gd2hpY2ggdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3Igc2hvdWxkIGJlbG9uZy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id2ViU2VydmljZUxvY2F0b3JDYXRlZ29yeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjYXRlZ29yeSBvZiBXZWIgU2VydmljZSBMb2NhdG9ycy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHNob3J0IGxhYmVsIGZvciB0aGUgY2F0ZWdvcnkgb2YgV2ViIFNlcnZpY2UgTG9jYXRvcnMuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeSBvZiBXZWIgU2VydmljZSBMb2NhdG9ycy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imljb24iIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgYW4gaWNvbiB0aGF0IHJlcHJlc2VudHMgdGhlIGNhdGVnb3J5IG9mIFdlYiBTZXJ2aWNlIExvY2F0b3JzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGEgcGFyZW50IGNhdGVnb3J5IHVuZGVyIHdoaWNoIHRoZSBXZWIgU2VydmljZSBMb2NhdG9yCi0gICAgICAgICAgICAgICAgICBjYXRlZ29yeSBzaG91bGQgYmUgZ3JvdXBlZC4gSWYgYWJzZW50LCB0aGUgY2F0ZWdvcnkgaXMgY29uc2lkZXJlZAotICAgICAgICAgICAgICAgICAgdG8gYmUgYSByb290IGNhdGVnb3J5LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgRXh0ZW5kZXJzIHNob3VsZCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLkFic3RyYWN0V2ViU2VydmljZUxvY2F0b3ImbHQ7L2NvZGUmZ3Q7LiAgVGhlIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgdXNlcyB0aGlzIGV4dGVuc2lvbiBwb2ludCB0byByZXRyaWV2ZSBhbGwgbG9jYXRvcnMuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MDM2NjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9Xc3RXU1BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNDIwICAgMTIwNzE0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIDIwMDcwMTI1ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0jIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0jIDIwMDgwNDAzICAgMjI1NDgwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgR2V0TW9uaXRvckNvbW1hbmQKLSMKLU1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUj1JV0FCMDAwMUUgVW5hYmxlIHRvIG1vbml0b3IgcG9ydCB7MH0gb2YgezF9LgotCi0jCi0jIFdTRExVdGlsaXR5Ci0jCi1NU0dfVU5BQkxFX1RPX1JFU09MVkVfSFRUUD1Db3VsZCBub3QgcmVzb2x2ZSBzZXJ2aWNlIGRlZmluaXRpb24gaHR0cDovL3swfS4gIFNlcnZpY2UgbWF5IG5vdCBiZSBydW5uaW5nIG9uIHRoZSBzZXJ2ZXIuCi1NU0dfVU5BQkxFX1RPX1JFU09MVkVfUExBVEZPUk1fVVJJPUNvdWxkIG5vdCBwYXJzZSBwbGF0Zm9ybTovcmVzb3VyY2V7MH0uCi0KLSMKLSMgV1NJQ29tcGxpYW5jZVV0aWxzCi0jCi1JR05PUkVfTEFCRUw9SWdub3JlCi1JR05PUkVfREVTQ1JJUFRJT049SWdub3JlIHRoZSBXUy1JIG5vbi1jb21wbGlhbmNlIGFuZCBjb250aW51ZQotSUdOT1JFX0FMTF9MQUJFTD1JZ25vcmUgQWxsCi1JR05PUkVfQUxMX0RFU0NSSVBUSU9OPUFsd2F5cyBpZ25vcmUgdGhlIFdTLUkgbm9uLWNvbXBsaWFuY2UgYW5kIGNvbnRpbnVlCi1DQU5DRUxfTEFCRUw9Q2FuY2VsCi1DQU5DRUxfREVTQ1JJUFRJT049Q2FuY2VsCi0KLSMKLSMJV1MtSSBDb21wbGlhbmNlIE1lc3NhZ2VzCi0jCi1XU0lfU1NCUF9FUlJPUj1Zb3UgaGF2ZSBtYWRlIGEgY2hvaWNlIHRoYXQgbWF5IHJlc3VsdCBpbiBhIFdlYiBzZXJ2aWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEgYW5kIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAuIFlvdXIgY3VycmVudCBXZWIgc2VydmljZXMgcHJlZmVyZW5jZSBpcyBzZXQgdG8gcmVxdWlyZSBjb21wbGlhbmNlLgotV1NJX1NTQlBfV0FSTklORz1Zb3UgaGF2ZSBtYWRlIGEgY2hvaWNlIHRoYXQgbWF5IHJlc3VsdCBpbiBhIFdlYiBzZXJ2aWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEgYW5kIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAuIERvIHlvdSB3aXNoIHRvIGlnbm9yZSB0aGlzIHdhcm5pbmcgYW5kIGNvbnRpbnVlPwotV1NJX1NTQlBfSU5DT01QTElBTlRfUlVOVElNRT1UaGUgc2VsZWN0ZWQgV2ViIFNlcnZpY2UgcnVudGltZSBkb2VzIG5vdCBjb21wbHkgd2l0aCB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSBhbmQgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMC4KLVdTSV9BUF9FUlJPUj1Zb3UgaGF2ZSBtYWRlIGEgY2hvaWNlIHRoYXQgbWF5IHJlc3VsdCBpbiBhIFdlYiBzZXJ2aWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgQXR0YWNobWVudCBQcm9maWxlIDEuMC4gWW91ciBjdXJyZW50IFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlIGlzIHNldCB0byByZXF1aXJlIGNvbXBsaWFuY2UuCi1XU0lfQVBfV0FSTklORz1Zb3UgaGF2ZSBtYWRlIGEgY2hvaWNlIHRoYXQgbWF5IHJlc3VsdCBpbiBhIFdlYiBzZXJ2aWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgQXR0YWNobWVudCBQcm9maWxlIDEuMC4gRG8geW91IHdpc2ggdG8gaWdub3JlIHRoaXMgd2FybmluZyBhbmQgY29udGludWU/Ci1XU0lfQVBfSU5DT01QTElBTlRfUlVOVElNRT1UaGUgc2VsZWN0ZWQgV2ViIFNlcnZpY2UgcnVudGltZSBkb2VzIG5vdCBjb21wbHkgd2l0aCB0aGUgV1MtSSBBdHRhY2htZW50IFByb2ZpbGUgMS4wLgotCi0KLSMKLSMgV1NETENvcGllciBNZXNzYWdlcwotIwotTVNHX0VSUk9SX0NPUFlfV1NETD1GYWlsZWQgdG8gY29weSBXU0RMICJ7MH0iIHRvICJ7MX0iLgotTVNHX0VSUk9SX1RBUkdFVF9GT0xERVJfTk9UX1NQRUNJRklFRD1BIHRhcmdldCBmb2xkZXIgd2FzIG5vdCBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvV3N0V1NQbHVnaW5NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmIyMzg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvV3N0V1NQbHVnaW5NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDIwICAgMTIwNzE0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDEyNSAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwNzA0MDkgICAxODE2MzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRExDb3BpZXIgdXRpbGl0eSBzaG91bGQgY3JlYXRlIHRhcmdldCBmb2xkZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgV3N0V1NQbHVnaW5NZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdzdFdTUGx1Z2luTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfVU5BQkxFX1RPX1JFU09MVkVfUExBVEZPUk1fVVJJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19VTkFCTEVfVE9fUkVTT0xWRV9IVFRQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElHTk9SRV9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJR05PUkVfREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUdOT1JFX0FMTF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJR05PUkVfQUxMX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENBTkNFTF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDQU5DRUxfREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX1NTQlBfRVJST1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX1NTQlBfV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfU1NCUF9JTkNPTVBMSUFOVF9SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9BUF9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfQVBfV0FSTklORzsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX0FQX0lOQ09NUExJQU5UX1JVTlRJTUU7Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NPUFlfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVEFSR0VUX0ZPTERFUl9OT1RfU1BFQ0lGSUVEOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV3N0V1NQbHVnaW5NZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vQnVuZGxlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0J1bmRsZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NDcxNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vQnVuZGxlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwMSAgIDE4NDUwNSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjYgICAyMjQxNDggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBzZXJ2aWNlIHNjZW5hcmlvcyBicm9rZSBpbiBsYXRlc3QgYnVpbGRzIHdpdGggRXF1aW5veCBwMgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuVmVyc2lvbjsKLQotcHVibGljIGNsYXNzIEJ1bmRsZVV0aWxzCi17Ci0Jc3RhdGljIHB1YmxpYyBVUkwgZ2V0VVJMRnJvbUJ1bmRsZSggU3RyaW5nIGJ1bmRsZUlkLCBTdHJpbmcgcGF0aCApIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQl7Ci0JCUJ1bmRsZSAgICAgIGJ1bmRsZSAgICAgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIGJ1bmRsZUlkICk7Ci0JCVVSTCAgICAgICAgIGluc3RhbGxVUkwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJVVJMICAgICAgICAgZmlsZVVSTCAgICA9IG5ldyBVUkwoaW5zdGFsbFVSTCwgcGF0aCApOwotCi0JCXJldHVybiBmaWxlVVJMOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBidW5kbGVJZAotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgcGF0aCBmb3IgdGhlIEphcnJlZCBwbHVnaW4uICBSZXR1cm5zIG51bGwgaWYgcGF0aCBub3QgZm91bmQuCi0JICovCi0Jc3RhdGljIHB1YmxpYyBJUGF0aCBnZXRKYXJyZWRQbHVnaW5QYXRoKFN0cmluZyBidW5kbGVJZCkgewotCQlJUGF0aCByZXN1bHQgPSBudWxsOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZUlkKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUZpbGUgZmlsZSA9IEZpbGVMb2NhdG9yLmdldEJ1bmRsZUZpbGUoYnVuZGxlKTsKLQkJCQlyZXN1bHQgPSBuZXcgUGF0aChmaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCS8vIGlnbm9yZSwgcmV0dXJuIG51bGwKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBidW5kbGVJZAotCSAqIEByZXR1cm4gVGhlIHZlcnNvaW4gb2YgdGhlIHBsdWdpbiB3aXRoIHRoYXQgYnVuZGxlIElECi0JICovCi0Jc3RhdGljIHB1YmxpYyBWZXJzaW9uIGdldFZlcnNpb24oU3RyaW5nIGJ1bmRsZUlkKSB7Ci0JCVZlcnNpb24gcmVzdWx0ID0gbnVsbDsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVJZCk7Ci0JCVN0cmluZyB2ZXJzaW9uU3RyaW5nID0gKFN0cmluZykgYnVuZGxlLmdldEhlYWRlcnMoKS5nZXQoIkJ1bmRsZS1WZXJzaW9uIik7Ci0JCXJlc3VsdCA9IG5ldyBWZXJzaW9uKHZlcnNpb25TdHJpbmcpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vSFRUUFV0aWxpdHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0hUVFBVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNTExMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vSFRUUFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEyNCAgIDE2NzQ4NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBIVFRQVXRpbGl0eSB7Ci0KLQlwdWJsaWMgU3RyaW5nIGhhbmRsZVJlZGlyZWN0KFN0cmluZyB1cmxTdHJpbmcpewotCQlVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCQlTdHJpbmcgdXJsUmVkaXJlY3QgPSB1cmxTdHJpbmc7Ci0JCWludCB0aW1lID0gMDsKLQkJd2hpbGUodXJsUmVkaXJlY3QhPSBudWxsKXsKLQkJCWlmICh0aW1lID09IDYpIHJldHVybiB1cmxSZWRpcmVjdDsKLQkJCXRyeXsKLQkJCQlVUkwgdXJsID0gbmV3IFVSTCh1cmxSZWRpcmVjdCk7Ci0JCQkJY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQkJfWNhdGNoKEV4Y2VwdGlvbiBleGMpewotCQkJCXJldHVybiB1cmxSZWRpcmVjdDsKLQkJCX0KLQkJCWlmIChjb25uIGluc3RhbmNlb2YgSHR0cFVSTENvbm5lY3Rpb24pCi0JCQkJewotCQkJCUh0dHBVUkxDb25uZWN0aW9uIGh0dHAgPSAoSHR0cFVSTENvbm5lY3Rpb24pIGNvbm47Ci0JCQkJaHR0cC5zZXRJbnN0YW5jZUZvbGxvd1JlZGlyZWN0cyhmYWxzZSk7Ci0JICAgICAgICAgCi0JCQkJdHJ5ewotCQkJCQlpbnQgY29kZSA9IGh0dHAuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JCQkJCWlmIChjb2RlID49IDMwMCAmJiBjb2RlIDw9IDMwNyAmJiBjb2RlICE9IDMwNiAmJgotCSAgICAgICAgCQkJIGNvZGUgIT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9OT1RfTU9ESUZJRUQpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyB1cmxSZWRpcmVjdDIgPSBjaGFuZ2VTbGFzaChodHRwLmdldEhlYWRlckZpZWxkKCJMb2NhdGlvbiIpKTsKLQkgICAgICAgICAgIAkgCQlpZiAodXJsUmVkaXJlY3QyID09IG51bGwgfHwgdXJsUmVkaXJlY3QuZXF1YWxzKHVybFJlZGlyZWN0MikpIHJldHVybiB1cmxSZWRpcmVjdDsKLQkgICAgICAgICAgCSAJCWVsc2UgdXJsUmVkaXJlY3QgPSB1cmxSZWRpcmVjdDI7Ci0JCQkJCX1lbHNlIHJldHVybiB1cmxSZWRpcmVjdDsKLQkJCQkKLQkJCQkKLQkJCQl9Y2F0Y2goSU9FeGNlcHRpb24gZXhjKXsKLQkJCQkJcmV0dXJuIHVybFJlZGlyZWN0OyAKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHJldHVybiB1cmxSZWRpcmVjdDsKLQkJCXRpbWUrKzsKLQkJfQotCQlyZXR1cm4gdXJsU3RyaW5nOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgY2hhbmdlU2xhc2goU3RyaW5nIHVybCl7Ci0JCVN0cmluZyB0ZW1wID0gIiI7Ci0JCXRyeXsKLQkJCXRlbXAgPSB1cmwucmVwbGFjZSgnXFwnLCAnLycpOwotCQl9Y2F0Y2goRXhjZXB0aW9uIGV4Yyl7Ci0JCQlyZXR1cm4gdXJsOwotCQl9Ci0JCXJldHVybiB0ZW1wOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0xpdmVXU0RMRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9MaXZlV1NETEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RjNjBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0xpdmVXU0RMRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGl2ZVdTRExGaWx0ZXIgZXh0ZW5kcyBUaHJlYWQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTF87Ci0gIHByaXZhdGUgYm9vbGVhbiBmaW5pc2hfOwotICBwcml2YXRlIGJvb2xlYW4gbGl2ZV87Ci0KLSAgcHVibGljIExpdmVXU0RMRmlsdGVyKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgd3NkbFVSTF8gPSB3c2RsVVJMOwotICAgIGZpbmlzaF8gPSBmYWxzZTsKLSAgICBsaXZlXyA9IGZhbHNlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMVVJMKCkKLSAgewotICAgIHJldHVybiB3c2RsVVJMXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRmluaXNoKCkKLSAgewotICAgIHJldHVybiBmaW5pc2hfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMTGl2ZSgpCi0gIHsKLSAgICByZXR1cm4gbGl2ZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbGl2ZV8gPSB2YWxpZGF0ZVdTREwoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJUaHJvd2luZyBleGNlcHRpb24gIiArIHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIGxpdmVfID0gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBmaW5pc2hfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVXU0RMKCkgdGhyb3dzIFdTRExFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgCVdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh3c2RsVVJMXyk7Ci0gIAlTeXN0ZW0ub3V0LnByaW50bG4oIndzZGxVUkxfICIgKyB3c2RsVVJMXy50b1N0cmluZygpKTsKLSAgICBNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgSXRlcmF0b3Igc2VydmljZUl0ZXJhdG9yID0gc2VydmljZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNlcnZpY2VJdGVyYXRvciAiICsgc2VydmljZUl0ZXJhdG9yLnRvU3RyaW5nKCkpOwotICAgIHdoaWxlIChzZXJ2aWNlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKXNlcnZpY2VJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICBJdGVyYXRvciBwb3J0SXRlcmF0b3IgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKHBvcnRJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXBvcnRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgSXRlcmF0b3IgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBpZiAoKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHx8IChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vV1NETFV0aWxpdHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL1dTRExVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MTYwYzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vV1NETFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogVXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgV1NETCBmaWxlIHJlc291cmNlLgotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExVdGlsaXR5IHsKLQotCXByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb25fID0gbnVsbDsKLQlwcm90ZWN0ZWQgSVJlc291cmNlIHJlc291cmNlXyA9IG51bGw7Ci0JcHJvdGVjdGVkIFN0cmluZyBzZXJ2aWNlTmFtZV8gPSAiIjsKLQlwcm90ZWN0ZWQgVVJMIHVybF8gPSBudWxsOwotCQotCXB1YmxpYyBXU0RMVXRpbGl0eShJUmVzb3VyY2UgcmVzKQotCXsKLSAJCXN1cGVyKCk7Ci0JCXJlc291cmNlXyA9IHJlczsKLQkJYnVpbGREZWZpbml0aW9uKCk7CQkKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gYnVpbGREZWZpbml0aW9uKCkKLQl7CQkKLQkJaWYgKHJlc291cmNlXy5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0JICAgIHsgICAgICAgIAotCSAgICAgICAgU3RyaW5nIGV4dCA9IHJlc291cmNlXy5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JICAgICAgICBTdHJpbmcgcmVzUGF0aCA9IHJlc291cmNlXy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JICAgICAgICBpZiAoZXh0ICE9IG51bGwpCi0JICAgICAgICB7Ci0JCSAgICAgIAkKLQkJICAgICAgICBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXIoKTsKLQkJICAgICAgCQkJICAgICAgCQotCQkgICAgICAJdHJ5IHsKLQkJICAgICAgCQlkZWZpbml0aW9uXyA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvbigicGxhdGZvcm06IiArIHJlc1BhdGgpOwotCQkgICAgICAJICAgaWYgKGRlZmluaXRpb25fID09IG51bGwpewkJICAgICAgCQkgICAKLQkJICAgICAgCQkgdGhyb3cgbmV3IEV4Y2VwdGlvbihOTFMuYmluZChXc3RXU1BsdWdpbk1lc3NhZ2VzLk1TR19VTkFCTEVfVE9fUkVTT0xWRV9QTEFURk9STV9VUkksIHJlc1BhdGgpKTsJCSAgICAgIAkJIAotCQkgICAgICAJICAgfQotCQkgICAgICAJfQotCQkgICAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJICAgICAgCQlyZXR1cm4gZmFsc2U7Ci0JCSAgICAgIAl9Ci0JICAgICAgICB9Ci0JICAgICAgICBlbHNlIGlmIChyZXNQYXRoLmluZGV4T2YoJz8nKSA+IDApICAvL2RlcGxveWVkIHJlc291cmNlCi0JICAgICAgICB7Ci0JICAgICAgICAJV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0JCSAgICAgIAkJCSAgICAgIAkKLQkJICAgICAgCXRyeSB7Ci0JCSAgICAgIAkJZGVmaW5pdGlvbl8gPSBwYXJzZXIuZ2V0V1NETERlZmluaXRpb24oImh0dHA6IiArIHJlc1BhdGgpOwotCQkgICAgICAJICAgaWYgKGRlZmluaXRpb25fID09IG51bGwpewotCQkgICAgICAJCSB0aHJvdyBuZXcgRXhjZXB0aW9uKE5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX1VOQUJMRV9UT19SRVNPTFZFX0hUVFAsIHJlc1BhdGgpKTsJCSAgICAgIAkJCi0KLQkJICAgICAgCSAgIH0KLQkJICAgICAgCX0KLQkJICAgICAgCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCSAgICAgIAkJcmV0dXJuIGZhbHNlOwotCQkgICAgICAJfQotCSAgICAgICAgfQotCSAgICB9Ci0JCXNlcnZpY2VOYW1lXyA9ICIiOwkJCi0JCXJldHVybiB0cnVlOwotCX0KLQkKLQkvKioKLQkgKiBEZXRlcm1pbmVzIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGRlZmluZWQgaW4gdGhlIFdTREwgZmlsZQotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZSBUaGUgd29ya3NwYWNlIHJlc291cmNlIGZvciB0aGUgV1NETCBmaWxlCi0JICogQHJldHVybiBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZhbHVlIG9mIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgc2VydmljZSBlbGVtZW50IAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZU5hbWUoKQotCXsKLQkJaWYgKHNlcnZpY2VOYW1lXy5lcXVhbHMoIiIpKQotCQl7Ci0JCQlpZiAoZGVmaW5pdGlvbl8gIT0gbnVsbCkKLQkJCXsKLQkJCQkgICBNYXAgc2VydmljZXNNYXAgPSBkZWZpbml0aW9uXy5nZXRTZXJ2aWNlcygpOyAgLy9qdmggLSBuZWVkIHRvIGhhbmRsZSBudWxsIGRlZmluaXRpb24gaGVyZS4uLi4KLQkJCSAgCSAgIE9iamVjdFtdIHNlcnZpY2VzID0gc2VydmljZXNNYXAudmFsdWVzKCkudG9BcnJheSgpOwotCQkJICAJICAgCi0JCQkgIAkgICAvLyBUT0RPOiBoZXJlIGNhbiBkZXRlY3QgaWYgbm8gc2VydmljZSB0YWcgLSBzZW5kIGFwcHJvcHJpYXRlIG1lc3NhZ2UKLQkJCSAgCSAgIC8vIFRPRE86IHdoYXQgaWYgPiAxIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETD8KLQkJCSAgCSAgIC8vIGZvciBub3cgcmV0dXJuIHRoZSBmaXJzdCBzZXJ2aWNlIG5hbWUgZm91bmQuLi4KLQkJCSAgCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJICAgU2VydmljZSBzID0gKFNlcnZpY2Upc2VydmljZXNbaV07Ci0JCQkJCSAgIFN0cmluZyBxU3RyaW5nID0gcy5nZXRRTmFtZSgpLnRvU3RyaW5nKCk7Ci0JCQkJCSAgIAotCQkJCQkgICAvL2dldCBuYW1lIG9ubHkgZnJvbSBxdWFsaWZpZWQgc3RyaW5nCi0JCQkJCSAgIGludCBpbmRleDEgPSBxU3RyaW5nLmluZGV4T2YoIn0iKSsxOyAgLy8kTk9OLU5MUy0xJAotCQkJCQkgICBpbnQgaW5kZXgyID0gcVN0cmluZy5sZW5ndGgoKTsKLQkJCQkJICAgCi0JCQkJCSAgIHNlcnZpY2VOYW1lXyA9IHFTdHJpbmcuc3Vic3RyaW5nKGluZGV4MSwgaW5kZXgyKTsJCQkJICAgCi0JCQkgIAkgICB9ICAJCi0JCQl9CQkJCSAgCi0JCX0KLQkgIAlyZXR1cm4gc2VydmljZU5hbWVfOwotCX0KLQkKLQlwdWJsaWMgVVJMIGdldFdTRExBZGRyZXNzKCkgCi0gICAgewotCSAgIGlmICh1cmxfID09IG51bGwpCi0JICAgewkgICAKLQkgICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gbnVsbDsKLQkgICAgICAgaWYgKGRlZmluaXRpb25fICE9IG51bGwpCi0JICAgICAgIHsKLQkgICAgCSAgIE1hcCBzZXJ2aWNlc01hcCA9IGRlZmluaXRpb25fLmdldFNlcnZpY2VzKCk7Ci0JCSAgCSAgIE9iamVjdFtdIHNlcnZpY2VzID0gc2VydmljZXNNYXAudmFsdWVzKCkudG9BcnJheSgpOwotCQkgIAkgICAKLQkJICAJICAgLy8gVE9ETzogaGVyZSBjYW4gZGV0ZWN0IGlmIG5vIHNlcnZpY2UgdGFnIC0gc2VuZCBhcHByb3ByaWF0ZSBtZXNzYWdlCi0JCSAgCSAgIC8vIFRPRE86IHdoYXQgaWYgPiAxIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETD8KLQkJICAJICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykgewotCQkJCSAgIFNlcnZpY2UgcyA9IChTZXJ2aWNlKXNlcnZpY2VzW2ldOwotCQkJCSAgIE1hcCBwb3J0c01hcCA9IHMuZ2V0UG9ydHMoKTsKLQkJCQkgICBPYmplY3RbXSBwb3J0cyA9IHBvcnRzTWFwLnZhbHVlcygpLnRvQXJyYXkoKTsKLQkJCi0JCQkJICAgLy8gVE9ETzogaGVyZSBjYW4gZGV0ZWN0IGlmID4gMSBwb3J0IGZvciB0aGUgc2VydmljZSAtIGRldGVybWluZSBob3cgdG8gaGFuZGxlCi0JCQkJICAgZm9yIChpbnQgaiA9IDA7IGogPCBwb3J0cy5sZW5ndGg7IGorKykgewotCQkJCQkJUG9ydCBwID0gKFBvcnQpcG9ydHNbal07Ci0JCQkJCQlMaXN0IGV4dExpc3QgPSBwLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCQkJCQkJCi0JCQkJCQlmb3IgKGludCBrID0gMDsgaiA8IGV4dExpc3Quc2l6ZSgpOyBqKyspewotCQkJCQkJICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRMaXN0LmdldChrKTsKLQkJCQkJCSAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0JCQkJCQkgICAgICB7ICAKLQkJCQkJCSAgICAgICAgbG9jYXRpb25VUkkgPSAoKFNPQVBBZGRyZXNzKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uVVJJKCk7Ci0JCQkJCQkgICAgICB9Ci0JCQkJCQkgICAgICBlbHNlIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0JCQkJCQkgICAgICAgewotCQkJCQkJICAgICAgICBsb2NhdGlvblVSSSA9ICgoSFRUUEFkZHJlc3MpZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsJCQkJCQkgICAgICAgIAotCQkJCQkJICAgICAgfQotCQkJCQkJICAgICAgZWxzZQotCQkJCQkJICAgICAgewotCQkJCQkJICAgIAkgIC8vVE9ETzogaWYgbm90IFNPQVAgb3IgSFRUUCAtIGhvdyBkbyB3ZSB3YW50IHRvIGhhbmRsZSBpdC4uLiAKLQkJCQkJCSAgICAgIH0KLQkJCQkJCSB9CQkJCQkKLQkJCQkgICB9Ci0JCSAgCSAgIH0gIAkJICAgIAkKLQkJICAJIAotCQkJICAgIHRyeSB7Ci0JCQkgICAgICAgICB1cmxfID0gbmV3IFVSTChsb2NhdGlvblVSSSArICI/IiArIHJlc291cmNlXy5nZXRGaWxlRXh0ZW5zaW9uKCkpOwkgICAgICAgICAKLQkJCSAgICB9Ci0JCQkgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtYWxFeGMpe30KLSAgICAgICAgICAgIH0JICAJCSAgICAgIAotCSAgICB9Ci0JICAgcmV0dXJuIHVybF87Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhL0xhYmVsc0FuZElkcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhL0xhYmVsc0FuZElkcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODI4ZDY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGE7Ci0KLXB1YmxpYyBjbGFzcyBMYWJlbHNBbmRJZHMKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBsYWJlbHNfOwotICBwcml2YXRlIFN0cmluZ1tdIGlkc187Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpZHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldElkc18oKQotICB7Ci0gICAgcmV0dXJuIGlkc187Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBpZHNfIFRoZSBpZHNfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkc18oU3RyaW5nW10gaWRzXykKLSAgewotICAgIHRoaXMuaWRzXyA9IGlkc187Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgbGFiZWxzXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRMYWJlbHNfKCkKLSAgewotICAgIHJldHVybiBsYWJlbHNfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbGFiZWxzXyBUaGUgbGFiZWxzXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMYWJlbHNfKFN0cmluZ1tdIGxhYmVsc18pCi0gIHsKLSAgICB0aGlzLmxhYmVsc18gPSBsYWJlbHNfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0Nvbm5lY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljQ29ubmVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGYxMmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljQ29ubmVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotcHVibGljIGNsYXNzIEJhc2ljQ29ubmVjdGlvbiBpbXBsZW1lbnRzIENvbm5lY3Rpb24KLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIFJlbCBmUmVsOwotICBwcml2YXRlIEVsZW1lbnQgZkVsZW1lbnQ7Ci0gIHByaXZhdGUgQ29ubmVjdGlvbiBmT3Bwb3NpbmdDb25uZWN0aW9uOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9VVEJPVU5EID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5CT1VORCA9IDE7Ci0KLSAgcHVibGljIHN0YXRpYyBDb25uZWN0aW9uW10gY3JlYXRlUGFpciAoIFJlbCBvdXRib3VuZFJlbCwgRWxlbWVudCB0YXJnZXRFbGVtZW50LCBSZWwgaW5ib3VuZFJlbCwgRWxlbWVudCBzb3VyY2VFbGVtZW50ICkKLSAgewotICAgIEJhc2ljQ29ubmVjdGlvbiBvdXRib3VuZENvbm5lY3Rpb24gPSBuZXcgQmFzaWNDb25uZWN0aW9uKG91dGJvdW5kUmVsLHRhcmdldEVsZW1lbnQpOwotICAgIEJhc2ljQ29ubmVjdGlvbiBpbmJvdW5kQ29ubmVjdGlvbiA9IG5ldyBCYXNpY0Nvbm5lY3Rpb24oaW5ib3VuZFJlbCxzb3VyY2VFbGVtZW50KTsKLSAgICBvdXRib3VuZENvbm5lY3Rpb24uZk9wcG9zaW5nQ29ubmVjdGlvbiA9IGluYm91bmRDb25uZWN0aW9uOwotICAgIGluYm91bmRDb25uZWN0aW9uLmZPcHBvc2luZ0Nvbm5lY3Rpb24gPSBvdXRib3VuZENvbm5lY3Rpb247Ci0gICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uW10ge291dGJvdW5kQ29ubmVjdGlvbixpbmJvdW5kQ29ubmVjdGlvbn07Ci0gIH0KLQotICBwdWJsaWMgQmFzaWNDb25uZWN0aW9uICggUmVsIHJlbCwgRWxlbWVudCBlbGVtZW50ICkKLSAgewotICAgIGZSZWwgPSByZWw7Ci0gICAgZkVsZW1lbnQgPSBlbGVtZW50OwotICAgIGZPcHBvc2luZ0Nvbm5lY3Rpb24gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFJlbCBnZXRSZWwgKCkKLSAgewotICAgIHJldHVybiBmUmVsOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0T3Bwb3NpbmdDb25uZWN0aW9uICgpCi0gIHsKLSAgICByZXR1cm4gZk9wcG9zaW5nQ29ubmVjdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkKLSAgewotICAgIHJldHVybiBmRWxlbWVudC5nZXROYW1lKCk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkZmI4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIEJhc2ljRWxlbWVudCBpbXBsZW1lbnRzIEVsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIFN0cmluZyBmTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgZk1VSUQ7Ci0gIHByaXZhdGUgTW9kZWwgZk1vZGVsOwotICBwcml2YXRlIEhhc2h0YWJsZSBmUmVsczsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZlByb3BlcnRpZXM7Ci0gIHByaXZhdGUgVmVjdG9yIGZMaXN0ZW5lcnM7Ci0KLSAgcHVibGljIEJhc2ljRWxlbWVudCAoIFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gICAgc2V0TVVJRChtb2RlbC5tYWtlTVVJRChuYW1lKSk7Ci0gICAgbW9kZWwuYWRkRWxlbWVudCh0aGlzKTsKLSAgICBmTW9kZWwgPSBtb2RlbDsKLSAgICBmUmVscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmTGlzdGVuZXJzID0gbmV3IFZlY3RvcigpOwotICAgIGZQcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZQcm9wZXJ0aWVzLnB1dChQcm9wZXJ0eS5OQU1FLG5ldyBCYXNpY1Byb3BlcnR5KFByb3BlcnR5Lk5BTUUsZk5hbWUpKTsKLSAgfQotCi0gIHB1YmxpYyBCYXNpY0VsZW1lbnQgKCBTdHJpbmcgbmFtZSwgRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lLCBTdHJpbmcgaW5ib3VuZFJlbE5hbWUgKQotICB7Ci0gICAgdGhpcyhuYW1lLGVsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgY29ubmVjdChlbGVtZW50LG91dGJvdW5kUmVsTmFtZSxpbmJvdW5kUmVsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgY2xvbmUgb2YgdGhpcyA8Y29kZT5FbGVtZW50PC9jb2RlPgotICAqIG9mIHRoZSBzYW1lIGNsYXNzIGFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kIG1vZGVsLAotICAqIGJ1dCB3aXRoIG5vIFByb3BlcnRpZXMsIFJlbHMgb3IgTGlzdGVuZXJzIGV4Y2VwdCBmb3IKLSAgKiB0aGUge0BsaW5rIFByb3BlcnR5I05BTUUgTkFNRX0gcHJvcGVydHkuCi0gICogQHJldHVybiBPYmplY3QgQSBuZXcgRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEVsZW1lbnQgc2hhbGxvd0Nsb25lICgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJhc2ljRWxlbWVudChmTmFtZSxmTW9kZWwpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgPGNvZGU+RWxlbWVudDwvY29kZT4KLSAgKiBvZiB0aGUgc2FtZSBjbGFzcyBhbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBtb2RlbAotICAqIGFuZCB3aXRoIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgRWxlbWVudCdzIFByb3BlcnRpZXMuCi0gICogVGhlIFJlbHMgYW5kIExpc3RlbmVycyBhcmUgbm90IGNsb25lZC4KLSAgKiBAcmV0dXJuIEVsZW1lbnQgQSBuZXcgRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIGZpbmFsIEVsZW1lbnQgZGVlcENsb25lICgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBzaGFsbG93Q2xvbmUoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0UHJvcGVydGllcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFByb3BlcnR5IHByb3BlcnR5ID0gKFByb3BlcnR5KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFByb3BlcnR5IG5ld1Byb3BlcnR5ID0gKFByb3BlcnR5KXByb3BlcnR5LnNoYWxsb3dDbG9uZSgpOwotICAgICAgbmV3RWxlbWVudC5zZXRQcm9wZXJ0eShuZXdQcm9wZXJ0eSk7Ci0gICAgfQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICogTW9kZWwtVmlldy1Db250cm9sbGVyOiBBbGwgcHJvcGVydHkgY2hhbmdlcyB0byB0aGUgbW9kZWwKLSAgKiAoc3VjaCBhcyB0aG9zZSBtYWRlIGJ5IGEgd2l6YXJkIGluIHRoZSByb2xlIG9mIGEgQ29udHJvbGxlcikKLSAgKiBzaG91bGQgeWllbGQgZXZlbnRzIHRvIHdoaWNoIGFuIGludGVyZXN0ZWQgcGFydHkgY2FuIGxpc3RlbgotICAqIChzdWNoIGFzIGEgd2l6YXJkIGluIHRoZSByb2xlIG9mIGEgVmlld2VyKS4KLSAgKiBAcGFyYW0gdG1sIFRoZSBsaXN0ZW5lciB0byBhZGQuCi0gICovCi0gIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyICggRWxlbWVudExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIGZMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKLSAgfQotCi0gIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCAoKQotICB7Ci0gICAgcmV0dXJuIGZNb2RlbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWQgKCkKLSAgewotICAgIHJldHVybiAoZk1vZGVsICE9IG51bGwgJiYgZk1vZGVsLmNvbnRhaW5zRWxlbWVudCh0aGlzKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmUgKCkKLSAgewotICAgIHJldHVybiBmTW9kZWwucmVtb3ZlRWxlbWVudCh0aGlzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gICAgZlByb3BlcnRpZXMucHV0KFByb3BlcnR5Lk5BTUUsbmV3IEJhc2ljUHJvcGVydHkoUHJvcGVydHkuTkFNRSxmTmFtZSkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gZk5hbWU7Ci0gIH0KLQotICAvKgotICAqIFRoZSBnZXR0ZXIgZm9yIHRoZSBNVUlECi0gICogVGhlIE1VSUQgaXMgdGhlIE1vZGVsIFVuaXF1ZSBJZGVudGlmaWVyLCBtYWRlIGZyb20gdGhlIG5hbWUgYW5kIGFuCi0gICogYXBwZW5kZWQgdW5pcXVlIG51bWJlciAKLSAgKiBAcmV0dXJuIFN0cmluZyBhIHVuaXF1ZSBpZCBmb3IgdGhpcyBlbGVtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbW9kZWwgCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TVVJRCgpCi0gIHsKLSAgICByZXR1cm4gZk1VSUQ7Ci0gIH0KLQotICAvKgotICAqCi0gICoKLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJJRCgpCi0gIHsKLSAgICBTdHJpbmcgbnVtYmVyID0gZ2V0TVVJRCgpLnN1YnN0cmluZyhnZXROYW1lKCkubGVuZ3RoKCkpOyAgCi0gICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQobnVtYmVyKTsKLSAgfQotCi0gIC8qCi0gICogU2V0IHRoZSBNVUlEIHdoaWNoIHdhcyBtYWRlIGJ5IHRoZSBtb2RlbAotICAqIFNob3VsZCBvbmx5IGJlIHNldHRhYmxlIHdpdGhpbiB0aGlzIGVsZW1lbnQKLSAgKiBTZXQgb25jZSB1cG9uIGNyZWF0aW9uLCB5b3UgY2FuIGNoYW5nZSB0aGUgbmFtZQotICAqIGJ1dCB0aGUgaWQgd2lsbCByZW1haW4gY29uc3RhbnQuCi0gICovCi0gIHByaXZhdGUgdm9pZCBzZXRNVUlEKFN0cmluZyBNVUlEKQotICB7Ci0gICAgZk1VSUQgPSBNVUlEOwotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5ICggUHJvcGVydHkgcHJvcGVydHkgKQotICB7Ci0gICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LmdldE5hbWUoKTsKLSAgICBQcm9wZXJ0eSBvbGRQcm9wZXJ0eSA9IGdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci0gICAgZlByb3BlcnRpZXMucHV0KHByb3BlcnR5TmFtZSxwcm9wZXJ0eSk7Ci0gICAgaWYgKG9sZFByb3BlcnR5ID09IG51bGwpCi0gICAgewotICAgICAgUHJvcGVydHlBZGRFdmVudCBldmVudCA9IG5ldyBQcm9wZXJ0eUFkZEV2ZW50KHRoaXMscHJvcGVydHkpOwotICAgICAgRW51bWVyYXRpb24gZSA9IGZMaXN0ZW5lcnMuZWxlbWVudHMoKTsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICAoKEVsZW1lbnRMaXN0ZW5lcillLm5leHRFbGVtZW50KCkpLnByb3BlcnR5QWRkZWQoZXZlbnQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgT2JqZWN0IG9sZFZhbHVlID0gb2xkUHJvcGVydHkuZ2V0VmFsdWUoKTsKLSAgICAgIE9iamVjdCBuZXdWYWx1ZSA9IHByb3BlcnR5LmdldFZhbHVlKCk7Ci0gICAgICBpZiAob2xkVmFsdWUgIT0gbmV3VmFsdWUpCi0gICAgICB7Ci0gICAgICAgIGlmIChvbGRWYWx1ZSA9PSBudWxsIHx8IG5ld1ZhbHVlID09IG51bGwgfHwgKCFvbGRWYWx1ZS5lcXVhbHMobmV3VmFsdWUpKSkKLSAgICAgICAgewotICAgICAgICAgIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQgPSBuZXcgUHJvcGVydHlDaGFuZ2VFdmVudCh0aGlzLHByb3BlcnR5LG9sZFByb3BlcnR5KTsKLSAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gZkxpc3RlbmVycy5lbGVtZW50cygpOwotICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICgoRWxlbWVudExpc3RlbmVyKWUubmV4dEVsZW1lbnQoKSkucHJvcGVydHlDaGFuZ2VkKGV2ZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHByb3BlcnR5TmFtZS5lcXVhbHMoUHJvcGVydHkuTkFNRSkpIGZOYW1lID0gcHJvcGVydHkuZ2V0VmFsdWUoKS50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlBc09iamVjdCAoIFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUgKQotICB7Ci0gICAgc2V0UHJvcGVydHkobmV3IEJhc2ljUHJvcGVydHkobmFtZSx2YWx1ZSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlBc1N0cmluZyAoIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgc2V0UHJvcGVydHkobmV3IEJhc2ljUHJvcGVydHkobmFtZSx2YWx1ZSkpOwotICB9Ci0KLSAgcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5ICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgcmV0dXJuIChQcm9wZXJ0eSlmUHJvcGVydGllcy5nZXQobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5QXNPYmplY3QgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9IGdldFByb3BlcnR5KG5hbWUpOwotICAgIHJldHVybiAocHJvcGVydHkgPT0gbnVsbCA/IG51bGwgOiBwcm9wZXJ0eS5nZXRWYWx1ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlBc1N0cmluZyAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIFByb3BlcnR5IHByb3BlcnR5ID0gZ2V0UHJvcGVydHkobmFtZSk7Ci0gICAgcmV0dXJuIChwcm9wZXJ0eSA9PSBudWxsID8gbnVsbCA6IHByb3BlcnR5LmdldFZhbHVlQXNTdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UHJvcGVydGllcyAoKQotICB7Ci0gICAgcmV0dXJuIGZQcm9wZXJ0aWVzLmVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBjb25uZWN0ICggRWxlbWVudCB0YXJnZXRFbGVtZW50LCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lLCBTdHJpbmcgaW5ib3VuZFJlbE5hbWUgKQotICB7Ci0gICAgaWYgKGZNb2RlbCA9PSBudWxsIHx8IGZNb2RlbCAhPSB0YXJnZXRFbGVtZW50LmdldE1vZGVsKCkpIHJldHVybiBmYWxzZTsKLQotICAgIEVsZW1lbnQgc291cmNlRWxlbWVudCA9IHRoaXM7Ci0gICAgUmVsIG91dGJvdW5kUmVsID0gc291cmNlRWxlbWVudC5nZXRSZWwob3V0Ym91bmRSZWxOYW1lKTsKLSAgICBSZWwgaW5ib3VuZFJlbCA9IHRhcmdldEVsZW1lbnQuZ2V0UmVsKGluYm91bmRSZWxOYW1lKTsKLSAgICBDb25uZWN0aW9uW10gcGFpciA9IEJhc2ljQ29ubmVjdGlvbi5jcmVhdGVQYWlyKG91dGJvdW5kUmVsLHRhcmdldEVsZW1lbnQsaW5ib3VuZFJlbCxzb3VyY2VFbGVtZW50KTsKLSAgICBvdXRib3VuZFJlbC5hZGRDb25uZWN0aW9uKHBhaXJbQmFzaWNDb25uZWN0aW9uLk9VVEJPVU5EXSk7Ci0gICAgaW5ib3VuZFJlbC5hZGRDb25uZWN0aW9uKHBhaXJbQmFzaWNDb25uZWN0aW9uLklOQk9VTkRdKTsKLSAgICBSZWxBZGRFdmVudCBldmVudCA9IG5ldyBSZWxBZGRFdmVudChwYWlyKTsKLSAgICBFbnVtZXJhdGlvbiBlU291cmNlID0gZ2V0TGlzdGVuZXJzKCk7Ci0gICAgRW51bWVyYXRpb24gZVRhcmdldCA9IHRhcmdldEVsZW1lbnQuZ2V0TGlzdGVuZXJzKCk7Ci0gICAgd2hpbGUgKGVTb3VyY2UuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgKChFbGVtZW50TGlzdGVuZXIpZVNvdXJjZS5uZXh0RWxlbWVudCgpKS5yZWxBZGRlZChldmVudCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKGVUYXJnZXQuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgKChFbGVtZW50TGlzdGVuZXIpZVRhcmdldC5uZXh0RWxlbWVudCgpKS5yZWxBZGRlZChldmVudCk7Ci0gICAgfQotCi0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3QgKCBFbGVtZW50IHRhcmdldEVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUgKQotICB7Ci0gICAgcmV0dXJuIGRpc2Nvbm5lY3QodGFyZ2V0RWxlbWVudCxnZXRSZWwob3V0Ym91bmRSZWxOYW1lKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0UmVsICggU3RyaW5nIG91dGJvdW5kUmVsTmFtZSApCi0gIHsKLSAgICByZXR1cm4gZGlzY29ubmVjdFJlbChnZXRSZWwob3V0Ym91bmRSZWxOYW1lKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0QWxsICgpCi0gIHsKLSAgICBpZiAoZk1vZGVsID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZlJlbHMuZWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBSZWwgcmVsID0gKFJlbCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBkaXNjb25uZWN0UmVsKHJlbCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEVsZW1lbnRzICggU3RyaW5nIHJlbE5hbWUgKQotICB7Ci0gICAgcmV0dXJuIGdldFJlbChyZWxOYW1lKS5nZXRUYXJnZXRFbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZkVsZW1lbnRzICggU3RyaW5nIHJlbE5hbWUgKQotICB7Ci0gICAgcmV0dXJuIGdldFJlbChyZWxOYW1lKS5nZXROdW1iZXJPZlRhcmdldEVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgUmVsIGdldFJlbCAoIFN0cmluZyByZWxOYW1lICkKLSAgewotICAgIFJlbCByZWwgPSAoUmVsKWZSZWxzLmdldChyZWxOYW1lKTsKLSAgICBpZiAocmVsID09IG51bGwpCi0gICAgewotICAgICAgcmVsID0gbmV3IEJhc2ljUmVsKHJlbE5hbWUsdGhpcyk7Ci0gICAgICBmUmVscy5wdXQocmVsTmFtZSxyZWwpOwotICAgIH0KLSAgICByZXR1cm4gcmVsOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFJlbHMgKCkKLSAgewotICAgIHJldHVybiBmUmVscy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldExpc3RlbmVycygpCi0gIHsKLSAgICByZXR1cm4gZkxpc3RlbmVycy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZGlzY29ubmVjdCAoIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCwgUmVsIG91dGJvdW5kUmVsICkKLSAgewotICAgIGlmIChmTW9kZWwgPT0gbnVsbCB8fCBmTW9kZWwgIT0gdGFyZ2V0RWxlbWVudC5nZXRNb2RlbCgpIHx8IG91dGJvdW5kUmVsID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBDb25uZWN0aW9uIG91dGJvdW5kQ29ubmVjdGlvbiA9IG91dGJvdW5kUmVsLmdldENvbm5lY3Rpb25Ubyh0YXJnZXRFbGVtZW50KTsKLSAgICBpZiAob3V0Ym91bmRDb25uZWN0aW9uID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBDb25uZWN0aW9uIGluYm91bmRDb25uZWN0aW9uID0gb3V0Ym91bmRDb25uZWN0aW9uLmdldE9wcG9zaW5nQ29ubmVjdGlvbigpOwotICAgIFJlbFJlbW92ZUV2ZW50IGV2ZW50ID0gbmV3IFJlbFJlbW92ZUV2ZW50KG5ldyBDb25uZWN0aW9uIFtdIHtvdXRib3VuZENvbm5lY3Rpb24saW5ib3VuZENvbm5lY3Rpb259KTsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSBmTGlzdGVuZXJzLmVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgKChFbGVtZW50TGlzdGVuZXIpZS5uZXh0RWxlbWVudCgpKS5yZWxSZW1vdmVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgIEVudW1lcmF0aW9uIGVUYXJnZXQgPSB0YXJnZXRFbGVtZW50LmdldExpc3RlbmVycygpOwotICAgIHdoaWxlIChlVGFyZ2V0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgICgoRWxlbWVudExpc3RlbmVyKWVUYXJnZXQubmV4dEVsZW1lbnQoKSkucmVsUmVtb3ZlZChldmVudCk7Ci0gICAgfQotCi0gICAgUmVsIGluYm91bmRSZWwgPSBpbmJvdW5kQ29ubmVjdGlvbi5nZXRSZWwoKTsKLSAgICBib29sZWFuIGRvbmUgPSBvdXRib3VuZFJlbC5yZW1vdmVDb25uZWN0aW9uKG91dGJvdW5kQ29ubmVjdGlvbik7Ci0gICAgaW5ib3VuZFJlbC5yZW1vdmVDb25uZWN0aW9uKGluYm91bmRDb25uZWN0aW9uKTsKLSAgICByZXR1cm4gZG9uZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGRpc2Nvbm5lY3RSZWwgKCBSZWwgb3V0Ym91bmRSZWwgKQotICB7Ci0gICAgaWYgKGZNb2RlbCA9PSBudWxsIHx8IG91dGJvdW5kUmVsID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBFbGVtZW50W10gZWxlbWVudHMgPSBuZXcgRWxlbWVudFtvdXRib3VuZFJlbC5nZXROdW1iZXJPZlRhcmdldEVsZW1lbnRzKCldOwotICAgIGludCBpID0gMDsKLSAgICBFbnVtZXJhdGlvbiBlID0gb3V0Ym91bmRSZWwuZ2V0VGFyZ2V0RWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBlbGVtZW50c1tpKytdID0gKEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgIH0KLSAgICB3aGlsZSAoaS0tID4gMCkKLSAgICB7Ci0gICAgICBkaXNjb25uZWN0KGVsZW1lbnRzW2ldLG91dGJvdW5kUmVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljTW9kZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljTW9kZWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JkMjA2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY01vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBCYXNpY01vZGVsIGltcGxlbWVudHMgTW9kZWwKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIFN0cmluZyBmTmFtZTsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZkVsZW1lbnRzOwotICBwcml2YXRlIEVsZW1lbnQgZlJvb3Q7Ci0gIC8vVGhpcyBpcyB1c2VkIGJ5IHRoZSBNVUlECi0gIHByaXZhdGUgaW50IGZVbmlxdWVOdW1iZXJDb3VudGVyOwotCi0gIHB1YmxpYyBCYXNpY01vZGVsICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgZk5hbWUgPSBuYW1lOwotICAgIGZFbGVtZW50cyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmUm9vdCA9IG51bGw7Ci0gICAgZlVuaXF1ZU51bWJlckNvdW50ZXIgPSAwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZSAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIGZOYW1lOwotICB9Ci0KLQotICAvKgotICAqIHNpbXBsZSBjb3VudGVyIHRoYXQgaW5jcmVtZW50cyBlYWNoIGNhbGwgCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0VW5pcXVlTnVtYmVyKCkKLSAgewotICAgIGZVbmlxdWVOdW1iZXJDb3VudGVyKys7Ci0gICAgcmV0dXJuIGZVbmlxdWVOdW1iZXJDb3VudGVyOwotICB9Ci0KLSAgLyoKLSAgKiBUaGlzIHdpbGwgdXNlIGEgdW5pcXVlIG51bWJlciBhbmQgYXBwZW5kIGl0IHRvIHRoZSBlbmQgb2YgdGhlIG5hbWUgCi0gICogQHBhcmFtIFN0cmluZyBuYW1lIG9mIHRoZSBlbGVtZW50Ci0gICogQHJldHVybiBTdHJpbmcgTVVJRAotICAqLwotICBwdWJsaWMgU3RyaW5nIG1ha2VNVUlEKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIG51bSA9IFN0cmluZy52YWx1ZU9mKGdldFVuaXF1ZU51bWJlcigpKTsKLSAgICBTdHJpbmcgbXVpZCA9IG5hbWUgKyBudW07Ci0gICAgcmV0dXJuIG11aWQ7Ci0gIH0KLQotCi0gIHB1YmxpYyBib29sZWFuIHNldFJvb3RFbGVtZW50ICggRWxlbWVudCByb290ICkKLSAgewotICAgIGlmIChyb290LmdldE1vZGVsKCkgPT0gbnVsbCkKLSAgICAgIGFkZEVsZW1lbnQocm9vdCk7Ci0gICAgZWxzZSBpZiAocm9vdC5nZXRNb2RlbCgpICE9IHRoaXMpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZlJvb3QgPSByb290OwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgZ2V0Um9vdEVsZW1lbnQgKCkKLSAgewotICAgIGlmIChmUm9vdCA9PSBudWxsKSBmUm9vdCA9IGdldEZpcnN0RWxlbWVudCgpOwotICAgIHJldHVybiBmUm9vdDsKLSAgfQotCi0KLSAgLyoqCi0gICogR2V0IHRoZSBlbGVtZW50cyB0aGF0IGhhdmUgdGhpcyBuYW1lCi0gICogQHBhcmFtIFN0cmluZyBuYW1lIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IAotICAqIEByZXR1cm4gVmVjdG9yIGEgdmVjdG9yIG9mIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGlzIG5hbWUKLSAgKiBUaGVzZSBlbGVtZW50cyBtYXkgYmUgb2YgZGlmZmVyZW50IHR5cGVzCi0gICoqLwotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0RWxlbWVudHNCeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBWZWN0b3IgdmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmRWxlbWVudHMua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKXsKLSAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgdmVjdG9yLmFkZEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiB2ZWN0b3I7Ci0gIH0KLQotIAotCi0gIHB1YmxpYyBib29sZWFuIGFkZEVsZW1lbnQgKCBFbGVtZW50IGVsZW1lbnQgKQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TW9kZWwoKSAhPSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgZkVsZW1lbnRzLnB1dChlbGVtZW50LGVsZW1lbnQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRWxlbWVudCAoIEVsZW1lbnQgZWxlbWVudCApCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXRNb2RlbCgpICE9IHRoaXMpIHJldHVybiBmYWxzZTsKLSAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICBpZiAoZlJvb3QgPT0gZWxlbWVudCkgZlJvb3QgPSBudWxsOwotICAgIHJldHVybiAoZkVsZW1lbnRzLnJlbW92ZShlbGVtZW50KSA9PSBlbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50cy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZkVsZW1lbnRzICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnRzLnNpemUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zRWxlbWVudCAoIEVsZW1lbnQgZWxlbWVudCApCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnRzLmNvbnRhaW5zKGVsZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGdldEZpcnN0RWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKCk7Ci0gICAgcmV0dXJuIChlLmhhc01vcmVFbGVtZW50cygpID8gKEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE0YzNkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY1Byb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1wdWJsaWMgY2xhc3MgQmFzaWNQcm9wZXJ0eSBpbXBsZW1lbnRzIFByb3BlcnR5Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZk5hbWU7Ci0gIHByaXZhdGUgT2JqZWN0IGZWYWx1ZTsKLQotICBwdWJsaWMgQmFzaWNQcm9wZXJ0eSAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBCYXNpY1Byb3BlcnR5ICggU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gICAgZlZhbHVlID0gdmFsdWU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGlzIDxjb2RlPlByb3BlcnR5PC9jb2RlPi4KLSAgKiBQcm9wZXJ0eSBrZXkgYW5kIHZhbHVlIHJlZmVyZW5jZXMgYXJlIGNsb25lZCwKLSAgKiBidXQgdGhlIHZhbHVlIG9iamVjdHMgdGhlbXNlbHZlcyBhcmUgbm90IGNsb25lZC4KLSAgKiBAcmV0dXJuIFByb3BlcnR5IEEgbmV3IFByb3BlcnR5LgotICAqLwotICBwdWJsaWMgUHJvcGVydHkgc2hhbGxvd0Nsb25lICgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJhc2ljUHJvcGVydHkoZk5hbWUsZlZhbHVlKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIGZOYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmFsdWUgKCBPYmplY3QgdmFsdWUgKQotICB7Ci0gICAgZlZhbHVlID0gdmFsdWU7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldFZhbHVlICgpCi0gIHsKLSAgICByZXR1cm4gZlZhbHVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmFsdWVBc1N0cmluZyAoIFN0cmluZyB2YWx1ZSApCi0gIHsKLSAgICBmVmFsdWUgPSB2YWx1ZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVBc1N0cmluZyAoKQotICB7Ci0gICAgcmV0dXJuIChmVmFsdWUgIT0gbnVsbCA/IGZWYWx1ZS50b1N0cmluZygpIDogbnVsbCk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNSZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUmVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNWYwODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNSZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBCYXNpY1JlbCBpbXBsZW1lbnRzIFJlbAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZOYW1lOwotICBwcml2YXRlIEVsZW1lbnQgZlNvdXJjZUVsZW1lbnQ7Ci0gIHByaXZhdGUgVmVjdG9yIGZDb25uZWN0aW9uczsKLQotICBwdWJsaWMgQmFzaWNSZWwgKCBTdHJpbmcgbmFtZSwgRWxlbWVudCBzb3VyY2VFbGVtZW50ICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgICBmU291cmNlRWxlbWVudCA9IHNvdXJjZUVsZW1lbnQ7Ci0gICAgZkNvbm5lY3Rpb25zID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gZk5hbWU7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBnZXRTb3VyY2VFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZlNvdXJjZUVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0VGFyZ2V0RWxlbWVudHMgKCkKLSAgewotICAgIHJldHVybiBuZXcgRWxlbWVudEVudW1lcmF0aW9uKGZDb25uZWN0aW9ucy5lbGVtZW50cygpKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZUYXJnZXRFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIGZDb25uZWN0aW9ucy5zaXplKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uICggQ29ubmVjdGlvbiBjb25uZWN0aW9uICkKLSAgewotICAgIGZDb25uZWN0aW9ucy5hZGRFbGVtZW50KGNvbm5lY3Rpb24pOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ29ubmVjdGlvbiAoIENvbm5lY3Rpb24gY29ubmVjdGlvbiApCi0gIHsKLSAgICByZXR1cm4gZkNvbm5lY3Rpb25zLnJlbW92ZUVsZW1lbnQoY29ubmVjdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uVG8gKCBFbGVtZW50IHRhcmdldEVsZW1lbnQgKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGZDb25uZWN0aW9ucy5lbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIENvbm5lY3Rpb24gYyA9IChDb25uZWN0aW9uKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChjLmdldEVsZW1lbnQoKSA9PSB0YXJnZXRFbGVtZW50KSByZXR1cm4gYzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBFbGVtZW50RW51bWVyYXRpb24gaW1wbGVtZW50cyBFbnVtZXJhdGlvbgotICB7Ci0gICAgcHJpdmF0ZSBFbnVtZXJhdGlvbiBmQ29ubmVjdGlvbkVudW1lcmF0aW9uOwotCi0gICAgcHVibGljIEVsZW1lbnRFbnVtZXJhdGlvbiAoIEVudW1lcmF0aW9uIGNvbm5lY3Rpb25FbnVtZXJhdGlvbiApCi0gICAgewotICAgICAgZkNvbm5lY3Rpb25FbnVtZXJhdGlvbiA9IGNvbm5lY3Rpb25FbnVtZXJhdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNNb3JlRWxlbWVudHMgKCkKLSAgICB7Ci0gICAgICByZXR1cm4gZkNvbm5lY3Rpb25FbnVtZXJhdGlvbi5oYXNNb3JlRWxlbWVudHMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IG5leHRFbGVtZW50ICgpCi0gICAgewotICAgICAgcmV0dXJuICgoQ29ubmVjdGlvbilmQ29ubmVjdGlvbkVudW1lcmF0aW9uLm5leHRFbGVtZW50KCkpLmdldEVsZW1lbnQoKTsKLSAgICB9Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQ29ubmVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQ29ubmVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2RjZjZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Nvbm5lY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyBmb3IgYSBjb25uZWN0aW9uIHRoYXQgdGllcyBhIFJlbCB0byBhIE5vZGUuCi0qIE5vcm1hbGx5IENvbm5lY3Rpb24gb2JqZWN0cyBhcmUgbWFudWZhY3R1cmVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUKLSogZGVyaXZlZCBjbGFzc2VzIG9mIHRoZSBNb2RlbCBmcmFtZXdvcmssIGFuZCBhcmUgbm90IG1hbmlwdWxhdGVkIGJ5Ci0qIHRoZSBjYWxsZXIgZGlyZWN0bHkuCi0qLwotcHVibGljIGludGVyZmFjZSBDb25uZWN0aW9uCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgUmVsIHRoYXQgb3ducyB0aGlzIGNvbm5lY3Rpb24uCi0gICogQHJldHVybiBSZWwgVGhlIFJlbCB0aGF0IG93bnMgdGhpcyBjb25uZWN0aW9uLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbCwgdGhhdCBpcywgYSBDb25uZWN0aW9uCi0gICogY2Fubm90IGV4aXN0IHdpdGhvdXQgYSBSZWwgdG8gb3duIGl0LgotICAqLwotICBwdWJsaWMgUmVsIGdldFJlbCAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBOb2RlIHRoYXQgdGhpcyBjb25uZWN0aW9uIHBvaW50cyB0by4KLSAgKiBAcmV0dXJuIE5vZGUgVGhlIE5vZGUgdGhpcyBjb25uZWN0aW9uIHBvaW50cyB0by4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwsIHRoYXQgaXMsIGEgQ29ubmVjdGlvbgotICAqIGNhbm5vdCBleGlzdCB3aXRob3V0IGEgTm9kZSB0byBwb2ludCB0by4KLSAgKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBvcHBvc2luZyBjb25uZWN0aW9uIHRvIHRoaXMgY29ubmVjdGlvbi4KLSAgKiBDb25uZWN0aW9uIG9iamVjdHMgYWx3YXlzIGV4aXN0IGluIHBhaXJzLCB0aGF0IGlzLAotICAqIGlmIG5vZGUgIlBhcmVudCIgaGFzIGEgcmVsYXRpb25zaGlwIG5hbWVkICJDaGlsZHJlbiIKLSAgKiBjb250YWluaW5nIGEgY29ubmVjdGlvbiB0byBub2RlICJDaGlsZCIsIHRoZW4gdGhlcmUKLSAgKiBtdXN0IGV4aXN0IGFuIG9wcG9zaW5nIGNvbm5lY3Rpb24gZnJvbSAiQ2hpbGQiIHRvCi0gICogIlBhcmVudCIgaW4gc29tZSByZWxhdGlvbnNoaXAgb2YgIkNoaWxkIiAoZm9yIGV4YW1wbGUsCi0gICogaW4gYSByZWxhdGlvbnNoaXAgY2FsbGVkICJQYXJlbnRzIikuCi0gICogQHJldHVybiBDb25uZWN0aW9uIFRoZSBvcHBvc2luZyBjb25uZWN0aW9uLgotICAqIEFzIGEgZ2VuZXJhbCBydWxlLCB0aGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgcmV0dXJuIG51bGwuCi0gICogSXQgbWF5IG9ubHkgcmV0dXJuIG51bGwgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGUgcGFpcgotICAqIG9mIGNvbm5lY3Rpb25zLgotICAqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRPcHBvc2luZ0Nvbm5lY3Rpb24gKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwNTdjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGFic3RyYWN0IGNsYXNzIGZvciBlbGVtZW50cyB0aGF0IGNhbiBiZSBtYW5hZ2VkIGJ5IGEgTW9kZWwuCi0qIEV2ZXJ5IGVsZW1lbnQgaGFzIGEgbmFtZSwgYSBzZXQgb2YgcHJvcGVydGllcywgYW5kIGEgc2V0IG9mIHJlbGF0aW9uc2hpcHMKLSogdG8gb3RoZXIgZWxlbWVudHMuCi0qLwotcHVibGljIGludGVyZmFjZSBFbGVtZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgPGNvZGU+RWxlbWVudDwvY29kZT4KLSAgKiBvZiB0aGUgc2FtZSBjbGFzcyBhbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBtb2RlbCwKLSAgKiBidXQgd2l0aCBubyBQcm9wZXJ0aWVzLCBSZWxzIG9yIExpc3RlbmVycyBleGNlcHQgZm9yCi0gICogdGhlIHtAbGluayBQcm9wZXJ0eSNOQU1FIE5BTUV9IHByb3BlcnR5LgotICAqIEByZXR1cm4gT2JqZWN0IEEgbmV3IEVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBFbGVtZW50IHNoYWxsb3dDbG9uZSAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGEgY2xvbmUgb2YgdGhpcyA8Y29kZT5FbGVtZW50PC9jb2RlPgotICAqIG9mIHRoZSBzYW1lIGNsYXNzIGFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kIG1vZGVsCi0gICogYW5kIHdpdGggYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBFbGVtZW50J3MgUHJvcGVydGllcy4KLSAgKiBUaGUgUmVscyBhbmQgTGlzdGVuZXJzIGFyZSBub3QgY2xvbmVkLgotICAqIEByZXR1cm4gRWxlbWVudCBBIG5ldyBFbGVtZW50LgotICAqLwotICBwdWJsaWMgRWxlbWVudCBkZWVwQ2xvbmUgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbW9kZWwgdGhpcyBlbGVtZW50IGJlbG9uZ3MgdG8sIG9yIG51bGwgaWYgdGhlIGVsZW1lbnQKLSAgKiBoYXMgbm90IGJlZW4gYWRkZWQgdG8gYSBtb2RlbC4gU2VlIGFsc28ge0BsaW5rICNpc1ZhbGlkIGlzVmFsaWQoKX0uCi0gICogQHJldHVybiBNb2RlbCBUaGUgbW9kZWwgdGhpcyBlbGVtZW50IGJlbG9uZ3MgdG8sIG9yIG51bGwgaWYgbm9uZS4KLSAgKi8KLSAgcHVibGljIE1vZGVsIGdldE1vZGVsICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGVsZW1lbnQgYmVsb25ncyB0byBhIG1vZGVsLgotICAqIFNlZSBhbHNvIHtAbGluayAjZ2V0TW9kZWwgZ2V0TW9kZWwoKX0uCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyBlbGVtZW50IGJlbG9uZ3MgdG8gYSBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCAoKTsKLQotICAvKioKLSAgKiBSZW1vdmVzIHRoaXMgZWxlbWVudCBmcm9tIHRoZSBtb2RlbCB0byB3aGljaCBpdCBjdXJyZW50bHkgYmVsb25ncy4KLSAgKiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCB7QGxpbmsgI2dldE1vZGVsIGdldE1vZGVsKCl9IHdpbGwgcmV0dXJuCi0gICogbnVsbCBhbmQge0BsaW5rICNpc1ZhbGlkIGlzVmFsaWQoKX0gd2lsbCByZXR1cm4gZmFsc2UuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGVsZW1lbnQgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20KLSAgKiBpdHMgbW9kZWwuIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgYmVsb25nCi0gICogdG8gYW55IG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiByZW1vdmUgKCk7Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQgYW5kIHVwZGF0ZXMgdGhlICJuYW1lIiBwcm9wZXJ0eS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHNldE5hbWUoKS4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUgKCBTdHJpbmcgbmFtZSApOwotCi0gIC8qKgotICAqCi0gICovCi0gIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyICggRWxlbWVudExpc3RlbmVyIGxpc3RlbmVyICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG5hbWUgb2YgdGhpcyBlbGVtZW50LgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLSAgLyoqCi0gICogQWRkcyBvciBzZXRzIGEgcHJvcGVydHkgb2YgdGhpcyBlbGVtZW50LgotICAqIFByb3BlcnRpZXMgc2V0IHVzaW5nIHRoaXMgbWV0aG9kIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgZWl0aGVyCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eSBnZXRQcm9wZXJ0eSgpfSBvcgotICAqIHtAbGluayAjZ2V0UHJvcGVydHlBc09iamVjdCBnZXRQcm9wZXJ0eUFzT2JqZWN0KCl9LgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQW55IHByZXZpb3VzIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSBpcyByZXBsYWNlZC4KLSAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIHNldC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHkgKCBQcm9wZXJ0eSBwcm9wZXJ0eSApOwotCi0gIC8qKgotICAqIEFkZHMgb3Igc2V0cyBhIHByb3BlcnR5IG9mIHRoaXMgZWxlbWVudC4KLSAgKiBQcm9wZXJ0aWVzIHNldCB1c2luZyB0aGlzIG1ldGhvZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIGVpdGhlcgotICAqIHtAbGluayAjZ2V0UHJvcGVydHkgZ2V0UHJvcGVydHkoKX0gb3IKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5QXNPYmplY3QgZ2V0UHJvcGVydHlBc09iamVjdCgpfS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHtAbGluayAjc2V0TmFtZSBzZXROYW1lKCl9LgotICAqIEFueSBwcmV2aW91cyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgcmVwbGFjZWQuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC4KLSAgKiBAcGFyYW0gdmFsdWUgVGhlIE9iamVjdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eUFzT2JqZWN0ICggU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSApOwotCi0gIC8qKgotICAqIEFkZHMgb3Igc2V0cyBhIFN0cmluZyBwcm9wZXJ0eSBvZiB0aGlzIGVsZW1lbnQuCi0gICogUHJvcGVydGllcyBzZXQgdXNpbmcgdGhpcyBtZXRob2QgY2FuIGJlIHJldHJpZXZlZCB1c2luZyBlaXRoZXIKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5IGdldFByb3BlcnR5KCl9LAotICAqIHtAbGluayAjZ2V0UHJvcGVydHlBc09iamVjdCBnZXRQcm9wZXJ0eUFzT2JqZWN0KCl9IG9yCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eUFzU3RyaW5nIGdldFByb3BlcnR5QXNTdHJpbmcoKX0uCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfS4KLSAgKiBBbnkgcHJldmlvdXMgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIHJlcGxhY2VkLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuCi0gICogQHBhcmFtIHZhbHVlIFRoZSBTdHJpbmcgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlBc1N0cmluZyAoIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGEgcHJvcGVydHkgb2YgdGhlIGdpdmVuIG5hbWUgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHVybi4KLSAgKiBAcmV0dXJuIFByb3BlcnR5IFRoZSBwcm9wZXJ0eSwgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgUHJvcGVydHkgZ2V0UHJvcGVydHkgKCBTdHJpbmcgbmFtZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIE9iamVjdCB2YWx1ZSBvZiBhIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBuYW1lIG9yIG51bGwKLSAgKiBpZiB0aGVyZSBpcyBub25lLgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHVybi4KLSAgKiBAcmV0dXJuIE9iamVjdCBUaGUgcHJvcGVydHkgdmFsdWUgYXMgYW4gT2JqZWN0LCBvciBudWxsIGlmIG5vbmUuCi0gICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHlBc09iamVjdCAoIFN0cmluZyBuYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgU3RyaW5nIHZhbHVlIG9mIGEgcHJvcGVydHkgb2YgdGhlIGdpdmVuIG5hbWUgb3IgbnVsbAotICAqIGlmIHRoZXJlIGlzIG5vbmUuCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfS4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0dXJuLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBwcm9wZXJ0eSB2YWx1ZSBhcyBhIFN0cmluZywgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5QXNTdHJpbmcgKCBTdHJpbmcgbmFtZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50LgotICAqIFRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgcHJvcGVydHkgdGhhdCBjYXJyaWVzIHRoZQotICAqIG5hbWUgb2YgdGhpcyBlbGVtZW50IChzZWUge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0pLgotICAqIEByZXR1cm4gRW51bWVyYXRpb24gQW4gZW51bWVyYXRpb24gb2YgYWxsIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50LgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UHJvcGVydGllcyAoKTsKLQotICAvKioKLSAgKiBDcmVhdGVzIGEgYmlkaXJlY3Rpb25hbCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGVsZW1lbnQgYW5kIGFub3RoZXIuCi0gICogQm90aCByZWxhdGlvbnNoaXBzIGFyZSBpZGVudGlmaWVkIGJ5IG5hbWVzLiBUaGUgbmFtZXMgb2YgYWxsIHRoZQotICAqIG91dGJvdW5kIHJlbGF0aW9uc2hpcHMgb2YgYSBlbGVtZW50IG11c3QgYmUgbXV0dWFsbHkgdW5pcXVlLgotICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNvbm5lY3QgdG8uCi0gICogQHBhcmFtIG91dGJvdW5kUmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwIHRvIGNvbnRhaW4gdGhlCi0gICogY29ubmVjdGlvbiB0byB0aGUgZWxlbWVudC4KLSAgKiBAcGFyYW0gaW5ib3VuZFJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCB0byBjb250YWluIHRoZQotICAqIGludmVyc2UgY29ubmVjdGlvbiBiYWNrIHRvIHRoaXMgZWxlbWVudC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBCb3RoIGVsZW1lbnRzIG11c3QgYmVsb25nIHRvIHRoZSBzYW1lIG1vZGVsLCBvdGhlciBmYWxzZSBpcyByZXR1cm5lZC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gY29ubmVjdCAoIEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG91dGJvdW5kUmVsTmFtZSwgU3RyaW5nIGluYm91bmRSZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogRGlzbWFudGxlcyB0aGUgY29ubmVjdGlvbiB0byBhbm90aGVyIGVsZW1lbnQgaW4gYSBnaXZlbiByZWxhdGlvbnNoaXAuCi0gICogVGhlIGludmVyc2UgY29ubmVjdGlvbiBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgZGlzbWFudGxlZC4KLSAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBkaXNjb25uZWN0IGZyb20uCi0gICogQHBhcmFtIG91dGJvdW5kUmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwIGNvbnRhaW5pbmcKLSAgKiB0aGUgY29ubmVjdGlvbiB0byB0aGUgZWxlbWVudC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBpcyByZW1vdmVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBCb3RoIGVsZW1lbnRzIG11c3QgYmVsb25nIHRvIHRoZSBzYW1lIG1vZGVsLCBvdGhlciBmYWxzZSBpcyByZXR1cm5lZC4KLSAgKiBJZiB0aGUgZWxlbWVudHMgYXJlIG5vdCBjb25uZWN0ZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gcmVsYXRpb25zaGlwLCB0aGVuCi0gICogZmFsc2UgaXMgcmV0dXJuZWQuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3QgKCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUgKTsKLQotICAvKioKLSAgKiBEaXNtYW50bGVzIHRoZSBjb25uZWN0aW9uIHRvIGFsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gcmVsYXRpb25zaGlwLgotICAqIFRoZSBpbnZlcnNlIGNvbm5lY3Rpb25zIGFyZSBhbHNvIGF1dG9tYXRpY2FsbHkgZGlzbWFudGxlZC4KLSAgKiBAcGFyYW0gb3V0Ym91bmRSZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgYWxsIGNvbm5lY3Rpb25zIGFyZSByZW1vdmVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGJlbG9uZyB0byBhIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0UmVsICggU3RyaW5nIG91dGJvdW5kUmVsTmFtZSApOwotCi0gIC8qKgotICAqIERpc21hbnRsZXMgYWxsIGNvbm5lY3Rpb25zIGZyb20gdGhpcyBlbGVtZW50LgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGFsbCBjb25uZWN0aW9ucyBhcmUgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuCi0gICogVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBiZWxvbmcgdG8gYSBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZGlzY29ubmVjdEFsbCAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIGFsbCBlbGVtZW50cwotICAqIGNvbm5lY3RlZCB0aHJ1IHRoZSBnaXZlbiByZWxhdGlvbnNoaXAuCi0gICogQHBhcmFtIHJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcC4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIFRoZSBlbGVtZW50cyBpbiB0aGUgcmVsYXRpb25zaGlwLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEVsZW1lbnRzICggU3RyaW5nIHJlbE5hbWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGdpdmVuIHJlbGF0aW9uc2hpcC4KLSAgKiBAcGFyYW0gcmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuCi0gICovCi0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldExpc3RlbmVycygpOwotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZFbGVtZW50cyAoIFN0cmluZyByZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgcmVsYXRpb25zaGlwIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZS4KLSAgKiBAcGFyYW0gcmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gaW50IFRoZSByZWxhdGlvbnNoaXAuIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKiBJbiBvdGhlciB3b3JkcywgYW55IHJlZmVyZW5jZSB0byBhIHJlbGF0aW9uc2hpcCBuYW1lIGF1dG9tYXRpY2FsbHkKLSAgKiBicmluZ3MgYSBjb3JyZXNwb25kaW5nIFJlbCBvYmplY3QgaW50byBleGlzdGVuY2UuIENhcmVsZXNzIG5hbWluZwotICAqIG1heSByZXN1bHQgaW4gdGhlIHtAbGluayAjZ2V0UmVscyBnZXRSZWxzKCl9IG1ldGhvZCByZXR1cm5pbmcgYW4gZW51bWVyYXRpb24gb2YKLSAgKiBtb3JlIHJlbGF0aW9uc2hpcHMgdGhhbiB3b3VsZCBiZSBtZWFuaW5nZnVsLCBlZmZpY2llbnQgb3IgdXNlZnVsLgotICAqLwotICBwdWJsaWMgUmVsIGdldFJlbCAoIFN0cmluZyByZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwga25vd24gcmVsYXRpb25zaGlwcy4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIFRoZSBvdXRib3VuZCByZWxhdGlvbnNoaXBzIG9mIHRoZSBlbGVtZW50LgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFJlbHMgKCk7Ci0KLQotICAvKgotICAqIFRoZXJlIGlzIGEgbmVlZCBzb21ldGltZXMgZm9yIGVhY2ggZWxlbWVudCBpbiBhIG1vZGVsIHRvIGhhdmUgYSB1bmlxdWUgaWRlbnRpZmllci4KLSAgKiBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGxlZnQgdG8gYSBuYW1lLCBidXQgc2luY2UgdGhlIGVsZW1lbnQgbWFrZXIgZ2l2ZXMgaXQgaXRzIG5hbWUKLSAgKiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IGEgbW9kZWwgY291bGQgaGF2ZSB0d28gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBuYW1lLiBJZiB0aGV5IAotICAqIGFyZSB0aGUgc2FtZSBlbGVtZW50IHR5cGUgdGhlbiB0aGVyZSB3b3VsZCBiZSBubyB3YXkgdG8gZGlmZmVyZW5jaWF0ZSBiZXR3ZWVuIHRoZSB0d28uCi0gICogVGhlIGZvbGxvd2luZyBnZXR0ZXIgYW5kIHNldHRlciB3aWxsIHByb3ZpZGUgYSB1bmlxdWUgaWRlbnRpZmllci4gVGhpcyBpZGVudGlmaWVyIHdpbGwgYmUga25vd24gCi0gICogYXMgdGhlIG11aWQgb3IgTW9kZWwgVW5pcXVlIElkZW50aWZpZXIuIFVubGlrZSBhIHV1aWQgaXQgd2lsbCBvbmx5IGJlIGFzc3VyZWQgdW5pcXVlbmVzcyAKLSAgKiB3aXRoaW4gaXRzIG93biBtb2RlbC4gVGhlIGludGVudGlvbiBpcyB0byB1c2UgYSB1bmlxdWUgbnVtYmVyIGFwcGVuZGVkIHRvIHRoZSBlbmQgCi0gICogb2YgdGhlIG5hbWUuCi0gICogVGhlIGZvbGxvd2luZyBpcyB0aGUgZ2V0dGVyCi0gICogQHJldHVybiBTdHJpbmcgdGhlIHVuaXF1ZSBpZGVudGlmaWVyCi0gICovCi0KLSAgcHVibGljIFN0cmluZyBnZXRNVUlEKCk7Ci0gIAotICAKLQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWJjMTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB3aGVyZSB3ZSBzdG9yZSBhbGwgdGhlIHN0YXRlIGRhdGEgdGhhdCB2YXJpb3VzIFVJcwotKiAoc3VjaCBhcyB0aGUgTmV3V1NETENyZWF0aW9uV2l6YXJkKSBjYXB0dXJlIGZyb20gdGhlIHVzZXIKLSogYW5kIHRoZW4gbmVlZCB0byBwcm9jZXNzLgotKi8KLXB1YmxpYyBjbGFzcyBFbGVtZW50QWRhcHRlciBpbXBsZW1lbnRzIEVsZW1lbnRMaXN0ZW5lcgotewotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5QWRkZWQgKCBQcm9wZXJ0eUFkZEV2ZW50IGV2ZW50ICkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpbiB0aGUgbW9kZWwgY2hhbmdlcy4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSwgb2xkIHZhbHVlCi0gICogYW5kIG5ldyB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkICggUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCApCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaW4gdGhlIG1vZGVsIGlzIHJlbW92ZWQuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIG9sZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcHJvcGVydHlSZW1vdmVkICggUHJvcGVydHlSZW1vdmVFdmVudCBldmVudCApCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVsQWRkZWQgKCBSZWxBZGRFdmVudCBldmVudCApCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZCAoIFJlbFJlbW92ZUV2ZW50IGV2ZW50ICkKLSAgewotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MDk2ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB3aGVyZSB3ZSBzdG9yZSBhbGwgdGhlIHN0YXRlIGRhdGEgdGhhdCB2YXJpb3VzIFVJcwotKiAoc3VjaCBhcyB0aGUgTmV3V1NETENyZWF0aW9uV2l6YXJkKSBjYXB0dXJlIGZyb20gdGhlIHVzZXIKLSogYW5kIHRoZW4gbmVlZCB0byBwcm9jZXNzLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgRWxlbWVudExpc3RlbmVyCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUFkZGVkICggUHJvcGVydHlBZGRFdmVudCBldmVudCApOwotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaW4gdGhlIG1vZGVsIGNoYW5nZXMuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHksIG9sZCB2YWx1ZQotICAqIGFuZCBuZXcgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZCAoIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQgKTsKLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGluIHRoZSBtb2RlbCBpcyByZW1vdmVkLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCBvbGQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5UmVtb3ZlZCAoIFByb3BlcnR5UmVtb3ZlRXZlbnQgZXZlbnQgKTsKLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlbEFkZGVkICggUmVsQWRkRXZlbnQgZXZlbnQgKTsKLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQgKCBSZWxSZW1vdmVFdmVudCBldmVudCApOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Nb2RlbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvTW9kZWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFhNWRmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Nb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGFic3RyYWN0IGNsYXNzIGZvciBhIHNpbXBsZSBkYXRhIG1vZGVsIGNvbnNpc3Rpbmcgb2YKLSogYSBuZXR3b3JrIG9mIG5hbWVkIG5vZGVzIChjbGFzcyBOb2RlKS4gRXZlcnkgbm9kZSBjYXJyaWVzIGEgc2V0Ci0qIG9mIG5hbWVkIHByb3BlcnRpZXMgKGNsYXNzIFByb3BlcnR5KS4gTm9kZXMgYXJlIGludGVycmVsYXRlZCBieQotKiByZWxhdGlvbnNoaXBzIChjbGFzcyBSZWwpIGFuZCBjb25uZWN0aW9ucyAoY2xhc3MgQ29ubmVjdGlvbikuCi0qIEVhY2ggTW9kZWwga2VlcHMgYSByZWdpc3RyeSBvZiBhbGwgb2YgaXRzIG5vZGVzLCBhbmQga2VlcHMgYQotKiByZWZlcmVuY2UgdG8gb25lICJyb290IiBub2RlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzdGFydGluZwotKiBwb2ludCBmb3IgbmF2aWdhdGlvbi4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIE1vZGVsCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgbW9kZWwuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZGVsLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lICggU3RyaW5nIG5hbWUgKTsKLQotICAvKioKLSAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBtb2RlbC4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZSBvZiB0aGUgbW9kZWwuIFRoaXMgbXVzdCBub3QgYmUgbnVsbC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0gIC8qKgotICAqIFNldHMgYSBub2RlIGFzIHRoZSByb290IG9mIHRoZSBtb2RlbC4gSWYgdGhlIG5vZGUgZG9lcyBub3QKLSAgKiBiZWxvbmcgdG8gYSBtb2RlbCwgdGhlbiBpdCBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5LiBJZiB0aGUKLSAgKiBub2RlIGFscmVhZHkgYmVsb25ncyB0byBhbm90aGVyIG1vZGVsLCB0aGVuIHRoZSByb290IG5vZGUKLSAgKiBpcyBub3Qgc2V0IGFuZCBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgKiBAcGFyYW0gcm9vdCBUaGUgbm9kZSB0byBzZXQgYXMgdGhlIHJvb3QuIFRoZSBub2RlIG11c3QKLSAgKiBiZWxvbmcgZWl0aGVyIHRvIHRoaXMgbW9kZWwgb3IgdG8gbm8gbW9kZWwuIFRoaXMgbXVzdAotICAqIG5vdCBiZSBudWxsLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBub2RlIHdhcyBzZXQgYXMgdGhlIHJvb3QuCi0gICogVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZ2l2ZW4gbm9kZSBhbHJlYWR5IGJlbG9uZ3MKLSAgKiB0byBhbm90aGVyIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBzZXRSb290RWxlbWVudCAoIEVsZW1lbnQgcm9vdCApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHJvb3Qgbm9kZS4gVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYSBub2RlCi0gICogZXhjZXB0IG9uIGFuIGVtcHR5IE1vZGVsLiBJZiBzZXRSb290Tm9kZSgpIGhhcyBub3QgYmVlbgotICAqIGNhbGxlZCwgb3IgaWYgdGhlIGxhc3Qgcm9vdCBub2RlIHdhcyByZW1vdmVkIGZyb20gdGhlIG1vZGVsLAotICAqIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHNlbGVjdCBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSBub2RlIGFzCi0gICogdGhlIHJvb3QuIFRoaXMgbWV0aG9kIHdpbGwgY29uc2lzdGVudGx5IHJldHVybiB0aGUgc2FtZSBub2RlCi0gICogdW50aWwgZWl0aGVyCi0gICogKGEpIHNldFJvb3ROb2RlKCkgaXMgY2FsbGVkIHdpdGggYSBkaWZmZXJlbnQgbm9kZSBvcgotICAqIChiKSByZW1vdmVOb2RlKCkgaXMgY2FsbGVkIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSBtb2RlbC4KLSAgKiBAcmV0dXJuIE5vZGUgVGhlIGN1cnJlbnQgcm9vdCBub2RlLCBvciBudWxsIGlmIHRoZSBtb2RlbCBpcyBlbXB0eS4KLSAgKi8KLQotICBwdWJsaWMgRWxlbWVudCBnZXRSb290RWxlbWVudCAoKTsKLQotICAvKioKLSAgKiBHZXQgdGhlIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGlzIG5hbWUKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgCi0gICogQHJldHVybiBWZWN0b3IgYSB2ZWN0b3Igb2YgZWxlbWVudHMgdGhhdCBoYXZlIHRoaXMgbmFtZQotICAqIFRoZXNlIGVsZW1lbnRzIG1heSBiZSBvZiBkaWZmZXJlbnQgdHlwZXMKLSAgKiovCi0KLSAgcHVibGljIFZlY3RvciBnZXRFbGVtZW50c0J5TmFtZShTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogQWRkcyBhIG5vZGUgdG8gdGhlIG1vZGVsLiBJZiB0aGUgbm9kZSBhbHJlYWR5IGJlbG9uZ3MgdG8gYW5vdGhlcgotICAqIG1vZGVsIHRoZW4gaXQgd2lsbCBub3QgYmUgYWRkZWQuCi0gICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdG8gYWRkLiBUaGlzIG11c3Qgbm90IGJlIG51bGwuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIG5vZGUgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBnaXZlbiBub2RlIGFscmVhZHkgYmVsb25ncyB0bwotICAqIHRoZSBjdXJyZW50IG1vZGVsIG9yIHRvIGFub3RoZXIgbW9kZWwuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFkZEVsZW1lbnQgKCBFbGVtZW50IGVsZW1lbnQgKTsKLQotICAvKioKLSAgKiBSZW1vdmVzIGEgbm9kZSBmcm9tIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmUuIFRoaXMgbXVzdCBub3QgYmUgbnVsbC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgbm9kZSB3YXMgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuCi0gICogVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZ2l2ZW4gbm9kZSBkb2VzIG5vdCBiZWxvbmcKLSAgKiB0byB0aGlzIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVFbGVtZW50ICggRWxlbWVudCBlbGVtZW50ICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwgbm9kZXMgaW4gdGhlIG1vZGVsIGFuZCBpbiBubwotICAqIHBhcnRpY3VsYXIgb3JkZXIsCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBBbiBlbnVtZXJhdGlvbiBvZiBhbGwgbm9kZXMgaW4gdGhlIG1vZGVsLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEVsZW1lbnRzICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbW9kZWwuCi0gICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbW9kZWwuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLgotICAqLwotICBwdWJsaWMgaW50IGdldE51bWJlck9mRWxlbWVudHMgKCk7Ci0KLSAgLyoqCi0gICogRGV0ZXJtaW5lcyBpZiB0aGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBnaXZlbiBub2RlLgotICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHRvIGNoZWNrIGZvci4gVGhpcyBtdXN0IG5vdCBiZSBudWxsLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBtb2RlbCBjb250YWlucyB0aGUgbm9kZS4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gY29udGFpbnNFbGVtZW50ICggRWxlbWVudCBlbGVtZW50ICk7Ci0KLSAgLyoKLSAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSB0aGUgbmV4dCBudW1iZXIgaW4gdGhlIHF1ZXVlIGZvciB0aGUgTVVJRAotICAqCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0VW5pcXVlTnVtYmVyKCk7Ci0KLSAgLyoKLSAgKiBoZXJlcyB3aGF0IHdlIGNhbGwgZnJvbSB0aGUgZWxlbWVudAotICAqLwotICBwdWJsaWMgU3RyaW5nIG1ha2VNVUlEKFN0cmluZyBuYW1lKTsKLQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjNkMjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3MgZm9yIHByb3BlcnRpZXMgb2YgYSBOb2RlLgotKiBFdmVyeSBwcm9wZXJ0eSBoYXMgYW4gaW1tdXRhYmxlIG5hbWUgYW5kIGEgdmFsdWUgb2YgdHlwZSBPYmplY3QuCi0qLwotcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIEV2ZXJ5IE5vZGUgaGFzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiB0aGF0IGlzIGVxdWl2YWxlbnQKLSAgKiB0byBhbmQga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBOb2RlLmdldE5hbWUoKSBhbmQgTm9kZS5zZXROYW1lKCkuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUUgPSAibmFtZSI7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyA8Y29kZT5Qcm9wZXJ0eTwvY29kZT4uCi0gICogUHJvcGVydHkga2V5IGFuZCB2YWx1ZSByZWZlcmVuY2VzIGFyZSBjbG9uZWQsCi0gICogYnV0IHRoZSB2YWx1ZSBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlIG5vdCBjbG9uZWQuCi0gICogQHJldHVybiBQcm9wZXJ0eSBBIG5ldyBQcm9wZXJ0eS4KLSAgKi8KLSAgcHVibGljIFByb3BlcnR5IHNoYWxsb3dDbG9uZSAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgbm9kZS4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZSBvZiB0aGlzIG5vZGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKTsKLQotICAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LgotICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LiBBbnkgcHJldmlvdXMgdmFsdWUgaXMgcmVwbGFjZWQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbHVlICggT2JqZWN0IHZhbHVlICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4KLSAgKiBAcmV0dXJuIE9iamVjdCBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSwgcG9zc2libHkgbnVsbC4KLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRWYWx1ZSAoKTsKLQotICAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGFzIGEgc3RyaW5nLgotICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRvIHNldC4gQW55IHByZXZpb3VzIHZhbHVlIGlzIHJlcGxhY2VkLgotICAqIFRoZSB0eXBlIG9mIHRoZSBwcmV2aW91cyB2YWx1ZSwgaWYgYW55LCBpcyBvZiBubyBjb25zZXF1ZW5jZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsdWVBc1N0cmluZyAoIFN0cmluZyB2YWx1ZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgYXMgYSBzdHJpbmcuCi0gICogQHJldHVybiBTdHJpbmcgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgYXMgYSBzdHJpbmcsIHBvc3NpYmx5IG51bGwuCi0gICogSWYgdGhlIHNldCB2YWx1ZSBpcyBhbiBhcmJpdHJhcnkgT2JqZWN0LCB0aGVuIE9iamVjdC50b1N0cmluZygpIGlzCi0gICogcmV0dXJuZWQuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVBc1N0cmluZyAoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5QWRkRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5QWRkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEyN2NhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eUFkZEV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogQ2FycmllcyBkYXRhIHJlbGV2YW50IHRvIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0qLwotcHVibGljIGNsYXNzIFByb3BlcnR5QWRkRXZlbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBCYXNpY0VsZW1lbnQgZkVsZW1lbnQ7Ci0KLSAgLyoqCi0gICogVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZlByb3BlcnR5OwotCi0gCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvcGVydHkncyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eUFkZEV2ZW50ICggQmFzaWNFbGVtZW50IGVsZW1lbnQsIFByb3BlcnR5IHByb3BlcnR5KQotICB7Ci0gICAgZkVsZW1lbnQgPSBlbGVtZW50OwotICAgIGZQcm9wZXJ0eSA9IHByb3BlcnR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHRoYXQgY2hhbmdlZCAodGhhdCBwcm9kdWNlZCB0aGlzIGV2ZW50KS4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBCYXNpY0VsZW1lbnQgZ2V0RWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHkgZ2V0UHJvcGVydHkgKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHk7Ci0gIH0KLQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlDaGFuZ2VFdmVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlDaGFuZ2VFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmYwMTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5Q2hhbmdlRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBDYXJyaWVzIGRhdGEgcmVsZXZhbnQgdG8gd2hlbiBhIHByb3BlcnR5IGlzIGNoYW5nZWQgaW4gdGhlIG1vZGVsLgotKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eUNoYW5nZUV2ZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQmFzaWNFbGVtZW50IGZFbGVtZW50OwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSB0aGF0IGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBQcm9wZXJ0eSBmUHJvcGVydHk7Ci0KLSAgLyoqCi0gICogVGhlIHByb3BlcnR5J3Mgb2xkIHZhbHVlLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZk9sZFByb3BlcnR5OwotCi0gICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRoYXQgY2hhbmdlZC4KLSAgICogQHBhcmFtIG9sZFZhbHVlIFRoZSBwcm9wZXJ0eSdzIG9sZCB2YWx1ZS4KLSAgICogQHBhcmFtIG5ld1ZhbHVlIFRoZSBwcm9wZXJ0eSdzIG5ldyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eUNoYW5nZUV2ZW50ICggQmFzaWNFbGVtZW50IGVsZW1lbnQgLCBQcm9wZXJ0eSBwcm9wZXJ0eSwgUHJvcGVydHkgb2xkUHJvcGVydHkgKQotICB7Ci0gICAgZkVsZW1lbnQgPSBlbGVtZW50OwotICAgIGZQcm9wZXJ0eSA9IHByb3BlcnR5OwotICAgIGZPbGRQcm9wZXJ0eSA9IG9sZFByb3BlcnR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHRoYXQgY2hhbmdlZCAodGhhdCBwcm9kdWNlZCB0aGlzIGV2ZW50KS4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBCYXNpY0VsZW1lbnQgZ2V0RWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHByb3BlcnR5IHRoYXQgY2hhbmdlZC4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5IHRoYXQgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eSBnZXRQcm9wZXJ0eSAoKQotICB7Ci0gICAgcmV0dXJuIGZQcm9wZXJ0eTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBwcm9wZXJ0eSdzIG9sZCB2YWx1ZS4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5J3Mgb2xkIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5IGdldE9sZFByb3BlcnR5ICgpCi0gIHsKLSAgICByZXR1cm4gZk9sZFByb3BlcnR5OwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5UmVtb3ZlRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5UmVtb3ZlRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxYTE4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eVJlbW92ZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogQ2FycmllcyBkYXRhIHJlbGV2YW50IHRvIHdoZW4gYSBwcm9wZXJ0eSBpcyByZW1vdmVkIGZyb20gdGhlIG1vZGVsLgotKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eVJlbW92ZUV2ZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQmFzaWNFbGVtZW50IGZFbGVtZW50OwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyByZW1vdmVkLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZlByb3BlcnR5OwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdGhhdCB3YXMgcmVtb3ZlZC4KLSAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm9wZXJ0eSdzIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5UmVtb3ZlRXZlbnQgKCBCYXNpY0VsZW1lbnQgZWxlbWVudCwgUHJvcGVydHkgcHJvcGVydHkpCi0gIHsKLSAgICBmRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgZlByb3BlcnR5ID0gcHJvcGVydHk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgdGhhdCBjaGFuZ2VkICh0aGF0IHByb2R1Y2VkIHRoaXMgZXZlbnQpLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKi8KLSAgcHVibGljIEJhc2ljRWxlbWVudCBnZXRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgcHJvcGVydHkgdGhhdCB3YXMgcmVtb3ZlZC4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5IHRoYXQgd2FzIHJlbW92ZWQuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHkgZ2V0UHJvcGVydHkgKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHk7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmIyOTJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGFic3RyYWN0IGNsYXNzIGZvciByZWxhdGlvbnNoaXBzIGluIGEgTW9kZWwuCi0qLwotcHVibGljIGludGVyZmFjZSBSZWwKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgcmVsYXRpb25zaGlwLiBSZWxhdGlvbnNoaXAgbmFtZXMKLSAgKiBjYW5ub3QgYmUgY2hhbmdlZC4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbm9kZSB0aGF0IG93bnMgdGhpcyByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBOb2RlIFRoZSBub2RlIHRoYXQgb3ducyB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwsIHRoYXQgaXMsIHJlbGF0aW9uc2hpcHMKLSAgKiBjYW5ub3QgZXhpc3QgaW4gdGhlIGFic2VuY2Ugb2YgYSBub2RlLgotICAqLwotICBwdWJsaWMgRWxlbWVudCBnZXRTb3VyY2VFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwgbm9kZXMgaW4gdGhpcyByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBUaGUgbm9kZXMgaW4gdGhpcyByZWxhdGlvbnNoaXAuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0VGFyZ2V0RWxlbWVudHMgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoaXMgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhpcyByZWxhdGlvbnNoaXAuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLgotICAqLwotICBwdWJsaWMgaW50IGdldE51bWJlck9mVGFyZ2V0RWxlbWVudHMgKCk7Ci0KLSAgLyoqCi0gICogQWRkcyBhIGNvbm5lY3Rpb24gdG8gdGhpcyByZWxhdGlvbnNoaXAuIFRoaXMgbWV0aG9kIGlzCi0gICogaW50ZW5kZWQgZm9yIHVzZSBieSBkZXJpdmF0aW9ucyBvZiB0aGUgTW9kZWwgZnJhbWV3b3JrLAotICAqIG5vdCBieSB1c2VycyBvZiB0aGUgZnJhbWV3b3JrLiBDb25uZWN0aW9uIG9iamVjdHMgc2hvdWxkCi0gICogb25seSBiZSBjb25zdHJ1Y3RlZCwgYWRkZWQsIHJlbW92ZWQgYW5kIHJldHJpZXZlZCBieQotICAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgTm9kZSBhbmQgUmVsIGludGVyZmFjZXMuCi0gICogQHBhcmFtIGNvbm5lY3Rpb24gVGhlIGNvbm5lY3Rpb24gdG8gYWRkLgotICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uICggQ29ubmVjdGlvbiBjb25uZWN0aW9uICk7Ci0KLSAgLyoqCi0gICogUmVtb3ZlcyBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHJlbGF0aW9uc2hpcC4gVGhpcyBtZXRob2QgaXMKLSAgKiBpbnRlbmRlZCBmb3IgdXNlIGJ5IGRlcml2YXRpb25zIG9mIHRoZSBNb2RlbCBmcmFtZXdvcmssCi0gICogbm90IGJ5IHVzZXJzIG9mIHRoZSBmcmFtZXdvcmsuIENvbm5lY3Rpb24gb2JqZWN0cyBzaG91bGQKLSAgKiBvbmx5IGJlIGNvbnN0cnVjdGVkLCBhZGRlZCwgcmVtb3ZlZCBhbmQgcmV0cmlldmVkIGJ5Ci0gICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBOb2RlIGFuZCBSZWwgaW50ZXJmYWNlcy4KLSAgKiBAcGFyYW0gY29ubmVjdGlvbiBUaGUgY29ubmVjdGlvbiB0byByZW1vdmUuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGNvbm5lY3Rpb24gd2FzIGZvdW5kIGFuZCByZW1vdmVkLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVDb25uZWN0aW9uICggQ29ubmVjdGlvbiBjb25uZWN0aW9uICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgQ29ubmVjdGlvbiBvYmplY3QgZm9yIHRoZSBnaXZlbiB0YXJnZXQgbm9kZS4KLSAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IGRlcml2YXRpb25zIG9mIHRoZSBNb2RlbAotICAqIGZyYW1ld29yaywgbm90IGJ5IHVzZXJzIG9mIHRoZSBmcmFtZXdvcmsuIENvbm5lY3Rpb24gb2JqZWN0cwotICAqIHNob3VsZCBvbmx5IGJlIGNvbnN0cnVjdGVkLCBhZGRlZCwgcmVtb3ZlZCBhbmQgcmV0cmlldmVkIGJ5Ci0gICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBOb2RlIGFuZCBSZWwgaW50ZXJmYWNlcy4KLSAgKiBAcGFyYW0gdGFyZ2V0Tm9kZSBUaGUgbm9kZSB0byBmaW5kIHRoZSBDb25uZWN0aW9uIHRvLgotICAqIEByZXR1cm4gQ29ubmVjdGlvbiBUaGUgY29ubmVjdGlvbiwgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uVG8gKCBFbGVtZW50IHRhcmdldEVsZW1lbnQgKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsQWRkRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbEFkZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzY2M0OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsQWRkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogQ2FycmllcyBkYXRhIHJlbGV2YW50IHRvIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0qLwotcHVibGljIGNsYXNzIFJlbEFkZEV2ZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiBmT3V0Qm91bmQ7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiBmSW5Cb3VuZDsKLQotICAvKioKLSAgKiBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICovCi0gIHByb3RlY3RlZCBQcm9wZXJ0eSBmUHJvcGVydHk7Ci0KLSAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm9wZXJ0eSdzIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFJlbEFkZEV2ZW50IChDb25uZWN0aW9uW10gcGFpcikKLSAgewotICAgICBmT3V0Qm91bmQgPSBwYWlyW0Jhc2ljQ29ubmVjdGlvbi5PVVRCT1VORF07Ci0gICAgIGZJbkJvdW5kID0gcGFpcltCYXNpY0Nvbm5lY3Rpb24uSU5CT1VORF07Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3V0Ym91bmQgY29ubmVjdGlvbiB0aGF0IGNoYW5nZWQgCi0gICoqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRPdXRCb3VuZENvbm5lY3Rpb24gKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwgbmFtZSAKLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3V0Qm91bmRSZWxOYW1lKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0UmVsKCkuZ2V0TmFtZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsCi0gICoqLwotICBwdWJsaWMgUmVsIGdldE91dEJvdW5kUmVsKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0UmVsKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwgbmFtZSAKLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5Cb3VuZFJlbE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kLmdldFJlbCgpLmdldE5hbWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbAotICAqKi8KLSAgcHVibGljIFJlbCBnZXRJbkJvdW5kUmVsKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZC5nZXRSZWwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvdXRib3VuZCBlbGVtZW50IHRoYXQgY2hhbmdlZCAKLSAgKiovCi0gIHB1YmxpYyBFbGVtZW50IGdldFBhcmVudEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0RWxlbWVudCgpOwotICB9Ci0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmJvdW5kIGNvbm5lY3Rpb24gdGhhdCBjaGFuZ2VkIAotICAqKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0Q2hpbGRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0RWxlbWVudCgpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbFJlbW92ZUV2ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWxSZW1vdmVFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTlhNmI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbFJlbW92ZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBDYXJyaWVzIGRhdGEgcmVsZXZhbnQgdG8gd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSovCi1wdWJsaWMgY2xhc3MgUmVsUmVtb3ZlRXZlbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBDb25uZWN0aW9uIGZPdXRCb3VuZDsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBDb25uZWN0aW9uIGZJbkJvdW5kOwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIFByb3BlcnR5IGZQcm9wZXJ0eTsKLQotIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnR5J3MgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgUmVsUmVtb3ZlRXZlbnQgKENvbm5lY3Rpb25bXSBwYWlyKQotICB7Ci0gICAgIGZPdXRCb3VuZCA9IHBhaXJbQmFzaWNDb25uZWN0aW9uLk9VVEJPVU5EXTsKLSAgICAgZkluQm91bmQgPSBwYWlyW0Jhc2ljQ29ubmVjdGlvbi5JTkJPVU5EXTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCB0aGF0IGNoYW5nZWQgKHRoYXQgcHJvZHVjZWQgdGhpcyBldmVudCkuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRPdXRCb3VuZCAoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKi8KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0SW5Cb3VuZCAoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsIG5hbWUgCi0gICoqLwotICBwdWJsaWMgU3RyaW5nIGdldE91dEJvdW5kUmVsTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldFJlbCgpLmdldE5hbWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbAotICAqKi8KLSAgcHVibGljIFJlbCBnZXRPdXRCb3VuZFJlbCgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldFJlbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsIG5hbWUgCi0gICoqLwotICBwdWJsaWMgU3RyaW5nIGdldEluQm91bmRSZWxOYW1lKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZC5nZXRSZWwoKS5nZXROYW1lKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwKLSAgKiovCi0gIHB1YmxpYyBSZWwgZ2V0SW5Cb3VuZFJlbCgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0UmVsKCk7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG91dGJvdW5kIGVsZW1lbnQgdGhhdCBjaGFuZ2VkIAotICAqKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0T3V0Qm91bmRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldEVsZW1lbnQoKTsKLSAgfQotCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5ib3VuZCBjb25uZWN0aW9uIHRoYXQgY2hhbmdlZCAKLSAgKiovCi0gIHB1YmxpYyBFbGVtZW50IGdldEluYm91bmRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0RWxlbWVudCgpOwotICB9Ci0gIAotCi0gIAotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXhlY3V0YWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTRhNjg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0qIEFsbCBFeHRlbnNpb25zIHdpdGggZXhlY3R1dGFibGUgZXh0ZW5zaW9ucyBzaG91bGQgaW1wbGVtZW50IHRoaXMgCi0qIHRvIGZpdCBvdXIgZnJhbWV3b3JrCi0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXhlY3V0YWJsZQotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgLyoqCi0gICpSZXR1cm5zIGEgd2l6YXJkIGZyYWdtZW50IGZvciB0aGlzIGV4ZW50aW9uIHR5cGUgCi0gICoKLSAgKi8KLSAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGdldEZpbmlzaENvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwNjkyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpOwotCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIGV4dGVuc2lvbiBpbmZvCi0gICogQHBhcmFtIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb25maWdFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KTsKLSAKLSAgLyoqCi0gICogSWYgdGhlIGV4dGVuc2lvbiBoYXMgY29kZSB0aGF0IAotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpOwotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJmN2RhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLQotCi0KLS8qKgotKiBUaGlzIHJlcHJlc2VudHMgYW4gZXh0ZW5zaW9uIGluIHRoZSBwbHVnaW4gcmVnaXN0cnkgCi0qIEl0IGpvYiBpcyB0byBhY3QgYXMgYSBwcm94eSB0byB0aGUgaWNvbmZpZ2VsZW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUV4dGVuc2lvbkltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0KLQlwcml2YXRlIElMb2cJbG9nXzsKLQkKLSAgLyoKLSAgKiBUaGUgQ29uZmlnRWxlbWVudCB0aGF0IGhvbGRzIGV4dGVuc2lvbiBpbmZvCi0gICovCi0gIHByb3RlY3RlZCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudF87Ci0KLSAgLyoKLSAgKiBUaGUgZXh0ZW5zaW9uIGV4ZWN1dGFibGUgCi0gICovCi0gIHByb3RlY3RlZCBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB3ZWJTZXJ2aWNlRXhlY3V0YWJsZV87Ci0gIAotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgICBsb2dfID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgfQotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpCi0gIHsKLSAgICBpZih3ZWJTZXJ2aWNlRXhlY3V0YWJsZV8gIT0gbnVsbCkgcmV0dXJuIHdlYlNlcnZpY2VFeGVjdXRhYmxlXzsKLQotICAgIHRyeXsKLSAgICAgIHJldHVybiBjb25maWdFbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgIH1jYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKXsKLSAgICAgIGxvZ18ubG9nKElMb2cuRVJST1IsIDUwMjksIHRoaXMsICJnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbiIsZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEBwYXJhbSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29uZmlnRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgfQkKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnRWxlbWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAqIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gYmVpbmcgdXNlZAotICAqIEByZXR1cm4gU3RyaW5nIG5hbWUgb2YgdGhpcyBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAibmFtZSIgKTsKLSAgfQotCi0KLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjZlY2NlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDsKLQotCi0vKioKLSogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGV4dGVuc2lvbnMgZm9yIGEgZ2l2ZW4gZXh0ZW5zaW9uLXBvaW50IAotKiBhbHNvIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvYmplY3RzIAotKgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBleHRlbnNpb25zCi0gICogQHJldHVybiBUaGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucy4KLSAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VFeHRlbnNpb25OYW1lcyAoKTsKLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGV4dGVuc2lvbiBvYmplY3Qgb2YgdGhlIGdpdmVuIG5hbWUKLSAgKkByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoIFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIEFsbCBleHRlbnRpb24gb2JqZWN0cyBpbiB0aGlzIHJlZ2lzdHJ5Ci0gICpAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0cwotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbltdIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zKCk7Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkNGRmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhLkxhYmVsc0FuZElkczsKLQotCi0vKioKLSogVGhpcyBpcyBhIGdlbmVyaWMgcmVnaXN0cnkgd2hpY2ggc2V0cyB1cCBnZW5lcmFsIGNvZGUgaW4gaGFuZGxpbmcgICAKLSogSUNvbmZpZ0VsZW1lbnRzIGZvciBhbiBleHRlbnNpb24KLSovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbCBpbXBsZW1lbnRzIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeQotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgCi0gIHByaXZhdGUgSGFzaHRhYmxlIG5hbWVFeHRlbnNpb25UYWJsZV87Ci0gIHByaXZhdGUgVmVjdG9yIGlkXzsKLSAgcHJpdmF0ZSBWZWN0b3IgbGFiZWxfOwotICBwcml2YXRlIExhYmVsc0FuZElkcyBsYWJlbHNhbmRpZHNfOwotICAgIAotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbCgpCi0gIHsKLSAgICBuYW1lRXh0ZW5zaW9uVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGxhYmVsXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgbG9hZEV4dGVuc2lvbnMoKTsKLSAgfQotICAKLSAgLyoqCi0gICogQ2hpbGRyZW4gcmVnaXN0cmllcyB3aWxsIGhhdmUgZGlmZmVyZW50IGV4dGVuc2lvbiB0eXBlcyAKLSAgKiBAcmV0dXJuIFdlYnNlcnZpY2VFeHRlbnNpb24gaG9sZHMgYSBjb25maWcgZWxlbQotICAqIGZvciB0aGF0IGV4dGVuc2lvbiBjYXBhYmxlIG9mIGNyZWF0aW5nIGFuIGV4ZWN1dGFibGUgZmlsZQotICAqLwotICBwdWJsaWMgYWJzdHJhY3QgV2ViU2VydmljZUV4dGVuc2lvbiBjcmVhdGVXZWJTZXJ2aWNlRXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KTsKLQotICAvKioKLSAgKiBDaGlsZHJlbiBtdXN0IGltcGxlbWVudCBob3cgdGhleSBnZXQgdGhlIElDb25maWd1cmF0aW9uRWxlbWVudFtdIAotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gYW4gYXJyYXkgb2YgZWxlbWVudHMgcGFydGljdWxhciB0byB0aGF0Ci0gICogZXh0ZW5zaW9uCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBnZXRDb25maWdFbGVtZW50cygpOwotCi0gIC8qCi0gICogTG9hZHMgV2ViU2VydmljZUV4dGVuc2lvbnMgZm9yIFdlYlNlcnZpY2VDbGllbnRUZXN0IGludG8gdGhpcyByZWdpc3RyeS4KLSAgKiBUaGlzIGlzIGRvbmUgYnkgcXVlcnlpbmcgdGhlIHBsdWdpbiByZWdpc3RyeSBmb3IgYWxsIGV4dGVuc2lvbnMKLSAgKiB0aGF0IGV4dGVuZCB3ZWJTZXJ2aWNlQ2xpZW50VGVzdCAgCi0gICovCi0gIHByaXZhdGUgdm9pZCBsb2FkRXh0ZW5zaW9ucyAoKQotICB7ICAgIAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0KLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y29uZmlnLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gY29uZmlnW2lkeF07Ci0gICAgICBTdHJpbmcgbGFiZWwgPSBlbGVtLmdldEF0dHJpYnV0ZSggImxhYmVsIiApOwotICAgICAgU3RyaW5nIGlkID0gICBlbGVtLmdldEF0dHJpYnV0ZSggImlkIiApOyAgICAgIAotICAgICAgV2ViU2VydmljZUV4dGVuc2lvbiB3ZWJTZXJ2aWNlRXh0ZW5zaW9uID0gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihlbGVtKTsJCi0gICAgICBuYW1lRXh0ZW5zaW9uVGFibGVfLnB1dChsYWJlbCx3ZWJTZXJ2aWNlRXh0ZW5zaW9uKTsKLSAgICAgIGxhYmVsXy5hZGQobGFiZWwpOwotICAgICAgaWRfLmFkZChpZCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nW10pbmFtZUV4dGVuc2lvblRhYmxlXy5rZXlTZXQoKS50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBuYW1lcyBhbmQgSWRzIAotICAgKi8KLSAgcHVibGljIExhYmVsc0FuZElkcyBnZXRMYWJlbHNBbmRJRHMoKQotICB7Ci0gIAlsYWJlbHNhbmRpZHNfID0gbmV3IExhYmVsc0FuZElkcygpOwotICAJbGFiZWxzYW5kaWRzXy5zZXRMYWJlbHNfKChTdHJpbmdbXSlsYWJlbF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApKTsKLSAgCWxhYmVsc2FuZGlkc18uc2V0SWRzXygoU3RyaW5nW10paWRfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gIAlyZXR1cm4gbGFiZWxzYW5kaWRzXzsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZQotICAqIEByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoIFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uKW5hbWVFeHRlbnNpb25UYWJsZV8uZ2V0KG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpCi0gIHsKLSAgICByZXR1cm4gKFdlYlNlcnZpY2VFeHRlbnNpb25bXSluYW1lRXh0ZW5zaW9uVGFibGVfLnZhbHVlcygpLnRvQXJyYXkoIG5ldyBXZWJTZXJ2aWNlRXh0ZW5zaW9uWzBdICk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQWJzdHJhY3RDbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0Q2xpZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyNzdmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQWJzdHJhY3RDbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZhY3RvcnlGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDbGllbnRGcmFnbWVudCBleHRlbmRzIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQKLXsKLSAgcHJvdGVjdGVkIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnRfOwotICBwcm90ZWN0ZWQgSUVudmlyb25tZW50ICAgICAgIGVudmlyb25tZW50XzsKLSAgcHJvdGVjdGVkIElDb250ZXh0ICAgICAgICAgIGNvbnRleHRfOwotICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiAgICAgICAgc2VsZWN0aW9uXzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgICAgICAgIHByb2plY3RfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgICAgICAgbW9kdWxlXzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgICAgICAgIGVhclByb2plY3RfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgICAgICAgZWFyXzsKLSAgICAKLSAgcHVibGljIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBBYnN0cmFjdENsaWVudEZyYWdtZW50KCBBYnN0cmFjdENsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAKLQkKLQl3ZWJTZXJ2aWNlQ2xpZW50XyA9IGZyYWdtZW50LndlYlNlcnZpY2VDbGllbnRfOwotCWVudmlyb25tZW50XyAgICAgID0gZnJhZ21lbnQuZW52aXJvbm1lbnRfOwotCWNvbnRleHRfICAgICAgICAgID0gZnJhZ21lbnQuY29udGV4dF87Ci0Jc2VsZWN0aW9uXyAgICAgICAgPSBmcmFnbWVudC5zZWxlY3Rpb25fOwotCW1vZHVsZV8gICAgICAgICAgID0gZnJhZ21lbnQubW9kdWxlXzsKLQllYXJfICAgICAgICAgICAgICA9IGZyYWdtZW50LmVhcl87Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZSApCi0gIHsKLQl3ZWJTZXJ2aWNlQ2xpZW50XyA9IHdlYlNlcnZpY2U7ICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVudmlyb25tZW50KCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgKQotICB7Ci0JZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoIElDb250ZXh0IGNvbnRleHQgKQotICB7CSAgCi0JY29udGV4dF8gPSBjb250ZXh0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oIElTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotCXNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QpCi0gIHsKLSAgICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQltb2R1bGVfID0gbW9kdWxlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0KFN0cmluZyBlYXJQcm9qZWN0KQotICB7Ci0gICAgZWFyUHJvamVjdF8gPSBlYXJQcm9qZWN0OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gIHsKLQllYXJfID0gZWFyOyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9BYnN0cmFjdFNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0U2VydmljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZjZkN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0U2VydmljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRmFjdG9yeUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCBleHRlbmRzIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQKLXsKLSAgcHJvdGVjdGVkIElXZWJTZXJ2aWNlIHdlYlNlcnZpY2VfOwotICBwcm90ZWN0ZWQgSUVudmlyb25tZW50IGVudmlyb25tZW50XzsKLSAgcHJvdGVjdGVkIElDb250ZXh0ICAgIGNvbnRleHRfOwotICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiAgc2VsZWN0aW9uXzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgIHByb2plY3RfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgbW9kdWxlXzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgIGVhclByb2plY3RfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgZWFyXzsKLSAgICAKLSAgcHVibGljIEFic3RyYWN0U2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQoIEFic3RyYWN0U2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAKLQkKLQl3ZWJTZXJ2aWNlXyAgPSBmcmFnbWVudC53ZWJTZXJ2aWNlXzsKLQllbnZpcm9ubWVudF8gPSBmcmFnbWVudC5lbnZpcm9ubWVudF87Ci0JY29udGV4dF8gICAgID0gZnJhZ21lbnQuY29udGV4dF87Ci0Jc2VsZWN0aW9uXyAgID0gZnJhZ21lbnQuc2VsZWN0aW9uXzsKLQltb2R1bGVfICAgICAgPSBmcmFnbWVudC5tb2R1bGVfOwotCWVhcl8gICAgICAgICA9IGZyYWdtZW50LmVhcl87Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2Ugd2ViU2VydmljZSApCi0gIHsKLQl3ZWJTZXJ2aWNlXyA9IHdlYlNlcnZpY2U7ICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVudmlyb25tZW50KCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgKQotICB7Ci0JZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoIElDb250ZXh0IGNvbnRleHQgKQotICB7CSAgCi0JY29udGV4dF8gPSBjb250ZXh0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oIElTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotCXNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QpCi0gIHsKLSAgICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQltb2R1bGVfID0gbW9kdWxlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0KFN0cmluZyBlYXJQcm9qZWN0KQotICB7Ci0gICAgZWFyUHJvamVjdF8gPSBlYXJQcm9qZWN0OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gIHsKLQllYXJfID0gZWFyOyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9Bc3NlbWJsZUNsaWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjJiNTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9Bc3NlbWJsZUNsaWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENsaWVudEZyYWdtZW50IAotewotICBwdWJsaWMgQXNzZW1ibGVDbGllbnRGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQoIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBBc3NlbWJsZUNsaWVudEZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlQ2xpZW50XyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldEFzc2VtYmxlKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8uYXNzZW1ibGUoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fzc2VtYmxlU2VydmljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjOWQ4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCAKLXsKLSAgcHVibGljIEFzc2VtYmxlU2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQoIEFzc2VtYmxlU2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0QXNzZW1ibGUoKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlXy5hc3NlbWJsZSggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGVwbG95Q2xpZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmVmYzIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lDbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIERlcGxveUNsaWVudEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCAKLXsKLSAgcHVibGljIERlcGxveUNsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGVwbG95Q2xpZW50RnJhZ21lbnQoIERlcGxveUNsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgRGVwbG95Q2xpZW50RnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VDbGllbnRfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0RGVwbG95KCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8uZGVwbG95KCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lTZXJ2aWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliZTk5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGVwbG95U2VydmljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgRGVwbG95U2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQoIERlcGxveVNlcnZpY2VGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IERlcGxveVNlcnZpY2VGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZV8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXREZXBsb3koKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlXy5kZXBsb3koIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BDbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGY4ZTI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXZlbG9wQ2xpZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgRGV2ZWxvcENsaWVudEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCAKLXsKLSAgcHVibGljIERldmVsb3BDbGllbnRGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIERldmVsb3BDbGllbnRGcmFnbWVudCggRGV2ZWxvcENsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgRGV2ZWxvcENsaWVudEZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlQ2xpZW50XyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldERldmVsb3AoKSApCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8uZGV2ZWxvcCggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM1Mzg2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBEZXZlbG9wU2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBEZXZlbG9wU2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCggRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IERldmVsb3BTZXJ2aWNlRnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0RGV2ZWxvcCgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VfLmRldmVsb3AoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxDbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTYzN2ViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JbnN0YWxsQ2xpZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgSW5zdGFsbENsaWVudEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCAKLXsKLQlwcml2YXRlIElDb250ZXh0IGNvbnRleHRfOwotCQotICBwdWJsaWMgSW5zdGFsbENsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgSW5zdGFsbENsaWVudEZyYWdtZW50KCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBJbnN0YWxsQ2xpZW50RnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VDbGllbnRfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0SW5zdGFsbCgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VDbGllbnRfLmluc3RhbGwoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0JICBjb250ZXh0Xz1jb250ZXh0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3ZTY0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnN0YWxsU2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0JcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLQkKLSAgcHVibGljIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJbnN0YWxsU2VydmljZUZyYWdtZW50KCBJbnN0YWxsU2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgSW5zdGFsbFNlcnZpY2VGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZV8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXRJbnN0YWxsKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZV8uaW5zdGFsbCggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0gIHsKLQkgIGNvbnRleHRfPWNvbnRleHQ7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvUnVuQ2xpZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5DbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjE5YjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5DbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBSdW5DbGllbnRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQgCi17Ci0JcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLQkKLSAgcHVibGljIFJ1bkNsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgUnVuQ2xpZW50RnJhZ21lbnQoIFJ1bkNsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgUnVuQ2xpZW50RnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VDbGllbnRfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0UnVuKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8ucnVuKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotCSAgY29udGV4dF89Y29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL1J1blNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL1J1blNlcnZpY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWZlODk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5TZXJ2aWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgUnVuU2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0JCi0JcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLQkKLSAgcHVibGljIFJ1blNlcnZpY2VGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFJ1blNlcnZpY2VGcmFnbWVudCggUnVuU2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgUnVuU2VydmljZUZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlXyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldFJ1bigpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VfLnJ1biggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0gIHsKLQkgIGNvbnRleHRfPWNvbnRleHQ7CSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L0Rlc2NyaXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9EZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDgwNzQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L0Rlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERlc2NyaXB0aW9uLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RGVzY3JpcHRpb24oKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERlc2NyaXB0aW9uIGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRWYWx1ZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREZXNjcmlwdGlvbl9WYWx1ZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmFsdWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExhbmcoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RGVzY3JpcHRpb25fTGFuZygpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuTGFuZ3VhZ2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMYW5nKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBEZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvRG9jdW1lbnRSb290LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwODgyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3QoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERvY3VtZW50Um9vdCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcC5FbnRyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X01peGVkKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmVhdHVyZU1hcEVudHJ5IiBtYW55PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlGZWF0dXJlTWFwIGdldE1peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbikKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURlc2NyaXB0aW9uIGdldERlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXROYW1lKE5hbWUpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTmFtZSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCU5hbWUgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TmFtZShOYW1lIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0UmVnaXN0cnkoUmVnaXN0cnkpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeSBnZXRSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFJlZ2lzdHJ5KFJlZ2lzdHJ5IHZhbHVlKTsKLQotfSAvLyBEb2N1bWVudFJvb3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L05hbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L05hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMzZGQzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9OYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IE5hbWUuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXROYW1lXygpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTmFtZSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmFsdWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0TmFtZV9WYWx1ZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmFsdWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TGFuZyhTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXROYW1lX0xhbmcoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkxhbmd1YWdlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TGFuZygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBOYW1lCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5MmRhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldElkIDxlbT5JZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0UmVmIDxlbT5SZWY8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBSZWdpc3RyeSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWV9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeV9OYW1lKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9ufS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeV9EZXNjcmlwdGlvbigpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRJZChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeV9JZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0SWQoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0SWQgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0SWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldElkKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExvY2F0aW9uKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5X0xvY2F0aW9uKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMb2NhdGlvbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlZjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVmPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlZjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0UmVmKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5X1JlZigpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0UmVmKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldFJlZiA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWY8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0UmVmKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gUmVnaXN0cnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnlGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMjQxMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnlGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5RmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVnaXN0cnlGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgewotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnlGYWN0b3J5IGVJTlNUQU5DRSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlGYWN0b3J5SW1wbCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURlc2NyaXB0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JTmFtZSBjcmVhdGVOYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnkgY3JlYXRlUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnlQYWNrYWdlIGdldFJlZ2lzdHJ5UGFja2FnZSgpOwotCi19IC8vUmVnaXN0cnlGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeVBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5UGFja2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDhmMWU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5UGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcwICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlQYWNrYWdlLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiAKLSAqICAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLgotICogCi0gKiAgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0KLSAqICAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAKLSAqIAotICogICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZAotICogICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZQotICogICAgIGZvbGxvd2luZyBuYW1lcyBhcmUgY3VycmVudGx5IGRlZmluZWQgaW4gdGhpcyBuYW1lc3BhY2UgYW5kIHNob3VsZAotICogICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLAotICogICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOgotICogCi0gKiAgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueQotICogICAgICAgICAgcmVsYXRpdmUgVVJJcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggaXQKLSAqICAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELgotICogICAgICAgICAgVGhlIHhtbDppZCBzcGVjaWZpY2F0aW9uIGlzIG5vdCB5ZXQgYSBXM0MgUmVjb21tZW5kYXRpb24sCi0gKiAgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbgotICogICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZAotICogICAgICAgICAgaW4gdGhlIHNwZWNpYWxBdHRycyBhdHRyaWJ1dGUgZ3JvdXAuCi0gKiAKLSAqICAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBpcyBhIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBuYXR1cmFsIGxhbmd1YWdlIG9mIHRoZSBjb250ZW50IG9mCi0gKiAgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqICAgCi0gKiAgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UKLSAqICAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nCi0gKiAgICAgICAgICBkaXNjaXBsaW5lIGlzIGludGVuZGVkIGZvciB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudDsgaXRzCi0gKiAgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cwotICogICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgCi0gKiAgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgCi0gKiAgICAgICAgICB0aGUgZm9sbG93aW5nIGRlY2lzaW9uIG9mIHRoZSBXM0MgWE1MIFBsZW5hcnkgYW5kIAotICogICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6Ci0gKiAKLSAqICAgICAgICAgICAgICBJbiBhcHByZWNpYXRpb24gZm9yIGhpcyB2aXNpb24sIGxlYWRlcnNoaXAgYW5kIGRlZGljYXRpb24KLSAqICAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAKLSAqICAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lCi0gKiAgICAgICAgICAgICAgeG1sOkZhdGhlcgotICogICAKLSAqIFRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwCi0gKiAgICAgICAgIHN1aXRhYmxlIGZvciB1c2UgYnkKLSAqICAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZAotICogICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLgotICogCi0gKiAgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hCi0gKiAgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgotICogICAgICAgICAmbHQ7c2NoZW1hIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gKiAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLyZndDsKLSAqIAotICogICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzCi0gKiAgICAgICAgIG9yIHRoZSBncm91cCBkZWZpbmVkIGJlbG93IHdpbGwgaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QsIGUuZy4KLSAqIAotICogICAgICAgICAmbHQ7dHlwZSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWw6c3BlY2lhbEF0dHJzIi8mZ3Q7Ci0gKiAgCi0gKiAgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UKLSAqICAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcwotICogSW4ga2VlcGluZyB3aXRoIHRoZSBYTUwgU2NoZW1hIFdHJ3Mgc3RhbmRhcmQgdmVyc2lvbmluZwotICogICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4KLSAqICAgIEF0IHRoZSBkYXRlIG9mIGlzc3VlIGl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuCi0gKiAgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAotICogICAgaW4gb3JkZXIgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgWE1MIFNjaGVtYQotICogICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MCi0gKiAgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAqICAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAqICAgCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlGYWN0b3J5Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVnaXN0cnlQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgewotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOQU1FID0gInJlZ2lzdHJ5IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19QUkVGSVggPSAicmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeVBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGwuaW5pdCgpOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRGVzY3JpcHRpb25JbXBsIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5EZXNjcmlwdGlvbkltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OX19WQUxVRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OX19MQU5HID0gMTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsIDxlbT5Eb2N1bWVudCBSb290PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTUlYRUQgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19ERVNDUklQVElPTiA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX05BTUUgPSA0OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlkgPSA1OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfRkVBVFVSRV9DT1VOVCA9IDY7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5OYW1lSW1wbCA8ZW0+TmFtZTwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5OYW1lSW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgTkFNRSA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX19WQUxVRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX0xBTkcgPSAxOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5OYW1lPC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwgPGVtPlJlZ2lzdHJ5PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgUkVHSVNUUlkgPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX19OQU1FID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgUkVHSVNUUllfX0RFU0NSSVBUSU9OID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX19JRCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBSRUdJU1RSWV9fTE9DQVRJT04gPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX19SRUYgPSA0OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBSRUdJU1RSWV9GRUFUVVJFX0NPVU5UID0gNTsKLQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRWYWx1ZSgpCi0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX1ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxhbmc8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldExhbmcoKQotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9MYW5nKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldERvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+TWl4ZWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRSZWdpc3RyeSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXROYW1lXygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsdWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0VmFsdWUoKQotCSAqIEBzZWUgI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXROYW1lX1ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGFuZzwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRMYW5nKCkKLQkgKiBAc2VlICNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldFJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0UmVnaXN0cnlfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBzZWUgI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRSZWdpc3RyeV9EZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldElkIDxlbT5JZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPklkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRJZCgpCi0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFJlZ2lzdHJ5X0lkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldExvY2F0aW9uKCkKLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRSZWYgPGVtPlJlZjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlZjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0UmVmKCkKLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfUmVmKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeUZhY3RvcnkgZ2V0UmVnaXN0cnlGYWN0b3J5KCk7Ci0KLX0gLy9SZWdpc3RyeVBhY2thZ2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0Rlc2NyaXB0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTFkOTQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEZXNjcmlwdGlvbkltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5EZXNjcmlwdGlvbkltcGwjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRGVzY3JpcHRpb25JbXBsI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEZXNjcmlwdGlvbkltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERlc2NyaXB0aW9uIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdmFsdWUgPSBWQUxVRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxhbmcgPSBMQU5HX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERlc2NyaXB0aW9uSW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVzY3JpcHRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCVN0cmluZyBvbGRWYWx1ZSA9IHZhbHVlOwotCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmcoKSB7Ci0JCXJldHVybiBsYW5nOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmcoU3RyaW5nIG5ld0xhbmcpIHsKLQkJU3RyaW5nIG9sZExhbmcgPSBsYW5nOwotCQlsYW5nID0gbmV3TGFuZzsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HLCBvbGRMYW5nLCBsYW5nKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXJldHVybiBnZXRWYWx1ZSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJcmV0dXJuIGdldExhbmcoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJc2V0TGFuZygoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlzZXRMYW5nKExBTkdfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXJldHVybiBWQUxVRV9FREVGQVVMVCA9PSBudWxsID8gdmFsdWUgIT0gbnVsbCA6ICFWQUxVRV9FREVGQVVMVC5lcXVhbHModmFsdWUpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJcmV0dXJuIExBTkdfRURFRkFVTFQgPT0gbnVsbCA/IGxhbmcgIT0gbnVsbCA6ICFMQU5HX0VERUZBVUxULmVxdWFscyhsYW5nKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbGFuZzogIik7Ci0JCXJlc3VsdC5hcHBlbmQobGFuZyk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0Rlc2NyaXB0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzMmUzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkJhc2ljRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZUVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50Um9vdEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvY3VtZW50Um9vdCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWl4ZWQoKSA8ZW0+TWl4ZWQ8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TWl4ZWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBGZWF0dXJlTWFwIG1peGVkID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhNTE5TUHJlZml4TWFwKCkgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4TUxOU1ByZWZpeE1hcCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeFNJU2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERvY3VtZW50Um9vdEltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBGZWF0dXJlTWFwIGdldE1peGVkKCkgewotCQlpZiAobWl4ZWQgPT0gbnVsbCkgewotCQkJbWl4ZWQgPSBuZXcgQmFzaWNGZWF0dXJlTWFwKHRoaXMsIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCX0KLQkJcmV0dXJuIG1peGVkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhNTE5TUHJlZml4TWFwKCkgewotCQlpZiAoeE1MTlNQcmVmaXhNYXAgPT0gbnVsbCkgewotCQkJeE1MTlNQcmVmaXhNYXAgPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCX0KLQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlpZiAoeFNJU2NoZW1hTG9jYXRpb24gPT0gbnVsbCkgewotCQkJeFNJU2NoZW1hTG9jYXRpb24gPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCX0KLQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChEZXNjcmlwdGlvbilnZXRNaXhlZCgpLmdldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBuZXdEZXNjcmlwdGlvbiwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIG5ld0Rlc2NyaXB0aW9uLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBuZXdEZXNjcmlwdGlvbikgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIG5ld0Rlc2NyaXB0aW9uKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTmFtZSBnZXROYW1lKCkgewotCQlyZXR1cm4gKE5hbWUpZ2V0TWl4ZWQoKS5nZXQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXROYW1lKE5hbWUgbmV3TmFtZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgbmV3TmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZShOYW1lIG5ld05hbWUpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIG5ld05hbWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBnZXRSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIChSZWdpc3RyeSlnZXRNaXhlZCgpLmdldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRSZWdpc3RyeShSZWdpc3RyeSBuZXdSZWdpc3RyeSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCksIG5ld1JlZ2lzdHJ5LCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZWdpc3RyeShSZWdpc3RyeSBuZXdSZWdpc3RyeSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCksIG5ld1JlZ2lzdHJ5KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRNaXhlZCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYTUxOU1ByZWZpeE1hcCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYU0lTY2hlbWFMb2NhdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJCXJldHVybiBiYXNpY1NldERlc2NyaXB0aW9uKG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJCXJldHVybiBiYXNpY1NldE5hbWUobnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlk6Ci0JCQkJCXJldHVybiBiYXNpY1NldFJlZ2lzdHJ5KG51bGwsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIGdldE1peGVkKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIGdldFJlZ2lzdHJ5KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCWdldE1peGVkKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXNldERlc2NyaXB0aW9uKChEZXNjcmlwdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlzZXROYW1lKChOYW1lKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19SRUdJU1RSWToKLQkJCQlzZXRSZWdpc3RyeSgoUmVnaXN0cnkpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJc2V0RGVzY3JpcHRpb24oKERlc2NyaXB0aW9uKW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJc2V0TmFtZSgoTmFtZSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19SRUdJU1RSWToKLQkJCQlzZXRSZWdpc3RyeSgoUmVnaXN0cnkpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gbWl4ZWQgIT0gbnVsbCAmJiAhbWl4ZWQuaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4geE1MTlNQcmVmaXhNYXAgIT0gbnVsbCAmJiAheE1MTlNQcmVmaXhNYXAuaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiAheFNJU2NoZW1hTG9jYXRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCkgIT0gbnVsbDsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKSAhPSBudWxsOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIGdldFJlZ2lzdHJ5KCkgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKG1peGVkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChtaXhlZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0RvY3VtZW50Um9vdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvTmFtZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvTmFtZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNjZWY3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL05hbWVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5OYW1lSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5OYW1lSW1wbCNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTmFtZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIE5hbWUgewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFOR19FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbGFuZyA9IExBTkdfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgTmFtZUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldE5hbWVfKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewotCQlTdHJpbmcgb2xkVmFsdWUgPSB2YWx1ZTsKLQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmcoKSB7Ci0JCXJldHVybiBsYW5nOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmcoU3RyaW5nIG5ld0xhbmcpIHsKLQkJU3RyaW5nIG9sZExhbmcgPSBsYW5nOwotCQlsYW5nID0gbmV3TGFuZzsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX0xBTkcsIG9sZExhbmcsIGxhbmcpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIGdldExhbmcoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlzZXRWYWx1ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoTEFOR19FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIExBTkdfRURFRkFVTFQgPT0gbnVsbCA/IGxhbmcgIT0gbnVsbCA6ICFMQU5HX0VERUZBVUxULmVxdWFscyhsYW5nKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbGFuZzogIik7Ci0JCXJlc3VsdC5hcHBlbmQobGFuZyk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL05hbWVJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2YyYzE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5RmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBSZWdpc3RyeUZhY3RvcnkgewotCS8qKgotCSAqIENyZWF0ZXMgYW5kIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7Ci0JCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTjogcmV0dXJuIGNyZWF0ZURlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UOiByZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FOiByZXR1cm4gY3JlYXRlTmFtZSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUlk6IHJldHVybiBjcmVhdGVSZWdpc3RyeSgpOwotCQkJZGVmYXVsdDoKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERlc2NyaXB0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKCkgewotCQlEZXNjcmlwdGlvbkltcGwgZGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb25JbXBsKCk7Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpIHsKLQkJRG9jdW1lbnRSb290SW1wbCBkb2N1bWVudFJvb3QgPSBuZXcgRG9jdW1lbnRSb290SW1wbCgpOwotCQlyZXR1cm4gZG9jdW1lbnRSb290OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGNyZWF0ZU5hbWUoKSB7Ci0JCU5hbWVJbXBsIG5hbWUgPSBuZXcgTmFtZUltcGwoKTsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IGNyZWF0ZVJlZ2lzdHJ5KCkgewotCQlSZWdpc3RyeUltcGwgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlJbXBsKCk7Ci0JCXJldHVybiByZWdpc3RyeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlQYWNrYWdlIGdldFJlZ2lzdHJ5UGFja2FnZSgpIHsKLQkJcmV0dXJuIChSZWdpc3RyeVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBkZXByZWNhdGVkCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVnaXN0cnlQYWNrYWdlIGdldFBhY2thZ2UoKSB7Ci0JCXJldHVybiBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFOwotCX0KLQotfSAvL1JlZ2lzdHJ5RmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTcxZTdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbCNnZXRJZCA8ZW0+SWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsI2dldFJlZiA8ZW0+UmVmPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBSZWdpc3RyeSB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBuYW1lID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgZGVzY3JpcHRpb24gPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkKCkgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRJZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWQoKSA8ZW0+SWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGlkID0gSURfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb24gPSBMT0NBVElPTl9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWYoKSA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWYoKSA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgcmVmID0gUkVGX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFJlZ2lzdHJ5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0UmVnaXN0cnkoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0TmFtZSgpIHsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChOYW1lLmNsYXNzLCB0aGlzLCBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUUpOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXREZXNjcmlwdGlvbigpIHsKLQkJaWYgKGRlc2NyaXB0aW9uID09IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KERlc2NyaXB0aW9uLmNsYXNzLCB0aGlzLCBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0RFU0NSSVBUSU9OKTsKLQkJfQotCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQkJcmV0dXJuIGlkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBuZXdJZCkgewotCQlTdHJpbmcgb2xkSWQgPSBpZDsKLQkJaWQgPSBuZXdJZDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRCwgb2xkSWQsIGlkKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpIHsKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQlTdHJpbmcgb2xkTG9jYXRpb24gPSBsb2NhdGlvbjsKLQkJbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTiwgb2xkTG9jYXRpb24sIGxvY2F0aW9uKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRSZWYoKSB7Ci0JCXJldHVybiByZWY7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVmKFN0cmluZyBuZXdSZWYpIHsKLQkJU3RyaW5nIG9sZFJlZiA9IHJlZjsKLQkJcmVmID0gbmV3UmVmOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRiwgb2xkUmVmLCByZWYpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXROYW1lKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RGVzY3JpcHRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRDoKLQkJCQlyZXR1cm4gZ2V0SWQoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0TG9jYXRpb24oKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19SRUY6Ci0JCQkJcmV0dXJuIGdldFJlZigpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCWdldE5hbWUoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRDoKLQkJCQlzZXRJZCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRjoKLQkJCQlzZXRSZWYoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0lEOgotCQkJCXNldElkKElEX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oTE9DQVRJT05fRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19SRUY6Ci0JCQkJc2V0UmVmKFJFRl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRToKLQkJCQlyZXR1cm4gbmFtZSAhPSBudWxsICYmICFuYW1lLmlzRW1wdHkoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZGVzY3JpcHRpb24gIT0gbnVsbCAmJiAhZGVzY3JpcHRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0lEOgotCQkJCXJldHVybiBJRF9FREVGQVVMVCA9PSBudWxsID8gaWQgIT0gbnVsbCA6ICFJRF9FREVGQVVMVC5lcXVhbHMoaWQpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXJldHVybiBMT0NBVElPTl9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb24gIT0gbnVsbCA6ICFMT0NBVElPTl9FREVGQVVMVC5lcXVhbHMobG9jYXRpb24pOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRjoKLQkJCQlyZXR1cm4gUkVGX0VERUZBVUxUID09IG51bGwgPyByZWYgIT0gbnVsbCA6ICFSRUZfRURFRkFVTFQuZXF1YWxzKHJlZik7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiIChpZDogIik7Ci0JCXJlc3VsdC5hcHBlbmQoaWQpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGxvY2F0aW9uOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgcmVmOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChyZWYpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9SZWdpc3RyeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZjliZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlhNTFR5cGVQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwuWE1MVHlwZVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFJlZ2lzdHJ5UGFja2FnZSB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgZGVzY3JpcHRpb25FQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgZG9jdW1lbnRSb290RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIG5hbWVFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgcmVnaXN0cnlFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAotCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0JICogcGFja2FnZSBVUkkgdmFsdWUuCi0JICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYwotCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0JICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLQkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZU5TX1VSSQotCSAqIEBzZWUgI2luaXQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIFJlZ2lzdHJ5UGFja2FnZUltcGwoKSB7Ci0JCXN1cGVyKGVOU19VUkksIFJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0JICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLQkgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLQkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0JICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLQkgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0JICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0JICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotCSAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0JICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLQkgKiB0aG9zZSBvZiBhbm90aGVyLgotCSAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLQkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNlTlNfVVJJCi0JICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBSZWdpc3RyeVBhY2thZ2UgaW5pdCgpIHsKLQkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFJlZ2lzdHJ5UGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotCQlSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVJlZ2lzdHJ5UGFja2FnZSA9IChSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBSZWdpc3RyeVBhY2thZ2VJbXBsKCkpOwotCi0JCWlzSW5pdGVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcwotCQlSVEluZGV4UGFja2FnZUltcGwgdGhlUlRJbmRleFBhY2thZ2UgPSAoUlRJbmRleFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJUSW5kZXhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIDogUlRJbmRleFBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRheG9ub215UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSkgOiBUYXhvbm9teVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVVERElSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVVERElSZWdpc3RyeVBhY2thZ2UgPSAoVURESVJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgOiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCi0JCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCi0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCi0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJUSW5kZXhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAotCQl0aGVSZWdpc3RyeVBhY2thZ2UuZnJlZXplKCk7Ci0KLQkJcmV0dXJuIHRoZVJlZ2lzdHJ5UGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gZGVzY3JpcHRpb25FQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkZXNjcmlwdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX0xhbmcoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkZXNjcmlwdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCkgewotCQlyZXR1cm4gZG9jdW1lbnRSb290RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXROYW1lXygpIHsKLQkJcmV0dXJuIG5hbWVFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9WYWx1ZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKW5hbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXROYW1lX0xhbmcoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIHJlZ2lzdHJ5RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlZ2lzdHJ5X05hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlyZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlZ2lzdHJ5X0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpcmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSZWdpc3RyeV9JZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlyZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFJlZ2lzdHJ5X1JlZigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5RmFjdG9yeSBnZXRSZWdpc3RyeUZhY3RvcnkoKSB7Ci0JCXJldHVybiAoUmVnaXN0cnlGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLQkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47Ci0JCWlzQ3JlYXRlZCA9IHRydWU7Ci0KLQkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCi0JCWRlc2NyaXB0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFU0NSSVBUSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkZXNjcmlwdGlvbkVDbGFzcywgREVTQ1JJUFRJT05fX1ZBTFVFKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkZXNjcmlwdGlvbkVDbGFzcywgREVTQ1JJUFRJT05fX0xBTkcpOwotCi0JCWRvY3VtZW50Um9vdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhET0NVTUVOVF9ST09UKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19ERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19OQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1JFR0lTVFJZKTsKLQotCQluYW1lRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5BTUUpOwotCQljcmVhdGVFQXR0cmlidXRlKG5hbWVFQ2xhc3MsIE5BTUVfX1ZBTFVFKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShuYW1lRUNsYXNzLCBOQU1FX19MQU5HKTsKLQotCQlyZWdpc3RyeUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhSRUdJU1RSWSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UocmVnaXN0cnlFQ2xhc3MsIFJFR0lTVFJZX19OQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX0RFU0NSSVBUSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX0lEKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX1JFRik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0JICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOwotCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKLQkJc2V0TmFtZShlTkFNRSk7Ci0JCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotCQlzZXROc1VSSShlTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbCB0aGVYTUxUeXBlUGFja2FnZSA9IChYTUxUeXBlUGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoWE1MVHlwZVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotCi0JCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0JCWluaXRFQ2xhc3MoZGVzY3JpcHRpb25FQ2xhc3MsIERlc2NyaXB0aW9uLmNsYXNzLCAiRGVzY3JpcHRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERlc2NyaXB0aW9uX1ZhbHVlKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBEZXNjcmlwdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERlc2NyaXB0aW9uX0xhbmcoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0TGFuZ3VhZ2UoKSwgImxhbmciLCBudWxsLCAwLCAxLCBEZXNjcmlwdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhkb2N1bWVudFJvb3RFQ2xhc3MsIERvY3VtZW50Um9vdC5jbGFzcywgIkRvY3VtZW50Um9vdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIGVjb3JlUGFja2FnZS5nZXRFRmVhdHVyZU1hcEVudHJ5KCksICJtaXhlZCIsIG51bGwsIDAsIC0xLCBudWxsLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieE1MTlNQcmVmaXhNYXAiLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieFNJU2NoZW1hTG9jYXRpb24iLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSwgbnVsbCwgImRlc2NyaXB0aW9uIiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9OYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5hbWUiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCksIHRoaXMuZ2V0UmVnaXN0cnkoKSwgbnVsbCwgInJlZ2lzdHJ5IiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhuYW1lRUNsYXNzLCBOYW1lLmNsYXNzLCAiTmFtZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0TmFtZV9WYWx1ZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInZhbHVlIiwgbnVsbCwgMCwgMSwgTmFtZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldE5hbWVfTGFuZygpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRMYW5ndWFnZSgpLCAibGFuZyIsIG51bGwsIDAsIDEsIE5hbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MocmVnaXN0cnlFQ2xhc3MsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICJSZWdpc3RyeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0UmVnaXN0cnlfTmFtZSgpLCB0aGlzLmdldE5hbWVfKCksIG51bGwsICJuYW1lIiwgbnVsbCwgMSwgLTEsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldFJlZ2lzdHJ5X0Rlc2NyaXB0aW9uKCksIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSwgbnVsbCwgImRlc2NyaXB0aW9uIiwgbnVsbCwgMSwgLTEsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFJlZ2lzdHJ5X0lkKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAiaWQiLCBudWxsLCAwLCAxLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0UmVnaXN0cnlfTG9jYXRpb24oKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJsb2NhdGlvbiIsIG51bGwsIDAsIDEsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRSZWdpc3RyeV9SZWYoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJyZWYiLCBudWxsLCAwLCAxLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQkvLyBDcmVhdGUgcmVzb3VyY2UKLQkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0KLQkJLy8gQ3JlYXRlIGFubm90YXRpb25zCi0JCS8vIGh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YQotCQljcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgYW5ub3RhdGlvbnMgZm9yIDxiPmh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YTwvYj4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCkgewotCQlTdHJpbmcgc291cmNlID0gImh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI7CQkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZGVzY3JpcHRpb25FQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIkRlc2NyaXB0aW9uIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiOjAiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREZXNjcmlwdGlvbl9MYW5nKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibGFuZyIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZG9jdW1lbnRSb290RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICIiLAotCQkJICJraW5kIiwgIm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50V2lsZGNhcmQiLAotCQkJICJuYW1lIiwgIjptaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4bWxuczpwcmVmaXgiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieHNpOnNjaGVtYUxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZXNjcmlwdGlvbiIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJuYW1lIiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJyZWdpc3RyeSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChuYW1lRUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJOYW1lIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0TmFtZV9WYWx1ZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICI6MCIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfTGFuZygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxhbmciLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKHJlZ2lzdHJ5RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJSZWdpc3RyeSIsCi0JCQkgImtpbmQiLCAiZWxlbWVudE9ubHkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0UmVnaXN0cnlfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFJlZ2lzdHJ5X0Rlc2NyaXB0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImRlc2NyaXB0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFJlZ2lzdHJ5X0lkKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAiaWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0UmVnaXN0cnlfTG9jYXRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRSZWdpc3RyeV9SZWYoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJyZWYiCi0JCSAgIH0pOwotCX0KLQotfSAvL1JlZ2lzdHJ5UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYjIwNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFJlZ2lzdHJ5UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkoKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBSZWdpc3RyeVN3aXRjaCBtb2RlbFN3aXRjaCA9Ci0JCW5ldyBSZWdpc3RyeVN3aXRjaCgpIHsKLQkJCXB1YmxpYyBPYmplY3QgY2FzZURlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVEZXNjcmlwdGlvbkFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZU5hbWUoTmFtZSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlTmFtZUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVJlZ2lzdHJ5KFJlZ2lzdHJ5IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVSZWdpc3RyeUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLQkJCX0KLQkJfTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0JICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCXJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotCX0KLQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlc2NyaXB0aW9uQWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlTmFtZUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWdpc3RyeUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9SZWdpc3RyeUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3ODcyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUxIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkV4dGVuZGVkTWV0YURhdGE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlRmFjdG9yeUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsLlJlZ2lzdHJ5UmVzb3VyY2VJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRXh0ZW5kZWRNZXRhRGF0YSBleHRlbmRlZE1ldGFEYXRhOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCQlleHRlbmRlZE1ldGFEYXRhID0gRXh0ZW5kZWRNZXRhRGF0YS5JTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgewotCQlYTUxSZXNvdXJjZSByZXN1bHQgPSBuZXcgUmVnaXN0cnlSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfSAvL1JlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWJmYzAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUxIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LnV0aWwuUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVJlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5UmVzb3VyY2VJbXBsKFVSSSB1cmkpIHsKLQkJc3VwZXIodXJpKTsKLQl9Ci0KLX0gLy9SZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc5MzcwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5U3dpdGNoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeVN3aXRjaC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTEgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5U3dpdGNoIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFJlZ2lzdHJ5UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5U3dpdGNoKCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0JCQlyZXR1cm4KLQkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPwotCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6Ci0JCQkJCWRvU3dpdGNoKChFQ2xhc3MpZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OOiB7Ci0JCQkJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UOiB7Ci0JCQkJRG9jdW1lbnRSb290IGRvY3VtZW50Um9vdCA9IChEb2N1bWVudFJvb3QpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURvY3VtZW50Um9vdChkb2N1bWVudFJvb3QpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUU6IHsKLQkJCQlOYW1lIG5hbWUgPSAoTmFtZSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlTmFtZShuYW1lKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWTogewotCQkJCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gKFJlZ2lzdHJ5KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VSZWdpc3RyeShyZWdpc3RyeSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZVJlZ2lzdHJ5KFJlZ2lzdHJ5IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9SZWdpc3RyeVN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9EZXNjcmlwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9EZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTc3NjMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvRGVzY3JpcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRGVzY3JpcHRpb24uamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RGVzY3JpcHRpb24oKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERlc2NyaXB0aW9uIGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRWYWx1ZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RGVzY3JpcHRpb25fVmFsdWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExhbmcoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERlc2NyaXB0aW9uX0xhbmcoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkxhbmd1YWdlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TGFuZygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBEZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9Eb2N1bWVudFJvb3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvRG9jdW1lbnRSb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MzM4OGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9Eb2N1bWVudFJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0SW5kZXggPGVtPkluZGV4PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3QoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERvY3VtZW50Um9vdCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcC5FbnRyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERvY3VtZW50Um9vdF9NaXhlZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZlYXR1cmVNYXBFbnRyeSIgbWFueT0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRmVhdHVyZU1hcCBnZXRNaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbikKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5kZXg8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluZGV4PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluZGV4PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRJbmRleChJbmRleCkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3RfSW5kZXgoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlJbmRleCBnZXRJbmRleCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRJbmRleCA8ZW0+SW5kZXg8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluZGV4PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRJbmRleCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0SW5kZXgoSW5kZXggdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXROYW1lKE5hbWUpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X05hbWUoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TmFtZShOYW1lIHZhbHVlKTsKLQotfSAvLyBEb2N1bWVudFJvb3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvSW5kZXguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvSW5kZXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhYTRhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0luZGV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IEluZGV4LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbmRleDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBJbmRleCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXRJbmRleF9OYW1lKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbn0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4X0Rlc2NyaXB0aW9uKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4X1JlZ2lzdHJ5KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0UmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4X1RheG9ub215KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0VGF4b25vbXkoKTsKLQotfSAvLyBJbmRleApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9OYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L05hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE0NWZiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L05hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogTmFtZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXROYW1lXygpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTmFtZSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmFsdWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldE5hbWVfVmFsdWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TGFuZyhTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0TmFtZV9MYW5nKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5MYW5ndWFnZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExhbmcoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBOYW1lCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZGI3MDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9SVEluZGV4RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4RmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUlRJbmRleEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7Ci0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSVEluZGV4RmFjdG9yeSBlSU5TVEFOQ0UgPSBuZXcgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleEZhY3RvcnlJbXBsKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRGVzY3JpcHRpb24gY3JlYXRlRGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbmRleDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5kZXg8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUluZGV4IGNyZWF0ZUluZGV4KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCU5hbWUgY3JlYXRlTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSVEluZGV4UGFja2FnZSBnZXRSVEluZGV4UGFja2FnZSgpOwotCi19IC8vUlRJbmRleEZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvUlRJbmRleFBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvUlRJbmRleFBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FkMmJkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhQYWNrYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTAgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4UGFja2FnZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiAKLSAqICAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLgotICogCi0gKiAgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0KLSAqICAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAKLSAqIAotICogICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZAotICogICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZQotICogICAgIGZvbGxvd2luZyBuYW1lcyBhcmUgY3VycmVudGx5IGRlZmluZWQgaW4gdGhpcyBuYW1lc3BhY2UgYW5kIHNob3VsZAotICogICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLAotICogICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOgotICogCi0gKiAgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueQotICogICAgICAgICAgcmVsYXRpdmUgVVJJcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggaXQKLSAqICAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELgotICogICAgICAgICAgVGhlIHhtbDppZCBzcGVjaWZpY2F0aW9uIGlzIG5vdCB5ZXQgYSBXM0MgUmVjb21tZW5kYXRpb24sCi0gKiAgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbgotICogICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZAotICogICAgICAgICAgaW4gdGhlIHNwZWNpYWxBdHRycyBhdHRyaWJ1dGUgZ3JvdXAuCi0gKiAKLSAqICAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBpcyBhIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBuYXR1cmFsIGxhbmd1YWdlIG9mIHRoZSBjb250ZW50IG9mCi0gKiAgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqICAgCi0gKiAgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UKLSAqICAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nCi0gKiAgICAgICAgICBkaXNjaXBsaW5lIGlzIGludGVuZGVkIGZvciB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudDsgaXRzCi0gKiAgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cwotICogICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgCi0gKiAgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgCi0gKiAgICAgICAgICB0aGUgZm9sbG93aW5nIGRlY2lzaW9uIG9mIHRoZSBXM0MgWE1MIFBsZW5hcnkgYW5kIAotICogICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6Ci0gKiAKLSAqICAgICAgICAgICAgICBJbiBhcHByZWNpYXRpb24gZm9yIGhpcyB2aXNpb24sIGxlYWRlcnNoaXAgYW5kIGRlZGljYXRpb24KLSAqICAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAKLSAqICAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lCi0gKiAgICAgICAgICAgICAgeG1sOkZhdGhlcgotICogICAKLSAqIFRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwCi0gKiAgICAgICAgIHN1aXRhYmxlIGZvciB1c2UgYnkKLSAqICAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZAotICogICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLgotICogCi0gKiAgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hCi0gKiAgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgotICogICAgICAgICAmbHQ7c2NoZW1hIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gKiAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLyZndDsKLSAqIAotICogICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzCi0gKiAgICAgICAgIG9yIHRoZSBncm91cCBkZWZpbmVkIGJlbG93IHdpbGwgaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QsIGUuZy4KLSAqIAotICogICAgICAgICAmbHQ7dHlwZSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWw6c3BlY2lhbEF0dHJzIi8mZ3Q7Ci0gKiAgCi0gKiAgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UKLSAqICAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcwotICogSW4ga2VlcGluZyB3aXRoIHRoZSBYTUwgU2NoZW1hIFdHJ3Mgc3RhbmRhcmQgdmVyc2lvbmluZwotICogICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4KLSAqICAgIEF0IHRoZSBkYXRlIG9mIGlzc3VlIGl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuCi0gKiAgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAotICogICAgaW4gb3JkZXIgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgWE1MIFNjaGVtYQotICogICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MCi0gKiAgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAqICAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAqICAgCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4RmFjdG9yeQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJUSW5kZXhQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgewotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOQU1FID0gInJ0aW5kZXgiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfUFJFRklYID0gInJ0aW5kZXgiOwotCi0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSVEluZGV4UGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGwuaW5pdCgpOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5EZXNjcmlwdGlvbkltcGwgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRGVzY3JpcHRpb25JbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGwjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT04gPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fX1ZBTFVFID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fX0xBTkcgPSAxOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBERVNDUklQVElPTl9GRUFUVVJFX0NPVU5UID0gMjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbCNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX01JWEVEID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04gPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT04gPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZGV4PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fSU5ERVggPSA0OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19OQU1FID0gNTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX0ZFQVRVUkVfQ09VTlQgPSA2OwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwgPGVtPkluZGV4PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuSW5kZXhJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGwjZ2V0SW5kZXgoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgSU5ERVggPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IElOREVYX19OQU1FID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfX0RFU0NSSVBUSU9OID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfX1JFR0lTVFJZID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfX1RBWE9OT01ZID0gMzsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+SW5kZXg8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfRkVBVFVSRV9DT1VOVCA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLk5hbWVJbXBsIDxlbT5OYW1lPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuTmFtZUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbCNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBOQU1FID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX1ZBTFVFID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9fTEFORyA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPk5hbWU8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9GRUFUVVJFX0NPVU5UID0gMjsKLQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldFZhbHVlKCkKLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fVmFsdWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MYW5nPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldExhbmcoKQotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9MYW5nKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+TWl4ZWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE1peGVkKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0SW5kZXggPGVtPkluZGV4PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+SW5kZXg8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldEluZGV4KCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9JbmRleCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXggPGVtPkluZGV4PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkluZGV4PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXRJbmRleCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldEluZGV4KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRJbmRleF9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBzZWUgI2dldEluZGV4KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRJbmRleF9EZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXRSZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFJlZ2lzdHJ5KCkKLQkgKiBAc2VlICNnZXRJbmRleCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0SW5kZXhfUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXRUYXhvbm9teSgpCi0JICogQHNlZSAjZ2V0SW5kZXgoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldEluZGV4X1RheG9ub215KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldE5hbWVfKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0VmFsdWUoKQotCSAqIEBzZWUgI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXROYW1lX1ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MYW5nPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0TGFuZygpCi0JICogQHNlZSAjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldE5hbWVfTGFuZygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUlRJbmRleEZhY3RvcnkgZ2V0UlRJbmRleEZhY3RvcnkoKTsKLQotfSAvL1JUSW5kZXhQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmOGNiNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0Rlc2NyaXB0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRGVzY3JpcHRpb25JbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRlc2NyaXB0aW9uSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRlc2NyaXB0aW9uSW1wbCNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRGVzY3JpcHRpb25JbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEZXNjcmlwdGlvbiB7Ci0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQU5HX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBsYW5nID0gTEFOR19FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBEZXNjcmlwdGlvbkltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVzY3JpcHRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCVN0cmluZyBvbGRWYWx1ZSA9IHZhbHVlOwotCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZygpIHsKLQkJcmV0dXJuIGxhbmc7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGFuZyhTdHJpbmcgbmV3TGFuZykgewotCQlTdHJpbmcgb2xkTGFuZyA9IGxhbmc7Ci0JCWxhbmcgPSBuZXdMYW5nOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fTEFORywgb2xkTGFuZywgbGFuZykpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXJldHVybiBnZXRWYWx1ZSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlyZXR1cm4gZ2V0TGFuZygpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXNldFZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJc2V0TGFuZygoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJc2V0TGFuZyhMQU5HX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXJldHVybiBWQUxVRV9FREVGQVVMVCA9PSBudWxsID8gdmFsdWUgIT0gbnVsbCA6ICFWQUxVRV9FREVGQVVMVC5lcXVhbHModmFsdWUpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlyZXR1cm4gTEFOR19FREVGQVVMVCA9PSBudWxsID8gbGFuZyAhPSBudWxsIDogIUxBTkdfRURFRkFVTFQuZXF1YWxzKGxhbmcpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmFsdWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsYW5nOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsYW5nKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vRGVzY3JpcHRpb25JbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ4ZGJjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5CYXNpY0ZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0SW5kZXggPGVtPkluZGV4PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudFJvb3RJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEb2N1bWVudFJvb3QgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1peGVkKCkgPGVtPk1peGVkPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE1peGVkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRmVhdHVyZU1hcCBtaXhlZCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYTUxOU1ByZWZpeE1hcCgpIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeE1MTlNQcmVmaXhNYXAgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhTSVNjaGVtYUxvY2F0aW9uID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBEb2N1bWVudFJvb3RJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBGZWF0dXJlTWFwIGdldE1peGVkKCkgewotCQlpZiAobWl4ZWQgPT0gbnVsbCkgewotCQkJbWl4ZWQgPSBuZXcgQmFzaWNGZWF0dXJlTWFwKHRoaXMsIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJfQotCQlyZXR1cm4gbWl4ZWQ7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKSB7Ci0JCWlmICh4TUxOU1ByZWZpeE1hcCA9PSBudWxsKSB7Ci0JCQl4TUxOU1ByZWZpeE1hcCA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQl9Ci0JCXJldHVybiB4TUxOU1ByZWZpeE1hcDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJaWYgKHhTSVNjaGVtYUxvY2F0aW9uID09IG51bGwpIHsKLQkJCXhTSVNjaGVtYUxvY2F0aW9uID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCX0KLQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChEZXNjcmlwdGlvbilnZXRNaXhlZCgpLmdldChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG5ld0Rlc2NyaXB0aW9uLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCBuZXdEZXNjcmlwdGlvbiwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gbmV3RGVzY3JpcHRpb24pIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIG5ld0Rlc2NyaXB0aW9uKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgSW5kZXggZ2V0SW5kZXgoKSB7Ci0JCXJldHVybiAoSW5kZXgpZ2V0TWl4ZWQoKS5nZXQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9JbmRleCgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRJbmRleChJbmRleCBuZXdJbmRleCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfSW5kZXgoKSwgbmV3SW5kZXgsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEluZGV4KEluZGV4IG5ld0luZGV4KSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9JbmRleCgpLCBuZXdJbmRleCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5hbWUgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIChOYW1lKWdldE1peGVkKCkuZ2V0KFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXROYW1lKE5hbWUgbmV3TmFtZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCBuZXdOYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lKE5hbWUgbmV3TmFtZSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCBuZXdOYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE1peGVkKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WE1MTlNQcmVmaXhNYXAoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYU0lTY2hlbWFMb2NhdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQkJcmV0dXJuIGJhc2ljU2V0RGVzY3JpcHRpb24obnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19JTkRFWDoKLQkJCQkJcmV0dXJuIGJhc2ljU2V0SW5kZXgobnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCQlyZXR1cm4gYmFzaWNTZXROYW1lKG51bGwsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gZ2V0TWl4ZWQoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4gZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0lOREVYOgotCQkJCXJldHVybiBnZXRJbmRleCgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJZ2V0TWl4ZWQoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJc2V0RGVzY3JpcHRpb24oKERlc2NyaXB0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0lOREVYOgotCQkJCXNldEluZGV4KChJbmRleCluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXNldE5hbWUoKE5hbWUpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlzZXREZXNjcmlwdGlvbigoRGVzY3JpcHRpb24pbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19JTkRFWDoKLQkJCQlzZXRJbmRleCgoSW5kZXgpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXNldE5hbWUoKE5hbWUpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBtaXhlZCAhPSBudWxsICYmICFtaXhlZC5pc0VtcHR5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwICE9IG51bGwgJiYgIXhNTE5TUHJlZml4TWFwLmlzRW1wdHkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiAheFNJU2NoZW1hTG9jYXRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKSAhPSBudWxsOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19JTkRFWDoKLQkJCQlyZXR1cm4gZ2V0SW5kZXgoKSAhPSBudWxsOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCkgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKG1peGVkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChtaXhlZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0RvY3VtZW50Um9vdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9JbmRleEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9JbmRleEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkYzA4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvSW5kZXhJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBJbmRleEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5kZXg8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkluZGV4SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSW5kZXhJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBJbmRleCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBuYW1lID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgZGVzY3JpcHRpb24gPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVnaXN0cnkoKSA8ZW0+UmVnaXN0cnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCByZWdpc3RyeSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXhvbm9teSgpIDxlbT5UYXhvbm9teTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IHRheG9ub215ID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBJbmRleEltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0SW5kZXgoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0TmFtZSgpIHsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChOYW1lLmNsYXNzLCB0aGlzLCBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRSk7Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldERlc2NyaXB0aW9uKCkgewotCQlpZiAoZGVzY3JpcHRpb24gPT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24gPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoRGVzY3JpcHRpb24uY2xhc3MsIHRoaXMsIFJUSW5kZXhQYWNrYWdlLklOREVYX19ERVNDUklQVElPTik7Ci0JCX0KLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRSZWdpc3RyeSgpIHsKLQkJaWYgKHJlZ2lzdHJ5ID09IG51bGwpIHsKLQkJCXJlZ2lzdHJ5ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFJlZ2lzdHJ5LmNsYXNzLCB0aGlzLCBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlkpOwotCQl9Ci0JCXJldHVybiByZWdpc3RyeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0VGF4b25vbXkoKSB7Ci0JCWlmICh0YXhvbm9teSA9PSBudWxsKSB7Ci0JCQl0YXhvbm9teSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChUYXhvbm9teS5jbGFzcywgdGhpcywgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1RBWE9OT01ZKTsKLQkJfQotCQlyZXR1cm4gdGF4b25vbXk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXROYW1lKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19ERVNDUklQVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXREZXNjcmlwdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlk6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0UmVnaXN0cnkoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1RBWE9OT01ZOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFRheG9ub215KCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIGdldFJlZ2lzdHJ5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbXkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCWdldE5hbWUoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXREZXNjcmlwdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlk6Ci0JCQkJZ2V0UmVnaXN0cnkoKS5jbGVhcigpOwotCQkJCWdldFJlZ2lzdHJ5KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19UQVhPTk9NWToKLQkJCQlnZXRUYXhvbm9teSgpLmNsZWFyKCk7Ci0JCQkJZ2V0VGF4b25vbXkoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19SRUdJU1RSWToKLQkJCQlnZXRSZWdpc3RyeSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fVEFYT05PTVk6Ci0JCQkJZ2V0VGF4b25vbXkoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRToKLQkJCQlyZXR1cm4gbmFtZSAhPSBudWxsICYmICFuYW1lLmlzRW1wdHkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBkZXNjcmlwdGlvbiAhPSBudWxsICYmICFkZXNjcmlwdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19SRUdJU1RSWToKLQkJCQlyZXR1cm4gcmVnaXN0cnkgIT0gbnVsbCAmJiAhcmVnaXN0cnkuaXNFbXB0eSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIHRheG9ub215ICE9IG51bGwgJiYgIXRheG9ub215LmlzRW1wdHkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi19IC8vSW5kZXhJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvTmFtZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9OYW1lSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjY4NTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9OYW1lSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogTmFtZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLk5hbWVJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuTmFtZUltcGwjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE5hbWVJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBOYW1lIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdmFsdWUgPSBWQUxVRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxhbmcgPSBMQU5HX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE5hbWVJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldE5hbWVfKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewotCQlTdHJpbmcgb2xkVmFsdWUgPSB2YWx1ZTsKLQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUlRJbmRleFBhY2thZ2UuTkFNRV9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZygpIHsKLQkJcmV0dXJuIGxhbmc7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGFuZyhTdHJpbmcgbmV3TGFuZykgewotCQlTdHJpbmcgb2xkTGFuZyA9IGxhbmc7Ci0JCWxhbmcgPSBuZXdMYW5nOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSVEluZGV4UGFja2FnZS5OQU1FX19MQU5HLCBvbGRMYW5nLCBsYW5nKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlyZXR1cm4gZ2V0TGFuZygpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlzZXRMYW5nKExBTkdfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlyZXR1cm4gTEFOR19FREVGQVVMVCA9PSBudWxsID8gbGFuZyAhPSBudWxsIDogIUxBTkdfRURFRkFVTFQuZXF1YWxzKGxhbmcpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmFsdWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsYW5nOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsYW5nKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vTmFtZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9SVEluZGV4RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9SVEluZGV4RmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVmYTMzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4RmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleEZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgUlRJbmRleEZhY3RvcnkgewotCS8qKgotCSAqIENyZWF0ZXMgYW5kIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4RmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKLQkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT046IHJldHVybiBjcmVhdGVEZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UOiByZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYOiByZXR1cm4gY3JlYXRlSW5kZXgoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRTogcmV0dXJuIGNyZWF0ZU5hbWUoKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEZXNjcmlwdGlvbiBjcmVhdGVEZXNjcmlwdGlvbigpIHsKLQkJRGVzY3JpcHRpb25JbXBsIGRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uSW1wbCgpOwotCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKSB7Ci0JCURvY3VtZW50Um9vdEltcGwgZG9jdW1lbnRSb290ID0gbmV3IERvY3VtZW50Um9vdEltcGwoKTsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgSW5kZXggY3JlYXRlSW5kZXgoKSB7Ci0JCUluZGV4SW1wbCBpbmRleCA9IG5ldyBJbmRleEltcGwoKTsKLQkJcmV0dXJuIGluZGV4OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGNyZWF0ZU5hbWUoKSB7Ci0JCU5hbWVJbXBsIG5hbWUgPSBuZXcgTmFtZUltcGwoKTsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhQYWNrYWdlIGdldFJUSW5kZXhQYWNrYWdlKCkgewotCQlyZXR1cm4gKFJUSW5kZXhQYWNrYWdlKWdldEVQYWNrYWdlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZGVwcmVjYXRlZAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJUSW5kZXhQYWNrYWdlIGdldFBhY2thZ2UoKSB7Ci0JCXJldHVybiBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0U7Ci0JfQotCi19IC8vUlRJbmRleEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleFBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleFBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OTc1NWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL1JUSW5kZXhQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTczICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleFBhY2thZ2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuWE1MVHlwZVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbC5YTUxUeXBlUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgUlRJbmRleFBhY2thZ2UgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGRlc2NyaXB0aW9uRUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGRvY3VtZW50Um9vdEVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBpbmRleEVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBuYW1lRUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLQkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQotCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgotCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLQkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcwotCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0JICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNlTlNfVVJJCi0JICogQHNlZSAjaW5pdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgUlRJbmRleFBhY2thZ2VJbXBsKCkgewotCQlzdXBlcihlTlNfVVJJLCBSVEluZGV4RmFjdG9yeS5lSU5TVEFOQ0UpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0JICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLQkgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLQkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0JICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLQkgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0JICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0JICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotCSAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0JICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLQkgKiB0aG9zZSBvZiBhbm90aGVyLgotCSAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLQkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNlTlNfVVJJCi0JICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBSVEluZGV4UGFja2FnZSBpbml0KCkgewotCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoUlRJbmRleFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotCQlSVEluZGV4UGFja2FnZUltcGwgdGhlUlRJbmRleFBhY2thZ2UgPSAoUlRJbmRleFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFJUSW5kZXhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFJUSW5kZXhQYWNrYWdlSW1wbCgpKTsKLQotCQlpc0luaXRlZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKLQkJVGF4b25vbXlQYWNrYWdlSW1wbCB0aGVUYXhvbm9teVBhY2thZ2UgPSAoVGF4b25vbXlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVGF4b25vbXlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSA6IFRheG9ub215UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFJlZ2lzdHJ5UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlVURESVJlZ2lzdHJ5UGFja2FnZSA9IChVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFVERElSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0KLQkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLQkJdGhlUlRJbmRleFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLQkJdGhlUlRJbmRleFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVUYXhvbm9teVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0JCXRoZVJUSW5kZXhQYWNrYWdlLmZyZWV6ZSgpOwotCi0JCXJldHVybiB0aGVSVEluZGV4UGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gZGVzY3JpcHRpb25FQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkZXNjcmlwdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX0xhbmcoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkZXNjcmlwdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCkgewotCQlyZXR1cm4gZG9jdW1lbnRSb290RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9JbmRleCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRJbmRleCgpIHsKLQkJcmV0dXJuIGluZGV4RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEluZGV4X05hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlpbmRleEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEluZGV4X0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW5kZXhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmRleF9SZWdpc3RyeSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWluZGV4RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0SW5kZXhfVGF4b25vbXkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlpbmRleEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0TmFtZV8oKSB7Ci0JCXJldHVybiBuYW1lRUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVfVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4RmFjdG9yeSBnZXRSVEluZGV4RmFjdG9yeSgpIHsKLQkJcmV0dXJuIChSVEluZGV4RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0JICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOwotCQlpc0NyZWF0ZWQgPSB0cnVlOwotCi0JCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotCQlkZXNjcmlwdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZGVzY3JpcHRpb25FQ2xhc3MsIERFU0NSSVBUSU9OX19WQUxVRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZGVzY3JpcHRpb25FQ2xhc3MsIERFU0NSSVBUSU9OX19MQU5HKTsKLQotCQlkb2N1bWVudFJvb3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9DVU1FTlRfUk9PVCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fSU5ERVgpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTkFNRSk7Ci0KLQkJaW5kZXhFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5ERVgpOwotCQljcmVhdGVFUmVmZXJlbmNlKGluZGV4RUNsYXNzLCBJTkRFWF9fTkFNRSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoaW5kZXhFQ2xhc3MsIElOREVYX19ERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoaW5kZXhFQ2xhc3MsIElOREVYX19SRUdJU1RSWSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoaW5kZXhFQ2xhc3MsIElOREVYX19UQVhPTk9NWSk7Ci0KLQkJbmFtZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOQU1FKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShuYW1lRUNsYXNzLCBOQU1FX19WQUxVRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUobmFtZUVDbGFzcywgTkFNRV9fTEFORyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0JICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOwotCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKLQkJc2V0TmFtZShlTkFNRSk7Ci0JCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotCQlzZXROc1VSSShlTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbCB0aGVYTUxUeXBlUGFja2FnZSA9IChYTUxUeXBlUGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoWE1MVHlwZVBhY2thZ2UuZU5TX1VSSSk7Ci0JCVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlUmVnaXN0cnlQYWNrYWdlID0gKFJlZ2lzdHJ5UGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpOwotCQlUYXhvbm9teVBhY2thZ2VJbXBsIHRoZVRheG9ub215UGFja2FnZSA9IChUYXhvbm9teVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0KLQkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQkJaW5pdEVDbGFzcyhkZXNjcmlwdGlvbkVDbGFzcywgRGVzY3JpcHRpb24uY2xhc3MsICJEZXNjcmlwdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIERlc2NyaXB0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVzY3JpcHRpb25fTGFuZygpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRMYW5ndWFnZSgpLCAibGFuZyIsIG51bGwsIDAsIDEsIERlc2NyaXB0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKGRvY3VtZW50Um9vdEVDbGFzcywgRG9jdW1lbnRSb290LmNsYXNzLCAiRG9jdW1lbnRSb290IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgZWNvcmVQYWNrYWdlLmdldEVGZWF0dXJlTWFwRW50cnkoKSwgIm1peGVkIiwgbnVsbCwgMCwgLTEsIG51bGwsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4TUxOU1ByZWZpeE1hcCIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4U0lTY2hlbWFMb2NhdGlvbiIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgdGhpcy5nZXREZXNjcmlwdGlvbigpLCBudWxsLCAiZGVzY3JpcHRpb24iLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X0luZGV4KCksIHRoaXMuZ2V0SW5kZXgoKSwgbnVsbCwgImluZGV4IiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9OYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5hbWUiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKGluZGV4RUNsYXNzLCBJbmRleC5jbGFzcywgIkluZGV4IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RVJlZmVyZW5jZShnZXRJbmRleF9OYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5hbWUiLCBudWxsLCAxLCAtMSwgSW5kZXguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldEluZGV4X0Rlc2NyaXB0aW9uKCksIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSwgbnVsbCwgImRlc2NyaXB0aW9uIiwgbnVsbCwgMSwgLTEsIEluZGV4LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRJbmRleF9SZWdpc3RyeSgpLCB0aGVSZWdpc3RyeVBhY2thZ2UuZ2V0UmVnaXN0cnkoKSwgbnVsbCwgInJlZ2lzdHJ5IiwgbnVsbCwgMCwgLTEsIEluZGV4LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRJbmRleF9UYXhvbm9teSgpLCB0aGVUYXhvbm9teVBhY2thZ2UuZ2V0VGF4b25vbXkoKSwgbnVsbCwgInRheG9ub215IiwgbnVsbCwgMCwgLTEsIEluZGV4LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MobmFtZUVDbGFzcywgTmFtZS5jbGFzcywgIk5hbWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldE5hbWVfVmFsdWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIE5hbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXROYW1lX0xhbmcoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0TGFuZ3VhZ2UoKSwgImxhbmciLCBudWxsLCAwLCAxLCBOYW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQkvLyBDcmVhdGUgcmVzb3VyY2UKLQkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0KLQkJLy8gQ3JlYXRlIGFubm90YXRpb25zCi0JCS8vIGh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YQotCQljcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgYW5ub3RhdGlvbnMgZm9yIDxiPmh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YTwvYj4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCkgewotCQlTdHJpbmcgc291cmNlID0gImh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI7CQkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZGVzY3JpcHRpb25FQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIkRlc2NyaXB0aW9uIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiOjAiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREZXNjcmlwdGlvbl9MYW5nKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibGFuZyIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZG9jdW1lbnRSb290RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICIiLAotCQkJICJraW5kIiwgIm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50V2lsZGNhcmQiLAotCQkJICJuYW1lIiwgIjptaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4bWxuczpwcmVmaXgiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieHNpOnNjaGVtYUxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZXNjcmlwdGlvbiIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfSW5kZXgoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiaW5kZXgiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmFtZSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChpbmRleEVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiSW5kZXgiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldEluZGV4X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmFtZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRJbmRleF9EZXNjcmlwdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZXNjcmlwdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRJbmRleF9SZWdpc3RyeSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJyZWdpc3RyeSIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRJbmRleF9UYXhvbm9teSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ0YXhvbm9teSIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChuYW1lRUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJOYW1lIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0TmFtZV9WYWx1ZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICI6MCIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfTGFuZygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxhbmciLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCQkgICB9KTsKLQl9Ci0KLX0gLy9SVEluZGV4UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4QWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4QWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkZTQxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleEFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4QWRhcHRlckZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSVEluZGV4QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFJUSW5kZXhQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUlRJbmRleEFkYXB0ZXJGYWN0b3J5KCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBSVEluZGV4U3dpdGNoIG1vZGVsU3dpdGNoID0KLQkJbmV3IFJUSW5kZXhTd2l0Y2goKSB7Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VEZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRGVzY3JpcHRpb25BZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VJbmRleChJbmRleCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlSW5kZXhBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VOYW1lKE5hbWUgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZU5hbWVBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCX07Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgewotCQlyZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLQl9Ci0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVzY3JpcHRpb25BZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCA8ZW0+SW5kZXg8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUluZGV4QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVOYW1lQWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1JUSW5kZXhBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQwOWZjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRXh0ZW5kZWRNZXRhRGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbC5SVEluZGV4UmVzb3VyY2VJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFhNTFJlc291cmNlRmFjdG9yeUltcGwgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFeHRlbmRlZE1ldGFEYXRhIGV4dGVuZGVkTWV0YURhdGE7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQkJZXh0ZW5kZWRNZXRhRGF0YSA9IEV4dGVuZGVkTWV0YURhdGEuSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKLQkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFJUSW5kZXhSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfSAvL1JUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhSZXNvdXJjZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUzMTY0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4UmVzb3VyY2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbC5SVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleFJlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhSZXNvdXJjZUltcGwoVVJJIHVyaSkgewotCQlzdXBlcih1cmkpOwotCX0KLQotfSAvL1JUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFN3aXRjaC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU4NWJlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleFN3aXRjaC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleFN3aXRjaCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBSVEluZGV4UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhTd2l0Y2goKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOwotCQl9Ci0JCWVsc2UgewotCQkJTGlzdCBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOwotCQkJcmV0dXJuCi0JCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KLQkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgotCQkJCQlkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OOiB7Ci0JCQkJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHsKLQkJCQlEb2N1bWVudFJvb3QgZG9jdW1lbnRSb290ID0gKERvY3VtZW50Um9vdCl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlRG9jdW1lbnRSb290KGRvY3VtZW50Um9vdCk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWDogewotCQkJCUluZGV4IGluZGV4ID0gKEluZGV4KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VJbmRleChpbmRleCk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FOiB7Ci0JCQkJTmFtZSBuYW1lID0gKE5hbWUpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZU5hbWUobmFtZSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluZGV4PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluZGV4PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VJbmRleChJbmRleCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9SVEluZGV4U3dpdGNoCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9DYXRlZ29yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvQ2F0ZWdvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzZDk2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9DYXRlZ29yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogQ2F0ZWdvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5sbmFtZSA8ZW0+TmxuYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDb2RlIDxlbT5Db2RlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldENhdGVnb3J5KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBDYXRlZ29yeSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5sbmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5ObG5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5ObG5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRDYXRlZ29yeV9ObG5hbWUoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldE5sbmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRDYXRlZ29yeV9DYXRlZ29yeSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldENhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Db2RlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db2RlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNvZGU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldENvZGUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0Q2F0ZWdvcnlfQ29kZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0Q29kZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDb2RlIDxlbT5Db2RlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Db2RlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRDb2RlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRDb2RlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0Q2F0ZWdvcnlfTmFtZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gQ2F0ZWdvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L0RvY3VtZW50Um9vdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvRG9jdW1lbnRSb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MDI0ZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvRG9jdW1lbnRSb290LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3QuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudFJvb3QgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXAuRW50cnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9NaXhlZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZlYXR1cmVNYXBFbnRyeSIgbWFueT0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRmVhdHVyZU1hcCBnZXRNaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0Q2F0ZWdvcnkoQ2F0ZWdvcnkpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlDYXRlZ29yeSBnZXRDYXRlZ29yeSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldENhdGVnb3J5KENhdGVnb3J5IHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0TmFtZShOYW1lKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X05hbWUoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldE5hbWUoTmFtZSB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldFRheG9ub215KFRheG9ub215KQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbXkgZ2V0VGF4b25vbXkoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRUYXhvbm9teShUYXhvbm9teSB2YWx1ZSk7Ci0KLX0gLy8gRG9jdW1lbnRSb290CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9OYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9OYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMWVjZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0TmFtZV8oKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE5hbWUgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFZhbHVlKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldE5hbWVfVmFsdWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExhbmcoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0TmFtZV9MYW5nKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5MYW5ndWFnZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExhbmcoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRMYW5nKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gTmFtZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNGJlMDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0SWQgPGVtPklkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFJlZiA8ZW0+UmVmPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFRtb2RlbEtleSA8ZW0+VG1vZGVsIEtleTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXkoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFRheG9ub215IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmxuYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lfS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5sbmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5sbmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X05sbmFtZSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0TmxuYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X0NhdGVnb3J5KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0Q2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0SWQoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfSWQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldElkKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldElkIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRJZChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRMb2NhdGlvbihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9Mb2NhdGlvbigpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExvY2F0aW9uKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfTmFtZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWY8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlZjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZWY8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFJlZihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9SZWYoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFJlZigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRSZWYgPGVtPlJlZjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVmPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFJlZihTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VG1vZGVsIEtleTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VG1vZGVsIEtleTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UbW9kZWwgS2V5PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRUbW9kZWxLZXkoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfVG1vZGVsS2V5KCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VG1vZGVsS2V5KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFRtb2RlbEtleSA8ZW0+VG1vZGVsIEtleTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VG1vZGVsIEtleTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VG1vZGVsS2V5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRUbW9kZWxLZXkoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBUYXhvbm9teQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2ZmRiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBUYXhvbm9teUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7Ci0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teUZhY3RvcnkgZUlOU1RBTkNFID0gbmV3IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUZhY3RvcnlJbXBsKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JQ2F0ZWdvcnkgY3JlYXRlQ2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGNyZWF0ZU5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teSBjcmVhdGVUYXhvbm9teSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teVBhY2thZ2UgZ2V0VGF4b25vbXlQYWNrYWdlKCk7Ci0KLX0gLy9UYXhvbm9teUZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215UGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZDk2ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlQYWNrYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NTAgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVBhY2thZ2UuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIAotICogICAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS5odG1sIGFuZAotICogICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuCi0gKiAKLSAqICAgICBUaGlzIHNjaGVtYSBkb2N1bWVudCBkZXNjcmliZXMgdGhlIFhNTCBuYW1lc3BhY2UsIGluIGEgZm9ybQotICogICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gIAotICogCi0gKiAgICAgTm90ZSB0aGF0IGxvY2FsIG5hbWVzIGluIHRoaXMgbmFtZXNwYWNlIGFyZSBpbnRlbmRlZCB0byBiZSBkZWZpbmVkCi0gKiAgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlCi0gKiAgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkCi0gKiAgICAgbm90IGJlIHVzZWQgd2l0aCBjb25mbGljdGluZyBzZW1hbnRpY3MgYnkgYW55IFdvcmtpbmcgR3JvdXAsCi0gKiAgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6Ci0gKiAKLSAqICAgICBiYXNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55Ci0gKiAgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdAotICogICAgICAgICAgYXBwZWFyczsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgaWQgICAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuCi0gKiAgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwKLSAqICAgICAgICAgIGJ1dCB0aGlzIGF0dHJpYnV0ZSBpcyBpbmNsdWRlZCBoZXJlIHRvIGZhY2lsaXRhdGUgZXhwZXJpbWVudGF0aW9uCi0gKiAgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkCi0gKiAgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4KLSAqIAotICogICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YKLSAqICAgICAgICAgIGFueSBlbGVtZW50OyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogICAKLSAqICAgICBzcGFjZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZQotICogICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcKLSAqICAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMKLSAqICAgICAgICAgIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSB2aXJ0dWUgb2YgaXRzCi0gKiAgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIEZhdGhlciAoaW4gYW55IGNvbnRleHQgYXQgYWxsKTogZGVub3RlcyBKb24gQm9zYWssIHRoZSBjaGFpciBvZiAKLSAqICAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAKLSAqICAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgCi0gKiAgICAgICAgICBYTUwgQ29vcmRpbmF0aW9uIGdyb3VwczoKLSAqIAotICogICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbgotICogICAgICAgICAgICAgIHRoZSBXM0MgWE1MIFBsZW5hcnkgb24gdGhpcyAxMHRoIGRheSBvZiBGZWJydWFyeSwgMjAwMAotICogICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUKLSAqICAgICAgICAgICAgICB4bWw6RmF0aGVyCi0gKiAgIAotICogVGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAKLSAqICAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieQotICogICAgICAgICBzY2hlbWFzIHdpc2hpbmcgdG8gYWxsb3cgeG1sOmJhc2UsIHhtbDpsYW5nLCB4bWw6c3BhY2Ugb3IgeG1sOmlkCi0gKiAgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuCi0gKiAKLSAqICAgICAgICAgVG8gZW5hYmxlIHRoaXMsIHN1Y2ggYSBzY2hlbWEgbXVzdCBpbXBvcnQgdGhpcyBzY2hlbWEKLSAqICAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6Ci0gKiAgICAgICAgICZsdDtzY2hlbWEgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAqICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvJmd0OwotICogCi0gKiAgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMKLSAqICAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLgotICogCi0gKiAgICAgICAgICZsdDt0eXBlIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLyZndDsKLSAqICAKLSAqICAgICAgICAgIHdpbGwgZGVmaW5lIGEgdHlwZSB3aGljaCB3aWxsIHNjaGVtYS12YWxpZGF0ZSBhbiBpbnN0YW5jZQotICogICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzCi0gKiBJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCi0gKiAgICBwb2xpY3ksIHRoaXMgc2NoZW1hIGRvY3VtZW50IHdpbGwgcGVyc2lzdCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLgotICogICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZC4KLSAqICAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsCi0gKiAgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hCi0gKiAgICBpdHNlbGYsIG9yIHdpdGggdGhlIFhNTCBuYW1lc3BhY2UgaXRzZWxmLiAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBYTUwKLSAqICAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZQotICogICAgYWNjb3JkaW5nbHk7IHRoZSB2ZXJzaW9uIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLgotICogICAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teUZhY3RvcnkKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBUYXhvbm9teVBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7Ci0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5BTUUgPSAidGF4b25vbXkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1BSRUZJWCA9ICJ0YXhvbm9teSI7Ci0KLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub215UGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5DYXRlZ29yeUltcGwgPGVtPkNhdGVnb3J5PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGwjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgQ0FURUdPUlkgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5sbmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgQ0FURUdPUllfX05MTkFNRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IENBVEVHT1JZX19DQVRFR09SWSA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29kZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IENBVEVHT1JZX19DT0RFID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgQ0FURUdPUllfX05BTUUgPSAzOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBDQVRFR09SWV9GRUFUVVJFX0NPVU5UID0gNDsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGwjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1QgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19NSVhFRCA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVAgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTkFNRSA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19UQVhPTk9NWSA9IDU7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9GRUFUVVJFX0NPVU5UID0gNjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLk5hbWVJbXBsIDxlbT5OYW1lPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLk5hbWVJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbCNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBOQU1FID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX1ZBTFVFID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9fTEFORyA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPk5hbWU8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9GRUFUVVJFX0NPVU5UID0gMjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCA8ZW0+VGF4b25vbXk8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbCNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBUQVhPTk9NWSA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmxuYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fTkxOQU1FID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX0NBVEVHT1JZID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19JRCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fTE9DQVRJT04gPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fTkFNRSA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX1JFRiA9IDU7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VG1vZGVsIEtleTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19UTU9ERUxfS0VZID0gNjsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfRkVBVFVSRV9DT1VOVCA9IDc7Ci0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0Q2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5sbmFtZSA8ZW0+TmxuYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5ObG5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5sbmFtZSgpCi0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldENhdGVnb3J5X05sbmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRDYXRlZ29yeV9DYXRlZ29yeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENvZGUgPGVtPkNvZGU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Db2RlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDb2RlKCkKLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0Q2F0ZWdvcnlfQ29kZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0Q2F0ZWdvcnlfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1peGVkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRDYXRlZ29yeSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbXkoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0TmFtZV8oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldFZhbHVlKCkKLQkgKiBAc2VlICNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0TmFtZV9WYWx1ZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxhbmc8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0TGFuZygpCi0JICogQHNlZSAjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldE5hbWVfTGFuZygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXRUYXhvbm9teSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmxuYW1lIDxlbT5ObG5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPk5sbmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmxuYW1lKCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0VGF4b25vbXlfTmxuYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRDYXRlZ29yeSgpCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldFRheG9ub215X0NhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0SWQgPGVtPklkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldElkKCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfSWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TG9jYXRpb24oKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9Mb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFJlZiA8ZW0+UmVmPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVmPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRSZWYoKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9SZWYoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRUbW9kZWxLZXkgPGVtPlRtb2RlbCBLZXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UbW9kZWwgS2V5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRUbW9kZWxLZXkoKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9UbW9kZWxLZXkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub215RmFjdG9yeSBnZXRUYXhvbm9teUZhY3RvcnkoKTsKLQotfSAvL1RheG9ub215UGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9DYXRlZ29yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvQ2F0ZWdvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YjJlM2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9DYXRlZ29yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IENhdGVnb3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbCNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5DYXRlZ29yeUltcGwjZ2V0Q29kZSA8ZW0+Q29kZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQ2F0ZWdvcnlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBDYXRlZ29yeSB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmxuYW1lKCkgPGVtPk5sbmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRObG5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBubG5hbWUgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q2F0ZWdvcnkoKSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBjYXRlZ29yeSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29kZSgpIDxlbT5Db2RlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRDb2RlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT0RFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvZGUoKSA8ZW0+Q29kZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0Q29kZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBjb2RlID0gQ09ERV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIENhdGVnb3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0Q2F0ZWdvcnkoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0TmxuYW1lKCkgewotCQlpZiAobmxuYW1lID09IG51bGwpIHsKLQkJCW5sbmFtZSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChOYW1lLmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRSk7Ci0JCX0KLQkJcmV0dXJuIG5sbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0Q2F0ZWdvcnkoKSB7Ci0JCWlmIChjYXRlZ29yeSA9PSBudWxsKSB7Ci0JCQljYXRlZ29yeSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChDYXRlZ29yeS5jbGFzcywgdGhpcywgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWSk7Ci0JCX0KLQkJcmV0dXJuIGNhdGVnb3J5OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q29kZSgpIHsKLQkJcmV0dXJuIGNvZGU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0Q29kZShTdHJpbmcgbmV3Q29kZSkgewotCQlTdHJpbmcgb2xkQ29kZSA9IGNvZGU7Ci0JCWNvZGUgPSBuZXdDb2RlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NPREUsIG9sZENvZGUsIGNvZGUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotCQluYW1lID0gbmV3TmFtZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRObG5hbWUoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRDYXRlZ29yeSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkxOQU1FOgotCQkJCXJldHVybiBnZXRObG5hbWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQlyZXR1cm4gZ2V0Q2F0ZWdvcnkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DT0RFOgotCQkJCXJldHVybiBnZXRDb2RlKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OTE5BTUU6Ci0JCQkJZ2V0TmxuYW1lKCkuY2xlYXIoKTsKLQkJCQlnZXRObG5hbWUoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQlnZXRDYXRlZ29yeSgpLmNsZWFyKCk7Ci0JCQkJZ2V0Q2F0ZWdvcnkoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DT0RFOgotCQkJCXNldENvZGUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05BTUU6Ci0JCQkJc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRToKLQkJCQlnZXRObG5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQlnZXRDYXRlZ29yeSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NPREU6Ci0JCQkJc2V0Q29kZShDT0RFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkFNRToKLQkJCQlzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRToKLQkJCQlyZXR1cm4gbmxuYW1lICE9IG51bGwgJiYgIW5sbmFtZS5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ0FURUdPUlk6Ci0JCQkJcmV0dXJuIGNhdGVnb3J5ICE9IG51bGwgJiYgIWNhdGVnb3J5LmlzRW1wdHkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DT0RFOgotCQkJCXJldHVybiBDT0RFX0VERUZBVUxUID09IG51bGwgPyBjb2RlICE9IG51bGwgOiAhQ09ERV9FREVGQVVMVC5lcXVhbHMoY29kZSk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkFNRToKLQkJCQlyZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAoY29kZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQoY29kZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbmFtZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQobmFtZSk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0NhdGVnb3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc3ODc0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkJhc2ljRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZUVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50Um9vdEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvY3VtZW50Um9vdCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWl4ZWQoKSA8ZW0+TWl4ZWQ8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TWl4ZWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBGZWF0dXJlTWFwIG1peGVkID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhNTE5TUHJlZml4TWFwKCkgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4TUxOU1ByZWZpeE1hcCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeFNJU2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERvY3VtZW50Um9vdEltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBGZWF0dXJlTWFwIGdldE1peGVkKCkgewotCQlpZiAobWl4ZWQgPT0gbnVsbCkgewotCQkJbWl4ZWQgPSBuZXcgQmFzaWNGZWF0dXJlTWFwKHRoaXMsIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCX0KLQkJcmV0dXJuIG1peGVkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhNTE5TUHJlZml4TWFwKCkgewotCQlpZiAoeE1MTlNQcmVmaXhNYXAgPT0gbnVsbCkgewotCQkJeE1MTlNQcmVmaXhNYXAgPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCX0KLQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlpZiAoeFNJU2NoZW1hTG9jYXRpb24gPT0gbnVsbCkgewotCQkJeFNJU2NoZW1hTG9jYXRpb24gPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCX0KLQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBDYXRlZ29yeSBnZXRDYXRlZ29yeSgpIHsKLQkJcmV0dXJuIChDYXRlZ29yeSlnZXRNaXhlZCgpLmdldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRDYXRlZ29yeShDYXRlZ29yeSBuZXdDYXRlZ29yeSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCksIG5ld0NhdGVnb3J5LCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDYXRlZ29yeShDYXRlZ29yeSBuZXdDYXRlZ29yeSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCksIG5ld0NhdGVnb3J5KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTmFtZSBnZXROYW1lKCkgewotCQlyZXR1cm4gKE5hbWUpZ2V0TWl4ZWQoKS5nZXQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXROYW1lKE5hbWUgbmV3TmFtZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgbmV3TmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZShOYW1lIG5ld05hbWUpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIG5ld05hbWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBnZXRUYXhvbm9teSgpIHsKLQkJcmV0dXJuIChUYXhvbm9teSlnZXRNaXhlZCgpLmdldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUYXhvbm9teShUYXhvbm9teSBuZXdUYXhvbm9teSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCksIG5ld1RheG9ub215LCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXhvbm9teShUYXhvbm9teSBuZXdUYXhvbm9teSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCksIG5ld1RheG9ub215KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRNaXhlZCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYTUxOU1ByZWZpeE1hcCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYU0lTY2hlbWFMb2NhdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlk6Ci0JCQkJCXJldHVybiBiYXNpY1NldENhdGVnb3J5KG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJCXJldHVybiBiYXNpY1NldE5hbWUobnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTVk6Ci0JCQkJCXJldHVybiBiYXNpY1NldFRheG9ub215KG51bGwsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIGdldE1peGVkKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZOgotCQkJCXJldHVybiBnZXRDYXRlZ29yeSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIGdldFRheG9ub215KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCWdldE1peGVkKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZOgotCQkJCXNldENhdGVnb3J5KChDYXRlZ29yeSluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlzZXROYW1lKChOYW1lKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NWToKLQkJCQlzZXRUYXhvbm9teSgoVGF4b25vbXkpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlk6Ci0JCQkJc2V0Q2F0ZWdvcnkoKENhdGVnb3J5KW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJc2V0TmFtZSgoTmFtZSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NWToKLQkJCQlzZXRUYXhvbm9teSgoVGF4b25vbXkpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gbWl4ZWQgIT0gbnVsbCAmJiAhbWl4ZWQuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4geE1MTlNQcmVmaXhNYXAgIT0gbnVsbCAmJiAheE1MTlNQcmVmaXhNYXAuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiAheFNJU2NoZW1hTG9jYXRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlk6Ci0JCQkJcmV0dXJuIGdldENhdGVnb3J5KCkgIT0gbnVsbDsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKSAhPSBudWxsOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIGdldFRheG9ub215KCkgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKG1peGVkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChtaXhlZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0RvY3VtZW50Um9vdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvTmFtZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvTmFtZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM1NWJkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL05hbWVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5OYW1lSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5OYW1lSW1wbCNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTmFtZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIE5hbWUgewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFOR19FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbGFuZyA9IExBTkdfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgTmFtZUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldE5hbWVfKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewotCQlTdHJpbmcgb2xkVmFsdWUgPSB2YWx1ZTsKLQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLk5BTUVfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmcoKSB7Ci0JCXJldHVybiBsYW5nOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmcoU3RyaW5nIG5ld0xhbmcpIHsKLQkJU3RyaW5nIG9sZExhbmcgPSBsYW5nOwotCQlsYW5nID0gbmV3TGFuZzsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLk5BTUVfX0xBTkcsIG9sZExhbmcsIGxhbmcpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIGdldExhbmcoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlzZXRWYWx1ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoTEFOR19FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIExBTkdfRURFRkFVTFQgPT0gbnVsbCA/IGxhbmcgIT0gbnVsbCA6ICFMQU5HX0VERUZBVUxULmVxdWFscyhsYW5nKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbGFuZzogIik7Ci0JCXJlc3VsdC5hcHBlbmQobGFuZyk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL05hbWVJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjViNTRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215RmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBUYXhvbm9teUZhY3RvcnkgewotCS8qKgotCSAqIENyZWF0ZXMgYW5kIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7Ci0JCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWTogcmV0dXJuIGNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UOiByZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FOiByZXR1cm4gY3JlYXRlTmFtZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVk6IHJldHVybiBjcmVhdGVUYXhvbm9teSgpOwotCQkJZGVmYXVsdDoKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIENhdGVnb3J5IGNyZWF0ZUNhdGVnb3J5KCkgewotCQlDYXRlZ29yeUltcGwgY2F0ZWdvcnkgPSBuZXcgQ2F0ZWdvcnlJbXBsKCk7Ci0JCXJldHVybiBjYXRlZ29yeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpIHsKLQkJRG9jdW1lbnRSb290SW1wbCBkb2N1bWVudFJvb3QgPSBuZXcgRG9jdW1lbnRSb290SW1wbCgpOwotCQlyZXR1cm4gZG9jdW1lbnRSb290OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGNyZWF0ZU5hbWUoKSB7Ci0JCU5hbWVJbXBsIG5hbWUgPSBuZXcgTmFtZUltcGwoKTsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215IGNyZWF0ZVRheG9ub215KCkgewotCQlUYXhvbm9teUltcGwgdGF4b25vbXkgPSBuZXcgVGF4b25vbXlJbXBsKCk7Ci0JCXJldHVybiB0YXhvbm9teTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlQYWNrYWdlIGdldFRheG9ub215UGFja2FnZSgpIHsKLQkJcmV0dXJuIChUYXhvbm9teVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBkZXByZWNhdGVkCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGF4b25vbXlQYWNrYWdlIGdldFBhY2thZ2UoKSB7Ci0JCXJldHVybiBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFOwotCX0KLQotfSAvL1RheG9ub215RmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTc4OTUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwjZ2V0SWQgPGVtPklkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldFJlZiA8ZW0+UmVmPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldFRtb2RlbEtleSA8ZW0+VG1vZGVsIEtleTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgVGF4b25vbXkgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5sbmFtZSgpIDxlbT5ObG5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmxuYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgbmxuYW1lID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENhdGVnb3J5KCkgPGVtPkNhdGVnb3J5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgY2F0ZWdvcnkgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkKCkgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRJZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWQoKSA8ZW0+SWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGlkID0gSURfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb24gPSBMT0NBVElPTl9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlZigpIDxlbT5SZWY8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlZigpIDxlbT5SZWY8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyByZWYgPSBSRUZfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VG1vZGVsS2V5KCkgPGVtPlRtb2RlbCBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFRtb2RlbEtleSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE1PREVMX0tFWV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUbW9kZWxLZXkoKSA8ZW0+VG1vZGVsIEtleTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VG1vZGVsS2V5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHRtb2RlbEtleSA9IFRNT0RFTF9LRVlfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgVGF4b25vbXlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXRUYXhvbm9teSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRObG5hbWUoKSB7Ci0JCWlmIChubG5hbWUgPT0gbnVsbCkgewotCQkJbmxuYW1lID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE5hbWUuY2xhc3MsIHRoaXMsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FKTsKLQkJfQotCQlyZXR1cm4gbmxuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRDYXRlZ29yeSgpIHsKLQkJaWYgKGNhdGVnb3J5ID09IG51bGwpIHsKLQkJCWNhdGVnb3J5ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KENhdGVnb3J5LmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZKTsKLQkJfQotCQlyZXR1cm4gY2F0ZWdvcnk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQkJcmV0dXJuIGlkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBuZXdJZCkgewotCQlTdHJpbmcgb2xkSWQgPSBpZDsKLQkJaWQgPSBuZXdJZDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19JRCwgb2xkSWQsIGlkKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpIHsKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQlTdHJpbmcgb2xkTG9jYXRpb24gPSBsb2NhdGlvbjsKLQkJbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19MT0NBVElPTiwgb2xkTG9jYXRpb24sIGxvY2F0aW9uKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKSB7Ci0JCVN0cmluZyBvbGROYW1lID0gbmFtZTsKLQkJbmFtZSA9IG5ld05hbWU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UmVmKCkgewotCQlyZXR1cm4gcmVmOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlZihTdHJpbmcgbmV3UmVmKSB7Ci0JCVN0cmluZyBvbGRSZWYgPSByZWY7Ci0JCXJlZiA9IG5ld1JlZjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19SRUYsIG9sZFJlZiwgcmVmKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRUbW9kZWxLZXkoKSB7Ci0JCXJldHVybiB0bW9kZWxLZXk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VG1vZGVsS2V5KFN0cmluZyBuZXdUbW9kZWxLZXkpIHsKLQkJU3RyaW5nIG9sZFRtb2RlbEtleSA9IHRtb2RlbEtleTsKLQkJdG1vZGVsS2V5ID0gbmV3VG1vZGVsS2V5OwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1RNT0RFTF9LRVksIG9sZFRtb2RlbEtleSwgdG1vZGVsS2V5KSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05MTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRObG5hbWUoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19DQVRFR09SWToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRDYXRlZ29yeSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FOgotCQkJCXJldHVybiBnZXRObG5hbWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19DQVRFR09SWToKLQkJCQlyZXR1cm4gZ2V0Q2F0ZWdvcnkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19JRDoKLQkJCQlyZXR1cm4gZ2V0SWQoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0TG9jYXRpb24oKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fUkVGOgotCQkJCXJldHVybiBnZXRSZWYoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19UTU9ERUxfS0VZOgotCQkJCXJldHVybiBnZXRUbW9kZWxLZXkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FOgotCQkJCWdldE5sbmFtZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0TmxuYW1lKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fQ0FURUdPUlk6Ci0JCQkJZ2V0Q2F0ZWdvcnkoKS5jbGVhcigpOwotCQkJCWdldENhdGVnb3J5KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fSUQ6Ci0JCQkJc2V0SWQoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0xPQ0FUSU9OOgotCQkJCXNldExvY2F0aW9uKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OQU1FOgotCQkJCXNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1JFRjoKLQkJCQlzZXRSZWYoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1RNT0RFTF9LRVk6Ci0JCQkJc2V0VG1vZGVsS2V5KChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FOgotCQkJCWdldE5sbmFtZSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZOgotCQkJCWdldENhdGVnb3J5KCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fSUQ6Ci0JCQkJc2V0SWQoSURfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19MT0NBVElPTjoKLQkJCQlzZXRMb2NhdGlvbihMT0NBVElPTl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05BTUU6Ci0JCQkJc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fUkVGOgotCQkJCXNldFJlZihSRUZfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19UTU9ERUxfS0VZOgotCQkJCXNldFRtb2RlbEtleShUTU9ERUxfS0VZX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OTE5BTUU6Ci0JCQkJcmV0dXJuIG5sbmFtZSAhPSBudWxsICYmICFubG5hbWUuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZOgotCQkJCXJldHVybiBjYXRlZ29yeSAhPSBudWxsICYmICFjYXRlZ29yeS5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fSUQ6Ci0JCQkJcmV0dXJuIElEX0VERUZBVUxUID09IG51bGwgPyBpZCAhPSBudWxsIDogIUlEX0VERUZBVUxULmVxdWFscyhpZCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIExPQ0FUSU9OX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvbiAhPSBudWxsIDogIUxPQ0FUSU9OX0VERUZBVUxULmVxdWFscyhsb2NhdGlvbik7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkFNRToKLQkJCQlyZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1JFRjoKLQkJCQlyZXR1cm4gUkVGX0VERUZBVUxUID09IG51bGwgPyByZWYgIT0gbnVsbCA6ICFSRUZfRURFRkFVTFQuZXF1YWxzKHJlZik7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fVE1PREVMX0tFWToKLQkJCQlyZXR1cm4gVE1PREVMX0tFWV9FREVGQVVMVCA9PSBudWxsID8gdG1vZGVsS2V5ICE9IG51bGwgOiAhVE1PREVMX0tFWV9FREVGQVVMVC5lcXVhbHModG1vZGVsS2V5KTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKGlkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChpZCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbG9jYXRpb246ICIpOwotCQlyZXN1bHQuYXBwZW5kKGxvY2F0aW9uKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBuYW1lOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChuYW1lKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCByZWY6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHJlZik7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgdG1vZGVsS2V5OiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh0bW9kZWxLZXkpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9UYXhvbm9teUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teVBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZjdkYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teVBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NTggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVBhY2thZ2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlhNTFR5cGVQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwuWE1MVHlwZVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teVBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgVGF4b25vbXlQYWNrYWdlIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBjYXRlZ29yeUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBkb2N1bWVudFJvb3RFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgbmFtZUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyB0YXhvbm9teUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLQkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KLQkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0JICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLQkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAotCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNlTlNfVVJJCi0JICogQHNlZSAjaW5pdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgVGF4b25vbXlQYWNrYWdlSW1wbCgpIHsKLQkJc3VwZXIoZU5TX1VSSSwgVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0JICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLQkgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAotCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLQkgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgotCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLQkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLQkgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6Ci0JICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLQkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotCSAqIHRob3NlIG9mIGFub3RoZXIuCi0JICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2VOU19VUkkKLQkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRheG9ub215UGFja2FnZSBpbml0KCkgewotCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoVGF4b25vbXlQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCi0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgVGF4b25vbXlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFRheG9ub215UGFja2FnZUltcGwoKSk7Ci0KLQkJaXNJbml0ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotCQlYTUxUeXBlUGFja2FnZUltcGwuaW5pdCgpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCi0JCVJUSW5kZXhQYWNrYWdlSW1wbCB0aGVSVEluZGV4UGFja2FnZSA9IChSVEluZGV4UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUlRJbmRleFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSkgOiBSVEluZGV4UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFJlZ2lzdHJ5UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlVURESVJlZ2lzdHJ5UGFja2FnZSA9IChVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFVERElSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0KLQkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSVEluZGV4UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0JCXRoZVRheG9ub215UGFja2FnZS5mcmVlemUoKTsKLQotCQlyZXR1cm4gdGhlVGF4b25vbXlQYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0Q2F0ZWdvcnkoKSB7Ci0JCXJldHVybiBjYXRlZ29yeUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRDYXRlZ29yeV9ObG5hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSljYXRlZ29yeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldENhdGVnb3J5X0NhdGVnb3J5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpY2F0ZWdvcnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRDYXRlZ29yeV9Db2RlKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY2F0ZWdvcnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRDYXRlZ29yeV9OYW1lKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY2F0ZWdvcnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERvY3VtZW50Um9vdCgpIHsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdEVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfTmFtZSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0TmFtZV8oKSB7Ci0JCXJldHVybiBuYW1lRUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVfVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0VGF4b25vbXkoKSB7Ci0JCXJldHVybiB0YXhvbm9teUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUYXhvbm9teV9ObG5hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRheG9ub215X0NhdGVnb3J5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9JZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFRheG9ub215X05hbWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFRheG9ub215X1JlZigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfVG1vZGVsS2V5KCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlGYWN0b3J5IGdldFRheG9ub215RmFjdG9yeSgpIHsKLQkJcmV0dXJuIChUYXhvbm9teUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKLQkJaXNDcmVhdGVkID0gdHJ1ZTsKLQotCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLQkJY2F0ZWdvcnlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQ0FURUdPUlkpOwotCQljcmVhdGVFUmVmZXJlbmNlKGNhdGVnb3J5RUNsYXNzLCBDQVRFR09SWV9fTkxOQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShjYXRlZ29yeUVDbGFzcywgQ0FURUdPUllfX0NBVEVHT1JZKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShjYXRlZ29yeUVDbGFzcywgQ0FURUdPUllfX0NPREUpOwotCQljcmVhdGVFQXR0cmlidXRlKGNhdGVnb3J5RUNsYXNzLCBDQVRFR09SWV9fTkFNRSk7Ci0KLQkJZG9jdW1lbnRSb290RUNsYXNzID0gY3JlYXRlRUNsYXNzKERPQ1VNRU5UX1JPT1QpOwotCQljcmVhdGVFQXR0cmlidXRlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX05BTUUpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fVEFYT05PTVkpOwotCi0JCW5hbWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTkFNRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUobmFtZUVDbGFzcywgTkFNRV9fVkFMVUUpOwotCQljcmVhdGVFQXR0cmlidXRlKG5hbWVFQ2xhc3MsIE5BTUVfX0xBTkcpOwotCi0JCXRheG9ub215RUNsYXNzID0gY3JlYXRlRUNsYXNzKFRBWE9OT01ZKTsKLQkJY3JlYXRlRVJlZmVyZW5jZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX05MTkFNRSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19DQVRFR09SWSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19JRCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19MT0NBVElPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19OQU1FKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX1JFRik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19UTU9ERUxfS0VZKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLQkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47Ci0JCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgcGFja2FnZQotCQlzZXROYW1lKGVOQU1FKTsKLQkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0JCXNldE5zVVJJKGVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsIHRoZVhNTFR5cGVQYWNrYWdlID0gKFhNTFR5cGVQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShYTUxUeXBlUGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0KLQkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQkJaW5pdEVDbGFzcyhjYXRlZ29yeUVDbGFzcywgQ2F0ZWdvcnkuY2xhc3MsICJDYXRlZ29yeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0Q2F0ZWdvcnlfTmxuYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5sbmFtZSIsIG51bGwsIDAsIC0xLCBDYXRlZ29yeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0Q2F0ZWdvcnlfQ2F0ZWdvcnkoKSwgdGhpcy5nZXRDYXRlZ29yeSgpLCBudWxsLCAiY2F0ZWdvcnkiLCBudWxsLCAwLCAtMSwgQ2F0ZWdvcnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldENhdGVnb3J5X0NvZGUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJjb2RlIiwgbnVsbCwgMCwgMSwgQ2F0ZWdvcnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRDYXRlZ29yeV9OYW1lKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAibmFtZSIsIG51bGwsIDAsIDEsIENhdGVnb3J5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKGRvY3VtZW50Um9vdEVDbGFzcywgRG9jdW1lbnRSb290LmNsYXNzLCAiRG9jdW1lbnRSb290IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgZWNvcmVQYWNrYWdlLmdldEVGZWF0dXJlTWFwRW50cnkoKSwgIm1peGVkIiwgbnVsbCwgMCwgLTEsIG51bGwsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4TUxOU1ByZWZpeE1hcCIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4U0lTY2hlbWFMb2NhdGlvbiIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSwgdGhpcy5nZXRDYXRlZ29yeSgpLCBudWxsLCAiY2F0ZWdvcnkiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgdGhpcy5nZXROYW1lXygpLCBudWxsLCAibmFtZSIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKSwgdGhpcy5nZXRUYXhvbm9teSgpLCBudWxsLCAidGF4b25vbXkiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKG5hbWVFQ2xhc3MsIE5hbWUuY2xhc3MsICJOYW1lIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXROYW1lX1ZhbHVlKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBOYW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0TmFtZV9MYW5nKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldExhbmd1YWdlKCksICJsYW5nIiwgbnVsbCwgMCwgMSwgTmFtZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyh0YXhvbm9teUVDbGFzcywgVGF4b25vbXkuY2xhc3MsICJUYXhvbm9teSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0VGF4b25vbXlfTmxuYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5sbmFtZSIsIG51bGwsIDAsIC0xLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0VGF4b25vbXlfQ2F0ZWdvcnkoKSwgdGhpcy5nZXRDYXRlZ29yeSgpLCBudWxsLCAiY2F0ZWdvcnkiLCBudWxsLCAwLCAtMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X0lkKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAiaWQiLCBudWxsLCAwLCAxLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X0xvY2F0aW9uKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAibG9jYXRpb24iLCBudWxsLCAwLCAxLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X05hbWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJuYW1lIiwgbnVsbCwgMCwgMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRUYXhvbm9teV9SZWYoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJyZWYiLCBudWxsLCAwLCAxLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X1Rtb2RlbEtleSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInRtb2RlbEtleSIsIG51bGwsIDEsIDEsIFRheG9ub215LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQkvLyBDcmVhdGUgcmVzb3VyY2UKLQkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0KLQkJLy8gQ3JlYXRlIGFubm90YXRpb25zCi0JCS8vIGh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YQotCQljcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgYW5ub3RhdGlvbnMgZm9yIDxiPmh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YTwvYj4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCkgewotCQlTdHJpbmcgc291cmNlID0gImh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI7CQkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoY2F0ZWdvcnlFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIkNhdGVnb3J5IiwKLQkJCSAia2luZCIsICJlbGVtZW50T25seSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRDYXRlZ29yeV9ObG5hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmxuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldENhdGVnb3J5X0NhdGVnb3J5KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImNhdGVnb3J5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldENhdGVnb3J5X0NvZGUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJjb2RlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldENhdGVnb3J5X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGRvY3VtZW50Um9vdEVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiIiwKLQkJCSAia2luZCIsICJtaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudFdpbGRjYXJkIiwKLQkJCSAibmFtZSIsICI6bWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieG1sbnM6cHJlZml4IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhzaTpzY2hlbWFMb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiY2F0ZWdvcnkiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmFtZSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidGF4b25vbXkiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAobmFtZUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiTmFtZSIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfVmFsdWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiOjAiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXROYW1lX0xhbmcoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsYW5nIiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgICh0YXhvbm9teUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiVGF4b25vbXkiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X05sbmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJubG5hbWUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfQ2F0ZWdvcnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiY2F0ZWdvcnkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfSWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJpZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9Mb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X1JlZigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInJlZiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9UbW9kZWxLZXkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ0bW9kZWxLZXkiCi0JCSAgIH0pOwotCX0KLQotfSAvL1RheG9ub215UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teUFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMmI3MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teUFkYXB0ZXJGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFRheG9ub215UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215QWRhcHRlckZhY3RvcnkoKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBUYXhvbm9teVN3aXRjaCBtb2RlbFN3aXRjaCA9Ci0JCW5ldyBUYXhvbm9teVN3aXRjaCgpIHsKLQkJCXB1YmxpYyBPYmplY3QgY2FzZUNhdGVnb3J5KENhdGVnb3J5IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVDYXRlZ29yeUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZU5hbWUoTmFtZSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlTmFtZUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVRheG9ub215KFRheG9ub215IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVUYXhvbm9teUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLQkJCX0KLQkJfTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0JICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCXJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotCX0KLQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNhdGVnb3J5QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlTmFtZUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVUYXhvbm9teUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9UYXhvbm9teUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVkNWNjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkV4dGVuZGVkTWV0YURhdGE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlRmFjdG9yeUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsLlRheG9ub215UmVzb3VyY2VJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRXh0ZW5kZWRNZXRhRGF0YSBleHRlbmRlZE1ldGFEYXRhOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCQlleHRlbmRlZE1ldGFEYXRhID0gRXh0ZW5kZWRNZXRhRGF0YS5JTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgewotCQlYTUxSZXNvdXJjZSByZXN1bHQgPSBuZXcgVGF4b25vbXlSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfSAvL1RheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2JlZDliLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlSZXNvdXJjZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlSZXNvdXJjZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWwuVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teVJlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215UmVzb3VyY2VJbXBsKFVSSSB1cmkpIHsKLQkJc3VwZXIodXJpKTsKLQl9Ci0KLX0gLy9UYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJkZGM3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215U3dpdGNoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVN3aXRjaC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215U3dpdGNoIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFRheG9ub215UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215U3dpdGNoKCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0JCQlyZXR1cm4KLQkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPwotCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6Ci0JCQkJCWRvU3dpdGNoKChFQ2xhc3MpZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZOiB7Ci0JCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkgPSAoQ2F0ZWdvcnkpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZUNhdGVnb3J5KGNhdGVnb3J5KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UOiB7Ci0JCQkJRG9jdW1lbnRSb290IGRvY3VtZW50Um9vdCA9IChEb2N1bWVudFJvb3QpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURvY3VtZW50Um9vdChkb2N1bWVudFJvb3QpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUU6IHsKLQkJCQlOYW1lIG5hbWUgPSAoTmFtZSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlTmFtZShuYW1lKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWTogewotCQkJCVRheG9ub215IHRheG9ub215ID0gKFRheG9ub215KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VUYXhvbm9teSh0YXhvbm9teSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VDYXRlZ29yeShDYXRlZ29yeSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZVRheG9ub215KFRheG9ub215IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9UYXhvbm9teVN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L0RvY3VtZW50Um9vdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L0RvY3VtZW50Um9vdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OThkY2I2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFVkZGlSZWdpc3RyeSA8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3QoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERvY3VtZW50Um9vdCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcC5FbnRyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTWl4ZWQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGZWF0dXJlTWFwRW50cnkiIG1hbnk9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUZlYXR1cmVNYXAgZ2V0TWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRUYXhvbm9taWVzKFRheG9ub21pZXMpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbWllcyBnZXRUYXhvbm9taWVzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0VGF4b25vbWllcygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VGF4b25vbWllcyhUYXhvbm9taWVzIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVkZGkgUmVnaXN0cnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVkZGkgUmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0VWRkaVJlZ2lzdHJ5KFVERElSZWdpc3RyeSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeSBnZXRVZGRpUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRVZGRpUmVnaXN0cnkgPGVtPlVkZGkgUmVnaXN0cnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVkZGkgUmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldFVkZGlSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VWRkaVJlZ2lzdHJ5KFVERElSZWdpc3RyeSB2YWx1ZSk7Ci0KLX0gLy8gRG9jdW1lbnRSb290CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVGF4b25vbWllcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1RheG9ub21pZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3ZWJjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVGF4b25vbWllcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9taWVzLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRheG9ub21pZXM8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcyNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VGF4b25vbWllcygpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVGF4b25vbWllcyBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRUYXhvbm9taWVzX1RheG9ub215KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0VGF4b25vbXkoKTsKLQotfSAvLyBUYXhvbm9taWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZjIxMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VURESVJlZ2lzdHJ5PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRWZXJzaW9uIDxlbT5WZXJzaW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGlzY292ZXJ5VVJMIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0UHVibGljYXRpb25VUkwgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWREaXNjb3ZlcnlVUkwgPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCA8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0TG9naW4gPGVtPkRlZmF1bHQgTG9naW48L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0UGFzc3dvcmQgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeSgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVURESVJlZ2lzdHJ5IGV4dGVuZHMgUmVnaXN0cnkgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlcnNpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlcnNpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVyc2lvbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmVyc2lvbihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9WZXJzaW9uKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmVyc2lvbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFZlcnNpb24gPGVtPlZlcnNpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlcnNpb248L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFZlcnNpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZlcnNpb24oU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2NvdmVyeSBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2NvdmVyeSBVUkw8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0RGlzY292ZXJ5VVJMKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldERpc2NvdmVyeVVSTCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERpc2NvdmVyeVVSTCA8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0RGlzY292ZXJ5VVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXREaXNjb3ZlcnlVUkwoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlB1YmxpY2F0aW9uIFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0UHVibGljYXRpb25VUkwoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfUHVibGljYXRpb25VUkwoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRQdWJsaWNhdGlvblVSTCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFB1YmxpY2F0aW9uVVJMIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0UHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFB1YmxpY2F0aW9uVVJMKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFNlY3VyZWREaXNjb3ZlcnlVUkwoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfU2VjdXJlZERpc2NvdmVyeVVSTCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFNlY3VyZWREaXNjb3ZlcnlVUkwoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0U2VjdXJlZERpc2NvdmVyeVVSTChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRTZWN1cmVkUHVibGljYXRpb25VUkwoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfU2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMIDxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWZhdWx0IExvZ2luPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWZhdWx0IExvZ2luPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlZmF1bHQgTG9naW48L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldERlZmF1bHRMb2dpbihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9EZWZhdWx0TG9naW4oKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXREZWZhdWx0TG9naW4oKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0TG9naW4gPGVtPkRlZmF1bHQgTG9naW48L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlZmF1bHQgTG9naW48L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldERlZmF1bHRMb2dpbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGVmYXVsdExvZ2luKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWZhdWx0IFBhc3N3b3JkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldERlZmF1bHRQYXNzd29yZChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9EZWZhdWx0UGFzc3dvcmQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXREZWZhdWx0UGFzc3dvcmQoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0UGFzc3dvcmQgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldERlZmF1bHRQYXNzd29yZCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGVmYXVsdFBhc3N3b3JkKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXhvbm9taWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldFRheG9ub21pZXMoVGF4b25vbWllcykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9taWVzIGdldFRheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRUYXhvbm9taWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRUYXhvbm9taWVzKFRheG9ub21pZXMgdmFsdWUpOwotCi19IC8vIFVERElSZWdpc3RyeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMTBjNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5RmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVURESVJlZ2lzdHJ5RmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeUZhY3RvcnkgZUlOU1RBTkNFID0gbmV3IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9taWVzIGNyZWF0ZVRheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VURESVJlZ2lzdHJ5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeSBjcmVhdGVVRERJUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVURESVJlZ2lzdHJ5UGFja2FnZSBnZXRVRERJUmVnaXN0cnlQYWNrYWdlKCk7Ci0KLX0gLy9VRERJUmVnaXN0cnlGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5UGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeVBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFlNWFlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5UGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTY4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5UGFja2FnZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogCi0gKiAgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kCi0gKiAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVzcGFjZS4KLSAqIAotICogICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtCi0gKiAgICAgc3VpdGFibGUgZm9yIGltcG9ydCBieSBvdGhlciBzY2hlbWEgZG9jdW1lbnRzLiAgCi0gKiAKLSAqICAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQKLSAqICAgICBvbmx5IGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIG9yIGl0cyBzdWJncm91cHMuICBUaGUKLSAqICAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQKLSAqICAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwKLSAqICAgICBzcGVjaWZpY2F0aW9uLCBvciBkb2N1bWVudCBpbnN0YW5jZToKLSAqIAotICogICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHByb3ZpZGVzIGEgVVJJIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIGludGVycHJldGluZyBhbnkKLSAqICAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0Ci0gKiAgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBCYXNlIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgZGVjbGFyZWQgdG8gYmUgb2YgdHlwZSBJRC4KLSAqICAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLAotICogICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24KLSAqICAgICAgICAgIHdpdGggdGhlIG1lY2hhbmlzbXMgaXQgcHJvcG9zZXMuICBOb3RlIHRoYXQgaXQgaXMgX25vdF8gaW5jbHVkZWQKLSAqICAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLgotICogCi0gKiAgICAgbGFuZyAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZgotICogICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAgIAotICogICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlCi0gKiAgICAgICAgICB2YWx1ZSBpcyBhIGtleXdvcmQgaW5kaWNhdGluZyB3aGF0IHdoaXRlc3BhY2UgcHJvY2Vzc2luZwotICogICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cwotICogICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMKLSAqICAgICAgICAgIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mIAotICogICAgICAgICAgdGhlIG9yaWdpbmFsIFhNTCBXb3JraW5nIEdyb3VwLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IAotICogICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAKLSAqICAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOgotICogCi0gKiAgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uCi0gKiAgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwCi0gKiAgICAgICAgICAgICAgcmVzZXJ2ZXMgZm9yIEpvbiBCb3NhayBpbiBwZXJwZXR1aXR5IHRoZSBYTUwgbmFtZQotICogICAgICAgICAgICAgIHhtbDpGYXRoZXIKLSAqICAgCi0gKiBUaGlzIHNjaGVtYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYW5kIGFuIGF0dHJpYnV0ZSBncm91cAotICogICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5Ci0gKiAgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQKLSAqICAgICAgICAgYXR0cmlidXRlcyBvbiBlbGVtZW50cyB0aGV5IGRlZmluZS4KLSAqIAotICogICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYQotICogICAgICAgICBmb3IgdGhlIFhNTCBuYW1lc3BhY2UsIGUuZy4gYXMgZm9sbG93czoKLSAqICAgICAgICAgJmx0O3NjaGVtYSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotICogICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8mZ3Q7Ci0gKiAKLSAqICAgICAgICAgU3Vic2VxdWVudGx5LCBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgYXR0cmlidXRlcwotICogICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuCi0gKiAKLSAqICAgICAgICAgJmx0O3R5cGUgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2F0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sOnNwZWNpYWxBdHRycyIvJmd0OwotICogIAotICogICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlCi0gKiAgICAgICAgICBlbGVtZW50IHdpdGggYW55IG9mIHRob3NlIGF0dHJpYnV0ZXMKLSAqIEluIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcKLSAqICAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2QuCi0gKiAgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLgotICogICAgVGhlIHNjaGVtYSBkb2N1bWVudCBhdCB0aGF0IFVSSSBtYXkgaG93ZXZlciBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwKLSAqICAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEKLSAqICAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTAotICogICAgU2NoZW1hIG9yIFhNTCBuYW1lc3BhY2VzIGNoYW5nZSwgdGhlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlCi0gKiAgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZCB3aWxsIG5vdCBjaGFuZ2UuCi0gKiAgIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlGYWN0b3J5Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVURESVJlZ2lzdHJ5UGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTkFNRSA9ICJ1ZGRpcmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19QUkVGSVggPSAidWRkaXJlZ2lzdHJ5IjsKLQotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVURESVJlZ2lzdHJ5UGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsIDxlbT5Eb2N1bWVudCBSb290PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTUlYRUQgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVMgPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVkZGkgUmVnaXN0cnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZID0gNDsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX0ZFQVRVUkVfQ09VTlQgPSA1OwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlRheG9ub21pZXNJbXBsIDxlbT5UYXhvbm9taWVzPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5UYXhvbm9taWVzSW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbCNnZXRUYXhvbm9taWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IFRBWE9OT01JRVMgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NSUVTX19UQVhPTk9NWSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTUlFU19GRUFUVVJFX0NPVU5UID0gMTsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsIDxlbT5VRERJUmVnaXN0cnk8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUlkgPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX05BTUUgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUU7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0lEID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0xPQ0FUSU9OID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWY8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19SRUYgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZXJzaW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fVkVSU0lPTiA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNjb3ZlcnkgVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTCA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QdWJsaWNhdGlvbiBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkwgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fU0VDVVJFRF9ESVNDT1ZFUllfVVJMID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkwgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVmYXVsdCBMb2dpbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0RFRkFVTFRfTE9HSU4gPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDU7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVmYXVsdCBQYXNzd29yZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDY7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX1RBWE9OT01JRVMgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDc7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPlVERElSZWdpc3RyeTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDg7Ci0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NaXhlZDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFRheG9ub21pZXMoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFVkZGlSZWdpc3RyeSA8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlVkZGkgUmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VWRkaVJlZ2lzdHJ5KCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldFRheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzI2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzI2dldFRheG9ub215KCkKLQkgKiBAc2VlICNnZXRUYXhvbm9taWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRUYXhvbm9taWVzX1RheG9ub215KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkgPGVtPlVERElSZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldFVERElSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VmVyc2lvbiA8ZW0+VmVyc2lvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlcnNpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VmVyc2lvbigpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfVmVyc2lvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGlzY292ZXJ5VVJMIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREaXNjb3ZlcnlVUkwoKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0UHVibGljYXRpb25VUkwgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRQdWJsaWNhdGlvblVSTCgpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfUHVibGljYXRpb25VUkwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWREaXNjb3ZlcnlVUkwgPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9TZWN1cmVkRGlzY292ZXJ5VVJMKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9TZWN1cmVkUHVibGljYXRpb25VUkwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRMb2dpbiA8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlZmF1bHQgTG9naW48L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdExvZ2luKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EZWZhdWx0TG9naW4oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRQYXNzd29yZCA8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdFBhc3N3b3JkKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EZWZhdWx0UGFzc3dvcmQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFRheG9ub21pZXMoKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeUZhY3RvcnkgZ2V0VURESVJlZ2lzdHJ5RmFjdG9yeSgpOwotCi19IC8vVURESVJlZ2lzdHJ5UGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODAyZDNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5CYXNpY0ZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0VWRkaVJlZ2lzdHJ5IDxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRSb290SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRG9jdW1lbnRSb290IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaXhlZCgpIDxlbT5NaXhlZDwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRNaXhlZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEZlYXR1cmVNYXAgbWl4ZWQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WE1MTlNQcmVmaXhNYXAoKSA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhNTE5TUHJlZml4TWFwID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkgPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4U0lTY2hlbWFMb2NhdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRG9jdW1lbnRSb290SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBGZWF0dXJlTWFwIGdldE1peGVkKCkgewotCQlpZiAobWl4ZWQgPT0gbnVsbCkgewotCQkJbWl4ZWQgPSBuZXcgQmFzaWNGZWF0dXJlTWFwKHRoaXMsIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQl9Ci0JCXJldHVybiBtaXhlZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpIHsKLQkJaWYgKHhNTE5TUHJlZml4TWFwID09IG51bGwpIHsKLQkJCXhNTE5TUHJlZml4TWFwID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJfQotCQlyZXR1cm4geE1MTlNQcmVmaXhNYXA7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCWlmICh4U0lTY2hlbWFMb2NhdGlvbiA9PSBudWxsKSB7Ci0JCQl4U0lTY2hlbWFMb2NhdGlvbiA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCX0KLQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9taWVzIGdldFRheG9ub21pZXMoKSB7Ci0JCXJldHVybiAoVGF4b25vbWllcylnZXRNaXhlZCgpLmdldChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUYXhvbm9taWVzKFRheG9ub21pZXMgbmV3VGF4b25vbWllcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCksIG5ld1RheG9ub21pZXMsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRheG9ub21pZXMoVGF4b25vbWllcyBuZXdUYXhvbm9taWVzKSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKSwgbmV3VGF4b25vbWllcyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeSBnZXRVZGRpUmVnaXN0cnkoKSB7Ci0JCXJldHVybiAoVURESVJlZ2lzdHJ5KWdldE1peGVkKCkuZ2V0KFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VWRkaVJlZ2lzdHJ5KFVERElSZWdpc3RyeSBuZXdVZGRpUmVnaXN0cnksIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCksIG5ld1VkZGlSZWdpc3RyeSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VWRkaVJlZ2lzdHJ5KFVERElSZWdpc3RyeSBuZXdVZGRpUmVnaXN0cnkpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCksIG5ld1VkZGlSZWdpc3RyeSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE1peGVkKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYTUxOU1ByZWZpeE1hcCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NSUVTOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRUYXhvbm9taWVzKG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRVZGRpUmVnaXN0cnkobnVsbCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIGdldE1peGVkKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4gZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVM6Ci0JCQkJcmV0dXJuIGdldFRheG9ub21pZXMoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZOgotCQkJCXJldHVybiBnZXRVZGRpUmVnaXN0cnkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCWdldE1peGVkKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVM6Ci0JCQkJc2V0VGF4b25vbWllcygoVGF4b25vbWllcyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1VERElfUkVHSVNUUlk6Ci0JCQkJc2V0VWRkaVJlZ2lzdHJ5KChVRERJUmVnaXN0cnkpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVM6Ci0JCQkJc2V0VGF4b25vbWllcygoVGF4b25vbWllcyludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWToKLQkJCQlzZXRVZGRpUmVnaXN0cnkoKFVERElSZWdpc3RyeSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gbWl4ZWQgIT0gbnVsbCAmJiAhbWl4ZWQuaXNFbXB0eSgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwICE9IG51bGwgJiYgIXhNTE5TUHJlZml4TWFwLmlzRW1wdHkoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmICF4U0lTY2hlbWFMb2NhdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTUlFUzoKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbWllcygpICE9IG51bGw7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWToKLQkJCQlyZXR1cm4gZ2V0VWRkaVJlZ2lzdHJ5KCkgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKG1peGVkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChtaXhlZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0RvY3VtZW50Um9vdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1RheG9ub21pZXNJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9UYXhvbm9taWVzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDc1YmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1RheG9ub21pZXNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9taWVzSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRheG9ub21pZXM8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVGF4b25vbWllc0ltcGwjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbWllc0ltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFRheG9ub21pZXMgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRheG9ub215KCkgPGVtPlRheG9ub215PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgdGF4b25vbXkgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFRheG9ub21pZXNJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0VGF4b25vbWllcygpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRUYXhvbm9teSgpIHsKLQkJaWYgKHRheG9ub215ID09IG51bGwpIHsKLQkJCXRheG9ub215ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFRheG9ub215LmNsYXNzLCB0aGlzLCBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZKTsKLQkJfQotCQlyZXR1cm4gdGF4b25vbXk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFRheG9ub215KCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbXkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFU19fVEFYT05PTVk6Ci0JCQkJZ2V0VGF4b25vbXkoKS5jbGVhcigpOwotCQkJCWdldFRheG9ub215KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZOgotCQkJCWdldFRheG9ub215KCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gdGF4b25vbXkgIT0gbnVsbCAmJiAhdGF4b25vbXkuaXNFbXB0eSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLX0gLy9UYXhvbm9taWVzSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODAzM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeUZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgVURESVJlZ2lzdHJ5RmFjdG9yeSB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbmQgaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7Ci0JCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVDogcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVM6IHJldHVybiBjcmVhdGVUYXhvbm9taWVzKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWTogcmV0dXJuIGNyZWF0ZVVERElSZWdpc3RyeSgpOwotCQkJZGVmYXVsdDoKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKSB7Ci0JCURvY3VtZW50Um9vdEltcGwgZG9jdW1lbnRSb290ID0gbmV3IERvY3VtZW50Um9vdEltcGwoKTsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbWllcyBjcmVhdGVUYXhvbm9taWVzKCkgewotCQlUYXhvbm9taWVzSW1wbCB0YXhvbm9taWVzID0gbmV3IFRheG9ub21pZXNJbXBsKCk7Ci0JCXJldHVybiB0YXhvbm9taWVzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnkgY3JlYXRlVURESVJlZ2lzdHJ5KCkgewotCQlVRERJUmVnaXN0cnlJbXBsIHVkZGlSZWdpc3RyeSA9IG5ldyBVRERJUmVnaXN0cnlJbXBsKCk7Ci0JCXJldHVybiB1ZGRpUmVnaXN0cnk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeVBhY2thZ2UgZ2V0VURESVJlZ2lzdHJ5UGFja2FnZSgpIHsKLQkJcmV0dXJuIChVRERJUmVnaXN0cnlQYWNrYWdlKWdldEVQYWNrYWdlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZGVwcmVjYXRlZAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVERElSZWdpc3RyeVBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKLQkJcmV0dXJuIFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFOwotCX0KLQotfSAvL1VERElSZWdpc3RyeUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZTM4YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VURESVJlZ2lzdHJ5PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0VmVyc2lvbiA8ZW0+VmVyc2lvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldERpc2NvdmVyeVVSTCA8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldFB1YmxpY2F0aW9uVVJMIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0RGVmYXVsdExvZ2luIDxlbT5EZWZhdWx0IExvZ2luPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0RGVmYXVsdFBhc3N3b3JkIDxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeUltcGwgZXh0ZW5kcyBSZWdpc3RyeUltcGwgaW1wbGVtZW50cyBVRERJUmVnaXN0cnkgewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZXJzaW9uKCkgPGVtPlZlcnNpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZlcnNpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlNJT05fRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVyc2lvbigpIDxlbT5WZXJzaW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWZXJzaW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHZlcnNpb24gPSBWRVJTSU9OX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2NvdmVyeVVSTCgpIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREaXNjb3ZlcnlVUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0NPVkVSWV9VUkxfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzY292ZXJ5VVJMKCkgPGVtPkRpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERpc2NvdmVyeVVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBkaXNjb3ZlcnlVUkwgPSBESVNDT1ZFUllfVVJMX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFB1YmxpY2F0aW9uVVJMKCkgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQdWJsaWNhdGlvblVSTCgpIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHB1YmxpY2F0aW9uVVJMID0gUFVCTElDQVRJT05fVVJMX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlY3VyZWREaXNjb3ZlcnlVUkwoKSA8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTRUNVUkVEX0RJU0NPVkVSWV9VUkxfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFNlY3VyZWREaXNjb3ZlcnlVUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgc2VjdXJlZERpc2NvdmVyeVVSTCA9IFNFQ1VSRURfRElTQ09WRVJZX1VSTF9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKSA8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDVVJFRF9QVUJMSUNBVElPTl9VUkxfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgc2VjdXJlZFB1YmxpY2F0aW9uVVJMID0gU0VDVVJFRF9QVUJMSUNBVElPTl9VUkxfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVmYXVsdExvZ2luKCkgPGVtPkRlZmF1bHQgTG9naW48L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlZmF1bHRMb2dpbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0dJTl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWZhdWx0TG9naW4oKSA8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGVmYXVsdExvZ2luKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGRlZmF1bHRMb2dpbiA9IERFRkFVTFRfTE9HSU5fRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVmYXVsdFBhc3N3b3JkKCkgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlZmF1bHRQYXNzd29yZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9QQVNTV09SRF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWZhdWx0UGFzc3dvcmQoKSA8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGVmYXVsdFBhc3N3b3JkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGRlZmF1bHRQYXNzd29yZCA9IERFRkFVTFRfUEFTU1dPUkRfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXhvbm9taWVzKCkgPGVtPlRheG9ub21pZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFRheG9ub21pZXMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBUYXhvbm9taWVzIHRheG9ub21pZXMgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFVERElSZWdpc3RyeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXRVRERJUmVnaXN0cnkoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZlcnNpb24oKSB7Ci0JCXJldHVybiB2ZXJzaW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZlcnNpb24oU3RyaW5nIG5ld1ZlcnNpb24pIHsKLQkJU3RyaW5nIG9sZFZlcnNpb24gPSB2ZXJzaW9uOwotCQl2ZXJzaW9uID0gbmV3VmVyc2lvbjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19WRVJTSU9OLCBvbGRWZXJzaW9uLCB2ZXJzaW9uKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREaXNjb3ZlcnlVUkwoKSB7Ci0JCXJldHVybiBkaXNjb3ZlcnlVUkw7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGlzY292ZXJ5VVJMKFN0cmluZyBuZXdEaXNjb3ZlcnlVUkwpIHsKLQkJU3RyaW5nIG9sZERpc2NvdmVyeVVSTCA9IGRpc2NvdmVyeVVSTDsKLQkJZGlzY292ZXJ5VVJMID0gbmV3RGlzY292ZXJ5VVJMOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RJU0NPVkVSWV9VUkwsIG9sZERpc2NvdmVyeVVSTCwgZGlzY292ZXJ5VVJMKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQdWJsaWNhdGlvblVSTCgpIHsKLQkJcmV0dXJuIHB1YmxpY2F0aW9uVVJMOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFB1YmxpY2F0aW9uVVJMKFN0cmluZyBuZXdQdWJsaWNhdGlvblVSTCkgewotCQlTdHJpbmcgb2xkUHVibGljYXRpb25VUkwgPSBwdWJsaWNhdGlvblVSTDsKLQkJcHVibGljYXRpb25VUkwgPSBuZXdQdWJsaWNhdGlvblVSTDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkwsIG9sZFB1YmxpY2F0aW9uVVJMLCBwdWJsaWNhdGlvblVSTCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpIHsKLQkJcmV0dXJuIHNlY3VyZWREaXNjb3ZlcnlVUkw7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VjdXJlZERpc2NvdmVyeVVSTChTdHJpbmcgbmV3U2VjdXJlZERpc2NvdmVyeVVSTCkgewotCQlTdHJpbmcgb2xkU2VjdXJlZERpc2NvdmVyeVVSTCA9IHNlY3VyZWREaXNjb3ZlcnlVUkw7Ci0JCXNlY3VyZWREaXNjb3ZlcnlVUkwgPSBuZXdTZWN1cmVkRGlzY292ZXJ5VVJMOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTCwgb2xkU2VjdXJlZERpc2NvdmVyeVVSTCwgc2VjdXJlZERpc2NvdmVyeVVSTCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkgewotCQlyZXR1cm4gc2VjdXJlZFB1YmxpY2F0aW9uVVJMOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlY3VyZWRQdWJsaWNhdGlvblVSTChTdHJpbmcgbmV3U2VjdXJlZFB1YmxpY2F0aW9uVVJMKSB7Ci0JCVN0cmluZyBvbGRTZWN1cmVkUHVibGljYXRpb25VUkwgPSBzZWN1cmVkUHVibGljYXRpb25VUkw7Ci0JCXNlY3VyZWRQdWJsaWNhdGlvblVSTCA9IG5ld1NlY3VyZWRQdWJsaWNhdGlvblVSTDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTCwgb2xkU2VjdXJlZFB1YmxpY2F0aW9uVVJMLCBzZWN1cmVkUHVibGljYXRpb25VUkwpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRMb2dpbigpIHsKLQkJcmV0dXJuIGRlZmF1bHRMb2dpbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0TG9naW4oU3RyaW5nIG5ld0RlZmF1bHRMb2dpbikgewotCQlTdHJpbmcgb2xkRGVmYXVsdExvZ2luID0gZGVmYXVsdExvZ2luOwotCQlkZWZhdWx0TG9naW4gPSBuZXdEZWZhdWx0TG9naW47Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTiwgb2xkRGVmYXVsdExvZ2luLCBkZWZhdWx0TG9naW4pKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRQYXNzd29yZCgpIHsKLQkJcmV0dXJuIGRlZmF1bHRQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0UGFzc3dvcmQoU3RyaW5nIG5ld0RlZmF1bHRQYXNzd29yZCkgewotCQlTdHJpbmcgb2xkRGVmYXVsdFBhc3N3b3JkID0gZGVmYXVsdFBhc3N3b3JkOwotCQlkZWZhdWx0UGFzc3dvcmQgPSBuZXdEZWZhdWx0UGFzc3dvcmQ7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRCwgb2xkRGVmYXVsdFBhc3N3b3JkLCBkZWZhdWx0UGFzc3dvcmQpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbWllcyBnZXRUYXhvbm9taWVzKCkgewotCQlyZXR1cm4gdGF4b25vbWllczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUYXhvbm9taWVzKFRheG9ub21pZXMgbmV3VGF4b25vbWllcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlUYXhvbm9taWVzIG9sZFRheG9ub21pZXMgPSB0YXhvbm9taWVzOwotCQl0YXhvbm9taWVzID0gbmV3VGF4b25vbWllczsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7Ci0JCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTLCBvbGRUYXhvbm9taWVzLCBuZXdUYXhvbm9taWVzKTsKLQkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKLQkJfQotCQlyZXR1cm4gbXNnczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXhvbm9taWVzKFRheG9ub21pZXMgbmV3VGF4b25vbWllcykgewotCQlpZiAobmV3VGF4b25vbWllcyAhPSB0YXhvbm9taWVzKSB7Ci0JCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKLQkJCWlmICh0YXhvbm9taWVzICE9IG51bGwpCi0JCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXRheG9ub21pZXMpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVMsIG51bGwsIG1zZ3MpOwotCQkJaWYgKG5ld1RheG9ub21pZXMgIT0gbnVsbCkKLQkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3VGF4b25vbWllcykuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUywgbnVsbCwgbXNncyk7Ci0JCQltc2dzID0gYmFzaWNTZXRUYXhvbm9taWVzKG5ld1RheG9ub21pZXMsIG1zZ3MpOwotCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOwotCQl9Ci0JCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTLCBuZXdUYXhvbm9taWVzLCBuZXdUYXhvbm9taWVzKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX05BTUU6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TmFtZSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldERlc2NyaXB0aW9uKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUzoKLQkJCQkJcmV0dXJuIGJhc2ljU2V0VGF4b25vbWllcyhudWxsLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fSUQ6Ci0JCQkJcmV0dXJuIGdldElkKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIGdldExvY2F0aW9uKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUkVGOgotCQkJCXJldHVybiBnZXRSZWYoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19WRVJTSU9OOgotCQkJCXJldHVybiBnZXRWZXJzaW9uKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTDoKLQkJCQlyZXR1cm4gZ2V0RGlzY292ZXJ5VVJMKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMOgotCQkJCXJldHVybiBnZXRQdWJsaWNhdGlvblVSTCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTDoKLQkJCQlyZXR1cm4gZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfUFVCTElDQVRJT05fVVJMOgotCQkJCXJldHVybiBnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOOgotCQkJCXJldHVybiBnZXREZWZhdWx0TG9naW4oKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JEOgotCQkJCXJldHVybiBnZXREZWZhdWx0UGFzc3dvcmQoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTOgotCQkJCXJldHVybiBnZXRUYXhvbm9taWVzKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX05BTUU6Ci0JCQkJZ2V0TmFtZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0TmFtZSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXREZXNjcmlwdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0lEOgotCQkJCXNldElkKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlzZXRMb2NhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUkVGOgotCQkJCXNldFJlZigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVkVSU0lPTjoKLQkJCQlzZXRWZXJzaW9uKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMOgotCQkJCXNldERpc2NvdmVyeVVSTCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMOgotCQkJCXNldFB1YmxpY2F0aW9uVVJMKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkw6Ci0JCQkJc2V0U2VjdXJlZERpc2NvdmVyeVVSTCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkw6Ci0JCQkJc2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOOgotCQkJCXNldERlZmF1bHRMb2dpbigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRDoKLQkJCQlzZXREZWZhdWx0UGFzc3dvcmQoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVM6Ci0JCQkJc2V0VGF4b25vbWllcygoVGF4b25vbWllcyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0lEOgotCQkJCXNldElkKElEX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oTE9DQVRJT05fRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19SRUY6Ci0JCQkJc2V0UmVmKFJFRl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1ZFUlNJT046Ci0JCQkJc2V0VmVyc2lvbihWRVJTSU9OX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTDoKLQkJCQlzZXREaXNjb3ZlcnlVUkwoRElTQ09WRVJZX1VSTF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlzZXRQdWJsaWNhdGlvblVSTChQVUJMSUNBVElPTl9VUkxfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkw6Ci0JCQkJc2V0U2VjdXJlZERpc2NvdmVyeVVSTChTRUNVUkVEX0RJU0NPVkVSWV9VUkxfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlzZXRTZWN1cmVkUHVibGljYXRpb25VUkwoU0VDVVJFRF9QVUJMSUNBVElPTl9VUkxfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOOgotCQkJCXNldERlZmF1bHRMb2dpbihERUZBVUxUX0xPR0lOX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRDoKLQkJCQlzZXREZWZhdWx0UGFzc3dvcmQoREVGQVVMVF9QQVNTV09SRF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVM6Ci0JCQkJc2V0VGF4b25vbWllcygoVGF4b25vbWllcyludWxsKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19OQU1FOgotCQkJCXJldHVybiBuYW1lICE9IG51bGwgJiYgIW5hbWUuaXNFbXB0eSgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBkZXNjcmlwdGlvbiAhPSBudWxsICYmICFkZXNjcmlwdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fSUQ6Ci0JCQkJcmV0dXJuIElEX0VERUZBVUxUID09IG51bGwgPyBpZCAhPSBudWxsIDogIUlEX0VERUZBVUxULmVxdWFscyhpZCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIExPQ0FUSU9OX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvbiAhPSBudWxsIDogIUxPQ0FUSU9OX0VERUZBVUxULmVxdWFscyhsb2NhdGlvbik7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUkVGOgotCQkJCXJldHVybiBSRUZfRURFRkFVTFQgPT0gbnVsbCA/IHJlZiAhPSBudWxsIDogIVJFRl9FREVGQVVMVC5lcXVhbHMocmVmKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19WRVJTSU9OOgotCQkJCXJldHVybiBWRVJTSU9OX0VERUZBVUxUID09IG51bGwgPyB2ZXJzaW9uICE9IG51bGwgOiAhVkVSU0lPTl9FREVGQVVMVC5lcXVhbHModmVyc2lvbik7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTDoKLQkJCQlyZXR1cm4gRElTQ09WRVJZX1VSTF9FREVGQVVMVCA9PSBudWxsID8gZGlzY292ZXJ5VVJMICE9IG51bGwgOiAhRElTQ09WRVJZX1VSTF9FREVGQVVMVC5lcXVhbHMoZGlzY292ZXJ5VVJMKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkw6Ci0JCQkJcmV0dXJuIFBVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVCA9PSBudWxsID8gcHVibGljYXRpb25VUkwgIT0gbnVsbCA6ICFQVUJMSUNBVElPTl9VUkxfRURFRkFVTFQuZXF1YWxzKHB1YmxpY2F0aW9uVVJMKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkw6Ci0JCQkJcmV0dXJuIFNFQ1VSRURfRElTQ09WRVJZX1VSTF9FREVGQVVMVCA9PSBudWxsID8gc2VjdXJlZERpc2NvdmVyeVVSTCAhPSBudWxsIDogIVNFQ1VSRURfRElTQ09WRVJZX1VSTF9FREVGQVVMVC5lcXVhbHMoc2VjdXJlZERpc2NvdmVyeVVSTCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkw6Ci0JCQkJcmV0dXJuIFNFQ1VSRURfUFVCTElDQVRJT05fVVJMX0VERUZBVUxUID09IG51bGwgPyBzZWN1cmVkUHVibGljYXRpb25VUkwgIT0gbnVsbCA6ICFTRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVC5lcXVhbHMoc2VjdXJlZFB1YmxpY2F0aW9uVVJMKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOOgotCQkJCXJldHVybiBERUZBVUxUX0xPR0lOX0VERUZBVUxUID09IG51bGwgPyBkZWZhdWx0TG9naW4gIT0gbnVsbCA6ICFERUZBVUxUX0xPR0lOX0VERUZBVUxULmVxdWFscyhkZWZhdWx0TG9naW4pOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQ6Ci0JCQkJcmV0dXJuIERFRkFVTFRfUEFTU1dPUkRfRURFRkFVTFQgPT0gbnVsbCA/IGRlZmF1bHRQYXNzd29yZCAhPSBudWxsIDogIURFRkFVTFRfUEFTU1dPUkRfRURFRkFVTFQuZXF1YWxzKGRlZmF1bHRQYXNzd29yZCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUzoKLQkJCQlyZXR1cm4gdGF4b25vbWllcyAhPSBudWxsOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmVyc2lvbjogIik7Ci0JCXJlc3VsdC5hcHBlbmQodmVyc2lvbik7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgZGlzY292ZXJ5VVJMOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChkaXNjb3ZlcnlVUkwpOwotCQlyZXN1bHQuYXBwZW5kKCIsIHB1YmxpY2F0aW9uVVJMOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChwdWJsaWNhdGlvblVSTCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgc2VjdXJlZERpc2NvdmVyeVVSTDogIik7Ci0JCXJlc3VsdC5hcHBlbmQoc2VjdXJlZERpc2NvdmVyeVVSTCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgc2VjdXJlZFB1YmxpY2F0aW9uVVJMOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChzZWN1cmVkUHVibGljYXRpb25VUkwpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGRlZmF1bHRMb2dpbjogIik7Ci0JCXJlc3VsdC5hcHBlbmQoZGVmYXVsdExvZ2luKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBkZWZhdWx0UGFzc3dvcmQ6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGRlZmF1bHRQYXNzd29yZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL1VERElSZWdpc3RyeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzc1MjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NDIgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuWE1MVHlwZVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbC5YTUxUeXBlUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBVRERJUmVnaXN0cnlQYWNrYWdlIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBkb2N1bWVudFJvb3RFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgdGF4b25vbWllc0VDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyB1ZGRpUmVnaXN0cnlFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAotCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0JICogcGFja2FnZSBVUkkgdmFsdWUuCi0JICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYwotCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0JICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLQkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNlTlNfVVJJCi0JICogQHNlZSAjaW5pdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwoKSB7Ci0JCXN1cGVyKGVOU19VUkksIFVERElSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLQkgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQotCSAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0JICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0JICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAotCSAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0JICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotCSAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAotCSAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLQkgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotCSAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCi0JICogdGhvc2Ugb2YgYW5vdGhlci4KLQkgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0JICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZU5TX1VSSQotCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0JICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgVURESVJlZ2lzdHJ5UGFja2FnZSBpbml0KCkgewotCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoVURESVJlZ2lzdHJ5UGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVRERJUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLQkJVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlVURESVJlZ2lzdHJ5UGFja2FnZSA9IChVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFVERElSZWdpc3RyeVBhY2thZ2VJbXBsKCkpOwotCi0JCWlzSW5pdGVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcwotCQlSVEluZGV4UGFja2FnZUltcGwgdGhlUlRJbmRleFBhY2thZ2UgPSAoUlRJbmRleFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJUSW5kZXhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIDogUlRJbmRleFBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRheG9ub215UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSkgOiBUYXhvbm9teVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlUmVnaXN0cnlQYWNrYWdlID0gKFJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgOiBSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0KLQkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJUSW5kZXhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuZnJlZXplKCk7Ci0KLQkJcmV0dXJuIHRoZVVERElSZWdpc3RyeVBhY2thZ2U7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXREb2N1bWVudFJvb3QoKSB7Ci0JCXJldHVybiBkb2N1bWVudFJvb3RFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRUYXhvbm9taWVzKCkgewotCQlyZXR1cm4gdGF4b25vbWllc0VDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUYXhvbm9taWVzX1RheG9ub215KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGF4b25vbWllc0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0VURESVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gdWRkaVJlZ2lzdHJ5RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9WZXJzaW9uKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9QdWJsaWNhdGlvblVSTCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9TZWN1cmVkRGlzY292ZXJ5VVJMKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWRQdWJsaWNhdGlvblVSTCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EZWZhdWx0TG9naW4oKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfRGVmYXVsdFBhc3N3b3JkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5RmFjdG9yeSBnZXRVRERJUmVnaXN0cnlGYWN0b3J5KCkgewotCQlyZXR1cm4gKFVERElSZWdpc3RyeUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKLQkJaXNDcmVhdGVkID0gdHJ1ZTsKLQotCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLQkJZG9jdW1lbnRSb290RUNsYXNzID0gY3JlYXRlRUNsYXNzKERPQ1VNRU5UX1JPT1QpOwotCQljcmVhdGVFQXR0cmlidXRlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVMpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWSk7Ci0KLQkJdGF4b25vbWllc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUQVhPTk9NSUVTKTsKLQkJY3JlYXRlRVJlZmVyZW5jZSh0YXhvbm9taWVzRUNsYXNzLCBUQVhPTk9NSUVTX19UQVhPTk9NWSk7Ci0KLQkJdWRkaVJlZ2lzdHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFVERElfUkVHSVNUUlkpOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fVkVSU0lPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkwpOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkwpOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JEKTsKLQkJY3JlYXRlRVJlZmVyZW5jZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX1RBWE9OT01JRVMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcwotCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKLQkJaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0JCXNldE5hbWUoZU5BTUUpOwotCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLQkJc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcwotCQlUYXhvbm9teVBhY2thZ2VJbXBsIHRoZVRheG9ub215UGFja2FnZSA9IChUYXhvbm9teVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKTsKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSk7Ci0JCVhNTFR5cGVQYWNrYWdlSW1wbCB0aGVYTUxUeXBlUGFja2FnZSA9IChYTUxUeXBlUGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoWE1MVHlwZVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotCQl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlUmVnaXN0cnlQYWNrYWdlLmdldFJlZ2lzdHJ5KCkpOwotCi0JCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0JCWluaXRFQ2xhc3MoZG9jdW1lbnRSb290RUNsYXNzLCBEb2N1bWVudFJvb3QuY2xhc3MsICJEb2N1bWVudFJvb3QiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUZlYXR1cmVNYXBFbnRyeSgpLCAibWl4ZWQiLCBudWxsLCAwLCAtMSwgbnVsbCwgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhNTE5TUHJlZml4TWFwIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhTSVNjaGVtYUxvY2F0aW9uIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCksIHRoaXMuZ2V0VGF4b25vbWllcygpLCBudWxsLCAidGF4b25vbWllcyIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCksIHRoaXMuZ2V0VURESVJlZ2lzdHJ5KCksIG51bGwsICJ1ZGRpUmVnaXN0cnkiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKHRheG9ub21pZXNFQ2xhc3MsIFRheG9ub21pZXMuY2xhc3MsICJUYXhvbm9taWVzIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RVJlZmVyZW5jZShnZXRUYXhvbm9taWVzX1RheG9ub215KCksIHRoZVRheG9ub215UGFja2FnZS5nZXRUYXhvbm9teSgpLCBudWxsLCAidGF4b25vbXkiLCBudWxsLCAwLCAtMSwgVGF4b25vbWllcy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESVJlZ2lzdHJ5LmNsYXNzLCAiVURESVJlZ2lzdHJ5IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfVmVyc2lvbigpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInZlcnNpb24iLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfRGlzY292ZXJ5VVJMKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAiZGlzY292ZXJ5VVJMIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X1B1YmxpY2F0aW9uVVJMKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAicHVibGljYXRpb25VUkwiLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfU2VjdXJlZERpc2NvdmVyeVVSTCgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgInNlY3VyZWREaXNjb3ZlcnlVUkwiLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfU2VjdXJlZFB1YmxpY2F0aW9uVVJMKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAic2VjdXJlZFB1YmxpY2F0aW9uVVJMIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRMb2dpbigpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgImRlZmF1bHRMb2dpbiIsIG51bGwsIDEsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFVERElSZWdpc3RyeV9EZWZhdWx0UGFzc3dvcmQoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJkZWZhdWx0UGFzc3dvcmQiLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRVRERJUmVnaXN0cnlfVGF4b25vbWllcygpLCB0aGlzLmdldFRheG9ub21pZXMoKSwgbnVsbCwgInRheG9ub21pZXMiLCBudWxsLCAwLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJLy8gQ3JlYXRlIHJlc291cmNlCi0JCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotCi0JCS8vIENyZWF0ZSBhbm5vdGF0aW9ucwotCQkvLyBodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEKLQkJY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhlIGFubm90YXRpb25zIGZvciA8Yj5odHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGE8L2I+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpIHsKLQkJU3RyaW5nIHNvdXJjZSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiOwkJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGRvY3VtZW50Um9vdEVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiIiwKLQkJCSAia2luZCIsICJtaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudFdpbGRjYXJkIiwKLQkJCSAibmFtZSIsICI6bWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieG1sbnM6cHJlZml4IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhzaTpzY2hlbWFMb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ0YXhvbm9taWVzIiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidWRkaVJlZ2lzdHJ5IiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKHRheG9ub21pZXNFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIlRheG9ub21pZXMiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub21pZXNfVGF4b25vbXkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidGF4b25vbXkiLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAodWRkaVJlZ2lzdHJ5RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJVRERJUmVnaXN0cnkiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9WZXJzaW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInZlcnNpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkaXNjb3ZlcnlVUkwiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X1B1YmxpY2F0aW9uVVJMKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInB1YmxpY2F0aW9uVVJMIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9TZWN1cmVkRGlzY292ZXJ5VVJMKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInNlY3VyZWREaXNjb3ZlcnlVUkwiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWRQdWJsaWNhdGlvblVSTCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJzZWN1cmVkUHVibGljYXRpb25VUkwiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRMb2dpbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZWZhdWx0TG9naW4iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRQYXNzd29yZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZWZhdWx0UGFzc3dvcmQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidGF4b25vbWllcyIKLQkJICAgfSk7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzhlMGM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBVRERJUmVnaXN0cnlQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkoKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgewotCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgc3dpdGNoIHRoZSBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgVURESVJlZ2lzdHJ5U3dpdGNoIG1vZGVsU3dpdGNoID0KLQkJbmV3IFVERElSZWdpc3RyeVN3aXRjaCgpIHsKLQkJCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVRheG9ub21pZXMoVGF4b25vbWllcyBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlVGF4b25vbWllc0FkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVVERElSZWdpc3RyeShVRERJUmVnaXN0cnkgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZVVERElSZWdpc3RyeUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVJlZ2lzdHJ5KFJlZ2lzdHJ5IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVSZWdpc3RyeUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLQkJCX0KLQkJfTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0JICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCXJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotCX0KLQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRheG9ub21pZXNBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSA8ZW0+VURESVJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVVRERJUmVnaXN0cnlBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVnaXN0cnlBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzMTVhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FeHRlbmRlZE1ldGFEYXRhOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUZhY3RvcnlJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LnV0aWwuVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEV4dGVuZGVkTWV0YURhdGEgZXh0ZW5kZWRNZXRhRGF0YTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JCWV4dGVuZGVkTWV0YURhdGEgPSBFeHRlbmRlZE1ldGFEYXRhLklOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7Ci0JCVhNTFJlc291cmNlIHJlc3VsdCA9IG5ldyBVRERJUmVnaXN0cnlSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfSAvL1VERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMDI5YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsLlVERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeVJlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeVJlc291cmNlSW1wbChVUkkgdXJpKSB7Ci0JCXN1cGVyKHVyaSk7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5U3dpdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQzZDhhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeVN3aXRjaC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5U3dpdGNoIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFVERElSZWdpc3RyeVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnlTd2l0Y2goKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0JCQlyZXR1cm4KLQkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPwotCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6Ci0JCQkJCWRvU3dpdGNoKChFQ2xhc3MpZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UOiB7Ci0JCQkJRG9jdW1lbnRSb290IGRvY3VtZW50Um9vdCA9IChEb2N1bWVudFJvb3QpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURvY3VtZW50Um9vdChkb2N1bWVudFJvb3QpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTOiB7Ci0JCQkJVGF4b25vbWllcyB0YXhvbm9taWVzID0gKFRheG9ub21pZXMpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZVRheG9ub21pZXModGF4b25vbWllcyk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUlk6IHsKLQkJCQlVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ID0gKFVERElSZWdpc3RyeSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlVURESVJlZ2lzdHJ5KHVkZGlSZWdpc3RyeSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUmVnaXN0cnkodWRkaVJlZ2lzdHJ5KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VUYXhvbm9taWVzKFRheG9ub21pZXMgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VURESVJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VVRERJUmVnaXN0cnkoVURESVJlZ2lzdHJ5IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZVJlZ2lzdHJ5KFJlZ2lzdHJ5IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9VRERJUmVnaXN0cnlTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9uaXRvci9HZXRNb25pdG9yQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0dldE1vbml0b3JDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZGVlNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0dldE1vbml0b3JDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb25pdG9yOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9uaXRvcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuTW9uaXRvckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnV0aWwuU29ja2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBHZXRNb25pdG9yQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQlwcml2YXRlIGJvb2xlYW4gbW9uaXRvclNlcnZpY2U7Ci0KLQlwcml2YXRlIGJvb2xlYW4gY3JlYXRlOwotCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0KLQlwcml2YXRlIExpc3QgZW5kcG9pbnRzOwotCi0JcHVibGljIEdldE1vbml0b3JDb21tYW5kKCkgewotCQltb25pdG9yU2VydmljZSA9IHRydWU7Ci0JCWNyZWF0ZSA9IHRydWU7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSB7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCi0JCWVuZHBvaW50cyA9IG5ldyBWZWN0b3IoKTsKLQkJaWYgKG1vbml0b3JTZXJ2aWNlICYmIHdlYlNlcnZpY2VzUGFyc2VyICE9IG51bGwgJiYgd3NkbFVSSSAhPSBudWxsICYmIHdzZGxVUkkubGVuZ3RoKCkgPiAwKSB7Ci0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCQlNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0JCQkJZm9yIChJdGVyYXRvciBzZXJ2aWNlc0l0ID0gc2VydmljZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsgc2VydmljZXNJdC5oYXNOZXh0KCk7KSB7Ci0JCQkJCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBzZXJ2aWNlc0l0Lm5leHQoKTsKLQkJCQkJTWFwIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotCQkJCQlmb3IgKEl0ZXJhdG9yIHBvcnRzSXQgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBwb3J0c0l0Lmhhc05leHQoKTspIHsKLQkJCQkJCVBvcnQgd3NkbFBvcnQgPSAoUG9ydCkgcG9ydHNJdC5uZXh0KCk7Ci0JCQkJCQlMaXN0IGV4dEVsZW1lbnRzID0gd3NkbFBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0JCQkJCQlmb3IgKEl0ZXJhdG9yIGV4dEVsZW1lbnRzSXQgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOyBleHRFbGVtZW50c0l0Lmhhc05leHQoKTspIHsKLQkJCQkJCQlFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50c0l0Lm5leHQoKTsKLQkJCQkJCQlTdHJpbmcgZW5kcG9pbnQgPSBudWxsOwotCQkJCQkJCVVSTCBlbmRwb2ludFVSTCA9IG51bGw7Ci0JCQkJCQkJaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLQkJCQkJCQkJZW5kcG9pbnQgPSAoKFNPQVBBZGRyZXNzKSBleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQkJCWVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLQkJCQkJCQkJZW5kcG9pbnQgPSAoKEhUVFBBZGRyZXNzKSBleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQkJCWlmIChlbmRwb2ludCAhPSBudWxsKSB7Ci0JCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQllbmRwb2ludFVSTCA9IG5ldyBVUkwoZW5kcG9pbnQpOwotCQkJCQkJCQl9Ci0JCQkJCQkJCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpIHsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCQlpZiAoZW5kcG9pbnRVUkwgIT0gbnVsbCkgewotCQkJCQkJCQlTdHJpbmcgcHJvdG9jb2wgPSBlbmRwb2ludFVSTC5nZXRQcm90b2NvbCgpOwotCQkJCQkJCQlTdHJpbmcgaG9zdCA9IGVuZHBvaW50VVJMLmdldEhvc3QoKTsKLQkJCQkJCQkJaW50IHBvcnQgPSBlbmRwb2ludFVSTC5nZXRQb3J0KCk7Ci0JCQkJCQkJCWlmIChwb3J0ID09IC0xKSB7Ci0JCQkJCQkJCQlpZiAoImh0dHAiLmVxdWFsc0lnbm9yZUNhc2UocHJvdG9jb2wpKQotCQkJCQkJCQkJCXBvcnQgPSA4MDsKLQkJCQkJCQkJCWVsc2UgaWYgKCJodHRwcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpCi0JCQkJCQkJCQkJcG9ydCA9IDQ0MzsKLQkJCQkJCQkJfQotCQkJCQkJCQlpZiAocHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC5zdGFydHNXaXRoKCJodHRwIikgJiYgaG9zdCAhPSBudWxsICYmIGhvc3QubGVuZ3RoKCkgPiAwICYmIHBvcnQgIT0gLTEpIHsKLQkJCQkJCQkJCUlNb25pdG9yIG0gPSBudWxsOwotCQkJCQkJCQkJSU1vbml0b3JbXSBtb25pdG9ycyA9IE1vbml0b3JDb3JlLmdldE1vbml0b3JzKCk7Ci0JCQkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IG1vbml0b3JzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQkJCQkJaWYgKGhvc3QuZXF1YWxzSWdub3JlQ2FzZShtb25pdG9yc1tpXS5nZXRSZW1vdGVIb3N0KCkpICYmIHBvcnQgPT0gbW9uaXRvcnNbaV0uZ2V0UmVtb3RlUG9ydCgpKSB7Ci0JCQkJCQkJCQkJCW0gPSBtb25pdG9yc1tpXTsKLQkJCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQkJaWYgKG0gPT0gbnVsbCAmJiBjcmVhdGUpIHsKLQkJCQkJCQkJCQlpbnQgbW9uaXRvcmVkUG9ydCA9IFNvY2tldFV0aWwuZmluZFVudXNlZFBvcnQoNTAwMCwgMTUwMDApOwotCQkJCQkJCQkJCUlNb25pdG9yV29ya2luZ0NvcHkgbW9uaXRvcldvcmtpbmdDb3B5ID0gTW9uaXRvckNvcmUuY3JlYXRlTW9uaXRvcigpOwotCQkJCQkJCQkJCW1vbml0b3JXb3JraW5nQ29weS5zZXRMb2NhbFBvcnQobW9uaXRvcmVkUG9ydCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFJlbW90ZUhvc3QoaG9zdCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFJlbW90ZVBvcnQocG9ydCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFByb3RvY29sKCJIVFRQIik7Ci0JCQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCQkJbSA9IG1vbml0b3JXb3JraW5nQ29weS5zYXZlKCk7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gdCkgewotCQkJCQkJCQkJCQlJU3RhdHVzIHdhcm5pbmcgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SLCBuZXcgT2JqZWN0W117U3RyaW5nLnZhbHVlT2YocG9ydCksIGVuZHBvaW50fSksIHQpOwotCQkJCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJCQkJaWYgKGVudiAhPSBudWxsKQotCQkJCQkJCQkJCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHdhcm5pbmcpOwotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCWNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpIHsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJCWlmIChtICE9IG51bGwpIHsKLQkJCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJCQlpZiAoIW0uaXNSdW5uaW5nKCkpCi0JCQkJCQkJCQkJCQltLnN0YXJ0KCk7Ci0JCQkJCQkJCQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoZW5kcG9pbnRVUkwuZ2V0UHJvdG9jb2woKSk7Ci0JCQkJCQkJCQkJCXNiLmFwcGVuZCgiOi8vbG9jYWxob3N0OiIpOwotCQkJCQkJCQkJCQlzYi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YobS5nZXRMb2NhbFBvcnQoKSkpOwotCQkJCQkJCQkJCQlzYi5hcHBlbmQoZW5kcG9pbnRVUkwuZ2V0RmlsZSgpKTsKLQkJCQkJCQkJCQkJZW5kcG9pbnRzLmFkZChzYi50b1N0cmluZygpKTsKLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQkJCQkJCQkJCUlTdGF0dXMgd2FybmluZyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoV3N0V1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1IsIG5ldyBPYmplY3RbXXtTdHJpbmcudmFsdWVPZihwb3J0KSwgZW5kcG9pbnR9KSwgdCk7Ci0JCQkJCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQkJCQlpZiAoZW52ICE9IG51bGwpCi0JCQkJCQkJCQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQod2FybmluZyk7Ci0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQkJY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBzZSkgewotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKGJvb2xlYW4gbW9uaXRvclNlcnZpY2UpIHsKLQkJdGhpcy5tb25pdG9yU2VydmljZSA9IG1vbml0b3JTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpIHsKLQkJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDcmVhdGUoYm9vbGVhbiBjcmVhdGUpIHsKLQkJdGhpcy5jcmVhdGUgPSBjcmVhdGU7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0RW5kcG9pbnRzKCkgewotCQlyZXR1cm4gZW5kcG9pbnRzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BsdWdpbi9XU1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVmMjlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDAzIDEyODgyNyAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQVBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgV1NQbHVnaW4gcGx1Z2luOwotCQotCXByaXZhdGUgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0IHdzaVNTQlBDb250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXU0lBUENvbnRleHQgd3NpQVBDb250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQgd3NkbFZhbGlkYXRpb25Db250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0IHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfOwotCXByaXZhdGUgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBtZXJnZUNvbnRleHRfOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzIjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFdTUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0JICogKFdTUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LndzIik7Ci0JICogQHJldHVybiBUaGUgV1NQbHVnaW4gc2luZ2xldG9uLgotCSAqLwotCSBzdGF0aWMgcHVibGljIFdTUGx1Z2luIGdldEluc3RhbmNlKCkgewotCSAgIHJldHVybiBwbHVnaW47Ci0JIH0KLQkgCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBXU1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCi0JLyoqCi0JICogR2V0IFdTSSBDb250ZXh0Ci0JICogQGRlcHJlY2F0ZWQgdXNlIGdldFdTSVNTQlBDb250ZXh0IG9yIGdldFdTSUFQQ29udGV4dCBpbnN0ZWFkCi0JICogCi0JICovIAotIHB1YmxpYyBQZXJzaXN0ZW50V1NJQ29udGV4dCBnZXRXU0lDb250ZXh0KCkgCi0gCXsgLy8gZGVmYXVsdGluZyB0byBnZXQgV1NJIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBjb250ZXh0Ci0gCSAgcmV0dXJuIGdldFdTSVNTQlBDb250ZXh0KCk7Ci0gCX0KLSAKLSAvKioKLQkgKiBHZXQgV1NJIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBDb250ZXh0Ci0JICogCi0JICovIAotIHB1YmxpYyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgZ2V0V1NJU1NCUENvbnRleHQoKSAKLQl7Ci0JICBpZiAod3NpU1NCUENvbnRleHRfID09IG51bGwpCi0JICAJewotCSAgCQl3c2lTU0JQQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0KCk7Ci0JICAJCXdzaVNTQlBDb250ZXh0Xy5sb2FkKCk7Ci0JICAJfQotCSAgcmV0dXJuIHdzaVNTQlBDb250ZXh0XzsKLQl9Ci0gCi0gLyoqCi0JICogR2V0IFdTSSBBdHRhY2htZW50IFByb2ZpbGUgQ29udGV4dAotCSAqIAotCSAqLyAKLSBwdWJsaWMgUGVyc2lzdGVudFdTSUFQQ29udGV4dCBnZXRXU0lBUENvbnRleHQoKSAKLQl7Ci0JICBpZiAod3NpQVBDb250ZXh0XyA9PSBudWxsKQotCSAgCXsKLQkgIAkJd3NpQVBDb250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50V1NJQVBDb250ZXh0KCk7Ci0JICAJCXdzaUFQQ29udGV4dF8ubG9hZCgpOwotCSAgCX0KLQkgIHJldHVybiB3c2lBUENvbnRleHRfOwotCX0KLQotCSAvKioKLQkgKiBHZXQgV1NETCBWYWxpYXRpb24gQ29udGV4dAotCSAqIAotCSAqLyAKLQotCXB1YmxpYyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0IGdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpIHsKLQkJaWYgKHdzZGxWYWxpZGF0aW9uQ29udGV4dF8gPT0gbnVsbCkgewotCQkJd3NkbFZhbGlkYXRpb25Db250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0KCk7Ci0JCQl3c2RsVmFsaWRhdGlvbkNvbnRleHRfLmxvYWQoKTsKLQkJfQotCQlyZXR1cm4gd3NkbFZhbGlkYXRpb25Db250ZXh0XzsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IFdhaXQgZm9yIFdTREwgVmFsaWF0aW9uIENvbnRleHQKLQkgKiAKLQkgKi8gCi0KLQlwdWJsaWMgUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQgZ2V0V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCgpIHsKLQkJaWYgKHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfID09IG51bGwpIHsKLQkJCXdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0KCk7Ci0JCQl3YWl0Rm9yV3NkbFZhbGlkYXRpb25Db250ZXh0Xy5sb2FkKCk7Ci0JCX0KLQkJcmV0dXJuIHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgU2tlbGV0b24gTWVyZ2UgQ29udGV4dAotCSAqIAotCSAqLyAKLSBwdWJsaWMgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBnZXRNZXJnZUNvbnRleHQoKSAKLQl7Ci0JICBpZiAobWVyZ2VDb250ZXh0XyA9PSBudWxsKQotCSAgCXsKLQkJICBtZXJnZUNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRNZXJnZUNvbnRleHQoKTsKLQkJICBtZXJnZUNvbnRleHRfLmxvYWQoKTsKLQkgIAl9Ci0JICByZXR1cm4gbWVyZ2VDb250ZXh0XzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL01lcmdlRGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWVyZ2VEZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjI1OTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWVyZ2VEZWZhdWx0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDAzICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEwOSAgIDIwOTA3NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotcHVibGljIGNsYXNzIE1lcmdlRGVmYXVsdHMKLXsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfU0tFTEVUT05fTUVSR0VfREVGQVVMVCA9IHRydWU7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHNrZWxldG9uIG1lcmdlLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRTa2VsZXRvbk1lcmdlRGVmYXVsdCgpCi0gewotCXJldHVybiBQUkVGRVJFTkNFX1NLRUxFVE9OX01FUkdFX0RFRkFVTFQ7Ci0gfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NaWdyYXRlV1NJcHJlZmVyZW5jZXNMb2FkTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWlncmF0ZVdTSXByZWZlcmVuY2VzTG9hZExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MTBiMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NaWdyYXRlV1NJcHJlZmVyZW5jZXNMb2FkTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDUgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEyMTggICAyMDk4NTggZXBldGVyc0BjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIEVuaGFuY2luZyBzZXJ2aWNlIHBvbGljeSBmcmFtZXdvcmsgYW5kIFVJCi0gKiAyMDA4MDMxOCAgIDIyMzExOCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBtZXRhZGF0YSByZXF1aXJlZCBpbiBXUy1JIHByb2ZpbGVzIHRvIHN1cHBvcnQgZWRpdG9ycyAmIHZhbGlkYXRvcnMKLSAqIDIwMDgwMzE4ICAgMjIxNTc4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjsKLQotcHVibGljIGNsYXNzIE1pZ3JhdGVXU0lwcmVmZXJlbmNlc0xvYWRMaXN0ZW5lciBpbXBsZW1lbnRzIElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTlVNX0lEX1ZBTFVFUyA9IHsgIm9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIsICJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiLCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUifTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQ09OVEVYVF9JRFMgICAgPSB7IFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSwgUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJLCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSB9OwotICAKLSAgcHVibGljIHZvaWQgbG9hZCgpCi0gIHsKLSAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBoYXMgc2V0IGFueSBXU0kgcHJlZmVyZW5jZXMuCi0gICAgLy8gSWYgbm90IHdlIHdhbnQgdG8gZGVmYXVsdCBXU0kgcHJlZmVyZW5jZXMgdG8gYW55IG9sZCBXU0kgcHJlZmVyZW5jZXMgdGhhdAotICAgIC8vIGhhdmUgYmVlbiBzZXQuCi0gICAgCi0gICAgSUVjbGlwc2VQcmVmZXJlbmNlcyAgIHByZWZlcmVuY2VzICA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsgICAgCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgIGFwVmFsdWUgICAgICA9IHByZWZlcmVuY2VzLmdldCggV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLlNlcnZpY2VQb2xpY3lJRF9BUDEwICsgIi4iICsgSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgIHNzYnBWYWx1ZSAgICA9IHByZWZlcmVuY2VzLmdldCggV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLlNlcnZpY2VQb2xpY3lJRF9TU0JQMTAgKyAiLiIgKyBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5LCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICBQcmVmZXJlbmNlcyAgICAgICAgICAgb2xkUHJlZnMgICAgID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotICAgIFN0cmluZ1tdICAgICAgICAgICAgICBvbGRQcm9wTmFtZXMgPSBvbGRQcmVmcy5wcm9wZXJ0eU5hbWVzKCk7Ci0gICAgCi0gICAgaWYoIGFwVmFsdWUgPT0gbnVsbCApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtICAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIGFwUG9saWN5ICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfQVAxMCApOwotICAgICAgSVBvbGljeVN0YXRlICAgICAgICAgIGFwU3RhdGUgICAgICA9IGFwUG9saWN5LmdldFBvbGljeVN0YXRlKCk7Ci0gICAgICAKLSAgICAgIGlmKCBpbmRleE9mU3RyaW5nKCAibm9uV1NJQVBDb21wbGlhbmNlIiwgb2xkUHJvcE5hbWVzICkgIT0gLTEgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYW4gb2xkIEFQIHZhbHVlIHNvIHdlIHdpbGwgdXNlIGl0J3MgdmFsdWUgYXMgdGhlIGRlZmF1bHQgZm9yIHNldHRpbmdzLgotICAgICAgICBTdHJpbmcgb2xkQXBWYWx1ZSA9IG9sZFByZWZzLmdldFN0cmluZyggIm5vbldTSUFQQ29tcGxpYW5jZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBpbnQgICAgb2xkQXBJbmRleCA9IGluZGV4T2ZTdHJpbmcoIG9sZEFwVmFsdWUsIENPTlRFWFRfSURTICk7Ci0gICAgICAgIFN0cmluZyBuZXdBcFZhbHVlID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGlmKCBvbGRBcEluZGV4IDwgRU5VTV9JRF9WQUxVRVMubGVuZ3RoICkKLSAgICAgICAgewotICAgICAgICAgIG5ld0FwVmFsdWUgPSBFTlVNX0lEX1ZBTFVFU1tvbGRBcEluZGV4XTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIG5ld0FwVmFsdWUgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBhcFN0YXRlLnB1dFZhbHVlKCBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5LCBuZXdBcFZhbHVlICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAkJLy8gYWxzbyBuZWVkIHRvIGNoZWNrIGlmIGFueSBwcm9qZWN0IHNwZWNpZmljIHByZWZlcmVuY2VzIHdlcmUgc2V0Ci0JCQlRdWFsaWZpZWROYW1lIG5hbWUgPSBuZXcgUXVhbGlmaWVkTmFtZShXU1BsdWdpbi5JRCwKLQkJCQkJIm5vbldTSUFQQ29tcGxpYW5jZSIpOyAvLyROT04tTkxTLTEkCi0JCQlJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKQotCQkJCQkuZ2V0UHJvamVjdHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gcHJvamVjdHNbaV07Ci0JCQkJCVN0cmluZyBvbGRQcm9wZXJ0eSA9IG51bGw7Ci0JCQkJCQlvbGRQcm9wZXJ0eSA9IHByb2plY3QuZ2V0UGVyc2lzdGVudFByb3BlcnR5KG5hbWUpOwotCQkJCQlpZiAob2xkUHJvcGVydHkgIT0gbnVsbCAmJiAhb2xkUHJvcGVydHkuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQlpbnQgb2xkQXBJbmRleCA9IGluZGV4T2ZTdHJpbmcob2xkUHJvcGVydHksIENPTlRFWFRfSURTKTsKLQkJCQkJCVN0cmluZyBuZXdBcFZhbHVlID0gbnVsbDsKLQkJCQkJCWlmIChvbGRBcEluZGV4ICE9IC0xICYmIG9sZEFwSW5kZXggPCBFTlVNX0lEX1ZBTFVFUy5sZW5ndGgpIHsKLQkJCQkJCQluZXdBcFZhbHVlID0gRU5VTV9JRF9WQUxVRVNbb2xkQXBJbmRleF07Ci0JCQkJCQl9Ci0KLQkJCQkJCWlmIChuZXdBcFZhbHVlICE9IG51bGwpIHsKLQkJCQkJCQlhcFN0YXRlID0gYXBQb2xpY3kuZ2V0UG9saWN5U3RhdGUocHJvamVjdCk7Ci0JCQkJCQkJcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0LCB0cnVlKTsKLQkJCQkJICAgICAgICBhcFN0YXRlLnB1dFZhbHVlKCBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5LCBuZXdBcFZhbHVlICk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy9pZ25vcmUgdGhpcyBwcm9qZWN0Ci0JCQkJfQotCQkJfQotICAgIH0KLQotCi0gICAgCi0gICAgaWYoIHNzYnBWYWx1ZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgICBJU2VydmljZVBvbGljeSAgICAgICAgc3NicFBvbGljeSAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLlNlcnZpY2VQb2xpY3lJRF9TU0JQMTAgKTsKLSAgICAgIElQb2xpY3lTdGF0ZSAgICAgICAgICBzc2JwU3RhdGUgICAgPSBzc2JwUG9saWN5LmdldFBvbGljeVN0YXRlKCk7Ci0gICAgICAKLSAgICAgIGlmKCBpbmRleE9mU3RyaW5nKCAibm9uV1NJU1NCUENvbXBsaWFuY2UiLCBvbGRQcm9wTmFtZXMgKSAhPSAtMSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhbiBvbGQgU1NCUCB2YWx1ZSBzbyB3ZSB3aWxsIHVzZSBpdCdzIHZhbHVlIGFzIHRoZSBkZWZhdWx0IGZvciBzZXR0aW5ncy4KLSAgICAgICAgU3RyaW5nIG9sZFNTQlBWYWx1ZSA9IG9sZFByZWZzLmdldFN0cmluZyggIm5vbldTSVNTQlBDb21wbGlhbmNlIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGludCAgICBvbGRTU0JQSW5kZXggPSBpbmRleE9mU3RyaW5nKCBvbGRTU0JQVmFsdWUsIENPTlRFWFRfSURTICk7Ci0gICAgICAgIFN0cmluZyBuZXdTU0JQVmFsdWUgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgaWYoIG9sZFNTQlBJbmRleCA8IEVOVU1fSURfVkFMVUVTLmxlbmd0aCApCi0gICAgICAgIHsKLSAgICAgICAgICBuZXdTU0JQVmFsdWUgPSBFTlVNX0lEX1ZBTFVFU1tvbGRTU0JQSW5kZXhdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggbmV3U1NCUFZhbHVlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgIAlzc2JwU3RhdGUucHV0VmFsdWUoIElQb2xpY3lTdGF0ZS5EZWZhdWx0VmFsdWVLZXksIG5ld1NTQlBWYWx1ZSApOwotICAgICAgICB9Ci0gICAgICB9Ci0JCS8vIGFsc28gbmVlZCB0byBjaGVjayBpZiBhbnkgcHJvamVjdCBzcGVjaWZpYyBwcmVmZXJlbmNlcyB3ZXJlIHNldAotCQlRdWFsaWZpZWROYW1lIG5hbWUgPSBuZXcgUXVhbGlmaWVkTmFtZShXU1BsdWdpbi5JRCwKLQkJCQkibm9uV1NJU1NCUENvbXBsaWFuY2UiKTsgLy8kTk9OLU5MUy0xJAotCQlJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKQotCQkJCS5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCUlQcm9qZWN0IHByb2plY3QgPSBwcm9qZWN0c1tpXTsKLQkJCQlTdHJpbmcgb2xkUHJvcGVydHkgPSBudWxsOwotCQkJCQlvbGRQcm9wZXJ0eSA9IHByb2plY3QuZ2V0UGVyc2lzdGVudFByb3BlcnR5KG5hbWUpOwotCQkJCWlmIChvbGRQcm9wZXJ0eSAhPSBudWxsICYmICFvbGRQcm9wZXJ0eS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJaW50IG9sZFNTQlBJbmRleCA9IGluZGV4T2ZTdHJpbmcob2xkUHJvcGVydHksIENPTlRFWFRfSURTKTsKLQkJCQkJU3RyaW5nIG5ld1NTQlBWYWx1ZSA9IG51bGw7Ci0JCQkJCWlmIChvbGRTU0JQSW5kZXggIT0gLTEgJiYgb2xkU1NCUEluZGV4IDwgRU5VTV9JRF9WQUxVRVMubGVuZ3RoKSB7Ci0JCQkJCQluZXdTU0JQVmFsdWUgPSBFTlVNX0lEX1ZBTFVFU1tvbGRTU0JQSW5kZXhdOwotCQkJCQl9Ci0KLQkJCQkJaWYgKG5ld1NTQlBWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJCQlzc2JwU3RhdGUgPSBzc2JwUG9saWN5LmdldFBvbGljeVN0YXRlKHByb2plY3QpOwotCQkJCQkJcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0LCB0cnVlKTsKLQkJCQkJCXNzYnBTdGF0ZS5wdXRWYWx1ZSggSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleSwgbmV3U1NCUFZhbHVlICk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvL2lnbm9yZSB0aGlzIHByb2plY3QKLQkJCX0KLQkJfQotCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGludCBpbmRleE9mU3RyaW5nKCBTdHJpbmcgdGFyZ2V0LCBTdHJpbmdbXSB2YWx1ZXMgKQotICB7Ci0gICAgaW50IHJlc3VsdCA9IC0xOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXg8IHZhbHVlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZyB2YWx1ZSA9IHZhbHVlc1tpbmRleF07Ci0gICAgICAKLSAgICAgIGlmKCB2YWx1ZS5lcXVhbHMoIHRhcmdldCApICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gaW5kZXg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRNZXJnZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudE1lcmdlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2MwN2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudE1lcmdlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDAzICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0Ci17Ci0JIC8qKgotCSAgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgZW5hYmxlIHNrZWxldG9uIG1lcmdlIGdlbmVyYWwgcHJlZmVyZW5jZSBmcm9tCi0JICAqIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotCSoqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfU0tFTEVUT05fTUVSR0UgPSAic2tlbGV0b25NZXJnZSI7Ci0JCi0gIHByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQgY29udGV4dF8gPSBudWxsOwotICAKLSAgcHVibGljIHN0YXRpYyBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCBjb250ZXh0XyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBjb250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0KCk7Ci0gICAgICBjb250ZXh0Xy5sb2FkKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfQotICAKLSAgcHVibGljIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQoKQotICB7Ci0JICBzdXBlcihXU1BsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1NLRUxFVE9OX01FUkdFLCBNZXJnZURlZmF1bHRzLmdldFNrZWxldG9uTWVyZ2VEZWZhdWx0KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2tlbGV0b25NZXJnZUVuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX1NLRUxFVE9OX01FUkdFLCBlbmFibGUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IxYzA0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dAotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRFX05PX1dTREwgPSAiMCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVEVfUkVNT1RFX1dTREwgPSAiMSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVEVfQUxMX1dTREwgPSAiMiI7Ci0KLQlwcml2YXRlIFN0cmluZyB3c2RsX3ZhbGlkYXRpb24gPSAiV1NETF9WQUxJREFUSU9OIjsKLQotcHVibGljIFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQgKCkgCi17Ci0Jc3VwZXIoICBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQkKLX0KLQotcHVibGljIHZvaWQgbG9hZCgpIAotewotCXNldERlZmF1bHQod3NkbF92YWxpZGF0aW9uLCBWQUxJREFURV9OT19XU0RMKTsKLX0KLQotLy8gdG8gYmUgdXNlZCBvbmx5IGJ5IHRoZSBwcmVmZXJlbmNlIHBhZ2UKLXB1YmxpYyB2b2lkIHVwZGF0ZVdTRExWYWxpZGF0aW9uICggU3RyaW5nIHZhbHVlKQotewotIAkJc2V0VmFsdWUoIHdzZGxfdmFsaWRhdGlvbiwgdmFsdWUpOwotfQotCi1wdWJsaWMgU3RyaW5nIGdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbiAoKQotewotCVN0cmluZyBwcm9wZXJ0eSA9IGdldFZhbHVlQXNTdHJpbmcod3NkbF92YWxpZGF0aW9uKTsKLS8vCSBkZWZhdWx0IHRvIElnbm9yZSBpZiBubyBpbml0IGhhcyBiZWVuIGRvbmUgZnJvbSBpbmkgZmlsZQotCWlmIChwcm9wZXJ0eSA9PSBudWxsIHx8IHByb3BlcnR5LmVxdWFscygiIikpIHsKLQkJc2V0VmFsdWUoIHdzZGxfdmFsaWRhdGlvbiwgVkFMSURBVEVfTk9fV1NETCk7Ci0JCXJldHVybiBWQUxJREFURV9OT19XU0RMOwotCX0KLQllbHNlCi0JCXJldHVybiBwcm9wZXJ0eTsKLX0KLQotcHVibGljIFN0cmluZyBnZXREZWZhdWx0KCkKLXsKLQlyZXR1cm4gZ2V0RGVmYXVsdFN0cmluZyh3c2RsX3ZhbGlkYXRpb24pOwotfQotCi1wdWJsaWMgYm9vbGVhbiBWYWxpZGF0ZU5vV1NETCgpCi17Ci0JIHJldHVybiBWQUxJREFURV9OT19XU0RMLmVxdWFscyhnZXRQZXJzaXN0ZW50V1NETFZhbGlkYXRpb24oKSk7Ci19Ci0KLXB1YmxpYyBib29sZWFuIFdhcm5Ob25XU0lDb21wbGlhbmNlcygpCi17Ci0JIHJldHVybiBWQUxJREFURV9SRU1PVEVfV1NETC5lcXVhbHMoZ2V0UGVyc2lzdGVudFdTRExWYWxpZGF0aW9uKCkpOwotfQotCi1wdWJsaWMgYm9vbGVhbiBJZ25vcmVOb25XU0lDb21wbGlhbmNlcygpCi17Ci0JIHJldHVybiBWQUxJREFURV9BTExfV1NETC5lcXVhbHMoZ2V0UGVyc2lzdGVudFdTRExWYWxpZGF0aW9uKCkpOwotfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUFQQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQVBDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNTViN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQVBDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAzMTggICAyMjMxMTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgbWV0YWRhdGEgcmVxdWlyZWQgaW4gV1MtSSBwcm9maWxlcyB0byBzdXBwb3J0IGVkaXRvcnMgJiB2YWxpZGF0b3JzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRXU0lBUENvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50V1NJQ29udGV4dAotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05fV1NJX0FQX0NPTVBMSUFOQ0UgPSAibm9uV1NJQVBDb21wbGlhbmNlIjsKLQotcHVibGljIFBlcnNpc3RlbnRXU0lBUENvbnRleHQgKCkgCi17Ci0Jc3VwZXIoKTsKLQlub25fd3NpX2NvbXBsaWFuY2UgPSBOT05fV1NJX0FQX0NPTVBMSUFOQ0U7Ci0JbmFtZSA9IG5ldyBRdWFsaWZpZWROYW1lKFdTUGx1Z2luLklEICwgbm9uX3dzaV9jb21wbGlhbmNlKTsKLQl3c2lXYXJuaW5nXyA9IFdzdFdTUGx1Z2luTWVzc2FnZXMuV1NJX0FQX1dBUk5JTkc7Ci0Jd3NpRXJyb3JfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfQVBfRVJST1I7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UgKCkKLXsKLQlTdHJpbmcgcHJvcGVydHkgPSBnZXRWYWx1ZUFzU3RyaW5nKG5vbl93c2lfY29tcGxpYW5jZSk7Ci0JLy8gZGVmYXVsdCB0byBXYXJuaW5nIGlmIG5vIGluaXQgaGFzIGJlZW4gZG9uZSBmcm9tIGluaSBmaWxlCi0JaWYgKHByb3BlcnR5ID09IG51bGwgfHwgcHJvcGVydHkuZXF1YWxzKCIiKSkgewotCQlzZXRWYWx1ZSggbm9uX3dzaV9jb21wbGlhbmNlLCBXQVJOX05PTl9XU0kpOwotCQlyZXR1cm4gV0FSTl9OT05fV1NJOwotCX0KLQllbHNlCi0JCXJldHVybiBwcm9wZXJ0eTsKLX0KLQotcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJ2aWNlUG9saWN5SWQoKQotewotICByZXR1cm4gV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLlNlcnZpY2VQb2xpY3lJRF9BUDEwOwotfSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2MjRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTA4ICAgMjA5MjY3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMzE4ICAgMjIzMTE4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIG1ldGFkYXRhIHJlcXVpcmVkIGluIFdTLUkgcHJvZmlsZXMgdG8gc3VwcG9ydCBlZGl0b3JzICYgdmFsaWRhdG9ycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFdTSUNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dAotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUT1BfTk9OX1dTSSA9ICIwIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXQVJOX05PTl9XU0kgPSAiMSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUdOT1JFX05PTl9XU0kgPSAiMiI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9MTE9XX1dTSV9QUkVGRVJFTkNFID0gIjMiOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVOVU1fSURfVkFMVUVTID0geyAib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIiwgIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIsICJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSJ9OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBDT05URVhUX0lEUyAgICA9IHsgU1RPUF9OT05fV1NJLCBXQVJOX05PTl9XU0ksIElHTk9SRV9OT05fV1NJIH07Ci0JCi0JcHJvdGVjdGVkIFF1YWxpZmllZE5hbWUgbmFtZSA9IG51bGw7IC8vIHNldCBpbiBzdWJjbGFzcwotCXByb3RlY3RlZCBTdHJpbmcgbm9uX3dzaV9jb21wbGlhbmNlOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05fV1NJX1NTQlBfQ09NUExJQU5DRSA9ICJub25XU0lTU0JQQ29tcGxpYW5jZSI7Ci0JcHJvdGVjdGVkIFN0cmluZyB3c2lXYXJuaW5nXzsgLy8gc2V0IGluIHN1YmNsYXNzCi0JcHJvdGVjdGVkIFN0cmluZyB3c2lFcnJvcl87IC8vIHNldCBpbiBzdWJjbGFzcwotCi1wdWJsaWMgUGVyc2lzdGVudFdTSUNvbnRleHQgKCkgCi17Ci0Jc3VwZXIoICBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQkKLS8vICBOT1RFOiAgbmFtZSwgd3NpV2FybmluZ18gYW5kIHdzaUVycm9yXyBzaG91bGQgYmUgc2V0IGluIHRoZSBzdWJjbGFzc2VzLiAgVGhpcyBpcyBwcm92aWRpbmcgZGVmYXVsdGluZyBvbmx5LgotCW5vbl93c2lfY29tcGxpYW5jZSA9IE5PTl9XU0lfU1NCUF9DT01QTElBTkNFOwotCW5hbWUgPSBuZXcgUXVhbGlmaWVkTmFtZShXU1BsdWdpbi5JRCAsIG5vbl93c2lfY29tcGxpYW5jZSk7Ci0Jd3NpV2FybmluZ18gPSBXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9TU0JQX1dBUk5JTkc7Ci0Jd3NpRXJyb3JfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfU1NCUF9FUlJPUjsKLX0KLQotcHVibGljIHZvaWQgbG9hZCgpIAotewotCS8vIGxldCB0aGUgZGVmYXVsdCBiZSByZWFkIGZyb20gcGx1Z2luX2Nvc3RvbWl6YXRpb24uaW5pIGZpbGUKLQkvLyBzZXREZWZhdWx0KG5vbl93c2lfY29tcGxpYW5jZSwgV0FSTl9OT05fV1NJKTsKLX0KLQotLy8gdG8gYmUgdXNlZCBvbmx5IGJ5IHRoZSBwcmVmZXJlbmNlIHBhZ2UKLXB1YmxpYyB2b2lkIHVwZGF0ZVdTSUNvbXBsaWFuY2VzICggU3RyaW5nIHZhbHVlKQotewotIAkJc2V0VmFsdWUoIG5vbl93c2lfY29tcGxpYW5jZSwgdmFsdWUpOwotfQotCi1wdWJsaWMgU3RyaW5nIGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlICgpCi17Ci0JU3RyaW5nIHByb3BlcnR5ID0gZ2V0VmFsdWVBc1N0cmluZyhub25fd3NpX2NvbXBsaWFuY2UpOwotLy8JIGRlZmF1bHQgdG8gV2FybmluZyBpZiBubyBpbml0IGhhcyBiZWVuIGRvbmUgZnJvbSBpbmkgZmlsZQotCWlmIChwcm9wZXJ0eSA9PSBudWxsIHx8IHByb3BlcnR5LmVxdWFscygiIikpIHsKLQkJc2V0VmFsdWUoIG5vbl93c2lfY29tcGxpYW5jZSwgV0FSTl9OT05fV1NJKTsKLQkJcmV0dXJuIFdBUk5fTk9OX1dTSTsKLQl9Ci0JZWxzZQotCQlyZXR1cm4gcHJvcGVydHk7Ci19Ci0KLXB1YmxpYyBib29sZWFuIFN0b3BOb25XU0lDb21wbGlhbmNlcygpCi17Ci0JIHJldHVybiBTVE9QX05PTl9XU0kuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlKCkpOwotfQotCi1wdWJsaWMgYm9vbGVhbiBXYXJuTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gV0FSTl9OT05fV1NJLmVxdWFscyhnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpKTsKLX0KLQotcHVibGljIGJvb2xlYW4gSWdub3JlTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gSUdOT1JFX05PTl9XU0kuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlKCkpOwotfQotCi0vLyB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIHByb3BlcnR5IHBhZ2UKLXB1YmxpYyB2b2lkIHVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyAoIElQcm9qZWN0IHByb2plY3QsIFN0cmluZyB2YWx1ZSkKLXsKLSAgICB0cnkgewotCQlwcm9qZWN0LnNldFBlcnNpc3RlbnRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsgCi0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiTm8gc3VjaCBQcm9qZWN0Iik7Ci0gICAgCUlMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgICAJbG9nLmxvZyhJTG9nLklORk8sIDUwODQsIHRoaXMsICJ1cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMiLCAiTm8gc3VjaCBQcm9qZWN0ICIrcHJvamVjdCk7Ci0gICAgfQotfQotCi1wdWJsaWMgYm9vbGVhbiBwcm9qZWN0U3RvcE5vbldTSUNvbXBsaWFuY2VzKElQcm9qZWN0IHByb2plY3QpCi17Ci0gCXJldHVybiBTVE9QX05PTl9XU0kuZXF1YWxzKGdldFByb2plY3RQZXJzaXN0ZW50UHJvcGVydHkocHJvamVjdCkpOyAgICAKLX0KLQotcHVibGljIGJvb2xlYW4gcHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyhJUHJvamVjdCBwcm9qZWN0KQotewotIAlyZXR1cm4gV0FSTl9OT05fV1NJLmVxdWFscyhnZXRQcm9qZWN0UGVyc2lzdGVudFByb3BlcnR5KHByb2plY3QpKTsgICAgCi19Ci0KLXB1YmxpYyBib29sZWFuIHByb2plY3RJZ25vcmVOb25XU0lDb21wbGlhbmNlcyhJUHJvamVjdCBwcm9qZWN0KQotewotIAlyZXR1cm4gSUdOT1JFX05PTl9XU0kuZXF1YWxzKGdldFByb2plY3RQZXJzaXN0ZW50UHJvcGVydHkocHJvamVjdCkpOyAgICAKLX0KLQotCi0vLyB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIHByb3BlcnR5IHBhZ2UKLXB1YmxpYyBib29sZWFuIHByb2plY3RGb2xsb3dXU0lQcmVmZXJhbmNlKElQcm9qZWN0IHByb2plY3QpCi17Ci0gICAgdHJ5IHsKLSAJU3RyaW5nIHByb3BlcnR5ID0gcHJvamVjdC5nZXRQZXJzaXN0ZW50UHJvcGVydHkobmFtZSk7Ci0gICAgcmV0dXJuIChwcm9wZXJ0eSA9PSBudWxsIHx8IHByb3BlcnR5LmVxdWFscygiIikgfHwgcHJvcGVydHkuZXF1YWxzKEZPTExPV19XU0lfUFJFRkVSRU5DRSkpOwotICAgIAl9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgICAgIHsKLSAgICAJcmV0dXJuIHRydWU7Ci0gICAgIH0gICAgIAotfQotCi1wcml2YXRlIFN0cmluZyBnZXRQcm9qZWN0UGVyc2lzdGVudFByb3BlcnR5KElQcm9qZWN0IHByb2plY3QpCi17Ci0JU3RyaW5nIHByb3BlcnR5ID0gZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UocHJvamVjdCk7Ci0JaWYgKHByb3BlcnR5LmVxdWFscyhGT0xMT1dfV1NJX1BSRUZFUkVOQ0UpKSB7Ci0JCXByb3BlcnR5ID0gZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UoKTsKLQl9Ci0JcmV0dXJuIHByb3BlcnR5OwotIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3RXU0lDb21wbGlhbmNlKElQcm9qZWN0IHByb2plY3QpCi0gIHsKLQotICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgICAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBzZXJ2aWNlUG9saWN5ICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIGdldFNlcnZpY2VQb2xpY3lJZCgpICk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZUlEID0gc2VydmljZVBvbGljeS5nZXRQb2xpY3lTdGF0ZUVudW0ocHJvamVjdCkuZ2V0Q3VycmVudEl0ZW0oKS5nZXRJZCgpOwotCQlTdHJpbmcgICAgICAgICAgICAgICAgcHJvcGVydHkgICAgICAgPSBGT0xMT1dfV1NJX1BSRUZFUkVOQ0U7Ci0JCQotCQlmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgRU5VTV9JRF9WQUxVRVMubGVuZ3RoOyBpbmRleCsrICkKLQkJewotCQkgIGlmKCBFTlVNX0lEX1ZBTFVFU1tpbmRleF0uZXF1YWxzKCBjdXJyZW50U3RhdGVJRCApICkKLQkJICB7Ci0JCSAgICBwcm9wZXJ0eSA9IENPTlRFWFRfSURTW2luZGV4XTsKLQkJICAgIGJyZWFrOwotCQkgIH0KLQkJfQotCQkKLQkJcmV0dXJuIHByb3BlcnR5OwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJ2aWNlUG9saWN5SWQoKQotICB7Ci0gICAgcmV0dXJuIFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfU1NCUDEwOwotICB9Ci0gIAotICBwdWJsaWMgUXVhbGlmaWVkTmFtZSBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2FybmluZygpCi0gIHsKLQkgIHJldHVybiB3c2lXYXJuaW5nXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3IoKQotICB7Ci0JICByZXR1cm4gd3NpRXJyb3JfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lTU0JQQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJU1NCUENvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEwODI3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lTU0JQQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMzE4ICAgMjIzMTE4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIG1ldGFkYXRhIHJlcXVpcmVkIGluIFdTLUkgcHJvZmlsZXMgdG8gc3VwcG9ydCBlZGl0b3JzICYgdmFsaWRhdG9ycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50V1NJQ29udGV4dAotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05fV1NJX1NTQlBfQ09NUExJQU5DRSA9ICJub25XU0lTU0JQQ29tcGxpYW5jZSI7Ci0KLSAgcHVibGljIFBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dCAoKSAKLSAgewotCSAgc3VwZXIoKTsKLQkgIG5vbl93c2lfY29tcGxpYW5jZSA9IE5PTl9XU0lfU1NCUF9DT01QTElBTkNFOwotCSAgbmFtZSA9IG5ldyBRdWFsaWZpZWROYW1lKFdTUGx1Z2luLklEICwgbm9uX3dzaV9jb21wbGlhbmNlKTsKLQkgIHdzaVdhcm5pbmdfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfU1NCUF9XQVJOSU5HOwotCSAgd3NpRXJyb3JfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfU1NCUF9FUlJPUjsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0U2VydmljZVBvbGljeUlkKCkKLSAgewotICAgIHJldHVybiBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX1NTQlAxMDsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZWQyMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dAotewotCi0JcHJpdmF0ZSBTdHJpbmcgd2FpdF9mb3Jfd3NkbF92YWxpZGF0aW9uID0gIldBSVRfRk9SX1dTRExfVkFMSURBVElPTiI7Ci0KLXB1YmxpYyBQZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCAoKSAKLXsKLQlzdXBlciggIFdTUGx1Z2luLmdldEluc3RhbmNlKCkpOwotCQotfQotCi1wdWJsaWMgdm9pZCBsb2FkKCkgCi17Ci0Jc2V0RGVmYXVsdCh3YWl0X2Zvcl93c2RsX3ZhbGlkYXRpb24sIHRydWUpOwotfQotCi0vLyB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIHByZWZlcmVuY2UgcGFnZQotcHVibGljIHZvaWQgc2V0V2FpdEZvcldTRExWYWxpZGF0aW9uICggYm9vbGVhbiB2YWx1ZSkKLXsKLSAJCXNldFZhbHVlKCB3YWl0X2Zvcl93c2RsX3ZhbGlkYXRpb24sIHZhbHVlKTsKLX0KLQotcHVibGljIGJvb2xlYW4gZ2V0UGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbiAoKQotewotCXJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbih3YWl0X2Zvcl93c2RsX3ZhbGlkYXRpb24pOwotCi19Ci0KLXB1YmxpYyBib29sZWFuIGdldERlZmF1bHQoKQotewotCXJldHVybiBnZXREZWZhdWx0Qm9vbGVhbih3YWl0X2Zvcl93c2RsX3ZhbGlkYXRpb24pOwotfQotCi0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTRExGaWxlUHJvcGVydHlUZXN0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NETEZpbGVQcm9wZXJ0eVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGVmZTQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NETEZpbGVQcm9wZXJ0eVRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTIwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcxMjE5ICAgMjEzNDQ3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLlByb3BlcnR5VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEZpbGVQcm9wZXJ0eVRlc3RlciBleHRlbmRzIFByb3BlcnR5VGVzdGVyCi17Ci0gIHB1YmxpYyBib29sZWFuIHRlc3QoT2JqZWN0IHJlY2VpdmVyLCBTdHJpbmcgcHJvcGVydHksIE9iamVjdFtdIGFyZ3MsIE9iamVjdCBleHBlY3RlZFZhbHVlKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiggcmVjZWl2ZXIgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGhhc1dTRExmaWxlKCAoSUNvbnRhaW5lcikgcmVjZWl2ZXIgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc1dTRExmaWxlKCBJQ29udGFpbmVyIGNvbnRhaW5lciApCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCAgID0gZmFsc2U7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgSVJlc291cmNlW10gY2hpbGRyZW4gPSBjb250YWluZXIubWVtYmVycygpOwotICAgICAgCi0gICAgICBmb3IoIElSZXNvdXJjZSBjaGlsZCA6IGNoaWxkcmVuICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGNoaWxkIGluc3RhbmNlb2YgSUNvbnRhaW5lciApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBoYXNXU0RMZmlsZSggKElDb250YWluZXIpIGNoaWxkICk7Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggY2hpbGQgaW5zdGFuY2VvZiBJRmlsZSApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gY2hpbGQuZ2V0RmlsZUV4dGVuc2lvbigpOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBleHRlbnNpb24gIT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gZXh0ZW5zaW9uLmVxdWFscyggIndzZGwiICk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIHNpbmdsZSB3c2RsIGZpbGUgd2Ugd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCi0gICAgICAgIGlmKCByZXN1bHQgKSBicmVhazsKLSAgICAgIH0gICAgCi0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgLy8gSWdub3JlIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIGZhbHNlLiAgCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NJQ29tcGxpYW5jZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTcxMzgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NJQ29tcGxpYW5jZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLQotCi1wdWJsaWMgY2xhc3MgV1NJQ29tcGxpYW5jZVV0aWxzCi17Ci0KLS8qKgotICogQHBhcmFtIHByb2plY3QKLSAqIEBwYXJhbSBjb250ZXh0Ci0gKiBAcmV0dXJuCi0gKi8KLXB1YmxpYyBzdGF0aWMgaW50IGdldFdTSVNldmVyaXR5IChJUHJvamVjdCBwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dCBjb250ZXh0KQotewotCWlmIChjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0JCXJldHVybiBTdGF0dXMuRVJST1I7Ci0JZWxzZSBpZiAoY29udGV4dC5wcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKHByb2plY3QpKQotCQlyZXR1cm4gU3RhdHVzLldBUk5JTkc7Ci0JZWxzZQotCQlyZXR1cm4gU3RhdHVzLklORk87Ci19Ci0KLS8qKgotICogQHBhcmFtIG1vbml0b3IgSVN0YXR1c0hhbmRsZXIKLSAqIEBwYXJhbSBzdGF0dXMgU3RhdHVzW10KLSAqIEBwYXJhbSBwcm9qZWN0IElQcm9qZWN0Ci0gKiBAcGFyYW0gY29udGV4dCBQZXJzaXN0ZW50V1NJQ29udGV4dAotICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdG8gY29udGludWUKLSAqLwotcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrV1NJQ29tcGxpYW5jZSAoIElTdGF0dXNIYW5kbGVyIG1vbml0b3IsIFN0YXR1c1tdIHN0YXR1cywgSVByb2plY3QgcHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQgY29udGV4dCkKLXsKLSAgCWlmIChjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gIAkJewotICAgICAgCi0gIAkJCS8vIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIGZhbHNlCi0gIAkJCUlTdGF0dXMgc3RhdHVzXyA9IFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKCBjb250ZXh0LmdldEVycm9yKCksIHN0YXR1cyApOwotCQkJbW9uaXRvci5yZXBvcnRFcnJvcihzdGF0dXNfKTsKLSAgCQkJcmV0dXJuIGZhbHNlOwotICAJCX0KLSAgCWVsc2UgaWYgKGNvbnRleHQucHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgCQl7Ci0gIAkJCS8vIGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCB0aGUgb3B0aW9ucyB0byBzdG9wLCBpZ25vcmUgdGhpcyBvbmUsIG9yIGlnbm9yZSBhbGwgY29taW5nIG1lc3NhZ2VzCi0gIAkJCUlTdGF0dXMgc3RhdHVzXyA9IFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKCBjb250ZXh0LmdldFdhcm5pbmcoKSwgc3RhdHVzKTsKLQotICAJCQlDaG9pY2UgaWdub3JlQ2hvaWNlID0gbmV3IENob2ljZSgnSScsIFdzdFdTUGx1Z2luTWVzc2FnZXMuSUdOT1JFX0xBQkVMLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLklHTk9SRV9ERVNDUklQVElPTik7Ci0gIAkJCUNob2ljZSBpZ25vcmVBbGxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdBJywgV3N0V1NQbHVnaW5NZXNzYWdlcy5JR05PUkVfQUxMX0xBQkVMLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLklHTk9SRV9BTExfREVTQ1JJUFRJT04pOwotICAJCQlDaG9pY2UgY2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIFdzdFdTUGx1Z2luTWVzc2FnZXMuQ0FOQ0VMX0xBQkVMLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLkNBTkNFTF9ERVNDUklQVElPTik7Ci0gIAkJCUNob2ljZSByZXN1bHQgPSBtb25pdG9yLnJlcG9ydChzdGF0dXNfLCBuZXcgQ2hvaWNlW117aWdub3JlQ2hvaWNlLCBpZ25vcmVBbGxDaG9pY2UsIGNhbmNlbENob2ljZX0pOwotICAJCQkKLSAgCQkJLy8gaWYgdGhlIHVzZXIgY2xvc2VzIHRoZSBtZXNzYWdlIGJveCBvciBzZWxlY3RzIGlnbm9yZSBjb250aW51ZQotICAJCQlpZiAocmVzdWx0ID09IG51bGwgfHwgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVDaG9pY2UuZ2V0TGFiZWwoKSkpKQotICAgICAgICAJCQlyZXR1cm4gdHJ1ZTsKLSAgCQkJLy8gaWYgdGhlIHVzZXIgc2VsZWN0cyBpZ25vcmUgYWxsLCBjaGFuZ2UgdGhlIHByZWZlcmVuY2UKLQkgICAgICAgIGVsc2UgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoaWdub3JlQWxsQ2hvaWNlLmdldExhYmVsKCkpKQotCSAgICAgICAgCXsKLQkgICAgICAgIAkJY29udGV4dC51cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMocHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICAgICAgCQlyZXR1cm4gdHJ1ZTsKLQkgICAgICAgIAl9Ci0JCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIHRvIGNhbmNlbCAsIGRvIG5vdCBjb250aW51ZSB3aXRoIHRoZSBjb21tYW5kCi0gICAgICAgIAllbHNlIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoY2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotCQkJCQkJcmV0dXJuIGZhbHNlOwotICAJCX0KLSAgcmV0dXJuIHRydWU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMjM2Y2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMxOCAgIDIyMzExOCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBtZXRhZGF0YSByZXF1aXJlZCBpbiBXUy1JIHByb2ZpbGVzIHRvIHN1cHBvcnQgZWRpdG9ycyAmIHZhbGlkYXRvcnMKLSAqIDIwMDgwMzI0ICAgMjIzMTE4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIG1ldGFkYXRhIHJlcXVpcmVkIGluIFdTLUkgcHJvZmlsZXMgdG8gc3VwcG9ydCBlZGl0b3JzICYgdmFsaWRhdG9ycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotcHVibGljIGludGVyZmFjZSBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHN0YXRlS2V5RGVmYXVsdFByb3RvY29sID0gImRlZmF1bHRQcm90b2NvbCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2xfVkFMVUVfU09BUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzdGF0ZUtleURlZmF1bHRQcm90b2NvbF9WQUxVRV9TT0FQMTIgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTZXJ2aWNlUG9saWN5SURfU1NCUDEwID0gIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTZXJ2aWNlUG9saWN5SURfQVAxMCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3NpYXAiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNlcnZpY2VQb2xpY3lJRF9XU0lQcm9maWxlUm9vdCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHN0YXRlRW51bVJlcXVpcmUgPSAib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzdGF0ZUVudW1TdWdnZXN0ID0gIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RhdGVFbnVtSWdub3JlID0gIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIjsKLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0dlbmVyaWNSZXNvdXJjZUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvR2VuZXJpY1Jlc291cmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTM2ZDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvR2VuZXJpY1Jlc291cmNlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkV4dGVuZGVkTWV0YURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOwotCi0vKioKLSAqIFBhdHRlcm5lZCBhZnRlciB0aGUgUmVzb3VyY2VGYWN0b3J5IGNsYXNzZXMgZ2VuZXJhdGVkCi0gKiBieSB0aGUgRU1GIHRvb2xzLCB0aGlzIGdlbmVyaWMgZmFjdG9yeSBoYW5kbGVzIGNyZWF0aW9uCi0gKiBvZiBFTUYgcmVzb3VyY2VzIGZvciBYTUwgZG9jdW1lbnRzIGluIGdlbmVyYWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmljUmVzb3VyY2VGYWN0b3J5IGV4dGVuZHMgWE1MUmVzb3VyY2VGYWN0b3J5SW1wbAotewotCS8qKgotCSAqIEhvbGRzIGFuIGluc3RhbmNlIG9mIDxjb2RlPkV4dGVuZGVkTWV0YURhdGE8L2NvZGU+Ci0JICogZm9yIGFzc29jaWF0aW5nIGV4dGVuZGVkIG1ldGFkYXRhIHdpdGggdGhlCi0JICogPGNvZGU+UmVzb3VyY2U8L2NvZGU+IHJldHVybmVkIGJ5IDxjb2RlPmNyZWF0ZVJlc291cmNlPC9jb2RlPi4KLQkgKi8KLQlwcm90ZWN0ZWQgRXh0ZW5kZWRNZXRhRGF0YSBleHRlbmRlZE1ldGFEYXRhOwotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5HZW5lcmljUmVzb3VyY2VGYWN0b3J5PC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgR2VuZXJpY1Jlc291cmNlRmFjdG9yeSgpCi0JewotCQlzdXBlcigpOwotCQlleHRlbmRlZE1ldGFEYXRhID0gRXh0ZW5kZWRNZXRhRGF0YS5JTlNUQU5DRTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2UkRmFjdG9yeSNjcmVhdGVSZXNvdXJjZShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKQotCSAqLwotCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKQotCXsKLQkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFhNTFJlc291cmNlSW1wbCh1cmkpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lSZWdpc3RyeU1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvSVJlZ2lzdHJ5TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI3OTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvSVJlZ2lzdHJ5TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgICAxNDE3OTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotLyoqCi0gKiBBbiBJUmVnaXN0cnlNYW5hZ2VyIG1hbmFnZXMgYSBmYW1pbHkgb2YgPGNvZGU+UmVnaXN0cnk8L2NvZGU+Ci0gKiBhbmQgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyBwZXJzaXN0ZWQgd2l0aGluIHNvbWUKLSAqIGFkZHJlc3NhYmxlIGxvY2F0aW9uIHN1Y2ggYXMgdW5kZXIgYSBkaXJlY3RvcnkgaW4gdGhlCi0gKiBmaWxlc3lzdGVtIG9yIHVuZGVyIGEgZm9sZGVyIGluIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSwKLSAqIGFuZCByZWZlcmVuY2VkIGZyb20gYW4gaW5kZXggZG9jdW1lbnQgYXQgdGhlIHNhbWUgbG9jYXRpb24uIAotICogPHA+Ci0gKiBDYWxsIDxjb2RlPlJlZ2lzdGVyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpPC9jb2RlPgotICogb3IgPGNvZGU+UmVnaXN0ZXJ5U2VydmljZS5nZXRSZWdpc3RyeU1hbmFnZXIoVVJMKTwvY29kZT4gdG8KLSAqIGdldCBhIG5ldyBJUmVnaXN0cnlNYW5hZ2VyLgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5SZWdpc3RyeVNlcnZpY2UjaW5zdGFuY2UoKQotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqLwotcHVibGljIGludGVyZmFjZSBJUmVnaXN0cnlNYW5hZ2VyCi17Ci0JLyoqCi0JICogQSBjb25zdGFudCBmb3IgdXNlIGluIHRoZSA8Y29kZT5yZW1vdmVSZWdpc3RyeSguLi4pPC9jb2RlPgotCSAqIGFuZCA8Y29kZT5yZW1vdmVUYXhvbm9teSguLi4pPC9jb2RlPiBtZXRob2RzIHRoYXQgd2lsbAotCSAqIGNhdXNlIHRoZSBnaXZlbiByZWdpc3RyeSBvciB0YXhvbm9teSBkb2N1bWVudCB0byBiZSByZW1vdmVkCi0JICogZnJvbSB0aGUgaW5kZXgsIGJ1dCBub3QgZGVsZXRlZC4KLQkgKiAKLQkgKiBAc2VlICNyZW1vdmVSZWdpc3RyeShTdHJpbmcsIGJvb2xlYW4pCi0JICogQHNlZSAjcmVtb3ZlVGF4b25vbXkoU3RyaW5nLCBib29sZWFuKQotCSAqLwotCXB1YmxpYyBib29sZWFuIEtFRVBfRE9DVU1FTlQgPSBmYWxzZTsKLQotCS8qKgotCSAqIEEgY29uc3RhbnQgZm9yIHVzZSBpbiB0aGUgPGNvZGU+cmVtb3ZlUmVnaXN0cnkoLi4uKTwvY29kZT4KLQkgKiBhbmQgPGNvZGU+cmVtb3ZlVGF4b25vbXkoLi4uKTwvY29kZT4gbWV0aG9kcyB0aGF0IHdpbGwKLQkgKiBjYXVzZSB0aGUgZ2l2ZW4gcmVnaXN0cnkgb3IgdGF4b25vbXkgZG9jdW1lbnQgdG8gYmUgcmVtb3ZlZAotCSAqIGZyb20gdGhlIGluZGV4IGFuZCBkZWxldGVkLgotCSAqIAotCSAqIEBzZWUgI3JlbW92ZVJlZ2lzdHJ5KFN0cmluZywgYm9vbGVhbikKLQkgKiBAc2VlICNyZW1vdmVUYXhvbm9teShTdHJpbmcsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIGJvb2xlYW4gREVMRVRFX0RPQ1VNRU5UID0gdHJ1ZTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIFVSTCBvZiB0aGUgWE1MIGluZGV4IGRvY3VtZW50IHRoYXQgcmVmZXJlbmNlcwotCSAqIHRoZSBYTUwgcmVnaXN0cnkgYW5kIHRheG9ub215IG1vZGVscyBtYW5hZ2VkIGJ5IHRoaXMKLQkgKiBSZWdpc3RyeSBNYW5hZ2VyLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIFVSTCBvZiB0aGUgbWFuYWdpbmcgZG9jdW1lbnQuCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gSWYgYSBVUkwgdG8gdGhlIG1hbmFnaW5nCi0JICogZG9jdW1lbnQgY2Fubm90IGJlIGRldGVybWluZWQgb3IgY3JlYXRlZC4KLQkgKi8KLQlwdWJsaWMgVVJMIGdldFVSTCAoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotCi0JLyoqCi0JICogQWRkcyBhbiA8Y29kZT5JVGF4b25vbXlGaW5kZXI8L2NvZGU+IHRoYXQgdGhlCi0JICogPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gY2FuIHVzZSB0byBmaW5kCi0JICogdGhlIHNldCBvZiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIHVzZWQKLQkgKiBieSBhIGdpdmVuIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbC4KLQkgKiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyLnNhdmUocmVnaXN0cnkpPC9jb2RlPiBuZWVkcyBoZWxwIGZpbmRpbmcKLQkgKiB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyB1c2VkIGJ5IGEgPGNvZGU+UmVnaXN0cnk8L2NvZGU+LAotCSAqIGlmIGFueS4KLQkgKiAKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBuYW1lIG9mIHRoZSBjb25jcmV0ZSA8Y29kZT5SZWdpc3RyeTxjb2RlPgotCSAqIGNsYXNzIGZvciB3aGljaCB0aGUgPGNvZGU+SVRheG9ub215RmluZGVyPC9jb2RlPiBpcyBiZWluZyBhZGRlZC4KLQkgKiBAcGFyYW0gdGF4b25vbXlGaW5kZXIgQW4gPGNvZGU+SVRheG9ub215RmluZGVyPC9jb2RlPiB0aGF0IGtub3dzCi0JICogaG93IHRvIGRldGVybWluZSB0aGUgc2V0IG9mIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgYSBnaXZlbgotCSAqIGNvbmNyZXRlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCBpcyB1c2luZy4KLQkgKiBAc2VlIElUYXhvbm9teUZpbmRlcgotCSAqIEBzZWUgI3NhdmVSZWdpc3RyeShSZWdpc3RyeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUYXhvbm9teUZpbmRlciAoIFN0cmluZyBjbGFzc05hbWUsIElUYXhvbm9teUZpbmRlciB0YXhvbm9teUZpbmRlciApOwotCi0gICAgLyoqCi0gICAgICogRGVzdHJveXMgdGhlIGluZGV4IG9mIHJlZ2lzdHJpZXMgYW5kIHRheG9ub21pZXMgaW4gbWVtb3J5LgotICAgICAqIFN1YnNlcXVlbnQgY2FsbHMgdG8gPGNvZGU+Z2V0SW5kZXgoKTwvY29kZT4gYW5kIG90aGVyIG1ldGhvZHMKLSAgICAgKiBvZiB0aGlzIGludGVyZmFjZSB3aWxsIGNhdXNlIHRoZSBpbmRleCB0byBiZSByZWxvYWRlZC4KLSAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGFueXRpbWUgdGhlIGNhbGxlciBzdXNwZWN0cyB0aGUKLSAgICAgKiBwZXJzaXN0ZW50IGluZGV4IGhhcyBjaGFuZ2VkIGFuZCB3aXNoZXMgdG8gbG9hZCB0aGUgY2hhbmdlcwotICAgICAqIGludG8gdGhlIGN1cnJlbnQgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVmcmVzaE1hbmFnZXIgKCk7Ci0KLQkvKioKLQkgKiBTYXZlcyBhIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCB0byBhbiBYTUwgZG9jdW1lbnQKLQkgKiBsb2NhdGVkIHJlbGF0aXZlIHRvIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgYXMgaWRlbnRpZmllZCBieQotCSAqIDxjb2RlPmdldFVSTCgpPC9jb2RlPiwgYW5kIHVwZGF0ZXMgdGhlIGluZGV4IFhNTCBkb2N1bWVudAotCSAqIHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc2F2ZWQgdGF4b25vbXkgZG9jdW1lbnQuCi0JICogVGhlIHJlbGF0aXZlIHBhdGhuYW1lIHRvIHRoZSB0YXhvbm9teSBYTUwgZG9jdW1lbnQgaXMKLQkgKiBjb21wdXRlZCBieSB0aGUgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gYW5kIGNhbm5vdAotCSAqIGJlIGluZmx1ZW5jZWQgYnkgdGhlIGNhbGxlci4KLQkgKiAKLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCAoYW5kCi0JICogcmVmZXJlbmNlZCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzKSB0byBzYXZlLgotCSAqIEByZXR1cm4gQSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gcmVmZXJlbmNlLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICogQHNlZSAjYWRkVGF4b25vbXlGaW5kZXIoU3RyaW5nLCBJVGF4b25vbXlGaW5kZXIpCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IHNhdmVSZWdpc3RyeSAoIFJlZ2lzdHJ5IHJlZ2lzdHJ5ICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBMb2FkcyBhcyBuZWNlc3NhcnkgYW5kIHJldHVybnMgYSBmdWxsIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPgotCSAqIG1vZGVsIGFzIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIFVSSSBhbmQgcmVmZXJlbmNlZCBmcm9tCi0JICogdGhlIGluZGV4IFhNTCBkb2N1bWVudCBsb2NhdGVkIGF0IDxjb2RlPmdldFVSTCgpPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgcmVnaXN0cnkuCi0JICogQHJldHVybiBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsCi0JICogb3IgbnVsbCBpZiBubyBzdWNoIG1vZGVsIGNhbiBiZSBmb3VuZC4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBsb2FkUmVnaXN0cnkgKCBTdHJpbmcgdXJpICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBMb2FkcyBhcyBuZWNlc3NhcnkgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgZnVsbCA8Y29kZT5SZWdpc3RyeTwvY29kZT4KLQkgKiBtb2RlbHMgYXMgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2YgVVJJcyBhbmQgcmVmZXJlbmNlZCBmcm9tCi0JICogdGhlIGluZGV4IFhNTCBkb2N1bWVudCBsb2NhdGVkIGF0IDxjb2RlPmdldFVSTCgpPC9jb2RlPi4KLQkgKiBVc2VmdWwgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZT5nZXRSZWdpc3RyeVVSSXMoKTwvY29kZT4uCi0JICogTm90ZSB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGFycmF5IG1heSBiZSBsZXNzIHRoYW4KLQkgKiB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvZiBVUklzIGluIGNhc2VzIHdoZXJlIG9uZSBvciBtb3JlCi0JICogVVJJcyBmYWlsIHRvIHJlc29sdmUgdG8gYSBsb2FkYWJsZSBtb2RlbC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpcyBUaGUgVVJJIGlkZW50aWZpZXJzIG9mIHRoZSByZWdpc3RyaWVzLgotCSAqIEByZXR1cm4gVGhlIGFycmF5IG9mIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbHMsCi0JICogbmV2ZXIgbnVsbCwgYnV0IHBvc3NpYmx5IGVtcHR5LgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICovCi0JcHVibGljIFJlZ2lzdHJ5W10gbG9hZFJlZ2lzdHJpZXMgKCBTdHJpbmdbXSB1cmlzICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFVSSSBpZGVudGlmaWVycyB0byA8Y29kZT5SZWdpc3RyeTwvY29kZT4KLQkgKiBtb2RlbHMgaW4gdGhlIGluZGV4IG1hbmFnZWQgYnkgdGhpcyA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFVSSSBpZGVudGlmaWVycywgcG9zc2libHkgZW1wdHkgYnV0IG5ldmVyIG51bGwsCi0JICogdG8gcmVnaXN0ZXJlZCA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWxzLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFJlZ2lzdHJ5VVJJcyAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFJlbW92ZXMgdGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCBpZGVudGlmaWVkIGJ5IHRoZQotCSAqIGdpdmVuIDxjb2RlPnVyaTwvY29kZT4gZnJvbSB0aGUgaW5kZXggYW5kIGVpdGhlciBrZWVwcyBvcgotCSAqIGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGRvY3VtZW50Ci0JICogYmFzZWQgb24gdGhlIHZhbHVlIGdpdmVuIGZvciA8Y29kZT5kZWxldGVEb2N1bWVudDwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIGlkZW50aWZpZXIgb2YgdGhlIG1vZGVsIHRvIGRlbGV0ZS4KLQkgKiBAcGFyYW0gZGVsZXRlRG9jdW1lbnQgRWl0aGVyIDxjb2RlPktFRVBfRE9DVU1FTlQ8L2NvZGU+Ci0JICogb3IgPGNvZGU+REVMRVRFX0RPQ1VNRU5UPC9jb2RlPiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKLQkgKiBtb2RlbCBkb2N1bWVudCBzaG91bGQgYmUga2VwdCBvciBkZWxldGVkLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICogQHNlZSAjS0VFUF9ET0NVTUVOVAotCSAqIEBzZWUgI0RFTEVURV9ET0NVTUVOVAotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVJlZ2lzdHJ5ICggU3RyaW5nIHVyaSwgYm9vbGVhbiBkZWxldGVEb2N1bWVudCApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogU2F2ZXMgYSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgdG8gYW4gWE1MIGRvY3VtZW50Ci0JICogbG9jYXRlZCByZWxhdGl2ZSB0byB0aGUgaW5kZXggWE1MIGRvY3VtZW50IGFzIGlkZW50aWZpZWQgYnkKLQkgKiA8Y29kZT5nZXRVUkwoKTwvY29kZT4sIGFuZCB1cGRhdGVzIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQKLQkgKiB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHNhdmVkIHRheG9ub215IGRvY3VtZW50LgotCSAqIFRoZSByZWxhdGl2ZSBwYXRobmFtZSB0byB0aGUgdGF4b25vbXkgWE1MIGRvY3VtZW50IGlzCi0JICogY29tcHV0ZWQgYnkgdGhlIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGFuZCBjYW5ub3QKLQkgKiBiZSBpbmZsdWVuY2VkIGJ5IHRoZSBjYWxsZXIuCi0JICogCi0JICogQHBhcmFtIHRheG9ub215IFRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgdG8gc2F2ZS4KLQkgKiBAcmV0dXJuIEEgPGNvZGU+VGF4b25vbXk8L2NvZGU+IHJlZmVyZW5jZS4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBUYXhvbm9teQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBzYXZlVGF4b25vbXkgKCBUYXhvbm9teSB0YXhvbm9teSApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogTG9hZHMgYXMgbmVjZXNzYXJ5IGFuZCByZXR1cm5zIGEgZnVsbCA8Y29kZT5UYXhvbm9teTwvY29kZT4KLQkgKiBtb2RlbCBhcyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBVUkkgYW5kIHJlZmVyZW5jZWQgZnJvbQotCSAqIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgbG9jYXRlZCBhdCA8Y29kZT5nZXRVUkwoKTwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIGlkZW50aWZpZXIgb2YgdGhlIHRheG9ub215LgotCSAqIEByZXR1cm4gVGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbAotCSAqIG9yIG51bGwgaWYgbm8gc3VjaCBtb2RlbCBjYW4gYmUgZm91bmQuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgbG9hZFRheG9ub215ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogTG9hZHMgYXMgbmVjZXNzYXJ5IGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGZ1bGwgPGNvZGU+VGF4b25vbXk8L2NvZGU+Ci0JICogbW9kZWxzIGFzIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIFVSSXMgYW5kIHJlZmVyZW5jZWQgZnJvbQotCSAqIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgbG9jYXRlZCBhdCA8Y29kZT5nZXRVUkwoKTwvY29kZT4uCi0JICogVXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggPGNvZGU+Z2V0VGF4b25vbXlVUklzKCk8L2NvZGU+LgotCSAqIE5vdGUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5lZCBhcnJheSBtYXkgYmUgbGVzcyB0aGFuCi0JICogdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb2YgVVJJcyBpbiBjYXNlcyB3aGVyZSBvbmUgb3IgbW9yZQotCSAqIFVSSXMgZmFpbCB0byByZXNvbHZlIHRvIGEgbG9hZGFibGUgbW9kZWwuIAotCSAqIAotCSAqIEBwYXJhbSB1cmlzIFRoZSBVUkkgaWRlbnRpZmllcnMgb2YgdGhlIHRheG9ub21pZXMuCi0JICogQHJldHVybiBUaGUgYXJyYXkgb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscywKLQkgKiBuZXZlciBudWxsLCBidXQgcG9zc2libHkgZW1wdHkuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlbXSBsb2FkVGF4b25vbWllcyAoIFN0cmluZ1tdIHVyaXMgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzIHRvIDxjb2RlPlRheG9ub215PC9jb2RlPgotCSAqIG1vZGVscyBpbiB0aGUgaW5kZXggbWFuYWdlZCBieSB0aGlzIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzLCBwb3NzaWJseSBlbXB0eSBidXQgbmV2ZXIgbnVsbCwKLQkgKiB0byByZWdpc3RlcmVkIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0VGF4b25vbXlVUklzICgpIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogUmVtb3ZlcyB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIGlkZW50aWZpZWQgYnkgdGhlCi0JICogZ2l2ZW4gPGNvZGU+dXJpPC9jb2RlPiBmcm9tIHRoZSBpbmRleCBhbmQgZWl0aGVyIGtlZXBzIG9yCi0JICogZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyA8Y29kZT5UYXhvbm9teTwvY29kZT4gZG9jdW1lbnQKLQkgKiBiYXNlZCBvbiB0aGUgdmFsdWUgZ2l2ZW4gZm9yIDxjb2RlPmRlbGV0ZURvY3VtZW50PC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgbW9kZWwgdG8gZGVsZXRlLgotCSAqIEBwYXJhbSBkZWxldGVEb2N1bWVudCBFaXRoZXIgPGNvZGU+S0VFUF9ET0NVTUVOVDwvY29kZT4KLQkgKiBvciA8Y29kZT5ERUxFVEVfRE9DVU1FTlQ8L2NvZGU+IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQotCSAqIG1vZGVsIGRvY3VtZW50IHNob3VsZCBiZSBrZXB0IG9yIGRlbGV0ZWQuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKiBAc2VlICNLRUVQX0RPQ1VNRU5UCi0JICogQHNlZSAjREVMRVRFX0RPQ1VNRU5UCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlVGF4b25vbXkgKCBTdHJpbmcgdXJpLCBib29sZWFuIGRlbGV0ZURvY3VtZW50ICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lUYXhvbm9teUZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9JVGF4b25vbXlGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc4ZmNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lUYXhvbm9teUZpbmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotLyoqCi0gKiBBbiA8Y29kZT5JVGF4b25vbXlGaW5kZXI8L2NvZGU+IGNvbXB1dGVzIHRoZSBzZXQgb2YKLSAqIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgcmVmZXJlbmNlZCBvciB1c2VkIGJ5IGEKLSAqIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPi4KLSAqIEBhdXRob3IgZ2lsYmVydGFAY2EuaWJtLmNvbQotICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVRheG9ub215RmluZGVyCi17Ci0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSB0YXhvbm9taWVzIHVzZWQgYnkgdGhlIGdpdmVuCi0JICogPGNvZGU+cmVnaXN0cnk8L2NvZGU+LiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwuCi0JICoKLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBmb3Igd2hpY2gKLQkgKiBhIHNldCBvZiB0YXhvbm9taWVzIG1pZ2h0IGJlIGZvdW5kLgotCSAqIEByZXR1cm4gVGhlIGFycmF5IG9mIHRheG9ub21pZXMsIHBvc3NpYmx5IGVtcHR5LgotCSAqLwotCXB1YmxpYyBUYXhvbm9teVtdIHRheG9ub21pZXMgKCBSZWdpc3RyeSByZWdpc3RyeSApOwkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1JlZ2lzdHJ5TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzY2NkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1JlZ2lzdHJ5TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTcgICAxMzE1ODIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDkwNiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0vKioKLSAqIEEgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlNYW5hZ2VyIGltcGxlbWVudHMgSVJlZ2lzdHJ5TWFuYWdlcgotewotCXByaXZhdGUgc3RhdGljIFN0cmluZyBSRUdJU1RSWSA9ICJSZWdpc3RyeSI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRBWE9OT01ZID0gIlRheG9ub215IjsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgWE1MID0gInhtbCI7Ci0JcHJpdmF0ZSBIYXNodGFibGUgdGF4b25vbXlGaW5kZXJzXzsKLQlwcml2YXRlIEluZGV4IGluZGV4XzsKLQlwcml2YXRlIEdlbmVyaWNSZXNvdXJjZUZhY3RvcnkgcmVzb3VyY2VGYWN0b3J5XyA9IG5ldyBHZW5lcmljUmVzb3VyY2VGYWN0b3J5KCk7Ci0JcHJpdmF0ZSBVUkwgcmVnaXN0cnlVUkxfPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIHJlZ2lzdHJ5UGF0aG5hbWVfID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgUmVnaXN0cnlNYW5hZ2VyIGZvciB0aGUgaW5kZXggWE1MIGZpbGUKLQkgKiBhdCB0aGUgZ2l2ZW4gPGNvZGU+dXJsPC9jb2RlPi4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gdGhlIGluZGV4IFhNTCBmaWxlLgotCSAqLwotCVJlZ2lzdHJ5TWFuYWdlciAoIFVSTCB1cmwgKQotCXsKLQkJcmVnaXN0cnlVUkxfID0gdXJsOwotCQl0YXhvbm9teUZpbmRlcnNfID0gbmV3IEhhc2h0YWJsZSgpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgUmVnaXN0cnlNYW5hZ2VyIGZvciB0aGUgaW5kZXggWE1MIGZpbGUKLQkgKiBhdCB0aGUgZ2l2ZW4gPGNvZGU+cGF0aG5hbWU8L2NvZGU+LgotCSAqIEBwYXJhbSBwYXRobmFtZSBUaGUgcGF0aG5hbWUgdG8gdGhlIGluZGV4IFhNTCBmaWxlLgotCSAqLwotCVJlZ2lzdHJ5TWFuYWdlciAoIFN0cmluZyBwYXRobmFtZSApCi0JewotCQlyZWdpc3RyeVBhdGhuYW1lXyA9IHBhdGhuYW1lOwotCQl0YXhvbm9teUZpbmRlcnNfID0gbmV3IEhhc2h0YWJsZSgpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2dldFVSTCgpCi0JICovCi0JcHVibGljIFVSTCBnZXRVUkwgKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCXsKLQkJaWYgKHJlZ2lzdHJ5VVJMXyA9PSBudWxsKQotCQl7Ci0JCQlyZWdpc3RyeVVSTF8gPSBuZXcgRmlsZShyZWdpc3RyeVBhdGhuYW1lXykudG9VUkwoKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlVUkxfOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gYWJzb2x1dGUgVVJMIGNvbXB1dGVkIGZyb20gdGhlIGFic29sdXRlIFVSTCBvZiB0aGUKLQkgKiBpbmRleCBYTUwgZG9jdW1lbnQgbWFuYWdlZCBieSB0aGlzIDxjb2RlPlJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4KLQkgKiBhbmQgdGhlIGdpdmVuIDxjb2RlPmlkPC9jb2RlPi4gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZXRlcm1pbmUKLQkgKiBhIHJlYXNvbmFibGUgbG9jYXRpb24gVVJMIGZvciByZWdpc3RyeSBhbmQgdGF4b25vbXkgZG9jdW1lbnRzCi0JICogd2hlbiByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIGZpcnN0IHRvIGJlIGFkZGVkIHRvIHRoZSBpbmRleCBYTUwKLQkgKiBkb2N1bWVudC4gVGhpcyBtZXRob2QgaXMgaWRlbXBvdGVudCBpbnNvZmFyIGFzIGl0IHdpbGwgYWx3YXlzCi0JICogY29tcHV0ZSB0aGUgc2FtZSBVUkwgZm9yIGEgZ2l2ZW4gPGNvZGU+UmVnaXN0cnlNYW5hZ2VyPC9jb2RlPgotCSAqIGFuZCBhIGdpdmVuIDxjb2RlPmlkPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSByZWZlcmVuY2VkIHJlZ2lzdHJ5IG9yIHRheG9ub215IGRvY3VtZW50LiAKLQkgKiBAcmV0dXJuIFRoZSBhYnNvbHV0ZSBVUkwgdG8gdGhlIHJlZmVyZW5jZWQgZG9jdW1lbnQuCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gSWYgYSB2aWFibGUgYWJzb2x1dGUgVVJMIGNhbm5vdAotCSAqIGJlIGNvbXB1dGVkLgotCSAqLwotCXByaXZhdGUgVVJMIGdldFVSTCAoIFN0cmluZyBpZCApIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBiYXNlVXJsID0gIiI7IAotCQlVUkwgaW5kZXhVcmwgPSBnZXRVUkwoKTsKLQkJU3RyaW5nIGluZGV4U3RyaW5nID0gaW5kZXhVcmwudG9TdHJpbmcoKTsKLQkJaW50IGluZGV4ID0gaW5kZXhTdHJpbmcubGFzdEluZGV4T2YoIi8iKTsgCi0JCWJhc2VVcmwgPSBpbmRleFN0cmluZy5zdWJzdHJpbmcoMCxpbmRleCArIDEpOwotCQlTdHJpbmcgdXJsU3RyaW5nID0gYmFzZVVybCArIGlkICsgIi4iICsgWE1MOwotCQlyZXR1cm4gbmV3IFVSTCh1cmxTdHJpbmcpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI3JlZnJlc2hNYW5hZ2VyKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoTWFuYWdlciAoKQotCXsKLQkJaW5kZXhfID0gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogQ2FjaGVzIGFuZCByZXR1cm5zIHRoZSBpbmRleCBtb2RlbC4gT24gZmlyc3QgY2FsbCwKLQkgKiBpZiBhbiBpbmRleCBkb2N1bWVudCBleGlzdHMsIHRoZSBpbmRleCBpcyBsb2FkZWQKLQkgKiBmcm9tIGl0LCBvdGhlcndpc2UsIGEgbmV3IGluZGV4IGlzIHJldHVybmVkLgotCSAqIEByZXR1cm4gVGhlIGluZGV4LgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgaW5kZXggY2Fubm90IGJlIGxvYWRlZCBmb3IgYW55IHJlYXNvbi4KLQkgKi8KLQlwcml2YXRlIEluZGV4IGdldEluZGV4ICgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlpZiAoaW5kZXhfID09IG51bGwpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCVVSTCBpbmRleFVSTCA9IGdldFVSTCgpOwotCQkJCWlmIChSZWdpc3RyeVNlcnZpY2UuZXhpc3RzKGluZGV4VVJMKSkKLQkJCQl7Ci0JCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJCQkJcmVzb3VyY2UubG9hZChSZWdpc3RyeVNlcnZpY2UuZ2V0SW5wdXRTdHJlYW1Gb3IoaW5kZXhVUkwpLG51bGwpOwotCQkJCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290IGRvY3VtZW50ID0gKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QpcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7Ci0JCQkJCWluZGV4XyA9IGRvY3VtZW50LmdldEluZGV4KCk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCWluZGV4XyA9IFJUSW5kZXhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbmRleCgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCS8vVE9ETzogTmVlZCBhIG1lc3NhZ2UgZm9yIHRoaXMgU3RhdHVzLgotCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW5kZXhfOwotCX0KLQotCS8qKgotCSAqIFNhdmVzIHRoZSBpbmRleCBtb2RlbCB0byBhbiBYTUwgZG9jdW1lbnQuCQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgc2F2ZSBmYWlscyBmb3IgYW55IHJlYXNvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2F2ZUluZGV4ICgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290IGRvY3VtZW50ID0gUlRJbmRleEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQlkb2N1bWVudC5zZXRJbmRleChnZXRJbmRleCgpKTsKLQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnlfLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioueG1sIikpOwotCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkb2N1bWVudCk7Ci0JCXRyeQotCQl7Ci0JCQlyZXNvdXJjZS5zYXZlKFJlZ2lzdHJ5U2VydmljZS5nZXRPdXRwdXRTdHJlYW1Gb3IoZ2V0VVJMKCkpLG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvL1RPRE86IE5lZWQgYSBtZXNzYWdlIGZvciB0aGlzIFN0YXR1cy4KLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNhZGRUYXhvbm9teUZpbmRlcihqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVRheG9ub215RmluZGVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFRheG9ub215RmluZGVyKFN0cmluZyBjbGFzc05hbWUsIElUYXhvbm9teUZpbmRlciB0YXhvbm9teUZpbmRlcikKLQl7Ci0JCXRheG9ub215RmluZGVyc18ucHV0KGNsYXNzTmFtZSx0YXhvbm9teUZpbmRlcik7Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgdGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPiBhcy1pcywgd2hldGhlciBmdWxsIG1vZGVsCi0JICogb3IgcmVmZXJlbmNlLCB0byB0aGUgaW5kZXggb25seSBpZiBhIHJlZ2lzdHJ5IHdpdGggdGhlIHNhbWUgSUQKLQkgKiBvciByZWZlcmVuY2UgaXMgbm90IGFscmVhZHkgc3RvcmVkIHRoZXJlLgotCSAqIEBwYXJhbSByZWdpc3RyeSBUaGUgcmVnaXN0cnkgdG8gYWRkLgotCSAqLwotCXByaXZhdGUgdm9pZCBhZGRSZWdpc3RyeVRvSW5kZXgoUmVnaXN0cnkgcmVnaXN0cnkpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgaWQgPSByZWdpc3RyeS5nZXRJZCgpOwotCQlpZiAoaWQgPT0gbnVsbCkgaWQgPSByZWdpc3RyeS5nZXRSZWYoKTsKLQkJaWYgKGlkICE9IG51bGwgJiYgZ2V0UmVnaXN0cnkoaWQpID09IG51bGwpCi0JCXsKLQkJCWdldEluZGV4KCkuZ2V0UmVnaXN0cnkoKS5hZGQocmVnaXN0cnkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgdGhlIGdpdmVuIDxjb2RlPnRheG9ub215PC9jb2RlPiBhcy1pcywgd2hldGhlciBmdWxsIG1vZGVsCi0JICogb3IgcmVmZXJlbmNlLCB0byB0aGUgaW5kZXggb25seSBpZiBhIHRheG9ub215IHdpdGggdGhlIHNhbWUgSUQKLQkgKiBvciByZWZlcmVuY2UgaXMgbm90IGFscmVhZHkgc3RvcmVkIHRoZXJlLgotCSAqIEBwYXJhbSB0YXhvbm9teSBUaGUgdGF4b25vbXkgdG8gYWRkLgotCSAqLwotCXByaXZhdGUgdm9pZCBhZGRUYXhvbm9teVRvSW5kZXgoVGF4b25vbXkgdGF4b25vbXkpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgaWQgPSB0YXhvbm9teS5nZXRJZCgpOwotCQlpZiAoaWQgPT0gbnVsbCkgaWQgPSB0YXhvbm9teS5nZXRSZWYoKTsKLQkJaWYgKGlkICE9IG51bGwgJiYgZ2V0VGF4b25vbXkoaWQpID09IG51bGwpCi0JCXsKLQkJIAlnZXRJbmRleCgpLmdldFRheG9ub215KCkuYWRkKHRheG9ub215KTsJCi0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjc2F2ZVJlZ2lzdHJ5KG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkpCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IHNhdmVSZWdpc3RyeSAoIFJlZ2lzdHJ5IHJlZ2lzdHJ5ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJUmVnaXN0cnkgcmVnaXN0cnlSZWYgPSBudWxsOwotCQl0cnkKLQkJewotCQkJVVJMIHVybCA9IGdldFVSTChSRUdJU1RSWSArIHJlZ2lzdHJ5LmdldElkKCkpOwotCQkJcmVnaXN0cnlTZXJ2aWNlLnNhdmVSZWdpc3RyeSh1cmwscmVnaXN0cnkpOwotCQkJcmVnaXN0cnlSZWYgPSByZWdpc3RyeVNlcnZpY2UubmV3UmVnaXN0cnlSZWZlcmVuY2UocmVnaXN0cnkpOwotCQkJcmVnaXN0cnlSZWYuc2V0TG9jYXRpb24odXJsLnRvU3RyaW5nKCkpOwotCQkJYWRkUmVnaXN0cnlUb0luZGV4KHJlZ2lzdHJ5UmVmKTsKLQkJCXNhdmVJbmRleCgpOwotCQkJLyoKLQkJCSAqIFRPRE86IFRoZSBmb2xsb3dpbmcgcGlsZSBvZiBjb2RlIGlzIGNvbW1lbnRlZCBvdXQKLQkJCSAqIHNpbmNlIHRoZXJlIGlzbid0IGEgcmVsaWFibGUgd2F5IHVuZGVyIHRoZSBjdXJyZW50Ci0JCQkgKiBkZXNpZ24gdG8gc2F2ZSB0YXhvbm9teSBtb2RlbHMgaGVsZCBpbiBhIHJlZ2lzdHJ5IG1vZGVsCi0JCQkgKiAKLQkJCUlUYXhvbm9teUZpbmRlciBmaW5kZXIgPSAoSVRheG9ub215RmluZGVyKXRheG9ub215RmluZGVyc18uZ2V0KHJlZ2lzdHJ5LmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJCWlmIChmaW5kZXIgIT0gbnVsbCkKLQkJCXsKLQkJCQlUYXhvbm9teVtdIHRheG9ub21pZXMgPSBmaW5kZXIudGF4b25vbWllcyhyZWdpc3RyeSk7Ci0JCQkJZm9yIChpbnQgaT0wOyBpPHRheG9ub21pZXMubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlTdHJpbmcgaWQgPSB0YXhvbm9taWVzW2ldLmdldElkKCk7Ci0JCQkJCVN0cmluZyByZWYgPSB0YXhvbm9taWVzW2ldLmdldFJlZigpOwotCQkJCQlpZiAoaWQgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJVVJMIHRheG9ub215VVJMID0gZ2V0VVJMKFRBWE9OT01ZICsgaWQpOwotCQkJCQkJcmVnaXN0cnlTZXJ2aWNlLnNhdmVUYXhvbm9teSh0YXhvbm9teVVSTCx0YXhvbm9taWVzW2ldKTsKLQkJCQkJCVRheG9ub215IHRheG9ub215UmVmID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215UmVmZXJlbmNlKHRheG9ub21pZXNbaV0pOwotCQkJCQkJdGF4b25vbXlSZWYuc2V0TG9jYXRpb24odGF4b25vbXlVUkwudG9TdHJpbmcoKSk7Ci0JCQkJCQlhZGRUYXhvbm9teVRvSW5kZXgodGF4b25vbXlSZWYpOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHJlZiAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlpZiAodGF4b25vbWllc1tpXS5nZXRMb2NhdGlvbigpID09IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLQkJCQkJCQlUYXhvbm9teSB0YXhvbm9teSA9IGdldFRheG9ub215KHJlZik7Ci0JCQkJCQkJaWYgKHRheG9ub215ICE9IG51bGwpIGxvY2F0aW9uID0gdGF4b25vbXkuZ2V0TG9jYXRpb24oKTsKLQkJCQkJCQlpZiAobG9jYXRpb24gPT0gbnVsbCkgbG9jYXRpb24gPSBnZXRVUkwoVEFYT05PTVkgKyByZWYpLnRvU3RyaW5nKCk7Ci0JCQkJCQkJdGF4b25vbWllc1tpXS5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCQkJCQkJaWYgKHRheG9ub215ID09IG51bGwpCi0JCQkJCQkJewotCQkJCQkJCQlhZGRUYXhvbm9teVRvSW5kZXgocmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215UmVmZXJlbmNlKHRheG9ub21pZXNbaV0pKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCSAgICAqLwotCQl9Ci0JCWNhdGNoICggTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lICkKLQkJewotCQkJLy9UT0RPOiBNZXNzYWdlIHRleHQgcmVxdWlyZWQuCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixtZSkpOwotCQl9Ci0JCXJldHVybiByZWdpc3RyeVNlcnZpY2UubmV3UmVnaXN0cnlSZWZlcmVuY2UocmVnaXN0cnlSZWYpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2xvYWRSZWdpc3RyeShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBsb2FkUmVnaXN0cnkgKCBTdHJpbmcgdXJpICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJdHJ5Ci0JCXsKLQkJCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkodXJpKTsKLQkJCWlmIChyZWdpc3RyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQotCQkJLy8gSWYgdGhlIFJlZ2lzdHJ5IGhhcyBhbiBJRCwgaXQncyBhIGZ1bGwgbW9kZWwKLQkJCS8vIGlubGluZWQgd2l0aGluIHRoZSBJbmRleCBhbmQgaXMgcmV0dXJuZWQgYXMtaXMuCi0JCQlpZiAocmVnaXN0cnkuZ2V0SWQoKSAhPSBudWxsKSByZXR1cm4gcmVnaXN0cnk7Ci0KLQkJCS8vIE90aGVyd2lzZSBpdCdzIGEgcmVmZXJlbmNlIHRvIGEgZnVsbCBtb2RlbAotCQkJLy8gd2hpY2ggd2UgbG9hZCBmcm9tIHRoZSByZWZlcmVuY2UncyBsb2NhdGlvbi4KLQkJCVN0cmluZyB1cmxTdHJpbmcgPSByZWdpc3RyeS5nZXRMb2NhdGlvbigpOwotCQkJaWYgKHVybFN0cmluZyA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cmluZyk7Ci0JCQlyZXR1cm4gcmVnaXN0cnlTZXJ2aWNlLmxvYWRSZWdpc3RyeSh1cmwpOwotCQl9Ci0JCWNhdGNoICggTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lICkKLQkJewotCQkJLy9UT0RPOiBNZXNzYWdlIHRleHQgcmVxdWlyZWQuCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixtZSkpOwotCQl9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2xvYWRSZWdpc3RyaWVzKGphdmEubGFuZy5TdHJpbmdbXSkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlbXSBsb2FkUmVnaXN0cmllcyAoIFN0cmluZ1tdIHVyaXMgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCh1cmlzLmxlbmd0aCk7Ci0JCWZvciAoaW50IGk9MDsgaTx1cmlzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlSZWdpc3RyeSByZWdpc3RyeSA9IGxvYWRSZWdpc3RyeSh1cmlzW2ldKTsKLQkJCWlmIChyZWdpc3RyeSAhPSBudWxsKQotCQkJewotCQkJCWxpc3QuYWRkKHJlZ2lzdHJ5KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKFJlZ2lzdHJ5W10pbGlzdC50b0FycmF5KG5ldyBSZWdpc3RyeVswXSk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjZ2V0UmVnaXN0cnlVUklzKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0UmVnaXN0cnlVUklzICgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRSZWdpc3RyeSgpOwotCQlMaXN0IHJlZ2lzdHJ5VVJJcyA9IG5ldyBBcnJheUxpc3QobGlzdC5zaXplKCkpOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKQotCQl7Ci0JCQkvLyBFYWNoIFJlZ2lzdHJ5IGZvdW5kIGluIHRoZSBpbmRleCBtYXkgYmUKLQkJCS8vIGVpdGhlciBhIGZ1bGwgbW9kZWwgb3IgYSByZWZlcmVuY2UgdG8gb25lLgotCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSAoUmVnaXN0cnkpaXRlcmF0b3IubmV4dCgpOwotCQkJaWYgKHJlZ2lzdHJ5LmdldElkKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlyZWdpc3RyeVVSSXMuYWRkKHJlZ2lzdHJ5LmdldElkKCkpOwotCQkJfQotCQkJZWxzZSBpZiAocmVnaXN0cnkuZ2V0UmVmKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlyZWdpc3RyeVVSSXMuYWRkKHJlZ2lzdHJ5LmdldFJlZigpKTsKLQkJCX0KLQkJfQkKLQkJcmV0dXJuIChTdHJpbmdbXSlyZWdpc3RyeVVSSXMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNyZW1vdmVSZWdpc3RyeShqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVJlZ2lzdHJ5ICggU3RyaW5nIHVyaSwgYm9vbGVhbiBkZWxldGVEb2N1bWVudCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRSZWdpc3RyeSgpOwotCQlSZWdpc3RyeSByZWdpc3RyeSA9IGdldFJlZ2lzdHJ5KHVyaSk7Ci0JCWlmIChyZWdpc3RyeSAhPSBudWxsKQotCQl7Ci0JCQlsaXN0LnJlbW92ZShyZWdpc3RyeSk7Ci0JCQlzYXZlSW5kZXgoKTsKLQkJCS8vIFRoZSBpZGVudGlmaWVkIFJlZ2lzdHJ5IG1heSBiZSBlaXRoZXIgYSBmdWxsIG1vZGVsCi0JCQkvLyAoaWUuIGlubGluZWQgaW4gdGhlIEluZGV4KSBvciBhIHJlZmVyZW5jZSB0byBvbmUuCi0JCQkvLyBPbmx5IGluIHRoZSBsYXR0ZXIgY2FzZSBpcyB0aGVyZSBhIGZpbGUgdG8gZGVsZXRlLgotCQkJaWYgKGRlbGV0ZURvY3VtZW50ICYmIHJlZ2lzdHJ5LmdldExvY2F0aW9uKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQkvL1RPRE86IEltcGxlbWVudCBtZS4KLQkJCX0KLQkJfQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI3NhdmVUYXhvbm9teShvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215KQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBzYXZlVGF4b25vbXkgKCBUYXhvbm9teSB0YXhvbm9teSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCVRheG9ub215IHRheG9ub215UmVmID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTAl1cmwgPSBnZXRVUkwoVEFYT05PTVkgKyB0YXhvbm9teS5nZXRJZCgpKTsKLQkJICAgIHJlZ2lzdHJ5U2VydmljZS5zYXZlVGF4b25vbXkodXJsLHRheG9ub215KTsKLQkJCXRheG9ub215UmVmID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215UmVmZXJlbmNlKHRheG9ub215KTsKLQkJCXRheG9ub215UmVmLnNldExvY2F0aW9uKHVybC50b1N0cmluZygpKTsKLQkJCWFkZFRheG9ub215VG9JbmRleCh0YXhvbm9teVJlZik7Ci0JCQlzYXZlSW5kZXgoKTsKLQkJfQotCQljYXRjaCAoIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSApCi0JCXsKLQkJCS8vVE9ETzogTWVzc2FnZSB0ZXh0IHJlcXVpcmVkLgotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsbWUpKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215UmVmZXJlbmNlKHRheG9ub215UmVmKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjbG9hZFRheG9ub215KGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIFRheG9ub215IGxvYWRUYXhvbm9teSAoIFN0cmluZyB1cmkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQl0cnkKLQkJewotCQkJVGF4b25vbXkgdGF4b25vbXkgPSBnZXRUYXhvbm9teSh1cmkpOwotCQkJaWYgKHRheG9ub215ID09IG51bGwpIHJldHVybiBudWxsOwotCi0JCQkvLyBJZiB0aGUgVGF4b25vbXkgaGFzIGFuIElELCBpdCdzIGEgZnVsbCBtb2RlbAotCQkJLy8gaW5saW5lZCB3aXRoaW4gdGhlIEluZGV4IGFuZCBpcyByZXR1cm5lZCBhcy1pcy4KLQkJCWlmICh0YXhvbm9teS5nZXRJZCgpICE9IG51bGwpIHJldHVybiB0YXhvbm9teTsKLQotCQkJLy8gT3RoZXJ3aXNlIGl0J3MgYSByZWZlcmVuY2UgdG8gYSBmdWxsIG1vZGVsCi0JCQkvLyB3aGljaCB3ZSBsb2FkIGZyb20gdGhlIHJlZmVyZW5jZSdzIGxvY2F0aW9uLgotCQkJU3RyaW5nIHVybFN0cmluZyA9IHRheG9ub215LmdldExvY2F0aW9uKCk7Ci0JCQlpZiAodXJsU3RyaW5nID09IG51bGwpIHJldHVybiBudWxsOwotCQkJVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTsKLQkJCXJldHVybiByZWdpc3RyeVNlcnZpY2UubG9hZFRheG9ub215KHVybCk7Ci0JCX0KLQkJY2F0Y2ggKCBNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUgKQotCQl7Ci0JCQkvL1RPRE86IE1lc3NhZ2UgdGV4dCByZXF1aXJlZC4KLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLG1lKSk7Ci0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjbG9hZFRheG9ub21pZXMoamF2YS5sYW5nLlN0cmluZ1tdKQotCSAqLwotCXB1YmxpYyBUYXhvbm9teVtdIGxvYWRUYXhvbm9taWVzICggU3RyaW5nW10gdXJpcyApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KHVyaXMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaT0wOyBpPHVyaXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCVRheG9ub215IHRheG9ub215ID0gbG9hZFRheG9ub215KHVyaXNbaV0pOwotCQkJaWYgKHRheG9ub215ICE9IG51bGwpCi0JCQl7Ci0JCQkJbGlzdC5hZGQodGF4b25vbXkpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoVGF4b25vbXlbXSlsaXN0LnRvQXJyYXkobmV3IFRheG9ub215WzBdKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNnZXRUYXhvbm9teVVSSXMoKQotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRUYXhvbm9teVVSSXMgKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUVMaXN0IGxpc3QgPSBnZXRJbmRleCgpLmdldFRheG9ub215KCk7Ci0JCUxpc3QgdGF4b25vbXlVUklzID0gbmV3IEFycmF5TGlzdChsaXN0LnNpemUoKSk7Ci0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpCi0JCXsKLQkJCS8vIEVhY2ggVGF4b25vbXkgZm91bmQgaW4gdGhlIGluZGV4IG1heSBiZQotCQkJLy8gZWl0aGVyIGEgZnVsbCBtb2RlbCBvciBhIHJlZmVyZW5jZSB0byBvbmUuCi0JCQlUYXhvbm9teSB0YXhvbm9teSA9IChUYXhvbm9teSlpdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAodGF4b25vbXkuZ2V0SWQoKSAhPSBudWxsKQotCQkJewotCQkJCXRheG9ub215VVJJcy5hZGQodGF4b25vbXkuZ2V0SWQoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmICh0YXhvbm9teS5nZXRSZWYoKSAhPSBudWxsKQotCQkJewotCQkJCXRheG9ub215VVJJcy5hZGQodGF4b25vbXkuZ2V0UmVmKCkpOwotCQkJfQotCQl9CQotCQlyZXR1cm4gKFN0cmluZ1tdKXRheG9ub215VVJJcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI3JlbW92ZVRheG9ub215KGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlVGF4b25vbXkgKCBTdHJpbmcgdXJpLCBib29sZWFuIGRlbGV0ZURvY3VtZW50ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUVMaXN0IGxpc3QgPSBnZXRJbmRleCgpLmdldFRheG9ub215KCk7Ci0JCVRheG9ub215IHRheG9ub215ID0gZ2V0VGF4b25vbXkodXJpKTsKLQkJaWYgKHRheG9ub215ICE9IG51bGwpCi0JCXsKLQkJCWxpc3QucmVtb3ZlKHRheG9ub215KTsKLQkJCXNhdmVJbmRleCgpOwotCQkJLy8gVGhlIGlkZW50aWZpZWQgVGF4b25vbXkgbWF5IGJlIGVpdGhlciBhIGZ1bGwgbW9kZWwKLQkJCS8vIChpZS4gaW5saW5lZCBpbiB0aGUgSW5kZXgpIG9yIGEgcmVmZXJlbmNlIHRvIG9uZS4KLQkJCS8vIE9ubHkgaW4gdGhlIGxhdHRlciBjYXNlIGlzIHRoZXJlIGEgZmlsZSB0byBkZWxldGUuCi0JCQlpZiAoZGVsZXRlRG9jdW1lbnQgJiYgdGF4b25vbXkuZ2V0TG9jYXRpb24oKSAhPSBudWxsKQotCQkJewotCQkJCS8vVE9ETzogSW1wbGVtZW50IG1lLgotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgUmVnaXN0cnkgZnJvbSB0aGUgaW5kZXggd2hvc2UgSUQgb3IgUmVmZXJlbmNlCi0JICogbWF0Y2hlcyB0aGUgZ2l2ZW4gVVJJLiBBcyBzdWNoLCB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEKLQkgKiBmdWxsIG1vZGVsIG9yIGEgcmVmZXJlbmNlIHRvIGEgZnVsbCBtb2RlbC4KLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgUmVnaXN0cnkKLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gb2JqZWN0IHdob3NlIElEIG9yIHJlZmVyZW5jZQotCSAqIG1hdGNoZXMgdGhlIGdpdmVuIDxjb2RlPnVyaTwvY29kZT4sIG9yIG51bGwgaWYgbm9uZSBtYXRjaC4KLQkgKi8KLSAgICBwcml2YXRlIFJlZ2lzdHJ5IGdldFJlZ2lzdHJ5ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICAgewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRSZWdpc3RyeSgpOwkKLQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpewotCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSAoUmVnaXN0cnkpaXQubmV4dCgpOwotCQkJaWYgKHVyaS5lcXVhbHMocmVnaXN0cnkuZ2V0SWQoKSkgfHwgdXJpLmVxdWFscyhyZWdpc3RyeS5nZXRSZWYoKSkpewotCQkJCXJldHVybiByZWdpc3RyeTsgIAotCQkJfQotCQl9CQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgVGF4b25vbXkgZnJvbSB0aGUgaW5kZXggd2hvc2UgSUQgb3IgUmVmZXJlbmNlCi0JICogbWF0Y2hlcyB0aGUgZ2l2ZW4gVVJJLiBBcyBzdWNoLCB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEKLQkgKiBmdWxsIG1vZGVsIG9yIGEgcmVmZXJlbmNlIHRvIGEgZnVsbCBtb2RlbC4KLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgVGF4b25vbXkKLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gb2JqZWN0IHdob3NlIElEIG9yIHJlZmVyZW5jZQotCSAqIG1hdGNoZXMgdGhlIGdpdmVuIDxjb2RlPnVyaTwvY29kZT4sIG9yIG51bGwgaWYgbm9uZSBtYXRjaC4KLQkgKi8KLSAgICBwcml2YXRlIFRheG9ub215IGdldFRheG9ub215ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICAgewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRUYXhvbm9teSgpOwkKLQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpewotCQkJVGF4b25vbXkgdGF4b25vbXkgPSAoVGF4b25vbXkpaXQubmV4dCgpOwotCQkJaWYgKHVyaS5lcXVhbHModGF4b25vbXkuZ2V0SWQoKSkgfHwgdXJpLmVxdWFscyh0YXhvbm9teS5nZXRSZWYoKSkpewotCQkJCXJldHVybiB0YXhvbm9teTsKLQkJCX0KLQkJfQkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvUmVnaXN0cnlTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOGM4MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLS8qKgotICogUmVnaXN0cnlTZXJ2aWNlIGlzIHRoZSBzdGFydGluZyBjbGFzcyBvZiB0aGUgV2ViIHNlcnZpY2UgcmVnaXN0cnkKLSAqIHByb2dyYW1taW5nIG1vZGVsLiBDYWxsIHRoZSA8Y29kZT5SZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTwvY29kZT4KLSAqIHN0YXRpYyBtZXRob2QgdG8gZ2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAqIDxwPgotICogUmVnaXN0cnlTZXJ2aWNlIHByb3ZpZGVzIGZhY3RvcnkgbWV0aG9kcyBmb3IgZ2V0dGluZyBuZXcKLSAqIGluc3RhbmNlcyBvZiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBvYmplY3RzIHdoaWNoLAotICogaW4gdHVybiwgcHJvdmlkZSB0aGUgbWVhbnMgZm9yIHJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nCi0gKiBncm91cHMgb2YgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGFuZCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzCi0gKiBhdCBVUkwgYWRkcmVzc2FibGUgbG9jYXRpb25zIGluIHRoZSBmaWxlc3lzdGVtIG9yIGVsc2V3aGVyZS4KLSAqIDxwPgotICogUmVnaXN0cnlTZXJ2aWNlIHByb3ZpZGVzIHV0aWxpdHkgbWV0aG9kcyB0byBlYXNlIHRoZSBjcmVhdGlvbiwKLSAqIGxvYWRpbmcgYW5kIHNhdmluZyByYXcgaW5zdGFuY2VzIG9mIHRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4KLSAqIGFuZCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLCBhbmQgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YKLSAqIGNvbXBvc2luZyBhbmQgZmluZGluZyA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIGluCi0gKiA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWxzLgotICogPHA+Ci0gKiBBIHR5cGljYWwgdXNlIG9mIDxjb2RlPlJlZ2lzdHJ5U2VydmljZTwvY29kZT4gYW5kIGl0cyByZWxhdGVkCi0gKiBjbGFzc2VzIHRvIGNyZWF0ZSBhbmQgc2F2ZSBhIG5ldyBmYW1pbHkgb2YgbW9kZWxzIGlzOgotICogPGJsb2NrcXVvdGU+Ci0gKiA8Y29kZT4KLSAqIFJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLSAqIE15UmVnaXN0cnkgcmVnaXN0cnkgPSBNeVJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTXlSZWdpc3RyeSgpOwotICogLy8gYnVpbGQgdXAgeW91ciByZWdpc3RyeSBtb2RlbCBoZXJlCi0gKiBUYXhvbm9teSB0YXhvbm9teSA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotICogLy8gYnVpbGQgdXAgeW91ciB0YXhvbm9teSBtb2RlbCBoZXJlCi0gKiByZWdpc3RyeVNlcnZpY2UuYWRkVGF4b25vbXkocmVnaXN0cnksdGF4b25vbXkpOwotICogSVJlZ2lzdHJ5TWFuYWdlciByZWdpc3RyeU1hbmFnZXIgPSByZWdpc3RyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotICogcmVnaXN0cnlNYW5hZ2VyLnNhdmVSZWdpc3RyeShyZWdpc3RyeSk7Ci0gKiA8L2NvZGU+Ci0gKiA8L2Jsb2NrcXVvdGU+Ci0gKiBAc2VlICNpbnN0YW5jZSgpCi0gKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIKLSAqIEBzZWUgUmVnaXN0cnkKLSAqIEBzZWUgVGF4b25vbXkKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5U2VydmljZQotewotCXByaXZhdGUgc3RhdGljIFJlZ2lzdHJ5U2VydmljZSBpbnN0YW5jZV87Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSU5ERVhfWE1MX0ZJTEUgPSAiRGVmYXVsdEluZGV4LnhtbCI7Ci0JcHJpdmF0ZSBIYXNodGFibGUgcmVnaXN0cnlNYW5hZ2Vyc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JcHJpdmF0ZSBJUmVnaXN0cnlNYW5hZ2VyIGRlZmF1bHRSZWdpc3RyeU1hbmFnZXJfID0gbnVsbDsKLQlwcml2YXRlIEdlbmVyaWNSZXNvdXJjZUZhY3RvcnkgcmVzb3VyY2VGYWN0b3J5XyA9IG5ldyBHZW5lcmljUmVzb3VyY2VGYWN0b3J5KCk7Ci0KLQkvKioKLQkgKiBBIFJlZ2lzdHJ5U2VydmljZSBjYW5ub3QgYmUgZGlyZWN0bHkgY29uc3RydWN0ZWQuCi0JICogVXNlIEBsaW5rICNpbnN0YW5jZSgpIHRvIGdldCB0aGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHJpdmF0ZSBSZWdpc3RyeVNlcnZpY2UgKCkKLQl7Ci0JCVJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCJ4bWwiLHJlc291cmNlRmFjdG9yeV8pOwotCQlSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldENsYXNzKCk7Ci0JCVRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0Q2xhc3MoKTsKLQkJUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldENsYXNzKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICogQHJldHVybiBUaGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZWdpc3RyeVNlcnZpY2UgaW5zdGFuY2UgKCkKLQl7Ci0JCWlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLQkJewotCQkJaW5zdGFuY2VfID0gbmV3IFJlZ2lzdHJ5U2VydmljZSgpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZV87Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBkZWZhdWx0IDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGZvciB0aGUgc3lzdGVtLgotCSAqIEByZXR1cm4gVGhlIGRlZmF1bHQgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gZm9yIHRoZSBzeXN0ZW0uCi0JICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0JICovCi0JcHVibGljIElSZWdpc3RyeU1hbmFnZXIgZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlciAoKQotCXsKLQkJaWYgKGRlZmF1bHRSZWdpc3RyeU1hbmFnZXJfID09IG51bGwpCi0JCXsKLQkJCVN0cmluZyBpbmRleEZpbGVuYW1lID0gV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0YXRlTG9jYXRpb24oKS5hcHBlbmQoREVGQVVMVF9JTkRFWF9YTUxfRklMRSkudG9TdHJpbmcoKTsKLQkJCWRlZmF1bHRSZWdpc3RyeU1hbmFnZXJfID0gbmV3IFJlZ2lzdHJ5TWFuYWdlcihpbmRleEZpbGVuYW1lKTsKLQkJfQotCQlyZXR1cm4gZGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcl87Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBvciBleGlzdGluZyA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBmb3IgdGhlIGdpdmVuIFVSTC4KLQkgKiBAcGFyYW0gdXJsIEEgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdGhhdCBwZXJzaXN0cwotCSAqIHRoZSBzZXQgb2YgcmVnaXN0cmllcyBtYW5hZ2VkIGJ5IHRoaXMgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0JICogQHJldHVybiBUaGUgbmV3IG9yIGV4aXN0aW5nIDxjb2RlPlJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gZm9yIHRoZSBnaXZlbiBVUkwuCi0JICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0JICovCi0JcHVibGljIElSZWdpc3RyeU1hbmFnZXIgZ2V0UmVnaXN0cnlNYW5hZ2VyICggVVJMIHVybCApCi0JewotCQlJUmVnaXN0cnlNYW5hZ2VyIHJlZ2lzdHJ5TWFuYWdlciA9IChJUmVnaXN0cnlNYW5hZ2VyKXJlZ2lzdHJ5TWFuYWdlcnNfLmdldCh1cmwpOwotCQlpZiAocmVnaXN0cnlNYW5hZ2VyID09IG51bGwpCi0JCXsKLQkJCXJlZ2lzdHJ5TWFuYWdlciA9IG5ldyBSZWdpc3RyeU1hbmFnZXIodXJsKTsKLQkJCXJlZ2lzdHJ5TWFuYWdlcnNfLnB1dCh1cmwscmVnaXN0cnlNYW5hZ2VyKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlNYW5hZ2VyOwotCX0KLQkKLQkvKioKLQkgKiBSZW1vdmVzIHRoZSA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBmb3IgdGhlIGdpdmVuIFVSTC4KLQkgKiBObyBwaHlzaWNhbCByZXNvdXJjZXMgYXJlIGRlbGV0ZWQuCi0JICogQHBhcmFtIHVybCBBIFVSTCB0byB0aGUgWE1MIGRvY3VtZW50IHRoYXQgcGVyc2lzdHMKLQkgKiB0aGUgc2V0IG9mIHJlZ2lzdHJpZXMgbWFuYWdlZCBieSB0aGlzIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotCSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVJlZ2lzdHJ5TWFuYWdlciAoIFVSTCB1cmwgKQotCXsKLQkJcmVnaXN0cnlNYW5hZ2Vyc18ucmVtb3ZlKHVybCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwuCi0JICogQXMgYSBnZW5lcmFsIHJ1bGUsIHRoaXMgbWV0aG9kIGhhcyBsaXR0bGUgYWN0dWFsIHZhbHVlIGFzCi0JICogbW9zdCBjb25jcmV0ZSByZWdpc3RyeSBtb2RlbHMgd2lsbCBiZSBvZiB0eXBlcyB0aGF0IGV4dGVuZAotCSAqIHRoZSBiYXNlIFJlZ2lzdHJ5IG1vZGVsLCBzdWNoIGFzIDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4uCi0JICogRm9yIGV4YW1wbGUsIDxjb2RlPlVERElSZWdpc3RyeVNlcnZpY2UubmV3VURESVJlZ2lzdHJ5KCk8L2NvZGU+Ci0JICogcmV0dXJucyBhIG5ldyA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+LiBQcm92aWRlcnMgb2Ygb3RoZXIKLQkgKiBjb25jcmV0ZSB0eXBlcyBvZiByZWdpc3RyaWVzIG1heSBwcm92aWRlIHNpbWlsYXIgZmFjaWxpdGllcy4KLQkgKiBAcmV0dXJuIEEgbmV3IDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbC4gTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKiBAc2VlIFVERElSZWdpc3RyeVNlcnZpY2UjbmV3VURESVJlZ2lzdHJ5KCkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgbmV3UmVnaXN0cnkgKCkKLQl7Ci0JCXJldHVybiBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlZ2lzdHJ5KCk7Ci0JfQotCQotCS8qKgotCSAqIExvYWRzIHRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwgZnJvbSBhbiBYTUwgZG9jdW1lbnQuCi0JICogSWYgbG9hZGluZyB0aGUgbW9kZWwgb2YgYSByZWdpc3RyeSB0aGF0IGV4dGVuZHMgdGhlIGJhc2UKLQkgKiBSZWdpc3RyeSBpbnRlcmZhY2UgYW5kIFNjaGVtYSwgeW91IG11c3QgaW5pdGlhbGl6ZSB0aGUgRU1GCi0JICogZUNvcmUgcGFja2FnZSAoZWcuIDxjb2RlPk15UmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTwvY29kZT4KLQkgKiBmb3IgeW91ciBtb2RlbCBiZWZvcmUgY2FsbGluZyB0aGlzIGxvYWQgbWV0aG9kLgotCSAqIEZvciBVRERJIFJlZ2lzdHJ5IG1vZGVscywgdGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkKLQkgKiBjYWxsaW5nIDxjb2RlPlVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTwvY29kZT4uCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdG8gbG9hZC4KLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwuCi0JICogQHRocm93cyA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBJZiB0aGUgbW9kZWwgY2Fubm90IGJlIGxvYWRlZC4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICogQHNlZSBVRERJUmVnaXN0cnlTZXJ2aWNlI2luc3RhbmNlKCkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgbG9hZFJlZ2lzdHJ5ICggVVJMIHVybCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeV8uY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi54bWwiKSk7Ci0JCXRyeQotCQl7Ci0JCQlyZXNvdXJjZS5sb2FkKGdldElucHV0U3RyZWFtRm9yKHVybCksbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJfQotCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCBkb2N1bWVudCA9IChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdClyZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsKLQkJcmV0dXJuIGRvY3VtZW50LmdldFJlZ2lzdHJ5KCk7Ci0JfQotCi0JLyoqCi0JICogU2F2ZXMgdGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCB0byBhbiBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdG8gc2F2ZS4KLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCB0byBzYXZlLgotCSAqIEB0aHJvd3MgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gSWYgdGhlIG1vZGVsIGNhbm5vdCBiZSBzYXZlZC4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICovCi0JcHVibGljIHZvaWQgc2F2ZVJlZ2lzdHJ5ICggVVJMIHVybCwgUmVnaXN0cnkgcmVnaXN0cnkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QgZG9jdW1lbnQgPSBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQlkb2N1bWVudC5zZXRSZWdpc3RyeShyZWdpc3RyeSk7Ci0JCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZG9jdW1lbnQpOwotCQl0cnkKLQkJewotCQkJcmVzb3VyY2Uuc2F2ZShnZXRPdXRwdXRTdHJlYW1Gb3IodXJsKSxudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsZSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwuCi0JICogQHJldHVybiBBIG5ldyA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwuIE5ldmVyIHJldHVybnMgbnVsbC4KLQkgKiBAc2VlIFRheG9ub215Ci0JICovCi0JcHVibGljIFRheG9ub215IG5ld1RheG9ub215ICgpCi0JewotCQlyZXR1cm4gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUYXhvbm9teSgpOwotCX0KLQkKLQkvKioKLQkgKiBMb2FkcyB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIGZyb20gYW4gWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB0aGUgWE1MIGRvY3VtZW50IHRvIGxvYWQuCi0JICogQHJldHVybiB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsLgotCSAqIEB0aHJvd3MgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gSWYgdGhlIG1vZGVsIGNhbm5vdCBiZSBsb2FkZWQuCi0JICogQHNlZSBUYXhvbm9teQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBsb2FkVGF4b25vbXkgKCBVUkwgdXJsICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJdHJ5Ci0JCXsKLQkJCXJlc291cmNlLmxvYWQoZ2V0SW5wdXRTdHJlYW1Gb3IodXJsKSxudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsZSkpOwotCQl9Ci0JCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290IGRvY3VtZW50ID0gKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290KXJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOwotCQlyZXR1cm4gZG9jdW1lbnQuZ2V0VGF4b25vbXkoKTsKLQl9Ci0KLQkvKioKLQkgKiBTYXZlcyB0aGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIHRvIGFuIFhNTCBkb2N1bWVudC4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gdGhlIFhNTCBkb2N1bWVudCB0byBzYXZlLgotCSAqIEBwYXJhbSB0YXhvbm9teSBUaGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIHRvIHNhdmUuCi0JICogQHRocm93cyA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBJZiB0aGUgbW9kZWwgY2Fubm90IGJlIHNhdmVkLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzYXZlVGF4b25vbXkgKCBVUkwgdXJsLCBUYXhvbm9teSB0YXhvbm9teSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCBkb2N1bWVudCA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCWRvY3VtZW50LnNldFRheG9ub215KHRheG9ub215KTsKLQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnlfLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioueG1sIikpOwotCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkb2N1bWVudCk7Ci0JCXRyeQotCQl7Ci0JCQlyZXNvdXJjZS5zYXZlKGdldE91dHB1dFN0cmVhbUZvcih1cmwpLG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixlKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgbmV3IFJlZ2lzdHJ5IG1vZGVsIGNvbmZpZ3VyZWQKLQkgKiB0byByZWZlcmVuY2UgdGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPi4KLQkgKiA8cD4KLQkgKiBUaGUgZ2l2ZW4gPGNvZGU+cmVnaXN0cnk8L2NvZGU+IGNhbiBiZSBlaXRoZXIgYSBmdWxsCi0JICogbW9kZWwgYXMgc2lnbmlmaWVkIGJ5IGhhdmluZyBhIG5vbi1udWxsLCBub24tZW1wdHkKLQkgKiBpZGVudGlmaWVyICg8Y29kZT5yZWdpc3RyeS5nZXRJZCgpPC9jb2RlPiksIG9yIGEKLQkgKiByZWZlcmVuY2UgaXRzZWxmIGFzIHNpZ25pZmllZCBieSBoYXZpbmcgYSBub24tbnVsbCwKLQkgKiBub24tZW1wdHkgcmVmZXJlbmNlICg8Y29kZT5yZWdpc3RyeS5nZXRSZWYoKTwvY29kZT4pLgotCSAqIDxwPgotCSAqIElmIHRoZSBnaXZlbiA8Y29kZT5yZWdpc3RyeTwvY29kZT4gaXMgYSBmdWxsIG1vZGVsLAotCSAqIHRoZW4gYSBuZXcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGlzIHJldHVybmVkIHN1Y2ggdGhhdAotCSAqIDx1bD4KLQkgKiA8bGk+PGNvZGU+Z2V0UmVmKCk8L2NvZGU+IGVxdWFscyA8Y29kZT5yZWdpc3RyeS5nZXRJZCgpPC9jb2RlPjwvbGk+Ci0JICogPGxpPjxjb2RlPmdldExvY2F0aW9uKCk8L2NvZGU+IGlzIG51bGw8L2xpPgotCSAqIDxsaT48Y29kZT5nZXRJZCgpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8L3VsPgotCSAqIDxwPgotCSAqIEluIHRoZSBnaXZlbiA8Y29kZT5yZWdpc3RyeTwvY29kZT4gaXMgaXRzZWxmIGEgcmVmZXJlbmNlLAotCSAqIHRoZW4gYSBuZXcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGlzIHJldHVybmVkIHN1Y2ggdGhhdAotCSAqIDx1bD4KLQkgKiA8bGk+PGNvZGU+Z2V0UmVmKCk8L2NvZGU+IGVxdWFscyA8Y29kZT5yZWdpc3RyeS5nZXRSZWYoKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRMb2NhdGlvbigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+cmVnaXN0cnkuZ2V0TG9jYXRpb24oKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRJZCgpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8L3VsPgotCSAqIAotCSAqIEBwYXJhbSByZWdpc3RyeSBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsIHRvIGNsb25lIG9yCi0JICogcmVmZXIgdG8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPgotCSAqIGlzIGEgZnVsbCBtb2RlbCBvciBhIHJlZmVyZW5jZS4KLQkgKiBAcmV0dXJuIEEgbmV3IDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiwgZ3VhcmFudGVlZCB0byBiZSBhIHJlZmVyZW5jZS4KLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgbmV3UmVnaXN0cnlSZWZlcmVuY2UgKCBSZWdpc3RyeSByZWdpc3RyeSApCi0JewotCQlTdHJpbmcgaWQgPSByZWdpc3RyeS5nZXRJZCgpOwotCQlTdHJpbmcgcmVmID0gcmVnaXN0cnkuZ2V0UmVmKCk7Ci0JCVJlZ2lzdHJ5IHJlZ2lzdHJ5UmVmID0gbmV3UmVnaXN0cnkoKTsKLQkJaWYgKHJlZiA9PSBudWxsIHx8ICIiLmVxdWFscyhyZWYpKQotCQl7Ci0JCQlyZWdpc3RyeVJlZi5zZXRSZWYoaWQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcmVnaXN0cnlSZWYuc2V0UmVmKHJlZik7Ci0JCQlyZWdpc3RyeVJlZi5zZXRMb2NhdGlvbihyZWdpc3RyeS5nZXRMb2NhdGlvbigpKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlSZWY7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIG5ldyBUYXhvbm9teSBtb2RlbCBjb25maWd1cmVkCi0JICogdG8gcmVmZXJlbmNlIHRoZSBnaXZlbiA8Y29kZT50YXhvbm9teTwvY29kZT4uCi0JICogPHA+Ci0JICogVGhlIGdpdmVuIDxjb2RlPnRheG9ub215PC9jb2RlPiBjYW4gYmUgZWl0aGVyIGEgZnVsbAotCSAqIG1vZGVsIGFzIHNpZ25pZmllZCBieSBoYXZpbmcgYSBub24tbnVsbCwgbm9uLWVtcHR5Ci0JICogaWRlbnRpZmllciAoPGNvZGU+dGF4b25vbXkuZ2V0SWQoKTwvY29kZT4pLCBvciBhCi0JICogcmVmZXJlbmNlIGl0c2VsZiBhcyBzaWduaWZpZWQgYnkgaGF2aW5nIGEgbm9uLW51bGwsCi0JICogbm9uLWVtcHR5IHJlZmVyZW5jZSAoPGNvZGU+dGF4b25vbXkuZ2V0UmVmKCk8L2NvZGU+KS4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgZ2l2ZW4gPGNvZGU+dGF4b25vbXk8L2NvZGU+IGlzIGEgZnVsbCBtb2RlbCwKLQkgKiB0aGVuIGEgbmV3IDxjb2RlPlRheG9ub215PC9jb2RlPiBpcyByZXR1cm5lZCBzdWNoIHRoYXQKLQkgKiA8dWw+Ci0JICogPGxpPjxjb2RlPmdldFJlZigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+dGF4b25vbXkuZ2V0SWQoKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRMb2NhdGlvbigpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0SWQoKTwvY29kZT4gaXMgbnVsbDwvbGk+Ci0JICogPC91bD4KLQkgKiA8cD4KLQkgKiBJbiB0aGUgZ2l2ZW4gPGNvZGU+dGF4b25vbXk8L2NvZGU+IGlzIGl0c2VsZiBhIHJlZmVyZW5jZSwKLQkgKiB0aGVuIGEgbmV3IDxjb2RlPlRheG9ub215PC9jb2RlPiBpcyByZXR1cm5lZCBzdWNoIHRoYXQKLQkgKiA8dWw+Ci0JICogPGxpPjxjb2RlPmdldFJlZigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+dGF4b25vbXkuZ2V0UmVmKCk8L2NvZGU+PC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0TG9jYXRpb24oKTwvY29kZT4gZXF1YWxzIDxjb2RlPnRheG9ub215LmdldExvY2F0aW9uKCk8L2NvZGU+PC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0SWQoKTwvY29kZT4gaXMgbnVsbDwvbGk+Ci0JICogPC91bD4KLQkgKiAKLQkgKiBAcGFyYW0gdGF4b25vbXkgVGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCB0byBjbG9uZSBvcgotCSAqIHJlZmVyIHRvIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBnaXZlbiA8Y29kZT50YXhvbm9teTwvY29kZT4KLQkgKiBpcyBhIGZ1bGwgbW9kZWwgb3IgYSByZWZlcmVuY2UuCi0JICogQHJldHVybiBBIG5ldyA8Y29kZT5UYXhvbm9teTwvY29kZT4sIGd1YXJhbnRlZWQgdG8gYmUgYSByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIFRheG9ub215IG5ld1RheG9ub215UmVmZXJlbmNlICggVGF4b25vbXkgdGF4b25vbXkgKQotCXsKLQkJU3RyaW5nIGlkID0gdGF4b25vbXkuZ2V0SWQoKTsKLQkJU3RyaW5nIHJlZiA9IHRheG9ub215LmdldFJlZigpOwotCQlUYXhvbm9teSB0YXhvbm9teVJlZiA9IG5ld1RheG9ub215KCk7Ci0JCWlmIChyZWYgPT0gbnVsbCB8fCAiIi5lcXVhbHMocmVmKSkKLQkJewotCQkJdGF4b25vbXlSZWYuc2V0UmVmKGlkKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXRheG9ub215UmVmLnNldFJlZihyZWYpOwotCQkJdGF4b25vbXlSZWYuc2V0TG9jYXRpb24odGF4b25vbXkuZ2V0TG9jYXRpb24oKSk7Ci0JCX0KLQkJcmV0dXJuIHRheG9ub215UmVmOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gVVJMIGlkZW50aWZpZXMKLQkgKiBhIHJlc291cmNlIHRoYXQgZXhpc3RzIGFuZCBpcyBhIGZpbGUuCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIG9mIHRoZSByZXNvdXJjZSB0byBjaGVjayBmb3IgZXhpc3RlbmNlLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgVVJMIHJlc291cmNlIGV4aXN0cyBhbmQgaXMgYSBmaWxlLAotCSAqIG9yIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlzdGF0aWMgYm9vbGVhbiBleGlzdHMgKCBVUkwgdXJsICkKLQl7Ci0JCWlmICgicGxhdGZvcm0iLmVxdWFscyh1cmwuZ2V0UHJvdG9jb2woKSkpCi0JCXsKLQkJCVN0cmluZyB1cmxGaWxlID0gdXJsLmdldEZpbGUoKS50cmltKCk7Ci0JCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgodXJsRmlsZSkucmVtb3ZlRmlyc3RTZWdtZW50cygxKTsKLQkJCWlmIChwYXRoLnNlZ21lbnRDb3VudCgpIDw9IDEpCi0JCQl7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJSVBhdGggb3NQYXRoID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpLmdldExvY2F0aW9uKCk7Ci0JCQlpZiAob3NQYXRoID09IG51bGwpCi0JCQl7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUob3NQYXRoLnRvU3RyaW5nKCkpOwotCQkJcmV0dXJuIChmaWxlLmV4aXN0cygpICYmICFmaWxlLmlzRGlyZWN0b3J5KCkpOwotCQl9Ci0JCWVsc2UgaWYgKCJmaWxlIi5lcXVhbHModXJsLmdldFByb3RvY29sKCkpKQotCQl7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSh1cmwuZ2V0RmlsZSgpLnRyaW0oKSk7Ci0JCQlyZXR1cm4gKGZpbGUuZXhpc3RzKCkgJiYgIWZpbGUuaXNEaXJlY3RvcnkoKSk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIE9wZW5zIGFuIDxjb2RlPk91dHB1dFN0cmVhbTwvY29kZT4gZm9yIHdyaXRpbmcgdG8KLQkgKiB0aGUgZ2l2ZW4gPGNvZGU+dXJsPC9jb2RlPi4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlIHRvIHdyaXRlLgotCSAqIEByZXR1cm4gQW4gT3VwdHV0U3RyZWFtIHRvIHdyaXRlIHRvLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgdGhlIHN0cmVhbSBjb3VsZCBub3QgYmUgb3BlbmVkLgotCSAqLwotCXN0YXRpYyBPdXRwdXRTdHJlYW0gZ2V0T3V0cHV0U3RyZWFtRm9yICggVVJMIHVybCApIHRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IG51bGw7Ci0JCWlmICgicGxhdGZvcm0iLmVxdWFscyh1cmwuZ2V0UHJvdG9jb2woKSkpCi0JCXsKLQkJCVN0cmluZyB1cmxGaWxlID0gdXJsLmdldEZpbGUoKS50cmltKCk7Ci0JCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgodXJsRmlsZSkucmVtb3ZlRmlyc3RTZWdtZW50cygxKTsKLQkJCWlmIChwYXRoLnNlZ21lbnRDb3VudCgpIDw9IDEpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJUaGUgUGxhdGZvcm0gVVJMIHswfSBpcyBub3QgYm91bmQgdG8gYSBsb2NhbCwgd3JpdGFibGUgZmlsZS4iKTsKLQkJCX0KLQkJCUlQYXRoIG9zUGF0aCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKS5nZXRMb2NhdGlvbigpOwotCQkJaWYgKG9zUGF0aCA9PSBudWxsKQotCQkJewotCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiVGhlIFBsYXRmb3JtIFVSTCB7MH0gaXMgbm90IGJvdW5kIHRvIGEgbG9jYWwsIHdyaXRhYmxlIGZpbGUuIik7Ci0JCQl9Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShvc1BhdGgudG9TdHJpbmcoKSk7Ci0JCQlpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKQotCQkJewotCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiVGhlIFBsYXRmb3JtIFVSTCB7MH0gaXMgYm91bmQgdG8gYSBmb2xkZXIuIik7Ci0JCQl9Ci0JCQlvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKLQkJfQotCQllbHNlIGlmICgiZmlsZSIuZXF1YWxzKHVybC5nZXRQcm90b2NvbCgpKSkKLQkJewotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUodXJsLmdldEZpbGUoKS50cmltKCkpOwotCQkJaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSkKLQkJCXsKLQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlRoZSBGaWxlIFVSTCB7MH0gaXMgYm91bmQgdG8gYSBkaXJlY3RvcnkuIik7Ci0JCQl9Ci0JCQlvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCVVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQkJY29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKLQkJCW91dHB1dFN0cmVhbSA9IGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCX0KLQkJcmV0dXJuIG91dHB1dFN0cmVhbTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVucyBhbiA8Y29kZT5JbnB1dFN0cmVhbTwvY29kZT4gZm9yIHJlYWRpbmcgZnJvbQotCSAqIHRoZSBnaXZlbiA8Y29kZT51cmw8L2NvZGU+LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UgdG8gcmVhZC4KLQkgKiBAcmV0dXJuIEFuIElucHV0U3RyZWFtIHRvIHJlYWQgZnJvbS4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIHRoZSBzdHJlYW0gY291bGQgbm90IGJlIG9wZW5lZC4KLQkgKi8KLQlzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0SW5wdXRTdHJlYW1Gb3IgKCBVUkwgdXJsICkgdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gdXJsLm9wZW5TdHJlYW0oKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElSZWdpc3RyeVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvVURESVJlZ2lzdHJ5U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjNjYTFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvVURESVJlZ2lzdHJ5U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotLyoqCi0gKiBVRERJUmVnaXN0cnlTZXJ2aWNlIGlzIGFuIGFkanVuY3QgdG8gPGNvZGU+UmVnaXN0cnlTZXJ2aWNlPC9jb2RlPi4KLSAqIENhbGwgdGhlIDxjb2RlPlJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpPC9jb2RlPiBzdGF0aWMgbWV0aG9kIHRvCi0gKiBnZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICogPHA+Ci0gKiBVRERJUmVnaXN0cnlTZXJ2aWNlIHByb3ZpZGVzIHV0aWxpdHkgbWV0aG9kcyB0byBlYXNlIHRoZSBjcmVhdGlvbgotICogb2YgbmV3IDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gbW9kZWxzIGFuZCB0aGUgbWFuYWdlbWVudCBvZiB0aGVpcgotICogcmVsYXRpb25zaGlwcyB0byA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLgotICogPHA+Ci0gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIGxvYWRpbmcgYW5kIHNhdmluZyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gYW5kCi0gKiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIGFyZSBvbiA8Y29kZT5SZWdpc3RyeVNlcnZpY2U8L2NvZGU+LgotICogTWV0aG9kcyBmb3IgbWFuYWdpbmcgYW4gaW5kZXhlZCBmYW1pbHkgb2YgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGFuZAotICogPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyBhcmUgb24gPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0gKiA8cD4KLSAqIEEgdHlwaWNhbCB1c2Ugb2YgPGNvZGU+VURESVJlZ2lzdHJ5U2VydmljZTwvY29kZT4gYW5kIGl0cyByZWxhdGVkCi0gKiBjbGFzc2VzIHRvIGNyZWF0ZSBhbmQgc2F2ZSBhIG5ldyBmYW1pbHkgb2YgbW9kZWxzIGlzOgotICogPGJsb2NrcXVvdGU+Ci0gKiA8Y29kZT4KLSAqIFJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLSAqIFVERElSZWdpc3RyeVNlcnZpY2UgdWRkaVJlZ2lzdHJ5U2VydmljZSA9IFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLSAqIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSB1ZGRpUmVnaXN0cnlTZXJ2aWNlLm5ld1VERElSZWdpc3RyeSgpOwotICogLy8gYnVpbGQgdXAgeW91ciByZWdpc3RyeSBtb2RlbCBoZXJlCi0gKiBUYXhvbm9teSB0YXhvbm9teSA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotICogLy8gYnVpbGQgdXAgeW91ciB0YXhvbm9teSBtb2RlbCBoZXJlCi0gKiB1ZGRpUmVnaXN0cnlTZXJ2aWNlLmFkZFRheG9ub215KHVkZGlSZWdpc3RyeSx0YXhvbm9teSk7Ci0gKiBJUmVnaXN0cnlNYW5hZ2VyIHJlZ2lzdHJ5TWFuYWdlciA9IHJlZ2lzdHJ5U2VydmljZS5nZXREZWZhdWx0UmVnaXN0cnlNYW5hZ2VyKCk7Ci0gKiByZWdpc3RyeU1hbmFnZXIuc2F2ZVJlZ2lzdHJ5KHVkZGlSZWdpc3RyeSk7Ci0gKiA8L2NvZGU+Ci0gKiA8L2Jsb2NrcXVvdGU+Ci0gKiBAc2VlICNpbnN0YW5jZSgpCi0gKiBAc2VlIFJlZ2lzdHJ5U2VydmljZQotICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0gKiBAc2VlIFVERElSZWdpc3RyeQotICogQHNlZSBUYXhvbm9teQotICogQGF1dGhvciBjYnJlYWxleQotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5U2VydmljZQotewotCXByaXZhdGUgc3RhdGljIFVERElSZWdpc3RyeVNlcnZpY2UgaW5zdGFuY2VfOwotCi0JLyoqCi0JICogQSBVRERJUmVnaXN0cnlTZXJ2aWNlIGNhbm5vdCBiZSBkaXJlY3RseSBjb25zdHJ1Y3RlZC4KLQkgKiBVc2UgQGxpbmsgI2luc3RhbmNlKCkgdG8gZ2V0IHRoZSBzaW5nbGV0b24gb2YgdGhpcyBjbGFzcy4KLQkgKi8KLQlwcml2YXRlIFVERElSZWdpc3RyeVNlcnZpY2UgKCkKLQl7Ci0JCVVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldENsYXNzKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICogQHJldHVybiBUaGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHVibGljIHN0YXRpYyBVRERJUmVnaXN0cnlTZXJ2aWNlIGluc3RhbmNlICgpCi0JewotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpCi0JCXsKLQkJCWluc3RhbmNlXyA9IG5ldyBVRERJUmVnaXN0cnlTZXJ2aWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlXzsKLQl9Ci0JCi0JLyoqCi0JICogQWRkcyBhIHJlZmVyZW5jZSBmcm9tIHRoZSBnaXZlbiA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+Ci0JICogdG8gdGhlIGdpdmVuIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3QuCi0JICogQHBhcmFtIHVkZGlSZWdpc3RyeSBUaGUgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPiB0byB3aGljaCB0aGUgcmVmZXJlbmNlCi0JICogdG8gdGhlIGdpdmVuIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3Qgc2hvdWxkIGJlIGFkZGVkLgotCSAqIEBwYXJhbSB0YXhvbm9teSBUaGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdCB0byBhZGQuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW92ZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUYXhvbm9teSAoIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnksIFRheG9ub215IHRheG9ub215ICkKLQl7Ci0JCWFkZFRheG9ub21pZXModWRkaVJlZ2lzdHJ5LG5ldyBUYXhvbm9teVtdIHt0YXhvbm9teX0pOwotCX0KLQotCS8qKgotCSAqIEFkZHMgdGhlIGdpdmVuIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3RzIGFzLWlzCi0JICogKHdoZXRoZXIgdGhleSBhcmUgcmVmZXJlbmNlcyBvciBmdWxsIG1vZGVscykKLQkgKiB0byB0aGUgZ2l2ZW4gPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPi4KLQkgKiBAcGFyYW0gdWRkaVJlZ2lzdHJ5IFRoZSA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+IHRvIHdoaWNoCi0JICogdGhlIGdpdmVuIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3RzIHNob3VsZCBiZSBhZGRlZC4KLQkgKiBAcGFyYW0gdGF4b25vbWllcyBUaGUgYXJyYXkgb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdHMgdG8gYWRkLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vdmVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215Ci0JICovCi0JcHVibGljIHZvaWQgYWRkVGF4b25vbWllcyAoIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnksIFRheG9ub215W10gdGF4b25vbWllcyApCi0JewotCQlpZiAodGF4b25vbWllcy5sZW5ndGggPiAwKQotCQl7Ci0JCQlUYXhvbm9taWVzIHRheG9ub215U2V0ID0gdWRkaVJlZ2lzdHJ5LmdldFRheG9ub21pZXMoKTsKLQkJCWlmICh0YXhvbm9teVNldCA9PSBudWxsKQotCQkJewotCQkJCXRheG9ub215U2V0ID0gVURESVJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVGF4b25vbWllcygpOwotCQkJCXVkZGlSZWdpc3RyeS5zZXRUYXhvbm9taWVzKHRheG9ub215U2V0KTsKLQkJCX0KLQkJCUVMaXN0IGxpc3QgPSB0YXhvbm9teVNldC5nZXRUYXhvbm9teSgpOwotCQkJZm9yIChpbnQgaT0wOyBpPHRheG9ub21pZXMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJbGlzdC5hZGQodGF4b25vbWllc1tpXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBVUkkgaWRlbnRpZmllcnMgdG8gPGNvZGU+VGF4b25vbXk8L2NvZGU+Ci0JICogbW9kZWxzIGNvbnRhaW5lZCBpbiBvciByZWZlcmVuY2VkIGJ5IHRoZSA8Y29kZT51ZGRpUmVnaXN0cnk8L2NvZGU+LgotCSAqIFBhc3NpbmcgdGhlIHJlc3VsdCB0byA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKCk8L2NvZGU+Ci0JICogaXMgYSBoYW5keSB3YXkgdG8gcmVzb2x2ZSBhbmQgbG9hZCB0aGUgZnVsbCB0YXhvbm9teSBtb2RlbHMgdXNlZAotCSAqIGJ5IHRoZSBVRERJIHJlZ2lzdHJ5LgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzLCBwb3NzaWJseSBlbXB0eSBidXQgbmV2ZXIgbnVsbCwKLQkgKiB0byA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIjbG9hZFRheG9ub21pZXMoU3RyaW5nW10pCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFRheG9ub215VVJJcyAoIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgKQotCXsKLQkJVGF4b25vbWllcyB0YXhvbm9taWVzID0gdWRkaVJlZ2lzdHJ5LmdldFRheG9ub21pZXMoKTsKLQkJaWYgKHRheG9ub21pZXMgPT0gbnVsbCkgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0JCUVMaXN0IHRheG9ub215TGlzdCA9IHRheG9ub21pZXMuZ2V0VGF4b25vbXkoKTsKLQkJTGlzdCB0YXhvbm9teVVSSXMgPSBuZXcgQXJyYXlMaXN0KHRheG9ub215TGlzdC5zaXplKCkpOwotCQlJdGVyYXRvciBpID0gdGF4b25vbXlMaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJVGF4b25vbXkgdGF4b25vbXkgPSAoVGF4b25vbXkpaS5uZXh0KCk7Ci0JCQlpZiAodGF4b25vbXkuZ2V0SWQoKSAhPSBudWxsKQotCQkJewotCQkJCXRheG9ub215VVJJcy5hZGQodGF4b25vbXkuZ2V0SWQoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmICh0YXhvbm9teS5nZXRSZWYoKSAhPSBudWxsKQotCQkJewotCQkJCXRheG9ub215VVJJcy5hZGQodGF4b25vbXkuZ2V0UmVmKCkpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoU3RyaW5nW10pdGF4b25vbXlVUklzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBmdWxsIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMKLQkgKiBjb250YWluZWQgaW4gb3IgcmVmZXJlbmNlZCBieSB0aGUgZ2l2ZW4gPGNvZGU+dWRkaVJlZ2lzdHJ5PC9jb2RlPi4KLQkgKiBJbmxpbmUgdGF4b25vbWllcyBhcmUgcmV0dXJuZWQgYXMtaXMuIFJlZmVyZW5jZXMgdG8gdGF4b25vbWllcyBhcmUKLQkgKiByZXNvbHZlZCBieSBmb2xsb3dpbmcgdGhlIGxvY2F0aW9ucyBvZiB0aGUgcmVmZXJlbmNlcyBhbmQgbG9hZGluZwotCSAqIHRoZSBtb2RlbHMgYXQgdGhlIGxvY2F0aW9uIFVSTHMuCi0JICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLCBidXQgbWF5IHJldHVybiBhbiBlbXB0eSBhcnJheS4KLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gd2hvc2UKLQkgKiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIHRvIGZpbmQuCi0JICogQHJldHVybiBUaGUgYXJyYXksIG5ldmVyIG51bGwgYnV0IHBvc3NpYmx5IGxlbmd0aCB6ZXJvLAotCSAqIG9mIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW92ZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLQkgKiBAc2VlICNnZXRUYXhvbm9teVVSSXMoVURESVJlZ2lzdHJ5KQotCSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlciNsb2FkVGF4b25vbWllcyhTdHJpbmdbXSkKLQkgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBzdWZmZXJzIGZyb20gYSBsYWNrIG9mIGF3YXJlbmVzcyBvZiB0aGUKLQkgKiBJbmRleCBYTUwgZG9jdW1lbnQgdGhhdCBpcyBvZnRlbiByZXNwb25zaWJsZSBmb3IgbWFwcGluZyBVUklzCi0JICogdG8gbG9jYXRpb24gVVJMcy4gVXNlCi0JICogPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlci5sb2FkVGF4b25vbWllcyhnZXRUYXhvbm9teVVSSXModWRkaVJlZ2lzdHJ5KSk8L2NvZGU+Ci0JICogaW5zdGVhZC4KLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlbXSBnZXRUYXhvbm9taWVzICggVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCVRheG9ub21pZXMgdGF4b25vbWllcyA9IHVkZGlSZWdpc3RyeS5nZXRUYXhvbm9taWVzKCk7Ci0JCWlmICh0YXhvbm9taWVzID09IG51bGwpIHJldHVybiBuZXcgVGF4b25vbXlbMF07Ci0JCUVMaXN0IGxpdGVyYWxUYXhvbm9teUxpc3QgPSB0YXhvbm9taWVzLmdldFRheG9ub215KCk7Ci0JCUxpc3QgcmVzb2x2ZWRUYXhvbm9teUxpc3QgPSBuZXcgQXJyYXlMaXN0KGxpdGVyYWxUYXhvbm9teUxpc3Quc2l6ZSgpKTsKLQkJSXRlcmF0b3IgaSA9IGxpdGVyYWxUYXhvbm9teUxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlUYXhvbm9teSBsaXRlcmFsVGF4b25vbXkgPSAoVGF4b25vbXkpaS5uZXh0KCk7Ci0JCQlpZiAobGl0ZXJhbFRheG9ub215LmdldElkKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlyZXNvbHZlZFRheG9ub215TGlzdC5hZGQobGl0ZXJhbFRheG9ub215KTsKLQkJCX0KLQkJCWVsc2UgaWYgKGxpdGVyYWxUYXhvbm9teS5nZXRMb2NhdGlvbigpICE9IG51bGwpCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlUYXhvbm9teSByZXNvbHZlZFRheG9ub215ID0gcmVnaXN0cnlTZXJ2aWNlLmxvYWRUYXhvbm9teShuZXcgVVJMKGxpdGVyYWxUYXhvbm9teS5nZXRMb2NhdGlvbigpKSk7Ci0JCQkJCXJlc29sdmVkVGF4b25vbXlMaXN0LmFkZChyZXNvbHZlZFRheG9ub215KTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCQkJCXsKLQkJCQkJLy9UT0RPOiBOZWVkIG1lc3NhZ2UgdGV4dCBoZXJlCi0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgV1NQbHVnaW4uSUQsIDAsICIiLCBlKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiAoVGF4b25vbXlbXSlyZXNvbHZlZFRheG9ub215TGlzdC50b0FycmF5KG5ldyBUYXhvbm9teVswXSk7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPiBtb2RlbC4KLQkgKiBAcmV0dXJuIEEgbmV3IDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gbW9kZWwsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeSBuZXdVRERJUmVnaXN0cnkgKCkKLQl7Ci0JCXJldHVybiBVRERJUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVRERJUmVnaXN0cnkoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElUYXhvbm9teUZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9VRERJVGF4b25vbXlGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ0Y2U4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElUYXhvbm9teUZpbmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci0KLS8qKgotICogVGhpcyA8Y29kZT5JVGF4b25vbXlGaW5kZXI8L2NvZGU+IGZvciBVRERJIHJlZ2lzdHJpZXMKLSAqIHJldHVybnMgYW4gYXJyYXkgb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+Ci0gKiBtb2RlbHMgdXNlZCAoc3VwcG9ydGVkIGJ5KSB0aGUgcmVnaXN0cnkuCi0gKiBAYXV0aG9yIGdpbGJlcnRhQGNhLmlibS5jb20KLSAqIEBzZWUgVURESVJlZ2lzdHJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBVRERJVGF4b25vbXlGaW5kZXIgaW1wbGVtZW50cyBJVGF4b25vbXlGaW5kZXIKLXsKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVRheG9ub215RmluZGVyI3RheG9ub21pZXMob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlbXSB0YXhvbm9taWVzICggUmVnaXN0cnkgcmVnaXN0cnkgKQotCXsKLQkJaWYgKCByZWdpc3RyeSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeSApCi0JCXsKLQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSAoVURESVJlZ2lzdHJ5KXJlZ2lzdHJ5OwkgIAotCQkJcmV0dXJuIChUYXhvbm9teVtdKXVkZGlSZWdpc3RyeS5nZXRUYXhvbm9taWVzKCkuZ2V0VGF4b25vbXkoKS50b0FycmF5KG5ldyBUYXhvbm9teVswXSk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1VuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1VuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWM4MmI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MjUgICAxMzU1NzAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gVVJMIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgb24gZmlyc3QgcGFnZQotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcyAKLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDQxMSAgIDIyNjc2NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyIGRvZXMgbm90IGhhbmRsZSBwYXRocyB3LyBzcGFjZXMgdGhhdCBhcmUgZW5jb2RlZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotCi0vKioKLSAqIDxwPkEgdXRpbGl0eSBjbGFzcyBmb3IgdHJhbnNmb3JtaW5nIGEgcGF0aCB0byBhbmQgZnJvbSB0aGUgZm9sbG93aW5nIGZvcm1hdHM6PC9wPgotICogPHVsPgotICogPGxpPkFuIGFic29sdXRlIGVjbGlwc2UgcGF0aCAoaS5lLiBzdGFydHMgd2l0aCAvUHJvamVjdE5hbWUvLi4uKTwvbGk+Ci0gKiA8bGk+QW4gYWJzb2x1dGUgZmlsZXN5c3RlbSBVUkkgcGF0aCAoaS5lLiBmaWxlOi9DOi9NeVdvcmtzcGFjZS9Qcm9qZWN0TmFtZS8uLi4pPC9saT4KLSAqIDxsaT5BIHBsYXRmb3JtIFVSSSBwYXRoIChpLmUuIHBsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0TmFtZS8uLi4pPC9saT4gCi0gKiA8L3VsPiAKLSAqIDxwPkluIGFsbCBjYXNlcywgaWYgdGhlIHRyYW5zZm9ybWVyIGNvdWxkIG5vdCBjb252ZXJ0IHRoZSBwYXRoLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuPC9wPgotICovCi1wdWJsaWMgY2xhc3MgVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyIHsKLQkKLQkvKioKLQkgKiBQcmVmaXggb2YgcGxhdGZvcm0gVVJJcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTEFURk9STV9QUkVGSVggPSAicGxhdGZvcm06L3Jlc291cmNlLyI7Ci0JCi0JLyoqCi0JICogUHJlZml4IG9mIGZpbGVzeXN0ZW0gVVJJcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9QUkVGSVggPSAiZmlsZTovIjsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9NQVJLRVIgPSAiOiI7Ci0JcHJpdmF0ZSBzdGF0aWMgY2hhciBQQVRIX1NFUEFSQVRPUiAgICA9ICcvJzsKLSAJCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBhIFVSSSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHByZWZpeC4gIFRoaXMgbWV0aG9kIGlzIGNhc2UtaW5zZW5zaXRpdmUuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBzdHJpbmcgdG8gY2hlY2suCi0JICogQHBhcmFtIHByZWZpeCBUaGUgcHJlZml4LgotCSAqIEByZXR1cm4gdHJ1ZSBpZmYgcHJlZml4IGlzIGEgc3RyaWN0IHByZWZpeCBvZiB0aGUgVVJJIHN0cmluZyAoaS5lLiBwcmVmaXggIT0gdXJpKSwgZmFsc2UKLQkgKiBpcyByZXR1cm5lZCBvdGhlcndpc2UuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ByZWZpeChTdHJpbmcgdXJpLCBTdHJpbmcgcHJlZml4KSB7Ci0JCWlmIChwcmVmaXgubGVuZ3RoKCkgPj0gdXJpLmxlbmd0aCgpKQotCQkJcmV0dXJuIGZhbHNlOwotCQkKLQkJcmV0dXJuIHVyaS5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCgpKS5lcXVhbHNJZ25vcmVDYXNlKHByZWZpeCk7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBwYXRoIHRvIGFuIGVjbGlwc2UgcGF0aC4gIElmIHRoZSBnaXZlbiBwYXRoIGlzIGEgZmlsZXN5c3RlbSBVUkksIGl0IG11c3QgbWFwIHRvCi0JICogYSByZWFsIHJlc291cmNlIGluIHRoZSB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIHN0ciBUaGUgcGF0aCB0byB0cmFuc2Zvcm0uCi0JICogQHJldHVybiBSZXR1cm5zIGFuIGVjbGlwc2UgcGF0aCBlcXVpdmFsZW50IG9mIHRoZSBnaXZlbiBwYXRoLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvUGF0aChTdHJpbmcgc3RyKSB7Ci0JCQotCQlpZiAoc3RyID09IG51bGwgfHwgc3RyLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gc3RyOwotCQkKLQkJaWYgKGlzUHJlZml4KHN0ciwgUExBVEZPUk1fUFJFRklYKSkgewotCQkJc3RyID0gc3RyLnN1YnN0cmluZyhQTEFURk9STV9QUkVGSVgubGVuZ3RoKCkgLSAxKTsKLQkJfQotCQllbHNlIGlmIChpc1ByZWZpeChzdHIsIExPQ0FUSU9OX1BSRUZJWCkpIHsKLQkJCUlGaWxlIGZpbGUgPSB0b0ZpbGUoc3RyKTsKLQkJCWlmIChmaWxlICE9IG51bGwpCi0JCQkJc3RyID0gZmlsZS5nZXRGdWxsUGF0aCgpLm1ha2VBYnNvbHV0ZSgpLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzdHI7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0gVVJJIHBhdGguICBJZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhIGZpbGVzeXN0ZW0gVVJJLCBpdCBtdXN0IG1hcCB0bwotCSAqIGEgcmVhbCByZXNvdXJjZSBpbiB0aGUgd29ya3NwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBzdHIgVGhlIHBhdGggdG8gdHJhbnNmb3JtLgotCSAqIEByZXR1cm4gUmV0dXJucyBhIHBsYXRmb3JtIFVSSSBwYXRoIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIHBhdGguCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdG9QbGF0Zm9ybVBhdGgoU3RyaW5nIHN0cikgewotCi0JCWlmIChzdHIgPT0gbnVsbCB8fCBzdHIubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBzdHI7CQkKLQkJCi0JCWlmIChpc1ByZWZpeChzdHIsIExPQ0FUSU9OX1BSRUZJWCkpIHsKLQkJCUlGaWxlIGZpbGUgPSB0b0ZpbGUoc3RyKTsKLQkJCWlmIChmaWxlICE9IG51bGwpCi0JCQkJc3RyID0gUExBVEZPUk1fUFJFRklYICsgZmlsZS5nZXRGdWxsUGF0aCgpLm1ha2VSZWxhdGl2ZSgpOwotCQl9CQkJCi0JCWVsc2UgaWYgKHN0ci5pbmRleE9mKFBST1RPQ09MX01BUktFUikgPT0gLTEpIHsKLQkJCWlmIChzdHIuY2hhckF0KDApID09IFBBVEhfU0VQQVJBVE9SKQotCQkJCXN0ciA9IFBMQVRGT1JNX1BSRUZJWCArIHN0ci5zdWJzdHJpbmcoMSk7Ci0JCQllbHNlCi0JCQkJc3RyID0gUExBVEZPUk1fUFJFRklYICsgc3RyOwotCQl9Ci0JCQotCQlyZXR1cm4gc3RyOwotCX0KLQkKLQkvKioKLQkgKiBUcmFuc2Zvcm0gdGhlIGdpdmVuIHBhdGggdG8gYSBmaWxlc3lzdGVtIFVSSSBwYXRoLiAgVGhlIHBhdGggbXVzdCBiZSBhIHZhbGlkCi0JICogZWNsaXBzZSByZXNvdXJjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBwYXRoIHRvIHRyYW5zZm9ybS4KLQkgKiBAcmV0dXJuIFJldHVybnMgYSBmaWxlc3lzdGVtIFVSSSBwYXRoIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIHBhdGguCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdG9Mb2NhdGlvbihTdHJpbmcgc3RyKSB7Ci0JCQotCQlpZiAoc3RyID09IG51bGwgfHwgc3RyLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gc3RyOwotCQkKLQkJU3RyaW5nIHMgPSBzdHI7Ci0JCQotCQlpZiAoaXNQcmVmaXgocywgUExBVEZPUk1fUFJFRklYKSkKLQkJCXMgPSB0b1BhdGgocyk7Ci0JCQotCQlpZiAocy5pbmRleE9mKFBST1RPQ09MX01BUktFUikgPT0gLTEpIHsJCQkKLQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocykpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkKLQkJCQlzdHIgPSBmaWxlLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJfQotCQkJCQotCQlyZXR1cm4gc3RyOwotCX0JCi0JCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBVUkkgdG8gYW4gSUZpbGUuICBSZXR1cm5zIG51bGwgaWYgdGhlIFVSSSBpcyBub3QgaW4gdGhlIHdvcmtzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBVUkkgdG8gdHJhbnNmb3JtLgotCSAqIEByZXR1cm4gUmV0dXJucyBJRmlsZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGUgdG9GaWxlKFN0cmluZyBzdHIpIHsKLQkJCi0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQkKLQkJLy8gbG9jYWwgZmlsZXN5c3RlbSBwYXRoCi0JCWlmIChpc1ByZWZpeChzdHIsIExPQ0FUSU9OX1BSRUZJWCkpIHsKLQkJCXN0ciA9IHN0ci5zdWJzdHJpbmcoTE9DQVRJT05fUFJFRklYLmxlbmd0aCgpKS5yZXBsYWNlQWxsKCIlMjAiLCAiICIpOwotCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZUZvckxvY2F0aW9uKG5ldyBQYXRoKHN0cikpOwotCQl9Ci0JCWVsc2UgewkKLQkJCS8vIHBsYXRmb3JtIHBhdGgKLQkJCWlmIChzdHIuc3RhcnRzV2l0aChQTEFURk9STV9QUkVGSVgpKQotCQkJCXN0ciA9IHN0ci5zdWJzdHJpbmcoUExBVEZPUk1fUFJFRklYLmxlbmd0aCgpKTsKLQkJCi0JCQlpZiAoc3RyLmluZGV4T2YoUFJPVE9DT0xfTUFSS0VSKSA9PSAtMSkgewkJCQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoc3RyKSk7Ci0JCQl9Ci0JCX0KLQkJCQkJCQkJCi0JCXJldHVybiBmaWxlOwotCX0JCi0JCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBVUklzIHRvIGFuIElGaWxlcy4gIAotCSAqIElGaWxlIHNldCB0byBudWxsIGlmIHRoZSBVUkkgaXMgbm90IGluIHRoZSB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIHN0ciBUaGUgVVJJcyB0byB0cmFuc2Zvcm0uCi0JICogQHJldHVybiBSZXR1cm5zIElGaWxlW10KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElGaWxlW10gdG9GaWxlcyhTdHJpbmdbXSB1cmlzKSB7Ci0JCQotCQlJRmlsZVtdIGZpbGVzID0gbnVsbDsKLQkJaWYgKHVyaXMgIT0gbnVsbCkgewotCQkJZmlsZXMgPSBuZXcgSUZpbGVbdXJpcy5sZW5ndGhdOwkJCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHVyaXMubGVuZ3RoOyBpKyspIHsKLQkJCQlTdHJpbmcgdXJpID0gdXJpc1tpXTsKLQkJCQlmaWxlc1tpXSA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b0ZpbGUodXJpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9XU0RMQ29waWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3V0aWwvV1NETENvcGllci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzEzZWU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9XU0RMQ29waWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTI1ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgcHVibGljIHV0aWxpdHkgbWV0aG9kIGZvciBjb3B5aW5nIFdTREwgZmlsZXMKLSAqIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIHV0aWxpdHkgc2hvdWxkIGNyZWF0ZSB0YXJnZXQgZm9sZGVyCi0gKiAyMDA3MTIwNSAgIDIxMTI2MiBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBDb3B5V1NETFRyZWVDb21tYW5kIGZhaWxzIHRvIGNvcHkgP3dzZGwKLSAqIDIwMDgwMzI0ICAgMjE1NTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIGV4cGVjdHMgbm90IGVuY29kZWQgVVJJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExXcml0ZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5JVVJJU2NoZW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLlNpbXBsZVVSSUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuVVJJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGouV1NETEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYURpcmVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RTY2hlbWFJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIDxwPlRoaXMgaXMgYSB1dGlsaXR5IGNsYXNzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29weSBhIFdTREwgZmlsZSBhbmQgaXRzIHJlbGF0aXZlIGltcG9ydHMKLSAqIChib3RoIHdzZGw6aW1wb3J0IGFuZCB4c2Q6aW1wb3J0KSB0byBhIGZvbGRlciBpbiB0aGUgZmlsZXN5c3RlbS4gIFRoZSBjb2RlIHdpbGwgYW5hbHl6ZQotICogdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGRvZXMgdGhlIGZvbGxvd2luZzoKLSAqIDxvbD4KLSAqICAgIDxsaT5maW5kIGFsbCBmaWxlcyB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZCBhbmQgdGFnIHRoZW0gYXMgc3VjaC48L2xpPgotICogICAgPGxpPmZpbmQgdGhlIGNvbW1vbiBwYXJlbnQgZGlyZWN0b3J5IG9mIGFsbCB0aGUgZmlsZXMgdGhhdCBhcmUgdGFnZ2VkOyB0aGlzIGlzIHRoZSAKLSAqICAgIHJvb3Qgb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuPC9saT4KLSAqIDwvb2w+Ci0gKiBEdXJpbmcgdGhlIGNvcHksIHRoZSByb290IG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIGJlIG1hcHBlZCB0byB0aGUgCi0gKiBzcGVjaWZpZWQgdGFyZ2V0IGZvbGRlciBhbmQgYWxsIHRhZ2dlZCBmaWxlcyB3aWxsIGJlIGR1cGxpY2F0ZWQgdW5kZXIgaXQuPC9wPgotICogCi0gKiA8cD5JZiB0aGUgV1NETCBzb3VyY2UgYW5kIHRoZSB0YXJnZXQgbG9jYXRpb24gYXJlIHRoZSBzYW1lLCB0aGlzIHV0aWxpdHkgb25seSBndWFyYW50ZWVzCi0gKiB0aGF0IHRoZSBzdGFydGluZyBXU0RMIGZpbGUgaXMgInJlLWNvcGllZCIgb250byBpdHNlbGYgKHNpbmNlIHRoZSBXU0RMIGRlZmluaXRpb24gY291bGQgCi0gKiBoYXZlIGJlZW4gYWx0ZXJlZCkuICBObyBndWFyYW50ZWUgaXMgbWFkZSBmb3IgdGhlIG90aGVyIGZpbGVzIHRoYXQgdGhlIFdTREwgZmlsZSBpbXBvcnRzLjwvcD4KLSAqIAotICogPHA+Tm90ZSB0aGF0IFdTRExDb3BpZXIgZG9lcyBub3QgZG8gYSBkaXJlY3QgZmlsZSBjb3B5LiAgVGhlIHNvdXJjZSBmaWxlcyBhcmUgcmVhZCBpbnRvCi0gKiBhIG1vZGVsIGFuZCB0aGVuIHdyaXR0ZW4gb3V0IHRvIHRoZSB0YXJnZXQgZm9sZGVyLCBoZW5jZSB0aGUgb3V0cHV0IGZpbGUgbWlnaHQgbm90IGJlCi0gKiBzeW50YWN0aWNhbGx5IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGZpbGUgYnV0IHRoZXkgd2lsbCBiZSBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsLjwvcD4KLSAqIAotICogPHA+U2luY2UgdGhpcyB1dGlsaXR5IGltcGxlbWVudHMgSVdvcmtzcGFjZVJ1bm5hYmxlLCBpdCBjYW4gYmUgcnVuIGJ5IHRoZSB3b3Jrc3BhY2UgYXMKLSAqIGFuIGF0b21pYyB3b3Jrc3BhY2Ugb3BlcmF0aW9uLjwvcD4KLSAqLwotcHVibGljIGNsYXNzIFdTRExDb3BpZXIgaW1wbGVtZW50cyBJV29ya3NwYWNlUnVubmFibGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRCA9ICIueHNkIjsKLQkKLQkvKioKLQkgKiBIZWxwZXIgY2xhc3MgaG9sZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZXMgd2UgbmVlZCB0byBjb3B5Ci0JICovCi0JcHJpdmF0ZSBjbGFzcyBYTUxPYmplY3RJbmZvIHsKLQkgIAkKLQkJcHVibGljIElQYXRoICBwYXRoOwotCSAgCXB1YmxpYyBPYmplY3QgY29udGVudDsKLQkgIAkgIAkKLQkgIAkvKioKLQkgIAkgKiBDb25zdHJ1Y3Rvci4KLQkgIAkgKiAKLQkgIAkgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGUuCi0JICAJICogQHBhcmFtIGNvbnRlbnQgQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291cmNlIGZpbGUgKGVpdGhlciB3c2RsIG9yIHhzZCkKLQkgIAkgKi8KLQkgIAlwdWJsaWMgWE1MT2JqZWN0SW5mbyhJUGF0aCBwYXRoLCBPYmplY3QgY29udGVudCkgewotCSAgCQl0aGlzLnBhdGggICAgPSBwYXRoLnNldERldmljZShudWxsKTsgLy8gd2Ugd2FudCBhIGRldmljZSBpbmRlcGVuZGVudCBwYXRoICAJCQotCSAgCQl0aGlzLmNvbnRlbnQgPSBjb250ZW50OwotCSAgCX0KLQl9CSAgCi0JCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIJPSBudWxsOwkJCQkJLy8gcGFyc2VyIHRvIHBhcnNlIHRoZSB3c2RsIGFuZCB4c2QgZmlsZXMKLQkKLQlwcml2YXRlIFVSSSBzb3VyY2VVUkkJCQkJPSBVUkkuY3JlYXRlKCIiKTsJCS8vIHVyaSBvZiB0aGUgc3RhcnRpbmcgd3NkbAotCXByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uCQk9IG51bGw7CQkJCQkvLyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhcnRpbmcgd3NkbAotCQotCXByaXZhdGUgVVJJIHRhcmdldEZvbGRlclVSSQkJCT0gbnVsbDsJCQkJCS8vIHVyaSBvZiB0aGUgZm9sZGVyIHRvIGNvcHkgdG8KLQlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlbmFtZQkJPSBudWxsOwkJCQkJLy8gb3B0aW9uYWwgbmV3IGZpbGVuYW1lIGZvciB0aGUgc3RhcnRpbmcgd3NkbAotCQotCXByaXZhdGUgSVBhdGggcGF0aFByZWZpeAkJCT0gbnVsbDsgIAkJCQkvLyB0aGUgc2hvcnRlc3QgY29tbW9uIHBhdGggb2YgYWxsIGZpbGVzIHdlIG5lZWQgdG8gY29weQotCXByaXZhdGUgSVBhdGggd3NkbFJlbFBhdGgJCQk9IG51bGw7CQkJCQkvLyByZWxhdGl2ZSBwYXRoIG9mIHRoZSBzdGFydGluZyB3c2RsIHRvIHRoZSB0YXJnZXQgZm9sZGVyCi0JCQotCXByaXZhdGUgTWFwIHhtbE9iamVjdEluZm9zCQkJPSBuZXcgTGlua2VkSGFzaE1hcCgpOwkvLyB0YWJsZSB0byBzdG9yZSBpbmZvIGFib3V0IHRoZSBmaWxlcyB3ZSBuZWVkIHRvIGNvcHkKLQkKLQlwcml2YXRlIFNpbXBsZVVSSUZhY3RvcnkgdXJpRmFjdG9yeSA9IG51bGw7Ci0JCi0JLyoqCi0JICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4gIEEgbmV3IFdlYlNlcnZpY2VzUGFyc2VyIGlzIGNvbnN0cnVjdGVkIGZvciB1c2UuCi0JICovCi0JcHVibGljIFdTRExDb3BpZXIoKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yLiAgVGhlIGdpdmVuIFdlYlNlcnZpY2VzUGFyc2VyIHdpbGwgYmUgdXNlZC4KLQkgKiAKLQkgKiBAcGFyYW0gcGFyc2VyIEEgV2ViU2VydmljZXNQYXJzZXIgZm9yIFdTRExDb3BpZXIgdG8gdXNlLiAgSWYgbnVsbCwgYSBuZXcgb25lIHdpbGwgYmUgY29uc3RydWN0ZWQuCi0JICovCi0JcHVibGljIFdTRExDb3BpZXIoV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyKSB7Ci0JCWlmIChwYXJzZXIgPT0gbnVsbCkKLQkJCXRoaXMucGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0JCWVsc2UKLQkJCXRoaXMucGFyc2VyID0gcGFyc2VyOwotCQkKLQkJSVVSSVNjaGVtZSBlY2xpcHNlU2NoZW1lID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VTY2hlbWUoKTsKLQkgICAgSVVSSVNjaGVtZSBmaWxlU2NoZW1lICAgID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEZpbGVTY2hlbWUoKTsKLQkgICAgdXJpRmFjdG9yeSA9IG5ldyBTaW1wbGVVUklGYWN0b3J5KCk7Ci0JICAgIHVyaUZhY3RvcnkucmVnaXN0ZXJTY2hlbWUoInBsYXRmb3JtIiwgZWNsaXBzZVNjaGVtZSk7Ci0JICAgIHVyaUZhY3RvcnkucmVnaXN0ZXJTY2hlbWUoImZpbGUiLCBmaWxlU2NoZW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuICBUaGUgVVJJIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJJCi0JICogd2l0aCBhIHZhbGlkIHByb3RvY29sLiAgRm9yIGxvY2FsIGZpbGVzLCBib3RoIGZpbGU6LyBhbmQgcGxhdGZvcm06L3Jlc291cmNlIAotCSAqIHByb3RvY29sIGFyZSBhY2NlcHRhYmxlLiAKLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VVUkkoU3RyaW5nIHVyaSkgewotCQlzZXRTb3VyY2VVUkkodXJpLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgVVJJIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LiAgVGhlIFVSSSBtdXN0IGJlIGFuIGFic29sdXRlIFVSSQotCSAqIHdpdGggYSB2YWxpZCBwcm90b2NvbC4gIEZvciBsb2NhbCBmaWxlcywgYm90aCBmaWxlOi8gYW5kIHBsYXRmb3JtOi9yZXNvdXJjZSAKLQkgKiBwcm90b2NvbCBhcmUgYWNjZXB0YWJsZS4gCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VVUkkoVVJJIHVyaSkgewotCQlzZXRTb3VyY2VVUkkodXJpLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogU2FtZSBhcyBzZXRTb3VyY2VVUkkoU3RyaW5nIHVyaSkgdmVyc2lvbiwgZXhjZXB0IHRoYXQgYW4gYWxyZWFkeSBwYXJzZWQKLQkgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgd3NkbCBkb2N1bWVudCBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIHRvIGF2b2lkCi0JICogaGF2aW5nIHRvIHBhcnNlIGl0IGEgc2Vjb25kIHRpbWUuCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LgotCSAqIEBwYXJhbSBkZWZpbml0aW9uIEEgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LgotCSAqIAotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0U291cmNlVVJJKFN0cmluZyB1cmksIERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlpZiAodXJpICE9IG51bGwpCi0JCQl1cmkgPSB1cmkucmVwbGFjZSgnXFwnLCAnLycpOwotCQlVUkkgdXJpT2JqID0gbnVsbDsJCQotCQl0cnkgewotCQkJdHJ5IHsKLQkJCQl1cmlPYmogPSBuZXcgVVJJKHVyaSk7Ci0JCQl9Ci0JCQljYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsJCQkJCi0JCQkJdXJpT2JqID0gVVJJLmNyZWF0ZShVUklFbmNvZGVyLmVuY29kZSh1cmksICJVVEYtOCIpKTsKLQkJCX0KLQkJCXNldFNvdXJjZVVSSSh1cmlPYmosIGRlZmluaXRpb24pOwkJCi0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlLCBkZWZhdWx0IFVSSSgiIikgaXMgdXNlZCwgb3BlcmF0aW9uIHdpbGwgYmUgYSBuby1vcAotCQl9CQkKLQl9Ci0JCi0JLyoqCi0JICogU2FtZSBhcyBzZXRTb3VyY2VVUkkoU3RyaW5nIHVyaSkgdmVyc2lvbiwgZXhjZXB0IHRoYXQgYW4gYWxyZWFkeSBwYXJzZWQKLQkgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgd3NkbCBkb2N1bWVudCBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIHRvIGF2b2lkCi0JICogaGF2aW5nIHRvIHBhcnNlIGl0IGEgc2Vjb25kIHRpbWUuCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LgotCSAqIEBwYXJhbSBkZWZpbml0aW9uIEEgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VVUkkoVVJJIHVyaSwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXNvdXJjZVVSSSA9IHVyaTsKLQkJdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl9Ci0JCi0JLyoqCi0JICogU3BlY2lmeSB0aGUgdGFyZ2V0IGZvbGRlciBVUkkgZm9yIFdTRExDb3BpZXIgdG8gY29weSB0aGUgd3NkbCB0by4gIFRoZSBVUkkgbXVzdCBiZQotCSAqIGFuIGFic29sdXRlIFVSSSB3aXRoIGEgdmFsaWQgcHJvdG9jb2wuICBCb3RoIGZpbGU6LyBhbmQgcGxhdGZvcm06L3Jlc291cmNlIHByb3RvY29sCi0JICogYXJlIGFjY2VwdGFibGUuICBUaGUgZW50aXJlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aCBhbGwgdGhlIGZpbGVzIHRoYXQgdGhlIHdzZGwgCi0JICogaW1wb3J0cyB3aWxsIGJlIGR1cGxpY2F0ZWQgdW5kZXIgdGhpcyBmb2xkZXIuICBJZiB0aGUgdGFyZ2V0IGZvbGRlciBkb2VzIG5vdCBleGlzdCwgCi0JICogaXQgd2lsbCBiZSBjcmVhdGVkLiAKLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSB0YXJnZXQgZm9sZGVyIFVSSSB3aGVyZSB0aGUgd3NkbCBzdHJ1Y3R1cmUgaXMgY29waWVkIHRvLgotCSAqIAotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGFyZ2V0Rm9sZGVyVVJJKFN0cmluZyB1cmkpIHsKLQkJaWYgKHVyaSAhPSBudWxsKQotCQkJdXJpID0gdXJpLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJVVJJIHVyaU9iaiA9IG51bGw7CQkKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJdXJpT2JqID0gbmV3IFVSSSh1cmkpOwotCQkJfQotCQkJY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7CQkJCQotCQkJCXVyaU9iaiA9IFVSSS5jcmVhdGUoVVJJRW5jb2Rlci5lbmNvZGUodXJpLCAiVVRGLTgiKSk7Ci0JCQl9Ci0JCQlzZXRUYXJnZXRGb2xkZXJVUkkodXJpT2JqKTsJCQotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZSwgdGFyZ2V0Rm9sZGVyVVJJIHdpbGwgYmUgY2hlY2tlZCBmb3IgbnVsbCBsYXRlcgotCQl9CQkKLQl9Ci0JCi0JLyoqCi0JICogU3BlY2lmeSB0aGUgdGFyZ2V0IGZvbGRlciBVUkkgZm9yIFdTRExDb3BpZXIgdG8gY29weSB0aGUgd3NkbCB0by4gIFRoZSBVUkkgbXVzdCBiZQotCSAqIGFuIGFic29sdXRlIFVSSSB3aXRoIGEgdmFsaWQgcHJvdG9jb2wuICBCb3RoIGZpbGU6LyBhbmQgcGxhdGZvcm06L3Jlc291cmNlIHByb3RvY29sCi0JICogYXJlIGFjY2VwdGFibGUuICBUaGUgZW50aXJlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aCBhbGwgdGhlIGZpbGVzIHRoYXQgdGhlIHdzZGwgCi0JICogaW1wb3J0cyB3aWxsIGJlIGR1cGxpY2F0ZWQgdW5kZXIgdGhpcyBmb2xkZXIuICBJZiB0aGUgdGFyZ2V0IGZvbGRlciBkb2VzIG5vdCBleGlzdCwgCi0JICogaXQgd2lsbCBiZSBjcmVhdGVkLiAKLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSB0YXJnZXQgZm9sZGVyIFVSSSB3aGVyZSB0aGUgd3NkbCBzdHJ1Y3R1cmUgaXMgY29waWVkIHRvLiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXRGb2xkZXJVUkkoVVJJIHVyaSkgewkJCi0JCXRhcmdldEZvbGRlclVSSSA9IHVyaTsKLQl9Ci0JCi0JLyoqCi0JICogT3B0aW9uYWxseSBzZXQgYSBuZXcgZmlsZW5hbWUgZm9yIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50IHRvIHVzZSBhZnRlciBpdCBpcwotCSAqIGNvcGllZC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSB3c2RsIGlzIHVzZWQuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lIEEgZmlsZW5hbWUuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGFyZ2V0RmlsZW5hbWUoU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCXRhcmdldEZpbGVuYW1lID0gZmlsZW5hbWU7Ci0JfSAKLQkKLQkvKgotCSAqIENvbXBhcmUgdGhlIHBhdGggcHJlZml4IHdpdGggdGhlIHBhdGggaW4gdGhlIGluZm8gb2JqZWN0LAotCSAqIG1vZGlmeSB0aGUgcGF0aCBwcmVmaXggYWNjb3JkaW5nbHkuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZVBhdGhQcmVmaXgoWE1MT2JqZWN0SW5mbyBpbmZvKSB7Ci0JICAJaWYgKHBhdGhQcmVmaXggPT0gbnVsbCkKLQkgICAgICAgIHBhdGhQcmVmaXggPSBpbmZvLnBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOwotCSAgICBlbHNlIHsKLQkgICAgCWludCBtYXRjaGluZyA9IHBhdGhQcmVmaXgubWF0Y2hpbmdGaXJzdFNlZ21lbnRzKGluZm8ucGF0aCk7Ci0JICAgIAkKLQkgICAgCWlmIChtYXRjaGluZyA8IHBhdGhQcmVmaXguc2VnbWVudENvdW50KCkpCi0JICAgIAkJcGF0aFByZWZpeCA9IHBhdGhQcmVmaXgudXB0b1NlZ21lbnQobWF0Y2hpbmcpOwotCSAgICB9Ci0JfSAgICAJCi0JCi0JLyoKLQkgKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIFVSSSBpcyBhIHJlbGF0aXZlIFVSSS4gCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzUmVsYXRpdmUoU3RyaW5nIHVyaSkgewotCQlyZXR1cm4gdXJpLmluZGV4T2YoJzonKSA9PSAtMTsKLQl9Ci0KLQkvKgotCSAqIEFuYWx5emUgdGhlIHdzZGwgZG9jdW1lbnQgYXQgdGhlIGdpdmVuIFVSSSwgYW5kIHRyYXZlcnNlIGFueSByZWxhdGl2ZSBmaWxlcyB0aGF0Ci0JICogaXQgaW1wb3J0cy4gQ2FuIG9wdGlvbmFsbHkgcGFzcyBpbiBhIHBhcnNlZCBEZWZpbml0aW9uIGlmIG9uZSdzIGF2YWlsYWJsZSBzbwotCSAqIHdlIGRvbid0IGhhdmUgdG8gcGFyc2UgdGhlIHdzZGwgYWdhaW4gKG90aGVyd2lzZSBqdXN0IHBhc3MgaW4gbnVsbCkuIAotCSAqLwotCXByaXZhdGUgdm9pZCBhbmFseXplV1NETChVUkkgdXJpLCBEZWZpbml0aW9uIGRlZmluaXRpb24pIHRocm93cyAKLQkJTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gewotCQkKLQkJdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkKLQkJLy8gYWxyZWFkeSBzZWVuIHRoaXMgd3NkbCwgc2tpcAotCQlpZiAoeG1sT2JqZWN0SW5mb3MuY29udGFpbnNLZXkodXJpLnRvU3RyaW5nKCkpKQotCQkJcmV0dXJuOwotCQkJCQotCQkvLyBuZWVkIHRvIHBhcnNlIHRoZSB3c2RsIG91cnNlbHZlcwotCQlpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotCQkJZGVmaW5pdGlvbiA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvblZlcmJvc2UodXJpLnRvU3RyaW5nKCkpOwotCQkKLQkJLy8gc2F2ZSBhIHJlZmVyZW5jZSB0byB0aGUgc3RhcnRpbmcgd3NkbAotCQlpZiAodGhpcy5kZWZpbml0aW9uID09IG51bGwpCi0JCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCQkKLQkJSVBhdGggcGF0aCA9IG5ldyBQYXRoKHVyaS5nZXRQYXRoKCkpOwotCQkKLQkJLy8gYSB0YXJnZXQgZmlsZW5hbWUgd2FzIGdpdmVuLCBzbyB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgcGF0aCB3aXRoIHRoZSBuZXcgbmFtZQotCQlpZiAoZGVmaW5pdGlvbiA9PSB0aGlzLmRlZmluaXRpb24gJiYgdGFyZ2V0RmlsZW5hbWUgIT0gbnVsbCkKLQkJCXBhdGggPSBwYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKS5hcHBlbmQodGFyZ2V0RmlsZW5hbWUpOwotCQkgCQkKLQkgICAgWE1MT2JqZWN0SW5mbyBpbmZvID0gbmV3IFhNTE9iamVjdEluZm8ocGF0aCwgZGVmaW5pdGlvbik7CSAgICAKLQkgICAgeG1sT2JqZWN0SW5mb3MucHV0KHVyaS50b1N0cmluZygpLCBpbmZvKTsKLQkgICAgdXBkYXRlUGF0aFByZWZpeChpbmZvKTsKLQkJCi0JICAgIC8vIG5vdyBsb29rIGF0IHdzZGwgaW1wb3J0cwotCSAgICAKLQkgICAgZm9yIChJdGVyYXRvciBpdCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLQotCSAgICAJTGlzdCBsaXN0ID0gKExpc3QpIGl0Lm5leHQoKTsKLQkgICAgICAKLQkgICAgCWZvciAoSXRlcmF0b3IgbGlzdEl0ID0gbGlzdC5pdGVyYXRvcigpOyBsaXN0SXQuaGFzTmV4dCgpOykgewotCSAgICAJCQotCQkgICAgICAgIEltcG9ydCB3c2RsSW1wb3J0ID0gKEltcG9ydCkgbGlzdEl0Lm5leHQoKTsKLQkJICAgICAgICBTdHJpbmcgd3NkbEltcG9ydExvY2F0aW9uID0gd3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotCi0JCSAgICAgICAgLy8gYW5hbHl6ZSBhbnkgcmVsYXRpdmUgaW1wb3J0cyB3ZSBmaW5kCi0JCSAgICAgICAgaWYgKHdzZGxJbXBvcnRMb2NhdGlvbiAhPSBudWxsICYmIGlzUmVsYXRpdmUod3NkbEltcG9ydExvY2F0aW9uKSkgewotCi0JCSAgICAgICAgCS8vIGJhZCBmb3JtLCBpbXBvcnRpbmcgeHNkIHdpdGggd3NkbDppbXBvcnQsIGJ1dCBuZWVkIHRvIGhhbmRsZQotCQkgICAgICAgIAlpZiAod3NkbEltcG9ydExvY2F0aW9uLmVuZHNXaXRoKFhTRCkpCi0JCSAgICAgICAgCQlhbmFseXplWFNEKHVyaS5yZXNvbHZlKHdzZGxJbXBvcnRMb2NhdGlvbikpOwotCQkgICAgICAgIAllbHNlCQotCQkgICAgICAgIAkJYW5hbHl6ZVdTREwodXJpLnJlc29sdmUod3NkbEltcG9ydExvY2F0aW9uKSwgbnVsbCk7Ci0JCSAgICAgICAgfQotCSAgICAJfQotCSAgICB9Ci0JICAgIAotCSAgICAvLyBub3cgbG9vayBhdCB4c2QgaW1wb3J0cwotCi0JICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotCSAgICAKLQkgICAgLy8gdGhlcmUncyBubyB3c2RsOnR5cGVzLCB3ZSdyZSBkb25lCi0JICAgIGlmICh0eXBlcyA9PSBudWxsKQotCSAgICAJcmV0dXJuOwotCSAgICAgICAgCQotICAgIAlmb3IgKEl0ZXJhdG9yIGl0ID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewkJCQotCQkJCi0gICAgCQlFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7ICAgIAkJCi0gICAgCQlFbGVtZW50IGVsZW1lbnQ7Ci0gICAgCQkKLSAgICAJCS8vIHdlJ2xsIHRyeSB0byBwYXJzZSBhbnkgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50cyBhbmQKLSAgICAJCS8vIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50cyBpbnRvIGFuIFhTRCBzY2hlbWEgICAgCQkKLSAgICAJCQotICAgIAkJaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgCQkJZWxlbWVudCA9ICgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50KS5nZXRFbGVtZW50KCk7Ci0gICAJCQllbHNlIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAJCQkJZWxlbWVudCA9ICgoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKTsKLSAgIAkJCWVsc2UKLSAgIAkJCQljb250aW51ZTsKLSAgICAJCQkgICAgCQkJCi0JCQl0cnkgewotCQkJCVhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShlbGVtZW50KTsKLQkJCQkKLQkJCQkvLyBhbmFseXplIHRoZSBpbmxpbmVkIHNjaGVtYSBhdCB0aGUgY3VycmVudCB1cmkKLQkJCQlhbmFseXplWFNEKHVyaSwgeHNkU2NoZW1hKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gdCkgewotCQkJCS8vIGlnbm9yZSBhbnkgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgaW50byBhCi0JCQkJLy8gWFNEU2NoZW1hIGluc3RhbmNlCi0JCQl9Ci0gICAgICAgIH0KLQl9Ci0JCi0JLyoKLQkgKiBBbmFseXplIHRoZSBzY2hlbWEgYXQgdGhlIGdpdmVuIFVSSSwgdHJhdmVyc2UgaXRzIGltcG9ydHMgYW5kIGluY2x1ZGVzLgotCSAqIFRoZSBzY2hlbWEgaW5mb3JtYXRpb24gaXMgbm90IHN0b3JlZCBpbiBYTUxPYmplY3RJbmZvcyBiZWNhdXNlIGl0J3MKLQkgKiBlaXRoZXIgbm90IG5lY2Nlc3NhcnkgKHNjaGVtYSBpbmxpbmVkIGluIGEgd3NkbCkgb3IgaXQgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHN0b3JlZC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgYW5hbHl6ZVhTRChVUkkgdXJpLCBYU0RTY2hlbWEgc2NoZW1hKSB7Ci0JCQotCQlpZiAoc2NoZW1hID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCQotCQkvLyBsb29rIGF0IHRoZSBpbXBvcnRzIGFuZCBpbmNsdWRlcwotCSAgICAKLQkJZm9yIChJdGVyYXRvciBpdCA9IHNjaGVtYS5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLQkgICAgICAgIAotCQkJT2JqZWN0IGNvbnRlbnQgPSBpdC5uZXh0KCk7Ci0JICAgICAgICAKLQkJCWlmICghKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFEaXJlY3RpdmUpKQotCQkJCWNvbnRpbnVlOwotCQkJCQkgICAgICAgIAotCQkJWFNEU2NoZW1hRGlyZWN0aXZlIHhzZFNjaGVtYURpcmVjdGl2ZSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGNvbnRlbnQ7Ci0JCQlTdHJpbmcgeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24gPSB4c2RTY2hlbWFEaXJlY3RpdmUuZ2V0U2NoZW1hTG9jYXRpb24oKTsKLQkgICAgICAgICAgCi0JCQkvLyBhbmFseXplIGFueSByZWxhdGl2ZSBpbXBvcnRzIGFuZCBpbmNsdWRlcyB3ZSBmaW5kCi0JCQlpZiAoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24gIT0gbnVsbCAmJiBpc1JlbGF0aXZlKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uKSkKLQkJCQlhbmFseXplWFNEKHVyaS5yZXNvbHZlKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uKSk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBBbmFseXplIHRoZSBzY2hlbWEgYXQgdGhlIGdpdmVuIFVSSSwgdGhlIHNjaGVtYSBpcyBwYXJzZWQgYW5kIHN0b3JlZCBpbgotCSAqIFhNTE9iamVjdEluZm9zLgotCSAqLwotCXByaXZhdGUgdm9pZCBhbmFseXplWFNEKFVSSSB1cmkpIHsKLQkJCi0JCXVyaSA9IHVyaS5ub3JtYWxpemUoKTsKLQkJCi0JCS8vIGFscmVhZHkgc2VlbiB0aGlzIHhzZCwgc2tpcCBpdAotCQlpZiAoeG1sT2JqZWN0SW5mb3MuY29udGFpbnNLZXkodXJpLnRvU3RyaW5nKCkpKQotCQkJcmV0dXJuOwotCQkKLQkJWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKHVyaS50b1N0cmluZygpKTsKLQotCQkvLyBpZiBzY2hlbWEgaXMgbm90IGNhY2hlZCwgcGFyc2UgaXQKLQkgICAgaWYgKHhzZFNjaGVtYSA9PSBudWxsKSB7Ci0JICAgIAlYU0RQYXJzZXIgcCA9IG5ldyBYU0RQYXJzZXIobnVsbCk7Ci0JICAgIAlJbnB1dFN0cmVhbSBpcyA9IE5ldFV0aWxzLmdldFVSTElucHV0U3RyZWFtKHVyaS50b1N0cmluZygpKTsKLQkgICAgICAKLQkgICAgCWlmIChpcyAhPSBudWxsKSB7Ci0JICAgIAkJcC5wYXJzZShpcyk7Ci0JICAgIAkJeHNkU2NoZW1hID0gcC5nZXRTY2hlbWEoKTsKLQkgICAgCX0KLQkgICAgfQotCSAgICAKLQkgICAgaWYgKHhzZFNjaGVtYSAhPSBudWxsKSB7Ci0JICAgICAgICAKLQkgICAgCVhNTE9iamVjdEluZm8gaW5mbyA9IG5ldyBYTUxPYmplY3RJbmZvKG5ldyBQYXRoKHVyaS5nZXRQYXRoKCkpLCB4c2RTY2hlbWEpOwkgICAgCQotCSAgICAJeG1sT2JqZWN0SW5mb3MucHV0KHVyaS50b1N0cmluZygpLCBpbmZvKTsKLQkgICAgCXVwZGF0ZVBhdGhQcmVmaXgoaW5mbyk7Ci0JICAgICAgCi0JICAgIAkvLyBhbmFseXplIGl0cyBpbXBvcnRzIGFuZCBpbmNsdWRlcwotCSAgICAJYW5hbHl6ZVhTRCh1cmksIHhzZFNjaGVtYSk7Ci0JICAgIH0KLQl9Ci0JCQotCS8qCi0JICogQXBwZW5kcyBhIHBhdGggdG8gYSBVUkkgYW5kIHJldHVybnMgdGhlIG5ldyBjb21iaW5lZCBVUkkgaW4gYW4gYXJyYXkgb2YgMiBlbGVtZW50cywKLQkgKiB3aGVyZSB0aGUgZmlyc3QgZWxlbWVudCBpcyBpbiBkZWNvZGVkIGZvcm0gYW5kIHRoZSBzZWNvbmQgZWxlbWVudCBpcyBpbiBlbmNvZGVkIGZvcm0uCi0JICovCi0JcHJpdmF0ZSBTdHJpbmdbXSBhcHBlbmRQYXRoVG9VUkkoVVJJIHVyaU9iaiwgSVBhdGggcGF0aCkgewotCQkKLQkJU3RyaW5nIHNjaGVtZVNwZWNpZmljUGFydCA9IHVyaU9iai5nZXRTY2hlbWVTcGVjaWZpY1BhcnQoKTsgCi0JCQotCQlpZiAoc2NoZW1lU3BlY2lmaWNQYXJ0LmVuZHNXaXRoKCIvIikpCi0JCQlwYXRoID0gcGF0aC5tYWtlUmVsYXRpdmUoKTsKLQkJZWxzZQotCQkJcGF0aCA9IHBhdGgubWFrZUFic29sdXRlKCk7Ci0JCQotCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsKLQkJCQl1cmlPYmouZ2V0U2NoZW1lKCkgKyAnOicgKyBzY2hlbWVTcGVjaWZpY1BhcnQgKyBwYXRoLAotCQkJCXVyaU9iai5nZXRTY2hlbWUoKSArICc6JyArIHVyaU9iai5nZXRSYXdTY2hlbWVTcGVjaWZpY1BhcnQoKSArIHBhdGgKLQkJfTsKLQl9Ci0JCi0JLyoKLQkgKiBXcml0ZXMgdGhlIHdzZGwgZGVmaW5pdGlvbiB0byB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBmb2xkZXIuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgd3JpdGVYTUxPYmooSVBhdGggcGF0aCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cwotCQlXU0RMRXhjZXB0aW9uLCBVUklFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsJCQkJCi0JCQkgIAotCSAgICBXU0RMRmFjdG9yeSB3c2RsRmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsJICAgIAotCSAgICBXU0RMV3JpdGVyIHdzZGxXcml0ZXIgPSB3c2RsRmFjdG9yeS5uZXdXU0RMV3JpdGVyKCk7Ci0JICAgIAotCSAgICBTdHJpbmdbXSB0YXJnZXRVUkkgPSBhcHBlbmRQYXRoVG9VUkkodGFyZ2V0Rm9sZGVyVVJJLCBwYXRoKTsKLQkgICAgCi0JICAgIE91dHB1dFN0cmVhbSBvcyA9IHVyaUZhY3RvcnkubmV3VVJJKHRhcmdldFVSSVswXSkuZ2V0T3V0cHV0U3RyZWFtKCk7CSAgICAKLQkgICAgd3NkbFdyaXRlci53cml0ZVdTREwoZGVmaW5pdGlvbiwgb3MpOwotCSAgICBvcy5jbG9zZSgpOwotCSAgICAKLQkgICAgcmV0dXJuIHRhcmdldFVSSVsxXTsKLQl9Ci0gIAotCS8qCi0JICogV3JpdGVzIHRoZSB4c2Qgc2NoZW1hIHRvIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoLCByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IGZvbGRlci4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyB3cml0ZVhNTE9iaihJUGF0aCBwYXRoLCBYU0RTY2hlbWEgeHNkU2NoZW1hLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cwotCQlUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBVUklFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsJCQkKLQkJCi0JCVRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi04Iik7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjIiKTsKLQkJCi0JCUVsZW1lbnQgZSA9IHhzZFNjaGVtYS5nZXRFbGVtZW50KCk7Ci0JCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGUpOwkJCi0JCQotCQlTdHJpbmdbXSB0YXJnZXRVUkkgPSBhcHBlbmRQYXRoVG9VUkkodGFyZ2V0Rm9sZGVyVVJJLCBwYXRoKTsKLQkJCi0JCU91dHB1dFN0cmVhbSBvcyA9IHVyaUZhY3RvcnkubmV3VVJJKHRhcmdldFVSSVswXSkuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvcykpOwotCQlvcy5jbG9zZSgpOwotCQkKLQkJcmV0dXJuIHRhcmdldFVSSVsxXTsKLQl9ICAKLQotCS8qCi0JICogQ29tcGFyZXMgdGhlIDIgdXJpcyBhbmQgc2VlIGlmIHRoZXkgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZS4gCi0JICogV2UgbmVlZCB0byBjb252ZXJ0IGJvdGggdXJpcyB0byBmaWxlc3lzdGVtIHVyaXMgaW4gb3JkZXIgdG8gY29tcGFyZS4KLQkgKi8JCi0JcHJpdmF0ZSBib29sZWFuIGlzU2FtZUxvY2F0aW9uKFN0cmluZyB1cmkxLCBTdHJpbmcgdXJpMikgewotCi0JCS8vIGlmIGVpdGhlciB1cmkgaXMgbnVsbCwgd2UgY2Fubm90IG1ha2UgYW55IG1lYW5pbmdmdWwgY29tcGFyaXNvbgotCQlpZiAodXJpMSA9PSBudWxsIHx8IHVyaTIgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJCi0JCXVyaTEgPSBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9Mb2NhdGlvbih1cmkxKTsKLQkJdXJpMiA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b0xvY2F0aW9uKHVyaTIpOwotCQkKLQkJcmV0dXJuIHVyaTEuZXF1YWxzKHVyaTIpOwotCX0KLQkKLQkvKioKLQkgKiBFeGVjdXRlcyB0aGUgY29weWluZyBhY3Rpb24uCi0JICogCi0JICogQHBhcmFtIG1vbml0b3IgQW4gb3B0aW9uYWwgcHJvZ3Jlc3MgbW9uaXRvci4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gVGhyb3duIGlmIHRoZSBjb3B5aW5nIGlzIHVuc3VjY2Vzc2Z1bC4gIFBvc3NpYmxlIGNhdXNlcyBpbmNsdWRlOgotCSAqIHRhcmdldCBmb2xkZXIgVVJJIHdhcyBub3Qgc3BlY2lmaWVkOyBzb3VyY2UgVVJJIGhhcyBpbmNvcnJlY3QgZm9ybWF0OyBwcm9ibGVtIHBhcnNpbmcgd3NkbCAKLQkgKiBvciB4c2QgZG9jdW1lbnRzOyBwcm9ibGVtIHdyaXRpbmcgdG8gZmlsZXN5c3RlbS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQotCQl4bWxPYmplY3RJbmZvcy5jbGVhcigpOwotCi0JCS8vIHRhcmdldCBmb2xkZXIgbXVzdCBiZSBzZXQKLQkJaWYgKHRhcmdldEZvbGRlclVSSSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoV3N0V1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfVEFSR0VUX0ZPTERFUl9OT1RfU1BFQ0lGSUVEKSk7CQkKLQkJCQkKLSAgCQl0cnkgewotICAJCQlhbmFseXplV1NETChzb3VyY2VVUkksIGRlZmluaXRpb24pOyAgCQkJIAotICAJCQkKLSAgCQkJLy8gYmVnaW4gd3JpdGluZyBvdXQgZmlsZXMKLSAgCQkJCi0gIAkJCUl0ZXJhdG9yIGl0ZXIgPSB4bWxPYmplY3RJbmZvcy52YWx1ZXMoKS5pdGVyYXRvcigpOyAJCQkgIAkJCQotICAJCQkKLSAgCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0gIAkJCQlYTUxPYmplY3RJbmZvIGluZm8gPSAoWE1MT2JqZWN0SW5mbykgaXRlci5uZXh0KCk7ICAJCQkJCi0gIAkJCQlJUGF0aCByZWxQYXRoID0gaW5mby5wYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMocGF0aFByZWZpeC5zZWdtZW50Q291bnQoKSk7Ci0gIAkJCQkKLSAgCQkJCWlmIChpbmZvLmNvbnRlbnQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKSB7Ci0gIAkJCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGluZm8uY29udGVudDsKLSAgCQkJCQkKLSAgCQkJCQkvLyBpZiB0aGlzIGlzIHRoZSBzdGFydGluZyB3c2RsLCByZW1lbWJlciBpdHMgcGF0aCByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IGZvbGRlcgotICAJCQkJCWlmIChkZWZpbml0aW9uID09IHRoaXMuZGVmaW5pdGlvbikKLSAgCQkJCQkJd3NkbFJlbFBhdGggPSByZWxQYXRoOwotCi0gIAkJCQkJU3RyaW5nIHRhcmdldFVSSSA9IHdyaXRlWE1MT2JqKHJlbFBhdGgsIGRlZmluaXRpb24sIG1vbml0b3IpOwotICAJCQkJCQotICAJCQkJCWlmIChkZWZpbml0aW9uID09IHRoaXMuZGVmaW5pdGlvbiAmJiBpc1NhbWVMb2NhdGlvbihzb3VyY2VVUkkudG9TdHJpbmcoKSwgdGFyZ2V0VVJJKSkKLSAgCQkJCQkJcmV0dXJuOwotICAJCQkJfQotICAJCQkJZWxzZQotICAJCQkJCXdyaXRlWE1MT2JqKHJlbFBhdGgsIChYU0RTY2hlbWEpIGluZm8uY29udGVudCwgbW9uaXRvcik7ICAJCQkJCQotICAJCQl9ICAJCQkKLSAgCQl9IGNhdGNoIChFeGNlcHRpb24gdCkgewotICAJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLSAgCQkJCQlOTFMuYmluZChXc3RXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9DT1BZX1dTREwsIG5ldyBTdHJpbmdbXSB7c291cmNlVVJJLnRvU3RyaW5nKCksIHRhcmdldEZvbGRlclVSSS50b1N0cmluZygpfSksIHQpKTsKLSAgCQl9Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhdGggb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQsIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQgZm9sZGVyIGFmdGVyCi0JICogY29weWluZyBjb21wbGV0ZXMuCi0JICogCi0JICogQHJldHVybiBUaGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgSVBhdGggZ2V0UmVsYXRpdmVQYXRoKCkgewotCQlyZXR1cm4gd3NkbFJlbFBhdGg7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0Fic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE0NDY3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0Fic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICogCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBJV2ViU2VydmljZUxvY2F0b3IuICBFeHRlbmRlcnMgbXVzdCBpbXBsZW1lbnQgdGhlIGFic3RyYWN0IG1ldGhvZCBnZXRXZWJTZXJ2aWNlcygpLiAgCi0gKiBUaGlzIGNsYXNzIHdpbGwgYmUgdXNlZCB0byBwcm92aWRlIG1ldGhvZHMgdXNlZnVsIHRvIGxvY2F0b3IgaW1wbGVtZW50ZXJzLiAgRXh0ZW5kZXJzIHNob3VsZCByZWdpc3RlciB0aGVpcgotICogbG9jYXRvciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZWlyIHBsdWdpbiB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50LiAKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yIGltcGxlbWVudHMgSVdlYlNlcnZpY2VMb2NhdG9yIHsKLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvciAoKQotCXsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kJ3MKLQkgKiBkZWZhdWx0IGJlaGF2aW91ciBvZiByZXR1cm5pbmcgYW4gZW1wdHkgbGlzdC4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBub24tbnVsbCBidXQgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZUNsaWVudHMgKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCdzCi0JICogZGVmYXVsdCBiZWhhdmlvdXIgb2YgcmV0dXJuaW5nIGFuIGVtcHR5IGxpc3QuCi0JICogQHBhcmFtIHByb2plY3RzIE9uZSBvciBtb3JlIHByb2plY3RzIHRvIHdoaWNoCi0JICogdGhlIHNlYXJjaCBzaG91bGQgYmUgbGltaXRlZC4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBub24tbnVsbCBidXQgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZUNsaWVudHMgKCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4gCi0JICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QncwotCSAqIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHJldHVybmluZyBhbiBlbXB0eSBsaXN0LgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIG5vbi1udWxsIGJ1dCBwb3NzaWJseSBlbXB0eSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMKLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsgCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4gCi0JICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QncwotCSAqIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHJldHVybmluZyBhbiBlbXB0eSBsaXN0LgotCSAqIEBwYXJhbSBwcm9qZWN0cyBPbmUgb3IgbW9yZSBwcm9qZWN0cyB0byB3aGljaAotCSAqIHRoZSBzZWFyY2ggc2hvdWxkIGJlIGxpbWl0ZWQuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbm9uLW51bGwgYnV0IHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cwotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOyAKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0lXZWJTZXJ2aWNlTG9jYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9JV2ViU2VydmljZUxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM1MzMxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0lXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKgotICogSW50ZXJmYWNlIGZvciBXZWIgc2VydmljZSBsb2NhdG9ycyB0aGF0IHdpbGwgYmUgcmV0cmlldmVkCi0gKiBieSB0aGUgV2ViU2VydmljZUZpbmRlci4gVGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG5vdCBiZQotICogaW1wbGVtZW50ZWQgZGlyZWN0bHkuIEluc3RlYWQsIHN1YmNsYXNzZXMgc2hvdWxkIGV4dGVuZAotICogQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvciBhbmQgaW1wbGVtZW50IHRoZQotICogZ2V0V2ViU2VydmljZXMoKSBhbmQgZ2V0V2ViU2VydmljZUNsaWVudHMoKSBtZXRob2RzLiAKLSAqLwotcHVibGljIGludGVyZmFjZSBJV2ViU2VydmljZUxvY2F0b3IKLXsKLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIFRoaXMgb3BlcmF0aW9uIG1heSBiZSBsb25nIHJ1bm5pbmcuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKiBUaGlzIG9wZXJhdGlvbiBtYXkgYmUgbG9uZyBydW5uaW5nLgotCSAqIEBwYXJhbSBwcm9qZWN0cyBPbmUgb3IgbW9yZSBwcm9qZWN0cyB0byB3aGljaCB0aGUKLQkgKiBzZWFyY2ggc2hvdWxkIGJlIGxpbWl0ZWQuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKiBUaGlzIG9wZXJhdGlvbiBtYXkgYmUgbG9uZyBydW5uaW5nLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywKLQkgKiBwb3NzaWJseSBlbXB0eSwgcG9zc2libHkgbnVsbC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApOwotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKiBUaGlzIG9wZXJhdGlvbiBtYXkgYmUgbG9uZyBydW5uaW5nLgotCSAqIEBwYXJhbSBwcm9qZWN0cyBPbmUgb3IgbW9yZSBwcm9qZWN0cyB0byB3aGljaCB0aGUKLQkgKiBzZWFyY2ggc2hvdWxkIGJlIGxpbWl0ZWQuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLAotCSAqIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VDYXRlZ29yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlQ2F0ZWdvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM1ODUzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VDYXRlZ29yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogQSBXZWJTZXJ2aWNlQ2F0ZWdvcnkgcmVwcmVzZW50cyBhIGRlZmluZWQgY2F0ZWdvcnkgb2YKLSAqIFdlYiBzZXJ2aWNlIGxvY2F0b3JzIHBsdWdnZWQgaW50byB0aGUgV2ViU2VydmljZUZpbmRlcgotICogZnJhbWV3b3JrLiBFYWNoIGNhdGVnb3J5IGhhcyBhIG5vbi10cmFuc2xhdGFibGUgaWRlbnRpZmllciwKLSAqIGFuIG9wdGlvbmFsIG5vbi10cmFuc2xhdGFibGUgcGFyZW50IGNhdGVnb3J5IGlkZW50aWZpZXIKLSAqIChhYnNlbnQgZm9yIHJvb3QgY2F0ZWdvcmllcyksIGEgdHJhbnNsYXRhYmxlIHNob3J0IGxhYmVsLAotICogYSB0cmFuc2xhdGFibGUgbG9uZyBkZXNjcmlwdGlvbiBhbmQgYW4gaWNvbi4KLSAqIEBzZWUgV2ViU2VydmljZUZpbmRlciNnZXRXZWJTZXJ2aWNlQ2F0ZWdvcmllcygpIAotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNhdGVnb3J5Ci17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9JRCA9ICJpZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0NBVEVHT1JZID0gImNhdGVnb3J5IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfTEFCRUwgPSAibGFiZWwiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0lDT04gPSAiaWNvbiI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBpY2VfOwotCQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgV2ViU2VydmljZUNhdGVnb3J5IGZvciB0aGUgZ2l2ZW4KLQkgKiBjb25maWd1cmF0aW9uIGVsZW1lbnQgZnJvbSB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5LgotCSAqIEBwYXJhbSBpY2UgVGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBvbiB3aGljaCB0aGlzCi0JICogbmV3IFdlYlNlcnZpY2VDYXRlZ29yeSBpcyBiYXNlZC4gCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDYXRlZ29yeSAoIElDb25maWd1cmF0aW9uRWxlbWVudCBpY2UgKQotCXsKLQkJaWNlXyA9IGljZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbm9uLXRyYW5zbGF0YWJsZSBpZGVudGlmaWVyIG9mIHRoaXMgY2F0ZWdvcnkuCi0JICogQHJldHVybiBUaGUgbm9uLXRyYW5zbGF0YWJsZSBpZGVudGlmaWVyIG9mIHRoaXMgY2F0ZWdvcnkuCi0JICogVGhpcyBzaG91bGQgbmV2ZXIgYmUgbnVsbC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldElkICgpCi0JewotCQlyZXR1cm4gaWNlXy5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9JRCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIG5vbi10cmFuc2xhdGFibGUgaWRlbnRpZmllciBvZiB0aGlzIGNhdGVnb3J5J3MKLQkgKiBpbW1lZGlhdGUgcGFyZW50IGNhdGVnb3J5LCBvciBudWxsIGlmIHRoaXMgaXMgYSByb290IGNhdGVnb3J5Ci0JICogYW5kLCBhcyBzdWNoLCBoYXMgbm8gcGFyZW50IGNhdGVnb3J5LgotCSAqIEByZXR1cm4gVGhlIG5vbi10cmFuc2xhdGFibGUgaWRlbnRpZmllciBvZiB0aGlzIGNhdGVnb3J5J3MKLQkgKiBwYXJlbnQsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFBhcmVudElkICgpCi0JewotCQlyZXR1cm4gaWNlXy5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9DQVRFR09SWSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhpcyBjYXRlZ29yeSdzIGltbWVkaWF0ZSBwYXJlbnQgV2ViU2VydmljZUNhdGVnb3J5LCBvcgotCSAqIG51bGwgaWYgdGhpcyBpcyBhIHJvb3QgY2F0ZWdvcnkgYW5kLCBhcyBzdWNoLCBoYXMgbm8gcGFyZW50IGNhdGVnb3J5LgotCSAqIEByZXR1cm4gVGhpcyBjYXRlZ29yeSdzIGltbWVkaWF0ZSBwYXJlbnQgV2ViU2VydmljZUNhdGVnb3J5LCBvcgotCSAqIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgV2ViU2VydmljZUNhdGVnb3J5IGdldFBhcmVudCAoKQotCXsKLQkJcmV0dXJuIFdlYlNlcnZpY2VGaW5kZXIuaW5zdGFuY2UoKS5nZXRXZWJTZXJ2aWNlQ2F0ZWdvcnlCeUlkKGdldFBhcmVudElkKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpbnRlcm5hdGlvbmFsaXplZCBzaG9ydCBsYWJlbCBvZiB0aGlzIGNhdGVnb3J5LAotCSAqIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4gTm90ZSB0aGF0IHVzZXIgaW50ZXJmYWNlcyBtYXkKLQkgKiBjaG9vc2UgdG8gYnlwYXNzIGNhdGVnb3JpZXMgdGhhdCBkbyBub3QgaGF2ZSBhIGxhYmVsLgotCSAqIEByZXR1cm4gVGhlIGludGVybmF0aW9uYWxpemVkIHNob3J0IGxhYmVsIG9mIHRoaXMgY2F0ZWdvcnksCi0JICogb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwgKCkKLQl7Ci0JCXJldHVybiBpY2VfLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0xBQkVMKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaW50ZXJuYXRpb25hbGl6ZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBjYXRlZ29yeSwKLQkgKiBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICogQHJldHVybiBUaGUgaW50ZXJuYXRpb25hbGl6ZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBjYXRlZ29yeSwKLQkgKiBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKQotCXsKLQkJcmV0dXJuIGljZV8uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfREVTQ1JJUFRJT04pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpY29uIG9mIHRoaXMgY2F0ZWdvcnksIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKiBAcmV0dXJuIFRoZSBpY29uIG9mIHRoaXMgY2F0ZWdvcnksIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEljb24gKCkKLQl7Ci0JCXJldHVybiBpY2VfLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0lDT04pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlRmluZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMGQ5OWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlRmluZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKgotICogV2ViU2VydmljZUZpbmRlciBpcyBhIHNpbmdsZXRvbiB3aGljaCBmaW5kcyBhbGwgZXh0ZW5kZXJzIGFuZCByZXR1cm5zIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMuCi0gKiBGaW5kcyB3ZWIgc2VydmljZXMgYnkgY2FsbGluZyBsb2NhdG9ycyBleHRlbmRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfSAKLSAqIHdoaWNoIGhhdmUgYmVlbiByZWdpc3RlcmVkIHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5fS4KLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VGaW5kZXIgewotCi0JcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZUZpbmRlciBpbnN0YW5jZSA9IG51bGw7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9MT0NBVE9SID0gIndlYlNlcnZpY2VMb2NhdG9yIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0NBVEVHT1JZID0gIndlYlNlcnZpY2VMb2NhdG9yQ2F0ZWdvcnkiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9JRCA9ICJpZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0NMQVNTID0gImNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfQ0FURUdPUlkgPSAiY2F0ZWdvcnkiOyAvLyROT04tTkxTLTEkCi0vLwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0xBQkVMID0gImxhYmVsIjsgLy8kTk9OLU5MUy0xJAotLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7IC8vJE5PTi1OTFMtMSQKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfSUNPTiA9ICJpY29uIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoKLQkgKiBQdWJsaWMgY29uc3RydWN0aW9uIGlzIG5vdCBhbGxvd2VkLgotCSAqIFVzZSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCkuCi0JICovCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlRmluZGVyICgpCQotCXsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gb2YgPGNvZGU+V2ViU2VydmljZUZpbmRlcjwvY29kZT4uCi0JICogQHJldHVybiBUaGUgc2luZ2xldG9uIG9mIDxjb2RlPldlYlNlcnZpY2VGaW5kZXI8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgV2ViU2VydmljZUZpbmRlciBpbnN0YW5jZSAoKQotCXsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpCi0JCXsKLQkJCWluc3RhbmNlID0gbmV3IFdlYlNlcnZpY2VGaW5kZXIoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlcyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQuICBDdXJyZW50bHkgcmV0dXJucyBhbGwgd2ViIAotCSAqIHNlcnZpY2VzIGZvdW5kIGZvciBhbGwgcmVnaXN0ZXJlZCBsb2NhdG9ycy4gIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlcyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VzICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZChudWxsLG1vbml0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlcyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQuICBDdXJyZW50bHkgcmV0dXJucyBhbGwgd2ViIAotCSAqIHNlcnZpY2VzIGZvdW5kIGluIHRoZSBjb250ZXh0IG9mIHRoZSBnaXZlbiBwcm9qZWN0cyBmb3IgYWxsIHJlZ2lzdGVyZWQgbG9jYXRvcnMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXMgKCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkKG51bGwscHJvamVjdHMsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2VzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5ICggV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeSA9PSBudWxsID8gbnVsbCA6IGNhdGVnb3J5LmdldElkKCksbW9uaXRvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBUaGUgc2VhcmNoIGlzIGNvbnN0cmFpbmVkIHRvIHRoZSBnaXZlbiBzZXQgb2Ygb25lIG9yIG1vcmUgcHJvamVjdHMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5ICggV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5LCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeSA9PSBudWxsID8gbnVsbCA6IGNhdGVnb3J5LmdldElkKCkscHJvamVjdHMsbW9uaXRvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZXMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5SWQgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkICggU3RyaW5nIGNhdGVnb3J5SWQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZCxudWxsLG1vbml0b3IpOwkKLQl9IAotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBUaGUgc2VhcmNoIGlzIGNvbnN0cmFpbmVkIHRvIHRoZSBnaXZlbiBzZXQgb2Ygb25lIG9yIG1vcmUgcHJvamVjdHMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZCAoIFN0cmluZyBjYXRlZ29yeUlkLCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJTGlua2VkTGlzdCB3ZWJTZXJ2aWNlcyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCVdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgd3NsciA9IFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcmVnRWxlbWVudHMgPSB3c2xyLmdldENvbmZpZ0VsZW1lbnRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnRWxlbWVudHMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChFTEVNRU5UX0xPQ0FUT1IuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldE5hbWUoKSkpCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlpZiAoY2F0ZWdvcnlJZCA9PSBudWxsIHx8IGNhdGVnb3J5SWQuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0NBVEVHT1JZKSkpCi0JCQkJCXsKLQkJCQkJCU9iamVjdCBvYmogPSByZWdFbGVtZW50c1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEFUVFJJQlVURV9DTEFTUyk7Ci0JCQkJCQlpZiAob2JqIGluc3RhbmNlb2YgSVdlYlNlcnZpY2VMb2NhdG9yKQotCQkJCQkJewotCQkJCQkJCUlXZWJTZXJ2aWNlTG9jYXRvciB3c2wgPSAoSVdlYlNlcnZpY2VMb2NhdG9yKW9iajsKLQkJCQkJCQlMaXN0IHdzTGlzdCA9IHByb2plY3RzID09IG51bGwgPyB3c2wuZ2V0V2ViU2VydmljZXMobW9uaXRvcikgOiB3c2wuZ2V0V2ViU2VydmljZXMocHJvamVjdHMsbW9uaXRvcik7Ci0JCQkJCQkJaWYgKHdzTGlzdCAhPSBudWxsKQotCQkJCQkJCXsKLQkJCQkJCQkJd2ViU2VydmljZXMuYWRkQWxsKHdzTGlzdCk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSAKLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleCkKLQkJCQl7Ci0JCQkJCS8vIFF1aWV0bHkgYnlwYXNzIGFueSBJV2ViU2VydmljZUxvY2F0b3JzIHRoYXQgZmFpbGVkIHRvIGJlIGxvYWRlZC4KLQkJCQl9Ci0JCQl9Ci0JCX0gCi0JCXJldHVybiB3ZWJTZXJ2aWNlcy5pdGVyYXRvcigpOwkKLQl9IAotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4gIEN1cnJlbnRseSByZXR1cm5zIGFsbCB3ZWIgCi0JICogc2VydmljZSBjbGllbnRzIGZvdW5kIGZvciBhbGwgcmVnaXN0ZXJlZCBsb2NhdG9ycy4gIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQobnVsbCxtb25pdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4gIEN1cnJlbnRseSByZXR1cm5zIGFsbCB3ZWIgCi0JICogc2VydmljZSBjbGllbnRzIGZvdW5kIGZvciBhbGwgcmVnaXN0ZXJlZCBsb2NhdG9ycyBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2l2ZW4gcHJvamVjdHMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUNsaWVudEluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChudWxsLHByb2plY3RzLG1vbml0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uIAotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUNsaWVudEluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeSAoIFdlYlNlcnZpY2VDYXRlZ29yeSBjYXRlZ29yeSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeSA9PSBudWxsID8gbnVsbCA6IGNhdGVnb3J5LmdldElkKCksbW9uaXRvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogVGhlIHNlYXJjaCBpcyBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gc2V0IG9mIG9uZSBvciBtb3JlIHByb2plY3RzLgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4gCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlQ2xpZW50SW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5ICggV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5LCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5ID09IG51bGwgPyBudWxsIDogY2F0ZWdvcnkuZ2V0SWQoKSxwcm9qZWN0cyxtb25pdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlQ2xpZW50SW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZCAoIFN0cmluZyBjYXRlZ29yeUlkLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQsbnVsbCxtb25pdG9yKTsKLQl9IAotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogVGhlIHNlYXJjaCBpcyBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gc2V0IG9mIG9uZSBvciBtb3JlIHByb2plY3RzLgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5SWQgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkICggU3RyaW5nIGNhdGVnb3J5SWQsIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlMaW5rZWRMaXN0IHdlYlNlcnZpY2VDbGllbnRzID0gbmV3IExpbmtlZExpc3QoKTsKLQkJV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB3c2xyID0gV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSByZWdFbGVtZW50cyA9IHdzbHIuZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWdFbGVtZW50cy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKEVMRU1FTlRfTE9DQVRPUi5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0TmFtZSgpKSkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCWlmIChjYXRlZ29yeUlkID09IG51bGwgfHwgY2F0ZWdvcnlJZC5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfQ0FURUdPUlkpKSkKLQkJCQkJewotCQkJCQkJT2JqZWN0IG9iaiA9IHJlZ0VsZW1lbnRzW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQVRUUklCVVRFX0NMQVNTKTsKLQkJCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJV2ViU2VydmljZUxvY2F0b3IpCi0JCQkJCQl7Ci0JCQkJCQkJSVdlYlNlcnZpY2VMb2NhdG9yIHdzbCA9IChJV2ViU2VydmljZUxvY2F0b3Ipb2JqOwotCQkJCQkJCUxpc3Qgd3NMaXN0ID0gcHJvamVjdHMgPT0gbnVsbCA/IHdzbC5nZXRXZWJTZXJ2aWNlQ2xpZW50cyhtb25pdG9yKSA6IHdzbC5nZXRXZWJTZXJ2aWNlQ2xpZW50cyhwcm9qZWN0cyxtb25pdG9yKTsKLQkJCQkJCQlpZiAod3NMaXN0ICE9IG51bGwpCi0JCQkJCQkJewotCQkJCQkJCQl3ZWJTZXJ2aWNlQ2xpZW50cy5hZGRBbGwod3NMaXN0KTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IAotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4KQotCQkJCXsKLQkJCQkJLy8gUXVpZXRseSBieXBhc3MgYW55IElXZWJTZXJ2aWNlTG9jYXRvcnMgdGhhdCBmYWlsZWQgdG8gYmUgbG9hZGVkLgotCQkJCX0KLQkJCX0KLQkJfSAKLQkJcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRzLml0ZXJhdG9yKCk7CQotCX0gCi0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHJlZ2lzdGVyZWQgV2ViIFNlcnZpY2UgQ2F0ZWdvcnkgSURzLgotCSAqIEByZXR1cm4gQW4gYXJyYXksIG5ldmVyIG51bGwgYnV0IHBvc3NpYmx5IGVtcHR5LAotCSAqIG9mIHJlZ2lzdGVyZWQgV2ViIFNlcnZpY2UgQ2F0ZWdvcnkgZGVzY3JpcHRvcnMuCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDYXRlZ29yeVtdIGdldFdlYlNlcnZpY2VDYXRlZ29yaWVzICgpCi0JewotCQlMaW5rZWRMaXN0IGNhdGVnb3JpZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHdzbHIgPSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHJlZ0VsZW1lbnRzID0gd3Nsci5nZXRDb25maWdFbGVtZW50cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoRUxFTUVOVF9DQVRFR09SWS5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0TmFtZSgpKSkKLQkJCXsKLQkJCQljYXRlZ29yaWVzLmFkZChuZXcgV2ViU2VydmljZUNhdGVnb3J5KHJlZ0VsZW1lbnRzW2ldKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChXZWJTZXJ2aWNlQ2F0ZWdvcnlbXSljYXRlZ29yaWVzLnRvQXJyYXkobmV3IFdlYlNlcnZpY2VDYXRlZ29yeVswXSk7Ci0KLQl9CQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiByZWdpc3RlcmVkIFdlYiBTZXJ2aWNlIENhdGVnb3J5IElEcy4KLQkgKiBAcmV0dXJuIEFuIGFycmF5LCBuZXZlciBudWxsIGJ1dCBwb3NzaWJseSBlbXB0eSwKLQkgKiBvZiByZWdpc3RlcmVkIFdlYiBTZXJ2aWNlIENhdGVnb3J5IElEcy4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZUNhdGVnb3J5SWRzICgpCi0JewotCQlMaW5rZWRMaXN0IGNhdGVnb3JpZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHdzbHIgPSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHJlZ0VsZW1lbnRzID0gd3Nsci5nZXRDb25maWdFbGVtZW50cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoRUxFTUVOVF9DQVRFR09SWS5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0TmFtZSgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgaWQgPSByZWdFbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9JRCk7Ci0JCQkJaWYgKGlkICE9IG51bGwpCi0JCQkJewotCQkJCQljYXRlZ29yaWVzLmFkZChpZCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiAoU3RyaW5nW10pY2F0ZWdvcmllcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBXZWJTZXJ2aWNlQ2F0ZWdvcnkgd2l0aCB0aGUgZ2l2ZW4gSUQsCi0JICogb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBJRCBvZiB0aGUgY2F0ZWdvcnkgdG8gZmluZC4KLQkgKiBAcmV0dXJuIFRoZSBtYXRjaGluZyBjYXRlZ29yeSBkZXNjcmlwdG9yLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDYXRlZ29yeSBnZXRXZWJTZXJ2aWNlQ2F0ZWdvcnlCeUlkICggU3RyaW5nIGNhdGVnb3J5SWQgKQotCXsKLQkJV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5ID0gbnVsbDsKLQkJaWYgKGNhdGVnb3J5SWQgIT0gbnVsbCkKLQkJewotCQkJV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB3c2xyID0gV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcmVnRWxlbWVudHMgPSB3c2xyLmdldENvbmZpZ0VsZW1lbnRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQkJewotCQkJCWlmIChFTEVNRU5UX0NBVEVHT1JZLmVxdWFscyhyZWdFbGVtZW50c1tpXS5nZXROYW1lKCkpKQotCQkJCXsKLQkJCQkJU3RyaW5nIGlkID0gcmVnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfSUQpOwotCQkJCQlpZiAoY2F0ZWdvcnlJZC5lcXVhbHMoaWQpKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gbmV3IFdlYlNlcnZpY2VDYXRlZ29yeShyZWdFbGVtZW50c1tpXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGNhdGVnb3J5OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU0MmIwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25JbXBsOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICogCi0gKiBUaGlzIGNsYXNzIGlzIHByb3ZpZGVkIGZvciB0aGUgYWRkaXRpb24gb2YgbG9jYXRvciBleHRlbnNpb24gc3BlY2lmaWMgZnVuY3Rpb25zCi0gKiAKLSAqLwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24gZXh0ZW5kcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbCB7Ci0JCi0vLwkgQ29weXJpZ2h0Ci0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCQotCSBwdWJsaWMgV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0JICB7Ci0JICAgIHN1cGVyKGNvbmZpZ0VsZW1lbnQpOwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNkNmJmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGw7Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKgotICogUmV0cmlldmVzIGxvY2F0b3JzIHdoaWNoIGV4dGVuZCB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLkFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotICogTG9jYXRvcnMgbXVzdCBjcmVhdGUgYW4gZXh0ZW5zaW9uIGZvciB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IGluIG9yZGVyIHRvIGJlIHJldHJpZXZlZCBieQotICogdGhlIHJlZ2lzdHJ5LgotICovCi0KLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgZXh0ZW5kcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsIHsKLQotCSAvLyBDb3B5cmlnaHQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0JICAvKgotCSAgICogVGhpcyBpcyBhIHNpbmdsZXRvbiBiZWNhc3VlIGl0IHdhcyBkZWNpZGVkIHRoYXQgdGhlIG1lbW9yeSBmb290IHByaW50IAotCSAgICogaXMgbm90IGFzIGV4cGVuc2l2ZSBhcyB0aGUgdGltZSB0YWtlbiByZXRyaWV2aW5nIHRoZSBkYXRhCi0JICAgKiAKLQkgICAqLwotCSAgCi0JICAKLQkgIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgd3NscjsKLQkgIAotCSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLQkgIHsKLQkgIAlpZih3c2xyID09IG51bGwpIHdzbHIgPSBuZXcgV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSgpOwotCSAgICByZXR1cm4gd3NscjsKLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5KCkKLQkgIHsKLQkgICAgc3VwZXIoKTsKLQkgIH0KLQkgIAotCSAgLyoqCi0JICAqIENoaWxkcmVuIHJlZ2lzdHJpZXMgd2lsbCBoYXZlIGRpZmZlcmVudCBleHRlbnNpb24gdHlwZXMgCi0JICAqIEByZXR1cm4gV2Vic2VydmljZUV4dGVuc2lvbiBob2xkcyBhIGNvbmZpZyBlbGVtCi0JICAqIGZvciB0aGF0IGV4dGVuc2lvbiBjYXBhYmxlIG9mIGNyZWF0aW5nIGFuIGV4ZWN1dGFibGUgZmlsZQotCSAgKi8KLQkgIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0JICB7Ci0JICAgIHJldHVybiBuZXcgV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24oY29uZmlnRWxlbWVudCk7Ci0JICB9Ci0KLQkgIC8qKgotCSAgKiBDb250YWN0cyBwbGF0Zm9ybSByZWdpc3RyeSBhbmQgZ2V0cyBhbGwgbG9jYXRvcnMgd2hpY2ggaGF2ZSByZWdpc3RlcmVkIAotCSAgKiAgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4KLQkgICogQHJldHVybiBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBhbiBhcnJheSBvZiBlbGVtZW50cyB3aGljaCBjb250YWluIGxvY2F0b3JzIAotCSAgKiBleHRlbmRpbmcgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvci4KLQkgICovCi0JICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKQotCSAgewotCSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLndzdC53cyIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdG9yIik7Ci0JICAgIHJldHVybiBjb25maWc7ICAgIAotCSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dvcmtzcGFjZVdTRExMb2NhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dvcmtzcGFjZVdTRExMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzBkZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9Xb3Jrc3BhY2VXU0RMTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNjIwICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi0vKioKLSAqIEV4dGVuZHMgdGhlIFdlYiBTZXJ2aWNlcyBGaW5kZXIgRnJhbWV3b3JrLgotICogRmluZHMgYWxsIC53c2RsIGZpbGVzIGluIHRoZSB3b3Jrc3BhY2UuCi0gKiBOb3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4gIFdvcmtzcGFjZVdTRExMb2NhdG9yIHJlZ2lzdGVycyB3aXRoIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgCi0gKiBhbmQgaXMgYWNjZXNzZWQgYnkgdGhlIHtAbGluayBXZWJTZXJ2aWNlRmluZGVyfS4gCi0gKi8KLQotcHVibGljIGNsYXNzIFdvcmtzcGFjZVdTRExMb2NhdG9yIGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcgotewotCi0JcHJvdGVjdGVkIExpc3Qgd3NkbFNlcnZpY2VzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk1fUkVTID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7ICAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhUID0gIndzZGwiOyAgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIFdvcmtzcGFjZVdTRExMb2NhdG9yKCkKLQl7Ci0JCXN1cGVyKCk7CQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgYWxsIC53c2RsIGZpbGVzIGluIHRoZSB3b3Jrc3BhY2UuICBDdXJyZW50bHkgZG9lcyBub3QgZWxpbWluYXRlIG11bHRpcGxlIAotCSAqIG9jY3VyZW5jZXMgb2YgdGhlIHNhbWUgd2ViIHNlcnZpY2UuIAotCSAqIAotCSAqIFRPRE86IGFkZCBhIGxpc3RlbmVyIHRvIHRoZSB3b3Jrc3BhY2UgcmVzb3VyY2UgdHJlZSBzbyB0aGF0IGdldFdlYlNlcnZpY2VzIGRvZXNuJ3QgYWx3YXlzCi0JICogdXNlIHRoZSBXU0RMVmlzaXRvciB0byB3YWxrIHRoZSBlbnRpcmUgcmVzb3VyY2UgdHJlZS4gIFRoYXQgc2hvdWxkIG9ubHkgaGFwcGVuIG9uY2UuICBBZnRlcgotCSAqIHRoYXQgdGhlIHJlc291cmNlIHRyZWUgY2FuIGJlIG1vbml0b3JlZCBmb3IgbW9kaWZpY2F0aW9ucyB0byAud3NkbCBmaWxlcyBhbmQgY2hhbmdlcyBtYWRlIHRvIGEgY2FjaGUuIAotCSAqIAotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzIChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewkKLQkJaWYgKHdzZGxTZXJ2aWNlcyA9PSBudWxsKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQlXU0RMVmlzaXRvciB2aXNpdG9yID0gbmV3IFdTRExWaXNpdG9yKCk7Ci0JCQkJcm9vdC5hY2NlcHQodmlzaXRvcik7CQkKLQkJCQl3c2RsU2VydmljZXMgPSB2aXNpdG9yLmdldFdTREwoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXgpCi0JCQl7Ci0JCQkJLy8gRG8gbm90aGluZy4KLQkJCX0KLQkJfQotCQlyZXR1cm4gd3NkbFNlcnZpY2VzOwkJCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiBhbGwgLndzZGwgZmlsZXMgaW4gdGhlIGdpdmVuIHByb2plY3QuCi0JICogQ3VycmVudGx5IGRvZXMgbm90IGVsaW1pbmF0ZSBtdWx0aXBsZSBvY2N1cmVuY2VzIG9mIHRoZSBzYW1lIHdlYiBzZXJ2aWNlLiAKLQkgKiAKLQkgKiBUT0RPOiBhZGQgYSBsaXN0ZW5lciB0byB0aGUgd29ya3NwYWNlIHJlc291cmNlIHRyZWUgc28gdGhhdCBnZXRXZWJTZXJ2aWNlcyBkb2Vzbid0IGFsd2F5cwotCSAqIHVzZSB0aGUgV1NETFZpc2l0b3IgdG8gd2FsayB0aGUgZW50aXJlIHJlc291cmNlIHRyZWUuICBUaGF0IHNob3VsZCBvbmx5IGhhcHBlbiBvbmNlLiAgQWZ0ZXIKLQkgKiB0aGF0IHRoZSByZXNvdXJjZSB0cmVlIGNhbiBiZSBtb25pdG9yZWQgZm9yIG1vZGlmaWNhdGlvbnMgdG8gLndzZGwgZmlsZXMgYW5kIGNoYW5nZXMgbWFkZSB0byBhIGNhY2hlLiAKLQkgKiAKLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cwotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzIChJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlXU0RMVmlzaXRvciB2aXNpdG9yID0gbmV3IFdTRExWaXNpdG9yKCk7Ci0JCWlmIChwcm9qZWN0cyAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKGludCBwPTA7IHA8cHJvamVjdHMubGVuZ3RoOyBwKyspCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlwcm9qZWN0c1twXS5hY2NlcHQodmlzaXRvcik7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4KQotCQkJCXsKLQkJCQkJLy8gRG8gbm90aGluZy4KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHZpc2l0b3IuZ2V0V1NETCgpOwotCX0KLQotCS8qKgotCSAqICBVc2VzIHRoZSBWaXNpdG9yIHBhdHRlcm4gdG8gd2FsayB0aGUgd29ya3NwYWNlIHJlc291cmNlIHRyZWUKLQkgKi8KLQlwcml2YXRlIGNsYXNzIFdTRExWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlVmlzaXRvcgotCXsKLQotCQlwcml2YXRlIFZlY3RvciB3c2RsID0gbmV3IFZlY3RvcigpOwotCi0JCS8qKgotCQkgKiB2aXNpdHMgZXZlcnkgbm9kZSBvbiB0aGUgcmVzb3VyY2UgdHJlZSBzdG9wcGluZyBhIGZpbGUgcmVzb3VyY2VzCi0JCSAqIGlmIGZpbGUgcmVzb3VyY2UgaGFzIGV4dGVuc2lvbiAud3NkbCBhIFdlYlNlcnZpY2VJbmZvIG9iamVjdCBpcyBjcmVhdGVkIGFuZCBhZGRlZCB0byBhIHZlY3RvciAKLQkJICogIFRPRE86IGxvb2sgYXQgY2FjaGluZyB0byBlbGltaW5hdGUgZHVwbGljYXRlIHdlYiBzZXJ2aWNlIGRlZmluaXRpb25zIGluIHRoZSB2ZWN0b3IgcmV0dXJuZWQKLQkJICogIFRPRE86IGFkZCBtb3JlIGluZm9ybWF0aW9uIHRvIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QuICBDdXJyZW50bHkgb25seSB0aGUgcXVhbGlmaWVkIGZpbGVuYW1lIGlzIGFkZGVkLgotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlIHJlc291cmNlKQotCQl7Ci0JCQlpZiAocmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotCQkJeyAgICAgICAgCi0JCQkJU3RyaW5nIGV4dCA9IHJlc291cmNlLmdldEZpbGVFeHRlbnNpb24oKTsKLQkJCQlpZiAoZXh0ICE9IG51bGwgJiYgZXh0LmVxdWFsc0lnbm9yZUNhc2UoV1NETF9FWFQpKQotCQkJCXsKLQkJCQkJU3RyaW5nIHVybFN0cmluZyA9IFBMQVRGT1JNX1JFUyArIHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLQkJCQkJV2ViU2VydmljZUluZm8gd3NJbmZvID0gbmV3IFdlYlNlcnZpY2VJbmZvKCk7Ci0JCQkJCXdzSW5mby5zZXRXc2RsVVJMKHVybFN0cmluZyk7ICAgICAgICAgICAKLQkJCQkJd3NkbC5hZGQod3NJbmZvKTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCS8qKgotCQkgKiBSZXR1cm5zIGEgdmVjdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMuCi0JCSAqIEByZXR1cm4gdmVjdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMKLQkJICovCi0JCXB1YmxpYyBWZWN0b3IgZ2V0V1NETCgpCi0JCXsKLQkJCXJldHVybiB3c2RsOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2lsL0FkZFdTRExUb1dTSUxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzaWwvQWRkV1NETFRvV1NJTENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMwOGNiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzaWwvQWRkV1NETFRvV1NJTENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzaWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5JbnNwZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5RTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24uRXh0ZW5zaW9uQnVpbGRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuSW1wbGVtZW50ZWRCaW5kaW5nOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5SZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLlJlZmVyZW5jZWRTZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC54bWwuWE1MV3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLklVUklGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLlVSSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5JbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XU0lMTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkV1NETFRvV1NJTENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdfV1NJTCA9ICItd3NpbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR19XU0RMID0gIi13c2RsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX1JFU09MVkVfV1NETCA9ICItcmVzb2x2ZXdzZGwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdfSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FID0gIi1odHRwdXNlcm5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEID0gIi1odHRwcGFzc3dvcmQiOwotICBwcml2YXRlIFdXV0F1dGhlbnRpY2F0aW9uSGFuZGxlciB3d3dBdXRoSGFuZGxlcl87Ci0gIHByaXZhdGUgU3RyaW5nW10gYXJnc187Ci0gIHByaXZhdGUgU3RyaW5nIHdzaWxfOwotICBwcml2YXRlIEFycmF5TGlzdCB3c2Rsc187Ci0gIHByaXZhdGUgYm9vbGVhbiByZXNvbHZlV1NETF87Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBVc2VybmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBQYXNzd29yZF87Ci0KLSAgcHVibGljIEFkZFdTRExUb1dTSUxDb21tYW5kKCkKLSAgewotICAgIHd3d0F1dGhIYW5kbGVyXyA9IG51bGw7Ci0gICAgYXJnc18gPSBuZXcgU3RyaW5nWzBdOwotICAgIGNsZWFyUGFyc2VkQXJncygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNsZWFyUGFyc2VkQXJncygpCi0gIHsKLSAgICB3c2lsXyA9IG51bGw7Ci0gICAgaWYgKHdzZGxzXyA9PSBudWxsKQotICAgICAgd3NkbHNfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGVsc2UKLSAgICAgIHdzZGxzXy5jbGVhcigpOwotICAgIHJlc29sdmVXU0RMXyA9IGZhbHNlOwotICAgIGh0dHBVc2VybmFtZV8gPSBudWxsOwotICAgIGh0dHBQYXNzd29yZF8gPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGVzIHRoZSBDb21tYW5kLgotICAgKiAKLSAgICogQHBhcmFtIGVudmlyb25tZW50Ci0gICAqICAgICAgICAgICAgVGhlIGVudmlyb25tZW50LiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcmV0dXJuIEEgPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QgaW5kaWNhdGluZyB0aGUgZGVncmVlIHRvIHdoaWNoIHRoZQotICAgKiAgICAgICAgIDxjb2RlPmV4ZWN1dGU8L2NvZGU+IG1ldGhvZCB3YXMgc3VjY2Vzc2Z1bC4gQSB2YWx1ZCBvZiA8Y29kZT5udWxsPC9jb2RlPiwKLSAgICogICAgICAgICBvciBhIFN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgbGVzcyB0aGFuIDxjb2RlPlN0YXR1cy5FUlJPUjwvY29kZT4KLSAgICogICAgICAgICBzaWduaWZpZXMgc3VjY2Vzcy4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgICBJVVJJRmFjdG9yeSB1cmlGYWN0b3J5ID0gZW52aXJvbm1lbnQuZ2V0VVJJRmFjdG9yeSgpOwotICAgIC8vIFBhcnNlIGFyZ3VtZW50cwotICAgIHRyeQotICAgIHsKLSAgICAgIHBhcnNlQXJndW1lbnRzKCk7Ci0gICAgfQotICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uIGlhZSkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfSUxMRUdBTF9BUkdVTUVOVFMsIGlhZSk7Ci0gICAgfQotICAgIGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFMsIGUpOwotICAgIH0KLSAgICAvLyBDcmVhdGUgbmV3IFdTSUwgZG9jdW1lbnQKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvY3VtZW50ID0gbnVsbDsKLSAgICBVUkwgd3NpbFVSTCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgd3NpbERvY3VtZW50ID0gV1NJTERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0gICAgICB3c2lsVVJMID0gbmV3IFVSTCh3c2lsXyk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9JTlZBTElEX1dTSUxfVVJJLCBtdXJsZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGNhdGNoIChXU0lMRXhjZXB0aW9uIHdzaWxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHdzaWxlKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgLy8gUmVhZCBXU0lMCi0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1cmlGYWN0b3J5Lm5ld1VSSSh3c2lsVVJMKS5nZXRJbnB1dFN0cmVhbSgpOwotICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHdzaWxEb2N1bWVudC5yZWFkKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotICAgICAgICBpcy5jbG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVVJJRXhjZXB0aW9uIHVyaWUpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTiwgdXJpZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTiwgaW9lKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTSUxFeGNlcHRpb24gd3NpbGUpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTiwgd3NpbGUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAvLyBpbnRlcm5hbEV4ZWN1dGUKLSAgICBTdHJpbmcgaHR0cFVzZXJuYW1lID0gbnVsbDsKLSAgICBTdHJpbmcgaHR0cFBhc3N3b3JkID0gbnVsbDsKLSAgICBpZiAod3NkbHNfLnNpemUoKSA9PSAxICYmIGh0dHBVc2VybmFtZV8gIT0gbnVsbCAmJiBodHRwUGFzc3dvcmRfICE9IG51bGwpCi0gICAgewotICAgICAgaHR0cFVzZXJuYW1lID0gaHR0cFVzZXJuYW1lXzsKLSAgICAgIGh0dHBQYXNzd29yZCA9IGh0dHBQYXNzd29yZF87Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c2Rsc18uaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTdHJpbmcgd3NkbCA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gbnVsbDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBpbnRlcm5hbEV4ZWN1dGUoZW52aXJvbm1lbnQsIHdzaWxEb2N1bWVudCwgcGxhdGZvcm0yRmlsZSh1cmlGYWN0b3J5LCB3c2lsXyksIHdzZGwsIGh0dHBVc2VybmFtZSwgaHR0cFBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHd3d0F1dGhIYW5kbGVyXyAhPSBudWxsICYmIGh0dHBVc2VybmFtZSA9PSBudWxsICYmIGh0dHBQYXNzd29yZCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgd3d3QXV0aEhhbmRsZXJfLmhhbmRsZVdXV0F1dGhlbnRpY2F0aW9uKHd3d2FlKTsKLSAgICAgICAgICBTdHJpbmcgaGFuZGxlclVzZXJuYW1lID0gd3d3QXV0aEhhbmRsZXJfLmdldFVzZXJuYW1lKCk7Ci0gICAgICAgICAgU3RyaW5nIGhhbmRsZXJQYXNzd29yZCA9IHd3d0F1dGhIYW5kbGVyXy5nZXRQYXNzd29yZCgpOwotICAgICAgICAgIGlmIChoYW5kbGVyVXNlcm5hbWUgIT0gbnVsbCAmJiBoYW5kbGVyUGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3RhdHVzID0gaW50ZXJuYWxFeGVjdXRlKGVudmlyb25tZW50LCB3c2lsRG9jdW1lbnQsIHBsYXRmb3JtMkZpbGUodXJpRmFjdG9yeSwgd3NpbF8pLCB3c2RsLCBoYW5kbGVyVXNlcm5hbWUsIGhhbmRsZXJQYXNzd29yZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gd3d3YWUyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJU3RhdHVzIHd3d2FlU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5SRVNPTFZBQkxFX1dTREwsIHd3d2FlMi5nZXRJT0V4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHd3d2FlU3RhdHVzKTsKLSAgICAgICAgICAgICAgcmV0dXJuIHd3d2FlU3RhdHVzOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdHVzID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RhdHVzIHMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTlJFU09MVkFCTEVfV1NETCwgd3d3YWUuZ2V0SU9FeGNlcHRpb24oKSk7Ci0gICAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHMpOwotICAgICAgICAgIHJldHVybiBzOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgIT0gU3RhdHVzLk9LKQotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAvLyBXcml0ZSBXU0lMCi0gICAgdHJ5Ci0gICAgewotICAgICAgWE1MV3JpdGVyIHhtbFdyaXRlciA9IG5ldyBYTUxXcml0ZXIoKTsKLSAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHVyaUZhY3RvcnkubmV3VVJJKHdzaWxVUkwpLmdldE91dHB1dFN0cmVhbSgpOwotICAgICAgaWYgKG9zICE9IG51bGwpCi0gICAgICAgIHhtbFdyaXRlci53cml0ZURvY3VtZW50KHdzaWxEb2N1bWVudCwgb3MpOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKLSAgICAgIG9zLmNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoIChVUklFeGNlcHRpb24gdXJpZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTSUwsIHVyaWUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NJTCwgaW9lKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTSUxFeGNlcHRpb24gd3NpbGUpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9XUklURV9XU0lMLCB3c2lsZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHJpdmF0ZSBJU3RhdHVzIGludGVybmFsRXhlY3V0ZShJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIFdTSUxEb2N1bWVudCB3c2lsRG9jdW1lbnQsIFN0cmluZyB3c2lsLCBTdHJpbmcgd3NkbCwgU3RyaW5nIGh0dHBVc2VybmFtZSwgU3RyaW5nIGh0dHBQYXNzd29yZCkgdGhyb3dzIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIEFycmF5TGlzdCB3c2RsU2VydmljZSA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBBcnJheUxpc3Qgd3NkbEJpbmRpbmcgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKHJlc29sdmVXU0RMXykKLSAgICB7Ci0gICAgICAvLyBQYXJzZSBXU0RMCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmaW5pdGlvbiA9IHBhcnNlV1NETCh3c2RsLCB3c2RsU2VydmljZSwgd3NkbEJpbmRpbmcsIGh0dHBVc2VybmFtZSwgaHR0cFBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSSSwgbXVybGUpOwotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5SRVNPTFZBQkxFX1dTREwsIGlvZSk7Ci0gICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgfQotICAgICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OLCBwY2UpOwotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gc2F4ZSkKLSAgICAgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9NQUxGT1JNRURfV1NETCwgc2F4ZSk7Ci0gICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgfQotICAgIH0KLSAgICAvLyBBZGQgV1NETCB0byBXU0lMCi0gICAgdHJ5Ci0gICAgewotICAgICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvY3VtZW50LmdldEluc3BlY3Rpb24oKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHdzaWxEb2N1bWVudC5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBFbGVtZW50IGRvY3VtZW50YXRpb24gPSBkZWZpbml0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICAgIEFic3RyYWN0IHNlcnZpY2VBYnN0cmFjdCA9IHdzaWxEb2N1bWVudC5jcmVhdGVBYnN0cmFjdCgpOwotICAgICAgICBzZXJ2aWNlQWJzdHJhY3Quc2V0VGV4dChFbGVtZW50MlN0cmluZyhkb2N1bWVudGF0aW9uKSk7Ci0gICAgICAgIHNlcnZpY2UuYWRkQWJzdHJhY3Qoc2VydmljZUFic3RyYWN0KTsKLSAgICAgIH0KLSAgICAgIERlc2NyaXB0aW9uIGRlc2MgPSB3c2lsRG9jdW1lbnQuY3JlYXRlRGVzY3JpcHRpb24oKTsKLSAgICAgIGRlc2Muc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShXU0RMQ29uc3RhbnRzLk5TX1VSSV9XU0RMKTsKLSAgICAgIGRlc2Muc2V0TG9jYXRpb24oZ2V0UmVsYXRpdmVVUkkod3NpbCwgd3NkbCkpOwotICAgICAgRXh0ZW5zaW9uQnVpbGRlciBleHRCdWlsZGVyID0gd3NpbERvY3VtZW50LmdldEV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0QnVpbGRlcihXU0RMQ29uc3RhbnRzLk5TX1VSSV9XU0lMX1dTREwpOwotICAgICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCB8fCBlbmRwb2ludFByZXNlbnQoZGVmaW5pdGlvbikpCi0gICAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c2RsU2VydmljZS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZSA9IChSZWZlcmVuY2UpIGV4dEJ1aWxkZXIuY3JlYXRlRWxlbWVudChuZXcgUU5hbWUoV1NETENvbnN0YW50cy5OU19VUklfV1NJTF9XU0RMLCBXU0RMQ29uc3RhbnRzLkVMRU1fUkVGRVJFTkNFKSk7Ci0gICAgICAgICAgcmVmZXJlbmNlLnNldEVuZHBvaW50UHJlc2VudChuZXcgQm9vbGVhbih0cnVlKSk7Ci0gICAgICAgICAgUmVmZXJlbmNlZFNlcnZpY2UgcmVmU2VydmljZSA9IChSZWZlcmVuY2VkU2VydmljZSkgZXh0QnVpbGRlci5jcmVhdGVFbGVtZW50KG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLk5TX1VSSV9XU0lMX1dTREwsIFdTRExDb25zdGFudHMuRUxFTV9SRUZfU0VSVklDRSkpOwotICAgICAgICAgIHJlZlNlcnZpY2Uuc2V0UmVmZXJlbmNlZFNlcnZpY2VOYW1lKChRTmFtZSkgaXQubmV4dCgpKTsKLSAgICAgICAgICByZWZlcmVuY2Uuc2V0UmVmZXJlbmNlZFNlcnZpY2UocmVmU2VydmljZSk7Ci0gICAgICAgICAgZGVzYy5zZXRFeHRlbnNpb25FbGVtZW50KHJlZmVyZW5jZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZSA9IChSZWZlcmVuY2UpIGV4dEJ1aWxkZXIuY3JlYXRlRWxlbWVudChuZXcgUU5hbWUoV1NETENvbnN0YW50cy5OU19VUklfV1NJTF9XU0RMLCBXU0RMQ29uc3RhbnRzLkVMRU1fUkVGRVJFTkNFKSk7Ci0gICAgICAgIHJlZmVyZW5jZS5zZXRFbmRwb2ludFByZXNlbnQobmV3IEJvb2xlYW4oZmFsc2UpKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHdzZGxCaW5kaW5nLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBJbXBsZW1lbnRlZEJpbmRpbmcgYmluZGluZyA9IChJbXBsZW1lbnRlZEJpbmRpbmcpIGV4dEJ1aWxkZXIuY3JlYXRlRWxlbWVudChuZXcgUU5hbWUoV1NETENvbnN0YW50cy5OU19VUklfV1NJTF9XU0RMLCBXU0RMQ29uc3RhbnRzLkVMRU1fSU1QTF9CSU5ESU5HKSk7Ci0gICAgICAgICAgYmluZGluZy5zZXRCaW5kaW5nTmFtZSgoUU5hbWUpIGl0Lm5leHQoKSk7Ci0gICAgICAgICAgcmVmZXJlbmNlLmFkZEltcGxlbWVudGVkQmluZGluZyhiaW5kaW5nKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc2VydmljZS5hZGREZXNjcmlwdGlvbihkZXNjKTsKLSAgICAgIGluc3BlY3Rpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTSUxFeGNlcHRpb24gd3NpbGUpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTiwgd3NpbGUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTiwgdCk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYsIGFuZCBvbmx5IGlmLCB0aGUgQ29tbWFuZCdzIDxjb2RlPnVuZG88L2NvZGU+Ci0gICAqIG1ldGhvZCBpcyBzdXBwb3J0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIENvbW1hbmQgc3VwcG9ydHMgYmVpbmcgdW5kb25lLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRvYWJsZSgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogVW5kb2VzIHRoZSBDb21tYW5kLgotICAgKiAKLSAgICogQHBhcmFtIGVudmlyb25tZW50Ci0gICAqICAgICAgICAgICAgVGhlIGVudmlyb25tZW50LiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcmV0dXJuIEEgPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QgaW5kaWNhdGluZyB0aGUgZGVncmVlIHRvIHdoaWNoIHRoZQotICAgKiAgICAgICAgIDxjb2RlPnVuZG88L2NvZGU+IG1ldGhvZCB3YXMgc3VjY2Vzc2Z1bC4gQSB2YWx1ZCBvZiA8Y29kZT5udWxsPC9jb2RlPiwKLSAgICogICAgICAgICBvciBhIFN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgbGVzcyB0aGFuIDxjb2RlPlN0YXR1cy5FUlJPUjwvY29kZT4KLSAgICogICAgICAgICBzaWduaWZpZXMgc3VjY2Vzcy4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIHVuZG8oSUVudmlyb25tZW50IGVudmlyb25tZW50KQotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIERlZmluaXRpb24gcGFyc2VXU0RMKFN0cmluZyB3c2RsLCBBcnJheUxpc3Qgd3NkbFNlcnZpY2UsIEFycmF5TGlzdCB3c2RsQmluZGluZywgU3RyaW5nIGh0dHBVc2VybmFtZSwgU3RyaW5nIGh0dHBQYXNzd29yZCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VzUGFyc2VyIHdzUGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyKHdzZGwpOwotICAgIGlmIChodHRwVXNlcm5hbWUgIT0gbnVsbCAmJiBodHRwUGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUoaHR0cFVzZXJuYW1lKTsKLSAgICAgIHdzUGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChodHRwUGFzc3dvcmQpOwotICAgIH0KLSAgICB3c1BhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9OT05FKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsKTsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIE1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZXJ2aWNlcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB3c2RsU2VydmljZS5hZGQocGFyc2VRTmFtZSgoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkgaXQubmV4dCgpKSk7Ci0gICAgICBNYXAgYmluZGluZ3MgPSBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYmluZGluZ3Mua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgd3NkbEJpbmRpbmcuYWRkKHBhcnNlUU5hbWUoKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIGl0Lm5leHQoKSkpOwotICAgIH0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBlbmRwb2ludFByZXNlbnQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgcmV0dXJuIChkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkuc2l6ZSgpID4gMCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0QXJndW1lbnRzKCkKLSAgewotICAgIHJldHVybiBhcmdzXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFyZ3VtZW50cyhTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgYXJnc18gPSBhcmdzOwotICB9Ci0KLSAgcHVibGljIFdXV0F1dGhlbnRpY2F0aW9uSGFuZGxlciBnZXRXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIoKQotICB7Ci0gICAgcmV0dXJuIHd3d0F1dGhIYW5kbGVyXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdXV0F1dGhlbnRpY2F0aW9uSGFuZGxlcihXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIgd3d3QXV0aEhhbmRsZXIpCi0gIHsKLSAgICB3d3dBdXRoSGFuZGxlcl8gPSB3d3dBdXRoSGFuZGxlcjsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwYXJzZUFyZ3VtZW50cygpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uCi0gIHsKLSAgICBjbGVhclBhcnNlZEFyZ3MoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3NfLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChBUkdfV1NJTC5lcXVhbHMoYXJnc19baV0pKQotICAgICAgICB3c2lsXyA9IGFyZ3NfWysraV07Ci0gICAgICBlbHNlIGlmIChBUkdfV1NETC5lcXVhbHMoYXJnc19baV0pKQotICAgICAgICB3c2Rsc18uYWRkKGFyZ3NfWysraV0pOwotICAgICAgZWxzZSBpZiAoQVJHX1JFU09MVkVfV1NETC5lcXVhbHMoYXJnc19baV0pKQotICAgICAgICByZXNvbHZlV1NETF8gPSB0cnVlOwotICAgICAgZWxzZSBpZiAoQVJHX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRS5lcXVhbHMoYXJnc19baV0pKQotICAgICAgICBodHRwVXNlcm5hbWVfID0gYXJnc19bKytpXTsKLSAgICAgIGVsc2UgaWYgKEFSR19IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgaHR0cFBhc3N3b3JkXyA9IGFyZ3NfWysraV07Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uKGFyZ3NfW2ldKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFFOYW1lIHBhcnNlUU5hbWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxbmFtZSkKLSAgewotICAgIHJldHVybiBuZXcgUU5hbWUocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIEVsZW1lbnQyU3RyaW5nKEVsZW1lbnQgZSkgdGhyb3dzIFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBieXRlW10gYiA9IG5ldyBieXRlWzBdOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgRE9NU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZSk7Ci0gICAgICBUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLSAgICAgIHNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLSAgICAgIHNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjIiKTsKLSAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KGJhb3MpKTsKLSAgICAgIGJhb3MuY2xvc2UoKTsKLSAgICAgIGIgPSBiYW9zLnRvQnl0ZUFycmF5KCk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgU3RyaW5nKGIpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgcGxhdGZvcm0yRmlsZShJVVJJRmFjdG9yeSB1cmlGYWN0b3J5LCBTdHJpbmcgdXJpKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIHVyaUZhY3RvcnkubmV3VVJJKHVyaSkuYXNGaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgY2hhciBGV0RfU0xBU0ggPSAnLyc7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBCV0RfU0xBU0ggPSAnXFwnOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBwYXJlbnREaXIgPSAiLi4vIjsKLQotICBwcml2YXRlIFN0cmluZyBnZXRSZWxhdGl2ZVVSSShTdHJpbmcgYmFzZVVSSSwgU3RyaW5nIHRhcmdldFVSSSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBiYXNlVVJJQ29weSA9IGJhc2VVUkkucmVwbGFjZShCV0RfU0xBU0gsIEZXRF9TTEFTSCk7Ci0gICAgICBTdHJpbmcgdGFyZ2V0VVJJQ29weSA9IHRhcmdldFVSSS5yZXBsYWNlKEJXRF9TTEFTSCwgRldEX1NMQVNIKTsKLSAgICAgIGludCBtYXRjaGluZ0luZGV4ID0gLTE7Ci0gICAgICBpbnQgaW5kZXggPSB0YXJnZXRVUklDb3B5LmluZGV4T2YoRldEX1NMQVNIKTsKLSAgICAgIHdoaWxlIChpbmRleCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGJhc2VVUklDb3B5LnN0YXJ0c1dpdGgodGFyZ2V0VVJJQ29weS5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXRjaGluZ0luZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgaW5kZXggPSB0YXJnZXRVUklDb3B5LmluZGV4T2YoRldEX1NMQVNILCBpbmRleCArIDEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChtYXRjaGluZ0luZGV4ICE9IC0xKQotICAgICAgewotICAgICAgICBpbnQgc2xhc2hDb3VudCA9IC0xOwotICAgICAgICBpbnQgZnJvbUluZGV4ID0gbWF0Y2hpbmdJbmRleDsKLSAgICAgICAgd2hpbGUgKGZyb21JbmRleCAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHNsYXNoQ291bnQrKzsKLSAgICAgICAgICBmcm9tSW5kZXggPSBiYXNlVVJJQ29weS5pbmRleE9mKEZXRF9TTEFTSCwgZnJvbUluZGV4ICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nQnVmZmVyIHJlbGF0aXZlVVJJID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNsYXNoQ291bnQ7IGkrKykKLSAgICAgICAgICByZWxhdGl2ZVVSSS5hcHBlbmQocGFyZW50RGlyKTsKLSAgICAgICAgcmVsYXRpdmVVUkkuYXBwZW5kKHRhcmdldFVSSS5zdWJzdHJpbmcobWF0Y2hpbmdJbmRleCArIDEsIHRhcmdldFVSSS5sZW5ndGgoKSkpOwotICAgICAgICByZXR1cm4gcmVsYXRpdmVVUkkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIHRhcmdldFVSSTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTE2OGJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RXZWJTZXJ2aWNlIGltcGxlbWVudHMgSVdlYlNlcnZpY2UgewotCQotCXByaXZhdGUgV2ViU2VydmljZUluZm8gaW5mbzsKLQotCXB1YmxpYyBBYnN0cmFjdFdlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbykgewotCQl0aGlzLmluZm8gPSBpbmZvOwotCX0KLQkKLQotCXB1YmxpYyBXZWJTZXJ2aWNlSW5mbyBnZXRXZWJTZXJ2aWNlSW5mbygpIHsKLQkJcmV0dXJuIGluZm87Ci0JfQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBhc3NlbWJsZShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgZGVwbG95KElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgcnVuKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZUNsaWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZUNsaWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNhNTcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50IGltcGxlbWVudHMgSVdlYlNlcnZpY2VDbGllbnQgewotCQotCXByaXZhdGUgV2ViU2VydmljZUNsaWVudEluZm8gaW5mbzsKLQotCXB1YmxpYyBBYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQoV2ViU2VydmljZUNsaWVudEluZm8gaW5mbykgewotCQl0aGlzLmluZm8gPSBpbmZvOwotCX0KLQkKLQotCXB1YmxpYyBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBnZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpIHsKLQkJcmV0dXJuIGluZm87Ci0JfQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBhc3NlbWJsZShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgZGVwbG95KElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgcnVuKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZVJ1bnRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc5MDMzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZSBpbXBsZW1lbnRzIElXZWJTZXJ2aWNlUnVudGltZSB7Ci0KLQlwdWJsaWMgYWJzdHJhY3QgSVdlYlNlcnZpY2UgZ2V0V2ViU2VydmljZShXZWJTZXJ2aWNlSW5mbyBpbmZvKTsKLQkvKioKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgSVdlYlNlcnZpY2VDbGllbnQgZ2V0V2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBpbmZvKTsKLQkvKioKLQkgKi8KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFubm91bmNlKElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UpCi0JewotCQkvL1RPRE8gcHJvdmlkZSBhIGJvaWxlci1wbGF0ZSBhbm5vdW5jZSBpbXBsZW1lbnRhdGlvbi4KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBjZTUxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEwNyAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTMwIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjYgICAxOTg0Mzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLQotcHVibGljIGNsYXNzIEFic3RyYWN0V2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIGltcGxlbWVudHMKLQkJSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciB7Ci0KLQlwdWJsaWMgSVN0YXR1cyBjaGVja1J1bnRpbWVDb21wYXRpYmlsaXR5KFN0cmluZyBzZXJ2ZXJUeXBlSWQsIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkLAotCQkJU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgcHJvamVjdFR5cGVJZCwgU3RyaW5nIGVhclByb2plY3ROYW1lKSB7Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBjaGVja1NlcnZpY2VDbGllbnRDb21wYXRpYmlsaXR5KGJvb2xlYW4gc2VydmljZU5lZWRFQVIsCi0JCQlTdHJpbmcgc2VydmljZUVBUk5hbWUsIFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUsCi0JCQlib29sZWFuIGNsaWVudE5lZWRFQVIsIFN0cmluZyBjbGllbnRFQVJOYW1lLAotCQkJU3RyaW5nIGNsaWVudFByb2plY3ROYW1lKSB7Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMzcxOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUNvbnRleHQgewotCQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0Q2hlY2tPdXRGaWxlcygpOwotCQotCXB1YmxpYyBib29sZWFuIGdldENsaWVudCgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldENyZWF0ZUZvbGRlcnMoKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3koKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbCgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldE92ZXJXcml0ZUZpbGVzKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0UHVibGlzaCgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldFJ1bigpOwotCQotCXB1YmxpYyBXZWJTZXJ2aWNlU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0KCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JTWVyZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSU1lcmdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmRjNzI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JTWVyZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci0KLS8qCi0gKiBUaGUgSU1lcmdlciBpbnRlcmZhY2UgaGFuZGxlcyBtZXJnaW5nIG9mIHRoZSBhcnJheSBvZiBJRmlsZXMuICBVc2VycyBvZiB0aGUgSU1lcmdlciBpbnRlcmZhY2Ugc2hvdWxkOgotICogMS4gQ2FsbCBsb2FkKCkgd2l0aCB0aGUgYXJyYXkgb2YgSUZpbGVzIHRvIGxvYWQgYW5kIHN0b3JlZCBpbiBtZXJnZSBtb2RlbHMKLSAqIDIuIENhbGwgbWVyZ2UoKSB0byBtZXJnZSB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgSUZpbGVzIHdpdGggdGhlIG1lcmdlZCBtb2RlbHMgdGhhdCBoYWQgYmVlbiBzdG9yZWQgCi0gKiBwcmV2aW91c2x5IChhdCB0aGUgdGltZSBsb2FkIHdhcyBjYWxsZWQpLgotICogCi0gKiBUaGlzIGNsYXNzIGlzIG5vdCBtZWFudCB0byBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseS4gIEltcGxlbWVudGVycyBzaG91bGQgc3ViY2xhc3MgdGhlIE1lcmdlciBjbGFzcyBpbnN0ZWFkLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElNZXJnZXIgeyAKLQkKLQkvKioKLQkgKiBMb2FkIHRoZSB1cmlzIHNwZWNpZmllZCBzbyB0aGF0IGEgbWVyZ2UgY2FuIGJlIGRvbmUgbGF0ZXIgb24KLQkgKiBAcGFyYW0gdXJscwotCSAqIEByZXR1cm4gSVN0YXR1cwotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGxvYWQoSUZpbGVbXSBmaWxlcyk7Ci0JCi0JLyoqCi0JICogTWVyZ2UgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgYXJyYXkgb2YgSUZpbGVzIHdpdGggd2hhdCBoYWQgYmVlbiBzdG9yZWQgd2hlbiBsb2FkIHdhcyBmaXJzdCBjYWxsZWQgYW5kIHdyaXRlIAotCSAqIHRoZSBtZXJnZWQgY29udGVudCBiYWNrIGluIHRoZSBmaWxlcy4gCi0JICogQHBhcmFtIG1vbml0b3IgUHJvZ3Jlc3MgbW9uaXRvcgotCSAqIEBwYXJhbSBzdGF0dXNIYW5kbGVyIFRoZSBzdGF0dXMgaGFuZGxlciB1c2VkIHRvIGhhbmRsZSB0aGUgd3JpdGluZyBvZiB0aGUgbWVyZ2VkIGNvbnRlbnQKLQkgKiBAcmV0dXJuIElTdGF0dXMKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBtZXJnZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lTZWxlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JU2VsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4OTNiNWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lTZWxlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotcHVibGljIGludGVyZmFjZSBJU2VsZWN0aW9uIHsKLQkKLQlPYmplY3RbXSBnZXRTZWxlY3Rpb24oKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIzZTYxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlIHsKLQotCS8qKgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlSW5mbyBnZXRXZWJTZXJ2aWNlSW5mbygpOwotCQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGVwbG95KElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhc3NlbWJsZShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgcnVuKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VDbGllbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZUNsaWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzIxZWNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZUNsaWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotcHVibGljIGludGVyZmFjZSBJV2ViU2VydmljZUNsaWVudCB7Ci0JCi0JLyoqCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDbGllbnRJbmZvIGdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCk7Ci0JCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBpbnN0YWxsKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBydW4oSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsJCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVB1Ymxpc2hlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUHVibGlzaGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZGM1ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUHVibGlzaGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlUHVibGlzaGVyIHsKLQkKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHB1Ymxpc2goSUVudmlyb25tZW50IGVudiwgSVdlYlNlcnZpY2Ugd3MpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VSdW50aW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmOGMyZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUnVudGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlUnVudGltZSB7Ci0JCi0JLyoqCi0JICovCi0JcHVibGljIElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbyk7Ci0JLyoqCi0JICovCi0JcHVibGljIElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2VDbGllbnQoV2ViU2VydmljZUNsaWVudEluZm8gaW5mbyk7Ci0JLyoqCi0JICovCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhbm5vdW5jZShJV2ViU2VydmljZSB3ZWJTZXJ2aWNlKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZTM0NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEwNyAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTMwIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAzMjYgICAxOTg0Mzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotCi0vKgotICogVGhlIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgaW50ZXJmYWNlIGFsbG93IHRoZSBleHRlbmRlciB0byBoYXZlIGEgd2F5IHRvIGNoZWNrIHRoZSAKLSAqIHRoZSBXZWIgc2VydmljZSBydW50aW1lJ3MgY29tcGF0aWJpbGl0eSB3aXRoIHNlcnZlciB0eXBlLCBwcm9qZWN0LCBwcm9qZWN0IHR5cGUgYW5kIEVBUi4KLSAqIFRoaXMgY2xhc3MgY2FuIGJlIHByb3ZpZGVkIGFzIHRoZSBydW50aW1lQ2hlY2tlciBhdHRyaWJ1dGUgaW4gdGhlIAotICogIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcyIgYW5kCi0gKiAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnNlcnZpY2VSdW50aW1lcyIgZXh0ZW5zaW9uIHBvaW50cy4KLSAqLwotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgewotCi0JLyoqCi0JICogQHBhcmFtIHNlcnZlclR5cGVJZCBzZXJ2ZXIgdHlwZSBJRAotCSAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5hY2VJZCBzZXJ2ZXIgaW5zdGFuY2UgSUQKLQkgKiBAcGFyYW0gcHJvamVjdE5hbWUgcHJvamVjdCBuYW1lIAotCSAqIEBwYXJhbSBwcm9qZWN0VHlwZUlkIHByb2plY3QgdGVtcGxhdGUgSUQsIHNldCB0byAiIiBpZiB0aGUgcHJvamVjdCBzcGVjaWZpZWQgYnkgcHJvamVjdE5hbWUgYWxyZWFkeSBleGlzdCAKLQkgKiBAcGFyYW0gZWFyUHJvamVjdE5hbWUgRUFSIHByb2plY3QgbmFtZQotCSAqIEByZXR1cm4gSVN0YXR1cwotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGNoZWNrUnVudGltZUNvbXBhdGliaWxpdHkoU3RyaW5nIHNlcnZlclR5cGVJZCwgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQsIAotCQkJU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgcHJvamVjdFR5cGVJZCwgU3RyaW5nIGVhclByb2plY3ROYW1lKTsKLQkKLQkvKioKLQkgKiBAcGFyYW0gc2VydmljZU5lZWRFQVIKLQkgKiBAcGFyYW0gc2VydmljZUVBUk5hbWUKLQkgKiBAcGFyYW0gc2VydmljZVByb2plY3ROYW1lCi0JICogQHBhcmFtIGNsaWVudE5lZWRFQVIKLQkgKiBAcGFyYW0gY2xpZW50RUFSTmFtZQotCSAqIEBwYXJhbSBjbGllbnRQcm9qZWN0TmFtZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBjaGVja1NlcnZpY2VDbGllbnRDb21wYXRpYmlsaXR5KGJvb2xlYW4gc2VydmljZU5lZWRFQVIsIFN0cmluZyBzZXJ2aWNlRUFSTmFtZSwgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSwgCi0JCQlib29sZWFuIGNsaWVudE5lZWRFQVIsIFN0cmluZyBjbGllbnRFQVJOYW1lLCBTdHJpbmcgY2xpZW50UHJvamVjdE5hbWUpOwotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlVGVzdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3NDhhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2VUZXN0ZXIgewotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdlbmVyYXRlKFRlc3RJbmZvIHRlc3RJbmZvKTsKLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBsYXVuY2goVGVzdEluZm8gdGVzdEluZm8pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L01lcmdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L01lcmdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk1N2ZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9NZXJnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotCi0vKgotICogTWVyZ2VyIGlzIHRoZSBBYnN0cmFjdCBjbGFzcyB0aGF0IHNob3VsZCBiZSBzdWJjbGFzc2VkLiAKLSAqLwotcHVibGljIGNsYXNzIE1lcmdlciBpbXBsZW1lbnRzIElNZXJnZXIgewotCi0JcHVibGljIElTdGF0dXMgbG9hZChJRmlsZVtdIGZpbGVzKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIG1lcmdlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlcikgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9TaW1wbGVDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvU2ltcGxlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjg0YjRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9TaW1wbGVDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHQgewotCi0JYm9vbGVhbiBkZXZlbG9wOwotCWJvb2xlYW4gYXNzZW1ibGU7Ci0JYm9vbGVhbiBkZXBsb3k7Ci0JYm9vbGVhbiBpbnN0YWxsOwotCWJvb2xlYW4gcnVuOwotCWJvb2xlYW4gY2xpZW50OwotCWJvb2xlYW4gdGVzdDsKLQlib29sZWFuIHB1Ymxpc2g7Ci0JCi0JV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvOwotCQotCWJvb2xlYW4gb3ZlcndyaXRlRmlsZXM7Ci0JYm9vbGVhbiBjcmVhdGVGb2xkZXJzOwotCWJvb2xlYW4gY2hlY2tPdXRGaWxlczsKLQkKLQkKLQkKLQkKLQlwdWJsaWMgU2ltcGxlQ29udGV4dCgpCi0JewotCQlzdXBlcigpOwotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLQl9Ci0KLQlwdWJsaWMgU2ltcGxlQ29udGV4dChib29sZWFuIGRldmVsb3AsIGJvb2xlYW4gYXNzZW1ibGUsIGJvb2xlYW4gZGVwbG95LCBib29sZWFuIGluc3RhbGwsIGJvb2xlYW4gcnVuLCBib29sZWFuIGNsaWVudCwgYm9vbGVhbiB0ZXN0LCBib29sZWFuIHB1Ymxpc2gsIFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbywgYm9vbGVhbiBvdmVyd3JpdGVGaWxlcywgYm9vbGVhbiBmb2xkZXJzLCBib29sZWFuIGNoZWNrT3V0RmlsZXMpIHsKLQkJc3VwZXIoKTsJCQotCQl0aGlzLmRldmVsb3AgPSBkZXZlbG9wOwotCQl0aGlzLmFzc2VtYmxlID0gYXNzZW1ibGU7Ci0JCXRoaXMuZGVwbG95ID0gZGVwbG95OwotCQl0aGlzLmluc3RhbGwgPSBpbnN0YWxsOwotCQl0aGlzLnJ1biA9IHJ1bjsKLQkJdGhpcy5jbGllbnQgPSBjbGllbnQ7Ci0JCXRoaXMudGVzdCA9IHRlc3Q7Ci0JCXRoaXMucHVibGlzaCA9IHB1Ymxpc2g7Ci0JCXRoaXMuc2NlbmFyaW8gPSBzY2VuYXJpbzsKLQkJdGhpcy5vdmVyd3JpdGVGaWxlcyA9IG92ZXJ3cml0ZUZpbGVzOwotCQl0aGlzLmNyZWF0ZUZvbGRlcnMgPSBmb2xkZXJzOwotCQl0aGlzLmNoZWNrT3V0RmlsZXMgPSBjaGVja091dEZpbGVzOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZSgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZShib29sZWFuIGFzc2VtYmxlKSB7Ci0JCXRoaXMuYXNzZW1ibGUgPSBhc3NlbWJsZTsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0Q2hlY2tPdXRGaWxlcygpIHsKLQkJcmV0dXJuIGNoZWNrT3V0RmlsZXM7Ci0JfQotCXB1YmxpYyB2b2lkIHNldENoZWNrT3V0RmlsZXMoYm9vbGVhbiBjaGVja091dEZpbGVzKSB7Ci0JCXRoaXMuY2hlY2tPdXRGaWxlcyA9IGNoZWNrT3V0RmlsZXM7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldENsaWVudCgpIHsKLQkJcmV0dXJuIGNsaWVudDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0Q2xpZW50KGJvb2xlYW4gY2xpZW50KSB7Ci0JCXRoaXMuY2xpZW50ID0gY2xpZW50OwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRDcmVhdGVGb2xkZXJzKCkgewotCQlyZXR1cm4gY3JlYXRlRm9sZGVyczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVycyhib29sZWFuIGNyZWF0ZUZvbGRlcnMpIHsKLQkJdGhpcy5jcmVhdGVGb2xkZXJzID0gY3JlYXRlRm9sZGVyczsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95KCkgewotCQlyZXR1cm4gZGVwbG95OwotCX0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3koYm9vbGVhbiBkZXBsb3kpIHsKLQkJdGhpcy5kZXBsb3kgPSBkZXBsb3k7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3AoKSB7Ci0JCXJldHVybiBkZXZlbG9wOwotCX0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wKGJvb2xlYW4gZGV2ZWxvcCkgewotCQl0aGlzLmRldmVsb3AgPSBkZXZlbG9wOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsKCkgewotCQlyZXR1cm4gaW5zdGFsbDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW5zdGFsbChib29sZWFuIGluc3RhbGwpIHsKLQkJdGhpcy5pbnN0YWxsID0gaW5zdGFsbDsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0T3ZlcldyaXRlRmlsZXMoKSB7Ci0JCXJldHVybiBvdmVyd3JpdGVGaWxlczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0T3ZlcldyaXRlRmlsZXMoYm9vbGVhbiBvdmVyd3JpdGVGaWxlcykgewotCQl0aGlzLm92ZXJ3cml0ZUZpbGVzID0gb3ZlcndyaXRlRmlsZXM7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2goKSB7Ci0JCXJldHVybiBwdWJsaXNoOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRQdWJsaXNoKGJvb2xlYW4gcHVibGlzaCkgewotCQl0aGlzLnB1Ymxpc2ggPSBwdWJsaXNoOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRSdW4oKSB7Ci0JCXJldHVybiBydW47Ci0JfQotCXB1YmxpYyB2b2lkIHNldFJ1bihib29sZWFuIHJ1bikgewotCQl0aGlzLnJ1biA9IHJ1bjsKLQl9Ci0JcHVibGljIFdlYlNlcnZpY2VTY2VuYXJpbyBnZXRTY2VuYXJpbygpIHsKLQkJcmV0dXJuIHNjZW5hcmlvOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTY2VuYXJpbyhXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW8pIHsKLQkJdGhpcy5zY2VuYXJpbyA9IHNjZW5hcmlvOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0KCkgewotCQlyZXR1cm4gdGVzdDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0VGVzdChib29sZWFuIHRlc3QpIHsKLQkJdGhpcy50ZXN0ID0gdGVzdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvVGVzdEluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9UZXN0SW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGY4ZDA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9UZXN0SW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5Cb29sZWFuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotLyoqCi0gKiBUaGlzIGhvbGRzIGluZm8gdGhhdCBjb21lcyBmcm9tIHVzZXIgaW5wdXQgb3Igc29tZSBjYWxjdWxhdGlvbnMgdGhhdCAKLSAqIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bCB0byBhbnkgdGVzdCBleHRlbmRlcnMKLSAqLwotCi1wdWJsaWMgY2xhc3MgVGVzdEluZm8gewotICBwcml2YXRlIFN0cmluZyBqc3BGb2xkZXI7Ci0gIHByaXZhdGUgU3RyaW5nIGdlbmVyYXRpb25Qcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuOwotICBwcml2YXRlIFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50TW9kdWxlOwotICBwcml2YXRlIGJvb2xlYW4gY2xpZW50TmVlZEVBUjsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RUFSUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RUFSTW9kdWxlOwotICBwcml2YXRlIEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRTZXJ2ZXJUeXBlSUQ7Ci0gIHByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7Ci0gIHByaXZhdGUgSVNlcnZlciBjbGllbnRFeGlzdGluZ1NlcnZlcjsKLSAgcHJpdmF0ZSBMaXN0IGVuZHBvaW50czsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFNlcnZpY2VVUkw7Ci0gIHByaXZhdGUgYm9vbGVhbiBleHRlcm5hbEJyb3dzZXI7ICAKLSAgcHJpdmF0ZSBib29sZWFuIHJ1blRlc3RDbGllbnQ7Ci0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgZm9sZGVyIHRoZSB1c2VyIGhhcyBjaG9zZW4gdG8gZ2VuZXJhdGUgYW55IGpzcHMgCi0gICogQHBhcmFtIGpzcEZvbGRlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRKc3BGb2xkZXIoU3RyaW5nIGpzcEZvbGRlcil7Ci0JdGhpcy5qc3BGb2xkZXIgPSBqc3BGb2xkZXI7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKc3BGb2xkZXIoKXsKLSAgICByZXR1cm4ganNwRm9sZGVyOyAgCi0gIH0KLSAgCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIHByb2plY3QgdGhlIHVzZXIgaGFzIGNob3NlbiB0byBnZW5lcmF0ZSBhcnRpZmFjdHMgdG8gIAotICAqIEBwYXJhbSBnZW5lcmF0aW9uUHJvamVjdAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0aW9uUHJvamVjdChTdHJpbmcgZ2VuZXJhdGlvblByb2plY3QpewotICAgIHRoaXMuZ2VuZXJhdGlvblByb2plY3QgPSBnZW5lcmF0aW9uUHJvamVjdDsJICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRHZW5lcmF0aW9uUHJvamVjdCgpewotICAgIHJldHVybiBnZW5lcmF0aW9uUHJvamVjdDsJICAKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIHByb3h5IGJlYW4gd2FzIGdlbmVyYXRlZCBieSB1cyB0aGlzIGlzIHRoZSBuYW1lIG9mIGl0ICAKLSAgKiBAcGFyYW0gcHJveHlCZWFuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3h5QmVhbihTdHJpbmcgcHJveHlCZWFuKXsKLSAgICB0aGlzLnByb3h5QmVhbiA9IHByb3h5QmVhbjsJICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRQcm94eUJlYW4oKXsKLSAgICByZXR1cm4gcHJveHlCZWFuOwkgIAotICB9Ci0JICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgU2V0RW5kcG9pbnRNZXRob2QgICAKLSAgKiBAcGFyYW0gCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFNldEVuZHBvaW50TWV0aG9kKFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZCl7Ci0JdGhpcy5zZXRFbmRwb2ludE1ldGhvZCA9IHNldEVuZHBvaW50TWV0aG9kOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2V0RW5kcG9pbnRNZXRob2QoKXsKLSAgICByZXR1cm4gc2V0RW5kcG9pbnRNZXRob2Q7ICAKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIGNsaWVudFByb2plY3QgY29udGFpbnMgdGhlIGNsaWVudCBhcnRpZmFjdHMgaW5jbHVkaW5nIHRoZSAKLSAgKiBnZW5lcmF0ZWQgcHJveHkgYmVhbiAgIAotICAqIEBwYXJhbSBjbGllbnRQcm9qZWN0IFN0cmluZwotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KXsKLSAgICB0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwkgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3QoKXsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdDsJICAKLSAgfQotCSAgCi0gIC8qKgotICAgKiBUaGUgY2xpZW50TW9kdWxlIGNvbnRhaW5zIHRoZSBjbGllbnQgYXJ0aWZhY3RzIGluY2x1ZGluZyB0aGUgCi0gICAqIG1vZHVsZSAgIAotICAgKiBAcGFyYW0gY2xpZW50UHJvamVjdCBTdHJpbmcKLSAgICovCi0gICBwdWJsaWMgdm9pZCBzZXRDbGllbnRNb2R1bGUoU3RyaW5nIGNsaWVudE1vZHVsZSl7Ci0gICAgIHRoaXMuY2xpZW50TW9kdWxlID0gY2xpZW50TW9kdWxlOwkgIAotICAgfQotICAgCi0gICBwdWJsaWMgU3RyaW5nIGdldENsaWVudE1vZHVsZSgpewotICAgICByZXR1cm4gY2xpZW50TW9kdWxlOwkgIAotICAgfQotICAKLSAgLyoqCi0gICogVGhlc2UgYXJlIG1ldGhvZHMgb24gdGhlIHByb3h5YmVhbiB0aGUgdXNlciBoYXMgY2hlY2tlZCBvbmVzIAotICAqIHRoZXkgd2FudCBpbmNsdWRlZCBpbiB0aGUgdGVzdCBjbGllbnQgICAgIAotICAqIEBwYXJhbSBtZXRob2RzCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMpewotCXRoaXMubWV0aG9kcyA9IG1ldGhvZHM7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW5TZWxlY3Rpb25bXSBnZXRNZXRob2RzKCl7Ci0gICAgcmV0dXJuIG1ldGhvZHM7ICAKLSAgfQotICAKLSAgLyoqCi0gICogSWYgdGhlIGNvbW1hbmQgbmVlZHMgYSBzZXJ2ZXIgdGhpcyBpcyB0aGUgY2hvc2VuIAotICAqIGNsaWVudCBzZXJ2ZXJJRAotICAqIEBwYXJhbSBzYW1wbGVTZXJ2ZXJUeXBlSUQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRCl7Ci0gICAgdGhpcy5zZXJ2aWNlU2VydmVyVHlwZUlEID0gc2VydmljZVNlcnZlclR5cGVJRDsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoKXsKLSAgICByZXR1cm4gc2VydmljZVNlcnZlclR5cGVJRDsgIAotICB9Ci0gIAotICAvKioKLSAgKiBJZiB0aGUgY29tbWFuZCBuZWVkcyBhIHNlcnZlciB0aGlzIGlzIHRoZSBjaG9zZW4gCi0gICogY2xpZW50IHNlcnZlcklECi0gICogQHBhcmFtIHNhbXBsZVNlcnZlclR5cGVJRAotICAqLwotICAgcHVibGljIHZvaWQgc2V0Q2xpZW50U2VydmVyVHlwZUlEKFN0cmluZyBjbGllbnRTZXJ2ZXJUeXBlSUQpewotICAgICB0aGlzLmNsaWVudFNlcnZlclR5cGVJRCA9IGNsaWVudFNlcnZlclR5cGVJRDsgIAotICAgfQotICAgCi0gICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFNlcnZlclR5cGVJRCgpewotICAgICByZXR1cm4gY2xpZW50U2VydmVyVHlwZUlEOyAgCi0gICB9Ci0JICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgSVNlcnZlciBpZiByZXF1aXJlZAotICAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpewotCXRoaXMuc2VydmljZUV4aXN0aW5nU2VydmVyID0gc2VydmljZUV4aXN0aW5nU2VydmVyOyAgIAotICB9Ci0gIAotICBwdWJsaWMgSVNlcnZlciBnZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoKXsKLSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyOyAgIAotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBpcyB0aGUgU3RyaW5nIGlmIHJlcXVpcmVkCi0gICAqIEBwYXJhbSBjbGllbnRFQVJQcm9qZWN0Ci0gICAqLwotICAgcHVibGljIHZvaWQgc2V0Q2xpZW50RUFSUHJvamVjdChTdHJpbmcgY2xpZW50RUFSUHJvamVjdCl7Ci0gCXRoaXMuY2xpZW50RUFSUHJvamVjdCA9IGNsaWVudEVBUlByb2plY3Q7ICAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RUFSUHJvamVjdCgpewotICAgICByZXR1cm4gY2xpZW50RUFSUHJvamVjdDsgICAKLSAgIH0KLSAgIAotICAgCi0gICAvKioKLSAgICAqIFRoaXMgaXMgdGhlIFN0cmluZyBpZiByZXF1aXJlZAotICAgICogQHBhcmFtIGNsaWVudEVBUlByb2plY3QKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldENsaWVudEVBUk1vZHVsZShTdHJpbmcgY2xpZW50RUFSTW9kdWxlKXsKLSAgCXRoaXMuY2xpZW50RUFSTW9kdWxlID0gY2xpZW50RUFSTW9kdWxlOyAgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEVBUk1vZHVsZSgpewotICAgICAgcmV0dXJuIGNsaWVudEVBUk1vZHVsZTsgICAKLSAgICB9Ci0gICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgSVNlcnZlciBpZiByZXF1aXJlZAotICAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFeGlzdGluZ1NlcnZlcihJU2VydmVyIGNsaWVudEV4aXN0aW5nU2VydmVyKXsKLSAgICB0aGlzLmNsaWVudEV4aXN0aW5nU2VydmVyID0gY2xpZW50RXhpc3RpbmdTZXJ2ZXI7ICAgCi0gIH0KLSAgIAotICBwdWJsaWMgSVNlcnZlciBnZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpewotICAgIHJldHVybiBjbGllbnRFeGlzdGluZ1NlcnZlcjsgICAKLSAgfQotICAgCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGVuZHBvaW50cyBpZiBtb25pdG9yIHNlcnZpY2UgaXMgZW5hYmxlZAotICAqIEBwYXJhbSBlbmRwb2ludHMKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoTGlzdCBlbmRwb2ludHMpewotCXRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzOyAgCi0gIH0KLSAgcHVibGljIExpc3QgZ2V0RW5kcG9pbnQoKXsKLSAgICByZXR1cm4gZW5kcG9pbnRzOyAgCi0gIH0gCi0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgcHJvamVjdCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZGVhbGluZyB3aXRoCi0gICogd3NkbAotICAqIEBwYXJhbSBzZXJ2aWNlUHJvamVjdAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChTdHJpbmcgc2VydmljZVByb2plY3QpewotICAgIHRoaXMuc2VydmljZVByb2plY3QgPSBzZXJ2aWNlUHJvamVjdDsgICAgCSAgCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VQcm9qZWN0KCl7Ci0gICAgcmV0dXJuIHNlcnZpY2VQcm9qZWN0OwotICB9Ci0KLSAgLyoqCi0gICogV1NETCBVUkwKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFNlcnZpY2VVUkwoU3RyaW5nIHdzZGxTZXJ2aWNlVVJMKXsKLQl0aGlzLndzZGxTZXJ2aWNlVVJMID0gd3NkbFNlcnZpY2VVUkw7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsU2VydmljZVVSTCgpewotICAgIHJldHVybiB3c2RsU2VydmljZVVSTDsgIAotICB9Ci0gIAotICAvKioKLSAgICogY2xpZW50TmVlZEVBUgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpIHsKLQkJcmV0dXJuIGNsaWVudE5lZWRFQVI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnROZWVkRUFSKGJvb2xlYW4gY2xpZW50TmVlZEVBUikgewotCQl0aGlzLmNsaWVudE5lZWRFQVIgPSBjbGllbnROZWVkRUFSOwotICB9Ci0KLSAgLyoqCi0gICAqIGV4dGVybmFsIGJyb3dzZXIKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEV4dGVybmFsQnJvd3NlcigpIAotICB7Ci0JICByZXR1cm4gZXh0ZXJuYWxCcm93c2VyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RXh0ZXJuYWxCcm93c2VyKGJvb2xlYW4gZXh0ZXJuYWxCcm93c2VyKSB7Ci0JICB0aGlzLmV4dGVybmFsQnJvd3NlciA9IGV4dGVybmFsQnJvd3NlcjsKLSAgfQotCi1wdWJsaWMgYm9vbGVhbiBnZXRSdW5UZXN0Q2xpZW50KCkgewotCXJldHVybiBydW5UZXN0Q2xpZW50OwotfQotCi1wdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KGJvb2xlYW4gcnVuVGVzdENsaWVudCkgewotCXRoaXMucnVuVGVzdENsaWVudCA9IHJ1blRlc3RDbGllbnQ7Ci19Ci0KLQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VDbGllbnRJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUNsaWVudEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZiYjdkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUNsaWVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA4MTUgICAxOTk2MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTMwICAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDbGllbnRJbmZvIHsKLQotCXByaXZhdGUgV2ViU2VydmljZVN0YXRlIHN0YXRlOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckZhY3RvcnlJZDsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlclJ1bnRpbWVJZDsKLQlwcml2YXRlIFN0cmluZyB3ZWJTZXJ2aWNlUnVudGltZUlkOwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkw7Ci0JcHJpdmF0ZSBTdHJpbmcgaW1wbFVSTDsKLQlwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gc2VydmVyQ3JlYXRlZCA9IGZhbHNlOwotCQotCXB1YmxpYyBTdHJpbmcgZ2V0SW1wbFVSTCgpIHsKLQkJcmV0dXJuIGltcGxVUkw7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEltcGxVUkwoU3RyaW5nIGltcGxVUkwpIHsKLQkJdGhpcy5pbXBsVVJMID0gaW1wbFVSTDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJGYWN0b3J5SWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKSB7Ci0JCXRoaXMuc2VydmVyRmFjdG9yeUlkID0gc2VydmVyRmFjdG9yeUlkOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKSB7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlckluc3RhbmNlSWQ7Ci0JfQotCXB1YmxpYyBXZWJTZXJ2aWNlU3RhdGUgZ2V0U3RhdGUoKSB7Ci0JCXJldHVybiBzdGF0ZTsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U3RhdGUoV2ViU2VydmljZVN0YXRlIHN0YXRlKSB7Ci0JCXRoaXMuc3RhdGUgPSBzdGF0ZTsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlUnVudGltZUlkKCkgewotCQlyZXR1cm4gd2ViU2VydmljZVJ1bnRpbWVJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVJ1bnRpbWVJZChTdHJpbmcgd2ViU2VydmljZVJ1bnRpbWVJZCkgewotCQl0aGlzLndlYlNlcnZpY2VSdW50aW1lSWQgPSB3ZWJTZXJ2aWNlUnVudGltZUlkOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkwoKSB7Ci0JCXJldHVybiB3c2RsVVJMOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJMKFN0cmluZyB3c2RsVVJMKSB7Ci0JCXRoaXMud3NkbFVSTCA9IHdzZGxVUkw7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlFbmRwb2ludCgpIHsKLQkJcmV0dXJuIHByb3h5RW5kcG9pbnQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFByb3h5RW5kcG9pbnQoU3RyaW5nIHByb3h5RW5kcG9pbnQpIHsKLQkJdGhpcy5wcm94eUVuZHBvaW50ID0gcHJveHlFbmRwb2ludDsKLQl9Ci0JCi0JLyoqCi0JICogQHJldHVybiBJbmRpY2F0ZWQgd2hldGhlciB0aGUgZnJhbWV3b3JrIGhhZCBjcmVhdGVkIAotCSAqIHRoZSBzZXJ2ZXIgaW5zdGFuY2UgcmVmZXJlbmNlZCBieSBnZXRTZXJ2ZXJJbnN0YW5jZUlkCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNTZXJ2ZXJDcmVhdGVkKCkgewotCQlyZXR1cm4gc2VydmVyQ3JlYXRlZDsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHNlcnZlckNyZWF0ZWQgVHJ1ZSBpZiB0aGUgZnJhbWV3b3JrIGhhZCBjcmVhdGVkIAotCSAqIHRoZSBzZXJ2ZXIgaW5zdGFuY2UgcmVmZXJlbmNlZCBieSBnZXRTZXJ2ZXJJbnN0YW5jZUlkCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmVyQ3JlYXRlZChib29sZWFuIHNlcnZlckNyZWF0ZWQpIHsKLQkJdGhpcy5zZXJ2ZXJDcmVhdGVkID0gc2VydmVyQ3JlYXRlZDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJSdW50aW1lSWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJSdW50aW1lSWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlclJ1bnRpbWVJZChTdHJpbmcgc2VydmVyUnVudGltZUlkKSB7Ci0JCXRoaXMuc2VydmVyUnVudGltZUlkID0gc2VydmVyUnVudGltZUlkOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NjkxYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTI4OTA1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDMzMCAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwODE1ICAgMTk5NjI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLlVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lcjsKLQotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUluZm8gewotCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlU3RhdGUgc3RhdGU7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyRmFjdG9yeUlkOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUnVudGltZUlkOwotCXByaXZhdGUgU3RyaW5nIHdlYlNlcnZpY2VSdW50aW1lSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTDsKLQlwcml2YXRlIFN0cmluZyBlbmRQb2ludFVSTDsKLQlwcml2YXRlIFN0cmluZyBpbXBsVVJMOwotCXByaXZhdGUgU3RyaW5nW10gaW1wbFVSTHM7Ci0JcHJpdmF0ZSBib29sZWFuIHNlcnZlckNyZWF0ZWQgPSBmYWxzZTsKLQkKLQlwcml2YXRlIElNZXJnZXIgbWVyZ2VyOwotCQotCXB1YmxpYyBTdHJpbmcgZ2V0RW5kUG9pbnRVUkwoKQotCXsKLQkJcmV0dXJuIGVuZFBvaW50VVJMOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRFbmRQb2ludFVSTChTdHJpbmcgZW5kUG9pbnRVUkwpCi0JewotCQl0aGlzLmVuZFBvaW50VVJMID0gZW5kUG9pbnRVUkw7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0SW1wbFVSTCgpCi0JewotCQlyZXR1cm4gaW1wbFVSTDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW1wbFVSTChTdHJpbmcgaW1wbFVSTCkKLQl7Ci0JCXRoaXMuaW1wbFVSTCA9IGltcGxVUkw7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKCkKLQl7Ci0JCXJldHVybiBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotCXsKLQkJdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpCi0JewotCQlyZXR1cm4gc2VydmVySW5zdGFuY2VJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZCkKLQl7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlckluc3RhbmNlSWQ7Ci0JfQotCXB1YmxpYyBXZWJTZXJ2aWNlU3RhdGUgZ2V0U3RhdGUoKQotCXsKLQkJcmV0dXJuIHN0YXRlOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0ZShXZWJTZXJ2aWNlU3RhdGUgc3RhdGUpCi0JewotCQl0aGlzLnN0YXRlID0gc3RhdGU7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVJ1bnRpbWVJZCgpCi0JewotCQlyZXR1cm4gd2ViU2VydmljZVJ1bnRpbWVJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVJ1bnRpbWVJZChTdHJpbmcgd2ViU2VydmljZVJ1bnRpbWVJZCkKLQl7Ci0JCXRoaXMud2ViU2VydmljZVJ1bnRpbWVJZCA9IHdlYlNlcnZpY2VSdW50aW1lSWQ7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSTCgpCi0JewotCQlyZXR1cm4gd3NkbFVSTDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0V3NkbFVSTChTdHJpbmcgd3NkbFVSTCkKLQl7Ci0JCXRoaXMud3NkbFVSTCA9IHdzZGxVUkw7Ci0JfQotCXB1YmxpYyBTdHJpbmdbXSBnZXRJbXBsVVJMcygpCi0JewotCQlyZXR1cm4gaW1wbFVSTHM7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEltcGxVUkxzKFN0cmluZ1tdIGltcGxVUkxzKQotCXsKLQkJdGhpcy5pbXBsVVJMcyA9IGltcGxVUkxzOwotCQlsb2FkTWVyZ2VyKCk7Ci0JCQotCX0KLQlwdWJsaWMgSU1lcmdlciBnZXRNZXJnZXIoKSB7Ci0JCXJldHVybiBtZXJnZXI7Ci0JfQotCXB1YmxpYyB2b2lkIHNldE1lcmdlcihJTWVyZ2VyIG1lcmdlcikgewotCQl0aGlzLm1lcmdlciA9IG1lcmdlcjsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGxvYWRNZXJnZXIoKSB7Ci0JCWlmIChtZXJnZXIgIT0gbnVsbCkgewotCQkJUGVyc2lzdGVudE1lcmdlQ29udGV4dCBtZXJnZUNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldE1lcmdlQ29udGV4dCgpOwotCQkJaWYgKG1lcmdlQ29udGV4dC5pc1NrZWxldG9uTWVyZ2VFbmFibGVkKCkpIHsKLQkJCQltZXJnZXIubG9hZChVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9GaWxlcyhpbXBsVVJMcykpOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIEByZXR1cm4gSW5kaWNhdGVkIHdoZXRoZXIgdGhlIGZyYW1ld29yayBoYWQgY3JlYXRlZCAKLQkgKiB0aGUgc2VydmVyIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZ2V0U2VydmVySW5zdGFuY2VJZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU2VydmVyQ3JlYXRlZCgpIHsKLQkJcmV0dXJuIHNlcnZlckNyZWF0ZWQ7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2ZXJDcmVhdGVkIFRydWUgaWYgdGhlIGZyYW1ld29yayBoYWQgY3JlYXRlZCAKLQkgKiB0aGUgc2VydmVyIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZ2V0U2VydmVySW5zdGFuY2VJZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlckNyZWF0ZWQoYm9vbGVhbiBzZXJ2ZXJDcmVhdGVkKSB7Ci0JCXRoaXMuc2VydmVyQ3JlYXRlZCA9IHNlcnZlckNyZWF0ZWQ7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUnVudGltZUlkKCkgewotCQlyZXR1cm4gc2VydmVyUnVudGltZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJSdW50aW1lSWQoU3RyaW5nIHNlcnZlclJ1bnRpbWVJZCkgewotCQl0aGlzLnNlcnZlclJ1bnRpbWVJZCA9IHNlcnZlclJ1bnRpbWVJZDsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZVNjZW5hcmlvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZVNjZW5hcmlvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlY2NmMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTY2VuYXJpby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI0ICAgMTE2NzUwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQWJzdHJhY3RFbnVtZXJhdG9yOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXZWJTZXJ2aWNlU2NlbmFyaW8gZXh0ZW5kcyBBYnN0cmFjdEVudW1lcmF0b3IKLXsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCT1RUT01VUCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRPUERPV04gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTElFTlQgPSAyOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU2NlbmFyaW8gQk9UVE9NVVBfTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU2NlbmFyaW8oQk9UVE9NVVAsICJCT1RUT01VUCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTY2VuYXJpbyBUT1BET1dOX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVNjZW5hcmlvKFRPUERPV04sICJUT1BET1dOIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVNjZW5hcmlvIENMSUVOVF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTY2VuYXJpbyhDTElFTlQsICJDTElFTlQiKTsKLQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTY2VuYXJpb1tdIFZBTFVFU19BUlJBWSA9Ci0gICAgbmV3IFdlYlNlcnZpY2VTY2VuYXJpb1tdCi0gICAgewotCSAgQk9UVE9NVVBfTElURVJBTCwKLQkgIFRPUERPV05fTElURVJBTCwKLQkgIENMSUVOVF9MSVRFUkFMLAotICAgIH07Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0IFZBTFVFUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChWQUxVRVNfQVJSQVkpKTsKLQotCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVNjZW5hcmlvIGdldChTdHJpbmcgbmFtZSkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VTY2VuYXJpbyByZXN1bHQgPSBWQUxVRVNfQVJSQVlbaV07Ci0gICAgICBpZiAocmVzdWx0LnRvU3RyaW5nKCkuZXF1YWxzKG5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlU2NlbmFyaW8gZ2V0KGludCB2YWx1ZSkKLSAgewotICAgIHN3aXRjaCAodmFsdWUpCi0gICAgewotICAgICAgY2FzZSBCT1RUT01VUDogcmV0dXJuIEJPVFRPTVVQX0xJVEVSQUw7Ci0gICAgICBjYXNlIFRPUERPV046IHJldHVybiBUT1BET1dOX0xJVEVSQUw7Ci0gICAgICBjYXNlIENMSUVOVDogcmV0dXJuIENMSUVOVF9MSVRFUkFMOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsJCi0gIH0KLQotICAvKioKLSAgICogT25seSB0aGlzIGNsYXNzIGNhbiBjb25zdHJ1Y3QgaW5zdGFuY2VzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlU2NlbmFyaW8oaW50IHZhbHVlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKHZhbHVlLCBuYW1lKTsKLSAgfQotICAKLQotfSAvL1dlYlNlcnZpY2VTY2VuYXJpbwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTdGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTdGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjIwYzBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlU3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQWJzdHJhY3RFbnVtZXJhdG9yOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXZWJTZXJ2aWNlU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEVudW1lcmF0b3IKLXsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTktOT1dOID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWRUxPUEVEID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVNTRU1CTEVEID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZRUQgPSAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMRUQgPSA0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSVU5OSU5HID0gNTsKLSAgCi0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZSBVTktOT1dOX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVN0YXRlKFVOS05PV04sICJVTktOT1dOIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlIERFVkVMT1BFRF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShERVZFTE9QRUQsICJERVZFTE9QRUQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGUgQVNTRU1CTEVEX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVN0YXRlKEFTU0VNQkxFRCwgIkFTU0VNQkxFRCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZSBERVBMT1lFRF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShERVBMT1lFRCwgIkRFUExPWUVEIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlIElOU1RBTExFRF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShJTlNUQUxMRUQsICJJTlNUQUxMRUQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGUgUlVOTklOR19MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShSVU5OSU5HLCAiUlVOTklORyIpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZVtdIFZBTFVFU19BUlJBWSA9Ci0gICAgbmV3IFdlYlNlcnZpY2VTdGF0ZVtdCi0gICAgewotCSAgVU5LTk9XTl9MSVRFUkFMLAotCSAgREVWRUxPUEVEX0xJVEVSQUwsCi0JICBBU1NFTUJMRURfTElURVJBTCwKLQkgIERFUExPWUVEX0xJVEVSQUwsCi0JICBJTlNUQUxMRURfTElURVJBTCwKLQkgIFJVTk5JTkdfTElURVJBTCwKLSAgICB9OwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdCBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7Ci0KLQotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VTdGF0ZSBnZXQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBXZWJTZXJ2aWNlU3RhdGUgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOwotICAgICAgaWYgKHJlc3VsdC50b1N0cmluZygpLmVxdWFscyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVN0YXRlIGdldChpbnQgdmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKHZhbHVlKQotICAgIHsKLSAgICAgIGNhc2UgVU5LTk9XTjogcmV0dXJuIFVOS05PV05fTElURVJBTDsKLSAgICAgIGNhc2UgREVWRUxPUEVEOiByZXR1cm4gREVWRUxPUEVEX0xJVEVSQUw7Ci0gICAgICBjYXNlIEFTU0VNQkxFRDogcmV0dXJuIEFTU0VNQkxFRF9MSVRFUkFMOwotCSAgY2FzZSBERVBMT1lFRDogcmV0dXJuIERFUExPWUVEX0xJVEVSQUw7Ci0JICBjYXNlIElOU1RBTExFRDogcmV0dXJuIElOU1RBTExFRF9MSVRFUkFMOwotCSAgY2FzZSBSVU5OSU5HOiByZXR1cm4gUlVOTklOR19MSVRFUkFMOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsJCi0gIH0KLQotICAvKioKLSAgICogT25seSB0aGlzIGNsYXNzIGNhbiBjb25zdHJ1Y3QgaW5zdGFuY2VzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlU3RhdGUoaW50IHZhbHVlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKHZhbHVlLCBuYW1lKTsKLSAgfQotCi19IC8vV2ViU2VydmljZVN0YXRlCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxNzg3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtYXNkIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLWFzZC13c2RsMTEiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtcmVmYWN0b3IiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtc29hcCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1zZWFyY2giLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0iamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZSIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjVmNjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXdzZGxlZGl0b3IuamFyCi10ZW1wLmZvbGRlcgotb3JnLmVjbGlwc2Uud3N0LndzZGwudWlfMS4wLjAuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhNGRkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcxNWMyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSNTdW4gSnVuIDAzIDAwOjQ5OjA2IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmY3YWM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBKYW4gMzAgMjM6Mzg6MTUgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzdkMDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfVUlfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjIuMTAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbgotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5zcGVjaWFsaXplZCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uY29ubmVjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWksCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5pY29uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmxhYmVsLnByb3ZpZGVycywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlY29uY2lsZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5hY3Rpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC54c2Q7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmdlZjtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQ7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvcjtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS54c2Q7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2QudWk7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lZGl0O2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3Jpbmc7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5hcGFjaGUueGVyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMi44LjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uuc2VhcmNoO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuZmlsZXN5c3RlbTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjY5MmQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1qYXJzLmNvbXBpbGUub3JkZXIgPSAuCi1zb3VyY2UuLiA9IHNyYy1hc2QvLFwKLSAgICAgICAgICAgc3JjLWFzZC13c2RsMTEsXAotICAgICAgICAgICBzcmMtcmVmYWN0b3IvLFwKLSAgICAgICAgICAgc3JjLXNvYXAvLFwKLSAgICAgICAgICAgc3JjLXNlYXJjaC8KLW91dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kbGNsMTYvc2hvd3Byb3BlcnRpZXNfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZGxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NGZmMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kbGNsMTYvc2hvd3Byb3BlcnRpZXNfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZHRvb2wxNi9jYXB0dXJlc2NyZWVuLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZHRvb2wxNi9jYXB0dXJlc2NyZWVuLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3MGM5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2R0b29sMTYvY2FwdHVyZXNjcmVlbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2VsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9lbGNsMTYvc2hvd3Byb3BlcnRpZXNfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjMTlhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2VsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzY4MzBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZXRvb2wxNi9jYXB0dXJlc2NyZWVuLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZXRvb2wxNi96b29tbWludXMuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L3pvb21taW51cy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMmM5MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L3pvb21taW51cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvem9vbXBsdXMuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L3pvb21wbHVzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY2ZDc1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvem9vbXBsdXMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9yZWxvYWRncmFtbWFyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvcmVsb2FkZ3JhbW1hci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNGM5Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9yZWxvYWRncmFtbWFyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvdmFsaWRhdGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy92YWxpZGF0ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMzQ3YWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy92YWxpZGF0ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy93c2RsX2ZpbGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzViMWY5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZmM3OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLV9VSV9MQUJFTF9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLV9VSV9MQUJFTF9DUkVBVEVfTkVXX1dTRExfRklMRT1DcmVhdGUgYSBuZXcgV1NETCBGaWxlCi1fVUlfV1NETF9MQUJFTD1XU0RMIEZpbGVzCi1fVUlfTEFCRUxfR0VORVJBTD1HZW5lcmFsCi1fVUlfTEFCRUxfRE9DVU1FTlRBVElPTj1Eb2N1bWVudGF0aW9uCi1fVUlfTEFCRUxfRVhURU5TSU9OUz1FeHRlbnNpb25zCi1fVUlfTEFCRUxfUkVGQUNUT1I9UmVmYWN0b3IKLV9VSV9FRElUT1JfTkFNRT1XU0RMIEVkaXRvcgotX1VJX1JFTE9BRF9ERVBFTkRFTkNJRVM9UmVsb2FkIERlcGVuZGVuY2llcwotcmVmYWN0b3JpbmcubWVudS5sYWJlbD1SZWZhY3RvcgotQWRkQm9va21hcmsubGFiZWw9QWRkIEJvbyZrbWFyay4uLgotQWRkQm9va21hcmsudG9vbHRpcD1BZGQgQm9va21hcmsuLi4KLVNlbGVjdFJ1bGVyLmxhYmVsPVNlbGVjdCBSdWxlcgotQWRkVGFzay5sYWJlbD1BZGQgJlRhc2suLi4KLUFkZFRhc2sudG9vbHRpcD1BZGQgVGFzay4uLgotV1NETEVkaXRvck1vZGVzPVdTREwgRWRpdG9yIE1vZGVzCi0KLWNvbW1hbmQud3NkbC5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudC5uYW1lPVJlbmFtZSBXU0RMIGNvbXBvbmVudAotCi1fVUlfUExVR0lOX05BTUU9V1NETCBVSQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0jIwotV1NETF9Tb3VyY2VfdGFyZ2V0X25hbWU9V1NETCBTb3VyY2UKLVdTRExfaHlwZXJsaW5rPVdTREwgQ29udGVudAotU09BUD1TT0FQCi1IVFRQPUhUVFAKLVJlZmVyZW5jZXM9UmVmZXJlbmNlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyOTYxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KLQkJPGVkaXRvcgotCQkJbmFtZT0iJV9VSV9FRElUT1JfTkFNRSIKLQkJCWljb249Imljb25zL3dzZGxfZmlsZV9vYmouZ2lmIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLkludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciIKLQkJCWNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExBY3Rpb25CYXJDb250cmlidXRvciIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIj4KLQkJCTxjb250ZW50VHlwZUJpbmRpbmcKLQkJCQljb250ZW50VHlwZUlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIiAvPgotCQk8L2VkaXRvcj4KLQk8L2V4dGVuc2lvbj4KLQkKLQkJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0JCTxjYXRlZ29yeQotCQkJaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0JCQluYW1lPSIlX1VJX0xBQkVMX05FV19DQVRFR09SWV9OQU1FX1dTIiAvPgotCQk8d2l6YXJkCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiCi0JCQluYW1lPSJXU0RMIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuTmV3V1NETFdpemFyZCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotCQkJaWNvbj0iaWNvbnMvd3NkbF9maWxlX29iai5naWYiPgotCQkJPGRlc2NyaXB0aW9uPiVfVUlfTEFCRUxfQ1JFQVRFX05FV19XU0RMX0ZJTEU8L2Rlc2NyaXB0aW9uPgotCQkJPHNlbGVjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIiAvPgotCQk8L3dpemFyZD4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCQk8IS0tIHBsYWNlIGV2ZXJ5dGhpbmcgaW4gIldlYiBTZXJ2aWNlcyIgLS0+Ci0JCTxwYWdlCi0JCQluYW1lPSIlX1VJX1dTRExfTEFCRUwiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETFByZWZlcmVuY2VQYWdlIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExQcmVmZXJlbmNlUGFnZSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTwhLS0gVGhpcyBleHRlbnNpb24gcG9pbnQgaXMgdXNlZCB0byBzdXBsZW1lbnQgV1NETCAxLjEgc2NoZW1hcyBpbiBvcmRlciB0byAgIC0tPgotCTwhLS0gY29uc3RyYWluIHRoZSBleHRlbnNpYmxpdHkgZWxlbWVudHMgdGhhdCBhcmUgYWxsb3dlZCBhdCB0aGUgJ3dzZGwnIGxldmVsIC0tPgotCTxleHRlbnNpb24tcG9pbnQKLQkJaWQ9ImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIgotCQluYW1lPSJFeHRlbnNpYmxpdHkgRWxlbWVudCBGaWx0ZXIiCi0JCXNjaGVtYT0ic2NoZW1hL2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyLmV4c2QiIC8+Ci0JCQotCTxleHRlbnNpb24tcG9pbnQgaWQ9ImludGVybmFsRWRpdG9yQ29uZmlndXJhdGlvbiIgbmFtZT0iV1NETEVkaXRvckV4dGVuc2lvbkNvbmZpZ3VyYXRpb24iLz4gICAgCi0gICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZWRpdG9yTW9kZXMiIG5hbWU9IiVXU0RMRWRpdG9yTW9kZXMiLz4KLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJleHRlbnNpb25DYXRlZ29yaWVzIiBuYW1lPSJFeHRlbnNpb24gQ2F0ZWdvcmllcyIvPgkJCi0JPGV4dGVuc2lvbi1wb2ludCBpZD0iY29udGVudEdlbmVyYXRvclVJIiBuYW1lPSJVSSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyIgc2NoZW1hPSJzY2hlbWEvY29udGVudEdlbmVyYXRvclVJLmV4c2QiLz4KLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhZGFwdGVyRmFjdG9yeSIgbmFtZT0iQWRhcHRlciBGYWN0b3J5IEV4dGVuc2lvbiIgc2NoZW1hPSJzY2hlbWEvYWRhcHRlckZhY3RvcnkuZXhzZCIvPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQucHJvcGVydHlDb250cmlidXRvciI+Ci0JCTxwcm9wZXJ0eUNvbnRyaWJ1dG9yCi0JCQljb250cmlidXRvcklkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIgotCi0JCQlsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNETGFiZWxQcm92aWRlciI+CQkJCi0JCQk8cHJvcGVydHlDYXRlZ29yeSBjYXRlZ29yeT0iZ2VuZXJhbCI+PC9wcm9wZXJ0eUNhdGVnb3J5PgotCQkJPHByb3BlcnR5Q2F0ZWdvcnkgY2F0ZWdvcnk9ImRvY3VtZW50YXRpb24iPjwvcHJvcGVydHlDYXRlZ29yeT4KLQkJCTxwcm9wZXJ0eUNhdGVnb3J5IGNhdGVnb3J5PSJleHRlbnNpYmlsaXR5Ij48L3Byb3BlcnR5Q2F0ZWdvcnk+Ci0JCTwvcHJvcGVydHlDb250cmlidXRvcj4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5wcm9wZXJ0eVRhYnMiPgotCQk8cHJvcGVydHlUYWJzCi0JCQljb250cmlidXRvcklkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIj4KLQkJCTxwcm9wZXJ0eVRhYgotCQkJCWxhYmVsPSIlX1VJX0xBQkVMX0dFTkVSQUwiCi0JCQkJY2F0ZWdvcnk9ImdlbmVyYWwiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIj4KLQkJCTwvcHJvcGVydHlUYWI+Ci0JCQk8cHJvcGVydHlUYWIKLQkJCQlsYWJlbD0iJV9VSV9MQUJFTF9FWFRFTlNJT05TIgotCQkJCWNhdGVnb3J5PSJleHRlbnNpYmlsaXR5IgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZXh0ZW5zaWJpbGl0eSI+Ci0JCQk8L3Byb3BlcnR5VGFiPgotCQkJPHByb3BlcnR5VGFiCi0JCQkJbGFiZWw9IiVfVUlfTEFCRUxfRE9DVU1FTlRBVElPTiIKLQkJCQljYXRlZ29yeT0iZG9jdW1lbnRhdGlvbiIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmRvY3VtZW50YXRpb24iPgotCQkJPC9wcm9wZXJ0eVRhYj4KLQkJPC9wcm9wZXJ0eVRhYnM+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQucHJvcGVydHlTZWN0aW9ucyI+Ci0gICA8cHJvcGVydHlTZWN0aW9ucyBjb250cmlidXRvcklkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIj4KLSAgICAgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5kb2N1bWVudGF0aW9uIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLkRvY3VtZW50YXRpb25TZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5Eb2N1bWVudGF0aW9uU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3QiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLSAgIAotICAgCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLSAgIAkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMuVzExUGFyYW1ldGVyU2VjdGlvbiIKLSAgICAgICAgZmlsdGVyPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlcxMVBhcmFtZXRlclNlY3Rpb25GaWx0ZXIiCi0JIAlpZD0icHJvcC5zZWN0aW9uLlcxMVBhcmFtZXRlclNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotICAgCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2UiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5FbmRQb2ludFNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uRW5kUG9pbnRTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50Ij4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLkJpbmRpbmdTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLkJpbmRpbmdTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmciPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5JbXBvcnRTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLkltcG9ydFNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW1wb3J0Ij4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIDwhLS0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmFzZC5lZGl0b3IucHJvcGVydGllcy5zZWN0aW9ucy5TY2hlbWFTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLlNjaGVtYVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYXNkLmZhY2FkZS5JVHlwZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgkgCi0JLS0+Ci0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVzcGFjZVNlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVzcGFjZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb24iPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lc3BhY2VTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lc3BhY2VTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZXNwYWNlU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZXNwYWNlU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFDYXRlZ29yeUFkYXB0ZXIiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMuVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24iCi0JCWZpbHRlcj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucy5XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbkZpbHRlciIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPCEtLSBtb3ZlIHRvIHdzZGwgc3BlY2lmaWMgcGx1Z2luIC0tPgotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmV4dGVuc2liaWxpdHkiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucy5XMTFFeHRlbnNpb25zU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uVzExQXBwbGljYXRpb25JbmZvU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXIiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZXh0ZW5zaWJpbGl0eSIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlcxMUV4dGVuc2lvbnNTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5XMTFBcHBsaWNhdGlvbkluZm9TZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ09wZXJhdGlvbiI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAJIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLSAgPC9wcm9wZXJ0eVNlY3Rpb25zPgotPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmV4dGVuc2lvbkNhdGVnb3JpZXMiPgotICAgICA8Y2F0ZWdvcnkKLSAgICAgCWRpc3BsYXlOYW1lPSJIVFRQIgotICAgICAgCW5hbWVzcGFjZVVSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI+Ci0gICAgICA8L2NhdGVnb3J5PgotCi0gICAgIDxjYXRlZ29yeQotICAgICAJZGlzcGxheU5hbWU9IlNPQVAiCi0gICAgICAJbmFtZXNwYWNlVVJJPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgICAgPC9jYXRlZ29yeT4KLQotICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgZGlzcGxheU5hbWU9Ik1JTUUiCi0gICAgICAJbmFtZXNwYWNlVVJJPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIj4KLSAgICAgPC9jYXRlZ29yeT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4gCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uIAotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yaW5nLm1lbnUub2JqZWN0Q29udHJpYiIgCi0gICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyIj4gIAotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsZWRpdG9yLnJlZmFjdG9yaW5nLm1lbnUucmVmYWN0b3JHcm91cC5vYmplY3QiIAotICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgIHN0eWxlPSJwdWxsZG93biIKLSAgICAgICAgICAgIG1lbnViYXJQYXRoPSJyZWZhY3RvcmluZy1zbG90LXRlbXAiCi0gICAgICAgICAgICBsYWJlbD0iJV9VSV9MQUJFTF9SRUZBQ1RPUiIgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9ucy5XU0RMUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlIj4gCi0gICAgICAgICA8L2FjdGlvbj4gICAgICAgICAgCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAgICAgICAgICAKLSAgICA8L2V4dGVuc2lvbj4KLSAgICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4gCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uIAotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnNlYXJjaFJlZmVyZW5jZXMubWVudS5vYmplY3RDb250cmliIiAKLSAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXIiPiAgCi0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGxlZGl0b3Iuc2VhcmNoUmVmZXJlbmNlcy5tZW51LnNlYXJjaFJlZmVyZW5jZXMub2JqZWN0IiAKLSAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICBzdHlsZT0icHVsbGRvd24iCi0gICAgICAgICAgICBtZW51YmFyUGF0aD0ic2VhcmNoUmVmZXJlbmNlcy1zbG90LXRlbXAiCi0gICAgICAgICAgICBsYWJlbD0iJVJlZmVyZW5jZXMiIAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5hY3Rpb25zLldTRExTZWFyY2hSZWZlcmVuY2VzR3JvdXBBY3Rpb25EZWxlZ2F0ZSI+IAotICAgICAgICAgPC9hY3Rpb24+ICAgICAgICAgIAotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgICAgICAgICAgICAgCi0gICAgPC9leHRlbnNpb24+ICAgIAotCQotCQk8IS0tIGludGlhbGl6ZSB3c2RsIHNvdXJjZSB2YWxpZGF0b3IgLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zb3VyY2V2YWxpZGF0aW9uIj4KLQkJPHZhbGlkYXRvcgotCQkJc2NvcGU9InRvdGFsIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlY29uY2lsZXIuRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvcldTREwiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVjb25jaWxlci5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCI+Ci0JCQk8Y29udGVudFR5cGVJZGVudGlmaWVyCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiPgotCQkJCTxwYXJ0aXRpb25UeXBlIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLlhNTF9ERUZBVUxUIj4KLQkJCQk8L3BhcnRpdGlvblR5cGU+Ci0JCQk8L2NvbnRlbnRUeXBlSWRlbnRpZmllcj4KLQkJPC92YWxpZGF0b3I+Ci0JPC9leHRlbnNpb24+Ci0JCi0JCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuZWRpdG9yQ29uZmlndXJhdGlvbiI+Ci0JCTwhLS0gYWRkIHByZWZlcmVuY2UgcGFnZXMgdG8gdGhlIGNvbnRleHQgbWVudSBhY3Rpb24gKElEIG11c3QgY29ycmVzcG9uZCB0byB0aGUgZGVjbGFyZWQgInBhdGgiIGFib3ZlKSAtLT4KLQkJPHByb3Zpc2lvbmFsRGVmaW5pdGlvbgotCQkJdHlwZT0icHJlZmVyZW5jZXBhZ2VzIgotCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExQcmVmZXJlbmNlUGFnZSIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIgLz4KLQkJPHNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24KLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25XU0RMIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIiAvPgotPCEtLQkJCQotCQk8Y29udGVudE91dGxpbmVDb25maWd1cmF0aW9uCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwub3V0bGluZS5XU0RMQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIiAvPgotLS0+Ci0JPC9leHRlbnNpb24+Ci0JCi0JCTwhLS0gdGhpcyBleHRlbnNpb24gcG9pbnQgaXMgdXNlZCB0byBhdWdtZW50IHRoZSBNb2RlbFF1ZXJ5IHRvIHByb3ZpZGUgV1NETCBzcGVjaWZpYyBndWlkZWQgZWRpdGluZyAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUubW9kZWxRdWVyeUV4dGVuc2lvbnMiPgotCQk8bW9kZWxRdWVyeUV4dGVuc2lvbgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETE1vZGVsUXVlcnlFeHRlbnNpb24iCi0JCQljb250ZW50VHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI+Ci0JCTwvbW9kZWxRdWVyeUV4dGVuc2lvbj4KLQk8L2V4dGVuc2lvbj4KLSAgIAotICAgICAgICA8IS0tIFNlYXJjaCBwYXJ0aWNpcGFudCBleHRlbnNpb24gdGhhdCBzdXBwb3J0cyBYTUxDb21wb25lbnRTZWFyY2hQYXR0ZW4gb24gV1NETCByZXNvdXJjZXMgLS0+Ci0JIDxleHRlbnNpb24gICAKLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2hQYXJ0aWNpcGFudHMiPgotCQk8c2VhcmNoUGFydGljaXBhbnQKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5zZWFyY2guV1NETFNlYXJjaFBhcnRpY2lwYW50IgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiPgotCQkJPGVuYWJsZW1lbnQ+Ci0JCQkgICA8b3I+Ci0JCQkgICAgICA8d2l0aCB2YXJpYWJsZT0icGF0dGVybiI+Ci0JCQkJCTxpbnN0YW5jZW9mIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudFNlYXJjaFBhdHRlcm4iLz4JCQkgICAKLQkJCQkgIDwvd2l0aD4KLQkJCQk8L29yPgotCQkJPC9lbmFibGVtZW50PgotCQk8L3NlYXJjaFBhcnRpY2lwYW50PgotCSA8L2V4dGVuc2lvbj4KLQkKLQotCi0JPCEtLSBSZWZhY3RvcmluZyBDT1JFIC0tPgotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnJlbmFtZVBhcnRpY2lwYW50cyI+Ci0JCTxyZW5hbWVQYXJ0aWNpcGFudAotCQkJbmFtZT0iV1NETCBSZW5hbWUgUGFydGljcGFudCIgICAgICAgICAgIAotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLldTRExDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3RvcmluZy5XU0RMQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQiPgotCQkJPGVuYWJsZW1lbnQ+Ci0JCQkgICA8b3I+Ci0JCQkgICA8d2l0aCB2YXJpYWJsZT0iZWxlbWVudCI+Ci0JCQkJCTxpbnN0YW5jZW9mIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCIvPgkJCSAgIAotCQkJCTwvd2l0aD4KLQkJCSAgIDx3aXRoIHZhcmlhYmxlPSJlbGVtZW50Ij4KLQkJCQkJPGluc3RhbmNlb2YgdmFsdWU9Im9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudCIvPgkJCQkJCQkJCi0JCQkJPC93aXRoPgkJCQkJCQkKLQkJCQk8L29yPgotCQkJPC9lbmFibGVtZW50PgkJCQotCQk8L3JlbmFtZVBhcnRpY2lwYW50PgotCTwvZXh0ZW5zaW9uPgotCQotCSAJPCEtLSAgUmVmYWN0b3JpbmcgVUkgZXh0ZW5zaW9ucyAtLT4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPiAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24gCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3JpbmcubWVudS5vYmplY3RDb250cmliIiAKLSAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCI+IAotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yaW5nLm1lbnUucmVmYWN0b3JHcm91cC5vYmplY3QiIAotICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgIHN0eWxlPSJwdWxsZG93biIKLSAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICBsYWJlbD0iJXJlZmFjdG9yaW5nLm1lbnUubGFiZWwiIAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnMuV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZSI+IAotICAgICAgICAgPC9hY3Rpb24+IAotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgCi0gICAKLSAgICA8dmlld2VyQ29udHJpYnV0aW9uCi0gICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLnJlZmFjdG9yaW5nLm1lbnUuc291cmNlIgotICAgICAgICB0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZS5zb3VyY2UuRWRpdG9yQ29udGV4dCI+Ci0JICAgIDxhY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yaW5nLm1lbnUucmVmYWN0b3JHcm91cC5zb3VyY2UiCi0gICAgICAgCQlzdHlsZT0icHVsbGRvd24iCi0gICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgbGFiZWw9IiVyZWZhY3RvcmluZy5tZW51LmxhYmVsIiAKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zLldTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUiPiAKLSAgCSAgICA8L2FjdGlvbj4KLSAgICAgICA8L3ZpZXdlckNvbnRyaWJ1dGlvbj4gICAgICAgCi0gICAgIDwvZXh0ZW5zaW9uPgotICAgICAgICAgIAotICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+Ci0JCTxjb21tYW5kCi0JCQluYW1lPSIlY29tbWFuZC53c2RsLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50Lm5hbWUiCi0JCQlkZXNjcmlwdGlvbj0iJWNvbW1hbmQud3NkbC5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudC5kZXNjcmlwdGlvbiIKLQkJCWNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LmVkaXQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQiPgotCQk8L2NvbW1hbmQ+Ci0JPC9leHRlbnNpb24+ICAgCi0JCi0JCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvckFjdGlvbnMiPgotCQk8ZWRpdG9yQ29udHJpYnV0aW9uCi0JCQlpZD0ib3JnLmVjbGlwc2UudWkuYXJ0aWNsZXMuYWN0aW9uLmNvbnRyaWJ1dGlvbi5lZGl0b3IiCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciI+Ci0KLQkJCTxtZW51Ci0JCQkJaWQ9IldTRExFZGl0b3IiCi0JCQkJbGFiZWw9IiVfVUlfRURJVE9SX05BTUUiCi0JCQkJcGF0aD0iYWRkaXRpb25zIj4KLQkJCQk8c2VwYXJhdG9yIG5hbWU9Imdyb3VwMSIgLz4KLQkJCTwvbWVudT4KLQotCQkJPGFjdGlvbgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5hY3Rpb25zLlJlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlIgotCQkJCWxhYmVsPSIlX1VJX1JFTE9BRF9ERVBFTkRFTkNJRVMiCi0JCQkJaWNvbj0iaWNvbnMvcmVsb2FkZ3JhbW1hci5naWYiCi0JCQkJdG9vbHRpcD0iUmVsb2FkIERlcGVuZGVuY2llcyIKLQkJCQltZW51YmFyUGF0aD0iV1NETEVkaXRvci9ncm91cDEiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLlJlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlIj4KLQkJCTwvYWN0aW9uPgotCi0JCQk8IS0tCi0JCQkJPGFjdGlvbgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlZhbGlkYXRlQWN0aW9uRGVsZWdhdGUiIAotCQkJCWxhYmVsPSIlX1VJX0FDVElPTl9WQUxJREFURV9XU0RMX0RPQ1VNRU5UIiAKLQkJCQlpY29uPSJpY29ucy92YWxpZGF0ZS5naWYiIAotCQkJCXRvb2x0aXA9IiVfVUlfQUNUSU9OX1ZBTElEQVRFX1dTRExfRE9DVU1FTlQiCi0JCQkJbWVudWJhclBhdGg9IldTRExFZGl0b3IvZ3JvdXAxIgotCQkJCXRvb2xiYXJQYXRoPSIlTm9ybWFsL1dTRExFZGl0b3IiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuVmFsaWRhdGVBY3Rpb25EZWxlZ2F0ZSI+IAotCQkJCTwvYWN0aW9uPiAgICAgIAotCQkJLS0+Ci0KLQkJPC9lZGl0b3JDb250cmlidXRpb24+Ci0gICAgICAgIDxlZGl0b3JDb250cmlidXRpb24KLSAgICAgICAgICAgIHRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlLnNvdXJjZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlLnJ1bGVyLmFjdGlvbnMiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBZGRCb29rbWFyay5sYWJlbCIKLSAgICAgICAgICAgICAgIGhlbHBDb250ZXh0SWQ9Im9yZy5lY2xpcHNlLnVpLmJvb2ttYXJrX2FjdGlvbl9jb250ZXh0IgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIKLSAgICAgICAgICAgICAgIGFjdGlvbklEPSJSdWxlckRvdWJsZUNsaWNrIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIvPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVTZWxlY3RSdWxlci5sYWJlbCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlNlbGVjdFJ1bGVyQWN0aW9uIgotICAgICAgICAgICAgICAgYWN0aW9uSUQ9IlJ1bGVyQ2xpY2siCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIvPgotICAgICAgICA8L2VkaXRvckNvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLQkJCW5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8L2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLQkJCW5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuSHR0cEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8L2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLQkJCW5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuTWltZUV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8L2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyPgotCTwvZXh0ZW5zaW9uPgotCi0KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTxleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcgotCQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuWFNERXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTwvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXI+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbgotICAJICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkuZXh0ZW5zaWJpbGl0eU5vZGVDdXN0b21pemF0aW9ucyI+Ci0gICAgICAgPG5vZGVDdXN0b21pemF0aW9uCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JCQlub2RlRWRpdG9yUHJvdmlkZXJDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9ucy5TT0FQTm9kZUVkaXRvclByb3ZpZGVyIgotCQkJbGFiZWxQcm92aWRlckNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5sYWJlbC5wcm92aWRlcnMuU09BUExhYmVsUHJvdmlkZXIiPgotCQk8L25vZGVDdXN0b21pemF0aW9uPgkJCi0gICAgICAgPG5vZGVDdXN0b21pemF0aW9uCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iCi0JCQlub2RlRWRpdG9yUHJvdmlkZXJDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9ucy5TT0FQTm9kZUVkaXRvclByb3ZpZGVyIgotCQkJbGFiZWxQcm92aWRlckNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5sYWJlbC5wcm92aWRlcnMuSFRUUExhYmVsUHJvdmlkZXIiPgotCQk8L25vZGVDdXN0b21pemF0aW9uPgkJCQkJCi0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0JCTx2aWV3ZXJDb250cmlidXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlLnNvdXJjZS5SdWxlckNvbnRleHQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzbGQudWkucnVsZXIuY29udGV4dC5hY3Rpb25zIj4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJUFkZFRhc2subGFiZWwiCi0JCQkJaGVscENvbnRleHRJZD0ib3JnLmVjbGlwc2UudWkuQWRkVGFza19hY3Rpb25fY29udGV4dCIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5UYXNrUnVsZXJBY3Rpb24iCi0JCQkJdG9vbHRpcD0iJUFkZFRhc2sudG9vbHRpcCIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlRhc2tSdWxlckFjdGlvbiI+Ci0JCQk8L2FjdGlvbj4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJUFkZEJvb2ttYXJrLmxhYmVsIgotCQkJCWhlbHBDb250ZXh0SWQ9Im9yZy5lY2xpcHNlLnVpLmJvb2ttYXJrX2FjdGlvbl9jb250ZXh0IgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iCi0JCQkJdG9vbHRpcD0iJUFkZEJvb2ttYXJrLnRvb2x0aXAiCi0JCQkJbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLQkJCQlpZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIj4KLQkJCTwvYWN0aW9uPgotCQk8L3ZpZXdlckNvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvci5oeXBlcmxpbmtEZXRlY3RvclRhcmdldHMiPgotCQk8dGFyZ2V0Ci0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIKLQkJCW5hbWU9IiVXU0RMX1NvdXJjZV90YXJnZXRfbmFtZSI+Ci0JCTwvdGFyZ2V0PgotCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLmh5cGVybGlua0RldGVjdG9ycyI+Ci0JCTxoeXBlcmxpbmtEZXRlY3RvcgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETEh5cGVybGlua0RldGVjdG9yIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETEh5cGVybGlua0RldGVjdG9yIgotCQkJbmFtZT0iJVdTRExfaHlwZXJsaW5rIgotCQkJdGFyZ2V0SWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiPgotCQk8L2h5cGVybGlua0RldGVjdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuY29udGVudEdlbmVyYXRvclVJIj4KLSAgICAgIDxjb250ZW50R2VuZXJhdG9yVUkKLSAgICAgICAgbmFtZT0iU09BUCIKLSAgICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotICAgICAgICBsYWJlbD0iJVNPQVAiCi0gICAgICAgIHBvcnRPcHRpb25zUGFnZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLkFkZHJlc3NQb3J0T3B0aW9uc1BhZ2UiCi0gICAgICAgIGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLlNvYXBCaW5kaW5nT3B0aW9uc1BhZ2UiPgotICAgICAgPC9jb250ZW50R2VuZXJhdG9yVUk+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuY29udGVudEdlbmVyYXRvclVJIj4KLSAgICAgIDxjb250ZW50R2VuZXJhdG9yVUkKLSAgICAgICAgbmFtZT0iSFRUUCIKLSAgICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIgotICAgICAgICBsYWJlbD0iJUhUVFAiCi0gICAgICAgIHBvcnRPcHRpb25zUGFnZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLkFkZHJlc3NQb3J0T3B0aW9uc1BhZ2UiCi0gICAgICAgIGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLkh0dHBCaW5kaW5nT3B0aW9uc1BhZ2UiPgotICAgICAgPC9jb250ZW50R2VuZXJhdG9yVUk+Ci0gICA8L2V4dGVuc2lvbj4gICAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvYWRhcHRlckZhY3RvcnkuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2FkYXB0ZXJGYWN0b3J5LmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhODY1MzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvYWRhcHRlckZhY3RvcnkuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiIGlkPSJhZGFwdGVyRmFjdG9yeSIgbmFtZT0iQWRhcHRlciBGYWN0b3J5IEV4dGVuc2lvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgQWRhcHRlciBGYWN0b3J5IEV4dGVuc2lvbiBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgYWRhcHRlciBmYWN0b3JpZXMgdGhhdCBleHRlbmQgdGhlIGRlc2NyaXB0aW9uIG9mIFdTREwgZWxlbWVudHMgZm9yIFVJIHB1cnBvc2VzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBBZGFwdGVyIEZhY3RvcnkgRXh0ZW5zaW9uIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBhZGFwdGVyIGZhY3RvcmllcyB0aGF0IGV4dGVuZCB0aGUgZGVzY3JpcHRpb24gb2YgV1NETCBlbGVtZW50cyBmb3IgVUkgcHVycG9zZXMuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImFkYXB0ZXJGYWN0b3J5Ii8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJhZGFwdGVyRmFjdG9yeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYWRhcHRlckZhY3RvcnlDbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBZGFwdGVyIGZhY3RvcnkgZm9yIGEgc3BlY2lmaWMgbmFtZXNwYWNlLiAgVGhlIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Jmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249IjpvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwbHVnaW5zLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgY29udGVudCBnZW5lcmF0b3IgdWkgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSAmbHQ7ZXh0ZW5zaW9uIHBvaW50ID0gJnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuYWRhcHRlckZhY3RvcnkmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7YWRhcHRlckZhY3RvcnkKLSAgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDsKLSAgICAgICAgYWRhcHRlckZhY3RvcnlDbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLlNPQVBBZGFwdGVyRmFjdG9yeSZxdW90OyZndDsKLSAgICAgICZsdDsvYWRhcHRlckZhY3RvcnkmZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzc2VzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Jmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9jb250ZW50R2VuZXJhdG9yVUkuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2NvbnRlbnRHZW5lcmF0b3JVSS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTc1OGI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2NvbnRlbnRHZW5lcmF0b3JVSS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBpZD0iY29udGVudEdlbmVyYXRvclVJIiBuYW1lPSJVSSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgVUkgUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIFVJIChpbiB0aGUgTmV3IFdTREwgRmlsZSB3aXphcmQpIGZvciB0aGVpciBjdXN0b20gZ2VuZXJhdG9ycyBmb3IgUG9ydHMgYW5kIEJpbmRpbmdzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBVSSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgdWkgKGZvciB0aGUgTmV3IFdTREwgRmlsZSB3aXphcmQpIGZvciB0aGVpciBjdXN0b20gY29udGVudCBnZW5lcmF0b3JzIGZvciBXU0RMIFBvcnRzIGFuZCBCaW5kaW5ncy4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY29udGVudEdlbmVyYXRvclVJIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJjb250ZW50R2VuZXJhdG9yVUkiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE5hbWUgdXNlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvcnRPcHRpb25zUGFnZUNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFVJIHRoYXQgb2ZmZXJzIHBvcnQgb3B0aW9ucy4gIFRoZSBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSI6b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJiaW5kaW5nT3B0aW9uc1BhZ2VDbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBVSSB0aGF0IG9mZmVycyBiaW5kaW5nIG9wdGlvbnMuICBUaGUgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UmbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iOm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGxhYmVsIHVzZWQgdG8gZGVzY3JpYmUgdGhpcyBleHRlbnNpb24gcG9pbnQgaW5zdGFuY2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbnRlbnQgZ2VuZXJhdG9yIHVpIGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uIHBvaW50ID0gJnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuY29udGVudEdlbmVyYXRvclVJJnF1b3Q7Jmd0OwotICAgICAgJmx0O2NvbnRlbnRHZW5lcmF0b3JVSQotICAgICAgICBuYW1lPSZxdW90O1NPQVAmcXVvdDsKLSAgICAgICAgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDsKLSAgICAgICAgcG9ydE9wdGlvbnNQYWdlQ2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aS5BZGRyZXNzUG9ydE9wdGlvbnNQYWdlJnF1b3Q7Ci0gICAgICAgIGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWkuU29hcEJpbmRpbmdPcHRpb25zUGFnZSZxdW90OyZndDsKLSAgICAgICZsdDsvY29udGVudEdlbmVyYXRvclVJJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3NlcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0NzBkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIgaWQ9ImV4dGVuc2liaWxpdHllbGVtZW50RmlsdGVyIiBuYW1lPSJFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmlsdGVyIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmlsdGVyIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBmaWx0ZXJzIGZvciBFeHRlbnNpYmlsaXR5IEVsZW1lbnRzIGluIHRoZSBXU0RMIEVkaXRvciBiYXNlZCBvbiB0aGUgRXh0ZW5zaWJpbGl0eSBFbGVtZW50JmFwb3M7cyBuYW1lc3BhY2UuICBUaGVzZSBmaWx0ZXJzIGRldGVybWluZSB3aGF0IGlzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgV1NETCBFZGl0b3IuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gRXh0ZW5zaWJpbGl0eSBFbGVtZW50IEZpbHRlciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvJnF1b3Q7Ci0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXImcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlcnMuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVycy5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2Y4OTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVycy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIgaWQ9ImV4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVycyIgbmFtZT0iRXh0ZW5zaWJpbGl0eSBJdGVtIFRyZWUgUHJvdmlkZXJzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBFeHRlbnNpYmlsaXR5IEl0ZW0gVHJlZSBQcm92aWRlciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgY3VzdG9tIElMYWJlbFByb3ZpZGVycyAodG8gcHJvdmlkZSBjdXN0b20gbGFiZWxzIGFuZCBpY29ucykgZm9yIEV4dGVuc2liaWxpdHkgRWxlbWVudHMgaW4gdGhlIFdTREwgRWRpdG9yIGJhc2VkIG9uIHRoZSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQmYXBvcztzIG5hbWVzcGFjZS4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXIiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgdGhpcyBleHRlbnNpb24gcG9pbnQgaW5zdGFuY2UgYXBwbGllcyB0by4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbFByb3ZpZGVyQ2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhbiBFeHRlbnNpYmlsaXR5IEl0ZW0gVHJlZSBQcm92aWRlciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJzJnF1b3Q7Jmd0OwotICAgICAgJmx0O2V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyCi0gICAgICAgICAgICBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyZxdW90OwotICAgICAgICAgICAgbGFiZWxQcm92aWRlckNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLm91dGxpbmUuU09BUExhYmVsUHJvdmlkZXImcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2ludGVybmFsRWRpdG9yRXh0ZW5zaW9ucy5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NzEwZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBpZD0iaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zIiBuYW1lPSJJbnRlcm5hbCBFZGl0b3IgRXh0ZW5zaW9ucyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgSW50ZXJuYWwgRWRpdG9yIEV4dGVuc2lvbiBwb2ludCBpcyB1c2VkIHRvIHByb3ZpZGUgR1VJIG9iamVjdHMsIGFjdGlvbnMsIGNvbnRleHQgbWVudSBpdGVtcywgZXRjLi4uIGZvciBub24gV1NETCBNb2RlbCBPYmplY3RzIGluIHRoZSBXU0RMIEVkaXRvci4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iaW50ZXJuYWxFZGl0b3JFeHRlbnNpb24iLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImludGVybmFsRWRpdG9yRXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb24uV1NETEVkaXRvckV4dGVuc2lvbiZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gSW50ZXJuYWwgRWRpdG9yIEV4dGVuc2lvbiBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zJnF1b3Q7Jmd0OwotICAgICAgJmx0O2ludGVybmFsRWRpdG9yRXh0ZW5zaW9uCi0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC54c2QuWFNERXh0ZW5zaW9uJnF1b3Q7IC8mZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb24uV1NETEVkaXRvckV4dGVuc2lvbiZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL3Byb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9wcm9wZXJ0eURlc2NyaXB0b3JQcm92aWRlci5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTM4NDYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL3Byb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBpZD0icHJvcGVydHlEZXNjcmlwdG9yUHJvdmlkZXIiIG5hbWU9IlByb3BlcnR5IERlc2NyaXB0b3IgUHJvdmlkZXIiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIFByb3BlcnR5IERlc2NyaXB0b3IgUHJvdmlkZXIgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIHRoZWlyIG93biBjdXN0b20gSVByb3BlcnR5RGVzY3JpcHRvciBpbiB0aGUgV1NETCBFZGl0b3IgYmFzZWQgb24gbmFtZXNwYWNlLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwcm9wZXJ0eURlc2NyaXB0b3JQcm92aWRlciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHlEZXNjcmlwdG9yUHJvdmlkZXIiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlEZXNjcmlwdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhbiAgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyJnF1b3Q7Jmd0OwotICAgICAgJmx0O3Byb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyCi0gICAgICAgICAgICBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyZxdW90OwotICAgICAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXhhbXBsZS5FeGFtcGxlUHJvcGVydHlEZXNjcmlwdG9yJnF1b3Q7LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5RGVzY3JpcHRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvRGVmYXVsdEVkaXRvck1vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvRGVmYXVsdEVkaXRvck1vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhYmI2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0RlZmF1bHRFZGl0b3JNb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5BU0RFZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuQVNEQ29udGVudE91dGxpbmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZTsKLQotcHVibGljIGNsYXNzIERlZmF1bHRFZGl0b3JNb2RlIGV4dGVuZHMgRWRpdG9yTW9kZQotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJRCA9ICBEZWZhdWx0RWRpdG9yTW9kZS5jbGFzcy5nZXROYW1lKCk7Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkKLSAgewotICAgIHJldHVybiBNZXNzYWdlcy5fVUlfTEFCRUxfREVGQVVMVDsKLSAgfQotCi0gIHB1YmxpYyBFZGl0UGFydEZhY3RvcnkgZ2V0RWRpdFBhcnRGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiBuZXcgQVNERWRpdFBhcnRGYWN0b3J5KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiBJRDsKLSAgfQotCi0gIHB1YmxpYyBJQ29udGVudFByb3ZpZGVyIGdldE91dGxpbmVQcm92aWRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIoKTsKLSAgfSAKLSAgIAotICBwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRBZGFwdGVyKGFkYXB0ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0lEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JRGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMyMDFhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0lEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5JU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSURlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yIGV4dGVuZHMgSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yIHsKLQlwdWJsaWMgdm9pZCBpbml0Vmlld2VyU3BlY2lmaWNDb250cmlidXRpb25zKElBY3Rpb25CYXJzIGJhcnMpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSVNlbGVjdGlvbk1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JU2VsZWN0aW9uTWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNmRhZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JU2VsZWN0aW9uTWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNlbGVjdGlvbk1hcHBlciB7Ci0JSVNlbGVjdGlvbiBtYXBTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3RlZE9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0ludGVybmFsV1NETE11bHRpUGFnZUVkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYxY2Y2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0ludGVybmFsV1NETE11bHRpUGFnZUVkaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5LZXlTdHJva2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuQWN0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuR0VGQWN0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklQb3N0U2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMUFkZFBhcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFPcGVuSW1wb3J0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3RWxlbWVudEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld01lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTRE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERpcmVjdEVkaXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5LZXlib2FyZERyYWdJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkRlZmluaXRpb25zRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuQVNEQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLklPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETE1vZGVsQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZGVzaWduLklLZXlib2FyZERyYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Qcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIGV4dGVuZHMgQVNETXVsdGlQYWdlRWRpdG9yCi17Ci0JUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7Ci0JUmVzb3VyY2Ugd3NkbFJlc291cmNlOwotCQotCXByb3RlY3RlZCBXU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyIHJlc291cmNlQ2hhbmdlSGFuZGxlcjsKLQkKLQlwcm90ZWN0ZWQgV1NETE1vZGVsQWRhcHRlciBtb2RlbEFkYXB0ZXI7Ci0JcHJvdGVjdGVkIFNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyIGZTb3VyY2VFZGl0b3JTZWxlY3Rpb25MaXN0ZW5lcjsKLQlwcm90ZWN0ZWQgV1NETFNlbGVjdGlvbk1hbmFnZXJTZWxlY3Rpb25MaXN0ZW5lciBmV1NETFNlbGVjdGlvbkxpc3RlbmVyOwotCi0gIHByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWw7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX0VESVRPUl9NT0RFX0VYVEVOU0lPTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5lZGl0b3JNb2RlcyI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBJRGVzY3JpcHRpb24gYnVpbGRNb2RlbChJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsgICAKLQkgIHRyeSB7Ci0JCSAgLy8gSVNTVUU6IFRoaXMgY29kZSB3aGljaCBkZWFscyB3aXRoIHRoZSBzdHJ1Y3R1cmVkIG1vZGVsIGlzIHNpbWlsYXIgdG8gdGhlIG9uZSBpbiB0aGUgWFNEIGVkaXRvci4gCi0JCSAgLy8gSXQgY291bGQgYmUgcmVmYWN0b3JlZCBpbnRvIHRoZSBiYXNlIGNsYXNzLgotCi0JCSAgRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCQkgIElEb2N1bWVudCBkb2MgPSBzdHJ1Y3R1cmVkVGV4dEVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9ySW5wdXQpOwotCQkgIGlmIChkb2MgaW5zdGFuY2VvZiBJU3RydWN0dXJlZERvY3VtZW50KSB7Ci0JCQkgIElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGRvYyk7Ci0JCQkgIGlmIChtb2RlbCA9PSBudWxsKSB7Ci0JCQkJICBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KChJU3RydWN0dXJlZERvY3VtZW50KSBkb2MpOwotCQkJICB9Ci0JCQkgIHN0cnVjdHVyZWRNb2RlbCA9IG1vZGVsOwotCQkJICBkb2N1bWVudCA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJICB9Ci0JCSAgQXNzZXJ0LmlzTm90TnVsbChkb2N1bWVudCk7Ci0KLQkJICBPYmplY3Qgb2JqID0gbnVsbDsKLQotCQkgIGlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElOb2RlTm90aWZpZXIpIHsKLQkJCSAgSU5vZGVOb3RpZmllciBub3RpZmllciA9IChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudDsKLQkJCSAgbW9kZWxBZGFwdGVyID0gKFdTRExNb2RlbEFkYXB0ZXIpIG5vdGlmaWVyLmdldEFkYXB0ZXJGb3IoV1NETE1vZGVsQWRhcHRlci5jbGFzcyk7Ci0JCQkgIGlmIChtb2RlbEFkYXB0ZXIgPT0gbnVsbCkgewotCQkJCSAgbW9kZWxBZGFwdGVyID0gbmV3IFdTRExNb2RlbEFkYXB0ZXIoKTsKLQkJCQkgIG5vdGlmaWVyLmFkZEFkYXB0ZXIobW9kZWxBZGFwdGVyKTsKLQkJCQkgIG9iaiA9IG1vZGVsQWRhcHRlci5jcmVhdGVEZWZpbml0aW9uKGRvY3VtZW50KTsKLQkJCSAgfQotCQkJICBpZiAob2JqID09IG51bGwpIHsKLQkJCQkgIG9iaiA9IG1vZGVsQWRhcHRlci5jcmVhdGVEZWZpbml0aW9uKGRvY3VtZW50KTsKLQkJCSAgfQotCQkgIH0KLQotCQkgIGlmIChvYmogaW5zdGFuY2VvZiBEZWZpbml0aW9uKSB7Ci0JCQkgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBvYmo7Ci0JCQkgIG1vZGVsID0gKElEZXNjcmlwdGlvbikgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZGVmaW5pdGlvbik7Ci0JCSAgfQotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgIH0gICAgCi0KLQkgIHJldHVybiBtb2RlbDsKLSAgfQotCQotCXByaXZhdGUgWFNEU2NoZW1hW10gZ2V0SW5saW5lU2NoZW1hcygpIHsKLQkJTGlzdCB0eXBlcyA9IGdldE1vZGVsKCkuZ2V0VHlwZXMoKTsKLQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVzLnNpemUoKTsgaW5kZXgrKykgewotCQkJVzExVHlwZSB0eXBlID0gKFcxMVR5cGUpIHR5cGVzLmdldChpbmRleCk7Ci0JCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzY2hlbWFzOwotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgdHlwZSkgewotCQlpZiAodHlwZSA9PSBEZWZpbml0aW9uLmNsYXNzKQotCQl7Ci0JCQlyZXR1cm4gKChXMTFEZXNjcmlwdGlvbikgZ2V0TW9kZWwoKSkuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJZWxzZSBpZiAodHlwZSA9PSBJU2VsZWN0aW9uTWFwcGVyLmNsYXNzKQotCQl7Ci0JCQlyZXR1cm4gbmV3IFdTRExTZWxlY3Rpb25NYXBwZXIoKTsKLQkJfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IERlZmluaXRpb24uY2xhc3MgJiYgbW9kZWwgaW5zdGFuY2VvZiBBZGFwdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuICgoQWRhcHRlciltb2RlbCkuZ2V0VGFyZ2V0KCk7IAotICAgICAgICB9Ci0JCWVsc2UgaWYgKHR5cGUgPT0gSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5jbGFzcykgewotCQkJcmV0dXJuIG5ldyBXMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIoZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCX0KLQotICAgICAgICBlbHNlIGlmICh0eXBlID09IFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykKLSAgICAgICAgewotICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgICAgIFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IG5ldyBXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCksIG51bGwpOwotICAgICAgICAgICAgcmVmTWFuYWdlci5zZXRTY2hlbWFzKGdldElubGluZVNjaGVtYXMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVmTWFuYWdlcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpCi0gICAgICAgIHsKLSAgICAgICAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBnZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0gICAgICAgICAgewotICAgICAgICAgICAgSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgZWRpdG9ySW5wdXQ7Ci0gICAgICAgICAgICBXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBuZXcgV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcihmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpLCBudWxsKTsKLSAgICAgICAgICAgIHJlZk1hbmFnZXIuc2V0U2NoZW1hcyhnZXRJbmxpbmVTY2hlbWFzKCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlZk1hbmFnZXI7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBnZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAlJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgICAgIAlyZXR1cm4gbmV3IFcxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCksIGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpIHsKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgCUlGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgICAgICAgCXJldHVybiBuZXcgVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKFcxMURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpLCBmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgIH0gICAgICAgIAkKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAJSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgZWRpdG9ySW5wdXQ7Ci0gICAgICAgICAgICAJcmV0dXJuIG5ldyBXMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKFcxMURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpLCBmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgIH0gICAgICAgIAkKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuY2xhc3MpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IElLZXlib2FyZERyYWcuY2xhc3MpIHsKLQkJCXJldHVybiBuZXcgS2V5Ym9hcmREcmFnSW1wbCgpOwotCQl9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5jbGFzcykgewotICAgICAgICAJcmV0dXJuIG5ldyBXMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIoZ2V0RWRpdG9ySW5wdXQoKSk7Ci0gICAgICAgIH0KLQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIodHlwZSk7Ci0JfQotCQotCS8qKgotCSAqIExpc3RlbmVyIG9uIFNTRSdzIHNvdXJjZSBlZGl0b3IncyBzZWxlY3Rpb25zIHRoYXQgY29udmVydHMgRE9NCi0JICogc2VsZWN0aW9ucyBpbnRvIHhzZCBzZWxlY3Rpb25zIGFuZCBub3RpZmllcyBXU0RMIHNlbGVjdGlvbiBtYW5hZ2VyCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBTb3VyY2VFZGl0b3JTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQkvKioKLQkJICogRGV0ZXJtaW5lcyBXU0RMIGZhY2FkZSBvYmplY3QgYmFzZWQgb24gRE9NIG5vZGUKLQkJICogCi0JCSAqIEBwYXJhbSBvYmplY3QKLQkJICogQHJldHVybgotCQkgKi8KLQkJcHJpdmF0ZSBPYmplY3QgZ2V0V1NETEZhY2FkZU9iamVjdChPYmplY3Qgb2JqZWN0KSB7Ci0JCQkvLyBnZXQgdGhlIGVsZW1lbnQgbm9kZQotCQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlKSB7Ci0JCQkJTm9kZSBub2RlID0gKE5vZGUpIG9iamVjdDsKLQkJCQlpZiAobm9kZSAhPSBudWxsKSB7Ci0JCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQkJCWVsZW1lbnQgPSAoRWxlbWVudCkgbm9kZTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkgewotCQkJCQkJZWxlbWVudCA9ICgoQXR0cikgbm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlPYmplY3QgbyA9IGVsZW1lbnQ7Ci0JCQlpZiAoZWxlbWVudCAhPSBudWxsKSB7Ci0JCQkJRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgKChXMTFEZXNjcmlwdGlvbikgbW9kZWwpLmdldFRhcmdldCgpOwotCQkJCU9iamVjdCBtb2RlbE9iamVjdCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZmluZE1vZGVsT2JqZWN0Rm9yRWxlbWVudChkZWYsIGVsZW1lbnQpOwotCQkJCQotCQkJCS8vIHJtYWg6IFdlIGhhbmRsZSB0aGlzIHNwZWNpYWwgc2NlbmFyaW8gd2hlcmUgdGhlIG1vZGVsT2JqZWN0IGlzIGFuIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50LgotCQkJCS8vIFdlIGFjdHVhbGx5IHdhbnQgdGhlIFhTRFNjaGVtYSBvYmplY3QuICBIb3dldmVyLCBvdXIgbm9kZSByZWNvbmNpbGVyIHdpbGwgYWx3YXlzIHJldHVybgotCQkJCS8vIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGJlY2F1c2UgYm90aCBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBhbmQgWFNEU2NoZW1hCi0JCQkJLy8gYm90aCBoYXZlIHRoZSBTQU1FIEVsZW1lbnQgb2JqZWN0LCBhbmQgdGhlIHJlY29uY2lsZXIgZW5jb3VudGVycyB0aGUgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLQkJCQkvLyBmaXJzdC4uLi4gIFNlZSBXU0RMTm9kZU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIGZvciBtb3JlIGRldGFpbHMuLi4uLgotCQkJCWlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSB7Ci0JCQkJCW1vZGVsT2JqZWN0ID0gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgbW9kZWxPYmplY3QpLmdldFNjaGVtYSgpOwotCQkJCX0KLQkJCQlpZiAobW9kZWxPYmplY3QgIT0gbnVsbCkgewotCQkJCQlvID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoKE5vdGlmaWVyKSBtb2RlbE9iamVjdCk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIG87Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmdldEVuYWJsZU5vdGlmeSgpICYmIGdldEFjdGl2ZVBhZ2UoKSA9PSAxKQotCQkJewotCQkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotCQkJCXsKLQkJCQkJTGlzdCBzZWxlY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCQlmb3IgKEl0ZXJhdG9yIGkgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJCQkJewotCQkJCQkJT2JqZWN0IGRvbU5vZGUgPSBpLm5leHQoKTsKLQkJCQkJCU9iamVjdCBmYWNhZGUgPSBnZXRXU0RMRmFjYWRlT2JqZWN0KGRvbU5vZGUpOwotCQkJCQkJaWYgKGZhY2FkZSAhPSBudWxsKQotCQkJCQkJewotCQkJCQkJCXNlbGVjdGlvbnMuYWRkKGZhY2FkZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJCi0JCQkJCWlmICghc2VsZWN0aW9ucy5pc0VtcHR5KCkpCi0JCQkJCXsKLQkJCQkJCVN0cnVjdHVyZWRTZWxlY3Rpb24gd3NkbFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbnMpOwotCQkJCQkJZ2V0U2VsZWN0aW9uTWFuYWdlcigpLnNldFNlbGVjdGlvbih3c2RsU2VsZWN0aW9uLCBnZXRUZXh0RWRpdG9yKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogTGlzdGVuZXIgb24gV1NETCdzIHNlbGVjdGlvbiBtYW5hZ2VyJ3Mgc2VsZWN0aW9ucyB0aGF0IGNvbnZlcnRzIFdTREwKLQkgKiBzZWxlY3Rpb25zIGludG8gRE9NIHNlbGVjdGlvbnMgYW5kIG5vdGlmaWVzIFNTRSdzIHNlbGVjdGlvbiBwcm92aWRlcgotCSAqLwotCXByaXZhdGUgY2xhc3MgV1NETFNlbGVjdGlvbk1hbmFnZXJTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQkvKioKLQkJICogRGV0ZXJtaW5lcyBET00gbm9kZSBiYXNlZCBvbiBvYmplY3QgKHdzZGwgbm9kZSkKLQkJICogCi0JCSAqIEBwYXJhbSBvYmplY3QKLQkJICogQHJldHVybgotCQkgKi8KLQkJcHJpdmF0ZSBPYmplY3QgZ2V0T2JqZWN0Rm9yT3RoZXJNb2RlbChPYmplY3Qgb2JqZWN0KSB7Ci0JCQlOb2RlIG5vZGUgPSBudWxsOwotCQkJCi0JCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgTm9kZSkgewotCQkJCW5vZGUgPSAoTm9kZSkgb2JqZWN0OwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7Ci0JCQkJLy8gVGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBhIFVSSSBmcmFnbWVudCB1c2VkIHRvIGlkZW50aWZ5IGEgV1NETCBlbGVtZW50LgotCQkJCS8vIFRoZSBVUkkgZnJhZ21lbnQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBkZWZpbml0aW9uIGJlaW5nIGVkaXRlZCBpbiB0aGlzIGVkaXRvci4KLQkJCQlTdHJpbmcgdXJpRnJhZ21lbnQgPSAoU3RyaW5nKW9iamVjdDsKLQkJCQlFT2JqZWN0IGRlZmluaXRpb24gPSAoKERlZmluaXRpb24pKChXMTFEZXNjcmlwdGlvbilnZXRNb2RlbCgpKS5nZXRUYXJnZXQoKSk7Ci0JCQkJRU9iamVjdCBtb2RlbE9iamVjdCA9IGRlZmluaXRpb24uZVJlc291cmNlKCkuZ2V0RU9iamVjdCh1cmlGcmFnbWVudCk7Ci0KLQkJCQlpZiAobW9kZWxPYmplY3QgIT0gbnVsbCkgewotCQkJCQlub2RlID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXROb2RlRm9yT2JqZWN0KG1vZGVsT2JqZWN0KTsKLQkJCQl9ICAgICAgICAKLQkJCX0KLQkJCWVsc2UgewotCQkJCW5vZGUgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldE5vZGVGb3JPYmplY3Qob2JqZWN0KTsKLQkJCX0KLQkJCQotCQkJLy8gdGhlIHRleHQgZWRpdG9yIGNhbiBvbmx5IGFjY2VwdCBzZWQgbm9kZXMhCi0JCQkvLwotCQkJaWYgKCEobm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKSkgewotCQkJCW5vZGUgPSBudWxsOwotCQkJfQotCQkJcmV0dXJuIG5vZGU7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkvLyBkbyBub3QgZmlyZSBzZWxlY3Rpb24gaW4gc291cmNlIGVkaXRvciBpZiB0aGUgY3VycmVudCBhY3RpdmUgcGFnZSBpcyB0aGUgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIChzb3VyY2UpCi0JCQkvLyBXZSBvbmx5IHdhbnQgdG8gbWFrZSBzb3VyY2Ugc2VsZWN0aW9ucyBpZiB0aGUgYWN0aXZlIHBhZ2UgaXMgZWl0aGVyIHRoZSBvdXRsaW5lIG9yIHByb3BlcnRpZXMgKGEgbW9kaWZ5Ci0JCQkvLyBoYXMgYmVlbiBkb25lIHZpYSB0aGUgb3V0bGluZSBvciBwcm9wZXJ0aWVzIGFuZCBub3QgdGhlIHNvdXJjZSB2aWV3KS4gIFdlIGRvbid0IHdhbnQgdG8gYmUgc2VsZWN0aW5nCi0JCQkvLyBhbmQgdW5zZWxlY3RpbmcgdGhpbmdzIGluIHRoZSBzb3VyY2Ugd2hlbiBlZGl0aW5nIGluIHRoZSBzb3VyY2UhIQotCQkJYm9vbGVhbiBtYWtlU2VsZWN0aW9uID0gdHJ1ZTsKLQkJCWlmIChQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKSAhPSBudWxsICAmJiAhKGV2ZW50LmdldFNvdXJjZSgpIGluc3RhbmNlb2YgSVBvc3RTZWxlY3Rpb25Qcm92aWRlcikpIHsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJaWYgKHBhZ2UuZ2V0QWN0aXZlUGFydCgpIGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSB7Ci0JCQkJCWlmIChnZXRBY3RpdmVFZGl0b3IoKSBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQltYWtlU2VsZWN0aW9uID0gZmFsc2U7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCS8vIGRvIG5vdCBmaXJlIHNlbGVjdGlvbiBpbiBzb3VyY2UgZWRpdG9yIGlmIHNlbGVjdGlvbiBldmVudCBjYW1lCi0JCQkvLyBmcm9tIHNvdXJjZSBlZGl0b3IKLQkJCQlpZiAoZXZlbnQuZ2V0U291cmNlKCkgIT0gZ2V0VGV4dEVkaXRvcigpLmdldFNlbGVjdGlvblByb3ZpZGVyKCkgJiYgbWFrZVNlbGVjdGlvbikgewotCQkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJCUxpc3Qgb3RoZXJNb2RlbE9iamVjdExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJCWZvciAoSXRlcmF0b3IgaSA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJCQlPYmplY3Qgd3NkbE9iamVjdCA9IGkubmV4dCgpOwotCi0JCQkJCQlpZiAod3NkbE9iamVjdCBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQkJCXdzZGxPYmplY3QgPSAoKFdTRExCYXNlQWRhcHRlcikgd3NkbE9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJCQl9Ci0KLQkJCQkJCU9iamVjdCBvdGhlck1vZGVsT2JqZWN0ID0gZ2V0T2JqZWN0Rm9yT3RoZXJNb2RlbCh3c2RsT2JqZWN0KTsKLQkJCQkJCWlmIChvdGhlck1vZGVsT2JqZWN0ICE9IG51bGwpIHsKLQkJCQkJCQlvdGhlck1vZGVsT2JqZWN0TGlzdC5hZGQob3RoZXJNb2RlbE9iamVjdCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJaWYgKCFvdGhlck1vZGVsT2JqZWN0TGlzdC5pc0VtcHR5KCkpIHsKLQkJCQkJCVN0cnVjdHVyZWRTZWxlY3Rpb24gbm9kZVNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG90aGVyTW9kZWxPYmplY3RMaXN0KTsKLQkJCQkJCWdldFRleHRFZGl0b3IoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLnNldFNlbGVjdGlvbihub2RlU2VsZWN0aW9uKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVHcmFwaGljYWxWaWV3ZXIoKSB7Ci0JCXN1cGVyLmNvbmZpZ3VyZUdyYXBoaWNhbFZpZXdlcigpOwotCQlncmFwaGljYWxWaWV3ZXIuZ2V0S2V5SGFuZGxlcigpLnB1dChLZXlTdHJva2UuZ2V0UHJlc3NlZChTV1QuRjIsIDApLCBnZXRBY3Rpb25SZWdpc3RyeSgpLmdldEFjdGlvbihHRUZBY3Rpb25Db25zdGFudHMuRElSRUNUX0VESVQpKTsKLQkJc2V0RWRpdFBhcnRGYWN0b3J5KGdldEVkaXRvck1vZGVNYW5hZ2VyKCkuZ2V0Q3VycmVudE1vZGUoKS5nZXRFZGl0UGFydEZhY3RvcnkoKSk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZVBhZ2VzKCkgewotCQlzdXBlci5jcmVhdGVQYWdlcygpOwotCQkKLQkJaWYgKHJlc291cmNlQ2hhbmdlSGFuZGxlciA9PSBudWxsKSB7Ci0JCQlyZXNvdXJjZUNoYW5nZUhhbmRsZXIgPSBuZXcgV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlcih0aGlzKTsKLQkJCXJlc291cmNlQ2hhbmdlSGFuZGxlci5hdHRhY2goKTsKLQkJfQotCQkKLQkJZlNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyID0gbmV3IFNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0JCUlTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlciA9IGdldFRleHRFZGl0b3IoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOwotCQlpZiAocHJvdmlkZXIgaW5zdGFuY2VvZiBJUG9zdFNlbGVjdGlvblByb3ZpZGVyKSB7Ci0JCQkoKElQb3N0U2VsZWN0aW9uUHJvdmlkZXIpIHByb3ZpZGVyKS5hZGRQb3N0U2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZTb3VyY2VFZGl0b3JTZWxlY3Rpb25MaXN0ZW5lcik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZlNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJfQotCQkKLQkJZldTRExTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBXU0RMU2VsZWN0aW9uTWFuYWdlclNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0JCWdldFNlbGVjdGlvbk1hbmFnZXIoKS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZldTRExTZWxlY3Rpb25MaXN0ZW5lcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCWlmIChzdHJ1Y3R1cmVkTW9kZWwgIT0gbnVsbCkgewotCQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOyAgICAgIAotCQl9Ci0JCWlmIChyZXNvdXJjZUNoYW5nZUhhbmRsZXIgIT0gbnVsbCkgewotCQkJcmVzb3VyY2VDaGFuZ2VIYW5kbGVyLmRpc3Bvc2UoKTsKLQkJfQotCQlnZXRTZWxlY3Rpb25NYW5hZ2VyKCkucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZXU0RMU2VsZWN0aW9uTGlzdGVuZXIpOwotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlbG9hZERlcGVuZGVuY2llcygpIHsKLQkJdHJ5IHsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSAoKFcxMURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCQlXU0RMUmVzb3VyY2VVdGlsLnJlbG9hZERpcmVjdGl2ZXMoZGVmaW5pdGlvbik7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC51cGRhdGVCaW5kaW5nUmVmZXJlbmNlcyhkZWZpbml0aW9uKTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnVwZGF0ZVBvcnRUeXBlUmVmZXJlbmNlcyhkZWZpbml0aW9uKTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnVwZGF0ZU1lc3NhZ2VSZWZlcmVuY2VzKGRlZmluaXRpb24pOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwudXBkYXRlU2NoZW1hUmVmZXJlbmNlcyhkZWZpbml0aW9uKTsKLQkJCQkvLyB0aGUgbGluZSBiZWxvdyBzaW1wbHkgY2F1c2VzIGEgbm90aWZpY2F0aW9uIGluIG9yZGVyIHRvCi0JCQkJLy8gdXBkYXRlIG91cgotCQkJCS8vIHZpZXdzCi0JCQkJLy8KLQkJCQlkZWZpbml0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KGRlZmluaXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVBY3Rpb25zKCkgewotCQlzdXBlci5jcmVhdGVBY3Rpb25zKCk7Ci0KLSAgICBBY3Rpb25SZWdpc3RyeSByZWdpc3RyeSA9IGdldEFjdGlvblJlZ2lzdHJ5KCk7Ci0gICAgQmFzZVNlbGVjdGlvbkFjdGlvbiBhY3Rpb247Ci0gICAgaWYgKCFpc0ZpbGVSZWFkT25seSgpKSB7Ci0JICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRNZXNzYWdlQWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotCSAgICBhY3Rpb24gPSBuZXcgVzExQWRkUGFydEFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JICAgIAotCSAgICBhY3Rpb24gPSBuZXcgVzExU2V0TmV3TWVzc2FnZUFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLQkgICAgYWN0aW9uID0gbmV3IFcxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JICAgIAotCSAgICBhY3Rpb24gPSBuZXcgVzExU2V0TmV3VHlwZUFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JICAgIAotCSAgICBhY3Rpb24gPSBuZXcgVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXROZXdFbGVtZW50QWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCSAgICAKLSAgICAgIEFTRERpcmVjdEVkaXRBY3Rpb24gZGlyZWN0RWRpdEFjdGlvbiA9IG5ldyBBU0REaXJlY3RFZGl0QWN0aW9uKHRoaXMpOwotICAgICAgZGlyZWN0RWRpdEFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oZGlyZWN0RWRpdEFjdGlvbik7Ci0gICAgfQotICAgIGFjdGlvbiA9IG5ldyBXMTFPcGVuSW1wb3J0QWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICBhY3Rpb24gPSBuZXcgT3BlbkluTmV3RWRpdG9yKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0VESVRPUl9NT0RFX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRlZmF1bHRFZGl0b3JNb2RlSWQiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcm90ZWN0ZWQgRWRpdG9yTW9kZU1hbmFnZXIgY3JlYXRlRWRpdG9yTW9kZU1hbmFnZXIoKQotICB7Ci0gICAgZmluYWwgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyID0gKFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpZ2V0QWRhcHRlcihQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICBFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gbmV3IEVkaXRvck1vZGVNYW5hZ2VyKFdTRExfRURJVE9SX01PREVfRVhURU5TSU9OX0lEKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIGluaXQoKQotICAgICAgewotICAgICAgICBpZiAocHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9PSBudWxsIHx8IAotICAgICAgICAgICAgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5pc0VkaXRvck1vZGVBcHBsaWNhYmxlKERlZmF1bHRFZGl0b3JNb2RlLklEKSkKLSAgICAgICAgeyAgICAgICAgICAKLSAgICAgICAgICBhZGRNb2RlKG5ldyBEZWZhdWx0RWRpdG9yTW9kZSgpKTsKLSAgICAgICAgfSAgCi0gICAgICAgIHN1cGVyLmluaXQoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcHJvdGVjdGVkIEVkaXRvck1vZGUgZ2V0RGVmYXVsdE1vZGUoKQotICAgICAgewotICAgICAgICBTdHJpbmcgZGVmYXVsdE1vZGVJZCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoREVGQVVMVF9FRElUT1JfTU9ERV9JRCk7Ci0gICAgICAgIGlmIChkZWZhdWx0TW9kZUlkICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBFZGl0b3JNb2RlIGVkaXRvck1vZGUgPSBnZXRFZGl0b3JNb2RlKGRlZmF1bHRNb2RlSWQpOwotICAgICAgICAgIGlmIChlZGl0b3JNb2RlICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVkaXRvck1vZGU7Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIHN1cGVyLmdldERlZmF1bHRNb2RlKCk7Ci0gICAgICB9ICAgICAgCi0gICAgfTsKLSAgICBtYW5hZ2VyLnNldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIocHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcik7Ci0gICAgcmV0dXJuIG1hbmFnZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGVkaXRvck1vZGVDaGFuZ2VkKEVkaXRvck1vZGUgbmV3RWRpdG9yTW9kZSkKLSAgewotICAgIEVkaXRQYXJ0RmFjdG9yeSBlZGl0UGFydEZhY3RvcnkgPSBuZXdFZGl0b3JNb2RlLmdldEVkaXRQYXJ0RmFjdG9yeSgpOwotICAgIGlmIChlZGl0UGFydEZhY3RvcnkgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGdyYXBoaWNhbFZpZXdlci5zZXRFZGl0UGFydEZhY3RvcnkoZWRpdFBhcnRGYWN0b3J5KTsKLSAgICAgIGlmIChncmFwaGljYWxWaWV3ZXIgaW5zdGFuY2VvZiBEZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyKQotICAgICAgeyAgCi0gICAgICAgIERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIgdmlld2VyID0gKERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIpZ3JhcGhpY2FsVmlld2VyOwotICAgICAgICBEZWZpbml0aW9uc0VkaXRQYXJ0IGVkaXRQYXJ0ID0gKERlZmluaXRpb25zRWRpdFBhcnQpdmlld2VyLmdldFJvb3RFZGl0UGFydCgpLmdldENvbnRlbnRzKCk7Ci0gICAgICAgIGVkaXRQYXJ0LnNldE1vZGVsQ2hpbGRyZW4oQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7Ci0gICAgICAgIGVkaXRQYXJ0LnJlZnJlc2goKTsKLSAgICAgICAgZWRpdFBhcnQuc2V0TW9kZWxDaGlsZHJlbihudWxsKTsKLSAgICAgICAgZWRpdFBhcnQucmVmcmVzaCgpOyAgICAgICAgCi0gICAgICB9Ci0gICAgfSAgCi0gICAgSUNvbnRlbnRQcm92aWRlciBwcm92aWRlciA9IG5ld0VkaXRvck1vZGUuZ2V0T3V0bGluZVByb3ZpZGVyKCk7Ci0gICAgaWYgKHByb3ZpZGVyICE9IG51bGwpCi0gICAgewotICAgICAgQVNEQ29udGVudE91dGxpbmVQYWdlIG91dGxpbmUgPSAoQVNEQ29udGVudE91dGxpbmVQYWdlKWdldENvbnRlbnRPdXRsaW5lUGFnZSgpOwotICAgICAgaWYgKG91dGxpbmUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVHJlZVZpZXdlciB0cmVlVmlld2VyID0gb3V0bGluZS5nZXRUcmVlVmlld2VyKCk7Ci0gICAgICAgIGlmICh0cmVlVmlld2VyICE9IG51bGwpCi0gICAgICAgIHsgICAgICAKLSAgICAgICAgICBvdXRsaW5lLmdldFRyZWVWaWV3ZXIoKS5zZXRDb250ZW50UHJvdmlkZXIocHJvdmlkZXIpOwotICAgICAgICAgIG91dGxpbmUuZ2V0VHJlZVZpZXdlcigpLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgfSAgCi0KLSAgICB9ICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgc3RvcmVDdXJyZW50TW9kZVByZWZlcmVuY2UoU3RyaW5nIGlkKQotICB7Ci0gICAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKERFRkFVTFRfRURJVE9SX01PREVfSUQsIGlkKTsgICAgCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODc0NGI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JLyoqCi0JICogQGRlcHJlY2F0ZWQ6IFVzZSBNZXNzYWdlcy5fU1RSSU5HX0tFWSB0byBhY2Nlc3Mgc3RyaW5ncy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgewotCQl0cnkgewotCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAZGVwcmVjYXRlZDogVXNlIE1lc3NhZ2VzLl9TVFJJTkdfS0VZIHRvIGFjY2VzcyBzdHJpbmdzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBTdHJpbmcgYXJnMCkgewotCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0U3RyaW5nKGtleSksIG5ldyBPYmplY3QgW10geyBhcmcwIH0pOwotCX0KLQotCS8qKgotCSAqIEBkZXByZWNhdGVkOiBVc2UgTWVzc2FnZXMuX1NUUklOR19LRVkgdG8gYWNjZXNzIHN0cmluZ3MuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpIHsKLQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldFN0cmluZyhrZXkpLCBhcmdzKTsKLQl9Ci0JCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9FRElUT1JfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfREVQRU5ERU5DSUVTX0NIQU5HRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0RFUEVOREVOQ0lFU19DSEFOR0VEX1JFRlJFU0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VESVRfTkFNRVNQQUNFU19ESUFMT0dfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BSRUZfUEFHRV9DUkVBVElOR19GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkVNRU1CRVJfTVlfREVDSVNJT05fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1JFR0VOX0JJTkRJTkdTX09OX1NBVkVfUVVFU1RJT05NQVJLOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9XQVJOSU5HX0RVUExJQ0FURV9OQU1FX0VYSVNUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkFNRVNQQUNFX1VSSVNfVE9fQkVfSU5DTFVERUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BSRUZfUEFHRV9BVVRPX1JFR0VORVJBVEVfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX1BST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VESVRfTkFNRVNQQUNFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9QQVJUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1hNTF9TQ0hFTUFfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1JFT1JERVJfUEFSVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1JFT1JERVJfTUVTU0FHRV9SRUZFUkVOQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9PUEVOX0lOX05FV19FRElUT1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FWElTVElOR19NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRVhJU1RJTkdfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRVJST1JfTkFNRVNQQUNFX0lOVkFMSUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VSUk9SX0ZJTEVfQUxSRUFEWV9FWElTVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1JFR0VOX0JJTkRJTkRTX09OX1NBVkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1JBRElPX0RPQ1VNRU5UX0xJVEVSQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NQRUNJRllfUE9SVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0w7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0lOTElORV9TQ0hFTUFfT0Y7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1BSRUZJWF9XSVRIX0NPTE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9DUkVBVEVfV1NETF9TS0VMRVRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQ1JFQVRFX05FV19XU0RMX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1NPQVBfQklORElOR19PUFRJT05TOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9IVFRQX0JJTkRJTkdfT1BUSU9OUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQUREX0VYVEVOU0lPTl9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TUEVDSUZZX0JJTkRJTkdfREVUQUlMU19MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFNfVE9fQkVfQ1JFQVRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkVXX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05FV19QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUkVGRVJFTkNFX0tJTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05FV19NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9SQURJT19SUENfRU5DT0RFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkFESU9fUlBDX0xJVEVSQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FWElTVElOR19UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TUEVDSUZZX1BPUlRfREVUQUlMUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkdfREVUQUlMUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRVJST1JfRklMRV9NVVNUX0VORF9XSVRIX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NQRUNJRllfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfTkVXX1dTRExfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fUkVOQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfVFlQRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0NBTkNFTF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX05FV19UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fU0VUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9JTVBPUlRTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfU0VSVklDRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9CSU5ESU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRk9MREVSX0lOVEVSRkFDRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9QT1JUVFlQRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9NRVNTQUdFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX05FV19NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fTkVXX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9TRVRfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1NFVF9NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fU0VUX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0NIRUNLQk9YX09WRVJXUklURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1NFVF9QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0VESVRfUE9SVF9BRERSRVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fT1BFTl9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1VOU1BFQ0lGSUVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CVVRUT05fTkVXOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CVVRUT05fQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CSU5ESU5HX1dJWkFSRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUkVNT1ZFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9TRUxFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NFTEVDVF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9ERVNDUklQVElPTl9TRUxFQ1RfV1NETF9PUl9YU0Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX09QVElPTlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1lFU19MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUE9SVF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9QT1JUX1dJWkFSRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTk9fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FERDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfSEVMUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkFNRV9GSUxURVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fTkFNRV9NVVNUX0NPTlRBSU5fQVRfTEVBU1RfT05FX0NIQVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fTkFNRV9IQVNfU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fTkFNRV9JTlZBTElEX0ZJUlNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XQVJOX05BTUVfSU5WQUxJRF9DSEFSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9ERUZBVUxUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XU0lfQ09NUExJQU5DRV9MSU5LX1RFWFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fV1NJX0NPTVBMSUFOQ0VfUFJPVE9DT0w7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX1dTSV9DT01QTElBTkNFX1BST1RPQ09MOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XQVJOX1dTSV9DT01QTElBTkNFX1JQQ19FTkNPRElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfRVJST1JfV1NJX0NPTVBMSUFOQ0VfUlBDX0VOQ09ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9VTkRFRklORURfQVJHMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfT1JfVU5ERUZJTkVEX0FSRzI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05PX09CSkVDVF9TUEVDSUZJRURfQVJHMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTk9fUEFSQU1FVEVSU19TUEVDSUZJRUQ7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1JlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1JlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMmM0MzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9SZWxvYWREZXBlbmRlbmNpZXNBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBSZWxvYWREZXBlbmRlbmNpZXNBY3Rpb25EZWxlZ2F0ZSBleHRlbmRzIEFjdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSUVkaXRvckFjdGlvbkRlbGVnYXRlCi17Ci0JcHJpdmF0ZSBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvcjsKLQotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJQWN0aW9uIGFjdGlvbiwgSUVkaXRvclBhcnQgdGFyZ2V0RWRpdG9yKQotCXsKLQkJd3NkbEVkaXRvciA9ICh0YXJnZXRFZGl0b3IgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpID8gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcil0YXJnZXRFZGl0b3IgOiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLQl7Ci0JCWlmICh3c2RsRWRpdG9yICE9IG51bGwpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCXdzZGxFZGl0b3IucmVsb2FkRGVwZW5kZW5jaWVzKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmZTI3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1NvdXJjZUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkRWRpdG9yQWN0aW9uQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklFeHRlbmRlZENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotCi1wdWJsaWMgY2xhc3MgU291cmNlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IgZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBpbXBsZW1lbnRzIElFeHRlbmRlZENvbnRyaWJ1dG9yIHsKLQotCXByb3RlY3RlZCBJRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IgZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgPSBudWxsOwotCXByb3RlY3RlZCBJRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3Igc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgPSBudWxsOwotCXByb3RlY3RlZCBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IgbXVsdGlQYWdlRWRpdG9yID0gbnVsbDsKLQotCS8vIEVkaXRvckV4dGVuc2lvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFRElUT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgSUV4dGVuZGVkQ29udHJpYnV0b3IgZXh0ZW5kZWRDb250cmlidXRvcjsKLQotCXB1YmxpYyBTb3VyY2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvcigpIHsKLQkJc3VwZXIoKTsKLQotCQlzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciA9IG5ldyBTb3VyY2VQYWdlQWN0aW9uQ29udHJpYnV0b3IoKTsKLQotCQkvLyBSZWFkIGFjdGlvbiBleHRlbnNpb25zLgotCQlFeHRlbmRlZEVkaXRvckFjdGlvbkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBFeHRlbmRlZEVkaXRvckFjdGlvbkJ1aWxkZXIoKTsKLQkJZXh0ZW5kZWRDb250cmlidXRvciA9IGJ1aWxkZXIucmVhZEFjdGlvbkV4dGVuc2lvbnMoRURJVE9SX0lEKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKLQkJc3VwZXIuaW5pdChhY3Rpb25CYXJzKTsKLQotCQlpZiAoYWN0aW9uQmFycyAhPSBudWxsKSB7Ci0JCQlpbml0RGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IoYWN0aW9uQmFycyk7Ci0JCQlpbml0U291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IoYWN0aW9uQmFycyk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0RGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQlpZiAoZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmluaXQoYWN0aW9uQmFycywgZ2V0UGFnZSgpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0U291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQlpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLmluaXQoYWN0aW9uQmFycywgZ2V0UGFnZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdXBlci5kaXNwb3NlKCk7Ci0KLQkJaWYgKGRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5kaXNwb3NlKCk7Ci0KLQkJaWYgKHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvci5kaXNwb3NlKCk7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3IuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciNjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51KSB7Ci0JCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudSk7Ci0KLQkJYWRkVG9NZW51KG1lbnUpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLmNvbnRyaWJ1dGVUb01lbnUobWVudSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkVG9NZW51KElNZW51TWFuYWdlciBtZW51KSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJRXh0ZW5kZWRDb250cmlidXRvciNjb250cmlidXRlVG9Qb3B1cE1lbnUoSU1lbnVNYW5hZ2VyKQotCSAqLwotCXB1YmxpYyBmaW5hbCB2b2lkIGNvbnRyaWJ1dGVUb1BvcHVwTWVudShJTWVudU1hbmFnZXIgbWVudSkgewotCi0JCWFkZFRvUG9wdXBNZW51KG1lbnUpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLmNvbnRyaWJ1dGVUb1BvcHVwTWVudShtZW51KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRUb1BvcHVwTWVudShJTWVudU1hbmFnZXIgbWVudSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciNjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgewotCQlzdXBlci5jb250cmlidXRlVG9Ub29sQmFyKHRvb2xCYXJNYW5hZ2VyKTsKLQotCQlhZGRUb1Rvb2xCYXIodG9vbEJhck1hbmFnZXIpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLmNvbnRyaWJ1dGVUb1Rvb2xCYXIodG9vbEJhck1hbmFnZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZFRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IjY29udHJpYnV0ZVRvU3RhdHVzTGluZShJU3RhdHVzTGluZU1hbmFnZXIpCi0JICovCi0JcHVibGljIGZpbmFsIHZvaWQgY29udHJpYnV0ZVRvU3RhdHVzTGluZShJU3RhdHVzTGluZU1hbmFnZXIgbWFuYWdlcikgewotCQlzdXBlci5jb250cmlidXRlVG9TdGF0dXNMaW5lKG1hbmFnZXIpOwotCi0JCWFkZFRvU3RhdHVzTGluZShtYW5hZ2VyKTsKLQotCQlpZiAoZXh0ZW5kZWRDb250cmlidXRvciAhPSBudWxsKQotCQkJZXh0ZW5kZWRDb250cmlidXRvci5jb250cmlidXRlVG9TdGF0dXNMaW5lKG1hbmFnZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZFRvU3RhdHVzTGluZShJU3RhdHVzTGluZU1hbmFnZXIgbWFuYWdlcikgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSUV4dGVuZGVkQ29udHJpYnV0b3IjdXBkYXRlVG9vbGJhckFjdGlvbnMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHVwZGF0ZVRvb2xiYXJBY3Rpb25zKCkgewotCQlpZiAoZXh0ZW5kZWRDb250cmlidXRvciAhPSBudWxsKQotCQkJZXh0ZW5kZWRDb250cmlidXRvci51cGRhdGVUb29sYmFyQWN0aW9ucygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLQkJLy8gc2F2ZSBtdWx0aVBhZ2VFZGl0b3IgYmVmb3JlIGNhbGxpbmcgc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHRhcmdldEVkaXRvcikKLQkJLy8gc3VwZXIuc2V0QWN0aXZlRWRpdG9yIHdpbGwgY2FsbCBzZXRBY3RpdmVQYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcikKLQkJLy8gbXVsdGlQYWdlRWRpdG9yIGlzIG5lZWRlZCBpbiBzZXRBY3RpdmVQYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcikKLQkJaWYgKHRhcmdldEVkaXRvciBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikKLQkJCW11bHRpUGFnZUVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHRhcmdldEVkaXRvcjsKLQotCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IodGFyZ2V0RWRpdG9yKTsKLQotCQl1cGRhdGVUb29sYmFyQWN0aW9ucygpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcih0YXJnZXRFZGl0b3IpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZVBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yKSB7Ci0JCS8vIFRoaXMgY29udHJpYnV0b3IgaXMgZGVzaWduZWQgZm9yIFN0cnVjdHVyZWRUZXh0TXVsdGlQYWdlRWRpdG9yUGFydC4KLQkJLy8gVG8gc2FmZS1ndWFyZCB0aGlzIGZyb20gcHJvYmxlbXMgY2F1c2VkIGJ5IHVuZXhwZWN0ZWQgdXNhZ2UgYnkgb3RoZXIgZWRpdG9ycywgdGhlIGZvbGxvd2luZwotCQkvLyBjaGVjayBpcyBhZGRlZC4KLQkJaWYgKG11bHRpUGFnZUVkaXRvciAhPSBudWxsKSB7Ci0JCQlpZiAoYWN0aXZlRWRpdG9yICE9IG51bGwgJiYgYWN0aXZlRWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpCi0JCQkJYWN0aXZhdGVTb3VyY2VQYWdlKGFjdGl2ZUVkaXRvcik7Ci0JCQllbHNlCi0JCQkJYWN0aXZhdGVEZXNpZ25QYWdlKGFjdGl2ZUVkaXRvcik7Ci0JCX0KLQotCQl1cGRhdGVUb29sYmFyQWN0aW9ucygpOwotCi0JCUlBY3Rpb25CYXJzIGFjdGlvbkJhcnMgPSBnZXRBY3Rpb25CYXJzKCk7Ci0JCWlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLQkJCS8vIHVwZGF0ZSBtZW51IGJhciBhbmQgdG9vbCBiYXIKLQkJCWFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVEZXNpZ25QYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcikgewotCQlpZiAoZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciBpbnN0YW5jZW9mIElEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgewotCQkJZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKG11bHRpUGFnZUVkaXRvcik7Ci0JCX0KLQotCQlpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciBpbnN0YW5jZW9mIElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgewotCQkJLy8gaWYgZGVzaWduIHBhZ2UgaXMgbm90IHJlYWxseSBhbiBJRWRpdG9yUGFydCwgYWN0aXZlRWRpdG9yID09IG51bGwsIHNvIHBhc3MgaW4gbXVsdGlQYWdlRWRpdG9yIGluc3RlYWQgKGQyODI0MTQpCi0JCQlpZiAoYWN0aXZlRWRpdG9yID09IG51bGwpIHsKLQkJCQlzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvci5zZXRBY3RpdmVFZGl0b3IobXVsdGlQYWdlRWRpdG9yKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihhY3RpdmVFZGl0b3IpOwotCQkJfQotCQkJKChJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yKS5zZXRWaWV3ZXJTcGVjaWZpY0NvbnRyaWJ1dGlvbnNFbmFibGVkKGZhbHNlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFjdGl2YXRlU291cmNlUGFnZShJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3IpIHsKLQkJaWYgKGRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yICE9IG51bGwgJiYgZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgaW5zdGFuY2VvZiBJRGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHsKLQkJCWRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihtdWx0aVBhZ2VFZGl0b3IpOwotCQl9Ci0KLQkJaWYgKHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yICE9IG51bGwgJiYgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgaW5zdGFuY2VvZiBJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHsKLQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihhY3RpdmVFZGl0b3IpOwotCQkJKChJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yKS5zZXRWaWV3ZXJTcGVjaWZpY0NvbnRyaWJ1dGlvbnNFbmFibGVkKHRydWUpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1NvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9Tb3VyY2VQYWdlQWN0aW9uQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBmYzcwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1NvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFjdGlvbkNvbnRyaWJ1dG9yWE1MOwotCi0KLS8qKgotICogU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgZm9yIG11bHRpIHBhZ2UgZWRpdG9yJ3Mgc291cmNlIHBhZ2UgY29udHJpYnV0b3IuCi0gKgotICogVXNlIFdTRExFZGl0b3JBY3Rpb25Db250cmlidXRvciBmb3Igc2luZ2xlIHBhZ2UgZWRpdG9yCi0gKiAqLwotcHVibGljIGNsYXNzIFNvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvciBleHRlbmRzIEFjdGlvbkNvbnRyaWJ1dG9yWE1MIHsKLQotCXByaXZhdGUgSUFjdGlvbkJhcnMgZkJhcnM7Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBjYWxsczoKLQkgKiA8dWw+Ci0JICogIDxsaT48Y29kZT5jb250cmlidXRlVG9NZW51PC9jb2RlPiB3aXRoIDxjb2RlPmJhcnM8L2NvZGU+JyBtZW51IG1hbmFnZXI8L2xpPgotCSAqICA8bGk+PGNvZGU+Y29udHJpYnV0ZVRvVG9vbEJhcjwvY29kZT4gd2l0aCA8Y29kZT5iYXJzPC9jb2RlPicgdG9vbCBiYXIKLQkgKiAgICBtYW5hZ2VyPC9saT4KLQkgKiAgPGxpPjxjb2RlPmNvbnRyaWJ1dGVUb1N0YXR1c0xpbmU8L2NvZGU+IHdpdGggPGNvZGU+YmFyczwvY29kZT4nIHN0YXR1cyBsaW5lCi0JICogICAgbWFuYWdlcjwvbGk+Ci0JICogPC91bD4KLQkgKiBUaGUgZ2l2ZW4gYWN0aW9uIGJhcnMgYXJlIGFsc28gcmVtZW1iZXJlZCBhbmQgbWFkZSBhY2Nlc3NpYmxlIHZpYSAKLQkgKiA8Y29kZT5nZXRBY3Rpb25CYXJzPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gYmFycyB0aGUgYWN0aW9uIGJhcnMKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElBY3Rpb25CYXJzIGJhcnMpIHsKLQkJZkJhcnMgPSBiYXJzOwotCQljb250cmlidXRlVG9NZW51KGJhcnMuZ2V0TWVudU1hbmFnZXIoKSk7Ci0JCWNvbnRyaWJ1dGVUb1Rvb2xCYXIoYmFycy5nZXRUb29sQmFyTWFuYWdlcigpKTsKLQkJY29udHJpYnV0ZVRvU3RhdHVzTGluZShiYXJzLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhpcyBjb250cmlidXRvcidzIGFjdGlvbiBiYXJzLgotCSAqCi0JICogQHJldHVybiB0aGUgYWN0aW9uIGJhcnMKLQkgKi8KLQlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKLQkJcmV0dXJuIGZCYXJzOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1N0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbldTREwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uV1NETC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZiMTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uV1NETC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci0KLXB1YmxpYyBjbGFzcyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25XU0RMIGV4dGVuZHMgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MIHsKLQlwcm90ZWN0ZWQgTWFwIGdldEh5cGVybGlua0RldGVjdG9yVGFyZ2V0cyhJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcikgewotCQlNYXAgdGFyZ2V0cyA9IHN1cGVyLmdldEh5cGVybGlua0RldGVjdG9yVGFyZ2V0cyhzb3VyY2VWaWV3ZXIpOwotCQl0YXJnZXRzLnB1dCgib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIsIG51bGwpOyAgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gdGFyZ2V0czsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1OWNlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5ab29tTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5BY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5ab29tQ29tYm9Db250cmlidXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlpvb21JblJldGFyZ2V0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlpvb21PdXRSZXRhcmdldEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5Hcm91cE1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkFjdGlvbkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5SZXRhcmdldEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3JBY3Rpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5JU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5JV1NETFRvb2xiYXJBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmFjdGlvbnMuQ2FwdHVyZVNjcmVlbkFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExBY3Rpb25CYXJDb250cmlidXRvciBleHRlbmRzIE11bHRpUGFnZUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKLSAgcHJpdmF0ZSBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvcjsKLSAgcHJvdGVjdGVkIElUZXh0RWRpdG9yIHRleHRFZGl0b3I7Ci0gIHByb3RlY3RlZCBJRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3Igc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBmUGFydExpc3RlbmVycz0gbmV3IEFycmF5TGlzdCgpOwotICBab29tSW5SZXRhcmdldEFjdGlvbiB6b29tSW5SZXRhcmdldEFjdGlvbjsKLSAgWm9vbU91dFJldGFyZ2V0QWN0aW9uIHpvb21PdXRSZXRhcmdldEFjdGlvbjsKLSAgWm9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbSB6b29tQ29tYm9Db250cmlidXRpb25JdGVtOwotICBBY3Rpb24gY2FwdHVyZVNjcmVlbkFjdGlvbjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTRExBY3Rpb25CYXJDb250cmlidXRvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMQWN0aW9uQmFyQ29udHJpYnV0b3IoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciA9IG5ldyBTb3VyY2VQYWdlQWN0aW9uQ29udHJpYnV0b3IoKTsKLSAgICB6b29tSW5SZXRhcmdldEFjdGlvbiA9IG5ldyBab29tSW5SZXRhcmdldEFjdGlvbigpOwotICAgIHpvb21JblJldGFyZ2V0QWN0aW9uLnNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oImljb25zL2V0b29sMTYvem9vbXBsdXMuZ2lmIikpOwotICAgIHpvb21PdXRSZXRhcmdldEFjdGlvbiA9IG5ldyBab29tT3V0UmV0YXJnZXRBY3Rpb24oKTsKLSAgICB6b29tT3V0UmV0YXJnZXRBY3Rpb24uc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigiaWNvbnMvZXRvb2wxNi96b29tbWludXMuZ2lmIikpOwotICAgIGNhcHR1cmVTY3JlZW5BY3Rpb24gPSBuZXcgQ2FwdHVyZVNjcmVlbkFjdGlvbigpOwotICAgIGZQYXJ0TGlzdGVuZXJzLmFkZCh6b29tSW5SZXRhcmdldEFjdGlvbik7Ci0gICAgZlBhcnRMaXN0ZW5lcnMuYWRkKHpvb21PdXRSZXRhcmdldEFjdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBY3RpdmVQYWdlKElFZGl0b3JQYXJ0IHBhcnQpCi0gIHsKLSAgICBpZiAoYWN0aXZlRWRpdG9yUGFydCA9PSBwYXJ0KQotICAgICAgcmV0dXJuOwotCi0gICAgYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7Ci0KLSAgICBJQWN0aW9uQmFycyBhY3Rpb25CYXJzID0gZ2V0QWN0aW9uQmFycygpOwotICAgIGJvb2xlYW4gaXNTb3VyY2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoYWN0aXZlRWRpdG9yUGFydCAhPSBudWxsICYmIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLSAgICB7Ci0gICAgCWlzU291cmNlID0gdHJ1ZTsKLSAgICAgICAgem9vbUluUmV0YXJnZXRBY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIHpvb21PdXRSZXRhcmdldEFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgYWN0aXZhdGVTb3VyY2VQYWdlKGFjdGl2ZUVkaXRvclBhcnQsIHRydWUpOwotICAgICAgICBjYXB0dXJlU2NyZWVuQWN0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYWN0aXZhdGVTb3VyY2VQYWdlKHdzZGxFZGl0b3IsIGZhbHNlKTsKLSAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKQotICAgICAgewotICAgICAgICB3c2RsRWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgcGFydDsKLSAgICAgIH0KLSAgICAgIGlmICh3c2RsRWRpdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIGNzOiBoZXJlJ3Mgd2UgZW5zdXJlIHRoZSBVTkRPIGFuZCBSRURPIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIAotICAgICAgICAvLyB0aGUgZGVzaWduIHZpZXcgaXMgYWN0aXZlCi0gICAgICAgIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlID0gd3NkbEVkaXRvci5nZXRTaXRlKCk7Ci0gICAgICAgIGlmIChzaXRlIGluc3RhbmNlb2YgSUVkaXRvclNpdGUpIAotICAgICAgICB7Ci0gICAgICAgICAgSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IHdzZGxFZGl0b3IuZ2V0VGV4dEVkaXRvcigpOwotICAgICAgICAgIElBY3Rpb25CYXJzIHNpdGVBY3Rpb25CYXJzID0gKChJRWRpdG9yU2l0ZSkgc2l0ZSkuZ2V0QWN0aW9uQmFycygpOwotICAgICAgICAgIHNpdGVBY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoSVRleHRFZGl0b3JBY3Rpb25Db25zdGFudHMuVU5ETywgZ2V0QWN0aW9uKHRleHRFZGl0b3IsIElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLlVORE8pKTsKLSAgICAgICAgICBzaXRlQWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLlJFRE8sIGdldEFjdGlvbih0ZXh0RWRpdG9yLCBJVGV4dEVkaXRvckFjdGlvbkNvbnN0YW50cy5SRURPKSk7Ci0gICAgICAgICAgc2l0ZUFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOyAgICAgICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotCi0gICAgICAgIE9iamVjdCBhZGFwdGVyID0gd3NkbEVkaXRvci5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBBY3Rpb25SZWdpc3RyeSkKLSAgICAgICAgewotICAgICAgICAgIEFjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gKEFjdGlvblJlZ2lzdHJ5KSBhZGFwdGVyOwotICAgICAgICAgIGFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkRFTEVURS5nZXRJZCgpLCByZWdpc3RyeS5nZXRBY3Rpb24oQVNERGVsZXRlQWN0aW9uLklEKSk7Ci0gICAgICAgICAgem9vbUluUmV0YXJnZXRBY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICB6b29tT3V0UmV0YXJnZXRBY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICBjYXB0dXJlU2NyZWVuQWN0aW9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWN0aW9uQmFycyAhPSBudWxsKSB7Ci0gICAgICAvLyB1cGRhdGUgbWVudSBiYXIgYW5kIHRvb2wgYmFyCi0gICAgICBhY3Rpb25CYXJzLnVwZGF0ZUFjdGlvbkJhcnMoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB6b29tQ29tYm9Db250cmlidXRpb25JdGVtLnNldFZpc2libGUoIWlzU291cmNlKTsKLSAgICAgIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0udXBkYXRlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGFjdGlvbiByZWdpc3RlZCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGVkaXRvci4KLSAgICogQHJldHVybiBJQWN0aW9uIG9yIG51bGwgaWYgZWRpdG9yIGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgSUFjdGlvbiBnZXRBY3Rpb24oSVRleHRFZGl0b3IgZWRpdG9yLCBTdHJpbmcgYWN0aW9uSUQpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gKGVkaXRvciA9PSBudWxsID8gbnVsbCA6IGVkaXRvci5nZXRBY3Rpb24oYWN0aW9uSUQpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgbWFuYWdlcikKLSAgewotICAgIG1hbmFnZXIuYWRkKG5ldyBHcm91cE1hcmtlcigiV1NETEVkaXRvciIpKTsgLy8kTk9OLU5MUy0xJAotICAgIExpc3QgbGlzdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0RMRWRpdG9yQ29uZmlndXJhdGlvbigpLmdldFRvb2xiYXJBY3Rpb25zKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIG1hbmFnZXIuYWRkKChJV1NETFRvb2xiYXJBY3Rpb24paS5uZXh0KCkpOwotICAgIH0KLQotLy8gICAgbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLSAgICBTdHJpbmdbXSB6b29tU3RyaW5ncyA9IG5ldyBTdHJpbmdbXSB7IFpvb21NYW5hZ2VyLkZJVF9BTEwsIFpvb21NYW5hZ2VyLkZJVF9IRUlHSFQsIFpvb21NYW5hZ2VyLkZJVF9XSURUSCB9OwotICAgIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0gPSBuZXcgWm9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbShnZXRQYWdlKCksIHpvb21TdHJpbmdzKTsKLSAgICBtYW5hZ2VyLmFkZCh6b29tQ29tYm9Db250cmlidXRpb25JdGVtKTsKLSAgICBtYW5hZ2VyLmFkZChjYXB0dXJlU2NyZWVuQWN0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KQotICB7Ci0gICAgSUVkaXRvclBhcnQgYWN0aXZlTmVzdGVkRWRpdG9yID0gbnVsbDsKLSAgICBpZiAocGFydCBpbnN0YW5jZW9mIE11bHRpUGFnZUVkaXRvclBhcnQpCi0gICAgewotICAgICAgYWN0aXZlTmVzdGVkRWRpdG9yID0gcGFydDsKLSAgICB9Ci0gICAgc2V0QWN0aXZlUGFnZShhY3RpdmVOZXN0ZWRFZGl0b3IpOwotICAgIAotICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKQotICAgIHsKLSAgICAgIHdzZGxFZGl0b3IgPSAoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSBwYXJ0OwotCi0gICAgICB0ZXh0RWRpdG9yID0gd3NkbEVkaXRvci5nZXRUZXh0RWRpdG9yKCk7Ci0gICAgICBpZiAodGV4dEVkaXRvciAhPSBudWxsKQotICAgICAgeyAgICAgIAotICAgICAgICBnZXRBY3Rpb25CYXJzKCkudXBkYXRlQWN0aW9uQmFycygpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBMaXN0IGxpc3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETEVkaXRvckNvbmZpZ3VyYXRpb24oKS5nZXRUb29sYmFyQWN0aW9ucygpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICAoKElXU0RMVG9vbGJhckFjdGlvbilpLm5leHQoKSkuc2V0RWRpdG9yUGFydChwYXJ0KTsKLSAgICB9Ci0gICAgc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZVNvdXJjZVBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yLCBib29sZWFuIHN0YXRlKQotICB7Ci0gICAgaWYgKHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yICE9IG51bGwgJiYgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgaW5zdGFuY2VvZiBJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpCi0gICAgewotICAgICAgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKGFjdGl2ZUVkaXRvcik7Ci0gICAgICAoKElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IpLnNldFZpZXdlclNwZWNpZmljQ29udHJpYnV0aW9uc0VuYWJsZWQoc3RhdGUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoSUFjdGlvbkJhcnMgYmFycywgSVdvcmtiZW5jaFBhZ2UgcGFnZSkKLSAgewotCSAgSXRlcmF0b3IgZSA9IGZQYXJ0TGlzdGVuZXJzLml0ZXJhdG9yKCk7Ci0JICB3aGlsZSAoZS5oYXNOZXh0KCkpCi0JICB7Ci0JCSAgcGFnZS5hZGRQYXJ0TGlzdGVuZXIoKFJldGFyZ2V0QWN0aW9uKSBlLm5leHQoKSk7Ci0JICB9Ci0KLQkgIGluaXRTb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvcihiYXJzKTsKLQkgIHN1cGVyLmluaXQoYmFycywgcGFnZSk7Ci0gIH0KLQotICAKLSAgcHJvdGVjdGVkIHZvaWQgaW5pdFNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKLSAgICBpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCkKLSAgICAgIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLmluaXQoYWN0aW9uQmFycywgZ2V0UGFnZSgpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLQkgIGZQYXJ0TGlzdGVuZXJzID0gbnVsbDsKLQkgIGlmIChzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciAhPSBudWxsKQotCQkgIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLmRpc3Bvc2UoKTsKLQkgIHN1cGVyLmRpc3Bvc2UoKTsKLSAgfQotCi1wdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtYW5hZ2VyKSB7Ci0Jc3VwZXIuY29udHJpYnV0ZVRvTWVudShtYW5hZ2VyKTsKLQkKLQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihNZXNzYWdlcy5fVUlfRURJVE9SX05BTUUsICJXU0RMRWRpdG9yIik7Ci0KLSAgICBtZW51LmFkZCh6b29tSW5SZXRhcmdldEFjdGlvbik7Ci0gICAgbWVudS5hZGQoem9vbU91dFJldGFyZ2V0QWN0aW9uKTsKLQltYW5hZ2VyLmFwcGVuZFRvR3JvdXAoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMsIG1lbnUpOwotCW1lbnUuYWRkKGNhcHR1cmVTY3JlZW5BY3Rpb24pOwotCi0gICAgbWVudS51cGRhdGVBbGwodHJ1ZSk7Ci0JCi19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMRWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2N2ZkODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMRWRpdG9yUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFkYXB0ZXJmYWN0b3J5LmV4dGVuc2lvbi5BZGFwdGVyRmFjdG9yeUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWRhcHRlcmZhY3RvcnkuZXh0ZW5zaW9uLkFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5OU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5XU0RMRWRpdG9yQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgV1NETEVkaXRvclBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gLy8sIElQbHVnaW5IZWxwZXIKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9QQUdFID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRlZmF1bHRwYWdlIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERVNJR05fUEFHRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kZXNpZ25wYWdlIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT1VSQ0VfUEFHRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb3VyY2VwYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9FRElUT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciI7ICAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhTRF9FRElUT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuSW50ZXJuYWxYU0RNdWx0aVBhZ2VFZGl0b3IiOyAgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfVFlQRV9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFRkFVTFRfVEFSR0VUX05BTUVTUEFDRSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIHN0YXRpYyBpbnQgREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUFJPTVBUID0gMDsKLSAgcHVibGljIHN0YXRpYyBpbnQgREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfSUdOT1JFID0gMTsKLSAgcHVibGljIHN0YXRpYyBpbnQgREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUkVMT0FEID0gMjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIFdTRExFZGl0b3JQbHVnaW4gaW5zdGFuY2U7Ci0gIHByaXZhdGUgRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSByZWdpc3RyeTsKLSAgcHJpdmF0ZSBXU0RMRWRpdG9yQ29uZmlndXJhdGlvbiB3c2RsRWRpdG9yQ29uZmlndXJhdGlvbiA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5OwotICBwcml2YXRlIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IGNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5OwotICBwcml2YXRlIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgYWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeTsKLSAgCi0gIHByaXZhdGUgaW50IGRlcGVuZGVuY2llc0NoYW5nZWRQb2xpY3kgPSBERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9SRUxPQUQ7Ci0KLSAgcHVibGljIFdTRExFZGl0b3JDb25maWd1cmF0aW9uIGdldFdTRExFZGl0b3JDb25maWd1cmF0aW9uKCkKLSAgewotICAgIGlmICh3c2RsRWRpdG9yQ29uZmlndXJhdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzZGxFZGl0b3JDb25maWd1cmF0aW9uID0gbmV3IFdTRExFZGl0b3JDb25maWd1cmF0aW9uKCk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsRWRpdG9yQ29uZmlndXJhdGlvbjsKLSAgfQotICAKLQlwdWJsaWMgRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSBnZXRFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCkgewotCQlpZiAocmVnaXN0cnkgPT0gbnVsbCkgewotCQkJcmVnaXN0cnkgPSBuZXcgRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSgib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaW9uQ2F0ZWdvcmllcyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICByZWdpc3RyeS5fX2ludGVybmFsU2V0RGVwcmVjYXRlZEV4dGVuc2lvbklkKCJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5FeHRlbnNpb25zU2NoZW1hc0Rlc2NyaXB0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHJlZ2lzdHJ5LnNldFByZWZTdG9yZShXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkgKTsKLQkJfQotCQkKLQkJcmV0dXJuIHJlZ2lzdHJ5OwotCX0KLQkKLSAgcHVibGljIHN0YXRpYyB2b2lkIGxvZ01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNvdXJjZXMgaGVscGVyLgotICAgKi8KLQotICBwdWJsaWMgV1NETEVkaXRvclBsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlID0gdGhpczsKLQotICAgIC8vIFRPRE8uLi4gcmVtb3ZlIHRoaXMgY29kZSB3aGVuIHdlIGFkZCAnZGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeScKLSAgICAvLyB0byBhbiBlZGl0b3IgcHJlZmVyZW5jZXMgcGFnZQotICAgIHRyeQotICAgIHsKLSAgICAJLy8gX0RFQlVHX1VQREFURV9QT0xJQ1kgPSAwRHVtbXkubGFiZWw9Ci0gICAgICBTdHJpbmcgc3RyaW5nID0gIjBEdW1teS5sYWJlbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGludCBwb2xpY3kgPSBJbnRlZ2VyLnBhcnNlSW50KHN0cmluZyk7Ci0gICAgICBpZiAocG9saWN5ID49IDAgJiYgcG9saWN5IDw9IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRCkKLSAgICAgIHsKLSAgICAgICAgZGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSA9IHBvbGljeTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlzdXBlci5zdGFydChjb250ZXh0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlzdXBlci5zdG9wKGNvbnRleHQpOwotICB9Ci0KLSAgcHVibGljIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBnZXRFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyUmVnaXN0cnkoKQotICB7Ci0gICAgaWYgKGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSA9PSBudWxsKQotICAgIHsKLSAgICAgIGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSA9IG5ldyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgIG5ldyBFbGVtZW50Q29udGVudEZpbHRlckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSkucmVhZFJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIHJldHVybiBleHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyUmVnaXN0cnk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSBnZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpIHsKLQkgIGlmIChjb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSA9PSBudWxsKSB7Ci0JCSAgY29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgPSBuZXcgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJICBuZXcgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoY29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkpLnJlYWRSZWdpc3RyeSgpOwotCSAgfQotCi0JICByZXR1cm4gY29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnk7Ci0gIH0KLQotICBwdWJsaWMgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSBnZXRBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5KCkgewotCSAgaWYgKGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgPT0gbnVsbCkgewotCQkgIGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgPSBuZXcgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkgIG5ldyBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkpLnJlYWRSZWdpc3RyeSgpOwotCSAgfQotCi0JICByZXR1cm4gYWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIEluc3RhbGwgVVJMCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsVVJMKCkKLSAgewotCXRyeQotCXsKLQkgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbmNlLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIikpOyAvLyROT04tTkxTLTEkCi0JfQotCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCXsKLQkgIHJldHVybiBudWxsOwotCX0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIHBsdWdpbiBwaHlzaWNhbCBkaXJlY3RvcnkgbG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0UGx1Z2luTG9jYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSVBhdGggaW5zdGFsbFBhdGggPSBuZXcgUGF0aChnZXRJbnN0YWxsVVJMKCkudG9FeHRlcm5hbEZvcm0oKSkucmVtb3ZlVHJhaWxpbmdTZXBhcmF0b3IoKTsKLSAgICAgIFN0cmluZyBpbnN0YWxsU3RyID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKG5ldyBVUkwoaW5zdGFsbFBhdGgudG9TdHJpbmcoKSkpLmdldEZpbGUoKTsKLSAgICAgIHJldHVybiBuZXcgUGF0aChpbnN0YWxsU3RyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIldTRExFZGl0b3JQbHVnaW4uZ2V0UGx1Z2luTG9jYXRpb24oKSBleGNlcHRpb24uLiIgKyBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGltYWdlRGVzY3JpcHRvckNhY2hlID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIHByb3RlY3RlZCBJbWFnZURlc2NyaXB0b3IgaW50ZXJuYWxHZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIGtleSkKLSAgewotICAgIEltYWdlRGVzY3JpcHRvciBpbWFnZURlc2NyaXB0b3IgPSAoSW1hZ2VEZXNjcmlwdG9yKSBpbWFnZURlc2NyaXB0b3JDYWNoZS5nZXQoa2V5KTsKLSAgICBpZiAoaW1hZ2VEZXNjcmlwdG9yID09IG51bGwpCi0gICAgewotICAgICAgaW1hZ2VEZXNjcmlwdG9yID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21GaWxlKFdTRExFZGl0b3JQbHVnaW4uY2xhc3MsIGtleSk7Ci0gICAgICBpZiAoaW1hZ2VEZXNjcmlwdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGltYWdlRGVzY3JpcHRvckNhY2hlLnB1dChrZXksIGltYWdlRGVzY3JpcHRvcik7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbWFnZURlc2NyaXB0b3I7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4KLSAgICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoLgotICAgKgotICAgKiBAcGFyYW0gcGF0aCB0aGUgcGF0aAotICAgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFN0cmluZyBwYXRoKSB7Ci0gICAgcmV0dXJuIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIHBhdGgpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIGtleSkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmludGVybmFsR2V0SW1hZ2VEZXNjcmlwdG9yKGtleSk7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoU3RyaW5nIGljb25OYW1lKQotICB7Ci0gICAgSW1hZ2VSZWdpc3RyeSBpbWFnZVJlZ2lzdHJ5ID0gZ2V0SW1hZ2VSZWdpc3RyeSgpOwotICAgIAotICAgIGlmIChpbWFnZVJlZ2lzdHJ5LmdldChpY29uTmFtZSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW1hZ2VSZWdpc3RyeS5nZXQoaWNvbk5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaW1hZ2VSZWdpc3RyeS5wdXQoaWNvbk5hbWUsIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShnZXRDbGFzcygpLCBpY29uTmFtZSkpOwotICAgICAgcmV0dXJuIGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qCi0gICAgcHVibGljIEltYWdlIGdldEltYWdlKFN0cmluZyBrZXksIGJvb2xlYW4gaXNHcmF5ZWQpCi0gICAgeyAKLSAgICAgIEltYWdlIGltYWdlID0gbnVsbDsKLSAgICAgIGlmICghaXNHcmF5ZWQpCi0gICAgICB7Ci0gICAgICAgIGltYWdlID0gc3VwZXIuZ2V0SW1hZ2Uoa2V5KTsKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbWFnZSA9IChJbWFnZSlncmF5ZWRJbWFnZU1hcC5nZXQoa2V5KTsKLSAgICAgICAgaWYgKGltYWdlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJbWFnZSBjb2xvckltYWdlID0gc3VwZXIuZ2V0SW1hZ2Uoa2V5KTsKLSAgICAgICAgICBpZiAoY29sb3JJbWFnZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlKERpc3BsYXkuZ2V0Q3VycmVudCgpLCBjb2xvckltYWdlLCBTV1QuSU1BR0VfR1JBWSk7Ly9TV1QuSU1BR0VfRElTQUJMRSk7Ci0gICAgICAgICAgICBncmF5ZWRJbWFnZU1hcC5wdXQoa2V5LCBpbWFnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaW1hZ2U7Ci0gICAgfQotICAqLwotCi0gIC8qKgotICAgKiBHZXQgdGhlIG1ldGFkYXRhIGRpcmVjdG9yeSBmb3IgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1ldGFEYXRhRGlyZWN0b3J5KCkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExFZGl0b3JQbHVnaW4gZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotCSAgbmV3IFdTRExFZGl0b3JQbHVnaW4oKTsKLQl9Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHVibGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkKLSAgewotICAgIHJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFNoZWxsIGdldFNoZWxsKCkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSkKLSAgewotICAgIHN0b3JlLnNldERlZmF1bHQoREVGQVVMVF9QQUdFLCBERVNJR05fUEFHRSk7Ci0gICAgCi0gICAgLy8gV1NETFByZWZlcmVuY2VQYWdlIHByZWZzCi0gICAgc3RvcmUuc2V0RGVmYXVsdChNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRSwgREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFKTsgLy8kTk9OLU5MUy0xJAotICAgIHN0b3JlLnNldERlZmF1bHQoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9BVVRPX1JFR0VORVJBVEVfQklORElORywgZmFsc2UpOyAvLyROT04tTkxTLTEkCi0gICAgc3RvcmUuc2V0RGVmYXVsdChNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX1BST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkUsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotICAgIC8vIERvIHdlIG5lZWQgdGhpcyBwcmVmZXJlbmNlIGJlbG93PyAgTG9vayBhdCBXU0RMUHJlZmVyZW5jZVBhZ2UuamF2YQotLy8gICAgc3RvcmUuc2V0RGVmYXVsdCgiRGVmdWFsdCBMb2NhdGlvbjoiLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOwotICB9Ci0gIAotICAvKioKLSAgICogc2V0RGVmYXVsdFBhZ2UKLSAgICogU2V0IHRoZSBkZWZhdWx0IHBhZ2UgdG8gb3BlbiB3aGVuIHRoZSBlZGl0b3Igc3RhcnRzLiBNYWludGFpbnMgdGhlIHN0YXRlCi0gICAqIHdoZW4gV1NBRCBpcyBzaHV0ZG93biBhbmQgcmVzdGFydGVkLgotICAgKiBAcGFyYW0gcGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGVmYXVsdFBhZ2UoU3RyaW5nIHBhZ2UpCi0gIHsKLSAgICBnZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZShERUZBVUxUX1BBR0UsIHBhZ2UpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKERFRkFVTFRfUEFHRSk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldERlcGVuZGVuY2llc0NoYW5nZWRQb2xpY3koKQotICB7Ci0gICAgLy9yZXR1cm4gZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0SW50KERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZKTsKLSAgICByZXR1cm4gZGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeTsKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9EVUNUX0NVU1RPTUlaQVRJT05fUFJPVklERVJfUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXJQbHVnaW5JZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0RVQ1RfQ1VTVE9NSVpBVElPTl9QUk9WSURFUl9DTEFTU19OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXJDbGFzc05hbWUiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIHN0YXRpYyBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlckluaXRpYWxpemVkID0gZmFsc2U7Ci0gIAotICBwdWJsaWMgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciBnZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCkKLSAgewotICAgIGlmICghcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlckluaXRpYWxpemVkKQotICAgIHsKLSAgICAgIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXJJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9IGdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhQUk9EVUNUX0NVU1RPTUlaQVRJT05fUFJPVklERVJfUExVR0lOX0lEKTsKLSAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoUFJPRFVDVF9DVVNUT01JWkFUSU9OX1BST1ZJREVSX0NMQVNTX05BTUUpOwotICAgICAgaWYgKHBsdWdpbk5hbWUgIT0gbnVsbCAmJiBwbHVnaW5OYW1lLmxlbmd0aCgpID4gMCAmJgotICAgIAkgIGNsYXNzTmFtZSAhPSBudWxsICYmIGNsYXNzTmFtZS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5OYW1lKTsKLSAgICAgICAgICBDbGFzcyBjbGF6eiA9IGJ1bmRsZS5sb2FkQ2xhc3MoY2xhc3NOYW1lKTsKLSAgICAgICAgICBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyID0gKFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpY2xhenoubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgCi0gICAgcmV0dXJuIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci0gIH0gICAKLX0KLQotY2xhc3MgQmFzZVJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogcmVhZCBmcm9tIHBsdWdpbiByZWdpc3RyeSBhbmQgcGFyc2UgaXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQpCi0gIHsKLQlJRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCUlFeHRlbnNpb25Qb2ludCBwb2ludCA9IGV4dGVuc2lvblJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFBMVUdJTl9JRCwgZXh0ZW5zaW9uUG9pbnRJZCk7Ci0KLSAgICBpZiAocG9pbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHBvaW50LmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgcmVhZEVsZW1lbnQoZWxlbWVudHNbaV0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gIH0KLX0KLQotLyoqCi0gKiAKLSAqLwotYWJzdHJhY3QgY2xhc3MgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyIGV4dGVuZHMgQmFzZVJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FX1NQQUNFID0gIm5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIFN0cmluZyBleHRlbnNpb25Qb2ludElkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZ05hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmdbXSBhdHRyaWJ1dGVOYW1lczsKLSAgcHJvdGVjdGVkIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnk7Ci0KLSAgcHJpdmF0ZSBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQsIFN0cmluZyB0YWdOYW1lLCBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5leHRlbnNpb25Qb2ludElkID0gZXh0ZW5zaW9uUG9pbnRJZDsKLSAgICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lOwotICAgIHRoaXMubnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5ID0gbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5OwotICB9Ci0KLSAgcHVibGljIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJZCwgU3RyaW5nIHRhZ05hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcyhleHRlbnNpb25Qb2ludElkLCB0YWdOYW1lLCBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgIGF0dHJpYnV0ZU5hbWVzID0gbmV3IFN0cmluZ1sxXTsKLSAgICBhdHRyaWJ1dGVOYW1lc1swXSA9IGF0dHJpYnV0ZU5hbWU7Ci0gIH0KLQotICBwdWJsaWMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKFN0cmluZyBleHRlbnNpb25Qb2ludElkLCBTdHJpbmcgdGFnTmFtZSwgU3RyaW5nW10gYXR0cmlidXRlTmFtZXMsIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzKGV4dGVuc2lvblBvaW50SWQsIHRhZ05hbWUsIG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgdGhpcy5hdHRyaWJ1dGVOYW1lcyA9IGF0dHJpYnV0ZU5hbWVzOwotICB9Ci0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBzdXBlci5yZWFkUmVnaXN0cnkoZXh0ZW5zaW9uUG9pbnRJZCk7Ci0gIH0KLQotICAvKioKLSAgICogcmVhZEVsZW1lbnQoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKHRhZ05hbWUpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRV9TUEFDRSk7Ci0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lcy5sZW5ndGggPT0gMSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lc1swXSk7Ci0gICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeS5wdXQobmFtZXNwYWNlLCBjbGFzc05hbWUsIGJ1bmRsZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZXNbaV07Ci0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwgJiYgY2xhc3NOYW1lLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWFwLnB1dChhdHRyaWJ1dGVOYW1lLCBjbGFzc05hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkucHV0KG5hbWVzcGFjZSwgbWFwLCBidW5kbGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLS8qKgotICogCi0gKi8KLWNsYXNzIEVsZW1lbnRDb250ZW50RmlsdGVyRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5UX0lEID0gImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfTkFNRSA9ICJleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgRWxlbWVudENvbnRlbnRGaWx0ZXJFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KQotICB7Ci0gICAgc3VwZXIoRVhURU5TSU9OX1BPSU5UX0lELCBUQUdfTkFNRSwgImNsYXNzIiwgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KTsgLy8kTk9OLU5MUy0xJAotICB9Ci19Ci0KLWNsYXNzIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyIGV4dGVuZHMgQmFzZVJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVEVOU0lPTl9QT0lOVF9JRCA9ICJjb250ZW50R2VuZXJhdG9yVUkiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfQ09OVEVOVF9HRU5FUkFUT1IgPSAiY29udGVudEdlbmVyYXRvclVJIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTkFNRSA9ICJuYW1lIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0xBQkVMID0gImxhYmVsIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfUE9SVF9PUFRJT05TX1BBR0VfQ0xBU1MgPSAicG9ydE9wdGlvbnNQYWdlQ2xhc3MiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9CSU5ESU5HX09QVElPTlNfUEFHRV9DTEFTUyA9ICJiaW5kaW5nT3B0aW9uc1BhZ2VDbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQotICBwcm90ZWN0ZWQgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnk7Ci0KLSAgcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIHBhcnNlIGl0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KCkKLSAgewotICAgIHN1cGVyLnJlYWRSZWdpc3RyeShFWFRFTlNJT05fUE9JTlRfSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWRFbGVtZW50KCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhFTEVNRU5UX0NPTlRFTlRfR0VORVJBVE9SKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLQotICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGJpbmRpbmdHZW5lcmF0b3JFeHRlbnNpb24gPSBuZXcgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uKG5hbWUsIG5hbWVzcGFjZSk7Ci0gICAgICAgIGJpbmRpbmdHZW5lcmF0b3JFeHRlbnNpb24uc2V0UG9ydE9wdGlvbnNQYWdlQ2xhc3NOYW1lKGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9QT1JUX09QVElPTlNfUEFHRV9DTEFTUykpOwotICAgICAgICBiaW5kaW5nR2VuZXJhdG9yRXh0ZW5zaW9uLnNldEJpbmRpbmdPcHRpb25zUGFnZUNsYXNzTmFtZShlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQklORElOR19PUFRJT05TX1BBR0VfQ0xBU1MpKTsKLSAgICAgICAgYmluZGluZ0dlbmVyYXRvckV4dGVuc2lvbi5zZXRMYWJlbChlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTEFCRUwpKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBDbGFzc0xvYWRlciBwbHVnaW5DbGFzc3NMb2FkZXIgPSBlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldERlY2xhcmluZ1BsdWdpbkRlc2NyaXB0b3IoKS5nZXRQbHVnaW4oKS5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7Ci0gICAgICAgICAgYmluZGluZ0dlbmVyYXRvckV4dGVuc2lvbi5zZXRDbGFzc0xvYWRlcihwbHVnaW5DbGFzc3NMb2FkZXIpOwotICAgICAgICAgIHJlZ2lzdHJ5LmFkZChiaW5kaW5nR2VuZXJhdG9yRXh0ZW5zaW9uKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1jbGFzcyBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyIGV4dGVuZHMgQmFzZVJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVEVOU0lPTl9QT0lOVF9JRCA9ICJhZGFwdGVyRmFjdG9yeSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9BREFQVEVSX0ZBQ1RPUlkgPSAiYWRhcHRlckZhY3RvcnkiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQURBUFRFUl9GQUNUT1JZX0NMQVNTID0gImFkYXB0ZXJGYWN0b3J5Q2xhc3MiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnk7Ci0KLSAgcHVibGljIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSkKLSAgewotICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBzdXBlci5yZWFkUmVnaXN0cnkoRVhURU5TSU9OX1BPSU5UX0lEKTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkRWxlbWVudCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoRUxFTUVOVF9BREFQVEVSX0ZBQ1RPUlkpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLQotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbiBhZGFwdGVyRmFjdG9yeUV4dGVuc2lvbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbihuYW1lc3BhY2UpOwotICAgICAgICBhZGFwdGVyRmFjdG9yeUV4dGVuc2lvbi5zZXRBZGFwdGVyRmFjdG9yeUNsYXNzTmFtZShlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQURBUFRFUl9GQUNUT1JZX0NMQVNTKSk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQ2xhc3NMb2FkZXIgcGx1Z2luQ2xhc3NzTG9hZGVyID0gZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXREZWNsYXJpbmdQbHVnaW5EZXNjcmlwdG9yKCkuZ2V0UGx1Z2luKCkuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOwotICAgICAgICAgIGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uLnNldENsYXNzTG9hZGVyKHBsdWdpbkNsYXNzc0xvYWRlcik7Ci0gICAgICAgICAgcmVnaXN0cnkuYWRkKGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmY2ZhNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci0KLQotcHVibGljIGNsYXNzIFdTRExFZGl0b3JSZXNvdXJjZUNoYW5nZUhhbmRsZXIKLXsKLSAgcHJvdGVjdGVkIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1VwZGF0ZVJlcXVpcmVkOwotICBwcm90ZWN0ZWQgSW50ZXJuYWxSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXI7Ci0gIHByb3RlY3RlZCBJbnRlcm5hbFBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXI7Ci0KLSAgcHVibGljIFdTRExFZGl0b3JSZXNvdXJjZUNoYW5nZUhhbmRsZXIoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIHdzZGxFZGl0b3IpCi0gIHsKLSAgICB0aGlzLndzZGxFZGl0b3IgPSB3c2RsRWRpdG9yOwotICAgIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPSBuZXcgSW50ZXJuYWxSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCk7Ci0gICAgcGFydExpc3RlbmVyID0gbmV3IEludGVybmFsUGFydExpc3RlbmVyKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhdHRhY2goKQotICB7Ci0gICAgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7Ci0gICAgd3NkbEVkaXRvci5nZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0UGFydFNlcnZpY2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0gICAgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7Ci0gICAgd3NkbEVkaXRvci5nZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0UGFydFNlcnZpY2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBNYXAgY29tcHV0ZURlcGVuZGVuY3lNYXAoKQotICB7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHdzZGxFZGl0b3IpLmdldE1vZGVsKCk7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pICgoVzExRGVzY3JpcHRpb24pIGRlc2NyaXB0aW9uKS5nZXRUYXJnZXQoKTsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGRlZmluaXRpb24uZVJlc291cmNlKCkuZ2V0UmVzb3VyY2VTZXQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2UpaS5uZXh0KCk7Ci0gICAgICBpZiAocmVzb3VyY2UgIT0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHVyaSA9IHJlc291cmNlLmdldFVSSSgpLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlmIChtYXAuZ2V0KHVyaSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG1hcC5wdXQodXJpLCB1cmkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtYXA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVsb2FkKCkKLSAgewotICAJYm9vbGVhbiBkb1JlbG9hZCA9IGZhbHNlOyAgCQotCWludCBwb2xpY3kgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSgpOwotCQotICAJaWYgKHBvbGljeSA9PSBXU0RMRWRpdG9yUGx1Z2luLkRFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1BST01QVCkKLSAgCXsKLQkJZG9SZWxvYWQgPSBNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbih3c2RsRWRpdG9yLmdldFNpdGUoKS5nZXRTaGVsbCgpLCBNZXNzYWdlcy5fVUlfREVQRU5ERU5DSUVTX0NIQU5HRUQsIE1lc3NhZ2VzLl9VSV9ERVBFTkRFTkNJRVNfQ0hBTkdFRF9SRUZSRVNIKTsgIAkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gIAl9Ci0gIAllbHNlIGlmIChwb2xpY3kgPT0gV1NETEVkaXRvclBsdWdpbi5ERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9SRUxPQUQpCi0gIAl7Ci0gIAkJZG9SZWxvYWQgPSB0cnVlOwotICAJfQotICAJCi0gICAgaWYgKGRvUmVsb2FkKQotICAgIHsgICAgCi0gICAgICB3c2RsRWRpdG9yLnJlbG9hZERlcGVuZGVuY2llcygpOwotICAgIH0gIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0xpc3RlbmluZ1RvUmVzb3VyY2VDaGFuZ2VzKCkKLSAgewotICAJaW50IHBvbGljeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREZXBlbmRlbmNpZXNDaGFuZ2VkUG9saWN5KCk7Ci0gIAlyZXR1cm4gcG9saWN5ID09IFdTRExFZGl0b3JQbHVnaW4uREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUFJPTVBUIHx8Ci0gIAkJICAgcG9saWN5ID09IFdTRExFZGl0b3JQbHVnaW4uREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUkVMT0FEOwotICB9Ci0KLQotICBjbGFzcyBJbnRlcm5hbFJlc291cmNlQ2hhbmdlTGlzdGVuZXIgaW1wbGVtZW50cyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlRGVsdGFWaXNpdG9yCi0gIHsKLSAgICBwcm90ZWN0ZWQgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHByb3RlY3RlZCBib29sZWFuIGlzUGVuZGluZyA9IGZhbHNlOwotICAgIHByb3RlY3RlZCBpbnQgY291bnQgPSAwOwotCi0gICAgcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KQotICAgIHsgICAgICAJCi0gICAgICBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldEN1cnJlbnQoKTsKLSAgICAgIAkgICAgIAkKLSAgICAgIGlmIChkaXNwbGF5ICE9IG51bGwgJiYgaXNMaXN0ZW5pbmdUb1Jlc291cmNlQ2hhbmdlcygpICYmICFpc1VwZGF0ZVJlcXVpcmVkKQotICAgICAgewotICAgICAgICBpZiAoZXZlbnQuZ2V0VHlwZSgpID09IElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKQotICAgICAgICB7Ci0gICAgICAgICAgSVJlc291cmNlRGVsdGFbXSBkZWx0YXMgPSBldmVudC5nZXREZWx0YSgpLmdldEFmZmVjdGVkQ2hpbGRyZW4oKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbHRhcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZGVsdGFzW2ldLmFjY2VwdCh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpc3Quc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNQZW5kaW5nKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlzUGVuZGluZyA9IHRydWU7Ci0gICAgICAgICAgICBkaXNwbGF5LnRpbWVyRXhlYygyMDAwLCBuZXcgVGltZXJFdmVudCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgICB7Ci0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBkZWx0YS5nZXRSZXNvdXJjZSgpOwotICAgICAgaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFsaXN0LmNvbnRhaW5zKHJlc291cmNlKSkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKHJlc291cmNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2xhc3MgVGltZXJFdmVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0gICAgewotICAgICAgcHVibGljIFRpbWVyRXZlbnQoKQotICAgICAgewotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiTmV3VGltZXJFdmVudCgiICsgd3NkbEVkaXRvci5nZXREZWZpbml0aW9uKCkuZVJlc291cmNlKCkuZ2V0VVJJKCkgKyAiKSAiICsgY291bnQpOyAgICAgIAkKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLS8vICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKWkubmV4dCgpOwotLy8gICAgICAgICAgU3RyaW5nIHBsYXRmb3JtUGF0aCA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkudG9TdHJpbmcoKTsKLS8vICAgICAgICB9Ci0KLSAgICAgICAgTWFwIGRlcGVuZGVuY3lNYXAgPSBjb21wdXRlRGVwZW5kZW5jeU1hcCgpOwotCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSlpLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgcGxhdGZvcm1QYXRoID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkocmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS50b1N0cmluZygpOwotICAgICAgICAgIGlmIChkZXBlbmRlbmN5TWFwLmdldChwbGF0Zm9ybVBhdGgpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaXNVcGRhdGVSZXF1aXJlZCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAod3NkbEVkaXRvci5nZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0UGFydFNlcnZpY2UoKS5nZXRBY3RpdmVQYXJ0KCkgPT0gd3NkbEVkaXRvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaXNVcGRhdGVSZXF1aXJlZCA9IGZhbHNlOwotICAgICAgICAgICAgICBwZXJmb3JtUmVsb2FkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaXNQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgIGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgSW50ZXJuYWxQYXJ0TGlzdGVuZXIgaW1wbGVtZW50cyBJUGFydExpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gICAgewotICAgICAgaWYgKHBhcnQgPT0gd3NkbEVkaXRvcikKLSAgICAgIHsgICAgIAotICAgICAgICBpZiAoaXNVcGRhdGVSZXF1aXJlZCkKLSAgICAgICAgewotICAgICAgICAgIGlzVXBkYXRlUmVxdWlyZWQgPSBmYWxzZTsKLSAgICAgICAgICBwZXJmb3JtUmVsb2FkKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgICB7Ci0gICAgfQotCi0gICAKLSAgICBwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwYXJ0KQotICAgIHsKLSAgICB9Ci0gIH0KLQotCi19Ci0KLS8qCi1jbGFzcyBEZXBlbmRlbmN5VmlzaXRvcgotewotCXB1YmxpYyB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB0aGVJbXBvcnQpCi0JewotCQlpZiAodGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLQkJewotCQkJdmlzaXREZWZpbml0aW9uKHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpKTsKLQkJfQotCQllbHNlIGlmICh0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpICE9IG51bGwpCi0JCXsKLQkJCXZpc2l0U2NoZW1hKHRoZUltcG9ydC5nZXRFU2NoZW1hKCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdmlzaXRYU0RTY2hlbWFEaXJlY3RpdmUoWFNEU2NoZW1hRGlyZWN0aXZlIGRpcmVjdGl2ZSkKLQl7Ci0JCVhTRFNjaGVtYSByZWZlcmVuY2VkU2NoZW1hID0gZGlyZWN0aXZlLmdldFJlc29sdmVkU2NoZW1hKCk7Ci0JCWlmIChyZWZlcmVuY2VkU2NoZW1hICE9IG51bGwpCi0JCXsKLQkJCXZpc2l0U2NoZW1hKHJlZmVyZW5jZWRTY2hlbWEpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikKLQl7Ci0JCWlmIChkZWZpbml0aW9uICE9IG51bGwpCi0JCXsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCQl7Ci0JCQkJdmlzaXRJbXBvcnQoKEltcG9ydClpLm5leHQoKSk7Ci0JCQl9Ci0JCQlUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0JCQlpZiAodHlwZXMgIT0gbnVsbCkKLQkJCXsKLQotCQkJCWZvciAoSXRlcmF0b3IgaSA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCQkJewotCQkJCQlPYmplY3QgbyA9IGkubmV4dCgpOwotCQkJCQlpZiAobyBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotCQkJCQl7Ci0JCQkJCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KW87Ci0JCQkJCQlpZiAoZS5nZXRFWFNEU2NoZW1hKCkgIT0gbnVsbCkKLQkJCQkJCXsKLQkJCQkJCQl2aXNpdFNjaGVtYShlLmdldEVYU0RTY2hlbWEoKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB2aXNpdFNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKQotCXsKLQkJZm9yIChJdGVyYXRvciBpID0gc2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQl7Ci0JCQlPYmplY3QgbyA9IGkubmV4dCgpOwotCQkJaWYgKG8gaW5zdGFuY2VvZiBYU0RTY2hlbWFEaXJlY3RpdmUpCi0JCQl7Ci0JCQkJdmlzaXRYU0RTY2hlbWFEaXJlY3RpdmUoKFhTRFNjaGVtYURpcmVjdGl2ZSlvKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotY2xhc3MgUmVsb2FkRGVwZW5kZW5jeVZpc2l0b3IgZXh0ZW5kcyBEZXBlbmRlbmN5VmlzaXRvcgotewotCXB1YmxpYyB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB0aGVJbXBvcnQpCi0JewotCQlDb21wb25lbnRIYW5kbGVyIGhhbmRsZXIgPSBXU0RMUmVjb25jaWxlci5nZXRSZWNvbmNpbGVyKHRoZUltcG9ydCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdCh0aGVJbXBvcnQpOwotCQlpZiAoZWxlbWVudCAhPSBudWxsICYmIGhhbmRsZXIgIT0gbnVsbCkKLQkJewotCQkJaGFuZGxlci5yZWNvbmNpbGUod3NkbEVkaXRvci5nZXREZWZpbml0aW9uKCksIHRoZUltcG9ydCwgZWxlbWVudCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB2aXNpdFhTRFNjaGVtYURpcmVjdGl2ZShYU0RTY2hlbWFEaXJlY3RpdmUgZGlyZWN0aXZlKQotCXsKLQotCX0KLX0qLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETFByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjcyMDY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETFByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkJvb2xlYW5GaWVsZEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5TdHJpbmdGaWVsZEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKLQotICBwdWJsaWMgV1NETFByZWZlcmVuY2VQYWdlKCkKLSAgewotICAgIHN1cGVyKEZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UuRkxBVCk7Ci0gICAgc2V0UHJlZmVyZW5jZVN0b3JlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKQotICB7Ci0gICAgQ29tcG9zaXRlIHBhcmVudCA9IGdldEZpZWxkRWRpdG9yUGFyZW50KCk7Ci0JR3JpZExheW91dCBwYXJlbnRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCXBhcmVudExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JcGFyZW50LnNldExheW91dChwYXJlbnRMYXlvdXQpOwotCQotLy8gICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGdldENvbnRyb2woKSwgc29tZSBjb250ZXh0IGlkIGhlcmUpOyAKLQotCUdyb3VwIGdyb3VwID0gbmV3IEdyb3VwKHBhcmVudCwgU1dULk5VTEwpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBncm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBncm91cC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfQ1JFQVRJTkdfRklMRVMpOyAvLyROT04tTkxTLTEkCi0KLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGdyb3VwLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoZ3JvdXAsIFNXVC5OVUxMKTsKLSAgICBHcmlkRGF0YSBkYXRhMSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGExLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhMS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhMS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhMSk7Ci0JCi0JU3RyaW5nIG5hbWVzcGFjZUxhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0U7ICAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nRmllbGRFZGl0b3IgdGFyZ2V0TmFtZXNwYWNlID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKG5hbWVzcGFjZUxhYmVsLCBuYW1lc3BhY2VMYWJlbCwgY29tcG9zaXRlKTsKLSAgICBHcmlkTGF5b3V0IGNvbXBvc2l0ZUxheW91dCA9IChHcmlkTGF5b3V0KWNvbXBvc2l0ZS5nZXRMYXlvdXQoKTsKLSAgICBjb21wb3NpdGVMYXlvdXQubWFyZ2luV2lkdGggPSA1OyAgIC8vIERlZmF1bHQgdmFsdWUKLSAgICBjb21wb3NpdGVMYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgYWRkRmllbGQodGFyZ2V0TmFtZXNwYWNlKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHRhcmdldE5hbWVzcGFjZS5nZXRUZXh0Q29udHJvbChjb21wb3NpdGUpLCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9QUkVGX0RFRkFVTFRfVE5TKTsKLQkKLQlTdHJpbmcgZ2VuZXJhdGVMYWJlbCA9IE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfQVVUT19SRUdFTkVSQVRFX0JJTkRJTkc7IC8vJE5PTi1OTFMtMSQKLQlCb29sZWFuRmllbGRFZGl0b3IgZ2VuZXJhdGVCaW5kaW5nT25TYXZlID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcihnZW5lcmF0ZUxhYmVsLCBnZW5lcmF0ZUxhYmVsLCBwYXJlbnQpOwotCWFkZEZpZWxkKGdlbmVyYXRlQmluZGluZ09uU2F2ZSk7Ci0gICAgCi0JU3RyaW5nIHNob3dHZW5lcmF0ZURpYWxvZ0xhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9QUk9NUFRfUkVHRU5fQklORElOR19PTl9TQVZFOyAvLyROT04tTkxTLTEkCi0JQm9vbGVhbkZpZWxkRWRpdG9yIHNob3dHZW5lcmF0ZURpYWxvZyA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3Ioc2hvd0dlbmVyYXRlRGlhbG9nTGFiZWwsIHNob3dHZW5lcmF0ZURpYWxvZ0xhYmVsLCBwYXJlbnQpOwotCWFkZEZpZWxkKHNob3dHZW5lcmF0ZURpYWxvZyk7Ci0KLSAgICAvKiBEbyB3ZSBuZWVkIHRoaXMgcHJlZmVyZW5jZSBiZWxvdz8gIElmIHNvLCBjaGFuZ2UgV1NETEVkaXRvclBsdWdpbi5qYXZhIGFuZCB1c2UgdGhpcyBwcmVmZXJlbmNlIGluOgotICAgICAgIEh0dHBDb250ZW50R2VuZXJhdG9yLmphdmEKLSAgICAgICBTb2FwQ29udGVudEdlbmVyYXRvci5qYXZhCi0gICAgICAgU29hcFBvcnRPcHRpb25zUGFnZS5qYXZhCi0gICAgKi8KLS8vICAgIEh0dHBQb3J0T3B0aW9uc1BhZ2UuamF2YSAgICBTdHJpbmdGaWVsZEVkaXRvciBsb2NhdGlvbiA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigiRGVmdWFsdCBMb2NhdGlvbjoiLCAiRGVmYXVsdCBMb2NhdGlvbjoiLCBlZGl0b3JHcm91cDEpOyAvLyBFeHRlcm5hbGl6ZQotLy8gICAgYWRkRmllbGQobG9jYXRpb24pOyAKLQkKLQlhcHBseURpYWxvZ0ZvbnQocGFyZW50KTsKLSAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMU2VsZWN0aW9uTWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExTZWxlY3Rpb25NYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM4ODhkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExTZWxlY3Rpb25NYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbk1hcHBlciBpbXBsZW1lbnRzIElTZWxlY3Rpb25NYXBwZXIgewotCi0JcHVibGljIElTZWxlY3Rpb24gbWFwU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFN0cnVjdHVyZWRTZWxlY3Rpb24pIHsgIAotCQkJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y3R1cmVkU2VsZWN0aW9uID0gKFN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotCQkJZm9yIChJdGVyYXRvciBpID0gc3RydWN0dXJlZFNlbGVjdGlvbi5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKSB7Ci0JCQkJT2JqZWN0IG8gPSBpLm5leHQoKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIEFkYXB0ZXIpIHsKLQkJCQkJbGlzdC5hZGQoKChBZGFwdGVyKW8pLmdldFRhcmdldCgpKTsKLQkJCQl9ICAKLQkJCQllbHNlIHsKLQkJCQkJbGlzdC5hZGQobyk7Ci0JCQkJfSAgCi0JCQl9ICAKLQkJfQotCQlyZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obGlzdCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRFbGVtZW50QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkRWxlbWVudEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTE2MWM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRFbGVtZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuTmV3Q29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotcHVibGljIGNsYXNzIEFkZEVsZW1lbnRBY3Rpb24gZXh0ZW5kcyBCYXNlTm9kZUFjdGlvbiB7Ci0JcHJvdGVjdGVkIE5vZGUgcGFyZW50Tm9kZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIHByZWZpeDsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5vZGVOYW1lOwotCXByb3RlY3RlZCBFbGVtZW50IG5ld0VsZW1lbnQ7Ci0JcHJvdGVjdGVkIE5vZGUgcmVsYXRpdmVOb2RlID0gbnVsbDsKLQlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgZWRpdG9yUGFydDsKLQlwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCXByb3RlY3RlZCBEb2N1bWVudCBkb2N1bWVudDsKLQlwcm90ZWN0ZWQgYm9vbGVhbiBjb21wdXRlVG9wTGV2ZWxSZWZDaGlsZDsKLQotCXByb3RlY3RlZCBib29sZWFuIHNlbGVjdE5ld2x5Q3JlYXRlZE9iamVjdCA9IHRydWU7IC8vIFdlIHNob3VsZCBub3QgYmUKLQkJCQkJCQkJCQkJCQkJLy8gc2VsZWN0aW5nIHRoZQotCQkJCQkJCQkJCQkJCQkvLyBvYmplY3QgaW4gdGhlCi0JCQkJCQkJCQkJCQkJCS8vIGFjdGlvbi4uLi4uIFRPRE8KLQotCXB1YmxpYyBBZGRFbGVtZW50QWN0aW9uKFN0cmluZyB0ZXh0LCBTdHJpbmcgaW1hZ2VEZXNjcmlwdG9yS2V5LCBOb2RlIHBhcmVudE5vZGUsIFN0cmluZyBub2RlTmFtZSkgewotCQlzZXRUZXh0KHRleHQpOwotCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoaW1hZ2VEZXNjcmlwdG9yS2V5KSk7Ci0JCXRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7Ci0JCXRoaXMubm9kZU5hbWUgPSBub2RlTmFtZTsKLQl9Ci0KLQlwdWJsaWMgQWRkRWxlbWVudEFjdGlvbihTdHJpbmcgdGV4dCwgU3RyaW5nIGltYWdlRGVzY3JpcHRvcktleSwgTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgbG9jYWxOYW1lKSB7Ci0JCXNldFRleHQodGV4dCk7Ci0JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcihpbWFnZURlc2NyaXB0b3JLZXkpKTsKLQkJdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTsKLQkJdGhpcy5wcmVmaXggPSBwcmVmaXg7Ci0JCXRoaXMubm9kZU5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotCi0JcHVibGljIEFkZEVsZW1lbnRBY3Rpb24oU3RyaW5nIHRleHQsIE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIGxvY2FsTmFtZSkgewotCQlzZXRUZXh0KHRleHQpOwotCQlzZXRJbWFnZURlc2NyaXB0b3IobnVsbCk7Ci0JCXRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7Ci0JCXRoaXMucHJlZml4ID0gcHJlZml4OwotCQl0aGlzLm5vZGVOYW1lID0gbG9jYWxOYW1lOwotCX0KLQotCXB1YmxpYyBBZGRFbGVtZW50QWN0aW9uKE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIGxvY2FsTmFtZSwgTm9kZSByZWxhdGl2ZU5vZGUpIHsKLQkJdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTsKLQkJdGhpcy5wcmVmaXggPSBwcmVmaXg7Ci0JCXRoaXMubm9kZU5hbWUgPSBsb2NhbE5hbWU7Ci0JCXRoaXMucmVsYXRpdmVOb2RlID0gcmVsYXRpdmVOb2RlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKGJvb2xlYW4gaXNFbmFibGVkKSB7Ci0JCWNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkID0gaXNFbmFibGVkOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldEVkaXRvclBhcnQoSUVkaXRvclBhcnQgZWRpdG9yUGFydCkgewotCQl0aGlzLmVkaXRvclBhcnQgPSBlZGl0b3JQYXJ0OwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIHNob3dEaWFsb2coKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJYm9vbGVhbiBvayA9IHNob3dEaWFsb2coKTsKLQkJaWYgKG9rKSB7Ci0JCQliZWdpblJlY29yZGluZygpOwotCQkJcGVyZm9ybUFkZEVsZW1lbnQoKTsKLQkJCWVuZFJlY29yZGluZygpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFkZEVsZW1lbnQoKSB7Ci0JCWlmIChwYXJlbnROb2RlICE9IG51bGwpIHsKLQkJCW5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KG5vZGVOYW1lKTsKLQkJCWFkZEF0dHJpYnV0ZXMobmV3RWxlbWVudCk7Ci0JCQlpZiAocmVsYXRpdmVOb2RlID09IG51bGwgJiYgY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQpIHsKLQkJCQlyZWxhdGl2ZU5vZGUgPSBjb21wdXRlVG9wTGV2ZWxSZWZDaGlsZChuZXdFbGVtZW50KTsKLQkJCX0KLQotCQkJaWYgKHJlbGF0aXZlTm9kZSA9PSBudWxsKSB7Ci0JCQkJcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIHJlbGF0aXZlTm9kZSk7Ci0JCQl9Ci0JCQkvLyBmb3JtYXQocGFyZW50Tm9kZSk7Ci0JCQlmb3JtYXQobmV3RWxlbWVudCk7Ci0JCQkvLyBVZ2x5Li4uLi4gV2Ugc2hvdWxkIG5vdCBiZSBzZWxlY3RpbmcgdGhlIG9iamVjdCBpbiB0aGUgZ3JhcGgKLQkJCS8vIHZpZXcgaW4gdGhlIEFjdGlvbi4KLQkJCS8vIFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQgb3V0LiBXZSBhZGQgdGhpcyBib29sZWFuIGNoZWNrCi0JCQkvLyBiZWNhdXNlIFdTRExTZXRUeXBlRGlhbG9nLmphdmEKLQkJCS8vIHVzZXMgQWRkSW1wb3J0QWN0aW9uLmphdmEgYnV0IHdlIHNob3VsZCBub3QgYmUgc2VsZWN0aW5nIHRoZQotCQkJLy8gbmV3bHkgY3JlYXRlZCBpbXBvcnQuLi4uCi0JCQlpZiAoc2VsZWN0TmV3bHlDcmVhdGVkT2JqZWN0KSB7Ci0JCQkJc2VsZWN0T2JqZWN0Rm9yTmV3RWxlbWVudCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLy8gVWdseS4uLi4uIFdlIHNob3VsZCBub3QgYmUgc2VsZWN0aW5nIHRoZSBvYmplY3QgaW4gdGhlIGdyYXBoIHZpZXcgaW4KLQkvLyB0aGUgQWN0aW9uLgotCS8vIFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQgb3V0LiBXZSBhZGQgdGhpcyBib29sZWFuIGNoZWNrIGJlY2F1c2UKLQkvLyBXU0RMU2V0VHlwZURpYWxvZy5qYXZhCi0JLy8gdXNlcyBBZGRJbXBvcnRBY3Rpb24uamF2YSBidXQgd2Ugc2hvdWxkIG5vdCBiZSBzZWxlY3RpbmcgdGhlIG5ld2x5Ci0JLy8gY3JlYXRlZCBpbXBvcnQuLi4uCi0JLy8gV2Ugc2hvdWxkIGNhbGwgdGhpcyBtZXRob2QgYmVmb3JlIGNhbGxpbmcgcnVuKCkKLQlwdWJsaWMgdm9pZCBzZWxlY3RPYmplY3RGb3JOZXdFbGVtZW50KGJvb2xlYW4gc2VsZWN0KSB7Ci0JCXNlbGVjdE5ld2x5Q3JlYXRlZE9iamVjdCA9IHNlbGVjdDsKLQl9Ci0KLQlwdWJsaWMgTm9kZSBnZXROb2RlKCkgewotCQlpZiAocGFyZW50Tm9kZSAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gcGFyZW50Tm9kZTsKLQkJfQotCQllbHNlIHsKLQkJCXJldHVybiBkb2N1bWVudDsKLQkJfQotCX0KLQotCi0JcHVibGljIFN0cmluZyBnZXRVbmRvRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiBNZXNzYWdlcy5fVUlfQUNUSU9OX0FERDsgLy8kTk9OLU5MUy0xJAotCX0KLQotCi0JcHJvdGVjdGVkIEVsZW1lbnQgY3JlYXRlRWxlbWVudChTdHJpbmcgbm9kZU5hbWUpIHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBwYXJlbnROb2RlLmdldE93bmVyRG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGVsZW1lbnQgPSAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4Lmxlbmd0aCgpID4gMCkgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHByZWZpeCArICI6IiArIG5vZGVOYW1lKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpOyAvLyROT04tTkxTLTEkCi0KLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQXR0cmlidXRlcyhFbGVtZW50IG5ld0VsZW1lbnQpIHsKLQl9Ci0KLQotCXByb3RlY3RlZCB2b2lkIGZvcm1hdChOb2RlIHBhcmVudE5vZGUpIHsKLQkJaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkgewotCQkJLy8gZm9ybWF0IHNlbGVjdGVkIG5vZGUKLQkJCUZvcm1hdFByb2Nlc3NvclhNTCBmb3JtYXRQcm9jZXNzb3JYTUwgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0JCQlmb3JtYXRQcm9jZXNzb3JYTUwuZm9ybWF0Tm9kZSgoSURPTU5vZGUpIHBhcmVudE5vZGUpOwotCi0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgRWxlbWVudCBnZXREZWZpbml0aW9uRWxlbWVudChFbGVtZW50IHBhcmVudEVsZW1lbnQpIHsKLQkJRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IG51bGw7Ci0KLQkJZm9yIChOb2RlIG5vZGUgPSBwYXJlbnRFbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKS5nZXRGaXJzdENoaWxkKCk7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKSkgewotCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotCQkJCUVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotCQkJCWlmIChXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKGVsZW1lbnQpID09IFdTRExDb25zdGFudHMuREVGSU5JVElPTikgewotCQkJCQlkZWZpbml0aW9uRWxlbWVudCA9IGVsZW1lbnQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZGVmaW5pdGlvbkVsZW1lbnQ7Ci0JfQotCi0JcHVibGljIEVsZW1lbnQgZ2V0TmV3RWxlbWVudCgpIHsKLQkJcmV0dXJuIG5ld0VsZW1lbnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3RPYmplY3RGb3JOZXdFbGVtZW50KCkgewotCQlpZiAoZWRpdG9yUGFydCA9PSBudWxsKSB7Ci0JCQllZGl0b3JQYXJ0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJfQotCQlpZiAoZWRpdG9yUGFydCAhPSBudWxsICYmIGRlZmluaXRpb24gIT0gbnVsbCkgewotCQkJT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZmluZE1vZGVsT2JqZWN0Rm9yRWxlbWVudChkZWZpbml0aW9uLCBuZXdFbGVtZW50KTsKLQkJCWlmIChvYmplY3QgIT0gbnVsbCkgewotCQkJCUlTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlciA9IChJU2VsZWN0aW9uUHJvdmlkZXIpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJU2VsZWN0aW9uUHJvdmlkZXIuY2xhc3MpOwotCQkJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7Ci0JCQkJCXNlbGVjdGlvblByb3ZpZGVyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihvYmplY3QpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3RPYmplY3QoV1NETEVsZW1lbnQgb2JqZWN0KSB7Ci0JCWlmIChlZGl0b3JQYXJ0ID09IG51bGwpIHsKLQkJCWVkaXRvclBhcnQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQl9Ci0JCWlmIChlZGl0b3JQYXJ0ICE9IG51bGwgJiYgZGVmaW5pdGlvbiAhPSBudWxsKSB7Ci0JCQlpZiAob2JqZWN0ICE9IG51bGwpIHsKLQkJCQlJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLQkJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgewotCQkJCQlzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob2JqZWN0KSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIFN0cmluZyBzaG93RGlhbG9nSGVscGVyKFN0cmluZyB0aXRsZSwgU3RyaW5nIGRlZmF1bHROYW1lLCBMaXN0IHVzZWROYW1lcykgewotCQlTdHJpbmcgcmVzdWx0ID0gZGVmYXVsdE5hbWU7Ci0JCU5ld0NvbXBvbmVudERpYWxvZyBkaWFsb2cgPSBuZXcgTmV3Q29tcG9uZW50RGlhbG9nKFdTRExFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKSwgdGl0bGUsIGRlZmF1bHROYW1lLCB1c2VkTmFtZXMpOwotCQlpbnQgcmMgPSBkaWFsb2cuY3JlYXRlQW5kT3BlbigpOwotCQlpZiAocmMgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkgewotCQkJcmVzdWx0ID0gZGlhbG9nLmdldE5hbWUoKTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcm90ZWN0ZWQgTm9kZSBjb21wdXRlVG9wTGV2ZWxSZWZDaGlsZChOb2RlIG5vZGVUb0FkZCkgewotCQlOb2RlIHJlc3VsdCA9IG51bGw7Ci0JCWludCBhID0gZ2V0UHJlY2VkZW5jZShub2RlVG9BZGQpOwotCi0JCWZvciAoTm9kZSBub2RlID0gcGFyZW50Tm9kZS5nZXRGaXJzdENoaWxkKCk7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKSkgewotCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotCQkJCWludCBiID0gZ2V0UHJlY2VkZW5jZShub2RlKTsKLQkJCQlpZiAoYiA+IGEpIHsKLQkJCQkJcmVzdWx0ID0gbm9kZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRGVmaW5pdGlvblN0dWIoKSB7Ci0JCWlmIChkb2N1bWVudCAhPSBudWxsKSB7Ci0JCQkvLyBDcmVhdGUgdGhlIERlZmluaXRpb25zIGVsZW1lbnQgd2l0aCBwcm9wZXIgbmFtZXNwYWNlCi0JCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJCVN0cmluZyBjaGFyU2V0ID0gcHJlZmVyZW5jZS5nZXRTdHJpbmcoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuT1VUUFVUX0NPREVTRVQpOwotCQkJaWYgKGNoYXJTZXQgPT0gbnVsbCB8fCBjaGFyU2V0LnRyaW0oKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQljaGFyU2V0ID0gIlVURi04IjsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCJ4bWwiLCAidmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIiArIGNoYXJTZXQgKyAiXCIiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ3c2RsOmRlZmluaXRpb25zIik7IC8vJE5PTi1OTFMtMSQKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHJvb3QpOwotCi0JCQkvLyBBZGQgdmFyaW91cyBuYW1lc3BhY2UgYXR0cmlidXRlcyBoZXJlLgotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnNvYXAiLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczp0bnMiLCBnZXREZWZhdWx0TmFtZXNwYWNlKCkpOyAvLyROT04tTkxTLTEkCi0JCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6d3NkbCIsICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlyb290LnNldEF0dHJpYnV0ZSgibmFtZSIsIGdldEZpbGVOYW1lKCkpOyAvLyROT04tTkxTLTEkCi0JCQlyb290LnNldEF0dHJpYnV0ZSgidGFyZ2V0TmFtZXNwYWNlIiwgZ2V0RGVmYXVsdE5hbWVzcGFjZSgpKTsgLy8kTk9OLU5MUy0xJAotCi0JCQlkZWZpbml0aW9uLnNldEVsZW1lbnQocm9vdCk7Ci0JCQlwYXJlbnROb2RlID0gcm9vdDsKLQkJCXByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldERlZmF1bHROYW1lc3BhY2UoKSB7Ci0JCVN0cmluZyBuYW1lc3BhY2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoIW5hbWVzcGFjZS5lbmRzV2l0aCgiLyIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCW5hbWVzcGFjZSA9IG5hbWVzcGFjZS5jb25jYXQoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJbmFtZXNwYWNlICs9IGdldEZpbGVOYW1lKCkgKyAiLyI7IC8vJE5PTi1OTFMtMSQKLQotCQlyZXR1cm4gbmFtZXNwYWNlOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEZpbGVOYW1lKCkgewotCQlTdHJpbmcgZmlsZUxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotCQlJUGF0aCBmaWxlUGF0aCA9IG5ldyBQYXRoKGZpbGVMb2NhdGlvbik7Ci0JCXJldHVybiBmaWxlUGF0aC5yZW1vdmVGaWxlRXh0ZW5zaW9uKCkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSGFzaE1hcCBwcmVjZWRlbmNlTWFwID0gY3JlYXRlUHJlY2VkZW5jZU1hcCgpOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBpbnQgZ2V0UHJlY2VkZW5jZShOb2RlIG5vZGUpIHsKLQkJaW50IHJlc3VsdCA9IDI7Ci0JCVN0cmluZyBsb2NhbE5hbWUgPSBub2RlLmdldExvY2FsTmFtZSgpOwotCQlpZiAobG9jYWxOYW1lICE9IG51bGwpIHsKLQkJCUludGVnZXIgaW50ZWdlciA9IChJbnRlZ2VyKSBwcmVjZWRlbmNlTWFwLmdldChsb2NhbE5hbWUpOwotCQkJaWYgKGludGVnZXIgIT0gbnVsbCkgewotCQkJCXJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSGFzaE1hcCBjcmVhdGVQcmVjZWRlbmNlTWFwKCkgewotCQlIYXNoTWFwIGhhc2hNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDEpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5JTVBPUlRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDMpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5UWVBFU19FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoNCkpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLk1FU1NBR0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDUpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5QT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDYpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig3KSk7Ci0JCWhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuU0VSVklDRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoOCkpOwotCQlyZXR1cm4gaGFzaE1hcDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWY0MDY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0JcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIHByZWZpeDsKLQkKLQlwdWJsaWMgQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHN1Z2dlc3RlZFByZWZpeCkKLQl7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotCQl0aGlzLnByZWZpeCA9IHN1Z2dlc3RlZFByZWZpeDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCVN0cmluZyBleGlzdGluZ1ByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KG5hbWVzcGFjZSk7Ci0JCWlmIChleGlzdGluZ1ByZWZpeCAhPSBudWxsKQotCQl7Ci0JCQlwcmVmaXggPSBleGlzdGluZ1ByZWZpeDsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXByZWZpeCA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUHJlZml4KGRlZmluaXRpb24sIHByZWZpeCk7Ci0JCQlFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24pOwotCQkJaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwpCi0JCQl7Ci0JCQkJZGVmaW5pdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgcHJlZml4LCBuYW1lc3BhY2UpOyAvLyROT04tTkxTLTEkCi0JCQl9CQkJCi0JCX0JCQotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpCi0JewotCQlyZXR1cm4gcHJlZml4OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRJbXBvcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRJbXBvcnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUyNTQ5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkSW1wb3J0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsgCi0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLkludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQWRkSW1wb3J0QWN0aW9uIGV4dGVuZHMgQWRkRWxlbWVudEFjdGlvbgoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyBlbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXg7Ci0KLSAgcHVibGljIEFkZEltcG9ydEFjdGlvbihJRWRpdG9yUGFydCBwYXJ0LCBEZWZpbml0aW9uIGRlZmluaXRpb24sIE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIHByZWZpeCkKLSAgewotCXRoaXMocGFydCwgZGVmaW5pdGlvbiwgcGFyZW50Tm9kZSwgcHJlZml4LCBudWxsLCBudWxsKTsKLSAgfQotICAKLSAgcHVibGljIEFkZEltcG9ydEFjdGlvbihJRWRpdG9yUGFydCBwYXJ0LCBEZWZpbml0aW9uIGRlZmluaXRpb24sIE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotICB7Ci0gICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfSU1QT1JULCAiaWNvbnMvaW1wb3J0X29iai5naWYiLCBwYXJlbnROb2RlLCBwcmVmaXgsICJpbXBvcnQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkgIHNldERlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0JICBzZXRDb21wdXRlVG9wTGV2ZWxSZWZDaGlsZCh0cnVlKTsKLQkgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotCSAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwotCSAgc2V0RWRpdG9yUGFydChwYXJ0KTsKLQkgIAotCSAgaWYgKHBhcnQgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHsKLQkgIAlkb2N1bWVudCA9ICgoSURPTU1vZGVsKSAoKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgcGFydCkuZ2V0TW9kZWwoKSkuZ2V0RG9jdW1lbnQoKTsKLQkgIH0KLSAgfQotICAgICAgICAKLSAgcHJvdGVjdGVkIEVsZW1lbnQgY3JlYXRlRWxlbWVudChTdHJpbmcgbm9kZU5hbWUpCi0gIHsKLSAgCWlmIChlbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXggIT0gbnVsbCAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgCXsgCi0gICAgCUVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbik7Ci0gICAgCWlmIChkZWZpbml0aW9uRWxlbWVudCAhPSBudWxsKQotICAgIAl7ICAgIAotCSAgCSAgZGVmaW5pdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgZWxlbWVudERlY2xhcmF0aW9uTmFtZXNwYWNlUHJlZml4LCBuYW1lc3BhY2UpOyAvLyROT04tTkxTLTEkCi0gICAgCX0gICAgICAJCi0gIAl9Ci0gIAlyZXR1cm4gc3VwZXIuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudERlY2xhcmF0aW9uTmFtZXNwYWNlUHJlZml4KFN0cmluZyBuc1ByZWZpeCkKLSAgewotICAJdGhpcy5lbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXggPSBuc1ByZWZpeDsKLSAgfQotICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgdm9pZCBhZGRBdHRyaWJ1dGVzKEVsZW1lbnQgbmV3RWxlbWVudCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZXNwYWNlIiwgbmFtZXNwYWNlICE9IG51bGwgPyBuYW1lc3BhY2UgOiAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCJsb2NhdGlvbiIsIGxvY2F0aW9uICE9IG51bGwgPyBsb2NhdGlvbiA6ICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtQWRkRWxlbWVudCgpIHsKLSAgCWlmIChwYXJlbnROb2RlID09IG51bGwgfHwgKGRvY3VtZW50ICE9IG51bGwgJiYgZG9jdW1lbnQuZ2V0Q2hpbGROb2RlcygpLmdldExlbmd0aCgpID09IDApKSB7Ci0gIAkJY3JlYXRlRGVmaW5pdGlvblN0dWIoKTsKLSAgCX0KLSAgCQotICAJc3VwZXIucGVyZm9ybUFkZEVsZW1lbnQoKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUwMmVhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi1wdWJsaWMgY2xhc3MgQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uIGV4dGVuZHMgQmFzZU5vZGVBY3Rpb24KLXsKLSAgICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICAgIHByb3RlY3RlZCBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50OwotICAgIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlOwotICAgIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb247Ci0gICAgcHJvdGVjdGVkIFN0cmluZyBlbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXg7Ci0KLSAgICBwdWJsaWMgQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbik7Ci0gICAgfQotCi0gICAgcHVibGljIE5vZGUgZ2V0Tm9kZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZGVmaW5pdGlvbkVsZW1lbnQ7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkKLSAgICB7Ci0gICAgCXJldHVybiBNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTVBPUlQ7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgRWxlbWVudCBnZXRPckNyZWF0ZVR5cGVzRWxlbWVudCgpCi0gICAgewotICAgICAgICBFbGVtZW50IHR5cGVzRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChkZWZpbml0aW9uLmdldFR5cGVzKCkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQWRkRWxlbWVudEFjdGlvbiBhZGRUeXBlc0FjdGlvbiA9IG5ldyBBZGRFbGVtZW50QWN0aW9uKCIiLCAiaWNvbnMveHNkX29iai5naWYiLCBkZWZpbml0aW9uRWxlbWVudCwgZGVmaW5pdGlvbkVsZW1lbnQuZ2V0UHJlZml4KCksICJ0eXBlcyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgICAgICAgICAgIGFkZFR5cGVzQWN0aW9uLnNldENvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKHRydWUpOwotICAgICAgICAgICAgICAgIGFkZFR5cGVzQWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgICAgIHR5cGVzRWxlbWVudCA9IGFkZFR5cGVzQWN0aW9uLmdldE5ld0VsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBmb3JtYXQodHlwZXNFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHR5cGVzRWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uLmdldFR5cGVzKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlc0VsZW1lbnQ7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCBFbGVtZW50IGdldEltcG9ydEhvbGRlckVsZW1lbnQoRWxlbWVudCB0eXBlc0VsZW1lbnQpIHsKLSAgICAJRWxlbWVudCBpbXBvcnRIb2xkZXJFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSB0eXBlc0VsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgbm9kZSA9IG5vZGVMaXN0Lml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotICAgICAgICAgICAgICAgIGlmICgic2NoZW1hIi5lcXVhbHMoZWxlbWVudC5nZXRMb2NhbE5hbWUoKSkgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRhcmdldE5hbWVzcGFjZSIpID09IG51bGwpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0SG9sZGVyRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGltcG9ydEhvbGRlckVsZW1lbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIEVsZW1lbnQgZ2V0T3JDcmVhdGVJbXBvcnRIb2xkZXJFbGVtZW50KEVsZW1lbnQgdHlwZXNFbGVtZW50KQotICAgIHsKLSAgICAgICAgRWxlbWVudCBpbXBvcnRIb2xkZXJFbGVtZW50ID0gZ2V0SW1wb3J0SG9sZGVyRWxlbWVudCh0eXBlc0VsZW1lbnQpOwotICAgICAgICBpZiAoaW1wb3J0SG9sZGVyRWxlbWVudCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBBZGRFbGVtZW50QWN0aW9uIGFkZEltcG9ydEhvbGRlckFjdGlvbiA9IG5ldyBBZGRFbGVtZW50QWN0aW9uKCIiLCAiaWNvbnMveHNkX29iai5naWYiLCB0eXBlc0VsZW1lbnQsICJ4c2QiLCAic2NoZW1hIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQgLy8kTk9OLU5MUy00JAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBuZXdFbGVtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsIFdTRExDb25zdGFudHMuWFNEX05BTUVTUEFDRV9VUkkpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGFkZEltcG9ydEhvbGRlckFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgIGltcG9ydEhvbGRlckVsZW1lbnQgPSBhZGRJbXBvcnRIb2xkZXJBY3Rpb24uZ2V0TmV3RWxlbWVudCgpOwotICAgICAgICAgICAgZm9ybWF0KGltcG9ydEhvbGRlckVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbXBvcnRIb2xkZXJFbGVtZW50OwotICAgIH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGFkZCB0aGUgaW1wb3J0IGlmIGl0J3MgYWxyZWFkeSB0aGVyZQotICAgIHByb3RlY3RlZCBib29sZWFuIGltcG9ydE5vdEFscmVhZHlFeGlzdHMoKSB7Ci0gICAgCWJvb2xlYW4gbm90RXhpc3RzID0gdHJ1ZTsKLSAgICAJCi0gICAgCWlmIChkZWZpbml0aW9uLmdldFR5cGVzKCkgIT0gbnVsbCkgewotICAgIAkJRWxlbWVudCB0eXBlc0VsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbi5nZXRUeXBlcygpKTsKLSAgICAJCUVsZW1lbnQgc2NoZW1hRWxlbWVudCA9IGdldEltcG9ydEhvbGRlckVsZW1lbnQodHlwZXNFbGVtZW50KTsKLQotICAgIAkJaWYgKHNjaGVtYUVsZW1lbnQgIT0gbnVsbCkgewotICAgIAkJCS8vIENvbGxlY3QgY2hpbGRyZW4KLSAgICAJCQlOb2RlIG5vZGUgPSBzY2hlbWFFbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLSAgICAJCQlqYXZhLnV0aWwuVmVjdG9yIHNjaGVtYUNoaWxkcmVuID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICAJCQlpZiAobm9kZSAhPSBudWxsKSB7Ci0gICAgCQkJCU5vZGUgY2hpbGQgPSBub2RlOwotCQkJCQkKLSAgICAJCQkJaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuVGV4dEltcGwpKSB7Ci0gICAgCQkJCQlzY2hlbWFDaGlsZHJlbi5hZGRFbGVtZW50KGNoaWxkKTsKLSAgICAJCQkJfQotCQkJCQkKLSAgICAJCQkJd2hpbGUgKGNoaWxkLmdldE5leHRTaWJsaW5nKCkgIT0gbnVsbCkgewotICAgIAkJCQkJY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpOwotICAgIAkJCQkJaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuVGV4dEltcGwpKSB7Ci0gICAgCQkJCQkJc2NoZW1hQ2hpbGRyZW4uYWRkRWxlbWVudChjaGlsZCk7Ci0gICAgCQkJCQl9Ci0gICAgCQkJCX0KLQotICAgIAkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2NoZW1hQ2hpbGRyZW4uc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgCQkJCQlFbGVtZW50IHNjaGVtYUNoaWxkID0gKEVsZW1lbnQpIHNjaGVtYUNoaWxkcmVuLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgCQkJCQlTdHJpbmcgc2NoZW1hTG9jYXRpb24gPSBzY2hlbWFDaGlsZC5nZXRBdHRyaWJ1dGUoInNjaGVtYUxvY2F0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICAJCQkJCVN0cmluZyBzY2hlbWFOYW1lc3BhY2UgPSBzY2hlbWFDaGlsZC5nZXRBdHRyaWJ1dGUoIm5hbWVzcGFjZSIpOyAvLyROT04tTkxTLTEkCi0JCQkJCi0gICAgCQkJCQlpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBuYW1lc3BhY2UgIT0gbnVsbCAmJgotICAgIAkJCQkJCQlzY2hlbWFMb2NhdGlvbi5lcXVhbHMobG9jYXRpb24pICYmIHNjaGVtYU5hbWVzcGFjZS5lcXVhbHMobmFtZXNwYWNlKSkgewotICAgIAkJCQkJCW5vdEV4aXN0cyA9IGZhbHNlOwotICAgIAkJCQkJCWJyZWFrOwotICAgIAkJCQkJfQotICAgIAkJCQl9Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAl9Ci0gICAgCQotICAgIAlyZXR1cm4gbm90RXhpc3RzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgICBpZiAoZGVmaW5pdGlvbkVsZW1lbnQgIT0gbnVsbCAmJiBpbXBvcnROb3RBbHJlYWR5RXhpc3RzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJlZ2luUmVjb3JkaW5nKCk7Ci0gICAgICAgICAgICBwZXJmb3JtQWRkRWxlbWVudCgpOwotICAgICAgICAgICAgZW5kUmVjb3JkaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcHVibGljIHZvaWQgcGVyZm9ybUFkZEVsZW1lbnQoKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgdHlwZXNFbGVtZW50ID0gZ2V0T3JDcmVhdGVUeXBlc0VsZW1lbnQoKTsKLSAgICAgICAgICAgIEVsZW1lbnQgaW1wb3J0SG9sZGVyRWxlbWVudCA9IGdldE9yQ3JlYXRlSW1wb3J0SG9sZGVyRWxlbWVudCh0eXBlc0VsZW1lbnQpOwotCi0gICAgICAgICAgICBBZGRFbGVtZW50QWN0aW9uIGFkZEltcG9ydEFjdGlvbiA9IG5ldyBBZGRFbGVtZW50QWN0aW9uKCIiLCAiaWNvbnMveHNkX29iai5naWYiLCBpbXBvcnRIb2xkZXJFbGVtZW50LCBpbXBvcnRIb2xkZXJFbGVtZW50LmdldFByZWZpeCgpLCAiaW1wb3J0IikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBhZGRBdHRyaWJ1dGVzKEVsZW1lbnQgbmV3RWxlbWVudCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lc3BhY2UiLCBuYW1lc3BhY2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCJzY2hlbWFMb2NhdGlvbiIsIGxvY2F0aW9uKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBhZGRJbXBvcnRBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBhZGRJbXBvcnRBY3Rpb24uZ2V0TmV3RWxlbWVudCgpOwotICAgICAgICAgICAgZm9ybWF0KG5ld0VsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RWxlbWVudERlY2xhcmF0aW9uTmFtZXNwYWNlUHJlZml4KFN0cmluZyBuc1ByZWZpeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudERlY2xhcmF0aW9uTmFtZXNwYWNlUHJlZml4ID0gbnNQcmVmaXg7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGZvcm1hdChOb2RlIHBhcmVudE5vZGUpCi0gICAgewotICAgICAgICBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBmb3JtYXQgc2VsZWN0ZWQgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIEZvcm1hdFByb2Nlc3NvclhNTCBmb3JtYXRQcm9jZXNzb3JYTUwgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0gICAgICAgICAgICBmb3JtYXRQcm9jZXNzb3JYTUwuZm9ybWF0Tm9kZSgoSURPTU5vZGUpcGFyZW50Tm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQmFzZU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9CYXNlTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWQzNWJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9CYXNlTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7IAotICAgICAgICAgICAgICAgICAgICAgIAotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlTm9kZUFjdGlvbiBleHRlbmRzIEFjdGlvbgoteyAKLSAgcHVibGljIGFic3RyYWN0IE5vZGUgZ2V0Tm9kZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFVuZG9EZXNjcmlwdGlvbigpOwotCi0gIHB1YmxpYyB2b2lkIGJlZ2luUmVjb3JkaW5nKCkKLSAgeyAgICAKLSAgICBOb2RlIG5vZGUgPSBnZXROb2RlKCk7ICAKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgIHsKLSAgICAgICgoSURPTU5vZGUpbm9kZSkuZ2V0TW9kZWwoKS5iZWdpblJlY29yZGluZyh0aGlzLCBnZXRVbmRvRGVzY3JpcHRpb24oKSk7ICAKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlbmRSZWNvcmRpbmcoKQotICB7ICAgICAgICAgICAgICAgICAKLSAgICBOb2RlIG5vZGUgPSBnZXROb2RlKCk7IAotICAgIGlmIChub2RlIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgewotICAgICAgKChJRE9NTm9kZSlub2RlKS5nZXRNb2RlbCgpLmVuZFJlY29yZGluZyh0aGlzKTsgIAotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9FZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0VkaXROYW1lc3BhY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZWJjZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0VkaXROYW1lc3BhY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLkVkaXROYW1lc3BhY2VzRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkRPTU5hbWVzcGFjZUluZm9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIEVkaXROYW1lc3BhY2VzQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0KLSAgcHVibGljIEVkaXROYW1lc3BhY2VzQWN0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHNldFRleHQoTWVzc2FnZXMuX1VJX0VESVRfTkFNRVNQQUNFUyk7IC8vJE5PTi1OTFMtMSQKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIERPTU5hbWVzcGFjZUluZm9NYW5hZ2VyIG5hbWVzcGFjZUluZm9NYW5hZ2VyID0gbmV3IERPTU5hbWVzcGFjZUluZm9NYW5hZ2VyKCk7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24pOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCA9IG5hbWVzcGFjZUluZm9NYW5hZ2VyLmdldE5hbWVzcGFjZUluZm9MaXN0KGVsZW1lbnQpOwotLy8gICAgICBMaXN0IG9sZE5hbWVzcGFjZUluZm9MaXN0ID0gTmFtZXNwYWNlSW5mby5jbG9uZU5hbWVzcGFjZUluZm9MaXN0KG5hbWVzcGFjZUluZm9MaXN0KTsKLQotICAgICAgLy8gaGVyZSB3ZSBzdG9yZSBhIGNvcHkgb2YgdGhlIG9sZCBpbmZvIGZvciBlYWNoIE5hbWVzcGFjZUluZm8KLSAgICAgIC8vIHRoaXMgaW5mbyB3aWxsIGJlIHVzZWQgaW4gY3JlYXRlUHJlZml4TWFwcGluZygpIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHVwZGF0ZSB0aGUgZG9jdW1lbnQgCi0gICAgICAvLyBpbiByZXNwb25zZSB0byB0aGVzZSBjaGFuZ2VzCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBuYW1lc3BhY2VJbmZvTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IChOYW1lc3BhY2VJbmZvKSBpLm5leHQoKTsKLSAgICAgICAgTmFtZXNwYWNlSW5mbyBvbGRDb3B5ID0gbmV3IE5hbWVzcGFjZUluZm8oaW5mbyk7Ci0gICAgICAgIGluZm8uc2V0UHJvcGVydHkoIm9sZENvcHkiLCBvbGRDb3B5KTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotCi0JICBJUGF0aCBwYXRoID0gbmV3IFBhdGgoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gICAgICBFZGl0TmFtZXNwYWNlc0RpYWxvZyBkaWFsb2cgPSBuZXcgRWRpdE5hbWVzcGFjZXNEaWFsb2coV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCAgcGF0aCwgTWVzc2FnZXMuX1VJX0VESVRfTkFNRVNQQUNFU19ESUFMT0dfVElUTEUsIGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWVzcGFjZUluZm9MaXN0KTsgLy8kTk9OLU5MUy0xJAotICAgICAgaW50IHJjID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLSAgICAgIGlmIChyYyA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKQotICAgICAgeyAgICAgIAkKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhcmdldE5hbWVzcGFjZSIsIGRpYWxvZy5nZXRUYXJnZXROYW1lc3BhY2UoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCi0gICAgICAgIExpc3QgbmV3SW5mb0xpc3QgPSBkaWFsb2cuZ2V0TmFtZXNwYWNlSW5mb0xpc3QoKTsKLSAgICAgICAgbmFtZXNwYWNlSW5mb01hbmFnZXIucmVtb3ZlTmFtZXNwYWNlSW5mbyhlbGVtZW50KTsKLSAgICAgICAgbmFtZXNwYWNlSW5mb01hbmFnZXIuYWRkTmFtZXNwYWNlSW5mbyhlbGVtZW50LCBuZXdJbmZvTGlzdCwgZmFsc2UpOwotCi0vKgotICAgICAgICAvLyBzZWUgaWYgd2UgbmVlZCB0byByZW5hbWUgYW55IHByZWZpeGVzCi0gICAgICAgIE1hcCBwcmVmaXhNYXBwaW5nID0gY3JlYXRlUHJlZml4TWFwcGluZyhvbGROYW1lc3BhY2VJbmZvTGlzdCwgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgICAgICBpZiAocHJlZml4TWFwcGluZy5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgLy9tYW5hZ2VyLmdldE1vZGVsKCkuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0gICAgICAgICAgUmVwbGFjZVByZWZpeEFjdGlvbiByZXBsYWNlUHJlZml4QWN0aW9uID0gbmV3IFJlcGxhY2VQcmVmaXhBY3Rpb24oZWxlbWVudCwgcHJlZml4TWFwcGluZyk7Ci0gICAgICAgICAgcmVwbGFjZVByZWZpeEFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAvL21hbmFnZXIuZ2V0TW9kZWwoKS5jaGFuZ2VkTW9kZWwoKTsKLSAgICAgICAgfQotKi8gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBNYXAgY3JlYXRlUHJlZml4TWFwcGluZyhMaXN0IG9sZExpc3QsIExpc3QgbmV3TGlzdCkKLSAgewotICAgIE1hcCBtYXAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBIYXNodGFibGUgb2xkVVJJVG9QcmVmaXhUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvbGRMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBOYW1lc3BhY2VJbmZvIG9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0gICAgICBvbGRVUklUb1ByZWZpeFRhYmxlLnB1dChvbGRJbmZvLnVyaSwgb2xkSW5mbyk7Ci0gICAgfQotCi0gICAgZm9yIChJdGVyYXRvciBpID0gbmV3TGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgTmFtZXNwYWNlSW5mbyBuZXdJbmZvID0gKE5hbWVzcGFjZUluZm8pIGkubmV4dCgpOwotICAgICAgTmFtZXNwYWNlSW5mbyBvbGRJbmZvID0gKE5hbWVzcGFjZUluZm8pIG9sZFVSSVRvUHJlZml4VGFibGUuZ2V0KG5ld0luZm8udXJpICE9IG51bGwgPyBuZXdJbmZvLnVyaSA6ICIiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICAvLyBpZiBvbGRJbmZvIGlzIG5vbiBudWxsIC4uLiB0aGVyZSdzIGEgbWF0Y2hpbmcgVVJJIGluIHRoZSBvbGQgc2V0Ci0gICAgICAvLyB3ZSBjYW4gdXNlIGl0cyBwcmVmaXggdG8gZGV0ZW1pbmUgb3V0IG1hcHBpbmcKLSAgICAgIC8vCi0gICAgICAvLyBpZiBvbGRJbmZvIGlzIG51bGwgLi4uICB3ZSB1c2UgdGhlICdvbGRDb3B5JyB3ZSBzdGFzaGVkIGF3YXkgCi0gICAgICAvLyBhc3N1bWluZyB0aGF0IHRoZSB1c2VyIGNoYW5nZWQgdGhlIFVSSSBhbmQgdGhlIHByZWZpeAotICAgICAgaWYgKG9sZEluZm8gPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb2xkSW5mbyA9IChOYW1lc3BhY2VJbmZvKSBuZXdJbmZvLmdldFByb3BlcnR5KCJvbGRDb3B5Iik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQotICAgICAgaWYgKG9sZEluZm8gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5ld1ByZWZpeCA9IG5ld0luZm8ucHJlZml4ICE9IG51bGwgPyBuZXdJbmZvLnByZWZpeCA6ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICAgIFN0cmluZyBvbGRQcmVmaXggPSBvbGRJbmZvLnByZWZpeCAhPSBudWxsID8gb2xkSW5mby5wcmVmaXggOiAiIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICBpZiAoIW9sZFByZWZpeC5lcXVhbHMobmV3UHJlZml4KSkKLSAgICAgICAgewotICAgICAgICAgIG1hcC5wdXQob2xkUHJlZml4LCBuZXdQcmVmaXgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtYXA7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9JV1NETFRvb2xiYXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9JV1NETFRvb2xiYXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThmYjI1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvSVdTRExUb29sYmFyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMVG9vbGJhckFjdGlvbiBleHRlbmRzIElBY3Rpb257Ci0JcHVibGljIHZvaWQgc2V0RWRpdG9yUGFydChJRWRpdG9yUGFydCBlZGl0b3JQYXJ0KTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvT3BlbkluTmV3RWRpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvT3BlbkluTmV3RWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4M2UwNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL09wZW5Jbk5ld0VkaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuT3Blbk9uU2VsZWN0aW9uSGVscGVyOwotCi1wdWJsaWMgY2xhc3MgT3BlbkluTmV3RWRpdG9yIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5PcGVuSW5OZXdFZGl0b3IiOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgT3BlbkluTmV3RWRpdG9yKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gIHsKLSAgICBzdXBlcihwYXJ0KTsKLSAgICBzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fT1BFTl9JTl9ORVdfRURJVE9SKTsgLy8kTk9OLU5MUy0xJAotICAgIHNldElkKElEKTsKLSAgICBzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oIndzZGxfZmlsZV9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGNhbGN1bGF0ZUVuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApCi0gICAgewotICAgICAgT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0gICAgICAvLyBzaG91bGQgbWFrZSB0aGlzIGdlbmVyaWMgYW5kIGJlIGFibGUgdG8gZ2V0IHRoZSBvd25lciBmcm9tIGEgZmFjYWRlIG9iamVjdAotICAgICAgaWYgKG8gaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpCi0gICAgICB7Ci0gICAgICAgIFdTRExCYXNlQWRhcHRlciBiYXNlQWRhcHRlciA9IChXU0RMQmFzZUFkYXB0ZXIpbzsKLQotICAgICAgICBJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gZWRpdG9yUGFydC5nZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLSAgICAgICAgewotICAgICAgICAgIEVPYmplY3QgZU9iamVjdCA9IChFT2JqZWN0KWJhc2VBZGFwdGVyLmdldFRhcmdldCgpOwotICAgICAgICAgIE9wZW5PblNlbGVjdGlvbkhlbHBlciBvcGVuSGVscGVyID0gbmV3IE9wZW5PblNlbGVjdGlvbkhlbHBlcigoRGVmaW5pdGlvbilvYmplY3QpOwotICAgICAgICAgIG9wZW5IZWxwZXIub3BlbkVkaXRvcihlT2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL09wZW5XU0RMRWRpdG9yVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL09wZW5XU0RMRWRpdG9yVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWM2MTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9PcGVuV1NETEVkaXRvclV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZXN5c3RlbS5FRlM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtLklGaWxlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQ7Ci0KLS8qKgotICogCi0gKiBDb252ZW5pZW5jZSBDbGFzcyB0byBvcGVuIGEgV1NETCByZXNvdXJjZQotICoKLSAqLwotcHVibGljIGNsYXNzIE9wZW5XU0RMRWRpdG9yVXRpbAotewotICBwdWJsaWMgT3BlbldTRExFZGl0b3JVdGlsKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIE9wZW5zIHRoZSBXU0RMIEVkaXRvciBvbiBhIFdTREwgcmVzb3VyY2UgZnJvbSBhbiBIVFRQIHJlZmVyZW5jZQotICAgKiAKLSAgICogQHBhcmFtIGh0dHBVUkkgOiBVUkkgaW4gdGhlIGZvcm0gb2YgImh0dHA6Ly93d3cuLi4iCi0gICAqIEByZXR1cm4gSUVkaXRvclBhcnQgb2YgdGhlIG9wZW5lZCBXU0RMIGVkaXRvcgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJRWRpdG9yUGFydCBvcGVuSHR0cEZpbGVJbkVkaXRvcihVUkkgaHR0cFVSSSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG9wZW5IdHRwRmlsZUluRWRpdG9yKGh0dHBVUkkudG9TdHJpbmcoKSk7IAotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBJRWRpdG9yUGFydCBvcGVuSHR0cEZpbGVJbkVkaXRvcihTdHJpbmcgdXJsU3RyaW5nKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLSAgewotICAgIHRyeSB7Ci0gICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gbnVsbDsKLSAgICAgIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLSAgICAgIGlmICh3b3JrYmVuY2ggIT0gbnVsbCkgewotICAgICAgICBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICAgICAgaWYgKHdpbmRvdyAhPSBudWxsKSB7Ci0gICAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCkgewotICAgICAgICAgICAgQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQgcmVhZE9ubHlGaWxlID0gbmV3IEFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0KHVybFN0cmluZyk7Ci0gICAgICAgICAgICByZWFkT25seUZpbGUuc2V0RWRpdG9ySUQoV1NETEVkaXRvclBsdWdpbi5XU0RMX0VESVRPUl9JRCk7Ci0gICAgICAgICAgICBlZGl0b3JQYXJ0ID0gcGFnZS5vcGVuRWRpdG9yKHJlYWRPbmx5RmlsZSwgV1NETEVkaXRvclBsdWdpbi5XU0RMX0VESVRPUl9JRCk7IAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGVkaXRvclBhcnQ7Ci0gICAgfQotICAgIGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBwaWUpCi0gICAgewotICAgICAgdGhyb3cgcGllOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIE9wZW5zIHRoZSBXU0RMIEVkaXRvciBvbiBhIFdTREwgcmVzb3VyY2UgdGhhdCBpcyBpbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlVVJJOiBUaGUgVVJJIGZpbGUgaW4gdGhlIGZvcm0gb2YgZmlsZTovLyAKLSAgICogQHJldHVybiBJRWRpdG9yUGFydCBvZiB0aGUgb3BlbmVkIFdTREwgZWRpdG9yCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElFZGl0b3JQYXJ0IG9wZW5GaWxlSW5FZGl0b3IoVVJJIGZpbGVVUkkpIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5IHsKLSAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBudWxsOwotICAgICAgSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotICAgICAgaWYgKHdvcmtiZW5jaCAhPSBudWxsKSB7Ci0gICAgICAgIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgICAgICBpZiAod2luZG93ICE9IG51bGwpIHsKLSAgICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gd2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgICBpZiAocGFnZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBJUGF0aCBwYXRoID0gbmV3IFBhdGgoZmlsZVVSSS5nZXRQYXRoKCkpOwotICAgICAgICAgICAgSUZpbGVTdG9yZSBmaWxlU3RvcmUgPSBFRlMuZ2V0TG9jYWxGaWxlU3lzdGVtKCkuZ2V0U3RvcmUocGF0aCk7Ci0gICAgICAgICAgICBpZiAoIWZpbGVTdG9yZS5mZXRjaEluZm8oKS5pc0RpcmVjdG9yeSgpICYmIGZpbGVTdG9yZS5mZXRjaEluZm8oKS5leGlzdHMoKSkgewotICAgICAgICAgICAgICBJREUub3BlbkVkaXRvck9uRmlsZVN0b3JlKHBhZ2UsIGZpbGVTdG9yZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZWRpdG9yUGFydDsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIHBpZSkKLSAgICB7Ci0gICAgICB0aHJvdyBwaWU7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9SZW5hbWVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9SZW5hbWVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVmZDRkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvUmVuYW1lQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7IAotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLkJpbmRpbmdSZW5hbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuTWVzc2FnZVJlbmFtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5Qb3J0VHlwZVJlbmFtZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vL2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgUmVuYW1lQWN0aW9uIC8vZXh0ZW5kcyBCYXNlTm9kZUFjdGlvbiBpbXBsZW1lbnRzIFJ1bm5hYmxlCi17Ci0gIHByb3RlY3RlZCBPYmplY3QgbW9kZWxPYmplY3Q7ICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdOYW1lOwotICBwcm90ZWN0ZWQgTm9kZSBub2RlOyAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gIHB1YmxpYyBSZW5hbWVBY3Rpb24oT2JqZWN0IG1vZGVsT2JqZWN0LCBTdHJpbmcgbmV3TmFtZSkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgdGhpcy5tb2RlbE9iamVjdCA9IG1vZGVsT2JqZWN0OwotICAgIHRoaXMubmV3TmFtZSA9IG5ld05hbWU7Ci0gICAgdGhpcy5ub2RlID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXROb2RlRm9yT2JqZWN0KG1vZGVsT2JqZWN0KTsKLSAgfSAgICAgIAotCi0gIC8qCi0gIHB1YmxpYyBOb2RlIGdldE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIG5vZGU7Ci0gIH0KLSAgKi8KLQotICAvKgotICBwdWJsaWMgU3RyaW5nIGdldFVuZG9EZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRXU0RMU3RyaW5nKCJfVUlfQUNUSU9OX1JFTkFNRSIpOyAgLy8kTk9OLU5MUy0xJAotICB9Ci0gICovCi0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE9wZXJhdGlvbikgCi0gICAgewotICAgICAgcmVuYW1lT3BlcmF0aW9uSGVscGVyKChPcGVyYXRpb24pbW9kZWxPYmplY3QpOwotICAgIH0gIAotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgSW5wdXQgfHwKLSAgICAgICAgICAgICBtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE91dHB1dCB8fAotICAgICAgICAgICAgIG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgRmF1bHQpCi0gICAgewotICAgICAgcmVuYW1lSU9GSGVscGVyKChXU0RMRWxlbWVudCltb2RlbE9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW5hbWVNb2RlbE9iamVjdEhlbHBlcihtb2RlbE9iamVjdCwgbmV3TmFtZSk7Ci0gICAgfQotICB9IAotCi0gIHByb3RlY3RlZCB2b2lkIHJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKE9iamVjdCBtb2RlbE9iamVjdCwgU3RyaW5nIHRoZU5ld05hbWUpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QobW9kZWxPYmplY3QpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgeyAKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgdGhlTmV3TmFtZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9ICAgIAotCi0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSkKLSAgICB7Ci0gICAgICBNZXNzYWdlUmVuYW1lciByZW5hbWVyID0gbmV3IE1lc3NhZ2VSZW5hbWVyKChNZXNzYWdlKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLSAgICAgIHJlbmFtZXIudmlzaXRCaW5kaW5ncygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotICAgIHsKLSAgICAgIFBvcnRUeXBlUmVuYW1lciByZW5hbWVyID0gbmV3IFBvcnRUeXBlUmVuYW1lcigoUG9ydFR5cGUpbW9kZWxPYmplY3QsIHRoZU5ld05hbWUpOwotICAgICAgcmVuYW1lci52aXNpdEJpbmRpbmdzKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZykKLSAgICB7Ci0gICAgICBCaW5kaW5nUmVuYW1lciByZW5hbWVyID0gbmV3IEJpbmRpbmdSZW5hbWVyKChCaW5kaW5nKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLSAgICAgIHJlbmFtZXIudmlzaXRTZXJ2aWNlcygpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbmFtZU9wZXJhdGlvbkhlbHBlcihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIob3BlcmF0aW9uLCBuZXdOYW1lKTsKLSAgfQotCi0KLSAgcHJvdGVjdGVkIHZvaWQgcmVuYW1lSU9GSGVscGVyKFdTRExFbGVtZW50IG9iamVjdCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvYmplY3QuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOyAKLSAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChkZWZpbml0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgTGlzdCBsaXN0ID0gbnVsbDsKLQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJbnB1dCkKLSAgICB7Ci0gICAgICBsaXN0ID0gdXRpbC5nZXRCaW5kaW5nSW5wdXRzKChJbnB1dClvYmplY3QpOwotICAgIH0KLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgewotICAgICAgbGlzdCA9IHV0aWwuZ2V0QmluZGluZ091dHB1dHMoKE91dHB1dClvYmplY3QpOwotICAgIH0KLSAgICBlbHNlIC8vIGZhdWx0Ci0gICAgewotICAgICAgbGlzdCA9IHV0aWwuZ2V0QmluZGluZ0ZhdWx0cygoRmF1bHQpb2JqZWN0KTsKLSAgICB9Ci0gICAgICAKLSAgICBpZiAobGlzdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGJpbmRpbmdPYmplY3QgPSBpLm5leHQoKTsKLSAgICAgICAgcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIoYmluZGluZ09iamVjdCwgbmV3TmFtZSk7Ci0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIH0KLQotICAgIHJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKG9iamVjdCwgbmV3TmFtZSk7Ci0gIH0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9TbWFydFJlbmFtZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1NtYXJ0UmVuYW1lQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMWVhYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1NtYXJ0UmVuYW1lQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qCi0gKiBUaGlzIGNsYXNzIHJlbmFtZXMgJ3JlbGF0ZWQnIFdTRExFbGVtZW50cy4gIFRoZSBzY2VuYXJpbyBpcyBhcyBmb2xsb3dzOgotICogVGhlIHVzZXIgcmVuYW1lcyBhIFdTRExFbGVtZW50IGluIHRoZSBlZGl0b3IsIHNheSBhIE1lc3NhZ2UuICBUaGlzIGNsYXNzCi0gKiB3aWxsIGZpbmQgdGhlICdyZWxhdGVkJyBlbGVtZW50cyB0byB0aGlzIE1lc3NhZ2UgYW5kIHJlbmFtZSB0aGVtIGFzIHdlbGwuCi0gKiBJdCB3aWxsIG9ubHkgcmVuYW1lIGEgJ3JlbGF0ZWQnIGVsZW1lbnQgaWYgdGhlIGVsZW1lbnQgbmFtZSAob3IgcGFydCBvZiBpdCkKLSAqIGlzIGdlbmVyYXRlZC4KLSAqIAotICogU2VlIE5hbWVVdGlsLmphdmEKLSAqLwotcHVibGljIGNsYXNzIFNtYXJ0UmVuYW1lQWN0aW9uIGV4dGVuZHMgQmFzZU5vZGVBY3Rpb24gaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JcHJvdGVjdGVkIE9iamVjdCBlbGVtZW50OwotCXByb3RlY3RlZCBTdHJpbmcgbmV3TmFtZTsKLQlwcml2YXRlIExpc3QgbWVzc2FnZVJlZmVyZW5jZXM7IC8vIFRoaXMgdmFyaWFibGUgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IG1ldGhvZCBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcygpCi0JcHJvdGVjdGVkIE5vZGUgbm9kZTsKLQlwcml2YXRlIGJvb2xlYW4gcmVuYW1lUGFyZW50ID0gdHJ1ZTsKLQlwcml2YXRlIFN0cmluZyBvbGROYW1lOwotCQotCXB1YmxpYyBTbWFydFJlbmFtZUFjdGlvbihPYmplY3QgZWxlbWVudCwgU3RyaW5nIG5ld05hbWUpIHsKLQkJc2V0VGV4dCgiU21hcnQgUmVuYW1lIEFjdGlvbiIpOyAvLyBEbyBub3QgdHJhbnNsYXRlIC8vJE5PTi1OTFMtMSQKLQkJdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQkgICAgdGhpcy5ub2RlID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXROb2RlRm9yT2JqZWN0KGVsZW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgTm9kZSBnZXROb2RlKCkgewotCSAgIHJldHVybiBub2RlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCSAgcmV0dXJuIE1lc3NhZ2VzLl9VSV9BQ1RJT05fUkVOQU1FOyAgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQkvKgotCSAqIGJvb2xlYW4gYXJndW1lbnQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHRvcCBsZXZlbCAocGFyZW50KSBvYmplY3Qgc2hvdWxkIGJlIHJlbmFtZWQKLQkgKiBpdHNlbGYuICBPdGhlcndpc2UsIG9ubHkgdGhlICJjaGlsZCIgb2JqZWN0cyB3aWxsIGJlIHJlbmFtZWQuCi0JICovCi0JcHVibGljIHZvaWQgcnVuKGJvb2xlYW4gcmVuYW1lUGFyZW50KSB7Ci0JCXRoaXMucmVuYW1lUGFyZW50ID0gcmVuYW1lUGFyZW50OwotCQlydW4oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCVJlbmFtZUFjdGlvbiByZW5hbWVyOwotCQkKLQkJYmVnaW5SZWNvcmRpbmcoKTsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBlbGVtZW50OwotCQkJb2xkTmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0KLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCQotCQkJLy8gUmVuYW1lIE9wZXJhdGlvbgotCQkJaWYgKHJlbmFtZVBhcmVudCkgewotCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKG9wZXJhdGlvbiwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQkJCQotCQkJLy8gUmVuYW1lIElucHV0Ci0JCQlJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLQkJCS8qCi0JCQlpZiAoaW5wdXQgIT0gbnVsbCAmJiBpc0lucHV0T3V0cHV0TmFtZUdlbmVyYXRlZChvbGROYW1lLCBpbnB1dC5nZXROYW1lKCkpKSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oaW5wdXQsIG5ld05hbWUpOwotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0JCQkqLwotCQkJCi0JCQkvLyBSZW5hbWUgT3V0cHV0Ci0JCQlPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLQkJCS8qCi0JCQlpZiAob3V0cHV0ICE9IG51bGwgJiYgaXNJbnB1dE91dHB1dE5hbWVHZW5lcmF0ZWQob2xkTmFtZSwgb3V0cHV0LmdldE5hbWUoKSkpIHsKLQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihvdXRwdXQsIG5ld05hbWUpOwotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0JCQkqLwotCQkJCi0JCQkKLQkJCS8vIAotCQkJV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBvcGVyYXRpb24uZ2V0Q29udGFpbmVyKCk7Ci0JCQlpZiAod3NkbEVsZW1lbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkgewotCQkJCVBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSB3c2RsRWxlbWVudDsKLQkJCQlNYXAgYmluZGluZ3MgPSBwb3J0VHlwZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0QmluZGluZ3MoKTsKLQkJCQlDb2xsZWN0aW9uIHZhbHVlcyA9IGJpbmRpbmdzLnZhbHVlcygpOwotCQkJCUl0ZXJhdG9yIGl0ZXJhdG9yID0gdmFsdWVzLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCQlCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgaXRlcmF0b3IubmV4dCgpOwotCQkJCQkKLQkJCQkJLy8gRmluZCBvbmx5IEJpbmRpbmdzIHdoaWNoIHJlZmVyZW5jZSB0aGUgbW9kaWZpZWQgUG9ydFR5cGUtLT5PcGVyYXRpb24KLQkJCQkJaWYgKGJpbmRpbmcuZ2V0UG9ydFR5cGUoKS5lcXVhbHMocG9ydFR5cGUpKSB7Ci0JCQkJCQlTdHJpbmcgb3BlcmF0aW9uSW5wdXROYW1lID0gbnVsbDsKLQkJCQkJCVN0cmluZyBvcGVyYXRpb25PdXRwdXROYW1lID0gbnVsbDsKLQkJCQkJCWlmKG9wZXJhdGlvbi5nZXRJbnB1dCgpICE9IG51bGwpIHsKLQkJCQkJCQlvcGVyYXRpb25JbnB1dE5hbWUgPSBvcGVyYXRpb24uZ2V0SW5wdXQoKS5nZXROYW1lKCk7Ci0JCQkJCQl9Ci0JCQkJCQlpZihvcGVyYXRpb24uZ2V0T3V0cHV0KCkgIT0gbnVsbCkgewotCQkJCQkJCW9wZXJhdGlvbk91dHB1dE5hbWUgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TmFtZSgpOwotCQkJCQkJfQotCQkJCQkJCi0JCQkJCQlCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uLmdldE5hbWUoKSwgb3BlcmF0aW9uSW5wdXROYW1lICwgb3BlcmF0aW9uT3V0cHV0TmFtZSk7Ci0JCQkJCQkvLyBUaGVyZSBtYXkgYmUgbm8gYmluZGluZyBjb250ZW50IGluIHdoaWNoIGNhc2UgYmluZGluZ09wZXJhdGlvbiB3b3VsZCBiZSBudWxsCi0JCQkJCQlpZiAoYmluZGluZ09wZXJhdGlvbiAhPSBudWxsKSB7Ci0JCQkJCQkJTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCQkJCQkJCUl0ZXJhdG9yIGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7Ci0JCQkJCQkJd2hpbGUgKGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCQkJCQlPYmplY3Qgb2JqZWN0ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IubmV4dCgpOwotCQkJCQkJCQlpZihvYmplY3QgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKSB7Ci0JCQkJCQkJCQlTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgb2JqZWN0OwotCQkJCQkJCQkJU3RyaW5nIHNvYXBBY3Rpb25VUkkgPSBzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKTsKLQotCQkJCQkJCQkJLy8gQ2hlY2sgaWYgdGhlIG9sZCBzb2FwQWN0aW9uVVJJIGlzIGEgZ2VuZXJhdGVkIFN0cmluZy4gIElmIGl0J3Mgbm90Ci0JCQkJCQkJCQkvLyBnZW5lcmF0ZWQsIGxlYXZlIGl0LiAgSXQgbWVhbnMgYSB1c2VyIGhhcyBlZGl0ZWQgYW5kIHdlIHNob3VsZG4ndCB0b3VjaCBpdC4KLQkJCQkJCQkJCVN0cmluZyB0bnMgPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJCQkJCQkJaWYgKGNvbXB1dGVTT0FQQWN0aW9uVVJJKHRucywgb2xkTmFtZSkuZXF1YWxzKHNvYXBBY3Rpb25VUkkpKSB7Ci0JCQkJCQkJCQkJLy8gQ2hvcCBvZmYgdGhlIE9wZXJhdGlvbiBuYW1lIGF0IHRoZSBlbmQgYW5kIGFwcGVuZCB0aGUgbmV3IG5hbWUuCi0JCQkJCQkJCQkJU3RyaW5nIG5ld1NPQVBBY3Rpb25VUkkgPSBzb2FwQWN0aW9uVVJJLnN1YnN0cmluZygwLCBzb2FwQWN0aW9uVVJJLmxlbmd0aCgpIC0gb2xkTmFtZS5sZW5ndGgoKSk7Ci0JCQkJCQkJCQkJbmV3U09BUEFjdGlvblVSSSA9IG5ld1NPQVBBY3Rpb25VUkkgKyBuZXdOYW1lOwotCQkJCQkJCQkJCXNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSShuZXdTT0FQQWN0aW9uVVJJKTsKLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQkJCi0JCQkvLyBSZW5hbWUgTWVzc2FnZXMgYW5kIFBhcnRzCi0JCQlNZXNzYWdlIG1zZzsKLQotCQkJLy8gSW5wdXQKLQkJCWlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0LmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCW1zZyA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0JCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQotCQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQkKLQkJCQkJaWYgKGlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQob2xkTWVzc2FnZU5hbWUsIG9sZE5hbWUsICJSZXF1ZXN0IikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsJCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCS8vIE91dHB1dAotCQkJaWYgKG91dHB1dCAhPSBudWxsICYmIG91dHB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCW1zZyA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCi0JCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCQotCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgIlJlc3BvbnNlIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsKLQkJCQkJfQotCQkJCQkKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCS8vIEZhdWx0cwotCQkJTGlzdCBmYXVsdHMgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpOwotCQkJaWYgKGZhdWx0cyAhPSBudWxsKSB7Ci0JCQkJSXRlcmF0b3IgaXQgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBpdC5uZXh0KCk7Ci0JCQkJCW1zZyA9IGZhdWx0LmdldEVNZXNzYWdlKCk7Ci0JCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0KLQkJCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQkJCi0JCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgZmF1bHQuZ2V0TmFtZSgpKSkgewotCQkJCQkJCXJlbmFtZU1lc3NhZ2VIZWxwZXIobXNnLCBjb21wdXRlTmV3TWVzc2FnZU5hbWUobXNnLCBvbGROYW1lLCBuZXdOYW1lKSk7Ci0JCQkJCQkJCi0JCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCQlyZW5hbWVQYXJ0c0hlbHBlcihtc2cuZ2V0RVBhcnRzKCksIG9sZE1lc3NhZ2VOYW1lLCBtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgdHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElucHV0KSB7Ci0JCQlJbnB1dCBpbnB1dCA9IChJbnB1dCkgZWxlbWVudDsKLQkJCW9sZE5hbWUgPSBpbnB1dC5nZXROYW1lKCk7Ci0JCQlpZiAob2xkTmFtZSA9PSBudWxsKSB7Ci0JCQkJb2xkTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQkKLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCQotCQkJaWYgKHJlbmFtZVBhcmVudCkgewotCQkJCWlucHV0LnNldE5hbWUobmV3TmFtZSk7Ci0JCQl9Ci0KLS8vCQkJIFJlbmFtZSBNZXNzYWdlcyBhbmQgUGFydHMKLQkJCU1lc3NhZ2UgbXNnOwotCQkJCi0JCQkvLyBJbnB1dAotCQkJaWYgKGlucHV0ICE9IG51bGwgJiYgaW5wdXQuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQkJbXNnID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLQkJCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCQotCQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQkKLQkJCQkJaWYgKGlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQob2xkTWVzc2FnZU5hbWUsIG9sZE5hbWUsICJSZXF1ZXN0IikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsJCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE91dHB1dCkgewotCQkJT3V0cHV0IG91dHB1dCA9IChPdXRwdXQpIGVsZW1lbnQ7Ci0JCQlvbGROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLQkJCWlmIChvbGROYW1lID09IG51bGwpIHsKLQkJCQlvbGROYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJb3V0cHV0LnNldE5hbWUobmV3TmFtZSk7Ci0JCQl9Ci0KLS8vCQkJIFJlbmFtZSBNZXNzYWdlcyBhbmQgUGFydHMKLQkJCU1lc3NhZ2UgbXNnOwotCQkJCi0JCQkvLyBPdXRwdXQKLQkJCWlmIChvdXRwdXQgIT0gbnVsbCAmJiBvdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCQltc2cgPSBvdXRwdXQuZ2V0RU1lc3NhZ2UoKTsKLQkJCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgIlJlc3BvbnNlIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRmF1bHQpIHsKLQkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBlbGVtZW50OwotCQkJTWVzc2FnZSBtc2cgPSBmYXVsdC5nZXRFTWVzc2FnZSgpOwotCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCW9sZE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0JCQkKLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCQotCQkJLy8gUmVuYW1lIHRoZSBGYXVsdAotCQkJaWYgKHJlbmFtZVBhcmVudCkgewotCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKGZhdWx0LCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCi0JCQkvLyBSZW5hbWUgdGhlIE1lc3NhZ2UgYW5kIFBhcnRzCi0JCQlpZiAobXNnICE9IG51bGwpIHsKLQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQotCQkJCU9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIGZhdWx0LmVDb250YWluZXIoKTsKLQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb3AuZ2V0TmFtZSgpLCBvbGROYW1lKSkgewotCQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSkpOwotCQkJCQkKLQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJcmVuYW1lRmF1bHRQYXJ0cyhtc2cuZ2V0RVBhcnRzKCksIG9wLmdldE5hbWUoKSwgb2xkTmFtZSwgbmV3TmFtZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBNZXNzYWdlKSB7Ci0JCQlNZXNzYWdlIG1zZyA9IChNZXNzYWdlKSBlbGVtZW50OwotCQkJb2xkTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkKLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQotCQkJU3RyaW5nIG5ld01lc3NhZ2VOYW1lID0gY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSk7Ci0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIG5ld01lc3NhZ2VOYW1lKTsKLQkJCX0KLQkJCQkJCi0JCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbmV3TWVzc2FnZU5hbWUsIHRydWUpOwotLy8JCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHRydWUpOwotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlQYXJ0IHBhcnQgPSAoUGFydCkgZWxlbWVudDsKLQkJCVN0cmluZyBvbGRQYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCQkJCi0JCQlpZiAob2xkUGFydE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oZWxlbWVudCwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQkJCQotLy8JCQlSZW5hbWUgRWxlbWVudHMKLQkJCXJlbmFtZVhTREVsZW1lbnQocGFydCwgb2xkUGFydE5hbWUsIG5ld05hbWUpOwotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQb3J0KSB7Ci0JCQlQb3J0IHBvcnQgPSAoUG9ydCkgZWxlbWVudDsKLQkJCVN0cmluZyBvbGRQb3J0TmFtZSA9IHBvcnQuZ2V0TmFtZSgpOwotCQkJCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oZWxlbWVudCwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQotLy8JCQlSZW5hbWUgQmluZGluZwotCQkJQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOwotCQkJaWYgKGJpbmRpbmcgIT0gbnVsbCAmJiBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKG9sZFBvcnROYW1lKSkgewotCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKGJpbmRpbmcsIG5ld05hbWUpOwkKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCQl9Ci0JCWVuZFJlY29yZGluZygpOwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBjb21wdXRlU09BUEFjdGlvblVSSShTdHJpbmcgdG5zLCBTdHJpbmcgb3BlcmF0aW9uTmFtZSkgewotCQkvLyBXZSBuZWVkIG1vcmUgaW52ZXN0aWdhdGlvbiBoZXJlLiAgV2Ugc2hvdWxkIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIFNPQVBBY3Rpb25VUkkKLQkJLy8gaXMgZ2VuZXJhdGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gIE9uZSBpc3N1ZSBJIHNlZSBoZXJlIGlzIHRoZSB0cmFpbGluZyBzbGFzaCBvZiB0aGUKLQkJLy8gdGFyZ2V0bmFtZXNwYWNlLiAgTW9yZSBzcGVjaWZpY2FsbHksIHRoZSBsYWNrIG9mIG9uZS4gIElmIHRoZXJlIGlzIG5vIHRyYWlsaW5nIHNsYXNoLAotCQkvLyBkb2VzIGl0IGFkZCBvbmU/Ci0JCXJldHVybiB0bnMgKyBvcGVyYXRpb25OYW1lOwotCX0KLQkvLyBib29sZWFuIGlzSW5wdXRPdXRwdXQgc2hvdWxkIGJlIHNldCB0byB0cnVlIGlmIHRoZSBwYXJ0IGlzIGFuIElucHV0IG9yIE91dHB1dC4KLQkvLyBTZXQgZmFsc2UgaWYgdGhlIHBhcnQgaXMgYSBGYXVsdC4KLQlwcml2YXRlIHZvaWQgcmVuYW1lUGFydHNIZWxwZXIoTGlzdCBwYXJ0c0xpc3QsIFN0cmluZyBvbGRTdWJTdHJpbmcsIFN0cmluZyBuZXdTdWJTdHJpbmcsIGJvb2xlYW4gaXNJbnB1dE91dHB1dCkgewotCQlSZW5hbWVBY3Rpb24gcmVuYW1lcjsKLQkJCi0JCWlmIChwYXJ0c0xpc3QgIT0gbnVsbCkgewotCQkJSXRlcmF0b3IgcEl0ID0gcGFydHNMaXN0Lml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAocEl0Lmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwSXQubmV4dCgpOwotCQkJCVN0cmluZyBvbGRQYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCQkJCQotCQkJCWlmIChpc1BhcnROYW1lR2VuZXJhdGVkKG9sZFBhcnROYW1lLCBvbGRTdWJTdHJpbmcpKSB7Ci0JCQkJCVN0cmluZyBuZXdQYXJ0TmFtZTsKLQkJCQkJaWYgKGlzSW5wdXRPdXRwdXQpIHsKLQkJCQkJCW5ld1BhcnROYW1lID0gY29tcHV0ZU5ld1BhcnROYW1lKHBhcnQsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCW5ld1BhcnROYW1lID0gY29tcHV0ZU5ld0ZhdWx0UGFydE5hbWUocGFydCwgb2xkU3ViU3RyaW5nLCBuZXdTdWJTdHJpbmcpOwotCQkJCQl9Ci0JCQkJCQotCQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihwYXJ0LCBuZXdQYXJ0TmFtZSk7Ci0JCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQkJCQotCQkJCQkvLyBSZW5hbWUgRWxlbWVudHMKLS8vCQkJCQlyZW5hbWVYU0RFbGVtZW50KHBhcnQsIG9sZFBhcnROYW1lLCBuZXdQYXJ0TmFtZSk7Ci0JCQkJfQotCQkJCQotCQkJCS8vIFJlbmFtZSBFbGVtZW50cwotCQkJCXJlbmFtZVhTREVsZW1lbnQocGFydCwgb2xkU3ViU3RyaW5nLCBuZXdTdWJTdHJpbmcpOwotCQkJfQotCQl9Ci0JfQotCQotCS8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBQYXJ0IG5hbWUgd2hlbiB0aGUgRmF1bHQgbmFtZSBpcyBjaGFuZ2VkLiAgT25seQotCS8vIGNoYW5nZSB0aGUgUGFydCBuYW1lIGlmIHRoZSBwYXJ0IG5hbWUgaXMgYSBnZW5lcmF0ZWQgbmFtZS4KLQkvLyBDb21wYXJlIHRvIHJlbmFtZVBhcnRzSGVscGVyKCkuICBUaGUgcmVuYW1lUGFydHNIZWxwZXIoKSBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBGYXVsdAotCS8vIGhhcyBOT1QgYmVlbiByZW5hbWVkLCByYXRoZXIsIGl0IGlzIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIG5hbWluZyAoZXguIE9wZXJhdGlvbgotCS8vIHJlbmFtaW5nKS4gIEl0IHdpbGwgdXBkYXQgSW5wdXQvT3V0cHV0LCBBTkQgRmF1bHQgUGFydHMuCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZUZhdWx0UGFydHMoTGlzdCBwYXJ0c0xpc3QsIFN0cmluZyBiYXNlTmFtZSwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZykgewotCQlSZW5hbWVBY3Rpb24gcmVuYW1lcjsKLQkJCi0JCWlmIChwYXJ0c0xpc3QgIT0gbnVsbCkgewotCQkJSXRlcmF0b3IgcEl0ID0gcGFydHNMaXN0Lml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAocEl0Lmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwSXQubmV4dCgpOwotCQkJCVN0cmluZyBvbGRQYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCQkJCQotCQkJCWlmIChpc1BhcnROYW1lR2VuZXJhdGVkKG9sZFBhcnROYW1lLCBiYXNlTmFtZSwgb2xkU3ViU3RyaW5nKSkgewotCQkJCQlTdHJpbmcgbmV3UGFydE5hbWU7Ci0JCQkJCW5ld1BhcnROYW1lID0gY29tcHV0ZU5ld0ZhdWx0UGFydE5hbWUocGFydCwgb2xkU3ViU3RyaW5nLCBuZXdTdWJTdHJpbmcpOwotCQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihwYXJ0LCBuZXdQYXJ0TmFtZSk7Ci0JCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQkJCQotCQkJCQkvLyBSZW5hbWUgRWxlbWVudHMKLQkJCQkJcmVuYW1lWFNERWxlbWVudChwYXJ0LCBvbGRQYXJ0TmFtZSwgbmV3UGFydE5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBjb21wdXRlTmV3TWVzc2FnZU5hbWUoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nKSB7Ci0JCVN0cmluZyBzdHJpbmcgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCXJldHVybiByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoc3RyaW5nLCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZywgMCk7CQkKLQl9Ci0JCi0vLwlwcml2YXRlIFN0cmluZyBjb21wdXRlTmV3RmF1bHRNZXNzYWdlTmFtZShNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBvbGRTdWJTdHJpbmcsIFN0cmluZyBuZXdTdWJTdHJpbmcpIHsKLS8vCQlTdHJpbmcgc3RyaW5nID0gbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotLy8JCXJldHVybiByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoc3RyaW5nLCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZywgMSk7CQkKLS8vCX0KLQkKLQkvLyBNZXRob2QgZm9yIElucHV0LCBPdXRwdXQsIGFuZCBGYXVsdCBQYXJ0cwotCS8vIFNlZSBjb21wdXRlTmV3RmF1bHRQYXJ0TmFtZSgpIGZvciBjb21wYXJpc29uCi0JcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZU5ld1BhcnROYW1lKFBhcnQgcGFydCwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZykgewotCQlTdHJpbmcgc3RyaW5nID0gcGFydC5nZXROYW1lKCk7Ci0JCXJldHVybiByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoc3RyaW5nLCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZywgMCk7CQkKLQl9Ci0JCi0JLy8gTWV0aG9kIGZvciBGYXVsdCBQYXJ0cwotCS8vIFRoaXMgbWV0aG9kIGJlaGF2ZXMgaW4gdGhlIGV4YWN0IHNhbWUgd2F5IGFzIGNvbXB1dGVOZXdQYXJ0TmFtZSgpIGV4Y2VwdCBpdCBzdGFydHMgc2VhcmNoaW5nIGZvciBhIG1hdGNoCi0JLy8gYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3Rlci4gIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciB1c2VycyB3aG8gd2lzaCB0byByZW5hbWUgYSBnZW5lcmF0ZWQgKEZhdWx0KSBwYXJ0Ci0JLy8gd2hlcmUgdGhlIEZhdWx0IG5hbWUgaGFzIGNoYW5nZWQuICBXZSBzdGFydCBvdXIgc2VhcmNoIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYmVjYXVzZSB0aGUgZ2VuZXJhdGVkIG5hbWUKLQkvLyBvZiB0aGUgcGFydCBpcyBidWlsdCBieSBhcHBlbmRpbmcgdGhlIEZhdWx0IG5hbWUgYWZ0ZXIgdGhlIE9wZXJhdGlvbiBuYW1lLgotCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVOZXdGYXVsdFBhcnROYW1lKFBhcnQgcGFydCwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZykgewotCQlTdHJpbmcgc3RyaW5nID0gcGFydC5nZXROYW1lKCk7Ci0JCXJldHVybiByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoc3RyaW5nLCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZywgMSk7CQkKLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgcmVwbGFjZVNlY3Rpb25XaXRoU3ViU3RyaW5nKFN0cmluZyBmdWxsU3RyaW5nLCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nLCBpbnQgc3RhcnRTZWFyY2hJbmRleCkgewotCQlTdHJpbmdCdWZmZXIgZnVsbFNCID0gbmV3IFN0cmluZ0J1ZmZlcihmdWxsU3RyaW5nKTsKLQkJaW50IGluZGV4ID0gZnVsbFNCLmluZGV4T2Yob2xkU3ViU3RyaW5nLCBzdGFydFNlYXJjaEluZGV4KTsKLQkJaWYgKGluZGV4ID49IDApIHsKLQkJCXJldHVybiBmdWxsU0IucmVwbGFjZShpbmRleCwgaW5kZXggKyBvbGRTdWJTdHJpbmcubGVuZ3RoKCksIG5ld1N1YlN0cmluZykudG9TdHJpbmcoKTsKLQkJfQotCQkKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29tbW9uTmFtZUdlbmVyYXRvckNoZWNrKFN0cmluZyB0YXJnZXROYW1lLCBTdHJpbmcgYmFzZU5hbWUsIFN0cmluZyBhcHBlbmROYW1lKSB7Ci0JCS8vIEZpcnN0IGNyaXRlcmlhIGlzIHRhcmdldE5hbWUgbXVzdCBzdGFydCB3aXRoIHRoZSBiYXNlTmFtZQotCQlpZiAoIXRhcmdldE5hbWUuc3RhcnRzV2l0aChiYXNlTmFtZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCQkKLQkJaWYgKGFwcGVuZE5hbWUudHJpbSgpLmxlbmd0aCgpID4gMCkgewotCQkJLy8gU2Vjb25kIGNyaXRlcmlhLiAgVGhlIGFwcGVuZGVkIG5hbWUgbXVzdCBiZSBpbiB0aGUgdGFyZ2V0TmFtZSBhbmQgYmVnaW4gcmlnaHQKLQkJCS8vIGFmdGVyIHRoZSBiYXNlTmFtZSBsb2NhdGlvbgotCQkJaWYgKCF0YXJnZXROYW1lLnN0YXJ0c1dpdGgoYXBwZW5kTmFtZSwgYmFzZU5hbWUubGVuZ3RoKCkpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkJCi0JCS8vIFRoaXJkIGNyaXRlcmlhIChpZiBuZWNlc3NhcnkpLiAgSWYgYmFzZU5hbWUgKyBhcHBlbmROYW1lIGlzIHNob3J0ZXIgdGhhbiB0YXJnZXROYW1lLAotCQkvLyB0aGVuIHRoZXJlIG11c3QgYmUgJ2V4dHJhJyBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgdGFyZ2V0TmFtZS4gIFRoZXNlIGNoYXJhY3RlcnMgbXVzdAotCQkvLyBtYWtlIHVwIGFuIGludGVnZXIuICBJZiBub3QsIGl0IGlzIG5vdCBhIGdlbmVyYXRlZCBzdHJpbmcuCi0JCWludCBzdWJMZW5ndGggPSBiYXNlTmFtZS5sZW5ndGgoKSArIGFwcGVuZE5hbWUubGVuZ3RoKCk7Ci0JCWlmICh0YXJnZXROYW1lLmxlbmd0aCgpID4gc3ViTGVuZ3RoKSB7Ci0JCQkvLyBXZSBoYXZlICdleHRyYScgY2hhcmFjdGVycwotCQkJU3RyaW5nIGV4dHJhcyA9IHRhcmdldE5hbWUuc3Vic3RyaW5nKHN1Ykxlbmd0aCk7Ci0JCQkKLQkJCWlmKCFpc0RpZ2l0KGV4dHJhcykpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzT3BlcmF0aW9uTmFtZUdlbmVyYXRlZChTdHJpbmcgb3BOYW1lLCBTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gb3BOYW1lLmVxdWFscyhuYW1lKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQoU3RyaW5nIG1zZ05hbWUsIFN0cmluZyBiYXNlTmFtZSwgU3RyaW5nIGFwcGVuZE5hbWUpIHsKLQkJcmV0dXJuIGNvbW1vbk5hbWVHZW5lcmF0b3JDaGVjayhtc2dOYW1lLCBiYXNlTmFtZSwgYXBwZW5kTmFtZSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0lucHV0T3V0cHV0TmFtZUdlbmVyYXRlZChTdHJpbmcgaW5PdXROYW1lLCBTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gaW5PdXROYW1lLmVxdWFscyhuYW1lKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRmF1bHROYW1lR2VuZXJhdGVkKFN0cmluZyBmYXVsdE5hbWUsIFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiBmYXVsdE5hbWUuZXF1YWxzKG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQYXJ0TmFtZUdlbmVyYXRlZChTdHJpbmcgcGFydE5hbWUsIFN0cmluZyBiYXNlTmFtZSkgewotCQlyZXR1cm4gY29tbW9uTmFtZUdlbmVyYXRvckNoZWNrKHBhcnROYW1lLCBiYXNlTmFtZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpc1BhcnROYW1lR2VuZXJhdGVkKFN0cmluZyBwYXJ0TmFtZSwgU3RyaW5nIGJhc2VOYW1lLCBTdHJpbmcgYXBwZW5kTmFtZSkgewotCQlyZXR1cm4gY29tbW9uTmFtZUdlbmVyYXRvckNoZWNrKHBhcnROYW1lLCBiYXNlTmFtZSwgYXBwZW5kTmFtZSk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEaWdpdChTdHJpbmcgc3RyaW5nKSB7Ci0JCWJvb2xlYW4gclZhbHVlID0gdHJ1ZTsKLQkJY2hhcltdIGNoYXJzID0gc3RyaW5nLnRvQ2hhckFycmF5KCk7Ci0JCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGFycy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCWlmICghQ2hhcmFjdGVyLmlzRGlnaXQoY2hhcnNbaW5kZXhdKSkgewotCQkJCXJWYWx1ZSA9IGZhbHNlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gclZhbHVlOwotCX0KLQkKLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhaWQgaW4gcmVuYW1pbmcgYSBtZXNzYWdlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZU1lc3NhZ2VIZWxwZXIoTWVzc2FnZSBtc2csIFN0cmluZyBuZXdOYW1lKSB7Ci0JCUxpc3QgbWVzc2FnZVJlZnMgPSBnZXRSZWZlcmVuY2luZ01lc3NhZ2VSZWZlcmVuY2VzKG1zZywgZ2V0QWxsTWVzc2FnZVJlZmVyZW5jZXMoKSk7Ci0JCQotCQlSZW5hbWVBY3Rpb24gcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24obXNnLCBuZXdOYW1lKTsKLQkJcmVuYW1lci5ydW4oKTsKLQkJCi0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZVJlZnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKE1lc3NhZ2VSZWZlcmVuY2UpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCW1lc3NhZ2VSZWZlcmVuY2Uuc2V0RU1lc3NhZ2UobXNnKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIExpc3QgZ2V0UmVmZXJlbmNpbmdNZXNzYWdlUmVmZXJlbmNlcyhNZXNzYWdlIG1zZywgTGlzdCBtZXNzYWdlUmVmcykgewotCQlWZWN0b3IgcmVmZXJlbmNlc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQkJUU5hbWUgbWVzc2FnZVFOYW1lID0gbXNnLmdldFFOYW1lKCk7Ci0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZVJlZnMuaXRlcmF0b3IoKTsKLQkJCi0JCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSA9IChNZXNzYWdlUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAobWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpICE9IG51bGwgJiYgbWVzc2FnZVFOYW1lLmVxdWFscyhtZXNzYWdlUmVmZXJlbmNlLmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKSkpIHsKLQkJCQlyZWZlcmVuY2VzVmVjdG9yLmFkZEVsZW1lbnQobWVzc2FnZVJlZmVyZW5jZSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZWZlcmVuY2VzVmVjdG9yOwotCX0KLQkKLQlwcml2YXRlIExpc3QgZ2V0QWxsTWVzc2FnZVJlZmVyZW5jZXMoKSB7Ci0JCWlmIChtZXNzYWdlUmVmZXJlbmNlcyA9PSBudWxsKSB7Ci0JCQltZXNzYWdlUmVmZXJlbmNlcyA9IG5ldyBWZWN0b3IoKTsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9ICgoV1NETEVsZW1lbnQpIGVsZW1lbnQpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkJCUxpc3QgcG9ydFR5cGVzID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCk7Ci0JCQotCQkJaWYgKHBvcnRUeXBlcyAhPSBudWxsKSB7Ci0JCQkJSXRlcmF0b3IgcG9ydFR5cGVJdGVyYXRvciA9IHBvcnRUeXBlcy5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChwb3J0VHlwZUl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCQlMaXN0IG9wZXJhdGlvbnNMaXN0ID0gKChQb3J0VHlwZSkgcG9ydFR5cGVJdGVyYXRvci5uZXh0KCkpLmdldEVPcGVyYXRpb25zKCk7Ci0JCQkJCQotCQkJCQlpZiAob3BlcmF0aW9uc0xpc3QgIT0gbnVsbCkgewotCQkJCQkJSXRlcmF0b3Igb3BlcmF0aW9uc0l0ZXJhdG9yID0gb3BlcmF0aW9uc0xpc3QuaXRlcmF0b3IoKTsKLQkJCQkJCXdoaWxlIChvcGVyYXRpb25zSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJCQkJbWVzc2FnZVJlZmVyZW5jZXMuYWRkQWxsKGdldEFsbE1lc3NhZ2VSZWZlcmVuY2VzKChPcGVyYXRpb24pIG9wZXJhdGlvbnNJdGVyYXRvci5uZXh0KCkpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG1lc3NhZ2VSZWZlcmVuY2VzOwotCX0KLQkKLQlwcml2YXRlIFZlY3RvciBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcyhPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0JCVZlY3RvciBpb2ZzID0gbmV3IFZlY3RvcigpOwotCQlJdGVyYXRvciBpdCA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJaW9mcy5hZGRFbGVtZW50KGl0Lm5leHQoKSk7Ci0JCX0KLQkJCi0JCWlmIChpb2ZzID09IG51bGwpCi0JCQlpb2ZzID0gbmV3IFZlY3RvcigpOwotCQkKLQkJaWYgKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKQotCQkJaW9mcy5hZGRFbGVtZW50KG9wZXJhdGlvbi5nZXRFSW5wdXQoKSk7Ci0JCQotCQlpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKQotCQkJaW9mcy5hZGRFbGVtZW50KG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkpOwotCQkKLQkJcmV0dXJuIGlvZnM7Ci0JfQotCQotCXByaXZhdGUgdm9pZCByZW5hbWVYU0RFbGVtZW50KFBhcnQgcGFydCwgU3RyaW5nIG9sZFhTRE5hbWUsIFN0cmluZyBuZXdYU0ROYW1lKSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbGFyYXRpb24gPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQlpZiAoZWxlbWVudERlY2xhcmF0aW9uICE9IG51bGwgJiYgZWxlbWVudERlY2xhcmF0aW9uLmdldE5hbWUoKS5zdGFydHNXaXRoKG9sZFhTRE5hbWUpKSB7Ci0JCQlyZW5hbWVFbGVtZW50RGVjbGFyYXRpb25IZWxwZXIoZWxlbWVudERlY2xhcmF0aW9uLCBvbGRYU0ROYW1lLCBuZXdYU0ROYW1lKTsKLQkJCQotCQkJLy8gSGVyZSB3ZSByZW5hbWUgdGhlIGVsZW1lbnQgcmVmZXJlbmNlLgotCQkJLy8KLQkJCVFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKHBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgbmV3WFNETmFtZSk7Ci0JCQlwYXJ0LnNldEVsZW1lbnROYW1lKHFuYW1lKTsJCQkKLQkJfQotCQllbHNlIGlmIChlbGVtZW50RGVjbGFyYXRpb24gIT0gbnVsbCAmJiBlbGVtZW50IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0JCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgZWxlbWVudDsKLQkJCWlmIChBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKG9wZXJhdGlvbiwgdHJ1ZSkgPT0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQkJaWYgKGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkuZXF1YWxzKG9sZE5hbWUpKSB7Ci0JCQkJCXJlbmFtZUVsZW1lbnREZWNsYXJhdGlvbkhlbHBlcihlbGVtZW50RGVjbGFyYXRpb24sIG9sZE5hbWUsIG5ld05hbWUpOwotCQkJCQkKLQkJCQkJLy8gSGVyZSB3ZSByZW5hbWUgdGhlIGVsZW1lbnQgcmVmZXJlbmNlLgotCQkJCQkvLwotCQkJCQlRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIG5ld05hbWUpOwotCQkJCQlwYXJ0LnNldEVsZW1lbnROYW1lKHFuYW1lKTsJCi0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCByZW5hbWVFbGVtZW50RGVjbGFyYXRpb25IZWxwZXIoWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiwgU3RyaW5nIG9sZFhTRE5hbWUsIFN0cmluZyBuZXdYU0ROYW1lKSB7Ci0JCWlmIChlbGVtZW50RGVjbGFyYXRpb24gIT0gbnVsbCAmJiBlbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpLnN0YXJ0c1dpdGgob2xkWFNETmFtZSkpIHsKLQkJCVN0cmluZyBuZXdFbGVtZW50TmFtZSA9IHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhlbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpLCBvbGRYU0ROYW1lLCBuZXdYU0ROYW1lLCAwKTsKLQkJCWVsZW1lbnREZWNsYXJhdGlvbi5zZXROYW1lKG5ld0VsZW1lbnROYW1lKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9XU0RMQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFhMmU0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVyczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5zcGVjaWFsaXplZC5XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnNwZWNpYWxpemVkLlcxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWRhcHRlcmZhY3RvcnkuZXh0ZW5zaW9uLkFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgV1NETEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIHN0YXRpYyBXU0RMQWRhcHRlckZhY3RvcnkgaW5zdGFuY2U7Ci0gIAotICBwdWJsaWMgc3RhdGljIFdTRExBZGFwdGVyRmFjdG9yeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBXU0RMQWRhcHRlckZhY3RvcnkoKTsKLSAgICB9ICAKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KQotICB7Ci0JICBBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOwotCi0JICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRGVmaW5pdGlvbikgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExRGVzY3JpcHRpb24oKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNlcnZpY2UpIHsKLQkJICBhZGFwdGVyID0gbmV3IFcxMVNlcnZpY2UoKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmcpIHsKLQkJICBhZGFwdGVyID0gbmV3IFcxMUJpbmRpbmcoKTsKLQkgIH0KLSAgICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pIHsKLSAgICAgICAgICBhZGFwdGVyID0gbmV3IFcxMUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCB8fAotICAgICAgICAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCB8fAotICAgICAgICAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgICAgeyAgCi0JCSAgYWRhcHRlciA9IG5ldyBXMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSgpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgUG9ydCkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExRW5kUG9pbnQoKTsKLQkgIH0KLSAgICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0gICAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFJbnRlcmZhY2UoKTsKLSAgICAgIH0gIAotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFPcGVyYXRpb24oKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE1lc3NhZ2VSZWZlcmVuY2UpCi0JICB7Ci0JICAgIGludCBraW5kID0gLTE7Ci0JICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBJbnB1dCkKLQkgICAgewotCSAgICAgIGtpbmQgPSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUOwotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE91dHB1dCkKLQkgICAgewotCSAgICAgIGtpbmQgPSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVDsKLQkgICAgfQotCSAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGYXVsdCkKLQkgICAgewotCSAgICAgIGtpbmQgPSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0ZBVUxUOwotCSAgICB9Ci0JICAgIGFkYXB0ZXIgPSBuZXcgVzExTWVzc2FnZVJlZmVyZW5jZShraW5kKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEltcG9ydCkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExSW1wb3J0KCk7Ci0JICB9Ci0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBYU0RTY2hlbWEpIHsKLQkJICBhZGFwdGVyID0gbmV3IFcxMVR5cGUoKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE1lc3NhZ2UpIHsKLQkJICBhZGFwdGVyID0gbmV3IFcxMU1lc3NhZ2UoKTsKLQkgIH0KLSAgICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFBhcnQpCi0gICAgICB7Ci0gICAgCSAgYWRhcHRlciA9IG5ldyBXMTFQYXJhbWV0ZXJGb3JQYXJ0KCk7IAotICAgICAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICAgIGFkYXB0ZXIgPSBuZXcgVzExUGFyYW1ldGVyRm9yRWxlbWVudCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgewotICAgICAgICAgIGFkYXB0ZXIgPSBuZXcgVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlKCk7Ci0gICAgICB9ICAgICAgICAKLSAgICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE1lc3NhZ2UgfHwgCi0gICAgICAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkKLSAgICAgIHsKLSAgICAgICAgLy8gbm90IHdlIG9ubHkgbmVlZCB0aGlzIGFkYXB0ZXIgdG8gc2VydmUgYXMgYW4gJ290aGVyVGhpbmdzVG9MaXN0ZW5UbycgYWRhcHRlcgotICAgICAgICAvLyBmb3IgdXNlIGJ5IHRoZSBXMTFNZXNzYWdlUmVmZXJlbmNlIHdoZW4gY29tcHV0aW5nIGEgcGFyYW1ldGVyIGxpc3QKLSAgICAgICAgYWRhcHRlciA9IG5ldyBXU0RMQmFzZUFkYXB0ZXIoKTsKLSAgICAgIH0gIAotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU09BUEFkZHJlc3MgfHwKLSAgICAgICAgICAgICAgIHRhcmdldCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotICAgICAgewotICAgICAgICAvLyBUT0RPLi4gd2UgbmVlZCB0byBlbmFibGUgdGhlIGZhY3RvcnkgdG8gZGVsZWdhdGUgdG8gZXh0ZW5zaW9uIGxhbmd1YWdlIGFkYXB0ZXIgZmFjdG9yaWVzCi0gICAgICAgIC8vIHRoZXJlIHNob3VsZCBiZSBubyByZWZlcmVuY2VzIHRvIFNPQVAgb3IgSFRUUCBzdHVmZiBmcm9tIHdpdGhpbiB0aGlzIGNsYXNzCi0gICAgICAgIC8vCi0gICAgICAgIGFkYXB0ZXIgPSBuZXcgVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOyAgICAgICAgCi0gICAgICB9ICAgICAgICAgCi0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgIHsKLSAgICAJICBBZGFwdGVyIGV4dGVuc2liaWxpdHlBZGFwdGVyID0gbnVsbDsKLSAgICAJICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSB0YXJnZXQ7Ci0gICAgCSAgU3RyaW5nIG5hbWVzcGFjZSA9IGV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAJICBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbiBleHRlbnNpb24gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSgpLmdldEV4dGVuc2lvbkZvck5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgIAkgIGlmIChleHRlbnNpb24gIT0gbnVsbCkgewotICAgIAkJICBBZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gZXh0ZW5zaW9uLmdldEFkYXB0ZXJGYWN0b3J5KCk7Ci0gICAgCQkgIGV4dGVuc2liaWxpdHlBZGFwdGVyID0gZmFjdG9yeS5hZGFwdCh0YXJnZXQsIEFkYXB0ZXIuY2xhc3MpOwotICAgIAkgIH0KLSAgICAJICAKLSAgICAJICBpZiAoZXh0ZW5zaWJpbGl0eUFkYXB0ZXIgPT0gbnVsbCkgewotICAgIAkJICBhZGFwdGVyID0gbmV3IFcxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgIAkgIH0KLSAgICAJICBlbHNlIHsKLSAgICAJCSAgYWRhcHRlciA9IGV4dGVuc2liaWxpdHlBZGFwdGVyOwotICAgIAkgIH0KLSAgICAgIH0gIAotCSAgaWYgKGFkYXB0ZXIgPT0gbnVsbCkKLQkgIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJOTyBBREFQVEVSIENSRUFURUQgRk9SICIgKyB0YXJnZXQpOyAgICAvLyROT04tTkxTLTEkCi0JICAgIFRocmVhZC5kdW1wU3RhY2soKTsKLQkgIH0KLQotCSAgcmV0dXJuIGFkYXB0ZXI7CQkgIAotICB9Ci0gIAotICBwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciB0YXJnZXQpCi0gIHsKLSAgICByZXR1cm4gYWRhcHQodGFyZ2V0LCB0aGlzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9XU0RMQmFzZUFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvV1NETEJhc2VBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNTMyZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9XU0RMQmFzZUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMURlbGV0ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExUmVuYW1lQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5JQWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgV1NETEJhc2VBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBJQVNET2JqZWN0LCBJVHJlZUVsZW1lbnQsIElBY3Rpb25Qcm92aWRlciB7Ci0JcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgb3duZXI7Ci0JCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJMaXN0ZW5lcihJQVNET2JqZWN0TGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICBpZiAoIWxpc3RlbmVyTGlzdC5jb250YWlucyhsaXN0ZW5lcikpCi0gICAgICAgewotCQkgbGlzdGVuZXJMaXN0LmFkZChsaXN0ZW5lcik7Ci0gICAgICAgfSAgCi0JfQotCi0JcHVibGljIHZvaWQgdW5yZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlsaXN0ZW5lckxpc3QucmVtb3ZlKGxpc3RlbmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwb3B1bGF0ZUFkYXB0ZXJMaXN0KExpc3Qgbm90aWZpZXJMaXN0LCBMaXN0IGFkYXB0ZXJMaXN0KSB7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IG5vdGlmaWVyTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspICAgewotICAgICAgICAgICAgT2JqZWN0IG8gPSBpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgTm90aWZpZXIpCi0gICAgICAgICAgICB7ICAKLQkJCU5vdGlmaWVyIGNvbXBvbmVudCA9IChOb3RpZmllcilvOyAgICAgIAotCQkJQWRhcHRlciBhZGFwdGVyID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoY29tcG9uZW50KTsKLQkJCWFkYXB0ZXJMaXN0LmFkZChhZGFwdGVyKTsKLQkJCQotCQkJaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCQkoKFdTRExCYXNlQWRhcHRlcikgYWRhcHRlcikuc2V0T3duZXIodGhpcyk7Ci0JCQl9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9wdWxhdGVBZGFwdGVyTGlzdEVycm9yIiArIG8pOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICB9ICAKLQkJfQotCX0KLQkKLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIG5vdGlmaWVyKSB7Ci0JCUFkYXB0ZXIgYWRhcHRlciA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KG5vdGlmaWVyKTsKLQotCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlciAmJiAoKFdTRExCYXNlQWRhcHRlcikgYWRhcHRlcikub3duZXIgPT0gbnVsbCkgewotCQkJKChXU0RMQmFzZUFkYXB0ZXIpIGFkYXB0ZXIpLnNldE93bmVyKHRoaXMpOwotCQl9Ci0JCQotCQlyZXR1cm4gYWRhcHRlcjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0T3duZXIoV1NETEJhc2VBZGFwdGVyIG93bmVyKSB7Ci0JCXRoaXMub3duZXIgPSBvd25lcjsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQlyZXR1cm4gdHlwZSA9PSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMQWRhcHRlckZhY3RvcnkoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotCQlTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nWzBdOwotCQkKLQkJcmV0dXJuIGFjdGlvbklEczsKLQl9Ci0gICAgCi0JcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbXNnKQotCXsKLQkgIHN1cGVyLm5vdGlmeUNoYW5nZWQobXNnKTsKLSAgICAgIHRyeQotICAgICAgewotCSAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgbnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7ICAgICAgICAKLSAgICAgICAgLy8gVE9ETy4uLiBleGNlcHRpb24gc2hvdWxkIG5ldmVyIGhhcHBlbiBoZXJlLi4gYnV0IHRoZXkgZG8KLSAgICAgICAgLy8gZHVtcGluZyB0aGUgc3RhY2sgdG8gdGhlIGNvbnNvbGUgdW50aWwgd2UgdHJhY2sgdGhlc2UgZG93bgotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBub3RpZnlMaXN0ZW5lcnMoT2JqZWN0IGNoYW5nZWRPYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLQl7Ci0JICBMaXN0IGNsb25lZExpc3RlbmVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIGNsb25lZExpc3RlbmVyTGlzdC5hZGRBbGwobGlzdGVuZXJMaXN0KTsKLQkgIGZvciAoSXRlcmF0b3IgaSA9IGNsb25lZExpc3RlbmVyTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotCSAgewotCSAgICBJQVNET2JqZWN0TGlzdGVuZXIgbGlzdGVuZXIgPSAoSUFTRE9iamVjdExpc3RlbmVyKWkubmV4dCgpOwotCSAgICBsaXN0ZW5lci5wcm9wZXJ0eUNoYW5nZWQodGhpcywgcHJvcGVydHkpOwotCSAgfSAgICAgIAotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXROYW1lQ29tbWFuZChTdHJpbmcgbmV3TmFtZSkgewotCQlyZXR1cm4gbmV3IFcxMVJlbmFtZUNvbW1hbmQodGhpcywgbmV3TmFtZSk7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7Ci0JCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0JCXRyeQl7Ci0JCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gbnVsbDsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCWlmICh3aW5kb3cgIT0gbnVsbCkJewotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3aW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCWlmIChwYWdlICE9IG51bGwpIHsKLQkJCQkJZWRpdG9yUGFydCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJZGVmaW5pdGlvbiA9ICgoV1NETEVsZW1lbnQpIHRhcmdldCkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCQkJfQotCQkJaWYgKGVkaXRvclBhcnQgPT0gbnVsbCkgewotCQkJCXJldHVybiBmYWxsQmFja0NoZWNrSXNSZWFkT25seSgpOwotCQkJfQotCi0JCQlEZWZpbml0aW9uIGVkaXRvckRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpOwotCQkJaWYgKGRlZmluaXRpb24gIT0gbnVsbCAmJiBkZWZpbml0aW9uID09IGVkaXRvckRlZmluaXRpb24pIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlyZXR1cm4gZmFsbEJhY2tDaGVja0lzUmVhZE9ubHkoKTsKLQkJCX0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZSkgewotCi0JCX0KLQkJCi0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gZmFsbEJhY2tDaGVja0lzUmVhZE9ubHkoKSB7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0JCWlmICh0YXJnZXQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJZWxlbWVudCA9ICgoV1NETEVsZW1lbnQpIHRhcmdldCkuZ2V0RWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KSB7Ci0JCQllbGVtZW50ID0gKChYU0RDb25jcmV0ZUNvbXBvbmVudCkgdGFyZ2V0KS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJCi0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSURPTU5vZGUgfHwgZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnRJbXBsKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotICAKLQlwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkgewotCQlyZXR1cm4gb3duZXI7Ci0JfQotCi0JcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFEZWxldGVDb21tYW5kKHRoaXMpOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQkJcmV0dXJuIG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0U2Vjb25kYXJ5SW1hZ2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFBZGRQYXJ0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExQWRkUGFydEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTNhMjQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFBZGRQYXJ0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5QYXJhbWV0ZXJFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE1lc3NhZ2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRQYXJ0QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkUGFydEFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgVzExQWRkUGFydEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfUEFSVCk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9wYXJ0X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSBudWxsOwotCQkJSU1lc3NhZ2UgaU1lc3NhZ2UgPSBudWxsOwotCQkJTWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJbWVzc2FnZVJlZiA9IChNZXNzYWdlUmVmZXJlbmNlKSAoKFcxMU1lc3NhZ2VSZWZlcmVuY2UpIG8pLmdldFRhcmdldCgpOwotCQkJCW1lc3NhZ2UgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJCVcxMVBhcmFtZXRlckZvclBhcnQgcGFyYW0gPSAoVzExUGFyYW1ldGVyRm9yUGFydCkgbzsKLQkJCQlpZiAocGFyYW0uZ2V0T3duZXIoKSBpbnN0YW5jZW9mIElNZXNzYWdlKSB7Ci0JCQkJCWlNZXNzYWdlID0gKElNZXNzYWdlKSBwYXJhbS5nZXRPd25lcigpOwotCQkJCX0KLQkJCQllbHNlIGlmIChwYXJhbS5nZXRPd25lcigpIGluc3RhbmNlb2YgVzExTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCQltZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgcGFyYW0uZ2V0T3duZXIoKSkuZ2V0VGFyZ2V0KCk7Ci0JCQkJCW1lc3NhZ2UgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCk7Ci0JCQkJfQotCQkJCQotCQkJCWlmIChtZXNzYWdlID09IG51bGwpIHsKLQkJCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBhcmFtLmdldFRhcmdldCgpOwotCQkJCQltZXNzYWdlID0gKE1lc3NhZ2UpIHBhcnQuZUNvbnRhaW5lcigpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJTWVzc2FnZSkgewotCQkJCWlNZXNzYWdlID0gKElNZXNzYWdlKSBvOwotCQkJfQotCQkJCi0JCQlpZiAobWVzc2FnZSA9PSBudWxsICYmIGlNZXNzYWdlID09IG51bGwgJiYgbWVzc2FnZVJlZiAhPSBudWxsKSB7Ci0JCQkJSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIGVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSAoKFcxMURlc2NyaXB0aW9uKSBlZGl0b3IuZ2V0TW9kZWwoKSkuZ2V0VGFyZ2V0KCk7Ci0JCQkJU3RyaW5nIG1lc3NhZ2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShkZWZpbml0aW9uLCAiTmV3TWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0JCQkJQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRNZXNzYWdlQ29tbWFuZChkZWZpbml0aW9uLCBtZXNzYWdlTmFtZSwgZmFsc2UpOwotCQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkJbWVzc2FnZSA9IChNZXNzYWdlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQkJbWVzc2FnZVJlZi5zZXRFTWVzc2FnZShtZXNzYWdlKTsKLQkJCX0KLQkJCQotCQkJaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotCQkJCWlNZXNzYWdlID0gKElNZXNzYWdlKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChtZXNzYWdlKTsKLQkJCX0KLQotCQkJaWYgKGlNZXNzYWdlICE9IG51bGwpIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSBpTWVzc2FnZS5nZXRBZGRQYXJ0Q29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBlbGVtZW50ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlzZWxlY3RBbmREaXJlY3RFZGl0KGVsZW1lbnQpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotCQotCXByb3RlY3RlZCB2b2lkIGRvRGlyZWN0RWRpdChFZGl0UGFydCBlcCkgewotCQlpZiAoZXAgaW5zdGFuY2VvZiBQYXJhbWV0ZXJFZGl0UGFydCkgewotCQkJKChQYXJhbWV0ZXJFZGl0UGFydCkgZXApLnBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFPcGVuSW1wb3J0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExT3BlbkltcG9ydEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njk1NmVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFPcGVuSW1wb3J0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVzExT3BlbkltcG9ydEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRE9wZW5JbXBvcnRBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBXMTFPcGVuSW1wb3J0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX09QRU5fSU1QT1JUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwICYmIGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKSBpbnN0YW5jZW9mIFcxMUltcG9ydCkgewotCQkJSW1wb3J0IHRoZUltcG9ydCA9IGdldFdTRExJbXBvcnQoKFcxMUltcG9ydCkgZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApKTsKLQkJCQotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gdGhlSW1wb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkJCW9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuT3Blbk9uU2VsZWN0aW9uSGVscGVyIGhlbHBlciA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk9wZW5PblNlbGVjdGlvbkhlbHBlcihkZWZpbml0aW9uKTsKLQkJICAgIGhlbHBlci5vcGVuRWRpdG9yKChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgdGhlSW1wb3J0KTsKLQkJfQotCX0KLQkKLQkgIHByb3RlY3RlZCBib29sZWFuIGNhbGN1bGF0ZUVuYWJsZWQoKSB7Ci0JCSAgYm9vbGVhbiBlbmFibGVkID0gc3VwZXIuY2FsY3VsYXRlRW5hYmxlZCgpOwotCQkgIGlmIChlbmFibGVkKSB7Ci0JCQkgIGlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwICYmIGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKSBpbnN0YW5jZW9mIFcxMUltcG9ydCkgewotCQkJCQlJbXBvcnQgdGhlSW1wb3J0ID0gZ2V0V1NETEltcG9ydCgoVzExSW1wb3J0KSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCkpOwotCQkJCQkKLQkJCQkJaWYgKHRoZUltcG9ydCAhPSBudWxsKSB7Ci0JCQkJCQlTdHJpbmcgbG9jYXRpb24gPSB0aGVJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKTsKLQkJCQkJCi0JCQkJCQlpZiAobG9jYXRpb24gPT0gbnVsbCB8fCBsb2NhdGlvbi50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJCWVuYWJsZWQgPSBmYWxzZTsKLQkJCQkJfQotCQkJICB9Ci0JCSAgfQotCQkgIAotCQkgIHJldHVybiBlbmFibGVkOwotCSAgfQotCSAgCi0JICBwcml2YXRlIEltcG9ydCBnZXRXU0RMSW1wb3J0KFcxMUltcG9ydCB3MTFJbXBvcnQpIHsKLQkJICByZXR1cm4gKEltcG9ydCkgKChXMTFJbXBvcnQpIHcxMUltcG9ydCkuZ2V0VGFyZ2V0KCk7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNjhmZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldEV4aXN0aW5nRWxlbWVudEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMVNldEV4aXN0aW5nRWxlbWVudEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldEV4aXN0aW5nRWxlbWVudEFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIHdzZGxCYXNlQWRhcHRlcjsKLQkKLQlwdWJsaWMgVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0VYSVNUSU5HX0VMRU1FTlQpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL21lc3NhZ2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAod3NkbEJhc2VBZGFwdGVyID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyICYmIG8gaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCQkJd3NkbEJhc2VBZGFwdGVyID0gKFdTRExCYXNlQWRhcHRlcikgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIod3NkbEJhc2VBZGFwdGVyKTsKLQkJaWYgKHdzZGxCYXNlQWRhcHRlciAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2Uod3NkbEJhc2VBZGFwdGVyLmdldFRhcmdldCgpLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJd3NkbEJhc2VBZGFwdGVyID0gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjc2NWQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ01lc3NhZ2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXRFeGlzdGluZ01lc3NhZ2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXRNZXNzYWdlSW50ZXJmYWNlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlOwotCi0JCi0JcHVibGljIFcxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KSB7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9FWElTVElOR19NRVNTQUdFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9tZXNzYWdlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKG1lc3NhZ2VSZWZlcmVuY2UgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJCW1lc3NhZ2VSZWZlcmVuY2UgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0TWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKG1lc3NhZ2VSZWZlcmVuY2UpOwotCQlpZiAobWVzc2FnZVJlZmVyZW5jZSAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UobWVzc2FnZVJlZmVyZW5jZSwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCW1lc3NhZ2VSZWZlcmVuY2UgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlODJiNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldEV4aXN0aW5nVHlwZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMVNldEV4aXN0aW5nVHlwZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldEV4aXN0aW5nVHlwZUFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIHdzZGxCYXNlQWRhcHRlcjsKLQkKLQlwdWJsaWMgVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0VYSVNUSU5HX1RZUEUpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL21lc3NhZ2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAod3NkbEJhc2VBZGFwdGVyID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyICYmIG8gaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCQkJd3NkbEJhc2VBZGFwdGVyID0gKFdTRExCYXNlQWRhcHRlcikgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKHdzZGxCYXNlQWRhcHRlcik7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXRCcm93c2VEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHdzZGxCYXNlQWRhcHRlci5nZXRUYXJnZXQoKSwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXdzZGxCYXNlQWRhcHRlciA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdFbGVtZW50QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3RWxlbWVudEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODgyZGE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdFbGVtZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0TmV3RWxlbWVudEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldE5ld0VsZW1lbnRBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIFdTRExCYXNlQWRhcHRlciB3c2RsQmFzZUFkYXB0ZXI7Ci0JCi0JcHVibGljIFcxMVNldE5ld0VsZW1lbnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fTkVXX0VMRU1FTlQpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQotCQlpZiAod3NkbEJhc2VBZGFwdGVyID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyICYmIG8gaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCQkJd3NkbEJhc2VBZGFwdGVyID0gKFdTRExCYXNlQWRhcHRlcikgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIod3NkbEJhc2VBZGFwdGVyKTsKLSAgICAgICAgaWYgKHdzZGxCYXNlQWRhcHRlciAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2Uod3NkbEJhc2VBZGFwdGVyLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJd3NkbEJhc2VBZGFwdGVyID0gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld01lc3NhZ2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdNZXNzYWdlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZjkxNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld01lc3NhZ2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXROZXdNZXNzYWdlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0TmV3TWVzc2FnZUFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZTsKLQkKLQlwdWJsaWMgVzExU2V0TmV3TWVzc2FnZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ORVdfTUVTU0FHRSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SU1lc3NhZ2VSZWZlcmVuY2UoSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSkgewotCQl0aGlzLm1lc3NhZ2VSZWZlcmVuY2UgPSBtZXNzYWdlUmVmZXJlbmNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKG1lc3NhZ2VSZWZlcmVuY2UgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJCW1lc3NhZ2VSZWZlcmVuY2UgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0TWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgICAgICBpZiAobWVzc2FnZVJlZmVyZW5jZSAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UobWVzc2FnZVJlZmVyZW5jZSwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCW1lc3NhZ2VSZWZlcmVuY2UgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3VHlwZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld1R5cGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQwZTZmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3VHlwZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXROZXdUeXBlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0TmV3VHlwZUFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIHdzZGxCYXNlQWRhcHRlcjsKLQkKLQlwdWJsaWMgVzExU2V0TmV3VHlwZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ORVdfVFlQRSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcih3c2RsQmFzZUFkYXB0ZXIpOwotCQlpZiAod3NkbEJhc2VBZGFwdGVyICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZSh3c2RsQmFzZUFkYXB0ZXIsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQl3c2RsQmFzZUFkYXB0ZXIgPSBudWxsOwotCX0KLSAgICAKLSAgICBwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGlucHV0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotICAgICAgICAgICAgICAgIFdTRExFbGVtZW50IGVsZW1lbnQgPSAoV1NETEVsZW1lbnQpIHdzZGxCYXNlQWRhcHRlci5nZXRUYXJnZXQoKTsKLSAgICAgICAgICAgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKCgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKSwgbnVsbCwgZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZjI4ZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRJbnRlcmZhY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLmN1c3RvbS5Ob2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBXMTFCaW5kaW5nIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUJpbmRpbmcgewotCi0JcHVibGljIElJbnRlcmZhY2UgZ2V0SW50ZXJmYWNlKCkgewotICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9ICgoQmluZGluZykgdGFyZ2V0KS5nZXRFUG9ydFR5cGUoKTsKLSAgICAgICAgaWYgKHBvcnRUeXBlICE9IG51bGwpCi0gICAgICAgIHsgIAotCSAgICAgIHJldHVybiAoSUludGVyZmFjZSkgY3JlYXRlQWRhcHRlcihwb3J0VHlwZSk7Ci0JCX0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0gICAgCi0gICAgcHVibGljIExpc3QgZ2V0QmluZGluZ0NvbnRlbnRMaXN0KCkKLSAgICB7Ci0gICAgICBMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgICBMaXN0IGJpbmRpbmdPcGVyYXRpb25zID0gY29weUxpc3QoKChCaW5kaW5nKXRhcmdldCkuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkpOyAKLSAgICAgIExpc3Qgb3BlcmF0aW9ucyA9IGNvcHlMaXN0KCgoQmluZGluZyl0YXJnZXQpLmdldEVQb3J0VHlwZSgpLmdldEVPcGVyYXRpb25zKCkpOwotICAgICAgCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCBwbGFjZWhvbGRlcnMgZm9yIE9wZXJhdGlvbnMKLQkgIExpc3QgdG9BZGFwdExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAKLQkgIEl0ZXJhdG9yIGJpbmRpbmdPcEl0ID0gYmluZGluZ09wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChiaW5kaW5nT3BJdC5oYXNOZXh0KCkpIHsKLQkJICBCaW5kaW5nT3BlcmF0aW9uIGl0ZW0gPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wSXQubmV4dCgpOwotCQkgIG9wZXJhdGlvbnMucmVtb3ZlKGl0ZW0uZ2V0RU9wZXJhdGlvbigpKTsKLQkgIH0KLQkgIAotICAgICAgSXRlcmF0b3Igb3BlcmF0aW9uc0l0ID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG9wZXJhdGlvbnNJdC5oYXNOZXh0KCkpIHsKLSAgICAJICBPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBvcGVyYXRpb25zSXQubmV4dCgpOwotICAgIAkgIHRvQWRhcHRMaXN0LmFkZChvcCk7Ci0gICAgCSAgdG9BZGFwdExpc3QuYWRkKG9wLmdldEVJbnB1dCgpKTsKLSAgICAJICB0b0FkYXB0TGlzdC5hZGQob3AuZ2V0RU91dHB1dCgpKTsKLSAgICAJICB0b0FkYXB0TGlzdC5hZGRBbGwob3AuZ2V0RUZhdWx0cygpKTsKLSAgICAgIH0KLQotICAgICAgSXRlcmF0b3IgaXQgPSB0b0FkYXB0TGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOyAKLSAgICAgICAgICBpZiAobyAhPSBudWxsKQotICAgICAgICAgIHsgIAotICAgIAkgICAgT2JqZWN0IGFkYXB0ZWQgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdCgoTm90aWZpZXIpbyk7Ci0gICAgCSAgICBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyIHBsYWNlSG9sZGVyID0gbmV3IEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIoYWRhcHRlZCk7Ci0gICAgCSAgICBhZGFwdGVyTGlzdC5hZGQocGxhY2VIb2xkZXIpOwotICAgICAgICAgIH0gIAotICAgICAgfQotICAgICAgCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSAoKEJpbmRpbmcpdGFyZ2V0KS5nZXRFQmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbilpLm5leHQoKTsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpOwotICAgICAgICAKLSAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbik7Ci0gICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgSW5wdXQKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgPT0gbnVsbCAmJiBvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotICAgICAgICAJLy8gTmVlZCBhIHBsYWNlaG9sZGVyCi0gICAgICAgIAlPYmplY3QgYWRhcHRlZE9iamVjdCA9IGNyZWF0ZUFkYXB0ZXIob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsKLSAgICAgICAgCUJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgdGVtcCA9IG5ldyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKGFkYXB0ZWRPYmplY3QpOwotICAgICAgICAJYWRhcHRlckxpc3QuYWRkKHRlbXApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgT3V0cHV0Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpID09IG51bGwgJiYgb3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0gICAgICAgIAkvLyBOZWVkIGEgcGxhY2Vob2xkZXIKLSAgICAgICAgCU9iamVjdCBhZGFwdGVkT2JqZWN0ID0gY3JlYXRlQWRhcHRlcihvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsKLSAgICAgICAgCUJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgdGVtcCA9IG5ldyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKGFkYXB0ZWRPYmplY3QpOwotICAgICAgICAJYWRhcHRlckxpc3QuYWRkKHRlbXApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIEZhdWx0cwotICAgICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgICAgIHsgIAotICAgICAgICBMaXN0IGZhdWx0cyA9IGNvcHlMaXN0KG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkpOwotICAgICAgICBMaXN0IGJpbmRpbmdGYXVsdHMgPSBjb3B5TGlzdChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkpOwotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYmluZGluZ0ZhdWx0cy5zaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgCUJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KSBiaW5kaW5nRmF1bHRzLmdldChpbmRleCk7Ci0gICAgICAgIAlsaXN0LmFkZChiaW5kaW5nRmF1bHQpOwotICAgICAgICAJCi0gICAgICAgIAlmYXVsdHMucmVtb3ZlKGJpbmRpbmdGYXVsdC5nZXRFRmF1bHQoKSk7ICAgICAgICAJCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIExlZnQgb3ZlciBmYXVsdHMgbmVlZCBwbGFjZWhvbGRlcnMKLSAgICAgICAgSXRlcmF0b3IgcmVtYW5pbmdGYXVsdHMgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHJlbWFuaW5nRmF1bHRzLmhhc05leHQoKSkgewotICAgICAgICAJT2JqZWN0IGFkYXB0ZWRPYmplY3QgPSBjcmVhdGVBZGFwdGVyKChGYXVsdCkgcmVtYW5pbmdGYXVsdHMubmV4dCgpKTsKLSAgICAgICAgCUJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgdGVtcCA9IG5ldyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKGFkYXB0ZWRPYmplY3QpOwotICAgICAgICAJYWRhcHRlckxpc3QuYWRkKHRlbXApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHBvcHVsYXRlQWRhcHRlckxpc3QobGlzdCwgYWRhcHRlckxpc3QpOwotICAgICAgcmV0dXJuIGFkYXB0ZXJMaXN0OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIExpc3QgY29weUxpc3QoTGlzdCBvcmlnTGlzdCkgewotICAgIAlMaXN0IG5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCUl0ZXJhdG9yIGl0ID0gb3JpZ0xpc3QuaXRlcmF0b3IoKTsKLSAgICAJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgIAkJbmV3TGlzdC5hZGQoaXQubmV4dCgpKTsKLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIG5ld0xpc3Q7Ci0gICAgfQotCi0JcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpIHsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiAoKEJpbmRpbmcpIHRhcmdldCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpIHsKLQkJSXRlcmF0b3IgaXQgPSAoKEJpbmRpbmcpIHRhcmdldCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBpdGVtID0gaXQubmV4dCgpOwotCQkJCi0JCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpIGl0ZW07Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IHdzZGxFbGVtZW50LmdldEVsZW1lbnQoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJCQkKLQkJCQlpZiAobmFtZXNwYWNlICE9IG51bGwpIHsKLQkJCQkJQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSBmYWN0b3J5UmVnaXN0cnkgPSBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCQkJCUNvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IGZhY3RvcnlSZWdpc3RyeS5nZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lc3BhY2UobmFtZXNwYWNlKTsKLQkJCQkJaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkgewotCQkJCQkJcmV0dXJuIGNvbnRlbnRHZW5lcmF0b3IuZ2V0UHJvdG9jb2woKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChJRGVzY3JpcHRpb24pIG93bmVyOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgTGlzdCBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfUE9SVFRZUEUpOyAvLyROT04tTkxTLTEkCi0gICAgYWN0aW9uSURzLmFkZChBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldEludGVyZmFjZUNvbW1hbmQoSUludGVyZmFjZSBuZXdJbnRlcmZhY2UpIHsKLQkJVzExSW50ZXJmYWNlIHcxMUludGVyZmFjZSA9IChXMTFJbnRlcmZhY2UpIG5ld0ludGVyZmFjZTsKLQkJcmV0dXJuIG5ldyBXMTFTZXRJbnRlcmZhY2VDb21tYW5kKChCaW5kaW5nKSB0YXJnZXQsIChQb3J0VHlwZSkgdzExSW50ZXJmYWNlLmdldFRhcmdldCgpKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0R2VuZXJhdGVCaW5kaW5nQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kKChCaW5kaW5nKSB0aGlzLmdldFRhcmdldCgpKTsKLQl9Ci0gICAgCi0gICAgcHJpdmF0ZSBJTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKE5vZGUgbm9kZSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbm9kZS5nZXROYW1lc3BhY2VVUkkoKTsgICAgICAKLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsgIAotICAgICAgICBOb2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gWFNERWRpdG9yUGx1Z2luLmdldERlZmF1bHQoKS5nZXROb2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5KCk7ICAgICAgCi0gICAgICAgIHJldHVybiByZWdpc3RyeS5nZXRMYWJlbFByb3ZpZGVyKG5hbWVzcGFjZSk7Ci0gICAgICB9ICAgICAgICAKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgcHVibGljIEltYWdlIGdldEltYWdlKCkKLSAgewotICAgIEltYWdlIGltYWdlID0gbnVsbDsKLSAgICBMaXN0IGxpc3QgPSAoKEJpbmRpbmcpIHRhcmdldCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKGxpc3Quc2l6ZSgpID4gMCkKLSAgICB7ICAKLSAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClsaXN0LmdldCgwKTsKLSAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBlZS5nZXRFbGVtZW50KCk7Ci0gICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICB7ICAKLSAgICAgICAgIElMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIgPSBnZXRMYWJlbFByb3ZpZGVyKGVsZW1lbnQpOwotICAgICAgICAgaWYgKGxhYmVsUHJvdmlkZXIgIT0gbnVsbCkKLSAgICAgICAgIHsKLSAgICAgICAgICAgaW1hZ2U9IGxhYmVsUHJvdmlkZXIuZ2V0SW1hZ2UoZWxlbWVudCk7Ci0gICAgICAgICB9Ci0gICAgICAgfQotICAgIH0gICAgICAgIAotICAgIGlmIChpbWFnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9iaW5kaW5nX29iai5naWYiKTsgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIH0gIAotICAgIHJldHVybiBpbWFnZTsKLSAgIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKQotICB7Ci0gICAgcmV0dXJuICJiaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICBJVHJlZUVsZW1lbnRbXSByZXN1bHQgPSBuZXcgSVRyZWVFbGVtZW50W2xpc3Quc2l6ZSgpXTsKLSAgICBsaXN0LnRvQXJyYXkocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkgIGlmIChnZXRCaW5kaW5nT3BlcmF0aW9ucygpLnNpemUoKSA+IDApIHsKLQkJICByZXR1cm4gdHJ1ZTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nT3BlcmF0aW9ucygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgcG9wdWxhdGVBZGFwdGVyTGlzdCgoKEJpbmRpbmcpdGFyZ2V0KS5nZXRFQmluZGluZ09wZXJhdGlvbnMoKSwgbGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdPcGVyYXRpb25zKGJvb2xlYW4gY3JlYXRlTWlzc2luZ09wZXJhdGlvbnMsIGJvb2xlYW4gc2hvd0V4dHJhT3BlcmF0aW9ucykKLSAgewotICAgIHJldHVybiBnZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZTg2ZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotCi0KLXB1YmxpYyBjbGFzcyBXMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSwgSVRyZWVFbGVtZW50Ci17Ci0gIHB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpCi0gIHsKLSAgICByZXR1cm4gSVRyZWVFbGVtZW50LkVNUFRZX0xJU1Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKCkKLSAgeyAgIAotICAgIFN0cmluZyBpbWFnZU5hbWUgPSBudWxsOwotICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgaW1hZ2VOYW1lID0gImljb25zL2lucHV0X29iai5naWYiOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgaW1hZ2VOYW1lID0gImljb25zL291dHB1dF9vYmouZ2lmIjsgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIH0gCi0gICAgZWxzZSAvL2lmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgaW1hZ2VOYW1lID0gImljb25zL2ZhdWx0X29iai5naWYiOyAvLyROT04tTkxTLTEkCi0gICAgfSAgCi0gICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShpbWFnZU5hbWUpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0JICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0JICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotCSAgewotCQkgIG5hbWUgPSAoKEJpbmRpbmdJbnB1dCkgdGFyZ2V0KS5nZXROYW1lKCk7Ci0JICB9Ci0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotCSAgewotCQkgIG5hbWUgPSAoKEJpbmRpbmdPdXRwdXQpIHRhcmdldCkuZ2V0TmFtZSgpOwotCSAgfSAKLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLQkgIHsKLQkJICBuYW1lID0gKChCaW5kaW5nRmF1bHQpIHRhcmdldCkuZ2V0TmFtZSgpOwotCSAgfQotCSAgCi0JICBpZiAobmFtZSA9PSBudWxsKSB7Ci0JCSAgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JICB9Ci0KLQkgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKLSAgewotCSAgU3RyaW5nIHRleHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCSAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLQkgIHsKLQkJICB0ZXh0ID0gImJpbmRpbmcgaW5wdXQiOyAvLyROT04tTkxTLTEkCi0JICB9Ci0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotCSAgewotCQkgIHRleHQgPSAiYmluZGluZyBvdXRwdXQiOyAvLyROT04tTkxTLTEkCi0JICB9IAotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotCSAgewotCQkgIHRleHQgPSAiYmluZGluZyBmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHRleHQ7Ci0gIH0KLQotICBwdWJsaWMgSU1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gIHsKLSAgICBFT2JqZWN0IHJlc3VsdE5vdGlmaWVyID0gbnVsbDsKLSAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHJlc3VsdE5vdGlmaWVyID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5jb21wdXRlSW5wdXQoKEJpbmRpbmdJbnB1dCl0YXJnZXQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgIHsKLSAgICAgIHJlc3VsdE5vdGlmaWVyID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5jb21wdXRlT3V0cHV0KChCaW5kaW5nT3V0cHV0KXRhcmdldCk7Ci0gICAgfSAgICAgICAgICAKLSAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgcmVzdWx0Tm90aWZpZXIgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVGYXVsdCgoQmluZGluZ0ZhdWx0KXRhcmdldCk7Ci0gICAgfSAgICAgICAgICAgICAgIAotICAgIHJldHVybiByZXN1bHROb3RpZmllciAhPSBudWxsID8gKElNZXNzYWdlUmVmZXJlbmNlKWNyZWF0ZUFkYXB0ZXIocmVzdWx0Tm90aWZpZXIpIDogbnVsbDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpCi0gIHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgeyAgICAKLSAgICBDb2xsZWN0aW9uIGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLS8vICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLS8vICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotLy8gICAgfQotICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmdPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ09wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzhkZTQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ09wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotCi1wdWJsaWMgY2xhc3MgVzExQmluZGluZ09wZXJhdGlvbiBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElCaW5kaW5nT3BlcmF0aW9uLCBJVHJlZUVsZW1lbnQKLXsKLSAgCi0gIHB1YmxpYyBJT3BlcmF0aW9uIGdldE9wZXJhdGlvbigpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbil0YXJnZXQ7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZU9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsgICAgCi0gICAgcmV0dXJuIG9wZXJhdGlvbiAhPSBudWxsID8gKElPcGVyYXRpb24pY3JlYXRlQWRhcHRlcihvcGVyYXRpb24pIDogbnVsbDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ01lc3NhZ2VzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbil0YXJnZXQ7Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSk7Ci0gICAgfQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSk7Ci0gICAgfSAgICAgCi0gICAgbGlzdC5hZGRBbGwoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpKTsKLSAgICBMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KGxpc3QsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXRhcmdldDsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbiAhPSBudWxsID8gb3BlcmF0aW9uLmdldE5hbWUoKSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCkKLSAgewotICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotICB9Ci0KLSAgcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkKLSAgewotICAgIExpc3QgbGlzdCA9IGdldEJpbmRpbmdNZXNzYWdlcygpOwotICAgIElUcmVlRWxlbWVudFtdIHJlc3VsdCA9IG5ldyBJVHJlZUVsZW1lbnRbbGlzdC5zaXplKCldOwotICAgIGxpc3QudG9BcnJheShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCSAgaWYgKGdldEJpbmRpbmdNZXNzYWdlcygpLnNpemUoKSA+IDApIHsKLQkJICByZXR1cm4gdHJ1ZTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKCkKLSAgewotICAgIFN0cmluZyBpbWFnZU5hbWUgPSAiaWNvbnMvb3BlcmF0aW9uYmluZGluZ19vYmouZ2lmIjsgLy8kTk9OLU5MUy0xJAotICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoaW1hZ2VOYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpCi0gIHsKLSAgICByZXR1cm4gImJpbmRpbmcgb3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7ICAgIAotICAgIENvbGxlY3Rpb24gYWN0aW9uSURzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQ2F0ZWdvcnlBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUNhdGVnb3J5QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTEzMzdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQ2F0ZWdvcnlBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE1lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkU2NoZW1hQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZFNlcnZpY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFDYXRlZ29yeUFkYXB0ZXIgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJQ2F0ZWdvcnlBZGFwdGVyLCBJVHJlZUVsZW1lbnQsIElBU0RPYmplY3RMaXN0ZW5lciB7Ci0JICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBJTVBPUlRTID0gMTsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRZUEVTID0gMjsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNFUlZJQ0VTID0gMzsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEJJTkRJTkdTID0gNTsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IElOVEVSRkFDRVMgPSA2OwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTUVTU0FHRVMgPSA3OwotCSAgCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBJTVBPUlRTX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX0ZPTERFUl9JTVBPUlRTOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBUWVBFU19IRUFERVJfVEVYVCA9IE1lc3NhZ2VzLl9VSV9GT0xERVJfVFlQRVM7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNFUlZJQ0VfSEVBREVSX1RFWFQgPSBNZXNzYWdlcy5fVUlfRk9MREVSX1NFUlZJQ0VTOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBCSU5ESU5HX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX0ZPTERFUl9CSU5ESU5HUzsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgSU5URVJGQUNFX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX1BPUlRfVFlQRTsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0FHRV9IRUFERVJfVEVYVCA9IE1lc3NhZ2VzLl9VSV9GT0xERVJfTUVTU0FHRVM7IC8vJE5PTi1OTFMtMSQKLQotCSAgcHJvdGVjdGVkIFN0cmluZyB0ZXh0OwotCSAgcHJvdGVjdGVkIEltYWdlIGltYWdlOwotCSAgcHJvdGVjdGVkIGludCBncm91cFR5cGU7Ci0JICBwcm90ZWN0ZWQgQ29sbGVjdGlvbiBjaGlsZHJlbjsKLQkgIHByb3RlY3RlZCBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JICAKLQkgIHB1YmxpYyBXMTFDYXRlZ29yeUFkYXB0ZXIoSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBTdHJpbmcgbGFiZWwsIEltYWdlIGltYWdlLCBDb2xsZWN0aW9uIGNoaWxkcmVuLCBpbnQgZ3JvdXBUeXBlKSB7Ci0JICAgIHRoaXMudGV4dCA9IGxhYmVsOwotCSAgICB0aGlzLmltYWdlID0gaW1hZ2U7Ci0JICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQkgICAgdGhpcy50YXJnZXQgPSAoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbikuZ2V0VGFyZ2V0KCk7Ci0JICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKLQkgICAgdGhpcy5ncm91cFR5cGUgPSBncm91cFR5cGU7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JICAgIHJldHVybiAoRGVmaW5pdGlvbikgdGFyZ2V0OwotCSAgfQotCSAgCi0JICBwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKSB7Ci0JCSAgcmV0dXJuIGRlc2NyaXB0aW9uOwotCSAgfQotCi0JICBwdWJsaWMgaW50IGdldEdyb3VwVHlwZSgpIHsKLQkgICAgcmV0dXJuIGdyb3VwVHlwZTsKLQkgIH0KLQotCSAgcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCSAgICByZXR1cm4gaW1hZ2U7Ci0JICB9Ci0KLQkgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkgICAgcmV0dXJuIHRleHQ7Ci0JICB9Ci0KLQkgIHB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkgICAgcmV0dXJuIChJVHJlZUVsZW1lbnRbXSkgY2hpbGRyZW4udG9BcnJheShuZXcgSVRyZWVFbGVtZW50WzBdKTsKLQkgIH0KLQotCSAgcHVibGljIHZvaWQgc2V0Q2hpbGRyZW4oQ29sbGVjdGlvbiBsaXN0KSB7Ci0JICAgIGNoaWxkcmVuID0gbGlzdDsKLQkgIH0KLQotCSAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpIHsKLQkgICAgcmV0dXJuIG51bGw7Ci0JICB9Ci0KLQkgIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7Ci0JICAgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7ICAgIAotCSAgICBDb2xsZWN0aW9uIGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgCi0JICAgIHN3aXRjaCAoZ3JvdXBUeXBlKSB7Ci0JICAgICAgY2FzZSBJTVBPUlRTIDogewotCSAgICAgICAgYWN0aW9uSURzLmFkZChBU0RBZGRJbXBvcnRBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICAgIGNhc2UgVFlQRVMgOiB7Ci0JICAgICAgICBhY3Rpb25JRHMuYWRkKEFTREFkZFNjaGVtYUFjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBTRVJWSUNFUyA6IHsKLQkgICAgICAgIGFjdGlvbklEcy5hZGQoQVNEQWRkU2VydmljZUFjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBCSU5ESU5HUyA6IHsKLQkgICAgICAgIGFjdGlvbklEcy5hZGQoQVNEQWRkQmluZGluZ0FjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBJTlRFUkZBQ0VTIDogewotCSAgICAgICAgYWN0aW9uSURzLmFkZChBU0RBZGRJbnRlcmZhY2VBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICAgIGNhc2UgTUVTU0FHRVMgOiB7Ci0JICAgIAlhY3Rpb25JRHMuYWRkKEFTREFkZE1lc3NhZ2VBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoT2JqZWN0IG9iamVjdCwgU3RyaW5nIHByb3BlcnR5KSB7Ci0JICAgIGlmIChnZXRUZXh0KCkuZXF1YWxzKHByb3BlcnR5KSkKLQkgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgcHJvcGVydHkpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJICByZXR1cm4gbnVsbDsKLQkgIH0KLQkgIAotCSAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCSAgaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJICByZXR1cm4gdHJ1ZTsKLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIGZhbHNlOwotCSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRGVzY3JpcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI2YzlhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMURlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5Ob3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEJpbmRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEltcG9ydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkSW50ZXJmYWNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRNZXNzYWdlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRTY2hlbWFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZFNlcnZpY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEludGVyZmFjZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRTZXJ2aWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSW5mb01hbmFnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMURlc2NyaXB0aW9uIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSURlc2NyaXB0aW9uIHsKLQlwcm90ZWN0ZWQgTGlzdCBjYXRlZ29yaWVzID0gbmV3IEFycmF5TGlzdCgpOwotCQotCXByb3RlY3RlZCBXMTFDYXRlZ29yeUFkYXB0ZXIgZ2V0Q2F0ZWdvcnkoaW50IGNhdGVnb3J5SWQpIHsKLQkJcmV0dXJuIGdldENhdGVnb3J5KGNhdGVnb3J5SWQsIGdldENhdGVnb3J5QWRhcHRlcnMoKSk7Ci0JfQotCQotCXByb3RlY3RlZCBXMTFDYXRlZ29yeUFkYXB0ZXIgZ2V0Q2F0ZWdvcnkoaW50IGNhdGVnb3J5SWQsIExpc3QgbGlzdCkgewotCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGFkYXB0ZXIgPSAoVzExQ2F0ZWdvcnlBZGFwdGVyKSBpdC5uZXh0KCk7Ci0JCQlpZiAoYWRhcHRlci5nZXRHcm91cFR5cGUoKSA9PSBjYXRlZ29yeUlkKSB7Ci0JCQkJcmV0dXJuIGFkYXB0ZXI7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwcm90ZWN0ZWQgTGlzdCBnZXRDYXRlZ29yeUFkYXB0ZXJzKCkgewotCSAgICAvLyBqdXN0IHNldCBjYXRlZ29yeWFkYXB0ZXJzJyBjaGlsZHJlbiBpZiBjYXRlZ29yeSBhZGFwdGVycyBhcmUKLQkgICAgLy8gYWxyZWFkeSBjcmVhdGVkCi0JICAgIGlmIChjYXRlZ29yaWVzLnNpemUoKSA9PSAwKSB7Ci0JICAgIAljYXRlZ29yaWVzID0gY3JlYXRlQ2F0ZWdvcnlBZGFwdGVycygpOwotCSAgICB9Ci0JICAgIGVsc2UgewotCSAgICAJVzExQ2F0ZWdvcnlBZGFwdGVyIGNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLklNUE9SVFMsIGNhdGVnb3JpZXMpOwotCSAgICAJY2F0ZWdvcnkuc2V0Q2hpbGRyZW4oZ2V0SW1wb3J0cygpKTsKLQkgICAgCQotCSAgICAJY2F0ZWdvcnkgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuVFlQRVMsIGNhdGVnb3JpZXMpOwotCSAgICAJYWRkTGlzdGVuZXJUb1R5cGVzKGNhdGVnb3J5KTsKLQotCSAgICAJY2F0ZWdvcnkgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuU0VSVklDRVMsIGNhdGVnb3JpZXMpOwotCSAgICAJY2F0ZWdvcnkuc2V0Q2hpbGRyZW4oZ2V0U2VydmljZXMoKSk7Ci0KLQkgICAgCWNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLkJJTkRJTkdTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWNhdGVnb3J5LnNldENoaWxkcmVuKGdldEJpbmRpbmdzKCkpOwotCi0JICAgIAljYXRlZ29yeSA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5JTlRFUkZBQ0VTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWNhdGVnb3J5LnNldENoaWxkcmVuKGdldEludGVyZmFjZXMoKSk7Ci0KLQkgICAgCWNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLk1FU1NBR0VTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWNhdGVnb3J5LnNldENoaWxkcmVuKGdldE1lc3NhZ2VzKCkpOwotCSAgICB9Ci0gICAgCXJldHVybiBjYXRlZ29yaWVzOwotCX0KLQkKLQkvLyBUT0RPOiBybWFoOiByaWdodCBub3cgaXQgbG9va3MgbGlrZSB0aGUgZGVmaW5pdGlvbiBuZWVkcyB0byBrbm93IHRvbyBtdWNoIGFib3V0IHRoZSBjYXRlZ29yaWVzCi0JLy8gV2Ugc2hvdWxkIG1ha2UgdGhlIGNhdGVnb3JpZXMgbW9yZSBzZWxmLXN1ZmZpY2llbnQuLi4uIHNvIGl0IGtub3dzIGhvdyB0byBjb21wdXRlIGl0J3MgY2hpbGRyZW4KLQkvLyBiYXNlZCBvbiBpdCdzIGtpbmQKLQlwcm90ZWN0ZWQgTGlzdCBjcmVhdGVDYXRlZ29yeUFkYXB0ZXJzKCkgewotCQlMaXN0IGNhdGVnb3JpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlMaXN0IGltcG9ydExpc3QgPSBnZXRJbXBvcnRzKCk7Ci0vLwkJTGlzdCBzY2hlbWFMaXN0ID0gZ2V0VHlwZXMoKTsKLQkJTGlzdCBzZXJ2aWNlTGlzdCA9IGdldFNlcnZpY2VzKCk7Ci0JCUxpc3QgYmluZGluZ0xpc3QgPSBnZXRCaW5kaW5ncygpOwotCQlMaXN0IGludGVyZmFjZUxpc3QgPSBnZXRJbnRlcmZhY2VzKCk7Ci0JCUxpc3QgbWVzc2FnZUxpc3QgPSBnZXRNZXNzYWdlcygpOwotCi0JCVN0cmluZyBjYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLklNUE9SVFNfSEVBREVSX1RFWFQ7Ci0JCUltYWdlIGNhdGVnb3J5SW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2ltcG9ydGhlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGNhdGVnb3J5ID0gbmV3IFcxMUNhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBpbXBvcnRMaXN0LCBXMTFDYXRlZ29yeUFkYXB0ZXIuSU1QT1JUUyk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQljYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLlRZUEVTX0hFQURFUl9URVhUOwotCQljYXRlZ29yeUltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy90eXBlc19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJY2F0ZWdvcnkgPSBuZXcgVzExVHlwZXNDYXRlZ29yeUFkYXB0ZXIodGhpcywgY2F0ZWdvcnlUaXRsZSwgY2F0ZWdvcnlJbWFnZSwgVzExQ2F0ZWdvcnlBZGFwdGVyLlRZUEVTKTsKLQkJYWRkTGlzdGVuZXJUb1R5cGVzKGNhdGVnb3J5KTsKLQkJcmVnaXN0ZXJMaXN0ZW5lcihjYXRlZ29yeSk7Ci0JCWNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLQkJCi0JCWNhdGVnb3J5VGl0bGUgPSBXMTFDYXRlZ29yeUFkYXB0ZXIuU0VSVklDRV9IRUFERVJfVEVYVDsKLQkJY2F0ZWdvcnlJbWFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvc2VydmljZWhlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJY2F0ZWdvcnkgPSBuZXcgVzExQ2F0ZWdvcnlBZGFwdGVyKHRoaXMsIGNhdGVnb3J5VGl0bGUsIGNhdGVnb3J5SW1hZ2UsIHNlcnZpY2VMaXN0LCBXMTFDYXRlZ29yeUFkYXB0ZXIuU0VSVklDRVMpOwotCQlyZWdpc3Rlckxpc3RlbmVyKGNhdGVnb3J5KTsKLQkJY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOwotCQkKLQkJY2F0ZWdvcnlUaXRsZSA9IFcxMUNhdGVnb3J5QWRhcHRlci5CSU5ESU5HX0hFQURFUl9URVhUOwotCQljYXRlZ29yeUltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9iaW5kaW5naGVhZGVyX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCQljYXRlZ29yeSA9IG5ldyBXMTFDYXRlZ29yeUFkYXB0ZXIodGhpcywgY2F0ZWdvcnlUaXRsZSwgY2F0ZWdvcnlJbWFnZSwgYmluZGluZ0xpc3QsIFcxMUNhdGVnb3J5QWRhcHRlci5CSU5ESU5HUyk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQljYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLklOVEVSRkFDRV9IRUFERVJfVEVYVDsKLQkJY2F0ZWdvcnlJbWFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcG9ydHR5cGVoZWFkZXJfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCWNhdGVnb3J5ID0gbmV3IFcxMUNhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBpbnRlcmZhY2VMaXN0LCBXMTFDYXRlZ29yeUFkYXB0ZXIuSU5URVJGQUNFUyk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQljYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLk1FU1NBR0VfSEVBREVSX1RFWFQ7Ci0JCWNhdGVnb3J5SW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL21lc3NhZ2VoZWFkZXJfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCWNhdGVnb3J5ID0gbmV3IFcxMUNhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBtZXNzYWdlTGlzdCwgVzExQ2F0ZWdvcnlBZGFwdGVyLk1FU1NBR0VTKTsKLQkJcmVnaXN0ZXJMaXN0ZW5lcihjYXRlZ29yeSk7Ci0JCWNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLQkJCi0JCXJldHVybiBjYXRlZ29yaWVzOwotCSAgfQotCQotCS8vIFNwZWNpYWwgY2FzZToKLQkvLyBXZSBuZWVkIHRvIGhhdmUgdGhlIFR5cGVzIG9iamVjdCBpbmZvcm0gb3VyIGZhY2FkZSAoVzExVHlwZXNDYXRlZ29yeUFkYXB0ZXIpIG9mIGl0J3MKLQkvLyBjaGFuZ2VzLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVzdCBvZiB0aGUgVzExQ2F0ZWdvcnlBZGFwdGVycyB3aGljaCBsaXN0ZW5zCi0JLy8gdG8gdGhlIERlZmluaXRpb24gb2JqZWN0LgotCXByaXZhdGUgdm9pZCBhZGRMaXN0ZW5lclRvVHlwZXMoVzExQ2F0ZWdvcnlBZGFwdGVyIGNhdGVnb3J5KSB7Ci0JCURlZmluaXRpb24gZGVmID0gKERlZmluaXRpb24pIHRoaXMuZ2V0VGFyZ2V0KCk7Ci0JCVR5cGVzIHR5cGVzID0gZGVmLmdldEVUeXBlcygpOwotCQlpZiAodHlwZXMgIT0gbnVsbCAmJiAhdHlwZXMuZUFkYXB0ZXJzKCkuY29udGFpbnMoY2F0ZWdvcnkpKSB7Ci0JCQl0eXBlcy5lQWRhcHRlcnMoKS5hZGQoY2F0ZWdvcnkpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuICgoRGVmaW5pdGlvbikgdGFyZ2V0KS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2VQcmVmaXgoKSB7Ci0JCVN0cmluZyB0bnMgPSBnZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJcmV0dXJuICgoRGVmaW5pdGlvbikgdGFyZ2V0KS5nZXRQcmVmaXgodG5zKTsKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0U2VydmljZXMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKChEZWZpbml0aW9uKSBnZXRUYXJnZXQoKSk7Ci0JCUxpc3Qgc2VydmljZXMgPSB1dGlsLmdldFNlcnZpY2VzKCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3Qoc2VydmljZXMsIGFkYXB0ZXJMaXN0KTsKLQkJCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRCaW5kaW5ncygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoKERlZmluaXRpb24pIGdldFRhcmdldCgpKTsKLQkJTGlzdCBiaW5kaW5ncyA9IHV0aWwuZ2V0QmluZGluZ3MoKTsKLQkJcG9wdWxhdGVBZGFwdGVyTGlzdChiaW5kaW5ncywgYWRhcHRlckxpc3QpOwotCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRJbnRlcmZhY2VzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbCgoRGVmaW5pdGlvbikgZ2V0VGFyZ2V0KCkpOwotCQlMaXN0IHBvcnRUeXBlcyA9IHV0aWwuZ2V0UG9ydFR5cGVzKCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3QocG9ydFR5cGVzLCBhZGFwdGVyTGlzdCk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRJbXBvcnRzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KCgoRGVmaW5pdGlvbikgdGFyZ2V0KS5nZXRFSW1wb3J0cygpLCBhZGFwdGVyTGlzdCk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRUeXBlcygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJVHlwZXMgdHlwZXMgPSAoKERlZmluaXRpb24pIHRhcmdldCkuZ2V0RVR5cGVzKCk7Ci0gICAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgICB7ICAKLQkJICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHR5cGVzLmdldFNjaGVtYXMoKSwgYWRhcHRlckxpc3QpOwotICAgICAgICB9ICAKLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoKERlZmluaXRpb24pIGdldFRhcmdldCgpKTsKLQkJTGlzdCBtZXNzYWdlcyA9IHV0aWwuZ2V0TWVzc2FnZXMoKTsKLQkJcG9wdWxhdGVBZGFwdGVyTGlzdChtZXNzYWdlcywgYWRhcHRlckxpc3QpOwotCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQotCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JCWlmIChkZWZpbml0aW9uLmdldFFOYW1lKCkgIT0gbnVsbCkgewotCQkJbmFtZSA9IGRlZmluaXRpb24uZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotCQlTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nWzNdOwotCQlhY3Rpb25JRHNbMF0gPSBBU0RBZGRTZXJ2aWNlQWN0aW9uLklEOwotCQlhY3Rpb25JRHNbMV0gPSBBU0RBZGRCaW5kaW5nQWN0aW9uLklEOwotCQlhY3Rpb25JRHNbMl0gPSBBU0RBZGRJbnRlcmZhY2VBY3Rpb24uSUQ7Ci0JCQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRJbXBvcnRDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZEltcG9ydENvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZFNjaGVtYUNvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkU2NoZW1hQ29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkU2VydmljZUNvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkU2VydmljZUNvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZEJpbmRpbmdDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZEJpbmRpbmdDb21tYW5kKChEZWZpbml0aW9uKSB0YXJnZXQpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRJbnRlcmZhY2VDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZEludGVyZmFjZUNvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7CQotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRNZXNzYWdlQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRNZXNzYWdlQ29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsJCi0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEVkaXROYW1lc3BhY2VzQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldE5hbWVzcGFjZXNJbmZvKCkgewotCQlET01OYW1lc3BhY2VJbmZvTWFuYWdlciBuYW1lc3BhY2VJbmZvTWFuYWdlciA9IG5ldyBET01OYW1lc3BhY2VJbmZvTWFuYWdlcigpOwotCQlFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JCXJldHVybiBuYW1lc3BhY2VJbmZvTWFuYWdlci5nZXROYW1lc3BhY2VJbmZvTGlzdChlbGVtZW50KTsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gImRlZmluaXRpb24iOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBjaGlsZHJlbiA9IGdldENhdGVnb3J5QWRhcHRlcnMoKTsKLQkJcmV0dXJuIChJVHJlZUVsZW1lbnRbXSkgY2hpbGRyZW4udG9BcnJheShuZXcgSVRyZWVFbGVtZW50WzBdKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChmaW5hbCBOb3RpZmljYXRpb24gbXNnKSB7Ci0JCS8vIFRPRE86IHJtYWg6IFRoaXMgY29kZSBzaG91bGQgYmUgbW92ZWQgaW50byBXMTFDYXRlZ29yeUFkYXB0ZXIKLQkJY2xhc3MgQ2F0ZWdvcnlOb3RpZmljYXRpb24gZXh0ZW5kcyBOb3RpZmljYXRpb25JbXBsIHsKLQkJCXByb3RlY3RlZCBPYmplY3QgY2F0ZWdvcnk7Ci0JCQkKLQkJCXB1YmxpYyBDYXRlZ29yeU5vdGlmaWNhdGlvbihPYmplY3QgY2F0ZWdvcnkpIHsKLQkJCQlzdXBlcihtc2cuZ2V0RXZlbnRUeXBlKCksIG1zZy5nZXRPbGRWYWx1ZSgpLCBtc2cuZ2V0TmV3VmFsdWUoKSwgbXNnLmdldFBvc2l0aW9uKCkpOwotCQkJCXRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTsKLQkJCX0KLQkJCQotCQkJcHVibGljIE9iamVjdCBnZXROb3RpZmllcigpIHsKLQkJCQlyZXR1cm4gY2F0ZWdvcnk7Ci0JCQl9Ci0JCQkKLQkJCXB1YmxpYyBPYmplY3QgZ2V0RmVhdHVyZSgpIHsKLQkJCQlyZXR1cm4gbXNnLmdldEZlYXR1cmUoKTsKLQkJCX0KLQkJfQotCi0JCWlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VJbXBvcnRzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLklNUE9SVFMpOwotCQkJQXNzZXJ0LmlzVHJ1ZShhZGFwdGVyICE9IG51bGwpOwotCQkJYWRhcHRlci5zZXRDaGlsZHJlbihnZXRJbXBvcnRzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRVR5cGVzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLlRZUEVTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0SW1wb3J0cygpKTsKLQkJCW5vdGlmeUxpc3RlbmVycyhuZXcgQ2F0ZWdvcnlOb3RpZmljYXRpb24oYWRhcHRlciksIGFkYXB0ZXIuZ2V0VGV4dCgpKTsKLQkJfQotCQllbHNlIGlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpKSB7Ci0JCQlXMTFDYXRlZ29yeUFkYXB0ZXIgYWRhcHRlciA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5TRVJWSUNFUyk7Ci0JCQlBc3NlcnQuaXNUcnVlKGFkYXB0ZXIgIT0gbnVsbCk7Ci0JCQlhZGFwdGVyLnNldENoaWxkcmVuKGdldFNlcnZpY2VzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRUJpbmRpbmdzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLkJJTkRJTkdTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0QmluZGluZ3MoKSk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobmV3IENhdGVnb3J5Tm90aWZpY2F0aW9uKGFkYXB0ZXIpLCBhZGFwdGVyLmdldFRleHQoKSk7Ci0JCX0KLQkJZWxzZSBpZiAobXNnLmdldEZlYXR1cmUoKSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLklOVEVSRkFDRVMpOwotCQkJQXNzZXJ0LmlzVHJ1ZShhZGFwdGVyICE9IG51bGwpOwotCQkJYWRhcHRlci5zZXRDaGlsZHJlbihnZXRJbnRlcmZhY2VzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRU1lc3NhZ2VzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLk1FU1NBR0VTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0TWVzc2FnZXMoKSk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobmV3IENhdGVnb3J5Tm90aWZpY2F0aW9uKGFkYXB0ZXIpLCBhZGFwdGVyLmdldFRleHQoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobnVsbCwgbnVsbCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUVuZFBvaW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUVuZFBvaW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNDEwNWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFFbmRQb2ludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0QWRkcmVzc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0QmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQuVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRFbmRQb2ludEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldE5ld0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMUVuZFBvaW50IGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUVuZFBvaW50LCBJQVNET2JqZWN0TGlzdGVuZXIgewotIAotICAgIHByb3RlY3RlZCBMaXN0IGFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cyA9IG51bGw7Ci0gICAgcHJvdGVjdGVkIExpc3QgdGhpbmdzVG9MaXN0ZW5UbyA9IG51bGw7Ci0gICAgCi0JcHVibGljIFN0cmluZyBnZXRBZGRyZXNzKCkgewotICAgICAgICBMaXN0IGxpc3QgPSBnZXRBZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGxpc3Quc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIFcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIgYWRkcmVzc0VFID0gKFcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIpbGlzdC5nZXQoMCk7Ci0gICAgICAgICAgcmV0dXJuIGFkZHJlc3NFRS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICB9CQotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0QXBwbGljYWJsZVByb3RvY29sKCkgewotCQlDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGZhY3RvcnlSZWdpc3RyeSA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJTGlzdCBwcm90b2NvbHMgPSBmYWN0b3J5UmVnaXN0cnkuZ2V0QmluZGluZ0V4dGVuc2lvbk5hbWVzKCk7Ci0JCXJldHVybiBwcm90b2NvbHM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFByb3RvY29sKFN0cmluZyBuZXdQcm90b2NvbCkgewotCQlDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGZhY3RvcnlSZWdpc3RyeSA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yID0gZmFjdG9yeVJlZ2lzdHJ5LmdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWUobmV3UHJvdG9jb2wpOwotCQlpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgY3VycmVudEFkZHJlc3MgPSBnZXRBZGRyZXNzKCk7Ci0JCQlpZiAoY3VycmVudEFkZHJlc3MgIT0gbnVsbCkgewotCQkJCWNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGN1cnJlbnRBZGRyZXNzKTsKLQkJCX0KLQotCQkJUG9ydCBwb3J0ID0gZ2V0UG9ydCgpOwotICAgIAkJLy93dHAgYnVnIDIyMTAyNCAtIG5hbWVzcGFjZSBhbmQgcHJlZml4ZXMgYXJlIG5vdCBhZGRlZCB3aGVuIGFkZCBuZXcgcG9ydAotCQkJYWRkUmVxdWlyZWROYW1lc3BhY2VzKHBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBjb250ZW50R2VuZXJhdG9yKTsKLQkJCWNvbnRlbnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0Q29udGVudChwb3J0KTsKLQkJfQotCX0KLQotICAgIHByb3RlY3RlZCBMaXN0IGdldEFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cygpCi0gICAgeyAgICAgICAKLSAgICAgICAgYWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICB0aGluZ3NUb0xpc3RlblRvID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgZ2V0VGFyZ2V0KCk7ICAgICAgICAgIAotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApCi0gICAgICAgIHsgICAKLSAgICAgICAgICBOb3RpZmllciBpdGVtID0gKE5vdGlmaWVyKWl0Lm5leHQoKTsKLSAgICAgICAgICBBZGFwdGVyIGFkYXB0ZXIgPSBjcmVhdGVBZGFwdGVyKGl0ZW0pOwotICAgICAgICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcikKLSAgICAgICAgICB7ICAKLSAgICAgICAgICAgIGFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cy5hZGQoYWRhcHRlcik7Ci0gICAgICAgICAgfSAgICAgICAgICAgICAKLSAgICAgICAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIElBU0RPYmplY3QpCi0gICAgICAgICAgeyAgCi0gICAgICAgICAgICB0aGluZ3NUb0xpc3RlblRvLmFkZChhZGFwdGVyKTsKLSAgICAgICAgICB9ICAKLSAgICAgICAgfQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB0aGluZ3NUb0xpc3RlblRvLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICBJQVNET2JqZWN0IG9iamVjdCA9IChJQVNET2JqZWN0KWkubmV4dCgpOwotICAgICAgICAgIG9iamVjdC5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgICAgICB9ICAKLSAgICAgICAKLSAgICAgIHJldHVybiBhZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHM7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGNsZWFyQWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzKCkKLSAgICB7ICAgIAotICAgICAgaWYgKHRoaW5nc1RvTGlzdGVuVG8gIT0gbnVsbCkKLSAgICAgIHsgIAotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB0aGluZ3NUb0xpc3RlblRvLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICBJQVNET2JqZWN0IG9iamVjdCA9IChJQVNET2JqZWN0KWkubmV4dCgpOwotICAgICAgICAgIG9iamVjdC51bnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRoaW5nc1RvTGlzdGVuVG8gPSBudWxsOwotICAgICAgYWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzID0gbnVsbDsKLSAgICB9Ci0KLQlwdWJsaWMgSUJpbmRpbmcgZ2V0QmluZGluZygpIHsKLQkJaWYgKGdldFBvcnQoKS5nZXRFQmluZGluZygpICE9IG51bGwpIHsKLQkJCXJldHVybiAoSUJpbmRpbmcpIGNyZWF0ZUFkYXB0ZXIoZ2V0UG9ydCgpLmdldEVCaW5kaW5nKCkpOwotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBnZXRQb3J0KCkuZ2V0TmFtZSgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZU5hbWUoKSB7Ci0JICByZXR1cm4gZ2V0QWRkcmVzcygpOwotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldFR5cGUoKSB7Ci0JCXJldHVybiBnZXRCaW5kaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBQb3J0IGdldFBvcnQoKSB7Ci0JCXJldHVybiAoUG9ydCkgdGFyZ2V0OwotCX0KLQkKLQlwdWJsaWMgSVNlcnZpY2UgZ2V0T3duZXJTZXJ2aWNlKCkgewotCQlyZXR1cm4gKElTZXJ2aWNlKSBvd25lcjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotICAgIENvbGxlY3Rpb24gYWN0aW9uSURzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgYWN0aW9uSURzLmFkZChBU0RBZGRFbmRQb2ludEFjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9CSU5ESU5HKTsgLy8kTk9OLU5MUy0xJAotICAgIGFjdGlvbklEcy5hZGQoQVNEU2V0TmV3QmluZGluZ0FjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldEJpbmRpbmdDb21tYW5kKElCaW5kaW5nIGJpbmRpbmcpIHsKLQkJVzExQmluZGluZyB3MTFCaW5kaW5nID0gKFcxMUJpbmRpbmcpIGJpbmRpbmc7Ci0JCXJldHVybiBuZXcgVzExU2V0QmluZGluZ0NvbW1hbmQoKFBvcnQpIHRhcmdldCwgKEJpbmRpbmcpIHcxMUJpbmRpbmcuZ2V0VGFyZ2V0KCkpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRBZGRyZXNzQ29tbWFuZChTdHJpbmcgbmV3QWRkcmVzcykgewotCQlyZXR1cm4gbmV3IFcxMVNldEFkZHJlc3NDb21tYW5kKChQb3J0KSB0aGlzLmdldFRhcmdldCgpLCBuZXdBZGRyZXNzKTsKLQl9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICAvLyB0aGlzIGlzIGNhbGxlZCB3aGVuIG9uZSBvZiB0aGUgJ2FkZHJlc3MnIGV4dGVuc2liaWxpdHkgZWxlbWVudCBhZGFwdGVycyB3ZSdyZSBsaXN0ZW5pbmcgdG8gY2hhbmdlcwotICAgICAgLy8KLSAgICAgIGNsZWFyQWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzKCk7ICAgICAgCi0gICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgbnVsbCk7Ci0gICAgfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcG9ydF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gInBvcnQiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIElUcmVlRWxlbWVudC5FTVBUWV9MSVNUOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpIHsKLQkJU3RyaW5nIHByb3RvY29sID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCUxpc3QgbGlzdCA9IGdldEFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAobGlzdC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIAlXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyIGFkZHJlc3NFRSA9IChXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKWxpc3QuZ2V0KDApOwotICAgICAgICAJT2JqZWN0IHRhcmdldCA9IGFkZHJlc3NFRS5nZXRUYXJnZXQoKTsKLQkJCWlmICh0YXJnZXQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJCVdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KSB0YXJnZXQ7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IHdzZGxFbGVtZW50LmdldEVsZW1lbnQoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJCQkKLQkJCQlpZiAobmFtZXNwYWNlICE9IG51bGwpIHsKLQkJCQkJQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSBmYWN0b3J5UmVnaXN0cnkgPSBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCQkJCUNvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IGZhY3RvcnlSZWdpc3RyeS5nZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lc3BhY2UobmFtZXNwYWNlKTsKLQkJCQkJaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkgewotCQkJCQkJcHJvdG9jb2wgPSBjb250ZW50R2VuZXJhdG9yLmdldFByb3RvY29sKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0gICAgICAgIH0JCi0KLQkJcmV0dXJuIHByb3RvY29sOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYWRkUmVxdWlyZWROYW1lc3BhY2VzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yKQotCXsKLQkgIGlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0JICB7Ci0JICAgIFN0cmluZ1tdIG5hbWVzcGFjZU5hbWVzID0gY29udGVudEdlbmVyYXRvci5nZXRSZXF1aXJlZE5hbWVzcGFjZXMoKTsKLQkgICAgU3RyaW5nW10gcHJlZmVycmVkUHJlZml4ZXMgPSBuZXcgU3RyaW5nIFtuYW1lc3BhY2VOYW1lcy5sZW5ndGhdOwotCSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbmFtZXNwYWNlTmFtZXMubGVuZ3RoOyBpbmRleCsrKQotCSAgICB7Ci0JICAgICAgcHJlZmVycmVkUHJlZml4ZXNbaW5kZXhdID0gY29udGVudEdlbmVyYXRvci5nZXRQcmVmZXJyZWROYW1lc3BhY2VQcmVmaXgobmFtZXNwYWNlTmFtZXNbaW5kZXhdKTsKLQkgICAgfQotCi0JICAgIE1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQkgICAgCi0JICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlTmFtZXMubGVuZ3RoOyBpKyspCi0JICAgIHsKLQkgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbmFtZXNwYWNlTmFtZXNbaV07Ci0JICAgICAgaWYgKCFtYXAuY29udGFpbnNWYWx1ZShuYW1lc3BhY2UpKQotCSAgICAgIHsKLQkgICAgICAgIFN0cmluZyBwcmVmaXggPSAoaSA8IHByZWZlcnJlZFByZWZpeGVzLmxlbmd0aCkgPyBwcmVmZXJyZWRQcmVmaXhlc1tpXSA6ICJwMCI7Ci0JICAgICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KHByZWZpeCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIHByZWZpeCA9IGNvbXB1dGVVbmlxdWVQcmVmaXgoInAiLCBtYXApOwotCSAgICAgICAgfQotCSAgICAgICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotCSAgICAgIH0KLQkgICAgfQotCSAgfQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVVbmlxdWVQcmVmaXgoU3RyaW5nIGJhc2UsIE1hcCB0YWJsZSkKLSAgewotICAgIGludCBpID0gMDsKLSAgICBTdHJpbmcgcHJlZml4ID0gYmFzZTsKLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpZiAoIXRhYmxlLmNvbnRhaW5zS2V5KHByZWZpeCkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwcmVmaXggPSBiYXNlICsgaTsKLSAgICAgICAgaSsrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJlZml4OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUltcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFJbXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAwODFlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUltcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMU9wZW5JbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFJbXBvcnQgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJSW1wb3J0IHsKLQotCXB1YmxpYyBJbXBvcnQgZ2V0SW1wb3J0KCkgewotCQlyZXR1cm4gKEltcG9ydCkgdGFyZ2V0OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIGdldEltcG9ydCgpLmdldE5hbWVzcGFjZVVSSSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVByZWZpeCgpIHsKLQkJcmV0dXJuIGdldEltcG9ydCgpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRQcmVmaXgoZ2V0TmFtZXNwYWNlKCkpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkgewotCQlyZXR1cm4gZ2V0SW1wb3J0KCkuZ2V0TG9jYXRpb25VUkkoKTsKLQl9Ci0JCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpIHRhcmdldDsKLQkJcmV0dXJuIHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0JCVN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbMl07Ci0JCWFjdGlvbklEc1swXSA9IFcxMU9wZW5JbXBvcnRBY3Rpb24uSUQ7Ci0JCWFjdGlvbklEc1sxXSA9IEFTRERlbGV0ZUFjdGlvbi5JRDsgICAgCi0JCXJldHVybiBhY3Rpb25JRHM7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvaW1wb3J0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAiaW1wb3J0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCXJldHVybiBJVHJlZUVsZW1lbnQuRU1QVFlfTElTVDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExSW50ZXJmYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGNlZDkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExSW50ZXJmYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZE9wZXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3BlcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExSW50ZXJmYWNlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUludGVyZmFjZSB7Ci0KLQlwdWJsaWMgTGlzdCBnZXRPcGVyYXRpb25zKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KCgoUG9ydFR5cGUpIHRhcmdldCkuZ2V0RU9wZXJhdGlvbnMoKSwgYWRhcHRlckxpc3QpOwotCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gKChQb3J0VHlwZSkgdGFyZ2V0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgTGlzdCBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0RBZGRPcGVyYXRpb25BY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLSAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgICBhY3Rpb25JRHMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRPcGVyYXRpb25Db21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZE9wZXJhdGlvbkNvbW1hbmQoKFBvcnRUeXBlKSB0YXJnZXQpOwotCX0KLQkKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3BvcnR0eXBlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAicG9ydFR5cGUiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBvcGVyYXRpb25zID0gZ2V0T3BlcmF0aW9ucygpOwotCQlJVHJlZUVsZW1lbnRbXSB0cmVlRWxlbWVudHMgPSBuZXcgSVRyZWVFbGVtZW50W29wZXJhdGlvbnMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYXRpb25zLnNpemUoKTsgaW5kZXgrKykgewotCQkJdHJlZUVsZW1lbnRzW2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIG9wZXJhdGlvbnMuZ2V0KGluZGV4KTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50czsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMU1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzFiOWE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMUFkZFBhcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkUGFydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotCi0KLXB1YmxpYyBjbGFzcyBXMTFNZXNzYWdlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSU1lc3NhZ2UgewotCi0JcHVibGljIExpc3QgZ2V0UGFydHMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0vLwkJcG9wdWxhdGVBZGFwdGVyTGlzdCgoKE1lc3NhZ2UpIHRhcmdldCkuZ2V0RVBhcnRzKCksIGFkYXB0ZXJMaXN0KTsKLQkJSXRlcmF0b3IgcGFydHMgPSAoKE1lc3NhZ2UpIHRhcmdldCkuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotCQkJTm90aWZpZXIgY29tcG9uZW50ID0gKE5vdGlmaWVyKSBwYXJ0cy5uZXh0KCk7Ci0JCQlBZGFwdGVyIGFkYXB0ZXIgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChjb21wb25lbnQpOwotCQkJYWRhcHRlckxpc3QuYWRkKGFkYXB0ZXIpOwkJCQotCQl9Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoSURlc2NyaXB0aW9uKSBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCWlmICgoKE1lc3NhZ2UpIHRhcmdldCkuZ2V0UU5hbWUoKSAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gKChNZXNzYWdlKSB0YXJnZXQpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCX0KLQkJCi0JCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgTGlzdCBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgYWN0aW9uSURzLmFkZChXMTFBZGRQYXJ0QWN0aW9uLklEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkUGFydENvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkUGFydENvbW1hbmQoKE1lc3NhZ2UpIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gIm1lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBwYXJ0cyA9IGdldFBhcnRzKCk7Ci0JCUlUcmVlRWxlbWVudFtdIHRyZWVFbGVtZW50cyA9IG5ldyBJVHJlZUVsZW1lbnRbcGFydHMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0cy5zaXplKCk7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50c1tpbmRleF0gPSAoSVRyZWVFbGVtZW50KSBwYXJ0cy5nZXQoaW5kZXgpOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJlZUVsZW1lbnRzOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlpZiAoZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMU1lc3NhZ2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZVJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2RhNGQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFBZGRQYXJ0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3TWVzc2FnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnZpc2l0b3IuVzExRmluZElubmVyRWxlbWVudFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkRmF1bHRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3BlcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Nb2RlbERpYWdub3N0aWNJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Qcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIFcxMU1lc3NhZ2VSZWZlcmVuY2UgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJTWVzc2FnZVJlZmVyZW5jZSwgSUFTRE9iamVjdExpc3RlbmVyCi17Ci0gIHByb3RlY3RlZCBpbnQgbWVzc2FnZUtpbmQgPSAtMTsKLSAgcHJvdGVjdGVkIExpc3QgcGFyYW1ldGVycyA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IG90aGVyVGhpbmdzVG9MaXN0ZW5UbyA9IG51bGw7Ci0gIAotICBwdWJsaWMgVzExTWVzc2FnZVJlZmVyZW5jZShpbnQgbWVzc2FnZUtpbmQpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VLaW5kID0gbWVzc2FnZUtpbmQ7Ci0gIH0KLQotICBwdWJsaWMgSU9wZXJhdGlvbiBnZXRPd25lck9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gKElPcGVyYXRpb24pIG93bmVyOwotICB9Ci0gIAotICAvKgotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlU3RyaW5nKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpIHsKLQkgIFN0cmluZyBzdHJpbmcgPSBudWxsOwotCi0JICBPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIoKTsKLQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCSAgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyID0gKFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpb2JqZWN0OwotCQkgIFN0cmluZyBuZXdTdHJpbmcgPSBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyLmdldFByb2R1Y3RTdHJpbmcoa2V5LCBhcmdzKTsKLQkJICBpZiAobmV3U3RyaW5nICE9IG51bGwpIHsKLQkJCSAgc3RyaW5nID0gbmV3U3RyaW5nOwotCQkgIH0KLQkgIH0KLQotCSAgcmV0dXJuIHN0cmluZzsKLSAgfQotICAqLwotICAKLSAgLy8gQ29udmVuaWVuY2UgbWV0aG9kCi0gIHB1YmxpYyBNZXNzYWdlUmVmZXJlbmNlIGdldE1lc3NhZ2VSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIChNZXNzYWdlUmVmZXJlbmNlKSB0YXJnZXQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjb21wdXRlTWVzc2FnZUtpbmQoKQotICB7Ci0gICAgaWYgKGdldE1lc3NhZ2VSZWZlcmVuY2UoKSBpbnN0YW5jZW9mIElucHV0KQotICAgIHsKLSAgICAgIG1lc3NhZ2VLaW5kID0gS0lORF9JTlBVVDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIGluc3RhbmNlb2YgT3V0cHV0KQotICAgIHsKLSAgICAgIG1lc3NhZ2VLaW5kID0gS0lORF9PVVRQVVQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKGdldE1lc3NhZ2VSZWZlcmVuY2UoKSBpbnN0YW5jZW9mIEZhdWx0KQotICAgICAgbWVzc2FnZUtpbmQgPSBLSU5EX0ZBVUxUOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRLaW5kKCkKLSAgewotCSAgaWYgKG1lc3NhZ2VLaW5kID09IC0xKQotCSAgewotCQkgIGNvbXB1dGVNZXNzYWdlS2luZCgpOwotCSAgfQotCSAgcmV0dXJuIG1lc3NhZ2VLaW5kOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0JICBNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JICBpZiAobWVzc2FnZVJlZi5nZXROYW1lKCkgIT0gbnVsbCkgewotCQkgIHJldHVybiBtZXNzYWdlUmVmLmdldE5hbWUoKTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQYXJhbWV0ZXJzKCkKLSAgewotCSAgTGlzdCBwYXJhbWV0ZXJzID0gbmV3IEFycmF5TGlzdCgpOwotCSAgTGlzdCBwYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IGdldE1lc3NhZ2VSZWZlcmVuY2UoKTsKLQkgIGlmIChtZXNzYWdlUmVmICE9IG51bGwpIHsKLQkJICBpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCSAgaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKSAhPSBudWxsKSB7Ci0JCQkJICBwYXJ0cyA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKTsKLQkJCSAgfQotCQkgIH0KLQkgIH0KLQkgIAotCSAgcG9wdWxhdGVBZGFwdGVyTGlzdChwYXJ0cywgcGFyYW1ldGVycyk7Ci0JICAKLQkgIG90aGVyVGhpbmdzVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIFdTRExWaXNpdG9yRm9yUGFyYW1ldGVycyB2aXNpdG9yRm9yUGFyYW1ldGVycyA9IG5ldyBXU0RMVmlzaXRvckZvclBhcmFtZXRlcnMoKTsKLSAgICAgIHZpc2l0b3JGb3JQYXJhbWV0ZXJzLnZpc2l0TWVzc2FnZVJlZmVyZW5jZShtZXNzYWdlUmVmKTsKLSAgICAgIHBvcHVsYXRlQWRhcHRlckxpc3QodmlzaXRvckZvclBhcmFtZXRlcnMuY29uY3JldGVDb21wb25lbnRzLCBvdGhlclRoaW5nc1RvTGlzdGVuVG8pOwotICAgICAgcG9wdWxhdGVBZGFwdGVyTGlzdCh2aXNpdG9yRm9yUGFyYW1ldGVycy50aGluZ3NUb0xpc3RlblRvLCBvdGhlclRoaW5nc1RvTGlzdGVuVG8pOwotICAgICAgCi0gICAgICAvLyBub3cgd2UgbGlzdGVuIHRvIGFsbCB0aGUgJ3RoaW5ncyB3ZSBuZWVkIHRvIGxpc3RlbiB0bycKLSAgICAgIC8vCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvdGhlclRoaW5nc1RvTGlzdGVuVG8uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBBZGFwdGVyIGFkYXB0ZXIgPSAoQWRhcHRlcikgaS5uZXh0KCk7Ci0gICAgICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgSUFTRE9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgIElBU0RPYmplY3QgYXNkT2JqZWN0ID0gKElBU0RPYmplY3QpIGFkYXB0ZXI7Ci0gICAgICAgICAgYXNkT2JqZWN0LnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQkgIAotCSAgcmV0dXJuIHBhcmFtZXRlcnM7Ci0gICAgfQotICAKLSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLSAgewotICAgIC8vIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIG9uZSBvZiB0aGUgJ290aGVyVGhpbmdzVG9MaXN0ZW5UbycgaGFzIGNoYW5nZWQKLSAgICAvLyB3aGVuIG9uZSBvZiB0aGVzZSB0aGluZ3MgY2hhbmdlcyBpdCBtZWFucyBvdXIgcGFyYW10ZXIgbGlzdCBtYXkgaGF2ZSBjaGFuZ2VzCi0gICAgLy8gc28gd2UgbmVlZCB0byByZWNvbXB1dGUgaXQKLS8vICAgIE9iamVjdCBub3RpZmllciA9IG51bGw7Ci0vLyAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQWRhcHRlcikKLS8vICAgIHsKLS8vICAgICAgbm90aWZpZXIgPSAoKEFkYXB0ZXIpb2JqZWN0KS5nZXRUYXJnZXQoKTsKLS8vICAgIH0gIAotLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJzb21ldGhpbmcgaW4gdGhlICdvdGhlclRoaW5nc1RvTGlzdGVuVG8nIGxpc3QgaGFzIGNoYW5nZWQgIiArIG5vdGlmaWVyKTsgICAgCi0gICAgY2xlYXJQYXJhbWV0ZXJzKCk7Ci0gICAgbm90aWZ5TGlzdGVuZXJzKHRoaXMsIG51bGwpOyAgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNsZWFyUGFyYW1ldGVycygpCi0gIHsKLSAgICBpZiAob3RoZXJUaGluZ3NUb0xpc3RlblRvICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpID0gb3RoZXJUaGluZ3NUb0xpc3RlblRvLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQWRhcHRlciBhZGFwdGVyID0gKEFkYXB0ZXIpIGkubmV4dCgpOwotICAgICAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIElBU0RPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICBJQVNET2JqZWN0IGFzZE9iamVjdCA9IChJQVNET2JqZWN0KSBhZGFwdGVyOwotICAgICAgICAgIGFzZE9iamVjdC51bnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcGFyYW1ldGVycyA9IG51bGw7ICAgIAotICAgIG90aGVyVGhpbmdzVG9MaXN0ZW5UbyA9IG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG1zZykKLSAgewotICAgIGNsZWFyUGFyYW1ldGVycygpOyAgICAKLSAgICBzdXBlci5ub3RpZnlDaGFuZ2VkKG1zZyk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KQotICB7Ci0JICBMaXN0IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBhY3Rpb25zLmFkZChBU0RBZGRPcGVyYXRpb25BY3Rpb24uSUQpOwkgIAotCSAgYWN0aW9ucy5hZGRBbGwoKChXMTFPcGVyYXRpb24pIGdldE93bmVyT3BlcmF0aW9uKCkpLmdldFZhbGlkSW5wdXRPdXRwdUFjdGlvbnMoKSk7IAotCSAgYWN0aW9ucy5hZGQoQVNEQWRkRmF1bHRBY3Rpb24uSUQpOwotCSAgYWN0aW9ucy5hZGQoVzExQWRkUGFydEFjdGlvbi5JRCk7Ci0JICBhY3Rpb25zLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotCSAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfTUVTU0FHRSk7IC8vJE5PTi1OTFMtMSQKLQkgIGFjdGlvbnMuYWRkKFcxMVNldE5ld01lc3NhZ2VBY3Rpb24uSUQpOwotCSAgYWN0aW9ucy5hZGQoVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uLklEKTsKLQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9FTkRfSUQpOwotLy8gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotLy8gICAgICBhY3Rpb25zLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotLy8gICAgfQotCi0JICBTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nW2FjdGlvbnMuc2l6ZSgpXTsKLQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhY3Rpb25zLnNpemUoKTsgaW5kZXgrKykgewotCQkgIGFjdGlvbklEc1tpbmRleF0gPSAoU3RyaW5nKSBhY3Rpb25zLmdldChpbmRleCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiBhY3Rpb25JRHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21tYW5kIGdldFJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChJUGFyYW1ldGVyIGxlZnRTaWJsaW5nLCBJUGFyYW1ldGVyIHJpZ2h0U2libGluZywgSVBhcmFtZXRlciBtb3ZpbmdQYXJhbWV0ZXIpIHsKLQkgIHJldHVybiBuZXcgVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kKGxlZnRTaWJsaW5nLCByaWdodFNpYmxpbmcsIG1vdmluZ1BhcmFtZXRlcik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21tYW5kIGdldEFkZFBhcmFtdGVyQ29tbWFuZCgpIHsKLSAgICAgIENvbW1hbmQgY29tbWFuZCA9IG51bGw7Ci0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilnZXRNZXNzYWdlUmVmZXJlbmNlKCkuZUNvbnRhaW5lcigpOwotICAgICAgaWYgKGdldEtpbmQoKSA9PSBLSU5EX0lOUFVUKQotICAgICAgeyAgICAKLSAgICAgICAgY29tbWFuZCA9IG5ldyBXMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uKTsKLSAgICAgIH0gIAotICAgICAgZWxzZSBpZiAoZ2V0S2luZCgpID09IEtJTkRfT1VUUFVUKQotICAgICAgewotICAgICAgICBjb21tYW5kID0gbmV3IFcxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uKTsgICAgICAgIAotICAgICAgfSAKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY29tbWFuZCA9IG5ldyBXMTFBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCAoRmF1bHQpZ2V0TWVzc2FnZVJlZmVyZW5jZSgpKTsgICAgICAgIAotICAgICAgfSAKLSAgICAgIHJldHVybiBjb21tYW5kOwotICB9ICAKLSAgCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCSAgICBpZiAoZ2V0S2luZCgpID09IEtJTkRfSU5QVVQpCi0JICAgIHsKLQkgICAgCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2lucHV0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX09VVFBVVCkKLQkgICAgewotCSAgICAJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvb3V0cHV0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX0ZBVUxUKQotCSAgICB7Ci0JICAgIAlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9mYXVsdF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkgICAgfQotCSAgICByZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCSAgICBpZiAoZ2V0S2luZCgpID09IEtJTkRfSU5QVVQpCi0JICAgIHsKLQkgICAgICByZXR1cm4gImlucHV0IjsgLy8kTk9OLU5MUy0xJAotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX09VVFBVVCkKLQkgICAgewotCSAgICAgIHJldHVybiAib3V0cHV0IjsgLy8kTk9OLU5MUy0xJAotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX0ZBVUxUKQotCSAgICB7Ci0JICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLQkgICAgfQotCSAgICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0gICAgCi0JLyoKLQkgKiBAZGVwcmVjYXRlZC4gIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUuCi0JICogVXNlIGdldFNpbXBsaWZpZWRQYXJhbWV0ZXJzKCkuCi0JICovCi0JcHVibGljIExpc3QgZ2V0UGFyYW1ldGVyczIoKQotCXsKLQkJcmV0dXJuIGdldFNpbXBsaWZpZWREaWFnbm9zdGljTWVzc2FnZXMoKTsKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0U2ltcGxpZmllZFBhcmFtZXRlcnMoKQotICAgIHsKLQkgIGlmIChwYXJhbWV0ZXJzID09IG51bGwpCi0JICB7Ci0JICAgIHBhcmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIG90aGVyVGhpbmdzVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzIHZpc2l0b3JGb3JQYXJhbWV0ZXJzID0gbmV3IFdTRExWaXNpdG9yRm9yUGFyYW1ldGVycygpOwotCSAgICB2aXNpdG9yRm9yUGFyYW1ldGVycy52aXNpdE1lc3NhZ2VSZWZlcmVuY2UoZ2V0TWVzc2FnZVJlZmVyZW5jZSgpKTsKLQkgICAgcG9wdWxhdGVBZGFwdGVyTGlzdCh2aXNpdG9yRm9yUGFyYW1ldGVycy5jb25jcmV0ZUNvbXBvbmVudHMsIHBhcmFtZXRlcnMpOwotCSAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHZpc2l0b3JGb3JQYXJhbWV0ZXJzLnRoaW5nc1RvTGlzdGVuVG8sIG90aGVyVGhpbmdzVG9MaXN0ZW5Ubyk7Ci0KLQkgICAgLy8gbm93IHdlIGxpc3RlbiB0byBhbGwgdGhlICd0aGluZ3Mgd2UgbmVlZCB0byBsaXN0ZW4gdG8nCi0JICAgIC8vCi0JICAgIGZvciAoSXRlcmF0b3IgaSA9IG90aGVyVGhpbmdzVG9MaXN0ZW5Uby5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JICAgIHsKLQkgICAgICBBZGFwdGVyIGFkYXB0ZXIgPSAoQWRhcHRlcikgaS5uZXh0KCk7Ci0JICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotCSAgICAgIHsKLQkgICAgICAgIElBU0RPYmplY3QgYXNkT2JqZWN0ID0gKElBU0RPYmplY3QpIGFkYXB0ZXI7Ci0JICAgICAgICBhc2RPYmplY3QucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkgICAgICB9Ci0JICAgIH0gCi0JICB9Ci0KLQkgIHJldHVybiBwYXJhbWV0ZXJzOwotCX0gICAgCi0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotICAgICAgLyoKLQkJTGlzdCBwYXJ0cyA9IGdldFBhcmFtZXRlcnMoKTsKLQkJSVRyZWVFbGVtZW50W10gdHJlZUVsZW1lbnRzID0gbmV3IElUcmVlRWxlbWVudFtwYXJ0cy5zaXplKCldOwotCQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzLnNpemUoKTsgaW5kZXgrKykgewotCQkJdHJlZUVsZW1lbnRzW2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIHBhcnRzLmdldChpbmRleCk7Ci0JCX0KLQkJKi8KLQkJcmV0dXJuIElUcmVlRWxlbWVudC5FTVBUWV9MSVNUOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlpZiAoZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0FkdmFuY2VkVzExTWVzc2FnZVJlZmVyZW5jZSgpIHsKLQkJZGlhZ25vc3RpY01lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChNZXNzYWdlUmVmZXJlbmNlKSBnZXRUYXJnZXQoKTsKLQkJTGlzdCBwYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQlpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpICE9IG51bGwpIHsKLQkJCQlwYXJ0cyA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKTsKLQkJCX0KLQkJfQotCi0JCS8vIG1lc3NhZ2VSZWYgY2FuIG5vdCBiZSBudWxsLCBnaXZlbiBhYm92ZQotCQlpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpID09IG51bGwpIHsKLQkJCWFkZEVycm9yRGlhZ25vc3RpY01lc3NhZ2UoZ2V0VW5kZWZpbmVkQXJnMVN0cmluZygibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWVsc2UgaWYgKHBhcnRzLnNpemUoKSA8PSAwKSB7Ci0JCQlTdHJpbmdbXSBhcmdzID0gbmV3IFN0cmluZ1sxXTsKLQkJCWFyZ3NbMF0gPSAicGFydCI7IC8vJE5PTi1OTFMtMSQKLQkJCWFkZFdhcm5pbmdEaWFnbm9zdGljTWVzc2FnZShnZXROb09iamVjdFNwZWNpZmllZEFyZ3NTdHJpbmcoYXJncykpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NTaW1wbGlmaWVkVzExTWVzc2FnZVJlZmVyZW5jZSgpIHsKLQkJZGlhZ25vc3RpY01lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpIGdldFRhcmdldCgpOwotCQkgIGlmIChtZXNzYWdlUmVmID09IG51bGwgfHwgbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpID09IG51bGwpIHsKLQkJCSAgYWRkRXJyb3JEaWFnbm9zdGljTWVzc2FnZShnZXRVbmRlZmluZWRBcmcxU3RyaW5nKCJtZXNzYWdlIikpOyAvLyROT04tTkxTLTEkCi0JCSAgfQotCQkgIGVsc2UgaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKS5zaXplKCkgPD0gMCkgewotCQkJICBhZGRXYXJuaW5nRGlhZ25vc3RpY01lc3NhZ2UoZ2V0Tm9QYXJhbWV0ZXJzU3BlY2lmaWVkU3RyaW5nKCkpOwotCQkgIH0KLQkJICBlbHNlIHsKLQkJCSAgUGFydCBwYXJ0ID0gKFBhcnQpIG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKS5nZXQoMCk7Ci0JCQkgIFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCSAgaWYgKHhzZEVsZW1lbnQgPT0gbnVsbCB8fCB4c2RFbGVtZW50LmdldFNjaGVtYSgpID09IG51bGwpIHsKLQkJCQkgIC8vIE5vIFhTRCBFbGVtZW50Ci0JCQkJICBhZGRFcnJvckRpYWdub3N0aWNNZXNzYWdlKGdldFVuZGVmaW5lZEFyZzFTdHJpbmcoImVsZW1lbnQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQkgIE15SW5uZXJFbGVtZW50VmlzaXRvciB2aXNpdG9yID0gbmV3IE15SW5uZXJFbGVtZW50VmlzaXRvcigpOwotCQkJCSAgdmlzaXRvci5maW5kRXJyb3JzQW5kV2FybmluZ3MoeHNkRWxlbWVudCk7Ci0JCQkJICBkaWFnbm9zdGljTWVzc2FnZXMuYWRkQWxsKHZpc2l0b3IuZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCkpOwotCQkJICB9Ci0JCSAgfQotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRFcnJvckRpYWdub3N0aWNNZXNzYWdlKFN0cmluZyB0eHQpIHsKLQkJZGlhZ25vc3RpY01lc3NhZ2VzLmFkZChuZXcgTW9kZWxEaWFnbm9zdGljSW5mbyh0eHQsIE1vZGVsRGlhZ25vc3RpY0luZm8uRVJST1JfVFlQRSwgbnVsbCkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYWRkV2FybmluZ0RpYWdub3N0aWNNZXNzYWdlKFN0cmluZyB0eHQpIHsKLQkJZGlhZ25vc3RpY01lc3NhZ2VzLmFkZChuZXcgTW9kZWxEaWFnbm9zdGljSW5mbyh0eHQsIE1vZGVsRGlhZ25vc3RpY0luZm8uV0FSTklOR19UWVBFLCBudWxsKSk7CQkKLQl9Ci0JCi0JcHJvdGVjdGVkIExpc3QgZGlhZ25vc3RpY01lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCkgewotCQlwcm9jZXNzQWR2YW5jZWRXMTFNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JCXJldHVybiBkaWFnbm9zdGljTWVzc2FnZXM7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0U2ltcGxpZmllZERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQkJcHJvY2Vzc1NpbXBsaWZpZWRXMTFNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JCXJldHVybiBkaWFnbm9zdGljTWVzc2FnZXM7Ci0JfQotCQotCXByaXZhdGUgY2xhc3MgTXlJbm5lckVsZW1lbnRWaXNpdG9yIGV4dGVuZHMgVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IgewotCQlwcml2YXRlIExpc3QgZGlhZ01lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJcHVibGljIHZvaWQgZmluZEVycm9yc0FuZFdhcm5pbmdzKFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50KSB7Ci0JCQlpZiAoeHNkRWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpID09IG51bGwgfHwgeHNkRWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpLmdldFNjaGVtYSgpID09IG51bGwpIHsKLQkJCQkvLyBObyBYU0QgdHlwZSAobm9uIGFub255bW91cykgZGVmaW5lZAotCQkJCWRpYWdNZXNzYWdlcy5hZGQobmV3IE1vZGVsRGlhZ25vc3RpY0luZm8oZ2V0VW5kZWZpbmVkQXJnMVN0cmluZygidHlwZSIpLCBNb2RlbERpYWdub3N0aWNJbmZvLkVSUk9SX1RZUEUsIG51bGwpKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gaW5uZXJFbGVtZW50ID0gc3VwZXIuZ2V0SW5uZXJYU0RFbGVtZW50KHhzZEVsZW1lbnQpOwotCQkJaWYgKGlubmVyRWxlbWVudC5lcXVhbHMoeHNkRWxlbWVudCkpIHsKLQkJCQlkaWFnTWVzc2FnZXMuYWRkKG5ldyBNb2RlbERpYWdub3N0aWNJbmZvKGdldE5vUGFyYW1ldGVyc1NwZWNpZmllZFN0cmluZygpLCBNb2RlbERpYWdub3N0aWNJbmZvLldBUk5JTkdfVFlQRSwgbnVsbCkpOwotCQkJfQotCQl9Ci0JCQotCQlwdWJsaWMgTGlzdCBnZXREaWFnbm9zdGljTWVzc2FnZXMoKSB7Ci0JCQlyZXR1cm4gZGlhZ01lc3NhZ2VzOwotCQl9Ci0JfQotCQotCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Tm9PYmplY3RTcGVjaWZpZWRBcmdzU3RyaW5nKFN0cmluZ1tdIGFyZ3MpIHsJCSAgCi0JCSAgU3RyaW5nIHN0cmluZyA9IE5MUy5iaW5kKE1lc3NhZ2VzLl9VSV9MQUJFTF9OT19PQkpFQ1RfU1BFQ0lGSUVEX0FSRzEsIGFyZ3MpOwotCQkgIFN0cmluZyBjdXN0b21pemVkTWVzc2FnZSA9IGdldFByb2R1Y3RDdXN0b21pemVkTWVzc2FnZSgiX1VJX0xBQkVMX05PX09CSkVDVF9TUEVDSUZJRURfQVJHMSIsIGFyZ3MpOyAvLyROT04tTkxTLTEkCi0JCSAgaWYgKGN1c3RvbWl6ZWRNZXNzYWdlICE9IG51bGwgJiYgIWN1c3RvbWl6ZWRNZXNzYWdlLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCSAgc3RyaW5nID0gY3VzdG9taXplZE1lc3NhZ2U7Ci0JCSAgcmV0dXJuIHN0cmluZzsKLQkgIH0KLQkKLQkgIHByaXZhdGUgU3RyaW5nIGdldFVuZGVmaW5lZEFyZzFTdHJpbmcoU3RyaW5nIGFyZykgewotCQkgIFN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nWzFdOwotCQkgIGFyZ3NbMF0gPSBhcmc7CQkgIAotCQkgIFN0cmluZyBzdHJpbmcgPSBOTFMuYmluZChNZXNzYWdlcy5fVUlfTEFCRUxfVU5ERUZJTkVEX0FSRzEsIGFyZ3MpOwotCQkgIFN0cmluZyBjdXN0b21pemVkTWVzc2FnZSA9IGdldFByb2R1Y3RDdXN0b21pemVkTWVzc2FnZSgiX1VJX0xBQkVMX1VOREVGSU5FRF9BUkcxIiwgYXJncyk7IC8vJE5PTi1OTFMtMSQKLQkJICBpZiAoY3VzdG9taXplZE1lc3NhZ2UgIT0gbnVsbCAmJiAhY3VzdG9taXplZE1lc3NhZ2UuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJICBzdHJpbmcgPSBjdXN0b21pemVkTWVzc2FnZTsKLQkJICByZXR1cm4gc3RyaW5nOwotCSAgfQotCSAgCi0JICBwcml2YXRlIFN0cmluZyBnZXROb1BhcmFtZXRlcnNTcGVjaWZpZWRTdHJpbmcoKSB7Ci0JCSAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbMF07Ci0JCSAgU3RyaW5nIHN0cmluZyA9IE5MUy5iaW5kKE1lc3NhZ2VzLl9VSV9MQUJFTF9OT19QQVJBTUVURVJTX1NQRUNJRklFRCwgYXJncyk7Ci0JCSAgU3RyaW5nIGN1c3RvbWl6ZWRNZXNzYWdlID0gZ2V0UHJvZHVjdEN1c3RvbWl6ZWRNZXNzYWdlKCJfVUlfTEFCRUxfTk9fUEFSQU1FVEVSU19TUEVDSUZJRUQiLCBhcmdzKTsgLy8kTk9OLU5MUy0xJAotCQkgIGlmIChjdXN0b21pemVkTWVzc2FnZSAhPSBudWxsICYmICFjdXN0b21pemVkTWVzc2FnZS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkgIHN0cmluZyA9IGN1c3RvbWl6ZWRNZXNzYWdlOwotCQkgIHJldHVybiBzdHJpbmc7Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAgICogUmV0dXJucyBhIGN1c3RvbWVkIHByb2R1Y3QtYmFzZWQgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIGtleSBhbmQgYXJndW1lbnRzCi0JICAgKiBvciBudWxsIGlmIG5vbmUgZXhpc3RzLgotCSAgICogQHBhcmFtIGtleQotCSAgICogQHBhcmFtIGFyZ3MKLQkgICAqIEByZXR1cm4gU3RyaW5nIGN1c3RvbWl6ZWQgbWVzc2FnZSBvciBudWxsIGlmIG5vbmUgZXhpc3RzCi0JICAgKi8KLQkgIHByaXZhdGUgU3RyaW5nIGdldFByb2R1Y3RDdXN0b21pemVkTWVzc2FnZShTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzKSB7Ci0JCSAgU3RyaW5nIHByb2R1Y3RNZXNzYWdlID0gbnVsbDsKLQkJICAKLQkJICBPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIoKTsKLQkJICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcikgewotCQkJICBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcilvYmplY3Q7Ci0JCQkgIFN0cmluZyBjdXN0b21pemVkU3RyaW5nID0gbnVsbDsKLQkJCSAgaWYgKGFyZ3MgPT0gbnVsbCkgewotCQkJCSAgY3VzdG9taXplZFN0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZyhrZXkpOwotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCSAgY3VzdG9taXplZFN0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZyhrZXksIGFyZ3MpOwotCQkJICB9Ci0JCQkgIAotCQkJICBpZiAoY3VzdG9taXplZFN0cmluZyAhPSBudWxsICYmICFjdXN0b21pemVkU3RyaW5nLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCSAgcHJvZHVjdE1lc3NhZ2UgPSBjdXN0b21pemVkU3RyaW5nOwotCQkJICB9Ci0JCSAgfQotCQkgIAotCQkgIHJldHVybiBwcm9kdWN0TWVzc2FnZTsKLQkgIH0KLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOWE2ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuRGVmYXVsdEVkaXRvck1vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkRmF1bHRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW5wdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3BlcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE91dHB1dEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFPcGVyYXRpb24gZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJT3BlcmF0aW9uIHsKLQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpCi0JewotCQlMaXN0IG1vZGVsQWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KGdldE9wZXJhdGlvbigpLmdldEVGYXVsdHMoKS5zaXplKCkgKyAyKTsKLQkJCi0JCUlucHV0IGlucHV0ID0gZ2V0T3BlcmF0aW9uKCkuZ2V0RUlucHV0KCk7Ci0JCU91dHB1dCBvdXRwdXQgPSBnZXRPcGVyYXRpb24oKS5nZXRFT3V0cHV0KCk7Ci0JCQotCQlPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBnZXRPcGVyYXRpb24oKS5nZXRTdHlsZSgpOwotCQlpZiAob3BlcmF0aW9uVHlwZSAhPSBudWxsKSB7Ci0JCQlpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSAmJiBpbnB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gSW5wdXQsIE91dHB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIoaW5wdXQpKTsKLQkJCQltb2RlbEFkYXB0ZXJMaXN0LmFkZChjcmVhdGVBZGFwdGVyKG91dHB1dCkpOwotCQkJfQotCQkJZWxzZSBpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKSAmJiBpbnB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gT3V0cHV0LCBJbnB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIob3V0cHV0KSk7Ci0JCQkJbW9kZWxBZGFwdGVyTGlzdC5hZGQoY3JlYXRlQWRhcHRlcihpbnB1dCkpOwotCQkJfQotCQkJZWxzZSBpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5PTkVfV0FZKSAmJiBpbnB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gSW5wdXQKLQkJCQltb2RlbEFkYXB0ZXJMaXN0LmFkZChjcmVhdGVBZGFwdGVyKGlucHV0KSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvcGVyYXRpb25UeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTikgJiYgb3V0cHV0ICE9IG51bGwpIHsKLQkJCQkvL091dHB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIob3V0cHV0KSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWZvciAoSXRlcmF0b3IgaSA9IGdldE9wZXJhdGlvbigpLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCXsKLQkJCUVPYmplY3QgbyA9IChFT2JqZWN0KSBpLm5leHQoKTsKLQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIobykpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsQWRhcHRlckxpc3Q7Ci0JfQotCQotCS8vIENvbnZpZW5lbmNlIG1ldGhvZAotCXB1YmxpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLQl7Ci0JCXJldHVybiAoT3BlcmF0aW9uKSB0YXJnZXQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpOwotCX0KLQkKLQlwdWJsaWMgSUludGVyZmFjZSBnZXRPd25lckludGVyZmFjZSgpCi0JewotCQlyZXR1cm4gKElJbnRlcmZhY2Upb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlhY3Rpb25zLmFkZChBU0RBZGRPcGVyYXRpb25BY3Rpb24uSUQpOwotCQlhY3Rpb25zLmFkZEFsbChnZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkpOwotCQlhY3Rpb25zLmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0JCWFjdGlvbnMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9ucy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0JCQotCQlTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nW2FjdGlvbnMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFjdGlvbnMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQlhY3Rpb25JRHNbaW5kZXhdID0gKFN0cmluZykgYWN0aW9ucy5nZXQoaW5kZXgpOwotCQl9Ci0JCQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRJbnB1dENvbW1hbmQoKSB7Ci0JCVcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRPdXRwdXRDb21tYW5kKCkgewotCQlXMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRGYXVsdENvbW1hbmQoT2JqZWN0IGZhdWx0KSB7Ci0JCVcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSwgbnVsbCk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKElNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWJsaW5nLCBJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ01lc3NhZ2VSZWYpIHsKLQkJcmV0dXJuIG5ldyBXMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKGxlZnRTaWJsaW5nLCByaWdodFNpYmxpbmcsIG1vdmluZ01lc3NhZ2VSZWYpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkgewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlpZiAoZ2V0T3BlcmF0aW9uKCkuZ2V0RUlucHV0KCkgPT0gbnVsbCkgewotCQkJbGlzdC5hZGQoQVNEQWRkSW5wdXRBY3Rpb24uSUQpOwotCQl9Ci0JCWlmIChnZXRPcGVyYXRpb24oKS5nZXRFT3V0cHV0KCkgPT0gbnVsbCkgewotCQkJbGlzdC5hZGQoQVNEQWRkT3V0cHV0QWN0aW9uLklEKTsKLQkJfQotCQkKLQkJcmV0dXJuIGxpc3Q7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvb3BlcmF0aW9uX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3QgbWVzc2FnZXMgPSBnZXRNZXNzYWdlcygpOwotCQlJVHJlZUVsZW1lbnRbXSB0cmVlRWxlbWVudHMgPSBuZXcgSVRyZWVFbGVtZW50W21lc3NhZ2VzLnNpemUoKV07Ci0JCQotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbWVzc2FnZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgbWVzc2FnZXMuZ2V0KGluZGV4KTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50czsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjODIyOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3VHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLS8vaW1wb3J0IGNvbS5pYm0uY2NsLnNvYS5zZG8ud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5TRE9XMTFEZWxldGVDb21tYW5kOwotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSVBhcmFtZXRlciB7Ci0JCi0JcHJvdGVjdGVkIFhTREF0dHJpYnV0ZVVzZSBnZXRYU0RBdHRyaWJ1dGVVc2UoKSB7Ci0JCXJldHVybiAoWFNEQXR0cmlidXRlVXNlKSB0YXJnZXQ7Ci0JfQotCi0JcHJvdGVjdGVkIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGdldFhTREF0dHRyaWJ1dGVEZWNsYXJhdGlvbigpIHsKLQkJWFNEQXR0cmlidXRlVXNlIGF0dHJVc2UgPSBnZXRYU0RBdHRyaWJ1dGVVc2UoKTsKLQkJcmV0dXJuIGF0dHJVc2UuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKTsJCQotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkgewotCQlyZXR1cm4gKElNZXNzYWdlUmVmZXJlbmNlKSBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBnZXRYU0RBdHR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpIHsKLQkJWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wgPSBnZXRYU0RBdHR0cmlidXRlRGVjbGFyYXRpb24oKTsKLQkJCi0JCWlmIChhdHRyRGVjbC5nZXRUeXBlKCkgIT0gbnVsbCkgewotCQkJcmV0dXJuIGF0dHJEZWNsLmdldFR5cGUoKS5nZXROYW1lKCk7Ci0JCX0KLQkJCi0JCXJldHVybiAiZXJyb3I6IGNvdWxkIG5vdCBnZXQgdHlwZSBuYW1lIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWVRdWFsaWZpZXIoKSB7Ci0gICAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHRkID0gZ2V0WFNEQXR0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRkICE9IG51bGwgPyB0ZC5nZXRUYXJnZXROYW1lc3BhY2UoKSA6IG51bGw7Ci0JfQotCQotCSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotICAgICAgICAgIExpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAvL2xpc3QuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7Ci0gICAgICAgICAgLy9saXN0LmFkZChBU0RBZGRJbnB1dEFjdGlvbi5JRCk7Ci0gICAgICAgICAgLy9saXN0LmFkZChBU0RBZGRPdXRwdXRBY3Rpb24uSUQpOwotICAgICAgICAgIC8vbGlzdC5hZGQoQVNEQWRkRmF1bHRBY3Rpb24uSUQpOwotICAgICAgICAgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX1RZUEUpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgYWN0aW9ucy5hZGQoVzExU2V0TmV3VHlwZUFjdGlvbi5JRCk7Ci0gICAgICAgICAgYWN0aW9ucy5hZGQoVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLklEKTsKLSAgICAgICAgICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLQotICAgICAgICAgIGFjdGlvbnMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7ICAgIAotICAgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotICAgICAgICAgIGFjdGlvbnMudG9BcnJheShyZXN1bHQpOwotICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kKHRoaXMpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgaWQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gZ2V0UGFyYW1ldGVyU3RyaW5nKCJhdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBnZXRQYXJhbWV0ZXJTdHJpbmcoU3RyaW5nIHR4dCkgewotCQlTdHJpbmcgc3RyaW5nID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCk7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQlQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcilvYmplY3Q7Ci0JCQlTdHJpbmcgbmV3U3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKCJfVUlfTEFCRUxfUEFSQU1FVEVSX0FSRyIsIG5ldyBPYmplY3RbXXt0eHR9KTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKG5ld1N0cmluZyAhPSBudWxsKSB7Ci0JCQkJc3RyaW5nID0gbmV3U3RyaW5nOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0cmluZzsKLQl9Ci0JICAKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCXJldHVybiBuZXcgSVRyZWVFbGVtZW50WzBdOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNTQxNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldEV4aXN0aW5nVHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFSZW5hbWVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVNldFR5cGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyRm9yRWxlbWVudCBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElQYXJhbWV0ZXIKLXsKLSAgcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSB0YXJnZXQpLmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLQlTdHJpbmcgY29tcE5hbWUgPSAiIjsvLyArIE1lc3NhZ2VzLmdldFN0cmluZygiX1VJX0xBQkVMX05PX1RZUEVfU1BFQ0lGSUVEIikgKyAiKSI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgWFNEVHlwZURlZmluaXRpb24gYW5vbnltb3VzVHlwZSA9IGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gdGQgPSBnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIAotICAgIGlmIChhbm9ueW1vdXNUeXBlICE9IG51bGwpIHsKLSAgICAgICAgY29tcE5hbWUgPSAiKiphbm9ueW1vdXMqKiI7ICAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcmV0dXJuICh0ZCAhPSBudWxsICYmIHRkLmdldE5hbWUoKSAhPSBudWxsKSA/IHRkLmdldE5hbWUoKSA6IGNvbXBOYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lUXVhbGlmaWVyKCkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHRkID0gZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICByZXR1cm4gdGQgIT0gbnVsbCA/IHRkLmdldFRhcmdldE5hbWVzcGFjZSgpIDogbnVsbDsKLSAgIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkgIExpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIC8vbGlzdC5hZGQoQVNEQWRkT3BlcmF0aW9uQWN0aW9uLklEKTsKLSAgICAgIC8vbGlzdC5hZGQoQVNEQWRkSW5wdXRBY3Rpb24uSUQpOwotICAgICAgLy9saXN0LmFkZChBU0RBZGRPdXRwdXRBY3Rpb24uSUQpOwotICAgICAgLy9saXN0LmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0gICAgICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9UWVBFKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYWN0aW9ucy5hZGQoVzExU2V0TmV3VHlwZUFjdGlvbi5JRCk7Ci0gICAgICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uSUQpOwotICAgICAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7Ci0gICAgIAotICAgICAgYWN0aW9ucy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsJICAKLSAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotICAgICAgYWN0aW9ucy50b0FycmF5KHJlc3VsdCk7Ci0JICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFcxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgYWN0aW9uSWQpIHsKLQkgIHJldHVybiBuZXcgVzExU2V0VHlwZUNvbW1hbmQodGhpcy5nZXRUYXJnZXQoKSwgYWN0aW9uSWQpOwotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZCBnZXRTZXROYW1lQ29tbWFuZChTdHJpbmcgbmV3TmFtZSkgeyAgICAKLSAgICByZXR1cm4gbmV3IFcxMVJlbmFtZUNvbW1hbmQodGhpcywgbmV3TmFtZSkgewotICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLSAgCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0RWxlbWVudCgpKTsKLQkJCWdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLnNldE5hbWUobmV3TmFtZSk7Ci0gIAkJfQotICAJCWZpbmFsbHkgewotICAJCQllbmRSZWNvcmRpbmcoZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0RWxlbWVudCgpKTsKLSAgCQl9Ci0gICAgICB9Ci0gICAgfTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkKLSAgewotCSAgcmV0dXJuIChJTWVzc2FnZVJlZmVyZW5jZSkgb3duZXI7Ci0gIH0KLSAgCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gZ2V0UGFyYW1ldGVyU3RyaW5nKCJlbGVtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JICBwcml2YXRlIFN0cmluZyBnZXRQYXJhbWV0ZXJTdHJpbmcoU3RyaW5nIHR4dCkgewotCQkgIFN0cmluZyBzdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotCQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJCSAgU3RyaW5nIG5ld1N0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZygiX1VJX0xBQkVMX1BBUkFNRVRFUl9BUkciLCBuZXcgT2JqZWN0W117dHh0fSk7IC8vJE5PTi1OTFMtMSQKLQkJCSAgaWYgKG5ld1N0cmluZyAhPSBudWxsKSB7Ci0JCQkJICBzdHJpbmcgPSBuZXdTdHJpbmc7Ci0JCQkgIH0KLQkJICB9Ci0KLQkJICByZXR1cm4gc3RyaW5nOwotCSAgfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvclBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiYWUyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvclBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFBZGRQYXJ0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3RWxlbWVudEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0RWxlbWVudENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0VHlwZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkRmF1bHRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3BlcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Nb2RlbERpYWdub3N0aWNJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLlByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyRm9yUGFydCBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElQYXJhbWV0ZXIKLXsKLSAgcHJvdGVjdGVkIFBhcnQgZ2V0UGFydCgpCi0gIHsKLSAgICByZXR1cm4gKFBhcnQpIHRhcmdldDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0UGFydCgpLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBpZiAoZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgeyAgCi0gICAgICByZXR1cm4gZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZ2V0UGFydCgpLmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0UGFydCgpLmdldFR5cGVEZWZpbml0aW9uKCkuZ2V0TmFtZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGdldE5vTmFtZVNwZWNpZmllZFN0cmluZygpOwotICAgIH0gIAotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXROb05hbWVTcGVjaWZpZWRTdHJpbmcoKSB7Ci0JICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZVF1YWxpZmllcigpCi0gIHsKLSAgICBpZiAoZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgeyAgCi0gICAgICByZXR1cm4gZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsgIAotICAgICAgcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0gICAgfSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB7Ci0JCSAgSU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBnZXRPd25lcigpKS5nZXRPd25lck9wZXJhdGlvbigpOwotCi0JCSAgTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkgIGFjdGlvbnMuYWRkKFcxMUFkZFBhcnRBY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7Ci0JCSAgYWN0aW9ucy5hZGRBbGwoKChXMTFPcGVyYXRpb24pIG9wZXJhdGlvbikuZ2V0VmFsaWRJbnB1dE91dHB1QWN0aW9ucygpKTsKLQkJICBhY3Rpb25zLmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0JCSAgCi0JCSAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfVFlQRSk7IC8vJE5PTi1OTFMtMSQKLQkJICBhY3Rpb25zLmFkZChXMTFTZXROZXdUeXBlQWN0aW9uLklEKTsKLQkJICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9FTkRfSUQpOwotCi0JCSAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfRUxFTUVOVCk7IC8vJE5PTi1OTFMtMSQKLQkJICBhY3Rpb25zLmFkZChXMTFTZXROZXdFbGVtZW50QWN0aW9uLklEKTsKLQkJICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9FTkRfSUQpOwkJICAKLQkJICAKLQkJICBhY3Rpb25zLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotICAgICAgCi0gICAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgICAgIGFjdGlvbnMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0gICAgICB9Ci0JCSAgCi0JCSAgU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1thY3Rpb25zLnNpemUoKV07Ci0JCSAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFjdGlvbnMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkgIGFjdGlvbklEc1tpbmRleF0gPSAoU3RyaW5nKSBhY3Rpb25zLmdldChpbmRleCk7Ci0JCSAgfQotCSAgCi0JCSAgcmV0dXJuIGFjdGlvbklEczsKLQkgIH0KLQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgewotCQkgIFN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbMl07Ci0JCSAgYWN0aW9uSURzWzBdID0gVzExQWRkUGFydEFjdGlvbi5JRDsKLQkJICBhY3Rpb25JRHNbMV0gPSBBU0REZWxldGVBY3Rpb24uSUQ7Ci0JCSAgCi0JCSAgcmV0dXJuIGFjdGlvbklEczsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkKLSAgewotCSAgcmV0dXJuIG93bmVyOwotICB9Ci0gIAotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcGFydF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0gICAgCi0gICAgcHVibGljIEltYWdlIGdldFNlY29uZGFyeUltYWdlKCkgewotICAgICAgCi0gICAgICBpZiAoZ2V0UGFydCgpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvZWxlbWVudF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGdldFBhcnQoKS5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgICAgeyAgCi0gICAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvY29tcGxleHR5cGVfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvc2ltcGxldHlwZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7ICAKLSAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcGFydF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0gIAotICAgIH0gICAgCi0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gInBhcnQiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldFR5cGVDb21tYW5kKFN0cmluZyBhY3Rpb25JZCkgewotCQlyZXR1cm4gbmV3IFcxMVNldFR5cGVDb21tYW5kKChQYXJ0KSB0aGlzLmdldFRhcmdldCgpLCBhY3Rpb25JZCk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldEVsZW1lbnRDb21tYW5kKFN0cmluZyBhY3Rpb25JZCkgewotCQlyZXR1cm4gbmV3IFcxMVNldEVsZW1lbnRDb21tYW5kKChQYXJ0KSB0aGlzLmdldFRhcmdldCgpLCBhY3Rpb25JZCk7Ci0JfQotCQotCS8vIFRPRE86IFdlIHNob3VsZCBtb3ZlIHRoZSBpc1R5cGUoKSBtZXRob2QgdG8gdGhlIElQYXJhbWV0ZXIgSW50ZXJmYWNlLi4uLi4uLi4KLQlwdWJsaWMgYm9vbGVhbiBpc1R5cGUoKSB7Ci0JCVBhcnQgcGFydCA9IChQYXJ0KSB0YXJnZXQ7Ci0JCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXREaWFnbm9zdGljTWVzc2FnZXMoKSB7Ci0JCUxpc3QgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotCQlQYXJ0IHBhcnQgPSAoUGFydCkgZ2V0VGFyZ2V0KCk7Ci0JCWlmIChwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpID09IG51bGwgJiYgcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpID09IG51bGwpIHsKLQkJCVN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nWzJdOwotCQkJYXJnc1swXSA9ICJlbGVtZW50IjsgLy8kTk9OLU5MUy0xJAotCQkJYXJnc1sxXSA9ICJ0eXBlIjsgLy8kTk9OLU5MUy0xJAotCQkJCi0JCQlTdHJpbmcgc3RyaW5nID0gTkxTLmJpbmQoTWVzc2FnZXMuX1VJX0xBQkVMX09SX1VOREVGSU5FRF9BUkcyLCBhcmdzKTsKLQkJCVN0cmluZyBjdXN0b21pemVkTWVzc2FnZSA9IGdldFByb2R1Y3RDdXN0b21pemVkTWVzc2FnZSgiX1VJX0xBQkVMX09SX1VOREVGSU5FRF9BUkcyIiwgYXJncyk7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChjdXN0b21pemVkTWVzc2FnZSAhPSBudWxsICYmICFjdXN0b21pemVkTWVzc2FnZS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkJc3RyaW5nID0gY3VzdG9taXplZE1lc3NhZ2U7Ci0JCQkKLQkJCU1vZGVsRGlhZ25vc3RpY0luZm8gaW5mbyA9IG5ldyBNb2RlbERpYWdub3N0aWNJbmZvKHN0cmluZywgTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFLCBudWxsKTsKLQkJCWVycm9ycy5hZGQoaW5mbyk7Ci0JCX0KLQkJCi0JCXJldHVybiBlcnJvcnM7Ci0JfQotCQotCSAgLyoqCi0JICAgKiBSZXR1cm5zIGEgY3VzdG9tZWQgcHJvZHVjdC1iYXNlZCBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBhcmd1bWVudHMKLQkgICAqIG9yIG51bGwgaWYgbm9uZSBleGlzdHMuCi0JICAgKiBAcGFyYW0ga2V5Ci0JICAgKiBAcGFyYW0gYXJncwotCSAgICogQHJldHVybiBTdHJpbmcgY3VzdG9taXplZCBtZXNzYWdlIG9yIG51bGwgaWYgbm9uZSBleGlzdHMKLQkgICAqLwotCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UHJvZHVjdEN1c3RvbWl6ZWRNZXNzYWdlKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpIHsKLQkJICBTdHJpbmcgcHJvZHVjdE1lc3NhZ2UgPSBudWxsOwotCQkgIAotCQkgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotCQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJCSAgU3RyaW5nIGN1c3RvbWl6ZWRTdHJpbmcgPSBudWxsOwotCQkJICBpZiAoYXJncyA9PSBudWxsKSB7Ci0JCQkJICBjdXN0b21pemVkU3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSk7Ci0JCQkgIH0KLQkJCSAgZWxzZSB7Ci0JCQkJICBjdXN0b21pemVkU3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSwgYXJncyk7Ci0JCQkgIH0KLQkJCSAgCi0JCQkgIGlmIChjdXN0b21pemVkU3RyaW5nICE9IG51bGwgJiYgIWN1c3RvbWl6ZWRTdHJpbmcuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJICBwcm9kdWN0TWVzc2FnZSA9IGN1c3RvbWl6ZWRTdHJpbmc7Ci0JCQkgIH0KLQkJICB9Ci0KLQkJICByZXR1cm4gcHJvZHVjdE1lc3NhZ2U7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmUwYTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEVuZFBvaW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRFbmRQb2ludEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuRW5kUG9pbnRDb21wYXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgVzExU2VydmljZSBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElTZXJ2aWNlIHsKLQotCXB1YmxpYyBMaXN0IGdldEVuZFBvaW50cygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTGlzdCBlbmRQb2ludHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUl0ZXJhdG9yIGl0ID0gKChTZXJ2aWNlKSB0YXJnZXQpLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCWVuZFBvaW50cy5hZGQoaXQubmV4dCgpKTsKLQkJfQotCi0JCXBvcHVsYXRlQWRhcHRlckxpc3QoZW5kUG9pbnRzLCBhZGFwdGVyTGlzdCk7Ci0JCUNvbGxlY3Rpb25zLnNvcnQoYWRhcHRlckxpc3QsIG5ldyBFbmRQb2ludENvbXBhcmF0b3IoKSk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuICgoU2VydmljZSkgdGFyZ2V0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRGaWVsZHMoKSB7Ci0JCXJldHVybiBnZXRFbmRQb2ludHMoKTsKLQl9Ci0JCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYWN0aW9uSURzLmFkZChBU0RBZGRFbmRQb2ludEFjdGlvbi5JRCk7Ci0JCWFjdGlvbklEcy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLQotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotICAgIAotICAgIHB1YmxpYyBDb21tYW5kIGdldEFkZEVuZFBvaW50Q29tbWFuZCgpIHsKLSAgICAgIHJldHVybiBuZXcgVzExQWRkRW5kUG9pbnRDb21tYW5kKChTZXJ2aWNlKXRhcmdldCk7Ci0gICAgfQotICAgIAotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvc2VydmljZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gInNlcnZpY2UiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBlbmRQb2ludHMgPSBnZXRFbmRQb2ludHMoKTsKLQkJSVRyZWVFbGVtZW50W10gdHJlZUVsZW1lbnRzID0gbmV3IElUcmVlRWxlbWVudFtlbmRQb2ludHMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBlbmRQb2ludHMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgZW5kUG9pbnRzLmdldChpbmRleCk7Ci0JCX0KLQkJCi0JCXJldHVybiB0cmVlRWxlbWVudHM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMGRkZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRE9wZW5TY2hlbWFBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFcxMVR5cGUgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJVHlwZSB7Ci0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlYU0RTY2hlbWEgc2NoZW1hPSAoWFNEU2NoZW1hKSB0YXJnZXQ7Ci0JCXJldHVybiBzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1syXTsKLQkJYWN0aW9uSURzWzBdID0gQVNET3BlblNjaGVtYUFjdGlvbi5JRDsKLQkJYWN0aW9uSURzWzFdID0gQVNERGVsZXRlQWN0aW9uLklEOwkKLQkJcmV0dXJuIGFjdGlvbklEczsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy94c2Rfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJzY2hlbWEiOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlc0NhdGVnb3J5QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlc0NhdGVnb3J5QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTg1NDE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExVHlwZXNDYXRlZ29yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFUeXBlc0NhdGVnb3J5QWRhcHRlciBleHRlbmRzIFcxMUNhdGVnb3J5QWRhcHRlciB7Ci0JcHVibGljIFcxMVR5cGVzQ2F0ZWdvcnlBZGFwdGVyKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgU3RyaW5nIGxhYmVsLCBJbWFnZSBpbWFnZSwgaW50IGdyb3VwVHlwZSkgewotCQlzdXBlcihkZXNjcmlwdGlvbiwgbGFiZWwsaW1hZ2UsIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QsIGdyb3VwVHlwZSk7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IHR5cGVzID0gKChXMTFEZXNjcmlwdGlvbikgZ2V0T3duZXJEZXNjcmlwdGlvbigpKS5nZXRUeXBlcygpOwotCQlyZXR1cm4gKElUcmVlRWxlbWVudFtdKSB0eXBlcy50b0FycmF5KG5ldyBJVHJlZUVsZW1lbnRbMF0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkQmluZGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkQmluZGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM1ZDU2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEJpbmRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEJpbmRpbmdDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIFN0cmluZyBuZXdOYW1lOwotCXByaXZhdGUgQmluZGluZyBuZXdCaW5kaW5nOwotCQotCXB1YmxpYyBXMTFBZGRCaW5kaW5nQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9CSU5ESU5HLCBkZWZpbml0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TmV3QmluZGluZ05hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQl9Ci0JCi0JcHVibGljIEJpbmRpbmcgZ2V0TmV3QmluZGluZygpIHsKLQkJcmV0dXJuIG5ld0JpbmRpbmc7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlpZiAobmV3TmFtZSA9PSBudWxsIHx8IG5ld05hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJbmV3TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlQmluZGluZ05hbWUoZGVmaW5pdGlvbiwgIk5ld0JpbmRpbmciKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJCi0JCQlBZGRCaW5kaW5nQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZEJpbmRpbmdDb21tYW5kKGRlZmluaXRpb24sIG5ld05hbWUpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCQotCQkJbmV3QmluZGluZyA9IChCaW5kaW5nKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQlmb3JtYXRDaGlsZChuZXdCaW5kaW5nLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIG5ld0JpbmRpbmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRFbmRQb2ludENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRW5kUG9pbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NGUzNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRFbmRQb2ludENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuUG9ydFdpemFyZDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEVuZFBvaW50Q29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZAotewotICAgIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotICAgIHByaXZhdGUgUG9ydCBwb3J0OwotICAgIAotICAgIHB1YmxpYyBXMTFBZGRFbmRQb2ludENvbW1hbmQoU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQURELCBzZXJ2aWNlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQkKLQkgICAgCVBvcnRXaXphcmQgd2l6YXJkID0gbmV3IFBvcnRXaXphcmQoc2VydmljZSk7Ci0JCQlXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpLCB3aXphcmQpOwotCQkJd2l6YXJkRGlhbG9nLmNyZWF0ZSgpOwotCi0JCQlpbnQgcmVzdWx0ID0gd2l6YXJkRGlhbG9nLm9wZW4oKTsKLQkJCWlmIChyZXN1bHQgPT0gV2luZG93Lk9LICYmIHNlcnZpY2UuZ2V0RVBvcnRzKCkuc2l6ZSgpID4gMCkgewotCQkJCUxpc3QgcG9ydHMgPSBzZXJ2aWNlLmdldEVQb3J0cygpOwotCQkJCXBvcnQgPSAoUG9ydCkgcG9ydHMuZ2V0KHBvcnRzLnNpemUoKSAtIDEpOwotCQkJCQotCQkJCWZvcm1hdENoaWxkKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLSAgICB9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBwb3J0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDVjZTBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0JcHJvdGVjdGVkIEZhdWx0IGZhdWx0OwotCXByb3RlY3RlZCBPYmplY3QgbmV3T2JqZWN0OwotCXByaXZhdGUgaW50IHBhcmFtZXRlclBhdHRlcm4gPSAtMTsKLQkKLQlwdWJsaWMgVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIEZhdWx0IGZhdWx0KSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0ZBVUxULCBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0JCXRoaXMuZmF1bHQgPSBmYXVsdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyUGF0dGVybihpbnQgcGF0dGVybikgewotCQlwYXJhbWV0ZXJQYXR0ZXJuID0gcGF0dGVybjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCS8vIERldGVybWluZSB3aGljaCBQYXR0ZXJuIHdlIHNob3VsZCB1c2UuICBGb3IgZXhhbXBsZSwgQUREQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UCi0JCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuRm9yRmF1bHQob3BlcmF0aW9uLCBmYXVsdCk7Ci0JCQkJaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIGZhdWx0KTsKLQkJCWNvbW1hbmQuc2V0U3R5bGUocGFyYW1ldGVyUGF0dGVybik7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJZmF1bHQgPSAoRmF1bHQpIGNvbW1hbmQuZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCQkJbmV3T2JqZWN0ID0gY29tbWFuZC5nZXROZXdseUFkZGVkQ29tcG9uZW50UGFydCgpOwotCQkJCi0JCQlpZiAoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJLy8gVHJ5IHRvIGdyYWIgdGhlICJpbm5lciIgWFNERWxlbWVudAotCQkJCW5ld09iamVjdCA9IGdldE5ld1hTREVsZW1lbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gbmV3T2JqZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW1wb3J0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbXBvcnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYTJmOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbXBvcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbXBvcnRDb21tYW5kOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkSW1wb3J0Q29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJpdmF0ZSBPYmplY3QgY29tcG9uZW50OwotCQotCXB1YmxpYyBXMTFBZGRJbXBvcnRDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTVBPUlQsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlTdHJpbmcgbmFtZXNwYWNlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBsb2NhdGlvbiA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlBZGRJbXBvcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkSW1wb3J0Q29tbWFuZChkZWZpbml0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlmb3JtYXRDaGlsZChjb21tYW5kLmdldFdTRExFbGVtZW50KCkuZ2V0RWxlbWVudCgpKTsKLQkJCWNvbXBvbmVudCA9IGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBjb21wb25lbnQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjQzYzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZElucHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmR7Ci0JcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0JcHJpdmF0ZSBPYmplY3QgaW5wdXQ7Ci0JcHJpdmF0ZSBpbnQgcGFyYW1ldGVyUGF0dGVybiA9IC0xOwotCQotCXB1YmxpYyBXMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTlBVVCwgb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJQYXR0ZXJuKGludCBwYXR0ZXJuKSB7Ci0JCXBhcmFtZXRlclBhdHRlcm4gPSBwYXR0ZXJuOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCWlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJLy8gRGV0ZXJtaW5lIHdoaWNoIFBhdHRlcm4gd2Ugc2hvdWxkIHVzZS4gIEZvciBleGFtcGxlLCBBRERCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQKLQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24sIHRydWUpOwotCQkJCWlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJCXBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKG9wZXJhdGlvbik7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBwYXJhbWV0ZXJQYXR0ZXJuKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlpbnB1dCA9IGNvbW1hbmQuZ2V0TmV3bHlBZGRlZENvbXBvbmVudFBhcnQoKTsKLQkJCQotCQkJZm9ybWF0Q2hpbGQob3BlcmF0aW9uLmdldEVJbnB1dCgpLmdldEVsZW1lbnQoKSk7Ci0JCQlpZiAoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJLy8gVHJ5IHRvIGdyYWIgdGhlICJpbm5lciIgWFNERWxlbWVudAotCQkJCWlucHV0ID0gZ2V0TmV3WFNERWxlbWVudChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpKTsKLQkJCQlmb3JtYXRDaGlsZChnZXRYU0RQYXJlbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgWFNEQ29uY3JldGVDb21wb25lbnQgZ2V0WFNEUGFyZW50KFhTRENvbmNyZXRlQ29tcG9uZW50IHhzZCkgewotCQlYU0RDb25jcmV0ZUNvbXBvbmVudCBwYXJlbnQgPSB4c2QuZ2V0U2NoZW1hKCk7Ci0JCXJldHVybiBwYXJlbnQ7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIGlucHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW50ZXJmYWNlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbnRlcmZhY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZWY3ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbnRlcmZhY2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUG9ydFR5cGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRJbnRlcmZhY2VDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIFN0cmluZyBuZXdOYW1lOwotCXByaXZhdGUgUG9ydFR5cGUgbmV3UG9ydFR5cGU7Ci0JCi0JcHVibGljIFcxMUFkZEludGVyZmFjZUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfUE9SVFRZUEUsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXROZXdQb3J0VHlwZU5hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQl9Ci0JCi0JcHVibGljIFBvcnRUeXBlIGdldE5ld1BvcnRUeXBlKCkgewotCQlyZXR1cm4gbmV3UG9ydFR5cGU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlpZiAobmV3TmFtZSA9PSBudWxsIHx8IG5ld05hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJbmV3TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUG9ydFR5cGVOYW1lKGRlZmluaXRpb24sICJOZXdQb3J0VHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQkvLyBBZGQgdGhlIFBvcnQgVHlwZQotCQkJQWRkUG9ydFR5cGVDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUG9ydFR5cGVDb21tYW5kKGRlZmluaXRpb24sIG5ld05hbWUsIGZhbHNlKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkKLQkJCW5ld1BvcnRUeXBlID0gKFBvcnRUeXBlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQkKLQkJCS8vIEFkZCB0aGUgT3BlcmF0aW9uCi0JCQlJSW50ZXJmYWNlIGlJbnRlcmZhY2UgPSAoSUludGVyZmFjZSkgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQobmV3UG9ydFR5cGUpOwotCQkJQ29tbWFuZCBhZGRPcGVyYXRpb25Db21tYW5kID0gaUludGVyZmFjZS5nZXRBZGRPcGVyYXRpb25Db21tYW5kKCk7Ci0JCQlhZGRPcGVyYXRpb25Db21tYW5kLmV4ZWN1dGUoKTsKLQkJCWZvcm1hdENoaWxkKG5ld1BvcnRUeXBlLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIG5ld1BvcnRUeXBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkTWVzc2FnZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkTWVzc2FnZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk4NDRlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE1lc3NhZ2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE1lc3NhZ2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRNZXNzYWdlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbmV3TmFtZTsKLSAgICBwcml2YXRlIE1lc3NhZ2UgbWVzc2FnZTsKLQkKLSAgICBwdWJsaWMgVzExQWRkTWVzc2FnZUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX01FU1NBR0UsIGRlZmluaXRpb24pOwotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXROZXdNZXNzYWdlTmFtZShTdHJpbmcgbmV3TmFtZSkgewotCQl0aGlzLm5ld05hbWUgPSBuZXdOYW1lOwotCX0KLQotICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0gICAgCXRyeSB7Ci0gICAgCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0gICAgCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlpZiAobmV3TmFtZSA9PSBudWxsIHx8IG5ld05hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJbmV3TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoZGVmaW5pdGlvbiwgIk5ld01lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQotCSAgICAJQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRNZXNzYWdlQ29tbWFuZChkZWZpbml0aW9uLCBuZXdOYW1lLCB0cnVlKTsKLQkgICAgICAgIGNvbW1hbmQucnVuKCk7Ci0JICAgICAgICBtZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkgICAgICAgIGZvcm1hdENoaWxkKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLSAgICAJfQotICAgIAlmaW5hbGx5IHsKLSAgICAJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIE1lc3NhZ2UgZ2V0TmV3TWVzc2FnZSgpIHsKLSAgICAJcmV0dXJuIG1lc3NhZ2U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLSAgICAJcmV0dXJuIG1lc3NhZ2U7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPcGVyYXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZTBhYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPcGVyYXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkRmF1bHRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZElucHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3BlcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZE9wZXJhdGlvbkNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotCXByaXZhdGUgUG9ydFR5cGUgcG9ydFR5cGU7Ci0JcHJpdmF0ZSBPcGVyYXRpb24gb3BlcmF0aW9uOwotCQotCXB1YmxpYyBXMTFBZGRPcGVyYXRpb25Db21tYW5kKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX09QRVJBVElPTiwgcG9ydFR5cGUuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5wb3J0VHlwZSA9IHBvcnRUeXBlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcocG9ydFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJCQotCQkJU3RyaW5nIG5hbWUgPSBOYW1lVXRpbC5nZXRPcGVyYXRpb25OYW1lKHBvcnRUeXBlKTsKLQkJCUFkZE9wZXJhdGlvbkNvbW1hbmQgb3BlcmF0aW9uQ29tbWFuZCA9IG5ldyBBZGRPcGVyYXRpb25Db21tYW5kKHBvcnRUeXBlLCBuYW1lKTsKLQkJCW9wZXJhdGlvbkNvbW1hbmQucnVuKCk7Ci0JCQlvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBvcGVyYXRpb25Db21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCi0JCQljcmVhdGVNZXNzYWdlKG9wZXJhdGlvbiwgSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCk7Ci0JCQljcmVhdGVNZXNzYWdlKG9wZXJhdGlvbiwgSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpOwotCQotCQkJY3JlYXRlUGFyYW1ldGVyKG9wZXJhdGlvbiwgbnVsbCwgSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCk7Ci0JCQljcmVhdGVQYXJhbWV0ZXIob3BlcmF0aW9uLCBudWxsLCBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCk7Ci0JCi0JCQlvcGVyYXRpb24uc2V0U3R5bGUoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKTsKLQkJCWZvcm1hdENoaWxkKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKHBvcnRUeXBlLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gb3BlcmF0aW9uOwotCX0KLQkKLQlwcml2YXRlIE1lc3NhZ2VSZWZlcmVuY2UgY3JlYXRlTWVzc2FnZShPcGVyYXRpb24gb3BlcmF0aW9uLCBpbnQgbWVzc2FnZUtpbmQpIHsKLQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gbnVsbDsKLQkJQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQgbWVzc2FnZVJlZkNvbW1hbmQgPSBudWxsOwotCSAgICBpZiAobWVzc2FnZUtpbmQgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkKLQkgICAgewotCSAgICAJbWVzc2FnZVJlZkNvbW1hbmQgPSBuZXcgQWRkSW5wdXRDb21tYW5kKG9wZXJhdGlvbiwgbnVsbCk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAobWVzc2FnZUtpbmQgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpCi0JICAgIHsKLQkgICAgCW1lc3NhZ2VSZWZDb21tYW5kID0gbmV3IEFkZE91dHB1dENvbW1hbmQob3BlcmF0aW9uLCBudWxsKTsKLQkgICAgfQotCSAgICBlbHNlIGlmIChtZXNzYWdlS2luZCA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0ZBVUxUKQotCSAgICB7Ci0JICAgIAltZXNzYWdlUmVmQ29tbWFuZCA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLCBOYW1lVXRpbC5nZXRGYXVsdE5hbWUob3BlcmF0aW9uKSk7Ci0JICAgIH0KLQkgICAgbWVzc2FnZVJlZkNvbW1hbmQucnVuKCk7Ci0JICAgIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgbWVzc2FnZVJlZkNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkgICAgCi0vLwkgICAgQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRNZXNzYWdlQ29tbWFuZChtZXNzYWdlUmVmLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgTmFtZVV0aWwuZ2V0TWVzc2FnZU5hbWUobWVzc2FnZVJlZikpOwotLy8JICAgIGNvbW1hbmQucnVuKCk7Ci0vLwkgICAgbWVzc2FnZVJlZi5zZXRFTWVzc2FnZSgoTWVzc2FnZSkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpKTsKLQkgICAgCi0JICAgIHJldHVybiBtZXNzYWdlUmVmOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgY3JlYXRlUGFyYW1ldGVyKE9wZXJhdGlvbiBvcGVyYXRpb24sIFBhcnQgcGFydCwgaW50IGtpbmQpIHsKLQkJICBJUGFyYW1ldGVyIHBhcmFtZXRlciA9IG51bGw7Ci0JCSAgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgYWRkUGFyYW1ldGVyQ29tbWFuZCA9IG51bGw7Ci0JCSAgCi0JCSAgaWYgKGtpbmQgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkgewotCQkJICBpbnQgcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ocG9ydFR5cGUsIHRydWUpOwotCQkJICBpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCSAgcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLQkJCSAgfQotCQkJICBhZGRQYXJhbWV0ZXJDb21tYW5kID0gbmV3IEFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHBhcmFtZXRlclBhdHRlcm4sIHRydWUpOwotCQkgIH0KLQkJICBlbHNlIGlmIChraW5kID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKSB7Ci0JCQkgIGludCBwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihwb3J0VHlwZSwgZmFsc2UpOwotCQkJICBpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCSAgcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLQkJCSAgfQkJCSAgCi0JCQkgIGFkZFBhcmFtZXRlckNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHBhcmFtZXRlclBhdHRlcm4pOwotCQkgIH0KLQkJICAKLQkJICBpZiAocGFyYW1ldGVyID09IG51bGwgJiYgYWRkUGFyYW1ldGVyQ29tbWFuZCAhPSBudWxsKSB7Ci0JCQkgIGFkZFBhcmFtZXRlckNvbW1hbmQucnVuKCk7Ci0JCSAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOGQxZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotCi1wdWJsaWMgY2xhc3MgVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0JcHJpdmF0ZSBPYmplY3Qgb3V0cHV0OwotCXByaXZhdGUgaW50IHBhcmFtZXRlclBhdHRlcm4gPSAtMTsKLQkKLQlwdWJsaWMgVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX09VVFBVVCwgb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJQYXR0ZXJuKGludCBwYXR0ZXJuKSB7Ci0JCXBhcmFtZXRlclBhdHRlcm4gPSBwYXR0ZXJuOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCWlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJLy8gRGV0ZXJtaW5lIHdoaWNoIFBhdHRlcm4gd2Ugc2hvdWxkIHVzZS4gIEZvciBleGFtcGxlLCBBRERCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQKLQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24sIGZhbHNlKTsKLQkJCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24pOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBwYXJhbWV0ZXJQYXR0ZXJuKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlvdXRwdXQgPSBjb21tYW5kLmdldE5ld2x5QWRkZWRDb21wb25lbnRQYXJ0KCk7Ci0JCQkKLQkJCWZvcm1hdENoaWxkKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkuZ2V0RWxlbWVudCgpKTsKLQkJCWlmIChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLQkJCQkvLyBUcnkgdG8gZ3JhYiB0aGUgImlubmVyIiBYU0RFbGVtZW50Ci0JCQkJb3V0cHV0ID0gZ2V0TmV3WFNERWxlbWVudChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpKTsKLQkJCQlmb3JtYXRDaGlsZChnZXRYU0RQYXJlbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgWFNEQ29uY3JldGVDb21wb25lbnQgZ2V0WFNEUGFyZW50KFhTRENvbmNyZXRlQ29tcG9uZW50IHhzZCkgewotCQlYU0RDb25jcmV0ZUNvbXBvbmVudCBwYXJlbnQgPSB4c2Q7Ci0JCQotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgNDsgaW5kZXgrKykgewotCQkJWFNEQ29uY3JldGVDb21wb25lbnQgcHJldmlvdXMgPSBwYXJlbnQ7Ci0JCQlwYXJlbnQgPSBwYXJlbnQuZ2V0Q29udGFpbmVyKCk7Ci0JCQlpZiAocGFyZW50ID09IG51bGwpIHsKLQkJCQlwYXJlbnQgPSBwcmV2aW91czsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gb3V0cHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkUGFydENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkUGFydENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwNGNmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFBhcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUGFydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZFBhcnRDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLSAgICBwcml2YXRlIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICBwcml2YXRlIFBhcnQgcGFydDsKLSAgICAKLSAgICBwdWJsaWMgVzExQWRkUGFydENvbW1hbmQoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1BBUlQsIG1lc3NhZ2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLSAgICAJdHJ5IHsKLSAgICAJCWJlZ2luUmVjb3JkaW5nKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLQotCSAgICAJQWRkUGFydENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBOYW1lVXRpbC5idWlsZFVuaXF1ZVBhcnROYW1lKG1lc3NhZ2UsICJOZXdQYXJ0IikpOyAvLyROT04tTkxTLTEkCi0JICAgICAgICBjb21tYW5kLnJ1bigpOwotCSAgICAgICAgcGFydCA9IChQYXJ0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JICAgICAgICBmb3JtYXRDaGlsZChwYXJ0LmdldEVsZW1lbnQoKSk7Ci0gICAgCX0KLSAgICAJZmluYWxseSB7Ci0gICAgCQllbmRSZWNvcmRpbmcobWVzc2FnZS5nZXRFbGVtZW50KCkpOwotICAgIAl9Ci0gICAgfQotICAgIAotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIHBhcnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRTY2hlbWFDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNjaGVtYUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyNjMzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNjaGVtYUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNEU2NoZW1hQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkU2NoZW1hQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJpdmF0ZSBPYmplY3Qgc2NoZW1hOwotCQotCXB1YmxpYyBXMTFBZGRTY2hlbWFDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1NDSEVNQSwgZGVmaW5pdGlvbik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0gICAgCi0JCQlTdHJpbmcgdG5zID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCUxpc3QgZXhpc3RpbmdOYW1lc3BhY2VzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotCQotCQkJaWYgKHR5cGVzICE9IG51bGwpIHsKLQkJCQlJdGVyYXRvciBlZUl0ID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGVlSXQuaGFzTmV4dCgpKSB7Ci0JCQkJCU9iamVjdCBpdGVtID0gZWVJdC5uZXh0KCk7Ci0JCQkJCWlmIChpdGVtIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHsKLQkJCQkJCVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGVlRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXRlbTsKLQkJCQkJCWlmIChlZUVsZW1lbnQuZ2V0U2NoZW1hKCkgIT0gbnVsbCkgewotCQkJCQkJCVN0cmluZyBucyA9IGVlRWxlbWVudC5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCQkJCQlleGlzdGluZ05hbWVzcGFjZXMuYWRkKG5zKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gCi0JCQl9Ci0JCQl0bnMgPSBOYW1lVXRpbC5nZXRVbmlxdWVOYW1lSGVscGVyKHRucywgZXhpc3RpbmdOYW1lc3BhY2VzKTsKLQkJCQotCQkJQWRkWFNEU2NoZW1hQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTRFNjaGVtYUNvbW1hbmQoZGVmaW5pdGlvbiwgdG5zKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlmb3JtYXRDaGlsZChjb21tYW5kLmdldFdTRExFbGVtZW50KCkuZ2V0RWxlbWVudCgpKTsKLQkJCXNjaGVtYSA9IGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gc2NoZW1hOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNlcnZpY2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNlcnZpY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjlhODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRTZXJ2aWNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmluZGluZ0dlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuUG9ydEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRTZXJ2aWNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuU2VydmljZVBvbGljeUhlbHBlcjsKLQotcHVibGljIGNsYXNzIFcxMUFkZFNlcnZpY2VDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIFNlcnZpY2Ugc2VydmljZTsKLQkKLQlwdWJsaWMgVzExQWRkU2VydmljZUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9TRVJWSUNFLCBkZWZpbml0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCXN1cGVyLmV4ZWN1dGUoKTsKLQkJCVN0cmluZyBuZXdOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVTZXJ2aWNlTmFtZShkZWZpbml0aW9uKTsKLQkJCUFkZFNlcnZpY2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkU2VydmljZUNvbW1hbmQoZGVmaW5pdGlvbiwgbmV3TmFtZSwgZmFsc2UpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCXNlcnZpY2UgPSAoU2VydmljZSkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQkJCi0JCQlQb3J0R2VuZXJhdG9yIHBvcnRHZW5lcmF0b3IgPSBuZXcgUG9ydEdlbmVyYXRvcihzZXJ2aWNlKTsKLQkJCQotCQkJLy8gc2V0IHRoZSBkZWZhdWx0IGNvbnRlbnQgZ2VuZXJhdG9yCi0JCQlDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3IgPSBudWxsOwotCQkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoZGVmaW5pdGlvbik7Ci0JCQlTdHJpbmcgcHJvdG9jb2wgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldERlZmF1bHRCaW5kaW5nKHByb2plY3QpOwotCQkJaWYgKHByb3RvY29sICE9IG51bGwpIHsKLQkJCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkJCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lc3BhY2UocHJvdG9jb2wpOwotCQkJCWlmIChleHQgIT0gbnVsbCkgewotCQkJCQljb250ZW50R2VuZXJhdG9yID0gQmluZGluZ0dlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKGV4dC5nZXROYW1lc3BhY2UoKSk7Ci0JCQkJICB9Ci0JCQl9Ci0JCQkvLyB1bmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgY29udGVudCBnZW5lcmF0b3IsIHRyeSBhZ2FpbgotCQkJaWYgKGNvbnRlbnRHZW5lcmF0b3IgPT0gbnVsbCkgewotCQkJCS8vIEdldCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbnRlbnQgZ2VuZXJhdG9yCi0JCQkJTGlzdCBwcm90b2NvbHMgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRCaW5kaW5nRXh0ZW5zaW9uTmFtZXMoKTsKLQkJCQlpZiAocHJvdG9jb2xzLnNpemUoKSA+PSAxKSB7Ci0JCQkJCXByb3RvY29sID0gKFN0cmluZylwcm90b2NvbHMuZ2V0KDApOwotCQkJCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTmFtZShwcm90b2NvbCk7Ci0JCQkJCWlmIChleHQgIT0gbnVsbCkgewotCQkJCQkJY29udGVudEdlbmVyYXRvciA9IEJpbmRpbmdHZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcihleHQuZ2V0TmFtZXNwYWNlKCkpOwotCQkJCSAgfQotCQkJCX0KLQkJCX0KLQkJCXBvcnRHZW5lcmF0b3Iuc2V0Q29udGVudEdlbmVyYXRvcihjb250ZW50R2VuZXJhdG9yKTsKLQkJCXBvcnRHZW5lcmF0b3Iuc2V0TmFtZShOYW1lVXRpbC5idWlsZFVuaXF1ZVBvcnROYW1lKHNlcnZpY2UsICJOZXdQb3J0IikpOyAvLyROT04tTkxTLTEkCi0JCQlwb3J0R2VuZXJhdG9yLmdlbmVyYXRlUG9ydCgpOwotCQkJCi0JCQlmb3JtYXRDaGlsZChzZXJ2aWNlLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIHNlcnZpY2U7Ci0JfQotCi0JcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0KERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQotCQlTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0JCVVSTCB1cmwgPSBudWxsOwotCQl0cnkgewotCQkJdXJsID0gbmV3IFVSTChsb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWlmICh1cmwgIT0gbnVsbCkgewotCQkJVVJMIGZpbGVVUkwgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlmaWxlVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQlpZiAoZmlsZVVSTCAhPSBudWxsKSB7Ci0JCQkJSVBhdGggcGF0aCA9IG5ldyBQYXRoKGZpbGVVUkwuZ2V0UGF0aCgpKTsKLQkJCQlJRmlsZSBmaWxlc1tdID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kRmlsZXNGb3JMb2NhdGlvbihwYXRoKTsKLQkJCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCQlpZiAoZmlsZXMubGVuZ3RoID4gMCkgewotCQkJCQkvLyBqdXN0IGdldCB0aGUgZmlyc3QgZmlsZQotCQkJCQlmaWxlID0gZmlsZXNbMF07Ci0JCQkJfQotCQkJCXByb2plY3QgPSBmaWxlLmdldFByb2plY3QoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcHJvamVjdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMURlbGV0ZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTkyM2M4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExRGVsZXRlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgb2JqZWN0OwotCQotCXB1YmxpYyBXMTFEZWxldGVDb21tYW5kKFdTRExCYXNlQWRhcHRlciBvYmplY3QpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9ERUxFVEUsIG51bGwpOwotCQl0aGlzLm9iamVjdCA9IG9iamVjdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJaWYgKG9iamVjdC5nZXRUYXJnZXQoKSBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQllbGVtZW50ID0gKChXU0RMRWxlbWVudCkgb2JqZWN0LmdldFRhcmdldCgpKS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0LmdldFRhcmdldCgpIGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCWVsZW1lbnQgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvYmplY3QuZ2V0VGFyZ2V0KCkpLmdldEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGVsZW1lbnQpOwotCQkJCi0JCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExU2VydmljZSkgewotCQkJCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJc2VydmljZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVNlcnZpY2VzKCkucmVtb3ZlKHNlcnZpY2UpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLQkJCQlTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgKChXMTFTZXJ2aWNlKSAoKFcxMUVuZFBvaW50KSBvYmplY3QpLmdldE93bmVyU2VydmljZSgpKS5nZXRUYXJnZXQoKTsKLQkJCQlQb3J0IHBvcnQgPSAoUG9ydCkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCXNlcnZpY2UuZ2V0RVBvcnRzKCkucmVtb3ZlKHBvcnQpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExQmluZGluZykgewotCQkJCUJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RUJpbmRpbmdzKCkucmVtb3ZlKGJpbmRpbmcpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExSW50ZXJmYWNlKSB7Ci0JCQkJUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlwb3J0VHlwZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVBvcnRUeXBlcygpLnJlbW92ZShwb3J0VHlwZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFPcGVyYXRpb24pIHsKLQkJCQlQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgKChXMTFJbnRlcmZhY2UpICgoVzExT3BlcmF0aW9uKSBvYmplY3QpLmdldE93bmVySW50ZXJmYWNlKCkpLmdldFRhcmdldCgpOwotCQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5yZW1vdmUob3BlcmF0aW9uKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCU1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBwYXJ0LmVDb250YWluZXIoKTsKLQkJCQltZXNzYWdlLmdldEVQYXJ0cygpLnJlbW92ZShwYXJ0KTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElJbXBvcnQpIHsKLQkJCQlJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydCkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCXRoZUltcG9ydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RUltcG9ydHMoKS5yZW1vdmUodGhlSW1wb3J0KTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMVR5cGUpIHsKLQkJCQlXMTFUeXBlIHcxMVR5cGUgPSAoVzExVHlwZSkgb2JqZWN0OwotCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKSAgdzExVHlwZS5nZXRUYXJnZXQoKTsKLQkJCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHNjaGVtYS5lQ29udGFpbmVyKCk7Ci0JCQkJVHlwZXMgdHlwZSA9IChUeXBlcykgZWVFbGVtZW50LmdldENvbnRhaW5lcigpOwotCQkJCXR5cGUuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnJlbW92ZShlZUVsZW1lbnQpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW1lc3NhZ2VSZWYuZUNvbnRhaW5lcigpOwotCQkJCWlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgSW5wdXQpIHsKLQkJCQkJb3BlcmF0aW9uLnNldEVJbnB1dChudWxsKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIE91dHB1dCkgewotCQkJCQlvcGVyYXRpb24uc2V0RU91dHB1dChudWxsKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEZhdWx0KSB7Ci0JCQkJCW9wZXJhdGlvbi5nZXRFRmF1bHRzKCkucmVtb3ZlKG1lc3NhZ2VSZWYpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElNZXNzYWdlKSB7Ci0JCQkJTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQltZXNzYWdlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5yZW1vdmUobWVzc2FnZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZWxlbWVudCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDEyNWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBXMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBJUGFyYW1ldGVyIHBhcmFtZXRlcjsKLQkKLQlwdWJsaWMgVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZChJUGFyYW1ldGVyIHBhcmFtKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fREVMRVRFLCBudWxsKTsKLQkJdGhpcy5wYXJhbWV0ZXIgPSBwYXJhbTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJT2JqZWN0IG9iamVjdCA9ICgoV1NETEJhc2VBZGFwdGVyKSBwYXJhbWV0ZXIpLmdldFRhcmdldCgpOwotCQlFbGVtZW50IGVsZW1lbnQgPSBudWxsOwotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQllbGVtZW50ID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIG9iamVjdCkuZ2V0RWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQllbGVtZW50ID0gKChQYXJ0KSBvYmplY3QpLmdldEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJaWYgKGVsZW1lbnQgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQliZWdpblJlY29yZGluZyhlbGVtZW50KTsKLQkJCQlkZWxldGUoKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWVuZFJlY29yZGluZyhlbGVtZW50KTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgZGVsZXRlKCkgewotCQlPYmplY3Qgb2JqZWN0ID0gKChXU0RMQmFzZUFkYXB0ZXIpIHBhcmFtZXRlcikuZ2V0VGFyZ2V0KCk7Ci0JCQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQlYU0RDb25jcmV0ZUNvbXBvbmVudCB4c2RDb21wb25lbnQgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgb2JqZWN0KS5nZXRDb250YWluZXIoKTsKLQkJCQotCQkJaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIHhzZENvbXBvbmVudDsKLQkJCQlpZiAocGFydGljbGUuZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJ0aWNsZS5nZXRDb250YWluZXIoKTsKLQkJCQkJaWYgKG1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5zaXplKCkgPj0gMikgewotCQkJCQkJbW9kZWxHcm91cC5nZXRDb250ZW50cygpLnJlbW92ZShwYXJ0aWNsZSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQltb2RlbEdyb3VwLmdldENvbnRlbnRzKCkucmVtb3ZlKHBhcnRpY2xlKTsKLQkJCQkJCS8vIFRPRE86IFdlIG5lZWQgdGhlIGxpbmUgYmVsb3cgdG8gZGVsZXRlIHRoZSBNZXNzYWdlIGFuZCBQYXJ0Ci0vLwkJCQkJCXJlbW92ZU1lc3NhZ2VBbmRQYXJ0KHdQYXJhbWV0ZXIuZ2V0UGFydCgpKTsKLQkJCQkJCS8vIFRPRE86IFJlbW92ZSB0aGUgWFNEIGNvbXBvbmVudHMgYXMgd2VsbC4uLi4uCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmICh4c2RDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWEpewotCQkJCS8vIFRPRE86IFdlIG5lZWQgdGhlIGxpbmUgYmVsb3cgdG8gZGVsZXRlIHRoZSBNZXNzYWdlIGFuZCBQYXJ0Ci0vLwkJCQlyZW1vdmVNZXNzYWdlQW5kUGFydCh3UGFyYW1ldGVyLmdldFBhcnQoKSk7IC8vIERlbGV0ZSB0aGUgcGFydCBhcyB3ZWxsCi0JCQkJWFNEU2NoZW1hIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpIHhzZENvbXBvbmVudDsKLQkJCQl4c2RTY2hlbWEuZ2V0Q29udGVudHMoKS5yZW1vdmUob2JqZWN0KTsKLQkJCX0KLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlyZW1vdmVNZXNzYWdlQW5kUGFydCgoUGFydCkgb2JqZWN0KTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNZXNzYWdlKSB7Ci0JCQlyZW1vdmVNZXNzYWdlQW5kUGFydCgoUGFydCkgKChNZXNzYWdlKSBvYmplY3QpLmdldEVQYXJ0cygpLmdldCgwKSk7Ci0JCX0KLQkJCi0JCS8vIERvIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBJbnB1dC9PdXRwdXQvRmF1bHQgTWVzc2FnZVJlZmVyZW5jZSBhcyB3ZWxsIGlmCi0JCS8vIHRoZXJlIGFyZSBubyBtb3JlICJpbnB1dHMiPy4uLi4KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcmVtb3ZlTWVzc2FnZUFuZFBhcnQoUGFydCBwYXJ0KSB7Ci0JCVcxMU1lc3NhZ2VSZWZlcmVuY2UgIHdNZXNzYWdlID0gbnVsbDsKLQkJLyoKLQkJaWYgKHBhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHsKLQkJCXdNZXNzYWdlID0gKFcxMU1lc3NhZ2VSZWZlcmVuY2UpICgoVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgcGFyYW1ldGVyKS5nZXRPd25lcigpOwkKLQkJfQotCQllbHNlICovaWYgKHBhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCXdNZXNzYWdlID0gKFcxMU1lc3NhZ2VSZWZlcmVuY2UpICgoVzExUGFyYW1ldGVyRm9yUGFydCkgcGFyYW1ldGVyKS5nZXRPd25lcigpOwotCQl9Ci0JCQotCQlNZXNzYWdlIG1lc3NhZ2UgPSB3TWVzc2FnZS5nZXRNZXNzYWdlUmVmZXJlbmNlKCkuZ2V0RU1lc3NhZ2UoKTsgCi0JCW1lc3NhZ2UuZ2V0RVBhcnRzKCkucmVtb3ZlKHBhcnQpOwotCQkKLQkJKChEZWZpbml0aW9uKSBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSkuZ2V0RU1lc3NhZ2VzKCkucmVtb3ZlKG1lc3NhZ2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUVkaXROYW1lc3BhY2VzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNhMWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSW5mb01hbmFnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgTGlzdCBuYW1lc3BhY2VzSW5mb0xpc3Q7Ci0JcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotCXByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZVByZWZpeDsKLQkKLQlwdWJsaWMgVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCSAgc3VwZXIoTWVzc2FnZXMuX1VJX0VESVRfTkFNRVNQQUNFUywgZGVmaW5pdGlvbik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZXNJbmZvKExpc3QgbmFtZXNwYWNlcykgewotCQluYW1lc3BhY2VzSW5mb0xpc3QgPSBuYW1lc3BhY2VzOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXROYW1lc3BhY2UoU3RyaW5nIHRucykgewotCQl0YXJnZXROYW1lc3BhY2UgPSB0bnM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFRhcmdldE5hbWVzcGFjZVByZWZpeChTdHJpbmcgcHJlZml4KSB7Ci0JCXRhcmdldE5hbWVzcGFjZVByZWZpeCA9IHByZWZpeDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCXN1cGVyLmV4ZWN1dGUoKTsKLQkJCWlmICh0YXJnZXROYW1lc3BhY2VQcmVmaXggIT0gbnVsbCkgewotCQkJCUVsZW1lbnQgZWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotCi0JCQkJLy8gUmVtb3ZlIHRoZSBvbGQgcHJlZml4Ci0JCQkJU3RyaW5nIG9sZFByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQkJCWVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJ4bWxuczoiK29sZFByZWZpeCk7ICAvLyROT04tTkxTLTEkCi0KLQkJCQkvLyBTZXQgdGhlIG5ldyBwcmVmaXgKLQkJCQllbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHRhcmdldE5hbWVzcGFjZVByZWZpeCwgZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJCVN0cmluZyBuZXdWYWx1ZSA9IHRhcmdldE5hbWVzcGFjZTsKLQkJCQlTdHJpbmcgcHJlZml4ID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCQkJZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UobmV3VmFsdWUpOwotCQkJCWRlZmluaXRpb24uZ2V0RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHByZWZpeCwgbmV3VmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCWlmIChuYW1lc3BhY2VzSW5mb0xpc3QgIT0gbnVsbCkgewotCQkJCURPTU5hbWVzcGFjZUluZm9NYW5hZ2VyIG5hbWVzcGFjZUluZm9NYW5hZ2VyID0gbmV3IERPTU5hbWVzcGFjZUluZm9NYW5hZ2VyKCk7Ci0KLQkJCQkvKgotCQkgICAgICBMaXN0IG5hbWVzcGFjZUluZm9MaXN0ID0gbmFtZXNwYWNlSW5mb01hbmFnZXIuZ2V0TmFtZXNwYWNlSW5mb0xpc3QoZWxlbWVudCk7Ci0vLwkJICAgICAgTGlzdCBvbGROYW1lc3BhY2VJbmZvTGlzdCA9IE5hbWVzcGFjZUluZm8uY2xvbmVOYW1lc3BhY2VJbmZvTGlzdChuYW1lc3BhY2VJbmZvTGlzdCk7Ci0KLQkJICAgICAgLy8gaGVyZSB3ZSBzdG9yZSBhIGNvcHkgb2YgdGhlIG9sZCBpbmZvIGZvciBlYWNoIE5hbWVzcGFjZUluZm8KLQkJICAgICAgLy8gdGhpcyBpbmZvIHdpbGwgYmUgdXNlZCBpbiBjcmVhdGVQcmVmaXhNYXBwaW5nKCkgdG8gZmlndXJlIG91dCBob3cgdG8gdXBkYXRlIHRoZSBkb2N1bWVudCAKLQkJICAgICAgLy8gaW4gcmVzcG9uc2UgdG8gdGhlc2UgY2hhbmdlcwotCQkgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBuYW1lc3BhY2VJbmZvTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCSAgICAgIHsKLQkJICAgICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0JCSAgICAgICAgTmFtZXNwYWNlSW5mbyBvbGRDb3B5ID0gbmV3IE5hbWVzcGFjZUluZm8oaW5mbyk7Ci0JCSAgICAgICAgaW5mby5zZXRQcm9wZXJ0eSgib2xkQ29weSIsIG9sZENvcHkpOyAvLyROT04tTkxTLTEkCi0JCSAgICAgIH0KLQkJCQkgKi8KLQotCQkJCW5hbWVzcGFjZUluZm9NYW5hZ2VyLnJlbW92ZU5hbWVzcGFjZUluZm8oZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQkJCW5hbWVzcGFjZUluZm9NYW5hZ2VyLmFkZE5hbWVzcGFjZUluZm8oZGVmaW5pdGlvbi5nZXRFbGVtZW50KCksIG5hbWVzcGFjZXNJbmZvTGlzdCwgZmFsc2UpOwotCi0JCQkJLyoKLQkgICAgICAgIC8vIHNlZSBpZiB3ZSBuZWVkIHRvIHJlbmFtZSBhbnkgcHJlZml4ZXMKLQkgICAgICAgIE1hcCBwcmVmaXhNYXBwaW5nID0gY3JlYXRlUHJlZml4TWFwcGluZyhvbGROYW1lc3BhY2VJbmZvTGlzdCwgbmFtZXNwYWNlSW5mb0xpc3QpOwotCSAgICAgICAgaWYgKHByZWZpeE1hcHBpbmcuc2l6ZSgpID4gMCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgLy9tYW5hZ2VyLmdldE1vZGVsKCkuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0JICAgICAgICAgIFJlcGxhY2VQcmVmaXhBY3Rpb24gcmVwbGFjZVByZWZpeEFjdGlvbiA9IG5ldyBSZXBsYWNlUHJlZml4QWN0aW9uKGVsZW1lbnQsIHByZWZpeE1hcHBpbmcpOwotCSAgICAgICAgICByZXBsYWNlUHJlZml4QWN0aW9uLnJ1bigpOwotCSAgICAgICAgICAvL21hbmFnZXIuZ2V0TW9kZWwoKS5jaGFuZ2VkTW9kZWwoKTsKLQkgICAgICAgIH0KLQkJCQkgKi8gICAKLQkJCX0KLQotCQkJLyoKLQkJIC8vIENvdWxkIG5vdCBtb2RpZnkgKG1vcmUgc3BlY2lmaWNhbGx5IHJlbW92ZSkgbmFtZXNwYWNlcyB2aWEgbW9kZWwuLi4uLgotCQkgLy8gc2hvdWxkIHJldmlzaXQgdGhpcwotCQlpZiAodGFyZ2V0TmFtZXNwYWNlICE9IG51bGwgfHwgdGFyZ2V0TmFtZXNwYWNlUHJlZml4ICE9IG51bGwpIHsKLQkJCU1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQkJCVN0cmluZyBvbGRUYXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJU3RyaW5nIG9sZFByZWZpeCA9IG51bGw7Ci0KLQkJCUl0ZXJhdG9yIGl0ID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLQkJCQlPYmplY3QgdmFsdWUgPSBtYXAuZ2V0KGtleSk7Ci0JCQkJaWYgKHZhbHVlICE9IG51bGwgJiYgb2xkVGFyZ2V0TmFtZXNwYWNlICE9IG51bGwgJiYgdmFsdWUuZXF1YWxzKG9sZFRhcmdldE5hbWVzcGFjZSkpIHsKLQkJCQkJb2xkUHJlZml4ID0ga2V5OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChvbGRQcmVmaXggIT0gbnVsbCAmJiAhb2xkUHJlZml4LmVxdWFscyh0YXJnZXROYW1lc3BhY2VQcmVmaXgpKSB7Ci0JCQkJbWFwLnJlbW92ZShvbGRQcmVmaXgpOwotCQkJCWRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCQkJfQotCi0JCQlTdHJpbmcgdG5zID0gIiI7Ci0JCQlTdHJpbmcgcHJlZml4ID0gIiI7Ci0JCQlpZiAodGFyZ2V0TmFtZXNwYWNlICE9IG51bGwpIHsKLQkJCQl0bnMgPSB0YXJnZXROYW1lc3BhY2U7Ci0JCQl9Ci0JCQlpZiAodGFyZ2V0TmFtZXNwYWNlUHJlZml4ICE9IG51bGwpIHsKLQkJCQlwcmVmaXggPSB0YXJnZXROYW1lc3BhY2VQcmVmaXg7Ci0JCQl9Ci0JCQlkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShwcmVmaXgsIHRucyk7Ci0JCQlkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSh0bnMpOwotLy8JCQltYXAucHV0KHByZWZpeCwgdG5zKTsKLQkJfQotCQkJICovCi0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCS8qCi0JcHJvdGVjdGVkIE1hcCBjcmVhdGVQcmVmaXhNYXBwaW5nKExpc3Qgb2xkTGlzdCwgTGlzdCBuZXdMaXN0KQotCXsKLQkJTWFwIG1hcCA9IG5ldyBIYXNodGFibGUoKTsKLQotCQlIYXNodGFibGUgb2xkVVJJVG9QcmVmaXhUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gb2xkTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCXsKLQkJCU5hbWVzcGFjZUluZm8gb2xkSW5mbyA9IChOYW1lc3BhY2VJbmZvKSBpLm5leHQoKTsKLQkJCW9sZFVSSVRvUHJlZml4VGFibGUucHV0KG9sZEluZm8udXJpLCBvbGRJbmZvKTsKLQkJfQotCi0JCWZvciAoSXRlcmF0b3IgaSA9IG5ld0xpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQl7Ci0JCQlOYW1lc3BhY2VJbmZvIG5ld0luZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0JCQlOYW1lc3BhY2VJbmZvIG9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgb2xkVVJJVG9QcmVmaXhUYWJsZS5nZXQobmV3SW5mby51cmkgIT0gbnVsbCA/IG5ld0luZm8udXJpIDogIiIpOyAvLyROT04tTkxTLTEkCi0KLQkJCS8vIGlmIG9sZEluZm8gaXMgbm9uIG51bGwgLi4uIHRoZXJlJ3MgYSBtYXRjaGluZyBVUkkgaW4gdGhlIG9sZCBzZXQKLQkJCS8vIHdlIGNhbiB1c2UgaXRzIHByZWZpeCB0byBkZXRlbWluZSBvdXQgbWFwcGluZwotCQkJLy8KLQkJCS8vIGlmIG9sZEluZm8gaXMgbnVsbCAuLi4gIHdlIHVzZSB0aGUgJ29sZENvcHknIHdlIHN0YXNoZWQgYXdheSAKLQkJCS8vIGFzc3VtaW5nIHRoYXQgdGhlIHVzZXIgY2hhbmdlZCB0aGUgVVJJIGFuZCB0aGUgcHJlZml4Ci0JCQlpZiAob2xkSW5mbyA9PSBudWxsKQotCQkJewotCQkJCW9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgbmV3SW5mby5nZXRQcm9wZXJ0eSgib2xkQ29weSIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCWlmIChvbGRJbmZvICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIG5ld1ByZWZpeCA9IG5ld0luZm8ucHJlZml4ICE9IG51bGwgPyBuZXdJbmZvLnByZWZpeCA6ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJU3RyaW5nIG9sZFByZWZpeCA9IG9sZEluZm8ucHJlZml4ICE9IG51bGwgPyBvbGRJbmZvLnByZWZpeCA6ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKCFvbGRQcmVmaXguZXF1YWxzKG5ld1ByZWZpeCkpCi0JCQkJewotCQkJCQltYXAucHV0KG9sZFByZWZpeCwgbmV3UHJlZml4KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG1hcDsKLQl9Ci0JKi8KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjExZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5CaW5kaW5nV2l6YXJkOwotCi1wdWJsaWMgY2xhc3MgVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByb3RlY3RlZCBCaW5kaW5nIGJpbmRpbmc7Ci0JCi0JcHVibGljIFcxMUdlbmVyYXRlQmluZGluZ0NvbW1hbmQoQmluZGluZyBiaW5kaW5nKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9HRU5FUkFURV9CSU5ESU5HX0NPTlRFTlQsIGJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQotCQkJQmluZGluZ1dpemFyZCB3aXphcmQgPSBuZXcgQmluZGluZ1dpemFyZChiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgYmluZGluZywgQmluZGluZ1dpemFyZC5LSU5EX1JFR0VORVJBVEVfQklORElORyk7Ci0JCQl3aXphcmQuc2V0QmluZGluZ05hbWUoQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXROYW1lKGJpbmRpbmcpKTsKLQkJCXdpemFyZC5zZXRQb3J0VHlwZU5hbWUoQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRQb3J0VHlwZVJlZmVyZW5jZShiaW5kaW5nKSk7Ci0JCQlXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpLCB3aXphcmQpOwotCQkJd2l6YXJkRGlhbG9nLmNyZWF0ZSgpOwotCQkJaWYgKHdpemFyZERpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJZm9ybWF0Q2hpbGQoYmluZGluZy5nZXRFbGVtZW50KCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlbmFtZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVuYW1lQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjU5Y2E2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVuYW1lQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wYXJ0aWNpcGFudHMuUmVuYW1lUmVmYWN0b3Jpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuU21hcnRSZW5hbWVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5CaW5kaW5nUmVuYW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLk1lc3NhZ2VSZW5hbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuUG9ydFR5cGVSZW5hbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlBlcmZvcm1VbnNhdmVkUmVmYWN0b3JpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5SZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlhNTFJlZmFjdG9yaW5nQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IucmVuYW1lLlJlbmFtZUNvbXBvbmVudFByb2Nlc3NvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExUmVuYW1lQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgb2JqZWN0OwotCXByb3RlY3RlZCBTdHJpbmcgbmV3TmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgVzExUmVuYW1lQ29tbWFuZChXU0RMQmFzZUFkYXB0ZXIgb2JqZWN0LCBTdHJpbmcgbmV3TmFtZSkgewotCQlzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1JFTkFNRSwgKG9iamVjdC5nZXRUYXJnZXQoKSBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSA/ICgoV1NETEVsZW1lbnQpIG9iamVjdC5nZXRUYXJnZXQoKSkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIDogIG51bGwpOwotCQl0aGlzLm9iamVjdCA9IG9iamVjdDsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQkJU3RyaW5nIG9yaWdOYW1lID0gbnVsbDsKLQkJCQotCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMURlc2NyaXB0aW9uKSB7Ci0JCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kLmVuc3VyZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0JCQkJU3RyaW5nIG5zID0gZGVmaW5pdGlvbi5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQkJCWRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKG5zLCBuZXdOYW1lKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFTZXJ2aWNlKSB7Ci0JCQkJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlTdHJpbmcgbnMgPSBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQkJc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUobnMsIG5ld05hbWUpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0JCQkJUG9ydCBwb3J0ID0gKFBvcnQpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlwb3J0LnNldE5hbWUobmV3TmFtZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFCaW5kaW5nKSB7Ci0JCQkJQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlvcmlnTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUludGVyZmFjZSkgewotCQkJCVBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJb3JpZ05hbWUgPSBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExT3BlcmF0aW9uKSB7Ci0JCQkJT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlTbWFydFJlbmFtZUFjdGlvbiBhY3Rpb24gPSBuZXcgU21hcnRSZW5hbWVBY3Rpb24ob3BlcmF0aW9uLCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVPcGVyYXRpb25IZWxwZXIob3BlcmF0aW9uKTsKLQkJCQlhY3Rpb24ucnVuKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJCXJlbmFtZUlPRkhlbHBlcihlbGVtZW50KTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMU1lc3NhZ2UpIHsKLQkJCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgKChXMTFNZXNzYWdlKSBvYmplY3QpLmdldFRhcmdldCgpOwotLy8JCQkJSXRlcmF0b3IgcGFydHMgPSBtZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0JCQkJb3JpZ05hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCi0JCQkJU21hcnRSZW5hbWVBY3Rpb24gYWN0aW9uID0gbmV3IFNtYXJ0UmVuYW1lQWN0aW9uKG1lc3NhZ2UsIG5ld05hbWUpOwotCQkJCWFjdGlvbi5ydW4oZmFsc2UpOwotLy8JCQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotLy8JCQkJCVNtYXJ0UmVuYW1lQWN0aW9uIGFjdGlvbiA9IG5ldyBTbWFydFJlbmFtZUFjdGlvbihwYXJ0cy5uZXh0KCksIG5ld05hbWUpOwotLy8JCQkJCWFjdGlvbi5ydW4oKTsKLS8vCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgKChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJCVNtYXJ0UmVuYW1lQWN0aW9uIGFjdGlvbiA9IG5ldyBTbWFydFJlbmFtZUFjdGlvbihwYXJ0LCBuZXdOYW1lKTsKLQkJCQlhY3Rpb24ucnVuKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFCaW5kaW5nT3BlcmF0aW9uKSB7Ci0JCQkJQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pICgoVzExQmluZGluZ09wZXJhdGlvbikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCQliaW5kaW5nT3BlcmF0aW9uLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCkuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkvLyBUT0RPOiBXZSBzaG91bGQgZ28gb2ZmIGFuZCByZW5hbWUgdGhlIGFzc29jaWF0ZWQgUG9ydFR5cGUgT3BlcmF0aW9uCi0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCU9iamVjdCBiaW5kaW5nTWVzc2FnZVJlZiA9ICgoVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJaWYgKGJpbmRpbmdNZXNzYWdlUmVmIGluc3RhbmNlb2YgQmluZGluZ0lucHV0KSB7Ci0JCQkJCSgoQmluZGluZ0lucHV0KSBiaW5kaW5nTWVzc2FnZVJlZikuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJKChCaW5kaW5nSW5wdXQpIGJpbmRpbmdNZXNzYWdlUmVmKS5nZXRFSW5wdXQoKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCQkvLyBUT0RPOiBXZSBzaG91bGQgZ28gb2ZmIGFuZCByZW5hbWUgdGhlIGFzc29jaWF0ZWQgUG9ydHR5cGUgTWVzc2FnZVJlZmVyZW5jZQotCQkJCX0KLQkJCQllbHNlIGlmIChiaW5kaW5nTWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpIHsKLQkJCQkJKChCaW5kaW5nT3V0cHV0KSBiaW5kaW5nTWVzc2FnZVJlZikuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJKChCaW5kaW5nT3V0cHV0KSBiaW5kaW5nTWVzc2FnZVJlZikuZ2V0RU91dHB1dCgpLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJCS8vIFRPRE86IFdlIHNob3VsZCBnbyBvZmYgYW5kIHJlbmFtZSB0aGUgYXNzb2NpYXRlZCBQb3J0dHlwZSBPdXRwdXQJCQkJCi0JCQkJfQotCQkJCWVsc2UgaWYgKGJpbmRpbmdNZXNzYWdlUmVmIGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KSB7Ci0JCQkJCSgoQmluZGluZ0ZhdWx0KSBiaW5kaW5nTWVzc2FnZVJlZikuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJKChCaW5kaW5nRmF1bHQpIGJpbmRpbmdNZXNzYWdlUmVmKS5nZXRFRmF1bHQoKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCQkvLyBUT0RPOiBXZSBzaG91bGQgZ28gb2ZmIGFuZCByZW5hbWUgdGhlIGFzc29jaWF0ZWQgUG9ydHR5cGUgRmF1bHQKLQkJCQl9Ci0JCQl9Ci0JCi0JCQlPYmplY3QgdGFyZ2V0ID0gb2JqZWN0LmdldFRhcmdldCgpOwotCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50ICYmIG9yaWdOYW1lICE9IG51bGwpIHsKLQkJCQlXU0RMRWxlbWVudCBjb21wb25lbnQgPSAoV1NETEVsZW1lbnQpIHRhcmdldDsKLQkJCQlTdHJpbmcgbmFtZXNwYWNlID0gY29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkKLQkJCQlSZWZhY3RvcmluZ0NvbXBvbmVudCByZWZhY3RvcmluZ0NvbXBvbmVudCA9IG5ldyBYTUxSZWZhY3RvcmluZ0NvbXBvbmVudCgKLQkJCQkJCWNvbXBvbmVudCwKLQkJCQkJCShJRE9NRWxlbWVudCljb21wb25lbnQuZ2V0RWxlbWVudCgpLCAKLQkJCQkJCW9yaWdOYW1lLAotCQkJCQkJbmFtZXNwYWNlKTsKLQkKLQkJCQlSZW5hbWVDb21wb25lbnRQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IFJlbmFtZUNvbXBvbmVudFByb2Nlc3NvcihyZWZhY3RvcmluZ0NvbXBvbmVudCwgbmV3TmFtZSwgdHJ1ZSk7ICAgIAotCQkJCVJlbmFtZVJlZmFjdG9yaW5nIHJlZmFjdG9yaW5nID0gbmV3IFJlbmFtZVJlZmFjdG9yaW5nKHByb2Nlc3Nvcik7Ci0JCQkJUGVyZm9ybVVuc2F2ZWRSZWZhY3RvcmluZ09wZXJhdGlvbiByZWZhY3Rvck9wZXJhdGlvbiA9IG5ldyBQZXJmb3JtVW5zYXZlZFJlZmFjdG9yaW5nT3BlcmF0aW9uKHJlZmFjdG9yaW5nKTsKLQkJCQlyZWZhY3Rvck9wZXJhdGlvbi5ydW4obnVsbCk7IAotCQkJCQotCSAgICAgICAgICAgIC8vIHJtYWggOiBkdWUgdG8gdGhlIG9yZGVyaW5nIGluIHdoaWNoIHJlZmFjdG9yaW5nIGlzIGNhbGxlZAotCSAgICAgICAgICAgIC8vIChpLmUuIHRoZSByZWZlcmVuY2UgY2hhbmdlcyBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIGNoYW5nZXMpIAotCSAgICAgICAgICAgIC8vIG91ciBtb2RlbCByZWZlcmVuY2VzIG1heSBiZSBtZXNzZWQgdXAgYXQgdGhpcyBwb2ludC4KLQkgICAgICAgICAgICAvLyBUaGUgbGluZSBvZiBjb2RlIGJlbG93IGdldHMgdGhlIG1vZGVsIHRvIGZpeCB1cCBpdHMgcmVmZXJlbmNlcy4gIAotCQkJCSgoRGVmaW5pdGlvbkltcGwpIGNvbXBvbmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCi0JLy8gVE9ETzogV2Ugc2hvdWxkIGxvb2sgYXQgdXNpbmcgdGhlIHJlZmFjdG9yIG1lY2hhbmlzbSB0byBkbyB0aGlzIHJlbmFtaW5nLi4uLgotCXByaXZhdGUgdm9pZCByZW5hbWVPcGVyYXRpb25IZWxwZXIoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOyAKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoZGVmaW5pdGlvbik7Ci0JCUl0ZXJhdG9yIGl0ID0gdXRpbC5nZXRCaW5kaW5nT3BlcmF0aW9ucyhvcGVyYXRpb24pLml0ZXJhdG9yKCk7Ci0KLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGl0Lm5leHQoKTsKLQkJCUVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChiaW5kaW5nT3BlcmF0aW9uKTsKLQkJCWlmIChlbGVtZW50ICE9IG51bGwpCi0JCQl7IAotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmV3TmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCS8vCQkgICAgVE9ETzogV2Ugc2hvdWxkIGdvIHRocm91Z2ggdGhlIG1vZGVsIHRvIHJlbmFtZS4uLi4gTm90IHRoZSBFbGVtZW50Li4uCi0JCQkvLwkJCWJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuZXdOYW1lKTsKLQkJfQotCX0KLQotCS8vIFRPRE86IFdlIHNob3VsZCBsb29rIGF0IHVzaW5nIHRoZSByZWZhY3RvciBtZWNoYW5pc20gdG8gZG8gdGhpcyByZW5hbWluZy4uLi4KLQlwcml2YXRlIHZvaWQgcmVuYW1lSU9GSGVscGVyKFdTRExFbGVtZW50IG9iamVjdCkKLQl7ICAgICAgICAgICAgICAgICAgICAgICAgIAotCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvYmplY3QuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOyAKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoZGVmaW5pdGlvbik7Ci0JCUxpc3QgbGlzdCA9IG51bGw7Ci0KLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElucHV0KQotCQl7Ci0JCQlsaXN0ID0gdXRpbC5nZXRCaW5kaW5nSW5wdXRzKChJbnB1dClvYmplY3QpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE91dHB1dCkKLQkJewotCQkJbGlzdCA9IHV0aWwuZ2V0QmluZGluZ091dHB1dHMoKE91dHB1dClvYmplY3QpOwotCQl9Ci0JCWVsc2UgLy8gZmF1bHQKLQkJewotCQkJbGlzdCA9IHV0aWwuZ2V0QmluZGluZ0ZhdWx0cygoRmF1bHQpb2JqZWN0KTsKLQkJfQotCi0JCWlmIChsaXN0ICE9IG51bGwpCi0JCXsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLQkJCXsKLQkJCQlPYmplY3QgYmluZGluZ09iamVjdCA9IGkubmV4dCgpOwotCQkJCXJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKGJpbmRpbmdPYmplY3QsIG5ld05hbWUpOwotCQkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJfQotCi0JCXJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKG9iamVjdCwgbmV3TmFtZSk7Ci0JfQotCi0JLy8gVE9ETzogV2Ugc2hvdWxkIGxvb2sgYXQgdXNpbmcgdGhlIHJlZmFjdG9yIG1lY2hhbmlzbSB0byBkbyB0aGlzIHJlbmFtaW5nLi4uLgotCXByaXZhdGUgdm9pZCByZW5hbWVNb2RlbE9iamVjdEhlbHBlcihPYmplY3QgbW9kZWxPYmplY3QsIFN0cmluZyB0aGVOZXdOYW1lKQotCXsKLQkJLy8gVE9ETzogV2Ugc2hvdWxkIGdvIHRocm91Z2ggdGhlIG1vZGVsIHRvIHJlbmFtZS4uLi4gTm90IHRoZSBFbGVtZW50Li4uCi0JCUVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChtb2RlbE9iamVjdCk7Ci0JCWlmIChlbGVtZW50ICE9IG51bGwpCi0JCXsgCi0JCQllbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIHRoZU5ld05hbWUpOyAvLyROT04tTkxTLTEkCi0JCX0gICAgCi0KLQkJaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSkKLQkJewotCQkJTWVzc2FnZVJlbmFtZXIgcmVuYW1lciA9IG5ldyBNZXNzYWdlUmVuYW1lcigoTWVzc2FnZSltb2RlbE9iamVjdCwgdGhlTmV3TmFtZSk7Ci0JCQlyZW5hbWVyLnZpc2l0QmluZGluZ3MoKTsKLQkJfQotCQllbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotCQl7Ci0JCQlQb3J0VHlwZVJlbmFtZXIgcmVuYW1lciA9IG5ldyBQb3J0VHlwZVJlbmFtZXIoKFBvcnRUeXBlKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLQkJCXJlbmFtZXIudmlzaXRCaW5kaW5ncygpOwotCQl9Ci0JCWVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZykKLQkJewotCQkJQmluZGluZ1JlbmFtZXIgcmVuYW1lciA9IG5ldyBCaW5kaW5nUmVuYW1lcigoQmluZGluZyltb2RlbE9iamVjdCwgdGhlTmV3TmFtZSk7Ci0JCQlyZW5hbWVyLnZpc2l0U2VydmljZXMoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZTgyMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgVzExUmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2libGluZzsKLQlwcm90ZWN0ZWQgSU1lc3NhZ2VSZWZlcmVuY2UgcmlnaHRTaWJsaW5nOwotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSBtb3ZpbmdQYXJhbWV0ZXI7Ci0JCi0JcHVibGljIFcxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQoSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIHJpZ2h0U2libGluZywgSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nUGFyYW1ldGVyKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fUkVPUkRFUl9NRVNTQUdFX1JFRkVSRU5DRSwgbnVsbCk7Ci0JCXRoaXMubGVmdFNpYmxpbmcgPSBsZWZ0U2libGluZzsKLQkJdGhpcy5yaWdodFNpYmxpbmcgPSByaWdodFNpYmxpbmc7Ci0JCXRoaXMubW92aW5nUGFyYW1ldGVyID0gbW92aW5nUGFyYW1ldGVyOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQlJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2liRWxlbWVudCA9IG51bGw7Ci0JCUlNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ0NoaWxkID0gbnVsbDsKLQkJCi0JCWlmIChsZWZ0U2libGluZyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQlsZWZ0U2liRWxlbWVudCA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbGVmdFNpYmxpbmc7IAotCQl9Ci0JCWlmIChtb3ZpbmdQYXJhbWV0ZXIgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJbW92aW5nQ2hpbGQgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vdmluZ1BhcmFtZXRlcjsKLQkJfQotCQkKLQkJVzExT3BlcmF0aW9uIHcxMU9wZXJhdGlvbiA9IChXMTFPcGVyYXRpb24pIG1vdmluZ0NoaWxkLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSB3MTFPcGVyYXRpb24uZ2V0VGFyZ2V0KCk7Ci0JCQotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCWlmIChtb3ZpbmdDaGlsZC5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkgewotCQkJCWlmIChsZWZ0U2liRWxlbWVudCA9PSBudWxsKSB7Ci0JCQkJCS8vIElucHV0L091dHB1dCBzdHlsZQotCQkJCQlzZXRJbnB1dE91dHB1dE9yZGVyKG9wZXJhdGlvbiwgdHJ1ZSk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGxlZnRTaWJFbGVtZW50ICE9IG51bGwgJiYgbGVmdFNpYkVsZW1lbnQuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQpIHsKLQkJCQkJaWYgKHJpZ2h0U2libGluZy5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkJCQkJCS8vIElucHV0L091dHB1dCBzdHlsZQotCQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIHRydWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBPdXRwdXQvSW5wdXQgc3R5bGUKLQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmIChtb3ZpbmdDaGlsZC5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkJCQlpZiAobGVmdFNpYkVsZW1lbnQgPT0gbnVsbCkgewotCQkJCQkvLyBPdXRwdXQvSW5wdXQgc3R5bGUKLQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIGZhbHNlKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAobGVmdFNpYkVsZW1lbnQgIT0gbnVsbCAmJiBsZWZ0U2liRWxlbWVudC5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkJCQkJaWYgKHJpZ2h0U2libGluZy5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkgewotCQkJCQkJLy8gT3V0cHV0L0lucHV0IHN0eWxlCi0JCQkJCQlzZXRJbnB1dE91dHB1dE9yZGVyKG9wZXJhdGlvbiwgZmFsc2UpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBJbnB1dC9PdXRwdXQgc3R5bGUKLQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIHRydWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQkvLyBib29sZWFuIGlucHV0Rmlyc3QgPSB0cnVlIGlmIHRoZSBJbnB1dCBpcyB0aGUgZmlyc3QgaW4gdGhlIG9yZGVyIG9mIElucHV0IGFuZCBPdXRwdXQKLQlwcml2YXRlIHZvaWQgc2V0SW5wdXRPdXRwdXRPcmRlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sZWFuIGlucHV0Rmlyc3QpIHsKLQkJLy8gV2UgbmVlZCB0byBkZXRlcm1pbmUgbW9yZSBpbmZvIGJlZm9yZSB3ZSBjYW4gc2V0IHRoZSBzdHlsZQkKLQkJaWYgKGlucHV0Rmlyc3QgJiYgb3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCS8vIENoZWNrIGlmIHRoZXJlIGlzIGFuIE91dHB1dAotCQkJaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotCQkJCS8vIE9yZGVyIGlzOiBJbnB1dCwgT3V0cHV0Ci0JCQkJc2V0T3BlcmF0aW9uU3R5bGUob3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gT3JkZXIgaXM6IElucHV0Ci0JCQkJc2V0T3BlcmF0aW9uU3R5bGUob3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlLk9ORV9XQVkpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotCQkJLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW4gSW5wdXQKLQkJCWlmIChvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotCQkJCS8vIE9yZGVyIGlzOiBPdXRwdXQsIElucHV0Ci0JCQkJc2V0T3BlcmF0aW9uU3R5bGUob3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gT3JkZXIgaXM6IE91dHB1dAotCQkJCXNldE9wZXJhdGlvblN0eWxlKG9wZXJhdGlvbiwgT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT04pOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRPcGVyYXRpb25TdHlsZShPcGVyYXRpb24gb3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUpIHsKLQkJLy8gSWYgdGhlcmUgaXMgbm8gc3R5bGUgdG8gYmVnaW4gd2l0aCwgZG9uJ3Qgc2V0IG9uZSBub3cKLQkJaWYgKG9wZXJhdGlvbi5nZXRTdHlsZSgpID09IG51bGwpIHsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJb3BlcmF0aW9uLnNldFN0eWxlKG9wZXJhdGlvblR5cGUpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA3NWU4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvckF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotCi1wdWJsaWMgY2xhc3MgVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0gICAgcHJvdGVjdGVkIElQYXJhbWV0ZXIgbGVmdFNpYmxpbmc7Ci0gICAgcHJvdGVjdGVkIElQYXJhbWV0ZXIgcmlnaHRTaWJsaW5nOwotICAgIHByb3RlY3RlZCBJUGFyYW1ldGVyIG1vdmluZ1BhcmFtZXRlcjsKLSAgICAKLSAgICBwdWJsaWMgVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kKElQYXJhbWV0ZXIgbGVmdFNpYmxpbmcsIElQYXJhbWV0ZXIgcmlnaHRTaWJsaW5nLCBJUGFyYW1ldGVyIG1vdmluZ1BhcmFtZXRlcikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1JFT1JERVJfUEFSVCwgbnVsbCk7Ci0gICAgICAgIHRoaXMubGVmdFNpYmxpbmcgPSBsZWZ0U2libGluZzsKLSAgICAgICAgdGhpcy5yaWdodFNpYmxpbmcgPSByaWdodFNpYmxpbmc7Ci0gICAgICAgIHRoaXMubW92aW5nUGFyYW1ldGVyID0gbW92aW5nUGFyYW1ldGVyOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotICAgIAlpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0IHx8Ci0gICAgCQlyaWdodFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0IHx8Ci0gICAgCQltb3ZpbmdQYXJhbWV0ZXIgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0gICAgCQlleGVjdXRlRm9yUGFydCgpOwotICAgIAl9Ci0gICAgCWVsc2UgaWYgKGxlZnRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCB8fAotICAgICAgICAJCSByaWdodFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50IHx8Ci0gICAgICAgIAkJIG1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHsKLSAgICAJCWV4ZWN1dGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAJZWxzZSBpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUgfHwKLSAgICAgICAJCSAgICAgcmlnaHRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlIHx8Ci0gICAgCQkgICAgIG1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckF0dHJpYnV0ZSkgewotLy8gICAgCQlleGVjdXRlRm9yRWxlbWVudCgpOwotICAgIAl9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBleGVjdXRlRm9yRWxlbWVudCgpIHsKLSAgICAJWFNERWxlbWVudERlY2xhcmF0aW9uIGxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLSAgICAJWFNERWxlbWVudERlY2xhcmF0aW9uIHJpZ2h0U2liRWxlbWVudCA9IG51bGw7Ci0gICAgCVhTREVsZW1lbnREZWNsYXJhdGlvbiBtb3ZpbmdDaGlsZCA9IG51bGw7Ci0gICAgCQotCQlYU0RQYXJ0aWNsZSBtb3ZpbmdQYXJ0aWNsZSA9IG51bGw7Ci0JCVhTRFBhcnRpY2xlIGxlZnRQYXJ0aWNsZSA9IG51bGw7Ci0JCVhTRFBhcnRpY2xlIHJpZ2h0UGFydGljbGUgPSBudWxsOwotCi0JCWlmIChsZWZ0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHsKLQkJCWxlZnRTaWJFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgKChXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSBsZWZ0U2libGluZykuZ2V0VGFyZ2V0KCk7Ci0JCQlsZWZ0UGFydGljbGUgPSAoWFNEUGFydGljbGUpIGxlZnRTaWJFbGVtZW50LmVDb250YWluZXIoKTsKLQkJfQotCQlpZiAocmlnaHRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgewotCQkJcmlnaHRTaWJFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgKChXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSByaWdodFNpYmxpbmcpLmdldFRhcmdldCgpOwotCQkJcmlnaHRQYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgcmlnaHRTaWJFbGVtZW50LmVDb250YWluZXIoKTsKLQkJfQotCQlpZiAobW92aW5nUGFyYW1ldGVyIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgewotCQkJbW92aW5nQ2hpbGQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSAoKFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIG1vdmluZ1BhcmFtZXRlcikuZ2V0VGFyZ2V0KCk7Ci0JCQltb3ZpbmdQYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgbW92aW5nQ2hpbGQuZUNvbnRhaW5lcigpOwotCQl9Ci0JCQotCQlpZiAobW92aW5nQ2hpbGQuZXF1YWxzKGxlZnRTaWJFbGVtZW50KSB8fCBtb3ZpbmdDaGlsZC5lcXVhbHMocmlnaHRTaWJFbGVtZW50KSkgewotCQkJcmV0dXJuOwotCQl9Ci0gICAgCQotICAgIAlpZiAobW92aW5nQ2hpbGQgIT0gbnVsbCkgewotICAgIAkJdHJ5IHsKLSAgICAJCQliZWdpblJlY29yZGluZyhtb3ZpbmdQYXJ0aWNsZS5nZXRFbGVtZW50KCkpOwotCi0gICAgCQkJWFNETW9kZWxHcm91cCBjb250YWluZXIgPSAoWFNETW9kZWxHcm91cCkgbW92aW5nUGFydGljbGUuZ2V0Q29udGFpbmVyKCk7Ci0gICAgCQkJTGlzdCBwYXJ0aWNsZXMgPSBjb250YWluZXIuZ2V0Q29udGVudHMoKTsKLSAgICAJCQkKLSAgICAJCQlwYXJ0aWNsZXMucmVtb3ZlKG1vdmluZ1BhcnRpY2xlKTsKLQotICAgIAkJCWludCBsZWZ0SW5kZXggPSAtMSwgcmlnaHRJbmRleCA9IC0xOwotICAgIAkJCWlmIChsZWZ0UGFydGljbGUgIT0gbnVsbCkgewotICAgIAkJCQlsZWZ0SW5kZXggPSBwYXJ0aWNsZXMuaW5kZXhPZihsZWZ0UGFydGljbGUpOwotICAgIAkJCX0KLSAgICAJCQlpZiAocmlnaHRQYXJ0aWNsZSE9IG51bGwpIHsKLSAgICAJCQkJcmlnaHRJbmRleCA9IHBhcnRpY2xlcy5pbmRleE9mKHJpZ2h0UGFydGljbGUpOwotICAgIAkJCX0KLQotICAgIAkJCWlmIChsZWZ0SW5kZXggPT0gLTEpIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCB0byB0aGUgZnJvbnQKLSAgICAJCQkJcGFydGljbGVzLmFkZCgwLCBtb3ZpbmdQYXJ0aWNsZSk7ICAJCQkJCi0gICAgCQkJfQotICAgIAkJCWVsc2UgaWYgKHJpZ2h0SW5kZXggPT0gLTEpIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCB0byB0aGUgZW5kCi0gICAgCQkJCXBhcnRpY2xlcy5hZGQobW92aW5nUGFydGljbGUpOwotICAgIAkJCX0KLSAgICAJCQllbHNlIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCBhZnRlciB0aGUgb2NjdXJlbmNlIG9mIHRoZSBsZWZ0IHNpYmxpbmcKLSAgICAJCQkJcGFydGljbGVzLmFkZChsZWZ0SW5kZXggKyAxLCBtb3ZpbmdQYXJ0aWNsZSk7Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAkJZmluYWxseSB7Ci0gICAgCQkJZW5kUmVjb3JkaW5nKG1vdmluZ1BhcnRpY2xlLmdldEVsZW1lbnQoKSk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGVGb3JQYXJ0KCkgewotCQlQYXJ0IGxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLQkJUGFydCByaWdodFNpYkVsZW1lbnQgPSBudWxsOwotCQlQYXJ0IG1vdmluZ0NoaWxkID0gbnVsbDsKLQotCQlpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQlsZWZ0U2liRWxlbWVudCA9IChQYXJ0KSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIGxlZnRTaWJsaW5nKS5nZXRUYXJnZXQoKTsgCi0JCX0KLQkJaWYgKHJpZ2h0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCXJpZ2h0U2liRWxlbWVudCA9IChQYXJ0KSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIHJpZ2h0U2libGluZykuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJaWYgKG1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCW1vdmluZ0NoaWxkID0gKFBhcnQpICgoVzExUGFyYW1ldGVyRm9yUGFydCkgbW92aW5nUGFyYW1ldGVyKS5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJaWYgKG1vdmluZ0NoaWxkLmVxdWFscyhsZWZ0U2liRWxlbWVudCkgfHwgbW92aW5nQ2hpbGQuZXF1YWxzKHJpZ2h0U2liRWxlbWVudCkpIHsKLQkJCXJldHVybjsKLQkJfQotICAgIAkKLSAgICAJaWYgKG1vdmluZ0NoaWxkICE9IG51bGwpIHsKLSAgICAJCXRyeSB7Ci0gICAgCQkJYmVnaW5SZWNvcmRpbmcobW92aW5nQ2hpbGQuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgbW92aW5nQ2hpbGQuZUNvbnRhaW5lcigpOwotICAgIAkJCUxpc3QgcGFydHMgPSBtZXNzYWdlLmdldEVQYXJ0cygpOwotCi0gICAgCQkJcGFydHMucmVtb3ZlKG1vdmluZ0NoaWxkKTsKLQotICAgIAkJCWludCBsZWZ0SW5kZXggPSAtMSwgcmlnaHRJbmRleCA9IC0xOwotICAgIAkJCWlmIChsZWZ0U2liRWxlbWVudCAhPSBudWxsKSB7Ci0gICAgCQkJCWxlZnRJbmRleCA9IHBhcnRzLmluZGV4T2YobGVmdFNpYkVsZW1lbnQpOwotICAgIAkJCX0KLSAgICAJCQlpZiAocmlnaHRTaWJFbGVtZW50ICE9IG51bGwpIHsKLSAgICAJCQkJcmlnaHRJbmRleCA9IHBhcnRzLmluZGV4T2YocmlnaHRTaWJFbGVtZW50KTsKLSAgICAJCQl9Ci0KLSAgICAJCQlpZiAobGVmdEluZGV4ID09IC0xKSB7Ci0gICAgCQkJCS8vIEFkZCBtb3ZpbmcgY2hpbGQgdG8gdGhlIGZyb250Ci0gICAgCQkJCXBhcnRzLmFkZCgwLCBtb3ZpbmdDaGlsZCk7ICAJCQkJCi0gICAgCQkJfQotICAgIAkJCWVsc2UgaWYgKHJpZ2h0SW5kZXggPT0gLTEpIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCB0byB0aGUgZW5kCi0gICAgCQkJCXBhcnRzLmFkZChtb3ZpbmdDaGlsZCk7Ci0gICAgCQkJfQotICAgIAkJCWVsc2UgewotICAgIAkJCQkvLyBBZGQgbW92aW5nIGNoaWxkIGFmdGVyIHRoZSBvY2N1cmVuY2Ugb2YgdGhlIGxlZnQgc2libGluZwotICAgIAkJCQlwYXJ0cy5hZGQobGVmdEluZGV4ICsgMSwgbW92aW5nQ2hpbGQpOwotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJCWZpbmFsbHkgewotICAgIAkJCWVuZFJlY29yZGluZyhtb3ZpbmdDaGlsZC5nZXRFbGVtZW50KCkpOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QWRkcmVzc0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QWRkcmVzc0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4M2YxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEFkZHJlc3NDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQuVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkRPTUNvbnRlbnRCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01Db250ZW50QnVpbGRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuTW9kZWxRdWVyeVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgVzExU2V0QWRkcmVzc0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIFBvcnQgcG9ydDsKLQlwcml2YXRlIFN0cmluZyBuZXdBZGRyZXNzOwotCQotCXB1YmxpYyBXMTFTZXRBZGRyZXNzQ29tbWFuZChQb3J0IHBvcnQsIFN0cmluZyBuZXdBZGRyZXNzKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fRURJVF9QT1JUX0FERFJFU1MsIHBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5wb3J0ID0gcG9ydDsKLQkJdGhpcy5uZXdBZGRyZXNzID0gbmV3QWRkcmVzczsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQotCQkJLy8gU2hvdWxkIHRoZSBhY3R1YWwgc2V0IGFkZHJlc3MgY29kZSBsaXZlIGluIGl0J3MgJ293biBzZXBhcmF0ZScgY29tbWFuZD8/Ci0JCQlpZiAoIXNldEFkZHJlc3MoKSkgewotCQkJCWNyZWF0ZU5ld0V4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0JCQkJc2V0QWRkcmVzcygpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gc2V0QWRkcmVzcygpIHsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7Ci0JCQotCQlpZiAocG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpID4gMCkgewotCQkJSXRlcmF0b3IgZWVJdCA9IHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoZWVJdC5oYXNOZXh0KCkpIHsKLQkJCQlOb3RpZmllciBub3RpZmllciA9IChOb3RpZmllcillZUl0Lm5leHQoKTsKLQkJCQlBZGFwdGVyIGFkYXB0ZXIgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChub3RpZmllcik7Ci0JCSAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKSB7Ci0JCSAgICAgICAgCSgoVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcilhZGFwdGVyKS5zZXRMb2NhdGlvblVSSShuZXdBZGRyZXNzKTsKLQkJICAgICAgICAJc3VjY2VzcyA9IHRydWU7Ci0JCSAgICAgICAgfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gc3VjY2VzczsKLQl9Ci0KLQkvKgotCSAqIFRPRE86IHJtYWg6IFdlIG5lZWQgdG8gY2xlYW4gdGhlIGNvZGUgYmVsb3cuLi4uLgotCSAqIFRoaW5ncyBzaG91bGQgYmUgd3JhcHBlZCB1cCBhbmQgcGxhY2VkIGluIGEgY29tbW9uIGxvY2F0aW9uLiAgQ3VycmVudGx5LCB0aGlzIGlzCi0JICogZnJvbSB0aGUgQWRkRUVNZW51QWN0aW9uQ29udHJpdWJvci5qYXZhIGNsYXNzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZU5ld0V4dGVuc2liaWxpdHlFbGVtZW50KCkgewotCQlMaXN0IG1vZGVsUXVlcnlBY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlNb2RlbFF1ZXJ5IG1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KHBvcnQuZ2V0RWxlbWVudCgpLmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVkID0gbW9kZWxRdWVyeS5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbihwb3J0LmdldEVsZW1lbnQoKSk7Ci0JICAgIAotCSAgICBpZiAoZWQgIT0gbnVsbCkKLQkgICAgewotCSAgICAgICAgICAvLyBhZGQgaW5zZXJ0IGNoaWxkIG5vZGUgYWN0aW9ucwotCSAgICAgICAgICAvLwotCSAgICAgICAgICBpbnQgaWMgPSBNb2RlbFF1ZXJ5LklOQ0xVREVfQ0hJTERfTk9ERVM7Ci0JICAgICAgICAgIGludCB2YyA9IE1vZGVsUXVlcnkuVkFMSURJVFlfU1RSSUNUOwotCi0JICAgICAgICAgIG1vZGVsUXVlcnkuZ2V0SW5zZXJ0QWN0aW9ucyhwb3J0LmdldEVsZW1lbnQoKSwgZWQsIC0xLCBpYywgdmMsIG1vZGVsUXVlcnlBY3Rpb25MaXN0KTsKLQkgICAgIH0KLQkgICAgCi0JICAgIGNyZWF0ZU5ld0V4dGVuc2liaWxpdHlFbGVtZW50SGVscGVyMShtb2RlbFF1ZXJ5QWN0aW9uTGlzdCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBjcmVhdGVOZXdFeHRlbnNpYmlsaXR5RWxlbWVudEhlbHBlcjEoTGlzdCBtb2RlbFF1ZXJ5QWN0aW9uTGlzdCkKLQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtb2RlbFF1ZXJ5QWN0aW9uTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotCSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgICAgTW9kZWxRdWVyeUFjdGlvbiBhY3Rpb24gPSAoTW9kZWxRdWVyeUFjdGlvbilpLm5leHQoKTsKLQkgICAgICBDTU5vZGUgY21ub2RlID0gYWN0aW9uLmdldENNTm9kZSgpOwotCSAgICAgIGlmIChjbW5vZGUgIT0gbnVsbCkKLQkgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgICAgICBib29sZWFuIGlzT3RoZXJOYW1lc3BhY2UgPSBmYWxzZTsKLQkgICAgICAgIENNRG9jdW1lbnQgY21Eb2N1bWVudCA9IChDTURvY3VtZW50KWNtbm9kZS5nZXRQcm9wZXJ0eSgiQ01Eb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0JICAgICAgICBpZiAoY21Eb2N1bWVudCAhPSBudWxsKSAgICAgICAgICAKLQkgICAgICAgIHsgICAgICAgICAgICAgCi0JICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSAoU3RyaW5nKWNtRG9jdW1lbnQuZ2V0UHJvcGVydHkoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy90YXJnZXROYW1lc3BhY2VVUkkiKTsgIC8vJE5PTi1OTFMtMSQKLQkgICAgICAgICAgaXNPdGhlck5hbWVzcGFjZSA9IG5hbWVzcGFjZVVSSSAhPSBudWxsICYmICFuYW1lc3BhY2VVUkkuZXF1YWxzKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKTsKLQkgICAgICAgIH0KLQotCSAgICAgICAgaWYgKGlzT3RoZXJOYW1lc3BhY2UpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGludCBjbU5vZGVUeXBlID0gY21ub2RlLmdldE5vZGVUeXBlKCk7Ci0JICAgICAgICAgIGlmIChhY3Rpb24uZ2V0S2luZCgpID09IE1vZGVsUXVlcnlBY3Rpb24uSU5TRVJUKQotCSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgICAgICAgICAgIHN3aXRjaCAoY21Ob2RlVHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgIGNhc2UgQ01Ob2RlLkVMRU1FTlRfREVDTEFSQVRJT04gOgotCSAgICAgICAgICAgICAgewotCSAgICAgICAgICAgIAkgIGNyZWF0ZU5ld0V4dGVuc2liaWxpdHlFbGVtZW50SGVscGVyMigoQ01FbGVtZW50RGVjbGFyYXRpb24pY21ub2RlLCBhY3Rpb24uZ2V0UGFyZW50KCksIGFjdGlvbi5nZXRTdGFydEluZGV4KCkpOwotCSAgICAgICAgICAgICAgICByZXR1cm47Ci0JICAgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICB9ICAgICAgICAgICAKLQkgICAgICAgIH0KLQkgICAgICB9ICAgCi0JICAgIH0KLQkgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZU5ld0V4dGVuc2liaWxpdHlFbGVtZW50SGVscGVyMihDTU5vZGUgY21ub2RlLCBOb2RlIHBhcmVudCwgaW50IGluZGV4KQotICAgIHsKLSAgICAgIGlmIChjbW5vZGUgIT0gbnVsbCAmJiBwYXJlbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBwYXJlbnQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkRPQ1VNRU5UX05PREUgPyAoRG9jdW1lbnQpcGFyZW50IDogcGFyZW50LmdldE93bmVyRG9jdW1lbnQoKTsgICAgICAgIAotCi0gICAgICAgIERPTUNvbnRlbnRCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgRE9NQ29udGVudEJ1aWxkZXJJbXBsKGRvY3VtZW50KTsgCi0gICAgICAgIGJ1aWxkZXIuc2V0UHJvcGVydHkoRE9NQ29udGVudEJ1aWxkZXIuUFJPUEVSVFlfQlVJTERfQkxBTktfVEVYVF9OT0RFUywgQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgYnVpbGRlci5zZXRCdWlsZFBvbGljeShET01Db250ZW50QnVpbGRlci5CVUlMRF9PTkxZX1JFUVVJUkVEX0NPTlRFTlQpOwotICAgICAgICBidWlsZGVyLmJ1aWxkKHBhcmVudCwgY21ub2RlKTsKLSAgICAgICAgaW5zZXJ0Tm9kZXNBdEluZGV4KHBhcmVudCwgYnVpbGRlci5nZXRSZXN1bHQoKSwgaW5kZXgsIHRydWUpOwotICAgICAgfQotICAgIH0gCi0KLSAgICBwdWJsaWMgdm9pZCBpbnNlcnROb2Rlc0F0SW5kZXgoTm9kZSBwYXJlbnQsIExpc3QgbGlzdCwgaW50IGluZGV4LCBib29sZWFuIGZvcm1hdCkKLSAgICB7ICAgICAgICAgICAgICAgICAgIAotICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSBwYXJlbnQuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgewotICAgICAgICBpbmRleCA9IG5vZGVMaXN0LmdldExlbmd0aCgpOwotICAgICAgfQotICAgICAgTm9kZSByZWZDaGlsZCA9IChpbmRleCA8IG5vZGVMaXN0LmdldExlbmd0aCgpKSA/IG5vZGVMaXN0Lml0ZW0oaW5kZXgpIDogbnVsbDsKLSAgICAKLSAgICAgIC8vIGhlcmUgd2UgY29uc2lkZXIgdGhlIGNhc2Ugd2hlcmUgdGhlIHByZXZpb3VzIG5vZGUgaXMgYSAnd2hpdGUgc3BhY2UnIFRleHQgbm9kZQotICAgICAgLy8gd2Ugc2hvdWxkIHJlYWxseSBkbyB0aGUgaW5zZXJ0IGJlZm9yZSB0aGlzIG5vZGUKLSAgICAgIC8vCi0gICAgICBpbnQgcHJldkluZGV4ID0gaW5kZXggLSAxOwotICAgICAgTm9kZSBwcmV2Q2hpbGQgPSAocHJldkluZGV4IDwgbm9kZUxpc3QuZ2V0TGVuZ3RoKCkpID8gbm9kZUxpc3QuaXRlbShwcmV2SW5kZXgpIDogbnVsbDsKLQkgICAgaWYgKGlzV2hpdGVzcGFjZVRleHROb2RlKHByZXZDaGlsZCkpIAotICAgICAgewotCSAgCSAgcmVmQ2hpbGQgPSBwcmV2Q2hpbGQ7Ci0JICAgIH0KLSAgICAKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuZXdOb2RlID0gKE5vZGUpaS5uZXh0KCk7Ci0gICAgCi0gICAgICAgIGlmIChuZXdOb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkKLSAgICAgICAgewotICAgICAgICAgIEVsZW1lbnQgcGFyZW50RWxlbWVudCA9IChFbGVtZW50KXBhcmVudDsKLSAgICAgICAgICBwYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUoKEF0dHIpbmV3Tm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShuZXdOb2RlLCByZWZDaGlsZCk7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgIAotICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBOb2RlIG5ld05vZGUgPSAoTm9kZSlpLm5leHQoKTsKLSAgICAgICAgaWYgKGZvcm1hdCkKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJICAgICAgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvclhNTCA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLQkJICAgICAgZm9ybWF0UHJvY2Vzc29yWE1MLmZvcm1hdE5vZGUoKElET01Ob2RlKW5ld05vZGUpOwotICAgICAgICB9ICAKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgCi0JICAgIC8vc2V0Vmlld2VyU2VsZWN0aW9uKGxpc3QpOwotICAgIH0gICAKLQkKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1doaXRlc3BhY2VUZXh0Tm9kZShOb2RlIG5vZGUpIAotICAgIHsKLQkgICAgcmV0dXJuIChub2RlICE9IG51bGwpICYmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpICYmIChub2RlLmdldE5vZGVWYWx1ZSgpLnRyaW0oKS5sZW5ndGgoKSA9PSAwKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEJpbmRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEJpbmRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMmFkMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRCaW5kaW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXRCaW5kaW5nQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgUG9ydCBwb3J0OwotCXByaXZhdGUgQmluZGluZyBiaW5kaW5nOwotCQotCXB1YmxpYyBXMTFTZXRCaW5kaW5nQ29tbWFuZChQb3J0IHBvcnQsIEJpbmRpbmcgYmluZGluZykgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9CSU5ESU5HLCBwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMucG9ydCA9IHBvcnQ7Ci0JCXRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhwb3J0LmdldEVsZW1lbnQoKSk7Ci0JCQlwb3J0LnNldEVCaW5kaW5nKGJpbmRpbmcpOwotCi0JCQl1cGRhdGVQb3J0UHJvdG9jb2wocG9ydCwgYmluZGluZyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcocG9ydC5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVQb3J0UHJvdG9jb2woUG9ydCBwb3J0LCBCaW5kaW5nIGJpbmRpbmcpIHsKLQkJU3RyaW5nIGJpbmRpbmdQcm90b2NvbCA9IGdldEJpbmRpbmdQcm90b2NvbChiaW5kaW5nKTsKLQkJaWYgKGJpbmRpbmdQcm90b2NvbCAhPSBudWxsKSB7Ci0JICAgIFcxMUVuZFBvaW50IHBvcnRQcm90b2NvbCA9IGdldFBvcnRQcm90b2NvbChwb3J0KTsKLQkgICAgaWYgKChwb3J0UHJvdG9jb2wgPT0gbnVsbCkgfHwgIShiaW5kaW5nUHJvdG9jb2wuZXF1YWxzKHBvcnRQcm90b2NvbC5nZXRQcm90b2NvbCgpKSkpIHsKLSAgICAgICAgU3RyaW5nIHBvcnRBZGRyZXNzID0gbnVsbDsKLQkgICAgICBpZiAocG9ydFByb3RvY29sICE9IG51bGwpIHsKLQkgICAgICAgIHBvcnRBZGRyZXNzID0gcG9ydFByb3RvY29sLmdldEFkZHJlc3MoKTsKLQkgICAgICB9Ci0JICAgICAgaWYgKHBvcnRBZGRyZXNzID09IG51bGwpIHsKLQkgICAgICAgIHBvcnRBZGRyZXNzID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmciOyAvLyROT04tTkxTLTEkCi0JICAgICAgfQotCSAgICAgIAotICAgICAgICBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGZhY3RvcnlSZWdpc3RyeSA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yID0gZmFjdG9yeVJlZ2lzdHJ5LmdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWUoYmluZGluZ1Byb3RvY29sKTsKLSAgICAgICAgaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkgewotICAgICAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKHBvcnRBZGRyZXNzKTsKLSAgICAgICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlUG9ydENvbnRlbnQocG9ydCk7Ci0gICAgICAgIH0KLQkgICAgfQotCQl9Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRCaW5kaW5nUHJvdG9jb2woQmluZGluZyBiaW5kaW5nKSB7Ci0gICAgTm90aWZpZXIgbm90aWZpZXIgPSAoTm90aWZpZXIpYmluZGluZzsKLSAgICBBZGFwdGVyIGFkYXB0ZXIgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChub3RpZmllcik7Ci0gICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBXMTFCaW5kaW5nKSB7Ci0gICAgICByZXR1cm4gKChXMTFCaW5kaW5nKWFkYXB0ZXIpLmdldFByb3RvY29sKCk7Ci0gICAgfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFcxMUVuZFBvaW50IGdldFBvcnRQcm90b2NvbChQb3J0IHBvcnQpIHsKLSAgICBOb3RpZmllciBub3RpZmllciA9IChOb3RpZmllcilwb3J0OwotICAgIEFkYXB0ZXIgYWRhcHRlciA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KG5vdGlmaWVyKTsKLSAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0gICAgICByZXR1cm4gKFcxMUVuZFBvaW50KWFkYXB0ZXI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0RWxlbWVudENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0RWxlbWVudENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q0OTg3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLkludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFcxMVNldEVsZW1lbnRDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBQYXJ0IHBhcmVudDsKLQlwcml2YXRlIFN0cmluZyBhY3Rpb247Ci0JcHJpdmF0ZSBib29sZWFuIGNvbnRpbnVlQXBwbHk7Ci0KLQlwdWJsaWMgVzExU2V0RWxlbWVudENvbW1hbmQoUGFydCBwYXJlbnQsIFN0cmluZyBhY3Rpb24pIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfRUxFTUVOVCwgcGFyZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMucGFyZW50ID0gcGFyZW50OwotCQl0aGlzLmFjdGlvbiA9IGFjdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0JewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQljb250aW51ZUFwcGx5ID0gdHJ1ZTsgCi0JCQlpZiAoYWN0aW9uLmVxdWFscyhJUGFyYW1ldGVyLlNFVF9ORVdfQUNUSU9OX0lEKSkKLQkJCXsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIG5ld1ZhbHVlID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24paW52b2tlRGlhbG9nKGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmdldE5ld0RpYWxvZygpKTsKLQotCQkJCS8vIFNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuZXcgdHlwZQotCQkJCWlmIChjb250aW51ZUFwcGx5KQotCQkJCQljb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UocGFyZW50LCBuZXdWYWx1ZSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBuZXdWYWx1ZSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXRCcm93c2VEaWFsb2coKSk7Ci0JCQkJaWYgKGNvbnRpbnVlQXBwbHkpCi0JCQkJCWNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJlbnQsIG5ld1ZhbHVlKTsKLQkJCX0KLQkJCWZvcm1hdENoaWxkKHBhcmVudC5nZXRFbGVtZW50KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIE9iamVjdCBpbnZva2VEaWFsb2coSUNvbXBvbmVudERpYWxvZyBkaWFsb2cpCi0JewotCQlPYmplY3QgbmV3VmFsdWUgPSBudWxsOwotCQkKLQkJaWYgKGRpYWxvZyA9PSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQkKLQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKQotCQl7Ci0JCQluZXdWYWx1ZSA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJY29udGludWVBcHBseSA9IGZhbHNlOwotCQl9Ci0JCQotCQlyZXR1cm4gbmV3VmFsdWU7Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpCi0JewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZXN1bHQgPSBudWxsOwotCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkKLQkJewotCQkJcmVzdWx0ID0gKENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKWVkaXRvci5nZXRBZGFwdGVyKFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0JCQkKLQkJCWlmIChlZGl0b3IgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpCi0JCQl7Ci0JCQkJSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIHdzZGxFZGl0b3IgPSAoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSBlZGl0b3I7Ci0JCQkJCi0JCQkJTGlzdCB0eXBlcyA9IHdzZGxFZGl0b3IuZ2V0TW9kZWwoKS5nZXRUeXBlcygpOwotCQkJCVhTRFNjaGVtYVtdIHNjaGVtYXMgPSBuZXcgWFNEU2NoZW1hW3R5cGVzLnNpemUoKV07Ci0JCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVzLnNpemUoKTsgaW5kZXgrKykgewotCQkJCQlXMTFUeXBlIHR5cGUgPSAoVzExVHlwZSkgdHlwZXMuZ2V0KGluZGV4KTsKLQkJCQkJc2NoZW1hc1tpbmRleF0gPSAoWFNEU2NoZW1hKSB0eXBlLmdldFRhcmdldCgpOwotCQkJCX0KLQkJCQkKLQkJCQkoKFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHJlc3VsdCkuc2V0U2NoZW1hcyhzY2hlbWFzKTsKLQkJCQkKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQl9ICAKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEludGVyZmFjZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0SW50ZXJmYWNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTg4MmQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0SW50ZXJmYWNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFcxMVNldEludGVyZmFjZUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIEJpbmRpbmcgYmluZGluZzsKLQlwcml2YXRlIFBvcnRUeXBlIHBvcnRUeXBlOwotCQotCXB1YmxpYyBXMTFTZXRJbnRlcmZhY2VDb21tYW5kKEJpbmRpbmcgYmluZGluZywgUG9ydFR5cGUgcG9ydFR5cGUpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfUE9SVFRZUEUsIGJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLQkJdGhpcy5wb3J0VHlwZSA9IHBvcnRUeXBlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoYmluZGluZy5nZXRFbGVtZW50KCkpOwotCQkJYmluZGluZy5zZXRFUG9ydFR5cGUocG9ydFR5cGUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGJpbmRpbmcuZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldFR5cGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldFR5cGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOGY2MDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRUeXBlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFcxMVNldFR5cGVDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBPYmplY3QgcGFyZW50OwotCXByaXZhdGUgU3RyaW5nIGFjdGlvbjsKLQlwcml2YXRlIGJvb2xlYW4gY29udGludWVBcHBseTsKLQkKLQlwdWJsaWMgVzExU2V0VHlwZUNvbW1hbmQoT2JqZWN0IHBhcmVudCwgU3RyaW5nIGFjdGlvbikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9UWVBFLCBudWxsKTsKLQkJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0JCXRoaXMuYWN0aW9uID0gYWN0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkKLQl7Ci0JCXRyeSB7Ci0JCQlpZiAocGFyZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQliZWdpblJlY29yZGluZygoKFdTRExFbGVtZW50KSBwYXJlbnQpLmdldEVsZW1lbnQoKSk7Ci0JCQl9Ci0KLQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCWNvbnRpbnVlQXBwbHkgPSB0cnVlOyAKLQkJCWlmIChhY3Rpb24uZXF1YWxzKElQYXJhbWV0ZXIuU0VUX05FV19BQ1RJT05fSUQpKQotCQkJewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gbmV3VmFsdWUgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbilpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCkpOwotCi0JCQkJLy8gU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIG5ldyB0eXBlCi0JCQkJaWYgKGNvbnRpbnVlQXBwbHkpCi0JCQkJCWNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJlbnQsIG5ld1ZhbHVlKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIG5ld1ZhbHVlID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24paW52b2tlRGlhbG9nKGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpKTsKLQkJCQlpZiAoY29udGludWVBcHBseSkKLQkJCQkJY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmVudCwgbmV3VmFsdWUpOwotCQkJfQotCi0JCQkvLyBGb3JtYXQKLQkJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJCWZvcm1hdENoaWxkKCgoV1NETEVsZW1lbnQpIHBhcmVudCkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KSB7Ci0JCQkJZm9ybWF0Q2hpbGQoKChYU0RDb25jcmV0ZUNvbXBvbmVudCkgcGFyZW50KS5nZXRFbGVtZW50KCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJZW5kUmVjb3JkaW5nKCgoV1NETEVsZW1lbnQpIHBhcmVudCkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIE9iamVjdCBpbnZva2VEaWFsb2coSUNvbXBvbmVudERpYWxvZyBkaWFsb2cpCi0JewotCQlPYmplY3QgbmV3VmFsdWUgPSBudWxsOwotCQkKLQkJaWYgKGRpYWxvZyA9PSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQkKLQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKQotCQl7Ci0JCQluZXdWYWx1ZSA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJY29udGludWVBcHBseSA9IGZhbHNlOwotCQl9Ci0JCQotCQlyZXR1cm4gbmV3VmFsdWU7Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpCi0JewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZXN1bHQgPSBudWxsOwotCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkKLQkJewotCQkJcmVzdWx0ID0gKENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKWVkaXRvci5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0JCQkKLQkJCWlmIChlZGl0b3IgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpCi0JCQl7Ci0JCQkJSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIHdzZGxFZGl0b3IgPSAoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSBlZGl0b3I7Ci0JCQkJCi0JCQkJTGlzdCB0eXBlcyA9IHdzZGxFZGl0b3IuZ2V0TW9kZWwoKS5nZXRUeXBlcygpOwotCQkJCVhTRFNjaGVtYVtdIHNjaGVtYXMgPSBuZXcgWFNEU2NoZW1hW3R5cGVzLnNpemUoKV07Ci0JCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVzLnNpemUoKTsgaW5kZXgrKykgewotCQkJCQlXMTFUeXBlIHR5cGUgPSAoVzExVHlwZSkgdHlwZXMuZ2V0KGluZGV4KTsKLQkJCQkJc2NoZW1hc1tpbmRleF0gPSAoWFNEU2NoZW1hKSB0eXBlLmdldFRhcmdldCgpOwotCQkJCX0KLQkJCQkKLQkJCQkoKFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIpIHJlc3VsdCkuc2V0U2NoZW1hcyhzY2hlbWFzKTsKLQkJCQkKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQl9ICAKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVRvcExldmVsRWxlbWVudENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzY5YjgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnZpc2l0b3IuVzExRmluZElubmVyRWxlbWVudFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLQotcHVibGljIGNsYXNzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUwgPSAieG1sIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIHB1YmxpYyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kKFN0cmluZyBsYWJlbCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc3VwZXIobGFiZWwpOwotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGJlZ2luUmVjb3JkaW5nKE9iamVjdCBlbGVtZW50KSB7Ci0JICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElET01Ob2RlKSB7Ci0JCSAgKChJRE9NTm9kZSkgZWxlbWVudCkuZ2V0TW9kZWwoKS5iZWdpblJlY29yZGluZyh0aGlzLCBnZXRVbmRvRGVzY3JpcHRpb24oKSk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGVuZFJlY29yZGluZyhPYmplY3QgZWxlbWVudCkgewotCSAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRE9NTm9kZSkgewotCQkgICgoSURPTU5vZGUpIGVsZW1lbnQpLmdldE1vZGVsKCkuZW5kUmVjb3JkaW5nKHRoaXMpOwotCSAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFVuZG9EZXNjcmlwdGlvbigpIHsKLQkgIHJldHVybiBnZXRMYWJlbCgpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBmb3JtYXRDaGlsZChFbGVtZW50IGNoaWxkKQotICB7Ci0gICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgewotICAgICAgSURPTU1vZGVsIG1vZGVsID0gKChJRE9NTm9kZSljaGlsZCkuZ2V0TW9kZWwoKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyB0ZWxsIHRoZSBtb2RlbCB0aGF0IHdlIGFyZSBhYm91dCB0byBtYWtlIGEgYmlnIG1vZGVsIGNoYW5nZQotICAgICAgICBtb2RlbC5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLSAgICAgICAgCi0gICAgICAgIElTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yIGZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLSAgICAgICAgZm9ybWF0UHJvY2Vzc29yLmZvcm1hdE5vZGUoY2hpbGQpOwotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICAvLyB0ZWxsIHRoZSBtb2RlbCB0aGF0IHdlIGFyZSBkb25lIHdpdGggdGhlIGJpZyBtb2RlbCBjaGFuZ2UKLSAgICAgICAgbW9kZWwuY2hhbmdlZE1vZGVsKCk7IAotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKQotICB7Ci0gICAgZW5zdXJlRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXROZXdYU0RFbGVtZW50KFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50KSB7IAotCSAgVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IgdmlzaXRvciA9IG5ldyBXMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvcigpOwotCSAgcmV0dXJuIHZpc2l0b3IuZ2V0SW5uZXJYU0RFbGVtZW50KHhzZEVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGVuc3VyZURlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0KLSAgICBFbGVtZW50IGRlZmluaXRpb25zRWxlbWVudCA9IGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpOwotCi0gICAgaWYgKGRlZmluaXRpb25zRWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBnZXREZWZhdWx0TmFtZXNwYWNlKGRlZmluaXRpb24pOwotICAgICAgZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUobnVsbCwgZ2V0RmlsZU5hbWUoZGVmaW5pdGlvbikpKTsKLSAgICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgid3NkbCIsIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0gICAgICAvLyBNb3ZpbmcgdGhlc2UgYWJvdmUgdXBkYXRlRWxlbWVudCgpIHNlZW1zIHRvIGNhdXNlIGdyaWVmIHdpdGggdGhlIG1vZGVsLgotICAgICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInRucyIsIHRhcmdldE5hbWVzcGFjZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ4c2QiLCBXU0RMQ29uc3RhbnRzLlhTRF9OQU1FU1BBQ0VfVVJJKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbnNFbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgfQotCi0gICAgZW5zdXJlWE1MRGlyZWN0aXZlKGRvY3VtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgZW5zdXJlWE1MRGlyZWN0aXZlKERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgaWYgKGhhc1hNTERpcmVjdGl2ZShkb2N1bWVudCkpCi0gICAgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0gICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uIHhtbERlY2xhcmF0aW9uID0gZ2V0WE1MRGVjbGFyYXRpb24oZG9jdW1lbnQpOwotICAgIGRvY3VtZW50Lmluc2VydEJlZm9yZSh4bWxEZWNsYXJhdGlvbiwgZmlyc3RDaGlsZCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaGFzWE1MRGlyZWN0aXZlKERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgTm9kZSBmaXJzdENoaWxkID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotICAgCi0gICAgaWYgKGZpcnN0Q2hpbGQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlmIChmaXJzdENoaWxkLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcHJvY2Vzc2luZ0luc3RydWN0aW9uICA9IChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pZmlyc3RDaGlsZDsKLSAgICAKLSAgICBpZiAoIXByb2Nlc3NpbmdJbnN0cnVjdGlvbi5nZXRUYXJnZXQoKS5lcXVhbHMoWE1MKSkgCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBnZXRYTUxEZWNsYXJhdGlvbihEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIFByZWZlcmVuY2VzIHByZWZlcmVuY2UgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotICAgIFN0cmluZyBjaGFyU2V0ID0gcHJlZmVyZW5jZS5nZXRTdHJpbmcoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuT1VUUFVUX0NPREVTRVQpOwotICAgIGlmIChjaGFyU2V0ID09IG51bGwgfHwgY2hhclNldC50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIGNoYXJTZXQgPSAiVVRGLTgiOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiB4bWxEZWNsYXJhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihYTUwsICJ2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCIiICsgY2hhclNldCArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICByZXR1cm4geG1sRGVjbGFyYXRpb247Ci0gICAgCi0gIH0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHROYW1lc3BhY2UoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0UpOwotCi0gICAgaWYgKCFuYW1lc3BhY2UuZW5kc1dpdGgoIi8iKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9IG5hbWVzcGFjZS5jb25jYXQoIi8iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIG5hbWVzcGFjZSArPSBnZXRGaWxlTmFtZShkZWZpbml0aW9uKSArICIvIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEZpbGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFN0cmluZyBmaWxlTG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0gICAgSVBhdGggZmlsZVBhdGggPSBuZXcgUGF0aChmaWxlTG9jYXRpb24pOwotICAgIHJldHVybiBmaWxlUGF0aC5yZW1vdmVGaWxlRXh0ZW5zaW9uKCkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3NwZWNpYWxpemVkL1cxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTM2ZmM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnNwZWNpYWxpemVkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLQotcHVibGljIGNsYXNzIFcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIgZXh0ZW5kcyBXMTFFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIKLXsKLSAgLy8gVE9ETy4uLiBtYWtlIHRoaXMgY2xhc3MgYWJzdHJhY3QgYW5kIHByb3ZpZGUgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIGluCi0gIC8vIFNPQVAgYW5kIEhUVFAgcGFja2FnZXMuIFRoZSBXU0RMQWRhcHRlckZhY3RvcnkgbmVlZHMgdG8ga25vdyB0byBkZWxlZ2F0ZSB0byBleHRlbnNpb24KLSAgLy8gYWRhcHRlcnMgdG8gc3VwcG9ydCB0aGUgYWRkaXRpb24gb2YgbW9yZSBleHRlbnNpb24gbGFuZ3VhZ2VzCi0gIC8vCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKQotICB7Ci0gICAgU3RyaW5nIGFkZHJlc3MgPSAiIjsgLy8kTk9OLU5MUy0xJAotICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICB7Ci0gICAgICBhZGRyZXNzID0gKChTT0FQQWRkcmVzcykgdGFyZ2V0KS5nZXRMb2NhdGlvblVSSSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLSAgICB7Ci0gICAgICBhZGRyZXNzID0gKChIVFRQQWRkcmVzcykgdGFyZ2V0KS5nZXRMb2NhdGlvblVSSSgpOwotICAgIH0KLSAgICByZXR1cm4gYWRkcmVzczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyBhZGRyZXNzKQotICB7Ci0gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgIHsKLSAgICAgICgoU09BUEFkZHJlc3MpIHRhcmdldCkuc2V0TG9jYXRpb25VUkkoYWRkcmVzcyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotICAgIHsKLSAgICAgICgoSFRUUEFkZHJlc3MpIHRhcmdldCkuc2V0TG9jYXRpb25VUkkoYWRkcmVzcyk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3NwZWNpYWxpemVkL1cxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9zcGVjaWFsaXplZC9XMTFFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRkNGZiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3NwZWNpYWxpemVkL1cxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnNwZWNpYWxpemVkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyCi17Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlhNTI0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLQotLyoKLSAqIENsYXNzIHVzZWQgdG8gZmluZCBhbmQgcmV0dXJuIHRoZSAiaW5uZXIiIFhTREVsZW1lbnQgd2hlbiBnaXZlbiBhbiBYU0RFbGVtZW50LgotICogVGhpcyBjbGFzcyBleHRlbmRzIFcxMVhTRFZpc2l0b3Igd2hpY2ggcmVtb3ZlcyB0aGUgbmVlZCBmb3IgdGhpcyBjbGFzcyB0byByZWltcGxlbWVudAotICogdGhlIGFjdHVhbCB0cmF2ZXJzYWwgb2YgdGhlIFhTRCBNb2RlbCB0byBsb2NhdGUgdGhlIGlubmVyIFhTREVsZW1lbnQuCi0gKiAKLSAqIEJ5IGRlZmF1bHQsIHRoaXMgY2xhc3Mgd2lsbCBsb2NhdGUgdGhlIGlubmVyIFhTREVsZW1lbnQgYXQgZGVwdGggMi4gIEhvd2V2ZXIsIHRoaXMgZGVwdGgKLSAqIGNhbiBiZSBjaGFuZ2VkIGJ5IGNhbGxpbmcgc2V0RWxlbWVudERlcHRoKG5ld0RlcHRoKS4KLSAqLwotcHVibGljIGNsYXNzIFcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yIGV4dGVuZHMgVzExWFNEVmlzaXRvciB7Ci0JICBwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnRBdERlcHRoOwotCSAgcHJvdGVjdGVkIGludCBlbGVtZW50RGVwdGggPSAyOwotCSAgcHJvdGVjdGVkIGludCBkZXB0aCA9IDE7Ci0JICAKLQkgIHB1YmxpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gZ2V0SW5uZXJYU0RFbGVtZW50KFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50KSB7Ci0JCSAgZWxlbWVudEF0RGVwdGggPSB4c2RFbGVtZW50OwotCQkgIGRlcHRoID0gMTsKLQkJICB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbih4c2RFbGVtZW50KTsKLQkJICAKLQkJICByZXR1cm4gZWxlbWVudEF0RGVwdGg7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHZpc2l0RWxlbWVudERlY2xhcmF0aW9uKFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50KSB7Ci0JCSAgaWYgKGRlcHRoID09IGVsZW1lbnREZXB0aCkgewotCQkJICBlbGVtZW50QXREZXB0aCA9IGVsZW1lbnQ7Ci0JCSAgfQotCQkgIGRlcHRoKys7Ci0JCSAgCi0JCSAgc3VwZXIudmlzaXRFbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldEVsZW1lbnREZXB0aChpbnQgZWxlbWVudERlcHRoKSB7Ci0JCSAgdGhpcy5lbGVtZW50RGVwdGggPSBlbGVtZW50RGVwdGg7IAotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvdmlzaXRvci9XMTFYU0RWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZTkyNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RJZGVudGl0eUNvbnN0cmFpbnREZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETm90YXRpb25EZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFdpbGRjYXJkOwotCi1wdWJsaWMgY2xhc3MgVzExWFNEVmlzaXRvcgotewotICBwdWJsaWMgVzExWFNEVmlzaXRvcigpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFhTRFNjaGVtYSBzY2hlbWE7Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKQotICB7Ci0gICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHIgPSAoWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0QXR0cmlidXRlRGVjbGFyYXRpb24oYXR0cik7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0VHlwZURlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlID0gKFhTRFR5cGVEZWZpbml0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdFR5cGVEZWZpbml0aW9uKHR5cGUpOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0SWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb24gaWRlbnRpdHlDb25zdHJhaW50ID0gKFhTRElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0SWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbihpZGVudGl0eUNvbnN0cmFpbnQpOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2NoZW1hLmdldE1vZGVsR3JvdXBEZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNETW9kZWxHcm91cERlZmluaXRpb24gbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRNb2RlbEdyb3VwRGVmaW5pdGlvbihtb2RlbEdyb3VwKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRBdHRyaWJ1dGVHcm91cERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0cmlidXRlR3JvdXAgPSAoWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihhdHRyaWJ1dGVHcm91cCk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0Tm90YXRpb25EZWNsYXJhdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRE5vdGF0aW9uRGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0ROb3RhdGlvbkRlY2xhcmF0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdE5vdGF0aW9uRGVjbGFyYXRpb24oZWxlbWVudCk7Ci0gICAgfQotICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZURlY2xhcmF0aW9uKFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHIpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICB2aXNpdFNpbXBsZVR5cGVEZWZpbml0aW9uKChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbil0eXBlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICB2aXNpdENvbXBsZXhUeXBlRGVmaW5pdGlvbigoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXR5cGUpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudC5pc0VsZW1lbnREZWNsYXJhdGlvblJlZmVyZW5jZSgpKQotICAgIHsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRUeXBlRGVmaW5pdGlvbihlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRJZGVudGl0eUNvbnN0cmFpbnREZWZpbml0aW9uKFhTRElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb24gaWRlbnRpdHlDb25zdHJhaW50KQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0TW9kZWxHcm91cERlZmluaXRpb24oWFNETW9kZWxHcm91cERlZmluaXRpb24gbW9kZWxHcm91cERlZikKLSAgewotICAgIGlmICghbW9kZWxHcm91cERlZi5pc01vZGVsR3JvdXBEZWZpbml0aW9uUmVmZXJlbmNlKCkpCi0gICAgewotICAgICAgaWYgKG1vZGVsR3JvdXBEZWYuZ2V0TW9kZWxHcm91cCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0TW9kZWxHcm91cChtb2RlbEdyb3VwRGVmLmdldE1vZGVsR3JvdXAoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBtb2RlbEdyb3VwRGVmLmdldFJlc29sdmVkTW9kZWxHcm91cERlZmluaXRpb24oKS5nZXRNb2RlbEdyb3VwKCk7Ci0gICAgICBpZiAobW9kZWxHcm91cCAhPSBudWxsKQotICAgICAgewotICAgICAgICB2aXNpdE1vZGVsR3JvdXAobW9kZWxHcm91cCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRBdHRyaWJ1dGVHcm91cERlZmluaXRpb24oWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uIGF0dHJpYnV0ZUdyb3VwKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IGF0dHJpYnV0ZUdyb3VwLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICBpZiAobyBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZVVzZSkKLSAgICAgIHsKLSAgICAgICAgWFNEQXR0cmlidXRlVXNlIGF0dHJVc2UgPSAoWFNEQXR0cmlidXRlVXNlKW87Ci0gICAgICAgIHZpc2l0QXR0cmlidXRlRGVjbGFyYXRpb24oYXR0clVzZS5nZXRDb250ZW50KCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uIGF0dHJHcm91cCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pbzsKLSAgICAgICAgdmlzaXRBdHRyaWJ1dGVHcm91cERlZmluaXRpb24oYXR0ckdyb3VwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0Tm90YXRpb25EZWNsYXJhdGlvbihYU0ROb3RhdGlvbkRlY2xhcmF0aW9uIG5vdGF0aW9uKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0U2ltcGxlVHlwZURlZmluaXRpb24oWFNEU2ltcGxlVHlwZURlZmluaXRpb24gdHlwZSkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdENvbXBsZXhUeXBlRGVmaW5pdGlvbihYU0RDb21wbGV4VHlwZURlZmluaXRpb24gdHlwZSkKLSAgewotICAgIGlmICh0eXBlLmdldENvbnRlbnQoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4Q29udGVudCA9IHR5cGUuZ2V0Q29udGVudCgpOwotICAgICAgaWYgKGNvbXBsZXhDb250ZW50IGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIHZpc2l0U2ltcGxlVHlwZURlZmluaXRpb24oKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWNvbXBsZXhDb250ZW50KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGNvbXBsZXhDb250ZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0UGFydGljbGUoKFhTRFBhcnRpY2xlKSBjb21wbGV4Q29udGVudCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFBhcnRpY2xlKFhTRFBhcnRpY2xlIHBhcnRpY2xlKQotICB7Ci0gICAgdmlzaXRQYXJ0aWNsZUNvbnRlbnQocGFydGljbGUuZ2V0Q29udGVudCgpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRQYXJ0aWNsZUNvbnRlbnQoWFNEUGFydGljbGVDb250ZW50IHBhcnRpY2xlQ29udGVudCkKLSAgewotICAgIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICB2aXNpdE1vZGVsR3JvdXBEZWZpbml0aW9uKChYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbikgcGFydGljbGVDb250ZW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkKLSAgICB7Ci0gICAgICB2aXNpdE1vZGVsR3JvdXAoKFhTRE1vZGVsR3JvdXApcGFydGljbGVDb250ZW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0RWxlbWVudERlY2xhcmF0aW9uKChYU0RFbGVtZW50RGVjbGFyYXRpb24pcGFydGljbGVDb250ZW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNEV2lsZGNhcmQpCi0gICAgewotICAgICAgdmlzaXRXaWxkY2FyZCgoWFNEV2lsZGNhcmQpcGFydGljbGVDb250ZW50KTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0TW9kZWxHcm91cChYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXApCi0gIHsKLSAgICBpZiAobW9kZWxHcm91cC5nZXRDb250ZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IG1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICB2aXNpdFBhcnRpY2xlKHBhcnRpY2xlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0V2lsZGNhcmQoWFNEV2lsZGNhcmQgd2lsZGNhcmQpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3JGb3JGaWVsZHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvdmlzaXRvci9XMTFYU0RWaXNpdG9yRm9yRmllbGRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZTZkZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3JGb3JGaWVsZHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlR3JvdXBDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBXMTFYU0RWaXNpdG9yRm9yRmllbGRzIGV4dGVuZHMgVzExWFNEVmlzaXRvcgotewotICBwdWJsaWMgVzExWFNEVmlzaXRvckZvckZpZWxkcygpCi0gIHsKLSAgfQotCi0gIExpc3QgY29uY3JldGVDb21wb25lbnRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICBMaXN0IHRoaW5nc1dlTmVlZFRvTGlzdGVuVG8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdENvbXBsZXhUeXBlRGVmaW5pdGlvbihYU0RDb21wbGV4VHlwZURlZmluaXRpb24gdHlwZSkKLSAgewotICAgIHN1cGVyLnZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKHR5cGUpOwotICAgIGlmICh0eXBlLmdldEF0dHJpYnV0ZUNvbnRlbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSB0eXBlLmdldEF0dHJpYnV0ZUNvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7ICkKLSAgICAgIHsKLSAgICAgICAgWFNEQXR0cmlidXRlR3JvdXBDb250ZW50IGF0dHJHcm91cENvbnRlbnQgPSAoWFNEQXR0cmlidXRlR3JvdXBDb250ZW50KWl0ZXIubmV4dCgpOwotICAgICAgICBpZiAoYXR0ckdyb3VwQ29udGVudCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZVVzZSkKLSAgICAgICAgewotICAgICAgICAgIFhTREF0dHJpYnV0ZVVzZSBhdHRyVXNlID0gKFhTREF0dHJpYnV0ZVVzZSlhdHRyR3JvdXBDb250ZW50OwotICAgICAgICAgIGNvbmNyZXRlQ29tcG9uZW50TGlzdC5hZGQoYXR0clVzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYXR0ckdyb3VwQ29udGVudCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbikKLSAgICAgICAgewotICAgICAgICAgIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyR3JvdXAgPSAoWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKWF0dHJHcm91cENvbnRlbnQ7Ci0gICAgICAgICAgdGhpbmdzV2VOZWVkVG9MaXN0ZW5Uby5hZGQoYXR0ckdyb3VwKTsKLSAgICAgICAgICB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihhdHRyR3JvdXApOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0TW9kZWxHcm91cChYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXApCi0gIHsKLSAgICBzdXBlci52aXNpdE1vZGVsR3JvdXAobW9kZWxHcm91cCk7Ci0gICAgdGhpbmdzV2VOZWVkVG9MaXN0ZW5Uby5hZGQobW9kZWxHcm91cCk7IAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0cmlidXRlR3JvdXApCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYXR0cmlidXRlR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBPYmplY3QgbyA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVVc2UgYXR0cmlidXRlVXNlID0gKFhTREF0dHJpYnV0ZVVzZSlvOwotICAgICAgICBjb25jcmV0ZUNvbXBvbmVudExpc3QuYWRkKGF0dHJpYnV0ZVVzZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0ckdyb3VwID0gKFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbilvOwotICAgICAgICB0aGluZ3NXZU5lZWRUb0xpc3RlblRvLmFkZChhdHRyR3JvdXApOwotICAgICAgICBpZiAoYXR0ckdyb3VwLmlzQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uUmVmZXJlbmNlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBhdHRyR3JvdXAgPSBhdHRyR3JvdXAuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVHcm91cERlZmluaXRpb24oKTsKLSAgICAgICAgICB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihhdHRyR3JvdXApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpCi0gIHsKLSAgICAvL3N1cGVyLnZpc2l0RWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotICAgIGNvbmNyZXRlQ29tcG9uZW50TGlzdC5hZGQoZWxlbWVudCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlRGVjbGFyYXRpb24oWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cikKLSAgewotICAgIHN1cGVyLnZpc2l0QXR0cmlidXRlRGVjbGFyYXRpb24oYXR0cik7Ci0gICAgY29uY3JldGVDb21wb25lbnRMaXN0LmFkZChhdHRyKTsKLSAgfQotCi0KLSAgcHVibGljIExpc3QgZ2V0Q29uY3JldGVDb21wb25lbnRMaXN0KCkKLSAgewotICAgIHJldHVybiBjb25jcmV0ZUNvbXBvbmVudExpc3Q7Ci0gIH0KLQotCi0gIHB1YmxpYyBMaXN0IGdldFRoaW5nc1dlTmVlZFRvTGlzdGVuVG8oKQotICB7Ci0gICAgcmV0dXJuIHRoaW5nc1dlTmVlZFRvTGlzdGVuVG87Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNTg3YzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LklTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlhTRENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kIHsKLQlwdWJsaWMgc3RhdGljIGludCBQQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQgICAgID0gMDsKLQlwdWJsaWMgc3RhdGljIGludCBQQVJUX0VMRU1FTlQgICAgICAgICAgICAgICAgID0gMTsKLQlwdWJsaWMgc3RhdGljIGludCBQQVJUX0NPTVBMRVhUWVBFX1NFUV9FTEVNRU5UID0gMjsKLQlwdWJsaWMgc3RhdGljIGludCBQQVJUX0NPTVBMRVhUWVBFICAgICAgICAgICAgID0gMzsKLQlwdWJsaWMgc3RhdGljIGludCBQQVJUX1NJTVBMRVRZUEUJCQkgICA9IDQ7Ci0KLQlwcm90ZWN0ZWQgaW50IHN0eWxlID0gMDsKLQlwcm90ZWN0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbjsKLQlwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIG5ld1hTREVsZW1lbnQ7Ci0JcHJvdGVjdGVkIFBhcnQgbmV3UGFydDsKLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIG5ld0Fub255bW91c1hTREVsZW1lbnROYW1lOwotCXByb3RlY3RlZCBTdHJpbmcgbmV3WFNERWxlbWVudE5hbWU7Ci0JcHJvdGVjdGVkIFN0cmluZyBuZXdXU0RMTWVzc2FnZU5hbWU7Ci0JcHJvdGVjdGVkIFN0cmluZyBuZXdXU0RMUGFydE5hbWU7Ci0JCi0JcHVibGljIGFic3RyYWN0IHZvaWQgcnVuKCk7Ci0JcHVibGljIGFic3RyYWN0IE1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCQotCXB1YmxpYyBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBpbnQgc3R5bGUpIHsKLQkJdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0JCXRoaXMuc3R5bGUgPSBzdHlsZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U3R5bGUoaW50IHN0eWxlKSB7Ci0JCXRoaXMuc3R5bGUgPSBzdHlsZTsKLQl9Ci0JCi0JcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSB7Ci0JCXJldHVybiBuZXdYU0RFbGVtZW50OwotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BhcnRFbGVtZW50UmVmZXJlbmNlKCkgewotCQlpZiAoc3R5bGUgPT0gUEFSVF9FTEVNRU5UIHx8IHN0eWxlID09IFBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjcmVhdGVQYXJ0RWxlbWVudFNlcUVsZW1lbnRQYXR0ZXJuKFBhcnQgcGFydCwgWFNERWxlbWVudERlY2xhcmF0aW9uIHBhcnRFbGVtZW50KSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiByZXR1cm5lZFhTREVsZW1lbnQgPSBudWxsOwotCQkKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIG9yaWdpbmFsRWxlbWVudCA9IG51bGw7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiBhbm9uWFNERWxlbWVudCA9IG51bGw7Ci0JCQotCQkvLyBDcmVhdGUgdGhlIFhTREVsZW1lbnQgKGFub255bW91cykgcmVmZXJlbmNlZCBieSB0aGUgUGFydCBpZiBuZWNlc3NhcnkKLQkJaWYgKHBhcnRFbGVtZW50ID09IG51bGwgfHwgcGFydEVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSA9PSBudWxsIHx8IHBhcnRFbGVtZW50LmdldFNjaGVtYSgpID09IG51bGwpIHsKLQkJCWFub25YU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZUFub255bW91c1hTREVsZW1lbnREZWZpbml0aW9uKGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpLCBwYXJ0KTsKLS8vCQkJcGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24oYW5vblhTREVsZW1lbnQpOwotCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgYW5vblhTREVsZW1lbnQpOwotCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIHByZWZpeGVkTmFtZSk7Ci0JCQlwYXJ0LnNldFR5cGVEZWZpbml0aW9uKG51bGwpOwotCQkJCi0JCQlpZiAocGFydEVsZW1lbnQgIT0gbnVsbCAmJiBwYXJ0RWxlbWVudC5nZXRTY2hlbWEoKSAhPSBudWxsKSB7Ci0JCQkJb3JpZ2luYWxFbGVtZW50ID0gcGFydEVsZW1lbnQ7Ci0JCQkJLy8gUmVtb3ZlIHRoZSAnb3JpZ2luYWwnIFhTREVsZW1lbnQgYXMgYSBHbG9iYWwgRWxlbWVudAotCQkJCXBhcnRFbGVtZW50LmdldFNjaGVtYSgpLmdldENvbnRlbnRzKCkucmVtb3ZlKHBhcnRFbGVtZW50KTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWFub25YU0RFbGVtZW50ID0gcGFydEVsZW1lbnQ7Ci0JCX0KLQkJCi0JCS8vIEFkZCB0aGUgJ29yaWdpbmFsJyBYU0RFbGVtZW50IGlmIGl0J3MgdHlwZSB3YXNuJ3QgYW5vbnltb3VzCi0JCWlmIChvcmlnaW5hbEVsZW1lbnQgIT0gbnVsbCkgewotCQkJWFNEQ29tcG9uZW50SGVscGVyLmFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIG9yaWdpbmFsRWxlbWVudCk7Ci0JCX0KLQkJCi0JCS8vIENyZWF0ZSBhIG5ldyBYU0RFbGVtZW50Ci0JCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RNb2RlbEdyb3VwKGFub25YU0RFbGVtZW50LCBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXJldHVybmVkWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKG51bGwsIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpLCBtb2RlbEdyb3VwKTsKLQkJCi0JCS8vIEFkZCB0aGUgbmV3bHkgY3JlYXRlZCBYU0RFbGVtZW50IHRvIHRoZSBNb2RlbEdyb3VwCi0JCVhTRENvbXBvbmVudEhlbHBlci5hZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKGFub25YU0RFbGVtZW50LCByZXR1cm5lZFhTREVsZW1lbnQpOwotCi0JCWZvcm1hdENoaWxkKGFub25YU0RFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCQotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlUGFydEVsZW1lbnRSZWZlcmVuY2VDb21wb25lbnRzKFBhcnQgcGFydCkgewotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gcmV0dXJuZWRYU0RFbGVtZW50ID0gbnVsbDsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHBhcnRFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCi0JCWlmIChzdHlsZSA9PSBQQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpIHsKLQkJCXJldHVybmVkWFNERWxlbWVudCA9IGNyZWF0ZVBhcnRFbGVtZW50U2VxRWxlbWVudFBhdHRlcm4ocGFydCwgcGFydEVsZW1lbnQpOwotCQl9Ci0JCWVsc2UgaWYgKHN0eWxlID09IFBBUlRfRUxFTUVOVCkgewotCQkJaWYgKHBhcnRFbGVtZW50ID09IG51bGwpIHsKLQkJCQlyZXR1cm5lZFhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIHBhcnQpOwotCQkJCWlmIChyZXR1cm5lZFhTREVsZW1lbnQgIT0gbnVsbCAmJiAhcmV0dXJuZWRYU0RFbGVtZW50LmVxdWFscyhwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpKSkgewotLy8JCQkJCXBhcnQuc2V0RWxlbWVudERlY2xhcmF0aW9uKHJldHVybmVkWFNERWxlbWVudCk7Ci0JCQkJCVN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIHJldHVybmVkWFNERWxlbWVudCk7Ci0JCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIGZhbHNlLCBwcmVmaXhlZE5hbWUpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCXJldHVybmVkWFNERWxlbWVudCA9IGNyZWF0ZVBhcnRFbGVtZW50U2VxRWxlbWVudFBhdHRlcm4ocGFydCwgcGFydEVsZW1lbnQpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcmV0dXJuZWRYU0RFbGVtZW50OwotCX0KLQkKLQlwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZVBhcnRDb21wbGV4VHlwZVJlZmVyZW5jZShQYXJ0IHBhcnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0JCQotCQlpZiAoc3R5bGUgPT0gUEFSVF9DT01QTEVYVFlQRV9TRVFfRUxFTUVOVCkgewotCQkJWFNEVHlwZURlZmluaXRpb24gb3JpZ2luYWxUeXBlID0gbnVsbDsKLQkJCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB0b3BMZXZlbFR5cGUgPSBudWxsOwotCQkJCi0JCQkvLyBDcmVhdGUgdGhlIENvbXBsZXhUeXBlIHJlZmVyZW5jZWQgYnkgdGhlIFBhcnQgaWYgbmVjZXNzYXJ5Ci0JCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpID09IG51bGwgfHwgcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pIHsKLQkJCQlYU0RTY2hlbWEgc2NoZW1hID0gWFNEQ29tcG9uZW50SGVscGVyLmdldFhTRFNjaGVtYShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQkJU3RyaW5nIHRvcExldmVsTmFtZSA9IE5hbWVVdGlsLmdldFhTRENvbXBsZXhUeXBlTmFtZShwYXJ0LmdldE5hbWUoKSwgc2NoZW1hKTsKLQkJCQl0b3BMZXZlbFR5cGUgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbmlpb24odG9wTGV2ZWxOYW1lLCBwYXJ0KTsKLQkJCQkKLQkJCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pIHsKLQkJCQkJb3JpZ2luYWxUeXBlID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbil7Ci0JCQkJdG9wTGV2ZWxUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCQkJfQkJCQotCQkJCi0JCQkvLyBDcmVhdGUgYSBuZXcgWFNERWxlbWVudAotCQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gWFNEQ29tcG9uZW50SGVscGVyLmdldFhTRE1vZGVsR3JvdXAodG9wTGV2ZWxUeXBlKTsKLQkJCXJldHVybmVkWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKG51bGwsIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpLCBtb2RlbEdyb3VwKTsKLQkJCQotCQkJLy8gQWRkIHRoZSAnb3JpZ2luYWwnIFhTREVsZW1lbnQgaWYgaXQncyB0eXBlIHdhc24ndCBhbm9ueW1vdXMKLQkJCWlmIChvcmlnaW5hbFR5cGUgIT0gbnVsbCkgewotCQkJCS8vIENyZWF0ZSBhbm90aGVyIG5ldyBYU0RFbGVtZW50IHRvICdjb250YWluJyB0aGUgb3JpZ2luYWxseSByZWZlcmVuY2VkIFhTRFNpbXBsZVR5cGUKLQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gb3JpZ1hTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChudWxsLCBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSwgbW9kZWxHcm91cCk7Ci0JCQkJb3JpZ1hTREVsZW1lbnQuc2V0VHlwZURlZmluaXRpb24ob3JpZ2luYWxUeXBlKTsKLQkJCX0KLQkJCQotCQkJLy8gQ2hhbmdlIFBhcnQgcmVmZXJlbmNlCi0vLwkJCXBhcnQuc2V0VHlwZURlZmluaXRpb24odG9wTGV2ZWxUeXBlKTsKLQkJCVN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIHRvcExldmVsVHlwZSk7Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCB0cnVlLCBwcmVmaXhlZE5hbWUpOwotCQkJZm9ybWF0Q2hpbGQodG9wTGV2ZWxUeXBlLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZWxzZSBpZiAoc3R5bGUgPT0gUEFSVF9DT01QTEVYVFlQRSkgewotCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gbnVsbDsKLQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCkgewotCQkJCS8vIENyZWF0ZSBhIG5ldyBDb21wbGV4VHlwZQotCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNEU2NoZW1hKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCQlTdHJpbmcgY29tcGxleE5hbWUgPSBOYW1lVXRpbC5nZXRYU0RDb21wbGV4VHlwZU5hbWUocGFydC5nZXROYW1lKCksIHNjaGVtYSk7Ci0JCQkJY29tcGxleFR5cGUgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbmlpb24oY29tcGxleE5hbWUsIHBhcnQpOwotCQkJCQotCQkJCS8vIENyZWF0ZSBhbiBYU0RFbGVtZW50IGZvciB0aGUgQ29tcGxleFR5cGUKLQkJCQlYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXAgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNETW9kZWxHcm91cChjb21wbGV4VHlwZSk7Ci0JCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQobnVsbCwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIHhzZE1vZGVsR3JvdXApOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gVE9ETzogV2hhdCBzaG91bGQgd2UgZG8gaGVyZS4uLi4uICBXZSBjYW4gZGVmYXVsdCB0byB0aGUgUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UIHN0eWxlCi0JCQkJLy8gc2luY2UgaXQgaGFuZGxlcyAnbXVsdGlwbGUnIFhTREVsZW1lbnRzLi4uLiBPUiAuLi4uLiB3ZSBjYW4gJ292ZXJ3cml0ZSBhbmQgc2V0IGEgbmV3Ci0JCQkJLy8gWFNERWxlbWVudAotCQkJfQotCQkJCi0JCQlpZiAoY29tcGxleFR5cGUgIT0gbnVsbCAmJiAhY29tcGxleFR5cGUuZXF1YWxzKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSkpIHsKLS8vCQkJCXBhcnQuc2V0VHlwZURlZmluaXRpb24oY29tcGxleFR5cGUpOwotCQkJCVN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGNvbXBsZXhUeXBlKTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCB0cnVlLCBwcmVmaXhlZE5hbWUpOwotCQkJCWZvcm1hdENoaWxkKGNvbXBsZXhUeXBlLmdldEVsZW1lbnQoKSk7Ci0JCQl9CQotCQl9Ci0JCQotCQlyZXR1cm4gcmV0dXJuZWRYU0RFbGVtZW50OwotCX0JCi0JLyoKLQkgKiBDcmVhdGUgaWYgbmVjZXNzYXJ5IGEgTWVzc2FnZSBhbmQgUGFydCBmb3IgdGhlIGdpdmVuIE1lc3NhZ2VSZWZlcmVuY2UKLQkgKiBhbmQgcmV0dXJuIGl0J3MgUGFydAotCSAqLwotCXByb3RlY3RlZCBQYXJ0IGNyZWF0ZVdTRExDb21wb25lbnRzKE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZikgewotCQlNZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCk7Ci0JCVBhcnQgcGFydCA9IG51bGw7Ci0JCQotCQlpZiAobWVzc2FnZSA9PSBudWxsIHx8IG1lc3NhZ2UuZUNvbnRhaW5lcigpID09IG51bGwpIHsKLQkJCS8vIENyZWF0ZSBNZXNzYWdlCi0JCQlBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKG1lc3NhZ2VSZWYuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBnZXRXU0RMTWVzc2FnZU5hbWUoKSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJbWVzc2FnZSA9IChNZXNzYWdlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQltZXNzYWdlUmVmLnNldEVNZXNzYWdlKG1lc3NhZ2UpOwotCQl9Ci0JCQotCQlpZiAobWVzc2FnZS5nZXRFUGFydHMoKS5zaXplKCkgPT0gMCkgewotCQkJLy8gQ3JlYXRlIFBhcnQKLQkJCVN0cmluZyBwYXJ0TmFtZSA9IGdldFdTRExQYXJ0TmFtZSgpOwotCQkJaWYgKHN0eWxlID09IFBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJCXBhcnROYW1lID0gZ2V0RG9jTGl0V3JhcHBlZFBhcnROYW1lKCk7Ci0JCQl9Ci0JCQlBZGRQYXJ0Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIHBhcnROYW1lKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlwYXJ0ID0gKFBhcnQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIHRoZXJlIGlzIGFuIGV4aXN0aW5nIFBhcnQKLS8vCQkJcGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldEVQYXJ0cygpLmdldCgwKTsKLQkJfQotCQlmb3JtYXRDaGlsZChtZXNzYWdlLmdldEVsZW1lbnQoKSk7Ci0JCQotCQlyZXR1cm4gcGFydDsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREb2NMaXRXcmFwcGVkUGFydE5hbWUoKSB7Ci0JCXJldHVybiAicGFyYW1ldGVycyI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZVhTRE9iamVjdHMoUGFydCBwYXJ0KSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiByZXR1cm5lZFhTREVsZW1lbnQgPSBudWxsOwotCQlpZiAoaXNQYXJ0RWxlbWVudFJlZmVyZW5jZSgpKSB7Ci0JCQkvLyBJcyBhIFBhcnQgLS0+IEVsZW1lbnQgcmVmZXJlbmNlCi0JCQlpZiAocGFydCA9PSBudWxsICYmIGdldE1lc3NhZ2VSZWZlcmVuY2UoKSAhPSBudWxsICYmIGdldE1lc3NhZ2VSZWZlcmVuY2UoKS5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCQlwYXJ0ID0gKFBhcnQpIGdldE1lc3NhZ2VSZWZlcmVuY2UoKS5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLmdldCgwKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydEVsZW1lbnRSZWZlcmVuY2VDb21wb25lbnRzKHBhcnQpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gSXMgYSBQYXJ0IC0tPiBDb21wbGV4IFR5cGUgcmVmZXJlbmNlCi0vLwkJCXJldHVybmVkWFNERWxlbWVudCA9IGNyZWF0ZVBhcnRDb21wbGV4VHlwZVJlZmVyZW5jZShwYXJ0KTsKLQkJCQotCQkJLy8gSWYgaXQncyBhIFBhcnQgLS0+IFR5cGUgcmVmZXJlbmNlLCBhZGRpbmcgYSBuZXcgcGFyYW1ldGVyIGFsd2F5cyBtZWFucyBhZGRpbmcgYSBuZXcgUGFydAotCQkJLy8gd2l0aCBhIHN0cmluZyByZWZlcmVuY2UuICBCZWNhdXNlIG9mIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIHJlYWxseSByZW5hbWUgdGhpcyBtZXRob2QgaW5zdGVhZAotCQkJLy8gb2YgY3JlYXRlWFNET2JqZWN0cygpIHNpbmNlIHdlIG1heSBlbmQgdXAgY3JlYXRpbmcgYSBQYXJ0LgotCQkJaWYgKHBhcnQgPT0gbnVsbCAmJiBnZXRNZXNzYWdlUmVmZXJlbmNlKCkgIT0gbnVsbCAmJiBnZXRNZXNzYWdlUmVmZXJlbmNlKCkuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQkJTGlzdCBwYXJ0TmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJTWVzc2FnZSBtZXNzYWdlID0gZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmdldEVNZXNzYWdlKCk7Ci0JCQkJSXRlcmF0b3IgaXQgPSBtZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCQlQYXJ0IGl0ZW0gPSAoUGFydCkgaXQubmV4dCgpOwotCQkJCQlwYXJ0TmFtZXMuYWRkKGl0ZW0uZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQkJU3RyaW5nIHBhcnROYW1lID0gTmFtZVV0aWwuZ2V0VW5pcXVlTmFtZUhlbHBlcihnZXRXU0RMUGFydE5hbWUoKSwgcGFydE5hbWVzKTsKLQkJCQlBZGRQYXJ0Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIHBhcnROYW1lKTsKLQkJCQljb21tYW5kLnJ1bigpOwotCQkJCW5ld1BhcnQgPSAoUGFydCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcmV0dXJuZWRYU0RFbGVtZW50OwotCX0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgWFNETmFtZWRDb21wb25lbnQgY29tcG9uZW50KSB7Ci0gICAgCVN0cmluZyBuYW1lID0gY29tcG9uZW50LmdldE5hbWUoKTsKLSAgICAJU3RyaW5nIHRucyA9IGNvbXBvbmVudC5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgTGlzdCBwcmVmaXhlcyA9IGdldFByZWZpeGVzKGRlZmluaXRpb24sIHRucyk7Ci0gICAgICAgIGlmIChwcmVmaXhlcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBuYW1lID0gcHJlZml4ZXMuZ2V0KDApICsgIjoiICsgbmFtZTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBMaXN0IGdldFByZWZpeGVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSkgewotICAgICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIE1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIHRoZU5hbWVzcGFjZSA9IChTdHJpbmcpIG1hcC5nZXQocHJlZml4KTsKLSAgICAgICAgICAgIGlmICh0aGVOYW1lc3BhY2UgIT0gbnVsbCAmJiB0aGVOYW1lc3BhY2UuZXF1YWxzKG5hbWVzcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBsaXN0LmFkZChwcmVmaXgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQYXJhbWV0ZXJQYXR0ZXJuKFdTRExFbGVtZW50IGVsZW1lbnQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJCi0gICAgCWlmIChlbGVtZW50IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0gICAgCQlwYXR0ZXJuID0gZ2V0UGF0dGVybigoT3BlcmF0aW9uKSBlbGVtZW50KTsKLSAgICAJCQotCQkJUG9ydFR5cGUgcHQgPSAoUG9ydFR5cGUpICgoT3BlcmF0aW9uKSBlbGVtZW50KS5nZXRDb250YWluZXIoKTsKLSAgICAJCWlmIChwYXR0ZXJuID09IC0xKSB7Ci0gICAgCQkJLy8gbGV0J3MgdHJ5IHRvIHNlYXJjaCBvdGhlciBPcGVyYXRpb25zIGluIHRoZSBzYW1lIFBvcnRUeXBlCi0gICAgCQkJSXRlcmF0b3Igb3BJdCA9IHB0LmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBvcEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlPcGVyYXRpb24gaXRlbSA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgIAkJCQlpZiAoIWl0ZW0uZXF1YWxzKGVsZW1lbnQpKSB7Ci0gICAgCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtKTsKLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0pOwotICAgIAkJCQl9Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAl9Ci0gICAgCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkgewotICAgIAkJUG9ydFR5cGUgcHQgPSAoUG9ydFR5cGUpIGVsZW1lbnQ7Ci0gICAgCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihwdCk7Ci0gICAgCQkKLSAgICAJCWlmIChwYXR0ZXJuID09IC0xKSB7Ci0gICAgCQkJLy8gbGV0J3MgdHJ5IHRvIHNlYXJjaCBvdGhlciBPcGVyYXRpb25zIGluIE9USEVSIFBvcnRUeXBlcwotICAgIAkJCUl0ZXJhdG9yIHB0SXQgPSBwdC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7Ci0gICAgCQkJd2hpbGUgKHBhdHRlcm4gPT0gLTEgJiYgcHRJdC5oYXNOZXh0KCkpIHsKLSAgICAJCQkJUG9ydFR5cGUgaXRlbSA9IChQb3J0VHlwZSkgcHRJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMocHQpKSB7Ci0gICAgCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtKTsKLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJfQotICAgIAkKLSAgICAJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7Ci0gICAgCX0KLQotICAgIAlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0UGFyYW1ldGVyUGF0dGVybihXU0RMRWxlbWVudCBlbGVtZW50LCBib29sZWFuIHVzZUlucHV0KSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0gICAgCQotICAgIAlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE9wZXJhdGlvbikgewotICAgIAkJT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgZWxlbWVudDsKLSAgICAJCWlmICh1c2VJbnB1dCAmJiBvcC5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0JCQkJcGF0dGVybiA9IGdldFBhdHRlcm4ob3AuZ2V0RUlucHV0KCkuZ2V0RU1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlpZiAoIXVzZUlucHV0ICYmIG9wLmdldEVPdXRwdXQoKSAhPSBudWxsKXsKLQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFT3V0cHV0KCkuZ2V0RU1lc3NhZ2UoKSk7Ci0JCQl9Ci0gICAgCQkKLQkJCVBvcnRUeXBlIHB0ID0gKFBvcnRUeXBlKSBvcC5nZXRDb250YWluZXIoKTsKLSAgICAJCWlmIChwYXR0ZXJuID09IC0xKSB7Ci0gICAgCQkJLy8gbGV0J3MgdHJ5IHRvIHNlYXJjaCBvdGhlciBPcGVyYXRpb25zIGluIHRoZSBzYW1lIFBvcnRUeXBlCi0gICAgCQkJSXRlcmF0b3Igb3BJdCA9IHB0LmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBvcEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlPcGVyYXRpb24gaXRlbSA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgIAkJCQlpZiAoIWl0ZW0uZXF1YWxzKGVsZW1lbnQpKSB7Ci0gICAgCQkJCQlpZiAodXNlSW5wdXQgJiYgaXRlbS5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0gICAgCQkJCQkJcGF0dGVybiA9IGdldFBhdHRlcm4oaXRlbS5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpKTsKLSAgICAJCQkJCX0KLSAgICAJCQkJCWlmICghdXNlSW5wdXQgJiYgaXRlbS5nZXRFT3V0cHV0KCkgIT0gbnVsbCl7Ci0gICAgCQkJCQkJcGF0dGVybiA9IGdldFBhdHRlcm4oaXRlbS5nZXRFT3V0cHV0KCkuZ2V0RU1lc3NhZ2UoKSk7Ci0gICAgCQkJCQl9Ci0gICAgCQkJCX0KLSAgICAJCQl9Ci0gICAgCQl9Ci0KLSAgICAJCWlmIChwYXR0ZXJuID09IC0xKSB7Ci0gICAgCQkJLy8gbGV0J3MgdHJ5IHRvIHNlYXJjaCBvdGhlciBPcGVyYXRpb25zIGluIE9USEVSIFBvcnRUeXBlcwotICAgIAkJCUl0ZXJhdG9yIHB0SXQgPSBwdC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7Ci0gICAgCQkJd2hpbGUgKHBhdHRlcm4gPT0gLTEgJiYgcHRJdC5oYXNOZXh0KCkpIHsKLSAgICAJCQkJUG9ydFR5cGUgaXRlbSA9IChQb3J0VHlwZSkgcHRJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMocHQpKSB7Ci0gICAgCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtLCB1c2VJbnB1dCk7Ci0gICAgCQkJCX0KLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0gICAgCQlQb3J0VHlwZSBwdCA9IChQb3J0VHlwZSkgZWxlbWVudDsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKHB0LCB1c2VJbnB1dCk7Ci0gICAgCQkKLSAgICAJCWlmIChwYXR0ZXJuID09IC0xKSB7Ci0gICAgCQkJLy8gbGV0J3MgdHJ5IHRvIHNlYXJjaCBvdGhlciBPcGVyYXRpb25zIGluIE9USEVSIFBvcnRUeXBlcwotICAgIAkJCUl0ZXJhdG9yIHB0SXQgPSBwdC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7Ci0gICAgCQkJd2hpbGUgKHBhdHRlcm4gPT0gLTEgJiYgcHRJdC5oYXNOZXh0KCkpIHsKLSAgICAJCQkJUG9ydFR5cGUgaXRlbSA9IChQb3J0VHlwZSkgcHRJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMocHQpKSB7Ci0gICAgCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtLCB1c2VJbnB1dCk7Ci0gICAgCQkJCX0KLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBwYXR0ZXJuOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UGF0dGVybihQb3J0VHlwZSBwb3J0VHlwZSkgewotICAgIAlpbnQgcGF0dGVybiA9IC0xOwotICAgIAlJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIAl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBvcEl0Lmhhc05leHQoKSkgewotICAgIAkJT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcCk7Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBwYXR0ZXJuOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRQYXR0ZXJuKFBvcnRUeXBlIHBvcnRUeXBlLCBib29sZWFuIHVzZUlucHV0KSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0gICAgCUl0ZXJhdG9yIG9wSXQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQlPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBvcEl0Lm5leHQoKTsKLSAgICAJCWlmICh1c2VJbnB1dCAmJiBvcC5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0gICAgCQkJcGF0dGVybiA9IGdldFBhdHRlcm4ob3AuZ2V0RUlucHV0KCkuZ2V0RU1lc3NhZ2UoKSk7Ci0gICAgCQl9Ci0gICAgCQlpZiAoIXVzZUlucHV0ICYmIG9wLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0gICAgCQkJcGF0dGVybiA9IGdldFBhdHRlcm4ob3AuZ2V0RU91dHB1dCgpLmdldEVNZXNzYWdlKCkpOwotICAgIAkJfQotICAgIAl9Ci0gICAgCQotICAgIAlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oT3BlcmF0aW9uIG9wZXJhdGlvbikgewotCQlpbnQgcGF0dGVybiA9IC0xOwotCQkKLSAgICAJSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0JCU91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotCQlMaXN0IGZhdWx0cyA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCk7Ci0JCQotCQlpZiAoaW5wdXQgIT0gbnVsbCkgewotCQkJcGF0dGVybiA9IGdldFBhdHRlcm4oaW5wdXQuZ2V0RU1lc3NhZ2UoKSk7Ci0JCX0KLQkJCi0JCWlmIChwYXR0ZXJuID09IC0xICYmIG91dHB1dCAhPSBudWxsKSB7Ci0JCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvdXRwdXQuZ2V0RU1lc3NhZ2UoKSk7Ci0JCX0KLQkJCi0JCWlmIChwYXR0ZXJuID09IC0xICYmIGZhdWx0cy5zaXplKCkgPiAwKSB7Ci0JCQlJdGVyYXRvciBmYXVsdEl0ID0gZmF1bHRzLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBmYXVsdEl0Lmhhc05leHQoKSkgewotCQkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBmYXVsdEl0Lm5leHQoKTsKLQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihmYXVsdC5nZXRFTWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRQYXR0ZXJuKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgIAlpbnQgcGF0dGVybiA9IC0xOwotCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7Ci0JCQlJdGVyYXRvciBwYXJ0cyA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwYXJ0cy5oYXNOZXh0KCkpIHsKLQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFydHMubmV4dCgpOwotCQkJCWlmIChwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVDsKLQotCQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0JCQkJCWlmIChpc1NlcXVlbmNlUGF0dGVybih4c2RFbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCkpKSB7Ci0JCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UOwkKLQkJCQkJfQkJCQkJCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQllbHNlIGlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9TSU1QTEVUWVBFOwotCQkJCQkKLQkJCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfQ09NUExFWFRZUEU7Ci0JCQkJCQkKLQkJCQkJCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB4c2RUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCQkJCQkJaWYgKGlzU2VxdWVuY2VQYXR0ZXJuKHhzZFR5cGUpKSB7Ci0JCQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfQ09NUExFWFRZUEVfU0VRX0VMRU1FTlQ7IAotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNTZXF1ZW5jZVBhdHRlcm4oWFNEVHlwZURlZmluaXRpb24gdHlwZSkgewotICAgIAlib29sZWFuIGlzU2VxdWVuY2VQYXR0ZXJuID0gZmFsc2U7Ci0gICAgCQotICAgIAlpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotICAgIAkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgdHlwZTsKLQotCSAgICAJaWYgKGNvbXBsZXhUeXBlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIGNvbXBsZXhUeXBlLmdldENvbnRlbnQoKTsKLQkJCQlpZiAocGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCQlpc1NlcXVlbmNlUGF0dGVybiA9IHRydWU7Ci0JCQkJfQotCQkJfQotICAgIAl9Ci0gICAgCQotICAgIAlyZXR1cm4gaXNTZXF1ZW5jZVBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGZvcm1hdENoaWxkKEVsZW1lbnQgY2hpbGQpCi0gICAgewotICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgICB7Ci0gICAgICAgIElET01Nb2RlbCBtb2RlbCA9ICgoSURPTU5vZGUpY2hpbGQpLmdldE1vZGVsKCk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGVsbCB0aGUgbW9kZWwgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gbWFrZSBhIGJpZyBtb2RlbCBjaGFuZ2UKLSAgICAgICAgICBtb2RlbC5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLSAgICAgICAgICAKLSAgICAgICAgICBJU3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvciBmb3JtYXRQcm9jZXNzb3IgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0gICAgICAgICAgZm9ybWF0UHJvY2Vzc29yLmZvcm1hdE5vZGUoY2hpbGQpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgIC8vIHRlbGwgdGhlIG1vZGVsIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGUgYmlnIG1vZGVsIGNoYW5nZQotICAgICAgICAgIG1vZGVsLmNoYW5nZWRNb2RlbCgpOyAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgUGFydCBnZXROZXdseUFkZGVkQ29tcG9uZW50UGFydCgpIHsKLSAgICAJcmV0dXJuIG5ld1BhcnQ7Ci0gICAgfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKTsKLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0V1NETE1lc3NhZ2VOYW1lKCk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRXU0RMUGFydE5hbWUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEyNTFiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRCaW5kaW5nQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYWxOYW1lOwotICBwcml2YXRlIEJpbmRpbmcgYmluZGluZzsKLSAKLSAgcHVibGljIEFkZEJpbmRpbmdDb21tYW5kCi0JCShEZWZpbml0aW9uIGRlZmluaXRpb24sICAKLQkJIFN0cmluZyBsb2NhbE5hbWUpCi0JewotCSAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCX0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBiaW5kaW5nID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICBiaW5kaW5nLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLGxvY2FsTmFtZSkpOwotICAgIGJpbmRpbmcuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICBkZWZpbml0aW9uLmFkZEJpbmRpbmcoYmluZGluZyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0ZhdWx0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nRmF1bHRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOTliYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nRmF1bHRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEJpbmRpbmdGYXVsdENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdDsKLSAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uOwotICBTdHJpbmcgbmFtZTsKLSAgCi0gIHB1YmxpYyBBZGRCaW5kaW5nRmF1bHRDb21tYW5kKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ0ZhdWx0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIGJpbmRpbmdGYXVsdC5zZXROYW1lKG5hbWUpOyAKLSAgICBiaW5kaW5nRmF1bHQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQoKEJpbmRpbmdGYXVsdCliaW5kaW5nRmF1bHQpOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdGYXVsdDsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdJbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0lucHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTg4MjViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0lucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRCaW5kaW5nSW5wdXRDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQ7Ci0gIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjsKLSAgU3RyaW5nIG5hbWU7Ci0gIAotICBwdWJsaWMgQWRkQmluZGluZ0lucHV0Q29tbWFuZChCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24sIFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5iaW5kaW5nT3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbjsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGJpbmRpbmdJbnB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICBiaW5kaW5nSW5wdXQuc2V0TmFtZShuYW1lKTsgCi0gICAgYmluZGluZ0lucHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ0lucHV0KChCaW5kaW5nSW5wdXQpYmluZGluZ0lucHV0KTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nSW5wdXQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ09wZXJhdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ09wZXJhdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhNDY0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdPcGVyYXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkQmluZGluZ09wZXJhdGlvbkNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0gIAotICBwcml2YXRlIFN0cmluZyBuYW1lOwotICBwcml2YXRlIFN0cmluZyBiaW5kaW5nSW5wdXROYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBTdHJpbmcgYmluZGluZ091dHB1dE5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFN0cmluZyBiaW5kaW5nRmF1bHROYW1lID0iIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlQmluZGluZ0lucHV0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVCaW5kaW5nT3V0cHV0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVCaW5kaW5nRmF1bHQgPSBmYWxzZTsKLSAgCi0gIHB1YmxpYyBBZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZChCaW5kaW5nIGJpbmRpbmcsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZAotICAgIChCaW5kaW5nIGJpbmRpbmcsICAKLSAgICAgU3RyaW5nIG5hbWUsCi0gICAgIGJvb2xlYW4gY3JlYXRlQmluZGluZ0lucHV0LAotICAgICBib29sZWFuIGNyZWF0ZUJpbmRpbmdPdXRwdXQsCi0gICAgIGJvb2xlYW4gY3JlYXRlQmluZGluZ0ZhdWx0KQotICB7Ci0gICAgdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMuY3JlYXRlQmluZGluZ0lucHV0ID0gY3JlYXRlQmluZGluZ0lucHV0OwotICAgIHRoaXMuY3JlYXRlQmluZGluZ091dHB1dCA9IGNyZWF0ZUJpbmRpbmdPdXRwdXQ7Ci0gICAgdGhpcy5jcmVhdGVCaW5kaW5nRmF1bHQgPSBjcmVhdGVCaW5kaW5nRmF1bHQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGJpbmRpbmdPcGVyYXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEVuY2xvc2luZ0RlZmluaXRpb24oYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIGJpbmRpbmcuYWRkQmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLQotICAgIFdTRExFbGVtZW50Q29tbWFuZCBjb21tYW5kID0gbnVsbDsKLSAgICBpZiAoY3JlYXRlQmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIGNvbW1hbmQgPSBuZXcgQWRkQmluZGluZ0lucHV0Q29tbWFuZChiaW5kaW5nT3BlcmF0aW9uLGJpbmRpbmdJbnB1dE5hbWUpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoY3JlYXRlQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICBjb21tYW5kID0gbmV3IEFkZEJpbmRpbmdPdXRwdXRDb21tYW5kKGJpbmRpbmdPcGVyYXRpb24sYmluZGluZ091dHB1dE5hbWUpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoY3JlYXRlQmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIGNvbW1hbmQgPSBuZXcgQWRkQmluZGluZ0ZhdWx0Q29tbWFuZChiaW5kaW5nT3BlcmF0aW9uLGJpbmRpbmdGYXVsdE5hbWUpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdJbnB1dE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdJbnB1dE5hbWUgPSBuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRCaW5kaW5nT3V0cHV0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZ091dHB1dE5hbWUgPSBuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRCaW5kaW5nRmF1bHROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5iaW5kaW5nRmF1bHROYW1lID0gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODBkYTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ091dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEJpbmRpbmdPdXRwdXRDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dDsKLSAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uOwotICBTdHJpbmcgbmFtZTsKLSAgCi0gIHB1YmxpYyBBZGRCaW5kaW5nT3V0cHV0Q29tbWFuZChCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24sIFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5iaW5kaW5nT3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbjsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGJpbmRpbmdPdXRwdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ091dHB1dCgpOwotICAgIGJpbmRpbmdPdXRwdXQuc2V0TmFtZShuYW1lKTsgCi0gICAgYmluZGluZ091dHB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGJpbmRpbmdPcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQoKEJpbmRpbmdPdXRwdXQpYmluZGluZ091dHB1dCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ091dHB1dDsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NjlmOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRFeHRlbnNpb25FbGVtZW50Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZVRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLmNvbW1hbmRzLkFkZEV4dGVuc2lvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQgZXh0ZW5kcyBBZGRFeHRlbnNpb25Db21tYW5kCi17Ci0gIEV4dGVuc2libGVFbGVtZW50IGlucHV0OwotICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudDsKLSAgRWxlbWVudCBhcHBJbmZvOwotICBFbGVtZW50IG5ld0VsZW1lbnQ7Ci0KLSAgcHVibGljIEFkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kKFN0cmluZyBsYWJlbCwgRXh0ZW5zaWJsZUVsZW1lbnQgaW5wdXQsIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50KQotICB7Ci0gICAgc3VwZXIobGFiZWwpOwotICAgIHRoaXMuaW5wdXQgPSBpbnB1dDsKLSAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0gIHsKLSAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gaW5wdXQuZ2V0RWxlbWVudCgpOwotICAgIERvY3VtZW50IGRvYyA9IHBhcmVudEVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpOwotICAgIAotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50TlMoZXh0ZW5zaW9uc1NjaGVtYVNwZWMuZ2V0TmFtZXNwYWNlVVJJKCksIGVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAKLSAgICBTdHJpbmcgcHJlZml4ID0gYWRkTmFtZXNwYWNlRGVjbGFyYXRpb25JZlJlcXVpcmVkKGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSwgInAiLCBleHRlbnNpb25zU2NoZW1hU3BlYy5nZXROYW1lc3BhY2VVUkkoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICBuZXdFbGVtZW50LnNldFByZWZpeChwcmVmaXgpOwotICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB1bmRvKCkKLSAgewotICAgIC8vIFRPRE8gKGNzKSBkbyB3ZSBuZWVkIHRvIGltcGxlbWVudD8KLSAgfQotICBwdWJsaWMgT2JqZWN0IGdldE5ld09iamVjdCgpCi0gIHsKLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgYWRkTmFtZXNwYWNlRGVjbGFyYXRpb25JZlJlcXVpcmVkKEVsZW1lbnQgcm9vdEVsZW1lbnQsIFN0cmluZyBwcmVmaXhIaW50LCBTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgU3RyaW5nIHByZWZpeCA9IG51bGw7ICAgICAgCi0gICAgTmFtZXNwYWNlVGFibGUgbmFtZXNwYWNlVGFibGUgPSBuZXcgTmFtZXNwYWNlVGFibGUocm9vdEVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgICBuYW1lc3BhY2VUYWJsZS5hZGRFbGVtZW50KHJvb3RFbGVtZW50KTsKLSAgICBwcmVmaXggPSBuYW1lc3BhY2VUYWJsZS5nZXRQcmVmaXhGb3JVUkkobmFtZXNwYWNlKTsKLSAgICBpZiAocHJlZml4ID09IG51bGwpCi0gICAgeyAKLSAgICAgIFN0cmluZyBiYXNlUHJlZml4ID0gcHJlZml4SGludDsKLSAgICAgIHByZWZpeCA9IGJhc2VQcmVmaXg7Ci0gICAgICBTdHJpbmcgeG1sbnNDb2xvbiA9ICJ4bWxuczoiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHhtbG5zQ29sb24gKyBwcmVmaXg7Ci0gICAgICBpbnQgY291bnQgPSAwOwotICAgICAgd2hpbGUgKHJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjb3VudCsrOwotICAgICAgICBwcmVmaXggPSBiYXNlUHJlZml4ICsgY291bnQ7Ci0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSB4bWxuc0NvbG9uICsgcHJlZml4OwotICAgICAgfSAgICAgIAotICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIG5hbWVzcGFjZSk7ICAKLSAgICB9ICAgIAotICAgIHJldHVybiBwcmVmaXg7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRGYXVsdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRmF1bHRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NTNmMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRGYXVsdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRGYXVsdENvbW1hbmQgZXh0ZW5kcyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZAotewotICBwcml2YXRlIEZhdWx0IG9yaWdpbmFsRmF1bHQ7Ci0gIAotICBwdWJsaWMgQWRkRmF1bHRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUpOwotICB9Ci0KLSAgcHVibGljIEFkZEZhdWx0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjcmVhdGVNZXNzYWdlKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUsY3JlYXRlTWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGEgRmF1bHQgYmFzZWQgb24gdGhlIGdpdmVuIEZhdWx0LiAgSW4gZXNzZW5jZSwgdGhpcyB3aWxsCi0gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIEZhdWx0LgotICAgKi8KLSAgcHVibGljIEFkZEZhdWx0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBGYXVsdCBvcmlnaW5hbEZhdWx0LCBTdHJpbmcgbmFtZSkgewotICAJc3VwZXIob3BlcmF0aW9uLCBuYW1lLCBmYWxzZSk7Ci0gIAkKLSAgCXRoaXMub3JpZ2luYWxGYXVsdCA9IG9yaWdpbmFsRmF1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBtZXNzYWdlUmVmZXJlbmNlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhdWx0KCk7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXROYW1lKG5hbWUpOyAKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldEVuY2xvc2luZ0RlZmluaXRpb24ob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgb3BlcmF0aW9uLmFkZEZhdWx0KChGYXVsdCltZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAKLSAgICAvLyAgVEJEIC0gYWRkIGJpbmRpbmcgZmF1bHQKLQotICAgIGlmIChvcmlnaW5hbEZhdWx0ID09IG51bGwpIHsKLSAgICAJaWYgKGNyZWF0ZU1lc3NhZ2UpCi0gICAgCQljcmVhdGVNZXNzYWdlKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAkvLyBEbyBuZWNlc3NhcnkgY29weWluZyBvZiBkYXRhIGZyb20gb3JpZ2luYWwgRmF1bHQgdG8gbmV3IEZhdWx0Ci0gICAgCWlmIChvcmlnaW5hbEZhdWx0LmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotLy8gICAgCQlTdHJpbmcgb3JpZ2luYWxNc2dOYW1lID0gb3JpZ2luYWxGYXVsdC5nZXRFTWVzc2FnZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0vLyAgICAJCQotLy8gICAgCQlib29sZWFuIGdlbmVkID0gZmFsc2U7Ci0vLyAgICAJCWlmIChvcmlnaW5hbEZhdWx0LmVDb250YWluZXIoKSBpbnN0YW5jZW9mIE9wZXJhdGlvbikKLS8vICAgIAkJCWdlbmVkID0gU21hcnRSZW5hbWVBY3Rpb24uaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvcmlnaW5hbE1zZ05hbWUsICgoT3BlcmF0aW9uKSBvcmlnaW5hbEZhdWx0LmVDb250YWluZXIoKSkuZ2V0TmFtZSgpLCAiIik7Ci0vLyAgICAJCQotLy8gICAgCQlTdHJpbmcgbmV3TXNnTmFtZSA9ICIiOwotLy8gICAgCQlpZiAoZ2VuZWQpIHsKLS8vICAgIAkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIG1lc3NhZ2VSZWZlcmVuY2UpOwotLy8gICAgCQl9Ci0vLyAgICAJCWVsc2UgewotLy8gICAgCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLS8vICAgIAkJCU1lc3NhZ2UgdE1lc3NhZ2UgPSBvcmlnaW5hbEZhdWx0LmdldEVNZXNzYWdlKCk7Ci0vLyAgICAJCQluZXdNc2dOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShkZWZpbml0aW9uLCB0TWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLS8vICAgIAkJfQotICAgIAkJCi0gICAgCQljcmVhdGVNZXNzYWdlKG9yaWdpbmFsRmF1bHQsIE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgbWVzc2FnZVJlZmVyZW5jZSkpOwotICAgIAl9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg4MDcyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgewotCXByb3RlY3RlZCBGYXVsdCBmYXVsdDsKLQlwcml2YXRlIFN0cmluZyBmYXVsdE5hbWU7Ci0JCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0UGFyYW1ldGVyUGF0dGVybkZvckZhdWx0KE9wZXJhdGlvbiBvcGVyYXRpb24sIEZhdWx0IGZhdWx0KSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0gICAgCWlmIChmYXVsdCAhPSBudWxsKSB7Ci0gICAgCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihmYXVsdC5nZXRFTWVzc2FnZSgpKTsKLSAgICAJfQotCQlpZiAocGF0dGVybiA9PSAtMSkgewotCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRQYXR0ZXJuKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgIAlpbnQgcGF0dGVybiA9IC0xOwotCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7Ci0JCQlJdGVyYXRvciBwYXJ0cyA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwYXJ0cy5oYXNOZXh0KCkpIHsKLQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFydHMubmV4dCgpOwotCQkJCWlmIChwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVDsKLQotCQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0JCQkJCWlmIChpc1NlcXVlbmNlUGF0dGVybih4c2RFbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCkpKSB7Ci0JCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UOwkKLQkJCQkJfQkJCQkJCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQllbHNlIGlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9TSU1QTEVUWVBFOwotCQkJCQkKLQkJCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfQ09NUExFWFRZUEU7Ci0JCQkJCQkKLQkJCQkJCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB4c2RUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCQkJCQkJaWYgKGlzU2VxdWVuY2VQYXR0ZXJuKHhzZFR5cGUpKSB7Ci0JCQkJCQkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfQ09NUExFWFRZUEVfU0VRX0VMRU1FTlQ7IAotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNTZXF1ZW5jZVBhdHRlcm4oWFNEVHlwZURlZmluaXRpb24gdHlwZSkgewotICAgIAlib29sZWFuIGlzU2VxdWVuY2VQYXR0ZXJuID0gZmFsc2U7Ci0gICAgCQotICAgIAlpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotICAgIAkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgdHlwZTsKLQotCSAgICAJaWYgKGNvbXBsZXhUeXBlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIGNvbXBsZXhUeXBlLmdldENvbnRlbnQoKTsKLQkJCQlpZiAocGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCQlpc1NlcXVlbmNlUGF0dGVybiA9IHRydWU7Ci0JCQkJfQotCQkJfQotICAgIAl9Ci0gICAgCQotICAgIAlyZXR1cm4gaXNTZXF1ZW5jZVBhdHRlcm47Ci0gICAgfQotCQotCXB1YmxpYyBBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgRmF1bHQgZmF1bHQpIHsKLQkJc3VwZXIob3BlcmF0aW9uLCBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlQpOwotCQl0aGlzLmZhdWx0ID0gZmF1bHQ7Ci0JfQotCQotCS8qCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZmF1bHQgPT0gbnVsbCkgewotCQkJQWRkRmF1bHRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkRmF1bHRDb21tYW5kKG9wZXJhdGlvbiwgZ2V0RmF1bHROYW1lKCkpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCWZhdWx0ID0gKEZhdWx0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCX0KLQkJCi0JCVBhcnQgcGFydCA9IGNyZWF0ZVdTRExDb21wb25lbnRzKGZhdWx0KTsKLQkJbmV3UGFydCA9IHBhcnQ7Ci0JCQotCQkvLyBDcmVhdGUgbmVjZXNzYXJ5IFhTRCBPYmplY3RzIHN0YXJ0aW5nIHdpdGggdGhlIFBhcnQgcmVmZXJlbmNlCi0JCW5ld1hTREVsZW1lbnQgPSBjcmVhdGVYU0RPYmplY3RzKHBhcnQpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCkgewotCQlpZiAobmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPT0gbnVsbCkgewotCQkJbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpICsgIl8iICsgZ2V0RmF1bHROYW1lKCk7ICAvLyROT04tTkxTLTEkCi0JCX0KLQkJCi0JCXJldHVybiBuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdYU0RFbGVtZW50TmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCkgKyAiXyIgKyBnZXRGYXVsdE5hbWUoKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCQotCQlyZXR1cm4gbmV3WFNERWxlbWVudE5hbWU7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETE1lc3NhZ2VOYW1lKCkgewotCQlpZiAobmV3V1NETE1lc3NhZ2VOYW1lID09IG51bGwpIHsKLQkJCW5ld1dTRExNZXNzYWdlTmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCkgKyAiXyIgKyBnZXRGYXVsdE5hbWUoKSArICJNc2ciOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCUxpc3QgdXNlZE5hbWVzID0gTmFtZVV0aWwuZ2V0VXNlZE1lc3NhZ2VOYW1lcyhvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCW5ld1dTRExNZXNzYWdlTmFtZSA9IE5hbWVVdGlsLmdldFVuaXF1ZU5hbWVIZWxwZXIobmV3V1NETE1lc3NhZ2VOYW1lLCB1c2VkTmFtZXMpOwotCQl9Ci0JCQotCQlyZXR1cm4gbmV3V1NETE1lc3NhZ2VOYW1lOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETFBhcnROYW1lKCkgewotCQlpZiAobmV3V1NETFBhcnROYW1lID09IG51bGwpIHsKLQkJCW5ld1dTRExQYXJ0TmFtZSA9IGdldEZhdWx0TmFtZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gbmV3V1NETFBhcnROYW1lOwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBnZXRGYXVsdE5hbWUoKSB7Ci0JCWlmIChmYXVsdE5hbWUgPT0gbnVsbCkgewotCQkJaWYgKGZhdWx0ICE9IG51bGwpIHsKLQkJCQlmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmYXVsdE5hbWUgPSBOYW1lVXRpbC5nZXRGYXVsdE5hbWUob3BlcmF0aW9uKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBmYXVsdE5hbWU7Ci0JfQotCQotCXB1YmxpYyBNZXNzYWdlUmVmZXJlbmNlIGdldE1lc3NhZ2VSZWZlcmVuY2UoKSB7Ci0JCXJldHVybiBmYXVsdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEltcG9ydENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW1wb3J0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDM5ZGJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW1wb3J0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRJbXBvcnRDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBuYW1lc3BhY2U7Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2F0aW9uOwotICBwcml2YXRlIEltcG9ydCBpbXBvcnRFbGVtZW50OwotICAKLSAgcHVibGljIEFkZEltcG9ydENvbW1hbmQKLSAgCShEZWZpbml0aW9uIGRlZmluaXRpb24sICAKLSAgCSBTdHJpbmcgbmFtZXNwYWNlLAotICAJIFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydEVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgaW1wb3J0RWxlbWVudCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbXBvcnQoKTsKLSAgICBpbXBvcnRFbGVtZW50LnNldE5hbWVzcGFjZVVSSShuYW1lc3BhY2UpOwotICAgIGltcG9ydEVsZW1lbnQuc2V0TG9jYXRpb25VUkkobG9jYXRpb24pOwotICAgIGltcG9ydEVsZW1lbnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICBkZWZpbml0aW9uLmFkZEltcG9ydChpbXBvcnRFbGVtZW50KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlVVJJKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIGxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZElucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbnB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI1NzVmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZElucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlNtYXJ0UmVuYW1lQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZElucHV0Q29tbWFuZCBleHRlbmRzIEFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kCi17Ci0gIHByaXZhdGUgSW5wdXQgb3JpZ2luYWxJbnB1dDsKLQkKLSAgcHVibGljIEFkZElucHV0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG9wZXJhdGlvbixuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBBZGRJbnB1dENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gY3JlYXRlTWVzc2FnZSkKLSAgewotICAgIHN1cGVyKG9wZXJhdGlvbixuYW1lLGNyZWF0ZU1lc3NhZ2UpOwotICB9Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHRvIGNyZWF0ZSBhbiBJbnB1dCBiYXNlZCBvbiB0aGUgZ2l2ZW4gSW5wdXQuICBJbiBlc3NlbmNlLCB0aGlzIHdpbGwKLSAgICogY3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gSW5wdXQuCi0gICAqLwotICBwdWJsaWMgQWRkSW5wdXRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIElucHV0IG9yaWdpbmFsSW5wdXQsIFN0cmluZyBuYW1lKSB7Ci0gIAlzdXBlcihvcGVyYXRpb24sIG5hbWUsIGZhbHNlKTsKLSAgCQotICAJdGhpcy5vcmlnaW5hbElucHV0ID0gb3JpZ2luYWxJbnB1dDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIG1lc3NhZ2VSZWZlcmVuY2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSW5wdXQoKTsKLSAgLy8gIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0TmFtZShuYW1lKTsgCi0gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIG9wZXJhdGlvbi5zZXRJbnB1dCgoSW5wdXQpbWVzc2FnZVJlZmVyZW5jZSk7Ci0gICAgCi0gICAgLy8gVEJEIC0gYWRkIGJpbmRpbmcgaW5wdXQgCi0gICAgCi0gICAgaWYgKG9yaWdpbmFsSW5wdXQgPT0gbnVsbCkgewotICAgIAlpZiAoY3JlYXRlTWVzc2FnZSkKLSAgICAJCWNyZWF0ZU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCS8vIERvIG5lY2Vzc2FyeSBjb3B5aW5nIG9mIGRhdGEgZnJvbSBvcmlnaW5hbCBJbnB1dCB0byBuZXcgSW5wdXQKLSAgICAJaWYgKG9yaWdpbmFsSW5wdXQuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0gICAgCQlTdHJpbmcgb3JpZ2luYWxNc2dOYW1lID0gb3JpZ2luYWxJbnB1dC5nZXRFTWVzc2FnZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgCQkKLSAgICAJCWJvb2xlYW4gZ2VuZWQgPSBmYWxzZTsKLSAgICAJCWlmIChvcmlnaW5hbElucHV0LmVDb250YWluZXIoKSBpbnN0YW5jZW9mIE9wZXJhdGlvbikKLSAgICAJCQlnZW5lZCA9IFNtYXJ0UmVuYW1lQWN0aW9uLmlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQob3JpZ2luYWxNc2dOYW1lLCAoKE9wZXJhdGlvbikgb3JpZ2luYWxJbnB1dC5lQ29udGFpbmVyKCkpLmdldE5hbWUoKSwgIlJlcXVlc3QiKTsgLy8kTk9OLU5MUy0xJAotICAgIAkJCi0gICAgCQlTdHJpbmcgbmV3TXNnTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgCQlpZiAoZ2VuZWQpIHsKLSAgICAJCQluZXdNc2dOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBtZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAJCX0KLSAgICAJCWVsc2UgewotICAgIAkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgCQkJTWVzc2FnZSB0TWVzc2FnZSA9IG9yaWdpbmFsSW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICAJCQluZXdNc2dOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShkZWZpbml0aW9uLCB0TWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICAJCX0KLQotICAgIAkJY3JlYXRlTWVzc2FnZShvcmlnaW5hbElucHV0LCBuZXdNc2dOYW1lKTsKLSAgICAJfQotICAgIH0KLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZElucHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjdkMzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yLlcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuWFNEQ29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgewotCXByb3RlY3RlZCBib29sZWFuIGNyZWF0ZVhTRE9iamVjdHMgPSB0cnVlOwotCXByb3RlY3RlZCBib29sZWFuIHJldXNlRXhpc3RpbmdNZXNzYWdlID0gZmFsc2U7Ci0JcHJpdmF0ZSBJbnB1dCBpbnB1dDsKLQlwdWJsaWMgQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCBzdHlsZSkgewotCQlzdXBlcihvcGVyYXRpb24sIHN0eWxlKTsKLQl9Ci0KLQlwdWJsaWMgQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCBzdHlsZSwgYm9vbGVhbiByZXVzZU1lc3NhZ2UpIHsKLQkJc3VwZXIob3BlcmF0aW9uLCBzdHlsZSk7Ci0JCXJldXNlRXhpc3RpbmdNZXNzYWdlID0gcmV1c2VNZXNzYWdlOwotCX0KLQkKLQkvKgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJUGFydCBwYXJ0ID0gbnVsbDsKLQkJaWYgKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0JCQlpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLQkJfQotCQllbHNlIHsKLQkJCUFkZElucHV0Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZElucHV0Q29tbWFuZChvcGVyYXRpb24sIG51bGwpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCWlucHV0ID0gKElucHV0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCX0KLQkJCi0JCWlmIChzdHlsZSA9PSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpIHsKLQkJCXBhcnQgPSBjcmVhdGVEb2NMaXRXcmFwcGVkV1NETENvbXBvbmVudHMoaW5wdXQpOwotCQl9Ci0JCWVsc2UgewotCQkJcGFydCA9IGNyZWF0ZVdTRExDb21wb25lbnRzKGlucHV0KTsKLQkJfQotCQkKLQkJbmV3UGFydCA9IHBhcnQ7Ci0JCS8vIENyZWF0ZSBuZWNlc3NhcnkgWFNEIE9iamVjdHMgc3RhcnRpbmcgd2l0aCB0aGUgUGFydCByZWZlcmVuY2UKLQkJaWYgKGNyZWF0ZVhTRE9iamVjdHMpCi0JCQluZXdYU0RFbGVtZW50ID0gY3JlYXRlWFNET2JqZWN0cyhwYXJ0KTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFBhcnQgY3JlYXRlRG9jTGl0V3JhcHBlZFdTRExDb21wb25lbnRzKE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZikgewotCQlNZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCk7Ci0JCVBhcnQgcGFydCA9IG51bGw7Ci0KLQkJaWYgKHJldXNlRXhpc3RpbmdNZXNzYWdlICYmIG1lc3NhZ2UgPT0gbnVsbCkgewotCQkJLy8gU2VlIGlmIHdlIGNhbiB1c2UgYW4gZXhpc3RpbmcgTWVzc2FnZQotCQkJTWVzc2FnZSBleGlzdGluZ01lc3NhZ2UgPSBudWxsOwotCQkJU3RyaW5nIG1lc3NhZ2VOYW1lID0gZ2V0SWRlYWxNZXNzYWdlTmFtZShtZXNzYWdlUmVmKTsKLQkJCUl0ZXJhdG9yIG1lc3NhZ2VzID0gbWVzc2FnZVJlZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChtZXNzYWdlcy5oYXNOZXh0KCkpIHsKLQkJCQlNZXNzYWdlIGl0ZW0gPSAoTWVzc2FnZSkgbWVzc2FnZXMubmV4dCgpOwotCQkJCVFOYW1lIGl0ZW1OYW1lID0gaXRlbS5nZXRRTmFtZSgpOwotCQkJCWlmIChpdGVtTmFtZSAhPSBudWxsICYmIGl0ZW1OYW1lLmdldExvY2FsUGFydCgpICE9IG51bGwgJiYgbWVzc2FnZU5hbWUuZXF1YWxzKGl0ZW1OYW1lLmdldExvY2FsUGFydCgpKSkgewotCQkJCQlleGlzdGluZ01lc3NhZ2UgPSBpdGVtOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChleGlzdGluZ01lc3NhZ2UgIT0gbnVsbCkgewotCQkJCWlmIChleGlzdGluZ01lc3NhZ2UuZ2V0RVBhcnRzKCkuc2l6ZSgpID4gMCkgewotCQkJCQkvLyBTZWUgaWYgZXhpc3RpbmcgTWVzc2FnZSBoYXMgYSBQYXJ0IHJlZmVyZW5jaW5nIGFuIFhTRCBFbGVtZW50IHdpdGggdGhlIHByb3BlciBuYW1lCi0JCQkJCVBhcnQgZXhpc3RpbmdQYXJ0ID0gKFBhcnQpIGV4aXN0aW5nTWVzc2FnZS5nZXRFUGFydHMoKS5nZXQoMCk7Ci0JCQkJCWlmICghKGV4aXN0aW5nUGFydC5nZXROYW1lKCkuZXF1YWxzKGdldERvY0xpdFdyYXBwZWRQYXJ0TmFtZSgpKSkpIHsKLQkJCQkJCW1lc3NhZ2UgPSBudWxsOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGV4aXN0aW5nRWxlbWVudCA9IGV4aXN0aW5nUGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCQkJCWlmIChleGlzdGluZ0VsZW1lbnQgIT0gbnVsbCAmJiBleGlzdGluZ0VsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhvcGVyYXRpb24uZ2V0TmFtZSgpKSkgewotCQkJCQkJCS8vIFRoZXJlIGlzIGFuIGV4aXN0aW5nIFhTRCBFbGVtZW50IHdpdGggdGhlIHByb3BlciBuYW1lCi0JCQkJCQkJLy8gU2VlIGlmIHRoZSBYU0QgRWxlbWVudCBoYXMgYW4gYW5vbnltb3VzIHR5cGUgd2l0aCBhIHNlcXVlbmNlIGFuZCBhbiBYU0QgRWxlbWVudAotCQkJCQkJCVcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IoKTsKLQkJCQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gaW5uZXJFbGVtZW50ID0gdmlzaXRvci5nZXRJbm5lclhTREVsZW1lbnQoZXhpc3RpbmdFbGVtZW50KTsKLQkJCQkJCQlpZiAoIWlubmVyRWxlbWVudC5lcXVhbHMoZXhpc3RpbmdFbGVtZW50KSkgewotCQkJCQkJCQkvLyBGb3VuZCBhbiBleGlzdGluZyBpbm5lciBYU0QgRWxlbWVudAotCQkJCQkJCQljcmVhdGVYU0RPYmplY3RzID0gZmFsc2U7Ci0KLQkJCQkJCQkJLy8gc2V0IHRoZSBNZXNzYWdlUmVmZXJlbmNlIC0tPiBNZXNzYWdlIHJlZmVyZW5jZQotCQkJCQkJCQltZXNzYWdlUmVmLnNldEVNZXNzYWdlKGV4aXN0aW5nTWVzc2FnZSk7Ci0JCQkJCQkJCW1lc3NhZ2UgPSBleGlzdGluZ01lc3NhZ2U7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKG1lc3NhZ2UgPT0gbnVsbCB8fCBtZXNzYWdlLmVDb250YWluZXIoKSA9PSBudWxsKSB7Ci0JCQkvLyBDcmVhdGUgTWVzc2FnZQotCQkJQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRNZXNzYWdlQ29tbWFuZChtZXNzYWdlUmVmLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgZ2V0V1NETE1lc3NhZ2VOYW1lKCkpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCW1lc3NhZ2UgPSAoTWVzc2FnZSkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQkJbWVzc2FnZVJlZi5zZXRFTWVzc2FnZShtZXNzYWdlKTsKLQkJfQotCi0KLQkJaWYgKG1lc3NhZ2UuZ2V0RVBhcnRzKCkuc2l6ZSgpID09IDApIHsKLQkJCS8vIENyZWF0ZSBQYXJ0Ci0JCQlTdHJpbmcgcGFydE5hbWUgPSBnZXREb2NMaXRXcmFwcGVkUGFydE5hbWUoKTsKLQkJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydE5hbWUpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCXBhcnQgPSAoUGFydCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgewotCQkJcGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldEVQYXJ0cygpLmdldCgwKTsKLQkJfQotCQlmb3JtYXRDaGlsZChtZXNzYWdlLmdldEVsZW1lbnQoKSk7Ci0KLQkJcmV0dXJuIHBhcnQ7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCkgewotCQlpZiAobmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPT0gbnVsbCkgewotCQkJaWYgKHRoaXMuc3R5bGUgPT0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQkJbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPSBnZXRXU0RMUGFydE5hbWUoKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG5ld0Fub255bW91c1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpIHsKLQkJaWYgKG5ld1hTREVsZW1lbnROYW1lID09IG51bGwpIHsKLQkJCW5ld1hTREVsZW1lbnROYW1lID0gImluIjsgLy8kTk9OLU5MUy0xJAotLy8JCQluZXdYU0RFbGVtZW50TmFtZSA9IGdldFdTRExQYXJ0TmFtZSgpOwotCQl9Ci0KLQkJcmV0dXJuIG5ld1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExNZXNzYWdlTmFtZSgpIHsKLQkJaWYgKG5ld1dTRExNZXNzYWdlTmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCQluZXdXU0RMTWVzc2FnZU5hbWU9IE5hbWVVdGlsLmdldE1lc3NhZ2VOYW1lKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMTWVzc2FnZU5hbWU7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRXU0RMUGFydE5hbWUoKSB7Ci0JCWlmIChuZXdXU0RMUGFydE5hbWUgPT0gbnVsbCkgewotCQkJbmV3V1NETFBhcnROYW1lICA9IE5hbWVVdGlsLmdldFBhcnROYW1lKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSk7CQkJCi0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMUGFydE5hbWU7Ci0JfQotCi0JcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjcmVhdGVQYXJ0RWxlbWVudFNlcUVsZW1lbnRQYXR0ZXJuKFBhcnQgcGFydCwgWFNERWxlbWVudERlY2xhcmF0aW9uIHBhcnRFbGVtZW50KSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiByZXR1cm5lZFhTREVsZW1lbnQgPSBudWxsOwotCi0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiBvcmlnaW5hbEVsZW1lbnQgPSBudWxsOwotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gYW5vblhTREVsZW1lbnQgPSBudWxsOwotCi0JCS8vIENyZWF0ZSB0aGUgWFNERWxlbWVudCAoYW5vbnltb3VzKSByZWZlcmVuY2VkIGJ5IHRoZSBQYXJ0IGlmIG5lY2Vzc2FyeQotCQlpZiAocGFydEVsZW1lbnQgPT0gbnVsbCB8fCBwYXJ0RWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpID09IG51bGwpIHsKLQkJCS8vRmluZCBhbiBleGlzdGluZyBYU0RFbGVtZW50IHRvIHVzZSBpZiBwb3NzaWJsZQotCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGV4aXN0aW5nRWxlbWVudCA9IG51bGw7Ci0JCQlTdHJpbmcgaWRlYWxFbGVtZW50TmFtZSA9IGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpOwotCQkJWFNEU2NoZW1hIHNjaGVtYSA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RTY2hlbWEocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0JCQkJSXRlcmF0b3IgaXQgPSBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGV4aXN0aW5nRWxlbWVudCA9PSBudWxsICYmIGl0Lmhhc05leHQoKSkgewotCQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gaXRlbSA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGl0Lm5leHQoKTsKLQkJCQkJaWYgKGl0ZW0uZ2V0TmFtZSgpLmVxdWFscyhpZGVhbEVsZW1lbnROYW1lKSkgewotCQkJCQkJLy8gZm91bmQgYW4gZWxlbWVudCB3ZSBjYW4gdXNlLiAgQ29uZmlybSBpdCBoYXMgYSBkb2MtbGl0LXdyYXBwZWQgcGF0dGVybgotCQkJCQkJLy8gU2VlIGlmIHRoZSBYU0QgRWxlbWVudCBoYXMgYW4gYW5vbnltb3VzIHR5cGUgd2l0aCBhIHNlcXVlbmNlIGFuZCBhbiBYU0QgRWxlbWVudAotCQkJCQkJZXhpc3RpbmdFbGVtZW50ID0gaXRlbTsKLQotCQkJCQkJWFNEVHlwZURlZmluaXRpb24geHNkVHlwZSA9IGl0ZW0uZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKTsKLQkJCQkJCWlmICh4c2RUeXBlICE9IG51bGwpIHsKLQkJCQkJCQlMaXN0IGNvbnRlbnRzID0geHNkVHlwZS5lQ29udGVudHMoKTsKLQkJCQkJCQlpZiAoY29udGVudHMuc2l6ZSgpID4gMCAmJiBjb250ZW50cy5nZXQoMCkgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJCQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgY29udGVudHMuZ2V0KDApOwotCQkJCQkJCQlMaXN0IHBhcnRpY2xlQ29udGVudHMgPSBwYXJ0aWNsZS5lQ29udGVudHMoKTsKLQkJCQkJCQkJaWYgKHBhcnRpY2xlQ29udGVudHMuc2l6ZSgpID4gMCAmJiBwYXJ0aWNsZUNvbnRlbnRzLmdldCgwKSBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJCQkJCQkJCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJ0aWNsZUNvbnRlbnRzLmdldCgwKTsKLQkJCQkJCQkJCUxpc3QgbW9kZWxDb250ZW50cyA9IG1vZGVsR3JvdXAuZUNvbnRlbnRzKCk7Ci0JCQkJCQkJCQlpZiAobW9kZWxDb250ZW50cy5zaXplKCkgPiAwICYmIG1vZGVsQ29udGVudHMuZ2V0KDApIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQkJCQkJCQlYU0RQYXJ0aWNsZSBpbm5lclBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBtb2RlbENvbnRlbnRzLmdldCgwKTsKLQkJCQkJCQkJCQlMaXN0IGlubmVyQ29udGVudHMgPSBpbm5lclBhcnRpY2xlLmVDb250ZW50cygpOwotCQkJCQkJCQkJCWlmIChpbm5lckNvbnRlbnRzLnNpemUoKSA+IDAgJiYgaW5uZXJDb250ZW50cy5nZXQoMCkgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCQkJCQkJCQkJLy8gaW5uZXIgWFNEIEVsZW1lbnQgZXhpc3RzCi0JCQkJCQkJCQkJCS8vIHJldXNlIGV4aXN0aW5nIGVsZW1lbnQKLQkJCQkJCQkJCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgZXhpc3RpbmdFbGVtZW50KTsKLQkJCQkJCQkJCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIHByZWZpeGVkTmFtZSk7Ci0JCQkJCQkJCQkJCXJldHVybiBleGlzdGluZ0VsZW1lbnQ7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoZXhpc3RpbmdFbGVtZW50ID09IG51bGwpIHsKLQkJCQlhbm9uWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVBbm9ueW1vdXNYU0RFbGVtZW50RGVmaW5pdGlvbihnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKSwgcGFydCk7Ci0vLwkJCQlwYXJ0LnNldEVsZW1lbnREZWNsYXJhdGlvbihhbm9uWFNERWxlbWVudCk7Ci0JCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgYW5vblhTREVsZW1lbnQpOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIGZhbHNlLCBwcmVmaXhlZE5hbWUpOwotCQkJCXBhcnQuc2V0VHlwZURlZmluaXRpb24obnVsbCk7Ci0KLQkJCQlpZiAocGFydEVsZW1lbnQgIT0gbnVsbCAmJiBwYXJ0RWxlbWVudC5nZXRTY2hlbWEoKSAhPSBudWxsKSB7Ci0JCQkJCW9yaWdpbmFsRWxlbWVudCA9IHBhcnRFbGVtZW50OwotCQkJCQkvLyBSZW1vdmUgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBhcyBhIEdsb2JhbCBFbGVtZW50Ci0JCQkJCXBhcnRFbGVtZW50LmdldFNjaGVtYSgpLmdldENvbnRlbnRzKCkucmVtb3ZlKHBhcnRFbGVtZW50KTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhbm9uWFNERWxlbWVudCA9IGV4aXN0aW5nRWxlbWVudDsKLQkJCQkvLyByZXVzZSBleGlzdGluZyBlbGVtZW50Ci0JCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgZXhpc3RpbmdFbGVtZW50KTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCBmYWxzZSwgcHJlZml4ZWROYW1lKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWFub25YU0RFbGVtZW50ID0gcGFydEVsZW1lbnQ7Ci0JCX0KLQotCQkvLyBDcmVhdGUgYSBuZXcgWFNERWxlbWVudAotCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNETW9kZWxHcm91cChhbm9uWFNERWxlbWVudCwgcGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQlyZXR1cm5lZFhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChudWxsLCBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSwgbW9kZWxHcm91cCk7Ci0KLQkJLy8gQWRkIHRoZSBuZXdseSBjcmVhdGVkIFhTREVsZW1lbnQgdG8gdGhlIE1vZGVsR3JvdXAKLQkJWFNEQ29tcG9uZW50SGVscGVyLmFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIHJldHVybmVkWFNERWxlbWVudCk7Ci0KLQkJLy8gQWRkIHRoZSAnb3JpZ2luYWwnIFhTREVsZW1lbnQgaWYgaXQncyB0eXBlIHdhc24ndCBhbm9ueW1vdXMKLQkJaWYgKG9yaWdpbmFsRWxlbWVudCAhPSBudWxsKSB7Ci0JCQlYU0RDb21wb25lbnRIZWxwZXIuYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChhbm9uWFNERWxlbWVudCwgb3JpZ2luYWxFbGVtZW50KTsKLQkJfQotCQlmb3JtYXRDaGlsZChhbm9uWFNERWxlbWVudC5nZXRFbGVtZW50KCkpOwotCQlyZXR1cm4gcmV0dXJuZWRYU0RFbGVtZW50OwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBnZXRJZGVhbE1lc3NhZ2VOYW1lKE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZikgewkgICAgCi0JCVN0cmluZyBtZXNzYWdlTmFtZSA9ICJOZXdNZXNzYWdlIjsgLy8kTk9OLU5MUy0xJAotCQltZXNzYWdlTmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCkgKyAiUmVxdWVzdCI7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCXJldHVybiBtZXNzYWdlTmFtZTsKLQl9Ci0JCi0JcHVibGljIE1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIHsKLQkJcmV0dXJuIGlucHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkTWVzc2FnZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkTWVzc2FnZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdiZGEwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE1lc3NhZ2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuU21hcnRSZW5hbWVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZE1lc3NhZ2VDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgTWVzc2FnZSBtZXNzYWdlOwotICBwcml2YXRlIE1lc3NhZ2Ugb3JpZ2luYWxNZXNzYWdlOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZVBhcnQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9QQVJUX05BTUUgPSAiTmV3UGFydCI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBBZGRNZXNzYWdlQ29tbWFuZAotICAJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotICAJIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgQWRkTWVzc2FnZUNvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgCi0JCSBTdHJpbmcgbG9jYWxOYW1lLAotCQkgYm9vbGVhbiBjcmVhdGVQYXJ0KQotCXsKLQkgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLQkgIHRoaXMuY3JlYXRlUGFydCA9IGNyZWF0ZVBhcnQ7Ci0JfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB0byBjcmVhdGUgYSBNZXNzYWdlIGJhc2VkIG9uIHRoZSBnaXZlbiBNZXNzYWdlLiAgSW4gZXNzZW5jZSwgdGhpcyB3aWxsCi0gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIE1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQWRkTWVzc2FnZUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBNZXNzYWdlIG9yaWdpbmFsTWVzc2FnZSwgU3RyaW5nIGxvY2FsTmFtZSwgYm9vbGVhbiBjb3B5UGFydCkgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JdGhpcy5jcmVhdGVQYXJ0ID0gY29weVBhcnQ7Ci0gIAl0aGlzLm9yaWdpbmFsTWVzc2FnZSA9IG9yaWdpbmFsTWVzc2FnZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIG1lc3NhZ2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIG1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksbG9jYWxOYW1lKSk7Ci0gICAgbWVzc2FnZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkTWVzc2FnZShtZXNzYWdlKTsKLSAgICAKLSAgICBpZiAob3JpZ2luYWxNZXNzYWdlID09IG51bGwpIHsKLSAgICAJaWYgKGNyZWF0ZVBhcnQpCi0gICAgCXsKLSAgICAJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSAKLSAgICAJCQluZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSxERUZBVUxUX1BBUlRfTkFNRSxXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCJzdHJpbmciLHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgCQljb21tYW5kLnJ1bigpOwotICAgIAl9Ci0gICAgfQotICAgIGVsc2UgewotICAgIAlpZiAob3JpZ2luYWxNZXNzYWdlLmdldEVQYXJ0cygpICE9IG51bGwpIHsKLSAgICAJCUl0ZXJhdG9yIGl0ID0gb3JpZ2luYWxNZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgCQkKLSAgICAJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAJCQlQYXJ0IHBhcnQgPSAoUGFydCkgaXQubmV4dCgpOwotICAgIAkJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQ7Ci0gICAgCQkJaWYgKFNtYXJ0UmVuYW1lQWN0aW9uLmlzUGFydE5hbWVHZW5lcmF0ZWQocGFydC5nZXROYW1lKCksIG9yaWdpbmFsTWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKSkKLSAgICAJCQkJY29tbWFuZCA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBwYXJ0LCBOYW1lVXRpbC5idWlsZFVuaXF1ZVBhcnROYW1lKG1lc3NhZ2UsIG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSkpOwkKLSAgICAJCQllbHNlCi0gICAgCQkJCWNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydCwgcGFydC5nZXROYW1lKCkpOwotICAgIAkJCQotICAgIAkJCQotICAgIAkJCWNvbW1hbmQucnVuKCk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMb2NhbE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmxvY2FsTmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTkzOWY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLQotYWJzdHJhY3QgcHVibGljIGNsYXNzIEFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZTsKLSAgcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0gIHByb3RlY3RlZCBib29sZWFuIGNyZWF0ZU1lc3NhZ2UgPSBmYWxzZTsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9NRVNTQUdFX05BTUUgPSAiTmV3TWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gY3JlYXRlTWVzc2FnZSkKLSAgewotICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5jcmVhdGVNZXNzYWdlID0gY3JlYXRlTWVzc2FnZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZU1lc3NhZ2UoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gCi0gICAgICBuZXcgQWRkTWVzc2FnZUNvbW1hbmQoZGVmaW5pdGlvbixERUZBVUxUX01FU1NBR0VfTkFNRSxjcmVhdGVNZXNzYWdlKTsgICAgICAKLSAgICBjb21tYW5kLnJ1bigpOwotICAgIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpKTsKLSAgfQotICAKLSAgLyoKLSAgICogT3ZlcmxvYWRlZCBjcmVhdGVNZXNzYWdlKGFyZykgbWV0aG9kLiAgU2ltaWxhciB0byB0byBjcmVhdGVNZXNzYWdlKCkgYnV0IHRha2VzIGluIGEgTWVzc2FnZVJlZmVyZW5jZS4KLSAgICogTWV0aG9kIHVzZWQgdG8gY3JlYXRlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgTWVzc2FnZSAoY29udGFpbmVkIGluIHRoZSBwYXNzZWQgaW4gTWVzc2FnZVJlZmVyZW5jZSkuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVNZXNzYWdlKE1lc3NhZ2VSZWZlcmVuY2Ugb3JpZ2luYWxNUmVmLCBTdHJpbmcgbmV3TWVzc2FnZVJlZk5hbWUpIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIE1lc3NhZ2UgdE1lc3NhZ2UgPSBvcmlnaW5hbE1SZWYuZ2V0RU1lc3NhZ2UoKTsKLSAgICBBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gCi0gICAgICBuZXcgQWRkTWVzc2FnZUNvbW1hbmQoZGVmaW5pdGlvbiwgdE1lc3NhZ2UsIG5ld01lc3NhZ2VSZWZOYW1lLCB0cnVlKTsKLSAgICBjb21tYW5kLnJ1bigpOwotICAgIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpKTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlUmVmZXJlbmNlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPcGVyYXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE9wZXJhdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVmNzBkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE9wZXJhdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZE9wZXJhdGlvbkNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBQb3J0VHlwZSBwb3J0VHlwZTsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgcHJpdmF0ZSBPcGVyYXRpb24gb3BlcmF0aW9uOwotICBwcml2YXRlIE9wZXJhdGlvbiBvcmlnaW5hbE9wZXJhdGlvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGNvcHlJbk91dEZhdWx0OwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUlucHV0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUZhdWx0ID0gZmFsc2U7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX0lOUFVUX05BTUUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX09VVFBVVF9OQU1FID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9GQVVMVF9OQU1FID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBBZGRPcGVyYXRpb25Db21tYW5kCi0JCShQb3J0VHlwZSBwb3J0VHlwZSwgIAotCQkgU3RyaW5nIG5hbWUpCi0JewotCSAgdGhpcy5wb3J0VHlwZSA9IHBvcnRUeXBlOwotCSAgdGhpcy5uYW1lID0gbmFtZTsKLQl9Ci0gIAotICBwdWJsaWMgQWRkT3BlcmF0aW9uQ29tbWFuZAotCQkoUG9ydFR5cGUgcG9ydFR5cGUsICAKLQkJIFN0cmluZyBuYW1lLAotCQkgYm9vbGVhbiBjcmVhdGVJbnB1dCwKLQkJIGJvb2xlYW4gY3JlYXRlT3V0cHV0LAotCQkgYm9vbGVhbiBjcmVhdGVGYXVsdCkKLQl7Ci0JICB0aGlzLnBvcnRUeXBlID0gcG9ydFR5cGU7Ci0JICB0aGlzLm5hbWUgPSBuYW1lOwotCSAgdGhpcy5jcmVhdGVJbnB1dCA9IGNyZWF0ZUlucHV0OwotCSAgdGhpcy5jcmVhdGVPdXRwdXQgPSBjcmVhdGVPdXRwdXQ7Ci0JICB0aGlzLmNyZWF0ZUZhdWx0ID0gY3JlYXRlRmF1bHQ7Ci0JfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB0byBjcmVhdGUgYW4gT3BlcmF0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiBPcGVyYXRpb24uICBJbiBlc3NlbmNlLCB0aGlzIHdpbGwKLSAgICogY3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gT3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEFkZE9wZXJhdGlvbkNvbW1hbmQoUG9ydFR5cGUgcG9ydFR5cGUsIE9wZXJhdGlvbiBvcmlnaW5hbE9wZXJhdGlvbiwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gY29weUluT3V0RmF1bHQpIHsKLSAgCXRoaXMucG9ydFR5cGUgPSBwb3J0VHlwZTsKLSAgCXRoaXMub3JpZ2luYWxPcGVyYXRpb24gPSBvcmlnaW5hbE9wZXJhdGlvbjsKLSAgCXRoaXMubmFtZSA9IG5hbWU7Ci0gIAl0aGlzLmNvcHlJbk91dEZhdWx0ID0gY29weUluT3V0RmF1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBvcGVyYXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3BlcmF0aW9uKCk7Ci0gICAgb3BlcmF0aW9uLnNldE5hbWUobmFtZSk7Ci0gICAgb3BlcmF0aW9uLnNldEVuY2xvc2luZ0RlZmluaXRpb24ocG9ydFR5cGUuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBwb3J0VHlwZS5hZGRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLQotICAgIGlmIChvcmlnaW5hbE9wZXJhdGlvbiA9PSBudWxsKSB7ICAgIAotICAgIAlXU0RMRWxlbWVudENvbW1hbmQgY29tbWFuZCA9IG51bGw7Ci0gICAgCWlmIChjcmVhdGVJbnB1dCkKLSAgICAJewotICAgIAkJY29tbWFuZCA9IG5ldyBBZGRJbnB1dENvbW1hbmQob3BlcmF0aW9uLERFRkFVTFRfSU5QVVRfTkFNRSx0cnVlKTsKLSAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgCX0KLSAgICAKLSAgICAJaWYgKGNyZWF0ZU91dHB1dCkKLSAgICAJewotICAgIAkJY29tbWFuZCA9IG5ldyBBZGRPdXRwdXRDb21tYW5kKG9wZXJhdGlvbixERUZBVUxUX09VVFBVVF9OQU1FLHRydWUpOwotICAgIAkJY29tbWFuZC5ydW4oKTsKLSAgICAJfQotICAgIAotICAgIAlpZiAoY3JlYXRlRmF1bHQpCi0gICAgCXsKLSAgICAJCWNvbW1hbmQgPSBuZXcgQWRkRmF1bHRDb21tYW5kKG9wZXJhdGlvbixERUZBVUxUX0ZBVUxUX05BTUUsdHJ1ZSk7Ci0gICAgCQljb21tYW5kLnJ1bigpOwotICAgIAl9Ci0gICAgfQotICAgIGVsc2UgewotICAgIAkvLyBEbyBuZWNlc3NhcnkgY29weWluZyBvZiBkYXRhIGZyb20gb3JpZ2luYWwgb3BlcmF0aW9uIHRvIG5ldyBvcGVyYXRpb24KLSAgICAJLy8gUGFyYW1hdGVyIG9yZGVyaW5nPyBEb2N1bWVudGF0aW9uPyAgVGhpcyBwYXJ0IHN0aWxsIG5lZWRzIHRvIGJlIHdvcmtlZCBvbiAgICAJCi0gICAgCS8vIENvcHkgJ2tpZHMnIGlmIG5lY2Vzc2FyeQotICAgIAlpZiAoY29weUluT3V0RmF1bHQpIHsKLSAgICAJCVdTRExFbGVtZW50Q29tbWFuZCBjb21tYW5kID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIAlpZiAob3JpZ2luYWxPcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJT3V0cHV0IG91dHB1dCA9IG9yaWdpbmFsT3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICAgICAgCQljb21tYW5kID0gbmV3IEFkZE91dHB1dENvbW1hbmQob3BlcmF0aW9uLCBvdXRwdXQsIE5hbWVVdGlsLmJ1aWxkVW5pcXVlT3V0cHV0TmFtZShwb3J0VHlwZSwgb3BlcmF0aW9uLmdldE5hbWUoKSwgIiIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgICAgIAl9Ci0gICAgICAgIAkKLSAgICAgICAgCWlmIChvcmlnaW5hbE9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKQotICAgICAgICAJewotICAgICAgICAJCUlucHV0IGlucHV0ID0gb3JpZ2luYWxPcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgICAgIAkJY29tbWFuZCA9IG5ldyBBZGRJbnB1dENvbW1hbmQob3BlcmF0aW9uLCBpbnB1dCwgTmFtZVV0aWwuYnVpbGRVbmlxdWVJbnB1dE5hbWUocG9ydFR5cGUsIG9wZXJhdGlvbi5nZXROYW1lKCksICIiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCQljb21tYW5kLnJ1bigpOwotICAgICAgICAJfQotICAgICAgICAKLSAgICAgICAgCWlmIChvcmlnaW5hbE9wZXJhdGlvbi5nZXRFRmF1bHRzKCkgIT0gbnVsbCkKLSAgICAgICAgCXsKLSAgICAgICAgCQlJdGVyYXRvciBpdCA9IG9yaWdpbmFsT3BlcmF0aW9uLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOwotICAgICAgICAJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgICAgCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGl0Lm5leHQoKTsKLSAgICAgICAgCQkJY29tbWFuZCA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLCBmYXVsdCwgTmFtZVV0aWwuYnVpbGRVbmlxdWVGYXVsdE5hbWUob3JpZ2luYWxPcGVyYXRpb24sIGZhdWx0LmdldE5hbWUoKSkpOwotICAgICAgICAJCQljb21tYW5kLnJ1bigpOwotICAgICAgICAJCX0KLSAgICAgICAgCX0KLSAgICAJCQotICAgIAl9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ODExZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlNtYXJ0UmVuYW1lQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZE91dHB1dENvbW1hbmQgZXh0ZW5kcyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZAotewotICBwcml2YXRlIE91dHB1dCBvcmlnaW5hbE91dHB1dDsKLSAgCi0gIHB1YmxpYyBBZGRPdXRwdXRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUpOwotICB9Ci0KLSAgcHVibGljIEFkZE91dHB1dENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gY3JlYXRlTWVzc2FnZSkKLSAgewotICAgIHN1cGVyKG9wZXJhdGlvbixuYW1lLGNyZWF0ZU1lc3NhZ2UpOwotICB9Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHRvIGNyZWF0ZSBhbiBPdXRwdXQgYmFzZWQgb24gdGhlIGdpdmVuIE91dHB1dC4gIEluIGVzc2VuY2UsIHRoaXMgd2lsbAotICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBPdXRwdXQuCi0gICAqLwotICBwdWJsaWMgQWRkT3V0cHV0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBPdXRwdXQgb3JpZ2luYWxPdXRwdXQsIFN0cmluZyBuYW1lKSB7Ci0gIAlzdXBlcihvcGVyYXRpb24sIG5hbWUsIGZhbHNlKTsKLSAgCQotICAJdGhpcy5vcmlnaW5hbE91dHB1dCA9IG9yaWdpbmFsT3V0cHV0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLS8vICAgIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0TmFtZShuYW1lKTsKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldEVuY2xvc2luZ0RlZmluaXRpb24ob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgb3BlcmF0aW9uLnNldE91dHB1dCgoT3V0cHV0KW1lc3NhZ2VSZWZlcmVuY2UpOwotICAgIAotICAgIC8vICBUQkQgLSBhZGQgYmluZGluZyBvdXRwdXQgCi0gICAgCi0gICAgaWYgKG9yaWdpbmFsT3V0cHV0ID09IG51bGwpIHsKLSAgICAJaWYgKGNyZWF0ZU1lc3NhZ2UpCi0gICAgCQljcmVhdGVNZXNzYWdlKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAkvLyBEbyBuZWNlc3NhcnkgY29weWluZyBvZiBkYXRhIGZyb20gb3JpZ2luYWwgT3V0cHV0IHRvIG5ldyBPdXRwdXQKLSAgICAJaWYgKG9yaWdpbmFsT3V0cHV0LmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotICAgIAkJU3RyaW5nIG9yaWdpbmFsTXNnTmFtZSA9IG9yaWdpbmFsT3V0cHV0LmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCi0JCWJvb2xlYW4gZ2VuZWQgPSBmYWxzZTsKLQkJaWYgKG9yaWdpbmFsT3V0cHV0LmVDb250YWluZXIoKSBpbnN0YW5jZW9mIE9wZXJhdGlvbikKLQkJCWdlbmVkID0gU21hcnRSZW5hbWVBY3Rpb24uaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvcmlnaW5hbE1zZ05hbWUsICgoT3BlcmF0aW9uKSBvcmlnaW5hbE91dHB1dC5lQ29udGFpbmVyKCkpLmdldE5hbWUoKSwgIlJlc3BvbnNlIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCVN0cmluZyBuZXdNc2dOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGdlbmVkKSB7Ci0JCQluZXdNc2dOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBtZXNzYWdlUmVmZXJlbmNlKTsKLQkJfQotCQllbHNlIHsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0JCQlNZXNzYWdlIHRNZXNzYWdlID0gb3JpZ2luYWxPdXRwdXQuZ2V0RU1lc3NhZ2UoKTsKLQkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sIHRNZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCQl9Ci0JCQotICAgIAljcmVhdGVNZXNzYWdlKG9yaWdpbmFsT3V0cHV0LCBuZXdNc2dOYW1lKTsKLSAgICAJfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA4NWJmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgewotCXByaXZhdGUgT3V0cHV0IG91dHB1dDsKLQkKLQlwdWJsaWMgQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBpbnQgc3R5bGUpIHsKLQkJc3VwZXIob3BlcmF0aW9uLCBzdHlsZSk7Ci0JfQotCQotCS8qCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlQYXJ0IHBhcnQgPSBudWxsOwotCQlpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0JCQlvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotCQkJcGFydCA9IGNyZWF0ZVdTRExDb21wb25lbnRzKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkpOwotCQl9Ci0JCWVsc2UgewotCQkJQWRkT3V0cHV0Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE91dHB1dENvbW1hbmQob3BlcmF0aW9uLCBudWxsKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlvdXRwdXQgPSAoT3V0cHV0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQlwYXJ0ID0gY3JlYXRlV1NETENvbXBvbmVudHMob3V0cHV0KTsKLQkJfQotCQkKLQkJbmV3UGFydCA9IHBhcnQ7Ci0JCS8vIENyZWF0ZSBuZWNlc3NhcnkgWFNEIE9iamVjdHMgc3RhcnRpbmcgd2l0aCB0aGUgUGFydCByZWZlcmVuY2UKLQkJbmV3WFNERWxlbWVudCA9IGNyZWF0ZVhTRE9iamVjdHMocGFydCk7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCkgewotCQlpZiAobmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPT0gbnVsbCkgewotCQkJaWYgKHRoaXMuc3R5bGUgPT0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQkJbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpICsgIlJlc3BvbnNlIjsgLy8kTk9OLU5MUy0xJDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCW5ld0Fub255bW91c1hTREVsZW1lbnROYW1lID0gZ2V0V1NETFBhcnROYW1lKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdYU0RFbGVtZW50TmFtZSA9ICJvdXQiOyAvLyROT04tTkxTLTEkCi0vLwkJCW5ld1hTREVsZW1lbnROYW1lID0gZ2V0V1NETFBhcnROYW1lKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdYU0RFbGVtZW50TmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRXU0RMTWVzc2FnZU5hbWUoKSB7Ci0JCWlmIChuZXdXU0RMTWVzc2FnZU5hbWUgPT0gbnVsbCkgewotCQkJaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotCQkJCW5ld1dTRExNZXNzYWdlTmFtZT0gTmFtZVV0aWwuZ2V0TWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMTWVzc2FnZU5hbWU7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRXU0RMUGFydE5hbWUoKSB7Ci0JCWlmIChuZXdXU0RMUGFydE5hbWUgPT0gbnVsbCkgewotCQkJbmV3V1NETFBhcnROYW1lICA9IE5hbWVVdGlsLmdldFBhcnROYW1lKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkpOwkJCQotCQl9Ci0JCQotCQlyZXR1cm4gbmV3V1NETFBhcnROYW1lOwotCX0KLQkKLQlwdWJsaWMgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkgewotCQlyZXR1cm4gb3V0cHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUGFydENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUGFydENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5MDhhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBhcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZFBhcnRDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgTWVzc2FnZSBtZXNzYWdlOwotICBwcml2YXRlIFN0cmluZyBuYW1lOwotICBwcml2YXRlIFBhcnQgcGFydDsKLSAgcHJpdmF0ZSBQYXJ0IG9yaWdpbmFsUGFydDsKLSAgCi0gIHByaXZhdGUgUU5hbWUgdHlwZU9yRWxlbWVudE5hbWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB1c2VUeXBlID0gdHJ1ZTsKLQotICBwdWJsaWMgQWRkUGFydENvbW1hbmQKLQkJKE1lc3NhZ2UgbWVzc2FnZSwKLQkJIFN0cmluZyBuYW1lKQotCXsKLQkgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0JICB0aGlzLm5hbWUgPSBuYW1lOwotCX0KLSAgCi0gIHB1YmxpYyBBZGRQYXJ0Q29tbWFuZAotCQkoTWVzc2FnZSBtZXNzYWdlLAotCQkgU3RyaW5nIG5hbWUsCi0JCSBTdHJpbmcgbmFtZXNwYWNlLAotCQkgU3RyaW5nIGxvY2FsTmFtZSwKLQkJIGJvb2xlYW4gdXNlVHlwZSkKLQl7Ci0JICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotCSAgdGhpcy5uYW1lID0gbmFtZTsKLQkgIHRoaXMudXNlVHlwZSA9IHVzZVR5cGU7Ci0JICB0eXBlT3JFbGVtZW50TmFtZSA9IG5ldyBRTmFtZShuYW1lc3BhY2UsbG9jYWxOYW1lKTsKLQl9Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHRvIGNyZWF0ZSBhIFBhcnQgYmFzZWQgb24gdGhlIGdpdmVuIFBhcnQuICBJbiBlc3NlbmNlLCB0aGlzIHdpbGwKLSAgICogY3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gUGFydC4KLSAgICovCi0gIHB1YmxpYyBBZGRQYXJ0Q29tbWFuZAotCShNZXNzYWdlIG1lc3NhZ2UsCi0JIFBhcnQgb3JpZ2luYWxQYXJ0LAotCSBTdHJpbmcgbmFtZSkKLSAgewotICAJdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgCXRoaXMubmFtZSA9IG5hbWU7Ci0gIAl0aGlzLm9yaWdpbmFsUGFydCA9IG9yaWdpbmFsUGFydDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwdWJsaWMgQWRkUGFydENvbW1hbmQKLQkJKE1lc3NhZ2UgbWVzc2FnZSwKLQkJIFN0cmluZyBuYW1lLAotCQkgU3RyaW5nIG5hbWVzcGFjZSwKLQkJIFN0cmluZyBsb2NhbE5hbWUpCi0JewotCSAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JICB0eXBlT3JFbGVtZW50TmFtZSA9IG5ldyBRTmFtZShuYW1lc3BhY2UsbG9jYWxOYW1lKTsKLQl9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBwYXJ0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgaWYgKHR5cGVPckVsZW1lbnROYW1lID09IG51bGwpCi0gICAgICB0eXBlT3JFbGVtZW50TmFtZSA9IGNyZWF0ZURlZmF1bHRUeXBlTmFtZSgpOwotICAgIAotICAgIC8vIEFkZCBuYW1lc3BhY2UgdG8gdGhlIERlZmluaXRpb25zIGlmIGl0IGlzIG5vdCB0aGVyZSB5ZXQuCi0gICAgYWRkTmFtZXNwYWNlRGVjbGFyYXRpb24oKTsKLSAgICAKLSAgICBwYXJ0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhcnQoKTsKLSAgICBwYXJ0LnNldE5hbWUobmFtZSk7Ci0gICAgCi0gICAgaWYgKG9yaWdpbmFsUGFydCA9PSBudWxsKSB7Ci0gICAgCWlmICh1c2VUeXBlKQotICAgIAkJcGFydC5zZXRUeXBlTmFtZSh0eXBlT3JFbGVtZW50TmFtZSk7Ci0gICAgCWVsc2UKLSAgICAJCXBhcnQuc2V0RWxlbWVudE5hbWUodHlwZU9yRWxlbWVudE5hbWUpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJaWYgKG9yaWdpbmFsUGFydC5nZXRUeXBlTmFtZSgpICE9IG51bGwpCi0gICAgCQlwYXJ0LnNldFR5cGVOYW1lKG9yaWdpbmFsUGFydC5nZXRUeXBlTmFtZSgpKTsKLQotICAgIAlTdHJpbmcgbmV3RWxlbWVudE5hbWUgPSBudWxsOwotICAgIAlpZiAob3JpZ2luYWxQYXJ0LmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkgewotICAgIAkJCi0gICAgCQlib29sZWFuIGNyZWF0ZU5ld0VsZW1lbnQgPSB0cnVlOwotICAgIAkJaWYgKG9yaWdpbmFsUGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsICYmIG9yaWdpbmFsUGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRFbGVtZW50KCkgIT0gbnVsbCkgewotICAgICAgICAJCWlmICghKG9yaWdpbmFsUGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRFbGVtZW50KCkgaW5zdGFuY2VvZiBJRE9NTm9kZSkpIHsKLSAgICAgICAgCQkJY3JlYXRlTmV3RWxlbWVudCA9IGZhbHNlOwotICAgICAgICAJCX0gICAgICAgIAkJCi0gICAgCQl9Ci0gICAgCQkKLSAgICAJCWlmIChjcmVhdGVOZXdFbGVtZW50KSB7Ci0gICAgCQkJbmV3RWxlbWVudE5hbWUgPSBnZXROZXdOYW1lSGVscGVyKG5hbWUsIG9yaWdpbmFsUGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGZhbHNlKTsKLSAgICAJCQlwYXJ0LnNldEVsZW1lbnROYW1lKG5ldyBRTmFtZShvcmlnaW5hbFBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgbmV3RWxlbWVudE5hbWUpKTsKLQkKLSAgICAJCQlpZiAob3JpZ2luYWxQYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0gICAgCQkJCWlmIChuZXdFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0gICAgCQkJCQluZXdFbGVtZW50TmFtZSA9IGdldE5ld05hbWVIZWxwZXIobmFtZSwgb3JpZ2luYWxQYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgZmFsc2UpOwotICAgIAkJCQl9Ci0gICAgCQkKLSAgICAJCQkJQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZCBlbGVtZW50QWN0aW9uID0gbmV3IEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQob3JpZ2luYWxQYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgbmV3RWxlbWVudE5hbWUpOwotICAgIAkJCQllbGVtZW50QWN0aW9uLnJ1bigpOwotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJCWVsc2UgewotICAgIAkJCXBhcnQuc2V0RWxlbWVudE5hbWUobmV3IFFOYW1lKG9yaWdpbmFsUGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBvcmlnaW5hbFBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXRMb2NhbFBhcnQoKSkpOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICAgIAkKLSAgICBwYXJ0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obWVzc2FnZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICgoUGFydEltcGwpcGFydCkucmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7IAotICAgIG1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZE5hbWVzcGFjZURlY2xhcmF0aW9uKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG1lc3NhZ2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIGlmICghZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCkuY29udGFpbnNWYWx1ZSh0eXBlT3JFbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgewotICAgICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInAiLHR5cGVPckVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsgLy8kTk9OLU5MUy0xJAotLy8gICAgICAoKFdTRExFbGVtZW50SW1wbClkZWZpbml0aW9uKS51cGRhdGVFbGVtZW50KGZhbHNlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgUU5hbWUgY3JlYXRlRGVmYXVsdFR5cGVOYW1lKCkKLSAgewotICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsInN0cmluZyIpOyAvLyROT04tTkxTLTEkCi0gICAgcmV0dXJuIHFuYW1lOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXROZXdOYW1lSGVscGVyKFN0cmluZyBiYXNlLCBEZWZpbml0aW9uIGRlZiwgYm9vbGVhbiBpc1R5cGUpCi0gIHsgCi0gICAgU3RyaW5nIG5hbWUgPSBiYXNlOyAgICAKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgLy8gVWdseS4uLi4gIFJlZG8gdGhpcy4uLgotICAgIC8vIEdldCBhIGxpc3Qgb2YgRWxlbWVudHMuLi4KLSAgICBMaXN0IGVsZW1lbnRMaXN0ID0gbnVsbDsKLSAgICBpZiAoZGVmLmdldEVUeXBlcygpICE9IG51bGwpIHsKLSAgICAJTGlzdCB4c2RzTGlzdCA9IGRlZi5nZXRFVHlwZXMoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgCWlmICh4c2RzTGlzdCAhPSBudWxsKSB7Ci0gICAgCQlJdGVyYXRvciB4c2RzSXRlcmF0b3IgPSB4c2RzTGlzdC5pdGVyYXRvcigpOwotICAgIAkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgeHNkc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAJCVhTRFNjaGVtYSBzY2hlbWEgPSB4c2RFbGVtZW50LmdldFNjaGVtYSgpOwotICAgIAkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0gICAgCQkJZWxlbWVudExpc3QgPSBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICAgIAotICAgIGlmIChlbGVtZW50TGlzdCAhPSBudWxsKSB7Ci0gICAgCWludCBpbmRleCA9IDA7Ci0gICAgCXdoaWxlIChpbmRleCA8IGVsZW1lbnRMaXN0LnNpemUoKSkgewotICAgIAkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGVsZW1lbnRMaXN0LmdldChpbmRleCk7Ci0gICAgCQkKLSAgICAJCWlmIChuYW1lLmVxdWFscyhlbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpKSkgewotICAgIAkJCWNvdW50Kys7Ci0gICAgCQkJbmFtZSA9IG5hbWUgKyBjb3VudDsKLSAgICAJCQlpbmRleCA9IDA7Ci0gICAgCQl9Ci0gICAgCQllbHNlIHsKLSAgICAJCQlpbmRleCsrOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMyNjkwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBvcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRQb3J0Q29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIFNlcnZpY2Ugc2VydmljZTsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgcHJpdmF0ZSBQb3J0IHBvcnQ7Ci0gIAotICBwdWJsaWMgQWRkUG9ydENvbW1hbmQKLQkJKFNlcnZpY2Ugc2VydmljZSwKLQkJIFN0cmluZyBuYW1lKQotCXsKLQkgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7Ci0JICB0aGlzLm5hbWUgPSBuYW1lOwotCX0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHBvcnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgcG9ydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3J0KCk7Ci0gICAgcG9ydC5zZXROYW1lKG5hbWUpOwotICAgIHBvcnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihzZXJ2aWNlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgc2VydmljZS5hZGRQb3J0KHBvcnQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBvcnRUeXBlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQb3J0VHlwZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2ZmViNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBvcnRUeXBlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZFBvcnRUeXBlQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYWxOYW1lOwotICBwcml2YXRlIFBvcnRUeXBlIHBvcnRUeXBlOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZU9wZXJhdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX09QRVJBVElPTl9OQU1FID0gIk5ld09wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgQWRkUG9ydFR5cGVDb21tYW5kCi0JCShEZWZpbml0aW9uIGRlZmluaXRpb24sICAKLQkJIFN0cmluZyBsb2NhbE5hbWUpCi0JewotCSAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCX0KLQotICBwdWJsaWMgQWRkUG9ydFR5cGVDb21tYW5kCi0JCShEZWZpbml0aW9uIGRlZmluaXRpb24sIAotCQkgU3RyaW5nIGxvY2FsTmFtZSwKLQkJIGJvb2xlYW4gY3JlYXRlT3BlcmF0aW9uKQotCXsKLQkgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLQkgIHRoaXMuY3JlYXRlT3BlcmF0aW9uID0gY3JlYXRlT3BlcmF0aW9uOwotCX0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuV1NETEVsZW1lbnRBY3Rpb24jZ2V0V1NETEVsZW1lbnQoKQotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBwb3J0VHlwZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBwb3J0VHlwZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3J0VHlwZSgpOwotICAgIHBvcnRUeXBlLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLGxvY2FsTmFtZSkpOwotICAgIHBvcnRUeXBlLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgCi0gICAgaWYgKGNyZWF0ZU9wZXJhdGlvbikKLSAgICB7Ci0gICAgICBBZGRPcGVyYXRpb25Db21tYW5kIGNvbW1hbmQgPSAKLSAgICAgICAgbmV3IEFkZE9wZXJhdGlvbkNvbW1hbmQocG9ydFR5cGUsREVGQVVMVF9PUEVSQVRJT05fTkFNRSx0cnVlLHRydWUsZmFsc2UpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldExvY2FsTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGxvY2FsTmFtZSA9IG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkU2VydmljZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkU2VydmljZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1Y2YxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFNlcnZpY2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRTZXJ2aWNlQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYWxOYW1lOwotICBwcml2YXRlIFNlcnZpY2Ugc2VydmljZTsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVQb3J0ID0gZmFsc2U7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfUE9SVF9OQU1FID0gIk5ld1BvcnQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIEFkZFNlcnZpY2VDb21tYW5kCi0JCShEZWZpbml0aW9uIGRlZmluaXRpb24sICAKLQkJIFN0cmluZyBsb2NhbE5hbWUpCi0JewotCSAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCX0KLQotCXB1YmxpYyBBZGRTZXJ2aWNlQ29tbWFuZAotCQkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAKLQkJIFN0cmluZyBsb2NhbE5hbWUsCi0JCSBib29sZWFuIGNyZWF0ZVBvcnQpCi0JewotCSAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCSAgdGhpcy5jcmVhdGVQb3J0ID0gY3JlYXRlUG9ydDsKLQl9Ci0KLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHNlcnZpY2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2VydmljZSgpOwotICAgIHNlcnZpY2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksbG9jYWxOYW1lKSk7Ci0gICAgc2VydmljZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLSAgICAKLSAgICBpZiAoY3JlYXRlUG9ydCkKLSAgICB7Ci0gICAgICBBZGRQb3J0Q29tbWFuZCBjb21tYW5kID0gCi0gICAgICAgIG5ldyBBZGRQb3J0Q29tbWFuZChzZXJ2aWNlLERFRkFVTFRfUE9SVF9OQU1FKTsKLSAgICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRMb2NhbE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBsb2NhbE5hbWUgPSBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFR5cGVzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRUeXBlc0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg3ZTU4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFR5cGVzQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotLy8gRGVmaW5pdGlvbiBtdXN0IG5vdCBoYXZlICJ0eXBlcyIgZWxlbWVudCB0byBydW4gdGhpcyBjb21tYW5kLgotcHVibGljIGZpbmFsIGNsYXNzIEFkZFR5cGVzQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBUeXBlcyB0eXBlczsKLSAgCi0gIHB1YmxpYyBBZGRUeXBlc0NvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgCWlmICgodHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpKSAhPSBudWxsKQotICAgICAgcmV0dXJuOyAvLyAidHlwZXMiIGFscmVhZHkgZXhpc3RzLgotICAJCi0gICAgdHlwZXMgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHlwZXMoKTsKLSAgICB0eXBlcy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uc2V0VHlwZXModHlwZXMpOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHR5cGVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDQ4N2JjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudDsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlVVJJOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50OwotICBwcml2YXRlIE1hcCBwcm9wZXJ0aWVzOwotIAotICBwdWJsaWMgQWRkVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Q29tbWFuZAotICAgIChFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCwgCi0gICAgIFN0cmluZyBuYW1lc3BhY2VVUkksCi0gICAgIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2libGVFbGVtZW50ID0gZXh0ZW5zaWJsZUVsZW1lbnQ7Ci0gICAgdGhpcy5uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kCi0gICAgKEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50LCAKLSAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSwKLSAgICAgU3RyaW5nIGxvY2FsTmFtZSwKLSAgICAgTWFwIHByb3BlcnRpZXMpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2libGVFbGVtZW50ID0gZXh0ZW5zaWJsZUVsZW1lbnQ7Ci0gICAgdGhpcy5uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgCWV4dGVuc2liaWxpdHlFbGVtZW50ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAJZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RWxlbWVudFR5cGUobmV3IFFOYW1lKG5hbWVzcGFjZVVSSSxsb2NhbE5hbWUpKTsKLSAgCQotICAgIGlmIChwcm9wZXJ0aWVzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwcm9wZXJ0aWVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIE1hcC5FbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgCWVudHJ5ID0gKE1hcC5FbnRyeSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAJU3RyaW5nIGF0dHJpYnV0ZSA9IChTdHJpbmcpZW50cnkuZ2V0S2V5KCk7Ci0gICAgICAJU3RyaW5nIHZhbHVlID0gKFN0cmluZyllbnRyeS5nZXRWYWx1ZSgpOyAgICAgIAkKLSAgICAgIAkoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsdmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgCWV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgCWV4dGVuc2libGVFbGVtZW50LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxNGU2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci0KLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBYU0RFbGVtZW50RGVjbGFyYXRpb24gaW4gdGhlIHRhcmdldE5hbWVzcGFjZS4KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyB0YXJnZXROYW1lc3BhY2U7Ci0gIHByaXZhdGUgU3RyaW5nIGVsZW1lbnROYW1lOwotICBwcml2YXRlIFhTRFNjaGVtYSBzY2hlbWE7Ci0gIHByaXZhdGUgWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQ7Ci0gIAotICAvKioKLSAgICogVE9ETzoKLSAgICogV2UgaGF2ZSBhIHBvdGVudGlhbCBwcm9ibGVtIGhlcmUuLi4uICBXaGF0IGlmIHRoZSBkZWZpbml0aW9uIHRhcmdldG5hbWVzcGFjZSBpcyBudWxsLi4uLgotICAgKi8KLSAgcHVibGljIEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgZWxlbWVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMudGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICB0aGlzLmVsZW1lbnROYW1lID0gZWxlbWVudE5hbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKiBVc2UgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSkKLSAgICovCi0gIHB1YmxpYyBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kCi0gICAgKERlZmluaXRpb24gZGVmaW5pdGlvbiwgCi0gICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIAotICAgICBTdHJpbmcgZWxlbWVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMudGFyZ2V0TmFtZXNwYWNlID0gdGFyZ2V0TmFtZXNwYWNlOwotICAgIHRoaXMuZWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gZ2V0U2NoZW1hKCk7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsID0gCi0gICAgICBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICBlbGVtZW50RGVjbC5zZXROYW1lKGVsZW1lbnROYW1lKTsKLSAgICAKLSAgICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlRGVmaW5pdGlvbiA9IGdldFhTRFN0cmluZ1R5cGUoeHNkU2NoZW1hKTsKLSAgICBlbGVtZW50RGVjbC5zZXRUeXBlRGVmaW5pdGlvbihzaW1wbGVUeXBlRGVmaW5pdGlvbik7ICAgIAotICAgIHhzZFNjaGVtYS5nZXRDb250ZW50cygpLmFkZChlbGVtZW50RGVjbCk7Ci0gICAgCi0gICAgeHNkRWxlbWVudCA9IGVsZW1lbnREZWNsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oU3RyaW5nIG5ld0VsZW1lbnROYW1lKSB7Ci0gIAllbGVtZW50TmFtZSA9IG5ld0VsZW1lbnROYW1lOwotICAJcnVuKCk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFNwZWNpZnkgd2hpY2ggU2NoZW1hIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSBUeXBlLgotICAgKiBDYWxsIHRoaXMgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIHJ1bigpLiAgT3RoZXJ3aXNlIGl0IHdpbGwgdXNlIHRoZSBmaXJzdAotICAgKiBTY2hlbWEgaXQgZmluZHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoWFNEU2NoZW1hIHNjaGVtYSkgewotICAJdGhpcy5zY2hlbWEgPSBzY2hlbWE7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFJldHVybiB0aGUgU2NoZW1hIHVzZWQgdG8gY3JlYXRlIHRoZSBUeXBlCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hIGdldFNjaGVtYSgpIHsKLSAgCWlmIChzY2hlbWEgPT0gbnVsbCkgewotICAJCXJldHVybiBnZXRYU0RTY2hlbWEodGFyZ2V0TmFtZXNwYWNlKTsKLSAgCX0KLSAgCWVsc2UgewotICAJCXJldHVybiBzY2hlbWE7Ci0gIAl9Ci0gIH0KLSAgCi0gIHByaXZhdGUgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gZ2V0WFNEU3RyaW5nVHlwZShYU0RTY2hlbWEgc2NoZW1hKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYS5nZXRTY2hlbWFGb3JTY2hlbWEoKS5yZXNvbHZlU2ltcGxlVHlwZURlZmluaXRpb24oInN0cmluZyIpOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHByaXZhdGUgWFNEU2NoZW1hIGdldFhTRFNjaGVtYShTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYTsKLSAgICAKLSAgICAvLyBEbyB3ZSBoYXZlIGEgc2NoZW1hIGFscmVhZHk/Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRUeXBlcygpLmdldFNjaGVtYXModGFyZ2V0TmFtZXNwYWNlKS5pdGVyYXRvcigpOwotICAgIGlmIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgeHNkU2NoZW1hID0gKFhTRFNjaGVtYSlpdGVyYXRvci5uZXh0KCk7IC8vIEdldCB0aGUgZmlyc3Qgb25lLgotICAgICAgcmV0dXJuIHhzZFNjaGVtYTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsJICAgIAotICAgICAgLy8gQ3JlYXRlIGEgbmV3IHNjaGVtYSBiZWNhdXNlIHRoZXJlJ3Mgbm9uZS4KLSAgICAgIEFkZFhTRFNjaGVtYUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RTY2hlbWFDb21tYW5kKGRlZmluaXRpb24sdGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgICByZXR1cm4gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCljb21tYW5kLmdldFdTRExFbGVtZW50KCkpLmdldFNjaGVtYSgpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBUeXBlcyBnZXRUeXBlcygpCi0gIHsKLSAgICAvLyBUeXBlcyBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGV4aXN0IHlldC4KLSAgICBUeXBlcyB0eXBlcyA9IChUeXBlcylkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICByZXR1cm4gdHlwZXM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIEFkZFR5cGVzQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFR5cGVzQ29tbWFuZChkZWZpbml0aW9uKTsKLSAgICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgICByZXR1cm4gKFR5cGVzKWNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRYU0RFbGVtZW50KCkKLSAgewotCSAgcmV0dXJuIHhzZEVsZW1lbnQ7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTRFNjaGVtYUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEU2NoZW1hQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDc5MTY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEU2NoZW1hQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZFhTRFNjaGVtYUNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZTsKLSAgCi0gIHB1YmxpYyBBZGRYU0RTY2hlbWFDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICB9Ci0gIAotICBwdWJsaWMgQWRkWFNEU2NoZW1hQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMudGFyZ2V0TmFtZXNwYWNlID0gdGFyZ2V0TmFtZXNwYWNlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7ICAgIAotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEU2NoZW1hKCk7Ci0gICAgeHNkU2NoZW1hLnNldFNjaGVtYUZvclNjaGVtYVFOYW1lUHJlZml4KCJ4c2QiKTsgLy8kTk9OLU5MUy0xJAotICAgIHhzZFNjaGVtYS5zZXRUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAvLyBDaG9vc2UgdGhlIHByZWZpeCBDaG9vc2UgdGhlIHByZWZpeCB1c2VkIGZvciB0aGlzIHNjaGVtYSdzIG5hbWVzcGFjZSBhbmQgdGhlIHNjaGVtYSBmb3Igc2NoZW1hJ3MgbmFtZXNwYWNlLgotICAgIC8vICAgIAotICAgIGphdmEudXRpbC5NYXAgcU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcCA9IHhzZFNjaGVtYS5nZXRRTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwKCk7Ci0vLyAgICBxTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwLnB1dCgicCIsIHhzZFNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgcU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcC5wdXQKLQkgICh4c2RTY2hlbWEuZ2V0U2NoZW1hRm9yU2NoZW1hUU5hbWVQcmVmaXgoKSxvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldFNjaGVtYSh4c2RTY2hlbWEpOwotICAgICAgIAotICAgIC8vIFRCRCAtIENoZWNrIGlmIG11bHRpcGxlIHNjaGVtYXMgd2l0aCB0aGUgc2FtZSB0YXJnZXROYW1lc3BhY2UgY2FuIGNvLWV4aXN0LgotICAgIFR5cGVzIHR5cGVzID0gZ2V0VHlwZXMoKTsKLSAgICB0eXBlcy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgCi0gICAgaWYgKGRlZmluaXRpb24uZ2V0RVR5cGVzKCkgPT0gbnVsbCkgewotICAgIAlkZWZpbml0aW9uLnNldEVUeXBlcyh0eXBlcyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBUeXBlcyBnZXRUeXBlcygpCi0gIHsKLSAgICAvLyBUeXBlcyBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGV4aXN0LgotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKWRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIHJldHVybiB0eXBlczsKLSAgICBlbHNlCi0gICAgewotICAgICAgICB0eXBlcyA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUeXBlcygpOwotICAgICAgICB0eXBlcy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICByZXR1cm4gdHlwZXM7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuc2liaWxpdHlFbGVtZW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkN2NlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgWFNEVHlwZURlZmluaXRpb24gaW4gdGhlIHRhcmdldE5hbWVzcGFjZS4KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZTsKLSAgcHJpdmF0ZSBTdHJpbmcgdHlwZU5hbWU7Ci0gIHByaXZhdGUgWFNEU2NoZW1hIHNjaGVtYTsKLSAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiB4c2RUeXBlOwotICBwcml2YXRlIGJvb2xlYW4gaXNDb21wbGV4VHlwZSA9IHRydWU7Ci0gIAotICAvKioKLSAgICogVE9ETzoKLSAgICogV2UgaGF2ZSBhIHBvdGVudGlhbCBwcm9ibGVtIGhlcmUuLi4uICBXaGF0IGlmIHRoZSBkZWZpbml0aW9uIHRhcmdldG5hbWVzcGFjZSBpcyBudWxsLi4uLgotICAgKi8KLSAgcHVibGljIEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIHRoaXMudHlwZU5hbWUgPSB0eXBlTmFtZTsKLSAgfQotICAKLSAgcHVibGljIEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSwgYm9vbGVhbiBpc0NvbXBsZXhUeXBlKQotICB7Ci0gIAl0aGlzKGRlZmluaXRpb24sIHR5cGVOYW1lKTsKLSAgCXRoaXMuaXNDb21wbGV4VHlwZSA9IGlzQ29tcGxleFR5cGU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKiBVc2UgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKQotICAgKi8KLSAgcHVibGljIEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZAotICAgIChEZWZpbml0aW9uIGRlZmluaXRpb24sIAotICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLAotICAgICBTdHJpbmcgdHlwZU5hbWUpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMudGFyZ2V0TmFtZXNwYWNlID0gdGFyZ2V0TmFtZXNwYWNlOwotICAgIHRoaXMudHlwZU5hbWUgPSB0eXBlTmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBnZXRTY2hlbWEoKTsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmOwotICAgIAotICAgIGlmIChpc0NvbXBsZXhUeXBlKSB7Ci0gICAgCXR5cGVEZWYgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaXRpb24oKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCXR5cGVEZWYgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbigpOwotICAgIH0KLSAgICAKLSAgICB0eXBlRGVmLnNldE5hbWUodHlwZU5hbWUpOwotICAgIHhzZFNjaGVtYS5nZXRDb250ZW50cygpLmFkZCh0eXBlRGVmKTsKLSAgICAKLSAgICB4c2RUeXBlID0gdHlwZURlZjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKFN0cmluZyBuZXdUeXBlTmFtZSkgewotICAJdHlwZU5hbWUgPSBuZXdUeXBlTmFtZTsKLSAgCXJ1bigpOwotICB9Ci0gIAotICAvKgotICAgKiBTcGVjaWZpeSBpZiB3ZSBzaG91bGQgY3JlYXRlIGEgY29tcGxleCBvciBzaW1wbGUgdHlwZS4gIFRoaXMgc2hvdWxkIHNob3VsZCBiZQotICAgKiBjYWxsZWQgYmVmb3JlIHJ1bigpLgotICAgKiBPdmVycmlkZXMgdGhlIHZhbHVlIHNldCB3aGVuIHRoZSBjb25zdHJ1Y3RvcgotICAgKiBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdHlwZU5hbWUsIGJvb2xlYW4gaXNDb21wbGV4VHlwZSkKLSAgICogaXMgdXNlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGlzQ29tcGxleFR5cGUoYm9vbGVhbiBpc0NvbXBsZXhUeXBlKSB7Ci0gIAl0aGlzLmlzQ29tcGxleFR5cGUgPSBpc0NvbXBsZXhUeXBlOwotICB9Ci0gIAotICAvKgotICAgKiBTcGVjaWZ5IHdoaWNoIFNjaGVtYSB0byB1c2Ugd2hlbiBjcmVhdGluZyB0aGUgVHlwZS4KLSAgICogQ2FsbCB0aGlzIG1ldGhvZCBiZWZvcmUgY2FsbGluZyBydW4oKS4gIE90aGVyd2lzZSBpdCB3aWxsIHVzZSB0aGUgZmlyc3QKLSAgICogU2NoZW1hIGl0IGZpbmRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpIHsKLSAgCXRoaXMuc2NoZW1hID0gc2NoZW1hOwotICB9Ci0gIAotICAvKgotICAgKiBSZXR1cm4gdGhlIFNjaGVtYSB1c2VkIHRvIGNyZWF0ZSB0aGUgVHlwZQotICAgKi8KLSAgcHVibGljIFhTRFNjaGVtYSBnZXRTY2hlbWEoKSB7Ci0gIAlpZiAoc2NoZW1hID09IG51bGwpIHsKLSAgCQlyZXR1cm4gZ2V0WFNEU2NoZW1hKHRhcmdldE5hbWVzcGFjZSk7Ci0gIAl9Ci0gIAllbHNlIHsKLSAgCQlyZXR1cm4gc2NoZW1hOwotICAJfQotICB9Ci0KLSAgcHJpdmF0ZSBYU0RTY2hlbWEgZ2V0WFNEU2NoZW1hKFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hOwotICAgIAotICAgIC8vIERvIHdlIGhhdmUgYSBzY2hlbWEgYWxyZWFkeT8KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldFR5cGVzKCkuZ2V0U2NoZW1hcyh0YXJnZXROYW1lc3BhY2UpLml0ZXJhdG9yKCk7Ci0gICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICB4c2RTY2hlbWEgPSAoWFNEU2NoZW1hKWl0ZXJhdG9yLm5leHQoKTsgLy8gR2V0IHRoZSBmaXJzdCBvbmUuCi0gICAgICByZXR1cm4geHNkU2NoZW1hOwotICAgIH0KLSAgICBlbHNlCi0gICAgewkgICAgCi0gICAgICAvLyBDcmVhdGUgYSBuZXcgc2NoZW1hIGJlY2F1c2UgdGhlcmUncyBub25lLgotICAgICAgQWRkWFNEU2NoZW1hQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTRFNjaGVtYUNvbW1hbmQoZGVmaW5pdGlvbix0YXJnZXROYW1lc3BhY2UpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICAgIHJldHVybiAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KWNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKSkuZ2V0U2NoZW1hKCk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIC8vIFR5cGVzIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QgeWV0LgotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKWRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIHJldHVybiB0eXBlczsKLSAgICBlbHNlCi0gICAgewotICAgICAgQWRkVHlwZXNDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkVHlwZXNDb21tYW5kKGRlZmluaXRpb24pOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICAgIHJldHVybiAoVHlwZXMpY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgWFNEVHlwZURlZmluaXRpb24gZ2V0WFNERWxlbWVudCgpCi0gIHsKLQkgIHJldHVybiB4c2RUeXBlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9XU0RMRWxlbWVudENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvV1NETEVsZW1lbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMTgwNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9XU0RMRWxlbWVudENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHB1YmxpYyBhYnN0cmFjdCBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBydW4oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9BZGRyZXNzUG9ydE9wdGlvbnNQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvQWRkcmVzc1BvcnRPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjhmY2MyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9BZGRyZXNzUG9ydE9wdGlvbnNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5CYXNlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Db250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Qb3J0R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZTsKLQotcHVibGljIGNsYXNzIEFkZHJlc3NQb3J0T3B0aW9uc1BhZ2UgaW1wbGVtZW50cyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UsIE1vZGlmeUxpc3RlbmVyCi17Ci0gIHByb3RlY3RlZCBUZXh0IGFkZHJlc3NGaWVsZDsKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBjb250cm9sOwotICBwcm90ZWN0ZWQgUG9ydEdlbmVyYXRvciBnZW5lcmF0b3I7Ci0gIHByb3RlY3RlZCBXaXphcmRQYWdlIHdpemFyZFBhZ2U7Ci0KLSAgcHVibGljIHZvaWQgaW5pdChCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcil7Ci0JICBpZiAoZ2VuZXJhdG9yIGluc3RhbmNlb2YgUG9ydEdlbmVyYXRvcikgewotCQkgIHRoaXMuZ2VuZXJhdG9yID0gKFBvcnRHZW5lcmF0b3IpIGdlbmVyYXRvcjsJICAKLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2l6YXJkUGFnZShXaXphcmRQYWdlIHdpemFyZFBhZ2UpIHsKLQkgIHRoaXMud2l6YXJkUGFnZSA9IHdpemFyZFBhZ2U7Ci0gIH0KLQotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIGNvbnRyb2wgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgY29udHJvbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotICAgIExhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOwotICAgIEdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgc2VwYXJhdG9yLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgTGFiZWwgYWRkcmVzc0xhYmVsID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5OT05FKTsKLSAgICBhZGRyZXNzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfQUREUkVTUyArICI6Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRyZXNzRmllbGQgPSBuZXcgVGV4dChjb250cm9sLCBTV1QuQk9SREVSKTsKLSAgICBhZGRyZXNzRmllbGQuc2V0VGV4dChDb250ZW50R2VuZXJhdG9yLkFERFJFU1NfTE9DQVRJT04pOwotICAgIGFkZHJlc3NGaWVsZC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLSAgICBhZGRyZXNzRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0KLSAgICBnZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGFkZHJlc3NGaWVsZC5nZXRUZXh0KCkpOwotICAgIAotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVBcHBsaWNhYmxlKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgewotICAgIGdlbmVyYXRvci5zZXRBZGRyZXNzTG9jYXRpb24oYWRkcmVzc0ZpZWxkLmdldFRleHQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRPcHRpb25zT25HZW5lcmF0b3IoKSB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21wb3NpdGUgZ2V0Q29udHJvbCgpIHsKLQkgIHJldHVybiBjb250cm9sOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0Jhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9CYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMDU2MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0Jhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JTWVzc2FnZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lciwgSU1lc3NhZ2VQcm92aWRlciB7Ci0JcHJvdGVjdGVkIENvbXBvc2l0ZSBjb250cm9sOwotCXByb3RlY3RlZCBCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcjsKLQlwcm90ZWN0ZWQgV2l6YXJkUGFnZSB3aXphcmRQYWdlOwotCXByb3RlY3RlZCBJRmlsZSB0YXJnZXRGaWxlOwotCQotCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE9wdGlvbnNPbkdlbmVyYXRvcigpOwotCQotCXB1YmxpYyBDb21wb3NpdGUgZ2V0Q29udHJvbCgpIHsKLQkJcmV0dXJuIGNvbnRyb2w7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdChCYXNlR2VuZXJhdG9yIGJhc2VHZW5lcmF0b3IpIHsKLQkJZ2VuZXJhdG9yID0gYmFzZUdlbmVyYXRvcjsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUFwcGxpY2FibGUoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdpemFyZFBhZ2UoV2l6YXJkUGFnZSB3aXphcmRQYWdlKSB7Ci0JCXRoaXMud2l6YXJkUGFnZSA9IHdpemFyZFBhZ2U7Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQkJc2V0T3B0aW9uc09uR2VuZXJhdG9yKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFRhcmdldElGaWxlKElGaWxlIHRhcmdldEZpbGUpIHsKLQkJdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKLQl9Ci0JCi0gICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotICAgIAlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VUeXBlKCkgewotICAgIAlyZXR1cm4gSU1lc3NhZ2VQcm92aWRlci5OT05FOwotICAgIH0KLSAgICAKLQlwdWJsaWMgU3RyaW5nIGdldFdTSVByZWZlcmVuY2VzKCkgewotCQlJUHJvamVjdCB0YXJnZXRQcm9qZWN0ID0gdGFyZ2V0RmlsZS5nZXRQcm9qZWN0KCk7Ci0JCVBlcnNpc3RlbnRXU0lDb250ZXh0IFdTSVNTQmNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0KLQkJaWYgKFdTSVNTQmNvbnRleHQucHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyh0YXJnZXRQcm9qZWN0KSkgewotCQkJcmV0dXJuIChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotCQl9IAotCQllbHNlIGlmIChXU0lTU0Jjb250ZXh0LnByb2plY3RXYXJuTm9uV1NJQ29tcGxpYW5jZXModGFyZ2V0UHJvamVjdCkpIHsKLQkJCXJldHVybiAoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKTsKLQkJfQotCQllbHNlIHsKLQkJCXJldHVybiAoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9IdHRwQmluZGluZ09wdGlvbnNQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvSHR0cEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTc1YjdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9IdHRwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3IuSFRUUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBIdHRwQmluZGluZ09wdGlvbnNQYWdlIGV4dGVuZHMgQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSAKLXsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBnZXRCdXR0b247Ci0gIHByb3RlY3RlZCBCdXR0b24gcG9zdEJ1dHRvbjsKLSAgCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgY29udHJvbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgY29udHJvbC5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIExhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOwotICAgIEdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAKLSAgICBzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBvcHRpb25zSGVhZGluZyA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuTk9ORSk7Ci0gICAgb3B0aW9uc0hlYWRpbmcuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfSFRUUF9CSU5ESU5HX09QVElPTlMpOyAvLyROT04tTkxTLTEkCi0KLSAgICBnZXRCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgZ2V0QnV0dG9uLnNldFRleHQoIkhUVFAgR0VUIik7IC8vJE5PTi1OTFMtMSQKLSAgICBnZXRCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotCi0gICAgcG9zdEJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBwb3N0QnV0dG9uLnNldFRleHQoIkhUVFAgUE9TVCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpZiAoZ2VuZXJhdG9yLmdldE5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBnZW5lcmF0b3IuZ2V0TmFtZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpOwotICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBlZUxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGVlTGlzdC5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVlTGlzdC5nZXQoMCk7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGVlKTsKLSAgICAgICAgICBTdHJpbmcgdmVyYiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ2ZXJiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBpZiAoIlBPU1QiLmVxdWFscyh2ZXJiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldEJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgICAgcG9zdEJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcG9zdEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBnZXRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCk7Ci0JCi0gICAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRPcHRpb25zT25HZW5lcmF0b3IoKSB7Ci0JICBpZiAoZ2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIEhUVFBDb250ZW50R2VuZXJhdG9yKSB7Ci0JCSAgSFRUUENvbnRlbnRHZW5lcmF0b3IgaHR0cEdlbmVyYXRvciA9IChIVFRQQ29udGVudEdlbmVyYXRvcikgZ2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLQotCQkgIGlmIChwb3N0QnV0dG9uLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkgIGh0dHBHZW5lcmF0b3Iuc2V0VmVyYihIVFRQQ29udGVudEdlbmVyYXRvci5WRVJCX1BPU1QpOwotCQkgIH0JICAKLQkJICBlbHNlIGlmIChnZXRCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgaHR0cEdlbmVyYXRvci5zZXRWZXJiKEhUVFBDb250ZW50R2VuZXJhdG9yLlZFUkJfR0VUKTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0lTb2FwU3R5bGVJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvSVNvYXBTdHlsZUluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3YTVhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvSVNvYXBTdHlsZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpOwotCi1wdWJsaWMgaW50ZXJmYWNlIElTb2FwU3R5bGVJbmZvIHsKLQlwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50TGl0ZXJhbFBhdHRlcm4oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9Tb2FwQmluZGluZ09wdGlvbnNQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvU29hcEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGMxNjEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9Tb2FwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuZ2VuZXJhdG9yLlNPQVBDb250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuU2VydmljZVBvbGljeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuV1NETE5ld0ZpbGVPcHRpb25zUGFnZTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBTb2FwQmluZGluZ09wdGlvbnNQYWdlIGV4dGVuZHMgQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBpbXBsZW1lbnRzIElTb2FwU3R5bGVJbmZvCi17Ci0gIHByb3RlY3RlZCBCdXR0b24gZG9jTGl0ZXJhbDsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBycGNMaXRlcmFsOwotICBwcm90ZWN0ZWQgQnV0dG9uIHJwY0VuY29kZWQ7Ci0KLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBjb250cm9sID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBjb250cm9sLnNldExheW91dChsYXlvdXQpOwotCi0gICAgTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCk7Ci0gICAgR3JpZERhdGEgZ2Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBvcHRpb25zSGVhZGluZyA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuTk9ORSk7Ci0gICAgb3B0aW9uc0hlYWRpbmcuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfU09BUF9CSU5ESU5HX09QVElPTlMpOyAvLyROT04tTkxTLTEkCi0KLSAgICBkb2NMaXRlcmFsID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIGRvY0xpdGVyYWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfUkFESU9fRE9DVU1FTlRfTElURVJBTCk7IC8vJE5PTi1OTFMtMSQKLSAgICBkb2NMaXRlcmFsLnNldFNlbGVjdGlvbih0cnVlKTsKLQotICAgIHJwY0xpdGVyYWwgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcnBjTGl0ZXJhbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19SUENfTElURVJBTCk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBycGNFbmNvZGVkID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIHJwY0VuY29kZWQuc2V0VGV4dChNZXNzYWdlcy5fVUlfUkFESU9fUlBDX0VOQ09ERUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpZiAoZ2VuZXJhdG9yLmdldE5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBnZW5lcmF0b3IuZ2V0TmFtZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpOwotCi0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGVlTGlzdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAoZWVMaXN0LnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWVMaXN0LmdldCgwKTsKLQotICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChlZSk7Ci0gICAgICAgICAgU3RyaW5nIHN0eWxlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoInJwYyIuZXF1YWxzKHN0eWxlKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgaWYgaXQncyBSUEMgTGl0ZXJhbCBvciBSUEMgRW5jb2RlZAotICAgICAgICAgIAlTdHJpbmcgdXNlID0gImVuY29kZWQiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCUxpc3Qgb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gICAgICAgICAgCWlmIChvcGVyYXRpb25zLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCWVsZW1lbnQgPSBudWxsOwotICAgICAgICAgIAkJQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BlcmF0aW9ucy5nZXQoMCk7Ci0gICAgICAgICAgCQlpZiAob3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSAhPSBudWxsICYmIG9wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlPYmplY3Qgb2JqZWN0ID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCWVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJCWVsc2UgaWYgKG9wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpICE9IG51bGwgJiYgb3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlPYmplY3Qgb2JqZWN0ID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldCgwKTsKLSAgICAgICAgICAJCQllbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCQllbHNlIGlmIChvcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgCQkJQmluZGluZ0ZhdWx0IGZhdWx0ID0gKEJpbmRpbmdGYXVsdCkgb3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCUxpc3QgZmF1bHRFRSA9IGZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIAkJCQotICAgICAgICAgIAkJCWlmIChmYXVsdEVFLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQkJZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChmYXVsdEVFLmdldCgwKSk7Ci0gICAgICAgICAgCQkJfQotICAgICAgICAgIAkJfQotICAgICAgICAgIAkJCi0gICAgICAgICAgCQlpZiAoZWxlbWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgCQkJdXNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInVzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCX0KLSAgICAgICAgICAJCi0gICAgICAgICAgCWlmICh1c2UgIT0gbnVsbCAmJiAibGl0ZXJhbCIuZXF1YWxzKHVzZSkpIHsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAkJZG9jTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjTGl0ZXJhbC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgCQlycGNFbmNvZGVkLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgCX0KLSAgICAgICAgICAJZWxzZSB7ICAgICAgICAgIAkKLSAgICAgICAgICAJCWRvY0xpdGVyYWwuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJCXJwY0xpdGVyYWwuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJCXJwY0VuY29kZWQuc2V0U2VsZWN0aW9uKHRydWUpOwotICAgICAgICAgIAl9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZG9jTGl0ZXJhbC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBycGNMaXRlcmFsLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHJwY0VuY29kZWQuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCk7Ci0KLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE9wdGlvbnNPbkdlbmVyYXRvcigpIHsKLQkgIGlmIChnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpIGluc3RhbmNlb2YgU09BUENvbnRlbnRHZW5lcmF0b3IpIHsKLQkJICBTT0FQQ29udGVudEdlbmVyYXRvciBzb2FwR2VuZXJhdG9yID0gKFNPQVBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCQkgIGlmIChkb2NMaXRlcmFsLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0U3R5bGUoU09BUENvbnRlbnRHZW5lcmF0b3IuU1RZTEVfRE9DVU1FTlQpOwotCQkJICBzb2FwR2VuZXJhdG9yLnNldFVzZShTT0FQQ29udGVudEdlbmVyYXRvci5VU0VfTElURVJBTCk7Ci0JCSAgfQkgIAotCQkgIGVsc2UgaWYgKHJwY0xpdGVyYWwuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9SUEMpOwotCQkJICBzb2FwR2VuZXJhdG9yLnNldFVzZShTT0FQQ29udGVudEdlbmVyYXRvci5VU0VfTElURVJBTCk7Ci0JCSAgfQotCQkgIGVsc2UgaWYgKHJwY0VuY29kZWQuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9SUEMpOwotCQkJICBzb2FwR2VuZXJhdG9yLnNldFVzZShTT0FQQ29udGVudEdlbmVyYXRvci5VU0VfRU5DT0RFRCk7Ci0JCSAgfQotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCQlzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLQotCQlpZiAod2l6YXJkUGFnZSAhPSBudWxsKSB7Ci0JCQlib29sZWFuIGlzQ29tcGxldGUgPSB3aXphcmRQYWdlLmlzUGFnZUNvbXBsZXRlKCk7Ci0JCQlpZiAod2l6YXJkUGFnZSBpbnN0YW5jZW9mIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UpIHsKLQkJCQkvLyBBIHNlbGVjdGlvbiBtYWRlIGJ5IG9uZSBvZiB0aGVzZSB3aWRnZXRzIG1heSBpbXBhY3QgdGhlCi0JCQkJLy8gY29tcGxldG5lc3Mgb2YgYSBXaXphcmQuCi0JCQkJaXNDb21wbGV0ZSA9ICgoV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgd2l6YXJkUGFnZSkKLQkJCQkJCS52YWxpZGF0ZVBhZ2UoKTsKLQkJCX0KLQkJCXdpemFyZFBhZ2Uuc2V0UGFnZUNvbXBsZXRlKGlzQ29tcGxldGUpOwotCQl9Ci0JfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKLQkJU3RyaW5nIG1lc3NhZ2UgPSBudWxsOwotCQlpZiAocnBjRW5jb2RlZCAhPSBudWxsICYmIHJwY0VuY29kZWQuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCWlmICh3aXphcmRQYWdlIGluc3RhbmNlb2YgV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgewotCQkJCUlQcm9qZWN0IHByb2plY3QgPSAoKFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UpIHdpemFyZFBhZ2UpCi0JCQkJCQkuZ2V0UHJvamVjdCgpOwotCQkJCUlTZXJ2aWNlUG9saWN5IHBvbGljeSA9ICgoV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgd2l6YXJkUGFnZSkKLQkJCQkJCS5nZXRTZXJ2aWNlUG9saWN5KCk7Ci0JCQkJaW50IG1lc3NhZ2VUeXBlID0gU2VydmljZVBvbGljeUhlbHBlci5nZXRNZXNzYWdlU2V2ZXJpdHkoCi0JCQkJCQlwcm9qZWN0LCBwb2xpY3kpOwotCQkJCWlmIChtZXNzYWdlVHlwZSA9PSBJTWVzc2FnZVByb3ZpZGVyLkVSUk9SKSB7Ci0JCQkJCW1lc3NhZ2UgPSBNZXNzYWdlcy5fRVJST1JfV1NJX0NPTVBMSUFOQ0VfUlBDX0VOQ09ESU5HOwotCQkJCX0gZWxzZSBpZiAobWVzc2FnZVR5cGUgPT0gSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKSB7Ci0JCQkJCW1lc3NhZ2UgPSBNZXNzYWdlcy5fV0FSTl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmIChtZXNzYWdlID09IG51bGwpCi0JCQltZXNzYWdlID0gIiI7IC8vJE5PTi1OTFMtMSQgCi0JCXJldHVybiBtZXNzYWdlOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0TWVzc2FnZVR5cGUoKSB7Ci0JCWludCBtZXNzYWdlVHlwZSA9IElNZXNzYWdlUHJvdmlkZXIuTk9ORTsKLQotCQlpZiAocnBjRW5jb2RlZCAhPSBudWxsICYmIHJwY0VuY29kZWQuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCWlmICh3aXphcmRQYWdlIGluc3RhbmNlb2YgV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgewotCQkJCUlQcm9qZWN0IHByb2plY3QgPSAoKFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UpIHdpemFyZFBhZ2UpCi0JCQkJCQkuZ2V0UHJvamVjdCgpOwotCQkJCUlTZXJ2aWNlUG9saWN5IHBvbGljeSA9ICgoV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgd2l6YXJkUGFnZSkKLQkJCQkJCS5nZXRTZXJ2aWNlUG9saWN5KCk7Ci0JCQkJbWVzc2FnZVR5cGUgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldE1lc3NhZ2VTZXZlcml0eShwcm9qZWN0LAotCQkJCQkJcG9saWN5KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbWVzc2FnZVR5cGU7Ci0JfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNEb2N1bWVudExpdGVyYWxQYXR0ZXJuKCkgewotCSAgcmV0dXJuIGRvY0xpdGVyYWwuZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvRWRpdE5hbWVzcGFjZXNEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9FZGl0TmFtZXNwYWNlc0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDRlYmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9FZGl0TmFtZXNwYWNlc0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5uc2VkaXQuQ29tbW9uRWRpdE5hbWVzcGFjZXNUYXJnZXRGaWVsZERpYWxvZzsKLQotcHVibGljIGNsYXNzIEVkaXROYW1lc3BhY2VzRGlhbG9nIGV4dGVuZHMgRGlhbG9nCi17Ci0gIHByb3RlY3RlZCBCdXR0b24gb2tCdXR0b247Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGl0bGU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotICBwcm90ZWN0ZWQgTGlzdCBuYW1lc3BhY2VJbmZvTGlzdDsKLSAgcHJvdGVjdGVkIENvbW1vbkVkaXROYW1lc3BhY2VzVGFyZ2V0RmllbGREaWFsb2cgZWRpdFdTRExOYW1lc3BhY2VzQ29udHJvbDsKLSAgcHJvdGVjdGVkIElQYXRoIHJlc291cmNlTG9jYXRpb247Ci0gIC8vICBwcm90ZWN0ZWQgTGFiZWwgZXJyb3JNZXNzYWdlTGFiZWw7Ci0gIC8vICBwcm90ZWN0ZWQgU3RyaW5nIGVycm9yTWVzc2FnZTsgIAotCi0gIC8vcHJvdGVjdGVkIExhYmVsIGVycm9yTWVzc2FnZUxhYmVsOwotCi0gIHB1YmxpYyBFZGl0TmFtZXNwYWNlc0RpYWxvZyhTaGVsbCBwYXJlbnRTaGVsbCwgSVBhdGggcmVzb3VyY2VMb2NhdGlvbiwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBMaXN0IG5hbWVzcGFjZUxpc3QpCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCk7Ci0gICAgdGhpcy5yZXNvdXJjZUxvY2F0aW9uID0gcmVzb3VyY2VMb2NhdGlvbjsKLSAgICBzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IHRhcmdldE5hbWVzcGFjZTsKLSAgICB0aGlzLm5hbWVzcGFjZUluZm9MaXN0ID0gbmFtZXNwYWNlTGlzdDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgY3JlYXRlQW5kT3BlbigpCi0gIHsKLSAgICBjcmVhdGUoKTsKLSAgICBnZXRTaGVsbCgpLnNldFRleHQodGl0bGUpOwotICAgIHNldEJsb2NrT25PcGVuKHRydWUpOwotICAgIHJldHVybiBvcGVuKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgQ29udHJvbCBjb250cm9sID0gc3VwZXIuY3JlYXRlQ29udGVudHMocGFyZW50KTsKLSAgICB1cGRhdGVFcnJvck1lc3NhZ2UoKTsKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIG9rQnV0dG9uID0gY3JlYXRlQnV0dG9uKHBhcmVudCwgSURpYWxvZ0NvbnN0YW50cy5PS19JRCwgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwgdHJ1ZSk7Ci0gICAgY3JlYXRlQnV0dG9uKHBhcmVudCwgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMLCBmYWxzZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgZGlhbG9nQXJlYSA9IChDb21wb3NpdGUpIHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sID0gbmV3IENvbW1vbkVkaXROYW1lc3BhY2VzVGFyZ2V0RmllbGREaWFsb2coZGlhbG9nQXJlYSwgcmVzb3VyY2VMb2NhdGlvbik7Ci0gICAgZWRpdFdTRExOYW1lc3BhY2VzQ29udHJvbC5zZXROYW1lc3BhY2VJbmZvTGlzdChuYW1lc3BhY2VJbmZvTGlzdCk7Ci0gICAgZWRpdFdTRExOYW1lc3BhY2VzQ29udHJvbC5zZXRUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgIHJldHVybiBkaWFsb2dBcmVhOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKQotICB7Ci0gICAgdXBkYXRlRXJyb3JNZXNzYWdlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVFcnJvck1lc3NhZ2UoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZUVycm9yTWVzc2FnZSgpCi0gIHsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gbnVsbDsKLSAgICAvKgotICAgIFN0cmluZyBuYW1lID0gbmFtZUZpZWxkLmdldFRleHQoKS50cmltKCk7Ci0gICAgaWYgKG5hbWUubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIGVycm9yTWVzc2FnZSA9IGNvbXB1dGVFcnJvck1lc3NhZ2UobmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICB9Ki8KLQotICAgIC8vZXJyb3JNZXNzYWdlTGFiZWwuc2V0VGV4dChlcnJvck1lc3NhZ2UgIT0gbnVsbCA/IGVycm9yTWVzc2FnZSA6ICIiKTsKLSAgICBva0J1dHRvbi5zZXRFbmFibGVkKGVycm9yTWVzc2FnZSA9PSBudWxsKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGJ1dHRvblByZXNzZWQoaW50IGJ1dHRvbklkKQotICB7Ci0gICAgaWYgKGJ1dHRvbklkID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQpCi0gICAgewotICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gZWRpdFdTRExOYW1lc3BhY2VzQ29udHJvbC5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgc3VwZXIuYnV0dG9uUHJlc3NlZChidXR0b25JZCk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXROYW1lc3BhY2VJbmZvTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlSW5mb0xpc3Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0TmFtZXNwYWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvR2VuZXJhdGVCaW5kaW5nT25TYXZlRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvR2VuZXJhdGVCaW5kaW5nT25TYXZlRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwY2VhZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL0dlbmVyYXRlQmluZGluZ09uU2F2ZURpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZUJpbmRpbmdPblNhdmVEaWFsb2cgZXh0ZW5kcyBNZXNzYWdlRGlhbG9nIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIgewotCXByaXZhdGUgc3RhdGljIFN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9SRUdFTl9CSU5ESU5EU19PTl9TQVZFOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRpYWxvZ01lc3NhZ2UgPSBNZXNzYWdlcy5fVUlfUkVHRU5fQklORElOR1NfT05fU0FWRV9RVUVTVElPTk1BUks7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBidXR0b25zID0gbmV3IFN0cmluZ1tde01lc3NhZ2VzLl9VSV9ZRVNfTEFCRUwsIE1lc3NhZ2VzLl9VSV9OT19MQUJFTCwgTWVzc2FnZXMuX1VJX0NBTkNFTF9MQUJFTH07IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JCi0JcHJpdmF0ZSBCdXR0b24gcmVtZW1iZXJEZWNpc2lvbkJveDsKLQlwcml2YXRlIGJvb2xlYW4gcmVtZW1iZXJEZWNpc2lvbiA9IGZhbHNlOwotCQotCXB1YmxpYyBHZW5lcmF0ZUJpbmRpbmdPblNhdmVEaWFsb2coU2hlbGwgc2hlbGwpIHsKLQkJc3VwZXIoc2hlbGwsIGRpYWxvZ1RpdGxlLCBudWxsLCBkaWFsb2dNZXNzYWdlLCBNZXNzYWdlRGlhbG9nLlFVRVNUSU9OLCBidXR0b25zLCAwKTsKLQl9Ci0JCi0JCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ3VzdG9tQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBjb21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWNvbXAuc2V0RGF0YShuZXcgR3JpZERhdGEoKSk7Ci0JCQotCQkvLyBTcGFjZXIKLQkJbmV3IExhYmVsKGNvbXAsIFNXVC5OT05FKTsKLQkJbmV3IExhYmVsKGNvbXAsIFNXVC5OT05FKTsKLQkJCi0JCXJlbWVtYmVyRGVjaXNpb25Cb3ggPSBuZXcgQnV0dG9uKGNvbXAsIFNXVC5DSEVDSyk7Ci0JCXJlbWVtYmVyRGVjaXNpb25Cb3guc2V0VGV4dChNZXNzYWdlcy5fVUlfUkVNRU1CRVJfTVlfREVDSVNJT05fTEFCRUwpOwotCQlyZW1lbWJlckRlY2lzaW9uQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCi0JCXJldHVybiBwYXJlbnQ7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzdG9yZVByb21wdFByZWZlcmVuY2UoaW50IHN3dFZhbHVlKSB7Ci0JCS8vIFN0b3JlIHRoZSBuZXcgcHJlZmVyZW5jZSBmb3IgZGlzcGxheWluZyB0aGlzIGRpYWxvZy4KLQkJaWYgKHJlbWVtYmVyRGVjaXNpb24pIHsKLQkJCVdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfUFJPTVBUX1JFR0VOX0JJTkRJTkdfT05fU0FWRSwgZmFsc2UpOyAvLyROT04tTkxTLTEkCi0JCQotCQkJU3RyaW5nIGdlbmVyYXRlSUQgPSBNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0FVVE9fUkVHRU5FUkFURV9CSU5ESU5HOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoc3d0VmFsdWUgPT0gU1dULllFUykgewotCQkJCVdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKGdlbmVyYXRlSUQsIHRydWUpOwotCQkJfQotCQkJZWxzZSBpZiAoc3d0VmFsdWUgPT0gU1dULk5PKSB7Ci0JCQkJV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoZ2VuZXJhdGVJRCwgZmFsc2UpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyBpbnQgb3BlbigpIHsKLQkJaW50IHJWYWx1ZSA9IHN1cGVyLm9wZW4oKTsKLQkJCi0JCWlmIChyVmFsdWUgPT0wKSB7Ci0JCQlzdG9yZVByb21wdFByZWZlcmVuY2UoU1dULllFUyk7Ci0JCQlyZXR1cm4gU1dULllFUzsKLQkJfQotCQllbHNlIGlmIChyVmFsdWUgPT0gMSkgewotCQkJc3RvcmVQcm9tcHRQcmVmZXJlbmNlKFNXVC5OTyk7Ci0JCQlyZXR1cm4gU1dULk5POwotCQl9Ci0JCWVsc2UgaWYgKHJWYWx1ZSA9PSAyKSB7Ci0JCQlzdG9yZVByb21wdFByZWZlcmVuY2UoU1dULkNBTkNFTCk7Ci0JCQlyZXR1cm4gU1dULkNBTkNFTDsKLQkJfQotCQkKLQkJcmV0dXJuIHJWYWx1ZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQlpZiAoZS53aWRnZXQgPT0gcmVtZW1iZXJEZWNpc2lvbkJveCkgewotCQkJcmVtZW1iZXJEZWNpc2lvbiA9IHJlbWVtYmVyRGVjaXNpb25Cb3guZ2V0U2VsZWN0aW9uKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHt9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvTmV3Q29tcG9uZW50RGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvTmV3Q29tcG9uZW50RGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODY4N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL05ld0NvbXBvbmVudERpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotCi0vKgotICogVE9ETzogcm1haDogbG9vayBhdCByZW1vdmluZyB0aGlzIGNsYXNzLiAgRG9lc24ndCBsb29rIGxpa2UgaXQncyB1c2VkLgotICovCi1wdWJsaWMgY2xhc3MgTmV3Q29tcG9uZW50RGlhbG9nIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgTW9kaWZ5TGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIFRleHQgbmFtZUZpZWxkOyAKLSAgcHJvdGVjdGVkIEJ1dHRvbiBva0J1dHRvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBTdHJpbmcgdGl0bGU7Ci0gIHByb3RlY3RlZCBMYWJlbCBlcnJvck1lc3NhZ2VMYWJlbDsKLSAgcHJvdGVjdGVkIExpc3QgdXNlZE5hbWVzOwotCi0gIHB1YmxpYyBOZXdDb21wb25lbnREaWFsb2coU2hlbGwgcGFyZW50U2hlbGwsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGRlZmF1bHROYW1lKSAKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsKLSAgICBzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotICAgIG5hbWUgPSBkZWZhdWx0TmFtZTsgICAgICAKLSAgICB0aGlzLnRpdGxlID0gdGl0bGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBOZXdDb21wb25lbnREaWFsb2coU2hlbGwgcGFyZW50U2hlbGwsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGRlZmF1bHROYW1lLCBMaXN0IHVzZWROYW1lcykgCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCk7Ci0gICAgc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLSAgICBuYW1lID0gZGVmYXVsdE5hbWU7ICAgICAgCi0gICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIHRoaXMudXNlZE5hbWVzID0gdXNlZE5hbWVzOwotICB9Ci0KLSAgcHVibGljIGludCBjcmVhdGVBbmRPcGVuKCkKLSAgewotICAgIGNyZWF0ZSgpOwotICAgIGdldFNoZWxsKCkuc2V0VGV4dCh0aXRsZSk7Ci0gICAgc2V0QmxvY2tPbk9wZW4odHJ1ZSk7Ci0gICAgcmV0dXJuIG9wZW4oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpICAKLSAgewotICAgIENvbnRyb2wgY29udHJvbCA9IHN1cGVyLmNyZWF0ZUNvbnRlbnRzKHBhcmVudCk7Ci0gICAgbmFtZUZpZWxkLmZvcmNlRm9jdXMoKTsKLSAgICBuYW1lRmllbGQuc2VsZWN0QWxsKCk7ICAKLSAgICB1cGRhdGVFcnJvck1lc3NhZ2UoKTsKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotCi0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KSAKLSAgewotICAgIG9rQnV0dG9uID0gY3JlYXRlQnV0dG9uKHBhcmVudCwgSURpYWxvZ0NvbnN0YW50cy5PS19JRCwgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwgdHJ1ZSk7Ci0gICAgY3JlYXRlQnV0dG9uKHBhcmVudCwgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMLCBmYWxzZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVIZWFkZXJDb250ZW50KENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXh0ZW5kZWRDb250ZW50KENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgCi0gIHsKLSAgICBDb21wb3NpdGUgZGlhbG9nQXJlYSA9IChDb21wb3NpdGUpc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotICAgIAotICAgIGNyZWF0ZUhlYWRlckNvbnRlbnQoZGlhbG9nQXJlYSk7Ci0KLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShkaWFsb2dBcmVhLCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIEdyaWREYXRhIGdkRmlsbD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2RGaWxsLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RGaWxsLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgZ2RGaWxsLnZlcnRpY2FsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkRmlsbC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZT0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZEZpbGwpOwotCi0gICAgTGFiZWwgbmFtZUxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIG5hbWVMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgbmFtZUZpZWxkID0gbmV3IFRleHQoY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgR3JpZERhdGEgZ2Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBnZC53aWR0aEhpbnQgPSAyMDA7Ci0gICAgbmFtZUZpZWxkLnNldExheW91dERhdGEoZ2QpOwotICAgIG5hbWVGaWVsZC5zZXRUZXh0KG5hbWUpOwotICAgIG5hbWVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih0aGlzKTsKLQotICAgIGNyZWF0ZUV4dGVuZGVkQ29udGVudChkaWFsb2dBcmVhKTsKLQotICAgIC8vIGVycm9yIG1lc3NhZ2UKLSAgICBlcnJvck1lc3NhZ2VMYWJlbCA9IG5ldyBMYWJlbChkaWFsb2dBcmVhLCBTV1QuTk9ORSk7Ci0gICAgZXJyb3JNZXNzYWdlTGFiZWwuc2V0VGV4dCgiIik7ICAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICBHcmlkRGF0YSBnZDIgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZDIuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZDIuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBnZDIud2lkdGhIaW50ID0gMjAwOwotICAgIGVycm9yTWVzc2FnZUxhYmVsLnNldExheW91dERhdGEoZ2QyKTsgICAgICAgICAgCi0vLyAgICBDb2xvciBjb2xvciA9IG5ldyBDb2xvcihlcnJvck1lc3NhZ2VMYWJlbC5nZXREaXNwbGF5KCksIDIwMCwgMCwgMCk7Ci0vLyAgICBlcnJvck1lc3NhZ2VMYWJlbC5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLQotICAgIHJldHVybiBkaWFsb2dBcmVhOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgdXBkYXRlRXJyb3JNZXNzYWdlKCk7Ci0gIH0gICAgICAgIAotCi0gIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZUVycm9yTWVzc2FnZShTdHJpbmcgbmFtZSkKLSAgewotICAJaWYgKHVzZWROYW1lcyA9PSBudWxsKQotICAJCXJldHVybiBudWxsOwotICAJCi0gIAlJdGVyYXRvciBpdGVyYXRvciA9IHVzZWROYW1lcy5pdGVyYXRvcigpOwotICAJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotICAJCWlmIChuYW1lLmVxdWFsc0lnbm9yZUNhc2UoKFN0cmluZykgaXRlcmF0b3IubmV4dCgpKSkgewotICAJCQlyZXR1cm4gTWVzc2FnZXMuX1VJX0xBQkVMX1dBUk5JTkdfRFVQTElDQVRFX05BTUVfRVhJU1RTOyAvLyROT04tTkxTLTEkCi0gIAkJfQotICAJfQotICAJCi0gIAlyZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZUVycm9yTWVzc2FnZSgpCi0gIHsgICAgICAgICAgICAgICAgIAotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBudWxsOwotICAgIFN0cmluZyBuYW1lID0gbmFtZUZpZWxkLmdldFRleHQoKS50cmltKCk7Ci0gICAgaWYgKG5hbWUubGVuZ3RoKCkgPiAwKQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgZXJyb3JNZXNzYWdlID0gY29tcHV0ZUVycm9yTWVzc2FnZShuYW1lKTsKLSAgICB9ICAgCi0gICAgZWxzZQotICAgIHsKLSAgICAgIGVycm9yTWVzc2FnZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgfSAgCi0gICAgZXJyb3JNZXNzYWdlTGFiZWwuc2V0VGV4dChlcnJvck1lc3NhZ2UgIT0gbnVsbCA/IGVycm9yTWVzc2FnZSA6ICIiKTsgLy8kTk9OLU5MUy0xJAotLy8gICAgb2tCdXR0b24uc2V0RW5hYmxlZChlcnJvck1lc3NhZ2UgPT0gbnVsbCk7Ci0gIH0KLSAKLSAgcHJvdGVjdGVkIHZvaWQgYnV0dG9uUHJlc3NlZChpbnQgYnV0dG9uSWQpIAotICB7Ci0gICAgaWYgKGJ1dHRvbklkID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQpCi0gICAgewotICAgICAgbmFtZSA9IG5hbWVGaWVsZC5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHN1cGVyLmJ1dHRvblByZXNzZWQoYnV0dG9uSWQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9Qcm90b2NvbENvbXBvbmVudENvbnRyb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9Qcm90b2NvbENvbXBvbmVudENvbnRyb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RhZjI2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvUHJvdG9jb2xDb21wb25lbnRDb250cm9sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuUGFnZUJvb2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJpbmRpbmdHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvdG9jb2xDb21wb25lbnRDb250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIsIE1vZGlmeUxpc3RlbmVyCi17Ci0gIHByb3RlY3RlZCBCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcjsKLQotICBwcm90ZWN0ZWQgVGV4dCBjb21wb25lbnROYW1lRmllbGQ7Ci0gIHByb3RlY3RlZCBDb21ibyByZWZOYW1lQ29tYm87Ci0gIHByb3RlY3RlZCBCdXR0b24gcmVmQnJvd3NlQnV0dG9uOwotICBwcm90ZWN0ZWQgQ29tYm8gcHJvdG9jb2xDb21ibzsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBvdmVyd3JpdGVCdXR0b247Ci0gIHByb3RlY3RlZCBQYWdlQm9vayBwYWdlQm9vazsKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBlbXB0eVNldHRpbmdzUGFnZTsKLSAgcHJvdGVjdGVkIE1hcCBwYWdlTWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmTmFtZTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIFVOU1BFQ0lGSUVEID0gTWVzc2FnZXMuX1VJX1VOU1BFQ0lGSUVEOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIFByb3RvY29sQ29tcG9uZW50Q29udHJvbChDb21wb3NpdGUgcGFyZW50LCBCYXNlR2VuZXJhdG9yIGdlbmVyYXRvciwgYm9vbGVhbiBzaG93T3ZlcndyaXRlQnV0dG9uKQotICB7Ci0gICAgc3VwZXIocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0KLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBzZXRMYXlvdXQobGF5b3V0KTsKLSAgICBzZXRMYXlvdXREYXRhKGNyZWF0ZUdyaWREYXRhKHRydWUsIDEpKTsKLQotICAgIENvbXBvc2l0ZSBsYWJlbFZhbHVlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuTk9ORSk7Ci0gICAgbGFiZWxWYWx1ZUNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpKTsKLSAgICBsYWJlbFZhbHVlQ29tcG9zaXRlLnNldExheW91dERhdGEoY3JlYXRlR3JpZERhdGEoZmFsc2UsIDEpKTsKLQotICAgIC8vIHJvdyAxCi0gICAgLy8KLSAgICBMYWJlbCBjb21wb25lbnROYW1lTGFiZWwgPSBuZXcgTGFiZWwobGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGNvbXBvbmVudE5hbWVMYWJlbC5zZXRUZXh0KGdldENvbXBvbmVudE5hbWVMYWJlbFRleHQoKSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGNvbXBvbmVudE5hbWVGaWVsZCA9IG5ldyBUZXh0KGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5CT1JERVIpOwotICAgIEdyaWREYXRhIGdkTmFtZT0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2ROYW1lLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2ROYW1lLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgY29tcG9uZW50TmFtZUZpZWxkLnNldExheW91dERhdGEoZ2ROYW1lKTsKLSAgICBjb21wb25lbnROYW1lRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21wb25lbnROYW1lRmllbGQsIEFTREVkaXRvckNTSGVscElkcy5QUk9UT0NPTF9DT01QT05FTlRfTkFNRV9URVhUKTsKLSAgICAvL2NyZWF0ZVBsYWNlSG9sZGVyKGxhYmVsVmFsdWVDb21wb3NpdGUpOwotICAgIAotICAgIC8vIHJvdyAyCi0gICAgLy8KLSAgICBMYWJlbCByZWZOYW1lTGFiZWwgPSBuZXcgTGFiZWwobGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIHJlZk5hbWVMYWJlbC5zZXRUZXh0KGdldFJlZk5hbWVMYWJlbFRleHQoKSk7IC8vJE5PTi1OTFMtMSQJCi0gICAgcmVmTmFtZUNvbWJvID0gbmV3IENvbWJvKGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5SRUFEX09OTFkpOwotICAgIEdyaWREYXRhIGdkUmVmTmFtZT0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2RSZWZOYW1lLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RSZWZOYW1lLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgcmVmTmFtZUNvbWJvLnNldExheW91dERhdGEoZ2RSZWZOYW1lKTsKLSAgICByZWZOYW1lQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChyZWZOYW1lQ29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9UT0NPTF9DT01QT05FTlRfUkVGX0NPTUJPKTsKLQotICAgIC8vcmVmQnJvd3NlQnV0dG9uID0gbmV3IEJ1dHRvbihsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgLy9yZWZCcm93c2VCdXR0b24uc2V0VGV4dCgiICAuLi4gICIpOwotICAgIC8vR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKLSAgICAvL2dkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSBmYWxzZTsKLSAgICAvL2dkLmhlaWdodEhpbnQgPSAxNzsKLSAgICAvL2dkLndpZHRoSGludCA9IDI0OwotICAgIC8vcmVmQnJvd3NlQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotICAgIC8vcmVmQnJvd3NlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIC8vY3JlYXRlUGxhY2VIb2xkZXIobGFiZWxWYWx1ZUNvbXBvc2l0ZSk7Ci0KLSAgICAvLyByb3cgMwotICAgIC8vCi0gICAgTGFiZWwgcHJvdG9jb2xMYWJlbCA9IG5ldyBMYWJlbChsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgcHJvdG9jb2xMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MKTsgLy8kTk9OLU5MUy0xJAotICAgIHByb3RvY29sQ29tYm8gPSBuZXcgQ29tYm8obGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULlJFQURfT05MWSk7Ci0gICAgR3JpZERhdGEgZ2RQcm90b2NvbD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2RQcm90b2NvbC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkUHJvdG9jb2wuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBwcm90b2NvbENvbWJvLnNldExheW91dERhdGEoZ2RQcm90b2NvbCk7Ci0gICAgcHJvdG9jb2xDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sQ29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9UT0NPTF9DT01QT05FTlRfUFJPVE9DT0xfQ09NQk8pOwotICAgIC8vY3JlYXRlUGxhY2VIb2xkZXIobGFiZWxWYWx1ZUNvbXBvc2l0ZSk7Ci0KLSAgICAvLyBvcHRpb25hbCBvdmVyd3JpdGUgYnV0dG9uCi0gICAgLy8KLSAgICBpZiAoc2hvd092ZXJ3cml0ZUJ1dHRvbikKLSAgICB7Ci0gICAgICBvdmVyd3JpdGVCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5DSEVDSyk7Ci0gICAgICBvdmVyd3JpdGVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5fVUlfQ0hFQ0tCT1hfT1ZFUldSSVRFKTsgLy8kTk9OLU5MUy0xJAotICAgICAgb3ZlcndyaXRlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChvdmVyd3JpdGVCdXR0b24sIEFTREVkaXRvckNTSGVscElkcy5wUk9UT0NPTF9DT01QT05FTlRfT1ZFUldSSVRFX0NIRUNLQk9YKTsKLSAgICB9Ci0KLSAgICAvLyBwcm90b2NvbCBzcGVjaWZpYyBzZXR0aW5ncwotICAgIC8vCi0gICAgcGFnZUJvb2sgPSBuZXcgUGFnZUJvb2sodGhpcywgU1dULk5PTkUpOwotICAgIEdyaWREYXRhIGdkRmlsbD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2RGaWxsLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RGaWxsLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgZ2RGaWxsLnZlcnRpY2FsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkRmlsbC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZT0gdHJ1ZTsKLSAgICBwYWdlQm9vay5zZXRMYXlvdXREYXRhKGdkRmlsbCk7Ci0KLSAgICBlbXB0eVNldHRpbmdzUGFnZSA9IG5ldyBDb21wb3NpdGUocGFnZUJvb2ssIFNXVC5OT05FKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICBuZXcgTGFiZWwoZW1wdHlTZXR0aW5nc1BhZ2UsIFNXVC5OT05FKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0RmllbGRzKCkKLSAgewotICAgIC8vIHByaW1lIHRoZSBmaWVsZHMKLSAgICAvLwotICAgIGNvbXBvbmVudE5hbWVGaWVsZC5zZXRUZXh0KGdldERlZmF1bHROYW1lKCkpOwotICAgIHVwZGF0ZVJlZk5hbWVDb21ibygpOwotICAgIHVwZGF0ZVByb3RvY29sQ29tYm8oKTsKLSAgICB1cGRhdGVQYWdlQm9vayhwcm90b2NvbENvbWJvLmdldFRleHQoKSk7Ci0gIH0KLQotICBwdWJsaWMgVGV4dCBnZXRDb21wb25lbnROYW1lRmllbGQoKQotICB7Ci0gICAgcmV0dXJuIGNvbXBvbmVudE5hbWVGaWVsZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZUxhYmVsVGV4dCgpCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZXMuX1VJX0xBQkVMX05BTUU7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHByaXZhdGUgR3JpZERhdGEgY3JlYXRlR3JpZERhdGEoYm9vbGVhbiBib3RoLCBpbnQgc3BhbikKLSAgewotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKGJvdGggPyBHcmlkRGF0YS5GSUxMX0JPVEggOiBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gc3BhbjsKLSAgICByZXR1cm4gZ2Q7Ci0gIH0KLQotICAvLyBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIC8vCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgICBpZiAoZXZlbnQud2lkZ2V0ID09IG92ZXJ3cml0ZUJ1dHRvbiAmJiBvdmVyd3JpdGVCdXR0b24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZW5lcmF0b3Iuc2V0T3ZlcndyaXRlKG92ZXJ3cml0ZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50LndpZGdldCA9PSByZWZOYW1lQ29tYm8pCi0gICAgewotICAgICAgaW50IGluZGV4ID0gcmVmTmFtZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBTdHJpbmcgcmVmTmFtZSA9IHJlZk5hbWVDb21iby5nZXRJdGVtKGluZGV4KTsKLQkgIGlmIChyZWZOYW1lLmVxdWFscyhVTlNQRUNJRklFRCkpIHsKLQkgICAgICBnZW5lcmF0b3Iuc2V0UmVmTmFtZSgiIik7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIGVsc2UgewotCSAgICAgIGdlbmVyYXRvci5zZXRSZWZOYW1lKHJlZk5hbWUpOwotCSAgfQotICAgIH0KLSAgICBlbHNlIGlmIChldmVudC53aWRnZXQgPT0gcHJvdG9jb2xDb21ibykKLSAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IHByb3RvY29sQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgICAgU3RyaW5nIHByb3RvY29sID0gKGluZGV4ICE9IC0xKSA/IHByb3RvY29sQ29tYm8uZ2V0SXRlbShpbmRleCkgOiBudWxsOwotICAgICAgICAKLSAgICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpLmdldEV4dGVuc2lvbkZvckxhYmVsKHByb3RvY29sKTsKLSAgICAgICAgaWYgKGV4dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgIAlTdHJpbmcgbmFtZXNwYWNlID0gZXh0LmdldE5hbWVzcGFjZSgpOwotICAgICAgICAJZ2VuZXJhdG9yLnNldENvbnRlbnRHZW5lcmF0b3IoQmluZGluZ0dlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKG5hbWVzcGFjZSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgewotICAgICAgICAJZ2VuZXJhdG9yLnNldENvbnRlbnRHZW5lcmF0b3IobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlUGFnZUJvb2socHJvdG9jb2wpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJU19PVkVSV1JJVEVfQVBQTElDQUJMRSA9ICJJU19PVkVSV1JJVEVfQVBQTElDQUJMRSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlUGFnZUJvb2soU3RyaW5nIHByb3RvY29sKQotICB7Ci0gICAgaWYgKHByb3RvY29sICE9IG51bGwpCi0gICAgewotCSAgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIHBhZ2UgPSAoQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKSBwYWdlTWFwLmdldChwcm90b2NvbCk7Ci0gICAgICBpZiAocGFnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBwYWdlID0gY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKHByb3RvY29sKTsKLQotICAgICAgICBpZiAocGFnZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcGFnZS5pbml0KGdlbmVyYXRvcik7Ci0gICAgICAgICAgQ29udHJvbCBjb250cm9sID0gcGFnZS5jcmVhdGVDb250cm9sKHBhZ2VCb29rKTsKLSAgICAgICAgICBjb250cm9sLnNldERhdGEoSVNfT1ZFUldSSVRFX0FQUExJQ0FCTEUsIG5ldyBCb29sZWFuKHBhZ2UuaXNPdmVyd3JpdGVBcHBsaWNhYmxlKCkpKTsKLSAgICAgICAgICBwYWdlTWFwLnB1dChwcm90b2NvbCwgcGFnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgYm9vbGVhbiBlbmFibGVPdmVyd3JpdGVCdXR0b24gPSB0cnVlOwotICAgICAgaWYgKHBhZ2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKG92ZXJ3cml0ZUJ1dHRvbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQm9vbGVhbiBkYXRhID0gKEJvb2xlYW4pIHBhZ2UuZ2V0Q29udHJvbCgpLmdldERhdGEoSVNfT1ZFUldSSVRFX0FQUExJQ0FCTEUpOwotICAgICAgICAgIGVuYWJsZU92ZXJ3cml0ZUJ1dHRvbiA9IGRhdGEgPT0gbnVsbCB8fCBkYXRhLmVxdWFscyhCb29sZWFuLlRSVUUpOwotICAgICAgICB9Ci0gICAgICAgIHBhZ2VCb29rLnNob3dQYWdlKHBhZ2UuZ2V0Q29udHJvbCgpKTsKLSAgICAgICAgcGFnZUJvb2subGF5b3V0KCk7Ci0gICAgICAgIHBhZ2VCb29rLmdldFBhcmVudCgpLmxheW91dCgpOwotCQkKLQkJcGFnZS5zZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcGFnZUJvb2suc2hvd1BhZ2UoZW1wdHlTZXR0aW5nc1BhZ2UpOwotICAgICAgfQotCi0gICAgICBpZiAob3ZlcndyaXRlQnV0dG9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChlbmFibGVPdmVyd3JpdGVCdXR0b24pCi0gICAgICAgIHsKLSAgICAgICAgICBvdmVyd3JpdGVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICBvdmVyd3JpdGVCdXR0b24uc2V0U2VsZWN0aW9uKGdlbmVyYXRvci5nZXRPdmVyd3JpdGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgb3ZlcndyaXRlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm90b2NvbENvbWJvKCkKLSAgewotICAgIHByb3RvY29sQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgcHJvdG9jb2xDb21iby5hZGQoVU5TUEVDSUZJRUQpOwotCi0gICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKTsgCi0gICAgTGlzdCBiaW5kaW5nTmFtZXMgPSByZWdpc3RyeS5nZXRCaW5kaW5nRXh0ZW5zaW9uTmFtZXMoKTsKLSAgICAKLSAgICBTdHJpbmcgcHJvdG9jb2xUZXh0ID0gZ2VuZXJhdG9yLmdldFByb3RvY29sKCk7Ci0gICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sVGV4dCk7Ci0gICAgaWYgKGV4dHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm90b2NvbFRleHQgPSBleHR0LmdldExhYmVsKCk7Ci0gICAgfQotICAgIAotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdOYW1lcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgU3RyaW5nIHByb3RvY29sID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZShwcm90b2NvbCk7Ci0gICAgICBpZiAoZXh0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBsYWJlbCA9IGV4dC5nZXRMYWJlbCgpOwotICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCkKLSAgICAgICAgICBwcm90b2NvbENvbWJvLmFkZChsYWJlbCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByb3RvY29sVGV4dCA9PSBudWxsICYmIHByb3RvY29sQ29tYm8uZ2V0SXRlbUNvdW50KCkgPiAwKQotICAgIHsKLSAgICAgIHByb3RvY29sVGV4dCA9IHByb3RvY29sQ29tYm8uZ2V0SXRlbSgwKTsKLSAgICB9Ci0gICAgcHJvdG9jb2xDb21iby5zZXRUZXh0KHByb3RvY29sVGV4dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVSZWZOYW1lQ29tYm8oKQotICB7Ci0gICAgcmVmTmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotCi0gICAgcmVmTmFtZUNvbWJvLmFkZChVTlNQRUNJRklFRCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0UmVmTmFtZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVmTmFtZUNvbWJvLmFkZCgoU3RyaW5nKSBpLm5leHQoKSk7Ci0gICAgfQotCi0gICAgaWYgKHJlZk5hbWVDb21iby5nZXRJdGVtQ291bnQoKSA+IDApCi0gICAgewotICAgICAgU3RyaW5nIHJlZlRleHQgPSBnZW5lcmF0b3IuZ2V0UmVmTmFtZSgpOwotICAgICAgcmVmTmFtZUNvbWJvLnNldFRleHQocmVmVGV4dCAhPSBudWxsID8gcmVmVGV4dCA6IFVOU1BFQ0lGSUVEKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gIHsKLSAgICBnZW5lcmF0b3Iuc2V0TmFtZShjb21wb25lbnROYW1lRmllbGQuZ2V0VGV4dCgpKTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBMaXN0IGdldFJlZk5hbWVzKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UmVmTmFtZUxhYmVsVGV4dCgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldERlZmF1bHROYW1lKCk7Ci0gIC8vIFRPRE86IFdlIGRvbid0IG5lZWQgdGhlIFN0cmluZyBhcmd1bWVudCBmb3IgY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKCkgbWV0aG9kLgotICAvLyBSZW1vdmUgd2hlbiBXVFAgYWxsb3dzIEFQSSBjaGFuZ2VzLgotICBwdWJsaWMgYWJzdHJhY3QgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGNyZWF0ZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZShTdHJpbmcgcHJvdG9jb2wpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1cxMUJyb3dzZUNvbXBvbmVudERpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1cxMUJyb3dzZUNvbXBvbmVudERpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWVjMTBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9XMTFCcm93c2VDb21wb25lbnREaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNlYXJjaExpc3REaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5TY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMUJyb3dzZUNvbXBvbmVudERpYWxvZyBpbXBsZW1lbnRzIElDb21wb25lbnREaWFsb2cgewotCXByaXZhdGUgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lOwotCXByaXZhdGUgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzZWxlY3Rpb247Ci0JcHJpdmF0ZSBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQkKLQlwdWJsaWMgVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nKFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSwgSUZpbGUgaUZpbGUsIFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXRoaXMucXVhbGlmaWVkTmFtZSA9IHF1YWxpZmllZE5hbWU7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBnZXRTZWxlY3RlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIHNlbGVjdGlvbjsKLQl9Ci0KLQlwdWJsaWMgaW50IGNyZWF0ZUFuZE9wZW4oKSB7Ci0JCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBkZXNjcmlwdGlvbi5nZXRUYXJnZXQoKTsKLQkJCi0JICAgIFNoZWxsIHNoZWxsID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JICAgIGludCByZXR1cm5WYWx1ZSA9IFdpbmRvdy5DQU5DRUw7Ci0JICAgIENvbXBvbmVudFNlYXJjaExpc3REaWFsb2cgZGlhbG9nID0gbnVsbDsKLQkgICAgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUpCi0JICAgIHsKLQkgICAgCVdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIGRlc2NyaXB0aW9uUHJvdmlkZXIgPSBuZXcgV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIoKTsKLQkgICAgCWZpbmFsIFdTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyIHNlYXJjaExpc3RQcm92aWRlciA9IG5ldyBXU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlcihkZWZpbml0aW9uKTsKLQkgICAgCUNvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24oKTsKLQkgICAgCWNvbmZpZ3VyYXRpb24uc2V0RmlsdGVyTGFiZWxUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FX0ZJTFRFUik7Ci0JICAgICAgICBjb25maWd1cmF0aW9uLnNldERlc2NyaXB0aW9uUHJvdmlkZXIoZGVzY3JpcHRpb25Qcm92aWRlcik7Ci0JICAgICAgICBjb25maWd1cmF0aW9uLnNldFNlYXJjaExpc3RQcm92aWRlcihzZWFyY2hMaXN0UHJvdmlkZXIpOwotCSAgICAgICAgCi0JICAgICAgICBTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HOyAvLyROT04tTkxTLTEkCi0JICAgICAgICBkaWFsb2cgPSBuZXcgU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGNvbmZpZ3VyYXRpb24pOwotCSAgICAgICAgCi0JICAgICAgICBJRmlsZSBmaWxlID0gZ2V0RmlsZSgpOwotCSAgICAgICAgaWYgKGZpbGUgIT0gbnVsbCkgewotCQkgICAgICAgICgoU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZykgZGlhbG9nKS5zZXRDdXJyZW50UmVzb3VyY2UoZmlsZSk7Ci0JICAgICAgICB9Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FKQotCSAgICB7Ci0JICAgICAgV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZGVzY3JpcHRpb25Qcm92aWRlciA9IG5ldyBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcigpOwotCSAgICAgIGZpbmFsIFdTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIgc2VhcmNoTGlzdFByb3ZpZGVyID0gbmV3IFdTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIoZGVmaW5pdGlvbik7Ci0JICAgICAKLQkgICAgICBDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IENvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uKCk7Ci0JICAgICAgY29uZmlndXJhdGlvbi5zZXRGaWx0ZXJMYWJlbFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX05BTUVfRklMVEVSKTsKLQkgICAgICBjb25maWd1cmF0aW9uLnNldERlc2NyaXB0aW9uUHJvdmlkZXIoZGVzY3JpcHRpb25Qcm92aWRlcik7Ci0JICAgICAgY29uZmlndXJhdGlvbi5zZXRTZWFyY2hMaXN0UHJvdmlkZXIoc2VhcmNoTGlzdFByb3ZpZGVyKTsKLQkgICAgICAvL2NvbmZpZ3VyYXRpb24uc2V0TmV3Q29tcG9uZW50SGFuZGxlcihuZXcgTmV3VHlwZUJ1dHRvbkhhbmRsZXIoKSk7Ci0JICAgICAgCi0JICAgICAgU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX1RJVExFX1NQRUNJRllfUE9SVFRZUEU7IC8vJE5PTi1OTFMtMSQKLQkgICAgICBkaWFsb2cgPSBuZXcgU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGNvbmZpZ3VyYXRpb24pOwotCSAgICAgIAotCSAgICAgIElGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JICAgICAgaWYgKGZpbGUgIT0gbnVsbCkgewotCSAgICAJICAoKFNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2cpIGRpYWxvZykuc2V0Q3VycmVudFJlc291cmNlKGZpbGUpOwotCSAgICAgIH0KLQkgICAgfQotCSAgICBlbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKQotCSAgICB7Ci0JICAgICAgV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZGVzY3JpcHRpb25Qcm92aWRlciA9IG5ldyBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcigpOwotCSAgICAgIGZpbmFsIFdTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyIHNlYXJjaExpc3RQcm92aWRlciA9IG5ldyBXU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlcihkZWZpbml0aW9uKTsKLQkgICAgIAotCSAgICAgIENvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24oKTsKLQkgICAgICBjb25maWd1cmF0aW9uLnNldEZpbHRlckxhYmVsVGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRV9GSUxURVIpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RGVzY3JpcHRpb25Qcm92aWRlcihkZXNjcmlwdGlvblByb3ZpZGVyKTsKLQkgICAgICBjb25maWd1cmF0aW9uLnNldFNlYXJjaExpc3RQcm92aWRlcihzZWFyY2hMaXN0UHJvdmlkZXIpOwotCSAgICAgIC8vY29uZmlndXJhdGlvbi5zZXROZXdDb21wb25lbnRIYW5kbGVyKG5ldyBOZXdUeXBlQnV0dG9uSGFuZGxlcigpKTsKLQkgICAgICAKLQkgICAgICBTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfVElUTEVfU1BFQ0lGWV9NRVNTQUdFOyAvLyROT04tTkxTLTEkCi0JICAgICAgZGlhbG9nID0gbmV3IFNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2coc2hlbGwsIGRpYWxvZ1RpdGxlLCBjb25maWd1cmF0aW9uKTsKLQkgICAgICAKLQkgICAgICBJRmlsZSBmaWxlID0gZ2V0RmlsZSgpOwotCSAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKLQkgICAgCSAgKChTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKSBkaWFsb2cpLnNldEN1cnJlbnRSZXNvdXJjZShmaWxlKTsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0JICAgIGlmIChkaWFsb2cgIT0gbnVsbCkKLQkgICAgewotCSAgICAgIGRpYWxvZy5zZXRCbG9ja09uT3Blbih0cnVlKTsKLQkgICAgICBkaWFsb2cuY3JlYXRlKCk7Ci0JICAgICAgcmV0dXJuVmFsdWUgPSBkaWFsb2cub3BlbigpOwotCSAgICAgIGlmIChyZXR1cm5WYWx1ZSA9PSBXaW5kb3cuT0spCi0JICAgICAgewotCSAgICAgICAgc2VsZWN0aW9uID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLQl9Ci0JCi0JcHJpdmF0ZSBJRmlsZSBnZXRGaWxlKCkgewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJSUVkaXRvcklucHV0IGlucHV0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotICAgICAgICAJZmlsZSA9ICgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZpbGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExTmV3Q29tcG9uZW50RGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExTmV3Q29tcG9uZW50RGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMjE5YTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1cxMU5ld0NvbXBvbmVudERpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEJpbmRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEludGVyZmFjZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkTWVzc2FnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZGlhbG9ncy5OZXdDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFOZXdDb21wb25lbnREaWFsb2cgaW1wbGVtZW50cyBJQ29tcG9uZW50RGlhbG9nIHsKLQlwcm90ZWN0ZWQgTmV3Q29tcG9uZW50RGlhbG9nIGRpYWxvZzsKLQlwcm90ZWN0ZWQgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lOwotCXByb3RlY3RlZCBJRmlsZSBpRmlsZTsKLQlwcm90ZWN0ZWQgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JcHJvdGVjdGVkIElBU0RPYmplY3QgbmV3T2JqZWN0OwotCQotCXB1YmxpYyBXMTFOZXdDb21wb25lbnREaWFsb2coUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lLCBJRmlsZSBpRmlsZSwgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJdGhpcy5xdWFsaWZpZWROYW1lID0gcXVhbGlmaWVkTmFtZTsKLQkJdGhpcy5pRmlsZSA9IGlGaWxlOwotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JCQotCQlTaGVsbCBzaGVsbCA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCk7Ci0JCWlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FKSB7Ci0JCQlTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfTEFCRUxfTkVXX0JJTkRJTkc7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBiYXNlTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlQmluZGluZ05hbWUoZ2V0RGVmaW5pdGlvbigpLCAiTmV3QmluZGluZyIpOyAvLyROT04tTkxTLTEkCi0JCQlMaXN0IHVzZWROYW1lcyA9IE5hbWVVdGlsLmdldFVzZWRCaW5kaW5nTmFtZXMoZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWRpYWxvZyA9IG5ldyBOZXdDb21wb25lbnREaWFsb2coc2hlbGwsIGRpYWxvZ1RpdGxlLCBiYXNlTmFtZSwgdXNlZE5hbWVzKTsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoc2hlbGwsIEFTREVkaXRvckNTSGVscElkcy5ORVdfQklORElOR19ESUFMT0cpOwotCQl9Ci0JCWVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSkgewotCQkJU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX0xBQkVMX05FV19QT1JUVFlQRTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGJhc2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0VHlwZU5hbWUoZ2V0RGVmaW5pdGlvbigpLCAiTmV3UG9ydFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJTGlzdCB1c2VkTmFtZXMgPSBOYW1lVXRpbC5nZXRVc2VkUG9ydFR5cGVOYW1lcyhnZXREZWZpbml0aW9uKCkpOwotCQkJZGlhbG9nID0gbmV3IE5ld0NvbXBvbmVudERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGJhc2VOYW1lLCB1c2VkTmFtZXMpOwotCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChzaGVsbCwgQVNERWRpdG9yQ1NIZWxwSWRzLk5FV19QT1JUVFlQRV9ESUFMT0cpOwotCQl9Ci0JCWVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpIHsKLQkJCVN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9ORVdfTUVTU0FHRTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGJhc2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShnZXREZWZpbml0aW9uKCksICJOZXdNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQkJCUxpc3QgdXNlZE5hbWVzID0gTmFtZVV0aWwuZ2V0VXNlZE1lc3NhZ2VOYW1lcyhnZXREZWZpbml0aW9uKCkpOwotCQkJZGlhbG9nID0gbmV3IE5ld0NvbXBvbmVudERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGJhc2VOYW1lLCB1c2VkTmFtZXMpOwotCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChzaGVsbCwgQVNERWRpdG9yQ1NIZWxwSWRzLk5FV19NRVNTQUdFX0RJQUxPRyk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JCXJldHVybiAoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb24gZ2V0U2VsZWN0ZWRDb21wb25lbnQoKSB7Ci0JCVN0cmluZyBxdWFsaWZpZXIgPSBnZXREZWZpbml0aW9uKCkuZ2V0UHJlZml4KGdldERlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCVN0cmluZyBuYW1lID0gZGlhbG9nLmdldE5hbWUoKTsKLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24ocXVhbGlmaWVyLCBuYW1lLCBpRmlsZSk7Ci0JCXNwZWMuc2V0T2JqZWN0KG5ld09iamVjdCk7Ci0JCXJldHVybiBzcGVjOwotCX0KLQotCXB1YmxpYyBpbnQgY3JlYXRlQW5kT3BlbigpIHsKLQkJaW50IHJWYWx1ZSA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7Ci0JCQotCQlpZiAoclZhbHVlID09IFdpbmRvdy5PSykgewotCQkJLy8gQ3JlYXRlIHRoZSBuZXcgT2JqZWN0Ci0JCQlpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSkgewotCQkJCVcxMUFkZEJpbmRpbmdDb21tYW5kIGNvbW1hbmQgPSAoVzExQWRkQmluZGluZ0NvbW1hbmQpIGRlc2NyaXB0aW9uLmdldEFkZEJpbmRpbmdDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXROZXdCaW5kaW5nTmFtZShkaWFsb2cuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBleGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIE9iamVjdCBuZXdXU0RMT2JqZWN0ID0gY29tbWFuZC5nZXROZXdCaW5kaW5nKCk7Ci0JCQkgICAgbmV3T2JqZWN0ID0gKElBU0RPYmplY3QpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KChOb3RpZmllcikgbmV3V1NETE9iamVjdCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpIHsKLQkJCQlXMTFBZGRJbnRlcmZhY2VDb21tYW5kIGNvbW1hbmQgPSAoVzExQWRkSW50ZXJmYWNlQ29tbWFuZCkgZGVzY3JpcHRpb24uZ2V0QWRkSW50ZXJmYWNlQ29tbWFuZCgpOwotCQkJCWNvbW1hbmQuc2V0TmV3UG9ydFR5cGVOYW1lKGRpYWxvZy5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgT2JqZWN0IG5ld1dTRExPYmplY3QgPSBjb21tYW5kLmdldE5ld1BvcnRUeXBlKCk7Ci0JCQkgICAgbmV3T2JqZWN0ID0gKElBU0RPYmplY3QpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KChOb3RpZmllcikgbmV3V1NETE9iamVjdCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKSB7Ci0JCQkJVzExQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IChXMTFBZGRNZXNzYWdlQ29tbWFuZCkgZGVzY3JpcHRpb24uZ2V0QWRkTWVzc2FnZUNvbW1hbmQoKTsKLQkJCQljb21tYW5kLnNldE5ld01lc3NhZ2VOYW1lKGRpYWxvZy5nZXROYW1lKCkpOwotCQkJCWV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgT2JqZWN0IG5ld1dTRExPYmplY3QgPSBjb21tYW5kLmdldE5ld01lc3NhZ2UoKTsKLQkJCSAgICBuZXdPYmplY3QgPSAoSUFTRE9iamVjdCkgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoKE5vdGlmaWVyKSBuZXdXU0RMT2JqZWN0KTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJWYWx1ZTsKLQl9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGUoQ29tbWFuZCBjb21tYW5kKSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotICAgICAgICAgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbW1hbmQuZXhlY3V0ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODM0NWRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFCcm93c2VDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFOZXdDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFNldENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlciBpbXBsZW1lbnRzIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHsKLQlwcm90ZWN0ZWQgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JcHJvdGVjdGVkIElGaWxlIGlGaWxlOwotCQotCXB1YmxpYyBXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIoVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIElGaWxlIGlGaWxlKSB7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQkJdGhpcy5pRmlsZSA9IGlGaWxlOwotCX0KLQkKLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXRCcm93c2VEaWFsb2coKSB7Ci0JCXJldHVybiBuZXcgVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nKElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBpRmlsZSwgZGVzY3JpcHRpb24pOwotCX0KLQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldE5ld0RpYWxvZygpIHsKLQkJcmV0dXJuIG5ldyBXMTFOZXdDb21wb25lbnREaWFsb2coSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIGlGaWxlLCBkZXNjcmlwdGlvbik7Ci0JfQotCQotCXByaXZhdGUgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkgewotCQlyZXR1cm4gKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIG1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShPYmplY3QgcmVmZXJlbmNpbmdPYmplY3QsIENvbXBvbmVudFNwZWNpZmljYXRpb24gcmVmZXJlbmNlZENvbXBvbmVudCkgewotCQlXMTFFbmRQb2ludCB3MTFFbmRQb2ludCA9IChXMTFFbmRQb2ludCkgcmVmZXJlbmNpbmdPYmplY3Q7Ci0JCU9iamVjdCBiaW5kaW5nT2JqZWN0ID0gcmVmZXJlbmNlZENvbXBvbmVudC5nZXRPYmplY3QoKTsKLQkJaWYgKGJpbmRpbmdPYmplY3QgPT0gbnVsbCkgewotCQkJLy8gTmVlZCB0byBmaWd1cmUgb3V0IHRoZSBJQmluZGluZyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBDb21wb25lbnRTcGVjaWZpY2F0aW9uCi0KLQkJfQotCQkKLQkJaWYgKGJpbmRpbmdPYmplY3QgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQlQb3J0IHBvcnQgPSAoUG9ydCkgdzExRW5kUG9pbnQuZ2V0VGFyZ2V0KCk7Ci0JCQlXU0RMU2V0Q29tcG9uZW50SGVscGVyIGhlbHBlciA9IG5ldyBXU0RMU2V0Q29tcG9uZW50SGVscGVyKGlGaWxlLCBnZXREZWZpbml0aW9uKCkpOwotCQkJaGVscGVyLnNldFdTRExDb21wb25lbnQocG9ydCwgImJpbmRpbmciLCAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgYmluZGluZ09iamVjdCk7IC8vJE5PTi1OTFMtMSQKLQkJCQotCQkJQmluZGluZyBuZXdCaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOwotCQkJVzExU2V0QmluZGluZ0NvbW1hbmQudXBkYXRlUG9ydFByb3RvY29sKHBvcnQsIG5ld0JpbmRpbmcpOwotCQl9CQkKLQkJZWxzZSBpZiAoYmluZGluZ09iamVjdCBpbnN0YW5jZW9mIElCaW5kaW5nKXsKLQkJCUlCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGJpbmRpbmdPYmplY3Q7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSB3MTFFbmRQb2ludC5nZXRTZXRCaW5kaW5nQ29tbWFuZChiaW5kaW5nKTsKLQkJCUNvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQlzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQl9Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIGdldENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gZ2V0UXVpY2tQaWNrcygpIHsKLQkJTGlzdCBzcGVjTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCUl0ZXJhdG9yIGJpbmRpbmdzID0gZGVzY3JpcHRpb24uZ2V0QmluZGluZ3MoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoYmluZGluZ3MuaGFzTmV4dCgpKSB7Ci0JCQlJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBiaW5kaW5ncy5uZXh0KCk7Ci0JCQlTdHJpbmcgcXVhbGlmaWVyID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBuYW1lID0gYmluZGluZy5nZXROYW1lKCk7Ci0JCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24ocXVhbGlmaWVyLCBuYW1lLCBmaWxlKTsKLQkJCXNwZWMuc2V0T2JqZWN0KGJpbmRpbmcpOwotCQkJc3BlY0xpc3QuYWRkKHNwZWMpOwotCQl9Ci0KLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNBcnJheSA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW3NwZWNMaXN0LnNpemUoKV07Ci0JCXNwZWNMaXN0LnRvQXJyYXkoc3BlY0FycmF5KTsKLQkJCi0JCXJldHVybiBzcGVjQXJyYXk7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRIaXN0b3J5KCkgewotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gaGlzdG9yeSA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uWzBdOwotCQlyZXR1cm4gaGlzdG9yeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRUb0hpc3RvcnkoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnQpIHsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZWZlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFCcm93c2VDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFOZXdDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFNldENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyIGltcGxlbWVudHMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgewotCXByb3RlY3RlZCBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQlwcm90ZWN0ZWQgSUZpbGUgaUZpbGU7Ci0JCi0JcHVibGljIFcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBJRmlsZSBpRmlsZSkgewotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JCXRoaXMuaUZpbGUgPSBpRmlsZTsKLQl9Ci0JCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0QnJvd3NlRGlhbG9nKCkgewotCQlyZXR1cm4gbmV3IFcxMUJyb3dzZUNvbXBvbmVudERpYWxvZyhJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBpRmlsZSwgZGVzY3JpcHRpb24pOwotCX0KLQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldE5ld0RpYWxvZygpIHsKLQkJcmV0dXJuIG5ldyBXMTFOZXdDb21wb25lbnREaWFsb2coSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIChEZWZpbml0aW9uKSBkZXNjcmlwdGlvbi5nZXRUYXJnZXQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgbW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKE9iamVjdCByZWZlcmVuY2luZ09iamVjdCwgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiByZWZlcmVuY2VkQ29tcG9uZW50KSB7Ci0JCVcxMUJpbmRpbmcgdzExQmluZGluZyA9IChXMTFCaW5kaW5nKSByZWZlcmVuY2luZ09iamVjdDsKLQkJT2JqZWN0IGludGVyZmFjZU9iamVjdCA9IHJlZmVyZW5jZWRDb21wb25lbnQuZ2V0T2JqZWN0KCk7Ci0JCWlmIChpbnRlcmZhY2VPYmplY3QgPT0gbnVsbCkgewotCQkJLy8gTmVlZCB0byBmaWd1cmUgb3V0IHRoZSBJSW50ZXJmYWNlIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIENvbXBvbmVudFNwZWNpZmljYXRpb24KLQotCQl9Ci0JCQotCQlpZiAoaW50ZXJmYWNlT2JqZWN0IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIHcxMUJpbmRpbmcuZ2V0VGFyZ2V0KCk7Ci0JCQlXU0RMU2V0Q29tcG9uZW50SGVscGVyIGhlbHBlciA9IG5ldyBXU0RMU2V0Q29tcG9uZW50SGVscGVyKGlGaWxlLCBnZXREZWZpbml0aW9uKCkpOwotCQkJaGVscGVyLnNldFdTRExDb21wb25lbnQoYmluZGluZywgInR5cGUiLCAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaW50ZXJmYWNlT2JqZWN0KTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIElJbnRlcmZhY2UpewotCQkJSUludGVyZmFjZSBpbnRlcmZhemUgPSAoSUludGVyZmFjZSkgaW50ZXJmYWNlT2JqZWN0OwotCQkJQ29tbWFuZCBjb21tYW5kID0gdzExQmluZGluZy5nZXRTZXRJbnRlcmZhY2VDb21tYW5kKGludGVyZmF6ZSk7Ci0JCQlDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQlzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQl9Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIGdldENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRRdWlja1BpY2tzKCkgewotCQlMaXN0IHNwZWNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJSXRlcmF0b3IgaW50ZXJmYWNlcyA9IGRlc2NyaXB0aW9uLmdldEludGVyZmFjZXMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaW50ZXJmYWNlcy5oYXNOZXh0KCkpIHsKLQkJCUlJbnRlcmZhY2UgaW50ZXJmYXplID0gKElJbnRlcmZhY2UpIGludGVyZmFjZXMubmV4dCgpOwotCQkJU3RyaW5nIHF1YWxpZmllciA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgbmFtZSA9IGludGVyZmF6ZS5nZXROYW1lKCk7Ci0JCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24ocXVhbGlmaWVyLCBuYW1lLCBmaWxlKTsKLQkJCXNwZWMuc2V0T2JqZWN0KGludGVyZmF6ZSk7Ci0JCQlzcGVjTGlzdC5hZGQoc3BlYyk7Ci0JCX0KLQotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY0FycmF5ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bc3BlY0xpc3Quc2l6ZSgpXTsKLQkJc3BlY0xpc3QudG9BcnJheShzcGVjQXJyYXkpOwotCQkKLQkJcmV0dXJuIHNwZWNBcnJheTsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldEhpc3RvcnkoKSB7Ci0JCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bMF07Ci0JCXJldHVybiBoaXN0b3J5OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFRvSGlzdG9yeShDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudCkgewotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYzQ4NzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuVzExTmV3Q29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExTZXRDb21wb25lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIgaW1wbGVtZW50cyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciB7Ci0JcHJvdGVjdGVkIFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCXByb3RlY3RlZCBJRmlsZSBpRmlsZTsKLQkKLQlwdWJsaWMgVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBJRmlsZSBpRmlsZSkgewotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JCXRoaXMuaUZpbGUgPSBpRmlsZTsKLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXRCcm93c2VEaWFsb2coKSB7Ci0JCXJldHVybiBuZXcgVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nKElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBpRmlsZSwgZGVzY3JpcHRpb24pOwotCX0KLQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldE5ld0RpYWxvZygpIHsKLQkJcmV0dXJuIG5ldyBXMTFOZXdDb21wb25lbnREaWFsb2coSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUsIGlGaWxlLCBkZXNjcmlwdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JCXJldHVybiAoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIG1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShPYmplY3QgcmVmZXJlbmNpbmdPYmplY3QsIENvbXBvbmVudFNwZWNpZmljYXRpb24gcmVmZXJlbmNlZENvbXBvbmVudCkgewotCQlXMTFNZXNzYWdlUmVmZXJlbmNlIHcxMU1lc3NhZ2VSZWYgPSAoVzExTWVzc2FnZVJlZmVyZW5jZSkgcmVmZXJlbmNpbmdPYmplY3Q7Ci0JCU9iamVjdCBtZXNzYWdlT2JqZWN0ID0gcmVmZXJlbmNlZENvbXBvbmVudC5nZXRPYmplY3QoKTsKLQkJaWYgKG1lc3NhZ2VPYmplY3QgPT0gbnVsbCkgewotCQkJLy8gTmVlZCB0byBmaWd1cmUgb3V0IHRoZSBJTWVzc2FnZSBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBDb21wb25lbnRTcGVjaWZpY2F0aW9uCi0KLQkJfQotCQkKLQkJaWYgKG1lc3NhZ2VPYmplY3QgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWY9IChNZXNzYWdlUmVmZXJlbmNlKSB3MTFNZXNzYWdlUmVmLmdldFRhcmdldCgpOwotCQkJV1NETFNldENvbXBvbmVudEhlbHBlciBoZWxwZXIgPSBuZXcgV1NETFNldENvbXBvbmVudEhlbHBlcihpRmlsZSwgZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWhlbHBlci5zZXRXU0RMQ29tcG9uZW50KG1lc3NhZ2VSZWYsICJtZXNzYWdlIiwgKENvbXBvbmVudFNwZWNpZmljYXRpb24pIG1lc3NhZ2VPYmplY3QpOyAvLyROT04tTkxTLTEkCi0JCX0JCQotCQllbHNlIGlmIChtZXNzYWdlT2JqZWN0IGluc3RhbmNlb2YgVzExTWVzc2FnZSl7Ci0JCQkvLyBCZWxvdyBpcyBhIGxpdHRsZSBjb21wbGV4Li4uLiBUaGUgYWx0ZXJuYXRpdmUgd2FzIHRvIGhhdmUgSU1lc3NhZ2UgY29udGFpbiBhCi0JCQkvLyBnZXRTZXRNZXNzYWdlQ29tbWFuZCgpIHdoaWNoIHdvdWxkIGhhbmRsZSBhbGwgb2YgdGhpcyBidXQgZG9lcyBhIGdldFNldE1lc3NhZ2VDb21tYW5kKCkKLQkJCS8vIG1ha2Ugc2Vuc2UgYXQgdGhlIGdlbmVyaWMgbGV2ZWwuLi4uLgotCQkJVzExTWVzc2FnZSBpTWVzc2FnZSA9IChXMTFNZXNzYWdlKSBtZXNzYWdlT2JqZWN0OwotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjT2JqZWN0ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24oKTsKLQkJCXNwZWNPYmplY3Quc2V0TmFtZShpTWVzc2FnZS5nZXROYW1lKCkpOwotCQkJc3BlY09iamVjdC5zZXRNZXRhTmFtZShJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSk7Ci0JCQlzcGVjT2JqZWN0LnNldFF1YWxpZmllcihkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCQkKLQkJCVN0cmluZyBsb2NhdGlvbiA9ICgoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCkpLmdldExvY2F0aW9uKCk7Ci0JCQlTdHJpbmcgcGxhdGZvcm1SZXNvdXJjZSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0JICAgICAgICBpZiAobG9jYXRpb24gIT0gbnVsbCAmJiBsb2NhdGlvbi5zdGFydHNXaXRoKHBsYXRmb3JtUmVzb3VyY2UpKQotCSAgICAgICAgewotCSAgICAgICAgICBQYXRoIHBhdGggPSBuZXcgUGF0aChsb2NhdGlvbi5zdWJzdHJpbmcocGxhdGZvcm1SZXNvdXJjZS5sZW5ndGgoKSkpOwotCSAgICAgICAgICBzcGVjT2JqZWN0LnNldEZpbGUoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpKTsKLQkgICAgICAgIH0gIAotCQkJCi0JCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWY9IChNZXNzYWdlUmVmZXJlbmNlKSB3MTFNZXNzYWdlUmVmLmdldFRhcmdldCgpOwotCQkJV1NETFNldENvbXBvbmVudEhlbHBlciBoZWxwZXIgPSBuZXcgV1NETFNldENvbXBvbmVudEhlbHBlcihpRmlsZSwgZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWhlbHBlci5zZXRXU0RMQ29tcG9uZW50KG1lc3NhZ2VSZWYsICJtZXNzYWdlIiwgKENvbXBvbmVudFNwZWNpZmljYXRpb24pIHNwZWNPYmplY3QpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZ2V0Q29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcigpIHsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldFF1aWNrUGlja3MoKSB7Ci0JCUxpc3Qgc3BlY0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlJdGVyYXRvciBtZXNzYWdlcyA9IGRlc2NyaXB0aW9uLmdldE1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKG1lc3NhZ2VzLmhhc05leHQoKSkgewotCQkJSU1lc3NhZ2UgbWVzc2FnZSA9IChJTWVzc2FnZSkgbWVzc2FnZXMubmV4dCgpOwotCQkJU3RyaW5nIHF1YWxpZmllciA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgbmFtZSA9IG1lc3NhZ2UuZ2V0TmFtZSgpOwotCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQkKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKHF1YWxpZmllciwgbmFtZSwgZmlsZSk7Ci0JCQlzcGVjLnNldE9iamVjdChtZXNzYWdlKTsKLQkJCXNwZWNMaXN0LmFkZChzcGVjKTsKLQkJfQotCi0JCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBzcGVjQXJyYXkgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltzcGVjTGlzdC5zaXplKCldOwotCQlzcGVjTGlzdC50b0FycmF5KHNwZWNBcnJheSk7Ci0JCQotCQlyZXR1cm4gc3BlY0FycmF5OwotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gZ2V0SGlzdG9yeSgpIHsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRUb0hpc3RvcnkoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnQpIHsKLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZmUzNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50U2VhcmNoTGlzdFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIgaW1wbGVtZW50cyBJQ29tcG9uZW50U2VhcmNoTGlzdFByb3ZpZGVyIHsKLQkKLQlwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZVdTRExDb21wb25lbnRPYmplY3RzKElDb21wb25lbnRMaXN0IGxpc3QsIExpc3QgaW5wdXRDb21wb25lbnRzLCBRdWFsaWZpZWROYW1lIG1ldGFOYW1lKSB7Ci0JCUl0ZXJhdG9yIGl0ID0gaW5wdXRDb21wb25lbnRzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCVdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KSBpdC5uZXh0KCk7Ci0JCQlTdHJpbmcgbmFtZSA9IHdzZGxFbGVtZW50LmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHF1YWxpZmllciA9IHdzZGxFbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24oKTsKLQkJCWNvbXBvbmVudFNwZWMuc2V0TWV0YU5hbWUobWV0YU5hbWUpOwotCQkJY29tcG9uZW50U3BlYy5zZXROYW1lKG5hbWUpOwotCQkJY29tcG9uZW50U3BlYy5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsKLQkJCQotCQkJU3RyaW5nIGxvY2F0aW9uID0gd3NkbEVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldExvY2F0aW9uKCk7Ci0JCQlTdHJpbmcgcGxhdGZvcm1SZXNvdXJjZSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0JCQlpZiAobG9jYXRpb24gIT0gbnVsbCAmJiBsb2NhdGlvbi5zdGFydHNXaXRoKHBsYXRmb3JtUmVzb3VyY2UpKSB7Ci0JCQkJUGF0aCBwYXRoID0gbmV3IFBhdGgobG9jYXRpb24uc3Vic3RyaW5nKHBsYXRmb3JtUmVzb3VyY2UubGVuZ3RoKCkpKTsKLQkJCQlJRmlsZSByZXN1bHQgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7Ci0JCQkJaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0JCQkJCWNvbXBvbmVudFNwZWMuc2V0RmlsZShyZXN1bHQpOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJbGlzdC5hZGQoY29tcG9uZW50U3BlYyk7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIExpc3QgZ2V0V1NETEZpbGVJbXBvcnRzKExpc3Qgd3NkbEltcG9ydHMpIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlJdGVyYXRvciBpdCA9IHdzZGxJbXBvcnRzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCUltcG9ydEltcGwgaW1wb3J0SXRlbSA9IChJbXBvcnRJbXBsKSBpdC5uZXh0KCk7Ci0JCQlpbXBvcnRJdGVtLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOyAgICAgICAgICAvLyBMb2FkIGlmIG5lY2Vzc2FyeQotCQkJaWYgKGltcG9ydEl0ZW0uZ2V0RVNjaGVtYSgpID09IG51bGwpIHsKLQkJCQlsaXN0LmFkZChpbXBvcnRJdGVtKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIGxpc3Q7Ci0JfQotCQotCS8vVE9ETyAodHJ1bmcpIG1ha2UgdGhpcyBvbmUgYWJzdHJhY3Qgd2hlbiB3ZSBhcmUgaW4gZGV2ZWxvcG1lbnQgcGhhc2UgYWdhaW4KLQlwcm90ZWN0ZWQgTGlzdCBnZXRTZWFyY2hpbmdDb21wb25lbnRzKERlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbikgewotCQlyZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBnZXRJbXBvcnRlZENvbXBvbmVudHMoSUNvbXBvbmVudExpc3QgbGlzdCwgUXVhbGlmaWVkTmFtZSBtZXRhTmFtZSwgSGFzaE1hcCBleGNsdXNpb25zKSB7CQkKLQkJSXRlcmF0b3IgaW1wb3J0c0l0ID0gZ2V0V1NETEZpbGVJbXBvcnRzKGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKSkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGltcG9ydHNJdC5oYXNOZXh0KCkpIHsKLQkJCUltcG9ydCBpbXBvcnRJdGVtID0gKEltcG9ydCkgaW1wb3J0c0l0Lm5leHQoKTsKLQkJCVN0cmluZyBsb2NhdGlvbiA9IGltcG9ydEl0ZW0uZ2V0RGVmaW5pdGlvbigpLmdldERvY3VtZW50QmFzZVVSSSgpOwotCQkJZXhjbHVzaW9ucy5wdXQobG9jYXRpb24sIEJvb2xlYW4uVFJVRSApOwotCQkJRGVmaW5pdGlvbiBpbXBvcnREZWZpbml0aW9uID0gaW1wb3J0SXRlbS5nZXRFRGVmaW5pdGlvbigpOwotCQkJaWYgKGltcG9ydERlZmluaXRpb24gIT0gbnVsbCkKLQkJCXsKLQkJICAJICBMaXN0IGltcG9ydGVkQ29tcG9uZW50cyA9IGdldFNlYXJjaGluZ0NvbXBvbmVudHMoaW1wb3J0RGVmaW5pdGlvbik7CQkJCi0JCQkgIGNyZWF0ZVdTRExDb21wb25lbnRPYmplY3RzKGxpc3QsIGltcG9ydGVkQ29tcG9uZW50cywgbWV0YU5hbWUpOwotCQkJfQotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNlYXJjaE91dHNpZGVDdXJyZW50UmVzb3VyY2UoSUNvbXBvbmVudExpc3QgbGlzdCwgU2VhcmNoU2NvcGUgc2NvcGUsIFF1YWxpZmllZE5hbWUgbWV0YU5hbWUsIE1hcCBleGNsdXNpb25zKSB7Ci0JCWlmIChzY29wZSAhPSBudWxsKSB7Ci0JCQlXU0RMQ29tcG9uZW50RmluZGVyIGZpbmRlciA9IG5ldyBXU0RMQ29tcG9uZW50RmluZGVyKG1ldGFOYW1lKTsKLQkJCUl0ZXJhdG9yIGl0ID0gZmluZGVyLmdldFdvcmtiZW5jaFJlc291cmNlQ29tcG9uZW50cyhzY29wZSkuaXRlcmF0b3IoKTsgCi0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBpdGVtID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGl0Lm5leHQoKTsKLQkJCQlTdHJpbmcgaXRlbVVSSSA9IFVSSUhlbHBlci5nZXRQbGF0Zm9ybVVSSShpdGVtLmdldEZpbGUoKSk7Ci0JCQkJaWYgKGV4Y2x1c2lvbnMuZ2V0KGl0ZW1VUkkpID09IG51bGwpewotCQkJCQlsaXN0LmFkZChpdGVtKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDNjNzE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50TGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyIGV4dGVuZHMgV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIgewotCXB1YmxpYyBXU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlcihEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcG9wdWxhdGVDb21wb25lbnRMaXN0KElDb21wb25lbnRMaXN0IGxpc3QsIFNlYXJjaFNjb3BlIHNjb3BlLCBJUHJvZ3Jlc3NNb25pdG9yIHBtKSB7Ci0JCS8vIEdyYWIgZXhwbGljdGx5IGRlZmluZWQgY29tcG9uZW50cwotCQljcmVhdGVXU0RMQ29tcG9uZW50T2JqZWN0cyhsaXN0LCBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpLCBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSk7Ci0KLQkJLy8gRmlsZXMgZXhjbHVkZWQgaWYgd2Ugc2VhcmNoIHdpdGggdGhlIHNlYXJjaCBlbmdpbmUgbGF0ZXIKLQkJSGFzaE1hcCBleGNsdXNpb25zID0gbmV3IEhhc2hNYXAoKTsJCi0JCWV4Y2x1c2lvbnMucHV0KGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIEJvb2xlYW4uVFJVRSk7CQkKLQkJCi0JCS8vIEdyYWIgZGlyZWN0bHkgaW1wb3J0ZWQgY29tcG9uZW50cyBhbmQgdXBkYXRlIHRoZSBleGNsdXNpb25zICdsaXN0JwotCQlnZXRJbXBvcnRlZENvbXBvbmVudHMobGlzdCwgSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIGV4Y2x1c2lvbnMpOwotCi0JCXNlYXJjaE91dHNpZGVDdXJyZW50UmVzb3VyY2UobGlzdCwgc2NvcGUsIElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRTZWFyY2hpbmdDb21wb25lbnRzKERlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbikgewotCQlyZXR1cm4gaW1wb3J0RGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjY0MjRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLlNlYXJjaE1hdGNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgewotCSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW1hZ2UgQklORElOR19JTUFHRSA9ICBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2JpbmRpbmdfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbWFnZSBQT1JUVFlQRV9JTUFHRSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcG9ydHR5cGVfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbWFnZSBNRVNTQUdFX0lNQUdFID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9tZXNzYWdlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhYmxlKE9iamVjdCBjb21wb25lbnQpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRRdWFsaWZpZXIoT2JqZWN0IGNvbXBvbmVudCkgewotCSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKENvbXBvbmVudFNwZWNpZmljYXRpb24pY29tcG9uZW50KS5nZXRRdWFsaWZpZXIoKTsKLQkgICAgfSAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotCSAgICB7Ci0JICAgICAgcmVzdWx0ID0gKChXU0RMRWxlbWVudCkgY29tcG9uZW50KS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7IAotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgU2VhcmNoTWF0Y2gpCi0JICAgIHsKLQkgICAgICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSBnZXRRdWFsaWZpZWROYW1lRm9yU2VhcmNoTWF0Y2goKFNlYXJjaE1hdGNoKWNvbXBvbmVudCk7Ci0JICAgICAgaWYgKHF1YWxpZmllZE5hbWUgIT0gbnVsbCkKLQkgICAgICB7ICAKLQkgICAgICAgIHJlc3VsdCA9IHF1YWxpZmllZE5hbWUuZ2V0TmFtZXNwYWNlKCk7Ci0JICAgICAgfSAgICAKLQkgICAgfSAgCi0JICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKE9iamVjdCBjb21wb25lbnQpIHsKLQkgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKQotCSAgICB7Ci0JICAgICAgcmVzdWx0ID0gKChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWNvbXBvbmVudCkuZ2V0TmFtZSgpOwotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKFdTRExFbGVtZW50KWNvbXBvbmVudCkuZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZSgibmFtZSIpOyAgLy8kTk9OLU5MUy0xJAotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgU2VhcmNoTWF0Y2gpCi0JICAgIHsKLQkgICAgICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSBnZXRRdWFsaWZpZWROYW1lRm9yU2VhcmNoTWF0Y2goKFNlYXJjaE1hdGNoKWNvbXBvbmVudCk7Ci0JICAgICAgaWYgKHF1YWxpZmllZE5hbWUgIT0gbnVsbCkKLQkgICAgICB7ICAKLQkgICAgICAgIHJlc3VsdCA9IHF1YWxpZmllZE5hbWUuZ2V0TG9jYWxOYW1lKCk7Ci0JICAgICAgfSAgICAKLQkgICAgfSAgICAgIAotCSAgICByZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRGaWxlSWNvbihPYmplY3QgY29tcG9uZW50KSB7Ci0JCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3dzZGxfZmlsZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgSUZpbGUgZ2V0RmlsZShPYmplY3QgY29tcG9uZW50KSB7Ci0JICAgIElGaWxlIHJlc3VsdCA9IG51bGw7Ci0JICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKQotCSAgICB7Ci0JICAgICAgcmVzdWx0ID0gKChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWNvbXBvbmVudCkuZ2V0RmlsZSgpOwotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgU2VhcmNoTWF0Y2gpCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKFNlYXJjaE1hdGNoKWNvbXBvbmVudCkuZ2V0RmlsZSgpOwotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0JICAgIHsKLQkgICAgICBXU0RMRWxlbWVudCBjb25jcmV0ZUNvbXBvbmVudCA9IChXU0RMRWxlbWVudCkgY29tcG9uZW50OwotCSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGNvbmNyZXRlQ29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkgICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotCSAgICAgIHsKLQkgICAgICAgIC8vIFRPRE8gKGNzKSByZXZpc2l0IGFuZCB0ZXN0IG1vcmUKLQkgICAgICAgIC8vCi0JICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0JICAgICAgICBTdHJpbmcgcGxhdGZvcm1SZXNvdXJjZSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0JICAgICAgICBpZiAobG9jYXRpb24gIT0gbnVsbCAmJiBsb2NhdGlvbi5zdGFydHNXaXRoKHBsYXRmb3JtUmVzb3VyY2UpKQotCSAgICAgICAgewotCSAgICAgICAgICBQYXRoIHBhdGggPSBuZXcgUGF0aChsb2NhdGlvbi5zdWJzdHJpbmcocGxhdGZvcm1SZXNvdXJjZS5sZW5ndGgoKSkpOwotCSAgICAgICAgICByZXN1bHQgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7Ci0JICAgICAgICB9Ci0JICAgICAgfSAgCi0JICAgIH0KLQkgICAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgSUxhYmVsUHJvdmlkZXIgZ2V0TGFiZWxQcm92aWRlcigpIHsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCQotCSAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JICAgIFN0cmluZyByZXN1bHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCSAgICBTdHJpbmcgbmFtZSA9IGdldE5hbWUoZWxlbWVudCk7Ci0JICAgIGlmIChuYW1lICE9IG51bGwpIHsKLQkgICAgICByZXN1bHQgKz0gbmFtZTsKLQkgICAgfQotCSAgICByZXR1cm4gcmVzdWx0OwotCSAgfSAKLQkgIAotCSAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBjb21wb25lbnQpCi0JICB7Ci0JICAgIEltYWdlIHJlc3VsdCA9IG51bGw7Ci0JICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKQotCSAgICB7Ci0JICAgIAlRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSAoKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGNvbXBvbmVudCkuZ2V0TWV0YU5hbWUoKTsKLQkgICAgCWlmICggcXVhbGlmaWVkTmFtZSAhPSBudWxsICl7Ci0JICAgIAkJaWYgKCBxdWFsaWZpZWROYW1lLmVxdWFscyhJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSkpCi0JICAgIAkJCXJlc3VsdCA9IEJJTkRJTkdfSU1BR0U7Ci0JICAgIAkJZWxzZSBpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpKQotCSAgICAJCQlyZXN1bHQgPSBQT1JUVFlQRV9JTUFHRTsKLQkgICAgCQllbHNlIGlmICggcXVhbGlmaWVkTmFtZS5lcXVhbHMoSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpKQotCSAgICAJCQlyZXN1bHQgPSBNRVNTQUdFX0lNQUdFOwotCi0JICAgIAl9Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgU2VhcmNoTWF0Y2gpCi0JICAgIHsKLQkgICAgICBTZWFyY2hNYXRjaCBzZWFyY2hNYXRjaCA9IChTZWFyY2hNYXRjaCljb21wb25lbnQ7Ci0JICAgICAgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lID0gKFF1YWxpZmllZE5hbWUpc2VhcmNoTWF0Y2gubWFwLmdldCgibWV0YU5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCSAgICAgIGlmICggcXVhbGlmaWVkTmFtZSAhPSBudWxsICl7Ci0JICAgIAkgIGlmICggcXVhbGlmaWVkTmFtZS5lcXVhbHMoSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUpKQotCSAgICAJCSAgcmVzdWx0ID0gQklORElOR19JTUFHRTsKLQkgICAgCSAgZWxzZSBpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpKQotCSAgICAJCSAgcmVzdWx0ID0gUE9SVFRZUEVfSU1BR0U7Ci0JICAgIAkJZWxzZSBpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKSkKLQkgICAgCQkJcmVzdWx0ID0gTUVTU0FHRV9JTUFHRTsKLQotCSAgICAgIH0KLQkgICAgfSAgICAgIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBCaW5kaW5nKQotCSAgICAgIHJlc3VsdCA9IEJJTkRJTkdfSU1BR0U7ICAgICAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotCSAgICAgIHJlc3VsdCA9IFBPUlRUWVBFX0lNQUdFOwotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBNZXNzYWdlKQotCQkgICAgICByZXN1bHQgPSBNRVNTQUdFX0lNQUdFOwotCi0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0JCi0JcHJpdmF0ZSBRdWFsaWZpZWROYW1lIGdldFF1YWxpZmllZE5hbWVGb3JTZWFyY2hNYXRjaChTZWFyY2hNYXRjaCBtYXRjaCkgewotCQlRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSBudWxsOwotCQlPYmplY3QgbyA9IG1hdGNoLm1hcC5nZXQoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAobyAhPSBudWxsICYmIG8gaW5zdGFuY2VvZiBRdWFsaWZpZWROYW1lKQotCQl7ICAKLQkJCXF1YWxpZmllZE5hbWUgPSAoUXVhbGlmaWVkTmFtZSlvOwotCQl9ICAgICAgCi0JCXJldHVybiBxdWFsaWZpZWROYW1lOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQ29tcG9uZW50RmluZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudEZpbmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNiMzEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQ29tcG9uZW50RmluZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hFbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hNYXRjaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gudXRpbC5Db2xsZWN0aW5nU2VhcmNoUmVxdWVzdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudERlY2xhcmF0aW9uUGF0dGVybjsKLQotcHVibGljIGNsYXNzIFdTRExDb21wb25lbnRGaW5kZXIgewotCVF1YWxpZmllZE5hbWUgbWV0YU5hbWU7Ci0gICAgcHVibGljIFdTRExDb21wb25lbnRGaW5kZXIoUXVhbGlmaWVkTmFtZSBtZXRhTmFtZSkgewotICAgIAl0aGlzLm1ldGFOYW1lID0gbWV0YU5hbWU7Ci0gICAgfQotICAgIAotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGZpbmRDb21wb25lbnRzKFNlYXJjaEVuZ2luZSBzZWFyY2hFbmdpbmUsIExpc3QgbGlzdCwgU2VhcmNoU2NvcGUgc2VhcmNoU2NvcGUpCi0gICAgewotICAgICAgdHJ5IHsKLSAgICAgICAgICBDb2xsZWN0aW5nU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBDb2xsZWN0aW5nU2VhcmNoUmVxdWVzdG9yKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgWE1MQ29tcG9uZW50RGVjbGFyYXRpb25QYXR0ZXJuIHBhdHRlcm4gPSBuZXcgWE1MQ29tcG9uZW50RGVjbGFyYXRpb25QYXR0ZXJuKG5ldyBRdWFsaWZpZWROYW1lKCIqIiwgIioiKSwgbWV0YU5hbWUsIFNlYXJjaFBhdHRlcm4uUl9QQVRURVJOX01BVENIKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gVE9ETyAoY3MpIHJldGhpbmsgdGhlIGNvbW1lbnRlZCBvdXQgY29kZSBiZWxvdy4gIElzIHRoZXJlIHNvbWUgcmVhc29uIGZvciBuYXJyb3dpbmcgdG8gbGlzdCBvZiBzZWFyY2ggcGFydGljcGFudHM/Ci0gICAgICAgICAgLy8gSXQgc2VlbXMgdGhlIG9ubHkgYmVuZWZpdCBtYXkgYmUgdG8gZmlsdGVyIG91ciB4c2QgY29tcG9uZW50IGRlY2xhcmF0aW9ucyB0aGF0IGFyZW4ndCBkZWZpbmVkCi0gICAgICAgICAgLy8gaW4gc3RhbmQgYWxvbmUgd3NkbCBkb2N1bWVudHMuICBQZXJoYXBzIGl0J3MgYmVzdCB0byBkbyB0aGlzIHdpdGggYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBhcmcgb24gdGhlCi0gICAgICAgICAgLy8gZGVjbGFyYXRpb24gcGF0dGVybiBvciBwZXJoYXBzIHNpbXBseSBkb2luZyBzb21lICdwb3N0JyBmaWx0ZXJpbmcuCi0gICAgICAgICAgLy8KLSAgICAgICAgICAvL1N0cmluZyBwYXJ0aWNpcGFudElkID0gbWV0YU5hbWUuZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSA/Ci0gICAgICAgICAgLy8gICAgIm9yZy5lY2xpcHNlLndzdC53c2RsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiIDoKLSAgICAgICAgICAvLyAgICAib3JnLmVjbGlwc2Uud3N0LnhzZC5zZWFyY2guWFNEU2VhcmNoUGFydGljaXBhbnQiOyAgICAgICAgCQkgIAotICAgICAgICAgIC8vU2VhcmNoUGFydGljaXBhbnQgcGFydGljcGFudCA9IFNlYXJjaFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U2VhcmNoUGFydGljaXBhbnQocGFydGljaXBhbnRJZCk7ICAgICAgICAgCi0gICAgICAgICAgLy9TZWFyY2hQYXJ0aWNpcGFudFtdIHBhcnRpY2lwYW50cyA9IHsgcGFydGljcGFudCB9OyAgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gVE9ETyAoY3MpIEknbSBiZXR0aW5nIHdlJ2xsIG5lZWQgdG8gcHJvdmlkZSBzb21lIGhvb2sgaGVyZSB0byBhbGxvdyBleHRlbmRlcnMgdG8gY29uZmlndXJlCi0gICAgICAgICAgLy8gdGhlIHNlYXJjaCBvcHRpb25zLiAgQ3VycmVudGx5IHdlIGp1c3QgcGFzcyBpbiBudWxsLgotICAgICAgICAgIHNlYXJjaEVuZ2luZS5zZWFyY2gocGF0dGVybiwgcmVxdWVzdG9yLCBzZWFyY2hTY29wZSwgbnVsbCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gcmVxdWVzdG9yLmdldFJlc3VsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNlYXJjaE1hdGNoIG1hdGNoID0gKFNlYXJjaE1hdGNoKWkubmV4dCgpOwotICAgICAgICAgICAgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24oKTsKLSAgICAgICAgICAgIHNwZWMuc2V0TWV0YU5hbWUobWV0YU5hbWUpOwotICAgICAgICAgICAgc3BlYy5zZXRGaWxlKG1hdGNoLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE9iamVjdCBvID0gbWF0Y2gubWFwLmdldCgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBpZiAobyAhPSBudWxsICYmIG8gaW5zdGFuY2VvZiBRdWFsaWZpZWROYW1lKQotICAgICAgICAgICAgeyAgCi0gICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9IChRdWFsaWZpZWROYW1lKW87Ci0gICAgICAgICAgICAgIGlmIChxdWFsaWZpZWROYW1lLmdldExvY2FsTmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcGVjLnNldE5hbWUocXVhbGlmaWVkTmFtZS5nZXRMb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgc3BlYy5zZXRRdWFsaWZpZXIocXVhbGlmaWVkTmFtZS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQoc3BlYyk7Ci0gICAgICAgICAgICAgIH0gIAotICAgICAgICAgICAgfSAgCi0gICAgICAgICAgfSAgCi0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAvL3N0YXR1cy5hZGQoZS5nZXRTdGF0dXMoKSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyBMaXN0IGdldFdvcmtiZW5jaFJlc291cmNlQ29tcG9uZW50cyhTZWFyY2hTY29wZSBzY29wZSkgewotCi0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgU2VhcmNoRW5naW5lIHNlYXJjaEVuZ2luZSA9IG5ldyBTZWFyY2hFbmdpbmUoKTsKLSAgICAgICAgZmluZENvbXBvbmVudHMoc2VhcmNoRW5naW5lLCBsaXN0LCBzY29wZSk7ICAgIAotICAgICAgICByZXR1cm4gbGlzdDsgICAgICAgCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZTgyNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyIGV4dGVuZHMgV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIgewotCXB1YmxpYyBXU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBwb3B1bGF0ZUNvbXBvbmVudExpc3QoSUNvbXBvbmVudExpc3QgbGlzdCwgU2VhcmNoU2NvcGUgc2NvcGUsIElQcm9ncmVzc01vbml0b3IgcG0pIHsKLQkJLy8gR3JhYiBleHBsaWN0bHkgZGVmaW5lZCBjb21wb25lbnRzCi0JCWNyZWF0ZVdTRExDb21wb25lbnRPYmplY3RzKGxpc3QsIGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLCBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FKTsKLQotCQkvLyBGaWxlcyBleGNsdWRlZCBpZiB3ZSBzZWFyY2ggd2l0aCB0aGUgc2VhcmNoIGVuZ2luZSBsYXRlcgotCQlIYXNoTWFwIGV4Y2x1c2lvbnMgPSBuZXcgSGFzaE1hcCgpOwkKLQkJZXhjbHVzaW9ucy5wdXQoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgQm9vbGVhbi5UUlVFKTsJCQotCQkKLQkJLy8gR3JhYiBkaXJlY3RseSBpbXBvcnRlZCBjb21wb25lbnRzIGFuZCB1cGRhdGUgdGhlIGV4Y2x1c2lvbnMgJ2xpc3QnCi0JCWdldEltcG9ydGVkQ29tcG9uZW50cyhsaXN0LCBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQotCQlzZWFyY2hPdXRzaWRlQ3VycmVudFJlc291cmNlKGxpc3QsIHNjb3BlLCBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRTZWFyY2hpbmdDb21wb25lbnRzKERlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbikgewotCQlyZXR1cm4gaW1wb3J0RGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCk7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOGQ0ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5TZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIgZXh0ZW5kcyBXU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlciB7Ci0JcHVibGljIFdTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBwb3B1bGF0ZUNvbXBvbmVudExpc3QoSUNvbXBvbmVudExpc3QgbGlzdCwgU2VhcmNoU2NvcGUgc2NvcGUsIElQcm9ncmVzc01vbml0b3IgcG0pIHsKLQkJLy8gR3JhYiBleHBsaWN0bHkgZGVmaW5lZCBjb21wb25lbnRzCi0JCWNyZWF0ZVdTRExDb21wb25lbnRPYmplY3RzKGxpc3QsIGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCksIElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKTsKLQotCQkvLyBGaWxlcyBleGNsdWRlZCBpZiB3ZSBzZWFyY2ggd2l0aCB0aGUgc2VhcmNoIGVuZ2luZSBsYXRlcgotCQlIYXNoTWFwIGV4Y2x1c2lvbnMgPSBuZXcgSGFzaE1hcCgpOwkKLQkJZXhjbHVzaW9ucy5wdXQoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgQm9vbGVhbi5UUlVFKTsJCQotCQkKLQkJLy8gR3JhYiBkaXJlY3RseSBpbXBvcnRlZCBjb21wb25lbnRzIGFuZCB1cGRhdGUgdGhlIGV4Y2x1c2lvbnMgJ2xpc3QnCi0JCWdldEltcG9ydGVkQ29tcG9uZW50cyhsaXN0LCBJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSwgZXhjbHVzaW9ucyk7CQkKLQkJCi0JCXNlYXJjaE91dHNpZGVDdXJyZW50UmVzb3VyY2UobGlzdCwgc2NvcGUsIElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRTZWFyY2hpbmdDb21wb25lbnRzKERlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbikgewotCQlyZXR1cm4gaW1wb3J0RGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKTsKLQl9CQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDgzYmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFNldENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guSVhTRFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBleHRlbmRzCVhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciB7Ci0JcHVibGljIFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoSUZpbGUgY3VycmVudEZpbGUsIFhTRFNjaGVtYVtdIHNjaGVtYXMpIHsKLQkJc3VwZXIoY3VycmVudEZpbGUsIHNjaGVtYXMpOwotCX0KLQkKLQlwdWJsaWMgV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcihJRmlsZSBjdXJyZW50RmlsZSwgWFNEU2NoZW1hW10gc2NoZW1hcywgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXN1cGVyKGN1cnJlbnRGaWxlLCBudWxsKTsKLQkJaWYgKHNjaGVtYXMgPT0gbnVsbCB8fCBzY2hlbWFzLmxlbmd0aCA9PSAwKSB7Ci0JCQlzZXRTY2hlbWFzKGdldElubGluZVNjaGVtYXMoZGVzY3JpcHRpb24pKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIG1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShPYmplY3QgcmVmZXJlbmNpbmdPYmplY3QsIENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50KSB7Ci0JCWlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIEFkYXB0ZXIpIHsKLQkJCUFkYXB0ZXIgYWRhcHRlciA9IChBZGFwdGVyKSByZWZlcmVuY2luZ09iamVjdDsKLQkJCXJlZmVyZW5jaW5nT2JqZWN0ID0gYWRhcHRlci5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJaWYgKHJlZmVyZW5jaW5nT2JqZWN0IGluc3RhbmNlb2YgUGFydCkgewotCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQlpZiAoQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0JCQkJZmlsZSA9ICgoSUZpbGVFZGl0b3JJbnB1dCkgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkpLmdldEZpbGUoKTsKLQkJCX0KLQkJCQotCQkJaWYgKGNvbXBvbmVudC5pc05ldygpKSB7ICAKLQkJCQlpZiAoY29tcG9uZW50LmdldE1ldGFOYW1lKCkgPT0gSVhTRFNlYXJjaENvbnN0YW50cy5FTEVNRU5UX01FVEFfTkFNRSkgewotCQkJCQlBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgY29tcG9uZW50LmdldE5hbWUoKSk7Ci0JCQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkJCVN0cmluZyB0bnMgPSBjb21tYW5kLmdldFhTREVsZW1lbnQoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCQkJY29tcG9uZW50LnNldFF1YWxpZmllcih0bnMpOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJV1NETFNldENvbXBvbmVudEhlbHBlciBoZWxwZXIgPSBuZXcgV1NETFNldENvbXBvbmVudEhlbHBlcihmaWxlLCBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0WFNERWxlbWVudENvbXBvbmVudChwYXJ0LCBjb21wb25lbnQpOwotCQl9Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRRdWlja1BpY2tzKCkgewotLy8JCUVsZW1lbnRDb21wb25lbnRMaXN0IGxpc3QgPSBuZXcgRWxlbWVudENvbXBvbmVudExpc3QoKTsKLS8vCQkKLS8vCQlpZiAoQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0vLwkJCUlGaWxlIGZpbGUgPSAoKElGaWxlRWRpdG9ySW5wdXQpIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCk7Ci0vLwkJCVhTREVsZW1lbnRzU2VhcmNoTGlzdFByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IFhTREVsZW1lbnRzU2VhcmNoTGlzdFByb3ZpZGVyKGZpbGUsIHNjaGVtYXMpOwotLy8JCQlwcm92aWRlci5wb3B1bGF0ZUNvbXBvbmVudExpc3QobGlzdCwgbnVsbCwgbnVsbCk7Ci0vLwkJfQotLy8KLS8vCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWNzW10gPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltsaXN0LnNpemUoKV07Ci0vLwkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3Quc2l6ZSgpOyBpbmRleCsrKSB7Ci0vLwkJCXNwZWNzW2luZGV4XSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBsaXN0LmdldChpbmRleCk7Ci0vLwkJfQotCQkKLQkJcmV0dXJuIG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uWzBdOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTY2hlbWFzKFhTRFNjaGVtYVtdIHNjaGVtYXMpIHsKLQkJdGhpcy5zY2hlbWFzID0gc2NoZW1hczsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0RTY2hlbWFbXSBnZXRJbmxpbmVTY2hlbWFzKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlMaXN0IHR5cGVzID0gZGVzY3JpcHRpb24uZ2V0VHlwZXMoKTsKLQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVzLnNpemUoKTsgaW5kZXgrKykgewotCQkJVzExVHlwZSB0eXBlID0gKFcxMVR5cGUpIHR5cGVzLmdldChpbmRleCk7Ci0JCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzY2hlbWFzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjBlNTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFNldENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5kaWFsb2dzLk5ld1R5cGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLklYU0RTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyIGV4dGVuZHMgWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyIHsKLQkKLQlwdWJsaWMgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcihJRmlsZSBjdXJyZW50RmlsZSwgWFNEU2NoZW1hW10gc2NoZW1hcykgewotCQlzdXBlcihjdXJyZW50RmlsZSwgc2NoZW1hcyk7Ci0JfQotCQotCXB1YmxpYyBXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKElGaWxlIGN1cnJlbnRGaWxlLCBYU0RTY2hlbWFbXSBzY2hlbWFzLCBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJc3VwZXIoY3VycmVudEZpbGUsIG51bGwpOwotCQlpZiAoc2NoZW1hcyA9PSBudWxsIHx8IHNjaGVtYXMubGVuZ3RoID09IDApIHsKLQkJCXNldFNjaGVtYXMoZ2V0SW5saW5lU2NoZW1hcyhkZXNjcmlwdGlvbikpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldE5ld0RpYWxvZygpCi0JewotCQlpZiAoc2NoZW1hcy5sZW5ndGggPiAwKSB7Ci0JCQlOZXdUeXBlRGlhbG9nIG5ld1R5cGVEaWFsb2cgPSBuZXcgTmV3VHlwZURpYWxvZyhzY2hlbWFzWzBdKTsKLQkJCW5ld1R5cGVEaWFsb2cuYWxsb3dBbm9ueW1vdXNUeXBlKGZhbHNlKTsKLQkJCXJldHVybiBuZXdUeXBlRGlhbG9nOwotCQl9Ci0JCWVsc2UgewotCQkJTmV3VHlwZURpYWxvZyBuZXdUeXBlRGlhbG9nID0gbmV3IE5ld1R5cGVEaWFsb2coKTsKLQkJCW5ld1R5cGVEaWFsb2cuYWxsb3dBbm9ueW1vdXNUeXBlKGZhbHNlKTsKLQkJCXJldHVybiBuZXdUeXBlRGlhbG9nOwotCQl9Ci0JfQkKLQotCXB1YmxpYyB2b2lkIG1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShPYmplY3QgcmVmZXJlbmNpbmdPYmplY3QsIENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50KSB7Ci0JCWlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIEFkYXB0ZXIpIHsKLQkJCUFkYXB0ZXIgYWRhcHRlciA9IChBZGFwdGVyKSByZWZlcmVuY2luZ09iamVjdDsKLQkJCXJlZmVyZW5jaW5nT2JqZWN0ID0gYWRhcHRlci5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJaWYgKHJlZmVyZW5jaW5nT2JqZWN0IGluc3RhbmNlb2YgUGFydCkgewotCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQlpZiAoQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0JCQkJZmlsZSA9ICgoSUZpbGVFZGl0b3JJbnB1dCkgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkpLmdldEZpbGUoKTsKLQkJCX0KLQkJCQotCQkJaWYgKGNvbXBvbmVudC5pc05ldygpKSB7ICAKLQkJCQlBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGNvbXBvbmVudC5nZXROYW1lKCkpOwotCQkJCWlmIChjb21wb25lbnQuZ2V0TWV0YU5hbWUoKSA9PSBJWFNEU2VhcmNoQ29uc3RhbnRzLkNPTVBMRVhfVFlQRV9NRVRBX05BTUUpIHsKLQkJCQkJY29tbWFuZC5pc0NvbXBsZXhUeXBlKHRydWUpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJY29tbWFuZC5pc0NvbXBsZXhUeXBlKGZhbHNlKTsKLQkJCQl9Ci0JCQkJY29tbWFuZC5ydW4oKTsKLQkJCQlTdHJpbmcgdG5zID0gY29tbWFuZC5nZXRYU0RFbGVtZW50KCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQkJY29tcG9uZW50LnNldFF1YWxpZmllcih0bnMpOwotCQkJfQotCQkJCi0JCQlXU0RMU2V0Q29tcG9uZW50SGVscGVyIGhlbHBlciA9IG5ldyBXU0RMU2V0Q29tcG9uZW50SGVscGVyKGZpbGUsIHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCWhlbHBlci5zZXRYU0RUeXBlQ29tcG9uZW50KHBhcnQsIGNvbXBvbmVudCk7Ci0JCX0KLQkJZWxzZSBpZiAocmVmZXJlbmNpbmdPYmplY3QgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCXN1cGVyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShyZWZlcmVuY2luZ09iamVjdCwgY29tcG9uZW50KTsKLQkJfQotCQllbHNlIGlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZVVzZSkgewotCQkJCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTY2hlbWFzKFhTRFNjaGVtYVtdIHNjaGVtYXMpIHsKLQkJdGhpcy5zY2hlbWFzID0gc2NoZW1hczsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0RTY2hlbWFbXSBnZXRJbmxpbmVTY2hlbWFzKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlMaXN0IHR5cGVzID0gZGVzY3JpcHRpb24uZ2V0VHlwZXMoKTsKLQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVzLnNpemUoKTsgaW5kZXgrKykgewotCQkJVzExVHlwZSB0eXBlID0gKFcxMVR5cGUpIHR5cGVzLmdldChpbmRleCk7Ci0JCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzY2hlbWFzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9FeHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQxODBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9FeHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlclJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZWFkcyB0aGUgcGx1Z2luIG1hbmlmZXN0cyBhbmQgcmVnaXN0ZXJzIGVhY2ggZXh0ZW5zaWJpbGl0eSBpdGVtIHRyZWUgcHJvdmlkZXIKLSAqLwotcHVibGljIGNsYXNzIEV4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyUmVnaXN0cnkgZXh0ZW5kcyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFCRUxfUFJPVklERVJfUFJPUEVSVFkgPSAibGFiZWxQcm92aWRlckNsYXNzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX1BST1ZJREVSX1BST1BFUlRZID0gImNvbnRlbnRQcm92aWRlckNsYXNzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEFUVF9OQU1FUyA9IHsgImxhYmVsUHJvdmlkZXJDbGFzcyIsICJjb250ZW50UHJvdmlkZXJDbGFzcyIgfTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLSAgcHVibGljIElMYWJlbFByb3ZpZGVyIGdldExhYmVsUHJvdmlkZXIoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJldHVybiAoSUxhYmVsUHJvdmlkZXIpIGdldFByb3BlcnR5KG5hbWVzcGFjZSwgTEFCRUxfUFJPVklERVJfUFJPUEVSVFkpOwotICB9Ci0KLSAgcHVibGljIElUcmVlQ2hpbGRQcm92aWRlciBnZXRDb250ZW50UHJvdmlkZXIoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJldHVybiAoSVRyZWVDaGlsZFByb3ZpZGVyKSBnZXRQcm9wZXJ0eShuYW1lc3BhY2UsIENPTlRFTlRfUFJPVklERVJfUFJPUEVSVFkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0V4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ0Y2JkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlhTRFR5cGVTeXN0ZW1Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlciBpbXBsZW1lbnRzIElUeXBlU3lzdGVtUHJvdmlkZXIKLXsKLSAgcHJvdGVjdGVkIFdTRExFZGl0b3JFeHRlbnNpb25bXSBleHRlbnNpb25zOwotICBwcm90ZWN0ZWQgSVR5cGVTeXN0ZW1Qcm92aWRlcltdIHR5cGVTeXN0ZW1Qcm92aWRlcnM7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBPYmplY3RbXSBFTVBUWV9BUlJBWSA9IHt9OwotCi0gIHB1YmxpYyBFeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyKCkKLSAgewotICAgIHR5cGVTeXN0ZW1Qcm92aWRlcnMgPSBuZXcgSVR5cGVTeXN0ZW1Qcm92aWRlclsxXTsgCi0gICAgdHlwZVN5c3RlbVByb3ZpZGVyc1swXSA9IG5ldyBYU0RUeXBlU3lzdGVtUHJvdmlkZXIoKTsKLSAgfSAgICAgICAgICAKLSAgICAgICAgCi0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIGludCB0eXBlTmFtZUNhdGVnb3J5KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVN5c3RlbVByb3ZpZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZEFsbCh0eXBlU3lzdGVtUHJvdmlkZXJzW2ldLmdldEF2YWlsYWJsZVR5cGVOYW1lcyhkZWZpbml0aW9uLCB0eXBlTmFtZUNhdGVnb3J5KSk7Ci0gICAgfSAgIAotICAgIHJldHVybiBsaXN0OwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFhTRFNjaGVtYSBzY2hlbWEsIGludCB0eXBlTmFtZUNhdGVnb3J5KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVN5c3RlbVByb3ZpZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZEFsbCh0eXBlU3lzdGVtUHJvdmlkZXJzW2ldLmdldEF2YWlsYWJsZVR5cGVzKGRlZmluaXRpb24sIHNjaGVtYSwgdHlwZU5hbWVDYXRlZ29yeSkpOwotICAgIH0gICAKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlU3lzdGVtUHJvdmlkZXJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGxpc3QuYWRkQWxsKHR5cGVTeXN0ZW1Qcm92aWRlcnNbaV0uZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKGRlZmluaXRpb24pKTsKLSAgICB9ICAgICAKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0Q2F0ZWdvcnlGb3JUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIGludCByZXN1bHQgPSBVTktOT1dOX1RZUEU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlU3lzdGVtUHJvdmlkZXJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHR5cGVTeXN0ZW1Qcm92aWRlcnNbaV0uZ2V0Q2F0ZWdvcnlGb3JUeXBlTmFtZShkZWZpbml0aW9uLCB0eXBlTmFtZSk7Ci0gICAgICBpZiAocmVzdWx0ICE9IFVOS05PV05fVFlQRSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldFByZWZpeGVkTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKSB7Ci0gIAkgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVTeXN0ZW1Qcm92aWRlcnMubGVuZ3RoOyBpKyspCi0gICAgIHsKLSAgICAgICBsaXN0LmFkZEFsbCh0eXBlU3lzdGVtUHJvdmlkZXJzW2ldLmdldFByZWZpeGVkTmFtZXMoZGVmaW5pdGlvbiwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpKTsKLSAgICAgfSAgICAgCi0gICAgIHJldHVybiBsaXN0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2YwYWUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxPYmplY3QoT2JqZWN0IHBhcmVudE1vZGVsT2JqZWN0LCBFbGVtZW50W10gZWxlbWVudENoYWluLCBpbnQgc3RhcnQsIGludFtdIGVuZCk7Ci0gIHB1YmxpYyBOb2RlIGdldE5vZGUoT2JqZWN0IG1vZGVsT2JqZWN0KTsgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlUmVjb25jaWxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlUmVjb25jaWxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjkyZDNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JTm9kZVJlY29uY2lsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBAZGVwcmVhY3RlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElOb2RlUmVjb25jaWxlcgotewotICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE9iamVjdCBtb2RlbE9iamVjdCwgRWxlbWVudCBlbGVtZW50LCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBpbmRleCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVRyZWVDaGlsZFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVRyZWVDaGlsZFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYmY1MzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lUcmVlQ2hpbGRQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBhbGxvd3MgZXh0ZW5zaW9uIHdyaXRlcnMgdG8gcHJvdmlkZSBzcGVjaWFsaXplIHRyZWUgY29udGVudCBiZWhhdmlvdXIuCi0gKiBJdCBpcyBpbnRlbmRlZCB0byBiZWhhdmUgc2ltaWxhciB0byB0aGUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlci4KLSAqIFRoZSBtYWpvciBkaWZmZXJlbmNlIGlzIHRoYXQgdGhpcyBjbGFzcyBpcyBzaW1wbGlmaWVkIHNvIHRoYXQgb25seSBvbmUgbWV0aG9kIGlzIGludm9sdmVkLgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkgIAkKLSAqLwotcHVibGljIGludGVyZmFjZSBJVHJlZUNoaWxkUHJvdmlkZXIKLXsKLQlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExNDgyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGludGVyZmFjZSBJVHlwZVN5c3RlbVByb3ZpZGVyCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOS05PV05fVFlQRSA9IDB4MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlVJTFRfSU5fVFlQRSA9IDB4MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9ERUZJTkVEX1NJTVBMRV9UWVBFID0gMHgyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSX0RFRklORURfQ09NUExFWF9UWVBFID0gMHg0OwotCi0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIGludCB0eXBlTmFtZUNhdGVnb3J5KTsKLSAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbik7ICAKLSAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlVHlwZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBYU0RTY2hlbWEgc2NoZW1hLCBpbnQgdHlwZU5hbWVDYXRlZ29yeSk7Ci0gIHB1YmxpYyBpbnQgZ2V0Q2F0ZWdvcnlGb3JUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSk7Ci0gIHB1YmxpYyBMaXN0IGdldFByZWZpeGVkTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZGI3OGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL05TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0gIHByb3RlY3RlZCBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fTE9BRElOR19FUlJPUiA9ICJQTFVHSU5fTE9BRElOR19FUlJPUiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBjbGFzc05hbWUsIEJ1bmRsZSBidW5kbGUpCi0gIHsKLSAgICBFeHRlbnNpb25JbmZvIGluZm8gPSAoRXh0ZW5zaW9uSW5mbykgbWFwLmdldChuYW1lc3BhY2VVUkkpOwotICAgIGlmIChpbmZvID09IG51bGwpCi0gICAgewotICAgICAgaW5mbyA9IG5ldyBTaW5nbGVQcm9wZXJ0eUV4dGVuc2lvbkluZm8oY2xhc3NOYW1lLCBidW5kbGUpOwotICAgICAgbWFwLnB1dChuYW1lc3BhY2VVUkksIGluZm8pOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcgbmFtZXNwYWNlVVJJLCBIYXNoTWFwIHByb3BlcnR5VG9DbGFzc05hbWVNYXAsIEJ1bmRsZSBidW5kbGUpCi0gIHsKLSAgICBFeHRlbnNpb25JbmZvIGluZm8gPSAoRXh0ZW5zaW9uSW5mbykgbWFwLmdldChuYW1lc3BhY2VVUkkpOwotICAgIGlmIChpbmZvID09IG51bGwpCi0gICAgewotICAgICAgaW5mbyA9IG5ldyBNdWx0aVByb3BlcnR5RXh0ZW5zaW9uSW5mbyhwcm9wZXJ0eVRvQ2xhc3NOYW1lTWFwLCBidW5kbGUpOwotICAgICAgbWFwLnB1dChuYW1lc3BhY2VVUkksIGluZm8pOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0KFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBFeHRlbnNpb25JbmZvIGluZm8gPSAoRXh0ZW5zaW9uSW5mbykgbWFwLmdldChuYW1lc3BhY2VVUkkpOwotICAgIHJldHVybiBpbmZvICE9IG51bGwgPyBpbmZvLmdldE9iamVjdCgiIikgOiBudWxsOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBwcm9wZXJ0eSkKLSAgewotICAgIEV4dGVuc2lvbkluZm8gaW5mbyA9IChFeHRlbnNpb25JbmZvKSBtYXAuZ2V0KG5hbWVzcGFjZVVSSSk7Ci0gICAgcmV0dXJuIGluZm8gIT0gbnVsbCA/IGluZm8uZ2V0T2JqZWN0KHByb3BlcnR5KSA6IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIGFic3RyYWN0IGNsYXNzIEV4dGVuc2lvbkluZm8KLSAgewotICAgIHByb3RlY3RlZCBCdW5kbGUgYnVuZGxlOwotCi0gICAgcHVibGljIEV4dGVuc2lvbkluZm8oQnVuZGxlIGJ1bmRsZSkKLSAgICB7Ci0gICAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGdldE9iamVjdChTdHJpbmcgcHJvcGVydHkpOwotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBTaW5nbGVQcm9wZXJ0eUV4dGVuc2lvbkluZm8gZXh0ZW5kcyBFeHRlbnNpb25JbmZvCi0gIHsKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGNsYXNzTmFtZTsKLSAgICBwcm90ZWN0ZWQgT2JqZWN0IG9iamVjdDsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlcnJvcjsKLQotICAgIHB1YmxpYyBTaW5nbGVQcm9wZXJ0eUV4dGVuc2lvbkluZm8oU3RyaW5nIGNsYXNzTmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgICB7Ci0gICAgICBzdXBlcihidW5kbGUpOwotICAgICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRPYmplY3QoU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBDbGFzcyB0aGVDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3MoY2xhc3NOYW1lKTsKLSAgICAgICAgICBvYmplY3QgPSB0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIG9iamVjdCA9IFBMVUdJTl9MT0FESU5HX0VSUk9SOwotICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBvYmplY3QgIT0gUExVR0lOX0xPQURJTkdfRVJST1IgPyBvYmplY3QgOiBudWxsOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgTXVsdGlQcm9wZXJ0eUV4dGVuc2lvbkluZm8gZXh0ZW5kcyBFeHRlbnNpb25JbmZvCi0gIHsKLSAgICBwcm90ZWN0ZWQgSGFzaE1hcCBwcm9wZXJ0eVRvQ2xhc3NOYW1lVGFibGU7Ci0gICAgcHJvdGVjdGVkIEhhc2hNYXAgcHJvcGVydHlUb09iamVjdFRhYmxlID0gbmV3IEhhc2hNYXAoKTsKLQotICAgIHB1YmxpYyBNdWx0aVByb3BlcnR5RXh0ZW5zaW9uSW5mbyhIYXNoTWFwIHByb3BlcnRUb0NsYXNzTmFtZVRhYmxlLCBCdW5kbGUgYnVuZGxlKQotICAgIHsKLSAgICAgIHN1cGVyKGJ1bmRsZSk7Ci0gICAgICB0aGlzLnByb3BlcnR5VG9DbGFzc05hbWVUYWJsZSA9IHByb3BlcnRUb0NsYXNzTmFtZVRhYmxlOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsKLSAgICAgIFN0cmluZyBjbGFzc05hbWUgPSAoU3RyaW5nKSBwcm9wZXJ0eVRvQ2xhc3NOYW1lVGFibGUuZ2V0KHByb3BlcnR5KTsKLSAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gcHJvcGVydHlUb09iamVjdFRhYmxlLmdldChwcm9wZXJ0eSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIENsYXNzIHRoZUNsYXNzID0gYnVuZGxlLmxvYWRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgICAgICAgcmVzdWx0ID0gdGhlQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgIHByb3BlcnR5VG9PYmplY3RUYWJsZS5wdXQocHJvcGVydHksIHJlc3VsdCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRvT2JqZWN0VGFibGUucHV0KHByb3BlcnR5LCBQTFVHSU5fTE9BRElOR19FUlJPUik7Ci0gICAgICAgICAgICByZXN1bHQgPSBQTFVHSU5fTE9BRElOR19FUlJPUjsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0JICByZXR1cm4gcmVzdWx0ICE9IFBMVUdJTl9MT0FESU5HX0VSUk9SID8gcmVzdWx0IDogbnVsbDsgICAgICAKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckNvbmZpZ3VyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yQ29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmUwMDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuSVdTRExUb29sYmFyQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEVkaXRvckNvbmZpZ3VyYXRpb24gewotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETEVESVRPUkNPTkZJR1VSQVRJT05FWFRFTlNJT05JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5XU0RMRWRpdG9yRXh0ZW5zaW9uQ29uZmlndXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVSTkFMRURJVE9SQ09ORklHVVJBVElPTl9FWFRFTlNJT05JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbEVkaXRvckNvbmZpZ3VyYXRpb24iOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU05BTUUgPSAiY2xhc3MiOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBREFQVEVSRkFDVE9SWSA9ICJhZGFwdGVyRmFjdG9yeSI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xCQVJBQ1RJT04gPSAidG9vbGJhckFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZJR1VSRUZBQ1RPUlkgPSAiZmlndXJlRmFjdG9yeSI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVESVRQQVJURkFDVE9SWSA9ICJlZGl0UGFydEZhY3RvcnkiOyAvLyROT04tTkxTLTEkCi0KLQkgIExpc3QgZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID0gbnVsbDsKLQotCSAgcHVibGljIFdTRExFZGl0b3JDb25maWd1cmF0aW9uKCkKLQkgIHsKLQotCSAgfQotCi0JICBwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKQotCSAgewotCSAgICBpZiAoZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID09IG51bGwpCi0JICAgIHsKLQkgICAgICByZWFkV1NETENvbmZpZ3VyYXRpb25SZWdpc3RyeSgpOwotCSAgICB9Ci0JICAgIGlmICghZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmlzRW1wdHkoKSkKLQkgICAgewotCSAgICAgIHJldHVybiAoKFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzKSBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuZ2V0KDApKS5nZXRBZGFwdGVyRmFjdG9yeSgpOwotCSAgICB9Ci0JICAgIHJldHVybiBudWxsOwotCSAgfQotCi0JICBwdWJsaWMgRWRpdFBhcnRGYWN0b3J5IGdldEVkaXRQYXJ0RmFjdG9yeSgpCi0JICB7Ci0JICAgIGlmIChkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIHJlYWRXU0RMQ29uZmlndXJhdGlvblJlZ2lzdHJ5KCk7Ci0JICAgIH0KLQkgICAgaWYgKCFkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuaXNFbXB0eSgpKQotCSAgICB7Ci0JICAgICAgcmV0dXJuICgoV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMpIGRlZmluZWRFeHRlbnNpb25zTGlzdC5nZXQoMCkpLmdldEVkaXRQYXJ0RmFjdG9yeSgpOwotCSAgICB9Ci0JICAgIHJldHVybiBudWxsOwotCSAgfQotCi0vLwkgIHB1YmxpYyBJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5IGdldEZpZ3VyZUZhY3RvcnkoKQotLy8JICB7Ci0vLwkgICAgaWYgKGRlZmluZWRFeHRlbnNpb25zTGlzdCA9PSBudWxsKQotLy8JICAgIHsKLS8vCSAgICAgIHJlYWRXU0RMQ29uZmlndXJhdGlvblJlZ2lzdHJ5KCk7Ci0vLwkgICAgfQotLy8JICAgIGlmICghZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmlzRW1wdHkoKSkKLS8vCSAgICB7Ci0vLwkgICAgICByZXR1cm4gKChXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcykgZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmdldCgwKSkuZ2V0RmlndXJlRmFjdG9yeSgpOwotLy8JICAgIH0KLS8vCSAgICByZXR1cm4gbnVsbDsKLS8vCSAgfQotCi0JICBwdWJsaWMgTGlzdCBnZXRUb29sYmFyQWN0aW9ucygpCi0JICB7Ci0JICAgIGlmIChkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIHJlYWRXU0RMQ29uZmlndXJhdGlvblJlZ2lzdHJ5KCk7Ci0JICAgIH0KLQkgICAgaWYgKCFkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuaXNFbXB0eSgpKQotCSAgICB7Ci0JICAgICAgcmV0dXJuICgoV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMpIGRlZmluZWRFeHRlbnNpb25zTGlzdC5nZXQoMCkpLmdldEFjdGlvbkxpc3QoKTsKLQkgICAgfQotCSAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQkgIH0KLQotCSAgcHJvdGVjdGVkIE9iamVjdCBsb2FkQ2xhc3MoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIFN0cmluZyBjbGFzc1N0cmluZykKLQkgIHsKLQkgICAgU3RyaW5nIHBsdWdpbklkID0gZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKTsKLQotCSAgICB0cnkKLQkgICAgewotCSAgICAgIENsYXNzIHRoZUNsYXNzID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbklkKS5sb2FkQ2xhc3MoY2xhc3NTdHJpbmcpOwotCSAgICAgIE9iamVjdCBpbnN0YW5jZSA9IHRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0KLQkgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgICB7Ci0KLQkgICAgfQotCSAgICByZXR1cm4gbnVsbDsKLQkgIH0KLQotCSAgcHVibGljIHZvaWQgcmVhZFdTRExDb25maWd1cmF0aW9uUmVnaXN0cnkoKQotCSAgewotCSAgICBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIHVwZGF0ZUxpc3QoSU5URVJOQUxFRElUT1JDT05GSUdVUkFUSU9OX0VYVEVOU0lPTklEKTsKLQkgICAgdXBkYXRlTGlzdChXU0RMRURJVE9SQ09ORklHVVJBVElPTkVYVEVOU0lPTklEKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdXBkYXRlTGlzdChTdHJpbmcgSUQpCi0JICB7Ci0JICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHdzZGxFZGl0b3JFeHRlbnNpb25MaXN0ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoSUQpOwotCi0JICAgIGJvb2xlYW4gZGVmaW5lZEV4dGVuc2lvbnNFeGlzdCA9ICh3c2RsRWRpdG9yRXh0ZW5zaW9uTGlzdCAhPSBudWxsICYmIHdzZGxFZGl0b3JFeHRlbnNpb25MaXN0Lmxlbmd0aCA+IDApOwotCi0JICAgIGRlZmluZWRFeHRlbnNpb25zTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCSAgICBpZiAoZGVmaW5lZEV4dGVuc2lvbnNFeGlzdCkKLQkgICAgewotCSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbEVkaXRvckV4dGVuc2lvbkxpc3QubGVuZ3RoOyBpKyspCi0JICAgICAgewotCSAgICAgICAgV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcygpOwotCSAgICAgICAgZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmFkZChwcm9wZXJ0aWVzKTsKLQotCSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSB3c2RsRWRpdG9yRXh0ZW5zaW9uTGlzdFtpXTsKLQkgICAgICAgIFN0cmluZyBhZGFwdGVyRmFjdG9yeUNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQURBUFRFUkZBQ1RPUlkpOwotCSAgICAgICAgaWYgKGFkYXB0ZXJGYWN0b3J5Q2xhc3MgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGxvYWRDbGFzcyhlbGVtZW50LCBhZGFwdGVyRmFjdG9yeUNsYXNzKTsKLQkgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEFkYXB0ZXJGYWN0b3J5KQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgcHJvcGVydGllcy5zZXRBZGFwdGVyRmFjdG9yeSgoQWRhcHRlckZhY3RvcnkpIG9iamVjdCk7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQotLy8JICAgICAgICBTdHJpbmcgZmlndXJlRmFjdG9yeUNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoRklHVVJFRkFDVE9SWSk7Ci0vLwkgICAgICAgIGlmIChmaWd1cmVGYWN0b3J5Q2xhc3MgIT0gbnVsbCkKLS8vCSAgICAgICAgewotLy8JICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBsb2FkQ2xhc3MoZWxlbWVudCwgZmlndXJlRmFjdG9yeUNsYXNzKTsKLS8vCSAgICAgICAgICBJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5IGZpZ3VyZUZhY3RvcnkgPSBudWxsOwotLy8JICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5KQotLy8JICAgICAgICAgIHsKLS8vCSAgICAgICAgICAgIGZpZ3VyZUZhY3RvcnkgPSAoSUV4dGVuZGVkRmlndXJlRmFjdG9yeSkgb2JqZWN0OwotLy8JICAgICAgICAgICAgcHJvcGVydGllcy5zZXRGaWd1cmVGYWN0b3J5TGlzdChmaWd1cmVGYWN0b3J5KTsKLS8vCSAgICAgICAgICB9Ci0vLwkgICAgICAgIH0KLQkgICAgICAgIAotCSAgICAgICAgU3RyaW5nIGVkaXRQYXJ0RmFjdG9yeUNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoRURJVFBBUlRGQUNUT1JZKTsKLQkgICAgICAgIGlmIChlZGl0UGFydEZhY3RvcnlDbGFzcyAhPSBudWxsKQotCSAgICAgICAgewotCSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gbG9hZENsYXNzKGVsZW1lbnQsIGVkaXRQYXJ0RmFjdG9yeUNsYXNzKTsKLQkgICAgICAgICAgRWRpdFBhcnRGYWN0b3J5IGVkaXRQYXJ0RmFjdG9yeSA9IG51bGw7Ci0JICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFZGl0UGFydEZhY3RvcnkpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBlZGl0UGFydEZhY3RvcnkgPSAoRWRpdFBhcnRGYWN0b3J5KSBvYmplY3Q7Ci0JICAgICAgICAgICAgcHJvcGVydGllcy5zZXRFZGl0UGFydEZhY3RvcnlMaXN0KGVkaXRQYXJ0RmFjdG9yeSk7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQotCSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gdG9vbGJhckFjdGlvbnMgPSBlbGVtZW50LmdldENoaWxkcmVuKFRPT0xCQVJBQ1RJT04pOwotCSAgICAgICAgTGlzdCBhY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICAgICAgaWYgKHRvb2xiYXJBY3Rpb25zICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdG9vbGJhckFjdGlvbnMubGVuZ3RoOyBqKyspCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgYWN0aW9uRWxlbWVudCA9IHRvb2xiYXJBY3Rpb25zW2pdOwotCSAgICAgICAgICAgIFN0cmluZyBhY3Rpb25DbGFzcyA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKENMQVNTTkFNRSk7Ci0JICAgICAgICAgICAgSVdTRExUb29sYmFyQWN0aW9uIGFjdGlvbiA9IG51bGw7Ci0JICAgICAgICAgICAgaWYgKGFjdGlvbkNsYXNzICE9IG51bGwpCi0JICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGxvYWRDbGFzcyhhY3Rpb25FbGVtZW50LCBhY3Rpb25DbGFzcyk7Ci0JICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVdTRExUb29sYmFyQWN0aW9uKQotCSAgICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgICBhY3Rpb24gPSAoSVdTRExUb29sYmFyQWN0aW9uKSBvYmplY3Q7Ci0JICAgICAgICAgICAgICAgIGFjdGlvbkxpc3QuYWRkKGFjdGlvbik7Ci0JICAgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgICBwcm9wZXJ0aWVzLnNldEFjdGlvbkxpc3QoYWN0aW9uTGlzdCk7Ci0KLQotCi0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0JfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yRXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYmM5NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgV1NETEVkaXRvckV4dGVuc2lvbgoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPVVRMSU5FX1RSRUVfQ09OVEVOVF9QUk9WSURFUiA9IDE7ICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VUTElORV9MQUJFTF9QUk9WSURFUiA9IDI7ICAgICAgICAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9BQ1RJT05fQ09OVFJJQlVUT1IgPSAzOyAgICAgICAgICAvLyBub2RlCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVEFJTFNfVklFV0VSX1BST1ZJREVSID0gNDsgICAgICAgICAgLy8gbm9kZQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVESVRfUEFSVF9GQUNUT1JZID0gNTsgICAgICAgICAgICAgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1NZU1RFTV9QUk9WSURFUiA9IDY7ICAgICAgICAgICAgIC8vIHJlcSdkIGZvciB0eXBlIHN5c3RlbSBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9ERV9SRUNPTkNJTEVSID0gNzsgICAgICAgICAgICAgICAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PREVfQVNTT0NJQVRJT05fUFJPVklERVIgPSA4OyAgICAgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT0RFTF9RVUVSWV9DT05UUklCVVRPUiA9IDk7ICAgICAgICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9TT1VSQ0VfUFJPVklERVIgPSAxMDsgICAgICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfU0VDVElPTl9ERVNDUklQVE9SX1BST1ZJREVSID0gMTE7ICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhTRF9ERUxFVEVfQUNUSU9OID0gMTI7Ci0gIAotICBib29sZWFuIGlzRXh0ZW5zaW9uVHlwZVN1cHBvcnRlZChpbnQgdHlwZSk7Ci0gIGJvb2xlYW4gaXNBcHBsaWNhYmxlKE9iamVjdCBtb2RlbE9iamVjdCk7Ci0gIE9iamVjdCBjcmVhdGVFeHRlbnNpb25PYmplY3QoaW50IHR5cGUsIElFZGl0b3JQYXJ0IGVkaXRvcik7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4NDU5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMKLXsKLSAgQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7Ci0vLyAgSUV4dGVuZGVkRmlndXJlRmFjdG9yeSBmaWd1cmVGYWN0b3J5OwotICBFZGl0UGFydEZhY3RvcnkgZWRpdFBhcnRGYWN0b3J5OwotICBMaXN0IGFjdGlvbkxpc3Q7Ci0KLSAgcHVibGljIFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzKCkKLSAgewotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25MaXN0KExpc3QgYWN0aW9uTGlzdCkKLSAgewotICAgIHRoaXMuYWN0aW9uTGlzdCA9IGFjdGlvbkxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBZGFwdGVyRmFjdG9yeShBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkKLSAgewotICAgIHRoaXMuYWRhcHRlckZhY3RvcnkgPSBhZGFwdGVyRmFjdG9yeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVkaXRQYXJ0RmFjdG9yeUxpc3QoRWRpdFBhcnRGYWN0b3J5IGVkaXRQYXJ0RmFjdG9yeSkKLSAgewotICAgIHRoaXMuZWRpdFBhcnRGYWN0b3J5ID0gZWRpdFBhcnRGYWN0b3J5OwotICB9Ci0KLS8vICBwdWJsaWMgdm9pZCBzZXRGaWd1cmVGYWN0b3J5TGlzdChJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5IGZpZ3VyZUZhY3RvcnkpCi0vLyAgewotLy8gICAgdGhpcy5maWd1cmVGYWN0b3J5ID0gZmlndXJlRmFjdG9yeTsKLS8vICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QWN0aW9uTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uTGlzdDsKLSAgfQotCi0gIHB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gYWRhcHRlckZhY3Rvcnk7Ci0gIH0KLQotICBwdWJsaWMgRWRpdFBhcnRGYWN0b3J5IGdldEVkaXRQYXJ0RmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gZWRpdFBhcnRGYWN0b3J5OwotICB9Ci0KLS8vICBwdWJsaWMgSUV4dGVuZGVkRmlndXJlRmFjdG9yeSBnZXRGaWd1cmVGYWN0b3J5KCkKLS8vICB7Ci0vLyAgICByZXR1cm4gZmlndXJlRmFjdG9yeTsKLS8vICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NjdlOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7ICAgICAgCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RDb21wb25lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFdTRExOb2RlQXNzb2NpYXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxPYmplY3QoT2JqZWN0IHBhcmVudE1vZGVsT2JqZWN0LCBFbGVtZW50W10gZWxlbWVudENoYWluLCBpbnQgc3RhcnQsIGludFtdIGVuZCkKLSAgeyAgICAgICAgICAgICAgICAgCi0gICAgT2JqZWN0IGN1cnJlbnRPYmplY3QgPSBwYXJlbnRNb2RlbE9iamVjdDsKLSAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbGVtZW50Q2hhaW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgT2JqZWN0IG8gPSBnZXRNb2RlbE9iamVjdEhlbHBlcihjdXJyZW50T2JqZWN0LCBlbGVtZW50Q2hhaW5baV0pOwotICAgICAgaWYgKG8gPT0gbnVsbCkKLSAgICAgIHsgICAgICAgICAgICAgIAotICAgICAgICBlbmRbMF0gPSBpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gICAgICAgICAgICAKLSAgICAgIGVsc2UKLSAgICAgIHsgICAgICAgICAgICAgIAotICAgICAgICBjdXJyZW50T2JqZWN0ID0gbzsKLSAgICAgIH0KLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIGN1cnJlbnRPYmplY3QgIT0gcGFyZW50TW9kZWxPYmplY3QgPyBjdXJyZW50T2JqZWN0IDogbnVsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICB9Ci0KLSAgcHVibGljIE5vZGUgZ2V0Tm9kZShPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLSAgICAgIHJldHVybiAoKFdTRExFbGVtZW50SW1wbCltb2RlbE9iamVjdCkuZ2V0RWxlbWVudCgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0gICAgICAKLSAgcHJvdGVjdGVkIE9iamVjdCBnZXRNb2RlbE9iamVjdEhlbHBlcihPYmplY3QgcGFyZW50T2JqZWN0LCBFbGVtZW50IGVsZW1lbnROb2RlKQotICB7ICAgICAgICAgIAotCQlPYmplY3QgcmVzdWx0ID0gbnVsbDsKLQkJQ29sbGVjdGlvbiBjaGlsZENvbXBvbmVudExpc3QgPSAoKFdTRExFbGVtZW50SW1wbCkgcGFyZW50T2JqZWN0KS5nZXRXU0RMQ29udGVudHMoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gY2hpbGRDb21wb25lbnRMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJewotCQkJT2JqZWN0IG8gPSBpLm5leHQoKTsKLQkJCUVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0KLSAgICAgIGlmIChvICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgICB7Ci0gICAgICAgICAgZWxlbWVudCA9ICgoV1NETEVsZW1lbnRJbXBsKW8pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgWFNEQ29tcG9uZW50SW1wbCkKLSAgICAgICAgewotICAgICAgICAgIGVsZW1lbnQgPSAoKFhTRENvbXBvbmVudEltcGwpbykuZ2V0RWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLQkJCWlmIChlbGVtZW50ID09IGVsZW1lbnROb2RlKQotCQkJewotCQkJCXJlc3VsdCA9IG87Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLSAgfQotfSAgICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0V4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0V4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzMTQ3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9FeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGludGVyZmFjZSBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIAotewotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkQ29udGV4dChFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpOyAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9IdHRwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvSHR0cEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYwOGY2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9IdHRwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIEh0dHBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGltcGxlbWVudHMgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcgoteyAgCi0gIHB1YmxpYyBIdHRwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcigpCi0gIHsKLSAgfSAgCQotCQotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkQ29udGV4dChFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsgICAKLSAgICAKLSAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50LmdldExvY2FsTmFtZSgpOwotCWlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImJpbmRpbmciKSkgLy8kTk9OLU5MUy0xJAotCXsKLQkgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImJpbmRpbmciKTsgCSAgIC8vJE5PTi1OTFMtMSQKLQl9CSAgCi0JZWxzZSBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJvcGVyYXRpb24iKSkgLy8kTk9OLU5MUy0xJAotCXsKLQkgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoIm9wZXJhdGlvbiIpOyAgLy8kTk9OLU5MUy0xJAotCX0KLQllbHNlIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImlucHV0IikgfHwgIC8vJE5PTi1OTFMtMSQKLQkgICAgICAgICBwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoIm91dHB1dCIpKSAvLyROT04tTkxTLTEkCi0JewotCSAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiYm9keSIpIHx8ICAvLyROT04tTkxTLTEkCi0JICAgICAgICAgICBsb2NhbE5hbWUuZXF1YWxzKCJoZWFkZXIiKTsgCSAgIC8vJE5PTi1OTFMtMSQKLQl9CQotCWVsc2UgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygiZmF1bHQiKSkgLy8kTk9OLU5MUy0xJAotCXsKLQkgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImZhdWx0Iik7IAkgICAvLyROT04tTkxTLTEkCi0JfQotCWVsc2UgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygicG9ydCIpKSAvLyROT04tTkxTLTEkCi0JewotCSAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiYWRkcmVzcyIpOyAJICAgLy8kTk9OLU5MUy0xJAotCX0JICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvTWltZUV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL01pbWVFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4OWUwMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvTWltZUV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgTWltZUV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgaW1wbGVtZW50cyBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyCi17ICAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX05BTUVTUEFDRV9VUkk9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBNaW1lRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcigpCi0gIHsKLSAgfSAgCQotCQotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkQ29udGV4dChFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50LmdldExvY2FsTmFtZSgpOwotICAgIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZXNwYWNlID0gcGFyZW50RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAJaWYgKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwYXJlbnRFbGVtZW50TmFtZXNwYWNlKSkKLSAgCXsKLSAgICAJaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygiaW5wdXQiKSB8fCBwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoIm91dHB1dCIpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAJewotICAgIAkgIAlyZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJjb250ZW50IikgfHwgLy8kTk9OLU5MUy0xJAotCQkJCSAgICAgbG9jYWxOYW1lLmVxdWFscygibXVsdGlwYXJ0UmVsYXRlZCIpIHx8IC8vJE5PTi1OTFMtMSQKLQkJCQkgICAgIGxvY2FsTmFtZS5lcXVhbHMoIm1pbWVYbWwiKTsgICAgCSAgCSAvLyROT04tTkxTLTEkCi0gICAgCX0KLSAgCX0KLSAgCWVsc2UgaWYgKE1JTUVfTkFNRVNQQUNFX1VSSS5lcXVhbHMocGFyZW50RWxlbWVudE5hbWVzcGFjZSkpCi0gIAl7Ci0JCXJlc3VsdCA9IHRydWU7CQkJCQotICAJfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL1NvYXBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZTNlYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNvYXBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGltcGxlbWVudHMgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcgoteyAgIAotICBwdWJsaWMgU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIoKQotICB7Ci0gIH0gIAkKLQkKLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZENvbnRleHQoRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gIAlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0KLSAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50LmdldExvY2FsTmFtZSgpOyAgICAKLSAgICBpZiAocGFyZW50RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpKQotICAgIHsgCi0gICAgICAvLyBoZXJlIHdlIGFzc3VtZSB0aGUgcGFyZW50IGVsZW1lbnQgaXMgdGhlIFdTREwgYmluZGluZyAKLSAgICAgIC8vIHNrZWxldG9uIGFuZCB0aGF0IHRoZSAnbG9jYWxOYW1lJyBpcyB0aGUgU09BUCBleHRlbnNpb24gZWxlbWVudAotICAgICAgLy8gICAgICAKLSAgICAgIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImJpbmRpbmciKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJiaW5kaW5nIik7IAkgICAvLyROT04tTkxTLTEkCi0gICAgICB9CSAgCi0gICAgICBlbHNlIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoIm9wZXJhdGlvbiIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoIm9wZXJhdGlvbiIpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZSBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJpbnB1dCIpIHx8ICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJvdXRwdXQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJib2R5IikgfHwgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgbG9jYWxOYW1lLmVxdWFscygiaGVhZGVyIik7IAkgICAvLyROT04tTkxTLTEkCi0gICAgICB9CQotICAgICAgZWxzZSBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJmYXVsdCIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImZhdWx0Iik7IAkgICAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoInBvcnQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJhZGRyZXNzIik7IAkgICAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAgCi0gICAgICB9ICAKLSAgICB9ICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvWFNERXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvWFNERXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2RhYjc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL1hTREV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgWFNERXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciBpbXBsZW1lbnRzIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIKLXsgICAKLSAgcHVibGljIFhTREV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIoKQotICB7Ci0gIH0gIAkKLQkKLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZENvbnRleHQoRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gIAlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSA9IHBhcmVudEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0JaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygidHlwZXMiKSkgLy8kTk9OLU5MUy0xJAotCXsKLQkgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoInNjaGVtYSIpOyAJICAgLy8kTk9OLU5MUy0xJAotCX0JICAJCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JhY2suZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iYWNrLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkMWEyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JhY2suZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX25vdF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX25vdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWM3MzEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZF9hc2N0X3ZhbF9ub3Rfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZF9hc2N0X3ZhbF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYWQ5YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZGluZ19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTZlMmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZGluZ19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kaW5naGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZmZTU0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYnJvd3NlYnV0dG9uLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYnJvd3NlYnV0dG9uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0MDJmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2Jyb3dzZWJ1dHRvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2NvbXBsZXh0eXBlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2NvbXBsZXh0eXBlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwN2Y4NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9jb21wbGV4dHlwZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9kZWxldGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZGVsZXRlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OTIyYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9kZWxldGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZWxlbWVudF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9lbGVtZW50X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDVmMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9lbGVtZW50X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2Vycm9yX2NvLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZXJyb3JfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTlkY2NjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZXJyb3JfY28uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mYXVsdF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mYXVsdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjI4MTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmF1bHRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmlsZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9maWxlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYTdhMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9maWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZsZHJfZWwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mbGRyX2VsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAxYzEzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZsZHJfZWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mb3J3YXJkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZm9yd2FyZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYjY5OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mb3J3YXJkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaGlkZWJpbmRpbmcuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9oaWRlYmluZGluZy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NDZjZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9oaWRlYmluZGluZy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBhZGRyZXNzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBhZGRyZXNzX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMjBjMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYWRkcmVzc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYmluZGluZ19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYmluZGluZ19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDI4ZWYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cGJpbmRpbmdfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cG9wZXJhdGlvbl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwb3BlcmF0aW9uX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNDA0MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwb3BlcmF0aW9uX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHB1cmxlbmNvZGVkX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHB1cmxlbmNvZGVkX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTA1MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJsZW5jb2RlZF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJscmVwbGFjZW1lbnRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cHVybHJlcGxhY2VtZW50X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MzU4N2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJscmVwbGFjZW1lbnRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW1wb3J0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzI3NWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW1wb3J0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydGhlYWRlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbXBvcnRoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAwMGNiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydGhlYWRlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbnB1dF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbnB1dF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTZiMzQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW5wdXRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbWVzc2FnZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9tZXNzYWdlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkY2U0ODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9tZXNzYWdlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2VoZWFkZXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbWVzc2FnZWhlYWRlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmE3MTFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbWVzc2FnZWhlYWRlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uYW1lc3BhY2Vfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlM2YyNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uYW1lc3BhY2Vfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlZGVjbF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uYW1lc3BhY2VkZWNsX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNzlkMjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uYW1lc3BhY2VkZWNsX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25ld193c2RsX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25ld193c2RsX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMDAxMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uZXdfd3NkbF93aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vcGVyYXRpb25fb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MThhMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vcGVyYXRpb25fb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uYmluZGluZ19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vcGVyYXRpb25iaW5kaW5nX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzg2YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vcGVyYXRpb25iaW5kaW5nX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF9uby5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF9uby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YjlmOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfbm8uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMDkxOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X3llcy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF95ZXMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2FjYjk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X3llcy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BhZ2VfYmFubmVyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFnZV9iYW5uZXIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWJjMGIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFnZV9iYW5uZXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wYXJ0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BhcnRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxOWRmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BhcnRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OTQ5OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnR0eXBlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnR0eXBlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzI1Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZWhlYWRlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZWhlYWRlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZjYzAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydHR5cGVoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0Y21wbHhwbHR5cF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRjbXBseHBsdHlwX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiODY2NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRjbXBseHBsdHlwX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydGVsZW10X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydGVsZW10X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MmQxMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRlbGVtdF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRzbXBsdHlwX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydHNtcGx0eXBfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZmYzdjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydHNtcGx0eXBfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcXVpY2thc3Npc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9xdWlja2Fzc2lzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YWUyYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9xdWlja2Fzc2lzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2Vfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2VydmljZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE2YjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2VydmljZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zZXJ2aWNlaGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2VoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0ODE0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2VoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2ltcGxldHlwZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zaW1wbGV0eXBlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NWRiYjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zaW1wbGV0eXBlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDQyNmVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYWRkcmVzc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYWRkcmVzc19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgwYmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGFkZHJlc3Nfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGF0dF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYXR0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYjM2NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYXR0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBiaW5kaW5nX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBiaW5kaW5nX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNWY2YmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYmluZGluZ19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYm9keV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYm9keV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmQwMWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGJvZHlfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGZhdWx0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBmYXVsdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTZiMWY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGZhdWx0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBoZWFkZXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzJlYTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwaGVhZGVyZmF1bHRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcmZhdWx0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMGUxOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwaGVhZGVyZmF1bHRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcG9wZXJhdGlvbl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2Fwb3BlcmF0aW9uX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYzE5MTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2Fwb3BlcmF0aW9uX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3R5cGVzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3R5cGVzX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZjZmODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy90eXBlc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy92YWxpZGF0ZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3ZhbGlkYXRlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIzNDdhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3ZhbGlkYXRlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvd3NkbF9maWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWIxZjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvd3NkbF9maWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3hzZF9maWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3hzZF9maWxlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZGNmY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2RfZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2Rfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMveHNkX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZGNmY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2Rfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbGFiZWwvcHJvdmlkZXJzL0hUVFBMYWJlbFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9IVFRQTGFiZWxQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjhkZWZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbGFiZWwvcHJvdmlkZXJzL0hUVFBMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwubGFiZWwucHJvdmlkZXJzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgSFRUUExhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIEFERFJFU1MgICAgICAgICA9ICJhZGRyZXNzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBCSU5ESU5HICAgICAgICAgPSAiYmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgT1BFUkFUSU9OICAgICAgID0gIm9wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgVVJMX0VOQ09ERUQgICAgID0gInVybEVuY29kZWQiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIFVSTF9SRVBMQUNFTUVOVCA9ICJ1cmxSZXBsYWNlbWVudCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcm90ZWN0ZWQgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgSFRUUExhYmVsUHJvdmlkZXIoKQotICB7ICAgICAgICAgICAgICAgICAgICAKLSAgICBtYXAucHV0KEFERFJFU1MsICJpY29ucy9odHRwYWRkcmVzc19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEJJTkRJTkcsICJpY29ucy9odHRwYmluZGluZ19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KE9QRVJBVElPTiwgImljb25zL2h0dHBvcGVyYXRpb25fb2JqLmdpZiIpOyAgICAgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoVVJMX0VOQ09ERUQsICJpY29ucy9odHRwdXJsZW5jb2RlZF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KFVSTF9SRVBMQUNFTUVOVCwgImljb25zL2h0dHB1cmxyZXBsYWNlbWVudF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSAKLSAgeyAgICAKLSAgICBOb2RlIG5vZGUgPSAoTm9kZSlvYmplY3Q7Ci0gICAgU3RyaW5nIGltYWdlTmFtZSA9IChTdHJpbmcpbWFwLmdldChub2RlLmdldExvY2FsTmFtZSgpKTsgICAgICAgCi0gICAgcmV0dXJuIGltYWdlTmFtZSAhPSBudWxsID8gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKGltYWdlTmFtZSkgOiBudWxsOyAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpICAKLSAgewotICAgIE5vZGUgbm9kZSA9IChOb2RlKW9iamVjdDsKLSAgICByZXR1cm4gbm9kZS5nZXROb2RlTmFtZSgpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9sYWJlbC9wcm92aWRlcnMvU09BUExhYmVsUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbGFiZWwvcHJvdmlkZXJzL1NPQVBMYWJlbFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNjBlZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9sYWJlbC9wcm92aWRlcnMvU09BUExhYmVsUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5sYWJlbC5wcm92aWRlcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBTT0FQTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBBRERSRVNTICAgICAgPSAiYWRkcmVzcyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgQk9EWSAgICAgICAgID0gImJvZHkiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIEJJTkRJTkcgICAgICA9ICJiaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBGQVVMVCAgICAgICAgPSAiZmF1bHQiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIEhFQURFUiAgICAgICA9ICJoZWFkZXIiOyAgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBIRUFERVJfRkFVTFQgPSAiaGVhZGVyZmF1bHQiOyAgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBPUEVSQVRJT04gICAgPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByb3RlY3RlZCBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBTT0FQTGFiZWxQcm92aWRlcigpCi0gIHsKLSAgICBtYXAucHV0KEFERFJFU1MsICJpY29ucy9zb2FwYWRkcmVzc19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEJJTkRJTkcsICJpY29ucy9zb2FwYmluZGluZ19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEJPRFksICJpY29ucy9zb2FwYm9keV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEZBVUxULCAiaWNvbnMvc29hcGZhdWx0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoSEVBREVSLCAiaWNvbnMvc29hcGhlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEhFQURFUl9GQVVMVCwgImljb25zL3NvYXBoZWFkZXJmYXVsdF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KE9QRVJBVElPTiwgImljb25zL3NvYXBvcGVyYXRpb25fb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgCi0gIHsgICAgCi0gICAgTm9kZSBub2RlID0gKE5vZGUpb2JqZWN0OwotICAgIFN0cmluZyBpbWFnZU5hbWUgPSAoU3RyaW5nKW1hcC5nZXQobm9kZS5nZXRMb2NhbE5hbWUoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgCi0JICByZXR1cm4gaW1hZ2VOYW1lICE9IG51bGwgPyBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoaW1hZ2VOYW1lKSA6IG51bGw7IAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgIAotICB7Ci0gICAgTm9kZSBub2RlID0gKE5vZGUpb2JqZWN0OwotICAgIHJldHVybiBub2RlLmdldE5vZGVOYW1lKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZWJjYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSCi1fVUlfREVQRU5ERU5DSUVTX0NIQU5HRUQ9RGVwZW5kZW5jaWVzIENoYW5nZWQKLV9VSV9ERVBFTkRFTkNJRVNfQ0hBTkdFRF9SRUZSRVNIPU9uZSBvciBtb3JlIGRlcGVuZGVuY2llcyBoYXZlIGNoYW5nZWQuICBEbyB5b3Ugd2FudCB0byByZWZyZXNoIHRoZSBlZGl0b3IgdG8gcmVmbGVjdCB0aGVzZSBjaGFuZ2VzPwotX1VJX0VESVRfTkFNRVNQQUNFU19ESUFMT0dfVElUTEU9RWRpdCBOYW1lc3BhY2VzCi1fVUlfUFJFRl9QQUdFX0NSRUFUSU5HX0ZJTEVTPUNyZWF0aW5nIGZpbGVzCi1fVUlfUkVNRU1CRVJfTVlfREVDSVNJT05fTEFCRUw9UmVtZW1iZXIgbXkgZGVjaXNpb24KLV9VSV9QUkVGX1BBR0VfREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFPURlZmF1bHQgVGFyZ2V0IE5hbWVzcGFjZToKLV9VSV9SRUdFTl9CSU5ESU5HU19PTl9TQVZFX1FVRVNUSU9OTUFSSz1SZWdlbmVyYXRlIEJpbmRpbmdzIE9uIFNhdmU/Ci1fVUlfTEFCRUxfV0FSTklOR19EVVBMSUNBVEVfTkFNRV9FWElTVFM9V2FybmluZzogZHVwbGljYXRlIG5hbWUgYWxyZWFkeSBleGlzdHMKLV9VSV9MQUJFTF9OQU1FU1BBQ0VfVVJJU19UT19CRV9JTkNMVURFRD1OYW1lc3BhY2UgVVJJcyB0byBiZSBpbmNsdWRlZAotX1VJX1BSRUZfUEFHRV9BVVRPX1JFR0VORVJBVEVfQklORElORz1SZWdlbmVyYXRlIEJpbmRpbmcgb24gc2F2ZQotX1VJX1BSRUZfUEFHRV9QUk9NUFRfUkVHRU5fQklORElOR19PTl9TQVZFPVByb21wdCBSZWdlbmVyYXRlIEJpbmRpbmcgb24gc2F2ZQotX1VJX0VESVRfTkFNRVNQQUNFUz1FZGl0IE5hbWVzcGFjZXMuLi4KLV9VSV9BQ1RJT05fQUREX0lNUE9SVD1BZGQgSW1wb3J0Ci1fVUlfQUNUSU9OX0FERF9CSU5ESU5HPUFkZCBCaW5kaW5nCi1fVUlfQUNUSU9OX0FERF9QQVJUPUFkZCBQYXJ0Ci1fVUlfQUNUSU9OX0FERF9YTUxfU0NIRU1BX0VMRU1FTlQ9QWRkIFhNTCBTY2hlbWEgRWxlbWVudAotX1VJX0FDVElPTl9SRU9SREVSX1BBUlQ9UmVvcmRlciBQYXJ0Ci1fVUlfQUNUSU9OX1JFT1JERVJfTUVTU0FHRV9SRUZFUkVOQ0U9UmVvcmRlciBNZXNzYWdlIFJlZmVyZW5jZQotX1VJX0FDVElPTl9PUEVOX0lOX05FV19FRElUT1I9T3BlbiBJbiBOZXcgRWRpdG9yCi1fVUlfQUNUSU9OX0VYSVNUSU5HX01FU1NBR0U9RXhpc3RpbmcgTWVzc2FnZS4uLgotX1VJX0FDVElPTl9FWElTVElOR19FTEVNRU5UPUV4aXN0aW5nIEVsZW1lbnQuLi4KLV9VSV9FUlJPUl9OQU1FU1BBQ0VfSU5WQUxJRD1UaGUgdGFyZ2V0IG5hbWVzcGFjZSBpcyBpbnZhbGlkCi1fVUlfRVJST1JfRklMRV9BTFJFQURZX0VYSVNUUz1GaWxlIGFscmVhZHkgZXhpc3RzOiB7MH0KLV9VSV9ERVNDUklQVElPTl9ORVdfV1NETF9GSUxFPVNwZWNpZnkgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoZSBuZXcgV1NETCBmaWxlLgotX1VJX1JFR0VOX0JJTkRJTkRTX09OX1NBVkU9UmVnZW5lcmF0ZSBCaW5kaW5ncyBPbiBTYXZlCi1fVUlfUkFESU9fRE9DVU1FTlRfTElURVJBTD1kb2N1bWVudCBsaXRlcmFsCi1fVUlfVElUTEVfU1BFQ0lGWV9QT1JUVFlQRT1TcGVjaWZ5IFBvcnQgVHlwZQotX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0w9UHJvdG9jb2w6Ci1fVUlfTEFCRUxfSU5MSU5FX1NDSEVNQV9PRj1JbmxpbmUgU2NoZW1hIG9mIAotX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0U9VGFyZ2V0IG5hbWVzcGFjZToKLV9VSV9MQUJFTF9QUkVGSVhfV0lUSF9DT0xPTj1QcmVmaXg6Ci1fVUlfTEFCRUxfQ1JFQVRFX1dTRExfU0tFTEVUT049Q3JlYXRlIFdTREwgU2tlbGV0b24KLV9VSV9MQUJFTF9DUkVBVEVfTkVXX1dTRExfRklMRT1DcmVhdGUgYSBuZXcgV1NETCBGaWxlCi1fVUlfTEFCRUxfU09BUF9CSU5ESU5HX09QVElPTlM9U09BUCBCaW5kaW5nIE9wdGlvbnMKLV9VSV9MQUJFTF9IVFRQX0JJTkRJTkdfT1BUSU9OUz1IVFRQIEJpbmRpbmcgT3B0aW9ucwotX1VJX0xBQkVMX0FERF9FWFRFTlNJT05fRUxFTUVOVD1BZGQgRXh0ZW5zaW9uIEVsZW1lbnQKLV9VSV9TUEVDSUZZX0JJTkRJTkdfREVUQUlMU19MQUJFTD1TcGVjaWZ5IHRoZSBkZXRhaWxzIG9mIHRoZSBiaW5kaW5nIHRoYXQgd2lsbCBiZSBjcmVhdGVkCi1fVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFNfVE9fQkVfQ1JFQVRFRD1TcGVjaWZ5IHRoZSBkZXRhaWxzIG9mIHRoZSBwb3J0IHRoYXQgd2lsbCBiZSBjcmVhdGVkCi1fVUlfTEFCRUxfTkVXX0JJTkRJTkc9TmV3IEJpbmRpbmcKLV9VSV9MQUJFTF9ORVdfUE9SVFRZUEU9TmV3IFBvcnRUeXBlCi1fVUlfTEFCRUxfUkVGRVJFTkNFX0tJTkQ9UmVmZXJlbmNlIEtpbmQKLV9VSV9MQUJFTF9ORVdfTUVTU0FHRT1OZXcgTWVzc2FnZQotX1VJX1JBRElPX1JQQ19FTkNPREVEPXJwYyBlbmNvZGVkCi1fVUlfUkFESU9fUlBDX0xJVEVSQUw9cnBjIGxpdGVyYWwKLV9VSV9BQ1RJT05fRVhJU1RJTkdfVFlQRT1FeGlzdGluZyBUeXBlLi4uCi1fVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFM9U3BlY2lmeSBQb3J0IERldGFpbHMKLV9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkc9U3BlY2lmeSBCaW5kaW5nCi1fVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFM9U3BlY2lmeSBCaW5kaW5nIERldGFpbHMKLV9VSV9FUlJPUl9GSUxFX01VU1RfRU5EX1dJVEhfV1NETD1FcnJvcjogRmlsZSBtdXN0IGVuZCB3aXRoIHdzZGwKLV9VSV9USVRMRV9TUEVDSUZZX01FU1NBR0U9U3BlY2lmeSBNZXNzYWdlCi1fVUlfVElUTEVfTkVXX1dTRExfRklMRT1OZXcgV1NETCBGaWxlCi1fVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EPScpCi1fVUlfQUNUSU9OX1JFTkFNRT1SZW5hbWUKLV9VSV9GT0xERVJfVFlQRVM9VHlwZXMKLV9VSV9DQU5DRUxfTEFCRUw9Q2FuY2VsCi1fVUlfQUNUSU9OX05FV19UWVBFPU5ldyBUeXBlLi4uCi1fVUlfQUNUSU9OX1NFVF9UWVBFPVNldCBUeXBlCi1fVUlfRk9MREVSX0lNUE9SVFM9SW1wb3J0cwotX1VJX0ZPTERFUl9TRVJWSUNFUz1TZXJ2aWNlcwotX1VJX0ZPTERFUl9CSU5ESU5HUz1CaW5kaW5ncwotX1VJX0ZPTERFUl9JTlRFUkZBQ0VTPUludGVyZmFjZXMKLV9VSV9GT0xERVJfUE9SVFRZUEVTPVBvcnRUeXBlcwotX1VJX0ZPTERFUl9NRVNTQUdFUz1NZXNzYWdlcwotX1VJX0FDVElPTl9ORVdfTUVTU0FHRT1OZXcgTWVzc2FnZS4uLgotX1VJX0FDVElPTl9ORVdfRUxFTUVOVD1OZXcgRWxlbWVudC4uLgotX1VJX0FDVElPTl9TRVRfRUxFTUVOVD1TZXQgRWxlbWVudAotX1VJX0FDVElPTl9TRVRfTUVTU0FHRT1TZXQgTWVzc2FnZQotX1VJX0FDVElPTl9TRVRfQklORElORz1TZXQgQmluZGluZwotX1VJX0NIRUNLQk9YX09WRVJXUklURT1PdmVyd3JpdGUgZXhpc3RpbmcgYmluZGluZyBpbmZvcm1hdGlvbgotX1VJX0FDVElPTl9TRVRfUE9SVFRZUEU9U2V0IFBvcnRUeXBlCi1fVUlfQUNUSU9OX0VESVRfUE9SVF9BRERSRVNTPUVkaXQgQWRkcmVzcwotX1VJX0FDVElPTl9BREQ9QWRkCi1fVUlfQUNUSU9OX09QRU5fSU1QT1JUPU9wZW4gSW1wb3J0Ci1fVUlfVU5TUEVDSUZJRUQ9KHVuc3BlY2lmaWVkKQotX1VJX0xBQkVMX05BTUU9TmFtZQotX1VJX0xBQkVMX1RZUEU9VHlwZQotX1VJX0JVVFRPTl9ORVc9TmV3Li4uCi1fVUlfTEFCRUxfRUxFTUVOVD1FbGVtZW50Ci1fVUlfQlVUVE9OX0JST1dTRT1Ccm93c2UuLi4KLV9VSV9CSU5ESU5HX1dJWkFSRD1CaW5kaW5nIFdpemFyZAotX1VJX0JJTkRJTkc9QmluZGluZwotX1VJX0xBQkVMX01FU1NBR0U9TWVzc2FnZQotX1VJX0xBQkVMX1JFTU9WRT1SZW1vdmUKLV9VSV9USVRMRV9TRUxFQ1Q9U2VsZWN0Ci1fVUlfVElUTEVfU0VMRUNUX0ZJTEUgPSBTZWxlY3QgRmlsZQotX1VJX0RFU0NSSVBUSU9OX1NFTEVDVF9XU0RMX09SX1hTRCA9IFNlbGVjdCBhIFdTREwgb3IgWFNEIGZpbGUgdG8gaW1wb3J0LgotX1VJX1RJVExFX09QVElPTlM9T3B0aW9ucwotX1VJX1lFU19MQUJFTD1ZZXMKLV9VSV9QT1JUX1RZUEU9UG9ydCBUeXBlCi1fVUlfUE9SVF9XSVpBUkQ9UG9ydCBXaXphcmQKLV9VSV9OT19MQUJFTD1ObwotX1VJX0FERD1BZGQuLi4KLV9VSV9IRUxQPUhlbHAKLV9VSV9MQUJFTF9OQU1FX0ZJTFRFUj1OYW1lICg/ID0gY2hhcmFjdGVyLCAqID0gYW55IHN0cmluZyk6Ci1fV0FSTl9OQU1FX01VU1RfQ09OVEFJTl9BVF9MRUFTVF9PTkVfQ0hBUj1JV0FYMTQxNVcgTmFtZSBmaWVsZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlcgotX1dBUk5fTkFNRV9IQVNfU1BBQ0U9SVdBWDE0MDJXIE5hbWUgZmllbGQgY2Fubm90IGNvbnRhaW4gYSBzcGFjZQotX1dBUk5fTkFNRV9JTlZBTElEX0ZJUlNUPUlXQVgxNDAzVyBGaXJzdCBjaGFyYWN0ZXIgaW4gbmFtZSBmaWVsZCBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nICgnXycsICc6JywgJ2xldHRlcicpCi1fV0FSTl9OQU1FX0lOVkFMSURfQ0hBUj1JV0FYMTQwNFcgTmFtZSBmaWVsZCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlciAoJwotX1dBUk5fV1NJX0NPTVBMSUFOQ0VfUFJPVE9DT0w9V1MtSSBjb21wbGlhbmNlIHdhcm5pbmc6IHByb3RvY29sIHNob3VsZCBiZSB7MH0KLV9FUlJPUl9XU0lfQ09NUExJQU5DRV9QUk9UT0NPTD1XUy1JIGNvbXBsaWFuY2UgZXJyb3I6IHByb3RvY29sIG11c3QgYmUgezB9Ci1fV0FSTl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc9V1MtSSBjb21wbGlhbmNlIHdhcm5pbmc6IGJpbmRpbmcgc2hvdWxkIG5vdCBiZSBycGMgZW5jb2RlZAotX0VSUk9SX1dTSV9DT01QTElBTkNFX1JQQ19FTkNPRElORz1XUy1JIGNvbXBsaWFuY2UgZXJyb3I6IGJpbmRpbmcgY2Fubm90IGJlIHJwYyBlbmNvZGVkCi1fV1NJX0NPTVBMSUFOQ0VfTElOS19URVhUPU1vZGlmeSBwcm9qZWN0IGNvbXBsaWFuY2Ugc2V0dGluZwotCi1fVUlfTEFCRUxfVU5ERUZJTkVEX0FSRzE9ezB9IHVuZGVmaW5lZAotX1VJX0xBQkVMX09SX1VOREVGSU5FRF9BUkcyPXswfSBvciB7MX0gdW5kZWZpbmVkCi1fVUlfTEFCRUxfTk9fT0JKRUNUX1NQRUNJRklFRF9BUkcxPW5vIHswfSBzcGVjaWZpZWQKLV9VSV9MQUJFTF9OT19QQVJBTUVURVJTX1NQRUNJRklFRD1ubyBwYXJhbWV0ZXJzIHNwZWNpZmllZAotCi1fVUlfTEFCRUxfREVGQVVMVCA9IGRlZmF1bHQKLQotX1VJX0VESVRPUl9OQU1FPVdTREwgRWRpdG9yCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9FZGl0b3JNb2RlU2VjdGlvbkZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGE3MGRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9FZGl0b3JNb2RlU2VjdGlvbkZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFZGl0b3JNb2RlU2VjdGlvbkZpbHRlcgotewotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0FwcGxpY2FibGUoQ2xhc3Mgc2VjdGlvbkNsYXNzLCBPYmplY3Qgb2JqZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFFeHRlbnNpb25zU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMUV4dGVuc2lvbnNTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMzFmMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMUV4dGVuc2lvbnNTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dC5XU0RMTW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5jb21tYW5kcy5BZGRFeHRlbnNpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLmNvbW1hbmRzLlJlbW92ZUV4dGVuc2lvbk5vZGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuQWJzdHJhY3RFeHRlbnNpb25zU2VjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uRE9NRXh0ZW5zaW9uVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uRE9NRXh0ZW5zaW9uVHJlZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLkV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLmN1c3RvbS5Ob2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBXMTFFeHRlbnNpb25zU2VjdGlvbiBleHRlbmRzIEFic3RyYWN0RXh0ZW5zaW9uc1NlY3Rpb24KLXsKLSAgV1NETE1vZGVsQWRhcHRlciBtb2RlbEFkYXB0ZXI7Ci0gIAotICBwdWJsaWMgVzExRXh0ZW5zaW9uc1NlY3Rpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBzZXRFeHRlbnNpb25UcmVlTGFiZWxQcm92aWRlcihuZXcgV1NETEV4dGVuc2lvblRyZWVMYWJlbFByb3ZpZGVyKCkpOwotICAgIHNldEV4dGVuc2lvblRyZWVDb250ZW50UHJvdmlkZXIobmV3IFdTRExFeHRlbnNpb25UcmVlQ29udGVudFByb3ZpZGVyKCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEFkZEV4dGVuc2lvbkNvbW1hbmQgZ2V0QWRkRXh0ZW5zaW9uQ29tbWFuZChPYmplY3QgbykKLSAgewotICAgIEFkZEV4dGVuc2lvbkNvbW1hbmQgYWRkRXh0ZW5zaW9uQ29tbWFuZCA9IG51bGw7Ci0gICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBpZiAobyBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBvOwotICAgICAgICBhZGRFeHRlbnNpb25Db21tYW5kID0gbmV3IEFkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kKE1lc3NhZ2VzLl9VSV9MQUJFTF9BRERfRVhURU5TSU9OX0VMRU1FTlQsIGV4dGVuc2libGVFbGVtZW50LCBlbGVtZW50KTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICAvLyBUT0RPIChjcykgbmVlZCB0byBpbXBsZW1lbnQgdGhpcwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYWRkRXh0ZW5zaW9uQ29tbWFuZDsKLSAgfQotCi0gIHByb3RlY3RlZCBDb21tYW5kIGdldFJlbW92ZUV4dGVuc2lvbkNvbW1hbmQoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIE5vZGUpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBSZW1vdmVFeHRlbnNpb25Ob2RlQ29tbWFuZCgicmVtb3ZlIiwgKE5vZGUpbyk7IC8vJE5PTi1OTFMtMSQKLSAgICB9ICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgCi0gIC8vIFRPRE8gKGNzKSB0aGUgQWJzdHJhY3RFeHRlbnNpb25zU2VjdGlvbiBpcyBwb2xsdXRlZCB3aXRoIFhTRCBzcGVjaWMgc3R1ZmYKLSAgLy8gbmVlZCB0byBjbGVhbiB0aGF0IHVwISEKLSAgLy8gVE9ETyAoY3MpIHdlIHNob3VsZCBhdm9pZCByZWZlcmVuY2luZyBXU0RMIG1vZGVsIG9iamVjdHMgLi4uIGdvIHRocnUgZmFjYWRlIGluc3RlYWQKLSAgcHVibGljIHZvaWQgc2V0SW5wdXQoSVdvcmtiZW5jaFBhcnQgcGFydCwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsgICAgCi0gICAgc3VwZXIuc2V0SW5wdXQocGFydCwgc2VsZWN0aW9uKTsKLSAgICBpc1JlYWRPbmx5ID0gdHJ1ZTsgICAgCi0gICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgeyAgICAKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGV4dGVuc2libGVFbGVtZW50LmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudEltcGwpCi0gICAgICB7ICAKLSAgICAgICAgaXNSZWFkT25seSA9IGZhbHNlOwotICAgICAgICBtb2RlbEFkYXB0ZXIgPSBXU0RMTW9kZWxBZGFwdGVyLmxvb2t1cE9yQ3JlYXRlTW9kZWxBZGFwdGVyKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgICAgICAgbW9kZWxBZGFwdGVyLmdldE1vZGVsUmVjb25jaWxlQWRhcHRlcigpLmFkZExpc3RlbmVyKGludGVybmFsTm9kZUFkYXB0ZXIpOwotICAgICAgfSAgICAgICAgIAotICAgIH0gICAgICAgCi0gICAgYWRkQnV0dG9uLnNldEVuYWJsZWQoIWlzUmVhZE9ubHkpOwotICAgIHJlbW92ZUJ1dHRvbi5zZXRFbmFibGVkKCFpc1JlYWRPbmx5KTsgICAgICAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLSAgICBzdXBlci5kaXNwb3NlKCk7Ci0gICAgaWYgKG1vZGVsQWRhcHRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsQWRhcHRlci5nZXRNb2RlbFJlY29uY2lsZUFkYXB0ZXIoKS5yZW1vdmVMaXN0ZW5lcihpbnRlcm5hbE5vZGVBZGFwdGVyKTsKLSAgICB9ICAKLSAgfQotICAKLSAgLy8gVE9ETyAoY3MpIGluIHRoZSBmdXR1cmUgd2UgbmVlZCB0byAnZml4JyB0aGluZ3Mgc28gdGhhdCB3ZSBjYW4gcmlkIG9mIHRoaXMgbWV0aG9kCi0gIC8vIHdlIG5lZWQgYSB3YXkgdG8gZG8gYWxsIG9mIHRoaXMgdmlhIHRoZSBmYWNhZGUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIGFueSBkaXJlY3QgCi0gIC8vIGRlcGVuZGVuY3kgb24gdGhlIFdTREwxLjEgbW9kZWwuLyBTaW1pbGFybHkgdGhpcyBjbGFzcyBzaG91bGRuJ3QgbmVlZCB0byAna25vdycKLSAgLy8gYWJvdXQgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24gdGhpcyBpcyBhbiB1bmRlcmx5aW5nIGRldGFpbCB0aGF0IG5lZWRzIHRvIGJlIGhpZGRlbgotICAvLyAKLSAgcHJpdmF0ZSBzdGF0aWMgRXh0ZW5zaWJsZUVsZW1lbnQgZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKQotICAgIHsgICAgICAgICAKLSAgICAgIG8gPSAoKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKW8pLmdldE1vZGVsKCk7Ci0gICAgfSAgCi0gICAgaWYgKG8gaW5zdGFuY2VvZiBBZGFwdGVyKQotICAgIHsKLSAgICAgIC8vIFRPRE8gKGNzKSB3ZSBuZWVkIGEgd2F5IHRvIGRvIGFsbCBvZiB0aGlzIHZpYSB0aGUgZmFjYWRlCi0gICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgYW55IGRpcmVjdCBkZXBlbmRlbmN5IG9uIHRoZSBXU0RMMS4xIG1vZGVsCi0gICAgICAvLyBvZiBjb3Vyc2UgYXQgdGhlIG1vbWVudCB3ZSBjYWxsIHRoaXMgY2xhc3MgdGhlIFcxMUV4dGVuc2lvblNlY3Rpb25zCi0gICAgICAvLyBzbyB0aGF0J3Mgbm90IGEgcHJvYmxlbS4gIEluIHRoZSBmdXR1cmUgdGhvdWdoIHdlJ2xsIHdhbnQgdG8gcmV1c2UgdGhpcyAKLSAgICAgIC8vIGNsYXNzIGZvciBXU0RMIDIuMC4KLSAgICAgIC8vICAgICAgIAotICAgICAgbyA9ICgoQWRhcHRlcilvKS5nZXRUYXJnZXQoKTsKLSAgICB9ICAgICAgCi0gICAgaWYgKG8gaW5zdGFuY2VvZiBFeHRlbnNpYmxlRWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gKEV4dGVuc2libGVFbGVtZW50KW87Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2cgY3JlYXRlQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZygpCi0gIHsgICAgCi0gICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IG5ldyBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nKGNvbXBvc2l0ZS5nZXRTaGVsbCgpLCBnZXRFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCkpOyAgIAotICAgICAgZGlhbG9nLmFkZEVsZW1lbnRzVGFibGVGaWx0ZXIobmV3IEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2dGaWx0ZXIoZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RWxlbWVudCgpKSk7Ci0gICAgICByZXR1cm4gZGlhbG9nOwotICAgIH0gICAgICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCBFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5IGdldEV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJUHJlZmVyZW5jZVN0b3JlIGdldFByZWZTdG9yZSgpCi0gIHsKLQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotICB9Ci0gCi0gIHN0YXRpYyBjbGFzcyBXU0RMRXh0ZW5zaW9uVHJlZUNvbnRlbnRQcm92aWRlciBleHRlbmRzIERPTUV4dGVuc2lvblRyZWVDb250ZW50UHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gZ2V0RWxlbWVudHMoamF2YS5sYW5nLk9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgeyAgICAgICAgIAotICAgICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dEVsZW1lbnQpOwotICAgICAgaWYgKGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZG9tRWxlbWVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7ICAgICAKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgICAgLy8gYWRkIHRoZSBET00gZWxlbWVudAotICAgICAgICAgIGRvbUVsZW1lbnRMaXN0LmFkZChlbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRvbUVsZW1lbnRMaXN0LnRvQXJyYXkoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNULnRvQXJyYXkoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHN0YXRpYyBjbGFzcyBXU0RMRXh0ZW5zaW9uVHJlZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBET01FeHRlbnNpb25UcmVlTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHJpdmF0ZSBJTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKE5vZGUgbm9kZSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbm9kZS5nZXROYW1lc3BhY2VVUkkoKTsgICAgICAKLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsgIAotICAgICAgICBOb2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gWFNERWRpdG9yUGx1Z2luLmdldERlZmF1bHQoKS5nZXROb2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5KCk7ICAgICAgCi0gICAgICAgIHJldHVybiByZWdpc3RyeS5nZXRMYWJlbFByb3ZpZGVyKG5hbWVzcGFjZSk7Ci0gICAgICB9ICAgICAgICAKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkKLSAgICB7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgICBJTGFiZWxQcm92aWRlciBwcm92aWRlciA9IGdldExhYmVsUHJvdmlkZXIoZWxlbWVudCk7Ci0gICAgICAgIGlmIChwcm92aWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldEltYWdlKGVsZW1lbnQpOwotICAgICAgICB9ICAgICAgICAgIAotICAgICAgfQotICAgICAgcmV0dXJuIHN1cGVyLmdldEltYWdlKG9iamVjdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpCi0gICAgewotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgICAgSUxhYmVsUHJvdmlkZXIgcHJvdmlkZXIgPSBnZXRMYWJlbFByb3ZpZGVyKGVsZW1lbnQpOwotICAgICAgICBpZiAocHJvdmlkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBwcm92aWRlci5nZXRUZXh0KGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOwotICAgIH0gICAgICAgIAotICB9Ci0gIC8qKgotICAgKiBUaGlzIGZpbHRlciBpcyB0byBiZSB1c2VkIGJ5IHRoZSBkaWFsb2cgaW52b2tlZCB3aGVuIGFkZEJ1dHRvbiBpcyBwcmVzc2VkCi0gICAqLwotICBwcml2YXRlIGNsYXNzIEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2dGaWx0ZXIgZXh0ZW5kcyBWaWV3ZXJGaWx0ZXIKLSAgewotICAgIHByaXZhdGUgRWxlbWVudCBob3N0RWxlbWVudDsKLQotICAgIHB1YmxpYyBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nRmlsdGVyKEVsZW1lbnQgaG9zdEVsZW1lbnQpCi0gICAgewotICAgICAgdGhpcy5ob3N0RWxlbWVudCA9IGhvc3RFbGVtZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNlbGVjdChWaWV3ZXIgdmlld2VyLCBPYmplY3QgcGFyZW50RWxlbWVudCwgT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgZWxlbWVudCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGVsZW1lbnQpLmdldE5hbWUoKTsKLSAgICAgICAgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciBmaWx0ZXIgPSAoRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcikgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSgpLmdldFByb3BlcnR5KG5hbWVzcGFjZSwgIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmIChmaWx0ZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBmaWx0ZXIuaXNWYWxpZENvbnRleHQoaG9zdEVsZW1lbnQsIG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1RyZWVWaWV3ZXJJbnB1dEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQgPSBnZXRFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgcmV0dXJuIGV4dGVuc2libGVFbGVtZW50ICE9IG51bGwgJiYgZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RWxlbWVudCgpID09IGVsZW1lbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMDhiMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uIGV4dGVuZHMgTmFtZVNlY3Rpb24gewotCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIE5FV19TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX05FVzsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIEJST1dTRV9TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX0JST1dTRTsgLy8kTk9OLU5MUy0xJAotCQotCXByb3RlY3RlZCBDTGFiZWwgY29tYm9MYWJlbDsgCi0JcHJvdGVjdGVkIENDb21ibyBjb21ibzsKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlcjsKLQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljcmVhdGVDb250cm9sQXJlYSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sQXJlYSgpCi0JewotCQlGb3JtRGF0YSBkYXRhOwotCQkKLQkJY29tYm8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0NvbWJvKGNvbXBvc2l0ZSk7Ci0JCWNvbWJvLnNldEJhY2tncm91bmQoY29tcG9zaXRlLmdldEJhY2tncm91bmQoKSk7Ci0JCWNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfTUVTU0FHRV9SRUZfTUVTU0FHRV9DT01CTyk7Ci0JCQotCQljb21ib0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9NRVNTQUdFICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbWJvLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbWJvLCAwLCBTV1QuQ0VOVEVSKTsKLQkJY29tYm9MYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLS8vCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGJ1dHRvbiwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChuYW1lVGV4dCwgK0lUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotCQljb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOwotCX0KLQkKLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCWlmIChuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJU3RyaW5nIHJlZk5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkKLQkJY29tYm8ucmVtb3ZlQWxsKCk7Ci0JCWNvbWJvLmFkZChCUk9XU0VfU1RSSU5HKTsKLQkJY29tYm8uYWRkKE5FV19TVFJJTkcpOwotCQkKLQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgZ2V0TW9kZWwoKSkuZ2V0VGFyZ2V0KCk7Ci0JCWlmIChtZXNzYWdlUmVmICE9IG51bGwgJiYgbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCXJlZk5hbWUgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJfQotCQkKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkgewotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNwZWNzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCWNvbWJvLmFkZCgoU3RyaW5nKSBzcGVjc1tpbmRleF0uZ2V0TmFtZSgpKTsKLQkJCX0KLQkJfQkJCi0JCQotCQlTdHJpbmdbXSBpdGVtcyA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0JCWludCBpbmRleDsKLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQlpZiAoaXRlbXNbaW5kZXhdLmVxdWFscyhyZWZOYW1lKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCQotCQlpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGgpIHsKLQkJCS8vIEZvdW5kIGEgbWF0Y2gKLQkJCWNvbWJvLnNlbGVjdChpbmRleCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljb21iby5zZXRUZXh0KHJlZk5hbWUpOwotCQl9Ci0KLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihjb21ibyk7Ci0JCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQotCi0vLwkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgZ2V0TW9kZWwoKSkuZ2V0VGFyZ2V0KCk7Ci0vLwkJSXRlcmF0b3IgaXQgPSBtZXNzYWdlUmVmLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOwotLy8JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLS8vCQkJTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIGl0Lm5leHQoKTsKLS8vCQkJY29tYm8uYWRkKG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0vLwkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0JCWlmIChyZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCXJldHVybiByZWZNYW5hZ2VyOwotCQl9Ci0KLQkJcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldE1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoSUFTRE9iamVjdCkgZ2V0TW9kZWwoKSk7Ci0gICAgICAgIAotCQlyZXR1cm4gcmVmTWFuYWdlcjsKLQl9Ci0KLQkKLQlwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJCXsKLQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKLQkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIuZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsKLQkJCVN0cmluZyB2YWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSAhPSAtMSkgewotCQkJCXZhbHVlID0gY29tYm8uZ2V0SXRlbShjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLQkJCX0KLQkJCQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbnVsbDsKLQkJCWludCBjb250aW51ZUFwcGx5ID0gV2luZG93Lk9LOwotCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgdGhpcy5nZXRNb2RlbCgpOwotCQkJCi0JCQlpZiAodmFsdWUuZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gZWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQkJY29udGludWVBcHBseSA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7Ci0JCQkJc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJfQotCQkJZWxzZSBpZiAodmFsdWUuZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gZWRpdE1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQkJY29udGludWVBcHBseSA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7Ci0JCQkJc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwkJCQkKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNwZWMgPSBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoKFN0cmluZyl2YWx1ZSk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChjb250aW51ZUFwcGx5ID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCQlpZiAoc3BlYyAhPSBudWxsKSB7Ci0JCQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmLCBzcGVjKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCQotCQl9Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZShTdHJpbmcgdmFsdWUpCi0JewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKQotCQl7ICAKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBxdWlja1BpY2tzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJaWYgKHF1aWNrUGlja3MgIT0gbnVsbCkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBxdWlja1BpY2tzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gcXVpY2tQaWNrc1tpXTsKLQkJCQkJaWYgKHZhbHVlLmVxdWFscyhjb21wb25lbnRTcGVjaWZpY2F0aW9uLmdldE5hbWUoKSkpCi0JCQkJCXsKLQkJCQkJCXJldHVybiBjb21wb25lbnRTcGVjaWZpY2F0aW9uOwotCQkJCQl9ICAgICAgICAgICAgICAgIAotCQkJCX0gIAotCQkJfQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGhpc3RvcnkgPSBlZGl0TWFuYWdlci5nZXRIaXN0b3J5KCk7Ci0JCQlpZiAoaGlzdG9yeSAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaSA8IGhpc3RvcnkubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBoaXN0b3J5W2ldOwotCQkJCQlpZiAodmFsdWUuZXF1YWxzKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKSkKLQkJCQkJeyAgCi0JCQkJCQlyZXR1cm4gY29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLQkJCQkJfQotCQkJCX0gIAotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb25GaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbkZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWM1NTZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbkZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFcxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uRmlsdGVyIGltcGxlbWVudHMgSUZpbHRlciB7Ci0JLy8gcm1haDogd2Ugc2hvdWxkIGNvbnNpZGVyIG90aGVyIHdheXMgb2YgJ2V4dGVuZGluZycgdGhpcyBjYXBhYmlsaXR5Ci0JLy8gcmF0aGVyIHRoYW4gc2ltcGx5IGNoZWNraW5nIGEgdmFyaWFibGUuLi4uCi0JcHVibGljIHN0YXRpYyBib29sZWFuIHNob3dXMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbiA9IHRydWU7Ci0JCi0JcHVibGljIGJvb2xlYW4gc2VsZWN0KE9iamVjdCB0b1Rlc3QpIHsKLQkJaWYgKHRvVGVzdCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlICYmIHNob3dXMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbikgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMjYyZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuUGFyYW1ldGVyU2VjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyU2VjdGlvbiBleHRlbmRzIFBhcmFtZXRlclNlY3Rpb24gewotCXByb3RlY3RlZCBCdXR0b24gdHlwZVJhZGlvOwotCXByb3RlY3RlZCBCdXR0b24gZWxlbWVudFJhZGlvOwotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xBcmVhKCkJewotCQlzdXBlci5jcmVhdGVDb250cm9sQXJlYSgpOwotCQlGb3JtRGF0YSBkYXRhOwotCQkKLQkJQ0xhYmVsIHJlZmVyZW5jZUtpbmRMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfUkVGRVJFTkNFX0tJTkQgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJQ29tcG9zaXRlIGNvbXAgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ29tcG9zaXRlKGNvbXBvc2l0ZSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJbGF5b3V0Lm1hcmdpblJpZ2h0ID0gNTsKLQkJY29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbXAsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tcCwgMCwgU1dULkNFTlRFUik7Ci0JCXJlZmVyZW5jZUtpbmRMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJdHlwZVJhZGlvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUJ1dHRvbihjb21wLCBNZXNzYWdlcy5fVUlfTEFCRUxfVFlQRSwgU1dULlJBRElPKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50UmFkaW8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXAsIE1lc3NhZ2VzLl9VSV9MQUJFTF9FTEVNRU5ULCBTV1QuUkFESU8pOwkgLy8kTk9OLU5MUy0xJAotCQl0eXBlUmFkaW8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCWVsZW1lbnRSYWRpby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0eXBlUmFkaW8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BBUlRfVFlQRV9SQURJTyk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZWxlbWVudFJhZGlvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QQVJUX0VMRU1FTlRfUkFESU8pOwotCQkKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJY29tcC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb1dpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbWV0ZXIgPSAoVzExUGFyYW1ldGVyRm9yUGFydCkgdGhpcy5nZXRNb2RlbCgpOwotCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFyYW1ldGVyLmdldFRhcmdldCgpOwotCQkKLQkJaWYgKGUud2lkZ2V0ID09IHR5cGVSYWRpbyAmJiB0eXBlUmFkaW8uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfVFlQRSsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCB0cnVlLCBudWxsKTsKLQkJCXN1cGVyLnJlZnJlc2hDb21ibygpOwotCQl9Ci0JCWVsc2UgaWYgKGUud2lkZ2V0ID09IGVsZW1lbnRSYWRpbyAmJiBlbGVtZW50UmFkaW8uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfRUxFTUVOVCArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIG51bGwpOwotCQkJcmVmcmVzaEVsZW1lbnRDb21ibygpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibykgewotCQkJaWYgKGVsZW1lbnRSYWRpby5nZXRTZWxlY3Rpb24oKSkgewotCQkJCS8vIEhhbmRsZSBFbGVtZW50IHNlbGVjdGlvbgotCQkJCVN0cmluZyB2YWx1ZSA9IGNvbWJvLmdldEl0ZW0oY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0JCQkJCi0JCQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbWV0ZXIgPSAoVzExUGFyYW1ldGVyRm9yUGFydCkgdGhpcy5nZXRNb2RlbCgpOwotCQkJCQotCQkJCWlmICh2YWx1ZS5lcXVhbHMoTkVXX1NUUklORykpIHsKLQkJCQkJQ29tbWFuZCBjb21tYW5kID0gcGFyYW1ldGVyLmdldFNldEVsZW1lbnRDb21tYW5kKElQYXJhbWV0ZXIuU0VUX05FV19BQ1RJT05fSUQpOwotCQkJCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAodmFsdWUuZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJCUNvbW1hbmQgY29tbWFuZCA9IHBhcmFtZXRlci5nZXRTZXRFbGVtZW50Q29tbWFuZChJUGFyYW1ldGVyLlNFTEVDVF9FWElTVElOR19BQ1RJT05fSUQpOwotCQkJCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0RWxlbWVudENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZSgoU3RyaW5nKXZhbHVlKTsKLQkJCQkJaWYgKHNwZWMgIT0gbnVsbCkgewotCQkJCQkJZWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmFtZXRlciwgc3BlYyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCXN1cGVyLmRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCQlyZWZyZXNoKCk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHJlZnJlc2hFbGVtZW50Q29tYm8oKSB7Ci0JCi0JCQkvLyBSZWZyZXNoIHdpdGggRWxlbWVudHMKLQkJCUlQYXJhbWV0ZXIgcGFyYW0gPSBudWxsOwotCQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCQkKLQkJCWlmIChtb2RlbCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQlwYXJhbSA9IChJUGFyYW1ldGVyKSBtb2RlbDsKLQkJCX0KLQkJCQotCQkJU3RyaW5nIG5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGVsZW1lbnROYW1lID0gIlBhcmFtZXRlclNlY3Rpb24uamF2YSI7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChwYXJhbSAhPSBudWxsKSB7Ci0JCQkJbmFtZSA9IHBhcmFtLmdldE5hbWUoKTsKLQkJCQllbGVtZW50TmFtZSA9IHBhcmFtLmdldENvbXBvbmVudE5hbWUoKTsKLQkJCX0KLQotCQkJaWYgKCFuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQkJbmFtZVRleHQuc2V0VGV4dChuYW1lKTsKLQkJCX0KLQkJCQotCQkJLy8gUG9wdWxhdGUgdGhlIENvbWJvCi0JCQljb21iby5yZW1vdmVBbGwoKTsKLQkJCWNvbWJvLmFkZChCUk9XU0VfU1RSSU5HKTsKLQkJCWNvbWJvLmFkZChORVdfU1RSSU5HKTsKLQkJCQotCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRFbGVtZW50Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcGVjcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQkJY29tYm8uYWRkKChTdHJpbmcpIHNwZWNzW2luZGV4XS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCX0KLQotCQkJLy8gRGlzcGxheSB0aGUgZWxlbWVudCBpbiB0aGUgQ29tYm8KLQkJCVN0cmluZ1tdIGl0ZW1zID0gY29tYm8uZ2V0SXRlbXMoKTsKLQkJCWludCBpbmRleDsKLQkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCWlmIChpdGVtc1tpbmRleF0uZXF1YWxzKGVsZW1lbnROYW1lKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCWlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgewotCQkJCS8vIEZvdW5kIGEgbWF0Y2gKLQkJCQljb21iby5zZWxlY3QoaW5kZXgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJY29tYm8uc2V0VGV4dChlbGVtZW50TmFtZSk7Ci0JCQl9Ci0JCQkKLQkJCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQkJCQotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQkKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbSA9IChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBtb2RlbDsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwYXJhbS5nZXRUYXJnZXQoKTsKLQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotCQkJCXR5cGVSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCQkJZWxlbWVudFJhZGlvLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JCQkJY29tYm9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9UWVBFICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJaGFuZGxlVHlwZVNjZW5hcmlvID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCXR5cGVSYWRpby5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJCWVsZW1lbnRSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCQkJY29tYm9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9FTEVNRU5UICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJaGFuZGxlVHlwZVNjZW5hcmlvID0gZmFsc2U7Ci0JCQkJcmVmcmVzaEVsZW1lbnRDb21ibygpOwkJCQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gTmVpdGhlciBhIFR5cGUgb3IgRWxlbWVudAotCQkJCXR5cGVSYWRpby5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJCWVsZW1lbnRSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7CQkJCQotCQkJfQotCQl9Ci0JCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoZWxlbWVudFJhZGlvKTsKLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcih0eXBlUmFkaW8pOwotCQkKLQkJc3VwZXIucmVmcmVzaCgpOwotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRFbGVtZW50Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0JCWlmIChyZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCXJldHVybiByZWZNYW5hZ2VyOwotCQl9Ci0JCQotCQlyZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKChJQVNET2JqZWN0KSBnZXRNb2RlbCgpKTsKLQkJCi0JCXJldHVybiByZWZNYW5hZ2VyOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbkZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzVkODJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyU2VjdGlvbkZpbHRlciBpbXBsZW1lbnRzIElGaWx0ZXIKLXsKLSAgcHVibGljIGJvb2xlYW4gc2VsZWN0KE9iamVjdCB0b1Rlc3QpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmICh0b1Rlc3QgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKQotICAgIHsgIAotICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotICAgICAgICBpZiAobWFuYWdlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIgZmlsdGVyID0gKEVkaXRvck1vZGVTZWN0aW9uRmlsdGVyKSBtYW5hZ2VyLmdldEN1cnJlbnRNb2RlKCkuZ2V0QWRhcHRlcihFZGl0b3JNb2RlU2VjdGlvbkZpbHRlci5jbGFzcyk7Ci0gICAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZpbHRlci5pc0FwcGxpY2FibGUoVzExUGFyYW1ldGVyU2VjdGlvbi5jbGFzcywgdG9UZXN0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVjb25jaWxlci9EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWNvbmNpbGVyL0RlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZjM0M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWNvbmNpbGVyL0RlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVjb25jaWxlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25GcmFtZXdvcms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGlzIHBlcmZvcm1zIHRoZSBhcy15b3UtdHlwZSB2YWxpZGF0aW9uIGZvciBXU0RMIGZpbGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCBleHRlbmRzIERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElkID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24ud3NkbCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIFZhbGlkYXRvciBfdmFsaWRhdG9yOwotCi0gIHB1YmxpYyBEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCgpCi0gIHsKLSAgfQotCi0gIHByaXZhdGUgVmFsaWRhdG9yIGdldFZhbGlkYXRvcigpCi0gIHsKLSAgICBpZiAoX3ZhbGlkYXRvciA9PSBudWxsKQotICAgICAgX3ZhbGlkYXRvciA9IFZhbGlkYXRpb25GcmFtZXdvcmsuZ2V0RGVmYXVsdCgpLmdldFZhbGlkYXRvcihJZCk7Ci0gICAgcmV0dXJuIF92YWxpZGF0b3I7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSVZhbGlkYXRvciBnZXREZWxlZ2F0ZVZhbGlkYXRvcigpCi0gIHsKLSAgICBWYWxpZGF0b3IgdiA9IGdldFZhbGlkYXRvcigpOwotICAgIGlmICh2ID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICByZXR1cm4gdi5hc0lWYWxpZGF0b3IoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzRGVsZWdhdGVWYWxpZGF0b3JFbmFibGVkKElGaWxlIGZpbGUpCi0gIHsKLSAgICBWYWxpZGF0b3IgdiA9IGdldFZhbGlkYXRvcigpOwotICAgIGlmICh2ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2LnNob3VsZFZhbGlkYXRlKGZpbGUsIGZhbHNlLCBmYWxzZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHYuaXNCdWlsZFZhbGlkYXRpb24oKSB8fCB2LmlzTWFudWFsVmFsaWRhdGlvbigpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmsuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMSHlwZXJsaW5rLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYmEyNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmsuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci0KLS8qKgotICogV1NETEh5cGVybGluayBrbm93cyBob3cgdG8gb3BlbiBsaW5rcyBmcm9tIHdzZGwgZmlsZXMuCi0gKiAKLSAqIEBzZWUgV1NETEh5cGVybGlua0RldGVjdG9yCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMSHlwZXJsaW5rIGltcGxlbWVudHMgSUh5cGVybGluawotewotICBwcml2YXRlIElSZWdpb24gZlJlZ2lvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgZlJlc291cmNlOwotICBwcml2YXRlIFN0cmluZyBmU3BlYzsKLQotICBwdWJsaWMgV1NETEh5cGVybGluayhJUmVnaW9uIHJlZ2lvbiwgU3RyaW5nIHJlc291cmNlLCBTdHJpbmcgc3BlYykKLSAgewotICAgIGZSZWdpb24gPSByZWdpb247Ci0gICAgZlJlc291cmNlID0gcmVzb3VyY2U7Ci0gICAgZlNwZWMgPSBzcGVjOwotICB9Ci0KLSAgcHVibGljIElSZWdpb24gZ2V0SHlwZXJsaW5rUmVnaW9uKCkKLSAgewotICAgIHJldHVybiBmUmVnaW9uOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEh5cGVybGlua1RleHQoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBvcGVuKCkKLSAgewotICAgIC8qCi0gICAgICogSVNTVUU6IFRoZXJlIGFyZSBjbGVhbmVyIHdheXMgdG8gZmluZCB0aGUgcmlnaHQgZmlsZSBiYXNlZCBvbiBhIFVSSQotICAgICAqIHN0cmluZyBhbmQgY2xlYW5lciB3YXlzIHRvIGZpbmQgd2hpY2ggZWRpdG9yIHRvIG9wZW4gZm9yIHRoZSBmaWxlLiBTZWUKLSAgICAgKiBvdGhlciBJSHlwZXJsaW5rIGFuZCBJSHlwZXJsaW5rRGV0ZWN0b3IgaW1wbGVtZW50b3JzIGZvciBleGFtcGxlcy4KLSAgICAgKi8KLSAgICBTdHJpbmcgcGF0dGVybiA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0gICAgaWYgKGZSZXNvdXJjZSAhPSBudWxsICYmIGZSZXNvdXJjZS5zdGFydHNXaXRoKHBhdHRlcm4pKQotICAgIHsKLSAgICAgIFBhdGggcGF0aCA9IG5ldyBQYXRoKGZSZXNvdXJjZS5zdWJzdHJpbmcocGF0dGVybi5sZW5ndGgoKSkpOwotICAgICAgSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKLQotICAgICAgSVdvcmtiZW5jaFBhZ2Ugd29ya2JlbmNoUGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotCi0gICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoUGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLQotICAgICAgLy8gV2hlbiB1c2luZyB0aGUgY3Vyc29yIG9yIHRoZSBtb3VzZSB0byBtb3ZlIGFyb3VuZCBpbiB0aGUgdGV4dAotICAgICAgLy8gZWRpdG9yLCB0aGUgbG9jYXRpb24gaGlzdG9yeSBpcyBub3QgdXBkYXRlZCwgc28gd2UgbWFrZSBzdXJlIHdlIGtlZXAKLSAgICAgIC8vIGEgcmVmZXJlbmNlIHRvIHdoZXJlIHdlIGFyZS4gSWYgd2UgdXNlIG90aGVyIG5hdmlnYXRpb24gbWVhbnMsIGxpa2UgdGhlCi0gICAgICAvLyBvdXRsaW5lIHZpZXcsIHRoaXMgY2FsbCB3aWxsIG5vdCBhZGQgYSBuZXcgbG9jYXRpb24gaGlzdG9yeSBlbnRyeSwgYXMKLSAgICAgIC8vIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0IGxvY2F0aW9uIHNldCB0aHJvdWdoIHRoZSBvdXRsaW5lIGRyaXZlbgotICAgICAgLy8gbmF2aWdhdGlvbi4KLQotICAgICAgYm9vbGVhbiBzYW1lRWRpdG9yID0gZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpIGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiAoKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvclBhcnQuZ2V0RWRpdG9ySW5wdXQoKSkuZ2V0RmlsZSgpLmVxdWFscyhmaWxlKTsKLQotICAgICAgd29ya2JlbmNoUGFnZS5nZXROYXZpZ2F0aW9uSGlzdG9yeSgpLm1hcmtMb2NhdGlvbihlZGl0b3JQYXJ0KTsKLQotICAgICAgaWYgKCFzYW1lRWRpdG9yKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgaW4gYSBkaWZmZXJlbnQgZmlsZSwgc28gb3BlbiB0aGUgdGFyZ2V0J3MgZW5jbG9zaW5nCi0gICAgICAgICAgLy8gcmVzb3VyY2UgaW4gaXQncyBvd24gZWRpdG9yLiBMZXQgdGhlIHdvcmtiZW5jaCBkZWNpZGUgd2hhdCBlZGl0b3IKLSAgICAgICAgICAvLyB0byBvcGVuIGJhc2VkIG9uIHRoZSBmaWxlJ3MgY29udGVudCB0eXBlLgotCi0gICAgICAgICAgZWRpdG9yUGFydCA9IElERS5vcGVuRWRpdG9yKHdvcmtiZW5jaFBhZ2UsIGZpbGUsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0vLyAgICAgICAgICBMb2dnZXIubG9nKExvZ2dlci5XQVJOSU5HX0RFQlVHLCBlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIEF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCBlZGl0b3IncyBzZWxlY3Rpb24gbWFuYWdlciBhbmQgdHJ5IHRvCi0gICAgICAvLyBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgdGhpbmcgKHNjaGVtYSBjb21wb25lbnQsIHdzZGwgZWxlbWVudCwgZXRjKQotICAgICAgLy8gcG9pbnRlZCB0byBieSBmU3BlYy4KLQotICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0KLSAgICAgIGlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZlNwZWMpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMSHlwZXJsaW5rRGV0ZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI2MGUyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETEh5cGVybGlua0RldGVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuT3Blbk9uU2VsZWN0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREh5cGVybGlua0RldGVjdG9yOwotLyoqCi0gKiBEZXRlY3RzIGh5cGVybGlua3MgZm9yIFdTREwgZmlsZXMuIFVzZWQgYnkgdGhlIFdTREwgdGV4dCBlZGl0b3IgdG8gcHJvdmlkZSBhCi0gKiAiR28gdG8gZGVjbGFyYXRpb24iIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB3aXRoIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIEphdmEKLSAqIGVkaXRvci4KLSAqLwotcHVibGljIGNsYXNzIFdTRExIeXBlcmxpbmtEZXRlY3RvciBleHRlbmRzIFhTREh5cGVybGlua0RldGVjdG9yCi17Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICovCi0gIHByb3RlY3RlZCBJSHlwZXJsaW5rIGNyZWF0ZUh5cGVybGluayhJRG9jdW1lbnQgZG9jdW1lbnQsIElET01Ob2RlIG5vZGUsIElSZWdpb24gcmVnaW9uKQotICB7Ci0gICAgLy8gSGVyZSB3ZSdyZSB0cnlpbmcgdG8gZmluZCB0aGUgdGFyZ2V0IGNvbXBvbmVudCdzIHJlc291cmNlIGFuZCBzcGVjLgotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihkb2N1bWVudCk7Ci0gICAgT3Blbk9uU2VsZWN0aW9uSGVscGVyIGhlbHBlciA9IG5ldyBPcGVuT25TZWxlY3Rpb25IZWxwZXIoZGVmaW5pdGlvbik7Ci0gICAgU3RyaW5nW10gdGFyZ2V0RGF0YSA9IGhlbHBlci5jb21wdXRlU3BlY2lmaWNhdGlvbihub2RlKTsKLQotICAgIGlmICh0YXJnZXREYXRhICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHJlc291cmNlID0gdGFyZ2V0RGF0YVswXTsKLSAgICAgIFN0cmluZyBzcGVjID0gdGFyZ2V0RGF0YVsxXTsKLSAgICAgIHJldHVybiBuZXcgV1NETEh5cGVybGluayhyZWdpb24sIHJlc291cmNlLCBzcGVjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBkZWZpbml0aW9uIGZyb20gZG9jdW1lbnQKLSAgICogCi0gICAqIEBwYXJhbSBkb2N1bWVudAotICAgKiBAcmV0dXJuIERlZmluaXRpb24KLSAgICovCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKElEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0RXhpc3RpbmdNb2RlbEZvclJlYWQoZG9jdW1lbnQpOwotICAgIGlmIChtb2RlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJRE9NTW9kZWwpCi0gICAgICAgIHsKLSAgICAgICAgICBJRE9NRG9jdW1lbnQgZG9tRG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotICAgICAgICAgIGlmIChkb21Eb2MgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBXU0RMTW9kZWxBZGFwdGVyIG1vZGVsQWRhcHRlciA9IChXU0RMTW9kZWxBZGFwdGVyKSBkb21Eb2MuZ2V0QWRhcHRlckZvcihXU0RMTW9kZWxBZGFwdGVyLmNsYXNzKTsKLSAgICAgICAgICAgIC8vIElTU1VFOiBpZiBhZGFwdGVyIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIGRvbURvYyBnZXRBZGFwdGVyRm9yCi0gICAgICAgICAgICAvLyB3aWxsIGNyZWF0ZSBvbmUuIFNvIHdoeSBpcyB0aGlzIG51bGwgY2hlY2svY3JlYXRpb24gbmVlZGVkPwotICAgICAgICAgICAgaWYgKG1vZGVsQWRhcHRlciA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtb2RlbEFkYXB0ZXIgPSBuZXcgV1NETE1vZGVsQWRhcHRlcigpOwotICAgICAgICAgICAgICBkb21Eb2MuYWRkQWRhcHRlcihtb2RlbEFkYXB0ZXIpOwotICAgICAgICAgICAgICBtb2RlbEFkYXB0ZXIuY3JlYXRlRGVmaW5pdGlvbihkb21Eb2MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmaW5pdGlvbiA9IG1vZGVsQWRhcHRlci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIG1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzTGlua2FibGVBdHRyaWJ1dGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBib29sZWFuIGlzTGlua2FibGUgPSBzdXBlci5pc0xpbmthYmxlQXR0cmlidXRlKG5hbWUpfHwKLSAgICBuYW1lLmVxdWFscyhXU0RMQ29uc3RhbnRzLkJJTkRJTkdfQVRUUklCVVRFKSB8fCAKLSAgICBuYW1lLmVxdWFscyhXU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFKSB8fCAKLSAgICBuYW1lLmVxdWFscyhXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKSB8fCAKLSAgICBuYW1lLmVxdWFscyhXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKTsgCi0gICAgcmV0dXJuIGlzTGlua2FibGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzNmY2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5JUHJvZ3Jlc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5FeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudXRpbC5Nb2RlbFJlY29uY2lsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC51dGlsLlhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFdTRExNb2RlbEFkYXB0ZXIgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIKLXsKLSAgcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0OwotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIE1vZGVsUmVjb25jaWxlQWRhcHRlciBtb2RlbFJlY29uY2lsZUFkYXB0ZXI7Ci0KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBXU0RMTW9kZWxBZGFwdGVyLmNsYXNzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oRWxlbWVudCBlbGVtZW50LCBEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIHJldHVybiBjcmVhdGVEZWZpbml0aW9uKGRvY3VtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oZmluYWwgRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJRE9NTm9kZSBkb21Ob2RlID0gKElET01Ob2RlKSBkb2N1bWVudDsKLSAgICAgIFN0cmluZyBiYXNlTG9jYXRpb24gPSAiYmxhbmtXU0RMLndzZGwiOyAvLyROT04tTkxTLTEkCi0gICAgICBpZiAoZG9tTm9kZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBiYXNlTG9jYXRpb24gPSBkb21Ob2RlLmdldE1vZGVsKCkuZ2V0QmFzZUxvY2F0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgICAgewotICAgICAgICBJRE9NTW9kZWwgZG9tTW9kZWwgPSAoKElET01Ob2RlKSBkb2N1bWVudCkuZ2V0TW9kZWwoKTsKLSAgICAgICAgYmFzZUxvY2F0aW9uID0gZG9tTW9kZWwuZ2V0QmFzZUxvY2F0aW9uKCk7Ci0gICAgICB9Ci0gICAgICByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICAgIHJlc291cmNlU2V0LmdldEFkYXB0ZXJGYWN0b3JpZXMoKS5hZGQobmV3IFdTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeSgpKTsKLSAgICAgIHJlc291cmNlU2V0LmdldEFkYXB0ZXJGYWN0b3JpZXMoKS5hZGQobmV3IFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeSgpKTsKLSAgICAgIC8vIFRPRE8uLiAucmV2aXN0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIG9idGFpbiBhIFVSSSBmcm9tIHRoZSBTU0UgbW9kZWwKLSAgICAgIC8vCi0gICAgICBVUkkgdXJpID0gbnVsbDsKLSAgICAgIGlmIChiYXNlTG9jYXRpb24uc3RhcnRzV2l0aCgiLyIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHVyaSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGJhc2VMb2NhdGlvbik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChiYXNlTG9jYXRpb24uc3RhcnRzV2l0aCgiaHR0cCIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHVyaSA9IFVSSS5jcmVhdGVVUkkoYmFzZUxvY2F0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoYmFzZUxvY2F0aW9uKTsKLSAgICAgIH0KLSAgICAgIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudEJhc2VVUkkodXJpLnRvU3RyaW5nKCkpOwotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLSAgICAgIFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsIHJlc291cmNlRmFjdG9yeSA9IG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnkuY3JlYXRlUmVzb3VyY2UodXJpKTsKLSAgICAgIHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLmFkZChyZXNvdXJjZSk7Ci0gICAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLSAgICAgIHJlc291cmNlLnNldE1vZGlmaWVkKGZhbHNlKTsKLQotICAgICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHNldEVsZW1lbnRPcGVyYXRpb24gPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBVc2UgdGhlIGFuaW1hdGVkIGZsYXZvdXIgYXMgd2UgZG9uJ3Qga25vdyBiZWZvcmVoYW5kIGhvdyBtYW55IHRpY2tzIHdlIG5lZWQuCi0gICAgICAgICAgLy8gVGhlIHRhc2sgbmFtZSB3aWxsIGJlIGRpc3BsYXllZCBieSB0aGUgY29kZSBpbiBXU0RMUmVzb3VyY2VJbXBsIGFuZCBYU0RSZXNvdXJjZUltcGwuCi0gICAgICAgICAgCi0gICAgICAgICAgbW9uaXRvci5iZWdpblRhc2soIiIsIElQcm9ncmVzc01vbml0b3IuVU5LTk9XTik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgICAgIE1hcCBsb2FkT3B0aW9ucyA9IHJlc291cmNlU2V0LmdldExvYWRPcHRpb25zKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgbG9hZE9wdGlvbnMucHV0KFdTRExSZXNvdXJjZUltcGwuV1NETF9QUk9HUkVTU19NT05JVE9SLCBtb25pdG9yKTsKLSAgICAgICAgICBsb2FkT3B0aW9ucy5wdXQoWFNEUmVzb3VyY2VJbXBsLlhTRF9QUk9HUkVTU19NT05JVE9SLCBtb25pdG9yKTsKLSAgICAgICAgICAKLSAgICAgICAgICBkZWZpbml0aW9uLnNldEVsZW1lbnQoZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotICAgICAgICAgICgoRGVmaW5pdGlvbkltcGwpIGRlZmluaXRpb24pLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgbG9hZE9wdGlvbnMucmVtb3ZlKFdTRExSZXNvdXJjZUltcGwuV1NETF9QUk9HUkVTU19NT05JVE9SKTsKLSAgICAgICAgICBsb2FkT3B0aW9ucy5yZW1vdmUoWFNEUmVzb3VyY2VJbXBsLlhTRF9QUk9HUkVTU19NT05JVE9SKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgSVByb2dyZXNzU2VydmljZSBwcm9ncmVzc1NlcnZpY2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHByb2dyZXNzU2VydmljZS5idXN5Q3Vyc29yV2hpbGUoc2V0RWxlbWVudE9wZXJhdGlvbik7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9ICAgICAgICAgICAgIAotICAgICAgCi0gICAgICAvLyBhdHRhY2ggYW4gYWRhcHRlciB0byBrZWVwIHRoZSBXU0RMIG1vZGVsIGFuZCBET00gaW4gc3luYwotICAgICAgLy8KLSAgICAgIG1vZGVsUmVjb25jaWxlQWRhcHRlciA9IG5ldyBXU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyKGRvY3VtZW50LCBkZWZpbml0aW9uKTsKLSAgICAgIGRvbU5vZGUuZ2V0TW9kZWwoKS5hZGRNb2RlbFN0YXRlTGlzdGVuZXIobW9kZWxSZWNvbmNpbGVBZGFwdGVyKTsKLSAgICAgIAotICAgICAgLy8gVE9ETy4uLiBDUyA6IHJldmlzaXQgdGhpcyBsaW5lCi0gICAgICAvLyBjdXJyZW50bHkgdGhpcyBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhICd0eXBlJyBzeXN0ZW0gd2l0aCB0aGUgZGVmaW5pdGlvbgotICAgICAgLy8gSSBzdXNwZWN0IHRoYXQgdGhpcyBjb3VsZCBiZSBtYWRlIGEgd2hvbGUgbG90IG1vcmUgc2ltcGxlCi0gICAgICAvLwotICAgICAgV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5zZXRUeXBlU3lzdGVtUHJvdmlkZXIoZGVmaW5pdGlvbiwgbmV3IEV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXIoKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgTW9kZWxSZWNvbmNpbGVBZGFwdGVyIGdldE1vZGVsUmVjb25jaWxlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbW9kZWxSZWNvbmNpbGVBZGFwdGVyOwotICB9ICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgV1NETE1vZGVsQWRhcHRlciBsb29rdXBPckNyZWF0ZU1vZGVsQWRhcHRlcihEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIFdTRExNb2RlbEFkYXB0ZXIgYWRhcHRlciA9IG51bGw7Ci0gICAgaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSU5vZGVOb3RpZmllcikKLSAgICB7Ci0gICAgICBJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gKElOb2RlTm90aWZpZXIpZG9jdW1lbnQ7Ci0gICAgICBhZGFwdGVyID0gKFdTRExNb2RlbEFkYXB0ZXIpbm90aWZpZXIuZ2V0QWRhcHRlckZvcihXU0RMTW9kZWxBZGFwdGVyLmNsYXNzKTsKLSAgICAgIGlmIChhZGFwdGVyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGFkYXB0ZXIgPSBuZXcgV1NETE1vZGVsQWRhcHRlcigpOyAgICAgICAKLSAgICAgICAgbm90aWZpZXIuYWRkQWRhcHRlcihhZGFwdGVyKTsgICAgICAgIAotICAgICAgfSAKLSAgICB9ICAgCi0gICAgcmV0dXJuIGFkYXB0ZXI7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGU3YTk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxMb2NhdG9yQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMTW9kZWxMb2NhdG9yOwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIHByb3RlY3RlZCBDdXN0b21XU0RMTW9kZWxMb2NhdG9yIGN1c3RvbVdTRExNb2RlbExvY2F0b3IgPSBuZXcgQ3VzdG9tV1NETE1vZGVsTG9jYXRvcigpOwotICAKLSAgY2xhc3MgQ3VzdG9tV1NETE1vZGVsTG9jYXRvciBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMgV1NETE1vZGVsTG9jYXRvcgotICB7Ci0gICAgcHVibGljIFN0cmluZyByZXNvbHZlVVJJKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbikKLSAgICB7Ci0gICAgICByZXR1cm4gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKS5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbmFtZXNwYWNlLCBsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNBZGF0cGVyRm9yVHlwZShPYmplY3QgdHlwZSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHlwZSA9PSBXU0RMTW9kZWxMb2NhdG9yLmNsYXNzOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBXU0RMTW9kZWxMb2NhdG9yLmNsYXNzOwotICB9Ci0KLSAgcHVibGljIEFkYXB0ZXIgYWRhcHROZXcoTm90aWZpZXIgdGFyZ2V0LCBPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiBjdXN0b21XU0RMTW9kZWxMb2NhdG9yOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbFF1ZXJ5RXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUXVlcnlFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFiMzEyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUXVlcnlFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudGV4dC5YU0RNb2RlbFF1ZXJ5RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudXRpbC5UeXBlc0hlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTW9kZWxRdWVyeUV4dGVuc2lvbiBleHRlbmRzIFhTRE1vZGVsUXVlcnlFeHRlbnNpb24KLXsKLSAgcHVibGljIFdTRExNb2RlbFF1ZXJ5RXh0ZW5zaW9uKCkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNQYXJlbnRFbGVtZW50TWVzc2FnZVJlZmVyZW5jZShTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJpbnB1dCIpIHx8IHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygib3V0cHV0IikgfHwgcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJmYXVsdCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNNZXNzYWdlUmVmZXJlbmNlKFN0cmluZyBlbGVtZW50TmFtZSkKLSAgewotICAgIHJldHVybiBlbGVtZW50TmFtZS5lcXVhbHMoImJvZHkiKSB8fCBlbGVtZW50TmFtZS5lcXVhbHMoImhlYWRlciIpIHx8IGVsZW1lbnROYW1lLmVxdWFscygiZmF1bHQiKSB8fCBlbGVtZW50TmFtZS5lcXVhbHMoInVybFJlcGxhY2VtZW50IikgfHwgZWxlbWVudE5hbWUuZXF1YWxzKCJ1cmxFbmNvZGVkIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkIC8vJE5PTi1OTFMtNCQgLy8kTk9OLU5MUy01JAotICB9Ci0gIAotICAKLSAgcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhYmxlQ2hpbGRFbGVtZW50KE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7ICAgIAotICAgIAotICAgIGlmIChwYXJlbnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIHBhcmVudE5vZGU7Ci0gICAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWVzcGFjZVVSSSA9IHBhcmVudE5vZGUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnROb2RlLmdldExvY2FsTmFtZSgpOwotICAgICAgLy8gb25seSBmaWx0ZXIgY2hpbGRyZW4gZm9yICdub24tc2NoZW1hJyBlbGVtZW50cwotICAgICAgLy8gICAKLSAgICAgIGlmICghV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSS5lcXVhbHMocGFyZW50RWxlbWVudE5hbWVzcGFjZVVSSSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRFbGVtZW50TmFtZSAhPSBudWxsICYmIG5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIG5hbWVzcGFjZSBhcmUgb25lIHRoYXQgYWx3YXlzIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGZvciBub3cgdGhpcyBpcyBoYXJkY29kZWQKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAobmFtZXNwYWNlLmVxdWFscygiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBleGNsdWRlIHNvYXAtZW5jIGVsZW1lbnRzCi0gICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobmFtZXNwYWNlLmVxdWFscyhXU0RMQ29uc3RhbnRzLlhTRF9OQU1FU1BBQ0VfVVJJKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gZWNsaXBzZSBhbGwgc2NoZW1hIGVsZW1lbnRzLCBleGNlcHQgZm9yICdzY2hlbWEnIHdpdGhpbmcgd3NkbCB0eXBlcyBlbGVtZW50cyAKLSAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJ0eXBlcyIpICYmIG5hbWUuZXF1YWxzKCJzY2hlbWEiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChuYW1lc3BhY2UuZXF1YWxzKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gY3MgOiB0aGUgJ3JlcXVpcmVkJyBhdHRyaWJ1dGUgaXMgYnVybmVkIGludG8gV1NETCBzY2hlbWEgYXMgdGhlICdiYXNlJyBleHRlbnNpYmlsaXR5IGVsZW1lbnQKLSAgICAgICAgICAgICAgLy8gdGhlIFdUUCBXU0RMIHZhbGlkYXRvciBjb21wbGFpbnMgd2hlbiB0aGVzZSBhcmUgcHJlc2VudCBzbyB0aGlzIGxpbmUgZmlsdGVycyB0aGVtIG91dAotICAgICAgICAgICAgICAvLyBvZiB0aGUgY29udGVudCBhc3Npc3QgYW5kIGV4dGVuc2lvbiBkZXRhaWxzIHZpZXcuICBBcyBmYXIgYXMgSSBjYW4gdGVsbCBubyBvbmUgYWN0dWFsbHkgdXNlcyAnZW0KLSAgICAgICAgICAgICAgLy8gaW4gcHJhY3Rpc2UgLi4uIHNvIGZpbHRlcmluZyB0aGVtIG91dCBzaG91bGQgYmUgb2suICAKLSAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgLy8gVE9ETyAoY3MpIGhvdyBjb21lIHRoZSBzY2hlbWEgc2F5cyB0aGVpciBvayBidXQgdGhlIHZhbGlkYXRvciBkb2Vzbid0IGxpa2UgdGhlbT8KLSAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgcmVzdWx0ID0gIW5hbWUuZXF1YWxzKCJyZXF1aXJlZCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICB9ICAKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gVE9ETy4uIHdlIHNob3VsZCBpbnZlc3RpZ2F0ZSByZW1vdmluZyB0aGUgIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgIC8vIHNob3VsZG4ndCB0aGlzIGJlIGEgTW9kZWxRdWVyeUV4dGVuc2lvbiBkZWZpbmVkIG9uIHRoZSBleHRlbnNpb24gbGFuZ3VhZ2VzPwotICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGZpbHRlciA9IChFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyKSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5KCkuZ2V0UHJvcGVydHkobmFtZXNwYWNlLCAiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmlsdGVyLmlzVmFsaWRDb250ZXh0KGVsZW1lbnQsIG5hbWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdXBlci5pc0FwcGxpY2FibGVDaGlsZEVsZW1lbnQocGFyZW50Tm9kZSwgbmFtZXNwYWNlLCBuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBdHRyaWJ1dGVWYWx1ZXMoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIGlmIChXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChsb29rdXBPckNyZWF0ZURlZmluaXRpb24oZWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkpKTsKLSAgICAgIFN0cmluZyBjdXJyZW50RWxlbWVudE5hbWUgPSBlbGVtZW50LmdldExvY2FsTmFtZSgpOwotICAgICAgaWYgKGNoZWNrTmFtZShuYW1lLCAibWVzc2FnZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxpc3QuYWRkQWxsKHV0aWwuZ2V0TWVzc2FnZU5hbWVzKCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoY2hlY2tOYW1lKG5hbWUsICJiaW5kaW5nIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRCaW5kaW5nTmFtZXMoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGVja05hbWUobmFtZSwgInR5cGUiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBpZiAoY2hlY2tOYW1lKGN1cnJlbnRFbGVtZW50TmFtZSwgImJpbmRpbmciKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRQb3J0VHlwZU5hbWVzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoZWNrTmFtZShjdXJyZW50RWxlbWVudE5hbWUsICJwYXJ0IikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkQWxsKHV0aWwuZ2V0Q29tcG9uZW50TmFtZUxpc3QodHJ1ZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGVja05hbWUobmFtZSwgImVsZW1lbnQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBpZiAoY2hlY2tOYW1lKGN1cnJlbnRFbGVtZW50TmFtZSwgInBhcnQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRDb21wb25lbnROYW1lTGlzdChmYWxzZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBTdHJpbmdbXSByZXN1bHQgPSBuZXcgU3RyaW5nW2xpc3Quc2l6ZSgpXTsKLSAgICAgIGxpc3QudG9BcnJheShyZXN1bHQpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBzdXBlci5nZXRBdHRyaWJ1dGVWYWx1ZXMoZWxlbWVudCwgbmFtZXNwYWNlLCBuYW1lKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RTY2hlbWEgbG9va3VwT3JDcmVhdGVTY2hlbWFGb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgeyAgICAgICAKLSAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVTY2hlbWEoZWxlbWVudCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgWFNEU2NoZW1hIGxvb2t1cE9yQ3JlYXRlU2NoZW1hKEVsZW1lbnQgZWxlbWVudCkKLSAgeyAgIAotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0gICAgT2JqZWN0IG8gPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoZGVmaW5pdGlvbiwgZWxlbWVudCk7Ci0gICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkKLSAgICB7Ci0gICAgICBzY2hlbWEgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvKS5nZXRTY2hlbWEoKTsKLSAgICB9IAotICAgIHJldHVybiBzY2hlbWE7ICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBsb29rdXBPckNyZWF0ZURlZmluaXRpb24oRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIGlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElOb2RlTm90aWZpZXIpCi0gICAgewotICAgICAgSU5vZGVOb3RpZmllciBub3RpZmllciA9IChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudDsKLSAgICAgIFdTRExNb2RlbEFkYXB0ZXIgYWRhcHRlciA9IChXU0RMTW9kZWxBZGFwdGVyKSBub3RpZmllci5nZXRBZGFwdGVyRm9yKFdTRExNb2RlbEFkYXB0ZXIuY2xhc3MpOwotICAgICAgaWYgKGFkYXB0ZXIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYWRhcHRlciA9IG5ldyBXU0RMTW9kZWxBZGFwdGVyKCk7Ci0gICAgICAgIG5vdGlmaWVyLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0gICAgICAgIGFkYXB0ZXIuY3JlYXRlRGVmaW5pdGlvbihkb2N1bWVudCk7Ci0gICAgICB9Ci0gICAgICBkZWZpbml0aW9uID0gYWRhcHRlci5nZXREZWZpbml0aW9uKCk7Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0gIAotICAKLSAgcHJvdGVjdGVkIFR5cGVzSGVscGVyIGdldFR5cGVzSGVscGVyKGZpbmFsIEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBsb29rdXBPckNyZWF0ZVNjaGVtYShlbGVtZW50KTsKLSAgICByZXR1cm4gbmV3IFR5cGVzSGVscGVyKHNjaGVtYSkKLSAgICB7Ci0gICAgICAvLyBUT0RPLi4uIGl0IHNlZW1zIGFzIHRob3VnaCB0aGUgbW9kZWwgaXMgbm90IGNvcnJlY3RseQotICAgICAgLy8gbWFpbnRpbmcgdGhlIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlCi0gICAgICAvLyBtdXN0IGJlIGEgYnVnIQotICAgICAgLy8KLSAgICAgIHByb3RlY3RlZCBMaXN0IGdldFByZWZpeGVzRm9yTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IHN1cGVyLmdldFByZWZpeGVzRm9yTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0gICAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICAgIHsgIAotICAgICAgICAgIE1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpIG1hcC5nZXQocHJlZml4KTsKLSAgICAgICAgICAgIGlmIChucyAhPSBudWxsICYmIG5zLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWxpc3QuY29udGFpbnMocHJlZml4KSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgICB9ICAgICAgIAotICAgIH07ICAgIAotICB9IAotICAKLSAgLyoqICAgCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBsb29rdXBPckNyZWF0ZURlZmluaXRpb24oRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUmVjb25jaWxlQWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbFJlY29uY2lsZUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyMDc2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUmVjb25jaWxlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudXRpbC5Nb2RlbFJlY29uY2lsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFNjaGVtYUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLWNsYXNzIFdTRExNb2RlbFJlY29uY2lsZUFkYXB0ZXIgZXh0ZW5kcyBNb2RlbFJlY29uY2lsZUFkYXB0ZXIKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIHB1YmxpYyBXU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyKERvY3VtZW50IGRvY3VtZW50LCBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsgICAgICAgICAgIAotICAgIHN1cGVyKGRvY3VtZW50KTsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9IAotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIGNsZXZlciBlbm91Z2ggdG8gZGVhbCB3aXRoICdiYWQnIGRvY3VtZW50cyB0aGF0IGhhcHBlbiAKLSAgLy8gdG8gaGF2ZSBtb3JlIHRoYW4gb25lIHJvb3QgZWxlbWVudC4gIEl0IHBpY2tzIG9mIHRoZSBmaXJzdCAnbWF0Y2hpbmcnIGVsZW1lbnQuCi0gIC8vCi0gIC8vIFRPRE8gKGNzKSB3aHkgYXJlbid0IHdlIGNhbGxpbmcgdGhpcyBmcm9tIHRoZSBXU0RMTW9kZWxBZGFwdGVyIHdoZW4gdGhlIG1vZGVsIGlzIGluaXRpYWxpemVkPwotICAvLwotICBwcml2YXRlIEVsZW1lbnQgZ2V0RGVmaW5pdGlvbkVsZW1lbnQoRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gbnVsbDsgICAgCi0gICAgZm9yIChOb2RlIG5vZGUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICB7Ci0gICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudClub2RlOwotICAgICAgICBpZiAoV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShlbGVtZW50KSA9PSBXU0RMQ29uc3RhbnRzLkRFRklOSVRJT04pCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZpbml0aW9uRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb25FbGVtZW50OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVOb2RlQ2hhbmdlZChOb2RlIG5vZGUpCi0gIHsKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgewotICAgICAgcmVjb25jaWxlTW9kZWxPYmplY3RGb3JFbGVtZW50KChFbGVtZW50KW5vZGUpOyAgICAgIAotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQpCi0gICAgewotICAgICAgLy8gVGhlIGRvY3VtZW50IGNoYW5nZWQgc28gd2UgbWF5IG5lZWQgdG8gZml4IHVwIHRoZSAKLSAgICAgIC8vIGRlZmluaXRpb24ncyByb290IGVsZW1lbnQKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gKERvY3VtZW50KW5vZGU7ICAgIAotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGdldERlZmluaXRpb25FbGVtZW50KGRvY3VtZW50KTsKLSAgICAgIGlmIChkZWZpbml0aW9uRWxlbWVudCAhPSBudWxsICYmIGRlZmluaXRpb25FbGVtZW50ICE9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKQotICAgICAgeyAgIAotICAgICAgICAvLyBoZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIG5ldyAnZGVmaW5pdGlvbicgZWxlbWVudCB3YXMgYWRkZWQKLSAgICAgICAgLy8oZS5nLiB0aGUgZmlsZSB3YXMgdG90YWxseSBibGFuayBhbmQgdGhlbiB3ZSB0eXBlIGluIHRoZSByb290IGVsZW1lbnQpICAgICAgICAKLSAgICAgICAgLy8gU2VlIEJ1ZyA1MzY2Ci0gICAgICAgIC8vCi0gICAgICAgIGlmIChkZWZpbml0aW9uRWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETENvbnN0YW50cy5ERUZJTklUSU9OX0VMRU1FTlRfVEFHKSkgICAgICAgICAKLSAgICAgICAgeyAgCi0gICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKiBTZXR0aW5nIG5ldyBkZWZpbml0aW9uIik7Ci0gICAgICAgICAgZGVmaW5pdGlvbi5zZXRFbGVtZW50KGRlZmluaXRpb25FbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfSAgICAgIAotICAgICAgZWxzZSBpZiAoZGVmaW5pdGlvbkVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsgICAgICAgCi0gICAgICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgZGVmaW5pdGlvbiBlbGVtZW50J3MgY29udGVudCBoYXMgY2hhbmdlZAotICAgICAgICAvLyAKLSAgICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5lbGVtZW50Q2hhbmdlZChkZWZpbml0aW9uRWxlbWVudCk7Ci0gICAgICB9ICAgICAgCi0gICAgICBlbHNlIGlmIChkZWZpbml0aW9uRWxlbWVudCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGRlZmluaXRpb24gZWxlbWVudCBjbGVhciBvdXQgdGhlIFdTREwKLSAgICAgICAgLy8KLSAgICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5yZW1vdmVBbGwoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSByZW1vdmVBbGwoKSBjYWxsIGRvZXMgbm90IHJlbW92ZSBuYW1lc3BhY2VzIGFzIHdlbGwgYW5kIHRoZSBtb2RlbAotICAgICAgICAvLyBkb2VzIG5vdCByZWNvbmNpbGUgd2VsbCBpbiB0aGlzIGNhc2UuIEFsc28gcmVzZXQgdGhlIGRlZmluaXRpb24gbmFtZSBhbmQgdGFyZ2V0Ci0gICAgICAgIC8vIG5hbWVzcGFjZS4KLSAgICAgICAgCi0gICAgICAgIGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpLmNsZWFyKCk7Ci0gICAgICAgIGRlZmluaXRpb24uc2V0UU5hbWUobnVsbCk7Ci0gICAgICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKG51bGwpOwotICAgICAgICAKLSAgICAgICAgLy8gUmVzZXQgdGhlIGRvY3VtZW50IGJlY2F1c2UgcmVtb3ZlQWxsKCkgc2V0cyB0aGUgZG9jdW1lbnQgdG8gbnVsbCBhcyB3ZWxsLgotICAgICAgICBkZWZpbml0aW9uLnNldERvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9ICAgICAgICAgCi0gIH0KLSAgICAgICAKLSAgcHJpdmF0ZSB2b2lkIHJlY29uY2lsZU1vZGVsT2JqZWN0Rm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBPYmplY3QgbW9kZWxPYmplY3QgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoZGVmaW5pdGlvbiwgZWxlbWVudCk7ICAKLSAgICBpZiAobW9kZWxPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpCi0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBlZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpbW9kZWxPYmplY3Q7Ci0gICAgICAgICgoWFNEU2NoZW1hSW1wbCllZS5nZXRTY2hlbWEoKSkuZWxlbWVudENoYW5nZWQoZWxlbWVudCk7Ci0gICAgICAgIGVlLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOyAgICAgICAgICAgIAotICAgICAgfSAgIAotICAgICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpCi0gICAgICB7Ci0gICAgICAgICgoV1NETEVsZW1lbnRJbXBsKW1vZGVsT2JqZWN0KS5lbGVtZW50Q2hhbmdlZChlbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpCi0gICAgICB7Ci0gICAgICAgICgoWFNEQ29uY3JldGVDb21wb25lbnQpbW9kZWxPYmplY3QpLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOyAgICAgICAgCi0gICAgICB9ICAKLSAgICB9ICAgICAKLSAgfSAgCi0KLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVNb2RlbE9iamVjdEZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBpbmRleCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHJlY29uY2lsZU1vZGVsT2JqZWN0Rm9yRWxlbWVudChlbGVtZW50KTsKLSAgfSAgCi0gIAotICBwdWJsaWMgdm9pZCBtb2RlbERpcnR5U3RhdGVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIGJvb2xlYW4gaXNEaXJ0eSkKLSAgewotICAgIGlmICghaXNEaXJ0eSkKLSAgICB7ICAKLSAgICAgIC8vIGNzIDogQXQgdGhpcyB0aW1lICh3aGVuIGEgc2F2ZSBvY2N1cnMpIGl0J3MgYSBnb29kIG9wcG9ydHVuaXR5Ci0gICAgICAvLyB0byB1cGRhdGUgdGhlIG1vZGVsIHRvIGVuc3VyZSBpdCdzIGluIHN5bmMgd2l0aCB0aGUgc291cmNlLiAKLSAgICAgIC8vIFRoYXQgd2F5IGlmIHRoZSBpbmNyZW1lbnRhbCBzeW5jIGJldHdlZW4gRE9NIGFuZCBtb2RlbCBoYXMgZ290dGVuCi0gICAgICAvLyB0aGUgbW9kZWwgb3V0IG9mIHdoYWNrIHdlJ2xsIGJlIGFibGUgdG8gcHV0IHRoaW5ncyByaWdodCBhdCB0aGlzIHBvaW50LgotICAgICAgLy8gICAKLSAgICAgIC8vIFRPRE8gKGNzKSBuZWVkIHRvIGRvIG1vcmUgdG8gZW5zdXJlIG1vZGVsIGlzIHN5bmMnZCB1cCBwcm9wZXJseSAgICAgIAotICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL0NvbXBvbmVudFJlZmVyZW5jZVV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Db21wb25lbnRSZWZlcmVuY2VVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZjMwZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL0NvbXBvbmVudFJlZmVyZW5jZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotcHVibGljIGNsYXNzIENvbXBvbmVudFJlZmVyZW5jZVV0aWwKLXsKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gcm9vdERlZmluaXRpb247Ci0KLSAgcHVibGljIENvbXBvbmVudFJlZmVyZW5jZVV0aWwoRGVmaW5pdGlvbiByb290RGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMucm9vdERlZmluaXRpb24gPSByb290RGVmaW5pdGlvbjsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBhLCBTdHJpbmcgYikKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKGEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBhLmVxdWFscyhiKSB8fCAoYS5sZW5ndGgoKSA9PSAwICYmIGIgPT0gbnVsbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoYiA9PSBudWxsIHx8IGIubGVuZ3RoKCkgPT0gMCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNFcXVhbElucHV0TmFtZShPcGVyYXRpb24gb3BlcmF0aW9uLCBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIElucHV0IG9wZXJhdGlvbklucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nT3BlcmF0aW9uSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAgIGlmIChvcGVyYXRpb25JbnB1dCAhPSBudWxsICYmIGJpbmRpbmdPcGVyYXRpb25JbnB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGlzRXF1YWwob3BlcmF0aW9uSW5wdXQuZ2V0TmFtZSgpLCBiaW5kaW5nT3BlcmF0aW9uSW5wdXQuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob3BlcmF0aW9uSW5wdXQgPT0gbnVsbCAmJiBiaW5kaW5nT3BlcmF0aW9uSW5wdXQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzRXF1YWxPdXRwdXROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24sIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgT3V0cHV0IG9wZXJhdGlvbk91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0gICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3BlcmF0aW9uT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpOwotCi0gICAgaWYgKG9wZXJhdGlvbk91dHB1dCAhPSBudWxsICYmIGJpbmRpbmdPcGVyYXRpb25PdXRwdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBpc0VxdWFsKG9wZXJhdGlvbk91dHB1dC5nZXROYW1lKCksIGJpbmRpbmdPcGVyYXRpb25PdXRwdXQuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob3BlcmF0aW9uT3V0cHV0ID09IG51bGwgJiYgYmluZGluZ09wZXJhdGlvbk91dHB1dCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNNYXRjaGluZ0JpbmRpbmcoT3BlcmF0aW9uIG9wZXJhdGlvbiwgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIGlzRXF1YWwob3BlcmF0aW9uLmdldE5hbWUoKSwgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpOyAvKiAmJgotICAgIAkJCSAgIGlzRXF1YWxJbnB1dE5hbWUob3BlcmF0aW9uLCBiaW5kaW5nT3BlcmF0aW9uKSAmJgotICAgIAkJCSAgIGlzRXF1YWxPdXRwdXROYW1lKG9wZXJhdGlvbiwgYmluZGluZ09wZXJhdGlvbik7Ki8KLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFBvcnRzRm9yUG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0U2VydmljZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBqLm5leHQoKTsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOwotICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsICYmIGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCkgPT0gcG9ydFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChwb3J0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFBvcnRzRm9yQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0U2VydmljZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBqLm5leHQoKTsKLSAgICAgICAgaWYgKHBvcnQuZ2V0RUJpbmRpbmcoKSA9PSBiaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQocG9ydCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nT3BlcmF0aW9ucyhPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLQotICAgIGlmIChvcGVyYXRpb25OYW1lICE9IG51bGwpCi0gICAgewotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBnZXRFbmNsb3NpbmdQb3J0VHlwZShvcGVyYXRpb24pOwotICAgICAgZm9yIChJdGVyYXRvciBpID0gZ2V0QmluZGluZ3MocG9ydFR5cGUpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGkubmV4dCgpOwotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbiwgYmluZGluZyk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbiwgQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaiA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGoubmV4dCgpOwotICAgICAgaWYgKGlzTWF0Y2hpbmdCaW5kaW5nKG9wZXJhdGlvbiwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGJpbmRpbmdPcGVyYXRpb247Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdJbnB1dCBnZXRCaW5kaW5nSW5wdXQoSW5wdXQgaW5wdXQsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKE9wZXJhdGlvbikgaW5wdXQuZUNvbnRhaW5lcigpLCBiaW5kaW5nKTsKLSAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbiAhPSBudWxsID8gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdPdXRwdXQgZ2V0QmluZGluZ091dHB1dChPdXRwdXQgb3V0cHV0LCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKChPcGVyYXRpb24pIG91dHB1dC5lQ29udGFpbmVyKCksIGJpbmRpbmcpOwotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwgPyBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdGYXVsdCBnZXRCaW5kaW5nRmF1bHQoRmF1bHQgZmF1bHQsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEJpbmRpbmdGYXVsdCByZXN1bHQgPSBudWxsOwotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgaWYgKGZhdWx0TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKE9wZXJhdGlvbikgZmF1bHQuZUNvbnRhaW5lcigpLCBiaW5kaW5nKTsKLSAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChCaW5kaW5nRmF1bHQpIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0KGZhdWx0TmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgRU9iamVjdCBnZXRCaW5kaW5nT2JqZWN0KEVPYmplY3QgaW50ZXJmYWNlT2JqZWN0LCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBFT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIElucHV0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEJpbmRpbmdJbnB1dCgoSW5wdXQpIGludGVyZmFjZU9iamVjdCwgYmluZGluZyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIE91dHB1dCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRCaW5kaW5nT3V0cHV0KChPdXRwdXQpIGludGVyZmFjZU9iamVjdCwgYmluZGluZyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIEZhdWx0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEJpbmRpbmdGYXVsdCgoRmF1bHQpIGludGVyZmFjZU9iamVjdCwgYmluZGluZyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRCaW5kaW5nT3BlcmF0aW9uKChPcGVyYXRpb24pIGludGVyZmFjZU9iamVjdCwgYmluZGluZyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGJpbmRpbmc7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nSW5wdXRzKElucHV0IGlucHV0KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIExpc3Qgb3BlcmF0aW9ucyA9IGdldEJpbmRpbmdPcGVyYXRpb25zKChPcGVyYXRpb24pIGlucHV0LmVDb250YWluZXIoKSk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGkubmV4dCgpOwotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ091dHB1dHMoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgb3V0cHV0LmVDb250YWluZXIoKTsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBvcGVyYXRpb25zID0gZ2V0QmluZGluZ09wZXJhdGlvbnMob3BlcmF0aW9uKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgaS5uZXh0KCk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ0ZhdWx0cyhGYXVsdCBmYXVsdCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgIGlmIChmYXVsdE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgZmF1bHQuZUNvbnRhaW5lcigpOwotICAgICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBnZXRCaW5kaW5nT3BlcmF0aW9ucyhvcGVyYXRpb24pOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBpLm5leHQoKTsKLSAgICAgICAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCkgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoZmF1bHROYW1lKTsKLSAgICAgICAgICBpZiAoYmluZGluZ0ZhdWx0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgbGlzdC5hZGQoYmluZGluZ0ZhdWx0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgUG9ydFR5cGUgZ2V0RW5jbG9zaW5nUG9ydFR5cGUoT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIHJldHVybiAoUG9ydFR5cGUpIG9wZXJhdGlvbi5lQ29udGFpbmVyKCk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5ncyhPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIGdldEJpbmRpbmdzKGdldEVuY2xvc2luZ1BvcnRUeXBlKG9wZXJhdGlvbikpOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ3MoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGoubmV4dCgpOwotICAgICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCB8fCBiaW5kaW5nLmdldFBvcnRUeXBlKCkgPT0gcG9ydFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChiaW5kaW5nKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdzV2l0aG91dE9wZXJhdGlvbihQb3J0VHlwZSBwb3J0VHlwZSwgU3RyaW5nIG9wZXJhdGlvbk5hbWUpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAob3BlcmF0aW9uTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgYmluZGluZ3MgPSBnZXRCaW5kaW5ncyhwb3J0VHlwZSk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBiaW5kaW5ncy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpLm5leHQoKTsKLSAgICAgICAgYm9vbGVhbiBoYXNOYW1lID0gZmFsc2U7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgai5uZXh0KCk7Ci0gICAgICAgICAgaWYgKG9wZXJhdGlvbk5hbWUuZXF1YWxzKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBoYXNOYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhc05hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQuYWRkKGJpbmRpbmcpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5ncygpCi0gIHsKLSAgICByZXR1cm4gZ2V0QmluZGluZ3MoKFBvcnRUeXBlKSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdOYW1lcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0QmluZGluZ3MoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGkubmV4dCgpOwotICAgICAgbGlzdC5hZGRBbGwoZ2V0UHJlZml4ZWROYW1lcyhiaW5kaW5nLmdldFFOYW1lKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQb3J0VHlwZU5hbWVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIGoubmV4dCgpOwotICAgICAgICBsaXN0LmFkZEFsbChnZXRQcmVmaXhlZE5hbWVzKHBvcnRUeXBlLmdldFFOYW1lKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRTZXJ2aWNlcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKSk7Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UG9ydFR5cGVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKSk7Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGxpc3QuYWRkQWxsKGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkpOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFR5cGVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBsaXN0LmFkZChkZWZpbml0aW9uLmdldEVUeXBlcygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRNZXNzYWdlTmFtZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBqLm5leHQoKTsKLSAgICAgICAgbGlzdC5hZGRBbGwoZ2V0UHJlZml4ZWROYW1lcyhtZXNzYWdlLmdldFFOYW1lKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXREZWZpbml0aW9ucygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgYWRkRGVmaW5pdGlvbihyb290RGVmaW5pdGlvbiwgbGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogQGRlcHJlY2F0ZWQgLS0gd2Ugc2hvdWxkIGFsd2F5cyB1c2UgZ2V0UHJlZml4ZWROYW1lcwotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcmVmaXhlZE5hbWUoUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHByZWZpeCA9IHJvb3REZWZpbml0aW9uLmdldFByZWZpeChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAocHJlZml4ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5hbWUgPSBwcmVmaXggKyAiOiIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFByZWZpeGVkTmFtZXMoUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWFwIG1hcCA9IHJvb3REZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IChTdHJpbmcpIG1hcC5nZXQocHJlZml4KTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsICYmIG5hbWVzcGFjZS5lcXVhbHMocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG5hbWUgPSBwcmVmaXgubGVuZ3RoKCkgPiAwID8gcHJlZml4ICsgIjoiICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkgOiAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgICAgICAgICAgcW5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgbGlzdC5hZGQobmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTGlzdCBsaXN0KQotICB7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChkZWZpbml0aW9uKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEltcG9ydEltcGwgdGhlSW1wb3J0ID0gKEltcG9ydEltcGwpIGkubmV4dCgpOwotICAgICAgICBpZiAodGhlSW1wb3J0LmdldExvY2F0aW9uVVJJKCkgIT0gbnVsbCAmJiAhdGhlSW1wb3J0LmdldExvY2F0aW9uVVJJKCkuZW5kc1dpdGgoInhzZCIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVJbXBvcnQuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7CSAKLSAgICAgICAgICBEZWZpbml0aW9uIGltcG9ydGVkRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSB0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLSAgICAgICAgICBpZiAoaW1wb3J0ZWREZWZpbml0aW9uICE9IG51bGwgJiYgIWxpc3QuY29udGFpbnMoaW1wb3J0ZWREZWZpbml0aW9uKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhZGREZWZpbml0aW9uKGltcG9ydGVkRGVmaW5pdGlvbiwgbGlzdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydFR5cGVSZWZlcmVuY2UoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGJpbmRpbmcpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldFBvcnRUeXBlUmVmZXJlbmNlKEJpbmRpbmcgYmluZGluZywgU3RyaW5nIHBvcnRUeXBlKQotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGJpbmRpbmcpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInR5cGUiLCBwb3J0VHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCaW5kaW5nUmVmZXJlbmNlKFBvcnQgcG9ydCkKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChwb3J0KTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJiaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE5hbWUoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGJpbmRpbmcpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRQb3J0VHlwZVJlZmVyZW5jZVFOYW1lKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFFOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFBvcnRUeXBlUmVmZXJlbmNlKGJpbmRpbmcpOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBXU0RMRWRpdG9yVXRpbC5jcmVhdGVRTmFtZShkZWZpbml0aW9uLCBwcmVmaXhlZE5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRCaW5kaW5nUmVmZXJlbmNlUU5hbWUoUG9ydCBwb3J0KQotICB7Ci0gICAgUU5hbWUgcmVzdWx0ID0gbnVsbDsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0QmluZGluZ1JlZmVyZW5jZShwb3J0KTsKLSAgICBpZiAocHJlZml4ZWROYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gV1NETEVkaXRvclV0aWwuY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgcHJlZml4ZWROYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZlcmVuY2UoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZUhlbHBlcihpbnB1dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlUmVmZXJlbmNlKE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZUhlbHBlcihvdXRwdXQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZVJlZmVyZW5jZShGYXVsdCBmYXVsdCkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlUmVmZXJlbmNlSGVscGVyKGZhdWx0KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lKElucHV0IGlucHV0KQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZUhlbHBlcihpbnB1dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFFOYW1lIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZUhlbHBlcihvdXRwdXQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWUoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lSGVscGVyKGZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZlcmVuY2VIZWxwZXIoV1NETEVsZW1lbnQgbykKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lSGVscGVyKFdTRExFbGVtZW50IG8pCi0gIHsKLSAgICBRTmFtZSByZXN1bHQgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG8uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIFN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRNZXNzYWdlUmVmZXJlbmNlSGVscGVyKG8pOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBXU0RMRWRpdG9yVXRpbC5jcmVhdGVRTmFtZShkZWZpbml0aW9uLCBwcmVmaXhlZE5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZVBvcnRUeXBlUmVmZXJlbmNlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpLm5leHQoKTsKLSAgICAgIFFOYW1lIHFuYW1lID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRQb3J0VHlwZVJlZmVyZW5jZVFOYW1lKGJpbmRpbmcpOwotCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChxbmFtZSAhPSBudWxsKSA/IChQb3J0VHlwZSkgZGVmaW5pdGlvbi5nZXRQb3J0VHlwZShxbmFtZSkgOiBudWxsOwotCi0gICAgICBpZiAoYmluZGluZy5nZXRQb3J0VHlwZSgpICE9IHBvcnRUeXBlKQotICAgICAgewotICAgICAgICBiaW5kaW5nLnNldFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlQmluZGluZ1JlZmVyZW5jZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgaS5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGoubmV4dCgpOwotICAgICAgICBRTmFtZSBxbmFtZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0QmluZGluZ1JlZmVyZW5jZVFOYW1lKHBvcnQpOwotCi0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChxbmFtZSAhPSBudWxsKSA/IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpIDogbnVsbDsKLQotICAgICAgICBpZiAocG9ydC5nZXRCaW5kaW5nKCkgIT0gYmluZGluZykKLSAgICAgICAgewotICAgICAgICAgIHBvcnQuc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVNZXNzYWdlUmVmZXJlbmNlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICAvLyBmb3IgZWFjaCBwb3J0IHR5cGUKLSAgICAvLwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBpLm5leHQoKTsKLQotICAgICAgLy8gZm9yIGVhY2ggb3BlcmF0aW9uCi0gICAgICAvLwotICAgICAgZm9yIChJdGVyYXRvciBqID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBqLm5leHQoKTsKLQotICAgICAgICAvLyBoYW5kbGUgSW5wdXQKLSAgICAgICAgLy8KLSAgICAgICAgSW5wdXQgaW5wdXQgPSAoSW5wdXQpIG9wZXJhdGlvbi5nZXRJbnB1dCgpOwotICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFuYW1lID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWUoaW5wdXQpOwotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChxbmFtZSAhPSBudWxsKSA/IChNZXNzYWdlKSBkZWZpbml0aW9uLmdldE1lc3NhZ2UocW5hbWUpIDogbnVsbDsKLSAgICAgICAgICBpZiAoaW5wdXQuZ2V0TWVzc2FnZSgpICE9IG1lc3NhZ2UpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBoYW5kbGUgT3V0cHV0Ci0gICAgICAgIC8vCi0gICAgICAgIE91dHB1dCBvdXRwdXQgPSAoT3V0cHV0KSBvcGVyYXRpb24uZ2V0T3V0cHV0KCk7Ci0gICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFuYW1lID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWUob3V0cHV0KTsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAocW5hbWUgIT0gbnVsbCkgPyAoTWVzc2FnZSkgZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHFuYW1lKSA6IG51bGw7Ci0gICAgICAgICAgaWYgKG91dHB1dC5nZXRNZXNzYWdlKCkgIT0gbWVzc2FnZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBoYW5kbGUgRmF1bHRzCi0gICAgICAgIC8vCi0gICAgICAgIGZvciAoSXRlcmF0b3IgayA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgay5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGsubmV4dCgpOwotCi0gICAgICAgICAgUU5hbWUgcW5hbWUgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShmYXVsdCk7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKHFuYW1lICE9IG51bGwpID8gKE1lc3NhZ2UpIGRlZmluaXRpb24uZ2V0TWVzc2FnZShxbmFtZSkgOiBudWxsOwotICAgICAgICAgIGlmIChmYXVsdC5nZXRNZXNzYWdlKCkgIT0gbWVzc2FnZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmYXVsdC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVTY2hlbWFSZWZlcmVuY2VzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgai5uZXh0KCk7Ci0gICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChwYXJ0KTsKLSAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICgoV1NETEVsZW1lbnRJbXBsKXBhcnQpLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKFBvcnRUeXBlIHBvcnRUeXBlLCBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBPcGVyYXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgaS5uZXh0KCk7Ci0gICAgICBpZiAoaXNNYXRjaGluZ0JpbmRpbmcob3BlcmF0aW9uLCBiaW5kaW5nT3BlcmF0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVPcGVyYXRpb25SZWZlcmVuY2UoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbXB1dGVPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0T3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0Q29tcG9uZW50TmFtZUxpc3QoYm9vbGVhbiBpc1R5cGUpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gICAgSVR5cGVTeXN0ZW1Qcm92aWRlciB0eXBlU3lzdGVtUHJvdmlkZXIgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldFR5cGVTeXN0ZW1Qcm92aWRlcihyb290RGVmaW5pdGlvbik7Ci0gICAgaWYgKHR5cGVTeXN0ZW1Qcm92aWRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGlzVHlwZSA/IHR5cGVTeXN0ZW1Qcm92aWRlci5nZXRBdmFpbGFibGVUeXBlTmFtZXMocm9vdERlZmluaXRpb24sIDApIDogdHlwZVN5c3RlbVByb3ZpZGVyLmdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhyb290RGVmaW5pdGlvbik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0Q29tcG9uZW50TmFtZUxpc3QoUGFydCBwYXJ0LCBib29sZWFuIGlzVHlwZSkKLSAgewotICAgIExpc3QgcmVzdWx0ID0gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBJVHlwZVN5c3RlbVByb3ZpZGVyIHR5cGVTeXN0ZW1Qcm92aWRlciA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKGRlZmluaXRpb24pOwotICAgIGlmICh0eXBlU3lzdGVtUHJvdmlkZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBpc1R5cGUgPyB0eXBlU3lzdGVtUHJvdmlkZXIuZ2V0QXZhaWxhYmxlVHlwZU5hbWVzKGRlZmluaXRpb24sIDApIDogdHlwZVN5c3RlbVByb3ZpZGVyLmdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1R5cGUoUGFydCBwYXJ0KQotICB7Ci0gICAgLy9FbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QocGFydCk7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gcGFydC5nZXRFbGVtZW50KCk7Ci0gICAgcmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYXJ0Q29tcG9uZW50UmVmZXJlbmNlKFBhcnQgcGFydCkKLSAgewotICAgIC8vRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBhcnQpOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IHBhcnQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgidHlwZSIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldENvbXBvbmVudFJlZmVyZW5jZShQYXJ0IHBhcnQsIGJvb2xlYW4gaXNUeXBlLCBTdHJpbmcgY29tcG9uZW50TmFtZSkKLSAgewotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChwYXJ0KTsKLSAgICBTdHJpbmcgbmV3QXR0cmlidXRlID0gaXNUeXBlID8gInR5cGUiIDogImVsZW1lbnQiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBTdHJpbmcgb2xkQXR0cmlidXRlID0gaXNUeXBlID8gImVsZW1lbnQiIDogInR5cGUiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShvbGRBdHRyaWJ1dGUpOwotCi0gICAgU3RyaW5nIHZhbHVlID0gY29tcG9uZW50TmFtZSAhPSBudWxsID8gY29tcG9uZW50TmFtZSA6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5ld0F0dHJpYnV0ZSk7Ci0KLSAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoaXNUeXBlKQotICAgICAgewotICAgICAgICBTdHJpbmcgeHNkUHJlZml4ID0gcGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0UHJlZml4KFdTRExDb25zdGFudHMuWFNEX05BTUVTUEFDRV9VUkkpOwotICAgICAgICB2YWx1ZSA9ICJzdHJpbmciOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmICh4c2RQcmVmaXggIT0gbnVsbCAmJiB4c2RQcmVmaXgubGVuZ3RoKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgdmFsdWUgPSB4c2RQcmVmaXggKyAiOiIgKyB2YWx1ZTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IGdldENvbXBvbmVudE5hbWVMaXN0KHBhcnQsIGlzVHlwZSk7Ci0gICAgICAgIHZhbHVlID0gbGlzdC5zaXplKCkgPiAwID8gKFN0cmluZykgbGlzdC5nZXQoMCkgOiAic29tZS1lbGVtZW50LW5hbWUiOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5ld0F0dHJpYnV0ZSwgdmFsdWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBPcGVyYXRpb24gY29tcHV0ZU9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBPcGVyYXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgYmluZGluZ09wZXJhdGlvbi5lQ29udGFpbmVyKCk7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIGJpbmRpbmcuZ2V0UG9ydFR5cGUoKTsKLSAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRPcGVyYXRpb24ocG9ydFR5cGUsIGJpbmRpbmdPcGVyYXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBJbnB1dCBjb21wdXRlSW5wdXQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkKLSAgewotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBjb21wdXRlT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nSW5wdXQuZUNvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gb3BlcmF0aW9uICE9IG51bGwgPyBvcGVyYXRpb24uZ2V0RUlucHV0KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBPdXRwdXQgY29tcHV0ZU91dHB1dChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tcHV0ZU9wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ091dHB1dC5lQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBvcGVyYXRpb24gIT0gbnVsbCA/IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBGYXVsdCBjb21wdXRlRmF1bHQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIEZhdWx0IHJlc3VsdCA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbXB1dGVPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24pIGJpbmRpbmdGYXVsdC5lQ29udGFpbmVyKCkpOwotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGkubmV4dCgpOwotICAgICAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgICAgICBpZiAoZmF1bHROYW1lICE9IG51bGwgJiYgZmF1bHROYW1lLmVxdWFscyhiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGZhdWx0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYXJ0UmVmZXJlbmNlVmFsdWUoUGFydCBwYXJ0KQotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBhcnQpOwotICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoInR5cGUiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgeyAgICAgIAkJCi0gICAgICAgIHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoImVsZW1lbnQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgeyAgCi0gICAgICAgIHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfSAgICAgICAgIAotICAgIH0gIAotICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiAiIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIE9wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKEVsZW1lbnQgYmluZGluZ09wZXJhdGlvbkNvbnRlbnQpCi0gIHsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gbnVsbDsKLSAgICBOb2RlIHBhcmVudCA9IGJpbmRpbmdPcGVyYXRpb25Db250ZW50LmdldFBhcmVudE5vZGUoKTsKLSAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5maW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KHJvb3REZWZpbml0aW9uLCAoRWxlbWVudCkgcGFyZW50KTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBvcGVyYXRpb24gPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24pIG9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvcGVyYXRpb247Ci0gIH0KLQotICBwdWJsaWMgTWVzc2FnZSBnZXRCaW5kaW5nT3BlcmF0aW9uSW5wdXRNZXNzYWdlKEVsZW1lbnQgYmluZGluZ09wZXJhdGlvbkNvbnRlbnQpCi0gIHsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb25Db250ZW50KTsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgcHVibGljIE1lc3NhZ2UgZ2V0QmluZGluZ09wZXJhdGlvbk91dHB1dE1lc3NhZ2UoRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uQ29udGVudCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbkNvbnRlbnQpOwotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXB1dGVSZWxhdGl2ZVVSSShJRmlsZSByZWZlcmVuY2VkTG9jYXRpb24sIElGaWxlIGJhc2VMb2NhdGlvbiwgYm9vbGVhbiBlbmFibGVJRVN0eWxlUmVmZXJlbmNlcykKLSAgewotICAgIC8vIFRPRE8uLi4gd2UgbmVlZCBzb21lIGV4dGVuc2lvbiB0byBhbGxvdyBJRSBmb2xrcyB0byBwbHVnaW4gbG9naWMgdG8gY3JlYXRlIGFuICdJRScgc3R5bGUgcGF0aAotICAgIC8vIFRPRE8uLi4gY29uc2lkZXIgdXNpbmcgVVJJIGNsYXNzIGluIEVNRiAKLSAgICByZXR1cm4gVVJJSGVscGVyLmdldFJlbGF0aXZlVVJJKHJlZmVyZW5jZWRMb2NhdGlvbi5nZXRMb2NhdGlvbigpLCBiYXNlTG9jYXRpb24uZ2V0TG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXB1dGVSZWxhdGl2ZVVSSShTdHJpbmcgcmVmZXJlbmNlZExvY2F0aW9uLCBTdHJpbmcgYmFzZUxvY2F0aW9uLCBib29sZWFuIGVuYWJsZUlFU3R5bGVSZWZlcmVuY2VzKQotICB7Ci0gICAgLy8gVE9ETy4uLiB3ZSBuZWVkIHNvbWUgZXh0ZW5zaW9uIHRvIGFsbG93IElFIGZvbGtzIHRvIHBsdWdpbiBsb2dpYyB0byBjcmVhdGUgYW4gJ0lFJyBzdHlsZSBwYXRoCi0gICAgLy8gVE9ETy4uLiBjb25zaWRlciB1c2luZyBVUkkgY2xhc3MgaW4gRU1GIAotICAgIHJldHVybiBVUklIZWxwZXIuZ2V0UmVsYXRpdmVVUkkocmVmZXJlbmNlZExvY2F0aW9uLCBiYXNlTG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9DcmVhdGVXU0RMRWxlbWVudEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDNlYjFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9DcmVhdGVXU0RMRWxlbWVudEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZVJlZmVyZW5jZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkRmF1bHRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZElucHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkTWVzc2FnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3BlcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUGFydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUG9ydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUG9ydFR5cGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFNlcnZpY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIENyZWF0ZVdTRExFbGVtZW50SGVscGVyIHsKLQkvLyBDb25zdGFudHMgdXNlZCBmb3IgZ2V0dGluZyBQYXJ0IGluZm9ybWF0aW9uCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT04gPSAiRUxFTUVOVF9ERUNMQVJBVElPTiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OICAgICA9ICJUWVBFX0RFRklOSVRJT04iOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBzaG91bGQgYmUgc2V0IGlmIGEgbmFtZSBvdGhlciB0aGFuIHRoZSBjb21wdXRlZCBuYW1lIGlzIHRvIGJlIHVzZWQuCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2VydmljZU5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHBvcnROYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBiaW5kaW5nTmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgcG9ydFR5cGVOYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBvcGVyYXRpb25OYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBpbnB1dE5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG91dHB1dE5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZhdWx0TmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgbWVzc2FnZU5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9IFBBUlRfSU5GT19UWVBFX0RFRklOSVRJT047Ci0JcHVibGljIHN0YXRpYyBib29sZWFuIENSRUFURV9ET1dOX1RPX1BBUlQgPSB0cnVlOwotCQkKLS8qCi0gKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgY3JlYXRlcyB0aGUgJ3NwZWNpZmllZCcgKGJ5IGNhbGxpbmcgYSBjZXJ0YWluIG1ldGhvZCkgV1NETEVsZW1lbnQKLSAqIGFuZCBpdCdzICdjaGlsZHJlbicgYWxsIHRoZSB3YXkgdG8gdGhlIFBvcnRUeXBlIGxldmVsLgotICovCi0JcHVibGljIHN0YXRpYyBTZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCWlmIChzZXJ2aWNlTmFtZSA9PSBudWxsIHx8IHNlcnZpY2VOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQlzZXJ2aWNlTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlU2VydmljZU5hbWUoZGVmaW5pdGlvbik7CQkKLQkJCi0JCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLnBvcnRUeXBlTmFtZSA9IHNlcnZpY2VOYW1lOwotCQkKLQkgICAgQWRkU2VydmljZUNvbW1hbmQgYWRkU2VydmljZSA9IG5ldyBBZGRTZXJ2aWNlQ29tbWFuZChkZWZpbml0aW9uLCBzZXJ2aWNlTmFtZSwgZmFsc2UpOwotCSAgICBhZGRTZXJ2aWNlLnJ1bigpOwotCSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgYWRkU2VydmljZS5nZXRXU0RMRWxlbWVudCgpOwotCSAgICBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVQb3J0KHNlcnZpY2UpOwotICAJCQotCSAgICByZXR1cm4gc2VydmljZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBQb3J0IGNyZWF0ZVBvcnQoU2VydmljZSBzZXJ2aWNlKSB7Ci0JCWlmIChwb3J0TmFtZSA9PSBudWxsIHx8IHBvcnROYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQlwb3J0TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUG9ydE5hbWUoc2VydmljZSwgbnVsbCk7Ci0JCQotCSAgICBBZGRQb3J0Q29tbWFuZCBhZGRQb3J0ID0gbmV3IEFkZFBvcnRDb21tYW5kKHNlcnZpY2UsIHBvcnROYW1lKTsKLQkgICAgYWRkUG9ydC5ydW4oKTsKLQkgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGFkZFBvcnQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJQmluZGluZyBiaW5kaW5nID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlQmluZGluZyhwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgcG9ydCk7Ci0KLQkJcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotCQkKLQkgICAgcmV0dXJuIHBvcnQ7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgQmluZGluZyBjcmVhdGVCaW5kaW5nKERlZmluaXRpb24gZGVmaW5pdGlvbiwgUG9ydCBwb3J0KSB7Ci0JCWJpbmRpbmdOYW1lID0gcG9ydC5nZXROYW1lKCk7Ci0JCWlmIChiaW5kaW5nTmFtZSA9PSBudWxsIHx8IGJpbmRpbmdOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQliaW5kaW5nTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlQmluZGluZ05hbWUoZGVmaW5pdGlvbiwgbnVsbCk7Ci0JCQotCQlBZGRCaW5kaW5nQ29tbWFuZCBhZGRCaW5kaW5nID0gbmV3IEFkZEJpbmRpbmdDb21tYW5kKGRlZmluaXRpb24sIGJpbmRpbmdOYW1lKTsKLQkJYWRkQmluZGluZy5ydW4oKTsKLQkJQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGFkZEJpbmRpbmcuZ2V0V1NETEVsZW1lbnQoKTsKLQkJUG9ydFR5cGUgcG9ydFR5cGUgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVQb3J0VHlwZShiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0KLQkJYmluZGluZy5zZXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0JCQotCQlyZXR1cm4gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBQb3J0VHlwZSBjcmVhdGVQb3J0VHlwZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJaWYgKHBvcnRUeXBlTmFtZSA9PSBudWxsIHx8IHBvcnRUeXBlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJcG9ydFR5cGVOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0VHlwZU5hbWUoZGVmaW5pdGlvbiwgIlBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCUFkZFBvcnRUeXBlQ29tbWFuZCBhZGRQb3J0VHlwZUNvbW1hbmQgPSBuZXcgQWRkUG9ydFR5cGVDb21tYW5kKGRlZmluaXRpb24sIHBvcnRUeXBlTmFtZSk7Ci0JCWFkZFBvcnRUeXBlQ29tbWFuZC5ydW4oKTsKLQkJUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIGFkZFBvcnRUeXBlQ29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCi0JCWlmIChDUkVBVEVfRE9XTl9UT19QQVJUKSB7Ci0JCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVPcGVyYXRpb24ocG9ydFR5cGUpOwotCQl9Ci0JCQotCQlyZXR1cm4gcG9ydFR5cGU7Ci0JfQotCi0JCi0vKgotICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGNyZWF0ZXMgdGhlICdzcGVjaWZpZWQnIChieSBjYWxsaW5nIGEgY2VydGFpbiBtZXRob2QpIFdTRExFbGVtZW50Ci0gKiBhbmQgaXQncyAnY2hpbGRyZW4nIGFsbCB0aGUgd2F5IHRvIHRoZSBQYXJ0IGxldmVsLgotICovCQotICAJcHVibGljIHN0YXRpYyBPcGVyYXRpb24gY3JlYXRlT3BlcmF0aW9uKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gIAkJaWYgKG9wZXJhdGlvbk5hbWUgPT0gbnVsbCB8fCBvcGVyYXRpb25OYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gIAkJCW9wZXJhdGlvbk5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU9wZXJhdGlvbk5hbWUocG9ydFR5cGUpOwotICAJCQotCQlBZGRPcGVyYXRpb25Db21tYW5kIGFjdGlvbiA9IG5ldyBBZGRPcGVyYXRpb25Db21tYW5kKHBvcnRUeXBlLCBvcGVyYXRpb25OYW1lKTsKLQkJYWN0aW9uLnJ1bigpOwotCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0JCQotCQlpbnQgc3R5bGUgPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7Ci0gIAkJaWYgKFBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID09IFBBUlRfSU5GT19UWVBFX0RFRklOSVRJT04pIHsKLSAgCQkJc3R5bGUgPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX1NJTVBMRVRZUEU7Ci0gIAkJfQotICAJCWVsc2UgaWYgKFBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID09IFBBUlRfSU5GT19FTEVNRU5UX0RFQ0xBUkFUSU9OKSB7Ci0gIAkJCXN0eWxlID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UOwotLy8gIAkJCXN0eWxlID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UOwotICAJCX0KLSAgCQkKLQkJQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kIGlucHV0Q29tbWFuZCA9IG5ldyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBzdHlsZSk7Ci0JCWlucHV0Q29tbWFuZC5ydW4oKTsKLQkJQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZCBvdXRwdXRDb21tYW5kID0gbmV3IEFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBzdHlsZSk7Ci0JCW91dHB1dENvbW1hbmQucnVuKCk7Ci0JCW9wZXJhdGlvbi5zZXRTdHlsZShPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UpOwotCi0JCXJldHVybiBvcGVyYXRpb247Ci0gIAl9Ci0KLSAgCXB1YmxpYyBzdGF0aWMgSW5wdXQgY3JlYXRlSW5wdXQoUG9ydFR5cGUgcG9ydFR5cGUsIE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBpbnB1dE5hbWUpIHsKLSAgCQlpZiAoaW5wdXROYW1lID09IG51bGwgfHwgaW5wdXROYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gIAkgIAkJaW5wdXROYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVJbnB1dE5hbWUocG9ydFR5cGUsIG9wZXJhdGlvbi5nZXROYW1lKCksICIiKTsgLy8kTk9OLU5MUy0xJAotICAJCQotICAJCUFkZElucHV0Q29tbWFuZCBhY3Rpb24gPSBuZXcgQWRkSW5wdXRDb21tYW5kKG9wZXJhdGlvbiwgaW5wdXROYW1lKTsKLSAgCQlhY3Rpb24ucnVuKCk7Ci0gIAkJSW5wdXQgaW5wdXQgPSAoSW5wdXQpIGFjdGlvbi5nZXRXU0RMRWxlbWVudCgpOyAKLSAgCQlNZXNzYWdlIG1lc3MgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVNZXNzYWdlKGlucHV0KTsKLSAgCQlpbnB1dC5zZXRNZXNzYWdlKG1lc3MpOwotICAJCQkgIAkJCi0gIAkJcmV0dXJuIGlucHV0OwotICAJfQotICAJCQkgIAkKLSAgCXB1YmxpYyBzdGF0aWMgT3V0cHV0IGNyZWF0ZU91dHB1dChQb3J0VHlwZSBwb3J0VHlwZSwgT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAJCWlmIChvdXRwdXROYW1lID09IG51bGwgfHwgb3V0cHV0TmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAJICAJCW91dHB1dE5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU91dHB1dE5hbWUocG9ydFR5cGUsIG9wZXJhdGlvbi5nZXROYW1lKCksICIiKTsgLy8kTk9OLU5MUy0xJAotICAJCQotICAJCUFkZE91dHB1dENvbW1hbmQgYWN0aW9uID0gbmV3IEFkZE91dHB1dENvbW1hbmQob3BlcmF0aW9uLCBvdXRwdXROYW1lKTsKLSAgCQlhY3Rpb24ucnVuKCk7Ci0gIAkJT3V0cHV0IG91dHB1dCA9IChPdXRwdXQpIGFjdGlvbi5nZXRXU0RMRWxlbWVudCgpOwotICAJCU1lc3NhZ2UgbWVzcyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZU1lc3NhZ2Uob3V0cHV0KTsKLSAgCQlvdXRwdXQuc2V0TWVzc2FnZShtZXNzKTsJCi0gIAkJCSAgCQkKLSAgCQlyZXR1cm4gb3V0cHV0OwotICAJfQotICAJCQkgIAkKLSAgCXB1YmxpYyBzdGF0aWMgRmF1bHQgY3JlYXRlRmF1bHQoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAJCWlmIChmYXVsdE5hbWUgPT0gbnVsbCB8fCBmYXVsdE5hbWUudHJpbSgpLmVxdWFscygiIikpICAvLyROT04tTkxTLTEkCi0JICAJCWZhdWx0TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlRmF1bHROYW1lKG9wZXJhdGlvbik7Ci0gIAkJCi0gIAkJQWRkRmF1bHRDb21tYW5kIGFjdGlvbiA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLCBmYXVsdE5hbWUpOwotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQlGYXVsdCBmYXVsdCA9IChGYXVsdCkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0gIAkJTWVzc2FnZSBtZXNzID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlTWVzc2FnZShmYXVsdCk7Ci0gIAkJZmF1bHQuc2V0TWVzc2FnZShtZXNzKTsKLSAgCQkgCQkKLSAgCQlyZXR1cm4gZmF1bHQ7Ci0gIAl9Ci0gIAkJCSAgCQotICAJcHVibGljIHN0YXRpYyBNZXNzYWdlIGNyZWF0ZU1lc3NhZ2UoTWVzc2FnZVJlZmVyZW5jZSBpb2YpIHsKLSAgCQlpZiAobWVzc2FnZU5hbWUgPT0gbnVsbCB8fCBtZXNzYWdlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAJICAJCW1lc3NhZ2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShpb2YuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBpb2YpOwotLy8JICAJCW1lc3NhZ2VOYW1lID0gTmFtZVV0aWwuYnVpbGRNZXNzYWdlTmFtZShpb2YuZ2V0TmFtZSgpKTsKLSAgCQkKLSAgCQlEZWZpbml0aW9uIGRlZiA9IGlvZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gIAkJQWRkTWVzc2FnZUNvbW1hbmQgYWN0aW9uID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKGRlZiwgbWVzc2FnZU5hbWUpOwotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0gIAkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlUGFydChtZXNzYWdlKTsKLSAgCQlFbGVtZW50IHBhcmVudE5vZGUgPSBtZXNzYWdlLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgSURPTU5vZGUpIAotICAgICAgewotCQkgICAgLy8gZm9ybWF0IHNlbGVjdGVkIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIEZvcm1hdFByb2Nlc3NvclhNTCBmb3JtYXRQcm9jZXNzb3JYTUwgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0gICAgICAgIGZvcm1hdFByb2Nlc3NvclhNTC5mb3JtYXROb2RlKChJRE9NTm9kZSlwYXJlbnROb2RlKTsKLSAgICAgIH0KLSAgCQkKLSAgCQltZXNzYWdlTmFtZSA9IG51bGw7Ci0gIAkJcmV0dXJuIG1lc3NhZ2U7Ci0gIAl9Ci0gIAkJCSAgCQotICAJcHVibGljIHN0YXRpYyBQYXJ0IGNyZWF0ZVBhcnQoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gIAkJRGVmaW5pdGlvbiBkZWYgPSBtZXNzYWdlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgCQlTdHJpbmcgbmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUGFydE5hbWUobWVzc2FnZSwgbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgCQlBZGRQYXJ0Q29tbWFuZCBhY3Rpb24gPSBudWxsOwotICAJCQotICAJCWlmIChQQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9PSBQQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OKSB7Ci0gIAkJCWFjdGlvbiA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBuYW1lLCBXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgCQl9Ci0gIAkJZWxzZSBpZiAoUEFSVF9UWVBFX09SX0RFRklOSVRJT04gPT0gUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT04pIHsgIAkJCQotICAJCQkvL2FjdGlvbiA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBuYW1lLCBXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIiwgdHJ1ZSk7Ci0gIAkJCVN0cmluZyBlbGVtZW50TmFtZSA9IGdldE5ld05hbWVIZWxwZXIobmFtZSwgZGVmLCBmYWxzZSk7Ci0gIAkJCUFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQgZWxlbWVudEFjdGlvbiA9IG5ldyBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKGRlZiwgZWxlbWVudE5hbWUpOwotICAJCQllbGVtZW50QWN0aW9uLnJ1bigpOwotICAJCQlhY3Rpb24gPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgbmFtZSwgZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpLCBlbGVtZW50TmFtZSwgZmFsc2UpOwotICAJCX0KLQotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQkKLSAgCQlyZXR1cm4gKFBhcnQpIGFjdGlvbi5nZXRXU0RMRWxlbWVudCgpOwotICAJfQkKLQotICAJLyoKLSAgCSAqIFVzZWQgdG8gZGV0ZXJtaW5lIGEgbmFtZSBmb3IgYW4gRWxlbWVudAotICAJICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldE5ld05hbWVIZWxwZXIoU3RyaW5nIGJhc2UsIERlZmluaXRpb24gZGVmLCBib29sZWFuIGlzVHlwZSkKLSAgICB7IAotICAgICAgU3RyaW5nIG5hbWUgPSBiYXNlOyAgICAKLSAgICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICAgIC8vIFVnbHkuLi4uICBSZWRvIHRoaXMuLi4KLSAgICAgIC8vIEdldCBhIGxpc3Qgb2YgRWxlbWVudHMuLi4KLSAgICAgIExpc3QgZWxlbWVudExpc3QgPSBudWxsOwotICAgICAgaWYgKGRlZi5nZXRFVHlwZXMoKSAhPSBudWxsKSB7Ci0gICAgICAJTGlzdCB4c2RzTGlzdCA9IGRlZi5nZXRFVHlwZXMoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAJaWYgKHhzZHNMaXN0ICE9IG51bGwpIHsKLSAgICAgIAkJSXRlcmF0b3IgeHNkc0l0ZXJhdG9yID0geHNkc0xpc3QuaXRlcmF0b3IoKTsKLSAgICAgIAkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgeHNkc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIAkJWFNEU2NoZW1hIHNjaGVtYSA9IHhzZEVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgICAJCWlmIChzY2hlbWEgIT0gbnVsbCkgewotICAgICAgCQkJZWxlbWVudExpc3QgPSBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpOwotICAgICAgCQl9Ci0gICAgICAJfQotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoZWxlbWVudExpc3QgIT0gbnVsbCkgewotICAgICAgCWludCBpbmRleCA9IDA7Ci0gICAgICAJd2hpbGUgKGluZGV4IDwgZWxlbWVudExpc3Quc2l6ZSgpKSB7Ci0gICAgICAJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbGFyYXRpb24gPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBlbGVtZW50TGlzdC5nZXQoaW5kZXgpOwotICAgICAgCQkKLSAgICAgIAkJaWYgKG5hbWUuZXF1YWxzKGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkpKSB7Ci0gICAgICAJCQljb3VudCsrOwotICAgICAgCQkJbmFtZSA9IG5hbWUgKyBjb3VudDsKLSAgICAgIAkJCWluZGV4ID0gMDsKLSAgICAgIAkJfQotICAgICAgCQllbHNlIHsKLSAgICAgIAkJCWluZGV4Kys7Ci0gICAgICAJCX0KLSAgICAgIAl9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAJLyoKLSAgCSAqIFJldHVybiB0aGUgdHlwZSBvZiBQYXJ0IHRoaXMgV1NETEVsZW1lbnQgc2hvdWxkIGhhdmUgKEVsZW1lbnQgdnMgVHlwZSkuICBUbyBkZXRlcm1pbmUgdGhpcywgd2UgZmlsdGVyIHVwIHRvIHRoZSAncGFyZW50JyBQb3J0VHlwZQotICAJICogYW5kIGdvIGRvd24gdG8gdGhlIGZpcnN0IFBhcnQgd2UgZW5jb3VudGVyIGFuZCBjaGVjayB0aGUgdHlwZSBpdCBoYXMuICBJZiB0aGlzIGZhaWxzLCBkZWZhdWx0IHRvIFR5cGUuCi0gIAkgKi8KLSAgCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFydEluZm8oV1NETEVsZW1lbnQgZWxlbWVudCkgewotICAJICAJU3RyaW5nIHBhcnRJbmZvID0gbnVsbDsKLSAgCSAgCQotICAJICAJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkgewotICAJICAJCXBhcnRJbmZvID0gZ2V0UGFydEluZm8oKFBvcnRUeXBlKSBlbGVtZW50KTsKLSAgCSAgCX0KLSAgCSAgCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLSAgCSAgCQlwYXJ0SW5mbyA9IGdldFBhcnRJbmZvKCgoV1NETEVsZW1lbnRJbXBsKSBlbGVtZW50KS5nZXRDb250YWluZXIoKSk7Ci0gIAkgIAl9Ci0gIAkgIAllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZUltcGwpIHsKLSAgCSAgCQlwYXJ0SW5mbyA9IGdldFBhcnRJbmZvKCgoV1NETEVsZW1lbnRJbXBsKSBlbGVtZW50KS5nZXRDb250YWluZXIoKSk7Ci0gIAkgIAl9Ci0KLSAgCSAgCWlmIChwYXJ0SW5mbyA9PSBudWxsKSB7Ci0gIAkgIAkJcGFydEluZm8gPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OOwotICAJICAJfQotICAJICAJCi0gIAkgIAlyZXR1cm4gcGFydEluZm87ICAJCi0gIAkgIH0KLSAgCSAgCi0gIAkgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRQYXJ0SW5mbyhQb3J0VHlwZSBwb3J0VHlwZSkgewotICAJICAJU3RyaW5nIHBhcnRJbmZvID0gbnVsbDsKLSAgCSAgCQotICAJICAJaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSAhPSBudWxsKSB7Ci0gIAkgIAkJSXRlcmF0b3Igb3BlcmF0aW9uSXQgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgCSAgCQl3aGlsZSAob3BlcmF0aW9uSXQuaGFzTmV4dCgpKSB7Ci0gIAkgIAkJCU9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wZXJhdGlvbkl0Lm5leHQoKTsKLQotICAJICAJCQlpZiAob3AuZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotICAJICAJCQkJcGFydEluZm8gPSBnZXRNZXNzYWdlUmVmUGFydEluZm8oKE1lc3NhZ2VSZWZlcmVuY2VJbXBsKSBvcC5nZXRFSW5wdXQoKSk7Ci0gIAkgIAkJCX0KLSAgCSAgCQotICAJICAJCQlpZiAocGFydEluZm8gPT0gbnVsbCAmJiBvcC5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotICAJICAJCQkJcGFydEluZm8gPSBnZXRNZXNzYWdlUmVmUGFydEluZm8oKE1lc3NhZ2VSZWZlcmVuY2VJbXBsKSBvcC5nZXRFT3V0cHV0KCkpOwotICAJICAJCQl9Ci0gIAkgIAkKLSAgCSAgCQkJaWYgKG9wLmdldEVGYXVsdHMoKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlJdGVyYXRvciBmYXVsdEl0ID0gb3AuZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gIAkgIAkJCQl3aGlsZSAocGFydEluZm8gPT0gbnVsbCAmJiBmYXVsdEl0Lmhhc05leHQoKSkgewotICAJICAJCQkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBmYXVsdEl0Lm5leHQoKTsKLSAgCSAgCQkJCQlwYXJ0SW5mbyA9IGdldE1lc3NhZ2VSZWZQYXJ0SW5mbygoTWVzc2FnZVJlZmVyZW5jZUltcGwpIGZhdWx0KTsKLSAgCSAgCQkJCX0KLSAgCSAgCQkJfQotICAJICAJICAJICAJCi0gIAkgIAkJCWlmIChwYXJ0SW5mbyAhPSBudWxsKQotICAJICAJCQkJYnJlYWs7Ci0gIAkgIAkJfQotICAJICAJfQotCi0gIAkgIAlyZXR1cm4gcGFydEluZm87Ci0gIAkgIH0KLSAgCSAgCi0gIAkgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlUmVmUGFydEluZm8oTWVzc2FnZVJlZmVyZW5jZUltcGwgaW9mKSB7Ci0gIAkgIAlTdHJpbmcgcGFydEluZm8gPSBudWxsOwotICAJICAJCi0gIAkgIAlpZiAoaW9mLmdldEVNZXNzYWdlKCkgIT0gbnVsbCAmJiBpb2YuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKSAhPSBudWxsKSB7Ci0gIAkgIAkJSXRlcmF0b3IgcGFydEl0ID0gaW9mLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgCSAgCQotICAJICAJCXdoaWxlIChwYXJ0SW5mbyA9PSBudWxsICYmIHBhcnRJdC5oYXNOZXh0KCkpIHsKLSAgCSAgCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBhcnRJdC5uZXh0KCk7Ci0gIAkgIAkJCi0gIAkgIAkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotICAJICAJCQkJcGFydEluZm8gPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OOwotICAJICAJCQl9Ci0gIAkgIAkJCWVsc2UgaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotICAJICAJCQkJcGFydEluZm8gPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX0lORk9fRUxFTUVOVF9ERUNMQVJBVElPTjsKLSAgCSAgCQkJfQotICAJICAJCX0KLSAgCSAgCX0KLSAgCSAgCQotICAJICAJcmV0dXJuIHBhcnRJbmZvOwotICAJICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvTmFtZVV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9OYW1lVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjk5MjBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9OYW1lVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgTmFtZVV0aWwKLXsKLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIGZhdWx0IGluIHRoZSBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZUZhdWx0TmFtZShPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gIAlyZXR1cm4gYnVpbGRVbmlxdWVGYXVsdE5hbWUob3BlcmF0aW9uLCAiTmV3RmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZUZhdWx0TmFtZShPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgYmFzZU5hbWUpIHsKLSAgCWlmIChiYXNlTmFtZSA9PSBudWxsKQotICAJCWJhc2VOYW1lID0gIk5ld0ZhdWx0IjsgLy8kTk9OLU5MUy0xJAotICAJCi0gIAlMaXN0IG5hbWVzID0gZ2V0VXNlZEZhdWx0TmFtZXMob3BlcmF0aW9uKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgaW5wdXQgaW4gdGhlIHBvcnRUeXBlLiAgUmV0dXJuZWQgbmFtZSB3aWxsIGJlIG9mIHRoZSBmb3JtOgotICAgKiA8b3BlcmF0aW9uTmFtZT4gKyA8ZW5kaW5nPiBbKyB1bmlxdWUgSW50ZWdlcl0KLSAgICogQHJldHVybiBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlSW5wdXROYW1lKFBvcnRUeXBlIHBvcnRUeXBlLCBTdHJpbmcgb3BlcmF0aW9uTmFtZSwgU3RyaW5nIGVuZGluZykKLSAgewotICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICBTdHJpbmcgY2FuZGlkYXRlID0gb3BlcmF0aW9uTmFtZSArIGVuZGluZzsKLQotICAgIGludCBpID0gMDsKLQotICAgIC8vIGxvb3AgdW50aWwgd2UgZmluZCBhIHVuaXF1ZSBuYW1lICh0aGUgbmFtZSB3aWxsIGNvbnNpc3Qgb2YgdGhlIG9wZXJhdGlvbk5hbWUgKyBlbmRpbmcgKyBhbiBpbnRlZ2VyKQotICAgIHdoaWxlIChuYW1lID09IG51bGwpCi0gICAgewotICAgICAgYm9vbGVhbiB1bmlxdWUgPSB0cnVlOwotCi0gICAgICAvLyBkZXRlcm1pbmUgaWYgdGhpcyBjb21iaW5hdGlvbiBpcyB1bmlxdWUgd2l0aGluIHRoZSBjdXJyZW50IHBvcnR0eXBlCi0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCkgJiYgdW5pcXVlOykKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIGN1cnJlbnQgPSAoT3BlcmF0aW9uKSBpdC5uZXh0KCk7Ci0gICAgICAgIC8vIFRPRE8gOiBwb3J0IGNoZWNrCi0gICAgICAgIC8vIG9sZCAgaWYoY3VycmVudC5pc1NldEVJbnB1dCgpICYmIGN1cnJlbnQuZ2V0RUlucHV0KCkuaXNTZXROYW1lKCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQuZ2V0RUlucHV0KCkgIT0gbnVsbCAmJiBjdXJyZW50LmdldEVJbnB1dCgpLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGN1cnJlbnQuZ2V0RUlucHV0KCkuZ2V0TmFtZSgpLmVxdWFscyhjYW5kaWRhdGUpKQotICAgICAgICAgICAgdW5pcXVlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICh1bmlxdWUpCi0gICAgICAgIG5hbWUgPSBjYW5kaWRhdGU7Ci0gICAgICBlbHNlCi0gICAgICAgIGNhbmRpZGF0ZSA9IG9wZXJhdGlvbk5hbWUgKyBlbmRpbmcgKyBpOwotICAgICAgaSsrOwotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBtZXNzYWdlIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAgIGlmIChiYXNlTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VOYW1lID0gIk5ld01lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgTGlzdCBuYW1lcyA9IGdldFVzZWRNZXNzYWdlTmFtZXMoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBOb3cgc2VhcmNoIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgYW4gdW51c2VkIG5hbWUKLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgbmFtZXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIG9wZXJhdGlvbiBpbiB0aGUgcG9ydCB0eXBlLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVPcGVyYXRpb25OYW1lKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gIAlyZXR1cm4gYnVpbGRVbmlxdWVPcGVyYXRpb25OYW1lKHBvcnRUeXBlLCAiTmV3T3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVPcGVyYXRpb25OYW1lKFBvcnRUeXBlIHBvcnRUeXBlLCBTdHJpbmcgYmFzZU5hbWUpCi0gIHsKLSAgCWlmIChiYXNlTmFtZSA9PSBudWxsKSB7Ci0gIAkJYmFzZU5hbWUgPSAiTmV3T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotICAJfQotCi0gIAlMaXN0IG5hbWVzID0gZ2V0VXNlZE9wZXJhdGlvbk5hbWVzKHBvcnRUeXBlKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgb3V0cHV0IGluIHRoZSBwb3J0VHlwZS4gIFJldHVybmVkIG5hbWUgd2lsbCBiZSBvZiB0aGUgZm9ybToKLSAgICogPG9wZXJhdGlvbk5hbWU+ICsgPGVuZGluZz4gWysgdW5pcXVlIEludGVnZXJdCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU91dHB1dE5hbWUoUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBvcGVyYXRpb25OYW1lLCBTdHJpbmcgZW5kaW5nKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIFN0cmluZyBjYW5kaWRhdGUgPSBvcGVyYXRpb25OYW1lICsgZW5kaW5nOwotCi0gICAgaW50IGkgPSAwOwotCi0gICAgLy8gbG9vcCB1bnRpbCB3ZSBmaW5kIGEgdW5pcXVlIG5hbWUgKHRoZSBuYW1lIHdpbGwgY29uc2lzdCBvZiB0aGUgb3BlcmF0aW9uTmFtZSArIGVuZGluZyArIGFuIGludGVnZXIpCi0gICAgd2hpbGUgKG5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBib29sZWFuIHVuaXF1ZSA9IHRydWU7Ci0KLSAgICAgIC8vIGRldGVybWluZSBpZiB0aGlzIGNvbWJpbmF0aW9uIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGN1cnJlbnQgcG9ydHR5cGUJCQkKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKSAmJiB1bmlxdWU7KQotICAgICAgewotICAgICAgICBPcGVyYXRpb24gY3VycmVudCA9IChPcGVyYXRpb24pIGl0Lm5leHQoKTsKLSAgICAgICAgLy8gVE9ETzogcG9ydCBjaGVjawotICAgICAgICAvLyBvbGQJCQkJaWYoY3VycmVudC5pc1NldEVPdXRwdXQoKSAmJiBjdXJyZW50LmdldEVPdXRwdXQoKS5pc1NldE5hbWUoKSkgewotICAgICAgICBpZiAoY3VycmVudC5nZXRFT3V0cHV0KCkgIT0gbnVsbCAmJiBjdXJyZW50LmdldEVPdXRwdXQoKS5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChjdXJyZW50LmdldEVPdXRwdXQoKS5nZXROYW1lKCkuZXF1YWxzKGNhbmRpZGF0ZSkpCi0gICAgICAgICAgICB1bmlxdWUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHVuaXF1ZSkKLSAgICAgICAgbmFtZSA9IGNhbmRpZGF0ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgY2FuZGlkYXRlID0gb3BlcmF0aW9uTmFtZSArIGVuZGluZyArIGk7Ci0gICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIHBhcnQgaW4gdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVBhcnROYW1lKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAJTGlzdCBuYW1lcyA9IGdldFVzZWRQYXJ0TmFtZXMobWVzc2FnZSk7Ci0KLSAgICAvLyBOb3cgc2VhcmNoIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgYW4gdW51c2VkIG5hbWUKLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcigiTmV3UGFydCIsIG5hbWVzKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVBhcnROYW1lKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIGJhc2VOYW1lKQotICB7Ci0gIAlpZiAoYmFzZU5hbWUgPT0gbnVsbCkKLSAgCXsKLSAgCQliYXNlTmFtZSA9ICJOZXdQYXJ0IjsgLy8kTk9OLU5MUy0xJAotICAJfQotICAJCi0gIAlMaXN0IG5hbWVzID0gZ2V0VXNlZFBhcnROYW1lcyhtZXNzYWdlKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgcG9ydCB0eXBlIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVQb3J0VHlwZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgYmFzZU5hbWUpCi0gIHsKLSAgICBpZiAoYmFzZU5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBiYXNlTmFtZSA9ICJOZXdQb3J0VHlwZSI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBMaXN0IG5hbWVzID0gZ2V0VXNlZFBvcnRUeXBlTmFtZXMoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBOb3cgc2VhcmNoIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgYW4gdW51c2VkIG5hbWUKLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgbmFtZXMpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VW5pcXVlTmFtZUhlbHBlcihTdHJpbmcgYmFzZU5hbWUsIExpc3QgbmFtZXMpCi0gIHsKLSAgICBpbnQgaSA9IDA7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IGJhc2VOYW1lOwotICAgIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGlmICghbmFtZXMuY29udGFpbnMobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaSsrOwotICAgICAgbmFtZSA9IGJhc2VOYW1lICsgaTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBzZXJ2aWNlIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVTZXJ2aWNlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgCUxpc3QgbmFtZXMgPSBnZXRVc2VkU2VydmljZU5hbWVzKGRlZmluaXRpb24pOwotCi0gICAgLy8gTm93IHNlYXJjaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lCi0gICAgcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoIk5ld1NlcnZpY2UiLCBuYW1lcyk7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBiaW5kaW5nIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVCaW5kaW5nTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAgIGlmIChiYXNlTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VOYW1lID0gIk5ld0JpbmRpbmciOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgTGlzdCBuYW1lcyA9IGdldFVzZWRCaW5kaW5nTmFtZXMoZGVmaW5pdGlvbik7Ci0KLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgbmFtZXMpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVQcmVmaXgoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgYmFzZVByZWZpeCkKLSAgewotICAgIFN0cmluZyBwcmVmaXggPSBiYXNlUHJlZml4OwotICAgIGZvciAoaW50IGkgPSAxOyBkZWZpbml0aW9uLmdldE5hbWVzcGFjZShwcmVmaXgpICE9IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBwcmVmaXggPSBiYXNlUHJlZml4ICsgaTsKLSAgICB9Ci0gICAgcmV0dXJuIHByZWZpeDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlUG9ydE5hbWUoU2VydmljZSBzZXJ2aWNlLCBTdHJpbmcgYmFzZU5hbWUpCi0gIHsKLSAgICBpZiAoYmFzZU5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBiYXNlTmFtZSA9ICJOZXdQb3J0IjsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgCi0gICAgTGlzdCBuYW1lcyA9IGdldFVzZWRQb3J0TmFtZXMoc2VydmljZSk7Ci0gICAgCi0JcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIG5hbWVzKTsKLSAgfQotCQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTWVzc2FnZVJlZmVyZW5jZSBtZXNzUmVmKQotICB7ICAgCi0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIGlmIChtZXNzUmVmIGluc3RhbmNlb2YgSW5wdXQpCi0gICAgewotICAgICAgbmFtZSA9IGNyZWF0ZU9wZXJhdGlvbk5hbWUobWVzc1JlZiwgIlJlcXVlc3QiKTsgICAgIC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc1JlZiBpbnN0YW5jZW9mIE91dHB1dCkKLSAgICB7Ci0gICAgICBuYW1lID0gY3JlYXRlT3BlcmF0aW9uTmFtZShtZXNzUmVmLCAiUmVzcG9uc2UiKTsgIC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc1JlZiBpbnN0YW5jZW9mIEZhdWx0KQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgU3RyaW5nIGZhdWx0TmFtZSA9ICgoRmF1bHQpIG1lc3NSZWYpLmdldE5hbWUoKTsKLSAgICAgIGlmIChmYXVsdE5hbWUgPT0gbnVsbCB8fCBmYXVsdE5hbWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgZmF1bHROYW1lID0gIkZhdWx0IjsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgbmFtZSA9IGNyZWF0ZU9wZXJhdGlvbk5hbWUobWVzc1JlZiwgZmF1bHROYW1lKTsgCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgcmV0dXJuIE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoZGVmaW5pdGlvbiwgbmFtZSk7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0VXNlZEZhdWx0TmFtZXMoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgaS5uZXh0KCk7Ci0gICAgICBuYW1lcy5hZGQoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRPcGVyYXRpb25OYW1lcyhQb3J0VHlwZSBwb3J0VHlwZSkgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBpLm5leHQoKTsKLSAgICAgIG5hbWVzLmFkZChvcC5nZXROYW1lKCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkUGFydE5hbWVzKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaS5uZXh0KCk7Ci0gICAgICBuYW1lcy5hZGQocGFydC5nZXROYW1lKCkpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0VXNlZFBvcnRUeXBlTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgaS5uZXh0KCk7Ci0gICAgICAvLyBUT0RPOiBwb3J0IGNoZWNrCi0gICAgICAvLwkJCWlmIChwb3J0VHlwZS5pc1NldFFOYW1lKCkpCi0gICAgICBpZiAocG9ydFR5cGUuZ2V0UU5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lcy5hZGQocG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgICAKLSAgfQotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0VXNlZFNlcnZpY2VOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICAvLyBGaXJzdCBidWlsZCBhIGxpc3Qgb2YgbmFtZXMgYWxyZWFkeSB1c2VkCi0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBpLm5leHQoKTsKLSAgICAgIC8vIFRPRE86IHBvcnQgY2hlY2sKLSAgICAgIC8vIAkJaWYoc2VydmljZS5pc1NldFFOYW1lKCkpCi0gICAgICBpZiAoc2VydmljZS5nZXRRTmFtZSgpICE9IG51bGwpCi0gICAgICAgIG5hbWVzLmFkZChzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkTWVzc2FnZU5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBNZXNzYWdlIG1zZyA9IChNZXNzYWdlKSBpLm5leHQoKTsKLSAgICAgIC8vIFRPRE86IHBvcnQgY2hlY2sKLSAgICAgIGlmIChtc2cuZ2V0UU5hbWUoKSAhPSBudWxsKQotICAgICAgICAvLwkJCWlmKG1zZy5pc1NldFFOYW1lKCkpCi0gICAgICAgIG5hbWVzLmFkZChtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkQmluZGluZ05hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgaS5uZXh0KCk7Ci0gICAgICAvLyBUT0RPOiBwb3J0IGNoZWNrCi0gICAgICAvLwkJCWlmIChiaW5kaW5nLmlzU2V0UU5hbWUoKSkKLSAgICAgIGlmIChiaW5kaW5nLmdldFFOYW1lKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbmFtZXMuYWRkKGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkUG9ydE5hbWVzKFNlcnZpY2Ugc2VydmljZSkgewotICAgIC8vIEZpcnN0IGJ1aWxkIGEgbGlzdCBvZiBuYW1lcyBhbHJlYWR5IHVzZWQKLSAgICBBcnJheUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGkubmV4dCgpOwotCi0gICAgICBpZiAocG9ydC5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbmFtZXMuYWRkKHBvcnQuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3JlYXRlT3BlcmF0aW9uTmFtZShPYmplY3Qgb2JqZWN0LCBTdHJpbmcgc3VmZml4KQotICB7ICAgICAgICAgICAgICAgCi0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgRU9iamVjdCBwYXJlbnQgPSAoKEVPYmplY3Qpb2JqZWN0KS5lQ29udGFpbmVyKCk7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoKE9wZXJhdGlvbilwYXJlbnQpLmdldE5hbWUoKTsKLSAgICAgIH0KLSAgICB9IAotICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgKz0gc3VmZml4OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VOYW1lKE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZikgewkgICAgCi0JU3RyaW5nIG1lc3NhZ2VOYW1lID0gIk5ld01lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0JTGlzdCBtZXNzYWdlTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG1lc3NhZ2VSZWYuZ2V0Q29udGFpbmVyKCk7Ci0JSXRlcmF0b3IgbWVzc2FnZUl0ID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOwotCXdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKSB7Ci0JCW1lc3NhZ2VOYW1lcy5hZGQoKChNZXNzYWdlKSBtZXNzYWdlSXQubmV4dCgpKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLQl9Ci0JCi0vLwlTdHJpbmcgcmVxdWVzdFJlc3BvbnNlU3RyaW5nID0gZ2V0UmVxdWVzdE9yUmVzcG9uc2UobWVzc2FnZVJlZikgKyAiTXNnIjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyByZXF1ZXN0UmVzcG9uc2VTdHJpbmcgPSBnZXRSZXF1ZXN0T3JSZXNwb25zZShtZXNzYWdlUmVmKTsgLy8kTk9OLU5MUy0xJAotCW1lc3NhZ2VOYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihvcGVyYXRpb24uZ2V0TmFtZSgpICsgcmVxdWVzdFJlc3BvbnNlU3RyaW5nLCBtZXNzYWdlTmFtZXMpOwotCQotCXJldHVybiBtZXNzYWdlTmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFydE5hbWUoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JU3RyaW5nIHBhcnROYW1lID0gIk5ld1BhcnQiOyAvLyROT04tTkxTLTEkCi0JTWVzc2FnZSBtZXNzYWdlID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpOwotCQotCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBtZXNzYWdlUmVmLmdldENvbnRhaW5lcigpOwotCVN0cmluZyBvcGVyYXRpb25OYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLQlTdHJpbmcgYXBwZW5kU3RyaW5nID0gIiI7ICAgIAkgICAvLyROT04tTkxTLTEkCi0JaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBJbnB1dCkgewotLy8JCWFwcGVuZFN0cmluZyA9ICJQYXJhbWV0ZXJzIjsgLy8kTk9OLU5MUy0xJAotCQlhcHBlbmRTdHJpbmcgPSAiUmVxdWVzdCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIE91dHB1dCkgewotLy8JCWFwcGVuZFN0cmluZyA9ICJSZXN1bHQiOyAvLyROT04tTkxTLTEkCi0JCWFwcGVuZFN0cmluZyA9ICJSZXNwb25zZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEZhdWx0KSB7Ci0vLwkJYXBwZW5kU3RyaW5nID0gIkZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCQlhcHBlbmRTdHJpbmcgPSAiX0ZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQlwYXJ0TmFtZSA9IG9wZXJhdGlvbk5hbWUgKyBhcHBlbmRTdHJpbmc7Ci0JCi0JTGlzdCB1c2VkUGFydE5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCWlmIChtZXNzYWdlICE9IG51bGwpIHsKLQkJcGFydE5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCUl0ZXJhdG9yIHBhcnRJdCA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKHBhcnRJdC5oYXNOZXh0KCkpIHsKLQkJCXVzZWRQYXJ0TmFtZXMuYWRkKCgoUGFydCkgcGFydEl0Lm5leHQoKSkuZ2V0TmFtZSgpKTsKLQkJfQotCX0KLQkKLQlwYXJ0TmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIocGFydE5hbWUsIHVzZWRQYXJ0TmFtZXMpOwotCQotCXJldHVybiBwYXJ0TmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0T3BlcmF0aW9uTmFtZShQb3J0VHlwZSBwb3J0VHlwZSkgewotCVN0cmluZyBvcGVyYXRpb25OYW1lID0gIk5ld09wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlJdGVyYXRvciBvcGVyYXRpb25JdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQlMaXN0IHVzZWROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQl3aGlsZSAob3BlcmF0aW9uSXQuaGFzTmV4dCgpKSB7Ci0JCXVzZWROYW1lcy5hZGQoKChPcGVyYXRpb24pIG9wZXJhdGlvbkl0Lm5leHQoKSkuZ2V0TmFtZSgpKTsKLQl9Ci0JCi0Jb3BlcmF0aW9uTmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoIk5ld09wZXJhdGlvbiIsIHVzZWROYW1lcyk7IC8vJE5PTi1OTFMtMSQKLQkKLQlyZXR1cm4gb3BlcmF0aW9uTmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVxdWVzdE9yUmVzcG9uc2UoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBJbnB1dCkKLQl7Ci0JCXJldHVybiAiUmVxdWVzdCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIE91dHB1dCkKLQl7Ci0JCXJldHVybiAiUmVzcG9uc2UiOyAvLyROT04tTkxTLTEkCi0JfQotCWVsc2UgaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBGYXVsdCkKLQl7Ci0JCXJldHVybiAiX0ZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmF1bHROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLQlTdHJpbmcgZmF1bHROYW1lID0gImZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCUxpc3QgbmFtZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JSXRlcmF0b3IgZmF1bHRJdCA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLQl3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpIHsKLQkJbmFtZUxpc3QuYWRkKCgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXROYW1lKCkpOwotCX0KLQkKLQlmYXVsdE5hbWUgPSBnZXRVbmlxdWVOYW1lSGVscGVyKGZhdWx0TmFtZSwgbmFtZUxpc3QpOwotCQotCXJldHVybiBmYXVsdE5hbWU7Ci19Ci0KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFhTREVsZW1lbnROYW1lKFN0cmluZyBiYXNlTmFtZSwgT2JqZWN0IHBhcmVudCkgewotCVN0cmluZyBlbGVtZW50TmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCi0JaWYgKHBhcmVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYSkgewotCQllbGVtZW50TmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIGdldFVzZWRFbGVtZW50TmFtZXMoKFhTRFNjaGVtYSkgcGFyZW50KSk7Ci0JfQotCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJTGlzdCBleGlzdGluZ05hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFyZW50OwotCQlJdGVyYXRvciBtb2RlbEdyb3VwSXQgPSBtb2RlbEdyb3VwLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKG1vZGVsR3JvdXBJdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBpdGVtID0gbW9kZWxHcm91cEl0Lm5leHQoKTsKLQkJCWlmIChpdGVtIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBleGlzdGluZ1BhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBpdGVtOwotCQkJCWlmIChleGlzdGluZ1BhcnRpY2xlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJCQlleGlzdGluZ05hbWVzLmFkZCgoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgZXhpc3RpbmdQYXJ0aWNsZS5nZXRDb250ZW50KCkpLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQllbGVtZW50TmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIGV4aXN0aW5nTmFtZXMpOwkJCQotCX0KLQkKLQlyZXR1cm4gZWxlbWVudE5hbWU7Ci19Ci0KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFhTRENvbXBsZXhUeXBlTmFtZShTdHJpbmcgYmFzZU5hbWUsIFhTRFNjaGVtYSBzY2hlbWEpIHsKLQlTdHJpbmcgdHlwZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCUxpc3QgZXhpc3RpbmdOYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQlJdGVyYXRvciBpdCA9IHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOwotCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCWlmIChpdGVtIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQlleGlzdGluZ05hbWVzLmFkZCgoKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgaXRlbSkuZ2V0TmFtZSgpKTsKLQkJfQotCX0KLQkKLQl0eXBlTmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIGV4aXN0aW5nTmFtZXMpOwotCXJldHVybiB0eXBlTmFtZTsKLX0KLQotcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRVc2VkRWxlbWVudE5hbWVzKFhTRFNjaGVtYSB4c2RTY2hlbWEpIHsKLQlMaXN0IHVzZWROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlJdGVyYXRvciBzY2hlbWFJdCA9IHhzZFNjaGVtYS5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7Ci0Jd2hpbGUgKHNjaGVtYUl0Lmhhc05leHQoKSkgewotCQlPYmplY3QgaXRlbSA9IHNjaGVtYUl0Lm5leHQoKTsKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCXVzZWROYW1lcy5hZGQoKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGl0ZW0pLmdldE5hbWUoKSk7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIHVzZWROYW1lczsKLX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvTm9kZUFzc29jaWF0aW9uTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWMwNTEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwueHNkLlhTRE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWRhcHRlcnMuQ2F0ZWdvcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyCi17ICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIHdzZGxQcm92aWRlcjsKLSAgcHJvdGVjdGVkIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlciB4c2RQcm92aWRlcjsKLQotICBwdWJsaWMgTm9kZUFzc29jaWF0aW9uTWFuYWdlcigpCi0gIHsgICAgICAgICAgICAgCi0JICB3c2RsUHJvdmlkZXIgPSBuZXcgV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyKCk7Ci0JICB4c2RQcm92aWRlciA9IG5ldyBYU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlcigpOwotICB9ICAgICAgICAKLQotICBwcm90ZWN0ZWQgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIGdldEFwcGljYWJsZVByb3ZpZGVyKE9iamVjdCBvYmplY3QpCi0gIHsKLQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB8fCAKLQkgICAgICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCB8fAotCSAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5QWRhcHRlcikgey8vIHx8Ci0vLwkgICAgICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBDYXRlZ29yeSkgewotCQkgIHJldHVybiB4c2RQcm92aWRlcjsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHdzZGxQcm92aWRlcjsKLSAgfQotICAgICAgICAKLQotICBwdWJsaWMgT2JqZWN0IGdldE1vZGVsT2JqZWN0Rm9yTm9kZShPYmplY3Qgcm9vdE9iamVjdCwgRWxlbWVudCB0YXJnZXROb2RlKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAodGFyZ2V0Tm9kZSAhPSBudWxsICYmIHRhcmdldE5vZGUuZ2V0UGFyZW50Tm9kZSgpID09IG51bGwpCi0gICAgewotICAgICAgLy8gVGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSBET00sIGNvbW1vbiBzY2VuYXJpbyBkdXJpbmcgdW5kby4KLSAgICAgIC8vIFRoZSBwYXJlbnQgZWxlbWVudCdzIHJlY29uY2lsaWF0aW9uIHdpbGwgdGFrZSBjYXJlIG9mIHJlY29uY2lsaW5nIGl0LgotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIGludCBjdXJyZW50SW5kZXggPSAwOwotCi0gICAgRWxlbWVudFtdIGVsZW1lbnRDaGFpbiA9IGdldFBhcmVudEVsZW1lbnRDaGFpbigoRWxlbWVudCl0YXJnZXROb2RlKTsKLQotICAgIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlciBwID0gZ2V0QXBwaWNhYmxlUHJvdmlkZXIocm9vdE9iamVjdCk7Ci0gICAgaWYgKHAgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBOb2RlIHJvb3RPYmplY3ROb2RlID0gcC5nZXROb2RlKHJvb3RPYmplY3QpOwotCi0gICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgZWxlbWVudENoYWluLmxlbmd0aCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBlID0gZWxlbWVudENoYWluW2N1cnJlbnRJbmRleF07Ci0gICAgICAgIGlmIChlID09IHJvb3RPYmplY3ROb2RlKQotICAgICAgICB7ICAgICAgICAgICAgICAgIAotICAgICAgICAgIGN1cnJlbnRJbmRleCsrOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnRJbmRleCsrOwotICAgICAgfQotICAgIH0KLSAgICAgICAgICAgICAKLSAgICBPYmplY3QgY3VycmVudE9iamVjdCA9IHJvb3RPYmplY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaW50IGVuZFtdID0gbmV3IGludFsxXTsKLQotICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBlbGVtZW50Q2hhaW4ubGVuZ3RoKQotICAgIHsgICAgICAgICAgICAgICAKLSAgICAgIHAgPSBnZXRBcHBpY2FibGVQcm92aWRlcihjdXJyZW50T2JqZWN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGlmIChwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZFswXSA9IGVsZW1lbnRDaGFpbi5sZW5ndGg7Ci0gICAgICAgIGN1cnJlbnRPYmplY3QgPSBwLmdldE1vZGVsT2JqZWN0KGN1cnJlbnRPYmplY3QsIGVsZW1lbnRDaGFpbiwgY3VycmVudEluZGV4LCBlbmQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGN1cnJlbnRPYmplY3QgPT0gbnVsbCkKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAvLyBmYWlsdXJlCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgY3VycmVudEluZGV4ID0gTWF0aC5tYXgoZW5kWzBdLCBjdXJyZW50SW5kZXggKyAxKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAgICAgICAgICAKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9IAotICAgIH0gICAgIAotCi0gICAgcmV0dXJuIChjdXJyZW50SW5kZXggPT0gZWxlbWVudENoYWluLmxlbmd0aCkgPyBjdXJyZW50T2JqZWN0IDogbnVsbDsKLSAgfSAgCi0gICAgICAgICAgIAotCi0gIHB1YmxpYyBOb2RlIGdldE5vZGUoT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7ICAgICAgICAgIAotICAgIE5vZGUgcmVzdWx0ID0gbnVsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE5vZGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gKE5vZGUpbW9kZWxPYmplY3Q7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgcCA9IGdldEFwcGljYWJsZVByb3ZpZGVyKG1vZGVsT2JqZWN0KTsgICAgICAgICAgICAgICAKLSAgICAgIGlmIChwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHAuZ2V0Tm9kZShtb2RlbE9iamVjdCk7Ci0gICAgICB9Ci0gICAgfSAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAKLQotICBwcm90ZWN0ZWQgRWxlbWVudFtdIGdldFBhcmVudEVsZW1lbnRDaGFpbihFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgd2hpbGUgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZCgwLCBlbGVtZW50KTsKLSAgICAgIE5vZGUgbm9kZSA9IGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgZWxlbWVudCA9IChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KW5vZGUgOiBudWxsOyAgICAKLSAgICB9ICAgICAgICAgICAgICAgIAotCi0gICAgaW50IGxpc3RTaXplID0gbGlzdC5zaXplKCk7Ci0gICAgRWxlbWVudFtdIHJlc3VsdCA9IG5ldyBFbGVtZW50W2xpc3RTaXplXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RTaXplOyBpKyspCi0gICAgewotICAgICAgcmVzdWx0W2ldID0gKEVsZW1lbnQpbGlzdC5nZXQoaSk7Ci0gICAgfSAgICAgICAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL09wZW5PblNlbGVjdGlvbkhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL09wZW5PblNlbGVjdGlvbkhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMThkZDdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9PcGVuT25TZWxlY3Rpb25IZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMU3dpdGNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5BRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNESHlwZXJsaW5rVGFyZ2V0TG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhY2thZ2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotcHVibGljIGNsYXNzIE9wZW5PblNlbGVjdGlvbkhlbHBlciBleHRlbmRzIFdTRExTd2l0Y2gKLXsKLSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBBdHRyIGF0dHIgPSBudWxsOwotICBFbGVtZW50IGVsZW1lbnQgPSBudWxsOwotCi0gIHB1YmxpYyBPcGVuT25TZWxlY3Rpb25IZWxwZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG9wZW5FZGl0b3IoRU9iamVjdCBlT2JqZWN0KQotICB7Ci0gICAgU3RyaW5nW10gYXJyYXkgPSBjb21wdXRlU3BlY2lmaWNhdGlvbihlT2JqZWN0KTsKLSAgICBpZiAoYXJyYXkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcGVuRWRpdG9yKGFycmF5WzBdLCBhcnJheVsxXSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgb3BlbkVkaXRvcihOb2RlIG5vZGUpCi0gIHsKLSAgICBTdHJpbmdbXSBhcnJheSA9IGNvbXB1dGVTcGVjaWZpY2F0aW9uKG5vZGUpOwotICAgIGlmIChhcnJheSAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wZW5FZGl0b3IoYXJyYXlbMF0sIGFycmF5WzFdKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBvcGVuRWRpdG9yKFN0cmluZyByZXNvdXJjZSwgU3RyaW5nIHNwZWMpCi0gIHsKLSAgICBTdHJpbmcgcGF0dGVybiA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0gICAgSVdvcmtiZW5jaFBhZ2Ugd29ya2JlbmNoUGFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IHdvcmtiZW5jaFBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgU3RyaW5nIGN1cnJlbnRFZGl0b3JJZCA9IGVkaXRvclBhcnQuZ2V0RWRpdG9yU2l0ZSgpLmdldElkKCk7Ci0gICAgCi0gICAgaWYgKHJlc291cmNlICE9IG51bGwgJiYgcmVzb3VyY2Uuc3RhcnRzV2l0aChwYXR0ZXJuKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUGF0aCBwYXRoID0gbmV3IFBhdGgocmVzb3VyY2Uuc3Vic3RyaW5nKHBhdHRlcm4ubGVuZ3RoKCkpKTsKLSAgICAgICAgSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKLQotICAgICAgICAKLSAgICAgICAgaWYgKGVkaXRvclBhcnQuZ2V0RWRpdG9ySW5wdXQoKSBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYKLSAgICAgICAgICAgKChJRmlsZUVkaXRvcklucHV0KWVkaXRvclBhcnQuZ2V0RWRpdG9ySW5wdXQoKSkuZ2V0RmlsZSgpLmVxdWFscyhmaWxlKSkKLSAgICAgICAgeyAgCi0gICAgICAgIAl3b3JrYmVuY2hQYWdlLmdldE5hdmlnYXRpb25IaXN0b3J5KCkubWFya0xvY2F0aW9uKGVkaXRvclBhcnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE86IFVzZSBjb250ZW50IHR5cGUgYXMgYmVsb3cKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZS5lbmRzV2l0aCgieHNkIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZWRpdG9yUGFydCA9IHdvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpLCBXU0RMRWRpdG9yUGx1Z2luLlhTRF9FRElUT1JfSUQpOyAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgYXJlIGFscmVhZHkgaW4gdGhlIHdzZGxlZGl0b3IKLQkJCSAgICAgICAgZWRpdG9yUGFydCA9ICB3b3JrYmVuY2hQYWdlLm9wZW5FZGl0b3IobmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSwgZWRpdG9yUGFydC5nZXRFZGl0b3JTaXRlKCkuZ2V0SWQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gaW5pdEV4KQotIAkJCQkJewotIAkJCQkJfQotICAgICAgICB9Ci0KLSAgICAgICAgQ2xhc3MgdGhlQ2xhc3MgPSBlZGl0b3JQYXJ0LmdldENsYXNzKCk7Ci0gICAgICAgIENsYXNzW10gbWV0aG9kQXJncyA9IHsgU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgIE1ldGhvZCBtZXRob2QgPSB0aGVDbGFzcy5nZXRNZXRob2QoIm9wZW5PblNlbGVjdGlvbiIsIG1ldGhvZEFyZ3MpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIE9iamVjdCBhcmdzW10gPSB7IHNwZWMgfTsKLSAgICAgICAgbWV0aG9kLmludm9rZShlZGl0b3JQYXJ0LCBhcmdzKTsKLSAgICAgICAgd29ya2JlbmNoUGFnZS5nZXROYXZpZ2F0aW9uSGlzdG9yeSgpLm1hcmtMb2NhdGlvbihlZGl0b3JQYXJ0KTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAocmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZS5zdGFydHNXaXRoKCJodHRwIikpCi0gICAgewotICAgICAgSUVkaXRvclBhcnQgbmV3RWRpdG9yUGFydCA9IG51bGw7Ci0gICAgICBib29sZWFuIGRvT3BlbldzZGxFZGl0b3IgPSB0cnVlOwotICAgICAgaWYgKHJlc291cmNlLmVuZHNXaXRoKCJ4c2QiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBkb09wZW5Xc2RsRWRpdG9yID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUVkaXRvclJlZmVyZW5jZVtdIHJlZnMgPSB3b3JrYmVuY2hQYWdlLmdldEVkaXRvclJlZmVyZW5jZXMoKTsKLSAgICAgICAgaW50IGxlbmd0aCA9IHJlZnMubGVuZ3RoOwotICAgICAgICAvLyBOZWVkIHRvIGZpbmQgaWYgYW4gZWRpdG9yIG9uIHRoYXQgc2NoZW1hIGhhcyBhbHJlYWR5IGJlZW4gb3BlbmVkCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSByZWZzW2ldLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQpCi0gICAgICAgICAgewotICAgICAgICAgICAgQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQgcmVhZE9ubHlFZGl0b3JJbnB1dCA9IChBRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQ7Ci0gICAgICAgICAgICBpZiAocmVhZE9ubHlFZGl0b3JJbnB1dC5nZXRVcmxTdHJpbmcoKS5lcXVhbHMocmVzb3VyY2UpICYmIAotICAgICAgICAgICAgICAgICghZG9PcGVuV3NkbEVkaXRvciAmJiByZWFkT25seUVkaXRvcklucHV0LmdldEVkaXRvcklEKCkuZXF1YWxzKFdTRExFZGl0b3JQbHVnaW4uWFNEX0VESVRPUl9JRCkKLSAgICAgICAgICAgICAgICB8fCAoZG9PcGVuV3NkbEVkaXRvciAmJiByZWFkT25seUVkaXRvcklucHV0LmdldEVkaXRvcklEKCkuZXF1YWxzKFdTRExFZGl0b3JQbHVnaW4uV1NETF9FRElUT1JfSUQpKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5ld0VkaXRvclBhcnQgPSByZWZzW2ldLmdldEVkaXRvcih0cnVlKTsKLSAgICAgICAgICAgICAgd29ya2JlbmNoUGFnZS5hY3RpdmF0ZShyZWZzW2ldLmdldFBhcnQodHJ1ZSkpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5ld0VkaXRvclBhcnQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0IHJlYWRPbmx5U3RvcmFnZUVkaXRvcklucHV0ID0gbmV3IEFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0KHJlc291cmNlKTsKLSAgICAgICAgICBJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBudWxsOwotICAgICAgICAgIElucHV0U3RyZWFtIGlTdHJlYW0gPSBudWxsOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlTdHJlYW0gPSByZWFkT25seVN0b3JhZ2VFZGl0b3JJbnB1dC5nZXRTdG9yYWdlKCkuZ2V0Q29udGVudHMoKTsKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZmluZENvbnRlbnRUeXBlRm9yKGlTdHJlYW0sIHJlc291cmNlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY29yZUV4Y2VwdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgZmluYWxseQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gY29udGVudCB0eXBlIG1vcmUgcmVsaWFibGUgY2hlY2sKLSAgICAgICAgICBpZiAoY29udGVudFR5cGUgIT0gbnVsbCAmJiBjb250ZW50VHlwZS5lcXVhbHMoWFNERWRpdG9yUGx1Z2luLlhTRF9DT05URU5UX1RZUEVfSUQpIHx8IHJlc291cmNlLmVuZHNXaXRoKCJ4c2QiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRPbmx5U3RvcmFnZUVkaXRvcklucHV0LnNldEVkaXRvcklEKFdTRExFZGl0b3JQbHVnaW4uWFNEX0VESVRPUl9JRCk7Ci0gICAgICAgICAgICB3b3JrYmVuY2hQYWdlLm9wZW5FZGl0b3IocmVhZE9ubHlTdG9yYWdlRWRpdG9ySW5wdXQsIFdTRExFZGl0b3JQbHVnaW4uWFNEX0VESVRPUl9JRCwgdHJ1ZSwgMCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRPbmx5U3RvcmFnZUVkaXRvcklucHV0LnNldEVkaXRvcklEKGN1cnJlbnRFZGl0b3JJZCk7Ci0gICAgICAgICAgICB3b3JrYmVuY2hQYWdlLm9wZW5FZGl0b3IocmVhZE9ubHlTdG9yYWdlRWRpdG9ySW5wdXQsIGN1cnJlbnRFZGl0b3JJZCwgdHJ1ZSwgMCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBwaWUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBjb21wdXRlU3BlY2lmaWNhdGlvbihFT2JqZWN0IGVPYmplY3QpCi0gIHsKLSAgICBTdHJpbmdbXSByZXN1bHQgPSBudWxsOwotICAgIE9iamVjdCByZWZlcmVuY2VkT2JqZWN0ID0gZG9Td2l0Y2goZU9iamVjdCk7Ci0gICAgaWYgKHJlZmVyZW5jZWRPYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KQotICAgIHsKLSAgICAgIEVPYmplY3QgcmVmZXJlbmNlZEVPYmplY3QgPSAoRU9iamVjdClyZWZlcmVuY2VkT2JqZWN0OwotICAgICAgaWYgKHJlZmVyZW5jZWRFT2JqZWN0ICE9IGVPYmplY3QgfHwgCi0gICAgICAgICByZWZlcmVuY2VkRU9iamVjdC5lUmVzb3VyY2UoKSAhPSBkZWZpbml0aW9uLmVSZXNvdXJjZSgpKQotICAgICAgeyAgICAgICAgCi0gICAgICAKLSAgICAgIFJlc291cmNlIHJlc291cmNlID0gcmVmZXJlbmNlZEVPYmplY3QuZVJlc291cmNlKCk7Ci0gICAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ1syXTsKLSAgICAgICAgcmVzdWx0WzBdID0gcmVzb3VyY2UuZ2V0VVJJKCkudG9TdHJpbmcoKTsKLSAgICAgICAgcmVzdWx0WzFdID0gcmVzb3VyY2UuZ2V0VVJJRnJhZ21lbnQocmVmZXJlbmNlZEVPYmplY3QpOwotICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGNvbXB1dGVTcGVjaWZpY2F0aW9uKE5vZGUgbm9kZSkKLSAgewotICAgIFN0cmluZ1tdIHJlc3VsdCA9IG51bGw7Ci0gICAgc3dpdGNoIChub2RlLmdldE5vZGVUeXBlKCkpCi0gICAgewotICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERSA6Ci0gICAgICAgIHsKLSAgICAgICAgICBlbGVtZW50ID0gKEVsZW1lbnQpbm9kZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgY2FzZSBOb2RlLkFUVFJJQlVURV9OT0RFIDoKLSAgICAgICAgewotICAgICAgICAgIGF0dHIgPSAoQXR0cilub2RlOwotICAgICAgICAgIGVsZW1lbnQgPSBhdHRyLmdldE93bmVyRWxlbWVudCgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFIDoKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgcGFyZW50ID0gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgZWxlbWVudCA9IChwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSA/IChFbGVtZW50KXBhcmVudCA6IG51bGw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5maW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KGRlZmluaXRpb24sIGVsZW1lbnQpOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGNvbXB1dGVTcGVjaWZpY2F0aW9uKChFT2JqZWN0KW9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBiaW5kaW5nOwotICAgIGlmIChpc01hdGNoaW5nQXR0cmlidXRlKFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VEZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlUGFydChQYXJ0IHBhcnQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gcGFydDsKLSAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChpc01hdGNoaW5nQXR0cmlidXRlKFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpc01hdGNoaW5nQXR0cmlidXRlKFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSA9PSBkZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsID8gKE9iamVjdClwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgOiAoT2JqZWN0KXBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBwb3J0OwotICAgIGlmIChpc01hdGNoaW5nQXR0cmlidXRlKFdTRExDb25zdGFudHMuQklORElOR19BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlRmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gZmF1bHQ7Ci0gICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gZmF1bHQuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlSW5wdXQoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gaW5wdXQ7Ci0gICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gaW5wdXQuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlT3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gb3V0cHV0OwotCi0gICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldE1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZUltcG9ydChJbXBvcnQgdGhlSW1wb3J0KQotICB7Ci0JCU9iamVjdCByZXN1bHQgPSBudWxsOwotCQkKLQkJLy8gRm9yIG5vdywgbG9vayBhdCB0aGUgZmlsZSBleHRlbnNpb24uICBXaGVuIGJ1Z3ppbGxhIDExODI5MyBpcyBmaXhlZCwgbG9vayBhdAotCQkvLyB0aGUgSW1wb3J0J3MgZURlZmluaXRpb24gYW5kIGVTY2hlbWEgaW5zdGVhZC4KLQkJUGF0aCBpbXBvcnRQYXRoID0gbmV3IFBhdGgodGhlSW1wb3J0LmdldExvY2F0aW9uVVJJKCkpOwotCQlTdHJpbmcgZXh0ZW5zaW9uID0gaW1wb3J0UGF0aC5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JCWlmIChleHRlbnNpb24uZXF1YWxzSWdub3JlQ2FzZSgieHNkIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHRoZUltcG9ydC5nZXRFU2NoZW1hKCkgPT0gbnVsbCkgewotCQkJCSgoSW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotCQkJfQotCQkJCi0JCQlyZXN1bHQgPSB0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpOwotCQl9Ci0JCWVsc2UgaWYgKGV4dGVuc2lvbi5lcXVhbHNJZ25vcmVDYXNlKCJ3c2RsIikgfHwgZXh0ZW5zaW9uLmVuZHNXaXRoKCJ3c2RsIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpID09IG51bGwpIHsKLQkJCQkoKEltcG9ydEltcGwpdGhlSW1wb3J0KS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLQkJCX0KLQkJCQotCQkJcmVzdWx0ID0gdGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0JCX0KLQkJCi0JCQotLy8JCWlmICh0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpICE9IG51bGwpIHsKLS8vCQkJcmVzdWx0ID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLS8vCQl9Ci0vLwkJZWxzZSBpZiAodGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotLy8JCQlyZXN1bHQgPSB0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLS8vCQl9Ci0vLwkJZWxzZSB7Ci0vLwkgICAgICAgIC8vIE5lZWQgdG8gcmVzb2x2ZSBpbXBvcnRzIGJlY2F1c2UgdGhlIG1vZGVsIGRvZXNuJ3QgYXV0b21hdGljYWxseQotLy8JICAgICAgICAvLyBkbyBpdCBmb3IgdXMKLS8vCSAgICAgICAgKChJbXBvcnRJbXBsKXRoZUltcG9ydCkuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7Ci0vLwkgICAgICAgIHJlc3VsdCA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0vLwkgICAgfQotCQkKLQkJcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IHdzZGxFbGVtZW50KQotICB7Ci0gICAgcmV0dXJuIHdzZGxFbGVtZW50OwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzTWF0Y2hpbmdBdHRyaWJ1dGUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgcmV0dXJuIGF0dHIgIT0gbnVsbCAmJiB2YWx1ZS5lcXVhbHMoYXR0ci5nZXROYW1lKCkpOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkKLSAgewotICAgIEVDbGFzcyB0aGVFQ2xhc3MgPSBvYmplY3QuZUNsYXNzKCk7Ci0gICAgCi0gICAgaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gWFNEUGFja2FnZS5lSU5TVEFOQ0UpCi0gICAgewotICAgICAgLy8gSGFuZGxlIG5hdmlnYXRpb24gYmV0d2VlbiBpbmxpbmUgc2NoZW1hIGNvbXBvbmVudHMuCi0gICAgICAKLSAgICAgIFhTREh5cGVybGlua1RhcmdldExvY2F0b3IgeHNkSHlwZXJsaW5rVGFyZ2V0TG9jYXRvciA9IG5ldyBYU0RIeXBlcmxpbmtUYXJnZXRMb2NhdG9yKCk7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGF0dHIgIT0gbnVsbCA/IGF0dHIuZ2V0TmFtZSgpOiBudWxsOwotICAgICAgcmV0dXJuIHhzZEh5cGVybGlua1RhcmdldExvY2F0b3IubG9jYXRlKChYU0RDb25jcmV0ZUNvbXBvbmVudCkgb2JqZWN0LCBhdHRyaWJ1dGVOYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN1cGVyLmRlZmF1bHRDYXNlKG9iamVjdCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1JlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMTIwY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1JlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlciB7Ci0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldEJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcihJQVNET2JqZWN0IGFzZE9iamVjdCkgewotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAgKENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsgCi0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXMTFFbmRQb2ludCkgYXNkT2JqZWN0KS5nZXRUYXJnZXQoKTsgCi0gICAgICAgICAgICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKChXMTFEZXNjcmlwdGlvbikgZGVzY3JpcHRpb24sICgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0SW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIoSUFTRE9iamVjdCBhc2RPYmplY3QpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gKENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGlucHV0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiBhc2RPYmplY3QgaW5zdGFuY2VvZiBXMTFCaW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXMTFCaW5kaW5nKSBhc2RPYmplY3QgKS5nZXRUYXJnZXQoKTsKLSAgICAgICAgICAgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGRlc2NyaXB0aW9uLCAoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldE1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcihJQVNET2JqZWN0IGFzZE9iamVjdCkgewotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gKENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYgYXNkT2JqZWN0IGluc3RhbmNlb2YgVzExTWVzc2FnZVJlZmVyZW5jZSkgewotICAgICAgICAgICAgICAgIFdTRExFbGVtZW50IGVsZW1lbnQgPSAoV1NETEVsZW1lbnQpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgYXNkT2JqZWN0KS5nZXRUYXJnZXQoKTsKLSAgICAgICAgICAgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbiwgKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0WFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKElBU0RPYmplY3QgYXNkT2JqZWN0KSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGlucHV0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiBhc2RPYmplY3QgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBhc2RPYmplY3QpLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpLCBudWxsLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0WFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKElBU0RPYmplY3QgYXNkT2JqZWN0KSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGlucHV0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiBhc2RPYmplY3QgaW5zdGFuY2VvZiBJUGFyYW1ldGVyICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotICAgICAgICAgICAgICAgIFdTRExFbGVtZW50IGVsZW1lbnQgPSAoV1NETEVsZW1lbnQpICgoV1NETEJhc2VBZGFwdGVyKSBhc2RPYmplY3QpLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpLCBudWxsLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvU2VydmljZVBvbGljeUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1NlcnZpY2VQb2xpY3lIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2MTRlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvU2VydmljZVBvbGljeUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLldTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGVFbnVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotCi0vKioKLSAqIENvbnRhaW5zIGhlbHBlciBtZXRob2RzIGRlYWxpbmcgd2l0aCBzZXJ2aWNlIHBvbGljaWVzCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5SGVscGVyCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGFjdGl2ZSBwb2xpY3kgd2l0aCBhbiBhc3NvY2lhdGVkIGRlZmF1bHQgcHJvdG9jb2wKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEByZXR1cm4gSVNlcnZpY2VQb2xpY3kgaWYgdGhlcmUgaXMgb25lLCBvdGhlcndpc2UgbnVsbAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJU2VydmljZVBvbGljeSBnZXRBY3RpdmVQb2xpY3lXaXRoUHJvdG9jb2woSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIElTZXJ2aWNlUG9saWN5IHRoZVBvbGljeSA9IG51bGw7Ci0KLSAgICBJU2VydmljZVBvbGljeVtdIHBvbGljaWVzID0gZ2V0QWN0aXZlU2VydmljZVBvbGljaWVzKHByb2plY3QpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9saWNpZXMubGVuZ3RoOyArK2kpCi0gICAgewotICAgICAgSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gcG9saWNpZXNbaV07Ci0gICAgICAvLyBnZXQgdGhlIGRlZmF1bHQgcHJvdG9jb2wgZnJvbSB0aGUgcG9saWN5Ci0gICAgICBJUG9saWN5U3RhdGUgcG9saWN5U3RhdGUgPSBwb2xpY3kuZ2V0UG9saWN5U3RhdGUocHJvamVjdCk7Ci0gICAgICBpZiAocG9saWN5U3RhdGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGRlZmF1bHRCaW5kaW5nID0gcG9saWN5U3RhdGUuZ2V0VmFsdWUoV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLnN0YXRlS2V5RGVmYXVsdFByb3RvY29sKTsKLSAgICAgICAgaWYgKChkZWZhdWx0QmluZGluZyAhPSBudWxsKSAmJiAoZGVmYXVsdEJpbmRpbmcubGVuZ3RoKCkgPiAwKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHBvbGljeSB3aWxsIGJlIGxhc3Qgb25lIGFjdGl2ZQotICAgICAgICAgIHRoZVBvbGljeSA9IHBvbGljeTsKLSAgICAgICAgICBJUG9saWN5U3RhdGVFbnVtIHBvbGljeVN0YXRlRW51bSA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZUVudW0ocHJvamVjdCk7Ci0gICAgICAgICAgU3RyaW5nIGVudW1JZCA9IHBvbGljeVN0YXRlRW51bS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0gICAgICAgICAgLy8gaWYgZm91bmQgYSByZXF1aXJlZCBwb2xpY3ksIHN0b3AgYW5kIHJldHVybiBpdAotICAgICAgICAgIGlmIChXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVFbnVtUmVxdWlyZS5lcXVhbHMoZW51bUlkKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0aGVQb2xpY3k7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBkZWZhdWx0IGJpbmRpbmcgYmFzZWQgb24gdGhlIHByb2plY3QKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEByZXR1cm4gU3RyaW5nIGJpbmRpbmcgaWQgKG5hbWVzcGFjZSkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRCaW5kaW5nKElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICBTdHJpbmcgZGVmYXVsdEJpbmRpbmcgPSBudWxsOwotICAgIElTZXJ2aWNlUG9saWN5IHBvbGljeSA9IGdldEFjdGl2ZVBvbGljeVdpdGhQcm90b2NvbChwcm9qZWN0KTsKLSAgICBpZiAocG9saWN5ICE9IG51bGwpCi0gICAgewotICAgICAgZGVmYXVsdEJpbmRpbmcgPSBwb2xpY3kuZ2V0UG9saWN5U3RhdGUocHJvamVjdCkuZ2V0VmFsdWUoV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLnN0YXRlS2V5RGVmYXVsdFByb3RvY29sKTsKLSAgICB9Ci0KLSAgICAvLyBzdGlsbCB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgYmluZGluZyBzbyBqdXN0IGhhcmRjb2RlIGEgdmFsdWUKLSAgICBpZiAoZGVmYXVsdEJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIGRlZmF1bHRCaW5kaW5nID0gZ2V0RGVmYXVsdERlZmF1bHRCaW5kaW5nKCk7Ci0KLSAgICByZXR1cm4gZGVmYXVsdEJpbmRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBkZWZhdWx0IGJpbmRpbmcgYmFzZWQgb24gcHJvamVjdCBhbmQgc2VydmljZSBwb2xpY3kKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEBwYXJhbSBwb2xpY3kKLSAgICogQHJldHVybiBTdHJpbmcgYmluZGluZyBpZCAobmFtZXNwYWNlKQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEJpbmRpbmcoSVByb2plY3QgcHJvamVjdCwgSVNlcnZpY2VQb2xpY3kgcG9saWN5KQotICB7Ci0gICAgU3RyaW5nIGRlZmF1bHRCaW5kaW5nID0gbnVsbDsKLSAgICBpZiAocG9saWN5ICE9IG51bGwpCi0gICAgewotICAgICAgZGVmYXVsdEJpbmRpbmcgPSBwb2xpY3kuZ2V0UG9saWN5U3RhdGUocHJvamVjdCkuZ2V0VmFsdWUoV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLnN0YXRlS2V5RGVmYXVsdFByb3RvY29sKTsKLSAgICB9Ci0KLSAgICAvLyBzdGlsbCB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgYmluZGluZyBzbyBqdXN0IGhhcmRjb2RlIGEgdmFsdWUKLSAgICBpZiAoZGVmYXVsdEJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIGRlZmF1bHRCaW5kaW5nID0gZ2V0RGVmYXVsdERlZmF1bHRCaW5kaW5nKCk7Ci0KLSAgICByZXR1cm4gZGVmYXVsdEJpbmRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBzZXZlcml0eSB0byBiZSB1c2VkIHdoZW4gdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGN1cnJlbnQgcG9saWN5Ci0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdAotICAgKiBAcGFyYW0gcG9saWN5Ci0gICAqIEByZXR1cm4gaW50IChJTWVzc2FnZVByb3ZpZGVyLk5PTkUsIElNZXNzYWdlUHJvdmlkZXIuRVJST1IsCi0gICAqICAgICAgICAgSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0TWVzc2FnZVNldmVyaXR5KElQcm9qZWN0IHByb2plY3QsIElTZXJ2aWNlUG9saWN5IHBvbGljeSkKLSAgewotICAgIGludCBtZXNzYWdlU2V2ZXJpdHkgPSBJTWVzc2FnZVByb3ZpZGVyLk5PTkU7Ci0KLSAgICBpZiAocG9saWN5ICE9IG51bGwpCi0gICAgewotICAgICAgSVBvbGljeVN0YXRlRW51bSBwb2xpY3lTdGF0ZUVudW0gPSBwb2xpY3kuZ2V0UG9saWN5U3RhdGVFbnVtKHByb2plY3QpOwotICAgICAgU3RyaW5nIGVudW1JZCA9IHBvbGljeVN0YXRlRW51bS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0KLSAgICAgIGlmIChXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVFbnVtUmVxdWlyZS5lcXVhbHMoZW51bUlkKSkKLSAgICAgICAgbWVzc2FnZVNldmVyaXR5ID0gSU1lc3NhZ2VQcm92aWRlci5FUlJPUjsKLSAgICAgIGVsc2UgaWYgKFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1TdWdnZXN0LmVxdWFscyhlbnVtSWQpKQotICAgICAgICBtZXNzYWdlU2V2ZXJpdHkgPSBJTWVzc2FnZVByb3ZpZGVyLldBUk5JTkc7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lc3NhZ2VTZXZlcml0eTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGRlZmF1bHQgYmluZGluZwotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmcgYmluZGluZyBpZCAobmFtZXNwYWNlKQotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHREZWZhdWx0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLnN0YXRlS2V5RGVmYXVsdFByb3RvY29sX1ZBTFVFX1NPQVA7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFjdGl2ZSBzZXJ2aWNlIHBvbGljaWVzIGJhc2VkIG9uIHByb2plY3QKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEByZXR1cm4gSVNlcnZpY2VQb2xpY3lbXQotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgSVNlcnZpY2VQb2xpY3lbXSBnZXRBY3RpdmVTZXJ2aWNlUG9saWNpZXMoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIExpc3Qgc2VydmljZVBvbGljaWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIC8vIERldGVybWluZSBkZWZhdWx0IGJpbmRpbmcgdG8gdXNlIGJhc2VkIG9uIHByb2plY3QncyB3c2kgY29tcGxpYW5jZQotICAgIC8vIHByZWZlcmVuY2UKLSAgICBJU2VydmljZVBvbGljeSByb290UG9saWN5ID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCkuZ2V0U2VydmljZVBvbGljeShXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX1dTSVByb2ZpbGVSb290KTsKLSAgICBpZiAocm9vdFBvbGljeSAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3Qgd3NpUG9saWNpZXMgPSByb290UG9saWN5LmdldENoaWxkcmVuKCk7Ci0gICAgICAvLyBpdGVyYXRlIHRocm91Z2ggd3NpIHBvbGljaWVzIGFuZCBkZXRlcm1pbmUgd2hpY2ggb25lcyBhcmUgYXBwbGljYWJsZQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2lQb2xpY2llcy5zaXplKCk7ICsraSkKLSAgICAgIHsKLSAgICAgICAgSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gKElTZXJ2aWNlUG9saWN5KSB3c2lQb2xpY2llcy5nZXQoaSk7Ci0gICAgICAgIElQb2xpY3lTdGF0ZUVudW0gcG9saWN5U3RhdGVFbnVtID0gcG9saWN5LmdldFBvbGljeVN0YXRlRW51bShwcm9qZWN0KTsKLSAgICAgICAgU3RyaW5nIGVudW1JZCA9IHBvbGljeVN0YXRlRW51bS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0gICAgICAgIC8vIGZvdW5kIGFuIGVuYWJsZWQgcG9saWN5Ci0gICAgICAgIGlmIChXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVFbnVtUmVxdWlyZS5lcXVhbHMoZW51bUlkKSB8fCBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVFbnVtU3VnZ2VzdC5lcXVhbHMoZW51bUlkKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHNwZWNpYWwgY2hlY2sgZm9yIEFQIDEuMCBwb2xpY3kgKGl0IGRvZXNudCByZWFsbHkgY291bnQsIHNvIGRvbnQKLSAgICAgICAgICAvLyBhZGQgaXQpCi0gICAgICAgICAgaWYgKCFXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX0FQMTAuZXF1YWxzKHBvbGljeS5nZXRJZCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMuYWRkKHBvbGljeSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoSVNlcnZpY2VQb2xpY3lbXSkgc2VydmljZVBvbGljaWVzLnRvQXJyYXkobmV3IElTZXJ2aWNlUG9saWN5W3NlcnZpY2VQb2xpY2llcy5zaXplKCldKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1ZhbGlkYXRlSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVmFsaWRhdGVIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU4MjU5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVmFsaWRhdGVIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZUhlbHBlcgotewotICAvLyBYTUwgTGFuZyBjYW4gaGF2ZSBtYW55IGRpZmZlcmVudCB2YWxpZCBmb3JtYXRzCi0gIC8vIDEpIHh4ICAgICAgaWUuIGVuLCBmciwgZGUKLSAgLy8gMikgeHgteHggICBpZS4gZW4tVVMsIGVuLUZSCi0gIC8vIDMpIEkteHggICAgaWUuIEktZW4KLSAgLy8gNCkgWC14eCAgICBpZS4gWC1lbgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjaGVja1hNTExhbmcoU3RyaW5nIGxhbmcpCi0gIHsKLSAgICBpZiAobGFuZy5sZW5ndGgoKSA9PSAwKSAKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIGlmIChsYW5nLmxlbmd0aCgpID09IDEpIAotICAgIHsKLSAgICAgIGNoYXIgY2gwID0gbGFuZy5jaGFyQXQoMCk7Ci0gICAgICBpZiAoKGNoMCA+PSAnYScgJiYgY2gwIDw9ICd6JykgfHwgKGNoMCA+PSAnQScgJiYgY2gwIDw9ICdaJykpCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTEFOR19UT09fU0hPUlQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX05BTUVfSU5WQUxJRF9DSEFSIikgKyBjaDAgKyAgLy8kTk9OLU5MUy0xJAotICAgICAgICBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1VJX05BTUVfSU5WQUxJRF9DSEFSX0VORCIpOyAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgICBpbnQgb2Zmc2V0OwotCi0gICAgY2hhciBjaDAgPSBsYW5nLmNoYXJBdCgwKTsKLSAgICBpZiAobGFuZy5jaGFyQXQoMSkgPT0gJy0nKSAKLSAgICB7Ci0gICAgICBpZiAoY2gwID09ICdpJyB8fCBjaDAgPT0gJ0knIHx8IGNoMCA9PSAneCcgfHwgY2gwID09ICdYJykgCi0gICAgICAgIG9mZnNldCA9IDE7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoMCArICAvLyROT04tTkxTLTEkCi0gICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNoYXIgY2gxID0gbGFuZy5jaGFyQXQoMSk7Ci0gICAgICBpZiAoKGNoMCA+PSAnYScgJiYgY2gwIDw9ICd6JykgfHwgKGNoMCA+PSAnQScgJiYgY2gwIDw9ICdaJykpCi0gICAgICAgIGlmICgoY2gxID49ICdhJyAmJiBjaDEgPD0gJ3onKSB8fCAoY2gxID49ICdBJyAmJiBjaDEgPD0gJ1onKSkKLSAgICAgICAgICBvZmZzZXQgPSAyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2gxICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1VJX05BTUVfSU5WQUxJRF9DSEFSX0VORCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoMCArICAvLyROT04tTkxTLTEkCi0gICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBpZiAobGFuZy5sZW5ndGgoKSA+IG9mZnNldCkgCi0gICAgewotICAgICAgY2hhciBjaCA9IGxhbmcuY2hhckF0KG9mZnNldCsrKTsKLSAgICAgIGlmIChjaCAhPSAnLScpIAotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX0hZUEhFTl9ORUVERUQiKSArIEludGVnZXIudG9TdHJpbmcob2Zmc2V0LTEpOyAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSAKLSAgICAgICAgewotICAgICAgICAgIGlmIChjaCA9PSAnLScpIAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsYW5nLmxlbmd0aCgpID09IG9mZnNldCkgCi0gICAgICAgICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fSFlQSEVOX0VORElORyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNoID0gbGFuZy5jaGFyQXQob2Zmc2V0KyspOwotICAgICAgICAgICAgaWYgKChjaCA8ICdhJyB8fCBjaCA+ICd6JykgJiYgKGNoIDwgJ0EnIHx8IGNoID4gJ1onKSkgCi0gICAgICAgICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobGFuZy5sZW5ndGgoKSA9PSBvZmZzZXQpCi0gICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0gCi0gICAgICAgICAgZWxzZSBpZiAoKGNoIDwgJ2EnIHx8IGNoID4gJ3onKSAmJiAoY2ggPCAnQScgfHwgY2ggPiAnWicpKSAKLSAgICAgICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7ICAgICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgZWxzZSBpZiAobGFuZy5sZW5ndGgoKSA9PSBvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICBjaCA9IGxhbmcuY2hhckF0KG9mZnNldCsrKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBtaW4gdmFsdWUgaXMgY29ycmVjdC4KLSAgICogQSBtaW5pbXVtIHZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCA8IG1heFZhbHVlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBpc1ZhbGlkTWluVmFsdWUoU3RyaW5nIG1pblZhbHVlLCBTdHJpbmcgbWF4VmFsdWUpCi0gIHsKLSAgICBpbnQgbWluOwotCi0gICAgaWYgKG1pblZhbHVlID09IG51bGwgfHwgbWluVmFsdWUuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIC8vIE5vdGhpbmcgdG8gY2hlY2sKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIG1pbiA9IEludGVnZXIucGFyc2VJbnQobWluVmFsdWUpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX0VSUk9SX01JTl9OT1RfUE9TSVRJVkUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIGlmIChtaW4gPCAwKSAKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9FUlJPUl9NSU5fTk9UX1BPU0lUSVZFIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpbnQgbWF4ID0gSW50ZWdlci5wYXJzZUludChtYXhWYWx1ZSk7Ci0gICAgICBpZiAobWluID4gbWF4KSAKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfRVJST1JfTUlOX1ZBTFVFIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICAvLyBNYXggaXMgbm90IGFjY3VyYXRlLiBEb24ndCBjb21wYXJlIGl0LgotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIG1heCB2YWx1ZSBpcyBjb3JyZWN0LgotICAgKiBBIG1heGltdW0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kID4gbWluVmFsdWUKLSAgICoKLSAgICogSXQgY2FuIGFsc28gYmUgc2V0IHRoZSBzdHJpbmcgInVuYm91bmRlZCIKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGlzVmFsaWRNYXhWYWx1ZShTdHJpbmcgbWF4VmFsdWUsIFN0cmluZyBtaW5WYWx1ZSkKLSAgewotICAgIGludCBtYXg7Ci0KLSAgICBpZiAobWF4VmFsdWUgPT0gbnVsbCB8fCBtYXhWYWx1ZS5lcXVhbHMoIiIpKSAgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIC8vIE5vdGhpbmcgdG8gY2hlY2sKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIGlmIChtYXhWYWx1ZS5lcXVhbHMoInVuYm91bmRlZCIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgbWF4ID0gSW50ZWdlci5wYXJzZUludChtYXhWYWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfRVJST1JfTUFYX05PVF9QT1NJVElWRSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgaWYgKG1heCA8IDApIAotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX0VSUk9SX01BWF9OT1RfUE9TSVRJVkUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBtaW4gPSBJbnRlZ2VyLnBhcnNlSW50KG1pblZhbHVlKTsKLSAgICAgIGlmIChtYXggPCBtaW4pIAotICAgICAgewotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9FUlJPUl9NQVhfVkFMVUUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIC8vIE1pbiBpcyBub3QgYWNjdXJhdGUuIERvbid0IGNvbXBhcmUgaXQuCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBuYW1lIGNvbmZvcm1zIHRvIHRoZSBYTUwgc3BlYwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2hlY2tYTUxOYW1lKFN0cmluZyBuYW1lLCBib29sZWFuIGFsbG93RW50aXR5UmVmKQotICB7Ci0gICAgaW50IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgY2hhciBjaGFyYWN0ZXI7Ci0KLSAgICBpZiAobGVuZ3RoID09IDApIAotICAgIHsKLSAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX01VU1RfQ09OVEFJTl9BVF9MRUFTVF9PTkVfQ0hBUjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5hbWUuaW5kZXhPZigiICIpID49IDApIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gTWVzc2FnZXMuX1dBUk5fTkFNRV9IQVNfU1BBQ0U7Ci0gICAgfQotCi0gICAgaW50IGluZGV4ID0gMDsKLSAgICBpZiAobGVuZ3RoID4gMCAmJgotICAgICAgICBuYW1lLmNoYXJBdCgwKSA9PSAnJScpCi0gICAgewotICAgICAgaWYgKGFsbG93RW50aXR5UmVmKSAKLSAgICAgIHsKLSAgICAgICAgLy8gc2tpcCBvdmVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICB9IC8vIGVuZCBvZiBpZiAoKQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm4gTWVzc2FnZXMuX1dBUk5fTkFNRV9JTlZBTElEX0ZJUlNUOwotICAgICAgfSAvLyBlbmQgb2YgZWxzZQotICAgIH0KLSAgICAKLSAgICBmb3IoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyYWN0ZXIgPSBuYW1lLmNoYXJBdChpbmRleCk7Ci0KLSAgICAgIGlmKGluZGV4ID09IDApCi0gICAgICB7Ci0gICAgICAgIGlmKCAhaXNYTUxOYW1lU3RhcnQoY2hhcmFjdGVyKSApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gTWVzc2FnZXMuX1dBUk5fTkFNRV9JTlZBTElEX0ZJUlNUOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmKCFpc1hNTE5hbWVDaGFyKGNoYXJhY3RlcikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoKGluZGV4ID09IGxlbmd0aCAtIDEpICYmIC8vY2hlY2sgaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgJzsnCi0gICAgICAgICAgICAgIGFsbG93RW50aXR5UmVmICYmCi0gICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAnOycpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gd2UncmUgc3RpbGwgb2sgdGhlbgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfSAvLyBlbmQgb2YgaWYgKCkKLSAgICAgICAgICBlbHNlIAotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiArIGNoYXJhY3RlciArCi0gICAgICAgICAgICBNZXNzYWdlcy5fVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EOwotICAgICAgICAgIH0gLy8gZW5kIG9mIGVsc2UKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgbmFtZSBjb25mb3JtcyB0byB0aGUgWE1MIHNwZWMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNoZWNrWE1MTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBjaGVja1hNTE5hbWUobmFtZSwgZmFsc2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIGlzWE1MTmFtZVN0YXJ0Ci0gICAqKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hNTE5hbWVTdGFydChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSAnXycgfHwgY2ggPT0gJzonIHx8IENoYXJhY3Rlci5pc0xldHRlcihjaCkgKTsKLSAgfQotCi0gIC8qKgotICAgKiBpc1hNTE5hbWVDaGFyCi0gICAqKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hNTE5hbWVDaGFyKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKENoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQoY2gpIHx8IGNoID09ICcuJyB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJ18nIHx8IGNoID09ICc6Jyk7Ci0gIH0KLQotICAvKioKLSAgICogaXNYTUxQcmVmaXhTdGFydAotICAgKiovCi0vLyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hNTFByZWZpeFN0YXJ0KGNoYXIgY2gpCi0vLyAgewotLy8gICAgcmV0dXJuIChjaCA9PSAnXycgfHwgQ2hhcmFjdGVyLmlzTGV0dGVyKGNoKSApOwotLy8gIH0KLQotICAvKioKLSAgICogaXNYTUxQcmVmaXhDaGFyCi0gICAqKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hNTFByZWZpeENoYXIoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChjaCkgfHwgY2ggPT0gJy4nIHx8IGNoID09ICctJyB8fCBjaCA9PSAnXycpOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNlRWxlbWVudFRleHQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlRWxlbWVudFRleHQoU3RyaW5nIHRleHQpCi0gIHsKLSAgICBpZiAodGV4dC5pbmRleE9mKCc8JykgIT0gLTEgfHwgdGV4dC5pbmRleE9mKCc+JykgIT0gLTEpCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9FTEVNRU5UX0lOVkFMSURfQ0hBUiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNlQXR0cmlidXRlVmFsdWUKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlQXR0cmlidXRlVmFsdWUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmluZGV4T2YoJyInKSAhPSAtMSB8fCB2YWx1ZS5pbmRleE9mKCc8JykgIT0gLTEgfHwgdmFsdWUuaW5kZXhPZignPicpICE9IC0xKQotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fQVRUUklCVVRFX0lOVkFMSURfQ0hBUiIpOyAvLyROT04tTkxTLTEkCi0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc2VBREFUQVNlY3Rpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlQ0RBVEFTZWN0aW9uKFN0cmluZyBzZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlY3Rpb24uaW5kZXhPZigiXV0+IikgIT0gLTEpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX0NEQVRBX0lOVkFMSURfU1RSSU5HIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBwYXJzZVByb2Nlc3NpaW5nSW5zdHJ1Y3Rpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uRGF0YShTdHJpbmcgZGF0YSkKLSAgewotICAgIGlmIChkYXRhLmluZGV4T2YoIj8+IikgIT0gLTEpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX1BST0NFU1NJTkdfSU5WQUxJRF9TVFJJTkciKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uVGFyZ2V0Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvblRhcmdldChTdHJpbmcgdGFyZ2V0KQotICB7Ci0gICAgaWYgKHRhcmdldC5sZW5ndGgoKSA9PSAzICYmICh0YXJnZXQuaW5kZXhPZigiWE1MIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoIlhNbCIpICE9IC0xIHx8IHRhcmdldC5pbmRleE9mKCJYbUwiKSAhPSAtMSB8fCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgICB0YXJnZXQuaW5kZXhPZigieE1MIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoIlhtbCIpICE9IC0xIHx8IHRhcmdldC5pbmRleE9mKCJ4TWwiKSAhPSAtMSB8fCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgICB0YXJnZXQuaW5kZXhPZigieG1MIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoInhtbCIpICE9IC0xKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9QUk9DRVNTSU5HX1RBUkdFVF9JTlZBTElEX1NUUklORyIpOyAvLyROT04tTkxTLTEkCi0KLSAgICB9Ci0gICAgcmV0dXJuIGNoZWNrWE1MTmFtZSh0YXJnZXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNDb21tZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBwYXJzZUNvbW1lbnQoU3RyaW5nIGNvbW1lbnQpCi0gIHsKLSAgICBpZiAoY29tbWVudC5pbmRleE9mKCItLSIpICE9IC0xKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9DT01NRU5UX0lOVkFMSURfU1RSSU5HIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgcHJlZml4IGNvbmZvcm1zIHRvIHRoZSBYTUwgc3BlYwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2hlY2tYTUxQcmVmaXgoU3RyaW5nIHByZWZpeCkKLSAgewotICAgIGludCBsZW5ndGggPSBwcmVmaXgubGVuZ3RoKCk7Ci0gICAgaWYgKGxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBjaGFyIGNoYXJhY3RlcjsKLSAgICAKLSAgICBpZiAocHJlZml4LmluZGV4T2YoIiAiKSA+PSAwKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuKFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9QUkVGSVhfSEFTX1NQQUNFIikpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIGZvcihpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyYWN0ZXIgPSBwcmVmaXguY2hhckF0KGluZGV4KTsKLQotICAgICAgaWYoIWlzWE1MUHJlZml4Q2hhcihjaGFyYWN0ZXIpKQotICAgICAgewotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0U3RyaW5nKCJfV0FSTl9QUkVGSVhfSU5WQUxJRF9DSEFSIiwgU3RyaW5nLnZhbHVlT2YoY2hhcmFjdGVyKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NDZhNzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1cxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLkZpbGVTdG9yZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLklPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZGlhbG9ncy5JT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZGlhbG9ncy5YU0RHcmFwaFZpZXdlckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgaW1wbGVtZW50cyBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLCBJT3BlbkluTmV3RWRpdG9yIHsKLQlwcml2YXRlIE9iamVjdCBvYmplY3Q7Ci0JcHJpdmF0ZSBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQ7Ci0JCi0JcHVibGljIFcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcihJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpCi0JewotCQl0aGlzLmVkaXRvcklucHV0ID0gZWRpdG9ySW5wdXQ7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE1vZGVsKE9iamVjdCBvYmplY3QpIHsKLQkJdGhpcy5vYmplY3QgPSBvYmplY3Q7Ci0JfQotCQotCXB1YmxpYyB2b2lkIG9wZW5FeHRlcm5hbEVkaXRvcigpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJT2JqZWN0IG5vdGlmaWVyID0gKChXU0RMQmFzZUFkYXB0ZXIpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQlPYmplY3Qgb3Blbk9uTW9kZWwgPSBnZXRNb2RlbFRvT3Blbk9uKG5vdGlmaWVyKTsKLQkJCQotCQkJaWYgKG9wZW5Pbk1vZGVsIGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCSAgWFNEQ29uY3JldGVDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvcGVuT25Nb2RlbDsKLQkJCSAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFNjaGVtYSh4c2RDb21wb25lbnQpOwotCQkJICBpZiAoc2NoZW1hID09IG51bGwpIHJldHVybjsKLQkJCSAgaWYgKHNjaGVtYS5lUmVzb3VyY2UoKSBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCi0JCQkgIHsKLQkJCSAgICBTdHJpbmcgZmlsZU5hbWUgPSBzY2hlbWEuZVJlc291cmNlKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKLQkJCSAgICBpZiAoZmlsZU5hbWUgPT0gbnVsbCkgZmlsZU5hbWUgPSAiV1NETCI7IC8vJE5PTi1OTFMtMSQKLQkJCSAgICBTdHJpbmcgZWRpdG9yTmFtZSA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9JTkxJTkVfU0NIRU1BX09GICsgZmlsZU5hbWU7Ci0JCSAgICAgIFhTREdyYXBoVmlld2VyRGlhbG9nLm9wZW5JbmxpbmVTY2hlbWEoZWRpdG9ySW5wdXQsIHhzZENvbXBvbmVudCwgc2NoZW1hLCBlZGl0b3JOYW1lKTsKLQkJCSAgfQotCQkJICBlbHNlCi0JCQkgIHsKLQkJCQkgIFhTREdyYXBoVmlld2VyRGlhbG9nLm9wZW5YU0RFZGl0b3IoZWRpdG9ySW5wdXQsIHhzZENvbXBvbmVudC5nZXRTY2hlbWEoKSwgeHNkQ29tcG9uZW50KTsKLQkJCSAgfQotCQkJfQotCQl9Ci0JfQotCQotICBwdWJsaWMgdm9pZCBvcGVuWFNERWRpdG9yKCkKLSAgewotICAgIG9wZW5FeHRlcm5hbEVkaXRvcigpOyAgCi0gIH0KLQotCXByb3RlY3RlZCBYU0RTY2hlbWEgZ2V0U2NoZW1hKFhTRENvbmNyZXRlQ29tcG9uZW50IHhzZENvbXBvbmVudCkgewotCQlYU0RTY2hlbWEgc2NoZW1hID0geHNkQ29tcG9uZW50LmdldFNjaGVtYSgpOwotCQlpZiAoc2NoZW1hID09IG51bGwpIHsKLQkJCU9iamVjdCBub3RpZmllciA9ICgoV1NETEJhc2VBZGFwdGVyKSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJaWYgKG5vdGlmaWVyIGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCQlzY2hlbWEgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBub3RpZmllcikuZ2V0U2NoZW1hKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBzY2hlbWE7Ci0JfQotCQkKLQlwdWJsaWMgYm9vbGVhbiBsaW5rQXBwbGljYWJsZSgpIHsKLQkJYm9vbGVhbiBhcHBsaWNhYmxlID0gdHJ1ZTsKLQkJCi0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQlJUGFyYW1ldGVyIHBhcmFtID0gKElQYXJhbWV0ZXIpIG9iamVjdDsKLQkJCVN0cmluZyBwcmVmaXggPSBwYXJhbS5nZXRDb21wb25lbnROYW1lUXVhbGlmaWVyKCk7Ci0JCQlpZiAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4LmVxdWFscyhYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpKSB7Ci0JCQkJYXBwbGljYWJsZSA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gYXBwbGljYWJsZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIE9iamVjdCBnZXRNb2RlbFRvT3Blbk9uKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgb2JqZWN0KS5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkJcmV0dXJuIHhzZEVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlPYmplY3QgZWxlbWVudE9yVHlwZSA9ICgoUGFydCkgb2JqZWN0KS5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCWlmIChlbGVtZW50T3JUeXBlID09IG51bGwpIHsKLQkJCQllbGVtZW50T3JUeXBlID0gKChQYXJ0KSBvYmplY3QpLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBlbGVtZW50T3JUeXBlOwotCQl9Ci0JCQotCQlyZXR1cm4gb2JqZWN0OwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gZmlsZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0lubGluZVNjaGVtYShJRmlsZSBmaWxlKSB7Ci0JCS8vIFNob3VsZCB0aGVyZSBiZSBhIGJldHRlciB0ZXN0IGZvciB0aGlzPyAgVGhlIElGaWxlcyBhcmUgZGlmZmVyZW50IHNvIHdlIGNhbid0IHVzZSBmaWxlID09IHdzZGxGaWxlLgotCQkvLyByZXR1cm4gZmlsZS5nZXRGdWxsUGF0aCgpLmVxdWFscyh3c2RsRmlsZS5nZXRGdWxsUGF0aCgpKTsKLSAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCkgewotICAgICAgRmlsZVN0b3JlRWRpdG9ySW5wdXQgZmlsZVN0b3JlRWRpdG9ySW5wdXQgPSAoRmlsZVN0b3JlRWRpdG9ySW5wdXQpZWRpdG9ySW5wdXQ7Ci0gICAgICBmaWxlLmdldEZ1bGxQYXRoKCkuZXF1YWxzKGZpbGVTdG9yZUVkaXRvcklucHV0LmdldFVSSSgpLmdldFBhdGgoKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0gICAgICBJU3RvcmFnZUVkaXRvcklucHV0IHN0b3JhZ2UgPSAoSVN0b3JhZ2VFZGl0b3JJbnB1dCkgZWRpdG9ySW5wdXQ7Ci0gICAgICB0cnkgewotICAgICAgICBJUGF0aCBwYXRoID0gc3RvcmFnZS5nZXRTdG9yYWdlKCkuZ2V0RnVsbFBhdGgoKTsKLSAgICAgICAgaWYgKHBhdGggIT0gbnVsbCAmJiBwYXRoLmVxdWFscyhmaWxlLmdldEZ1bGxQYXRoKCkpKSB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0gICAgICBJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgIHJldHVybiAgZmlsZS5nZXRGdWxsUGF0aCgpLmVxdWFscyhmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpLmdldEZ1bGxQYXRoKCkpOwotICAgIH0KLQkgIHJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJT2JqZWN0IG5vdGlmaWVyID0gKChXU0RMQmFzZUFkYXB0ZXIpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQlPYmplY3Qgb3Blbk9uTW9kZWwgPSBnZXRNb2RlbFRvT3Blbk9uKG5vdGlmaWVyKTsKLQotCQkJLy8gV2UgY2hlY2sgdG8gZW5zdXJlIGl0J3MgZWxlbWVudCAhPSBudWxsLiAgSWYgaXQgZG9lcywgdGhlbiBpdCdzIGEgc2lnbiBvZiBhCi0JCQkvLyBiYWQgcmVmZXJlbmNlIChpcyBpbnZhbGlkKS4KLQkJCWlmIChvcGVuT25Nb2RlbCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50ICYmICgoWFNEQ29uY3JldGVDb21wb25lbnQpIG9wZW5Pbk1vZGVsKS5nZXRFbGVtZW50KCkgIT0gbnVsbCkgewotCQkJCVhTRENvbmNyZXRlQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IChYU0RDb25jcmV0ZUNvbXBvbmVudCkgb3Blbk9uTW9kZWw7Ci0KLQkJCQlYU0RTY2hlbWEgc2NoZW1hID0gZ2V0U2NoZW1hKHhzZENvbXBvbmVudCk7Ci0JCQkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0gICAgICAgICAgU3RyaW5nIHNjaGVtYUxvY2F0aW9uID0gVVJJSGVscGVyLnJlbW92ZVBsYXRmb3JtUmVzb3VyY2VQcm90b2NvbChzY2hlbWEuZ2V0U2NoZW1hTG9jYXRpb24oKSk7Ci0gICAgICAgICAgSVBhdGggc2NoZW1hUGF0aCA9IG5ldyBQYXRoKHNjaGVtYUxvY2F0aW9uKTsKLSAgICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24uc3RhcnRzV2l0aCgiaHR0cCIpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0JCQkJICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlRWRpdG9ySW5wdXQpIHsKLQkJICAJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHNjaGVtYVBhdGgpOwotCQkJICAJCWlmIChmaWxlICE9IG51bGwgJiYgZmlsZS5leGlzdHMoKSkgewotCQkJCSAgCQlyZXR1cm4gdHJ1ZTsKLQkJCQkJICB9Ci0JCQkJICB9Ci0JCQkJICBlbHNlIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yZUVkaXRvcklucHV0KSB7Ci0JCQkJICAgIHJldHVybiB0cnVlOwotLy8gUmV2aXNpdAotLy8gICAgICAgICAgICBzY2hlbWFMb2NhdGlvbiA9IHNjaGVtYS5nZXRTY2hlbWFMb2NhdGlvbigpOwotLy8gICAgICAgICAgICBzY2hlbWFQYXRoID0gbmV3IFBhdGgoVVJJSGVscGVyLnJlbW92ZVByb3RvY29sKHNjaGVtYUxvY2F0aW9uKSk7Ci0vLwkJICAgICAgICBJRmlsZVN0b3JlIGZpbGVTdG9yZSA9IEVGUy5nZXRMb2NhbEZpbGVTeXN0ZW0oKS5nZXRTdG9yZShzY2hlbWFQYXRoKTsKLS8vCQkgICAgICAgIGlmICghZmlsZVN0b3JlLmZldGNoSW5mbygpLmlzRGlyZWN0b3J5KCkgJiYgZmlsZVN0b3JlLmZldGNoSW5mbygpLmV4aXN0cygpKQotLy8JCSAgICAgICAgewotLy8JCQkJCSAgICByZXR1cm4gdHJ1ZTsKLS8vCQkgICAgICAgIH0KLQkJCQkJfQotCQkJCQllbHNlIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJICByZXR1cm4gdHJ1ZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2hvd1ByZXZpZXcoKSB7Ci0gICAgT2JqZWN0IHhzZE1vZGVsID0gbnVsbDsKLSAgICBTdHJpbmcgdGl0bGUgPSAiIjsKLSAgICBTdHJpbmcgaW5mbyA9ICIiOwotCi0gICAgT2JqZWN0IG5vdGlmaWVyID0gKChXU0RMQmFzZUFkYXB0ZXIpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0gICAgeHNkTW9kZWwgPSBnZXRNb2RlbFRvT3Blbk9uKG5vdGlmaWVyKTsKLSAgICBpZiAoeHNkTW9kZWwgaW5zdGFuY2VvZiBYU0ROYW1lZENvbXBvbmVudCkKLSAgICB7Ci0gICAgICBYU0ROYW1lZENvbXBvbmVudCBuYW1lZENvbXBvbmVudCA9IChYU0ROYW1lZENvbXBvbmVudCkgeHNkTW9kZWw7Ci0gICAgICB0aXRsZSA9IG5hbWVkQ29tcG9uZW50LmdldE5hbWUoKTsKLSAgICAgIGluZm8gPSBuYW1lZENvbXBvbmVudC5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzVmFsaWQoKSAmJiB4c2RNb2RlbCAhPSBudWxsKQotICAgIHsKLSAgCQlYU0RHcmFwaFZpZXdlckRpYWxvZyBkaWFsb2cgPSBuZXcgWFNER3JhcGhWaWV3ZXJEaWFsb2coUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpLCB0aXRsZSwgaW5mbywgeHNkTW9kZWwsICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5wcmV2aWV3Iik7Ci0gIAkJZGlhbG9nLnNldE9wZW5FeHRlcm5hbEVkaXRvcih0aGlzKTsKLSAgICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3NGMyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEFkYXB0ZXJGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyIHsKLQlwcml2YXRlIHN0YXRpYyBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIgaW5zdGFuY2U7Ci0JCi0JcHJpdmF0ZSBBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKLQkKLQlwdWJsaWMgc3RhdGljIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlciBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlcigpOwotCQl9Ci0JCQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCQotCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIHRhcmdldCkgewotCQlBZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gZ2V0V1NETEFkYXB0ZXJGYWN0b3J5KCk7Ci0JCXJldHVybiBmYWN0b3J5LmFkYXB0KHRhcmdldCwgZmFjdG9yeSk7Ci0JfQotCQotCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRXU0RMQWRhcHRlckZhY3RvcnkoKSB7Ci0JCWlmIChhZGFwdGVyRmFjdG9yeSA9PSBudWxsKSB7Ci0JCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBXU0RMQWRhcHRlckZhY3RvcnkoKTsKLQkJfQotCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFdTRExBZGFwdGVyRmFjdG9yeShBZGFwdGVyRmFjdG9yeSBmYWN0b3J5KSB7Ci0JCWFkYXB0ZXJGYWN0b3J5ID0gZmFjdG9yeTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETEVkaXRvclV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMRWRpdG9yVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWZhOGM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMRWRpdG9yVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5FeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuSVR5cGVTeXN0ZW1Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi1wdWJsaWMgY2xhc3MgV1NETEVkaXRvclV0aWwgZXh0ZW5kcyBXU0RMQ29uc3RhbnRzIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFdTRExFZGl0b3JVdGlsIGluc3RhbmNlOwotCXByb3RlY3RlZCBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyIG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgPSBuZXcgTm9kZUFzc29jaWF0aW9uTWFuYWdlcigpOwotCi0JcHJvdGVjdGVkIEhhc2hNYXAgZWxlbWVudE5hbWVUb1R5cGVNYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxFTUVOVCA9IDE0OwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEUgPSAxNTsKLQotCXB1YmxpYyBzdGF0aWMgV1NETEVkaXRvclV0aWwgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZSA9IG5ldyBXU0RMRWRpdG9yVXRpbCgpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0KLQlwdWJsaWMgV1NETEVkaXRvclV0aWwoKSB7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChCSU5ESU5HX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihCSU5ESU5HKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChERUZJTklUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihERUZJTklUSU9OKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihET0NVTUVOVEFUSU9OKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChGQVVMVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoRkFVTFQpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KElNUE9SVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoSU1QT1JUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChJTlBVVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoSU5QVVQpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE1FU1NBR0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKE1FU1NBR0UpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE9QRVJBVElPTl9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoT1BFUkFUSU9OKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChPVVRQVVRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKE9VVFBVVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoUEFSVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoUEFSVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoUE9SVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoUE9SVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoUE9SVF9UWVBFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihQT1JUX1RZUEUpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KFNFUlZJQ0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFNFUlZJQ0UpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KFRZUEVTX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihUWVBFUykpOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0V1NETFR5cGUoRWxlbWVudCBlbGVtZW50KSB7Ci0JCWludCByZXN1bHQgPSAtMTsKLQotCQlJbnRlZ2VyIGludGVnZXIgPSAoSW50ZWdlcikgZWxlbWVudE5hbWVUb1R5cGVNYXAuZ2V0KGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotCQlpZiAoaW50ZWdlciAhPSBudWxsKSB7Ci0JCQlyZXN1bHQgPSBpbnRlZ2VyLmludFZhbHVlKCk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRQYXJlbnRFbGVtZW50Q2hhaW4oRWxlbWVudCBlbGVtZW50KSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJd2hpbGUgKGVsZW1lbnQgIT0gbnVsbCkgewotCQkJbGlzdC5hZGQoMCwgZWxlbWVudCk7Ci0JCQlOb2RlIG5vZGUgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLQkJCWVsZW1lbnQgPSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgPyAoRWxlbWVudCkgbm9kZSA6IG51bGw7Ci0JCX0KLQkJcmV0dXJuIGxpc3Q7Ci0JfQotCi0JcHVibGljIE9iamVjdCBmaW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KERlZmluaXRpb24gZGVmaW5pdGlvbiwgRWxlbWVudCB0YXJnZXRFbGVtZW50KSB7Ci0JCU9iamVjdCBvID0gbm9kZUFzc29jaWF0aW9uTWFuYWdlci5nZXRNb2RlbE9iamVjdEZvck5vZGUoZGVmaW5pdGlvbiwgdGFyZ2V0RWxlbWVudCk7Ci0JCXJldHVybiBvOwotCX0KLQotCXB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnRGb3JPYmplY3QoT2JqZWN0IG8pIHsKLQkJcmV0dXJuICgob3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQpIG8pLmdldEVsZW1lbnQoKTsKLQl9Ci0KLQlwdWJsaWMgTm9kZSBnZXROb2RlRm9yT2JqZWN0KE9iamVjdCBvKSB7Ci0JCXJldHVybiBub2RlQXNzb2NpYXRpb25NYW5hZ2VyLmdldE5vZGUobyk7Ci0JfQotCi0JLy8gUHJvdmlkZSBhIG1hcHBpbmcgYmV0d2VlbiBEZWZpbml0aW9ucyBhbmQgSVR5cGVTeXN0ZW1Qcm92aWRlcnMKLS8vIHByaXZhdGUgSGFzaHRhYmxlIHR5cGVTeXN0ZW1Qcm92aWRlcnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JcHJpdmF0ZSBJVHlwZVN5c3RlbVByb3ZpZGVyIHR5cGVTeXN0ZW1Qcm92aWRlcjsKLQotCXB1YmxpYyBJVHlwZVN5c3RlbVByb3ZpZGVyIGdldFR5cGVTeXN0ZW1Qcm92aWRlcihEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJaWYgKHR5cGVTeXN0ZW1Qcm92aWRlciA9PSBudWxsKSB7Ci0JCQl0eXBlU3lzdGVtUHJvdmlkZXIgPSBuZXcgRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlcigpOwotCQl9Ci0JCXJldHVybiB0eXBlU3lzdGVtUHJvdmlkZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VHlwZVN5c3RlbVByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbiwgSVR5cGVTeXN0ZW1Qcm92aWRlciB0eXBlU3lzdGVtUHJvdmlkZXIpIHsKLQkJLy8gdHlwZVN5c3RlbVByb3ZpZGVycy5wdXQoZGVmaW5pdGlvbix0eXBlU3lzdGVtUHJvdmlkZXIpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUU5hbWUgY3JlYXRlUU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgcHJlZml4ZWROYW1lKSB7Ci0JCVFOYW1lIHFuYW1lID0gbnVsbDsKLQkJaWYgKHByZWZpeGVkTmFtZSAhPSBudWxsKSB7Ci0JCQlpbnQgaW5kZXggPSBwcmVmaXhlZE5hbWUuaW5kZXhPZigiOiIpOyAvLyROT04tTkxTLTEkCi0vLyBTdHJpbmcgcHJlZml4ID0gKGluZGV4ID09IC0xKSA/IG51bGwgOiBwcmVmaXhlZE5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCVN0cmluZyBwcmVmaXggPSAoaW5kZXggPT0gLTEpID8gIiIgOiBwcmVmaXhlZE5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCWlmIChwcmVmaXggIT0gbnVsbCkgewotCQkJCVN0cmluZyBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZShwcmVmaXgpOwotCQkJCWlmIChuYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJCQlTdHJpbmcgbG9jYWxQYXJ0ID0gcHJlZml4ZWROYW1lLnN1YnN0cmluZyhpbmRleCArIDEpOwotCQkJCQlxbmFtZSA9IG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsUGFydCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBxbmFtZTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudE5vZGVzKEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50KSB7Ci0JCS8vIEZvciBUeXBlcywgSSBuZWVkIHRvIGdldCBhbGwgdGhlIHNjaGVtYXMKLQkJaWYgKGV4dGVuc2libGVFbGVtZW50IGluc3RhbmNlb2YgVHlwZXMpIHsKLQkJCVR5cGVzIHhzZEVFID0gKFR5cGVzKSBleHRlbnNpYmxlRWxlbWVudDsKLQkJCXJldHVybiB4c2RFRS5nZXRTY2hlbWFzKCk7Ci0JCX0KLQkJLyoKLQkJICogTGlzdCBjaGlsZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCSAqIAotCQkgKiBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBnZXRFbGVtZW50Rm9yT2JqZWN0KGV4dGVuc2libGVFbGVtZW50KTsgaWYKLQkJICogKHBhcmVudEVsZW1lbnQgIT0gbnVsbCkgewotCQkgKiAKLQkJICogTm9kZUxpc3Qgbm9kZUxpc3QgPSBwYXJlbnRFbGVtZW50LmdldENoaWxkTm9kZXMoKTsgaW50Ci0JCSAqIG5vZGVMaXN0TGVuZ3RoID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7IGZvciAoaW50IGkgPSAwOyBpIDwKLQkJICogbm9kZUxpc3RMZW5ndGg7IGkrKykgeyBjaGlsZExpc3QuYWRkKG5vZGVMaXN0Lml0ZW0oaSkpOyB9IEhhc2hNYXAKLQkJICogZXh0ZW5zaWJsZUVsZW1lbnRUYWJsZSA9IG5ldyBIYXNoTWFwKCk7IGZvciAoSXRlcmF0b3IgaSA9Ci0JCSAqIGV4dGVuc2libGVFbGVtZW50LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCQkgKiBpLmhhc05leHQoKTspIHsgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPQotCQkgKiAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7IGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCAhPSBudWxsKSB7Ci0JCSAqIEVsZW1lbnQgZWxlbWVudCA9IGdldEVsZW1lbnRGb3JPYmplY3QoZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOyBpZgotCQkgKiAoZWxlbWVudCAhPSBudWxsKSB7IGV4dGVuc2libGVFbGVtZW50VGFibGUucHV0KGVsZW1lbnQsIGVsZW1lbnQpOyB9IH0gfQotCQkgKiAKLQkJICogZm9yIChJdGVyYXRvciBpID0gY2hpbGRMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgeyBPYmplY3QgbyA9Ci0JCSAqIGkubmV4dCgpOyBpZiAoZXh0ZW5zaWJsZUVsZW1lbnRUYWJsZS5nZXQobykgPT0gbnVsbCkgeyBpLnJlbW92ZSgpOyB9IH0gfQotCQkgKiByZXR1cm4gY2hpbGRMaXN0OwotCQkgKi8KLQkJcmV0dXJuIGV4dGVuc2libGVFbGVtZW50LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQl9Ci0KLQkvKgotCSAqIFJldHVybnMgYSBsaXN0IG9mICdjaGlsZHJlbicgb2YgdGhlIGdpdmVuIG9iamVjdCBtb2RlbCAoV1NETEVsZW1lbnQpLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgTGlzdCBnZXRNb2RlbEdyYXBoVmlld0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKLQkJTGlzdCBjaGlsZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0JCQlQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgb2JqZWN0OwotCQkJY2hpbGRMaXN0LmFkZEFsbChwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE9wZXJhdGlvbikgewotCQkJT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9iamVjdDsKLQotCQkJaWYgKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0JCQkJY2hpbGRMaXN0LmFkZChvcGVyYXRpb24uZ2V0RUlucHV0KCkpOwotCQkJfQotCQkJaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotCQkJCWNoaWxkTGlzdC5hZGQob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7Ci0JCQl9Ci0JCQljaGlsZExpc3QuYWRkQWxsKG9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKSk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKE1lc3NhZ2VSZWZlcmVuY2UpIG9iamVjdDsKLQkJCWNoaWxkTGlzdC5hZGQobWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpKTsKLQkJfQotCi0JCXJldHVybiBjaGlsZExpc3Q7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlVVJJRm9yU2NoZW1hKFN0cmluZyB1cmkpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlVUkwgdXJsID0gbmV3IFVSTCh1cmkpOwotCQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSB1cmwub3BlblN0cmVhbSgpOwotCQkJcmVzdWx0ID0gV1NETEVkaXRvclV0aWwuZ2V0VGFyZ2V0TmFtZXNwYWNlVVJJRm9yU2NoZW1hKGlucHV0U3RyZWFtKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZVVSSUZvclNjaGVtYShJbnB1dFN0cmVhbSBpbnB1dCkgewotCQlUYXJnZXROYW1lc3BhY2VVUklDb250ZW50SGFuZGxlciBoYW5kbGVyID0gbmV3IFRhcmdldE5hbWVzcGFjZVVSSUNvbnRlbnRIYW5kbGVyKCk7Ci0JCUNsYXNzTG9hZGVyIHByZXZDbGFzc0xvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFdTRExFZGl0b3JVdGlsLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwotCQl0cnkgewotCQkJWE1MUmVhZGVyIHJlYWRlciA9IG9yZy54bWwuc2F4LmhlbHBlcnMuWE1MUmVhZGVyRmFjdG9yeS5jcmVhdGVYTUxSZWFkZXIoKTsKLQkJCXJlYWRlci5zZXRDb250ZW50SGFuZGxlcihoYW5kbGVyKTsKLQkJCXJlYWRlci5wYXJzZShuZXcgSW5wdXRTb3VyY2UoaW5wdXQpKTsKLQkJfQotCQljYXRjaCAoU3RvcFBhcnNlRXhjZXB0aW9uIGUpIHsKLQkJCS8vIHRoaXMgaXMgYSBub3JtYWwgZXhjZXB0aW9uIHRvIHN0b3AgcGFyc2luZyBlYXJseSwKLQkJCS8vIHdoZW4gaW5mbyBpcyBmb3VuZCwgc28gd2UgY2FuIHNhZmVseSBpZ25vcmUKLQkJfQotCQljYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLQkJCS8vIFRPRE86IHRoZXNlIHNob3VsZCBiZSBsb2dnZWQsIGJ1dCB0aGUgb2J2aW91cyBjaG9pY2UsCi0JCQkvLyBXU0RMRWRpdG9yUGx1Z2luLmxvZ01lc3NhZ2UobWVzc2FnZSkgaXMgYW4gZW1weSBpbXBsZW1lbnRhdGlvbiwKLQkJCS8vIHNvLCBmb3Igbm93LCB3ZSdsbCBhdCBsZWFzdCBwcmludCBvdXQuCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBsb2dnZWQsIGJ1dCB0aGUgb2J2aW91cyBjaG9pY2UsCi0JCQkvLyBXU0RMRWRpdG9yUGx1Z2luLmxvZ01lc3NhZ2UobWVzc2FnZSkgaXMgYW4gZW1weSBpbXBsZW1lbnRhdGlvbiwKLQkJCS8vIHNvLCBmb3Igbm93LCB3ZSdsbCBhdCBsZWFzdCBwcmludCBvdXQuCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIocHJldkNsYXNzTG9hZGVyKTsKLQkJfQotCQlyZXR1cm4gaGFuZGxlci50YXJnZXROYW1lc3BhY2VVUkk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBpcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRoYXQgaXMgdXNlZCB0byBzdG9wIHBhcnNpbmcgd2hlbiByZXF1aXJlZAotCSAqIGluZm9ybWF0aW9uIGlzIGZvdW5kLgotCSAqLwotCXN0YXRpYyBjbGFzcyBTdG9wUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyBvcmcueG1sLnNheC5TQVhFeGNlcHRpb24gewotCQlzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLQkJLyoqCi0JCSAqIENvbnN0cnVjdG9yIFN0b3BQYXJzZUV4Y2VwdGlvbi4KLQkJICovCi0JCVN0b3BQYXJzZUV4Y2VwdGlvbigpIHsKLQkJCXN1cGVyKCJ0YXJnZXRuYW1lc3BhY2UgZm91bmQsIG5vIG5lZWQgdG8gY29udGludWUgdGhlIHBhcnNlIik7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFRhcmdldE5hbWVzcGFjZVVSSUNvbnRlbnRIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIgewotCi0KLQkJcHVibGljIFN0cmluZyB0YXJnZXROYW1lc3BhY2VVUkk7Ci0KLQkJcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCWlmIChsb2NhbE5hbWUuZXF1YWxzKCJzY2hlbWEiKSB8fCBsb2NhbE5hbWUuZXF1YWxzKCJkZWZpbml0aW9ucyIpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCXsKLQkJCQlpbnQgbkF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbkF0dHJpYnV0ZXM7IGkrKykgewotCQkJCQlpZiAoYXR0cmlidXRlcy5nZXRMb2NhbE5hbWUoaSkuZXF1YWxzKCJ0YXJnZXROYW1lc3BhY2UiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQl7Ci0JCQkJCQl0YXJnZXROYW1lc3BhY2VVUkkgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKGkpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl0aHJvdyBuZXcgU3RvcFBhcnNlRXhjZXB0aW9uKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExSZXNvdXJjZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4YzE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMTW9kZWxMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYURpcmVjdGl2ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMUmVzb3VyY2VVdGlsCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZWxvYWREaXJlY3RpdmVzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFJlc291cmNlIHJvb3RSZXNvdXJjZSA9IGRlZmluaXRpb24uZVJlc291cmNlKCk7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSByb290UmVzb3VyY2UuZ2V0UmVzb3VyY2VTZXQoKTsKLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSkgaS5uZXh0KCk7Ci0gICAgICBpZiAocmVzb3VyY2UgIT0gcm9vdFJlc291cmNlKQotICAgICAgewotICAgICAgICAvLyAgVE9ETy4uLiBjb25zaWRlciB1bmxvYWRpbmcgdGhlIHJlc291cmNlcyAgCQotICAgICAgICAvLyAgcmVzb3VyY2UudW5sb2FkKCk7CQkgICAgICAKLSAgICAgICAgaS5yZW1vdmUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgUmVsb2FkRGlyZWN0aXZlVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlbG9hZERpcmVjdGl2ZVZpc2l0b3IoKTsKLSAgICB2aXNpdG9yLnZpc2l0RGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHN0YXRpYyBjbGFzcyBSZWxvYWREaXJlY3RpdmVWaXNpdG9yCi0gIHsKLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW1wb3J0KEltcG9ydCB0aGVJbXBvcnQpCi0gICAgewotICAgICAgLy8gZm9yY2UgdGhlIGltcG9ydCB0byByZWxvYWQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdCh0aGVJbXBvcnQpOwotICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgKChXU0RMRWxlbWVudEltcGwpdGhlSW1wb3J0KS5lbGVtZW50Q2hhbmdlZChlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdFhTRFNjaGVtYURpcmVjdGl2ZShYU0RTY2hlbWFEaXJlY3RpdmUgZGlyZWN0aXZlKQotICAgIHsKLSAgICAgIC8vIGZvcmNlIHRoZSBzY2hlbWEgZGlyZWN0aXZlIHRvIHJlbG9hZAotICAgICAgRWxlbWVudCBlbGVtZW50ID0gZGlyZWN0aXZlLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRpcmVjdGl2ZS5lbGVtZW50QXR0cmlidXRlc0NoYW5nZWQoZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgdmlzaXRJbXBvcnQoKEltcG9ydCkgaS5uZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICAgICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICAgIHsKLQotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgT2JqZWN0IG8gPSBpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIG87Ci0gICAgICAgICAgICAgIGlmIChlLmdldFNjaGVtYSgpICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2aXNpdFNjaGVtYShlLmdldFNjaGVtYSgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpID0gc2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFhTRFNjaGVtYURpcmVjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgIHZpc2l0WFNEU2NoZW1hRGlyZWN0aXZlKChYU0RTY2hlbWFEaXJlY3RpdmUpIG8pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIEludGVybmFsVVJJUmVzb2x2ZXIgaW1wbGVtZW50cyBXU0RMTW9kZWxMb2NhdG9yCi0gIHsKLSAgICAvL0lkUmVzb2x2ZXIgaWRSZXNvbHZlciA9IG5ldyBJZFJlc29sdmVySW1wbChudWxsLCB0cnVlKTsKLSAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyIHJlc29sdmVyID0gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKTsKLQotICAgIEludGVybmFsVVJJUmVzb2x2ZXIoKQotICAgIHsgIAotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gICAgewotICAgICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSByZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbmFtZXNwYWNlLCBsb2NhdGlvbik7Ci0KLSAgICAgIC8vIGhlcmUncyBhbiB1Z2x5IGhhY2suLi4gUGxhdGZvcm0ucmVzb2x2ZSgpIHJldHVybnMgV2luZG93cyBmaWxlcyB3aXRoIHRoZSBwYXR0ZXJuICJmaWxlOkQ6L2hlbGxvLnhzZCIKLSAgICAgIC8vIGJ1dCBFTUYncyBVUkkgY2xhc3MgZXhwZWN0cyBhIHBhdHRlcm4gbGlrZSB0aGlzICJmaWxlOi8vL0Q6L2hlbGxvLnhzZCIKLSAgICAgIC8vICAgICAgICAKLSAgICAgIGlmIChyZXNvbHZlZExvY2F0aW9uICE9IG51bGwpCi0gICAgICB7Ci0JCVN0cmluZyBmaWxlUHJvdG9jb2wgPSAiZmlsZToiOyAgICAgIAkgLy8kTk9OLU5MUy0xJAotICAgICAgICBpZiAocmVzb2x2ZWRMb2NhdGlvbi5zdGFydHNXaXRoKGZpbGVQcm90b2NvbCkgJiYgIXJlc29sdmVkTG9jYXRpb24uc3RhcnRzV2l0aChmaWxlUHJvdG9jb2wgKyAiLyIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICByZXNvbHZlZExvY2F0aW9uID0gcmVzb2x2ZWRMb2NhdGlvbi5zdWJzdHJpbmcoZmlsZVByb3RvY29sLmxlbmd0aCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXNvbHZlZExvY2F0aW9uID0gVVJJSGVscGVyLmFkZEltcGxpZWRGaWxlUHJvdG9jb2wocmVzb2x2ZWRMb2NhdGlvbik7Ci0gICAgICB9Ci0gICAgICAvLyBlbmQgdWdseSBoYWNrCi0gICAgICByZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFNldENvbXBvbmVudEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExTZXRDb21wb25lbnRIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiNDcyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFNldENvbXBvbmVudEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFkZEltcG9ydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFkZFdTSVNjaGVtYUltcG9ydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFDb250ZW50OwotCi1wdWJsaWMgY2xhc3MgV1NETFNldENvbXBvbmVudEhlbHBlciB7Ci0gICAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gICAgcHJpdmF0ZSBJRmlsZSBjdXJyZW50SUZpbGU7Ci0gICAgCi0gICAgcHVibGljIFdTRExTZXRDb21wb25lbnRIZWxwZXIoSUZpbGUgaUZpbGUsIERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgICAgICBjdXJyZW50SUZpbGUgPSBpRmlsZTsKLSAgICAgICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0V1NETENvbXBvbmVudChXU0RMRWxlbWVudCBpbnB1dEVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSwgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjKSB7Ci0gICAgICAgIGFkZEltcG9ydElmTmVjZXNzYXJ5KHNwZWMpOwotICAgICAgICBTdHJpbmcgY29tcG9uZW50T2JqZWN0ID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHNwZWMpOwotCi0gICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQgd3NkbEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgd3NkbEVsZW1lbnQuc2V0QXR0cmlidXRlKHByb3BlcnR5LCBjb21wb25lbnRPYmplY3QpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldFhTRFR5cGVDb21wb25lbnQoUGFydCBwYXJ0LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgaWYgKHNwZWMuZ2V0TmFtZSgpICE9IG51bGwgJiYgc3BlYy5nZXRRdWFsaWZpZXIoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhZGRJbXBvcnRJZk5lY2Vzc2FyeShzcGVjKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgY29tcG9uZW50T2JqZWN0ID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHNwZWMpOwotICAgICAgICAKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UoKFBhcnQpIHBhcnQsIHRydWUsIGNvbXBvbmVudE9iamVjdCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldFhTREVsZW1lbnRDb21wb25lbnQoUGFydCBwYXJ0LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgYWRkSW1wb3J0SWZOZWNlc3Nhcnkoc3BlYyk7Ci0gICAgICAgIFN0cmluZyBjb21wb25lbnRPYmplY3QgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoc3BlYyk7Ci0gICAgICAgIAotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZSgoUGFydCkgcGFydCwgZmFsc2UsIGNvbXBvbmVudE9iamVjdCk7Ci0gICAgfQotICAgIAotICAgIC8qCi0gICAgICogUmV0dXJuIHRoZSBwcmVmaXhlZCBjb21wb25lbnQgbmFtZSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuCi0gICAgICogQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgc3BlYy5nZXROYW1lKCk7Ci0gICAgICAgIExpc3QgcHJlZml4ZXMgPSBnZXRQcmVmaXhlcyhkZWZpbml0aW9uLCBzcGVjLmdldFF1YWxpZmllcigpKTsKLSAgICAgICAgaWYgKHByZWZpeGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIG5hbWUgPSBwcmVmaXhlcy5nZXQoMCkgKyAiOiIgKyBuYW1lOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0gICAgICAgICAKLSAgICAgICAgICAKLSAgICBwcml2YXRlIExpc3QgZ2V0UHJlZml4ZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlKSB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdGhlTmFtZXNwYWNlID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICAgICAgaWYgKHRoZU5hbWVzcGFjZSAhPSBudWxsICYmIHRoZU5hbWVzcGFjZS5lcXVhbHMobmFtZXNwYWNlKSkgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGFkZEltcG9ydElmTmVjZXNzYXJ5KENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBib29sZWFuIGZvdW5kTWF0Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGl0c2VsZgotICAgICAgICBQYXRoIGN1cnJlbnRGaWxlTG9jYXRpb24gPSBuZXcgUGF0aChjdXJyZW50SUZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKHNwZWMuZ2V0RmlsZSgpID09IG51bGwgfHwgY3VycmVudEZpbGVMb2NhdGlvbi5lcXVhbHMoc3BlYy5nZXRGaWxlKCkuZ2V0TG9jYXRpb24oKSkpIHsKLSAgICAgICAgCS8vIGlmIHRoZSBDb21wb25lbnRTcGVjaWZpY2F0aW9uJ3MgZ2V0RmlsZSgpIHJldHVybnMgbnVsbCwgZm9yZ2V0IGFib3V0IGFkZGluZyBuZWNlc3NhcnkgaW1wb3J0cwotICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIHJlZ3VsYXIgSW1wb3J0cwotICAgICAgICBpZiAoIWZvdW5kTWF0Y2gpIHsKLSAgICAgICAgICAgIEl0ZXJhdG9yIGltcG9ydHNJdCA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSAoaW1wb3J0c0l0Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBpbXBvcnRMb2NhdGlvbiA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgSW1wb3J0SW1wbCBpbXBvcnRJdGVtID0gKEltcG9ydEltcGwpIGltcG9ydHNJdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaW1wb3J0SXRlbS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaW1wb3J0SXRlbS5nZXRFU2NoZW1hKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gaW1wb3J0SXRlbS5nZXRFU2NoZW1hKCk7Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydExvY2F0aW9uID0gZ2V0Tm9ybWFsaXplZExvY2F0aW9uKHNjaGVtYS5nZXRTY2hlbWFMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbiA9IGltcG9ydEl0ZW0uZ2V0RURlZmluaXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0TG9jYXRpb24gPSBnZXROb3JtYWxpemVkTG9jYXRpb24oaW1wb3J0RGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpKTsgCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgIAotICAgICAgICAgICAgICAgIGlmIChzcGVjLmdldEZpbGUoKS5nZXRMb2NhdGlvbigpLmVxdWFscyhuZXcgUGF0aChpbXBvcnRMb2NhdGlvbikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlubGluZSBTY2hlbWFzCi0gICAgICAgIGlmICghZm91bmRNYXRjaCkgewotICAgICAgICAgICAgTGlzdCBpbXBvcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSAhPSBudWxsKSB7Ci0JICAgICAgICAgICAgSXRlcmF0b3IgaXQgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCSAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkgICAgICAgICAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWVFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0JICAgICAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBlZUVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0JICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPT0gbnVsbCB8fCBzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKCIiKSkgeyAgICAgICAgICAgICAgICAgICAgIC8vJE5PTi1OTFMtMSQKLQkgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGNvbnRlbnRzID0gc2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsKLQkgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb250ZW50cy5oYXNOZXh0KCkpIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICBYU0RTY2hlbWFDb250ZW50IGNvbnRlbnQgPSAoWFNEU2NoZW1hQ29udGVudCkgY29udGVudHMubmV4dCgpOwotCSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgWFNESW1wb3J0KSB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydHMuYWRkKGNvbnRlbnQpOyAgICAgICAgICAgICAKLQkgICAgICAgICAgICAgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEl0ZXJhdG9yIGltcG9ydEl0ID0gaW1wb3J0cy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGltcG9ydEl0Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIFhTREltcG9ydCBpbXBvcnRJdGVtID0gKFhTREltcG9ydCkgaW1wb3J0SXQubmV4dCgpOwotICAgICAgICAgICAgICAgIFhTRFNjaGVtYSByZXNvbHZlZFNjaGVtYSA9IGltcG9ydEl0ZW0uZ2V0UmVzb2x2ZWRTY2hlbWEoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVzb2x2ZWRTdHJpbmcgPSByZXNvbHZlZFNjaGVtYS5nZXRTY2hlbWFMb2NhdGlvbigpOwotICAgICAgICAgICAgICAgIFN0cmluZyBpbXBvcnRMb2NhdGlvbiA9IGdldE5vcm1hbGl6ZWRMb2NhdGlvbihyZXNvbHZlZFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCkuZXF1YWxzKG5ldyBQYXRoKGltcG9ydExvY2F0aW9uKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFmb3VuZE1hdGNoKSB7Ci0gICAgICAgICAgICBib29sZWFuIHdzaVN0eWxlSW1wb3J0ID0gaXNYU0RTY2hlbWFGaWxlKHNwZWMpOwotICAgICAgICAgICAgaWYgKHdzaVN0eWxlSW1wb3J0KSB7Ci0gICAgICAgICAgICAgICAgQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24oZGVmaW5pdGlvbiwgc3BlYy5nZXRRdWFsaWZpZXIoKSwgInhzZCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhdGlvbiA9IFVSSUhlbHBlci5nZXRSZWxhdGl2ZVVSSShzcGVjLmdldEZpbGUoKS5nZXRMb2NhdGlvbigpLCBjdXJyZW50SUZpbGUuZ2V0TG9jYXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uIGFkZEltcG9ydCA9IG5ldyBBZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24oZGVmaW5pdGlvbiwgc3BlYy5nZXRRdWFsaWZpZXIoKSwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgIGFkZEltcG9ydC5ydW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFN0cmluZyBuZXdTZWxlY3RlZEZpbGVMb2MgPSBzcGVjLmdldEZpbGUoKS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudEZpbGVMb2MgPSBnZXROb3JtYWxpemVkTG9jYXRpb24oZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVsYXRpdmVMb2MgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVSZWxhdGl2ZVVSSShuZXdTZWxlY3RlZEZpbGVMb2MsIGN1cnJlbnRGaWxlTG9jLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvcmcudzNjLmRvbS5FbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24pOwotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHNwZWMuZ2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQWRkSW1wb3J0QWN0aW9uIGFkZEltcG9ydEFjdGlvbiA9IG5ldyBBZGRJbXBvcnRBY3Rpb24obnVsbCwgZGVmaW5pdGlvbiwgZGVmaW5pdGlvbkVsZW1lbnQsIHByZWZpeCwgbmFtZXNwYWNlLCByZWxhdGl2ZUxvYyk7Ci0gICAgICAgICAgICAgICAgYWRkSW1wb3J0QWN0aW9uLnJ1bigpOyAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyB1bmlxdWVQcmVmaXggPSBnZXRVbmlxdWVQcmVmaXgoZGVmaW5pdGlvbiwgcHJlZml4KTsgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyB1bmlxdWVQcmVmaXgsIG5hbWVzcGFjZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAvKgotICAgICAqIFRyeSB0byBkZXRlcm1pbmUgaWYgdGhlIHBhc3NlZCBpbiBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHJlZmVycyB0bwotICAgICAqIGFuIFhTRCBvciBXU0RMIGZpbGUuICBJZiBpdCdzIGFuIFhTRCwgcmV0dXJuIHRydWUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzWFNEU2NoZW1hRmlsZShDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotICAgICAgICBpbnQgcGVyaW9kSW5kZXggPSBmaWxlTG9jYXRpb24ubGFzdEluZGV4T2YoIi4iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAKLSAgICAgICAgaWYgKHBlcmlvZEluZGV4ID4gMCkgewotICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVMb2NhdGlvbi5zdWJzdHJpbmcocGVyaW9kSW5kZXggKyAxKTsKLSAgICAgICAgICAgIGlmIChleHRlbnNpb24uZXF1YWxzSWdub3JlQ2FzZSgieHNkIikpIHsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIFN0cmluZyBnZXRVbmlxdWVQcmVmaXgoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgaW5pdFByZWZpeCkgewotICAgICAgU3RyaW5nIHVuaXF1ZVByZWZpeDsKLSAgICAgIE1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQotICAgICAgaWYgKGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKGluaXRQcmVmaXgpID09IG51bGwpIHsKLSAgICAgICAgdW5pcXVlUHJlZml4ID0gaW5pdFByZWZpeDsKLSAgICAgIH0KLSAgICAgIGVsc2Ugey8vIGlmIHVzZWQsIHRoZW4gdHJ5IHRvIGNyZWF0ZSBhIHVuaXF1ZSBvbmUKLSAgICAgICAgU3RyaW5nIHRlbXBQcmVmaXggPSBpbml0UHJlZml4OwotICAgICAgICBpbnQgaSA9IDE7Ci0gICAgICAgIHdoaWxlKG1hcC5jb250YWluc0tleSh0ZW1wUHJlZml4ICsgaSkpIHsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgdW5pcXVlUHJlZml4ID0gdGVtcFByZWZpeCArIGk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdW5pcXVlUHJlZml4OwotICAgIH0gCi0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0Tm9ybWFsaXplZExvY2F0aW9uKFN0cmluZyBsb2NhdGlvbikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotICAgICAgICAgICAgVVJMIHJlc29sdmVkVVJMID0gRmlsZUxvY2F0b3IucmVzb2x2ZSh1cmwpOwotICAgICAgICAgICAgbG9jYXRpb24gPSByZXNvbHZlZFVSTC5nZXRQYXRoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbG9jYXRpb247IAotICAgICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRENvbXBvbmVudEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRENvbXBvbmVudEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODczZjhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RDb21wb25lbnRIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFhTRFNjaGVtYUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24uY29tbWFuZHMuQWRkWFNERWxlbWVudENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb3NpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotCi0vKioKLSAqIElucHV0IGNyZWF0ZUlucHV0KE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBzdHlsZSkgLS0tIGNyZWF0ZSBkZWZhdWx0IG1lc3NhZ2UvcGFydC9ldGMuCi0gKiBPYmplY3QgY3JlYXRlSW5wdXRQYXJhbWV0ZXIoT3BlcmF0aW9uIG9wZXJhdGlvbiwgSW5wdXQgaW5wdXQsIFN0eWxlIHN0eWxlKSAtLQotICogCi0gKiBDb21tYW5kIGdldENyZWF0ZUlucHV0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBJbnB1dCBpbnB1dCwgU3R5bGUgc3R5bGUpCi0gKiAKLSAqIE1lc3NhZ2UvcGFydC9FbGVtZW50Ci0gKiBNZXNzYWdlL3BhcnQvRWxlbWVudC9zZXF1ZW5jZS9FbGVtZW50Ci0gKiAoeCkgTWVzc2FnZS9wYXJ0Ci0gKi8KLXB1YmxpYyBjbGFzcyBYU0RDb21wb25lbnRIZWxwZXIgewotCS8qCi0JICogQ3JlYXRlIGFuIFhTREVsZW1lbnQgd2l0aCB0eXBlIGFub255bW91cy4gIFNldCB0aGUgZ2l2ZW4gcGFydCB0byByZWZlcmVuY2UgdGhlIG5ld2x5IGNyZWF0ZWQKLQkgKiBYU0RFbGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZUFub255bW91c1hTREVsZW1lbnREZWZpbml0aW9uKFN0cmluZyBiYXNlTmFtZSwgUGFydCBwYXJ0KSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiBhbm9uRWxlbWVudCA9IGNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGJhc2VOYW1lLCBwYXJ0KTsKLQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIG5ld0Fub24gPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaXRpb24oKTsKLQkJWFNEUGFydGljbGUgbmV3WFNEUGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQlYU0RNb2RlbEdyb3VwIG5ld1hTRE1vZGVsR3JvdXAgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RNb2RlbEdyb3VwKCk7Ci0JCW5ld1hTRE1vZGVsR3JvdXAuc2V0Q29tcG9zaXRvcihYU0RDb21wb3NpdG9yLlNFUVVFTkNFX0xJVEVSQUwpOwotCQkKLQkJYW5vbkVsZW1lbnQuc2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24obmV3QW5vbik7Ci0JCW5ld1hTRFBhcnRpY2xlLnNldENvbnRlbnQobmV3WFNETW9kZWxHcm91cCk7Ci0JCW5ld0Fub24uc2V0Q29udGVudChuZXdYU0RQYXJ0aWNsZSk7Ci0JCQotCQlyZXR1cm4gYW5vbkVsZW1lbnQ7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgYmFzZU5hbWUsIE9iamVjdCBjb250ZXh0KSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gbnVsbDsKLQkJCi0JCWlmIChjb250ZXh0IGluc3RhbmNlb2YgUGFydCkgewotCQkJQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQoZGVmaW5pdGlvbiwgIiIpOyAvLyROT04tTkxTLTEkCi0JCQkKLQkJCS8vIEZpbmQgYSB1bmlxdWUgbmFtZQotCQkJWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGNvbW1hbmQuZ2V0U2NoZW1hKCk7Ci0JCQlTdHJpbmcgbmFtZSA9IE5hbWVVdGlsLmdldFhTREVsZW1lbnROYW1lKGJhc2VOYW1lLCB4c2RTY2hlbWEpOwotCQkJY29tbWFuZC5ydW4obmFtZSk7Ci0JCQkvLyBUaGUgJ3dvcmthcm91bmQnIGJlbG93IGlzIGNhdXNpbmcgbWUgdG8gaGFuZy4uLi4uICBUaGUgbGF0ZXN0IFdUUCBpcyBuZWVkZWQuCi0vLwkJCXhzZEVsZW1lbnQgPSB4c2RTY2hlbWEucmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihuYW1lKTsKLQkJCXhzZEVsZW1lbnQgPSBjb21tYW5kLmdldFhTREVsZW1lbnQoKTsKLQkJfQotCQllbHNlIGlmIChjb250ZXh0IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXApIGNvbnRleHQ7Ci0JCQlYU0RQYXJ0aWNsZSBuZXdQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCQlTdHJpbmcgbmFtZSA9IE5hbWVVdGlsLmdldFhTREVsZW1lbnROYW1lKGJhc2VOYW1lLCBtb2RlbEdyb3VwKTsKLQkJCQotCQkJQWRkWFNERWxlbWVudENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RFbGVtZW50Q29tbWFuZChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9YTUxfU0NIRU1BX0VMRU1FTlQsIG1vZGVsR3JvdXApOwotCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCQl4c2RFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgY29tbWFuZC5nZXRBZGRlZENvbXBvbmVudCgpOwotCQkJeHNkRWxlbWVudC5zZXROYW1lKG5hbWUpOwotCQkJeHNkRWxlbWVudC5zZXRUeXBlRGVmaW5pdGlvbihnZXRYU0RTdHJpbmdUeXBlKG1vZGVsR3JvdXApKTsKLQkJCQotCQkJbmV3UGFydGljbGUuc2V0Q29udGVudCh4c2RFbGVtZW50KTsKLQkJCW1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5hZGQobmV3UGFydGljbGUpOwotCQl9Ci0JCWVsc2UgewotCQkJQWRkWFNERWxlbWVudENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RFbGVtZW50Q29tbWFuZCgpOwotCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCQl4c2RFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgY29tbWFuZC5nZXRBZGRlZENvbXBvbmVudCgpOwotCQkJeHNkRWxlbWVudC5zZXROYW1lKGJhc2VOYW1lKTsKLQkJfQotCQkKLQkJcmV0dXJuIHhzZEVsZW1lbnQ7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKFhTREVsZW1lbnREZWNsYXJhdGlvbiBwYXJlbnQsIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjaGlsZCkgewotCQlpZiAocGFyZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHsKLQkJCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBhbm9uVHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHBhcmVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpOwotCQkJaWYgKGFub25UeXBlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIGFub25UeXBlLmdldENvbnRlbnQoKTsKLQkJCQlpZiAocGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCQkvLyBDcmVhdGUgWFNEUGFydGljbGUKLQkJCQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXApIHBhcnRpY2xlLmdldENvbnRlbnQoKTsKLQkJCQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChtb2RlbEdyb3VwLCBjaGlsZCk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBDcmVhdGUgWFNETW9kZWxHcm91cCAtLSBYU0RQYXJ0aWNsZQotCQkJCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKHBhcnRpY2xlLCBjaGlsZCk7Ci0JCQkJfQkJCQkgIAotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gQ3JlYXRlIFhTRFBhcnRpY2xlIC0tPiBYU0RNb2RlbEdyb3VwIC0tPiBYU0RQYXJ0aWNsZQotCQkJCVhTRFBhcnRpY2xlIG5ld1BhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJCQlhbm9uVHlwZS5zZXRDb250ZW50KG5ld1BhcnRpY2xlKTsKLQkJCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKG5ld1BhcnRpY2xlLCBjaGlsZCk7Ci0JCQl9CQkJICAKLQkJfQotCQllbHNlIHsKLQkJCS8vIENyZWF0ZSBBbm9ueW1vdXMgVHlwZSAtLT4gWFNEUGFydGljbGUgLS0+IFhTRE1vZGVsR3JvdXAgLS0+IFhTRFBhcnRpY2xlCi0JCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gbmV3QW5vblR5cGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaXRpb24oKTsKLQkJCXBhcmVudC5zZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbihuZXdBbm9uVHlwZSk7Ci0JCQkKLQkJCVhTRFBhcnRpY2xlIG5ld1BhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJCW5ld0Fub25UeXBlLnNldENvbnRlbnQobmV3UGFydGljbGUpOwotCQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChuZXdQYXJ0aWNsZSwgY2hpbGQpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKFhTRFBhcnRpY2xlIHBhcnRpY2xlLCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY2hpbGQpIHsKLQkJWFNETW9kZWxHcm91cCBuZXdYU0RNb2RlbEdyb3VwID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNETW9kZWxHcm91cCgpOwotCQluZXdYU0RNb2RlbEdyb3VwLnNldENvbXBvc2l0b3IoWFNEQ29tcG9zaXRvci5TRVFVRU5DRV9MSVRFUkFMKTsJCQkJCSAgCi0JCXBhcnRpY2xlLnNldENvbnRlbnQobmV3WFNETW9kZWxHcm91cCk7Ci0JCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAobmV3WFNETW9kZWxHcm91cCwgY2hpbGQpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAsIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjaGlsZCkgewotCQkvLyBDcmVhdGUgWFNEUGFydGljbGUKLQkJWFNEUGFydGljbGUgbmV3UGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQluZXdQYXJ0aWNsZS5zZXRDb250ZW50KGNoaWxkKTsKLQkJbW9kZWxHcm91cC5nZXRDb250ZW50cygpLmFkZChuZXdQYXJ0aWNsZSk7Ci0JfQotCQotCS8qCi0JICogUmV0dXJuIGl0J3MgWFNETW9kZWxHcm91cC4gIElmIG9uZSBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIG9uZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNETW9kZWxHcm91cCBnZXRYU0RNb2RlbEdyb3VwKFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50LCBEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gbnVsbDsKLQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGFub25UeXBlID0gbnVsbDsKLQkJCi0JCWlmICh4c2RFbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHsKLQkJCWFub25UeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgeHNkRWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpOwotCQl9CQkgIAotCQllbHNlIHsKLQkJCS8vIENyZWF0ZSBBbm9ueW1vdXMgVHlwZQotCQkJYW5vblR5cGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaXRpb24oKTsKLQkJCWFub25UeXBlLnNldE5hbWUoIk5ld0NvbXBsZXhUeXBlTmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCQlnZXRYU0RTY2hlbWEoZGVmaW5pdGlvbikuZ2V0Q29udGVudHMoKS5hZGQoYW5vblR5cGUpOwotCQkJeHNkRWxlbWVudC5zZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbihhbm9uVHlwZSk7Ci0JCX0KLQkJCi0JCWlmIChhbm9uVHlwZSAhPSBudWxsKSB7Ci0JCQltb2RlbEdyb3VwID0gZ2V0WFNETW9kZWxHcm91cChhbm9uVHlwZSk7Ci0JCX0KLQkJCi0JCXJldHVybiBtb2RlbEdyb3VwOwotCX0KLQkKLQkvKgotCSAqIFJldHVybiBpdCdzIFhTRE1vZGVsR3JvdXAuICBJZiBvbmUgZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBvbmUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRE1vZGVsR3JvdXAgZ2V0WFNETW9kZWxHcm91cChYU0RDb21wbGV4VHlwZURlZmluaXRpb24geHNkQ29tcGxleFR5cGUpIHsKLQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gbnVsbDsKLQkJWFNEUGFydGljbGUgcGFydGljbGUgPSBudWxsOwotCQkvLyBDaGVjayBmb3IgWFNEUGFydGljbGUKLQkJaWYgKHhzZENvbXBsZXhUeXBlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQlwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgeHNkQ29tcGxleFR5cGUuZ2V0Q29udGVudCgpOwotCQl9Ci0JCWVsc2UgewotCQkJcGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQkJbW9kZWxHcm91cCA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRE1vZGVsR3JvdXAoKTsKLQkJCW1vZGVsR3JvdXAuc2V0Q29tcG9zaXRvcihYU0RDb21wb3NpdG9yLlNFUVVFTkNFX0xJVEVSQUwpOwkJCSAgCi0JCQlwYXJ0aWNsZS5zZXRDb250ZW50KG1vZGVsR3JvdXApOwotCQkJeHNkQ29tcGxleFR5cGUuc2V0Q29udGVudChwYXJ0aWNsZSk7Ci0JCX0KLQkJCi0JCS8vIENoZWNrIGZvciBYU0RNb2RlbEdyb3VwCi0JCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQltb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXApIHBhcnRpY2xlLmdldENvbnRlbnQoKTsKLQkJfQotCQllbHNlIHsKLQkJCW1vZGVsR3JvdXAgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RNb2RlbEdyb3VwKCk7Ci0JCQltb2RlbEdyb3VwLnNldENvbXBvc2l0b3IoWFNEQ29tcG9zaXRvci5TRVFVRU5DRV9MSVRFUkFMKTsJCQkgIAotCQkJcGFydGljbGUuc2V0Q29udGVudChtb2RlbEdyb3VwKTsKLQkJfQotCQkKLQkJcmV0dXJuIG1vZGVsR3JvdXA7Ci0JfQotCQotCS8qCi0JICogCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbmlpb24oU3RyaW5nIGNvbXBsZXhUeXBlTmFtZSwgUGFydCBwYXJ0KSB7Ci0JCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBuZXdDb21wbGV4VHlwZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotCQlYU0RQYXJ0aWNsZSBuZXdYU0RQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCVhTRE1vZGVsR3JvdXAgbmV3WFNETW9kZWxHcm91cCA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRE1vZGVsR3JvdXAoKTsKLQkJbmV3WFNETW9kZWxHcm91cC5zZXRDb21wb3NpdG9yKFhTRENvbXBvc2l0b3IuU0VRVUVOQ0VfTElURVJBTCk7Ci0JCQotCQluZXdDb21wbGV4VHlwZS5zZXROYW1lKGNvbXBsZXhUeXBlTmFtZSk7Ci0JCW5ld0NvbXBsZXhUeXBlLnNldENvbnRlbnQobmV3WFNEUGFydGljbGUpOwotCQluZXdYU0RQYXJ0aWNsZS5zZXRDb250ZW50KG5ld1hTRE1vZGVsR3JvdXApOwotCQlnZXRYU0RTY2hlbWEocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpLmdldENvbnRlbnRzKCkuYWRkKG5ld0NvbXBsZXhUeXBlKTsKLQkJCi0JCXJldHVybiBuZXdDb21wbGV4VHlwZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHBhcmVudCwgWFNERWxlbWVudERlY2xhcmF0aW9uIGNoaWxkKSB7Ci0JCWlmIChwYXJlbnQuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCVhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBwYXJlbnQuZ2V0Q29udGVudCgpOwotCQkJaWYgKHBhcnRpY2xlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJCQkvLyBDcmVhdGUgWFNEUGFydGljbGUKLQkJCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFydGljbGUuZ2V0Q29udGVudCgpOwotCQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAobW9kZWxHcm91cCwgY2hpbGQpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gQ3JlYXRlIFhTRE1vZGVsR3JvdXAgLS0gWFNEUGFydGljbGUKLQkJCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKHBhcnRpY2xlLCBjaGlsZCk7Ci0JCQl9CQkJCSAgCi0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBDcmVhdGUgWFNEUGFydGljbGUgLS0+IFhTRE1vZGVsR3JvdXAgLS0+IFhTRFBhcnRpY2xlCi0JCQlYU0RQYXJ0aWNsZSBuZXdQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCQlwYXJlbnQuc2V0Q29udGVudChuZXdQYXJ0aWNsZSk7Ci0JCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKG5ld1BhcnRpY2xlLCBjaGlsZCk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBSZXR1cm4gdGhlIGlubGluZSBYU0RTY2hlbWEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgV1NETC4KLQkgKiBMb29rIGZvciB0aGUgaW5saW5lIFhTRFNjaGVtYSB3aXRoIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgV1NETC4KLQkgKiBJZiB0aGlzIGlubGluZSBYU0RTY2hlbWEgZG9lcyBub3QgZXhpc3RzLCBjcmVhdGUgaXQuCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RTY2hlbWEgZ2V0WFNEU2NoZW1hKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlYU0RTY2hlbWEgc2NoZW1hID0gbnVsbDsKLQkJU3RyaW5nIHdzZGxUYXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkKLQkJVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLQkJaWYgKHR5cGVzICE9IG51bGwpIHsKLQkJCQotCQkJSXRlcmF0b3IgZWVJdCA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoZWVJdC5oYXNOZXh0KCkpIHsKLQkJCQlPYmplY3QgZWVFbGVtZW50ID0gZWVJdC5uZXh0KCk7Ci0JCQkJaWYgKGVlRWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSB7Ci0JCQkJCVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUVsZW1lbnQ7Ci0JCQkJCWlmIChlZS5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKSAhPSBudWxsICYmCi0JCQkJCQllZS5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKS5lcXVhbHMod3NkbFRhcmdldE5hbWVzcGFjZSkpIHsKLQkJCQkJCXNjaGVtYSA9IGVlLmdldFNjaGVtYSgpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChzY2hlbWEgPT0gbnVsbCkgewotCQkJLy8gV2UgbmVlZCB0byBjcmVhdGUgdGhlIHNjaGVtYQotCQkJQWRkWFNEU2NoZW1hQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTRFNjaGVtYUNvbW1hbmQoZGVmaW5pdGlvbik7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWVFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQlzY2hlbWEgPSBlZUVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzY2hlbWE7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIGdldFhTRFN0cmluZ1R5cGUoWFNEQ29tcG9uZW50IGNvbXBvbmVudCkgewotCQlYU0RTY2hlbWEgc2NoZW1hID0gY29tcG9uZW50LmdldFNjaGVtYSgpOwotCQlyZXR1cm4gc2NoZW1hLmdldFNjaGVtYUZvclNjaGVtYSgpLnJlc29sdmVTaW1wbGVUeXBlRGVmaW5pdGlvbigic3RyaW5nIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmOTEzYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRFR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuSVR5cGVTeXN0ZW1Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RJbXBvcnRJbXBsOwotCi1wdWJsaWMgY2xhc3MgWFNEVHlwZVN5c3RlbVByb3ZpZGVyIGltcGxlbWVudHMgSVR5cGVTeXN0ZW1Qcm92aWRlcgotewotICAgIHB1YmxpYyBMaXN0IGdldFByZWZpeGVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdGhlTmFtZXNwYWNlID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICAgICAgaWYgKHRoZU5hbWVzcGFjZSAhPSBudWxsICYmIHRoZU5hbWVzcGFjZS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaXN0LmFkZChwcmVmaXgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0IGdldFByZWZpeGVkTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRQcmVmaXhlcyhkZWZpbml0aW9uLCBuYW1lc3BhY2UpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4Lmxlbmd0aCgpID4gMCkgPyBwcmVmaXggKyAiOiIgKyBsb2NhbE5hbWUgOiBsb2NhbE5hbWU7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIGxpc3QuYWRkKG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZE5hbWVkQ29tcG9uZW50cyhEZWZpbml0aW9uIGRlZmluaXRpb24sIExpc3QgbGlzdCwgTGlzdCBuYW1lZENvbXBvbmVudHMpCi0gICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBuYW1lZENvbXBvbmVudHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQgPSAoWFNETmFtZWRDb21wb25lbnQpIGkubmV4dCgpOwotICAgICAgICAgICAgbGlzdC5hZGRBbGwoZ2V0UHJlZml4ZWROYW1lcyhkZWZpbml0aW9uLCBjb21wb25lbnQuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGNvbXBvbmVudC5nZXROYW1lKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXRXU0lTdHlsZUltcG9ydHMoWFNEU2NoZW1hIHhzZFNjaGVtYSkKLSAgICB7Ci0gICAgICAgIGlmICh4c2RTY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0geHNkU2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhTRFNjaGVtYUNvbnRlbnQgY29udGVudCA9IChYU0RTY2hlbWFDb250ZW50KSBpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFhTREltcG9ydEltcGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYU0RJbXBvcnRJbXBsIHhzZEltcG9ydCA9IChYU0RJbXBvcnRJbXBsKSBjb250ZW50OwotCQkJCQlYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSl4c2RJbXBvcnQuZ2V0UmVzb2x2ZWRTY2hlbWEoKTsJCQkJCQotCQkJCQlpZiAoc2NoZW1hID09IG51bGwpCi0JCQkJCXsKLQkJCQkJCXNjaGVtYSA9IHhzZEltcG9ydC5pbXBvcnRTY2hlbWEoKTsKLQkJCQkJfSAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBpbnQgdHlwZU5hbWVDYXRlZ29yeSkKLSAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0eXBlTmFtZUNhdGVnb3J5ID09IElUeXBlU3lzdGVtUHJvdmlkZXIuQlVJTFRfSU5fVFlQRSkgewotICAgICAgICAJbGlzdCA9IGdldEJ1aWx0SW5UeXBlTmFtZXNMaXN0KGRlZmluaXRpb24pOyAgICAgICAgCQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAJVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgICAgICAJaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJZm9yIChJdGVyYXRvciBpID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgCQl7Ci0gICAgICAgIAkJCU9iamVjdCBvID0gaS5uZXh0KCk7Ci0gICAgICAgIAkJCWlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgIAkJCXsKLSAgICAgICAgCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBvKS5nZXRTY2hlbWEoKTsKLSAgICAgICAgCQkJCWlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgCQkJCXsKLSAgICAgICAgCQkJCQlpbml0V1NJU3R5bGVJbXBvcnRzKHNjaGVtYSk7Ci0gICAgICAgIAkJCQkJYWRkTmFtZWRDb21wb25lbnRzKGRlZmluaXRpb24sIGxpc3QsIHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgIAkJCQl9Ci0gICAgICAgIAkJCX0KLSAgICAgICAgCQl9Ci0gICAgICAgIAl9Ci0gICAgICAgIAotICAgICAgICAJZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgCXsKLSAgICAgICAgCQlJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydCkgaS5uZXh0KCk7Ci0gICAgICAgIAkJWFNEU2NoZW1hIHNjaGVtYSA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0gICAgICAgIAkJaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAJCXsKLSAgICAgICAgCQkJYWRkTmFtZWRDb21wb25lbnRzKGRlZmluaXRpb24sIGxpc3QsIHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgIAkJfQotICAgICAgICAJfQotICAgICAgICAJbGlzdC5hZGRBbGwoZ2V0QnVpbHRJblR5cGVOYW1lc0xpc3QoZGVmaW5pdGlvbikpOwotICAgICAgICB9Ci0gICAgICAgIAotCQlyZXR1cm4gbGlzdDsgICAgICAgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFhTRFNjaGVtYSBzY2hlbWEsIGludCB0eXBlTmFtZUNhdGVnb3J5KQotICAgIHsKLSAgICAgICAgTGlzdCBrZWVwVHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIEl0ZXJhdG9yIHR5cGVJdGVyYXRvciA9IHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgICAvLyBGaWx0ZXIgb3V0IHVud2FudGVkIFR5cGVzCi0gICAgICAgIGlmICh0eXBlTmFtZUNhdGVnb3J5ID09IElUeXBlU3lzdGVtUHJvdmlkZXIuVVNFUl9ERUZJTkVEX0NPTVBMRVhfVFlQRSkgewotICAgICAgICAJd2hpbGUgKHR5cGVJdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgICAgCQlPYmplY3QgdHlwZSA9IHR5cGVJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIAkJaWYgKHR5cGUgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHsKLSAgICAgICAgCQkJa2VlcFR5cGVzLmFkZCh0eXBlKTsKLSAgICAgICAgCQl9Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZU5hbWVDYXRlZ29yeSA9PSBJVHlwZVN5c3RlbVByb3ZpZGVyLlVTRVJfREVGSU5FRF9TSU1QTEVfVFlQRSkgewotICAgICAgICAJd2hpbGUgKHR5cGVJdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgICAgCQlPYmplY3QgdHlwZSA9IHR5cGVJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIAkJaWYgKHR5cGUgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikgewotICAgICAgICAJCQlrZWVwVHlwZXMuYWRkKHR5cGUpOwotICAgICAgICAJCX0KLSAgICAgICAgCX0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy9hZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwga2VlcFR5cGVzKTsgICAgICAgIAotICAgICAgICAvL3JldHVybiBsaXN0OwotICAgICAgICByZXR1cm4ga2VlcFR5cGVzOwotICAgIH0KLQotICAgIHB1YmxpYyBqYXZhLnV0aWwuTGlzdCBnZXRCdWlsdEluVHlwZU5hbWVzTGlzdChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gICAgewotICAgICAgICBMaXN0IGl0ZW1zID0gbmV3IEFycmF5TGlzdCgpOwotLy8gICAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgICBMaXN0IHByZWZpeGVzID0gZ2V0UHJlZml4ZXMoZGVmaW5pdGlvbiwgV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSSk7Ci0vLyAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHByZWZpeGVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLS8vICAgICAgICAgICAgewotLy8gICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGkubmV4dCgpOwotLy8gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBYU0RET01IZWxwZXIuZGF0YVR5cGUubGVuZ3RoOyBqKyspCi0vLyAgICAgICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IFhTRERPTUhlbHBlci5kYXRhVHlwZVtqXVswXTsKLS8vICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChwcmVmaXggIT0gbnVsbCAmJiBwcmVmaXgubGVuZ3RoKCkgPiAwKSA/IHByZWZpeCArICI6IiArIGxvY2FsTmFtZSA6IGxvY2FsTmFtZTsKLS8vICAgICAgICAgICAgICAgICAgICBpdGVtcy5hZGQobmFtZSk7Ci0vLyAgICAgICAgICAgICAgICB9Ci0vLyAgICAgICAgICAgIH0KLS8vICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpdGVtczsKLSAgICB9Ci0gICAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgICAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgbykuZ2V0U2NoZW1hKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotCQkJCQkJaW5pdFdTSVN0eWxlSW1wb3J0cyhzY2hlbWEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkTmFtZWRDb21wb25lbnRzKGRlZmluaXRpb24sIGxpc3QsIHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydCkgaS5uZXh0KCk7Ci0gICAgICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLSAgICAgICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwgc2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotICAgIHB1YmxpYyBpbnQgZ2V0Q2F0ZWdvcnlGb3JUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvQmFzZVJlbmFtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9CYXNlUmVuYW1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTllYjVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9CYXNlUmVuYW1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZVJlbmFtZXIgZXh0ZW5kcyBXU0RMVmlzaXRvcgotewotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld05hbWU7Ci0gIHByb3RlY3RlZCBXU0RMRWxlbWVudCBnbG9iYWxDb21wb25lbnQ7Ci0gIAotICBwdWJsaWMgQmFzZVJlbmFtZXIoV1NETEVsZW1lbnQgZ2xvYmFsQ29tcG9uZW50LCBTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIHN1cGVyKGdsb2JhbENvbXBvbmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIHRoaXMuZ2xvYmFsQ29tcG9uZW50ID0gZ2xvYmFsQ29tcG9uZW50OwotICAgIHRoaXMubmV3TmFtZSA9IG5ld05hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmV3UU5hbWUoKQotICB7Ci0gICAgU3RyaW5nIHFOYW1lID0gbnVsbDsKLSAgICBpZiAobmV3TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdsb2JhbENvbXBvbmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBxTmFtZSA9IGRlZmluaXRpb24uZ2V0UHJlZml4KGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgcU5hbWUgKz0gIjoiICsgbmV3TmFtZTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcU5hbWUgPSBuZXdOYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcU5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9CaW5kaW5nUmVuYW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0JpbmRpbmdSZW5hbWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMTQ4NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0JpbmRpbmdSZW5hbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nUmVuYW1lciBleHRlbmRzIEJhc2VSZW5hbWVyCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQmluZGluZ1JlbmFtZXIuCi0gICAqIEBwYXJhbSBnbG9iYWxDb21wb25lbnQKLSAgICogQHBhcmFtIG5ld05hbWUKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nUmVuYW1lcihXU0RMRWxlbWVudCBnbG9iYWxDb21wb25lbnQsIFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgc3VwZXIoZ2xvYmFsQ29tcG9uZW50LCBuZXdOYW1lKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIHN1cGVyLnZpc2l0UG9ydChwb3J0KTsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0gICAgaWYgKGdsb2JhbENvbXBvbmVudC5lcXVhbHMoYmluZGluZykpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBvcnQpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImJpbmRpbmciLCBnZXROZXdRTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9NZXNzYWdlUmVuYW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL01lc3NhZ2VSZW5hbWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NWI5NWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL01lc3NhZ2VSZW5hbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VSZW5hbWVyIGV4dGVuZHMgQmFzZVJlbmFtZXIKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBNZXNzYWdlUmVuYW1lci4KLSAgICogQHBhcmFtIGdsb2JhbENvbXBvbmVudAotICAgKiBAcGFyYW0gbmV3TmFtZQotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VSZW5hbWVyKFdTRExFbGVtZW50IGdsb2JhbENvbXBvbmVudCwgU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBzdXBlcihnbG9iYWxDb21wb25lbnQsIG5ld05hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIHN1cGVyLnZpc2l0SW5wdXQoaW5wdXQpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgaWYgKGdsb2JhbENvbXBvbmVudC5lcXVhbHMobWVzc2FnZSkpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGlucHV0KTsKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJtZXNzYWdlIiwgZ2V0TmV3UU5hbWUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdE91dHB1dChPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgc3VwZXIudmlzaXRPdXRwdXQob3V0cHV0KTsKLSAgICBpZiAoZ2xvYmFsQ29tcG9uZW50LmVxdWFscyhvdXRwdXQpKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvdXRwdXQpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2UiLCBnZXROZXdRTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBzdXBlci52aXNpdEZhdWx0KGZhdWx0KTsKLSAgICBpZiAoZ2xvYmFsQ29tcG9uZW50LmVxdWFscyhmYXVsdCkpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGZhdWx0KTsKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJtZXNzYWdlIiwgZ2V0TmV3UU5hbWUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9Qb3J0VHlwZVJlbmFtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9Qb3J0VHlwZVJlbmFtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk1OWM4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvUG9ydFR5cGVSZW5hbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUG9ydFR5cGVSZW5hbWVyIGV4dGVuZHMgQmFzZVJlbmFtZXIKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBQb3J0VHlwZVJlbmFtZXIuCi0gICAqIEBwYXJhbSBnbG9iYWxDb21wb25lbnQKLSAgICogQHBhcmFtIG5ld05hbWUKLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVJlbmFtZXIoV1NETEVsZW1lbnQgZ2xvYmFsQ29tcG9uZW50LCBTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIHN1cGVyKGdsb2JhbENvbXBvbmVudCwgbmV3TmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gYmluZGluZy5nZXRFUG9ydFR5cGUoKTsKLQotICAgIGlmIChnbG9iYWxDb21wb25lbnQuZXF1YWxzKHBvcnRUeXBlKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoYmluZGluZyk7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsIGdldE5ld1FOYW1lKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvV1NETFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9XU0RMVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODY4Mjc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9XU0RMVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgV1NETFZpc2l0b3IKLXsKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQotCi0gIHB1YmxpYyBXU0RMVmlzaXRvcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0gIAotICAKLSAgcHVibGljIHZvaWQgdmlzaXREZWZpbml0aW9uKCkKLSAgewotICAgIHZpc2l0QmluZGluZ3MoKTsKLSAgICB2aXNpdE1lc3NhZ2VzKCk7Ci0gICAgdmlzaXRQb3J0VHlwZXMoKTsKLSAgICB2aXNpdFNlcnZpY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEJpbmRpbmdzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdE1lc3NhZ2VzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0TWVzc2FnZShtZXNzYWdlKTsgCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFBvcnRUeXBlcygpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFNlcnZpY2VzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVTZXJ2aWNlcygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0U2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0UG9ydFR5cGUocG9ydFR5cGUpOwotICAgIH0KLQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsgCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0T3BlcmF0aW9uKG9wZXJhdGlvbik7IAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLS8vICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLS8vICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsgICAgICAgICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICAKLSAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdElucHV0KGlucHV0KTsKLSAgICB9Ci0gICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0T3V0cHV0KG91dHB1dCk7Ci0gICAgfQotICAgIAotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmIChmYXVsdCAhPSBudWxsKQotICAgICAgewotICAgICAgICB2aXNpdEZhdWx0KGZhdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0UGFydChQYXJ0IHBhcnQpCi0gIHsKLS8vICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRQYXJ0KHBhcnQpOwotICAgIH0KLSAgfSAgCi0KLSAgcHVibGljIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYXVsdC5nZXRFTWVzc2FnZSgpOwotICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0UG9ydChQb3J0IHBvcnQpCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0UG9ydChwb3J0KTsKLSAgICB9Ci0gICAgCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yRm9yUGFyYW1ldGVycy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yRm9yUGFyYW1ldGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk5ZWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9XU0RMVmlzaXRvckZvclBhcmFtZXRlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvci5XMTFYU0RWaXNpdG9yRm9yRmllbGRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMVmlzaXRvckZvclBhcmFtZXRlcnMKLXsKLSAgICBwdWJsaWMgTGlzdCBjb25jcmV0ZUNvbXBvbmVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgcHVibGljIExpc3QgdGhpbmdzVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TWVzc2FnZVJlZmVyZW5jZShNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UpCi0gICAgewotICAgICAgaWYgKG1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICB2aXNpdE1lc3NhZ2UobWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgdmlzaXRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAvLyBmb3Igbm93IHdlIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBwYXJ0IGlzIHRoZSBvbmx5IG9uZSB0aGF0Ci0gICAgICAvLyBzaG91bGQgYmUgdXNlZCB0byBkZWR1Y2UgdGhlIHBhcmFtZXRlcnMKLSAgICAgIC8vIFRPRE8gKGNzKSB3ZSBuZWVkIHRvIHJldmlzdCB0aGlzLCBtdWx0aXBsZSBwYXJ0cyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQKLSAgICAgIC8vCi0gICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkKG1lc3NhZ2UpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgeyAKLSAgICAgICAgICAgICAgdmlzaXRQYXJ0KChQYXJ0KWkubmV4dCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgICB7Ci0gICAgICB0aGluZ3NUb0xpc3RlblRvLmFkZChwYXJ0KTsgICAgICAKLSAgICAgIGlmIChwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0WFNERWxlbWVudERlY2xhcmF0aW9uKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgLy8gaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBjb25jcmV0ZUNvbXBvbmVudHMuYWRkKHBhcnQpOwotICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgdmlzaXRYU0RFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVkKQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHRkID0gZWQuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgIGlmICh0ZCAhPSBudWxsKQotICAgICAgeyAgCi0gICAgICAgIGlmICh0ZC5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbmNyZXRlQ29tcG9uZW50cy5hZGQoZWQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRkIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gd2UncmUgZGVhbGluZyB3aXRoIGFuIGFub255bW91cyBsb2NhbGx5IGRlZmluZWQgdHlwZQotICAgICAgICAgIC8vIHNlIHdlIG5lZWQgdG8gdmlzaXQgaXQncyBjaGlsZHJlbgotICAgICAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkKGVkKTsKLSAgICAgICAgICB2aXNpdFhTRENvbXBsZXh0VHlwZURlZmluaXRpb24oKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgdGQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFhTRENvbXBsZXh0VHlwZURlZmluaXRpb24oWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHRkKQotICAgIHsKLSAgICAgIC8vIFRPRE8gKGNzKSByZXZpc2l0IHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSBmb3IgdGhlIFdTREwgZWRpdG9yIHRvIHJlZGlzcGxheQotICAgICAgLy8gdGhlICdGaWVsZHMnIChpbiBYU0QgZWRpdG9yIGxpbmdvKSBhcyBwYXJhbXRlcnMKLSAgICAgIC8vIHBlcmhhcHMgdGhlIFdTREwgRWRpdG9yIHNob3VsZCBzaW1wbHkgcmV1c2UgdGhlIFhTRCBFZGl0b3IncwotICAgICAgLy8gQ29tcGxleFR5cGUgZWRpdCBwYXJ0IHdoZW4gZGlzcGxheWluZyB0aGVzZSBzZWN0aW9ucz8KLSAgICAgIFcxMVhTRFZpc2l0b3JGb3JGaWVsZHMgZmllbGRWaXNpdG9yID0gbmV3IFcxMVhTRFZpc2l0b3JGb3JGaWVsZHMoKTsKLSAgICAgIGZpZWxkVmlzaXRvci52aXNpdENvbXBsZXhUeXBlRGVmaW5pdGlvbih0ZCk7Ci0gICAgICBjb25jcmV0ZUNvbXBvbmVudHMuYWRkQWxsKGZpZWxkVmlzaXRvci5nZXRDb25jcmV0ZUNvbXBvbmVudExpc3QoKSk7Ci0gICAgICB0aGluZ3NUb0xpc3RlblRvLmFkZEFsbChmaWVsZFZpc2l0b3IuZ2V0VGhpbmdzV2VOZWVkVG9MaXN0ZW5UbygpKTsKLSAgICB9Ci0gIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvQmluZGluZ1dpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0JpbmRpbmdXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyY2U5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvQmluZGluZ1dpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJpbmRpbmdHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm90b2NvbENvbXBvbmVudENvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdXaXphcmQgZXh0ZW5kcyBXaXphcmQKLXsKLSAgcHJvdGVjdGVkIEJpbmRpbmdHZW5lcmF0b3IgYmluZGluZ0dlbmVyYXRvcjsKLSAgcHJvdGVjdGVkIEJpbmRpbmdXaXphcmRPcHRpb25zUGFnZSBzcGVjaWZ5QmluZGluZ1BhZ2U7Ci0KLSAgcHJvdGVjdGVkIERvY3VtZW50IGRvY3VtZW50OwotICBwcm90ZWN0ZWQgaW50IGtpbmQ7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9ORVdfQklORElORyA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtJTkRfUkVHRU5FUkFURV9CSU5ESU5HID0gMjsKLQotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB3aGVuIGFyZSBjcmVhdGluZyBhIGJyYW5kIG5ldyBCaW5kaW5nCi0gICAqLwotICBwdWJsaWMgQmluZGluZ1dpemFyZChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzKGRlZmluaXRpb24sIG51bGwsIEtJTkRfTkVXX0JJTkRJTkcpOwotICB9Ci0KLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB3aGVuIGFyZSBjcmVhdGluZyBhIGJyYW5kIG5ldyBCaW5kaW5nCi0gICAqLwotICBwdWJsaWMgQmluZGluZ1dpemFyZChEZWZpbml0aW9uIGRlZmluaXRpb24sIERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgdGhpcyhkZWZpbml0aW9uLCBudWxsLCBLSU5EX05FV19CSU5ESU5HKTsKLSAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgd2hlbiB0aGVyZSBpcyBhbiBleGlzdGluZyBCaW5kaW5nIHdlIHdpc2ggdG8gbW9kaWZ5L3JlZ2VuZXJhdGUKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nV2l6YXJkKERlZmluaXRpb24gZGVmaW5pdGlvbiwgQmluZGluZyBiaW5kaW5nLCBpbnQga2luZCkKLSAgewotICAgIHN1cGVyKCk7Ci0JdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLmtpbmQgPSBraW5kOwkKLQliaW5kaW5nR2VuZXJhdG9yID0gbmV3IEJpbmRpbmdHZW5lcmF0b3IoZGVmaW5pdGlvbiwgYmluZGluZyk7Ci0KLSAgICBzZXRXaW5kb3dUaXRsZShNZXNzYWdlcy5fVUlfQklORElOR19XSVpBUkQpOyAvLyROT04tTkxTLTEkCi0gICAgLy9zZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoV1NETEVkaXRvclBsdWdpbi5jbGFzcywgImljb25zL05ld1hNTC5naWYiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRCaW5kaW5nTmFtZShTdHJpbmcgYmluZGluZ05hbWUpCi0gIHsKLS8vICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGJpbmRpbmdOYW1lKTsKLSAgICBiaW5kaW5nR2VuZXJhdG9yLnNldE5hbWUoYmluZGluZ05hbWUpOwotLyoKLSAJLy8gQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGRlZmluaXRpb24uZ2V0QmluZGluZyhxbmFtZSk7Ci0JaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0JICBMaXN0IGVlTGlzdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgaWYgKGVlTGlzdC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWVMaXN0LmdldCgwKTsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGVlKTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb24gZXh0ZW5zaW9uID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeSgpLmdldEV4dGVuc2lvbkZvck5hbWVzcGFjZShuYW1lc3BhY2UpOwotCi0gICAgICAgICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJpbmRpbmdHZW5lcmF0b3Iuc2V0UHJvdG9jb2woZXh0ZW5zaW9uLmdldE5hbWUoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgICovCi0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQb3J0VHlwZU5hbWUoU3RyaW5nIHBvcnRUeXBlTmFtZSkKLSAgewotICAgIGJpbmRpbmdHZW5lcmF0b3Iuc2V0UmVmTmFtZShwb3J0VHlwZU5hbWUpOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdHZW5lcmF0b3IgZ2V0QmluZGluZ0dlbmVyYXRvcigpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0dlbmVyYXRvcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB3aXphcmQgc2V0dXAgaXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBzZXR1cCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkKLSAgewotICAgIHNwZWNpZnlCaW5kaW5nUGFnZSA9IG5ldyBCaW5kaW5nV2l6YXJkT3B0aW9uc1BhZ2UoKTsKLSAgICBhZGRQYWdlKHNwZWNpZnlCaW5kaW5nUGFnZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgewotICAJYm9vbGVhbiByZWNvcmRpbmdTdGFydGVkID0gZmFsc2U7Ci0gIAlpZiAoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkgPT0gbnVsbCB8fCAoZG9jdW1lbnQgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRDaGlsZE5vZGVzKCkuZ2V0TGVuZ3RoKCkgPT0gMCkpIHsKLSAgCQlyZWNvcmRpbmdTdGFydGVkID0gdHJ1ZTsKLSAgCQliZWdpblJlY29yZGluZygpOwotICAJCQotICAJCS8vIENyZWF0ZSB0aGUgRGVmaW5pdGlvbnMgZWxlbWVudCB3aXRoIHByb3BlciBuYW1lc3BhY2UKLSAgCSAgICBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLSAgCQlTdHJpbmcgY2hhclNldCA9IHByZWZlcmVuY2UuZ2V0U3RyaW5nKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLk9VVFBVVF9DT0RFU0VUKTsKLSAgCSAgICBpZiAoY2hhclNldCA9PSBudWxsIHx8IGNoYXJTZXQudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLSAgCSAgICB7Ci0gIAkgICAgCWNoYXJTZXQgPSAiVVRGLTgiOyAvLyROT04tTkxTLTEkCi0gIAkgICAgfQotICAJICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigieG1sIiwgInZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiIgKyBjaGFyU2V0ICsgIlwiIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAJCUVsZW1lbnQgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIndzZGw6ZGVmaW5pdGlvbnMiKTsgIAkJIC8vJE5PTi1OTFMtMSQKLSAgCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQotICAJCS8vIEFkZCB2YXJpb3VzIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGhlcmUuIAotICAJCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczpzb2FwIiwgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gIAkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnRucyIsIGdldERlZmF1bHROYW1lc3BhY2UoZGVmaW5pdGlvbikpOyAvLyROT04tTkxTLTEkCi0gIAkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOndzZGwiLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gIAkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgCQlyb290LnNldEF0dHJpYnV0ZSgibmFtZSIsIGdldEZpbGVOYW1lKGRlZmluaXRpb24pKTsgLy8kTk9OLU5MUy0xJAotICAJCXJvb3Quc2V0QXR0cmlidXRlKCJ0YXJnZXROYW1lc3BhY2UiLCBnZXREZWZhdWx0TmFtZXNwYWNlKGRlZmluaXRpb24pKTsgLy8kTk9OLU5MUy0xJAotCi0gIAkJZGVmaW5pdGlvbi5zZXRFbGVtZW50KHJvb3QpOwkKLSAgCX0KLSAgCQotCS8vIEdlbmVyYXRlL3JlLWdlbmVyYXRlIHRoZSBCaW5kaW5nCi0gICAgdHJ5Ci0gICAgewotCQlCaW5kaW5nIGJpbmRpbmcgPSBiaW5kaW5nR2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZygpOwotCQkKLSAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oYmluZGluZykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGZpbmFsbHkgewotICAgIAlpZiAocmVjb3JkaW5nU3RhcnRlZCkKLSAgICAJCWVuZFJlY29yZGluZygpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0TmFtZXNwYWNlKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFKTsgLy8kTk9OLU5MUy0xJAotICAgIGlmICghbmFtZXNwYWNlLmVuZHNXaXRoKCIvIikpIHsgLy8kTk9OLU5MUy0xJAotICAgIAluYW1lc3BhY2UgPSBuYW1lc3BhY2UuY29uY2F0KCIvIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgbmFtZXNwYWNlICs9IGdldEZpbGVOYW1lKGRlZmluaXRpb24pICsgIi8iOyAvLyROT04tTkxTLTEkCi0KLSAgICByZXR1cm4gbmFtZXNwYWNlOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRGaWxlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotICAJSVBhdGggZmlsZVBhdGggPSBuZXcgUGF0aChmaWxlTG9jYXRpb24pOwotICAJcmV0dXJuIGZpbGVQYXRoLnJlbW92ZUZpbGVFeHRlbnNpb24oKS5sYXN0U2VnbWVudCgpLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBiZWdpblJlY29yZGluZygpIHsKLSAgICBOb2RlIG5vZGUgPSBkb2N1bWVudDsKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgIHsKLSAgICAgICgoSURPTU5vZGUpbm9kZSkuZ2V0TW9kZWwoKS5iZWdpblJlY29yZGluZyh0aGlzLCBNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9CSU5ESU5HKTsgICAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZW5kUmVjb3JkaW5nKCkgewotICAgIE5vZGUgbm9kZSA9IGRvY3VtZW50OyAKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgIHsKLSAgICAgICgoSURPTU5vZGUpbm9kZSkuZ2V0TW9kZWwoKS5lbmRSZWNvcmRpbmcodGhpcyk7ICAKLSAgICB9Ci0gIH0KLQotICBjbGFzcyBCaW5kaW5nV2l6YXJkT3B0aW9uc1BhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlCi0gIHsKLSAgICBwcm90ZWN0ZWQgUHJvdG9jb2xDb21wb25lbnRDb250cm9sIHByb3RvY29sQ29tcG9uZW50Q29udHJvbDsKLQotICAgIHB1YmxpYyBCaW5kaW5nV2l6YXJkT3B0aW9uc1BhZ2UoKQotICAgIHsKLSAgICAgIHN1cGVyKCJTcGVjaWZ5QmluZGluZ1BhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2V0VGl0bGUoTWVzc2FnZXMuX1VJX1RJVExFX1NQRUNJRllfQklORElOR19ERVRBSUxTKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuX1VJX1NQRUNJRllfQklORElOR19ERVRBSUxTX0xBQkVMKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIHByb3RlY3RlZCBCaW5kaW5nR2VuZXJhdG9yIGdldEJpbmRpbmdHZW5lcmF0b3IoKQotICAgIHsKLSAgICAgIHJldHVybiAoKEJpbmRpbmdXaXphcmQpIGdldFdpemFyZCgpKS5nZXRCaW5kaW5nR2VuZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICAgIHsKLSAgICAgIFByb3RvY29sQ29tcG9uZW50Q29udHJvbCBwcm90b2NvbENvbXBvbmVudENvbnRyb2wgPSBuZXcgQmluZGluZ1Byb3RvY29sQ29tcG9uZW50Q29udHJvbChwYXJlbnQsIGJpbmRpbmdHZW5lcmF0b3IsIHRydWUpOwotICAgICAgcHJvdG9jb2xDb21wb25lbnRDb250cm9sLmluaXRGaWVsZHMoKTsKLSAgICAgIHNldENvbnRyb2wocHJvdG9jb2xDb21wb25lbnRDb250cm9sKTsKLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJvdG9jb2xDb21wb25lbnRDb250cm9sLCBBU0RFZGl0b3JDU0hlbHBJZHMuQklORElOR19XSVpBUkQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQmluZGluZ1Byb3RvY29sQ29tcG9uZW50Q29udHJvbCBleHRlbmRzIFByb3RvY29sQ29tcG9uZW50Q29udHJvbAotICB7Ci0gICAgcHVibGljIEJpbmRpbmdQcm90b2NvbENvbXBvbmVudENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCwgQmluZGluZ0dlbmVyYXRvciBnZW5lcmF0b3IpCi0gICAgewotICAgICAgdGhpcyhwYXJlbnQsIGdlbmVyYXRvciwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIEJpbmRpbmdQcm90b2NvbENvbXBvbmVudENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCwgQmluZGluZ0dlbmVyYXRvciBnZW5lcmF0b3IsIGJvb2xlYW4gc2hvd092ZXJ3cml0ZUJ1dHRvbikKLSAgICB7Ci0gICAgICBzdXBlcihwYXJlbnQsIGdlbmVyYXRvciwgc2hvd092ZXJ3cml0ZUJ1dHRvbik7Ci0KLSAgICAgIGlmIChnZW5lcmF0b3IuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvbXBvbmVudE5hbWVGaWVsZC5zZXRFZGl0YWJsZShmYWxzZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSZWZOYW1lTGFiZWxUZXh0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gTWVzc2FnZXMuX1VJX1BPUlRfVFlQRTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0IGdldFJlZk5hbWVzKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoZ2VuZXJhdG9yLmdldERlZmluaXRpb24oKSkuZ2V0UG9ydFR5cGVOYW1lcygpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdE5hbWUoKQotICAgIHsKLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9IGdlbmVyYXRvci5nZXROYW1lKCk7Ci0gICAgICByZXR1cm4gYmluZGluZ05hbWUgIT0gbnVsbCA/IGJpbmRpbmdOYW1lIDogTmFtZVV0aWwuYnVpbGRVbmlxdWVCaW5kaW5nTmFtZShnZW5lcmF0b3IuZ2V0RGVmaW5pdGlvbigpLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGNyZWF0ZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZShTdHJpbmcgcHJvdG9jb2wpCi0gICAgewotICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpLmdldEV4dGVuc2lvbkZvckxhYmVsKHByb3RvY29sKTsKLSAgICAgIGlmIChleHRlbnNpb24gIT0gbnVsbCkgewotICAgIAkgIHJldHVybiBleHRlbnNpb24uZ2V0QmluZGluZ0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSgpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExNmUxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsgIAotICAgICAgICAKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyB2b2lkIGluaXQoQmFzZUdlbmVyYXRvciBiYXNlR2VuZXJhdG9yKTsgICAgICAgICAgICAgCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KTsKLSAgcHVibGljIENvbXBvc2l0ZSBnZXRDb250cm9sKCk7Ci0gIAotICAvLyBUT0RPIGNhbiB0aGlzIGdvIGludG8gaW5pdD8KLSAgLy8KLSAgcHVibGljIHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlQXBwbGljYWJsZSgpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9IdHRwQmluZGluZ09wdGlvbnNQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvSHR0cEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTU4Njc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9IdHRwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuZ2VuZXJhdG9yLkhUVFBDb250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5CYXNlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgSHR0cEJpbmRpbmdPcHRpb25zUGFnZSBpbXBsZW1lbnRzIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSwgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBnZXRCdXR0b247Ci0gIHByb3RlY3RlZCBCdXR0b24gcG9zdEJ1dHRvbjsKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBjb250cm9sOwotICBwcm90ZWN0ZWQgQmFzZUdlbmVyYXRvciBnZW5lcmF0b3I7Ci0gIHByb3RlY3RlZCBIVFRQQ29udGVudEdlbmVyYXRvciBodHRwR2VuZXJhdG9yOwotCi0gIHB1YmxpYyBIdHRwQmluZGluZ09wdGlvbnNQYWdlKCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgewotICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotCWlmIChnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpIGluc3RhbmNlb2YgSFRUUENvbnRlbnRHZW5lcmF0b3IpIHsKLQkJaHR0cEdlbmVyYXRvciA9IChIVFRQQ29udGVudEdlbmVyYXRvcikgZ2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLQl9Ci0gIH0KLQotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIGNvbnRyb2wgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULlNFUEFSQVRPUiB8IFNXVC5IT1JJWk9OVEFMKTsKLSAgICBHcmlkRGF0YSBnZD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgCi0gICAgc2VwYXJhdG9yLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgTGFiZWwgb3B0aW9uc0hlYWRpbmcgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULk5PTkUpOwotICAgIG9wdGlvbnNIZWFkaW5nLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0hUVFBfQklORElOR19PUFRJT05TKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgZ2V0QnV0dG9uID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIGdldEJ1dHRvbi5zZXRUZXh0KCJIVFRQIEdFVCIpOyAvLyROT04tTkxTLTEkCi0gICAgZ2V0QnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLQotICAgIHBvc3RCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcG9zdEJ1dHRvbi5zZXRUZXh0KCJIVFRQIFBPU1QiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaWYgKGdlbmVyYXRvci5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZW5lcmF0b3IuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgZ2VuZXJhdG9yLmdldE5hbWUoKSk7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKHFuYW1lKTsKLSAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIGlmIChlZUxpc3Quc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUxpc3QuZ2V0KDApOwotICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChlZSk7Ci0gICAgICAgICAgU3RyaW5nIHZlcmIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidmVyYiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgaWYgKCJQT1NUIi5lcXVhbHModmVyYikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBnZXRCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAgIHBvc3RCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHBvc3RCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgZ2V0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCWNvbXB1dGVPcHRpb25zKCk7Ci0JCi0gICAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21wb3NpdGUgZ2V0Q29udHJvbCgpIHsKLQkgIHJldHVybiBjb250cm9sOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUFwcGxpY2FibGUoKQotICB7Ci0gIAlyZXR1cm4gdHJ1ZTsKLSAgfSAgCi0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLQljb21wdXRlT3B0aW9ucygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY29tcHV0ZU9wdGlvbnMoKQotICB7Ci0JICBpZiAoZ2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIEhUVFBDb250ZW50R2VuZXJhdG9yKSB7Ci0JCSAgSFRUUENvbnRlbnRHZW5lcmF0b3IgaHR0cEdlbmVyYXRvciA9IChIVFRQQ29udGVudEdlbmVyYXRvcikgZ2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLQotCQkgIGlmIChwb3N0QnV0dG9uLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkgIGh0dHBHZW5lcmF0b3Iuc2V0VmVyYihIVFRQQ29udGVudEdlbmVyYXRvci5WRVJCX1BPU1QpOwotCQkgIH0JICAKLQkJICBlbHNlIGlmIChnZXRCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgaHR0cEdlbmVyYXRvci5zZXRWZXJiKEhUVFBDb250ZW50R2VuZXJhdG9yLlZFUkJfR0VUKTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE9wdGlvbnNPbkdlbmVyYXRvcigpIHsKLQkgIGNvbXB1dGVPcHRpb25zKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL05hbWVzcGFjZVRhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmFtZXNwYWNlVGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0MzhjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmFtZXNwYWNlVGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2hlY2tib3hDZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDZWxsTW9kaWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRleHRDZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnZpZXdlcnMuTmF2aWdhYmxlVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRpYWxvZ3MuRWRpdE5hbWVzcGFjZUluZm9EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5kaWFsb2dzLlVwZGF0ZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudXRpbC5YTUxDb21tb25SZXNvdXJjZXM7Ci0gCi1wdWJsaWMgY2xhc3MgTmFtZXNwYWNlVGFibGUgZXh0ZW5kcyBDb21wb3NpdGUKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VSSSA9IFhNTENvbW1vblJlc291cmNlcy5nZXRJbnN0YW5jZSgpLmdldFN0cmluZygiX1VJX0xBQkVMX05BTUVTUEFDRV9OQU1FIik7ICAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWCA9IFhNTENvbW1vblJlc291cmNlcy5nZXRJbnN0YW5jZSgpLmdldFN0cmluZygiX1VJX0xBQkVMX1BSRUZJWCIpOyAgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNMVURFID0gTWVzc2FnZXMuX1VJX1RJVExFX1NFTEVDVDsgLy8kTk9OLU5MUy0xJAotICAgIAotICBwcm90ZWN0ZWQgTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJvdGVjdGVkIExpc3QgY2hlY2tlZExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByb3RlY3RlZCBOYW1lc3BhY2VOYXZpZ2FibGVUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsgICAgCi0gIHByb3RlY3RlZCBCdXR0b24gYWRkQnV0dG9uOwotCi0gIHByb3RlY3RlZCBOYW1lc3BhY2VJbmZvVGFibGVMYWJlbFByb3ZpZGVyIHByb3ZpZGVyOwotICBwcm90ZWN0ZWQgVXBkYXRlTGlzdGVuZXIgdXBkYXRlTGlzdGVuZXI7ICAgCi0gIHByb3RlY3RlZCBJUGF0aCByZXNvdXJjZUxvY2F0aW9uOyAgCi0gIHByb3RlY3RlZCBpbnQgdmlzaWJsZVJvd3MgPSAtMTsgIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBkdW1teVJvd3NSZW1vdmVkID0gZmFsc2U7Ci0gIFRhYmxlIHRhYmxlOwotCi0gIHB1YmxpYyBOYW1lc3BhY2VUYWJsZShDb21wb3NpdGUgcGFyZW50KQotICB7ICAKLSAgICB0aGlzKHBhcmVudCwgLTEsIC0xLCAtMSk7Ci0gIH0gICAgCi0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQsIGludCB2aXNpYmxlUm93cykKLSAgewotICAgIHRoaXMocGFyZW50LCAtMSwgLTEsIHZpc2libGVSb3dzKTsKLSAgfQotCi0gIHB1YmxpYyBOYW1lc3BhY2VUYWJsZShDb21wb3NpdGUgcGFyZW50LCBpbnQgd2lkdGhIaW50LCBpbnQgaGVpZ2h0SGludCkKLSAgewotICAgIHRoaXMocGFyZW50LCB3aWR0aEhpbnQsIGhlaWdodEhpbnQsIC0xKTsKLSAgfQotCi0gIHB1YmxpYyBOYW1lc3BhY2VUYWJsZShDb21wb3NpdGUgcGFyZW50LCBpbnQgd2lkdGhIaW50LCBpbnQgaGVpZ2h0SGludCwgaW50IHZpc2libGVSb3dzKQotICB7Ci0gICAgc3VwZXIocGFyZW50LCBTV1QuTk9ORSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgc2V0TGF5b3V0KGNyZWF0ZUdyaWRMYXlvdXQoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgR3JpZERhdGEgZmlsbEdEPSBuZXcgR3JpZERhdGEoKTsKLSAgICBmaWxsR0QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBmaWxsR0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBmaWxsR0QudmVydGljYWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZmlsbEdELmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlPSB0cnVlOwotICAgIAotICAgIHNldExheW91dERhdGEoZmlsbEdEKTsgICAgICAgICAgICAgCi0gICAgCi0gICAgR3JvdXAgbmFtZXNwYWNlSW5mb0dyb3VwID0gbmV3IEdyb3VwKHRoaXMsIFNXVC5OT05FKTsKLSAgICBuYW1lc3BhY2VJbmZvR3JvdXAuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRVNQQUNFX1VSSVNfVE9fQkVfSU5DTFVERUQpOyAvLyROT04tTkxTLTEkCi0gICAgbmFtZXNwYWNlSW5mb0dyb3VwLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsgICAKLSAgICBHcmlkRGF0YSBnZCA9IGZpbGxHRDsKLSAgICBpZiAod2lkdGhIaW50ICE9IC0xKQotICAgIHsKLSAgICAgIGdkLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICB9ICAgCi0gICAgaWYgKGhlaWdodEhpbnQgIT0gLTEpCi0gICAgewotICAgICAgZ2QuaGVpZ2h0SGludCA9IGhlaWdodEhpbnQ7Ci0gICAgfQotICAgIG5hbWVzcGFjZUluZm9Hcm91cC5zZXRMYXlvdXREYXRhKGdkKTsgCi0gICAgLy9Xb3JrYmVuY2hIZWxwLnNldEhlbHAobmFtZXNwYWNlSW5mb0dyb3VwLCBuZXcgQ29udHJvbENvbnRleHRDb21wdXRlcihuYW1lc3BhY2VJbmZvR3JvdXAsIFhNTEJ1aWxkZXJDb250ZXh0SWRzLlhNTENfTkFNRVNQQUNFX0dST1VQKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgIFN0cmluZ1tdIHRpdGxlQXJyYXkgPSB7SU5DTFVERSwgUFJFRklYLCBOQU1FU1BBQ0VfVVJJfTsKLQotICAgIHRhYmxlID0gbmV3IFRhYmxlKG5hbWVzcGFjZUluZm9Hcm91cCwgU1dULkZVTExfU0VMRUNUSU9OKTsKLSAgICB0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotICAgIAotICAgIHRhYmxlLnNldExheW91dERhdGEoZmlsbEdEKTsKLSAgICB0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0gICAgdGFibGUuYWRkTW91c2VMaXN0ZW5lcihuZXcgTW91c2VBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBtb3VzZURvd24oTW91c2VFdmVudCBlKQotICAgICAgewotICAgICAgICBUYWJsZUl0ZW0gaXRlbSA9IHRhYmxlLmdldEl0ZW0obmV3IFBvaW50KGUueCwgZS55KSk7Ci0gICAgICAgIGlmIChpdGVtICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3Qgb2JqID0gaXRlbS5nZXREYXRhKCk7Ci0gICAgICAgICAgaWYgKG9iaiAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRhYmxlRWxlbWVudCBob2xkZXIgPSAoVGFibGVFbGVtZW50KW9iajsKLSAgICAgICAgICAgIFRhYmxlQ29sdW1uIGNvbCA9IHRhYmxlLmdldENvbHVtbigwKTsKLSAgICAgICAgICAgIGlmIChlLnggPCBjb2wuZ2V0V2lkdGgoKSkgLy8gaWYgdGhlIHBvaW50IGZhbGxzIHdpdGhpbiB0aGUgU2VsZWN0IGNvbHVtbiB0aGVuIHBlcmZvcm0gY2hlY2svdW5jaGVjawotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFN0YXRlID0gaG9sZGVyLmdldENoZWNrZWQoKTsKLSAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5lcXVhbHMoInRydWUiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaG9sZGVyLnNldENoZWNrZWQoImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBjaGVja2VkTGlzdC5zZXQoaG9sZGVyLmdldEluZGV4KCksICJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIH0gIAotICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U3RhdGUuZXF1YWxzKCJmYWxzZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgidHJ1ZSIpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIGNoZWNrZWRMaXN0LnNldChob2xkZXIuZ2V0SW5kZXgoKSwgInRydWUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHRhYmxlVmlld2VyLnJlZnJlc2goKTsKLSAgICAgICAgICAgICAgaWYgKHVwZGF0ZUxpc3RlbmVyICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVMaXN0ZW5lci51cGRhdGVPY2N1cmVkKHRoaXMsIG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0YWJsZVZpZXdlciA9IG5ldyBOYW1lc3BhY2VOYXZpZ2FibGVUYWJsZVZpZXdlcih0YWJsZSk7Ci0gICAgcHJvdmlkZXIgPSBuZXcgTmFtZXNwYWNlSW5mb1RhYmxlTGFiZWxQcm92aWRlcigpOwotICAgIHRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihwcm92aWRlcik7ICAgCi0gICAgdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihwcm92aWRlcik7Ci0gICAgdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyh0aXRsZUFycmF5KTsKLSAgICB0YWJsZVZpZXdlci5zZXRDZWxsTW9kaWZpZXIobmV3IE5hbWVzcGFjZUluZm9DZWxsTW9kaWZpZXIoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgaW50W10gd2lkdGhBcnJheSA9IHsxMCwgMjAsIDUwfTsKLSAgICBUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsgIAotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aXRsZUFycmF5Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFRhYmxlQ29sdW1uIGNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgaSk7Ci0gICAgICBjb2x1bW4uc2V0VGV4dCh0aXRsZUFycmF5W2ldKTsKLSAgICAgIGNvbHVtbi5zZXRBbGlnbm1lbnQoU1dULkxFRlQpOwotICAgICAgbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEod2lkdGhBcnJheVtpXSwgdHJ1ZSkpOwotICAgIH0gICAgICAgICAKLSAgICB0aGlzLnZpc2libGVSb3dzID0gdmlzaWJsZVJvd3M7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aXNpYmxlUm93czsgaSsrKQotICAgIHsKLSAgICAgIFRhYmxlSXRlbSBpdGVtID0gbmV3IFRhYmxlSXRlbSh0YWJsZSwgU1dULk5PTkUpOyAKLSAgICAgIGl0ZW0uc2V0VGV4dCgiIyMjIyMjIyIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHRhYmxlLnNldExheW91dChsYXlvdXQpOyAgCi0gICAgCi0gICAgQ2VsbEVkaXRvcltdIGNlbGxFZGl0b3JzID0gbmV3IENlbGxFZGl0b3JbdGl0bGVBcnJheS5sZW5ndGhdOwotICAgIGNlbGxFZGl0b3JzWzBdID0gbmV3IE5hbWVzcGFjZUluZm9DaGVja2JveENlbGxFZGl0b3IodGFibGUpOwotICAgIGNlbGxFZGl0b3JzWzFdID0gbmV3IFRleHRDZWxsRWRpdG9yKHRhYmxlKTsKLSAgICB0YWJsZVZpZXdlci5zZXRDZWxsRWRpdG9ycyhjZWxsRWRpdG9ycyk7Ci0KLS8vICAgIGNyZWF0ZUJ1dHRvbnMobmFtZXNwYWNlSW5mb0dyb3VwKTsgICAgICAgICAgICAKLQotICAgIGluaXRpYWxpemUoKTsgICAgCi0gIH0gICAgCi0KLSAgcHVibGljIHZvaWQgc2V0VXBkYXRlTGlzdGVuZXIoVXBkYXRlTGlzdGVuZXIgdXBkYXRlTGlzdGVuZXIpCi0gIHsKLSAgICB0aGlzLnVwZGF0ZUxpc3RlbmVyID0gdXBkYXRlTGlzdGVuZXI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VJbmZvTGlzdChMaXN0IG5hbWVzcGFjZUluZm9MaXN0KQotICB7ICAgIAotICAgIHRoaXMubmFtZXNwYWNlSW5mb0xpc3QgPSBuYW1lc3BhY2VJbmZvTGlzdDsKLSAgICB1cGRhdGUoKTsKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgcHVibGljIExpc3QgZ2V0TmFtZXNwYWNlSW5mb0xpc3QoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZUluZm9MaXN0OwotICB9ICAKLQotICBwdWJsaWMgTGlzdCBnZXROYW1lc3BhY2VDaGVja2VkTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gY2hlY2tlZExpc3Q7Ci0gIH0gIAotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFByZWZpeCgpCi0gIHsKLSAgICByZXR1cm4gKChOYW1lc3BhY2VJbmZvKShuYW1lc3BhY2VJbmZvTGlzdC5nZXQoMCkpKS5wcmVmaXg7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUxvY2F0aW9uKElQYXRoIHJlc291cmNlTG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLnJlc291cmNlTG9jYXRpb24gPSByZXNvdXJjZUxvY2F0aW9uOwotICB9Ci0KLSAgcHVibGljIEdyaWRMYXlvdXQgY3JlYXRlR3JpZExheW91dCgpCi0gIHsKLSAgICBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGdyaWRMYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSAwOwotICAgIHJldHVybiBncmlkTGF5b3V0OwotICB9Ci0gICAgCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemUoKQotICB7Ci0gICAgLy8gYmV0dGVyIHdheSB0byBkbyB0aGlzLi4uLgotICAgIE5hbWVzcGFjZUluZm8gaW5mbzEgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm8xLnByZWZpeCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm8xLnVyaSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzEpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvMiA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzIucHJlZml4ID0gInNvYXAiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzIudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iOyAvLyROT04tTkxTLTEkCi0gICAgbmFtZXNwYWNlSW5mb0xpc3QuYWRkKGluZm8yKTsKLSAgICBjaGVja2VkTGlzdC5hZGQoImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBOYW1lc3BhY2VJbmZvIGluZm8zID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLSAgICBpbmZvMy5wcmVmaXggPSAiaHR0cCI7ICAvLyROT04tTkxTLTEkCi0gICAgaW5mbzMudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iOyAvLyROT04tTkxTLTEkCi0gICAgbmFtZXNwYWNlSW5mb0xpc3QuYWRkKGluZm8zKTsKLSAgICBjaGVja2VkTGlzdC5hZGQoImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBOYW1lc3BhY2VJbmZvIGluZm80ID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLSAgICBpbmZvNC5wcmVmaXggPSAibWltZSI7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvNC51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzQpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzUgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm81LnByZWZpeCA9ICJzb2FwZW5jIjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm81LnVyaSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzUpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzYgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm82LnByZWZpeCA9ICJzb2FwZW52IjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm82LnVyaSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzYpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzcgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm83LnByZWZpeCA9ICJ4c2kiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzcudXJpID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNyk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvOCA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzgucHJlZml4ID0gInhzZCI7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvOC51cmkgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0gICAgbmFtZXNwYWNlSW5mb0xpc3QuYWRkKGluZm84KTsKLSAgICBjaGVja2VkTGlzdC5hZGQoInRydWUiKTsgLy8kTk9OLU5MUy0xJAotICAgIHVwZGF0ZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9ucyhDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZERhdGEgaEZpbGxHRCA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGhGaWxsR0QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBoRmlsbEdELmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgCi0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoaEZpbGxHRCk7Ci0gICAgR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGdyaWRMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBncmlkTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOwotCi0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIAotICAgIEJ1dHRvbiBoaWRkZW5CdXR0b24gPSBuZXcgQnV0dG9uKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGhpZGRlbkJ1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBoaWRkZW5CdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgaGlkZGVuQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotCi0gICAgU2VsZWN0aW9uTGlzdGVuZXIgc2VsZWN0aW9uTGlzdGVuZXIgPSBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICAgIHsgIAotICAgICAgICBpZiAoZS53aWRnZXQgPT0gYWRkQnV0dG9uKQotICAgICAgICB7Ci0gICAgICAgICAgcGVyZm9ybU5ldygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsgICAKLSAgICAKLSAgICAvLyBjcmVhdGUgYSBjb21wb3NpdGUgdG8gaG9sZCB0aGUgdGhyZWUgYnV0dG9ucwotICAgIENvbXBvc2l0ZSBidXR0b25Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCi0gICAgYnV0dG9uQ29tcG9zaXRlLnNldExheW91dERhdGEoaEZpbGxHRCk7Ci0gICAgR3JpZExheW91dCBidXR0b25HcmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBidXR0b25HcmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIGJ1dHRvbkdyaWRMYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKLSAgICBidXR0b25Db21wb3NpdGUuc2V0TGF5b3V0KGJ1dHRvbkdyaWRMYXlvdXQpOwotCi0gICAgLy8gYWRkIHRoZSBOZXcgYnV0dG9uCi0gICAgLy8KLSAgICBnZCA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCi0gICAgYWRkQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25Db21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBhZGRCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERCk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ly9WaWV3VXRpbGl0eS5jcmVhdGVIb3Jpem9udGFsRmlsbCgpKTsKLSAgICBhZGRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoc2VsZWN0aW9uTGlzdGVuZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGVyZm9ybU5ldygpCi0gIHsKLSAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIEVkaXROYW1lc3BhY2VJbmZvRGlhbG9nIGRpYWxvZyA9IGludm9rZURpYWxvZyhYTUxDb21tb25SZXNvdXJjZXMuZ2V0SW5zdGFuY2UoKS5nZXRTdHJpbmcoIl9VSV9MQUJFTF9ORVdfTkFNRVNQQUNFX0lORk9STUFUSU9OIiksIGluZm8pOyAgLy8kTk9OLU5MUy0xJAotICAgIGlmIChkaWFsb2cuZ2V0UmV0dXJuQ29kZSgpID09IERpYWxvZy5PSykKLSAgICB7Ci0gICAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbyk7Ci0gICAgICBjaGVja2VkTGlzdC5hZGQoInRydWUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcGVyZm9ybURlbGF5ZWRVcGRhdGUoKTsKLSAgICB9Ci0gIH0gCi0gICAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIEVkaXROYW1lc3BhY2VJbmZvRGlhbG9nIGludm9rZURpYWxvZyhTdHJpbmcgdGl0bGUsIE5hbWVzcGFjZUluZm8gaW5mbykKLSAgewotICAgIFNoZWxsIHNoZWxsID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLSAgICBFZGl0TmFtZXNwYWNlSW5mb0RpYWxvZyBkaWFsb2cgPSBuZXcgRWRpdE5hbWVzcGFjZUluZm9EaWFsb2coc2hlbGwsIGluZm8pOwotICAgIGRpYWxvZy5jcmVhdGUoKTsKLSAgICBkaWFsb2cuZ2V0U2hlbGwoKS5zZXRUZXh0KHRpdGxlKTsKLSAgICBkaWFsb2cuc2V0QmxvY2tPbk9wZW4odHJ1ZSk7Ci0gICAgZGlhbG9nLnNldFJlc291cmNlTG9jYXRpb24ocmVzb3VyY2VMb2NhdGlvbik7Ci0gICAgZGlhbG9nLm9wZW4oKTsgICAgICAKLSAgICByZXR1cm4gZGlhbG9nOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlbGF5ZWRVcGRhdGUoKQotICB7Ci0gICAgUnVubmFibGUgZGVsYXllZFVwZGF0ZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgdXBkYXRlKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBEaXNwbGF5LmdldEN1cnJlbnQoKS5hc3luY0V4ZWMoZGVsYXllZFVwZGF0ZSk7Ci0KLSAgICBpZiAodXBkYXRlTGlzdGVuZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cGRhdGVMaXN0ZW5lci51cGRhdGVPY2N1cmVkKHRoaXMsIG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgICB9Ci0gIH0KLSAKLSAgcHJvdGVjdGVkIE5hbWVzcGFjZUluZm8gZ2V0VGFyZ2V0TmFtZXNwYWNlSW5mbygpCi0gIHsKLSAgICByZXR1cm4gKG5hbWVzcGFjZUluZm9MaXN0ICE9IG51bGwgJiYgbmFtZXNwYWNlSW5mb0xpc3Quc2l6ZSgpID4gMCkgPyAKLSAgICAgICAgICAgKE5hbWVzcGFjZUluZm8pbmFtZXNwYWNlSW5mb0xpc3QuZ2V0KDApIDoKLSAgICAgICAgICAgbnVsbDsKLSAgfSAgICAKLQotICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIHZvaWQgdXBkYXRlKCkKLSAgewotICAgIHVwZGF0ZUhlbHBlcihuYW1lc3BhY2VJbmZvTGlzdCk7Ci0gIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgdm9pZCB1cGRhdGVIZWxwZXIoTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaWYgKHZpc2libGVSb3dzICE9IC0xICYmICFkdW1teVJvd3NSZW1vdmVkKQotICAgIHsKLS8vICAgICAgZHVtbXlSb3dzUmVtb3ZlZCA9IHRydWU7Ci0vLyAgICAgIHRhYmxlVmlld2VyLmdldFRhYmxlKCkucmVtb3ZlQWxsKCk7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgdGFibGVWaWV3ZXIuc2V0SW5wdXQobmFtZXNwYWNlSW5mb0xpc3QpOwotICAgIGlmIChzZWxlY3Rpb24uaXNFbXB0eSgpKQotICAgIHsgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGlmIChuYW1lc3BhY2VJbmZvTGlzdC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICB0YWJsZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obmFtZXNwYWNlSW5mb0xpc3QuZ2V0KDApKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0YWJsZVZpZXdlci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTmFtZXNwYWNlSW5mb0NoZWNrYm94Q2VsbEVkaXRvciBleHRlbmRzIENoZWNrYm94Q2VsbEVkaXRvciBpbXBsZW1lbnRzIE1vdXNlTGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyBOYW1lc3BhY2VJbmZvQ2hlY2tib3hDZWxsRWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQpCi0gICAgewotICAgICAgc3VwZXIocGFyZW50KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBkb1NldFZhbHVlKE9iamVjdCB2YWx1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICAgIHsKLSAgICAgICBzdXBlci5hY3RpdmF0ZSgpOwotICAgICAgIGRlYWN0aXZhdGUoKTsKLSAgICAgICBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRGb2N1c0NvbnRyb2woKS5yZWRyYXcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBtb3VzZURvd24oTW91c2VFdmVudCBlKSAgIAotICAgIHsgICAgICAKLSAgICAgIGlmICh0YWJsZVZpZXdlci5nZXRUYWJsZSgpLmdldEl0ZW0obmV3IFBvaW50KGUueCwgZS55KSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9ICAgIAotICAgIHB1YmxpYyB2b2lkIG1vdXNlRG91YmxlQ2xpY2soTW91c2VFdmVudCBlKSB7fQotICAgIHB1YmxpYyB2b2lkIG1vdXNlVXAoTW91c2VFdmVudCBlKSB7fQotCi0KLSAgfQotCi0KLSAgcHJvdGVjdGVkIGNsYXNzIE5hbWVzcGFjZUluZm9DZWxsTW9kaWZpZXIgaW1wbGVtZW50cyBJQ2VsbE1vZGlmaWVyCi0gIHsKLSAgICBwdWJsaWMgTmFtZXNwYWNlSW5mb0NlbGxNb2RpZmllcigpCi0gICAgewotICAgICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGNhbk1vZGlmeShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIGlmIChwcm9wZXJ0eS5lcXVhbHMoSU5DTFVERSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZSBpZiAocHJvcGVydHkuZXF1YWxzKFBSRUZJWCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIAotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0VmFsdWUoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICBpbnQgY29sdW1uID0gMDsKLSAgICAgIGlmIChwcm9wZXJ0eS5lcXVhbHMoSU5DTFVERSkpCi0gICAgICB7Ci0gICAgICAgIGNvbHVtbiA9IDA7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChwcm9wZXJ0eS5lcXVhbHMoUFJFRklYKSkKLSAgICAgIHsKLSAgICAgICAgY29sdW1uID0gMTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmVxdWFscyhOQU1FU1BBQ0VfVVJJKSkKLSAgICAgIHsKLSAgICAgICAgY29sdW1uID0gMjsKLSAgICAgIH0KLQotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBwcm92aWRlci5nZXRDb2x1bW5UZXh0KGVsZW1lbnQsIGNvbHVtbik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1vZGlmeShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5LCBPYmplY3QgdmFsdWUpCi0gICAgewotICAgICAgVGFibGVJdGVtIGl0ZW0gPSAoVGFibGVJdGVtKWVsZW1lbnQ7Ci0gICAgICBpZiAoaXRlbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqID0gaXRlbS5nZXREYXRhKCk7Ci0gICAgICAgIGlmIChvYmogIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFRhYmxlRWxlbWVudCBob2xkZXIgPSAoVGFibGVFbGVtZW50KW9iajsKLSAgICAgICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSBob2xkZXIuZ2V0TmFtZXNwYWNlSW5mbygpOwotICAgICAgICAgIGlmIChwcm9wZXJ0eS5lcXVhbHMoSU5DTFVERSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCgoQm9vbGVhbil2YWx1ZSkuYm9vbGVhblZhbHVlKCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgY2hlY2tlZExpc3Quc2V0KGhvbGRlci5nZXRJbmRleCgpLCAidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaG9sZGVyLnNldENoZWNrZWQoImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBjaGVja2VkTGlzdC5zZXQoaG9sZGVyLmdldEluZGV4KCksICJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkuZXF1YWxzKFBSRUZJWCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5mby5wcmVmaXggPSAoKFN0cmluZyl2YWx1ZSkudHJpbSgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIFJ1bm5hYmxlIGRlbGF5ZWRVcGRhdGUgPSBuZXcgUnVubmFibGUoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRhYmxlVmlld2VyLnJlZnJlc2goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9OwotICAgICAgICAgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyhkZWxheWVkVXBkYXRlKTsKLSAgICAgICAgICBpZiAodXBkYXRlTGlzdGVuZXIgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB1cGRhdGVMaXN0ZW5lci51cGRhdGVPY2N1cmVkKHRoaXMsIG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgICAgICAgICB9Ci0KLS8vICAgICAgICAgIHBlcmZvcm1EZWxheWVkVXBkYXRlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0gICAgICAgICAgICAgICAgICAgCi0KLSAgcHJvdGVjdGVkIGNsYXNzIFRhYmxlRWxlbWVudAotICB7Ci0gICAgTmFtZXNwYWNlSW5mbyBpbmZvOwotICAgIGludCBpbmRleDsKLSAgICBTdHJpbmcgY2hlY2tlZCA9ICJ0cnVlIjsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIFRhYmxlRWxlbWVudChOYW1lc3BhY2VJbmZvIGluZm8sIGludCBpbmRleCkKLSAgICB7Ci0gICAgICB0aGlzLmluZm8gPSBpbmZvOwotICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgTmFtZXNwYWNlSW5mbyBnZXROYW1lc3BhY2VJbmZvKCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW5mbzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGludCBnZXRJbmRleCgpCi0gICAgewotICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldENoZWNrZWQoKQotICAgIHsKLSAgICAgIHJldHVybiBjaGVja2VkOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRDaGVja2VkKFN0cmluZyBjaGVja2VkKQotICAgIHsKLSAgICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE5hbWVzcGFjZUluZm9UYWJsZUxhYmVsUHJvdmlkZXIKLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBOYW1lc3BhY2VJbmZvVGFibGVMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlciwgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRGVsZXRlZChPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgewotICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzcGFjZUluZm9MaXN0LnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSAoTmFtZXNwYWNlSW5mbyluYW1lc3BhY2VJbmZvTGlzdC5nZXQoaSk7Ci0gICAgICAgIFRhYmxlRWxlbWVudCBob2xkZXIgPSBuZXcgVGFibGVFbGVtZW50KGluZm8sIGkpOwotICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgoU3RyaW5nKWNoZWNrZWRMaXN0LmdldChpKSk7Ci0gICAgICAgIHYuYWRkKGhvbGRlcik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdi50b0FycmF5KCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBvYmplY3QsIGludCBjb2x1bW4pCi0gICAgewotICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IChUYWJsZUVsZW1lbnQpb2JqZWN0OwotICAgICAgTmFtZXNwYWNlSW5mbyBpbmZvID0gaG9sZGVyLmdldE5hbWVzcGFjZUluZm8oKTsKLSAgICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgICAgc3dpdGNoIChjb2x1bW4pCi0gICAgICB7Ci0gICAgICAgIGNhc2UgMTogeyByZXN1bHQgPSBpbmZvLnByZWZpeDsgYnJlYWs7IH0KLSAgICAgICAgY2FzZSAyOiB7IHJlc3VsdCA9IGluZm8udXJpOyBicmVhazsgfQotICAgICAgfQotICAgICAgcmVzdWx0ID0gcmVzdWx0ICE9IG51bGwgPyByZXN1bHQudHJpbSgpIDogIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGlmIChyZXN1bHQuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBzd2l0Y2ggKGNvbHVtbikKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgMjogCi0gICAgICAgICAgeyAKLSAgICAgICAgICAgIHJlc3VsdCA9IFhNTENvbW1vblJlc291cmNlcy5nZXRJbnN0YW5jZSgpLmdldFN0cmluZygiX1VJX05PX05BTUVTUEFDRV9OQU1FIik7ICAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLS8vICAgIHByaXZhdGUgU3RyaW5nIGdldERlZmF1bHRQcmVmaXgoKQotLy8gICAgewotLy8gICAgICBTdHJpbmcgZGVmYXVsdFByZWZpeCA9ICJwIjsKLS8vICAgICAgaWYgKG5hbWVzcGFjZUluZm9MaXN0ID09IG51bGwpCi0vLyAgICAgICAgcmV0dXJuIGRlZmF1bHRQcmVmaXg7Ci0vLwotLy8gICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLS8vICAgICAgZm9yIChpbnQgaT0wOyBpPG5hbWVzcGFjZUluZm9MaXN0LnNpemUoKTsgaSsrKQotLy8gICAgICB7Ci0vLyAgICAgICAgTmFtZXNwYWNlSW5mbyBuc2luZm8gPSAoTmFtZXNwYWNlSW5mbyluYW1lc3BhY2VJbmZvTGlzdC5nZXQoaSk7Ci0vLyAgICAgICAgaWYgKG5zaW5mby5wcmVmaXggIT0gbnVsbCkKLS8vICAgICAgICAgIHYuYWRkRWxlbWVudChuc2luZm8ucHJlZml4KTsKLS8vICAgICAgfQotLy8KLS8vICAgICAgaWYgKHYuY29udGFpbnMoZGVmYXVsdFByZWZpeCkpCi0vLyAgICAgIHsKLS8vICAgICAgICBTdHJpbmcgcyA9IGRlZmF1bHRQcmVmaXg7Ci0vLyAgICAgICAgZm9yIChpbnQgaj0wOyB2LmNvbnRhaW5zKHMpOyBqKyspCi0vLyAgICAgICAgewotLy8gICAgICAgICAgcyA9IGRlZmF1bHRQcmVmaXggKyBJbnRlZ2VyLnRvU3RyaW5nKGopOwotLy8gICAgICAgIH0KLS8vICAgICAgICByZXR1cm4gczsKLS8vICAgICAgfQotLy8gICAgICBlbHNlCi0vLyAgICAgICAgcmV0dXJuIGRlZmF1bHRQcmVmaXg7Ci0vLyAgICB9Ci0KLSAgICBwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbkluZGV4KQotICAgIHsKLSAgICAgIGlmIChjb2x1bW5JbmRleCA9PSAwKSAgLy8gT3V0cHV0IENvbHVtbgotICAgICAgewotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgVGFibGVFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IChUYWJsZUVsZW1lbnQpIG9iamVjdDsKLSAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gaG9sZGVyLmdldENoZWNrZWQoKTsKLSAgICAgICAgICBpZiAocmVzdWx0LmVxdWFscygidHJ1ZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvb3V0cHV0X3llcy5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvb3V0cHV0X25vLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHByb3BlcnR5KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgTmFtZXNwYWNlTmF2aWdhYmxlVGFibGVWaWV3ZXIgZXh0ZW5kcyBOYXZpZ2FibGVUYWJsZVZpZXdlcgotICB7Ci0gICAgcHVibGljIE5hbWVzcGFjZU5hdmlnYWJsZVRhYmxlVmlld2VyKFRhYmxlIHBhcmVudCkKLSAgICB7Ci0gICAgICBzdXBlcihwYXJlbnQpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL05ld1dTRExXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9OZXdXU0RMV2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNWNmZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL05ld1dTRExXaXphcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTA4IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5QcmVmZXJlbmNlc1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByb3BlcnRpZXMuU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5CaW5kaW5nR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNyZWF0ZVdTRExFbGVtZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmludGVybmFsLnV0aWwuRE9NVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZUluZm87Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE5ld1dTRExXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKLQlwcml2YXRlIFdTRExOZXdGaWxlUGFnZSBuZXdGaWxlUGFnZTsKLQlwcml2YXRlIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2Ugb3B0aW9uc1BhZ2U7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247Ci0JcHJpdmF0ZSBCaW5kaW5nR2VuZXJhdG9yIGdlbmVyYXRvcjsKLQlwcml2YXRlIGJvb2xlYW4gZk9wZW5FZGl0b3JXaGVuRmluaXNoZWQ7Ci0JcHJpdmF0ZSBJRmlsZSBmTmV3RmlsZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgTmV3V1NETFdpemFyZC4KLQkgKi8KLQlwdWJsaWMgTmV3V1NETFdpemFyZCgpIHsKLQkJc3VwZXIoKTsKLQkJZ2VuZXJhdG9yID0gbmV3IEJpbmRpbmdHZW5lcmF0b3IobnVsbCwgbnVsbCk7Ci0JCWZPcGVuRWRpdG9yV2hlbkZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0JCi0JcHVibGljIE5ld1dTRExXaXphcmQoYm9vbGVhbiBvcGVuRWRpdG9yV2hlbkZpbmlzaGVkKSB7Ci0JCXRoaXMoKTsKLQkJZk9wZW5FZGl0b3JXaGVuRmluaXNoZWQgPSBvcGVuRWRpdG9yV2hlbkZpbmlzaGVkOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmQjcGVyZm9ybUZpbmlzaCgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKLQkJZk5ld0ZpbGUgPSBuZXdGaWxlUGFnZS5jcmVhdGVOZXdGaWxlKCk7Ci0KLQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZSA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCVN0cmluZyBjaGFyU2V0ID0gcHJlZmVyZW5jZS5nZXRTdHJpbmcoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuT1VUUFVUX0NPREVTRVQpOwotCQlpZiAoY2hhclNldCA9PSBudWxsIHx8IGNoYXJTZXQudHJpbSgpLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJY2hhclNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCi0JCVN0cmluZyB3c2RsUHJlZml4ID0gIndzZGwiOyAvLyROT04tTkxTLTEkCi0JCVZlY3RvciBuYW1lc3BhY2VzID0gb3B0aW9uc1BhZ2UuZ2V0TmFtZXNwYWNlSW5mbygpOwotCi0JCVN0cmluZyBwcmVmaXggPSBvcHRpb25zUGFnZS5nZXRQcmVmaXgoKTsKLQkJU3RyaW5nIGRlZmluaXRpb25OYW1lID0gb3B0aW9uc1BhZ2UuZ2V0RGVmaW5pdGlvbk5hbWUoKTsKLQotCQlVUkkgdXJpMiA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZOZXdGaWxlLmdldEZ1bGxQYXRoKCkudG9PU1N0cmluZygpLCBmYWxzZSk7Ci0JCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotCQlXU0RMUmVzb3VyY2VJbXBsIHJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpIHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioud3NkbCIpKTsgLy8kTk9OLU5MUy0xJAotCQlyZXNvdXJjZS5zZXRVUkkodXJpMik7Ci0JCQotCQlXU0RMRmFjdG9yeUltcGwgZmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLQkJRGVmaW5pdGlvbkltcGwgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uSW1wbCkgZmFjdG9yeS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0JCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotCQkKLQkJZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2Uob3B0aW9uc1BhZ2UuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQlkZWZpbml0aW9uLnNldExvY2F0aW9uKGZOZXdGaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7Ci0JCWRlZmluaXRpb24uc2V0RW5jb2RpbmcoY2hhclNldCk7Ci0JCWRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKHdzZGxQcmVmaXgsIGRlZmluaXRpb25OYW1lKSk7Ci0JCWRlZmluaXRpb24uYWRkTmFtZXNwYWNlKHByZWZpeCwgb3B0aW9uc1BhZ2UuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlcy5zaXplKCk7IGkrKykgewotCQkJTmFtZXNwYWNlSW5mbyBpbmZvID0gKE5hbWVzcGFjZUluZm8pIG5hbWVzcGFjZXMuZ2V0KGkpOwotCi0JCQlpZiAoaW5mby5wcmVmaXgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoaW5mby5wcmVmaXgsIGluZm8udXJpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWRlZmluaXRpb24uYWRkTmFtZXNwYWNlKG51bGwsIGluZm8udXJpKTsKLQkJCX0KLQkJfQotCQkvLyBUT0RPIDogY3MuLi4gd2h5IGRvIHdlIG5lZWQgdGhpcz8gIHRoZXNlIGNhbGxzIGFyZSBldmlsIQotCQlkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQodHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlpZiAob3B0aW9uc1BhZ2UuZ2V0Q3JlYXRlU2tlbGV0b25Cb29sZWFuKCkpIHsKLQkJCQlpZiAob3B0aW9uc1BhZ2UuaXNTb2FwRG9jTGl0ZXJhbFByb3RvY29sKCkpIHsKLQkJCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuUEFSVF9UWVBFX09SX0RFRklOSVRJT04gPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX0lORk9fRUxFTUVOVF9ERUNMQVJBVElPTjsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuUEFSVF9JTkZPX1RZUEVfREVGSU5JVElPTjsKLQkJCQl9Ci0KLQkJCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5zZXJ2aWNlTmFtZSA9IGRlZmluaXRpb25OYW1lOwotCQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLnBvcnROYW1lID0gZGVmaW5pdGlvbk5hbWUgKyBvcHRpb25zUGFnZS5nZXRQcm90b2NvbCgpOwotCQkJCVNlcnZpY2Ugc2VydmljZSA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZVNlcnZpY2UoZGVmaW5pdGlvbik7Ci0KLQkJCQkvLyBHZW5lcmF0ZSBCaW5kaW5nCi0JCQkJSXRlcmF0b3IgYmluZGluZ0l0ID0gZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKS5pdGVyYXRvcigpOwotCQkJCUJpbmRpbmcgYmluZGluZyA9IG51bGw7Ci0JCQkJaWYgKGJpbmRpbmdJdC5oYXNOZXh0KCkpIHsKLQkJCQkJYmluZGluZyA9IChCaW5kaW5nKSBiaW5kaW5nSXQubmV4dCgpOwotCQkJCX0KLQotCQkJCWdlbmVyYXRvci5zZXREZWZpbml0aW9uKGRlZmluaXRpb24pOwotCQkJCWdlbmVyYXRvci5zZXRCaW5kaW5nKGJpbmRpbmcpOwotCQkJCVBvcnQgcG9ydCA9IChQb3J0KSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCkubmV4dCgpOwotCQkJCWdlbmVyYXRvci5zZXROYW1lKENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0TmFtZShwb3J0LmdldEVCaW5kaW5nKCkpKTsKLQkJCQlnZW5lcmF0b3Iuc2V0UmVmTmFtZShDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldFBvcnRUeXBlUmVmZXJlbmNlKHBvcnQuZ2V0RUJpbmRpbmcoKSkpOwotCQkJCWdlbmVyYXRvci5zZXRPdmVyd3JpdGUodHJ1ZSk7Ci0JCQkJZ2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZygpOwotCQkJCWdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KCk7CQotCQkJfQotCQkJcmVzb3VyY2Uuc2F2ZShudWxsKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5Db3VsZCBub3Qgd3JpdGUgbmV3IFdTREwgZmlsZSBpbiBXU0RMIFdpemFyZDogIiArIGUpOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQkvKgotCQkgKiBpZiAoZmlsZSAhPSBudWxsKSB7IGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gbmV3Ci0JCSAqIFN0cnVjdHVyZWRTZWxlY3Rpb24oZmlsZSk7IGlmIChzZWxlY3Rpb24gIT0gbnVsbCkgeyBJV29ya2JlbmNoCi0JCSAqIHdvcmtiZW5jaCA9IFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKTsgZmluYWwKLQkJICogSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPQotCQkgKiB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7IGZpbmFsIElXb3JrYmVuY2hQYXJ0Ci0JCSAqIGZvY3VzUGFydCA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOyBpZgotCQkgKiAoZm9jdXNQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgewotCQkgKiBEaXNwbGF5LmdldEN1cnJlbnQoKS5hc3luY0V4ZWMgKG5ldyBSdW5uYWJsZSgpIHsgcHVibGljIHZvaWQgcnVuKCkgewotCQkgKiAoKElTZXRTZWxlY3Rpb25UYXJnZXQpZm9jdXNQYXJ0KS5zZWxlY3RSZXZlYWwoc2VsZWN0aW9uKTsgfSB9KTsgfSB9IH0KLQkJICovCi0JCWlmIChmT3BlbkVkaXRvcldoZW5GaW5pc2hlZCkgewotCQkJb3BlbkVkaXRvcihmTmV3RmlsZSk7Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaXphcmQjaW5pdChJV29ya2JlbmNoLAotCSAqICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCi0JCS8vIE5lZWQgbmV3IGljb24KLQkJdGhpcy5zZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yLmNsYXNzLCAiaWNvbnMvbmV3X3dzZGxfd2l6LnBuZyIpKTsgLy8kTk9OLU5MUy0xJAotCQl0aGlzLnNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLl9VSV9USVRMRV9ORVdfV1NETF9GSUxFKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgewotCQluZXdGaWxlUGFnZSA9IG5ldyBXU0RMTmV3RmlsZVBhZ2Uoc2VsZWN0aW9uKTsKLQkJb3B0aW9uc1BhZ2UgPSBuZXcgV1NETE5ld0ZpbGVPcHRpb25zUGFnZShNZXNzYWdlcy5fVUlfVElUTEVfT1BUSU9OUywgTWVzc2FnZXMuX1VJX1RJVExFX09QVElPTlMsIG51bGwsIG5ld0ZpbGVQYWdlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCW9wdGlvbnNQYWdlLnNldEJpbmRpbmdHZW5lcmF0b3IoZ2VuZXJhdG9yKTsKLQkJYWRkUGFnZShuZXdGaWxlUGFnZSk7Ci0JCWFkZFBhZ2Uob3B0aW9uc1BhZ2UpOwotCX0KLQotCXB1YmxpYyBJUGF0aCBnZXROZXdGaWxlUGF0aCgpIHsKLQkJU3RyaW5nIGZpbGVOYW1lID0gbmV3RmlsZVBhZ2UuZ2V0RmlsZU5hbWUoKTsKLQkJcmV0dXJuIGZpbGVOYW1lICE9IG51bGwgPyBuZXcgUGF0aChmaWxlTmFtZSkgOiBudWxsOwotCX0KLQkKLQlwdWJsaWMgSUZpbGUgZ2V0TmV3RmlsZSgpIHsKLQkJcmV0dXJuIGZOZXdGaWxlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhbkZpbmlzaCgpIHsKLQkJaWYgKG5ld0ZpbGVQYWdlLmlzUGFnZUNvbXBsZXRlKCkgJiYgb3B0aW9uc1BhZ2UuaXNQYWdlQ29tcGxldGUoKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXN0YXRpYyBwdWJsaWMgdm9pZCBvcGVuRWRpdG9yKGZpbmFsIElGaWxlIGlGaWxlKSB7Ci0JCWlmIChpRmlsZSAhPSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKTsKLQkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCi0JCQlEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCVN0cmluZyBlZGl0b3JJZCA9IG51bGw7Ci0JCQkJCQlJRWRpdG9yRGVzY3JpcHRvciBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihpRmlsZS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSwgaUZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCkuZ2V0Q29udGVudFR5cGUoKSk7Ci0JCQkJCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCQllZGl0b3JJZCA9IGVkaXRvci5nZXRJZCgpOwotCQkJCQkJfQotCQkJCQkJd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5vcGVuRWRpdG9yKG5ldyBGaWxlRWRpdG9ySW5wdXQoaUZpbGUpLCBlZGl0b3JJZCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4KSB7Ci0JCQkJCQkvLyBCMkJHVUlQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0TXNnTG9nZ2VyKCkud3JpdGUoIkV4Y2VwdGlvbgotCQkJCQkJLy8gZW5jb3VudGVyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIG9wZW4gZmlsZTogIiArIGlGaWxlCi0JCQkJCQkvLyArICJcblxuIiArIGV4KTsKLQkJCQkJfQotCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleCkgewotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgY2xhc3MgQXZhaWxhYmxlQ29udGVudENNVmlzaXRvciBleHRlbmRzIENNVmlzaXRvciB7Ci0JCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ0xVREVfQVRUUklCVVRFUyA9IE1vZGVsUXVlcnkuSU5DTFVERV9BVFRSSUJVVEVTOwotCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkNMVURFX0NISUxEX05PREVTID0gTW9kZWxRdWVyeS5JTkNMVURFX0NISUxEX05PREVTOwotCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkNMVURFX1NFUVVFTkNFX0dST1VQUyA9IE1vZGVsUXVlcnkuSU5DTFVERV9TRVFVRU5DRV9HUk9VUFM7Ci0KLQkJcHVibGljIEhhc2h0YWJsZSBjaGlsZE5vZGVUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJcHVibGljIEhhc2h0YWJsZSBhdHRyaWJ1dGVUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJcHVibGljIEVsZW1lbnQgcm9vdEVsZW1lbnQ7Ci0JCXB1YmxpYyBDTUVsZW1lbnREZWNsYXJhdGlvbiByb290RWxlbWVudERlY2xhcmF0aW9uOwotCQlwdWJsaWMgYm9vbGVhbiBpc1Jvb3RWaXNpdGVkOwotCQlwcm90ZWN0ZWQgYm9vbGVhbiBpbmNsdWRlU2VxdWVuY2VHcm91cHM7Ci0JCXB1YmxpYyBET01WYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0JCXB1YmxpYyBBdmFpbGFibGVDb250ZW50Q01WaXNpdG9yKEVsZW1lbnQgcm9vdEVsZW1lbnQsIENNRWxlbWVudERlY2xhcmF0aW9uIHJvb3RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCXRoaXMucm9vdEVsZW1lbnQgPSByb290RWxlbWVudDsKLQkJCXRoaXMucm9vdEVsZW1lbnREZWNsYXJhdGlvbiA9IHJvb3RFbGVtZW50RGVjbGFyYXRpb247Ci0JCQl2YWxpZGF0b3IgPSBuZXcgRE9NVmFsaWRhdG9yKCk7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEtleShDTU5vZGUgY21Ob2RlKSB7Ci0JCQlTdHJpbmcga2V5ID0gY21Ob2RlLmdldE5vZGVOYW1lKCk7Ci0JCQlDTURvY3VtZW50IGNtRG9jdW1lbnQgPSAoQ01Eb2N1bWVudCkgY21Ob2RlLmdldFByb3BlcnR5KCJDTURvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChjbURvY3VtZW50ICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgbmFtZXNwYWNlVVJJID0gKFN0cmluZykgY21Eb2N1bWVudC5nZXRQcm9wZXJ0eSgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL3RhcmdldE5hbWVzcGFjZVVSSSIpOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsKSB7Ci0JCQkJCWtleSA9ICJbIiArIG5hbWVzcGFjZVVSSSArICJdIiArIGtleTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGtleTsKLQkJfQotCi0JCXB1YmxpYyBMaXN0IGNvbXB1dGVBdmFpbGFibGVDb250ZW50KGludCBpbmNsdWRlT3B0aW9ucykgewotCQkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJCWludCBjb250ZW50VHlwZSA9IHJvb3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJCWluY2x1ZGVTZXF1ZW5jZUdyb3VwcyA9ICgoaW5jbHVkZU9wdGlvbnMgJiBJTkNMVURFX1NFUVVFTkNFX0dST1VQUykgIT0gMCk7Ci0JCQl2aXNpdENNTm9kZShyb290RWxlbWVudERlY2xhcmF0aW9uKTsKLQotCQkJaWYgKChpbmNsdWRlT3B0aW9ucyAmIElOQ0xVREVfQVRUUklCVVRFUykgIT0gMCkgewotCQkJCXYuYWRkQWxsKGF0dHJpYnV0ZVRhYmxlLnZhbHVlcygpKTsKLQkJCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIG5pbGxhYmxlQXR0cmlidXRlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIHJvb3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0UHJvcGVydHkoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9uaWxsYWJsZSIpOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKG5pbGxhYmxlQXR0cmlidXRlICE9IG51bGwpIHsKLQkJCQkJdi5hZGQobmlsbGFibGVBdHRyaWJ1dGUpOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKChpbmNsdWRlT3B0aW9ucyAmIElOQ0xVREVfQ0hJTERfTk9ERVMpICE9IDApIHsKLQkJCQlpZiAoY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uTUlYRUQgfHwgY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uRUxFTUVOVCkgewotCQkJCQl2LmFkZEFsbChjaGlsZE5vZGVUYWJsZS52YWx1ZXMoKSk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLkFOWSkgewotCQkJCQlDTURvY3VtZW50IGNtRG9jdW1lbnQgPSAoQ01Eb2N1bWVudCkgcm9vdEVsZW1lbnREZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgiQ01Eb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0JCQkJCWlmIChjbURvY3VtZW50ICE9IG51bGwpIHsKLQkJCQkJCUNNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gY21Eb2N1bWVudC5nZXRFbGVtZW50cygpOwotCQkJCQkJZm9yIChJdGVyYXRvciBpID0gZWxlbWVudHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJCQkJdi5hZGQoKENNRWxlbWVudERlY2xhcmF0aW9uKSBpLm5leHQoKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAoY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uTUlYRUQgfHwgY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uUENEQVRBIHx8IGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLkFOWSkgewotCQkJCQlDTURhdGFUeXBlIGRhdGFUeXBlID0gcm9vdEVsZW1lbnREZWNsYXJhdGlvbi5nZXREYXRhVHlwZSgpOwotCQkJCQlpZiAoZGF0YVR5cGUgIT0gbnVsbCkgewotCQkJCQkJdi5hZGQoZGF0YVR5cGUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHY7Ci0JCX0KLQotCQkvKgotCQkgKiBwdWJsaWMgdm9pZCB2aXNpdENNQW55RWxlbWVudChDTUFueUVsZW1lbnQgYW55RWxlbWVudCkgeyBTdHJpbmcgdXJpID0KLQkJICogYW55RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsgTGlzdCBsaXN0ID0KLQkJICogZ2V0Q01Eb2N1bWVudExpc3Qocm9vdEVsZW1lbnQsIHJvb3RFbGVtZW50RGVjbGFyYXRpb24sIHVyaSk7IGZvcgotCQkgKiAoSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKSB7Ci0JCSAqIENNRG9jdW1lbnQgY21kb2N1bWVudCA9IChDTURvY3VtZW50KWl0ZXJhdG9yLm5leHQoKTsgaWYgKGNtZG9jdW1lbnQgIT0KLQkJICogbnVsbCkgeyBDTU5hbWVkTm9kZU1hcCBtYXAgPSBjbWRvY3VtZW50LmdldEVsZW1lbnRzKCk7IGludCBzaXplID0KLQkJICogbWFwLmdldExlbmd0aCgpOyBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeyBDTU5vZGUgZWQgPQotCQkgKiBtYXAuaXRlbShpKTsKLQkJICogCi0JCSAqIGNoaWxkTm9kZVRhYmxlLnB1dChnZXRLZXkoZWQpLCBlZCk7IH0gfSB9IH0KLQkJICovCi0JCXB1YmxpYyB2b2lkIHZpc2l0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGFkKSB7Ci0JCQlzdXBlci52aXNpdENNQXR0cmlidXRlRGVjbGFyYXRpb24oYWQpOwotCQkJYXR0cmlidXRlVGFibGUucHV0KGFkLmdldE5vZGVOYW1lKCksIGFkKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHZpc2l0Q01FbGVtZW50RGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gZWQpIHsKLQkJCWlmIChlZCA9PSByb290RWxlbWVudERlY2xhcmF0aW9uICYmICFpc1Jvb3RWaXNpdGVkKSB7Ci0JCQkJaXNSb290VmlzaXRlZCA9IHRydWU7Ci0JCQkJc3VwZXIudmlzaXRDTUVsZW1lbnREZWNsYXJhdGlvbihlZCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlpZiAoIUJvb2xlYW4uVFJVRS5lcXVhbHMoZWQuZ2V0UHJvcGVydHkoIkFic3RyYWN0IikpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJY2hpbGROb2RlVGFibGUucHV0KGdldEtleShlZCksIGVkKTsKLQkJCQl9Ci0KLQkJCQlDTU5vZGVMaXN0IHN1YnN0aXR1dGlvbkdyb3VwID0gKENNTm9kZUxpc3QpIGVkLmdldFByb3BlcnR5KCJTdWJzdGl0dXRpb25Hcm91cCIpOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKHN1YnN0aXR1dGlvbkdyb3VwICE9IG51bGwpIHsKLQkJCQkJaGFuZGxlU3Vic3RpdHV0aW9uR3JvdXAoc3Vic3RpdHV0aW9uR3JvdXApOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXByb3RlY3RlZCB2b2lkIGhhbmRsZVN1YnN0aXR1dGlvbkdyb3VwKENNTm9kZUxpc3Qgc3Vic3RpdHV0aW9uR3JvdXApIHsKLQkJCWludCBzdWJzdGl0dXRpb25Hcm91cExlbmd0aCA9IHN1YnN0aXR1dGlvbkdyb3VwLmdldExlbmd0aCgpOwotCQkJaWYgKHN1YnN0aXR1dGlvbkdyb3VwTGVuZ3RoID4gMSkgewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc3Vic3RpdHV0aW9uR3JvdXBMZW5ndGg7IGkrKykgewotCQkJCQlDTU5vZGUgZWQgPSBzdWJzdGl0dXRpb25Hcm91cC5pdGVtKGkpOwotCQkJCQlpZiAoIUJvb2xlYW4uVFJVRS5lcXVhbHMoZWQuZ2V0UHJvcGVydHkoIkFic3RyYWN0IikpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCWNoaWxkTm9kZVRhYmxlLnB1dChnZXRLZXkoZWQpLCBlZCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB2aXNpdENNR3JvdXAoQ01Hcm91cCBncm91cCkgewotCQkJaWYgKGluY2x1ZGVTZXF1ZW5jZUdyb3VwcykgewotCQkJCWlmIChncm91cC5nZXRPcGVyYXRvcigpID09IENNR3JvdXAuU0VRVUVOQ0UgJiYgZ3JvdXAuZ2V0Q2hpbGROb2RlcygpLmdldExlbmd0aCgpID4gMSAmJiBpbmNsdWRlc1JlcXVpcmVkQ29udGVudChncm91cCkpIHsKLQkJCQkJY2hpbGROb2RlVGFibGUucHV0KGdyb3VwLCBncm91cCk7Ci0JCQkJfQotCQkJfQotCQkJc3VwZXIudmlzaXRDTUdyb3VwKGdyb3VwKTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGluY2x1ZGVzUmVxdWlyZWRDb250ZW50KENNR3JvdXAgZ3JvdXApIHsKLQkJCUxpc3QgbGlzdCA9IGdldFZhbGlkYXRvcigpLmNyZWF0ZUNvbnRlbnRTcGVjaWZpY2F0aW9uTGlzdChncm91cCk7Ci0JCQlyZXR1cm4gbGlzdC5zaXplKCkgPiAxOwotCQl9Ci0KLQkJcHVibGljIERPTVZhbGlkYXRvciBnZXRWYWxpZGF0b3IoKSB7Ci0JCQlyZXR1cm4gdmFsaWRhdG9yOwotCQl9Ci0JfSAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIGhlcmUKLQkKLQkKLQlwdWJsaWMgdm9pZCBvcGVuUHJvamVjdFdTSVByb3BlcnRpZXMoKSB7Ci0JCVNoZWxsIHNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQlJUHJvamVjdCB0YXJnZXRQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ld0ZpbGVQYWdlLmdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKG5ld0ZpbGVQYWdlLmdldEZpbGVOYW1lKCkpKS5nZXRQcm9qZWN0KCk7Ci0JCS8vUHJlZmVyZW5jZXNVdGlsLmNyZWF0ZVByb3BlcnR5RGlhbG9nT24oc2hlbGwsdGFyZ2V0UHJvamVjdCxudWxsLG51bGwsbnVsbCkub3BlbigpOwotCi0JCVByZWZlcmVuY2VzVXRpbC5jcmVhdGVQcm9wZXJ0eURpYWxvZ09uKHNoZWxsLHRhcmdldFByb2plY3QsU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlLlBBR0VfSUQgLG5ldyBTdHJpbmdbXSB7U2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlLlBBR0VfSUR9LG51bGwpLm9wZW4oKTsKLQl9Ci0JCi0JICBwdWJsaWMgU3RyaW5nIGdldFdTSVByZWZlcmVuY2VzKCkgewotCQkgIElQcm9qZWN0IHRhcmdldFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3RmlsZVBhZ2UuZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQobmV3RmlsZVBhZ2UuZ2V0RmlsZU5hbWUoKSkpLmdldFByb2plY3QoKTsKLQkJICBQZXJzaXN0ZW50V1NJQ29udGV4dCBXU0lTU0Jjb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpOwotCQkgIAotCQkgICAgIGlmIChXU0lTU0Jjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXModGFyZ2V0UHJvamVjdCkpCi0JCSAgICAgIHsKLQkJICAgICAgICByZXR1cm4gKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0JCSAgICAgIH0gCi0JCSAgICAgIGVsc2UgaWYgKFdTSVNTQmNvbnRleHQucHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyh0YXJnZXRQcm9qZWN0KSkKLQkJICAgICAgewotCQkgICAgICAgIHJldHVybiAoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKTsKLQkJICAgICAgfQotCQkgICAgICBlbHNlIAotCQkgICAgICB7Ci0JCSAgICAJcmV0dXJuIChQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCSAgICAgIH0KLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Qb3J0V2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvUG9ydFdpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTAyMjlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Qb3J0V2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLlBvcnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm90b2NvbENvbXBvbmVudENvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBQb3J0V2l6YXJkIGV4dGVuZHMgV2l6YXJkCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgaW50IFNUWUxFX05FV19CSU5ESU5HID0gMTsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgU1RZTEVfRVhJU1RJTkdfQklORElORyA9IDEgPDwgMTsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgU1RZTEVfREVGQVVMVCA9IFNUWUxFX05FV19CSU5ESU5HIHwgU1RZTEVfRVhJU1RJTkdfQklORElORzsKLQotICBwcm90ZWN0ZWQgUG9ydEdlbmVyYXRvciBwb3J0R2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgUG9ydFdpemFyZE9wdGlvbnNQYWdlIHNwZWNpZnlCaW5kaW5nUGFnZTsKLSAgcHJvdGVjdGVkIGludCBzdHlsZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFBvcnRXaXphcmQuCi0gICAqLwotICBwdWJsaWMgUG9ydFdpemFyZChTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICB0aGlzKHNlcnZpY2UsIDApOwotICB9Ci0KLSAgcHVibGljIFBvcnRXaXphcmQoU2VydmljZSBzZXJ2aWNlLCBpbnQgc3R5bGUpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBvcnRHZW5lcmF0b3IgPSBuZXcgUG9ydEdlbmVyYXRvcihzZXJ2aWNlKTsKLSAgICBzZXRXaW5kb3dUaXRsZShNZXNzYWdlcy5fVUlfUE9SVF9XSVpBUkQpOyAvLyROT04tTkxTLTEkCi0gICAgLy9zZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoV1NETEVkaXRvclBsdWdpbi5jbGFzcywgImljb25zL05ld1hNTC5naWYiKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgd2l6YXJkIHNldHVwIGlzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gc2V0dXAoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRQYWdlcygpCi0gIHsKLSAgICBzcGVjaWZ5QmluZGluZ1BhZ2UgPSBuZXcgUG9ydFdpemFyZE9wdGlvbnNQYWdlKHN0eWxlKTsKLSAgICBhZGRQYWdlKHNwZWNpZnlCaW5kaW5nUGFnZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgewotICAgIE9iamVjdCBvYmplY3QgPSBwb3J0R2VuZXJhdG9yLmdlbmVyYXRlUG9ydCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKG9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VsZWN0aW9uUHJvdmlkZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG9iamVjdCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgY2xhc3MgUG9ydFdpemFyZE9wdGlvbnNQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZQotICB7Ci0KLSAgICBwcm90ZWN0ZWQgUHJvdG9jb2xDb21wb25lbnRDb250cm9sIHByb3RvY29sQ29tcG9uZW50Q29udHJvbDsKLQotICAgIHB1YmxpYyBQb3J0V2l6YXJkT3B0aW9uc1BhZ2UoaW50IHN0eWxlKQotICAgIHsKLSAgICAgIHN1cGVyKCJTcGVjaWZ5UG9ydFBhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2V0VGl0bGUoTWVzc2FnZXMuX1VJX1NQRUNJRllfUE9SVF9ERVRBSUxTKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuX1VJX1NQRUNJRllfUE9SVF9ERVRBSUxTX1RPX0JFX0NSRUFURUQpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHVibGljIFBvcnRHZW5lcmF0b3IgZ2V0R2VuZXJhdG9yKCkKLSAgICB7Ci0gICAgICByZXR1cm4gcG9ydEdlbmVyYXRvcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gICAgewotICAgICAgUHJvdG9jb2xDb21wb25lbnRDb250cm9sIHByb3RvY29sQ29tcG9uZW50Q29udHJvbCA9IG5ldyBQb3J0UHJvdG9jb2xDb21wb25lbnRDb250cm9sKHBhcmVudCwgcG9ydEdlbmVyYXRvcik7Ci0gICAgICBwcm90b2NvbENvbXBvbmVudENvbnRyb2wuaW5pdEZpZWxkcygpOwotICAgICAgc2V0Q29udHJvbChwcm90b2NvbENvbXBvbmVudENvbnRyb2wpOwotICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbXBvbmVudENvbnRyb2wsIEFTREVkaXRvckNTSGVscElkcy5QT1JUX1dJWkFSRCk7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgUG9ydFByb3RvY29sQ29tcG9uZW50Q29udHJvbCBleHRlbmRzIFByb3RvY29sQ29tcG9uZW50Q29udHJvbAotICB7Ci0KLSAgICBwdWJsaWMgUG9ydFByb3RvY29sQ29tcG9uZW50Q29udHJvbChDb21wb3NpdGUgcGFyZW50LCBQb3J0R2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICB7Ci0gICAgICBzdXBlcihwYXJlbnQsIGdlbmVyYXRvciwgZmFsc2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVmTmFtZUxhYmVsVGV4dCgpCi0gICAgewotICAgICAgcmV0dXJuIE1lc3NhZ2VzLl9VSV9CSU5ESU5HOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHVibGljIExpc3QgZ2V0UmVmTmFtZXMoKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChwb3J0R2VuZXJhdG9yLmdldERlZmluaXRpb24oKSkuZ2V0QmluZGluZ05hbWVzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0TmFtZSgpCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gcG9ydEdlbmVyYXRvci5nZXRTZXJ2aWNlKCk7Ci0gICAgICByZXR1cm4gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0TmFtZShzZXJ2aWNlLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGNyZWF0ZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZShTdHJpbmcgcHJvdG9jb2wpCi0gICAgewotICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpLmdldEV4dGVuc2lvbkZvckxhYmVsKHByb3RvY29sKTsKLSAgICAgIGlmIChleHRlbnNpb24gIT0gbnVsbCkgewotICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLmdldFBvcnRDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1NvYXBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Tb2FwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODMwOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1NvYXBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBTb2FwQmluZGluZ09wdGlvbnNQYWdlIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgQnV0dG9uIGRvY0xpdGVyYWw7Ci0gIHByb3RlY3RlZCBCdXR0b24gcnBjTGl0ZXJhbDsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBycGNFbmNvZGVkOwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGNvbnRyb2w7Ci0gIHByb3RlY3RlZCBCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcjsKLQotICBwdWJsaWMgU29hcEJpbmRpbmdPcHRpb25zUGFnZSgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoQmFzZUdlbmVyYXRvciBnZW5lcmF0b3IpCi0gIHsKLSAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjsKLSAgfQotCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgY29udHJvbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgY29udHJvbC5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIExhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOwotICAgIEdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgc2VwYXJhdG9yLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgTGFiZWwgb3B0aW9uc0hlYWRpbmcgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULk5PTkUpOwotICAgIG9wdGlvbnNIZWFkaW5nLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX1NPQVBfQklORElOR19PUFRJT05TKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgZG9jTGl0ZXJhbCA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBkb2NMaXRlcmFsLnNldFRleHQoTWVzc2FnZXMuX1VJX1JBRElPX0RPQ1VNRU5UX0xJVEVSQUwpOyAvLyROT04tTkxTLTEkCi0gICAgZG9jTGl0ZXJhbC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0KLSAgICBycGNMaXRlcmFsID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIHJwY0xpdGVyYWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfUkFESU9fUlBDX0xJVEVSQUwpOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgcnBjRW5jb2RlZCA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBycGNFbmNvZGVkLnNldFRleHQoTWVzc2FnZXMuX1VJX1JBRElPX1JQQ19FTkNPREVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaWYgKGdlbmVyYXRvci5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZW5lcmF0b3IuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgZ2VuZXJhdG9yLmdldE5hbWUoKSk7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKHFuYW1lKTsKLQotICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBlZUxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGVlTGlzdC5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVlTGlzdC5nZXQoMCk7Ci0KLSAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZWUpOwotICAgICAgICAgIFN0cmluZyBzdHlsZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCi0gICAgICAgICAgaWYgKCJycGMiLmVxdWFscyhzdHlsZSkpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgUlBDIExpdGVyYWwgb3IgUlBDIEVuY29kZWQKLSAgICAgICAgICAJU3RyaW5nIHVzZSA9ICJlbmNvZGVkIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAlMaXN0IG9wZXJhdGlvbnMgPSBiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgICAgIAlpZiAob3BlcmF0aW9ucy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgCQllbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAJCUJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIG9wZXJhdGlvbnMuZ2V0KDApOwotICAgICAgICAgIAkJaWYgKG9wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgIT0gbnVsbCAmJiBvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgCQkJT2JqZWN0IG9iamVjdCA9IG9wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldCgwKTsKLSAgICAgICAgICAJCQllbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCQllbHNlIGlmIChvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSAhPSBudWxsICYmIG9wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgCQkJT2JqZWN0IG9iamVjdCA9IG9wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5nZXQoMCk7Ci0gICAgICAgICAgCQkJZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvYmplY3QpOwotICAgICAgICAgIAkJfQotICAgICAgICAgIAkJZWxzZSBpZiAob3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCUJpbmRpbmdGYXVsdCBmYXVsdCA9IChCaW5kaW5nRmF1bHQpIG9wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLmdldCgwKTsKLSAgICAgICAgICAJCQlMaXN0IGZhdWx0RUUgPSBmYXVsdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICAJCQkKLSAgICAgICAgICAJCQlpZiAoZmF1bHRFRS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgCQkJCWVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZmF1bHRFRS5nZXQoMCkpOwotICAgICAgICAgIAkJCX0KLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJCQotICAgICAgICAgIAkJaWYgKGVsZW1lbnQgIT0gbnVsbCkgewotICAgICAgICAgIAkJCXVzZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ1c2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAkJfQotICAgICAgICAgIAl9Ci0gICAgICAgICAgCQotICAgICAgICAgIAlpZiAodXNlICE9IG51bGwgJiYgImxpdGVyYWwiLmVxdWFscyh1c2UpKSB7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAJCWRvY0xpdGVyYWwuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJCXJwY0xpdGVyYWwuc2V0U2VsZWN0aW9uKHRydWUpOwotICAgICAgICAgIAkJcnBjRW5jb2RlZC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAl9Ci0gICAgICAgICAgCWVsc2UgeyAgICAgICAgICAJCi0gICAgICAgICAgCQlkb2NMaXRlcmFsLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgCQlycGNMaXRlcmFsLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgCQlycGNFbmNvZGVkLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgICAJfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGRvY0xpdGVyYWwuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgcnBjTGl0ZXJhbC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBycGNFbmNvZGVkLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIGNvbXB1dGVPcHRpb25zKCk7Ci0KLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotCi0gIHB1YmxpYyBDb21wb3NpdGUgZ2V0Q29udHJvbCgpIHsKLQkgIHJldHVybiBjb250cm9sOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUFwcGxpY2FibGUoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotICAgIGNvbXB1dGVPcHRpb25zKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjb21wdXRlT3B0aW9ucygpCi0gIHsKLQkgIGlmIChnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpIGluc3RhbmNlb2YgU09BUENvbnRlbnRHZW5lcmF0b3IpIHsKLQkJICBTT0FQQ29udGVudEdlbmVyYXRvciBzb2FwR2VuZXJhdG9yID0gKFNPQVBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCQkgIGlmIChkb2NMaXRlcmFsLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0U3R5bGUoU09BUENvbnRlbnRHZW5lcmF0b3IuU1RZTEVfRE9DVU1FTlQpOwotCQkJICBzb2FwR2VuZXJhdG9yLnNldFVzZShTT0FQQ29udGVudEdlbmVyYXRvci5VU0VfTElURVJBTCk7Ci0JCSAgfQkgIAotCQkgIGVsc2UgaWYgKHJwY0xpdGVyYWwuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9SUEMpOwotCQkJICBzb2FwR2VuZXJhdG9yLnNldFVzZShTT0FQQ29udGVudEdlbmVyYXRvci5VU0VfTElURVJBTCk7Ci0JCSAgfQotCQkgIGVsc2UgaWYgKHJwY0VuY29kZWQuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9SUEMpOwotCQkJICBzb2FwR2VuZXJhdG9yLnNldFVzZShTT0FQQ29udGVudEdlbmVyYXRvci5VU0VfRU5DT0RFRCk7Ci0JCSAgfQotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRPcHRpb25zT25HZW5lcmF0b3IoKSB7Ci0JICBjb21wdXRlT3B0aW9ucygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9XU0RMTmV3RmlsZU9wdGlvbnNQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvV1NETE5ld0ZpbGVPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDA3MDM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9XU0RMTmV3RmlsZU9wdGlvbnNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSU1lc3NhZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5QYWdlQm9vazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJpbmRpbmdHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWkuQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLklTb2FwU3R5bGVJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuU2VydmljZVBvbGljeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlZhbGlkYXRlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZGlhbG9ncy5VcGRhdGVMaXN0ZW5lcjsKLQotcHVibGljIGNsYXNzIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIGltcGxlbWVudHMgTW9kaWZ5TGlzdGVuZXIsIFVwZGF0ZUxpc3RlbmVyLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOwotICBwcm90ZWN0ZWQgVGV4dCB0YXJnZXROYW1lc3BhY2VUZXh0OwotICBwcm90ZWN0ZWQgVGV4dCBwcmVmaXhUZXh0OwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQb3J0T3BGaWVsZEJvb2xlYW4gPSB0cnVlOwotICAKLSAgcHJvdGVjdGVkIFBhZ2VCb29rIHByb3RvY29sUGFnZUJvb2s7Ci0gIHByb3RlY3RlZCBDb21ibyBwcm90b2NvbENvbWJvOwotICBwcm90ZWN0ZWQgTGluayBXU0lQcmVmZXJlbmNlTGluazsKLSAgCi0gIHByaXZhdGUgQmluZGluZ0dlbmVyYXRvciBnZW5lcmF0b3I7Ci0gIHByaXZhdGUgTWFwIHBhZ2VNYXAgPSBuZXcgSGFzaE1hcCgpOwotICBwcml2YXRlIElTZXJ2aWNlUG9saWN5IGFjdGl2ZVNlcnZpY2VQb2xpY3k7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlLgotICAgKiBAcGFyYW0gcGFnZU5hbWUKLSAgICovCi0gIHB1YmxpYyBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKFN0cmluZyBwYWdlTmFtZSkKLSAgewotICAgIHN1cGVyKHBhZ2VOYW1lKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QmluZGluZ0dlbmVyYXRvcihCaW5kaW5nR2VuZXJhdG9yIGdlbmVyYXRvcikgewotCSAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NETE5ld0ZpbGVPcHRpb25zUGFnZS4KLSAgICogQHBhcmFtIHBhZ2VOYW1lCi0gICAqIEBwYXJhbSB0aXRsZQotICAgKiBAcGFyYW0gdGl0bGVJbWFnZQotICAgKi8KLSAgcHVibGljIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UoU3RyaW5nIHBhZ2VOYW1lLCBTdHJpbmcgdGl0bGUsIEltYWdlRGVzY3JpcHRvciB0aXRsZUltYWdlKQotICB7Ci0gICAgc3VwZXIocGFnZU5hbWUsIHRpdGxlLCB0aXRsZUltYWdlKTsKLSAgICBzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRSk7Ci0gIH0KLQotICBwdWJsaWMgV1NETE5ld0ZpbGVPcHRpb25zUGFnZShTdHJpbmcgcGFnZU5hbWUsIFN0cmluZyB0aXRsZSwgSW1hZ2VEZXNjcmlwdG9yIHRpdGxlSW1hZ2UsIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZVBhZ2UpCi0gIHsKLSAgICBzdXBlcihwYWdlTmFtZSwgdGl0bGUsIHRpdGxlSW1hZ2UpOwotICAgIHNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLl9VSV9ERVNDUklQVElPTl9ORVdfV1NETF9GSUxFKTsKLSAgICBuZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3RmlsZVBhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dQYWdlI2NyZWF0ZUNvbnRyb2woQ29tcG9zaXRlKQotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlIGJhc2UgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoYmFzZSwgTWVzc2FnZXMuX1VJX0hFTFApOyAvLyROT04tTkxTLTEkCi0gICAgYmFzZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0KLSAgICAvLyAgR3JvdXAgd3NkbEdyb3VwID0gVmlld1V0aWxpdHkuY3JlYXRlR3JvdXAoYmFzZSwgMiwgIldTREwiLCBmYWxzZSk7Ci0gICAgQ29tcG9zaXRlIHdzZGxHcm91cCA9IG5ldyBDb21wb3NpdGUoYmFzZSwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgd3NkbEdyb3VwLnNldExheW91dChsYXlvdXQpOwotCi0gICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgd3NkbEdyb3VwLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgCi0gICAgR3JpZERhdGEgZ2QgPSAoR3JpZERhdGEpd3NkbEdyb3VwLmdldExheW91dERhdGEoKTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLQotICAgIExhYmVsIHRhcmdldE5hbWVzcGFjZSA9IG5ldyBMYWJlbCh3c2RsR3JvdXAsIFNXVC5MRUZUKTsKLSAgICB0YXJnZXROYW1lc3BhY2Uuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRSk7Ci0gICAgR3JpZERhdGEgbnNEYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgbnNEYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIHRhcmdldE5hbWVzcGFjZS5zZXRMYXlvdXREYXRhKG5zRGF0YSk7Ci0gICAgCi0gICAgdGFyZ2V0TmFtZXNwYWNlVGV4dCA9IG5ldyBUZXh0KHdzZGxHcm91cCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIEdyaWREYXRhIHRleHREYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgdGV4dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgdGV4dERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgdGV4dERhdGEud2lkdGhIaW50ID0gMTA7Ci0gICAgdGFyZ2V0TmFtZXNwYWNlVGV4dC5zZXRMYXlvdXREYXRhKHRleHREYXRhKTsKLSAgICAKLSAgICB0YXJnZXROYW1lc3BhY2VUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHRoaXMpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodGFyZ2V0TmFtZXNwYWNlVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLldTRExfV0laQVJEX09QVElPTlNfUEFHRV9UTlNfVEVYVCk7Ci0KLSAgICBMYWJlbCBwcmVmaXggPSBuZXcgTGFiZWwod3NkbEdyb3VwLCBTV1QuTEVGVCk7Ci0gICAgcHJlZml4LnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX1BSRUZJWF9XSVRIX0NPTE9OKTsKLQotICAgIEdyaWREYXRhIHByZWZpeERhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBwcmVmaXhEYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIHByZWZpeC5zZXRMYXlvdXREYXRhKHByZWZpeERhdGEpOwotICAgIAotICAgIHByZWZpeFRleHQgPSBuZXcgVGV4dCh3c2RsR3JvdXAsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICBHcmlkRGF0YSBwcmVmaXhUZXh0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIHByZWZpeFRleHREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIHByZWZpeFRleHREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIHByZWZpeFRleHREYXRhLndpZHRoSGludCA9IDEwOwotICAgIHByZWZpeFRleHQuc2V0TGF5b3V0RGF0YShwcmVmaXhUZXh0RGF0YSk7Ci0KLSAgICBwcmVmaXhUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHRoaXMpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJlZml4VGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLldTRExfV0laQVJEX09QVElPTlNfUEFHRV9QUkVGSVhfVEVYVCk7Ci0gICAgCi0gICAgLy8gICAgWE1MQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ2F0YWxvZ1JlZ2lzdHJ5LmdldEluc3RhbmNlKCkubG9va3VwT3JDcmVhdGVYTUxDYXRhbG9nKCJkZWZhdWx0Iik7Ci0gICAgLy8gICAgU2VsZWN0WE1MQ2F0YWxvZ0lkUGFuZWwgY2F0YWxvZyA9IG5ldyBTZWxlY3RYTUxDYXRhbG9nSWRQYW5lbChiYXNlLCB4bWxDYXRhbG9nKTsKLQotLy8gIERldGVybWluZSBpZiB0aGUgdXNlciB3aXNoZXMgdG8gY3JlYXRlIGEgc2tlbGV0b24gV1NETC4gIElmIHllcywgcHJlc2VudCB0aGUgdXNlciB3aXRoIGlucHV0IGZpZWxkcy4KLSAgICBjcmVhdGVTa2VsZXRvbkNoZWNrQm94ID0gbmV3IEJ1dHRvbihiYXNlLCBTV1QuQ0hFQ0spOwotICAgIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3guc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfQ1JFQVRFX1dTRExfU0tFTEVUT04pOwotICAgIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3guc2V0U2VsZWN0aW9uKHRydWUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY3JlYXRlU2tlbGV0b25DaGVja0JveCwgQVNERWRpdG9yQ1NIZWxwSWRzLldTRExfV0laQVJEX09QVElPTlNfUEFHRV9DUkVBVEVfU0tFTEVUT05fQ0hFQ0tCT1gpOwotICAgIAotICAgIHdzZGxTa2VsZXRvbkdyb3VwID0gbmV3IENvbXBvc2l0ZShiYXNlLCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQyID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQyLm51bUNvbHVtbnMgPSAyOwotICAgIHdzZGxTa2VsZXRvbkdyb3VwLnNldExheW91dChsYXlvdXQyKTsKLQotICAgIEdyaWREYXRhIGRhdGEyID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YTIudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEyLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIHdzZGxTa2VsZXRvbkdyb3VwLnNldExheW91dERhdGEoZGF0YTIpOwotCi0gICBjcmVhdGVMYWJlbCh3c2RsU2tlbGV0b25Hcm91cCwgTWVzc2FnZXMuX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0wpOwotICAgcHJvdG9jb2xDb21ibyA9IG5ldyBDb21ibyh3c2RsU2tlbGV0b25Hcm91cCwgU1dULlJFQURfT05MWSk7Ci0gICBHcmlkRGF0YSBkYXRhQyA9IG5ldyBHcmlkRGF0YSgpOwotICAgZGF0YUMuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICBkYXRhQy5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgIHByb3RvY29sQ29tYm8uc2V0TGF5b3V0RGF0YShkYXRhQyk7Ci0KLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdCgpOwotICAgIGFjdGl2ZVNlcnZpY2VQb2xpY3kgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldEFjdGl2ZVBvbGljeVdpdGhQcm90b2NvbChwcm9qZWN0KTsKLSAgICBTdHJpbmcgZGVmYXVsdFByb3RvY29sTlMgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldERlZmF1bHRCaW5kaW5nKHByb2plY3QsIGFjdGl2ZVNlcnZpY2VQb2xpY3kpOwotICAgIFN0cmluZyBkZWZhdWx0UHJvdG9jb2xMYWJlbCA9IG51bGw7Ci0gICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKGRlZmF1bHRQcm90b2NvbE5TKTsKLSAgICBpZiAoZXh0ZW5zaW9uICE9IG51bGwpCi0gICAgICBkZWZhdWx0UHJvdG9jb2xMYWJlbCA9IGV4dGVuc2lvbi5nZXRMYWJlbCgpOwotCi0gICAgSXRlcmF0b3IgaXQgPSByZWdpc3RyeS5nZXRCaW5kaW5nRXh0ZW5zaW9uTmFtZXMoKS5pdGVyYXRvcigpOwotICAgIGludCBkZWZhdWx0SW5kZXggPSAwOwotICAgIGJvb2xlYW4gZGVmYXVsdEZvdW5kID0gZmFsc2U7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgU3RyaW5nIHByb3RvY29sTmFtZSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLSAgICAgIFN0cmluZyBwcm90b2NvbExhYmVsID0gbnVsbDsKLSAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sTmFtZSk7Ci0gICAgICBpZiAoZXh0ICE9IG51bGwpIHsKLSAgICAgICAgU3RyaW5nIGxhYmVsID0gZXh0LmdldExhYmVsKCk7Ci0gICAgICAgIGlmIChsYWJlbCAhPSBudWxsKSB7Ci0gICAgICAgICAgcHJvdG9jb2xMYWJlbCA9IGxhYmVsOwotICAgICAgICAgIHByb3RvY29sQ29tYm8uYWRkKHByb3RvY29sTGFiZWwpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZGVmYXVsdEZvdW5kICYmIHByb3RvY29sTGFiZWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdEZvdW5kID0gcHJvdG9jb2xMYWJlbC5lcXVhbHMoZGVmYXVsdFByb3RvY29sTGFiZWwpOwotICAgICAgICBpZiAoIWRlZmF1bHRGb3VuZCkgewotICAgICAgICAgICsrZGVmYXVsdEluZGV4OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghZGVmYXVsdEZvdW5kKSB7ICAgIAkKLSAgICAgIGRlZmF1bHRJbmRleCA9IDA7Ci0gICAgfQotCi0gICAgcHJvdG9jb2xDb21iby5hZGRNb2RpZnlMaXN0ZW5lcih0aGlzKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sQ29tYm8sIEFTREVkaXRvckNTSGVscElkcy5XU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfUFJPVE9DT0xfQ09NQk8pOwotCi0gICAgLy8gQ3JlYXRlIFBhZ2VCb29rIGFuZCBwYWdlcy9jb250cm9scyBmb3IgdGhlIFBhZ2VCb29rCi0gICAgcHJvdG9jb2xQYWdlQm9vayA9IG5ldyBQYWdlQm9vayhiYXNlLCBTV1QuTk9ORSk7Ci0gICAgR3JpZERhdGEgZ2RGaWxsID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2RGaWxsLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdkRmlsbC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZEZpbGwudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdkRmlsbC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgcHJvdG9jb2xQYWdlQm9vay5zZXRMYXlvdXREYXRhKGdkRmlsbCk7Ci0KLSAgICBpZiAocHJvdG9jb2xDb21iby5nZXRJdGVtQ291bnQoKSA+IDApIHsKLSAgICAgIFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29sQ29tYm8uZ2V0SXRlbShkZWZhdWx0SW5kZXgpOwotICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvckxhYmVsKHByb3RvY29sKTsKLSAgICAgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBwYWdlID0gZXh0LmdldEJpbmRpbmdDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKTsKLSAgICAgIHBhZ2UuaW5pdChnZW5lcmF0b3IpOwotCi0gICAgICBwcm90b2NvbFBhZ2VCb29rLnNob3dQYWdlKHBhZ2UuZ2V0Q29udHJvbCgpKTsKLSAgICAgIHByb3RvY29sUGFnZUJvb2suc2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgIHByb3RvY29sQ29tYm8uc2VsZWN0KGRlZmF1bHRJbmRleCk7Ci0gICAgICB1cGRhdGVQYWdlQm9vayhwcm90b2NvbCk7Ci0gICAgfQotCi0gICAgd3NkbFNrZWxldG9uR3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKLQotICAgIFdTSVByZWZlcmVuY2VMaW5rID0gbmV3IExpbmsoYmFzZSwgU1dULk5PTkUpOwotICAgIFdTSVByZWZlcmVuY2VMaW5rLnNldFRleHQoIjxBPiIgKyBNZXNzYWdlcy5fV1NJX0NPTVBMSUFOQ0VfTElOS19URVhUICsgIjwvQT4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgV1NJUHJlZmVyZW5jZUxpbmsuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgICB7Ci0gICAgICAgIGdldE5ld1dTRExXaXphcmQoKS5vcGVuUHJvamVjdFdTSVByb3BlcnRpZXMoKTsKLSAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoKTsKLSAgICAgICAgYWN0aXZlU2VydmljZVBvbGljeSA9IFNlcnZpY2VQb2xpY3lIZWxwZXIuZ2V0QWN0aXZlUG9saWN5V2l0aFByb3RvY29sKHByb2plY3QpOwotICAgICAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgV1NJUHJlZmVyZW5jZUxpbmsuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuR1JBQl9WRVJUSUNBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0VORCkpOwotCi0gICAgY3JlYXRlU2tlbGV0b25DaGVja0JveC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoYmFzZSwgQVNERWRpdG9yQ1NIZWxwSWRzLldTRExfV0laQVJEX09QVElPTlNfUEFHRSk7Ci0KLSAgICBzZXRDb250cm9sKGJhc2UpOwotCi0gIH0KLQotICBwcml2YXRlIE5ld1dTRExXaXphcmQgZ2V0TmV3V1NETFdpemFyZCgpCi0gIHsKLSAgICByZXR1cm4gKE5ld1dTRExXaXphcmQpZ2V0V2l6YXJkKCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlRGVmYXVsdERlZmluaXRpb25OYW1lKCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gIkRlZmF1bHROYW1lIjsgLy8kTk9OLU5MUy0xJAotICAgIElQYXRoIHBhdGggPSBnZXROZXdXU0RMV2l6YXJkKCkuZ2V0TmV3RmlsZVBhdGgoKTsKLSAgICBpZiAocGF0aCAhPSBudWxsKQotICAgIHsKLSAgICAgIG5hbWUgPSBwYXRoLnJlbW92ZUZpbGVFeHRlbnNpb24oKS5sYXN0U2VnbWVudCgpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZURlZmF1bHROYW1lc3BhY2VOYW1lKCkKLSAgewotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICBpZiAoIW5hbWVzcGFjZS5lbmRzV2l0aCgiLyIpKSB7IC8vJE5PTi1OTFMtMSQKLSAgICAJbmFtZXNwYWNlID0gbmFtZXNwYWNlLmNvbmNhdCgiLyIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIElQYXRoIHBhdGggPSBnZXROZXdXU0RMV2l6YXJkKCkuZ2V0TmV3RmlsZVBhdGgoKTsKLSAgICBpZiAocGF0aCAhPSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSArPSBwYXRoLnJlbW92ZUZpbGVFeHRlbnNpb24oKS50b1N0cmluZygpICsgIi8iOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkKLSAgewotICAgIHN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7Ci0KLSAgICBpZiAodmlzaWJsZSkKLSAgICB7Ci0gICAgICAvLyBwcmltZSB0aGUgZmllbGRzICAgIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlVGV4dC5zZXRUZXh0KGNvbXB1dGVEZWZhdWx0TmFtZXNwYWNlTmFtZSgpKTsKLSAgICAgIHByZWZpeFRleHQuc2V0VGV4dCgidG5zIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0TmFtZXNwYWNlVGV4dC5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpCi0gIHsKLSAgICByZXR1cm4gcHJlZml4VGV4dC5nZXRUZXh0KCkudHJpbSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZpbml0aW9uTmFtZSgpCi0gIHsKLSAgCXJldHVybiBjb21wdXRlRGVmYXVsdERlZmluaXRpb25OYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gIHsKLSAgICBpZiAoZS53aWRnZXQgPT0gdGFyZ2V0TmFtZXNwYWNlVGV4dCkKLSAgICB7Ci0gICAgICBzdGFydERlbGF5ZWRFdmVudChlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZS53aWRnZXQgPT0gcHJlZml4VGV4dCkKLSAgICB7Ci0gICAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChlLndpZGdldCA9PSBwcm90b2NvbENvbWJvKQotICAgIHsKLSAgICAgIFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29sQ29tYm8uZ2V0VGV4dCgpOwotCi0gICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwocHJvdG9jb2wpOwotICAgICAgZ2VuZXJhdG9yLnNldENvbnRlbnRHZW5lcmF0b3IoQmluZGluZ0dlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKGV4dC5nZXROYW1lc3BhY2UoKSkpOwotICAgICAgdXBkYXRlUGFnZUJvb2socHJvdG9jb2wpOwotICAgICAgc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQYWdlQm9vayhTdHJpbmcgcHJvdG9jb2wpCi0gIHsKLSAgICBpZiAocHJvdG9jb2wgIT0gbnVsbCkKLSAgICB7Ci0JICBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgcGFnZSA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2VNYXAuZ2V0KHByb3RvY29sKTsKLSAgICAgIGlmIChwYWdlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHBhZ2UgPSBjcmVhdGVDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UocHJvdG9jb2wpOwotCi0gICAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwYWdlLmluaXQoZ2VuZXJhdG9yKTsKLSAgICAgICAgICBwYWdlLmNyZWF0ZUNvbnRyb2wocHJvdG9jb2xQYWdlQm9vayk7Ci0gICAgICAgICAgcGFnZU1hcC5wdXQocHJvdG9jb2wsIHBhZ2UpOwotICAgICAgICAgIAotICAgICAgICAgIGlmIChwYWdlIGluc3RhbmNlb2YgQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgewotICAgICAgICAJICAvLyBXZSBzaG91bGQgcHV0IHRoZSBzZXRXaXphcmRQYWdlKCkgbWV0aG9kIGludG8gdGhlIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBJbnRlcmZhY2UKLSAgICAgICAgCSAgKChCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKSBwYWdlKS5zZXRXaXphcmRQYWdlKHRoaXMpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAocGFnZSAhPSBudWxsKQotICAgICAgewotICAgIAkgIHByb3RvY29sUGFnZUJvb2suc2hvd1BhZ2UocGFnZS5nZXRDb250cm9sKCkpOwotICAgIAkgIHByb3RvY29sUGFnZUJvb2subGF5b3V0KCk7Ci0gICAgCSAgcHJvdG9jb2xQYWdlQm9vay5nZXRQYXJlbnQoKS5sYXlvdXQoKTsKLQkJCi0gICAgCSAgcGFnZS5zZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGNyZWF0ZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZShTdHJpbmcgcHJvdG9jb2wpCi0gIHsKLSAgICBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2Ugb3B0aW9uc1BhZ2UgPSBudWxsOwotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Gb3JMYWJlbChwcm90b2NvbCk7Ci0gICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7Ci0gIAkgIG9wdGlvbnNQYWdlID0gZXh0ZW5zaW9uLmdldEJpbmRpbmdDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9wdGlvbnNQYWdlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdXBkYXRlT2NjdXJlZChPYmplY3QgYXJnMSwgT2JqZWN0IGFyZzIpCi0gIHsKLSAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkKLSAgewotICAgIGJvb2xlYW4gcmVhZHkgPSB0cnVlOwotCi0gICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgIHNldE1lc3NhZ2UobnVsbCk7Ci0KLSAgICAvLyB0aGlzLnNldE1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJfVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRSIpLHRoaXMuTk9ORSk7Ci0gICAgLy8gLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gc28gdGhhdCB0aGUgcGFnZSBkb2Vzbid0IGltbWVkaWF0ZWx5IHNob3cgdXAgd2l0aCBhbiBlcnJvcgotICAgIGlmICh0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIGlmIChyZWFkeSkKLSAgICAgIHsKLSAgICAgICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghdmFsaWRhdGVUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlVGV4dC5nZXRUZXh0KCkpKQotICAgIHsKLSAgICAgIHJlYWR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3guZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgaWYgKCFkaXNwbGF5RGlhbG9nTWVzc2FnZXMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVhZHkgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMuc2V0TWVzc2FnZShNZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRSwgTk9ORSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlYWR5OwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZGlzcGxheURpYWxvZ01lc3NhZ2VzKCkKLSAgewotICAgIFN0cmluZyBwcm90b2NvbCA9IGdldFByb3RvY29sKCk7Ci0gICAgaWYgKCEocGFnZU1hcC5nZXQocHJvdG9jb2wpIGluc3RhbmNlb2YgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZVByb3RvY29sKHByb3RvY29sKSkKLSAgICB7Ci0gICAgICBpZiAoZ2V0TWVzc2FnZVR5cGUoKSA9PSBJTWVzc2FnZVByb3ZpZGVyLkVSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBvcHRpb25zUGFnZSA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2VNYXAuZ2V0KHByb3RvY29sKTsKLSAgICBJRmlsZSB0YXJnZXRGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ld0ZpbGVDcmVhdGlvblBhZ2UuZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQobmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRGaWxlTmFtZSgpKSk7Ci0KLSAgICBpZiAob3B0aW9uc1BhZ2UgaW5zdGFuY2VvZiBCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKQotICAgIHsKLSAgICAgICgoQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgb3B0aW9uc1BhZ2UpLnNldFRhcmdldElGaWxlKHRhcmdldEZpbGUpOwotCi0gICAgICBTdHJpbmcgbWVzc2FnZSA9ICgoSU1lc3NhZ2VQcm92aWRlcikgb3B0aW9uc1BhZ2UpLmdldE1lc3NhZ2UoKTsKLSAgICAgIGludCBtZXNzYWdlVHlwZSA9ICgoSU1lc3NhZ2VQcm92aWRlcikgb3B0aW9uc1BhZ2UpLmdldE1lc3NhZ2VUeXBlKCk7Ci0KLSAgICAgIGlmIChtZXNzYWdlVHlwZSA9PSBJTWVzc2FnZVByb3ZpZGVyLk5PTkUpCi0gICAgICB7Ci0gICAgICAgIHNldE1lc3NhZ2UoTWVzc2FnZXMuX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEUsIE5PTkUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzZXRNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VUeXBlKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG1lc3NhZ2VUeXBlID09IElNZXNzYWdlUHJvdmlkZXIuRVJST1IpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUHJlZml4KFN0cmluZyBwcmVmaXgpCi0gIHsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gVmFsaWRhdGVIZWxwZXIuY2hlY2tYTUxQcmVmaXgocHJlZml4KTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UgPT0gbnVsbCB8fCBlcnJvck1lc3NhZ2UubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBwcm90b2NvbCBieSBjaGVja2luZyBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgd3NpIHBvbGljeSByZXF1aXJlcyBvcgotICAgKiBzdWdnZXN0cyBhIGRlZmF1bHQgcHJvdG9jb2wgYW5kIHRoYXQgcHJvdG9jb2wgaXMgbm90IHRoZSBzYW1lIGFzIHRoZQotICAgKiBjdXJyZW50bHkgc2VsZWN0ZWQgcHJvdG9jb2wKLSAgICogCi0gICAqIEBwYXJhbSBwcm90b2NvbAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVQcm90b2NvbChTdHJpbmcgcHJvdG9jb2wpCi0gIHsKLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24gPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JMYWJlbChwcm90b2NvbCk7Ci0gICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBleHRlbnNpb24uZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KCk7Ci0gICAgICAgIGlmIChhY3RpdmVTZXJ2aWNlUG9saWN5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBnZXQgZGVmYXVsdCBiaW5kaW5nIGFuZCBjb21wYXJlIGlmIHNhbWUgb3Igbm90Ci0gICAgICAgICAgU3RyaW5nIGRlZmF1bHRCaW5kaW5nID0gU2VydmljZVBvbGljeUhlbHBlci5nZXREZWZhdWx0QmluZGluZyhwcm9qZWN0LCBhY3RpdmVTZXJ2aWNlUG9saWN5KTsKLSAgICAgICAgICBpZiAoIWRlZmF1bHRCaW5kaW5nLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSA9IFNlcnZpY2VQb2xpY3lIZWxwZXIuZ2V0TWVzc2FnZVNldmVyaXR5KHByb2plY3QsIGFjdGl2ZVNlcnZpY2VQb2xpY3kpOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2VUeXBlID09IElNZXNzYWdlUHJvdmlkZXIuRVJST1IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIGlmIG5vdCBzYW1lLCBzZXQgZXJyb3IgbWVzc2FnZQotICAgICAgICAgICAgICAvLyBwdXQgdXAgYW4gZXJyb3IgbWVzc2FnZQotICAgICAgICAgICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKGRlZmF1bHRCaW5kaW5nKTsKLSAgICAgICAgICAgICAgaWYgKGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG4gPSBleHQuZ2V0TGFiZWwoKTsKLSAgICAgICAgICAgICAgICBzZXRNZXNzYWdlKE5MUy5iaW5kKE1lc3NhZ2VzLl9FUlJPUl9XU0lfQ09NUExJQU5DRV9QUk9UT0NPTCwgbmV3IFN0cmluZ1tdIHsgbiB9KSwgSU1lc3NhZ2VQcm92aWRlci5FUlJPUik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobWVzc2FnZVR5cGUgPT0gSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBwdXQgdXAgYSB3YXJuaW5nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvck5hbWVzcGFjZShkZWZhdWx0QmluZGluZyk7Ci0gICAgICAgICAgICAgIGlmIChleHQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBuID0gZXh0LmdldExhYmVsKCk7Ci0gICAgICAgICAgICAgICAgc2V0TWVzc2FnZShOTFMuYmluZChNZXNzYWdlcy5fV0FSTl9XU0lfQ09NUExJQU5DRV9QUk9UT0NPTCwgbmV3IFN0cmluZ1tdIHsgbiB9KSwgSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVYTUxOYW1lKFN0cmluZyB4bWxOYW1lKQotICB7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFZhbGlkYXRlSGVscGVyLmNoZWNrWE1MTmFtZSh4bWxOYW1lKTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UgPT0gbnVsbCB8fCBlcnJvck1lc3NhZ2UubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc2V0RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVUYXJnZXROYW1lc3BhY2UoU3RyaW5nIG5zKQotICB7Ci0gICAgYm9vbGVhbiB0ZXN0ID0gdHJ1ZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgCW5ldyBVUkkobnMpOwotLy8gICAgICBVUkkgdGVzdFVSSSA9IG5ldyBVUkkobnMpOwotICAgICAgLy8gICAgICBpZiAoIXRlc3RVUkkuaXNHZW5lcmljVVJJKCkpCi0gICAgICAvLyAgICAgIHsKLSAgICAgIC8vICAgICAgICBzZXRFcnJvck1lc3NhZ2UoV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExTdHJpbmcoIl9VSV9FUlJPUl9OQU1FU1BBQ0VfSU5WQUxJRCIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgLy8gICAgICAgIHRlc3QgPSBmYWxzZTsKLSAgICAgIC8vICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8JCQlTdHJpbmcgZXJyb3JNZXNzYWdlID0gVmFsaWRhdGVIZWxwZXIuY2hlY2tYTUxOYW1lKG5zKTsKLSAgICAgIC8vCQkJaWYgKGVycm9yTWVzc2FnZSA9PSBudWxsIHx8IGVycm9yTWVzc2FnZS5sZW5ndGgoKSA9PSAwKQotICAgICAgLy8JCQl7Ci0gICAgICAvLwkJCQl0ZXN0ID0gdHJ1ZTsKLSAgICAgIC8vCQkJfQotICAgICAgLy8JCQllbHNlCi0gICAgICAvLwkJCXsKLSAgICAgIHNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5fVUlfRVJST1JfTkFNRVNQQUNFX0lOVkFMSUQpOyAvLyROT04tTkxTLTEkCi0gICAgICB0ZXN0ID0gZmFsc2U7Ci0gICAgICAvLwkJCX0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGVzdDsKLSAgfQotCi0gIC8qCi0gICAqIHByaXZhdGUgYm9vbGVhbiBhcmVQcmVmaXhlc1VuaXF1ZUFuZFZhbGlkKCkgeyBqYXZhLnV0aWwuTGlzdCBpbmZvTGlzdCA9Ci0gICAqIG5hbWVzcGFjZUluZm8uZ2V0TmFtZXNwYWNlSW5mb0xpc3QoKTsgamF2YS51dGlsLkxpc3QgY2hlY2tlZExpc3QgPQotICAgKiBuYW1lc3BhY2VJbmZvLmdldE5hbWVzcGFjZUNoZWNrZWRMaXN0KCk7Ci0gICAqIAotICAgKiBWZWN0b3IgcHJlZml4TGlzdCA9IG5ldyBWZWN0b3IoKTsgYm9vbGVhbiB0ZXN0ID0gdHJ1ZTsgYm9vbGVhbiBpc09uZUJsYW5rID0KLSAgICogZmFsc2U7Ci0gICAqIAotICAgKiBTdHJpbmcgY3VycmVudFByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpLnRyaW0oKTsgaWYKLSAgICogKGN1cnJlbnRQcmVmaXgubGVuZ3RoKCkgPT0gMCkgeyBpc09uZUJsYW5rID0gdHJ1ZTsgfSBlbHNlIHsgaWYKLSAgICogKHZhbGlkYXRlUHJlZml4KGN1cnJlbnRQcmVmaXgpKSB7IHByZWZpeExpc3QuYWRkKGN1cnJlbnRQcmVmaXgpOyB9IGVsc2UgewotICAgKiBzZXRFcnJvck1lc3NhZ2UoV1NETEVkaXRvclBsdWdpbi5nZXRXU0RMU3RyaW5nKCJfVUlfRVJST1JfUFJFRklYX0lTX0lOVkFMSUQiLAotICAgKiBjdXJyZW50UHJlZml4KSk7IC8vJE5PTi1OTFMtMSQgcmV0dXJuIGZhbHNlOyB9IH0KLSAgICogCi0gICAqIGZvciAoaW50IGkgPSAwOyBpIDwgaW5mb0xpc3Quc2l6ZSgpOyBpKyspIHsgTmFtZXNwYWNlSW5mbyBpbmZvID0KLSAgICogKE5hbWVzcGFjZUluZm8paW5mb0xpc3QuZ2V0KGkpOyBpZgotICAgKiAoKChTdHJpbmcpY2hlY2tlZExpc3QuZ2V0KGkpKS5lcXVhbHMoInRydWUiKSkgLy8kTk9OLU5MUy0xJCB7IFN0cmluZwotICAgKiBhUHJlZml4ID0gaW5mby5wcmVmaXgudHJpbSgpOyBpZiAoYVByZWZpeC5sZW5ndGgoKSA+IDApIHsgaWYKLSAgICogKCFwcmVmaXhMaXN0LmNvbnRhaW5zKGFQcmVmaXgpKSB7IGlmICh2YWxpZGF0ZVByZWZpeChhUHJlZml4KSkgewotICAgKiBwcmVmaXhMaXN0LmFkZChhUHJlZml4KTsgfSBlbHNlIHsKLSAgICogc2V0RXJyb3JNZXNzYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0V1NETFN0cmluZygiX1VJX0VSUk9SX1BSRUZJWF9JU19JTlZBTElEIiwKLSAgICogaW5mby5wcmVmaXgpKTsgLy8kTk9OLU5MUy0xJCB0ZXN0ID0gZmFsc2U7IGJyZWFrOyB9IH0gZWxzZSB7Ci0gICAqIHNldEVycm9yTWVzc2FnZShXU0RMRWRpdG9yUGx1Z2luLmdldFdTRExTdHJpbmcoIl9VSV9FUlJPUl9QUkVGSVhfSVNfQV9EVVBMSUNBVEUiLAotICAgKiBpbmZvLnByZWZpeCkpOyAvLyROT04tTkxTLTEkIHRlc3QgPSBmYWxzZTsgYnJlYWs7IH0gfSBlbHNlIHsgaWYKLSAgICogKCFpc09uZUJsYW5rKSB7IGlzT25lQmxhbmsgPSB0cnVlOyB9IGVsc2UgewotICAgKiBzZXRFcnJvck1lc3NhZ2UoV1NETEVkaXRvclBsdWdpbi5nZXRXU0RMU3RyaW5nKCJfVUlfRVJST1JfTU9SRV9USEFOX09ORV9QUkVGSVhfSVNfQkxBTksiKSk7Ci0gICAqIC8vJE5PTi1OTFMtMSQgdGVzdCA9IGZhbHNlOyBicmVhazsgfSB9IH0gfSByZXR1cm4gdGVzdDsgfQotICAgKi8KLQotICBwcm90ZWN0ZWQgRGVsYXllZEV2ZW50IGRlbGF5ZWRUYXNrOwotCi0gIHByb3RlY3RlZCB2b2lkIHN0YXJ0RGVsYXllZEV2ZW50KE1vZGlmeUV2ZW50IGUpCi0gIHsKLSAgICBpZiAoZGVsYXllZFRhc2sgPT0gbnVsbCB8fCBkZWxheWVkVGFzay5nZXRFdmVudCgpID09IG51bGwpCi0gICAgewotICAgICAgZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0gICAgICBkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsIGRlbGF5ZWRUYXNrKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIE1vZGlmeUV2ZW50IGRlbGF5ZWRFdmVudCA9IGRlbGF5ZWRUYXNrLmdldEV2ZW50KCk7Ci0KLSAgICAgIGlmIChlLndpZGdldCA9PSBkZWxheWVkRXZlbnQud2lkZ2V0KQotICAgICAgewotICAgICAgICAvLyBzYW1lIGV2ZW50LCBqdXN0IGRpZmZlcmVudCBkYXRhLCBkZWxheSBuZXcgZXZlbnQKLSAgICAgICAgZGVsYXllZFRhc2suc2V0RXZlbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBkZWxheWVkVGFzayA9IG5ldyBEZWxheWVkRXZlbnQoKTsKLSAgICAgIGRlbGF5ZWRUYXNrLnNldEV2ZW50KGUpOwotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkudGltZXJFeGVjKDUwMCwgZGVsYXllZFRhc2spOwotICAgIH0KLSAgfQotCi0gIGNsYXNzIERlbGF5ZWRFdmVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0gIHsKLSAgICBwcm90ZWN0ZWQgTW9kaWZ5RXZlbnQgZXZlbnQ7Ci0KLSAgICAvKgotICAgICAqIEBzZWUgUnVubmFibGUjcnVuKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgIHsKLSAgICAgIGlmIChldmVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICAgICAgICBldmVudCA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE1vZGlmeUV2ZW50IGdldEV2ZW50KCkKLSAgICB7Ci0gICAgICByZXR1cm4gZXZlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RXZlbnQoTW9kaWZ5RXZlbnQgZXZlbnQpCi0gICAgewotICAgICAgdGhpcy5ldmVudCA9IGV2ZW50OwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JICBpZiAoZS53aWRnZXQgPT0gY3JlYXRlU2tlbGV0b25DaGVja0JveCkgewotICAJIAlpZiAoY3JlYXRlU2tlbGV0b25DaGVja0JveC5nZXRTZWxlY3Rpb24oKSkgewotICAJIAkJd3NkbFNrZWxldG9uR3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKLSAgCSAJCXByb3RvY29sUGFnZUJvb2suc2V0VmlzaWJsZSh0cnVlKTsKLSAgCSAJfQotICAJIAllbHNlIHsKLSAgCSAJCXdzZGxTa2VsZXRvbkdyb3VwLnNldFZpc2libGUoZmFsc2UpOwotICAJIAkJcHJvdG9jb2xQYWdlQm9vay5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgCSAJfQotICAJIAlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICAJIH0KLSAgfQotCi0gIENvbXBvc2l0ZSB3c2RsU2tlbGV0b25Hcm91cDsKLQotICBCdXR0b24gY3JlYXRlU2tlbGV0b25DaGVja0JveDsKLQotICBwcml2YXRlIExhYmVsIGNyZWF0ZUxhYmVsKENvbXBvc2l0ZSBjb21wLCBTdHJpbmcgbGFiZWxTdHJpbmcpIHsKLSAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLCBTV1QuTEVGVCk7Ci0gICAgbGFiZWwuc2V0VGV4dChsYWJlbFN0cmluZyk7Ci0gICAgR3JpZERhdGEgbnNEYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgbnNEYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGxhYmVsLnNldExheW91dERhdGEobnNEYXRhKTsKLSAgICAKLSAgICByZXR1cm4gbGFiZWw7Ci0gIH0KLQotICBwdWJsaWMgVmVjdG9yIGdldE5hbWVzcGFjZUluZm8oKSB7Ci0JCVZlY3RvciBuYW1lc3BhY2VzID0gbmV3IFZlY3RvcigpOwotICAJCQotICAJCS8vIEFkZCBEZWZhdWx0IE5hbWVzcGFjZXMKLQkJTmFtZXNwYWNlSW5mbyBpbmZvMSA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0JCWluZm8xLnByZWZpeCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCQlpbmZvMS51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOyAvLyROT04tTkxTLTEkCi0JCW5hbWVzcGFjZXMuYWRkRWxlbWVudChpbmZvMSk7Ci0JCQotCQlOYW1lc3BhY2VJbmZvIGluZm84ID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLQkJaW5mbzgucHJlZml4ID0gInhzZCI7IC8vJE5PTi1OTFMtMSQKLQkJaW5mbzgudXJpID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsgLy8kTk9OLU5MUy0xJAotCQluYW1lc3BhY2VzLmFkZEVsZW1lbnQoaW5mbzgpOwotCi0JCXJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0Q3JlYXRlU2tlbGV0b25Cb29sZWFuKCkgewotICAJcmV0dXJuIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3guZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkgewotICAJcmV0dXJuIHByb3RvY29sQ29tYm8uZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNTb2FwRG9jTGl0ZXJhbFByb3RvY29sKCkgewotCSAgLy8gV2UgbmVlZCB0byByZXZpc2l0IHRoaXMuLi4uICBDYW4gd2UgbWFrZSB0aGlzIGNvZGUgbW9yZSBnZW5lcmljLi4uCi0JICAvLyBXZWUgbmVlZCB0aGlzIG1ldGhvZCBiZWNhdXNlIHRoZSBOZXdXU0RMV2l6YXJkIG5lZWRzIHRvIGtub3cgaWYgaXQgc2hvdWxkIGNyZWF0ZSB0aGUgbmV3Ci0JICAvLyBXU0RMIHdpdGggYSBkb2MtbGl0ZXJhbCBwYXR0ZXJuIChBIFdTREwgUGFydCByZWZlcmVuY2luZyBhbiBYU0QgRWxlbWVudCkKLQkgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBvcHRpb25zUGFnZSA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2VNYXAuZ2V0KGdldFByb3RvY29sKCkpOwotCSAgaWYgKG9wdGlvbnNQYWdlIGluc3RhbmNlb2YgSVNvYXBTdHlsZUluZm8pIHsKLQkJICByZXR1cm4gKChJU29hcFN0eWxlSW5mbykgb3B0aW9uc1BhZ2UpLmlzRG9jdW1lbnRMaXRlcmFsUGF0dGVybigpOwotCSAgfQotCi0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcHJvamVjdCB0aGUgY3VycmVudCBjb250YWluaW5nIHByb2plY3QKLSAgICogCi0gICAqIEByZXR1cm4gSVByb2plY3Qgb2JqZWN0LiBJZiBwYXRoIGlzIDxjb2RlPm51bGw8L2NvZGU+IHRoZSByZXR1cm4gdmFsdWUgaXMKLSAgICogICAgICAgICBhbHNvIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKi8KLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgSVBhdGggcGF0aCA9IG5ld0ZpbGVDcmVhdGlvblBhZ2UuZ2V0Q29udGFpbmVyRnVsbFBhdGgoKTsKLSAgICBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQotICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHdvcmtzcGFjZS52YWxpZGF0ZVBhdGgocGF0aC50b1N0cmluZygpLCBJUmVzb3VyY2UuUFJPSkVDVCkuaXNPSygpKQotICAgICAgewotICAgICAgICBwcm9qZWN0ID0gd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KHBhdGgudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByb2plY3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCkuZ2V0UHJvamVjdCgpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwcm9qZWN0OwotICB9Ci0KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFNlcnZpY2VQb2xpY3koKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNlcnZpY2VQb2xpY3k7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvV1NETE5ld0ZpbGVQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvV1NETE5ld0ZpbGVQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNWZiMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFdTRExOZXdGaWxlUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UKLXsKLSAgcHVibGljIFdTRExOZXdGaWxlUGFnZShJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIAotICB7Ci0gICAgc3VwZXIoTWVzc2FnZXMuX1VJX1RJVExFX05FV19XU0RMX0ZJTEUsIHNlbGVjdGlvbik7IC8vJE5PTi1OTFMtMSQKLSAgICBzZXRUaXRsZShNZXNzYWdlcy5fVUlfVElUTEVfTkVXX1dTRExfRklMRSk7IC8vJE5PTi1OTFMtMSQKLSAgICBzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5fVUlfTEFCRUxfQ1JFQVRFX05FV19XU0RMX0ZJTEUpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIAotICB7Ci0gICAgLy8gaW5oZXJpdCBkZWZhdWx0IGNvbnRhaW5lciBhbmQgbmFtZSBzcGVjaWZpY2F0aW9uIHdpZGdldHMKLSAgICBzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7Ci0gICAgdGhpcy5zZXRGaWxlTmFtZShjb21wdXRlRGVmYXVsdEZpbGVOYW1lKCkpOwotCi0gICAgc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkKLSAgewotICAgIFBhdGggbmV3TmFtZSA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpOwotICAgIFN0cmluZyBmdWxsRmlsZU5hbWUgPSBnZXRGaWxlTmFtZSgpOwotICAgIFN0cmluZyBleHRlbnNpb24gPSBuZXdOYW1lLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgICBpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIWV4dGVuc2lvbi5lcXVhbHNJZ25vcmVDYXNlKCJ3c2RsIikpICAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLl9VSV9FUlJPUl9GSUxFX01VU1RfRU5EX1dJVEhfV1NETCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICBzZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0gICAgfQotCi0gICAgLy8gY2hlY2sgZm9yIGZpbGUgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUKLSAgICBTdHJpbmcgc2FtZU5hbWUgPSBleGlzdHNGaWxlQW55Q2FzZShmdWxsRmlsZU5hbWUpOwotICAgIGlmIChzYW1lTmFtZSAhPSBudWxsKSAKLSAgICB7Ci0vLyAgICAgICBTdHJpbmcgcXVhbGlmaWVkRmlsZU5hbWUgPSBnZXRDb250YWluZXJGdWxsUGF0aCgpLnRvU3RyaW5nKCkgKyAnLycgKyBmdWxsRmlsZU5hbWU7Ci0gICAgICAgc2V0RXJyb3JNZXNzYWdlKE5MUy5iaW5kKE1lc3NhZ2VzLl9VSV9FUlJPUl9GSUxFX0FMUkVBRFlfRVhJU1RTLCBzYW1lTmFtZSkpOyAvLyROT04tTkxTLTEkCi0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIAotICAgIHJldHVybiBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZGVmYXVsdE5hbWUgPSAiTmV3V1NETEZpbGUiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBTdHJpbmcgZGVmYXVsdEZpbGVFeHRlbnNpb24gPSAiLndzZGwiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBTdHJpbmdbXSBmaWx0ZXJFeHRlbnNpb25zID0geyAiKi53c2RsIn07IC8vJE5PTi1OTFMtMSQKLQotCi0gIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZURlZmF1bHRGaWxlTmFtZSgpCi0gIHsKLSAgICBpbnQgY291bnQgPSAwOwotICAgIFN0cmluZyBmaWxlTmFtZSA9IGRlZmF1bHROYW1lICsgZGVmYXVsdEZpbGVFeHRlbnNpb247Ci0gICAgSVBhdGggY29udGFpbmVyRnVsbFBhdGggPSBnZXRDb250YWluZXJGdWxsUGF0aCgpOwotICAgIGlmIChjb250YWluZXJGdWxsUGF0aCAhPSBudWxsKQotICAgIHsKLSAgICAgIHdoaWxlICh0cnVlKQotICAgICAgewotICAgICAgICBJUGF0aCBwYXRoID0gY29udGFpbmVyRnVsbFBhdGguYXBwZW5kKGZpbGVOYW1lKTsKLSAgICAgICAgLy8gaWYgKFdvcmtiZW5jaFV0aWxpdHkuZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmV4aXN0cyhwYXRoKSkKLSAgICAgICAgaWYgKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZXhpc3RzKHBhdGgpKQotICAgICAgICB7Ci0gICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICBmaWxlTmFtZSA9IGRlZmF1bHROYW1lICsgY291bnQgKyBkZWZhdWx0RmlsZUV4dGVuc2lvbjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmlsZU5hbWU7Ci0gIH0KLQotICAvLyByZXR1cm5zIHRydWUgaWYgZmlsZSBvZiBzcGVjaWZpZWQgbmFtZSBleGlzdHMgaW4gYW55IGNhc2UgZm9yIHNlbGVjdGVkIGNvbnRhaW5lcgotICBwcm90ZWN0ZWQgU3RyaW5nIGV4aXN0c0ZpbGVBbnlDYXNlKFN0cmluZyBmaWxlTmFtZSkKLSAgewotICAgIGlmICggKGdldENvbnRhaW5lckZ1bGxQYXRoKCkgIT0gbnVsbCkgJiYgKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuaXNFbXB0eSgpID09IGZhbHNlKQotICAgICAgICAgICYmIChmaWxlTmFtZS5jb21wYXJlVG8oIiIpICE9IDApKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgLy9sb29rIHRocm91Z2ggYWxsIHJlc291cmNlcyBhdCB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciAtIGNvbXBhcmUgaW4gdXBwZXIgY2FzZQotICAgICAgSVJlc291cmNlIHBhcmVudCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcihnZXRDb250YWluZXJGdWxsUGF0aCgpKTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotICAgICAgewotICAgICAgICBJQ29udGFpbmVyIGNvbnRhaW5lciA9IChJQ29udGFpbmVyKSBwYXJlbnQ7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSVJlc291cmNlW10gbWVtYmVycyA9IGNvbnRhaW5lci5tZW1iZXJzKCk7Ci0gICAgICAgICAgU3RyaW5nIGVudGVyZWRGaWxlVXBwZXIgPSBmaWxlTmFtZS50b1VwcGVyQ2FzZSgpOwotICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxtZW1iZXJzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyByZXNvdXJjZVVwcGVyTmFtZSA9IG1lbWJlcnNbaV0uZ2V0TmFtZSgpLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2VVcHBlck5hbWUuZXF1YWxzKGVudGVyZWRGaWxlVXBwZXIpKQotICAgICAgICAgICAgeyAgCi0gICAgICAgICAgICAgIHJldHVybiBtZW1iZXJzW2ldLmdldE5hbWUoKTsgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3hzZC9YU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC94c2QvWFNETm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNiMDU5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3hzZC9YU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC54c2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkYXB0ZXJzLkNhdGVnb3J5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBYU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxPYmplY3QoT2JqZWN0IHBhcmVudE1vZGVsT2JqZWN0LCBFbGVtZW50W10gZWxlbWVudENoYWluLCBpbnQgc3RhcnQsIGludFtdIGVuZCkKLSAgeyAgIAotICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotICAgIGlmIChwYXJlbnRNb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KXBhcmVudE1vZGVsT2JqZWN0OwotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldFNjaGVtYSgpOwotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgeyAgICAgICAgICAKLSAgICAgICAgRWxlbWVudCB0YXJnZXRFbGVtZW50ID0gZWxlbWVudENoYWluW2VsZW1lbnRDaGFpbi5sZW5ndGggLSAxXTsKLSAgICAgICAgcmVzdWx0ID0gc2NoZW1hLmdldENvcnJlc3BvbmRpbmdDb21wb25lbnQodGFyZ2V0RWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHBhcmVudE1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnlBZGFwdGVyKQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQ2F0ZWdvcnlBZGFwdGVyKXBhcmVudE1vZGVsT2JqZWN0KS5nZXRYU0RTY2hlbWEoKTsKLSAgICB9Ci0vLyAgICBlbHNlIGlmIChwYXJlbnRNb2RlbE9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5KQotLy8gICAgewotLy8gICAgICByZXN1bHQgPSAoKENhdGVnb3J5KXBhcmVudE1vZGVsT2JqZWN0KS5nZXRYU0RTY2hlbWEoKTsKLS8vICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXROb2RlKE9iamVjdCBtb2RlbE9iamVjdCkKLSAgeyAgICAgICAgCi0gICAgTm9kZSBub2RlID0gbnVsbDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7ICAgICAgICAgICAKLSAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KW1vZGVsT2JqZWN0OwotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldFNjaGVtYSgpOwotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgewotICAgICAgICBub2RlID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9ICAgICAgICAKLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KQotICAgIHsKLSAgICAgIG5vZGUgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KW1vZGVsT2JqZWN0KS5nZXRFbGVtZW50KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnlBZGFwdGVyKQotICAgIHsKLSAgICAgIG5vZGUgPSAoKENhdGVnb3J5QWRhcHRlciltb2RlbE9iamVjdCkuZ2V0WFNEU2NoZW1hKCkuZ2V0RWxlbWVudCgpOwotICAgIH0KLS8vICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnkpCi0vLyAgICB7Ci0vLyAgICAgIG5vZGUgPSAoKENhdGVnb3J5KW1vZGVsT2JqZWN0KS5nZXRYU0RTY2hlbWEoKS5nZXRFbGVtZW50KCk7Ci0vLyAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5vZGU7Ci0gIH0gICAgICAKLX0gCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvckNTSGVscElkcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RFZGl0b3JDU0hlbHBJZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkzMzBlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvckNTSGVscElkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0RFZGl0b3JDU0hlbHBJZHMgewotCXByaXZhdGUgc3RhdGljIFN0cmluZyBwbHVnaW5JZCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS4iOyAvLyROT04tTkxTLTEkCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JTmV3IFdTREwgV2l6YXJkIC0gT3B0aW9ucyBwYWdlOgotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfV0laQVJEX09QVElPTlNfUEFHRV9UTlNfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDAwMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfUFJFRklYX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwMDEiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX0NSRUFURV9TS0VMRVRPTl9DSEVDS0JPWCA9IHBsdWdpbklkICsgIndzZGx1MDAwMiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfUFJPVE9DT0xfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMDMiOyAvLyROT04tTkxTLTEkCi0KLS8vCVNvYXAgQmluZGluZyBPcHRpb25zCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRE9DX0xJVF9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDAxMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBSUENfTElUX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDExIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJQQ19FTkNPREVEX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDEyIjsgLy8kTk9OLU5MUy0xJAotCi0vLwlIVFRQIEJpbmRpbmcgT3B0aW9ucwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEhUVFBfR0VUX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDEzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEhUVFBfUE9TVF9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDAxNCI7IC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBEZXNpZ24gVmlldwotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfREVTSUdOX1ZJRVdfU0VSVklDRV9PQkpFQ1QgPSBwbHVnaW5JZCArICJ3c2RsdTAwMjAiOyAgIC8vICBTZXJ2aWNlIE9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiB3c2RsdTAwMjAgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfREVTSUdOX1ZJRVdfQklORElOR19PQkpFQ1QgPSBwbHVnaW5JZCArICJ3c2RsdTAwMjEiOyAgIC8vICBCaW5kaW5nIE9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiB3c2RsdTAwMjEgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfREVTSUdOX1ZJRVdfUE9SVFRZUEVfT0JKRUNUID0gcGx1Z2luSWQgKyAid3NkbHUwMDIyIjsgICAvLyAgUG9ydFR5cGUgT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gd3NkbHUwMDIyIC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBPdXRsaW5lIFZpZXcKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX09VVExJTkVfVklFV19HUk9VUCA9IHBsdWdpbklkICsgIndzZGx1MDAyMyI7ICAgLy8gIEltcG9ydHMsIFR5cGVzLCBTZXJ2aWNlcywgQmluZGluZ3MsIFBvcnQgVHlwZXMsIE1lc3NhZ2VzIChncm91cGVkIHRvZ2V0aGVyKSAgICAgICAgICAgICAtLT4gd3NkbHUwMDIzIC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBQb3J0IFdpemFyZAotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBPUlRfV0laQVJEID0gcGx1Z2luSWQgKyAid3NkbHUwMDMwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBPUlRfV0laQVJEX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDAzMSI7ICAgLy8gIG5vdCB1c2VkIC0gZHVwIGJlbG93IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQT1JUX1dJWkFSRF9CSU5ESU5HX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMDMyIjsgICAvLyAgbm90IHVzZWQgLSBkdXAgYmVsb3cgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBPUlRfV0laQVJEX1BST1RPQ09MX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMDMzIjsgICAvLyAgbm90IHVzZWQgLSBkdXAgYmVsb3cgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIEdlbmVyYXRlIEJpbmRpbmcgV2l6YXJkCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQklORElOR19XSVpBUkQgPSBwbHVnaW5JZCArICJ3c2RsdTAwNDAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPVE9DT0xfQ09NUE9ORU5UX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDA0MSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9DT01QT05FTlRfUkVGX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMDQyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1RPQ09MX0NPTVBPTkVOVF9QUk9UT0NPTF9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDA0MyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBwUk9UT0NPTF9DT01QT05FTlRfT1ZFUldSSVRFX0NIRUNLQk9YID0gcGx1Z2luSWQgKyAid3NkbHUwMDQ0IjsgLy8kTk9OLU5MUy0xJAotCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBFZGl0IE5hbWVzcGFjZXMgRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA1MCI7ICAgLy8gIEVkaXQgTmFtZXNwYWNlcyBEaWFsb2cgICAgICAgICAgICAgICAgICAiZGlhbG9nIiAgICAgICAgLS0+IHdzZGx1MDA1MCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRURJVF9OU19ESUFMT0dfVE5TX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwNTEiOyAgIC8vICBUYXJnZXQgTmFtZXNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgInRleHQiICAgICAgICAgIC0tPiB3c2RsdTAwNTEgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVESVRfTlNfRElBTE9HX0RFQ0xBUkFUSU9OU19UQUJMRSA9IHBsdWdpbklkICsgIndzZGx1MDA1MiI7ICAgLy8gIE5hbWVzcGFjZSBEZWNsYXJhdGlvbnMgICAgICAgICAgICAgICAgICAidGFibGUiICAgICAgICAgLS0+IHdzZGx1MDA1MiAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPR19BRERfQlVUVE9OID0gcGx1Z2luSWQgKyAid3NkbHUwMDUzIjsgICAvLyAgQWRkLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoIGJ1dHRvbiIgICAtLT4gd3NkbHUwMDUzIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPR19FRElUX0JVVFRPTiA9IHBsdWdpbklkICsgIndzZGx1MDA1NCI7ICAgLy8gIEVkaXQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCBidXR0b24iICAgLS0+IHdzZGx1MDA1NCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRURJVF9OU19ESUFMT0dfREVMRVRFX0JVVFRPTiA9IHBsdWdpbklkICsgIndzZGx1MDA1NSI7ICAgLy8gIERlbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCBidXR0b24iICAgLS0+IHdzZGx1MDA1NSAvLyROT04tTkxTLTEkCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gQWRkIE5hbWVzcGFjZSBEZWNsYXJhdGlvbnMgRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTCA9IHBsdWdpbklkICsgIndzZGx1MDA2MCI7ICAgLy8gIEFkZCBOYW1lc3BhY2UgRGVjbGFyYXRpb25zIERpYWxvZyAgICAgICAiZGlhbG9nIiAgICAgICAgLS0+IHdzZGx1MDA2MCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfU0VMRUNUX1JFR19OU19SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDA2MSI7ICAgLy8gIFNlbGVjdCBGcm9tIFJlZ2lzdGVyZWQgTmFtZXNwYWNlcyAgICAgICAicmFkaW8iICAgICAgICAgLS0+IHdzZGx1MDA2MSAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfU1BFQ0lGWV9ORVdfTlNfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAwNjIiOyAgIC8vICBTcGVjaWZ5IE5ldyBOYW1lc3BhY2UgICAgICAgICAgICAgICAgICAgInJhZGlvIiAgICAgICAgIC0tPiB3c2RsdTAwNjIgLy8kTk9OLU5MUy0xJAotCi0JLy8gUmVnaXN0ZXJlZCBOYW1lc3BhY2VzOgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX1NFTEVDVF9OU19UT19BRERfVEFCTEUgPSBwbHVnaW5JZCArICJ3c2RsdTAwNjMiOyAgIC8vICBTZWxlY3QgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgdG8gYWRkICJ0YWJsZSIgICAgICAgIC0tPiB3c2RsdTAwNjMgLy8kTk9OLU5MUy0xJAotCi0JLy8gTmV3IE5hbWVzcGFjZToKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9QUkVGSVhfVEVYVCA9IHBsdWdpbklkICsgIiI7ICAgLy8gIFByZWZpeDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDY0IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9OQU1FU1BBQ0VfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAiIjsgICAvLyAgTmFtZXNwYWNlIE5hbWU6ICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiAgICAgICAgICAtLT4oQ09NTU9OKSB3c2RsdTAwNjUgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX0xPQ0FUSU9OX0hJTlRfVEVYVCA9IHBsdWdpbklkICsgIiI7ICAgLy8gIExvY2F0aW9uIEhpbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDY2IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9CUk9XU0VfQlVUVE9OID0gcGx1Z2luSWQgKyAiIjsgICAvLyAgQnJvd3NlLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoIGJ1dHRvbiIgICAtLT4oQ09NTU9OKSB3c2RsdTAwNjcgLy8kTk9OLU5MUy0xJAotCQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gTmV3IE5hbWVzcGFjZSBJbmZvcm1hdGlvbiBEaWFsb2cgLS0tIGNvbW1vbi51aQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19OQU1FU1BBQ0VfSU5GT19ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwNjgiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBOQU1FU1BBQ0VfTkFNRSA9IHBsdWdpbklkICsgIndzZGx1MDA2NSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGSVggPSAgICAgICAgIHBsdWdpbklkICsgIndzZGx1MDA2NCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMT0NBVElPTl9ISU5UID0gIHBsdWdpbklkICsgIndzZGx1MDA2NiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCUk9XU0UgPSAgICAgICAgIHBsdWdpbklkICsgIndzZGx1MDA2NyI7IC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBOZXcgTWVzc2FnZSBEaWFsb2cKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfTUVTU0FHRV9ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwODAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX01FU1NBR0VfRElBTE9HX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDA4MSI7ICAvLyBub3QgdXNlZCAtLSB0ZXh0IHdpbGwgdXNlICJkaWFsb2ciIGNvbnRleHQgSWQgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIFNwZWNpZnkgTWVzc2FnZSBEaWFsb2cgLS0tIGNvbW1vbi51aQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNQRUNJRllfTUVTU0FHRV9ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwODIiOyAvLyAgICAgICAgICAgICAgICAiZGlhbG9nIiAgICAgICAgLS0+IHdzZGx1MDA4MiAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX0RJQUxPR19OQU1FX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwNzAiOyAvLyAgIE5hbWUgKD8gPSBjaGFyYWN0ZXIsICogPSBhbnkgc3RyaW5nKTogICAidGV4dCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDcwIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX0RJQUxPR19DT01QT05FTlRTX0xJU1QgPSBwbHVnaW5JZCArICJ3c2RsdTAwNzEiOyAgLy8gIENvbXBvbmVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDcxIC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNQRUNJRllfRElBTE9HX1NFQVJDSF9TQ09QRSA9IHBsdWdpbklkICsgIndzZGx1MDA3MiI7IC8vICBTZWFyY2ggU2NvcGU6IC8vJE5PTi1OTFMtMSQKLQkvL1dvcmtzcGFjZSwgRW5jbG9zaW5nIFByb2plY3QsIEN1cnJlbnQgUmVzb3VyY2UsIFdvcmtpbmcgU2V0cyAoR3JvdXBlZCkgICAgICAgICAgInJhZGlvIiAgICAgICAgIC0tPihDT01NT04pIHdzZGx1MDA3MgotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIE5ldyBCaW5kaW5nIERpYWxvZwotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19CSU5ESU5HX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4MyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfQklORElOR19ESUFMT0dfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDg0IjsgLy8gbm90IHVzZWQgLS0gdGV4dCB3aWxsIHVzZSAiZGlhbG9nIiBjb250ZXh0IElkIC8vJE5PTi1OTFMtMSQKLQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gU3BlY2lmeSBCaW5kaW5nIERpYWxvZyAtLS0gY29tbW9uLnVpCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1BFQ0lGWV9CSU5ESU5HX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4NSI7ICAvLyAgU3BlY2lmeSBCaW5kaW5nIERpYWxvZyAgICAgICAgICAgICAgICAgICJkaWFsb2ciICAgICAgICAtLT4gd3NkbHUwMDg1IC8vJE5PTi1OTFMtMSQKLQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gTmV3IFBvcnRUeXBlIERpYWxvZyAKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfUE9SVFRZUEVfRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDg2IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19QT1JUVFlQRV9ESUFMT0dfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDg3IjsgLy8gbm90IHVzZWQgLS0gdGV4dCB3aWxsIHVzZSAiZGlhbG9nIiBjb250ZXh0IElkIC8vJE5PTi1OTFMtMSQKLQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gU3BlY2lmeSBQb3J0IFR5cGUgRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX1BPUlRUWVBFX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4OCI7IC8vICBTcGVjaWZ5IFBvcnQgVHlwZSBEaWFsb2cgICAgICAgICAgICAgICAgImRpYWxvZyIgICAgICAgIC0tPiB3c2RsdTAwODggLy8kTk9OLU5MUy0xJAotCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBQcm9wZXJ0aWVzCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JLy9EZWZpbml0aW9uOgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTAwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfREVGX1BSRUZJWF9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTAxIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfREVGX1ROU19URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTAyIjsgLy8kTk9OLU5MUy0xJAotCi0JLy9Qb3J0OgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUE9SVF9CSU5ESU5HX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMTAzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUE9SVF9BRERSRVNTX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAxMDQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QT1JUX1BST1RPQ09MX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAxMDUiOyAvLyROT04tTkxTLTEkCi0KLQkvL0JpbmRpbmc6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19CSU5ESU5HX1BPUlRUWVBFX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMTA2IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQklORElOR19QUk9UT0NPTF9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTA3IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQklORElOR19HRU5fQklORElOR19CVVRUT04gPSBwbHVnaW5JZCArICJ3c2RsdTAxMDgiOyAvLyROT04tTkxTLTEkCi0KLQkvL0lucHV0L091dHB1dC9GYXVsdDoKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX01FU1NBR0VfUkVGX01FU1NBR0VfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMDkiOyAvLyROT04tTkxTLTEkCi0KLQkvL1BhcnQ6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QQVJUX0VMRU1FTlRfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMTAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QQVJUX1RZUEVfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMTEiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QQVJUX1RZUEVfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMTIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QQVJUX0VMRU1FTlRfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMTMiOyAvLyROT04tTkxTLTEkCi0JCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0RPQ1VNRU5UQVRJT05fVEFCID0gcGx1Z2luSWQgKyAid3NkbHUwMTE0IjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFID0gcGx1Z2luSWQgKyAid3NkbHUwMTIwIjsgIC8vIE5ldyBXU0RMIFdpemFyZCAtIG9wdGlvbnMgcGFnZSAJLS0+IHdzZGx1MDEyMCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9ERVNJR05fVklFVyA9IHBsdWdpbklkICsgIndzZGx1MDEyMSI7IC8vICBEZXNpZ24gVmlldyAJCQkJLS0+IHdzZGx1MDEyMSAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9PVVRMSU5FX1ZJRVcgPSBwbHVnaW5JZCArICJ3c2RsdTAxMjIiOyAgLy8gT3V0bGluZSBWaWV3IAkJCQktLT4gd3NkbHUwMTIyIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BST1BFUlRJRVNfVklFVyA9IHBsdWdpbklkICsgIndzZGx1MDEyMyI7IC8vICBQcm9wZXJ0aWVzIFZpZXcJCQkJLS0+IHdzZGx1MDEyMyAvLyROT04tTkxTLTEkCi0KLS8vCVdTREwgUHJlZmVyZW5jZSBQYWdlOgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUFJFRl9ERUZBVUxUX1ROUyA9IHBsdWdpbklkICsgIndzZGx1MDIwMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BSRUZfUkVHRU5fT05fU0FWRSA9IHBsdWdpbklkICsgIndzZGx1MDIwMSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BSRUZfUFJPTVBUX1JFR0VOX09OX1NBVkUgPSBwbHVnaW5JZCArICJ3c2RsdTAyMDIiOyAvLyROT04tTkxTLTEkCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvclBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RFZGl0b3JQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdhYzBiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBBU0RFZGl0b3JQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQlwdWJsaWMgc3RhdGljIGludCBERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9SRUxPQUQgPSAyOwotCQotCXByb3RlY3RlZCBzdGF0aWMgQVNERWRpdG9yUGx1Z2luIGluc3RhbmNlOwotCSAgCi0JICBwdWJsaWMgQVNERWRpdG9yUGx1Z2luKCkgewkJICAKLQkgIH0KLQkgIAotLy8JLyoqCi0vLwkgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KLS8vCSAqLwotLy8JcHVibGljIHN0YXRpYyBBU0RFZGl0b3JQbHVnaW4gZ2V0SW5zdGFuY2UoKQotLy8JewotLy8JCWlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0vLwkJCWluc3RhbmNlID0gbmV3IEFTREVkaXRvclBsdWdpbigpOwotLy8JCX0KLS8vCQlyZXR1cm4gaW5zdGFuY2U7Ci0vLwl9Ci0vLwkKLS8vCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShTdHJpbmcgaWNvbk5hbWUpCi0vLwl7Ci0vLwkJSW1hZ2VSZWdpc3RyeSBpbWFnZVJlZ2lzdHJ5ID0gZ2V0SW1hZ2VSZWdpc3RyeSgpOwotLy8JCQotLy8JCWlmIChpbWFnZVJlZ2lzdHJ5LmdldChpY29uTmFtZSkgIT0gbnVsbCkKLS8vCQl7Ci0vLwkJCXJldHVybiBpbWFnZVJlZ2lzdHJ5LmdldChpY29uTmFtZSk7Ci0vLwkJfQotLy8JCWVsc2UKLS8vCQl7Ci0vLwkJCWltYWdlUmVnaXN0cnkucHV0KGljb25OYW1lLCBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoZ2V0Q2xhc3MoKSwgaWNvbk5hbWUpKTsKLS8vCQkJcmV0dXJuIGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKTsKLS8vCQl9Ci0vLwl9Ci0JCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7Ci0JCS8vIFdlIHNob3VsZCBub3Qga25vdyBhYm91dCBXU0RMRWRpdG9yUGx1Z2luLmphdmEuICBFdmVudHVhbGx5LCB3ZSBzaG91bGQgbW92ZSB0aGVzZQotCQkvLyAnZ2VuZXJpYycsICd0b3AtbGV2ZWwnIGljb25zIHRvIHRoZSBBU0QgbGV2ZWwuLi4uLgotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IocGF0aCk7Ci0JfQotCQotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFN0cmluZyBwYXRoKSB7Ci0gICAgLy8gV2Ugc2hvdWxkIG5vdCBrbm93IGFib3V0IFdTRExFZGl0b3JQbHVnaW4uamF2YS4gIEV2ZW50dWFsbHksIHdlIHNob3VsZCBtb3ZlIHRoZXNlCi0gICAgLy8gJ2dlbmVyaWMnLCAndG9wLWxldmVsJyBpY29ucyB0byB0aGUgQVNEIGxldmVsLi4uLi4KLSAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKHBhdGgpOwotICB9Ci0KLQlwdWJsaWMgc3RhdGljIElFZGl0b3JQYXJ0IGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNETGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RMYWJlbFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyOGNhMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLkZpbGVTdG9yZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQVNETGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgewotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBBU0RMYWJlbFByb3ZpZGVyKCkgewotCQlzdXBlcigpOwotCX0KLQkKLSAgICBwcml2YXRlIElMYWJlbFByb3ZpZGVyIGdldERlbGVnYXRlKCkKLSAgICB7Ci0gICAgICBJTGFiZWxQcm92aWRlciBsYWJlbFByb3ZpZGVyID0gbnVsbDsgICAKLSAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotICAgICAgaWYgKG1hbmFnZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbGFiZWxQcm92aWRlciA9IChJTGFiZWxQcm92aWRlcikgbWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldEFkYXB0ZXIoSUxhYmVsUHJvdmlkZXIuY2xhc3MpOwotICAgICAgfQotICAgICAgcmV0dXJuIGxhYmVsUHJvdmlkZXI7Ci0gICAgfQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQotCSAqLwotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QuZXF1YWxzKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlJbWFnZSByZXN1bHQgPSBudWxsOyAgICAgICAgICAgCi0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQlPYmplY3Qgc2VsZWN0ZWQgPSAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pb2JqZWN0KS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJICAgIElMYWJlbFByb3ZpZGVyIGRlbGVnYXRlID0gZ2V0RGVsZWdhdGUoKTsKLSAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IGRlbGVnYXRlLmdldEltYWdlKHNlbGVjdGVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHNlbGVjdGVkIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQkJcmVzdWx0ID0gKChJVHJlZUVsZW1lbnQpIHNlbGVjdGVkKS5nZXRJbWFnZSgpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQkKLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QuZXF1YWxzKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpKSB7Ci0JCQlyZXR1cm4gIk5vIGl0ZW1zIHNlbGVjdGVkIjsvLyROT04tTkxTLTEkCi0JCX0KLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCU9iamVjdCBzZWxlY3RlZCA9IG51bGw7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQlzZWxlY3RlZCA9ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgb2JqZWN0KS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQotICAgICAgSUxhYmVsUHJvdmlkZXIgZGVsZWdhdGUgPSBnZXREZWxlZ2F0ZSgpOwotICAgICAgaWYgKGRlbGVnYXRlICE9IG51bGwpIHsKLSAgICAgICAgcmVzdWx0ID0gZGVsZWdhdGUuZ2V0VGV4dChzZWxlY3RlZCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZCBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgICAgICAgIHJlc3VsdCA9ICgoSVRyZWVFbGVtZW50KSBzZWxlY3RlZCkuZ2V0VGV4dCgpOwotICAgICAgfQotCi0gICAgICBib29sZWFuIGlzRmlsZVJlYWRPbmx5ID0gZmFsc2U7Ci0gICAgICBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0gICAgICBpZiAod29ya2JlbmNoICE9IG51bGwpIHsKLSAgICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICAgIGlmICh3aW5kb3cgIT0gbnVsbCkgewotICAgICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3aW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICAgIGlmIChwYWdlICE9IG51bGwpIHsKLSAgICAgICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgICAgICBpZiAoZWRpdG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICAgIGlmICghKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCB8fCBlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yZUVkaXRvcklucHV0KSkgewotICAgICAgICAgICAgICAgIGlzRmlsZVJlYWRPbmx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0JCQlpZiAoc2VsZWN0ZWQgaW5zdGFuY2VvZiBJQVNET2JqZWN0ICYmICgoSUFTRE9iamVjdCkgc2VsZWN0ZWQpLmlzUmVhZE9ubHkoKSB8fCBpc0ZpbGVSZWFkT25seSkgewotCQkJCXJlc3VsdCAgPSByZXN1bHQgKyAiICgiICsgTWVzc2FnZXMuX1VJX0xBQkVMX1JFQURfT05MWSArICIpIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRE11bHRpUGFnZUVkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RNdWx0aVBhZ2VFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxMDNhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRE11bHRpUGFnZUVkaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLlpvb21NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkFjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5wYXJ0cy5TY3JvbGxpbmdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuRmlsZVN0b3JlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEJpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkRW5kUG9pbnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkRmF1bHRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW1wb3J0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZElucHV0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEludGVyZmFjZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPcGVyYXRpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3V0cHV0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZFBhcmFtZXRlckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRTY2hlbWFBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkU2VydmljZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRE9wZW5TY2hlbWFBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldE5ld0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5EaXJlY3RFZGl0U2VsZWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5BU0RFZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuQVNEQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLkFTRFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Db21tb25NdWx0aVBhZ2VFZGl0b3I7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBU0RNdWx0aVBhZ2VFZGl0b3IgZXh0ZW5kcyBDb21tb25NdWx0aVBhZ2VFZGl0b3IKLXsKLSAgLy8gVE9ETzogbW92ZSB0byBkZXNpZ24gdmlld2VyCi0gIHByb3RlY3RlZCBEZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlciBtZW51UHJvdmlkZXI7Ci0gIHByb3RlY3RlZCBJRGVzY3JpcHRpb24gbW9kZWw7Ci0gIHByaXZhdGUgaW50IGN1cnJlbnRQYWdlID0gLTE7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlcyBhIG11bHRpLXBhZ2UgZWRpdG9yIGV4YW1wbGUuCi0gICAqLwotICBwdWJsaWMgQVNETXVsdGlQYWdlRWRpdG9yKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAKLSAgICBnZXRFZGl0RG9tYWluKCkuc2V0QWN0aXZlVG9vbChuZXcgRGlyZWN0RWRpdFNlbGVjdGlvblRvb2woKSk7Ci0gICAgZ2V0RWRpdERvbWFpbigpLnNldERlZmF1bHRUb29sKG5ldyBEaXJlY3RFZGl0U2VsZWN0aW9uVG9vbCgpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29udHJpYnV0b3JJZCgpCi0gIHsKLSAgICByZXR1cm4gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgSW50ZXJuYWxMYXlvdXQgZXh0ZW5kcyBTdGFja0xheW91dAotICB7Ci0gICAgcHVibGljIEludGVybmFsTGF5b3V0KCkgewotICAgICAgc3VwZXIoKTsgIAotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBsYXlvdXQoQ29tcG9zaXRlIGNvbXBvc2l0ZSwgYm9vbGVhbiBmbHVzaENhY2hlKSB7Ci0gICAgICBDb250cm9sIGNoaWxkcmVuW10gPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgIFJlY3RhbmdsZSByZWN0ID0gY29tcG9zaXRlLmdldENsaWVudEFyZWEoKTsKLSAgICAgIHJlY3QueCArPSBtYXJnaW5XaWR0aDsKLSAgICAgIHJlY3QueSArPSBtYXJnaW5IZWlnaHQ7Ci0gICAgICByZWN0LndpZHRoIC09IDIgKiBtYXJnaW5XaWR0aDsKLSAgICAgIHJlY3QuaGVpZ2h0IC09IDIgKiBtYXJnaW5IZWlnaHQ7Ci0gICAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPT0gMCAmJiBtb2RlQ29tYm8gIT0gbnVsbCkgeyAvLyBGb3IgdGhlIGRyb3AgZG93biB0b29sYmFyCi0gICAgICAgICAgY2hpbGRyZW5baV0uc2V0Qm91bmRzKHJlY3QueCArIHJlY3Qud2lkdGggLSA5MCAtIG1heExlbmd0aCwgcmVjdC55ICsgMTAsIG1heExlbmd0aCArIDYwLCAyNik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ly8gRm9yIHRoZSBtYWluIGdyYXBoIHZpZXdlcgotICAgICAgICAgIGNoaWxkcmVuW2ldLnNldEJvdW5kcyhyZWN0KTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0gICAgICAgCi0gICAgfSAgICAgICAgICAgICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZUdyYXBoUGFnZUNvbXBvc2l0ZSgpIHsgICAgCi0gICAgQ29tcG9zaXRlIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoZ2V0Q29udGFpbmVyKCksIFNXVC5GTEFUKTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KG5ldyBJbnRlcm5hbExheW91dCgpKTsKLSAgICBjcmVhdGVWaWV3TW9kZVRvb2xiYXIocGFyZW50KTsKLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0KLSAgCi0gIHB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKLQkgIGlmICgoZk91dGxpbmVQYWdlID09IG51bGwpIHx8IGZPdXRsaW5lUGFnZS5nZXRDb250cm9sKCkgPT0gbnVsbCB8fCAoZk91dGxpbmVQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpKSB7Ci0JCSAgSUNvbnRlbnRQcm92aWRlciAgcHJvdmlkZXIgPSBnZXRFZGl0b3JNb2RlTWFuYWdlcigpLmdldEN1cnJlbnRNb2RlKCkuZ2V0T3V0bGluZVByb3ZpZGVyKCk7Ci0gICAgICAgICAgCi0gICAgICBBU0RDb250ZW50T3V0bGluZVBhZ2Ugb3V0bGluZVBhZ2UgPSBuZXcgQVNEQ29udGVudE91dGxpbmVQYWdlKHRoaXMsIG1lbnVQcm92aWRlcik7Ci0JCSAgb3V0bGluZVBhZ2Uuc2V0Q29udGVudFByb3ZpZGVyKChJVHJlZUNvbnRlbnRQcm92aWRlcilwcm92aWRlcik7Ci0JCSAgb3V0bGluZVBhZ2Uuc2V0TGFiZWxQcm92aWRlcigoSUxhYmVsUHJvdmlkZXIpcHJvdmlkZXIpOwotCQkgIG91dGxpbmVQYWdlLnNldE1vZGVsKGdldE1vZGVsKCkpOwotCQkgIG91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvdXRsaW5lUGFnZSk7Ci0gICAgICAKLSAgICAgIGZPdXRsaW5lUGFnZSA9IG91dGxpbmVQYWdlOwotCSAgfQotCSAgcmV0dXJuIGZPdXRsaW5lUGFnZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIHBhZ2VzIG9mIHRoZSBtdWx0aS1wYWdlIGVkaXRvci4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVBhZ2VzKCkKLSAgewotICAgIHNlbGVjdGlvblByb3ZpZGVyID0gZ2V0U2VsZWN0aW9uTWFuYWdlcigpOwotICAgIGdldEVkaXRvclNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihzZWxlY3Rpb25Qcm92aWRlcik7Ci0KLSAgICBjcmVhdGVHcmFwaFBhZ2UoKTsKLSAgICBjcmVhdGVTb3VyY2VQYWdlKCk7Ci0KLSAgICBidWlsZEFuZFNldE1vZGVsKCk7Ci0gICAgaW5pdGlhbGl6ZUdyYXBoaWNhbFZpZXdlcigpOwotICAgIHNldEFjdGl2ZVBhZ2UoZ2V0RGVmYXVsdFBhZ2VUeXBlSW5kZXgoKSk7Ci0gICAgCi0gICAgZ2V0U2VsZWN0aW9uTWFuYWdlcigpLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRNb2RlbCgpKSk7Ci0gICAgCi0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChncmFwaGljYWxWaWV3ZXIuZ2V0Q29udHJvbCgpLCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9ERVNJR05fVklFVyk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBpbnQgZ2V0RGVmYXVsdFBhZ2VUeXBlSW5kZXgoKSB7Ci0JICBpbnQgcGFnZUluZGV4ID0gU09VUkNFX1BBR0VfSU5ERVg7Ci0JICBpZiAoV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRQYWdlKCkuZXF1YWxzKFdTRExFZGl0b3JQbHVnaW4uREVTSUdOX1BBR0UpKSB7Ci0JCSAgcGFnZUluZGV4ID0gREVTSUdOX1BBR0VfSU5ERVg7Ci0JICB9Ci0KLQkgIHJldHVybiBwYWdlSW5kZXg7Ci0JICB9Ci0gIAotICBwcm90ZWN0ZWQgU2Nyb2xsaW5nR3JhcGhpY2FsVmlld2VyIGdldEdyYXBoaWNhbFZpZXdlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIodGhpcywgZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYnVpbGRBbmRTZXRNb2RlbCgpIHsKLQkgIG1vZGVsID0gYnVpbGRNb2RlbChnZXRFZGl0b3JJbnB1dCgpKTsKLSAgfQotCi0gIGFic3RyYWN0IHB1YmxpYyBJRGVzY3JpcHRpb24gYnVpbGRNb2RlbChJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpOwotICAKLSAgcHVibGljIGJvb2xlYW4gaXNGaWxlUmVhZE9ubHkoKSB7Ci0gICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICByZXR1cm4gIShlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVBY3Rpb25zKCkKLSAgewotICAgIEFjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0QWN0aW9uUmVnaXN0cnkoKTsKLSAgICBCYXNlU2VsZWN0aW9uQWN0aW9uIGFjdGlvbjsKLSAgICBpZiAoIWlzRmlsZVJlYWRPbmx5KCkpCi0gICAgewotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZFNlcnZpY2VBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRCaW5kaW5nQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkSW50ZXJmYWNlQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkRW5kUG9pbnRBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRPcGVyYXRpb25BY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRJbnB1dEFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZE91dHB1dEFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZEZhdWx0QWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNERGVsZXRlQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEU2V0TmV3QmluZGluZ0FjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTRFNldE5ld0ludGVyZmFjZUFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkSW1wb3J0QWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkUGFyYW1ldGVyQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkU2NoZW1hQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICAgIH0KLQotICAgIGFjdGlvbiA9IG5ldyBBU0RPcGVuU2NoZW1hQWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gICAgCi0gICAgYWN0aW9uID0gbmV3IFNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbih0aGlzKTsKLSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICB9Ci0KLSAgcHVibGljIElEZXNjcmlwdGlvbiBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gbW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgdHlwZSkKLSAgewotICAgIGlmICh0eXBlID09IFpvb21NYW5hZ2VyLmNsYXNzKQotICAgICAgcmV0dXJuIGdyYXBoaWNhbFZpZXdlci5nZXRQcm9wZXJ0eShab29tTWFuYWdlci5jbGFzcy50b1N0cmluZygpKTsKLQotICAgIGlmICh0eXBlID09IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKQotICAgIHsKLSAgICAJQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UgcGFnZSA9IG5ldyBBU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZSh0aGlzKTsKLSAgICAJcmV0dXJuIHBhZ2U7Ci0gICAgfQotICAgIGlmICh0eXBlID09IEdyYXBoaWNhbFZpZXdlci5jbGFzcykKLSAgICAgIHJldHVybiBncmFwaGljYWxWaWV3ZXI7Ci0gICAgaWYgKHR5cGUgPT0gRWRpdFBhcnQuY2xhc3MgJiYgZ3JhcGhpY2FsVmlld2VyICE9IG51bGwpCi0gICAgICByZXR1cm4gZ3JhcGhpY2FsVmlld2VyLmdldFJvb3RFZGl0UGFydCgpOwotICAgIGlmICh0eXBlID09IElGaWd1cmUuY2xhc3MgJiYgZ3JhcGhpY2FsVmlld2VyICE9IG51bGwpCi0gICAgICByZXR1cm4gKChHcmFwaGljYWxFZGl0UGFydCkgZ3JhcGhpY2FsVmlld2VyLmdldFJvb3RFZGl0UGFydCgpKS5nZXRGaWd1cmUoKTsKLSAgICAKLSAgICBpZiAoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcy5lcXVhbHModHlwZSkpCi0gICAgewotICAgICAgcmV0dXJuIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAodHlwZSA9PSBJU2VsZWN0aW9uUHJvdmlkZXIuY2xhc3MpCi0gICAgewotICAgICAgIHJldHVybiBnZXRTZWxlY3Rpb25NYW5hZ2VyKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdXBlci5nZXRBZGFwdGVyKHR5cGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKSB7Ci0gICAgcmV0dXJuIG5ldyBBU0RFZGl0UGFydEZhY3RvcnkoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgc2V0RWRpdFBhcnRGYWN0b3J5KEVkaXRQYXJ0RmFjdG9yeSBmYWN0b3J5KSB7Ci0JICBncmFwaGljYWxWaWV3ZXIuc2V0RWRpdFBhcnRGYWN0b3J5KGZhY3RvcnkpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplR3JhcGhpY2FsVmlld2VyKCkKLSAgewotICAgIGdyYXBoaWNhbFZpZXdlci5zZXRDb250ZW50cyhtb2RlbCk7Ci0gICAgbWVudVByb3ZpZGVyID0gbmV3IERlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyKGdyYXBoaWNhbFZpZXdlciwgZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgbmV3UGFnZUluZGV4KSB7Ci0gICAgY3VycmVudFBhZ2UgPSBuZXdQYWdlSW5kZXg7Ci0gICAgc3VwZXIucGFnZUNoYW5nZShuZXdQYWdlSW5kZXgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCSAgaWYgKGN1cnJlbnRQYWdlID09IFNPVVJDRV9QQUdFX0lOREVYKSB7Ci0JCSAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLnNldERlZmF1bHRQYWdlKFdTRExFZGl0b3JQbHVnaW4uU09VUkNFX1BBR0UpOwotCSAgfQotCSAgZWxzZSB7Ci0JCSAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLnNldERlZmF1bHRQYWdlKFdTRExFZGl0b3JQbHVnaW4uREVTSUdOX1BBR0UpOwotCSAgfQotCi0JICBzdXBlci5kaXNwb3NlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNEU2VsZWN0aW9uTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RTZWxlY3Rpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjN2FjODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RTZWxlY3Rpb25NYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VTZWxlY3Rpb25Qcm92aWRlcjsKLQotcHVibGljIGNsYXNzIEFTRFNlbGVjdGlvbk1hbmFnZXIgZXh0ZW5kcyBNdWx0aVBhZ2VTZWxlY3Rpb25Qcm92aWRlciBpbXBsZW1lbnRzIElTZWxlY3Rpb25Qcm92aWRlciwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgotewotCXByb3RlY3RlZCBMaXN0IGxpc3RlbmVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwotCXByb3RlY3RlZCBib29sZWFuIGVuYWJsZU5vdGlmeSA9IHRydWU7Ci0JCi0JcHVibGljIEFTRFNlbGVjdGlvbk1hbmFnZXIoTXVsdGlQYWdlRWRpdG9yUGFydCBtdWx0aVBhZ2VFZGl0b3IpCi0JewotCQlzdXBlcihtdWx0aVBhZ2VFZGl0b3IpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJbGlzdGVuZXJMaXN0LmFkZChsaXN0ZW5lcik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI2dldFNlbGVjdGlvbigpCi0JICovCi0JcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQl7Ci0JCXJldHVybiBjdXJyZW50U2VsZWN0aW9uOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNyZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJbGlzdGVuZXJMaXN0LnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgdGhpcyk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKGVuYWJsZU5vdGlmeSkKLQkJewotCQkJc2V0U2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpLCBldmVudC5nZXRTZWxlY3Rpb25Qcm92aWRlcigpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24sIElTZWxlY3Rpb25Qcm92aWRlciBzb3VyY2UpCi0JeyAgCi0JCWlmIChlbmFibGVOb3RpZnkpCi0JCXsKLQkJCWN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JCQllbmFibGVOb3RpZnkgPSBmYWxzZTsKLQkJCXRyeQotCQkJewotCQkJCVNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc291cmNlLCBzZWxlY3Rpb24pOwotCQkJCUxpc3QgY29weU9mTGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdChsaXN0ZW5lckxpc3QpOwotCQkJCWZvciAoSXRlcmF0b3IgaSA9IGNvcHlPZkxpc3RlbmVyTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotCQkJCXsKLQkJCQkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA9IChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKWkubmV4dCgpOwotCQkJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJZW5hYmxlTm90aWZ5ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMDM3MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOyAvLyROT04tTkxTLTEkCi0JfQotCSAgCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQl0cnkgewotCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RBQl9HUkFQSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVEFCX1NPVVJDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQlVUVE9OX05FVzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUkVBRF9PTkxZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9MT0NBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQUREUkVTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUFJFRklYOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1NFUlZJQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9PUEVSQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX09VVFBVVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9GQVVMVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fREVMRVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CVVRUT05fQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fTkVXX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fTkVXX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FWElTVElOR19QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfR0VORVJBVEVfQklORElOR19DT05URU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRVhJU1RJTkdfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQklORElOR19QUk9UT0NPTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1NDSEVNQTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9JTlBVVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU0VDVElPTl9BRFZBTkNFRF9BVFRSSUJVVEVTOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FRElUX05BTUVTUEFDRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9PUEVOX1NDSEVNQTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVE9PTFRJUF9SRU5BTUVfUkVGQUNUT1I7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUklHSFRfQ0xJQ0tfVE9fSU5TRVJUX0NPTlRFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9TSE9XX1BST1BFUlRJRVM7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkQmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEJpbmRpbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhNTQ0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkQmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkQmluZGluZ0FjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZEJpbmRpbmdBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRCaW5kaW5nQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9CSU5ESU5HKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvYmluZGluZ19vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZEJpbmRpbmdDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRFbmRQb2ludEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEVuZFBvaW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YTdlMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEVuZFBvaW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRFbmRQb2ludEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRFbmRQb2ludEFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZEVuZFBvaW50QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9QT1JUKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvcG9ydF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJSVNlcnZpY2Ugc2VydmljZSA9IG51bGw7Ci0JCQkKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgSVNlcnZpY2UpIHsKLSAgICAgICAgICAgIAlzZXJ2aWNlID0gKElTZXJ2aWNlKSBvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIElFbmRQb2ludCkgewotICAgICAgICAgICAgCXNlcnZpY2UgPSAoKElFbmRQb2ludCkgbykuZ2V0T3duZXJTZXJ2aWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBDb21tYW5kIGNvbW1hbmQgPSBzZXJ2aWNlLmdldEFkZEVuZFBvaW50Q29tbWFuZCgpOwotICAgICAgICAgICAgICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLSAgICAgICAgICAgICAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBlbGVtZW50ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlzZWxlY3RBbmREaXJlY3RFZGl0KGVsZW1lbnQpOwotCQkJICAgIH0KLSAgICAgICAgICAgIH0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRGYXVsdEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEZhdWx0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMTg4MzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEZhdWx0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkRmF1bHRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRGYXVsdEFjdGlvbm4iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRGYXVsdEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfRkFVTFQpOyAgIC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2ZhdWx0X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQlJT3BlcmF0aW9uIGlPcGVyYXRpb24gPSBudWxsOwotCQkJT2JqZWN0IHBvc3NpYmxlRmF1bHQgPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElPcGVyYXRpb24pIHsKLQkJCQlpT3BlcmF0aW9uID0gKElPcGVyYXRpb24pIG87Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQlpT3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJCQlwb3NzaWJsZUZhdWx0ID0gKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBvKS5nZXRUYXJnZXQoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQkJaU9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpICgoSVBhcmFtZXRlcikgbykuZ2V0T3duZXIoKSkuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJCQlwb3NzaWJsZUZhdWx0ID0gKChXMTFNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpLmdldFRhcmdldCgpOwotCQkJfQotCQkJCi0JCQlpZiAoaU9wZXJhdGlvbiAhPSBudWxsKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gaU9wZXJhdGlvbi5nZXRBZGRGYXVsdENvbW1hbmQocG9zc2libGVGYXVsdCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbXBvcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbXBvcnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjZTBiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW1wb3J0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRJbXBvcnRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRJbXBvcnRBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRJbXBvcnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lNUE9SVCk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2ltcG9ydF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZEltcG9ydENvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZElucHV0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW5wdXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1ZjlhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW5wdXRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkSW5wdXRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkSW5wdXRBY3Rpb25uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkSW5wdXRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lOUFVUKTsgICAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9pbnB1dF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJSU9wZXJhdGlvbiBpT3BlcmF0aW9uID0gbnVsbDsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJT3BlcmF0aW9uKSB7Ci0JCQkJaU9wZXJhdGlvbiA9IChJT3BlcmF0aW9uKSBvOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJaU9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIG8pLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJCWlPcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChpT3BlcmF0aW9uICE9IG51bGwpIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSBpT3BlcmF0aW9uLmdldEFkZElucHV0Q29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW50ZXJmYWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW50ZXJmYWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZjEyZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEludGVyZmFjZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkSW50ZXJmYWNlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZEludGVyZmFjZUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZEludGVyZmFjZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfUE9SVFRZUEUpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9wb3J0dHlwZV9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZEludGVyZmFjZUNvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3QgZWxlbWVudCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJc2VsZWN0QW5kRGlyZWN0RWRpdChlbGVtZW50KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRNZXNzYWdlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkTWVzc2FnZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2QwN2E4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRNZXNzYWdlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRNZXNzYWdlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkTWVzc2FnZUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZE1lc3NhZ2VBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX01FU1NBR0UpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9tZXNzYWdlX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElEZXNjcmlwdGlvbikgbykuZ2V0QWRkTWVzc2FnZUNvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE9wZXJhdGlvbkFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE9wZXJhdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTE5MzlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPcGVyYXRpb25BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZE9wZXJhdGlvbkFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRPcGVyYXRpb25BY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRPcGVyYXRpb25BY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX09QRVJBVElPTik7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL29wZXJhdGlvbl9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJSUludGVyZmFjZSB0aGVJbnRlcmZhY2UgPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElJbnRlcmZhY2UpIHsKLQkJCQl0aGVJbnRlcmZhY2UgPSAoSUludGVyZmFjZSkgbzsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJT3BlcmF0aW9uKSB7Ci0JCQkJdGhlSW50ZXJmYWNlID0gKChJT3BlcmF0aW9uKSBvKS5nZXRPd25lckludGVyZmFjZSgpOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJdGhlSW50ZXJmYWNlID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0T3duZXJPcGVyYXRpb24oKS5nZXRPd25lckludGVyZmFjZSgpOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQl0aGVJbnRlcmZhY2UgPSAoKElNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpLmdldE93bmVyT3BlcmF0aW9uKCkuZ2V0T3duZXJJbnRlcmZhY2UoKTsKLQkJCX0KLQkJCQotCQkJaWYgKHRoZUludGVyZmFjZSAhPSBudWxsKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gdGhlSW50ZXJmYWNlLmdldEFkZE9wZXJhdGlvbkNvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3QgZWxlbWVudCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJc2VsZWN0QW5kRGlyZWN0RWRpdChlbGVtZW50KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPdXRwdXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPdXRwdXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EzNmFiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkT3V0cHV0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZE91dHB1dEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRPdXRwdXRBY3Rpb25uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkT3V0cHV0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9PVVRQVVQpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9vdXRwdXRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCUlPcGVyYXRpb24gaU9wZXJhdGlvbiA9IG51bGw7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotCQkJCWlPcGVyYXRpb24gPSAoSU9wZXJhdGlvbikgbzsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCWlPcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBvKS5nZXRPd25lck9wZXJhdGlvbigpOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQlpT3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgKChJUGFyYW1ldGVyKSBvKS5nZXRPd25lcigpKS5nZXRPd25lck9wZXJhdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAoaU9wZXJhdGlvbiAhPSBudWxsKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gaU9wZXJhdGlvbi5nZXRBZGRPdXRwdXRDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRQYXJhbWV0ZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRQYXJhbWV0ZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE5NzBhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkUGFyYW1ldGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZFBhcmFtZXRlckFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24geyAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRQYXJhbWV0ZXJBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHB1YmxpYyBBU0RBZGRQYXJhbWV0ZXJBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgICB7Ci0gICAgICAgIHN1cGVyKHBhcnQpOwotICAgICAgICBzZXRJZChJRCk7Ci0gICAgICAgIHNldFRleHQoIkFkZCBQYXJhbWV0ZXIiKTsgICAvLyROT04tTkxTLTEkCi0gICAgICAgIHNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9pbnB1dF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIE9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotICAgICAgICAgICAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSA9IG51bGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1lc3NhZ2VSZWZlcmVuY2UgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpbzsKLSAgICAgICAgICAgIH0gIAotICAgICAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlUmVmZXJlbmNlID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgKChJUGFyYW1ldGVyKSBvKS5nZXRPd25lcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZWZlcmVuY2UgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgVzExTWVzc2FnZVJlZmVyZW5jZSB3MTFNZXNzYWdlUmVmZXJlbmNlID0gKFcxMU1lc3NhZ2VSZWZlcmVuY2UpbWVzc2FnZVJlZmVyZW5jZTsgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENvbW1hbmQgY29tbWFuZCA9IHcxMU1lc3NhZ2VSZWZlcmVuY2UuZ2V0QWRkUGFyYW10ZXJDb21tYW5kKCk7Ci0gICAgICAgICAgICAgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLSAgICAgICAgICAgICAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotICAgICAgICAgICAgICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJc2VsZWN0QW5kRGlyZWN0RWRpdChvYmplY3QpOwotCQkJICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAgCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNjaGVtYUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNjaGVtYUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTA0YjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRTY2hlbWFBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZFNjaGVtYUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZFNjaGVtYUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZFNjaGVtYUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfU0NIRU1BKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMveHNkX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElEZXNjcmlwdGlvbikgbykuZ2V0QWRkU2NoZW1hQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkU2VydmljZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNlcnZpY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2MzY4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkU2VydmljZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuU2VydmljZUVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRTZXJ2aWNlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZFNlcnZpY2VBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRTZXJ2aWNlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9TRVJWSUNFKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZFNlcnZpY2VDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IGVsZW1lbnQgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQoZWxlbWVudCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZG9EaXJlY3RFZGl0KEVkaXRQYXJ0IGVwKSB7Ci0JCWlmIChlcCBpbnN0YW5jZW9mIFNlcnZpY2VFZGl0UGFydCkgewotCQkJKChTZXJ2aWNlRWRpdFBhcnQpIGVwKS5wZXJmb3JtRGlyZWN0RWRpdChudWxsKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQ2FwdHVyZVNjcmVlbkFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRENhcHR1cmVTY3JlZW5BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU4OTQyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQ2FwdHVyZVNjcmVlbkFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuYWN0aW9ucy5DYXB0dXJlU2NyZWVuQWN0aW9uOwotCi0KLS8qKgotICogT3VyIHNhbXBsZSBhY3Rpb24gaW1wbGVtZW50cyB3b3JrYmVuY2ggYWN0aW9uIGRlbGVnYXRlLgotICogVGhlIGFjdGlvbiBwcm94eSB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIHdvcmtiZW5jaCBhbmQKLSAqIHNob3duIGluIHRoZSBVSS4gV2hlbiB0aGUgdXNlciB0cmllcyB0byB1c2UgdGhlIGFjdGlvbiwKLSAqIHRoaXMgZGVsZWdhdGUgd2lsbCBiZSBjcmVhdGVkIGFuZCBleGVjdXRpb24gd2lsbCBiZSAKLSAqIGRlbGVnYXRlZCB0byBpdC4KLSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlCi0gKi8KLXB1YmxpYyBjbGFzcyBBU0RDYXB0dXJlU2NyZWVuQWN0aW9uICBleHRlbmRzIEFjdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSUVkaXRvckFjdGlvbkRlbGVnYXRlIHsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEFTRENhcHR1cmVTY3JlZW5BY3Rpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogVGhlIGFjdGlvbiBoYXMgYmVlbiBhY3RpdmF0ZWQuIFRoZSBhcmd1bWVudCBvZiB0aGUKLQkgKiBtZXRob2QgcmVwcmVzZW50cyB0aGUgJ3JlYWwnIGFjdGlvbiBzaXR0aW5nCi0JICogaW4gdGhlIHdvcmtiZW5jaCBVSS4KLQkgKiBAc2VlIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSNydW4KLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKLQkJQ2FwdHVyZVNjcmVlbkFjdGlvbiBjYXB0dXJlU2NyZWVuQWN0aW9uID0gbmV3IENhcHR1cmVTY3JlZW5BY3Rpb24oKTsKLQkJY2FwdHVyZVNjcmVlbkFjdGlvbi5ydW4oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gYWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLSAgICAKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REZWxldGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REZWxldGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlkZjE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERGVsZXRlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0REZWxldGVBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0REZWxldGVBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0REZWxldGVBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fREVMRVRFKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvZGVsZXRlX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlJdGVyYXRvciBpdCA9IGdldFNlbGVjdGVkT2JqZWN0cygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotCQkJCi0JCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkJCWNvbW1hbmQgPSAoKElBU0RPYmplY3QpIG9iamVjdCkuZ2V0RGVsZXRlQ29tbWFuZCgpOwotCQkJfQotCi0JCQlpZiAoY29tbWFuZCAhPSBudWxsKSB7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCi0JCQkgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJICAgIAlPYmplY3QgdGFyZ2V0ID0gKChXU0RMQmFzZUFkYXB0ZXIpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkgICAgCWlmICh0YXJnZXQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJICAgIAkJcGVyZm9ybVNlbGVjdGlvbigoKFdTRExFbGVtZW50KSB0YXJnZXQpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQkgICAgCX0KLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REaXJlY3RFZGl0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERGlyZWN0RWRpdEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmQ1YmQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REaXJlY3RFZGl0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkRpcmVjdEVkaXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotCi1wdWJsaWMgY2xhc3MgQVNERGlyZWN0RWRpdEFjdGlvbiBleHRlbmRzIERpcmVjdEVkaXRBY3Rpb24gewotCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgcHJvdmlkZXI7Ci0JCi0JLyoqCi0JICogU2FtZSBhcyB7QGxpbmsgI0RpcmVjdEVkaXRBY3Rpb24oSVdvcmtiZW5jaFBhcnQpfS4KLQkgKiBAcGFyYW0gZWRpdG9yIHRoZSBlZGl0b3IKLQkgKi8KLQlwdWJsaWMgQVNERGlyZWN0RWRpdEFjdGlvbihJRWRpdG9yUGFydCBlZGl0b3IpIHsKLQkJc3VwZXIoKElXb3JrYmVuY2hQYXJ0KWVkaXRvcik7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIERpcmVjdEVkaXRBY3Rpb24gdXNpbmcgdGhlIHNwZWNpZmllZCBwYXJ0LgotCSAqIEBwYXJhbSBwYXJ0IHRoZSB3b3JrYmVuY2ggcGFydAotCSAqLwotCXB1YmxpYyBBU0REaXJlY3RFZGl0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JfQotCQotCSAgLyogKG5vbi1KYXZhZG9jKQotCSAgICogQHNlZSBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5TZWxlY3Rpb25BY3Rpb24jZ2V0U2VsZWN0aW9uKCkKLQkgICAqLwotCSAgcHJvdGVjdGVkIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQkgIHsKLQkJICAvLyBJZiB3ZSdyZSBpbiB0aGlzIGFjdGlvbiwgd2UgYXNzdW1lIHRoZSBhY3Rpb24gd2FzIGluaXRpYXRlZCB2aWEgdGhlIGdyYXBoaWNhbCB2aWV3ZXIuCi0JCSAgLy8gV2UgdXNlIHRoZSBncmFwaGljYWwgdmlldyB0byBvYnRhaW4gdGhlIHNlbGVjdGVkIGVkaXQgcGFydCBiZWNhdXNlIGZvciB1cywgb25lIG1vZGVsCi0JCSAgLy8gbWF5IGRyaXZlIG1vcmUgdGhhbiBvbmUgZWRpdCBwYXJ0LiAgU28gd2UgbmVlZCB0byBmaW5kIHRoZSBleGFjdCBlZGl0IHBhcnQgd2Ugd2lzaCB0bwotCQkgIC8vIGRpcmVjdCBlZGl0LiAgVGhlIHByZWZlcnJlZCBtZXRob2Qgb2YgZGV0ZXJtaW5pbmcgdGhlIGVkaXQgcGFydCB3b3VsZCBoYXZlIGJlZW4gdG8gZ28KLQkJICAvLyB0aHJvdWdoIHRoZSBzZWxlY3Rpb24gbWFuYWdlciwgdGhlbiB0aHJvdWdoIHRoZSBlZGl0IHBhcnQgcmVnaXN0cnkuICBIb3dldmVyLCB0aGUgc2VsZWN0aW9uCi0JCSAgLy8gbWFuYWdlciBvbmx5IHJldHVybnMgdGhlIG1vZGVsIG9iamVjdCAobm90IHRoZSBlZGl0IHBhcnQpLi4uLiBhbmQgc2luY2UgdGhlIG1vZGVsIG9iamVjdAotCQkgIC8vIG1heSBkcml2ZSBtb3JlIHRoYW4gb25lIGVkaXQgcGFydCwgdGhlIGVkaXQgcGFydCByZWdpc3RyeSBtYXkgcmV0dXJuIHRoZSAid3JvbmciIGVkaXQKLQkJICAvLyBwYXJ0IGZvciBkaXJlY3QgZWRpdGluZy4gIFRodXMgd2UgbG9vayBjYWxsIEdyYXBoaWNhbFZpZXdlci5nZXRGb2N1c0VkaXRQYXJ0KCkuCi0JCSAgSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCSAgT2JqZWN0IG9iamVjdCA9IGVkaXRvci5nZXRBZGFwdGVyKEdyYXBoaWNhbFZpZXdlci5jbGFzcyk7Ci0JCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEdyYXBoaWNhbFZpZXdlcikgewotCQkJICBPYmplY3Qgc2VsZWN0aW9uID0gKChHcmFwaGljYWxWaWV3ZXIpIG9iamVjdCkuZ2V0Rm9jdXNFZGl0UGFydCgpOwotCQkJICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLQkJICB9Ci0JICAgIAotCSAgICByZXR1cm4gc3VwZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JICB9Ci0JICAKLQkgIC8qIChub24tSmF2YWRvYykKLQkgICAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuU2VsZWN0aW9uQWN0aW9uI3NldFNlbGVjdGlvblByb3ZpZGVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyKQotCSAgICovCi0JICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Qcm92aWRlcihJU2VsZWN0aW9uUHJvdmlkZXIgcHJvdmlkZXIpCi0JICB7Ci0JICAgIHN1cGVyLnNldFNlbGVjdGlvblByb3ZpZGVyKHByb3ZpZGVyKTsKLQkgICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyOwotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiBjYWxjdWxhdGVFbmFibGVkKCkgewotCQkgIE9iamVjdCBzZWxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCSAgCi0JCSAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElBU0RPYmplY3QpIHsKLQkJCSAgcmV0dXJuICAhKChJQVNET2JqZWN0KSBzZWxlY3Rpb24pLmlzUmVhZE9ubHkoKTsKLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIHRydWU7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERHJhZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkzYzgzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERHJhZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFTRERyYWdBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwcm90ZWN0ZWQgR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nQ2hpbGRFZGl0UGFydDsKLQlwcm90ZWN0ZWQgUG9pbnQgcG9pbnRlckxvY2F0aW9uOwotCQotCXB1YmxpYyBBU0REcmFnQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JfQotCQotCS8qCi0JICogU3ViLWNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGNhbkV4ZWN1dGUoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJcnVuKCk7Ci0JfQotCQotCS8qCi0JICogU3ViLWNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JLyoKLQkgKiBTdWItY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCi0JICovCi0JcHVibGljIElGaWd1cmUgZ2V0RmVlZGJhY2tGaWd1cmUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REcmFnUmVvcmRlckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdSZW9yZGVyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNWEzZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdSZW9yZGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvbHlsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNERHJhZ1Jlb3JkZXJBY3Rpb24gZXh0ZW5kcyBBU0REcmFnQWN0aW9uIHsKLQkgIHByb3RlY3RlZCBJQVNET2JqZWN0IG1vdmluZ0NoaWxkOwotCSAgcHJvdGVjdGVkIElBU0RPYmplY3QgbmV3UGFyZW50OwotCSAgcHJvdGVjdGVkIEdyYXBoaWNhbEVkaXRQYXJ0IGxlZnRTaWJsaW5nRWRpdFBhcnQ7Ci0JICBwcm90ZWN0ZWQgR3JhcGhpY2FsRWRpdFBhcnQgcmlnaHRTaWJsaW5nRWRpdFBhcnQ7Ci0JICBwcm90ZWN0ZWQgSUFTRE9iamVjdCBsZWZ0U2liRWxlbWVudDsKLQkgIHByb3RlY3RlZCBJQVNET2JqZWN0IHJpZ2h0U2liRWxlbWVudDsKLQkgIHByb3RlY3RlZCBib29sZWFuIGNhbk5ldmVyRXhlY3V0ZSA9IGZhbHNlOwotCSAgCi0JICBwdWJsaWMgQVNERHJhZ1Jlb3JkZXJBY3Rpb24oR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nQ2hpbGRFZGl0UGFydCwgRWRpdFBhcnQgcG9pbnRlckVkaXRQYXJ0LCBQb2ludCBwb2ludGVyTG9jYXRpb24pIHsKLQkJICBzdXBlcihudWxsKTsKLQkgIAl0aGlzLm1vdmluZ0NoaWxkRWRpdFBhcnQgPSBtb3ZpbmdDaGlsZEVkaXRQYXJ0OwotCSAgCXRoaXMucG9pbnRlckxvY2F0aW9uID0gcG9pbnRlckxvY2F0aW9uOwotCi0JCUVkaXRQYXJ0IHBvc3NpYmxlUGFyZW50ID0gZ2V0UGFyZW50RWRpdFBhcnQocG9pbnRlckVkaXRQYXJ0KTsKLQkJCi0JCWlmICghKHBvc3NpYmxlUGFyZW50IGluc3RhbmNlb2YgR3JhcGhpY2FsRWRpdFBhcnQpKSB7Ci0JCQljYW5OZXZlckV4ZWN1dGUgPSB0cnVlOwotCQkJcmV0dXJuOwotCQl9Ci0JICAJCi0JCUdyYXBoaWNhbEVkaXRQYXJ0IHRhcmdldFBhcmVudEVkaXRQYXJ0ID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBwb3NzaWJsZVBhcmVudDsKLQkJCi0JCWlmIChwb2ludGVyRWRpdFBhcnQuZ2V0UGFyZW50KCkgIT0gbnVsbCkgewotCQkJLy8gU29ydCB0aGUgc2libGluZ3MgKGFuZCBpdHNlbGYpCi0JCQlMaXN0IHRhcmdldEVkaXRQYXJ0U2libGluZ3MgPSBwb2ludGVyRWRpdFBhcnQuZ2V0UGFyZW50KCkuZ2V0Q2hpbGRyZW4oKTsKLQkJCUNvbGxlY3Rpb25zLnNvcnQodGFyZ2V0RWRpdFBhcnRTaWJsaW5ncywgbmV3IFZlcnRpY2FsRWRpdFBhcnRDb21wYXJhdG9yKCkpOwotCSAgCi0JCQkvLyBHZXQgJ2xlZnQnIGFuZCAncmlnaHQnIHNpYmxpbmdzCi0JCQlsZWZ0U2libGluZ0VkaXRQYXJ0ID0gZ2V0VmVydGljYWxMZWZ0U2libGluZyh0YXJnZXRFZGl0UGFydFNpYmxpbmdzLCBtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBwb2ludGVyTG9jYXRpb24pOwotCQkJcmlnaHRTaWJsaW5nRWRpdFBhcnQgPSBnZXRWZXJ0aWNhbFJpZ2h0U2libGluZyh0YXJnZXRFZGl0UGFydFNpYmxpbmdzLCBtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBwb2ludGVyTG9jYXRpb24pOyAgICAgICAgICAgCQotCi0JCQlpZiAobW92aW5nQ2hpbGRFZGl0UGFydCAhPSBudWxsKQotCQkJCW1vdmluZ0NoaWxkID0gKElBU0RPYmplY3QpIG1vdmluZ0NoaWxkRWRpdFBhcnQuZ2V0TW9kZWwoKTsKLQkJCWlmIChsZWZ0U2libGluZ0VkaXRQYXJ0ICE9IG51bGwpCi0JCQkJbGVmdFNpYkVsZW1lbnQgPSAoSUFTRE9iamVjdCkgbGVmdFNpYmxpbmdFZGl0UGFydC5nZXRNb2RlbCgpOwotCQkJaWYgKHJpZ2h0U2libGluZ0VkaXRQYXJ0ICE9IG51bGwpCi0JCQkJcmlnaHRTaWJFbGVtZW50ID0gKElBU0RPYmplY3QpIHJpZ2h0U2libGluZ0VkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JCQkKLQkJCW5ld1BhcmVudCA9IChJQVNET2JqZWN0KSB0YXJnZXRQYXJlbnRFZGl0UGFydC5nZXRNb2RlbCgpOwotCQl9Ci0JCWVsc2UgewotCQkJbmV3UGFyZW50ID0gKElBU0RPYmplY3QpIHRhcmdldFBhcmVudEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JCQlsZWZ0U2liRWxlbWVudCA9IG51bGw7Ci0JCQlyaWdodFNpYkVsZW1lbnQ9IG51bGw7Ci0JCX0KLQkgIH0KLQkgICAgICAgICAgICAKLQkgIHB1YmxpYyBib29sZWFuIGNhbkV4ZWN1dGUoKQotCSAgewotCSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCSAgICAKLQkgICAgaWYgKGNhbk5ldmVyRXhlY3V0ZSB8fCBuZXdQYXJlbnQgPT0gbnVsbCB8fCBtb3ZpbmdDaGlsZCA9PSBudWxsKSB7Ci0JICAgIAlyZXR1cm4gZmFsc2U7Ci0JICAgIH0KLQkgICAgCi0JICAgIGlmIChtb3ZpbmdDaGlsZCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JICAgIAlJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSBtb3ZpbmdDaGlsZDsKLQkgICAgCWlmIChtZXNzYWdlUmVmLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUIHx8IG1lc3NhZ2VSZWYuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKSB7Ci0JICAgIAkJSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYk1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIGxlZnRTaWJFbGVtZW50OwotCi0JICAgIAkJcmVzdWx0ID0gdHJ1ZTsKLQkgICAgCQlpZiAobGVmdFNpYk1lc3NhZ2VSZWYgIT0gbnVsbCkgewotCSAgICAJCQlpZiAobGVmdFNpYk1lc3NhZ2VSZWYuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfRkFVTFQpIHsKLQkgICAgCQkJCXJlc3VsdCA9IGZhbHNlOwotCSAgICAJCQl9Ci0JICAgIAkJfQotCSAgICAJCWlmICghKHJlc3VsdCAmJiBuZXdQYXJlbnQuZXF1YWxzKG1lc3NhZ2VSZWYuZ2V0T3duZXJPcGVyYXRpb24oKSkpKSB7Ci0JICAgIAkJCXJlc3VsdCA9IGZhbHNlOwotCSAgICAJCX0KLQkgICAgCX0KLQkgICAgfQotCSAgICBlbHNlIGlmIChtb3ZpbmdDaGlsZCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkgICAgCWlmIChuZXdQYXJlbnQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSAmJiBuZXdQYXJlbnQuZXF1YWxzKCgoSVBhcmFtZXRlcikgbW92aW5nQ2hpbGQpLmdldE93bmVyKCkpKSB7Ci0JICAgIAkJcmVzdWx0ID0gdHJ1ZTsKLQkgICAgCX0KLQkgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIHJlc3VsdDsKLQkgIH0gICAgICAgICAgIAotCi0JICAvKgotCSAgICogQHNlZSBJQWN0aW9uI3J1bigpCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIHJ1bigpCi0JICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLy8JICAgIGJlZ2luUmVjb3JkaW5nKCk7Ci0JICAJaWYgKGNhbkV4ZWN1dGUoKSkgewotCSAgCQlpZiAobW92aW5nQ2hpbGQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCSAgCQkJT2JqZWN0IG1lc3NhZ2VSZWZPd25lciA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vdmluZ0NoaWxkKS5nZXRPd25lck9wZXJhdGlvbigpOwotCSAgCQkJaWYgKG1lc3NhZ2VSZWZPd25lciBpbnN0YW5jZW9mIElPcGVyYXRpb24pIHsKLQkgIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSBsZWZ0U2liRWxlbWVudDsKLQkgIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgcmlnaHRTaWJFbGVtZW50OwotCSAgCQkJCUlNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ1NpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbW92aW5nQ2hpbGQ7Ci0JICAJCQkJQ29tbWFuZCBjb21tYW5kID0gKChJT3BlcmF0aW9uKSBtZXNzYWdlUmVmT3duZXIpLmdldFJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQobGVmdFNpYiwgcmlnaHRTaWIsIG1vdmluZ1NpYik7Ci0JICAJCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JICAJCQl9Ci0JICAJCX0KLQkgIAkJZWxzZSBpZiAobW92aW5nQ2hpbGQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JICAJCQlPYmplY3QgcGFyYW1Pd25lciA9ICgoSVBhcmFtZXRlcikgbW92aW5nQ2hpbGQpLmdldE93bmVyKCk7Ci0JICAJCQlpZiAocGFyYW1Pd25lciBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JICAJCQkJSVBhcmFtZXRlciBsZWZ0U2liID0gKElQYXJhbWV0ZXIpIGxlZnRTaWJFbGVtZW50OwotCSAgCQkJCUlQYXJhbWV0ZXIgcmlnaHRTaWIgPSAoSVBhcmFtZXRlcikgcmlnaHRTaWJFbGVtZW50OwotCSAgCQkJCUlQYXJhbWV0ZXIgbW92aW5nU2liID0gKElQYXJhbWV0ZXIpIG1vdmluZ0NoaWxkOwotCSAgCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIHBhcmFtT3duZXIpLmdldFJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLQkgIAkJCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkgIAkJCX0KLQkgIAkJfQotLy8JICAJCXdzZGxFZGl0b3IuZ2V0U2VsZWN0aW9uTWFuYWdlcigpLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb3ZpbmdDaGlsZCkpOwotCSAgCX0KLS8vCSAgICBlbmRSZWNvcmRpbmcoKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIElGaWd1cmUgZ2V0RmVlZGJhY2tGaWd1cmUoKSB7Ci0JICAJSUZpZ3VyZSBmZWVkYmFja0ZpZ3VyZSA9IG51bGw7Ci0JICAgIGlmIChmZWVkYmFja0ZpZ3VyZSA9PSBudWxsICYmIG1vdmluZ0NoaWxkRWRpdFBhcnQgaW5zdGFuY2VvZiBHcmFwaGljYWxFZGl0UGFydCkKLQkgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgICAgIGZlZWRiYWNrRmlndXJlID0gbmV3IFBvbHlsaW5lKCk7Ci0JICAgICAgKChQb2x5bGluZSlmZWVkYmFja0ZpZ3VyZSkuc2V0TGluZVdpZHRoKDIpOwkKLQkgICAgICBkcmF3TGluZXMoKFBvbHlsaW5lKSBmZWVkYmFja0ZpZ3VyZSk7Ci0JICAgIH0KLQkgICAgCi0JICAJcmV0dXJuIGZlZWRiYWNrRmlndXJlOwotCSAgfQotCi0JICAvKiBSZXR1cm4gYSBQb2ludExpc3Qgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGFkZCBhIGZlZWRiYWNrIGZpZ3VyZS4gIFRoZSBmZWVkYmFjayBmaWd1cmUgd2lsbCBiZSBhCi0JICAgKiBQb2x5bGluZSBjb21wb3NlZCBvZiB0aGUgUG9pbnRzIGluIHRoZSBQb2ludExpc3QKLQkgICAqLwotCSAgcHJpdmF0ZSBQb2ludExpc3QgZHJhd0xpbmVzKFBvbHlsaW5lIHBvbHlMaW5lKSB7Ci0JICAgIFBvaW50TGlzdCBwb2ludExpc3QgPSBuZXcgUG9pbnRMaXN0KCk7IAotCSAgICAKLQkgICAgaWYgKGxlZnRTaWJsaW5nRWRpdFBhcnQgIT0gbnVsbCkgewotCSAgICAJUmVjdGFuZ2xlIGxlZnRSZWN0YW5nbGUgPSBsZWZ0U2libGluZ0VkaXRQYXJ0LmdldEZpZ3VyZSgpLmdldEJvdW5kcygpOwotCQkgICAJaW50IHhDb29yZCA9IGxlZnRSZWN0YW5nbGUueDsKLQkJICAJaW50IHlDb29yZCA9IGxlZnRSZWN0YW5nbGUueTsKLQkJICAgCWludCBoZWlnaHQgPSBsZWZ0UmVjdGFuZ2xlLmhlaWdodDsKLQkJICAgCWludCB3aWR0aCA9IGxlZnRSZWN0YW5nbGUud2lkdGg7Ci0KLQkJICAgCS8vIERyYXcgbGVmdCBlbmQgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkICsgaGVpZ2h0ICsgMywgeENvb3JkLCB5Q29vcmQgKyBoZWlnaHQgLSAzKTsKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQsIHlDb29yZCArIGhlaWdodCAtIDMsIHhDb29yZCwgeUNvb3JkICsgaGVpZ2h0KTsKLQkJICAgCQotCQkgICAJLy8gRHJhdyBob3Jpem9udGFsIGxpbmUKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQsIHlDb29yZCArIGhlaWdodCwgeENvb3JkICsgd2lkdGgsIHlDb29yZCArIGhlaWdodCk7Ci0JCSAgIAkKLQkJICAgCS8vIERyYXcgcmlnaHQgZW5kIGxpbmUKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0LCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0IC0gMyk7Ci0JCSAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0LCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0ICsgMyk7ICAgCQotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHJpZ2h0U2libGluZ0VkaXRQYXJ0ICE9IG51bGwpIHsKLQkgICAgCVJlY3RhbmdsZSByaWdodFJlY3RhbmdsZSA9IHJpZ2h0U2libGluZ0VkaXRQYXJ0LmdldEZpZ3VyZSgpLmdldEJvdW5kcygpOwotCSAgICAJaW50IHhDb29yZCA9IHJpZ2h0UmVjdGFuZ2xlLng7Ci0JICAgIAlpbnQgeUNvb3JkID0gcmlnaHRSZWN0YW5nbGUueTsKLQkgICAJCWludCB3aWR0aCA9IHJpZ2h0UmVjdGFuZ2xlLndpZHRoOwkKLQotCSAgIAkJLy8gRHJhdyBsZWZ0IGVuZCBsaW5lCi0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkLCB5Q29vcmQgKyAzLCB4Q29vcmQsIHlDb29yZCAtIDMpOwotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkIC0gMywgeENvb3JkLCB5Q29vcmQpOwotCQkgICAJCi0JCSAgIAkvLyBEcmF3IGhvcml6b250YWwgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkKTsKLQkJICAgCQotCQkgICAJLy8gRHJhdyByaWdodCBlbmQgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgLSAzKTsKLQkJICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgKyAzKTsgICAKLQkgICAgfQotCi0JICAgIHJldHVybiBwb2ludExpc3Q7Ci0JICB9ICAgICAgICAgICAgICAgICAgICAKLQkgIAotCSAgcHJvdGVjdGVkIFBvbHlsaW5lIGFkZExpbmVUb1BvbHlsaW5lKFBvbHlsaW5lIHBvbHlsaW5lLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpIHsKLQkJcG9seWxpbmUuYWRkUG9pbnQobmV3IFBvaW50KHgxLCB5MSkpOwotCQlwb2x5bGluZS5hZGRQb2ludChuZXcgUG9pbnQoeDIsIHkyKSk7Ci0KLQkJcmV0dXJuIHBvbHlsaW5lOwotCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgCi0JICAvKgotCSAgICogUHJlLWNvbmRpdGlvbjogVGhlIExpc3Qgc2libGluZ3Mgc2hvdWxkIGJlIHNvcnRlZCBieSBpdCdzIHktY29vcmRpbmF0ZSAKLQkgICAqLwotCSAgcHJpdmF0ZSBHcmFwaGljYWxFZGl0UGFydCBnZXRWZXJ0aWNhbFJpZ2h0U2libGluZyhMaXN0IHNpYmxpbmdzLCBHcmFwaGljYWxFZGl0UGFydCBtb3ZpbmdFZGl0UGFydCwgUG9pbnQgcG9pbnRlckxvY2F0aW9uKSB7Ci0JICAJR3JhcGhpY2FsRWRpdFBhcnQgcmlnaHRTaWJsaW5nID0gbnVsbDsKLQkgIAlpbnQgcG9pbnRlcllMb2NhdGlvbiA9IHBvaW50ZXJMb2NhdGlvbi55OwotCi0JICAJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNpYmxpbmdzLnNpemUoKTsgaW5kZXgrKykgewotCSAgCQlHcmFwaGljYWxFZGl0UGFydCBzaWJsaW5nID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBzaWJsaW5ncy5nZXQoaW5kZXgpOwotCSAgCQlpbnQgc2libGluZ1lMb2NhdGlvbiA9IHNpYmxpbmcuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCkueTsKLQotCSAgCQlpZiAoc2libGluZ1lMb2NhdGlvbiA+IHBvaW50ZXJZTG9jYXRpb24pIHsKLQkgIAkJCXJpZ2h0U2libGluZyA9IHNpYmxpbmc7Ci0JICAJCQlicmVhazsKLQkgIAkJfQotCSAgCX0KLQkgIAkKLQkgIAlyZXR1cm4gcmlnaHRTaWJsaW5nOwotCSAgfQotCi0JICAvKgotCSAgICogUHJlLWNvbmRpdGlvbjogVGhlIExpc3Qgc2libGluZ3Mgc2hvdWxkIGJlIHNvcnRlZCBieSBpdCdzIHktY29vcmRpbmF0ZSAKLQkgICAqLwotCSAgcHJpdmF0ZSBHcmFwaGljYWxFZGl0UGFydCBnZXRWZXJ0aWNhbExlZnRTaWJsaW5nKExpc3Qgc2libGluZ3MsIEdyYXBoaWNhbEVkaXRQYXJ0IG1vdmluZ0VkaXRQYXJ0LCBQb2ludCBwb2ludGVyTG9jYXRpb24pIHsKLQkgIAlHcmFwaGljYWxFZGl0UGFydCBsZWZ0U2libGluZyA9IG51bGw7Ci0JICAJaW50IHBvaW50ZXJZTG9jYXRpb24gPSBwb2ludGVyTG9jYXRpb24ueTsKLQotCSAgCWludCBpbmRleDsKLQkgIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzaWJsaW5ncy5zaXplKCk7IGluZGV4KyspIHsKLQkgIAkJR3JhcGhpY2FsRWRpdFBhcnQgc2libGluZyA9IChHcmFwaGljYWxFZGl0UGFydCkgc2libGluZ3MuZ2V0KGluZGV4KTsKLQkgIAkJaW50IHNpYmxpbmdZTG9jYXRpb24gPSBzaWJsaW5nLmdldEZpZ3VyZSgpLmdldEJvdW5kcygpLmdldENlbnRlcigpLnk7Ci0JICAJICAJCi0JICAJCWlmIChzaWJsaW5nWUxvY2F0aW9uID4gcG9pbnRlcllMb2NhdGlvbikgewotCSAgCQkJaWYgKGluZGV4ID4gMCkgewotCSAgCQkJCWxlZnRTaWJsaW5nID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBzaWJsaW5ncy5nZXQoaW5kZXggLSAxKTsKLQkgIAkJCX0KLQotCSAgCQkJYnJlYWs7Ci0JICAJCX0KLQkgIAl9Ci0KLQkgIAlpZiAoaW5kZXggPT0gc2libGluZ3Muc2l6ZSgpKSB7Ci0JICAJCWxlZnRTaWJsaW5nID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBzaWJsaW5ncy5nZXQoaW5kZXggLSAxKTsKLQkgIAl9Ci0KLQkgIAlyZXR1cm4gbGVmdFNpYmxpbmc7Ci0JICB9Ci0JICAKLQkgIHByb3RlY3RlZCBFZGl0UGFydCBnZXRQYXJlbnRFZGl0UGFydChFZGl0UGFydCB0YXJnZXQpCi0JICB7Ci0JICAJcmV0dXJuIHRhcmdldC5nZXRQYXJlbnQoKTsKLQkgIH0KLQotCSAgcHJpdmF0ZSBjbGFzcyBWZXJ0aWNhbEVkaXRQYXJ0Q29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IgewotCSAgCQotCSAgCXB1YmxpYyBWZXJ0aWNhbEVkaXRQYXJ0Q29tcGFyYXRvcigpIHsKLQkgIAl9Ci0JICAJCi0JICAJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBwYXJ0MSwgT2JqZWN0IHBhcnQyKSB7Ci0JICAJCWludCBjb21wYXJlVmFsdWUgPSAwOwotCi0JICAJCWlmIChwYXJ0MSBpbnN0YW5jZW9mIEdyYXBoaWNhbEVkaXRQYXJ0ICYmIHBhcnQyIGluc3RhbmNlb2YgR3JhcGhpY2FsRWRpdFBhcnQpIHsKLQkgIAkJCUdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0MSA9IChHcmFwaGljYWxFZGl0UGFydCkgcGFydDE7Ci0JICAJCQlHcmFwaGljYWxFZGl0UGFydCBlZGl0UGFydDIgPSAoR3JhcGhpY2FsRWRpdFBhcnQpIHBhcnQyOwotCSAgCQkJCi0JICAJCQlpbnQgZWRpdFBhcnQxWSA9IGVkaXRQYXJ0MS5nZXRGaWd1cmUoKS5nZXRCb3VuZHMoKS5nZXRDZW50ZXIoKS55OwotCSAgCQkJaW50IGVkaXRQYXJ0MlkgPSBlZGl0UGFydDIuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCkueTsKLQkgIAkJCQotCSAgCQkJSW50ZWdlciBpbnRlZ2VyUGFydDEgPSBuZXcgSW50ZWdlcihlZGl0UGFydDFZKTsKLQkgIAkJCUludGVnZXIgaW50ZWdlclBhcnQyID0gbmV3IEludGVnZXIoZWRpdFBhcnQyWSk7Ci0JICAJCQkKLQkgIAkJCWNvbXBhcmVWYWx1ZSA9IGludGVnZXJQYXJ0MS5jb21wYXJlVG8oaW50ZWdlclBhcnQyKTsKLQkgIAkJfQotCi0JICAJCXJldHVybiBjb21wYXJlVmFsdWU7Ci0JICAJfQotCSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RFZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREVkaXROYW1lc3BhY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YjcyN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREVkaXROYW1lc3BhY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLkVkaXROYW1lc3BhY2VzRGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgQVNERWRpdE5hbWVzcGFjZXNBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RFZGl0TmFtZXNwYWNlc0FjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHJpdmF0ZSBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JCi0JcHVibGljIEFTREVkaXROYW1lc3BhY2VzQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQsIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlTdHJpbmcgdGV4dCA9IE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVM7IC8vJE5PTi1OTFMtMSQKLQkJc2V0VGV4dCh0ZXh0KTsKLQkJCi0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlPYmplY3QgbyA9IGRlc2NyaXB0aW9uOwotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQkJbyA9ICgoSUNhdGVnb3J5QWRhcHRlcikgbykuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQkJfQotCQl9Ci0JCQotCQlpZiAobyBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJLy8gVE9ETzogVGhlIGNvZGUgYmVsb3cgaXMgbm90IGdlbmVyaWMuICBXZSBuZWVkIHRvIHJldmlzaXQgdGhpcyB0byBlbnN1cmUgaXQgaXMKLQkJCS8vIGdlbmVyaWMuICBJRGVzY3JpcHRpb24gbmVlZHMgYSBnZXROYW1lc3BhY2VzSW5mbygpIGFuZCBnZXRFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKS4uLgotCQkJSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgbzsKLQkJCVcxMURlc2NyaXB0aW9uIHcxMURlc2NyaXB0aW9uID0gKFcxMURlc2NyaXB0aW9uKSBvOwotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIHcxMURlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCQkJCi0JCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0JCQlMaXN0IG5hbWVzcGFjZUluZm9MaXN0ID0gdzExRGVzY3JpcHRpb24uZ2V0TmFtZXNwYWNlc0luZm8oKTsKLQkJCVN0cmluZyB0bnMgPSBkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCUVkaXROYW1lc3BhY2VzRGlhbG9nIGRpYWxvZyA9IG5ldyBFZGl0TmFtZXNwYWNlc0RpYWxvZyhXU0RMRWRpdG9yUGx1Z2luLmdldFNoZWxsKCksIHBhdGgsIE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVNfRElBTE9HX1RJVExFLCB0bnMsIG5hbWVzcGFjZUluZm9MaXN0KTsgLy8kTk9OLU5MUy0xJAotCQkJaW50IHJjID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLQkJCWlmIChyYyA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKSB7Ci0JCQkJTGlzdCBuZXdJbmZvTGlzdCA9IGRpYWxvZy5nZXROYW1lc3BhY2VJbmZvTGlzdCgpOwotCQkJCVcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCBjb21tYW5kID0gKFcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCkgdzExRGVzY3JpcHRpb24uZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXROYW1lc3BhY2VzSW5mbyhuZXdJbmZvTGlzdCk7Ci0JCQkJY29tbWFuZC5zZXRUYXJnZXROYW1lc3BhY2UoZGlhbG9nLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkJCQlDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCSAgICB9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYTM1OTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREdlbmVyYXRlQmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotCi1wdWJsaWMgY2xhc3MgQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9ubiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREdlbmVyYXRlQmluZGluZ0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0dFTkVSQVRFX0JJTkRJTkdfQ09OVEVOVCk7ICAgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvaW5wdXRfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotIAkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJQmluZGluZykgbykuZ2V0R2VuZXJhdGVCaW5kaW5nQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCX0KLQkJCQotCQkJcGVyZm9ybVNlbGVjdGlvbihvKTsKLQkJfSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRE9wZW5TY2hlbWFBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RPcGVuU2NoZW1hQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NTFlMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRE9wZW5TY2hlbWFBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLQotcHVibGljIGNsYXNzIEFTRE9wZW5TY2hlbWFBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RPcGVuU2NoZW1hQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNET3BlblNjaGVtYUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9PUEVOX1NDSEVNQSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvYmluZGluZ19vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCi0JCQlpZiAobyBpbnN0YW5jZW9mIElUeXBlKSB7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJT2JqZWN0IGhlbHBlciA9IGVkaXRvci5nZXRBZGFwdGVyKElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuY2xhc3MpOwotCQkJCWlmIChoZWxwZXIgaW5zdGFuY2VvZiBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKSB7Ci0JCQkJCSgoSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcikgaGVscGVyKS5zZXRNb2RlbChvKTsKLQkJCQkJKChJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKSBoZWxwZXIpLm9wZW5FeHRlcm5hbEVkaXRvcigpOwotCQkJCX0KLQkJCX0KLQkJfSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTc4NTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJRW5kUG9pbnQgZW5kUG9pbnQ7Ci0JCi0JcHVibGljIEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9FWElTVElOR19CSU5ESU5HKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJRW5kUG9pbnQoSUVuZFBvaW50IGVuZFBvaW50KSB7Ci0JCXRoaXMuZW5kUG9pbnQgPSBlbmRQb2ludDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmIChlbmRQb2ludCA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSUVuZFBvaW50KSB7Ci0JCQkJCWVuZFBvaW50ID0gKElFbmRQb2ludCkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIoZW5kUG9pbnQpOwotCQlpZiAoZW5kUG9pbnQgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXRCcm93c2VEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKGVuZFBvaW50LCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJZW5kUG9pbnQgPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MDVjYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgSUJpbmRpbmcgYmluZGluZzsKLQkKLQlwdWJsaWMgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfUE9SVFRZUEUpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldElCaW5kaW5nKElCaW5kaW5nIGJpbmRpbmcpIHsKLQkJdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmIChiaW5kaW5nID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJQmluZGluZykgewotCQkJCQliaW5kaW5nID0gKElCaW5kaW5nKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKGJpbmRpbmcpOwotICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoYmluZGluZywgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWJpbmRpbmcgPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdCaW5kaW5nQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0TmV3QmluZGluZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmRhOThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdCaW5kaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIEFTRFNldE5ld0JpbmRpbmdBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdCaW5kaW5nQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJRW5kUG9pbnQgZW5kUG9pbnQ7Ci0JCi0JcHVibGljIEFTRFNldE5ld0JpbmRpbmdBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fTkVXX0JJTkRJTkcpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldElFbmRQb2ludChJRW5kUG9pbnQgZW5kUG9pbnQpIHsKLQkJdGhpcy5lbmRQb2ludCA9IGVuZFBvaW50OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKGVuZFBvaW50ID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJRW5kUG9pbnQpIHsKLQkJCQkJZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcihlbmRQb2ludCk7Ci0gICAgICAgIGlmIChlbmRQb2ludCAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoZW5kUG9pbnQsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQllbmRQb2ludCA9IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldE5ld0ludGVyZmFjZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldE5ld0ludGVyZmFjZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmFlYzQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIElCaW5kaW5nIGJpbmRpbmc7Ci0JCi0JcHVibGljIEFTRFNldE5ld0ludGVyZmFjZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ORVdfUE9SVFRZUEUpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldElCaW5kaW5nKElCaW5kaW5nIGJpbmRpbmcpIHsKLQkJdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmIChiaW5kaW5nID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJQmluZGluZykgewotCQkJCQliaW5kaW5nID0gKElCaW5kaW5nKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKGJpbmRpbmcpOwotCQlpZiAoYmluZGluZyAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoYmluZGluZywgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWJpbmRpbmcgPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9CYXNlU2VsZWN0aW9uQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQmFzZVNlbGVjdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWJjMWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9CYXNlU2VsZWN0aW9uQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5TZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLnBhcnRzLkFic3RyYWN0RWRpdFBhcnRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlU2VsZWN0aW9uQWN0aW9uIGV4dGVuZHMgU2VsZWN0aW9uQWN0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1FTlVfU1RBUlRfSUQgPSAiU1VCTUVOVV9TVEFSVF9JRDogIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJNRU5VX0VORF9JRCA9ICJTVUJNRU5VX0VORF9JRDogIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlcjsKLSAgCi0gIHB1YmxpYyBCYXNlU2VsZWN0aW9uQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gIHsKLSAgICBzdXBlcihwYXJ0KTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlNlbGVjdGlvbkFjdGlvbiNnZXRTZWxlY3Rpb24oKQotICAgKi8KLSAgcHJvdGVjdGVkIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLSAgewotICAgIC8vIGFsd2F5cyBnZXQgc2VsZWN0aW9uIGZyb20gc2VsZWN0aW9uIHByb3ZpZGVyIGZpcnN0Ci0gICAgaWYgKHByb3ZpZGVyIT1udWxsKQotICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldFNlbGVjdGlvbigpOwotICAgIAotICAgIHJldHVybiBzdXBlci5nZXRTZWxlY3Rpb24oKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuU2VsZWN0aW9uQWN0aW9uI3NldFNlbGVjdGlvblByb3ZpZGVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uUHJvdmlkZXIoSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyKQotICB7Ci0gICAgc3VwZXIuc2V0U2VsZWN0aW9uUHJvdmlkZXIocHJvdmlkZXIpOwotICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0U2VsZWN0ZWRPYmplY3RzKCkKLSAgewotCSAgTGlzdCBwcm9jZXNzZWRPYmplY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCSAgTGlzdCBvYmplY3RzID0gc3VwZXIuZ2V0U2VsZWN0ZWRPYmplY3RzKCk7Ci0JICBJdGVyYXRvciBpdCA9IG9iamVjdHMuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJICBPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKLQkJICBpZiAoaXRlbSBpbnN0YW5jZW9mIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKSB7Ci0JCQkgIHByb2Nlc3NlZE9iamVjdHMuYWRkKCgoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pIGl0ZW0pLmdldE1vZGVsKCkpOwotCQkgIH0KLQkJICBlbHNlIHsKLQkJCSAgcHJvY2Vzc2VkT2JqZWN0cy5hZGQoaXRlbSk7Ci0JCSAgfQotCSAgfQotCSAgCi0JICByZXR1cm4gcHJvY2Vzc2VkT2JqZWN0czsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpIHsKLQkgIE9iamVjdCBzZWxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JICAKLQkgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJQVNET2JqZWN0KSB7Ci0JCSAgcmV0dXJuICAhKChJQVNET2JqZWN0KSBzZWxlY3Rpb24pLmlzUmVhZE9ubHkoKTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHNlbGVjdEFuZERpcmVjdEVkaXQoZmluYWwgT2JqZWN0IG8pIHsKLQkgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCSAgaWYgKG8gaW5zdGFuY2VvZiBOb3RpZmllcikgewotCQkJCSAgcGVyZm9ybVNlbGVjdGlvbihvKTsKLQkJCQkgIGFjdGl2YXRlRGlyZWN0RWRpdCgpOwotCQkJICB9Ci0JCSAgfX07Ci0JCSAgRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKLSAgfQotCi0JcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVEaXJlY3RFZGl0KCkgewotCQlJV29ya2JlbmNoUGFydCBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotCQlpZiAoIShwYXJ0IGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpKSB7Ci0JCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCU9iamVjdCBncmFwaGljYWxWaWV3ZXIgPSBlZGl0b3IuZ2V0QWRhcHRlcihHcmFwaGljYWxWaWV3ZXIuY2xhc3MpOwotCQkJaWYgKGdyYXBoaWNhbFZpZXdlciBpbnN0YW5jZW9mIEFic3RyYWN0RWRpdFBhcnRWaWV3ZXIpIHsKLQkJCQlBYnN0cmFjdEVkaXRQYXJ0Vmlld2VyIHZpZXdlciA9IChBYnN0cmFjdEVkaXRQYXJ0Vmlld2VyKSBncmFwaGljYWxWaWV3ZXI7Ci0JCQkJT2JqZWN0IG9iaiA9IHZpZXdlci5nZXRTZWxlY3RlZEVkaXRQYXJ0cygpLmdldCgwKTsKLQkJCQkvLyB0b2RvOiBybWFoOiB3ZSBuZWVkIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgZG9EaXJlY3RFZGl0KCkuCi0JCQkJLy8gVXNlIHBlcmZvcm1SZXF1ZXN0KCkgaW5zdGVhZC4KLS8vCQkJCWRvRGlyZWN0RWRpdCgoRWRpdFBhcnQpIG9iaik7Ci0JCQkJUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoKTsKLQkJCQlyZXF1ZXN0LnNldFR5cGUoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpOwotCQkJCSgoRWRpdFBhcnQpIG9iaikucGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZG9EaXJlY3RFZGl0KEVkaXRQYXJ0IGVwKSB7Ci0JCVJlcXVlc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KCk7Ci0JCXJlcXVlc3Quc2V0VHlwZShSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCk7Ci0JCWVwLnBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QpOwotCX0KLQkKLSAgICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtU2VsZWN0aW9uKE9iamVjdCBvYmplY3QpIHsKLSAgICAJT2JqZWN0IGFkYXB0ZWQgPSBudWxsOwotICAgIAkKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vdGlmaWVyKSB7Ci0JCQlOb3RpZmllciBlbGVtZW50ID0gKE5vdGlmaWVyKSBvYmplY3Q7Ci0JCQkvLyBUT0RPOiBXZSBzaG91bGRuJ3Qga25vdyBhYm91dCBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIgaGVyZS4uLi4KLQkJCWFkYXB0ZWQgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50KTsJCQkKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJQVNET2JqZWN0KSB7Ci0JCQlhZGFwdGVkID0gb2JqZWN0OwotCQl9Ci0KLQkJaWYgKGFkYXB0ZWQgIT0gbnVsbCkgewotCSAgICAJdHJ5IHsKLQkJICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJICAgICAgICBpZiAoZWRpdG9yICE9IG51bGwgJiYgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKSAhPSBudWxsKSB7Ci0JCSAgICAgICAgCUlTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlciA9IChJU2VsZWN0aW9uUHJvdmlkZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0JCSAgICAgICAgCWlmIChwcm92aWRlciAhPSBudWxsKSB7Ci0JCSAgICAgICAgCQlwcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oYWRhcHRlZCkpOwotCQkgICAgICAgIAl9Ci0JCSAgICAgICAgfQotCSAgICAJfQotCSAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCQl9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0lBU0RBZGRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvSUFTREFkZENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUyZWUwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvSUFTREFkZENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotcHVibGljIGludGVyZmFjZSBJQVNEQWRkQ29tbWFuZCB7Ci0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNDQ3YWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL1Nob3dQcm9wZXJ0aWVzVmlld0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotCi0KLS8qKgotICogU2hvdyB0aGUgcHJvcGVydGllcyB2aWV3IGluIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlLgotICovCi1wdWJsaWMgY2xhc3MgU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbgotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLlNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUSUVTX1ZJRVdfSUQgPSAib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJvdGVjdGVkIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZW5hYmxlZEltYWdlLCBkaXNhYmxlZEltYWdlOwotCi0JcHVibGljIFNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQotICB7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9TSE9XX1BST1BFUlRJRVMpOwotCQlzZXRUb29sVGlwVGV4dChnZXRUZXh0KCkpOwotICAgIHNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigiaWNvbnMvZWxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYiKSApOyAvLyROT04tTkxTLTEkCi0JICBzZXREaXNhYmxlZEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigiaWNvbnMvZGxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYiKSApOyAvLyROT04tTkxTLTEkCi0JfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGdldFdvcmtiZW5jaFBhcnQoKS5nZXRTaXRlKCkuZ2V0UGFnZSgpLnNob3dWaWV3KFBST1BFUlRJRVNfVklFV19JRCk7Ci0gICAgfQotICAgIGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBwaWUpCi0gICAgewotCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FkYXB0ZXJmYWN0b3J5L2V4dGVuc2lvbi9BZGFwdGVyRmFjdG9yeUV4dGVuc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hZGFwdGVyZmFjdG9yeS9leHRlbnNpb24vQWRhcHRlckZhY3RvcnlFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI5MThmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FkYXB0ZXJmYWN0b3J5L2V4dGVuc2lvbi9BZGFwdGVyRmFjdG9yeUV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWRhcHRlcmZhY3RvcnkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbiB7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlOwotCXByaXZhdGUgU3RyaW5nIGFkYXB0ZXJGYWN0b3J5Q2xhc3NOYW1lOwotCXByaXZhdGUgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXI7Ci0JCi0JcHVibGljIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uKFN0cmluZyBuYW1lc3BhY2UpIHsKLQkJdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEFkYXB0ZXJGYWN0b3J5Q2xhc3NOYW1lKFN0cmluZyBmYWN0b3J5Q2xhc3NOYW1lKSB7Ci0JCWFkYXB0ZXJGYWN0b3J5Q2xhc3NOYW1lID0gZmFjdG9yeUNsYXNzTmFtZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0Q2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpewotCSAgICB0aGlzLmNsYXNzTG9hZGVyID0gY2xhc3NMb2FkZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkgewotCQlyZXR1cm4gbmFtZXNwYWNlOwotCX0KLQkKLQlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7Ci0JCUFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQlpZiAoYWRhcHRlckZhY3RvcnlDbGFzc05hbWUgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlDbGFzcyB0aGVDbGFzcyA9IGNsYXNzTG9hZGVyICE9IG51bGwgPyBjbGFzc0xvYWRlci5sb2FkQ2xhc3MoYWRhcHRlckZhY3RvcnlDbGFzc05hbWUpIDogQ2xhc3MuZm9yTmFtZShhZGFwdGVyRmFjdG9yeUNsYXNzTmFtZSk7Ci0JCQkJZmFjdG9yeSA9IChBZGFwdGVyRmFjdG9yeSkgdGhlQ2xhc3MubmV3SW5zdGFuY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhY3Rvcnk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hZGFwdGVyZmFjdG9yeS9leHRlbnNpb24vQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hZGFwdGVyZmFjdG9yeS9leHRlbnNpb24vQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGI5OWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWRhcHRlcmZhY3RvcnkvZXh0ZW5zaW9uL0FkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWRhcHRlcmZhY3RvcnkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLQotcHVibGljIGNsYXNzIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkgewotCXByb3RlY3RlZCBMaXN0IHJlZ2lzdGVyZWRBZGFwdGVyRmFjdG9yaWVzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIHZvaWQgYWRkKEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIGZhY3RvcnkpIHsKLQkJcmVnaXN0ZXJlZEFkYXB0ZXJGYWN0b3JpZXMuYWRkKGZhY3RvcnkpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRBZGFwdGVyRmFjdG9yeU5hbWVzcGFjZXMoKSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gcmVnaXN0ZXJlZEFkYXB0ZXJGYWN0b3JpZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbiBleHRlbnNpb24gPSAoQWRhcHRlckZhY3RvcnlFeHRlbnNpb24pIGkubmV4dCgpOwotCQkJbGlzdC5hZGQoZXh0ZW5zaW9uLmdldE5hbWVzcGFjZSgpKTsKLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JcHVibGljIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIGdldEV4dGVuc2lvbkZvck5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKSB7Ci0JCUFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIHJlc3VsdCA9IG51bGw7Ci0JCWlmIChuYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJZm9yIChJdGVyYXRvciBpID0gcmVnaXN0ZXJlZEFkYXB0ZXJGYWN0b3JpZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJQWRhcHRlckZhY3RvcnlFeHRlbnNpb24gZXh0ZW5zaW9uID0gKEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uKSBpLm5leHQoKTsKLQkJCQlpZiAobmFtZXNwYWNlLmVxdWFscyhleHRlbnNpb24uZ2V0TmFtZXNwYWNlKCkpKSB7Ci0JCQkJCXJlc3VsdCA9IGV4dGVuc2lvbjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9jb250ZW50Z2VuZXJhdG9yL3VpL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvY29udGVudGdlbmVyYXRvci91aS9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNTgwNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9jb250ZW50Z2VuZXJhdG9yL3VpL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZTsKLQotcHVibGljIGNsYXNzIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiB7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIFN0cmluZyBuYW1lc3BhY2U7Ci0JcHJpdmF0ZSBTdHJpbmcgbGFiZWw7Ci0JcHJpdmF0ZSBTdHJpbmcgYmluZGluZ09wdGlvbnNQYWdlQ2xhc3NOYW1lOwotCXByaXZhdGUgU3RyaW5nIHBvcnRPcHRpb25zUGFnZUNsYXNzTmFtZTsKLQkKLQlwcml2YXRlIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyOwotCQotCXB1YmxpYyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lc3BhY2UpIHsKLQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QmluZGluZ09wdGlvbnNQYWdlQ2xhc3NOYW1lKFN0cmluZyBiaW5kaW5nQ2xhc3NOYW1lKSB7Ci0JCWJpbmRpbmdPcHRpb25zUGFnZUNsYXNzTmFtZSA9IGJpbmRpbmdDbGFzc05hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UG9ydE9wdGlvbnNQYWdlQ2xhc3NOYW1lKFN0cmluZyBwb3J0Q2xhc3NOYW1lKSB7Ci0JCXBvcnRPcHRpb25zUGFnZUNsYXNzTmFtZSA9IHBvcnRDbGFzc05hbWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldENsYXNzTG9hZGVyKENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKXsKLQkgICAgdGhpcy5jbGFzc0xvYWRlciA9IGNsYXNzTG9hZGVyOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBuYW1lOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIG5hbWVzcGFjZTsKLQl9Ci0JCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBnZXRCaW5kaW5nQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKCkgewotCQlDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzTmFtZSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUNsYXNzIHRoZUNsYXNzID0gY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyhiaW5kaW5nT3B0aW9uc1BhZ2VDbGFzc05hbWUpIDogQ2xhc3MuZm9yTmFtZShiaW5kaW5nT3B0aW9uc1BhZ2VDbGFzc05hbWUpOwotCQkJCXJlc3VsdCA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXB1YmxpYyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgZ2V0UG9ydENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSgpIHsKLQkJQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIHJlc3VsdCA9IG51bGw7Ci0JCWlmIChwb3J0T3B0aW9uc1BhZ2VDbGFzc05hbWUgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlDbGFzcyB0aGVDbGFzcyA9IGNsYXNzTG9hZGVyICE9IG51bGwgPyBjbGFzc0xvYWRlci5sb2FkQ2xhc3MocG9ydE9wdGlvbnNQYWdlQ2xhc3NOYW1lKSA6IENsYXNzLmZvck5hbWUocG9ydE9wdGlvbnNQYWdlQ2xhc3NOYW1lKTsKLQkJCQlyZXN1bHQgPSAoQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKSB0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkgewotCSAgcmV0dXJuIGxhYmVsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRMYWJlbChTdHJpbmcgbGFiZWwpIHsKLQkgIHRoaXMubGFiZWwgPSBsYWJlbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9jb250ZW50Z2VuZXJhdG9yL3VpL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9jb250ZW50Z2VuZXJhdG9yL3VpL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjg1M2Y4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvY29udGVudGdlbmVyYXRvci91aS9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGNsYXNzIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHsKLQlwcm90ZWN0ZWQgTGlzdCByZWdpc3RlcmVkQ29udGVudEdlbmVyYXRvclVJTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCXB1YmxpYyB2b2lkIGFkZChDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uKSB7Ci0JCXJlZ2lzdGVyZWRDb250ZW50R2VuZXJhdG9yVUlMaXN0LmFkZChleHRlbnNpb24pOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldEJpbmRpbmdFeHRlbnNpb25OYW1lcygpIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQ29udGVudEdlbmVyYXRvclVJTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24gPSAoQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uKSBpLm5leHQoKTsKLQkJCWxpc3QuYWRkKGV4dGVuc2lvbi5nZXROYW1lKCkpOwotCQl9Ci0JCXJldHVybiBsaXN0OwotCX0KLQotCXB1YmxpYyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpIHsKLQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIHJlc3VsdCA9IG51bGw7Ci0JCWlmIChuYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJZm9yIChJdGVyYXRvciBpID0gcmVnaXN0ZXJlZENvbnRlbnRHZW5lcmF0b3JVSUxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24pIGkubmV4dCgpOwotCQkJCWlmIChuYW1lc3BhY2UuZXF1YWxzKGV4dGVuc2lvbi5nZXROYW1lc3BhY2UoKSkpIHsKLQkJCQkJcmVzdWx0ID0gZXh0ZW5zaW9uOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZ2V0RXh0ZW5zaW9uRm9yTmFtZShTdHJpbmcgbmFtZSkgewotCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gcmVzdWx0ID0gbnVsbDsKLQkJaWYgKG5hbWUgIT0gbnVsbCkgewotCQkJZm9yIChJdGVyYXRvciBpID0gcmVnaXN0ZXJlZENvbnRlbnRHZW5lcmF0b3JVSUxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24pIGkubmV4dCgpOwotCQkJCWlmIChuYW1lLmVxdWFscyhleHRlbnNpb24uZ2V0TmFtZSgpKSkgewotCQkJCQlyZXN1bHQgPSBleHRlbnNpb247Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotICAKLSAgcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBnZXRFeHRlbnNpb25Gb3JMYWJlbChTdHJpbmcgbGFiZWwpCi0gIHsKLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAobGFiZWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQ29udGVudEdlbmVyYXRvclVJTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24gPSAoQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uKSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGxhYmVsLmVxdWFscyhleHRlbnNpb24uZ2V0TGFiZWwoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBleHRlbnNpb247Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwZDIyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkNvbnRleHRNZW51UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkFjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5TaG93UHJvcGVydGllc1ZpZXdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQ29sdW1uRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSUFjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Db250ZXh0TWVudVBhcnRpY2lwYW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5FZGl0b3JNb2RlTWFuYWdlcjsKLQotCi1wdWJsaWMgY2xhc3MgRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIgZXh0ZW5kcyBDb250ZXh0TWVudVByb3ZpZGVyCi17Ci0gIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEdyYXBoQ29udGV4dE1lbnVQcm92aWRlci4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3Rpb25Qcm92aWRlcgotICAgKiBAcGFyYW0gZWRpdG9yCi0gICAqLwotICBwdWJsaWMgRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIoRWRpdFBhcnRWaWV3ZXIgdmlld2VyLCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIpCi0gIHsKLSAgICBzdXBlcih2aWV3ZXIpOwotICAgIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIgPSBzZWxlY3Rpb25Qcm92aWRlcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIE9iamVjdCBnZXRBcHByb3ByaWF0ZVNlbGVjdGlvbihPYmplY3Qgc2VsZWN0aW9uKSB7Ci0JICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgQ29sdW1uRWRpdFBhcnQpIHsKLQkJICByZXR1cm4gKChFZGl0UGFydCkgc2VsZWN0aW9uKS5nZXRQYXJlbnQoKTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHNlbGVjdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmdlZi51aS5wYXJ0cy5Db250ZXh0TWVudVByb3ZpZGVyI2J1aWxkQ29udGV4dE1lbnUob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlciwKLSAgICogICAgICBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRWaWV3ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBidWlsZENvbnRleHRNZW51KElNZW51TWFuYWdlciBtZW51KQotICB7Ci0JSU1lbnVNYW5hZ2VyIGN1cnJlbnRNZW51ID0gbWVudTsKLSAgICAKLSAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQlFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gKEVkaXRvck1vZGVNYW5hZ2VyKWVkaXRvci5nZXRBZGFwdGVyKEVkaXRvck1vZGVNYW5hZ2VyLmNsYXNzKTsKLQlDb250ZXh0TWVudVBhcnRpY2lwYW50IGNvbnRleHRNZW51UGFydGljaXBhbnQgPSBtYW5hZ2VyICE9IG51bGwgPyBtYW5hZ2VyLmdldEN1cnJlbnRNb2RlKCkuZ2V0Q29udGV4dE1lbnVQYXJ0aWNpcGFudCgpIDogbnVsbDsKLQotICAgICAgICAKLSAgICBjdXJyZW50TWVudS5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOwotICAgIEFjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0RWRpdG9yQWN0aW9uUmVnaXN0cnkoKTsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpOwotICAgIAotICAgIE9iamVjdCBhY3RpdmVQYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotICAgIAotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPYmplY3Qgc2VsZWN0ZWRPYmplY3QgPSAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBzZWxlY3RlZE9iamVjdCA9IGdldEFwcHJvcHJpYXRlU2VsZWN0aW9uKHNlbGVjdGVkT2JqZWN0KTsKLQotICAgICAgaWYgKGNvbnRleHRNZW51UGFydGljaXBhbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gQ29udmVydCBlZGl0cGFydHMgdG8gbW9kZWwgb2JqZWN0cyBhcyBzZWxlY3Rpb25zCi0gICAgICAgIE9iamVjdCBvID0gc2VsZWN0ZWRPYmplY3Q7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgRWRpdFBhcnQpCi0gICAgICAgIHsKLSAgICAgICAgICBvID0gKChFZGl0UGFydClzZWxlY3RlZE9iamVjdCkuZ2V0TW9kZWwoKTsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgY29udGV4dE1lbnVQYXJ0aWNpcGFudC5jb250cmlidXRlQWN0aW9ucyhvLCBtZW51KTsKLSAgICAgIH0gIAotICAgICAgCi0gICAgICBpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBJQWN0aW9uUHJvdmlkZXIpCi0gICAgICB7Ci0gICAgICAgIElBY3Rpb25Qcm92aWRlciBhY3Rpb25Qcm92aWRlciA9IChJQWN0aW9uUHJvdmlkZXIpIHNlbGVjdGVkT2JqZWN0OwotICAgICAgICBTdHJpbmdbXSBhY3Rpb25zID0gYWN0aW9uUHJvdmlkZXIuZ2V0QWN0aW9ucyhhY3RpdmVQYXJ0KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGlkID0gYWN0aW9uc1tpXTsgICAgICAgICAgCi0gICAgICAgICAgaWYgKGNvbnRleHRNZW51UGFydGljaXBhbnQgPT0gbnVsbCB8fCBjb250ZXh0TWVudVBhcnRpY2lwYW50LmlzQXBwbGljYWJsZShzZWxlY3RlZE9iamVjdCwgaWQpKQotICAgICAgICAgIHsgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaWQuc3RhcnRzV2l0aChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQpKSB7Ci0gICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gaWQuc3Vic3RyaW5nKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgIElNZW51TWFuYWdlciBzdWJNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKHRleHQpOwotICAgICAgICAgICAgICBjdXJyZW50TWVudS5hZGQoc3ViTWVudSk7Ci0gICAgICAgICAgICAgIGN1cnJlbnRNZW51ID0gc3ViTWVudTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlkLnN0YXJ0c1dpdGgoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCkpIHsKLSAgICAgICAgICAgICAgY3VycmVudE1lbnUgPSBnZXRQYXJlbnRNZW51KG1lbnUsIGN1cnJlbnRNZW51KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElBY3Rpb24gYWN0aW9uID0gcmVnaXN0cnkuZ2V0QWN0aW9uKGlkKTsKLSAgICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uLmlzRW5hYmxlZCgpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRNZW51LmFkZChhY3Rpb24pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0gICAgIAotICAgICAgICAKLSAgICAgICAgbWVudS5hZGQocmVnaXN0cnkuZ2V0QWN0aW9uKFNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbi5JRCkpOwotICAgICAgICBtZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOyAgICAgICAKLSAgICAgICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigicmVmYWN0b3Jpbmctc2xvdC10ZW1wIikpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgICBtZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOyAgICAgICAKLSAgICAgICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigic2VhcmNoX3Nsb3RfdGVtcCIpKTsgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKLSAgICAgIH0KLSAgICB9ICAgIAotICAgIG1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGdldFBhcmVudE1lbnUoSU1lbnVNYW5hZ2VyIHJvb3QsIElNZW51TWFuYWdlciBjaGlsZCkgewotCSAgSU1lbnVNYW5hZ2VyIHBhcmVudCA9IG51bGw7Ci0JICAKLQkgIElDb250cmlidXRpb25JdGVtW10ga2lkcyA9IHJvb3QuZ2V0SXRlbXMoKTsKLQkgIGludCBpbmRleCA9IDA7Ci0JICB3aGlsZSAoaW5kZXggPCBraWRzLmxlbmd0aCAmJiBwYXJlbnQgPT0gbnVsbCkgewotCQkgIElDb250cmlidXRpb25JdGVtIGl0ZW0gPSBraWRzW2luZGV4XTsKLQkJICBpZiAoaXRlbS5lcXVhbHMoY2hpbGQpKSB7Ci0JCQkgIHBhcmVudCA9IHJvb3Q7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBpZiAoaXRlbSBpbnN0YW5jZW9mIElNZW51TWFuYWdlcikgewotCQkJCSAgcGFyZW50ID0gZ2V0UGFyZW50TWVudSgoSU1lbnVNYW5hZ2VyKSBpdGVtLCBjaGlsZCk7Ci0JCQkgIH0KLQkJICB9Ci0JCSAgaW5kZXgrKzsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHBhcmVudDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFjdGlvblJlZ2lzdHJ5IGdldEVkaXRvckFjdGlvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiAoQWN0aW9uUmVnaXN0cnkpIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgfQotICBwcm90ZWN0ZWQgQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjazsKLQotICBwcm90ZWN0ZWQgQ29tbWFuZFN0YWNrIGdldENvbW1hbmRTdGFjaygpCi0gIHsKLSAgICBpZiAoY29tbWFuZFN0YWNrID09IG51bGwpCi0gICAgICBjb21tYW5kU3RhY2sgPSBnZXRWaWV3ZXIoKS5nZXRFZGl0RG9tYWluKCkuZ2V0Q29tbWFuZFN0YWNrKCk7Ci0gICAgcmV0dXJuIGNvbW1hbmRTdGFjazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmUyZGE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuU2VsZWN0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkucGFydHMuU2Nyb2xsaW5nR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZGVzaWduLkJhc2VHcmFwaGljYWxWaWV3ZXJLZXlIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Db21tb25TZWxlY3Rpb25NYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlciBleHRlbmRzIFNjcm9sbGluZ0dyYXBoaWNhbFZpZXdlciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIEFTRFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyID0gbmV3IEFTRFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpOwotLy9UT0RPIE1ha2UgdGhpcyBnZW5lcmljCi0JICBwdWJsaWMgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcihJRWRpdG9yUGFydCBlZGl0b3IsIENvbW1vblNlbGVjdGlvbk1hbmFnZXIgbWFuYWdlcikKLQkgIHsKLQkgICAgc3VwZXIoKTsKLQotCSAgICBzZXRDb250ZXh0TWVudShuZXcgRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIodGhpcywgdGhpcykpOwotCSAgICAKLS8vCSAgICBNZW51TWFuYWdlciBtYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCIjcG9wdXAiKTsKLS8vCSAgICBtYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcihtZW51UHJvdmlkZXIpOwotLy8JICAgIG1hbmFnZXIuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOwotLy8JICAgIE1lbnUgbWVudSA9IG1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUoZ2V0Q29udHJvbCgpKTsKLS8vCSAgICBnZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsgIAotCi0JICAgIGVkaXRvci5nZXRFZGl0b3JTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudSgib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucG9wdXAuZ3JhcGgiLCBnZXRDb250ZXh0TWVudSgpLCBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQotCSAgICAvLyBtYWtlIHRoZSBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyIGxpc3RlbiB0byBncmFwaCB2aWV3IHNlbGVjdGlvbiBjaGFuZ2VzCi0JICAgIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyKTsgICAgCi0JICAgIGludGVybmFsU2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG1hbmFnZXIpOwotCSAgICBtYW5hZ2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsgIAotCi0JICAgIC8vIFdvcmthcm91bmQgYnVnIDIyNzY4NyBBbiBlZGl0IHBhcnQncyBmb2N1cyBzdGF0ZSBpcyBub3QgdXBkYXRlZCBwcm9wZXJseQotCSAgICAvLyBPbmNlIHRoaXMgaXMgYnVnIGlzIGZpeGVkLCB3ZSBjYW4gcmVtb3ZlIGN1c3RvbSBzZWxlY3Rpb24gbWFuYWdlcgotCSAgICBzZXRTZWxlY3Rpb25NYW5hZ2VyKG5ldyBDdXN0b21TZWxlY3Rpb25NYW5hZ2VyKCkpOwotCi0JICAgIHNldEtleUhhbmRsZXIobmV3IEJhc2VHcmFwaGljYWxWaWV3ZXJLZXlIYW5kbGVyKHRoaXMpKTsKLQkgIH0KLQkgIAotCSAgLy8gV29ya2Fyb3VuZCBidWcgMjI3Njg3IEFuIGVkaXQgcGFydCdzIGZvY3VzIHN0YXRlIGlzIG5vdCB1cGRhdGVkIHByb3Blcmx5Ci0JICAvLyBPbmNlIHRoaXMgaXMgYnVnIGlzIGZpeGVkLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2xhc3MKLQkgIHByaXZhdGUgY2xhc3MgQ3VzdG9tU2VsZWN0aW9uTWFuYWdlciBleHRlbmRzIFNlbGVjdGlvbk1hbmFnZXIKLQkgIHsKLQkgICAgcHVibGljIHZvaWQgYXBwZW5kU2VsZWN0aW9uKEVkaXRQYXJ0IGVkaXRwYXJ0KQotCSAgICB7Ci0JICAgICAgaWYgKGVkaXRwYXJ0ICE9IGdldEZvY3VzKCkpCi0JICAgICAgICBnZXRWaWV3ZXIoKS5zZXRGb2N1cyhlZGl0cGFydCk7Ci0JICAgICAgc3VwZXIuYXBwZW5kU2VsZWN0aW9uKGVkaXRwYXJ0KTsKLQkgICAgfQotCSAgfQotCSAgCi0JICAvLyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBzb21ldGhpbmcgY2hhbmdlcyBpbiB0aGUgc2VsZWN0aW9uIG1hbmFnZXIKLQkgIC8vIChlLmcuIGEgc2VsZWN0aW9uIG9jY3VyZWQgZnJvbSBhbm90aGVyIHZpZXcpCi0JICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkgIHsKLQkgICAgT2JqZWN0IHNlbGVjdGVkT2JqZWN0ID0gKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JICAgIGlmIChldmVudC5nZXRTb3VyY2UoKSAhPSBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyKQotCSAgICB7Ci0JICAgIAlFZGl0UGFydCBlZGl0UGFydCA9IGdldEVkaXRQYXJ0KGdldFJvb3RFZGl0UGFydCgpLCBzZWxlY3RlZE9iamVjdCk7Ci0JICAgIAlpZiAoZWRpdFBhcnQgIT0gbnVsbCkKLQkgICAgCXsKLQkgICAgCQlzZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdFBhcnQpKTsKLQkgICAgCX0gICAKLQkgICAgfQotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgRWRpdFBhcnQgZ2V0RWRpdFBhcnQoRWRpdFBhcnQgZWRpdFBhcnQsIE9iamVjdCBtb2RlbCkgIAotCSAgeyAgICAgICAgICAgICAgICAgICAgIAotCSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotCSAgICBpZiAoZWRpdFBhcnQuZ2V0TW9kZWwoKSA9PSBtb2RlbCkKLQkgICAgewotCSAgICAgIHJlc3VsdCA9IGVkaXRQYXJ0OyAgICAgIAotCSAgICB9ICAgICAgICAgICAgICAgICAgIAotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBlZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JICAgICAgewotCSAgICAgICAgcmVzdWx0ID0gZ2V0RWRpdFBhcnQoKEVkaXRQYXJ0KWkubmV4dCgpLCBtb2RlbCk7Ci0JICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGJyZWFrOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgICByZXR1cm4gcmVzdWx0OwotCSAgfQotCSAgCi0KLSAgICAgIC8qCi0JICAgKiBXZSBuZWVkIHRvIGNvbnZlcnQgZnJvbSBlZGl0IHBhcnQgc2VsZWN0aW9ucyB0byBtb2RlbCBvYmplY3Qgc2VsZWN0aW9ucwotCSAgICovCi0JICBjbGFzcyBBU0RTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uUHJvdmlkZXIsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKLQkgIHsKLQkgICAgcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotCi0JICAgIHB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCSAgICB7Ci0JICAgICAgbGlzdGVuZXJMaXN0LmFkZChsaXN0ZW5lcik7Ci0JICAgIH0KLQotCSAgICBwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikKLQkgICAgewotCSAgICAgIGxpc3RlbmVyTGlzdC5yZW1vdmUobGlzdGVuZXIpOwotCSAgICB9Ci0KLQkgICAgcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQkgICAgewotCSAgICAgIHJldHVybiBzZWxlY3Rpb247Ci0JICAgIH0KLQotCSAgICBwcm90ZWN0ZWQgdm9pZCBub3RpZnlMaXN0ZW5lcnMoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCSAgICB7Ci0JICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdGVuZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkgICAgICB7Ci0JICAgICAgICBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyID0gKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpIGkubmV4dCgpOwotCSAgICAgICAgbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7Ci0JICAgICAgfQotCSAgICB9Ci0KLQkgICAgcHVibGljIFN0cnVjdHVyZWRTZWxlY3Rpb24gY29udmVydFNlbGVjdGlvbkZyb21FZGl0UGFydFRvTW9kZWwoSVNlbGVjdGlvbiBlZGl0UGFydFNlbGVjdGlvbikKLQkgICAgewotCSAgICAgIExpc3Qgc2VsZWN0ZWRNb2RlbE9iamVjdExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgICAgaWYgKGVkaXRQYXJ0U2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JICAgICAgewotCSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZWRpdFBhcnRTZWxlY3Rpb24pLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkgICAgICAgIHsKLQkgICAgICAgICAgT2JqZWN0IG9iaiA9IGkubmV4dCgpOwotCSAgICAgICAgICBPYmplY3QgbW9kZWwgPSBudWxsOwotCSAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRWRpdFBhcnQpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBFZGl0UGFydCBlZGl0UGFydCA9IChFZGl0UGFydCkgb2JqOwotCSAgICAgICAgICAgIG1vZGVsID0gZWRpdFBhcnQuZ2V0TW9kZWwoKTsgICAgICAgICAgCi0JICAgICAgICAgIH0KLQkgICAgICAgICAgaWYgKG1vZGVsICE9IG51bGwpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBzZWxlY3RlZE1vZGVsT2JqZWN0TGlzdC5hZGQobW9kZWwpOwotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3RlZE1vZGVsT2JqZWN0TGlzdCk7Ci0JICAgIH0KLQotCSAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JICAgIHsKLQkgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQkgICAgfQotCi0JICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCSAgICB7Ci0JICAgICAgSVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBjb252ZXJ0U2VsZWN0aW9uRnJvbUVkaXRQYXJ0VG9Nb2RlbChldmVudC5nZXRTZWxlY3Rpb24oKSk7Ci0JICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247Ci0JICAgICAgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IG5ld0V2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBuZXdTZWxlY3Rpb24pOwotCSAgICAgIG5vdGlmeUxpc3RlbmVycyhuZXdFdmVudCk7Ci0JICAgIH0KLQkgIH0gCi19ICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZWZmMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi0vKioKLSAqIEEgY29sbGVjdGlvbiBvZiBjb2xvciBhbmQgZm9udCByZWxhdGVkIGNvbnN0YW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMgCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGlzSGlnaENvbnRyYXN0ID0gRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0SGlnaENvbnRyYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZ3JvdXBCb3JkZXJDb2xvciAgICAgICAgPSBuZXcgQ29sb3IobnVsbCwgMTE4LCAxMzQsIDE2NCk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZ3JvdXBIZWFkZXJDb2xvciAgICAgICAgPSBuZXcgQ29sb3IobnVsbCwgMjMyLCAyNDAsIDI0OCk7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciBlbGVtZW50Qm9yZGVyQ29sb3IgICAgICA9IG5ldyBDb2xvcihudWxsLCAxMjAsIDE1MiwgMTg0KTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciBlbGVtZW50QmFja2dyb3VuZENvbG9yICA9IG5ldyBDb2xvcihudWxsLCAyMzIsIDI0MCwgMjQ4KTsgIAotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGVsZW1lbnRMYWJlbENvbG9yICAgICAgID0gbmV3IENvbG9yKG51bGwsICA4MCwgMTAyLCAxNDQpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlYWRPbmx5Qm9yZGVyQ29sb3IgICAgID0gbmV3IENvbG9yKG51bGwsIDE2NCwgMTY0LCAxNjQpOyAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWQgICAgICAgICAgICAgICAgICAgICA9IG5ldyBDb2xvcihudWxsLCAyNTUsICAgMCwgICAwKTsgCi0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciB0YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyMjQsIDIzMywgMjQ2KTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciB0YWJsZU1lc3NhZ2VIZWFkaW5nQ29sb3IgPSBuZXcgQ29sb3IobnVsbCwgMjMwLCAyNDAsIDI0NSk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3Igbm9ybWFsVGFibGVDZWxsU2VsZWN0aW9uQ29sb3IgPSBuZXcgQ29sb3IobnVsbCwgMjM4LCAyMzIsIDE3MCk7IC8vbmV3IENvbG9yKG51bGwsIDI0MCwgMjMwLCAxNDApOyAvLzEsIDE1LCA0Mik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgdGFibGVDZWxsU2VsZWN0aW9uQ29sb3IgPSBpc0hpZ2hDb250cmFzdCA/IERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9USVRMRV9JTkFDVElWRV9CQUNLR1JPVU5EX0dSQURJRU5UKTogbm9ybWFsVGFibGVDZWxsU2VsZWN0aW9uQ29sb3I7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWFkT25seVRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yID0gbmV3IENvbG9yKG51bGwsIDIzOSwgMjQzLCAyNTUpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlYWRPbmx5TWVzc2FnZVJlZkhlYWRpbmdDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyNDUsIDI0NSwgMjQ1KTsKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgcmVhZE9ubHlCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvckNvbnN0YW50cy53aGl0ZTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWFkT25seUxhYmVsQ29sb3IgPSBDb2xvckNvbnN0YW50cy5ncmF5OwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGxhYmVsQ29sb3IgPSBDb2xvckNvbnN0YW50cy5ibGFjazsKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZGVmYXVsdEZvcmVncm91bmRDb2xvciA9IGlzSGlnaENvbnRyYXN0ID8gRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX1dJREdFVF9GT1JFR1JPVU5EKSA6IENvbG9yQ29uc3RhbnRzLmJsYWNrOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IgPSBpc0hpZ2hDb250cmFzdCA/IERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSURHRVRfQkFDS0dST1VORCkgOiBDb2xvckNvbnN0YW50cy53aGl0ZTsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIEZvbnQgIHNtYWxsQm9sZEZvbnQgICAgICAgICAgID0gbmV3IEZvbnQoRGlzcGxheS5nZXRDdXJyZW50KCksICJUYWhvbWEiLCA4LCBTV1QuQk9MRCk7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBGb250ICBtZWRpdW1Gb250ICAgICAgICAgICAgICA9IG5ldyBGb250KERpc3BsYXkuZ2V0Q3VycmVudCgpLCAiVGFob21hIiwgMTAsIFNXVC5OT05FKTsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgc3RhdGljIEZvbnQgIG1lZGl1bUJvbGRGb250ICAgICAgICAgID0gbmV3IEZvbnQoRGlzcGxheS5nZXRDdXJyZW50KCksICJUYWhvbWEiLCAxMCwgU1dULkJPTEQpOyAgLy8kTk9OLU5MUy0xJAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0tleWJvYXJkRHJhZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0tleWJvYXJkRHJhZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0YWRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9LZXlib2FyZERyYWdJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmRlc2lnbi5JS2V5Ym9hcmREcmFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmRlc2lnbi5lZGl0cG9saWNpZXMuS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeTsKLQotcHVibGljIGNsYXNzIEtleWJvYXJkRHJhZ0ltcGwgZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIGltcGxlbWVudHMgSUtleWJvYXJkRHJhZyB7Ci0KLQlwdWJsaWMgS2V5Ym9hcmREcmFnSW1wbCgpIHsKLQkJc3VwZXIobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHBlcmZvcm1LZXlib2FyZERyYWcoR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nRWxlbWVudCwgaW50IGRpcmVjdGlvbikgewotCi0JCUtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kgcG9saWN5ID0gKEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kpbW92aW5nRWxlbWVudC5nZXRFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZKTsKLQkJCi0JCUVkaXRQYXJ0IHJpZ2h0RWxlbWVudCA9IHBvbGljeS5nZXRSZWxhdGl2ZUVkaXRQYXJ0KG1vdmluZ0VsZW1lbnQsIGRpcmVjdGlvbik7Ci0JCXBvbGljeSA9IChLZXlCb2FyZEFjY2Vzc2liaWxpdHlFZGl0UG9saWN5KXJpZ2h0RWxlbWVudC5nZXRFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZKTsKLQkJRWRpdFBhcnQgbGVmdEVsZW1lbnQgPSAocG9saWN5ICE9IG51bGwpPyBwb2xpY3kuZ2V0UmVsYXRpdmVFZGl0UGFydChyaWdodEVsZW1lbnQsIGRpcmVjdGlvbik6IG51bGw7Ci0JCSAgCi0JCU9iamVjdCBsZWZ0U2liRWxlbWVudCA9IChsZWZ0RWxlbWVudCAhPSBudWxsKT8gbGVmdEVsZW1lbnQuZ2V0TW9kZWwoKSA6IG51bGw7Ci0JCU9iamVjdCByaWdodFNpYkVsZW1lbnQgPSAocmlnaHRFbGVtZW50ICE9IG51bGwpPyByaWdodEVsZW1lbnQuZ2V0TW9kZWwoKSA6IG51bGw7Ci0JCWlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEgpIHsKLQkJCWxlZnRTaWJFbGVtZW50ID0gcmlnaHRTaWJFbGVtZW50OwotCQkJcmlnaHRTaWJFbGVtZW50ID0gbGVmdFNpYkVsZW1lbnQ7Ci0JCX0gZWxzZSBpZiAoZGlyZWN0aW9uICE9IFBvc2l0aW9uQ29uc3RhbnRzLk5PUlRIKSByZXR1cm47Ci0JCQotCQlPYmplY3Qgc291cmNlID0gbW92aW5nRWxlbWVudC5nZXRNb2RlbCgpOwotCi0JCWlmIChzb3VyY2UgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotICAJCQkKLQkJCWlmKCEobGVmdFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkpIGxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLQkJCWlmKCEocmlnaHRTaWJFbGVtZW50IGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpKSByaWdodFNpYkVsZW1lbnQgPSBudWxsOwotCQkJCi0JCQlPYmplY3QgbWVzc2FnZVJlZk93bmVyID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgc291cmNlKS5nZXRPd25lck9wZXJhdGlvbigpOwotICAJCQlpZiAobWVzc2FnZVJlZk93bmVyIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbGVmdFNpYkVsZW1lbnQ7Ci0gIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgcmlnaHRTaWJFbGVtZW50OwotICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nU2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSBzb3VyY2U7Ci0gIAkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElPcGVyYXRpb24pIG1lc3NhZ2VSZWZPd25lcikuZ2V0UmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLSAgCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotICAJCQkJcGVyZm9ybVNlbGVjdGlvbihzb3VyY2UpOwotICAJCQl9Ci0gIAkJfQotICAJCWVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLSAgCQkJCi0gIAkJCWlmKCEobGVmdFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSkgbGVmdFNpYkVsZW1lbnQgPSBudWxsOwotCQkJaWYoIShyaWdodFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSkgcmlnaHRTaWJFbGVtZW50ID0gbnVsbDsKLQkJCQotICAJCQlPYmplY3QgcGFyYW1Pd25lciA9ICgoSVBhcmFtZXRlcikgc291cmNlKS5nZXRPd25lcigpOwotICAJCQlpZiAocGFyYW1Pd25lciBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0gIAkJCQlJUGFyYW1ldGVyIGxlZnRTaWIgPSAoSVBhcmFtZXRlcikgbGVmdFNpYkVsZW1lbnQ7Ci0gIAkJCQlJUGFyYW1ldGVyIHJpZ2h0U2liID0gKElQYXJhbWV0ZXIpIHJpZ2h0U2liRWxlbWVudDsKLSAgCQkJCUlQYXJhbWV0ZXIgbW92aW5nU2liID0gKElQYXJhbWV0ZXIpIHNvdXJjZTsKLSAgCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIHBhcmFtT3duZXIpLmdldFJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLSAgCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotICAJCQkJcGVyZm9ybVNlbGVjdGlvbihzb3VyY2UpOwotICAJCQl9Ci0gIAkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2Nvbm5lY3Rpb25zL0NlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YzljMjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5BYnN0cmFjdENvbm5lY3Rpb25BbmNob3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci0KLXB1YmxpYyBjbGFzcyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IgZXh0ZW5kcyBBYnN0cmFjdENvbm5lY3Rpb25BbmNob3IKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9QID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQk9UVE9NID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVGVCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJJR0hUID0gMzsKLSAgCi0gIC8vIFRoZXNlIHR3byBhcmUgY3VzdG9tIGZvciByZWN0YW5nbGVzIHdpdGggaGVhZGVyIGJsb2NrcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIRUFERVJfTEVGVCA9IDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhFQURFUl9SSUdIVCA9IDU7Ci0KLSAgcHJpdmF0ZSBpbnQgbG9jYXRpb247Ci0gIHByaXZhdGUgaW50IGluc2V0OwotICBwcml2YXRlIGludCBvZmZzZXQgPSAwOwotICAKLSAgcHVibGljIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcihJRmlndXJlIG93bmVyLCBpbnQgbG9jYXRpb24sIGludCBpbnNldCkgewotICAgIHN1cGVyKG93bmVyKTsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgdGhpcy5pbnNldCA9IGluc2V0OwotICB9Ci0gIAotICBwdWJsaWMgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKElGaWd1cmUgb3duZXIsIGludCBsb2NhdGlvbiwgaW50IGluc2V0LCBpbnQgb2Zmc2V0KSB7Ci0gICAgdGhpcyhvd25lciwgbG9jYXRpb24sIGluc2V0KTsKLSAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldExvY2F0aW9uKFBvaW50IHJlZmVyZW5jZSkgewotICAgIFJlY3RhbmdsZSByID0gZ2V0T3duZXIoKS5nZXRCb3VuZHMoKTsKLSAgICBpbnQgeCwgeTsKLSAgICBzd2l0Y2ggKGxvY2F0aW9uKSB7Ci0gICAgICBjYXNlIFRPUDoKLSAgICAgICAgeCA9IHIucmlnaHQoKSAtIHIud2lkdGggLyAyICsgb2Zmc2V0OwotICAgICAgICB5ID0gci55ICsgaW5zZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBCT1RUT006Ci0gICAgICAgIHggPSByLnJpZ2h0KCkgLSByLndpZHRoIC8gMiArIG9mZnNldDsKLSAgICAgICAgeSA9IHIuYm90dG9tKCkgLSBpbnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIExFRlQ6Ci0gICAgICAgIHggPSByLnggKyBpbnNldDsKLSAgICAgICAgeSA9IHIuYm90dG9tKCkgLSByLmhlaWdodCAvIDIgKyBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBSSUdIVDoKLSAgICAgICAgeCA9IHIucmlnaHQoKSAtIGluc2V0OwotICAgICAgICB5ID0gci5ib3R0b20oKSAtIHIuaGVpZ2h0IC8gMiArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEhFQURFUl9MRUZUOgotICAgICAgICB4ID0gci54ICsgaW5zZXQ7Ci0gICAgICAgIHkgPSByLnkgKyBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBIRUFERVJfUklHSFQ6Ci0gICAgICAgIHggPSByLnJpZ2h0KCkgLSBpbnNldDsKLSAgICAgICAgeSA9IHIueSArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAKLSAgICAgICAgCi0gICAgICBkZWZhdWx0OgotICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZy4gQXR0YWNoIHRoZSBhbmNob3IgdG8gdGhlIG1pZGRsZQotICAgICAgICB4ID0gci5yaWdodCgpIC0gci53aWR0aCAvIDI7Ci0gICAgICAgIHkgPSByLmJvdHRvbSgpIC0gci5oZWlnaHQgLyAyOwotICAgIH0KLSAgICBQb2ludCBwID0gbmV3IFBvaW50KHgseSk7Ci0KLSAgICBnZXRPd25lcigpLnRyYW5zbGF0ZVRvQWJzb2x1dGUocCk7Ci0gICAgcmV0dXJuIHA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQb2ludCBnZXRSZWZlcmVuY2VQb2ludCgpIHsKLSAgICByZXR1cm4gZ2V0TG9jYXRpb24obnVsbCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvVG9wTGVmdENvbm5lY3Rpb25BbmNob3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2Nvbm5lY3Rpb25zL1RvcExlZnRDb25uZWN0aW9uQW5jaG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MGJkYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvVG9wTGVmdENvbm5lY3Rpb25BbmNob3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmNvbm5lY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkFic3RyYWN0Q29ubmVjdGlvbkFuY2hvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUb3BMZWZ0Q29ubmVjdGlvbkFuY2hvciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdGlvbkFuY2hvcgoteyAKLSAgSUZpZ3VyZSBsYWJlbDsKLSAgcHVibGljIFRvcExlZnRDb25uZWN0aW9uQW5jaG9yKElGaWd1cmUgb3duZXIsIElGaWd1cmUgbGFiZWwpIHsKLSAgICBzdXBlcihvd25lcik7Ci0gICAgdGhpcy5sYWJlbCA9IGxhYmVsOwotICB9Ci0gIHB1YmxpYyBQb2ludCBnZXRMb2NhdGlvbihQb2ludCByZWZlcmVuY2UpIHsKLSAgICBpbnQgeCA9IGdldE93bmVyKCkuZ2V0Qm91bmRzKCkueDsKLSAgICBpbnQgeSA9IGxhYmVsLmdldEJvdW5kcygpLnkgKyBsYWJlbC5nZXRCb3VuZHMoKS5oZWlnaHQgLyAyOwotICAgIFBvaW50IHAgPSBuZXcgUG9pbnQoeCx5KTsKLSAgICBnZXRPd25lcigpLnRyYW5zbGF0ZVRvQWJzb2x1dGUocCk7Ci0gICAgcmV0dXJuIHA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQb2ludCBnZXRSZWZlcmVuY2VQb2ludCgpIHsKLSAgICByZXR1cm4gZ2V0TG9jYXRpb24obnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ0NvbWJvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0FTRENDb21iby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzliMzU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ0NvbWJvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFDQzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUNvbnRyb2xFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZVRleHRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVUZXh0RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXI7Ci0KLS8qCi0gKiBybWFoOgotICogVGhpcyBjbGFzcyBpcyBhIGNvcHkgb2YgQ0NvbWJvLiAgV2UgY29weSBpdCBiZWNhdXNlIHdlIHdpc2ggdG8gYWxpZ24KLSAqIHRoZSBUZXh0IG9mIHRoZSBDb21ibyBpbiBvdXIgb3duIHNwZWNpYWwgd2F5LiAgSG93ZXZlciB0aGVyZSBpcyBubwotICogd2F5IHRvIGFjY2VzcyB0aGUgVGV4dCBvYmplY3Qgd2l0aGluIENDb21iby4uLi4uCi0gKiBCdWcgZm9yIHRoaXMgaXNzdWUgdG8gYmUgb3BlbmVkCi0gKi8KLQotLyoqCi0gKiBUaGUgQ0NvbWJvIGNsYXNzIHJlcHJlc2VudHMgYSBzZWxlY3RhYmxlIHVzZXIgaW50ZXJmYWNlIG9iamVjdAotICogdGhhdCBjb21iaW5lcyBhIHRleHQgZmllbGQgYW5kIGEgbGlzdCBhbmQgaXNzdWVzIG5vdGlmaWNhdGlvbgotICogd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGZyb20gdGhlIGxpc3QuCi0gKiA8cD4KLSAqIE5vdGUgdGhhdCBhbHRob3VnaCB0aGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgPGNvZGU+Q29tcG9zaXRlPC9jb2RlPiwKLSAqIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gYWRkIGNoaWxkcmVuIHRvIGl0LCBvciBzZXQgYSBsYXlvdXQgb24gaXQuCi0gKiA8L3A+Ci0gKiA8ZGw+Ci0gKiA8ZHQ+PGI+U3R5bGVzOjwvYj4KLSAqIDxkZD5CT1JERVIsIFJFQURfT05MWSwgRkxBVDwvZGQ+Ci0gKiA8ZHQ+PGI+RXZlbnRzOjwvYj4KLSAqIDxkZD5TZWxlY3Rpb248L2RkPgotICogPC9kbD4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEFTRENDb21ibyBleHRlbmRzIENvbXBvc2l0ZSB7Ci0KLQlUZXh0IHRleHQ7Ci0JTGlzdCBsaXN0OwotCWludCB2aXNpYmxlSXRlbUNvdW50ID0gNTsKLQlTaGVsbCBwb3B1cDsKLQlCdXR0b24gYXJyb3c7Ci0JYm9vbGVhbiBoYXNGb2N1czsKLQlMaXN0ZW5lciBsaXN0ZW5lciwgZmlsdGVyOwotCUNvbG9yIGZvcmVncm91bmQsIGJhY2tncm91bmQ7Ci0JRm9udCBmb250OwotCXByaXZhdGUgaW50IHRleHRJbmRlbnQgPSA1OwotCQotLyoqCi0gKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZ2l2ZW4gaXRzIHBhcmVudAotICogYW5kIGEgc3R5bGUgdmFsdWUgZGVzY3JpYmluZyBpdHMgYmVoYXZpb3IgYW5kIGFwcGVhcmFuY2UuCi0gKiA8cD4KLSAqIFRoZSBzdHlsZSB2YWx1ZSBpcyBlaXRoZXIgb25lIG9mIHRoZSBzdHlsZSBjb25zdGFudHMgZGVmaW5lZCBpbgotICogY2xhc3MgPGNvZGU+U1dUPC9jb2RlPiB3aGljaCBpcyBhcHBsaWNhYmxlIHRvIGluc3RhbmNlcyBvZiB0aGlzCi0gKiBjbGFzcywgb3IgbXVzdCBiZSBidWlsdCBieSA8ZW0+Yml0d2lzZSBPUjwvZW0+J2luZyB0b2dldGhlciAKLSAqICh0aGF0IGlzLCB1c2luZyB0aGUgPGNvZGU+aW50PC9jb2RlPiAifCIgb3BlcmF0b3IpIHR3byBvciBtb3JlCi0gKiBvZiB0aG9zZSA8Y29kZT5TV1Q8L2NvZGU+IHN0eWxlIGNvbnN0YW50cy4gVGhlIGNsYXNzIGRlc2NyaXB0aW9uCi0gKiBsaXN0cyB0aGUgc3R5bGUgY29uc3RhbnRzIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGNsYXNzLgotICogU3R5bGUgYml0cyBhcmUgYWxzbyBpbmhlcml0ZWQgZnJvbSBzdXBlcmNsYXNzZXMuCi0gKiA8L3A+Ci0gKgotICogQHBhcmFtIHBhcmVudCBhIHdpZGdldCB3aGljaCB3aWxsIGJlIHRoZSBwYXJlbnQgb2YgdGhlIG5ldyBpbnN0YW5jZSAoY2Fubm90IGJlIG51bGwpCi0gKiBAcGFyYW0gc3R5bGUgdGhlIHN0eWxlIG9mIHdpZGdldCB0byBjb25zdHJ1Y3QKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBwYXJlbnQgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHBhcmVudDwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgU1dUI0JPUkRFUgotICogQHNlZSBTV1QjUkVBRF9PTkxZCi0gKiBAc2VlIFNXVCNGTEFUCi0gKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNnZXRTdHlsZSgpCi0gKi8KLXB1YmxpYyBBU0RDQ29tYm8gKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSkgewotCXN1cGVyIChwYXJlbnQsIHN0eWxlID0gY2hlY2tTdHlsZSAoc3R5bGUpKTsKLQkKLQlpbnQgdGV4dFN0eWxlID0gU1dULlNJTkdMRTsKLQlpZiAoKHN0eWxlICYgU1dULlJFQURfT05MWSkgIT0gMCkgdGV4dFN0eWxlIHw9IFNXVC5SRUFEX09OTFk7Ci0JaWYgKChzdHlsZSAmIFNXVC5GTEFUKSAhPSAwKSB0ZXh0U3R5bGUgfD0gU1dULkZMQVQ7Ci0JdGV4dCA9IG5ldyBUZXh0ICh0aGlzLCB0ZXh0U3R5bGUpOwotCWludCBhcnJvd1N0eWxlID0gU1dULkFSUk9XIHwgU1dULkRPV047Ci0JaWYgKChzdHlsZSAmIFNXVC5GTEFUKSAhPSAwKSBhcnJvd1N0eWxlIHw9IFNXVC5GTEFUOwotCWFycm93ID0gbmV3IEJ1dHRvbiAodGhpcywgYXJyb3dTdHlsZSk7Ci0KLQlsaXN0ZW5lciA9IG5ldyBMaXN0ZW5lciAoKSB7Ci0JCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50IChFdmVudCBldmVudCkgewotCQkJaWYgKHBvcHVwID09IGV2ZW50LndpZGdldCkgewotCQkJCXBvcHVwRXZlbnQgKGV2ZW50KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAodGV4dCA9PSBldmVudC53aWRnZXQpIHsKLQkJCQl0ZXh0RXZlbnQgKGV2ZW50KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAobGlzdCA9PSBldmVudC53aWRnZXQpIHsKLQkJCQlsaXN0RXZlbnQgKGV2ZW50KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAoYXJyb3cgPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCQkJYXJyb3dFdmVudCAoZXZlbnQpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmIChBU0RDQ29tYm8udGhpcyA9PSBldmVudC53aWRnZXQpIHsKLQkJCQljb21ib0V2ZW50IChldmVudCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYgKGdldFNoZWxsICgpID09IGV2ZW50LndpZGdldCkgewotCQkJCWhhbmRsZUZvY3VzIChTV1QuRm9jdXNPdXQpOwotCQkJfQotCQl9Ci0JfTsKLQlmaWx0ZXIgPSBuZXcgTGlzdGVuZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KSB7Ci0JCQlTaGVsbCBzaGVsbCA9ICgoQ29udHJvbClldmVudC53aWRnZXQpLmdldFNoZWxsICgpOwotCQkJaWYgKHNoZWxsID09IEFTRENDb21iby50aGlzLmdldFNoZWxsICgpKSB7Ci0JCQkJaGFuZGxlRm9jdXMgKFNXVC5Gb2N1c091dCk7Ci0JCQl9Ci0JCX0KLQl9OwotCQotCWludCBbXSBjb21ib0V2ZW50cyA9IHtTV1QuRGlzcG9zZSwgU1dULk1vdmUsIFNXVC5SZXNpemV9OwotCWZvciAoaW50IGk9MDsgaTxjb21ib0V2ZW50cy5sZW5ndGg7IGkrKykgdGhpcy5hZGRMaXN0ZW5lciAoY29tYm9FdmVudHMgW2ldLCBsaXN0ZW5lcik7Ci0JCi0JaW50IFtdIHRleHRFdmVudHMgPSB7U1dULktleURvd24sIFNXVC5LZXlVcCwgU1dULk1lbnVEZXRlY3QsIFNXVC5Nb2RpZnksIFNXVC5Nb3VzZURvd24sIFNXVC5Nb3VzZVVwLCBTV1QuVHJhdmVyc2UsIFNXVC5Gb2N1c0lufTsKLQlmb3IgKGludCBpPTA7IGk8dGV4dEV2ZW50cy5sZW5ndGg7IGkrKykgdGV4dC5hZGRMaXN0ZW5lciAodGV4dEV2ZW50cyBbaV0sIGxpc3RlbmVyKTsKLQkKLQlpbnQgW10gYXJyb3dFdmVudHMgPSB7U1dULlNlbGVjdGlvbiwgU1dULkZvY3VzSW59OwotCWZvciAoaW50IGk9MDsgaTxhcnJvd0V2ZW50cy5sZW5ndGg7IGkrKykgYXJyb3cuYWRkTGlzdGVuZXIgKGFycm93RXZlbnRzIFtpXSwgbGlzdGVuZXIpOwotCQotCWNyZWF0ZVBvcHVwKG51bGwsIC0xKTsKLQlpbml0QWNjZXNzaWJsZSgpOwotfQotc3RhdGljIGludCBjaGVja1N0eWxlIChpbnQgc3R5bGUpIHsKLQlpbnQgbWFzayA9IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZIHwgU1dULkZMQVQgfCBTV1QuTEVGVF9UT19SSUdIVCB8IFNXVC5SSUdIVF9UT19MRUZUOwotCXJldHVybiBzdHlsZSAmIG1hc2s7Ci19Ci0vKioKLSAqIEFkZHMgdGhlIGFyZ3VtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHJlY2VpdmVyJ3MgbGlzdC4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBuZXcgaXRlbQotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgI2FkZChTdHJpbmcsaW50KQotICovCi1wdWJsaWMgdm9pZCBhZGQgKFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzdHJpbmcgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JbGlzdC5hZGQgKHN0cmluZyk7Ci19Ci0vKioKLSAqIEFkZHMgdGhlIGFyZ3VtZW50IHRvIHRoZSByZWNlaXZlcidzIGxpc3QgYXQgdGhlIGdpdmVuCi0gKiB6ZXJvLXJlbGF0aXZlIGluZGV4LgotICogPHA+Ci0gKiBOb3RlOiBUbyBhZGQgYW4gaXRlbSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCB1c2UgdGhlCi0gKiByZXN1bHQgb2YgY2FsbGluZyA8Y29kZT5nZXRJdGVtQ291bnQoKTwvY29kZT4gYXMgdGhlCi0gKiBpbmRleCBvciB1c2UgPGNvZGU+YWRkKFN0cmluZyk8L2NvZGU+LgotICogPC9wPgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIG5ldyBpdGVtCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IGZvciB0aGUgaXRlbQotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqICAgIDxsaT5FUlJPUl9JTlZBTElEX1JBTkdFIC0gaWYgdGhlIGluZGV4IGlzIG5vdCBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QgKGluY2x1c2l2ZSk8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSAjYWRkKFN0cmluZykKLSAqLwotcHVibGljIHZvaWQgYWRkIChTdHJpbmcgc3RyaW5nLCBpbnQgaW5kZXgpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzdHJpbmcgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JbGlzdC5hZGQgKHN0cmluZywgaW5kZXgpOwotfQotLyoqCi0gKiBBZGRzIHRoZSBsaXN0ZW5lciB0byB0aGUgY29sbGVjdGlvbiBvZiBsaXN0ZW5lcnMgd2hvIHdpbGwKLSAqIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHJlY2VpdmVyJ3MgdGV4dCBpcyBtb2RpZmllZCwgYnkgc2VuZGluZwotICogaXQgb25lIG9mIHRoZSBtZXNzYWdlcyBkZWZpbmVkIGluIHRoZSA8Y29kZT5Nb2RpZnlMaXN0ZW5lcjwvY29kZT4KLSAqIGludGVyZmFjZS4KLSAqCi0gKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoaWNoIHNob3VsZCBiZSBub3RpZmllZAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIGxpc3RlbmVyIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSBNb2RpZnlMaXN0ZW5lcgotICogQHNlZSAjcmVtb3ZlTW9kaWZ5TGlzdGVuZXIKLSAqLwotcHVibGljIHZvaWQgYWRkTW9kaWZ5TGlzdGVuZXIgKE1vZGlmeUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAobGlzdGVuZXIgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JVHlwZWRMaXN0ZW5lciB0eXBlZExpc3RlbmVyID0gbmV3IFR5cGVkTGlzdGVuZXIgKGxpc3RlbmVyKTsKLQlhZGRMaXN0ZW5lciAoU1dULk1vZGlmeSwgdHlwZWRMaXN0ZW5lcik7Ci19Ci0vKioKLSAqIEFkZHMgdGhlIGxpc3RlbmVyIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGxpc3RlbmVycyB3aG8gd2lsbAotICogYmUgbm90aWZpZWQgd2hlbiB0aGUgcmVjZWl2ZXIncyBzZWxlY3Rpb24gY2hhbmdlcywgYnkgc2VuZGluZwotICogaXQgb25lIG9mIHRoZSBtZXNzYWdlcyBkZWZpbmVkIGluIHRoZSA8Y29kZT5TZWxlY3Rpb25MaXN0ZW5lcjwvY29kZT4KLSAqIGludGVyZmFjZS4KLSAqIDxwPgotICogPGNvZGU+d2lkZ2V0U2VsZWN0ZWQ8L2NvZGU+IGlzIGNhbGxlZCB3aGVuIHRoZSBjb21ibydzIGxpc3Qgc2VsZWN0aW9uIGNoYW5nZXMuCi0gKiA8Y29kZT53aWRnZXREZWZhdWx0U2VsZWN0ZWQ8L2NvZGU+IGlzIHR5cGljYWxseSBjYWxsZWQgd2hlbiBFTlRFUiBpcyBwcmVzc2VkIHRoZSBjb21ibydzIHRleHQgYXJlYS4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoaWNoIHNob3VsZCBiZSBub3RpZmllZAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIGxpc3RlbmVyIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSBTZWxlY3Rpb25MaXN0ZW5lcgotICogQHNlZSAjcmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIKLSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudAotICovCi1wdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25MaXN0ZW5lcihTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKGxpc3RlbmVyID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCVR5cGVkTGlzdGVuZXIgdHlwZWRMaXN0ZW5lciA9IG5ldyBUeXBlZExpc3RlbmVyIChsaXN0ZW5lcik7Ci0JYWRkTGlzdGVuZXIgKFNXVC5TZWxlY3Rpb24sdHlwZWRMaXN0ZW5lcik7Ci0JYWRkTGlzdGVuZXIgKFNXVC5EZWZhdWx0U2VsZWN0aW9uLHR5cGVkTGlzdGVuZXIpOwotfQotdm9pZCBhcnJvd0V2ZW50IChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5Gb2N1c0luOiB7Ci0JCQloYW5kbGVGb2N1cyAoU1dULkZvY3VzSW4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuU2VsZWN0aW9uOiB7Ci0JCQlkcm9wRG93biAoIWlzRHJvcHBlZCAoKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLS8qKgotICogU2V0cyB0aGUgc2VsZWN0aW9uIGluIHRoZSByZWNlaXZlcidzIHRleHQgZmllbGQgdG8gYW4gZW1wdHkKLSAqIHNlbGVjdGlvbiBzdGFydGluZyBqdXN0IGJlZm9yZSB0aGUgZmlyc3QgY2hhcmFjdGVyLiBJZiB0aGUKLSAqIHRleHQgZmllbGQgaXMgZWRpdGFibGUsIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgcGxhY2luZyB0aGUKLSAqIGktYmVhbSBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQuCi0gKiA8cD4KLSAqIE5vdGU6IFRvIGNsZWFyIHRoZSBzZWxlY3RlZCBpdGVtcyBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0LCAKLSAqIHVzZSA8Y29kZT5kZXNlbGVjdEFsbCgpPC9jb2RlPi4KLSAqIDwvcD4KLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgI2Rlc2VsZWN0QWxsCi0gKi8KLXB1YmxpYyB2b2lkIGNsZWFyU2VsZWN0aW9uICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQl0ZXh0LmNsZWFyU2VsZWN0aW9uICgpOwotCWxpc3QuZGVzZWxlY3RBbGwgKCk7Ci19Ci12b2lkIGNvbWJvRXZlbnQgKEV2ZW50IGV2ZW50KSB7Ci0Jc3dpdGNoIChldmVudC50eXBlKSB7Ci0JCWNhc2UgU1dULkRpc3Bvc2U6Ci0JCQlpZiAocG9wdXAgIT0gbnVsbCAmJiAhcG9wdXAuaXNEaXNwb3NlZCAoKSkgewotCQkJCWxpc3QucmVtb3ZlTGlzdGVuZXIgKFNXVC5EaXNwb3NlLCBsaXN0ZW5lcik7Ci0JCQkJcG9wdXAuZGlzcG9zZSAoKTsKLQkJCX0KLQkJCVNoZWxsIHNoZWxsID0gZ2V0U2hlbGwgKCk7Ci0JCQlzaGVsbC5yZW1vdmVMaXN0ZW5lciAoU1dULkRlYWN0aXZhdGUsIGxpc3RlbmVyKTsKLQkJCURpc3BsYXkgZGlzcGxheSA9IGdldERpc3BsYXkgKCk7Ci0JCQlkaXNwbGF5LnJlbW92ZUZpbHRlciAoU1dULkZvY3VzSW4sIGZpbHRlcik7Ci0JCQlwb3B1cCA9IG51bGw7ICAKLQkJCXRleHQgPSBudWxsOyAgCi0JCQlsaXN0ID0gbnVsbDsgIAotCQkJYXJyb3cgPSBudWxsOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULk1vdmU6Ci0JCQlkcm9wRG93biAoZmFsc2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULlJlc2l6ZToKLQkJCWludGVybmFsTGF5b3V0IChmYWxzZSk7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLXB1YmxpYyBQb2ludCBjb21wdXRlU2l6ZSAoaW50IHdIaW50LCBpbnQgaEhpbnQsIGJvb2xlYW4gY2hhbmdlZCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0JU3RyaW5nW10gaXRlbXMgPSBsaXN0LmdldEl0ZW1zICgpOwotCWludCB0ZXh0V2lkdGggPSAwOwotCUdDIGdjID0gbmV3IEdDICh0ZXh0KTsKLQlpbnQgc3BhY2VyID0gZ2Muc3RyaW5nRXh0ZW50ICgiICIpLng7IC8vJE5PTi1OTFMtMSQKLQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCXRleHRXaWR0aCA9IE1hdGgubWF4IChnYy5zdHJpbmdFeHRlbnQgKGl0ZW1zW2ldKS54LCB0ZXh0V2lkdGgpOwotCX0KLQlnYy5kaXNwb3NlKCk7Ci0JUG9pbnQgdGV4dFNpemUgPSB0ZXh0LmNvbXB1dGVTaXplIChTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQsIGNoYW5nZWQpOwotCVBvaW50IGFycm93U2l6ZSA9IGFycm93LmNvbXB1dGVTaXplIChTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQsIGNoYW5nZWQpOwotCVBvaW50IGxpc3RTaXplID0gbGlzdC5jb21wdXRlU2l6ZSAoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxULCBjaGFuZ2VkKTsKLQlpbnQgYm9yZGVyV2lkdGggPSBnZXRCb3JkZXJXaWR0aCAoKTsKLQkKLQloZWlnaHQgPSBNYXRoLm1heCAodGV4dFNpemUueSwgYXJyb3dTaXplLnkpOwotCXdpZHRoID0gTWF0aC5tYXggKHRleHRXaWR0aCArIDIqc3BhY2VyICsgYXJyb3dTaXplLnggKyAyKmJvcmRlcldpZHRoLCBsaXN0U2l6ZS54KTsKLQlpZiAod0hpbnQgIT0gU1dULkRFRkFVTFQpIHdpZHRoID0gd0hpbnQ7Ci0JaWYgKGhIaW50ICE9IFNXVC5ERUZBVUxUKSBoZWlnaHQgPSBoSGludDsKLQlyZXR1cm4gbmV3IFBvaW50ICh3aWR0aCArIDIqYm9yZGVyV2lkdGgsIGhlaWdodCArIDIqYm9yZGVyV2lkdGgpOwotfQotdm9pZCBjcmVhdGVQb3B1cChTdHJpbmdbXSBpdGVtcywgaW50IHNlbGVjdGlvbkluZGV4KSB7CQkKLQkJLy8gY3JlYXRlIHNoZWxsIGFuZCBsaXN0Ci0JCXBvcHVwID0gbmV3IFNoZWxsIChnZXRTaGVsbCAoKSwgU1dULk5PX1RSSU0gfCBTV1QuT05fVE9QKTsKLQkJaW50IHN0eWxlID0gZ2V0U3R5bGUgKCk7Ci0JCWludCBsaXN0U3R5bGUgPSBTV1QuU0lOR0xFIHwgU1dULlZfU0NST0xMOwotCQlpZiAoKHN0eWxlICYgU1dULkZMQVQpICE9IDApIGxpc3RTdHlsZSB8PSBTV1QuRkxBVDsKLQkJaWYgKChzdHlsZSAmIFNXVC5SSUdIVF9UT19MRUZUKSAhPSAwKSBsaXN0U3R5bGUgfD0gU1dULlJJR0hUX1RPX0xFRlQ7Ci0JCWlmICgoc3R5bGUgJiBTV1QuTEVGVF9UT19SSUdIVCkgIT0gMCkgbGlzdFN0eWxlIHw9IFNXVC5MRUZUX1RPX1JJR0hUOwotCQlsaXN0ID0gbmV3IExpc3QgKHBvcHVwLCBsaXN0U3R5bGUpOwotCQlpZiAoZm9udCAhPSBudWxsKSBsaXN0LnNldEZvbnQgKGZvbnQpOwotCQlpZiAoZm9yZWdyb3VuZCAhPSBudWxsKSBsaXN0LnNldEZvcmVncm91bmQgKGZvcmVncm91bmQpOwotCQlpZiAoYmFja2dyb3VuZCAhPSBudWxsKSBsaXN0LnNldEJhY2tncm91bmQgKGJhY2tncm91bmQpOwotCQkKLQkJaW50IFtdIHBvcHVwRXZlbnRzID0ge1NXVC5DbG9zZSwgU1dULlBhaW50LCBTV1QuRGVhY3RpdmF0ZX07Ci0JCWZvciAoaW50IGk9MDsgaTxwb3B1cEV2ZW50cy5sZW5ndGg7IGkrKykgcG9wdXAuYWRkTGlzdGVuZXIgKHBvcHVwRXZlbnRzIFtpXSwgbGlzdGVuZXIpOwotCQlpbnQgW10gbGlzdEV2ZW50cyA9IHtTV1QuTW91c2VVcCwgU1dULlNlbGVjdGlvbiwgU1dULlRyYXZlcnNlLCBTV1QuS2V5RG93biwgU1dULktleVVwLCBTV1QuRm9jdXNJbiwgU1dULkRpc3Bvc2V9OwotCQlmb3IgKGludCBpPTA7IGk8bGlzdEV2ZW50cy5sZW5ndGg7IGkrKykgbGlzdC5hZGRMaXN0ZW5lciAobGlzdEV2ZW50cyBbaV0sIGxpc3RlbmVyKTsKLQkJCi0JCWlmIChpdGVtcyAhPSBudWxsKSBsaXN0LnNldEl0ZW1zIChpdGVtcyk7Ci0JCWlmIChzZWxlY3Rpb25JbmRleCAhPSAtMSkgbGlzdC5zZXRTZWxlY3Rpb24gKHNlbGVjdGlvbkluZGV4KTsKLX0KLS8qKgotICogRGVzZWxlY3RzIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiB6ZXJvLXJlbGF0aXZlIGluZGV4IGluIHRoZSByZWNlaXZlcidzIAotICogbGlzdC4gIElmIHRoZSBpdGVtIGF0IHRoZSBpbmRleCB3YXMgYWxyZWFkeSBkZXNlbGVjdGVkLCBpdCByZW1haW5zCi0gKiBkZXNlbGVjdGVkLiBJbmRpY2VzIHRoYXQgYXJlIG91dCBvZiByYW5nZSBhcmUgaWdub3JlZC4KLSAqCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGRlc2VsZWN0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgZGVzZWxlY3QgKGludCBpbmRleCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWxpc3QuZGVzZWxlY3QgKGluZGV4KTsKLX0KLS8qKgotICogRGVzZWxlY3RzIGFsbCBzZWxlY3RlZCBpdGVtcyBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0LgotICogPHA+Ci0gKiBOb3RlOiBUbyBjbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSByZWNlaXZlcidzIHRleHQgZmllbGQsCi0gKiB1c2UgPGNvZGU+Y2xlYXJTZWxlY3Rpb24oKTwvY29kZT4uCi0gKiA8L3A+Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlICNjbGVhclNlbGVjdGlvbgotICovCi1wdWJsaWMgdm9pZCBkZXNlbGVjdEFsbCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JbGlzdC5kZXNlbGVjdEFsbCAoKTsKLX0KLXZvaWQgZHJvcERvd24gKGJvb2xlYW4gZHJvcCkgewotCWlmIChkcm9wID09IGlzRHJvcHBlZCAoKSkgcmV0dXJuOwotCWlmICghZHJvcCkgewotCQlwb3B1cC5zZXRWaXNpYmxlIChmYWxzZSk7Ci0JCXRleHQuc2VsZWN0QWxsKCk7Ci0JCWlmICghaXNEaXNwb3NlZCAoKSYmIGFycm93LmlzRm9jdXNDb250cm9sKCkpIHsKLQkJCXRleHQuc2V0Rm9jdXMoKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGdldFNoZWxsKCkgIT0gcG9wdXAuZ2V0UGFyZW50ICgpKSB7Ci0JCVN0cmluZ1tdIGl0ZW1zID0gbGlzdC5nZXRJdGVtcyAoKTsKLQkJaW50IHNlbGVjdGlvbkluZGV4ID0gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJbGlzdC5yZW1vdmVMaXN0ZW5lciAoU1dULkRpc3Bvc2UsIGxpc3RlbmVyKTsKLQkJcG9wdXAuZGlzcG9zZSgpOwotCQlwb3B1cCA9IG51bGw7Ci0JCWxpc3QgPSBudWxsOwotCQljcmVhdGVQb3B1cCAoaXRlbXMsIHNlbGVjdGlvbkluZGV4KTsKLQl9Ci0JCi0JUG9pbnQgc2l6ZSA9IGdldFNpemUgKCk7Ci0JaW50IGl0ZW1Db3VudCA9IGxpc3QuZ2V0SXRlbUNvdW50ICgpOwotCWl0ZW1Db3VudCA9IChpdGVtQ291bnQgPT0gMCkgPyB2aXNpYmxlSXRlbUNvdW50IDogTWF0aC5taW4odmlzaWJsZUl0ZW1Db3VudCwgaXRlbUNvdW50KTsKLQlpbnQgaXRlbUhlaWdodCA9IGxpc3QuZ2V0SXRlbUhlaWdodCAoKSAqIGl0ZW1Db3VudDsKLQlQb2ludCBsaXN0U2l6ZSA9IGxpc3QuY29tcHV0ZVNpemUgKFNXVC5ERUZBVUxULCBpdGVtSGVpZ2h0LCBmYWxzZSk7Ci0JbGlzdC5zZXRCb3VuZHMgKDEsIDEsIE1hdGgubWF4IChzaXplLnggLSAyLCBsaXN0U2l6ZS54KSwgbGlzdFNpemUueSk7Ci0JCi0JaW50IGluZGV4ID0gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLQlpZiAoaW5kZXggIT0gLTEpIGxpc3Quc2V0VG9wSW5kZXggKGluZGV4KTsKLQlEaXNwbGF5IGRpc3BsYXkgPSBnZXREaXNwbGF5ICgpOwotCVJlY3RhbmdsZSBsaXN0UmVjdCA9IGxpc3QuZ2V0Qm91bmRzICgpOwotCVJlY3RhbmdsZSBwYXJlbnRSZWN0ID0gZGlzcGxheS5tYXAgKGdldFBhcmVudCAoKSwgbnVsbCwgZ2V0Qm91bmRzICgpKTsKLQlQb2ludCBjb21ib1NpemUgPSBnZXRTaXplICgpOwotCVJlY3RhbmdsZSBkaXNwbGF5UmVjdCA9IGdldE1vbml0b3IgKCkuZ2V0Q2xpZW50QXJlYSAoKTsKLQlpbnQgd2lkdGggPSBNYXRoLm1heCAoY29tYm9TaXplLngsIGxpc3RSZWN0LndpZHRoICsgMik7Ci0JaW50IGhlaWdodCA9IGxpc3RSZWN0LmhlaWdodCArIDI7Ci0JaW50IHggPSBwYXJlbnRSZWN0Lng7Ci0JaW50IHkgPSBwYXJlbnRSZWN0LnkgKyBjb21ib1NpemUueTsKLQlpZiAoeSArIGhlaWdodCA+IGRpc3BsYXlSZWN0LnkgKyBkaXNwbGF5UmVjdC5oZWlnaHQpIHkgPSBwYXJlbnRSZWN0LnkgLSBoZWlnaHQ7Ci0JaWYgKHggKyB3aWR0aCA+IGRpc3BsYXlSZWN0LnggKyBkaXNwbGF5UmVjdC53aWR0aCkgeCA9IGRpc3BsYXlSZWN0LnggKyBkaXNwbGF5UmVjdC53aWR0aCAtIGxpc3RSZWN0LndpZHRoOwotCXBvcHVwLnNldEJvdW5kcyAoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0JcG9wdXAuc2V0VmlzaWJsZSAodHJ1ZSk7Ci0JbGlzdC5zZXRGb2N1cyAoKTsKLX0KLS8qCi0gKiBSZXR1cm4gdGhlIGxvd2VyY2FzZSBvZiB0aGUgZmlyc3Qgbm9uLScmJyBjaGFyYWN0ZXIgZm9sbG93aW5nCi0gKiBhbiAnJicgY2hhcmFjdGVyIGluIHRoZSBnaXZlbiBzdHJpbmcuIElmIHRoZXJlIGFyZSBubyAnJicKLSAqIGNoYXJhY3RlcnMgaW4gdGhlIGdpdmVuIHN0cmluZywgcmV0dXJuICdcMCcuCi0gKi8KLWNoYXIgX2ZpbmRNbmVtb25pYyAoU3RyaW5nIHN0cmluZykgewotCWlmIChzdHJpbmcgPT0gbnVsbCkgcmV0dXJuICdcMCc7Ci0JaW50IGluZGV4ID0gMDsKLQlpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCAoKTsKLQlkbyB7Ci0JCXdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBzdHJpbmcuY2hhckF0IChpbmRleCkgIT0gJyYnKSBpbmRleCsrOwotCQlpZiAoKytpbmRleCA+PSBsZW5ndGgpIHJldHVybiAnXDAnOwotCQlpZiAoc3RyaW5nLmNoYXJBdCAoaW5kZXgpICE9ICcmJykgcmV0dXJuIENoYXJhY3Rlci50b0xvd2VyQ2FzZSAoc3RyaW5nLmNoYXJBdCAoaW5kZXgpKTsKLQkJaW5kZXgrKzsKLQl9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7Ci0gCXJldHVybiAnXDAnOwotfQotLyogCi0gKiBSZXR1cm4gdGhlIExhYmVsIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgcmVjZWl2ZXIgaW4gdGhlIHotb3JkZXIsIAotICogb3IgbnVsbCBpZiBub25lLiAKLSAqLwotTGFiZWwgZ2V0QXNzb2NpYXRlZExhYmVsICgpIHsKLQlDb250cm9sW10gc2libGluZ3MgPSBnZXRQYXJlbnQgKCkuZ2V0Q2hpbGRyZW4gKCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKykgewotCQlpZiAoc2libGluZ3MgW2ldID09IHRoaXMpIHsKLQkJCWlmIChpID4gMCAmJiBzaWJsaW5ncyBbaS0xXSBpbnN0YW5jZW9mIExhYmVsKSB7Ci0JCQkJcmV0dXJuIChMYWJlbCkgc2libGluZ3MgW2ktMV07Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIG51bGw7Ci19Ci1wdWJsaWMgQ29udHJvbCBbXSBnZXRDaGlsZHJlbiAoKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlyZXR1cm4gbmV3IENvbnRyb2wgWzBdOwotfQotLyoqCi0gKiBHZXRzIHRoZSBlZGl0YWJsZSBzdGF0ZS4KLSAqCi0gKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSByZWNlaXZlciBpcyBlZGl0YWJsZQotICogCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBib29sZWFuIGdldEVkaXRhYmxlICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gdGV4dC5nZXRFZGl0YWJsZSgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiwgemVyby1yZWxhdGl2ZSBpbmRleCBpbiB0aGUKLSAqIHJlY2VpdmVyJ3MgbGlzdC4gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgaW5kZXggaXMgb3V0Ci0gKiBvZiByYW5nZS4KLSAqCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVybgotICogQHJldHVybiB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXgKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9SQU5HRSAtIGlmIHRoZSBpbmRleCBpcyBub3QgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IG1pbnVzIDEgKGluY2x1c2l2ZSk8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBTdHJpbmcgZ2V0SXRlbSAoaW50IGluZGV4KSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlyZXR1cm4gbGlzdC5nZXRJdGVtIChpbmRleCk7Ci19Ci0vKioKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjb250YWluZWQgaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdC4KLSAqCi0gKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGdldEl0ZW1Db3VudCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIGxpc3QuZ2V0SXRlbUNvdW50ICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGFyZWEgd2hpY2ggd291bGQgYmUgdXNlZCB0bwotICogZGlzcGxheSA8ZW0+b25lPC9lbT4gb2YgdGhlIGl0ZW1zIGluIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHJldHVybiB0aGUgaGVpZ2h0IG9mIG9uZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBnZXRJdGVtSGVpZ2h0ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gbGlzdC5nZXRJdGVtSGVpZ2h0ICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIGFuIGFycmF5IG9mIDxjb2RlPlN0cmluZzwvY29kZT5zIHdoaWNoIGFyZSB0aGUgaXRlbXMKLSAqIGluIHRoZSByZWNlaXZlcidzIGxpc3QuIAotICogPHA+Ci0gKiBOb3RlOiBUaGlzIGlzIG5vdCB0aGUgYWN0dWFsIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSByZWNlaXZlcgotICogdG8gbWFpbnRhaW4gaXRzIGxpc3Qgb2YgaXRlbXMsIHNvIG1vZGlmeWluZyB0aGUgYXJyYXkgd2lsbAotICogbm90IGFmZmVjdCB0aGUgcmVjZWl2ZXIuIAotICogPC9wPgotICoKLSAqIEByZXR1cm4gdGhlIGl0ZW1zIGluIHRoZSByZWNlaXZlcidzIGxpc3QKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgU3RyaW5nIFtdIGdldEl0ZW1zICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gbGlzdC5nZXRJdGVtcyAoKTsKLX0KLXB1YmxpYyBNZW51IGdldE1lbnUoKSB7Ci0JcmV0dXJuIHRleHQuZ2V0TWVudSgpOwotfQotLyoqCi0gKiBSZXR1cm5zIGEgPGNvZGU+UG9pbnQ8L2NvZGU+IHdob3NlIHggY29vcmRpbmF0ZSBpcyB0aGUgc3RhcnQKLSAqIG9mIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZCwgYW5kIHdob3NlIHkKLSAqIGNvb3JkaW5hdGUgaXMgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLiBUaGUgcmV0dXJuZWQgdmFsdWVzCi0gKiBhcmUgemVyby1yZWxhdGl2ZS4gQW4gImVtcHR5IiBzZWxlY3Rpb24gYXMgaW5kaWNhdGVkIGJ5Ci0gKiB0aGUgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgaGF2aW5nIHRoZSBzYW1lIHZhbHVlLgotICoKLSAqIEByZXR1cm4gYSBwb2ludCByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIFBvaW50IGdldFNlbGVjdGlvbiAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHRleHQuZ2V0U2VsZWN0aW9uICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSB6ZXJvLXJlbGF0aXZlIGluZGV4IG9mIHRoZSBpdGVtIHdoaWNoIGlzIGN1cnJlbnRseQotICogc2VsZWN0ZWQgaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdCwgb3IgLTEgaWYgbm8gaXRlbSBpcyBzZWxlY3RlZC4KLSAqCi0gKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbQotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgZ2V0U2VsZWN0aW9uSW5kZXggKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiBsaXN0LmdldFNlbGVjdGlvbkluZGV4ICgpOwotfQotcHVibGljIGludCBnZXRTdHlsZSAoKSB7Ci0JaW50IHN0eWxlID0gc3VwZXIuZ2V0U3R5bGUgKCk7Ci0Jc3R5bGUgJj0gflNXVC5SRUFEX09OTFk7Ci0JaWYgKCF0ZXh0LmdldEVkaXRhYmxlKCkpIHN0eWxlIHw9IFNXVC5SRUFEX09OTFk7IAotCXJldHVybiBzdHlsZTsKLX0KLS8qKgotICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIGEgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlCi0gKiByZWNlaXZlcidzIHRleHQgZmllbGQuCi0gKgotICogQHJldHVybiB0aGUgcmVjZWl2ZXIncyB0ZXh0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIFN0cmluZyBnZXRUZXh0ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gdGV4dC5nZXRUZXh0ICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHJlY2VpdmVycydzIHRleHQgZmllbGQuCi0gKgotICogQHJldHVybiB0aGUgdGV4dCBoZWlnaHQKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGdldFRleHRIZWlnaHQgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiB0ZXh0LmdldExpbmVIZWlnaHQgKCk7Ci19Ci0vKioKLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB0aGUgcmVjZWl2ZXIncwotICogdGV4dCBmaWVsZCBpcyBjYXBhYmxlIG9mIGhvbGRpbmcuIElmIHRoaXMgaGFzIG5vdCBiZWVuIGNoYW5nZWQKLSAqIGJ5IDxjb2RlPnNldFRleHRMaW1pdCgpPC9jb2RlPiwgaXQgd2lsbCBiZSB0aGUgY29uc3RhbnQKLSAqIDxjb2RlPkNvbWJvLkxJTUlUPC9jb2RlPi4KLSAqIAotICogQHJldHVybiB0aGUgdGV4dCBsaW1pdAotICogCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGdldFRleHRMaW1pdCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHRleHQuZ2V0VGV4dExpbWl0ICgpOwotfQotLyoqCi0gKiBHZXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdmlzaWJsZSBpbiB0aGUgZHJvcAotICogZG93biBwb3J0aW9uIG9mIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIHZpc2libGUKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBpbnQgZ2V0VmlzaWJsZUl0ZW1Db3VudCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHZpc2libGVJdGVtQ291bnQ7Ci19Ci12b2lkIGhhbmRsZUZvY3VzIChpbnQgdHlwZSkgewotCWlmIChpc0Rpc3Bvc2VkICgpKSByZXR1cm47Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgU1dULkZvY3VzSW46IHsKLQkJCWlmIChoYXNGb2N1cykgcmV0dXJuOwotLy8JCQlpZiAoZ2V0RWRpdGFibGUgKCkpIHRleHQuc2VsZWN0QWxsICgpOwotCQkJaGFzRm9jdXMgPSB0cnVlOwotCQkJU2hlbGwgc2hlbGwgPSBnZXRTaGVsbCAoKTsKLQkJCXNoZWxsLnJlbW92ZUxpc3RlbmVyIChTV1QuRGVhY3RpdmF0ZSwgbGlzdGVuZXIpOwotCQkJc2hlbGwuYWRkTGlzdGVuZXIgKFNXVC5EZWFjdGl2YXRlLCBsaXN0ZW5lcik7Ci0JCQlEaXNwbGF5IGRpc3BsYXkgPSBnZXREaXNwbGF5ICgpOwotCQkJZGlzcGxheS5yZW1vdmVGaWx0ZXIgKFNXVC5Gb2N1c0luLCBmaWx0ZXIpOwotCQkJZGlzcGxheS5hZGRGaWx0ZXIgKFNXVC5Gb2N1c0luLCBmaWx0ZXIpOwotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULkZvY3VzSW4sIGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuRm9jdXNPdXQ6IHsKLQkJCWlmICghaGFzRm9jdXMpIHJldHVybjsKLQkJCUNvbnRyb2wgZm9jdXNDb250cm9sID0gZ2V0RGlzcGxheSAoKS5nZXRGb2N1c0NvbnRyb2wgKCk7Ci0JCQlpZiAoZm9jdXNDb250cm9sID09IGFycm93IHx8IGZvY3VzQ29udHJvbCA9PSBsaXN0IHx8IGZvY3VzQ29udHJvbCA9PSB0ZXh0KSByZXR1cm47Ci0JCQloYXNGb2N1cyA9IGZhbHNlOwotCQkJU2hlbGwgc2hlbGwgPSBnZXRTaGVsbCAoKTsKLQkJCXNoZWxsLnJlbW92ZUxpc3RlbmVyKFNXVC5EZWFjdGl2YXRlLCBsaXN0ZW5lcik7Ci0JCQlEaXNwbGF5IGRpc3BsYXkgPSBnZXREaXNwbGF5ICgpOwotCQkJZGlzcGxheS5yZW1vdmVGaWx0ZXIgKFNXVC5Gb2N1c0luLCBmaWx0ZXIpOwotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULkZvY3VzT3V0LCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotLyoqCi0gKiBTZWFyY2hlcyB0aGUgcmVjZWl2ZXIncyBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBpdGVtCi0gKiAoaW5kZXggMCkgdW50aWwgYW4gaXRlbSBpcyBmb3VuZCB0aGF0IGlzIGVxdWFsIHRvIHRoZSAKLSAqIGFyZ3VtZW50LCBhbmQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhhdCBpdGVtLiBJZiBubyBpdGVtCi0gKiBpcyBmb3VuZCwgcmV0dXJucyAtMS4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBzZWFyY2ggaXRlbQotICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBzdHJpbmcgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBpbmRleE9mIChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JaWYgKHN0cmluZyA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlyZXR1cm4gbGlzdC5pbmRleE9mIChzdHJpbmcpOwotfQotLyoqCi0gKiBTZWFyY2hlcyB0aGUgcmVjZWl2ZXIncyBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiwgCi0gKiB6ZXJvLXJlbGF0aXZlIGluZGV4IHVudGlsIGFuIGl0ZW0gaXMgZm91bmQgdGhhdCBpcyBlcXVhbAotICogdG8gdGhlIGFyZ3VtZW50LCBhbmQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhhdCBpdGVtLiBJZgotICogbm8gaXRlbSBpcyBmb3VuZCBvciB0aGUgc3RhcnRpbmcgaW5kZXggaXMgb3V0IG9mIHJhbmdlLAotICogcmV0dXJucyAtMS4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBzZWFyY2ggaXRlbQotICogQHBhcmFtIHN0YXJ0IHRoZSB6ZXJvLXJlbGF0aXZlIGluZGV4IGF0IHdoaWNoIHRvIGJlZ2luIHRoZSBzZWFyY2gKLSAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgaW5kZXhPZiAoU3RyaW5nIHN0cmluZywgaW50IHN0YXJ0KSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JaWYgKHN0cmluZyA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlyZXR1cm4gbGlzdC5pbmRleE9mIChzdHJpbmcsIHN0YXJ0KTsKLX0KLQotdm9pZCBpbml0QWNjZXNzaWJsZSgpIHsKLQlBY2Nlc3NpYmxlQWRhcHRlciBhY2Nlc3NpYmxlQWRhcHRlciA9IG5ldyBBY2Nlc3NpYmxlQWRhcHRlciAoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldE5hbWUgKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQlTdHJpbmcgbmFtZSA9IG51bGw7Ci0JCQlMYWJlbCBsYWJlbCA9IGdldEFzc29jaWF0ZWRMYWJlbCAoKTsKLQkJCWlmIChsYWJlbCAhPSBudWxsKSB7Ci0JCQkJbmFtZSA9IHN0cmlwTW5lbW9uaWMgKGxhYmVsLmdldFRleHQoKSk7Ci0JCQl9Ci0JCQllLnJlc3VsdCA9IG5hbWU7Ci0JCX0KLQkJcHVibGljIHZvaWQgZ2V0S2V5Ym9hcmRTaG9ydGN1dChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJU3RyaW5nIHNob3J0Y3V0ID0gbnVsbDsKLQkJCUxhYmVsIGxhYmVsID0gZ2V0QXNzb2NpYXRlZExhYmVsICgpOwotCQkJaWYgKGxhYmVsICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgdGV4dCA9IGxhYmVsLmdldFRleHQgKCk7Ci0JCQkJaWYgKHRleHQgIT0gbnVsbCkgewotCQkJCQljaGFyIG1uZW1vbmljID0gX2ZpbmRNbmVtb25pYyAodGV4dCk7Ci0JCQkJCWlmIChtbmVtb25pYyAhPSAnXDAnKSB7Ci0JCQkJCQlzaG9ydGN1dCA9ICJBbHQrIittbmVtb25pYzsgLy8kTk9OLU5MUy0xJAotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZS5yZXN1bHQgPSBzaG9ydGN1dDsKLQkJfQotCQlwdWJsaWMgdm9pZCBnZXRIZWxwIChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSBnZXRUb29sVGlwVGV4dCAoKTsKLQkJfQotCX07Ci0JZ2V0QWNjZXNzaWJsZSAoKS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIgKGFjY2Vzc2libGVBZGFwdGVyKTsKLQl0ZXh0LmdldEFjY2Vzc2libGUgKCkuYWRkQWNjZXNzaWJsZUxpc3RlbmVyIChhY2Nlc3NpYmxlQWRhcHRlcik7Ci0JbGlzdC5nZXRBY2Nlc3NpYmxlICgpLmFkZEFjY2Vzc2libGVMaXN0ZW5lciAoYWNjZXNzaWJsZUFkYXB0ZXIpOwotCQotCWFycm93LmdldEFjY2Vzc2libGUgKCkuYWRkQWNjZXNzaWJsZUxpc3RlbmVyIChuZXcgQWNjZXNzaWJsZUFkYXB0ZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldE5hbWUgKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQllLnJlc3VsdCA9IGlzRHJvcHBlZCAoKSA/IFNXVC5nZXRNZXNzYWdlICgiU1dUX0Nsb3NlIikgOiBTV1QuZ2V0TWVzc2FnZSAoIlNXVF9PcGVuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9Ci0JCXB1YmxpYyB2b2lkIGdldEtleWJvYXJkU2hvcnRjdXQgKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQllLnJlc3VsdCA9ICJBbHQrRG93biBBcnJvdyI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlwdWJsaWMgdm9pZCBnZXRIZWxwIChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSBnZXRUb29sVGlwVGV4dCAoKTsKLQkJfQotCX0pOwotCi0JZ2V0QWNjZXNzaWJsZSgpLmFkZEFjY2Vzc2libGVUZXh0TGlzdGVuZXIgKG5ldyBBY2Nlc3NpYmxlVGV4dEFkYXB0ZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldENhcmV0T2Zmc2V0IChBY2Nlc3NpYmxlVGV4dEV2ZW50IGUpIHsKLQkJCWUub2Zmc2V0ID0gdGV4dC5nZXRDYXJldFBvc2l0aW9uICgpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGdldFNlbGVjdGlvblJhbmdlKEFjY2Vzc2libGVUZXh0RXZlbnQgZSkgewotCQkJUG9pbnQgc2VsID0gdGV4dC5nZXRTZWxlY3Rpb24oKTsKLQkJCWUub2Zmc2V0ID0gc2VsLng7Ci0JCQllLmxlbmd0aCA9IHNlbC55IC0gc2VsLng7Ci0JCX0KLQl9KTsKLQkKLQlnZXRBY2Nlc3NpYmxlKCkuYWRkQWNjZXNzaWJsZUNvbnRyb2xMaXN0ZW5lciAobmV3IEFjY2Vzc2libGVDb250cm9sQWRhcHRlcigpIHsKLQkJcHVibGljIHZvaWQgZ2V0Q2hpbGRBdFBvaW50IChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCVBvaW50IHRlc3RQb2ludCA9IHRvQ29udHJvbCAoZS54LCBlLnkpOwotCQkJaWYgKGdldEJvdW5kcyAoKS5jb250YWlucyAodGVzdFBvaW50KSkgewotCQkJCWUuY2hpbGRJRCA9IEFDQy5DSElMRElEX1NFTEY7Ci0JCQl9Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIGdldExvY2F0aW9uIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCVJlY3RhbmdsZSBsb2NhdGlvbiA9IGdldEJvdW5kcyAoKTsKLQkJCVBvaW50IHB0ID0gdG9EaXNwbGF5IChsb2NhdGlvbi54LCBsb2NhdGlvbi55KTsKLQkJCWUueCA9IHB0Lng7Ci0JCQllLnkgPSBwdC55OwotCQkJZS53aWR0aCA9IGxvY2F0aW9uLndpZHRoOwotCQkJZS5oZWlnaHQgPSBsb2NhdGlvbi5oZWlnaHQ7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIGdldENoaWxkQ291bnQgKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJZS5kZXRhaWwgPSAwOwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBnZXRSb2xlIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUuZGV0YWlsID0gQUNDLlJPTEVfQ09NQk9CT1g7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIGdldFN0YXRlIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUuZGV0YWlsID0gQUNDLlNUQVRFX05PUk1BTDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGdldFZhbHVlIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gZ2V0VGV4dCAoKTsKLQkJfQotCX0pOwotCi0JdGV4dC5nZXRBY2Nlc3NpYmxlICgpLmFkZEFjY2Vzc2libGVDb250cm9sTGlzdGVuZXIgKG5ldyBBY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXIgKCkgewotCQlwdWJsaWMgdm9pZCBnZXRSb2xlIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUuZGV0YWlsID0gdGV4dC5nZXRFZGl0YWJsZSAoKSA/IEFDQy5ST0xFX1RFWFQgOiBBQ0MuUk9MRV9MQUJFTDsKLQkJfQotCX0pOwotCi0JYXJyb3cuZ2V0QWNjZXNzaWJsZSAoKS5hZGRBY2Nlc3NpYmxlQ29udHJvbExpc3RlbmVyIChuZXcgQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyKCkgewotCQlwdWJsaWMgdm9pZCBnZXREZWZhdWx0QWN0aW9uIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gaXNEcm9wcGVkICgpID8gU1dULmdldE1lc3NhZ2UgKCJTV1RfQ2xvc2UiKSA6IFNXVC5nZXRNZXNzYWdlICgiU1dUX09wZW4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQl9KTsKLX0KLWJvb2xlYW4gaXNEcm9wcGVkICgpIHsKLQlyZXR1cm4gcG9wdXAuZ2V0VmlzaWJsZSAoKTsKLX0KLXB1YmxpYyBib29sZWFuIGlzRm9jdXNDb250cm9sICgpIHsKLQljaGVja1dpZGdldCgpOwotCWlmICh0ZXh0LmlzRm9jdXNDb250cm9sICgpIHx8IGFycm93LmlzRm9jdXNDb250cm9sICgpIHx8IGxpc3QuaXNGb2N1c0NvbnRyb2wgKCkgfHwgcG9wdXAuaXNGb2N1c0NvbnRyb2wgKCkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfSAKLQlyZXR1cm4gc3VwZXIuaXNGb2N1c0NvbnRyb2wgKCk7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFRleHRJbmRlbnQoaW50IGluZGVudCkgewotCXRleHRJbmRlbnQgPSBpbmRlbnQ7Ci19Ci0KLXZvaWQgaW50ZXJuYWxMYXlvdXQgKGJvb2xlYW4gY2hhbmdlZCkgewotCWlmIChpc0Ryb3BwZWQgKCkpIGRyb3BEb3duIChmYWxzZSk7Ci0JUmVjdGFuZ2xlIHJlY3QgPSBnZXRDbGllbnRBcmVhICgpOwotCWludCB3aWR0aCA9IHJlY3Qud2lkdGg7Ci0JaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0OwotCVBvaW50IGFycm93U2l6ZSA9IGFycm93LmNvbXB1dGVTaXplIChTV1QuREVGQVVMVCwgaGVpZ2h0LCBjaGFuZ2VkKTsKLQotCXRleHQucGFjaygpOwotCWludCB0ZXh0SGVpZ2h0ID0gdGV4dC5nZXRCb3VuZHMoKS5oZWlnaHQ7Ci0JaW50IHRleHRYID0gdGV4dEluZGVudDsKLQlpbnQgdGV4dFkgPSAoaGVpZ2h0IC0gdGV4dEhlaWdodCkgLyAyOwotCXRleHQuc2V0TG9jYXRpb24odGV4dFgsIHRleHRZKTsKLQkKLQlhcnJvdy5zZXRCb3VuZHMgKHdpZHRoIC0gYXJyb3dTaXplLngsIDAsIGFycm93U2l6ZS54LCBhcnJvd1NpemUueSk7Ci19Ci12b2lkIGxpc3RFdmVudCAoRXZlbnQgZXZlbnQpIHsKLQlzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKLQkJY2FzZSBTV1QuRGlzcG9zZToKLQkJCWlmIChnZXRTaGVsbCAoKSAhPSBwb3B1cC5nZXRQYXJlbnQgKCkpIHsKLQkJCQlTdHJpbmdbXSBpdGVtcyA9IGxpc3QuZ2V0SXRlbXMgKCk7Ci0JCQkJaW50IHNlbGVjdGlvbkluZGV4ID0gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJCQlwb3B1cCA9IG51bGw7Ci0JCQkJbGlzdCA9IG51bGw7Ci0JCQkJY3JlYXRlUG9wdXAgKGl0ZW1zLCBzZWxlY3Rpb25JbmRleCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTV1QuRm9jdXNJbjogewotCQkJaGFuZGxlRm9jdXMgKFNXVC5Gb2N1c0luKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1vdXNlVXA6IHsKLQkJCWlmIChldmVudC5idXR0b24gIT0gMSkgcmV0dXJuOwotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULlNlbGVjdGlvbjogewotCQkJaW50IGluZGV4ID0gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJCWlmIChpbmRleCA9PSAtMSkgcmV0dXJuOwotCQkJdGV4dC5zZXRUZXh0IChsaXN0LmdldEl0ZW0gKGluZGV4KSk7Ci0vLwkJCXRleHQuc2VsZWN0QWxsICgpOwotCQkJbGlzdC5zZXRTZWxlY3Rpb24gKGluZGV4KTsKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJZS5zdGF0ZU1hc2sgPSBldmVudC5zdGF0ZU1hc2s7Ci0JCQllLmRvaXQgPSBldmVudC5kb2l0OwotCQkJaWYgKCFpc0Ryb3BwZWQoKSkgewotCQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlNlbGVjdGlvbiwgZSk7Ci0JCQl9Ci0JCQlldmVudC5kb2l0ID0gZS5kb2l0OwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuVHJhdmVyc2U6IHsKLQkJCXN3aXRjaCAoZXZlbnQuZGV0YWlsKSB7Ci0JCQkJY2FzZSBTV1QuVFJBVkVSU0VfUkVUVVJOOgotCQkJCWNhc2UgU1dULlRSQVZFUlNFX0VTQ0FQRToKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUzoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUOgotCQkJCQlldmVudC5kb2l0ID0gZmFsc2U7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmRldGFpbCA9IGV2ZW50LmRldGFpbDsKLQkJCWUuZG9pdCA9IGV2ZW50LmRvaXQ7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5UcmF2ZXJzZSwgZSk7Ci0JCQlldmVudC5kb2l0ID0gZS5kb2l0OwotCQkJZXZlbnQuZGV0YWlsID0gZS5kZXRhaWw7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5LZXlVcDogewkJCi0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCi0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5LZXlVcCwgZSk7Ci0JCQkKLQkJCQotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuS2V5RG93bjogewotCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuRVNDKSB7IAotCQkJCS8vIEVzY2FwZSBrZXkgY2FuY2VscyBwb3B1cCBsaXN0Ci0JCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCX0KLQkJCWlmICgoZXZlbnQuc3RhdGVNYXNrICYgU1dULkFMVCkgIT0gMCAmJiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVAgfHwgZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfRE9XTikpIHsKLQkJCQlkcm9wRG93biAoZmFsc2UpOwotCQkJfQotCQkJCi0JCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5DUikgewotCQkJCS8vIEVudGVyIGNhdXNlcyBkZWZhdWx0IHNlbGVjdGlvbgotCQkJCWRyb3BEb3duIChmYWxzZSk7Ci0JCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULkRlZmF1bHRTZWxlY3Rpb24sIGUpOwotCQkJfQotCQkJLy8gQXQgdGhpcyBwb2ludCB0aGUgd2lkZ2V0IG1heSBoYXZlIGJlZW4gZGlzcG9zZWQuCi0JCQkvLyBJZiBzbywgZG8gbm90IGNvbnRpbnVlLgotCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJbm90aWZ5TGlzdGVuZXJzKFNXVC5LZXlEb3duLCBlKTsKLQkJCWJyZWFrOwotCQkJCi0JCX0KLQl9Ci19Ci0KLXZvaWQgcG9wdXBFdmVudChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5QYWludDoKLQkJCS8vIGRyYXcgYmxhY2sgcmVjdGFuZ2xlIGFyb3VuZCBsaXN0Ci0JCQlSZWN0YW5nbGUgbGlzdFJlY3QgPSBsaXN0LmdldEJvdW5kcygpOwotCQkJQ29sb3IgYmxhY2sgPSBnZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0JMQUNLKTsKLQkJCWV2ZW50LmdjLnNldEZvcmVncm91bmQoYmxhY2spOwotCQkJZXZlbnQuZ2MuZHJhd1JlY3RhbmdsZSgwLCAwLCBsaXN0UmVjdC53aWR0aCArIDEsIGxpc3RSZWN0LmhlaWdodCArIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULkNsb3NlOgotCQkJZXZlbnQuZG9pdCA9IGZhbHNlOwotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCQljYXNlIFNXVC5EZWFjdGl2YXRlOgotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCX0KLX0KLXB1YmxpYyB2b2lkIHJlZHJhdyAoKSB7Ci0Jc3VwZXIucmVkcmF3KCk7Ci0JdGV4dC5yZWRyYXcoKTsKLQlhcnJvdy5yZWRyYXcoKTsKLQlpZiAocG9wdXAuaXNWaXNpYmxlKCkpIGxpc3QucmVkcmF3KCk7Ci19Ci1wdWJsaWMgdm9pZCByZWRyYXcgKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGFsbCkgewotCXN1cGVyLnJlZHJhdyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLX0KLQotLyoqCi0gKiBSZW1vdmVzIHRoZSBpdGVtIGZyb20gdGhlIHJlY2VpdmVyJ3MgbGlzdCBhdCB0aGUgZ2l2ZW4KLSAqIHplcm8tcmVsYXRpdmUgaW5kZXguCi0gKgotICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBmb3IgdGhlIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9SQU5HRSAtIGlmIHRoZSBpbmRleCBpcyBub3QgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IG1pbnVzIDEgKGluY2x1c2l2ZSk8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyB2b2lkIHJlbW92ZSAoaW50IGluZGV4KSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlsaXN0LnJlbW92ZSAoaW5kZXgpOwotfQotLyoqCi0gKiBSZW1vdmVzIHRoZSBpdGVtcyBmcm9tIHRoZSByZWNlaXZlcidzIGxpc3Qgd2hpY2ggYXJlCi0gKiBiZXR3ZWVuIHRoZSBnaXZlbiB6ZXJvLXJlbGF0aXZlIHN0YXJ0IGFuZCBlbmQgCi0gKiBpbmRpY2VzIChpbmNsdXNpdmUpLgotICoKLSAqIEBwYXJhbSBzdGFydCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlCi0gKiBAcGFyYW0gZW5kIHRoZSBlbmQgb2YgdGhlIHJhbmdlCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfUkFOR0UgLSBpZiBlaXRoZXIgdGhlIHN0YXJ0IG9yIGVuZCBhcmUgbm90IGJldHdlZW4gMCBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBtaW51cyAxIChpbmNsdXNpdmUpPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCByZW1vdmUgKGludCBzdGFydCwgaW50IGVuZCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JbGlzdC5yZW1vdmUgKHN0YXJ0LCBlbmQpOwotfQotLyoqCi0gKiBTZWFyY2hlcyB0aGUgcmVjZWl2ZXIncyBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBpdGVtCi0gKiB1bnRpbCBhbiBpdGVtIGlzIGZvdW5kIHRoYXQgaXMgZXF1YWwgdG8gdGhlIGFyZ3VtZW50LCAKLSAqIGFuZCByZW1vdmVzIHRoYXQgaXRlbSBmcm9tIHRoZSBsaXN0LgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIGl0ZW0gdG8gcmVtb3ZlCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG5vdCBmb3VuZCBpbiB0aGUgbGlzdDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgcmVtb3ZlIChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCWxpc3QucmVtb3ZlIChzdHJpbmcpOwotfQotLyoqCi0gKiBSZW1vdmVzIGFsbCBvZiB0aGUgaXRlbXMgZnJvbSB0aGUgcmVjZWl2ZXIncyBsaXN0IGFuZCBjbGVhciB0aGUKLSAqIGNvbnRlbnRzIG9mIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZC4KLSAqIDxwPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgcmVtb3ZlQWxsICgpIHsKLQljaGVja1dpZGdldCgpOwotCXRleHQuc2V0VGV4dCAoIiIpOyAvLyROT04tTkxTLTEkCi0JbGlzdC5yZW1vdmVBbGwgKCk7Ci19Ci0vKioKLSAqIFJlbW92ZXMgdGhlIGxpc3RlbmVyIGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgbGlzdGVuZXJzIHdobyB3aWxsCi0gKiBiZSBub3RpZmllZCB3aGVuIHRoZSByZWNlaXZlcidzIHRleHQgaXMgbW9kaWZpZWQuCi0gKgotICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB3aGljaCBzaG91bGQgbm8gbG9uZ2VyIGJlIG5vdGlmaWVkCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgbGlzdGVuZXIgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlIE1vZGlmeUxpc3RlbmVyCi0gKiBAc2VlICNhZGRNb2RpZnlMaXN0ZW5lcgotICovCi1wdWJsaWMgdm9pZCByZW1vdmVNb2RpZnlMaXN0ZW5lciAoTW9kaWZ5TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChsaXN0ZW5lciA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlyZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCBsaXN0ZW5lcik7CQotfQotLyoqCi0gKiBSZW1vdmVzIHRoZSBsaXN0ZW5lciBmcm9tIHRoZSBjb2xsZWN0aW9uIG9mIGxpc3RlbmVycyB3aG8gd2lsbAotICogYmUgbm90aWZpZWQgd2hlbiB0aGUgcmVjZWl2ZXIncyBzZWxlY3Rpb24gY2hhbmdlcy4KLSAqCi0gKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoaWNoIHNob3VsZCBubyBsb25nZXIgYmUgbm90aWZpZWQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBsaXN0ZW5lciBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgU2VsZWN0aW9uTGlzdGVuZXIKLSAqIEBzZWUgI2FkZFNlbGVjdGlvbkxpc3RlbmVyCi0gKi8KLXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkxpc3RlbmVyIChTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKGxpc3RlbmVyID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCXJlbW92ZUxpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKLQlyZW1vdmVMaXN0ZW5lcihTV1QuRGVmYXVsdFNlbGVjdGlvbixsaXN0ZW5lcik7CQotfQotLyoqCi0gKiBTZWxlY3RzIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiB6ZXJvLXJlbGF0aXZlIGluZGV4IGluIHRoZSByZWNlaXZlcidzIAotICogbGlzdC4gIElmIHRoZSBpdGVtIGF0IHRoZSBpbmRleCB3YXMgYWxyZWFkeSBzZWxlY3RlZCwgaXQgcmVtYWlucwotICogc2VsZWN0ZWQuIEluZGljZXMgdGhhdCBhcmUgb3V0IG9mIHJhbmdlIGFyZSBpZ25vcmVkLgotICoKLSAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gc2VsZWN0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2VsZWN0IChpbnQgaW5kZXgpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChpbmRleCA9PSAtMSkgewotCQlsaXN0LmRlc2VsZWN0QWxsICgpOwotCQl0ZXh0LnNldFRleHQgKCIiKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm47Ci0JfQotCWlmICgwIDw9IGluZGV4ICYmIGluZGV4IDwgbGlzdC5nZXRJdGVtQ291bnQoKSkgewotCQlpZiAoaW5kZXggIT0gZ2V0U2VsZWN0aW9uSW5kZXgoKSkgewotCQkJdGV4dC5zZXRUZXh0IChsaXN0LmdldEl0ZW0gKGluZGV4KSk7Ci0vLwkJCXRleHQuc2VsZWN0QWxsICgpOwotCQkJbGlzdC5zZWxlY3QgKGluZGV4KTsKLQkJCWxpc3Quc2hvd1NlbGVjdGlvbiAoKTsKLQkJfQotCX0KLX0KLXB1YmxpYyB2b2lkIHNldEJhY2tncm91bmQgKENvbG9yIGNvbG9yKSB7Ci0Jc3VwZXIuc2V0QmFja2dyb3VuZChjb2xvcik7Ci0JYmFja2dyb3VuZCA9IGNvbG9yOwotCWlmICh0ZXh0ICE9IG51bGwpIHRleHQuc2V0QmFja2dyb3VuZChjb2xvcik7Ci0JaWYgKGxpc3QgIT0gbnVsbCkgbGlzdC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLQlpZiAoYXJyb3cgIT0gbnVsbCkgYXJyb3cuc2V0QmFja2dyb3VuZChjb2xvcik7Ci19Ci0vKioKLSAqIFNldHMgdGhlIGVkaXRhYmxlIHN0YXRlLgotICoKLSAqIEBwYXJhbSBlZGl0YWJsZSB0aGUgbmV3IGVkaXRhYmxlIHN0YXRlCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqIAotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgdm9pZCBzZXRFZGl0YWJsZSAoYm9vbGVhbiBlZGl0YWJsZSkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXRleHQuc2V0RWRpdGFibGUoZWRpdGFibGUpOwotfQotcHVibGljIHZvaWQgc2V0RW5hYmxlZCAoYm9vbGVhbiBlbmFibGVkKSB7Ci0Jc3VwZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLQlpZiAocG9wdXAgIT0gbnVsbCkgcG9wdXAuc2V0VmlzaWJsZSAoZmFsc2UpOwotCWlmICh0ZXh0ICE9IG51bGwpIHRleHQuc2V0RW5hYmxlZChlbmFibGVkKTsKLQlpZiAoYXJyb3cgIT0gbnVsbCkgYXJyb3cuc2V0RW5hYmxlZChlbmFibGVkKTsKLX0KLXB1YmxpYyBib29sZWFuIHNldEZvY3VzICgpIHsKLQljaGVja1dpZGdldCgpOwotCXJldHVybiB0ZXh0LnNldEZvY3VzICgpOwotfQotcHVibGljIHZvaWQgc2V0Rm9udCAoRm9udCBmb250KSB7Ci0Jc3VwZXIuc2V0Rm9udCAoZm9udCk7Ci0JdGhpcy5mb250ID0gZm9udDsKLQl0ZXh0LnNldEZvbnQgKGZvbnQpOwotCWxpc3Quc2V0Rm9udCAoZm9udCk7Ci0JaW50ZXJuYWxMYXlvdXQgKHRydWUpOwotfQotcHVibGljIHZvaWQgc2V0Rm9yZWdyb3VuZCAoQ29sb3IgY29sb3IpIHsKLQlzdXBlci5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLQlmb3JlZ3JvdW5kID0gY29sb3I7Ci0JaWYgKHRleHQgIT0gbnVsbCkgdGV4dC5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLQlpZiAobGlzdCAhPSBudWxsKSBsaXN0LnNldEZvcmVncm91bmQoY29sb3IpOwotCWlmIChhcnJvdyAhPSBudWxsKSBhcnJvdy5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLX0KLS8qKgotICogU2V0cyB0aGUgdGV4dCBvZiB0aGUgaXRlbSBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0IGF0IHRoZSBnaXZlbgotICogemVyby1yZWxhdGl2ZSBpbmRleCB0byB0aGUgc3RyaW5nIGFyZ3VtZW50LiBUaGlzIGlzIGVxdWl2YWxlbnQKLSAqIHRvIDxjb2RlPnJlbW92ZTwvY29kZT4naW5nIHRoZSBvbGQgaXRlbSBhdCB0aGUgaW5kZXgsIGFuZCB0aGVuCi0gKiA8Y29kZT5hZGQ8L2NvZGU+J2luZyB0aGUgbmV3IGl0ZW0gYXQgdGhhdCBpbmRleC4KLSAqCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IGZvciB0aGUgaXRlbQotICogQHBhcmFtIHN0cmluZyB0aGUgbmV3IHRleHQgZm9yIHRoZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfUkFOR0UgLSBpZiB0aGUgaW5kZXggaXMgbm90IGJldHdlZW4gMCBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBtaW51cyAxIChpbmNsdXNpdmUpPC9saT4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRJdGVtIChpbnQgaW5kZXgsIFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCgpOwotCWxpc3Quc2V0SXRlbSAoaW5kZXgsIHN0cmluZyk7Ci19Ci0vKioKLSAqIFNldHMgdGhlIHJlY2VpdmVyJ3MgbGlzdCB0byBiZSB0aGUgZ2l2ZW4gYXJyYXkgb2YgaXRlbXMuCi0gKgotICogQHBhcmFtIGl0ZW1zIHRoZSBhcnJheSBvZiBpdGVtcwotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIGl0ZW1zIGFycmF5IGlzIG51bGw8L2xpPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfQVJHVU1FTlQgLSBpZiBhbiBpdGVtIGluIHRoZSBpdGVtcyBhcnJheSBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRJdGVtcyAoU3RyaW5nIFtdIGl0ZW1zKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JbGlzdC5zZXRJdGVtcyAoaXRlbXMpOwotCWlmICghdGV4dC5nZXRFZGl0YWJsZSAoKSkgdGV4dC5zZXRUZXh0ICgiIik7IC8vJE5PTi1OTFMtMSQKLX0KLS8qKgotICogU2V0cyB0aGUgbGF5b3V0IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVjZWl2ZXIgdG8gYmUKLSAqIHRoZSBhcmd1bWVudCB3aGljaCBtYXkgYmUgbnVsbC4KLSAqIDxwPgotICogTm90ZTogTm8gTGF5b3V0IGNhbiBiZSBzZXQgb24gdGhpcyBDb250cm9sIGJlY2F1c2UgaXQgYWxyZWFkeQotICogbWFuYWdlcyB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgaXRzIGNoaWxkcmVuLgotICogPC9wPgotICoKLSAqIEBwYXJhbSBsYXlvdXQgdGhlIHJlY2VpdmVyJ3MgbmV3IGxheW91dCBvciBudWxsCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0TGF5b3V0IChMYXlvdXQgbGF5b3V0KSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuOwotfQotcHVibGljIHZvaWQgc2V0TWVudShNZW51IG1lbnUpIHsKLQl0ZXh0LnNldE1lbnUobWVudSk7Ci19Ci0vKioKLSAqIFNldHMgdGhlIHNlbGVjdGlvbiBpbiB0aGUgcmVjZWl2ZXIncyB0ZXh0IGZpZWxkIHRvIHRoZQotICogcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudCB3aG9zZSB4IGNvb3JkaW5hdGUgaXMgdGhlCi0gKiBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGFuZCB3aG9zZSB5IGNvb3JkaW5hdGUgaXMgdGhlIGVuZAotICogb2YgdGhlIHNlbGVjdGlvbi4gCi0gKgotICogQHBhcmFtIHNlbGVjdGlvbiBhIHBvaW50IHJlcHJlc2VudGluZyB0aGUgbmV3IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgcG9pbnQgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uIChQb2ludCBzZWxlY3Rpb24pIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JdGV4dC5zZXRTZWxlY3Rpb24gKHNlbGVjdGlvbi54LCBzZWxlY3Rpb24ueSk7Ci19Ci0KLS8qKgotICogU2V0cyB0aGUgY29udGVudHMgb2YgdGhlIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZCB0byB0aGUKLSAqIGdpdmVuIHN0cmluZy4KLSAqIDxwPgotICogTm90ZTogVGhlIHRleHQgZmllbGQgaW4gYSA8Y29kZT5Db21ibzwvY29kZT4gaXMgdHlwaWNhbGx5Ci0gKiBvbmx5IGNhcGFibGUgb2YgZGlzcGxheWluZyBhIHNpbmdsZSBsaW5lIG9mIHRleHQuIFRodXMsCi0gKiBzZXR0aW5nIHRoZSB0ZXh0IHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgbGluZSBicmVha3Mgb3IKLSAqIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycyB3aWxsIHByb2JhYmx5IGNhdXNlIGl0IHRvIAotICogZGlzcGxheSBpbmNvcnJlY3RseS4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBuZXcgdGV4dAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRUZXh0IChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCWludCBpbmRleCA9IGxpc3QuaW5kZXhPZiAoc3RyaW5nKTsKLQlpZiAoaW5kZXggPT0gLTEpIHsKLQkJbGlzdC5kZXNlbGVjdEFsbCAoKTsKLQkJdGV4dC5zZXRUZXh0IChzdHJpbmcpOwotCQlyZXR1cm47Ci0JfQotCXRleHQuc2V0VGV4dCAoc3RyaW5nKTsKLS8vCXRleHQuc2VsZWN0QWxsICgpOwotCWxpc3Quc2V0U2VsZWN0aW9uIChpbmRleCk7Ci0JbGlzdC5zaG93U2VsZWN0aW9uICgpOwotfQotLyoqCi0gKiBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdGhlIHJlY2VpdmVyJ3MKLSAqIHRleHQgZmllbGQgaXMgY2FwYWJsZSBvZiBob2xkaW5nIHRvIGJlIHRoZSBhcmd1bWVudC4KLSAqCi0gKiBAcGFyYW0gbGltaXQgbmV3IHRleHQgbGltaXQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfQ0FOTk9UX0JFX1pFUk8gLSBpZiB0aGUgbGltaXQgaXMgemVybzwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0VGV4dExpbWl0IChpbnQgbGltaXQpIHsKLQljaGVja1dpZGdldCgpOwotCXRleHQuc2V0VGV4dExpbWl0IChsaW1pdCk7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFRvb2xUaXBUZXh0IChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlzdXBlci5zZXRUb29sVGlwVGV4dChzdHJpbmcpOwotCWFycm93LnNldFRvb2xUaXBUZXh0IChzdHJpbmcpOwotCXRleHQuc2V0VG9vbFRpcFRleHQgKHN0cmluZyk7CQkKLX0KLQotcHVibGljIHZvaWQgc2V0VmlzaWJsZSAoYm9vbGVhbiB2aXNpYmxlKSB7Ci0Jc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKLQlpZiAoIXZpc2libGUpIHBvcHVwLnNldFZpc2libGUoZmFsc2UpOwotfQotLyoqCi0gKiBTZXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdmlzaWJsZSBpbiB0aGUgZHJvcAotICogZG93biBwb3J0aW9uIG9mIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHBhcmFtIGNvdW50IHRoZSBuZXcgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIHZpc2libGUKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyB2b2lkIHNldFZpc2libGVJdGVtQ291bnQgKGludCBjb3VudCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWlmIChjb3VudCA8IDApIHJldHVybjsKLQl2aXNpYmxlSXRlbUNvdW50ID0gY291bnQ7Ci19Ci1TdHJpbmcgc3RyaXBNbmVtb25pYyAoU3RyaW5nIHN0cmluZykgewotCWludCBpbmRleCA9IDA7Ci0JaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGggKCk7Ci0JZG8gewotCQl3aGlsZSAoKGluZGV4IDwgbGVuZ3RoKSAmJiAoc3RyaW5nLmNoYXJBdCAoaW5kZXgpICE9ICcmJykpIGluZGV4Kys7Ci0JCWlmICgrK2luZGV4ID49IGxlbmd0aCkgcmV0dXJuIHN0cmluZzsKLQkJaWYgKHN0cmluZy5jaGFyQXQgKGluZGV4KSAhPSAnJicpIHsKLQkJCXJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4LTEpICsgc3RyaW5nLnN1YnN0cmluZyhpbmRleCwgbGVuZ3RoKTsKLQkJfQotCQlpbmRleCsrOwotCX0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKLSAJcmV0dXJuIHN0cmluZzsKLX0KLXZvaWQgdGV4dEV2ZW50IChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5Gb2N1c0luOiB7Ci0JCQloYW5kbGVGb2N1cyAoU1dULkZvY3VzSW4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuS2V5RG93bjogewotCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuQ1IpIHsKLQkJCQlkcm9wRG93biAoZmFsc2UpOwotCQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5EZWZhdWx0U2VsZWN0aW9uLCBlKTsKLQkJCX0KLQkJCS8vQXQgdGhpcyBwb2ludCB0aGUgd2lkZ2V0IG1heSBoYXZlIGJlZW4gZGlzcG9zZWQuCi0JCQkvLyBJZiBzbywgZG8gbm90IGNvbnRpbnVlLgotCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJCi0JCQlpZiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVAgfHwgZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfRE9XTikgewotCQkJCWV2ZW50LmRvaXQgPSBmYWxzZTsKLQkJCQlpZiAoKGV2ZW50LnN0YXRlTWFzayAmIFNXVC5BTFQpICE9IDApIHsKLQkJCQkJYm9vbGVhbiBkcm9wcGVkID0gaXNEcm9wcGVkICgpOwotLy8JCQkJCXRleHQuc2VsZWN0QWxsICgpOwotCQkJCQlpZiAoIWRyb3BwZWQpIHNldEZvY3VzICgpOwotCQkJCQlkcm9wRG93biAoIWRyb3BwZWQpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlpbnQgb2xkSW5kZXggPSBnZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJCQlpZiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVApIHsKLQkJCQkJc2VsZWN0IChNYXRoLm1heCAob2xkSW5kZXggLSAxLCAwKSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2VsZWN0IChNYXRoLm1pbiAob2xkSW5kZXggKyAxLCBnZXRJdGVtQ291bnQgKCkgLSAxKSk7Ci0JCQkJfQotCQkJCWlmIChvbGRJbmRleCAhPSBnZXRTZWxlY3Rpb25JbmRleCAoKSkgewotCQkJCQlFdmVudCBlID0gbmV3IEV2ZW50KCk7Ci0JCQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5TZWxlY3Rpb24sIGUpOwotCQkJCX0KLQkJCQkvL0F0IHRoaXMgcG9pbnQgdGhlIHdpZGdldCBtYXkgaGF2ZSBiZWVuIGRpc3Bvc2VkLgotCQkJCS8vIElmIHNvLCBkbyBub3QgY29udGludWUuCi0JCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJfQotCQkJCi0JCQkvLyBGdXJ0aGVyIHdvcmsgOiBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBpbmNyZW1lbnRhbCBzZWFyY2ggaW4gCi0JCQkvLyBwb3AgdXAgbGlzdCBhcyBjaGFyYWN0ZXJzIHR5cGVkIGluIHRleHQgd2lkZ2V0Ci0JCQkKLQotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCS8vbm90aWZ5TGlzdGVuZXJzIChTV1QuS2V5RG93biwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5LZXlVcDogewotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULktleVVwLCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1lbnVEZXRlY3Q6IHsKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuTWVudURldGVjdCwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5Nb2RpZnk6IHsKLQkJCWxpc3QuZGVzZWxlY3RBbGwgKCk7Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULk1vZGlmeSwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5Nb3VzZURvd246IHsKLQkJCWlmIChldmVudC5idXR0b24gIT0gMSkgcmV0dXJuOwotCQkJaWYgKHRleHQuZ2V0RWRpdGFibGUgKCkpIHJldHVybjsKLQkJCWJvb2xlYW4gZHJvcHBlZCA9IGlzRHJvcHBlZCAoKTsKLS8vCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQlpZiAoIWRyb3BwZWQpIHNldEZvY3VzICgpOwotCQkJZHJvcERvd24gKCFkcm9wcGVkKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1vdXNlVXA6IHsKLQkJCWlmIChldmVudC5idXR0b24gIT0gMSkgcmV0dXJuOwotCQkJaWYgKHRleHQuZ2V0RWRpdGFibGUgKCkpIHJldHVybjsKLS8vCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5UcmF2ZXJzZTogewkJCi0JCQlzd2l0Y2ggKGV2ZW50LmRldGFpbCkgewotCQkJCWNhc2UgU1dULlRSQVZFUlNFX1JFVFVSTjoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUzoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUOgotCQkJCQkvLyBUaGUgZW50ZXIgY2F1c2VzIGRlZmF1bHQgc2VsZWN0aW9uIGFuZAotCQkJCQkvLyB0aGUgYXJyb3cga2V5cyBhcmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBsaXN0IGNvbnRlbnRzIHNvCi0JCQkJCS8vIGRvIG5vdCB1c2UgdGhlbSBmb3IgdHJhdmVyc2FsLgotCQkJCQlldmVudC5kb2l0ID0gZmFsc2U7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJCi0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuZGV0YWlsID0gZXZlbnQuZGV0YWlsOwotCQkJZS5kb2l0ID0gZXZlbnQuZG9pdDsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlRyYXZlcnNlLCBlKTsKLQkJCWV2ZW50LmRvaXQgPSBlLmRvaXQ7Ci0JCQlldmVudC5kZXRhaWwgPSBlLmRldGFpbDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ29tYm9Cb3hDZWxsRWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlY2Y1YWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Gb2N1c0FkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Gb2N1c0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlRyYXZlcnNlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotLyoKLSAqIFRoaXMgaXMgYSBjb3B5IG9mIENvbWJvQm94Q2VsbEVkaXRvci4KLSAqIFdlIG5lZWQgdG8gYXBwbHkgYW5kIGRlYWN0aXZhdGUgdGhlIGNvbWJvIG9uIGEgc2luZ2xlIGNsaWNrIChub3Qgb24gYSBkb3VibGUgY2xpY2sgbGlrZQotICogdGhlIENvbWJvQm94Q2VsbEVkaXRvcikuCi0gKi8KLXB1YmxpYyBjbGFzcyBBU0RDb21ib0JveENlbGxFZGl0b3IgZXh0ZW5kcyBDZWxsRWRpdG9yIHsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHByZXNlbnQgaW4gdGhlIGNvbWJvIGJveC4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZ1tdIGl0ZW1zOwotCi0gICAgLyoqCi0gICAgICogVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0uCi0gICAgICovCi0gICAgaW50IHNlbGVjdGlvbjsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXN0b20gY29tYm8gYm94IGNvbnRyb2wuCi0gICAgICovCi0gICAgQVNEQ0NvbWJvIGNvbWJvQm94OwotICAgIHByaXZhdGUgT2JqZWN0IHNlbGVjdGVkVmFsdWU7Ci0gICAgcHJpdmF0ZSBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLSAgICBwcml2YXRlIGludCB0ZXh0SW5kZW50ID0gNTsKLQotICAgIC8qKgotICAgICAqIERlZmF1bHQgQ29tYm9Cb3hDZWxsRWRpdG9yIHN0eWxlCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGRlZmF1bHRTdHlsZSA9IFNXVC5OT05FOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjZWxsIGVkaXRvciB3aXRoIGEgY29tYm8gY29udGFpbmluZyB0aGUgZ2l2ZW4gCi0gICAgICogbGlzdCBvZiBjaG9pY2VzIGFuZCBwYXJlbnRlZCB1bmRlciB0aGUgZ2l2ZW4gY29udHJvbC4gVGhlIGNlbGwKLSAgICAgKiBlZGl0b3IgdmFsdWUgaXMgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0uCi0gICAgICogSW5pdGlhbGx5LCB0aGUgY2VsbCBlZGl0b3IgaGFzIG5vIGNlbGwgdmFsaWRhdG9yIGFuZAotICAgICAqIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IGlzIHNlbGVjdGVkLiAKLSAgICAgKgotICAgICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb250cm9sCi0gICAgICogQHBhcmFtIGl0ZW1zIHRoZSBsaXN0IG9mIHN0cmluZ3MgZm9yIHRoZSBjb21ibyBib3gKLSAgICAgKi8KLSAgICBwdWJsaWMgQVNEQ29tYm9Cb3hDZWxsRWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZ1tdIGl0ZW1zLCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlcikgewotICAgICAgICBzdXBlcihwYXJlbnQsIGRlZmF1bHRTdHlsZSk7Ci0gICAgICAgIHNldEl0ZW1zKGl0ZW1zKTsKLSAgICAgICAgY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgPSBlZGl0TWFuYWdlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNob2ljZXMgZm9yIHRoZSBjb21ibyBib3gKLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveAotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbGlzdCBvZiBjaG9pY2VzIGZvciB0aGUgY29tYm8gYm94Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaXRlbXMgdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEl0ZW1zKFN0cmluZ1tdIGl0ZW1zKSB7Ci0gICAgICAgIEFzc2VydC5pc05vdE51bGwoaXRlbXMpOwotICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7Ci0gICAgICAgIHBvcHVsYXRlQ29tYm9Cb3hJdGVtcygpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRUZXh0SW5kZW50KGludCBpbmRlbnQpIHsKLSAgICAJdGV4dEluZGVudCA9IGluZGVudDsKLSAgICAJY29tYm9Cb3guc2V0VGV4dEluZGVudChpbmRlbnQpOwotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBNZXRob2QgZGVjbGFyZWQgb24gQ2VsbEVkaXRvci4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLSAgICAgICAgY29tYm9Cb3ggPSBuZXcgQVNEQ0NvbWJvKHBhcmVudCwgZ2V0U3R5bGUoKSk7Ci0gICAgICAgIGNvbWJvQm94LnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0gICAgICAgIGNvbWJvQm94LnNldFRleHRJbmRlbnQodGV4dEluZGVudCk7Ci0gICAgICAgIAotICAgICAgICBjb21ib0JveC5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5QWRhcHRlcigpIHsKLSAgICAgICAgICAgIC8vIGhvb2sga2V5IHByZXNzZWQgLSBzZWUgUFIgMTQyMDEgIAotICAgICAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKSB7Ci0gICAgICAgICAgICAgICAga2V5UmVsZWFzZU9jY3VyZWQoZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbWJvQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uTWFkZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICAgICAgCXNlbGVjdGlvbk1hZGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29tYm9Cb3guYWRkVHJhdmVyc2VMaXN0ZW5lcihuZXcgVHJhdmVyc2VMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVRyYXZlcnNlZChUcmF2ZXJzZUV2ZW50IGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX0VTQ0FQRQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1JFVFVSTikgewotICAgICAgICAgICAgICAgICAgICBlLmRvaXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbWJvQm94LmFkZEZvY3VzTGlzdGVuZXIobmV3IEZvY3VzQWRhcHRlcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIGZvY3VzTG9zdChGb2N1c0V2ZW50IGUpIHsKLSAgICAgICAgICAgICAgICBBU0RDb21ib0JveENlbGxFZGl0b3IudGhpcy5mb2N1c0xvc3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBjb21ib0JveDsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBPYmplY3QgaW52b2tlRGlhbG9nKElDb21wb25lbnREaWFsb2cgZGlhbG9nKSB7Ci0gIAkgIE9iamVjdCBuZXdWYWx1ZSA9IG51bGw7Ci0gIAkgIAotICAJICBpZiAoZGlhbG9nID09IG51bGwpIHsKLSAgCQkgIHJldHVybiBudWxsOwotICAJICB9Ci0gIAkgIAotICAJICBpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLSAgCQkgIG5ld1ZhbHVlID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0gIAkgIH0KLQotICAJICByZXR1cm4gbmV3VmFsdWU7Ci0gICAgfSAgCi0KLSAgICAvKioKLSAgICAgKiBUaGUgPGNvZGU+Q29tYm9Cb3hDZWxsRWRpdG9yPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAqIHRoaXMgPGNvZGU+Q2VsbEVkaXRvcjwvY29kZT4gZnJhbWV3b3JrIG1ldGhvZCByZXR1cm5zCi0gICAgICogdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gd3JhcHBlZAotICAgICAqICBhcyBhbiA8Y29kZT5JbnRlZ2VyPC9jb2RlPgotICAgICAqLwotICAgIHByb3RlY3RlZCBPYmplY3QgZG9HZXRWYWx1ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHNlbGVjdGlvbik7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIE1ldGhvZCBkZWNsYXJlZCBvbiBDZWxsRWRpdG9yLgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGRvU2V0Rm9jdXMoKSB7Ci0gICAgICAgIGNvbWJvQm94LnNldEZvY3VzKCk7Ci0gICAgICAgIGNvbWJvQm94LmRyb3BEb3duKHRydWUpOwotLy8gICAgICAgIFN0cmluZyBjb21ib1RleHQgPSBjb21ib0JveC5nZXRUZXh0KCk7Ci0vLyAgICAgICAgY29tYm9Cb3guc2V0VGV4dCgiICAgICAgICAgIiArIGNvbWJvVGV4dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIDxjb2RlPkNvbWJvQm94Q2VsbEVkaXRvcjwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YKLSAgICAgKiB0aGlzIDxjb2RlPkNlbGxFZGl0b3I8L2NvZGU+IGZyYW1ld29yayBtZXRob2Qgc2V0cyB0aGUgCi0gICAgICogbWluaW11bSB3aWR0aCBvZiB0aGUgY2VsbC4gIFRoZSBtaW5pbXVtIHdpZHRoIGlzIDEwIGNoYXJhY3RlcnMKLSAgICAgKiBpZiA8Y29kZT5jb21ib0JveDwvY29kZT4gaXMgbm90IDxjb2RlPm51bGw8L2NvZGU+IG9yIDxjb2RlPmRpc3Bvc2VkPC9jb2RlPgotICAgICAqIGVsZXMgaXQgaXMgNjAgcGl4ZWxzIHRvIG1ha2Ugc3VyZSB0aGUgYXJyb3cgYnV0dG9uIGFuZCBzb21lIHRleHQgaXMgdmlzaWJsZS4KLSAgICAgKiBUaGUgbGlzdCBvZiBDQ29tYm8gd2lsbCBiZSB3aWRlIGVub3VnaCB0byBzaG93IGl0cyBsb25nZXN0IGl0ZW0uCi0gICAgICovCi0gICAgcHVibGljIExheW91dERhdGEgZ2V0TGF5b3V0RGF0YSgpIHsKLSAgICAgICAgTGF5b3V0RGF0YSBsYXlvdXREYXRhID0gc3VwZXIuZ2V0TGF5b3V0RGF0YSgpOwotICAgICAgICBpZiAoKGNvbWJvQm94ID09IG51bGwpIHx8IGNvbWJvQm94LmlzRGlzcG9zZWQoKSkKLSAgICAgICAgICAgIGxheW91dERhdGEubWluaW11bVdpZHRoID0gNjA7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gbWFrZSB0aGUgY29tYm9Cb3ggMTAgY2hhcmFjdGVycyB3aWRlCi0gICAgICAgICAgICBHQyBnYyA9IG5ldyBHQyhjb21ib0JveCk7Ci0gICAgICAgICAgICBsYXlvdXREYXRhLm1pbmltdW1XaWR0aCA9IChnYy5nZXRGb250TWV0cmljcygpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRBdmVyYWdlQ2hhcldpZHRoKCkgKiAxMCkgKyAxMDsKLSAgICAgICAgICAgIGdjLmRpc3Bvc2UoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGF5b3V0RGF0YTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgPGNvZGU+Q29tYm9Cb3hDZWxsRWRpdG9yPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAqIHRoaXMgPGNvZGU+Q2VsbEVkaXRvcjwvY29kZT4gZnJhbWV3b3JrIG1ldGhvZAotICAgICAqIGFjY2VwdHMgYSB6ZXJvLWJhc2VkIGluZGV4IG9mIGEgc2VsZWN0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBzZWxlY3Rpb24gd3JhcHBlZAotICAgICAqICAgYXMgYW4gPGNvZGU+SW50ZWdlcjwvY29kZT4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBkb1NldFZhbHVlKE9iamVjdCB2YWx1ZSkgewotICAgICAgICBBc3NlcnQuaXNUcnVlKGNvbWJvQm94ICE9IG51bGwgJiYgKHZhbHVlIGluc3RhbmNlb2YgSW50ZWdlcikpOwotICAgICAgICBzZWxlY3Rpb24gPSAoKEludGVnZXIpIHZhbHVlKS5pbnRWYWx1ZSgpOwotICAgICAgICBjb21ib0JveC5zZWxlY3Qoc2VsZWN0aW9uKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIGNob2ljZXMgZm9yIHRoZSBjb21ibyBib3ggZm9yIHRoZSBjdXJyZW50IGNvbnRyb2wuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlQ29tYm9Cb3hJdGVtcygpIHsKLSAgICAgICAgaWYgKGNvbWJvQm94ICE9IG51bGwgJiYgaXRlbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgY29tYm9Cb3gucmVtb3ZlQWxsKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGNvbWJvQm94LmFkZChpdGVtc1tpXSwgaSk7Ci0KLSAgICAgICAgICAgIHNldFZhbHVlVmFsaWQodHJ1ZSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24gPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQXBwbGllcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZhbHVlIGFuZCBkZWFjdGlhdmF0ZXMgdGhlIGNlbGwgZWRpdG9yCi0gICAgICovCi0gICAgdm9pZCBhcHBseUVkaXRvclZhbHVlQW5kRGVhY3RpdmF0ZSgpIHsKLSAgICAgICAgLy8JbXVzdCBzZXQgdGhlIHNlbGVjdGlvbiBiZWZvcmUgZ2V0dGluZyB2YWx1ZQotICAgICAgICBzZWxlY3Rpb24gPSBjb21ib0JveC5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgICBPYmplY3QgbmV3VmFsdWUgPSBkb0dldFZhbHVlKCk7Ci0gICAgICAgIG1hcmtEaXJ0eSgpOwotICAgICAgICBib29sZWFuIGlzVmFsaWQgPSBpc0NvcnJlY3QobmV3VmFsdWUpOwotICAgICAgICBzZXRWYWx1ZVZhbGlkKGlzVmFsaWQpOwotICAgICAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgICAgIC8vIHRyeSB0byBpbnNlcnQgdGhlIGN1cnJlbnQgdmFsdWUgaW50byB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICAgICAgICAgIHNldEVycm9yTWVzc2FnZShNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRFcnJvck1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsgaXRlbXNbc2VsZWN0aW9uXSB9KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZmlyZUFwcGx5RWRpdG9yVmFsdWUoKTsKLSAgICAgICAgZGVhY3RpdmF0ZSgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvciNmb2N1c0xvc3QoKQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGZvY3VzTG9zdCgpIHsKLSAgICAgICAgaWYgKGlzQWN0aXZhdGVkKCkpIHsKLSAgICAgICAgICAgIGFwcGx5RWRpdG9yVmFsdWVBbmREZWFjdGl2YXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqICAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3Ija2V5UmVsZWFzZU9jY3VyZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudCkKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBrZXlSZWxlYXNlT2NjdXJlZChLZXlFdmVudCBrZXlFdmVudCkgewotICAgICAgICBpZiAoa2V5RXZlbnQuY2hhcmFjdGVyID09ICdcdTAwMWInKSB7IC8vIEVzY2FwZSBjaGFyYWN0ZXIKLSAgICAgICAgICAgIGZpcmVDYW5jZWxFZGl0b3IoKTsKLSAgICAgICAgfSBlbHNlIGlmIChrZXlFdmVudC5jaGFyYWN0ZXIgPT0gJ1x0JykgeyAvLyB0YWIga2V5Ci0gICAgICAgICAgICBhcHBseUVkaXRvclZhbHVlQW5kRGVhY3RpdmF0ZSgpOwotICAgICAgICB9IAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgT2JqZWN0IGdldFNlbGVjdGVkVmFsdWUoKSB7Ci0gICAgCXJldHVybiBzZWxlY3RlZFZhbHVlOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25NYWRlKCkgewotICAgIAlPYmplY3QgbmV3VmFsdWUgPSBudWxsOwotICAgIAlzZWxlY3Rpb24gPSBjb21ib0JveC5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIAlTdHJpbmcgc3RyaW5nU2VsZWN0aW9uID0gaXRlbXNbc2VsZWN0aW9uXTsKLSAgICAJCi0gICAgCWlmIChzdHJpbmdTZWxlY3Rpb24uZXF1YWxzKE1lc3NhZ2VzLl9VSV9CVVRUT05fQlJPV1NFKSkgeyAvLyROT04tTkxTLTEkCi0gICAgCQluZXdWYWx1ZSA9IGludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXRCcm93c2VEaWFsb2coKSk7Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAoc3RyaW5nU2VsZWN0aW9uLmVxdWFscyhNZXNzYWdlcy5fVUlfQlVUVE9OX05FVykpIHsgLy8kTk9OLU5MUy0xJAotICAgIAkJbmV3VmFsdWUgPSBpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCkpOwotICAgIAl9Ci0KLSAgICAJaWYgKG5ld1ZhbHVlID09IG51bGwpIHsKLSAgICAJCWludCBpbmRleCA9IGNvbWJvQm94LmdldFNlbGVjdGlvbkluZGV4KCk7ICAgICAgICAgICAgICAKLSAgICAJCWlmIChpbmRleCAhPSAtMSkgewotICAgIAkJCXNlbGVjdGVkVmFsdWUgPSBjb21ib0JveC5nZXRJdGVtKGluZGV4KTsKLSAgICAJCX0KLSAgICAJfQotICAgIAllbHNlIHsKLSAgICAJCXNlbGVjdGVkVmFsdWUgPSBuZXdWYWx1ZTsKLSAgICAJfQotICAgCQlhcHBseUVkaXRvclZhbHVlQW5kRGVhY3RpdmF0ZSgpOwotICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9Db21ib0JveENlbGxFZGl0b3JNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0NvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5YWM2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0NvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5DZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29tYm9Cb3hDZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNlbGxFZGl0b3JMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIgZXh0ZW5kcyBEaXJlY3RFZGl0TWFuYWdlcgotewotICBwcm90ZWN0ZWQgTGFiZWwgbGFiZWw7Ci0KLSAgcHVibGljIENvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIoR3JhcGhpY2FsRWRpdFBhcnQgc291cmNlLCBMYWJlbCBsYWJlbCkKLSAgewotCSAgc3VwZXIoc291cmNlLCBDb21ib0JveENlbGxFZGl0b3IuY2xhc3MsIG5ldyBJbnRlcm5hbENlbGxFZGl0b3JMb2NhdG9yKGxhYmVsKSk7Ci0gICAgdGhpcy5sYWJlbCA9IGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdENlbGxFZGl0b3IoKSAKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAJU3RyaW5nIGluaXRpYWxMYWJlbFRleHQgPSBsYWJlbC5nZXRUZXh0KCk7ICAgCi0KLSAgICBBU0RDQ29tYm8gY29tYm8gPSAoQVNEQ0NvbWJvKWdldENlbGxFZGl0b3IoKS5nZXRDb250cm9sKCk7Ci0gICAJY29tYm8uc2V0Rm9udChsYWJlbC5nZXRGb250KCkpOwotICAgIGNvbWJvLnNldEZvcmVncm91bmQobGFiZWwuZ2V0Rm9yZWdyb3VuZENvbG9yKCkpOwotICAgIGNvbWJvLnNldEJhY2tncm91bmQobGFiZWwuZ2V0QmFja2dyb3VuZENvbG9yKCkpOwotICAgIGNvbWJvLnNldFZpc2libGVJdGVtQ291bnQoMjApOwotICAgIGNvbWJvLnNldEVkaXRhYmxlKGZhbHNlKTsKLQotICBJQ2VsbEVkaXRvckxpc3RlbmVyIGNlbGxFZGl0b3JMaXN0ZW5lciA9IG5ldyBJQ2VsbEVkaXRvckxpc3RlbmVyKCkKLSAgewotICAgIHB1YmxpYyB2b2lkIGNhbmNlbEVkaXRvcigpCi0gICAgewotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBhcHBseUVkaXRvclZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGVkaXRvclZhbHVlQ2hhbmdlZChib29sZWFuIG9sZCwgYm9vbGVhbiBuZXdTdGF0ZSkKLSAgICB7Ci0gICAgfQotICB9OwotICBnZXRDZWxsRWRpdG9yKCkuYWRkTGlzdGVuZXIoY2VsbEVkaXRvckxpc3RlbmVyKTsKLQotICAgIFN0cmluZ1tdIGl0ZW0gPSBjb21iby5nZXRJdGVtcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaXRlbVtpXS5lcXVhbHMoaW5pdGlhbExhYmVsVGV4dCkpCi0gICAgICB7Ci0JICAgICAgZ2V0Q2VsbEVkaXRvcigpLnNldFZhbHVlKG5ldyBJbnRlZ2VyKGkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSAJCi0gIH0JIAotICAgICAgICAgCi0gIC8vIGhhY2suLi4gZm9yIHNvbWUgcmVhc29uIHRoZSBDb21ib0JveENlbGxFZGl0b3IgZG9lcyd0IGZpcmUgYW4gZWRpdG9yVmFsdWVDaGFuZ2VkIHRvIHNldCB0aGUgZGlydHkgZmxhZwotICAvLyB1bmxlc3Mgd2Ugb3ZlcmlkZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gdHJ1ZSwgdGhlIG1hbmFnZXIgaXMgbm90IG5vdGlmaWVkIG9mIGNoYW5nZXMgbWFkZSBpbiB0aGUgY2VsbCBlZGl0b3IKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNEaXJ0eSgpCi0gIHsKLQkgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvck9uKENvbXBvc2l0ZSBjb21wb3NpdGUpCi0gIHsgCi0gICAgYm9vbGVhbiBpc0xhYmVsVGV4dEluTGlzdCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIExpc3QgbGlzdCA9IGNvbXB1dGVDb21ib0NvbnRlbnQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgU3RyaW5nIHN0cmluZyA9IChTdHJpbmcpaS5uZXh0KCk7Ci0gICAgICBpZiAoc3RyaW5nLmVxdWFscyhsYWJlbC5nZXRUZXh0KCkpKQotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgIGlzTGFiZWxUZXh0SW5MaXN0ID0gdHJ1ZTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gCi0gICAgICAgICAKLSAgICBpZiAoIWlzTGFiZWxUZXh0SW5MaXN0KQotICAgIHsKLSAgICAgIGxpc3QuYWRkKGxhYmVsLmdldFRleHQoKSk7Ci0gICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBMaXN0IHNvcnRlZExpc3QgPSBjb21wdXRlU29ydGVkTGlzdChsaXN0KTsKLSAgICBTdHJpbmdbXSBzdHJpbmdBcnJheSA9IG5ldyBTdHJpbmdbc29ydGVkTGlzdC5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nQXJyYXkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgc3RyaW5nQXJyYXlbaV0gPSAoU3RyaW5nKXNvcnRlZExpc3QuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gY3JlYXRlQ2VsbEVkaXRvcihjb21wb3NpdGUsIHN0cmluZ0FycmF5KTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvcihDb21wb3NpdGUgY29tcG9zaXRlLCBTdHJpbmdbXSBzdHJpbmdBcnJheSkKLSAgewotICAgIHJldHVybiBuZXcgQ29tYm9Cb3hDZWxsRWRpdG9yKGNvbXBvc2l0ZSwgc3RyaW5nQXJyYXkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGNvbXB1dGVTb3J0ZWRMaXN0KExpc3QgbGlzdCkKLSAgewotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IExpc3QgY29tcHV0ZUNvbWJvQ29udGVudCgpOyAKLQotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBwZXJmb3JtTW9kaWZ5KE9iamVjdCB2YWx1ZSk7Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJbnRlcm5hbENlbGxFZGl0b3JMb2NhdG9yIGltcGxlbWVudHMgQ2VsbEVkaXRvckxvY2F0b3IKLSAgewotICAgIHByb3RlY3RlZCBMYWJlbCBsYWJlbDsKLQotICAgIHB1YmxpYyBJbnRlcm5hbENlbGxFZGl0b3JMb2NhdG9yKExhYmVsIGxhYmVsKQotICAgIHsKLSAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKLSAgICB9ICAgICAgICAgICAgICAgICAgIAotCi0gICAgcHVibGljIHZvaWQgcmVsb2NhdGUoQ2VsbEVkaXRvciBjZWxsZWRpdG9yKSAKLSAgICB7Ci0gICAgICAgIEFTRENDb21ibyBjb21ibyA9IChBU0RDQ29tYm8pY2VsbGVkaXRvci5nZXRDb250cm9sKCk7ICAKLQkgICAgUmVjdGFuZ2xlIGxhYmVsUGFyZW50Qm91bmRzID0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotCSAgICBsYWJlbC50cmFuc2xhdGVUb0Fic29sdXRlKGxhYmVsUGFyZW50Qm91bmRzKTsKLQkgICAgCi0JICAgIGludCB4ID0gbGFiZWxQYXJlbnRCb3VuZHMueDsKLQkgICAgaW50IHkgPSBsYWJlbFBhcmVudEJvdW5kcy55OwotCSAgICBpbnQgd2lkdGhLID0gbGFiZWxQYXJlbnRCb3VuZHMud2lkdGg7Ci0JICAgIGludCBoZWlnaHQgPSBsYWJlbFBhcmVudEJvdW5kcy5oZWlnaHQ7Ci0JICAgIGNvbWJvLnNldEJvdW5kcyh4LCB5ICsgMSwgd2lkdGhLLCBoZWlnaHQgLSAyKTsKLSAgICB9Ci0gIH0gCi0gICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybUVkaXQoQ2VsbEVkaXRvciBjZWxsRWRpdG9yKQotICB7Ci0JICBBU0RDb21ib0JveENlbGxFZGl0b3IgY29tYm9DZWxsRWRpdG9yID0gKEFTRENvbWJvQm94Q2VsbEVkaXRvcikgY2VsbEVkaXRvcjsKLQkgIEFTRENDb21ibyBjb21ibyA9IChBU0RDQ29tYm8pZ2V0Q2VsbEVkaXRvcigpLmdldENvbnRyb2woKTsKLQkgIGludCBpbmRleCA9IGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7ICAgICAgICAgICAgICAKLQkgIGlmIChpbmRleCAhPSAtMSkKLQkgIHsKLQkJICBPYmplY3QgdmFsdWUgPSBjb21iby5nZXRJdGVtKGluZGV4KTsKLQkJICBpZiAoY29tYm9DZWxsRWRpdG9yLmdldFNlbGVjdGVkVmFsdWUoKSAhPSBudWxsKSB7Ci0JCQkgIHZhbHVlID0gY29tYm9DZWxsRWRpdG9yLmdldFNlbGVjdGVkVmFsdWUoKTsKLQkJICB9Ci0JCSAgCi0JCSAgcGVyZm9ybU1vZGlmeSh2YWx1ZSk7Ci0JICB9Ci0JICBlbHNlCi0JICB7Ci0JCSAgU3RyaW5nIHR5cGVkVmFsdWUgPSBjb21iby5nZXRUZXh0KCk7CQotCQkgIGlmIChjb21iby5pbmRleE9mKHR5cGVkVmFsdWUpICE9IC0xKQotCQkgIHsJICAgICAgCi0JCQkgIHBlcmZvcm1Nb2RpZnkodHlwZWRWYWx1ZSk7Ci0JCSAgfSAgICAgIAkKLQkJICBlbHNlCi0JCSAgewotCQkJICBTdHJpbmcgY2xvc2VNYXRjaCA9IGdldENsb3NlTWF0Y2godHlwZWRWYWx1ZSwgY29tYm8uZ2V0SXRlbXMoKSk7Ci0JCQkgIGlmIChjbG9zZU1hdGNoICE9IG51bGwpCi0JCQkgIHsKLQkJCQkgIHBlcmZvcm1Nb2RpZnkoY2xvc2VNYXRjaCk7ICAgICAgCQotCQkJICB9Ci0JCQkgIGVsc2UKLQkJCSAgeyAgICAgIAkKLQkJCQkgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmJlZXAoKTsKLQkJCSAgfQotCQkgIH0KLQkgIH0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldENsb3NlTWF0Y2goU3RyaW5nIHZhbHVlLCBTdHJpbmdbXSBpdGVtcykKLSAgewotICAgIGludCBtYXRjaEluZGV4ID0gLTE7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAJU3RyaW5nIGl0ZW0gPSBpdGVtc1tpXTsKLSAgICAJU3RyaW5nIGEgPSBnZXRMb2NhbE5hbWUodmFsdWUpOwotICAgIAlTdHJpbmcgYiA9IGdldExvY2FsTmFtZShpdGVtKTsKLQkJICBpZiAoYS5lcXVhbHNJZ25vcmVDYXNlKGIpKQotCQkgIHsgCi0JCQkgIG1hdGNoSW5kZXggPSBpOwotCQkJICBicmVhazsJCQkJCi0JCSAgfQkgICAgCSAgICAgCi0gICAgfSAgCi0gICAgcmV0dXJuIG1hdGNoSW5kZXggIT0gLTEgPyBpdGVtc1ttYXRjaEluZGV4XSA6IG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0TG9jYWxOYW1lKFN0cmluZyBzdHJpbmcpCi0gIHsKLQkJaW50IGluZGV4ID0gc3RyaW5nLmluZGV4T2YoIjoiKTsgLy8kTk9OLU5MUy0xJAotCSAgcmV0dXJuIChpbmRleCAhPSAtMSkgPyBzdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSkgOiBzdHJpbmc7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9EaXJlY3RFZGl0U2VsZWN0aW9uVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9EaXJlY3RFZGl0U2VsZWN0aW9uVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWI0OWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvRGlyZWN0RWRpdFNlbGVjdGlvblRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlQ2FudmFzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLlNlbGVjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuSU5hbWVkRWRpdFBhcnQ7Ci0KLS8qKgotICogRXh0ZW5kcyB0aGUgZGVmYXVsdCBHRUYgc2VsZWN0aW9uIHRvb2xzIHRvIHNlbmQgdGhlCi0gKiBtb3VzZSBldmVudHMKLSAqLwotcHVibGljIGNsYXNzIERpcmVjdEVkaXRTZWxlY3Rpb25Ub29sIGV4dGVuZHMgU2VsZWN0aW9uVG9vbCB7Ci0JCi0JcHJvdGVjdGVkIElOYW1lZEVkaXRQYXJ0IGdldFNlbGVjdGVkUGFydCgpIHsKLQkJaWYoZ2V0Q3VycmVudFZpZXdlcigpID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJRWRpdFBhcnQgZXAgPSBnZXRDdXJyZW50Vmlld2VyKCkuZ2V0Rm9jdXNFZGl0UGFydCgpOwotCQlpZihlcCBpbnN0YW5jZW9mIElOYW1lZEVkaXRQYXJ0ICYmIGVwLmlzQWN0aXZlKCkpCi0JCQlyZXR1cm4gKElOYW1lZEVkaXRQYXJ0KWVwOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlQnV0dG9uRG93bihpbnQgYnV0dG9uKSB7Ci0JCXN1cGVyLmhhbmRsZUJ1dHRvbkRvd24oYnV0dG9uKTsKLQkJSU5hbWVkRWRpdFBhcnQgc2VsZWN0ZWRQYXJ0ID0gZ2V0U2VsZWN0ZWRQYXJ0KCk7Ci0JCQotCQlpZihzZWxlY3RlZFBhcnQgIT0gbnVsbCAmJiBidXR0b24gPT0gMSkgewotCQkJSW5wdXQgaSA9IGdldEN1cnJlbnRJbnB1dCgpOwotCQkJUG9pbnQgbCA9IHRyYW5zbGF0ZUxvY2F0aW9uKGkuZ2V0TW91c2VMb2NhdGlvbigpKTsKLQkJCQotCQkJSUZpZ3VyZSBmID0gKChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBzZWxlY3RlZFBhcnQpLmdldEZpZ3VyZSgpOwotCQkJUmVjdGFuZ2xlIGJvdW5kcyA9IGYuZ2V0Qm91bmRzKCk7Ci0JCQlpZihib3VuZHMuY29udGFpbnMobC54LGwueSkpIHsKLQkJCQlzZWxlY3RlZFBhcnQucGVyZm9ybURpcmVjdEVkaXQodHJhbnNsYXRlTG9jYXRpb24obmV3IFBvaW50KGwueCwgbC55KSkpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwcm90ZWN0ZWQgUG9pbnQgdHJhbnNsYXRlTG9jYXRpb24oUG9pbnQgbW91c2VMb2NhdGlvbikgewotCQlGaWd1cmVDYW52YXMgY2FudmFzID0gKEZpZ3VyZUNhbnZhcylnZXRDdXJyZW50Vmlld2VyKCkuZ2V0Q29udHJvbCgpOwotCQlQb2ludCB2aWV3TG9jYXRpb24gPSBjYW52YXMuZ2V0Vmlld3BvcnQoKS5nZXRWaWV3TG9jYXRpb24oKTsKLQkJcmV0dXJuIG5ldyBQb2ludChtb3VzZUxvY2F0aW9uLnggKyB2aWV3TG9jYXRpb24ueCxtb3VzZUxvY2F0aW9uLnkgKyB2aWV3TG9jYXRpb24ueSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxDZWxsRWRpdG9yTG9jYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbENlbGxFZGl0b3JMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOTE2NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbENlbGxFZGl0b3JMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5DZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExhYmVsQ2VsbEVkaXRvckxvY2F0b3IgaW1wbGVtZW50cyBDZWxsRWRpdG9yTG9jYXRvciB7Ci0JcHJpdmF0ZSBJTmFtZWRFZGl0UGFydCBuYW1lZEVkaXRQYXJ0OwotCXByaXZhdGUgUG9pbnQgY3Vyc29yTG9jYXRpb247Ci0KLQlwdWJsaWMgTGFiZWxDZWxsRWRpdG9yTG9jYXRvcihJTmFtZWRFZGl0UGFydCBuYW1lZEVkaXRQYXJ0LCBQb2ludCBjdXJzb3JMb2NhdGlvbikgewotCQl0aGlzLm5hbWVkRWRpdFBhcnQgPSBuYW1lZEVkaXRQYXJ0OwotCQl0aGlzLmN1cnNvckxvY2F0aW9uID0gY3Vyc29yTG9jYXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlbG9jYXRlKENlbGxFZGl0b3IgY2VsbGVkaXRvcikgewotCQlUZXh0IHRleHQgPSAoVGV4dCljZWxsZWRpdG9yLmdldENvbnRyb2woKTsKLQkJaWYgKHRleHQuZ2V0Qm91bmRzKCkueCA8PSAwICYmIG5hbWVkRWRpdFBhcnQuZ2V0TGFiZWxGaWd1cmUoKSAhPSBudWxsKSB7Ci0JCQlMYWJlbCBsYWJlbCA9IG5hbWVkRWRpdFBhcnQuZ2V0TGFiZWxGaWd1cmUoKTsKLQkJCVJlY3RhbmdsZSBib3VuZGluZ1JlY3QgPSBsYWJlbC5nZXRUZXh0Qm91bmRzKCk7Ci0KLQkJCS8vIFJlZHVjZSB0aGUgd2lkdGggYnkgdGhlIGFtb3VudCB3ZSBzaGlmdGVkIGFsb25nIHRoZSB4LWF4aXMKLQkJCWludCBkZWx0YSA9IE1hdGguYWJzKGJvdW5kaW5nUmVjdC54IC0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCkueCk7Ci0vLwkJCWJvdW5kaW5nUmVjdC53aWR0aCA9IHRhYmxlQ2VsbEZpZ3VyZS5nZXRQcmVmZXJyZWRTaXplKCkud2lkdGggLSBkZWx0YTsKLQkJCQotCQkJbGFiZWwuZ2V0UGFyZW50KCkudHJhbnNsYXRlVG9BYnNvbHV0ZShib3VuZGluZ1JlY3QpOwotCQkJb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSB0cmltID0gdGV4dC5jb21wdXRlVHJpbSgwLCAwLCAwLCAwKTsKLQkJCWJvdW5kaW5nUmVjdC50cmFuc2xhdGUodHJpbS54LCB0cmltLnkpOwotLy8JCQlib3VuZGluZ1JlY3Qud2lkdGggPSBib3VuZGluZ1JlY3Qud2lkdGggLSB0cmltLng7Ci0JCQlib3VuZGluZ1JlY3QuaGVpZ2h0ID0gYm91bmRpbmdSZWN0LmhlaWdodCAtIHRyaW0ueTsKLQkJCQotCQkJYm91bmRpbmdSZWN0LndpZHRoID0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCkud2lkdGggLSBkZWx0YTsKLQkJCXRleHQuc2V0Qm91bmRzKGJvdW5kaW5nUmVjdC54LCBib3VuZGluZ1JlY3QueSwgYm91bmRpbmdSZWN0LndpZHRoLCBib3VuZGluZ1JlY3QuaGVpZ2h0KTsKLQkJCQotCQkJaWYgKGN1cnNvckxvY2F0aW9uICE9IG51bGwpIHsKLQkJCQkvLyBUcmFuc2xhdGUgcG9pbnQKLQkJCQlQb2ludCB0cmFuc2xhdGVkUG9pbnQgPSBuZXcgUG9pbnQoY3Vyc29yTG9jYXRpb24ueCAtIGJvdW5kaW5nUmVjdC54LGN1cnNvckxvY2F0aW9uLnkgLSBib3VuZGluZ1JlY3QueSk7Ci0KLQkJCQkvLyBDYWxjdWxhdGUgdGV4dCBvZmZzZXQgY29ycmVzcG9uZGluZyB0byB0aGUgdHJhbnNsYXRlZCBwb2ludAotCQkJCXRleHQuc2V0U2VsZWN0aW9uKDAsIDApOwotCQkJCWludCB4Q2FyZXQgPSB0ZXh0LmdldENhcmV0TG9jYXRpb24oKS54OwotCQkJCWludCBvZmZzZXQgPSB0ZXh0LmdldENhcmV0UG9zaXRpb24oKTsKLQkJCQl3aGlsZSAoeENhcmV0IDwgdHJhbnNsYXRlZFBvaW50LngpIHsKLQkJCQkJdGV4dC5zZXRTZWxlY3Rpb24ob2Zmc2V0ICsgMSwgb2Zmc2V0ICsgMSk7CQkJCi0JCQkJCXhDYXJldCA9IHRleHQuZ2V0Q2FyZXRMb2NhdGlvbigpLng7Ci0JCQkJCWludCBuZXdPZmZzZXQgPSB0ZXh0LmdldENhcmV0UG9zaXRpb24oKTsKLQkJCQkJaWYgKG5ld09mZnNldCA9PSBvZmZzZXQpIHsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCW9mZnNldCsrOwotCQkJCX0KLQkJCQl0ZXh0LnNldFNlbGVjdGlvbihvZmZzZXQsIG9mZnNldCk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0xhYmVsRWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTI3NzQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxFZGl0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkNlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UZXh0Q2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuQ2VsbEVkaXRvckFjdGlvbkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExhYmVsRWRpdE1hbmFnZXIgZXh0ZW5kcyBEaXJlY3RFZGl0TWFuYWdlciB7Ci0KLQlwcml2YXRlIElBY3Rpb25CYXJzIGFjdGlvbkJhcnM7Ci0JcHJpdmF0ZSBDZWxsRWRpdG9yQWN0aW9uSGFuZGxlciBhY3Rpb25IYW5kbGVyOwotCXByaXZhdGUgSUFjdGlvbiBjb3B5LCBjdXQsIHBhc3RlLCB1bmRvLCByZWRvLCBmaW5kLCBzZWxlY3RBbGwsIGRlbGV0ZTsKLQlwcml2YXRlIEZvbnQgc2NhbGVkRm9udDsKLQotCXB1YmxpYyBMYWJlbEVkaXRNYW5hZ2VyKEdyYXBoaWNhbEVkaXRQYXJ0IHNvdXJjZSwgQ2VsbEVkaXRvckxvY2F0b3IgbG9jYXRvcikgewotCQlzdXBlcihzb3VyY2UsIG51bGwsIGxvY2F0b3IpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRpcmVjdEVkaXRNYW5hZ2VyI2JyaW5nRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgYnJpbmdEb3duKCkgewotCQlpZiAoYWN0aW9uSGFuZGxlciAhPSBudWxsKSB7Ci0JCQlhY3Rpb25IYW5kbGVyLmRpc3Bvc2UoKTsKLQkJCWFjdGlvbkhhbmRsZXIgPSBudWxsOwotCQl9Ci0JCWlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLQkJCXJlc3RvcmVTYXZlZEFjdGlvbnMoYWN0aW9uQmFycyk7Ci0JCQlhY3Rpb25CYXJzLnVwZGF0ZUFjdGlvbkJhcnMoKTsKLQkJCWFjdGlvbkJhcnMgPSBudWxsOwotCQl9Ci0KLQkJRm9udCBkaXNwb3NlRm9udCA9IHNjYWxlZEZvbnQ7Ci0JCXNjYWxlZEZvbnQgPSBudWxsOwotCQlzdXBlci5icmluZ0Rvd24oKTsKLQkJaWYgKGRpc3Bvc2VGb250ICE9IG51bGwpCi0JCQlkaXNwb3NlRm9udC5kaXNwb3NlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNob3dGZWVkYmFjaygpIHsKLQkJZ2V0RWRpdFBhcnQoKS5zaG93U291cmNlRmVlZGJhY2soZ2V0RGlyZWN0RWRpdFJlcXVlc3QoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvck9uKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKLQkJcmV0dXJuIG5ldyBUZXh0Q2VsbEVkaXRvcihjb21wb3NpdGUsIFNXVC5TSU5HTEUgfCBTV1QuV1JBUCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaW5pdENlbGxFZGl0b3IoKSB7Ci0JCVRleHQgdGV4dCA9IChUZXh0KWdldENlbGxFZGl0b3IoKS5nZXRDb250cm9sKCk7Ci0JCUxhYmVsIGxhYmVsID0gKChJTmFtZWRFZGl0UGFydCkgZ2V0RWRpdFBhcnQoKSkuZ2V0TGFiZWxGaWd1cmUoKTsKLQkJCi0JCWlmIChsYWJlbCAhPSBudWxsKSB7Ci0JCQlzY2FsZWRGb250ID0gbGFiZWwuZ2V0Rm9udCgpOwotCQkJCi0JCQkvLyBUT0RPOiBybWFoOiAgaGFjayBoZXJlIHRvIHNldCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUKLQkJCS8vIGRpcmVjdCBlZGl0IFRleHQuICBTb2x1dGlvbiBpcyB0byBtYWtlIHRoZSBUZXh0IHRyYW5zcGFyZW50Li4uCi0JCQlDb2xvciBjb2xvciA9IGxhYmVsLmdldEJhY2tncm91bmRDb2xvcigpOwotCQkJaWYgKGNvbG9yLmVxdWFscyhEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpKSB7Ci0JCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLQkJCX0KLQkJCWVsc2UgewotLy8JCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKENvbG9yQ29uc3RhbnRzLmxpZ2h0Qmx1ZSk7Ci0JCQkgICAgdGV4dC5zZXRCYWNrZ3JvdW5kKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0QmFja2dyb3VuZENvbG9yKTsKLQkJCX0KLQkJCQotCQkJU3RyaW5nIGluaXRpYWxMYWJlbFRleHQgPSBsYWJlbC5nZXRUZXh0KCk7Ci0JCQlnZXRDZWxsRWRpdG9yKCkuc2V0VmFsdWUoaW5pdGlhbExhYmVsVGV4dCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzY2FsZWRGb250ID0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Rm9udCgpOwotCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKGxhYmVsLmdldFBhcmVudCgpLmdldEJhY2tncm91bmRDb2xvcigpKTsKLQkJfQotCQkKLQkJRm9udERhdGEgZGF0YSA9IHNjYWxlZEZvbnQuZ2V0Rm9udERhdGEoKVswXTsKLQkJRGltZW5zaW9uIGZvbnRTaXplID0gbmV3IERpbWVuc2lvbigwLCBkYXRhLmdldEhlaWdodCgpKTsKLQkJbGFiZWwuZ2V0UGFyZW50KCkudHJhbnNsYXRlVG9BYnNvbHV0ZShmb250U2l6ZSk7Ci0JCWRhdGEuc2V0SGVpZ2h0KGZvbnRTaXplLmhlaWdodCk7Ci0JCXNjYWxlZEZvbnQgPSBuZXcgRm9udChudWxsLCBkYXRhKTsKLQkJCi0JCXRleHQuc2V0Rm9udChzY2FsZWRGb250KTsKLS8vCQl0ZXh0LnNlbGVjdEFsbCgpOwotCi0JCS8vIEhvb2sgdGhlIGNlbGwgZWRpdG9yJ3MgY29weS9wYXN0ZSBhY3Rpb25zIHRvIHRoZSBhY3Rpb25CYXJzIHNvIHRoYXQgdGhleSBjYW4KLQkJLy8gYmUgaW52b2tlZCB2aWEga2V5Ym9hcmQgc2hvcnRjdXRzLgotCQlhY3Rpb25CYXJzID0gQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJzKCk7Ci0JCXNhdmVDdXJyZW50QWN0aW9ucyhhY3Rpb25CYXJzKTsKLQkJYWN0aW9uSGFuZGxlciA9IG5ldyBDZWxsRWRpdG9yQWN0aW9uSGFuZGxlcihhY3Rpb25CYXJzKTsKLQkJYWN0aW9uSGFuZGxlci5hZGRDZWxsRWRpdG9yKGdldENlbGxFZGl0b3IoKSk7Ci0JCWFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXN0b3JlU2F2ZWRBY3Rpb25zKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpewotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5DT1BZLmdldElkKCksIGNvcHkpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5QQVNURS5nZXRJZCgpLCBwYXN0ZSk7Ci0JCWFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkRFTEVURS5nZXRJZCgpLCBkZWxldGUpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5TRUxFQ1RfQUxMLmdldElkKCksIHNlbGVjdEFsbCk7Ci0JCWFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkNVVC5nZXRJZCgpLCBjdXQpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5GSU5ELmdldElkKCksIGZpbmQpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5VTkRPLmdldElkKCksIHVuZG8pOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5SRURPLmdldElkKCksIHJlZG8pOwotCX0KLQotCXByaXZhdGUgdm9pZCBzYXZlQ3VycmVudEFjdGlvbnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQljb3B5ID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuQ09QWS5nZXRJZCgpKTsKLQkJcGFzdGUgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5QQVNURS5nZXRJZCgpKTsKLQkJZGVsZXRlID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuREVMRVRFLmdldElkKCkpOwotCQlzZWxlY3RBbGwgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5TRUxFQ1RfQUxMLmdldElkKCkpOwotCQljdXQgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5DVVQuZ2V0SWQoKSk7Ci0JCWZpbmQgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5GSU5ELmdldElkKCkpOwotCQl1bmRvID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuVU5ETy5nZXRJZCgpKTsKLQkJcmVkbyA9IGFjdGlvbkJhcnMuZ2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LlJFRE8uZ2V0SWQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9UeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZmE5OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9UeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5QYXJhbWV0ZXJUeXBlRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlciBleHRlbmRzIENvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIKLXsKLSAgcHJvdGVjdGVkIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBJUGFyYW1ldGVyIHNldE9iamVjdDsKLSAgCi0gIHB1YmxpYyBUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIoSVBhcmFtZXRlciBwYXJhbWV0ZXIsIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgc291cmNlLCBMYWJlbCBsYWJlbCkKLSAgewotICAgIHN1cGVyKHNvdXJjZSwgbGFiZWwpOwotICAgIGVkaXRQYXJ0ID0gc291cmNlOwotICAgIHNldE9iamVjdCA9IHBhcmFtZXRlcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvck9uKENvbXBvc2l0ZSBjb21wb3NpdGUpCi0gIHsKLQkgIHJldHVybiBzdXBlci5jcmVhdGVDZWxsRWRpdG9yT24oY29tcG9zaXRlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGNvbXB1dGVDb21ib0NvbnRlbnQoKQotICB7Ci0JICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCSAgICBpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkKLQkgICAgewotCSAgICAgICBsaXN0LmFkZChNZXNzYWdlcy5fVUlfQlVUVE9OX0JST1dTRSk7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgbGlzdC5hZGQoTWVzc2FnZXMuX1VJX0JVVFRPTl9ORVcpOyAvLyROT04tTkxTLTEkCi0JICAgICAgIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBxdWlja1BpY2tzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCSAgICAgICBpZiAocXVpY2tQaWNrcyAhPSBudWxsKQotCSAgICAgICB7Ci0JICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgcXVpY2tQaWNrcy5sZW5ndGg7IGkrKykKLQkgICAgICAgICB7Ci0JICAgICAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBxdWlja1BpY2tzW2ldOwotCSAgICAgICAgICAgbGlzdC5hZGQoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpOwotCSAgICAgICAgIH0gIAotCSAgICAgICB9Ci0JICAgICAgIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gZWRpdE1hbmFnZXIuZ2V0SGlzdG9yeSgpOwotCSAgICAgICBpZiAoaGlzdG9yeSAhPSBudWxsKQotCSAgICAgICB7Ci0JICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgaGlzdG9yeS5sZW5ndGg7IGkrKykKLQkgICAgICAgICB7Ci0JICAgICAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBoaXN0b3J5W2ldOwotCSAgICAgICAgICAgbGlzdC5hZGQoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpOwotCSAgICAgICAgIH0gIAotCSAgICAgICB9Ci0JICAgIH0gCi0JICAgIHJldHVybiBsaXN0OyAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1Nb2RpZnkoT2JqZWN0IHZhbHVlKQotICB7Ci0JICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkgICAgaWYgKGVkaXRNYW5hZ2VyID09IG51bGwpCi0JICAgIHsKLQkgICAgICByZXR1cm47Ci0JICAgIH0KLQkgICAgCi0JICAgIC8vIG91ciBjcnVkZSBjb21ibyBib3ggY2FuIG9ubHkgd29yayB3aXRoICdTdHJpbmcnIG9iamVjdHMKLQkgICAgLy8gaWYgd2UgZ2V0IGEgU3RyaW5nIGJhY2sgd2UgbmVlZCB0byBkbyBzb21lIGNsZXZlciBtYXBwaW5nIHRvIGdldCB0aGUgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiAKLQkgICAgLy8gICAgCi0JICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykKLQkgICAgewotCSAgICAgIHZhbHVlID0gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKChTdHJpbmcpdmFsdWUpOyAgICAgCi0JICAgIH0gIAotCSAgICAvLyB3ZSBhc3N1bWUgdGhlIHNlbGVjdGVkIHZhbHVlIGlzIGFsd2F5cyBvZiB0aGUgZm9ybSBvZiBhIENvbXBvbmVudFNwZWNpZmljYXRpb24KLQkgICAgLy8gCi0JICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pICAgICAgCi0JICAgIHsKLQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShnZXRFZGl0UGFydCgpLmdldE1vZGVsKCksIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB2YWx1ZSk7Ci0JICAgIH0KLSAgfSAKLQotICBwcm90ZWN0ZWQgTGlzdCBjb21wdXRlU29ydGVkTGlzdChMaXN0IGxpc3QpCi0gIHsKLS8vICAgIHJldHVybiBUeXBlc0hlbHBlci5zb3J0TGlzdChsaXN0KTsKLQkgIHJldHVybiBsaXN0OwotICB9Ci0gIAotICBwcml2YXRlIGludCBnZXRUZXh0SW5kZW50KCkgewotCSAgaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KSB7Ci0JCSAgUmVjdGFuZ2xlIGJvdW5kcyA9ICgoUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KSBlZGl0UGFydCkuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCk7Ci0JCSAgaW50IHRleHRYID0gKChQYXJhbWV0ZXJUeXBlRWRpdFBhcnQpIGVkaXRQYXJ0KS5nZXRMYWJlbEZpZ3VyZSgpLmdldFRleHRCb3VuZHMoKS54OyAKLQkJICByZXR1cm4gdGV4dFggLSBib3VuZHMueDsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIDU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBDZWxsRWRpdG9yIGNyZWF0ZUNlbGxFZGl0b3IoQ29tcG9zaXRlIGNvbXBvc2l0ZSwgU3RyaW5nW10gc3RyaW5nQXJyYXkpCi0gIHsKLSAgICBBU0RDb21ib0JveENlbGxFZGl0b3IgY2VsbEVkaXRvciA9IG5ldyBBU0RDb21ib0JveENlbGxFZGl0b3IoY29tcG9zaXRlLCBzdHJpbmdBcnJheSwgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSk7Ci0gICAgY2VsbEVkaXRvci5zZXRUZXh0SW5kZW50KGdldFRleHRJbmRlbnQoKSk7Ci0gICAgLy8oKEFEVENvbWJvQm94Q2VsbEVkaXRvcikgY2VsbEVkaXRvcikuc2V0T2JqZWN0VG9Nb2RpZnkoc2V0T2JqZWN0KTsKLSAgICAKLSAgICByZXR1cm4gY2VsbEVkaXRvcjsKLSAgfQotCi0JcHVibGljIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkgewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IG51bGw7Ci0JCWJvb2xlYW4gaXNUeXBlID0gdHJ1ZTsKLQkJCi0JCS8vIFRPRE86IFdlJ3JlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbmQgdXNpbmcgV1NETDExIEltcGwgY2xhc3Nlcy4uLi4gV2Ugc2hvdWxkCi0JCS8vIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gc2VlIGlmIHdlIGNhbiBhdm9pZCBrbm93aW5nIGFib3V0IFdTREwxMSBJbXBsIGNsYXNzZXMuCi0JCWlmIChzZXRPYmplY3QgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQlpc1R5cGUgPSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIHNldE9iamVjdCkuaXNUeXBlKCk7Ci0JCX0KLQkJCi0JCWlmIChpc1R5cGUpIHsgCi0JCQllZGl0TWFuYWdlciA9IChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKHNldE9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQllZGl0TWFuYWdlciA9IChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKHNldE9iamVjdCk7Ci0JCX0KLQotCQlyZXR1cm4gZWRpdE1hbmFnZXI7IAotCX0KLQkKLQkvLyBUT0RPOiBybWFoOiBUaGlzIGNvZGUgc2hvdWxkIGxpdmUgaW4gYSBjb21tb24gcGxhY2UuLi4uLiBUaGlzIGNvZGUgaXMgYWxzbyB1c2VkIGluIG90aGVyIFVJIHNjZW5hcmlvcyB3aGVuCi0JLy8gYSBzaW1pbGFyIGNvbWJvIGJveCBpcyB1c2VkLiAgRm9yIGV4YW1wbGUgaW4gdGhlIHByb3BlcnRpZXMuLi4oUGFyYW1ldGVyU2VjdGlvbikgIEFsc28gdXNlZCBpbiB0aGUgWFNERWRpdG9yLi4uCi0JcHJvdGVjdGVkIENvbXBvbmVudFNwZWNpZmljYXRpb24gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKFN0cmluZyB2YWx1ZSkKLQl7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJaWYgKGVkaXRNYW5hZ2VyICE9IG51bGwpCi0JCXsgIAotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHF1aWNrUGlja3MgPSBlZGl0TWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0JCQlpZiAocXVpY2tQaWNrcyAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaSA8IHF1aWNrUGlja3MubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBxdWlja1BpY2tzW2ldOwotCQkJCQlpZiAodmFsdWUuZXF1YWxzKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIGNvbXBvbmVudFNwZWNpZmljYXRpb247Ci0JCQkJCX0gICAgICAgICAgICAgICAgCi0JCQkJfSAgCi0JCQl9Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gaGlzdG9yeSA9IGVkaXRNYW5hZ2VyLmdldEhpc3RvcnkoKTsKLQkJCWlmIChoaXN0b3J5ICE9IG51bGwpCi0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgaGlzdG9yeS5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbiA9IGhpc3RvcnlbaV07Ci0JCQkJCWlmICh2YWx1ZS5lcXVhbHMoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpKQotCQkJCQl7ICAKLQkJCQkJCXJldHVybiBjb21wb25lbnRTcGVjaWZpY2F0aW9uOwotCQkJCQl9Ci0JCQkJfSAgCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTREVkaXRQYXJ0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTREVkaXRQYXJ0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjY2YjkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BU0RFZGl0UGFydEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQmluZGluZ0NvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBU0RFZGl0UGFydEZhY3RvcnkgaW1wbGVtZW50cyBFZGl0UGFydEZhY3RvcnkKLXsKLSAgcHVibGljIEVkaXRQYXJ0IGNyZWF0ZUVkaXRQYXJ0KEVkaXRQYXJ0IGNvbnRleHQsIE9iamVjdCBtb2RlbCkKLSAgewotICAgIEVkaXRQYXJ0IGNoaWxkID0gbnVsbDsKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgRGVmaW5pdGlvbnNFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKQotICAgIHsKLSAgICAgIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIGNvbGxlY3Rpb24gPSAoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pbW9kZWw7Ci0gICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIEJpbmRpbmdDb2x1bW4pCi0gICAgICB7Ci0gICAgICAgIGNoaWxkID0gbmV3IEJpbmRpbmdDb2x1bW5FZGl0UGFydCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAgCi0gICAgICAgIGNoaWxkID0gbmV3IENvbHVtbkVkaXRQYXJ0KCk7Ci0gICAgICB9ICAKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJRW5kUG9pbnQpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgRW5kUG9pbnRFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElTZXJ2aWNlKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IFNlcnZpY2VFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IEJpbmRpbmdFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nT3BlcmF0aW9uIHx8Ci0gICAgICAgICAgICAgbW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UgfHwKLSAgICAgICAgICAgICBtb2RlbCBpbnN0YW5jZW9mIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgQmluZGluZ0NvbnRlbnRFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElJbnRlcmZhY2UpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgSW50ZXJmYWNlRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICBjaGlsZCA9IG5ldyBNZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IE9wZXJhdGlvbkVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBjb250ZXh0IGluc3RhbmNlb2YgUGFyYW1ldGVyRWRpdFBhcnQpIHsKLSAgICAJY2hpbGQgPSBuZXcgUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBjb250ZXh0IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0KQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IFBhcmFtZXRlckVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGlmIChjaGlsZCA9PSBudWxsKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5Db3VsZCBub3QgY3JlYXRlIGVkaXRwYXJ0IGZvciBtb2RlbDogIiArIG1vZGVsKTsgLy8kTk9OLU5MUy0xJAotICAgICAgVGhyZWFkLmR1bXBTdGFjaygpOwotICAgIH0KLSAgICBBc3NlcnQuaXNOb3ROdWxsKGNoaWxkKTsKLSAgICBjaGlsZC5zZXRNb2RlbChtb2RlbCk7Ci0gICAgcmV0dXJuIGNoaWxkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQVNEUm9vdEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQVNEUm9vdEVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOTQzYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTRFJvb3RFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkJlbmRwb2ludENvbm5lY3Rpb25Sb3V0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbm5lY3Rpb25MYXllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5TY2FsYWJsZVJvb3RFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIEFTRFJvb3RFZGl0UGFydCBleHRlbmRzIFNjYWxhYmxlUm9vdEVkaXRQYXJ0IGltcGxlbWVudHMgb3JnLmVjbGlwc2UuZ2VmLlJvb3RFZGl0UGFydAoteyAgCi0gIHB1YmxpYyB2b2lkIGFjdGl2YXRlKCkKLSAgewotICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgLy8gU2V0IHVwIENvbm5lY3Rpb24gbGF5ZXIgd2l0aCBhIHJvdXRlciwgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGhhdmUgb25lCi0gICAgQ29ubmVjdGlvbkxheWVyIGNvbm5lY3Rpb25MYXllciA9IChDb25uZWN0aW9uTGF5ZXIpIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpOwotICAgIGlmIChjb25uZWN0aW9uTGF5ZXIgIT0gbnVsbCkKLSAgICB7ICAKLS8vICAgICAgY29ubmVjdGlvbkxheWVyLnNldENvbm5lY3Rpb25Sb3V0ZXIobmV3IE1hbmhhdHRhbkNvbm5lY3Rpb25Sb3V0ZXIoKSk7Ci0gICAgICBjb25uZWN0aW9uTGF5ZXIuc2V0Q29ubmVjdGlvblJvdXRlcihuZXcgQmVuZHBvaW50Q29ubmVjdGlvblJvdXRlcigpKTsKLSAgICB9Ci0gICAgcmVmcmVzaCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQWJzdHJhY3RCb3h0RWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BYnN0cmFjdEJveHRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ1YjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BYnN0cmFjdEJveHRFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGluZUJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkRpcmVjdEVkaXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsQ2VsbEVkaXRvckxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJveENvbXBvbmVudEZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuQ29sdW1uRGF0YTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Qm94dEVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSU5hbWVkRWRpdFBhcnQKLXsKLSAgcHJvdGVjdGVkIENvbHVtbkRhdGEgY29sdW1uRGF0YSA9IG5ldyBDb2x1bW5EYXRhKCk7Ci0gIHByb3RlY3RlZCBCb3hDb21wb25lbnRGaWd1cmUgZmlndXJlOwotICAKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIGZpZ3VyZSA9IG5ldyBCb3hDb21wb25lbnRGaWd1cmUoKTsKLSAgICBmaWd1cmUuc2V0Qm9yZGVyKG5ldyBMaW5lQm9yZGVyKDEpKTsKLSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCgpOwotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICAvLyB0b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fQk9UVE9NUklHSFQpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIC8vIGlmKGlzU2Nyb2xsYWJsZSgpKQotICAgIC8vIGZpZ3VyZS5zZXRTY3JvbGxpbmdBY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0KLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGZpZ3VyZS5nZXRDb250ZW50UGFuZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LkRJUkVDVF9FRElUX1JPTEUsIG5ldyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3koKSk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotCi0gIHByaXZhdGUgRGlyZWN0RWRpdE1hbmFnZXIgbWFuYWdlcjsKLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1EaXJlY3RFZGl0KFBvaW50IGN1cnNvckxvY2F0aW9uKXsKLQkgIGlmICghaXNGaWxlUmVhZE9ubHkoKSAmJiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCAgaGl0VGVzdEZpZ3VyZShmaWd1cmUuZ2V0SGVhZGluZ0ZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikgJiYgIWlzUmVhZE9ubHkoKSkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLQkgIH0KLSAgICBlbHNlIGlmICgoaGl0VGVzdChmaWd1cmUuZ2V0TGFiZWwoKSwgY3Vyc29yTG9jYXRpb24pIHx8Ci0gICAgICAgIGhpdFRlc3RGaWd1cmUoZmlndXJlLmdldEhlYWRpbmdGaWd1cmUoKSwgY3Vyc29yTG9jYXRpb24pKSAmJiBpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGRvT3Blbk5ld0VkaXRvcigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXEpIHsKLQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJICBQb2ludCBsb2NhdGlvbiA9IG51bGw7Ci0JCSAgaWYgKHJlcSBpbnN0YW5jZW9mIERpcmVjdEVkaXRSZXF1ZXN0KSB7Ci0JCQkgIGxvY2F0aW9uID0gKChEaXJlY3RFZGl0UmVxdWVzdCkgcmVxKS5nZXRMb2NhdGlvbigpOwkJCSAgCi0JCSAgfQotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KGxvY2F0aW9uKTsKLQkgIH0KLSAgfQotICAKLSAgcHVibGljIExhYmVsIGdldExhYmVsRmlndXJlKCkgewotCSAgcmV0dXJuIGZpZ3VyZS5nZXRMYWJlbCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaENoaWxkcmVuKCkKLSAgewotICAgIHN1cGVyLnJlZnJlc2hDaGlsZHJlbigpOwotICAgIC8vIGdldEZpZ3VyZSgpLmludmFsaWRhdGVUcmVlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICAgIFdTRExCYXNlQWRhcHRlciBib3ggPSAoV1NETEJhc2VBZGFwdGVyKSBnZXRNb2RlbCgpOwotICAgIGZpZ3VyZS5oZWFkaW5nRmlndXJlLnNldElzUmVhZE9ubHkoYm94LmlzUmVhZE9ubHkoKSk7Ci0gICAgZmlndXJlLmdldExhYmVsKCkuc2V0VGV4dChib3guZ2V0TmFtZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkKLSAgewotCSAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMik7Ci0vLwkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0Q29sb3IoQ29sb3JDb25zdGFudHMuZGFya0JsdWUpOwotCSAgZmlndXJlLnNldFNlbGVjdGVkKHRydWUpOwotCSAgZmlndXJlLnJlcGFpbnQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkKLSAgewotCSAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMSk7Ci0JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0Rm9yZWdyb3VuZENvbG9yKTsKLQkgIGZpZ3VyZS5zZXRTZWxlY3RlZChmYWxzZSk7Ci0JICBmaWd1cmUucmVwYWludCgpOwotICB9Ci0KLSAgcHVibGljIENvbHVtbkRhdGEgZ2V0Q29sdW1uRGF0YSgpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uRGF0YTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Jhc2VFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Jhc2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjk4NTZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CYXNlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5BY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuRmlsZVN0b3JlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSUFjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5kZXNpZ24uZWRpdHBvbGljaWVzLktleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3k7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlRWRpdFBhcnQgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGltcGxlbWVudHMgSUFjdGlvblByb3ZpZGVyLCBJQVNET2JqZWN0TGlzdGVuZXIsIElGZWVkYmFja0hhbmRsZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTVBUWV9BQ1RJT05fQVJSQVkgPSB7fTsKLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIElBY3Rpb25Qcm92aWRlcikKLSAgICB7Ci0gICAgICByZXR1cm4gKChJQWN0aW9uUHJvdmlkZXIpbW9kZWwpLmdldEFjdGlvbnMob2JqZWN0KTsKLSAgICB9ICAKLSAgICByZXR1cm4gRU1QVFlfQUNUSU9OX0FSUkFZOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zVG9MaXN0KExpc3QgbGlzdCwgU3RyaW5nW10gYWN0aW9ucykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZChhY3Rpb25zW2ldKTsKLSAgICB9ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICB7Ci0gICAgc3VwZXIuYWN0aXZhdGUoKTsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOyAgICAKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgIHsKLSAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpbW9kZWw7Ci0gICAgICBvYmplY3QucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICB9ICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKQotICB7Ci0gICAgT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgIHsKLSAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpbW9kZWw7Ci0gICAgICBvYmplY3QudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgIH0gICAKLSAgICBzdXBlci5kZWFjdGl2YXRlKCk7Ci0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLSAgewotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJwcm9wZXJ0eUNoYW5nZWQgIiArIHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgIHJlZnJlc2goKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaENvbm5lY3Rpb25zKCkgewotCSAgSXRlcmF0b3Iga2lkcyA9IGdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChraWRzLmhhc05leHQoKSkgewotCQkgIE9iamVjdCBpdGVtID0ga2lkcy5uZXh0KCk7Ci0JCSAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCYXNlRWRpdFBhcnQpIHsKLQkJCSAgKChCYXNlRWRpdFBhcnQpIGl0ZW0pLnJlZnJlc2hDb25uZWN0aW9ucygpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICAKLSAgfQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBoaXRUZXN0KFJlY3RhbmdsZSByZWN0YW5nbGUsIFBvaW50IGxvY2F0aW9uKSB7Ci0JICByZXR1cm4gcmVjdGFuZ2xlLmNvbnRhaW5zKGxvY2F0aW9uKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaGl0VGVzdChMYWJlbCB0YXJnZXQsIFBvaW50IGxvY2F0aW9uKSB7Ci0JICBSZWN0YW5nbGUgb3JpZ0IgPSB0YXJnZXQuZ2V0VGV4dEJvdW5kcygpLmdldENvcHkoKTsKLQkgIFJlY3RhbmdsZSB0cmFuc0IgPSB0YXJnZXQuZ2V0VGV4dEJvdW5kcygpLmdldENvcHkoKTsKLQotCSAgdGFyZ2V0LnRyYW5zbGF0ZVRvQWJzb2x1dGUodHJhbnNCKTsKLQotCSAgaW50IG5ld1ggPSBvcmlnQi54ICsgTWF0aC5hYnModHJhbnNCLnggLSBvcmlnQi54KTsKLQkgIGludCBuZXdZID0gb3JpZ0IueSArIE1hdGguYWJzKHRyYW5zQi55IC0gb3JpZ0IueSk7CSAgCi0JICBSZWN0YW5nbGUgZmluYWxCID0gbmV3IFJlY3RhbmdsZShuZXdYLCBuZXdZLCBvcmlnQi53aWR0aCwgb3JpZ0IuaGVpZ2h0KTsKLQotCSAgcmV0dXJuIGZpbmFsQi5jb250YWlucyhsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGhpdFRlc3RGaWd1cmUoRmlndXJlIHRhcmdldCwgUG9pbnQgbG9jYXRpb24pIHsKLSAgICBSZWN0YW5nbGUgb3JpZ0IgPSB0YXJnZXQuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgIFJlY3RhbmdsZSB0cmFuc0IgPSB0YXJnZXQuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotCi0gICAgdGFyZ2V0LnRyYW5zbGF0ZVRvQWJzb2x1dGUodHJhbnNCKTsKLQotICAgIGludCBuZXdYID0gb3JpZ0IueCArIE1hdGguYWJzKHRyYW5zQi54IC0gb3JpZ0IueCk7Ci0gICAgaW50IG5ld1kgPSBvcmlnQi55ICsgTWF0aC5hYnModHJhbnNCLnkgLSBvcmlnQi55KTsgICAgCi0gICAgUmVjdGFuZ2xlIGZpbmFsQiA9IG5ldyBSZWN0YW5nbGUobmV3WCwgbmV3WSwgb3JpZ0Iud2lkdGgsIG9yaWdCLmhlaWdodCk7Ci0KLSAgICByZXR1cm4gZmluYWxCLmNvbnRhaW5zKGxvY2F0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7Ci0JICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCSAgaWYgKG1vZGVsIGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkgIHJldHVybiAoKElBU0RPYmplY3QpIG1vZGVsKS5pc1JlYWRPbmx5KCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZG9PcGVuTmV3RWRpdG9yKCkKLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBBY3Rpb25SZWdpc3RyeSByZWdpc3RyeSA9IChBY3Rpb25SZWdpc3RyeSkgZWRpdG9yUGFydC5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgICBpZiAocmVnaXN0cnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJQWN0aW9uIGFjdGlvbiA9IHJlZ2lzdHJ5LmdldEFjdGlvbihPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgICAgYWN0aW9uLnJ1bigpOwotICAgIH0KLSAgfQotIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7ICAgICAgCi0gICAgS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeSBuYXZpZ2F0aW9uRWRpdFBvbGljeSA9IG5ldyBLZXlCb2FyZEFjY2Vzc2liaWxpdHlFZGl0UG9saWN5KCkKLSAgICB7ICAgICAgICAgICAKLSAgICAgIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KEVkaXRQYXJ0IGVkaXRQYXJ0LCBpbnQgZGlyZWN0aW9uKQotICAgICAgeyAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIEJhc2VFZGl0UGFydC50aGlzLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsgICAgICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9OwotICAgIGluc3RhbGxFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZLCBuYXZpZ2F0aW9uRWRpdFBvbGljeSk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldFJlbGF0aXZlRWRpdFBhcnQodGhpcywgZGlyZWN0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzRmlsZVJlYWRPbmx5KCkKLSAgewotICAgIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLSAgICBpZiAod29ya2JlbmNoICE9IG51bGwpCi0gICAgewotICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICBpZiAod29ya2JlbmNoV2luZG93ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSUVkaXRvclBhcnQgZWRpdG9yID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgICBpZiAoZWRpdG9yICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoIShlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHBhaW50Rm9jdXNDdXJzb3IoUmVjdGFuZ2xlIHIsIEdyYXBoaWNzIGdyYXBoaWNzKQotICB7Ci0gICAgaWYgKGhhc0ZvY3VzKCkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGdyYXBoaWNzLnB1c2hTdGF0ZSgpOwotICAgICAgICBncmFwaGljcy5kcmF3Rm9jdXMoci54LCByLnkgKyAxLCByLndpZHRoIC0gMSwgci5oZWlnaHQgLSAyKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgZ3JhcGhpY3MucG9wU3RhdGUoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdDb2x1bW5FZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdDb2x1bW5FZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmRkNzNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29sdW1uRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYXlvdXRBbmltYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLkJpbmRpbmdDb2x1bW5MYXlvdXQ7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29sdW1uRWRpdFBhcnQgZXh0ZW5kcyBDb2x1bW5FZGl0UGFydAotewotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKTsKLSAgICAvL2ZpZ3VyZS5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgLy9maWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnllbGxvdyk7Ci0gICAgLy8gY3VzdG9tIGxheW91dCB0aGF0IGNhbiBkbyBhbmltYXRpb24KLSAgICAvLwotICAgIEJpbmRpbmdDb2x1bW5MYXlvdXQgbGF5b3V0ID0gbmV3IEJpbmRpbmdDb2x1bW5MYXlvdXQodGhpcyk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9ICAKLSAKLSAgCi0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWdpc3RlcigpCi0gIHsKLSAgICBzdXBlci5yZWdpc3RlcigpOwotICAgIGdldEZpZ3VyZSgpLmFkZExheW91dExpc3RlbmVyKExheW91dEFuaW1hdG9yLmdldERlZmF1bHQoKSk7ICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCB1bnJlZ2lzdGVyKCkKLSAgewotICAgIGdldEZpZ3VyZSgpLnJlbW92ZUxheW91dExpc3RlbmVyKExheW91dEFuaW1hdG9yLmdldERlZmF1bHQoKSk7ICAgCi0gICAgc3VwZXIudW5yZWdpc3RlcigpOwotICB9Ci0gIAotICAvLyB0aGlzIG1ldGhvZCB3aWxsIGV4cGFuZCB0aGUgYmluZGluZyBlZGl0IHBhcnQKLSAgLy8gYW5kIGNvbGxhcHNlIGFueSBvdGhlciBiaW5kaW5ncyBhcyBhcHByb3ByaWF0ZQotICAvL3B1YmxpYyB2b2lkIGV4cGFuZChCaWRpbmdFZGl0UGFydCBiaW5kaW5nRWRpdFBhcnQpCi0gIC8veyAgICAKLSAgLy99Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoQmluZGluZ0VkaXRQYXJ0cygpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgRWRpdFBhcnQgZWRpdFBhcnQgPSAoRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICBlZGl0UGFydC5yZWZyZXNoKCk7ICAgICAgIAotICAgIH0KLSAgICBnZXRGaWd1cmUoKS5pbnZhbGlkYXRlVHJlZSgpOyAgICAgICAgICAgCi0gICAgZ2V0RmlndXJlKCkucmV2YWxpZGF0ZSgpOyAgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29udGVudEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0NvbnRlbnRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzA1YmQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29udGVudEVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZXByZXNlbnQgYSBCaW5kaW5nT3BlcmF0aW9uLCBCaW5kaW5nSW5wdXQsIEJpbmRpbmdPdXRwdXQgYW5kIEJpbmRpbmdGYXVsdAotLy8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29udGVudEVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0Ci17ICAKLSAgTGFiZWwgbGFiZWw7Ci0gIHByb3RlY3RlZCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5ID0gbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKTsKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBncmFwaGljcykgewotICAgICAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0gICAgICAgIFJlY3RhbmdsZSByID0gZ2V0Qm91bmRzKCk7Ci0gICAgICAgIC8vIGJ1ZzE0NjkzMgotICAgICAgICBwYWludEZvY3VzQ3Vyc29yKG5ldyBSZWN0YW5nbGUoci54LCByLnksIHIud2lkdGgsIHIuaGVpZ2h0KSwgZ3JhcGhpY3MpOwotICAgICAgfQotICAgIH07Ci0gICAgZmlndXJlLnNldE9wYXF1ZSh0cnVlKTsKLSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnRvb2x0aXBCYWNrZ3JvdW5kKTsKLSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKTsKLSAgICB0b29sYmFyTGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgbGFiZWwgPSBuZXcgTGFiZWwoKTsKLSAgICBsYWJlbC5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcig1LCA1LCAyLCAyKSk7Ci0gICAgZmlndXJlLmFkZChsYWJlbCk7Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0gIAotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7Ci0JICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElCaW5kaW5nT3BlcmF0aW9uKQotCSAgeyAgCi0JCSAgSUJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChJQmluZGluZ09wZXJhdGlvbikgZ2V0TW9kZWwoKTsKLQotCQkgIGlmIChiaW5kaW5nT3BlcmF0aW9uIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQkgIGxhYmVsLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGJpbmRpbmdPcGVyYXRpb24pLmdldEltYWdlKCkpOwotCQkgIH0KLS8vCQkgIGxhYmVsLnNldFRleHQoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpOwotCSAgfQotCSAgZWxzZSBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSkKLQkgIHsKLQkJICBsYWJlbC5zZXRJY29uKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYmluZF9hc2N0X3ZhbF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0vLwkJICBsYWJlbC5zZXRJY29uKG1lc3NhZ2VSZWYuZ2V0SW1hZ2UoKSk7Ci0vLwkJICBsYWJlbC5zZXRUZXh0KG1lc3NhZ2VSZWYuZ2V0TmFtZSgpKTsKLQkgIH0KLQkgIGVsc2UgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKSB7Ci0JCSAgbGFiZWwuc2V0SWNvbihXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2JpbmRfYXNjdF92YWxfbm90X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQotCSAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsgICAgCi0gIH0gIAotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkgewotCSAgbGFiZWwuZ2V0UGFyZW50KCkuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy50b29sdGlwQmFja2dyb3VuZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFjMzFmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0VkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxheW91dE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxpbmVCb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9zaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5MYXllckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uY29ubmVjdGlvbnMuQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJveENvbXBvbmVudEZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuQmluZGluZ0NvbHVtbkxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuQmluZGluZ0NvbnRlbnRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLkJpbmRpbmdMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQKLXsKLSAgcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gY29ubmVjdGlvbkZpZ3VyZTsKLSAgcHJvdGVjdGVkIEJveENvbXBvbmVudEZpZ3VyZSBmaWd1cmU7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzRXhwYW5kZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBMYWJlbCBob3ZlckhlbHBMYWJlbCA9IG5ldyBMYWJlbCgiIik7IC8vJE5PTi1OTFMtMSQKLQotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgZmlndXJlID0gbmV3IEJveENvbXBvbmVudEZpZ3VyZSgpOwotICAgIGZpZ3VyZS5nZXRMYWJlbCgpLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDIsIDIsIDEsIDIpKTsKLSAgICBmaWd1cmUuc2V0Qm9yZGVyKG5ldyBMaW5lQm9yZGVyKDApKTsKLSAgICBmaWd1cmUuZ2V0Q29udGVudFBhbmUoKS5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBCaW5kaW5nQ29udGVudExheW91dCh0aGlzKSk7Ci0gICAgZmlndXJlLmdldENvbnRlbnRQYW5lKCkuc2V0T3BhcXVlKHRydWUpOwotICAgIGZpZ3VyZS5nZXRDb250ZW50UGFuZSgpLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy55ZWxsb3cpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBCaW5kaW5nTGF5b3V0KHRoaXMpKTsKLSAgICAvLyBpZihpc1Njcm9sbGFibGUoKSkKLSAgICAvLyBmaWd1cmUuc2V0U2Nyb2xsaW5nQWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotCi0gIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLSAgewotICAgIHJldHVybiBmaWd1cmUuZ2V0Q29udGVudFBhbmUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZykgZ2V0TW9kZWwoKTsgIAotICAgIHJldHVybiBpc0V4cGFuZGVkID8gYmluZGluZy5nZXRCaW5kaW5nQ29udGVudExpc3QoKSA6IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gIHsKLSAgICBzdXBlci5hY3RpdmF0ZSgpOwotICAgIGFjdGl2YXRlQ29ubmVjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGVhY3RpdmF0ZSgpCi0gIHsKLSAgICBzdXBlci5kZWFjdGl2YXRlKCk7Ci0gICAgZGVhY3RpdmF0ZUNvbm5lY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkKLSAgewotICAgIHN1cGVyLmFkZEZlZWRiYWNrKCk7Ci0gICAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLSAgICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldFdpZHRoKDIpOwotLy8gICAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5kYXJrQmx1ZSk7Ci0gICAgZmlndXJlLnNldFNlbGVjdGVkKHRydWUpOwotICAgIGZpZ3VyZS5yZXBhaW50KCk7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodCh0cnVlKTsKLSAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkZFRURCQUNLX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKQotICB7Ci0gICAgc3VwZXIucmVtb3ZlRmVlZGJhY2soKTsKLSAgICBMaW5lQm9yZGVyIGJveEZpZ3VyZUxpbmVCb3JkZXIgPSAoTGluZUJvcmRlcikgZmlndXJlLmdldEJvcmRlcigpOwotICAgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMSk7Ci0gICAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuZGVmYXVsdEZvcmVncm91bmRDb2xvcik7Ci0gICAgZmlndXJlLnNldFNlbGVjdGVkKGZhbHNlKTsKLSAgICBmaWd1cmUucmVwYWludCgpOwotICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpCi0gICAgewotICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQoZmFsc2UpOwotICAgICAgZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuQ09OTkVDVElPTl9MQVlFUikuYWRkKGNvbm5lY3Rpb25GaWd1cmUpOwotICAgIH0KLSAgfQotCi0KLSAgcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVDb25uZWN0aW9uKCkKLSAgewotICAgIC8vIElmIGFwcHJvcHJpYXRlLCBjcmVhdGUgb3VyIGNvbm5lY3Rpb25GaWd1cmUgYW5kIGFkZCBpdCB0byB0aGUgYXBwcm9wcmlhdGUKLSAgICAvLyBsYXllcgotICAgIGlmIChjcmVhdGVDb25uZWN0aW9uRmlndXJlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBBZGQgb3VyIGVkaXRwb2xpY3kgYXMgYSBsaXN0ZW5lciBvbiB0aGUgY29ubmVjdGlvbiwgc28gaXQgY2FuIHN0YXkgaW4KLSAgICAgIC8vIHN5bmNoCi0gICAgICAvLyBjb25uZWN0aW9uRmlndXJlLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKEF0dHJpYnV0ZVNlbGVjdGlvbkZlZWRiYWNrUG9saWN5KQotICAgICAgLy8gZ2V0RWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFKSk7Ci0gICAgICAvLyBjb25uZWN0aW9uRmlndXJlLmFkZE1vdXNlTGlzdGVuZXIodGhpcyk7Ci0gICAgICBnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZGVhY3RpdmF0ZUNvbm5lY3Rpb24oKQotICB7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICAgIHJlbW92ZWQgPSByZW1vdmVDb25uZWN0aW9uRmlndXJlKGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpKTsKLSAgICAgIGlmICghcmVtb3ZlZCkKLSAgICAgIHsKLSAgICAgICAgcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShnZXRMYXllcihMYXllckNvbnN0YW50cy5GRUVEQkFDS19MQVlFUikpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShJRmlndXJlIHBhcmVudCkKLSAgewotICAgIGJvb2xlYW4gY29udGFpbnMgPSBmYWxzZTsKLSAgICBJdGVyYXRvciBpdCA9IHBhcmVudC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJRmlndXJlIGZpZyA9IChJRmlndXJlKSBpdC5uZXh0KCk7Ci0gICAgICBpZiAoZmlnLmVxdWFscyhjb25uZWN0aW9uRmlndXJlKSkKLSAgICAgIHsKLSAgICAgICAgY29udGFpbnMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNvbnRhaW5zKQotICAgIHsKLSAgICAgIHBhcmVudC5yZW1vdmUoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICAgIHJldHVybiBjb250YWluczsKLSAgfQotCi0gIHB1YmxpYyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNyZWF0ZUNvbm5lY3Rpb25GaWd1cmUoKQotICB7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgPT0gbnVsbCAmJiBzaG91bGREcmF3Q29ubmVjdGlvbigpKQotICAgIHsKLSAgICAgIElCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGdldE1vZGVsKCk7Ci0gICAgICBPYmplY3QgdHlwZUJlaW5nUmVmID0gYmluZGluZy5nZXRJbnRlcmZhY2UoKTsKLSAgICAgIGlmICh0eXBlQmVpbmdSZWYgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCByZWZlcmVuY2VUeXBlUGFydCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBnZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KHR5cGVCZWluZ1JlZik7Ci0gICAgICAgIGlmIChyZWZlcmVuY2VUeXBlUGFydCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY29ubmVjdGlvbkZpZ3VyZSA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgcmVmcmVzaENvbm5lY3Rpb25zKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25GaWd1cmU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGREcmF3Q29ubmVjdGlvbigpCi0gIHsKLSAgICBpZiAoaXNFeHBhbmRlZCkKLSAgICB7ICAKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9ICAKLSAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotICAgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotICAgIGlmICh0eXBlQmVpbmdSZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgIGlmIChyZWZlcmVuY2VUeXBlUGFydCAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7Ci0gICAgcmVmcmVzaENvbm5lY3Rpb25zKCk7Ci0gICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJQmluZGluZykKLSAgICB7ICAKLSAgICAgIElCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGdldE1vZGVsKCk7Ci0gICAgICAoKEJveENvbXBvbmVudEZpZ3VyZSkgZ2V0RmlndXJlKCkpLmhlYWRpbmdGaWd1cmUuc2V0SXNSZWFkT25seSgoKElCaW5kaW5nKSBnZXRNb2RlbCgpKS5pc1JlYWRPbmx5KCkpOwotICAgICAgCi0gICAgICBpZiAoYmluZGluZyBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgIAkgIGZpZ3VyZS5nZXRMYWJlbCgpLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGJpbmRpbmcpLmdldEltYWdlKCkpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBTaG93IHRoZSBuYW1lIG9mIHRoZSBJQmluZGluZyB3aXRoIGhvdmVyIGhlbHAKLSAgICAgIFN0cmluZyBwcmVwZW5kU3RyaW5nID0gTWVzc2FnZXMuX1VJX0xBQkVMX0JJTkRJTkc7Ci0gICAgICBob3ZlckhlbHBMYWJlbC5zZXRUZXh0KCIgIiArIHByZXBlbmRTdHJpbmcgKyAiIDogIiArIGJpbmRpbmcuZ2V0TmFtZSgpICsgIiAiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgIGZpZ3VyZS5zZXRUb29sVGlwKGhvdmVySGVscExhYmVsKTsKLSAgICB9Ci0KLSAgICAvL2dldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5wdXQoTGF5LmNsYXNzLCBjb250cm9sbGVyKTsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOyAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0Q29ubmVjdGlvblRhcmdldEVkaXRQYXJ0KCkKLSAgewotICAgIElCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGdldE1vZGVsKCk7Ci0gICAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGJpbmRpbmcuZ2V0SW50ZXJmYWNlKCk7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlUGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hDb25uZWN0aW9ucygpCi0gIHsKLSAgICBpZiAoc2hvdWxkRHJhd0Nvbm5lY3Rpb24oKSkKLSAgICB7Ci0gICAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotICAgICAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGJpbmRpbmcuZ2V0SW50ZXJmYWNlKCk7Ci0gICAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgICAgSUZpZ3VyZSByZWZGaWd1cmU9IHJlZmVyZW5jZVR5cGVQYXJ0LmdldEZpZ3VyZSgpOwotICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFNvdXJjZUFuY2hvcihuZXcgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKGdldEZpZ3VyZSgpLCBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IuUklHSFQsIDApKTsKLSAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRUYXJnZXRBbmNob3IobmV3IENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcihyZWZGaWd1cmUsIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5IRUFERVJfTEVGVCwgMCwgMTEpKTsKLSAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQoZmFsc2UpOwotICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGFjdGl2YXRlQ29ubmVjdGlvbigpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpCi0gICAgewotICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOyAgICAKLSAgICAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0V4cGFuZGVkKCkKLSAgewotICAgIHJldHVybiBpc0V4cGFuZGVkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RXhwYW5kZWQoYm9vbGVhbiBpc0V4cGFuZGVkKQotICB7Ci0gICAgdGhpcy5pc0V4cGFuZGVkID0gaXNFeHBhbmRlZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXF1ZXN0KQotICB7ICAKLSAgICBpZiAocmVxdWVzdC5nZXRUeXBlKCkgPT0gUmVxdWVzdENvbnN0YW50cy5SRVFfT1BFTikKLSAgICB7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgIExheW91dE1hbmFnZXIgbGF5b3V0TWFuYWdlciA9IGdldEZpZ3VyZSgpLmdldFBhcmVudCgpLmdldExheW91dE1hbmFnZXIoKTsKLSAgICAgIGlmIChsYXlvdXRNYW5hZ2VyIGluc3RhbmNlb2YgQmluZGluZ0NvbHVtbkxheW91dCkKLSAgICAgIHsgICAgICAgICAgICAgCi0gICAgICAgIEJpbmRpbmdDb2x1bW5MYXlvdXQgYmluZGluZ0NvbHVtbkxheW91dCA9IChCaW5kaW5nQ29sdW1uTGF5b3V0KWxheW91dE1hbmFnZXI7Ci0gICAgICAgIGJpbmRpbmdDb2x1bW5MYXlvdXQuc2V0RXhwYW5kZWQodGhpcywgIWlzRXhwYW5kZWQpOwotICAgICAgICAoKEJpbmRpbmdDb2x1bW5FZGl0UGFydClnZXRQYXJlbnQoKSkucmVmcmVzaEJpbmRpbmdFZGl0UGFydHMoKTsKLSAgICAgIH0gIAotICAgIH0KLSAgfSAKLSAgCi0gIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0gIHsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLkVBU1QpCi0gICAgewotICAgICAgLy8gbmF2aWdhdGUgZm9yd2FyZCBhbG9uZyB0aGUgY29ubmVjdGlvbiAodG8gdGhlIHJpZ2h0KQotICAgICAgcmV0dXJuIGdldENvbm5lY3Rpb25UYXJnZXRFZGl0UGFydCgpOwotICAgIH0gIAotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5XRVNUKQotICAgIHsKLSAgICAgIC8vIG5hdmlnYXRlIGJhY2t3YXJkIGFsb25nIHRoZSBjb25uZWN0aW9uICh0byB0aGUgbGVmdCkKLSAgICAgIHJldHVybiBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXRTb3VyY2VDb25uZWN0aW9uRWRpdFBhcnQodGhpcyk7Ci0gICAgfSAgICAgIAotICAgIHJldHVybiBzdXBlci5nZXRSZWxhdGl2ZUVkaXRQYXJ0KGRpcmVjdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9Db2x1bW5FZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0NvbHVtbkVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNGJmM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0NvbHVtbkVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIENvbHVtbkVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0Ci17ICAgCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBGaWd1cmUgZmlndXJlID0gbmV3IEZpZ3VyZSgpOwotICAgIFRvb2xiYXJMYXlvdXQgbGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIGxheW91dC5zZXRTdHJldGNoTWlub3JBeGlzKGZhbHNlKTsKLSAgICBsYXlvdXQuc2V0U3BhY2luZygyMCk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICBwdWJsaWMgSURlc2NyaXB0aW9uIGdldERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiAoSURlc2NyaXB0aW9uKWdldE1vZGVsKCk7ICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCXN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgeyAKLSAgICBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiBjb2xsZWN0aW9uID0gKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKWdldE1vZGVsKCk7Ci0gICAgT2JqZWN0IGNoaWxkcmVuW10gPSBjb2xsZWN0aW9uLmdldENoaWxkcmVuKCk7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHsKLSAgICAJbGlzdC5hZGQoY2hpbGRyZW5baW5kZXhdKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkgewotCSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkgewotCSAgCi0gIH0KLX0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9EZWZpbml0aW9uc0VkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRGVmaW5pdGlvbnNFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzIyN2MzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9EZWZpbml0aW9uc0VkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxheW91dExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBhbmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkJpbmRpbmdDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSW50ZXJmYWNlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLlNlcnZpY2VDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBEZWZpbml0aW9uc0VkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IHsKLQkgIExpc3QgY29sbGVjdGlvbnMgPSBudWxsOwotCSAgRmlndXJlIGNvbnRlbnRQYW5lOwotICAgICAgTGFiZWwgbWVzc2FnZUxhYmVsOyAKLSAgICAgIEludGVybmFsTGF5b3V0TGlzdGVuZXIgaW50ZXJuYWxMYXlvdXRMaXN0ZW5lciA9IG5ldyBJbnRlcm5hbExheW91dExpc3RlbmVyKCk7Ci0JICAKLQkgIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0JICB7ICAgIAotCSAgICBQYW5lbCBwYW5lbCA9IG5ldyBQYW5lbCgpOyAgICAKLSAgICAgICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQodHJ1ZSk7Ci0gICAgICAgIHBhbmVsLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgICAgIHBhbmVsLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDYwLCAzMCwgMzAsIDMwKSk7Ci0JICAgIGNvbnRlbnRQYW5lID0gbmV3IEZpZ3VyZSgpOwotCSAgICBwYW5lbC5hZGQoY29udGVudFBhbmUpOwotCi0gICAgICAgIG1lc3NhZ2VMYWJlbCA9IG5ldyBMYWJlbCgiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgY29udGVudFBhbmUuYWRkKG1lc3NhZ2VMYWJlbCk7Ci0gICAgICAKLQkgICAgVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKTsKLQkgICAgbGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0JICAgIGxheW91dC5zZXRTcGFjaW5nKDApOwotCSAgICBjb250ZW50UGFuZS5zZXRMYXlvdXRNYW5hZ2VyKGxheW91dCk7Ci0JICAgIHJldHVybiBwYW5lbDsKLQkgIH0KLQkgIAotICAgICAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICAgICAgewotICAgICAgICBzdXBlci5hY3RpdmF0ZSgpOwotICAgICAgICAKLSAgICAgICAgLy8gaGVyZSB3ZSB3YW50IHRvIGVuc3VyZSB0aGUgYmluZGluZyBjb2x1bW4gaXMgbGlzdGVuaW5nCi0gICAgICAgIC8vIHRvIHRoZSBpbnRlcmZhY2UgY29sdW1uIHNvIHRoYXQgaXQgY2FuIHJlLWxheW91dCB3aGVuIAotICAgICAgICAvLyB0aGUgaW50ZXJmYWNlIGNoYW5nZXMKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBjaGlsZCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KWkubmV4dCgpOwotICAgICAgICAgIGlmIChjaGlsZC5nZXRNb2RlbCgpIGluc3RhbmNlb2YgSW50ZXJmYWNlQ29sdW1uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNoaWxkLmdldEZpZ3VyZSgpLmFkZExheW91dExpc3RlbmVyKGludGVybmFsTGF5b3V0TGlzdGVuZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0gICAgICAgICAgIAotICAgICAgfQotICAgICAgICAgICAgICAgIAotCSAgcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJICBzdXBlci5yZWZyZXNoKCk7Ci0JCSAgCi0JCSAgLy8gUmVmcmVzaCB0aGUgY29ubmVjdGluZyBsaW5lcwotCQkgIHJlZnJlc2hDb25uZWN0aW9ucygpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSUZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0JICB7Ci0JICAgIHJldHVybiBjb250ZW50UGFuZTsKLQkgIH0KLQkgIAotCi0JICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotCSAgewotCSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotCSAgfQotCSAgCi0gICAgICBwdWJsaWMgdm9pZCBzZXRNb2RlbENoaWxkcmVuKExpc3QgbGlzdCkKLSAgICAgIHsKLSAgICAgICAgY29sbGVjdGlvbnMgPSBsaXN0OwotICAgICAgfQotICAgICAgCi0JICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLQkgIHsgCi0JICAgIGlmIChjb2xsZWN0aW9ucyA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgY29sbGVjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgICAgCi0JICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgZ2V0TW9kZWwoKTsKLQkgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLQkgICAgICB7ICAKLQkgICAgICAgIGNvbGxlY3Rpb25zLmFkZChuZXcgU2VydmljZUNvbHVtbihkZXNjcmlwdGlvbikpOwotCSAgICAgICAgY29sbGVjdGlvbnMuYWRkKG5ldyBCaW5kaW5nQ29sdW1uKGRlc2NyaXB0aW9uKSk7Ci0JICAgICAgICBjb2xsZWN0aW9ucy5hZGQobmV3IEludGVyZmFjZUNvbHVtbihkZXNjcmlwdGlvbikpOwotCSAgICAgIH0KLQkgICAgfQotICAgICAgCi0gICAgICBib29sZWFuIGhhc0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBjb2xsZWN0aW9ucy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiBjb2x1bW4gPSAoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24paS5uZXh0KCk7Ci0gICAgICAgIGlmIChjb2x1bW4uaGFzQ2hpbGRyZW4oKSkKLSAgICAgICAgewotICAgICAgICAgIGhhc0NoaWxkcmVuID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoaGFzQ2hpbGRyZW4pCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBpZiAoY29udGVudFBhbmUuZ2V0Q2hpbGRyZW4oKS5jb250YWlucyhtZXNzYWdlTGFiZWwpKQotICAgICAgICAgIGNvbnRlbnRQYW5lLnJlbW92ZShtZXNzYWdlTGFiZWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBtZXNzYWdlTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfUklHSFRfQ0xJQ0tfVE9fSU5TRVJUX0NPTlRFTlQpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmICghY29udGVudFBhbmUuZ2V0Q2hpbGRyZW4oKS5jb250YWlucyhtZXNzYWdlTGFiZWwpKQotICAgICAgICAgIGNvbnRlbnRQYW5lLmFkZChtZXNzYWdlTGFiZWwpOwotICAgICAgfQotICAgICAgCi0KLQkgICAgcmV0dXJuIGNvbGxlY3Rpb25zOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRJbnB1dChPYmplY3Qgb2JqZWN0KQotCSAgeyAgICAKLQkgIH0JIAotICAgICAgCi0gICAgICBwcml2YXRlIGNsYXNzIEludGVybmFsTGF5b3V0TGlzdGVuZXIgZXh0ZW5kcyBMYXlvdXRMaXN0ZW5lci5TdHViCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHBvc3RMYXlvdXQoSUZpZ3VyZSBjb250YWluZXIpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgewotICAgICAgICAgICAgRWRpdFBhcnQgY2hpbGQgPSAoRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBCaW5kaW5nQ29sdW1uRWRpdFBhcnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICgoQmluZGluZ0NvbHVtbkVkaXRQYXJ0KWNoaWxkKS5yZWZyZXNoQmluZGluZ0VkaXRQYXJ0cygpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9ICAgCi0gICAgICB9ICAgICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9FZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZWJkZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29ubmVjdGlvbkFuY2hvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuTGF5ZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uOwotCi0KLWNsYXNzIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsCi17Ci0gIHN0YXRpYyBHcmFwaGljYWxFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KEdyYXBoaWNhbEVkaXRQYXJ0IGZvY3VzRWRpdFBhcnQsIGludCBkaXJlY3Rpb24pCi0gIHsKLSAgICAvLyB0aGVzZSAnZGVsdGEnIHZhbHVlcyBuZWVkIHRvIGJlIHNldCB0byBzb21lIHZhbHVlIHRoYXQncyBsYXJnZSBlbm91Z2ggdG8gY3Jvc3MgdGhlIGdhcAotICAgIC8vIGJldHdlZW4gYWRqYWNlbnQgZWRpdCBwYXJ0cyAoc2luY2Ugc29tZSBsYXlvdXRzIG1heSBzcGFjZSB0aGUgZWRpdCBwYXJ0cyBvdXQgYSBiaXQpCi0gICAgaW50IGR4ID0gNTsKLSAgICBpbnQgZHkgPSA1OwotICAgICAgICAKLSAgICBJRmlndXJlIGNvbnRlbnRQYW5lID0gZm9jdXNFZGl0UGFydC5nZXRDb250ZW50UGFuZSgpOwotICAgIAotICAgIC8vIHdlIGF0dGVtcHQgdG8gY29tcHV0ZSBhIHJlY3RhbmdsZSB0aGF0IHJlcHJlc2VudHMgb3VyIGN1cnJlbnQgbG9jYXRpb24KLSAgICBSZWN0YW5nbGUgciA9IGZvY3VzRWRpdFBhcnQuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgIGZvY3VzRWRpdFBhcnQuZ2V0RmlndXJlKCkudHJhbnNsYXRlVG9BYnNvbHV0ZShyKTsKLSAgICBpZiAoY29udGVudFBhbmUgIT0gZm9jdXNFZGl0UGFydC5nZXRGaWd1cmUoKSkKLSAgICB7Ci0gICAgICAvLyBpZiB0aGUgRWRpdFBhcnQgaGFzIGEgY29udGVudFBhbmUgKHRoYXQncyBubyB0aGUgZmlndXJlKSB0aGVuIHdlIGFzc3VtZQotICAgICAgLy8gZWZmZWN0aXZlIHJlY3RhbmdsZSBpcyBvbmx5IHRoZSBoZWFkZXIgcG9ydGlvbiBvZiB0aGUgZmlndXJlCi0gICAgICAvLwotICAgICAgUmVjdGFuZ2xlIGNvbnRlbnRQYW5lQm91bmRzID0gY29udGVudFBhbmUuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgICAgY29udGVudFBhbmUudHJhbnNsYXRlVG9BYnNvbHV0ZShjb250ZW50UGFuZUJvdW5kcyk7Ci0gICAgICAKLSAgICAgIC8vIHdlIGFzc3VtZSB0aGF0IHdoZW4gdGhlIGVkaXRwYXJ0J3MgZmlndXJlIGFuZCBjb250ZW50UGFuZSBhcmUgZGlmZmVyZW50Ci0gICAgICAvLyB0aGF0IHBvcnRpb24gb2YgdGhlICdoaXR0YWJsZScgcG9ydGlvbiBvZiBlZGl0cGFydCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGNvbnRlbnRQYW5lCi0gICAgICBpZiAoY29udGVudFBhbmVCb3VuZHMueSA+IHIueSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgdGhlIGNvbnRlbnRQYW5lIGlzIGxvd2VyIHRoYW4gdGhlIGZpZ3VyZSB3ZSBvbmx5IHdhbnQgdGhlIHJlY3RhbmdsZQotICAgICAgICAvLyBhYm92ZSB0aGUgY29udGVudFBhbmUKLSAgICAgICAgci5oZWlnaHQgPSBjb250ZW50UGFuZUJvdW5kcy55IC0gci55OwotICAgICAgICAvLyB3ZSBhZGp1c3QgdGhlIHJlY3RhbmdsZSB0aGUgcmlnaHQgc2xpZ2h0bHkgc2luY2UgdGhlIGNvbnRlbnQgaXMgbmVzdGVkIGEgYml0ICAgICAKLSAgICAgICAgci54ID0gY29udGVudFBhbmVCb3VuZHMueDsKLSAgICAgIH0KLSAgICAgIGlmIChjb250ZW50UGFuZUJvdW5kcy54ID4gci54KQotICAgICAgewotICAgICAgICAvLyBpZiB0aGUgY29udGVudFBhbmUgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBmaWd1cmUgd2Ugb25seSB3YW50IHRoZSByZWN0YW5nbGUKLSAgICAgICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGNvbnRlbnQgcGFuZQotICAgICAgICByLndpZHRoID0gY29udGVudFBhbmVCb3VuZHMueCAtIHIueDsKLSAgICAgIH0KLSAgICB9Ci0gICAgUG9pbnQgcCA9IG51bGw7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5OT1JUSCkKLSAgICB7Ci0gICAgICBwID0gci5nZXRUb3BMZWZ0KCk7Ci0gICAgICBwLnkgLT0gZHk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5TT1VUSCkKLSAgICB7Ci0gICAgICBwID0gci5nZXRCb3R0b21MZWZ0KCk7Ci0gICAgICBwLnggKz0gZHg7Ci0gICAgICBwLnkgKz0gZHk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5FQVNUKQotICAgIHsKLSAgICAgIHAgPSByLmdldFRvcFJpZ2h0KCk7Ci0gICAgICBwLnggKz0gZHg7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5XRVNUKQotICAgIHsKLSAgICAgIHAgPSByLmdldExlZnQoKTsKLSAgICAgIHAueCAtPSBkeDsKLSAgICB9ICAKLSAgICBFZGl0UGFydCB0ID0gZm9jdXNFZGl0UGFydC5nZXRWaWV3ZXIoKS5maW5kT2JqZWN0QXQocCk7Ci0gICAgICAgIAotICAgIGlmICh0IGluc3RhbmNlb2YgQ29sdW1uRWRpdFBhcnQgfHwgdCBpbnN0YW5jZW9mIERlZmluaXRpb25zRWRpdFBhcnQpCi0gICAgewotICAgICAgdCA9IGZvY3VzRWRpdFBhcnQ7Ci0gICAgICB3aGlsZSAoKHQgaW5zdGFuY2VvZiBDb2x1bW5FZGl0UGFydCB8fCB0IGluc3RhbmNlb2YgRGVmaW5pdGlvbnNFZGl0UGFydCkgJiYgdC5nZXRDaGlsZHJlbigpLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgCSAgdCA9IChFZGl0UGFydCkgdC5nZXRDaGlsZHJlbigpLmdldCgwKTsKLSAgICAgIH0KLSAgICB9ICAgICAgCi0gICAgcmV0dXJuIChHcmFwaGljYWxFZGl0UGFydCl0OwotICB9Ci0gIAotICBzdGF0aWMgRWRpdFBhcnQgZ2V0TmV4dFNpYmxpbmcoRWRpdFBhcnQgZWRpdFBhcnQpCi0gIHsgICAgCi0gICAgRWRpdFBhcnQgcmVzdWx0ID0gbnVsbDsgICAgCi0gICAgRWRpdFBhcnQgcGFyZW50ID0gZWRpdFBhcnQuZ2V0UGFyZW50KCk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsgIAotICAgICAgTGlzdCBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZHJlbigpOwotICAgICAgaW50IGluZGV4ID0gY2hpbGRyZW4uaW5kZXhPZihlZGl0UGFydCk7Ci0gICAgICBpZiAoaW5kZXggKyAxIDwgY2hpbGRyZW4uc2l6ZSgpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoRWRpdFBhcnQpY2hpbGRyZW4uZ2V0KGluZGV4ICsgMSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHN0YXRpYyBFZGl0UGFydCBnZXRQcmV2U2libGluZyhFZGl0UGFydCBlZGl0UGFydCkKLSAgeyAgICAKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotICAgIEVkaXRQYXJ0IHBhcmVudCA9IGVkaXRQYXJ0LmdldFBhcmVudCgpOwotICAgIGlmIChwYXJlbnQgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIExpc3QgY2hpbGRyZW4gPSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgIGludCBpbmRleCA9IGNoaWxkcmVuLmluZGV4T2YoZWRpdFBhcnQpOwotICAgICAgaWYgKGluZGV4IC0gMSA+PSAwKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjaGlsZAotICAgICAgICAvLyAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IChFZGl0UGFydCljaGlsZHJlbi5nZXQoaW5kZXggLSAxKTsKLSAgICAgIH0gCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gCi0gIAotICBzdGF0aWMgRWRpdFBhcnQgZ2V0TmV4dEludGVyZmFjZShFZGl0UGFydCBlZGl0UGFydCkKLSAgeyAKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoRWRpdFBhcnQgZSA9IGVkaXRQYXJ0OyBlICE9IG51bGw7IGUgPSBlLmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgSW50ZXJmYWNlRWRpdFBhcnQpCi0gICAgICB7Ci0gICAgICAgIEludGVyZmFjZUVkaXRQYXJ0IGllID0gKEludGVyZmFjZUVkaXRQYXJ0KWU7Ci0gICAgICAgIHJlc3VsdCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRTaWJsaW5nKGllKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9ICAKLSAgICB9ICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAgICAgIAotICAKLSAgc3RhdGljIEVkaXRQYXJ0IGdldE5leHRTZXJ2aWNlKEVkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgRWRpdFBhcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEVkaXRQYXJ0IGUgPSBlZGl0UGFydDsgZSAhPSBudWxsOyBlID0gZS5nZXRQYXJlbnQoKSkKLSAgICB7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcnZpY2VFZGl0UGFydCkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUVkaXRQYXJ0IGllID0gKFNlcnZpY2VFZGl0UGFydCllOwotICAgICAgICByZXN1bHQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0U2libGluZyhpZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSAgCi0gICAgfSAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgc3RhdGljIEVkaXRQYXJ0IGdldFNvdXJjZUNvbm5lY3Rpb25FZGl0UGFydChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgLy8gZmluZCB0aGUgZmlyc3QgY29ubmVjdGlvbiB0aGF0IHRhcmdldHMgdGhpcyBlZGl0UGFydAotICAgIC8vIG5hdmlnYXRlIGJhY2t3YXJkIGFsb25nIHRoZSBjb25uZWN0aW9uICh0byB0aGUgbGVmdCkgdG8gZmluZCB0aGUgc291cmMgZWRpdCBwYXJ0Ci0gICAgRWRpdFBhcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBFZGl0UGFydFZpZXdlciB2aWV3ZXIgPSBlZGl0UGFydC5nZXRWaWV3ZXIoKTsKLSAgICBMYXllck1hbmFnZXIgbWFuYWdlciA9IChMYXllck1hbmFnZXIpZWRpdFBhcnQuZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldChMYXllck1hbmFnZXIuSUQpOwotICAgIElGaWd1cmUgbGF5ZXIgPSBtYW5hZ2VyLmdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpOyAgICAKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsYXllci5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgRmlndXJlIGZpZ3VyZSA9IChGaWd1cmUpaS5uZXh0KCk7Ci0gICAgICBpZiAoZmlndXJlIGluc3RhbmNlb2YgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbikKLSAgICAgIHsKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBjb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uID0gKENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24pZmlndXJlOwotICAgICAgICBDb25uZWN0aW9uQW5jaG9yIHRhcmdldEFuY2hvciA9IGNvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uZ2V0VGFyZ2V0QW5jaG9yKCk7Ci0gICAgICAgIGlmICh0YXJnZXRBbmNob3IuZ2V0T3duZXIoKSA9PSBlZGl0UGFydC5nZXRGaWd1cmUoKSkKLSAgICAgICAgeyAgCi0gICAgICAgICAgQ29ubmVjdGlvbkFuY2hvciBzb3VyY2VBbmNob3IgPSBjb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uLmdldFNvdXJjZUFuY2hvcigpOwotICAgICAgICAgIElGaWd1cmUgc291cmNlRmlndXJlID0gc291cmNlQW5jaG9yLmdldE93bmVyKCk7ICAgICAgICAgIAotICAgICAgICAgIEVkaXRQYXJ0IHBhcnQgPSBudWxsOwotICAgICAgICAgIHdoaWxlIChwYXJ0ID09IG51bGwgJiYgc291cmNlRmlndXJlICE9IG51bGwpIAotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnQgPSAoRWRpdFBhcnQpdmlld2VyLmdldFZpc3VhbFBhcnRNYXAoKS5nZXQoc291cmNlRmlndXJlKTsKLSAgICAgICAgICAgIHNvdXJjZUZpZ3VyZSA9IHNvdXJjZUZpZ3VyZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICAgIHJlc3VsdCA9IHBhcnQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gIAotICAgICAgfSAgICAgICAgICAgICAgICAKLSAgICB9ICAgIAotICAgIHJldHVybiByZXN1bHQ7ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRW5kUG9pbnRFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VuZFBvaW50RWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUzYjI3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRW5kUG9pbnRFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmVDYW52YXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5QYW5lbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9zaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlJlY3RhbmdsZUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9ucy5DZW50ZXJlZENvbm5lY3Rpb25BbmNob3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsQ2VsbEVkaXRvckxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkNvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgRW5kUG9pbnRFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydCBpbXBsZW1lbnRzIElGZWVkYmFja0hhbmRsZXIsIElOYW1lZEVkaXRQYXJ0Ci17Ci0gIHByb3RlY3RlZCBMYWJlbCBuYW1lTGFiZWw7Ci0gIHByb3RlY3RlZCBMYWJlbCBhZGRyZXNzTGFiZWw7Ci0gIHByaXZhdGUgTGFiZWwgaG92ZXJIZWxwTGFiZWwgPSBuZXcgTGFiZWwoIiIpOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBGaWd1cmUgYWRkcmVzc0JveEZpZ3VyZTsKLSAgcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gY29ubmVjdGlvbkZpZ3VyZTsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgTUFYX0FERFJFU1NfV0lEVEggPSAxNTA7Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIGZpZ3VyZSA9IG5ldyBQYW5lbCgpIHsKLSAgICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKSB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgICAgUmVjdGFuZ2xlIHIgPSBnZXRCb3VuZHMoKTsKLSAgICAgICAgLy8gYnVnMTQ2OTMyCi0gICAgICAgIHBhaW50Rm9jdXNDdXJzb3IobmV3IFJlY3RhbmdsZShyLngsIHIueSArIDEsIHIud2lkdGgsIHIuaGVpZ2h0IC0gMSksIGdyYXBoaWNzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIGZpZ3VyZS5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcig0KSk7Ci0gICAgVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgLy8gbGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fVE9QTEVGVCk7Ci0gICAgbGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLSAgICBuYW1lTGFiZWwgPSBuZXcgTGFiZWwoKTsKLQotICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0gICAgCW5hbWVMYWJlbC5zZXRJY29uKCgoSVRyZWVFbGVtZW50KSBnZXRNb2RlbCgpKS5nZXRJbWFnZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgbmFtZUxhYmVsLnNldExhYmVsQWxpZ25tZW50KExhYmVsLkxFRlQpOwotICAgIC8vIG5hbWVMYWJlbC5zZXRUZXh0UGxhY2VtZW50KFBvc2l0aW9uQ29uc3RhbnRzLldFU1QpOwotICAgIGZpZ3VyZS5hZGQobmFtZUxhYmVsKTsKLSAgICBGaWd1cmUgZjEgPSBuZXcgRmlndXJlKCk7Ci0gICAgZjEuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMCwgMjAsIDAsIDApKTsKLSAgICBmMS5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBUb29sYmFyTGF5b3V0KCkpOwotICAgIGZpZ3VyZS5hZGQoZjEpOwotICAgIGFkZHJlc3NCb3hGaWd1cmUgPSBuZXcgUmVjdGFuZ2xlRmlndXJlKCk7Ci0gICAgYWRkcmVzc0JveEZpZ3VyZS5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLSAgICBhZGRyZXNzQm94RmlndXJlLnNldExheW91dE1hbmFnZXIobmV3IFRvb2xiYXJMYXlvdXQoKQotICAgIHsKLSAgICAgIC8vIGhlcmUnIHdlIHR3ZWFrIHRoZSBsYXlvdXQgc28gdGhhdCBhZGRyZXNzIGxhYmVscyBhcmVuJ3Qgc2l6ZWQgdG9vIHdpZGUKLSAgICAgIC8vIHRoZSBMYWJlbCBjbGFzcyBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdGhlIGFkZGl0aW9uIG9mIHRoZSAnLi4uJyAKLSAgICAgIC8vCi0gICAgICBwcm90ZWN0ZWQgRGltZW5zaW9uIGNhbGN1bGF0ZVByZWZlcnJlZFNpemUoSUZpZ3VyZSBjb250YWluZXIsIGludCB3SGludCwgaW50IGhIaW50KQotICAgICAgewotICAgICAgICBEaW1lbnNpb24gZCA9IHN1cGVyLmNhbGN1bGF0ZVByZWZlcnJlZFNpemUoY29udGFpbmVyLCB3SGludCwgaEhpbnQpOwotICAgICAgICBkLndpZHRoID0gTWF0aC5taW4oZC53aWR0aCwgTUFYX0FERFJFU1NfV0lEVEgpOwotICAgICAgICByZXR1cm4gZDsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBmMS5hZGQoYWRkcmVzc0JveEZpZ3VyZSk7Ci0gICAgYWRkcmVzc0xhYmVsID0gbmV3IExhYmVsKCk7Ci0KLSAgICBhZGRyZXNzTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0Rm9yZWdyb3VuZENvbG9yKTsKLSAgICBhZGRyZXNzTGFiZWwuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMiwgNiwgMiwgNikpOwotICAgIGFkZHJlc3NMYWJlbC5zZXRMYWJlbEFsaWdubWVudChMYWJlbC5MRUZUKTsKLSAgICBhZGRyZXNzQm94RmlndXJlLmFkZChhZGRyZXNzTGFiZWwpOwotICAgIAotICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0gICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgeyAgCi0gICAgICBuYW1lTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotICAgICAgYWRkcmVzc0xhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICBuYW1lTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5kZWZhdWx0Rm9yZWdyb3VuZENvbG9yKTsKLSAgICAgIGFkZHJlc3NMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotICAgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgbmV3IEFTRExhYmVsRGlyZWN0RWRpdFBvbGljeSgpKTsKLSAgICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotICBwcml2YXRlIERpcmVjdEVkaXRNYW5hZ2VyIG1hbmFnZXI7Ci0gIHByaXZhdGUgUG9pbnQgY3Vyc29yTG9jYXRpb247Ci0KLSAgcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmN1cnNvckxvY2F0aW9uID0gY3Vyc29yTG9jYXRpb247Ci0gICAgaWYgKCFpc1JlYWRPbmx5KCkgJiYgIWlzRmlsZVJlYWRPbmx5KCkgJiYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgaGl0VGVzdChnZXRMYWJlbEZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikpKSB7Ci0gICAgCW1hbmFnZXIgPSBuZXcgTGFiZWxFZGl0TWFuYWdlcih0aGlzLCBuZXcgTGFiZWxDZWxsRWRpdG9yTG9jYXRvcih0aGlzLCBjdXJzb3JMb2NhdGlvbikpOwotICAgIAltYW5hZ2VyLnNob3coKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaGl0VGVzdChnZXRGaWd1cmUoKS5nZXRCb3VuZHMoKSwgY3Vyc29yTG9jYXRpb24pICYmIGlzUmVhZE9ubHkoKSkgewotICAgICAgZG9PcGVuTmV3RWRpdG9yKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCSAgaWYgKHJlcS5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKSkgewotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCSAgfQotICB9Ci0KLSAgcHVibGljIExhYmVsIGdldExhYmVsRmlndXJlKCkKLSAgewotICAgIGlmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IHRyYW5zbGF0ZUJvdW5kcyhuYW1lTGFiZWwuZ2V0Qm91bmRzKCkpLmNvbnRhaW5zKGN1cnNvckxvY2F0aW9uKSkKLSAgICB7Ci0gICAgICByZXR1cm4gbmFtZUxhYmVsOwotICAgIH0KLSAgICBlbHNlIGlmICh0cmFuc2xhdGVCb3VuZHMoYWRkcmVzc0xhYmVsLmdldEJvdW5kcygpKS5jb250YWlucyhjdXJzb3JMb2NhdGlvbikpCi0gICAgewotICAgICAgcmV0dXJuIGFkZHJlc3NMYWJlbDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBSZWN0YW5nbGUgdHJhbnNsYXRlQm91bmRzKFJlY3RhbmdsZSBib3VuZHMpIHsKLQkgIAotCQlBU0RNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yID0gKEFTRE11bHRpUGFnZUVkaXRvcikgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpOwotCQlGaWd1cmVDYW52YXMgY2FudmFzID0gKEZpZ3VyZUNhbnZhcykgKChFZGl0UGFydFZpZXdlcikgZWRpdG9yLmdldEFkYXB0ZXIoR3JhcGhpY2FsVmlld2VyLmNsYXNzKSkuZ2V0Q29udHJvbCgpOwotCQlQb2ludCB2aWV3TG9jYXRpb24gPSBjYW52YXMuZ2V0Vmlld3BvcnQoKS5nZXRWaWV3TG9jYXRpb24oKTsKLQkJCi0JCXJldHVybiBuZXcgUmVjdGFuZ2xlKGJvdW5kcy54ICsgdmlld0xvY2F0aW9uLngsIGJvdW5kcy55ICsgdmlld0xvY2F0aW9uLnksIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgT2JqZWN0IGdldFJlZmVyZW5jZWRNb2RlbCgpCi0gIHsKLSAgICBJRW5kUG9pbnQgZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBnZXRNb2RlbCgpOwotICAgIHJldHVybiBlbmRQb2ludC5nZXRCaW5kaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLSAgICBJRW5kUG9pbnQgZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBnZXRNb2RlbCgpOwotICAgIG5hbWVMYWJlbC5zZXRUZXh0KGVuZFBvaW50LmdldE5hbWUoKSk7Ci0gICAgYWRkcmVzc0xhYmVsLnNldFRleHQoZW5kUG9pbnQuZ2V0QWRkcmVzcygpKTsKLSAgICAKLSAgICBSZWN0YW5nbGUgdGV4dEJvdW5kcyA9IGFkZHJlc3NMYWJlbC5nZXRUZXh0Qm91bmRzKCk7Ci0gICAgUmVjdGFuZ2xlIGJvdW5kcyA9IGFkZHJlc3NMYWJlbC5nZXRCb3VuZHMoKTsKLSAgICBpbnQgdGV4dFBsYWNlbWVudCA9IGFkZHJlc3NMYWJlbC5nZXRUZXh0UGxhY2VtZW50KCk7Ci0gICAgaW50IHhEZWx0YSA9IHRleHRCb3VuZHMueCAtIGJvdW5kcy54OwotICAgIGludCB4VGV4dEluY3JlYXNlID0gdGV4dFBsYWNlbWVudCAtIHhEZWx0YTsKLSAgICBpbnQgdGV4dFNpemUgPSB0ZXh0Qm91bmRzLndpZHRoICsgeFRleHRJbmNyZWFzZTsKLSAgICBpbnQgYm91bmRTaXplID0gYm91bmRzLndpZHRoOwotCi0gICAgaWYgKHRleHRTaXplID4gYm91bmRTaXplKSB7Ci0gICAgCWhvdmVySGVscExhYmVsLnNldFRleHQoIiAiICsgZW5kUG9pbnQuZ2V0QWRkcmVzcygpICArICIgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICBhZGRyZXNzTGFiZWwuc2V0VG9vbFRpcChob3ZlckhlbHBMYWJlbCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBhZGRyZXNzTGFiZWwuc2V0VG9vbFRpcChudWxsKTsKLSAgICB9Ci0KLSAgICByZWZyZXNoQ29ubmVjdGlvbnMoKTsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICB7Ci0gICAgc3VwZXIuYWN0aXZhdGUoKTsKLSAgICBhY3RpdmF0ZUNvbm5lY3Rpb24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGVhY3RpdmF0ZSgpCi0gIHsKLQkgIHN1cGVyLmRlYWN0aXZhdGUoKTsKLQkgIGRlYWN0aXZhdGVDb25uZWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZUNvbm5lY3Rpb24oKQotICB7Ci0gICAgaWYgKGNyZWF0ZUNvbm5lY3Rpb25GaWd1cmUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpLmFkZChjb25uZWN0aW9uRmlndXJlKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBkZWFjdGl2YXRlQ29ubmVjdGlvbigpCi0gIHsKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJvb2xlYW4gcmVtb3ZlZCA9IGZhbHNlOwotICAgICAgcmVtb3ZlZCA9IHJlbW92ZUNvbm5lY3Rpb25GaWd1cmUoZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuQ09OTkVDVElPTl9MQVlFUikpOwotICAgICAgCi0gICAgICBpZiAoIXJlbW92ZWQpIHsKLSAgICAJICByZW1vdmVDb25uZWN0aW9uRmlndXJlKGdldExheWVyKExheWVyQ29uc3RhbnRzLkZFRURCQUNLX0xBWUVSKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShJRmlndXJlIHBhcmVudCkgewotCSAgYm9vbGVhbiBjb250YWlucyA9IGZhbHNlOwotCSAgSXRlcmF0b3IgaXQgPSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOwotCSAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkgIElGaWd1cmUgZmlnID0gKElGaWd1cmUpIGl0Lm5leHQoKTsKLQkJICBpZiAoZmlnLmVxdWFscyhjb25uZWN0aW9uRmlndXJlKSkgewotCQkJICBjb250YWlucyA9IHRydWU7Ci0JCQkgIGJyZWFrOwotCQkgIH0KLQkgIH0KLQkgIAotCSAgaWYgKGNvbnRhaW5zKSB7Ci0JCSAgcGFyZW50LnJlbW92ZShjb25uZWN0aW9uRmlndXJlKTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIGNvbnRhaW5zOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvdWxkRHJhd0Nvbm5lY3Rpb24oKQotICB7Ci0JICBPYmplY3QgdHlwZUJlaW5nUmVmID0gZ2V0UmVmZXJlbmNlZE1vZGVsKCk7Ci0gICAgICBpZiAodHlwZUJlaW5nUmVmICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgcmVmZXJlbmNlVHlwZVBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldCh0eXBlQmVpbmdSZWYpOwotICAgICAgICBpZiAocmVmZXJlbmNlVHlwZVBhcnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAJcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotCi0gIHB1YmxpYyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNyZWF0ZUNvbm5lY3Rpb25GaWd1cmUoKQotICB7Ci0JICBpZiAoY29ubmVjdGlvbkZpZ3VyZSA9PSBudWxsICYmIHNob3VsZERyYXdDb25uZWN0aW9uKCkpCi0JICAgIHsKLQkgICAgICBPYmplY3QgdHlwZUJlaW5nUmVmID0gZ2V0UmVmZXJlbmNlZE1vZGVsKCk7Ci0JICAgICAgaWYgKHR5cGVCZWluZ1JlZiAhPSBudWxsKQotCSAgICAgIHsKLQkgICAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgcmVmZXJlbmNlVHlwZVBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldCh0eXBlQmVpbmdSZWYpOwotCSAgICAgICAgaWYgKHJlZmVyZW5jZVR5cGVQYXJ0ICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIC8vIFdlIGRvIHJlZmVyZW5jZSBhbm90aGVyIFR5cGUuIEJ1aWxkIGEgY29ubmVjdGlvbi4gV2UgY2FuIG1ha2UKLQkgICAgICAgICAgLy8gYXNzdW1wdGlvbnMgYWJvdXQgYW5jaG9yIHBvc2l0aW9uaW5nIHNpbmNlIGFuIGF0dHJpYnV0ZSBjYW4gb25seQotCSAgICAgICAgICAvLyBoYXZlIGEgInJlZmVyZW5jZSIgcmVsYXRpb25zaGlwLCBubyAiaW5oZXJpdGFuY2UiLCBubwotCSAgICAgICAgICAvLyAiaXMtcmVmZXJlbmNlZC1ieSIKLQkgICAgICAgICAgY29ubmVjdGlvbkZpZ3VyZSA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uKCk7Ci0JICAgICAgICAgIHJlZnJlc2hDb25uZWN0aW9ucygpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgICByZXR1cm4gY29ubmVjdGlvbkZpZ3VyZTsKLSAgfQotCi0gIEVkaXRQYXJ0IGdldENvbm5lY3Rpb25UYXJnZXRFZGl0UGFydCgpCi0gIHsKLSAgICBPYmplY3QgdHlwZUJlaW5nUmVmID0gZ2V0UmVmZXJlbmNlZE1vZGVsKCk7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkgewotICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCByZWZlcmVuY2VUeXBlUGFydCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBnZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KHR5cGVCZWluZ1JlZik7Ci0gICAgICByZXR1cm4gcmVmZXJlbmNlVHlwZVBhcnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoQ29ubmVjdGlvbnMoKSB7Ci0JICBpZiAoc2hvdWxkRHJhd0Nvbm5lY3Rpb24oKSkgewotCQkgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBnZXRSZWZlcmVuY2VkTW9kZWwoKTsKLQkJICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKSB7Ci0JCQkgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgcmVmZXJlbmNlVHlwZVBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldCh0eXBlQmVpbmdSZWYpOwotCSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFNvdXJjZUFuY2hvcihuZXcgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKGFkZHJlc3NCb3hGaWd1cmUsIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5SSUdIVCwgMCwgMCkpOwotCSAgICAgICAgICBJRmlndXJlIHRhcmdldEZpZ3VyZSA9IHJlZmVyZW5jZVR5cGVQYXJ0LmdldEZpZ3VyZSgpOwotCSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFRhcmdldEFuY2hvcihuZXcgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKHRhcmdldEZpZ3VyZSwgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLkhFQURFUl9MRUZULCAwLCAxMCkpOwotCSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodChmYWxzZSk7Ci0JICAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VmlzaWJsZSh0cnVlKTsKLQkJICB9Ci0JCSAgZWxzZSB7Ci0JCQkgIGFjdGl2YXRlQ29ubmVjdGlvbigpOwotCQkgIH0KLQkgIH0KLQkgIGVsc2UgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCl7Ci0JCSAgY29ubmVjdGlvbkZpZ3VyZS5zZXRWaXNpYmxlKGZhbHNlKTsKLQkgIH0KLSAgfQotCi0gIHByaXZhdGUgSUZpZ3VyZSBnZXRGaWd1cmVGb3JGZWVkYmFjaygpCi0gIHsKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKQotICB7Ci0gICAgSUZpZ3VyZSBmaWd1cmUgPSBnZXRGaWd1cmVGb3JGZWVkYmFjaygpOwotICAgIGZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLSAgICAKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKSB7Ci0gICAgCWNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KHRydWUpOwotICAgIAlnZXRMYXllcihMYXllckNvbnN0YW50cy5GRUVEQkFDS19MQVlFUikuYWRkKGNvbm5lY3Rpb25GaWd1cmUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkKLSAgewotICAgIElGaWd1cmUgZmlndXJlID0gZ2V0RmlndXJlRm9yRmVlZGJhY2soKTsKLSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKGZpZ3VyZS5nZXRQYXJlbnQoKS5nZXRCYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgCi0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkgewotICAgIAljb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodChmYWxzZSk7Ci0gICAgCWdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpLmFkZChjb25uZWN0aW9uRmlndXJlKTsKLSAgICB9Ci0gIH0KLQotICAvLyBUT0RPOiBybWFoOiBWRVJZIFVHTFkgSEFDSy4uLi4gSSBkb24ndCBzZWUgYW55IG90aGVyIHdheSB0byBzb2x2ZSB0aGlzCi0gIC8vIGlzc3VlIGF0IHRoaXMgdGltZS4KLSAgLy8gRW5kUG9pbnRFZGl0UGFydCBjb250YWlucyB0d28gbGFiZWxzIHdoaWNoIGNhbiBiZSBkaXJlY3QgZWRpdGVkLiBUaGUgZmFjYWRlCi0gIC8vIGRyaXZpbmcgRW5kUG9pbnRFZGl0UGFydAotICAvLyBjb250YWlucyBhIGdldFNldE5hbWVDb21tYW5kKCkgYW5kIGEgZ2V0U2V0QWRkcmVzc0NvbW1hbmQoKS4uLiBob3dldmVyLAotICAvLyB0aGlzIGNsYXNzIChMYWJlbERpcmVjdEVkaXRQb2xpY3kpCi0gIC8vIG9ubHkga25vd3MgYWJvdXQgZ2V0U2V0TmFtZUNvbW1hbmQoKS4uLi4uIFRoaXMgaXMgdGhlIHByb2JsZW0gd2UgZmFjZSB3aGVuCi0gIC8vIGNvbWJpbmluZyB0d28gbGFiZWxzIGludG8KLSAgLy8gb25lIEVkaXRQYXJ0Li4uLi4KLSAgLy8gU2VlIExhYmVsRGlyZWN0RWRpdFBvbGljeS5nZXREaXJlY3RFZGl0Q29tbWFuZChEaXJlY3RFZGl0UmVxdWVzdCkKLSAgcHVibGljIENvbW1hbmQgZ2V0U2V0UHJvcGVyTGFiZWxDb21tYW5kKFN0cmluZyBuZXdWYWx1ZSkKLSAgewotICAgIC8vIFRPRE86IHJtYWg6IFdlIG5lZWQgdG8gdHJhbnNsYXRlIHRoZSBwb2ludC4uLgotICAgIGlmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IHRyYW5zbGF0ZUJvdW5kcyhuYW1lTGFiZWwuZ2V0Qm91bmRzKCkpLmNvbnRhaW5zKGN1cnNvckxvY2F0aW9uKSkKLSAgICB7Ci0gICAgICByZXR1cm4gKChJRW5kUG9pbnQpIGdldE1vZGVsKCkpLmdldFNldE5hbWVDb21tYW5kKG5ld1ZhbHVlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHJhbnNsYXRlQm91bmRzKGFkZHJlc3NMYWJlbC5nZXRCb3VuZHMoKSkuY29udGFpbnMoY3Vyc29yTG9jYXRpb24pKQotICAgIHsKLSAgICAgIHJldHVybiAoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSkuZ2V0U2V0QWRkcmVzc0NvbW1hbmQobmV3VmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIEVkaXRQYXJ0IGdldFJlbGF0aXZlRWRpdFBhcnQoaW50IGRpcmVjdGlvbikKLSAgewotICAgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuRUFTVCkKLSAgICB7ICAgICAgCi0gICAgICAvLyBuYXZpZ2F0ZSBmb3J3YXJkIGFsb25nIHRoZSBjb25uZWN0aW9uICh0byB0aGUgcmlnaHQpCi0gICAgICByZXR1cm4gZ2V0Q29ubmVjdGlvblRhcmdldEVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIAotICAgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEgpCi0gICAgewotICAgIAlyZXR1cm4gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0TmV4dFNlcnZpY2UodGhpcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSUZlZWRiYWNrSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lGZWVkYmFja0hhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMwNTM2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSUZlZWRiYWNrSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGZWVkYmFja0hhbmRsZXIgewotCXB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCk7Ci0JcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JTmFtZWRFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lOYW1lZEVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNmRlM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lOYW1lZEVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElOYW1lZEVkaXRQYXJ0IHsKLQlwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKTsKLQlwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSW50ZXJmYWNlRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JbnRlcmZhY2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDU5NWVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JbnRlcmZhY2VFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MaW5lQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUmVjdGFuZ2xlRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Cb3hDb21wb25lbnRGaWd1cmU7Ci0vL2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQmFzZUxpbmtJY29uRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cy5Sb3dMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEludGVyZmFjZUVkaXRQYXJ0IGV4dGVuZHMgQWJzdHJhY3RCb3h0RWRpdFBhcnQgaW1wbGVtZW50cyBJRmVlZGJhY2tIYW5kbGVyCi17Ci0JcHJpdmF0ZSBSZWN0YW5nbGVGaWd1cmUgbGlua0ljb25Db2x1bW47Ci0JcHJvdGVjdGVkIEJveENvbXBvbmVudEZpZ3VyZSBib3hGaWd1cmU7Ci0gIHB1YmxpYyBJbnRlcmZhY2VFZGl0UGFydCgpCi0gIHsKLSAgICBjb2x1bW5EYXRhLnNldENvbHVtbldlaWdodCgiTWVzc2FnZUxhYmVsIiwgMCk7IC8vJE5PTi1OTFMtMSQKLSAgICBjb2x1bW5EYXRhLnNldENvbHVtbldlaWdodCgiTWVzc2FnZUNvbnRlbnRQYW5lIiwgMTAwKTsgLy8kTk9OLU5MUy0xJAotICAgIGNvbHVtbkRhdGEuc2V0Q29sdW1uV2VpZ2h0KCJwYXJhbWV0ZXJOYW1lIiwgNTApOyAvLyROT04tTkxTLTEkCi0gICAgY29sdW1uRGF0YS5zZXRDb2x1bW5XZWlnaHQoInBhcmFtZXRlclR5cGUiLCA1MCk7ICAgICAgICAgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0JCUlGaWd1cmUgb3V0ZXIgPSBuZXcgRmlndXJlKCkgewotCQkJcHVibGljIHZvaWQgdmFsaWRhdGUoKSB7Ci0JCQkJc3VwZXIudmFsaWRhdGUoKTsKLQkJCQkvLyBJZiB3ZSBkb24ndCBsYXlvdXQgb3VyIExpbmsgSWNvbiBDb2x1bW4gYXQgdGhpcyBwb2ludCwgdGhlIGxpbmsgaWNvbnMKLQkJCQkvLyB3aWxsIG5vdCBiZSBwcm9wZXJseSB1cGRhdGVkIGluIHRoZSBzY2VuYXJpbyB3aGVyZSBhIHBvcnR0eXBlIGlzIGFkZGVkCi0JCQkJLy8gb3IgcmVtb3ZlZC4gIFRoZSBsaW5rIGljb25zIG9mIHRoZSBleGlzdGluZyBwb3J0dHlwZXMgd2lsbCBub3QgYmUgdXBkYXRlZC4KLQkJCQlnZXRMaW5rSWNvbkNvbHVtbigpLmdldExheW91dE1hbmFnZXIoKS5sYXlvdXQoZ2V0TGlua0ljb25Db2x1bW4oKSk7Ci0JCQl9Ci0JCX07Ci0JCQotCQlvdXRlci5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBUb29sYmFyTGF5b3V0KHRydWUpKTsKLQkgICAgYm94RmlndXJlID0gKEJveENvbXBvbmVudEZpZ3VyZSkgc3VwZXIuY3JlYXRlRmlndXJlKCk7Ci0JICAgIAotCSAgICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotCSAgICAJYm94RmlndXJlLmdldExhYmVsKCkuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgZ2V0TW9kZWwoKSkuZ2V0SW1hZ2UoKSk7CQotCSAgICB9Ci0JICAgIAotCSAgICBib3hGaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLm9yYW5nZSk7Ci0JICAgIGJveEZpZ3VyZS5zZXRCb3JkZXIobmV3IExpbmVCb3JkZXIoMSkpOwotCSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0JICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLQkgICAgYm94RmlndXJlLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0JICAgIG91dGVyLmFkZChib3hGaWd1cmUpOwotCSAgICBsaW5rSWNvbkNvbHVtbiA9IG5ldyBSZWN0YW5nbGVGaWd1cmUoKTsKLQkgICAgbGlua0ljb25Db2x1bW4uc2V0T3V0bGluZShmYWxzZSk7Ci0JICAgIGxpbmtJY29uQ29sdW1uLnNldExheW91dE1hbmFnZXIobmV3IFRvb2xiYXJMYXlvdXQoKSB7Ci0JCQlwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpIHsKLQkJCQlzdXBlci5sYXlvdXQocGFyZW50KTsKLQkJCQkKLQkJCQkvLyBXZSBuZWVkIHRvIGxheW91dCBvbiB0aGUgeS1heGlzCi0JCQkJSXRlcmF0b3IgY2hpbGRyZW4gPSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChjaGlsZHJlbi5oYXNOZXh0KCkpIHsKLQkJCQkJT2JqZWN0IGl0ZW0gPSBjaGlsZHJlbi5uZXh0KCk7Ci0JCQkJCWlmIChpdGVtIGluc3RhbmNlb2YgSUZpZ3VyZSkgewotCQkJCQkJSUZpZ3VyZSBmaWd1cmUgPSAoSUZpZ3VyZSkgaXRlbTsKLQkJCQkJCWZpZ3VyZS5nZXRMYXlvdXRNYW5hZ2VyKCkubGF5b3V0KGZpZ3VyZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCXByb3RlY3RlZCBEaW1lbnNpb24gY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShJRmlndXJlIGNvbnRhaW5lciwgaW50IHdIaW50LCBpbnQgaEhpbnQpIHsKLQkJCQlEaW1lbnNpb24gZGltZW5zaW9uID0gc3VwZXIuY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShjb250YWluZXIsIHdIaW50LCBoSGludCk7Ci0JCQkJCi0JCQkJLy8gQ2FsY3VsYXRlIHRoZSBoZWlnaHQKLQkJCQlJdGVyYXRvciBpdCA9IGNvbnRhaW5lci5nZXRQYXJlbnQoKS5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCQlPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKLQkJCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBCb3hDb21wb25lbnRGaWd1cmUpIHsKLQkJCQkJCWRpbWVuc2lvbi5oZWlnaHQgPSAoKElGaWd1cmUpIGl0ZW0pLmdldFByZWZlcnJlZFNpemUoKS5oZWlnaHQ7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQotCQkJCXJldHVybiBkaW1lbnNpb247Ci0JCQl9Ci0JICAgIH0pOwotCSAgICAKLQkgICAgb3V0ZXIuYWRkKGxpbmtJY29uQ29sdW1uKTsKLQkgICAgCi0JICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0JICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0JICAgIC8vIEVkaXRQYXJ0IGhhcyBiZWVuIGNyZWF0ZWQuCi0JICAgIGlmIChpc1JlYWRPbmx5KCkpIAotCSAgICB7Ci0JICAgIAlmaWd1cmUuZ2V0TGFiZWwoKS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JICAgIAlmaWd1cmUuZ2V0TGFiZWwoKS5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotCSAgICB9Ci0JICAgIAotCSAgICByZXR1cm4gb3V0ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhdHRhY2hUb0ludGVyZmFjZUVkaXRQYXJ0KEVkaXRQYXJ0IGVkaXRQYXJ0LCBSb3dMYXlvdXQgcm93TGF5b3V0KQotICB7Ci0gICAgZm9yIChFZGl0UGFydCBwYXJlbnQgPSBlZGl0UGFydC5nZXRQYXJlbnQoKTsgcGFyZW50ICE9IG51bGw7IHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKSkKLSAgICB7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSW50ZXJmYWNlRWRpdFBhcnQpCi0gICAgICB7Ci0gICAgICAgIEludGVyZmFjZUVkaXRQYXJ0IGludGVyZmFjZUVkaXRQYXJ0ID0gKEludGVyZmFjZUVkaXRQYXJ0KXBhcmVudDsKLSAgICAgICAgcm93TGF5b3V0LnNldENvbHVtbkRhdGEoaW50ZXJmYWNlRWRpdFBhcnQuY29sdW1uRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSAgCi0gICAgfSAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaENoaWxkcmVuKCkKLSAgewotICAgIHN1cGVyLnJlZnJlc2hDaGlsZHJlbigpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICBJSW50ZXJmYWNlIHRoZUludGVyZmFjZSA9IChJSW50ZXJmYWNlKWdldE1vZGVsKCk7Ci0gICAgcmV0dXJuIHRoZUludGVyZmFjZS5nZXRPcGVyYXRpb25zKCk7ICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkgewotCSAgc3VwZXIuYWRkRmVlZGJhY2soKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkgewotCSAgc3VwZXIucmVtb3ZlRmVlZGJhY2soKTsKLSAgfQotCi0gIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0gIHsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLldFU1QpCi0gICAgewotICAgICAgcmV0dXJuIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldFNvdXJjZUNvbm5lY3Rpb25FZGl0UGFydCh0aGlzKTsgICAgIAotICAgIH0gIAotICAgIHJldHVybiBzdXBlci5nZXRSZWxhdGl2ZUVkaXRQYXJ0KGRpcmVjdGlvbik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRmlndXJlIGdldExpbmtJY29uQ29sdW1uKCkgewotCSAgcmV0dXJuIGxpbmtJY29uQ29sdW1uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMDVlNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL01lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRHJhZ1RyYWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0REcmFnQW5kRHJvcEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuTGlzdEZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuTW9kZWxEaWFnbm9zdGljSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSUZlZWRiYWNrSGFuZGxlcgoteyAgIAotICBwcm90ZWN0ZWQgRmlndXJlIGNvbnRlbnRQYW5lOyAgCi0gIHByb3RlY3RlZCBMYWJlbCBsYWJlbDsKLSAgcHJvdGVjdGVkIFJvd0xheW91dCByb3dMYXlvdXQ7Ci0gIAotICBwcml2YXRlIEZpZ3VyZSBtZXNzYWdlTGFiZWxXcmFwcGVyOwotICBwcml2YXRlIExhYmVsIG1lc3NhZ2VMYWJlbDsKLSAgCi0gIHByb3RlY3RlZCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5ID0gbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKTsKLSAgCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBMaXN0RmlndXJlIGZpZ3VyZSA9IG5ldyBMaXN0RmlndXJlKHRydWUpOwotICAgIGZpZ3VyZS5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgZmlndXJlLnNldFBhaW50Rmlyc3RMaW5lKGZhbHNlKTsKLSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnRvb2x0aXBCYWNrZ3JvdW5kKTsKLQotICAgIHJvd0xheW91dCA9IG5ldyBSb3dMYXlvdXQoKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihyb3dMYXlvdXQpOyAKLSAgICBsYWJlbCA9IG5ldyBMYWJlbCgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgICAgLy8gYnVnMTQ2OTMyCi0gICAgICAgIHBhaW50Rm9jdXNDdXJzb3IoZ2V0Qm91bmRzKCksIGdyYXBoaWNzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIGxhYmVsLnNldExhYmVsQWxpZ25tZW50KExhYmVsLkxFRlQpOwotICAgIC8vbGFiZWwuc2V0Rm9udChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMubWVkaXVtRm9udCk7IAotICAgIGxhYmVsLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDIsIDE2LCAyICwxMCkpOwotICAgIGZpZ3VyZS5hZGQobGFiZWwpOyAgCi0gICAgCi0gICAgY29udGVudFBhbmUgPSBuZXcgTGlzdEZpZ3VyZSgpOwotICAgICgoTGlzdEZpZ3VyZSljb250ZW50UGFuZSkuc2V0T3BhcXVlKHRydWUpOwotICAgIGNvbnRlbnRQYW5lLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saXN0QmFja2dyb3VuZCk7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIAotICAgIC8qCi0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpCi0gICAgewotICAgICAgIC8vIFRPRE8gKGNzKSBjb25zaWRlciBtaW5vciB0d2VhayBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSByb3cgZmlsbHMgdXAgdGhlIGF2YWlsYWJsZSBzcGFjZSAgICAgICAgICAgICAKLSAgICAgICAvLyB2ZXJ0aWNhbGx5Li4uIHdpdGhvdXQgdGhpcyBhIGJpdCBvZiB0cmltIGlzIHZpc2libGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdAotICAgICAgIC8vIHdoZW4gdGhlIHBhcmFtIGxhYmVscyBhcmUgZ2l2ZW4gYSBtYXJnaW4gd2lkdGggdG9wIGFuZCBib3R0b20gPCAgJzQnIAotICAgICAgIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIHBhcmVudCkKLSAgICAgICB7Ci0gICAgICAgICBzdXBlci5sYXlvdXQocGFyZW50KTsKLSAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIEZpZ3VyZSBjaGlsZCA9IChGaWd1cmUpY2hpbGRyZW4uZ2V0KDApOwotICAgICAgICAgICAgLy9jaGlsZC5nZXRCb3VuZHMoKS5oZWlnaHQgPSBwYXJlbnQuZ2V0Q2xpZW50QXJlYSgpLmhlaWdodDsKLSAgICAgICAgIH0gIAotICAgICAgIH0KLSAgICB9OyAgICAgCi0gICAgICovCi0gICAgdG9vbGJhckxheW91dC5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOwotICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgZmlndXJlLmFkZChjb250ZW50UGFuZSk7Ci0gICAgCi0gICAgcm93TGF5b3V0LnNldENvbnN0cmFpbnQobGFiZWwsICJNZXNzYWdlTGFiZWwiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJvd0xheW91dC5zZXRDb25zdHJhaW50KGNvbnRlbnRQYW5lLCAiTWVzc2FnZUNvbnRlbnRQYW5lIik7IC8vJE5PTi1OTFMtMSQKLSAgIAotICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0gICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotICAgIGlmIChpc1JlYWRPbmx5KCkpIAotICAgIHsKLSAgICAgIGxhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgICAgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlNZXNzYWdlUmVmSGVhZGluZ0NvbG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGxhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuZGVmYXVsdEZvcmVncm91bmRDb2xvcik7Ci0gICAgICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMudG9vbHRpcEJhY2tncm91bmQpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsgIAotCSAgaWYgKCFpc1JlYWRPbmx5KCkgJiYgIWlzRmlsZVJlYWRPbmx5KCkpIHsKLQkJICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlBSSU1BUllfRFJBR19ST0xFLCBuZXcgQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5KGdldFZpZXdlcigpLCBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSkpOwotCSAgfQotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kpOwotICB9Ci0gIAotICBwdWJsaWMgRHJhZ1RyYWNrZXIgZ2V0RHJhZ1RyYWNrZXIoUmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIG5ldyBBU0RHcmFwaE5vZGVEcmFnVHJhY2tlcigoRWRpdFBhcnQpdGhpcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLSAgewotICAgIHJldHVybiBjb250ZW50UGFuZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7ICAgCi0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsKLSAgICBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlID0gKElNZXNzYWdlUmVmZXJlbmNlKWdldE1vZGVsKCk7Ci0gICAgCi0gICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJbGFiZWwuc2V0VGV4dCgoKElUcmVlRWxlbWVudCkgbWVzc2FnZSkuZ2V0VGV4dCgpKTsKLSAgICAJbGFiZWwuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgbWVzc2FnZSkuZ2V0SW1hZ2UoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIFJlc2l6ZSBjb2x1bW4gd2lkdGhzLiAgU2l6ZXMgbWF5IGhhdmUgc2hydW5rLgotICAgIHJvd0xheW91dC5nZXRDb2x1bW5EYXRhKCkuY2xlYXJDb2x1bW5XaWR0aHMoKTsKLSAgICBmb3IgKEVkaXRQYXJ0IHBhcmVudCA9IGdldFBhcmVudCgpOyBwYXJlbnQgIT0gbnVsbDsgcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkKLSAgICAgIHsgCi0gICAgICAgICgoR3JhcGhpY2FsRWRpdFBhcnQpcGFyZW50KS5nZXRGaWd1cmUoKS5pbnZhbGlkYXRlVHJlZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hDaGlsZHJlbigpIHsKLQkgIHN1cGVyLnJlZnJlc2hDaGlsZHJlbigpOwotICAgICAgcmVmcmVzaE1lc3NhZ2UoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaE1lc3NhZ2UoKSB7Ci0JICBpZiAoZ2V0TW9kZWxDaGlsZHJlbigpLnNpemUoKSA+IDApIHsKLQkJICBpZiAobWVzc2FnZUxhYmVsV3JhcHBlciAhPSBudWxsKSB7Ci0JCQkgIGNvbnRlbnRQYW5lLnJlbW92ZShtZXNzYWdlTGFiZWxXcmFwcGVyKTsKLQkJCSAgbWVzc2FnZUxhYmVsV3JhcHBlciA9IG51bGw7Ci0JCSAgfQotCSAgfQotCSAgZWxzZSB7Ci0JCSAgaWYgKG1lc3NhZ2VMYWJlbFdyYXBwZXIgPT0gbnVsbCkgewotCQkJICBtZXNzYWdlTGFiZWxXcmFwcGVyID0gbmV3IEZpZ3VyZSgpOwotCQkJICBtZXNzYWdlTGFiZWwgPSBuZXcgTGFiZWwoKTsKLQkJCSAgCi0JCQkgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKQotCQkJICAgIHsKLQkJCQkgIC8vIFdlIHdhbnQgdG8gY2VudGVyIHRoZSB0ZXh0Ci0JCQkgICAgICAgcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgcGFyZW50KQotCQkJICAgICAgIHsKLQkJCSAgICAgICAgIHN1cGVyLmxheW91dChwYXJlbnQpOwotCi0JCQkgICAgICAgICBpZiAocGFyZW50LmdldENoaWxkcmVuKCkuc2l6ZSgpID09IDEgJiYgcGFyZW50LmdldENoaWxkcmVuKCkuZ2V0KDApIGluc3RhbmNlb2YgTGFiZWwpCi0JCQkgICAgICAgICB7Ci0JCQkgICAgICAgICAgICBwYXJlbnQuc2V0U2l6ZShwYXJlbnQuZ2V0U2l6ZSgpLndpZHRoLCBwYXJlbnQuZ2V0U2l6ZSgpLmhlaWdodCArIDMpOwotCQkJICAgICAgICAgICAgTGFiZWwgY2hpbGQgPSAoTGFiZWwpIHBhcmVudC5nZXRDaGlsZHJlbigpLmdldCgwKTsKLQkJCSAgICAgICAgICAgIGludCBuZXdYQW1vdW50ID0gKHBhcmVudC5nZXRTaXplKCkud2lkdGggLSBjaGlsZC5nZXRTaXplKCkud2lkdGgpIC8gMjsKLQkJCSAgICAgICAgICAgIFBvaW50IHAgPSBjaGlsZC5nZXRMb2NhdGlvbigpOwotCQkJICAgICAgICAgICAgY2hpbGQuc2V0TG9jYXRpb24obmV3IFBvaW50KHAueCArIG5ld1hBbW91bnQsIHAueSArIDMpKTsKLQkJCSAgICAgICAgIH0gIAotCQkJICAgICAgIH0KLQkJCSAgICB9OyAgICAgCi0KLQkJCSAgbWVzc2FnZUxhYmVsV3JhcHBlci5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotCQkJICBtZXNzYWdlTGFiZWxXcmFwcGVyLmFkZChtZXNzYWdlTGFiZWwpOwotCQkJICBjb250ZW50UGFuZS5hZGQobWVzc2FnZUxhYmVsV3JhcHBlcik7Ci0JCSAgfQotCQkgIAotCQkgIExpc3QgZXJyb3JMaXN0ID0gZ2V0RXJyb3JzKCk7Ci0JCSAgTGlzdCB3YXJuTGlzdCA9IGdldFdhcm5pbmdzKCk7Ci0KLQkJICBpZiAoZXJyb3JMaXN0LnNpemUoKSA+IDApIHsKLQkJCSAgTW9kZWxEaWFnbm9zdGljSW5mbyBpbmZvID0gKE1vZGVsRGlhZ25vc3RpY0luZm8pIGVycm9yTGlzdC5nZXQoMCk7Ci0JCQkgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KCIgICIgKyBpbmZvLmdldERlc2NyaXB0aW9uVGV4dCgpICsgIiAgIik7ICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCSAgbWVzc2FnZUxhYmVsLnNldEZvcmVncm91bmRDb2xvcihpbmZvLmdldERlc2NyaXB0aW9uVGV4dENvbG9yKCkpOwotCQkgIH0KLQkJICBlbHNlIGlmICh3YXJuTGlzdC5zaXplKCkgPiAwKXsKLQkJCSAgTW9kZWxEaWFnbm9zdGljSW5mbyBpbmZvID0gKE1vZGVsRGlhZ25vc3RpY0luZm8pIHdhcm5MaXN0LmdldCgwKTsKLQkJCSAgbWVzc2FnZUxhYmVsLnNldFRleHQoIiAgIiArIGluZm8uZ2V0RGVzY3JpcHRpb25UZXh0KCkgKyAiICAiKTsgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJICBtZXNzYWdlTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKGluZm8uZ2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoKSk7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBtZXNzYWdlTGFiZWwuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJCSAgbWVzc2FnZUxhYmVsLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0JCSAgfQotCSAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgTGlzdCBnZXRFcnJvcnMoKSB7Ci0JICBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSBnZXRNb2RlbCgpOwotCSAgcmV0dXJuIGdldERpYWdub3N0aWNNZXNzYWdlVHlwZShtZXNzYWdlUmVmLmdldERpYWdub3N0aWNNZXNzYWdlcygpLCBNb2RlbERpYWdub3N0aWNJbmZvLkVSUk9SX1RZUEUpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgTGlzdCBnZXRXYXJuaW5ncygpIHsKLQkgIElNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIGdldE1vZGVsKCk7Ci0JICByZXR1cm4gZ2V0RGlhZ25vc3RpY01lc3NhZ2VUeXBlKG1lc3NhZ2VSZWYuZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCksIE1vZGVsRGlhZ25vc3RpY0luZm8uV0FSTklOR19UWVBFKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VUeXBlKExpc3QgZGlhZ25vc3RpY0luZm8sIGludCB0eXBlKSB7Ci0JICBMaXN0IGxpc3RUeXBlID0gbmV3IEFycmF5TGlzdCgpOwotCSAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGRpYWdub3N0aWNJbmZvLnNpemUoKTsgaW5kZXgrKykgewotCQkgIE1vZGVsRGlhZ25vc3RpY0luZm8gaW5mbyA9IChNb2RlbERpYWdub3N0aWNJbmZvKSBkaWFnbm9zdGljSW5mby5nZXQoaW5kZXgpOwotCQkgIGlmIChpbmZvLmdldFR5cGUoKSA9PSB0eXBlKSB7Ci0JCQkgIGxpc3RUeXBlLmFkZChpbmZvKTsKLQkJICB9Ci0JICB9Ci0JICAKLQkgIHJldHVybiBsaXN0VHlwZTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgSU1lc3NhZ2VSZWZlcmVuY2UgdGhlTWVzc2FnZSA9IChJTWVzc2FnZVJlZmVyZW5jZSlnZXRNb2RlbCgpOwotICAgIHJldHVybiB0aGVNZXNzYWdlLmdldFBhcmFtZXRlcnMoKTsgICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZE5vdGlmeSgpCi0gIHsKLSAgICBJbnRlcmZhY2VFZGl0UGFydC5hdHRhY2hUb0ludGVyZmFjZUVkaXRQYXJ0KHRoaXMsIHJvd0xheW91dCk7Ci0gICAgc3VwZXIuYWRkTm90aWZ5KCk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsKLQkgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JICBpZiAoaXNSZWFkT25seSgpKSB7Ci0JICAgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlNZXNzYWdlUmVmSGVhZGluZ0NvbG9yKTsKLQkgIH0KLQkgIGVsc2UgewotCQkgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy50b29sdGlwQmFja2dyb3VuZCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0gIHsgIAotICAgIEVkaXRQYXJ0IGVkaXRQYXJ0ID0gc3VwZXIuZ2V0UmVsYXRpdmVFZGl0UGFydChkaXJlY3Rpb24pOwotICAgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEggJiYgZWRpdFBhcnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlZGl0UGFydCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRJbnRlcmZhY2UodGhpcyk7Ci0gICAgfSAgICAgICAgCi0gICAgcmV0dXJuIGVkaXRQYXJ0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvT3BlcmF0aW9uRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9PcGVyYXRpb25FZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGM0YTM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9PcGVyYXRpb25FZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5QYW5lbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRExhYmVsRGlyZWN0RWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RTZWxlY3Rpb25FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5MaXN0RmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIE9wZXJhdGlvbkVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSU5hbWVkRWRpdFBhcnQKLXsgCi0gIHByb3RlY3RlZCBGaWd1cmUgY29udGVudFBhbmU7Ci0gIHByb3RlY3RlZCBMYWJlbCBsYWJlbDsKLSAgcHJpdmF0ZSBDb2xvciB1bnNlbGVjdGVkQ29sb3I7Ci0gIHByaXZhdGUgRmlndXJlIGxhYmVsSG9sZGVyOwotICAKLSAgcHVibGljIE9wZXJhdGlvbkVkaXRQYXJ0KCkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsgICAKLSAgICB0b29sYmFyTGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7ICAgCi0gICAgdG9vbGJhckxheW91dC5zZXRNaW5vckFsaWdubWVudChUb29sYmFyTGF5b3V0LkFMSUdOX1RPUExFRlQpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIAotICAgIGxhYmVsSG9sZGVyID0gbmV3IFBhbmVsKCkgewotICAgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpIHsKLSAgICAgICAgc3VwZXIucGFpbnQoZ3JhcGhpY3MpOwotICAgICAgICBSZWN0YW5nbGUgciA9IGdldEJvdW5kcygpOwotICAgICAgICAvLyBidWcxNDY5MzIKLSAgICAgICAgcGFpbnRGb2N1c0N1cnNvcihuZXcgUmVjdGFuZ2xlKHIueCwgci55LCByLndpZHRoLCByLmhlaWdodCksIGdyYXBoaWNzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IpOwotICAgIGxhYmVsSG9sZGVyLnNldExheW91dE1hbmFnZXIobmV3IFRvb2xiYXJMYXlvdXQodHJ1ZSkpOwotICAgIGZpZ3VyZS5hZGQobGFiZWxIb2xkZXIpOwotICAgIAotICAgIGxhYmVsID0gbmV3IExhYmVsKCJPcGVyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotLy8gICAgbGFiZWwuc2V0Rm9udChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuc21hbGxCb2xkRm9udCk7Ci0gICAgbGFiZWwuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMiwgMiwyLDIpKTsKLSAgICBsYWJlbC5zZXRUZXh0QWxpZ25tZW50KExhYmVsLkxFRlQpOyAgCi0gICAgbGFiZWxIb2xkZXIuYWRkKGxhYmVsKTsKLSAgICAKLSAgICAKLSAgICBjb250ZW50UGFuZSA9IG5ldyBMaXN0RmlndXJlKCk7ICAKLSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQyID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIHRvb2xiYXJMYXlvdXQyLnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0gICAgY29udGVudFBhbmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0Mik7Ci0gICAgZmlndXJlLmFkZChjb250ZW50UGFuZSk7Ci0gCi0gICAgLy8gcm1haDogVGhlIGJsb2NrIG9mIGNvZGUgYmVsb3cgaGFzIGJlZW4gbW92ZWQgZnJvbSByZWZyZXNoVmlzdWFscygpLiAgV2UncmUKLSAgICAvLyBhc3N1bWluZyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBFZGl0UGFydCB3aWxsIG5ldmVyIGNoYW5nZSBvbmNlIHRoZQotICAgIC8vIEVkaXRQYXJ0IGhhcyBiZWVuIGNyZWF0ZWQuCi0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgIAlsYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0gICAJICAgIGZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5VGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IpOwotICAgCSAgICBsYWJlbEhvbGRlci5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5VGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJbGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLSAJICAgIGZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yKTsKLSAgIAkgICAgbGFiZWxIb2xkZXIuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5ESVJFQ1RfRURJVF9ST0xFLCBuZXcgQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5KCkpOwotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRGlyZWN0RWRpdE1hbmFnZXIgbWFuYWdlcjsKLSAgcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pewotCSAgUmVjdGFuZ2xlIHRleHRBcmVhID0gZ2V0TGFiZWxGaWd1cmUoKS5nZXRCb3VuZHMoKTsKLQkgIHRleHRBcmVhLndpZHRoID0gZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkud2lkdGg7Ci0JICBpZiAoIWlzRmlsZVJlYWRPbmx5KCkgJiYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgaGl0VGVzdCh0ZXh0QXJlYSwgY3Vyc29yTG9jYXRpb24pICYmICFpc1JlYWRPbmx5KCkpKSB7Ci0JCSAgbWFuYWdlciA9IG5ldyBMYWJlbEVkaXRNYW5hZ2VyKHRoaXMsIG5ldyBMYWJlbENlbGxFZGl0b3JMb2NhdG9yKHRoaXMsIGN1cnNvckxvY2F0aW9uKSk7Ci0JCSAgbWFuYWdlci5zaG93KCk7Ci0JICB9Ci0gICAgZWxzZSBpZiAoZ2V0RmlndXJlKCkgaW5zdGFuY2VvZiBGaWd1cmUgJiYgaGl0VGVzdEZpZ3VyZSgoRmlndXJlKSBnZXRGaWd1cmUoKSwgY3Vyc29yTG9jYXRpb24pICYmIGlzUmVhZE9ubHkoKSkgewotICAgICAgZG9PcGVuTmV3RWRpdG9yKCk7ICAgIAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXEpIHsKLQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJICBwZXJmb3JtRGlyZWN0RWRpdChudWxsKTsKLQkgIH0KLSAgfQotICAKLSAgcHVibGljIExhYmVsIGdldExhYmVsRmlndXJlKCkgewotCSAgcmV0dXJuIGxhYmVsOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsgICAKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICAgIElPcGVyYXRpb24gb3BlcmF0aW9uID0gKElPcGVyYXRpb24pZ2V0TW9kZWwoKTsKLSAgICBsYWJlbC5zZXRUZXh0KG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIAotICAgIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJbGFiZWwuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgb3BlcmF0aW9uKS5nZXRJbWFnZSgpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLSAgewotICAgIHJldHVybiBjb250ZW50UGFuZTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgSU9wZXJhdGlvbiB0aGVPcGVyYXRpb24gPSAoSU9wZXJhdGlvbilnZXRNb2RlbCgpOwotICAgIHJldHVybiB0aGVPcGVyYXRpb24uZ2V0TWVzc2FnZXMoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICB1bnNlbGVjdGVkQ29sb3IgPSBsYWJlbEhvbGRlci5nZXRCYWNrZ3JvdW5kQ29sb3IoKTsKLS8vCSAgZ2V0RmlndXJlKCkuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7Ci0JICBsYWJlbEhvbGRlci5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JICBpZiAodW5zZWxlY3RlZENvbG9yICE9IG51bGwpIHsKLQkJICBsYWJlbEhvbGRlci5zZXRCYWNrZ3JvdW5kQ29sb3IodW5zZWxlY3RlZENvbG9yKTsKLQkgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1BhcmFtZXRlckVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYzYmRmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5QYW5lbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9zaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkRyYWdUcmFja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRpcmVjdEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuTGFiZWxDZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuTGFiZWxFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0REcmFnQW5kRHJvcEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLlJvd0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJRmVlZGJhY2tIYW5kbGVyLCBJTmFtZWRFZGl0UGFydAoteyAgIAotICBwcm90ZWN0ZWQgRmlndXJlIGNvbnRlbnRQYW5lOwotICBwcm90ZWN0ZWQgTGFiZWwgcGFyYW1ldGVyTmFtZTsKLSAgcHJvdGVjdGVkIFJvd0xheW91dCByb3dMYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7Ci0gIHByb3RlY3RlZCBJbWFnZSBsYWJlbEltYWdlOwotICAKLSAgcHJvdGVjdGVkIEFTRFNlbGVjdGlvbkVkaXRQb2xpY3kgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kgPSBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpOwotCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBJRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKQotICAgICAgewotICAgICAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0gICAgICAgIGdyYXBoaWNzLnB1c2hTdGF0ZSgpOwotICAgICAgICAvLyB0aGlzIGJpdCBvZiBjb2RlIGlzIHVzZWQgdG8gZHJhdyB0aGUgZGl2aWRpbmcgbGluZSBiZXR3ZWVuCi0gICAgICAgIC8vIHRoZSBwYXJhbWV0ZXIgbmFtZSBhbmQgdGhlIHBhcmFtZXRlciB0eXBlCi0gICAgICAgIC8vIHdlIG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIgbW92aW5nIHRoaXMgbGluZSBkcmF3aW5nIGludG8gdGhlIAotICAgICAgICAvLyBtZXNzYWdlIHJlZmVyZW5jZSdzIGZpZ3VyZSB3aGVyZSB0aGUgaG9yaXpvbnRhbCBsaW5lcyBhcmUgZG93bidzCi0gICAgICAgIFJlY3RhbmdsZSByID0gcGFyYW1ldGVyTmFtZS5nZXRCb3VuZHMoKTsKLSAgICAgICAgaW50IHg9IHIueCArICByLndpZHRoIC0xOwotICAgICAgICBncmFwaGljcy5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLSAgICAgICAgZ3JhcGhpY3MuZHJhd0xpbmUoeCwgci55LCB4LCByLnkgKyByLmhlaWdodCk7Ci0gICAgICAgIGdyYXBoaWNzLnBvcFN0YXRlKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBidWcxNDY5MzIKLSAgICAgICAgcGFpbnRGb2N1c0N1cnNvcihuZXcgUmVjdGFuZ2xlKHIueCArIDEsIHIueSwgci53aWR0aCAtIDIsIHIuaGVpZ2h0KSwgZ3JhcGhpY3MpOwotICAgICAgfQotICAgIH07ICAgICAgICAKLSAgICAvL3Rvb2xiYXJMYXlvdXQuc2V0TWlub3JBbGlnbm1lbnQoVG9vbGJhckxheW91dC5BTElHTl9DRU5URVIpOwotICAgIGZpZ3VyZS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHJvd0xheW91dCk7IAotICAgIC8qCi0gICAgU3RyaW5nIHggPSAiIjsKLSAgICBpbnQgc2l6ZSA9IChpbnQpKE1hdGgucmFuZG9tKCkqNTApOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgIHsKLSAgICAgIHggKz0gIngiOwotICAgIH0gIAotICAgIFN0cmluZyB5ID0gIiI7Ci0gICAgaW50IHNpemV5ID0gKGludCkoTWF0aC5yYW5kb20oKSo1MCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXpleTsgaSsrKQotICAgIHsKLSAgICAgIHkgKz0gInkiOwotICAgIH0gKi8KLSAgICAKLSAgICBjb250ZW50UGFuZSA9IG5ldyBGaWd1cmUoKTsKLSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQyID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIHRvb2xiYXJMYXlvdXQyLnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7ICAgCi0gICAgY29udGVudFBhbmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0Mik7Ci0KLSAgICBJRmlndXJlIHBhcmFtZXRlck5hbWVQYW5lID0gbmV3IFBhbmVsKCk7Ci0gICAgdG9vbGJhckxheW91dDIgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7ICAKLSAgICB0b29sYmFyTGF5b3V0Mi5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOyAgIAotICAgIHBhcmFtZXRlck5hbWVQYW5lLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dDIpOwotICAgIAotICAgIHBhcmFtZXRlck5hbWUgPSBuZXcgTGFiZWwoKTsKLSAgICBwYXJhbWV0ZXJOYW1lLnNldExhYmVsQWxpZ25tZW50KExhYmVsLkxFRlQpOwotICAgIHBhcmFtZXRlck5hbWUuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoNCwxMCw0LDEwKSk7Ci0gICAgCi0gICAgcGFyYW1ldGVyTmFtZVBhbmUuYWRkKHBhcmFtZXRlck5hbWUpOwotICAgIGZpZ3VyZS5hZGQocGFyYW1ldGVyTmFtZVBhbmUpOwotICAgIGZpZ3VyZS5hZGQoY29udGVudFBhbmUpOwotICAgIHJvd0xheW91dC5zZXRDb25zdHJhaW50KHBhcmFtZXRlck5hbWVQYW5lLCAicGFyYW1ldGVyTmFtZSIpOyAvLyROT04tTkxTLTEkCi0gICAgcm93TGF5b3V0LnNldENvbnN0cmFpbnQoY29udGVudFBhbmUsICJwYXJhbWV0ZXJUeXBlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgIAlsYWJlbEltYWdlID0gKChJVHJlZUVsZW1lbnQpIGdldE1vZGVsKCkpLmdldEltYWdlKCk7Ci0gICAgfQotICAgIAotICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0gICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotICAgIGlmIChpc1JlYWRPbmx5KCkpIAotICAgIHsKLSAgICAgIHBhcmFtZXRlck5hbWUuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcGFyYW1ldGVyTmFtZS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGROb3RpZnkoKQotICB7Ci0gICAgSW50ZXJmYWNlRWRpdFBhcnQuYXR0YWNoVG9JbnRlcmZhY2VFZGl0UGFydCh0aGlzLCByb3dMYXlvdXQpOwotICAgIHN1cGVyLmFkZE5vdGlmeSgpOwotICB9Ci0gIAotICBwcml2YXRlIERpcmVjdEVkaXRNYW5hZ2VyIG1hbmFnZXI7Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbil7Ci0JICBpZiAoIWlzRmlsZVJlYWRPbmx5KCkgJiYgIWlzUmVhZE9ubHkoKSAmJiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCBoaXRUZXN0KGdldExhYmVsRmlndXJlKCkuZ2V0Qm91bmRzKCksIGN1cnNvckxvY2F0aW9uKSkpIHsKLQkJbWFuYWdlciA9IG5ldyBMYWJlbEVkaXRNYW5hZ2VyKHRoaXMsIG5ldyBMYWJlbENlbGxFZGl0b3JMb2NhdG9yKHRoaXMsIGN1cnNvckxvY2F0aW9uKSk7Ci0JCW1hbmFnZXIuc2hvdygpOwotCSAgfQotICAgIGVsc2UgaWYgKGdldEZpZ3VyZSgpIGluc3RhbmNlb2YgRmlndXJlICYmIGhpdFRlc3RGaWd1cmUoKEZpZ3VyZSkgZ2V0RmlndXJlKCksIGN1cnNvckxvY2F0aW9uKSAmJiBpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGRvT3Blbk5ld0VkaXRvcigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXEpIHsKLQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJICBwZXJmb3JtRGlyZWN0RWRpdChudWxsKTsKLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LkRJUkVDVF9FRElUX1JPTEUsIG5ldyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3koKSk7Ci0JICBpZiAoIWlzUmVhZE9ubHkoKSAmJiAhaXNGaWxlUmVhZE9ubHkoKSkgewotCQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuUFJJTUFSWV9EUkFHX1JPTEUsIG5ldyBBU0REcmFnQW5kRHJvcEVkaXRQb2xpY3koZ2V0Vmlld2VyKCksIHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KSk7Ci0JICB9Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBEcmFnVHJhY2tlciBnZXREcmFnVHJhY2tlcihSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFTREdyYXBoTm9kZURyYWdUcmFja2VyKChFZGl0UGFydCl0aGlzKTsKLSAgfQotICAKLSAgcHVibGljIExhYmVsIGdldExhYmVsRmlndXJlKCkgewotCSAgcmV0dXJuIHBhcmFtZXRlck5hbWU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgeyAgIAotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0gICAgSVBhcmFtZXRlciBwYXJhbWV0ZXIgPSAoSVBhcmFtZXRlcilnZXRNb2RlbCgpOwotICAgIHBhcmFtZXRlck5hbWUuc2V0VGV4dChwYXJhbWV0ZXIuZ2V0TmFtZSgpKTsKLSAgICBpZiAobGFiZWxJbWFnZSAhPSBudWxsKSB7Ci0gICAgCXBhcmFtZXRlck5hbWUuc2V0SWNvbihsYWJlbEltYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmVzaXplIGNvbHVtbiB3aWR0aHMuICBTaXplcyBtYXkgaGF2ZSBzaHJ1bmsuCi0gICAgcm93TGF5b3V0LmdldENvbHVtbkRhdGEoKS5jbGVhckNvbHVtbldpZHRocygpOwotICAgIGZvciAoRWRpdFBhcnQgcGFyZW50ID0gZ2V0UGFyZW50KCk7IHBhcmVudCAhPSBudWxsOyBwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCkpCi0gICAgewotICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEludGVyZmFjZUVkaXRQYXJ0KQotICAgICAgeyAKLSAgICAgICAgKChHcmFwaGljYWxFZGl0UGFydClwYXJlbnQpLmdldEZpZ3VyZSgpLmludmFsaWRhdGVUcmVlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLQkgIC8vIE9uIHRoZSBmYWNhZGUgbGV2ZWwsIG9uZSBJUGFyYW1ldGVyIHdpbGwgaGF2ZSB0d28gZWRpdGFibGUgdmFsdWVzLgotCSAgLy8gQSBuYW1lIGFuZCBhIHR5cGUgcmVmZXJlbmNlLiAgVG8gbWFrZSBkaXJlY3QgZWRpdGluZyBhbmQgc2VsZWN0aW9uCi0JICAvLyBmZWVkYmFjayBlYXNpZXIsIHdlIHNob3cgdGhpcyBvbmUgZmFjYWRlIG9iamVjdCBhcyB0d28gZWRpdCBwYXJ0cy4KLQkgIC8vIFRoZSBhcHByb2FjaCBpcyB0byB0aGUgc2FtZSBmYWNhZGUgbW9kZWwsIHRvIGRyaXZlIHRoZSBzZWNvbmQgKGNoaWxkCi0JICAvLyBFZGl0UGFydC4KLQotICAgICAgLy8gVE9ETyAoY3MpIFJpY2ggY29uc2lkZXIgY3JlYXRpbmcgMiBoYXJkIGNvZGUgZWRpdCBwYXJ0cwotICAgICAgLy8gdGhlIGZpcnN0IGZvciB0aGUgcGFyYW1ldGVyIG5hbWUKLSAgICAgIC8vIHRoZSBzZWNvbmQgZm9yIHRoZSBwYXJhbXRlciB0eXBlCi0JICBMaXN0IGtpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBraWRzLmFkZChnZXRNb2RlbCgpKTsKLQkgIHJldHVybiBraWRzOwotICB9Ci0gIAotICBwdWJsaWMgSUZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0gIHsKLSAgICByZXR1cm4gY29udGVudFBhbmU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkgewkKLQkgIHBhcmFtZXRlck5hbWUuZ2V0UGFyZW50KCkuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLSAgICAgIHBhcmFtZXRlck5hbWUuZ2V0UGFyZW50KCkuc2V0QmFja2dyb3VuZENvbG9yKGZpZ3VyZS5nZXRCYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0gIHsgIAotICAgIEVkaXRQYXJ0IGVkaXRQYXJ0ID0gc3VwZXIuZ2V0UmVsYXRpdmVFZGl0UGFydChkaXJlY3Rpb24pOwotICAgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEggJiYgZWRpdFBhcnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlZGl0UGFydCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRJbnRlcmZhY2UodGhpcyk7ICAgICAgICAgICAKLSAgICB9ICAgICAgIAotICAgIHJldHVybiBlZGl0UGFydDsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyVHlwZUVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyVHlwZUVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNTk5ZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1BhcmFtZXRlclR5cGVFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTW91c2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTW91c2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUGFuZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Nb3VzZU1vdGlvbkxpc3RlbmVyLlN0dWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5MYXllckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBvbGljaWVzLkRpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkRpcmVjdEVkaXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5UeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQmFzZUxpbmtJY29uRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Nb2RlbERpYWdub3N0aWNJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cy5Sb3dMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbC5JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyOwotCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyVHlwZUVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSUZlZWRiYWNrSGFuZGxlciwgSU5hbWVkRWRpdFBhcnQKLXsgICAKLQlwcm90ZWN0ZWQgU2ltcGxlRGlyZWN0RWRpdFBvbGljeSBzaW1wbGVEaXJlY3RFZGl0UG9saWN5ID0gbmV3IFNpbXBsZURpcmVjdEVkaXRQb2xpY3koKTsKLQlwcm90ZWN0ZWQgTGFiZWwgcGFyYW1ldGVyVHlwZTsKLQlwcm90ZWN0ZWQgUm93TGF5b3V0IHJvd0xheW91dCA9IG5ldyBSb3dMYXlvdXQoKTsKLQotCSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXEpIHsKLQkJICBpZiAocmVxLmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpKSB7Ci0JCQkgIHBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCQkgIH0KLQkgIH0KLQkgIAotCXByb3RlY3RlZCBNeU1vdXNlRXZlbnRMaXN0ZW5lciBtb3VzZUV2ZW50TGlzdGVuZXI7Ci0JcHJpdmF0ZSBCYXNlTGlua0ljb25GaWd1cmUgbGlua0ljb25GaWd1cmU7Ci0KLQlwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotCXsKLQkJSUZpZ3VyZSBmaWd1cmUgPSBuZXcgUGFuZWwoKSB7Ci0JCQlwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBncmFwaGljcykgewotCQkJCXN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLQkJCQlSZWN0YW5nbGUgciA9IGdldEJvdW5kcygpOwotCQkJCS8vIGJ1ZzE0NjkzMgotCQkJCXBhaW50Rm9jdXNDdXJzb3IobmV3IFJlY3RhbmdsZShyLngsIHIueSwgci53aWR0aCwgci5oZWlnaHQpLCBncmFwaGljcyk7Ci0JCQl9Ci0JCX07Ci0JCWZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHJvd0xheW91dCk7IAotCi0JCXBhcmFtZXRlclR5cGUgPSBuZXcgTGFiZWwoKTsKLQkJcGFyYW1ldGVyVHlwZS5zZXRMYWJlbEFsaWdubWVudChMYWJlbC5MRUZUKTsKLQkJcGFyYW1ldGVyVHlwZS5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcig0LDEyLDQsMjApKTsKLQkJZmlndXJlLmFkZChwYXJhbWV0ZXJUeXBlKTsKLQotCQkvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotCQkvLyBhc3N1bWluZyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBFZGl0UGFydCB3aWxsIG5ldmVyIGNoYW5nZSBvbmNlIHRoZQotCQkvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotCQlpZiAoaXNSZWFkT25seSgpKSAKLQkJewotCQkJcGFyYW1ldGVyVHlwZS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuZGVmYXVsdEZvcmVncm91bmRDb2xvcik7Ci0JCX0KLQotCQlyZXR1cm4gZmlndXJlOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLQl7ICAgCi0JCXN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0JCUlQYXJhbWV0ZXIgcGFyYW0gPSAoSVBhcmFtZXRlcikgZ2V0TW9kZWwoKTsKLQkJU3RyaW5nIG5hbWUgPSBwYXJhbS5nZXRDb21wb25lbnROYW1lKCk7Ci0JCXBhcmFtZXRlclR5cGUuc2V0VGV4dChuYW1lKTsKLQotCQlJbWFnZSBpbWFnZSA9ICgoSVRyZWVFbGVtZW50KWdldE1vZGVsKCkpLmdldFNlY29uZGFyeUltYWdlKCk7Ci0JCWlmIChpbWFnZSAhPSBudWxsKQotCQl7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldEljb24oaW1hZ2UpOwotCQl9Ci0KLQkJcGFyYW1ldGVyVHlwZS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotCi0JCUxpc3QgZGlhZ25vc3RpY01lc3NhZ2VzID0gcGFyYW0uZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gZGlhZ25vc3RpY01lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0JCU1vZGVsRGlhZ25vc3RpY0luZm8gZXJyb3JJbmZvID0gbnVsbDsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSAmJiBlcnJvckluZm8gPT0gbnVsbCkgewotCQkJTW9kZWxEaWFnbm9zdGljSW5mbyB0ZW1wID0gKE1vZGVsRGlhZ25vc3RpY0luZm8pIGl0Lm5leHQoKTsKLQkJCWlmICh0ZW1wLmdldFR5cGUoKSA9PSBNb2RlbERpYWdub3N0aWNJbmZvLkVSUk9SX1RZUEUpIHsKLQkJCQllcnJvckluZm8gPSB0ZW1wOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKGVycm9ySW5mbyAhPSBudWxsKSB7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldFRleHQoZXJyb3JJbmZvLmdldERlc2NyaXB0aW9uVGV4dCgpKTsKLQkJCXBhcmFtZXRlclR5cGUuc2V0Rm9yZWdyb3VuZENvbG9yKGVycm9ySW5mby5nZXREZXNjcmlwdGlvblRleHRDb2xvcigpKTsKLQkJCXBhcmFtZXRlclR5cGUuc2V0SWNvbihudWxsKTsKLQkJfQotCi0JCS8vIEZvcmNlIHRoZSBMaW5rSWNvbkNvbHVtbiB0byByZXNpemUgYW5kIHJlbGF5b3V0IGl0c2VsZi4KLQkJaWYgKGdldEludGVyZmFjZUVkaXRQYXJ0KCkgIT0gbnVsbCkgewotCQkJKChGaWd1cmUpIGdldEludGVyZmFjZUVkaXRQYXJ0KCkuZ2V0TGlua0ljb25Db2x1bW4oKSkuaW52YWxpZGF0ZSgpOwotCQkJcmVmcmVzaExpbmtGaWd1cmUobmV3IFBvaW50KC0xLCAtMSkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJbnRlcmZhY2VFZGl0UGFydCBnZXRJbnRlcmZhY2VFZGl0UGFydCgpIHsKLQkJRWRpdFBhcnQgZXAgPSBnZXRQYXJlbnQoKTsKLQkJd2hpbGUgKGVwICE9IG51bGwgJiYgIShlcCBpbnN0YW5jZW9mIEludGVyZmFjZUVkaXRQYXJ0KSkgewotCQkJZXAgPSBlcC5nZXRQYXJlbnQoKTsKLQkJfQotCi0JCWlmIChlcCBpbnN0YW5jZW9mIEludGVyZmFjZUVkaXRQYXJ0KSB7Ci0JCQlyZXR1cm4gKEludGVyZmFjZUVkaXRQYXJ0KSBlcDsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkgewkgCQkgICAgICAgICAgCi0JCWZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkJZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihmaWd1cmUuZ2V0UGFyZW50KCkuZ2V0QmFja2dyb3VuZENvbG9yKCkpOwotCX0KLQotCXB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpIHsKLQkJcmV0dXJuIHBhcmFtZXRlclR5cGU7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotCQlpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLQkJaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5ESVJFQ1RfRURJVF9ST0xFLCBzaW1wbGVEaXJlY3RFZGl0UG9saWN5KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbikgewotCQlpZiAoIWlzRmlsZVJlYWRPbmx5KCkgJiYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgKGhpdFRlc3QocGFyYW1ldGVyVHlwZSwgY3Vyc29yTG9jYXRpb24pICYmICFpc1JlYWRPbmx5KCkpKSkgeyAKLQkJCUlQYXJhbWV0ZXIgcGFyYW0gPSAoSVBhcmFtZXRlcikgZ2V0TW9kZWwoKTsKLQotCQkJVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyKHBhcmFtLCB0aGlzLCBwYXJhbWV0ZXJUeXBlKTsgICAKLQkJCXNpbXBsZURpcmVjdEVkaXRQb2xpY3kuc2V0RGVsZWdhdGUobWFuYWdlcik7Ci0JCQltYW5hZ2VyLnNob3coKTsKLQotCi0JCX0KLQkJZWxzZSBpZiAocGFyYW1ldGVyVHlwZS5nZXRQYXJlbnQoKSBpbnN0YW5jZW9mIEZpZ3VyZSAmJgotCQkJCSBoaXRUZXN0RmlndXJlKChGaWd1cmUpIHBhcmFtZXRlclR5cGUuZ2V0UGFyZW50KCksIGN1cnNvckxvY2F0aW9uKSAmJiBpc1JlYWRPbmx5KCkpIHsKLQkJCWRvT3Blbk5ld0VkaXRvcigpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgYWN0aXZhdGUoKSB7Ci0JCXN1cGVyLmFjdGl2YXRlKCk7Ci0KLQkJSUZpZ3VyZSBwcmltYXJ5TGF5ZXIgPSBnZXRMYXllcihMYXllckNvbnN0YW50cy5QUklNQVJZX0xBWUVSKTsKLQkJbW91c2VFdmVudExpc3RlbmVyID0gbmV3IE15TW91c2VFdmVudExpc3RlbmVyKCk7Ci0JCXByaW1hcnlMYXllci5hZGRNb3VzZU1vdGlvbkxpc3RlbmVyKG1vdXNlRXZlbnRMaXN0ZW5lcik7Ci0JCXByaW1hcnlMYXllci5hZGRNb3VzZUxpc3RlbmVyKG1vdXNlRXZlbnRMaXN0ZW5lcik7Ci0JfQotCi0JcHVibGljIHZvaWQgZGVhY3RpdmF0ZSgpIHsKLQkJaWYgKG1vdXNlRXZlbnRMaXN0ZW5lciAhPSBudWxsKSB7Ci0JCQlJRmlndXJlIHByaW1hcnlMYXllciA9IGdldExheWVyKExheWVyQ29uc3RhbnRzLlBSSU1BUllfTEFZRVIpOwotCQkJcHJpbWFyeUxheWVyLnJlbW92ZU1vdXNlTW90aW9uTGlzdGVuZXIobW91c2VFdmVudExpc3RlbmVyKTsKLQkJCXByaW1hcnlMYXllci5yZW1vdmVNb3VzZUxpc3RlbmVyKG1vdXNlRXZlbnRMaXN0ZW5lcik7Ci0JCX0KLQotCQlJbnRlcmZhY2VFZGl0UGFydCBlcCA9IGdldEludGVyZmFjZUVkaXRQYXJ0KCk7Ci0JCWlmIChlcCAhPSBudWxsICYmIGxpbmtJY29uRmlndXJlICE9IG51bGwpIHsKLQkJCUlGaWd1cmUgZmlnID0gZXAuZ2V0TGlua0ljb25Db2x1bW4oKTsKLQkJCWlmIChmaWcuZ2V0Q2hpbGRyZW4oKS5jb250YWlucyhsaW5rSWNvbkZpZ3VyZSkpIHsKLQkJCQllcC5nZXRMaW5rSWNvbkNvbHVtbigpLnJlbW92ZShsaW5rSWNvbkZpZ3VyZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCXByaXZhdGUgY2xhc3MgU2ltcGxlRGlyZWN0RWRpdFBvbGljeSBleHRlbmRzIERpcmVjdEVkaXRQb2xpY3kgCi0JewotCQlwcm90ZWN0ZWQgVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyIGRlbGVnYXRlOwotCi0JCXB1YmxpYyB2b2lkIHNldERlbGVnYXRlKFR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlciBkZWxlZ2F0ZSkKLQkJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCXRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLQkJfQotCi0JCXByb3RlY3RlZCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZCBnZXREaXJlY3RFZGl0Q29tbWFuZChmaW5hbCBEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSAKLQkJeyAKLQkJCXJldHVybiBuZXcgQ29tbWFuZCgpIC8vQWJzdHJhY3RDb21tYW5kKCkKLQkJCXsKLQkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKCkKLQkJCQl7ICAgICAgICAgICAgICAgICAgICAgICAKLQkJCQkJaWYgKGRlbGVnYXRlICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCWRlbGVnYXRlLnBlcmZvcm1FZGl0KHJlcXVlc3QuZ2V0Q2VsbEVkaXRvcigpKTsKLQkJCQkJfSAgCi0JCQkJfSAgICAgCi0KLQkJCQlwdWJsaWMgdm9pZCByZWRvKCkKLQkJCQl7Ci0JCQkJfSAgCi0KLQkJCQlwdWJsaWMgdm9pZCB1bmRvKCkKLQkJCQl7Ci0JCQkJfSAgICAgCi0KLQkJCQlwdWJsaWMgYm9vbGVhbiBjYW5FeGVjdXRlKCkKLQkJCQl7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX07Ci0JCX0KLQotCQlwcm90ZWN0ZWQgdm9pZCBzaG93Q3VycmVudEVkaXRWYWx1ZShEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSAKLQkJeyAgICAgIAotCQkJLy9oYWNrIHRvIHByZXZlbnQgYXN5bmMgbGF5b3V0IGZyb20gcGxhY2luZyB0aGUgY2VsbCBlZGl0b3IgdHdpY2UuCi0JCQlnZXRIb3N0RmlndXJlKCkuZ2V0VXBkYXRlTWFuYWdlcigpLnBlcmZvcm1VcGRhdGUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0JeyAgICAgICAgIAotCQlFZGl0UGFydCBlZGl0UGFydCA9IHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLQkJaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5TT1VUSCAmJiBlZGl0UGFydCA9PSBudWxsKQotCQl7Ci0JCQllZGl0UGFydCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRJbnRlcmZhY2UodGhpcyk7Ci0JCX0gICAKLQkJcmV0dXJuIGVkaXRQYXJ0OwotCX0KLQotCXByaXZhdGUgY2xhc3MgTXlNb3VzZUV2ZW50TGlzdGVuZXIgZXh0ZW5kcyBTdHViIGltcGxlbWVudHMgTW91c2VMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIG1vdXNlUmVsZWFzZWQoTW91c2VFdmVudCBtZSkgeyB9Ci0JCXB1YmxpYyB2b2lkIG1vdXNlRG91YmxlQ2xpY2tlZChNb3VzZUV2ZW50IG1lKSB7IH0KLQotCQlwdWJsaWMgdm9pZCBtb3VzZU1vdmVkKE1vdXNlRXZlbnQgbWUpIHsKLQkJCVBvaW50IHBvaW50ZXIgPSBtZS5nZXRMb2NhdGlvbigpOwotCQkJcmVmcmVzaExpbmtGaWd1cmUocG9pbnRlcik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBtb3VzZVByZXNzZWQoTW91c2VFdmVudCBtZSkgewotCQkJUG9pbnQgcG9pbnRlciA9IG1lLmdldExvY2F0aW9uKCk7Ci0JCQlvcGVuRXh0ZXJuYWxFZGl0b3IocG9pbnRlcik7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIG1vdXNlSG92ZXIoTW91c2VFdmVudCBtZSkgewotCQkJUG9pbnQgcG9pbnRlciA9IG1lLmdldExvY2F0aW9uKCk7Ci0JCQlzaG93UHJldmlld0RpYWxvZyhwb2ludGVyKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2hvd1ByZXZpZXdEaWFsb2coUG9pbnQgcG9pbnQpIHsKLQkJUmVjdGFuZ2xlIGxpbmtGaWdCb3VuZHMgPSBnZXRMaW5rRmlndXJlQm91bmRzKCk7Ci0JCWlmIChsaW5rRmlnQm91bmRzID09IG51bGwpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCVJlY3RhbmdsZSB0ZXN0Ym91bmRzID0gbmV3IFJlY3RhbmdsZShsaW5rRmlnQm91bmRzLngsIGxpbmtGaWdCb3VuZHMueSwgMCwgbGlua0ZpZ0JvdW5kcy5oZWlnaHQpOwotCi0JCWlmIChwb2ludGVySW5SYW5nZSh0ZXN0Ym91bmRzLCBwb2ludCkpIHsKLQkJCUlPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgaGVscGVyID0gZ2V0RXh0ZXJuYWxFZGl0b3JPcGVuZXIoKTsKLQkJCWhlbHBlci5zaG93UHJldmlldygpOwotCQl9Ci0JfQotCi0JLy8gTWV0aG9kcyBiZWxvdyBoYW5kbGUgdGhlIExpbmsgRmlndXJlLi4uLi4KLQlwcml2YXRlIHZvaWQgZW1waGFzaXplTGlua0ZpZ3VyZSgpIHsKLQkJbGlua0ljb25GaWd1cmUuc2V0Q29sb3IoQ29sb3JDb25zdGFudHMuYmx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVuZW1waGFzaXplTGlua0ZpZ3VyZSgpIHsKLQkJbGlua0ljb25GaWd1cmUuc2V0Q29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gcG9pbnRlckluUmFuZ2UoUmVjdGFuZ2xlIGZpZ0JvdW5kcywgUG9pbnQgcG9pbnRlcikgewotCQlSZWN0YW5nbGUgbGlua0JvdW5kcyA9IGdldExpbmtGaWd1cmVCb3VuZHMoKTsKLQotCQlpbnQgZW50aXJlWCA9IGZpZ0JvdW5kcy54OwotCQlpbnQgZW50aXJlWSA9IGZpZ0JvdW5kcy55OwotCQlpbnQgZW50aXJlV2lkdGggPSBmaWdCb3VuZHMud2lkdGggKyBsaW5rQm91bmRzLndpZHRoOwotCQlpbnQgZW50aXJlSGVpZ2h0ID0gZmlnQm91bmRzLmhlaWdodDsKLQkJUmVjdGFuZ2xlIGVudGlyZUJvdW5kcyA9IG5ldyBSZWN0YW5nbGUoZW50aXJlWCwgZW50aXJlWSwgZW50aXJlV2lkdGgsIGVudGlyZUhlaWdodCk7Ci0KLQkJcmV0dXJuIGVudGlyZUJvdW5kcy5jb250YWlucyhwb2ludGVyKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMaW5rRmlndXJlKCkgewotCQlJdGVyYXRvciBpdCA9IGdldEludGVyZmFjZUVkaXRQYXJ0KCkuZ2V0TGlua0ljb25Db2x1bW4oKS5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBpdGVtID0gaXQubmV4dCgpOwotCQkJaWYgKGl0ZW0uZXF1YWxzKGxpbmtJY29uRmlndXJlKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgUmVjdGFuZ2xlIGdldExpbmtGaWd1cmVCb3VuZHMoKSB7Ci0JCWlmIChjb250YWluc0xpbmtGaWd1cmUoKSkgewotCQkJcmV0dXJuIGxpbmtJY29uRmlndXJlLmdldEJvdW5kcygpOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0gCi0JcHJpdmF0ZSBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIGdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCkgewotCQlJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIG9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciA9IG51bGw7Ci0JCQlpZiAoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkgIT0gbnVsbCkgewotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKSAhPSBudWxsKSB7Ci0JCQkJCU9iamVjdCBhZGFwdGVkID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuY2xhc3MpOwotCQkJCQlpZiAoYWRhcHRlZCBpbnN0YW5jZW9mIElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIpIHsKLQkJCQkJCW9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciA9IChJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKSBhZGFwdGVkOwotCQkJCQkJb3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLnNldE1vZGVsKGdldE1vZGVsKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCXJldHVybiBvcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlZnJlc2hMaW5rRmlndXJlKFBvaW50IHBvaW50KSB7Ci0JCVJlY3RhbmdsZSBmaWdCb3VuZHMgPSBnZXRGaWd1cmUoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRCb3VuZHMoKTsKLQotCQlJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIG9wZW5IZWxwZXIgPSBnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpOwotCQlpZiAob3BlbkhlbHBlciAhPSBudWxsICYmIG9wZW5IZWxwZXIubGlua0FwcGxpY2FibGUoKSkgewotCQkJaWYgKCFmaWd1cmVDb250YWluc0xpbmtGaWd1cmUoZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKS5nZXRMaW5rSWNvbkNvbHVtbigpKSkgewotCQkJCWxpbmtJY29uRmlndXJlID0gbmV3IEJhc2VMaW5rSWNvbkZpZ3VyZSh0aGlzKTsKLQkJCQlnZXRJbnRlcmZhY2VFZGl0UGFydCgpLmdldExpbmtJY29uQ29sdW1uKCkuYWRkKGxpbmtJY29uRmlndXJlKTsKLQkJCX0KLQotCQkJaWYgKG9wZW5IZWxwZXIuaXNWYWxpZCgpKSB7Ci0JCQkJbGlua0ljb25GaWd1cmUuc2V0TGlua0ljb25TdHlsZShCYXNlTGlua0ljb25GaWd1cmUuVkFMSURfU0NIRU1BX0xJTktfU1RZTEUpOwotCi0JCQkJaWYgKHBvaW50ZXJJblJhbmdlKGZpZ0JvdW5kcywgcG9pbnQpKSB7Ci0JCQkJCWVtcGhhc2l6ZUxpbmtGaWd1cmUoKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCXVuZW1waGFzaXplTGlua0ZpZ3VyZSgpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCWxpbmtJY29uRmlndXJlLnNldExpbmtJY29uU3R5bGUoQmFzZUxpbmtJY29uRmlndXJlLklOVkFMSURfU0NIRU1BX0xJTktfU1RZTEUpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJaWYgKGNvbnRhaW5zTGlua0ZpZ3VyZSgpKSB7Ci0JCQkJZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKS5nZXRMaW5rSWNvbkNvbHVtbigpLnJlbW92ZShsaW5rSWNvbkZpZ3VyZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZmlndXJlQ29udGFpbnNMaW5rRmlndXJlKElGaWd1cmUgcGFyZW50KSB7Ci0JCUl0ZXJhdG9yIGl0ID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJaWYgKGl0Lm5leHQoKS5lcXVhbHMobGlua0ljb25GaWd1cmUpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIG9wZW5FeHRlcm5hbEVkaXRvcihQb2ludCBwb2ludCkgewotCQlSZWN0YW5nbGUgbGlua0ZpZ0JvdW5kcyA9IGdldExpbmtGaWd1cmVCb3VuZHMoKTsKLQkJaWYgKGxpbmtGaWdCb3VuZHMgPT0gbnVsbCB8fCBnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpID09IG51bGwpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCVJlY3RhbmdsZSB0ZXN0Ym91bmRzID0gbmV3IFJlY3RhbmdsZShsaW5rRmlnQm91bmRzLngsIGxpbmtGaWdCb3VuZHMueSwgMCwgbGlua0ZpZ0JvdW5kcy5oZWlnaHQpOwotCi0JCWlmIChnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpLmxpbmtBcHBsaWNhYmxlKCkgJiYgcG9pbnRlckluUmFuZ2UodGVzdGJvdW5kcywgcG9pbnQpKSB7Ci0JCQkvLyBPcGVuIGluIFhTRCBFZGl0b3IKLQkJCWdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCkub3BlbkV4dGVybmFsRWRpdG9yKCk7CQkJCSAgCi0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvU2VydmljZUVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvU2VydmljZUVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiY2Y1ZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1NlcnZpY2VFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxpbmVCb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRpcmVjdEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRExhYmVsRGlyZWN0RWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RTZWxlY3Rpb25FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5IZWFkaW5nRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSU5hbWVkRWRpdFBhcnQKLXsKLSAgSUZpZ3VyZSBjb250ZW50UGFuZTsKLSAgSGVhZGluZ0ZpZ3VyZSBoZWFkaW5nRmlndXJlOwotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKQotICB7Ci0JICBMaW5lQm9yZGVyIGJveEZpZ3VyZUxpbmVCb3JkZXIgPSAoTGluZUJvcmRlcikgZmlndXJlLmdldEJvcmRlcigpOwotCSAgYm94RmlndXJlTGluZUJvcmRlci5zZXRXaWR0aCgyKTsKLS8vCSAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5kYXJrQmx1ZSk7Ci0JICBoZWFkaW5nRmlndXJlLnNldFNlbGVjdGVkKHRydWUpOwkgIAotCSAgZmlndXJlLnJlcGFpbnQoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKQotICB7Ci0JICBMaW5lQm9yZGVyIGJveEZpZ3VyZUxpbmVCb3JkZXIgPSAoTGluZUJvcmRlcikgZmlndXJlLmdldEJvcmRlcigpOwotCSAgYm94RmlndXJlTGluZUJvcmRlci5zZXRXaWR0aCgxKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0Q29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IpOwotCSAgaGVhZGluZ0ZpZ3VyZS5zZXRTZWxlY3RlZChmYWxzZSk7Ci0JICBmaWd1cmUucmVwYWludCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgZmlndXJlLnNldEJvcmRlcihuZXcgTGluZUJvcmRlcigxKSk7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsgICAgCi0gICAgaGVhZGluZ0ZpZ3VyZSA9IG5ldyBIZWFkaW5nRmlndXJlKCk7Ci0gICAgCi0gICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGdldE1vZGVsKCkpLmdldEltYWdlKCkpOwkKLSAgICB9Ci0gICAJCi0gICAJZmlndXJlLmFkZChoZWFkaW5nRmlndXJlKTsKLSAgICAgICAgCi0gICAgY29udGVudFBhbmUgPSBuZXcgRmlndXJlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBncmFwaGljcykgCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgIGJvb2xlYW4gaXNGaXJzdCA9IGZhbHNlOwotICAgICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBGaWd1cmUgZmlndXJlID0gKEZpZ3VyZSlpLm5leHQoKTsgICAgICAgICAgICAgIAotICAgICAgICBpZiAoaXNGaXJzdCkKLSAgICAgICAgewotICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgICAgfSAgCi0gICAgICAgIGVsc2UKLSAgICAgICAgeyAgCi0gICAgICAgICAgUmVjdGFuZ2xlIHIgPSBmaWd1cmUuZ2V0Qm91bmRzKCk7ICAgICAgICAgICAgICAKLSAgICAgICAgICBncmFwaGljcy5kcmF3TGluZShyLngsIHIueSArMSwgci54ICsgci53aWR0aCwgci55ICsgMSk7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgICAgfQotICAgIH07Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0MiA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0Mi5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOyAgIAotICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dDIpOwotICAgIGZpZ3VyZS5hZGQoY29udGVudFBhbmUpOwotICAgIAotICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0gICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotICAgIGlmIChpc1JlYWRPbmx5KCkpIAotICAgIHsKLSAgICAgIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKS5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBoZWFkaW5nRmlndXJlLmdldExhYmVsKCkuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LkRJUkVDVF9FRElUX1JPTEUsIG5ldyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3koKSk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyOwotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pewotCSAgaWYgKCFpc0ZpbGVSZWFkT25seSgpICYmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IGhpdFRlc3QoaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLCBjdXJzb3JMb2NhdGlvbikgJiYgIWlzUmVhZE9ubHkoKSkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGhpdFRlc3QoaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLCBjdXJzb3JMb2NhdGlvbikgfHwKLSAgICAgICAgICAgICAgaGl0VGVzdEZpZ3VyZShoZWFkaW5nRmlndXJlLCBjdXJzb3JMb2NhdGlvbikpICYmIGlzUmVhZE9ubHkoKSkgewotICAgICAgZG9PcGVuTmV3RWRpdG9yKCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JICBpZiAocmVxLmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpKSB7Ci0JCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpIHsKLQkgIHJldHVybiBoZWFkaW5nRmlndXJlLmdldExhYmVsKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgewotICAgIElTZXJ2aWNlIHNlcnZpY2UgPSAoSVNlcnZpY2UpZ2V0TW9kZWwoKTsKLSAgICByZXR1cm4gc2VydmljZS5nZXRFbmRQb2ludHMoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7IAotICAgIElTZXJ2aWNlIHNlcnZpY2UgPSAoSVNlcnZpY2UpZ2V0TW9kZWwoKTsKLSAgICBoZWFkaW5nRmlndXJlLnNldElzUmVhZE9ubHkoc2VydmljZS5pc1JlYWRPbmx5KCkpOwotICAgIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKS5zZXRUZXh0KHNlcnZpY2UuZ2V0TmFtZSgpKTsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0Fic3RyYWN0TW9kZWxDb2xsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYTNlOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0Fic3RyYWN0TW9kZWxDb2xsZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiBpbXBsZW1lbnRzIElBU0RPYmplY3QsIElUcmVlRWxlbWVudAotewotICBJQVNET2JqZWN0IG1vZGVsOwotICBTdHJpbmcga2luZDsKLSAgCi0gIHB1YmxpYyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbihJQVNET2JqZWN0IG1vZGVsLCBTdHJpbmcga2luZCkKLSAgewotICAgIHRoaXMubW9kZWwgPSBtb2RlbDsKLSAgICB0aGlzLmtpbmQgPSBraW5kOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gbW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNb2RlbChJQVNET2JqZWN0IG1vZGVsKQotICB7Ci0gICAgdGhpcy5tb2RlbCA9IG1vZGVsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRLaW5kKCkKLSAgewotICAgIHJldHVybiBraW5kOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0S2luZChTdHJpbmcga2luZCkKLSAgewotICAgIHRoaXMua2luZCA9IGtpbmQ7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBJbWFnZSBnZXRTZWNvbmRhcnlJbWFnZSgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgewotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIG1vZGVsLnJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKQotICB7Ci0gICAgbW9kZWwudW5yZWdpc3Rlckxpc3RlbmVyKGxpc3RlbmVyKTsKLSAgfQotCi0gIHB1YmxpYyBDb21tYW5kIGdldERlbGV0ZUNvbW1hbmQoKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQlyZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvQmluZGluZ0NvbHVtbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJhOWZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvQmluZGluZ0NvbHVtbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ0NvbHVtbiBleHRlbmRzIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIHsKLQkgIHB1YmxpYyBCaW5kaW5nQ29sdW1uKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCSAgICBzdXBlcihkZXNjcmlwdGlvbiwgIkJpbmRpbmdDb2x1bW4iKTsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgCi0JICBwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCQlMaXN0IGJpbmRpbmdzID0gKChJRGVzY3JpcHRpb24pbW9kZWwpLmdldEJpbmRpbmdzKCk7Ci0JCQlDb2xsZWN0aW9ucy5zb3J0KGJpbmRpbmdzLCBuZXcgQmluZGluZ0NvbXBhcmF0b3IoKSk7Ci0JCQlPYmplY3QgYXJyYXlbXSA9IGJpbmRpbmdzLnRvQXJyYXkoKTsKLQkJCQotCQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJdHJlZUVsZW1lbnRbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgYXJyYXlbaW5kZXhdOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gdHJlZUVsZW1lbnQ7Ci0JICB9Ci0KLQkgIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQkgIElUcmVlRWxlbWVudCB0cmVlRWxlbWVudFtdID0gZ2V0Q2hpbGRyZW4oKTsKLQkJICBpZiAodHJlZUVsZW1lbnQubGVuZ3RoID4gMCkgewotCQkJICByZXR1cm4gdHJ1ZTsKLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIGZhbHNlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCSAgcmV0dXJuICJkZWZpbml0aW9uIjsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgCi0JICBwcml2YXRlIGNsYXNzIEJpbmRpbmdDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvciB7Ci0JCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCQlpZiAobzEgaW5zdGFuY2VvZiBJQmluZGluZyAmJiBvMiBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMSA9ICgoSUJpbmRpbmcpIG8xKS5nZXRJbnRlcmZhY2UoKTsKLQkJCQkJSUludGVyZmFjZSBpbnRlcmZhY2UyID0gKChJQmluZGluZykgbzIpLmdldEludGVyZmFjZSgpOwotCQkJCQkKLQkJCQkJaWYgKGludGVyZmFjZTEgIT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBuYW1lMSA9ICgoSU5hbWVkT2JqZWN0KSBpbnRlcmZhY2UxKS5nZXROYW1lKCk7Ci0JCQkJCQlTdHJpbmcgbmFtZTIgPSAoKElOYW1lZE9iamVjdCkgaW50ZXJmYWNlMikuZ2V0TmFtZSgpOwotCQkJCQkJcmV0dXJuIG5hbWUxLmNvbXBhcmVUbyhuYW1lMik7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAoaW50ZXJmYWNlMSAhPSBudWxsICYmIGludGVyZmFjZTIgPT0gbnVsbCkgewotCQkJCQkJcmV0dXJuIC0xOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGludGVyZmFjZTEgPT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJCXJldHVybiAxOwotCQkJCQl9Ci0JCQkJfQotCQkJCQotCQkJCXJldHVybiAwOwotCQkJfQotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjNkMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbDsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgewotCXByaXZhdGUgT2JqZWN0IG1vZGVsOwotCQotCXB1YmxpYyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKE9iamVjdCBtb2RlbCkgewotCQl0aGlzLm1vZGVsID0gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKSB7Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSUFjdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSUFjdGlvblByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMzcxNWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0lBY3Rpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1wdWJsaWMgaW50ZXJmYWNlIElBY3Rpb25Qcm92aWRlcgotewotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9JbnRlcmZhY2VDb2x1bW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9JbnRlcmZhY2VDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNkMGYxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSW50ZXJmYWNlQ29sdW1uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklOYW1lZE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnRlcmZhY2VDb2x1bW4gZXh0ZW5kcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiB7Ci0JcHVibGljIEludGVyZmFjZUNvbHVtbihJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJc3VwZXIoZGVzY3JpcHRpb24sICJJbnRlcmZhY2VDb2x1bW4iKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3QgaW50ZXJmYWNlcyA9ICgoSURlc2NyaXB0aW9uKW1vZGVsKS5nZXRJbnRlcmZhY2VzKCk7CQkKLQkJQ29tcGFyYXRvciBjb21wYXJlID0gbmV3IE5hbWVkT2JqZWN0Q29tcGFyYXRvcigpOwotCQlDb2xsZWN0aW9ucy5zb3J0KGludGVyZmFjZXMsIGNvbXBhcmUpOwotCQlPYmplY3QgYXJyYXlbXSA9IGludGVyZmFjZXMudG9BcnJheSgpOwotCQkKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50W2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIGFycmF5W2luZGV4XTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50OwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlJVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnRbXSA9IGdldENoaWxkcmVuKCk7Ci0JCWlmICh0cmVlRWxlbWVudC5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAiZGVmaW5pdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHJpdmF0ZSBjbGFzcyBOYW1lZE9iamVjdENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yewotCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCWlmIChvMSBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCAmJiBvMiBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgewotCQkJCVN0cmluZyBuYW1lMSA9ICgoSU5hbWVkT2JqZWN0KSBvMSkuZ2V0TmFtZSgpOwotCQkJCVN0cmluZyBuYW1lMiA9ICgoSU5hbWVkT2JqZWN0KSBvMikuZ2V0TmFtZSgpOwotCQkJCXJldHVybiBuYW1lMS5jb21wYXJlVG8obmFtZTIpOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvU2VydmljZUNvbHVtbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL1NlcnZpY2VDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2NTk3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvU2VydmljZUNvbHVtbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLkVuZFBvaW50Q29tcGFyYXRvcjsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VDb2x1bW4gZXh0ZW5kcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiB7Ci0JcHVibGljIFNlcnZpY2VDb2x1bW4oSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXN1cGVyKGRlc2NyaXB0aW9uLCAiU2VydmljZUNvbHVtbiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBzZXJ2aWNlcyA9ICgoSURlc2NyaXB0aW9uKW1vZGVsKS5nZXRTZXJ2aWNlcygpOwotCQlDb2xsZWN0aW9ucy5zb3J0KHNlcnZpY2VzLCBuZXcgU2VydmljZUNvbXBhcmF0b3IoKSk7Ci0JCU9iamVjdCBhcnJheVtdID0gc2VydmljZXMudG9BcnJheSgpOwotCQkKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50W2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIGFycmF5W2luZGV4XTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBnZXRDaGlsZHJlbigpOwotCQlpZiAodHJlZUVsZW1lbnQubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gImRlZmluaXRpb24iOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXByaXZhdGUgY2xhc3MgU2VydmljZUNvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKLQkJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0JCQlpZiAobzEgaW5zdGFuY2VvZiBJU2VydmljZSAmJiBvMiBpbnN0YW5jZW9mIElTZXJ2aWNlKSB7Ci0JCQkJSUVuZFBvaW50IGVuZFBvaW50MSA9IGdldEZpcnN0QXNzb2NpYXRlZEVuZFBvaW50KChJU2VydmljZSkgbzEpOwotCQkJCUlFbmRQb2ludCBlbmRQb2ludDIgPSBnZXRGaXJzdEFzc29jaWF0ZWRFbmRQb2ludCgoSVNlcnZpY2UpIG8yKTsKLQkJCQkKLQkJCQlFbmRQb2ludENvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBFbmRQb2ludENvbXBhcmF0b3IoKTsKLQkJCQlyZXR1cm4gY29tcGFyYXRvci5jb21wYXJlKGVuZFBvaW50MSwgZW5kUG9pbnQyKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJCi0JCXByaXZhdGUgSUVuZFBvaW50IGdldEZpcnN0QXNzb2NpYXRlZEVuZFBvaW50KElTZXJ2aWNlIHNlcnZpY2UpIHsKLQkJCUl0ZXJhdG9yIGVuZFBvaW50cz0gc2VydmljZS5nZXRFbmRQb2ludHMoKS5pdGVyYXRvcigpOwotCQkJCi0JCQl3aGlsZSAoZW5kUG9pbnRzLmhhc05leHQoKSkgewotCQkJCUlFbmRQb2ludCB0ZW1wRW5kUG9pbnQgPSAoSUVuZFBvaW50KSBlbmRQb2ludHMubmV4dCgpOwotCQkJCWlmICh0ZW1wRW5kUG9pbnQuZ2V0QmluZGluZygpICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIHRlbXBFbmRQb2ludDsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBudWxsOwotCQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0REcmFnQW5kRHJvcENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0REcmFnQW5kRHJvcENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzMDFkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlQ2FudmFzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYucmVxdWVzdHMuQ2hhbmdlQm91bmRzUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REcmFnQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERyYWdSZW9yZGVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLk1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5QYXJhbWV0ZXJFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTRERyYWdBbmREcm9wQ29tbWFuZCBleHRlbmRzIENvbW1hbmQgewotCSAgcHJvdGVjdGVkIEVkaXRQYXJ0Vmlld2VyIHZpZXdlcjsgICAgCi0JICBwcm90ZWN0ZWQgQ2hhbmdlQm91bmRzUmVxdWVzdCByZXF1ZXN0OwotCSAgcHJvdGVjdGVkIFBvaW50IGxvY2F0aW9uOwotCSAgcHJvdGVjdGVkIEFTRERyYWdBY3Rpb24gZHJhZ0FjdGlvbjsgICAgCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiBjYW5FeGVjdXRlID0gZmFsc2U7Ci0KLQkgIHB1YmxpYyBBU0REcmFnQW5kRHJvcENvbW1hbmQoRWRpdFBhcnRWaWV3ZXIgdmlld2VyLCBDaGFuZ2VCb3VuZHNSZXF1ZXN0IHJlcXVlc3QpCi0JICB7Ci0JICAgIHRoaXMudmlld2VyID0gdmlld2VyOwotCSAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwotCi0JICAgIGxvY2F0aW9uID0gcmVxdWVzdC5nZXRMb2NhdGlvbigpOyAgIAotCSAgICBFZGl0UGFydCB0YXJnZXRFZGl0UGFydCA9IHZpZXdlci5maW5kT2JqZWN0QXQobG9jYXRpb24pOyAKLQotCSAgICBpZiAodGFyZ2V0RWRpdFBhcnQgaW5zdGFuY2VvZiBQYXJhbWV0ZXJFZGl0UGFydCB8fCB0YXJnZXRFZGl0UGFydCBpbnN0YW5jZW9mIE1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydCkgewotCSAgICAJKChHcmFwaGljYWxFZGl0UGFydCl2aWV3ZXIuZ2V0Um9vdEVkaXRQYXJ0KCkpLmdldEZpZ3VyZSgpLnRyYW5zbGF0ZVRvUmVsYXRpdmUobG9jYXRpb24pOwotCSAgICAJR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nQ2hpbGRFZGl0UGFydDsKLQkgICAgCVZlY3RvciBkcmFnQWN0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLQkgICAgCWlmIChyZXF1ZXN0LmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfQUREKSkgeyAvLyBUaGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgUkVRX0FERC4uLi4KLQkgICAgCQlMaXN0IGxpc3QgPSByZXF1ZXN0LmdldEVkaXRQYXJ0cygpOwotCSAgICAJCWlmIChsaXN0LnNpemUoKSA8PSAwKSB7Ci0JICAgIAkJCWNhbkV4ZWN1dGUgPSBmYWxzZTsKLQkgICAgCQkJcmV0dXJuOwotCSAgICAJCX0KLQkgICAgCQkKLQkgICAgCQkvLyBHcmFiYmluZyB0aGUgZmlzdCBzZWxlY3Rpb24KLQkgICAgCQltb3ZpbmdDaGlsZEVkaXRQYXJ0ID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBsaXN0LmdldCgwKTsKLQkgICAgCQlPYmplY3QgbW9kZWwgPSBtb3ZpbmdDaGlsZEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JICAgIAkJRWRpdFBhcnQgcG9pbnRlckVkaXRQYXJ0ID0gdmlld2VyLmZpbmRPYmplY3RBdChsb2NhdGlvbik7Ci0JICAgIAkJCi0JICAgIAkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCSAgICAJCQlkcmFnQWN0aW9ucy5hZGQobmV3IEFTRERyYWdSZW9yZGVyQWN0aW9uKG1vdmluZ0NoaWxkRWRpdFBhcnQsIHBvaW50ZXJFZGl0UGFydCwgZ2V0UG9pbnRlckxvY2F0aW9uKGxvY2F0aW9uKSkpOwotCSAgICAJCX0KLQkgICAgCQllbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JICAgIAkJCUlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vZGVsOwotCSAgICAJCQlpZiAobWVzc2FnZVJlZi5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCB8fCBtZXNzYWdlUmVmLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkgewotCSAgICAJCQkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBBU0REcmFnUmVvcmRlckFjdGlvbihtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBwb2ludGVyRWRpdFBhcnQsIGdldFBvaW50ZXJMb2NhdGlvbihsb2NhdGlvbikpKTsKLS8vCSAgICAJCQkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBXU0RMRHJhZ1NldE1lc3NhZ2VBY3Rpb24obW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckVkaXRQYXJ0LCBsb2NhdGlvbikpOwotCSAgICAJCQl9Ci0JICAgIAkJfQotCSAgICAJCQotLy8JICAgIAkJZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBGYXVsdCkgewotLy8JICAgIAkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBXU0RMRHJhZ1NldE1lc3NhZ2VBY3Rpb24obW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckVkaXRQYXJ0LCBsb2NhdGlvbikpOwotLy8JICAgIAkJfSAgICAgICAgICAgIAotCSAgICAJfQotLy8JICAgIAllbHNlIGlmIChyZXF1ZXN0LmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfQ0xPTkUpKSB7Ci0vLwkgICAgCUxpc3QgbGlzdCA9IHJlcXVlc3QuZ2V0RWRpdFBhcnRzKCk7Ci0vLwkgICAgCWlmIChsaXN0LnNpemUoKSA+IDApCi0vLwkgICAgCXsKLS8vCSAgICAJLy8gR3JhYmJpbmcgdGhlIGZpc3Qgc2VsZWN0aW9uCi0vLwkgICAgCW1vdmluZ0NoaWxkRWRpdFBhcnQgPSAoV1NETFRyZWVOb2RlRWRpdFBhcnQpIGxpc3QuZ2V0KDApOwotLy8JICAgIAkKLS8vCSAgICAJZHJhZ0FjdGlvbnMuYWRkKG5ldyBDb3B5V1NETEVsZW1lbnRBY3Rpb24odmlld2VyLAotLy8JICAgIAkoV1NETEVsZW1lbnQpIG1vdmluZ0NoaWxkRWRpdFBhcnQuZ2V0TW9kZWwoKSwKLS8vCSAgICAJKFdTRExFbGVtZW50KSB0YXJnZXRFZGl0UGFydC5nZXRNb2RlbCgpLAotLy8JICAgIAludWxsKSk7Ci0vLwkgICAgCX0KLS8vCSAgICAJfQotCSAgICAJCi0JICAgIAlJdGVyYXRvciBpdCA9IGRyYWdBY3Rpb25zLml0ZXJhdG9yKCk7Ci0JICAgIAl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JICAgIAkJZHJhZ0FjdGlvbiA9IChBU0REcmFnQWN0aW9uKSBpdC5uZXh0KCk7Ci0JICAgIAkJY2FuRXhlY3V0ZSA9IGRyYWdBY3Rpb24uY2FuRXhlY3V0ZSgpOwotCSAgICAJCWlmIChjYW5FeGVjdXRlKQotCSAgICAJCQlicmVhazsKLQkgICAgCX0KLQkgICAgfQotCSAgfQotCSAgCi0JICBwdWJsaWMgYm9vbGVhbiBjYW5FeGVjdXRlKCkKLQkgIHsgCi0JICAgIHJldHVybiBjYW5FeGVjdXRlOwotCSAgfSAgICAgCi0JICAKLQkgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JICAgIGlmIChjYW5FeGVjdXRlKQotCSAgICB7IAotCSAgICAgIGRyYWdBY3Rpb24ucnVuKCk7IAotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJRmlndXJlIGdldEZlZWRiYWNrRmlndXJlKCkgewotCSAgCWlmIChkcmFnQWN0aW9uICE9IG51bGwpIHsKLQkgIAkJcmV0dXJuIGRyYWdBY3Rpb24uZ2V0RmVlZGJhY2tGaWd1cmUoKTsKLQkgIAl9Ci0JICAJZWxzZSB7Ci0JICAJCXJldHVybiBudWxsOwotCSAgCX0KLQkgIH0KLQkgIAotCSAgLyoKLQkgICAqIFRoaXMgbWV0aG9kIGNvbXBlbnNhdGVzIGZvciB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24KLQkgICAqLwotCSAgcHJpdmF0ZSBQb2ludCBnZXRQb2ludGVyTG9jYXRpb24oUG9pbnQgb3JpZ1BvaW50ZXJMb2NhdGlvbikgewotCSAgCSBQb2ludCBjb21wZW5zYXRlZExvY2F0aW9uID0gb3JpZ1BvaW50ZXJMb2NhdGlvbjsKLQkgIAkgRmlndXJlQ2FudmFzIGZpZ3VyZUNhbnZhcyA9IChGaWd1cmVDYW52YXMpIHZpZXdlci5nZXRDb250cm9sKCk7Ci0JICAgICBpbnQgeU9mZnNldCA9IGZpZ3VyZUNhbnZhcy5nZXRWaWV3cG9ydCgpLmdldFZlcnRpY2FsUmFuZ2VNb2RlbCgpLmdldFZhbHVlKCk7Ci0JICAgICBjb21wZW5zYXRlZExvY2F0aW9uLnkgPSBjb21wZW5zYXRlZExvY2F0aW9uLnkgKyB5T2Zmc2V0OwotCSAgICAgCi0JICAgICByZXR1cm4gY29tcGVuc2F0ZWRMb2NhdGlvbjsKLQkgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMjNlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRERyYWdBbmREcm9wRWRpdFBvbGljeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5DaGFuZ2VCb3VuZHNSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5IGV4dGVuZHMgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwb2xpY2llcy5HcmFwaGljYWxFZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgRWRpdFBhcnRWaWV3ZXIgdmlld2VyOwotCXByb3RlY3RlZCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5OwotCQotCXB1YmxpYyBBU0REcmFnQW5kRHJvcEVkaXRQb2xpY3koRWRpdFBhcnRWaWV3ZXIgdmlld2VyLCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KSB7Ci0JCXRoaXMudmlld2VyID0gdmlld2VyOwotCQl0aGlzLnNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5ID0gc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3k7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdW5kZXJzdGFuZHNSZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JCXJldHVybiB0cnVlOwotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotCXB1YmxpYyBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZCBnZXRDb21tYW5kKFJlcXVlc3QgcmVxdWVzdCkgeyAgICAgICAgICAgICAKLQkJQVNERHJhZ0FuZERyb3BDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotCQlpZiAocmVxdWVzdCBpbnN0YW5jZW9mIENoYW5nZUJvdW5kc1JlcXVlc3QpIHsKLQkJCWNvbW1hbmQgPSBuZXcgQVNERHJhZ0FuZERyb3BDb21tYW5kKHZpZXdlciwgKENoYW5nZUJvdW5kc1JlcXVlc3QpcmVxdWVzdCk7Ci0JCQlzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeS5zZXREcmFnQW5kRHJvcENvbW1hbmQoY29tbWFuZCk7Ci0JCX0gCi0JCXJldHVybiBjb21tYW5kOyAgICAgICAgICAgICAKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RHcmFwaE5vZGVEcmFnVHJhY2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTlmNmM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RHcmFwaE5vZGVEcmFnVHJhY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EcmFnRWRpdFBhcnRzVHJhY2tlcjsKLQotcHVibGljIGNsYXNzIEFTREdyYXBoTm9kZURyYWdUcmFja2VyIGV4dGVuZHMgRHJhZ0VkaXRQYXJ0c1RyYWNrZXIgIHsKLQlwcm90ZWN0ZWQgRWRpdFBhcnQgZWRpdFBhcnQ7IAotCQotCXB1YmxpYyBBU0RHcmFwaE5vZGVEcmFnVHJhY2tlcihFZGl0UGFydCBlZGl0UGFydCkgewotCQlzdXBlcihlZGl0UGFydCk7Ci0JCXRoaXMuZWRpdFBhcnQgPSBlZGl0UGFydDsKLQl9IAotCQotCXByb3RlY3RlZCBDb21tYW5kIGdldENvbW1hbmQoKSB7IAotCQlSZXF1ZXN0IHJlcXVlc3QgPSBnZXRUYXJnZXRSZXF1ZXN0KCk7Ci0JCXJldHVybiBlZGl0UGFydC5nZXRDb21tYW5kKHJlcXVlc3QpOyAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRExhYmVsRGlyZWN0RWRpdFBvbGljeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRExhYmVsRGlyZWN0RWRpdFBvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTRiNmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3kuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBvbGljaWVzLkRpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkRpcmVjdEVkaXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkVuZFBvaW50RWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3kgZXh0ZW5kcyBEaXJlY3RFZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgQ29tbWFuZCBnZXREaXJlY3RFZGl0Q29tbWFuZChEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSB7Ci0JCUNvbW1hbmQgY29tbWFuZCA9IG51bGw7Ci0JCVN0cmluZyBsYWJlbFRleHQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldENlbGxFZGl0b3IoKS5nZXRWYWx1ZSgpOwotCQlFZGl0UGFydCBlZGl0UGFydD0gZ2V0SG9zdCgpOwotCi0JCS8vIFRPRE86IHJtYWg6ICBTdGFydCBWRVJZIFVHTFkgSEFDSy4uLi4gIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciB3YXkgdG8gc29sdmUgdGhpcyBpc3N1ZSBhdCB0aGlzIHRpbWUuCi0JCS8vIEVuZFBvaW50RWRpdFBhcnQgY29udGFpbnMgdHdvIGxhYmVscyB3aGljaCBjYW4gYmUgZGlyZWN0IGVkaXRlZC4gIFRoZSBmYWNhZGUgZHJpdmluZyBFbmRQb2ludEVkaXRQYXJ0Ci0JCS8vIGNvbnRhaW5zIGEgZ2V0U2V0TmFtZUNvbW1hbmQoKSBhbmQgYSBnZXRTZXRBZGRyZXNzQ29tbWFuZCgpLi4uIGhvd2V2ZXIsIHRoaXMgY2xhc3MgKExhYmVsRGlyZWN0RWRpdFBvbGljeSkKLQkJLy8gb25seSBrbm93cyBhYm91dCBnZXRTZXROYW1lQ29tbWFuZCgpLi4uLi4gIFRoaXMgaXMgdGhlIHByb2JsZW0gd2UgZmFjZSB3aGVuIGNvbWJpbmluZyB0d28gbGFiZWxzIGludG8KLQkJLy8gb25lIEVkaXRQYXJ0Li4uLi4KLQkJaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgRW5kUG9pbnRFZGl0UGFydCkgewotCQkJY29tbWFuZCA9ICgoRW5kUG9pbnRFZGl0UGFydCkgZWRpdFBhcnQpLmdldFNldFByb3BlckxhYmVsQ29tbWFuZChsYWJlbFRleHQpOwotCQl9Ci0JCS8vIEVuZCBWRVJZIFVHTFkgSEFDSwotCQllbHNlIGlmIChlZGl0UGFydC5nZXRNb2RlbCgpIGluc3RhbmNlb2YgSU5hbWVkT2JqZWN0KSB7Ci0JCQljb21tYW5kID0gKChJTmFtZWRPYmplY3QpIGVkaXRQYXJ0LmdldE1vZGVsKCkpLmdldFNldE5hbWVDb21tYW5kKGxhYmVsVGV4dCk7Ci0JCX0KLQotCQlyZXR1cm4gY29tbWFuZDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzaG93Q3VycmVudEVkaXRWYWx1ZShEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSB7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RTZWxlY3Rpb25FZGl0UG9saWN5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNEU2VsZWN0aW9uRWRpdFBvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2FmZmY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RTZWxlY3Rpb25FZGl0UG9saWN5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBvbGljaWVzLlNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkNoYW5nZUJvdW5kc1JlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuSUZlZWRiYWNrSGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEFTRFNlbGVjdGlvbkVkaXRQb2xpY3kgZXh0ZW5kcyBTZWxlY3Rpb25FZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgQVNERHJhZ0FuZERyb3BDb21tYW5kIGRyYWdBbmREcm9wQ29tbWFuZDsKLQlwcm90ZWN0ZWQgSUZpZ3VyZSBmZWVkYmFjazsKLQotCSAgcHVibGljIHZvaWQgc2V0RHJhZ0FuZERyb3BDb21tYW5kKEFTRERyYWdBbmREcm9wQ29tbWFuZCBkcmFnQW5kRHJvcENvbW1hbmQpIHsKLQkgICAgdGhpcy5kcmFnQW5kRHJvcENvbW1hbmQgPSBkcmFnQW5kRHJvcENvbW1hbmQ7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNob3dTb3VyY2VGZWVkYmFjayhSZXF1ZXN0IHJlcXVlc3QpCi0JICB7Ci0JICAJZXJhc2VDaGFuZ2VCb3VuZHNGZWVkYmFjayhudWxsKTsKLQkgIAkKLQkgIAlpZiAoZHJhZ0FuZERyb3BDb21tYW5kICE9IG51bGwgJiYgZHJhZ0FuZERyb3BDb21tYW5kLmNhbkV4ZWN1dGUoKSkgewotCQkgIGlmIChSRVFfTU9WRS5lcXVhbHMocmVxdWVzdC5nZXRUeXBlKCkpIHx8IFJFUV9BREQuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkgewotCQkJICBzaG93TW92ZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKChDaGFuZ2VCb3VuZHNSZXF1ZXN0KSByZXF1ZXN0KTsKLQkJICB9Ci0vLwkJICBlbHNlIGlmIChSRVFfQ0xPTkUuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkgewotLy8JCSAgCSAgc2hvd0NvcHlDaGFuZ2VCb3VuZHNGZWVkYmFjaygoQ2hhbmdlQm91bmRzUmVxdWVzdCkgcmVxdWVzdCk7Ci0vLwkJICB9Ci0JICAJfQotCSAgfQotCSAgCi0JICAvKioKLQkgICAqIEVyYXNlIGZlZWRiYWNrIGluZGljYXRpbmcgdGhhdCB0aGUgcmVjZWl2ZXIgb2JqZWN0IGlzIAotCSAgICogYmVpbmcgZHJhZ2dlZC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGEgZHJhZyBpcwotCSAgICogY29tcGxldGVkIG9yIGNhbmNlbGxlZCBvbiB0aGUgcmVjZWl2ZXIgb2JqZWN0LgotCSAgICogQHBhcmFtIGRyYWdUcmFja2VyIG9yZy5lY2xpcHNlLmdlZi50b29scy5EcmFnVHJhY2tlciBUaGUgZHJhZyB0cmFja2VyIG9mIHRoZSB0b29sIHBlcmZvcm1pbmcgdGhlIGRyYWcuCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIGVyYXNlU291cmNlRmVlZGJhY2soUmVxdWVzdCByZXF1ZXN0KSAKLQkgIHsKLQkgICAgaWYgKFJFUV9NT1ZFLmVxdWFscyhyZXF1ZXN0LmdldFR5cGUoKSkgfHwgIFJFUV9BREQuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkKLQkgICAgewotCQkJICBlcmFzZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKChDaGFuZ2VCb3VuZHNSZXF1ZXN0KXJlcXVlc3QpOwotCSAgICB9Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAgICogRXJhc2UgZmVlZGJhY2sgaW5kaWNhdGluZyB0aGF0IHRoZSByZWNlaXZlciBvYmplY3QgaXMgCi0JICAgKiBiZWluZyBkcmFnZ2VkLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBkcmFnIGlzCi0JICAgKiBjb21wbGV0ZWQgb3IgY2FuY2VsbGVkIG9uIHRoZSByZWNlaXZlciBvYmplY3QuCi0JICAgKiBAcGFyYW0gZHJhZ1RyYWNrZXIgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRyYWdUcmFja2VyIFRoZSBkcmFnIHRyYWNrZXIgb2YgdGhlIHRvb2wgcGVyZm9ybWluZyB0aGUgZHJhZy4KLQkgICAqLwotCSAgcHJvdGVjdGVkIHZvaWQgZXJhc2VDaGFuZ2VCb3VuZHNGZWVkYmFjayhDaGFuZ2VCb3VuZHNSZXF1ZXN0IHJlcXVlc3QpIAotCSAgewotCQkgIGlmIChmZWVkYmFjayAhPSBudWxsKSAKLQkgICAgewkJICAgICAgCi0JCQkgIHJlbW92ZUZlZWRiYWNrKGZlZWRiYWNrKTsKLQkJICB9Ci0JCSAgZmVlZGJhY2sgPSBudWxsOwotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgdm9pZCBzaG93TW92ZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKENoYW5nZUJvdW5kc1JlcXVlc3QgcmVxdWVzdCkKLQkgIHsKLQkgIAlpZiAoZHJhZ0FuZERyb3BDb21tYW5kICE9IG51bGwgJiYgZHJhZ0FuZERyb3BDb21tYW5kLmdldEZlZWRiYWNrRmlndXJlKCkgIT0gbnVsbCkgewotCSAgCQlmZWVkYmFjayA9IGRyYWdBbmREcm9wQ29tbWFuZC5nZXRGZWVkYmFja0ZpZ3VyZSgpOwotCSAgCQlhZGRGZWVkYmFjayhmZWVkYmFjayk7Ci0JICAJfQotCSAgfSAKLQkgIAotCXByb3RlY3RlZCB2b2lkIGhpZGVTZWxlY3Rpb24oKSB7Ci0JCWlmIChnZXRIb3N0KCkgaW5zdGFuY2VvZiBJRmVlZGJhY2tIYW5kbGVyKSB7Ci0JCQkJKChJRmVlZGJhY2tIYW5kbGVyKSBnZXRIb3N0KCkpLnJlbW92ZUZlZWRiYWNrKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzaG93U2VsZWN0aW9uKCkgewotCQlpZiAoZ2V0SG9zdCgpIGluc3RhbmNlb2YgSUZlZWRiYWNrSGFuZGxlcikgewotCQkJKChJRmVlZGJhY2tIYW5kbGVyKSBnZXRIb3N0KCkpLmFkZEZlZWRiYWNrKCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9CYXNlTGlua0ljb25GaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQmFzZUxpbmtJY29uRmlndXJlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NTNlMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9CYXNlTGlua0ljb25GaWd1cmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLQotcHVibGljIGNsYXNzIEJhc2VMaW5rSWNvbkZpZ3VyZSBleHRlbmRzIEZpZ3VyZSB7Ci0JcHVibGljIHN0YXRpYyBpbnQgVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgPSAxOwotCXB1YmxpYyBzdGF0aWMgaW50IElOVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgPSAyOwotCi0JcHJpdmF0ZSBpbnQgbGlua0ljb25TdHlsZSA9IFZBTElEX1NDSEVNQV9MSU5LX1NUWUxFOwkKLQlwcml2YXRlIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQ7Ci0JcHJpdmF0ZSBMaXN0IGNoaWxkRmlndXJlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwdWJsaWMgaW50IGZpZ3VyZVNwYWNpbmcgPSA3OwotCi0JcHVibGljIEJhc2VMaW5rSWNvbkZpZ3VyZShBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVwKSB7Ci0JCWVkaXRQYXJ0ID0gZXA7Ci0KLQkJVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKSB7Ci0JCQlwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpIHsKLQkJCQlzdXBlci5sYXlvdXQocGFyZW50KTsKLQotCQkJCUFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZXAgPSBnZXRBc3NvY2lhdGVkRWRpdFBhcnQoKTsKLQkJCQlJRmlndXJlIGFzc29jaWF0ZWRGaWd1cmUgPSBlcC5nZXRGaWd1cmUoKTsKLQkJCQlpZiAoYXNzb2NpYXRlZEZpZ3VyZSAhPSBudWxsKSB7Ci0JCQkJCS8vIFVwZGF0ZSB0aGUgYm91bmRzCi0JCQkJCVJlY3RhbmdsZSBhc3NvY2lhdGVkQm91bmRzID0gYXNzb2NpYXRlZEZpZ3VyZS5nZXRCb3VuZHMoKTsKLQkJCQkJaW50IHggPSBhc3NvY2lhdGVkQm91bmRzLnggKyBhc3NvY2lhdGVkQm91bmRzLndpZHRoOwotCQkJCQlpbnQgeSA9IGFzc29jaWF0ZWRCb3VuZHMueTsKLQkJCQkJaW50IHdpZHRoID0gZ2V0U2l6ZSgpLndpZHRoOwotCQkJCQlpbnQgaGVpZ2h0ID0gYXNzb2NpYXRlZEJvdW5kcy5oZWlnaHQ7Ci0KLQkJCQkJUmVjdGFuZ2xlIG5ld0ZpZ0JvdW5kcyA9IG5ldyBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0JCQkJCS8vIFNldCBteSBib3VuZHMgYmFzZWQgb24gbXkgYXNzb2NpYXRlZCBlZGl0cGFydAotCQkJCQlzZXRCb3VuZHMobmV3RmlnQm91bmRzKTsKLQotCQkJCQkvLyBMYXlvdXQgdGhlIGNoaWxkcmVuCi0JCQkJCUl0ZXJhdG9yIGl0ID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCQkJSUZpZ3VyZSBmaWcgPSAoSUZpZ3VyZSkgaXQubmV4dCgpOwotCQkJCQkJUG9pbnQgbmV3UG9pbnQgPSBuZXcgUG9pbnQoeCwgeSk7Ci0KLQkJCQkJCS8vIEluZGVudCB0aGUgZmlndXJlIHRvIHRoZSByaWdodCB0byBzaG93IHRoZSAiYnJva2VuIiBzY2hlbWEgbGluayBmaWd1cmUKLQkJCQkJCWlmIChmaWcgaW5zdGFuY2VvZiBSaWdodEludmFsaWRJY29uRmlndXJlKSB7Ci0JCQkJCQkJbmV3UG9pbnQueCA9IG5ld1BvaW50LnggKyBmaWd1cmVTcGFjaW5nOwotCQkJCQkJfQotCi0JCQkJCQlmaWcuc2V0TG9jYXRpb24obmV3UG9pbnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9OwotCQlzZXRMYXlvdXRNYW5hZ2VyKGxheW91dCk7Ci0KLQkJLy8gRGVmYXVsdCB0byBhIFZhbGlkTGlua0ljb25GaWd1cmUKLQkJbGlua0ljb25TdHlsZSA9IFZBTElEX1NDSEVNQV9MSU5LX1NUWUxFOwotCQlhZGRDaGlsZEZpZ3VyZShuZXcgVmFsaWRMaW5rSWNvbkZpZ3VyZSgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVtb3ZlQ2hpbGRGaWd1cmVzKCkgewotCQlJdGVyYXRvciBpdCA9IGNoaWxkRmlndXJlcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlyZW1vdmUoKElGaWd1cmUpIGl0Lm5leHQoKSk7Ci0JCX0KLQotCQljaGlsZEZpZ3VyZXMuY2xlYXIoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkQ2hpbGRGaWd1cmUoSUZpZ3VyZSBmaWcpIHsKLQkJY2hpbGRGaWd1cmVzLmFkZChmaWcpOwotCQlhZGQoZmlnKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRMaW5rSWNvblN0eWxlKGludCBzdHlsZSkgewotCQlpZiAoc3R5bGUgPT0gVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgJiYgbGlua0ljb25TdHlsZSAhPSBWQUxJRF9TQ0hFTUFfTElOS19TVFlMRSkgewotCQkJcmVtb3ZlQ2hpbGRGaWd1cmVzKCk7Ci0JCQlhZGRDaGlsZEZpZ3VyZShuZXcgVmFsaWRMaW5rSWNvbkZpZ3VyZSgpKTsKLQkJfQotCQllbHNlIGlmIChzdHlsZSA9PSBJTlZBTElEX1NDSEVNQV9MSU5LX1NUWUxFICYmIGxpbmtJY29uU3R5bGUgIT0gSU5WQUxJRF9TQ0hFTUFfTElOS19TVFlMRSkgewotCQkJcmVtb3ZlQ2hpbGRGaWd1cmVzKCk7Ci0JCQlhZGRDaGlsZEZpZ3VyZShuZXcgTGVmdEludmFsaWRJY29uRmlndXJlKCkpOwotCQkJYWRkQ2hpbGRGaWd1cmUobmV3IFJpZ2h0SW52YWxpZEljb25GaWd1cmUoKSk7Ci0JCX0KLQotCQlsaW5rSWNvblN0eWxlID0gc3R5bGU7Ci0JfQotCi0JcHVibGljIGludCBnZXRMaW5rSWNvblN0eWxlKCkgewotCQlyZXR1cm4gbGlua0ljb25TdHlsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDb2xvcihDb2xvciBjb2xvcikgewotCQlJdGVyYXRvciBpdCA9IGNoaWxkRmlndXJlcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlJRmlndXJlIGZpZyA9IChJRmlndXJlKSBpdC5uZXh0KCk7Ci0JCQlmaWcuc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKLQkJCWZpZy5zZXRGb3JlZ3JvdW5kQ29sb3IoY29sb3IpOwotCQl9Ci0JfQotCi0JcHVibGljIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0QXNzb2NpYXRlZEVkaXRQYXJ0KCkgewotCQlyZXR1cm4gZWRpdFBhcnQ7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBMZWZ0SW52YWxpZEljb25GaWd1cmUgZXh0ZW5kcyBMaW5rSWNvbkZpZ3VyZSB7Ci0JCXB1YmxpYyBMZWZ0SW52YWxpZEljb25GaWd1cmUoKSB7Ci0JCQlzdXBlcihudWxsKTsKLQkJCVBvaW50TGlzdCBwb2ludHMgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JCQkKLQkJCS8vIERyYXcgdGhlIGFycm93Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDUsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA3LCAwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gdG9wIHNsYXNoCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA1LCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDIsIDEwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gYm90dG9tIHNsYXNoCi0KLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDQsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLQkJCXNldEZpbGwodHJ1ZSk7Ci0JCQlzZXRQb2ludHMocG9pbnRzKTsKLQkJfQotCi0JCS8vIFdlIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSB3aWR0aCBiZWNhdXNlIHdlIGluZGVudCB0aGUgZmlndXJlIHRvd2FyZHMgdGhlIHJpZ2h0LgotCQkvLyBTbyB3ZSBpbmRlbnQgYnkgdGhhdCBzYW1lIGFtb3VudCBzdG9yZWQgaW4gaG9yaXpvbnRhbEJ1ZmZlcgotCQlwdWJsaWMgRGltZW5zaW9uIGdldFByZWZlcnJlZFNpemUoaW50IHdIaW50LCBpbnQgaEhpbnQpIHsKLQkJCURpbWVuc2lvbiBkaW1lbnNpb24gPSBzdXBlci5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ci0JCQlkaW1lbnNpb24ud2lkdGggPSBkaW1lbnNpb24ud2lkdGggKyBob3Jpem9udGFsQnVmZmVyOwotCi0JCQlyZXR1cm4gZGltZW5zaW9uOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0TG9jYXRpb24oUG9pbnQgcG9pbnQpIHsKLQkJCXN1cGVyLnNldExvY2F0aW9uKHBvaW50KTsKLQkJCS8vIFVwZGF0ZSB0aGUgcG9pbnRzIHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2QgY2FsbAotCQkJc2V0RmlndXJlTG9jYXRpb24ocG9pbnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBSaWdodEludmFsaWRJY29uRmlndXJlIGV4dGVuZHMgTGlua0ljb25GaWd1cmUgewotCQlwdWJsaWMgUmlnaHRJbnZhbGlkSWNvbkZpZ3VyZSgpIHsKLQkJCXN1cGVyKG51bGwpOwotCQkJUG9pbnRMaXN0IHBvaW50cyA9IG5ldyBQb2ludExpc3QoKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA3LCAwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gdG9wIHNsYXNoCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA1LCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDEwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTAsIDAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDUgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTAsIDEwICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDEwLCA2ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAyLCAxMCArIHZlcnRpY2FsQnVmZmVyKSk7CS8vIGJvdHRvbSBzbGFzaAotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0KLQkJCXNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotCQkJc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRGaWxsKHRydWUpOwotCQkJc2V0UG9pbnRzKHBvaW50cyk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihQb2ludCBwb2ludCkgewotCQkJc3VwZXIuc2V0TG9jYXRpb24ocG9pbnQpOwotCQkJc2V0RmlndXJlTG9jYXRpb24ocG9pbnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBWYWxpZExpbmtJY29uRmlndXJlIGV4dGVuZHMgTGVmdEludmFsaWRJY29uRmlndXJlIHsKLQkJcHVibGljIFZhbGlkTGlua0ljb25GaWd1cmUoKSB7Ci0JCQlQb2ludExpc3QgcG9pbnRzID0gbmV3IFBvaW50TGlzdCgpOwotCi0JCQkvLyBEcmF3IHRoZSBhcnJvdwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgMCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAyMCwgNSArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgMTAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLQkJCXNldEZpbGwodHJ1ZSk7Ci0JCQlzZXRQb2ludHMocG9pbnRzKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQm94Q29tcG9uZW50RmlndXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0JveENvbXBvbmVudEZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2RiYzI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQm94Q29tcG9uZW50RmlndXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci0KLXB1YmxpYyBjbGFzcyBCb3hDb21wb25lbnRGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgcHVibGljIEhlYWRpbmdGaWd1cmUgaGVhZGluZ0ZpZ3VyZTsKLSAgRmlndXJlIGNvbnRlbnRQYW5lOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NlbGVjdGVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzUmVhZE9ubHkgPSBmYWxzZTsKLQotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZChib29sZWFuIGlzU2VsZWN0ZWQpCi0gIHsKLSAgICBoZWFkaW5nRmlndXJlLnNldFNlbGVjdGVkKGlzU2VsZWN0ZWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SXNSZWFkT25seShib29sZWFuIGlzUmVhZE9ubHkpCi0gIHsKLSAgICB0aGlzLmlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5OwotICB9Ci0KLSAgcHVibGljIEJveENvbXBvbmVudEZpZ3VyZSgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGhlYWRpbmdGaWd1cmUgPSBuZXcgSGVhZGluZ0ZpZ3VyZSgpOwotICAgIGFkZChoZWFkaW5nRmlndXJlKTsKLSAgICBjb250ZW50UGFuZSA9IG5ldyBMaXN0RmlndXJlKCk7Ci0gICAgY29udGVudFBhbmUuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCgpKTsKLSAgICBhZGQoY29udGVudFBhbmUpOwotICB9Ci0KLSAgcHVibGljIEZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0gIHsKLSAgICByZXR1cm4gY29udGVudFBhbmU7Ci0gIH0KLQotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKTsKLSAgfQotICAKLSAgcHVibGljIEZpZ3VyZSBnZXRIZWFkaW5nRmlndXJlKCkKLSAgewotICAgIHJldHVybiBoZWFkaW5nRmlndXJlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0NvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY5Yjg3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0NvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbm5lY3Rpb25Sb3V0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvbHlnb25EZWNvcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb2x5bGluZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBleHRlbmRzIFBvbHlsaW5lQ29ubmVjdGlvbgotewotICBwcm90ZWN0ZWQgYm9vbGVhbiBoaWdobGlnaHQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBDb2xvciBhY3RpdmVDb25uZWN0aW9uID0gQ29sb3JDb25zdGFudHMuYmxhY2s7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3IgaW5hY3RpdmVDb25uZWN0aW9uID0gbmV3IENvbG9yKG51bGwsIDE5OCwgMTk1LCAxOTgpOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHNldFRhcmdldERlY29yYXRpb24obmV3IFBvbHlnb25EZWNvcmF0aW9uKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblJvdXRlcihDb25uZWN0aW9uUm91dGVyIGNyKQotICB7Ci0gICAgaWYgKGNyICE9IG51bGwgJiYgZ2V0Q29ubmVjdGlvblJvdXRlcigpICE9IG51bGwpLy8gVE9ETzouLi4uICYmICEoZ2V0Q29ubmVjdGlvblJvdXRlcigpIGluc3RhbmNlb2YgQk9NYW5oYXR0YW5Db25uZWN0aW9uUm91dGVyKSkKLSAgICAgIHN1cGVyLnNldENvbm5lY3Rpb25Sb3V0ZXIoY3IpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBoaWdobGlnaHQgc3RhdHVzLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNIaWdobGlnaHRlZCgpCi0gIHsKLSAgICByZXR1cm4gaGlnaGxpZ2h0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBoaWdobGlnaHQKLSAgICogICAgICAgICAgVGhlIGhpZ2hsaWdodCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIaWdobGlnaHQoYm9vbGVhbiBoaWdobGlnaHQpCi0gIHsKLSAgICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKLSAgICBzZXRGb3JlZ3JvdW5kQ29sb3IoaGlnaGxpZ2h0ID8gRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmRlZmF1bHRGb3JlZ3JvdW5kQ29sb3IgOiBpbmFjdGl2ZUNvbm5lY3Rpb24pOwotICAgIHNldE9wYXF1ZShoaWdobGlnaHQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0hlYWRpbmdGaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvSGVhZGluZ0ZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQ1YmE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvSGVhZGluZ0ZpZ3VyZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLQotcHVibGljIGNsYXNzIEhlYWRpbmdGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBDb2xvciBoZWFkZXJDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyMjQsIDIzMywgMjQ2KTsKLSAgTGFiZWwgbGFiZWw7Ci0gIHByb3RlY3RlZCBDb2xvcltdIGdyYWRpZW50Q29sb3IgPSB7Q29sb3JDb25zdGFudHMud2hpdGUsICAKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSwKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmxpZ2h0Qmx1ZSwKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmdyYXl9OwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NlbGVjdGVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzUmVhZE9ubHkgPSBmYWxzZTsKLSAgCi0gIHB1YmxpYyBIZWFkaW5nRmlndXJlKCkKLSAgewotICAgIGxhYmVsID0gbmV3IExhYmVsKCk7Ci0gICAgbGFiZWwuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMikpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fQ0VOVEVSKTsKLSAgICBzZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIGFkZChsYWJlbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkKGJvb2xlYW4gaXNTZWxlY3RlZCkKLSAgewotICAgIHRoaXMuaXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzUmVhZE9ubHkoYm9vbGVhbiBpc1JlYWRPbmx5KQotICB7Ci0gICAgdGhpcy5pc1JlYWRPbmx5ID0gaXNSZWFkT25seTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpCi0gIHsKLSAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0vLyAgICBDb2xvciBvbGRGb3JlZ3JvdW5kID0gIGdyYXBoaWNzLmdldEZvcmVncm91bmRDb2xvcigpOwotICAgIC8vIEZpbGwgZm9yIHRoZSBoZWFkZXIgc2VjdGlvbgotICAgIC8vCi0gICAgUmVjdGFuZ2xlIHIgPSBnZXRCb3VuZHMoKS5nZXRDb3B5KCk7Ci0gICAgZ3JhcGhpY3Muc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0gICAgLy9ncmFwaGljcy5maWxsUmVjdGFuZ2xlKHIueCsxLCByLnkrMSwgci53aWR0aC0xLCBiYXJZY29vcmRpbmF0ZSAtIHIueSAtIDEpOwotICAgIENvbG9yIGdyYWRpZW50MSA9IGlzUmVhZE9ubHkgPyBncmFkaWVudENvbG9yWzFdIDogaGVhZGVyQ29sb3I7Ci0gICAgaWYgKGlzU2VsZWN0ZWQgJiYgaXNSZWFkT25seSkgZ3JhZGllbnQxID0gZ3JhZGllbnRDb2xvclszXTsKLSAgICBlbHNlIGlmIChpc1NlbGVjdGVkICYmICFpc1JlYWRPbmx5KSBncmFkaWVudDEgPSBncmFkaWVudENvbG9yWzJdOwotICAgIENvbG9yIGdyYWRpZW50MiA9IGdyYWRpZW50Q29sb3JbMF07Ci0gICAgZ3JhcGhpY3Muc2V0Rm9yZWdyb3VuZENvbG9yKGdyYWRpZW50MSk7Ci0gICAgZ3JhcGhpY3Muc2V0QmFja2dyb3VuZENvbG9yKGdyYWRpZW50Mik7Ci0gICAgUmVjdGFuZ2xlIGxhYmVsQm91bmRzID0gbGFiZWwuZ2V0Qm91bmRzKCk7Ci0gICAgZ3JhcGhpY3MuZmlsbEdyYWRpZW50KHIueCsxLCByLnkrMSwgci53aWR0aC0yLCBsYWJlbEJvdW5kcy5oZWlnaHQgLCB0cnVlKTsKLSAgICBncmFwaGljcy5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuZGFya0dyYXkpOwotICAgIGxhYmVsLnBhaW50KGdyYXBoaWNzKTsgICAgCi0gICAgZ3JhcGhpY3Muc2V0Rm9yZWdyb3VuZENvbG9yKGlzU2VsZWN0ZWQgPyBncmFkaWVudENvbG9yWzFdIDogZ3JhZGllbnRDb2xvclszXSk7Ci0gICAgLy9ncmFwaGljcy5kcmF3TGluZShyLngrMSwgci55ICsgMTUsIHIueCArIHIud2lkdGgsIHIueSArIDE1KTsKLSAgICAvL2dyYXBoaWNzLmRyYXdMaW5lKHIueCsxLCByLnkgKyBsYWJlbEJvdW5kcy5oZWlnaHQsIHIueCArIHIud2lkdGgsIHIueSArIGxhYmVsQm91bmRzLmhlaWdodCk7Ci0gIH0KLQotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIGxhYmVsOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlua0ljb25GaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlua0ljb25GaWd1cmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwN2EzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpbmtJY29uRmlndXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb2x5Z29uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExpbmtJY29uRmlndXJlIGV4dGVuZHMgUG9seWdvbiB7Ci0JcHJpdmF0ZSBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0OwotCXByaXZhdGUgUG9pbnQgZmlnTG9jYXRpb247Ci0JICBwcml2YXRlIFBvaW50TGlzdCBwb2ludHMgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JICBwdWJsaWMgaW50IGhvcml6b250YWxCdWZmZXIgPSA1OwotCSAgcHVibGljIGludCB2ZXJ0aWNhbEJ1ZmZlciA9IDc7Ci0KLQkgIHB1YmxpYyBMaW5rSWNvbkZpZ3VyZShBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVwKSB7Ci0JCSAgZWRpdFBhcnQgPSBlcDsKLQkJICAKLQkJICAvLyBEcmF3IHRoZSBhcnJvdwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDAsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDksIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDksIDAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDE0LCA1ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJICBwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA5LCAxMCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgOSwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgCi0JCSAgc2V0RmlsbCh0cnVlKTsJICAKLQkJICBzZXRQb2ludHMocG9pbnRzKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgcGFpbnRGaWd1cmUoR3JhcGhpY3MgZ3JhcGhpY3MpIHsKLQkJICBzdXBlci5wYWludEZpZ3VyZShncmFwaGljcyk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldEZpZ3VyZUxvY2F0aW9uKFBvaW50IG5ld1N0YXJ0aW5nTG9jYXRpb24pIHsKLQkJICBpbnQgZHkgPSBuZXdTdGFydGluZ0xvY2F0aW9uLnk7Ci0KLQkJICBpZiAoZmlnTG9jYXRpb24gIT0gbnVsbCkgewotCQkJICBkeSA9IG5ld1N0YXJ0aW5nTG9jYXRpb24ueSAtIGZpZ0xvY2F0aW9uLnk7Ci0JCSAgfQotCi0JCSAgLy8gVXBkYXRlIHRoZSBwb2ludHMKLQkJICBQb2ludExpc3QgbmV3UG9pbnRzID0gbmV3IFBvaW50TGlzdCgpOwotCQkgIFBvaW50TGlzdCBwTGlzdCA9IGdldFBvaW50cygpOwotCQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBwTGlzdC5zaXplKCk7IGluZGV4KyspIHsKLQkJCSAgUG9pbnQgcG9pbnQgPSBwTGlzdC5nZXRQb2ludChpbmRleCk7Ci0JCQkgIC8vIEFkZCA1IGZvciB0aGUgcGFkZGluZwotCQkJICBQb2ludCBuZXdQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgaG9yaXpvbnRhbEJ1ZmZlciwgcG9pbnQueSArIGR5KTsKLQkJCSAgbmV3UG9pbnRzLmFkZFBvaW50KG5ld1BvaW50KTsKLQkJICB9Ci0JCSAgc2V0UG9pbnRzKG5ld1BvaW50cyk7Ci0KLQkJICBmaWdMb2NhdGlvbiA9IG5ld1N0YXJ0aW5nTG9jYXRpb247Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHByaW1UcmFuc2xhdGUoaW50IGR4LCBpbnQgZHkpIHsKLQkJCWJvdW5kcy54ICs9IGR4OwotCQkJYm91bmRzLnkgKz0gZHk7Ci0JCQkKLQkJCVBvaW50TGlzdCBwTGlzdCA9IGdldFBvaW50cygpOwotCQkJUG9pbnRMaXN0IG5ld0xpc3QgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgcExpc3Quc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkJUG9pbnQgcG9pbnQgPSBwTGlzdC5nZXRQb2ludChpbmRleCk7Ci0JCQkJUG9pbnQgbmV3UG9pbnQgPSBuZXcgUG9pbnQocG9pbnQueCArIGR4LCBwb2ludC55KTsKLQkJCQluZXdMaXN0LmFkZFBvaW50KG5ld1BvaW50KTsKLQkJCX0KLQkJCXNldFBvaW50cyhuZXdMaXN0KTsKLQkJCQotCQkJaWYgKHVzZUxvY2FsQ29vcmRpbmF0ZXMoKSkgewotCQkJCWZpcmVDb29yZGluYXRlU3lzdGVtQ2hhbmdlZCgpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCSAgCi0JICBwdWJsaWMgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBnZXRBc3NvY2lhdGVkRWRpdFBhcnQoKSB7Ci0JCSAgcmV0dXJuIGVkaXRQYXJ0OwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9MaXN0RmlndXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpc3RGaWd1cmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4NTYzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpc3RGaWd1cmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLQotcHVibGljIGNsYXNzIExpc3RGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgYm9vbGVhbiBpc09wYXF1ZSA9IGZhbHNlOwotICBib29sZWFuIGlzSG9yaXpvbnRhbCA9IGZhbHNlOwotICBib29sZWFuIHBhaW50Rmlyc3RMaW5lID0gdHJ1ZTsKLSAgCi0gIHB1YmxpYyBMaXN0RmlndXJlKGJvb2xlYW4gaXNIb3Jpem9udGFsKQotICB7Ci0gICAgdGhpcy5pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7IAotICB9Ci0gIAotICBwdWJsaWMgTGlzdEZpZ3VyZSgpCi0gIHsKLSAgICB0aGlzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKQotICB7Ci0gICAgc3VwZXIucGFpbnQoZ3JhcGhpY3MpOwotICAgIGJvb2xlYW4gaXNGaXJzdCA9IHRydWU7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRmlndXJlIGZpZ3VyZSA9IChGaWd1cmUpIGkubmV4dCgpOwotICAgICAgaWYgKGlzRmlyc3QgJiYgIXBhaW50Rmlyc3RMaW5lKQotICAgICAgewotICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFJlY3RhbmdsZSByID0gZmlndXJlLmdldEJvdW5kcygpOwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICB7ICAKLSAgICAgICAgICBncmFwaGljcy5kcmF3TGluZShyLngsIHIueSwgci54LCByLnkgKyByLmhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7ICAKLSAgICAgICAgICBncmFwaGljcy5kcmF3TGluZShyLngsIHIueSwgci54ICsgci53aWR0aCwgci55KTsKLSAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzT3BhcXVlKCkKLSAgewotICAgIHJldHVybiBpc09wYXF1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE9wYXF1ZShib29sZWFuIGlzT3BhcXVlKQotICB7Ci0gICAgdGhpcy5pc09wYXF1ZSA9IGlzT3BhcXVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQYWludEZpcnN0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gcGFpbnRGaXJzdExpbmU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYWludEZpcnN0TGluZShib29sZWFuIHBhaW50Rmlyc3RMaW5lKQotICB7Ci0gICAgdGhpcy5wYWludEZpcnN0TGluZSA9IHBhaW50Rmlyc3RMaW5lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL01vZGVsRGlhZ25vc3RpY0luZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTW9kZWxEaWFnbm9zdGljSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmRkOGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTW9kZWxEaWFnbm9zdGljSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci0KLS8qCi0gKiBBIE1vZGVsRGlhZ25vc3RpY0luZm8gb2JqZWN0IGNvbnRhaW5zICJhZGRpdGlvbmFsIiBpbmZvcm1hdGlvbiBhYm91dCBhIG1vZGVsIG9iamVjdC4KLSAqIEl0IGlzIHBhc3NlZCBmcm9tIGEgbW9kZWwgKGZhY2FkZSkgb2JqZWN0IHRvIGFuIEVkaXRQYXJ0LiAgVGhlIEVkaXRQYXJ0IHVzZXMgdGhlIE1vZGVsRGlhZ25vc3RpY0luZm8KLSAqIG9iamVjdCB0byBkaXNwbGF5IGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSAoZm9yIGV4YW1wbGUsIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgbW9kZWwKLSAqIG9iamVjdCBpcyBpbiBzb21lIHdheSBpbnZhbGlkLgotICovCi1wdWJsaWMgY2xhc3MgTW9kZWxEaWFnbm9zdGljSW5mbyB7Ci0JcHVibGljIHN0YXRpYyBpbnQgSU5GT1JNQVRJT05BTF9UWVBFID0gMDsKLQlwdWJsaWMgc3RhdGljIGludCBFUlJPUl9UWVBFID0gMTsKLQlwdWJsaWMgc3RhdGljIGludCBXQVJOSU5HX1RZUEUgPSAyOwotCQotCXByaXZhdGUgaW50IHR5cGUgPSAxOwotCXByaXZhdGUgU3RyaW5nIHRleHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgQ29sb3IgdGV4dENvbG9yOwotCQotCXB1YmxpYyBNb2RlbERpYWdub3N0aWNJbmZvKFN0cmluZyB0eHQsIGludCBpbmZvVHlwZSwgQ29sb3IgY29sb3IpIHsKLQkJdGV4dCA9IHR4dDsKLQkJdHlwZSA9IGluZm9UeXBlOwotCQl0ZXh0Q29sb3IgPSBjb2xvcjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25UZXh0KFN0cmluZyB0eHQpIHsKLQkJdGV4dCA9IHR4dDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoQ29sb3IgY29sb3IpIHsKLQkJdGV4dENvbG9yID0gY29sb3I7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFR5cGUoaW50IGluZm9UeXBlKSB7Ci0JCXR5cGUgPSBpbmZvVHlwZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvblRleHQoKSB7Ci0JCXJldHVybiB0ZXh0OwotCX0KLQkKLQlwdWJsaWMgaW50IGdldFR5cGUoKSB7Ci0JCXJldHVybiB0eXBlOwotCX0KLQkKLQlwdWJsaWMgQ29sb3IgZ2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoKSB7Ci0JCWlmICh0ZXh0Q29sb3IgIT0gbnVsbCkgewotCQkJcmV0dXJuIHRleHRDb2xvcjsKLQkJfQotCQkKLQkJaWYgKHR5cGUgPT0gRVJST1JfVFlQRSkgewotCQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLnJlZDsKLQkJfQotCQllbHNlIGlmICh0eXBlID09IFdBUk5JTkdfVFlQRSkgewotCQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheTsKLQkJfQotCQkKLQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLmJsYWNrOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0NvbHVtbkxheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29sdW1uTGF5b3V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MGFjNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29sdW1uTGF5b3V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQWJzdHJhY3RMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5CaW5kaW5nRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29sdW1uTGF5b3V0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQKLXsKLSAgRWRpdFBhcnQgYmluZGluZ0NvbHVtbkVkaXRQYXJ0OwotICAKLSAgcHVibGljIEJpbmRpbmdDb2x1bW5MYXlvdXQoRWRpdFBhcnQgYmluZGluZ0NvbHVtbkVkaXRQYXJ0KQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmJpbmRpbmdDb2x1bW5FZGl0UGFydCA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydDsKLSAgfQotCi0gIHByb3RlY3RlZCBEaW1lbnNpb24gY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShJRmlndXJlIGNvbnRhaW5lciwgaW50IHdIaW50LCBpbnQgaEhpbnQpCi0gIHsKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgRGltZW5zaW9uIGQgPSBjYWxjdWxhdGVDaGlsZHJlblNpemUoY29udGFpbmVyLmdldENoaWxkcmVuKCksIHdIaW50LCBoSGludCk7Ci0gICAgZC5oZWlnaHQgPSBNYXRoLm1heChkLmhlaWdodCwgY2xpZW50QXJlYS5oZWlnaHQpOwotICAgIHJldHVybiBkOwotICB9Ci0KLSAgcHJpdmF0ZSBEaW1lbnNpb24gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKExpc3QgY2hpbGRyZW4sIGludCB3SGludCwgaW50IGhIaW50KQotICB7Ci0gICAgRGltZW5zaW9uIGNoaWxkU2l6ZTsKLSAgICBJRmlndXJlIGNoaWxkOwotICAgIGludCBoZWlnaHQgPSAwLCB3aWR0aCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ci0gICAgICBoZWlnaHQgKz0gY2hpbGRTaXplLmhlaWdodDsKLSAgICAgIGhlaWdodCArPSA4MDsKLSAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGNoaWxkU2l6ZS53aWR0aCk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgRGltZW5zaW9uKE1hdGgubWF4KHdpZHRoLCAxNTApLCBoZWlnaHQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgY29udGFpbmVyKQotICB7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJpbmRpbmdDb2x1bW5MYXlvdXQubGF5b3V0KCkiICsgY29udGFpbmVyLmdldENoaWxkcmVuKCkuc2l6ZSgpKTsKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgUmVjdGFuZ2xlIHIgPSBuZXcgUmVjdGFuZ2xlKCk7Ci0gICAgci54ID0gY2xpZW50QXJlYS54ICsgNTA7Ci0gICAgci55ID0gY2xpZW50QXJlYS55OwotICAgIGludCB1c2VkID0gMDsKLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IGNvbnRhaW5lci5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBGaWd1cmUgY2hpbGQgPSAoRmlndXJlKSBpLm5leHQoKTsKLSAgICAgIERpbWVuc2lvbiBkID0gY2hpbGQuZ2V0UHJlZmVycmVkU2l6ZSgtMSwgLTEpOwotICAgICAgci53aWR0aCA9IGQud2lkdGg7Ci0gICAgICByLmhlaWdodCA9IGQuaGVpZ2h0OwotICAgICAgCi0gICAgICBjaGlsZC5zZXRCb3VuZHMocik7Ci0gICAgICB1c2VkICs9IDMwOwotICAgICAgdXNlZCArPSByLmhlaWdodDsKLSAgICAgIAotICAgICAgSUZpZ3VyZSBpbnRlZmFjZUZpZ3VyZSA9IGdldEludGVyZmFjZUZpZ3VyZUZvckV4cGFuZGVkRWRpdFBhcnRGaWd1cmUoY2hpbGQpOwotICAgICAgaWYgKGludGVmYWNlRmlndXJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFJlY3RhbmdsZSBiID0gaW50ZWZhY2VGaWd1cmUuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIGludCB3aWR0aCA9IDMwOwotICAgICAgICBjaGlsZC5zZXRCb3VuZHMobmV3IFJlY3RhbmdsZShiLnggLSB3aWR0aCwgYi55LCB3aWR0aCwgYi5oZWlnaHQpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgci55ICs9IGQuaGVpZ2h0OwotICAgICAgci55ICs9IDgwOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RXhwYW5kZWQoQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCwgYm9vbGVhbiBpc0V4cGFuZGVkKQotICB7Ci0gICAgLy8gRmlyc3QgcnVuIHRocm91Z2ggYWxsIG9mIHRoZSBiaW5kaW5ncyBhcmUgYXJlIGV4cGFuZGVkCi0gICAgLy8gdG8gZW5zdXJlIGF0IG1vc3Qgb25lIGJpbmRpbmcgaXMgZXhwYW5kZWQgZm9yIGVhY2ggaW50ZXJmYWNlIHNpbmNlCi0gICAgLy8gd2UgbWF5IG5lZWQgdG8gY29sbGFwc2UgYSBiaW5kaW5nIGluIG9yZGVyIHRvIGV4cGFuZCB0aGlzIG9uZS4KLSAgICAvLwotICAgIElJbnRlcmZhY2UgaW50ZXJmYXplID0gZ2V0SW50ZXJmYWNlKGJpbmRpbmdFZGl0UGFydCk7ICAgIAotICAgIGlmIChpbnRlcmZhemUgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGJpbmRpbmdFZGl0UGFydC5zZXRFeHBhbmRlZChpc0V4cGFuZGVkKTsKLSAgICAgIGlmIChpc0V4cGFuZGVkKQotICAgICAgeyAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICBCaW5kaW5nRWRpdFBhcnQgb3RoZXJCaW5kaW5nRWRpdFBhcnQgPSAoQmluZGluZ0VkaXRQYXJ0KWkubmV4dCgpOwotICAgICAgICAgIGlmIChvdGhlckJpbmRpbmdFZGl0UGFydCAhPSBiaW5kaW5nRWRpdFBhcnQgJiYKLSAgICAgICAgICAgICAgaW50ZXJmYXplID09IGdldEludGVyZmFjZShvdGhlckJpbmRpbmdFZGl0UGFydCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3RoZXJCaW5kaW5nRWRpdFBhcnQuc2V0RXhwYW5kZWQoZmFsc2UpOwotICAgICAgICAgIH0gIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSUZpZ3VyZSBnZXRJbnRlcmZhY2VGaWd1cmVGb3JFeHBhbmRlZEVkaXRQYXJ0RmlndXJlKEZpZ3VyZSBlZGl0UGFydEZpZ3VyZSkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCA9IChCaW5kaW5nRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoYmluZGluZ0VkaXRQYXJ0LmlzRXhwYW5kZWQoKSAmJiBiaW5kaW5nRWRpdFBhcnQuZ2V0RmlndXJlKCkgPT0gZWRpdFBhcnRGaWd1cmUpCi0gICAgICB7Ci0gICAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgaW50ZXJmYWNlRWRpdFBhcnQgPSBnZXRNYXRjaGluZ0VkaXRQYXJ0KGdldEludGVyZmFjZShiaW5kaW5nRWRpdFBhcnQpKTsKLSAgICAgICAgaWYgKGludGVyZmFjZUVkaXRQYXJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlRWRpdFBhcnQuZ2V0RmlndXJlKCk7Ci0gICAgICAgIH0gICAgICAgICAgCi0gICAgICB9ICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSUludGVyZmFjZSBnZXRJbnRlcmZhY2UoQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZyllZGl0UGFydC5nZXRNb2RlbCgpOwotICAgIHJldHVybiBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotICB9Ci0gIAotICBwcml2YXRlIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0TWF0Y2hpbmdFZGl0UGFydChJSW50ZXJmYWNlIGludGVyZmF6ZSkKLSAgewotICAgIHJldHVybihBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KWJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KGludGVyZmF6ZSk7ICAgIAotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29udGVudExheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29udGVudExheW91dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDFiMzhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0NvbnRlbnRMYXlvdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkFic3RyYWN0TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkJpbmRpbmdFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGxheW91dCB0aGUgY29udGVudHMgb2YgdGhlIGJpbmRpbmcgJ3J1bGVyJyBkaXNwbGF5ZWQKLSAqIHRvIHRoZSBsZWZ0IHNpZGUgb2YgYW4gaW50ZXJmYWNlLiBUaGUgY29udGVudHMgYXJlIGFsaWduZWQgd2l0aCB0aGUgaW50ZXJmYWNlCi0gKiBmaWd1cmVzIHNvIHRoYXQgY29ycmVzcG9kaW5nIGJpbmRpbmcgYW5kIGludGVyZmFjZSBjb25zdHJ1Y3RzIGFyZSBzaWRlIGJ5IHNpZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29udGVudExheW91dCBleHRlbmRzIEFic3RyYWN0TGF5b3V0Ci17Ci0gIEJpbmRpbmdFZGl0UGFydCBiaW5kaW5nRWRpdFBhcnQ7Ci0gIAotICBwdWJsaWMgQmluZGluZ0NvbnRlbnRMYXlvdXQoQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCkKLSAgewotICAgIHRoaXMuYmluZGluZ0VkaXRQYXJ0ID0gYmluZGluZ0VkaXRQYXJ0OwotICB9Ci0KLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgewotICAgIGlmIChiaW5kaW5nRWRpdFBhcnQuaXNFeHBhbmRlZCgpKQotICAgIHsgIAotICAgICAgUmVjdGFuZ2xlIGNsaWVudEFyZWEgPSBjb250YWluZXIuZ2V0Q2xpZW50QXJlYSgpOwotICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oY2xpZW50QXJlYS53aWR0aCwgY2xpZW50QXJlYS5oZWlnaHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwwKTsKLSAgICB9ICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIGNvbnRhaW5lcikKLSAgeyAgICAgCi0gICAgUmVjdGFuZ2xlIGNsaWVudEFyZWEgPSBjb250YWluZXIuZ2V0Q2xpZW50QXJlYSgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdFZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGNoaWxkRWRpdFBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgaS5uZXh0KCk7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IG51bGw7Ci0gICAgICBPYmplY3QgbW9kZWwgPSBjaGlsZEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0gICAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZ09wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgSU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoKElCaW5kaW5nT3BlcmF0aW9uKW1vZGVsKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgY29ycmVzcG9uZGluZ0VkaXRQYXJ0ID0gZ2V0RWRpdFBhcnQob3BlcmF0aW9uKTsgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSkKLSAgICAgIHsKLSAgICAgICAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSA9ICgoSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKW1vZGVsKS5nZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0gICAgICAgIGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IGdldEVkaXRQYXJ0KG1lc3NhZ2VSZWZlcmVuY2UpOyAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcikgewotICAgIAkgIE9iamVjdCBjb3JyZXNwb25kaW5nTW9kZWwgPSAoKEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIpIG1vZGVsKS5nZXRNb2RlbCgpOwotICAgIAkgIGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IGdldEVkaXRQYXJ0KGNvcnJlc3BvbmRpbmdNb2RlbCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChjb3JyZXNwb25kaW5nRWRpdFBhcnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSUZpZ3VyZSBmaWd1cmUgPSBjb3JyZXNwb25kaW5nRWRpdFBhcnQuZ2V0RmlndXJlKCk7ICAgICAgIAotICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0VkaXRQYXJ0IGluc3RhbmNlb2YgSU5hbWVkRWRpdFBhcnQpCi0gICAgICAgIHsKLSAgICAgICAgICBmaWd1cmUgPSAoKElOYW1lZEVkaXRQYXJ0KWNvcnJlc3BvbmRpbmdFZGl0UGFydCkuZ2V0TGFiZWxGaWd1cmUoKTsgICAgICAgICAgICAKLSAgICAgICAgfSAgCi0gICAgICAgIFJlY3RhbmdsZSBib3VuZHMgPSBmaWd1cmUuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIFJlY3RhbmdsZSBuZXdCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKGNsaWVudEFyZWEueCwgYm91bmRzLnksIGNsaWVudEFyZWEud2lkdGgsIGJvdW5kcy5oZWlnaHQpOwotICAgICAgICBjaGlsZEVkaXRQYXJ0LmdldEZpZ3VyZSgpLnNldEJvdW5kcyhuZXdCb3VuZHMpOwotICAgICAgfSAgCi0gICAgfQotICB9ICAKLSAgCi0gIHByb3RlY3RlZCBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGdldEVkaXRQYXJ0KE9iamVjdCBtb2RlbCkKLSAgewotICAgIGlmIChtb2RlbCAhPSBudWxsKQotICAgIHsgIAotICAgICAgRWRpdFBhcnQgZWRpdFBhcnQgPSAoRWRpdFBhcnQpYmluZGluZ0VkaXRQYXJ0LmdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQobW9kZWwpOwotICAgICAgaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KWVkaXRQYXJ0OyAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0xheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nTGF5b3V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDhlNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nTGF5b3V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQmluZGluZ0VkaXRQYXJ0OwotCi0vLyBqdXN0IGEgdG9vbGJhciBsYXlvdXQgd2l0aCBhIG1pbm9yIHR3ZWFrIHRvIGVuc3VyZSB0aGUgbGFzdCBmaWd1cmUgZmlsbHMKLS8vIHRoZSBlbnRpcmUgYXZhaWxhYmxlIHNwYWNlCi1wdWJsaWMgY2xhc3MgQmluZGluZ0xheW91dCBleHRlbmRzIFRvb2xiYXJMYXlvdXQKLXsKLSAgQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0OwotICAKLSAgcHVibGljIEJpbmRpbmdMYXlvdXQoQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgdGhpcy5lZGl0UGFydCA9IGVkaXRQYXJ0OyAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgewotICAgIERpbWVuc2lvbiBkID0gc3VwZXIuY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShjb250YWluZXIsIHdIaW50LCBoSGludCk7Ci0gICAgLy9SZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgLy9kLndpZHRoID0gTWF0aC5tYXgoZC53aWR0aCwgY2xpZW50QXJlYS53aWR0aCk7Ci0gICAgLy9kLmhlaWdodCA9IE1hdGgubWF4KGQuaGVpZ2h0LCBjbGllbnRBcmVhLmhlaWdodCk7Ci0gICAgcmV0dXJuIGQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIGNvbnRhaW5lcikKLSAgewotICAgIHN1cGVyLmxheW91dChjb250YWluZXIpOwotICAgIGlmIChlZGl0UGFydC5pc0V4cGFuZGVkKCkpCi0gICAgeyAgCi0gICAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7ICAgIAotICAgICAgTGlzdCBjaGlsZHJlbiA9IGNvbnRhaW5lci5nZXRDaGlsZHJlbigpOwotICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIEZpZ3VyZSBoZWFkZXIgPSAoRmlndXJlKWNoaWxkcmVuLmdldCgwKTsgICAgICAgIAotICAgICAgICBGaWd1cmUgY29udGVudFBhbmUgPSAoRmlndXJlKWNoaWxkcmVuLmdldChjaGlsZHJlbi5zaXplKCkgLSAxKTsKLSAgICAgICAgaWYgKGNvbnRlbnRQYW5lLmdldENoaWxkcmVuKCkuc2l6ZSgpID4gMCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgUmVjdGFuZ2xlIGJvdW5kcyA9IGNvbnRlbnRQYW5lLmdldEJvdW5kcygpOwotICAgICAgICAgIGJvdW5kcy5oZWlnaHQgPSBjbGllbnRBcmVhLmhlaWdodCAtIGhlYWRlci5nZXRCb3VuZHMoKS5oZWlnaHQ7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9Db2x1bW5EYXRhLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0NvbHVtbkRhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhNTg4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0NvbHVtbkRhdGEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDb2x1bW5EYXRhCi17Ci0gIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgCi0gIGNsYXNzIEVudHJ5Ci0gIHsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCB3ZWlnaHQgPSAxOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjbGVhckNvbHVtbldpZHRocygpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KWkubmV4dCgpOwotICAgICAgZW50cnkud2lkdGggPSAwOwotICAgIH0gIAotICB9ICAKLSAgCi0gIHByaXZhdGUgRW50cnkgbG9va3VwT3JDcmVhdGVDb2x1bW5FbnRyeShTdHJpbmcgaWRlbnRpZmllcikKLSAgewotICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KW1hcC5nZXQoaWRlbnRpZmllcik7Ci0gICAgaWYgKGVudHJ5ID09IG51bGwpCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgRW50cnkoKTsKLSAgICAgIG1hcC5wdXQoaWRlbnRpZmllciwgZW50cnkpOwotICAgIH0gIAotICAgcmV0dXJuIGVudHJ5OyAKLSAgfSAgCi0gIAotICB2b2lkIHN0cmV0Y2hDb2x1bW5XaWR0aElmTmVlZGVkKFN0cmluZyBpZGVudGlmaWVyLCBpbnQgd2lkdGgpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IGxvb2t1cE9yQ3JlYXRlQ29sdW1uRW50cnkoaWRlbnRpZmllcik7Ci0gICAgZW50cnkud2lkdGggPSBNYXRoLm1heChlbnRyeS53aWR0aCwgd2lkdGgpOwotICB9Ci0gIAotICBpbnQgZ2V0Q29sdW1uV2lkdGgoU3RyaW5nIGlkZW50aWZpZXIpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSltYXAuZ2V0KGlkZW50aWZpZXIpOwotICAgIGlmIChlbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBlbnRyeS53aWR0aDsKLSAgICB9ICAKLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIDA7Ly9obW0gc2hvdWxkIHdlIHJldHVybiAtMSA/Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGludCBnZXRDb2x1bW5XZWlnaHQoU3RyaW5nIGlkZW50aWZpZXIpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSltYXAuZ2V0KGlkZW50aWZpZXIpOwotICAgIGlmIChlbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBlbnRyeS53ZWlnaHQ7Ci0gICAgfSAgCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0gIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb2x1bW5XZWlnaHQoU3RyaW5nIGlkZW50aWZpZXIsIGludCB3ZWlnaHQpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IGxvb2t1cE9yQ3JlYXRlQ29sdW1uRW50cnkoaWRlbnRpZmllcik7Ci0gICAgZW50cnkud2VpZ2h0ID0gd2VpZ2h0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL1Jvd0xheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9Sb3dMYXlvdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjNzQwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL1Jvd0xheW91dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQWJzdHJhY3RMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotCi1wdWJsaWMgY2xhc3MgUm93TGF5b3V0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQKLXsKLSAgLy8gbGF5b3V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcmVudCBjb250ZXh0Ci0gIC8vIGFueSBsYXlvdXQgbWFuYWdlciB1bmRlciB0aGUgcGFyZW50IGNvbnRleHQgaXMgY29ubmVjdGVkCi0gIC8vIGNvbHVtbiByb3dzIGFyZSBtYWludGFpbmVkIGFjY3Jvc3MgY29udGFpbmVyIGJvdW5kYXJpZXMgIAotICBwcm90ZWN0ZWQgQ29sdW1uRGF0YSBjb2x1bW5EYXRhOwotICBwcm90ZWN0ZWQgSGFzaE1hcCBmaWd1cmVUb0NvbnRzdHJhaW50TWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgCi0gIHB1YmxpYyBSb3dMYXlvdXQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAKLQotICAvLyB0aGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgbWluaW11bSBzaXplIHJlcXVpcmVkIHRvIGRpc3BsYXkgdGhlIGZpZ3VyZXMKLSAgLy8KLSAgcHJpdmF0ZSBEaW1lbnNpb24gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKElGaWd1cmUgY29udGFpbmVyLCBMaXN0IGNoaWxkcmVuLCBpbnQgd0hpbnQsIGludCBoSGludCwgYm9vbGVhbiBwcmVmZXJyZWQpCi0gIHsKLSAgICBEaW1lbnNpb24gY2hpbGRTaXplOwotICAgIElGaWd1cmUgY2hpbGQ7Ci0gICAgaW50IGhlaWdodCA9IDA7Ci0gICAgaW50IHdpZHRoID0gMDsKLSAgICAKLSAgICAvL0lSb3dGaWd1cmUgZmlndXJlID0gKElSb3dGaWd1cmUpY29udGFpbmVyOwotICAgIAotICAgIC8vIGZvciBlYWNoIGNlbGwgaW4gdGhlIHJvdwotICAgIC8vCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICBTdHJpbmcgY29sdW1uSWRlbmlmaWVyID0gKFN0cmluZylnZXRDb25zdHJhaW50KGNoaWxkKTsKLSAgICAgICAgICAgICAKLSAgICAgIC8vIGZpcnN0IHdlIGNvbXB1dGUgdGhlIGNoaWxkIHNpemUgd2l0aG91dCByZWdhcmQgZm9yIGNvbHVtbkRhdGEKLSAgICAgIC8vCi0gICAgICBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ly8gOiBjaGlsZC5nZXRNaW5pbXVtU2l6ZSh3SGludCwgaEhpbnQpOwotICAgICAgICAKLSAgICAgIC8vIG5vdyB0aGF0IHRoZSBjb2x1bW5EYXRhIGhhcyBiZWVuIHBvcHVsYXRlZCB3ZSBjYW4gY29uc2lkZXIgaWYgdGhlIHJvdyBuZWVkcyB0byBiZSBsYXJnZXIKLSAgICAgIC8vCi0gICAgICBpbnQgZWZmZWN0aXZlV2lkdGggPSBjaGlsZFNpemUud2lkdGg7Ci0gICAgICBpZiAoY29sdW1uSWRlbmlmaWVyICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgY29sdW1uRGF0YS5zdHJldGNoQ29sdW1uV2lkdGhJZk5lZWRlZChjb2x1bW5JZGVuaWZpZXIsIGNoaWxkU2l6ZS53aWR0aCk7Ci0gICAgICAgIGVmZmVjdGl2ZVdpZHRoID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JZGVuaWZpZXIpOwotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBoZWlnaHQgPSBNYXRoLm1heChjaGlsZFNpemUuaGVpZ2h0LCBoZWlnaHQpOwotICAgICAgd2lkdGggKz0gZWZmZWN0aXZlV2lkdGg7Ci0gICAgfSAgCi0gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24od2lkdGgsIGhlaWdodCk7Ci0gIH0KLSAgCi0gIAotICAKLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgeyAgICAKLSAgICBMaXN0IGNoaWxkcmVuID0gY29udGFpbmVyLmdldENoaWxkcmVuKCk7Ci0gICAgRGltZW5zaW9uIHByZWZTaXplID0gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKGNvbnRhaW5lciwgY2hpbGRyZW4sIHdIaW50LCBoSGludCwgdHJ1ZSk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInByZWZlcnJlZFNpemU9IiArIHByZWZTaXplKTsKLSAgICByZXR1cm4gcHJlZlNpemU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBsYXlvdXQgYSB0YWJsZSB3aXRoIHRoZSBjb2x1bW5zIGFsaWduZWQgICAgICAKLSAgICAvL0lSb3dGaWd1cmUgcm93RmlndXJlID0gKElSb3dGaWd1cmUpcGFyZW50OyAgICAKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IHBhcmVudC5nZXRDbGllbnRBcmVhKCk7ICAgCi0gICAgTGlzdCBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZHJlbigpOwotICAgIFJlY3RhbmdsZSByID0gbmV3IFJlY3RhbmdsZSgpOwotICAgIHIueCA9IGNsaWVudEFyZWEueDsKLSAgICByLnkgPSBjbGllbnRBcmVhLnk7Ci0gICAgci5oZWlnaHQgPSBjbGllbnRBcmVhLmhlaWdodDsKLSAgICAKLSAgICBpbnQgY2hpbGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIFJlY3RhbmdsZVtdIGJvdW5kcyA9IG5ldyBSZWN0YW5nbGVbY2hpbGRyZW5TaXplXTsKLSAgICAKLSAgICAvLyBmb3IgZWFjaCBjZWxsIGluIHRoZSByb3cKLSAgICAvLwotICAgIGludCByZXF1aXJlZFdpZHRoID0gMDsKLSAgICBpbnQgdG90YWxDb2x1bW5XZWlnaHQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyBpKyspCi0gICAgewotICAgICAgSUZpZ3VyZSBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICAvL1N0cmluZyBjb2x1bW5JZGVuaWZpZXIgPSBmaWd1cmUuZ2V0Q29sdW1uSWRlbnRpZmllcihjaGlsZCk7ICAgICAgICAgICAgIAotICAgICAgLy8gZmlyc3Qgd2UgY29tcHV0ZSB0aGUgY2hpbGQgc2l6ZSB3aXRob3V0IHJlZ2FyZCBmb3IgY29sdW1uRGF0YQotICAgICAgLy8KLSAgICAgIERpbWVuc2lvbiBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKC0xLCAtMSk7Ci0gICAgICAKLSAgICAgIGludCBjb2x1bW5XaWR0aCA9IC0xOwotICAgICAgLy9TdHJpbmcgY29sdW1uSWRlbnRpZmllciA9IHJvd0ZpZ3VyZS5nZXRDb2x1bW5JZGVudGlmaWVyKGNoaWxkKTsKLSAgICAgIFN0cmluZyBjb2x1bW5JZGVudGlmaWVyID0gKFN0cmluZylnZXRDb25zdHJhaW50KGNoaWxkKTsKLSAgICAgIGlmIChjb2x1bW5JZGVudGlmaWVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vY29sdW1uRGF0YS5zdHJldGNoQ29sdW1uV2lkdGhJZk5lZWRlZChjb2x1bW5JZGVudGlmaWVyLCBjaGlsZFNpemUud2lkdGgpOyAgICAgICAgCi0gICAgICAgIGNvbHVtbldpZHRoID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JZGVudGlmaWVyKTsKLSAgICAgICAgdG90YWxDb2x1bW5XZWlnaHQgKz0gY29sdW1uRGF0YS5nZXRDb2x1bW5XZWlnaHQoY29sdW1uSWRlbnRpZmllcik7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5XaWR0aCgiICsgY29sdW1uSWRlbnRpZmllciArICIpPSIgKyBjb2x1bW5XaWR0aCk7ICAgICAgICAKLSAgICAgIH0gIAotICAgICAgci53aWR0aCA9IE1hdGgubWF4KGNoaWxkU2l6ZS53aWR0aCwgY29sdW1uV2lkdGgpOwotICAgICAgcmVxdWlyZWRXaWR0aCArPSByLndpZHRoOwotICAgICAgYm91bmRzW2ldID0gbmV3IFJlY3RhbmdsZShyKTsgICAgICAKLSAgICAgIHIueCArPSByLndpZHRoOwotICAgIH0gICAgICAgICAgCi0gICAgaWYgKHRvdGFsQ29sdW1uV2VpZ2h0IDwgMSkKLSAgICB7Ci0gICAgICB0b3RhbENvbHVtbldlaWdodCA9IDE7Ci0gICAgfQotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJjbGllbnRBcmVhLndpZHRoPSIgKyBjbGllbnRBcmVhLndpZHRoICsgIiwgIiArIHIueCk7Ci0gICAgaW50IGV4dHJhV2lkdGggPSBNYXRoLm1heChjbGllbnRBcmVhLndpZHRoIC0gcmVxdWlyZWRXaWR0aCwgMCk7ICAgIAotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleHRyYVdpZHRoPSIgKyBleHRyYVdpZHRoICsgIiB0b3RhbENvbHVtbldlaWdodD0iICsgdG90YWxDb2x1bW5XZWlnaHQpOyAgCi0gICAgaW50IGV4dHJhV2lkdGhBbGxvY2F0ZWQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyBpKyspCi0gICAgewotICAgICAgSUZpZ3VyZSBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7ICAgICAgCi0gICAgICBSZWN0YW5nbGUgYiA9IGJvdW5kc1tpXTsgICAgCi0gICAgICBpZiAoZXh0cmFXaWR0aCA+IDApCi0gICAgICB7ICAKLSAgICAgICAgU3RyaW5nIGNvbHVtbklkZW50aWZpZXIgPSAoU3RyaW5nKWdldENvbnN0cmFpbnQoY2hpbGQpOwotICAgICAgICBpZiAoY29sdW1uSWRlbnRpZmllciAhPSBudWxsKQotICAgICAgICB7ICAgICAgICAKLSAgICAgICAgICBpbnQgd2VpZ2h0ID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XZWlnaHQoY29sdW1uSWRlbnRpZmllcik7Ci0gICAgICAgICAgZmxvYXQgZnJhY3Rpb24gPSAoZmxvYXQpd2VpZ2h0IC8gKGZsb2F0KXRvdGFsQ29sdW1uV2VpZ2h0OwotICAgICAgICAgIGludCBleHRyYVdpZHRoRm9yQ2hpbGQgPSAoaW50KShleHRyYVdpZHRoICogZnJhY3Rpb24pOwotICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleHRyYVdpZHRoRm9yQ2hpbGQoIiArIGZyYWN0aW9uICsgIik9IiArIGV4dHJhV2lkdGhGb3JDaGlsZCk7ICAgICAgICAKLSAgICAgICAgICBiLndpZHRoICs9IGV4dHJhV2lkdGhGb3JDaGlsZDsgICAgICAgIAotICAgICAgICAgIGIueCArPSBleHRyYVdpZHRoQWxsb2NhdGVkOwotICAgICAgICAgIGV4dHJhV2lkdGhBbGxvY2F0ZWQgKz0gZXh0cmFXaWR0aEZvckNoaWxkOwotICAgICAgICB9ICAKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYi54ICs9IGV4dHJhV2lkdGhBbGxvY2F0ZWQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNoaWxkLnNldEJvdW5kcyhuZXcgUmVjdGFuZ2xlKGIpKTsgIAotICAgIH0gIAotICB9Ci0KLSAgcHVibGljIENvbHVtbkRhdGEgZ2V0Q29sdW1uRGF0YSgpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uRGF0YTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbHVtbkRhdGEoQ29sdW1uRGF0YSBjb2x1bW5EYXRhKQotICB7Ci0gICAgdGhpcy5jb2x1bW5EYXRhID0gY29sdW1uRGF0YTsKLSAgfSAgICAKLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0Q29uc3RyYWludChJRmlndXJlIGNoaWxkKQotICB7Ci0gICAgcmV0dXJuIGZpZ3VyZVRvQ29udHN0cmFpbnRNYXAuZ2V0KGNoaWxkKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29uc3RyYWludChJRmlndXJlIGNoaWxkLCBPYmplY3QgY29uc3RyYWludCkKLSAgewotICAgIGZpZ3VyZVRvQ29udHN0cmFpbnRNYXAucHV0KGNoaWxkLCBjb25zdHJhaW50KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpCi0gIHsKLSAgICAvL2ZpZ3VyZVRvQ29udHN0cmFpbnRNYXAuY2xlYXIoKTsKLSAgICAvL3RoaXMuY29sdW1uRGF0YS5jbGVhckNvbHVtbldpZHRocygpOwotICAgIHN1cGVyLmludmFsaWRhdGUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiaW52YWxpZGF0ZSIpOyAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWEzZjg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lBU0RPYmplY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElBU0RPYmplY3QKLXsKLSAgICBwdWJsaWMgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcik7Ci0gICAgcHVibGljIHZvaWQgdW5yZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcik7Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpOwotICAgIHB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpOwotCXB1YmxpYyBDb21tYW5kIGdldERlbGV0ZUNvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lBU0RPYmplY3RMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MjhjMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotcHVibGljIGludGVyZmFjZSBJQVNET2JqZWN0TGlzdGVuZXIgewotCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgcHJvcGVydHkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZmNiYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJQmluZGluZyBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBJSW50ZXJmYWNlIGdldEludGVyZmFjZSgpOwotCXB1YmxpYyBMaXN0IGdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0JcHVibGljIExpc3QgZ2V0QmluZGluZ0NvbnRlbnRMaXN0KCk7Ci0JcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpOwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKTsgIAotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotICAKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRJbnRlcmZhY2VDb21tYW5kKElJbnRlcmZhY2UgbmV3SW50ZXJmYWNlKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRHZW5lcmF0ZUJpbmRpbmdDb21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGJjOTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGludGVyZmFjZSBJQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UgZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgSU1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCXB1YmxpYyBMaXN0IGdldEV4dGVuc2libGl0eU9iamVjdHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQmluZGluZ09wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDhiOTlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElCaW5kaW5nT3BlcmF0aW9uIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIElPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCk7Ci0JcHVibGljIExpc3QgZ2V0QmluZGluZ01lc3NhZ2VzKCk7Ci0JcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JRGVzY3JpcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lEZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGY3YzU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lEZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSURlc2NyaXB0aW9uIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKTsKLQlwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZVByZWZpeCgpOwotLy8JcHVibGljIExpc3QgZ2V0TmFtZXNwYWNlc0luZm8oKTsJLy8gVE9ETzogQWRkIHRoaXMgbWV0aG9kIGluIHRoZSBmdXR1cmUKLQkKLQlwdWJsaWMgTGlzdCBnZXRJbXBvcnRzKCk7Ci0JcHVibGljIExpc3QgZ2V0VHlwZXMoKTsKLQlwdWJsaWMgTGlzdCBnZXRTZXJ2aWNlcygpOwotCXB1YmxpYyBMaXN0IGdldEJpbmRpbmdzKCk7Ci0JcHVibGljIExpc3QgZ2V0SW50ZXJmYWNlcygpOwotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldEFkZEltcG9ydENvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRTY2hlbWFDb21tYW5kKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0QWRkU2VydmljZUNvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRCaW5kaW5nQ29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZEludGVyZmFjZUNvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRNZXNzYWdlQ29tbWFuZCgpOwotLy8JcHVibGljIENvbW1hbmQgZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCk7CS8vIFRPRE86IEFkZCB0aGlzIG1ldGhvZCBpbiB0aGUgZnV0dXJlCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JRW5kUG9pbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lFbmRQb2ludC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjhmYjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lFbmRQb2ludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJRW5kUG9pbnQgZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgSVNlcnZpY2UgZ2V0T3duZXJTZXJ2aWNlKCk7Ci0JcHVibGljIFN0cmluZyBnZXRBZGRyZXNzKCk7Ci0JcHVibGljIElCaW5kaW5nIGdldEJpbmRpbmcoKTsKLQlwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldFNldEJpbmRpbmdDb21tYW5kKElCaW5kaW5nIGJpbmRpbmcpOwotCXB1YmxpYyBDb21tYW5kIGdldFNldEFkZHJlc3NDb21tYW5kKFN0cmluZyBuZXdBZGRyZXNzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJmZDM1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JSW1wb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotcHVibGljIGludGVyZmFjZSBJSW1wb3J0IGV4dGVuZHMgSU5hbWVkT2JqZWN0IHsKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpOwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlUHJlZml4KCk7Ci0JcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpOwotCQotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUludGVyZmFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmY0ZGVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUludGVyZmFjZSBleHRlbmRzIElOYW1lZE9iamVjdCB7Ci0gIHB1YmxpYyBMaXN0IGdldE9wZXJhdGlvbnMoKTsKLSAgLyoKLSAgICogQGRlcHJlY2F0ZWQuICBUaGUgbWV0aG9kIGdldEltYWdlKCkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZQotICAgKi8KLSAgcHVibGljIEltYWdlIGdldEltYWdlKCk7Ci0gIHB1YmxpYyBDb21tYW5kIGdldEFkZE9wZXJhdGlvbkNvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lNZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDg2YzVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lNZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU1lc3NhZ2UgZXh0ZW5kcyBJTmFtZWRPYmplY3QgewotCSAgcHVibGljIExpc3QgZ2V0UGFydHMoKTsKLQkgIAotCSAgcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JICAKLQkgIHB1YmxpYyBDb21tYW5kIGdldEFkZFBhcnRDb21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZVJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU1lc3NhZ2VSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0MGU5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi0vLyB0aGlzIGlzIGEgc2ltcGxpZmljYXRpb24gb2YgYW4gaW5wdXQsIG91dHB1dCBvciBmYXVsdCBvYmplY3QKLS8vIChvciBhbnkgb3RoZXIga2luZCBvZiBvYmplY3QgZnV0dXJlIHNwZWNzIG1pZ2h0IGNvb2sgdXApCi1wdWJsaWMgaW50ZXJmYWNlIElNZXNzYWdlUmVmZXJlbmNlIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgS0lORF9JTlBVVCAgPSAxOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBLSU5EX09VVFBVVCA9IDI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEtJTkRfRkFVTFQgPSAzOwotICAKLSAgcHVibGljIGludCBnZXRLaW5kKCk7Ci0gIHB1YmxpYyBMaXN0IGdldFBhcmFtZXRlcnMoKTsgICAKLSAgcHVibGljIElPcGVyYXRpb24gZ2V0T3duZXJPcGVyYXRpb24oKTsKLSAgCi0gIHB1YmxpYyBDb21tYW5kIGdldFJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChJUGFyYW1ldGVyIGxlZnRTaWJsaW5nLCBJUGFyYW1ldGVyIHJpZ2h0U2libGluZywgSVBhcmFtZXRlciBtb3ZpbmdQYXJhbWV0ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU5hbWVkT2JqZWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTmFtZWRPYmplY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhkMzczYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTmFtZWRPYmplY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU5hbWVkT2JqZWN0IGV4dGVuZHMgSUFTRE9iamVjdAoteyAgCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldFNldE5hbWVDb21tYW5kKFN0cmluZyBuZXdOYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzMjhjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU9wZXJhdGlvbiBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCk7Ci0JcHVibGljIElJbnRlcmZhY2UgZ2V0T3duZXJJbnRlcmZhY2UoKTsKLSAgCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkSW5wdXRDb21tYW5kKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0QWRkT3V0cHV0Q29tbWFuZCgpOwotICAvLyBUT0RPOiBybWFoOiBXZSBuZWVkIHRvIHJldmlzaXQgdGhpcyAoU2VuZGluZyBpbiBhbiBleGlzdGluZyBGYXVsdEltcGwgd2hlbiB3ZSB3YW50IHRvCi0gIC8vIGFkZCBhIEZhdWx0IFBhcmFtZXRlci4gIFdoYXQgZG8gd2UgcmVhbGx5IHdhbnQgdG8gZG8gd2hlbiB3ZSBhZGQgYQotICAvLyAnbmV3IEZhdWx0Jy4uLi4gVGhpcyBhbHNvIHJlbGF0ZXMgdG8gd2hhdCB3ZSByZWFsbHkgd2FudCB0byBkbyB3aGVuIHdlIGRlbGV0ZSBhIEZhdWx0Li4uCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkRmF1bHRDb21tYW5kKE9iamVjdCBmYXVsdCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0UmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZChJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2libGluZywgSU1lc3NhZ2VSZWZlcmVuY2UgcmlnaHRTaWJsaW5nLCBJTWVzc2FnZVJlZmVyZW5jZSBtb3ZpbmdNZXNzYWdlUmVmKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lQYXJhbWV0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lQYXJhbWV0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBjZThhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JUGFyYW1ldGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi0KLS8vIHRoaXMgY2xhc3MgaXMgdXNlZCB0byBkZXNjcmliZSBpbiBzaW1wbGlmaWVkIGRlc2NyaXRwaW9uIG9mIHRoZSBpbnB1dC9vdXRwdXQvZmF1bHQgc3RydWN0dXJlCi0vLyBpbiB0aGUgZmFtaWxpYXIgc3R5bGUgb2YgYSB0eXBpY2FsIHByb2dyYW1taW5nIGxhbmd1YWdlIHBhcmFtZXRlciBlLmcuICJTdHJpbmdbXSBmb28iCi0vLyAKLS8vIG9mdGVuIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbXBsaWZpY2F0aW9uIG9mIGEgbW9yZSBjb21wbGV4IHNlcnZpY2UgZGVzY3JpcHRpb24gb3Igc2NoZW1hCi0vLyB0aGlzIGNsYXNzIHNlcnZlcyBjb21tb24gZGVub21pbmF0b3IgdG8gZHJpdmUgYSBzaW1wbGUgdmlldyBvZiBhbiBvcGVyYXRpb24ncyBtZXNzYWdlIHN0cnVjdHVyZQotLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZWRpdG9ycyBjYW4gY2hvb3NlIHRvIHByb3ZpZGUgJ2FkdmFuY2VkJyB2aWV3cyB0aGF0IGRlbHZlIGludG8gYWRkaXRpb24gZGV0YWlscwotLy8gb2YgYSBNZXNzYWdlIHN0cnVjdHVyZQotcHVibGljIGludGVyZmFjZSBJUGFyYW1ldGVyIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIE9iamVjdCBnZXRPd25lcigpOwotLy8gIFN0cmluZyBnZXRLaW5kKCk7Ci0JcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCk7Ci0JcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lUXVhbGlmaWVyKCk7Ci0JCi0JLy8gVE9ETzogcm1haDogRG8gdGhlc2Ugc3RyaW5ncyBiZWxvbmcgaGVyZT8/PwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9ORVdfQUNUSU9OX0lEID0gIlNldFR5cGVBY3Rpb25fQWRkVHlwZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRUxFQ1RfRVhJU1RJTkdfQUNUSU9OX0lEID0gIlNldFR5cGVBY3Rpb25fRXhpc3RpbmdUeXBlIjsgLy8kTk9OLU5MUy0xJAotICAKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgYWN0aW9uSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNDg3ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNlcnZpY2UgZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsgIAotCXB1YmxpYyBMaXN0IGdldEVuZFBvaW50cygpOwotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZEVuZFBvaW50Q29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OTczMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVR5cGUgZXh0ZW5kcyBJTmFtZWRPYmplY3QgewotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCXB1YmxpYyBDb21tYW5kIGdldERlbGV0ZUNvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiNWU4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1fVUlfVEFCX0dSQVBIPURlc2lnbgotX1VJX1RBQl9TT1VSQ0U9U291cmNlCi1fVUlfQlVUVE9OX05FVz1OZXcuLi4KLV9VSV9MQUJFTF9SRUFEX09OTFk9cmVhZC1vbmx5Ci1fVUlfTEFCRUxfTkFNRVNQQUNFPU5hbWVzcGFjZQotX1VJX0xBQkVMX1BPUlRUWVBFPVBvcnRUeXBlCi1fVUlfTEFCRUxfTE9DQVRJT049TG9jYXRpb24KLV9VSV9MQUJFTF9BRERSRVNTPUFkZHJlc3MKLV9VSV9MQUJFTF9CSU5ESU5HPUJpbmRpbmcKLV9VSV9MQUJFTF9QUkVGSVg9UHJlZml4Ci1fVUlfTEFCRUxfTkFNRT1OYW1lCi1fVUlfTEFCRUxfVFlQRT1UeXBlCi1fVUlfQUNUSU9OX0FERF9TRVJWSUNFPUFkZCBTZXJ2aWNlCi1fVUlfQUNUSU9OX0FERF9NRVNTQUdFPUFkZCBNZXNzYWdlCi1fVUlfQUNUSU9OX0FERF9PUEVSQVRJT049QWRkIE9wZXJhdGlvbgotX1VJX0FDVElPTl9BRERfSU1QT1JUPUFkZCBJbXBvcnQKLV9VSV9BQ1RJT05fQUREX09VVFBVVD1BZGQgT3V0cHV0Ci1fVUlfQUNUSU9OX0FERF9GQVVMVD1BZGQgRmF1bHQKLV9VSV9BQ1RJT05fQUREX1BPUlQ9QWRkIFBvcnQKLV9VSV9BQ1RJT05fQUREX1BPUlRUWVBFPUFkZCBQb3J0VHlwZQotX1VJX0FDVElPTl9ERUxFVEU9RGVsZXRlCi1fVUlfQlVUVE9OX0JST1dTRT1Ccm93c2UuLi4KLV9VSV9BQ1RJT05fTkVXX1BPUlRUWVBFPU5ldyBQb3J0VHlwZS4uLgotX1VJX0FDVElPTl9ORVdfQklORElORz1OZXcgQmluZGluZy4uLgotX1VJX0FDVElPTl9FWElTVElOR19QT1JUVFlQRT1FeGlzdGluZyBQb3J0VHlwZS4uLgotX1VJX0dFTkVSQVRFX0JJTkRJTkdfQ09OVEVOVD1HZW5lcmF0ZSBCaW5kaW5nIENvbnRlbnQuLi4KLV9VSV9BQ1RJT05fRVhJU1RJTkdfQklORElORz1FeGlzdGluZyBCaW5kaW5nLi4uCi1fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTD1Qcm90b2NvbAotX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0U9VGFyZ2V0IG5hbWVzcGFjZQotX1VJX0FDVElPTl9BRERfQklORElORz1BZGQgQmluZGluZwotX1VJX0FDVElPTl9BRERfU0NIRU1BPUFkZCBTY2hlbWEKLV9VSV9BQ1RJT05fQUREX0lOUFVUPUFkZCBJbnB1dAotX1VJX1NFQ1RJT05fQURWQU5DRURfQVRUUklCVVRFUz1BZHZhbmNlZAotCi1fVUlfQUNUSU9OX0VESVRfTkFNRVNQQUNFUyA9IEVkaXQgTmFtZXNwYWNlcy4uLgotX1VJX0FDVElPTl9PUEVOX1NDSEVNQT1PcGVuIFNjaGVtYQotX1VJX1RPT0xUSVBfUkVOQU1FX1JFRkFDVE9SPUNsaWNrIGhlcmUgdG8gaW52b2tlIHRoZSBSZW5hbWUgcmVmYWN0b3JpbmcuCi0KLV9VSV9MQUJFTF9SSUdIVF9DTElDS19UT19JTlNFUlRfQ09OVEVOVD1SaWdodCBtb3VzZSBjbGljayBoZXJlIHRvIGluc2VydCBjb250ZW50Ci1fVUlfQUNUSU9OX1NIT1dfUFJPUEVSVElFUz1TaG93IHByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1NTAwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvQVNEQ29udGVudE91dGxpbmVQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNETXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQVNEQ29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKLQlwcm90ZWN0ZWQgQVNETXVsdGlQYWdlRWRpdG9yIHdzZGxFZGl0b3I7Ci0JcHJvdGVjdGVkIElEZXNjcmlwdGlvbiBtb2RlbDsKLQlwcm90ZWN0ZWQgSVRyZWVDb250ZW50UHJvdmlkZXIgY29udGVudFByb3ZpZGVyOwotCXByb3RlY3RlZCBJTGFiZWxQcm92aWRlciBsYWJlbFByb3ZpZGVyOwotCXByb3RlY3RlZCBJTWVudUxpc3RlbmVyIG1lbnVMaXN0ZW5lcjsKLQkKLQlwdWJsaWMgQVNEQ29udGVudE91dGxpbmVQYWdlKEFTRE11bHRpUGFnZUVkaXRvciBlZGl0b3IsIElNZW51TGlzdGVuZXIgbWVudUxpc3RlbmVyKSB7Ci0JCXdzZGxFZGl0b3IgPSBlZGl0b3I7Ci0JCXRoaXMubWVudUxpc3RlbmVyID0gbWVudUxpc3RlbmVyOwotCX0KLQkKLQlwdWJsaWMgVHJlZVZpZXdlciBnZXRUcmVlVmlld2VyKCkgewotCQlyZXR1cm4gc3VwZXIuZ2V0VHJlZVZpZXdlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDb250ZW50UHJvdmlkZXIoSVRyZWVDb250ZW50UHJvdmlkZXIgY29udGVudFByb3ZpZGVyKSB7Ci0JCXRoaXMuY29udGVudFByb3ZpZGVyID0gY29udGVudFByb3ZpZGVyOwotCX0JCi0JCi0JcHVibGljIHZvaWQgc2V0TGFiZWxQcm92aWRlcihJTGFiZWxQcm92aWRlciBsYWJlbFByb3ZpZGVyKSB7Ci0JCXRoaXMubGFiZWxQcm92aWRlciA9IGxhYmVsUHJvdmlkZXI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE1vZGVsKElEZXNjcmlwdGlvbiBtb2RlbCkgewotCQl0aGlzLm1vZGVsID0gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOyAgICAgICAgICAgICAgICAgCi0JCQotCQlnZXRUcmVlVmlld2VyKCkuc2V0Q29udGVudFByb3ZpZGVyKGNvbnRlbnRQcm92aWRlcik7Ci0JCWdldFRyZWVWaWV3ZXIoKS5zZXRMYWJlbFByb3ZpZGVyKGxhYmVsUHJvdmlkZXIpOwotCQlnZXRUcmVlVmlld2VyKCkuc2V0SW5wdXQobW9kZWwpOwotCQlnZXRUcmVlVmlld2VyKCkuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQkKLQkJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoIiNwb3B1cCIpOy8vJE5PTi1OTFMtMSQKLQkJbWVudU1hbmFnZXIuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOwotCQlNZW51IG1lbnUgPSBtZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShnZXRUcmVlVmlld2VyKCkuZ2V0Q29udHJvbCgpKTsKLQkJZ2V0VHJlZVZpZXdlcigpLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOwotCQltZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIobWVudUxpc3RlbmVyKTsKLQkJCi0JICAgIGdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KCJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5wb3B1cC5vdXRsaW5lIiwgbWVudU1hbmFnZXIsIHdzZGxFZGl0b3IuZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsgLy8kTk9OLU5MUy0xJAotCQkgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0Q29udHJvbCgpLEFTREVkaXRvckNTSGVscElkcy5XU0RMX09VVExJTkVfVklFVyk7IAotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7Ci0JCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJaWYgKCFwcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdlKSB7Ci0JCQlwcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTsKLQkJCXN1cGVyLnNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOwotCQkJT2JqZWN0IHNlbGVjdGlvbiA9IG51bGw7Ci0JCQkKLQkJCWlmICgoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBFZGl0UGFydCl7Ci0JCQkJRWRpdFBhcnQgbmV3RWRpdFBhcnQgPSAoRWRpdFBhcnQpICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlzZWxlY3Rpb24gPSBuZXdFZGl0UGFydC5nZXRNb2RlbCgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2VsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCQkJfQotCQotCQkJaWYgKHNlbGVjdGlvbiAhPSBudWxsKSB7Ci0JCQkJc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbikpOwotCQkJfQotCQkJcHJvY2Vzc2luZ1NlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvQVNEQ29udGVudE91dGxpbmVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2Q5MzBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU5hbWVkT2JqZWN0OwotCi1wdWJsaWMgY2xhc3MgQVNEQ29udGVudE91dGxpbmVQcm92aWRlciBpbXBsZW1lbnRzIElUcmVlQ29udGVudFByb3ZpZGVyLCBJTGFiZWxQcm92aWRlciwgSUFTRE9iamVjdExpc3RlbmVyIHsKLQlwcm90ZWN0ZWQgVmlld2VyIHZpZXdlcjsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZAotICAgICAqLwotCXByb3RlY3RlZCBBU0RNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yOwotCXByb3RlY3RlZCBMaXN0IGxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZAotICAgICAqLyAgICAKLQlwcm90ZWN0ZWQgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCi0gICAgcHVibGljIEFTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIoKQotICAgIHsgICAgICAKLSAgICB9Ci0gICAgCi0JcHVibGljIEFTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIoQVNETXVsdGlQYWdlRWRpdG9yIGVkaXRvciwgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKLSAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQl9Ci0JCi0JcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBwYXJlbnRFbGVtZW50KSB7Ci0JCWlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQlJVHJlZUVsZW1lbnRbXSBraWRzID0gKChJVHJlZUVsZW1lbnQpIHBhcmVudEVsZW1lbnQpLmdldENoaWxkcmVuKCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwga2lkcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQlhdHRhY2hMaXN0ZW5lcihraWRzW2luZGV4XSk7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBraWRzOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07IAotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQlyZXR1cm4gKChJVHJlZUVsZW1lbnQpIGVsZW1lbnQpLmdldFBhcmVudCgpOwotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3QgZWxlbWVudCkgewotCQlpZiAoZ2V0Q2hpbGRyZW4oZWxlbWVudCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKLQkJcmV0dXJuIGdldENoaWxkcmVuKGlucHV0RWxlbWVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJdW5hdHRhY2hBbGxMaXN0ZW5lcnMoKTsKLQkJdmlld2VyID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKLQkJdGhpcy52aWV3ZXIgPSB2aWV3ZXI7Ci0JCXVuYXR0YWNoQWxsTGlzdGVuZXJzKCk7Ci0JfQotCi0JcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQlyZXR1cm4gKChJVHJlZUVsZW1lbnQpIGVsZW1lbnQpLmdldEltYWdlKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0gICAgCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCVN0cmluZyB0ZXh0ID0gbnVsbDsKLSAgICAgICAgIAotICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgeyAKLQkJCXRleHQgPSAgKChJTmFtZWRPYmplY3QpIGVsZW1lbnQpLmdldE5hbWUoKTsKLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQl0ZXh0ID0gKChJVHJlZUVsZW1lbnQpIGVsZW1lbnQpLmdldFRleHQoKTsKLQkJfQotCQllbHNlIHsKLQkJCXRleHQgPSBlbGVtZW50LnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCWlmICh0ZXh0ID09IG51bGwpIHsKLQkJCXRleHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCQotCQlyZXR1cm4gdGV4dDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYXR0YWNoTGlzdGVuZXIoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgSUFTRE9iamVjdCAmJiAhbGlzdGVuZXJzLmNvbnRhaW5zKG9iamVjdCkpIHsKLQkJCSgoSUFTRE9iamVjdCkgb2JqZWN0KS5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotCQkJbGlzdGVuZXJzLmFkZChvYmplY3QpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHVuYXR0YWNoQWxsTGlzdGVuZXJzKCkgewotCQlJdGVyYXRvciBpdCA9IGxpc3RlbmVycy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKLQkJCSgoSUFTRE9iamVjdCkgaXRlbSkudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkgeyAgICAgICAgICAgICAKLQkJaWYgKHZpZXdlciBpbnN0YW5jZW9mIFRyZWVWaWV3ZXIpIHsKLQkJCVRyZWVWaWV3ZXIgdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKSB2aWV3ZXI7Ci0JCQl0cmVlVmlld2VyLnJlZnJlc2gob2JqZWN0KTsKLQkJCXRyZWVWaWV3ZXIucmV2ZWFsKG9iamVjdCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lDYXRlZ29yeUFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9JQ2F0ZWdvcnlBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwM2Q4MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lDYXRlZ29yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIElDYXRlZ29yeUFkYXB0ZXIgewotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lUcmVlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lUcmVlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWEyZDczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9JVHJlZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLQotcHVibGljIGludGVyZmFjZSBJVHJlZUVsZW1lbnQgewotICBwdWJsaWMgZmluYWwgc3RhdGljIElUcmVlRWxlbWVudFtdIEVNUFRZX0xJU1QgPSB7fTsKLSAgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKTsKLSAgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpOwotICBib29sZWFuIGhhc0NoaWxkcmVuKCk7Ci0gIFN0cmluZyBnZXRUZXh0KCk7Ci0gIEltYWdlIGdldEltYWdlKCk7Ci0gIEltYWdlIGdldFNlY29uZGFyeUltYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEQWJzdHJhY3RTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEQWJzdHJhY3RTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YzRkYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0FTREFic3RyYWN0U2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5GaWxlU3RvcmVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklTZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLQotcHVibGljIGNsYXNzIEFTREFic3RyYWN0U2VjdGlvbiBpbXBsZW1lbnRzIElTZWN0aW9uLCBJQVNET2JqZWN0TGlzdGVuZXIsIExpc3RlbmVyLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotCXByaXZhdGUgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeTsKLQlwcml2YXRlIE9iamVjdCBlbGVtZW50TW9kZWw7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gaXNSZWFkT25seSA9IGZhbHNlOwotCXByb3RlY3RlZCBDb21wb3NpdGUgY29tcG9zaXRlOwotCXByb3RlY3RlZCBpbnQgcmlnaHRNYXJnaW5TcGFjZTsKLQlwcm90ZWN0ZWQgaW50IHRhYmxlTWluaW11bVdpZHRoID0gNTA7Ci0JcHJvdGVjdGVkIEN1c3RvbUxpc3RlbmVyIGN1c3RvbUxpc3RlbmVyID0gbmV3IEN1c3RvbUxpc3RlbmVyKCk7Ci0JCi0JcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlIHRhYmJlZFByb3BlcnR5U2hlZXRQYWdlKQotCXsKLQkJY3JlYXRlQ29udHJvbHMocGFyZW50LCB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZS5nZXRXaWRnZXRGYWN0b3J5KCkpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgYUZhY3RvcnkpCi0JewotCQl0aGlzLmZhY3RvcnkgPSBhRmFjdG9yeTsKLQkJR0MgZ2MgPSBuZXcgR0MocGFyZW50KTsKLQkJUG9pbnQgZXh0ZW50ID0gZ2MudGV4dEV4dGVudCgiICAuLi4gICIpOyAvLyROT04tTkxTLTEkCi0JCXJpZ2h0TWFyZ2luU3BhY2UgPSBleHRlbnQueDsKLQkJZ2MuZGlzcG9zZSgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jc2V0SW5wdXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQsIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbnB1dChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCUFzc2VydC5pc1RydWUoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pOwotCQlPYmplY3QgaW5wdXQgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCWVsZW1lbnRNb2RlbCA9IGlucHV0OwotCQlhdHRhY2hMaXN0ZW5lcihlbGVtZW50TW9kZWwpOwotCQkKLQkJaWYgKGlucHV0IGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkJaXNSZWFkT25seSA9ICgoSUFTRE9iamVjdCkgaW5wdXQpLmlzUmVhZE9ubHkoKTsKLQkJfQotCi0JCUlFZGl0b3JQYXJ0IG93bmluZ0VkaXRvciA9IG51bGw7Ci0gICAgaWYgKHBhcnQhPW51bGwpIHsKLSAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSUVkaXRvclBhcnQpIHsKLSAgICAgICAgb3duaW5nRWRpdG9yID0gKElFZGl0b3JQYXJ0KXBhcnQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0gICAgICAgIGlmICh3b3JrYmVuY2ggIT0gbnVsbCkgewotICAgICAgICAgIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgICAgICAgIGlmICh3aW5kb3cgIT0gbnVsbCkgewotICAgICAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgICAgICBpZiAocGFnZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIG93bmluZ0VkaXRvciA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChvd25pbmdFZGl0b3IgIT0gbnVsbCkgewotICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gb3duaW5nRWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICBpZiAoIShlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCkpIHsKLSAgICAgICAgaXNSZWFkT25seSA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotCQlyZWZyZXNoKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JU2VjdGlvbiNhYm91dFRvQmVTaG93bigpCi0JICovCi0JcHVibGljIHZvaWQgYWJvdXRUb0JlU2hvd24oKQotCXsKLQkJcmVmcmVzaCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jYWJvdXRUb0JlSGlkZGVuKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhYm91dFRvQmVIaWRkZW4oKQotCXsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQkJdW5hdHRhY2hBbGxMaXN0ZW5lcnMoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI2dldE1pbmltdW1IZWlnaHQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0TWluaW11bUhlaWdodCgpCi0JewotCQlyZXR1cm4gU1dULkRFRkFVTFQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JU2VjdGlvbiNzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpCi0JewotCQlpZiAoIWNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpCi0JCXsKLQkJCWlmIChpc1JlYWRPbmx5KQotCQkJewotCQkJCWNvbXBvc2l0ZS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQljb21wb3NpdGUuc2V0RW5hYmxlZCh0cnVlKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHdpZGdldCBmYWN0b3J5LgotCSAqIEByZXR1cm4gdGhlIHdpZGdldCBmYWN0b3J5LgotCSAqLwotCXB1YmxpYyBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBnZXRXaWRnZXRGYWN0b3J5KCkgewotCQlyZXR1cm4gZmFjdG9yeTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLQl7Ci0JCXJlZnJlc2goKTsKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgZG9XaWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7fQotCQotCXB1YmxpYyB2b2lkIGRvV2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7fQotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQpCi0JICovCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJewotCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLQkJCWRvV2lkZ2V0RGVmYXVsdFNlbGVjdGVkKGUpOwotCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCX0KLQkJCi0JfQotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCXsKLQkJaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzSW5Eb0hhbmRsZSkgCi0JCXsKLQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0JCQlkb1dpZGdldFNlbGVjdGVkKGUpOwotCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCX0KLQkJCi0JfQotCQotCWJvb2xlYW4gbGlzdGVuZXJFbmFibGVkID0gdHJ1ZTsKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIGxpc3RlbmVyRW5hYmxlZC4KLQkgKiBAcmV0dXJuIHZhbHVlIG9mIGxpc3RlbmVyRW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0xpc3RlbmVyRW5hYmxlZCgpIAotCXsKLQkJcmV0dXJuIGxpc3RlbmVyRW5hYmxlZDsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgYXBwbHlUZXh0TGlzdGVuZXJzKENvbnRyb2wgY29udHJvbCkKLSAgICB7Ci0gICAgICBjb250cm9sLmFkZExpc3RlbmVyKFNXVC5Gb2N1c091dCwgY3VzdG9tTGlzdGVuZXIpOwotICAgICAgY29udHJvbC5hZGRMaXN0ZW5lcihTV1QuS2V5RG93biwgY3VzdG9tTGlzdGVuZXIpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcnMoQ29udHJvbCBjb250cm9sKQotICAgIHsKLSAgICAgIGNvbnRyb2wucmVtb3ZlTGlzdGVuZXIoU1dULkZvY3VzT3V0LCBjdXN0b21MaXN0ZW5lcik7Ci0gICAgICBjb250cm9sLnJlbW92ZUxpc3RlbmVyKFNXVC5LZXlEb3duLCBjdXN0b21MaXN0ZW5lcik7Ci0gICAgfQotCQotCS8qKgotCSAqIFNldCB0aGUgdmFsdWUgb2YgbGlzdGVuZXJFbmFibGVkLgotCSAqIEBwYXJhbSB2ICBWYWx1ZSB0byBhc3NpZ24gdG8gbGlzdGVuZXJFbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldExpc3RlbmVyRW5hYmxlZChib29sZWFuICB2KSAKLQl7Ci0JCXRoaXMubGlzdGVuZXJFbmFibGVkID0gdjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJewotCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLS8vCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOwotCQkJZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJfSAvLyBlbmQgb2YgaWYgKCkKLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9IYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCQotCX0KLQkKLQlwcm90ZWN0ZWQgRGVsYXllZEV2ZW50IGRlbGF5ZWRUYXNrOwotCQotCXByb3RlY3RlZCB2b2lkIHN0YXJ0RGVsYXllZEV2ZW50KEV2ZW50IGUpCi0JewotCQlpZiAoZGVsYXllZFRhc2sgPT0gbnVsbCB8fAotCQkJCWRlbGF5ZWRUYXNrLmdldEV2ZW50KCkgPT0gbnVsbCkKLQkJewotCQkJZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0JCQlkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsZGVsYXllZFRhc2spOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJRXZlbnQgZGVsYXllZEV2ZW50ID0gZGVsYXllZFRhc2suZ2V0RXZlbnQoKTsKLQkJCQotCQkJaWYgKGUud2lkZ2V0ID09IGRlbGF5ZWRFdmVudC53aWRnZXQgJiYKLQkJCQkJZS50eXBlID09IGRlbGF5ZWRFdmVudC50eXBlKQotCQkJewotCQkJCS8vIHNhbWUgZXZlbnQsIGp1c3QgZGlmZmVyZW50IGRhdGEsIGRlbGF5IG5ldyBldmVudAotCQkJCWRlbGF5ZWRUYXNrLnNldEV2ZW50KG51bGwpOwotCQkJfQotCQkJZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0JCQlkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsZGVsYXllZFRhc2spOwotCQl9Ci0JfQotCQotCWNsYXNzIERlbGF5ZWRFdmVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0JewotCQlwcm90ZWN0ZWQgRXZlbnQgZXZlbnQ7Ci0JCQotCQkvKgotCQkgKiBAc2VlIFJ1bm5hYmxlI3J1bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBydW4oKQotCQl7Ci0JCQlpZiAoZXZlbnQgIT0gbnVsbCkKLQkJCXsKLQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCWRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJCWV2ZW50ID0gbnVsbDsKLQkJCX0KLQkJfQotCQkKLQkJLyoqCi0JCSAqIEdldHMgdGhlIGV2ZW50LgotCQkgKiBAcmV0dXJuIFJldHVybnMgYSBFdmVudAotCQkgKi8KLQkJcHVibGljIEV2ZW50IGdldEV2ZW50KCkKLQkJewotCQkJcmV0dXJuIGV2ZW50OwotCQl9Ci0JCQotCQkvKioKLQkJICogU2V0cyB0aGUgZXZlbnQuCi0JCSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gc2V0Ci0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRFdmVudChFdmVudCBldmVudCkKLQkJewotCQkJdGhpcy5ldmVudCA9IGV2ZW50OwotCQl9Ci0JCQotCX0KLQkgICAKLSAgICBjbGFzcyBDdXN0b21MaXN0ZW5lciBpbXBsZW1lbnRzIExpc3RlbmVyCi0gICAgewotICAgICAgYm9vbGVhbiBpc0hhbmRsaW5nRXZlbnQgPSBmYWxzZTsKLSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNSZWFkT25seSkgCi0gICAgICAgIHsKLSAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTV1QuS2V5RG93biA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChldmVudC5jaGFyYWN0ZXIgPT0gU1dULkNSKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0hhbmRsaW5nRXZlbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIGRvSGFuZGxlRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTV1QuRm9jdXNPdXQgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWlzSGFuZGxpbmdFdmVudCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlzSGFuZGxpbmdFdmVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZG9IYW5kbGVFdmVudChldmVudCk7Ci0gICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzSW5Eb0hhbmRsZTsKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIGlzSW5Eb0hhbmRsZS4KLQkgKiBAcmV0dXJuIHZhbHVlIG9mIGlzSW5Eb0hhbmRsZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0luRG9IYW5kbGUoKSAKLQl7Ci0JCXJldHVybiBpc0luRG9IYW5kbGU7Ci0JfQotCQotCXN0YXRpYyBwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGdldFN0YXR1c0xpbmVNYW5hZ2VyKElFZGl0b3JQYXJ0IGVkaXRvclBhcnQpCi0JeyAKLQkJSVN0YXR1c0xpbmVNYW5hZ2VyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeQotCQl7ICAgICAgICAgICAgICAgICAgICAgICAKLQkJCUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yID0gKEVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yKWVkaXRvclBhcnQuZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7Ci0JCQlyZXN1bHQgPSBjb250cmlidXRvci5nZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJfSAgCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKSB7Ci0JCXJldHVybiBlbGVtZW50TW9kZWw7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGF0dGFjaExpc3RlbmVyKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElBU0RPYmplY3QgJiYgIWxpc3RlbmVycy5jb250YWlucyhvYmplY3QpKSB7Ci0JCQkoKElBU0RPYmplY3QpIG9iamVjdCkucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkJCWxpc3RlbmVycy5hZGQob2JqZWN0KTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCB1bmF0dGFjaEFsbExpc3RlbmVycygpIHsKLQkJSXRlcmF0b3IgaXQgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQkoKElBU0RPYmplY3QpIGl0ZW0pLnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKENvbnRyb2wgY29udHJvbCkgewotCQlpZiAoY29udHJvbCAhPSBudWxsKSB7Ci0JCQlpZiAoaXNSZWFkT25seSkgewotCQkJCWNvbnRyb2wuc2V0Rm9yZWdyb3VuZChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWNvbnRyb2wuc2V0Rm9yZWdyb3VuZChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuZGVmYXVsdEZvcmVncm91bmRDb2xvcik7Ci0JCQl9Ci0JCX0KLQl9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZUNvbW1hbmQoQ29tbWFuZCBjb21tYW5kKSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpICE9IG51bGwgJiYgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0gICAgICAgICAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29tbWFuZC5leGVjdXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9BU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWY2NWQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9BU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlTaGVldFBhZ2VDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZTsKLQotcHVibGljIGNsYXNzIEFTRFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlIGV4dGVuZHMgVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyLy8sIElFbGVtZW50TGlzdGVuZXIKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZUNvbnRyaWJ1dG9yCi0gICAqLwotICBwdWJsaWMgQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UoSVRhYmJlZFByb3BlcnR5U2hlZXRQYWdlQ29udHJpYnV0b3IgdGFiYmVkUHJvcGVydHlTaGVldFBhZ2VDb250cmlidXRvcikKLSAgewotICAgIHN1cGVyKHRhYmJlZFByb3BlcnR5U2hlZXRQYWdlQ29udHJpYnV0b3IpOwotLy8gICAgdGFiQ29udHJpYnV0b3IgPSB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZUNvbnRyaWJ1dG9yOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLSAgCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLSAgfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkpIHsKLQkJCXNlbGVjdGlvbkNoYW5nZWQoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCksIGV2ZW50LmdldFNlbGVjdGlvbigpKTsKLQkJICAgIC8vc3VwZXIuc2VsZWN0aW9uQ2hhbmdlZChnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKSwgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOwotCQl9Ci0JfQotICAKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9CaW5kaW5nU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0JpbmRpbmdTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOTAwZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0JpbmRpbmdTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldE5ld0ludGVyZmFjZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1NlY3Rpb24gZXh0ZW5kcyBSZWZlcmVuY2VTZWN0aW9uIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIgewotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCXByaXZhdGUgQ0xhYmVsIHByb3RvY29sVmFsdWU7Ci0vLwlwcml2YXRlIENMYWJlbCBvcHRpb25zVmFsdWU7Ci0JcHJpdmF0ZSBCdXR0b24gcmVnZW5CaW5kaW5nQnV0dG9uOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpIHsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJY29tYm9MYWJlbC5zZXRUZXh0KG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlcy5fVUlfTEFCRUxfUE9SVFRZUEUgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCi0JCUNMYWJlbCBwcm90b2NvbExhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MKTsKLQkJcHJvdG9jb2xWYWx1ZT0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJLy8gTGF5b3V0IHByb3RvY29sTGFiZWwKLQkJRm9ybURhdGEgZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvdG9jb2xWYWx1ZSwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbFZhbHVlLCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJvdG9jb2xMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJLy8gTGF5b3V0IHByb3RvY29sVmFsdWUKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbWJvLCAwKTsKLS8vCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgK0lUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotCQlwcm90b2NvbFZhbHVlLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQkvKgotCQlDTGFiZWwgb3B0aW9uc0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLmdldFN0cmluZygiX1VJX1RJVExFX09QVElPTlMiKSArICI6Iik7Ci0JCW9wdGlvbnNWYWx1ZSA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCAiIik7Ci0JCQotCQkvLyBMYXlvdXQgb3B0aW9uc0xhYmVsCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG9wdGlvbnNWYWx1ZSwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChvcHRpb25zVmFsdWUsIDAsIFNXVC5DRU5URVIpOwotCQlvcHRpb25zTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCS8vIExheW91dCBvcHRpb25zVmFsdWUKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sVmFsdWUsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLS8vCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbFZhbHVlLCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCW9wdGlvbnNWYWx1ZS5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJU3RyaW5nIGJ1dHRvbkxhYmVsID0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzLmdldFN0cmluZygiX1VJX0dFTkVSQVRFX0JJTkRJTkdfQ09OVEVOVCIpOwotCQlyZWdlbkJpbmRpbmdCdXR0b24gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXBvc2l0ZSwgYnV0dG9uTGFiZWwsIFNXVC5QVVNIKTsKLQotCQkvLyBMYXlvdXQgYnV0dG9uCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotLy8JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQob3B0aW9uc1ZhbHVlLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG9wdGlvbnNMYWJlbCwgMCk7Ci0JCXJlZ2VuQmluZGluZ0J1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkqLwotCi0JCVN0cmluZyBidXR0b25MYWJlbCA9IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlcy5fVUlfR0VORVJBVEVfQklORElOR19DT05URU5UOwotCQlyZWdlbkJpbmRpbmdCdXR0b24gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXBvc2l0ZSwgYnV0dG9uTGFiZWwsIFNXVC5QVVNIKTsKLQotCQkvLyBMYXlvdXQgYnV0dG9uCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotLy8JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQob3B0aW9uc1ZhbHVlLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sTGFiZWwsIDApOwotCQlyZWdlbkJpbmRpbmdCdXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlyZWdlbkJpbmRpbmdCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCQotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sVmFsdWUsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0JJTkRJTkdfUFJPVE9DT0xfVEVYVCk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVnZW5CaW5kaW5nQnV0dG9uLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19CSU5ESU5HX0dFTl9CSU5ESU5HX0JVVFRPTik7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0JJTkRJTkdfUE9SVFRZUEVfQ09NQk8pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCUlCaW5kaW5nIGJpbmRpbmcgPSBnZXRJQmluZGluZygpOwotCQlTdHJpbmcgcHJvdG9jb2wgPSBiaW5kaW5nLmdldFByb3RvY29sKCk7Ci0JCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sKTsKLQkJaWYgKGV4dCAhPSBudWxsKSB7Ci0JCSAgcHJvdG9jb2wgPSBleHQuZ2V0TGFiZWwoKTsKLQkJfQotCi0JCWlmIChwcm90b2NvbCA9PSBudWxsIHx8IHByb3RvY29sLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJcHJvdG9jb2wgPSAiLS0tLSI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlwcm90b2NvbFZhbHVlLnNldFRleHQocHJvdG9jb2wpOwotCi0vLwkJb3B0aW9uc1ZhbHVlLnNldFRleHQoIiIpOwotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0JCWlmIChyZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCXJldHVybiByZWZNYW5hZ2VyOwotCQl9Ci0KLQkJcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKChJQVNET2JqZWN0KSBnZXRNb2RlbCgpKTsKLQkJCi0JCXJldHVybiByZWZNYW5hZ2VyOwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldENvbWJvSXRlbXMoKSB7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIG1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkKLQkJTGlzdCBpdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaXRlbXMuYWRkKEJST1dTRV9TVFJJTkcpOwotCQlpdGVtcy5hZGQoTkVXX1NUUklORyk7Ci0KLQkJaWYgKG1hbmFnZXIgIT0gbnVsbCkgewotICAJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBjb21ib0l0ZW1zID0gbWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tYm9JdGVtcy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGl0ZW1zLmFkZChjb21ib0l0ZW1zW2luZGV4XSk7Ci0gICAgICB9Ci0JCX0KLQkJcmV0dXJuIGl0ZW1zOwotCX0KLQotCXByb3RlY3RlZCBPYmplY3QgZ2V0Q3VycmVudENvbWJvSXRlbSgpIHsKLQkJSUJpbmRpbmcgYmluZGluZyA9IGdldElCaW5kaW5nKCk7Ci0JCXJldHVybiBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0Q29tYm9JdGVtTmFtZShPYmplY3QgaXRlbSkgewotCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWlmIChpdGVtIGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJbmFtZSA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaXRlbSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBJSW50ZXJmYWNlKSB7Ci0JCQluYW1lID0gKChJSW50ZXJmYWNlKSBpdGVtKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJbmFtZSA9IChTdHJpbmcpIGl0ZW07Ci0JCX0KLQkJCi0JCXJldHVybiBuYW1lOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1Db21ib1NlbGVjdGlvbihPYmplY3QgaXRlbSkgewotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBudWxsOwotCQkKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQlzcGVjID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGl0ZW07Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBtYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCW1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKChJQmluZGluZykgZ2V0TW9kZWwoKSwgc3BlYyk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJaWYgKGl0ZW0uZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbiBhY3Rpb24gPSBuZXcgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24ocGFydCk7Ci0JCQkJYWN0aW9uLnNldElCaW5kaW5nKChJQmluZGluZykgZ2V0TW9kZWwoKSk7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJfQotCQkJZWxzZSBpZiAoaXRlbS5lcXVhbHMoTkVXX1NUUklORykpIHsKLQkJCQlJV29ya2JlbmNoUGFydCBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotCQkJCUFTRFNldE5ld0ludGVyZmFjZUFjdGlvbiBhY3Rpb24gPSBuZXcgQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uKHBhcnQpOwotCQkJCWFjdGlvbi5zZXRJQmluZGluZygoSUJpbmRpbmcpIGdldE1vZGVsKCkpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJfQotCi0JCXJlZnJlc2goKTsKLQl9Ci0KLQlwcml2YXRlIElCaW5kaW5nIGdldElCaW5kaW5nKCkgewotCQlyZXR1cm4gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCWlmIChlLndpZGdldCA9PSByZWdlbkJpbmRpbmdCdXR0b24pIHsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IGdldElCaW5kaW5nKCkuZ2V0R2VuZXJhdGVCaW5kaW5nQ29tbWFuZCgpOwotCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9XaWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9Eb2N1bWVudGF0aW9uU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0RvY3VtZW50YXRpb25TZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjJjOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0RvY3VtZW50YXRpb25TZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFkZEVsZW1lbnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRhdGlvblNlY3Rpb24gZXh0ZW5kcyBBU0RBYnN0cmFjdFNlY3Rpb24gewotCVRleHQgZG9jVGV4dDsKLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCWNvbXBvc2l0ZSA9CWdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVGbGF0Rm9ybUNvbXBvc2l0ZShwYXJlbnQpOwotCi0JCWRvY1RleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiLCBTV1QuTVVMVEkgfCBTV1QuTk9ORSB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7IC8vJE5PTi1OTFMtMSQKLQkJZG9jVGV4dC5hZGRMaXN0ZW5lcihTV1QuS2V5RG93biwgdGhpcyk7Ci0JCUZvcm1EYXRhIGRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOwotCQlkb2NUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZG9jVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfRE9DVU1FTlRBVElPTl9UQUIpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCS8qCi0JICogVE9ETzogdGhlIGRvSGFuZGxlRXZlbnQoKSBhbmQgcmVmcmVzaCgpIG1ldGhvZHMgYm90aCB1c2UgV1NETDExIHNwZWNpZmljCi0JICoga25vd2xlZGdlLiAgVGhpcyBjbGFzcyAoRG9jdW1lbnRhdGlvblNlY3Rpb24pIHNob3VsZCBiZSBnZW5lcmljLiAgSW4gUG9zdCAxLjUsCi0JICogd2UgbmVlZCB0byBhZGQgZG9jdW1lbnRhdGlvbiBzdXBwb3J0IG1ldGhvZHMgdG8gb3VyIGZhY2FkZSBzbyB3ZSBkb24ndCBuZWVkCi0JICogdG8ga25vdyBXU0RMIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLi4uLi4uLiAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkKLQl7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJaWYgKGRvY1RleHQuaXNGb2N1c0NvbnRyb2woKSkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCWRvY1RleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGdldE1vZGVsKCkgIT0gbnVsbCAmJiBnZXRFbGVtZW50KCkgIT0gbnVsbCkKLQkJewotCQkJRWxlbWVudCBkb2NOb2RlID0gZ2V0RWxlbWVudCgpLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0JCQlpZiAoZG9jTm9kZSAhPSBudWxsKQotCQkJewotCQkJCU5vZGUgdGV4dE5vZGUgPSBkb2NOb2RlLmdldEZpcnN0Q2hpbGQoKTsKLQkJCQlpZiAodGV4dE5vZGUgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCVN0cmluZyBkb2NWYWx1ZSA9IHRleHROb2RlLmdldE5vZGVWYWx1ZSgpOwotCQkJCQlpZiAoZG9jVmFsdWUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJZG9jVGV4dC5zZXRUZXh0KGRvY1ZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCi0JLyoKLQkgKiBUT0RPOiB0aGUgZG9IYW5kbGVFdmVudCgpIGFuZCByZWZyZXNoKCkgbWV0aG9kcyBib3RoIHVzZSBXU0RMMTEgc3BlY2lmaWMKLQkgKiBrbm93bGVkZ2UuICBUaGlzIGNsYXNzIChEb2N1bWVudGF0aW9uU2VjdGlvbikgc2hvdWxkIGJlIGdlbmVyaWMuICBJbiBQb3N0IDEuNSwKLQkgKiB3ZSBuZWVkIHRvIGFkZCBkb2N1bWVudGF0aW9uIHN1cHBvcnQgbWV0aG9kcyB0byBvdXIgZmFjYWRlIHNvIHdlIGRvbid0IG5lZWQKLQkgKiB0byBrbm93IFdTREwgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uLi4uLi4uIAotCSAqLwotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGRvY1RleHQpCi0JCXsKLQkJCVN0cmluZyB2YWx1ZSA9IGRvY1RleHQuZ2V0VGV4dCgpOwotCQkJaWYgKGdldE1vZGVsKCkgIT0gbnVsbCAmJiBnZXRFbGVtZW50KCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlFbGVtZW50IGRvY05vZGUgPSBnZXRFbGVtZW50KCkuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLQkJCQlpZiAoZG9jTm9kZSAhPSBudWxsKQotCQkJCXsKLQkJCQkJTm9kZSB0ZXh0Tm9kZSA9IGRvY05vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJCQlpZiAodGV4dE5vZGUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJdGV4dE5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCWlmICh2YWx1ZS5sZW5ndGgoKSA+IDApCi0JCQkJCQl7Ci0JCQkJCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2NOb2RlLmdldE93bmVyRG9jdW1lbnQoKTsKLQkJCQkJCQlvcmcudzNjLmRvbS5UZXh0IG5ld1RleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpOwotCQkJCQkJCWRvY05vZGUuYXBwZW5kQ2hpbGQobmV3VGV4dE5vZGUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCUVsZW1lbnQgZWxlbWVudCA9IGdldEVsZW1lbnQoKS5nZXRFbGVtZW50KCk7Ci0JCQkJCUFkZEVsZW1lbnRBY3Rpb24gYWN0aW9uID0gbmV3IEFkZEVsZW1lbnRBY3Rpb24oZWxlbWVudCwgZWxlbWVudC5nZXRQcmVmaXgoKSwgImRvY3VtZW50YXRpb24iLCBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJYWN0aW9uLnJ1bigpOwotCQkJCQlFbGVtZW50IG5ld0RvY3VtZW50YXRpb24gPSBhY3Rpb24uZ2V0TmV3RWxlbWVudCgpOwotCi0JCQkJCURvY3VtZW50IGRvY3VtZW50ID0gbmV3RG9jdW1lbnRhdGlvbi5nZXRPd25lckRvY3VtZW50KCk7Ci0JCQkJCW9yZy53M2MuZG9tLlRleHQgbmV3VGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7Ci0JCQkJCW5ld0RvY3VtZW50YXRpb24uYXBwZW5kQ2hpbGQobmV3VGV4dE5vZGUpOwotCQkJCQlnZXRFbGVtZW50KCkuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQobmV3RG9jdW1lbnRhdGlvbik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBXU0RMRWxlbWVudCBnZXRFbGVtZW50KCkgewotCQlXU0RMRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQotCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgewotCQkJbW9kZWwgPSAoKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKSBtb2RlbCkuZ2V0TW9kZWwoKTsKLQkJfQotCQkKLQkJLy8gVE9ETzogU2hvdWxkIHdlIGJlIGhhbmRsaW5nIHRoZSBYTUwgU2NoZW1hIGNhc2UgaGVyZSBhcyB3ZWxsPwotCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCU9iamVjdCB0YXJnZXQgPSAoKFdTRExCYXNlQWRhcHRlcikgbW9kZWwpLmdldFRhcmdldCgpOwotCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJZWxlbWVudCA9IChXU0RMRWxlbWVudCkgdGFyZ2V0OwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9FbmRQb2ludFNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9FbmRQb2ludFNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UzNDZkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvRW5kUG9pbnRTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0NvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3QmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBFbmRQb2ludFNlY3Rpb24gZXh0ZW5kcyBSZWZlcmVuY2VTZWN0aW9uIHsKLQlwcm90ZWN0ZWQgVGV4dCBhZGRyZXNzVGV4dDsKLQlwcm90ZWN0ZWQgQ0NvbWJvIHByb3RvY29sQ29tYm87Ci0JCi0JcHJvdGVjdGVkIExpc3QgYmluZGluZ3NJbkNvbWJvID0gbmV3IEFycmF5TGlzdCgpOwotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCUZvcm1EYXRhIGRhdGE7Ci0JCQotCQkvLyBBZGRyZXNzIHJvdwotCQlDTGFiZWwgYWRkcmVzc0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9BRERSRVNTICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWFkZHJlc3NUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGFkZHJlc3NUZXh0LCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFkZHJlc3NUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJYWRkcmVzc0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJYWRkcmVzc1RleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChhZGRyZXNzVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUE9SVF9BRERSRVNTX1RFWFQpOwotCi0JCS8vIFByb3RvY29sIFJvdwotCQlDTGFiZWwgcHJvdG9jb2xMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTCArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlwcm90b2NvbENvbWJvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNDb21ibyhjb21wb3NpdGUpOyAvLyROT04tTkxTLTEkCi0KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvdG9jb2xDb21ibywgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbENvbWJvLCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJvdG9jb2xMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFkZHJlc3NUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXByb3RvY29sQ29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJcHJvdG9jb2xDb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QT1JUX1BST1RPQ09MX1RFWFQpOwotCi0JCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfQklORElORyArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUE9SVF9CSU5ESU5HX0NPTUJPKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlyZW1vdmVMaXN0ZW5lcnMoYWRkcmVzc1RleHQpOwotCQlwcm90b2NvbENvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCi0JCXN1cGVyLnJlZnJlc2goKTsKLQotCQlJRW5kUG9pbnQgZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBnZXRNb2RlbCgpOwotCQlpZiAoZW5kUG9pbnQuZ2V0QWRkcmVzcygpICE9IG51bGwpIHsKLQkJCWlmICghZW5kUG9pbnQuZ2V0QWRkcmVzcygpLmVxdWFscyhhZGRyZXNzVGV4dC5nZXRUZXh0KCkpKSB7Ci0JCQkJYWRkcmVzc1RleHQuc2V0VGV4dChlbmRQb2ludC5nZXRBZGRyZXNzKCkpOwotCQkJfQotCQl9Ci0KLQkJcHJvdG9jb2xDb21iby5yZW1vdmVBbGwoKTsKLQkJaWYgKGVuZFBvaW50IGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLQkJCVN0cmluZyBwcm90b2NvbFZhbHVlID0gKChXMTFFbmRQb2ludCkgZW5kUG9pbnQpLmdldFByb3RvY29sKCk7Ci0JCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sVmFsdWUpOwotCQkJaWYgKGV4dHQgIT0gbnVsbCkgewotCQkJCXByb3RvY29sVmFsdWUgPSBleHR0LmdldExhYmVsKCk7Ci0JCQl9Ci0JCQlMaXN0IHByb3RvY29scyA9ICgoVzExRW5kUG9pbnQpIGdldE1vZGVsKCkpLmdldEFwcGxpY2FibGVQcm90b2NvbCgpOwotCQkJSXRlcmF0b3IgaXQgPSBwcm90b2NvbHMuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCSAgU3RyaW5nIHByb3RvY29sID0gKFN0cmluZykgaXQubmV4dCgpOwotCQkJICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZShwcm90b2NvbCk7Ci0JCQkgIGlmIChleHQgIT0gbnVsbCkgewotCQkJCSAgU3RyaW5nIGxhYmVsID0gZXh0LmdldExhYmVsKCk7Ci0JCQkJICBpZiAobGFiZWwgIT0gbnVsbCkgewotCQkJCQkgIHByb3RvY29sQ29tYm8uYWRkKGxhYmVsKTsKLQkJCQkgIH0KLQkJCSAgfQotCQkJfQotCQkKLQkJCXByb3RvY29sQ29tYm8uc2V0VGV4dChwcm90b2NvbFZhbHVlKTsKLQkJfQotCQkKLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihhZGRyZXNzVGV4dCk7Ci0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IocHJvdG9jb2xDb21ibyk7Ci0JCWFwcGx5VGV4dExpc3RlbmVycyhhZGRyZXNzVGV4dCk7Ci0JCXByb3RvY29sQ29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLQkJaWYgKHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JCX0KLQotCQlyZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0QmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKChJQVNET2JqZWN0KSBnZXRNb2RlbCgpKTsgCi0JCQotCQlyZXR1cm4gcmVmTWFuYWdlcjsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRDb21ib0l0ZW1zKCkgewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBtYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCi0JCUxpc3QgaXRlbXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWl0ZW1zLmFkZChCUk9XU0VfU1RSSU5HKTsKLQkJaXRlbXMuYWRkKE5FV19TVFJJTkcpOwotCi0JCWlmIChtYW5hZ2VyICE9IG51bGwpIHsKLQkJICBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gY29tYm9JdGVtcyA9IG1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb21ib0l0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewotCQkgIAlpdGVtcy5hZGQoY29tYm9JdGVtc1tpbmRleF0pOwotCQkgIH0KLQkJfQotCQlyZXR1cm4gaXRlbXM7Ci0JfQotCQotCXByb3RlY3RlZCBPYmplY3QgZ2V0Q3VycmVudENvbWJvSXRlbSgpIHsKLQkJSUVuZFBvaW50IGVuZFBvaW50ID0gKElFbmRQb2ludCkgZ2V0TW9kZWwoKTsKLQkJcmV0dXJuIGVuZFBvaW50LmdldEJpbmRpbmcoKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRDb21ib0l0ZW1OYW1lKE9iamVjdCBpdGVtKSB7Ci0JCVN0cmluZyBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQluYW1lID0gKChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBpdGVtKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQluYW1lID0gKChJQmluZGluZykgaXRlbSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCW5hbWUgPSAoU3RyaW5nKSBpdGVtOwotCQl9Ci0JCQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUNvbWJvU2VsZWN0aW9uKE9iamVjdCBpdGVtKSB7Ci0JCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG51bGw7Ci0JCQotCQlpZiAoaXRlbSBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCXNwZWMgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaXRlbTsKLQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIG1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJbWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSwgc3BlYyk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJaWYgKGl0ZW0uZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24gYWN0aW9uID0gbmV3IEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbihwYXJ0KTsKLQkJCQlhY3Rpb24uc2V0SUVuZFBvaW50KChJRW5kUG9pbnQpIGdldE1vZGVsKCkpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGl0ZW0uZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXROZXdCaW5kaW5nQWN0aW9uIGFjdGlvbiA9IG5ldyBBU0RTZXROZXdCaW5kaW5nQWN0aW9uKHBhcnQpOwotCQkJCWFjdGlvbi5zZXRJRW5kUG9pbnQoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSk7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJfQotCQl9Ci0JCQotCQlyZWZyZXNoKCk7Ci0JfQotCQotICBwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gIHsKLQkgIGlmIChldmVudC53aWRnZXQgPT0gYWRkcmVzc1RleHQgJiYgIWFkZHJlc3NUZXh0LmlzRGlzcG9zZWQoKSkgewotCQkgIFN0cmluZyBuZXdBZGRyZXNzID0gYWRkcmVzc1RleHQuZ2V0VGV4dCgpOwotCQkgIGlmIChuZXdBZGRyZXNzID09IG51bGwpIHsKLQkJCSAgbmV3QWRkcmVzcyA9ICIiOyAvLyROT04tTkxTLTEkCi0JCSAgfQotCQkgIAotCQkgIFN0cmluZyBvbGRBZGRyZXNzID0gZ2V0T2xkQWRkcmVzcygpOwotCQkgIGlmIChvbGRBZGRyZXNzLmVxdWFscyhuZXdBZGRyZXNzKSkKLQkJCSAgcmV0dXJuOwotCQkgIAotCQkgIElFbmRQb2ludCBlbmRQb2ludCA9IChJRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0JCSAgQ29tbWFuZCBjb21tYW5kID0gZW5kUG9pbnQuZ2V0U2V0QWRkcmVzc0NvbW1hbmQobmV3QWRkcmVzcyk7Ci0JCSAgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7Ci0JICB9Ci0JICBlbHNlIGlmIChldmVudC53aWRnZXQgPT0gcHJvdG9jb2xDb21ibyAmJiAhcHJvdG9jb2xDb21iby5pc0Rpc3Bvc2VkKCkpIHsKLQkJICBTdHJpbmcgbmV3UHJvdG9jb2wgPSBwcm90b2NvbENvbWJvLmdldFRleHQoKTsKLQkJICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JMYWJlbChuZXdQcm90b2NvbCk7Ci0JCSAgaWYgKGV4dCAhPSBudWxsKQotCQkgIHsKLQkJICAgIG5ld1Byb3RvY29sID0gZXh0LmdldE5hbWUoKTsKLQkJICB9Ci0JCSAgaWYgKG5ld1Byb3RvY29sICE9IG51bGwgJiYgZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0JCSAgICBXMTFFbmRQb2ludCBlbmRQb2ludCA9IChXMTFFbmRQb2ludCkgZ2V0TW9kZWwoKTsKLQkJICAgIAotCQkgICAgLy8gRG9uJ3QgdXBkYXRlIHRoZSBwcm90b2NvbCBpZiBpdCdzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lCi0JCSAgICAKLQkJICAgIFN0cmluZyBvbGRQcm90b2NvbCA9IGdldE9sZFByb3RvY29sKGVuZFBvaW50KTsKLQkJICAgIGlmIChvbGRQcm90b2NvbC5lcXVhbHMobmV3UHJvdG9jb2wpKQotCQkgICAgCXJldHVybjsKLQotCQkgICAgZW5kUG9pbnQuc2V0UHJvdG9jb2wobmV3UHJvdG9jb2wpOwotCQkgIH0KLQkgIH0KLQkgIGVsc2UgewotCQkgIHN1cGVyLmRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCSAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0T2xkQWRkcmVzcygpIHsKLQkgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0JICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0JCSAgdmFsdWUgPSAoKFcxMUVuZFBvaW50KSBnZXRNb2RlbCgpKS5nZXRBZGRyZXNzKCk7Ci0JICB9Ci0KLQkgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0JCSAgdmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRPbGRQcm90b2NvbChXMTFFbmRQb2ludCBlbmRQb2ludCkgewotICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gICAgdmFsdWUgPSBlbmRQb2ludC5nZXRQcm90b2NvbCgpOwotCi0gICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgIHZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvSW1wb3J0U2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0ltcG9ydFNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE2OGQ1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvSW1wb3J0U2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5kaWFsb2dzLlNlbGVjdFNpbmdsZUZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0U2VjdGlvbiBleHRlbmRzIEFTREFic3RyYWN0U2VjdGlvbgotewotCXByb3RlY3RlZCBUZXh0IG5hbWVzcGFjZVRleHQsIHByZWZpeFRleHQsIGxvY2F0aW9uVGV4dDsKLQlwcml2YXRlIFN0cmluZyBvbGRQcmVmaXhWYWx1ZTsKLQlCdXR0b24gYnV0dG9uOwotCS8vIFRPRE86IFJlbW92ZTogSUVkaXRvclBhcnQgZWRpdG9yUGFydAotCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQ7Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI2NyZWF0ZUNvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5KQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCUZvcm1EYXRhIGRhdGE7Ci0KLQkJbmFtZXNwYWNlVGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCW5hbWVzcGFjZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotLy8JCW5hbWVzcGFjZVRleHQuYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJbmFtZXNwYWNlVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCUNMYWJlbCBuYW1lc3BhY2VMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRVNQQUNFKTsgLy8kTk9OLU5MUy0xJAotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChuYW1lc3BhY2VUZXh0LCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVzcGFjZVRleHQsIDAsIFNXVC5DRU5URVIpOwotCQluYW1lc3BhY2VMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCXByZWZpeFRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotLy8JCXByZWZpeFRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCQlhcHBseVRleHRMaXN0ZW5lcnMocHJlZml4VGV4dCk7Ci0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChuYW1lc3BhY2VUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXByZWZpeFRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlDTGFiZWwgcHJlZml4TGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1BSRUZJWCk7IC8vJE5PTi1OTFMtMSQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJlZml4VGV4dCwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJlZml4TGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlsb2NhdGlvblRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlsb2NhdGlvblRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotLy8JCWxvY2F0aW9uVGV4dC5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQotCQlDTGFiZWwgbG9jYXRpb25MYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTE9DQVRJT04pOyAvLyROT04tTkxTLTEkCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGxvY2F0aW9uVGV4dCwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChsb2NhdGlvblRleHQsIDAsIFNXVC5DRU5URVIpOwotCQlsb2NhdGlvbkxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJYnV0dG9uID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUJ1dHRvbihjb21wb3NpdGUsICIiLCBTV1QuUFVTSCk7IC8vJE5PTi1OTFMtMSQKLQkJYnV0dG9uLnNldEltYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYnJvd3NlYnV0dG9uLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCi0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSArIDIpOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwwKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobG9jYXRpb25UZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJYnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChidXR0b24sIDApOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWxvY2F0aW9uVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKQotCXsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsgIAotCQlPYmplY3Qgb2JqID0gZ2V0TW9kZWwoKTsKLQkJYm9vbGVhbiByZWZyZXNoUHJlZml4VGV4dCA9IHRydWU7Ci0JCWJvb2xlYW4gcmVmcmVzaExvY2F0aW9uVGV4dCA9IHRydWU7Ci0JCWJvb2xlYW4gcmVmcmVzaE5hbWVzcGFjZVRleHQgPSB0cnVlOwotCQlpZiAocHJlZml4VGV4dC5pc0ZvY3VzQ29udHJvbCgpKQotCQl7Ci0JCQlyZWZyZXNoUHJlZml4VGV4dCA9IGZhbHNlOwotCQl9Ci0JCWlmIChsb2NhdGlvblRleHQuaXNGb2N1c0NvbnRyb2woKSkKLQkJewotCQkJcmVmcmVzaExvY2F0aW9uVGV4dCA9IGZhbHNlOwotCQl9Ci0JCWlmIChuYW1lc3BhY2VUZXh0LmlzRm9jdXNDb250cm9sKCkpCi0JCXsKLQkJCXJlZnJlc2hOYW1lc3BhY2VUZXh0ID0gZmFsc2U7Ci0JCX0KLQotCQlpZiAocmVmcmVzaFByZWZpeFRleHQpCi0JCXsKLQkJCXByZWZpeFRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlpZiAocmVmcmVzaExvY2F0aW9uVGV4dCkKLQkJewotCQkJbG9jYXRpb25UZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKHJlZnJlc2hOYW1lc3BhY2VUZXh0KQotCQl7Ci0JCQluYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKG9iaiBpbnN0YW5jZW9mIElJbXBvcnQpCi0JCXsKLQkJCUlJbXBvcnQgdGhlSW1wb3J0ID0gKElJbXBvcnQpIG9iajsKLQkJCWlmIChyZWZyZXNoTG9jYXRpb25UZXh0KQotCQkJewotCQkJCVN0cmluZyBsb2NhdGlvblZhbHVlID0gdGhlSW1wb3J0LmdldExvY2F0aW9uKCk7IAotCQkJCWxvY2F0aW9uVGV4dC5zZXRUZXh0KGxvY2F0aW9uVmFsdWUgIT0gbnVsbCA/IGxvY2F0aW9uVmFsdWUgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJU3RyaW5nIG5hbWVzcGFjZVZhbHVlID0gdGhlSW1wb3J0LmdldE5hbWVzcGFjZSgpOwotCQkJaWYgKHJlZnJlc2hOYW1lc3BhY2VUZXh0KQotCQkJewotCQkJCW5hbWVzcGFjZVRleHQuc2V0VGV4dChuYW1lc3BhY2VWYWx1ZSAhPSBudWxsID8gbmFtZXNwYWNlVmFsdWUgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJaWYgKHJlZnJlc2hQcmVmaXhUZXh0KQotCQkJewotCQkJCVN0cmluZyBwcmVmaXggPSB0aGVJbXBvcnQuZ2V0TmFtZXNwYWNlUHJlZml4KCk7Ci0JCQkJcHJlZml4VGV4dC5zZXRUZXh0KHByZWZpeCAhPSBudWxsID8gcHJlZml4IDogIiIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJb2xkUHJlZml4VmFsdWUgPSBwcmVmaXhUZXh0LmdldFRleHQoKTsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLQkJLy8gVE9ETzogV2UgaGF2ZSBzb21lIFdTREwxMSBJbXBsIHNwZWNpZmljIGtub3dsZWRnZSBiZWxvdy4uLiBXZSBzaG91bGQgdHJ5IHRvIHJlbW92ZSB0aGlzLi4uCi0JCWlmIChldmVudC53aWRnZXQgPT0gcHJlZml4VGV4dCAmJiBsb2NhdGlvblRleHQuZ2V0VGV4dCgpLmxlbmd0aCgpID4gMCAmJiBuYW1lc3BhY2VUZXh0LmdldFRleHQoKS5sZW5ndGgoKSA+IDAgJiYgZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFcxMUltcG9ydCkgewotCQkJaWYgKG9sZFByZWZpeFZhbHVlLmVxdWFscyhwcmVmaXhUZXh0LmdldFRleHQoKSkpCi0JCQkgIHJldHVybjsKLQkJCQotCQkJVzExSW1wb3J0IHcxMUltcG9ydCA9IChXMTFJbXBvcnQpIGdldE1vZGVsKCk7Ci0JCQlJbXBvcnQgaW1wb3J0T2JqID0gKEltcG9ydCkgdzExSW1wb3J0LmdldFRhcmdldCgpOwotLy8JCQlvcmcudzNjLmRvbS5FbGVtZW50IGltcG9ydEVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoaW1wb3J0T2JqKTsKLQkJCU1hcCBuYW1lc3BhY2VzTWFwID0gaW1wb3J0T2JqLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXROYW1lc3BhY2VzKCk7Ci0KLQkJCWlmIChuYW1lc3BhY2VzTWFwLmNvbnRhaW5zS2V5KHByZWZpeFRleHQuZ2V0VGV4dCgpKSkgewotCQkJCS8vIFdlIHNob3VsZCBhZGQgZXJyb3IgbWVzc2FnZXMuLi4uLi4uLi4KLQkJCQkvLyAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKFhTREVkaXRvclBsdWdpbi5nZXRYU0RTdHJpbmcoIl9FUlJPUl9MQUJFTF9QUkVGSVhfRVhJU1RTIikpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGltcG9ydE9iai5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RWxlbWVudCgpOwotCQkJCWRlZmluaXRpb25FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgieG1sbnM6IitvbGRQcmVmaXhWYWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlkZWZpbml0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXhUZXh0LmdldFRleHQoKSwgbmFtZXNwYWNlVGV4dC5nZXRUZXh0KCkpOyAvLyROT04tTkxTLTEkCi0KLS8vCQkJCWNsZWFyRXJyb3JNZXNzYWdlKCk7Ci0JCQkJb2xkUHJlZml4VmFsdWUgPSBwcmVmaXhUZXh0LmdldFRleHQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQkvLyBUT0RPOiBXZSBoYXZlIHNvbWUgV1NETDExIEltcGwgc3BlY2lmaWMga25vd2xlZGdlIGJlbG93Li4uIFdlIHNob3VsZCB0cnkgdG8gcmVtb3ZlIHRoaXMuLi4KLQkJaWYgKGUud2lkZ2V0ID09IGJ1dHRvbiAmJiBnZXRNb2RlbCgpIGluc3RhbmNlb2YgVzExSW1wb3J0KQotCQl7Ci0JCQlXMTFJbXBvcnQgdzExSW1wb3J0ID0gKFcxMUltcG9ydCkgZ2V0TW9kZWwoKTsKLQotCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkKLSAgICAgIFNlbGVjdFNpbmdsZUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IFNlbGVjdFNpbmdsZUZpbGVEaWFsb2coV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCBudWxsLCB0cnVlKTsKLSAgICAgIAotICAgICAgSUZpbGUgY3VycmVudFdTRExGaWxlID0gbnVsbDsKLSAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgU3RyaW5nIFtdIGZpbHRlcnMgPSB7ICJ4c2QiLCAid3NkbCIgfTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAKLSAgICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRXU0RMRmlsZSA9ICgoSUZpbGVFZGl0b3JJbnB1dCllZGl0b3JJbnB1dCkuZ2V0RmlsZSgpOwotICAgICAgICBJRmlsZSBbXSBleGNsdWRlZEZpbGVzID0geyBjdXJyZW50V1NETEZpbGUgfTsKLSAgICAgICAgZGlhbG9nLmFkZEZpbHRlckV4dGVuc2lvbnMoZmlsdGVycywgZXhjbHVkZWRGaWxlcyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIElGaWxlIFtdIGV4Y2x1ZGVkRmlsZXMgPSB7IH07Ci0gICAgICAgIGRpYWxvZy5hZGRGaWx0ZXJFeHRlbnNpb25zKGZpbHRlcnMsIGV4Y2x1ZGVkRmlsZXMpOwotICAgICAgfQotCQkKLQkJCWRpYWxvZy5jcmVhdGUoKTsKLQkJCWRpYWxvZy5nZXRTaGVsbCgpLnNldFRleHQob3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXMuX1VJX1RJVExFX1NFTEVDVCk7IC8vJE5PTi1OTFMtMSQKLQkJCWRpYWxvZy5zZXRUaXRsZShvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlcy5fVUlfVElUTEVfU0VMRUNUX0ZJTEUpOyAvLyROT04tTkxTLTEkCi0JCQlkaWFsb2cuc2V0TWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fU0VMRUNUX1dTRExfT1JfWFNEKTsgLy8kTk9OLU5MUy0xJAotCQkJaW50IHJjID0gZGlhbG9nLm9wZW4oKTsKLQkJCWlmIChyYyA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKQotCQkJewotCQkJCUlGaWxlIHNlbGVjdGVkRmlsZSA9IGRpYWxvZy5nZXRGaWxlKCk7Ci0KLQkJCQkvL2lmIChzZWxlY3RlZEZpbGUuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkuZXF1YWxzKGN1cnJlbnRXU0RMRmlsZS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSkpCi0JCQkJLy97Ci0JCQkJLy8gIFN5c3RlbS5vdXQucHJpbnRsbigiU0FNRSBGSUxFOiIgKyBjdXJyZW50V1NETEZpbGUuZ2V0TG9jYXRpb24oKSk7Ci0JCQkJLy99Ci0KLQkJCQlTdHJpbmcgbG9jYXRpb24gPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVSZWxhdGl2ZVVSSShzZWxlY3RlZEZpbGUsIGN1cnJlbnRXU0RMRmlsZSwgdHJ1ZSk7Ci0KLQkJCQlJbXBvcnQgaW1wb3J0T2JqID0gKEltcG9ydCkgdzExSW1wb3J0LmdldFRhcmdldCgpOwotLy8JCQkJb3JnLnczYy5kb20uRWxlbWVudCBpbXBvcnRFbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGltcG9ydE9iaik7Ci0JCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gaW1wb3J0T2JqLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkJCQlvcmcudzNjLmRvbS5FbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24pOwotCi0JCQkJU3RyaW5nIGltcG9ydFRhcmdldE5hbWVzcGFjZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJU3RyaW5nIHByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpOwotCQkJCVN0cmluZyB1bmlxdWVQcmVmaXggPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHNlbGVjdGVkRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpOyAgICAgIAotCi0JCQkJLy8gbm90ZSB0aGF0IHRoZSBnZXRUYXJnZXROYW1lc3BhY2VVUklGb3JTY2hlbWEgd29ya3MgZm9yIGJvdGggc2NoZW1hIGFuZCB3c2RsIGZpbGVzCi0JCQkJLy8gSSBzaG91bGQgY2hhbmdlIHRoZSBuYW1lIG9mIHRoaXMgY29udmVuaWVuY2UgbWV0aG9kCi0JCQkJaW1wb3J0VGFyZ2V0TmFtZXNwYWNlID0gIFdTRExFZGl0b3JVdGlsLmdldFRhcmdldE5hbWVzcGFjZVVSSUZvclNjaGVtYSh1cmkudG9TdHJpbmcoKSk7Ci0KLQkJCQlpZiAocHJlZml4LnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkJewotCQkJCQl1bmlxdWVQcmVmaXggPSBnZXRVbmlxdWVQcmVmaXgoZGVmaW5pdGlvbiwgdXJpLmZpbGVFeHRlbnNpb24oKSk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXVuaXF1ZVByZWZpeCA9IHByZWZpeDsgCi0JCQkJfQotCi0KLQkJCQlpZiAoaW1wb3J0VGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwKLQkJCQkJCShpbXBvcnRUYXJnZXROYW1lc3BhY2UgIT0gbnVsbCAmJiBpbXBvcnRUYXJnZXROYW1lc3BhY2UudHJpbSgpLmxlbmd0aCgpID09IDApKQotCQkJCXsKLQkJCQkJcmV0dXJuOyAgLy8gd2hhdCB0byBkbyB3aXRoIG5vIG5hbWVzcGFjZSBkb2NzPwotCQkJCX0KLQotCQkJCWltcG9ydE9iai5zZXRMb2NhdGlvblVSSShsb2NhdGlvbik7Ci0JCQkJaW1wb3J0T2JqLnNldE5hbWVzcGFjZVVSSShpbXBvcnRUYXJnZXROYW1lc3BhY2UpOwotCQkJCSgoSW1wb3J0SW1wbCkgaW1wb3J0T2JqKS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLQotCQkJCWRlZmluaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHVuaXF1ZVByZWZpeCwgaW1wb3J0VGFyZ2V0TmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotCi0JCQkJbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGltcG9ydFRhcmdldE5hbWVzcGFjZSk7Ci0JCQkJbG9jYXRpb25UZXh0LnNldFRleHQobG9jYXRpb24pOwotCQkJCXByZWZpeFRleHQuc2V0VGV4dCh1bmlxdWVQcmVmaXgpOwotCQkJfQotCQkJcmVmcmVzaCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0VW5pcXVlUHJlZml4KERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGluaXRQcmVmaXgpCi0JewotCQlTdHJpbmcgdW5pcXVlUHJlZml4OwotCQlNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0KLQkJaWYgKGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKGluaXRQcmVmaXgpID09IG51bGwpCi0JCXsKLQkJCXVuaXF1ZVByZWZpeCA9IGluaXRQcmVmaXg7Ci0JCX0KLQkJZWxzZSAvLyBpZiB1c2VkLCB0aGVuIHRyeSB0byBjcmVhdGUgYSB1bmlxdWUgb25lCi0JCXsKLQkJCVN0cmluZyB0ZW1wUHJlZml4ID0gaW5pdFByZWZpeDsKLQkJCWludCBpID0gMTsKLQkJCXdoaWxlKG1hcC5jb250YWluc0tleSh0ZW1wUHJlZml4ICsgaSkpCi0JCQl7Ci0JCQkJaSsrOwotCQkJfQotCQkJdW5pcXVlUHJlZml4ID0gdGVtcFByZWZpeCArIGk7Ci0JCX0KLQkJcmV0dXJuIHVuaXF1ZVByZWZpeDsgICAgCi0JfQotCi0JLy8gVE9ETzogUmVtb3ZlIG1ldG9kIHNldEVkaXRvclBhcnQoKSBiZWxvdwotCXB1YmxpYyB2b2lkIHNldEVkaXRvclBhcnQoSUVkaXRvclBhcnQgZWRpdG9yUGFydCkKLQl7Ci0JCXRoaXMuZWRpdG9yUGFydCA9IGVkaXRvclBhcnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL05hbWVTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZVNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhYTQxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZVNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkh5cGVybGlua0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5JbWFnZUh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JU2VsZWN0aW9uTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklOYW1lZE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zLlJlbmFtZUNvbXBvbmVudEFjdGlvbjsKLQotcHVibGljIGNsYXNzIE5hbWVTZWN0aW9uIGV4dGVuZHMgQVNEQWJzdHJhY3RTZWN0aW9uIGltcGxlbWVudHMgSUh5cGVybGlua0xpc3RlbmVyIHsKLQlDTGFiZWwgbmFtZUxhYmVsOwotCXByb3RlY3RlZCBUZXh0IG5hbWVUZXh0OwotICAvKioKLSAgICogQ2xpY2tpbmcgb24gaXQgaW52b2tlcyB0aGUgcmVmYWN0b3ItPnJlbmFtZSBhY3Rpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2VIeXBlcmxpbmsgcmVuYW1lSHlwZXJsaW5rOwotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0KLQkJY29tcG9zaXRlID0JZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCQotCQlGb3JtRGF0YSBkYXRhOwkJCi0gICAgCi0JCW5hbWVUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCW5hbWVUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobmFtZVRleHQsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX05BTUVfVEVYVCk7Ci0KLQkJbmFtZUxhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJbmFtZUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCWFwcGx5VGV4dExpc3RlbmVycyhuYW1lVGV4dCk7Ci0JfQotCQotICBwcml2YXRlIHZvaWQgc2hvd1JlZmFjdG9yQnV0dG9uKCkgewotICAgIGlmIChpc1JlYWRPbmx5KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgICAgCi0gICAgaWYgKHJlbmFtZUh5cGVybGluayA9PSBudWxsKSB7Ci0gICAgICByZW5hbWVIeXBlcmxpbmsgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlSW1hZ2VIeXBlcmxpbmsoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0KLSAgICAgIHJlbmFtZUh5cGVybGluay5zZXRJbWFnZShXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3F1aWNrYXNzaXN0LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmVuYW1lSHlwZXJsaW5rLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLl9VSV9UT09MVElQX1JFTkFNRV9SRUZBQ1RPUik7Ci0gICAgICByZW5hbWVIeXBlcmxpbmsuYWRkSHlwZXJsaW5rTGlzdGVuZXIodGhpcyk7Ci0gICAgfQotCi0gICAgRm9ybURhdGEgZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotICAgIGRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSk7Ci0gICAgZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0gICAgcmVuYW1lSHlwZXJsaW5rLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgCi0gICAgZGF0YSA9IChGb3JtRGF0YSkgbmFtZVRleHQuZ2V0TGF5b3V0RGF0YSgpOyAKLSAgICBGb3JtQXR0YWNobWVudCByaWdodCA9IGRhdGEucmlnaHQ7Ci0gICAgcmlnaHQuY29udHJvbCA9IHJlbmFtZUh5cGVybGluazsKLSAgICByaWdodC5vZmZzZXQgPSAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRTsKLSAgICByaWdodC5hbGlnbm1lbnQgPSBTV1QuTEVGVDsKLSAgICBkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChyZW5hbWVIeXBlcmxpbmssIDAsIFNXVC5DRU5URVIpOwotICAgIHJlbmFtZUh5cGVybGluay5zZXRWaXNpYmxlKHRydWUpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGlkZVJlZmFjdG9yQnV0dG9uKCkgewotICAgIGlmIChpc1JlYWRPbmx5KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHJlbmFtZUh5cGVybGluayA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIEZvcm1EYXRhIGRhdGEgPSAoRm9ybURhdGEpIG5hbWVUZXh0LmdldExheW91dERhdGEoKTsKLSAgICBGb3JtQXR0YWNobWVudCByaWdodCA9IGRhdGEucmlnaHQ7Ci0gICAgcmlnaHQuY29udHJvbCA9IG51bGw7Ci0gICAgcmlnaHQubnVtZXJhdG9yID0gMTAwOwotICAgIHJpZ2h0Lm9mZnNldCA9IC1yaWdodE1hcmdpblNwYWNlOyAKLSAgICBkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLSAgICByZW5hbWVIeXBlcmxpbmsuc2V0VmlzaWJsZShmYWxzZSk7Ci0gIH0KLSAgCi0gIAotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJaWYgKG5hbWVUZXh0LmlzRGlzcG9zZWQoKSB8fCBuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCVN0cmluZyBuYW1lID0gbnVsbDsKLQkJaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsKLQkJCW5hbWUgPSAoKElOYW1lZE9iamVjdCkgZ2V0TW9kZWwoKSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBFZGl0UGFydCkgewotCQkJT2JqZWN0IG1vZGVsID0gKChFZGl0UGFydCkgZ2V0TW9kZWwoKSkuZ2V0TW9kZWwoKTsgCi0JCQluYW1lID0gKChJTmFtZWRPYmplY3QpIG1vZGVsKS5nZXROYW1lKCk7Ci0JCX0KLQkJCi0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCQotCQluYW1lVGV4dC5zZXRUZXh0KG5hbWUpOwotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKG5hbWVUZXh0KTsKLSAgICAKLSAgICBpZiAoY2FuUmVmYWN0b3IoKSkgewotICAgICAgc2hvd1JlZmFjdG9yQnV0dG9uKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgaGlkZVJlZmFjdG9yQnV0dG9uKCk7Ci0gICAgfQotICAgIHNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gc2hvdWxkVXNlRXh0cmFTcGFjZSgpCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IG5hbWVUZXh0ICYmICFuYW1lVGV4dC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCVN0cmluZyBuZXdWYWx1ZSA9IG5hbWVUZXh0LmdldFRleHQoKTsKLQkJCU9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCQlJTmFtZWRPYmplY3QgbmFtZWRPYmplY3QgPSBudWxsOwotCQkJCi0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsKLQkJCQluYW1lZE9iamVjdCA9IChJTmFtZWRPYmplY3QpIG1vZGVsOwotCQkJfQotCQkJCi0JCQlpZiAobmFtZWRPYmplY3QgIT0gbnVsbCkgewotCQkJCWlmICggIW5ld1ZhbHVlLmVxdWFscyggbmFtZWRPYmplY3QuZ2V0TmFtZSgpICkgKXsKLQkJCQkgIENvbW1hbmQgY29tbWFuZCA9IG5hbWVkT2JqZWN0LmdldFNldE5hbWVDb21tYW5kKG5ld1ZhbHVlKTsKLQkJCQkgIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLSAgCi0gIHByaXZhdGUgdm9pZCBpbnZva2VSZW5hbWVSZWZhY3RvcmluZygpIHsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbillZGl0b3IuZ2V0QWRhcHRlcihEZWZpbml0aW9uLmNsYXNzKTsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5nZXRTZWxlY3Rpb24oKTsKLSAgICBJU2VsZWN0aW9uTWFwcGVyIG1hcHBlciA9IChJU2VsZWN0aW9uTWFwcGVyKSBlZGl0b3IuZ2V0QWRhcHRlcihJU2VsZWN0aW9uTWFwcGVyLmNsYXNzKTsKLSAgICBzZWxlY3Rpb24gPSBtYXBwZXIgIT0gbnVsbCA/IG1hcHBlci5tYXBTZWxlY3Rpb24oc2VsZWN0aW9uKSA6IHNlbGVjdGlvbjsKLSAgICBSZW5hbWVDb21wb25lbnRBY3Rpb24gYWN0aW9uID0gbmV3IFJlbmFtZUNvbXBvbmVudEFjdGlvbihzZWxlY3Rpb24sIGRlZmluaXRpb24pOwotICAgIGFjdGlvbi51cGRhdGUoc2VsZWN0aW9uKTsKLSAgICBhY3Rpb24ucnVuKCk7Ci0gIH0KLQotICBwcml2YXRlIE9iamVjdCBnZXRSZWFsTW9kZWwoKSB7Ci0gICAgT2JqZWN0IHJlYWxNb2RlbCA9IGdldE1vZGVsKCk7Ci0gICAgCi0gICAgaWYgKHJlYWxNb2RlbCBpbnN0YW5jZW9mIEVkaXRQYXJ0KSB7Ci0gICAgICByZWFsTW9kZWwgPSAoKEVkaXRQYXJ0KSBnZXRNb2RlbCgpKS5nZXRNb2RlbCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVhbE1vZGVsOwotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZXMgaWYgdGhlIG1vZGVsIG9iamVjdCdzIG5hbWUgY2FuIGJlIHJlZmFjdG9yZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbW9kZWwgb2JqZWN0IGNhbiBiZSByZWZhY3RvcmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY2FuUmVmYWN0b3IoKSB7Ci0gICAgT2JqZWN0IG1vZGVsID0gZ2V0UmVhbE1vZGVsKCk7Ci0KLSAgICBib29sZWFuIGNhblJlZmFjdG9yID0gbW9kZWwgaW5zdGFuY2VvZiBJTWVzc2FnZSB8fCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZyB8fCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwgaW5zdGFuY2VvZiBJSW50ZXJmYWNlOwotICAgIHJldHVybiBjYW5SZWZhY3RvcjsKLSAgfQotICAKLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSUh5cGVybGlua0xpc3RlbmVyI2xpbmtBY3RpdmF0ZWQob3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkh5cGVybGlua0V2ZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKQotICB7Ci0gICAgaW52b2tlUmVuYW1lUmVmYWN0b3JpbmcoKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLklIeXBlcmxpbmtMaXN0ZW5lciNsaW5rRW50ZXJlZChvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsaW5rRW50ZXJlZChIeXBlcmxpbmtFdmVudCBlKQotICB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXIjbGlua0V4aXRlZChvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsaW5rRXhpdGVkKEh5cGVybGlua0V2ZW50IGUpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL05hbWVzcGFjZVNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9OYW1lc3BhY2VTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4M2NkODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL05hbWVzcGFjZVNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERWRpdE5hbWVzcGFjZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLm5zZWRpdC5Db21tb25FZGl0TmFtZXNwYWNlc1RhcmdldEZpZWxkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwubnNlZGl0LkNvbW1vbk5hbWVzcGFjZUluZm9UYWJsZTsKLQotcHVibGljIGNsYXNzIE5hbWVzcGFjZVNlY3Rpb24gZXh0ZW5kcyBBU0RBYnN0cmFjdFNlY3Rpb24gewotCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotCXByb3RlY3RlZCBMaXN0IG5hbWVzcGFjZUluZm9MaXN0OwotCXByb3RlY3RlZCBDb21tb25FZGl0TmFtZXNwYWNlc1RhcmdldEZpZWxkRGlhbG9nIGVkaXRXU0RMTmFtZXNwYWNlc0NvbnRyb2w7Ci0JcHJvdGVjdGVkIEJ1dHRvbiBidXR0b247Ci0JCi0JVGV4dCBuYW1lVGV4dDsKLQlUZXh0IHByZWZpeFRleHQ7Ci0JVGV4dCB0YXJnZXROYW1lc3BhY2VUZXh0OwotCXByb3RlY3RlZCBDb21tb25OYW1lc3BhY2VJbmZvVGFibGUgdGFibGVWaWV3ZXI7Ci0JcHJpdmF0ZSBib29sZWFuIGhhbmRsaW5nRXZlbnQ7Ci0JCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNjcmVhdGVDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJY29tcG9zaXRlID0JZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCQotCQlTdHJpbmcgbmFtZVN0cmluZyA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FICsgIjoiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJU3RyaW5nIHByZWZpeFN0cmluZyA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9QUkVGSVggKyAiOiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlTdHJpbmcgbmFtZXNwYWNlU3RyaW5nID0gTWVzc2FnZXMuX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0U7IC8vJE5PTi1OTFMtMSQKLQkJR0MgZ2MgPSBuZXcgR0MocGFyZW50KTsKLQkJaW50IHhvZmZzZXQgPSBNYXRoLm1heCgxMTUsIGdjLnRleHRFeHRlbnQobmFtZVN0cmluZykueCArIDIwKTsgLy8gYWRkcyAyMCBkdWUgdG8gYm9yZGVycwotCQl4b2Zmc2V0ID0gTWF0aC5tYXgoeG9mZnNldCwgZ2MudGV4dEV4dGVudChwcmVmaXhTdHJpbmcpLnggKyAyMCk7IC8vIGFkZHMgMjAgZHVlIHRvIGJvcmRlcnMKLQkJeG9mZnNldCA9IE1hdGgubWF4KHhvZmZzZXQsIGdjLnRleHRFeHRlbnQobmFtZXNwYWNlU3RyaW5nKS54ICsgMjApOyAvLyBhZGRzIDIwIGR1ZSB0byBib3JkZXJzCi0JCWdjLmRpc3Bvc2UoKTsKLQkJCi0JCS8vIG5hbWUKLQkJQ0xhYmVsIG5hbWVMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBuYW1lU3RyaW5nKTsgLy8kTk9OLU5MUy0xJAotCQluYW1lVGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobmFtZVRleHQsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX05BTUVfVEVYVCk7Ci0JCQotCQkvLyBwcmVmaXgKLQkJQ0xhYmVsIHByZWZpeExhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIHByZWZpeFN0cmluZyk7IC8vJE5PTi1OTFMtMSQKLQkJcHJlZml4VGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJlZml4VGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfREVGX1BSRUZJWF9URVhUKTsKLQkJCi0JCS8vIHRhcmdldG5hbWVzcGFjZQotCQlDTGFiZWwgdGFyZ2V0TmFtZXNwYWNlTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgbmFtZXNwYWNlU3RyaW5nKTsgLy8kTk9OLU5MUy0xJAotCQl0YXJnZXROYW1lc3BhY2VUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0YXJnZXROYW1lc3BhY2VUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19ERUZfVE5TX1RFWFQpOwotCQkKLQkJLy8gQWR2YW5jZWQgYnV0dG9uCi0JCWJ1dHRvbiA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfU0VDVElPTl9BRFZBTkNFRF9BVFRSSUJVVEVTICsgIi4uLiIsIFNXVC5QVVNIKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQotCQkKLQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vIExhYmVscwotCQkvLyBuYW1lIGxheW91dAotCQlGb3JtRGF0YSBkYXRhTmFtZUxhYmVsID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGFOYW1lTGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJbmFtZUxhYmVsLnNldExheW91dERhdGEoZGF0YU5hbWVMYWJlbCk7Ci0JCQotCQkvLyBwcmVmaXggbGF5b3V0Ci0JCUZvcm1EYXRhIGRhdGFQcmVmaXhMYWJlbCA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhUHJlZml4TGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YVByZWZpeExhYmVsLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJlZml4TGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhUHJlZml4TGFiZWwpOwotCQkKLQkJLy8gdGFyZ2V0TmFtZXNwYWNlTGFiZWwgbGF5b3V0Ci0JCUZvcm1EYXRhIGRhdGF0bnNMYWJlbCA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhdG5zTGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YXRuc0xhYmVsLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRhcmdldE5hbWVzcGFjZVRleHQsIDApOwotCQlkYXRhdG5zTGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRhcmdldE5hbWVzcGFjZVRleHQsIDAsIFNXVC5DRU5URVIpOwotCQl0YXJnZXROYW1lc3BhY2VMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGF0bnNMYWJlbCk7Ci0JCQotCQkKLQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFRleHQgRmllbGRzCi0JCS8vIG5hbWUgdGV4dCBmaWVsZAotCQlGb3JtRGF0YSBkYXRhTmFtZVRleHQgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YU5hbWVUZXh0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgeG9mZnNldCk7Ci0JCWRhdGFOYW1lVGV4dC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGFOYW1lVGV4dC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCW5hbWVUZXh0LnNldExheW91dERhdGEoZGF0YU5hbWVUZXh0KTsKLQkJYXBwbHlUZXh0TGlzdGVuZXJzKG5hbWVUZXh0KTsKLQkJCi0JCS8vIHByZWZpeCB0ZXh0IGZpZWxkCi0JCUZvcm1EYXRhIGRhdGFQcmVmaXhUZXh0ID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGFQcmVmaXhUZXh0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgeG9mZnNldCk7Ci0JCWRhdGFQcmVmaXhUZXh0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YVByZWZpeFRleHQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXByZWZpeFRleHQuc2V0TGF5b3V0RGF0YShkYXRhUHJlZml4VGV4dCk7Ci0JCWFwcGx5VGV4dExpc3RlbmVycyhwcmVmaXhUZXh0KTsKLQkJCi0JCS8vIHRhcmdldG5hbWVzcGFjZSB0ZXh0IGZpZWxkCi0JCUZvcm1EYXRhIGRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIHhvZmZzZXQpOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJlZml4VGV4dCwgK0lUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotCQl0YXJnZXROYW1lc3BhY2VUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0JCWFwcGx5VGV4dExpc3RlbmVycyh0YXJnZXROYW1lc3BhY2VUZXh0KTsKLQkJCi0JCS8vIEFkdmFuY2VkIGJ1dHRvbiBsYXlvdXQKLQkJRm9ybURhdGEgZGF0YUJ1dHRvbiA9IG5ldyBGb3JtRGF0YSgpOwotLy8JCWRhdGFCdXR0b24ubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlICsgMik7Ci0JCWRhdGFCdXR0b24ucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhQnV0dG9uLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0YXJnZXROYW1lc3BhY2VUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0vLwkJZGF0YUJ1dHRvbi50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGFyZ2V0TmFtZXNwYWNlVGV4dCwgMCwgU1dULkNFTlRFUik7Ci0JCWJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGFCdXR0b24pOwotCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQloYW5kbGluZ0V2ZW50ID0gdHJ1ZTsKLQkJT2JqZWN0IG9iaiA9IGdldERlc2NyaXB0aW9uKCk7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCUlEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIG9iajsKLQotCQkJaWYgKGV2ZW50LndpZGdldCA9PSBuYW1lVGV4dCkgewotCQkJCVN0cmluZyBuZXdOYW1lID0gbmFtZVRleHQuZ2V0VGV4dCgpOwotCQkJCWlmICghbmV3TmFtZS5lcXVhbHMoZGVzY3JpcHRpb24uZ2V0TmFtZSgpKSkgewotCQkJCQlDb21tYW5kIGNvbW1hbmQgPSBkZXNjcmlwdGlvbi5nZXRTZXROYW1lQ29tbWFuZChuZXdOYW1lKTsKLQkJCQkJZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAoZXZlbnQud2lkZ2V0ID09IHByZWZpeFRleHQgfHwgZXZlbnQud2lkZ2V0ID09IHRhcmdldE5hbWVzcGFjZVRleHQpIHsKLQkJCQlTdHJpbmcgbmV3VGFyZ2V0TlMgPSB0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKTsJCQkJCi0JCQkJU3RyaW5nIG5ld1ByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpOwotCQkJCQotCQkJCWJvb2xlYW4gdGFyZ2V0TlNkaWZmID0gIW5ld1RhcmdldE5TLmVxdWFscyhkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCQkJYm9vbGVhbiBwcmVmaXhEaWZmID0gIW5ld1ByZWZpeC5lcXVhbHMoZGVzY3JpcHRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlUHJlZml4KCkpOwotCQkJCWlmICh0YXJnZXROU2RpZmYgfHwgcHJlZml4RGlmZiApIHsKLQkJCQkJLy8gVE9ETzogVGhlIGNvZGUgYmVsb3cgaXMgbm90IGdlbmVyaWMuICBXZSBuZWVkIHRvIHJldmlzaXQgdGhpcyB0byBlbnN1cmUgaXQgaXMKLQkJCQkJLy8gZ2VuZXJpYy4gIElEZXNjcmlwdGlvbiBuZWVkcyBhIGdldE5hbWVzcGFjZXNJbmZvKCkgYW5kIGdldEVkaXROYW1lc3BhY2VzQ29tbWFuZCgpLi4uCi0JCQkJCVcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCBjb21tYW5kID0gCi0JCQkJCQkoVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kKSAoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbikuZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCk7Ci0JCQkJCWlmICh0YXJnZXROU2RpZmYpCi0JCQkJCSAgY29tbWFuZC5zZXRUYXJnZXROYW1lc3BhY2UobmV3VGFyZ2V0TlMpOwotCQkJCQlpZiAocHJlZml4RGlmZikKLQkJCQkJICBjb21tYW5kLnNldFRhcmdldE5hbWVzcGFjZVByZWZpeChuZXdQcmVmaXgpOwotCQkJCQlleGVjdXRlQ29tbWFuZChjb21tYW5kKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQloYW5kbGluZ0V2ZW50ID0gZmFsc2U7CQkKLQl9Ci0JCi0JcHJvdGVjdGVkIE9iamVjdCBnZXREZXNjcmlwdGlvbigpIHsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pIHsKLQkJCW1vZGVsID0gKChBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgbW9kZWwpLmdldE1vZGVsKCk7Ci0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgbW9kZWw7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQlyZXR1cm4gKChJQ2F0ZWdvcnlBZGFwdGVyKSBtb2RlbCkuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkKLQl7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJCi0JCS8vIFNldCBuYW1lVGV4dAotCQlpZiAobmFtZVRleHQgPT0gbnVsbCB8fCBuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJbmFtZVRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGdldERlc2NyaXB0aW9uKCkgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsKLQkJCW5hbWVUZXh0LnNldFRleHQoKChJTmFtZWRPYmplY3QpIGdldERlc2NyaXB0aW9uKCkpLmdldE5hbWUoKSk7Ci0JCX0JCQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JCQotCQkKLQkJLy8gU2V0IHRhcmdldE5hbWVzcGFjZVRleHQgYW5kIHByZWZpeFRleHQKLQkJaWYgKHRhcmdldE5hbWVzcGFjZVRleHQgPT0gbnVsbCB8fCB0YXJnZXROYW1lc3BhY2VUZXh0LmlzRm9jdXNDb250cm9sKCkgfHwgaGFuZGxpbmdFdmVudCkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCU9iamVjdCBvYmogPSBnZXREZXNjcmlwdGlvbigpOwotCQlpZiAob2JqIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKQotCQl7Ci0JCQlJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBvYmo7Ci0JCQlTdHJpbmcgdGFyZ2V0TlMgPSBkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCVN0cmluZyBuZXdQcmVmaXggPSBkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2VQcmVmaXgoKTsgICAgICAgICAgICAKLQkJCXByZWZpeFRleHQuc2V0VGV4dChuZXdQcmVmaXggIT0gbnVsbCA/IG5ld1ByZWZpeCA6ICIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCi0JCQkvLyBzZXQgdGFyZ2V0bmFtZXNwYWNlIGZpZWxkIGFuZCBwcmVmaXggZmllbGQKLQkJCWlmICh0YXJnZXROUyAhPSBudWxsKQotCQkJewotCQkJCXRhcmdldE5hbWVzcGFjZVRleHQuc2V0VGV4dCh0YXJnZXROUyk7Ci0JCQl9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRhcmdldE5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQkJCWlmIChuZXdQcmVmaXggIT0gbnVsbCkKLQkJCXsKLQkJCQlwcmVmaXhUZXh0LnNldFRleHQobmV3UHJlZml4KTsKLQkJCX0KLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQlpZiAoZS53aWRnZXQgPT0gYnV0dG9uKQl7Ci0JCQlPYmplY3Qgb2JqID0gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWlmIChvYmogaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlJV29ya2JlbmNoUGFydCBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotCQkJCUFTREVkaXROYW1lc3BhY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBBU0RFZGl0TmFtZXNwYWNlc0FjdGlvbihwYXJ0LCAoSURlc2NyaXB0aW9uKSBvYmopOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCQlyZWZyZXNoKCk7Ci0JICAgICAgICB9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1BhcmFtZXRlclNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU4OGQ3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJTZWN0aW9uIGV4dGVuZHMgTmFtZVNlY3Rpb24gewotCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIE5FV19TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX05FVzsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIEJST1dTRV9TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX0JST1dTRTsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBDTGFiZWwgY29tYm9MYWJlbDsgCi0JcHJvdGVjdGVkIENDb21ibyBjb21ibzsKLQlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVUeXBlU2NlbmFyaW8gPSB0cnVlOwotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBwYXJhbWV0ZXJSZWZNYW5hZ2VyOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljcmVhdGVDb250cm9sQXJlYSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sQXJlYSgpCi0JewotCQlGb3JtRGF0YSBkYXRhOwotCQkKLQkJY29tYm8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0NvbWJvKGNvbXBvc2l0ZSk7Ci0JCWNvbWJvLnNldEJhY2tncm91bmQoY29tcG9zaXRlLmdldEJhY2tncm91bmQoKSk7Ci0JCWNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJCi0JCWNvbWJvTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1RZUEUgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIDAsIFNXVC5DRU5URVIpOwotCQljb21ib0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotLy8JCUJ1dHRvbiBidXR0b24gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXBvc2l0ZSwgIiIsIFNXVC5QVVNIKTsgLy8kTk9OLU5MUy0xJAotLy8JCWJ1dHRvbi5zZXRJbWFnZShJbnRlcmZhY2VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0SW1hZ2UoImljb25zL29iajE2L2Jyb3dzZWJ1dHRvbi5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLS8vCQkKLS8vCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0vLwkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotLy8JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlICsgMik7Ci0vLwkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOwotLy8JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHR5cGVDb21ibywgMCwgU1dULkNFTlRFUik7Ci0vLwkJYnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotLy8JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYnV0dG9uLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWNvbWJvLnNldExheW91dERhdGEoZGF0YSk7Ci0JfQotCQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJaWYgKG5hbWVUZXh0LmlzRm9jdXNDb250cm9sKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJCi0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BBUlRfRUxFTUVOVF9DT01CTyk7Ci0KLQkJaWYgKGhhbmRsZVR5cGVTY2VuYXJpbykgewotCQkJcmVmcmVzaENvbWJvKCk7Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QQVJUX1RZUEVfQ09NQk8pOwotCQl9Ci0JCQotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKGNvbWJvKTsKLQkJCi0JCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcmVmcmVzaENvbWJvKCkgewotCQlJUGFyYW1ldGVyIHBhcmFtID0gbnVsbDsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJCi0JCWlmIChtb2RlbCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCXBhcmFtID0gKElQYXJhbWV0ZXIpIG1vZGVsOwotCQl9Ci0JCQotCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyB0eXBlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWlmIChwYXJhbSAhPSBudWxsKSB7Ci0JCQluYW1lID0gcGFyYW0uZ2V0TmFtZSgpOwotCQkJdHlwZU5hbWUgPSBwYXJhbS5nZXRDb21wb25lbnROYW1lKCk7Ci0JCX0KLQkJCi0JCWlmICghbmFtZVRleHQuaXNGb2N1c0NvbnRyb2woKSkgewotCQkJbmFtZVRleHQuc2V0VGV4dChuYW1lKTsKLQkJfQotCQkKLQkJLy8gUG9wdWxhdGUgdGhlIHR5cGUgQ29tYm8KLQkJY29tYm8ucmVtb3ZlQWxsKCk7Ci0JCWNvbWJvLmFkZChCUk9XU0VfU1RSSU5HKTsKLQkJY29tYm8uYWRkKE5FV19TVFJJTkcpOwotCQkKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkgewotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNwZWNzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCWNvbWJvLmFkZCgoU3RyaW5nKSBzcGVjc1tpbmRleF0uZ2V0TmFtZSgpKTsKLQkJCX0KLQkJCQotCQkJc3BlY3MgPSBlZGl0TWFuYWdlci5nZXRIaXN0b3J5KCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc3BlY3MubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJY29tYm8uYWRkKChTdHJpbmcpIHNwZWNzW2luZGV4XS5nZXROYW1lKCkpOwotCQkJfQotCQl9CQkKLQkJCi0JCS8vIERpc3BsYXkgdGhlIHR5cGUgaW4gdGhlIENvbWJvCi0JCVN0cmluZ1tdIGl0ZW1zID0gY29tYm8uZ2V0SXRlbXMoKTsKLQkJaW50IGluZGV4OwotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCWlmIChpdGVtc1tpbmRleF0uZXF1YWxzKHR5cGVOYW1lKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCQotCQlpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGgpIHsKLQkJCS8vIEZvdW5kIGEgbWF0Y2gKLQkJCWNvbWJvLnNlbGVjdChpbmRleCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljb21iby5zZXRUZXh0KHR5cGVOYW1lKTsKLQkJfQotCQkKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJCXsKLQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKLQkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIuZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8gJiYgaGFuZGxlVHlwZVNjZW5hcmlvKSB7Ci0JCQloYW5kbGVDb21ib1NlbGVjdGlvbigpOwotCQkJcmVmcmVzaCgpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNvbWJvU2VsZWN0aW9uKCkgewotCQlTdHJpbmcgdmFsdWUgPSBjb21iby5nZXRJdGVtKGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOwotCQkKLQkJSVBhcmFtZXRlciBwYXJhbWV0ZXIgPSAoSVBhcmFtZXRlcikgdGhpcy5nZXRNb2RlbCgpOwotCQkKLQkJaWYgKHZhbHVlLmVxdWFscyhORVdfU1RSSU5HKSkgewotCQkJQ29tbWFuZCBjb21tYW5kID0gcGFyYW1ldGVyLmdldFNldFR5cGVDb21tYW5kKElQYXJhbWV0ZXIuU0VUX05FV19BQ1RJT05fSUQpOwotCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCX0KLQkJZWxzZSBpZiAodmFsdWUuZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSBwYXJhbWV0ZXIuZ2V0U2V0VHlwZUNvbW1hbmQoSVBhcmFtZXRlci5TRUxFQ1RfRVhJU1RJTkdfQUNUSU9OX0lEKTsKLQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCQl9Ci0JCWVsc2UgewotCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKChTdHJpbmcpdmFsdWUpOwotCQkJaWYgKHNwZWMgIT0gbnVsbCkgewotCQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJhbWV0ZXIsIHNwZWMpOwotCQkJfQotCQl9Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLQkJaWYgKHBhcmFtZXRlclJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIHBhcmFtZXRlclJlZk1hbmFnZXI7Ci0JCX0JCQotICAgICAgICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElBU0RPYmplY3QpCi0gICAgICAgIHsgIAotCQkgIHBhcmFtZXRlclJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKElBU0RPYmplY3QpIGdldE1vZGVsKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibW9kZWwiICsgZ2V0TW9kZWwoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfSAgCi0JCXJldHVybiBwYXJhbWV0ZXJSZWZNYW5hZ2VyOwotCX0KLQkKLQkvLyBUT0RPOiBybWFoOiBUaGlzIGNvZGUgc2hvdWxkIGxpdmUgaW4gYSBjb21tb24gcGxhY2UuLi4uLiBUaGlzIGNvZGUgaXMgYWxzbyB1c2VkIGluIG90aGVyIFVJIHNjZW5hcmlvcyB3aGVuCi0JLy8gYSBzaW1pbGFyIGNvbWJvIGJveCBpcyB1c2VkLiAgRm9yIGV4YW1wbGUgaW4gRGlyZWN0IEVkaXQuLi4oVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyKSAgQWxzbyB1c2VkIGluIHRoZSBYU0RFZGl0b3IuLi4KLQlwcm90ZWN0ZWQgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoU3RyaW5nIHZhbHVlKQotCXsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkKLQkJeyAgCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gcXVpY2tQaWNrcyA9IGVkaXRNYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkJCWlmIChxdWlja1BpY2tzICE9IG51bGwpCi0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgcXVpY2tQaWNrcy5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbiA9IHF1aWNrUGlja3NbaV07Ci0JCQkJCWlmICh2YWx1ZS5lcXVhbHMoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gY29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLQkJCQkJfSAgICAgICAgICAgICAgICAKLQkJCQl9ICAKLQkJCX0KLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gZWRpdE1hbmFnZXIuZ2V0SGlzdG9yeSgpOwotCQkJaWYgKGhpc3RvcnkgIT0gbnVsbCkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBoaXN0b3J5Lmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gaGlzdG9yeVtpXTsKLQkJCQkJaWYgKHZhbHVlLmVxdWFscyhjb21wb25lbnRTcGVjaWZpY2F0aW9uLmdldE5hbWUoKSkpCi0JCQkJCXsgIAotCQkJCQkJcmV0dXJuIGNvbXBvbmVudFNwZWNpZmljYXRpb247Ci0JCQkJCX0KLQkJCQl9ICAKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUmVmZXJlbmNlU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1JlZmVyZW5jZVNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyMmRkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUmVmZXJlbmNlU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0NvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlZmVyZW5jZVNlY3Rpb24gZXh0ZW5kcyBOYW1lU2VjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlJPV1NFX1NUUklORyA9IE1lc3NhZ2VzLl9VSV9CVVRUT05fQlJPV1NFOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX1NUUklORyA9IE1lc3NhZ2VzLl9VSV9CVVRUT05fTkVXOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIENDb21ibyBjb21ibzsKLQlwcm90ZWN0ZWQgQ0xhYmVsIGNvbWJvTGFiZWw7Ci0JCi0JcHJvdGVjdGVkIExpc3QgaXRlbXNJbkNvbWJvID0gbmV3IEFycmF5TGlzdCgpOwotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNjcmVhdGVDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJRm9ybURhdGEgZGF0YTsKLQkJCi0JCS8vIENyZWF0ZSBDb21ibyByb3cgb2Ygd2lkZ2V0cwotCQljb21ib0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsICJSZWZlcmVuY2UiKTsgLy8kTk9OLU5MUy0xJAotCQljb21ibyA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDQ29tYm8oY29tcG9zaXRlKTsKLQkJY29tYm8uc2V0QmFja2dyb3VuZChjb21wb3NpdGUuZ2V0QmFja2dyb3VuZCgpKTsKLQotCQkvLyBMYXlvdXQgQ29tYm8gTGFiZWwKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIDAsIFNXVC5DRU5URVIpOwotCQljb21ib0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQkvLyBMYXlvdXQgQ29tYm8KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWNvbWJvLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJCXsKLQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKLQkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTsKLQkJfQotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCWNvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCQkKLQkJc3VwZXIucmVmcmVzaCgpOwotCQkKLQkJTGlzdCBjb21ib0l0ZW1zID0gZ2V0Q29tYm9JdGVtcygpOwotCQlpZiAoY29tYm9JdGVtcy5zaXplKCkgPiAwKSB7Ci0JCQljb21iby5yZW1vdmVBbGwoKTsKLQkJCWl0ZW1zSW5Db21iby5jbGVhcigpOwotCi0JCQkvLyBXZSBuZWVkIHRvIHBvcHVsYXRlIHRoaXMgY29tYm8gd2l0aCB0aGUgYXZhaWxhYmxlIHJlZmVyZW5jZXMKLQkJCS8vIFRPRE86IHJtYWg6IFdlIHNob3VsZCBpbmNsdWRlIHRoZSBwcmVmaXggYXMgd2VsbAotCQkJU3RyaW5nIGN1cnJlbnRDb21ib0l0ZW1OYW1lID0gZ2V0Q29tYm9JdGVtTmFtZShnZXRDdXJyZW50Q29tYm9JdGVtKCkpOwotCQkJaW50IGN1cnJlbnRCaW5kaW5nSW5kZXggPSAtMTsKLQkJCQotCQkJTGlzdCBpdGVtcyA9IGdldENvbWJvSXRlbXMoKTsKLQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCQlPYmplY3QgaXRlbSA9IGl0ZW1zLmdldChpbmRleCk7Ci0JCQkJU3RyaW5nIGl0ZW1OYW1lID0gZ2V0Q29tYm9JdGVtTmFtZShpdGVtKTsKLQkJCQljb21iby5hZGQoaXRlbU5hbWUpOwotCQkJCWl0ZW1zSW5Db21iby5hZGQoaXRlbSk7Ci0KLQkJCQlpZiAoaXRlbU5hbWUuZXF1YWxzKGN1cnJlbnRDb21ib0l0ZW1OYW1lKSkgewotCQkJCQljdXJyZW50QmluZGluZ0luZGV4ID0gaW5kZXg7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoY3VycmVudEJpbmRpbmdJbmRleCAhPSAtMSkgewotCQkJCWNvbWJvLnNlbGVjdChjdXJyZW50QmluZGluZ0luZGV4KTsJCi0JCQl9Ci0JCX0KLQkJCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoY29tYm8pOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIGFic3RyYWN0IExpc3QgZ2V0Q29tYm9JdGVtcygpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBPYmplY3QgZ2V0Q3VycmVudENvbWJvSXRlbSgpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0Q29tYm9JdGVtTmFtZShPYmplY3QgaXRlbSk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcGVyZm9ybUNvbWJvU2VsZWN0aW9uKE9iamVjdCBpdGVtKTsKLQkKLSAgcHVibGljIGJvb2xlYW4gc2hvdWxkVXNlRXh0cmFTcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICB7Ci0JICBzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkgIGlmIChldmVudC53aWRnZXQgPT0gY29tYm8gJiYgIWNvbWJvLmlzRGlzcG9zZWQoKSkgewotCQkgIGludCBzZWxlY3Rpb25JbmRleCA9IGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JCSAgcGVyZm9ybUNvbWJvU2VsZWN0aW9uKGl0ZW1zSW5Db21iby5nZXQoc2VsZWN0aW9uSW5kZXgpKTsKLQkJICByZWZyZXNoKCk7Ci0JICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9BU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9BU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5YjU1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3V0aWwvQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkFTREVkaXRQYXJ0RmFjdG9yeTsKLQotLyoqCi0gKiBAZGVwcmFjYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyIHsKLQlwcml2YXRlIHN0YXRpYyBBU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIgaW5zdGFuY2U7Ci0JCi0JcHJpdmF0ZSBFZGl0UGFydEZhY3RvcnkgZWRpdFBhcnRGYWN0b3J5OwotCQotCXB1YmxpYyBzdGF0aWMgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JcHVibGljIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKSB7Ci0JCWlmIChlZGl0UGFydEZhY3RvcnkgPT0gbnVsbCkgewotCQkJZWRpdFBhcnRGYWN0b3J5ID0gbmV3IEFTREVkaXRQYXJ0RmFjdG9yeSgpOwotCQl9Ci0JCXJldHVybiBlZGl0UGFydEZhY3Rvcnk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEVkaXRQYXJ0RmFjdG9yeShFZGl0UGFydEZhY3RvcnkgZmFjdG9yeSkgewotCQllZGl0UGFydEZhY3RvcnkgPSBmYWN0b3J5OwotCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJT2JqZWN0IGFkYXB0ZXIgPSBlZGl0b3IuZ2V0QWRhcHRlcihHcmFwaGljYWxWaWV3ZXIuY2xhc3MpOwotCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIpIHsKLQkJCSgoRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcikgYWRhcHRlcikuc2V0RWRpdFBhcnRGYWN0b3J5KGZhY3RvcnkpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0VuZFBvaW50Q29tcGFyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0VuZFBvaW50Q29tcGFyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjlhM2FiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9FbmRQb2ludENvbXBhcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci0KLXB1YmxpYyBjbGFzcyBFbmRQb2ludENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKLQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJaWYgKG8xIGluc3RhbmNlb2YgSUVuZFBvaW50ICYmIG8yIGluc3RhbmNlb2YgSUVuZFBvaW50KSB7Ci0JCQlJQmluZGluZyBiaW5kaW5nMSA9ICgoSUVuZFBvaW50KSBvMSkuZ2V0QmluZGluZygpOwotCQkJSUJpbmRpbmcgYmluZGluZzIgPSAoKElFbmRQb2ludCkgbzIpLmdldEJpbmRpbmcoKTsKLQotCQkJaWYgKGJpbmRpbmcxICE9IG51bGwgJiYgYmluZGluZzIgIT0gbnVsbCkgewotCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMSA9IGJpbmRpbmcxLmdldEludGVyZmFjZSgpOwotCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMiA9IGJpbmRpbmcyLmdldEludGVyZmFjZSgpOwotCi0JCQkJaWYgKGludGVyZmFjZTEgIT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIG5hbWUxID0gaW50ZXJmYWNlMS5nZXROYW1lKCk7Ci0JCQkJCVN0cmluZyBuYW1lMiA9IGludGVyZmFjZTIuZ2V0TmFtZSgpOwotCQkJCQlyZXR1cm4gbmFtZTEuY29tcGFyZVRvKG5hbWUyKTsKLQkJCQl9Ci0KLQkJCQlyZXR1cm4gZG9OdWxsQ29tcGFyaXNvbihpbnRlcmZhY2UxLCBpbnRlcmZhY2UyKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIGRvTnVsbENvbXBhcmlzb24oYmluZGluZzEsIGJpbmRpbmcyKTsKLQkJfQotCi0JCXJldHVybiBkb051bGxDb21wYXJpc29uKG8xLCBvMik7Ci0JfQotCQotCXByaXZhdGUgaW50IGRvTnVsbENvbXBhcmlzb24oT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJaWYgKG8xICE9IG51bGwgJiYgbzIgPT0gbnVsbCkgewotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWVsc2UgaWYgKG8xID09IG51bGwgJiYgbzIgIT0gbnVsbCkgewotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJCi0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3V0aWwvSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmEzZGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciB7Ci0JcHVibGljIHZvaWQgc2V0TW9kZWwoT2JqZWN0IG9iamVjdCk7Ci0JcHVibGljIHZvaWQgb3BlbkV4dGVybmFsRWRpdG9yKCk7Ci0JcHVibGljIGJvb2xlYW4gbGlua0FwcGxpY2FibGUoKTsKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCk7Ci0JcHVibGljIHZvaWQgc2hvd1ByZXZpZXcoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL1dTRExDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvV1NETENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZmM3M2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvV1NETENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLnJlbmFtZS5Db21wb25lbnRSZW5hbWVBcmd1bWVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5yZW5hbWUuWE1MQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotCi0vKioKLSAqIFRoaXMgcGFydGljaXBhbnQgdGFrZXMgY2FzZSBvZiByZW5hbWluZyBtYXRjaGVzIHRoYXQgYXJlIFhTRCBjb21wb25lbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQgZXh0ZW5kcyBYTUxDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudCB7Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpbml0aWFsaXplKE9iamVjdCBlbGVtZW50KSB7Ci0KLQkJaWYoZWxlbWVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50IHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBYU0ROYW1lZENvbXBvbmVudCl7Ci0JCQlpZihnZXRBcmd1bWVudHMoKSBpbnN0YW5jZW9mIENvbXBvbmVudFJlbmFtZUFyZ3VtZW50cyl7Ci0JCQkJbWF0Y2hlcyA9IChMaXN0KSgoQ29tcG9uZW50UmVuYW1lQXJndW1lbnRzKWdldEFyZ3VtZW50cygpKS5nZXRNYXRjaGVzKCkuZ2V0KElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFKTsKLQkJCX0KLQkJCWlmKG1hdGNoZXMgIT0gbnVsbCl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCi0JCXJldHVybiAiV1NETCBjb21wb25lbnQgcmVuYW1lIHBhcnRpY2lwYW50IjsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvUmVuYW1lQ29tcG9uZW50QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1JlbmFtZUNvbXBvbmVudEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTM5NTI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvUmVuYW1lQ29tcG9uZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucGFydGljaXBhbnRzLlJlbmFtZVJlZmFjdG9yaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZy5SZWZhY3RvcmluZ1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcuUmVmYWN0b3JpbmdXaXphcmRPcGVuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5HbG9iYWxCdWlsZEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLmRpYWxvZ3MuU2F2ZURpcnR5RmlsZXNEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTm9kZUFzc29jaWF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5SZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlJlZmFjdG9yaW5nTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5YTUxSZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLnJlbmFtZS5SZW5hbWVDb21wb25lbnRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci53aXphcmQuUmVuYW1lUmVmYWN0b3JpbmdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlbmFtZUNvbXBvbmVudEFjdGlvbiBleHRlbmRzIFdTRExTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbiB7Ci0KLQlwcml2YXRlIFJlZmFjdG9yaW5nQ29tcG9uZW50IHNlbGVjdGVkQ29tcG9uZW50OwotCi0JcHVibGljIFJlbmFtZUNvbXBvbmVudEFjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbiwKLQkJCURlZmluaXRpb24gbW9kZWwpIHsKLQkJc3VwZXIoc2VsZWN0aW9uKTsKLQkJc2V0TW9kZWwobW9kZWwpOwotCX0KLSAKLQlwcm90ZWN0ZWQgYm9vbGVhbiBkb0NhbkVuYWJsZVhTRFNlbGVjdGlvbihYU0ROYW1lZENvbXBvbmVudCBzZWxlY3RlZE9iamVjdCkgewotCi0JCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJaWYgKHNlbGVjdGVkT2JqZWN0ICE9IG51bGwpIHsKLQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbmV3IFhNTFJlZmFjdG9yaW5nQ29tcG9uZW50KAotCQkJCQlzZWxlY3RlZE9iamVjdCwKLQkJCQkJKElET01FbGVtZW50KXNlbGVjdGVkT2JqZWN0LmdldEVsZW1lbnQoKSwgCi0JCQkJCXNlbGVjdGVkT2JqZWN0LmdldE5hbWUoKSwKLQkJCQkJc2VsZWN0ZWRPYmplY3QuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQotCQkJLy8gaWYgaXQncyBlbGVtZW50IHJlZmVyZW5jZSwgdGhlbiB0aGlzIGFjdGlvbiBpcyBub3QgYXBwcm9wcmlhdGUKLQkJCWlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgc2VsZWN0ZWRPYmplY3Q7Ci0JCQkJaWYgKGVsZW1lbnQuaXNFbGVtZW50RGVjbGFyYXRpb25SZWZlcmVuY2UoKSkgewotCQkJCQlzZWxlY3RlZENvbXBvbmVudCA9IG51bGw7Ci0JCQkJfQotCQkJfQotCQkJaWYoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbil7Ci0JCQkJWFNEVHlwZURlZmluaXRpb24gdHlwZSA9IChYU0RUeXBlRGVmaW5pdGlvbikgc2VsZWN0ZWRPYmplY3Q7Ci0JCQkJWFNEQ29uY3JldGVDb21wb25lbnQgcGFyZW50ID0gdHlwZS5nZXRDb250YWluZXIoKTsKLQkJCQlpZiAocGFyZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgcGFyZW50OwotCQkJCQlpZihlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkuZXF1YWxzKHR5cGUpKXsKLQkJCQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIGlmKHBhcmVudCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKSB7Ci0JCQkJCVhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pIHBhcmVudDsKLQkJCQkJaWYoZWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpLmVxdWFscyh0eXBlKSl7Ci0JCQkJCQlzZWxlY3RlZENvbXBvbmVudCA9IG51bGw7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gY2FuUnVuKCk7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGRvQ2FuRW5hYmxlV1NETFNlbGVjdGlvbihXU0RMRWxlbWVudCBzZWxlY3RlZE9iamVjdCkgewotCi0JCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJU3RyaW5nIGxvY2FsTmFtZSA9IG51bGw7Ci0JCVN0cmluZyBuYW1lc3BhY2UgPSBudWxsOyAKLQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZyl7Ci0JCQlsb2NhbE5hbWUgPSAoKEJpbmRpbmcpc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQluYW1lc3BhY2UgPSAoKEJpbmRpbmcpc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCX0KLQkJZWxzZSBpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBQb3J0VHlwZSl7Ci0JCQlsb2NhbE5hbWUgPSAoKFBvcnRUeXBlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJbmFtZXNwYWNlID0gKChQb3J0VHlwZSlzZWxlY3RlZE9iamVjdCkuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJfQotCQllbHNlIGlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIE1lc3NhZ2UpewotCQkJbG9jYWxOYW1lID0gKChNZXNzYWdlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJbmFtZXNwYWNlID0gKChNZXNzYWdlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQl9Ci0JCWlmKGxvY2FsTmFtZSAhPSBudWxsKXsKLQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbmV3IFhNTFJlZmFjdG9yaW5nQ29tcG9uZW50KAotCQkJCQlzZWxlY3RlZE9iamVjdCwKLQkJCQkJKElET01FbGVtZW50KXNlbGVjdGVkT2JqZWN0LmdldEVsZW1lbnQoKSwgCi0JCQkJCWxvY2FsTmFtZSwKLQkJCQkJbmFtZXNwYWNlKTsKLQkJfQotCQkKLQkKLQkJcmV0dXJuIGNhblJ1bigpOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGNhbkVuYWJsZShPYmplY3Qgc2VsZWN0ZWRPYmplY3QpIHsKLQotCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBYU0ROYW1lZENvbXBvbmVudCkgewotCQkJcmV0dXJuIGRvQ2FuRW5hYmxlWFNEU2VsZWN0aW9uKChYU0ROYW1lZENvbXBvbmVudCkgc2VsZWN0ZWRPYmplY3QpOwotCQl9IGVsc2UgaWYoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpewotCQkJcmV0dXJuIGRvQ2FuRW5hYmxlV1NETFNlbGVjdGlvbigoV1NETEVsZW1lbnRJbXBsKSBzZWxlY3RlZE9iamVjdCk7Ci0JCX0KLQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkgewotCQkJRWxlbWVudCBub2RlID0gKEVsZW1lbnQpIHNlbGVjdGVkT2JqZWN0OwotCQkJaWYgKGdldERlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJLy8gaXNzdWUgKGViKSAgZGVwZW5kZW5jeSBvbiB1dGlsaXR5IGNsYXNzIHRvIGdldCBjb21wb25lbnQgZnJvbSB0aGUgbW9kZWwgYmFzZWQgb24gZWxlbWVudAotCQkJCU9iamVjdCBjb25jcmV0ZUNvbXBvbmVudCA9IAkobmV3IE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIoKSkuZ2V0TW9kZWxPYmplY3RGb3JOb2RlKGdldERlZmluaXRpb24oKSwgbm9kZSk7Ci0JCQkJcmV0dXJuIGNhbkVuYWJsZShjb25jcmV0ZUNvbXBvbmVudCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCi0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuUnVuKCkgewotCi0JCXJldHVybiBzZWxlY3RlZENvbXBvbmVudCAhPSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bihJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQotICAgICAgICBib29sZWFuIHJjID0gU2F2ZURpcnR5RmlsZXNEaWFsb2cuc2F2ZURpcnR5RmlsZXMoKTsKLSAgICAgICAgaWYgKCFyYykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSAgCi0JCVJlbmFtZUNvbXBvbmVudFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgUmVuYW1lQ29tcG9uZW50UHJvY2Vzc29yKHNlbGVjdGVkQ29tcG9uZW50LCBzZWxlY3RlZENvbXBvbmVudC5nZXROYW1lKCkpOwotCQlSZW5hbWVSZWZhY3RvcmluZyByZWZhY3RvcmluZyA9IG5ldyBSZW5hbWVSZWZhY3RvcmluZyhwcm9jZXNzb3IpOwotCQl0cnkgewotCQkJUmVmYWN0b3JpbmdXaXphcmQgd2l6YXJkID0gbmV3IFJlbmFtZVJlZmFjdG9yaW5nV2l6YXJkKAotCQkJCQlyZWZhY3RvcmluZywKLQkJCQkJUmVmYWN0b3JpbmdNZXNzYWdlcwotCQkJCQkuZ2V0U3RyaW5nKCJSZW5hbWVDb21wb25lbnRXaXphcmQuZGVmYXVsdFBhZ2VUaXRsZSIpLCAvLyROT04tTkxTLTEkIFRPRE86IHByb3ZpZGUgY29ycmVjdCBzdHJpbmdzCi0JCQkJCVJlZmFjdG9yaW5nTWVzc2FnZXMKLQkJCQkJLmdldFN0cmluZygiUmVuYW1lQ29tcG9uZW50V2l6YXJkLmlucHV0UGFnZS5kZXNjcmlwdGlvbiIpLCAvLyROT04tTkxTLTEkCi0JCQkJCW51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJjID0gc3VwZXIucGVyZm9ybUZpbmlzaCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8oKERlZmluaXRpb25JbXBsKWdldERlZmluaXRpb24oKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB9OyAgICAgICAgCi0JCQlSZWZhY3RvcmluZ1dpemFyZE9wZW5PcGVyYXRpb24gb3AgPSBuZXcgUmVmYWN0b3JpbmdXaXphcmRPcGVuT3BlcmF0aW9uKAotCQkJCQl3aXphcmQpOwotCQkJb3AucnVuKFdTRExFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKSwgd2l6YXJkCi0JCQkJCS5nZXREZWZhdWx0UGFnZVRpdGxlKCkpOwotCQkJdHJpZ2dlckJ1aWxkKCk7Ci0gICAgICAgICAgICAKLQkJCURpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKQotCQkJewkJCSAgCi0JCQkgIHB1YmxpYyB2b2lkIHJ1bigpCi0JCQkgIHsKLQkJCSAgICAoKERlZmluaXRpb25JbXBsKWdldERlZmluaXRpb24oKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLQkJCSAgfQotCQkJfSk7ICAKLSAgICAgICAgICAgIAotCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLiBVc2VyIGFjdGlvbiBnb3QgY2FuY2VsbGVkCi0JCX0KLQkJCi0JCWlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgRGVmaW5pdGlvbkltcGwpIHsKLQkJCSgoRGVmaW5pdGlvbkltcGwpIGdldE1vZGVsKCkpLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJpZ2dlckJ1aWxkKCkgewotCQlpZiAoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldERlc2NyaXB0aW9uKCkuaXNBdXRvQnVpbGRpbmcoKSkgewotCQkJbmV3IEdsb2JhbEJ1aWxkQWN0aW9uKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKQotCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCksCi0JCQkJCUluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQpLnJ1bigpOwotCQl9Ci0JfQotCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3RvckFjdGlvbkdyb3VwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3RvckFjdGlvbkdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNGE3MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9XU0RMUmVmYWN0b3JBY3Rpb25Hcm91cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zLlJlbmFtZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLndpemFyZC5SZWZhY3RvckFjdGlvbkdyb3VwOwotCi1wdWJsaWMgY2xhc3MgV1NETFJlZmFjdG9yQWN0aW9uR3JvdXAgZXh0ZW5kcyBSZWZhY3RvckFjdGlvbkdyb3VwIHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTkFNRV9FTEVNRU5UID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0JCi0JcHVibGljIFdTRExSZWZhY3RvckFjdGlvbkdyb3VwKElTZWxlY3Rpb24gc2VsZWN0aW9uLAotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCQotCQlzdXBlcihzZWxlY3Rpb24pOyAKLQkgIAlpZiggZGVmaW5pdGlvbiAhPSBudWxsKXsKLQkJCWZFZGl0b3JBY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkJUmVuYW1lQ29tcG9uZW50QWN0aW9uIGFjdGlvbiA9IG5ldyBSZW5hbWVDb21wb25lbnRBY3Rpb24oc2VsZWN0aW9uLCBkZWZpbml0aW9uKTsKLQkJCWZSZW5hbWVBY3Rpb24gPSBuZXcgUmVuYW1lQWN0aW9uKHNlbGVjdGlvbik7Ci0JCQlmUmVuYW1lQWN0aW9uLnNldFJlbmFtZUNvbXBvbmVudEFjdGlvbihhY3Rpb24pOwotCQkJZlJlbmFtZUFjdGlvbi5zZXRBY3Rpb25EZWZpbml0aW9uSWQoUkVOQU1FX0VMRU1FTlQpOwotCQkJZkVkaXRvckFjdGlvbnMuYWRkKGZSZW5hbWVBY3Rpb24pOwotCQkJaW5pdEFjdGlvbihmUmVuYW1lQWN0aW9uLCBzZWxlY3Rpb24pOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJLy9kaXNwb3NlQWN0aW9uKGZSZW5hbWVBY3Rpb24sIGZTZWxlY3Rpb25Qcm92aWRlcik7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDU4MGRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydFNpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLkZpbGVTdG9yZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSVNlbGVjdGlvbk1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLndpemFyZC5SZWZhY3RvckFjdGlvbkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3Iud2l6YXJkLlJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLndpemFyZC5SZWZhY3Rvckdyb3VwU3ViTWVudTsKLQotcHVibGljIGNsYXNzIFdTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUgZXh0ZW5kcyBSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHVibGljIFdTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAvKioKLSAgICogRmlsbHMgdGhlIG1lbnUgd2l0aCBhcHBsaWNhYmxlIHJlZmFjdG9yIHN1Yi1tZW51ZXMKLSAgICogCi0gICAqIEBwYXJhbSBtZW51Ci0gICAqICAgICAgICAgIFRoZSBtZW51IHRvIGZpbGwKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGZpbGxNZW51KE1lbnUgbWVudSkKLSAgewotICAgIGlmIChmU2VsZWN0aW9uID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAod29ya2JlbmNoUGFydCAhPSBudWxsKQotICAgIHsKLSAgICAgIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlID0gd29ya2JlbmNoUGFydC5nZXRTaXRlKCk7Ci0gICAgICBpZiAoc2l0ZSA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0gICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBzaXRlLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgYm9vbGVhbiBzaG91bGRGaWxsTWVudSA9IGVkaXRvciAhPSBudWxsICYmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCk7Ci0gICAgICBpZiAoc2hvdWxkRmlsbE1lbnUpCi0gICAgICB7Ci0gICAgICAgIElTZWxlY3Rpb25NYXBwZXIgbWFwcGVyID0gKElTZWxlY3Rpb25NYXBwZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpOwotICAgICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1hcHBlciAhPSBudWxsID8gbWFwcGVyLm1hcFNlbGVjdGlvbihmU2VsZWN0aW9uKSA6IGZTZWxlY3Rpb247Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlZGl0b3IuZ2V0QWRhcHRlcihEZWZpbml0aW9uLmNsYXNzKTsKLSAgICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgUmVmYWN0b3JBY3Rpb25Hcm91cCByZWZhY3Rvck1lbnVHcm91cCA9IG5ldyBXU0RMUmVmYWN0b3JBY3Rpb25Hcm91cChzZWxlY3Rpb24sIGRlZmluaXRpb24pOwotICAgICAgICAgIFJlZmFjdG9yR3JvdXBTdWJNZW51IHN1Yk1lbnUgPSBuZXcgUmVmYWN0b3JHcm91cFN1Yk1lbnUocmVmYWN0b3JNZW51R3JvdXApOwotICAgICAgICAgIHN1Yk1lbnUuZmlsbChtZW51LCAtMSk7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODBmNjM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9ucy5TZWxlY3Rpb25EaXNwYXRjaEFjdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uIGV4dGVuZHMgU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24KLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRU5BTUVfRUxFTUVOVCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBXU0RMU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQlzdXBlcihzZWxlY3Rpb24pOwotCX0KLQkKLQlwcm90ZWN0ZWQgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCl7Ci0JCU9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCWlmKG1vZGVsIGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLQkJewotCQkJcmV0dXJuIChEZWZpbml0aW9uKSBtb2RlbDsKLQkJfQotCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL0lXU0RMU2VhcmNoQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvSVdTRExTZWFyY2hDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2YzVjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvSVdTRExTZWFyY2hDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2g7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMU2VhcmNoQ29uc3RhbnRzIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfTkFNRVNQQUNFID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTFNDSEVNQV9OQU1FU1BBQ0UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBNRVNTQUdFX01FVEFfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKAotCQkJV1NETF9OQU1FU1BBQ0UsICJtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBQT1JUX1RZUEVfTUVUQV9OQU1FID0gbmV3IFF1YWxpZmllZE5hbWUoCi0JCQlXU0RMX05BTUVTUEFDRSwgInBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBCSU5ESU5HX01FVEFfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKAotCQkJV1NETF9OQU1FU1BBQ0UsICJiaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaENvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDIzMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL1dTRExTZWFyY2hDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLkNvbXBvbmVudFNlYXJjaENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5JWFNEU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlYXJjaENvbnRyaWJ1dG9yIGV4dGVuZHMgQ29tcG9uZW50U2VhcmNoQ29udHJpYnV0b3IgewotCi0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRGVjbGFyYXRpb25zKCkgewotCi0JCWRlY2xhcmF0aW9ucyA9IG5ldyBIYXNoTWFwKCk7Ci0JCVN0cmluZyBucyA9IElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFOwotCi0JCVNlYXJjaFBhdHRlcm4gcGF0dGVybiA9IG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAibWVzc2FnZSIsICJuYW1lIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlkZWNsYXJhdGlvbnMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBwYXR0ZXJuKTsKLQotCQlwYXR0ZXJuID0gbmV3IFhNTFNlYXJjaFBhdHRlcm4oIG5zLCAicG9ydFR5cGUiLCAibmFtZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZGVjbGFyYXRpb25zLnB1dChJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBwYXR0ZXJuKTsKLQotCQlwYXR0ZXJuID0gbmV3IFhNTFNlYXJjaFBhdHRlcm4obnMsICJiaW5kaW5nIiwgIm5hbWUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWRlY2xhcmF0aW9ucy5wdXQoSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIHBhdHRlcm4pOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgIGluaXRpYWxpemVSZWZlcmVuY2VzKCkgewotCi0JCXJlZmVyZW5jZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlTdHJpbmcgbnMgPSBJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRTsKLQotCQlMaXN0IHBhdHRlcm5zID0gbmV3IEFycmF5TGlzdCgpOwotCQlwYXR0ZXJucy5hZGQobmV3IFhNTFNlYXJjaFBhdHRlcm4oIG5zLCAicGFydCIsICJlbGVtZW50IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmVmZXJlbmNlcy5wdXQoSVhTRFNlYXJjaENvbnN0YW50cy5FTEVNRU5UX01FVEFfTkFNRSwgcGF0dGVybnMpOwotCi0JCXBhdHRlcm5zID0gbmV3IEFycmF5TGlzdCgpOwotCQlwYXR0ZXJucy5hZGQobmV3IFhNTFNlYXJjaFBhdHRlcm4obnMsICJwYXJ0IiwgInR5cGUiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlyZWZlcmVuY2VzLnB1dChJWFNEU2VhcmNoQ29uc3RhbnRzLkNPTVBMRVhfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAicGFydCIsICJ0eXBlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmVmZXJlbmNlcy5wdXQoSVhTRFNlYXJjaENvbnN0YW50cy5TSU1QTEVfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAiaW5wdXQiLCAibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXBhdHRlcm5zLmFkZChuZXcgWE1MU2VhcmNoUGF0dGVybihucywgIm91dHB1dCIsICJtZXNzYWdlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAiZmF1bHQiLCAibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBwYXR0ZXJucyk7Ci0KLQkJcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXBhdHRlcm5zLmFkZChuZXcgWE1MU2VhcmNoUGF0dGVybihucywgImJpbmRpbmciLCAidHlwZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKCBucywgInBvcnQiLCAiYmluZGluZyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBwYXR0ZXJucyk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWROYW1lc3BhY2VzKCkgewotCQluYW1lc3BhY2VzID0gbmV3IFN0cmluZ1tdeyBJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UsIElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFfTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9XU0RMU2VhcmNoUGFydGljaXBhbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9XU0RMU2VhcmNoUGFydGljaXBhbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAyNTUyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaFBhcnRpY2lwYW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guU2VhcmNoUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlNlYXJjaFBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5Db21wb25lbnRTZWFyY2hDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudERlY2xhcmF0aW9uUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudFJlZmVyZW5jZVBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxDb21wb25lbnRTZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MU2VhcmNoUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxTZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLklYU0RTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VhcmNoUGFydGljaXBhbnQgZXh0ZW5kcyBYTUxTZWFyY2hQYXJ0aWNpcGFudCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFhTRF9QQVJUSUNJUEFOTlRfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC5zZWFyY2guWFNEU2VhcmNoUGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0KLQkKLQlwdWJsaWMgV1NETFNlYXJjaFBhcnRpY2lwYW50KCkKLQl7Ci0JICBzdXBlcigpOwotICAgICAgaWQgPSBJRDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldFN1cHBvcnRlZENvbnRlbnRUeXBlcygpCi0JewotCSAgU3RyaW5nW10gcmVzdWx0ID0geyAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIgfTsgLy8kTk9OLU5MUy0xJAotCSAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhYmxlKFNlYXJjaFBhdHRlcm4gcGF0dGVybiwgTWFwIHNlYXJjaE9wdGlvbnMpCi0JewotCQlpZihwYXR0ZXJuIGluc3RhbmNlb2YgWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiApewotCQkJWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiBjb21wb25lbnRQYXR0ZXJuID0gKFhNTENvbXBvbmVudFNlYXJjaFBhdHRlcm4pcGF0dGVybjsKLQkJCVN0cmluZyBuYW1lc3BhY2UgPSBjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkuZ2V0TmFtZXNwYWNlKCk7Ci0JCQlpZihJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRS5lcXVhbHMobmFtZXNwYWNlKSB8fAotCQkJCQlJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UuZXF1YWxzKG5hbWVzcGFjZSkpewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9CQotCQotCXB1YmxpYyBDb21wb25lbnRTZWFyY2hDb250cmlidXRvciBnZXRTZWFyY2hDb250cmlidXRvcigpIHsKLQotCQlyZXR1cm4gbmV3IFdTRExTZWFyY2hDb250cmlidXRvcigpOwotCX0KLQkKLSAgcHVibGljIHZvaWQgYmVnaW5TZWFyY2hpbmcoU2VhcmNoUGF0dGVybiBwYXR0ZXJuLCBNYXAgc2VhcmNoT3B0aW9ucykgewotCQkKLQkJc3VwZXIuYmVnaW5TZWFyY2hpbmcocGF0dGVybiwgc2VhcmNoT3B0aW9ucyk7Ci0JCUxpc3QgcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmKHBhdHRlcm4gaW5zdGFuY2VvZiBYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4pewotCQkJCi0JCQlYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4gY29tcG9uZW50UGF0dGVybiA9IChYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4pcGF0dGVybjsKLQkJCWlmKElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFLmVxdWFscyhjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkuZ2V0TmFtZXNwYWNlKCkpKXsKLQkJCQlYTUxTZWFyY2hQYXR0ZXJuIGNoaWxkUGF0dGVybiA9IGdldFNlYXJjaENvbnRyaWJ1dG9yKCkuZ2V0RGVjbGFyYXRpb25QYXR0ZXJuKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQkJaWYoY2hpbGRQYXR0ZXJuICE9IG51bGwpewotCQkJCQljaGlsZFBhdHRlcm4uc2V0U2VhcmNoTmFtZShjb21wb25lbnRQYXR0ZXJuLmdldE5hbWUoKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwotCSAgICAgCQkJcGF0dGVybnMuYWRkKGNoaWxkUGF0dGVybik7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZihJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UuZXF1YWxzKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKS5nZXROYW1lc3BhY2UoKSkpewotCQkJCVNlYXJjaFBhcnRpY2lwYW50IHhzZFBhcnRpY2lwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChYU0RfUEFSVElDSVBBTk5UX0lEKTsKLQkJCQlpZih4c2RQYXJ0aWNpcGFudCBpbnN0YW5jZW9mIFhNTFNlYXJjaFBhcnRpY2lwYW50KXsKLQkJCQkJQ29tcG9uZW50U2VhcmNoQ29udHJpYnV0b3IgeHNkQ29udHJpYnV0b3IgPSAoKFhNTFNlYXJjaFBhcnRpY2lwYW50KXhzZFBhcnRpY2lwYW50KS5nZXRTZWFyY2hDb250cmlidXRvcigpOwotCQkJCQlpZih4c2RDb250cmlidXRvciAhPSBudWxsKXsKLQkJCQkJCVhNTFNlYXJjaFBhdHRlcm4gY2hpbGRQYXR0ZXJuID0geHNkQ29udHJpYnV0b3IuZ2V0RGVjbGFyYXRpb25QYXR0ZXJuKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQkJCQlpZihjaGlsZFBhdHRlcm4gIT0gbnVsbCl7Ci0JCQkJCQkJY2hpbGRQYXR0ZXJuLnNldFNlYXJjaE5hbWUoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwotCQkJICAgICAJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNvbXBvbmVudFBhdHRlcm4uc2V0Q2hpbGRyZW4oKFhNTFNlYXJjaFBhdHRlcm5bXSkgcGF0dGVybnMudG9BcnJheShuZXcgWE1MU2VhcmNoUGF0dGVybltwYXR0ZXJucy5zaXplKCldKSk7Ci0JCQkKLQkJfQotCQllbHNlIGlmKHBhdHRlcm4gaW5zdGFuY2VvZiBYTUxDb21wb25lbnRSZWZlcmVuY2VQYXR0ZXJuKXsKLQkJCVhNTENvbXBvbmVudFJlZmVyZW5jZVBhdHRlcm4gY29tcG9uZW50UGF0dGVybiA9IChYTUxDb21wb25lbnRSZWZlcmVuY2VQYXR0ZXJuKXBhdHRlcm47Ci0JCQlYTUxTZWFyY2hQYXR0ZXJuW10gY2hpbGRQYXR0ZXJucyA9IGdldFNlYXJjaENvbnRyaWJ1dG9yKCkuZ2V0UmVmZXJlbmNlc1BhdHRlcm5zKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkUGF0dGVybnMubGVuZ3RoOyBpKyspIHsKLQkJCQlYTUxTZWFyY2hQYXR0ZXJuIGNoaWxkUGF0dGVybiA9IGNoaWxkUGF0dGVybnNbaV07Ci0JCQkJY2hpbGRQYXR0ZXJuLnNldFNlYXJjaE5hbWUoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwkKLQkJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCX0KLQkJCVNlYXJjaFBhcnRpY2lwYW50IHhzZFBhcnRpY2lwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChYU0RfUEFSVElDSVBBTk5UX0lEKTsKLQkJCWlmKHhzZFBhcnRpY2lwYW50IGluc3RhbmNlb2YgWE1MU2VhcmNoUGFydGljaXBhbnQpewotCQkJCUNvbXBvbmVudFNlYXJjaENvbnRyaWJ1dG9yIHhzZENvbnRyaWJ1dG9yID0gKChYTUxTZWFyY2hQYXJ0aWNpcGFudCl4c2RQYXJ0aWNpcGFudCkuZ2V0U2VhcmNoQ29udHJpYnV0b3IoKTsKLQkJCQlpZih4c2RDb250cmlidXRvciAhPSBudWxsKXsKLQkJCQkJY2hpbGRQYXR0ZXJucyA9IHhzZENvbnRyaWJ1dG9yLmdldFJlZmVyZW5jZXNQYXR0ZXJucyhjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkUGF0dGVybnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCVhNTFNlYXJjaFBhdHRlcm4gY2hpbGRQYXR0ZXJuID0gY2hpbGRQYXR0ZXJuc1tpXTsKLQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lKGNvbXBvbmVudFBhdHRlcm4uZ2V0TmFtZSgpLmdldExvY2FsTmFtZSgpKTsKLQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwkJCi0JCQkJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNvbXBvbmVudFBhdHRlcm4uc2V0Q2hpbGRyZW4oKFhNTFNlYXJjaFBhdHRlcm5bXSkgcGF0dGVybnMudG9BcnJheShuZXcgWE1MU2VhcmNoUGF0dGVybltwYXR0ZXJucy5zaXplKCldKSk7Ci0JCQkKLQkJfQotCQkKLQl9Ci0KLSAgCi0gIAotCQotCQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MWM3NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExGaW5kUmVmZXJlbmNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9uczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc2VhcmNoLnVpLk5ld1NlYXJjaFVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5Xb3Jrc3BhY2VTZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLklTZWxlY3Rpb25NYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guWFNEU2VhcmNoUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9ucy5GaW5kQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotCXByaXZhdGUgV1NETEJhc2VBZGFwdGVyIGNvbXBvbmVudDsKLQlwcml2YXRlIElGaWxlIGZpbGU7Ci0JcHJpdmF0ZSBRdWFsaWZpZWROYW1lW10gbmFtZXM7Ci0KLSAgcHVibGljIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbihJRWRpdG9yUGFydCBlZGl0b3IpCi0gIHsKLSAgICBzdXBlcihlZGl0b3IpOwotICAgIGluaXQoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXQoKSB7Ci0JY29tcG9uZW50ID0gZ2V0V1NETE5hbWVkQ29tcG9uZW50KCk7Ci0JZmlsZSA9IGdldEN1cnJlbnRGaWxlKCk7Ci0JbmFtZXMgPSBkZXRlcm1pbmVNZXRhQW5kUXVhbGlmaWVkTmFtZShjb21wb25lbnQpOwotCWlmIChmaWxlID09IG51bGwgfHwgY29tcG9uZW50ID09IG51bGwgfHwgbmFtZXMgPT0gbnVsbCkKLQkgIHNldEVuYWJsZWQoZmFsc2UpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25EZWZpbml0aW9uSWQoU3RyaW5nIHN0cmluZykKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFRvIGJlIHVzZWQgYnkgc3ViY2xhc3MgaW4gaXRzIHJ1bigpIFJldHVybnMgdGhlIGZpbGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBvZgotICAgKiBhIGNvbXBvbmVudCAoZnJvbSB0aGUgdXNlcikgb2NjdXJzIGllLiBSZXR1cm5zIHRoZSBmaWxlIHRoYXQgdGhlIHVzZXIgaXMKLSAgICogY3VycmVudGx5IHdvcmtpbmcgb24uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBJRmlsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB3b3JraW5nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgSUZpbGUgZ2V0Q3VycmVudEZpbGUoKQotICB7Ci0gICAgaWYgKGVkaXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQ7Ci0gICAgICAgIHJldHVybiBmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUbyBiZSB1c2VkIGJ5IHN1YmNsYXNzIGluIGl0cyBydW4oKS4uIERldGVybWluZXMgdGhlIG1ldGFOYW1lIG9mIHRoZSBXU0RMCi0gICAqIGNvbXBvbmVudCBnaXZlbiB0byB0aGlzIG1ldGhvZC4KLSAgICogCi0gICAqIEBwYXJhbSBjb21wb25lbnQKLSAgICogICAgICAgICAgVGhlIGNvbXBvbmVudCBvZiB3aGljaCB3ZSB3YW50IHRvIGRldGVybWluZSB0aGUgbmFtZQotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGZpcnN0IG9uZSBpcyBmb3IgTWV0YU5hbWUvVHlwZSwgc2Vjb25kIGZvciBFbGVtZW50UXVhbGlmaWVkTmFtZQotICAgKi8KLSAgcHJvdGVjdGVkIFF1YWxpZmllZE5hbWVbXSBkZXRlcm1pbmVNZXRhQW5kUXVhbGlmaWVkTmFtZShXU0RMQmFzZUFkYXB0ZXIgY29tcG9uZW50KQotICB7Ci0gICAgUXVhbGlmaWVkTmFtZSBuYW1lc1tdID0gbnVsbDsKLSAgICBRTmFtZSBxTmFtZTsKLQlpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVzExTWVzc2FnZSApCi0gICAgewotCQluYW1lcyA9IG5ldyBRdWFsaWZpZWROYW1lWzJdOwotICAgIAluYW1lc1swXSA9IElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FOwotICAgIAlxTmFtZSA9ICgoTWVzc2FnZSkgY29tcG9uZW50LmdldFRhcmdldCgpKS5nZXRRTmFtZSgpOwotICAgIAluYW1lc1sxXSA9IG5ldyBRdWFsaWZpZWROYW1lKHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFcxMUludGVyZmFjZSkKLSAgICB7Ci0gICAgCW5hbWVzID0gbmV3IFF1YWxpZmllZE5hbWVbMl07Ci0gICAgCW5hbWVzWzBdID0gSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRTsKLSAgICAJcU5hbWUgPSAoKFBvcnRUeXBlKSBjb21wb25lbnQuZ2V0VGFyZ2V0KCkpLmdldFFOYW1lKCk7Ci0gICAgCW5hbWVzWzFdID0gbmV3IFF1YWxpZmllZE5hbWUocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVzExQmluZGluZykKLSAgICB7Ci0gICAgCW5hbWVzID0gbmV3IFF1YWxpZmllZE5hbWVbMl07Ci0gICAgCW5hbWVzWzBdID0gSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUU7Ci0gICAgCXFOYW1lID0gKChCaW5kaW5nKSBjb21wb25lbnQuZ2V0VGFyZ2V0KCkpLmdldFFOYW1lKCk7Ci0gICAgCW5hbWVzWzFdID0gbmV3IFF1YWxpZmllZE5hbWUocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLQotICAgIH0KLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIGdldFdTRExOYW1lZENvbXBvbmVudCgpCi0gIHsKLSAgICBpZiAoZWRpdG9yICE9IG51bGwpCi0gICAgewotICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICAgIElTZWxlY3Rpb25NYXBwZXIgbWFwcGVyID0gKElTZWxlY3Rpb25NYXBwZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpOwotICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gcHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChtYXBwZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlbGVjdGlvbiA9IG1hcHBlci5tYXBTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICAgICAgT2JqZWN0IG8gPSBzLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICAgIGlmIChvICE9IG51bGwgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFdTRExCYXNlQWRhcHRlcikgbzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gVGhlIGV4cGVjdGVkIGNvbXBvbmVudCB3ZSBnZXQgZnJvbSB0aGUgZWRpdG9yIGRvZXMgbm90IG1lZXQKLSAgICAvLyBvdXIgZXhwZWN0YXRpb24KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgCi0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIFN0cmluZyBwYXR0ZXJuID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICBpZiAoZmlsZSAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgU2VhcmNoU2NvcGUgc2NvcGUgPSBuZXcgV29ya3NwYWNlU2VhcmNoU2NvcGUoKTsKLSAgICAgIFN0cmluZyBzY29wZURlc2NyaXB0aW9uID0gIldvcmtzcGFjZSI7Ci0gICAgICBYU0RTZWFyY2hRdWVyeSBzZWFyY2hRdWVyeSA9IG5ldyBYU0RTZWFyY2hRdWVyeShwYXR0ZXJuLCBmaWxlLCBuYW1lc1sxXSwgCi0gICAgCQkgIG5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7Ci0gICAgICBOZXdTZWFyY2hVSS5hY3RpdmF0ZVNlYXJjaFJlc3VsdFZpZXcoKTsKLSAgICAgIE5ld1NlYXJjaFVJLnJ1blF1ZXJ5SW5CYWNrZ3JvdW5kKHNlYXJjaFF1ZXJ5KTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4NDBmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc2VhcmNoLnVpLk5ld1NlYXJjaFVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuUHJvamVjdFNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5YU0RTZWFyY2hRdWVyeTsKLQotcHVibGljIGNsYXNzIFdTRExGaW5kUmVmZXJlbmNlc0luUHJvamVjdEFjdGlvbiBleHRlbmRzIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbnsKLQlwdWJsaWMgV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikKLQl7Ci0JCXN1cGVyKGVkaXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCVN0cmluZyBwYXR0ZXJuID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJV1NETEJhc2VBZGFwdGVyIGNvbXBvbmVudCA9IGdldFdTRExOYW1lZENvbXBvbmVudCgpOwotCQlJRmlsZSBmaWxlID0gZ2V0Q3VycmVudEZpbGUoKTsKLQkJUXVhbGlmaWVkTmFtZVtdIG5hbWVzID0gZGV0ZXJtaW5lTWV0YUFuZFF1YWxpZmllZE5hbWUoY29tcG9uZW50KTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiBjb21wb25lbnQgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotCQl7Ci0JCQlJUGF0aCBmdWxsUGF0aCA9IGZpbGUuZ2V0RnVsbFBhdGgoKTsKLQkJCVByb2plY3RTZWFyY2hTY29wZSBzY29wZSA9IG5ldyBQcm9qZWN0U2VhcmNoU2NvcGUoZnVsbFBhdGgpOwotCQkJU3RyaW5nIHNjb3BlRGVzY3JpcHRpb24gPSAiUHJvamVjdCI7Ci0JCQlYU0RTZWFyY2hRdWVyeSBzZWFyY2hRdWVyeSA9IG5ldyBYU0RTZWFyY2hRdWVyeShwYXR0ZXJuLCBmaWxlLCBuYW1lc1sxXSwgCi0JCQkJCW5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7Ci0JCQlOZXdTZWFyY2hVSS5hY3RpdmF0ZVNlYXJjaFJlc3VsdFZpZXcoKTsKLQkJCU5ld1NlYXJjaFVJLnJ1blF1ZXJ5SW5CYWNrZ3JvdW5kKHNlYXJjaFF1ZXJ5KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5M2Q3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnNlYXJjaC51aS5OZXdTZWFyY2hVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2luZ1NldDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVdvcmtpbmdTZXRTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5Xb3JraW5nU2V0U2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5YU0RTZWFyY2hRdWVyeTsKLQotcHVibGljIGNsYXNzIFdTRExGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbiBleHRlbmRzIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbnsKLQkKLQlwdWJsaWMgV1NETEZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikgewotCQlzdXBlcihlZGl0b3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKXsKLQkJSVdvcmtpbmdTZXRbXSB3b3JraW5nU2V0cyA9IHF1ZXJ5V29ya2luZ1NldHMoKTsKLQkJaWYgKCB3b3JraW5nU2V0cyA9PSBudWxsIHx8IHdvcmtpbmdTZXRzLmxlbmd0aCA9PSAwKQotCQkJLy8gVGhlIHVzZXIgY2hvb3NlcyBub3RoaW5nLCBubyBwb2ludCB0byBjb250aW51ZS4KLQkJCXJldHVybjsKLQkJU3RyaW5nIHBhdHRlcm4gPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JCVdTRExCYXNlQWRhcHRlciBjb21wb25lbnQgPSBnZXRXU0RMTmFtZWRDb21wb25lbnQoKTsKLQkJSUZpbGUgZmlsZSA9IGdldEN1cnJlbnRGaWxlKCk7Ci0JCVF1YWxpZmllZE5hbWVbXSBuYW1lcyA9IGRldGVybWluZU1ldGFBbmRRdWFsaWZpZWROYW1lKGNvbXBvbmVudCk7Ci0JCWlmICggZmlsZSAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsKXsKLQkJCS8vIENyZWF0ZSBhIHNjb3BlIGZyb20gdGhlIHNlbGVjdGVkIHdvcmtpbmcgc2V0cwotCQkJV29ya2luZ1NldFNlYXJjaFNjb3BlIHNjb3BlID0gbmV3IFdvcmtpbmdTZXRTZWFyY2hTY29wZSgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB3b3JraW5nU2V0cy5sZW5ndGg7IGkrKyl7Ci0JCQkJSUFkYXB0YWJsZVtdIGVsZW1lbnRzID0gd29ya2luZ1NldHNbaV0uZ2V0RWxlbWVudHMoKTsKLQkJCQlzY29wZS5hZGRBV29ya2luZ1NldFRvU2NvcGUoZWxlbWVudHMpOwotCQkJfQotCi0JCQlTdHJpbmcgc2NvcGVEZXNjcmlwdGlvbiA9ICJXb3JraW5nIFNldCI7ICAgIAotCQkJWFNEU2VhcmNoUXVlcnkgc2VhcmNoUXVlcnkgPSAKLQkJCQluZXcgWFNEU2VhcmNoUXVlcnkocGF0dGVybiwgZmlsZSwgbmFtZXNbMV0sIG5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7ICAgIAotCQkJTmV3U2VhcmNoVUkuYWN0aXZhdGVTZWFyY2hSZXN1bHRWaWV3KCk7Ci0JCQlOZXdTZWFyY2hVSS5ydW5RdWVyeUluQmFja2dyb3VuZChzZWFyY2hRdWVyeSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyBhIGRpYWxvZyBhc2tpbmcgdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSB3b3JraW5nIFNldHMgaGUgd2FudHMKLQkgKiB0byBkbyB0aGUgc2VhcmNoIG9uCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtpbmdTZXRbXSBxdWVyeVdvcmtpbmdTZXRzKCl7Ci0JCVNoZWxsIHNoZWxsPSBYU0RFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKTsKLQkJaWYgKHNoZWxsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJSVdvcmtpbmdTZXRTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0KLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0V29ya2luZ1NldE1hbmFnZXIoKS5jcmVhdGVXb3JraW5nU2V0U2VsZWN0aW9uRGlhbG9nKHNoZWxsLCB0cnVlKTsKLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlJV29ya2luZ1NldFtdIHdvcmtpbmdTZXRzPSBkaWFsb2cuZ2V0U2VsZWN0aW9uKCk7Ci0JCQlpZiAod29ya2luZ1NldHMubGVuZ3RoID4gMCkKLQkJCQlyZXR1cm4gd29ya2luZ1NldHM7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExSZWZlcmVuY2VzU2VhcmNoR3JvdXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMUmVmZXJlbmNlc1NlYXJjaEdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZjZmZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExSZWZlcmVuY2VzU2VhcmNoR3JvdXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLlNlYXJjaE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuUmVmZXJlbmNlc1NlYXJjaEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cCBleHRlbmRzIFJlZmVyZW5jZXNTZWFyY2hHcm91cCAgewotICAgIC8qKgotICAgICAqIE5vdGU6IFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBDbGllbnRzIHNob3VsZCBub3QgY2FsbCB0aGlzIGNvbnN0cnVjdG9yLgotICAgICAqIEBwYXJhbSBlZGl0b3IKLSAgICAgKi8KLSAgICBwdWJsaWMgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cChJRWRpdG9yUGFydCBlZGl0b3IpIHsKLSAgICAJc3VwZXIoZWRpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLS8vICAgICAgZkdyb3VwSWQ9IElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLkdST1VQX0ZJTkQ7Ci0gICAgCQotICAgIAlmRmluZFJlZmVyZW5jZXNBY3Rpb249IG5ldyBXU0RMRmluZFJlZmVyZW5jZXNBY3Rpb24oZkVkaXRvcik7Ci0gICAgICAgIGZGaW5kUmVmZXJlbmNlc0FjdGlvbi5zZXRUZXh0KFNlYXJjaE1lc3NhZ2VzLlNlYXJjaF9GaW5kRGVjbGFyYXRpb25BY3Rpb25fbGFiZWwpOwotICAgICAgICBmRmluZFJlZmVyZW5jZXNBY3Rpb24uc2V0QWN0aW9uRGVmaW5pdGlvbklkKCJTRUFSQ0hfUkVGRVJFTkNFU19JTl9XT1JLU1BBQ0UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvL2ZFZGl0b3Iuc2V0QWN0aW9uKCJTZWFyY2hSZWZlcmVuY2VzSW5Xb3Jrc3BhY2UiLCBmRmluZFJlZmVyZW5jZXNBY3Rpb24pOyAvLyROT04tTkxTLTEkCi0KLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uPSBuZXcgV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uKGZFZGl0b3IpOwotICAgICAgICBmRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uc2V0VGV4dChTZWFyY2hNZXNzYWdlcy5TZWFyY2hfRmluZERlY2xhcmF0aW9uc0luUHJvamVjdEFjdGlvbl9sYWJlbCk7ICAgICAgICAKLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uLnNldEFjdGlvbkRlZmluaXRpb25JZCgiU0VBUkNIX1JFRkVSRU5DRVNfSU5fUFJPSkVDVCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIC8vZkVkaXRvci5zZXRBY3Rpb24oIlNlYXJjaFJlZmVyZW5jZXNJblByb2plY3QiLCBmRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24pOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgICAgIGZGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbj0gbmV3IFdTRExGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbihmRWRpdG9yKTsKLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uLnNldFRleHQoU2VhcmNoTWVzc2FnZXMuU2VhcmNoX0ZpbmREZWNsYXJhdGlvbnNJbldvcmtpbmdTZXRBY3Rpb25fbGFiZWwpOyAgICAgICAgIAotICAgICAgICBmRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uc2V0QWN0aW9uRGVmaW5pdGlvbklkKCIuU0VBUkNIX1JFRkVSRU5DRVNfSU5fV09SS0lOR19TRVQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvL2ZFZGl0b3Iuc2V0QWN0aW9uKCJTZWFyY2hSZWZlcmVuY2VzSW5Xb3JraW5nU2V0IiwgZkZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMU2VhcmNoUmVmZXJlbmNlc0dyb3VwQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMU2VhcmNoUmVmZXJlbmNlc0dyb3VwQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmYzIwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5hY3Rpb25zLkJhc2VHcm91cEFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuWFNEU2VhcmNoR3JvdXBTdWJNZW51OwotCi1wdWJsaWMgY2xhc3MgV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQmFzZUdyb3VwQWN0aW9uRGVsZWdhdGUKLXsKLSAgICBwcm90ZWN0ZWQgdm9pZCBmaWxsTWVudShNZW51IG1lbnUpIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiAoZlNlbGVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdvcmtiZW5jaFBhcnQgIT0gbnVsbCkKLSAgICAgICAgewotCQkgIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlID0gd29ya2JlbmNoUGFydC5nZXRTaXRlKCk7Ci0JCQlpZiAoc2l0ZSA9PSBudWxsKQotCQkJICByZXR1cm47Ci0JCi0JCSAgSUVkaXRvclBhcnQgZWRpdG9yID0gc2l0ZS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgICAgaWYgKCBlZGl0b3IgIT0gbnVsbCApewotICAgICAgICAgICAgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cCByZWZlcmVuY2VzR3JvdXAgPSBuZXcgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cChlZGl0b3IpOwotICAgICAgICAgICAgWFNEU2VhcmNoR3JvdXBTdWJNZW51IHN1Yk1lbnUgPSBuZXcgWFNEU2VhcmNoR3JvdXBTdWJNZW51KHJlZmVyZW5jZXNHcm91cCk7Ci0gICAgICAgICAgICBzdWJNZW51LmZpbGwobWVudSwgLTEpOwotICAgICAgICAgIH0KLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzFjMjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNvYXAuY3VzdG9taXphdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVUlfU1BFQ0lGWV9QQVJUU19ESUFMT0dfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVUlfUEFSVFNfQlVUVE9OOwotCi0Jc3RhdGljIHsKLQkJLy8gbG9hZCBtZXNzYWdlIHZhbHVlcyBmcm9tIGJ1bmRsZSBmaWxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCQkvLyBjYW5ub3QgY3JlYXRlIG5ldyBpbnN0YW5jZQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQTm9kZUVkaXRvclByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvU09BUE5vZGVFZGl0b3JQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY2OTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQTm9kZUVkaXRvclByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTm9kZUFzc29jaWF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uY3VzdG9tLkRpYWxvZ05vZGVFZGl0b3JDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5jdXN0b20uTm9kZUVkaXRvckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLmN1c3RvbS5Ob2RlRWRpdG9yUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgYSBOb2RlRWRpdG9yUHJvdmlkZXIgY2FuIHV0aWxpemUgdGhlIFdTREwgbW9kZWwgaWYgcmVxdWlyZWQKLSAqIChhbmQgaXMgbm90IGxpbWl0ZWQgdG8gdGhlIERPTSBtb2RlbCkuICBJdCdzIGhvcGUgdGhhdCBwb3RlbnRpYWwgYWRvcHRlcnMgY2FuIHByb3ZpZGUgZmVlZGJhY2sgYW5kIG9wZW4KLSAqIGJ1Z3Mgd2hlcmUgdGhleSBmaW5kIHN1cHBvcnQgaXMgbGFja2luZyBvciBpbmNvbnZlbmllbnQuIAotICovCi1wdWJsaWMgY2xhc3MgU09BUE5vZGVFZGl0b3JQcm92aWRlciBleHRlbmRzIE5vZGVFZGl0b3JQcm92aWRlcgotewotICBwdWJsaWMgTm9kZUVkaXRvckNvbmZpZ3VyYXRpb24gZ2V0Tm9kZUVkaXRvckNvbmZpZ3VyYXRpb24oU3RyaW5nIHBhcmVudE5hbWUsIFN0cmluZyBub2RlTmFtZSkKLSAgewotICAgIC8vIFRPRE8gKGNzKSB0aGlzIGV4dGVuc2lvbiBpcyBvbmx5IGRlc2lnbmVkIHRvIHdvcmsgd2hlbiB1c2VkIHZpYSB0aGUgV1NETCBFZGl0b3IgY29udGV4dC4KLSAgICAvLyBSZXVzZSBmcm9tIG90aGVyIGNvbnRleHQgaXMgcG9zc2libGUgdG9vIGlmIHRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGFwcHJvcHJpYXRlICdnZXRBZGFwdGVyJyBiZWhhdmlvdXIuCi0gICAgLy8gV2UgbmVlZCB0byByZXZpc2l0IHRoaXMgYW5kIGdldCBtb3JlIGZlZWRiYWNrIGZyb20gYWRvcHRlcnMgdG8gc2VlIGlmIGRpZmZlcmVudCBhcHByb2FjaCBpcyByZXF1aXJlZCAKLSAgICAvLyBpbiBvcmRlciB0byBvYnRhaW4gYSBXU0RMIG1vZGVsLgotLy8gICAgLwotICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgIGZpbmFsIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWVkaXRvci5nZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpOwotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBpZiAocGFyZW50TmFtZS5lcXVhbHMoImJvZHkiKSAmJiBub2RlTmFtZS5lcXVhbHMoInBhcnRzIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgewotICAgICAgICAvLyBnZWUuLi4gdGhpcyBjYXNlIHNvdW5kcyBzb3J0YSBtb3JiaWQgZWg/Ci0gICAgICAgIC8vCi0gICAgICAgIHJldHVybiBuZXcgRGlhbG9nTm9kZUVkaXRvckNvbmZpZ3VyYXRpb24oKQotICAgICAgICB7ICAgICAgICAgICAgICAgIAotICAgICAgICAgIHB1YmxpYyB2b2lkIGludm9rZURpYWxvZygpCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICAgIHsgICAgICAgICAgIAotICAgICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudClnZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAvLyBUT0RPIChjcykgSSB0aGluayB3ZSBzaG91bGQgcHVzaCB0aGlzIGZ1bmN0aW9uIGRvd24gdG8gdGhlIFdTREwgbW9kZWwgKGFsYSBYU0QgbW9kZWwpCi0gICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgbm9kZUFzc29jaWF0aW9uTWFuYWdlciA9IG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgIE9iamVjdCBvID0gbm9kZUFzc29jaWF0aW9uTWFuYWdlci5nZXRNb2RlbE9iamVjdEZvck5vZGUoZGVmaW5pdGlvbiwgZWxlbWVudCk7Ci0gICAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAgIFNPQVBTZWxlY3RQYXJ0c0RpYWxvZyBkaWFsb2cgPSBuZXcgU09BUFNlbGVjdFBhcnRzRGlhbG9nKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCksIGRlZmluaXRpb24sIChTT0FQQm9keSlvKTsKLSAgICAgICAgICAgICAgICBkaWFsb2cuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZGlhbG9nLmdldFNoZWxsKCkuc2V0VGV4dChNZXNzYWdlcy5VSV9TUEVDSUZZX1BBUlRTX0RJQUxPR19USVRMRSk7ICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgaW50IHJjID0gZGlhbG9nLm9wZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAocmMgPT0gRGlhbG9nLk9LKQotICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgICBQYXJ0W10gcGFydHMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRQYXJ0cygpOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSBwYXJ0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gcGFydC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICIgIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIC8vIFRPRE8gKGNzKSB3ZSBuZWVkIHRvIHByb3ZpZGUgJ2NvbW1hbmQnIHN1cHBvcnQgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIHVuZG8gcHJvcGVybHkKLSAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInBhcnRzIiwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgcHVibGljIFN0cmluZyBnZXRCdXRvblRleHQoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNZXNzYWdlcy5VSV9QQVJUU19CVVRUT047IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgCi0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL1NPQVBTZWxlY3RQYXJ0c0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL1NPQVBTZWxlY3RQYXJ0c0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWRlMGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQU2VsZWN0UGFydHNEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNoZWNrYm94VHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLQotcHVibGljIGNsYXNzIFNPQVBTZWxlY3RQYXJ0c0RpYWxvZyBleHRlbmRzIERpYWxvZwoteyAgCi0gIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgU09BUEJvZHkgYm9keTsKLSAgQ2hlY2tib3hUcmVlVmlld2VyIGNoZWNrTGlzdDsKLSAgUGFydFtdIHNlbGVjdGVkUGFydHMgPSB7fTsKLSAgCi0gIHB1YmxpYyBTT0FQU2VsZWN0UGFydHNEaWFsb2coU2hlbGwgcGFyZW50U2hlbGwsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgU09BUEJvZHkgYm9keSkKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsgIAotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBjaGVja0xpc3QgPSBuZXcgQ2hlY2tib3hUcmVlVmlld2VyKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIEdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgZ3JpZERhdGEuaGVpZ2h0SGludCA9IDEwMDsKLSAgICBncmlkRGF0YS53aWR0aEhpbnQgPSAyMDA7Ci0gICAgY2hlY2tMaXN0LmdldENvbnRyb2woKS5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKLSAgICBjaGVja0xpc3Quc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJbnRlcm5hbFRyZWVDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgY2hlY2tMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IEludGVybmFsTGFiZWxQcm92aWRlcigpKTsKLSAgICBjaGVja0xpc3Quc2V0SW5wdXQoIiIpOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgTGlzdCBsaXN0ID0gYm9keS5nZXRQYXJ0cygpOwotICAgIGNoZWNrTGlzdC5zZXRDaGVja2VkRWxlbWVudHMobGlzdC50b0FycmF5KCkpOyAgICAgCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkKLSAgewotICAgIE9iamVjdFtdIGNoZWNrZWQgPSBjaGVja0xpc3QuZ2V0Q2hlY2tlZEVsZW1lbnRzKCk7Ci0gICAgc2VsZWN0ZWRQYXJ0cyA9IG5ldyBQYXJ0W2NoZWNrZWQubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoZWNrZWQubGVuZ3RoOyBpKyspCi0gICAgeyAgCi0gICAgICBzZWxlY3RlZFBhcnRzW2ldID0gKFBhcnQpY2hlY2tlZFtpXTsKLSAgICB9IAotICAgIHN1cGVyLm9rUHJlc3NlZCgpOyAgICAKLSAgfQotICAKLSAKLSAgY2xhc3MgSW50ZXJuYWxMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWVsZW1lbnQ7Ci0gICAgICByZXR1cm4gcGFydC5nZXROYW1lKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wYXJ0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgY2xhc3MgSW50ZXJuYWxUcmVlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIKLSAgeyAgCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgeyAgICAKLSAgICAgIEVPYmplY3QgY29udGFpbmVyID0gYm9keS5lQ29udGFpbmVyKCk7Ci0gICAgICBNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSBudWxsOwotICAgICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZUlucHV0KChCaW5kaW5nSW5wdXQpY29udGFpbmVyKTsgCi0gICAgICB9IAotICAgICAgZWxzZSBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZU91dHB1dCgoQmluZGluZ091dHB1dCljb250YWluZXIpOyAgICAgICAgIAotICAgICAgfSAgCi0gICAgICBpZiAobWVzc2FnZVJlZmVyZW5jZSAhPSBudWxsICYmIG1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gbWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLnRvQXJyYXkoKTsKLSAgICAgIH0gIAotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QudG9BcnJheSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVC50b0FycmF5KCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsgICAgICAKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0gICAgewotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBQYXJ0W10gZ2V0U2VsZWN0ZWRQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRQYXJ0czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzZmE4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVVJX1NQRUNJRllfUEFSVFNfRElBTE9HX1RJVExFPVNwZWNpZnkgUGFydHMKLVVJX1BBUlRTX0JVVFRPTj0uLi4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlODdhZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkgZXhjbHVkaW5nPSJ3c2RsdmFsaWRhdGV1aS98d3NkbHZhbGlkYXRlLyIga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC9kZWxlZ2F0ZXMvRGVsZWdhdGluZ1ZhbGlkYXRvciIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MDMyZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGx2YWxpZGF0ZS5qYXIKLXdzZGx2YWxpZGF0ZXVpLmphcgotd3NkbHZhbGlkYXRlc3JjLnppcAotd3NkbHZhbGlkYXRldWlzcmMuemlwCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTBjMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiZmNhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6MzA6MjkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1Y2VjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6MzA6MjkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTkwNTcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb247IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4zMDEucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuVmFsaWRhdGVXU0RMUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZzt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWU7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLmFudDtidW5kbGUtdmVyc2lvbj0iWzEuNi41LDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5hcGFjaGUueGVyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMi44LjAsMy4wLjApIjt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYjI0YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZXhzZC8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9leHNkL2V4dHZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2QvZXh0dmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZThkZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2QvZXh0dmFsaWRhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgaWQ9ImV4dHZhbGlkYXRvciIgbmFtZT0iV1NETCBFeHRlbnNpb24gVmFsaWRhdG9yIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBXU0RMIEV4dGVuc2lvbiBWYWxpZGF0b3IgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIGNvbnRyaWJ1dGUgYSB2YWxpZGF0b3IgdGhhdCBwcm92aWRlcyBjdXN0b20gdmFsaWRhdGlvbiBsb2dpYyBmb3IgV1NETCAxLjEgZG9jdW1lbnRzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJleHR2YWxpZGF0b3IiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHR2YWxpZGF0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JV1NETFZhbGlkYXRvciIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgV1NETCBuYW1lc3BhY2UgZm9yIHdoaWNoIHRoaXMgdmFsaWRhdG9yIHNob3VsZCBydW4uIEN1cnJlbnRseSB0aGUgb25seSBhY2NlcHRlZCB2YWx1ZSBpcyBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFdTREwgRXh0ZW5zaW9uIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgaWQ9JnF1b3Q7d3NkbFdTSVZhbGlkYXRvciZxdW90OwotICAgICAgICAgbmFtZT0mcXVvdDtXU0RMIFdTLUkgVmFsaWRhdG9yJnF1b3Q7Ci0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmV4dHZhbGlkYXRvciZxdW90OyZndDsKLSAgICAgICZsdDtleHR2YWxpZGF0b3IKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyZxdW90OwotICAgICAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsLldTRExWYWxpZGF0b3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7L2V4dHZhbGlkYXRvciZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7Y29kZSZndDsKLW9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwudmFsaWRhdGUud3NkbC5XU0RMVmFsaWRhdG9yCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyBXUy1JIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBuYW1lc3BhY2UgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8uCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9leHNkL3dzZGwxMXZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YjYwZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgaWQ9IndzZGwxMXZhbGlkYXRvciIgbmFtZT0iV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gY29udHJpYnV0ZSBhIHZhbGlkYXRvciBmb3IgYSBzcGVjaWZpYyBuYW1lc3BhY2UgdG8gV1NETCAxLjEgdmFsaWRhdGlvbi4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0idmFsaWRhdG9yIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0idmFsaWRhdG9yIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIHZhbGlkYXRvciB3aWxsIHZhbGlkYXRlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi53c2RsMTF2YWxpZGF0b3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7dmFsaWRhdG9yCi0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5odHRwLkhUVFBWYWxpZGF0b3ImcXVvdDsKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvJnF1b3Q7LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtjb2RlJmd0Owotb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cC5IVFRQVmFsZGlhdG9yCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgbmFtZXNwYWNlIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8uCi0mbHQ7Y29kZSZndDsKLW9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWUuTUlNRVZhbGRpYXRvcgotJmx0Oy9jb2RlJmd0OwotQ29udHJpYnV0ZXMgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIG5hbWVzcGFjZSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvLgotJmx0O2NvZGUmZ3Q7Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwLlNPQVBWYWxkaWF0b3IKLSZsdDsvY29kZSZndDsKLUNvbnRyaWJ1dGVzIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBuYW1lc3BhY2UgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2xpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzkyZjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSouamFyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NWEzOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24KLSEtLSBUb29sIE5hbWUKLQotX1BMVUdJTl9OQU1FICAgICAgID0gV1NETCBWYWxpZGF0b3IKLV9QUk9WSURFUl9OQU1FICAgICA9IEVjbGlwc2Uub3JnCi0KLV9VSV9XU0RMNEpfVkFMSURBVE9SX0RFTEVHQVRFID0gV1NETDRKLWJhc2VkIFdTREwgVmFsaWRhdG9yCi1fVUlfV1NETF9WQUxJREFUT1IgPSBXU0RMIFZhbGlkYXRvcgotX1VJX1dTRExfVkFMSURBVE9SX01BUktFUiA9IFdTREwgUHJvYmxlbQotCi0hLS0gRXh0ZW5zaW9uIHBvaW50cwotX1dTRExfRVhURU5TSU9OX1ZBTElEQVRPUl9OQU1FICAgPSBXU0RMIEV4dGVuc2lvbiBWYWxpZGF0b3IKLV9XU0RMMTFfVkFMSURBVE9SX05BTUUgPSBXU0RMIDEuMSBWYWxpZGF0b3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTExNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZXh0dmFsaWRhdG9yIiBuYW1lPSIlX1dTRExfRVhURU5TSU9OX1ZBTElEQVRPUl9OQU1FIiBzY2hlbWE9ImV4c2QvZXh0dmFsaWRhdG9yLmV4c2QiLz4KLSAgIAotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NkbDExdmFsaWRhdG9yIiBuYW1lPSIlV1NETDExX1ZBTElEQVRPUl9OQU1FIiBzY2hlbWE9ImV4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QiLz4KLSAgIAotCTxleHRlbnNpb24KLSAgICAJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvckRlbGVnYXRlcyI+Ci0gICAgICAgIDxkZWxlZ2F0ZQotICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvciIKLSAgICAgICAgICAgICAgbmFtZT0iJV9VSV9XU0RMNEpfVkFMSURBVE9SX0RFTEVHQVRFIgotICAgICAgICAgICAgICB0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMRGVsZWdhdGluZ1ZhbGlkYXRvciIvPgotICAgICA8L2V4dGVuc2lvbj4JCi0KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPCEtLSBBbiBleHRlbnNpb24gZm9yIGFkZGluZyB0aGUgV1NETCB2YWxpZGF0b3IgdG8gdGhlICAgICAgLS0+Ci0gICA8IS0tIHZhbGlkYXRpb24gZnJhbWV3b3JrLiAJCQkJCQkgICAgICAgICAgIC0tPgkJCQkJCQkJCQkgICAtLT4KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPCEtLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzZGxWYWxpZGF0b3IiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTRExfVkFMSURBVE9SIgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvciI+Ci0gICAgICA8dmFsaWRhdG9yPgotICAgICAgICAgPGZpbHRlcgotICAgICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZT0iZmFsc2UiCi0gICAgICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiPgotICAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgICA8aGVscGVyCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5IZWxwZXIiPgotICAgICAgICAgPC9oZWxwZXI+Ci0gICAgICAgICA8cnVuCi0gICAgICAgICAgICAgICBhc3luYz0idHJ1ZSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETERlbGVnYXRpbmdWYWxpZGF0b3IiCi0gICAgICAgICAgICAgICBlbmFibGVkPSJ0cnVlIgotICAgICAgICAgICAgICAgZnVsbEJ1aWxkPSJ0cnVlIgotICAgICAgICAgICAgICAgaW5jcmVtZW50YWw9InRydWUiPgotICAgICAgICAgPC9ydW4+Ci0gICAgICAgICA8bWFya2VySWQgbWFya2VySWRWYWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi52YWxpZGF0aW9uTWFya2VyIi8+Ci0gICAgICA8L3ZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgLS0+Ci0gICAKLSAgIDxleHRlbnNpb24gaWQ9IndzZGwiIG5hbWU9IiVfVUlfV1NETF9WQUxJREFUT1IiIHBvaW50PSJvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0b3JWMiI+Ci0gICAgICA8dmFsaWRhdG9yCi0gICAgICAgICAgICBidWlsZD0idHJ1ZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETERlbGVnYXRpbmdWYWxpZGF0b3IiCi0gICAgICAgICAgICBtYW51YWw9InRydWUiCi0gICAgICAgICAgICBzb3VyY2VpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCIKLSAgICAgICAgICAgIHZlcnNpb249IjIiCi0gICAgICAgICAgICBtYXJrZXJJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi52YWxpZGF0aW9uTWFya2VyIj4KLSAgICAgICAgIDxpbmNsdWRlPgotICAgICAgICAgICAgPHJ1bGVzPgotICAgICAgICAgICAgICAgPGZpbGVleHQgY2FzZVNlbnNpdGl2ZT0iZmFsc2UiIGV4dD0id3NkbCI+PC9maWxlZXh0PgotICAgICAgICAgICAgPC9ydWxlcz4KLSAgICAgICAgIDwvaW5jbHVkZT4KLSAgICAgIDwvdmFsaWRhdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ2YWxpZGF0aW9uTWFya2VyIgotICAgICAgICAgbmFtZT0iJV9VSV9XU0RMX1ZBTElEQVRPUl9NQVJLRVIiCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubWFya2VycyI+Ci0gICAgICA8c3VwZXIgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJvYmxlbW1hcmtlciIvPgotICAgICAgPHBlcnNpc3RlbnQgdmFsdWU9InRydWUiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdjYTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLQotCi0KLS8qKgotICogQSBkZWxlZ2F0ZSBob2xkcyBhIHZhbGlkYXRvcidzIGluZm9ybWF0aW9uIGFuZCBjYW4gaW5zdGFudGlhdGUgaXQKLSAqIHdoZW4gcmVxdWVzdGVkIHRvLgotICovCi1wdWJsaWMgY2xhc3MgQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZXh0ZW5kcyBXU0RMVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGRlbGVnYXRlIGZvciBhIHZhbGlkYXRvciBieSBpdHMgY2xhc3MgbmFtZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0b3JDbGFzc25hbWUgVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvciBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZShTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lKQotICB7Ci0gICAgdGhpcy52YWxpZGF0b3JDbGFzc25hbWUgPSB2YWxpZGF0b3JDbGFzc25hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYSBjbGFzcyBsb2FkZXIgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gY2xhc3NMb2FkZXIgVGhlIGNsYXNzIGxvYWRlciB0byB1c2UgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKQotICB7Ci0gICAgdGhpcyh2YWxpZGF0b3JDbGFzc25hbWUpOwotICAgIHRoaXMuY2xhc3NMb2FkZXIgPSBjbGFzc0xvYWRlcjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0b3JEZWxlZ2F0ZSNsb2FkVmFsaWRhdG9yKCkKLSAgICovCi0gIHByb3RlY3RlZCBJV1NETFZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCkKLSAgewotCUlXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0gICAgaWYoY2xhc3NMb2FkZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQ2xhc3MgdmFsaWRhdG9yQ2xhc3MgPQotICAgICAgY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyh2YWxpZGF0b3JDbGFzc25hbWUpIDogQ2xhc3MuZm9yTmFtZSh2YWxpZGF0b3JDbGFzc25hbWUpOwotCi0gICAgICB2YWxpZGF0b3IgPSAoSVdTRExWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0gICAgY2F0Y2goVGhyb3dhYmxlIHQpCi0gICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yRGVsZWdhdGUjZ2V0VmFsaWRhdG9yTmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRvck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHZhbGlkYXRvckNsYXNzbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjYzZjJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi0vKioKLSAqIFNldCBjb25zdGFudHMgdGhhdCB0aGUgdmFsaWRhdG9yIG1ha2VzIHVzZSBvZi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb25zdGFudHMKLXsKLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgcHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9WQUxJREFUT1JfUFJPUEVSVElFU19GSUxFID0gInZhbGlkYXRld3NkbCI7Ci0KLSAgLyoqCi0gICAqIFRoZSBTT0FQIDEuMSBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19TT0FQMTEgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI7Ci0KLSAgLyoqCi0gICAqIFRoZSBIVFRQIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX0hUVFAgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI7Ci0KLSAgLyoqCi0gICAqIFRoZSBNSU1FIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX01JTUUgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyI7Ci0gIAotICAvKioKLSAgICogVGhlIFdTREwgc2NoZW1hIGNhY2hlIGF0dHJpYnV0ZSBhbGxvd3MgYW4gWE1MR3JhbW1hclBvb2wgb2JqZWN0IHRvIGJlIHNldCBmb3IgdXNlIGluIAotICAgKiBpbmxpbmUgc2NoZW1hIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBYTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3NkbC9zY2hlbWFjYWNoZSI7Ci0gIAotICAvKioKLSAgICogVGhlIFdTREwgc2NoZW1hIGNhY2hlIGF0dHJpYnV0ZSBhbGxvd3MgYW4gWE1MR3JhbW1hclBvb2wgb2JqZWN0IHRvIGJlIHNldCBmb3IgdXNlIGluIAotICAgKiBYTUwgY29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhNTF9DQUNIRV9BVFRSSUJVVEUgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c2RsL3htbGNhY2hlIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db250cm9sbGVyVmFsaWRhdGlvbkluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db250cm9sbGVyVmFsaWRhdGlvbkluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzMGE4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvQ29udHJvbGxlclZhbGlkYXRpb25JbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgdGhlIHZhbGlkYXRpb24gaW5mbyB0aGF0IGFsbG93cyBmb3Igc3RhcnRpbmcgYW5kCi0gKiBjb21wbGV0aW5nIFdTREwgYW5kIFdTLUkgdmFsaWRhdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb250cm9sbGVyVmFsaWRhdGlvbkluZm8gZXh0ZW5kcyBJVmFsaWRhdGlvbkluZm8KLXsKLSAgCi0gIC8qKgotICAgKiBQZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc3RlcHMgdG8gY29tcGxldGUgV1NETCB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgY29tcGxldGVXU0RMVmFsaWRhdGlvbigpOwotICAKLS8vICAvKioKLS8vICAgKiBQZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc3RlcHMgdG8gY29tcGxldGUgV1MtSSBXU0RMIHZhbGlkYXRpb24uCi0vLyAgICovCi0vLyAgcHVibGljIHZvaWQgY29tcGxldGVXU0lWYWxpZGF0aW9uKCk7Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjk0ZTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotCi0vKioKLSAqIEFuIGludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAqIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBtZWFudCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElWYWxpZGF0aW9uSW5mbyBleHRlbmRzIElWYWxpZGF0aW9uUmVwb3J0Ci17Ci0gIAotICAvKioKLSAgICogQWRkIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgZmlsZS4gKFVzZXMgdGhlIFVSSSBmcm9tIHRoaXMgdmFsaWRhdGlvbiBpbmZvIG9iamVjdC4pCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBmb3IgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIGZpbGUuCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pOwotICAKLSAgLyoqCi0gICAqIEFkZCBhbiBlcnJvciBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgZm9yIHRoZSBlcnJvci4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIEFkZCBhIHdhcm5pbmcgbWVzc2FnZSBmb3IgdGhpcyBmaWxlLiAoVXNlcyB0aGUgVVJJIGZyb20gdGhpcyB2YWxpZGF0aW9uIGluZm8gb2JqZWN0LikKLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGZvciB0aGUgd2FybmluZy4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgd2FybmluZyBpbiB0aGUgZmlsZS4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uKTsKLSAgCi0gIC8qKgotICAgKiBBZGQgYSB3YXJuaW5nIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBmb3IgdGhlIHdhcm5pbmcuCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSB3YXJuaW5nIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSB1cmkgVGhlIFVSSSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBlcnJvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciBpbiB1c2UgZm9yIHRoaXMgdmFsaWRhdGlvbi4gVGhlIFVSSSByZXNvbHZlcgotICAgKiByZXR1cm5lZCBpcyBhY3R1YWxseSBhIFVSSSByZXNvbHZlciBoYW5kbGVyIHRoYXQgd2lsbCAKLSAgICogaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcmVnaXN0ZXJlZCBVUkkgcmVzb2x2ZXJzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIGhhbmRsZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiBJZiB0aGUgYXR0cmlidXRlCi0gICAqIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCByZXR1cm4gbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgcmVxdWVzdGVkLgotICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUgdmFsdWUgaWYgdGhlIGF0dHJpYnV0ZSBoYXMgYmVlbiByZWdpc3RlcmVkLCBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKFN0cmluZyBuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbk1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbk1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmY2M0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25NZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhIHZhbGlkYXRpb24gbWVzc2FnZS4gQSB2YWxpZGF0aW9uIG1lc3NhZ2UgY29udGFpbnMgaW5mb3JtYXRpb24KLSAqIGZvciB0aGUgbWVzc2FnZSwgaXRzIHNldmVyaXR5IGFuZCB3aGVyZSBpdCdzIGxvY2F0ZWQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVZhbGlkYXRpb25NZXNzYWdlCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBFUlJPUl9NRVNTQUdFX01BUF9RVUFMSUZJRURfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKCJvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlIiwgImVycm9yTWVzc2FnZU1hcCIpOwotICAvKioKLSAgICogU2V2ZXJpdHkgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVZfRVJST1IgPSAwOwotICAvKioKLSAgICogU2V2ZXJpdHkgd2FybmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFVl9XQVJOSU5HID0gMTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBVUkkgZm9yIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSBmb3IgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIG1lc3NhZ2UgZm9yIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbWVzc2FnZSBmb3IgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIHNldmVyaXR5IG9mIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2V2ZXJpdHkgb2YgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFNldmVyaXR5KCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRoZSBsaW5lIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaW5lIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldExpbmUoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGNvbHVtbiB3aGVyZSB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29sdW1uIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbGlzdCBvZiBuZXN0ZWQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmVzdGVkIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXROZXN0ZWRNZXNzYWdlcygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uUmVwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25SZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3Mjk5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhIFdTREwgdmFsaWRhdGlvbiByZXBvcnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVZhbGlkYXRpb25SZXBvcnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFVSSSBmb3IgdGhlIGZpbGUgdGhlIHJlcG9ydCByZWZlcnMgdG8uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgZm9yIHRoZSBmaWxlIHRoZSByZXBvcnQgcmVmZXJzIHRvLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBmaWxlIGlzIHZhbGlkIGFjY29yZGluZyB0byB0aGUgV1NETCBzcGVjaWZpY2F0aW9uLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIFdTREwgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETFZhbGlkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICogCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyBJVmFsaWRhdGlvbk1lc3NhZ2VbXSBnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGVycm9ycywgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGFyZSBlcnJvcnMsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0Vycm9ycygpOwotICAKLSAgcHVibGljIEhhc2hNYXAgZ2V0TmVzdGVkTWVzc2FnZXMoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lXU0RMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVdTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5MDJlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVdTRExWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5leGNlcHRpb24uVmFsaWRhdGVXU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgYSBXU0RMIHZhbGlkYXRvci4gVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBhIHRvcCBsZXZlbCB2YWxpZGF0b3IgCi0gKiBjb21wb25lbnQgc3VjaCBhcyBhIFdTREwgMS4xIHZhbGlkYXRvciwgV1NETCAxLjIgdmFsaWRhdG9yIG9yIFdTLUkgQmFzaWMgUHJvZmlsZSB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVdTRExWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAqIAotICAgKiBAcGFyYW0gZG9tTW9kZWwgQSBET00gbW9kZWwgb2YgdGhlIGZpbGUgdG8gYmUgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgaW5mb3JtYXRpb24gZm9yIHRoZSB2YWxpZGF0aW9uIHRoYXQgaXMgYmVpbmcgcGVyZm9ybWVkLgotICAgKiBAdGhyb3dzIFZhbGlkYXRlV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoRG9jdW1lbnQgZG9tTW9kZWwsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25Db250cm9sbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwZGZmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuWE1MRXJyb3JSZXBvcnRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRPTVBhcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbi5WYWxpZGF0ZVdTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5EZWZhdWx0WE1MVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuTGluZU51bWJlckRPTVBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0vKioKLSAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnlwb2ludCB0byB0aGUgV1NETCBWYWxpZGF0b3IuIFRoZSBjb250cm9sbGVyIGlzCi0gKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgcmVhZGVyLCB0aGUgWE1MIGNvbmZvcm1hbmNlIGNoZWNrLCB0aGUgV1NETAotICogdmFsaWRhdGlvbiBhbmQgdGhlIFdTLUkgdmFsaWRhdGlvbiBpZiBzZWxlY3RlZC4gVGhlIGNvbnRyb2xsZXIgY29udGFpbnMgYW55Ci0gKiBlcnJvcnMgYW5kIHdhcm5pbmdzIGdlbmVyYXRlZCBhcyB3ZWxsLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbkNvbnRyb2xsZXIKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiA9ICJfRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1dTRExfVkFMSURBVE9SID0gIl9FUlJPUl9OT19XU0RMX1ZBTElEQVRPUiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX1BST0JMRU1fRVhUX1ZBTElEQVRPUiA9ICJfRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfRE9DVU1FTlRfTE9DQVRJT04gPSAiX0VSUk9SX0RPQ1VNRU5UX0xPQ0FUSU9OIjsKLQotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkgdmVyOwotICBwcm90ZWN0ZWQgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VidW5kbGU7Ci0gIHByb3RlY3RlZCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIHByb3RlY3RlZCBVUklSZXNvbHZlciB1cmlSZXNvbHZlcjsKLQotICAvL3Byb3RlY3RlZCBTdHJpbmcgd3NkbE5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBSZXNvdXJjZUJ1bmRsZSBuZWVkcyB0byBiZSBzZXQgc28gaXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgcmVhZGVyLgotICAgKiAKLSAgICogQHBhcmFtIHJiCi0gICAqICAgICAgICAgICAgVGhlIHJlc291cmNlIGJ1bmRsZSBmb3IgdGhpcyB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbkNvbnRyb2xsZXIoUmVzb3VyY2VCdW5kbGUgcmIsIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gICAgcmVzb3VyY2VidW5kbGUgPSByYjsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmVzb3VyY2VidW5kbGUpOwotICAgIHRoaXMudXJpUmVzb2x2ZXIgPSB1cmlSZXNvbHZlcjsKLQotICAgIHZlciA9IFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBmaWxlIHdpdGggdGhlIHN0cmVhbS4gVGhpcyBtZXRob2Qgd2lsbCBydW4gdGhlIGNoZWNrIG9mIHRoZSAKLSAgICogV1NETCBkb2N1bWVudC4gVGhlIHZhbGlkYXRpb24gaXMgYnJva2VuIHVwIGludG8gdGhyZWUgc3RhZ2VzOiBYTUwgY29uZm9ybWFuY2UsCi0gICAqIFdTREwgc2VtYW50aWMsIGFuZCBwb3N0IHZhbGlkYXRpb24uCi0gICAqIAotICogQHBhcmFtIHVyaSAKLSAqIAkJCVRoZSBVUkkgb2YgdGhlIFdTREwgZG9jdW1lbnQgdG8gYmUgdmFsaWRhdGVkLgotICogQHBhcmFtIGlucHV0U3RyZWFtIAotICogCQkJVGhlIGNvbnRlbnRzIG9mIHRoZSBXU0RMIGRvY3VtZW50IHRvIGJlIHZhbGlkYXRlZC4KLSAqIEBwYXJhbSBjb25maWd1cmF0aW9uCi0gKiAJCQlUaGUgV1NETCB2YWxpZGF0aW9uIGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZCB3aGlsZSB2YWxpZGF0aW5nIHRoaXMgVVJJLgotICogQHJldHVybiBBIHZhbGlkYXRpb24gcmVwb3J0IHdpdGggdGhlIHZhbGlkYXRpb24gaW5mbyBmb3IgdGhlIGZpbGUuCi0gKi8KLSAgcHVibGljIElWYWxpZGF0aW9uUmVwb3J0IHZhbGlkYXRlKFN0cmluZyB1cmksIElucHV0U3RyZWFtIGlucHV0U3RyZWFtLCBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgewotICAgIAotICAgIElucHV0U3RyZWFtIHhtbFZhbGlkYXRlU3RyZWFtID0gbnVsbDsKLSAgICBJbnB1dFN0cmVhbSB3c2RsVmFsaWRhdGVTdHJlYW0gPSBudWxsOwotICAgIGlmIChpbnB1dFN0cmVhbSAhPSBudWxsKQotICAgIHsgLy9jb3B5IHRoZSBpbnB1dFN0cmVhbSBzbyB3ZSBjYW4gdXNlIGl0IG1vcmUgdGhhbiBvbmNlCi0gICAgICBTdHJpbmcgY29udGVudHMgPSBjcmVhdGVTdHJpbmdGb3JJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0gICAgICB4bWxWYWxpZGF0ZVN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygpKTsKLSAgICAgIHdzZGxWYWxpZGF0ZVN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygpKTsKLSAgICB9Ci0gICAgCi0gICAgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8gPSBuZXcgVmFsaWRhdGlvbkluZm9JbXBsKHVyaSwgbWVzc2FnZWdlbmVyYXRvcik7Ci0gICAgKChWYWxpZGF0aW9uSW5mb0ltcGwpdmFsSW5mbykuc2V0VVJJUmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotICAgICgoVmFsaWRhdGlvbkluZm9JbXBsKXZhbEluZm8pLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Ci0KLSAgICBpZiAodmFsaWRhdGVYTUwodmFsSW5mbywgeG1sVmFsaWRhdGVTdHJlYW0pKQotICAgIHsKLSAgICAgIERvY3VtZW50IHdzZGxkb2MgPSBnZXREb2N1bWVudCh1cmksIHdzZGxWYWxpZGF0ZVN0cmVhbSwgdmFsSW5mbyk7Ci0KLSAgICAgIGlmKCF2YWxJbmZvLmhhc0Vycm9ycygpKQotICAgICAgewotICAgICAgICBTdHJpbmcgd3NkbG5zID0gZ2V0V1NETE5hbWVzcGFjZSh3c2RsZG9jKTsKLSAgICAgICAgaWYod3NkbG5zICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAodmFsaWRhdGVXU0RMKHdzZGxkb2MsIHZhbEluZm8sIHdzZGxucykpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpb25WYWxpZGF0b3JzKHdzZGxkb2MsIHZhbEluZm8sIHdzZGxucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWxJbmZvOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIGZvciBYTUwgY29uZm9ybWFuY2UuCi0JICogQHBhcmFtIHZhbEluZm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbGlkYXRpb24KLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIHRoZSBpbnB1dFN0cmVhbSB0byB2YWxpZGF0ZQotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgY29uZm9ybWFudCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVYTUwoQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgSVhNTFZhbGlkYXRvciB4bWxWYWxpZGF0b3IgPSBBYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldFhNTFZhbGlkYXRvcigpOwotICAgIHhtbFZhbGlkYXRvci5zZXRVUklSZXNvbHZlcih1cmlSZXNvbHZlcik7Ci0gICAgeG1sVmFsaWRhdG9yLnNldEZpbGUodmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgIGlmICh4bWxWYWxpZGF0b3IgaW5zdGFuY2VvZiBEZWZhdWx0WE1MVmFsaWRhdG9yKQotICAgIHsKLSAgICAgICAgKChEZWZhdWx0WE1MVmFsaWRhdG9yKXhtbFZhbGlkYXRvcikuc2V0SW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOwotICAgICAgICBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IChYTUxHcmFtbWFyUG9vbCl2YWxJbmZvLmdldEF0dHJpYnV0ZShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSk7Ci0gICAgICAgIGlmKGdyYW1tYXJQb29sICE9IG51bGwpCi0gICAgICAgICAgKChEZWZhdWx0WE1MVmFsaWRhdG9yKXhtbFZhbGlkYXRvcikuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wpOwotICAgIH0KLSAgICAvL3htbFZhbGlkYXRvci5zZXRWYWxpZGF0aW9uSW5mbyh2YWxJbmZvKTsKLSAgICB4bWxWYWxpZGF0b3IucnVuKCk7Ci0gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHhtbCBjb25mb3JtYW5jZSBwcm9ibGVtcyBnbyBvbiB0byBjaGVjayB0aGUgd3NkbCBzdHVmZgotICAgIGlmICh4bWxWYWxpZGF0b3IuaGFzRXJyb3JzKCkpCi0gICAgewotICAgICAgLy8gdGVtcCBoYW5kbGluZyBvZiBYTUwgZXJyb3JzIHVudGlsIHZhbGlkYXRvciBpcyB1cGRhdGVkLgotICAgICAgTGlzdCBlcnJvcnMgPSB4bWxWYWxpZGF0b3IuZ2V0RXJyb3JzKCk7Ci0gICAgICBJdGVyYXRvciBlcnJvcnNJdGVyID0gZXJyb3JzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXJyb3JzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElWYWxpZGF0aW9uTWVzc2FnZSB2YWxNZXMgPSAoSVZhbGlkYXRpb25NZXNzYWdlKWVycm9yc0l0ZXIubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZhbE1lcyBpbnN0YW5jZW9mIFZhbGlkYXRpb25NZXNzYWdlSW1wbCAmJiB2YWxJbmZvIGluc3RhbmNlb2YgVmFsaWRhdGlvbkluZm9JbXBsKQotICAgICAgICB7ICAgU3RyaW5nIGVycm9yS2V5ID0gKChWYWxpZGF0aW9uTWVzc2FnZUltcGwpdmFsTWVzKS5nZXRFcnJvcktleSgpOwotICAgICAgICAgICAgT2JqZWN0W10gbWVzc2FnZUFyZ3MgPSAoKFZhbGlkYXRpb25NZXNzYWdlSW1wbCl2YWxNZXMpLmdldE1lc3NhZ2VBcmd1bWVudHMoKTsKLSAgICAgICAgICAgICgoVmFsaWRhdGlvbkluZm9JbXBsKXZhbEluZm8pLmFkZEVycm9yKHZhbE1lcy5nZXRNZXNzYWdlKCksIHZhbE1lcy5nZXRMaW5lKCksIHZhbE1lcy5nZXRDb2x1bW4oKSwgdmFsTWVzLmdldFVSSSgpLCBlcnJvcktleSwgbWVzc2FnZUFyZ3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcih2YWxNZXMuZ2V0TWVzc2FnZSgpLCB2YWxNZXMuZ2V0TGluZSgpLCB2YWxNZXMuZ2V0Q29sdW1uKCksIHZhbE1lcy5nZXRVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy93c2RsTmFtZXNwYWNlID0geG1sVmFsaWRhdG9yLmdldFdTRExOYW1lc3BhY2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIGZvciBYTUwgY29uZm9ybWFuY2UuCi0JICogQHBhcmFtIHZhbEluZm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbGlkYXRpb24KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIGNvbmZvcm1hbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlWE1MKENvbnRyb2xsZXJWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7IHJldHVybiB2YWxpZGF0ZVhNTCh2YWxJbmZvLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBmaWxlLiBTZXQgdGhlIGVycm9ycyBhbmQgd2FybmluZyBhcHByb3ByaWF0ZWx5LgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxkb2MgQSBXM0MgZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBjdXJyZW50IHZhbGlkYXRpb24gaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTmFtZXNwYWNlIFRoZSBXU0RMIG5hbWVzcGFjZSB0byB2YWxpZGF0ZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVdTREwoRG9jdW1lbnQgd3NkbGRvYywgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIFN0cmluZyB3c2RsTmFtZXNwYWNlKQotICB7Ci0gICAgV1NETFZhbGlkYXRvckRlbGVnYXRlW10gd3NkbFZhbHMgPSB2ZXIucXVlcnlWYWxpZGF0b3JSZWdpc3RyeSh3c2RsTmFtZXNwYWNlLCBWYWxpZGF0b3JSZWdpc3RyeS5XU0RMX1ZBTElEQVRPUik7Ci0gICAgaWYgKHdzZGxWYWxzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsVmFscy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETFZhbGlkYXRvckRlbGVnYXRlIHdzZGx2YWxkZWwgPSB3c2RsVmFsc1tpXTsKLSAgICAgICAgSVdTRExWYWxpZGF0b3Igd3NkbFZhbCA9IHdzZGx2YWxkZWwuZ2V0VmFsaWRhdG9yKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGwgdmFsaWRhdG9yIGlzbid0IG51bGwsIHZhbGlkYXRlLgotICAgICAgICBpZiAod3NkbFZhbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbFZhbC52YWxpZGF0ZSh3c2RsZG9jLCB2YWxJbmZvKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFZhbGlkYXRlV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX1BST0JMRU1fV1NETF9WQUxJREFUT1IsIHdzZGxOYW1lc3BhY2UpLCAxLCAxLCB2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSB2YWxpZGF0b3IgaXMgbnVsbCBhbmQgdGhlIG5hbWVzcGFjZSBpc24ndCBjcmVhdGUgYW4gZXJyb3IuCi0gICAgICAgIC8vIElmIHRoZSBuYW1lc3BhY2UgaXMgbnVsbCB0aGUgZmlsZSBpcyBlbXB0eSAoYW5kIHRoZSBYTUwgdmFsaWRhdG9yCi0gICAgICAgIC8vIGhhcyBsZXQgaXQgZ28pCi0gICAgICAgIC8vIHNvIGl0IGlzIHZhbGlkIGJ1dCBkb2VzIG5vdCBuZWVkIHRvIGJlIHZhbGlkYXRlZC4KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19XU0RMX1ZBTElEQVRPUiwgd3NkbE5hbWVzcGFjZSksCi0gICAgICAgICAgICAxLAotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBObyB2YWxpZGF0b3JzIHJlZ2lzdGVyZWQuCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1dTRExfVkFMSURBVE9SLCB3c2RsTmFtZXNwYWNlKSwgMSwgMSwgdmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgIH0KLSAgICB2YWxJbmZvLmNvbXBsZXRlV1NETFZhbGlkYXRpb24oKTsKLQotICAgIHJldHVybiB2YWxJbmZvLmlzV1NETFZhbGlkKCk7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIFdTREwgZmlsZSB3aXRoIHRoZSBleHRlbnNpb24gdmFsaWRhdG9yLiBTZXQgdGhlIGVycm9ycyBhbmQgd2FybmluZyBhcHByb3ByaWF0ZWx5LgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxkb2MgQSBXM0MgZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBjdXJyZW50IHZhbGlkYXRpb24gaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTmFtZXNwYWNlIFRoZSBXU0RMIG5hbWVzcGFjZSB0byB2YWxpZGF0ZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUV4dGVuc2lvblZhbGlkYXRvcnMoRG9jdW1lbnQgd3NkbGRvYywgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIFN0cmluZyB3c2RsTmFtZXNwYWNlKQotICB7Ci0gICAgV1NETFZhbGlkYXRvckRlbGVnYXRlW10gZXh0VmFscyA9IHZlci5xdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KHdzZGxOYW1lc3BhY2UsIFZhbGlkYXRvclJlZ2lzdHJ5LkVYVF9WQUxJREFUT1IpOwotICAgIGlmKGV4dFZhbHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgbnVtdmFscyA9IGV4dFZhbHMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bXZhbHM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETFZhbGlkYXRvckRlbGVnYXRlIGV4dHZhbGRlbCA9IGV4dFZhbHNbaV07Ci0gICAgICAgIElXU0RMVmFsaWRhdG9yIGV4dHZhbCA9IGV4dHZhbGRlbC5nZXRWYWxpZGF0b3IoKTsKLSAgICAgICAgaWYoZXh0dmFsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgZXh0dmFsLnZhbGlkYXRlKHdzZGxkb2MsIHZhbEluZm8pOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaChUaHJvd2FibGUgIHQpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9QUk9CTEVNX0VYVF9WQUxJREFUT1IsICBleHR2YWxkZWwuZ2V0VmFsaWRhdG9yTmFtZSgpLCB3c2RsTmFtZXNwYWNlKSwgMSwgMSwgdmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgICAgICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZyhtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SLCAgZXh0dmFsZGVsLmdldFZhbGlkYXRvck5hbWUoKSwgd3NkbE5hbWVzcGFjZSksIElMb2dnZXIuU0VWX0VSUk9SLCB0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBSZXNvdXJjZUJ1bmRsZSBmb3IgdGhpcyBWYWxpZGF0b3JNYW5hZ2VyLgotICAgKiAKLSAgICogQHBhcmFtIHJiCi0gICAqICAgICAgICAgICAgVGhlIHJlc291cmNlIGJ1bmRsZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJlc291cmNlQnVuZGxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUJ1bmRsZShSZXNvdXJjZUJ1bmRsZSByYikKLSAgewotICAgIHJlc291cmNlYnVuZGxlID0gcmI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBSZXNvdXJjZUJ1bmRsZSBmb3IgdGhpcyBWYWxpZGF0aW9uQ29udHJvbGxlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHJlc291cmNlIGJ1bmRsZSBzZXQgZm9yIHRoaXMgVmFsaWRhdGlvbkNvbnRyb2xsZXIuCi0gICAqIEBzZWUgI3NldFJlc291cmNlQnVuZGxlCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKQotICB7Ci0gICAgcmV0dXJuIHJlc291cmNlYnVuZGxlOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgRE9NIGRvY3VtZW50IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHVyaSAKLSAgICogCQlUaGUgdXJpIG9mIHRoZSBmaWxlIHRvIHJlYWQKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtCi0gICAqIAkJQW4gb3B0aW9uYWwgSW5wdXRTdHJlYW0gdG8gcmVhZCB0aGUgZG9jdW1lbnQgZnJvbS4KLSAgICogQHBhcmFtIHZhbGluZm8KLSAgICogCQlBIHZhbGlkYXRpb24gaW5mbyBvYmplY3QgdXNlZCBmb3IgcmVwb3J0aW5nIG1lc3NhZ2VzLgotICAgKiBAcmV0dXJuIFRoZSBET00gbW9kZWwgb2YgdGhlIFdTREwgZG9jdW1lbnQgb3IgbnVsbCBpZiB0aGUgZG9jdW1lbnQgY2FuJ3QgYmUgcmVhZC4KLSAgICovCi0gIHByaXZhdGUgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIHVyaSwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIENvbnRyb2xsZXJWYWxpZGF0aW9uSW5mbyB2YWxpbmZvKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ2F0Y2ggYSBwcmVtYXR1cmUgRU9GIGVycm9yIHRvIGFsbG93IGVtcHR5IFdTREwgZmlsZXMgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC4KLSAgICAgIFN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbigpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCBYTUxFcnJvclJlcG9ydGVyIGNyZWF0ZUVycm9yUmVwb3J0ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBYTUxFcnJvclJlcG9ydGVyKCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmd1bWVudHMsIHNob3J0IHNldmVyaXR5KSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJvb2xlYW4gcmVwb3J0RXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICBpZiAoa2V5LmVxdWFscygiUHJlbWF0dXJlRU9GIikpCi0gICAgICAgICAgICAgIHsgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXBvcnRFcnJvciA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKHJlcG9ydEVycm9yKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIucmVwb3J0RXJyb3IoZG9tYWluLCBrZXksIGFyZ3VtZW50cywgc2V2ZXJpdHkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIAotICAgICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBudWxsOwotICAgICAgaWYgKGlucHV0U3RyZWFtICE9IG51bGwpCi0gICAgICB7IC8vdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBhIERPTSBmcm9tIHRoZSBpbnB1dHN0cmVhbQotICAgICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dFN0cmVhbSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7IGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHVyaSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIERPTVBhcnNlciBidWlsZGVyID0gbmV3IExpbmVOdW1iZXJET01QYXJzZXIoY29uZmlndXJhdGlvbik7Ci0gICAgICBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICAgIERvY3VtZW50IGRvYyA9IGJ1aWxkZXIuZ2V0RG9jdW1lbnQoKTsKLQotICAgICAgcmV0dXJuIGRvYzsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgdmFsaWRhdG9yIHdpbGwgZmFpbCB3aXRoIGFuIHVuZXhwbGFpbmVkIGVycm9yIG1lc3NhZ2UKLSAgICAgIC8vIGFib3V0IGEgbnVsbCBXU0RMIG5hbWVzcGFjZS4gVGhpcyBlcnJvciBzaG91bGQgYmUgYWRkcmVzc2VkIGFzIHdlbGwuCi0gICAgIHZhbGluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0RPQ1VNRU5UX0xPQ0FUSU9OLCB1cmkpLCAwLCAwLCB1cmkpOwotICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXU0RMTmFtZXNwYWNlKERvY3VtZW50IGRvYykKLSAgewotICAgIFN0cmluZyB3c2RsbnMgPSBudWxsOwotICAgIGlmKGRvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdGRvYyA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIGlmKHJvb3Rkb2MgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgd3NkbG5zID0gcm9vdGRvYy5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxuczsKLSAgfQotICAKLSAgCi0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBjcmVhdGVTdHJpbmdGb3JJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIC8vIEhlcmUgd2UgYXJlIHJlYWRpbmcgdGhlIGZpbGUgYW5kIHN0b3JpbmcgdG8gYSBzdHJpbmdidWZmZXIuCi0gICAgU3RyaW5nQnVmZmVyIGZpbGVTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgaW5wdXRSZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0pOwotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlucHV0UmVhZGVyKTsKLSAgICAgIGNoYXJbXSBjaGFycyA9IG5ldyBjaGFyWzEwMjRdOwotICAgICAgaW50IG51bWJlclJlYWQgPSByZWFkZXIucmVhZChjaGFycyk7Ci0gICAgICB3aGlsZSAobnVtYmVyUmVhZCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgZmlsZVN0cmluZy5hcHBlbmQoY2hhcnMsIDAsIG51bWJlclJlYWQpOwotICAgICAgICBudW1iZXJSZWFkID0gcmVhZGVyLnJlYWQoY2hhcnMpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9UT0RPOiBsb2cgZXJyb3IgbWVzc2FnZQotICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZVN0cmluZy50b1N0cmluZygpOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25JbmZvSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25JbmZvSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWNkMjc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0aW9uSW5mb0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHZhbGlkYXRpb24gaW5mbyBpbnRlcmZhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uSW5mb0ltcGwgaW1wbGVtZW50cyBJVmFsaWRhdGlvblJlcG9ydCwgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCA9IHRydWU7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9XQVJOX05PX1ZBTERJQVRPUiA9ICJfV0FSTl9OT19WQUxESUFUT1IiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSA9ICJfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSI7Ci0gIHByaXZhdGUgU3RyaW5nIHZhbGlkYXRpbmdfZmlsZV91cmkgPSBudWxsOwotICBwcml2YXRlIFVSTCB2YWxpZGF0aW5nX2ZpbGVfdXJsID0gbnVsbDsKLSAgcHJpdmF0ZSBib29sZWFuIHdzZGxWYWxpZCA9IGZhbHNlOwotICBwcml2YXRlIExpc3QgbWVzc2FnZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIC8vcHJpdmF0ZSBMaXN0IHNjaGVtYXMgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgTGlzdCBuc05vVmFscyA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gaGFzZXJyb3JzID0gZmFsc2U7Ci0gIHByaXZhdGUgSGFzaE1hcCBuZXN0ZWRNZXNzYWdlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIgPSBudWxsOwotICBwcml2YXRlIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkKLSAgICogICAgICAgICAgICBUaGUgVVJJIG9mIHRoZSBmaWxlIGZvciB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uSW5mb0ltcGwoU3RyaW5nIHVyaSwgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yKQotICB7Ci0gICAgdGhpcy52YWxpZGF0aW5nX2ZpbGVfdXJpID0gdXJpOwotICAgIGlmKHVyaSAhPSBudWxsKQotICAgIHsKLSAgICAgIHVyaSA9IHVyaS5yZXBsYWNlQWxsKCIlMjAiLCIgIik7Ci0gICAgICB0aGlzLnZhbGlkYXRpbmdfZmlsZV91cmkgPSB1cmk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdGhpcy52YWxpZGF0aW5nX2ZpbGVfdXJsID0gbmV3IFVSTCh1cmkpOwotICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHRoaXMubWVzc2FnZWdlbmVyYXRvciA9IG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCNnZXRGaWxlVVJJKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmlsZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gdmFsaWRhdGluZ19maWxlX3VyaTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQjaXNXU0RMVmFsaWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMVmFsaWQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxWYWxpZDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZEVycm9yKGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgaW50LCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICBhZGRFcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHZhbGlkYXRpbmdfZmlsZV91cmkpOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uSW5mbyNhZGRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgaWYoYWRkTWVzc2FnZShtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9FUlJPUikpCi0gICAgewotICAgICAgaGFzZXJyb3JzID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmksIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIGlmKGFkZE1lc3NhZ2UobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIFZhbGlkYXRpb25NZXNzYWdlSW1wbC5TRVZfRVJST1IsIGVycm9yS2V5LCBtZXNzYWdlQXJndW1lbnRzKSkKLSAgICB7Ci0gICAgICBoYXNlcnJvcnMgPSB0cnVlOwotICAgIH0KLSAgfQotICAKLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uKQotICB7Ci0gICAgYWRkV2FybmluZyhtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHZhbGlkYXRpbmdfZmlsZV91cmkpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgYWRkTWVzc2FnZShtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9XQVJOSU5HKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIG1lc3NhZ2UgdG8gdGhlIGxpc3QuIEEgbWVzc2FnZSBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0IGluIAotICAgKiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB3aGVuIHRoZSBVUkkgaXMgaW52YWxpZCBvciB0aGUgbWVzc2FnZSAKLSAgICogaXMgbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgbWVzc2FnZSB3YXMgYWJsZSB0byBiZSBhZGRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpLCBpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICAgIHJldHVybiB0aGlzLmFkZE1lc3NhZ2UobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIHNldmVyaXR5LCBudWxsLCBudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIG1lc3NhZ2UgdG8gdGhlIGxpc3QuIEEgbWVzc2FnZSBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0IGluIAotICAgKiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB3aGVuIHRoZSBVUkkgaXMgaW52YWxpZCBvciB0aGUgbWVzc2FnZSAKLSAgICogaXMgbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlcnJvcktleSBUaGUgWGVyY2VzIEVycm9yIEtleQotICAgKiBAcGFyYW0gbWVzc2FnZUFyZ3VtZW50cyBUaGUgWGVyY2VzIGFyZ3VtZW50cyB1c2VkIHRvIGNyZWF0ZSB0aGUgZXJyb3IgbWVzc2FnZQotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIG1lc3NhZ2Ugd2FzIGFibGUgdG8gYmUgYWRkZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGRNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSwgaW50IHNldmVyaXR5LCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpCi0gIHsKLSAgICBib29sZWFuIHN1Y2Nlc3NmdWxseUFkZGVkID0gZmFsc2U7Ci0gICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbnVsbCB0aGVyZSBpcyBub3RoaW5nIHRvIHJlcG9ydC4KLSAgICBpZihtZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHN1Y2Nlc3NmdWxseUFkZGVkOwotICAgIH0KLSAgICBTdHJpbmcgZXJyb3JVUkkgPSB1cmk7Ci0gICAgVVJMIGVycm9yVVJMID0gbnVsbDsKLSAgICBpZiAoZXJyb3JVUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JVUkkgPSBlcnJvclVSSS5yZXBsYWNlQWxsKCIlMjAiLCAiICIpOwotICAgICAgICBlcnJvclVSTCA9IG5ldyBVUkwoZXJyb3JVUkkpOwotICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICAvL2Vycm9yVVJJID0gbm9ybWFsaXplVVJJKGVycm9yVVJJKTsKLSAgICB9Ci0vLyAgICBlbHNlCi0vLyAgICB7Ci0vLyAgICAgIGVycm9yVVJJID0gdmFsaWRhdGluZ19maWxlX3VyaTsKLS8vICAgICAgZXJyb3JVUkwgPSB2YWxpZGF0aW5nX2ZpbGVfdXJsOwotLy8gICAgfQotICAgIC8vYm9vbGVhbiBkb0RpYWxvZyA9IHRydWU7Ci0gICAgaWYgKGVycm9yVVJMICE9IG51bGwpCi0gICAgewotICAgICAgc3VjY2Vzc2Z1bGx5QWRkZWQgPSB0cnVlOwotICAgICAgLy8gQWRkIHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0IGlmIG5lc3RlZCBlcnJvciBzdXBwb3J0IGlzIG9mZiBvcgotICAgICAgLy8gdGhpcyBtZXNzYWdlIGlzIGZvciB0aGUgY3VycmVudCBmaWxlLgotICAgICAgaWYgKCFXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCB8fCB2YWxpZGF0aW5nX2ZpbGVfdXJsLnNhbWVGaWxlKGVycm9yVVJMKSkKLSAgICAgIHsKLQotICAgICAgICBWYWxpZGF0aW9uTWVzc2FnZUltcGwgdmFsbWVzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlLCBsaW5lLAotICAgICAgICAgICAgY29sdW1uLCBzZXZlcml0eSwgdXJpLCBlcnJvcktleSwgbWVzc2FnZUFyZ3VtZW50cyk7Ci0gICAgICAgIG1lc3NhZ2VzLmFkZCh2YWxtZXMpOwotICAgICAgfQotICAgICAgLy8gSWYgbmVzdGVkIGVycm9yIHN1cHBvcnQgaXMgZW5hYmxlZCBjcmVhdGUgYSBuZXN0ZWQgZXJyb3IuCi0gICAgICBlbHNlIGlmIChXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5lc3RlZHVyaSA9IGVycm9yVVJMLnRvRXh0ZXJuYWxGb3JtKCk7Ci0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlSW1wbCBuZXN0ZWRtZXNzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlLCBsaW5lLAotICAgICAgICAgICAgY29sdW1uLCBzZXZlcml0eSwgbmVzdGVkdXJpKTsKLQotICAgICAgICBWYWxpZGF0aW9uTWVzc2FnZUltcGwgY29udGFpbmVyID0gKFZhbGlkYXRpb25NZXNzYWdlSW1wbCkgbmVzdGVkTWVzc2FnZXMuZ2V0KG5lc3RlZHVyaSk7Ci0gICAgICAgIGlmKGNvbnRhaW5lciA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSW5pdGlhbGx5IHNldCB0aGUgbmVzdGVkIGVycm9yIHRvIGEgd2FybmluZy4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY2hhbmdlZAotICAgICAgICAgIC8vIHRvIGFuIGVycm9yIGlmIGEgbmVzdGVkIG1lc3NhZ2UgaGFzIGEgc2V2ZXJpdHkgb2YgZXJyb3IuCi0gICAgICAgICAgY29udGFpbmVyID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSwgbmVzdGVkdXJpKSwgMSwgMCwgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HLCBuZXN0ZWR1cmkpOwotICAgICAgICAgIG5lc3RlZE1lc3NhZ2VzLnB1dChuZXN0ZWR1cmksIGNvbnRhaW5lcik7Ci0gICAgICAgICAgbWVzc2FnZXMuYWRkKGNvbnRhaW5lcik7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGFpbmVyLmFkZE5lc3RlZE1lc3NhZ2UobmVzdGVkbWVzcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1Y2Nlc3NmdWxseUFkZGVkOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCNnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKQotICAgKi8KLSAgcHVibGljIElWYWxpZGF0aW9uTWVzc2FnZVtdIGdldFZhbGlkYXRpb25NZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gKElWYWxpZGF0aW9uTWVzc2FnZVtdKW1lc3NhZ2VzLnRvQXJyYXkobmV3IElWYWxpZGF0aW9uTWVzc2FnZVttZXNzYWdlcy5zaXplKCldKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmFtZXNwYWNlV2l0aE5vVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICAvLyBJZiB0aGUgbGlzdCBkb2Vzbid0IGFscmVhZHkgY29udGFpbiB0aGlzIG5hbWVzcGFjZSwgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgLy8gYW5kIGNyZWF0ZSBhIHdhcm5pbmcgbWVzc2FnZS4KLSAgICBpZiAoIW5zTm9WYWxzLmNvbnRhaW5zKG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgbnNOb1ZhbHMuYWRkKG5hbWVzcGFjZSk7Ci0gICAgICBhZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX05PX1ZBTERJQVRPUiwgbmFtZXNwYWNlKSwgMSwgMCk7Ci0KLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29udHJvbGxlclZhbGlkYXRpb25JbmZvI2NvbXBsZXRlV1NETFZhbGlkYXRpb24oKQotICAgKi8KLSAgcHVibGljIHZvaWQgY29tcGxldGVXU0RMVmFsaWRhdGlvbigpCi0gIHsKLSAgICBpZiAoaGFzZXJyb3JzKQotICAgIHsKLSAgICAgIHdzZGxWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NkbFZhbGlkID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0I2hhc0Vycm9ycygpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBoYXNFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGhhc2Vycm9yczsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuVmFsaWRhdGlvblJlcG9ydCNnZXROZXN0ZWRNZXNzYWdlcygpCi0gICAqLwotICBwdWJsaWMgSGFzaE1hcCBnZXROZXN0ZWRNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gbmVzdGVkTWVzc2FnZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gIAl0aGlzLnVyaVJlc29sdmVyID0gdXJpUmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLSAgCXJldHVybiB1cmlSZXNvbHZlcjsKLSAgfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5WYWxpZGF0aW9uSW5mbyNnZXRBdHRyaWJ1dGUoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldEF0dHJpYnV0ZShTdHJpbmcgbmFtZSkgCi0JewotCQlpZihjb25maWd1cmF0aW9uID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiBjb25maWd1cmF0aW9uLmdldFByb3BlcnR5KG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDb25maWd1cmF0aW9uKFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCXsKLQkJdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKLQl9Ci0JcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKLQkJcmV0dXJuICFoYXNFcnJvcnMoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZmQ2NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25NZXNzYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLQotLyoqCi0gKiBBIHZhbGlkYXRpb24gbWVzc2FnZSBpcyBjcmVhdGVkIHdoZW4gdGhlcmUgaXMgaW5mb3JtYXRpb24gdG8gcmVwb3J0IGZyb20KLSAqIHZhbGlkYXRpbmcgYSBXU0RMIGRvY3VtZW50LgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIGltcGxlbWVudHMgSVZhbGlkYXRpb25NZXNzYWdlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZTsKLSAgcHJvdGVjdGVkIGludCBsaW5lTnVtYmVyOwotICBwcm90ZWN0ZWQgaW50IGNvbHVtbk51bWJlcjsKLSAgcHJvdGVjdGVkIFN0cmluZyB1cmk7Ci0gIHByb3RlY3RlZCBpbnQgc2V2ZXJpdHkgPSBTRVZfRVJST1I7Ci0gIHByb3RlY3RlZCBMaXN0IG5lc3RlZEVycm9yczsKLSAgcHJvdGVjdGVkIFN0cmluZyBlcnJvcktleSA9IG51bGw7Ci0gIHByb3RlY3RlZCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiBAcGFyYW0gbGluZU51bWJlciBUaGUgbGluZSB3aGVyZSB0aGUgbWVzc2FnZSBzaG91bGQgYmUgZGlzcGxheWVkLgotICAgKiBAcGFyYW0gY29sdW1uTnVtYmVyIFRoZSBjb2x1bW4gd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQGRlcHJlY2F0ZWQgVXNlIGNvbnRydWN0b3Igd2l0aCBVUkkgcGFyYW1ldGVyLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlSW1wbChTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGludCBzZXZlcml0eSkKLSAgewotICAgIHRoaXMobWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzZXZlcml0eSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEFsbG93cyBzcGVjaWZ5aW5nIGEgdXJpIGZvciB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIG1lc3NhZ2UgcmVmZXJzIHRvLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgVGhlIGxpbmUgd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciBUaGUgY29sdW1uIHdoZXJlIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgcmVmZXJlbmNlIGZpbGUgZm9yIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlSW1wbChTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGludCBzZXZlcml0eSwgU3RyaW5nIHVyaSkKLSAgewotICAgICAgdGhpcyhtZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNldmVyaXR5LCB1cmksIG51bGwsIG51bGwpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEFsbG93cyBzcGVjaWZ5aW5nIGEgdXJpIGZvciB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIG1lc3NhZ2UgcmVmZXJzIHRvLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgVGhlIGxpbmUgd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciBUaGUgY29sdW1uIHdoZXJlIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgcmVmZXJlbmNlIGZpbGUgZm9yIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZXJyb3JLZXkgVGhlIFhlcmNlcyBFcnJvciBrZXkKLSAgICogQHBhcmFtIG1lc3NhZ2VBcmd1bWVudHMgVGhlIHZhbHVlcyB1c2VkIHRvICJmaWxsIGluIHRoZSBibGFua3MiIG9mIGEgWGVyY2VzIGVycm9yIE1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBpbnQgc2V2ZXJpdHksIFN0cmluZyB1cmksIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICB0aGlzLmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLSAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gICAgdGhpcy51cmkgPSB1cmk7Ci0gICAgdGhpcy5lcnJvcktleSA9IGVycm9yS2V5OwotICAgIHRoaXMubWVzc2FnZUFyZ3VtZW50cyA9IG1lc3NhZ2VBcmd1bWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbHVtbiBudW1iZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uTnVtYmVyOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgbnVtYmVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZU51bWJlcjsKLSAgfQotCi0gIC8qKgotICAgKiByZXR1cm5zIHRoZSB1cmkgb2YgdGhlIHJlZmVyZW5jZSBmaWxlIGZvciB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdXJpIG9mIHRoZSByZXNvdXJjZSB0aGF0IHRoZSBtZXNzYWdlIHJlZmVycyB0by4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkKLSAgewotICAgIHJldHVybiB1cmk7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2UjZ2V0U2V2ZXJpdHkoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRTZXZlcml0eSgpCi0gIHsKLSAgICByZXR1cm4gc2V2ZXJpdHk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldmVyaXR5KGludCBzZXZlcml0eSkKLSAgewotICAgIGlmKHNldmVyaXR5ID09IFNFVl9FUlJPUiB8fCBzZXZlcml0eSA9PSBTRVZfV0FSTklORykKLSAgICB7Ci0gICAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgbmVzdGVkIHZhbGlkYXRpb24gbWVzc2FnZSB0byB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uTWVzc2FnZSBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlIHRvIGFkZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmVzdGVkTWVzc2FnZShJVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UpCi0gIHsKLSAgICBpZiAobmVzdGVkRXJyb3JzID09IG51bGwpCi0gICAgewotICAgICAgbmVzdGVkRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIH0KLSAgICBuZXN0ZWRFcnJvcnMuYWRkKHZhbGlkYXRpb25NZXNzYWdlKTsKLSAgICBpbnQgdmFsaWRhaXRvbm1lc3NhZ2VTZXZlcml0eSA9IHZhbGlkYXRpb25NZXNzYWdlLmdldFNldmVyaXR5KCk7Ci0gICAgaWYodmFsaWRhaXRvbm1lc3NhZ2VTZXZlcml0eSA9PSBTRVZfRVJST1IpCi0gICAgewotICAgICAgc2V0U2V2ZXJpdHkoU0VWX0VSUk9SKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBsaXN0IG9mIG5lc3RlZCB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBuZXN0ZWQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldE5lc3RlZE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBuZXN0ZWRFcnJvcnMgIT0gbnVsbCA/IG5lc3RlZEVycm9ycyA6IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gdGhlIGVycm9yIGtleQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFcnJvcktleSgpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JLZXk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gZXJyb3JLZXkgdGhlIGVycm9yIGtleSB0byBzZXQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yS2V5KFN0cmluZyBlcnJvcktleSkKLSAgewotICAgIHRoaXMuZXJyb3JLZXkgPSBlcnJvcktleTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiB0aGUgWGVyY2VzIG1lc3NhZ2UgYXJndW1lbnRzIHVzZWQgdG8gImZpbGwgaW4gdGhlIGJsYW5rcyIgb2YgdGhlIG1lc3NhZ2VzCi0gICAqLwotICBwdWJsaWMgT2JqZWN0W10gZ2V0TWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUFyZ3VtZW50czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRvclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdG9yUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIzMDVlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdG9yUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotCi0vKioKLSAqIEEgcmVnaXN0cnkgb2YgSVdTRExWYWxpZGF0b3IgdmFsaWRhdG9ycy4gVGhpcyBob2xkcyB0aGUgdG9wIGxldmVsIFdTREwgYW5kIFdTLUkgdmFsaWRhdG9ycy4KLSAqIFZhbGlkYXRvcnMgYXJlIHJlZ2lzdGVyZWQgYnkgdGhlIG5hbWVzcGFjZSB0aGV5IHZhbGlkYXRlLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yUmVnaXN0cnkKLXsKLSAgLyoqCi0gICAqIFRoZSBXU0RMIHZhbGlkYXRvciB0eXBlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBJbnRlZ2VyIFdTRExfVkFMSURBVE9SID0gbmV3IEludGVnZXIoMCk7Ci0gIC8qKgotICAgKiBUaGUgV1MtSSB2YWxpZGF0b3IgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgSW50ZWdlciBFWFRfVkFMSURBVE9SID0gbmV3IEludGVnZXIoMSk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgVmFsaWRhdG9yUmVnaXN0cnkgdmVySW5zdGFuY2U7Ci0gIC8qCi0gICAgVGhpcyBpcyBhIE1hcCBvZiBNYXBzLiBUaGUgdG9wLWxldmVsIE1hcCBpcyBrZXllZCBieSAoQ2xhc3MpcGFyZW50VHlwZSwKLSAgICBhbmQgdGhlIGlubmVyIE1hcHMgYXJlIGtleWVkIGJ5IChRTmFtZSllbGVtZW50VHlwZS4KLSAgICBUaGlzIGlkZWEgaXMgdGhlIHNhbWUgYXMgaXMgZG9uZSBpbiBXU0RMNEoKLSAgKi8KLSAgcHJvdGVjdGVkIE1hcCB2YWxpZGF0b3JSZWcgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgcHJvdGVjdGVkIEl0ZXJhdG9yIGRlZmF1bHRWYWxpZGF0b3JJdGVyYXRvcjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhlIHJlZ2lzdHJ5LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHJlZ2lzdHJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBWYWxpZGF0b3JSZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAodmVySW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB2ZXJJbnN0YW5jZSA9IG5ldyBWYWxpZGF0b3JSZWdpc3RyeSgpOwotICAgIH0KLSAgICByZXR1cm4gdmVySW5zdGFuY2U7Ci0gIH0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoaXMgdmFsaWRhdG9yIG9mIHRoZSBnaXZlbiB0eXBlIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0aGUgdmFsaWRhdG9yIHZhbGlkYXRlcy4KLSAgICogQHBhcmFtIHZhbERlbGVnYXRlIFRoZSB2YWxpZGF0b3IgZGVsZWdhdGUgdG8gcmVnaXN0ZXIuCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UsIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSB2YWxEZWxlZ2F0ZSwgSW50ZWdlciB0eXBlKQotICB7Ci0gICAgLy8gYWxsb3cgdGhlIG51bGwgbmFtZXNwYWNlIGJ1dCBtYWtlIGl0IHRoZSBlbXB0eSBzdHJpbmcKLSAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlID0gIiI7Ci0gICAgfQotCi0gICAgLy8gZ2V0IHRoZSBoYXN0YWJsZSBmb3IgdGhlIHR5cGUgb2YgdmFsaWRhdG9yIHdlIHdhbnQKLSAgICBIYXNodGFibGUgdHlwZVZhbGlkYXRvclJlZyA9IChIYXNodGFibGUpdmFsaWRhdG9yUmVnLmdldCh0eXBlKTsKLSAgICAvLyBpZiBpdCdzIG51bGwgaWYgbWVhbnMgd2UgaGF2ZW4ndCBkZWZpbmVkIHRoaXMgdHlwZSBvZiB2YWxpZGF0b3IgeWV0Ci0gICAgaWYgKHR5cGVWYWxpZGF0b3JSZWcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0eXBlVmFsaWRhdG9yUmVnID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgdmFsaWRhdG9yUmVnLnB1dCh0eXBlLCB0eXBlVmFsaWRhdG9yUmVnKTsKLSAgICB9Ci0gICAgCi0gICAgICBMaXN0IG5hbWVzcGFjZXZhbHMgPSAoTGlzdCl0eXBlVmFsaWRhdG9yUmVnLmdldChuYW1lc3BhY2UpOwotICAgICAgaWYobmFtZXNwYWNldmFscyA9PSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lc3BhY2V2YWxzID0gbmV3IFZlY3RvcigpOwotICAgICAgICB0eXBlVmFsaWRhdG9yUmVnLnB1dChuYW1lc3BhY2UsIG5hbWVzcGFjZXZhbHMpOwotICAgICAgfQotICAgICAgbmFtZXNwYWNldmFscy5hZGQodmFsRGVsZWdhdGUpOwotCi0gIH0KLSAgLyoqCi0gICAqIEFzayBmb3IgdGhlIHZhbGlkYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lc3BhY2UuIElmIG5vbmUgaXMgZm91bmQKLSAgICogcmV0dXJuIG51bGwuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSB2YWxpZGF0b3IgdGhhdCBpcyBiZWluZyByZXF1ZXN0ZWQuCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHZhbGlkYXRvciB0aGF0IGlzIGJlaW5nIHJlcXVlc3RlZC4KLSAgICogQHJldHVybiBBbiBhcnJheSBvZiB2YWxpZGF0b3IgZGVsZWdhdGVzIGlmIGF0IGxlYXN0IG9uZSBpcyByZWdpc3RlcmVkLCBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdG9yRGVsZWdhdGVbXSBxdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KFN0cmluZyBuYW1lc3BhY2UsIEludGVnZXIgdHlwZSkKLSAgewotICAgIC8vIGlmIHRoZSBuYW1lc3BhY2UgaXMgbnVsbCBhbGxvdyBpdCBhbmQgdHJlYXQgaXQgYXMgdGhlIGVtcHR5IHN0cmluZwotICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICB9Ci0gICAgSGFzaHRhYmxlIHR5cGVWYWxpZGF0b3JSZWcgPSAoSGFzaHRhYmxlKXZhbGlkYXRvclJlZy5nZXQodHlwZSk7Ci0gICAgaWYgKHR5cGVWYWxpZGF0b3JSZWcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIH0KLQotICAgIExpc3QgdmFsZGVscyA9IChMaXN0KXR5cGVWYWxpZGF0b3JSZWcuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgaWYodmFsZGVscyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoV1NETFZhbGlkYXRvckRlbGVnYXRlW10pdmFsZGVscy50b0FycmF5KG5ldyBXU0RMVmFsaWRhdG9yRGVsZWdhdGVbdmFsZGVscy5zaXplKCldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSB2YWxpZGF0b3IgcmVnaXN0ZXJlZCBvZiB0aGUgZ2l2ZW4gdHlwZSB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHZhbGlkYXRvci4KLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIHZhbGlkYXRvci4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGEgdmFsaWRhdG9yIHJlZ2lzdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2UsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc1JlZ2lzdGVyZWRWYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgSW50ZWdlciB0eXBlKQotICB7Ci0gICAgaWYgKHF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkobmFtZXNwYWNlLCB0eXBlKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiODAyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi0vKioKLSAqIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHZhbGlkYXRpb24gb2YgYSBzcGVjaWZpYwotICogZmlsZS4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiAKLXsKLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgLyoqCi0gICAqIFNldCBhbiBhdHRyaWJ1dGUgb24gdGhlIHZhbGlkYXRvci4gQW4gYXR0cmlidXRlIGlzCi0gICAqIGRlZmluZWQgYnkgYSBuYW1lIGFuZCBhIHZhbHVlIHBhaXIuIEFuIGF0dHJpYnV0ZSBtYXkKLSAgICogYmUgZGVmaW5lZCBmb3IgYW55IHZhbGlkYXRvciwgYnVpbHQgaW4gb3IgYW4gZXh0ZW5zaW9uLgotICAgKiBFeHRlbnNpb24gdmFsaWRhdG9ycyBjYW4gcHJvYmUgdGhlIGF0dHJpYnV0ZXMgc2V0IG9uCi0gICAqIHRoZSBXU0RMIHZhbGlkYXRvciB0byBjdXN0b21pemUgdGhlIHdheSBpbiB3aGljaCB0aGV5Ci0gICAqIHZhbGlkYXRlLiBBIG51bGwgdmFsdWUgd2lsbCB1bnNldCBhbiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIGlkZW50aWZpZXIuCi0gICAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIGl0c2VsZi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpCi0gIHsKLQlpZih2YWx1ZSA9PSBudWxsKQotCXsKLQkgIHByb3BlcnRpZXMucmVtb3ZlKG5hbWUpOwotCX0KLQllbHNlCi0JewotICAJICBwcm9wZXJ0aWVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2YWx1ZSBzZXQgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9yIG51bGwgaWYgdGhlIHByb3BlcnR5IGhhcyBub3QgYmVlbiBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBuYW1lKQotICB7Ci0JaWYobmFtZSAhPSBudWxsKQotCSAgcmV0dXJuIHByb3BlcnRpZXMuZ2V0KG5hbWUpOwotCXJldHVybiBudWxsOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvV1NETFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDMyYjFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLkNsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExQmFzaWNWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExVmFsaWRhdG9yQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5odHRwLkhUVFBWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEubWltZS5NSU1FVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnNvYXAuU09BUFZhbGlkYXRvcjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogQW4gbWFpbiBXU0RMIHZhbGlkYXRvciBjbGFzcy4gVGhlIFdTREwgdmFsaWRhdG9yIHZhbGlkYXRlcyBXU0RMIGRvY3VtZW50cy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFZBTElEQVRPUl9SRVNPVVJDRV9CVU5ETEUgPSAidmFsaWRhdGV3c2RsIjsKLSAgcHJpdmF0ZSBWYWxpZGF0aW9uQ29udHJvbGxlciB2YWxpZGF0aW9uQ29udHJvbGxlcjsKLSAgcHJvdGVjdGVkIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3IoKQotICB7Ci0gICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRSk7Ci0gICAgdXJpUmVzb2x2ZXIgPSBuZXcgVVJJUmVzb2x2ZXIoKTsKLSAgICB2YWxpZGF0aW9uQ29udHJvbGxlciA9IG5ldyBWYWxpZGF0aW9uQ29udHJvbGxlcihyYiwgdXJpUmVzb2x2ZXIpOwotICAgIAotICAgIC8vUmVnaXN0ZXIgdGhlIGRlZmF1bHQgdmFsaWRhdG9ycy4KLSAgICBWYWxpZGF0b3JSZWdpc3RyeSByZWdpc3RyeSA9IFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgLy8gUmVnaXN0ZXIgdGhlIFdTREwgMS4xIHZhbGlkYXRvciBjb250cm9sbGVyIGFuZCB2YWxpZGF0b3JzLgotICAgIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZShXU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlclZhbGlkYXRvcihDb25zdGFudHMuTlNfVVJJX1dTREwsIGRlbGVnYXRlLCBWYWxpZGF0b3JSZWdpc3RyeS5XU0RMX1ZBTElEQVRPUik7Ci0gICAgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUxID0gbmV3IENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoV1NETDExQmFzaWNWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKENvbnN0YW50cy5OU19VUklfV1NETCwgZGVsZWdhdGUxKTsKLSAgICBkZWxlZ2F0ZTEgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShIVFRQVmFsaWRhdG9yLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5OU19IVFRQLCBkZWxlZ2F0ZTEpOwotICAgIGRlbGVnYXRlMSA9IG5ldyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKFNPQVBWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLk5TX1NPQVAxMSwgZGVsZWdhdGUxKTsKLSAgICBkZWxlZ2F0ZTEgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShNSU1FVmFsaWRhdG9yLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5OU19NSU1FLCBkZWxlZ2F0ZTEpOwotICAgCi0gICAgLy8gVGhlIFdTREwgMS4xIHNjaGVtYSB2YWxpZGF0b3IgaXMgYSBzcGVjaWFsIGNhc2UgYXMgaXQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhyZWUgbmFtZXNwYWNlcy4KLS8vICAgIGRlbGVnYXRlMSA9IG5ldyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShJbmxpbmVTY2hlbWFWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotLy8gICAgcmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSwgZGVsZWdhdGUxKTsKLS8vICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDAsIGRlbGVnYXRlMSk7Ci0vLyAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCBkZWxlZ2F0ZTEpOwotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIFdTREwgZmlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIFRoZSBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAcmV0dXJuIEEgdmFsaWRhdGlvbiByZXBvcnQgc3VtbWFyaXppbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoU3RyaW5nIHVyaSkKLSAgewotICAgcmV0dXJuIHZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBWYWxpZGF0ZSB0aGUgaW5wdXRTdHJlYW0KLSAgICogQHBhcmFtIHVyaSBUaGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZmlsZSBiZWluZyB2YWxpZGF0ZWQKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIFRoZSBzdHJlYW0gdG8gdmFsaWRhdGUKLSAgICogQHJldHVybiBBIFZhbGlkYXRpb24gcmVwb3J0IHN1bW1hcml6aW5nIHRoZSByZXN1bHRzIG9mIHRoZSB2YWxpZGF0aW9uCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoU3RyaW5nIHVyaSwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICB7Ci0gICAgaWYodXJpID09IG51bGwpIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgaWYoY29uZmlndXJhdGlvbiA9PSBudWxsKQotICAgICAgY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbkNvbnRyb2xsZXIudmFsaWRhdGUodXJpLCBpbnB1dFN0cmVhbSwgY29uZmlndXJhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBVUkkgcmVzb2x2ZXIgdG8gdGhlIFdTREwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHVyaVJlc29sdmVyIFRoZSBVUkkgcmVzb2x2ZXIgdG8gYWRkIHRvIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFVSSVJlc29sdmVyKElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpCi0gIHsKLSAgCXRoaXMudXJpUmVzb2x2ZXIuYWRkVVJJUmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotICB9Ci0gIAotICAvKioKLSAgICogUmVnaXN0ZXIgYW4gZXh0ZW5zaW9uIFdTREwgdmFsaWRhdG9yIGRlbGVnYXRlIHdpdGggdGhpcyB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdGhlIHZhbGlkYXRvciB2YWxpZGF0ZXMgZm9yLiBUaGlzIGlzIHRoZSBXU0RMIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGRlbGVnYXRlIFRoZSBkZWxlZ2F0ZSB0aGF0IGhvbGRzIHRoZSB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldTRExFeHRlbnNpb25WYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlKQotICB7Ci0gICAgVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlclZhbGlkYXRvcihuYW1lc3BhY2UsIGRlbGVnYXRlLCBWYWxpZGF0b3JSZWdpc3RyeS5FWFRfVkFMSURBVE9SKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlZ2lzdGVyIGEgV1NETCAxLjEgdmFsaWRhdG9yIGRlbGVnYXRlIHdpdGggdGhpcyB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdGhlIHZhbGlkYXRvciB2YWxpZGF0ZXMgZm9yLgotICAgKiBAcGFyYW0gZGVsZWdhdGUgVGhlIGRlbGVnYXRlIHRoYXQgaG9sZHMgdGhlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UsIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlKQotICB7Ci0gICAgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlclZhbGlkYXRvcihuYW1lc3BhY2UsIGRlbGVnYXRlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmFlMDI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi0vKioKLSAqIEEgV1NETFZhbGlkYXRvckRlbGVnYXRlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgV1NETCB2YWxpZGF0b3IuCi0gKiBBIGRlbGVnYXRlIGlzIHVzZWQgdG8gbGF6eSBsb2FkIGV4dGVuc2lvbiB2YWxpZGF0b3JzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETFZhbGlkYXRvckRlbGVnYXRlIAotewotICBwcml2YXRlIElXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2YWxpZGF0b3Igc3BlY2lmaWVkIGluIHRoaXMgZGVsZWdhdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBXU0RMIHZhbGlkYXRvciBzcGVjaWZpZWQgYnkgdGhpcyBkZWxlZ2F0ZS4KLSAgICovCi0gIHB1YmxpYyBJV1NETFZhbGlkYXRvciBnZXRWYWxpZGF0b3IoKQotICB7Ci0gICAgaWYgKHZhbGlkYXRvciA9PSBudWxsKQotICAgIHsKLSAgICAgIHZhbGlkYXRvciA9IGxvYWRWYWxpZGF0b3IoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRvcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIExvYWQgdGhlIHZhbGlkYXRvciBzcGVjaWZpZWQgaW4gdGhpcyBkZWxlZ2F0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFdTREwgdmFsaWRhdG9yIHNwZWNpZmllZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IElXU0RMVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHZhbGlkYXRvciBuYW1lLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRWYWxpZGF0b3JOYW1lKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkODJmNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZUxvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgbG9nZ2VyIHRoYXQgd2lsbCBsb2cgdG8gdGhlIGxvZyBmaWxlIGluIHRoZSBFY2xpcHNlIG1ldGFkYXRhIGRpcmVjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyCi17Ci0KLQkKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSkgCi0gIHsKLSAgICBsb2cobWVzc2FnZSwgc2V2ZXJpdHksIG51bGwpOwkKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHksIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLQkvLyBEb24ndCBsb2cgdmVyYm9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgRWNsaXBzZSBsb2cuCi0JaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfVkVSQk9TRSkKLQl7Ci0JICByZXR1cm47Ci0JfQotCWludCBzdGF0dXMgPSBJU3RhdHVzLklORk87Ci0JaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQl7Ci0JICBzdGF0dXMgPSBJU3RhdHVzLldBUk5JTkc7Ci0JfQotCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfRVJST1IpCi0JewotCSAgc3RhdHVzID0gSVN0YXR1cy5FUlJPUjsKLQl9Ci0gICAgVmFsaWRhdGVXU0RMUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCkubG9nKG5ldyBTdGF0dXMoc3RhdHVzLCBWYWxpZGF0ZVdTRExQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5PSywgbWVzc2FnZSwgdGhyb3dhYmxlKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0VjbGlwc2VXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YWI2YjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGV4dGVuZHMgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBCdW5kbGUgYnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYSBjbGFzcyBsb2FkZXIgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBidW5kbGUgdG8gdXNlIHRvIGxvYWQgdGhlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBFY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoU3RyaW5nIHZhbGlkYXRvckNsYXNzbmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgewotCXRoaXMudmFsaWRhdG9yQ2xhc3NuYW1lID0gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExVmFsaWRhdG9yRGVsZWdhdGUjbG9hZFZhbGlkYXRvcigpCi0gICAqLwotICBwcm90ZWN0ZWQgSVdTREwxMVZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCkKLSAgewotCUlXU0RMMTFWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLQlpZihidW5kbGUgIT0gbnVsbCkKLQl7Ci0JICB0cnkKLQkgIHsKLSAgICAgICAgQ2xhc3MgdmFsaWRhdG9yQ2xhc3MgPSBidW5kbGUubG9hZENsYXNzKHZhbGlkYXRvckNsYXNzbmFtZSk7Ci0KLSAgICAgICAgdmFsaWRhdG9yID0gKElXU0RMMTFWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgIAotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgICAgfQotCX0KLQlyZXR1cm4gdmFsaWRhdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZTE4MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotCi0vKioKLSAqIEEgZGVsZWdhdGUgaG9sZHMgYSB2YWxpZGF0b3IncyBpbmZvcm1hdGlvbiBhbmQgY2FuIGluc3RhbnRpYXRlIGl0Ci0gKiB3aGVuIHJlcXVlc3RlZCB0by4KLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZXh0ZW5kcyBXU0RMVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBCdW5kbGUgYnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYW4gT1NHSSBidW5kbGUgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBPU0dJIGJ1bmRsZSB0byB1c2UgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUoU3RyaW5nIHZhbGlkYXRvckNsYXNzbmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgewotCXRoaXMudmFsaWRhdG9yQ2xhc3NuYW1lID0gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQWJzdHJhY3RXU0RMVmFsaWRhdG9yRGVsZWdhdGUjbG9hZFZhbGlkYXRvcigpCi0gICAqLwotICBwcm90ZWN0ZWQgSVdTRExWYWxpZGF0b3IgbG9hZFZhbGlkYXRvcigpCi0gIHsKLQlJV1NETFZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotICAgIGlmKGJ1bmRsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgIAlDbGFzcyB2YWxpZGF0b3JDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3ModmFsaWRhdG9yQ2xhc3NuYW1lKTsKLQotICAgICAgICB2YWxpZGF0b3IgPSAoSVdTRExWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKFRocm93YWJsZSB0KQotICAgICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5BYnN0cmFjdFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSNnZXRWYWxpZGF0b3JOYW1lKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdG9yTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA4OWJiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5HcmFtbWFyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyRGVzY3JpcHRpb247Ci0KLS8qKgotICogQSBncmFtbWFyIHBvb2wgZm9yIGlubGluZSBzY2hlbWFzLiBUaGlzIGdyYW1tYXIgcG9vbCByZXN0cmljdHMgaW5saW5lIHNjaGVtYXMKLSAqIGZyb20gYmVpbmcgY2FjaGVkLgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwgZXh0ZW5kcyBYTUxHcmFtbWFyUG9vbEltcGwgCi17Ci0gIHB1YmxpYyB2b2lkIHB1dEdyYW1tYXIoR3JhbW1hciBncmFtbWFyKSAKLSAgewotCWlmIChncmFtbWFyID09IG51bGwpCi0JICByZXR1cm47Ci0JLy8gd2Ugb3ZlcmlkZSB0aGlzIG1ldGhvZCB0byBwZXJmb3JtICdzZWxlY3RpdmUnIGNhY2hpbmcgb2Ygc2NoZW1hcwotCVhNTEdyYW1tYXJEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IGdyYW1tYXIuZ2V0R3JhbW1hckRlc2NyaXB0aW9uKCk7Ci0JaWYgKCFmUG9vbElzTG9ja2VkICYmICFjb250YWluc0dyYW1tYXIoZ3JhbW1hci5nZXRHcmFtbWFyRGVzY3JpcHRpb24oKSkpIAotCXsKLQkgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGNhY2hpbmcgdGhlIGlubGluZSBzY2hlbWFzCi0JICAvLyB3ZSBlbnN1cmUgdGhlIGxpdGVyYWwgc3lzdGVtIGlkIGRvZXMgbm90IGVuZCB3aXRoIHdzZGwKLQkgIC8vIGJlZm9yZSB3ZSBhdHRlbXB0IHRvICdwdXQnIHRoZSBncmFtbWFyCi0JICBTdHJpbmcgbGl0U3lzSWQgPSBkZXNjcmlwdGlvbi5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLQkgIFN0cmluZyBiYXNTeXNJZCA9IGRlc2NyaXB0aW9uLmdldEJhc2VTeXN0ZW1JZCgpOwotCSAgaWYgKGxpdFN5c0lkICE9IG51bGwgJiYgbGl0U3lzSWQuZW5kc1dpdGgoInhzZCIpCi0JCQkmJiBiYXNTeXNJZCAhPSBudWxsICYmIGJhc1N5c0lkLmVuZHNXaXRoKCJ3c2RsIikpIAotCSAgewotCQkJCS8qCi0JCQkJICogU3lzdGVtLm91dC5wcmludGxuKCJwdXRHcmFtYW1yIDogIiArCi0JCQkJICogc2NoZW1hRGVzY3JpcHRpb24uZ2V0TmFtZXNwYWNlKCkgKyAiLCAiICsKLQkJCQkgKiBzY2hlbWFEZXNjcmlwdGlvbi5nZXRFeHBhbmRlZFN5c3RlbUlkKCkgKyAiLCAiICsKLQkJCQkgKiBzY2hlbWFEZXNjcmlwdGlvbi5nZXRCYXNlU3lzdGVtSWQoKSk7Ci0JCQkJICovCi0JICAgIHN1cGVyLnB1dEdyYW1tYXIoZ3JhbW1hcik7Ci0JICB9Ci0JfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVVJJUmVzb2x2ZXJXcmFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9VUklSZXNvbHZlcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhNmJiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9VUklSZXNvbHZlcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFuIHdyYXBwZXIgVVJJIHJlc29sdmVyIHRoYXQgd3JhcHMgdGhlIFdlYiBTdGFuZGFyZCBUb29scyBVUkkgcmVzb2x2ZXIKLSAqIGluIGEgV1NETCB2YWxpZGF0b3IgVVJJIHJlc29sdmVyLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXJXcmFwcGVyIGltcGxlbWVudHMgSUV4dGVuc2libGVVUklSZXNvbHZlcgotewotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXJXcmFwcGVyKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JRXh0ZW5zaWJsZVVSSVJlc29sdmVyI3Jlc29sdmUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQsIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCkKLSAgewotICAgIFVSSVJlc29sdmVyIHJlc29sdmVyID0gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKTsKLSAgICBTdHJpbmcgcmVzb2x2ZWRTeXN0ZW1JZCA9IHJlc29sdmVQbGF0Zm9ybVVSTChzeXN0ZW1JZCk7Ci0gICAgU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLSAgICBpZiAocHVibGljSWQgIT0gbnVsbCB8fCByZXNvbHZlZFN5c3RlbUlkICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBsb2NhdGlvbiA9IHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgcmVzb2x2ZWRTeXN0ZW1JZCk7Ci0gICAgfSAgCi0gICAgCi0gICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgeyAgICAgICAKLSAgICAgIHJlc3VsdC5zZXRMb2dpY2FsTG9jYXRpb24obG9jYXRpb24pOwotICAgICAgU3RyaW5nIHBoeXNpY2FsID0gcmVzb2x2ZXIucmVzb2x2ZVBoeXNpY2FsTG9jYXRpb24oYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgbG9jYXRpb24pOwotICAgICAgaWYocGh5c2ljYWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0LnNldFBoeXNpY2FsTG9jYXRpb24ocGh5c2ljYWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQuc2V0UGh5c2ljYWxMb2NhdGlvbihsb2NhdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUmVzb2x2ZSBwbGF0Zm9ybSBVUkxzIHRvIHN0YW5kYXJkIFVSTHMuIFRoaXMgbWV0aG9kIGhhcyB0aGUKLSAgICogcHJhY3RpY2FsIGVmZmVjdCBvZiB0cmFuc2Zvcm1pbmcgYSBVUkwgc3VjaCBhcwotICAgKiBwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdC90ZXN0LndzZGwKLSAgICogaW50bwotICAgKiBmaWxlOi9jOi93dHAvd29ya3NwYWNlL3Rlc3QvdGVzdC53c2RsCi0gICAqIAotICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdGhhdCBtYXkgY29udGFpbiB0aGUgcGxhdGZvcm0gc2NoZW1lLgotICAgKiBAcmV0dXJuIEEgcmVzb2x2ZWQgVVJMIHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgcGxhdGZvcm0gc2NoZW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXNvbHZlUGxhdGZvcm1VUkwoU3RyaW5nIHVybCkKLSAgewotCSAgU3RyaW5nIHJlc3VsdCA9IHVybDsKLQkgIGlmKHVybCAhPSBudWxsICYmIHVybC5zdGFydHNXaXRoKCJwbGF0Zm9ybToiKSkKLSAgICAgIHsKLSAgICAJICB0cnkKLSAgICAJICB7Ci0gICAgCQkgIFVSTCBmaWxlVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKG5ldyBVUkwodXJsKSk7Ci0gICAgCQkgIHJlc3VsdCA9IGZpbGVVUkwudG9FeHRlcm5hbEZvcm0oKTsKLSAgICAJICB9Ci0gICAgCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgCSAgewotICAgIAkJICAvLyBDYW4ndCByZXNvbHZlIHVzaW5nIHRoZSBGaWxlTG9jYXRvciBpbiB0aGlzCi0gICAgCQkgIC8vIGNhc2Ugc28gZG8gbm90aGluZy4KLSAgICAJICB9Ci0gICAgICB9Ci0JICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0ZVdTRExQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRlV1NETFBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNkMWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRlV1NETFBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHJlcXVpcmVkIGZvciBlY2xpcHNlLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgUFJPUEVSVElFU19GSUxFID0gInZhbGlkYXRld3NkbHVpIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBWYWxpZGF0ZVdTRExQbHVnaW4gaW5zdGFuY2U7Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZWJ1bmRsZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSB3c2RsVmFsaWRhdG9yUmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZVdTRExQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdGFydChjb250ZXh0KTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gICAgd3NkbFZhbGlkYXRvclJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKENvbnN0YW50cy5XU0RMX1ZBTElEQVRPUl9QUk9QRVJUSUVTX0ZJTEUpOwotICAgIHJlc291cmNlYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFBST1BFUlRJRVNfRklMRSk7Ci0gICAgCi0gICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihuZXcgRWNsaXBzZUxvZ2dlcigpKTsKLQotICAgIG5ldyBXU0RMVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIoCi0gICAgICAiZXh0dmFsaWRhdG9yIiwKLSAgICAgICJleHR2YWxpZGF0b3IiLAotICAgICAgV1NETFZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyLkVYVF9WQUxJREFUT1IpCi0gICAgICAucmVhZFJlZ2lzdHJ5KCk7Ci0KLSAgICAvLyByZWdpc3RlciBhbnkgV1NETCAxLjEgdmFsaWRhdG9ycyBkZWZpbmVkCi0gICAgbmV3IFdTREwxMVZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyKCJ3c2RsMTF2YWxpZGF0b3IiLCAidmFsaWRhdG9yIikucmVhZFJlZ2lzdHJ5KCk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdG9wKGNvbnRleHQpOwotICAgIFhNTENhdGFsb2cucmVzZXQoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4gb2JqZWN0LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4gb2JqZWN0Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFZhbGlkYXRlV1NETFBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUoZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKiBSZXNvdXJjZUJ1bmRsZSBoZWxwZXIgbWV0aG9kcwotICAgKiAKLSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBidW5kbGUgZm9yIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgcmVzb3VyY2UgYnVuZGxlIGZvciB0aGlzIHBsdWdpbgotICAgKi8KLSAgcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkKLSAgewotICAgIHJldHVybiByZXNvdXJjZWJ1bmRsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBidW5kbGUgZm9yIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHJlc291cmNlIGJ1bmRsZSBmb3IgdGhlIFdTREwgdmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0V1NETFZhbGlkYXRvclJlc291cmNlQnVuZGxlKCkKLSAgewotICAgIHJldHVybiB3c2RsVmFsaWRhdG9yUmVzb3VyY2VCdW5kbGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gaWQuCi0gICAqIAotICAgKiBAcGFyYW0gc3RyaW5nSUQgLSB0aGUgaWQgZm9yIHRoZSBzdHJpbmcKLSAgICogQHJldHVybiB0aGUgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gaWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBzdHJpbmdJRCkKLSAgewotICAgIHJldHVybiBnZXRSZXNvdXJjZUJ1bmRsZSgpLmdldFN0cmluZyhzdHJpbmdJRCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlYWRzIHRoZSBwbHVnaW4gbWFuaWZlc3RzIGFuZCByZWdpc3RlcnMgZWFjaCBXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yCi0gKi8KLWNsYXNzIFdTRExWYWxpZGF0b3JQbHVnaW5SZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9WQUxJREFUT1IgPSAwOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBFWFRfVkFMSURBVE9SID0gMTsKLSAgcHJvdGVjdGVkIFN0cmluZyBleHRlbnNpb25Qb2ludElkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZ05hbWU7Ci0gIHByb3RlY3RlZCBpbnQgdmFsaWRhdG9yVHlwZTsKLQotICAvKioKLSAgICogCi0gICAqLwotICBwdWJsaWMgV1NETFZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyKFN0cmluZyBleHRlbnNpb25Qb2ludElkLCBTdHJpbmcgdGFnTmFtZSwgaW50IHZhbGlkYXRvclR5cGUpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2lvblBvaW50SWQgPSBleHRlbnNpb25Qb2ludElkOwotICAgIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7Ci0gICAgdGhpcy52YWxpZGF0b3JUeXBlID0gdmFsaWRhdG9yVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcGx1Z2luUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElFeHRlbnNpb25Qb2ludCBwb2ludCA9IHBsdWdpblJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFBMVUdJTl9JRCwgZXh0ZW5zaW9uUG9pbnRJZCk7Ci0gICAgaWYgKHBvaW50ICE9IG51bGwpCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBwb2ludC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHJlYWRFbGVtZW50KGVsZW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogcmVhZEVsZW1lbnQoKSAtIHBhcnNlIGFuZCBkZWFsIHdpdGggYW4gZXh0ZW5zaW9uIGxpa2U6Ci0gICAqCi0gICAqIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnZhbGlkYXRlLndzZGwuV1NETEV4dGVuc2lvblZhbGlkYXRvciIKLSAgICogICAgICAgICAgICBpZD0ic29hcFZhbGlkYXRvciIKLSAgICogICAgICAgICAgICBuYW1lPSJTT0FQIFZhbGlkYXRvciI+PgotICAgKiAgIDx2YWxpZGF0b3I+Ci0gICAqICAgICAgICA8cnVuIGNsYXNzPSIgb3JnLmVjbGlwc2UudmFsaWRhdGUud3NkbC5zb2FwLlNPQVBWYWxpZGF0b3IiLz4KLSAgICogICA8L3ZhbGlkYXRvcj4KLSAgICogICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLz4KLSAgICogPC9leHRlbnNpb24+Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgewotICAgICAgU3RyaW5nIHZhbGlkYXRvckNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLQotICAgICAgaWYgKHZhbGlkYXRvckNsYXNzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gICAgICAgICAgQ2xhc3NMb2FkZXIgcGx1Z2luTG9hZGVyID0KLSAgICAgICAgICAvLyAgICAgICAgICAgIGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0RGVjbGFyaW5nUGx1Z2luRGVzY3JpcHRvcigpLmdldFBsdWdpbigpLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICAgICAgICAvLwkJCQltb2RpZmllZCB0byByZXNvbHZlIGNlcnRhaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgcGx1Z2luIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZAotCi0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAodmFsaWRhdG9yVHlwZSA9PSBFWFRfVkFMSURBVE9SKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICBFY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MsIHBsdWdpbkJ1bmRsZSk7Ci0gICAgICAgICAgICBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCkucmVnaXN0ZXJXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vKioKLSAqIFJlYWQgV1NEbCAxLjEgZXh0ZW5zaW9uIHZhbGlkYXRvcnMuCi0gKiAKLSAqICA8ZXh0ZW5zaW9uCi0gKiAgICAgcG9pbnQ9ImNvbS5pYm0uZXRvb2xzLnZhbGlkYXRpb24udmFsaWRhdG9yIgotICogICAgIGlkPSJ3c2RsVmFsaWRhdG9yIgotICogICAgIG5hbWU9IiVfVUlfV1NETF9WQUxJREFUT1IiPgotICogICAgPHdzZGwxMXZhbGlkYXRvcgotICogICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotICogICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuc29hcC53c2RsMTEuU09BUFZhbGlkYXRvciIKLSAqICAgICAgIHJlc291cmNlYnVuZGxlPSJ2YWxpZGF0ZXdzZGxzb2FwIi8+Ci0gKiAgIDwvZXh0ZW5zaW9uPgotICogIAotICovCi1jbGFzcyBXU0RMMTFWYWxpZGF0b3JQbHVnaW5SZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBleHRlbnNpb25Qb2ludElkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZ05hbWU7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGV4dGVuc2lvblBvaW50SWQgLSB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludAotICAgKiBAcGFyYW0gdGFnTmFtZSAtIHRoZSB0YWcgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50Ci0gICAqLwotICBwdWJsaWMgV1NETDExVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQsIFN0cmluZyB0YWdOYW1lKQotICB7Ci0gICAgdGhpcy5leHRlbnNpb25Qb2ludElkID0gZXh0ZW5zaW9uUG9pbnRJZDsKLSAgICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIGhhbmRsZSB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50cyB0aGF0IG1hdGNoCi0gICAqIHRoZSBzcGVkaWZpZWQgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHBsdWdpblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSBwbHVnaW5SZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChQTFVHSU5fSUQsIGV4dGVuc2lvblBvaW50SWQpOwotICAgIGlmIChwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gcG9pbnQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICByZWFkRWxlbWVudChlbGVtZW50c1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGFuZCBkZWFsIHdpdGggdGhlIGV4dGVuc2lvbiBwb2ludHMuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZXh0ZW5zaW9uIHBvaW50IGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgewotICAgICAgU3RyaW5nIHZhbGlkYXRvckNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLQotICAgICAgaWYgKHZhbGlkYXRvckNsYXNzICE9IG51bGwgJiYgbmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBFY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MsIHBsdWdpbkJ1bmRsZSk7Ci0gICAgICAgICAgV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NDU3NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotCi0vKioKLSAqIEEgV1NETCB2YWxpZGF0b3IgdG8gY29udHJpYnV0ZSB0byB0aGUgV1RQIHZhbGlkYXRpb24gZnJhbWV3b3JrLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yIGV4dGVuZHMgQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3IgCi17Ci0gIHByb3RlY3RlZCBIYXNoTWFwIHhzZEdyYW1tYXJQb29scyA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByb3RlY3RlZCBIYXNoTWFwIHhtbEdyYW1tYXJQb29scyA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgdHdvIGdyYW1tYXIgcG9vbHMgZm9yIHRoaXMgV1NETCB2YWxpZGF0aW9uIGNvbnRleHQuCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3Ijc2V0dXBWYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldHVwVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotICAgIAotCVhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gbmV3IElubGluZVNjaGVtYU1vZGVsR3JhbW1hclBvb2xJbXBsKCk7Ci0JWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSBuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCk7Ci0JCi0JeHNkR3JhbW1hclBvb2xzLnB1dChjb250ZXh0LCB4c2RHcmFtbWFyUG9vbCk7Ci0JeG1sR3JhbW1hclBvb2xzLnB1dChjb250ZXh0LCB4bWxHcmFtbWFyUG9vbCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIHR3byBncmFtbWFyIHBvb2xzIGZvciB0aGlzIFdTREwgdmFsaWRhdGlvbiBjb250ZXh0LgotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLkFic3RyYWN0TmVzdGVkVmFsaWRhdG9yI3RlYXJkb3duVmFsaWRhdGlvbihvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyZG93blZhbGlkYXRpb24oTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotICAgIFhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5yZW1vdmUoY29udGV4dCk7Ci0gICAgaWYoeHNkR3JhbW1hclBvb2wgIT0gbnVsbCkKLSAgICAgIHhzZEdyYW1tYXJQb29sLmNsZWFyKCk7Ci0gICAgWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLnJlbW92ZShjb250ZXh0KTsKLSAgICBpZih4bWxHcmFtbWFyUG9vbCAhPSBudWxsKQotICAgICAgeG1sR3JhbW1hclBvb2wuY2xlYXIoKTsKLSAgICAKLSAgICBzdXBlci50ZWFyZG93blZhbGlkYXRpb24oY29udGV4dCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZShTdHJpbmcgdXJpLCBJbnB1dFN0cmVhbSBpbnB1dHN0cmVhbSwgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotCVhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5nZXQoY29udGV4dCk7Ci0JWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLmdldChjb250ZXh0KTsKLQkKLQlXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQkKLQlXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLQljb25maWd1cmF0aW9uLnNldFByb3BlcnR5KENvbnN0YW50cy5YTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFLCB4c2RHcmFtbWFyUG9vbCk7Ci0gICAgY29uZmlndXJhdGlvbi5zZXRQcm9wZXJ0eShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSwgeG1sR3JhbW1hclBvb2wpOwotCi0JSVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gbnVsbDsKLQlpZiAoaW5wdXRzdHJlYW0gIT0gbnVsbCkKLQl7Ci0JICB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpbnB1dHN0cmVhbSwgY29uZmlndXJhdGlvbik7Ci0JfQotCWVsc2UKLQl7Ci0JICB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLQl9Ci0JCQkgICAgICAgIAotCXJldHVybiBjb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQodmFscmVwb3J0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnZlcnQgYSBXU0RMIElWYWxpZGF0aW9uUmVwb3J0IHRvIGFuIFhNTCBWYWxpZGF0aW9uIFJlcG9ydC4KLSAgICogCi0gICAqIEBwYXJhbSByZXBvcnQgCi0gICAqIAkJVGhlIFdTREwgSVZhbGlkYXRpb25SZXBvcnQgdG8gY29udmVydC4KLSAgICogQHJldHVybiAKLSAgICogCQlBbiBYTUwgVmFsaWRhdGlvbiBSZXBvcnQgcmVwcmVzZW50aW5nIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIElWYWxpZGF0aW9uUmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25SZXBvcnQgY29udmVydFJlcG9ydFRvWE1MUmVwb3J0KElWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkKLSAgewotCVZhbGlkYXRpb25JbmZvIGNvbnZlcnRlZFJlcG9ydCA9IG5ldyBWYWxpZGF0aW9uSW5mbyhyZXBvcnQuZ2V0RmlsZVVSSSgpKTsKLQlJVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcyA9IHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLQlpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0JZm9yKGludCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyBpKyspCi0JewotCSAgY29udmVydE1lc3NhZ2UobWVzc2FnZXNbaV0sIGNvbnZlcnRlZFJlcG9ydCk7Ci0JfQotCi0JcmV0dXJuIGNvbnZlcnRlZFJlcG9ydDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnZlcnQgYSBXU0RMIElWYWxpZGF0aW9uTWVzc2FnZSBieSByZXBvcnRpbmcgaXQgaW4gdGhlIFZhbGlkYXRpb25JbmZvIG9iamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqIAkJVGhlIElWYWxpZGF0aW9uTWVzc2FnZSB0byBjb252ZXJ0LgotICAgKiBAcGFyYW0gY29udmVydGVkUmVwb3J0Ci0gICAqIAkJVGhlIFZhbGlkYXRpb25JbmZvIG9iamVjdCByZXByZXN0aW5nIHRoZSBjb252ZXJ0ZWQgcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29udmVydE1lc3NhZ2UoSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UsIFZhbGlkYXRpb25JbmZvIGNvbnZlcnRlZFJlcG9ydCkKLSAgewotCUxpc3QgbmVzdGVkTWVzc2FnZXMgPSBtZXNzYWdlLmdldE5lc3RlZE1lc3NhZ2VzKCk7Ci0JaWYobmVzdGVkTWVzc2FnZXMgIT0gbnVsbCAmJiBuZXN0ZWRNZXNzYWdlcy5zaXplKCkgPiAwKQotCXsKLQkgIEl0ZXJhdG9yIG1lc3NhZ2VJdGVyID0gbmVzdGVkTWVzc2FnZXMuaXRlcmF0b3IoKTsKLQkgIHdoaWxlKG1lc3NhZ2VJdGVyLmhhc05leHQoKSkKLQkgIHsKLQkJY29udmVydE1lc3NhZ2UoKElWYWxpZGF0aW9uTWVzc2FnZSltZXNzYWdlSXRlci5uZXh0KCksIGNvbnZlcnRlZFJlcG9ydCk7Ci0JICB9Ci0JfQotCWVsc2UKLQl7Ci0JICBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotCSAgICBjb252ZXJ0ZWRSZXBvcnQuYWRkV2FybmluZyhtZXNzYWdlLmdldE1lc3NhZ2UoKSwgbWVzc2FnZS5nZXRMaW5lKCksIG1lc3NhZ2UuZ2V0Q29sdW1uKCksIG1lc3NhZ2UuZ2V0VVJJKCkpOwotCSAgZWxzZQotCQljb252ZXJ0ZWRSZXBvcnQuYWRkRXJyb3IobWVzc2FnZS5nZXRNZXNzYWdlKCksIG1lc3NhZ2UuZ2V0TGluZSgpLCBtZXNzYWdlLmdldENvbHVtbigpLCBtZXNzYWdlLmdldFVSSSgpKTsKLQl9Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvciNnZXRWYWxpZGF0b3JJRCgpCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbGlkYXRvcklEKCkKLSAgewotICAgIC8vIEJlY2F1c2UgdGhpcyBjbGFzcyBpcyB1c2VkIGFzIGEgZGVsZWdhdGUsIHJldHVybiB0aGUgaWQgb2YgdGhlIHZhbGlkYXRvcgotICAgIC8vIHdoaWNoIGRlbGVnYXRlcyB0byB0aGlzIGNsYXNzLgotIAotICAgIHJldHVybiBXU0RMRGVsZWdhdGluZ1ZhbGlkYXRvci5jbGFzcy5nZXROYW1lKCk7IC8vJE5PTi1OTFMtMSQKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETERlbGVnYXRpbmdWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExEZWxlZ2F0aW5nVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMjBkNGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETERlbGVnYXRpbmdWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuZGVsZWdhdGVzLkRlbGVnYXRpbmdWYWxpZGF0b3I7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHVuaXF1ZSBuYW1lIChjbGFzcyBuYW1lKSB3aGljaCB0aGUgdmFsaWRhdGlvbiBmcmFtZXdvcmsKLSAqIHdpbGwgdXNlIHRvIGlkZW50aWZ5IHRoZSBXU0RMIHZhbGlkYXRvci4gVGhlIGFjdHVhbCBkZWxlZ2F0aW5nIHZhbGlkYXRvcgotICogZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBieSB0aGUgYmFzZSBjbGFzcy4gVGhlIGFjdHVhbCB2YWxpZGF0aW9uCi0gKiBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IHRoZSBkZWxlZ2F0ZXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgY2xhc3MgYXMKLSAqIHRoZWlyIHRhcmdldC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExEZWxlZ2F0aW5nVmFsaWRhdG9yIGV4dGVuZHMgRGVsZWdhdGluZ1ZhbGlkYXRvcgotewotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMRGVsZWdhdGluZ1ZhbGlkYXRvcigpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTM1YjZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLQotCi0vKioKLSAqIEFuIEVjbGlwc2UgV1NETCB2YWxpZGF0b3IuIFRoaXMgdmFsaWRhdG9yIGlzIHRoZSBkZWZhdWx0IHZhbGlkYXRvcgotICogdXNlZCBpbiB0aGUgdmFsaWRhdGlvbiBmcmFtZXdvcmsuIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YKLSAqIHRoaXMgdmFsaWRhdG9yLiBXaGVuIGNyZWF0ZWQsIHRoaXMgdmFsaWRhdG9yIHJlZ2lzdGVycyBhbGwgZXh0ZW5zaW9uCi0gKiBVUkkgcmVzb2x2ZXJzLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvciBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcgotewotCXByaXZhdGUgc3RhdGljIFdTRExWYWxpZGF0b3IgaW5zdGFuY2UgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yIHJlZ2lzdGVycyBhbGwgb2YgdGhlIFVSSSByZXNvbHZlcnMgZGVmaW5lZCB2aWEgdGhlCi0JICogV1NETCBVUkkgcmVzb2x2ZXIgZXh0ZW5zaW9uIHBvaW50IHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLiAKLQkgKiAKLQkgKi8KLQlwcm90ZWN0ZWQgV1NETFZhbGlkYXRvcigpCi0JewotICAgICAgc3VwZXIoKTsKLSAgICAgIFVSSVJlc29sdmVyV3JhcHBlciByZXNvbHZlciA9IG5ldyBVUklSZXNvbHZlcldyYXBwZXIoKTsKLSAgICAgIGFkZFVSSVJlc29sdmVyKHJlc29sdmVyKTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBvbmUgYW5kIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyBFY2xpcHNlIFdTREwgdmFsaWRhdG9yLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG9uZSBhbmQgb25seSBpbnN0YW5jZSBvZiB0aGlzIEVjbGlwc2UgV1NETCB2YWxpZGF0b3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBXU0RMVmFsaWRhdG9yIGdldEluc3RhbmNlKCkKLQl7Ci0JCWlmKGluc3RhbmNlID09IG51bGwpCi0JCXsKLQkJCWluc3RhbmNlID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZXhjZXB0aW9uL1ZhbGlkYXRlV1NETEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2V4Y2VwdGlvbi9WYWxpZGF0ZVdTRExFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkMWI0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZXhjZXB0aW9uL1ZhbGlkYXRlV1NETEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5leGNlcHRpb247Ci0KLS8qKgotICogQ3VzdG9tIGV4Y2VwdGlvbiBmb3IgV1NETCB2YWxpZGF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0JLyoqCi0gICAqIFJlcXVpcmVkIHNlcmlhbCB2ZXJzaW9uIHVpZC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlV1NETEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkKLQl7Ci0JICBzdXBlcihtZXNzYWdlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9JTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9JTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YWU4OTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvSUxvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmc7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgYSBzdGFuZGFyZCBsb2dnZXIgZm9yIHRoZSBXU0RMIHZhbGlkYXRvci4gCi0gKiBBbGxvd3MgZm9yIGxvZ2dpbmcgZXJyb3JzIGFuZCB3YXJuaW5ncy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJTG9nZ2VyCi17Ci0gIC8qKgotICAgKiBTZXZlcml0eSBlcnJvciBmb3IgbG9nZ2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IFNFVl9FUlJPUiA9IDA7Ci0gIAotICAvKioKLSAgICogU2V2ZXJpdHkgd2FybmluZyBmb3IgbG9nZ2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IFNFVl9XQVJOSU5HID0gMTsKLSAgCi0gIC8qKgotICAgKiBTZXZlcml0eSBpbmZvIGZvciBsb2dnaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgU0VWX0lORk8gPSAyOwotICAKLSAgLyoqCi0gICAqIFNldmVyaXR5IHZlcmJvc2UgZm9yIGxvZ2dpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBTRVZfVkVSQk9TRSA9IDM7Ci0gIAotICAvKioKLSAgICogTG9nIGEgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIAotICAgKiAJCVRoZSBtZXNzYWdlIHRvIGxvZy4KLSAgICogQHBhcmFtIHNldmVyaXR5Ci0gICAqIAkJVGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlIHRvIGxvZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KTsKLSAgCi0gIC8qKgotICAgKiBMb2cgYSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgCi0gICAqIAkJVGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgKiBAcGFyYW0gc2V2ZXJpdHkKLSAgICogCQlUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlIAotICAgKiAJCVRoZSBleGNlcHRpb24gdG8gbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHksIFRocm93YWJsZSB0aHJvd2FibGUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvTG9nZ2VyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvTG9nZ2VyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2E5ZDVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL0xvZ2dlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nOwotCi0vKioKLSAqIFRoZSBsb2dnZXIgZmFjdG9yeSBhbGxvd3MgZm9yIHNpbXBsZSB1c2Ugb2Ygd2hhdGV2ZXIgbG9nZ2luZyBtZWNoYW5pc20gaXMgaW4KLSAqIHBsYWNlLiBUaGUgdG9vbCBjYW4gc3BlY2lmeSBhIGN1c3RvbSBJTG9nZ2VyLiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCByZXF1ZXN0IHRoZQotICogbG9nZ2VyIGZyb20gdGhpcyBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlckZhY3RvcnkKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLSAgcHJpdmF0ZSBJTG9nZ2VyIGxvZ2dlciAgPSBudWxsOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIG9uZSBhbmQgb25seSBpbnN0YW5jZSBvZiB0aGUgbG9nZ2VyIGZhY3RvcnkuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBvbmUgYW5kIG9ubHkgaW5zdGFuY2Ugb2YgdGhlIGxvZ2dlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTG9nZ2VyRmFjdG9yeSBnZXRJbnN0YW5jZSgpCi0gIHsKLQlpZihmYWN0b3J5ID09IG51bGwpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBMb2dnZXJGYWN0b3J5KCk7Ci0JfQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBsb2dnZXIgaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dnZXIKLSAgICogICAgICAgICAgICBUaGUgSUxvZ2dlciB0byB1c2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dnZXIoSUxvZ2dlciBsb2dnZXIpCi0gIHsKLSAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9nZ2VyLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBsb2dnZXIuCi0gICAqLwotICBwdWJsaWMgSUxvZ2dlciBnZXRMb2dnZXIoKQotICB7Ci0JaWYobG9nZ2VyID09IG51bGwpCi0JewotCSAgbG9nZ2VyID0gbmV3IFN0YW5kYXJkTG9nZ2VyKCk7Ci0JfQotCXJldHVybiBsb2dnZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL1N0YW5kYXJkTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9TdGFuZGFyZExvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGMxYjIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL1N0YW5kYXJkTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nOwotCi1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLQotLyoqCi0gKiBBIGxvZ2dlciB0aGF0IHdpbGwgcHJpbnQgbG9nIGluZm8gdG8gc3RhbmRhcmQgc3lzdGVtIG91dHB1dHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGFuZGFyZExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIKLXsgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHkpIAotICB7ICAKLQlQcmludFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBTeXN0ZW0ub3V0OwotCWlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0VSUk9SKQotCXsKLQkgIG91dHB1dFN0cmVhbSA9IFN5c3RlbS5lcnI7Ci0JfQotICAgIG91dHB1dFN0cmVhbS5wcmludGxuKG1lc3NhZ2UpOwotICB9Ci0KLS8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBlcnJvciwgaW50IHNldmVyaXR5LCBUaHJvd2FibGUgdGhyb3dhYmxlKQotICB7Ci0JbG9nKGVycm9yLCBzZXZlcml0eSk7Ci0JbG9nKHRocm93YWJsZS50b1N0cmluZygpLCBzZXZlcml0eSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JRXh0ZW5zaWJsZVVSSVJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvSUV4dGVuc2libGVVUklSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjlmZGY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JRXh0ZW5zaWJsZVVSSVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlcjsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIHRoZSBXU0RMIHZhbGlkYXRvcidzIFVSSSByZXNvbHZlciBtZWNoYW5pc20uIFRoZSBVUkkgcmVzb2x2ZXIKLSAqIGlzIHVzZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgYW4gZW50aXR5LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIKLXsKLSAvKioKLSAgKiBSZXNvbHZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZW50aXR5IGRlc2NyaWJlZCBieSB0aGUgcHVibGljSWQgYW5kIHN5c3RlbUlkLgotICAqIAotICAqIEBwYXJhbSBiYXNlTG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSByZXNvdXJjZSB0aGF0IGNvbnRhaW5zIHRoZSB1cmkuCi0gICogQHBhcmFtIHB1YmxpY0lkIEFuIG9wdGlvbmFsIHB1YmxpYyBpZGVudGlmaWVyIChpLmUuIG5hbWVzcGFjZSBuYW1lKSwgb3IgbnVsbCBpZiBub25lLgotICAqIEBwYXJhbSBzeXN0ZW1JZCBBbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkksIG9yIG51bGwgaWYgbm9uZS4KLSAgKiBAcGFyYW0gcmVzdWx0IFRoZSByZXN1bHQgb2YgdGhlIHJlc29sdXRpb24uCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQsIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvSVVSSVJlc29sdXRpb25SZXN1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmJmODZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0vKioKLSAqIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhIFVSSSByZXNvbHV0aW9uIHJlc3VsdC4gVGhpcyBpbnRlcmZhY2UgaXMgbm90IG1lYW50IHRvCi0gKiBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJVVJJUmVzb2x1dGlvblJlc3VsdCAKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9naWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsb2dpY2FsIGxvY2F0aW9uIG9mIHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9naWNhbExvY2F0aW9uKCk7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBsb2dpY2FsIGxvY2F0aW9uIG9mIHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dpY2FsTG9jYXRpb24gVGhlIGxvZ2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9naWNhbExvY2F0aW9uKFN0cmluZyBsb2dpY2FsTG9jYXRpb24pOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQaHlzaWNhbExvY2F0aW9uKCk7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqIAotICAgKiBAcGFyYW0gcGh5c2ljYWxMb2NhdGlvbiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGh5c2ljYWxMb2NhdGlvbihTdHJpbmcgcGh5c2ljYWxMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdXRpb25SZXN1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4ODk0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaG9sZHMgdGhlIFVSSSByZXNvbHV0aW9uIHJlc3VsdHMuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x1dGlvblJlc3VsdCBpbXBsZW1lbnRzIElVUklSZXNvbHV0aW9uUmVzdWx0Ci17Ci0gIHByaXZhdGUgU3RyaW5nIGxvZ2ljYWxMb2NhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHBoeXNpY2FsTG9jYXRpb24gPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdXRpb25SZXN1bHQoKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQjZ2V0TG9naWNhbExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9naWNhbExvY2F0aW9uKCkKLSAgewotCXJldHVybiBsb2dpY2FsTG9jYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQjc2V0TG9naWNhbExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dpY2FsTG9jYXRpb24oU3RyaW5nIGxvZ2ljYWxMb2NhdGlvbikKLSAgewotCXRoaXMubG9naWNhbExvY2F0aW9uID0gbG9naWNhbExvY2F0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0I2dldFBoeXNpY2FsTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQaHlzaWNhbExvY2F0aW9uKCkKLSAgewotCXJldHVybiBwaHlzaWNhbExvY2F0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0I3NldFBoeXNpY2FsTG9jYXRpb24oamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBoeXNpY2FsTG9jYXRpb24oU3RyaW5nIHBoeXNpY2FsTG9jYXRpb24pCi0gIHsKLQl0aGlzLnBoeXNpY2FsTG9jYXRpb24gPSBwaHlzaWNhbExvY2F0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZjM2MzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTGF6eVVSTElucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2c7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgbWFpbiBVUkkgcmVzb2x2ZXIgdGhhdCBjYWxscyBvdXQgdG8gYWxsIG9mIHRoZSByZWdpc3RlcmVkCi0gKiBleHRlcm5hbCBVUkkgcmVzb2x2ZXJzIHRvIGxvY2F0ZSBhbiBlbnRpdHkuIElmIG5vbmUgb2YgdGhlIGV4dGVybmFsIHJlc29sdmVycwotICogY2FuIGxvY2F0ZSB0aGUgZW50aXR5IHRoZSByZXNvbHZlciB3aWxsIGFzayB0aGUgaW50ZXJuYWwgV1NETCB2YWxpZGF0b3IgWE1MCi0gKiBjYXRhbG9nIHRvIHJlc29sdmUgdGhlIGxvY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXIgaW1wbGVtZW50cyBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyLCBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwcml2YXRlIExpc3QgZXh0VVJJUmVzb2x2ZXJzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuIAotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdmVyKCkKLSAgewotICB9Ci0KLQotICAvKioKLSAgICogQWRkIGFuIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpUmVzb2x2ZXIKLSAgICogICAgICAgICAgVGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRVUklSZXNvbHZlcihJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gICAgZXh0VVJJUmVzb2x2ZXJzTGlzdC5hZGQodXJpUmVzb2x2ZXIpOwotICB9Ci0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlciNyZXNvbHZlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXNvbHZlKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkLCBJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQpCi0gIHsKLSAgICBJdGVyYXRvciByZXNvbHZlckl0ZXIgPSBleHRVUklSZXNvbHZlcnNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUocmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHJlc29sdmVyID0gKElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIpcmVzb2x2ZXJJdGVyLm5leHQoKTsKLSAgICAgIGlmIChyZXNvbHZlciA9PSBudWxsKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgc3lzdGVtSWQsIHJlc3VsdCk7Ci0gICAgICBpZiAocmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpICE9IG51bGwgJiYgIXJlc3VsdC5nZXRQaHlzaWNhbExvY2F0aW9uKCkuZXF1YWxzKHN5c3RlbUlkKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZW4ndCBiZWVuIGFibGUgdG8gbG9jYXRlIHRoZSByZXN1bHQgeWV0IGFzayB0aGUgaW50ZXJuYWwgWE1MCi0gICAgLy8gY2F0YWxvZy4KLSAgICBpZiAocmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpID09IG51bGwgJiYgKHB1YmxpY0lkICE9IG51bGwgfHwgc3lzdGVtSWQgIT0gbnVsbCkpCi0gICAgewotICAgICAgU3RyaW5nIHRlbXByZXN1bHQgPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCkucmVzb2x2ZUVudGl0eUxvY2F0aW9uKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgICBpZih0ZW1wcmVzdWx0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgCXJlc3VsdC5zZXRMb2dpY2FsTG9jYXRpb24odGVtcHJlc3VsdCk7Ci0gICAgCXJlc3VsdC5zZXRQaHlzaWNhbExvY2F0aW9uKHRlbXByZXN1bHQpOwotICAgICAgfQotICAgIH0KLSAgICBpZihyZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQuc2V0TG9naWNhbExvY2F0aW9uKG5vcm1hbGl6ZShiYXNlTG9jYXRpb24sIHN5c3RlbUlkKSk7Ci0gICAgICByZXN1bHQuc2V0UGh5c2ljYWxMb2NhdGlvbihyZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLQlJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQ9IG5ldyBVUklSZXNvbHV0aW9uUmVzdWx0KCk7Ci0JcmVzb2x2ZShiYXNlTG9jYXRpb24sIHB1YmxpY0lkLCBzeXN0ZW1JZCwgcmVzdWx0KTsKLQlyZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyI3Jlc29sdmVFbnRpdHkob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcikKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciByZXNvdXJjZUlkZW50aWZpZXIpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0TGl0ZXJhbFN5c3RlbUlkKCk7Ci0gICAgaWYgKHB1YmxpY0lkID09IG51bGwgfHwgcHVibGljSWQuZXF1YWxzKCIiKSkKLSAgICB7Ci0gICAgICBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgSVVSSVJlc29sdXRpb25SZXN1bHQgcmVzdWx0ID0gcmVzb2x2ZShyZXNvdXJjZUlkZW50aWZpZXIuZ2V0QmFzZVN5c3RlbUlkKCksIHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgWE1MSW5wdXRTb3VyY2UgeG1sSW5wdXRTb3VyY2UgPSBudWxsOwotICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMYXp5VVJMSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKHJlc3VsdC5nZXRQaHlzaWNhbExvY2F0aW9uKCkpOwotICAgICAgeG1sSW5wdXRTb3VyY2UgPSBuZXcgWE1MSW5wdXRTb3VyY2UocHVibGljSWQsIHJlc3VsdC5nZXRMb2dpY2FsTG9jYXRpb24oKSwgcmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpLCBpcywgbnVsbCk7Ci0gICAgfQotICAgIHJldHVybiB4bWxJbnB1dFNvdXJjZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE5vcm1hbGl6ZSB0aGUgc3lzdGVtSWQuIE1ha2UgaXQgYWJzb2x1dGUgd2l0aCByZXNwZWN0IHRvIHRoZQotICAgKiBiYXNlTG9jYXRpb24gaWYgbmVjZXNzYXJ5LgotICAgKiAKLSAgICogQHBhcmFtIGJhc2VMb2NhdGlvbiBUaGUgYmFzZSBsb2NhdGlvbiBvZiB0aGUgZmlsZS4KLSAgICogQHBhcmFtIHN5c3RlbUlkIFRoZSBzeXN0ZW0gaWQgb2YgdGhlIGZpbGUuCi0gICAqIEByZXR1cm4gQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHN5c3RlbSBpZC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAJaWYoc3lzdGVtSWQgPT0gbnVsbCkKLSAgCXsKLSAgCSAgcmV0dXJuIHN5c3RlbUlkOwotICAJfQotICAJLy8gVHJ5IHRvIGZpbmQgYSBzY2hlbWUgaW4gdGhlIHN5c3RlbUlkLgotICAJaW50IHNjaGVtYUxvYyA9IHN5c3RlbUlkLmluZGV4T2YoJzonKTsKLSAgCWlmKHNjaGVtYUxvYyAhPSAtMSAmJiBzeXN0ZW1JZC5jaGFyQXQoc2NoZW1hTG9jKzEpID09ICcvJykKLSAgCXsKLSAgCSAgLy8gQSBzY2hlbWUgaGFzIGJlZW4gZm91bmQuIFRoZSBzeXN0ZW1JZCBpcyBhbgotICAJICAvLyBhYnNvbHV0ZSBsb2NhdGlvbiBzbyByZXR1cm4gaXQuCi0gIAkgIHJldHVybiBzeXN0ZW1JZDsKLSAgCX0KLSAgCWlmKGJhc2VMb2NhdGlvbiA9PSBudWxsKQotICAJewotICAJICByZXR1cm4gYmFzZUxvY2F0aW9uOwotICAJfQotICAJCi0gIAlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gIAkKLSAgCS8vIEVuc3VyZSBhbGwgc2xhc2hlcyBpbiB0aGUgbG9jYXRpb25zIGFyZSAvLgotICAJYmFzZUxvY2F0aW9uID0gYmFzZUxvY2F0aW9uLnJlcGxhY2UoJ1xcJywnLycpOwotICAJc3lzdGVtSWQgPSBzeXN0ZW1JZC5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgCQotICAJLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBzZWN0aW9uIG9mIHRoZSBiYXNlTG9jYXRpb24uCi0JaW50IGxhc3RTbGFzaCA9IGJhc2VMb2NhdGlvbi5sYXN0SW5kZXhPZignLycpOwotICAJU3RyaW5nIHRlbXByZXN1bHQgPSBiYXNlTG9jYXRpb24uc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCsxKTsKLSAgCQotICAJaWYoc3lzdGVtSWQuc3RhcnRzV2l0aCgiLyIpKQotICAJewotICAJICBzeXN0ZW1JZCA9IHN5c3RlbUlkLnN1YnN0cmluZygxKTsKLSAgCX0KLSAgCQotICAJLy8gSm9pbiB0aGUgYmFzZSBsb2NhdGlvbiB3aXRoIHRoZSBzeXN0ZW1pZAotICAJdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQgKyBzeXN0ZW1JZDsKLSAgCQotICAJLy8gV2hpbGUgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIGEgLi4vIG9yIC4vIGNoYW5nZQotICAJLy8gdGhlIHJlc3VsdCBhbmQgdGhlIHJlbGF0aXZlIGxvY2F0aW9uLgotICAJaW50IGxvYzsKLSAgCXdoaWxlKChsb2MgPSB0ZW1wcmVzdWx0Lmxhc3RJbmRleE9mKCIuLyIpKSAhPSAtMSkKLSAgCXsKLSAgCSAgcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcobG9jICsgMikgKyByZXN1bHQ7Ci0gIAkgIGlmKHRlbXByZXN1bHQuY2hhckF0KGxvYyAtIDEpID09ICcuJykKLSAgCSAgewotICAJICAJaWYodGVtcHJlc3VsdC5jaGFyQXQobG9jIC0gMikgPT0gJy8nKQotICAJICAJewotICAJICAJICBTdHJpbmcgdGVtcCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIGxvYyAtIDIpOwotICAJICAJICBpbnQgbG9jMiA9IHRlbXAubGFzdEluZGV4T2YoJy8nKTsKLSAgCSAgCSAgaWYobG9jMiA9PSAtMSkKLSAgCSAgCSAgewotICAJICAJICAJLy8gSWYgdGhlcmUgaXMgbm8gb3RoZXIgLyBiZWZvcmUgdGhpcyB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBzY2hlbWU6Ly4uLwotICAJICAJICAJcmVzdWx0ID0gIi4uLyIgKyByZXN1bHQ7Ci0gIAkgIAkgIAl0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0gIAkgIAkgIH0KLSAgCSAgCSAgZWxzZQotICAJICAJICB7Ci0gIAkgIAkgIAkvLyBSZW1vdmUgdGhlIHNlY3Rpb24gdGhhdCBjb21lcyBiZWZvcmUgdGhpcyBvbmUgZnJvbSB0ZW1wcmVzdWx0IHVubGVzcyBpdCdzIC4uLy4KLSAgCSAgCSAgICB0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0gIAkgIAkgICAgaW50IG51bVNlY3RzVG9SZW1vdmUgPSAxOwotICAJICAJICAgIAotICAJICAJICAgIHdoaWxlKHRlbXByZXN1bHQuZW5kc1dpdGgoIi4vIikpCi0gIAkgIAkgICAgewotICAJICAJICAgICAgaW50IHRlbXByZXNsZW4gPSB0ZW1wcmVzdWx0Lmxlbmd0aCgpOwotICAJICAJICAgICAgaWYodGVtcHJlc2xlbiA+IDIgJiYgdGVtcHJlc3VsdC5jaGFyQXQodGVtcHJlc2xlbiAtMykgPT0gJy4nKQotICAJICAJICAgICAgewotICAJICAJICAgICAgCWlmKHRlbXByZXNsZW4gPiAzICYmIHRlbXByZXN1bHQuY2hhckF0KHRlbXByZXNsZW4gLSA0KSA9PSAnLycpCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgbnVtU2VjdHNUb1JlbW92ZSsrOwotICAJICAJICAgICAgCSAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIHRlbXByZXN1bHQubGVuZ3RoKCkgLTMpOwotICAJICAJICAgICAgICB9Ci0gIAkgIAkgICAgICAJZWxzZQotICAJICAJICAgICAgCXsKLSAgCSAgCSAgICAgIAkgIGJyZWFrOwotICAJICAJICAgICAgCX0KLSAgCSAgCSAgICAgIH0KLSAgCSAgCSAgICAgIGVsc2UKLSAgCSAgCSAgICAgIHsKLSAgCSAgCSAgICAgIAlpZih0ZW1wcmVzdWx0LmNoYXJBdCh0ZW1wcmVzdWx0Lmxlbmd0aCgpIC0yKSA9PSAnLycpCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIHRlbXByZXN1bHQubGVuZ3RoKCkgLTIpOwotICAJICAJICAgICAgCX0KLSAgCSAgCSAgICAgIAllbHNlCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgYnJlYWs7Ci0gIAkgIAkgICAgICAJfQotICAJICAJICAgICAgfQotICAJICAJICAgIH0KLSAgCSAgCSAgICAvLyBSZW1vdmUgdGhlIHNlY3Rpb25zLgotICAJICAJICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1TZWN0c1RvUmVtb3ZlOyBpKyspCi0gIAkgIAkgICAgewotICAJICAJICAgICAgU3RyaW5nIHRlbXAyID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCx0ZW1wcmVzdWx0Lmxlbmd0aCgpLTEpOwotICAJICAJICAgICAgaW50IGxvYzMgPSB0ZW1wMi5sYXN0SW5kZXhPZignLycpOwotICAJICAJICAgICAgaWYobG9jMyA9PSAtMSkKLSAgCSAgCSAgICAgIHsKLSAgCSAgCSAgICAgIAlicmVhazsKLSAgCSAgCSAgICAgIH0KLSAgCSAgCSAgICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MzKzEpOwotICAJICAJICAgIH0KLSAgCSAgCSAgfSAKLSAgCSAgCX0KLSAgCSAgCWVsc2UKLSAgCSAgCXsKLSAgCSAgCSAgLy8gVGhlIFVSSSBpcyBvZiB0aGUgZm9ybSBmaWxlOi8vc29tZWRpci4uLyBzbyBjb3B5IGl0IGFzIGlzCi0gIAkgIAkgIFN0cmluZyB0ZW1wID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0JICAJICBpbnQgbG9jMiA9IHRlbXAubGFzdEluZGV4T2YoJy8nKTsKLQkgIAkgIGlmKGxvYzIgPT0gLTEpCi0JICAJICB7Ci0JICAJICAJLy8gVGhlIFVSSSBtdXN0IGxvb2sgbGlrZSBmaWxlOi4uLyBvciAuLi8gc28gY29weSBvdmVyIHRoZSB3aG9sZSB0ZW1wcmVzdWx0LgotCSAgCSAgCXJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsbG9jKzIpICsgcmVzdWx0OwotCSAgCSAgCXRlbXByZXN1bHQgPSAiIjsKLQkgIAkgIH0KLQkgIAkgIGVsc2UKLQkgIAkgIHsKLQkgIAkgIAkvLyBDb3B5IG92ZXIgdGhlIHdob2xlIHNvbWVkaXIuLi8KLQkgIAkgIAlyZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZyhsb2MyICsgMSwgdGVtcHJlc3VsdC5sZW5ndGgoKSk7Ci0JICAJICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MyKzEpOwotCSAgCSAgfQotICAJICAJfQotICAJICB9Ci0gIAkgIGVsc2UKLSAgCSAgewotICAJICAgIGlmKHRlbXByZXN1bHQuY2hhckF0KGxvYyAtMSApID09ICcvJykKLQkgIAl7Ci0gIAkgIAkgIC8vIFJlc3VsdCBpcyBvZiB0aGUgZm9ybSBmaWxlOi8vc29tZXRoaW5nLy4vc29tZXRoaW5nIHNvIHJlbW92ZSB0aGUgLi8KLSAgCSAgICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLGxvYyk7Ci0JICAJfQotICAJICAgIGVsc2UKLSAgCSAgICB7Ci0gIAkgICAgICAvLyBSZXN1bHQgVVJJIGlzIG9mIGZvcm0gZmlsZTovL3NvbWVkaXIuLyBzbyBjb3B5IG92ZXIgdGhlIHdob2xlIHNlY3Rpb24uCi0gICAgCSAgU3RyaW5nIHRlbXAgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MgLSAxKTsKLSAgCSAgCSAgaW50IGxvYzIgPSB0ZW1wLmxhc3RJbmRleE9mKCcvJyk7Ci0gIAkgIAkgIGlmKGxvYzIgPT0gLTEpCi0gIAkgIAkgIHsKLSAgCSAgCSAgCS8vIFRoZSBVUkkgbXVzdCBsb29rIGxpa2UgZmlsZTouLyBvciAuLyBzbyBjb3B5IG92ZXIgdGhlIHdob2xlIHRlbXByZXN1bHQuCi0gIAkgIAkgIAlyZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MpICsgcmVzdWx0OwotICAJICAJICAJdGVtcHJlc3VsdCA9ICIiOwotICAJICAJICB9Ci0gIAkgIAkgIGVsc2UKLSAgCSAgCSAgewotICAJICAJICAJLy8gQ29weSBvdmVyIHRoZSB3aG9sZSBzb21lZGlyLi8KLSAgCSAgCSAgCXJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKGxvYzIgKyAxLCB0ZW1wcmVzdWx0Lmxlbmd0aCgpKTsKLSAgCSAgCSAgICB0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jMisxKTsKLSAgCSAgCSAgfQotICAJICAgIH0KLSAgCSAgfQotICAJfQotICAJcmVzdWx0ID0gdGVtcHJlc3VsdCArIHJlc3VsdDsKLSAgCXJldHVybiByZXN1bHQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMjY2YzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0KLS8qKgotICogQSBkZWxlZ2F0ZSB0byBob2xkIGluZm9ybWF0aW9uIGFib3V0IGFuIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBVUklSZXNvbHZlckRlbGVnYXRlCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXNzbmFtZTsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcjsKLSAgcHJpdmF0ZSBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHJlc29sdmVyID0gbnVsbDsKLSAgCi0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gY2xhc3NuYW1lIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBVUkkgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBjbGFzc2xvYWRlciBUaGUgY2xhc3MgbG9hZGVyIHRvIHVzZSB0byBsb2FkIHRoZSBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShTdHJpbmcgY2xhc3NuYW1lLCBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikKLSAgewotICAgIHRoaXMuY2xhc3NuYW1lID0gY2xhc3NuYW1lOwotICAgIHRoaXMuY2xhc3Nsb2FkZXIgPSBjbGFzc2xvYWRlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIGRlc2NyaWJlZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIGRlc2NyaWJlZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgcHVibGljIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0gICAgaWYocmVzb2x2ZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcmVzb2x2ZXIgPSAoSUV4dGVuc2libGVVUklSZXNvbHZlciljbGFzc2xvYWRlci5sb2FkQ2xhc3MoY2xhc3NuYW1lKS5uZXdJbnN0YW5jZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb2x2ZXIgPSAoSUV4dGVuc2libGVVUklSZXNvbHZlcilnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKGNsYXNzbmFtZSkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChFeGNlcHRpb24gZTIpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODRmN2M2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgbG9nZ2VyIHRoYXQgbG9ncyB1c2luZyBBbnQncyBsb2cgbWV0aG9kLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciAKLXsKLSAgcHJpdmF0ZSBUYXNrIHRhc2sgPSBudWxsOwotCQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gYW50VGFzawotICAgKiAJCVRoZSBBbnQgdGFzayB0aGlzIGxvZ2dlciB3aWxsIGFjdCBmb3IuCi0gICAqLwotICBwdWJsaWMgQW50TG9nZ2VyKFRhc2sgYW50VGFzaykKLSAgewotICAgIHRhc2sgPSBhbnRUYXNrOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLSAgewotICAgIGludCBtc2dMZXZlbCA9IFByb2plY3QuTVNHX0VSUjsKLSAgICBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9XQVJOSU5HKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfV0FSTjsKLSAgICB9Ci0gICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9JTkZPKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfSU5GTzsKLSAgICB9Ci0gICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9WRVJCT1NFKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfVkVSQk9TRTsKLSAgICB9Ci0gICAgdGFzay5sb2cobWVzc2FnZSwgbXNnTGV2ZWwpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0gIHsKLQlsb2cobWVzc2FnZSwgc2V2ZXJpdHkpOwotCWxvZyh0aHJvd2FibGUudG9TdHJpbmcoKSwgc2V2ZXJpdHkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvRXh0ZW5zaW9uVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0V4dGVuc2lvblZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ5NDQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvRXh0ZW5zaW9uVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLS8qKgotICogQW4gZXh0ZW5zaW9uIEFudCBXU0RMIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIEV4dGVuc2lvblZhbGlkYXRvcgotewotICBwcml2YXRlIFN0cmluZyBjbGFzc25hbWUgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xhc3MoU3RyaW5nIGNsYXNzbmFtZSkKLSAgewotICAgIHRoaXMuY2xhc3NuYW1lID0gY2xhc3NuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jbGFzc25hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9Qcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjA2NTQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHByb3BlcnR5IHNldCBvbiB0aGUgV1NETCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eSBleHRlbmRzIFRhc2sgCi17Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWUgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lCi0gICAqIAkJVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQkgIAotICAvKioKLSAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQkgIAotICAvKioKLSAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogCQlUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkKLSAgewotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9VUklSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9VUklSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTQ0YTdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvVVJJUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci0KLS8qKgotICogVGhlIFVSSVJlc29sdmVyIHRhc2sgYWxsb3dzIHNwZWNpZnlpbmcgYW4gZXh0ZW5zaW9uIFVSSSByZXNvbHZlciB3aXRoCi0gKiB0aGUgV1NETFZhbGlkYXRlIEFudCB0YXNrLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXIgZXh0ZW5kcyBUYXNrCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXp6ID0gbnVsbDsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXp6KQotICB7Ci0gICAgdGhpcy5jbGF6eiA9IGNsYXp6OwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBleHRlbnNpb24gVVJJIHJlc29sdmVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIFVSSSByZXNvbHZlci4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkKLSAgewotICAgIHJldHVybiBjbGF6ejsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NGY3NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuRGlyZWN0b3J5U2Nhbm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRFRETG9jYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRmlsZVNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5QYXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlhNTENhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLQotLyoqCi0gKiBBbiBBbnQgdGFzayB0byBydW4gV1NETCB2YWxpZGF0aW9uIG9uIGEgZmlsZSBvciBhIHNldCBvZiBmaWxlcy4KLSAqIAotICogT3B0aW9ucwotICogLSBmaWxlIC0gdGhlIGZpbGUgdG8gcnVuIHZhbGlkYXRpb24gb24gKG9wdGlvbmFsIGlmIGZpbGVzZXQgaXMgdXNlZCkKLSAqIC0gZmFpbG9uZXJyb3IgLSBmYWlsIHRoZSBidWlsZCBwcm9jZXNzIG9uIHRoZSBmaXJzdCBmaWxlIHdpdGggYW4gZXJyb3IKLSAqIAotICogU3VwcG9ydGVkIE5lc3RlZCBFbGVtZW50cwotICogLSB4bWxjYXRhbG9nIC0gYW4geG1sIGNhdGFsb2cKLSAqIC0gZHRkICAgICAgICAtIGEgZHRkIHNwZWNpZmljYXRpb24gYXMgd291bGQgYXBwZWFyIGluIGFuIHhtbGNhdGFsb2cKLSAqIC0gc2NoZW1hICAgICAtIGEgc2NoZW1hIHNwZWNpZmljYXRpb24gYXMgd291bGQgYXBwZWFyIGluIGFuIHhtbGNhdGFsb2cKLSAqIC0gZW50aXR5ICAgICAtIGFuIGVudGl0eSBzcGVjaWZpY2F0aW9uIGFzIHdvdWxkIGFwcGVhciBpbiBhbiB4bWxjYXRhbG9nCi0gKiAtIGZpbGVzZXQgICAgLSBhIHNldCBvZiBmaWxlcyB0byB2YWxpZGF0ZQotICogLSB3c2RsMTF2YWxpZGF0b3IgLSBhbiBleHRlbnNpb24gV1NETCAxLjEgdmFsaWRhdG9yCi0gKiAtIHVyaXJlc29sdmVyIC0gYW4gZXh0ZW5zaW9uIFVSSSByZXNvbHZlcgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGUgZXh0ZW5kcyBUYXNrCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVUlfUFJPUEVSVElFUyA9ICJ2YWxpZGF0ZXdzZGx1aSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX1BST1BFUlRJRVMgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5XU0RMX1ZBTElEQVRPUl9QUk9QRVJUSUVTX0ZJTEU7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0ZJTEVfU1BFQ0lGSUVEID0gIl9FUlJPUl9OT19GSUxFX1NQRUNJRklFRCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiA9ICJfVUlfSU5GT1JNQVRJT05fREVMSU1JVEVSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfQUNUSU9OX1ZBTElEQVRJTkdfRklMRSA9ICJfVUlfQUNUSU9OX1ZBTElEQVRJTkdfRklMRSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX1VJX0VSUk9SX01BUktFUiA9ICJfVUlfRVJST1JfTUFSS0VSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfV0FSTklOR19NQVJLRVIgPSAiX1VJX1dBUk5JTkdfTUFSS0VSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfVkFMSUQgPSAiX1VJX1ZBTElEIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfSU5WQUxJRCA9ICJfVUlfSU5WQUxJRCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfRklMRSA9ICJfRVhDX1VOQUJMRV9UT19WQUxJREFURV9GSUxFIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVhDX1dTRExfRkFJTF9PTl9FUlJPUiA9ICJfRVhDX1dTRExfRkFJTF9PTl9FUlJPUiI7Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOwotCi0gIC8vIEdsb2JhbCBWYXJzCi0gIHByb3RlY3RlZCBMaXN0IGZpbGVzZXRzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGUgPSBudWxsOwotICBwcm90ZWN0ZWQgUGF0aCBjbGFzc3BhdGg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgeHNkRGlyZWN0b3J5ID0gbnVsbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZmFpbE9uRXJyb3IgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIFhNTENhdGFsb2cgZ2xvYmFsWE1MQ2F0YWxvZyA9IG5ldyBYTUxDYXRhbG9nKCk7Ci0gIHByb3RlY3RlZCBMaXN0IHdzZGwxMXZhbGlkYXRvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IGV4dHZhbGlkYXRvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IGV4dFVSSVJlc29sdmVycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgcHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdGUoKQotICB7Ci0JTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihuZXcgQW50TG9nZ2VyKHRoaXMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZWxscyB0aGUgV1NETCB2YWxpZGF0ZSB0YXNrIHRvIGZhaWwgdGhlIGJ1aWxkIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgotICAgKiAKLSAgICogQHBhcmFtIGZhaWxPbkVycm9yIFdoZXRoZXIgdG8gZmFpbCBvbiBlcnJvciBvciBub3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsT25FcnJvcihib29sZWFuIGZhaWxPbkVycm9yKQotICB7Ci0gICAgdGhpcy5mYWlsT25FcnJvciA9IGZhaWxPbkVycm9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBiYXNlIHNjaGVtYSBmaWxlcyBmb3IgdGhlIGNhdGFsb2cgYXJlIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZGlyIC0gdGhlIGRpcmVjdG9yeSBvZiB0aGUgYmFzZSBzY2hlbWEgZmlsZXMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjaGVtYURpcihTdHJpbmcgZGlyKQotICB7Ci0gICAgeHNkRGlyZWN0b3J5ID0gZGlyOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBhIGZpbGUgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlIC0gYSBmaWxlIHRvIHJ1biB2YWxpZGF0aW9uIG9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGaWxlKFN0cmluZyBmaWxlKQotICB7Ci0gICAgdGhpcy5maWxlID0gZmlsZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBzZXQgb2YgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIEZpbGVTZXQgb2YgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbgotICAgKi8KLSAgcHVibGljIEZpbGVTZXQgY3JlYXRlRmlsZXNldCgpCi0gIHsKLSAgICBGaWxlU2V0IGZpbGVzZXQgPSBuZXcgRmlsZVNldCgpOwotICAgIGZpbGVzZXRzLmFkZChmaWxlc2V0KTsKLSAgICByZXR1cm4gZmlsZXNldDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gWE1MIGNhdGFsb2cgdG8gdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSBjYXRhbG9nIC0gdGhlIGNhdGFsb2cgdG8gYWRkIHRvIHRoZSB2YWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRYTUxDYXRhbG9nKFhNTENhdGFsb2cgY2F0YWxvZykKLSAgewotICAgIGdsb2JhbFhNTENhdGFsb2cuYWRkQ29uZmlndXJlZFhNTENhdGFsb2coY2F0YWxvZyk7Ci0gIH0KLSAgLyoqCi0gICAqIEFkZCBhbiBleHRlbnNpb24gdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGV4dFZhbCBUaGUgZXh0ZW5zaW9uIHZhbGlkYXRvciB0byBhZGQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25maWd1cmVkRXh0ZW5zaW9uVmFsaWRhdG9yKEV4dGVuc2lvblZhbGlkYXRvciBleHRWYWwpCi0gIHsKLSAgICBleHR2YWxpZGF0b3JzLmFkZChleHRWYWwpOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGFuIGV4dGVuc2lvbiBXU0RMIDEuMSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gZXh0VmFsIFRoZSBleHRlbnNpb24gV1NETCAxLjEgdmFsaWRhdG9yIHRvIGFkZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRXU0RMMTFWYWxpZGF0b3IoRXh0ZW5zaW9uVmFsaWRhdG9yIGV4dFZhbCkKLSAgewotICAgIHdzZGwxMXZhbGlkYXRvcnMuYWRkKGV4dFZhbCk7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3cgc3BlY2lmaWNhdGlvbiBvZiBhbiBlbnRpdHkgb3V0c2lkZSBvZiBhbiBYTUxDYXRhbG9nLgotICAgKiAKLSAgICogQHJldHVybiBhIERURExvY2F0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBlbnRpdHkKLSAgICoqLwotICBwdWJsaWMgRFRETG9jYXRpb24gY3JlYXRlRW50aXR5KCkKLSAgewotICAgIERURExvY2F0aW9uIGR0ZExvYyA9IG5ldyBEVERMb2NhdGlvbigpOwotICAgIGdsb2JhbFhNTENhdGFsb2cuYWRkRW50aXR5KGR0ZExvYyk7Ci0gICAgcmV0dXJuIGR0ZExvYzsKLSAgfQotCi0gIC8qKgotICAgKiBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIGEgRFREIG91dHNpZGUgb2YgYW4gWE1MQ2F0YWxvZy4KLSAgICogCi0gICAqIEByZXR1cm4gYSBEVERMb2NhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgRFRECi0gICAqKi8KLSAgcHVibGljIERURExvY2F0aW9uIGNyZWF0ZURURCgpCi0gIHsKLSAgICBEVERMb2NhdGlvbiBkdGRMb2MgPSBuZXcgRFRETG9jYXRpb24oKTsKLSAgICBnbG9iYWxYTUxDYXRhbG9nLmFkZEVudGl0eShkdGRMb2MpOwotICAgIHJldHVybiBkdGRMb2M7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBVUklSZXNvbHZlciBleHRlbnNpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIEEgVVJJUmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgY3JlYXRlVVJJUmVzb2x2ZXIoKQotICB7Ci0gICAgVVJJUmVzb2x2ZXIgdXJpcmVzID0gbmV3IFVSSVJlc29sdmVyKCk7Ci0gICAgZXh0VVJJUmVzb2x2ZXJzLmFkZCh1cmlyZXMuZ2V0Q2xhc3NOYW1lKCkpOwotICAgIHJldHVybiB1cmlyZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgV1NETCB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvcGVydHkgCi0gICAqIAkJVGhlIHByb3BlcnR5IHRvIGFkZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRQcm9wZXJ0eShQcm9wZXJ0eSBwcm9wZXJ0eSkKLSAgewotICAgIHByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4gVGFrZXMgdGhlIGZpbGUgYW5kIGZpbGVzZXQKLSAgICogYW5kIGNyZWF0ZXMgdGhlIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHZhbGlkYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgZ2V0RmlsZUxpc3QoKQotICB7Ci0gICAgTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIGlmIGEgc3BlY2lmaWMgZmlsZSB3YXMgc3BlY2lmaWVkIGFkZCBpdCB0byB0aGUgbGlzdAotICAgIGlmIChmaWxlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKGZpbGUpOwotICAgICAgICBmaWxlcy5hZGQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIEZpbGUgdGhlRmlsZSA9IG5ldyBGaWxlKGZpbGUpOwotICAgICAgICBpZighdGhlRmlsZS5pc0Fic29sdXRlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVGaWxlID0gbmV3IEZpbGUoZ2V0UHJvamVjdCgpLmdldEJhc2VEaXIoKSwgZmlsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGFic0ZpbGUgPSB0aGVGaWxlLnRvU3RyaW5nKCk7IAotICAgICAgICBpZighYWJzRmlsZS5zdGFydHNXaXRoKCJmaWxlOiIpKQotICAgICAgICB7Ci0gICAgICAgICAgYWJzRmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBhYnNGaWxlOwotICAgICAgICB9Ci0gICAgICAgIGFic0ZpbGUgPSBhYnNGaWxlLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICBmaWxlcy5hZGQoYWJzRmlsZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gZ28gdGhyb3VnaCBhbGwgZmlsZXNldHMgc3BlY2lmaWVkIGFuZCBhZGQgYWxsIHRoZSBmaWxlcyB0byB0aGUgbGlzdAotICAgIEl0ZXJhdG9yIGZzSXRlciA9IGZpbGVzZXRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGZzSXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRmlsZVNldCBmaWxlc2V0ID0gKEZpbGVTZXQpZnNJdGVyLm5leHQoKTsKLSAgICAgIERpcmVjdG9yeVNjYW5uZXIgZHMgPSBmaWxlc2V0LmdldERpcmVjdG9yeVNjYW5uZXIoZmlsZXNldC5nZXRQcm9qZWN0KCkpOwotICAgICAgU3RyaW5nIGJhc2VkaXIgPSBkcy5nZXRCYXNlZGlyKCkudG9TdHJpbmcoKSArIEZpbGUuc2VwYXJhdG9yOwotCi0gICAgICBTdHJpbmdbXSBmaWxlbGlzdCA9IGRzLmdldEluY2x1ZGVkRmlsZXMoKTsKLSAgICAgIGludCBudW1GaWxlcyA9IGZpbGVsaXN0Lmxlbmd0aDsKLSAgICAgIGlmIChmaWxlcyAhPSBudWxsICYmIG51bUZpbGVzID4gMCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1GaWxlczsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGFic0ZpbGUgPSBGSUxFX1BST1RPQ09MICsgYmFzZWRpciArIGZpbGVsaXN0W2ldOwotICAgICAgICAgIGFic0ZpbGUgPSBhYnNGaWxlLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICAgIGZpbGVzLmFkZChhYnNGaWxlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmlsZXM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzayNleGVjdXRlKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB0aHJvd3MgQnVpbGRFeGNlcHRpb24KLSAgewotICAgIC8vIHRoZSByZXNvdXJjZSBidW5kbGVzIGZvciB0aGUgdWkgYW5kIHZhbGlkYXRvciBhcmUgbmVlZGVkCi0gICAgTWVzc2FnZUdlbmVyYXRvciBtZXNzR2VuID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBSZXNvdXJjZUJ1bmRsZSB1aVJCID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFVJX1BST1BFUlRJRVMpOwotICAgICAgbWVzc0dlbiA9IG5ldyBNZXNzYWdlR2VuZXJhdG9yKHVpUkIpOwotICAgIH0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gaWYgdGhlIHJlc291cmNlIGJ1bmRsZXMgY2FuJ3QgYmUgb3BlbmVkIHdlIGNhbid0IHJlcG9ydCBlcnJvciBzbyB0aHJvdyBhbiBleGNlcHRpb24KLSAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbigiVW5hYmxlIHRvIG9wZW4gcmVzb3VyY2UgYnVuZGxlLiAiICsgZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBYTUwgY2F0YWxvZy4KLSAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLnNldEV4dGVuc2lvblhNTENhdGFsb2coWE1MQ2F0YWxvZ0ltcGwuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIFhNTENhdGFsb2dJbXBsIHhtbENhdGFsb2cgPSAoWE1MQ2F0YWxvZ0ltcGwpb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZy5nZXRFeHRlbnNpb25DYXRhbG9nSW5zdGFuY2UoKTsKLSAgICB4bWxDYXRhbG9nLmFkZFhNTENhdGFsb2coZ2xvYmFsWE1MQ2F0YWxvZyk7Ci0gICAgCi0gICAgV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLSAgICAKLSAgICBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLSAgICAvLyBTZXQgdGhlIHByb3BlcnRpZXMuCi0gICAgSXRlcmF0b3IgcHJvcGVydHlJdGVyID0gcHJvcGVydGllcy5pdGVyYXRvcigpOwotICAgIHdoaWxlKHByb3BlcnR5SXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSAoUHJvcGVydHkpcHJvcGVydHlJdGVyLm5leHQoKTsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0UHJvcGVydHkocHJvcGVydHkuZ2V0TmFtZSgpLCBwcm9wZXJ0eS5nZXRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgCQotICAgIC8vIFNldCB0aGUgZXh0ZW5zaW9uIFVSSVJlc29sdmVycy4KLSAgICBJdGVyYXRvciByZXNvbHZlcnNJdGVyID0gZXh0VVJJUmVzb2x2ZXJzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUocmVzb2x2ZXJzSXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgU3RyaW5nIHJlc29sdmVyQ2xhc3MgPSAoU3RyaW5nKXJlc29sdmVyc0l0ZXIubmV4dCgpOwotICAgICAgd3NkbFZhbGlkYXRvci5hZGRVUklSZXNvbHZlcihuZXcgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShyZXNvbHZlckNsYXNzLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpLmdldFVSSVJlc29sdmVyKCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gdmFsaWRhdGUuCi0gICAgTGlzdCBmaWxlcyA9IGdldEZpbGVMaXN0KCk7Ci0gICAgCi0gICAgLy8gUmVnaXN0ZXIgdGhlIFdTREwgMS4xIGV4dGVuc2lvbiB2YWxpZGF0b3JzLgotICAgIEl0ZXJhdG9yIHdzZGwxMWV4dEl0ZXIgPSB3c2RsMTF2YWxpZGF0b3JzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUod3NkbDExZXh0SXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaW9uVmFsaWRhdG9yIGV4dFZhbCA9IChFeHRlbnNpb25WYWxpZGF0b3Ipd3NkbDExZXh0SXRlci5uZXh0KCk7Ci0gICAgICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKGV4dFZhbC5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKGV4dFZhbC5nZXROYW1lc3BhY2UoKSwgZGVsZWdhdGUpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZWdpc3RlciB0aGUgZXh0ZW5zaW9uIHZhbGlkYXRvcnMuCi0gICAgSXRlcmF0b3IgZXh0SXRlciA9IGV4dHZhbGlkYXRvcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShleHRJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpb25WYWxpZGF0b3IgZXh0VmFsID0gKEV4dGVuc2lvblZhbGlkYXRvcilleHRJdGVyLm5leHQoKTsKLSAgICAgIENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKGV4dFZhbC5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETEV4dGVuc2lvblZhbGlkYXRvcihleHRWYWwuZ2V0TmFtZXNwYWNlKCksIGRlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkgZmlsZXMgdG8gdmFsaWRhdGUuCi0gICAgaWYgKGZpbGVzID09IG51bGwgfHwgZmlsZXMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIGxvZyhtZXNzR2VuLmdldFN0cmluZyhfRVJST1JfTk9fRklMRV9TUEVDSUZJRUQpLCBQcm9qZWN0Lk1TR19FUlIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh4c2REaXJlY3RvcnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLmFkZFNjaGVtYURpcih4c2REaXJlY3RvcnkpOwotICAgIH0KLQotICAgIC8vIFZhbGlkYXRlIGFsbCB0aGUgZmlsZXMgc3BlY2lmaWVkLgotICAgIEl0ZXJhdG9yIGlGaWxlcyA9IGZpbGVzLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBDb21tb24gc3RyaW5ncyBuZWVkZWQgaW4gdmFsaWRhdGlvbiBvdXRwdXQuCi0gICAgU3RyaW5nIGluZm9EZWxpbSA9IG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIpOwotICAgIFN0cmluZyB2YWxpZCA9IG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9WQUxJRCk7Ci0gICAgU3RyaW5nIGludmFsaWQgPSBtZXNzR2VuLmdldFN0cmluZyhfVUlfSU5WQUxJRCk7Ci0gICAgU3RyaW5nIGVycm9ybWFya2VyID0gbWVzc0dlbi5nZXRTdHJpbmcoX1VJX0VSUk9SX01BUktFUik7Ci0gICAgU3RyaW5nIHdhcm5pbmdtYXJrZXIgPSBtZXNzR2VuLmdldFN0cmluZyhfVUlfV0FSTklOR19NQVJLRVIpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG51bGw7Ci0gICAgYm9vbGVhbiBub3R2YWxpZCA9IHRydWU7Ci0gICAgd2hpbGUgKGlGaWxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgbm90dmFsaWQgPSBmYWxzZTsKLSAgICAgIFN0cmluZyBmaWxlbmFtZSA9IChTdHJpbmcpaUZpbGVzLm5leHQoKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICByZXN1bHQuYXBwZW5kKGluZm9EZWxpbSkuYXBwZW5kKCJcbiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9BQ1RJT05fVkFMSURBVElOR19GSUxFLCBmaWxlbmFtZSkpLmFwcGVuZCgiIC0gIik7Ci0KLSAgICAgICAgSVZhbGlkYXRpb25SZXBvcnQgdmFsUmVwb3J0ID0gd3NkbFZhbGlkYXRvci52YWxpZGF0ZShmaWxlbmFtZSwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0KLSAgICAgICAgSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMgPSB2YWxSZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0KLSAgICAgICAgaWYgKCF2YWxSZXBvcnQuaGFzRXJyb3JzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQuYXBwZW5kKHZhbGlkKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQuYXBwZW5kKGludmFsaWQpOwotICAgICAgICAgIG5vdHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpLmFwcGVuZChpbmZvRGVsaW0pLmFwcGVuZCgiXG4iKTsKLQotICAgICAgICByZXN1bHQuYXBwZW5kKHJlcG9ydE1lc3NhZ2VzKG1lc3NhZ2VzLCBlcnJvcm1hcmtlciwgd2FybmluZ21hcmtlcikpOwotCi0gICAgICAgIGlmKG5vdHZhbGlkKQotICAgICAgICB7Ci0gICAgICAgICAgbG9nKHJlc3VsdC50b1N0cmluZygpLCBQcm9qZWN0Lk1TR19FUlIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGxvZyhyZXN1bHQudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgbG9nKG1lc3NHZW4uZ2V0U3RyaW5nKF9FWENfVU5BQkxFX1RPX1ZBTElEQVRFX0ZJTEUsIGZpbGVuYW1lLCBlKSwgUHJvamVjdC5NU0dfRVJSKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5vdHZhbGlkICYmIGZhaWxPbkVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVG8gZmFpbCBvbiBlcnJvciwgdGhyb3cgYSBidWlsZCBleGNlcHRpb24uCi0gICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKG1lc3NHZW4uZ2V0U3RyaW5nKF9FWENfV1NETF9GQUlMX09OX0VSUk9SKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLnJlc2V0KCk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBzdHJpbmcgd2l0aCBmb3JtYXR0ZWQgb3V0cHV0IGZvciB0aGUgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIGVycm9ybWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciBlcnJvciBtZXNzYWdlcy4KLSAgICogQHBhcmFtIHdhcm5pbmdtYXJrZXIgVGhlIG1hcmtlciB0byB1c2UgZm9yIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgd2l0aCB0aGUgZm9ybWF0dGVkIG91dHB1dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVwb3J0TWVzc2FnZXMoSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMsIFN0cmluZyBlcnJvcm1hcmtlciwgU3RyaW5nIHdhcm5pbmdtYXJrZXIpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgcmV0dXJuQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgaWYgKG1lc3NhZ2VzID09IG51bGwpCi0gICAgICByZXR1cm4gcmV0dXJuQnVmZmVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0gICAgZm9yKGludCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyBpKyspCi0gICAgewotICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKLQotICAgICAgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSBlcnJvcm1hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IHdhcm5pbmdtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSAiIjsKLSAgICAgIH1pZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUikKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGVycm9ybWFya2VyOwotICAgICAgfQotICAgICAgZWxzZSBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gd2FybmluZ21hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9ICIiOwotICAgICAgfWlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gZXJyb3JtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSB3YXJuaW5nbWFya2VyOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gIiI7Ci0gICAgICB9aWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSBlcnJvcm1hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IHdhcm5pbmdtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSAiIjsKLSAgICAgIH0KLSAgICAgIHJldHVybkJ1ZmZlcgotICAgICAgICAuYXBwZW5kKHByZWZpeCkKLSAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRMaW5lKCkpCi0gICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0Q29sdW1uKCkpCi0gICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKQotICAgICAgICAuYXBwZW5kKCJcbiIpOwotICAgIH0KLSAgICByZXR1cm4gcmV0dXJuQnVmZmVyLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1hNTENhdGFsb2dJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1hNTENhdGFsb2dJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmY2JkZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9YTUxDYXRhbG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRFRETG9jYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuWE1MQ2F0YWxvZzsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV1NETCBWYWxpZGF0b3IncyBYTUwgQ2F0YWxvZyB0aGF0IHVzZXMgdGhlIFhNTCBDYXRhbG9nCi0gKiBmcm9tIGFudC4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dJbXBsIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZwotewotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZyB4bWxDYXRhbG9nID0gbmV3IFhNTENhdGFsb2coKTsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nI2FkZEVudHJ5VG9DYXRhbG9nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRyeVRvQ2F0YWxvZyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAgIERURExvY2F0aW9uIHJlc0xvYyA9IG5ldyBEVERMb2NhdGlvbigpOwotICAgIHJlc0xvYy5zZXRMb2NhdGlvbihzeXN0ZW1JZCk7Ci0gICAgcmVzTG9jLnNldFB1YmxpY0lkKHB1YmxpY0lkKTsKLSAgICB4bWxDYXRhbG9nLmFkZEVudGl0eShyZXNMb2MpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZyNyZXNvbHZlRW50aXR5TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgU3RyaW5nIHJlc29sdmVkSWQgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTb3VyY2UgaXMgPSB4bWxDYXRhbG9nLnJlc29sdmVFbnRpdHkocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICAgIGlmIChpcyAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXNvbHZlZElkID0gaXMuZ2V0U3lzdGVtSWQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIHJlc291cmNlIGNhbid0IGJlIHJlc29sdmVkLgotICAgIH0KLSAgICAvLyBuZWVkcyB0byByZXR1cm4gbnVsbCBpZiBpdCBjYW4ndCByZXNvbHZlIHRoZSBpZAotICAgIGlmIChyZXNvbHZlZElkICE9IG51bGwgJiYgcmVzb2x2ZWRJZC5lcXVhbHMoIiIpKQotICAgIHsKLSAgICAgIHJlc29sdmVkSWQgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZWRJZDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYSBjb25maWd1cmVkIFhNTCBDYXRhbG9nIHRvIHRoaXMgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBjYXRhbG9nIEEgY29uZmlndXJlZCBYTUwgY2F0YWxvZyB0byBhZGQgdG8gdGhpcyBjYXRhbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkWE1MQ2F0YWxvZyhYTUxDYXRhbG9nIGNhdGFsb2cpCi0gIHsKLSAgICB4bWxDYXRhbG9nLmFkZENvbmZpZ3VyZWRYTUxDYXRhbG9nKGNhdGFsb2cpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L0xvZzRqTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9Mb2c0akxvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGEyMjRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L0xvZzRqTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgY3VzdG9tIFdTREwgdmFsaWRhdG9yIGxvZ2dlciB0aGF0IHBhc3NlcyBsb2dnaW5nIGV2ZW50cyB0byBsb2c0ai4KLSAqLwotcHVibGljIGNsYXNzIExvZzRqTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciAKLXsKLSAgLy8gVGhpcyBjbGFzcyBpcyBpbXBsZW1lbnRlZCB1c2luZyByZWZsZWN0aW9uIHRvIGF2b2lkIGEgY29taWxhdGlvbiBkZXBlbmRlbmN5Ci0gIC8vIG9uIGxvZzRqLgotICBwcm90ZWN0ZWQgT2JqZWN0IGxvZ2dlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgZXJyb3IxID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCB3YXJuMSA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgaW5mbzEgPSBudWxsOwotICBwcm90ZWN0ZWQgTWV0aG9kIGRlYnVnMSA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgZXJyb3IyID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCB3YXJuMiA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgaW5mbzIgPSBudWxsOwotICBwcm90ZWN0ZWQgTWV0aG9kIGRlYnVnMiA9IG51bGw7Ci0gIAotICBwdWJsaWMgTG9nNGpMb2dnZXIoKQotICB7Ci0JdHJ5Ci0gICAgewotCSAgQ2xhc3MgbG9nZ2VyQ2xhc3MgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKCJvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlciIpOwotCSAgQ2xhc3MgY2F0ZWdvcnlDbGFzcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoIm9yZy5hcGFjaGUubG9nNGouQ2F0ZWdvcnkiKTsKLQkgIE1ldGhvZCBnZXRMb2dnZXIgPSBsb2dnZXJDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZ2V0TG9nZ2VyIiAsIG5ldyBDbGFzc1tde0NsYXNzLmNsYXNzfSk7Ci0JICBsb2dnZXIgPSBnZXRMb2dnZXIuaW52b2tlKGxvZ2dlckNsYXNzLCBuZXcgT2JqZWN0W117V1NETFZhbGlkYXRlLmNsYXNzfSk7Ci0JICBlcnJvcjEgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJlcnJvciIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIHdhcm4xID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgid2FybiIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIGluZm8xID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiaW5mbyIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIGRlYnVnMSA9IGNhdGVnb3J5Q2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlYnVnIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzc30pOwotCSAgZXJyb3IyID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZXJyb3IiICwgbmV3IENsYXNzW117T2JqZWN0LmNsYXNzLCBUaHJvd2FibGUuY2xhc3N9KTsKLQkgIHdhcm4yID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgid2FybiIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3MsIFRocm93YWJsZS5jbGFzc30pOwotCSAgaW5mbzIgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJpbmZvIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzcywgVGhyb3dhYmxlLmNsYXNzfSk7Ci0JICBkZWJ1ZzIgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJkZWJ1ZyIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3MsIFRocm93YWJsZS5jbGFzc30pOwotCX0KLQljYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpCi0JewotCSAgU3lzdGVtLmVyci5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIExvZzRqIExvZ2dlci4gRW5zdXJlIExvZzRKIGlzIG9uIHRoZSBjbGFzc3BhdGguIik7IAotCX0KLQljYXRjaChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkKLQl7Ci0JCQotCX0KLQljYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpCi0JewotCQkKLQl9Ci0JY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotCXsKLQkJCi0JfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLSAgewotCWlmKGxvZ2dlciAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIGVycm9yMS5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZX0pOwotCQl9Ci0gICAgICAgIGVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLSAgICAgICAgewotICAgICAgICAgIHdhcm4xLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlfSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9JTkZPKQotICAgICAgICB7Ci0gICAgICAgICAgaW5mbzEuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2V9KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX1ZFUkJPU0UpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWJ1ZzEuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2V9KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgfQotICAgICAgY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLiAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0gIHsKLQlpZihsb2dnZXIgIT0gbnVsbCkKLQl7Ci0JICB0cnkKLQkgIHsKLQkgICAgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfRVJST1IpCi0JICAgIHsKLQkJICBlcnJvcjIuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2UsIHRocm93YWJsZX0pOwotCSAgICB9Ci0JICAgIGVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQkgICAgewotCQkgIHdhcm4yLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlLCB0aHJvd2FibGV9KTsKLQkgICAgfQotCSAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0lORk8pCi0JICAgIHsKLQkJICBpbmZvMi5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZSwgdGhyb3dhYmxlfSk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9WRVJCT1NFKQotCSAgICB7Ci0JICAgICAgZGVidWcyLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlLCB0aHJvd2FibGV9KTsKLQkgICAgfQotCSAgfQotCSAgY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotCSAgewotCQkvLyBEbyBub3RoaW5nLgotCSAgfQotCSAgY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotCSAgewotCQkvLyBEbyBub3RoaW5nLiAgCi0JICB9Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTU3YmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2dFbnRpdHlIb2xkZXI7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC5TdHJpbmdVdGlsczsKLQotLyoqCi0gKiBBIGNvbW1hbmRlIGxpbmUgdG9vbCB0byBydW4gV1NETCBWYWxpZGF0aW9uIG9uIGEgc2luZ2xlIG9yIG11bHRpcGxlIGZpbGVzLgotICogCi0gKiBPcHRpb25zCi0gKiAtc2NoZW1hRGlyIGRpcmVjdG9yeSAgICAgICA6IGEgZGlyZWN0b3J5IG9mIHNjaGVtYXMgdG8gbG9hZCBpbnRvIHRoZSBjYXRhbG9nCi0gKiAtc2NoZW1hIG5hbWVzcGFjZSBsb2NhdGlvbiA6IGEgc2NoZW1hIHRvIGxvYWQgaW50byB0aGUgcmVnaXN0cnkKLSAqIC13c2RsMTF2IGNsYXNzbmFtZSBuYW1lc3BhY2UgcmVzb3VyY2VidW5kbGUgOiByZWdpc3RlciBhIFdTREwgMS4xIGV4dGVuc2lvbiB2YWxpZGF0b3IKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gbG9hZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZSB3aXRoIHRoZSBnaXZlbiByZXNvdXJjZWJ1bmRsZQotICogLXdzaXYgdmFsaWRhdG9yQ2xhc3MgbmFtZXNwYWNlIHByb3BlcnRpZXNmaWxlIDogcmVnaXN0ZXIgYSBXUy1JIHZhbGlkYXRvcgotICogLXVyaXJlc29sdmVyIFVSSVJlc29sdmVyQ2xhc3MgOiByZWdpc3RlciBhbiBleHRlbnNpb24gVVJJIHJlc29sdmVyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGUKLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZTovLy8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX1BST1BFUlRJRVMgPQotICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLldTRExfVkFMSURBVE9SX1BST1BFUlRJRVNfRklMRTsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1dTREwxMVZBTCA9ICItd3NkbDExdiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX0VYVFZBTCA9ICItZXh0diI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1NDSEVNQURJUiA9ICItc2NoZW1hRGlyIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fU0NIRU1BID0gIi1zY2hlbWEiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9VUklSRVNPTFZFUiA9ICItdXJpcmVzb2x2ZXIiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9MT0dHRVIgPSAiLWxvZ2dlciI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1BST1BFUlRZID0gIi1EIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fVkVSQk9TRSA9ICItdmVyYm9zZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1ZFUkJPU0VfU0hPUlQgPSAiLXYiOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUklOR19FTVBUWSA9ICIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX1NQQUNFID0gIiAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX0RBU0ggPSAiLSI7Ci0gIAotICBTdHJpbmcgd29ya2luZ2RpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKTsKLSAgCi0gIC8vcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gIHByb3RlY3RlZCBXU0RMVmFsaWRhdG9yIHdzZGxWYWxpZGF0b3IgPSBudWxsOwotICBwcm90ZWN0ZWQgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCB3c2RsRmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHZhbGlkYXRvclJCID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMVmFsaWRhdGUoKQotICB7Ci0gIAl3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLSAgCWNvbmZpZ3VyYXRpb24gPSBuZXcgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gIAkKLSAgICB0cnkKLSAgICB7Ci0gICAgICB2YWxpZGF0b3JSQiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShWQUxJREFUT1JfUFJPUEVSVElFUyk7Ci0gICAgfQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJWYWxpZGF0aW9uIGZhaWxlZDogVW5hYmxlIHRvIGxvYWQgdGhlIFdTREwgdmFsaWRhdG9yIHByb3BlcnRpZXMgZmlsZS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGVzIHNwZWNpZmllZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlKCkKLSAgewotCUlMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpOwotCQotCWludCBudW1JbnZhbGlkID0gMDsKLQotCUl0ZXJhdG9yIGZpbGVzSXRlciA9IHdzZGxGaWxlcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChmaWxlc0l0ZXIuaGFzTmV4dCgpKQotCXsKLQkgIFN0cmluZyB3c2RsRmlsZSA9IChTdHJpbmcpZmlsZXNJdGVyLm5leHQoKTsKLQkgIElWYWxpZGF0aW9uUmVwb3J0IHZhbFJlcG9ydCA9IHZhbGlkYXRlRmlsZSh3c2RsRmlsZSk7Ci0KLQkgIGlmKHZhbFJlcG9ydC5oYXNFcnJvcnMoKSkKLQkgIHsKLQkgICAgbnVtSW52YWxpZCsrOwotCSAgICBsb2dnZXIubG9nKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9GSUxFX0lOVkFMSUQsIG5ldyBPYmplY3RbXXt3c2RsRmlsZX0pLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkgICAgLy9sb2dnZXIubG9nKFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIsIElMb2dnZXIuU0VWX0VSUk9SKTsKLQkgICAgbG9nZ2VyLmxvZyhnZXRNZXNzYWdlcyh2YWxSZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkpLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkgIH0KLQkgIGVsc2UgaWYodmVyYm9zZSkKLQkgIHsKLQkgICAgbG9nZ2VyLmxvZyhNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfRklMRV9WQUxJRCwgbmV3IE9iamVjdFtde3dzZGxGaWxlfSksIElMb2dnZXIuU0VWX1ZFUkJPU0UpOwotCSAgfQotCX0KLSAgICAKLSAgICAvLyBMb2cgdGhlIHN1bW1hcnkuCi0gICAgbG9nZ2VyLmxvZyhNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfVkFMSURBVElPTl9TVU1NQVJZLCBuZXcgT2JqZWN0W117bmV3IEludGVnZXIod3NkbEZpbGVzLnNpemUoKSksIG5ldyBJbnRlZ2VyKG51bUludmFsaWQpfSksIElMb2dnZXIuU0VWX0lORk8pOwotICB9Ci0KLSAgLyoqCi0gICAqIFJ1biBXU0RMIHZhbGlkYXRpb24gb24gYSBnaXZlbiBmaWxlLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIAotICAgKiAJCVRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIElWYWxpZGF0aW9uUmVwb3J0IHZhbGlkYXRlRmlsZShTdHJpbmcgZmlsZW5hbWUpCi0gIHsJCi0gICAgLy8gUmVzb2x2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUuCi0gICAgU3RyaW5nIGZpbGVsb2NhdGlvbiA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMIGZpbGVVUkwgPSBTdHJpbmdVdGlscy5nZXRVUkwobmV3IFVSTChGSUxFX1BSRUZJWCArIHdvcmtpbmdkaXIgKyAiLyIpLCBmaWxlbmFtZSk7Ci0gICAgICBmaWxlbG9jYXRpb24gPSBmaWxlVVJMLnRvRXh0ZXJuYWxGb3JtKCk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBEbyBub3RoaW5nLiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCBoYW5kbGUgdGhlIGVycm9yLgotICAgICAgLy9Mb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9FUlJPUl9VTkFCTEVfVE9fUkVBRF9GSUxFLCBuZXcgT2JqZWN0W117ZmlsZW5hbWV9KSwgSUxvZ2dlci5TRVZfRVJST1IpOwotICAgIH0KLSAgICAKLSAgICAvLyBSdW4gdmFsaWRhdGlvbiBvbiB0aGUgZmlsZS4KLSAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxSZXBvcnQgPSB3c2RsVmFsaWRhdG9yLnZhbGlkYXRlKGZpbGVsb2NhdGlvbiwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIHZhbFJlcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgU3RyaW5nIHdpdGggZm9ybWF0dGVkIG91dHB1dCBmb3IgYSBsaXN0IG9mIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2VzIAotICAgKiAJCVRoZSBtZXNzYWdlcyB0byBnZXQuCi0gICAqIEByZXR1cm4gCi0gICAqIAkJQSBzdHJpbmcgd2l0aCBhIGZvcm1hdHRlZCBsaXN0IG9mIHRoZSBtZXNzYWdlcy4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0TWVzc2FnZXMoSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgb3V0cHV0QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChtZXNzYWdlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgbWVzc2FnZXMgdGhhdCBsb29rcyBsaWtlCi0gICAgICAvLyBFUlJPUiAxOjEgRXJyb3IgbWVzc2FnZSBjb250ZW50Ci0gICAgICBpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0gICAgICBTdHJpbmcgbWFya2VyID0gbnVsbDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKLSAgICAgICAgaW50IHNldmVyaXR5ID0gbWVzc2FnZS5nZXRTZXZlcml0eSgpOwotICAgICAgICBpZiAoc2V2ZXJpdHkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIG1hcmtlciA9IFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9FUlJPUl9NQVJLRVI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgICB7Ci0gICAgICAgICAgbWFya2VyID0gV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG1hcmtlciA9IFNUUklOR19FTVBUWTsKLSAgICAgICAgfQotICAgICAgICBvdXRwdXRCdWZmZXIKLSAgICAgICAgICAuYXBwZW5kKG1hcmtlcikKLSAgICAgICAgICAuYXBwZW5kKFNUUklOR19TUEFDRSkKLSAgICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TGluZSgpKQotICAgICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRDb2x1bW4oKSkKLSAgICAgICAgICAuYXBwZW5kKFNUUklOR19TUEFDRSkKLSAgICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgaWYoaSAhPSBudW1NZXNzYWdlcyAtMSkKLSAgICAgICAgewotICAgICAgICAgIG91dHB1dEJ1ZmZlci5hcHBlbmQoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG91dHB1dEJ1ZmZlci50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtYWluIGVudHJ5IHBvaW50IGludG8gdGhlIGNvbW1hbmQgbGluZSB0b29sLiAKLSAgICogQ2hlY2tzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCByZWdpc3RlcnMgdGhlIGRlZmF1bHQgdmFsaWRhdG9ycyBhbmQgcnVucyB2YWxpZGF0aW9uIG9uIHRoZQotICAgKiBsaXN0IG9mIGZpbGVzLgotICAgKiAKLSAgICogQHBhcmFtIGFyZ3MgLSB0aGUgYXJndW1lbnRzIHRvIHRoZSB2YWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICAvLyBObyBhcmd1bWVudHMgc3BlY2lmaWVkLiBQcmludCB1c2FnZS4KLQlpZiAoYXJncy5sZW5ndGggPCAxKQotICAgIHsKLQkgIFN5c3RlbS5lcnIucHJpbnRsbihXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fRVJST1JfV1JPTkdfQVJHVU1FTlRTKTsKLQkgIFN5c3RlbS5leGl0KDApOwotCX0KLQkKLQlXU0RMVmFsaWRhdGUgd3NkbFZhbGlkYXRlID0gbmV3IFdTRExWYWxpZGF0ZSgpOwotCXdzZGxWYWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzKTsKLQl3c2RsVmFsaWRhdGUudmFsaWRhdGUoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBhcmd1bWVudHMgc3BlY2lmaWVkIGZvciB0aGlzIFdTRExWYWxpZGF0ZSB0YXNrIGFuZAotICAgKiBjb25maWd1cmUgdmFsaWRhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBhcmdzCi0gICAqIAkJVGhlIGFyZ3VtZW50cyBzcGVjaWZpZWQgZm9yIHRoaXMgdGFzay4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBhcnNlQXJndW1lbnRzKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLQlpbnQgbnVtYXJncyA9IGFyZ3MubGVuZ3RoOwotCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1hcmdzOyBpKyspCi0JewotCSAgU3RyaW5nIHBhcmFtID0gYXJnc1tpXTsKLQotCSAgLy8gUmVnaXN0ZXJpbmcgYW4gZXh0ZW5zaW9uIHZhbGlkYXRvciBvciBXU0RMIDEuMSBleHRlbnNpb24gdmFsaWRhdG9yLgotCSAgaWYgKHBhcmFtLmVxdWFscyhXU0RMVmFsaWRhdGUuUEFSQU1fV1NETDExVkFMKSAKLQkJCSAgfHwgcGFyYW0uZXF1YWxzKFdTRExWYWxpZGF0ZS5QQVJBTV9FWFRWQUwpKQotCSAgewotCSAgICBTdHJpbmcgbmFtZXNwYWNlID0gYXJnc1srK2ldOwotCSAgICBpZiAoIW5hbWVzcGFjZS5zdGFydHNXaXRoKFdTRExWYWxpZGF0ZS5TVFJJTkdfREFTSCkpCi0JICAgIHsKLQkgICAgICBTdHJpbmcgdmFsaWRhdG9yQ2xhc3MgPSBhcmdzWysraV07Ci0KLQkgICAgICBpZiAoIXZhbGlkYXRvckNsYXNzLnN0YXJ0c1dpdGgoV1NETFZhbGlkYXRlLlNUUklOR19EQVNIKSkKLQkgICAgICB7Ci0JICAgICAgICBpZihwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9XU0RMMTFWQUwpKQotCSAgICAgICAgeyAgCi0JICAgICAgICAgIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MpOwotCSAgICAgICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZSBpZihwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9FWFRWQUwpKQotCSAgICAgICAgewotCSAgICAgICAgICBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZSh2YWxpZGF0b3JDbGFzcyk7Ci0JICAgICAgICAgIHdzZGxWYWxpZGF0b3IucmVnaXN0ZXJXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgICBlbHNlCi0JICAgICAgewotCSAgICAgICAgaS0tOwotCSAgICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBpLS07Ci0JICAgIH0gIAotCSAgfQotCSAgLy8gUmVnaXN0ZXIgYSBkaXJlY3Rvcnkgd2l0aCBzY2hlbWFzLgotCSAgZWxzZSBpZiAocGFyYW0uZXF1YWxzSWdub3JlQ2FzZShXU0RMVmFsaWRhdGUuUEFSQU1fU0NIRU1BRElSKSkKLQkgIHsKLQkgICAgU3RyaW5nIHhzZERpciA9IGFyZ3NbKytpXTsKLQkgICAgWE1MQ2F0YWxvZy5hZGRTY2hlbWFEaXIoeHNkRGlyKTsKLQkgIH0KLQkgIC8vIFJlZ2lzdGVyIGEgc2NoZW1hLgotCSAgLy8gVE9ETzogUmVwbGFjZSB0aGlzIHdpdGggYW4gWE1MIGNhdGFsb2cuCi0JICBlbHNlIGlmIChwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9TQ0hFTUEpKQotCSAgewotCSAgICBTdHJpbmcgcHVibGljaWQgPSBhcmdzWysraV07Ci0JICAgIFN0cmluZyBzeXN0ZW1pZCA9IGFyZ3NbKytpXTsKLQkgICAgWE1MQ2F0YWxvZy5hZGRFbnRpdHkobmV3IFhNTENhdGFsb2dFbnRpdHlIb2xkZXIocHVibGljaWQsIHN5c3RlbWlkKSk7Ci0JICB9Ci0JICAvLyBSZWdpc3RlciBhIFVSSSByZXNvbHZlci4gCi0JICAvLyBUT0RPOiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHRleHQgVUkuCi0JICBlbHNlIGlmKHBhcmFtLmVxdWFsc0lnbm9yZUNhc2UoUEFSQU1fVVJJUkVTT0xWRVIpKQotCSAgewotCSAgICBTdHJpbmcgcmVzb2x2ZXJDbGFzcyA9IGFyZ3NbKytpXTsKLQkgICAgd3NkbFZhbGlkYXRvci5hZGRVUklSZXNvbHZlcihuZXcgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShyZXNvbHZlckNsYXNzLCBudWxsKS5nZXRVUklSZXNvbHZlcigpKTsKLQkgIH0KLQkgIC8vIENvbmZpZ3VyZSB0aGUgbG9nZ2VyLgotCSAgZWxzZSBpZihwYXJhbS5lcXVhbHMoUEFSQU1fTE9HR0VSKSkKLQkgIHsKLQkgICAgU3RyaW5nIGxvZ2dlckNsYXNzU3RyaW5nID0gYXJnc1srK2ldOwotCSAgICB0cnkKLQkgICAgewotCSAgICAgIENsYXNzIGxvZ2dlckNsYXNzID0gV1NETFZhbGlkYXRlLmNsYXNzLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKGxvZ2dlckNsYXNzU3RyaW5nKTsKLQkgICAgICBJTG9nZ2VyIGxvZ2dlciA9IChJTG9nZ2VyKWxvZ2dlckNsYXNzLm5ld0luc3RhbmNlKCk7Ci0JICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihsb2dnZXIpOwotCSAgICB9Ci0JICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgICB7Ci0JICAgICAgU3lzdGVtLmVyci5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9FUlJPUl9MT0FESU5HX0xPR0dFUiwgbmV3IE9iamVjdFtde2xvZ2dlckNsYXNzU3RyaW5nfSkpOwotCSAgICB9Ci0JICB9Ci0JICAvLyBTZXQgcHJvcGVydGllcy4KLQkgIGVsc2UgaWYocGFyYW0uc3RhcnRzV2l0aChQQVJBTV9QUk9QRVJUWSkpCi0JICB7Ci0JICAgIGludCBzZXBhcmF0b3IgPSBwYXJhbS5pbmRleE9mKCc9Jyk7Ci0JICAgIFN0cmluZyBuYW1lID0gcGFyYW0uc3Vic3RyaW5nKDIsIHNlcGFyYXRvcik7Ci0JICAgIFN0cmluZyB2YWx1ZSA9IHBhcmFtLnN1YnN0cmluZyhzZXBhcmF0b3IrMSk7Ci0JICAgIGNvbmZpZ3VyYXRpb24uc2V0UHJvcGVydHkobmFtZSwgdmFsdWUpOwotCSAgfQotCSAgLy8gU2V0IHZlcmJvc2U7Ci0JICBlbHNlIGlmKHBhcmFtLmVxdWFscyhQQVJBTV9WRVJCT1NFKSB8fCBwYXJhbS5lcXVhbHMoIFBBUkFNX1ZFUkJPU0VfU0hPUlQpKQotCSAgewotCQl2ZXJib3NlID0gdHJ1ZTsKLQkgIH0KLQkgIC8vIGEgZmlsZSB0byB2YWxpZGF0ZQotCSAgZWxzZQotCSAgewotCSAgICBpZighcGFyYW0uc3RhcnRzV2l0aChXU0RMVmFsaWRhdGUuU1RSSU5HX0RBU0gpKQotCSAgICB7ICAKLQkgICAgICB3c2RsRmlsZXMuYWRkKHBhcmFtKTsKLQkgICAgfQotCSAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YWM4ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLS8qKgotICogU3RyaW5ncyB1c2VkIGJ5IHRoZSBXU0RMVmFsaWRhdGUgdGV4dCBVSS4KLSAqIFRoaXMgY2xhc3MgbWltaWNzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIE9TR0kgTkxTIGNsYXNzIGZvciBjb252ZW5pZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC53c2RsdmFsaWRhdGV0ZXh0dWkiOy8vJE5PTi1OTFMtMSQKLQotCS8vIEVycm9yIG1lc3NhZ2VzLgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9FUlJPUl9XUk9OR19BUkdVTUVOVFMgPSAiX0VSUk9SX1dST05HX0FSR1VNRU5UUyI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX0xPQURJTkdfTE9HR0VSID0gIl9FUlJPUl9MT0FESU5HX0xPR0dFUiI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX1VOQUJMRV9UT19SRUFEX0ZJTEUgPSAiX0VSUk9SX1VOQUJMRV9UT19SRUFEX0ZJTEUiOwotCQotCS8vIFZhbGlkYXRpb24gbWVzc2FnZXMuCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiA9ICJfVUlfSU5GT1JNQVRJT05fREVMSU1JVEVSIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRklMRV9WQUxJRCA9ICJfVUlfRklMRV9WQUxJRCI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZJTEVfSU5WQUxJRCA9ICJfVUlfRklMRV9JTlZBTElEIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRVJST1JfTUFSS0VSID0gIl9VSV9FUlJPUl9NQVJLRVIiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9XQVJOSU5HX01BUktFUiA9ICJfVUlfV0FSTklOR19NQVJLRVIiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9WQUxJREFUSU9OX1NVTU1BUlkgPSAiX1VJX1ZBTElEQVRJT05fU1VNTUFSWSI7Ci0KLQlzdGF0aWMgCi0JewotCQkvLyBsb2FkIG1lc3NhZ2UgdmFsdWVzIGZyb20gYnVuZGxlIGZpbGUKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQkJX0VSUk9SX1dST05HX0FSR1VNRU5UUyA9IGJ1bmRsZS5nZXRTdHJpbmcoU3RyaW5nLnZhbHVlT2YoX0VSUk9SX1dST05HX0FSR1VNRU5UUykpOwotCQlfRVJST1JfTE9BRElOR19MT0dHRVIgPSBidW5kbGUuZ2V0U3RyaW5nKF9FUlJPUl9MT0FESU5HX0xPR0dFUik7Ci0JCV9FUlJPUl9VTkFCTEVfVE9fUkVBRF9GSUxFID0gYnVuZGxlLmdldFN0cmluZyhfRVJST1JfVU5BQkxFX1RPX1JFQURfRklMRSk7Ci0JCV9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIgPSBidW5kbGUuZ2V0U3RyaW5nKF9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIpOwotCQlfVUlfRklMRV9WQUxJRCA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX0ZJTEVfVkFMSUQpOwotCQlfVUlfRklMRV9JTlZBTElEID0gYnVuZGxlLmdldFN0cmluZyhfVUlfRklMRV9JTlZBTElEKTsKLQkJX1VJX0VSUk9SX01BUktFUiA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX0VSUk9SX01BUktFUik7Ci0JCV9VSV9XQVJOSU5HX01BUktFUiA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX1dBUk5JTkdfTUFSS0VSKTsKLQkJX1VJX1ZBTElEQVRJT05fU1VNTUFSWSA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX1ZBTElEQVRJT05fU1VNTUFSWSk7Ci0JfQotCi0JcHJpdmF0ZSBXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcygpIAotCXsKLQkJLy8gY2Fubm90IGNyZWF0ZSBuZXcgaW5zdGFuY2UKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC93c2RsdmFsaWRhdGV0ZXh0dWkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L3dzZGx2YWxpZGF0ZXRleHR1aS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGVkODJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L3dzZGx2YWxpZGF0ZXRleHR1aS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBNZXNzYWdlcyBmb3IgdGhlIFdTRExWYWxpZGF0ZSB0ZXh0IFVJIGludGVyZmFjZS4KLQotIyBFcnJvciBtZXNzYWdlcwotX0VSUk9SX1dST05HX0FSR1VNRU5UUyAgICAgPSBVc2FnZTogV1NETFZhbGlkYXRlIFstd3NkbDExdiBuYW1lc3BhY2UgY2xhc3NuYW1lXSBbLWV4dHYgbmFtZXNwYWNlIGNsYXNzbmFtZV0gWy1EbmFtZT12YWx1ZV0gZmlsZW5hbWVcblwKLVwgIC13c2RsMTF2XHRSZWdpc3RlciB0aGUgV1NETCAxLjEgdmFsaWRhdG9yIHNwZWNpZmllZCBieSBjbGFzc25hbWVcblwKLVx0XHRmb3IgbmFtZXNwYWNlLlxuXAotXCAgLWV4dHZcdFx0UmVnaXN0ZXIgdGhlIFdTREwgZXh0ZW5zaW9uIHZhbGlkYXRvciBzcGVjaWZpZWQgYnlcblwKLVx0XHRjbGFzc25hbWUgZm9yIG5hbWVzcGFjZS5cblwKLVwgIC12ZXJib3NlLCAtdlx0UHJpbnQgb3V0IHZlcmJvc2UgaW5mb3JtYXRpb24uXG5cCi1cICAtbG9nZ2VyXHRTcGVjaWZ5IGFuIGFsdGVybmF0ZSBsb2dnZXIgdGhhdCBpbXBsZW1lbnRzXG5cCi1cdFx0b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXJcblwKLVwgIC1EXHRcdFNwZWNpZnkgYSBwcm9wZXJ0eSB3aXRoIG5hbWUgYW5kIHZhbHVlLiAgCi1fRVJST1JfTE9BRElOR19MT0dHRVIgICAgICA9IFVuYWJsZSB0byBsb2FkIGxvZ2dlciBjbGFzcyB7MH0uCi1fRVJST1JfVU5BQkxFX1RPX1JFQURfRklMRSA9IFVuYWJsZSB0byByZWFkIGZpbGUgezB9LgotCi0jIFZhbGlkYXRpb24gbWVzc2FnZXMKLV9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIgID0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1fVUlfRklMRV9JTlZBTElEICAgICAgICAgICA9IHswfSAtIE5vdCB2YWxpZAotX1VJX0ZJTEVfVkFMSUQgICAgICAgICAgICAgPSB7MH0gLSBWYWxpZAotX1VJX0VSUk9SX01BUktFUiAgICAgICAgICAgPSBFUlJPUgotX1VJX1dBUk5JTkdfTUFSS0VSICAgICAgICAgPSBXQVJOSU5HCi1fVUlfVkFMSURBVElPTl9TVU1NQVJZICAgICA9IHswfSBmaWxlcyB2YWxpZGF0ZWQuIHsxfSBmaWxlcyByZXBvcnRlZCBlcnJvcnMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3V0aWwvRXJyb3JNZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9FcnJvck1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhMTRiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9FcnJvck1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotCi0vKioKLSAqIEEgY2xhc3MgdG8gaG9sZCB2YWxpZGF0aW9uIG1lc3NhZ2VzLiBJbiB0aGlzIGNhc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBhIGdlbmVyaWMKLSAqIHRlcm0gZm9yIGFueSBraW5kIG9mIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yTWVzc2FnZQotewotICBwcml2YXRlIGludCBlcnJvckxpbmUsIGVycm9yQ29sdW1uLCBzZXZlcml0eTsKLSAgcHJpdmF0ZSBTdHJpbmcgZXJyb3JTdHJpbmcsIHVyaTsKLSAgcHJpdmF0ZSBpbnQgc3RhcnRPZmZzZXQgPSAtMTsKLSAgcHJpdmF0ZSBpbnQgZW5kT2Zmc2V0ID0gLTE7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEVycm9yTWVzc2FnZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGVycm9yIFRoZSBtZXNzYWdlIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0RXJyb3JNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nIGVycm9yKQotICB7Ci0gICAgZXJyb3JTdHJpbmcgPSBlcnJvcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBzZWUgI2dldFNldmVyaXR5Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXZlcml0eShpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UgdXNpbmcgc3RyaW5nIG5hbWVzIGZvciB0aGUgc2V2ZXJpdHkuCi0gICAqIAotICAgKiBAcGFyYW0gc2V2ZXJpdHkgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2V2ZXJpdHkuCi0gICAqIEBzZWUgI2dldFNldmVyaXR5Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXZlcml0eShTdHJpbmcgc2V2ZXJpdHkpCi0gIHsKLSAgICBpZiAoc2V2ZXJpdHkuZXF1YWxzKCJ3YXJuaW5nIikpCi0gICAgewotICAgICAgdGhpcy5zZXZlcml0eSA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNldmVyaXR5LmVxdWFscygiZXJyb3IiKSkKLSAgICB7Ci0gICAgICB0aGlzLnNldmVyaXR5ID0gMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2V2ZXJpdHkuZXF1YWxzKCJmYXRhbCIpKQotICAgIHsKLSAgICAgIHRoaXMuc2V2ZXJpdHkgPSAyOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsaW5lIHdoZXJlIHRoZSBlcnJvciBpcyBsb2NhdGVkLgotICAgKiAKLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIEBzZWUgI2dldEVycm9yTGluZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JMaW5lKGludCBsaW5lKQotICB7Ci0gICAgZXJyb3JMaW5lID0gbGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIEBzZWUgI2dldEVycm9yQ29sdW1uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvckNvbHVtbihpbnQgY29sdW1uKQotICB7Ci0gICAgZXJyb3JDb2x1bW4gPSBjb2x1bW47Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIEBzZWUgI3NldEVycm9yTWVzc2FnZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yU3RyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNldmVyaXR5IG9mIHRoZSBlcnJvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHNldmVyaXR5IG9mIHRoZSBlcnJvci4KLSAgICogQHNlZSAjc2V0U2V2ZXJpdHkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0U2V2ZXJpdHkoKQotICB7Ci0gICAgcmV0dXJuIHNldmVyaXR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAqIEBzZWUgI3NldEVycm9yTGluZQotICAgKi8KLSAgcHVibGljIGludCBnZXRFcnJvckxpbmUoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yTGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBlcnJvci4KLSAgICogQHNlZSAjc2V0RXJyb3JDb2x1bW4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RXJyb3JDb2x1bW4oKQotICB7Ci0gICAgcmV0dXJuIGVycm9yQ29sdW1uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHN0YXJ0IG9mZnNldC4KLSAgICogCi0gICAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgb2Zmc2V0LgotICAgKiBAc2VlICNnZXRFcnJvclN0YXJ0T2Zmc2V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvclN0YXJ0T2Zmc2V0KGludCBzdGFydCkKLSAgewotICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3Igc3RhcnQgb2Zmc2V0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZXJyb3Igc3RhcnQgb2Zmc2V0LgotICAgKiBAc2VlICNzZXRFcnJvclN0YXJ0T2Zmc2V0Ci0gICAqLwotICBwdWJsaWMgaW50IGdldEVycm9yU3RhcnRPZmZzZXQoKQotICB7Ci0gICAgcmV0dXJuIHN0YXJ0T2Zmc2V0OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGVuZCBvZmZzZXQuCi0gICAqIAotICAgKiBAcGFyYW0gZW5kIFRoZSBlbmQgb2Zmc2V0LgotICAgKiBAc2VlICNnZXRFcnJvckVuZE9mZnNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JFbmRPZmZzZXQoaW50IGVuZCkKLSAgewotICAgIGVuZE9mZnNldCA9IGVuZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlcnJvciBlbmQgb2Zmc2V0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZXJyb3IgZW5kIG9mZnNldC4KLSAgICogQHNlZSAjc2V0RXJyb3JFbmRPZmZzZXQKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RXJyb3JFbmRPZmZzZXQoKQotICB7Ci0gICAgcmV0dXJuIGVuZE9mZnNldDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgbmV3IGxpbmUgb3QgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmV3TGluZSBUaGUgbmV3IGxpbmUgdG8gYWRkIHRvIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmV3RXJyb3JNZXNzYWdlTGluZShTdHJpbmcgbmV3TGluZSkKLSAgewotICAgIGVycm9yU3RyaW5nICs9ICJcbiIgKyBuZXdMaW5lOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBVUkkgb2YgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgdG8gc2V0LgotICAgKi8KLSAKLSAgcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIG9mIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIG9mIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3V0aWwvTGF6eVVSTElucHV0U3RyZWFtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2MGFmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgYWxsb3dzIElucHV0U3RyZWFtcyB0byBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZCB0byB4ZXJjZXMgd2l0aG91dAotICogYWN0dWFsbHkgb3BlbmluZyBmaWxlIGhhbmRsZXMgb3IgbmV0d29yayBjb25uZWN0aW9ucyB1bnRpbCBpdCBpcyBhYnNvbHV0ZWx5Ci0gKiBuZWNjZXNzYXJ5LgotICovCi1wdWJsaWMgY2xhc3MgTGF6eVVSTElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0KLXsgIAotICBwcml2YXRlIHN0YXRpYyBpbnQgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCA9IDA7IAotICBwcm90ZWN0ZWQgSW5wdXRTdHJlYW0gaW5uZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdXJsOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBlcnJvcjsKLSAgYm9vbGVhbiBoYXNNYXJrczsKLSAgYm9vbGVhbiBwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuOwotCi0gIHB1YmxpYyBMYXp5VVJMSW5wdXRTdHJlYW0oU3RyaW5nIHVybCkKLSAgewotICAgIHRoaXMudXJsID0gdXJsOwotCWlubmVyID0gbnVsbDsKLQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoaW5uZXIgPT0gbnVsbCAmJiAhZXJyb3IpCi0gICAgewotICAgICAgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCsrOwotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHN0cmVhbSAoIiArIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgKyAiKS0tICIgKyB1cmwpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlubmVyID0gbmV3IFVSTCh1cmwpLm9wZW5TdHJlYW0oKTsKLQkJcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotCQloYXNNYXJrcyA9IGZhbHNlOwotICAgICAgfQotICAgICAgZmluYWxseSAKLSAgICAgIHsKLSAgICAgICAgaWYgKGlubmVyID09IG51bGwpCi0gICAgICAgIHsgIAotICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0JcHJvdGVjdGVkIHZvaWQgY2xvc2VTdHJlYW0oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAoaW5uZXIgIT0gbnVsbCAmJiAhcHJldGVuZEZpbGVJc1N0aWxsT3BlbikgewotCQkJaW5uZXIuY2xvc2UoKTsKLQkJCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSB0cnVlOwotCQl9Ci0gIAl9Ci0KLSAgcHVibGljIGludCBhdmFpbGFibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm4gMDsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCXJldHVybiBpbm5lci5hdmFpbGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgewotCQkvLyBTdG9wIGJlaGF2aW5nIGFzIGlmIHRoZSBzdHJlYW0gd2VyZSBzdGlsbCBvcGVuLgotCQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJaWYgKGlubmVyICE9IG51bGwpIHsKLQkJCWRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQtLTsKLQkJICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNsb3Npbmcgc3RyZWFtICgiICsgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCArICIpIC0tICIgKyB1cmwpOwotCQkJaW5uZXIuY2xvc2UoKTsKLQkJfQotCX0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkKLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm47Ci0JaGFzTWFya3MgPSB0cnVlOwotCXRyeSB7Ci0JCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCQlpbm5lci5tYXJrKHJlYWRsaW1pdCk7Ci0JfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCSAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiVGhlIGZvbGxvd2luZyBJT0V4Y2VwdGlvbiBvY2N1cnJlZCBpbiB0aGUgV1NETCB2YWxpZGF0b3IncyBMYXp5VVJMSW5wdXRTdHJlYW0uIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiBmYWxzZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaWYgKGlubmVyID09IG51bGwpIHJldHVybiBmYWxzZTsKLQkJcmV0dXJuIGlubmVyLm1hcmtTdXBwb3J0ZWQoKTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJUaGUgZm9sbG93aW5nIElPRXhjZXB0aW9uIG9jY3VycmVkIGluIHRoZSBXU0RMIHZhbGlkYXRvcidzIExhenlVUkxJbnB1dFN0cmVhbS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0JfQotCXJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKCk7Ci0JaWYgKGJ5dGVzUmVhZCA9PSAtMSAmJiAhaGFzTWFya3MpIGNsb3NlU3RyZWFtKCk7Ci0JcmV0dXJuIGJ5dGVzUmVhZDsKLSAgfQotCi0KLQlwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm4gLTE7Ci0JCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCQlpbnQgYnl0ZXNSZWFkID0gaW5uZXIucmVhZChiKTsKLQkJaWYgKGJ5dGVzUmVhZCA9PSAtMSAmJiAhaGFzTWFya3MpIGNsb3NlU3RyZWFtKCk7Ci0JCXJldHVybiBieXRlc1JlYWQ7Ci0JfQotCi0gIHB1YmxpYyBpbnQgcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsgICAgCi0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKGIsIG9mZiwgbGVuKTsKLQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQlyZXR1cm4gYnl0ZXNSZWFkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm47Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlpbm5lci5yZXNldCgpOwotICB9Ci0KLSAgcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7ICAgCi0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAwOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JcmV0dXJuIGlubmVyLnNraXAobik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL01lc3NhZ2VHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL01lc3NhZ2VHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyMzQ3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9NZXNzYWdlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotCi0vKioKLSAqIEEgY29udmVuaWVuY2UgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCByZXNvdXJjZXMgaW4gYSByZXNvdXJjZSBidW5kbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlR2VuZXJhdG9yCi17Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZWJ1bmRsZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcmIgVGhlIHJlc291cmNlIGJ1bmRsZSB0byB3b3JrIHdpdGguCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUdlbmVyYXRvcihSZXNvdXJjZUJ1bmRsZSByYikKLSAgewotICAgIHJlc291cmNlYnVuZGxlID0gcmI7Ci0gIH0KLQotICAvKioKLSAgKiBTZXQgdGhlIHJlc291cmNlYnVuZGxlIHRvIHRoZSBvbmUgc3BlY2lmaWVkLgotICAqIAotICAqIEBwYXJhbSByYiBUaGUgcmVzb3VyY2UgYnVuZGxlIHRvIHNldC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0UmVzb3VyY2VCdW5kbGUoUmVzb3VyY2VCdW5kbGUgcmIpCi0gIHsKLSAgICByZXNvdXJjZWJ1bmRsZSA9IHJiOwotICB9Ci0KLSAgLyoqCi0gICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5LgotICAqIAotICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHJlc291cmNlLgotICAqIEByZXR1cm4gVGhlIHN0cmluZyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gcmVzb3VyY2VidW5kbGUuZ2V0U3RyaW5nKGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIG9uZSBzdWJzdGl0dXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSByZXNvdXJjZS4KLSAgICogQHBhcmFtIHMxIFRoZSBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHJldHVybiBUaGUgc3RyaW5nIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkKLSAgewotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRTdHJpbmcoa2V5KSwgbmV3IE9iamVjdFtdIHsgczEgfSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIHR3byBzdWJzdGl0dXRpb25zLgotICAgKiAKLSAgICogQHBhcmFtIGtleSBUaGUga2V5IGZvciB0aGUgcmVzb3VyY2UuCi0gICAqIEBwYXJhbSBzMSBUaGUgZmlyc3Qgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEBwYXJhbSBzMiBUaGUgc2Vjb25kIHN1YnN0aXR1dGlvbiB0byBwZXJmb3JtLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxLCBPYmplY3QgczIpCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0U3RyaW5nKGtleSksIG5ldyBPYmplY3RbXSB7IHMxLCBzMiB9KTsKLSAgfQotCi0gIC8qKgotICAgKiAgR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIHRocmVlIHN1YnN0aXR1dGlvbnMuCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSByZXNvdXJjZS4KLSAgICogQHBhcmFtIHMxIFRoZSBmaXJzdCBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHBhcmFtIHMyIFRoZSBzZWNvbmQgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEBwYXJhbSBzMyBUaGUgdGhpcmQgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEByZXR1cm4gVGhlIHN0cmluZyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEsIE9iamVjdCBzMiwgT2JqZWN0IHMzKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldFN0cmluZyhrZXkpLCBuZXcgT2JqZWN0W10geyBzMSwgczIsIHMzIH0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0NsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmI3ZjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlIGV4dGVuZHMgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGRlbGVnYXRlIGZvciBhIHZhbGlkYXRvciBieSBpdHMgY2xhc3MgbmFtZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0b3JDbGFzc25hbWUgVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvciBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUpCi0gIHsKLQl0aGlzLnZhbGlkYXRvckNsYXNzbmFtZSA9IHZhbGlkYXRvckNsYXNzbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBkZWxlZ2F0ZSBmb3IgYSB2YWxpZGF0b3IgYnkgaXRzIGNsYXNzIG5hbWUgYW5kIAotICAgKiBhIGNsYXNzIGxvYWRlciB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsaWRhdG9yQ2xhc3NuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgY2xhc3MuCi0gICAqIEBwYXJhbSBjbGFzc0xvYWRlciBUaGUgY2xhc3MgbG9hZGVyIHRvIHVzZSB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikKLSAgewotICAgIHRoaXModmFsaWRhdG9yQ2xhc3NuYW1lKTsKLSAgICB0aGlzLmNsYXNzTG9hZGVyID0gY2xhc3NMb2FkZXI7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSNsb2FkVmFsaWRhdG9yKCkKLSAgICovCi0gIHByb3RlY3RlZCBJV1NETDExVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKQotICB7Ci0JSVdTREwxMVZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCWlmKGNsYXNzTG9hZGVyID09IG51bGwpCi0JewotCSAgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7Ci0JfQotCXRyeQotCXsKLSAgICAgIENsYXNzIHZhbGlkYXRvckNsYXNzID0KLSAgICAgIGNsYXNzTG9hZGVyICE9IG51bGwgPyBjbGFzc0xvYWRlci5sb2FkQ2xhc3ModmFsaWRhdG9yQ2xhc3NuYW1lKSA6IENsYXNzLmZvck5hbWUodmFsaWRhdG9yQ2xhc3NuYW1lKTsKLQotICAgICAgdmFsaWRhdG9yID0gKElXU0RMMTFWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlVuYWJsZSB0byBsb2FkIHZhbGlkYXRvciAiICsgdmFsaWRhdG9yQ2xhc3NuYW1lLCBJTG9nZ2VyLlNFVl9FUlJPUiwgdCk7Ci0gICAgfQotCXJldHVybiB2YWxpZGF0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRpb25JbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0lXU0RMMTFWYWxpZGF0aW9uSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGE2OTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRpb25JbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBXU0RMIDEuMSB2YWxpZGF0aW9uIGluZm9ybWF0aW9uLiBVc2VzIGFuIGV4aXN0aW5nCi0gKiB2YWxpZGF0aW9uIGluZm8gb2JqZWN0IGFuZCBwcm92aWRlcyBtZXRob2RzIHRvIHNldCBhbmQgcmV0cmlldmUKLSAqIHNjaGVtYXMgYW5kIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIHNldHRpbmcgZXJyb3JzIHdpdGggb2JqZWN0cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJV1NETDExVmFsaWRhdGlvbkluZm8KLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFVSSSBvZiB0aGUgZmlsZSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgb2YgdGhlIGZpbGUgYmVpbmcgdmFsaWRhdGVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCk7Ci0gIAotICAvKioKLSAgICogQWRkIGEgc2NoZW1hIHRvIHRoZSBsaXN0IG9mIHNjaGVtYXMgYXZhaWxhYmxlIGZvciB0aGlzIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0geHNNb2RlbCBUaGUgc2NoZW1hIHRvIGFkZCB0byB0aGUgbGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYShYU01vZGVsIHhzTW9kZWwpOwotICAKLSAgLyoqCi0gICAqIEdldCBhbiBhcnJheSBvZiBhbGwgdGhlIHNjaGVtYXMgYXZhaWxhYmxlIGZvciB0aGlzIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGFsbCB0aGUgc2NoZW1hcyBhdmFpbGFibGUgZm9yIHRoaXMgV1NETCBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBYU01vZGVsW10gZ2V0U2NoZW1hcygpOwotICAKLSAgLyoqCi0gICAqIENsZWFyIGFsbCB0aGUgc3RvcmVkIHNjaGVtYXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhclNjaGVtYXMoKTsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50TG9jYXRpb25zIFRoZSBoYXNodGFibGUgdG8gc2V0IHdpdGggdGhlIGVsZW1lbnQgbG9jYXRpb25zLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9ucyhIYXNodGFibGUgZWxlbWVudExvY2F0aW9ucyk7Ci0gIAotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIG9iamVjdCB0byBhZGQgdGhlIGVycm9yIGZvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCk7Ci0gIAotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIG9iamVjdCB0byBhZGQgdGhlIGVycm9yIGZvci4KLSAgICogQHBhcmFtIGVycm9yS2V5IFRoZSBlcnJvciBrZXkgZm9yIHRoaXMgbWVzc2FnZQotICAgKiBAcGFyYW0gbWVzc2FnZUFyZ3VtZW50cyBUaGUgc3RyaW5ncyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCwgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKTsKLSAgCi0gIC8qKgotICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZSBhdCB0aGUgZ2l2ZW4gbGluZSBhbmQgY29sdW1uLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gdXJpIFRoZSB1cmkgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZXh0ZW5zaWJseSB2YWxpZGF0b3JzIHRvIGFkZCB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHdhcm5pbmcgdG8gYWRkLgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgd2FybmluZyBmb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRXYXJuaW5nKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCk7Ci0gIAotICAvKioKLSAgICogQWRkIGEgd2FybmluZyBtZXNzYWdlIGF0IHRoZSBnaXZlbiBsaW5lIGFuZCBjb2x1bW4uCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgd2FybmluZyB0byBhZGQuCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSB3YXJuaW5nLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSB3YXJuaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIGluIHVzZSBmb3IgdGhpcyB2YWxpZGF0aW9uLiBUaGUgVVJJIHJlc29sdmVyCi0gICAqIHJldHVybmVkIGlzIGFjdHVhbGx5IGEgVVJJIHJlc29sdmVyIGhhbmRsZXIgdGhhdCB3aWxsIAotICAgKiBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSByZWdpc3RlcmVkIFVSSSByZXNvbHZlcnMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgc2NoZW1hIGNhY2hlIGlmIG9uZSBpcyBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBzY2hlbWEgY2FjaGUgaWYgb25lIGlzIHNwZWNpZmllZCwgbnVsbCBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0U2NoZW1hQ2FjaGUoKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFhNTCBjYWNoZSBpZiBvbmUgaXMgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWE1MIGNhY2hlIGlmIG9uZSBpcyBzcGVjaWZpZWQsIG51bGwgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFhNTENhY2hlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYWJjZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZm9yIGEgdmFsaWRhdG9yIHBsdWdnZWQgaW50byB0aGUgV1NETCAxLjEgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBnaXZlbiBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoaXMgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSW1wb3J0SG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0ltcG9ydEhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTNhZjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSW1wb3J0SG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkVycm9yTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuWFNEVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkRlZmF1bHRYTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5RTmFtZVV0aWxzOwotCi0vKioKLSAqIEEgY2xhc3MgdG8gaG9sZCBhbmQgcGFyc2UgYW4gaW1wb3J0IGVsZW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbXBvcnRIb2xkZXIgaW1wbGVtZW50cyBDb21wYXJhYmxlCi17Ci0gIHByaXZhdGUgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotICAKLSAgcHJpdmF0ZSBXU0RMRG9jdW1lbnQgaW1wb3J0aW5nV1NETERvYyA9IG51bGw7Ci0gIHByaXZhdGUgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCA9IG51bGw7Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBpbXBvcnRpbmdEZWYgPSBudWxsOwotICBwcml2YXRlIEVsZW1lbnQgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xhc3NwYXRoVVJJID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFVSSSA9IG51bGw7Ci0gIHByaXZhdGUgaW50IGRlcHRoOwotICBwcml2YXRlIEVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0gIHByaXZhdGUgTGlzdCBzY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIGJvb2xlYW4gaXNXU0RMRmlsZUltcG9ydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRJbnZhbGlkID0gZmFsc2U7Ci0gIHByaXZhdGUgSW1wb3J0IGltcG9ydERlZiA9IG51bGw7Ci0gIHByaXZhdGUgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbGluZm87Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIGltcG9ydC4KLSAgICogQHBhcmFtIGxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgaW1wb3J0LgotICAgKiBAcGFyYW0gY29udGV4dFVSSSBUaGUgY29udGV4dCBVUkkgZm9yIHJlc29sdmluZyB0aGUgaW1wb3J0IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gd3NkbERvYyBUaGUgV1NETERvY3VtZW50IHRoYXQgY29udGFpbnMgdGhlIGltcG9ydC4KLSAgICogQHBhcmFtIGRlcHRoIFRoZSBkZXB0aCBvZiB0aGUgaW1wb3J0LgotICAgKiBAcGFyYW0gaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCBUaGUgZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGltcG9ydCBpbiB0aGUgZW5jYXBzdWxhdGluZyBXU0RMRG9jdW1lbnQuCi0gICAqIEBwYXJhbSBtZXNzYWdlZ2VuZXJhdG9yIEEgbWVzc2FnZWdlbmVyYXRvciBmb3Igb2J0YWluaW5nIHN0cmluZ3MuCi0gICAqIEBwYXJhbSB2YWxpbmZvIFRoZSBXU0RMMTFWYWxpZGF0aW9uSW5mbyBmb3IgcmVwb3J0aW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHVibGljIEltcG9ydEhvbGRlcihTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24sIFN0cmluZyBjb250ZXh0VVJJLCBXU0RMRG9jdW1lbnQgaW1wb3J0aW5nV1NETERvYywgaW50IGRlcHRoLCBFbGVtZW50IGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbGluZm8pCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VnZW5lcmF0b3IgPSBtZXNzYWdlZ2VuZXJhdG9yOwotICAgIHRoaXMudmFsaW5mbyA9IHZhbGluZm87Ci0gICAgdGhpcy5pbXBvcnRpbmdXU0RMRG9jID0gaW1wb3J0aW5nV1NETERvYzsKLSAgICBpZihpbXBvcnRpbmdXU0RMRG9jICE9IG51bGwpCi0gICAgewotICAgICAgdGhpcy5pbXBvcnRpbmdEZWYgPSBpbXBvcnRpbmdXU0RMRG9jLmdldERlZmluaXRpb24oKTsKLSAgICB9Ci0gICAgdGhpcy5pbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50ID0gaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudDsKLSAgICB0aGlzLmRlcHRoID0gZGVwdGg7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIAotICAgIC8vICBBbGxvdyBXU0RMIGltcG9ydHMgdG8gaGF2ZSBubyBsb2NhdGlvbiBhdHRyaWJ1dGUgZXZlbiB0aG91Z2ggaXQgaXMgcmVxdWlyZWQuCi0gICAgLy8gU2NoZW1hIHdpbGwgbm9ybWFsbHkgY2F0Y2ggdGhlIHByb2JsZW0gYnV0IHRoaXMgYWxsb3dzIHVzZXJzIHRvIG92ZXJyaWRlIHRoZQotICAgIC8vIHNjaGVtYSBhbmQgaGF2ZSB0aGUgdmFsaWRhdG9yIHJ1bi4KLSAgICBpZiAodGhpcy5sb2NhdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHRoaXMubG9jYXRpb24gPSBuYW1lc3BhY2U7Ci0gICAgfQotICAgIHRoaXMuY29udGV4dFVSSSA9IGNvbnRleHRVUkk7Ci0gICAgCi0gICAgdGhpcy5sb2NhdGlvbiA9IHRoaXMubG9jYXRpb24ucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgSVVSSVJlc29sdXRpb25SZXN1bHQgY2xhc3NwYXRoVVJJID0gdmFsaW5mby5nZXRVUklSZXNvbHZlcigpLnJlc29sdmUodGhpcy5jb250ZXh0VVJJLCB0aGlzLm5hbWVzcGFjZSwgdGhpcy5sb2NhdGlvbik7Ci0gICAgaWYoY2xhc3NwYXRoVVJJLmdldExvZ2ljYWxMb2NhdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgdGhpcy5sb2NhdGlvbiA9IGNsYXNzcGF0aFVSSS5nZXRMb2dpY2FsTG9jYXRpb24oKTsKLSAgICB9Ci0gICAgaWYoY2xhc3NwYXRoVVJJLmdldFBoeXNpY2FsTG9jYXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRoaXMuY2xhc3NwYXRoVVJJID0gY2xhc3NwYXRoVVJJLmdldFBoeXNpY2FsTG9jYXRpb24oKTsKLSAgICAgIHRoaXMuY29udGV4dFVSSSA9IG51bGw7Ci0gICAgfSAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpCi0gIHsKLSAgICBFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIH0KLSAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBpZihkb2N1bWVudEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gIAkgIC8vIEhhbmRsZSBXU0RMIGltcG9ydHMuCi0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMsIGRvY3VtZW50RWxlbWVudCkpCi0gICAgICB7Ci0gICAgICAgIGlmKGlzWE1MVmFsaWQodGhpcy5jbGFzc3BhdGhVUkkpKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbERvY3VtZW50ID0gbmV3IFdTRExEb2N1bWVudCh0aGlzLmxvY2F0aW9uLCBkb2N1bWVudEVsZW1lbnQsIHRoaXMuZGVwdGgsIHRoaXMubWVzc2FnZWdlbmVyYXRvciwgdGhpcy52YWxpbmZvKTsKLSAgICAgICAgICAgIGNyZWF0ZVdTRExJbXBvcnQod3NkbERvY3VtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbGluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9VTkFCTEVfVE9fSU1QT1JUX0JBRF9MT0NBVElPTiIsICInIiArIGltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpICsgIiciKSwgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBIYW5kbGUgc2NoZW1hIGltcG9ydHMuCi0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9YU0RfMjAwMSwgZG9jdW1lbnRFbGVtZW50KSkKLSAgICAgIHsKLSAgICAgICAgY3JlYXRlWFNESW1wb3J0KCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1hNTFZhbGlkKFN0cmluZyB1cmkpCi0gIHsKLSAgICBJWE1MVmFsaWRhdG9yIHhtbFZhbGlkYXRvciA9IEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0WE1MVmFsaWRhdG9yKCk7Ci0gICAgeG1sVmFsaWRhdG9yLnNldEZpbGUodXJpKTsKLSAgICB4bWxWYWxpZGF0b3Iuc2V0VVJJUmVzb2x2ZXIodmFsaW5mby5nZXRVUklSZXNvbHZlcigpKTsKLSAgICAvL3htbFZhbGlkYXRvci5zZXRWYWxpZGF0aW9uSW5mbyh2YWxJbmZvKTsKLSAgICBpZih4bWxWYWxpZGF0b3IgaW5zdGFuY2VvZiBEZWZhdWx0WE1MVmFsaWRhdG9yKQotICAgIHsKLSAgICAJWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSB2YWxpbmZvLmdldFhNTENhY2hlKCk7Ci0gICAgICAgIGlmKGdyYW1tYXJQb29sICE9IG51bGwpCi0gICAgICAgICAgKChEZWZhdWx0WE1MVmFsaWRhdG9yKXhtbFZhbGlkYXRvcikuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wpOwotICAgIH0KLSAgICB4bWxWYWxpZGF0b3IucnVuKCk7Ci0gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHhtbCBjb25mb3JtYW5jZSBwcm9ibGVtcyBnbyBvbiB0byBjaGVjayB0aGUgd3NkbCBzdHVmZgotICAgIGlmICh4bWxWYWxpZGF0b3IuaGFzRXJyb3JzKCkpCi0gICAgewotICAgICAgLy8gdGVtcCBoYW5kbGluZyBvZiBYTUwgZXJyb3JzIHVudGlsIHZhbGlkYXRvciBpcyB1cGRhdGVkLgotICAgICAgTGlzdCBlcnJvcnMgPSB4bWxWYWxpZGF0b3IuZ2V0RXJyb3JzKCk7Ci0gICAgICBJdGVyYXRvciBlcnJvcnNJdGVyID0gZXJyb3JzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXJyb3JzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElWYWxpZGF0aW9uTWVzc2FnZSB2YWxNZXMgPSAoSVZhbGlkYXRpb25NZXNzYWdlKWVycm9yc0l0ZXIubmV4dCgpOwotICAgICAgICB2YWxpbmZvLmFkZEVycm9yKHZhbE1lcy5nZXRNZXNzYWdlKCksIHZhbE1lcy5nZXRMaW5lKCksIHZhbE1lcy5nZXRDb2x1bW4oKSwgdmFsTWVzLmdldFVSSSgpKTsKLSAgICAgIH0KLSAgICAgIGltcG9ydEludmFsaWQgPSB0cnVlOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgaW1wb3J0aW5nIFdTRExEb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGltcG9ydGluZyBXU0RMRG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50IGdldEltcG9ydGluZ0RvY3VtZW50KCkKLSAgewotICAgIHJldHVybiBpbXBvcnRpbmdXU0RMRG9jOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBXU0RMIGRvY3VtZW50IHRoaXMgaW1wb3J0IHJlcHJlc2VudHMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBXU0RMIGRvY3VtZW50IHRoaXMgaW1wb3J0IHJlcHJlc2VudHMuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50IGdldFdTRExEb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gd3NkbERvY3VtZW50OwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBsb2NhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbG9jYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbnRleHQgVVJJLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29udGV4dCBVUkkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHRVUkkoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHRVUkk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGRlcHRoIGluIHRoZSBXU0RMIHRyZWUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBkZXB0aCBpbiB0aGUgV1NETCB0cmVlLgotICAgKi8KLSAgcHVibGljIGludCBnZXREZXB0aCgpCi0gIHsKLSAgICByZXR1cm4gZGVwdGg7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbnRhaW5pbmcgZGVmaW50aW9ucyBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29udGFpbmluZyBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0SW1wb3J0aW5nRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0aW5nRGVmOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBlbGVtZW50IGZvciB0aGlzIGltcG9ydC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVsZW1lbnQgZm9yIHRoaXMgaW1wb3J0LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgaWYoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0KLSAgICAKLSAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSBsb2NhdGlvbjsKLSAgICAvL0ltcG9ydCBpbXBvcnREZWYgPSBpbXBvcnRpbmdEZWYuY3JlYXRlSW1wb3J0KCk7Ci0gICAgCi0gICAgLy8gIEFsbG93IGxvY2F0aW5nIFdTREwgZG9jdW1lbnRzIHVzaW5nIGFueSByZWdpc3RlcmVkIFVSSSByZXNvbHZlci4KLSAgICAvL1N0cmluZyBjbGFzc3BhdGhVUkkgPSBVUklSZXNvbHZlci5nZXRJbnN0YW5jZSgpLnJlc29sdmUoY29udGV4dFVSSSwgbmFtZXNwYWNlVVJJLCBsb2NhdGlvblVSSSk7Ci0vLyAgICBpZiAoIWNsYXNzcGF0aFVSSS5lcXVhbHMobG9jYXRpb25VUkkpKQotLy8gICAgewotLy8gICAgICBsb2NhdGlvblVSSSA9IGNsYXNzcGF0aFVSSTsKLS8vICAgICAgY29udGV4dFVSSSA9IG51bGw7Ci0vLyAgICB9Ci0gICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgaWYgKGxvY2F0aW9uVVJJICE9IG51bGwpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vU3RyaW5nIGNvbnRleHRVUkkgPSBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgLy9EZWZpbml0aW9uIGltcG9ydGVkRGVmID0gbnVsbDsKLSAgICAgICAgICAKLSAgICAgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgVVJMIHVybCA9IG51bGw7Ci0KLSAgICAgICAgICAKLSAgICAgICAgICAgIFVSTCBjb250ZXh0VVJMID0gKGNvbnRleHRVUkkgIT0gbnVsbCkgPyBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgY29udGV4dFVSSSkgOiBudWxsOwotCi0gICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwoY29udGV4dFVSTCwgbG9jYXRpb25VUkkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBIYW5kbGUgZmlsZTovLyB1cmxzLiBUaGUgY29ycmVjdCBmb3JtYXQgc2hvdWxkIGJlIGZpbGU6Ly8vIG9yIGZpbGU6Ly4KLSAgICAgICAgICAgIFN0cmluZyB1cmxBdXRob3JpdHkgPSB1cmwuZ2V0QXV0aG9yaXR5KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICAgICAgICAgIGlmKHVybEF1dGhvcml0eSAhPW51bGwgJiYgdXJsUHJvdG9jb2wuZXF1YWxzSWdub3JlQ2FzZSgiZmlsZSIpICYmICF1cmxBdXRob3JpdHkuZXF1YWxzKCIiKSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHVybCA9IG5ldyBVUkwodXJsUHJvdG9jb2wsIiIsIi8iICsgdXJsQXV0aG9yaXR5ICsgdXJsLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwudG9TdHJpbmcoKTsKLQkJCS8vIFRlc3QgZm9yIGNhc2Ugc2Vuc2l0aXZpdHkgb24gbG9jYWwgZmlsZXMuCi0JCQlpZih1cmxTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZToiKSkKLQkJCXsKLQkJCSAgRmlsZSB0ZXN0ZmlsZSA9IG5ldyBGaWxlKHVybC5nZXRGaWxlKCkpOwotCQkJICBTdHJpbmcgdGVzdGZpbGVTdHJpbmcgPSB0ZXN0ZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCSAgU3RyaW5nIGNhbm9uaWNhbGZpbGVTdHJpbmcgPSB0ZXN0ZmlsZS5nZXRDYW5vbmljYWxQYXRoKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKCF0ZXN0ZmlsZVN0cmluZy5lcXVhbHMoY2Fub25pY2FsZmlsZVN0cmluZykpCi0gICAgICAgICAgICAgIHsKLQkJCQlpZiAoIVN0cmluZy52YWx1ZU9mKHRlc3RmaWxlU3RyaW5nLmNoYXJBdCgwKSkuZXF1YWxzSWdub3JlQ2FzZQotCQkJCSAgICAoU3RyaW5nLnZhbHVlT2YoY2Fub25pY2FsZmlsZVN0cmluZy5jaGFyQXQoMCkpKQotCQkJCSAgICB8fCAhdGVzdGZpbGVTdHJpbmcuc3Vic3RyaW5nKDEsdGVzdGZpbGVTdHJpbmcubGVuZ3RoKCkpLmVxdWFscwotCQkJCQkoY2Fub25pY2FsZmlsZVN0cmluZy5zdWJzdHJpbmcoMSxjYW5vbmljYWxmaWxlU3RyaW5nLmxlbmd0aCgpKSkpCi0JCQkJewotICAgICAgICAgICAgICAgICAgdXJsU3RyaW5nID0gIiI7Ci0gICAgICAgICAgICAgICAgICB1cmwgPSBudWxsOwotCQkJCX0KLSAgICAgICAgICAgICAgfQotCQkJfQotCQkJaWYodXJsICE9IG51bGwpCi0JCQl7Ci0JCQkgIHRyeQotCQkJICB7Ci0gICAgICAgICAgICAgICAgcmVhZGVyID0gU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzUmVhZGVyKHVybCk7Ci0JCQkgIH0KLQkJCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJCSAgewotCQkJICAgIC8vIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4gVGhlIGVycm9yIHdpbGwgYmUgaGFuZGxlZCBiZWxvdy4KLQkJCSAgfQotCQkJfQotICAgICAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShyZWFkZXIpOwotICAgICAgICAgICAgICBpZihjbGFzc3BhdGhVUkkgIT0gbnVsbCAmJiAhY2xhc3NwYXRoVVJJLmVxdWFscyhsb2NhdGlvbikpCi0gIAkJCSAgewotICAJCQkgICAgaW5wdXRTb3VyY2Uuc2V0Qnl0ZVN0cmVhbShuZXcgVVJMKGNsYXNzcGF0aFVSSSkub3BlblN0cmVhbSgpKTsKLSAgCQkJICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dFNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCBsb2NhdGlvbiBmcm9tIHRoZSBlbGVtZW50LgotICAgICAgICAgICAgICBTdHJpbmcgYWN0dWFsTG9jYXRpb24gPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCwgQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04pOwotICAgICAgICAgICAgICBpZihhY3R1YWxMb2NhdGlvbiA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIAlhY3R1YWxMb2NhdGlvbiA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50LCAic2NoZW1hTG9jYXRpb24iKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZihhY3R1YWxMb2NhdGlvbiA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIAlhY3R1YWxMb2NhdGlvbiA9IG5hbWVzcGFjZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpbXBvcnRpbmdXU0RMRG9jLmFkZFJlYWRlcldhcm5pbmcoCi0gICAgICAgICAgICAgICAgICBpbXBvcnRpbmdEZWYsCi0gICAgICAgICAgICAgICAgICBpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50LAotICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9VTkFCTEVfVE9fSU1QT1JUX0JBRF9MT0NBVElPTiIsICInIiArIGFjdHVhbExvY2F0aW9uICsgIiciKSk7Ci0gICAgICAgICAgICAgIGltcG9ydEludmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIC8vIFRPRE86IG1vZGlmeSB0aGUgcmVhZGVyIGVycm9yIHRvIHNob3cgaW4gYWxsIHRoZSBjb3JyZWN0IGxvY2F0aW9ucy4KLSAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwKLSAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGxvY2F0ZSBpbXBvcnRlZCBkb2N1bWVudCAiCi0gICAgICAgICAgICAgICAgICArICJhdCAnIgotICAgICAgICAgICAgICAgICAgKyBsb2NhdGlvblVSSQotICAgICAgICAgICAgICAgICAgKyAiJyIKLSAgICAgICAgICAgICAgICAgICsgKGNvbnRleHRVUkkgPT0gbnVsbCA/ICIuIiA6ICIsIHJlbGF0aXZlIHRvICciICsgY29udGV4dFVSSSArICInLiIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZG9jID0gV1NETFJlYWRlckltcGwuZ2V0RG9jdW1lbnQoaW5wdXRTb3VyY2UsIGxvY2F0aW9uVVJJKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gVGhlIEZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHJlYWQuIAotICAgICAgICAgICAgICAvLyBQZXJmb3JtIFhNTCB2YWxpZGF0aW9uLgotICAgICAgICAgICAgICBpc1hNTFZhbGlkKGxvY2F0aW9uVVJJKTsKLS8vICAgICAgICAgICAgICBpbXBvcnRpbmdXU0RMRG9jLmFkZFJlYWRlckVycm9yKAotLy8gICAgICAgICAgICAgICAgICBpbXBvcnRpbmdEZWYsCi0vLyAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsCi0vLyAgICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfVU5BQkxFX1RPX0lNUE9SVF9JTlZBTElEIiwgIiciICsgbG9jYXRpb24gKyAiJyIpKTsKLSAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsZW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZighUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMsIGVsZW1lbnQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpc1dTRExGaWxlSW1wb3J0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQgaGFzIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgaW1wb3J0IGVsZW1lbnQgc3RhdGVzLgotICAgICAgICAgICAgU3RyaW5nIGltcG9ydFRhcmdldE5TID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7Ci0gICAgICAgICAgICBpZighaW1wb3J0VGFyZ2V0TlMuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGltcG9ydGluZ1dTRExEb2MuYWRkUmVhZGVyV2FybmluZygKLSAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RlZiwKLSAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1dBUk5fV1JPTkdfTlNfT05fSU1QT1JUIiwgIiciICsgbmFtZXNwYWNlICsgIiciLCAiJyIgKyBpbXBvcnRUYXJnZXROUyArICInIikpOwotICAgICAgICAgICAgICBlbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgaW1wb3J0SW52YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZihyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAge30KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbXBvcnQgZWxlbWVudCBmb3IgYSBXU0RMIGltcG9ydCBvZiBhIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFRoZSBkb2N1bWVudCBvZiB0aGUgaW1wb3J0LgotICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIGltcG9ydCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIEltcG9ydCBjcmVhdGVXU0RMSW1wb3J0KFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gIHsKLSAgICBpZihpbXBvcnREZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW1wb3J0RGVmOwotICAgIH0KLSAgICBpbXBvcnREZWYgPSBnZXROZXdJbXBvcnQoKTsKLSAgCi0gICAgaWYgKGltcG9ydERlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGltcG9ydERlZi5zZXREZWZpbml0aW9uKHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9uKCkpOwotICAgICAgc2NoZW1hcy5hZGRBbGwod3NkbERvY3VtZW50LmdldFNjaGVtYXMoKSk7Ci0gICAgICBpbXBvcnRpbmdXU0RMRG9jLmFkZFNjaGVtYXMoc2NoZW1hcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltcG9ydERlZjsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbXBvcnQgZWxlbWVudCBmb3IgYSBXU0RMIGltcG9ydCBvZiBhIHNjaGVtYSBpbXBvcnQgb2YgYSBzY2hlbWEgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIGltcG9ydCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIEltcG9ydCBjcmVhdGVYU0RJbXBvcnQoKQotICB7Ci0gICAgaWYoaW1wb3J0RGVmICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGltcG9ydERlZjsKLSAgICB9Ci0gICAgaW1wb3J0RGVmID0gZ2V0TmV3SW1wb3J0KCk7Ci0gICAgWFNEVmFsaWRhdG9yIHhzZHZhbGlkYXRvciA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLQotICAgIHhzZHZhbGlkYXRvci52YWxpZGF0ZShsb2NhdGlvbiwgWE1MQ2F0YWxvZ1Jlc29sdmVyLmdldEluc3RhbmNlKCksIHZhbGluZm8uZ2V0U2NoZW1hQ2FjaGUoKSk7Ci0gICAgaWYgKHhzZHZhbGlkYXRvci5pc1ZhbGlkKCkpCi0gICAgewotICAgICAgWFNNb2RlbCBzY2hlbWEgPSB4c2R2YWxpZGF0b3IuZ2V0WFNNb2RlbCgpOwotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzY2hlbWFzLmFkZChzY2hlbWEpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAvLyBhZGRSZWFkZXJXYXJuaW5nKAotLy8gICAgICAgIGRlZiwKLS8vICAgICAgICBpbXBvcnREZWYsCi0vLyAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9VTkFCTEVfVE9fSU1QT1JUX0lOVkFMSUQiLCAiJyIgKyBpbXBvcnREZWYuZ2V0TG9jYXRpb25VUkkoKSArICInIikpOwotICAgICAgSXRlcmF0b3IgZXJyb3JzID0geHNkdmFsaWRhdG9yLmdldEVycm9ycygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXJyb3JzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXJyb3JNZXNzYWdlIGVyciA9IChFcnJvck1lc3NhZ2UpIGVycm9ycy5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyB1cmkgPSBlcnIuZ2V0VVJJKCk7Ci0gICAgICAgIGludCBsaW5lID0gZXJyLmdldEVycm9yTGluZSgpOwotICAgICAgICBTdHJpbmcgZXJybWVzcyA9IGVyci5nZXRFcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgdmFsaW5mby5hZGRFcnJvcihlcnJtZXNzLCBsaW5lLCBlcnIuZ2V0RXJyb3JDb2x1bW4oKSwgdXJpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaW1wb3J0aW5nV1NETERvYy5hZGRTY2hlbWFzKHNjaGVtYXMpOwotICAgIHJldHVybiBpbXBvcnREZWY7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGltcG9ydCBlbGVtZW50IGlmIGl0IGhhcyBiZWVuIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbXBvcnQgZWxlbWVudCBpZiBpdCBoYXMgYmVlbiBjcmVhdGVkIG9yIG51bGwuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGdldEltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0RGVmOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgbmV3IGltcG9ydCBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBBIG5ldyBpbXBvcnQgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgSW1wb3J0IGdldE5ld0ltcG9ydCgpCi0gIHsKLSAgICBpZihpbXBvcnRJbnZhbGlkKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0RGVmID0gaW1wb3J0aW5nRGVmLmNyZWF0ZUltcG9ydCgpOyAKLSAgICAKLSAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgewotICAgICAgaW1wb3J0RGVmLnNldE5hbWVzcGFjZVVSSShuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGltcG9ydERlZi5zZXRMb2NhdGlvblVSSShsb2NhdGlvbik7Ci0gICAgfQotICAgIAotICAgIGlmKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotCi0gICAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgICB7Ci0gICAgICAgICAgaW1wb3J0RGVmLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW1wb3J0RGVmOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBzY2hlbWFzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBpbXBvcnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBzY2hlbWFzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBpbXBvcnQuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTY2hlbWFzKCkKLSAgewotICAgIHJldHVybiBzY2hlbWFzOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgaW1wb3J0IGltcG9ydHMgYSBXU0RMIGRvY3VtZW50LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBpbXBvcnQgaW1wb3J0cyBhIFdTREwgZG9jdW1lbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETEZpbGVJbXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIGlzV1NETEZpbGVJbXBvcnQ7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0gIHsKLSAgICBpZihvYmouZ2V0Q2xhc3MoKSA9PSBJbXBvcnRIb2xkZXIuY2xhc3MpCi0gICAgewotICAgICAgSW1wb3J0SG9sZGVyIG90aGVySW1wb3J0ID0gKEltcG9ydEhvbGRlcilvYmo7Ci0gICAgICAKLSAgICAgIGlmKGdldE5hbWVzcGFjZSgpLmVxdWFscyhvdGhlckltcG9ydC5nZXROYW1lc3BhY2UoKSkgJiYgZ2V0TG9jYXRpb24oKS5lcXVhbHMob3RoZXJJbXBvcnQuZ2V0TG9jYXRpb24oKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZSNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBpbnQgY29tcGFyZVRvKE9iamVjdCBvYmopCi0gIHsKLSAgICBpZihvYmogPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgSW1wb3J0SG9sZGVyIG90aGVySW1wb3J0ID0gKEltcG9ydEhvbGRlcilvYmo7Ci0gICAgICAKLSAgICByZXR1cm4gKGdldE5hbWVzcGFjZSgpK2dldExvY2F0aW9uKCkpLmNvbXBhcmVUbygob3RoZXJJbXBvcnQuZ2V0TmFtZXNwYWNlKCkrb3RoZXJJbXBvcnQuZ2V0TG9jYXRpb24oKSkpOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBtZXNzYWdlZ2VuZXJhdG9yIGZvciB0aGUgaW1wb3J0IGhvbGRlci4KLSAgICogCi0gICAqIEBwYXJhbSBtZyBUaGUgbWVzc2FnZSBnZW5lcmF0b3IgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZUdlbmVyYXRvcihNZXNzYWdlR2VuZXJhdG9yIG1nKQotICB7Ci0gICAgbWVzc2FnZWdlbmVyYXRvciA9IG1nOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgdGhlIGltcG9ydCBpcyBpbnZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGltcG9ydCBpcyBpbnZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ltcG9ydEludmFsaWQoKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydEludmFsaWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvTG9jYXRpb25Ib2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvTG9jYXRpb25Ib2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZlY2NjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0xvY2F0aW9uSG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLS8qKgotICogSG9sZHMgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciBhbiBlbGVtZW50IGluIGEgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2NhdGlvbkhvbGRlcgotewotICBwcml2YXRlIGludCBsaW5lOwotICBwcml2YXRlIGludCBjb2x1bW47Ci0gIHByaXZhdGUgU3RyaW5nIHVyaTsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIG51bWJlci4KLSAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIG51bWJlci4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBMb2NhdGlvbkhvbGRlcihpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSkKLSAgewotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47Ci0gICAgdGhpcy51cmkgPSB1cmk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGxpbmUgbnVtYmVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGluZSBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgaW50IGdldExpbmUoKQotICB7Ci0gICAgcmV0dXJuIGxpbmU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbHVtbiBudW1iZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gbnVtYmVyLgotICAgKi8KLSAgcHVibGljIGludCBnZXRDb2x1bW4oKQotICB7Ci0gICAgcmV0dXJuIGNvbHVtbjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZmlsZSBVUkkuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBmaWxlIFVSSS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkKLSAgewotICAgIHJldHVybiB1cmk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvUmVhZGVyRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvUmVhZGVyRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmZTc4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1JlYWRlckVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLS8qKgotICogSG9sZHMgYW4gZXJyb3IgY3JlYXRlZCB3aGVuIHJlYWRpbmcgYSBXU0RMIGRvY3VtZW50LgotICovCi1wdWJsaWMgY2xhc3MgUmVhZGVyRXJyb3IKLXsKLSAgcHJvdGVjdGVkIE9iamVjdCBwYXJlbnRPYmplY3Q7IC8vIHRoZSBvYmplY3Qgb2YgdGhlIHBhcmVudCBvZiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yCi0gIHByb3RlY3RlZCBPYmplY3Qgb2JqZWN0OyAvLyB0aGUgb2JqZWN0IHRoZSBlcnJvciBpcyBhc3NvY2lhdGVkIHdpdGgKLSAgcHJvdGVjdGVkIFN0cmluZyBlcnJvcjsgLy8gdGhlIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0IAotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRPYmplY3QgdGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvcgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IKLSAgICogQHBhcmFtIGVycm9yIHRoZSBlcnJvcgotICAgKi8KLSAgcHVibGljIFJlYWRlckVycm9yKE9iamVjdCBwYXJlbnRPYmplY3QsIE9iamVjdCBvYmplY3QsIFN0cmluZyBlcnJvcikKLSAgewotICAgIHRoaXMucGFyZW50T2JqZWN0ID0gcGFyZW50T2JqZWN0OwotICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OwotICAgIHRoaXMuZXJyb3IgPSBlcnJvcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UGFyZW50T2JqZWN0KCkKLSAgewotICAgIHJldHVybiBwYXJlbnRPYmplY3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldE9iamVjdCgpCi0gIHsKLSAgICByZXR1cm4gb2JqZWN0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yKCkKLSAgewotICAgIHJldHVybiBlcnJvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9WYWxpZGF0b3JSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9WYWxpZGF0b3JSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGM2Y2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvVmFsaWRhdG9yUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0KLS8qKgotICogQSByZWdpc3RyeSB0byBob2xkIGFsbCB0aGUgV1NETCAxLjEgdmFsaWRhdG9ycy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvclJlZ2lzdHJ5Ci17Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBWYWxpZGF0b3JSZWdpc3RyeSB2ZXJJbnN0YW5jZTsKLQotICBwcm90ZWN0ZWQgTWFwIHZhbGlkYXRvclJlZyA9IG5ldyBIYXNodGFibGUoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhpcyByZWdpc3RyeS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGluc3RhbmNlIG9mIHRoaXMgcmVnaXN0cnkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFZhbGlkYXRvclJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmICh2ZXJJbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHZlckluc3RhbmNlID0gbmV3IFZhbGlkYXRvclJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIHJldHVybiB2ZXJJbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWdpc3RlciB0aGlzIHZhbGlkYXRvciBkZWxlZ2F0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdGhlIHZhbGlkYXRvciBpcyBhc3NvY2lhdGVkIHdpdGguCi0gICAqIEBwYXJhbSB2YWxEZWxlZ2F0ZSBUaGUgdmFsaWRhdG9yIGRlbGVnYXRlIHRvIHJlZ2lzdGVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJWYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgdmFsRGVsZWdhdGUpCi0gIHsKLSAgICAvLyBhbGxvdyB0aGUgbnVsbCBuYW1lc3BhY2UgYnV0IG1ha2UgaXQgdGhlIGVtcHR5IHN0cmluZwotICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIHZhbGlkYXRvciB0byB0aGUgaGFzaHRhYmxlCi0gICAgaWYoIXZhbGlkYXRvclJlZy5jb250YWluc0tleShuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIHZhbGlkYXRvclJlZy5wdXQobmFtZXNwYWNlLCBuZXcgV1NETDExVmFsaWRhdG9yRGVsZWdhdGVDb250YWluZXIoKSk7Ci0gICAgfQotICAgICgoV1NETDExVmFsaWRhdG9yRGVsZWdhdGVDb250YWluZXIpdmFsaWRhdG9yUmVnLmdldChuYW1lc3BhY2UpKS5hZGRWYWxpZGF0b3IodmFsRGVsZWdhdGUpOwotICAgIC8vdmFsaWRhdG9yUmVnLnB1dChuYW1lc3BhY2UsIHZhbERlbGVnYXRlKTsKLSAgfQotCi0gIC8qKgotICAgKiBBc2sgZm9yIHRoZSB2YWxpZGF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZXNwYWNlLiBJZiBub25lIGlzIGZvdW5kCi0gICAqIHJldHVybiBudWxsLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIG9mIHRoZSB2YWxpZGF0b3IuCi0gICAqIEByZXR1cm4gVGhlIFdTREwgMS4xIHZhbGlkYXRvciBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBJV1NETDExVmFsaWRhdG9yIHF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIC8vIGlmIHRoZSBuYW1lc3BhY2UgaXMgbnVsbCBhbGxvdyBpdCBhbmQgdHJlYXQgaXQgYXMgdGhlIGVtcHR5IHN0cmluZwotICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICB9Ci0gICAgcmV0dXJuIChJV1NETDExVmFsaWRhdG9yKXZhbGlkYXRvclJlZy5nZXQobmFtZXNwYWNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdmFsaWRhdG9yIGZvciBhIGdpdmVuIG5hbWVzcGFjZSBpcyByZWdpc3RlcmVkLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHRvIGNoZWNrLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlcmUgaXMgYSB2YWxpZGF0b3IgcmVnaXN0ZXJlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzUmVnaXN0ZXJlZFZhbGlkYXRvcihTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgaWYgKHF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkobmFtZXNwYWNlKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBjbGFzcyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZUNvbnRhaW5lciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLSAgewotCXByaXZhdGUgTGlzdCB2YWxpZGF0b3JEZWxlZ2F0ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCi0JcHVibGljIHZvaWQgYWRkVmFsaWRhdG9yKFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlKQotCXsKLQkgIHZhbGlkYXRvckRlbGVnYXRlcy5hZGQoZGVsZWdhdGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKSB7Ci0JCS8vTm90aGluZyB0byBkbwotCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZShPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykgewotCQlJdGVyYXRvciB2YWxEZWxJdGVyID0gdmFsaWRhdG9yRGVsZWdhdGVzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlKHZhbERlbEl0ZXIuaGFzTmV4dCgpKQotCQl7Ci0JCSAgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUgPSAoV1NETDExVmFsaWRhdG9yRGVsZWdhdGUpdmFsRGVsSXRlci5uZXh0KCk7Ci0JCSAgZGVsZWdhdGUuZ2V0VmFsaWRhdG9yKCkudmFsaWRhdGUoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0JCX0KLQkJCi0JfQotCSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExQmFzaWNWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExQmFzaWNWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUzY2UxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMUJhc2ljVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2ODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuU2NoZW1hQXR0cmlidXRlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLlhTRFZhbGlkYXRvcjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0vKioKLSAqIFZhbGlkYXRlIHRoZSBlbGVtZW50cyBkZWZpbmVkIGluIGEgV1NETCAxLjEgRG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMMTFCYXNpY1ZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFZBTElEQVRPUl9SRVNPVVJDRV9CVU5ETEVfTkFNRSA9ICJ2YWxpZGF0ZXdzZGwiOwotCQotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIE5BTUVTUEFDRVNfRkVBVFVSRV9JRCA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVkFMSURBVElPTl9GRUFUVVJFX0lEID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFX0lEID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0NIRU1BX0ZVTExfQ0hFQ0tJTkdfRkVBVFVSRV9JRCA9Ci0gICAgImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYS1mdWxsLWNoZWNraW5nIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBDT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUl9JRCA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvY29udGludWUtYWZ0ZXItZmF0YWwtZXJyb3IiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNPQVBfRU5DT0RJTkdfVVJJID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLSAgCi0gIC8vIEVycm9yIGFuZCBXYXJuaW5nIEtleXMKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1BPUlRfTkFNRV9OT1RfVU5JUVVFID0gIl9QT1JUX05BTUVfTk9UX1VOSVFVRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9OT19CSU5ESU5HX0ZPUl9QT1JUID0gIl9OT19CSU5ESU5HX0ZPUl9QT1JUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX05PX0FERFJFU1NfUE9SVCA9ICJfTk9fQUREUkVTU19QT1JUIjsKLS8vICBwcml2YXRlIGZpbmFsIFN0cmluZyBfTU9SRV9USEVOX09ORV9BRERSRVNTX1BPUlQgPSAiX01PUkVfVEhFTl9PTkVfQUREUkVTU19QT1JUIjsgLy9UT0RPIHNob3VsZCBiZSBfTU9SRV9USEFOX09ORV9BRERSRVNTX1BPUlQsIG5vdCBUSEVOCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9QT1JUVFlQRV9VTkRFRklORURfRk9SX0JJTkRJTkcgPSAiX1BPUlRUWVBFX1VOREVGSU5FRF9GT1JfQklORElORyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSA9ICJfT1BFUkFUSU9OX1VOREVGSU5FRF9GT1JfUE9SVFRZUEUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfT1BFUkFUSU9OX05PX0lOUFVUX09SX09VVFBVVCA9ICJfT1BFUkFUSU9OX05PX0lOUFVUX09SX09VVFBVVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9JTlBVVF9OQU1FX05PVF9VTklRVUUgPSAiX0lOUFVUX05BTUVfTk9UX1VOSVFVRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQgPSAiX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9PVVRQVVRfTkFNRV9OT1RfVU5JUVVFID0gIl9PVVRQVVRfTkFNRV9OT1RfVU5JUVVFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9PVVRQVVQgPSAiX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9PVVRQVVQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfTUVTU0FHRV9VTkRFRklORURfRk9SX0ZBVUxUID0gIl9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUEFSVF9OT19FTEVNRU5UX09SX1RZUEUgPSAiX1BBUlRfTk9fRUxFTUVOVF9PUl9UWVBFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1BBUlRfQk9USF9FTEVNRU5UX0FORF9UWVBFID0gIl9QQVJUX0JPVEhfRUxFTUVOVF9BTkRfVFlQRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9QQVJUX0lOVkFMSURfRUxFTUVOVCA9ICJfUEFSVF9JTlZBTElEX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUEFSVF9JTlZBTElEX1RZUEUgPSAiX1BBUlRfSU5WQUxJRF9UWVBFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9QQVJUID0gIl9XQVJOX1NPQVBFTkNfSU1QT1JURURfUEFSVCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBpbnQgRUxFTUVOVCA9IDA7Ci0gIHByaXZhdGUgZmluYWwgaW50IFRZUEUgPSAxOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUkVRVUVTVCA9ICJSZXF1ZXN0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUkVTUE9OU0UgPSAiUmVzcG9uc2UiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBRVU9URSA9ICInIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7Ci0gIAotCi0gIC8vcHJvdGVjdGVkIFdTREwxMVZhbGlkYXRvckNvbnRyb2xsZXIgdmFsaWRhdG9yY29udHJvbGxlcjsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLQotICBwdWJsaWMgV1NETDExQmFzaWNWYWxpZGF0b3IoKQotICB7Ci0JUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRV9OQU1FLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgLy90aGlzLnZhbGlkYXRvcmNvbnRyb2xsZXIgPSB2YWxpZGF0b3Jjb250cm9sbGVyOwotICAgIC8vc2V0RGVmYXVsdFJlc291cmNlQnVuZGxlSWZOZWVkZWQodmFsaWRhdG9yY29udHJvbGxlcik7Ci0gICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWVsZW1lbnQ7Ci0gICAgdmFsaWRhdGVUeXBlcyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0gICAgdmFsaWRhdGVTZXJ2aWNlcyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0gICAgdmFsaWRhdGVCaW5kaW5ncyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0gICAgdmFsaWRhdGVQb3J0VHlwZXMod3NkbERlZmluaXRpb24sIHZhbEluZm8pOwotICAgIHZhbGlkYXRlTWVzc2FnZXMod3NkbERlZmluaXRpb24sIHZhbEluZm8pOwotCi0gIH0KLQotICAvKioKLSAgICogVGFrZXMgYSBsaXN0IG9mIEV4dGVuc2liaWxpdHlFbGVtZW50cyBhbmQgY2hlY2tzIGlmIHRoZXJlJ3MgYSB2YWxpZGF0b3IgCi0gICAqIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGVsZW1lbnQgYW5kIGlmIHNvIGNhbGxzIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dGVuc2liaWxpdHlFbGVtZW50cyBUaGUgbGlzdCBvZiBlbGVtZW50cyB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHZhbGlkYXRvcmNvbnRyb2xsZXIgVGhlIHZhbGlkYXRvciBjb250cm9sbGVyLgotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIGRlZm5pbnRpb25zIGVsZW1lbnQgZm9yIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdCgKLSAgICBMaXN0IHBhcmVudHMsCi0gICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMsCi0gICAgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBWYWxpZGF0b3JSZWdpc3RyeSB2ZXIgPSBWYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgIEl0ZXJhdG9yIGV4dEVsZW1zID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGV4dEVsZW1zLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLm5leHQoKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBJV1NETDExVmFsaWRhdG9yIHZhbCA9IHZlci5xdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KG5hbWVzcGFjZSk7Ci0gICAgICBpZiAodmFsICE9IG51bGwpCi0gICAgICAgewotICAgICAgICB2YWwudmFsaWRhdGUoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0vLyAgICAgIGVsc2UKLS8vICAgICAgIHsKLS8vICAgICAgICB2YWxJbmZvLmFkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihuYW1lc3BhY2UpOwotLy8gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGF0IHRoZSBUeXBlcyBlbGVtZW50IGlzIGNvcnJlY3QuIAotICAgKiAKLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGZyb20gdGhlIGN1cnJlbnQgZG9jdW1lbnQuCi0gICAqLwotCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlVHlwZXMoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBUeXBlcyB0eXBlcyA9IHdzZGxEZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0gICAgLy8gZW5zdXJlIHRoYXQgdHlwZXMgaXMgZGVmaW5lZAotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgcGFyZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHBhcmVudHMuYWRkKHdzZGxEZWZpbml0aW9uKTsKLSAgICAgIHBhcmVudHMuYWRkKDAsIHR5cGVzKTsKLSAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCB2YWxJbmZvKTsKLSAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgYWxsIG9mIHRoZSBkZWNsYXJlZCBzZXJ2aWNlcyBmb3IgdGhlIGRlZmluaXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlU2VydmljZXMoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBpZiAod3NkbERlZmluaXRpb24uZ2V0U2VydmljZXMoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE9iamVjdCBzZXJ2aWNlc1tdID0gd3NkbERlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS50b0FycmF5KCk7Ci0gICAgTGlzdCBwYXJlbnRzID0gbmV3IFZlY3RvcigpOwotICAgIHBhcmVudHMuYWRkKHdzZGxEZWZpbml0aW9uKTsKLSAgICBIYXNodGFibGUgYWxsUG9ydHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICAvL1RPRE86IGNoZWNrIHRoYXQgcG9ydHMgaW4gb3RoZXIgaW1wb3J0ZWQgZmlsZXMgZG9uJ3QgY29uZmxpY3Qgd2l0aCBwb3J0cyBpbiB0aGlzIG9uZQotICAgIC8vICAgIC8vIHJlZ2lzdGVyIGFsbCBvZiB0aGUgaW1wb3J0ZWQgcG9ydHMKLSAgICAvLyAgICBJdGVyYXRvciBpbXBvcnRzID0gd3NkbERlZmluaXRpb24uZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgLy8gICAgd2hpbGUoaW1wb3J0cy5oYXNOZXh0KCkpCi0gICAgLy8gICAgewotICAgIC8vICAgICAgSXRlcmF0b3IgaW1wc2VydmljZXMgPSAoKEltcG9ydClpbXBvcnRzLm5leHQoKSkuZ2V0RGVmaW5pdGlvbigpLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAvLyAgICAgIHdoaWxlKGltcHNlcnZpY2VzLmhhc05leHQoKSkKLSAgICAvLyAgICAgIHsKLSAgICAvLyAgICAgICAgSXRlcmF0b3IgaW1wcG9ydHMgPSAoKFNlcnZpY2UpaW1wc2VydmljZXMubmV4dCgpKS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgLy8gICAgICAgIHdoaWxlKGltcHBvcnRzLmhhc05leHQoKSkKLSAgICAvLyAgICAgICAgewotICAgIC8vICAgICAgICAgIFBvcnQgdGVtcFAgPSAoUG9ydClpbXBwb3J0cy5uZXh0KCk7Ci0gICAgLy8gICAgICAgICAgYWxsUG9ydHMucHV0KHRlbXBQLmdldE5hbWUoKSx0ZW1wUCk7CQotICAgIC8vICAgICAgICB9Ci0gICAgLy8gICAgICB9Ci0gICAgLy8gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU2VydmljZSBzID0gKFNlcnZpY2Upc2VydmljZXNbaV07Ci0gICAgICBwYXJlbnRzLmFkZCgwLCBzKTsKLSAgICAgIE9iamVjdCBwb3J0c1tdID0gcy5nZXRQb3J0cygpLnZhbHVlcygpLnRvQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcG9ydHMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcCA9IChQb3J0KXBvcnRzW2pdOwotICAgICAgICBwYXJlbnRzLmFkZCgwLCBwKTsKLSAgICAgICAgLy8gYSBQb3J0IG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgV0RTTCBkb2N1bWVudAotICAgICAgICBpZiAoYWxsUG9ydHMuY29udGFpbnMocC5nZXROYW1lKCkpKQotICAgICAgICB7ICBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpfTsKLSAgICAgICAgICAKLSAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9QT1JUX05BTUVfTk9UX1VOSVFVRSwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIF9QT1JUX05BTUVfTk9UX1VOSVFVRSwgYXJncyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYWxsUG9ydHMucHV0KHAuZ2V0TmFtZSgpLCBwKTsKLQotICAgICAgICAgIC8vIGdldCB0aGUgYmluZGluZyBmb3IgdGhpcyBwb3J0IGFuZCBzZWUgaWYgdGhlIFBvcnRUeXBlIGZvciB0aGUgYmluZGluZwotICAgICAgICAgIC8vIGlzIGRlZmluZWQKLSAgICAgICAgICBpZiAocC5nZXRCaW5kaW5nKCkgPT0gbnVsbCB8fCBwLmdldEJpbmRpbmcoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICAgICAgICAgIGlmIChwLmdldEJpbmRpbmcoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBiaW5kaW5nTmFtZSA9IHAuZ2V0QmluZGluZygpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgYXJnc1tdID0ge3AuZ2V0TmFtZSgpfTsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9OT19CSU5ESU5HX0ZPUl9QT1JULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwgUVVPVEUgKyBiaW5kaW5nTmFtZSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgcCwgX05PX0JJTkRJTkdfRk9SX1BPUlQsIGFyZ3MpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgdGhhdCB0aGUgb3V0cHV0IG9mIG9uZSBwb3J0IGlzbid0IHRoZSBpbnB1dCBvZiBhbm90aGVyIGFuZCB2aWNlIHZlcnNhCi0gICAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoZSBwb3J0Ci0gICAgICAgICAgICAvLyB0aGVyZSBjYW4gb25seSBiZSBvbmUgYW5kIG11c3QgYmUgb25lIGV4dGVuc2liaWxpdHkgZWxlbWVudCBkZWZpbmVkIGZvciBhIHBvcnQKLSAgICAgICAgICAgIC8vIFRPRE86IFJldmlzaXQuIFRoZXJlIGlzIG5vIHN0YW5kYXJkIHdheSB0byBkZXRlcm1pbmUgd2hpY2ggZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICAgICAgICAgICAvLyBzcGVjaWZpZXMgdGhlIGFkZHJlc3MuIEV2ZW4gd2hlbiB0aGUgcG9ydCBoYXMgYXQgbGVhc3Qgb25lIGV4dGVuc2liaWxpdHkgZWxlbWVudCwKLSAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIHdheSB0byBlbnN1cmUgdGhhdCBpcyAidGhlIiBhZGRyZXNzIG9uZS4KLSAgICAgICAgICAgIExpc3QgZXh0ZWxlbXMgPSBwLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgaWYgKGV4dGVsZW1zLnNpemUoKSA8IDEpCi0gICAgICAgICAgICB7IFN0cmluZyBhcmdzW109IHtwLmdldE5hbWUoKX07Ci0gICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX05PX0FERFJFU1NfUE9SVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgcCwgX05PX0FERFJFU1NfUE9SVCwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0vLyBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3Mzg1NCAgICAgICAgICAgIAotLy8gVGhlIFdTLUkgYmFzaWMgcHJvZmlsZSBoYXMgcmVsYXhlZCB0aGUgbnVtYmVyIG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgYWxsb3dlZCBmb3IgcG9ydHMuCi0vLyBBIG51bWJlciBvZiBXUyBzcGVjaWZpY2F0aW9ucyBsaWtlIEpBWC1XUyBhbmQgV1MgUG9saWN5IGRlZmluZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBwb3J0cy4KLS8vIFRoaXMgY29kZSBpcyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgaXMgdG9vIHJlc3RyaWN0aXZlIGFuZCBnZW5lcmF0ZXMgZXJyb3JzIHRoYXQgYXBwZWFyIGludmFsaWQuICAgICAgICAgICAgCi0vLyAgICAgICAgICAgIGVsc2UgaWYgKGV4dGVsZW1zLnNpemUoKSA+IDEpCi0vLyAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICBmb3IgKGludCBrID0gMTsgayA8IGV4dGVsZW1zLnNpemUoKTsgaysrKQotLy8gICAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSB7cC5nZXROYW1lKCl9OwotLy8gICAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLS8vICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX01PUkVfVEhFTl9PTkVfQUREUkVTU19QT1JULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0vLyAgICAgICAgICAgICAgICAgIGV4dGVsZW1zLmdldChrKSwgX01PUkVfVEhFTl9PTkVfQUREUkVTU19QT1JULCBhcmdzKTsKLS8vICAgICAgICAgICAgICB9Ci0vLyAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIHAuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgICAgfQotICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgdGhlIHNlcnZpY2UKLSAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIHMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB0aGF0IHRoZSBiaW5kaW5ncyByZWZlciB0byB2YWxpZCBQb3J0VHlwZXMgYW5kIGFsbCBvZiB0aGUgb3BlcmF0aW9ucwotICAvLyBpbiBhIGdpdmVuIGJpbmRpbmcgcmVmZXIgdG8gYSBkZWZpbmVkIG9wZXJhdGlvbiB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcKLSAgLy8gUG9ydFR5cGUuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQmluZGluZ3MoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBpZiAod3NkbERlZmluaXRpb24uZ2V0QmluZGluZ3MoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE9iamVjdCBiaW5kaW5nc1tdID0gd3NkbERlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS50b0FycmF5KCk7Ci0gICAgTGlzdCBwYXJlbnRzID0gbmV3IFZlY3RvcigpOwotICAgIHBhcmVudHMuYWRkKHdzZGxEZWZpbml0aW9uKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpbmRpbmdzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYiA9IChCaW5kaW5nKWJpbmRpbmdzW2ldOwotICAgICAgcGFyZW50cy5hZGQoMCwgYik7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGIuZ2V0UG9ydFR5cGUoKTsKLQotICAgICAgaWYgKHBvcnRUeXBlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgLy8gdGhlIFBvcnRUeXBlIGlzIG5vdCBkZWZpbmVkIHNvIGRvbid0IGJvdGhlciBjaGVja2luZyB0aGUgb3BlcmF0aW9ucwotICAgICAgaWYgKHBvcnRUeXBlLmlzVW5kZWZpbmVkKCkpCi0gICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7cG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgYi5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpfTsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9QT1JUVFlQRV9VTkRFRklORURfRk9SX0JJTkRJTkcsCi0gICAgICAgICAgICBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwKLSAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICBiLCBfUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HLCBhcmdzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gdGhlIFBvcnRUeXBlIGlzIGRlZmluZWQgc28gbm93IHdlIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZAotICAgICAgICBPYmplY3QgYmluZGluZ09wZXJhdGlvbnNbXSA9IGIuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS50b0FycmF5KCk7Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgdGhlIG9wZXJhdGlvbiBpcyBkZWZpbmVkIGZvciBlYWNoIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBiaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IGsrKykKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYm8gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nT3BlcmF0aW9uc1trXTsKLSAgICAgICAgICBwYXJlbnRzLmFkZCgwLCBibyk7Ci0gICAgICAgICAgaWYgKGJvLmdldE9wZXJhdGlvbigpID09IG51bGwgfHwgYm8uZ2V0T3BlcmF0aW9uKCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge2IuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKX07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBfT1BFUkFUSU9OX1VOREVGSU5FRF9GT1JfUE9SVFRZUEUsCi0gICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsCi0gICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzFdICsgUVVPVEUpLAotICAgICAgICAgICAgICBibywgX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFLCBhcmdzKTsKLSAgICAgICAgICAgIC8vIG5pY2UgaWRlYSB0byBhZGQgc3VnZ2VzdGlvbnMgdG8gb3RoZXIgZWxlbWVudHMgdG8gZml4IHRoZSBlcnJvcgotICAgICAgICAgICAgLy8gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpcGUgZmlsZXMgbGlrZSB0aGlzCi0gICAgICAgICAgICAvL2FkZFZhbGlkYXRpb25NZXNzYWdlKHdhcm5pbmdMaXN0LHBvcnRUeXBlLHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiRGVmaW5lIGFuIG9wZXJhdGlvbiBoZXJlIHRvIGNvcnJlc3BvbmQgd2l0aCB0aGUgb3BlcmF0aW9uIGluOiAiICsgYm8uZ2V0TmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gdGFrZSBjYXJlIG9mIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBpbiB0aGUgYmluZGluZyBvcGVyYXRpb24sIGJpbmRpbmcgaW5wdXRzLCBvdXRwdXRzIGFuZCBmYXVsdHMKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ0lucHV0IGJpbnB1dCA9IGJvLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGJpbnB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwYXJlbnRzLmFkZCgwLCBiaW5wdXQpOwotICAgICAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBiaW5kaW5nIG9wZXJhdGlvbiBpbnB1dAotICAgICAgICAgICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdCgKLSAgICAgICAgICAgICAgICBwYXJlbnRzLAotICAgICAgICAgICAgICAgIGJvLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLAotICAgICAgICAgICAgICAgIHZhbEluZm8pOwotICAgICAgICAgICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJpbmRpbmdPdXRwdXQgYm91dHB1dCA9IGJvLmdldEJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgICAgIGlmIChib3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBhcmVudHMuYWRkKDAsIGJvdXRwdXQpOwotICAgICAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBiaW5kaW5nIG9wZXJhdGlvbiBvdXRwdXQKLSAgICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QoCi0gICAgICAgICAgICAgICAgcGFyZW50cywKLSAgICAgICAgICAgICAgICBiby5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksCi0gICAgICAgICAgICAgICAgdmFsSW5mbyk7Ci0gICAgICAgICAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gbm8gaW5wdXQgb3Igb3V0cHV0IGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoZSBvcGVyYXRpb24KLSAgICAgICAgICAgIGlmIChiaW5wdXQgPT0gbnVsbCAmJiBib3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7IGJvLmdldE5hbWUoKSB9OwotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgYm8sIF9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVULCBhcmdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIGVhY2ggYmluZGluZyBvcGVyYXRpb24gZmF1bHQKLSAgICAgICAgICAgIEl0ZXJhdG9yIGZhdWx0cyA9IGJvLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEJpbmRpbmdGYXVsdCBiZiA9IChCaW5kaW5nRmF1bHQpZmF1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgcGFyZW50cy5hZGQoMCwgYmYpOwotICAgICAgICAgICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdChwYXJlbnRzLCBiZi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgdmFsSW5mbyk7Ci0gICAgICAgICAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBiaW5kaW5nIG9wZXJhdGlvbgotICAgICAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIGJvLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCB2YWxJbmZvKTsKLSAgICAgICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgdGhlIGJpbmRpbmcKLSAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIGIuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhhdCBhbGwgb2YgdGhlIFBvcnRUeXBlcyBoYXZlIHZhbGlkIG1lc3NhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVpcgotICAvLyBvcGVyYXRpb24gaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgdHlwZXMuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlUG9ydFR5cGVzKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgaWYgKHdzZGxEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgT2JqZWN0IHBvcnR0eXBlc1tdID0gd3NkbERlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkudG9BcnJheSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0dHlwZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgUG9ydFR5cGUgcCA9IChQb3J0VHlwZSlwb3J0dHlwZXNbaV07Ci0gICAgICBPYmplY3Qgb3BlcmF0aW9uc1tdID0gcC5nZXRPcGVyYXRpb25zKCkudG9BcnJheSgpOwotICAgICAgTGlzdCBpbkFuZE91dE5hbWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvcGVyYXRpb25zLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBPcGVyYXRpb24gbyA9IChPcGVyYXRpb24pb3BlcmF0aW9uc1tqXTsKLSAgICAgICAgaWYgKG8gPT0gbnVsbCB8fCBvLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIG1lc3NhZ2VzIGFyZSBkZWZpbmVkIGZvciB0aGUgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHRzCi0gICAgICAgIE1lc3NhZ2UgbTsKLSAgICAgICAgSW5wdXQgaW5wdXQgPSBvLmdldElucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGlucHV0TmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAvLyBpZiB0aGUgbmFtZSBpc24ndCBkZWZpbmVkIGl0IGRlZmF1bHRzIHRvIHRoaXMKLSAgICAgICAgICBpZiAoaW5wdXROYW1lID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXROYW1lID0gby5nZXROYW1lKCkgKyBSRVFVRVNUOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaW5BbmRPdXROYW1lcy5jb250YWlucyhpbnB1dE5hbWUpKQotICAgICAgICAgIHsgU3RyaW5nW10gYXJncyA9IHtpbnB1dE5hbWUsIHAuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSB9OwotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgX0lOUFVUX05BTUVfTk9UX1VOSVFVRSwKLSAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwKLSAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMV0gKyBRVU9URSksCi0gICAgICAgICAgICAgIGlucHV0LCBfSU5QVVRfTkFNRV9OT1RfVU5JUVVFLCBhcmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGluQW5kT3V0TmFtZXMuYWRkKGlucHV0TmFtZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbSA9IGlucHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBpZiAobSAhPSBudWxsICYmIG0uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc05hbWUgPSBFTVBUWV9TVFJJTkc7Ci0gICAgICAgICAgICBRTmFtZSBtZXNzUU5hbWUgPSBtLmdldFFOYW1lKCk7Ci0gICAgICAgICAgICBpZiAobWVzc1FOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1lc3NOYW1lID0gbWVzc1FOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IHttZXNzTmFtZX07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICBpbnB1dCwgX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIE91dHB1dCBvdXRwdXQgPSBvLmdldE91dHB1dCgpOwotICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgb3V0cHV0TmFtZSA9IG91dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgLy8gaWYgdGhlIG5hbWUgaXNuJ3QgZGVmaW5lZCBpdCBkZWZhdWx0cyB0byB0aGlzCi0gICAgICAgICAgaWYgKG91dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXROYW1lID0gby5nZXROYW1lKCkgKyBSRVNQT05TRTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoaW5BbmRPdXROYW1lcy5jb250YWlucyhvdXRwdXROYW1lKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge291dHB1dE5hbWUsIHAuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKX07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIF9PVVRQVVRfTkFNRV9OT1RfVU5JUVVFLAotICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLAotICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgb3V0cHV0LCBfT1VUUFVUX05BTUVfTk9UX1VOSVFVRSwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbkFuZE91dE5hbWVzLmFkZChvdXRwdXROYW1lKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBtID0gb3V0cHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBpZiAobSAhPSBudWxsICYmIG0uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc05hbWUgPSBFTVBUWV9TVFJJTkc7Ci0gICAgICAgICAgICBRTmFtZSBtZXNzUU5hbWUgPSBtLmdldFFOYW1lKCk7Ci0gICAgICAgICAgICBpZiAobWVzc1FOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1lc3NOYW1lID0gbWVzc1FOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IHttZXNzTmFtZX07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfT1VUUFVULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgb3V0cHV0LCBfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgT2JqZWN0IGZhdWx0c1tdID0gby5nZXRGYXVsdHMoKS52YWx1ZXMoKS50b0FycmF5KCk7Ci0KLSAgICAgICAgLy9MaXN0IGZhdWx0TmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZmF1bHRzLmxlbmd0aDsgaysrKQotICAgICAgICB7Ci0gICAgICAgICAgRmF1bHQgZiA9IChGYXVsdClmYXVsdHNba107Ci0gICAgICAgICAgbSA9IGYuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgIGlmIChtICE9IG51bGwgJiYgbS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzTmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICAgICAgICAgIFFOYW1lIG1lc3NRTmFtZSA9IG0uZ2V0UU5hbWUoKTsKLSAgICAgICAgICAgIGlmIChtZXNzUU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVzc05hbWUgPSBtZXNzUU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgYXJnc1tdID0ge21lc3NOYW1lfTsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9GQVVMVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgIGYsIF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQsIGFyZ3MpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgbWVzc2FnZXMgZGVmaW5lZCBpbiB0aGUgV1NETCBkb2N1bWVudCBhcmUgdmFsaWQuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlTWVzc2FnZXMoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBpZiAod3NkbERlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIEl0ZXJhdG9yIG1lc3NhZ2VzID0gd3NkbERlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKG1lc3NhZ2VzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBNZXNzYWdlIG0gPSAoTWVzc2FnZSltZXNzYWdlcy5uZXh0KCk7Ci0gICAgICBpZiAoIW0uaXNVbmRlZmluZWQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgdGhlIG1lc3NhZ2UgaGFzIGEgcGFydCAoYW5kIGl0IGRvZXNuJ3QgaGF2ZSB0bykKLSAgICAgICAgLy8gZW5zdXJlIGVhY2ggbWVzc2FnZSBwYXJ0IGhhcyBlaXRoZXIgYW4gZWxlbWVudCBvciBhIHR5cGUKLSAgICAgICAgaWYgKCFtLmdldFBhcnRzKCkuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHMgPSBtLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAocGFydHMuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFBhcnQgcCA9IChQYXJ0KXBhcnRzLm5leHQoKTsKLSAgICAgICAgICAgIFFOYW1lIGVsZW1lbnROYW1lID0gcC5nZXRFbGVtZW50TmFtZSgpOwotICAgICAgICAgICAgUU5hbWUgdHlwZU5hbWUgPSBwLmdldFR5cGVOYW1lKCk7Ci0gICAgICAgICAgICBNYXAgZXh0QXR0cyA9IHAuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpOwotICAgICAgICAgICAgLy8gVE9ETzpUaGlzIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZCBhcyBwYXJ0cyBjYW4gaGF2ZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgICAvL2Vuc3VyZSB0aGUgcGFydCBoYXMgYSB0eXBlIG9yIGFuIGVsZW1lbnQgZGVmaW5lZAotICAgICAgICAgICAgaWYgKGVsZW1lbnROYW1lID09IG51bGwgJiYgdHlwZU5hbWUgPT0gbnVsbCAmJiAoZXh0QXR0cyA9PSBudWxsIHx8IGV4dEF0dHMuaXNFbXB0eSgpKSkKLSAgICAgICAgICAgIHsgU3RyaW5nW10gYXJncyA9IHsgcC5nZXROYW1lKCl9OwotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9QQVJUX05PX0VMRU1FTlRfT1JfVFlQRSwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgcCwgX1BBUlRfTk9fRUxFTUVOVF9PUl9UWVBFLCBhcmdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vaGVyZSB0aGUgcGFydCBoYXMgYm90aCB0aGUgZWxlbWVudCBhbmQgdHlwZSBkZWZpbmVkIGFuZCBpdCBjYW4gb25seSBoYXZlIG9uZSBkZWZpbmVkCQotICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudE5hbWUgIT0gbnVsbCAmJiB0eXBlTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpfTsKLSAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfUEFSVF9CT1RIX0VMRU1FTlRfQU5EX1RZUEUsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICAgIHAsIF9QQVJUX0JPVEhfRUxFTUVOVF9BTkRfVFlQRSwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWNoZWNrUGFydENvbnN0aXR1ZW50KGVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpLAotICAgICAgICAgICAgICAgIEVMRU1FTlQsCi0gICAgICAgICAgICAgICAgcCwKLSAgICAgICAgICAgICAgICB2YWxJbmZvKSkKLSAgICAgICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpLCBlbGVtZW50TmFtZS5nZXRMb2NhbFBhcnQoKX07Ci0gICAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICBfUEFSVF9JTlZBTElEX0VMRU1FTlQsCi0gICAgICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLAotICAgICAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMV0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgICBwLCBfUEFSVF9JTlZBTElEX0VMRU1FTlQsIGFyZ3MpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSB0eXBlIGl0c2VsZiBpcyBkZWZpbmVkIHByb3Blcmx5Ci0gICAgICAgICAgICAgIGlmICghY2hlY2tQYXJ0Q29uc3RpdHVlbnQodHlwZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHR5cGVOYW1lLmdldExvY2FsUGFydCgpLCBUWVBFLCBwLCB2YWxJbmZvKSkKLSAgICAgICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpLCB0eXBlTmFtZS5nZXRMb2NhbFBhcnQoKSB9OyAKLSAgICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIF9QQVJUX0lOVkFMSURfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsCi0gICAgICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICAgIHAsIF9QQVJUX0lOVkFMSURfVFlQRSwgYXJncyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWUgaXMgZGVmaW5lZCBpbiB0aGUgbmFtZXNwYWNlIGZvciB0aGUgcGFydC4gIEEgcGFydCBpcyBhbgotICAgKiBFTEVNRU5UIG9yIGEgVFlQRS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0byBjaGVjay4KLSAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gY2hlY2suCi0gICAqIEBwYXJhbSBwYXJ0IFRoZSBwYXJ0IHRvIGNoZWNrLCBlaXRoZXIgRUxFTUVOVCBvciBUWVBFLgotICAgKiBAcGFyYW0gcGFydE9iamVjdCBUaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gcGFydC4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBwYXJ0IGVsZW1lbnQgb2YgdHlwZSBpcyBkZWZpbmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1BhcnRDb25zdGl0dWVudCgKLSAgICBTdHJpbmcgbmFtZXNwYWNlLAotICAgIFN0cmluZyBuYW1lLAotICAgIGludCBwYXJ0LAotICAgIFBhcnQgcGFydE9iamVjdCwKLSAgICBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotCi0gICAgYm9vbGVhbiBwYXJ0dmFsaWQgPSBmYWxzZTsKLSAgICAvLyBGaXJzdCB0YWtlIGNhcmUgb2YgdGhlIHNpdHVhdGlvbiB3aGVyZSBpdCdzIGZyb20gdGhlIHNjaGVtYSBuYW1lc3BhY2UuCi0gICAgLy8gVGhlIDE5OTksIDIwMDAgYW5kIDIwMDEgc2NoZW1hIG5hbWVzcGFjZXMgYXJlIGFsbCBhY2NlcHRlZC4KLSAgICBpZiAobmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKQotICAgICAgfHwgbmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KQotICAgICAgfHwgbmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICB7Ci0gICAgICBTY2hlbWFBdHRyaWJ1dGVUYWJsZSB4c2RUYWJsZSA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVUYWJsZSgpOwotICAgICAgaWYgKHhzZFRhYmxlLmNvbnRhaW5zU3ltYm9sKG5hbWUpKQotICAgICAgewotICAgICAgICBwYXJ0dmFsaWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICAvLyBjaGVjayBpbmxpbmUgYW5kIGltcG9ydGVkIHNjaGVtYQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBYU01vZGVsW10gc2NoZW1hcyA9IHZhbEluZm8uZ2V0U2NoZW1hcygpOwotICAgICAgaW50IG51bVNjaGVtYXMgPSBzY2hlbWFzLmxlbmd0aDsKLSAgICAgIC8vSXRlcmF0b3Igc2NoZW1hc0l0ZXIgPSBzY2hlbWFzLml0ZXJhdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVNjaGVtYXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgWFNNb2RlbCBzY2hlbWEgPSBzY2hlbWFzW2ldOwotICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocGFydCA9PSBFTEVNRU5UICYmIHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb24obmFtZSwgbmFtZXNwYWNlKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnR2YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocGFydCA9PSBUWVBFICYmIHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbihuYW1lLCBuYW1lc3BhY2UpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBJZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaGFzbid0IGJlZW4gZXhwbGljaXRseSBpbXBvcnRlZCBkbyBzbwotCS8vIG5vdy4KLSAgICAvLyBBbGxvdyB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgdG8gYmUgYXV0b21hdGljYWxseSBpbXBvcnRlZCBidXQgbWFyawotCS8vIGl0IGFzIGEgd2FybmluZy4KLSAgICBpZiAoIXBhcnR2YWxpZCAmJiBuYW1lc3BhY2UuZXF1YWxzKFNPQVBfRU5DT0RJTkdfVVJJKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgWFNEVmFsaWRhdG9yIHhzZFZhbCA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLSAgICAgICAgU3RyaW5nIHNvYXBFbmMgPSB2YWxJbmZvLmdldFVSSVJlc29sdmVyKCkucmVzb2x2ZSgiIiwgU09BUF9FTkNPRElOR19VUkksIG51bGwpLmdldFBoeXNpY2FsTG9jYXRpb24oKTsKLSAgICAgICAgaWYoc29hcEVuYyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgeHNkVmFsLnZhbGlkYXRlKHNvYXBFbmMsIG51bGwsIHZhbEluZm8uZ2V0U2NoZW1hQ2FjaGUoKSk7Ci0gICAgICAgICAgLy8gc2FuaXR5IGNoZWNrIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcKLSAgICAgICAgICBpZiAoeHNkVmFsLmlzVmFsaWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBYU01vZGVsIHhzTW9kZWwgPSB4c2RWYWwuZ2V0WFNNb2RlbCgpOwotCi0gICAgICAgICAgICBpZiAocGFydCA9PSBFTEVNRU5UICYmIHhzTW9kZWwuZ2V0RWxlbWVudERlY2xhcmF0aW9uKG5hbWUsIG5hbWVzcGFjZSkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGFydHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHBhcnQgPT0gVFlQRSAmJiB4c01vZGVsLmdldFR5cGVEZWZpbml0aW9uKG5hbWUsIG5hbWVzcGFjZSkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGFydHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhbEluZm8uYWRkV2FybmluZyhtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfV0FSTl9TT0FQRU5DX0lNUE9SVEVEX1BBUlQsIFFVT1RFICsgbmFtZSArIFFVT1RFKSwgcGFydE9iamVjdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIkFuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBwZXJmb3JtaW5nIFdTREwgdmFsaWRhdGlvbiBvZiBhIHBhcnQgd2l0aCB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFydHZhbGlkOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdGlvbkluZm9JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRpb25JbmZvSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTM0YTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdGlvbkluZm9JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uSW5mb0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbmF0aW9uIG9mIFdTREwxMVZhbGlkYXRpb25JbmZvLgotICovCi1wdWJsaWMgY2xhc3MgV1NETDExVmFsaWRhdGlvbkluZm9JbXBsIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRpb25JbmZvCi17Ci0gIHByaXZhdGUgSVZhbGlkYXRpb25JbmZvIHZhbGluZm8gPSBudWxsOwotICBwcml2YXRlIEhhc2h0YWJsZSBlbGVtZW50bG9jYXRpb25zID0gbnVsbDsKLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXMgPSBuZXcgVmVjdG9yKCk7Ci0gIAotICBwdWJsaWMgV1NETDExVmFsaWRhdGlvbkluZm9JbXBsKElWYWxpZGF0aW9uSW5mbyB2YWxpbmZvKQotICB7Ci0gICAgdGhpcy52YWxpbmZvID0gdmFsaW5mbzsKLSAgfQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jZ2V0RmlsZVVSSSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZpbGVVUkkoKQotICB7Ci0gICAgcmV0dXJuIHZhbGluZm8uZ2V0RmlsZVVSSSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZFNjaGVtYShvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU2NoZW1hKFhTTW9kZWwgeHNNb2RlbCkKLSAgewotICAgIGlmICh4c01vZGVsICE9IG51bGwpCi0gICAgewotICAgICAgc2NoZW1hcy5hZGQoeHNNb2RlbCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jZ2V0U2NoZW1hcygpCi0gICAqLwotICBwdWJsaWMgWFNNb2RlbFtdIGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIChYU01vZGVsW10pc2NoZW1hcy50b0FycmF5KG5ldyBYU01vZGVsW3NjaGVtYXMuc2l6ZSgpXSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuV1NETDExVmFsaWRhdGlvbkluZm8jY2xlYXJkU2NoZW1hcygpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhclNjaGVtYXMoKQotICB7Ci0gICAgc2NoZW1hcy5jbGVhcigpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNzZXRFbGVtZW50TG9jYXRpb25zKGphdmEudXRpbC5IYXNodGFibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50TG9jYXRpb25zKEhhc2h0YWJsZSBlbGVtZW50TG9jYXRpb25zKQotICB7Ci0gICAgdGhpcy5lbGVtZW50bG9jYXRpb25zID0gZWxlbWVudExvY2F0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBlbGVtZW50KQotICB7Ci0gICAgYWRkRXJyb3IobWVzc2FnZSwgZWxlbWVudCwgbnVsbCwgbnVsbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10pCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIExvY2F0aW9uSG9sZGVyIGxvY2F0aW9uOwotICAgIGlmIChlbGVtZW50bG9jYXRpb25zLmNvbnRhaW5zS2V5KGVsZW1lbnQpKQotICAgIHsKLSAgICAgIGxvY2F0aW9uID0gKExvY2F0aW9uSG9sZGVyKWVsZW1lbnRsb2NhdGlvbnMuZ2V0KGVsZW1lbnQpOwotICAgICAgYWRkRXJyb3IobWVzc2FnZSwgbG9jYXRpb24uZ2V0TGluZSgpLCBsb2NhdGlvbi5nZXRDb2x1bW4oKSwgbG9jYXRpb24uZ2V0VVJJKCksIGVycm9yS2V5LCBtZXNzYWdlQXJndW1lbnRzKTsKLSAgICB9Ci0gICAgLy8gaWYgd2UgZ2l2ZSBpdCBhbiBlbGVtZW50IHRoYXQgaGFzbid0IGJlZW4gZGVmaW5lZCB3ZSdsbCBzZXQgdGhlIGxvY2F0aW9uCi0gICAgLy8gYXQgKDAsMCkgc28gdGhlIGVycm9yIHNob3dzIHVwIGJ1dCBubyBsaW5lIG1hcmtlciBpbiB0aGUgZWRpdG9yCi0gICAgZWxzZQotICAgIHsKLSAgICAgIGFkZEVycm9yKG1lc3NhZ2UsIDAsIDEsIGdldEZpbGVVUkkoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBlbGVtZW50KQotICB7Ci0gICAgTG9jYXRpb25Ib2xkZXIgbG9jYXRpb247Ci0gICAgaWYgKGVsZW1lbnRsb2NhdGlvbnMuY29udGFpbnNLZXkoZWxlbWVudCkpCi0gICAgewotICAgICAgbG9jYXRpb24gPSAoTG9jYXRpb25Ib2xkZXIpZWxlbWVudGxvY2F0aW9ucy5nZXQoZWxlbWVudCk7Ci0gICAgICBhZGRXYXJuaW5nKG1lc3NhZ2UsIGxvY2F0aW9uLmdldExpbmUoKSwgbG9jYXRpb24uZ2V0Q29sdW1uKCksIGxvY2F0aW9uLmdldFVSSSgpKTsKLSAgICB9Ci0gICAgLy8gaWYgd2UgZ2l2ZSBpdCBhbiBlbGVtZW50IHRoYXQgaGFzbid0IGJlZW4gZGVmaW5lZCB3ZSdsbCBzZXQgdGhlIGxvY2F0aW9uCi0gICAgLy8gYXQgKDAsMCkgc28gdGhlIGVycm9yIHNob3dzIHVwIGJ1dCBubyBsaW5lIG1hcmtlciBpbiB0aGUgZWRpdG9yCi0gICAgZWxzZQotICAgIHsKLSAgICAgIGFkZFdhcm5pbmcobWVzc2FnZSwgMCwgMSwgZ2V0RmlsZVVSSSgpKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLldTREwxMVZhbGlkYXRpb25JbmZvI2FkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLS8vICBwdWJsaWMgdm9pZCBhZGROYW1lc3BhY2VXaXRoTm9WYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSkKLS8vICB7Ci0vLyAgICB2YWxpbmZvLmFkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihuYW1lc3BhY2UpOwotLy8KLS8vICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZEVycm9yKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgYWRkRXJyb3IobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIG51bGwsIG51bGwpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpLCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpCi0gIHsgCi0gICAgdHJ5Ci0gICAgeyAoKFZhbGlkYXRpb25JbmZvSW1wbCl2YWxpbmZvKS5hZGRFcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgZXJyb3JLZXksIG1lc3NhZ2VBcmd1bWVudHMpOwotICAgIH0KLSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdmFsaW5mby5hZGRFcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jYWRkV2FybmluZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgdmFsaW5mby5hZGRXYXJuaW5nKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdXJpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLndzZGwxMS5XU0RMMTFWYWxpZGF0aW9uSW5mbyNnZXRVUklSZXNvbHZlcigpCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKSAKLSAgewotCXJldHVybiB2YWxpbmZvLmdldFVSSVJlc29sdmVyKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jZ2V0U2NoZW1hQ2FjaGUoKQotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFNjaGVtYUNhY2hlKCkgCi0gIHsKLQlYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IChYTUxHcmFtbWFyUG9vbCl2YWxpbmZvLmdldEF0dHJpYnV0ZShDb25zdGFudHMuWE1MU0NIRU1BX0NBQ0hFX0FUVFJJQlVURSk7Ci0JcmV0dXJuIGdyYW1tYXJQb29sOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2dldFhNTENhY2hlKCkKLSAgICovCi0gIHB1YmxpYyBYTUxHcmFtbWFyUG9vbCBnZXRYTUxDYWNoZSgpIAotICB7Ci0JWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpdmFsaW5mby5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLlhNTF9DQUNIRV9BVFRSSUJVVEUpOwotCXJldHVybiBncmFtbWFyUG9vbDsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yQ29udHJvbGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4OTcxOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklXU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZXhjZXB0aW9uLlZhbGlkYXRlV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogVGhlIHZhbGlkYXRvciBjb250cm9sbGVyIGlzIHRoZSBoZWFkIG9mIHZhbGlkYXRpb24uIAotICovCi1wdWJsaWMgY2xhc3MgV1NETDExVmFsaWRhdG9yQ29udHJvbGxlciBpbXBsZW1lbnRzIElXU0RMVmFsaWRhdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFX05BTUUgPSAidmFsaWRhdGV3c2RsIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfV0FSTl9OT19WQUxESUFUT1IgPSAiX1dBUk5fTk9fVkFMRElBVE9SIjsKLS8vICBwcm90ZWN0ZWQgZmluYWwgaW50IEVSUk9SX01FU1NBR0UgPSAwOwotLy8gIHByb3RlY3RlZCBmaW5hbCBpbnQgV0FSTklOR19NRVNTQUdFID0gMTsKLS8vICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGVVUkk7Ci0vLyAgcHJvdGVjdGVkIExpc3Qgc2NoZW1hcyA9IG5ldyBWZWN0b3IoKTsKLS8vICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbjsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciA9IG51bGw7Ci0gIC8vcHJvdGVjdGVkIFZhbGlkYXRpb25Db250cm9sbGVyIHZhbGlkYXRpb25Db250cm9sbGVyOwotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkgdmVyID0gVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETDExVmFsaWRhdG9yQ29udHJvbGxlcigpCi0gIHsKLSAgICBSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLklXU0RMVmFsaWRhdG9yI3ZhbGlkYXRlKG9yZy53M2MuZG9tLkRvY3VtZW50LCBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLlZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoRG9jdW1lbnQgZG9tTW9kZWwsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICAvLyByZXNldCB0aGUgdmFyaWFibGVzCi0vLyAgICByZXNldCgpOwotLy8gICAgZmlsZVVSSSA9IHZhbEluZm8uZ2V0RmlsZVVSSSgpOwotICAgIC8vdGhpcy52YWxpZGF0aW9uQ29udHJvbGxlciA9IHZhbGlkYXRpb25jb250cm9sbGVyOwotCi0gICAgSVdTREwxMVZhbGlkYXRpb25JbmZvIHdzZGx2YWxpbmZvID0gbmV3IFdTREwxMVZhbGlkYXRpb25JbmZvSW1wbCh2YWxJbmZvKTsKLSAgICBXU0RMRG9jdW1lbnRbXSB3c2RsRG9jcyA9IHJlYWRXU0RMRG9jdW1lbnQoZG9tTW9kZWwsIHZhbEluZm8uZ2V0RmlsZVVSSSgpLCBnZXRNZXNzYWdlR2VuZXJhdG9yKCksIHdzZGx2YWxpbmZvKTsKLSAgICAvLyBEb24ndCB2YWxpZGF0ZSBhbiBudWxsIGRlZmluaXRpb25zIGVsZW1lbnQuIEVpdGhlciB0aGUgZmlsZSBpcyBlbXRweSBhbmQgdmFsaWQgb3IKLSAgICAvLyBoYWQgYW4gZXJyb3Igd2hlbiByZWFkaW5nLgotICAgIGlmKHdzZGxEb2NzICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBpbnQgbnVtV1NETERvY3MgPSB3c2RsRG9jcy5sZW5ndGg7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtV1NETERvY3M7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IHRlbXBEb2MgPSB3c2RsRG9jc1tpXTsKLSAgICAgICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IHRlbXBEb2MuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgICAvLyBSZWdpc3RlciB0aGUgc2NoZW1hcy4KLSAgICAgICAgTGlzdCB4c2RMaXN0ID0gdGVtcERvYy5nZXRTY2hlbWFzKCk7Ci0gICAgICAgIEl0ZXJhdG9yIHhzZEl0ZXIgPSB4c2RMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlICh4c2RJdGVyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGx2YWxpbmZvLmFkZFNjaGVtYSgoWFNNb2RlbCl4c2RJdGVyLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2V0IHRoZSBlbGVtZW50IGxvY2F0aW9ucyB0YWJsZS4KLSAgICAgICAgd3NkbHZhbGluZm8uc2V0RWxlbWVudExvY2F0aW9ucyh0ZW1wRG9jLmdldEVsZW1lbnRMb2NhdGlvbnMoKSk7Ci0gICAgICAgIC8vIFNldCBhbnkgcmVhZGVyIGVycm9ycy4gVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHRoZSBlbGVtZW50IGxvY2F0aW9ucyB0YWJsZSBpcyBzZXQuCi0gICAgICAgIExpc3QgcmVhZGVyRXJyb3JzID0gdGVtcERvYy5nZXRSZWFkZXJFcnJvcnMoKTsKLSAgICAgICAgaWYgKHJlYWRlckVycm9ycyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgcmVhZGVyRXJyb3JzSSA9IHJlYWRlckVycm9ycy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChyZWFkZXJFcnJvcnNJLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBSZWFkZXJFcnJvciByZSA9IChSZWFkZXJFcnJvcilyZWFkZXJFcnJvcnNJLm5leHQoKTsKLSAgICAgICAgICAgIHdzZGx2YWxpbmZvLmFkZEVycm9yKHJlLmdldEVycm9yKCksIHJlLmdldE9iamVjdCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgTGlzdCByZWFkZXJXYXJuaW5ncyA9IHRlbXBEb2MuZ2V0UmVhZGVyV2FybmluZ3MoKTsKLSAgICAgICAgaWYgKHJlYWRlcldhcm5pbmdzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciByZWFkZXJXYXJuaW5nc0kgPSByZWFkZXJXYXJuaW5ncy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChyZWFkZXJXYXJuaW5nc0kuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFJlYWRlckVycm9yIHJlID0gKFJlYWRlckVycm9yKXJlYWRlcldhcm5pbmdzSS5uZXh0KCk7Ci0gICAgICAgICAgICB3c2RsdmFsaW5mby5hZGRXYXJuaW5nKHJlLmdldEVycm9yKCksIHJlLmdldE9iamVjdCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdmFsaWRhdGVXU0RMRWxlbWVudChDb25zdGFudHMuTlNfVVJJX1dTREwsIHdzZGxEZWZpbml0aW9uLCBuZXcgVmVjdG9yKCksIHdzZGx2YWxpbmZvKTsKLSAgICAgICAgd3NkbHZhbGluZm8uY2xlYXJTY2hlbWFzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmVhZCBpbiB0aGUgV1NETCBkb2N1bWVudCBhbmQgc2V0IHRoZSBtb2RlbCBhbmQgaW1wb3J0ZWQgc2NoZW1hcy4KLSAgICogCi0gICAqIEBwYXJhbSBkb21Nb2RlbCBBIERPTSBtb2RlbCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgcmVhZC4KLSAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gcmVhZC4KLSAgICogQHBhcmFtIG1lc3NhZ2VnZW5lcmF0b3IgVGhlIG1lc3NhZ2VnZW5lcmF0b3IgdGhlIHJlYWRlciBzaG91bGQgdXNlIGZvciBhbnkgbWVzc2FnZXMgcHJvZHVjZWQuCi0gICAqIEBwYXJhbSB3c2RsdmFsaW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudCBmb3IgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETERvY3VtZW50W10gcmVhZFdTRExEb2N1bWVudChEb2N1bWVudCBkb21Nb2RlbCwgU3RyaW5nIGZpbGUsIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHdzZGx2YWxpbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMRG9jdW1lbnRbXSB3c2RsRG9jcyA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotCi0gICAgICBXU0RMUmVhZGVySW1wbCB3c2RsUmVhZGVyID0gbmV3IFdTRExSZWFkZXJJbXBsKHdzZGx2YWxpbmZvKTsKLSAgICAgIHdzZGxSZWFkZXIuc2V0TWVzc2FnZUdlbmVyYXRvcihtZXNzYWdlZ2VuZXJhdG9yKTsKLSAgICAgIGlmKGRvbU1vZGVsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHdzZGxEb2NzID0gd3NkbFJlYWRlci5yZWFkV1NETChmaWxlLCBkb21Nb2RlbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7ICAKLSAgICAgICAgd3NkbERvY3MgPSB3c2RsUmVhZGVyLnJlYWRXU0RMKGZpbGUpOwotICAgICAgfQotICAgICAgLy93c2RsdmFsaW5mby5zZXRFbGVtZW50TG9jYXRpb25zKHdzZGxSZWFkZXIuZ2V0RWxlbWVudExvY2F0aW9uc0hhc2h0YWJsZSgpKTsKLS8vICAgICAgTGlzdCByZWFkZXJFcnJvcnMgPSB3c2RsUmVhZGVyLmdldFJlYWRlckVycm9ycygpOwotLy8gICAgICBpZiAocmVhZGVyRXJyb3JzICE9IG51bGwpCi0vLyAgICAgICB7Ci0vLyAgICAgICAgSXRlcmF0b3IgcmVhZGVyRXJyb3JzSSA9IHJlYWRlckVycm9ycy5pdGVyYXRvcigpOwotLy8gICAgICAgIHdoaWxlIChyZWFkZXJFcnJvcnNJLmhhc05leHQoKSkKLS8vICAgICAgICAgewotLy8gICAgICAgICAgUmVhZGVyRXJyb3IgcmUgPSAoUmVhZGVyRXJyb3IpcmVhZGVyRXJyb3JzSS5uZXh0KCk7Ci0vLyAgICAgICAgICB3c2RsdmFsaW5mby5hZGRFcnJvcihyZS5nZXRFcnJvcigpLCByZS5nZXRPYmplY3QoKSk7Ci0vLyAgICAgICAgfQotLy8gICAgICB9Ci0vLyAgICAgIGlmICh3c2RsUmVhZGVyLmhhc0ltcG9ydFNjaGVtYXMoKSkKLS8vICAgICAgewotLy8gICAgICAgIExpc3QgeHNkTGlzdCA9IHdzZGxSZWFkZXIuZ2V0SW1wb3J0U2NoZW1hcygpOwotLy8gICAgICAgIEl0ZXJhdG9yIHhzZEl0ZXIgPSB4c2RMaXN0Lml0ZXJhdG9yKCk7Ci0vLyAgICAgICAgd2hpbGUgKHhzZEl0ZXIuaGFzTmV4dCgpKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIHdzZGx2YWxpbmZvLmFkZFNjaGVtYSgoWFNNb2RlbCl4c2RJdGVyLm5leHQoKSk7Ci0vLyAgICAgICAgfQotLy8KLS8vICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFZhbGlkYXRlV1NETEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSArICIgIiArIGUuZ2V0RmF1bHRDb2RlKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgVmFsaWRhdGVXU0RMRXhjZXB0aW9uKCJ1bmFibGUgdG8gcmVhZCBmaWxlIiArIGUuZ2V0TWVzc2FnZSgpICsgIiAiICsgZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxEb2NzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdpdmVuIGEgV1NETCBlbGVtZW50LCBjYWxsIFZhbGlkYXRlRWxlbWVudCBmb3IgaXQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgbGlzdCBvZiBwYXJlbnRzIGZvciB0aGlzIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVdTRExFbGVtZW50KFN0cmluZyBuYW1lc3BhY2UsIE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB3c2RsdmFsaW5mbykKLSAgewotICAgIElXU0RMMTFWYWxpZGF0b3IgdmFsID0gdmVyLnF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkobmFtZXNwYWNlKTsKLSAgICBpZiAodmFsICE9IG51bGwpCi0gICAgewotICAgICAgdmFsLnZhbGlkYXRlKGVsZW1lbnQsIHBhcmVudHMsIHdzZGx2YWxpbmZvKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkgIC8vVE9ETzogQWRkIHRoaXMgYXMgYSBwcmVmZXJlbmNlLgotICAgICAgLy93c2RsdmFsaW5mby5hZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX05PX1ZBTERJQVRPUiwgbmFtZXNwYWNlKSwgZWxlbWVudCk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBtZXNzYWdlIGdlbmVyYXRvciBmb3IgdGhpcyBjb250cm9sbGVyLgotICAgKiAKLSAgICogQHBhcmFtIG1lc2dlbiBUaGUgbWVzc2FnZSBnZW5lcmF0b3IgdG8gc2V0IGZvciB0aGlzIGNvbnRyb2xsZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlR2VuZXJhdG9yKE1lc3NhZ2VHZW5lcmF0b3IgbWVzZ2VuKQotICB7Ci0gICAgbWVzc2FnZWdlbmVyYXRvciA9IG1lc2dlbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHJlZ2lzdGVyZWQgZm9yIHRoaXMgY29udHJvbGxlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHJlZ2lzdGVyZWQgZm9yIHRoaXMgY29udHJvbGxlci4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlR2VuZXJhdG9yIGdldE1lc3NhZ2VHZW5lcmF0b3IoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGZpbGUgY3VycmVudGx5IGJlaW5nIHZhbGlkYXRlZC4gU29tZSB2YWxpZGF0b3JzIHJlcXVpcmUgdGhpcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGZpbGVuYW1lIGZvciB0aGUgZmlsZSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqLwotLy8gIHB1YmxpYyBTdHJpbmcgZ2V0RmlsZW5hbWUoKQotLy8gIHsKLS8vICAgIHJldHVybiBmaWxlVVJJOwotLy8gIH0KLQotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgZXJyb3IgZm9yLgotICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIHRvIGFkZC4KLSAgICovCi0vLyAgcHVibGljIHZvaWQgYWRkRXJyb3JNZXNzYWdlKE9iamVjdCBvYmplY3QsIFN0cmluZyBlcnJvcikKLS8vICB7Ci0vLyAgICBhZGRWYWxpZGF0aW9uTWVzc2FnZShFUlJPUl9NRVNTQUdFLCBvYmplY3QsIGVycm9yKTsKLS8vICAgIGVycm9ycyA9IHRydWU7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZm9yIGV4dGVuc2libHkgdmFsaWRhdG9ycyB0byBhZGQgZXJyb3IgbWVzc2FnZXMgd2hlbiB0aGV5IGtub3cKLSAgICogbGluZSBhbmQgY29sdW1uIG51bWJlcnMuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSB3aGVyZSB0aGUgZXJyb3IgbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLS8vICBwdWJsaWMgdm9pZCBhZGRFcnJvck1lc3NhZ2UoaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyBlcnJvcikKLS8vICB7Ci0vLyAgICBhZGRWYWxpZGF0aW9uTWVzc2FnZShFUlJPUl9NRVNTQUdFLCBsaW5lLCBjb2x1bW4sIGVycm9yKTsKLS8vICAgIGVycm9ycyA9IHRydWU7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGV4dGVuc2libHkgdmFsaWRhdG9ycyB0byBhZGQgd2FybmluZyBtZXNzYWdlcy4KLSAgICogCi0gICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBhZGQgdGhlIHdhcm5pbmcgbWVzc2FnZS4KLSAgICogQHBhcmFtIHdhcm5pbmcgVGhlIHdhcm5pbmcgbWVzc2FnZS4KLSAgICovCi0vLyAgcHVibGljIHZvaWQgYWRkV2FybmluZ01lc3NhZ2UoT2JqZWN0IG9iamVjdCwgU3RyaW5nIHdhcm5pbmcpCi0vLyAgewotLy8gICAgYWRkVmFsaWRhdGlvbk1lc3NhZ2UoV0FSTklOR19NRVNTQUdFLCBvYmplY3QsIHdhcm5pbmcpOwotLy8gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiB0aGV5IGtub3cKLSAgICogbGluZSBhbmQgY29sdW1uIG51bWJlcnMuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSB3aGVyZSB0aGUgZXJyb3IgbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICogQHBhcmFtIHdhcm5pbmcgVGhlIHdhcm5pbmcgbWVzc2FnZS4KLSAgICovCi0vLyAgcHVibGljIHZvaWQgYWRkV2FybmluZ01lc3NhZ2UoaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB3YXJuaW5nKQotLy8gIHsKLS8vICAgIGFkZFZhbGlkYXRpb25NZXNzYWdlKFdBUk5JTkdfTUVTU0FHRSwgbGluZSwgY29sdW1uLCB3YXJuaW5nKTsKLS8vICB9Ci0KLSAgLyoqCi0gICAqIElmIHlvdSBoYXZlIGFuIG9iamVjdCByZWFkIGluIGJ5IHRoZSByZWFkZXIgZm9yIHRoaXMKLSAgICogdmFsaWRhdG9yY29udHJvbGxlciB0aGUgb2JqZWN0IGNhbiBiZSBwYXNzZWQgaW4gaGVyZSBhbmQgdGhlIGxpbmUgYW5kIGNvbHVtbgotICAgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIGFic3RyYWN0ZWQgZnJvbSBpdC4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIG1lc3NhZ2UgdG8gYWRkLgotICAgKiBAcGFyYW0gbyBUaGUgb2JqZWN0IHRoYXQgaGFzIHRoZSBlcnJvciAodXNlZCB0byBnZXQgdGhlIGxvY2F0aW9uKS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYWRkLgotICAgKi8KLS8vICBwcm90ZWN0ZWQgdm9pZCBhZGRWYWxpZGF0aW9uTWVzc2FnZShpbnQgdHlwZSwgT2JqZWN0IG8sIFN0cmluZyBtZXNzYWdlKQotLy8gIHsKLS8vICAgIGludFtdIGxvY2F0aW9uOwotLy8gICAgaWYgKGVsZW1lbnRMb2NhdGlvbnMuY29udGFpbnNLZXkobykpCi0vLyAgICB7Ci0vLyAgICAgIGxvY2F0aW9uID0gKGludFtdKWVsZW1lbnRMb2NhdGlvbnMuZ2V0KG8pOwotLy8gICAgfQotLy8gICAgLy8gaWYgd2UgZ2l2ZSBpdCBhbiBlbGVtZW50IHRoYXQgaGFzbid0IGJlZW4gZGVmaW5lZCB3ZSdsbCBzZXQgdGhlIGxvY2F0aW9uCi0vLyAgICAvLyBhdCAoMCwwKSBzbyB0aGUgZXJyb3Igc2hvd3MgdXAgYnV0IG5vIGxpbmUgbWFya2VyIGluIHRoZSBlZGl0b3IKLS8vICAgIGVsc2UKLS8vICAgIHsKLS8vICAgICAgbG9jYXRpb24gPSBuZXcgaW50W10geyAwLCAwIH07Ci0vLyAgICB9Ci0vLyAgICBhZGRWYWxpZGF0aW9uTWVzc2FnZSh0eXBlLCBsb2NhdGlvblswXSwgbG9jYXRpb25bMV0sIG1lc3NhZ2UpOwotLy8gIH0KLQotICAvKioKLSAgICAqIENyZWF0ZXMgYSB2YWxpZGF0aW9uIG1lc3NhZ2Ugb2YgdGhlIHNwZWNpZmllZCB0eXBlLgotICAgICogCi0gIAkqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHZhbGlkYXRpb24gbWVzc2FnZSB0byBhZGQuCi0gIAkqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIHdoZXJlIHRoZSBlcnJvciBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gIAkqIEBwYXJhbSBjb2x1bW4gVGhlIGxpbmUgd2hlcmUgdGhlIGNvbHVtbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gIAkqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgCSovCi0vLyAgcHJvdGVjdGVkIHZvaWQgYWRkVmFsaWRhdGlvbk1lc3NhZ2UoaW50IHR5cGUsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgbWVzc2FnZSkKLS8vICB7Ci0vLyAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotLy8gICAgewotLy8gICAgICBpZiAodHlwZSA9PSBFUlJPUl9NRVNTQUdFKQotLy8gICAgICB7Ci0vLyAgICAgICAgdmFsaWRhdGlvbkNvbnRyb2xsZXIuYWRkRXJyb3JNZXNzYWdlKGxpbmUsIGNvbHVtbiwgbWVzc2FnZSk7Ci0vLyAgICAgIH0KLS8vICAgICAgZWxzZSBpZiAodHlwZSA9PSBXQVJOSU5HX01FU1NBR0UpCi0vLyAgICAgIHsKLS8vICAgICAgICB2YWxpZGF0aW9uQ29udHJvbGxlci5hZGRXYXJuaW5nTWVzc2FnZShsaW5lLCBjb2x1bW4sIG1lc3NhZ2UpOwotLy8gICAgICB9Ci0vLyAgICB9Ci0vLyAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuY29udHJvbGxlci5JV1NETFZhbGlkYXRvciNpc1ZhbGlkKCkKLSAgICovCi0vLyAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0vLyAgewotLy8gICAgcmV0dXJuICFlcnJvcnM7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBSZXNldCB0aGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIuCi0gICAqLwotLy8gIHByb3RlY3RlZCB2b2lkIHJlc2V0KCkKLS8vICB7Ci0vLyAgICBzY2hlbWFzID0gbmV3IFZlY3RvcigpOwotLy8gICAgZmlsZVVSSSA9ICIiOwotLy8gICAgd3NkbERlZmluaXRpb24gPSBudWxsOwotLy8gICAgZWxlbWVudExvY2F0aW9ucyA9IG51bGw7Ci0vLyAgICByZXNvdXJjZWJ1bmRsZSA9IG51bGw7Ci0vLyAgICAvL3ZhbGlkYXRpb25Db250cm9sbGVyID0gbnVsbDsKLS8vICAgIGVycm9ycyA9IGZhbHNlOwotLy8gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxMzVlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLS8qKgotICogVGhlIFdTREwgMS4xIHZhbGlkYXRvciBkZWxlZ2F0ZSBob2xkcyBhIHJlZmVyZW5jZSB0byBhIHZhbGlkYXRvciB0byBiZSBpbnN0YW50aWF0ZWQgYXQKLSAqIGEgbGF0ZXIgcG9pbnQuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZQotewotICBwcml2YXRlIElXU0RMMTFWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLQotCi0gIC8qKgotICAgKiBHZXQgdGhlIHZhbGlkYXRvciBzcGVjaWZpZWQgaW4gdGhpcyBkZWxlZ2F0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFdTREwgMS4xIHZhbGlkYXRvciBzcGVjaWZpZWQgYnkgdGhpcyBkZWxlZ2F0ZS4KLSAgICovCi0gIHB1YmxpYyBJV1NETDExVmFsaWRhdG9yIGdldFZhbGlkYXRvcigpCi0gIHsKLSAgICBpZiAodmFsaWRhdG9yID09IG51bGwpCi0gICAgewotICAgICAgdmFsaWRhdG9yID0gbG9hZFZhbGlkYXRvcigpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYWJzdHJhY3QgSVdTREwxMVZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExEb2N1bWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhODEwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvbkRlc2VyaWFsaXplcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudE5TSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5RTmFtZVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5YUGF0aFV0aWxzOwotCi0vKioKLSAqIEEgV1NETCBkb2N1bWVudCB0aGF0IGtub3dzIGhvdyB0byBwYXJzZSBpdHNlbGYuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMRG9jdW1lbnQKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdCBTVFlMRV9PTkVfV0FZID0gQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyBDb25zdGFudHMuRUxFTV9JTlBVVCB9KTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdCBTVFlMRV9SRVFVRVNUX1JFU1BPTlNFID0KLSAgICBBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7IENvbnN0YW50cy5FTEVNX0lOUFVULCBDb25zdGFudHMuRUxFTV9PVVRQVVQgfSk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3QgU1RZTEVfU09MSUNJVF9SRVNQT05TRSA9Ci0gICAgQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyBDb25zdGFudHMuRUxFTV9PVVRQVVQsIENvbnN0YW50cy5FTEVNX0lOUFVUIH0pOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0IFNUWUxFX05PVElGSUNBVElPTiA9IEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgQ29uc3RhbnRzLkVMRU1fT1VUUFVUIH0pOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIF9FUlJPUl9NVUxUSVBMRV9UWVBFU19ERUZJTkVEID0gIl9FUlJPUl9NVUxUSVBMRV9UWVBFU19ERUZJTkVEIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIF9VTkFCTEVfVE9fSU1QT1JUX05PX0xPQ0FUSU9OID0gIl9VTkFCTEVfVE9fSU1QT1JUX05PX0xPQ0FUSU9OIjsKLQotICBwcm90ZWN0ZWQgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0UmVnID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWN0b3J5SW1wbE5hbWUgPSBudWxsOwotCi0gIC8vIHN0b3JlIHRoZSBlbGVtZW50IGxvY2F0aW9ucyB3aXRoaW4gdGhlIGZpbGUgLSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycwotICAvLyB0aGUgbG9jYXRpb24gaW5mbyBpcyBzdG9yZWQgYXMgYW4gaW50IGFycmF5IG9mIGxlbmd0aCAyIHtsaW5lbnVtYmVyLCBjb2xudW1iZXJ9Ci0gIHByb3RlY3RlZCBIYXNodGFibGUgZWxlbWVudExvY2F0aW9ucyA9IG5ldyBIYXNodGFibGUoKTsKLSAgCi0gIC8vIGhvbGQgdGhlIHJlYWRlciBlcnJvcnMKLSAgcHJvdGVjdGVkIExpc3QgcmVhZGVyRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgTGlzdCByZWFkZXJXYXJuaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLSAgCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWYgPSBudWxsOwotICBwcml2YXRlIFNldCBpbXBvcnRlZERlZnMgPSBuZXcgVHJlZVNldCgpOwotICBwcml2YXRlIEVsZW1lbnQgdHlwZXNFbCA9IG51bGw7Ci0gIHByaXZhdGUgTGlzdCBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBMaXN0IHBvcnR0eXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBMaXN0IGJpbmRpbmdzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIExpc3Qgc2VydmljZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgTGlzdCBleHRlbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBpbnQgZGVwdGg7Ci0gIC8vIEhvbGQgdGhlIHNjaGVtYXMgdGhhdCBhcmUgaW1wb3J0ZWQgb3IgZGVjbGFyZWQgaW5saW5lIGluIHRoaXMgd3NkbCBkb2N1bWVudC4KLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbGluZm87Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuIFBlcmZvcm1zIGEgcHJlcGFyc2Ugb2YgdGhlIGRvY3VtZW50IGFuZCBoYW5kbGVzIGltcG9ydHMgYW5kIHR5cGVzLgotICAgKiAKLSAgICogQHBhcmFtIGRvY3VtZW50QmFzZVVSSSBUaGUgVVJJIG9mIHRoaXMgV1NETCBkb2N1bWVudC4KLSAgICogQHBhcmFtIGRlZkVsIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVwdGggVGhlIGRlcHRoIG9mIHRoaXMgZG9jdW1lbnQgaW4gYSBkb2N1bWVudCB0cmVlLgotICAgKiBAcGFyYW0gbWVzc2FnZWdlbmVyYXRvciBBIG1lc3NhZ2VnZW5lcmF0b3IgdXNlZCBmb3IgcmV0cmlldmluZyBzdHJpbmdzLgotICAgKiBAcGFyYW0gdmFsaW5mbyBBIFdTREwxMVZhbGlkYXRpb25JbmZvIG9iamVjdCBmb3IgcmVwb3J0aW5nIG1lc3NhZ2VzLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRWxlbWVudCBkZWZFbCwgaW50IGRlcHRoLCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxpbmZvKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdGhpcy5tZXNzYWdlZ2VuZXJhdG9yID0gbWVzc2FnZWdlbmVyYXRvcjsKLSAgICB0aGlzLnZhbGluZm8gPSB2YWxpbmZvOwotICAgIHRoaXMuZGVwdGggPSBkZXB0aDsKLSAgICAKLSAgICBjaGVja0VsZW1lbnROYW1lKGRlZkVsLCBDb25zdGFudHMuUV9FTEVNX0RFRklOSVRJT05TKTsKLSAgICAKLSAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgIChmYWN0b3J5SW1wbE5hbWUgIT0gbnVsbCkgPyBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZShmYWN0b3J5SW1wbE5hbWUpIDogV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICBkZWYgPSBmYWN0b3J5Lm5ld0RlZmluaXRpb24oKTsKLSAgICAvLyBGaXggZm9yIFdTREw0SiBhZGRpbmcgZGVmYXVsdCBXU0RMIG5hbWVzcGFjZSB3aGVuIG5vIGRlZmF1bHQKLSAgICAvLyBuYW1lc3BhY2UgaGFzIGJlZW4gZGVjbGFyZWQuCi0gICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgZml4IG9uY2UgZml4ZWQgaW4gV1NETDRKLgotICAgIGlmKGRlZi5nZXROYW1lc3BhY2UoIiIpICE9IG51bGwpCi0gICAgCWRlZi5nZXROYW1lc3BhY2VzKCkucmVtb3ZlKCIiKTsKLQotICAgIGlmIChleHRSZWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWYuc2V0RXh0ZW5zaW9uUmVnaXN0cnkoZXh0UmVnKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShkZWZFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShkZWZFbCwgQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7Ci0gICAgTmFtZWROb2RlTWFwIGF0dHJzID0gZGVmRWwuZ2V0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGRvY3VtZW50QmFzZVVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlZi5zZXREb2N1bWVudEJhc2VVUkkoZG9jdW1lbnRCYXNlVVJJKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlZi5zZXRRTmFtZShuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBuYW1lKSk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlZi5zZXRUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICBpbnQgc2l6ZSA9IGF0dHJzLmdldExlbmd0aCgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgQXR0ciBhdHRyID0gKEF0dHIpYXR0cnMuaXRlbShpKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBhdHRyLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIGxvY2FsUGFydCA9IGF0dHIuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICBTdHJpbmcgdmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0KLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiBuYW1lc3BhY2VVUkkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWE1MTlMpKQotICAgICAgewotICAgICAgICBpZiAobG9jYWxQYXJ0ICE9IG51bGwgJiYgIWxvY2FsUGFydC5lcXVhbHMoQ29uc3RhbnRzLkFUVFJfWE1MTlMpKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmLmFkZE5hbWVzcGFjZShsb2NhbFBhcnQsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkZWYuYWRkTmFtZXNwYWNlKG51bGwsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZXJlIGFyZSBwcm9ibGVtcyB3aGVuIHRoZSBtb2RlbCBpcyBjcmVhdGVkIGFuZCB0aGUgb3JkZXIgb2YgZWxlbWVudHMgaXMgbm90Ci0gICAgLy8gSW1wb3J0IC0gVHlwZXMgLSBNZXNzYWdlIC0gUG9ydFR5cGUgLSBCaW5kaW5nIC0gU2VydmljZSBzbyB3ZSBuZWVkIHRvIHJlYWQgdGhlbQotICAgIC8vIGludG8gdGhlIG1vZGVsIGluIHRoYXQgb3JkZXIKLSAgICAvLyBQZXJmb3JtYW5jZSB3aXNlIHRoaXMgc2hvdWxkIGJlIG1vZGlmaWVkIGFzIHdlIGhhdmUgdG8gbWFrZSA1IGV4dHJhIGxvb3BzIHRocm91Z2gKLSAgICAvLyBhbGwgb2YgdGhlIGVsZW1lbnRzIGFzIGEgcmVzdWx0Ci0KLSAgICAvLyB0YWtlIGNhcmUgb2YgSW1wb3J0cywgVHlwZXMsIERvY3VtZW50YXRpb24gYW5kIGV4dGVuc2libGVlbGVtZW50cyB0b2dldGhlciAtIHNhdmVzIGEgcGFzcyBmb3IgRG9jdW1lbnRhdGlvbiAKLSAgICAvLyBsYXRlciBhbmQgRG9jcyBkb24ndCBlZmZlY3QgYW55dGhpbmcgZWxzZSAtIEltcG9ydHMgYW5kIFR5cGVzIGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSB0aGluZwotICAgIC8vIG5vIHByZWNvbmNlaXZlZCBpZGVhcyBhYm91dCBleHRlbnNpYmxlIGVsZW1lbnRzCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChkZWZFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotCi0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fSU1QT1JULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHRlbXBFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRVNQQUNFKTsKLSAgICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHRlbXBFbCwgQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04pOwotICAgICAgICBpZihsb2NhdGlvblVSSSA9PSBudWxsIHx8IGxvY2F0aW9uVVJJLmVxdWFscygiIikpCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRSZWFkZXJFcnJvcihkZWYsIHRlbXBFbCwgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1VOQUJMRV9UT19JTVBPUlRfTk9fTE9DQVRJT04pKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBJbXBvcnRIb2xkZXIgaWggPSBuZXcgSW1wb3J0SG9sZGVyKG5hbWVzcGFjZVVSSSwgbG9jYXRpb25VUkksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSwgdGhpcywgZGVwdGgrMSwgdGVtcEVsLCBtZXNzYWdlZ2VuZXJhdG9yLCB2YWxpbmZvKTsKLSAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgaW1wb3J0IHRvIHRoZSBsaXN0IGlmIGl0IGlzIG5vdCBhbiBpbXBvcnQgZm9yIHRoaXMgZG9jdW1lbnQuCi0gICAgICAgICAgaWYoIWRvY3VtZW50QmFzZVVSSS5lcXVhbHMoaWguZ2V0TG9jYXRpb24oKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW1wb3J0ZWREZWZzLmFkZChpaCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNldExvY2F0aW9uKHRlbXBFbCwgdGVtcEVsKTsKLS8vICAgICAgICBpZiAoaW1wb3J0ZWREZWZzID09IG51bGwpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgaW1wb3J0ZWREZWZzID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gICAgICAgIH0KLS8vICAgICAgICBpZiAoZG9jdW1lbnRCYXNlVVJJICE9IG51bGwpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgaW1wb3J0ZWREZWZzLnB1dChkb2N1bWVudEJhc2VVUkksIGRlZik7Ci0vLyAgICAgICAgfQotLy8gICAgICAgIGRlZi5hZGRJbXBvcnQocGFyc2VJbXBvcnQodGVtcEVsLCBkZWYsIGltcG9ydGVkRGVmcykpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgZGVmLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9UWVBFUywgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgaWYodHlwZXNFbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0TG9jYXRpb24odGVtcEVsLCB0ZW1wRWwpOwotICAgICAgICAgIGFkZFJlYWRlckVycm9yKGRlZiwgdGVtcEVsLCBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfTVVMVElQTEVfVFlQRVNfREVGSU5FRCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHR5cGVzRWwgPSB0ZW1wRWw7Ci0gICAgICAgICAgcGFyc2VUeXBlcygpOwotICAgICAgICB9Ci0vLyAgICAgICAgZGVmLnNldFR5cGVzKHBhcnNlVHlwZXModGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX01FU1NBR0UsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VzLmFkZCh0ZW1wRWwpOwotICAgICAgICAvL2RlZi5hZGRNZXNzYWdlKHBhcnNlTWVzc2FnZSh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fUE9SVF9UWVBFLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBwb3J0dHlwZXMuYWRkKHRlbXBFbCk7Ci0gICAgICAgIC8vICAgICAgICAgICAgIFBvcnRUeXBlIHB0ID0gcGFyc2VQb3J0VHlwZSh0ZW1wRWwsIGRlZik7Ci0gICAgICAgIC8vICAgICAgICAgICAgIGlmKHB0ICE9IG51bGwpCi0gICAgICAgIC8vICAgICAgICAgICAgIHsKLSAgICAgICAgLy8gICAgICAgICAgZGVmLmFkZFBvcnRUeXBlKHB0KTsKLSAgICAgICAgLy8gICAgICAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fQklORElORywgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ3MuYWRkKHRlbXBFbCk7Ci0gICAgICAgIC8vZGVmLmFkZEJpbmRpbmcocGFyc2VCaW5kaW5nKHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9TRVJWSUNFLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBzZXJ2aWNlcy5hZGQodGVtcEVsKTsKLSAgICAgICAgLy9kZWYuYWRkU2VydmljZShwYXJzZVNlcnZpY2UodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXh0ZWxlbWVudHMuYWRkKHRlbXBFbCk7Ci0gICAgICAgIC8vICAgICAgICBkZWYuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoCi0gICAgICAgIC8vICAgICAgICAgIHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRGVmaW5pdGlvbi5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGZvciB0aGlzIGRvY3VtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudCBmb3IgdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGRlZjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCBhIHNldCBvZiB0aGUgaW1wb3J0cyBpbiB0aGlzIGRvY3VtZW50LgotICAgKiAKLSAgICogQHJldHVybiBBIHNldCBvZiB0aGUgaW1wb3J0cyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFNldCBnZXRJbXBvcnRzKCkKLSAgewotICAgIHJldHVybiBpbXBvcnRlZERlZnM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGRlZgotICAgKiBAcGFyYW0gZG9jCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UKLSAgICogQHBhcmFtIGxvY2F0aW9uCi0gICAqLwotLy8gIHB1YmxpYyB2b2lkIHNldEltcG9ydChEZWZpbml0aW9uIGRlZiwgRWxlbWVudCBkb2MsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbikKLS8vICB7Ci0vLyAgICBpZihsb2NhdGlvbiA9PSBudWxsIHx8IGxvY2F0aW9uLmVxdWFscygiIikpCi0vLyAgICB7Ci0vLyAgICAgIHZhbGluZm8uYWRkRXJyb3IoKV9VTkFCTEVfVE9fSU1QT1JUX05PX0xPQ0FUSU9OIAotLy8gICAgfQotLy8gICAgSW1wb3J0IGltcCA9IGRlZi5jcmVhdGVJbXBvcnQoKTsKLS8vICAgIGltcC5zZXREZWZpbml0aW9uKGRlZik7Ci0vLyAgICBpbXAuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZG9jKTsKLS8vICAgIGltcC5zZXROYW1lc3BhY2VVUkkobmFtZXNwYWNlKTsKLS8vICAgIGltcC5zZXRMb2NhdGlvblVSSShsb2NhdGlvbik7Ci0vLyAgICBkZWYuYWRkSW1wb3J0KGltcCk7Ci0vLyAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSB0eXBlcyBpbiB0aGUgV1NETCBkb2N1bWVudC4gSGFuZGxlcyBkb2N1bWVudGF0aW9uLCBpbXBvcnQgYW5kIHNjaGVtYQotICAgKiBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlVHlwZXMoKQotICB7Ci0gICAgVHlwZXMgdHlwZXMgPSBkZWYuY3JlYXRlVHlwZXMoKTsKLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQodHlwZXNFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHR5cGVzLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0ZW1wRWwuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiaW1wb3J0IikpCi0gICAgICAgIC8vZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fSU1QT1JULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCByZWFsbHkgYmUgdXNlZCBoZXJlIGJ1dCBhIGxpdHRsZSBoYWNrIHdpbGwgbWFrZQotICAgICAgICAvLyBsaWZlIGVhc2llcgotICAgICAgICAvL3BhcnNlSW1wb3J0KHRlbXBFbCwgZGVmLCAoTWFwKW5ldyBIYXNodGFibGUoKSk7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUodGVtcEVsLCBDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UpOwotICAgICAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUodGVtcEVsLCAic2NoZW1hTG9jYXRpb24iKTsKLSAgICAgICAgaW1wb3J0ZWREZWZzLmFkZChuZXcgSW1wb3J0SG9sZGVyKG5hbWVzcGFjZVVSSSwgbG9jYXRpb25VUkksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSwgdGhpcywgZGVwdGgrMSwgdGVtcEVsLCBtZXNzYWdlZ2VuZXJhdG9yLCB2YWxpbmZvKSk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgdHlwZXMuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChUeXBlcy5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KFR5cGVzLmNsYXNzLCB0ZW1wRWwsIGRlZik7Ci0gICAgICAgICAgdHlwZXMuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotICAgIGRlZi5zZXRUeXBlcyh0eXBlcyk7Ci0gICAgCi0gICAgdmFsaW5mby5zZXRFbGVtZW50TG9jYXRpb25zKGVsZW1lbnRMb2NhdGlvbnMpOwotICAgIExpc3QgdHlwZXNFbGVtcyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmKHR5cGVzRWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciB0eXBlc0VsZW1zSXRlciA9IHR5cGVzRWxlbXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKHR5cGVzRWxlbXNJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdHlwZUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpdHlwZXNFbGVtc0l0ZXIubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgSW5saW5lU2NoZW1hVmFsaWRhdG9yIHhzZFZhbCA9IG5ldyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IoKTsKLSAgICAgICAgeHNkVmFsLnNldE1lc3NhZ2VHZW5lcmF0b3IobWVzc2FnZWdlbmVyYXRvcik7Ci0gICAgCi0gICAgICAgIExpc3QgcGFyZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgcGFyZW50cy5hZGQoZGVmKTsKLSAgICAgICAgcGFyZW50cy5hZGQoMCx0eXBlcyk7Ci0gICAgICAgIHhzZFZhbC52YWxpZGF0ZSh0eXBlRWxlbWVudCwgcGFyZW50cyx2YWxpbmZvKTsKLSAgICAgICAgWFNNb2RlbFtdIHR5cGVzU2NoZW1hcyA9IHZhbGluZm8uZ2V0U2NoZW1hcygpOwotICAgICAgICBMaXN0IHR5cGVzU2NoZW1hTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHR5cGVzU2NoZW1hcy5sZW5ndGg7IGkrKykKLSAgICAgICAgeyAgCi0gICAgICAgICAgdHlwZXNTY2hlbWFMaXN0LmFkZCh0eXBlc1NjaGVtYXNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHNjaGVtYXMuYWRkQWxsKHR5cGVzU2NoZW1hTGlzdCk7Ci0gICAgICAgIHZhbGluZm8uY2xlYXJTY2hlbWFzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHZhbGluZm8uc2V0RWxlbWVudExvY2F0aW9ucyhudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBtZXNzYWdlcyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VNZXNzYWdlcygpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2VzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWYuYWRkTWVzc2FnZShwYXJzZU1lc3NhZ2UoKEVsZW1lbnQpbWVzc2FnZXMuZ2V0KGkpLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgIHt9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIHBvcnRUeXBlcyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VQb3J0dHlwZXMoKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0dHlwZXMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFBvcnRUeXBlIHB0ID0gcGFyc2VQb3J0VHlwZSgoRWxlbWVudClwb3J0dHlwZXMuZ2V0KGkpLCBkZWYpOwotICAgICAgICBpZiAocHQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGRlZi5hZGRQb3J0VHlwZShwdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgIHt9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIGJpbmRpbmdzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUJpbmRpbmdzKCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3Muc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZi5hZGRCaW5kaW5nKHBhcnNlQmluZGluZygoRWxlbWVudCliaW5kaW5ncy5nZXQoaSksIGRlZikpOwotICAgICAgfQotICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAge30KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgc2VydmljZXMgaW4gdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlU2VydmljZXMoKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmLmFkZFNlcnZpY2UocGFyc2VTZXJ2aWNlKChFbGVtZW50KXNlcnZpY2VzLmdldChpKSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICB7fQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWYuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChEZWZpbml0aW9uLmNsYXNzLCAoRWxlbWVudClleHRlbGVtZW50cy5nZXQoaSksIGRlZikpOwotICAgICAgfQotICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAge30KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgdGhlIGdpdmVuIGxpc3Qgb2Ygc2NoZW1hcyB0byB0aGUgc2NoZW1hcyBmb3IgdGhpcyBkb2N1bWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWFzIFRoZSBsaXN0IG9mIHNjaGVtYXMgdG8gYWRkIHRvIHRoaXMgZG9jdW1lbnQncyBzY2hlbWFzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU2NoZW1hcyhMaXN0IHNjaGVtYXMpCi0gIHsKLSAgICB0aGlzLnNjaGVtYXMuYWRkQWxsKHNjaGVtYXMpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRvY3VtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgc3BlY2lmaWVkIGJpbmRpbmcuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0VsIFRoZSBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZyBwYXJzZUJpbmRpbmcoRWxlbWVudCBiaW5kaW5nRWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShiaW5kaW5nRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIHBvcnRUeXBlTmFtZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBwb3J0VHlwZU5hbWUgPSBET01VdGlscy5nZXRRdWFsaWZpZWRBdHRyaWJ1dGVWYWx1ZShiaW5kaW5nRWwsIENvbnN0YW50cy5BVFRSX1RZUEUsIENvbnN0YW50cy5FTEVNX0JJTkRJTkcsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIG1lc3NhZ2UgbmFtZQotICAgICAgcG9ydFR5cGVOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShiaW5kaW5nRWwsICJ0eXBlIikpOwotICAgIH0KLQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gbnVsbDsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgUU5hbWUgYmluZGluZ05hbWUgPSBuZXcgUU5hbWUoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lKTsKLQotICAgICAgYmluZGluZyA9IGRlZi5nZXRCaW5kaW5nKGJpbmRpbmdOYW1lKTsKLQotICAgICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZyA9IGRlZi5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgICAgIGJpbmRpbmcuc2V0UU5hbWUoYmluZGluZ05hbWUpOwotICAgICAgfQotICAgICAgLy8gcmVwb3J0IGFuIGVycm9yIGlmIGEgYmluZGluZyB3aXRoIHRoaXMgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQKLSAgICAgIGVsc2UgaWYgKCFiaW5kaW5nLmlzVW5kZWZpbmVkKCkpCi0gICAgICB7Ci0gICAgICAgIC8vYWRkUmVhZGVyRXJyb3IoZGVmLGJpbmRpbmdFbCwgIl9CSU5ESU5HX05BTUVfQUxSRUFEWV9ERUZJTkVEIik7ICAgICAgIAotICAgICAgICBhZGRSZWFkZXJFcnJvcigKLSAgICAgICAgICBkZWYsCi0gICAgICAgICAgYmluZGluZ0VsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfQklORElOR19OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArICInIikpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYmluZGluZyA9IGRlZi5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gV2hldGhlciBpdCB3YXMgcmV0cmlldmVkIG9yIGNyZWF0ZWQsIHRoZSBkZWZpbml0aW9uIGhhcyBiZWVuIGZvdW5kLgotICAgIGJpbmRpbmcuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIGlmIChwb3J0VHlwZU5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwb3J0VHlwZSA9IGRlZi5nZXRQb3J0VHlwZShwb3J0VHlwZU5hbWUpOwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGVOYW1lKTsKLSAgICAgICAgZGVmLmFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZy5zZXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nRWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9PUEVSQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuYWRkQmluZGluZ09wZXJhdGlvbihwYXJzZUJpbmRpbmdPcGVyYXRpb24odGVtcEVsLCBwb3J0VHlwZSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nLmNsYXNzLCB0ZW1wRWwsIGRlZikpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKGJpbmRpbmcsIGJpbmRpbmdFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmdPcGVyYXRpb25FbCBUaGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHBhcmFtIHBvcnRUeXBlIFRoZSBwb3J0VHlwZSB0aGUgYmluZGluZyByZWZlcmVuY2VzLgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nT3BlcmF0aW9uIHBhcnNlQmluZGluZ09wZXJhdGlvbihFbGVtZW50IGJpbmRpbmdPcGVyYXRpb25FbCwgUG9ydFR5cGUgcG9ydFR5cGUsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBkZWYuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdPcGVyYXRpb25FbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb25FbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lOUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChwYXJzZUJpbmRpbmdJbnB1dCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fT1VUUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQocGFyc2VCaW5kaW5nT3V0cHV0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9GQVVMVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQocGFyc2VCaW5kaW5nRmF1bHQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAvL1N0cmluZyBpbnB1dE5hbWUgPSAoYmluZGluZ0lucHV0ICE9IG51bGwgPyBiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0gICAgICAvL1N0cmluZyBvdXRwdXROYW1lID0gKGJpbmRpbmdPdXRwdXQgIT0gbnVsbCA/IGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0KLSAgICAgIC8vIGhhY2sgY29kZSB0byBnZXQgYXQgb3BlcmF0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIHdpdGggdGhlIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50Ci0gICAgICAvLyBpbnB1dHMgYW5kIG91dHB1dHMgCi0gICAgICBPcGVyYXRpb24gb3AgPSBudWxsOwotICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgLy8gZ2V0IGEgbGlzdCBvZiBhbGwgb3BlcmF0aW9ucyB3aXRoIG1hdGNoaW5nIG5hbWVzCi0gICAgICBMaXN0IG1hdGNoaW5nT3BlcmF0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEl0ZXJhdG9yIGlPcGVyYXRpb25zID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlPcGVyYXRpb25zLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXIgPSAoT3BlcmF0aW9uKWlPcGVyYXRpb25zLm5leHQoKTsKLSAgICAgICAgaWYgKG9wZXIuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgbWF0Y2hpbmdPcGVyYXRpb25zLmFkZChvcGVyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb25zICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgbWF0Y2hpbmcgb3BlcmF0aW9uIHRoaXMgaXMgd2hhdCB3ZSdyZSByZWZlcnJpbmcgdG8uCi0gICAgICAgIC8vIE9ubHkgbWF0Y2hpbmcgaWYgYmluZGluZyBvcGVyYXRpb24gaW5wdXQgbmFtZSBhbmQgb3V0cHV0IG5hbWUgYXJlCi0gICAgICAgIC8vIGJvdGggbnVsbCBvciB0aGUgc2FtZSBhcyB0aGUgcG9ydFR5cGUgb3BlcmF0aW9uIGlucHV0IGFuZCBvdXRwdXQgbmFtZXMuCi0gICAgICAgIC8vIHRoZSBwb3J0VHlwZSBvcGVyYXRpb24gbmFtZQotICAgICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb25zLnNpemUoKSA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gb25seSBzYXkgdGhlIHNpbmdsZSBvcGVyYXRpb24gaXMgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGZvciBpZiB0aGUgbmFtZXMKLSAgICAgICAgICAvLyBvZiB0aGUgYmluZGluZyBpbnB1dCBhbmQgb3V0cHV0IGFyZSBub3Qgc3BlY2lmaWVkCi0gICAgICAgICAgT3BlcmF0aW9uIHRlbXBPcCA9IChPcGVyYXRpb24pbWF0Y2hpbmdPcGVyYXRpb25zLmdldCgwKTsKLSAgICAgICAgICBib29sZWFuIGlucHV0T0sgPSBmYWxzZTsKLSAgICAgICAgICBib29sZWFuIG91dHB1dE9LID0gZmFsc2U7Ci0gICAgICAgICAgSW5wdXQgdGVtcElucHV0ID0gdGVtcE9wLmdldElucHV0KCk7Ci0gICAgICAgICAgT3V0cHV0IHRlbXBPdXRwdXQgPSB0ZW1wT3AuZ2V0T3V0cHV0KCk7Ci0KLSAgICAgICAgICAvLyBvcmRlciBpcyBpbXBvcnRhbnQgaW4gdGhlc2UgY29uZGl0aW9ucy4gY29uZGl0aW9uIDIgbXVzdCBmYWlsIGZvciAzIHRvIHdvcmsKLSAgICAgICAgICAvLyBjaGVjayB0aGUgaW5wdXQKLSAgICAgICAgICBpZiAodGVtcElucHV0ID09IG51bGwgJiYgYmluZGluZ0lucHV0ID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGJpbmRpbmdJbnB1dCA9PSBudWxsIHx8IGJpbmRpbmdJbnB1dC5nZXROYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodGVtcElucHV0ICE9IG51bGwgJiYgYmluZGluZ0lucHV0LmdldE5hbWUoKS5lcXVhbHModGVtcElucHV0LmdldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGNoZWNrIHRoZSBvdXRwdXQKLSAgICAgICAgICBpZiAodGVtcE91dHB1dCA9PSBudWxsICYmIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGJpbmRpbmdPdXRwdXQgPT0gbnVsbCB8fCBiaW5kaW5nT3V0cHV0LmdldE5hbWUoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodGVtcE91dHB1dCAhPSBudWxsICYmIGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpLmVxdWFscyh0ZW1wT3V0cHV0LmdldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0T0sgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaW5wdXRPSyAmJiBvdXRwdXRPSykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvcCA9IHRlbXBPcDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gICAgICAgICAgb3AgPSAoT3BlcmF0aW9uKSBtYXRjaGluZ09wZXJhdGlvbnMuZ2V0KDApOwotICAgICAgICB9Ci0gICAgICAgIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBvcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lLCBpbnB1dG5hbWUsIG91dHB1dG5hbWUgc2lnbmF0dXJlCi0gICAgICAgIGlmIChtYXRjaGluZ09wZXJhdGlvbnMgIT0gbnVsbCAmJiBvcCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaU1hdGNoaW5nT3BlcmF0aW9ucyA9IG1hdGNoaW5nT3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpTWF0Y2hpbmdPcGVyYXRpb25zLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gaW5wdXROYW1lc0VxdWFsID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sZWFuIG91dHB1dE5hbWVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyID0gKE9wZXJhdGlvbilpTWF0Y2hpbmdPcGVyYXRpb25zLm5leHQoKTsKLSAgICAgICAgICAgIC8vICAgICAgICAgIGlmIChvcGVyLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIC8vICAgICAgICAgIHsKLSAgICAgICAgICAgIElucHV0IG9wSW5wdXQgPSBvcGVyLmdldElucHV0KCk7Ci0gICAgICAgICAgICBpZiAob3BJbnB1dCAhPSBudWxsICYmIGJpbmRpbmdJbnB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgb3BJbnB1dE5hbWUgPSBvcElucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGJpbmRpbmdJbnB1dE5hbWUgPSBiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBpZiAob3BJbnB1dE5hbWUgIT0gbnVsbCAmJiBvcElucHV0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKGJpbmRpbmdJbnB1dE5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmIChvcElucHV0TmFtZSA9PSBudWxsICYmIGJpbmRpbmdJbnB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlucHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG9wSW5wdXQgPT0gbnVsbCAmJiBiaW5kaW5nSW5wdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE91dHB1dCBvcE91dHB1dCA9IG9wZXIuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgICBpZiAob3BPdXRwdXQgIT0gbnVsbCAmJiBiaW5kaW5nT3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBvcE91dHB1dE5hbWUgPSBvcE91dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nT3V0cHV0TmFtZSA9IGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBpZiAob3BPdXRwdXROYW1lICE9IG51bGwgJiYgb3BPdXRwdXROYW1lLmVxdWFsc0lnbm9yZUNhc2UoYmluZGluZ091dHB1dE5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAob3BPdXRwdXROYW1lID09IG51bGwgJiYgYmluZGluZ091dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChvcE91dHB1dCA9PSBudWxsICYmIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5wdXROYW1lc0VxdWFsICYmIG91dHB1dE5hbWVzRXF1YWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG9wID0gb3BlcjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvL30KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vT3BlcmF0aW9uIG9wID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKG5hbWUsIGlucHV0TmFtZSwgb3V0cHV0TmFtZSk7Ci0KLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBvcCA9IGRlZi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgICAgb3Auc2V0TmFtZShuYW1lKTsKLSAgICAgICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3ApOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ09wZXJhdGlvbiwgYmluZGluZ09wZXJhdGlvbkVsKTsKLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBiaW5kaW5nIGlucHV0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0lucHV0RWwgVGhlIGJpbmRpbmcgaW5wdXQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgYmluZGluZyBpbnB1dCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nSW5wdXQgcGFyc2VCaW5kaW5nSW5wdXQoRWxlbWVudCBiaW5kaW5nSW5wdXRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gZGVmLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdJbnB1dEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ0lucHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nSW5wdXRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdJbnB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nSW5wdXQuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ0lucHV0LCBiaW5kaW5nSW5wdXRFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZ0lucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgYmluZGluZyBvdXRwdXQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nT3V0cHV0RWwgVGhlIGJpbmRpbmcgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGJpbmRpbmcgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgcGFyc2VCaW5kaW5nT3V0cHV0KEVsZW1lbnQgYmluZGluZ091dHB1dEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGRlZi5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoYmluZGluZ091dHB1dEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ091dHB1dC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoYmluZGluZ091dHB1dEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ091dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nT3V0cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoQmluZGluZ091dHB1dC5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihiaW5kaW5nT3V0cHV0LCBiaW5kaW5nT3V0cHV0RWwpOwotCi0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBiaW5kaW5nIGZhdWx0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0ZhdWx0RWwgVGhlIGJpbmRpbmcgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgYmluZGluZyBmYXVsdCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nRmF1bHQgcGFyc2VCaW5kaW5nRmF1bHQoRWxlbWVudCBiaW5kaW5nRmF1bHRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gZGVmLmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdGYXVsdEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ0ZhdWx0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nRmF1bHRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdGYXVsdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nRmF1bHQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nRmF1bHQuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ0ZhdWx0LCBiaW5kaW5nRmF1bHRFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgbWVzc2FnZSBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIG1zZ0VsIFRoZSBtZXNzYWdlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIG1lc3NhZ2UgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZSBwYXJzZU1lc3NhZ2UoRWxlbWVudCBtc2dFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNZXNzYWdlIG1zZyA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUobXNnRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotCi0gICAgICBtc2cgPSBkZWYuZ2V0TWVzc2FnZShtZXNzYWdlTmFtZSk7Ci0KLSAgICAgIGlmIChtc2cgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbXNnID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbXNnLnNldFFOYW1lKG1lc3NhZ2VOYW1lKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFtc2cuaXNVbmRlZmluZWQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlIGFzIGEgbWVzc2FnZSB3aXRoIHRoaXMgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQKLSAgICAgICAgYWRkUmVhZGVyRXJyb3IoCi0gICAgICAgICAgZGVmLAotICAgICAgICAgIG1zZ0VsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfTUVTU0FHRV9OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtc2cgPSBkZWYuY3JlYXRlTWVzc2FnZSgpOwotICAgIH0KLQotICAgIC8vIFdoZXRoZXIgaXQgd2FzIHJldHJpZXZlZCBvciBjcmVhdGVkLCB0aGUgZGVmaW5pdGlvbiBoYXMgYmVlbiBmb3VuZC4KLSAgICBtc2cuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQobXNnRWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBtc2cuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1BBUlQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIG1zZy5hZGRQYXJ0KHBhcnNlUGFydCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBYTUwgVmFsaWRhdGlvbiB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24obXNnLCBtc2dFbCk7Ci0KLSAgICByZXR1cm4gbXNnOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgcGFydCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHBhcnRFbCBUaGUgcGFydCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBwYXJ0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFBhcnQgcGFyc2VQYXJ0KEVsZW1lbnQgcGFydEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFBhcnQgcGFydCA9IGRlZi5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocGFydEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIFFOYW1lIGVsZW1lbnROYW1lOwotICAgIHRyeQotICAgIHsKLSAgICAgIGVsZW1lbnROYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUocGFydEVsLCBDb25zdGFudHMuQVRUUl9FTEVNRU5ULCBDb25zdGFudHMuRUxFTV9NRVNTQUdFLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50IG5hbWUKLSAgICAgIGVsZW1lbnROYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShwYXJ0RWwsIENvbnN0YW50cy5BVFRSX0VMRU1FTlQpKTsKLSAgICB9Ci0KLSAgICBRTmFtZSB0eXBlTmFtZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICB0eXBlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfVFlQRSwKLSAgICAgICAgLy8gQ29ycmVjdGVkIC0gd2FzIEFUVFJfRUxFTUVOVAotICBDb25zdGFudHMuRUxFTV9NRVNTQUdFLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZQotICAgICAgdHlwZU5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfVFlQRSkpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcGFydC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0RWxlbWVudE5hbWUoZWxlbWVudE5hbWUpOwotICAgIH0KLQotICAgIGlmICh0eXBlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0VHlwZU5hbWUodHlwZU5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocGFydEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcGFydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBYTUwgVmFsaWRhdGlvbiB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIE1hcCBleHRlbnNpb25BdHRyaWJ1dGVzID0gcGFydC5nZXRFeHRlbnNpb25BdHRyaWJ1dGVzKCk7Ci0KLSAgICBleHRlbnNpb25BdHRyaWJ1dGVzLnB1dEFsbChnZXRQYXJ0QXR0cmlidXRlcyhwYXJ0RWwsIGRlZikpOwotCi0gICAgLy8gTmVlZCB0byBkbyBzb21ldGhpbmcgaGVyZSB0byBsb2NhdGUgcGFydCBkZWZpbml0aW9uLgotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihwYXJ0LCBwYXJ0RWwpOwotCi0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgbWFwIG9mIHRoZSBwYXJ0IGF0dHJpYnV0ZXMuCi0gICAqIAotICAgKiBAcGFyYW0gZWwgVGhlIHBhcnQgYXR0cmlidXRlcyBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbnRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBtYXAgY29udGFpbmluZyB0aGUgcGFydCBhdHRyaWJ1dGVzLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBNYXAgZ2V0UGFydEF0dHJpYnV0ZXMoRWxlbWVudCBlbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNYXAgYXR0cmlidXRlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBlbC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGF0dHMgPSBub2RlTWFwLmdldExlbmd0aCgpOwotCi0gICAgZm9yIChpbnQgYSA9IDA7IGEgPCBhdHRzOyBhKyspCi0gICAgewotICAgICAgQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cilub2RlTWFwLml0ZW0oYSk7Ci0gICAgICBTdHJpbmcgbE5hbWUgPSBhdHRyaWJ1dGUuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICBTdHJpbmcgblNwYWNlID0gYXR0cmlidXRlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIHByZWZpeCA9IGF0dHJpYnV0ZS5nZXRQcmVmaXgoKTsKLSAgICAgIFFOYW1lIG5hbWUgPSBuZXcgUU5hbWUoblNwYWNlLCBsTmFtZSk7Ci0KLSAgICAgIGlmIChuU3BhY2UgIT0gbnVsbCAmJiAhblNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1dTREwpKQotICAgICAgewotICAgICAgICBpZiAoIW5TcGFjZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YTUxOUykpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc3RyVmFsdWUgPSBhdHRyaWJ1dGUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICBRTmFtZSBxVmFsdWUgPSBudWxsOwotCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcVZhbHVlID0gRE9NVXRpbHMuZ2V0UU5hbWUoc3RyVmFsdWUsIGVsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBxVmFsdWUgPSBuZXcgUU5hbWUoc3RyVmFsdWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHFWYWx1ZSk7Ci0KLSAgICAgICAgICBTdHJpbmcgdGVtcE5TVXJpID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotCi0gICAgICAgICAgd2hpbGUgKHRlbXBOU1VyaSAhPSBudWxsICYmICF0ZW1wTlNVcmkuZXF1YWxzKG5TcGFjZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ICs9ICJfIjsKLSAgICAgICAgICAgIHRlbXBOU1VyaSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBkZWYuYWRkTmFtZXNwYWNlKHByZWZpeCwgblNwYWNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgICFsTmFtZS5lcXVhbHMoQ29uc3RhbnRzLkFUVFJfTkFNRSkKLSAgICAgICAgICAmJiAhbE5hbWUuZXF1YWxzKENvbnN0YW50cy5BVFRSX0VMRU1FTlQpCi0gICAgICAgICAgJiYgIWxOYW1lLmVxdWFscyhDb25zdGFudHMuQVRUUl9UWVBFKSkKLSAgICAgIHsKLSAgICAgICAgV1NETEV4Y2VwdGlvbiB3c2RsRXhjID0KLSAgICAgICAgICBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgIFdTRExFeGNlcHRpb24uSU5WQUxJRF9XU0RMLAotICAgICAgICAgICAgIkVuY291bnRlcmVkIGlsbGVnYWwgIgotICAgICAgICAgICAgICArICJwYXJ0IGV4dGVuc2lvbiAiCi0gICAgICAgICAgICAgICsgImF0dHJpYnV0ZSAnIgotICAgICAgICAgICAgICArIG5hbWUKLSAgICAgICAgICAgICAgKyAiJy4gRXh0ZW5zaW9uICIKLSAgICAgICAgICAgICAgKyAiYXR0cmlidXRlcyBtdXN0IGJlIGluICIKLSAgICAgICAgICAgICAgKyAiYSBuYW1lc3BhY2Ugb3RoZXIgdGhhbiAiCi0gICAgICAgICAgICAgICsgIldTREwncy4iKTsKLQotICAgICAgICB3c2RsRXhjLnNldExvY2F0aW9uKFhQYXRoVXRpbHMuZ2V0WFBhdGhFeHByRnJvbU5vZGUoZWwpKTsKLSAgICAgICAgLy90aHJvdyB3c2RsRXhjOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYXR0cmlidXRlcywgZWwpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBwb3J0VHlwZSBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHBvcnRUeXBlRWwgVGhlIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgcG9ydFR5cGUgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydFR5cGUgcGFyc2VQb3J0VHlwZShFbGVtZW50IHBvcnRUeXBlRWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocG9ydFR5cGVFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFFOYW1lIHBvcnRUeXBlTmFtZSA9IG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotCi0gICAgICBwb3J0VHlwZSA9IGRlZi5nZXRQb3J0VHlwZShwb3J0VHlwZU5hbWUpOwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGVOYW1lKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGUgUG9ydFR5cGUgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIHByb2R1Y2UgYW4gZXJyb3IgYW5kIHJldHVybiBudWxsCi0gICAgICAgIGFkZFJlYWRlckVycm9yKAotICAgICAgICAgIGRlZiwKLSAgICAgICAgICBwb3J0VHlwZUVsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfUE9SVFRZUEVfTkFNRV9BTFJFQURZX0RFRklORUQiLCAiJyIgKyBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICB9Ci0KLSAgICAvLyBXaGV0aGVyIGl0IHdhcyByZXRyaWV2ZWQgb3IgY3JlYXRlZCwgdGhlIGRlZmluaXRpb24gaGFzIGJlZW4gZm91bmQuCi0gICAgcG9ydFR5cGUuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocG9ydFR5cGVFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHBvcnRUeXBlLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9PUEVSQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG1vZGlmaWVkIHNvIGR1cGxpY2F0ZSBvcGVyYXRpb25zIHdpbGwgbm90IGJlIGFkZGVkIHRvIHBvcnR0eXBlIAotICAgICAgICBPcGVyYXRpb24gb3AgPSBwYXJzZU9wZXJhdGlvbih0ZW1wRWwsIHBvcnRUeXBlLCBkZWYpOwotICAgICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy9wb3J0VHlwZS5hZGRPcGVyYXRpb24ocGFyc2VPcGVyYXRpb24odGVtcEVsLCBwb3J0VHlwZSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIHNvbWV0aGluZyBlbHNlIHRoYXQgc2hvdWxkbid0IGJlIGhlcmUKLSAgICAgICAgLy8gTkVFRCBUTyBBREQgVE8gRVJST1IgTElTVAotICAgICAgICAvL0RPTVV0aWxzLnRocm93V1NETEV4Y2VwdGlvbih0ZW1wRWwpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKHBvcnRUeXBlLCBwb3J0VHlwZUVsKTsKLQotICAgIHJldHVybiBwb3J0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIG9wRWwgVGhlIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgVGhlIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBPcGVyYXRpb24gcGFyc2VPcGVyYXRpb24oRWxlbWVudCBvcEVsLCBQb3J0VHlwZSBwb3J0VHlwZSwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBPcGVyYXRpb24gb3AgPSBudWxsOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKG9wRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFN0cmluZyBwYXJhbWV0ZXJPcmRlclN0ciA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShvcEVsLCBDb25zdGFudHMuQVRUUl9QQVJBTUVURVJfT1JERVIpOwotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQob3BFbCk7Ci0gICAgTGlzdCBtZXNzYWdlT3JkZXIgPSBuZXcgVmVjdG9yKCk7Ci0gICAgRWxlbWVudCBkb2NFbCA9IG51bGw7Ci0gICAgSW5wdXQgaW5wdXQgPSBudWxsOwotICAgIE91dHB1dCBvdXRwdXQgPSBudWxsOwotICAgIExpc3QgZmF1bHRzID0gbmV3IFZlY3RvcigpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBkb2NFbCA9IHRlbXBFbDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lOUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBpbnB1dCA9IHBhcnNlSW5wdXQodGVtcEVsLCBkZWYpOwotICAgICAgICBtZXNzYWdlT3JkZXIuYWRkKENvbnN0YW50cy5FTEVNX0lOUFVUKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX09VVFBVVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0ID0gcGFyc2VPdXRwdXQodGVtcEVsLCBkZWYpOwotICAgICAgICBtZXNzYWdlT3JkZXIuYWRkKENvbnN0YW50cy5FTEVNX09VVFBVVCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9GQVVMVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgZmF1bHRzLmFkZChwYXJzZUZhdWx0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGludmFsaWQgZWxlbWVudCBpbiB0aGUgb3BlcmF0aW9uCi0gICAgICAgIC8vIFhNTCBjaGVjayB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGlucHV0TmFtZSA9IChpbnB1dCAhPSBudWxsID8gaW5wdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0gICAgICBTdHJpbmcgb3V0cHV0TmFtZSA9IChvdXRwdXQgIT0gbnVsbCA/IG91dHB1dC5nZXROYW1lKCkgOiBudWxsKTsKLQotICAgICAgYm9vbGVhbiBvcERlZmluZWQgPSBmYWxzZTsKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0KLSAgICAgICAgLy9vcCA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbihuYW1lLCBpbnB1dE5hbWUsIG91dHB1dE5hbWUpOwotCi0gICAgICAgIC8vT3BlcmF0aW9uIG9wID0gbnVsbDsKLSAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgICBpZiAob3BlcmF0aW9ucyAhPSBudWxsKQotICAgICAgICB7Ci0KLSAgICAgICAgICBJdGVyYXRvciBpT3BlcmF0aW9ucyA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaU9wZXJhdGlvbnMuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xlYW4gaW5wdXROYW1lc0VxdWFsID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sZWFuIG91dHB1dE5hbWVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyID0gKE9wZXJhdGlvbilpT3BlcmF0aW9ucy5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAob3Blci5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnB1dCBvcElucHV0ID0gb3Blci5nZXRJbnB1dCgpOwotICAgICAgICAgICAgICBpZiAob3BJbnB1dCAhPSBudWxsICYmIGlucHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb3BJbnB1dE5hbWUgPSBvcElucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAob3BJbnB1dE5hbWUgIT0gbnVsbCAmJiBpbnB1dE5hbWUgIT0gbnVsbCAmJiBvcElucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpbnB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvcElucHV0TmFtZSA9PSBudWxsICYmIGlucHV0TmFtZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlucHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKG9wSW5wdXQgPT0gbnVsbCAmJiBpbnB1dCA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBPdXRwdXQgb3BPdXRwdXQgPSBvcGVyLmdldE91dHB1dCgpOwotICAgICAgICAgICAgICBpZiAob3BPdXRwdXQgIT0gbnVsbCAmJiBvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBvcE91dHB1dE5hbWUgPSBvcE91dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wT3V0cHV0TmFtZSAhPSBudWxsICYmIG91dHB1dE5hbWUgIT0gbnVsbCAmJiBvcE91dHB1dE5hbWUuZXF1YWxzKG91dHB1dE5hbWUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG91dHB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvcE91dHB1dE5hbWUgPT0gbnVsbCAmJiBvdXRwdXROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKG9wT3V0cHV0ID09IG51bGwgJiYgb3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoaW5wdXROYW1lc0VxdWFsICYmIG91dHB1dE5hbWVzRXF1YWwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcCA9IG9wZXI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgb3BEZWZpbmVkID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgLyomJiAhb3AuaXNVbmRlZmluZWQoKSovCi0gICAgICAgICkKLSAgICAgIHsKLSAgICAgICAgLy9vcCA9IG51bGw7Ci0gICAgICAgIG9wRGVmaW5lZCA9IHRydWU7Ci0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgIW9wRGVmaW5lZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGlucHV0TmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSW5wdXQgdGVtcEluID0gb3AuZ2V0SW5wdXQoKTsKLQotICAgICAgICAgIGlmICh0ZW1wSW4gIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGVtcEluLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL29wID0gbnVsbDsKLSAgICAgICAgICAgICAgb3BEZWZpbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgIW9wRGVmaW5lZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKG91dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIE91dHB1dCB0ZW1wT3V0ID0gb3AuZ2V0T3V0cHV0KCk7Ci0KLSAgICAgICAgICBpZiAodGVtcE91dCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0ZW1wT3V0LmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL29wID0gbnVsbDsKLSAgICAgICAgICAgICAgb3BEZWZpbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wRGVmaW5lZCkKLSAgICAgIHsKLSAgICAgICAgLy8gaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUgd2l0aCB0aGUgc2FtZSBuYW1lIHdlJ3JlIGdvaW5nIHRvIHJldHVybiBudWxsLgotICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIFdTREwgMS4yIHdvcmtpbmcgZHJhZnQgb3BlcmF0aW9uIG92ZXJsb2FkaW5nIGlzIG5vIGxvbmdlciBhbGxvd2VkLgotICAgICAgICAvLyBHb2luZyB0byB1c2UgdGhhdCBoZXJlIHRvIHNhdmUgYSBsb3Qgb2Ygd29yawotICAgICAgICBzZXRMb2NhdGlvbihvcCwgb3BFbCk7Ci0gICAgICAgIGFkZFJlYWRlckVycm9yKAotICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgIG9wLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgIl9EVVBMSUNBVEVfT1BFUkFUSU9OX0ZPUl9QT1JUVFlQRSIsCi0gICAgICAgICAgICAiJyIgKyBvcC5nZXROYW1lKCkgKyAiJyIsCi0gICAgICAgICAgICAiJyIgKyBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9wID0gZGVmLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgICAgICBvcC5zZXROYW1lKG5hbWUpOwotCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBvcCA9IGRlZi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICB9Ci0KLSAgICAvLyBXaGV0aGVyIGl0IHdhcyByZXRyaWV2ZWQgb3IgY3JlYXRlZCwgdGhlIGRlZmluaXRpb24gaGFzIGJlZW4gZm91bmQuCi0gICAgb3Auc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIGlmIChwYXJhbWV0ZXJPcmRlclN0ciAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wLnNldFBhcmFtZXRlck9yZGVyaW5nKFN0cmluZ1V0aWxzLnBhcnNlTk1Ub2tlbnMocGFyYW1ldGVyT3JkZXJTdHIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZG9jRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkb2NFbCk7Ci0gICAgfQotCi0gICAgaWYgKGlucHV0ICE9IG51bGwpCi0gICAgewotICAgICAgb3Auc2V0SW5wdXQoaW5wdXQpOwotICAgIH0KLQotICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcC5zZXRPdXRwdXQob3V0cHV0KTsKLSAgICB9Ci0KLSAgICBpZiAoZmF1bHRzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgSXRlcmF0b3IgZmF1bHRJdGVyYXRvciA9IGZhdWx0cy5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoZmF1bHRJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEZhdWx0IGYgPSAoRmF1bHQpZmF1bHRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIC8vIGlmIHRoZSBmYXVsdCBpc24ndCBkZWZpbmVkIHlldAotICAgICAgICBpZiAob3AuZ2V0RmF1bHQoZi5nZXROYW1lKCkpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBvcC5hZGRGYXVsdChmKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRSZWFkZXJFcnJvcigKLSAgICAgICAgICAgIG9wLAotICAgICAgICAgICAgZiwKLSAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfRFVQTElDQVRFX0ZBVUxUX05BTUUiLCAiJyIgKyBmLmdldE5hbWUoKSArICInIiwgIiciICsgb3AuZ2V0TmFtZSgpICsgIiciKSk7Ci0gICAgICAgICAgLy9mYXVsdEVycm9ycy5hZGQobmV3IE9iamVjdFtde2YsIkR1cGxpY2F0ZSBOYW1lIixvcH0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgT3BlcmF0aW9uVHlwZSBzdHlsZSA9IG51bGw7Ci0KLSAgICBpZiAobWVzc2FnZU9yZGVyLmVxdWFscyhTVFlMRV9PTkVfV0FZKSkKLSAgICB7Ci0gICAgICBzdHlsZSA9IE9wZXJhdGlvblR5cGUuT05FX1dBWTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZU9yZGVyLmVxdWFscyhTVFlMRV9SRVFVRVNUX1JFU1BPTlNFKSkKLSAgICB7Ci0gICAgICBzdHlsZSA9IE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZU9yZGVyLmVxdWFscyhTVFlMRV9TT0xJQ0lUX1JFU1BPTlNFKSkKLSAgICB7Ci0gICAgICBzdHlsZSA9IE9wZXJhdGlvblR5cGUuU09MSUNJVF9SRVNQT05TRTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZU9yZGVyLmVxdWFscyhTVFlMRV9OT1RJRklDQVRJT04pKQotICAgIHsKLSAgICAgIHN0eWxlID0gT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT047Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlICE9IG51bGwpCi0gICAgewotICAgICAgb3Auc2V0U3R5bGUoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24ob3AsIG9wRWwpOwotCi0gICAgLy8gbW9kaWZpZWQgdG8gcmVtb3ZlIGR1cGxpY2F0ZSBvcGVyYXRpb25zCi0gICAgLy8gICAgaWYob3BEZWZpbmVkKQotICAgIC8vICAgIHsKLSAgICAvLyAgICAgIGFkZFJlYWRlckVycm9yKHBvcnRUeXBlLG9wLFZhbGlkYXRlV1NETFBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFN0cmluZygiX0RVUExJQ0FURV9PUEVSQVRJT05fRk9SX1BPUlRUWVBFIiwiJyIrb3AuZ2V0TmFtZSgpKyInIiwiJyIrcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSsiJyIpKTsKLSAgICAvLyAgICAgIHJldHVybiBudWxsOwotICAgIC8vICAgIH0KLSAgICByZXR1cm4gb3A7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBzZXJ2aWNlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmljZUVsIFRoZSBzZXJ2aWNlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgc2VydmljZSBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBTZXJ2aWNlIHBhcnNlU2VydmljZShFbGVtZW50IHNlcnZpY2VFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBkZWYuY3JlYXRlU2VydmljZSgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHNlcnZpY2VFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHNlcnZpY2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZSkpOwotICAgIH0KLSAgICBTZXJ2aWNlIHM7Ci0gICAgLy8gYSBzZXJ2aWNlIHdpdGggdGhpcyBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZAotICAgIGlmICgocyA9IGRlZi5nZXRTZXJ2aWNlKHNlcnZpY2UuZ2V0UU5hbWUoKSkpICE9IG51bGwpCi0gICAgewotICAgICAgYWRkUmVhZGVyRXJyb3IoCi0gICAgICAgIGRlZiwKLSAgICAgICAgc2VydmljZUVsLAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1NFUlZJQ0VfTkFNRV9BTFJFQURZX0RFRklORUQiLCAiJyIgKyBzLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiJyIpKTsKLSAgICAgIHJldHVybiBzOwotICAgIH0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KHNlcnZpY2VFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2Uuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1BPUlQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2UuYWRkUG9ydChwYXJzZVBvcnQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2VydmljZS5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KFNlcnZpY2UuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oc2VydmljZSwgc2VydmljZUVsKTsKLQotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBwb3J0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcG9ydEVsIFRoZSBwb3J0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIHBvcnQgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydCBwYXJzZVBvcnQoRWxlbWVudCBwb3J0RWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgUG9ydCBwb3J0ID0gZGVmLmNyZWF0ZVBvcnQoKTsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShwb3J0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIGJpbmRpbmdTdHI7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYmluZGluZ1N0ciA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKHBvcnRFbCwgQ29uc3RhbnRzLkFUVFJfQklORElORywgQ29uc3RhbnRzLkVMRU1fUE9SVCwgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy90aGUgY2FsbCBhYm92ZSBmYWlscyBpZiB0aGVyZSBpcyBubyBxdWFsaWZpZWQgbmFtZXNwYWNlIGZvciB0aGUgbWVzc2FnZSBuYW1lCi0gICAgICBiaW5kaW5nU3RyID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShwb3J0RWwsICJiaW5kaW5nIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcG9ydC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChiaW5kaW5nU3RyICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gZGVmLmdldEJpbmRpbmcoYmluZGluZ1N0cik7Ci0KLSAgICAgIGlmIChiaW5kaW5nID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcgPSBkZWYuY3JlYXRlQmluZGluZygpOwotICAgICAgICBiaW5kaW5nLnNldFFOYW1lKGJpbmRpbmdTdHIpOwotICAgICAgICBkZWYuYWRkQmluZGluZyhiaW5kaW5nKTsKLSAgICAgIH0KLQotICAgICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocG9ydEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcG9ydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwb3J0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoUG9ydC5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihwb3J0LCBwb3J0RWwpOwotCi0gICAgcmV0dXJuIHBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50VHlwZSBUaGUgcGFyZW50IHR5cGUgb2YgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsIFRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChDbGFzcyBwYXJlbnRUeXBlLCBFbGVtZW50IGVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgUU5hbWUgZWxlbWVudFR5cGUgPSBRTmFtZVV0aWxzLm5ld1FOYW1lKGVsKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5IGV4dFJlZyA9IGRlZi5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCi0gICAgICBpZiAoZXh0UmVnID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKAotICAgICAgICAgIFdTRExFeGNlcHRpb24uQ09ORklHVVJBVElPTl9FUlJPUiwKLSAgICAgICAgICAiTm8gRXh0ZW5zaW9uUmVnaXN0cnkgc2V0IGZvciB0aGlzICIKLSAgICAgICAgICAgICsgIkRlZmluaXRpb24sIHNvIHVuYWJsZSB0byBkZXNlcmlhbGl6ZSAiCi0gICAgICAgICAgICArICJhICciCi0gICAgICAgICAgICArIGVsZW1lbnRUeXBlCi0gICAgICAgICAgICArICInIGVsZW1lbnQgaW4gdGhlICIKLSAgICAgICAgICAgICsgImNvbnRleHQgb2YgYSAnIgotICAgICAgICAgICAgKyBwYXJlbnRUeXBlLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiJy4iKTsKLSAgICAgIH0KLQotICAgICAgRXh0ZW5zaW9uRGVzZXJpYWxpemVyIGV4dERTID0gZXh0UmVnLnF1ZXJ5RGVzZXJpYWxpemVyKHBhcmVudFR5cGUsIGVsZW1lbnRUeXBlKTsKLQotICAgICAgLy8gYXNpZ24gdGhlIEV4dGVuc2liaWxpdHlFbGVtZW50IHRvIGEgdmFyIHNvIHdlIGNhbiBhZGQgaXQgdG8gdGhlIGxvY2F0aW9ucwotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IGV4dERTLnVubWFyc2hhbGwocGFyZW50VHlwZSwgZWxlbWVudFR5cGUsIGVsLCBkZWYsIGV4dFJlZyk7Ci0gICAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgICAgLy8gdGhpcyBtaWdodCBub3Qgd29yayBwcm9wZXJseQotICAgICAgc2V0TG9jYXRpb24oZXh0RWxlbSwgZWwpOwotCi0gICAgICAvLyByZWdpc3RlciBhbGwgb2YgdGhlIGNoaWxkIEVsZW1lbnRzIHNvIHdlIGNhbiBmaW5kIHRoZW0gbGF0ZXIKLSAgICAgIC8vIHVzZWQgZm9yIGlubGluZSBzY2hlbWEgdmFsaWRhdGlvbgotICAgICAgcmVnaXN0ZXJDaGlsZEVsZW1lbnRzKGV4dEVsZW0pOwotCi0gICAgICByZXR1cm4gZXh0RWxlbTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBpZiAoZS5nZXRMb2NhdGlvbigpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGUuc2V0TG9jYXRpb24oWFBhdGhVdGlscy5nZXRYUGF0aEV4cHJGcm9tTm9kZShlbCkpOwotICAgICAgfQotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBpbnB1dCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0RWwgVGhlIGlucHV0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgaW5wdXQgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgSW5wdXQgcGFyc2VJbnB1dChFbGVtZW50IGlucHV0RWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0KLSAgICBJbnB1dCBpbnB1dCA9IGRlZi5jcmVhdGVJbnB1dCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGlucHV0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtZXNzYWdlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKGlucHV0RWwsIENvbnN0YW50cy5BVFRSX01FU1NBR0UsIENvbnN0YW50cy5FTEVNX0lOUFVULCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBtZXNzYWdlIG5hbWUKLSAgICAgIG1lc3NhZ2VOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShpbnB1dEVsLCAibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlucHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZGVmLmdldE1lc3NhZ2UobWVzc2FnZU5hbWUpOwotCi0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlTmFtZSk7Ci0gICAgICAgIGRlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotCi0gICAgICBpbnB1dC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoaW5wdXRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihpbnB1dCwgaW5wdXRFbCk7Ci0KLSAgICByZXR1cm4gaW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBvdXRwdXQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBvdXRwdXRFbCBUaGUgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIE91dHB1dCBwYXJzZU91dHB1dChFbGVtZW50IG91dHB1dEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIE91dHB1dCBvdXRwdXQgPSBkZWYuY3JlYXRlT3V0cHV0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUob3V0cHV0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtZXNzYWdlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKG91dHB1dEVsLCBDb25zdGFudHMuQVRUUl9NRVNTQUdFLCBDb25zdGFudHMuRUxFTV9PVVRQVVQsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIG1lc3NhZ2UgbmFtZQotICAgICAgbWVzc2FnZU5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKG91dHB1dEVsLCAibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIG91dHB1dC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGRlZi5nZXRNZXNzYWdlKG1lc3NhZ2VOYW1lKTsKLQotICAgICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGRlZi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZU5hbWUpOwotICAgICAgICBkZWYuYWRkTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgIH0KLQotICAgICAgb3V0cHV0LnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChvdXRwdXRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIG91dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBYTUwgVmFsaWRhdGlvbiB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24ob3V0cHV0LCBvdXRwdXRFbCk7Ci0KLSAgICByZXR1cm4gb3V0cHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgZmF1bHQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBmYXVsdEVsIFRoZSBmYXVsdCBlbGVtZW50IHRvIHBhcnNlLgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBmYXVsdCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBGYXVsdCBwYXJzZUZhdWx0KEVsZW1lbnQgZmF1bHRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBGYXVsdCBmYXVsdCA9IGRlZi5jcmVhdGVGYXVsdCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGZhdWx0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtZXNzYWdlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKGZhdWx0RWwsIENvbnN0YW50cy5BVFRSX01FU1NBR0UsIENvbnN0YW50cy5FTEVNX0lOUFVULCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBtZXNzYWdlIG5hbWUKLSAgICAgIG1lc3NhZ2VOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShmYXVsdEVsLCAibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZhdWx0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZGVmLmdldE1lc3NhZ2UobWVzc2FnZU5hbWUpOwotCi0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlTmFtZSk7Ci0gICAgICAgIGRlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotCi0gICAgICBmYXVsdC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoZmF1bHRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGZhdWx0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihmYXVsdCwgZmF1bHRFbCk7Ci0KLSAgICByZXR1cm4gZmF1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIG1lc3NhZ2VnZW5lcmF0b3IgZm9yIHRoZSByZWFkZXIuCi0gICAqIAotICAgKiBAcGFyYW0gbWcgVGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VHZW5lcmF0b3IoTWVzc2FnZUdlbmVyYXRvciBtZykKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZzsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdGhlIHJlZk9iamVjdCB0byB0aGUgZWxlbWVudExvY2F0aW9uIGhhc2h0YWJsZSB3aXRoIHRoZSBsb2NhdGlvbiBkZWZpbmVkIGluIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcmVmT2JqZWN0IFRoZSBvYmplY3QgdG8gYWRkLgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldExvY2F0aW9uKE9iamVjdCByZWZPYmplY3QsIEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEVsZW1lbnRJbXBsIGVsZW1lbnRJbXBsID0gKEVsZW1lbnRJbXBsKWVsZW1lbnQ7Ci0gICAgICBFbGVtZW50TG9jYXRpb24gZWxlbWVudExvY2F0aW9uID0gKEVsZW1lbnRMb2NhdGlvbillbGVtZW50SW1wbC5nZXRVc2VyRGF0YSgpOwotICAgICAgaWYgKGVsZW1lbnRMb2NhdGlvbiAhPSBudWxsKQotICAgICAgewotCi0gICAgICAgIGVsZW1lbnRMb2NhdGlvbnMucHV0KAotICAgICAgICAgIHJlZk9iamVjdCwKLSAgICAgICAgICBuZXcgTG9jYXRpb25Ib2xkZXIoZWxlbWVudExvY2F0aW9uLmdldExpbmVOdW1iZXIoKSwgZWxlbWVudExvY2F0aW9uLmdldENvbHVtbk51bWJlcigpLCBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIEFkZCBhIHJlYWRlciBlcnJvciB0byB0aGUgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvci4KLSAgICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHdpdGggdGhlIGVycm9yLgotICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRSZWFkZXJFcnJvcihPYmplY3QgcGFyZW50b2JqZWN0LCBPYmplY3Qgb2JqZWN0LCBTdHJpbmcgZXJyb3IpCi0gIHsKLSAgICByZWFkZXJFcnJvcnMuYWRkKG5ldyBSZWFkZXJFcnJvcihwYXJlbnRvYmplY3QsIG9iamVjdCwgZXJyb3IpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIHJlYWRlciB3YXJuaW5nIHRvIHRoZSBsaXN0LgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yLgotICAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIEBwYXJhbSB3YXJuaW5nIFRoZSB3YXJuaW5nIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRSZWFkZXJXYXJuaW5nKE9iamVjdCBwYXJlbnRvYmplY3QsIE9iamVjdCBvYmplY3QsIFN0cmluZyB3YXJuaW5nKQotICB7Ci0gICAgcmVhZGVyV2FybmluZ3MuYWRkKG5ldyBSZWFkZXJFcnJvcihwYXJlbnRvYmplY3QsIG9iamVjdCwgd2FybmluZykpOwotICB9Ci0gIAotICAvKioKLSAgICogUmVnaXN0ZXIgYWxsIG9mIHRoZSBsb2NhdGlvbnMgb2YgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBleHRlbnNpYmlsaXR5Ci0gICAqIGVsZW1lbnQgZ2l2ZW4uCi0gICAqIAotICAgKiBAcGFyYW0gZXh0RWxlbSBUaGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHdob3NlIGNoaWxkIGVsZW1lbnRzIHdpbGwgYmUgcmVnaXN0ZXJlZC4KLSAgICovCi0KLSAgcHJvdGVjdGVkIHZvaWQgcmVnaXN0ZXJDaGlsZEVsZW1lbnRzKEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0pCi0gIHsKLSAgICAvLyBvbmx5IGFkZCB0aG9zZSB0aGF0IGFyZSBvZiB0eXBlIHVua25vd24uIGlmIHRoZXkncmUga25vd24gdGhleSAKLSAgICAvLyB3aWxsIHRha2UgY2FyZSBvZiB0aGVtc2VsdmVzCi0gICAgaWYgKGV4dEVsZW0gaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtID0gKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbSkuZ2V0RWxlbWVudCgpOwotICAgICAgcmVnaXN0ZXJDaGlsZEVsZW1lbnRzUmVjdXJzaXZlbHkoZWxlbSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoZSBsb2NhdGlvbiBvZiBhbGwgb2YgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIGVsZW0uCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgZWxlbWVudCB3aG9zZSBjaGlsZCBlbGVtZW50cyB3aWxsIGJlIHJlZ2lzdGVyZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWdpc3RlckNoaWxkRWxlbWVudHNSZWN1cnNpdmVseShFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAoZWxlbSBpbnN0YW5jZW9mIEVsZW1lbnROU0ltcGwpCi0gICAgewotICAgICAgc2V0TG9jYXRpb24oZWxlbSwgZWxlbSk7Ci0KLSAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgICBOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgICByZWdpc3RlckNoaWxkRWxlbWVudHNSZWN1cnNpdmVseShjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIENoZWNrIHRoYXQgYW4gZWxlbWVudCBuYW1lIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5hbWUuCi0gICAqIAotICAgKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgd2l0aCB0aGUgbmFtZSB0byBjaGVjay4KLSAgICogQHBhcmFtIHFuYW1lIFRoZSBuYW1lIHRvIGNoZWNrIGFnYWluc3QuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0VsZW1lbnROYW1lKEVsZW1lbnQgZWwsIFFOYW1lIHFuYW1lKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFRTmFtZVV0aWxzLm1hdGNoZXMocW5hbWUsIGVsKSkKLSAgICB7Ci0gICAgICBXU0RMRXhjZXB0aW9uIHdzZGxFeGMgPSBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLklOVkFMSURfV1NETCwgIkV4cGVjdGVkIGVsZW1lbnQgJyIgKyBxbmFtZSArICInLiIpOwotCi0gICAgICB3c2RsRXhjLnNldExvY2F0aW9uKFhQYXRoVXRpbHMuZ2V0WFBhdGhFeHByRnJvbU5vZGUoZWwpKTsKLQotICAgICAgdGhyb3cgd3NkbEV4YzsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICovCi0gIHB1YmxpYyBIYXNodGFibGUgZ2V0RWxlbWVudExvY2F0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudExvY2F0aW9uczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgcmVhZGVyIGVycm9ycy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHJlYWRlciBlcnJvcnMuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRSZWFkZXJFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIHJlYWRlckVycm9yczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCByZWFkZXIgd2FybmluZ3MuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSByZWFkZXIgd2FybmluZ3MuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRSZWFkZXJXYXJuaW5ncygpCi0gIHsKLSAgICByZXR1cm4gcmVhZGVyV2FybmluZ3M7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzlhM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU29ydGVkU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5YTUxFcnJvclJlcG9ydGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuTGluZU51bWJlckRPTVBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogQSBXU0RMIHJlYWRlciB0aGF0IHN1cHBvcnRzIGN5Y2xpYyBXU0RMIGltcG9ydHMsIHNjaGVtYSBpbXBvcnRzIGFuZCBpbmxpbmUgc2NoZW1hcy4KLSAqIFRoaXMgcmVhZGVyIGlzIGJhc2VkIG9uIHRoZSBXU0RMUmVhZGVySW1wbCBmcm9tIFdTREw0Si4gCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMUmVhZGVySW1wbAotewotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgSVdTREwxMVZhbGlkYXRpb25JbmZvIHdzZGx2YWxpbmZvOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGx2YWxpbmZvIFRoZSBXU0RMIDEuMSB2YWxpZGF0aW9uIGluZm8gb2JqZWN0IHRvIHVzZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMUmVhZGVySW1wbChJV1NETDExVmFsaWRhdGlvbkluZm8gd3NkbHZhbGluZm8pCi0gIHsKLSAgICB0aGlzLndzZGx2YWxpbmZvID0gd3NkbHZhbGluZm87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgcm9vdCBkb2N1bWVudC4gVGhpcyBtZXRob2Qgd2lsbCBmaW5kIGFsbCBpbXBvcnRzIGFuZCBwYXJzZSB0aGVtIGFzIAotICAgKiB3ZWxsIGNyZWF0aW5nIGEgV1NETERvY3VtZW50IGZvciBlYWNoIHVuaXF1ZSBXU0RMIGZpbGUuIFRoaXMgbWV0aG9kIHN1cHBvcnRzCi0gICAqIGN5Y2xpYyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzIHN1Y2ggdGhhdCBmaWxlIEEgY2FuIGltcG9ydCBmaWxlIEIgYW5kIGZpbGUgQgotICAgKiBjYW4gaW1wb3J0IGZpbGUgQS4KLSAgICogCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgVGhlIGJhc2UgVVJJIG9mIHRoZSByb290IGRvY3VtZW50LgotICAgKiBAcGFyYW0gZGVmRWwgVGhlIGRlZmluaXRpb24gZWxlbWVudCBvZiB0aGUgcm9vdCBkb2N1bWVudC4KLSAgICogQHJldHVybiBBbiBhcnJheSBvZiBXU0RMRG9jdW1lbnRzIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSB1bmlxdWUgZmlsZXMgaW4gdGhlIGRlc2NyaXB0aW9uLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRG9jdW1lbnRbXSBwYXJzZURvY3VtZW50KFN0cmluZyBkb2N1bWVudEJhc2VVUkksIEVsZW1lbnQgZGVmRWwpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBpbnQgaW5pdGlhbEltcG9ydEFycmF5U2l6ZSA9IDIwOwotICAgIExpc3RbXSBmaWxlc0F0RGVwdGggPSBuZXcgQXJyYXlMaXN0W2luaXRpYWxJbXBvcnRBcnJheVNpemVdOwotICAgIE1hcCBmaWxlc0ltcG9ydGluZyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBTb3J0ZWRTZXQgcGFyc2VkSW1wb3J0cyA9IG5ldyBUcmVlU2V0KCk7Ci0gICAgU29ydGVkU2V0IGltcG9ydHNUb1BhcnNlID0gbmV3IFRyZWVTZXQoKTsKLSAgICBpbnQgbWF4ZGVwdGggPSAwOwotCi0gICAgV1NETERvY3VtZW50IHJvb3Rkb2MgPSBuZXcgV1NETERvY3VtZW50KGRvY3VtZW50QmFzZVVSSSwgZGVmRWwsIDAsIG1lc3NhZ2VnZW5lcmF0b3IsIHdzZGx2YWxpbmZvKTsKLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gcm9vdGRvYy5nZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgSW1wb3J0SG9sZGVyIHJvb3RJbXBvcnQgPSBuZXcgSW1wb3J0SG9sZGVyKHRhcmdldE5hbWVzcGFjZSwgZG9jdW1lbnRCYXNlVVJJLCBkb2N1bWVudEJhc2VVUkksIHJvb3Rkb2MsIDAsIG51bGwsIG1lc3NhZ2VnZW5lcmF0b3IsIHdzZGx2YWxpbmZvKTsKLSAgICByb290SW1wb3J0LmNyZWF0ZVdTRExJbXBvcnQocm9vdGRvYyk7Ci0gICAgcGFyc2VkSW1wb3J0cy5hZGQocm9vdEltcG9ydCk7Ci0gICAgTGlzdCByb290TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmaWxlc0ltcG9ydGluZy5wdXQocm9vdEltcG9ydC5nZXRMb2NhdGlvbigpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgIHJvb3RMaXN0LmFkZChyb290ZG9jKTsKLSAgICBmaWxlc0F0RGVwdGhbMF0gPSByb290TGlzdDsKLSAgICBpbXBvcnRzVG9QYXJzZS5hZGRBbGwocm9vdGRvYy5nZXRJbXBvcnRzKCkpOwotICAgIFNldCBpbXBzID0gcm9vdGRvYy5nZXRJbXBvcnRzKCk7Ci0gICAgSXRlcmF0b3IgaW1wSXRlciA9IGltcHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShpbXBJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJbXBvcnRIb2xkZXIgaW1wID0gKEltcG9ydEhvbGRlcilpbXBJdGVyLm5leHQoKTsKLSAgICAgIExpc3QgdGVtcExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICB0ZW1wTGlzdC5hZGQoaW1wLmdldEltcG9ydGluZ0RvY3VtZW50KCkpOwotICAgICAgZmlsZXNJbXBvcnRpbmcucHV0KGltcC5nZXRMb2NhdGlvbigpLCB0ZW1wTGlzdCk7Ci0gICAgfQotICAgIAotICAgIHdoaWxlKCFpbXBvcnRzVG9QYXJzZS5pc0VtcHR5KCkpCi0gICAgewotICAgICAgSW1wb3J0SG9sZGVyIGltcCA9IChJbXBvcnRIb2xkZXIpaW1wb3J0c1RvUGFyc2UuZmlyc3QoKTsKLSAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGluaXRpYWxpemUgdGhlIGltcG9ydCBoZXJlIHNvIGVhY2ggaW1wb3J0Ci0gICAgICAvLyBpcyBvbmx5IGNyZWF0ZWQgb25jZS4gSW4gdGhlIGNhc2Ugb2YgcmVjaXByaWNhbCBpbXBvcnRzIHRoaXMKLSAgICAgIC8vIGF2b2lkcyBhbiBpbmZpbml0ZSBsb29wLgotICAgICAgaW1wLmluaXRpYWxpemUoKTsKLSAgICAgIFdTRExEb2N1bWVudCBpbXBEb2MgPSBpbXAuZ2V0V1NETERvY3VtZW50KCk7Ci0gICAgICAKLSAgICAgIGltcG9ydHNUb1BhcnNlLnJlbW92ZShpbXApOwotICAgICAgCi0gICAgICBwYXJzZWRJbXBvcnRzLmFkZChpbXApOwotICAgICAgCi0gICAgICAvLyBBZGQgbmV3IGltcG9ydHMgdG8gdGhlIGxpc3Qgb2YgaW1wb3J0cyB0byBwYXJzZS4KLSAgICAgIC8vIFJlbW92ZSBhbGwgdGhlIGltcG9ydHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwYXJzZWQuCi0gICAgICBpZihpbXBEb2MgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gSW5jcmVhdGUgaW1wb3J0IGFycmF5IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYoaW1wLmdldERlcHRoKCkgPj0gaW5pdGlhbEltcG9ydEFycmF5U2l6ZSkKLSAgICAgICAgewotICAgICAgICAgIExpc3RbXSB0ZW1wQXJyYXkgPSBuZXcgTGlzdFtmaWxlc0F0RGVwdGgubGVuZ3RoICsgaW5pdGlhbEltcG9ydEFycmF5U2l6ZV07Ci0gICAgICAgICAgU3lzdGVtLmFycmF5Y29weShmaWxlc0F0RGVwdGgsIDAsIHRlbXBBcnJheSwgMCwgZmlsZXNBdERlcHRoLmxlbmd0aCk7Ci0gICAgICAgICAgZmlsZXNBdERlcHRoID0gdGVtcEFycmF5OwotICAgICAgICB9Ci0gICAgICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBmb3IgdGhlIGRlcHRoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaW50IGltcERlcHRoID0gaW1wLmdldERlcHRoKCk7Ci0gICAgICAgIGlmKGZpbGVzQXREZXB0aFtpbXBEZXB0aF0gPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmKG1heGRlcHRoIDwgaW1wRGVwdGgpCi0gICAgICAgICAgewotICAgICAgICAgICAgbWF4ZGVwdGggPSBpbXBEZXB0aDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZmlsZXNBdERlcHRoW2ltcERlcHRoXSA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgfQotICAgICAgICBmaWxlc0F0RGVwdGhbaW1wLmdldERlcHRoKCldLmFkZChpbXBEb2MpOwotICAgICAgICAKLSAgICAgICAgU2V0IGltcG9ydHMgPSBpbXBEb2MuZ2V0SW1wb3J0cygpOwotICAgICAgICBJbXBvcnRIb2xkZXJbXSBpbXBvcnRzQXJyYXkgPSAoSW1wb3J0SG9sZGVyW10paW1wb3J0cy50b0FycmF5KG5ldyBJbXBvcnRIb2xkZXJbaW1wb3J0cy5zaXplKCldKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGltcG9ydHNBcnJheS5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIEltcG9ydEhvbGRlciBpaCA9IGltcG9ydHNBcnJheVtpXTsKLSAgICAgICAgICAvLyBJZiBhbHJlYWR5IHBhcnNlZCwgYWRkIHRoZSBkZWZpbml0aW9uIGltcG9ydGluZyB0aGlzIGZpbGUgdG8gdGhlIGxpc3QuCi0gICAgICAgICAgaWYoZmlsZXNJbXBvcnRpbmcuY29udGFpbnNLZXkoaWguZ2V0TG9jYXRpb24oKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgKChMaXN0KWZpbGVzSW1wb3J0aW5nLmdldChpaC5nZXRMb2NhdGlvbigpKSkuYWRkKGloLmdldEltcG9ydGluZ0RvY3VtZW50KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGl0IHRvIHRoZSBsaXN0IHRvIHBhcnNlLgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhpcyBpbXBvcnQgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgaW1wb3J0aW5nIGxpc3QuCi0gICAgICAgICAgICBMaXN0IHRlbXBMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgdGVtcExpc3QuYWRkKGloLmdldEltcG9ydGluZ0RvY3VtZW50KCkpOwotICAgICAgICAgICAgZmlsZXNJbXBvcnRpbmcucHV0KGloLmdldExvY2F0aW9uKCksIHRlbXBMaXN0KTsKLSAgICAgICAgICAgIGltcG9ydHNUb1BhcnNlLmFkZChpaCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBhbGwgb2YgdGhlIGltcG9ydHMgdG8gdGhlIHJlc3BlY3RpdmUgZG9jdW1lbnRzLgotICAgIEl0ZXJhdG9yIGltcG9ydEVsZW1lbnRzSXRlciA9IHBhcnNlZEltcG9ydHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShpbXBvcnRFbGVtZW50c0l0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydEhvbGRlciBpbXAgPSAoSW1wb3J0SG9sZGVyKWltcG9ydEVsZW1lbnRzSXRlci5uZXh0KCk7Ci0gICAgICBMaXN0IGZpbGVzID0gKExpc3QpZmlsZXNJbXBvcnRpbmcuZ2V0KGltcC5nZXRMb2NhdGlvbigpKTsKLSAgICAgIEl0ZXJhdG9yIGZpbGVzSXRlciA9IGZpbGVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShmaWxlc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClmaWxlc0l0ZXIubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgRGVmaW5pdGlvbkltcGwgZGVmID0gKERlZmluaXRpb25JbXBsKWRvYy5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIEltcG9ydCBpbXBFbGVtID0gaW1wLmdldEltcG9ydCgpOwotICAgICAgICBpZihpbXBFbGVtICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWYuYWRkSW1wb3J0KGltcEVsZW0pOwotICAgICAgICAgIGlmKCFpbXAuaXNXU0RMRmlsZUltcG9ydCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRvYy5hZGRTY2hlbWFzKGltcC5nZXRTY2hlbWFzKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gUGFyc2UgdGhlIFdTREwgZG9jdW1lbnRzLgotICAgIC8vIFBhcnNlIHRoZSBNZXNzYWdlcy4KLSAgICBmb3IoaW50IGkgPSBtYXhkZXB0aDsgaSA+PTA7IGktLSkKLSAgICB7Ci0gICAgICBMaXN0IGRvY3MgPSBmaWxlc0F0RGVwdGhbaV07Ci0gICAgICBJdGVyYXRvciBkb2NzSXRlciA9IGRvY3MuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGRvY3NJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IGRvYyA9IChXU0RMRG9jdW1lbnQpZG9jc0l0ZXIubmV4dCgpOwotICAgICAgICBkb2MucGFyc2VNZXNzYWdlcygpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBQYXJzZSB0aGUgUG9ydHR5cGVzLgotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIGRvYy5wYXJzZVBvcnR0eXBlcygpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBQYXJzZSB0aGUgQmluZGluZ3MuCi0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgZG9jLnBhcnNlQmluZGluZ3MoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUGFyc2UgdGhlIFNlcnZpY2VzLgotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIGRvYy5wYXJzZVNlcnZpY2VzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFBhcnNlIHRoZSBFeHRlbnNpYmlsaXR5IEVsZW1lbnRzLgotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIGRvYy5wYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBMaXN0IHdzZGxEb2NzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIHdzZGxEb2NzLmFkZChkb2MpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFdTRExEb2N1bWVudFtdKXdzZGxEb2NzLnRvQXJyYXkobmV3IFdTRExEb2N1bWVudFt3c2RsRG9jcy5zaXplKCldKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSBUaGUgc291cmNlIG9mIHRoZSBkb2N1bWVudCBiZWluZyByZXRyaWV2ZWQuCi0gICAqIEBwYXJhbSBkZXNjIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgcmV0cmlldmVkLgotICAgKiBAcmV0dXJuIFRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsIFN0cmluZyBkZXNjKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uKCkKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIFhNTEVycm9yUmVwb3J0ZXIgY3JlYXRlRXJyb3JSZXBvcnRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbmV3IFhNTEVycm9yUmVwb3J0ZXIoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKFN0cmluZyBkb21haW4sIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3VtZW50cywgc2hvcnQgc2V2ZXJpdHkpIHRocm93cyBYTklFeGNlcHRpb24KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYm9vbGVhbiByZXBvcnRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgIGlmIChrZXkuZXF1YWxzKCJQcmVtYXR1cmVFT0YiKSkKLSAgICAgICAgICAgICAgIHsgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXBvcnRFcnJvciA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKHJlcG9ydEVycm9yKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN1cGVyLnJlcG9ydEVycm9yKGRvbWFpbiwga2V5LCBhcmd1bWVudHMsIHNldmVyaXR5KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICAKLSAgICAgIEVycm9ySGFuZGxlciBlcnJvckhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKCkKLSAgICAgIHsKLSAgICAgICAgICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgICAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciNlcnJvcihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgICAqIEBzZWUgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyI2ZhdGFsRXJyb3Iob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pCi0gICAgICAgICAgICovCi0gICAgICAgICAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgICAqIEBzZWUgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyI3dhcm5pbmcob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pCi0gICAgICAgICAgICovCi0gICAgICAgICAgcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgICB9Ci0gICAgICB9OwotCi0gICAgICBET01QYXJzZXIgYnVpbGRlciA9IG5ldyBMaW5lTnVtYmVyRE9NUGFyc2VyKGNvbmZpZ3VyYXRpb24pOwotICAgICAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIoZXJyb3JIYW5kbGVyKTsKLSAgICAgIGJ1aWxkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotICAgICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5nZXREb2N1bWVudCgpOwotCi0gICAgICByZXR1cm4gZG9jOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5QQVJTRVJfRVJST1IsICJQcm9ibGVtIHBhcnNpbmcgJyIgKyBkZXNjICsgIicuIiwgdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgYSBXU0RMIGRvY3VtZW50IHVzaW5nIGEgY29udGV4dCBVUkkgYW5kIGZpbGUgVVJJLgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHRVUkkgVGhlIGNvbnRleHQgVVJJIHRvIHVzZS4KLSAgICogQHBhcmFtIHdzZGxVUkkgVGhlIFdTREwgVVJJIHRvIHVzZS4KLSAgICogQHJldHVybiBBbiBhcnJheSBvZiBXU0RMRG9jdW1lbnRzLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnRbXSByZWFkV1NETChTdHJpbmcgY29udGV4dFVSSSwgU3RyaW5nIHdzZGxVUkkpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgY29udGV4dFVSTCA9IChjb250ZXh0VVJJICE9IG51bGwpID8gU3RyaW5nVXRpbHMuZ2V0VVJMKG51bGwsIGNvbnRleHRVUkkpIDogbnVsbDsKLSAgICAgIFVSTCB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwoY29udGV4dFVSTCwgd3NkbFVSSSk7Ci0gICAgICBSZWFkZXIgcmVhZGVyID0gU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzUmVhZGVyKHVybCk7Ci0gICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShyZWFkZXIpOwotICAgICAgRG9jdW1lbnQgZG9jID0gZ2V0RG9jdW1lbnQoaW5wdXRTb3VyY2UsIHdzZGxVUkkpOwotICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICBXU0RMRG9jdW1lbnRbXSB3c2RsRG9jcyA9IG51bGw7Ci0gICAgICAvLyBvbmx5IHBhcnNlIHRoZSBkb2N1bWVudCBpZiBpdCBpc24ndCBlbXB0eQotICAgICAgaWYoZG9jLmdldERvY3VtZW50RWxlbWVudCgpICE9IG51bGwpCi0gICAgICAgeyAgICAgIAotICAgICAgICB3c2RsRG9jcyA9IHJlYWRXU0RMKHVybC50b1N0cmluZygpLCBkb2MpOwotICAgICAgfQotICAgICAgcmV0dXJuIHdzZGxEb2NzOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwKLSAgICAgICAgIlVuYWJsZSB0byByZXNvbHZlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciICsgd3NkbFVSSSArICInLiIsCi0gICAgICAgIHQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIG1lc3NhZ2VnZW5lcmF0b3IgZm9yIHRoZSByZWFkZXIuCi0gICAqIAotICAgKiBAcGFyYW0gbWcgVGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VHZW5lcmF0b3IoTWVzc2FnZUdlbmVyYXRvciBtZykKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlYWQgdGhlIFdTREwgZG9jdW1lbnQgYWNjZXNzaWJsZSB2aWEgdGhlIHNwZWNpZmllZAotICAgKiBVUkkgaW50byBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxVUkkgQSBVUkkgcG9pbnRpbmcgdG8gYSBXU0RMIGZpbGUuCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgV1NETERvY3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnRbXSByZWFkV1NETChTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkV1NETChudWxsLCB3c2RsVVJJKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBXU0RMIGRvY3VtZW50IGRlc2NyaWJlZCBieSBhIFVSSSBhbmQgaXRzIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZG9jdW1lbnRCYXNlVVJJIFRoZSBVUkkgb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uc0VsZW1lbnQgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQgZm9yIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudFtdIHJlYWRXU0RMKFN0cmluZyBkb2N1bWVudEJhc2VVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbnNFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcGFyc2VEb2N1bWVudChkb2N1bWVudEJhc2VVUkksIGRlZmluaXRpb25zRWxlbWVudCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCB0aGUgc3BlY2lmaWVkIFdTREwgZG9jdW1lbnQuCi0gICAqCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgVGhlIGRvY3VtZW50IGJhc2UgVVJJLgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50W10gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcmVhZFdTREwoZG9jdW1lbnRCYXNlVVJJLCB3c2RsRG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotICB9Ci0gIAotICAKLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvaHR0cC9IVFRQVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL2h0dHAvSFRUUFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTM0ZTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvaHR0cC9IVFRQVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLmh0dHA7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nSW5wdXRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuUG9ydEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzc0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZ0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudEltcGw7Ci0KLS8qKgotICogVGhlIEhUVFAgdmFsaWRhdG9yIGlzIGFuIGV4dGVuc2lvbiBXU0RMIHZhbGlkYXRvciB0aGF0IHZhbGlkYXRlcyBhbGwgZWxlbWVudHMgaW4gdGhlIEhUVFAKLSAqIG5hbWVzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIEhUVFBWYWxpZGF0b3IgaW1wbGVtZW50cyBJV1NETDExVmFsaWRhdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBIVFRQX1JFU09VUkNFX0JVTkRMRV9OQU1FID0gInZhbGlkYXRld3NkbGh0dHAiOwotCQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9QT1JUX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfSU5QVVRfRUxFTUVOVCA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0lOUFVUX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9IVFRQX0VMRU1FTlRfRk9SX0xPQ0FUSU9OID0gIl9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MgPSAiX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9BRERSRVNTID0gIl9FUlJPUl9OT19IVFRQQklORElOR19GT1JfQUREUkVTUyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVkVSQiA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1ZFUkIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9MT0NBVElPTl9VUkkgPSAiX0VSUk9SX0lOVkFMSURfTE9DQVRJT05fVVJJIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04gPSAiX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9UX09OTFlfRUxFTUVOVF9ERUZJTkVEID0gIl9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fSFRUUE9QRVJBVElPTl9GT1JfVVJMID0gIl9FUlJPUl9OT19IVFRQT1BFUkFUSU9OX0ZPUl9VUkwiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEdFVCA9ICJHRVQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQT1NUID0gIlBPU1QiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLQotICBwcml2YXRlIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBIVFRQVmFsaWRhdG9yKCkKLSAgewotCVJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEhUVFBfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgLy8gUG9ydCBIVFRQIGRlZmluaXRpb24KLSAgICAvLyBtYWtlIHN1cmUgZXZlcnkgcG9ydCBoYXMgb25seSBvbmUgYWRkcmVzcyBlbGVtZW50IGRlZmluZWQKLSAgICAvLyBpZiBpdCBpcyBhbiBhZGRyZXNzIGVsZW1lbnQsIHZhbGlkYXRlIGl0Ci0gICAgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gUG9ydEltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQQWRkcmVzc0ltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCwgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksCi0gICAgICAgICAgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQmluZGluZyBIVFRQIGRlZmluaXRpb24KLSAgICAvLyBBIEhUVFAgQmluZGluZyBtdXN0IGhhdmUgYSB2ZXJiIG9mIEdFVCBvciBQT1NUCi0gICAgZWxzZSBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IEhUVFBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVCaW5kaW5nKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwKLSAgICAgICAgICBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQmluZGluZyBPcGVyYXRpb24gSFRUUCBkZWZpbml0aW9uCi0gICAgLy8gQSBIVFRQIE9wZXJhdGlvbiBoYXMgYSBsb2NhdGlvbiB1cmkgZGVmaW5lZAotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ09wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQT3BlcmF0aW9uSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVPcGVyYXRpb24oZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQsCi0gICAgICAgICAgICBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwKLSAgICAgICAgICBlbGVtZW50KTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbnB1dEltcGwuY2xhc3MpCi0gICAgewotICAgICAgLy8gdmFsaWRhdGUgdGhlIEhUVFAgdXJsRW5jb2RlZCBhbmQgdXJsUmVwbGFjZW1lbnQKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybEVuY29kZWRJbXBsLmNsYXNzIHx8IGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQVXJsUmVwbGFjZW1lbnRJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUh0dHBVcmwoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0lOUFVUX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLAotICAgICAgICAgIGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGluIHRoaXMgY2FzZSB0aGVyZSBoYXMgYmVlbiBhIEhUVFAgZWxlbWVudCBkZWZpbmVkIHRoYXQgaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgcG9pbnQgaW4gdGhlIEhUVFAgbmFtZXNwYWNlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04sCi0gICAgICAgICAgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksCi0gICAgICAgIGVsZW1lbnQpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGF0IHRoZSBIVFRQIGFkZHJlc3MgaGFzIGEgdmFsdWUgc3BlY2lmaWVkIGZvciBpdCdzIHVyaSBhbmQgdGhhdCB0aGVyZSBpcyBhIEhUVFAgQmluZGluZyBkZWZpbmVkCi0gICAqIGZvciB0aGUgQmluZGluZyBzcGVjaWZpZWQgaW4gdGhlIHBvcnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRUUCBhZGRyZXNzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIEhUVFAgYWRkcmVzcyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUFkZHJlc3MoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBIVFRQQWRkcmVzc0ltcGwgaGEgPSAoSFRUUEFkZHJlc3NJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdXJpID0gaGEuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICBpZiAodXJpID09IG51bGwgfHwgdXJpLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyksIGhhKTsKLSAgICB9Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClwYXJlbnRzLmdldCgwKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCi0gICAgaWYgKCFoYXNIdHRwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICBfRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX0FERFJFU1MsCi0gICAgICAgICAgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSwKLSAgICAgICAgICBRVU9URSArIHBvcnQuZ2V0TmFtZSgpICsgUVVPVEUpLAotICAgICAgICBoYSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGUgSFRUUCBCaW5kaW5nIGRlZmluZWQgaXMgdmFsaWQuIEEgSFRUUCBCaW5kaW5nIG11c3QgaGF2ZSBhIHZlcmIgb2YgR0VUIG9yIFBPU1QuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRUUCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIEhUVFAgYmluZGluZyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUJpbmRpbmcoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBIVFRQQmluZGluZ0ltcGwgaGIgPSAoSFRUUEJpbmRpbmdJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdmVyYiA9IGhiLmdldFZlcmIoKTsKLQotICAgIGlmICh2ZXJiICE9IG51bGwgJiYgIXZlcmIuZXF1YWxzKEdFVCkgJiYgIXZlcmIuZXF1YWxzKFBPU1QpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19WRVJCLCBRVU9URSArIHZlcmIgKyBRVU9URSksIGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbiBvcGVyYXRpb24gbXVzdCBoYXZlIGEgbG9jYXRpb24gZGVmaW5lZC4gQSBIVFRQIEJpbmRpbmcgbXVzdCBiZSBzcGVjaWZpZWQgdG8gdXNlIGFuIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBIVFRQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBIVFRQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZU9wZXJhdGlvbihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIEhUVFBPcGVyYXRpb24gaG8gPSAoSFRUUE9wZXJhdGlvbillbGVtZW50OwotCi0gICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gaG8uZ2V0TG9jYXRpb25VUkkoKTsKLQotICAgIGlmIChsb2NhdGlvblVSSSAhPSBudWxsICYmIGxvY2F0aW9uVVJJLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0xPQ0FUSU9OX1VSSSksIGVsZW1lbnQpOwotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDEpOwotICAgIGlmICghaGFzSHR0cEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04sIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLAotICAgICAgICBobyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBIVFRQIHVybFJlcGxhY2VtZW50IG9yIHVybEVuY29kZWQuIEVuc3VyZSB0aGUgSFRUUCBvcGVyYXRpb24gaGFzIGJlZW4gZGVmaW5lZC4gCi0gICAqIEVuc3VyZSB0aGF0IGVpdGhlciBlbGVtZW50IGlzIHRoZSBvbmx5IGVsZW1lbnQgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIEhUVFAgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgVGhlIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgSFRUUCBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUh0dHBVcmwoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXBhcmVudHMuZ2V0KDEpOwotCi0gICAgU3RyaW5nIGVsZW1lbnROYW1lOwotICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybEVuY29kZWRJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGVsZW1lbnROYW1lID0gInVybEVuY29kZWQiOwotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybFJlcGxhY2VtZW50SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9ICJ1cmxSZXBsYWNlbWVudCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICB9Ci0KLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSAoQmluZGluZ0lucHV0KXBhcmVudHMuZ2V0KDApOwotICAgIGlmIChpbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCkgIT0gMSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQsIGVsZW1lbnROYW1lKSwgZWxlbWVudCk7Ci0gICAgfQotCi0gICAgaWYgKCFoYXNIdHRwT3BlcmF0aW9uKG9wZXJhdGlvbikpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX0hUVFBPUEVSQVRJT05fRk9SX1VSTCwgUVVPVEUgKyBvcGVyYXRpb24uZ2V0TmFtZSgpICsgUVVPVEUsIGVsZW1lbnROYW1lKSwKLSAgICAgICAgZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdpdmVuIGEgQmluZGluZ09wZXJhdGlvbiB0ZWxscyB3aGV0aGVyIGl0IGhhcyBhIEhUVFAgb3BlcmF0aW9uIGRlZmluZWQgZm9yIGl0LgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmcgVGhlIEhUVFAgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGFuIEhUVFAgb3BlcmF0aW9uIGRlZmluZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc0h0dHBPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IG9wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGlmIChleHRlbGVtcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpZXh0ZWxlbXMgPSBleHRlbGVtcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaWV4dGVsZW1zLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpZXh0ZWxlbXMubmV4dCgpLmdldENsYXNzKCkgPT0gSFRUUE9wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHaXZlbiBhIGJpbmRpbmcgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBhIEhUVFAgYmluZGluZyBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmcgVGhlIGJpbmRpbmcgdG8gY2hlY2suCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGVyZSBpcyBhbiBIVFRQIGJpbmRpbmcgZGVmaW5lZC4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc0h0dHBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZXh0ZWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgaWV4dGVsZW1zID0gZXh0ZWxlbXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGlleHRlbGVtcy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaWV4dGVsZW1zLm5leHQoKS5nZXRDbGFzcygpID09IEhUVFBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL21pbWUvTUlNRVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9taW1lL01JTUVWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEyYTNiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL21pbWUvTUlNRVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvOwotCi0vKioKLSAqIFRoZSBNSU1FIHZhbGlkYXRvciBwbHVncyBpbnRvIHRoZSBXU0RMIHZhbGlkYXRvciB0byBwcm92aWRlCi0gKiB2YWxpZGF0aW9uIGZvciBhbGwgZWxlbWVudHMgaW4gYSBXU0RMIGRvY3VtZW50IHdpdGhpbiB0aGUgTUlNRSBuYW1lc3BhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgTUlNRV9SRVNPVVJDRV9CVU5ETEVfTkFNRSA9ICJ2YWxpZGF0ZXdzZGxtaW1lIjsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLQotICBwdWJsaWMgTUlNRVZhbGlkYXRvcigpCi0gIHsKLQlSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShNSU1FX1JFU09VUkNFX0JVTkRMRV9OQU1FLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLQltZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9zb2FwL1NPQVBWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvc29hcC9TT0FQVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Zjg1NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9zb2FwL1NPQVBWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuc29hcDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdGYXVsdEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nSW5wdXRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuQmluZGluZ091dHB1dEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLlBvcnRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3NJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHlJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0SW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVySW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb25JbXBsOwotCi0vKioKLSAqIFRoZSBTT0FQIHZhbGlkYXRvciBwbHVncyBpbnRvIHRoZSBXU0RMIHZhbGlkYXRvciB0byBwcm92aWRlCi0gKiB2YWxpZGF0aW9uIGZvciBhbGwgZWxlbWVudHMgaW4gYSBXU0RMIGRvY3VtZW50IHdpdGhpbiB0aGUgU09BUCBuYW1lc3BhY2UuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU09BUFZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFNPQVBfUkVTT1VSQ0VfQlVORExFX05BTUUgPSAidmFsaWRhdGV3c2Rsc29hcCI7Ci0JICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CSU5ESU5HX09QRVJBVElPTl9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9IRUFERVJfQk9EWV9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0hFQURFUl9CT0RZX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9GQVVMVF9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0ZBVUxUX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9TT0FQX0VMRU1FTlRfRk9SX0xPQ0FUSU9OID0gIl9FUlJPUl9JTlZBTElEX1NPQVBfRUxFTUVOVF9GT1JfTE9DQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MgPSAiX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9BRERSRVNTID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQUREUkVTUyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfU1RZTEUgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVVJJID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVVJJIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OX1NUWUxFID0gIl9FUlJPUl9JTlZBTElEX09QRVJBVElPTl9TVFlMRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfT1BFUkFUSU9OID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfT1BFUkFUSU9OIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQk9EWV9FTkNPRElOR19TVFlMRSA9ICJfRVJST1JfSU5WQUxJRF9CT0RZX0VOQ09ESU5HX1NUWUxFIjsKLSAgLy9wcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CT0RZX05BTUVTUEFDRV9GT1JfRU5DT0RFRCA9ICJfRVJST1JfSU5WQUxJRF9CT0RZX05BTUVTUEFDRV9GT1JfRU5DT0RFRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JPRFlfVVNFID0gIl9FUlJPUl9JTlZBTElEX0JPRFlfVVNFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX05PVF9UWVBFID0gIl9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9OT1RfVFlQRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9VTkRFRklORUQgPSAiX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSA9ICJfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0JPRFkiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX01FU1NBR0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfTUVTU0FHRV9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX1BBUlRfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX1VTRV9VTkRFRklORUQgPSAiX0VSUk9SX0hFQURFUl9VU0VfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUl9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUl9OQU1FU1BBQ0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfTkFNRVNQQUNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfSEVBREVSID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfSEVBREVSIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUkZBVUxUX01FU1NBR0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJGQVVMVF9NRVNTQUdFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJGQVVMVF9QQVJUX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfUEFSVF9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSRkFVTFRfVVNFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfVVNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJGQVVMVF9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUUgPSAiX0VSUk9SX0lOVkFMSURfRkFVTFRfTkFNRSI7Ci0gIC8vcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfRkFVTFRfRU5DT0RJTkdfU1RZTEUgPSAiX0VSUk9SX0lOVkFMSURfRkFVTFRfRU5DT0RJTkdfU1RZTEUiOwotICAvL3ByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUVTUEFDRV9GT1JfRU5DT0RFRCA9ICJfRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FU1BBQ0VfRk9SX0VOQ09ERUQiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU5DT0RFRCA9ICJlbmNvZGVkIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTElURVJBTCA9ICJsaXRlcmFsIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlBDID0gInJwYyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERPQ1VNRU5UID0gImRvY3VtZW50IjsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLQotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotIAotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBTT0FQVmFsaWRhdG9yKCkKLSAgewotCVJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFNPQVBfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgLy8gUG9ydCBTT0FQIGRlZmluaXRpb24KLSAgICAvLyBtYWtlIHN1cmUgZXZlcnkgcG9ydCBoYXMgb25seSBvbmUgYWRkcmVzcyBlbGVtZW50IGRlZmluZWQKLSAgICAvLyBpZiBpdCBpcyBhbiBhZGRyZXNzIGVsZW1lbnQsIHZhbGlkYXRlIGl0Ci0gICAgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gUG9ydEltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBTT0FQQWRkcmVzc0ltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCwgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEJpbmRpbmcgU09BUCBkZWZpbml0aW9uCi0gICAgLy8gQSBTT0FQIEJpbmRpbmcgbXVzdCBoYXZlIGEgc3R5bGUgb3IgcnBjIG9yIGRvY3VtZW50IG9yIG5vIHN0eWxlIGRlZmluZWQgLSBkZWZhdWx0cyB0byBkb2N1bWVudAotICAgIC8vIE11c3QgaGF2ZSBhIHRyYW5zcG9ydCB1cmkgZGVmaW5lZCAtIGNoZWNrIGlmIHRoZSB1cmkgaXMgZW1wdHkKLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gU09BUEJpbmRpbmdJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUJpbmRpbmcoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQmluZGluZyBPcGVyYXRpb24gU09BUCBkZWZpbml0aW9uCi0gICAgLy8gQSBTT0FQIE9wZXJhdGlvbiBtYXkgaGF2ZSBhIHN0eWxlIGRlZmluZWQgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGRvY3VtZW50IG9yIHJwYwotICAgIC8vIGFuZCBtYXkgaGF2ZSBhIHNvYXBBY3Rpb24gdXJpIGRlZmluZWQKLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdPcGVyYXRpb25JbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gU09BUE9wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlT3BlcmF0aW9uKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQsCi0gICAgICAgICAgICBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbnB1dEltcGwuY2xhc3MgfHwgcGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nT3V0cHV0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICAvLyB2YWxpZGF0ZSB0aGUgU09BUCBib2R5Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IFNPQVBCb2R5SW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVCb2R5KGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgLy8gdmFsaWF0ZSB0aGUgU09BUCBoZWFkZXIKLSAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBTT0FQSGVhZGVySW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVIZWFkZXIoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9IRUFERVJfQk9EWV9FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ0ZhdWx0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IFNPQVBGYXVsdEltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlRmF1bHQoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9GQVVMVF9FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGluIHRoaXMgY2FzZSB0aGVyZSBoYXMgYmVlbiBhIFNPQVAgZWxlbWVudCBkZWZpbmVkIHRoYXQgaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgcG9pbnQgaW4gdGhlIFNPQVAgbmFtZXNwYWNlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgIF9FUlJPUl9JTlZBTElEX1NPQVBfRUxFTUVOVF9GT1JfTE9DQVRJT04sCi0gICAgICAgICAgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIGVsZW1lbnQpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGF0IHRoZSBTT0FQIGFkZHJlc3MgaGFzIGEgdmFsdWUgc3BlY2lmaWVkIGZvciBpdCdzIHVyaSBhbmQgdGhhdCB0aGUgYmluZGluZyBoYXMgYSBTT0FQCi0gICAqIEJpbmRpbmcgZGVmaW5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBTT0FQIGFkZHJlc3MgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgYWRkcmVzcyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUFkZHJlc3MoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQQWRkcmVzc0ltcGwgc2EgPSAoU09BUEFkZHJlc3NJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdXJpID0gc2EuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICBpZiAodXJpID09IG51bGwgfHwgdXJpLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyksIHNhKTsKLSAgICB9Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClwYXJlbnRzLmdldCgwKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCi0gICAgaWYgKCFoYXNTb2FwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICBfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0FERFJFU1MsCi0gICAgICAgICAgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSwKLSAgICAgICAgICBRVU9URSArIHBvcnQuZ2V0TmFtZSgpICsgUVVPVEUpLCBzYSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGUgU09BUCBCaW5kaW5nIGRlZmluZWQgaXMgdmFsaWQuIEEgU09BUCBCaW5kaW5nIG11c3QgaGF2ZSBhIHN0eWxlIG9mIHJwYyBvciBkb2N1bWVudAotICAgKiBvciBubyBzdHlsZSBkZWZpbmVkIChkZWZhdWx0cyB0byBkb2N1bWVudC4pICBBIHZhbGlkIChub24gZW1wdHkpIFVSSSBtdXN0IGFsc28gYmUgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgYmluZGluZyBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBBIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgU09BUCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQmluZGluZyhPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBCaW5kaW5nSW1wbCBzYiA9IChTT0FQQmluZGluZ0ltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyBzdHlsZSA9IHNiLmdldFN0eWxlKCk7Ci0gICAgU3RyaW5nIHVyaSA9IHNiLmdldFRyYW5zcG9ydFVSSSgpOwotCi0gICAgaWYgKHN0eWxlICE9IG51bGwgJiYgIXN0eWxlLmVxdWFsc0lnbm9yZUNhc2UoUlBDKSAmJiAhc3R5bGUuZXF1YWxzSWdub3JlQ2FzZShET0NVTUVOVCkpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSwgUVVPVEUgKyBzYi5nZXRTdHlsZSgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICB9Ci0gICAgaWYgKHVyaS5lcXVhbHNJZ25vcmVDYXNlKEVNUFRZX1NUUklORykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1VSSSksIGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbiBvcGVyYXRpb24gbWF5IGhhdmUgYSBzdHlsZSBkZWZpbmVkLiBJZiBpdCBpcyBkZWZpbmVkIGl0IG11c3QgYmUgcnBjIG9yIGRvY3VtZW50LiBJdCBtYXkgYWxzbyBoYXZlIGEKLSAgICogdXJpIGRlZmluZWQgd2hpY2ggbXVzdCBiZSBub24gZW1wdHkuICBJdCBtYXkgaGF2ZSBhIHNvYXBBY3Rpb24gZGVmaW5lZCBhcyB3ZWxsLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZU9wZXJhdGlvbihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBPcGVyYXRpb24gc28gPSAoU09BUE9wZXJhdGlvbillbGVtZW50OwotCi0gICAgU3RyaW5nIHNvYXBTdHlsZSA9IHNvLmdldFN0eWxlKCk7Ci0KLSAgICBpZiAoc29hcFN0eWxlICE9IG51bGwgJiYgIXNvYXBTdHlsZS5lcXVhbHNJZ25vcmVDYXNlKFJQQykgJiYgIXNvYXBTdHlsZS5lcXVhbHNJZ25vcmVDYXNlKERPQ1VNRU5UKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX09QRVJBVElPTl9TVFlMRSksIGVsZW1lbnQpOwotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDEpOwotICAgIGlmICghaGFzU29hcEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9PUEVSQVRJT04sIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzbyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBTT0FQIGJvZHkuIElmIGVuY29kZWQgYSBib2R5IG11c3QgaGF2ZSBhbiBlbmNvZGluZ1N0eWxlLiBBbHNvLAotICAgKiBpZiBzcGVjaWZpZWQsIGFsbCBvZiB0aGUgcGFydHMgbGlzdGVkIG11c3QgYmUgZGVmaW5lZCBwYXJ0cyBhbmQgaW4gdGhlIGVuY29kaW5nIHVzZSBjYXNlLCB0aGUgcGFydHMKLSAgICogbXVzdCBoYXZlIHR5cGVzIGRlZmluZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBib2R5IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGJvZHkgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIHZhbGlkYXRpb24gaW5mbyBmb3IgdGhpcyB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVCb2R5KE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgU09BUEJvZHlJbXBsIHNiID0gKFNPQVBCb2R5SW1wbCllbGVtZW50OwotCi0gICAgU3RyaW5nIHVzZSA9IHNiLmdldFVzZSgpOwotCi0gICAgLy8gaWYgdGhlIHVzZSA9IGVuY29kZWQgdGhlbiB0aGVyZSBtdXN0IGJlIGVuY29kaW5nU3R5bGVzLgotICAgIGlmICh1c2UgIT0gbnVsbCAmJiB1c2UuZXF1YWxzSWdub3JlQ2FzZShFTkNPREVEKSkKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nU3R5bGVzID0gc2IuZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGlmIChlbmNvZGluZ1N0eWxlcyA9PSBudWxsIHx8IGVuY29kaW5nU3R5bGVzLnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfRU5DT0RJTkdfU1RZTEUpLCBzYik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfVVNFLCBRVU9URSArIHVzZSArIFFVT1RFKSwgc2IpOwotICAgIH0KLQotICAgIC8vQ2hlY2sgdGhhdCB0aGUgcGFydHMgYXJlIHZhbGlkCi0gICAgLy8gcGFydHMgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBtZXNzYWdlIHNwZWNpZmllZCBmb3IgdGhlIG9wZXJhdGlvbgotICAgIExpc3QgcGFydHMgPSBzYi5nZXRQYXJ0cygpOwotCi0gICAgaWYgKHBhcnRzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgcGFydHNJdGVyYXRvciA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAocGFydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJ0ID0gKFN0cmluZylwYXJ0c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBibyA9IChCaW5kaW5nT3BlcmF0aW9uKXBhcmVudHMuZ2V0KDEpOwotICAgICAgICBPcGVyYXRpb24gbyA9IGJvLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAgIGlmIChvICE9IG51bGwgJiYgIW8uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBpbnB1dCBvciBvdXRwdXQgaWYgaXQgZXhpc3RzCi0gICAgICAgICAgTWVzc2FnZSBtZXNzID0gbnVsbDsKLSAgICAgICAgICBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nSW5wdXRJbXBsLmNsYXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElucHV0IGlucHV0ID0gby5nZXRJbnB1dCgpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVzcyA9IGlucHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nT3V0cHV0SW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPdXRwdXQgb3V0cHV0ID0gby5nZXRPdXRwdXQoKTsKLQotICAgICAgICAgICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzID0gb3V0cHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAobWVzcyAhPSBudWxsICYmICFtZXNzLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwID0gbWVzcy5nZXRQYXJ0KHBhcnQpOwotCi0gICAgICAgICAgICBpZiAocCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBpZiB0aGUgdXNlIGlzIGVuY29kZWQgdGhlIHBhcnRzIG11c3QgYWxsIGhhdmUgYSB0eXBlIGRlZmluZWQKLSAgICAgICAgICAgICAgaWYgKHVzZSAhPSBudWxsICYmIHVzZS5lcXVhbHNJZ25vcmVDYXNlKEVOQ09ERUQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHAuZ2V0VHlwZU5hbWUoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIHBhcnQgZXJyb3IgLSBwYXJ0IG5lZWRzIHRvIGJlIHR5cGUgYW5kIGlzbid0CQotICAgICAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX05PVF9UWVBFLCBRVU9URSArIHBhcnQgKyBRVU9URSksIHNiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9wYXJ0IGVycm9yIC0gcGFydCBpc24ndCBkZWZpbmVkCQotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9VTkRFRklORUQsIFFVT1RFICsgcGFydCArIFFVT1RFKSwgc2IpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9wYXJ0IGVycm9yIC0gaW5wdXQgaXNuJ3QgZGVmaW5lZAotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCwgUVVPVEUgKyBwYXJ0ICsgUVVPVEUpLCBzYik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIHBhcnRzIGVycm9yIC0gb3BlcmF0aW9uIGlzbid0IGRlZmluZWQKLSAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCwgUVVPVEUgKyBwYXJ0ICsgUVVPVEUpLCBzYik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylwYXJlbnRzLmdldCgyKTsKLSAgICBpZiAoIWhhc1NvYXBCaW5kaW5nKGJpbmRpbmcpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSwgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNiKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQSBTT0FQIGhlYWRlciBtdXN0IGhhdmUgYSBtZXNzYWdlLCBwYXJ0IGFuZCB1c2UgZGVmaW5lZC4gSWYgdGhlIHVzZSBpcyBlbmNvZGVkLCBtdXN0Ci0gICAqIGFsc28gaGF2ZSBhIG5vbi1lbXB0eSBlbmNvZGluZ1N0eWxlIGFuZCBuYW1lc3BhY2UgZGVmaW5lZC4KLSAgICogQSBTT0FQIGhlYWRlciBtYXkgaGF2ZSBoZWFkZXJmYXVsdHMgZGVmaW5lZCBhcyB3ZWxsLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgaGVhZGVyIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGhlYWRlciBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUhlYWRlcihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBIZWFkZXJJbXBsIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlckltcGwpZWxlbWVudDsKLQotICAgIFFOYW1lIG1lc3NhZ2VRTmFtZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9ICgoRGVmaW5pdGlvbilwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpKS5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBtZXNzYWdlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUl9NRVNTQUdFX1VOREVGSU5FRCwgUVVPVEUgKyBtZXNzYWdlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNvYXBIZWFkZXIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHBhcnRuYW1lID0gc29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydG5hbWUpOwotICAgICAgaWYgKHBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gcGFydCB1bmRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQsCi0gICAgICAgICAgICBRVU9URSArIHBhcnRuYW1lICsgUVVPVEUsCi0gICAgICAgICAgICBRVU9URSArIG1lc3NhZ2VRTmFtZS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgc29hcEhlYWRlcik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIHVzZSA9IHNvYXBIZWFkZXIuZ2V0VXNlKCk7Ci0gICAgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSAmJiAhdXNlLmVxdWFsc0lnbm9yZUNhc2UoRU5DT0RFRCkpCi0gICAgewotICAgICAgLy8gdXNlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUl9VU0VfVU5ERUZJTkVELCBRVU9URSArIHVzZSArIFFVT1RFKSwgc29hcEhlYWRlcik7Ci0gICAgfQotCi0gICAgaWYgKHVzZS5lcXVhbHNJZ25vcmVDYXNlKEVOQ09ERUQpKQotICAgIHsKLSAgICAgIExpc3QgZW5jb2RpbmdTdHlsZXMgPSBzb2FwSGVhZGVyLmdldEVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBpZiAoZW5jb2RpbmdTdHlsZXMgPT0gbnVsbCB8fCBlbmNvZGluZ1N0eWxlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIGVuY29kaW5nU3R5bGUgZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9IRUFERVJfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQpLCBzb2FwSGVhZGVyKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHNvYXBIZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gbmFtZXNwYWNlIGRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSX05BTUVTUEFDRV9VTkRFRklORUQpLCBzb2FwSGVhZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBMaXN0IGhlYWRlckZhdWx0cyA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgIGlmIChoZWFkZXJGYXVsdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpaGVhZGVyRmF1bHRzID0gaGVhZGVyRmF1bHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaWhlYWRlckZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlSGVhZGVyRmF1bHQoaWhlYWRlckZhdWx0cy5uZXh0KCksIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDIpOwotICAgIGlmICghaGFzU29hcEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9IRUFERVIsIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzb2FwSGVhZGVyKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBIFNPQVAgaGVhZGVyZmF1bHQgbXVzdCBoYXZlIGEgbWVzc2FnZSwgcGFydCBhbmQgdXNlIGRlZmluZWQuIElmIHRoZSB1c2UgaXMgZW5jb2RlZCwgbXVzdAotICAgKiBhbHNvIGhhdmUgYSBub24tZW1wdHkgZW5jb2RpbmdTdHlsZSBhbmQgbmFtZXNwYWNlIGRlZmluZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBoZWFkZXIgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlSGVhZGVyRmF1bHQoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQSGVhZGVyRmF1bHRJbXBsIHNvYXBIZWFkZXJGYXVsdCA9IChTT0FQSGVhZGVyRmF1bHRJbXBsKWVsZW1lbnQ7Ci0KLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0TWVzc2FnZSgpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9ICgoRGVmaW5pdGlvbilwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpKS5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBtZXNzYWdlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUkZBVUxUX01FU1NBR0VfVU5ERUZJTkVELCBRVU9URSArIG1lc3NhZ2VRTmFtZS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgc29hcEhlYWRlckZhdWx0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0bmFtZSA9IHNvYXBIZWFkZXJGYXVsdC5nZXRQYXJ0KCk7Ci0gICAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydG5hbWUpOwotICAgICAgaWYgKHBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gcGFydCB1bmRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9IRUFERVJGQVVMVF9QQVJUX1VOREVGSU5FRCwKLSAgICAgICAgICAgIFFVT1RFICsgcGFydG5hbWUgKyBRVU9URSwKLSAgICAgICAgICAgIFFVT1RFICsgbWVzc2FnZVFOYW1lLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyB1c2UgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0VXNlKCk7Ci0gICAgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSAmJiAhdXNlLmVxdWFsc0lnbm9yZUNhc2UoRU5DT0RFRCkpCi0gICAgewotICAgICAgLy8gdXNlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUkZBVUxUX1VTRV9VTkRFRklORUQsIFFVT1RFICsgdXNlICsgUVVPVEUpLCBzb2FwSGVhZGVyRmF1bHQpOwotICAgIH0KLQotICAgIGlmICh1c2UuZXF1YWxzSWdub3JlQ2FzZShFTkNPREVEKSkKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nU3R5bGVzID0gc29hcEhlYWRlckZhdWx0LmdldEVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBpZiAoZW5jb2RpbmdTdHlsZXMgPT0gbnVsbCB8fCBlbmNvZGluZ1N0eWxlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIGVuY29kaW5nU3R5bGUgZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9IRUFERVJGQVVMVF9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCksIHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICB9Ci0KLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gbmFtZXNwYWNlIGRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCksIHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogVmFsaWRhdGUgdGhlIFNPQVAgZmF1bHQuIEEgU09BUCBmYXVsdCBtdXN0IGhhdmUgYSBuYW1lIGRlZmluZWQgdGhhdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBuYW1lCi0gICogc3BlY2lmaWVkIGluIHRoZSBwb3J0VHlwZS4gIElmIGVuY29kZWQgYSBmYXVsdCBtdXN0IGhhdmUgYW4gZW5jb2RpbmdTdHlsZSBhbmQgYSBuYW1lc3BhY2VVUkkuIAotICAqIAotICAqIEBwYXJhbSBlbGVtZW50IFRoZSBTT0FQIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlRmF1bHQoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQRmF1bHRJbXBsIGZhdWx0ID0gKFNPQVBGYXVsdEltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyBuYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotCi0gICAgU3RyaW5nIHBhcmVudE5hbWUgPSAoKEJpbmRpbmdGYXVsdClwYXJlbnRzLmdldCgwKSkuZ2V0TmFtZSgpOwotCi0gICAgaWYgKCFuYW1lLmVxdWFscyhwYXJlbnROYW1lKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FLCBRVU9URSArIG5hbWUgKyBRVU9URSwgUVVPVEUgKyBwYXJlbnROYW1lICsgUVVPVEUpLCBmYXVsdCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGhhc1NvYXBCaW5kaW5nLiAtIGhlbHBlciBNZXRob2QKLSAgICogR2l2ZW4gYSBiaW5kaW5nIHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgYSBTT0FQIGJpbmRpbmcgZGVmaW5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gdGhlIFNPQVAgYmluZGluZyB0byBjaGVjawotICAgKiBAcmV0dXJuIHRydWUgaWYgYSBiaW5kaW5nIGhhcyBhIFNPQVAgYmluZGluZyBkZWZpbmVkLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc1NvYXBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZXh0ZWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgaWV4dGVsZW1zID0gZXh0ZWxlbXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGlleHRlbGVtcy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaWV4dGVsZW1zLm5leHQoKS5nZXRDbGFzcygpID09IFNPQVBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9ET01FcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvRE9NRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5YjExMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9ET01FcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHNpZ25pZnkgZXJyb3IgbGV2ZWxzIHRoYXQgYXJlIHRoZSByZXN1bHQgb2YKLSAqIFhNTFBhcnNlRXhjZXB0aW9uLiBUaGV5IGNvbmNlcHR1YWxseSBjb3JyZXNwb25kIHRvIG9yZy53M2MuZG9tLkRPTUVycm9yIGJ1dAotICogd2UgdXNlIG91ciBvd24gaW50ZXJmYWNlLCBzaW5jZSBET01FcnJvciBpcyBub3QgaW4gSmF2YSAxLjQsIGFuZCBpdHMKLSAqIHBhY2thZ2UgY2hhbmdlcyBmcm9tIFhlcmNlcyAyLjYuMiBhbmQgWGVyY2VzIDIuNy4wLgotICovCi0KLXB1YmxpYyBpbnRlcmZhY2UgRE9NRXJyb3IgewotCWludCBTRVZFUklUWV9XQVJOSU5HID0gMTsKLQlpbnQgU0VWRVJJVFlfRVJST1IgPSAyOwotCWludCBTRVZFUklUWV9GQVRBTF9FUlJPUiA9IDM7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9GaWxlRW50aXR5UmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjUzOTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkxhenlVUkxJbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBFbnRpdHkgcmVzb2x2ZSB0byByZXNvbHZlIGZpbGUgZW50aXRpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlRW50aXR5UmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2UuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlLmdldE5hbWVzcGFjZSgpOwotICAgIFN0cmluZyB1cmwgPSBudWxsOwotICAgIGlmKHN5c3RlbUlkICE9IG51bGwpCi0gICAgewotICAgICAgdXJsID0gc3lzdGVtSWQ7Ci0gICAgfQotICAgIGVsc2UgaWYocHVibGljSWQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSBwdWJsaWNJZDsKLSAgICB9Ci0gICAgZWxzZSBpZihuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSBuYW1lc3BhY2U7Ci0gICAgfQotICAgIGlmKHVybCAhPSBudWxsKQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gbmV3IExhenlVUkxJbnB1dFN0cmVhbSh1cmwpOwotICAgICAgcmV0dXJuIG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgcmVzb3VyY2UuZ2V0RXhwYW5kZWRTeXN0ZW1JZCgpLCByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCksIGlzLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIxNWU0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogR2VuZXJhdGUgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEgZm9yIGFuIGlubGluZSBzY2hlbWEuIFdpbGwgYWRkIGltcG9ydHMgZm9yIHVucmVzb2x2ZWQKLSAqIG5hbWVzcGFjZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IKLXsKLSAgLyoqCi0gICAqIEdlbmVyYXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgZm9yIGlubGluZSBzY2hlbWEgcmVmZXJlbmNlcyBpcyAKLSAgICogaW52YWxpZCBhY2NvcmRpbmcgdG8gdGhlIFdTREwgc3BlYy4gQXMgc29tZSBvbGRlciBjbGllbnRzIChXU1ZUKSBtYXkKLSAgICogZGVwZW5kIG9uIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGUgb3B0aW9uIHRvIGFsbG93IHRoaXMgaXMgbGVmdAotICAgKiBpbi4gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBwb3N0IDEuNS4KLSAgICogVE9ETzogUmV2aWV3IHJlbW92aW5nIHRoaXMgcHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBHRU5FUkFURV9JTkxJTkVfSU1QT1JUUyA9IGZhbHNlOwotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTkNPRElOR19VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BSRUZJWCA9ICJmaWxlOi8vLyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUTkFNRVNQQUNFID0gInRhcmdldE5hbWVzcGFjZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJTVBPUlQgPSAiaW1wb3J0IjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5DTFVERSA9ICJpbmNsdWRlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BID0gInNjaGVtYSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQUxPQ0FUSU9OID0gInNjaGVtYUxvY2F0aW9uIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRSA9ICJ0eXBlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBpZ25vcmVOYW1lc3BhY2VzID0KLSAgICB7IENvbnN0YW50cy5OU19VUklfWFNEXzE5OTksIENvbnN0YW50cy5OU19VUklfWFNEXzIwMDAsIENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEgfTsKLQotICBwcm90ZWN0ZWQgc3RhdGljIElubGluZVNjaGVtYUdlbmVyYXRvciBpbnN0YW5jZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIElubGluZVNjaGVtYUdlbmVyYXRvcigpCi0gIHsKLQlTdHJpbmcgZ2VuSW5saW5lSW1wb3J0cyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3NkbC5yZXF1aXJlLmlubGluZS5pbXBvcnRzIik7Ci0JaWYoZ2VuSW5saW5lSW1wb3J0cyAhPSBudWxsICYmIGdlbklubGluZUltcG9ydHMuZXF1YWxzKCJmYWxzZSIpKQotCXsKLQkgIEdFTkVSQVRFX0lOTElORV9JTVBPUlRTID0gdHJ1ZTsKLQl9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YW5jZSBvZiB0aGUgSW5saW5lU2NoZW1hR2VuZXJhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEgZ2VuZXJhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2UgPSBuZXcgSW5saW5lU2NoZW1hR2VuZXJhdG9yKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYSBmcm9tIHRoZSBlbGVtZW50IHByb3ZpZGVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZWxlbWVudHMgQSBsaXN0IG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2NoZW1hIGluIG9yZGVyLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSBVUkkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gdmFsaWRJbXBvcnROU3MgQSBzZXQgb2YgbmFtZXNwYWNlcyBmb3Igd2hpY2ggaXQncyB2YWxpZCB0byBjcmVhdGUgaW1wb3J0IHN0YXRlbWVudHMuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVYU0RTdHJpbmcoRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzLCBTdHJpbmcgZmlsZWxvY2F0aW9uLCBTZXQgdmFsaWRJbXBvcnROU3MpCi0gIHsKLQkgIHJldHVybiBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nKGVsZW1lbnQsIGVsZW1lbnRzLCBmaWxlbG9jYXRpb24sIG5ldyBIYXNodGFibGUoKSwgdmFsaWRJbXBvcnROU3MpOwotICB9Ci0gIAotICAvKioKLSAgCSogQ3JlYXRlcyBhIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNjaGVtYSBtb2RlbCB3aXRoIHRoZSByb290IGVsZW1lbnQgb2YKLSAgCSogZXh0RWxlbS4gQ2FsbHMgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkgdG8gdGFrZSBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBTdHJpbmcKLSAgCSogYWZ0ZXIgaXQgb2J0YWlucyB0aGUgRWxlbWVudCBmcm9tIHRoZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuCi0gIAkqIAotICAJKiBAcGFyYW0gZWxlbWVudCBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gIAkqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gY29udGFpbiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgCSogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhlIHNjaGVtYSBpcyBsb2NhdGVkIGluLgotICAJKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHBhcmVudCBuYW1lc3BhY2VzIHRvIHVzZWQgdG8gcmVzb2x2ZSBwcmVmaXhlcy4KLSAgCSogQHBhcmFtIHZhbGlkSW1wb3J0TlNzIEEgc2V0IG9mIG5hbWVzcGFjZXMgZm9yIHdoaWNoIGl0J3MgdmFsaWQgdG8gY3JlYXRlIGltcG9ydCBzdGF0ZW1lbnRzLgotICAJKiBAcmV0dXJuIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzY2hlbWEgd2l0aCB0aGUgcm9vdCBlbGVtZW50ICdlbGVtZW50Jy4KLSAgCSovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZyhFbGVtZW50IGVsZW1lbnQsIExpc3QgZWxlbWVudHMsIFN0cmluZyBmaWxlbG9jYXRpb24sIEhhc2h0YWJsZSBwYXJlbnROU3MsIFNldCB2YWxpZEltcG9ydE5TcykKLSAgewotCVNldCBpbXBvcnROU3MgPSBuZXcgVHJlZVNldCgpOyAKLSAgICBpbXBvcnROU3MuYWRkQWxsKHZhbGlkSW1wb3J0TlNzKTsgCi0gICAgaW1wb3J0TlNzLmFkZChTT0FQX0VOQ09ESU5HX1VSSSk7IAotCi0gICAgSW5saW5lU2NoZW1hR2VuZXJhdG9yIHNjaGVtYUdlbmVyYXRvciA9IElubGluZVNjaGVtYUdlbmVyYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIEhhc2h0YWJsZSBuc1Jlc29sdmVyID0gc2NoZW1hR2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIoZWxlbWVudCk7Ci0gICAgTGlzdCByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5nZXROYW1lc3BhY2VQcmVmaXhlcyhlbGVtZW50KTsKLSAgICBIYXNodGFibGUgcmVxTlNEZWNsID0gc2NoZW1hR2VuZXJhdG9yLnJlc29sdmVOYW1lc3BhY2VzKHJlcW5zLCBuc1Jlc29sdmVyLCBwYXJlbnROU3MpOwotICAgIC8vSGFzaHRhYmxlIHJlcU5TRGVjbCA9IHNjaGVtYUdlbmVyYXRvci5nZXRSZXF1aXJlZE5TRGVjbGFyYXRpb25zKHJlcW5zLCBuc1Jlc29sdmVyLCBwYXJlbnROU3MpOwotICAgIGlmKEdFTkVSQVRFX0lOTElORV9JTVBPUlRTKQotICAgIHsKLSAgICAgIExpc3QgaW1wb3J0TlMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0SW1wb3J0TmFtZXNwYWNlcyhlbGVtZW50KTsKLSAgICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhyZXFucywgZWxlbWVudCk7Ci0JICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZXN0cmljdEltcG9ydHMocmVxbnMsIHZhbGlkSW1wb3J0TlNzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlcW5zLmNsZWFyKCk7Ci0gICAgfQotICAgIHJldHVybiBzY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoZWxlbWVudCwgZWxlbWVudHMsIHJlcW5zLCByZXFOU0RlY2wsIGZpbGVsb2NhdGlvbik7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgYnV0IG5vdCBpbXBvcnRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHRoZSBwYXJlbnQgbmFtZXNwYWNlcy4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzb2FwIGVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc29hcEVuY29kaW5nUmVxdWlyZWROb3RJbXBvcnRlZChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBmaWxlbG9jYXRpb24sIEhhc2h0YWJsZSBwYXJlbnROU3MpCi0gIHsKLSAgICBJbmxpbmVTY2hlbWFHZW5lcmF0b3Igc2NoZW1hR2VuZXJhdG9yID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmdldEluc3RhbmNlKCk7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihlbGVtZW50KTsKLSAgICBMaXN0IHJlcW5zID0gbnVsbDsKLQotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKGVsZW1lbnQpOwotICAgIHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL3NjaGVtYUdlbmVyYXRvci5yZXNvbHZlVW5kZWNsYXJlZE5hbWVzcGFjZXMocmVxbnMsIHBhcmVudE5Tcyk7Ci0gICAgTGlzdCBpbXBvcnROUyA9IHNjaGVtYUdlbmVyYXRvci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZW1vdmVMb2NhbE5hbWVzcGFjZXMocmVxbnMsIGVsZW1lbnQpOwotICAgIHJldHVybiBzY2hlbWFHZW5lcmF0b3IuY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChyZXFucyk7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIHVuZGVjbGFyZWQgbmFtZXNwYWNlcy4KLSAgICogCi0gICAqIEBwYXJhbSB1bnJlc29sdmVkTlNzIEEgbGlzdCBvZiB1bnJlc29sdmVkIG5hbWVzcGFjZXMuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBuYW1lc3BhY2UgcmVzb2x2ZXIgdG8gdXNlLgotICAgKiBAcmV0dXJuIEEgaGFzaHRhYmxlIG9mIHByZWZpeGVzIGFuZCBuYW1lc3BhY2VzLgotICAgKi8KLS8vICBwcm90ZWN0ZWQgSGFzaHRhYmxlIHJlc29sdmVVbmRlY2xhcmVkTmFtZXNwYWNlcyhMaXN0IHVucmVzb2x2ZWROU3MsIEhhc2h0YWJsZSBuc1Jlc29sdmVyKQotLy8gIHsKLS8vICAgIEhhc2h0YWJsZSBuYW1lc3BhY2VzID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gICAgaWYgKHVucmVzb2x2ZWROU3MgIT0gbnVsbCAmJiAhdW5yZXNvbHZlZE5Tcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotLy8gICAgewotLy8gICAgICBmb3IgKGludCBpID0gdW5yZXNvbHZlZE5Tcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKLS8vICAgICAgewotLy8gICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpdW5yZXNvbHZlZE5Tcy5nZXQoaSk7Ci0vLyAgICAgICAgaWYgKG5zLmVxdWFscygiIikpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgbnMgPSBYTUxOUzsKLS8vICAgICAgICB9Ci0vLyAgICAgICAgZWxzZQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIG5zID0gWE1MTlMgKyAiOiIgKyBuczsKLS8vICAgICAgICB9Ci0vLyAgICAgICAgaWYgKG5zUmVzb2x2ZXIuY29udGFpbnNLZXkobnMpKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIC8vbmFtZXNwYWNlcy5yZW1vdmUoaSk7Ci0vLyAgICAgICAgICAvL25hbWVzcGFjZXMuYWRkKGksIG5zUmVzb2x2ZXIuZ2V0KG5zKSk7Ci0vLyAgICAgICAgICBuYW1lc3BhY2VzLnB1dChucywgbnNSZXNvbHZlci5nZXQobnMpKTsKLS8vICAgICAgICAgIHVucmVzb2x2ZWROU3MucmVtb3ZlKGkpOwotLy8gICAgICAgICAgdW5yZXNvbHZlZE5Tcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLS8vICAgICAgICB9Ci0vLyAgICAgIH0KLS8vICAgIH0KLS8vICAgIHJldHVybiBuYW1lc3BhY2VzOwotLy8gIH0KLQotICAvKioKLSAgICogVGhpcyByZWN1cnNpdmUgbWV0aG9kIGNyZWF0ZXMgdGhlIHNjaGVtYSBTdHJpbmcgZnJvbSB0aGUgcm9vdCBFbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZWxlbWVudHMgQSBsaXN0IHRvIGJlIGNyZWF0ZWQgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzY2hlbWEgaW4gb3JkZXIuCi0gICAqIEBwYXJhbSByZXF1aXJlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIHJlcXVpcmVkIG5hbWVzcGFjZXMuCi0gICAqIEBwYXJhbSByZXFOU0RlY2wgQSBoYXNodGFibGUgb2YgcmVxdWlyZWQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzY2hlbWEuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KAotICAgIEVsZW1lbnQgZWxlbSwKLSAgICBMaXN0IGVsZW1lbnRzLAotICAgIExpc3QgcmVxdWlyZWROYW1lc3BhY2VzLAotICAgIEhhc2h0YWJsZSByZXFOU0RlY2wsCi0gICAgU3RyaW5nIGZpbGVsb2NhdGlvbikKLSAgewotICAgIGlmIChlbGVtID09IG51bGwpCi0gICAgICByZXR1cm4gIiI7IC8vIGp1c3QgaW4gY2FzZQotCi0gICAgZWxlbWVudHMuYWRkKGVsZW0pOwotCi0gICAgU3RyaW5nQnVmZmVyIHhzZFN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBlbGVtLmdldFRhZ05hbWUoKTsKLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI8IikuYXBwZW5kKGVsZW1lbnROYW1lKTsKLQotICAgIFN0cmluZyBuYW1lUHJlZml4ID0gIiI7IC8vIHRoZSB4bWxucyBwcmVmaXggdXNlZCBmb3IgdGhlIGVsZW1lbnRzCi0gICAgLy8gR2V0IGFsbCBvZiB0aGUgYXR0cmlidXRlcyBmb3IgdGhpcyBlbGVtZW50IGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgeHNkU3RyaW5nCi0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKG4uZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKTsKLSAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgIGlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFNDSEVNQUxPQ0FUSU9OKSAmJiBmaWxlbG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbGF0aXZlUGF0aCA9IG4uZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQocmVsYXRpdmVQYXRoKS5hcHBlbmQoIlwiIik7ICAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAvLyBnZXQgdGhlIG5hbWUgcHJlZml4IGZvciB0aGlzIHNjaGVtYSB0byB1c2UgaW4gZ2VuZXJhdGluZyBpbXBvcnQgc3RhdGVtZW50cwotICAgICAgICBpZiAobm9kZU5hbWUuaW5kZXhPZihYTUxOUykgIT0gLTEpCi0gICAgICAgIHsKLQotICAgICAgICAgIGlmIChub2RlVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShlbGVtLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lUHJlZml4ID0gbm9kZU5hbWU7Ci0gICAgICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmFtZVByZWZpeCA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNikgKyAiOiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFJlcGxhY2Ugb2xkIHNjaGVtYSBuYW1lc3BhY2VzIHdpdGggdGhlIG5ldyBzY2hlbWEgbmFtZXNwYWNlLgotICAgICAgICBpZihub2RlVmFsdWUuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IG5vZGVWYWx1ZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgbm9kZVZhbHVlID0gQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMTsKLSAgICAgICAgfQotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKG5vZGVWYWx1ZSkuYXBwZW5kKCJcIiIpOwotICAgICAgfQotICAgIH0KLS8vICAgIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbXBvcnQiKSAmJiAhZm91bmRTY2hlbWFMb2NhdGlvbikKLS8vICAgIHsKLS8vICAgICAgeHNkU3RyaW5nLmFwcGVuZCgiICIpLmFwcGVuZChTQ0hFTUFMT0NBVElPTikuYXBwZW5kKCI9XCIiKS5hcHBlbmQobmFtZXNwYWNlKS5hcHBlbmQoIlwiIik7Ci0vLyAgICB9Ci0gICAgLy8gYWRkIGluIGFueSByZXF1aXJlZCBOUyBkZWNsYXJhdGlvbnMgZnJvbSBwYXJlbnQgZWxlbWVudHMKLSAgICBpZiAocmVxTlNEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgRW51bWVyYXRpb24ga2V5cyA9IHJlcU5TRGVjbC5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBTdHJpbmcgZGVjbE5TID0gKFN0cmluZylyZXFOU0RlY2wuZ2V0KGtleSk7Ci0gICAgICAgIGlmKGRlY2xOUy5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgZGVjbE5TLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBkZWNsTlMgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQoIiAiKS5hcHBlbmQoa2V5KS5hcHBlbmQoIj1cIiIpLmFwcGVuZChkZWNsTlMpLmFwcGVuZCgiXCIiKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI+Iik7Ci0gICAgaWYgKHJlcXVpcmVkTmFtZXNwYWNlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGlSZXF1aXJlZE5hbWVzcGFjZXMgPSByZXF1aXJlZE5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpUmVxdWlyZWROYW1lc3BhY2VzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZylpUmVxdWlyZWROYW1lc3BhY2VzLm5leHQoKTsKLQotICAgICAgICB4c2RTdHJpbmcKLSAgICAgICAgICAuYXBwZW5kKCI8IikKLSAgICAgICAgICAuYXBwZW5kKG5hbWVQcmVmaXgpCi0gICAgICAgICAgLmFwcGVuZChJTVBPUlQpCi0gICAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgICAgLmFwcGVuZChOQU1FU1BBQ0UpCi0gICAgICAgICAgLmFwcGVuZCgiPVwiIikKLSAgICAgICAgICAuYXBwZW5kKG5zKQotICAgICAgICAgIC5hcHBlbmQoIlwiICIpCi0gICAgICAgICAgLmFwcGVuZChTQ0hFTUFMT0NBVElPTikKLSAgICAgICAgICAuYXBwZW5kKCI9XCIiKQotICAgICAgICAgIC5hcHBlbmQobnMpCi0gICAgICAgICAgLmFwcGVuZCgiXCIvPiIpOwotICAgICAgfQotCi0gICAgfQotICAgIHhzZFN0cmluZy5hcHBlbmQoIlxuIik7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZXRob2QgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZChjcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShjaGlsZCwgZWxlbWVudHMsIG51bGwsIG51bGwsIGZpbGVsb2NhdGlvbikpOwotICAgICAgfQotICAgIH0KLQotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwvIikuYXBwZW5kKGVsZW0uZ2V0VGFnTmFtZSgpKS5hcHBlbmQoIj4iKTsKLQotICAgIHJldHVybiB4c2RTdHJpbmcudG9TdHJpbmcoKTsKLQotICB9Ci0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlIHByZWZpeGVzIHRoYXQgYXJlIHVzZWQgZm9yIGVsZW1lbnRzIG9yIHR5cGVzIGluIHRoZSBzY2hlbWEuCi0gICAqICAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hIHRvIGNoZWNrIGZvciBuYW1lc3BhY2UgcHJlZml4ZXMuCi0gICAqIEByZXR1cm4gQSBsaXN0IG9mIG5hbWVzcGFjZSBwcmVmaXhlcyBmb3IgdGhlIGVsZW1lbnQgYW5kIGFsbCBpdHMgY2hpbGRyZW4uCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXROYW1lc3BhY2VQcmVmaXhlcyhFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBMaXN0IG5hbWVzcGFjZSA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgLy8gcmVnaXN0ZXIgYWxsIHRoZSBjaGlsZCB0eXBlcyBmaXJzdAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAvLyB3ZSBvbmx5IHdhbnQgbm9kZXMgdGhhdCBhcmUgRWxlbWVudHMKLSAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KW47Ci0gICAgICAgIExpc3QgY2hpbGRucyA9IGdldE5hbWVzcGFjZVByZWZpeGVzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIAotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQWRkIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGN1cnJlbnQgZWxlbWVudAotICAgIFN0cmluZyBlbGVtTlMgPSBlbGVtLmdldFByZWZpeCgpOwotICAgIC8vIGlmIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBwcmVmaXggc2V0IGl0IHRvIHRoZSBlbXB0eSBwcmVmaXguCi0gICAgaWYoZWxlbU5TID09IG51bGwpCi0gICAgewotICAgICAgZWxlbU5TID0gIiI7Ci0gICAgfQotICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKGVsZW1OUykpCi0gICAgIHsKLSAgICAgIG5hbWVzcGFjZS5hZGQoZWxlbU5TKTsKLSAgICB9Ci0gICAgLy8gbm93IGFkZCBhbGwgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCdzIG5hbWVzcGFjZXMKLSAgICAvLyBkb24ndCBpbmNsdWRlIGltcG9ydCBhbmQgc2NoZW1hIGVsZW1lbnRzCi0gICAgU3RyaW5nIGxvY2FsbmFtZSA9IGVsZW0uZ2V0TG9jYWxOYW1lKCk7Ci0gICAgaWYgKCFsb2NhbG5hbWUuZXF1YWxzKElNUE9SVCkgJiYgIWxvY2FsbmFtZS5lcXVhbHMoSU5DTFVERSkgJiYgIWxvY2FsbmFtZS5lcXVhbHMoU0NIRU1BKSkKLSAgICB7Ci0gICAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgICBTdHJpbmcgbm9kZU5hbWUgPSBuLmdldE5vZGVOYW1lKCk7Ci0gICAgICAgIC8vIHJlbW92ZWQgcmVzdHJpY3Rpb24gdGhhdCB3ZSdyZSBvbmx5IGxvb2tpbmcgYXQgdHlwZXMKLSAgICAgICAgLy8JCWlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFRZUEUpKQotICAgICAgICAvLwkJewotICAgICAgICAvLyBkb24ndCB0YWtlIG5hbWVzcGFjZSBpbmZvIGZyb20gYXR0cmlidXRlcyBkZWZpbmluZyBuYW1lc3BhY2VzLgotICAgICAgICAvLyB0aGF0IGluY2x1ZGVzIHhtbG5zLCB0YXJnZXROYW1lc3BhY2UKLSAgICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xIHx8IG5vZGVOYW1lLmVxdWFscyhUQVJHRVROQU1FU1BBQ0UpIHx8IG5vZGVOYW1lLmVxdWFscyhOQU1FKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEdyYWIgbmFtZXNwYWNlIHByZWZpeGVzIGZyb20gYXR0cmlidXRlcy4KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaW50IGNvbG9uSW5kZXggPSBub2RlTmFtZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgICAgaWYoY29sb25JbmRleCAhPSAtMSAmJiAoY29sb25JbmRleCArIDEgPCBub2RlTmFtZS5sZW5ndGgoKSAmJiBub2RlTmFtZS5jaGFyQXQoY29sb25JbmRleCArIDEpICE9ICcvJykpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IG5vZGVOYW1lLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KTsKLSAgICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKHByZWZpeCkpCi0gICAgICAgICAgICB7Ci0KLSAgICAgICAgICAgICAgbmFtZXNwYWNlLmFkZChwcmVmaXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBpbnQgY29sb25JbmRleCA9IG5vZGVWYWx1ZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgIC8vIERvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBhdHRyaWJ1dGVzIHdpdGggdGhlIGRlZmF1bHQgbmFtZXNwYWNlLCB0aGF0IGlzIGF0dHJpYnV0ZXMKLSAgICAgICAgLy8gdGhhdCBhcmUgbm90IHByZWZpeGVkLiAoY29sb25JbmRleCA9PSAtMSkKLSAgICAgICAgLy8gSWYgdGhlIGNvbG9uSW5kZXggaXMgZm9sbG93ZWQgYnkgYSAvIHRoZW4gaXQgaXMgYSBVUkkgYW5kIG5vdAotICAgICAgICAvLyBuYW1lc3BhY2UgcXVhbGlmaWVkLgotCQlpZiAoY29sb25JbmRleCA9PSAtMSB8fCAoY29sb25JbmRleCArIDEgPCBub2RlVmFsdWUubGVuZ3RoKCkgJiYgbm9kZVZhbHVlLmNoYXJBdChjb2xvbkluZGV4ICsgMSkgPT0gJy8nKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGhlcmUgd2UgaGF2ZSBmb3VuZCBhIGNvbG9uIGRlbGltaXRlciBzbyB3ZSBuZWVkIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBoZXJlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG5vZGVWYWx1ZSA9IG5vZGVWYWx1ZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobm9kZVZhbHVlKSkKLSAgICAgICAgewotCi0gICAgICAgICAgbmFtZXNwYWNlLmFkZChub2RlVmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2VzIHRoYXQgaGF2ZSBhbiBpbXBvcnQgc3RhdGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZXMgdGhhdCBhcmUgaW1wb3J0ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRJbXBvcnROYW1lc3BhY2VzKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIExpc3QgbmFtZXNwYWNlID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICAvLyByZWdpc3RlciBhbGwgdGhlIGNoaWxkIHR5cGVzIGZpcnN0Ci0gICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW0uZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpIHx8IGkgPCA1OyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICBMaXN0IGNoaWxkbnMgPSBnZXRJbXBvcnROYW1lc3BhY2VzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gaWYgdGhpcyBpcyBhbiBpbXBvcnQgZWxlbWVudCBnZXQgdGhlIG5hbWVzcGFjZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShJTVBPUlQpKQotICAgIHsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5vZGVWYWx1ZSkpCi0gICAgICAgICAgewotCi0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5vZGVWYWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIEhhc2h0YWJsZSB3aXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcyBrZXlzIGZyb20gdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCBuYW1lc3BhY2UgcHJlZml4ZXMgbWFwcGVkIHRvIG5hbWVzcGFjZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGdldE5TUmVzb2x2ZXIoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xKQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgU3RyaW5nIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLQotICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVQcmVmaXggPSAiIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNik7Ci0gICAgICAgIH0KLSAgICAgICAgbnNSZXNvbHZlci5wdXQobmFtZVByZWZpeCwgbm9kZVZhbHVlKTsKLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNSZXNvbHZlcjsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIG5hbWVzcGFjZXMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZXMgbGlzdCB3aXRoIHRoZSB0d28gbmFtZXNwYWNlCi0gICAqIHJlc29sdmVyIGhhc2h0YWJsZXMgcHJvdmlkZWQuIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2UgdGhhdCBuZWVkCi0gICAqIHRvIGJlIGRlY2xhcmVkLgotICAgKiBGaXJzdCByZXNvbHZlIGFnYWluc3QgdGhlIGxvY2FsIG5hbWVzcGFjZXMgd2l0aCBuc1Jlc29sdmVyLgotICAgKiBOZXh0IHJlc29sdmUgYWdhaW5zdCB0aGUgcGFyZW50IG5hbWVzcGFjZSB3aXRoIHBhcmVudE5TUmVzb2x2ZXIuCi0gICAqIEEgc2lkZSBhZmZlY3Qgb2YgdGhpcyBtZXRob2QgaXMgdGhlIG5hbWVzcGFjZXMgbGlzdCBpcyBsZWZ0IHdpdGggb25seSB0aG9zZSAKLSAgICogbmFtZXNwYWNlcyB0aGF0IGFyZSByZXNvbHZlZCBhbmQgdGhlIHJlc29sdmVkIGVudGl0aWVzIGFyZSBwbGFjZWQgaW4gdGhlIAotICAgKiBsaXN0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGVudHJpZXMuCi0gICAqIEZvciBleC4gSWYgeW91IHByb3ZpZGUgYSBsaXN0IHN1Y2ggYXMge3hzZCwgaW50Zn0gYW5kIG9ubHkgeHNkIGNhbiBiZSByZXNvbHZlZAotICAgKiB5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgbGlzdCB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9Ci0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIHJlc29sdmUuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgbG9jYWwgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBwYXJlbnROU1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgcGFyZW50IG5hbWVzcGFjZSByZXNvbHZlci4KLSAgICogQHJldHVybiBBIEhhc2h0YWJsZSBvZiBuYW1lc3BhY2VzIHRoYXQgbXVzdCBiZSBkZWNsYXJlZC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpCi0gIHsKLSAgCUhhc2h0YWJsZSByZXFOU0RlY2wgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhbmFtZXNwYWNlcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSBuYW1lc3BhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgewotICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKW5hbWVzcGFjZXMuZ2V0KGkpOwotICAgICAgICAvLyBSZW1vdmUgdGhlIG5hbWVzcGFjZSBmcm9tIHRoZSBsaXN0LgotICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShpKTsKLSAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgYWdhaW5zdCB0aGUgbG9jYWwgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBpZiAobnNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgcmVzb2x2ZWROUyA9IG5zUmVzb2x2ZXIuZ2V0KG5zKTsKLSAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgaWYoIW5hbWVzcGFjZXMuY29udGFpbnMocmVzb2x2ZWROUykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTmV4dCB0cnkgdG8gcmVzb2x2ZSBhZ2FpbnN0IHRoZSBwYXJlbnQgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWlmIChucy5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TICsgIjoiICsgbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyZW50TlNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCByZXNvbHZlZE5TID0gcGFyZW50TlNSZXNvbHZlci5nZXQobnMpOwotICAgICAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIGlmKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHJlc29sdmVkTlMpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgcmVzb2x2ZWROUyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gU3RpbGwgbmVlZCB0byBkZWNsYXJlIHRoZSBuYW1lc3BhY2UgdGhvdWdoLgotICAgICAgICAgICAgICByZXFOU0RlY2wucHV0KG5zLCByZXNvbHZlZE5TKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXFOU0RlY2w7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIGFueSBuYW1lc3BhY2UgZnJvbSB0aGUgbmFtZXNwYWNlcyBsaXN0IGlmIGl0IGlzIGluIHRoZSBpbXBvcnQgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIFRoZSBuYW1lc3BhY2VzIGxpc3QuCi0gICAqIEBwYXJhbSBpbXBvcnRlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIGltcG9ydGVkIG5hbWVzcGFjZXMuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRob3V0IHRoZSBpbXBvcnRlZCBuYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgcmVtb3ZlSW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIExpc3QgaW1wb3J0ZWROYW1lc3BhY2VzKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiBpbXBvcnRlZE5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhaW1wb3J0ZWROYW1lc3BhY2VzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpSW1wb3J0ZWROUyA9IGltcG9ydGVkTmFtZXNwYWNlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlJbXBvcnRlZE5TLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlOUyA9IChTdHJpbmcpaUltcG9ydGVkTlMubmV4dCgpOwotCi0gICAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKGlOUyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgc2NoZW1hIGFuZCB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhlIGlnbm9yZU5hbWVzcGFjZXMKLSAgICogbGlzdCBmcm9tIHRoZSBuYW1lc3BhY2VzIGxpc3QgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBsb2NhbCBuYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRoIHRoZSBsb2NhbCBuYW1lc3BhY2VzIHJlbW92ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlcyAhPSBudWxsICYmIGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnMgPSBlbGVtLmdldEF0dHJpYnV0ZShUQVJHRVROQU1FU1BBQ0UpOwotICAgICAgbmFtZXNwYWNlcy5yZW1vdmUobnMpOwotCi0gICAgICBmb3IgKGludCBpID0gaWdub3JlTmFtZXNwYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgLy8ga2VlcCByZW1vdmluZyB0aGUgbmFtZXNwYWNlIHVudGlsIGl0IGlzIG5vdCBpbiB0aGUgbGlzdAotICAgICAgICBpZiAobmFtZXNwYWNlcy5yZW1vdmUoaWdub3JlTmFtZXNwYWNlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLSAgCi0gIC8qKiAKLSAgICogUmVtb3ZlIGFsbCB0aGUgbmFtZXNwYWNlcyBpbiB0aGUgbmFtZXNwYWNlcyBsaXN0IHRoYXQgYXJlbid0IGNvbnRhaW5lZCBpbiB0aGUgCi0gICAqIHZhbGlkSW1wb3J0TlNzIHNldC4gCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBBIGxpc3Qgb2YgbmFtZXNwYWNlcy4gCi0gICAqIEBwYXJhbSB2YWxpZEltcG9ydE5TcyBBIHNldCBvZiB2YWxpZCBuYW1lc3BhY2VzLiAKLSAgICogQHJldHVybiBBIGxpc3Qgb2YgbmFtZXNwYWNlcyB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IG1lbWJlcnMgd2hpY2ggYXJlbid0IGluIHRoZSB2YWxpZEltcG9ydE5TcyBzZXQuIAotICAgKi8gCi0gIHByb3RlY3RlZCBMaXN0IHJlc3RyaWN0SW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIFNldCB2YWxpZEltcG9ydE5TcykgCi0gIHsgCi0gICAgICAgIEl0ZXJhdG9yIG5zSXRlciA9IG5hbWVzcGFjZXMuaXRlcmF0b3IoKTsgCi0gICAgICAgIHdoaWxlKG5zSXRlci5oYXNOZXh0KCkpIAotICAgICAgICB7IAotICAgICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpbnNJdGVyLm5leHQoKTsgCi0gICAgICAgICAgaWYoIXZhbGlkSW1wb3J0TlNzLmNvbnRhaW5zKG5zKSkgCi0gICAgICAgICAgeyAKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShucyk7IAotCQkJCW5zSXRlciA9IG5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB9IAotICAgICAgICB9IAotICAgICAgICByZXR1cm4gbmFtZXNwYWNlczsgCi0gIH0gCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaXMgaW4gdGhlIGxpc3Qgb2YgcmVxdWlyZWQgbmFtZXNwYWNlcywKLSAgICogZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHBhcmFtIHJlcW5zIFRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgdG8gY2hlY2sgZm9yIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZXMgaXMgaW4gdGhlIGxpc3QsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQoTGlzdCByZXFucykKLSAgewotICAgIGlmIChyZXFucy5jb250YWlucyhTT0FQX0VOQ09ESU5HX1VSSSkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY2N2RlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5FcnJvck1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogUGx1Z2luIHZhbGlkYXRvciBmb3IgdGhlIFdTREwgVmFsaWRhdGlvbiBmcmFtZXdvcmsuIFZhbGlkYXRlcyBpbmxpbmUgc2NoZW1hIGZvdW5kIGluIGEgV1NETCBkb2N1bWVudC4KLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYVZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFByb3BlcnR5IHRvIGFsbG93IHRoZSBXU0RMIHZhbGlkYXRvciB0byB1c2UgdGhlIHRhcmdldCBuYW1lc3BhY2UKLSAgICogZGVmaW5lZCBvbiB0aGUgV1NETCBkb2N1bWVudCBmb3Igc2NoZW1hcyB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuCi0gICAqIFRoaXMgcHJvcGVydHkgd2lsbCBhbGxvdyBjbGllbnRzIHdobyBkZXBlbmQgb24gdGhpcyBmdW5jdGlvbmFsaXR5Ci0gICAqIHRvIGNvbnRpbnVlIHRvIHVzZSBpdCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgcG9zdCAxLjUuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gVVNFX1dTRExfVEFSR0VUTkFNRVNQQUNFID0gZmFsc2U7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfV0FSTl9PTERfU0NIRU1BX05BTUVTUEFDRSA9ICJfV0FSTl9PTERfU0NIRU1BX05BTUVTUEFDRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BID0gIl9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IgPSBudWxsOwotICAKLSAgcHVibGljIElubGluZVNjaGVtYVZhbGlkYXRvcigpCi0gIHsKLQlTdHJpbmcgdXNlTlMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZS53c2RsLnRhcmdldG5hbWVzcGFjZSIpOwotCWlmKHVzZU5TICE9IG51bGwgJiYgdXNlTlMuZXF1YWxzKCJ0cnVlIikpCi0JewotCSAgVVNFX1dTRExfVEFSR0VUTkFNRVNQQUNFID0gdHJ1ZTsKLQl9Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuV1NETDExVmFsaWRhdGlvbkluZm8pCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAJTGlzdCBlbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1lbnQ7Ci0gICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpOwotICAgIFN0cmluZyBiYXNlTG9jYXRpb24gPSB3c2RsRGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKTsKLSAgICAvLyBBZGQgaW4gdGhlIG5hbWVzcGFjZXMgZGVmaW5lZCBpbiB0aGUgZG9jIGFscmVhZHkgdGhhdCBhcmVuJ3QgZGVmaW5lZCBsb2NhbGx5IGluIHRoaXMgc2NoZW1hLgotICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIG5hbWVzcGFjZXMgb3RoZXIgdGhlbiBpbiB0aGUgZGVmaW50aW9ucyBhbmQgdHlwZXMgZWxlbWVudHMgYXMKLSAgICAvLyBpbmxpbmUgc2NoZW1hIGNhbiBub3QgaGF2ZSBhbnkgb3RoZXIgcGFyZW50cyBhbmQgbXVzdCBoYXZlIHRoZXJlIHR3byBwYXJlbnRzLgotICAgIC8vIEZpcnN0IHRha2UgY2FyZSBvZiB0aGUgZGVmaW5pdGlvbnMgZWxlbWVudAotICAgIAotICAgIC8vIGNyZWF0ZSB0aGUgaW5saW5lIHNjaGVtYSBzdHJpbmcKLQlFbGVtZW50IHczY2VsZW1lbnQgPSBlbGVtLmdldEVsZW1lbnQoKTsKLQlIYXNodGFibGUgcGFyZW50bmFtZXNwYWNlcyA9IGdldE5hbWVzcGFjZURlY2xhcmF0aW9uc0Zyb21QYXJlbnRzKHdzZGxEZWZpbml0aW9uLHczY2VsZW1lbnQpOwotCVN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSB3M2NlbGVtZW50LmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLQkvLyBpZiB0aGUgdGFyZ2V0TmFtZXNwYWNlIGhhc24ndCBiZWVuIGRlZmluZWQgZm9yIHRoZSBzY2hlbWEgdXNlIHRoZSAKLQkvLyB0YXJnZXROYW1lc3BhY2Ugb2YgdGhlIGRlZmluaXRpb25zIGVsZW1lbnQKLQlpZihVU0VfV1NETF9UQVJHRVROQU1FU1BBQ0UgJiYgKHRhcmdldE5hbWVzcGFjZSA9PSBudWxsIHx8IHRhcmdldE5hbWVzcGFjZS5lcXVhbHMoRU1QVFlfU1RSSU5HKSkpCi0JIHsKLQkgIHRhcmdldE5hbWVzcGFjZSA9IHdzZGxEZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCSAgdzNjZWxlbWVudC5zZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSx0YXJnZXROYW1lc3BhY2UpOwotCX0KLQkKLSAgICAvLyBJZiB0aGUgbmFtZXNwYWNlIGdpdmVuIGlzIG9uZSBvZiB0aGUgb2xkIHNjaGVtYSBuYW1lc3BhY2VzIHByb2R1Y2UgYSB3YXJuaW5nLgotCVN0cmluZyBuYW1lc3BhY2UgPSB3M2NlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOwotCWlmKG5hbWVzcGFjZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgbmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLQkgewotCSAgdmFsSW5mby5hZGRXYXJuaW5nKAotCSAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX09MRF9TQ0hFTUFfTkFNRVNQQUNFLCBRVU9URSArIENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEgKyBRVU9URSksIGVsZW1lbnQpOwotCX0KLQkKLSAgICAvLyBub3cgY3JlYXRlIGFuZCBjYWxsIHRoZSB2YWxpZGF0b3IgZm9yIHRoZSBpbmxpbmUgc2NoZW1hCi0gICAgWFNEVmFsaWRhdG9yIHNjaGVtYXYgPSBuZXcgWFNEVmFsaWRhdG9yKCk7Ci0gICAgCi0gICAgLy9TdHJpbmcgZmlsZUxvY2F0aW9uID0gbmV3IFVSTCh2YWxpZGF0b3JtYW5hZ2VyLmdldEZpbGVuYW1lKCkpLmdldFBhdGgoKTsKLSAgICBJbmxpbmVYU0RSZXNvbHZlciBpbmxpbmVFbnRpdHlSZXNvbHZlciA9Ci0gICAgICBnZXRFbnRpdHlSZXNvbHZlcih3c2RsRGVmaW5pdGlvbiwgKFR5cGVzKSBwYXJlbnRzLmdldCgwKSwgYmFzZUxvY2F0aW9uLCB0YXJnZXROYW1lc3BhY2UpOwotICAgIC8vCWFkZCBpbiB0aGUgZXh0ZXJuYWwgWFNEIENhdGFsb2cgdG8gcmVzb2x2ZSBzY2hlbWFzIG9mZmxpbmUKLSAgICBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGVudGl0eVJlc29sdmVyQ2hhaW4gPSBuZXcgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbigpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIoaW5saW5lRW50aXR5UmVzb2x2ZXIpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIodmFsSW5mby5nZXRVUklSZXNvbHZlcigpKTsKLSAgICAvL2VudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIoWE1MQ2F0YWxvZ1Jlc29sdmVyLmdldEluc3RhbmNlKCkpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIobmV3IEZpbGVFbnRpdHlSZXNvbHZlcigpKTsKLQkKLSAgICAvLwkgQ3JlYXRlIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlubGluZSBzY2hlbWEuIAotICAgIFN0cmluZyB4c2QgPSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nKHczY2VsZW1lbnQsIGVsZW1lbnRzLCBiYXNlTG9jYXRpb24sIHBhcmVudG5hbWVzcGFjZXMsIGlubGluZUVudGl0eVJlc29sdmVyLmdldElubGluZVNjaGVtYU5TcygpKTsgCi0KLQkKLSAgICBzY2hlbWF2LnZhbGlkYXRlSW5saW5lU2NoZW1hKHhzZCwgdGFyZ2V0TmFtZXNwYWNlLCBiYXNlTG9jYXRpb24sIGVudGl0eVJlc29sdmVyQ2hhaW4sIGlubGluZUVudGl0eVJlc29sdmVyLCB2YWxJbmZvLmdldFNjaGVtYUNhY2hlKCkpOwotICAgIAotLy8JY2hlY2sgaWYgdGhlIFNPQVAgRW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQKLQkJIGlmIChJbmxpbmVTY2hlbWFHZW5lcmF0b3Iuc29hcEVuY29kaW5nUmVxdWlyZWROb3RJbXBvcnRlZChlbGVtLmdldEVsZW1lbnQoKSwgYmFzZUxvY2F0aW9uLCBwYXJlbnRuYW1lc3BhY2VzKSkKLQkJIHsKLQkJICAgdmFsSW5mby5hZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BKSwgZWxlbWVudCk7Ci0JCSB9Ci0KLSAgICAvLyBJZiB0aGUgc2NoZW1hIGlzbid0IHZhbGlkIGFkZCB0aGUgZXJyb3IgbWVzc2FnZXMgcHJvZHVjZWQgdG8gdmFsaW5mby4KLSAgICAvLyBEb24ndCBhZGQgdGhlIGVycm9ycyBpZiB0aGV5IGFyZSBsb2NhdGVkIG9uIGFub3RoZXIgaW5saW5lIHNjaGVtYS4gVGhlc2UKLQkvLyB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gdGhlIG90aGVyIHNjaGVtYSBpcyB2YWxpZGF0ZWQuCi0JCSAKLSAgICBpZiAoIXNjaGVtYXYuaXNWYWxpZCgpKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGVycm9ycyA9IHNjaGVtYXYuZ2V0RXJyb3JzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChlcnJvcnMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFcnJvck1lc3NhZ2UgZXJyID0gKEVycm9yTWVzc2FnZSkgZXJyb3JzLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHVyaSA9IGVyci5nZXRVUkkoKTsKLSAgICAgICAgaW50IGxpbmUgPSBlcnIuZ2V0RXJyb3JMaW5lKCk7Ci0gICAgICAgIFN0cmluZyBlcnJtZXNzID0gZXJyLmdldEVycm9yTWVzc2FnZSgpOwotICAgICAgICBlcnJtZXNzID0gcmVwbGFjZU5hbWVzcGFjZShlcnJtZXNzLCBuYW1lc3BhY2UpOwotICAgICAgICBpZihsaW5lID4gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmKHVyaSA9PSBudWxsIHx8IHVyaS5lcXVhbHModmFsSW5mby5nZXRGaWxlVVJJKCkpKQotICAgICAgICAgIHsKLQkJCXZhbEluZm8uYWRkRXJyb3IoZXJybWVzcywgZ2V0T2JqZWN0QXRMaW5lKGxpbmUgLSAxLCBlbGVtZW50cykpOwotICAgICAgICAgIH0KLQkJICBlbHNlIGlmKCFpbmxpbmVFbnRpdHlSZXNvbHZlci5pc0lubGluZVNjaGVtYSh1cmkpICYmICF1cmkuZXF1YWxzKHZhbEluZm8uZ2V0RmlsZVVSSSgpICsgSW5saW5lWFNEUmVzb2x2ZXIuSU5MSU5FX1NDSEVNQV9JRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihlcnJtZXNzLCBsaW5lLCBlcnIuZ2V0RXJyb3JDb2x1bW4oKSwgdXJpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQkJZWxzZSBpZih1cmkgIT0gbnVsbCAmJiAhaW5saW5lRW50aXR5UmVzb2x2ZXIuaXNJbmxpbmVTY2hlbWEodXJpKSAmJiAhdXJpLmVxdWFscyh2YWxJbmZvLmdldEZpbGVVUkkoKSArIElubGluZVhTRFJlc29sdmVyLklOTElORV9TQ0hFTUFfSUQpKQotICAgICAgICB7Ci0JICAgICAgdmFsSW5mby5hZGRFcnJvcihlcnJtZXNzLCAwLDAsIHVyaSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gSWYgdGhlIHBhcnNlciB3YXMgYWJsZSB0byBjcmVhdGUgYSBzY2hlbWEgbW9kZWwgYXNzaWduIGl0IGZvciB1c2UuIAotICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgaW52YWxpZCB3ZSBzdGlsbCB3YW50IHRvIG1ha2UgdXNlIG9mIHRoZSBtb2RlbAotICAgIC8vIHdoZXJlIHBvc3NpYmxlIHRvIGF2b2lkIGNhc2NhZGluZyBlcnJvciBtZXNzYWdlcyB0byBtZXNzYWdlIHBhcnRzLgotICAgIFhTTW9kZWwgeHNNb2RlbCA9IHNjaGVtYXYuZ2V0WFNNb2RlbCgpOwotICAgIGlmKHhzTW9kZWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZFNjaGVtYSh4c01vZGVsKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFuIGVudGl0eSByZXNvbHZlciB0aGF0IHdpbGwgcmVzb2x2ZSBpbmxpbmUgc2NoZW1hcy4gIEV2ZXJ5IGlubGluZSBzY2hlbWEgaXMgcHJlcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHRoZSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcGFyYW0gdHlwZXMgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VMb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQW4gZW50aXR5IHJlc29sdmVyIHRoYXQgY2FuIHJlc29sdmUgaW5saW5lIHNjaGVtYXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lWFNEUmVzb2x2ZXIgZ2V0RW50aXR5UmVzb2x2ZXIoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgVHlwZXMgdHlwZXMsIFN0cmluZyByZWZlcmVuY2VMb2NhdGlvbiwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIElubGluZVhTRFJlc29sdmVyIGVudGl0eVJlc29sdmVyID0gbmV3IElubGluZVhTRFJlc29sdmVyKCk7Ci0vLyAgICBlbnRpdHlSZXNvbHZlci5zZXRSZWZlcmVuY2VMb2NhdGlvbihyZWZlcmVuY2VMb2NhdGlvbik7Ci0gICAgTGlzdCBzY2hlbWFzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKHNjaGVtYXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpU2NoZW1hcyA9IHNjaGVtYXMuaXRlcmF0b3IoKTsKLQkgIFNldCBuYW1lc3BhY2VzID0gbmV3IFRyZWVTZXQoKTsgCi0gICAgICB3aGlsZSAoaVNjaGVtYXMuaGFzTmV4dCgpKSAKLSAgICAgIHsgCi0gICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgaVNjaGVtYXMubmV4dCgpOyAKLSAgICAgICAgU3RyaW5nIHRoaXNOYW1lc3BhY2UgPSBleHRFbGVtLmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7IAotICAgICAgICBpZih0aGlzTmFtZXNwYWNlICE9IG51bGwpIAotICAgICAgICB7IAotICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuYWRkKHRoaXNOYW1lc3BhY2UpOyAKLSAgICAgICAgfSAKLSAgICAgIH0gCi0gICAgICBpU2NoZW1hcyA9IHNjaGVtYXMuaXRlcmF0b3IoKTsgCi0KLSAgICAgIHdoaWxlIChpU2NoZW1hcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgaVNjaGVtYXMubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGhpc05hbWVzcGFjZSA9IGV4dEVsZW0uZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKHRoaXNOYW1lc3BhY2UgIT0gbnVsbCAmJiAhdGhpc05hbWVzcGFjZS5lcXVhbHNJZ25vcmVDYXNlKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgCQotICAgICAgICAJRWxlbWVudCBlbGVtZW50ID0gZXh0RWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkKLS8vCQkJY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCQkJIC8vRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkgSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLQkJCSBTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBuZXcgQXJyYXlMaXN0KCksIHJlZmVyZW5jZUxvY2F0aW9uLCBwYXJlbnRuYW1lc3BhY2VzLCBuYW1lc3BhY2VzKTsKLSAgICAgICAgCS8vYWRkTmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMod3NkbERlZmluaXRpb24sZWxlbWVudCk7Ci0gICAgICAgICAgZW50aXR5UmVzb2x2ZXIuYWRkKHRoaXNOYW1lc3BhY2UsIHhzZCk7Ci0gICAgICAgIH0KLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZW50aXR5UmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnZhbGlkYXRvci5JV1NETDExVmFsaWRhdG9yI3NldFJlc291cmNlQnVuZGxlKGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKQotICB7Ci0gIAltZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlR2VuZXJhdG9yKE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2dlbikKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZXNzZ2VuOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcyBpbiB0aGUgZm9ybSAKLSAgICogeG1sbnM9InNvbWVuYW1lc3BhY2UiCi0gICAqIGZyb20gdGhlIGRlZmluaXRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhbmQgYWRkIHRoZW0gdG8gdGhlIHNjaGVtYSBlbGVtZW50IHNvIHRoZSBzY2hlbWEgCi0gICAqIHZhbGlkYXRvciB3aWxsIGhhdmUgYWNjZXNzIHRvIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCB0aGUgbmFtZXNwYWNlIGVsZW1lbnRzIGZyb20gdGhlIGVsZW1lbnRzIHByb3ZpZGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgCUhhc2h0YWJsZSBuc3MgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSXRlcmF0b3IgbmFtZVNwYWNlcyA9IHdzZGxEZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotCi0gICAgU3RyaW5nIFhNTE5TID0gQ29uc3RhbnRzLkFUVFJfWE1MTlM7Ci0gICAgCi0gICAgd2hpbGUgKG5hbWVTcGFjZXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc3ByZWZpeCA9IFhNTE5TOwotICAgICAgU3RyaW5nIG5zID0gKFN0cmluZykgbmFtZVNwYWNlcy5uZXh0KCk7Ci0gICAgICBpZiAoIW5zLmVxdWFsc0lnbm9yZUNhc2UoIiIpKQotICAgICAgewotICAgICAgICBuc3ByZWZpeCArPSAiOiI7Ci0gICAgICB9Ci0gICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5zcHJlZml4ICsgbnMpKQotICAgICAgewotICAgICAgCW5zcy5wdXQobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0vLyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgLy8gTmV4dCBoYW5kbGUgdGhlIHBhcmVudCB0eXBlcyBlbGVtZW50Ci0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGF0dHNsZW5ndGggPSBhdHRzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0c2xlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgdGVtcG5vZGUgPSBhdHRzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbm9kZW5hbWUgPSB0ZW1wbm9kZS5nZXROb2RlTmFtZSgpOwotICAgICAgLy8gaWYgdGhpcyBpcyBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUKLSAgICAgIGlmIChub2RlbmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgIHsKLQkJbnNzLnB1dChub2RlbmFtZSwgIHRlbXBub2RlLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgLy9lbGVtZW50LnNldEF0dHJpYnV0ZShub2RlbmFtZSwgdGVtcG5vZGUuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNzOwotICB9Ci0gIAotICAvKioKLSAgICogR2l2ZW4gYSBsaW5lIG51bWJlciBmb3IgdGhlIHNjaGVtYSByZXR1cm5zIHRoZSBlbGVtZW50IGZvdW5kIG9uIHRoYXQgbGluZS4gCi0gICAqIFVzZWZ1bCBmb3Igb2J0YWluaW5nIGVsZW1lbnRzIGZyb20gc2NoZW1hIFN0cmluZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBudW1iZXIgZm9yIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBUaGUgbGlzdCBvZiBlbGVtZW50cyB0byBjaGVjay4KLSAgICogQHJldHVybiBUaGUgb2JqZWN0IGxvY2F0ZWQgYXQgdGhlIGxpbmUgb3IgYXQgbGluZSAwIGlmIHRoZSBsaW5lIGlzIGludmFsaWQuCi0gICAqLwotICAgcHJvdGVjdGVkIE9iamVjdCBnZXRPYmplY3RBdExpbmUoaW50IGxpbmUsIExpc3QgZWxlbWVudHMpCi0gICB7Ci0gICAJaWYobGluZSA8IDAgfHwgbGluZSA+PSBlbGVtZW50cy5zaXplKCkpCi0gICAJewotICAgCSAgbGluZSA9IDA7Ci0gICAJfQotCXJldHVybiBlbGVtZW50cy5nZXQobGluZSk7Ci0gICB9Ci0gICAKLSAgLyoqCi0gICAqIFJlcGxhY2UgYW55IGluc3RhbmNlIG9mIHRoZSAyMDAxIHNjaGVtYSBuYW1lc3BhY2UgaW4gdGhlIGdpdmVuIG1lc3NhZ2Ugd2l0aAotICAgKiB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gcmVwbGFjZSB0aGUgbmFtZXNwYWNlIGluLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdXNlZCBmb3IgcmVwbGFjZW1lbnQuCi0gICAqIEByZXR1cm4gVGhlIG1lc3NhZ2Ugd2l0aCB0aGUgMjAwMSBzY2hlbWEgbmFtZXNwYWNlIHJlcGxhY2VkIGJ5IHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyByZXBsYWNlTmFtZXNwYWNlKFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgbmFtZXNwYWNlKQotICAgewotICAgICBTdHJpbmcgeHNkMjAwMSA9IENvbnN0YW50cy5OU19VUklfWFNEXzIwMDE7Ci0gICAgIGludCBzdGFydCA9IG1lc3NhZ2UuaW5kZXhPZih4c2QyMDAxKTsKLSAgICAgaW50IGVuZCA9IHN0YXJ0ICsgeHNkMjAwMS5sZW5ndGgoKTsKLSAgICAgaWYoc3RhcnQgPCAwKQotICAgICB7Ci0gICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgIH0KLSAgICAgU3RyaW5nIHN0YXJ0U3RyaW5nID0gbWVzc2FnZS5zdWJzdHJpbmcoMCxzdGFydCk7Ci0gICAgIFN0cmluZyBlbmRTdHJpbmcgPSBtZXNzYWdlLnN1YnN0cmluZyhlbmQsbWVzc2FnZS5sZW5ndGgoKSk7Ci0gICAgIHJldHVybiBzdGFydFN0cmluZyArIG5hbWVzcGFjZSArIGVuZFN0cmluZzsKLSAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVYU0RSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q1MzY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBYTUxFbnRpdHlSZXNvbHZlciB0aGF0IGFsbG93cyBpbmxpbmUgc2NoZW1hcyB0byByZXNvbHZlIGVhY2ggb3RoZXIgdGhyb3VnaCBpbXBvcnRzLgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lWFNEUmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkxJTkVfU0NIRU1BX0lEID0gIiNpbmxpbmVzY2hlbWEiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZJTEVfUFJFRklYID0gImZpbGU6IjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBYTUxOUyA9ICJ4bWxucyI7Ci0gIHByb3RlY3RlZCBIYXNodGFibGUgZW50aXRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0vLyAgcHJvdGVjdGVkIFN0cmluZyByZWZMb2NhdGlvbiA9IG51bGw7Ci0gIHByb3RlY3RlZCBYTUxFbnRpdHlSZXNvbHZlciBleHRlcm5hbFJlc29sdmVyID0gbnVsbDsKLSAgcHJvdGVjdGVkIFhNTElucHV0U291cmNlIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWZlcnJpbmdTY2hlbWFOYW1lc3BhY2UgPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0dWN0b3IuCi0gICAqLwotICBwdWJsaWMgSW5saW5lWFNEUmVzb2x2ZXIoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKQotCQkgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCVN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7CSAKLQlTdHJpbmcgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0UHVibGljSWQoKTsJCi0JU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JU3RyaW5nIHNjaGVtYSA9IG51bGw7Ci0JaWYgKHN5c3RlbUlkID09IG51bGwpCi0JewotCSAgaWYocHVibGljSWQgPT0gbnVsbCkKLQkgIHsKLQkgIAlpZihuYW1lc3BhY2UgPT0gbnVsbCkKLQkgIAl7CQotCSAgICAgIHJldHVybiBudWxsOwotCSAgCX0KLQkgIAllbHNlCi0JICAJewotCSAgCQlzeXN0ZW1JZCA9IG5hbWVzcGFjZTsKLQkgIAl9Ci0JICB9Ci0JICBlbHNlCi0JICB7CQotCSAgICBzeXN0ZW1JZCA9IHB1YmxpY0lkOwotCSAgfQotCX0KLQkgIAotCWlmKHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSAhPSBudWxsICYmIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZS5lcXVhbHMoc3lzdGVtSWQpKQotCXsKLQkJaWYocmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UhPW51bGwpCi0JCXsKLQkJCXJldHVybiByZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZTsKLQkJfQotCX0KLQllbHNlIGlmICgoc2NoZW1hID0gKFN0cmluZykgZW50aXRpZXMuZ2V0KHN5c3RlbUlkKSkgIT0gbnVsbCAmJiAhc2NoZW1hLmVxdWFscygiIikpCi0JewotCQlpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UuZ2V0U3lzdGVtSWQoKSArIElOTElORV9TQ0hFTUFfSUQsIG51bGwsIG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKSxudWxsKTsKLQl9Ci0JCi0gICAgLy9pZihpcyA9PSBudWxsKQotICAgIC8vewotICAgIC8vCXRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwotICAgIC8vfQotCXJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgLSB0aGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hCi0gICAqIEBwYXJhbSBzY2hlbWEgLSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgU3RyaW5nIHNjaGVtYSkKLSAgewotICAgIGVudGl0aWVzLnB1dCh0YXJnZXROYW1lc3BhY2UsIHNjaGVtYSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgdGhlIHJlZmVycmluZyBpbmxpbmUgc2NoZW1hLiAKLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICogQHBhcmFtIG5hbWVzcGFjZSAtIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFJlZmVycmluZ1NjaGVtYShYTUxJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gaW5wdXRTb3VyY2U7Ci0gICAgcmVmZXJyaW5nU2NoZW1hTmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgdGhlIG5hbWVzcGFjZSBjb3JyZXNwb25kcyB0byBhbiBpbmxpbmUgc2NoZW1hLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBuYW1lc3BhY2UgY29ycmVzcG9uZHMgdG8gYW4gaW5saW5lIHNjaGVtYSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNJbmxpbmVTY2hlbWEoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJldHVybiBlbnRpdGllcy5jb250YWluc0tleShuYW1lc3BhY2UpOwotICB9Ci0gIAotICAvKiogCi0gICAqIEdldCB0aGUgc2V0IG9mIHRoZSBpbmxpbmUgc2NoZW1hIG5hbWVzcGFjZXMuIAotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2V0IG9mIHRoZSBpbmxpbmUgc2NoZW1hIG5hbWVzcGFjZXMuIAotICAgKi8gCi0gIHB1YmxpYyBTZXQgZ2V0SW5saW5lU2NoZW1hTlNzKCkgCi0gIHsgCi0gICAgICAgIHJldHVybiBlbnRpdGllcy5rZXlTZXQoKTsgCi0gIH0gCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9TY2hlbWFBdHRyaWJ1dGVUYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODgxMTM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwueHMuU2NoZW1hU3ltYm9sczsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlN5bWJvbFRhYmxlOwotLyoqCi0gKiBUaGlzIGNsYXNzIHdpbGwgYWxsb3cgdGhlIGNhbGxpbmcgY29kZSB0byBzZWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGluIHNjaGVtYS4KLSAqIFRoaXMgc2VydmVzIGFzIHNjaGVtYSBmb3Igc2NoZW1hLgotICovCi1wdWJsaWMgY2xhc3MgU2NoZW1hQXR0cmlidXRlVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZQotewotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVUYWJsZSgpCi0gIHsKLSAgICAvLyBhZGQgYWxsIG9mIHRoZSBzeWJvbHMgdG8gdGhlIHRhYmxlLiBTY2hlbWFTeW1ib2xzIHByb2JhYmx5IHNob3VsZCBoYXZlCi0gICAgLy8gYSBTeW1ib2xUYWJsZSBmb3IgdGhlc2UgYnV0IGl0IGRvZXNuJ3QKLQotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VOREFOWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5ETE9DQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VORE9USEVSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRUQVJHRVROUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BPVU5EQUxMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkFMU0VfMCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RSVUVfMSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0FOWVNJTVBMRVRZUEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9BTllUWVBFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQU5ZVVJJKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQkFTRTY0QklOQVJZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQk9PTEVBTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JZVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9DT0xMQVBTRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RBVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVRFVElNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RBWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RFQ0lNQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ET1VCTEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EVVJBVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VOVElUWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VOVElUSUVTKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRVhURU5TSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkFMU0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9GTE9BVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0hFWEJJTkFSWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSURSRUYpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JRFJFRlMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JTlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTEFOR1VBR0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MQVgpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MSVNUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTE9ORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05BTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ORUdBVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9NT05USCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX01PTlRIREFZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTkNOQU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk1UT0tFTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05NVE9LRU5TKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9OTkVHQVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9OUE9TSVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9STUFMSVpFRFNUUklORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PVEFUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfT1BUSU9OQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QT1NJVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QUkVTRVJWRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BST0hJQklURUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9RTkFNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1FVQUxJRklFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1JFUExBQ0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVFVSVJFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1JFU1RSSUNUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU0hPUlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TS0lQKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1RSSUNUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1RSSU5HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1VCU1RJVFVUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVElNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RPS0VOKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFJVRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOQk9VTkRFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5RVUFMSUZJRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FREJZVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRElOVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVETE9ORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVEU0hPUlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ZRUFSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfWUVBUk1PTlRIKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvVmFsaWRhdGVFcnJvckhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MmRjNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvVmFsaWRhdGVFcnJvckhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5FcnJvck1lc3NhZ2U7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgWE1MRXJyb3JIYW5kbGVyIHRoYXQgY2FwdHVyZXMgZXJyb3IgZnJvbSBYZXJjZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZUVycm9ySGFuZGxlciBpbXBsZW1lbnRzIFhNTEVycm9ySGFuZGxlcgotewotICBBcnJheUxpc3QgZXJyb3JMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIAotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZXJyb3IgbWVzc2FnZXMgY3JlYXRlZCBieSBYZXJjZXMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlcnJvcnMgbGlzdC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9yTWVzc2FnZXMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgZXhjZXB0aW9uIGFuZCBzZXZlcml0eS4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkgVGhlIFhlcmNlcyBlcnJvciBrZXkuCi0gICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkuCi0gICAqIEByZXR1cm4gQW4gZXJyb3IgbWVzc2FnZS4KLSAgICovCi0gIHByb3RlY3RlZCBFcnJvck1lc3NhZ2UgY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oU3RyaW5nIGtleSwgWE1MUGFyc2VFeGNlcHRpb24gZXJyb3IsIGludCBzZXZlcml0eSkKLSAgewotICAgIFN0cmluZyB1cmkgPSBlcnJvci5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLSAgICBpZih1cmkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmkgPSBlcnJvci5nZXRQdWJsaWNJZCgpOwotICAgIH0KLSAgICBFcnJvck1lc3NhZ2UgZXJyb3JNZXNzYWdlID0gbmV3IEVycm9yTWVzc2FnZSgpOwotICAgIGVycm9yTWVzc2FnZS5zZXRFcnJvckxpbmUoZXJyb3IuZ2V0TGluZU51bWJlcigpKTsKLSAgICBlcnJvck1lc3NhZ2Uuc2V0RXJyb3JNZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSk7Ci0gICAgZXJyb3JNZXNzYWdlLnNldEVycm9yQ29sdW1uKGVycm9yLmdldENvbHVtbk51bWJlcigpKTsKLSAgICBlcnJvck1lc3NhZ2Uuc2V0VVJJKHVyaSk7Ci0gICAgZXJyb3JNZXNzYWdlLnNldFNldmVyaXR5KHNldmVyaXR5KTsKLSAgICByZXR1cm4gZXJyb3JNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVycm9yKFN0cmluZyBkb21haW4sIFN0cmluZyBrZXksIFhNTFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgZXJyb3JMaXN0LmFkZChjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihrZXksIGV4Y2VwdGlvbiwgRE9NRXJyb3IuU0VWRVJJVFlfRVJST1IpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyI2ZhdGFsRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU3RyaW5nIGRvbWFpbiwgU3RyaW5nIGtleSwgWE1MUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBlcnJvckxpc3QuYWRkKGNyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKGtleSwgZXhjZXB0aW9uLCBET01FcnJvci5TRVZFUklUWV9GQVRBTF9FUlJPUikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjd2FybmluZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgd2FybmluZyhTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBYTUxQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIGVycm9yTGlzdC5hZGQoY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oa2V5LCBleGNlcHRpb24sIERPTUVycm9yLlNFVkVSSVRZX1dBUk5JTkcpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWViODU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hNTEVudGl0eVJlc29sdmVyQ2hhaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBIYW5kbGUgYSBjaGFpbiBvZiBlbnRpdHkgcmVzb2x2ZXJzLgotICovCi1wdWJsaWMgY2xhc3MgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbiBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHByaXZhdGUgTGlzdCBlbnRpdHlSZXNvbHZlcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyI3Jlc29sdmVFbnRpdHkob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcikKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciB4bWxSZXNvdXJjZUlkZW50aWZpZXIpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0gICAgCi0gICAgLy8gVE9ETzogVGhpcyBmaXggc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGlzIHByb2JsZW0gaXMgZml4ZWQgaW4gWGVyY2VzLgotICAgIC8vIFhlcmNlcyBjdXJyZW50bHkgKHZlcnNpb24gMi43KSBoYXMgYSBwcm9ibGVtIHdoZW4gdGhlIGhvbm91ciBhbGwgc2NoZW1hIGxvY2F0aW9ucwotICAgIC8vIHByb3BlcnR5IGlzIHNldCBhbmQgdGhlIHNhbWUgc2NoZW1hIGlzIGltcG9ydGVkIGJ5IHR3byBkaWZmZXJlbnQgZmlsZXMgYW5kIG9uZQotICAgIC8vIG9mIHRoZSBpbXBvcnRzIHVzZXMgXCBhbmQgYW5vdGhlciB1c2VzIC8gaW4gcGFydCBvZiB0aGUgbG9jYXRpb24uCi0gICAgaWYoeG1sUmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpICE9IG51bGwpCi0gICAgCXhtbFJlc291cmNlSWRlbnRpZmllci5zZXRMaXRlcmFsU3lzdGVtSWQoeG1sUmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpLnJlcGxhY2UoJ1xcJywnLycpKTsKLSAgICAKLSAgICBJdGVyYXRvciBlbnRpdHlSZXNvbHZlckl0ZXIgPSBlbnRpdHlSZXNvbHZlcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZW50aXR5UmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IChYTUxFbnRpdHlSZXNvbHZlcillbnRpdHlSZXNvbHZlckl0ZXIubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlzID0gZW50aXR5UmVzb2x2ZXIucmVzb2x2ZUVudGl0eSh4bWxSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFhOSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRocm93IGFuZCBJT0V4Y2VwdGlvbiBpZiB0aGUgZmlsZSBpc24ndCBmb3VuZAotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlIik7Ci0gICAgfQotICAgIHJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gZW50aXR5IHJlc29sdmVyIHRvIHRoaXMgY2hhaW4uCi0gICAqIAotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgVGhlIHJlc29sdmVyIHRvIGFkZCB0byB0aGUgY2hhaW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRpdHlSZXNvbHZlcihYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIGVudGl0eVJlc29sdmVycy5hZGQoZW50aXR5UmVzb2x2ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9YU0RWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hTRFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjcwYTNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hTRFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC54cy5YU0REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlhNTEdyYW1tYXJQcmVwYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLkdyYW1tYXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhTR3JhbW1hcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuU3RyaW5nTGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotCi0KLS8qKgotICogVmFsaWRhdGUgc2NoZW1hcyBmcm9tIGZpbGVzIG9yIFN0cmluZy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvcgotewotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OU19GRUFUVVJFX0lEID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ob25vdXItYWxsLXNjaGVtYUxvY2F0aW9ucyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZToiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBUQVJHRVROQU1FU1BBQ0UgPSAidGFyZ2V0TmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBJTVBPUlQgPSAiaW1wb3J0IjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTQ0hFTUFMT0NBVElPTiA9ICJzY2hlbWFMb2NhdGlvbiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVFlQRSA9ICJ0eXBlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZ1tdIGlnbm9yZU5hbWVzcGFjZXMgPQotICAgIHsgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIiB9OwotCi0gIHByb3RlY3RlZCBYU01vZGVsIHhzTW9kZWw7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzVmFsaWRYU0Q7Ci0gIHByb3RlY3RlZCBMaXN0IGVycm9yczsKLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhTRFZhbGlkYXRvcigpCi0gIHsKLSAgICB4c01vZGVsID0gbnVsbDsKLSAgICBpc1ZhbGlkWFNEID0gZmFsc2U7Ci0gICAgZXJyb3JzID0gbnVsbDsKLSAgfQotICAvKioKLSAgICogVmFsaWRhdGUgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWEgQSBzY2hlbWEgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2MgVGhlIHVyaSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUlubGluZVNjaGVtYShTdHJpbmcgc2NoZW1hLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBTdHJpbmcgZmlsZWxvYykKLSAgewotICAgIHZhbGlkYXRlSW5saW5lU2NoZW1hKHNjaGVtYSwgdGFyZ2V0TmFtZXNwYWNlLCBmaWxlbG9jLCBudWxsLCBudWxsLCBudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFuIGlubGluZSBzY2hlbWEgYW5kIHNwZWNpZnkgYW4gZW50aXR5IHJlc29sdmVyLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGlzIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlckNoYWluIFRoZSBlbnRpdHkgcmVzb2x2ZXIgY2hhaW4uCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIHJlc29sdmVyIGZvciB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIGdyYW1tYXJQb29sIEEgWGVyY2VzIFhNTEdyYW1tYXJQb29sIHRoYXQgaG9sZHMgcHJlY2FjaGVkIHNjaGVtYXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUlubGluZVNjaGVtYSgKLSAgICBTdHJpbmcgc2NoZW1hLAotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsCi0gICAgU3RyaW5nIGZpbGVsb2MsCi0gICAgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXJDaGFpbiwKLSAgICBYTUxFbnRpdHlSZXNvbHZlciBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciwKLSAgICBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCkKLSAgewotICAgIGZpbGVsb2NhdGlvbiA9IGZpbGVsb2M7Ci0gICAgCi0gICAgdmFsaWRhdGVYU0Qoc2NoZW1hLCB0cnVlLCBlbnRpdHlSZXNvbHZlckNoYWluLHRhcmdldE5hbWVzcGFjZSwgaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIsIGdyYW1tYXJQb29sKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZSBsb2NhdGVkIGF0IHRoZSB1cmkgc3BlY2lmaWVkIHdpdGggdGhlIGdpdmVuIGVudGl0eSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgQW4gYWJzb2x1dGUgdXJpIGZvciB0aGUgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgQW4gZW50aXR5IHJlc29sdmVyIHRvIGJlIHVzZWQuCi0gICAqIEBwYXJhbSBncmFtbWFyUG9vbCBBIFhlcmNlcyBYTUxHcmFtbWFyUG9vbCB0aGF0IGhvbGRzIHByZWNhY2hlZCBzY2hlbWFzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoU3RyaW5nIHVyaSwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sKQotICB7Ci0gICAgdmFsaWRhdGVYU0QodXJpLCBmYWxzZSwgZW50aXR5UmVzb2x2ZXIsIG51bGwsIG51bGwsIGdyYW1tYXJQb29sKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBzY2hlbWEuCi0gICAqIAotICAgKiBAcGFyYW0gc2NoZW1hIFRoZSBzY2hlbWEgb3IgaXQncyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGlubGluZVhTRCBUcnVlIGlmIGFuIGlubGluZSBzY2hlbWEsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogQHBhcmFtIGVudGl0eVJlc29sdmVyIEFuIGVudGl0eSByZXNvbHZlciB0byB1c2UuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIGVudGl0eSByZXNvbHZlci4KLSAgICogQHBhcmFtIGdyYW1tYXJQb29sIEEgWGVyY2VzIFhNTEdyYW1tYXJQb29sIHRoYXQgaG9sZHMgcHJlY2FjaGVkIHNjaGVtYXMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVhTRChTdHJpbmcgc2NoZW1hLCBib29sZWFuIGlubGluZVhTRCwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyLCBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCkKLSAgewotCVZhbGlkYXRlRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IG5ldyBWYWxpZGF0ZUVycm9ySGFuZGxlcigpOwotCS8vZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZXMoKS5jbGVhcigpOwotCXRyeQotCXsKLQkgIFhNTEdyYW1tYXJQcmVwYXJzZXIgZ3JhbW1hclByZXBhcnNlciA9IG5ldyBYTUxHcmFtbWFyUHJlcGFyc2VyKCk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnJlZ2lzdGVyUHJlcGFyc2VyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLG51bGwvKnNjaGVtYUxvYWRlciovKTsKLQkJCi0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5DT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUl9GRUFUVVJFLCBmYWxzZSk7Ci0gICAgICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5OQU1FU1BBQ0VTX0ZFQVRVUkUsIHRydWUpOwotICAgICAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuTkFNRVNQQUNFX1BSRUZJWEVTX0ZFQVRVUkUsIHRydWUpOwotCSAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuVkFMSURBVElPTl9GRUFUVVJFLCB0cnVlKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLlNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkUsIHRydWUpOwotICAgICAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuU0NIRU1BX0ZVTExfQ0hFQ0tJTkcsIGZhbHNlKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLkVYVEVSTkFMX0dFTkVSQUxfRU5USVRJRVNfRkVBVFVSRSwgdHJ1ZSk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRJRVNfRkVBVFVSRSwgdHJ1ZSk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5XQVJOX09OX0RVUExJQ0FURV9BVFRERUZfRkVBVFVSRSwgdHJ1ZSk7Ci0JICAgICAgCi0JICB0cnkKLQkgIHsKLQkJZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OU19GRUFUVVJFX0lELCB0cnVlKTsKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgIHsKLQkgICAgLy8gQ2F0Y2ggdGhlIGV4Y2VwdGlvbiBhbmQgaWdub3JlIGlmIHdlIGNhbid0IHNldCB0aGlzIGZlYXR1cmUuCi0JICB9Ci0KLQkgIC8vIGNzIDogdG9nZ2xlIHRoZSBjb21tZW50cyBvbiB0aGVzZSAyIGxpbmVzIHRvIGVhc2lseSBkaXNhYmxlIGNhY2hpbmcKLSAgICAgIC8vIGdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2wobmV3IFhNTEdyYW1tYXJQb29sSW1wbCgpKTsgCQkKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wgIT0gbnVsbCA/IGdyYW1tYXJQb29sIDogbmV3IFhNTEdyYW1tYXJQb29sSW1wbCgpKTsgCi0JICBncmFtbWFyUHJlcGFyc2VyLnNldEVycm9ySGFuZGxlcihlcnJvckhhbmRsZXIpOwotCSAgaWYgKGVudGl0eVJlc29sdmVyICE9IG51bGwpCi0JICB7Ci0JICAgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RW50aXR5UmVzb2x2ZXIoZW50aXR5UmVzb2x2ZXIpOwotCSAgfQotCi0JICB0cnkKLQkgIHsKLQkgICAgWE1MSW5wdXRTb3VyY2UgaXMgPSBudWxsOwotCSAgICBMaXN0IG9sZEdyYW1tYXJzID0gbnVsbDsKLQkgICAgWE1MR3JhbW1hclBvb2xJbXBsIHBvb2wgPSBudWxsOwotCSAgICAvLyBUaGlzIGFsbG93cyBzdXBwb3J0IGZvciB0aGUgaW5saW5lIHNjaGVtYSBpbiBXU0RMIGRvY3VtZW50cy4KLQkgICAgaWYgKGlubGluZVhTRCkKLQkgICAgeyAgICAgICAKLQkgICAgICBSZWFkZXIgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzY2hlbWEpOwotCQkgIGlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsZmlsZWxvY2F0aW9uLGZpbGVsb2NhdGlvbixyZWFkZXIsbnVsbCk7Ci0JCQkJCi0JCSAgKChJbmxpbmVYU0RSZXNvbHZlcilpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikuYWRkUmVmZXJyaW5nU2NoZW1hKGlzLHRhcmdldE5hbWVzcGFjZSk7Ci0JCSAgLy8gSW4gdGhlIGNhc2UgdGhhdCAnc2hhcmVkJyBncmFtbWFyIHBvb2wgaXMgdXNlZCB3ZSBuZWVkIHRvIGNvbnNpZGVyCi0JCSAgLy8gdGhhdCB3ZSBtaWdodCBoYXZlIGFscmVhZHkgYWRkZWQgYSBzY2hlbWEgdG8gdGhlIHBvb2wgd2l0aCB0aGUgc2FtZSB0YXJnZXQgbmFtZXNwYWNlCi0JCSAgLy8gYXMgdGhlIGlubGluZSBzY2hlbWEgd2UncmUgaG9waW5nIHRvIGNvbnN0cnVjdC4gIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHJlbW92ZQotCQkgIC8vIHRoZSBzY2hlbWEgZnJvbSB0aGUgcG9vbCBiZWZvcmUgY29uc3RydWN0aW5nIG91ciBpbmxpbmUgc2NoZW1hLiAgV2UgY2FuIGFkZCBpdCAKLQkJICAvLyBiYWNrIHdoZW4gd2UncmUgYWxsIGRvbmUuCi0JCSAgcG9vbCA9IChYTUxHcmFtbWFyUG9vbEltcGwpZ3JhbW1hclByZXBhcnNlci5nZXRHcmFtbWFyUG9vbCgpOyAgICAgICAgCSAgICAgIAotCQkgIG9sZEdyYW1tYXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkgIC8vIFJlbW92ZSB0aGUgaW5saW5lIHNjaGVtYSBuYW1lc3BhY2UgaWYgaXQgaXMgbGlzdGVkIGRpcmVjdGx5Ci0JCSAgLy8gaW4gdGhlIHBvb2wuIElmIGl0IGlzIGluZGlyZWN0bHkgbGlzdGVkIGFzIGFuIGltcG9ydCBvZiBhIGdyYW1tYXIgbGlzdGVkCi0JCSAgLy8gZGlyZWN0bHkgaW4gdGhlIHBvb2wgaGlkZSB0aGUgZ3JhbW1hciB0byBjb250aW51ZSB0byBnZXQgY2FjaGluZyBiZW5lZml0cwotCQkgIC8vIGZyb20gdGhlIGNhY2hlZCBncmFtbWFyLgotCQkgIEdyYW1tYXJbXSBncmFtbWFycyA9IHBvb2wucmV0cmlldmVJbml0aWFsR3JhbW1hclNldChYTUxHcmFtbWFyRGVzY3JpcHRpb24uWE1MX1NDSEVNQSk7Ci0JCSAgaW50IG51bUdyYW1tYXJzID0gZ3JhbW1hcnMubGVuZ3RoOwotCQkgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1HcmFtbWFyczsgaSsrKQotCQkgIHsKLQkJICAgIFhNTEdyYW1tYXJEZXNjcmlwdGlvbiBkZXNjID0gZ3JhbW1hcnNbaV0uZ2V0R3JhbW1hckRlc2NyaXB0aW9uKCk7Ci0JCSAgICBpZih0YXJnZXROYW1lc3BhY2UuZXF1YWxzKGRlc2MuZ2V0TmFtZXNwYWNlKCkpKQotCQkgICAgewotCQkgICAgICBvbGRHcmFtbWFycy5hZGQocG9vbC5yZW1vdmVHcmFtbWFyKGRlc2MpKTsKLQkJICAgIH0KLQkJICAgIGVsc2UKLQkJICAgIHsKLQkJICAgICAgaWYoZ3JhbW1hcnNbaV0gaW5zdGFuY2VvZiBYU0dyYW1tYXIpCi0JCSAgICAgIHsKLQkJICAgIAlYU0dyYW1tYXIgZ3JhbW1hciA9IChYU0dyYW1tYXIpZ3JhbW1hcnNbaV07Ci0JCSAgICAJICAJICAKLQkJICAgIAlTdHJpbmdMaXN0IG5hbWVzcGFjZXMgPSBncmFtbWFyLnRvWFNNb2RlbCgpLmdldE5hbWVzcGFjZXMoKTsKLQkJICAgIAlpZihuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0JCSAgICAJewotCQkgICAgCSAgb2xkR3JhbW1hcnMuYWRkKHBvb2wucmVtb3ZlR3JhbW1hcihkZXNjKSk7Ci0JCSAgICAJICAJICAgIC8vcG9vbC5wdXRHcmFtbWFyKG5ldyBYU0dyYW1tYXJIaWRlcihncmFtbWFyLCB0YXJnZXROYW1lc3BhY2UpKTsKLQkJICAgIAl9Ci0JCSAgICAgIH0KLQkJICAgIH0KLQkJICB9Ci0JCSAgICAJCi0JCSAgU2V0IGlubGluZU5TcyA9ICgoSW5saW5lWFNEUmVzb2x2ZXIpaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIpLmdldElubGluZVNjaGVtYU5TcygpOwotCQkgIEl0ZXJhdG9yIG5zaXRlciA9IGlubGluZU5Tcy5pdGVyYXRvcigpOwotCQkgIHdoaWxlKG5zaXRlci5oYXNOZXh0KCkpCi0JCSAgewotCQkgICAgWFNERGVzY3JpcHRpb24gZGVzYyA9IG5ldyBYU0REZXNjcmlwdGlvbigpOwotCQkgICAgZGVzYy5zZXROYW1lc3BhY2UoKFN0cmluZyluc2l0ZXIubmV4dCgpKTsgICAgICAKLQkJICAgIEdyYW1tYXIgb2xkR3JhbW1hciA9IHBvb2wucmVtb3ZlR3JhbW1hcihkZXNjKTsKLQkJICAgIGlmKG9sZEdyYW1tYXIgIT0gbnVsbCkKLQkJICAgICAgb2xkR3JhbW1hcnMuYWRkKG9sZEdyYW1tYXIpOwotCQkgIH0KLQotCSAgICB9Ci0JICAgIC8vIGdldCB0aGUgaW5wdXQgc291cmNlIGZvciBhbiBleHRlcm5hbCBzY2hlbWEgZmlsZQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShudWxsLHNjaGVtYSxzY2hlbWEpOwotCSAgICB9Ci0KLQkgICAgWFNHcmFtbWFyIGdyYW1tYXIgPSAoWFNHcmFtbWFyKWdyYW1tYXJQcmVwYXJzZXIucHJlcGFyc2VHcmFtbWFyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLGlzKTsKLQkgICAgeHNNb2RlbCA9IGdyYW1tYXIudG9YU01vZGVsKCk7Ci0JCQkKLQkgICAgLy8gSGVyZSB3ZSBhZGQgdGhlIHRlbXBvcmlsaXkgcmVtb3ZlZCBzY2hlbWEgYmFjay4KLQkJaWYgKGlubGluZVhTRCAmJiBvbGRHcmFtbWFycyAhPSBudWxsKQotCQl7Ci0JCSAgWFNERGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBuZXcgWFNERGVzY3JpcHRpb24oKTsKLQkJICBkZXNjcmlwdGlvbi5zZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsgCi0JCSAgcG9vbC5yZW1vdmVHcmFtbWFyKGRlc2NyaXB0aW9uKTsKLQkJCQkKLQkJICBTZXQgaW5saW5lTlNzID0gKChJbmxpbmVYU0RSZXNvbHZlcilpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikuZ2V0SW5saW5lU2NoZW1hTlNzKCk7Ci0JCSAgSXRlcmF0b3IgbnNpdGVyID0gaW5saW5lTlNzLml0ZXJhdG9yKCk7Ci0JCSAgd2hpbGUobnNpdGVyLmhhc05leHQoKSkKLQkJICB7Ci0JCQlYU0REZXNjcmlwdGlvbiBkZXNjID0gbmV3IFhTRERlc2NyaXB0aW9uKCk7Ci0JCSAgICBkZXNjLnNldE5hbWVzcGFjZSgoU3RyaW5nKW5zaXRlci5uZXh0KCkpOyAgIAotCQkgICAgcG9vbC5yZW1vdmVHcmFtbWFyKGRlc2MpOwotCQkgIH0KLQkJICAKLQkJICBJdGVyYXRvciBvbGRHSXRlciA9IG9sZEdyYW1tYXJzLml0ZXJhdG9yKCk7Ci0JICAgICAgd2hpbGUob2xkR0l0ZXIuaGFzTmV4dCgpKQotCQkgIHsKLQkJCSBHcmFtbWFyIG9sZEdyYW1tYXIgPSAoR3JhbW1hcilvbGRHSXRlci5uZXh0KCk7Ci0JCQkgaWYob2xkR3JhbW1hciAhPSBudWxsKQotCQkJICAgcG9vbC5wdXRHcmFtbWFyKG9sZEdyYW1tYXIpOwotCQkgIH0KLQkJfSAgCi0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JICB7Ci0JICAgICAgICAvLyBQYXJzZXIgd2lsbCByZXR1cm4gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbiBpZiB0aGUgZG9jdW1lbnQgaXMgc3RydWN0dXJhbGx5IGludmFsaWQuCi0JICAgICAgCS8vIEluIHRoaXMgY2FzZSB3ZSBzaW1wbHkgaWdub3JlIHRoZSBlcnJvci4KLQkgICAgICAJLy9TeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JICB9Ci0JICBlcnJvcnMgPSBlcnJvckhhbmRsZXIuZ2V0RXJyb3JNZXNzYWdlcygpOwotCX0KLQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotCSAgU3lzdGVtLm91dC5wcmludGxuKGUpOwotCX0KLQlpZiAoZXJyb3JzLmlzRW1wdHkoKSkKLQl7Ci0JICBpc1ZhbGlkWFNEID0gdHJ1ZTsKLQl9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKi8KLQotICBwdWJsaWMgWFNNb2RlbCBnZXRYU01vZGVsKCkKLSAgewotICAJcmV0dXJuIHhzTW9kZWw7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2NoZW1hIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNjaGVtYSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaXNWYWxpZFhTRDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGVycm9yIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBlcnJvciBmcm9tIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTk5ZWNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBGYWN0b3J5IGZvciBnZW5lcmF0aW5nIG9iamVjdHMgbmVlZGVkIGZvciBYTUwgQ29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5Ci17Ci0gIHByb3RlY3RlZCBzdGF0aWMgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkgaW5zdGFuY2U7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBmYWN0b3J5LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBmYWN0b3J5Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IERlZmF1bHRYTUxDb25mb3JtYW5jZUZhY3RvcnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBmYWN0b3J5IHRvIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSBmYWN0b3J5IC0gdGhlIGltcGxlbWVudGF0aW9uIHRoaXMgZmFjdG9yeSB3aWxsIHVzZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldEltcGxlbWVudGF0aW9uKEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGZhY3RvcnkpCi0gIHsKLSAgICBpbnN0YW5jZSA9IGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gYW4gWE1MIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gWE1MIHZhbGlkYXRvcgotICAgKi8KLSAgYWJzdHJhY3QgcHVibGljIElYTUxWYWxpZGF0b3IgZ2V0WE1MVmFsaWRhdG9yKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxDb25mb3JtYW5jZUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjgwZmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0KLS8qKgotICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkuCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5I2dldFhNTFZhbGlkYXRvcigpCi0gICAqLwotICBwdWJsaWMgSVhNTFZhbGlkYXRvciBnZXRYTUxWYWxpZGF0b3IoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBEZWZhdWx0WE1MVmFsaWRhdG9yKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9EZWZhdWx0WE1MVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1MzMwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5YTUxFcnJvclJlcG9ydGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbk1lc3NhZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuWFNEVmFsaWRhdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElYTUxWYWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0WE1MVmFsaWRhdG9yIGltcGxlbWVudHMgSVhNTFZhbGlkYXRvcgotewotICBwcm90ZWN0ZWQgU3RyaW5nIHVyaTsKLSAgcHJvdGVjdGVkIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3QgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAvL3Byb3RlY3RlZCBTdHJpbmdCdWZmZXIgc2NoZW1hTG9jYXRpb25TdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gIHByb3RlY3RlZCBMaXN0IGlnbm9yZWROYW1lc3BhY2VMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAKLSAgcHJvdGVjdGVkIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgY3VycmVudEVycm9yS2V5ID0gbnVsbDsKLSAgcHJvdGVjdGVkIE9iamVjdFtdIGN1cnJlbnRNZXNzYWdlQXJndW1lbnRzID0gbnVsbDsKLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGlzQ2hpbGRPZkRvYyA9IGZhbHNlOwotICBwcm90ZWN0ZWQgWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSBudWxsOyAKLSAgCi0gIC8qKgotICAgKiBBIHN0YWNrIG9mIHN0YXJ0IHRhZyBsb2NhdGlvbnMsIHVzZWQgdG8gbW92ZSBlcnJvcnMKLSAgICogcmVwb3J0ZWQgYXQgdGhlIGNsb3NlIHRhZyB0byBiZSByZXBvcnRlZCBhdCB0aGUgc3RhcnQgdGFnLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0YWNrIHN0YXJ0RWxlbWVudExvY2F0aW9ucyA9IG5ldyBTdGFjaygpOwotICBwcm90ZWN0ZWQgU2V0IGFkanVzdExvY2F0aW9uRXJyb3JLZXlTZXQgPSBuZXcgVHJlZVNldCgpOwotCi0vKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRGVmYXVsdFhNTFZhbGlkYXRvcigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIAotICAgIGlnbm9yZWROYW1lc3BhY2VMaXN0LmFkZChDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KTsKLSAgICBpZ25vcmVkTmFtZXNwYWNlTGlzdC5hZGQoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCk7Ci0gICAgaWdub3JlZE5hbWVzcGFjZUxpc3QuYWRkKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotICAgIAotICAgIGFkanVzdExvY2F0aW9uRXJyb3JLZXlTZXQuYWRkKCJjdmMtY29tcGxleC10eXBlLjIuNC5iIik7Ci0gICAgYWRqdXN0TG9jYXRpb25FcnJvcktleVNldC5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi4zIik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNzZXRGaWxlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGaWxlKFN0cmluZyB1cmkpCi0gIHsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3Ijc2V0VVJJUmVzb2x2ZXIob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gIAl0aGlzLnVyaVJlc29sdmVyID0gdXJpUmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gZ3JhbW1hclBvb2wKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEdyYW1tYXJQb29sKFhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sKQotICB7Ci0JdGhpcy5ncmFtbWFyUG9vbCA9IGdyYW1tYXJQb29sOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3IjcnVuKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICAvLyBWYWxpZGF0ZSB0aGUgWE1MIGZpbGUuCi0gICAgdHJ5Ci0gICAgewotICAgICAgUmVhZGVyIHJlYWRlcjEgPSBudWxsOyAvLyBVc2VkIGZvciB2YWxpZGF0aW9uIHBhcnNlLgotICAgICAgCi0gICAgICBJbnB1dFNvdXJjZSB2YWxpZGF0ZUlucHV0U291cmNlOyAKLSAgICAgCi0gICAgICB2YWxpZGF0ZUlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHVyaSk7Ci0gICAgICBpZiAodGhpcy5pbnB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgeyAgICAKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9IGNyZWF0ZVN0cmluZ0ZvcklucHV0U3RyZWFtKGlucHV0U3RyZWFtKTsKLSAgICAgICAgcmVhZGVyMSA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nKTsKLSAgICAgICAgICAKLSAgICAgICAgdmFsaWRhdGVJbnB1dFNvdXJjZS5zZXRCeXRlU3RyZWFtKGlucHV0U3RyZWFtKTsKLSAgICAgICAgdmFsaWRhdGVJbnB1dFNvdXJjZS5zZXRDaGFyYWN0ZXJTdHJlYW0ocmVhZGVyMSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFhNTFJlYWRlciByZWFkZXIgPSBjcmVhdGVYTUxSZWFkZXIoKTsKLSAgICAgIHJlYWRlci5wYXJzZSh2YWxpZGF0ZUlucHV0U291cmNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gTm8gbmVlZCB0byBhZGQgYW4gZXJyb3IgaGVyZS4gU0FYUGFyc2VFeGNlcHRpb25zIGFyZSByZXBvcnRlZCBieSB0aGUgZXJyb3IgcmVwb3J0ZXIuCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIE5vIG5lZWQgdG8gbG9nIHRoaXMgZXJyb3IuIFRoZSBXU0RMIHZhbGlkYXRvciB3aWxsIGNhdGNoIHRoaXMgZXJyb3Igd2hlbiBjcmVhdGluZyB0aGUgZG9tIG1vZGVsLgotICAgICAgLy9Mb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJUaGUgV1NETCB2YWxpZGF0b3Igd2FzIHVuYWJsZSB0byByZWFkIGZpbGUgIiArIHVyaSArICIuIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiQW4gZXhjZXB0aW9uIG9jY3VycmVkIHdoaWxlIHBlcmZvcm1pbmcgV1NETCBYTUwgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBmb3IgZmlsZSAiICsgdXJpICsgIi4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtCi0gICAqIEByZXR1cm4KLSAgICovCi0gIGZpbmFsIFN0cmluZyBjcmVhdGVTdHJpbmdGb3JJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIC8vIEhlcmUgd2UgYXJlIHJlYWRpbmcgdGhlIGZpbGUgYW5kIHN0b3JpbmcgdG8gYSBzdHJpbmdidWZmZXIuCi0gICAgU3RyaW5nQnVmZmVyIGZpbGVTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgaW5wdXRSZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0pOwotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlucHV0UmVhZGVyKTsKLSAgICAgIGNoYXJbXSBjaGFycyA9IG5ldyBjaGFyWzEwMjRdOwotICAgICAgaW50IG51bWJlclJlYWQgPSByZWFkZXIucmVhZChjaGFycyk7Ci0gICAgICB3aGlsZSAobnVtYmVyUmVhZCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgZmlsZVN0cmluZy5hcHBlbmQoY2hhcnMsIDAsIG51bWJlclJlYWQpOwotICAgICAgICBudW1iZXJSZWFkID0gcmVhZGVyLnJlYWQoY2hhcnMpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiVGhlIFdTREwgdmFsZGlhdG9yIHdhcyB1bmFibGUgdG8gY3JlYXRlIHRvIGNyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnB1dCBzdHJlYW0uIFdTREwgWE1MIHZhbGlkYXRpb24gbWF5IG5vdCBoYXZlIHJ1biBjb3JyZWN0bHkuIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZVN0cmluZy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3IjaGFzRXJyb3JzKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0Vycm9ycygpCi0gIHsKLSAgICByZXR1cm4gIWVycm9ycy5pc0VtcHR5KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNnZXRFcnJvcnMoKQotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JzKCkKLSAgewotICAgIHJldHVybiBlcnJvcnM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiBAcGFyYW0gbGluZQotICAgKiBAcGFyYW0gY29sdW1uCi0gICAqIEBwYXJhbSB1cmkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSkKLSAgewotCS8vIEZvciB0aGUgZm9sbG93aW5nIGVycm9ycyB0aGUgbGluZSBudW1iZXIgd2lsbCBiZSBtb2RpZmllZCB0byB1c2UgdGhhdCBvZiB0aGUgc3RhcnQKLSAgCS8vIHRhZyBpbnN0ZWFkIG9mIHRoZSBlbmQgdGFnLgotICAJaWYgKGN1cnJlbnRFcnJvcktleSAhPSBudWxsICYmIGFkanVzdExvY2F0aW9uRXJyb3JLZXlTZXQuY29udGFpbnMoY3VycmVudEVycm9yS2V5KSkgIAotICAJewotICAJICBMb2NhdGlvbkNvb3JkaW5hdGUgYWRqdXN0ZWRDb29yZGluYXRlcyA9IChMb2NhdGlvbkNvb3JkaW5hdGUpc3RhcnRFbGVtZW50TG9jYXRpb25zLnBlZWsoKTsKLSAgCSAgbGluZSA9IGFkanVzdGVkQ29vcmRpbmF0ZXMuZ2V0TGluZU51bWJlcigpOwotICAJICBjb2x1bW4gPSBhZGp1c3RlZENvb3JkaW5hdGVzLmdldENvbHVtbk51bW5lcigpOwotICAJfQotICAJCi0JZXJyb3JzLmFkZChuZXcgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9XQVJOSU5HLCB1cmksIGN1cnJlbnRFcnJvcktleSwgY3VycmVudE1lc3NhZ2VBcmd1bWVudHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgaGFuZGxlciBmb3IgdGhlIFNBWCBwYXJzZXIuIFRoaXMgaGFuZGxlciB3aWxsIG9idGFpbiB0aGUgV1NETAotICAgKiBuYW1lc3BhY2UsIGhhbmRsZSBlcnJvcnMgYW5kIHJlc29sdmUgZW50aXRpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgWE1MQ29uZm9ybWFuY2VEZWZhdWx0SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi0gIHsKLQlwcml2YXRlIExvY2F0b3IgbG9jYXRvciA9IG51bGw7Ci0JCi0gICAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRMb2NhdG9yKExvY2F0b3IgbG9jYXRvcikgCi0gICAgewotCQl0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotCQlzdXBlci5zZXREb2N1bWVudExvY2F0b3IobG9jYXRvcik7Ci0JfQotCi0JLyoqCi0gICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24pCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gYXJnMCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgU3RyaW5nIHRlbXBVUkkgPSBhcmcwLmdldFN5c3RlbUlkKCk7Ci0gICAgIGlmIChpbnB1dFN0cmVhbSE9IG51bGwgJiYgYXJnMC5nZXRTeXN0ZW1JZCgpID09IG51bGwpCi0gICAgIHsKLSAgICAgICAvL21oOiBJbiB0aGlzIGNhc2Ugd2UgYXJlIHZhbGlkYXRpbmcgYSBzdHJlYW0gc28gdGhlIFVSSSBtYXkgYmUgbnVsbCBpbiB0aGlzIGV4Y2VwdGlvbgotICAgICAgIHRlbXBVUkkgPSB1cmk7ICAgICAgIAotICAgICB9Ci0gICAgIGFkZEVycm9yKGFyZzAuZ2V0TWVzc2FnZSgpLCBhcmcwLmdldExpbmVOdW1iZXIoKSwgYXJnMC5nZXRDb2x1bW5OdW1iZXIoKSwgdGVtcFVSSSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGFyZzApIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICBhZGRFcnJvcihhcmcwLmdldE1lc3NhZ2UoKSwgYXJnMC5nZXRMaW5lTnVtYmVyKCksIGFyZzAuZ2V0Q29sdW1uTnVtYmVyKCksIGFyZzAuZ2V0U3lzdGVtSWQoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGFyZzApIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICBhZGRFcnJvcihhcmcwLmdldE1lc3NhZ2UoKSwgYXJnMC5nZXRMaW5lTnVtYmVyKCksIGFyZzAuZ2V0Q29sdW1uTnVtYmVyKCksIGFyZzAuZ2V0U3lzdGVtSWQoKSk7Ci0gICAgfQotCQotCS8qKgotCSAqIEBzZWUgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIjZW5kRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lKQotCQkJdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCWlmKGxvY2FsTmFtZS5lcXVhbHMoImRvY3VtZW50YXRpb24iKSAmJiAodXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1dTREwpIHx8IHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSl8fCB1cmkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpKQotCQl7Ci0JCSAgaXNDaGlsZE9mRG9jID0gZmFsc2U7Ci0JCX0KLQkJc3VwZXIuZW5kRWxlbWVudCh1cmksIGxvY2FsTmFtZSwgcU5hbWUpOwotCQlzdGFydEVsZW1lbnRMb2NhdGlvbnMucG9wKCk7Ci0JfQotCS8qKgotCSAqIEBzZWUgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIjc3RhcnRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwKLQkJCUF0dHJpYnV0ZXMgYXR0cykgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCXN0YXJ0RWxlbWVudExvY2F0aW9ucy5wdXNoKG5ldyBMb2NhdGlvbkNvb3JkaW5hdGUobG9jYXRvci5nZXRMaW5lTnVtYmVyKCksIGxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCkpKTsKLQkJaWYobG9jYWxOYW1lLmVxdWFscygiZG9jdW1lbnRhdGlvbiIpICYmICh1cmkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfV1NETCkgfHwgdXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKXx8IHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgdXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkpCi0JCXsKLQkJICBpc0NoaWxkT2ZEb2MgPSB0cnVlOwotCQl9Ci0JCXN1cGVyLnN0YXJ0RWxlbWVudCh1cmksIGxvY2FsTmFtZSwgcU5hbWUsIGF0dHMpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBpbnB1dFN0cmVhbSAtIHNldCB0aGUgaW5wdXRTdHJlYW0gdG8gdmFsaWRhdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElucHV0U3RyZWFtKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgICB0aGlzLmlucHV0U3RyZWFtID0gaW5wdXRTdHJlYW07Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBjbGFzcyBYTUxWYWxpZGF0b3JQYXJzZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uCi0gIHsKLQkvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRURENvbmZpZ3VyYXRpb24jY3JlYXRlRXJyb3JSZXBvcnRlcigpCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFhNTEVycm9yUmVwb3J0ZXIgY3JlYXRlRXJyb3JSZXBvcnRlcigpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBYTUxFcnJvclJlcG9ydGVyKCkKLSAgICAgIHsKLSAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuWE1MRXJyb3JSZXBvcnRlciNyZXBvcnRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10sIHNob3J0KQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoU3RyaW5nIGRvbWFpbiwgU3RyaW5nIGtleSwgT2JqZWN0W10gYXJndW1lbnRzLAotICAgICAgICAgICAgc2hvcnQgc2V2ZXJpdHkpIHRocm93cyBYTklFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIGN1cnJlbnRFcnJvcktleSA9IGtleTsKLSAgICAgICAgICBjdXJyZW50TWVzc2FnZUFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgICBzdXBlci5yZXBvcnRFcnJvcihkb21haW4sIGtleSwgYXJndW1lbnRzLCBzZXZlcml0eSk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFuIFhNTCBSZWFkZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIFhNTCByZWFkZXIgb3IgbnVsbCBpZiB1bnN1Y2Nlc3NmdWwuCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MUmVhZGVyIGNyZWF0ZVhNTFJlYWRlcigpIHRocm93cyBFeGNlcHRpb24KLSAgeyAgICAgCi0gICAgU0FYUGFyc2VyIHJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmVhZGVyID0gbmV3IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyKG5ldyBYTUxWYWxpZGF0b3JQYXJzZXJDb25maWd1cmF0aW9uKCkpOwotICAgICAgCi0gICAgICBYTUxDb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyIGNvbmZvcm1hbmNlRGVmYXVsdEhhbmRsZXIgPSBuZXcgWE1MQ29uZm9ybWFuY2VEZWZhdWx0SGFuZGxlcigpOwotICAgICAgcmVhZGVyLnNldEVycm9ySGFuZGxlcihjb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyKTsKLSAgICAgIHJlYWRlci5zZXRDb250ZW50SGFuZGxlcihjb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyKTsKLSAgICAgIAotICAgICAgLy8gT2xkZXIgWGVyY2VzIHZlcnNpb25zIHdpbGwgdGhyb3duIGEgTlBFIGlmIGEgbnVsbCBncmFtbWFyIHBvb2wgaXMgc2V0LgotICAgICAgaWYoZ3JhbW1hclBvb2wgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVhZGVyLnNldFByb3BlcnR5KG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlhFUkNFU19QUk9QRVJUWV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5YTUxHUkFNTUFSX1BPT0xfUFJPUEVSVFksIGdyYW1tYXJQb29sKTsKLSAgICAgIH0KLSAgICAgIHJlYWRlci5zZXRQcm9wZXJ0eShvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5YRVJDRVNfUFJPUEVSVFlfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuRU5USVRZX1JFU09MVkVSX1BST1BFUlRZLCBuZXcgTXlFbnRpdHlSZXNvbHZlcih1cmlSZXNvbHZlcikpOwotICAgICAgcmVhZGVyLnNldEZlYXR1cmUob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuQ09OVElOVUVfQUZURVJfRkFUQUxfRVJST1JfRkVBVFVSRSwgZmFsc2UpOwotICAgICAgcmVhZGVyLnNldEZlYXR1cmUob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuTkFNRVNQQUNFU19GRUFUVVJFLCB0cnVlKTsKLSAgICAgIHJlYWRlci5zZXRGZWF0dXJlKG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlNBWF9GRUFUVVJFX1BSRUZJWCArIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLk5BTUVTUEFDRV9QUkVGSVhFU19GRUFUVVJFLCB0cnVlKTsKLQkgIHJlYWRlci5zZXRGZWF0dXJlKG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlNBWF9GRUFUVVJFX1BSRUZJWCArIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlZBTElEQVRJT05fRkVBVFVSRSwgdHJ1ZSk7Ci0JICByZWFkZXIuc2V0RmVhdHVyZShvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5TQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFLCB0cnVlKTsKLSAgICB9IAotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsgCi0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJFcnJvciBjcmVhdGluZyBYTUwgcmVhZGVyIGZvciBXU0RMIFhNTCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uLiIsIElMb2dnZXIuU0VWX0VSUk9SLCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlYWRlcjsKLSAgfSAKLSAgCi0gIC8qKgotICAgKiBBIGN1c3RvbSBlbnRpdHkgcmVzb2x2ZXIgdGhhdCB1c2VzIHRoZSBVUkkgcmVzb2x2ZXIgc3BlY2lmaWVkIHRvIHJlc29sdmUgZW50aXRpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgTXlFbnRpdHlSZXNvbHZlciBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyIAotICB7Ci0gICAgcHJpdmF0ZSBVUklSZXNvbHZlciB1cmlSZXNvbHZlcjsKLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3Rvci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gdXJpUmVzb2x2ZXIgVGhlIFVSSSByZXNvbHZlciB0byB1c2Ugd2l0aCB0aGlzIGVudGl0eSByZXNvbHZlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgTXlFbnRpdHlSZXNvbHZlcihVUklSZXNvbHZlciB1cmlSZXNvbHZlcikKLSAgICB7Ci0gICAgICB0aGlzLnVyaVJlc29sdmVyID0gdXJpUmVzb2x2ZXI7Ci0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgICAqLwotICAgIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciByaWQpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGV4YW1pbmluZyBhIHN1YmVsZW1lbnQgb2YgdGhlIAotCSAgLy8gV1NETCBvciBzY2hlbWEgZG9jdW1lbnRhdGlvbiBlbGVtZW50IHdlIGRvbid0IHdhbnQgdG8gcmVzb2x2ZSBpdAotCSAgLy8gYXMgYW55dGhpbmcgaXMgYWxsb3dlZCBhcyBhIGNoaWxkIG9mIGRvY3VtZW50YXRpb24uCi0JICBpZihpc0NoaWxkT2ZEb2MpCi0JICB7Ci0JICAgIHJldHVybiBuZXcgWE1MSW5wdXRTb3VyY2UocmlkKTsKLQkgIH0KLQkgIAotCSAgYm9vbGVhbiBuc1VzZWQgPSBmYWxzZTsKLQkgIAotCSAgU3RyaW5nIG5zID0gcmlkLmdldE5hbWVzcGFjZSgpOwotCSAgaWYobnMgIT0gbnVsbCAmJiBpZ25vcmVkTmFtZXNwYWNlTGlzdC5jb250YWlucyhucykpCi0JICB7Ci0JCXJldHVybiBuZXcgWE1MSW5wdXRTb3VyY2UocmlkKTsKLQkgIH0KLQkgIAotCSAgU3RyaW5nIHN5c3RlbUlkID0gcmlkLmdldExpdGVyYWxTeXN0ZW1JZCgpOwotCSAgaWYoc3lzdGVtSWQgPT0gbnVsbCkKLQkgIHsKLQkJc3lzdGVtSWQgPSBuczsKLQkJbnNVc2VkID0gdHJ1ZTsKLQkgIH0KLQkgIFN0cmluZyBwdWJsaWNJZCA9IHJpZC5nZXRQdWJsaWNJZCgpOwotICAgICAgaWYocHVibGljSWQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljSWQgPSBzeXN0ZW1JZDsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gWGVyY2VzIHRlbmRzIHRvIHRyeSB0byByZXNvbHZlIGxvY2F0aW9ucyB3aXRoIG5vIGluZm9ybWF0aW9uLgotICAgICAgLy8gTm8gbmVlZCB0byBkbyBhbnkgcHJvY2Vzc2luZyBpZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgotICAgICAgaWYocHVibGljSWQgIT0gbnVsbCB8fCBzeXN0ZW1JZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQgPSB1cmlSZXNvbHZlci5yZXNvbHZlKCIiLCBwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgICAgICBTdHJpbmcgdXJpID0gcmVzdWx0LmdldFBoeXNpY2FsTG9jYXRpb24oKTsKLSAgICAgICAgaWYgKHVyaSAhPSBudWxsICYmICF1cmkuZXF1YWxzKCIiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIHRoZSBuYW1lc3BhY2Ugd2FzIHVzZWQgdG8gcmVzb2x2ZSB0aGlzIHJlZmVyZW5jZSBlbnN1cmUgYSBzY2hlbWEKLSAgICAgICAgICAvLyBoYXMgYmVlbiByZXR1cm5lZC4gTmFtZXNwYWNlcyB0ZW5kIHRvIHBvaW50IHRvIFdlYiByZXNvdXJjZXMgdGhhdAotICAgICAgICAgIC8vIG1heSBvciBtYXkgbm90IGJlIHNjaGVtYXMuCi0gICAgICAgICAgYm9vbGVhbiBjcmVhdGVFbnRpdHlSZXN1bHQgPSB0cnVlOwotICAgICAgICAgIGlmKG5zVXNlZCkKLSAgICAgICAgICB7Ci0gICAgICAgIAlYU0RWYWxpZGF0b3IgeHNkVmFsID0gbmV3IFhTRFZhbGlkYXRvcigpOwotICAgICAgICAJeHNkVmFsLnZhbGlkYXRlKHVyaSwgdXJpUmVzb2x2ZXIsIG51bGwpOwotICAgICAgICAJaWYoIXhzZFZhbC5pc1ZhbGlkKCkpCi0gICAgICAgIAkgIGNyZWF0ZUVudGl0eVJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpZihjcmVhdGVFbnRpdHlSZXN1bHQpCi0gICAgICAgICAgewotCSAgICAgICAgdHJ5Ci0JICAgICAgICB7Ci0JCSAgICAgIFVSTCBlbnRpdHlVUkwgPSBuZXcgVVJMKHVyaSk7Ci0gICAgICAgICAgICAgIFhNTElucHV0U291cmNlIGlzID0gbmV3IFhNTElucHV0U291cmNlKHJpZC5nZXRQdWJsaWNJZCgpLCBzeXN0ZW1JZCwgcmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLQkJICAgICAgaXMuc2V0Qnl0ZVN0cmVhbShlbnRpdHlVUkwub3BlblN0cmVhbSgpKTsKLSAgICAgICAgICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXM7Ci0gICAgICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgICAgICAgewotCQkgICAgICAvLyBObyBuZWVkIHRvIHJlcG9ydCB0aGlzIGVycm9yLiBTaW1wbHkgY29udGludWUgYmVsb3cuCi0JICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0gIAotICAKLSAgLyoqIAotICAgKiBBIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIgY29vcmRpbmF0ZS4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBMb2NhdGlvbkNvb3JkaW5hdGUKLSAgewkKLQlwcml2YXRlIGludCBsaW5lTm8gPSAtMTsKLSAgICBwcml2YXRlIGludCBjb2x1bW5ObyA9IC0xOwotICAgIAotICAgIHB1YmxpYyBMb2NhdGlvbkNvb3JkaW5hdGUoaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCi0gICAgewotICAgICAgdGhpcy5saW5lTm8gPSBsaW5lTnVtYmVyOwotICAgICAgdGhpcy5jb2x1bW5ObyA9IGNvbHVtbk51bWJlcjsKLSAgICB9Ci0gICAgCQotICAgIHB1YmxpYyBpbnQgZ2V0TGluZU51bWJlcigpCi0gICAgeyAKLSAgICAgIHJldHVybiB0aGlzLmxpbmVObzsKLSAgICB9Ci0gICAgCQotICAgIHB1YmxpYyBpbnQgZ2V0Q29sdW1uTnVtbmVyKCkKLSAgICB7IAotICAgICAgcmV0dXJuIHRoaXMuY29sdW1uTm87Ci0gICAgfSAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9FbGVtZW50TG9jYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRWxlbWVudExvY2F0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOTM5NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9FbGVtZW50TG9jYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBIb2xkcyB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG1vZGVsLgotICovCi1wdWJsaWMgY2xhc3MgRWxlbWVudExvY2F0aW9uCi17ICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAibG9jYXRpb24iOwotICBwcm90ZWN0ZWQgaW50IGxpbmU7Ci0gIHByb3RlY3RlZCBpbnQgY29sdW1uOwotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSAtIHRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSBlbGVtZW50Ci0gICAqIEBwYXJhbSBjb2x1bW4gLSB0aGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBlbGVtZW50Ci0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uKGludCBsaW5lLCBpbnQgY29sdW1uKQotICB7Ci0gICAgdGhpcy5saW5lID0gbGluZTsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbGluZSBudW1iZXIgZm9yIHRoaXMgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGxpbmUgbnVtYmVyIGZvciB0aGlzIGVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZU51bWJlcigpCi0gIHsKLSAgCXJldHVybiBsaW5lOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIGZvciB0aGlzIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIGZvciB0aGlzIGVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Q29sdW1uTnVtYmVyKCkKLSAgewotICAJcmV0dXJuIGNvbHVtbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MQ2F0YWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MQ2F0YWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGNiZjgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvSVhNTENhdGFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIGFuIFhNTCBjYXRhbG9nLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElYTUxDYXRhbG9nCi17Ci0KLSAgLyoqCi0gICAqIEFkZCBhIHB1YmxpYyBpZCBhbmQgYSBsb2NhdGlvbiB0byB0aGUgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCAtCi0gICAqICAgICAgICAgIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudHJ5Ci0gICAqIEBwYXJhbSBzeXN0ZW1JZCAtCi0gICAqICAgICAgICAgIHRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudHJ5Ci0gICAqLwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhZGRFbnRyeVRvQ2F0YWxvZyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCk7Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIGxvY2F0aW9uIG9mIGFuIGVudGl0eSBnaXZlbiBwdWJsaWMgYW5kIHN5c3RlbSBpZHMuCi0gICAqIAotICAgKiBAcGFyYW0gcHVibGljSWQgLQotICAgKiAgICAgICAgICB0aGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkgdG8gYmUgcmVzb2x2ZWQKLSAgICogQHBhcmFtIHN5c3RlbUlkIC0KLSAgICogICAgICAgICAgdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5IHRvIGJlIHJlc29sdmVkCi0gICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBlbnRpdHkKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvSVhNTFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MDQxNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhbiBYTUwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElYTUxWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFNldCB0aGUgZmlsZSB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIC0gdGhlIHVyaSBvZiB0aGUgZmlsZSB0byBiZSB2YWxpZGF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZpbGUoU3RyaW5nIHVyaSk7Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdlcmUgdmFsaWRhdGlvbiBlcnJvcnMsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSB3ZXJlIHZhbGlkYXRpb24gZXJyb3JzLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0Vycm9ycygpOwotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgZXJyb3JzLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBlcnJvcnMKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9ycygpOwotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgVVJJIHJlc29sdmVyIHRvIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSB1cmlSZXNvbHZlciBUaGUgVVJJIHJlc29sdmVyIHRvIHVzZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvTGluZU51bWJlckRPTVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9MaW5lTnVtYmVyRE9NUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OTdmMTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9MaW5lTnVtYmVyRE9NUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuU3ltYm9sVGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxMb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MUGFyc2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLQotLyoqCi0gKiBBIERPTSBwYXJzZXIgdGhhdCB3aWxsIHJlZ2lzdGVyIGxvY2F0aW9uIGluZm9ybWF0aW9uIHdpdGggdGhlIGVsZW1lbnRzIGluIHRoZSBtb2RlbC4KLSAqLwotcHVibGljIGNsYXNzIExpbmVOdW1iZXJET01QYXJzZXIgZXh0ZW5kcyBET01QYXJzZXIKLXsKLSAgWE1MTG9jYXRvciBsb2NhdG9yID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgTGluZU51bWJlckRPTVBhcnNlcigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHNldEZlYXR1cmUoREVGRVJfTk9ERV9FWFBBTlNJT04sIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0dWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gYXJnMCBUaGUgcGFyc2VyIGNvbmZpZ3VyYXRpb24uCi0gICAqLwotICBwdWJsaWMgTGluZU51bWJlckRPTVBhcnNlcihYTUxQYXJzZXJDb25maWd1cmF0aW9uIGFyZzApCi0gIHsKLSAgICBzdXBlcihhcmcwKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzZXRGZWF0dXJlKERFRkVSX05PREVfRVhQQU5TSU9OLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBhcmcwIEEgc3ltYm9sIHRhYmxlIGZvciB0aGUgcGFyc2VyLgotICAgKi8KLSAgcHVibGljIExpbmVOdW1iZXJET01QYXJzZXIoU3ltYm9sVGFibGUgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGFyZzAgQSBzeW1ib2wgdGFibGUgZm9yIHRoZSBwYXJzZXIuCi0gICAqIEBwYXJhbSBhcmcxIEEgZ3JhbW1hciBwb29sIGZvciB0aGUgcGFyc2VyLgotICAgKi8KLSAgcHVibGljIExpbmVOdW1iZXJET01QYXJzZXIoU3ltYm9sVGFibGUgYXJnMCwgWE1MR3JhbW1hclBvb2wgYXJnMSkKLSAgewotICAgIHN1cGVyKGFyZzAsIGFyZzEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTERvY3VtZW50SGFuZGxlciNzdGFydEVsZW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MQXR0cmlidXRlcywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnMpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoUU5hbWUgYXJnMCwgWE1MQXR0cmlidXRlcyBhcmcxLCBBdWdtZW50YXRpb25zIGFyZzIpIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIEVsZW1lbnQgZWxlbWVudDsKLSAgICAvLyBGb3IgZWxlbWVudHMgZnJvbSB0aGUgU2NoZW1hIG5hbWVzcGFjZSB3ZSB3YW50IHRvIHByZXNlcnZlIHRoZW0KLSAgICAvLyB0aGUgd2F5IHRoZXkgd2VyZSBlbnRlcmVkLiBSZXZlcnQgdGhlIHZhbHVlcyB0byB0aGUgbm9uLW5vcm1hbGl6ZWQgdmFsdWVzLgotICAgIFN0cmluZyBucyA9IGFyZzAudXJpOwotICAgIGlmKG5zICE9IG51bGwgJiYgKG5zLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKSB8fCBucy5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgbnMuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKSkKLSAgICB7Ci0gICAgICBpbnQgbnVtYXR0cyA9IGFyZzEuZ2V0TGVuZ3RoKCk7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtYXR0czsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9uTm9ybWFsaXplZFZhbHVlID0gYXJnMS5nZXROb25Ob3JtYWxpemVkVmFsdWUoaSk7Ci0gICAgICAgIGFyZzEuc2V0VmFsdWUoaSwgbm9uTm9ybWFsaXplZFZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIuc3RhcnRFbGVtZW50KGFyZzAsIGFyZzEsIGFyZzIpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGVsZW1lbnQgPSAoRWxlbWVudClnZXRQcm9wZXJ0eShDVVJSRU5UX0VMRU1FTlRfTk9ERSk7Ci0gICAgICBFbGVtZW50SW1wbCBlbGVtZW50SW1wbCA9IChFbGVtZW50SW1wbCllbGVtZW50OwotICAgICAgLy8gU2V0dGluZyB0aGUgdXNlciBkYXRhIHdpdGggYW4gaWRlbnRpZmllciBzdWNoIGFzIEVsZW1lbnRMb2NhdGlvbi5LRVlfTkFNRQotICAgICAgLy8gbWF5IGJlIGEgbG9uZyB0ZXJtIGdvb2QgaWRlYS4gVGhlIHNldFVzZXJEYXRhIG1ldGhvZCB3aXRoIG5vIGlkIGlzIHVzZWQgCi0gICAgICAvLyB0byBzdXBwb3J0IEpWTXMgd2l0aCBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgWGVyY2VzLgotICAgICAgZWxlbWVudEltcGwuc2V0VXNlckRhdGEobmV3IEVsZW1lbnRMb2NhdGlvbihsb2NhdG9yLmdldExpbmVOdW1iZXIoKSwgbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKSkpOwotICAgIH0KLSAgICAvLyBjYXRjaCBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGFuZCBTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gaWYgY2FuJ3QgZ2V0IGVsZW1lbnQKLSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MRG9jdW1lbnRIYW5kbGVyI3N0YXJ0RG9jdW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTExvY2F0b3IsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5OYW1lc3BhY2VDb250ZXh0LCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9ucykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoWE1MTG9jYXRvciBhcmcwLCBTdHJpbmcgYXJnMSwgTmFtZXNwYWNlQ29udGV4dCBhcmcyLCBBdWdtZW50YXRpb25zIGFyZzMpCi0gICAgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgbG9jYXRvciA9IGFyZzA7Ci0gICAgc3VwZXIuc3RhcnREb2N1bWVudChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTljNjMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5GYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5qYXhwLlNBWFBhcnNlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLS8qKgotICogWE1MQ2F0YWxvZyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyLCBvYnRhaW4gYW5kIGRlbGV0ZSBhbiBpbnN0YW5jZQotICogb2YgYW4gWE1MIGNhdGFsb2cuIE1ldGhvZCBkZWZpbml0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHRoZSBjYXRhbG9nIHRvIHNldCBhCi0gKiBsb2NhdGlvbiBpbiB0aGUgY2F0YWxvZyBhbmQgcmVzb2x2ZSBhbiBlbnRpdHkgZnJvbSB0aGUgY2F0YWxvZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2cgaW1wbGVtZW50cyBJWE1MQ2F0YWxvZwotewotICAvL3ByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBfQVBBQ0hFX0ZFQVRVUkVfQ09OVElOVUVfQUZURVJfRkFUQUxfRVJST1IgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL2NvbnRpbnVlLWFmdGVyLWZhdGFsLWVycm9yIjsKLQotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgX0FQQUNIRV9GRUFUVVJFX05BTUVTUEFDRV9QUkVGSVhFUyA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlLXByZWZpeGVzIjsKLQotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgX0FQQUNIRV9GRUFUVVJFX05BTUVTUEFDRVMgPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZXMiOwotCi0gIC8vcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIF9BUEFDSEVfRkVBVFVSRV9WQUxJREFUSU9OID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIjsKLQotICAvL3ByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBfQVBBQ0hFX0ZFQVRVUkVfVkFMSURBVElPTl9TQ0hFTUEgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIjsKLSAgCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsKLQotICBwcml2YXRlIHN0YXRpYyBJWE1MQ2F0YWxvZyBpbnN0YW5jZSA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGV4dHhtbGNhdGFsb2djbGFzcyA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NMb2FkZXIgZXh0Y2xhc3NMb2FkZXIgPSBudWxsOwotCi0gIHByaXZhdGUgc3RhdGljIElYTUxDYXRhbG9nIGV4dFhNTENhdGFsb2dJbnN0YW5jZSA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdCBzY2hlbWFkaXJzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIHByaXZhdGUgc3RhdGljIExpc3QgZW50aXRpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEEgaGFzaHRhYmxlIHRvIGhvbGQgdGhlIFhNTCBjYXRhbG9nIGVudHJpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgTWFwIGNhdGFsb2cgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cuIEFzc2lnbnMgYWxsIHJlZ2lzdGVyZWQgc2NoZW1hcyB0bwotICAgKiB0aGUgWE1MIGNhdGFsb2cuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElYTUxDYXRhbG9nIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IFhNTENhdGFsb2coKTsKLQotICAgICAgLy8gQWRkIHRoZSByZWdpc3RlcmVkIGVudGl0aWVzIHRvIHRoZSBjYXRhbG9nLgotICAgICAgSXRlcmF0b3IgZW50aXR5SXRlciA9IGVudGl0aWVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZW50aXR5SXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFhNTENhdGFsb2dFbnRpdHlIb2xkZXIgZW50aXR5ID0gKFhNTENhdGFsb2dFbnRpdHlIb2xkZXIpIGVudGl0eUl0ZXIubmV4dCgpOwotICAgICAgICBpbnN0YW5jZS5hZGRFbnRyeVRvQ2F0YWxvZyhlbnRpdHkuZ2V0UHVibGljSWQoKSwgZW50aXR5LmdldFN5c3RlbUlkKCkpOwotICAgICAgfQotCi0gICAgICAvLyBBZGQgdGhlIHNjaGVtYXMgaW4gdGhlIHNjaGVtYSBkaXJlY3RvcmllcyB0byB0aGUgY2F0YWxvZy4KLSAgICAgIGlmIChzY2hlbWFkaXJzLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFNBWFBhcnNlciBzYXhQYXJzZXIgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFNBWFBhcnNlckZhY3RvcnkgcGFyc2VyZmFjdG9yeSA9IG5ldyBTQVhQYXJzZXJGYWN0b3J5SW1wbCgpOwotICAgICAgICAgIHBhcnNlcmZhY3Rvcnkuc2V0RmVhdHVyZShfQVBBQ0hFX0ZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTLCB0cnVlKTsKLSAgICAgICAgICBwYXJzZXJmYWN0b3J5LnNldEZlYXR1cmUoX0FQQUNIRV9GRUFUVVJFX05BTUVTUEFDRVMsIHRydWUpOwotICAgICAgICAgIHNheFBhcnNlciA9IHBhcnNlcmZhY3RvcnkubmV3U0FYUGFyc2VyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgSXRlcmF0b3Igc2NoZW1hZGlySXRlciA9IHNjaGVtYWRpcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgU2NoZW1hTmFtZXNwYWNlSGFuZGxlciBoYW5kbGVyID0gKChYTUxDYXRhbG9nKSBpbnN0YW5jZSkubmV3IFNjaGVtYU5hbWVzcGFjZUhhbmRsZXIoKTsKLSAgICAgICAgd2hpbGUgKHNjaGVtYWRpckl0ZXIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHNjaGVtYWRpciA9IChTdHJpbmcpIHNjaGVtYWRpckl0ZXIubmV4dCgpOwotICAgICAgICAgIHJlZ2lzdGVyU2NoZW1hc0ZvckRpcihpbnN0YW5jZSwgc2NoZW1hZGlyLCBzYXhQYXJzZXIsIGhhbmRsZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWdpc3RlciB0aGUgc2NoZW1hcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGFuZCBhbGwgc3ViZGlyZWN0b3JpZXMgd2l0aCB0aGUKLSAgICogWE1MIGNhdGFsb2cuCi0gICAqIAotICAgKiBAcGFyYW0gY2F0YWxvZwotICAgKiAgICAgICAgICBUaGUgY2F0YWxvZyB0byByZWdpc3RlciB0aGUgc2NoZW1hcyB3aXRoLgotICAgKiBAcGFyYW0gc2NoZW1hZGlyCi0gICAqICAgICAgICAgIFRoZSBzY2hlbWEgZGlyZWN0b3J5IHRvIHNlYXJjaCBmb3Igc2NoZW1hIGZpbGVzLgotICAgKiBAcGFyYW0gcGFyc2VyCi0gICAqICAgICAgICAgIFRoZSBTQVhQYXJzZXIgdG8gdXNlIHRvIHBhcnNlIHRoZSBzY2hlbWFzIGZvciB0aGVpcgotICAgKiAgICAgICAgICB0YXJnZXROYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBoYW5kbGVyCi0gICAqICAgICAgICAgIFRoZSBoYW5kbGVyIHRvIHVzZSB0byBnZXQgdGhlIHRhcmdldE5hbWVzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgcmVnaXN0ZXJTY2hlbWFzRm9yRGlyKElYTUxDYXRhbG9nIGNhdGFsb2csIFN0cmluZyBzY2hlbWFkaXIsIFNBWFBhcnNlciBwYXJzZXIsCi0gICAgICBTY2hlbWFOYW1lc3BhY2VIYW5kbGVyIGhhbmRsZXIpCi0gIHsKLSAgICAvLyBSZW1vdmUgZmlsZTogYW5kIGZpbGU6LyBmcm9tIGJlZ2lubmluZyBvZiBmaWxlIGxvY2F0aW9uIGlmIHRoZXkgYXJlIHByZXNlbnQuCi0gICAgaWYoc2NoZW1hZGlyLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gICAgewotICAgICAgc2NoZW1hZGlyID0gc2NoZW1hZGlyLnN1YnN0cmluZyg1KTsKLSAgICB9Ci0gICAgd2hpbGUoc2NoZW1hZGlyLnN0YXJ0c1dpdGgoIi8vIikpCi0gICAgewotICAgICAgc2NoZW1hZGlyID0gc2NoZW1hZGlyLnN1YnN0cmluZygxKTsKLSAgICB9Ci0gICAgCi0gICAgRmlsZSBkaXIgPSBuZXcgRmlsZShzY2hlbWFkaXIpOwotICAgIGlmIChkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBGaWxlW10gZmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7Ci0gICAgICBpbnQgbnVtZmlsZXMgPSBmaWxlcy5sZW5ndGg7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWZpbGVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEZpbGUgdGVtcGZpbGUgPSBmaWxlc1tpXTsKLSAgICAgICAgU3RyaW5nIHRlbXBmaWxlcGF0aCA9IHRlbXBmaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICB0ZW1wZmlsZXBhdGggPSB0ZW1wZmlsZXBhdGgucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgIHdoaWxlKHRlbXBmaWxlcGF0aC5zdGFydHNXaXRoKCIvIikpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZW1wZmlsZXBhdGggPSB0ZW1wZmlsZXBhdGguc3Vic3RyaW5nKDEpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBmaWxlcGF0aCA9IEZJTEVfUFJPVE9DT0wgKyB0ZW1wZmlsZXBhdGg7Ci0gICAgICAgIGlmICh0ZW1wZmlsZS5pc0RpcmVjdG9yeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVnaXN0ZXJTY2hlbWFzRm9yRGlyKGNhdGFsb2csIHRlbXBmaWxlcGF0aCwgcGFyc2VyLCBoYW5kbGVyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVyLnJlc2V0KCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcGFyc2VyLnBhcnNlKHRlbXBmaWxlcGF0aCwgaGFuZGxlcik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBsb2cgZXJyb3IuCi0gICAgICAgICAgfQotICAgICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBoYW5kbGVyLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXRhbG9nLmFkZEVudHJ5VG9DYXRhbG9nKHRhcmdldE5hbWVzcGFjZSwgdGVtcGZpbGVwYXRoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YW5jZSBvZiB0aGUgZXh0ZW5zaW9uIFhNTCBjYXRhbG9nLiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBpZiBvbmUKLSAgICogaXMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIGNyZWF0ZWQsIG51bGwgb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGV4dGVuc2lvbiBYTUwgY2F0YWxvZyBpZiBvbmUgaXMgcmVnaXN0ZXJlZCwKLSAgICogICAgICAgICBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVhNTENhdGFsb2cgZ2V0RXh0ZW5zaW9uQ2F0YWxvZ0luc3RhbmNlKCkKLSAgewotICAgIGlmIChleHRYTUxDYXRhbG9nSW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZXh0eG1sY2F0YWxvZ2NsYXNzICE9IG51bGwgJiYgZXh0Y2xhc3NMb2FkZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBDbGFzcyBjYXRhbG9nQ2xhc3MgPSBleHRjbGFzc0xvYWRlciAhPSBudWxsID8gZXh0Y2xhc3NMb2FkZXIubG9hZENsYXNzKGV4dHhtbGNhdGFsb2djbGFzcykgOiBDbGFzcwotICAgICAgICAgICAgICAuZm9yTmFtZShleHR4bWxjYXRhbG9nY2xhc3MpOwotICAgICAgICAgIGV4dFhNTENhdGFsb2dJbnN0YW5jZSA9IChJWE1MQ2F0YWxvZykgY2F0YWxvZ0NsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy9UT0RPOiBMb2cgZXJyb3IKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZXh0WE1MQ2F0YWxvZ0luc3RhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgY2xhc3Mgb2YgdGhlIFhNTCBjYXRhbG9nIHRvIGJlIHVzZWQuCi0gICAqIAotICAgKiBAcGFyYW0geG1sY2F0YWxvZwotICAgKiAgICAgICAgICBUaGUgY2xhc3Mgb2YgdGhlIFhNTCBjYXRhbG9nIHRvIGJlIHVzZWQuCi0gICAqIEBwYXJhbSBjbGFzc2xvYWRlcgotICAgKiAgICAgICAgICBUaGUgY2xhc3Nsb2FkZXIgdG8gdXNlIHRvIGxvYWQgdGhlIGNhdGFsb2cuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RXh0ZW5zaW9uWE1MQ2F0YWxvZyhTdHJpbmcgeG1sY2F0YWxvZywgQ2xhc3NMb2FkZXIgY2xhc3Nsb2FkZXIpCi0gIHsKLSAgICBleHR4bWxjYXRhbG9nY2xhc3MgPSB4bWxjYXRhbG9nOwotICAgIGV4dGNsYXNzTG9hZGVyID0gY2xhc3Nsb2FkZXI7Ci0gIH0KLQotICAvKioKLSAgICogUmVzZXRzIHRoZSBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cgdG8gbnVsbC4gRm9yIGRlbGV0aW5nIHRoZSBjYXRhbG9nIGlmCi0gICAqIG5lY2Vzc2FyeS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldCgpCi0gIHsKLSAgICBpbnN0YW5jZSA9IG51bGw7Ci0gICAgZXh0eG1sY2F0YWxvZ2NsYXNzID0gbnVsbDsKLSAgICBleHRjbGFzc0xvYWRlciA9IG51bGw7Ci0gICAgZXh0WE1MQ2F0YWxvZ0luc3RhbmNlID0gbnVsbDsKLSAgICBlbnRpdGllcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBzY2hlbWFkaXJzID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhIHNjaGVtYSBkaXJlY3RvcnkgdG8gYmUgY2hlY2tlZCBmb3Igc2NoZW1hcyB0byByZWdpc3RlciBpbiB0aGUKLSAgICogY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWFkaXIKLSAgICogICAgICAgICAgVGhlIGRpcmVjdG9yeSB0byBjaGVjayBmb3Igc2NoZW1hcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRTY2hlbWFEaXIoU3RyaW5nIHNjaGVtYWRpcikKLSAgewotICAgIHNjaGVtYWRpcnMuYWRkKHNjaGVtYWRpcik7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGFuIGVudGl0eSB0byB0aGUgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBlbnRpdHkKLSAgICogICAgICAgICAgVGhlIGVudGl0eSB0byBhZGQgdG8gdGhlIGNhdGFsb2cuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkRW50aXR5KFhNTENhdGFsb2dFbnRpdHlIb2xkZXIgZW50aXR5KQotICB7Ci0gICAgZW50aXRpZXMuYWRkKGVudGl0eSk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuaW50ZXJuYWwueG1sLklYTUxDYXRhbG9nI2FkZEVudHJ5VG9DYXRhbG9nKGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudHJ5VG9DYXRhbG9nKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgY2F0YWxvZy5wdXQocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5pbnRlcm5hbC54bWwuSVhNTENhdGFsb2cjcmVzb2x2ZUVudGl0eUxvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgU3RyaW5nIHJlc29sdmVkbG9jYXRpb24gPSBudWxsOwotICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIHVzaW5nIHRoZSBleHQgY2F0YWxvZy4KLSAgICBJWE1MQ2F0YWxvZyBleHRjYXRhbG9nID0gZ2V0RXh0ZW5zaW9uQ2F0YWxvZ0luc3RhbmNlKCk7Ci0gICAgaWYgKGV4dGNhdGFsb2cgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXNvbHZlZGxvY2F0aW9uID0gZXh0Y2F0YWxvZy5yZXNvbHZlRW50aXR5TG9jYXRpb24ocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICB9Ci0gICAgaWYgKHJlc29sdmVkbG9jYXRpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBpZiB0aGVyZSdzIG5vIHN5c3RlbSBpZCB1c2UgdGhlIHB1YmxpYyBpZAotICAgICAgaWYgKHN5c3RlbUlkID09IG51bGwgfHwgc3lzdGVtSWQuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgc3lzdGVtSWQgPSBwdWJsaWNJZDsKLSAgICAgIH0KLSAgICAgIHJlc29sdmVkbG9jYXRpb24gPSAoU3RyaW5nKSBjYXRhbG9nLmdldChzeXN0ZW1JZCk7Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlZGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEEgaGFuZGxlciB1c2VkIGluIHBhcnNpbmcgdG8gZ2V0IHRoZSB0YXJnZXROYW1lc3BhY2Ugc3RyaW5nIG9mIGEgc2NoZW1hLgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIFNjaGVtYU5hbWVzcGFjZUhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEFSR0VUX05BTUVTUEFDRSA9ICJ0YXJnZXROYW1lc3BhY2UiOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0NIRU1BID0gInNjaGVtYSI7Ci0KLSAgICBwcml2YXRlIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNzdGFydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywKLSAgICAgKiAgICAgIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbG5hbWUsIFN0cmluZyBhcmcyLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICBpZiAobG9jYWxuYW1lLmVxdWFscyhTQ0hFTUEpKQotICAgICAgewotCi0gICAgICAgIGludCBudW1BdHRzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdHRzOyBpKyspCi0gICAgICAgIHsKLQotICAgICAgICAgIFN0cmluZyBhdHRuYW1lID0gYXR0cmlidXRlcy5nZXRRTmFtZShpKTsKLSAgICAgICAgICBpZiAoYXR0bmFtZS5lcXVhbHMoVEFSR0VUX05BTUVTUEFDRSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gYXR0cmlidXRlcy5nZXRWYWx1ZShpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgfQotICAgICAgc3VwZXIuc3RhcnRFbGVtZW50KHVyaSwgbG9jYWxuYW1lLCBhcmcyLCBhdHRyaWJ1dGVzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIHRhcmdldE5hbWVzcGFjZSBmb3VuZCBieSBwYXJzaW5nIHRoZSBmaWxlLgotICAgICAqIAotICAgICAqIEByZXR1cm4gVGhlIHRhcmdldE5hbWVzcGFjZSBmb3VuZCBieSBwYXJzaW5nIHRoZSBmaWxlLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gdGFyZ2V0TmFtZXNwYWNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgaGFuZGxlciBzbyBpdCBjYW4gYmUgcmV1c2VkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkKLSAgICB7Ci0gICAgICB0YXJnZXROYW1lc3BhY2UgPSBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nRW50aXR5SG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dFbnRpdHlIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVmOTZkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dFbnRpdHlIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBBIGNvbnRhaW5lciB0byBob2xkIHRoZSBlbnRpdHkgaW5mb3JtYXRpb24gdW50aWwgYW4gWE1MIGNhdGFsb2cgaXMKLSAqIHRvIGJlIGluaXRpYWxpemVkLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ0VudGl0eUhvbGRlcgotewotICBwcml2YXRlIFN0cmluZyBwdWJsaWNJZDsKLSAgcHJpdmF0ZSBTdHJpbmcgc3lzdGVtSWQ7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcHVibGljSWQgVGhlIHB1YmxpYyBpZCBvZiB0aGUgZW50aXR5LgotICAgKiBAcGFyYW0gc3lzdGVtSWQgVGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5LgotICAgKi8KLSAgcHVibGljIFhNTENhdGFsb2dFbnRpdHlIb2xkZXIoU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICB0aGlzLnB1YmxpY0lkID0gcHVibGljSWQ7Ci0gICAgdGhpcy5zeXN0ZW1JZCA9IHN5c3RlbUlkOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqIEByZXR1cm4gVGhlIHB1YmxpYyBpZCBvZiB0aGUgZW50aXR5LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaWNJZCgpCi0gIHsKLSAgICByZXR1cm4gcHVibGljSWQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudGl0eS4KLSAgICogQHJldHVybiBUaGUgc3lzdGVtIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN5c3RlbUlkKCkKLSAgewotICAgIHJldHVybiBzeXN0ZW1JZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZ1Jlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZDBlNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5MYXp5VVJMSW5wdXRTdHJlYW07Ci0KLS8qKgotICogQSByZXNvbHZlciB0byByZXNvbHZlciBlbnRpdGllcyBmcm9tIHRoZSBYTUwgY2F0YWxvZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dSZXNvbHZlciBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgWE1MQ2F0YWxvZ1Jlc29sdmVyIHhtbENhdGFsb2c7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIFhNTENhdGFsb2dSZXNvbHZlcigpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbmNlIG9mIHRoaXMgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHJlc29sdmVyCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFhNTENhdGFsb2dSZXNvbHZlciBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoeG1sQ2F0YWxvZyA9PSBudWxsKQotICAgIHsKLSAgICAgIHhtbENhdGFsb2cgPSBuZXcgWE1MQ2F0YWxvZ1Jlc29sdmVyKCk7Ci0gICAgfQotICAgIHJldHVybiB4bWxDYXRhbG9nOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRQdWJsaWNJZCgpOwotICAgIGlmKHB1YmxpY0lkID09IG51bGwpCi0gICAgewotICAgICAgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgfQotICAgIFN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCkucmVzb2x2ZUVudGl0eUxvY2F0aW9uKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgTGF6eVVSTElucHV0U3RyZWFtIGlzID0gbmV3IExhenlVUkxJbnB1dFN0cmVhbShsb2NhdGlvbik7Ci0gICAgICBYTUxJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgc3lzdGVtSWQsIHN5c3RlbUlkLCBpcywgbnVsbCk7Ci0gICAgICByZXR1cm4gaW5wdXRTb3VyY2U7Ci0gICAgfQotICAgIC8vIG90aGVyd2lzZSByZXR1cm4gbnVsbCB0byB0ZWxsIHRoZSBwYXJzZXIgdG8gbG9jYXRlIHRoZSBzeXN0ZW1JZCBhcyBhIFVSSQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTE1lc3NhZ2VJbmZvSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTE1lc3NhZ2VJbmZvSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0M2FiODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxNZXNzYWdlSW5mb0hlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotcHVibGljIGNsYXNzIFhNTE1lc3NhZ2VJbmZvSGVscGVyCi17Ci0gIAotICAvL3NlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnJlY29uY2lsZS5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFMTF9BVFRSSUJVVEVTID0gIkFMTF9BVFRSSUJVVEVTIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX05BTUUgPSJBVFRSSUJVVEVfTkFNRSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9WQUxVRSA9ICJBVFRSSUJVVEVfVkFMVUUiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFSVF9UQUcgPSAiU1RBUlRfVEFHIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVYVCA9ICJURVhUIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklSU1RfTk9OX1dISVRFU1BBQ0VfVEVYVCA9ICJGSVJTVF9OT05fV0hJVEVTUEFDRV9URVhUIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVYVF9FTlRJVFlfUkVGRVJFTkNFID0gIlRFWFRfRU5USVRZX1JFRkVSRU5DRSI7IAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRSA9ICJWQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRSI7Ci0gIAotICAKLSAgcHVibGljIFhNTE1lc3NhZ2VJbmZvSGVscGVyKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHNob3VsZCBiZSB1bmRlcmxpbmVkIHdpdGggdGhlIHJlZCAic3F1aWdnbGVzIgotICAgKiAgdXNpbmcgdGhlIGVycm9yS2V5LCBhbmQgdGhlIG1lc3NhZ2VBcmd1bWVudHMKLSAgICogIDxicj5Qb3NpdGlvbiAwIG9mIHRoZSBhcnJheSByZXR1cm5lZCBjb250YWlucyB0aGUgc2VsZWN0aW9uIFN0cmF0ZWd5LG9yIHdoYXQgRE9NIEVsZW1lbnQgdG8gdW5kZXJsaW5lLiAgCi0gICAqICBGb3IgZXhhbXBsZSAiQVRUUklCVVRFX05BTUUiICAKLSAgICogIDxicj5Qb3NpdGlvbiAxIGNvbnRhaW5zIHRoZSBuYW1lIG9yIHZhbHVlIHRvIHNxdWlnZ2xlLgotICAgKiAgPHA+Rm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0byBzcXVpZ2dsZSB0aGUgYXR0cmlidXRlIG5hbWUgb2YgYW4gYXR0cmlidXRlIG5hbWUKLSAgICogIGZvbyB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4geyJBVFRSSUJVVEVfTkFNRSIsICJmb28ifQotICAgKiAgPC9wPgotICAgKiAgQHBhcmFtIGVycm9yS2V5IHRoZSBlcnJvciBrZXkgZ2l2ZW4gYnkgdGhlIFhlcmNlcyBwYXJzZXIKLSAgICogIEBwYXJhbSBtZXNzYWdlQXJndW1lbnRzIHRoZSBhcmd1bWVudHMgdXNlZCBieSBYZXJjZXMgdG8gImZpbGwgaW4gdGhlIGJsYW5rcyIgb2YgdGhlaXIgbWVzc2FnZXMKLSAgICogIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgc3F1aWdnbGUgaW5mb3JtYXRpb24KLSAgICogIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5yZWNvbmNpbGUuRGVsZWdhdGluZ1JlY29uY2lsZVZhbGlkYXRvcgotICAgKiAgCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gY3JlYXRlTWVzc2FnZUluZm8oU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKQotICB7IAotICAgIFN0cmluZyBzZWxlY3Rpb25TdHJhdGVneSA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWVPclZhbHVlID0gbnVsbDsKLQotICAgIC8vWE1MIEVycm9ycwotICAgIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMi40LmEiKSB8fCBlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMi40LmQiKSB8fCBlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiKSB8fCBlcnJvcktleS5lcXVhbHMoIk1TR19DT05URU5UX0lOVkFMSUQiKQotICAgICAgICB8IGVycm9yS2V5LmVxdWFscygiTVNHX0NPTlRFTlRfSU5DT01QTEVURSIpIHx8IGVycm9yS2V5LmVxdWFscygiTVNHX1JFUVVJUkVEX0FUVFJJQlVURV9OT1RfU1BFQ0lGSUVEIikgfHwgZXJyb3JLZXkuZXF1YWxzKCJjdmMtY29tcGxleC10eXBlLjQiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneSA9IFNUQVJUX1RBRzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtdHlwZS4zLjEuMyIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5ID0gVEVYVDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtY29tcGxleC10eXBlLjIuMyIpKQotICAgIHsKLSAgICAJc2VsZWN0aW9uU3RyYXRlZ3kgPSBGSVJTVF9OT05fV0hJVEVTUEFDRV9URVhUOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy10eXBlLjMuMS4xIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3kgPSBBTExfQVRUUklCVVRFUzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtY29tcGxleC10eXBlLjMuMi4yIikgfHwgZXJyb3JLZXkuZXF1YWxzKCJNU0dfQVRUUklCVVRFX05PVF9ERUNMQVJFRCIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5ID0gQVRUUklCVVRFX05BTUU7Ci0JICAvL2luIHRoaXMgY2FzZSB3ZSBuZWVkIG5hbWVPclZhbHVlIHRvIGJlIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gdW5kZXJsaW5lCi0JICBuYW1lT3JWYWx1ZSA9IChTdHJpbmcpbWVzc2FnZUFyZ3VtZW50c1sxXTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtYXR0cmlidXRlLjMiKSB8fCBlcnJvcktleS5lcXVhbHMoIk1TR19BVFRSSUJVVEVfVkFMVUVfTk9UX0lOX0xJU1QiKSkKLSAgICB7CQotICAgIAlzZWxlY3Rpb25TdHJhdGVneSA9IEFUVFJJQlVURV9WQUxVRTsgIAotCQkvL2luIHRoaXMgY2FzZSB3ZSBuZWVkIG5hbWVPclZhbHVlIHRvIGJlIHRoZSBuYW1lIG9mIHRoZSBBdHRyaWJ1dGUKLSAgICAJaWYgKGVycm9yS2V5LmVxdWFscygiY3ZjLWF0dHJpYnV0ZS4zIikpCi0gICAgCXsgbmFtZU9yVmFsdWUgPSAoU3RyaW5nKW1lc3NhZ2VBcmd1bWVudHNbMV07Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJNU0dfQVRUUklCVVRFX1ZBTFVFX05PVF9JTl9MSVNUIikpCi0gICAgCXsJbmFtZU9yVmFsdWUgPSAoU3RyaW5nKW1lc3NhZ2VBcmd1bWVudHNbMF07Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtZWx0LjQuMiIpKQotICAgIHsJc2VsZWN0aW9uU3RyYXRlZ3k9VkFMVUVfT0ZfQVRUUklCVVRFX1dJVEhfR0lWRU5fVkFMVUU7Ci0JCS8vaW4gdGhpcyBjYXNlIHdlIG5lZWQgbmFtZU9yVmFsdWUgdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgd2Ugd2FudCB0byB1bmVybGluZQotICAgIAluYW1lT3JWYWx1ZSA9IChTdHJpbmcpbWVzc2FnZUFyZ3VtZW50c1sxXTsJCi0gICAgfQotICAgIGVsc2UgaWYgKGVycm9yS2V5LmVxdWFscygiRW50aXR5Tm90RGVjbGFyZWQiKSkKLSAgICB7ICAJc2VsZWN0aW9uU3RyYXRlZ3k9VEVYVF9FTlRJVFlfUkVGRVJFTkNFOwotICAgIH0KLSAgICAKLSAgICAKLSAgICAvL1dTREwgRXJyb3JzCi0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCIpIHx8Ci0gICAgICAgICAgICAgICBlcnJvcktleS5lcXVhbHMoIl9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQiKSB8fAotICAgICAgICAgICAgICAgZXJyb3JLZXkuZXF1YWxzKCJfTUVTU0FHRV9VTkRFRklORURfRk9SX0ZBVUxUIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3k9QVRUUklCVVRFX1ZBTFVFOwotICAgICAgbmFtZU9yVmFsdWU9ICJtZXNzYWdlIjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJfUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3k9QVRUUklCVVRFX1ZBTFVFOwotICAgICAgbmFtZU9yVmFsdWU9InR5cGUiOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIl9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5PUFUVFJJQlVURV9WQUxVRTsKLSAgICAgIG5hbWVPclZhbHVlPSJuYW1lIjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJfUEFSVF9JTlZBTElEX0VMRU1FTlQiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneT1BVFRSSUJVVEVfVkFMVUU7Ci0gICAgICBuYW1lT3JWYWx1ZT0iZWxlbWVudCI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVycm9yS2V5LmVxdWFscygiX05PX0JJTkRJTkdfRk9SX1BPUlQiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneT1BVFRSSUJVVEVfVkFMVUU7Ci0gICAgICBuYW1lT3JWYWx1ZT0iYmluZGluZyI7Ci0gICAgfQotICAgIAotICAgIFN0cmluZyBtZXNzYWdlSW5mb1tdID0gbmV3IFN0cmluZ1syXTsKLSAgICBtZXNzYWdlSW5mb1swXSA9IHNlbGVjdGlvblN0cmF0ZWd5OwotICAgIG1lc3NhZ2VJbmZvWzFdID0gbmFtZU9yVmFsdWU7Ci0gICAgcmV0dXJuIG1lc3NhZ2VJbmZvOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhY2EyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBDb25zdGFudHMgZm9yIHN0cmluZ3MgIAotCi0hLS0gRXJyb3Igd2l0aCBkb2N1bWVudCBsb2NhdGlvbgotX0VSUk9SX0RPQ1VNRU5UX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgID0gVGhlIFdTREwgZG9jdW1lbnQgezB9IGNvdWxkIG5vdCBiZSByZWFkLgotIS0tIFdhcm5pbmcgTWVzc2FnZXMKLV9XQVJOX05PX1ZBTERJQVRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IFRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGZvciB0aGUgbmFtZXNwYWNlIHswfS4KLQotX0VSUk9SX1BST0JMRU1fV1NETF9WQUxJREFUT1IgICAgICAgICAgICAgID0gQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHJ1bm5pbmcgdGhlIFdTREwgdmFsaWRhdG9yIGZvciBuYW1lc3BhY2UgezB9LgotX0VSUk9SX05PX1dTRExfVkFMSURBVE9SICAgICAgICAgICAgICAgICAgID0gVGhlIG5hbWVzcGFjZSB7MH0gc3BlY2lmaWVkIGlzIG5vdCBhIHZhbGlkIFdTREwgbmFtZXNwYWNlLgotX0VSUk9SX1BST0JMRU1fRVhUX1ZBTElEQVRPUiAgICAgICAgICAgICAgID0gQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHJ1bm5pbmcgdGhlIEV4dGVuc2lvbiB2YWxpZGF0b3IgezB9IGZvciBuYW1lc3BhY2UgezF9LgotCi0hLS0gU3RyaW5ncyBmb3IgV1NETCAxLjEgdmFsaWRhdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1fVU5BQkxFX1RPX0lNUE9SVF9CQURfTE9DQVRJT04gICAgICAgICAgICAgPSBUaGUgezB9IGRvY3VtZW50IGNvdWxkIG5vdCBiZSBpbXBvcnRlZC4gQ2hlY2sgdGhhdCB0aGUgZG9jdW1lbnQgZXhpc3RzIGFuZCB0aGF0IHRoZSBsb2NhdGlvbiBpcyBjb3JyZWN0LgotX1VOQUJMRV9UT19JTVBPUlRfTk9fTE9DQVRJT04gICAgICAgICAgICAgID0gVGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBpcyBlbXB0eS4gQSBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBmb3IgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZS4KLV9VTkFCTEVfVE9fSU1QT1JUX0lOVkFMSUQgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gZG9jdW1lbnQgY291bGQgbm90IGJlIGltcG9ydGVkIGJlY2F1c2UgaXQgaXMgbm90IHZhbGlkLiBUaGUgZG9jdW1lbnQgbXVzdCBiZSBjb3JyZWN0ZWQgYmVmb3JlIGl0IGNhbiBiZSBpbXBvcnRlZC4KLV9OT19CSU5ESU5HX0ZPUl9QT1JUICAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gcG9ydCBoYXMgYW4gaW52YWxpZCBiaW5kaW5nIC0gezF9LiBDaGVjayB0aGF0IHRoZSB7MX0gYmluZGluZyBpcyBkZWZpbmVkLgotX1BPUlRUWVBFX1VOREVGSU5FRF9GT1JfQklORElORyAgICAgICAgICAgID0gVGhlIHswfSBwb3J0IHR5cGUgc3BlY2lmaWVkIGZvciB0aGUgezF9IGJpbmRpbmcgaXMgdW5kZWZpbmVkLiBDaGVjayB0aGUgezB9IHBvcnQgdHlwZSBuYW1lIGFuZCBlbnN1cmUgaXQgaXMgZGVmaW5lZC4KLV9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSAgICAgICAgICA9IFRoZSBvcGVyYXRpb24gc3BlY2lmaWVkIGZvciB0aGUgezB9IGJpbmRpbmcgaXMgbm90IGRlZmluZWQgZm9yIHBvcnQgdHlwZSB7MX0uIEFsbCBvcGVyYXRpb25zIHNwZWNpZmllZCBpbiB0aGlzIGJpbmRpbmcgbXVzdCBiZSBkZWZpbmVkIGluIHBvcnQgdHlwZSB7MX0uCi1fSU5QVVRfTkFNRV9OT1RfVU5JUVVFICAgICAgICAgICAgICAgICAgICAgPSBUaGUgbmFtZSB7MH0gc3BlY2lmaWVkIGZvciB0aGlzIGlucHV0IGVsZW1lbnQgaXMgbm90IHVuaXF1ZS4gVGhlIG5hbWUgb2YgYW4gaW5wdXQgZWxlbWVudCBtdXN0IGJlIHVuaXF1ZSBmcm9tIHRoZSBuYW1lcyBvZiBhbGwgb3RoZXIgaW5wdXQgYW5kIG91dHB1dCBlbGVtZW50cyBkZWZpbmVkIGluIHRoZSB7MX0gcG9ydCB0eXBlLgotX09VVFBVVF9OQU1FX05PVF9VTklRVUUgICAgICAgICAgICAgICAgICAgID0gVGhlIG5hbWUgezB9IHNwZWNpZmllZCBmb3IgdGhpcyBvdXRwdXQgZWxlbWVudCBpcyBub3QgdW5pcXVlLiBUaGUgbmFtZSBvZiBhbiBvdXRwdXQgZWxlbWVudCBtdXN0IGJlIHVuaXF1ZSBmcm9tIHRoZSBuYW1lcyBvZiBhbGwgb3RoZXIgaW5wdXRzIGFuZCBvdXRwdXQgZWxlbWVudHMgZGVmaW5lZCBpbiB0aGUgezF9IHBvcnQgdHlwZS4KLV9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQgICAgICAgICAgICAgICA9IFRoZSBpbnB1dCBlbGVtZW50IGlzIHJlZmVyZW5jaW5nIGFuIHVuZGVmaW5lZCBtZXNzYWdlIHswfS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4KLV9NRVNTQUdFX1VOREVGSU5FRF9GT1JfT1VUUFVUICAgICAgICAgICAgICA9IFRoZSBvdXRwdXQgZWxlbWVudCBpcyByZWZlcmVuY2luZyBhbiB1bmRlZmluZWQgbWVzc2FnZSB7MH0uIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2UgbmFtZSBhbmQgbmFtZXNwYWNlIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoZSBtZXNzYWdlIGhhcyBiZWVuIGRlZmluZWQuCi1fTUVTU0FHRV9VTkRFRklORURfRk9SX0ZBVUxUICAgICAgICAgICAgICAgPSBUaGUgZmF1bHQgZWxlbWVudCBpcyByZWZlcmVuY2luZyBhbiB1bmRlZmluZWQgbWVzc2FnZSB7MH0uIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2UgbmFtZSBhbmQgbmFtZXNwYWNlIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoZSBtZXNzYWdlIGhhcyBiZWVuIGRlZmluZWQuCi1fRFVQTElDQVRFX0ZBVUxUX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBBIGZhdWx0IHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBmb3IgdGhlIHsxfSAwcGVyYXRpb24uIENoZWNrIHRoYXQgZXZlcnkgZmF1bHQgZGVmaW5lZCBmb3IgdGhpcyBvcGVyYXRpb24gaGFzIGEgdW5pcXVlIG5hbWUuCi1fUEFSVF9OT19FTEVNRU5UX09SX1RZUEUgICAgICAgICAgICAgICAgICAgPSBUaGUgcGFydCB7MH0gZG9lcyBub3QgaGF2ZSBhIHR5cGUgZGVmaW5lZC4gRXZlcnkgcGFydCBtdXN0IHNwZWNpZnkgYSB0eXBlIGZyb20gc29tZSB0eXBlIHN5c3RlbS4gVGhlIHR5cGUgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgYnVpbHQgaW4gImVsZW1lbnQiIG9yICJ0eXBlIiBhdHRyaWJ1dGVzIG9yIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcgYW4gZXh0ZW5zaW9uIGF0dHJpYnV0ZS4KLV9QQVJUX0JPVEhfRUxFTUVOVF9BTkRfVFlQRSAgICAgICAgICAgICAgICA9IFRoZSBwYXJ0IHswfSBoYXMgYm90aCBhbiBlbGVtZW50IGFuZCBhIHR5cGUgZGVmaW5lZC4gRXZlcnkgcGFydCBtdXN0IG9ubHkgaGF2ZSBhbiBlbGVtZW50IG9yIGEgdHlwZSBkZWZpbmVkLgotX1BBUlRfSU5WQUxJRF9FTEVNRU5UICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHBhcnQgezB9IGhhcyBhbiBpbnZhbGlkIHZhbHVlIHsxfSBkZWZpbmVkIGZvciBpdHMgZWxlbWVudC4gRWxlbWVudCBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4KLV9QQVJUX0lOVkFMSURfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICA9IFRoZSBwYXJ0IHswfSBoYXMgYW4gaW52YWxpZCB2YWx1ZSB7MX0gZGVmaW5lZCBmb3IgaXRzIHR5cGUuIFR5cGUgZGVjbGFyYXRpb25zIG11c3QgcmVmZXIgdG8gdmFsaWQgdmFsdWVzIGRlZmluZWQgaW4gYSBzY2hlbWEuCi1fRFVQTElDQVRFX09QRVJBVElPTl9GT1JfUE9SVFRZUEUgICAgICAgICAgPSBBbiBvcGVyYXRpb24gd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGZvciB0aGUgezF9IHBvcnQgdHlwZS4gRXZlcnkgb3BlcmF0aW9uIGRlZmluZWQgZm9yIGEgcG9ydCB0eXBlIG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lLiAKLV9TRVJWSUNFX05BTUVfQUxSRUFEWV9ERUZJTkVEICAgICAgICAgICAgICA9IEEgU2VydmljZSB3aXRoIHRoZSBuYW1lIHswfSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIEV2ZXJ5IHNlcnZpY2UgaW4gdGhlIFdTREwgZG9jdW1lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCi1fQklORElOR19OQU1FX0FMUkVBRFlfREVGSU5FRCAgICAgICAgICAgICAgPSBBIGJpbmRpbmcgd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiBFdmVyeSBiaW5kaW5nIGluIHRoZSBXU0RMIGRvY3VtZW50IG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lLgotX01FU1NBR0VfTkFNRV9BTFJFQURZX0RFRklORUQgICAgICAgICAgICAgID0gQSBtZXNzYWdlIHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gRXZlcnkgbWVzc2FnZSBpbiB0aGUgV1NETCBkb2N1bWVudCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4KLV9QT1JUVFlQRV9OQU1FX0FMUkVBRFlfREVGSU5FRCAgICAgICAgICAgICA9IEEgcG9ydCB0eXBlIHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gRXZlcnkgcG9ydCB0eXBlIGluIHRoZSBXU0RMIGRvY3VtZW50IG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lLgotX01PUkVfVEhFTl9PTkVfQUREUkVTU19QT1JUICAgICAgICAgICAgICAgID0gQW4gYWRkcmVzcyBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgZm9yIHBvcnQgezB9LiBFYWNoIHBvcnQgY2FuIGhhdmUgb25seSBvbmUgYWRkcmVzcyBkZWZpbmVkLgotX05PX0FERFJFU1NfUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHBvcnQgezB9IGhhcyBubyBhZGRyZXNzIGRlZmluZWQuIEVhY2ggcG9ydCBtdXN0IGRlZmluZSBvbmUgYWRkcmVzcy4KLV9QT1JUX05BTUVfTk9UX1VOSVFVRSAgICAgICAgICAgICAgICAgICAgICA9IEEgcG9ydCB3aXRoIHRoZSBuYW1lIHswfSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIEV2ZXJ5IHBvcnQgaW4gdGhlIFdTREwgZG9jdW1lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCi1fT1BFUkFUSU9OX05PX0lOUFVUX09SX09VVFBVVCAgICAgICAgICAgICAgPSBObyBpbnB1dCBvciBvdXRwdXQgZWxlbWVudCBoYXMgYmVlbiBkZWZpbmVkIGZvciB0aGUgezB9IG9wZXJhdGlvbi4gQW4gaW5wdXQgZWxlbWVudCwgYW4gb3V0cHV0IGVsZW1lbnQsIG9yIGJvdGggbXVzdCBiZSBkZWZpbmVkIGZvciBldmVyeSBvcGVyYXRpb24uCi1fV0FSTl9TT0FQRU5DX0lNUE9SVEVEX1BBUlQgICAgICAgICAgICAgICAgPSBUaGUgcGFydCB7MH0gdXNlcyBhbiBlbGVtZW50IG9yIHR5cGUgZnJvbSB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgYnV0IHRoZSBuYW1lc3BhY2UgaGFzIG5vdCBiZWVuIGltcG9ydGVkLiBUaGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2Ugc2hvdWxkIGJlIGltcG9ydGVkIHdpdGggYW4gaW1wb3J0IHN0YXRlbWVudCBiZWZvcmUgaXQgaXMgdXNlZC4KLV9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BICAgICAgICAgICAgICA9IFRoZSBpbmxpbmUgc2NoZW1hIHVzZXMgYW4gZWxlbWVudCBvciB0eXBlIGZyb20gdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIGJ1dCB0aGUgbmFtZXNwYWNlIGhhcyBub3QgYmVlbiBpbXBvcnRlZC4gVGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIHNob3VsZCBiZSBpbXBvcnRlZCB3aXRoIGFuIGltcG9ydCBzdGF0ZW1lbnQgYmVmb3JlIGl0IGlzIHVzZWQuCi1fUkVGRVJFTkNFRF9GSUxFX0NPTlRBSU5TX0VSUk9SUyAgICAgICAgICAgPSBSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh7MH0pLgotX1dBUk5fT0xEX1NDSEVNQV9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgID0gQW4gb2xkIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBuYW1lc3BhY2UgaGFzIGJlZW4gc3BlY2lmaWVkLiB7MH0gaXMgdGhlIHNjaGVtYSBuYW1lc3BhY2UgdGhhdCBzaG91bGQgYmUgdXNlZC4KLV9FUlJPUl9NVUxUSVBMRV9UWVBFU19ERUZJTkVEICAgICAgICAgICAgICA9IEEgdHlwZXMgc2VjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIE9ubHkgb25lIHR5cGVzIGVsZW1lbnQgaXMgYWxsb3dlZC4KLV9XQVJOX1dST05HX05TX09OX0lNUE9SVCAgICAgICAgICAgICAgICAgICA9IFRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgezB9IGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgbmFtZXNwYWNlIHsxfSBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuCi0hLS0gUmVmZXJlbmNlZCBmaWxlIGVycm9yCi0hLS0gTm90ZSB0byB0cmFuc2xhdG9yIC0gX1JFRl9GSUxFX0VSUk9SX01FU1NBR0UgbmVlZHMgYSB0cmFpbGluZyBzcGFjZSBhcyBhbm90aGVyIG1lc3NhZ2UgbWF5IGZvbGxvdy4KLV9SRUZfRklMRV9FUlJPUl9NRVNTQUdFICAgICAgICAgID0gUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAoezB9KS4gCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGxodHRwLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbGh0dHAucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5MzkwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbGh0dHAucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLV9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyAgICAgICAgICAgICAgICAgICA9IE5vIGxvY2F0aW9uIGhhcyBiZWVuIHNwZWNpZmllZCBmb3IgdGhpcyBhZGRyZXNzLiBFdmVyeSBhZGRyZXNzIG11c3QgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uIHNwZWNpZmllZC4KLV9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgSFRUUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnQgaXMgImFkZHJlc3MiLgotX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBIVFRQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiYmluZGluZyIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX09QRVJBVElPTl9FTEVNRU5UICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIEhUVFAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50IGlzICJvcGVyYXRpb24iLgotX0VSUk9SX0lOVkFMSURfQklORElOR19JTlBVVF9FTEVNRU5UICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBIVFRQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudHMgYXJlICJ1cmxSZXBsYWNlbWVudCIgYW5kICJ1cmxFbmNvZGVkIi4KLV9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04gICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBjYW5ub3QgYmUgc3BlY2lmaWVkIGhlcmUuIFRoaXMgZWxlbWVudCBpcyBub3QgZGVmaW5lZCBpbiB0aGUgSFRUUCBuYW1lc3BhY2UgZm9yIHVzZSBhdCB0aGlzIHBvaW50LgotX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9BRERSRVNTICAgICAgICAgICAgICAgID0gQW4gSFRUUCBhZGRyZXNzIGNhbm5vdCBiZSBzcGVjaWZpZWQgaGVyZSBhcyB0aGUgezB9IGJpbmRpbmcgdGhhdCB0aGUgezF9IHBvcnQgcmVmZXJzIHRvIGRvZXMgbm90IGhhdmUgYW4gSFRUUCBiaW5kaW5nIGVsZW1lbnQgZGVmaW5lZC4gVGhlcmUgbXVzdCBiZSBhbiBIVFRQIGJpbmRpbmcgZWxlbWVudCBkZWZpbmVkIGluIG9yZGVyIHRvIHNwZWNpZnkgYW4gSFRUUCBhZGRyZXNzIGZvciBhIGJpbmRpbmcuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX1ZFUkIgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IHZlcmIgZGVmaW5lZCBmb3IgdGhlIEhUVFAgYmluZGluZyBpcyBpbnZhbGlkLiBUaGUgSFRUUCBiaW5kaW5nIHZlcmIgbXVzdCBiZSAiR0VUIiBvciAiUE9TVCIgYW5kIGlzIGNhc2Ugc2Vuc2l0aXZlLgotX0VSUk9SX0lOVkFMSURfTE9DQVRJT05fVVJJICAgICAgICAgICAgICAgICAgICAgID0gVGhlIGxvY2F0aW9uIFVSSSBpcyBpbnZhbGlkIGZvciB0aGUgSFRUUCBvcGVyYXRpb24uIFlvdSBtdXN0IHNwZWNpZnkgYSB2YWxpZCBsb2NhdGlvbiBVUkkgZm9yIGV2ZXJ5IEhUVFAgT3BlcmF0aW9uLgotX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04gICAgICAgICAgICAgID0gVGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIEhUVFAgb3BlcmF0aW9uIGlzIHNwZWNpZmllZCBmb3IgZG9lcyBub3QgaGF2ZSBhbiBIVFRQIGJpbmRpbmcgZGVmaW5lZC4gQW4gSFRUUCBiaW5kaW5nIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBkZWZpbmUgYW4gSFRUUCBvcGVyYXRpb24gaGVyZS4KLV9FUlJPUl9OT19IVFRQT1BFUkFUSU9OX0ZPUl9VUkwgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gb3BlcmF0aW9uIHRoYXQgdGhlIHsxfSBIVFRQIGVsZW1lbnQgaXMgc3BlY2lmaWVkIGZvciBkb2VzIG5vdCBoYXZlIGFuIEhUVFAgb3BlcmF0aW9uIGRlZmluZWQuIEEgSFRUUCBvcGVyYXRpb24gbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGRlZmluZSBhIHsxfSBIVFRQIGVsZW1lbnQgaGVyZS4KLV9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gSFRUUCBlbGVtZW50IGRlZmluZWQgaXMgbm90IHRoZSBvbmx5IGVsZW1lbnQgZGVmaW5lZCBmb3IgdGhlIGlucHV0IGVsZW1lbnQuIFdoZW4gezB9IGlzIGRlZmluZWQgaXQgbXVzdCBiZSB0aGUgb25seSBjaGlsZCBlbGVtZW50IGRlZmluZWQgZm9yIHRoZSBpbnB1dCBlbGVtZW50LgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGxtaW1lLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbG1pbWUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzZTdiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbG1pbWUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGxzb2FwLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHNvYXAucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmMDNkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHNvYXAucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTICAgICAgICAgICAgICAgICAgID0gTm8gbG9jYXRpb24gaGFzIGJlZW4gc3BlY2lmaWVkIGZvciB0aGlzIGFkZHJlc3MuIEV2ZXJ5IGFkZHJlc3MgbXVzdCBoYXZlIGEgdmFsaWQgbG9jYXRpb24gc3BlY2lmaWVkLgotX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UICAgICAgICAgICAgICAgICAgICAgID0gVGhlICB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgU09BUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnQgaXMgImFkZHJlc3MiLgotX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBzdHlsZSBkZWZpbmVkIGZvciB0aGUgU09BUCBiaW5kaW5nIGluIGludmFsaWQuIFRoZSBTT0FQIGJpbmRpbmcgc3R5bGUgbXVzdCBiZSAicnBjIiBvciAiZG9jdW1lbnQiLgotX0VSUk9SX0lOVkFMSURfQklORElOR19VUkkgICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHRyYW5zcG9ydCBVUkkgaGFzIG5vdCBiZWVuIGRlZmluZWQgZm9yIHRoZSBTT0FQIGJpbmRpbmcuIFlvdSBtdXN0IHNwZWNpZnkgYSB0cmFuc3BvcnQgVVJJIGZvciBldmVyeSBTT0FQIGJpbmRpbmcuCi1fRVJST1JfSU5WQUxJRF9PUEVSQVRJT05fU1RZTEUgICAgICAgICAgICAgICAgICAgPSBUaGUgc3R5bGUgc3BlY2lmaWVkIGZvciB0aGUgU09BUCBvcGVyYXRpb24gaXMgaW52YWxpZC4gVGhlIFNPQVAgb3BlcmF0aW9uIHN0eWxlIG11c3QgYmUgInJwYyIgb3IgImRvY3VtZW50Ii4KLV9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgU09BUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnQgaXMgImJpbmRpbmciLgotX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAib3BlcmF0aW9uIi4KLV9FUlJPUl9JTlZBTElEX0hFQURFUl9CT0RZX0VMRU1FTlQgICAgICAgICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgU09BUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnRzIGFyZSAiYm9keSIsICJoZWFkZXIiIGFuZCAiaGVhZGVyZmF1bHQiLgotX0VSUk9SX0lOVkFMSURfRkFVTFRfRUxFTUVOVCAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiZmF1bHQiLgotCi0hLS0gQSBTT0FQIGJvZHkgZWxlbWVudCBpbiBhIFdTREwgZG9jdW1lbnQgY2FuIGhhdmUgYW4gYXR0cmlidXRlICJ1c2UiIGRlZmluZWQgdG8gYmUgZWl0aGVyIGxpdGVyYWwgb3IgZW5jb2RlZC4gLS0KLSEtLSBUaGlzIHN0cmluZyBpcyB1c2VkIGluIGFuIGVycm9yIHRhc2sgaW4gV1NBRCBpZiB0aGUgZG9jdW1lbnQgc3BlY2lmaWVzIGEgdXNlIG90aGVyIHRoZW4gbGl0ZXJhbCBvciBlbmNvZGVkLiAtLSAKLSEtLSBGb3IgZXhhbXBsZSwgaWYgdGhlIGRvY3VtZW50IHNwZWNpZmllcyB0aGUgdXNlIG9mIHRoZSBTT0FQIGJvZHkgYXMgInNpbXBsZSIgdGhlIG91dHB1dCBzdHJpbmcgc2hvdWxkIGJlOiAgICAtLQotIS0tIFRoZSAnc2ltcGxlJyB1c2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBib2R5IGlzIGludmFsaWQuIFRoZSB1c2UgbXVzdCBiZSBsaXRlcmFsIG9yIGVuY29kZWQuICAgICAgICAgICAgICAgIC0tCi1fRVJST1JfSU5WQUxJRF9CT0RZX1VTRSAgICAgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IHVzZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIGJvZHkgaXMgaW52YWxpZC4gVGhlIHVzZSBtdXN0IGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4KLV9FUlJPUl9JTlZBTElEX0JPRFlfRU5DT0RJTkdfU1RZTEUgICAgICAgICAgICAgICA9IFRoZXJlIGlzIG5vIGVuY29kaW5nIHN0eWxlIFVSSSBkZWZpbmVkIGZvciB0aGUgU09BUCBib2R5LiBZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBVUkkgZm9yIHRoZSBlbmNvZGluZyBzdHlsZSB3aGVuIHRoZSB1c2UgaXMgZW5jb2RlZC4KLV9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9VTkRFRklORUQgICAgICAgICAgICAgICA9IFRoZSB7MH0gcGFydCBzcGVjaWZpZWQgYXMgYSBwYXJ0IGZvciB0aGUgU09BUCBib2R5IGlzIHVuZGVmaW5lZC4gIFlvdSBjYW4gb25seSBzcGVjaWZ5IGRlZmluZWQgcGFydHMuCi1fRVJST1JfSU5WQUxJRF9CT0RZX1BBUlRfTk9UX1RZUEUgICAgICAgICAgICAgICAgPSBUaGUgezB9IHBhcnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUgZGVmaW5lZCBhbmQgaGFzIGJlZW4gc3BlY2lmaWVkIGZvciBhIFNPQVAgYm9keSB3aXRoIGl0cyB1c2UgZW5jb2RlZC4gV2hlbiB1c2UgaXMgZW5jb2RlZCBvbiBhIFNPQVAgYm9keSwgYWxsIHBhcnRzIGRlZmluZWQgbXVzdCBvbmx5IGNvbnRhaW4gYSB2YWxpZCB0eXBlLgotX0VSUk9SX0lOVkFMSURfU09BUF9FTEVNRU5UX0ZPUl9MT0NBVElPTiAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGNhbm5vdCBiZSBzcGVjaWZpZWQgaGVyZS4gVGhpcyBlbGVtZW50IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBTT0FQIG5hbWVzcGFjZSBmb3IgdXNlIGF0IHRoaXMgcG9pbnQuCi1fRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0FERFJFU1MgICAgICAgICAgICAgICAgPSBBIFNPQVAgYWRkcmVzcyBjYW5ub3QgYmUgc3BlY2lmaWVkIGhlcmUgYXMgdGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIHsxfSBwb3J0IHJlZmVycyB0byBkb2VzIG5vdCBoYXZlIGEgU09BUCBiaW5kaW5nIGVsZW1lbnQgZGVmaW5lZC4gVGhlcmUgbXVzdCBiZSBhIFNPQVAgYmluZGluZyBlbGVtZW50IGRlZmluZWQgaW4gb3JkZXIgdG8gc3BlY2lmeSBhIFNPQVAgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLgotX0VSUk9SX0hFQURFUl9NRVNTQUdFX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBtZXNzYWdlIHNwZWNpZmllZCBmb3IgdGhlIFNPQVAgaGVhZGVyIGlzIHVuZGVmaW5lZC4gVGhlIG1lc3NhZ2Ugc3BlY2lmaWVkIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgV1NETCBkb2N1bWVudC4KLV9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gcGFydCBzcGVjaWZpZWQgaW4gbWVzc2FnZSB7MX0gZm9yIHRoZSBTT0FQIGhlYWRlciBpcyB1bmRlZmluZWQuIEVuc3VyZSB0aGUgcGFydCBpcyBkZWZpbmVkIGluIHRoZSB7MX0gbWVzc2FnZS4KLV9FUlJPUl9IRUFERVJfVVNFX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gdXNlIHNwZWNpZmllZCBmb3IgdGhlIFNPQVAgaGVhZGVyIGlzIGludmFsaWQuIFRoZSB1c2UgbXVzdCBiZSBzcGVjaWZpZWQgYXMgbGl0ZXJhbCBvciBlbmNvZGVkLgotX0VSUk9SX0hFQURFUl9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCAgICAgICAgICAgID0gVGhlIGVuY29kaW5nIHN0eWxlIGZvciB0aGUgU09BUCBoZWFkZXIgaXMgbm90IHNwZWNpZmllZC4gV2hlbiB0aGUgdXNlIGlzIGVuY29kZWQgdGhlIGVuY29kaW5nIHN0eWxlIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgVVJJLgotX0VSUk9SX0hFQURFUl9OQU1FU1BBQ0VfVU5ERUZJTkVEICAgICAgICAgICAgICAgID0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIFNPQVAgaGVhZGVyIGlzIG5vdCBzcGVjaWZpZWQuIFdoZW4gdGhlIHVzZSBpcyBlbmNvZGVkIGEgbmFtZXNwYWNlIFVSSSBtdXN0IGJlIGRlZmluZWQuCi1fRVJST1JfSEVBREVSRkFVTFRfTUVTU0FHRV9VTkRFRklORUQgICAgICAgICAgICAgPSBUaGUgezB9IG1lc3NhZ2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgdW5kZWZpbmVkLiBUaGUgbWVzc2FnZSBzcGVjaWZpZWQgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LgotX0VSUk9SX0hFQURFUkZBVUxUX1BBUlRfVU5ERUZJTkVEICAgICAgICAgICAgICAgID0gVGhlIHswfSBwYXJ0IHNwZWNpZmllZCBpbiBtZXNzYWdlIHsxfSBmb3IgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGlzIHVuZGVmaW5lZC4gRW5zdXJlIHRoZSBwYXJ0IGlzIGRlZmluZWQgaW4gdGhlIHsxfSBtZXNzYWdlLiAKLV9FUlJPUl9IRUFERVJGQVVMVF9VU0VfVU5ERUZJTkVEICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gdXNlIHNwZWNpZmllZCBmb3IgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGlzIGludmFsaWQuIFRoZSB1c2UgbXVzdCBiZSBzcGVjaWZpZWQgYXMgbGl0ZXJhbCBvciBlbmNvZGVkLgotX0VSUk9SX0hFQURFUkZBVUxUX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEICAgICAgID0gVGhlIGVuY29kaW5nIHN0eWxlIGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgbm90IHNwZWNpZmllZC4gV2hlbiB0aGUgdXNlIGlzIGVuY29kZWQgdGhlIGVuY29kaW5nIHN0eWxlIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgVVJJLgotX0VSUk9SX0hFQURFUkZBVUxUX05BTUVTUEFDRV9VTkRFRklORUQgICAgICAgICAgID0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGlzIG5vdCBzcGVjaWZpZWQuIFdoZW4gdGhlIHVzZSBpcyBlbmNvZGVkIGEgbmFtZXNwYWNlIFVSSSBtdXN0IGJlIGRlZmluZWQuCi1fRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IG5hbWUgc3BlY2lmaWVkIGZvciB0aGUgU09BUCBmYXVsdCBpcyBpbnZhbGlkLiBUaGUgbmFtZSBzcGVjaWZpZWQgbXVzdCBiZSB7MX0sIHRoZSBuYW1lIGZyb20gdGhlIGZhdWx0IHBhcmVudCBlbGVtZW50LgotX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9PUEVSQVRJT04gICAgICAgICAgICAgID0gVGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIFNPQVAgb3BlcmF0aW9uIGlzIHNwZWNpZmllZCBmb3IgZG9lcyBub3QgaGF2ZSBhIFNPQVAgYmluZGluZyBkZWZpbmVkLiBBIFNPQVAgYmluZGluZyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZGVmaW5lIGEgU09BUCBvcGVyYXRpb24gaGVyZS4KLV9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gYmluZGluZyB0aGF0IHRoZSBTT0FQIGJvZHkgaXMgc3BlY2lmaWVkIGZvciBkb2VzIG5vdCBoYXZlIGEgU09BUCBiaW5kaW5nIGRlZmluZWQuIEEgU09BUCBiaW5kaW5nIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBkZWZpbmUgYSBTT0FQIGJvZHkgaGVyZS4KLV9FUlJPUl9OT19TT0FQQklORElOR19GT1JfSEVBREVSICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gYmluZGluZyB0aGF0IHRoZSBTT0FQIGhlYWRlciBpcyBzcGVjaWZpZWQgZm9yIGRvZXMgbm90IGhhdmUgYSBTT0FQIGJpbmRpbmcgZGVmaW5lZC4gQSBTT0FQIGJpbmRpbmcgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGRlZmluZSBhIFNPQVAgaGVhZGVyIGhlcmUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGx1aS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGx1aS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjIyMzc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsdWkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSEtLSBBbnQgVUkKLV9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIgICAgICAgICAgICAgICAgICA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotX1VJX0VSUk9SX01BUktFUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRVJST1IgIAotX1VJX1dBUk5JTkdfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAgID0gV0FSTklORwotX1VJX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVkFMSUQKLV9VSV9JTlZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IElOVkFMSUQKLV9VSV9BQ1RJT05fVkFMSURBVElOR19GSUxFICAgICAgICAgICAgICAgICA9IFZhbGlkYXRpbmcgezB9Ci0KLV9FUlJPUl9OT19GSUxFX1NQRUNJRklFRCAgICAgICAgICAgICAgICAgICA9IFVuYWJsZSB0byBydW4gV1NETCBWYWxpZGF0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBmaWxlLgotCi1fRVhDX1VOQUJMRV9UT19WQUxJREFURV9GSUxFICAgICAgICAgICAgICAgPSBVbmFibGUgdG8gdmFsaWRhdGUgdGhlIFdTREwgZmlsZSB7MH0uIHsxfQotX0VYQ19XU0RMX0ZBSUxfT05fRVJST1IgICAgICAgICAgICAgICAgICAgID0gVGhlIFdTREwgZmlsZSBpcyBub3QgdmFsaWQuIChGYWlsIE9uIEVycm9yIGlzIGVuYWJsZWQuKQotCi1fRVJST1JfVU5BQkxFX1RPX0xPQURfRVhUX1ZBTElEQVRPUiAgICAgICAgPSBVbmFibGUgdG8gbG9hZCB0aGUgdmFsaWRhdG9yIGZvciBuYW1lc3BhY2UgezB9LiB7MX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZiMDVkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtaHR0cCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1taW1lIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLXNvYXAiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtd3NkbCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvdzNjL2RvbS8qKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0iamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZSIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNmMjk4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLWJpbgotd3NkbC5qYXIKLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLW9yZy5lY2xpcHNlLndzdC53c2RsXzEuMC4wLmphcgotb3JnLmVjbGlwc2Uud3N0LndzZGwucGF0Y2gKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmM1M2I2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGVlNjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLSNNb24gTWFyIDA1IDA4OjU3OjE5IEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYmluYXJ5X2V4cHJlc3Npb249MjAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MjAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249MzYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2VudW1fY29uc3RhbnRzPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tdWx0aXBsZV9maWVsZHM9MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zZWxlY3Rvcl9pbl9tZXRob2RfaW52b2NhdGlvbj0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MzYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj02OAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj04NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249ODQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9pbXBvcnRzPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9wYWNrYWdlPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmllbGQ9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maXJzdF9jbGFzc19ib2R5X2RlY2xhcmF0aW9uPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfaW1wb3J0cz0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21lbWJlcl90eXBlPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWV0aG9kPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbmV3X2NodW5rPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfcGFja2FnZT0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl9pbXBvcnRfZ3JvdXBzPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX3R5cGVfZGVjbGFyYXRpb25zPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1uZXh0X2xpbmVfc2hpZnRlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2tfaW5fY2FzZT1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfY29uc3RydWN0b3JfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX21ldGhvZF9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5fYmxvY2tfY29tbWVudD1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfamF2YWRvY19jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2xpbmVfY29tbWVudHM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3BhcmFtZXRlcl9kZXNjcmlwdGlvbj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcm9vdF90YWdzPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9iZWZvcmVfcm9vdF90YWdzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2Zvcl9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5saW5lX2xlbmd0aD04MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfZ3VhcmRpYW5fY2xhdXNlX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N3aXRjaHN0YXRlbWVudHNfY29tcGFyZV90b19zd2l0Y2g9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudGF0aW9uLnNpemU9NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jYXRjaF9pbl90cnlfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2ZpbmFsbHlfaW5fdHJ5X3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5ub3RhdGlvbl9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2VsbGlwc2lzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9zZW1pY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2NvbnN0YW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9tZXRob2RfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3N3aXRjaD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3JldHVybj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl90aHJvdz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2JyYWNrZXRzX2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFjZXNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNrZXRzX2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTE0MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj1zcGFjZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT0yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX3RhYnNfb25seV9mb3JfbGVhZGluZ19pbmRlbnRhdGlvbnM9ZmFsc2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU0NmQ3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gTWFyIDA1IDA4OjU3OjIwIEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZm9ybWF0dGVyX3Byb2ZpbGU9X0VNRkNvZGVGb3JtYXR0ZXIucHJvZmlsZQotZm9ybWF0dGVyX3NldHRpbmdzX3ZlcnNpb249MTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjgyY2FkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGw7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4yMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuZ2VuZXJhdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZXh0ZW5zaWJpbGl0eTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5leHRlbnNpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGo7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNS4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLnhlcmNlcztidW5kbGUtdmVyc2lvbj0iWzIuOC4wLDMuMC4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZDAwZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIG1vZGVsLwotamFycy5jb21waWxlLm9yZGVyID0gLgotc291cmNlLi4gPSBzcmMtaHR0cC8sXAotICAgICAgICAgICAgICAgICAgc3JjLW1pbWUvLFwKLSAgICAgICAgICAgICAgICAgIHNyYy1zb2FwLyxcCi0gICAgICAgICAgICAgICAgICBzcmMtd3NkbC8KLW91dHB1dC4uID0gYmluLwotc3JjLmluY2x1ZGVzID0gY29tcG9uZW50LnhtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDYxOWM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvY29tcG9uZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y29tcG9uZW50IHhtbG5zPSJodHRwOi8vZWNsaXBzZS5vcmcvd3RwL3JlbGVuZy90b29scy9jb21wb25lbnQtbW9kZWwiCi0JbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPgotCTxjb21wb25lbnQtZGVwZW5kcyB1bnJlc3RyaWN0ZWQ9InRydWUiPjwvY29tcG9uZW50LWRlcGVuZHM+Ci0JPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIGZyYWdtZW50PSJmYWxzZSIgLz4KLQk8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIgZnJhZ21lbnQ9ImZhbHNlIiAvPgotCTxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iIGZyYWdtZW50PSJmYWxzZSIgLz4KLQk8cGx1Z2luIGlkPSJvcmcud3NkbDRqIiBmcmFnbWVudD0iZmFsc2UiIC8+Ci0JPHBhY2thZ2UgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIGFwaT0iZmFsc2UiPgotCQk8dHlwZSBuYW1lPSJCaW5kaW5nIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCi0JCTx0eXBlIG5hbWU9IkJpbmRpbmdGYXVsdCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IkJpbmRpbmdJbnB1dCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IkJpbmRpbmdPcGVyYXRpb24iICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCi0JCTx0eXBlIG5hbWU9IkJpbmRpbmdPdXRwdXQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJEZWZpbml0aW9uIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLSAgICAJPHR5cGUgbmFtZT0iRXh0ZW5zaWJpbGl0eUVsZW1lbnQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJFeHRlbnNpYmxlRWxlbWVudCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IkZhdWx0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iSW1wb3J0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQkKLQkJPHR5cGUgbmFtZT0iSW5wdXQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCQotCQk8dHlwZSBuYW1lPSJNZXNzYWdlIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iTWVzc2FnZVJlZmVyZW5jZSIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+CQkKLQkJPHR5cGUgbmFtZT0iTmFtZXNwYWNlIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQotCQk8dHlwZSBuYW1lPSJPcGVyYXRpb24iICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkKLSAgICAJPHR5cGUgbmFtZT0iT3V0cHV0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQkKLSAgICAgCTx0eXBlIG5hbWU9IlBhcnQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCQotCQk8dHlwZSBuYW1lPSJQb3J0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQotCQk8dHlwZSBuYW1lPSJQb3J0VHlwZSIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IlNlcnZpY2UiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJUeXBlcyIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IldTRExFbGVtZW50IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iV1NETEZhY3RvcnkiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkKLTwhLS0JPHR5cGUgbmFtZT0iV1NETFBsdWdpbiIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+LS0+Ci0JCTx0eXBlIG5hbWU9IlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCi0JPC9wYWNrYWdlPgotCTxwYWNrYWdlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiIGFwaT0iZmFsc2UiPgotCQk8dHlwZSBuYW1lPSJXU0RMQ29uc3RhbnRzIiBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotPCEtLQk8dHlwZSBuYW1lPSJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkiIC8+IC0tPgkJCi08IS0tCTx0eXBlIG5hbWU9IkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5IiAvPi0tPgkKLTwhLS0JPHR5cGUgbmFtZT0iV1NETFJlc291cmNlSW1wbCIgc3ViY2xhc3M9ImZhbHNlIi8+LS0+Ci0JPC9wYWNrYWdlPgotCQotPCEtLSB0aGVzZSBwbHVnaW4ncyB0byBiZSBwcm92aWRlZCB3aXRoIG5vbiBBUEkgZGlzY2xhaW1lcnMgLS0+Ci08IS0tCQotCTxwYWNrYWdlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgYXBpPSJmYWxzZSI+Ci0JCTx0eXBlIG5hbWU9IlNPQVBCb2R5IiAvPgotCQk8dHlwZSBuYW1lPSJTT0FQSGVhZGVyRmF1bHQiIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBBZGRyZXNzIiAvPgotCQk8dHlwZSBuYW1lPSJTT0FQRmFjdG9yeSIgLz4KLQkJPHR5cGUgbmFtZT0iU09BUEhlYWRlciIgLz4KLQkJPHR5cGUgbmFtZT0iU09BUEJpbmRpbmciIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBIZWFkZXJCYXNlIiAvPgotCQk8dHlwZSBuYW1lPSJTT0FQRmF1bHQiIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBPcGVyYXRpb24iIC8+Ci0JPC9wYWNrYWdlPgotCi0JPHBhY2thZ2UgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj4KLQkJPHR5cGUgbmFtZT0iTUlNRUNvbnRlbnQiIC8+Ci0JCTx0eXBlIG5hbWU9Ik1JTUVQYWNrYWdlIiAvPgotCQk8dHlwZSBuYW1lPSJNSU1FTXVsdGlwYXJ0UmVsYXRlZCIgLz4KLQkJPHR5cGUgbmFtZT0iTUlNRVBhcnQiIC8+Ci0JCTx0eXBlIG5hbWU9Ik1JTUVNaW1lWG1sIiAvPgotCQk8dHlwZSBuYW1lPSJNSU1FRmFjdG9yeSIgLz4KLQk8L3BhY2thZ2U+Ci0KLQk8cGFja2FnZSBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPgotCQk8dHlwZSBuYW1lPSJIVFRQRmFjdG9yeSIgLz4KLQkJPHR5cGUgbmFtZT0iSFRUUE9wZXJhdGlvbiIgLz4KLQkJPHR5cGUgbmFtZT0iSFRUUFVybEVuY29kZWQiIC8+Ci0JCTx0eXBlIG5hbWU9IkhUVFBQYWNrYWdlIiAvPgotCQk8dHlwZSBuYW1lPSJIVFRQQWRkcmVzcyIgLz4KLQkJPHR5cGUgbmFtZT0iSFRUUFVybFJlcGxhY2VtZW50IiAvPgotCQk8dHlwZSBuYW1lPSJIVFRQQmluZGluZyIgLz4KLQk8L3BhY2thZ2U+Ci0tLT4KLTwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9ncmFiamFycy54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2dyYWJqYXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2ZWRiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2dyYWJqYXJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwcm9qZWN0IGRlZmF1bHQ9ImNvcHlKYXJzIiBiYXNlZGlyPSIuIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW5OYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiLz4KLQk8cHJvcGVydHkgbmFtZT0idmVyc2lvbiIgdmFsdWU9IiIvPgotCi0JPHRhcmdldCBuYW1lPSJjb3B5SmFycyIgaWY9ImRvd25sb2FkUGF0aCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29weUphcnMyIi8+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJjb3B5SmFyczIiIGlmPSJwbHVnaW5zUGF0aCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29weUphcnMzIi8+Ci0JPC90YXJnZXQ+Ci0KLQk8dGFyZ2V0IG5hbWU9ImNvcHlKYXJzMyIgaWY9InBsdWdpbk5hbWUiPgotCQk8Y29weSB0b2Rpcj0iJHtwbHVnaW5zUGF0aH0vJHtwbHVnaW5OYW1lfSR7dmVyc2lvbn0vbGliIiBvdmVyd3JpdGU9InRydWUiPgotCQkJPGZpbGVzZXQgZGlyPSIke2Rvd25sb2FkUGF0aH0vJHtwbHVnaW5OYW1lfSR7dmVyc2lvbn0iPgotCQkJCTxmaWxlbmFtZSBuYW1lPSIqLmphciIvPgotCQkJPC9maWxlc2V0PgotCQk8L2NvcHk+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJjbGVhbnVwSmFycyIgaWY9InBsdWdpbnNQYXRoIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbnVwSmFyczIiLz4KLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0iY2xlYW51cEphcnMyIiBpZj0icGx1Z2luTmFtZSI+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7cGx1Z2luc1BhdGh9LyR7cGx1Z2luTmFtZX0ke3ZlcnNpb259L2xpYiI+Ci0JCQkJPGZpbGVuYW1lIG5hbWU9IiouamFyIi8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2xpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9saWIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5MmYwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2xpYi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotKi5qYXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVjNGFiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJodHRwIgotICAgIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9IVFRQIiBuc1ByZWZpeD0iaHR0cCI+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSFRUUEJpbmRpbmciIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSUhUVFBCaW5kaW5nIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVyYiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJIVFRQT3BlcmF0aW9uIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lIVFRQT3BlcmF0aW9uIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb25VUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSFRUUFVybFJlcGxhY2VtZW50IiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lIVFRQVXJsUmVwbGFjZW1lbnQiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJIVFRQVXJsRW5jb2RlZCIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JSFRUUFVybEVuY29kZWQiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJIVFRQQWRkcmVzcyIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JSFRUUEFkZHJlc3MiPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvblVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSFRUUEFkZHJlc3MiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSFRUUEJpbmRpbmciIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSFRUUE9wZXJhdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUhUVFBVcmxFbmNvZGVkIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUhUVFBVcmxSZXBsYWNlbWVudCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAuZ2VubW9kZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMjZmOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLmdlbm1vZGVsCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCi0gICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAiCi0gICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIiBtb2RlbE5hbWU9IkhUVFAiIGVkaXRQbHVnaW5DbGFzcz0iIiBlZGl0b3JQbHVnaW5DbGFzcz0iIgotICAgIG5vbk5MU01hcmtlcnM9InRydWUiIGNvZGVGb3JtYXR0aW5nPSJ0cnVlIiBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIucm9zZSIKLSAgICB1c2VkR2VuUGFja2FnZXM9IldTREwuZ2VubW9kZWwjLy93c2RsIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5nZW5tb2RlbCMvL3hzZCI+Ci0gIDxmb3JlaWduTW9kZWw+SFRUUC5tZGw8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5WQUJBU0VfUExVR0lOU19QQVRIPC9mb3JlaWduTW9kZWw+Ci0gIDxmb3JlaWduTW9kZWw+Li4vLi4vLi48L2ZvcmVpZ25Nb2RlbD4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iSFRUUCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmciIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIKLSAgICAgIHV0aWxpdHlQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC51dGlsIiBlY29yZVBhY2thZ2U9IkhUVFAuZWNvcmUjLyI+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0hUVFBCaW5kaW5nIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBIVFRQLmVjb3JlIy8vSFRUUEJpbmRpbmcvdmVyYiIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJIVFRQLmVjb3JlIy8vSFRUUE9wZXJhdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSFRUUC5lY29yZSMvL0hUVFBPcGVyYXRpb24vbG9jYXRpb25VUkkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0hUVFBVcmxSZXBsYWNlbWVudCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9IVFRQVXJsRW5jb2RlZCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9IVFRQQWRkcmVzcyI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSFRUUC5lY29yZSMvL0hUVFBBZGRyZXNzL2xvY2F0aW9uVVJJIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9JSFRUUEFkZHJlc3MiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJIVFRQLmVjb3JlIy8vSUhUVFBCaW5kaW5nIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0lIVFRQT3BlcmF0aW9uIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0lIVFRQVXJsRW5jb2RlZCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9JSFRUUFVybFJlcGxhY2VtZW50Ii8+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLm1kbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5tZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNjMwZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLm1kbAorKysgL2Rldi9udWxsCkBAIC0xLDU0NzEgKzAsMCBAQAotCi0ob2JqZWN0IFBldGFsCi0gICAgdmVyc2lvbiAgICAJNDIKLSAgICBfd3JpdHRlbiAgIAkiUm9zZSA0LjUuODE2My4zIgotICAgIGNoYXJTZXQgICAgCTApCi0KLShvYmplY3QgRGVzaWduICJMb2dpY2FsIFZpZXciCi0gICAgaXNfdW5pdCAgICAJVFJVRQotICAgIGlzX2xvYWRlZCAgCVRSVUUKLSAgICBkZWZhdWx0cyAgIAkob2JqZWN0IGRlZmF1bHRzCi0JcmlnaHRNYXJnaW4gCTAuMjUwMDAwCi0JbGVmdE1hcmdpbiAJMC4yNTAwMDAKLQl0b3BNYXJnaW4gIAkwLjI1MDAwMAotCWJvdHRvbU1hcmdpbiAJMC41MDAwMDAKLQlwYWdlT3ZlcmxhcCAJMC4yNTAwMDAKLQljbGlwSWNvbkxhYmVscyAJVFJVRQotCWF1dG9SZXNpemUgCVRSVUUKLQlzbmFwVG9HcmlkIAlUUlVFCi0JZ3JpZFggICAgICAJMTYKLQlncmlkWSAgICAgIAkxNgotCWRlZmF1bHRGb250IAkob2JqZWN0IEZvbnQKLQkgICAgc2l6ZSAgICAgICAJMTAKLQkgICAgZmFjZSAgICAgICAJIkFyaWFsIgotCSAgICBib2xkICAgICAgIAlGQUxTRQotCSAgICBpdGFsaWNzICAgIAlGQUxTRQotCSAgICB1bmRlcmxpbmUgIAlGQUxTRQotCSAgICBzdHJpa2UgICAgIAlGQUxTRQotCSAgICBjb2xvciAgICAgIAkwCi0JICAgIGRlZmF1bHRfY29sb3IgCVRSVUUpCi0Jc2hvd01lc3NhZ2VOdW0gCTEKLQlzaG93Q2xhc3NPZk9iamVjdCAJVFJVRQotCW5vdGF0aW9uICAgCSJVbmlmaWVkIikKLSAgICByb290X3VzZWNhc2VfcGFja2FnZSAJKG9iamVjdCBDbGFzc19DYXRlZ29yeSAiVXNlIENhc2UgVmlldyIKLQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTUxIgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IFVzZUNhc2VEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMThDIgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICByb290X2NhdGVnb3J5IAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJMb2dpY2FsIFZpZXciCi0JcXVpZCAgICAgICAJIjNBQkZEOUE3MDE1MCIKLQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCWdsb2JhbCAgICAgCVRSVUUKLQlzdWJzeXN0ZW0gIAkiQ29tcG9uZW50IFZpZXciCi0JcXVpZHUgICAgICAJIjNBQkZEOUE3MDE1MiIKLQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJodHRwIgotCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJImh0dHAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9IVFRQIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYmFzZVBhY2thZ2UiCi0JCQl2YWx1ZSAgICAgIAkib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJIVFRQIikpCi0JCXF1aWQgICAgICAgCSIzQUJGRDlBRDAxRjgiCi0JCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JCSAgICAob2JqZWN0IENsYXNzICJIVFRQQmluZGluZyIKLQkJCXF1aWQgICAgICAgCSIzQUJGRTU3QzAxMzYiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFNUZGMUQwMDE5IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwOTg0M0YxMDNDMCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUEJpbmRpbmciCi0JCQkJcXVpZHUgICAgICAJIjQwOTg0M0E3MDJFQiIpKQotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJ2ZXJiIgotCQkJCXF1aWQgICAgICAgCSIzQUJGRTYwRDAwREIiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSFRUUE9wZXJhdGlvbiIKLQkJCXF1aWQgICAgICAgCSIzQUJGRTZBRTAwNTAiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFNUZGNEIwMzdDIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwOTg0NDQ2MDJDQyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUE9wZXJhdGlvbiIKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQzRkYwMkJCIikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImxvY2F0aW9uVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUJGRTcwRDAxNDciCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSFRUUFVybFJlcGxhY2VtZW50IgotCQkJcXVpZCAgICAgICAJIjNBQkZFQTFBMDE3QyIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUU3MjhCODAyQzMiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQ0RDIwMkM1IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQVXJsUmVwbGFjZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjQwOTg0NDk2MDBEOCIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSFRUUFVybEVuY29kZWQiCi0JCQlxdWlkICAgICAgIAkiM0FCRkVBNkQwMjk0IgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTcyOEQ1MDA5NCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MDk4NDQ5MTAwMDkiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBVcmxFbmNvZGVkIgotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDQ1NzAwNjMiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIkhUVFBBZGRyZXNzIgotCQkJcXVpZCAgICAgICAJIjNBQzNCRjI1MDBGNSIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUU1RkVBOTAxQjciCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQwRDgwMEM0IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQQWRkcmVzcyIKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQwODkwMUExIikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImxvY2F0aW9uVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUMzQkZBNzAxMkUiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSUhUVFBBZGRyZXNzIgotCQkJcXVpZCAgICAgICAJIjQwOTg0MDg5MDFBMSIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIgotCQkJCXF1aWQgICAgICAgCSI0MDk4NDBBNDAxM0EiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSUhUVFBCaW5kaW5nIgotCQkJcXVpZCAgICAgICAJIjQwOTg0M0E3MDJFQiIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIgotCQkJCXF1aWQgICAgICAgCSI0MDk4NDNDQTAxNzciCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSUhUVFBPcGVyYXRpb24iCi0JCQlxdWlkICAgICAgIAkiNDA5ODQzRkYwMkJCIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiIKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQ0MTMwMjA0IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklIVFRQVXJsRW5jb2RlZCIKLQkJCXF1aWQgICAgICAgCSI0MDk4NDQ1NzAwNjMiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCIKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQ0NkQwMjFDIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklIVFRQVXJsUmVwbGFjZW1lbnQiCi0JCQlxdWlkICAgICAgIAkiNDA5ODQ0OTYwMEQ4IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IgotCQkJCXF1aWQgICAgICAgCSI0MDk4NDRBQzAxQUIiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKSkKLQkJbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiUG9ydCIKLQkJCXF1aWQgICAgICAgCSIzQUMxMUU1MjAxRkIiCi0JCQl0aXRsZSAgICAgIAkiUG9ydCIKLQkJCXpvb20gICAgICAgCTEwMAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUEFkZHJlc3MiIEAxCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg2NzIsIDc4NCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDEKLQkJCQkgICAgbG9jYXRpb24gICAJKDQ3MSwgNzAzKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQwMgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQQWRkcmVzcyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzNCRjI1MDBGNSIKLQkJCQl3aWR0aCAgICAgIAk0MjAKLQkJCQloZWlnaHQgICAgIAkxODYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQQWRkcmVzcyIgQDIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDY3MiwgMjg4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTM4LCAyMjkpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA2OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJSFRUUEFkZHJlc3MiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTM4LCAxNzkpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA2OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQwODkwMUExIgotCQkJCXdpZHRoICAgICAgCTEwODYKLQkJCQloZWlnaHQgICAgIAkyNDIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQwRDgwMEM0IgotCQkJCWNsaWVudCAgICAgCUAxCi0JCQkJc3VwcGxpZXIgICAJQDIKLQkJCQlsaW5lX3N0eWxlIAkwKSkpCi0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiRXh0ZW5zaWJpbGl0eSIKLQkJCXF1aWQgICAgICAgCSIzQUU1RkUzQjAzN0IiCi0JCQl0aXRsZSAgICAgIAkiRXh0ZW5zaWJpbGl0eSIKLQkJCXpvb20gICAgICAgCTEwMAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEA0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgyNzIsIDEyOCkKLQkJCQlmb250ICAgICAgIAkob2JqZWN0IEZvbnQKLQkJCQkgICAgaXRhbGljcyAgICAJVFJVRSkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQKLQkJCQkgICAgbG9jYXRpb24gICAJKDcwLCA1MykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCQkJd2lkdGggICAgICAJNDIyCi0JCQkJaGVpZ2h0ICAgICAJMTc0Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpIVFRQQWRkcmVzcyIgQDUKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMjcyLCA0ODApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMjgsIDQyOCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUEFkZHJlc3MiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUMzQkYyNTAwRjUiCi0JCQkJd2lkdGggICAgICAJMzA2Ci0JCQkJaGVpZ2h0ICAgICAJMTI4Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpIVFRQQmluZGluZyIgQDYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNDgwLCA2NDApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgzNDQsIDU4OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyNzIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUEJpbmRpbmciKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUJGRTU3QzAxMzYiCi0JCQkJd2lkdGggICAgICAJMjkwCi0JCQkJaGVpZ2h0ICAgICAJMTI4Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDcKLQkJCQlsb2NhdGlvbiAgIAkoMjcyLCAzMDUpCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJc3VwcGxpZXIgICAJQDQKLQkJCQl2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkgICAgKDI3MiwgMzA1KQotCQkJCSAgICAoMjcyLCAyMTUpKSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA4Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFNUZFQTkwMUI3IgotCQkJCWNsaWVudCAgICAgCUA1Ci0JCQkJc3VwcGxpZXIgICAJQDQKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgyNzIsIDQxNikKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjcyLCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANykKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA5Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFNUZGMUQwMDE5IgotCQkJCWNsaWVudCAgICAgCUA2Ci0JCQkJc3VwcGxpZXIgICAJQDQKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSg0NzUsIDU3NikKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoNDc1LCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANykKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBPcGVyYXRpb24iIEAxMAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg2NzIsIDgxNikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDEwCi0JCQkJICAgIGxvY2F0aW9uICAgCSg1MTgsIDc2NCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMDgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUE9wZXJhdGlvbiIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFNkFFMDA1MCIKLQkJCQl3aWR0aCAgICAgIAkzMjYKLQkJCQloZWlnaHQgICAgIAkxMjgKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAxMQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTVGRjRCMDM3QyIKLQkJCQljbGllbnQgICAgIAlAMTAKLQkJCQlzdXBwbGllciAgIAlANAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDY1NiwgNzUyKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSg2NTYsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA3KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUFVybFJlcGxhY2VtZW50IiBAMTIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoODE2LCA5OTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjA1LCA5NDEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDIyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkhUVFBVcmxSZXBsYWNlbWVudCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFQTFBMDE3QyIKLQkJCQl3aWR0aCAgICAgIAk0NDAKLQkJCQloZWlnaHQgICAgIAkxMjYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAxMwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTcyOEI4MDJDMyIKLQkJCQljbGllbnQgICAgIAlAMTIKLQkJCQlzdXBwbGllciAgIAlANAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDg2OSwgOTI5KQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4NjksIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA3KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUFVybEVuY29kZWQiIEAxNAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxMDcyLCAxMTY4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTQKLQkJCQkgICAgbG9jYXRpb24gICAJKDkwMCwgMTExNykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUFVybEVuY29kZWQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUJGRUE2RDAyOTQiCi0JCQkJd2lkdGggICAgICAJMzYyCi0JCQkJaGVpZ2h0ICAgICAJMTI2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMTUKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUU3MjhENTAwOTQiCi0JCQkJY2xpZW50ICAgICAJQDE0Ci0JCQkJc3VwcGxpZXIgICAJQDQKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxMTAzLCAxMTA1KQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTAzLCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANykpKQotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkJpbmRpbmciCi0JCQlxdWlkICAgICAgIAkiM0FFNzJBNzAwMEE5IgotCQkJdGl0bGUgICAgICAJIkJpbmRpbmciCi0JCQl6b29tICAgICAgIAkxMDAKLQkJCW1heF9oZWlnaHQgCTI4MzUwCi0JCQltYXhfd2lkdGggIAkyMTYwMAotCQkJb3JpZ2luX3ggICAJMAotCQkJb3JpZ2luX3kgICAJMAotCQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBCaW5kaW5nIiBAMTYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU3NiwgNTkyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTYKLQkJCQkgICAgbG9jYXRpb24gICAJKDQ0MCwgNTQwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI3MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQQmluZGluZyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFNTdDMDEzNiIKLQkJCQl3aWR0aCAgICAgIAkyOTAKLQkJCQloZWlnaHQgICAgIAkxMjgKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBPcGVyYXRpb24iIEAxNwotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTY5NiwgNjA4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTcKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0OTUsIDUyNykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MDIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUE9wZXJhdGlvbiIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFNkFFMDA1MCIKLQkJCQl3aWR0aCAgICAgIAk0MjAKLQkJCQloZWlnaHQgICAgIAkxODYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBVcmxSZXBsYWNlbWVudCIgQDE4Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjE2LCAxODA4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTgKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0MDUsIDE3NTcpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDIyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkhUVFBVcmxSZXBsYWNlbWVudCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFQTFBMDE3QyIKLQkJCQl3aWR0aCAgICAgIAk0NDAKLQkJCQloZWlnaHQgICAgIAkxMjYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBVcmxFbmNvZGVkIiBAMTkKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDYwOCwgMTUyMCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDE5Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0MzYsIDE0NjkpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzQ0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkhUVFBVcmxFbmNvZGVkIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FCRkVBNkQwMjk0IgotCQkJCXdpZHRoICAgICAgCTM2MgotCQkJCWhlaWdodCAgICAgCTEyNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBCaW5kaW5nIiBAMjAKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU3NiwgMTYwKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjAKLQkJCQkgICAgbG9jYXRpb24gICAJKDUwLCAxMDEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA1MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJSFRUUEJpbmRpbmciKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjAKLQkJCQkgICAgbG9jYXRpb24gICAJKDUwLCA1MSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMDUyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDNBNzAyRUIiCi0JCQkJd2lkdGggICAgICAJMTA3MAotCQkJCWhlaWdodCAgICAgCTI0MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDIxCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQzRjEwM0MwIgotCQkJCWNsaWVudCAgICAgCUAxNgotCQkJCXN1cHBsaWVyICAgCUAyMAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUE9wZXJhdGlvbiIgQDIyCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjk2LCAxNjApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTE1MCwgMTAxKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwOTIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSUhUVFBPcGVyYXRpb24iKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjIKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNTAsIDUxKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwOTIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwOTg0M0ZGMDJCQiIKLQkJCQl3aWR0aCAgICAgIAkxMTEwCi0JCQkJaGVpZ2h0ICAgICAJMjQyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjMKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDQ0NjAyQ0MiCi0JCQkJY2xpZW50ICAgICAJQDE3Ci0JCQkJc3VwcGxpZXIgICAJQDIyCi0JCQkJbGluZV9zdHlsZSAJMCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQVXJsRW5jb2RlZCIgQDI0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg2MDgsIDExMDQpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNDQsIDEwNDUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTEyOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJSFRUUFVybEVuY29kZWQiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjQKLQkJCQkgICAgbG9jYXRpb24gICAJKDQ0LCA5OTUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTEyOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQ0NTcwMDYzIgotCQkJCXdpZHRoICAgICAgCTExNDYKLQkJCQloZWlnaHQgICAgIAkyNDIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwOTg0NDkxMDAwOSIKLQkJCQljbGllbnQgICAgIAlAMTkKLQkJCQlzdXBwbGllciAgIAlAMjQKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBVcmxSZXBsYWNlbWVudCIgQDI2Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNTg0LCAxMzc2KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjYKLQkJCQkgICAgbG9jYXRpb24gICAJKDk4MSwgMTMxNykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMjA2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklIVFRQVXJsUmVwbGFjZW1lbnQiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjYKLQkJCQkgICAgbG9jYXRpb24gICAJKDk4MSwgMTI2NykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMjA2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDQ5NjAwRDgiCi0JCQkJd2lkdGggICAgICAJMTIyNAotCQkJCWhlaWdodCAgICAgCTI0MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQ0RDIwMkM1IgotCQkJCWNsaWVudCAgICAgCUAxOAotCQkJCXN1cHBsaWVyICAgCUAyNgotCQkJCWxpbmVfc3R5bGUgCTApKSkpKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ3c2RsIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2Uud3N0LndzZGxcXG1vZGVsXFxvcmcuZWNsaXBzZS53c3QuV1NETC5jYXQiCi0JCXF1aWQgICAgICAgCSIzQURGQjhFNTAyMUUiKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ4c2QiCi0JCWlzX3VuaXQgICAgCVRSVUUKLQkJaXNfbG9hZGVkICAJRkFMU0UKLQkJZmlsZV9uYW1lICAJIiRWQUJBU0VfUExVR0lOU19QQVRIXFxvcmcuZWNsaXBzZS54c2RcXG1vZGVsXFxvcmcuZWNsaXBzZS5YU0QuY2F0IgotCQlxdWlkICAgICAgIAkiMzlBQkRDNkYwMUFBIikpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTYzIgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6aHR0cCIgQDI4Ci0JCQlsb2NhdGlvbiAgIAkoMzM2LCAyMjQpCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlAMjgKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTkyLCAxNDApCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJodHRwIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzQUJGRDlBRDAxRjgiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OndzZGwiIEAyOQotCQkJbG9jYXRpb24gICAJKDc4NCwgMjI0KQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI5Ci0JCQkgICAgbG9jYXRpb24gICAJKDY0MCwgMTQwKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkid3NkbCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0FERkI4RTUwMjFFIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp4c2QiIEAzMAotCQkJbG9jYXRpb24gICAJKDEyMzIsIDIyNCkKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMAotCQkJICAgIGxvY2F0aW9uICAgCSgxMDg4LCAxNDApCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJ4c2QiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjM5QUJEQzZGMDFBQSIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKSkpKSkKLSAgICByb290X3N1YnN5c3RlbSAJKG9iamVjdCBTdWJTeXN0ZW0gIkNvbXBvbmVudCBWaWV3IgotCXF1aWQgICAgICAgCSIzQUJGRDlBNzAxNTIiCi0JcGh5c2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCXBoeXNpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBNb2R1bGVfRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjNBQkZEOUE3MDE4QiIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QpKSkpCi0gICAgcHJvY2Vzc19zdHJ1Y3R1cmUgCShvYmplY3QgUHJvY2Vzc2VzCi0JcXVpZCAgICAgICAJIjNBQkZEOUE3MDE1MyIKLQlQcm9jc05EZXZzIAkobGlzdAotCSAgICAob2JqZWN0IFByb2Nlc3NfRGlhZ3JhbSAiRGVwbG95bWVudCBWaWV3IgotCQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTU1IgotCQl0aXRsZSAgICAgIAkiRGVwbG95bWVudCBWaWV3IgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb3BlcnRpZXMgCShvYmplY3QgUHJvcGVydGllcwotCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGF0YUJhc2UiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFCYXNlU2V0IiA4MDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGF0YUJhc2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJBTlNJIgotCQkJCXZhbHVlICAgICAgCTgwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIk9yYWNsZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJTUUxTZXJ2ZXIiCi0JCQkJdmFsdWUgICAgICAJODAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU3liYXNlIgotCQkJCXZhbHVlICAgICAgCTgwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIldhdGNvbSIKLQkJCQl2YWx1ZSAgICAgIAk4MDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIklkIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIk5VTUJFUig1KSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZSIKLQkJCXZhbHVlICAgICAgCSJWXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVF8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiSW5oZXJpdFN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSJfViIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEcm9wQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJCYXNlVmlld3MiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRETFNjcmlwdEZpbGVuYW1lIgotCQkJdmFsdWUgICAgICAJIkRETDEuU1FMIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIlZBUkNIQVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc09LIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJmcmFtZXdvcmsiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExFbGVtZW50IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklETFNwZWNpZmljYXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJJRExTcGVjU2V0IiAyMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCXZhbHVlICAgICAgCTIyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiVHlwZWRlZiIKLQkJCQl2YWx1ZSAgICAgIAk1NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkVudW1lcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkV4Y2VwdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk2MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlN0cnVjdCIKLQkJCQl2YWx1ZSAgICAgIAk1MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlVuaW9uIgotCQkJCXZhbHVlICAgICAgCTgxKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLmJpbmRpbmcuaHR0cC9zcmMvcm9zZS9odHRwYmluZGluZ01kbC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSURMTW9kdWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLmh0dHAvc3JjL3Jvc2UvaHR0cGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlJhaXNlcyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJIYXNSZWxUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlUHJlZml4ZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbnN0YW5jZVZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJIm1fIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbGFzc1ZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJInNfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0QXR0cmlidXRlRGF0YVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0T3BlcmF0aW9uUmV0dXJuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJ2b2lkIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSb290RGlyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQXV0b1N5bmMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTaG93Q29kZWdlbkRsZyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0QXV0aG9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRTaW5jZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NOdW1Bc3Rlcmlza3MiCi0JCQl2YWx1ZSAgICAgIAkwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1heE51bUNoYXJzIgotCQkJdmFsdWUgICAgICAJODApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yIgotCQkJdmFsdWUgICAgICAJKCJFZGl0b3JUeXBlIiAxMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZNIgotCQkJdmFsdWUgICAgICAJKCJWTVR5cGUiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdEluIgotCQkJCXZhbHVlICAgICAgCTEwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXaW5kb3dzU2hlbGwiCi0JCQkJdmFsdWUgICAgICAJMTAxKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVk1UeXBlIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN1biIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTWljcm9zb2Z0IgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJJQk0iCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTm9DbGFzc0N1c3RvbURsZyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdsb2JhbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiT3BlbkJyYWNlQ2xhc3NTdHlsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiT3BlbkJyYWNlTWV0aG9kU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVRhYnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VTcGFjZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNwYWNpbmdJdGVtcyIKLQkJCXZhbHVlICAgICAgCTMpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUm9zZURlZmF1bHRDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFzdGVyaXNrQ29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YUNvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NBdXRob3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jU2luY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jVmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29kZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzYWJsZUF1dG9TeW5jIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGV4dFJlZiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzU2luZ2xlVGhyZWFkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldElzU2VjdXJlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJJbmNsdWRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckZvcndhcmQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0U2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRnZXRJbmZvIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZXNOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RBdHRyaWJ1dGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdFBhcmFtZXRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9ySGVhZGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbnRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0RGF0ZUhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb29raWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JDb29raWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGVudFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUhUTUwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZV9YTUxfREQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNtcEZpZWxkIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCRW52aXJvbm1lbnRQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ254RmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZmVyZW5jZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCTmFtZUluSkFSIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlNlc3Npb25UeXBlX1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWxlc3MiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlZnVsIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIgMjExKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiIDIyMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjIwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMjIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWVudHJhbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCTVBfRXh0ZW5kX0NNUCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW1wb3J0cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJOYXRpdmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTeW5jaHJvbml6ZWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlByb3BlcnR5VHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQmVhblByb3BlcnR5X1NldCIgNzEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJlYW5Qcm9wZXJ0eV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTm90IEEgUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTcyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJvdW5kIgotCQkJCXZhbHVlICAgICAgCTczKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0cmFpbmVkIgotCQkJCXZhbHVlICAgICAgCTc0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5kaXZpZHVhbENoYW5nZU1ndCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGUiCi0JCQl2YWx1ZSAgICAgIAkoIlJlYWQvV3JpdGVfU2V0IiA4MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCAmIFdyaXRlIgotCQkJCXZhbHVlICAgICAgCTgxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXcml0ZSBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGdWxseVF1YWxpZmllZFR5cGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkJlYW5Qcm9wZXJ0eV9TZXQiIDcxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCZWFuUHJvcGVydHlfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk5vdCBBIFByb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAk3MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCb3VuZCIKLQkJCQl2YWx1ZSAgICAgIAk3MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJhaW5lZCIKLQkJCQl2YWx1ZSAgICAgIAk3NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluZGl2aWR1YWxDaGFuZ2VNZ3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlIgotCQkJdmFsdWUgICAgICAJKCJSZWFkL1dyaXRlX1NldCIgODEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgJiBXcml0ZSIKLQkJCQl2YWx1ZSAgICAgIAk4MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV3JpdGUgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRnVsbHlRdWFsaWZpZWRUeXBlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzTmF2aWdhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSIzNjAwMDAwMDIiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIl9JRCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiTlVNQkVSKDUsMCkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjaGVtYU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUeXBlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWYXJyYXlOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NjaGVtYSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJXaGVyZUNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZVNjYWxlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbk9mUkVGUyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZCIKLQkJCXZhbHVlICAgICAgCSgiTWV0aG9kS2luZFNldCIgMTkwMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3ZlcmxvYWRJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWROb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb0RhdGFTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzU2VsZmlzaCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyVHlwZVNldCIgMTgwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckV2ZW50IgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyRXZlbnRTZXQiIDE2MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclJlZmVyZW5jaW5nTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckZvckVhY2hTZXQiIDE3MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJXaGVuQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJNYXBNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJPcmRlck1ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkZ1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTE5MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUHJvY2VkdXJlIgotCQkJCXZhbHVlICAgICAgCTE5MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3BlcmF0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyIgotCQkJCXZhbHVlICAgICAgCTE5MDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ2FsY3VsYXRlZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTA5KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQUZURVIiCi0JCQkJdmFsdWUgICAgICAJMTgwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJCRUZPUkUiCi0JCQkJdmFsdWUgICAgICAJMTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNURUFEIE9GIgotCQkJCXZhbHVlICAgICAgCTE4MDMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJST1ciCi0JCQkJdmFsdWUgICAgICAJMTcwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJTVEFURU1FTlQiCi0JCQkJdmFsdWUgICAgICAJMTcwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQiCi0JCQkJdmFsdWUgICAgICAJMTYwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc0FsbG93ZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByZWNpc2lvbiIKLQkJCXZhbHVlICAgICAgCSIyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2FsZSIKLQkJCXZhbHVlICAgICAgCSI2IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc0luZGV4IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVXNlTVNWQyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImgiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImh+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwfiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlVGVtcG9yYXJ5RXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVycm9yTGltaXQiCi0JCQl2YWx1ZSAgICAgIAkzMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiRST1NFQ1BQX1NPVVJDRSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlBhdGhTZXBhcmF0b3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWVGb3JtYXQiCi0JCQl2YWx1ZSAgICAgIAkiMTI4dnhfYiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvb2xlYW5UeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93VGVtcGxhdGVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHBsaWNpdEluc3RhbnRpYXRpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dQcm90ZWN0ZWRJbmhlcml0YW5jZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbW1lbnRXaWR0aCIKLQkJCXZhbHVlICAgICAgCTYwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9uZUJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIk9wdGlvbmFsQnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVZhbHVlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlSZWZlcmVuY2U8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiRGljdGlvbmFyeUJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2xhc3NLZXkiCi0JCQl2YWx1ZSAgICAgIAkiY2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlB1dEJvZGllc0luU3BlYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0RGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weUNvbnN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhwbGljaXRDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZXN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvcktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc2lnbm1lbnRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXF1YWxpdHlWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCSgiRnJpZW5kS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUmVsYXRpb25hbE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3JhZ2VNZ210VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdG9yYWdlTWdtdE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdWJzY3JpcHRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZVJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uUmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0cmVhbU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RyZWFtVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlRocmVlS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZyaWVuZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRlY2xhcmVBbmREZWZpbmUiCi0JCQkJdmFsdWUgICAgICAJMTk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlT25seSIKLQkJCQl2YWx1ZSAgICAgIAkyMDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRvTm90RGVjbGFyZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDYpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLmh0dHAvc3JjL3Jvc2UvaHR0cGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLmh0dHAvc3JjL3Jvc2UvaHR0cGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVPcmRlciIKLQkJCXZhbHVlICAgICAgCSJBTUlSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlIgotCQkJdmFsdWUgICAgICAJKCJJbmxpbmluZ1N0eWxlU2V0IiAyMDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbkNsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGb2xsb3dpbmdDbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwNykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUeXBlc0RlZmluZWQiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVDbG9zdXJlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJPcGVyYXRpb25LaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25LaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNFeHBsaWNpdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRW50cnlDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5QW5ub3RhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3JkZXJlZCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNlbGVjdG9yTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3RvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEhhc1JlbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkhhc1JlbFR5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXNzb2NpYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kdGFyZ2V0Q2xhc3MiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0luaGVyaXQiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VBcmd1bWVudHMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJHZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuZ2V0KCRrZXlzKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lclNldCIKLQkJCXZhbHVlICAgICAgCSIkZGF0YS5zZXQoJGtleXMsJHZhbHVlKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZENvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiRzdXBwbGllciAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0luaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCSgiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0dldFNldEJ5UmVmZXJlbmNlIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVRdWFsaWZpZWRHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVF1YWxpZmllZFNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZFNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc0dldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc1NldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc1NldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NvY0NsYXNzU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0ZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdEF0dHJpYnV0ZVZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvZHlSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1N1YnN5c3RlbSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeUlzT25TZWFyY2hMaXN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlByZWNvbXBpbGVkSGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2F0ZWdvcnkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNOYW1lc3BhY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kZW50IgotCQkJdmFsdWUgICAgICAJMikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiNS4wIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0NsYXNzVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0NsYXNzVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJJbnRlcmZhY2VfUGFydCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25fUGFydCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNsYXNzX0ZhY3RvcnkiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5IgotCQkJdmFsdWUgICAgICAJKCJDT2JqZWN0RnVuY3Rpb25hbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkR5bmFtaWMiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5jcmVhdGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTZXJpYWwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT3ZlcnJpZGVHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YUdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RBVEFfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpZWxkR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRklFTERfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTWVzc2FnZU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9NU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUVTU0FHRV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJKCJPTEVGYWN0b3J5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVGYWN0b3J5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdF9pbiIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkxpY2Vuc2VkIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ2xhc3NJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT0xFQ3RsVHlwZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRVR5cGVMaWIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliTWFqb3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliTWlub3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFUHJvcFBhZ2VJRHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEaXNwYXRjaE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tGdW5jdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hEZWZWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcElkRW51bSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQX0lEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnRlcmZhY2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJJTlRFUkZBQ0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSW5pdEludGVyZmFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFdmVudFNpbmtNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUHJvcE5vdGlmeVNpbmtzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29ubmVjdGlvbk1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTk5FQ1RJT05fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ29ubmVjdGlvblBvaW50SUlEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSW5oZXJpdGFuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDb21tYW5kcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRkNEZWNsYXJlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRkNJbXBsZW1lbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFUTF9EZWNsYXJlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNPTU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25Qb2ludE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTk5FQ1RJT05fUE9JTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNc2dNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wZXJ0eU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBST1BFUlRZX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ09wZXJhdGlvblR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNPcGVyYXRpb25UeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWxfT3ZlcnJpZGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZXNzYWdlX0hhbmRsZXIiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaF9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRXZlbnRfRmlyaW5nX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRXZlbnRfU2lua19IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RkX09MRV9NZXRob2QiCi0JCQkJdmFsdWUgICAgICAJNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb21tYW5kX1BhcnNlciIKLQkJCQl2YWx1ZSAgICAgIAk3KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X0dldF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X1NldF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X05vdGlmeV9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNYWNyb19HZW5lcmF0ZWRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTEpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQm9keUltYWdlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluY2x1ZGVzR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfSU5DTFVERVNfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc2VydExvY2F0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJTQ0MiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlR5cGVMaWJJbXBvcnRlciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjc4MzYwNjM3OCIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRhYmxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWNOb3RDcmVhdGFibGUiCi0JCQkJdmFsdWUgICAgICAJMjEzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiU2luZ2xlVXNlIgotCQkJCXZhbHVlICAgICAgCTIxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIkdsb2JhbFNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJNdWx0aVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxNdWx0aVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMjApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbkJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiMCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25FeHBsaWNpdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25Db21wYXJlIgotCQkJdmFsdWUgICAgICAJKCJDb21wYXJlU2V0IiAyMDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRhYmxlIgotCQkJdmFsdWUgICAgICAJKCJDcmVhdGFibGVTZXQiIDIyMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluaXRpYWxpemF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVRlcm1pbmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiQ29sbGVjdGlvbiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDb21wYXJlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJCaW5hcnkiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiVGV4dCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiRvcGVyYXRpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTGlicmFyeU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkFsaWFzTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSXNTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkV4aXRDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmV3IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJXaXRoRXZlbnRzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGUkc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUxldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRzRGVsZWdhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJQcm9qZWN0RmlsZSIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbFN0dWRpbyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJFZGl0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkVkaXRvclR5cGUiIDEwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRJbiIKLQkJCQl2YWx1ZSAgICAgIAkxMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIldpbmRvd3NTaGVsbCIKLQkJCQl2YWx1ZSAgICAgIAkxMDEpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBcnJheURpbWVuc2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgJVElICVaJSAlVyUiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAlUSUgJVolICVXJSIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJPcmRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkRlZmF1bHRfU2VydmxldF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0TmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZXh0UmVmIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSXNTaW5nbGVUaHJlYWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SXNTZWN1cmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckluY2x1ZGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVyRm9yd2FyZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldGdldEluZm8iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiSHR0cF9TZXJ2bGV0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGVzTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0QXR0cmlidXRlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RQYXJhbWV0ZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckhlYWRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW50SGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldERhdGVIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29va2llIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yQ29va2llIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRlbnRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVIVE1MIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkRlZmF1bHRfRUpCX19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlX1hNTF9ERCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ21wRmllbGQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJFbnZpcm9ubWVudFByb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbnhGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVmZXJlbmNlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJOYW1lSW5KQVIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCU2Vzc2lvblR5cGVfU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlbGVzcyIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVmdWwiCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IiAyMTEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIxMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIxMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIgMjIwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMjApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIyMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZW50cmFudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJNUF9FeHRlbmRfQ01QIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUjJFZGl0b3IiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJvc2UgTW9kZWwgSW50ZWdyYXRvciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUm9zZSBXZWIgUHVibGlzaGVyIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWZXJzaW9uIENvbnRyb2wiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJlcG9zaXRvcnkiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2OSIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInBhY2thZ2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zVVJJIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY2xhc3NpZmllck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY29uc3RyYWludHMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiQ29udGVudEtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRW1wdHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIk1peGVkIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnRPbmx5IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJvcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhdHRyaWJ1dGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNJRCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJyZWZlcmVuY2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzUmVzb2x2ZVByb3hpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkpCi0JcXVpZCAgICAgICAJIjNBQkZEOUE3MDE1NCIpKQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTIxN2JkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvTUlNRS5lY29yZQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9Im1pbWUiCi0gICAgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiIG5zUHJlZml4PSJtaW1lIj4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNSU1FQ29udGVudCIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JTUlNRUNvbnRlbnQiPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwYXJ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UGFydCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0eXBlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJ0IiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9QYXJ0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1JTUVQYXJ0IiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lNSU1FUGFydCI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZEV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJleHRlbnNpYmlsaXR5RWxlbWVudCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUV4dGVuc2liaWxpdHlFbGVtZW50Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzIiBlVHlwZT0iIy8vTGlzdCIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1JTUVNdWx0aXBhcnRSZWxhdGVkIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lNSU1FTXVsdGlwYXJ0UmVsYXRlZCI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZE1JTUVQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJtaW1lUGFydCIgZVR5cGU9IiMvL0lNSU1FUGFydCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE1JTUVQYXJ0cyIgZVR5cGU9IiMvL0xpc3QiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU1JTUVQYXJ0IiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL01JTUVQYXJ0IiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNSU1FTWltZVhtbCIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JTUlNRU1pbWVYbWwiPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwYXJ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UGFydCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlUGFydCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vUGFydCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTUlNRVBhcnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTUlNRU11bHRpcGFydFJlbGF0ZWQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTUlNRUNvbnRlbnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTUlNRU1pbWVYbWwiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJMaXN0IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLkxpc3QiLz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUuZ2VubW9kZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YmNlMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLmdlbm1vZGVsCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCi0gICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUiCi0gICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIiBtb2RlbE5hbWU9Ik1JTUUiIGVkaXRQbHVnaW5DbGFzcz0iIiBlZGl0b3JQbHVnaW5DbGFzcz0iIgotICAgIG5vbk5MU01hcmtlcnM9InRydWUiIGNvZGVGb3JtYXR0aW5nPSJ0cnVlIiBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIucm9zZSIKLSAgICB1c2VkR2VuUGFja2FnZXM9IldTREwuZ2VubW9kZWwjLy93c2RsIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5nZW5tb2RlbCMvL3hzZCI+Ci0gIDxmb3JlaWduTW9kZWw+TUlNRS5tZGw8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5WQUJBU0VfUExVR0lOU19QQVRIPC9mb3JlaWduTW9kZWw+Ci0gIDxmb3JlaWduTW9kZWw+Li4vLi4vLi48L2ZvcmVpZ25Nb2RlbD4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iTUlNRSIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmciIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCi0gICAgICBjbGFzc1BhY2thZ2VTdWZmaXg9ImludGVybmFsLmltcGwiIHV0aWxpdHlQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC51dGlsIiBlY29yZVBhY2thZ2U9Ik1JTUUuZWNvcmUjLyI+Ci0gICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJNSU1FLmVjb3JlIy8vTGlzdCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Ik1JTUUuZWNvcmUjLy9NSU1FQ29udGVudCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgTUlNRS5lY29yZSMvL01JTUVDb250ZW50L3R5cGUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBNSU1FLmVjb3JlIy8vTUlNRUNvbnRlbnQvZVBhcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRUNvbnRlbnQvc2V0UGFydCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJNSU1FLmVjb3JlIy8vTUlNRUNvbnRlbnQvc2V0UGFydC9wYXJ0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVDb250ZW50L2dldFBhcnQiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iTUlNRS5lY29yZSMvL01JTUVQYXJ0Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgTUlNRS5lY29yZSMvL01JTUVQYXJ0L2VFeHRlbnNpYmlsaXR5RWxlbWVudHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRVBhcnQvYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iTUlNRS5lY29yZSMvL01JTUVQYXJ0L2FkZEV4dGVuc2liaWxpdHlFbGVtZW50L2V4dGVuc2liaWxpdHlFbGVtZW50Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVQYXJ0L2dldEV4dGVuc2liaWxpdHlFbGVtZW50cyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vTUlNRU11bHRpcGFydFJlbGF0ZWQiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBNSU1FLmVjb3JlIy8vTUlNRU11bHRpcGFydFJlbGF0ZWQvZU1JTUVQYXJ0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVNdWx0aXBhcnRSZWxhdGVkL2FkZE1JTUVQYXJ0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Ik1JTUUuZWNvcmUjLy9NSU1FTXVsdGlwYXJ0UmVsYXRlZC9hZGRNSU1FUGFydC9taW1lUGFydCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Ik1JTUUuZWNvcmUjLy9NSU1FTXVsdGlwYXJ0UmVsYXRlZC9nZXRNSU1FUGFydHMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iTUlNRS5lY29yZSMvL01JTUVNaW1lWG1sIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBNSU1FLmVjb3JlIy8vTUlNRU1pbWVYbWwvZVBhcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRU1pbWVYbWwvc2V0UGFydCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJNSU1FLmVjb3JlIy8vTUlNRU1pbWVYbWwvc2V0UGFydC9wYXJ0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVNaW1lWG1sL2dldFBhcnQiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vSU1JTUVQYXJ0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vSU1JTUVNdWx0aXBhcnRSZWxhdGVkIi8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vSU1JTUVDb250ZW50Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vSU1JTUVNaW1lWG1sIi8+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLm1kbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvTUlNRS5tZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZTg1MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLm1kbAorKysgL2Rldi9udWxsCkBAIC0xLDU4MTggKzAsMCBAQAotCi0ob2JqZWN0IFBldGFsCi0gICAgdmVyc2lvbiAgICAJNDIKLSAgICBfd3JpdHRlbiAgIAkiUm9zZSA0LjUuODE2My4zIgotICAgIGNoYXJTZXQgICAgCTApCi0KLShvYmplY3QgRGVzaWduICJMb2dpY2FsIFZpZXciCi0gICAgaXNfdW5pdCAgICAJVFJVRQotICAgIGlzX2xvYWRlZCAgCVRSVUUKLSAgICBkZWZhdWx0cyAgIAkob2JqZWN0IGRlZmF1bHRzCi0JcmlnaHRNYXJnaW4gCTAuMjUwMDAwCi0JbGVmdE1hcmdpbiAJMC4yNTAwMDAKLQl0b3BNYXJnaW4gIAkwLjI1MDAwMAotCWJvdHRvbU1hcmdpbiAJMC41MDAwMDAKLQlwYWdlT3ZlcmxhcCAJMC4yNTAwMDAKLQljbGlwSWNvbkxhYmVscyAJVFJVRQotCWF1dG9SZXNpemUgCVRSVUUKLQlzbmFwVG9HcmlkIAlUUlVFCi0JZ3JpZFggICAgICAJMTYKLQlncmlkWSAgICAgIAkxNgotCWRlZmF1bHRGb250IAkob2JqZWN0IEZvbnQKLQkgICAgc2l6ZSAgICAgICAJMTAKLQkgICAgZmFjZSAgICAgICAJIkFyaWFsIgotCSAgICBib2xkICAgICAgIAlGQUxTRQotCSAgICBpdGFsaWNzICAgIAlGQUxTRQotCSAgICB1bmRlcmxpbmUgIAlGQUxTRQotCSAgICBzdHJpa2UgICAgIAlGQUxTRQotCSAgICBjb2xvciAgICAgIAkwCi0JICAgIGRlZmF1bHRfY29sb3IgCVRSVUUpCi0Jc2hvd01lc3NhZ2VOdW0gCTEKLQlzaG93Q2xhc3NPZk9iamVjdCAJVFJVRQotCW5vdGF0aW9uICAgCSJVbmlmaWVkIikKLSAgICByb290X3VzZWNhc2VfcGFja2FnZSAJKG9iamVjdCBDbGFzc19DYXRlZ29yeSAiVXNlIENhc2UgVmlldyIKLQlxdWlkICAgICAgIAkiM0FDOTEwNTEwMzFFIgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IFVzZUNhc2VEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiM0FDOTEwNTIwMDFCIgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICByb290X2NhdGVnb3J5IAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJMb2dpY2FsIFZpZXciCi0JcXVpZCAgICAgICAJIjNBQzkxMDUxMDMxRCIKLQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCWdsb2JhbCAgICAgCVRSVUUKLQlzdWJzeXN0ZW0gIAkiQ29tcG9uZW50IFZpZXciCi0JcXVpZHUgICAgICAJIjNBQzkxMDUxMDMxRiIKLQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJtaW1lIgotCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJIm1pbWUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9NSU1FIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYmFzZVBhY2thZ2UiCi0JCQl2YWx1ZSAgICAgIAkib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJNSU1FIikpCi0JCXF1aWQgICAgICAgCSIzQUM5MTI3QzAyNjYiCi0JCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JCSAgICAob2JqZWN0IENsYXNzICJNSU1FQ29udGVudCIKLQkJCXF1aWQgICAgICAgCSIzQUM5MTM1QjAzQTciCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFRjExQ0EwMzhFIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNkEzMDE2OCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRUNvbnRlbnQiCi0JCQkJcXVpZHUgICAgICAJIjQwQTEwNUUwMDFDQyIpKQotCQkJb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJzZXRQYXJ0IgotCQkJCXF1aWQgICAgICAgCSI0MEExMDY2RjAwMjMiCi0JCQkJcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJCSAgICAob2JqZWN0IFBhcmFtZXRlciAicGFydCIKLQkJCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJCXJlc3VsdCAgICAgCSJ2b2lkIgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA2N0QwMkNDIgotCQkJCXJlc3VsdCAgICAgCSJTdHJpbmciCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidHlwZSIKLQkJCQlxdWlkICAgICAgIAkiM0FDOTE5NzEwMzZCIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIk1JTUVQYXJ0IgotCQkJcXVpZCAgICAgICAJIjNBQzkxM0VFMDBFQiIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MEEwRkRFRjAzMjIiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDBBMTAyQ0QwMTc1IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6OklNSU1FUGFydCIKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAyNUQwMUE2IikpCi0JCQlvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImFkZEV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWQgICAgICAgCSI0MEExMDQ2NDAxQTIiCi0JCQkJcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJCSAgICAob2JqZWN0IFBhcmFtZXRlciAiZXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJCXR5cGUgICAgICAgCSJJRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKSkKLQkJCQlyZXN1bHQgICAgIAkidm9pZCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldEV4dGVuc2liaWxpdHlFbGVtZW50cyIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA0ODQwMjdCIgotCQkJCXJlc3VsdCAgICAgCSJMaXN0IgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJNSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLQkJCXF1aWQgICAgICAgCSIzQUM5MTNGQTAyNUIiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFRjExRDUwMzMwIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwM0FEMDMxQyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRU11bHRpcGFydFJlbGF0ZWQiCi0JCQkJcXVpZHUgICAgICAJIjQwQTEwMzNCMDBERCIpKQotCQkJb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJhZGRNSU1FUGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTAzRjYwMTcyIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgIm1pbWVQYXJ0IgotCQkJCQl0eXBlICAgICAgIAkiSU1JTUVQYXJ0IikpCi0JCQkJcmVzdWx0ICAgICAJInZvaWQiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJnZXRNSU1FUGFydHMiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNDAzMDM4RCIKLQkJCQlyZXN1bHQgICAgIAkiTGlzdCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiTUlNRU1pbWVYbWwiCi0JCQlxdWlkICAgICAgIAkiM0FDOTE0NUEwMUZGIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRUYxMUREMDM4QiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MEExMDc0NzAzNEUiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVNaW1lWG1sIgotCQkJCXF1aWR1ICAgICAgCSI0MEExMDZFRjAwOEIiKSkKLQkJCW9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAic2V0UGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA2RDQwMUVCIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgInBhcnQiCi0JCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJCQlyZXN1bHQgICAgIAkidm9pZCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldFBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNkUxMDA5NSIKLQkJCQlyZXN1bHQgICAgIAkiU3RyaW5nIgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJTUlNRVBhcnQiCi0JCQlxdWlkICAgICAgIAkiNDBBMTAyNUQwMUE2IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwMjlEMDNEOSIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJTUlNRU11bHRpcGFydFJlbGF0ZWQiCi0JCQlxdWlkICAgICAgIAkiNDBBMTAzM0IwMEREIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwMzc4MDE4RiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJTUlNRUNvbnRlbnQiCi0JCQlxdWlkICAgICAgIAkiNDBBMTA1RTAwMUNDIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNUY1MDIyNiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJTUlNRU1pbWVYbWwiCi0JCQlxdWlkICAgICAgIAkiNDBBMTA2RUYwMDhCIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNzFFMDNCNCIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJMaXN0IgotCQkJcXVpZCAgICAgICAJIjQwQTEwQkZBMDEwOSIKLQkJCXN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS51dGlsLkxpc3QiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwQzA5MDJBNiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQwIgotCQkJcXVpZCAgICAgICAJIjNBRTczQjNDMDM1NiIKLQkJCXJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkJICAgIChvYmplY3QgUm9sZSAiJFVOTkFNRUQkMSIKLQkJCQlxdWlkICAgICAgIAkiM0FFNzNCM0QwMDkwIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVDb250ZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTM1QjAzQTciKQotCQkJICAgIChvYmplY3QgUm9sZSAiZVBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjNBRTczQjNEMDA5QSIKLQkJCQlsYWJlbCAgICAgIAkiZVBhcnQiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJCQlpc19uYXZpZ2FibGUgCVRSVUUpKSkKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDIiCi0JCQlxdWlkICAgICAgIAkiM0FFNzNCQjkwMEQ1IgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICJlUGFydCIKLQkJCQlxdWlkICAgICAgIAkiM0FFNzNCQjkwM0NFIgotCQkJCWxhYmVsICAgICAgCSJlUGFydCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkJCWlzX25hdmlnYWJsZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDMiCi0JCQkJcXVpZCAgICAgICAJIjNBRTczQkI5MDNFMiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FTWltZVhtbCIKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTE0NUEwMUZGIikpKQotCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNCIKLQkJCXF1aWQgICAgICAgCSIzQUVGMTJGRTAzODciCi0JCQlyb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDUiCi0JCQkJcXVpZCAgICAgICAJIjNBRUYxMzAwMDBENyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRkEwMjVCIgotCQkJCWlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgImVNSU1FUGFydCIKLQkJCQlxdWlkICAgICAgIAkiM0FFRjEzMDAwMEUxIgotCQkJCWxhYmVsICAgICAgCSJlTUlNRVBhcnQiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRVBhcnQiCi0JCQkJcXVpZHUgICAgICAJIjNBQzkxM0VFMDBFQiIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCQkJQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkJCUNvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JCSAgICAob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ2IgotCQkJcXVpZCAgICAgICAJIjQ2ODczNzlBMDA4QyIKLQkJCXJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkJICAgIChvYmplY3QgUm9sZSAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIKLQkJCQlxdWlkICAgICAgIAkiNDY4NzM3OUIwMjgwIgotCQkJCWxhYmVsICAgICAgCSJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkJCUNvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJCQlDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkJCWlzX25hdmlnYWJsZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDciCi0JCQkJcXVpZCAgICAgICAJIjQ2ODczNzlCMDI5MCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FUGFydCIKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRUUwMEVCIgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJCQlpc19hZ2dyZWdhdGUgCVRSVUUpKSkpCi0JCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkJpbmRpbmdzIgotCQkJcXVpZCAgICAgICAJIjNBQzkxMjhCMDFGOSIKLQkJCXRpdGxlICAgICAgCSJCaW5kaW5ncyIKLQkJCXpvb20gICAgICAgCTEwMAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRUNvbnRlbnQiIEAxCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjMyLCA4NDgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNDkwLCA3MTcpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjg0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVDb250ZW50IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzNUIwM0E3IgotCQkJCXdpZHRoICAgICAgCTMwMgotCQkJCWhlaWdodCAgICAgCTI4NgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIgQDIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCQkJU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE2MzIsIDEyMDApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNTUxLCAxMTUwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTE2MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJQYXJ0IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkJCWhlaWdodCAgICAgCTEyNAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQwIiBAMwotCQkJCWxvY2F0aW9uICAgCSgxNjMyLCAxMDY0KQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTczQjNDMDM1NiIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMSIgQDQKLQkJCQkJUGFyZW50X1ZpZXcgCUAzCi0JCQkJCWxvY2F0aW9uICAgCSgtNDE2LCAtMTY4KQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRTczQjNEMDA5MCIKLQkJCQkJY2xpZW50ICAgICAJQDMKLQkJCQkJc3VwcGxpZXIgICAJQDEKLQkJCQkJbGluZV9zdHlsZSAJMCkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiZVBhcnQiIEA1Ci0JCQkJCVBhcmVudF9WaWV3IAlAMwotCQkJCQlsb2NhdGlvbiAgIAkoLTQxNiwgLTE2OCkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANgotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTUxNSwgMTEwMikKLQkJCQkJICAgIGFuY2hvciAgICAgCTEKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTEyMAotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIitlUGFydCIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNTM5MzI2Ci0JCQkJCSAgICBoZWlnaHQgICAgIAkxMTgKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkxKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRTczQjNEMDA5QSIKLQkJCQkJY2xpZW50ICAgICAJQDMKLQkJCQkJc3VwcGxpZXIgICAJQDIKLQkJCQkJbGluZV9zdHlsZSAJMAotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA3Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDUKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgxNjgxLCAxMDk3KQotCQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTUKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIwLi4xIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC40NDkxMDMKLQkJCQkJICAgIGhlaWdodCAgICAgCTQ5Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMCkpKSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVNaW1lWG1sIiBAOAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTYzMiwgMTUwNCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDgKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0NzgsIDEzOTgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzA4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVNaW1lWG1sIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTE0NUEwMUZGIgotCQkJCXdpZHRoICAgICAgCTMyNgotCQkJCWhlaWdodCAgICAgCTIzNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQyIiBAOQotCQkJCWxvY2F0aW9uICAgCSgxNjMyLCAxMzIzKQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTczQkI5MDBENSIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiZVBhcnQiIEAxMAotCQkJCQlQYXJlbnRfVmlldyAJQDkKLQkJCQkJbG9jYXRpb24gICAJKDE0NCwgLTMyNSkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTEKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMTAKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgxNTA2LCAxMjkzKQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTIwCi0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VQYXJ0IgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC40ODk1ODMKLQkJCQkJICAgIGhlaWdodCAgICAgCTEyNwotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FFNzNCQjkwM0NFIgotCQkJCQljbGllbnQgICAgIAlAOQotCQkJCQlzdXBwbGllciAgIAlAMgotCQkJCQlsaW5lX3N0eWxlIAkwCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEyCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDEwCi0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTcwOCwgMTI4NCkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNjUyMjcwCi0JCQkJCSAgICBoZWlnaHQgICAgIAk3NgotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzIiBAMTMKLQkJCQkJUGFyZW50X1ZpZXcgCUA5Ci0JCQkJCWxvY2F0aW9uICAgCSgxNDQsIC0zMjUpCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FFNzNCQjkwM0UyIgotCQkJCQljbGllbnQgICAgIAlAOQotCQkJCQlzdXBwbGllciAgIAlAOAotCQkJCQlsaW5lX3N0eWxlIAkwKSkpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FTXVsdGlwYXJ0UmVsYXRlZCIgQDE0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg1NjAsIDU5MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDE0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgzNDEsIDQ4NikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MzgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiTUlNRU11bHRpcGFydFJlbGF0ZWQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTNGQTAyNUIiCi0JCQkJd2lkdGggICAgICAJNDU2Ci0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FUGFydCIgQDE1Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg1NjAsIDEwNDApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxNQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMjk2LCA5MzQpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNTI4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVQYXJ0IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRUUwMEVCIgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTUKLQkJCQkgICAgbG9jYXRpb24gICAJKDI5NiwgOTk0KQotCQkJCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQkgICAgZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCSAgICBubGluZXMgICAgIAkzCi0JCQkJICAgIG1heF93aWR0aCAgCTApCi0JCQkJd2lkdGggICAgICAJNTQ2Ci0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDQiIEAxNgotCQkJCWxvY2F0aW9uICAgCSg1NjAsIDgxNSkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUVGMTJGRTAzODciCi0JCQkJcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDUiIEAxNwotCQkJCQlQYXJlbnRfVmlldyAJQDE2Ci0JCQkJCWxvY2F0aW9uICAgCSgzMiwgMTExKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRUYxMzAwMDBENyIKLQkJCQkJY2xpZW50ICAgICAJQDE2Ci0JCQkJCXN1cHBsaWVyICAgCUAxNAotCQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlTUlNRVBhcnQiIEAxOAotCQkJCQlQYXJlbnRfVmlldyAJQDE2Ci0JCQkJCWxvY2F0aW9uICAgCSgzMiwgMTExKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOQotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOAotCQkJCQkgICAgbG9jYXRpb24gICAJKDc0NCwgODkwKQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMjI4Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VNSU1FUGFydCIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNzA5NDAyCi0JCQkJCSAgICBoZWlnaHQgICAgIAkxODQKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRUYxMzAwMDBFMSIKLQkJCQkJY2xpZW50ICAgICAJQDE2Ci0JCQkJCXN1cHBsaWVyICAgCUAxNQotCQkJCQlsaW5lX3N0eWxlIAkwCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDE4Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoNTAzLCA4OTgpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjAuLioiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjc5NDExOAotCQkJCQkgICAgaGVpZ2h0ICAgICAJNTgKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkxKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMQotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOAotCQkJCQkgICAgbG9jYXRpb24gICAJKDM2NCwgODkwKQotCQkJCQkgICAgYW5jaG9yICAgICAJMwotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTU5Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC43MDk0MDIKLQkJCQkJICAgIGhlaWdodCAgICAgCTE5NwotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKSkpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRVBhcnQiIEAyMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3MjAsIDE0NTYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMjA1LCAxNDIyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwMzAKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSU1JTUVQYXJ0IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDIyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgyMDUsIDEzNzIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTAzMAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAyNUQwMUE2IgotCQkJCXdpZHRoICAgICAgCTEwNDgKLQkJCQloZWlnaHQgICAgIAkxOTIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwMkNEMDE3NSIKLQkJCQljbGllbnQgICAgIAlAMTUKLQkJCQlzdXBwbGllciAgIAlAMjIKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVNdWx0aXBhcnRSZWxhdGVkIiBAMjQKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzY4LCAxNzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTQzLCAxNDIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTI1MAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJTUlNRU11bHRpcGFydFJlbGF0ZWQiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjQKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0MywgOTIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTI1MAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAzM0IwMEREIgotCQkJCXdpZHRoICAgICAgCTEyNjgKLQkJCQloZWlnaHQgICAgIAkxOTIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwM0FEMDMxQyIKLQkJCQljbGllbnQgICAgIAlAMTQKLQkJCQlzdXBwbGllciAgIAlAMjQKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVDb250ZW50IiBAMjYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTYzMiwgNDMyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjYKLQkJCQkgICAgbG9jYXRpb24gICAJKDEwODQsIDM5OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMDk2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklNSU1FQ29udGVudCIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTA4NCwgMzQ4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwOTYKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwNUUwMDFDQyIKLQkJCQl3aWR0aCAgICAgIAkxMTE0Ci0JCQkJaGVpZ2h0ICAgICAJMTkyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjcKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MEExMDZBMzAxNjgiCi0JCQkJY2xpZW50ICAgICAJQDEKLQkJCQlzdXBwbGllciAgIAlAMjYKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVNaW1lWG1sIiBAMjgKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTYxNiwgMTkwNCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDI4Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMDU1LCAxODcwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTExMjIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSU1JTUVNaW1lWG1sIikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDI4Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMDU1LCAxODIwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTExMjIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwNkVGMDA4QiIKLQkJCQl3aWR0aCAgICAgIAkxMTQwCi0JCQkJaGVpZ2h0ICAgICAJMTkyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MEExMDc0NzAzNEUiCi0JCQkJY2xpZW50ICAgICAJQDgKLQkJCQlzdXBwbGllciAgIAlAMjgKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TGlzdCIgQDMwCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg0NDgsIDE3NjApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzMAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTc2LCAxNzAxKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTU0NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJMaXN0IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMwCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNzYsIDE2NTEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNTQ0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8ZGF0YXR5cGU+PiIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwQkZBMDEwOSIKLQkJCQl3aWR0aCAgICAgIAk1NjIKLQkJCQloZWlnaHQgICAgIAkyNDIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkpKQotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkV4dGVuc2liaWxpdHkiCi0JCQlxdWlkICAgICAgIAkiM0FFNzNBQTMwMzJFIgotCQkJdGl0bGUgICAgICAJIkV4dGVuc2liaWxpdHkiCi0JCQl6b29tICAgICAgIAkxMDAKLQkJCW1heF9oZWlnaHQgCTI4MzUwCi0JCQltYXhfd2lkdGggIAkyMTYwMAotCQkJb3JpZ2luX3ggICAJMAotCQkJb3JpZ2luX3kgICAJMAotCQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVNaW1lWG1sIiBAMzEKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDEzMjgsIDc1MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMxCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMTc0LCA2NDYpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzA4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVNaW1lWG1sIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTE0NUEwMUZGIgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzEKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNzQsIDcwNikKLQkJCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJICAgIGZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkgICAgbmxpbmVzICAgICAJMwotCQkJCSAgICBtYXhfd2lkdGggIAkyMTUpCi0JCQkJd2lkdGggICAgICAJMzI2Ci0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FTXVsdGlwYXJ0UmVsYXRlZCIgQDMyCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3NTIsIDExMzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoNTMzLCAxMDMwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQzOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNSU1FTXVsdGlwYXJ0UmVsYXRlZCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzkxM0ZBMDI1QiIKLQkJCQljb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMyCi0JCQkJICAgIGxvY2F0aW9uICAgCSg1MzMsIDEwOTApCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTMKLQkJCQkgICAgbWF4X3dpZHRoICAJMzQzKQotCQkJCXdpZHRoICAgICAgCTQ1NgotCQkJCWhlaWdodCAgICAgCTIzNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRUNvbnRlbnQiIEAzMwotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNzkyLCA3NTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzMwotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTY1MCwgNjQ2KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI4NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNSU1FQ29udGVudCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzkxMzVCMDNBNyIKLQkJCQljb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMzCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNjUwLCA3MDYpCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTMKLQkJCQkgICAgbWF4X3dpZHRoICAJMjE1KQotCQkJCXdpZHRoICAgICAgCTMwMgotCQkJCWhlaWdodCAgICAgCTIzNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRVBhcnQiIEAzNAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgzMDQsIDc2OCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0MCwgNjYyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTUyOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNSU1FUGFydCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzkxM0VFMDBFQiIKLQkJCQljb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0MCwgNzIyKQotCQkJCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQkgICAgZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCSAgICBubGluZXMgICAgIAkzCi0JCQkJICAgIG1heF93aWR0aCAgCTUzNCkKLQkJCQl3aWR0aCAgICAgIAk1NDYKLQkJCQloZWlnaHQgICAgIAkyMzYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IiBAMzUKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoOTc2LCAxOTIpCi0JCQkJZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQkJICAgIGl0YWxpY3MgICAgCVRSVUUpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzNQotCQkJCSAgICBsb2NhdGlvbiAgIAkoNzQ3LCA4NykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0NTgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCQkJY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzNQotCQkJCSAgICBsb2NhdGlvbiAgIAkoNzQ3LCAxOTUpCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCQkgICAgbWF4X3dpZHRoICAJNDY1KQotCQkJCXdpZHRoICAgICAgCTQ3NgotCQkJCWhlaWdodCAgICAgCTIzNAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEAzNgotCQkJCWxvY2F0aW9uICAgCSg5NzYsIDUyNikKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlzdXBwbGllciAgIAlAMzUKLQkJCQl2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkgICAgKDk3NiwgNTI2KQotCQkJCSAgICAoOTc2LCAzMDkpKSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRUYxMUREMDM4QiIKLQkJCQljbGllbnQgICAgIAlAMzEKLQkJCQlzdXBwbGllciAgIAlAMzUKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzU2LCA2MzQpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDEzNTYsIDUyNikKLQkJCQlkcmF3U3VwcGxpZXIgCUAzNikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOAotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRUYxMUQ1MDMzMCIKLQkJCQljbGllbnQgICAgIAlAMzIKLQkJCQlzdXBwbGllciAgIAlAMzUKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSg4NDQsIDEwMTgpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDg0NCwgNTI2KQotCQkJCWRyYXdTdXBwbGllciAJQDM2KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM5Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFRjExQ0EwMzhFIgotCQkJCWNsaWVudCAgICAgCUAzMwotCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDE3NzgsIDYzNCkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc3OCwgNTI2KQotCQkJCWRyYXdTdXBwbGllciAJQDM2KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQwCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMEZERUYwMzIyIgotCQkJCWNsaWVudCAgICAgCUAzNAotCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDI1NiwgNjUwKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNTYsIDUyNikKLQkJCQlkcmF3U3VwcGxpZXIgCUAzNikKLQkJCSAgICAob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNiIgQDQxCi0JCQkJbG9jYXRpb24gICAJKDMwMywgMjUxKQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ2ODczNzlBMDA4QyIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIgQDQyCi0JCQkJCVBhcmVudF9WaWV3IAlANDEKLQkJCQkJbG9jYXRpb24gICAJKC0xLCAtNTE3KQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA0MwotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0MgotCQkJCQkgICAgbG9jYXRpb24gICAJKDQ2MiwgMTMxKQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJNDQ0Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjQ0MzMyMAotCQkJCQkgICAgaGVpZ2h0ICAgICAJNjAKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjQ2ODczNzlCMDI4MCIKLQkJCQkJY2xpZW50ICAgICAJQDQxCi0JCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCQl2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkJICAgICgzMDMsIDI1MSkKLQkJCQkJICAgICgzMDMsIDE5MSkKLQkJCQkJICAgICg3MzcsIDE5MSkpCi0JCQkJCWxpbmVfc3R5bGUgCTAKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANDQKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANDIKLQkJCQkJICAgIGxvY2F0aW9uICAgCSg2MjIsIDIyOCkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNzY3MjA2Ci0JCQkJCSAgICBoZWlnaHQgICAgIAkzNwotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDQ1Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDQyCi0JCQkJCSAgICBsb2NhdGlvbiAgIAkoNTc1LCAyODQpCi0JCQkJCSAgICBhbmNob3IgICAgIAkzCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNTkKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjY3MjA2NQotCQkJCQkgICAgaGVpZ2h0ICAgICAJOTMKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkxKSkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNyIgQDQ2Ci0JCQkJCVBhcmVudF9WaWV3IAlANDEKLQkJCQkJbG9jYXRpb24gICAJKC0xLCAtNTE3KQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjQ2ODczNzlCMDI5MCIKLQkJCQkJY2xpZW50ICAgICAJQDQxCi0JCQkJCXN1cHBsaWVyICAgCUAzNAotCQkJCQlsaW5lX3N0eWxlIAkwCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDQ3Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ2Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMzU3LCA2MDkpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCQkgICAgaGVpZ2h0ICAgICAJNTQKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKSkpKSkpKSkKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAid3NkbCIKLQkJaXNfdW5pdCAgICAJVFJVRQotCQlpc19sb2FkZWQgIAlGQUxTRQotCQlmaWxlX25hbWUgIAkiJFZBQkFTRV9QTFVHSU5TX1BBVEhcXG9yZy5lY2xpcHNlLndzdC53c2RsXFxtb2RlbFxcb3JnLmVjbGlwc2Uud3N0LldTREwuY2F0IgotCQlxdWlkICAgICAgIAkiM0FERkI4RTUwMjFFIikKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAieHNkIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2UueHNkXFxtb2RlbFxcb3JnLmVjbGlwc2UuWFNELmNhdCIKLQkJcXVpZCAgICAgICAJIjM5QUJEQzZGMDFBQSIpKQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjNBQzkxMDUxMDNCMiIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6Om1pbWUiIEA0OAotCQkJbG9jYXRpb24gICAJKDQwMCwgMjQwKQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDQ4Ci0JCQkgICAgbG9jYXRpb24gICAJKDI1NiwgMTU2KQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkibWltZSIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0FDOTEyN0MwMjY2IgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp3c2RsIiBANDkKLQkJCWxvY2F0aW9uICAgCSg4ODAsIDI0MCkKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA0OQotCQkJICAgIGxvY2F0aW9uICAgCSg3MzYsIDE1NikKLQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkgICAgbGFiZWwgICAgICAJIndzZGwiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjNBREZCOEU1MDIxRSIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKQotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6eHNkIiBANTAKLQkJCWxvY2F0aW9uICAgCSgxMzc2LCAyNDApCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlANTAKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTIzMiwgMTU2KQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkieHNkIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzOUFCREM2RjAxQUEiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkpKSkpCi0gICAgcm9vdF9zdWJzeXN0ZW0gCShvYmplY3QgU3ViU3lzdGVtICJDb21wb25lbnQgVmlldyIKLQlxdWlkICAgICAgIAkiM0FDOTEwNTEwMzFGIgotCXBoeXNpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdCkKLQlwaHlzaWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgTW9kdWxlX0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzQUM5MTA1MjAwMUEiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb2Nlc3Nfc3RydWN0dXJlIAkob2JqZWN0IFByb2Nlc3NlcwotCXF1aWQgICAgICAgCSIzQUM5MTA1MTAzMjYiCi0JUHJvY3NORGV2cyAJKGxpc3QKLQkgICAgKG9iamVjdCBQcm9jZXNzX0RpYWdyYW0gIkRlcGxveW1lbnQgVmlldyIKLQkJcXVpZCAgICAgICAJIjNBQzkxMDUxMDMyOCIKLQkJdGl0bGUgICAgICAJIkRlcGxveW1lbnQgVmlldyIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICBwcm9wZXJ0aWVzIAkob2JqZWN0IFByb3BlcnRpZXMKLQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlIgotCQkJdmFsdWUgICAgICAJKCJEYXRhQmFzZVNldCIgODAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiQU5TSSIKLQkJCQl2YWx1ZSAgICAgIAk4MDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJPcmFjbGUiCi0JCQkJdmFsdWUgICAgICAJODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU1FMU2VydmVyIgotCQkJCXZhbHVlICAgICAgCTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIlN5YmFzZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJXYXRjb20iCi0JCQkJdmFsdWUgICAgICAJODA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJJZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVl8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lIgotCQkJdmFsdWUgICAgICAJIlRfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiX1YiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQmFzZVZpZXdzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJWQVJDSEFSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTnVsbHNPSyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiZnJhbWV3b3JrIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMRWxlbWVudCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjaWZpY2F0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSURMU3BlY1NldCIgMjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMU3BlY1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkludGVyZmFjZSIKLQkJCQl2YWx1ZSAgICAgIAkyMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlR5cGVkZWYiCi0JCQkJdmFsdWUgICAgICAJNTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFbnVtZXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFeGNlcHRpb24iCi0JCQkJdmFsdWUgICAgICAJNjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTdHJ1Y3QiCi0JCQkJdmFsdWUgICAgICAJNTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJVbmlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4MSkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLm1pbWUvc3JjL3Jvc2UvbWltZWJpbmRpbmdNREwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUlETE1vZHVsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVCeVNpbXBsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5taW1lL3NyYy9yb3NlL21pbWViaW5kaW5nTURMLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkSGFzUmVsVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSGFzUmVsVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkUm9sZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkFzc29jVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fU3Vic3lzdGVtIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVByZWZpeGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJtXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJzXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdEF0dHJpYnV0ZURhdGFUeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdE9wZXJhdGlvblJldHVyblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkidm9pZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUm9vdERpciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkF1dG9TeW5jIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2hvd0NvZGVnZW5EbGciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jRGVmYXVsdEF1dGhvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0VmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0U2luY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jTnVtQXN0ZXJpc2tzIgotCQkJdmFsdWUgICAgICAJMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNYXhOdW1DaGFycyIKLQkJCXZhbHVlICAgICAgCTgwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVkaXRvciIKLQkJCXZhbHVlICAgICAgCSgiRWRpdG9yVHlwZSIgMTAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWTSIKLQkJCXZhbHVlICAgICAgCSgiVk1UeXBlIiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNsYXNzUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVkaXRvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRJbiIKLQkJCQl2YWx1ZSAgICAgIAkxMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV2luZG93c1NoZWxsIgotCQkJCXZhbHVlICAgICAgCTEwMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZNVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdW4iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk1pY3Jvc29mdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiSUJNIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk5vQ2xhc3NDdXN0b21EbGciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHbG9iYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk9wZW5CcmFjZUNsYXNzU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk9wZW5CcmFjZU1ldGhvZFN0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VUYWJzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlU3BhY2VzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTcGFjaW5nSXRlbXMiCi0JCQl2YWx1ZSAgICAgIAkzKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJvc2VEZWZhdWx0Q29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBc3Rlcmlza0NvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jQXV0aG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY1NpbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY1ZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvZGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc2FibGVBdXRvU3luYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXROYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRleHRSZWYiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc1NpbmdsZVRocmVhZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJc1NlY3VyZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclBhdGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVySW5jbHVkZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJGb3J3YXJkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Z2V0SW5mbyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGVzTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0QXR0cmlidXRlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RQYXJhbWV0ZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckhlYWRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW50SGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldERhdGVIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29va2llIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yQ29va2llIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRlbnRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVIVE1MIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVfWE1MX0REIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbXBGaWVsZCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkVudmlyb25tZW50UHJvcGVydGllcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNueEZhY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWZlcmVuY2VzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQk5hbWVJbkpBUiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJTZXNzaW9uVHlwZV9TZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVsZXNzIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWZ1bCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiIDIxMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjExKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjEyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IiAyMjApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIyMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIyMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjIyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVlbnRyYW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQk1QX0V4dGVuZF9DTVAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTmF0aXZlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3luY2hyb25pemVkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkJlYW5Qcm9wZXJ0eV9TZXQiIDcxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCZWFuUHJvcGVydHlfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk5vdCBBIFByb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAk3MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCb3VuZCIKLQkJCQl2YWx1ZSAgICAgIAk3MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJhaW5lZCIKLQkJCQl2YWx1ZSAgICAgIAk3NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluZGl2aWR1YWxDaGFuZ2VNZ3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlIgotCQkJdmFsdWUgICAgICAJKCJSZWFkL1dyaXRlX1NldCIgODEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgJiBXcml0ZSIKLQkJCQl2YWx1ZSAgICAgIAk4MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV3JpdGUgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRnVsbHlRdWFsaWZpZWRUeXBlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlRyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUHJvcGVydHlUeXBlIgotCQkJdmFsdWUgICAgICAJKCJCZWFuUHJvcGVydHlfU2V0IiA3MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQmVhblByb3BlcnR5X1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJOb3QgQSBQcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJNzIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQm91bmQiCi0JCQkJdmFsdWUgICAgICAJNzMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RyYWluZWQiCi0JCQkJdmFsdWUgICAgICAJNzQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbmRpdmlkdWFsQ2hhbmdlTWd0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZSIKLQkJCXZhbHVlICAgICAgCSgiUmVhZC9Xcml0ZV9TZXQiIDgxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkICYgV3JpdGUiCi0JCQkJdmFsdWUgICAgICAJODEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIldyaXRlIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZ1bGx5UXVhbGlmaWVkVHlwZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc05hdmlnYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiMzYwMDAwMDAyIikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRERMU2NyaXB0RmlsZW5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiRERMMS5TUUwiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkRyb3BDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJfSUQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIk5VTUJFUig1LDApIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NoZW1hTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlR5cGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZhcnJheU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOZXN0ZWRUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOZXN0ZWRUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPYmplY3RUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPYmplY3RUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNTY2hlbWEiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT0lEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiV2hlcmVDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZUxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlUHJlY2lzaW9uIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVTY2FsZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25PZlJFRlMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIk1ldGhvZEtpbmRTZXQiIDE5MDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk92ZXJsb2FkSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUmVhZE5vRGF0YVN0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9Qcm9jZXNzU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1dyaXRlTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1dyaXRlTm9Qcm9jZXNzU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NlbGZpc2giCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlclR5cGVTZXQiIDE4MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckV2ZW50U2V0IiAxNjAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJSZWZlcmVuY2luZ05hbWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckZvckVhY2giCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJGb3JFYWNoU2V0IiAxNzAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyV2hlbkNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiTWFwTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTE5MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3JkZXJNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJGdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxOTAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlByb2NlZHVyZSIKLQkJCQl2YWx1ZSAgICAgIAkxOTA0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk9wZXJhdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDcpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVHJpZ2dlciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkNhbGN1bGF0ZWQiCi0JCQkJdmFsdWUgICAgICAJMTkwOSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkFGVEVSIgotCQkJCXZhbHVlICAgICAgCTE4MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQkVGT1JFIgotCQkJCXZhbHVlICAgICAgCTE4MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TVEVBRCBPRiIKLQkJCQl2YWx1ZSAgICAgIAkxODAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckZvckVhY2hTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUk9XIgotCQkJCXZhbHVlICAgICAgCTE3MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiU1RBVEVNRU5UIgotCQkJCXZhbHVlICAgICAgCTE3MDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRXZlbnRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIgotCQkJCXZhbHVlICAgICAgCTE2MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIFVQREFURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIFVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTnVsbHNBbGxvd2VkIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiMiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NhbGUiCi0JCQl2YWx1ZSAgICAgIAkiNiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNJbmRleCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUHJpbWFyeUtleSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVzZU1TVkMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZUJhY2t1cEV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJofiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVUZW1wb3JhcnlFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaCMiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcHAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZUJhY2t1cEV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcH4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcCMiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcnJvckxpbWl0IgotCQkJdmFsdWUgICAgICAJMzApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIkUk9TRUNQUF9TT1VSQ0UiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQYXRoU2VwYXJhdG9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lRm9ybWF0IgotCQkJdmFsdWUgICAgICAJIjEyOHZ4X2IiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb29sZWFuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJpbnQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd1RlbXBsYXRlcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93RXhwbGljaXRJbnN0YW50aWF0aW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93UHJvdGVjdGVkSW5oZXJpdGFuY2UiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb21tZW50V2lkdGgiCi0JCQl2YWx1ZSAgICAgIAk2MCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT25lQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbmFsQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJPcHRpb25hbEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbmFsQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaXhlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRGaXhlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaXhlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRGaXhlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkTGlzdEJ5VmFsdWU8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkU2V0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkTGlzdEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVuYm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkTGlzdEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkU2V0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkTGlzdEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJBc3NvY2lhdGlvbkJ5VmFsdWU8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJEaWN0aW9uYXJ5QnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJBc3NvY2lhdGlvbkJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVJlZmVyZW5jZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNsYXNzS2V5IgotCQkJdmFsdWUgICAgICAJImNsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQdXRCb2RpZXNJblNwZWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0Q29uc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeHBsaWNpdERlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvcHlDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0Q29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3JLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzaWdubWVudFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzaWdubWVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzaWdubWVudE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVxdWFsaXR5T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcXVhbGl0eUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUVxdWFsaXR5T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJlbGF0aW9uYWxWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJlbGF0aW9uYWxLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGcmllbmRLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVSZWxhdGlvbmFsT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0b3JhZ2VNZ210T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdG9yYWdlTWdtdFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRSZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN1YnNjcmlwdE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlcmVmZXJlbmNlT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VSZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlcmVmZXJlbmNlT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5kaXJlY3Rpb25PcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25WaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lSW5kaXJlY3Rpb25PcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0cmVhbVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3RyZWFtT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUaHJlZUtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGcmllbmRLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlQW5kRGVmaW5lIgotCQkJCXZhbHVlICAgICAgCTE5OSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRGVjbGFyZU9ubHkiCi0JCQkJdmFsdWUgICAgICAJMjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEb05vdERlY2xhcmUiCi0JCQkJdmFsdWUgICAgICAJMjA2KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5taW1lL3NyYy9yb3NlL21pbWViaW5kaW5nTURMLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZU9yZGVyIgotCQkJdmFsdWUgICAgICAJIkFNSVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAkoIklubGluaW5nU3R5bGVTZXQiIDIwNykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkluQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZvbGxvd2luZ0NsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA3KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlR5cGVzRGVmaW5lZCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUNsb3N1cmUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5taW1lL3NyYy9yb3NlL21pbWViaW5kaW5nTURMLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiT3BlcmF0aW9uS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhpdENvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9keUFubm90YXRpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmFpc2VzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9yZGVyZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3Rvck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2VsZWN0b3JUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhhc1JlbFR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0Fzc29jaWF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluc3RhbmNlQXJndW1lbnRzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyR2V0IgotCQkJdmFsdWUgICAgICAJIiRkYXRhLmdldCgka2V5cykiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJTZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuc2V0KCRrZXlzLCR2YWx1ZSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0NvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkc3VwcGxpZXIgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAkoIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlU2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19HZXRTZXRCeVJlZmVyZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUXVhbGlmaWVkR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVF1YWxpZmllZFNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0RhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0dldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc29jQ2xhc3NHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc1NldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRBdHRyaWJ1dGVWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5UmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnlJc09uU2VhcmNoTGlzdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGVudCIKLQkJCXZhbHVlICAgICAgCTIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIjUuMCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNDbGFzc1R5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNDbGFzc1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb25uZWN0aW9uX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDbGFzc19GYWN0b3J5IgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT2JqZWN0RnVuY3Rpb25hbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5hbWljIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRHluY3JlYXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU2VyaWFsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU92ZXJyaWRlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9EQVRBX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaWVsZEdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0ZJRUxEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNZXNzYWdlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSgiT0xFRmFjdG9yeVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRfaW4iCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJMaWNlbnNlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUNsYXNzSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDdGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPTEVUeXBlTGliIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYklEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1ham9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1pbm9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wUGFnZUlEcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcGF0Y2hNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRnVuY3Rpb25zIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoRGVmVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURpc3BJZEVudW0iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUF9JRF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW50ZXJmYWNlTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSU5URVJGQUNFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaXRJbnRlcmZhY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUV2ZW50TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRXZlbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRTaW5rTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlByb3BOb3RpZnlTaW5rcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25Qb2ludElJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRhbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ29tbWFuZHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDSW1wbGVtZW50cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBVExfRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDT01NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT01fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb25uZWN0aW9uUG9pbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX1BPSU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTXNnTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJvcGVydHlNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQUk9QRVJUWV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNPcGVyYXRpb25UeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDT3BlcmF0aW9uVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsX092ZXJyaWRlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVzc2FnZV9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlzcGF0Y2hfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X0ZpcmluZ19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X1NpbmtfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAk1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0ZF9PTEVfTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ29tbWFuZF9QYXJzZXIiCi0JCQkJdmFsdWUgICAgICAJNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9HZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9TZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9Ob3RpZnlfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWFjcm9fR2VuZXJhdGVkX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX01TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRVNTQUdFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkJvZHlJbWFnZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5jbHVkZXNHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9JTkNMVURFU19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zZXJ0TG9jYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiU0NDIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJUeXBlTGliSW1wb3J0ZXIiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI3ODM2MDYzNzgiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljTm90Q3JlYXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTIxMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxTaW5nbGVVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiR2xvYmFsTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjIwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25CYXNlIgotCQkJdmFsdWUgICAgICAJIjAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uQ29tcGFyZSIKLQkJCXZhbHVlICAgICAgCSgiQ29tcGFyZVNldCIgMjAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZSIKLQkJCXZhbHVlICAgICAgCSgiQ3JlYXRhYmxlU2V0IiAyMjEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbml0aWFsaXphdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVUZXJtaW5hdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbkNsYXNzIgotCQkJdmFsdWUgICAgICAJIkNvbGxlY3Rpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29tcGFyZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiQmluYXJ5IgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlRleHQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkb3BlcmF0aW9uIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkxpYnJhcnlOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJBbGlhc05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFbnRyeUNvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOZXciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIldpdGhFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZSRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTGV0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSW5oZXJpdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50c0RlbGVnYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiUHJvamVjdEZpbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWxTdHVkaW8iCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yIgotCQkJdmFsdWUgICAgICAJKCJFZGl0b3JUeXBlIiAxMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkVkaXRvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIkJ1aWx0SW4iCi0JCQkJdmFsdWUgICAgICAJMTAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJXaW5kb3dzU2hlbGwiCi0JCQkJdmFsdWUgICAgICAJMTAxKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICVRJSAlWiUgJVclIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgJVElICVaJSAlVyUiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9yZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJEZWZhdWx0X1NlcnZsZXRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGV4dFJlZiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzU2luZ2xlVGhyZWFkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldElzU2VjdXJlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJJbmNsdWRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckZvcndhcmQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0U2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRnZXRJbmZvIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkh0dHBfU2VydmxldF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlc05hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdEF0dHJpYnV0ZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0UGFyYW1ldGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JIZWFkZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEludEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXREYXRlSGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvb2tpZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckNvb2tpZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZW50VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSFRNTCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJEZWZhdWx0X0VKQl9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZV9YTUxfREQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNtcEZpZWxkIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCRW52aXJvbm1lbnRQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ254RmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZmVyZW5jZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCTmFtZUluSkFSIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlNlc3Npb25UeXBlX1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWxlc3MiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlZnVsIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIgMjExKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiIDIyMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjIwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMjIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWVudHJhbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCTVBfRXh0ZW5kX0NNUCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlIyRWRpdG9yIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSb3NlIE1vZGVsIEludGVncmF0b3IiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJvc2UgV2ViIFB1Ymxpc2hlciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmVyc2lvbiBDb250cm9sIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSZXBvc2l0b3J5IgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjkiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DYXRlZ29yeSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwYWNrYWdlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1ByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJiYXNlUGFja2FnZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNsYXNzaWZpZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNvbnN0cmFpbnRzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkNvbnRlbnRLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVtcHR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJNaXhlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50T25seSIKLQkJCQl2YWx1ZSAgICAgIAk0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkib3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYXR0cmlidXRlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzSUQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicmVmZXJlbmNlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1Jlc29sdmVQcm94aWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpKQotCXF1aWQgICAgICAgCSIzQUM5MTA1MTAzMjciKSkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYyMWFhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1NPQVAuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJzb2FwIgotICAgIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9TT0FQIiBuc1ByZWZpeD0ic29hcCI+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEJpbmRpbmciIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSVNPQVBCaW5kaW5nIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idHJhbnNwb3J0VVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InN0eWxlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNPQVBCb2R5IiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lTT0FQQm9keSI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lc3BhY2VVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZUVuY29kaW5nU3R5bGVzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL0lTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBhcnRzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vUGFydCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTT0FQSGVhZGVyQmFzZSIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEVuY29kaW5nU3R5bGVzIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9JTGlzdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRFbmNvZGluZ1N0eWxlcyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZW5jb2RpbmdTdHlsZXMiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlRW5jb2RpbmdTdHlsZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vSVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtZXNzYWdlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIFdTREwuZWNvcmUjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwYXJ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVNZXNzYWdlIiBsb3dlckJvdW5kPSIxIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9NZXNzYWdlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJ0IiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9QYXJ0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNPQVBGYXVsdCIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JU09BUEZhdWx0Ij4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlRW5jb2RpbmdTdHlsZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vSVN0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ic3VwcHJlc3NlZEdldFZpc2liaWxpdHkiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUE9wZXJhdGlvbiIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JU09BUE9wZXJhdGlvbiI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNvYXBBY3Rpb25VUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3R5bGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEFkZHJlc3MiIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSVNPQVBBZGRyZXNzIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb25VUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEhlYWRlckZhdWx0IiBlU3VwZXJUeXBlcz0iIy8vU09BUEhlYWRlckJhc2UgIy8vSVNPQVBIZWFkZXJGYXVsdCIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNPQVBIZWFkZXIiIGVTdXBlclR5cGVzPSIjLy9TT0FQSGVhZGVyQmFzZSAjLy9JU09BUEhlYWRlciI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImhlYWRlckZhdWx0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9TT0FQSGVhZGVyRmF1bHQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IklTdHJpbmciIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLmxhbmcuU3RyaW5nIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBCaW5kaW5nIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmciCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBBZGRyZXNzIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBCb2R5IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RW5jb2RpbmdTdHlsZXMiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldEVuY29kaW5nU3R5bGVzIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJlbmNvZGluZ1N0eWxlcyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUxpc3QiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0cyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0UGFydHMiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBhcnRzIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9JTGlzdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTT0FQRmF1bHQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBPcGVyYXRpb24iIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTT0FQSGVhZGVyRmF1bHQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBIZWFkZXIiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFNPQVBIZWFkZXJGYXVsdHMiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFNPQVBIZWFkZXJGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ic29hcEhlYWRlckZhdWx0IiBlVHlwZT0iIy8vSVNPQVBIZWFkZXJGYXVsdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5nZW5tb2RlbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5nZW5tb2RlbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg2MjNlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1NPQVAuZ2VubW9kZWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKLSAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcCIKLSAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMiCi0gICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIG1vZGVsTmFtZT0iU09BUCIgZWRpdFBsdWdpbkNsYXNzPSIiIGVkaXRvclBsdWdpbkNsYXNzPSIiCi0gICAgbm9uTkxTTWFya2Vycz0idHJ1ZSIgY29kZUZvcm1hdHRpbmc9InRydWUiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5yb3NlIgotICAgIHVzZWRHZW5QYWNrYWdlcz0iV1NETC5nZW5tb2RlbCMvL3dzZGwgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmdlbm1vZGVsIy8veHNkIj4KLSAgPGZvcmVpZ25Nb2RlbD5TT0FQLm1kbDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlZBQkFTRV9QTFVHSU5TX1BBVEg8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD4uLi8uLi8uLjwvZm9yZWlnbk1vZGVsPgotICA8Z2VuUGFja2FnZXMgcHJlZml4PSJTT0FQIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKLSAgICAgIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIgdXRpbGl0eVBhY2thZ2VTdWZmaXg9ImludGVybmFsLnV0aWwiIGVjb3JlUGFja2FnZT0iU09BUC5lY29yZSMvIj4KLSAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9IlNPQVAuZWNvcmUjLy9JU3RyaW5nIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL1NPQVBCaW5kaW5nIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEJpbmRpbmcvdHJhbnNwb3J0VVJJIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBCaW5kaW5nL3N0eWxlIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQQm9keSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBCb2R5L3VzZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQQm9keS9uYW1lc3BhY2VVUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEJvZHkvZUVuY29kaW5nU3R5bGVzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgU09BUC5lY29yZSMvL1NPQVBCb2R5L2VQYXJ0cyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS91c2UiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvbmFtZXNwYWNlVVJJIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBIZWFkZXJCYXNlL2VFbmNvZGluZ1N0eWxlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS9tZXNzYWdlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBIZWFkZXJCYXNlL3BhcnQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvZU1lc3NhZ2UiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvZVBhcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvZ2V0RW5jb2RpbmdTdHlsZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2Uvc2V0RW5jb2RpbmdTdHlsZXMiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iU09BUC5lY29yZSMvL1NPQVBIZWFkZXJCYXNlL3NldEVuY29kaW5nU3R5bGVzL2VuY29kaW5nU3R5bGVzIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQRmF1bHQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQRmF1bHQvdXNlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBGYXVsdC9uYW1lc3BhY2VVUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEZhdWx0L2VFbmNvZGluZ1N0eWxlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQRmF1bHQvbmFtZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vU09BUE9wZXJhdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBPcGVyYXRpb24vc29hcEFjdGlvblVSSSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQT3BlcmF0aW9uL3N0eWxlIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQQWRkcmVzcyI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBBZGRyZXNzL2xvY2F0aW9uVVJJIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyRmF1bHQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlciI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyL2hlYWRlckZhdWx0cyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUEJpbmRpbmciLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUEFkZHJlc3MiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkvZ2V0RW5jb2RpbmdTdHlsZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vSVNPQVBCb2R5L3NldEVuY29kaW5nU3R5bGVzIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkvc2V0RW5jb2RpbmdTdHlsZXMvZW5jb2RpbmdTdHlsZXMiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vSVNPQVBCb2R5L2dldFBhcnRzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iU09BUC5lY29yZSMvL0lTT0FQQm9keS9zZXRQYXJ0cyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJTT0FQLmVjb3JlIy8vSVNPQVBCb2R5L3NldFBhcnRzL3BhcnRzIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQRmF1bHQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUE9wZXJhdGlvbiIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQSGVhZGVyRmF1bHQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUEhlYWRlciI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iU09BUC5lY29yZSMvL0lTT0FQSGVhZGVyL2dldFNPQVBIZWFkZXJGYXVsdHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vSVNPQVBIZWFkZXIvYWRkU09BUEhlYWRlckZhdWx0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IlNPQVAuZWNvcmUjLy9JU09BUEhlYWRlci9hZGRTT0FQSGVhZGVyRmF1bHQvc29hcEhlYWRlckZhdWx0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICA8L2dlblBhY2thZ2VzPgotPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5tZGwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1NPQVAubWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzIwZjMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5tZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2MjMzICswLDAgQEAKLQotKG9iamVjdCBQZXRhbAotICAgIHZlcnNpb24gICAgCTQyCi0gICAgX3dyaXR0ZW4gICAJIlJvc2UgNC41LjgxNjMuMyIKLSAgICBjaGFyU2V0ICAgIAkwKQotCi0ob2JqZWN0IERlc2lnbiAiTG9naWNhbCBWaWV3IgotICAgIGlzX3VuaXQgICAgCVRSVUUKLSAgICBpc19sb2FkZWQgIAlUUlVFCi0gICAgZGVmYXVsdHMgICAJKG9iamVjdCBkZWZhdWx0cwotCXJpZ2h0TWFyZ2luIAkwLjI1MDAwMAotCWxlZnRNYXJnaW4gCTAuMjUwMDAwCi0JdG9wTWFyZ2luICAJMC4yNTAwMDAKLQlib3R0b21NYXJnaW4gCTAuNTAwMDAwCi0JcGFnZU92ZXJsYXAgCTAuMjUwMDAwCi0JY2xpcEljb25MYWJlbHMgCVRSVUUKLQlhdXRvUmVzaXplIAlUUlVFCi0Jc25hcFRvR3JpZCAJVFJVRQotCWdyaWRYICAgICAgCTE2Ci0JZ3JpZFkgICAgICAJMTYKLQlkZWZhdWx0Rm9udCAJKG9iamVjdCBGb250Ci0JICAgIHNpemUgICAgICAgCTEwCi0JICAgIGZhY2UgICAgICAgCSJBcmlhbCIKLQkgICAgYm9sZCAgICAgICAJRkFMU0UKLQkgICAgaXRhbGljcyAgICAJRkFMU0UKLQkgICAgdW5kZXJsaW5lICAJRkFMU0UKLQkgICAgc3RyaWtlICAgICAJRkFMU0UKLQkgICAgY29sb3IgICAgICAJMAotCSAgICBkZWZhdWx0X2NvbG9yIAlUUlVFKQotCXNob3dNZXNzYWdlTnVtIAkxCi0Jc2hvd0NsYXNzT2ZPYmplY3QgCVRSVUUKLQlub3RhdGlvbiAgIAkiVW5pZmllZCIpCi0gICAgcm9vdF91c2VjYXNlX3BhY2thZ2UgCShvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIlVzZSBDYXNlIFZpZXciCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2NCIKLQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCWdsb2JhbCAgICAgCVRSVUUKLQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdCkKLQlsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBVc2VDYXNlRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA3OCIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QpKSkpCi0gICAgcm9vdF9jYXRlZ29yeSAJKG9iamVjdCBDbGFzc19DYXRlZ29yeSAiTG9naWNhbCBWaWV3IgotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjMiCi0JZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQlnbG9iYWwgICAgIAlUUlVFCi0Jc3Vic3lzdGVtICAJIkNvbXBvbmVudCBWaWV3IgotCXF1aWR1ICAgICAgCSIzOUUyN0YwODAwNjUiCi0JbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAid3NkbCIKLQkJaXNfdW5pdCAgICAJVFJVRQotCQlpc19sb2FkZWQgIAlGQUxTRQotCQlmaWxlX25hbWUgIAkiJFZBQkFTRV9QTFVHSU5TX1BBVEhcXG9yZy5lY2xpcHNlLndzdC53c2RsXFxtb2RlbFxcb3JnLmVjbGlwc2Uud3N0LldTREwuY2F0IgotCQlxdWlkICAgICAgIAkiM0FERkI4RTUwMjFFIikKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAic29hcCIKLQkJYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1ByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJzb2FwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkibnNVUkkiCi0JCQl2YWx1ZSAgICAgIAkiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvU09BUCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCQkJdmFsdWUgICAgICAJIm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmciKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiU09BUCIpKQotCQlxdWlkICAgICAgIAkiM0EwMUNGMEMwMUEyIgotCQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEJpbmRpbmciCi0JCQlxdWlkICAgICAgIAkiM0EwMUQzQjkwMUFEIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5QTM4MDFBQiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0NUU0ODk1NTAyQkYiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBCaW5kaW5nIgotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODVBMjAwMUYiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidHJhbnNwb3J0VVJJIgotCQkJCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQpCi0JCQkJcXVpZCAgICAgICAJIjNBMDFEM0RGMDFFNCIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJzdHlsZSIKLQkJCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0KQotCQkJCXF1aWQgICAgICAgCSIzQTAxRDNGMTAyOUUiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEJvZHkiCi0JCQlxdWlkICAgICAgIAkiM0EwMURFRDUwMzFGIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5QTQ1MDA0MSIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0NUU0OEE1QjAwQkIiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBCb2R5IgotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODg0QjAxMTkiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidXNlIgotCQkJCXF1aWQgICAgICAgCSIzQTAxRTJENTAxQTUiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZXNwYWNlVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQTkzNDc3QzAxQjIiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZUVuY29kaW5nU3R5bGVzIgotCQkJCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQpCi0JCQkJcXVpZCAgICAgICAJIjQ1RUM5OEE2MDI3MSIKLQkJCQlzdGVyZW90eXBlIAkiMC4uKiIKLQkJCQl0eXBlICAgICAgIAkiSVN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEhlYWRlckJhc2UiCi0JCQlxdWlkICAgICAgIAkiM0EwMURFRTcwMzREIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5QTNFMDMyNiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikpCi0JCQlvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldEVuY29kaW5nU3R5bGVzIgotCQkJCXF1aWQgICAgICAgCSI0NUVEMDRDMjAwRUEiCi0JCQkJcmVzdWx0ICAgICAJIklMaXN0IgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAic2V0RW5jb2RpbmdTdHlsZXMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RUQwNTczMDIyMiIKLQkJCQlwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkJICAgIChvYmplY3QgUGFyYW1ldGVyICJlbmNvZGluZ1N0eWxlcyIKLQkJCQkJdHlwZSAgICAgICAJIklMaXN0IikpCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidXNlIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MkU5QzAwNTYiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZXNwYWNlVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MkVBMjAyNUQiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZUVuY29kaW5nU3R5bGVzIgotCQkJCXF1aWQgICAgICAgCSIzRUU0QTU4RjAxQUUiCi0JCQkJc3RlcmVvdHlwZSAJIjAuLioiCi0JCQkJdHlwZSAgICAgICAJIklTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm1lc3NhZ2UiCi0JCQkJcXVpZCAgICAgICAJIjQ1RjA2RTM2MDE4NiIKLQkJCQl0eXBlICAgICAgIAkiUU5hbWUiKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjQ1RjA2RTZDMDE5NiIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJTT0FQRmF1bHQiCi0JCQlxdWlkICAgICAgIAkiM0EwNkQ5RkEwMEY3IgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5QTRBMDAyMCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0NUU0OEEwODAzMkMiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBGYXVsdCIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4ODcwMTE5IikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInVzZSIKLQkJCQlxdWlkICAgICAgIAkiM0EwOTgyMUEwMTJCIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm5hbWVzcGFjZVVSSSIKLQkJCQlxdWlkICAgICAgIAkiM0FENjIwNDgwM0FFIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImVFbmNvZGluZ1N0eWxlcyIKLQkJCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQkJbmFtZSAgICAgICAJInZpc2liaWxpdHkiCi0JCQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDEpKSkKLQkJCQlxdWlkICAgICAgIAkiM0VFNEE1NjMwM0FGIgotCQkJCXN0ZXJlb3R5cGUgCSIwLi4qIgotCQkJCXR5cGUgICAgICAgCSJJU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkJCXF1aWQgICAgICAgCSI0NUYwNzlEMTAzOTkiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUE9wZXJhdGlvbiIKLQkJCXF1aWQgICAgICAgCSIzQTBBRDQ1NTAwRTgiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFMDlBNEUwMzFGIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4OTdGMDA3RCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUE9wZXJhdGlvbiIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4QTUwMTI4IikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInNvYXBBY3Rpb25VUkkiCi0JCQkJcXVpZCAgICAgICAJIjNBMEFENDY0MDA0QSIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJzdHlsZSIKLQkJCQlxdWlkICAgICAgIAkiM0EwQUQ0NkMwMThDIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIlNPQVBBZGRyZXNzIgotCQkJcXVpZCAgICAgICAJIjNBRDFGRjc1MDI4NyIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUUwOTUzNTAwOTgiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDVFNDhBN0UwMTA5IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQQWRkcmVzcyIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg3RTcwMEVBIikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImxvY2F0aW9uVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUQyMTFDOTAyNUMiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEhlYWRlckZhdWx0IgotCQkJcXVpZCAgICAgICAJIjNBRDYzMkI4MDNERCIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUQ2MzMzNDAwMzgiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckJhc2UiCi0JCQkJcXVpZHUgICAgICAJIjNBMDFERUU3MDM0RCIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDVFRDA3OEMwMkZEIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQSGVhZGVyRmF1bHQiCi0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OEJEMDNBOSIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEhlYWRlciIKLQkJCXF1aWQgICAgICAgCSIzQUQ2MzMwOTAxNkQiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FENjMzMzAwMTdEIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBIZWFkZXJCYXNlIgotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVFNzAzNEQiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4OUJDMDMxQyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEhlYWRlciIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4RTcwMDhDIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU3RyaW5nIgotCQkJcXVpZCAgICAgICAJIjNCOEREOTBDMDIyMCIKLQkJCXN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS5sYW5nLlN0cmluZyIKLQkJCQlxdWlkICAgICAgIAkiM0I4REQ5MzIwMzgzIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEJpbmRpbmciCi0JCQlxdWlkICAgICAgIAkiNDVFNDg1QTIwMDFGIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmciCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4NjM3MDFENCIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEFkZHJlc3MiCi0JCQlxdWlkICAgICAgIAkiNDVFNDg3RTcwMEVBIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MiCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4N0Y2MDMzQyIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIgotCQkJCXR5cGUgICAgICAgCSJ0eXBlIgotCQkJCWluaXR2ICAgICAgCSJpbml0dmFsIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEJvZHkiCi0JCQlxdWlkICAgICAgIAkiNDVFNDg4NEIwMTE5IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCW9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RW5jb2RpbmdTdHlsZXMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4RThEMDIyMiIKLQkJCQlyZXN1bHQgICAgIAkiSUxpc3QiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJzZXRFbmNvZGluZ1N0eWxlcyIKLQkJCQlxdWlkICAgICAgIAkiNDVGNkQ2ODIwMjAzIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgImVuY29kaW5nU3R5bGVzIgotCQkJCQl0eXBlICAgICAgIAkiSUxpc3QiKSkKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkJKG9iamVjdCBPcGVyYXRpb24gImdldFBhcnRzIgotCQkJCXF1aWQgICAgICAgCSI0NUVDNThBMzAzMUMiCi0JCQkJcmVzdWx0ICAgICAJIklMaXN0IgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAic2V0UGFydHMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RjZENjVBMDIwMyIKLQkJCQlwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkJICAgIChvYmplY3QgUGFyYW1ldGVyICJwYXJ0cyIKLQkJCQkJdHlwZSAgICAgICAJIklMaXN0IikpCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkiCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4ODU2MDIxMyIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIgotCQkJCXR5cGUgICAgICAgCSJ0eXBlIgotCQkJCWluaXR2ICAgICAgCSJpbml0dmFsIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEZhdWx0IgotCQkJcXVpZCAgICAgICAJIjQ1RTQ4ODg3MDExOSIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg4OTcwM0E5IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQT3BlcmF0aW9uIgotCQkJcXVpZCAgICAgICAJIjQ1RTQ4OEE1MDEyOCIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24iCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4OEFGMDBBQiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIgotCQkJCXR5cGUgICAgICAgCSJ0eXBlIgotCQkJCWluaXR2ICAgICAgCSJpbml0dmFsIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEhlYWRlckZhdWx0IgotCQkJcXVpZCAgICAgICAJIjQ1RTQ4OEJEMDNBOSIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg4Q0UwMjlGIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQSGVhZGVyIgotCQkJcXVpZCAgICAgICAJIjQ1RTQ4OEU3MDA4QyIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQlvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldFNPQVBIZWFkZXJGYXVsdHMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RUQwMzAyMDA4QyIKLQkJCQlyZXN1bHQgICAgIAkiSUxpc3QiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJhZGRTT0FQSGVhZGVyRmF1bHQiCi0JCQkJcXVpZCAgICAgICAJIjQ1RUQwMzk3MDJCRiIKLQkJCQlwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkJICAgIChvYmplY3QgUGFyYW1ldGVyICJzb2FwSGVhZGVyRmF1bHQiCi0JCQkJCXR5cGUgICAgICAgCSJJU09BUEhlYWRlckZhdWx0IikpCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg4RjEwMEJCIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDAiCi0JCQlxdWlkICAgICAgIAkiM0EwNkUwQjUwMDM2IgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICIkVU5OQU1FRCQxIgotCQkJCXF1aWQgICAgICAgCSIzQTA2RTBCNjAwQzQiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEJvZHkiCi0JCQkJcXVpZHUgICAgICAJIjNBMDFERUQ1MDMxRiIpCi0JCQkgICAgKG9iamVjdCBSb2xlICJlUGFydHMiCi0JCQkJcXVpZCAgICAgICAJIjNBMDZFMEI2MDBDNSIKLQkJCQlsYWJlbCAgICAgIAkiZVBhcnRzIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCQkJQ29udGFpbm1lbnQgCSJCeSBSZWZlcmVuY2UiCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JCSAgICAob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQyIgotCQkJcXVpZCAgICAgICAJIjNBRDYyREU2MDEzMCIKLQkJCXJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkJICAgIChvYmplY3QgUm9sZSAiZU1lc3NhZ2UiCi0JCQkJcXVpZCAgICAgICAJIjNBRDYyREU3MDA0QiIKLQkJCQlsYWJlbCAgICAgIAkiZU1lc3NhZ2UiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIKLQkJCQlxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJCQlpc19uYXZpZ2FibGUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBSb2xlICIkVU5OQU1FRCQzIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MkRFNzAwNTUiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckJhc2UiCi0JCQkJcXVpZHUgICAgICAJIjNBMDFERUU3MDM0RCIpKSkKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDQiCi0JCQlxdWlkICAgICAgIAkiM0FENjJERjgwMkQxIgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICJlUGFydCIKLQkJCQlxdWlkICAgICAgIAkiM0FENjJERkEwMDAyIgotCQkJCWxhYmVsICAgICAgCSJlUGFydCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkJCWlzX25hdmlnYWJsZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDUiCi0JCQkJcXVpZCAgICAgICAJIjNBRDYyREZBMDAwMyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyQmFzZSIKLQkJCQlxdWlkdSAgICAgIAkiM0EwMURFRTcwMzREIikpKQotCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNiIKLQkJCXF1aWQgICAgICAgCSIzQUQ2MzMzNzAxQ0QiCi0JCQlyb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDciCi0JCQkJcXVpZCAgICAgICAJIjNBRDYzMzM3MDM3MiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyIgotCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMwOTAxNkQiCi0JCQkJaXNfYWdncmVnYXRlIAlUUlVFKQotCQkJICAgIChvYmplY3QgUm9sZSAiaGVhZGVyRmF1bHRzIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MzMzNzAzNzMiCi0JCQkJbGFiZWwgICAgICAJImhlYWRlckZhdWx0cyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyRmF1bHQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDYzMkI4MDNERCIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCQkJQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkJCUNvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKSkpKQotCQlsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkJICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJCaW5kaW5nIgotCQkJcXVpZCAgICAgICAJIjNBMDFDRjIzMDI5RiIKLQkJCXRpdGxlICAgICAgCSJCaW5kaW5nIgotCQkJem9vbSAgICAgICAJODcKLQkJCW1heF9oZWlnaHQgCTI4MzUwCi0JCQltYXhfd2lkdGggIAkyMTYwMAotCQkJb3JpZ2luX3ggICAJMAotCQkJb3JpZ2luX3kgICAJMAotCQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBCaW5kaW5nIiBAMQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzA0LCA0ODApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxCi0JCQkJICAgIGxvY2F0aW9uICAgCSg0ODcsIDM3MikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MzQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEJpbmRpbmciKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxRDNCOTAxQUQiCi0JCQkJd2lkdGggICAgICAJNDUyCi0JCQkJaGVpZ2h0ICAgICAJMjQwCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQT3BlcmF0aW9uIiBAMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTQ3MiwgNDgwKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTIzNSwgMzcyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQ3NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQT3BlcmF0aW9uIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwQUQ0NTUwMEU4IgotCQkJCXdpZHRoICAgICAgCTQ5MgotCQkJCWhlaWdodCAgICAgCTI0MAotCQkJCWFubm90YXRpb24gCTgpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyIiBAMwotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzUyLCAxNTUyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMwotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjEyLCAxNTA0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI4MAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQSGVhZGVyIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjMzMDkwMTZEIgotCQkJCXdpZHRoICAgICAgCTI5OAotCQkJCWhlaWdodCAgICAgCTEyMAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckZhdWx0IiBANAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTk4NCwgMTUyMCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQKLQkJCQkgICAgbG9jYXRpb24gICAJKDE3OTcsIDE0NzIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzc0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBIZWFkZXJGYXVsdCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDYzMkI4MDNERCIKLQkJCQl3aWR0aCAgICAgIAkzOTIKLQkJCQloZWlnaHQgICAgIAkxMjAKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNiIgQDUKLQkJCQlsb2NhdGlvbiAgIAkoMTM0NCwgMTU1OSkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMzNzAxQ0QiCi0JCQkJcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDciIEA2Ci0JCQkJCVBhcmVudF9WaWV3IAlANQotCQkJCQlsb2NhdGlvbiAgIAkoNjg4LCA1NSkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMzNzAzNzIiCi0JCQkJCWNsaWVudCAgICAgCUA1Ci0JCQkJCXN1cHBsaWVyICAgCUAzCi0JCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzQ0LCAxNTU5KQotCQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoOTAxLCAxNTU5KSkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiaGVhZGVyRmF1bHRzIiBANwotCQkJCQlQYXJlbnRfVmlldyAJQDUKLQkJCQkJbG9jYXRpb24gICAJKDY4OCwgNTUpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDgKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANwotCQkJCQkgICAgbG9jYXRpb24gICAJKDEzMzEsIDE1MTkpCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkzNDYKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIraGVhZGVyRmF1bHRzIgotCQkJCQkgICAgcGN0RGlzdCAgICAJLTAuMDMwNzAyCi0JCQkJCSAgICBoZWlnaHQgICAgIAk0MQotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FENjMzMzcwMzczIgotCQkJCQljbGllbnQgICAgIAlANQotCQkJCQlzdXBwbGllciAgIAlANAotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTM0NCwgMTU1OSkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDE3ODgsIDE1NTkpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDkKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANwotCQkJCQkgICAgbG9jYXRpb24gICAJKDE2NzEsIDE1MjIpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjAuLioiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjczNjg0MgotCQkJCQkgICAgaGVpZ2h0ICAgICAJMzgKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMAotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA3Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTYxNywgMTU5NykKLQkJCQkJICAgIGFuY2hvciAgICAgCTMKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1MQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNjE0MDM1Ci0JCQkJCSAgICBoZWlnaHQgICAgIAkzOAotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKSkpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIiBAMTEKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgyNzM2LCA3ODQpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxMQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMjYxMywgNzA3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI0NgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNZXNzYWdlIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkJCXdpZHRoICAgICAgCTI2NAotCQkJCWhlaWdodCAgICAgCTE3OAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckJhc2UiIEAxMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTQ3MiwgOTI4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTIKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNTEsIDY2NSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk2NDIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEhlYWRlckJhc2UiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVFNzAzNEQiCi0JCQkJd2lkdGggICAgICAJNjYwCi0JCQkJaGVpZ2h0ICAgICAJNTUwCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDIiIEAxMwotCQkJCWxvY2F0aW9uICAgCSgyMjAzLCA4NTgpCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjJERTYwMTMwIgotCQkJCXJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlTWVzc2FnZSIgQDE0Ci0JCQkJCVBhcmVudF9WaWV3IAlAMTMKLQkJCQkJbG9jYXRpb24gICAJKDEwNTEsIC0zMTApCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE1Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDE0Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjM2NywgODg4KQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMjE2Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VNZXNzYWdlIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC40MTIzMjIKLQkJCQkJICAgIGhlaWdodCAgICAgCTMwCi0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUQ2MkRFNzAwNEIiCi0JCQkJCWNsaWVudCAgICAgCUAxMwotCQkJCQlzdXBwbGllciAgIAlAMTEKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDIyMDMsIDg1OCkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDI2MDQsIDg1OCkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTYKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMTQKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgyNDc5LCA4MjEpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjY4NzIwNAotCQkJCQkgICAgaGVpZ2h0ICAgICAJMzgKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKSkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMyIgQDE3Ci0JCQkJCVBhcmVudF9WaWV3IAlAMTMKLQkJCQkJbG9jYXRpb24gICAJKDEwNTEsIC0zMTApCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE4Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDE3Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjA1NSwgODk4KQotCQkJCQkgICAgaGlkZGVuICAgICAJVFJVRQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTkyCi0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC4zNzIyNTQKLQkJCQkJICAgIGhlaWdodCAgICAgCTQwCi0JCQkJCSAgICBvcmllbnRhdGlvbiAJMCkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUQ2MkRFNzAwNTUiCi0JCQkJCWNsaWVudCAgICAgCUAxMwotCQkJCQlzdXBwbGllciAgIAlAMTIKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDIyMDMsIDg1OCkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDE4MDIsIDg1OCkpKSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBCb2R5IiBAMTkKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE0NzIsIDIyNDApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTIyNiwgMjEzMikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0OTIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEJvZHkiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVENTAzMUYiCi0JCQkJY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTIyNiwgMjE5MikKLQkJCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJICAgIGZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkgICAgbmxpbmVzICAgICAJNAotCQkJCSAgICBtYXhfd2lkdGggIAkwKQotCQkJCXdpZHRoICAgICAgCTUxMAotCQkJCWhlaWdodCAgICAgCTI0MAotCQkJCWFubm90YXRpb24gCTgpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IiBAMjAKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgyMzUyLCAyMDgwKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjAKLQkJCQkgICAgbG9jYXRpb24gICAJKDIyMzYsIDE4NjYpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjMzCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlBhcnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCQkJd2lkdGggICAgICAJMjUxCi0JCQkJaGVpZ2h0ICAgICAJNDUyCi0JCQkJYW5ub3RhdGlvbiAJOCkKLQkJCSAgICAob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNCIgQDIxCi0JCQkJbG9jYXRpb24gICAJKDIyOTAsIDEyMzApCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjJERjgwMkQxIgotCQkJCXJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlUGFydCIgQDIyCi0JCQkJCVBhcmVudF9WaWV3IAlAMjEKLQkJCQkJbG9jYXRpb24gICAJKDExMzgsIDYyKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMwotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMgotCQkJCQkgICAgbG9jYXRpb24gICAJKDIzODAsIDE3NzkpCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxMjAKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIrZVBhcnQiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjg4MTQ2NQotCQkJCQkgICAgaGVpZ2h0ICAgICAJOTAKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRDYyREZBMDAwMiIKLQkJCQkJY2xpZW50ICAgICAJQDIxCi0JCQkJCXN1cHBsaWVyICAgCUAyMAotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMjI5MCwgMTIzMCkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDIyOTAsIDE4NTQpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI0Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDIyCi0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjIzNywgMTc3OSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuODgxNDY1Ci0JCQkJCSAgICBoZWlnaHQgICAgIAk1NAotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ1IiBAMjUKLQkJCQkJUGFyZW50X1ZpZXcgCUAyMQotCQkJCQlsb2NhdGlvbiAgIAkoMTEzOCwgNjIpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI2Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDI1Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTkyOCwgMTEzNykKLQkJCQkJICAgIGhpZGRlbiAgICAgCVRSVUUKLQkJCQkJICAgIGFuY2hvciAgICAgCTEKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTEyMAotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIiIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJCSAgICBoZWlnaHQgICAgIAk0MgotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FENjJERkEwMDAzIgotCQkJCQljbGllbnQgICAgIAlAMjEKLQkJCQkJc3VwcGxpZXIgICAJQDEyCi0JCQkJCXZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCQkgICAgKDIyOTAsIDEyMzApCi0JCQkJCSAgICAoMjI5MCwgMTA5NSkKLQkJCQkJICAgICgxODAyLCAxMDk1KSkKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDIyOTAsIDEyMzApCi0JCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxODAyLCAxMDk1KSkpKQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQwIiBAMjcKLQkJCQlsb2NhdGlvbiAgIAkoMTk3NywgMjI5MSkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQTA2RTBCNTAwMzYiCi0JCQkJcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDEiIEAyOAotCQkJCQlQYXJlbnRfVmlldyAJQDI3Ci0JCQkJCWxvY2F0aW9uICAgCSg3NDUsIC0xMykKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQTA2RTBCNjAwQzQiCi0JCQkJCWNsaWVudCAgICAgCUAyNwotCQkJCQlzdXBwbGllciAgIAlAMTkKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDE5NzcsIDIyOTEpCi0JCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzI3LCAyMjkxKSkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiZVBhcnRzIiBAMjkKLQkJCQkJUGFyZW50X1ZpZXcgCUAyNwotCQkJCQlsb2NhdGlvbiAgIAkoNzQ1LCAtMTMpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMwCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDI5Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjE4NSwgMjM5NSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTEKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE0NAotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIitlUGFydHMiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjgzMzg1NgotCQkJCQkgICAgaGVpZ2h0ICAgICAJMTA0Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQTA2RTBCNjAwQzUiCi0JCQkJCWNsaWVudCAgICAgCUAyNwotCQkJCQlzdXBwbGllciAgIAlAMjAKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDE5NzcsIDIyOTEpCi0JCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMjI3LCAyMjkxKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMQotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyOQotCQkJCQkgICAgbG9jYXRpb24gICAJKDIxODUsIDIyNDUpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjAuLioiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjgzMzg1NgotCQkJCQkgICAgaGVpZ2h0ICAgICAJNDcKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKSkpKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEZhdWx0IiBAMzIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU5MiwgMjI1NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgzNDYsIDIxNDgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDkyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBGYXVsdCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDZEOUZBMDBGNyIKLQkJCQl3aWR0aCAgICAgIAk1MTAKLQkJCQloZWlnaHQgICAgIAkyNDAKLQkJCQlhbm5vdGF0aW9uIAk4KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVN0cmluZyIgQDMzCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDI4OCwgMTM3NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMzCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMTQsIDEzNDgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzQ4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTdHJpbmciKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzMKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNCwgMTI5OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNDgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxkYXRhdHlwZT4+IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0I4REQ5MEMwMjIwIgotCQkJCXdpZHRoICAgICAgCTM2NgotCQkJCWhlaWdodCAgICAgCTE4MAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEAzNAotCQkJCWxvY2F0aW9uICAgCSgxNDcyLCAxNDE4KQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXN1cHBsaWVyICAgCUAxMgotCQkJCXZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSAgICAoMTQ3MiwgMTQxOCkKLQkJCQkgICAgKDE0NzIsIDEyMDMpKSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDYzMzMwMDE3RCIKLQkJCQljbGllbnQgICAgIAlAMwotCQkJCXN1cHBsaWVyICAgCUAxMgotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDgzNiwgMTQ5MikKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoODM2LCAxNDE4KQotCQkJCWRyYXdTdXBwbGllciAJQDM0KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBCaW5kaW5nIiBAMzYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzA0LCA5NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg1NTcsIDcyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI5NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJU09BUEJpbmRpbmciKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzYKLQkJCQkgICAgbG9jYXRpb24gICAJKDU1NywgMjIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjk0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODVBMjAwMUYiCi0JCQkJd2lkdGggICAgICAJMzEyCi0JCQkJaGVpZ2h0ICAgICAJMTcyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzcKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODk1NTAyQkYiCi0JCQkJY2xpZW50ICAgICAJQDEKLQkJCQlzdXBwbGllciAgIAlAMzYKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBPcGVyYXRpb24iIEAzOAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNDcyLCAxMTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzOAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTMwMywgODgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzM4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTT0FQT3BlcmF0aW9uIikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM4Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMzAzLCAzOCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMzgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OEE1MDEyOCIKLQkJCQl3aWR0aCAgICAgIAkzNTYKLQkJCQloZWlnaHQgICAgIAkxNzIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OTdGMDA3RCIKLQkJCQljbGllbnQgICAgIAlAMgotCQkJCXN1cHBsaWVyICAgCUAzOAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEhlYWRlciIgQDQwCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzUyLCA4NjQpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0MAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjEwLCA4NDApCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjg0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTT0FQSGVhZGVyIikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQwCi0JCQkJICAgIGxvY2F0aW9uICAgCSg2MTAsIDc5MCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyODQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OEU3MDA4QyIKLQkJCQl3aWR0aCAgICAgIAkzMDIKLQkJCQloZWlnaHQgICAgIAkxNzIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA0MQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OUJDMDMxQyIKLQkJCQljbGllbnQgICAgIAlAMwotCQkJCXN1cHBsaWVyICAgCUA0MAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEhlYWRlckZhdWx0IiBANDIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTk4NCwgMzY4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANDIKLQkJCQkgICAgbG9jYXRpb24gICAJKDE3OTUsIDM0NCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNzgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSVNPQVBIZWFkZXJGYXVsdCIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0MgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTc5NSwgMjk0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTM3OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4QkQwM0E5IgotCQkJCXdpZHRoICAgICAgCTM5NgotCQkJCWhlaWdodCAgICAgCTE3MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQzCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjMzMzQwMDM4IgotCQkJCWNsaWVudCAgICAgCUA0Ci0JCQkJc3VwcGxpZXIgICAJQDEyCi0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTkyMSwgMTQ2MCkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTkyMSwgMTQxOCkKLQkJCQlkcmF3U3VwcGxpZXIgCUAzNCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQRmF1bHQiIEA0NAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg1OTIsIDE3OTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0NAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNDY5LCAxNzY4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI0NgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJU09BUEZhdWx0IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0NjksIDE3MTgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjQ2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODg4NzAxMTkiCi0JCQkJd2lkdGggICAgICAJMjY0Ci0JCQkJaGVpZ2h0ICAgICAJMTcyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDUKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0OEEwODAzMkMiCi0JCQkJY2xpZW50ICAgICAJQDMyCi0JCQkJc3VwcGxpZXIgICAJQDQ0Ci0JCQkJbGluZV9zdHlsZSAJMCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQQm9keSIgQDQ2Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE0NzIsIDE3NzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0NgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTI3MywgMTcyNCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzOTgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSVNPQVBCb2R5IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMjczLCAxNjc0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTM5OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4NEIwMTE5IgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlANDYKLQkJCQkgICAgbG9jYXRpb24gICAJKDEyNzMsIDE3ODQpCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTQKLQkJCQkgICAgbWF4X3dpZHRoICAJMCkKLQkJCQl3aWR0aCAgICAgIAk0MTYKLQkJCQloZWlnaHQgICAgIAkyMjgKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA0NwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4QTVCMDBCQiIKLQkJCQljbGllbnQgICAgIAlAMTkKLQkJCQlzdXBwbGllciAgIAlANDYKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQ4Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDVFRDA3OEMwMkZEIgotCQkJCWNsaWVudCAgICAgCUA0Ci0JCQkJc3VwcGxpZXIgICAJQDQyCi0JCQkJbGluZV9zdHlsZSAJMCkpKQotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIlBvcnQiCi0JCQlxdWlkICAgICAgIAkiM0EwODVFMzAwMzVDIgotCQkJdGl0bGUgICAgICAJIlBvcnQiCi0JCQl6b29tICAgICAgIAk5MAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEFkZHJlc3MiIEA0OQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoODQ4LCA4MzIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0OQotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjQ3LCA3NTEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDAyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBBZGRyZXNzIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FEMUZGNzUwMjg3IgotCQkJCXdpZHRoICAgICAgCTQyMAotCQkJCWhlaWdodCAgICAgCTE4NgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBBZGRyZXNzIiBANTAKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoODQ4LCAyNTYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1MAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjk2LCAyMzUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzA0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTT0FQQWRkcmVzcyIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1MAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjk2LCAxODUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzA0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODdFNzAwRUEiCi0JCQkJd2lkdGggICAgICAJMzIyCi0JCQkJaGVpZ2h0ICAgICAJMTY2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANTEKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0OEE3RTAxMDkiCi0JCQkJY2xpZW50ICAgICAJQDQ5Ci0JCQkJc3VwcGxpZXIgICAJQDUwCi0JCQkJbGluZV9zdHlsZSAJMCkpKQotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkV4dGVuc2liaWxpdHkiCi0JCQlxdWlkICAgICAgIAkiM0FFMDk5QjEwMTYxIgotCQkJdGl0bGUgICAgICAJIkV4dGVuc2liaWxpdHkiCi0JCQl6b29tICAgICAgIAk5MAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEFkZHJlc3MiIEA1MgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNTIwLCA1NzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1MgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTM3MSwgNTI3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI5OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQQWRkcmVzcyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDFGRjc1MDI4NyIKLQkJCQl3aWR0aCAgICAgIAkzMTYKLQkJCQloZWlnaHQgICAgIAkxMjIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBCaW5kaW5nIiBANTMKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMzA0LCA1OTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1MwotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTYyLCA1NDMpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjg0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBCaW5kaW5nIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwMUQzQjkwMUFEIgotCQkJCXdpZHRoICAgICAgCTMwMgotCQkJCWhlaWdodCAgICAgCTEyMgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEJvZHkiIEA1NAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxMDcyLCAxMTA0KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANTQKLQkJCQkgICAgbG9jYXRpb24gICAJKDk1MCwgMTA1NSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyNDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEJvZHkiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVENTAzMUYiCi0JCQkJd2lkdGggICAgICAJMjYyCi0JCQkJaGVpZ2h0ICAgICAJMTIyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQRmF1bHQiIEA1NQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxMjMyLCAxMjY0KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANTUKLQkJCQkgICAgbG9jYXRpb24gICAJKDExMTIsIDEyMTUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjQwCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBGYXVsdCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDZEOUZBMDBGNyIKLQkJCQl3aWR0aCAgICAgIAkyNTgKLQkJCQloZWlnaHQgICAgIAkxMjIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBPcGVyYXRpb24iIEA1NgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg1MTIsIDc1MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDU2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgzNDQsIDcwMykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMzYKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUE9wZXJhdGlvbiIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMEFENDU1MDBFOCIKLQkJCQl3aWR0aCAgICAgIAkzNTQKLQkJCQloZWlnaHQgICAgIAkxMjIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBIZWFkZXJCYXNlIiBANTcKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoODE2LCA5MjgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1NwotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjI3LCA4NzkpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzc4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBIZWFkZXJCYXNlIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwMURFRTcwMzREIgotCQkJCXdpZHRoICAgICAgCTM5NgotCQkJCWhlaWdodCAgICAgCTEyMgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEA1OAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDYwOCwgMTI4KQotCQkJCWZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJCSAgICBpdGFsaWNzICAgIAlUUlVFKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANTgKLQkJCQkgICAgbG9jYXRpb24gICAJKDQwOCwgNTMpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDAwCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkV4dGVuc2liaWxpdHlFbGVtZW50IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IgotCQkJCXdpZHRoICAgICAgCTQxOAotCQkJCWhlaWdodCAgICAgCTE3NAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEA1OQotCQkJCWxvY2F0aW9uICAgCSg2MDgsIDMwNSkKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlzdXBwbGllciAgIAlANTgKLQkJCQl2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkgICAgKDYwOCwgMzA1KQotCQkJCSAgICAoNjA4LCAyMTUpKSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA2MAotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTA5QTM4MDFBQiIKLQkJCQljbGllbnQgICAgIAlANTMKLQkJCQlzdXBwbGllciAgIAlANTgKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgzNDQsIDUzMSkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzQ0LCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANTkpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANjEKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUUwOUEzRTAzMjYiCi0JCQkJY2xpZW50ICAgICAJQDU3Ci0JCQkJc3VwcGxpZXIgICAJQDU4Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoODE1LCA4NjcpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDgxNSwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDU5KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDYyCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFMDlBNDUwMDQxIgotCQkJCWNsaWVudCAgICAgCUA1NAotCQkJCXN1cHBsaWVyICAgCUA1OAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDEwNjgsIDEwNDMpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDEwNjgsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA1OSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA2MwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTA5QTRFMDMxRiIKLQkJCQljbGllbnQgICAgIAlANTYKLQkJCQlzdXBwbGllciAgIAlANTgKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSg1MDYsIDY5MSkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoNTA2LCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANTkpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANjQKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUUwOUE0QTAwMjAiCi0JCQkJY2xpZW50ICAgICAJQDU1Ci0JCQkJc3VwcGxpZXIgICAJQDU4Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTIzMSwgMTIwMykKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTIzMSwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDU5KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDY1Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFMDk1MzUwMDk4IgotCQkJCWNsaWVudCAgICAgCUA1MgotCQkJCXN1cHBsaWVyICAgCUA1OAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDE1MjAsIDUxNSkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTUyMCwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDU5KSkpKSkKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAieHNkIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2UueHNkXFxtb2RlbFxcb3JnLmVjbGlwc2UuWFNELmNhdCIKLQkJcXVpZCAgICAgICAJIjM5QUJEQzZGMDFBQSIpKQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA3NiIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OndzZGwiIEA2NgotCQkJbG9jYXRpb24gICAJKDI3MiwgMjU2KQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDY2Ci0JCQkgICAgbG9jYXRpb24gICAJKDEyOCwgMTcyKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkid3NkbCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0FERkI4RTUwMjFFIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojpzb2FwIiBANjcKLQkJCWxvY2F0aW9uICAgCSg3MDQsIDI1NikKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA2NwotCQkJICAgIGxvY2F0aW9uICAgCSg1NjAsIDE3MikKLQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkgICAgbGFiZWwgICAgICAJInNvYXAiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjNBMDFDRjBDMDFBMiIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKQotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6eHNkIiBANjgKLQkJCWxvY2F0aW9uICAgCSgxMTUyLCAyNTYpCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlANjgKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTAwOCwgMTcyKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkieHNkIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzOUFCREM2RjAxQUEiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkpKSkpCi0gICAgcm9vdF9zdWJzeXN0ZW0gCShvYmplY3QgU3ViU3lzdGVtICJDb21wb25lbnQgVmlldyIKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDY1IgotCXBoeXNpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdCkKLQlwaHlzaWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgTW9kdWxlX0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNzciCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb2Nlc3Nfc3RydWN0dXJlIAkob2JqZWN0IFByb2Nlc3NlcwotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjYiCi0JUHJvY3NORGV2cyAJKGxpc3QKLQkgICAgKG9iamVjdCBQcm9jZXNzX0RpYWdyYW0gIkRlcGxveW1lbnQgVmlldyIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2OCIKLQkJdGl0bGUgICAgICAJIkRlcGxveW1lbnQgVmlldyIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICBwcm9wZXJ0aWVzIAkob2JqZWN0IFByb3BlcnRpZXMKLQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlIgotCQkJdmFsdWUgICAgICAJKCJEYXRhQmFzZVNldCIgODAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiQU5TSSIKLQkJCQl2YWx1ZSAgICAgIAk4MDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJPcmFjbGUiCi0JCQkJdmFsdWUgICAgICAJODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU1FMU2VydmVyIgotCQkJCXZhbHVlICAgICAgCTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIlN5YmFzZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJXYXRjb20iCi0JCQkJdmFsdWUgICAgICAJODA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJJZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVl8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lIgotCQkJdmFsdWUgICAgICAJIlRfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiX1YiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQmFzZVZpZXdzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJWQVJDSEFSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTnVsbHNPSyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiZnJhbWV3b3JrIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMRWxlbWVudCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjaWZpY2F0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSURMU3BlY1NldCIgMjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMU3BlY1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkludGVyZmFjZSIKLQkJCQl2YWx1ZSAgICAgIAkyMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlR5cGVkZWYiCi0JCQkJdmFsdWUgICAgICAJNTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFbnVtZXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFeGNlcHRpb24iCi0JCQkJdmFsdWUgICAgICAJNjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTdHJ1Y3QiCi0JCQkJdmFsdWUgICAgICAJNTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJVbmlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4MSkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLnNvYXAvc3JjL3Jvc2Uvc29hcGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUlETE1vZHVsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVCeVNpbXBsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5zb2FwL3NyYy9yb3NlL3NvYXBiaW5kaW5nTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkSGFzUmVsVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSGFzUmVsVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkUm9sZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkFzc29jVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fU3Vic3lzdGVtIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVByZWZpeGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJtXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJzXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdEF0dHJpYnV0ZURhdGFUeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdE9wZXJhdGlvblJldHVyblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkidm9pZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUm9vdERpciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkF1dG9TeW5jIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2hvd0NvZGVnZW5EbGciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jRGVmYXVsdEF1dGhvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0VmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0U2luY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jTnVtQXN0ZXJpc2tzIgotCQkJdmFsdWUgICAgICAJMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNYXhOdW1DaGFycyIKLQkJCXZhbHVlICAgICAgCTgwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVkaXRvciIKLQkJCXZhbHVlICAgICAgCSgiRWRpdG9yVHlwZSIgMTAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWTSIKLQkJCXZhbHVlICAgICAgCSgiVk1UeXBlIiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNsYXNzUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVkaXRvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRJbiIKLQkJCQl2YWx1ZSAgICAgIAkxMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV2luZG93c1NoZWxsIgotCQkJCXZhbHVlICAgICAgCTEwMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZNVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdW4iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk1pY3Jvc29mdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiSUJNIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk5vQ2xhc3NDdXN0b21EbGciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHbG9iYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk9wZW5CcmFjZUNsYXNzU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk9wZW5CcmFjZU1ldGhvZFN0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VUYWJzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlU3BhY2VzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTcGFjaW5nSXRlbXMiCi0JCQl2YWx1ZSAgICAgIAkzKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJvc2VEZWZhdWx0Q29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBc3Rlcmlza0NvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jQXV0aG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY1NpbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY1ZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvZGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc2FibGVBdXRvU3luYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXROYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRleHRSZWYiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc1NpbmdsZVRocmVhZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJc1NlY3VyZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclBhdGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVySW5jbHVkZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJGb3J3YXJkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Z2V0SW5mbyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGVzTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0QXR0cmlidXRlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RQYXJhbWV0ZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckhlYWRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW50SGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldERhdGVIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29va2llIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yQ29va2llIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRlbnRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVIVE1MIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVfWE1MX0REIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbXBGaWVsZCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkVudmlyb25tZW50UHJvcGVydGllcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNueEZhY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWZlcmVuY2VzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQk5hbWVJbkpBUiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJTZXNzaW9uVHlwZV9TZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVsZXNzIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWZ1bCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiIDIxMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjExKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjEyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IiAyMjApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIyMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIyMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjIyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVlbnRyYW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQk1QX0V4dGVuZF9DTVAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTmF0aXZlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3luY2hyb25pemVkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkJlYW5Qcm9wZXJ0eV9TZXQiIDcxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCZWFuUHJvcGVydHlfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk5vdCBBIFByb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAk3MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCb3VuZCIKLQkJCQl2YWx1ZSAgICAgIAk3MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJhaW5lZCIKLQkJCQl2YWx1ZSAgICAgIAk3NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluZGl2aWR1YWxDaGFuZ2VNZ3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlIgotCQkJdmFsdWUgICAgICAJKCJSZWFkL1dyaXRlX1NldCIgODEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgJiBXcml0ZSIKLQkJCQl2YWx1ZSAgICAgIAk4MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV3JpdGUgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRnVsbHlRdWFsaWZpZWRUeXBlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlRyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUHJvcGVydHlUeXBlIgotCQkJdmFsdWUgICAgICAJKCJCZWFuUHJvcGVydHlfU2V0IiA3MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQmVhblByb3BlcnR5X1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJOb3QgQSBQcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJNzIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQm91bmQiCi0JCQkJdmFsdWUgICAgICAJNzMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RyYWluZWQiCi0JCQkJdmFsdWUgICAgICAJNzQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbmRpdmlkdWFsQ2hhbmdlTWd0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZSIKLQkJCXZhbHVlICAgICAgCSgiUmVhZC9Xcml0ZV9TZXQiIDgxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkICYgV3JpdGUiCi0JCQkJdmFsdWUgICAgICAJODEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIldyaXRlIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZ1bGx5UXVhbGlmaWVkVHlwZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc05hdmlnYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiMzYwMDAwMDAyIikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRERMU2NyaXB0RmlsZW5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiRERMMS5TUUwiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkRyb3BDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJfSUQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIk5VTUJFUig1LDApIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NoZW1hTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlR5cGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZhcnJheU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOZXN0ZWRUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOZXN0ZWRUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPYmplY3RUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPYmplY3RUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNTY2hlbWEiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT0lEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiV2hlcmVDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZUxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlUHJlY2lzaW9uIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVTY2FsZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25PZlJFRlMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIk1ldGhvZEtpbmRTZXQiIDE5MDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk92ZXJsb2FkSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUmVhZE5vRGF0YVN0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9Qcm9jZXNzU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1dyaXRlTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1dyaXRlTm9Qcm9jZXNzU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NlbGZpc2giCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlclR5cGVTZXQiIDE4MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckV2ZW50U2V0IiAxNjAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJSZWZlcmVuY2luZ05hbWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckZvckVhY2giCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJGb3JFYWNoU2V0IiAxNzAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyV2hlbkNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiTWFwTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTE5MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3JkZXJNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJGdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxOTAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlByb2NlZHVyZSIKLQkJCQl2YWx1ZSAgICAgIAkxOTA0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk9wZXJhdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDcpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVHJpZ2dlciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkNhbGN1bGF0ZWQiCi0JCQkJdmFsdWUgICAgICAJMTkwOSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkFGVEVSIgotCQkJCXZhbHVlICAgICAgCTE4MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQkVGT1JFIgotCQkJCXZhbHVlICAgICAgCTE4MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TVEVBRCBPRiIKLQkJCQl2YWx1ZSAgICAgIAkxODAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckZvckVhY2hTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUk9XIgotCQkJCXZhbHVlICAgICAgCTE3MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiU1RBVEVNRU5UIgotCQkJCXZhbHVlICAgICAgCTE3MDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRXZlbnRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIgotCQkJCXZhbHVlICAgICAgCTE2MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIFVQREFURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIFVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTnVsbHNBbGxvd2VkIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiMiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NhbGUiCi0JCQl2YWx1ZSAgICAgIAkiNiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNJbmRleCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUHJpbWFyeUtleSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSZXBvc2l0b3J5IgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVzZU1TVkMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZUJhY2t1cEV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJofiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVUZW1wb3JhcnlFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaCMiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcHAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZUJhY2t1cEV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcH4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcCMiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcnJvckxpbWl0IgotCQkJdmFsdWUgICAgICAJMzApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIkUk9TRUNQUF9TT1VSQ0UiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQYXRoU2VwYXJhdG9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lRm9ybWF0IgotCQkJdmFsdWUgICAgICAJIjEyOHZ4X2IiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb29sZWFuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJpbnQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd1RlbXBsYXRlcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93RXhwbGljaXRJbnN0YW50aWF0aW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93UHJvdGVjdGVkSW5oZXJpdGFuY2UiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb21tZW50V2lkdGgiCi0JCQl2YWx1ZSAgICAgIAk2MCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT25lQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbmFsQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJPcHRpb25hbEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbmFsQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaXhlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRGaXhlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaXhlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRGaXhlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkTGlzdEJ5VmFsdWU8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkU2V0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkTGlzdEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVuYm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkTGlzdEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkU2V0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkTGlzdEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJBc3NvY2lhdGlvbkJ5VmFsdWU8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJEaWN0aW9uYXJ5QnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJBc3NvY2lhdGlvbkJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVJlZmVyZW5jZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNsYXNzS2V5IgotCQkJdmFsdWUgICAgICAJImNsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQdXRCb2RpZXNJblNwZWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0Q29uc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeHBsaWNpdERlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvcHlDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0Q29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3JLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzaWdubWVudFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzaWdubWVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzaWdubWVudE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVxdWFsaXR5T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcXVhbGl0eUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUVxdWFsaXR5T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJlbGF0aW9uYWxWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJlbGF0aW9uYWxLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGcmllbmRLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVSZWxhdGlvbmFsT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0b3JhZ2VNZ210T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdG9yYWdlTWdtdFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRSZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN1YnNjcmlwdE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlcmVmZXJlbmNlT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VSZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlcmVmZXJlbmNlT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5kaXJlY3Rpb25PcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25WaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lSW5kaXJlY3Rpb25PcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0cmVhbVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3RyZWFtT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUaHJlZUtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGcmllbmRLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlQW5kRGVmaW5lIgotCQkJCXZhbHVlICAgICAgCTE5OSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRGVjbGFyZU9ubHkiCi0JCQkJdmFsdWUgICAgICAJMjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEb05vdERlY2xhcmUiCi0JCQkJdmFsdWUgICAgICAJMjA2KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5zb2FwL3NyYy9yb3NlL3NvYXBiaW5kaW5nTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZU9yZGVyIgotCQkJdmFsdWUgICAgICAJIkFNSVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAkoIklubGluaW5nU3R5bGVTZXQiIDIwNykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkluQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZvbGxvd2luZ0NsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA3KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlR5cGVzRGVmaW5lZCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUNsb3N1cmUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5zb2FwL3NyYy9yb3NlL3NvYXBiaW5kaW5nTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiT3BlcmF0aW9uS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhpdENvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9keUFubm90YXRpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmFpc2VzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9yZGVyZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3Rvck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2VsZWN0b3JUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhhc1JlbFR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0Fzc29jaWF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluc3RhbmNlQXJndW1lbnRzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyR2V0IgotCQkJdmFsdWUgICAgICAJIiRkYXRhLmdldCgka2V5cykiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJTZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuc2V0KCRrZXlzLCR2YWx1ZSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0NvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkc3VwcGxpZXIgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAkoIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlU2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19HZXRTZXRCeVJlZmVyZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUXVhbGlmaWVkR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVF1YWxpZmllZFNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0RhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0dldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc29jQ2xhc3NHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc1NldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRBdHRyaWJ1dGVWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5UmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnlJc09uU2VhcmNoTGlzdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGVudCIKLQkJCXZhbHVlICAgICAgCTIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIjUuMCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNDbGFzc1R5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNDbGFzc1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb25uZWN0aW9uX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDbGFzc19GYWN0b3J5IgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT2JqZWN0RnVuY3Rpb25hbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5hbWljIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRHluY3JlYXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU2VyaWFsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU92ZXJyaWRlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9EQVRBX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaWVsZEdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0ZJRUxEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNZXNzYWdlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSgiT0xFRmFjdG9yeVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRfaW4iCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJMaWNlbnNlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUNsYXNzSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDdGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPTEVUeXBlTGliIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYklEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1ham9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1pbm9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wUGFnZUlEcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcGF0Y2hNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRnVuY3Rpb25zIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoRGVmVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURpc3BJZEVudW0iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUF9JRF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW50ZXJmYWNlTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSU5URVJGQUNFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaXRJbnRlcmZhY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUV2ZW50TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRXZlbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRTaW5rTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlByb3BOb3RpZnlTaW5rcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25Qb2ludElJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRhbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ29tbWFuZHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDSW1wbGVtZW50cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBVExfRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDT01NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT01fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb25uZWN0aW9uUG9pbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX1BPSU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTXNnTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJvcGVydHlNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQUk9QRVJUWV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNPcGVyYXRpb25UeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDT3BlcmF0aW9uVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsX092ZXJyaWRlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVzc2FnZV9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlzcGF0Y2hfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X0ZpcmluZ19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X1NpbmtfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAk1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0ZF9PTEVfTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ29tbWFuZF9QYXJzZXIiCi0JCQkJdmFsdWUgICAgICAJNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9HZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9TZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9Ob3RpZnlfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWFjcm9fR2VuZXJhdGVkX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX01TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRVNTQUdFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkJvZHlJbWFnZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5jbHVkZXNHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9JTkNMVURFU19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zZXJ0TG9jYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiU0NDIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJUeXBlTGliSW1wb3J0ZXIiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI3ODM2MDYzNzgiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljTm90Q3JlYXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTIxMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxTaW5nbGVVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiR2xvYmFsTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjIwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25CYXNlIgotCQkJdmFsdWUgICAgICAJIjAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uQ29tcGFyZSIKLQkJCXZhbHVlICAgICAgCSgiQ29tcGFyZVNldCIgMjAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZSIKLQkJCXZhbHVlICAgICAgCSgiQ3JlYXRhYmxlU2V0IiAyMjEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbml0aWFsaXphdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVUZXJtaW5hdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbkNsYXNzIgotCQkJdmFsdWUgICAgICAJIkNvbGxlY3Rpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29tcGFyZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiQmluYXJ5IgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlRleHQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkb3BlcmF0aW9uIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkxpYnJhcnlOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJBbGlhc05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFbnRyeUNvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOZXciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIldpdGhFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZSRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTGV0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSW5oZXJpdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50c0RlbGVnYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiUHJvamVjdEZpbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWxTdHVkaW8iCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yIgotCQkJdmFsdWUgICAgICAJKCJFZGl0b3JUeXBlIiAxMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkVkaXRvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIkJ1aWx0SW4iCi0JCQkJdmFsdWUgICAgICAJMTAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJXaW5kb3dzU2hlbGwiCi0JCQkJdmFsdWUgICAgICAJMTAxKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICVRJSAlWiUgJVclIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgJVElICVaJSAlVyUiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9yZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJEZWZhdWx0X1NlcnZsZXRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGV4dFJlZiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzU2luZ2xlVGhyZWFkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldElzU2VjdXJlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJJbmNsdWRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckZvcndhcmQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0U2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRnZXRJbmZvIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkh0dHBfU2VydmxldF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlc05hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdEF0dHJpYnV0ZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0UGFyYW1ldGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JIZWFkZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEludEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXREYXRlSGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvb2tpZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckNvb2tpZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZW50VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSFRNTCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJEZWZhdWx0X0VKQl9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZV9YTUxfREQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNtcEZpZWxkIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCRW52aXJvbm1lbnRQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ254RmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZmVyZW5jZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCTmFtZUluSkFSIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlNlc3Npb25UeXBlX1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWxlc3MiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlZnVsIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIgMjExKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiIDIyMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjIwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMjIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWVudHJhbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCTVBfRXh0ZW5kX0NNUCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlIyRWRpdG9yIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSb3NlIE1vZGVsIEludGVncmF0b3IiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJvc2UgV2ViIFB1Ymxpc2hlciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmVyc2lvbiBDb250cm9sIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjkiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DYXRlZ29yeSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwYWNrYWdlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1ByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJiYXNlUGFja2FnZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNsYXNzaWZpZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNvbnN0cmFpbnRzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkNvbnRlbnRLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVtcHR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJNaXhlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50T25seSIKLQkJCQl2YWx1ZSAgICAgIAk0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkib3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYXR0cmlidXRlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzSUQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicmVmZXJlbmNlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1Jlc29sdmVQcm94aWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpKQotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjciKSkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvV1NETC5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvV1NETC5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI0OTNkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1OTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0id3NkbCIKLSAgICBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvV1NETCIgbnNQcmVmaXg9IndzZGwiPgotICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhlIFdTREwgbW9kZWwgY29udGFpbnMgY2xhc3NlcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkuJiN4RDsmI3hBOyYjeEQ7JiN4QTtXU0RMIGRlc2NyaWJlcyBuZXR3b3JrIHNlcnZpY2VzIGFzIHNldHMgb2YgZW5kcG9pbnRzIG9wZXJhdGluZyBvbiBtZXNzYWdlcy4gVGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGFyZSBkZXNjcmliZWQgYWJzdHJhY3RseSwgYW5kIHRoZW4gYm91bmQgdG8gYSBjb25jcmV0ZSBuZXR3b3JrIHByb3RvY29sIGFuZCBtZXNzYWdlIGZvcm1hdCB0byBkZWZpbmUgYW4gZW5kcG9pbnQuJiN4RDsmI3hBOyYjeEQ7JiN4QTtXU0RMIGRlc2NyaWJlcyB0aGUgZm9ybWF0cyBvZiB0aGUgbWVzc2FnZXMgZXhjaGFuZ2VkIGJ5IHRoZSBzZXJ2aWNlcywgYW5kIHN1cHBvcnRzIHRoZSBYTUwgU2NoZW1hcyBzcGVjaWZpY2F0aW9uIGFzIGl0cyBjYW5vbmljYWwgdHlwZSBzeXN0ZW0uIFRoaXMgcGFja2FnZSB1c2VzIGFuIFhNTCBTY2hlbWEgSW5mb3NldCBtb2RlbCBwYWNrYWdlIChzZWUgdGhlIFhTRCBwYWNrYWdlKSB0byBkZXNjcmliZSB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXRzLiYjeEQ7JiN4QTsmI3hEOyYjeEE7VGhlIG1vZGVsIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbXMsIG5hbWVkIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIGNoYXB0ZXJzIGluIHRoZSBXU0RMIDEuMSBzcGVjaWZpY2F0aW9uIChodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL05PVEUtd3NkbC0yMDAxMDMxNSkmI3hEOyYjeEE7LSAyLjEgRGVmaW5pdGlvbiwgc2hvd3MgdGhlIFdTREwgZGVmaW5pdGlvbiBlbGVtZW50IGFuZCB0aGUgV1NETCBkb2N1bWVudCBzdHJ1Y3R1cmUmI3hEOyYjeEE7LSAyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmcsIHNob3dzIHRoZSBuYW1lc3BhY2UgYW5kIGltcG9ydCBtZWNoYW5pc20mI3hEOyYjeEE7LSAyLjEuMyBFeHRlbnNpYmlsaXR5LCBzaG93cyB0aGUgV1NETCBleHRlbnNpYmlsaXR5IG1lY2hhbmlzbSYjeEQ7JiN4QTstIDIuMiBUeXBlcywgc2hvd3MgdGhlIHVzZSBvZiBYTUwgU2NoZW1hIHR5cGVzIGluIFdTREwmI3hEOyYjeEE7LSAyLjMgTWVzc2FnZXMsIDIuNCBQb3J0VHlwZXMsIDIuNSBCaW5kaW5ncyBhbmQgMi43IFNlcnZpY2VzLCBzaG93IHRoZSBtYWpvciBXU0RMIGVsZW1lbnRzIGFuZCB0aGVpciByZWxhdGlvbnMuJiN4RDsmI3hBOyYjeEQ7JiN4QTtUaGUgV1NETCBjbGFzc2VzIGV4dGVuZCB0aGUgamF2YXgud3NkbCBpbnRlcmZhY2VzIGRlZmluZWQgYnkgSlNSIDExMC4gQ2xhc3NlcyB3aXRoIGludGVyZmFjZSBhbmQgZGF0YXR5cGUgc3RlcmVvdHlwZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIG5vbi1NT0YgaW50ZXJmYWNlcy4iLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iV1NETEVsZW1lbnQiIGFic3RyYWN0PSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGxhbmd1YWdlIGVsZW1lbnQuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEVuY2xvc2luZ0RlZmluaXRpb24iIGVUeXBlPSIjLy9EZWZpbml0aW9uIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldEVuY2xvc2luZ0RlZmluaXRpb24iPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImRlZmluaXRpb24iIGVUeXBlPSIjLy9EZWZpbml0aW9uIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZG9jdW1lbnRhdGlvbkVsZW1lbnQiIGVUeXBlPSIjLy9ET01FbGVtZW50Ii8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVsZW1lbnQiIGVUeXBlPSIjLy9ET01FbGVtZW50IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUG9ydFR5cGUiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JUG9ydFR5cGUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9ydFR5cGUgZWxlbWVudCBvZiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gMS4xIGFuZCBhbiBJbnRlcmZhY2UgY29tcG9uZW50IG9mIHRoZSBXU0RMIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjIuIEEgcG9ydCB0eXBlIG9yIEludGVyZmFjZSBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUgYWJzdHJhY3QgbWVzc2FnZXMgaW52b2x2ZWQuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InFOYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idW5kZWZpbmVkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlT3BlcmF0aW9ucyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9PcGVyYXRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik9wZXJhdGlvbiIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lPcGVyYXRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3BlcmF0aW9uIGVsZW1lbnQuIEEgV1NETCBvcGVyYXRpb24gaXMgYW4gYWJzdHJhY3QgZGVzY3JpcHRpb24gb2YgYW4gYWN0aW9uIHN1cHBvcnRlZCBieSBhIHNlcnZpY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InN0eWxlIiBlVHlwZT0iIy8vT3BlcmF0aW9uVHlwZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVuZGVmaW5lZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUlucHV0IiBlVHlwZT0iIy8vSW5wdXQiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVPdXRwdXQiIGVUeXBlPSIjLy9PdXRwdXQiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVGYXVsdHMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vRmF1bHQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJhbWV0ZXJPcmRlcmluZyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9QYXJ0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1lc3NhZ2UiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JTWVzc2FnZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBtZXNzYWdlIGVsZW1lbnQuIEEgV1NETCBtZXNzYWdlIGlzIGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIGNvbW11bmljYXRlZC4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1bmRlZmluZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJ0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9QYXJ0IiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQYXJ0IiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSVBhcnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcGFydCBlbGVtZW50LiBQYXJ0cyBkZXNjcmliZSB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRWFjaCBwYXJ0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGUgZnJvbSBzb21lIHR5cGUgc3lzdGVtLiAiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbGVtZW50TmFtZSIgZVR5cGU9IiMvL1FOYW1lIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InR5cGVOYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idHlwZURlZmluaXRpb24iIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmVjb3JlIy8vWFNEVHlwZURlZmluaXRpb24iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZWxlbWVudERlY2xhcmF0aW9uIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5lY29yZSMvL1hTREVsZW1lbnREZWNsYXJhdGlvbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlTWVzc2FnZSIgZVR5cGU9IiMvL01lc3NhZ2UiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQmluZGluZyIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lCaW5kaW5nIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGJpbmRpbmcgZWxlbWVudC4gQSBiaW5kaW5nIGRlZmluZXMgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sIGRldGFpbHMgZm9yIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnRUeXBlLiBUaGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiBiaW5kaW5ncyBmb3IgYSBnaXZlbiBwb3J0VHlwZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1bmRlZmluZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQb3J0VHlwZSIgbG93ZXJCb3VuZD0iMSIKLSAgICAgICAgZVR5cGU9IiMvL1BvcnRUeXBlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVCaW5kaW5nT3BlcmF0aW9ucyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9CaW5kaW5nT3BlcmF0aW9uIiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJCaW5kaW5nT3BlcmF0aW9uIiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSUJpbmRpbmdPcGVyYXRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3BlcmF0aW9uIGVsZW1lbnQgd2l0aGluIGEgYmluZGluZy4gQW4gb3BlcmF0aW9uIGVsZW1lbnQgd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgd2l0aGluIHRoZSBiaW5kaW5nJ3MgcG9ydFR5cGUuICIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVPcGVyYXRpb24iIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9PcGVyYXRpb24iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUJpbmRpbmdJbnB1dCIgZVR5cGU9IiMvL0JpbmRpbmdJbnB1dCIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUJpbmRpbmdPdXRwdXQiIGVUeXBlPSIjLy9CaW5kaW5nT3V0cHV0IgotICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlQmluZGluZ0ZhdWx0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9CaW5kaW5nRmF1bHQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNlcnZpY2UiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JU2VydmljZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuIEEgc2VydmljZSBncm91cHMgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1bmRlZmluZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQb3J0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9Qb3J0IiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQb3J0IiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSVBvcnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9ydCBlbGVtZW50LiBBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUJpbmRpbmciIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9CaW5kaW5nIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkV4dGVuc2liaWxpdHlFbGVtZW50IiBlU3VwZXJUeXBlcz0iIy8vV1NETEVsZW1lbnQgIy8vSUV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudC4gV1NETCBhbGxvd3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZXF1aXJlZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZWxlbWVudFR5cGUiIGVUeXBlPSIjLy9RTmFtZSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRlZmluaXRpb24iIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JRGVmaW5pdGlvbiI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgYSBXU0RMIGRvY3VtZW50LiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXREb2N1bWVudCIgZVR5cGU9IiMvL0RPTURvY3VtZW50Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldERvY3VtZW50Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJkb2N1bWVudCIgZVR5cGU9IiMvL0RPTURvY3VtZW50Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGFyZ2V0TmFtZXNwYWNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxvY2F0aW9uIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InFOYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZW5jb2RpbmciIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUltcG9ydHMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vSW1wb3J0IiBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlVHlwZXMiIGVUeXBlPSIjLy9UeXBlcyIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU1lc3NhZ2VzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL01lc3NhZ2UiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQb3J0VHlwZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vUG9ydFR5cGUiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVCaW5kaW5ncyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9CaW5kaW5nIiBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlU2VydmljZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vU2VydmljZSIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU5hbWVzcGFjZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vTmFtZXNwYWNlIiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbXBvcnQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JSW1wb3J0Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgV1NETCBpbXBvcnQgZWxlbWVudC4gV1NETCBhbGxvd3MgYXNzb2NpYXRpbmcgYSBuYW1lc3BhY2Ugd2l0aCBhIGRvY3VtZW50IGxvY2F0aW9uIHVzaW5nIGFuIGltcG9ydCBlbGVtZW50LiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRTY2hlbWEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmVjb3JlIy8vWFNEU2NoZW1hIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldFNjaGVtYSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ic2NoZW1hIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5lY29yZSMvL1hTRFNjaGVtYSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvblVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlRGVmaW5pdGlvbiIgZVR5cGU9IiMvL0RlZmluaXRpb24iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVNjaGVtYSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9tb2RlbC9YU0QuZWNvcmUjLy9YU0RTY2hlbWEiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRXh0ZW5zaWJsZUVsZW1lbnQiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vV1NETEVsZW1lbnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiBXU0RMIGFsbG93cyBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IChyZWZlcnJlZCB0byBoZXJlIGFzIGV4dGVuc2liaWxpdHkgZWxlbWVudHMpIHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvaW50IG9mIGV4dGVuc2liaWxpdHkuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEV4dGVuc2liaWxpdHlFbGVtZW50cyIgZVR5cGU9IiMvL0lMaXN0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZEV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJleHRFbGVtZW50IiBlVHlwZT0iIy8vSUV4dGVuc2liaWxpdHlFbGVtZW50Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUV4dGVuc2liaWxpdHlFbGVtZW50cyIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW5wdXQiIGVTdXBlclR5cGVzPSIjLy9NZXNzYWdlUmVmZXJlbmNlICMvL0lJbnB1dCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBpbnB1dCBlbGVtZW50LiBBbiBpbnB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJPdXRwdXQiIGVTdXBlclR5cGVzPSIjLy9NZXNzYWdlUmVmZXJlbmNlICMvL0lPdXRwdXQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQuIEFuIG91dHB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRmF1bHQiIGVTdXBlclR5cGVzPSIjLy9NZXNzYWdlUmVmZXJlbmNlICMvL0lGYXVsdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50LiBGYXVsdCBlbGVtZW50cyBzcGVjaWZ5IHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgYW55IGVycm9yIG1lc3NhZ2VzIHRoYXQgbWF5IGJlIG91dHB1dCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkJpbmRpbmdJbnB1dCIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lCaW5kaW5nSW5wdXQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgaW5wdXQgZWxlbWVudCB3aXRoaW4gYSBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZy4gQW4gaW5wdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLiAiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SW5wdXQiIGVUeXBlPSIjLy9JSW5wdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0SW5wdXQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImlucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlSW5wdXQiIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9JbnB1dCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJCaW5kaW5nT3V0cHV0IiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSUJpbmRpbmdPdXRwdXQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEFuIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhbiBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG91dHB1dCBvZiB0aGUgb3BlcmF0aW9uLiAiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0T3V0cHV0IiBlVHlwZT0iIy8vSU91dHB1dCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRPdXRwdXQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVPdXRwdXQiIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9PdXRwdXQiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQmluZGluZ0ZhdWx0IiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSUJpbmRpbmdGYXVsdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBIGZhdWx0IGVsZW1lbnQgd2l0aGluIGFuIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZmF1bHQgd2l0aCB0aGUgc2FtZSBuYW1lLiAiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RmF1bHQiIGVUeXBlPSIjLy9JRmF1bHQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RmF1bHQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImZhdWx0IiBlVHlwZT0iIy8vSUZhdWx0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlRmF1bHQiIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9GYXVsdCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJRTmFtZSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5RTmFtZSBjbGFzcy4gQSBRTmFtZSBpcyBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYW1lc3BhY2UiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIG5hbWVzcGFjZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZXNwYWNlIHByZWZpeCB1c2VkIGluIGEgV1NETCBkb2N1bWVudC4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJPcGVyYXRpb25UeXBlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5PcGVyYXRpb25UeXBlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJPTkVfV0FZPTEmI3hEOyYjeEE7UkVRVUVTVF9SRVNQT05TRT0yJiN4RDsmI3hBO1NPTElDSVRfUkVTUE9OU0U9MyYjeEQ7JiN4QTtOT1RJRklDQVRJT049NCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJUG9ydFR5cGUiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLlBvcnRUeXBlIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlBvcnRUeXBlIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRPcGVyYXRpb24iPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im9wZXJhdGlvbiIgZVR5cGU9IiMvL0lPcGVyYXRpb24iLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRPcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iaW5wdXROYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib3V0cHV0TmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE9wZXJhdGlvbnMiIGVUeXBlPSIjLy9JTGlzdCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJT3BlcmF0aW9uIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5PcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuT3BlcmF0aW9uIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZmF1bHQiIGVUeXBlPSIjLy9JRmF1bHQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRGYXVsdCIgZVR5cGU9IiMvL0lGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEZhdWx0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UGFyYW1ldGVyT3JkZXJpbmciIGVUeXBlPSIjLy9JTGlzdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRQYXJhbWV0ZXJPcmRlcmluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0icGFyYW1ldGVyT3JkZXIiIGVUeXBlPSIjLy9JTGlzdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldElucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldElucHV0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJpbnB1dCIgZVR5cGU9IiMvL0lJbnB1dCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0T3V0cHV0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvdXRwdXQiIGVUeXBlPSIjLy9JT3V0cHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUlucHV0IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5JbnB1dCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5JbnB1dCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0TWVzc2FnZSIgZVR5cGU9IiMvL0lNZXNzYWdlIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldE1lc3NhZ2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im1lc3NhZ2UiIGVUeXBlPSIjLy9JTWVzc2FnZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklPdXRwdXQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLk91dHB1dCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5PdXRwdXQgbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE1lc3NhZ2UiIGVUeXBlPSIjLy9JTWVzc2FnZSIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRNZXNzYWdlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJtZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJRmF1bHQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkZhdWx0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkZhdWx0IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibWVzc2FnZSIgZVR5cGU9IiMvL0lNZXNzYWdlIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSU1lc3NhZ2UiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLk1lc3NhZ2UiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuTWVzc2FnZSBub24tTU9GIGludGVyZmFjZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwYXJ0IiBlVHlwZT0iIy8vSVBhcnQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0IiBlVHlwZT0iIy8vSVBhcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0T3JkZXJlZFBhcnRzIiBlVHlwZT0iIy8vSUxpc3QiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBhcnRPcmRlciIgZVR5cGU9IiMvL0lMaXN0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVBhcnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLlBhcnQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuUGFydCBub24tTU9GIGludGVyZmFjZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRFeHRlbnNpb25BdHRyaWJ1dGUiIGVFeGNlcHRpb25zPSIjLy9XU0RMRXhjZXB0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL1FOYW1lIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaW9uQXR0cmlidXRlTmFtZXMiIGVUeXBlPSIjLy9JSXRlcmF0b3IiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaW9uQXR0cmlidXRlIiBlVHlwZT0iIy8vUU5hbWUiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTZXJ2aWNlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5TZXJ2aWNlIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlNlcnZpY2Ugbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBvcnQiIGVUeXBlPSIjLy9JUG9ydCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFBvcnRzIiBlVHlwZT0iIy8vSU1hcCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQb3J0IiBlVHlwZT0iIy8vSVBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJUG9ydCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuUG9ydCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5Qb3J0IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0QmluZGluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZyIgZVR5cGU9IiMvL0lCaW5kaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmciIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmciCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZyBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkQmluZGluZ09wZXJhdGlvbiI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iaW5wdXROYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib3V0cHV0TmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEJpbmRpbmdPcGVyYXRpb25zIiBlVHlwZT0iIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UG9ydFR5cGUiIGVUeXBlPSIjLy9JUG9ydFR5cGUiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0UG9ydFR5cGUiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdPcGVyYXRpb24iIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkQmluZGluZ0ZhdWx0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJiaW5kaW5nRmF1bHQiIGVUeXBlPSIjLy9JQmluZGluZ0ZhdWx0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ0ZhdWx0IiBlVHlwZT0iIy8vSUJpbmRpbmdGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEJpbmRpbmdGYXVsdHMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE9wZXJhdGlvbiIgZVR5cGU9IiMvL0lPcGVyYXRpb24iLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0T3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ0lucHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdJbnB1dCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRCaW5kaW5nSW5wdXQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImJpbmRpbmdJbnB1dCIgZVR5cGU9IiMvL0lCaW5kaW5nSW5wdXQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5nT3V0cHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0QmluZGluZ091dHB1dCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZ091dHB1dCIgZVR5cGU9IiMvL0lCaW5kaW5nT3V0cHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdJbnB1dCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuQmluZGluZ0lucHV0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdPdXRwdXQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ091dHB1dCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdGYXVsdCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuQmluZGluZ0ZhdWx0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iRE9NRWxlbWVudCIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy53M2MuZG9tLkVsZW1lbnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRWxlbWVudCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUV4dGVuc2liaWxpdHlFbGVtZW50IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJRGVmaW5pdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuRGVmaW5pdGlvbiIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5EZWZpbml0aW9uIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRCaW5kaW5nIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJiaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRJbXBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImltcG9ydERlZiIgZVR5cGU9IiMvL0lJbXBvcnQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRNZXNzYWdlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJtZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGROYW1lc3BhY2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwb3J0VHlwZSIgZVR5cGU9IiMvL0lQb3J0VHlwZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFNlcnZpY2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InNlcnZpY2UiIGVUeXBlPSIjLy9JU2VydmljZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUJpbmRpbmdGYXVsdCIgZVR5cGU9IiMvL0lCaW5kaW5nRmF1bHQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlQmluZGluZ0lucHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdJbnB1dCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVCaW5kaW5nT3V0cHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlQmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUJpbmRpbmciIGVUeXBlPSIjLy9JQmluZGluZyIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVGYXVsdCIgZVR5cGU9IiMvL0lGYXVsdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVJbXBvcnQiIGVUeXBlPSIjLy9JSW1wb3J0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUlucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZU1lc3NhZ2UiIGVUeXBlPSIjLy9JTWVzc2FnZSIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVPcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZU91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlUGFydCIgZVR5cGU9IiMvL0lQYXJ0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZVBvcnQiIGVUeXBlPSIjLy9JUG9ydCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVQb3J0VHlwZSIgZVR5cGU9IiMvL0lQb3J0VHlwZSIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVTZXJ2aWNlIiBlVHlwZT0iIy8vSVNlcnZpY2UiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZyIgZVR5cGU9IiMvL0lCaW5kaW5nIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5ncyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SW1wb3J0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SW1wb3J0cyIgZVR5cGU9IiMvL0lMaXN0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lc3BhY2VVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE1lc3NhZ2VzIiBlVHlwZT0iIy8vSU1hcCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXROYW1lc3BhY2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE5hbWVzcGFjZXMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQb3J0VHlwZXMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZXNwYWNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0U2VydmljZSIgZVR5cGU9IiMvL0lTZXJ2aWNlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRTZXJ2aWNlcyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaW9uUmVnaXN0cnkiIGVUeXBlPSIjLy9JRXh0ZW5zaW9uUmVnaXN0cnkiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RXh0ZW5zaW9uUmVnaXN0cnkiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImV4dGVuc2lvblJlZ2lzdHJ5IiBlVHlwZT0iIy8vSUV4dGVuc2lvblJlZ2lzdHJ5Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RG9jdW1lbnRCYXNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldERvY3VtZW50QmFzZVVSSSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZG9jdW1lbnRCYXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlVHlwZXMiIGVUeXBlPSIjLy9JVHlwZXMiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVtb3ZlU2VydmljZSIgZVR5cGU9IiMvL0lTZXJ2aWNlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZW1vdmVCaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InJlbW92ZVBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZW1vdmVNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFR5cGVzIiBlVHlwZT0iIy8vSVR5cGVzIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldFR5cGVzIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0eXBlcyIgZVR5cGU9IiMvL0lUeXBlcyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklJbXBvcnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkltcG9ydCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5JbXBvcnQgbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklMaXN0IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLkxpc3QiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS51dGlsLkxpc3QgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTWFwIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLk1hcCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLnV0aWwuTWFwIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVVSTCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEubmV0LlVSTCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLm5ldC5VUkwgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJRXh0ZW5zaW9uUmVnaXN0cnkiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVHlwZXMiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JVHlwZXMiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgdHlwZXMgZWxlbWVudC4gVGhlIHR5cGVzIGVsZW1lbnQgZW5jbG9zZXMgZGF0YSB0eXBlIGRlZmluaXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGZvciB0aGUgZXhjaGFuZ2VkIG1lc3NhZ2VzLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRTY2hlbWFzIiBlVHlwZT0iIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0U2NoZW1hcyIgZVR5cGU9IiMvL0lMaXN0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lc3BhY2VVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSXRlcmF0b3IiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuSXRlcmF0b3IiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS51dGlsLkl0ZXJhdG9yIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iV1NETEV4Y2VwdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuV1NETEV4Y2VwdGlvbiI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkV4Y2VwdGlvbiBjbGFzcy4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVR5cGVzIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5UeXBlcyIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5UeXBlcyBub24tTU9GIGludGVyZmFjZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImNoaWxkcmVuIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNjaGVtYSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9tb2RlbC9YU0QuZWNvcmUjLy9YU0RTY2hlbWEiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IkRPTURvY3VtZW50IiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLnczYy5kb20uRG9jdW1lbnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRG9jdW1lbnQgbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1lc3NhZ2VSZWZlcmVuY2UiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQiPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVNZXNzYWdlIiBsb3dlckJvdW5kPSIxIgotICAgICAgICBlVHlwZT0iIy8vTWVzc2FnZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwuZ2VubW9kZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTYxZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLmdlbm1vZGVsCisrKyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgotICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsIgotICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC5lZGl0L3NyYyIgZWRpdG9yRGlyZWN0b3J5PSJvcmcuZWNsaXBzZS53c3Qud3NkbC5lZGl0b3Ivc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIiBtb2RlbE5hbWU9IldTREwiIG1vZGVsUGx1Z2luQ2xhc3M9IiIgZWRpdFBsdWdpbkNsYXNzPSIiCi0gICAgZWRpdG9yUGx1Z2luQ2xhc3M9IiIgbm9uTkxTTWFya2Vycz0idHJ1ZSIgY29kZUZvcm1hdHRpbmc9InRydWUiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5yb3NlIgotICAgIHVzZWRHZW5QYWNrYWdlcz0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmdlbm1vZGVsIy8veHNkIj4KLSAgPGZvcmVpZ25Nb2RlbD5XU0RMLm1kbDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlZBQkFTRV9QTFVHSU5TX1BBVEg8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD4uLi8uLjwvZm9yZWlnbk1vZGVsPgotICA8Z2VuUGFja2FnZXMgcHJlZml4PSJXU0RMIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0IiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgotICAgICAgY2xhc3NQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC5pbXBsIiB1dGlsaXR5UGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwudXRpbCIgZWNvcmVQYWNrYWdlPSJXU0RMLmVjb3JlIy8iPgotICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iV1NETC5lY29yZSMvL1FOYW1lIi8+Ci0gICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJXU0RMLmVjb3JlIy8vT3BlcmF0aW9uVHlwZSIvPgotICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iV1NETC5lY29yZSMvL0RPTUVsZW1lbnQiLz4KLSAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9IldTREwuZWNvcmUjLy9XU0RMRXhjZXB0aW9uIi8+Ci0gICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJXU0RMLmVjb3JlIy8vRE9NRG9jdW1lbnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL1dTRExFbGVtZW50L2RvY3VtZW50YXRpb25FbGVtZW50Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL1dTRExFbGVtZW50L2VsZW1lbnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vV1NETEVsZW1lbnQvZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbiIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudC9zZXRFbmNsb3NpbmdEZWZpbml0aW9uIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudC9zZXRFbmNsb3NpbmdEZWZpbml0aW9uL2RlZmluaXRpb24iLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BvcnRUeXBlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUG9ydFR5cGUvcU5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUG9ydFR5cGUvdW5kZWZpbmVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9Qb3J0VHlwZS9lT3BlcmF0aW9ucyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vT3BlcmF0aW9uL3N0eWxlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL09wZXJhdGlvbi9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL09wZXJhdGlvbi91bmRlZmluZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL09wZXJhdGlvbi9lSW5wdXQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL09wZXJhdGlvbi9lT3V0cHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9PcGVyYXRpb24vZUZhdWx0cyIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9PcGVyYXRpb24vZVBhcmFtZXRlck9yZGVyaW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9NZXNzYWdlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vTWVzc2FnZS9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9NZXNzYWdlL3VuZGVmaW5lZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vTWVzc2FnZS9lUGFydHMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BhcnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9QYXJ0L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUGFydC9lbGVtZW50TmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9QYXJ0L3R5cGVOYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL1BhcnQvdHlwZURlZmluaXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUGFydC9lbGVtZW50RGVjbGFyYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUGFydC9lTWVzc2FnZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vQmluZGluZyI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0JpbmRpbmcvcU5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZy91bmRlZmluZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vQmluZGluZy9lUG9ydFR5cGUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0JpbmRpbmcvZUJpbmRpbmdPcGVyYXRpb25zIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZ09wZXJhdGlvbi9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0JpbmRpbmdPcGVyYXRpb24vZU9wZXJhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vQmluZGluZ09wZXJhdGlvbi9lQmluZGluZ0lucHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uL2VCaW5kaW5nT3V0cHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uL2VCaW5kaW5nRmF1bHRzIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9TZXJ2aWNlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vU2VydmljZS9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9TZXJ2aWNlL3VuZGVmaW5lZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vU2VydmljZS9lUG9ydHMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BvcnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9Qb3J0L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUG9ydC9lQmluZGluZyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudC9yZXF1aXJlZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudC9lbGVtZW50VHlwZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0RlZmluaXRpb24vdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0RlZmluaXRpb24vbG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VuY29kaW5nIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VJbXBvcnRzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VUeXBlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9lTWVzc2FnZXMiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0RlZmluaXRpb24vZVBvcnRUeXBlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9lQmluZGluZ3MiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0RlZmluaXRpb24vZVNlcnZpY2VzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VOYW1lc3BhY2VzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0RlZmluaXRpb24vZ2V0RG9jdW1lbnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9zZXREb2N1bWVudCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9zZXREb2N1bWVudC9kb2N1bWVudCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSW1wb3J0Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vSW1wb3J0L25hbWVzcGFjZVVSSSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9JbXBvcnQvbG9jYXRpb25VUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vSW1wb3J0L2VEZWZpbml0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0ltcG9ydC9lU2NoZW1hIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0ltcG9ydC9nZXRTY2hlbWEiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSW1wb3J0L3NldFNjaGVtYSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSW1wb3J0L3NldFNjaGVtYS9zY2hlbWEiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJsZUVsZW1lbnQiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRXh0ZW5zaWJsZUVsZW1lbnQvZUV4dGVuc2liaWxpdHlFbGVtZW50cyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9FeHRlbnNpYmxlRWxlbWVudC9nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJsZUVsZW1lbnQvYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0V4dGVuc2libGVFbGVtZW50L2FkZEV4dGVuc2liaWxpdHlFbGVtZW50L2V4dEVsZW1lbnQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lucHV0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL091dHB1dCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9GYXVsdCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9CaW5kaW5nSW5wdXQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9CaW5kaW5nSW5wdXQvbmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nSW5wdXQvZUlucHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0JpbmRpbmdJbnB1dC9nZXRJbnB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9CaW5kaW5nSW5wdXQvc2V0SW5wdXQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0JpbmRpbmdJbnB1dC9zZXRJbnB1dC9pbnB1dCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vQmluZGluZ091dHB1dCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0JpbmRpbmdPdXRwdXQvbmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nT3V0cHV0L2VPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vQmluZGluZ091dHB1dC9nZXRPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vQmluZGluZ091dHB1dC9zZXRPdXRwdXQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0JpbmRpbmdPdXRwdXQvc2V0T3V0cHV0L291dHB1dCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vQmluZGluZ0ZhdWx0Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZ0ZhdWx0L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vQmluZGluZ0ZhdWx0L2VGYXVsdCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9CaW5kaW5nRmF1bHQvZ2V0RmF1bHQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vQmluZGluZ0ZhdWx0L3NldEZhdWx0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9CaW5kaW5nRmF1bHQvc2V0RmF1bHQvZmF1bHQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL05hbWVzcGFjZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL05hbWVzcGFjZS9VUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vTmFtZXNwYWNlL3ByZWZpeCIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JUG9ydFR5cGUiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvYWRkT3BlcmF0aW9uIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvYWRkT3BlcmF0aW9uL29wZXJhdGlvbiIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvZ2V0T3BlcmF0aW9uIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvZ2V0T3BlcmF0aW9uL25hbWUiLz4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvZ2V0T3BlcmF0aW9uL2lucHV0TmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQb3J0VHlwZS9nZXRPcGVyYXRpb24vb3V0cHV0TmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvZ2V0T3BlcmF0aW9ucyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9hZGRGYXVsdCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9hZGRGYXVsdC9mYXVsdCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2dldEZhdWx0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2dldEZhdWx0L25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9nZXRGYXVsdHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9nZXRQYXJhbWV0ZXJPcmRlcmluZyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldFBhcmFtZXRlck9yZGVyaW5nIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldFBhcmFtZXRlck9yZGVyaW5nL3BhcmFtZXRlck9yZGVyIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24vZ2V0SW5wdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9zZXRJbnB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9zZXRJbnB1dC9pbnB1dCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2dldE91dHB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldE91dHB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9zZXRPdXRwdXQvb3V0cHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lJbnB1dCI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lJbnB1dC9nZXRNZXNzYWdlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lJbnB1dC9zZXRNZXNzYWdlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JSW5wdXQvc2V0TWVzc2FnZS9tZXNzYWdlIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lPdXRwdXQiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3V0cHV0L2dldE1lc3NhZ2UiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU91dHB1dC9zZXRNZXNzYWdlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3V0cHV0L3NldE1lc3NhZ2UvbWVzc2FnZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JRmF1bHQiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRmF1bHQvZ2V0TWVzc2FnZSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRmF1bHQvc2V0TWVzc2FnZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUZhdWx0L3NldE1lc3NhZ2UvbWVzc2FnZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JTWVzc2FnZSI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lNZXNzYWdlL2FkZFBhcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lNZXNzYWdlL2FkZFBhcnQvcGFydCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JTWVzc2FnZS9nZXRQYXJ0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JTWVzc2FnZS9nZXRQYXJ0L25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU1lc3NhZ2UvZ2V0UGFydHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU1lc3NhZ2UvZ2V0T3JkZXJlZFBhcnRzIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JTWVzc2FnZS9nZXRPcmRlcmVkUGFydHMvcGFydE9yZGVyIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lQYXJ0Ij4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSVBhcnQvc2V0RXh0ZW5zaW9uQXR0cmlidXRlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JUGFydC9zZXRFeHRlbnNpb25BdHRyaWJ1dGUvbmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQYXJ0L3NldEV4dGVuc2lvbkF0dHJpYnV0ZS92YWx1ZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUGFydC9nZXRFeHRlbnNpb25BdHRyaWJ1dGVOYW1lcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUGFydC9nZXRFeHRlbnNpb25BdHRyaWJ1dGUiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQYXJ0L2dldEV4dGVuc2lvbkF0dHJpYnV0ZS9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lTZXJ2aWNlIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSVNlcnZpY2UvYWRkUG9ydCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSVNlcnZpY2UvYWRkUG9ydC9wb3J0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lTZXJ2aWNlL2dldFBvcnRzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lTZXJ2aWNlL2dldFBvcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lTZXJ2aWNlL2dldFBvcnQvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JUG9ydCI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lQb3J0L2dldEJpbmRpbmciLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSVBvcnQvc2V0QmluZGluZyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSVBvcnQvc2V0QmluZGluZy9iaW5kaW5nIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lCaW5kaW5nIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmcvYWRkQmluZGluZ09wZXJhdGlvbiI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmcvYWRkQmluZGluZ09wZXJhdGlvbi9iaW5kaW5nT3BlcmF0aW9uIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb24iPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb24vbmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb24vaW5wdXROYW1lIi8+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmcvZ2V0QmluZGluZ09wZXJhdGlvbi9vdXRwdXROYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb25zIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldFBvcnRUeXBlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL3NldFBvcnRUeXBlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JQmluZGluZy9zZXRQb3J0VHlwZS9wb3J0VHlwZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbiI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2FkZEJpbmRpbmdGYXVsdCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vYWRkQmluZGluZ0ZhdWx0L2JpbmRpbmdGYXVsdCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9nZXRCaW5kaW5nRmF1bHQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2dldEJpbmRpbmdGYXVsdC9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2dldEJpbmRpbmdGYXVsdHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vZ2V0T3BlcmF0aW9uIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL3NldE9wZXJhdGlvbiI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0T3BlcmF0aW9uL29wZXJhdGlvbiIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9nZXRCaW5kaW5nSW5wdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0QmluZGluZ0lucHV0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9zZXRCaW5kaW5nSW5wdXQvYmluZGluZ0lucHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2dldEJpbmRpbmdPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0QmluZGluZ091dHB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0QmluZGluZ091dHB1dC9iaW5kaW5nT3V0cHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lCaW5kaW5nSW5wdXQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JQmluZGluZ091dHB1dCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lCaW5kaW5nRmF1bHQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbiI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZEJpbmRpbmciPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZEJpbmRpbmcvYmluZGluZyIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGRJbXBvcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZEltcG9ydC9pbXBvcnREZWYiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkTWVzc2FnZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkTWVzc2FnZS9tZXNzYWdlIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZE5hbWVzcGFjZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkTmFtZXNwYWNlL3ByZWZpeCIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZE5hbWVzcGFjZS9uYW1lc3BhY2VVUkkiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkUG9ydFR5cGUiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZFBvcnRUeXBlL3BvcnRUeXBlIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZFNlcnZpY2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZFNlcnZpY2Uvc2VydmljZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVCaW5kaW5nRmF1bHQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlQmluZGluZ0lucHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZUJpbmRpbmdPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlQmluZGluZ09wZXJhdGlvbiIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVCaW5kaW5nIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZUZhdWx0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZUltcG9ydCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVJbnB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVNZXNzYWdlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZU9wZXJhdGlvbiIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlUGFydCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVQb3J0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZVBvcnRUeXBlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZVNlcnZpY2UiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0QmluZGluZyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0QmluZGluZy9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldEJpbmRpbmdzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldEltcG9ydHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0SW1wb3J0cy4xIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRJbXBvcnRzLjEvbmFtZXNwYWNlVVJJIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldE1lc3NhZ2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldE1lc3NhZ2UvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRNZXNzYWdlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXROYW1lc3BhY2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldE5hbWVzcGFjZS9wcmVmaXgiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0TmFtZXNwYWNlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRQb3J0VHlwZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0UG9ydFR5cGUvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRQb3J0VHlwZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0UHJlZml4Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRQcmVmaXgvbmFtZXNwYWNlVVJJIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldFNlcnZpY2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldFNlcnZpY2UvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRTZXJ2aWNlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRFeHRlbnNpb25SZWdpc3RyeSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9zZXRFeHRlbnNpb25SZWdpc3RyeSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vc2V0RXh0ZW5zaW9uUmVnaXN0cnkvZXh0ZW5zaW9uUmVnaXN0cnkiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0RG9jdW1lbnRCYXNlVVJJIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3NldERvY3VtZW50QmFzZVVSSSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vc2V0RG9jdW1lbnRCYXNlVVJJL2RvY3VtZW50QmFzZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVUeXBlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVTZXJ2aWNlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVTZXJ2aWNlL25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vcmVtb3ZlQmluZGluZyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vcmVtb3ZlQmluZGluZy9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3JlbW92ZVBvcnRUeXBlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVQb3J0VHlwZS9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3JlbW92ZU1lc3NhZ2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3JlbW92ZU1lc3NhZ2UvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRUeXBlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9zZXRUeXBlcyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vc2V0VHlwZXMvdHlwZXMiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSUltcG9ydCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSU1hcCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lVUkwiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JRXh0ZW5zaW9uUmVnaXN0cnkiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vVHlwZXMiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9UeXBlcy9nZXRTY2hlbWFzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL1R5cGVzL2dldFNjaGVtYXMuMSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vVHlwZXMvZ2V0U2NoZW1hcy4xL25hbWVzcGFjZVVSSSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JSXRlcmF0b3IiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JVHlwZXMiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC9jaGlsZHJlbiIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQvc2NoZW1hIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL01lc3NhZ2VSZWZlcmVuY2UiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9NZXNzYWdlUmVmZXJlbmNlL25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vTWVzc2FnZVJlZmVyZW5jZS9lTWVzc2FnZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgPC9nZW5QYWNrYWdlcz4KLTwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwubWRsIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLm1kbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2ZjA3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwubWRsCisrKyAvZGV2L251bGwKQEAgLTEsMzg1MCArMCwwIEBACi0KLShvYmplY3QgUGV0YWwKLSAgICB2ZXJzaW9uICAgIAk0MgotICAgIF93cml0dGVuICAgCSJSb3NlIDQuNS44MTYzLjMiCi0gICAgY2hhclNldCAgICAJMCkKLQotKG9iamVjdCBEZXNpZ24gIkxvZ2ljYWwgVmlldyIKLSAgICBpc191bml0ICAgIAlUUlVFCi0gICAgaXNfbG9hZGVkICAJVFJVRQotICAgIGRlZmF1bHRzICAgCShvYmplY3QgZGVmYXVsdHMKLQlyaWdodE1hcmdpbiAJMC4yNTAwMDAKLQlsZWZ0TWFyZ2luIAkwLjI1MDAwMAotCXRvcE1hcmdpbiAgCTAuMjUwMDAwCi0JYm90dG9tTWFyZ2luIAkwLjUwMDAwMAotCXBhZ2VPdmVybGFwIAkwLjI1MDAwMAotCWNsaXBJY29uTGFiZWxzIAlUUlVFCi0JYXV0b1Jlc2l6ZSAJVFJVRQotCXNuYXBUb0dyaWQgCVRSVUUKLQlncmlkWCAgICAgIAkxNgotCWdyaWRZICAgICAgCTE2Ci0JZGVmYXVsdEZvbnQgCShvYmplY3QgRm9udAotCSAgICBzaXplICAgICAgIAkxMAotCSAgICBmYWNlICAgICAgIAkiQXJpYWwiCi0JICAgIGJvbGQgICAgICAgCUZBTFNFCi0JICAgIGl0YWxpY3MgICAgCUZBTFNFCi0JICAgIHVuZGVybGluZSAgCUZBTFNFCi0JICAgIHN0cmlrZSAgICAgCUZBTFNFCi0JICAgIGNvbG9yICAgICAgCTAKLQkgICAgZGVmYXVsdF9jb2xvciAJVFJVRSkKLQlzaG93TWVzc2FnZU51bSAJMQotCXNob3dDbGFzc09mT2JqZWN0IAlUUlVFCi0Jbm90YXRpb24gICAJIlVuaWZpZWQiKQotICAgIHJvb3RfdXNlY2FzZV9wYWNrYWdlIAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJVc2UgQ2FzZSBWaWV3IgotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjQiCi0JZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQlnbG9iYWwgICAgIAlUUlVFCi0JbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgVXNlQ2FzZURpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNzgiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHJvb3RfY2F0ZWdvcnkgCShvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIkxvZ2ljYWwgVmlldyIKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDYzIgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCXN1YnN5c3RlbSAgCSJDb21wb25lbnQgVmlldyIKLQlxdWlkdSAgICAgIAkiMzlFMjdGMDgwMDY1IgotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIndzZGwiCi0JCWlzX3VuaXQgICAgCVRSVUUKLQkJaXNfbG9hZGVkICAJRkFMU0UKLQkJZmlsZV9uYW1lICAJIiRWQUJBU0VfUExVR0lOU19QQVRIXFxvcmcuZWNsaXBzZS53c3Qud3NkbFxcbW9kZWxcXG9yZy5lY2xpcHNlLndzdC5XU0RMLmNhdCIKLQkJcXVpZCAgICAgICAJIjNBREZCOEU1MDIxRSIpCi0JICAgIChvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgInhzZCIKLQkJaXNfdW5pdCAgICAJVFJVRQotCQlpc19sb2FkZWQgIAlGQUxTRQotCQlmaWxlX25hbWUgIAkiJFZBQkFTRV9QTFVHSU5TX1BBVEhcXG9yZy5lY2xpcHNlLnhzZFxcbW9kZWxcXG9yZy5lY2xpcHNlLlhTRC5jYXQiCi0JCXF1aWQgICAgICAgCSIzOUFCREM2RjAxQUEiKSkKLQlsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNzYiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp3c2RsIiBAMQotCQkJbG9jYXRpb24gICAJKDI3MiwgMjU2KQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTI4LCAxNzIpCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJ3c2RsIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzQURGQjhFNTAyMUUiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OnhzZCIgQDIKLQkJCWxvY2F0aW9uICAgCSgyNzIsIDU3NikKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAyCi0JCQkgICAgbG9jYXRpb24gICAJKDEyOCwgNDkyKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkieHNkIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzOUFCREM2RjAxQUEiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkpKSkpCi0gICAgcm9vdF9zdWJzeXN0ZW0gCShvYmplY3QgU3ViU3lzdGVtICJDb21wb25lbnQgVmlldyIKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDY1IgotCXBoeXNpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdCkKLQlwaHlzaWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgTW9kdWxlX0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNzciCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb2Nlc3Nfc3RydWN0dXJlIAkob2JqZWN0IFByb2Nlc3NlcwotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjYiCi0JUHJvY3NORGV2cyAJKGxpc3QKLQkgICAgKG9iamVjdCBQcm9jZXNzX0RpYWdyYW0gIkRlcGxveW1lbnQgVmlldyIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2OCIKLQkJdGl0bGUgICAgICAJIkRlcGxveW1lbnQgVmlldyIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICBwcm9wZXJ0aWVzIAkob2JqZWN0IFByb3BlcnRpZXMKLQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlIgotCQkJdmFsdWUgICAgICAJKCJEYXRhQmFzZVNldCIgODAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiQU5TSSIKLQkJCQl2YWx1ZSAgICAgIAk4MDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJPcmFjbGUiCi0JCQkJdmFsdWUgICAgICAJODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU1FMU2VydmVyIgotCQkJCXZhbHVlICAgICAgCTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIlN5YmFzZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJXYXRjb20iCi0JCQkJdmFsdWUgICAgICAJODA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJJZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVl8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lIgotCQkJdmFsdWUgICAgICAJIlRfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiX1YiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQmFzZVZpZXdzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJWQVJDSEFSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTnVsbHNPSyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiZnJhbWV3b3JrIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMRWxlbWVudCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjaWZpY2F0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSURMU3BlY1NldCIgMjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMU3BlY1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkludGVyZmFjZSIKLQkJCQl2YWx1ZSAgICAgIAkyMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlR5cGVkZWYiCi0JCQkJdmFsdWUgICAgICAJNTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFbnVtZXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFeGNlcHRpb24iCi0JCQkJdmFsdWUgICAgICAJNjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTdHJ1Y3QiCi0JCQkJdmFsdWUgICAgICAJNTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJVbmlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4MSkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5zZXJ2aWNlcy9zcmMvcm9zZS93c2RsTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJRExNb2R1bGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLnNlcnZpY2VzL3NyYy9yb3NlL3dzZGxNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlJhaXNlcyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJIYXNSZWxUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlUHJlZml4ZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbnN0YW5jZVZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJIm1fIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbGFzc1ZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJInNfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0QXR0cmlidXRlRGF0YVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0T3BlcmF0aW9uUmV0dXJuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJ2b2lkIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTmF0aXZlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3luY2hyb25pemVkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjM2MDAwMDAwMiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkRETFNjcmlwdEZpbGVuYW1lIgotCQkJdmFsdWUgICAgICAJIkRETDEuU1FMIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJEcm9wQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtbk5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiX0lEIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSwwKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NoZW1hTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjaGVtYU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUeXBlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlR5cGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZhcnJheU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWYXJyYXlOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTmVzdGVkVGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTmVzdGVkVGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT2JqZWN0VGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT2JqZWN0VGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzU2NoZW1hIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9JRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIldoZXJlQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZVByZWNpc2lvbiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlU2NhbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uT2ZSRUZTIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RLaW5kIgotCQkJdmFsdWUgICAgICAJKCJNZXRob2RLaW5kU2V0IiAxOTAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPdmVybG9hZElEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWROb0RhdGFTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUmVhZE5vUHJvY2Vzc1N0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNXcml0ZU5vRGF0YVN0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNXcml0ZU5vUHJvY2Vzc1N0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNTZWxmaXNoIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJUeXBlU2V0IiAxODAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRXZlbnQiCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJFdmVudFNldCIgMTYwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyUmVmZXJlbmNpbmdOYW1lcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJGb3JFYWNoIgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyRm9yRWFjaFNldCIgMTcwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlcldoZW5DbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk1hcE1ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk9yZGVyTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTE5MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTkwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJQcm9jZWR1cmUiCi0JCQkJdmFsdWUgICAgICAJMTkwNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJPcGVyYXRvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA3KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlRyaWdnZXIiCi0JCQkJdmFsdWUgICAgICAJMTkwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJDYWxjdWxhdGVkIgotCQkJCXZhbHVlICAgICAgCTE5MDkpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJBRlRFUiIKLQkJCQl2YWx1ZSAgICAgIAkxODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkJFRk9SRSIKLQkJCQl2YWx1ZSAgICAgIAkxODAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU1RFQUQgT0YiCi0JCQkJdmFsdWUgICAgICAJMTgwMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJGb3JFYWNoU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlJPVyIKLQkJCQl2YWx1ZSAgICAgIAkxNzAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlNUQVRFTUVOVCIKLQkJCQl2YWx1ZSAgICAgIAkxNzAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckV2ZW50U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCIKLQkJCQl2YWx1ZSAgICAgIAkxNjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlVQREFURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkRFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBVUERBVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVVBEQVRFIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBVUERBVEUgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk51bGxzQWxsb3dlZCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJlY2lzaW9uIgotCQkJdmFsdWUgICAgICAJIjIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjYWxlIgotCQkJdmFsdWUgICAgICAJIjYiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzSW5kZXgiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1ByaW1hcnlLZXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb21wb3NpdGVVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUmVwb3NpdG9yeSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVc2VNU1ZDIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVCYWNrdXBFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaH4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlVGVtcG9yYXJ5RXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImgjIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3BwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVCYWNrdXBFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3B+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVUZW1wb3JhcnlFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3AjIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXJyb3JMaW1pdCIKLQkJCXZhbHVlICAgICAgCTMwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiJFJPU0VDUFBfU09VUkNFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUGF0aFNlcGFyYXRvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSIxMjh2eF9iIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9vbGVhblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dUZW1wbGF0ZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4cGxpY2l0SW5zdGFudGlhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd1Byb3RlY3RlZEluaGVyaXRhbmNlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29tbWVudFdpZHRoIgotCQkJdmFsdWUgICAgICAJNjApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9uZUJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT25lQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25hbEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiT3B0aW9uYWxCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25hbEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRml4ZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzc1skbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkRml4ZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzc1skbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRml4ZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKlskbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkRml4ZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKlskbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZExpc3RCeVZhbHVlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkQm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZFNldEJ5VmFsdWU8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZExpc3RCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkU2V0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbmJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZExpc3RCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRVbmJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZFNldEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVuYm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZExpc3RCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkVW5ib3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkU2V0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQXNzb2NpYXRpb25CeVZhbHVlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFF1YWxpZmllZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiRGljdGlvbmFyeUJ5VmFsdWU8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQXNzb2NpYXRpb25CeVJlZmVyZW5jZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRRdWFsaWZpZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJEaWN0aW9uYXJ5QnlSZWZlcmVuY2U8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcmVzZXJ2ZVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDbGFzc0tleSIKLQkJCXZhbHVlICAgICAgCSJjbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUHV0Qm9kaWVzSW5TcGVjIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdENvbnN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhwbGljaXREZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5Q29uc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUNvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeHBsaWNpdENvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZXN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzaWdubWVudE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc2lnbm1lbnRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc2lnbm1lbnRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc2lnbm1lbnRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFcXVhbGl0eU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcXVhbGl0eVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXF1YWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGcmllbmRLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVFcXVhbGl0eU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVSZWxhdGlvbmFsT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSZWxhdGlvbmFsVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSZWxhdGlvbmFsS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRnJpZW5kS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUmVsYXRpb25hbE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdG9yYWdlTWdtdE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RvcmFnZU1nbXRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN0b3JhZ2VNZ210T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN1YnNjcmlwdE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0UmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdWJzY3JpcHRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZXJlZmVyZW5jZU9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlUmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZXJlZmVyZW5jZU9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluZGlyZWN0aW9uT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvbktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25SZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUluZGlyZWN0aW9uT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RyZWFtT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdHJlYW1WaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN0cmVhbU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVGhyZWVLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIktpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRnJpZW5kS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRGVjbGFyZUFuZERlZmluZSIKLQkJCQl2YWx1ZSAgICAgIAkxOTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRlY2xhcmVPbmx5IgotCQkJCXZhbHVlICAgICAgCTIwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRG9Ob3REZWNsYXJlIgotCQkJCXZhbHVlICAgICAgCTIwNikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLnNlcnZpY2VzL3NyYy9yb3NlL3dzZGxNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5zZXJ2aWNlcy9zcmMvcm9zZS93c2RsTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiT3BlcmF0aW9uS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhpdENvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9keUFubm90YXRpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmFpc2VzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9yZGVyZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3Rvck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2VsZWN0b3JUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhhc1JlbFR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0Fzc29jaWF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluc3RhbmNlQXJndW1lbnRzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyR2V0IgotCQkJdmFsdWUgICAgICAJIiRkYXRhLmdldCgka2V5cykiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJTZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuc2V0KCRrZXlzLCR2YWx1ZSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0NvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkc3VwcGxpZXIgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAkoIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlU2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19HZXRTZXRCeVJlZmVyZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUXVhbGlmaWVkR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVF1YWxpZmllZFNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0RhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0dldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc29jQ2xhc3NHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc1NldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRBdHRyaWJ1dGVWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5UmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnlJc09uU2VhcmNoTGlzdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGVudCIKLQkJCXZhbHVlICAgICAgCTIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIjUuMCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNDbGFzc1R5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNDbGFzc1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb25uZWN0aW9uX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDbGFzc19GYWN0b3J5IgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT2JqZWN0RnVuY3Rpb25hbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5hbWljIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRHluY3JlYXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU2VyaWFsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU92ZXJyaWRlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9EQVRBX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaWVsZEdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0ZJRUxEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNZXNzYWdlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSgiT0xFRmFjdG9yeVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRfaW4iCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJMaWNlbnNlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUNsYXNzSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDdGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPTEVUeXBlTGliIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYklEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1ham9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1pbm9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wUGFnZUlEcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcGF0Y2hNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRnVuY3Rpb25zIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoRGVmVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURpc3BJZEVudW0iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUF9JRF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW50ZXJmYWNlTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSU5URVJGQUNFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaXRJbnRlcmZhY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUV2ZW50TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRXZlbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRTaW5rTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlByb3BOb3RpZnlTaW5rcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25Qb2ludElJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRhbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ29tbWFuZHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDSW1wbGVtZW50cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBVExfRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDT01NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT01fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb25uZWN0aW9uUG9pbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX1BPSU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTXNnTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJvcGVydHlNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQUk9QRVJUWV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNPcGVyYXRpb25UeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDT3BlcmF0aW9uVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsX092ZXJyaWRlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVzc2FnZV9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlzcGF0Y2hfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X0ZpcmluZ19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X1NpbmtfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAk1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0ZF9PTEVfTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ29tbWFuZF9QYXJzZXIiCi0JCQkJdmFsdWUgICAgICAJNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9HZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9TZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9Ob3RpZnlfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWFjcm9fR2VuZXJhdGVkX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX01TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRVNTQUdFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkJvZHlJbWFnZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5jbHVkZXNHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9JTkNMVURFU19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zZXJ0TG9jYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiU0NDIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJUeXBlTGliSW1wb3J0ZXIiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI3ODM2MDYzNzgiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljTm90Q3JlYXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTIxMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxTaW5nbGVVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiR2xvYmFsTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjIwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25CYXNlIgotCQkJdmFsdWUgICAgICAJIjAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uQ29tcGFyZSIKLQkJCXZhbHVlICAgICAgCSgiQ29tcGFyZVNldCIgMjAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZSIKLQkJCXZhbHVlICAgICAgCSgiQ3JlYXRhYmxlU2V0IiAyMjEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbml0aWFsaXphdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVUZXJtaW5hdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbkNsYXNzIgotCQkJdmFsdWUgICAgICAJIkNvbGxlY3Rpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29tcGFyZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiQmluYXJ5IgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlRleHQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkb3BlcmF0aW9uIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkxpYnJhcnlOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJBbGlhc05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFbnRyeUNvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOZXciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIldpdGhFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZSRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTGV0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSW5oZXJpdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50c0RlbGVnYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiUHJvamVjdEZpbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWxTdHVkaW8iCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2OSIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInBhY2thZ2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zVVJJIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY2xhc3NpZmllck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY29uc3RyYWludHMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiQ29udGVudEtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRW1wdHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIk1peGVkIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnRPbmx5IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJvcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhdHRyaWJ1dGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNJRCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJyZWZlcmVuY2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzUmVzb2x2ZVByb3hpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkpCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2NyIpKQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9vcmcuZWNsaXBzZS53c3QuV1NETC5jYXQgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL29yZy5lY2xpcHNlLndzdC5XU0RMLmNhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAwODQ0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL29yZy5lY2xpcHNlLndzdC5XU0RMLmNhdAorKysgL2Rldi9udWxsCkBAIC0xLDcyOTUgKzAsMCBAQAotCi0ob2JqZWN0IFBldGFsCi0gICAgdmVyc2lvbiAgICAJNDIKLSAgICBfd3JpdHRlbiAgIAkiUm9zZSA0LjUuODE2My4zIgotICAgIGNoYXJTZXQgICAgCTApCi0KLShvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIndzZGwiCi0gICAgaXNfdW5pdCAgICAJVFJVRQotICAgIGlzX2xvYWRlZCAgCVRSVUUKLSAgICBhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JKG9iamVjdCBBdHRyaWJ1dGUKLQkgICAgdG9vbCAgICAgICAJIkVjb3JlIgotCSAgICBuYW1lICAgICAgIAkibnNQcmVmaXgiCi0JICAgIHZhbHVlICAgICAgCSJ3c2RsIikKLQkob2JqZWN0IEF0dHJpYnV0ZQotCSAgICB0b29sICAgICAgIAkiRWNvcmUiCi0JICAgIG5hbWUgICAgICAgCSJuc1VSSSIKLQkgICAgdmFsdWUgICAgICAJImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1dTREwiKQotCShvYmplY3QgQXR0cmlidXRlCi0JICAgIHRvb2wgICAgICAgCSJFY29yZSIKLQkgICAgbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCSAgICB2YWx1ZSAgICAgIAkib3JnLmVjbGlwc2Uud3N0IikKLQkob2JqZWN0IEF0dHJpYnV0ZQotCSAgICB0b29sICAgICAgIAkiRWNvcmUiCi0JICAgIG5hbWUgICAgICAgCSJwcmVmaXgiCi0JICAgIHZhbHVlICAgICAgCSJXU0RMIikpCi0gICAgcXVpZCAgICAgICAJIjNBREZCOEU1MDIxRSIKLSAgICBkb2N1bWVudGF0aW9uIAkKLXxUaGUgV1NETCBtb2RlbCBjb250YWlucyBjbGFzc2VzIGZvciB0aGUgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKS4KLXwKLXxXU0RMIGRlc2NyaWJlcyBuZXR3b3JrIHNlcnZpY2VzIGFzIHNldHMgb2YgZW5kcG9pbnRzIG9wZXJhdGluZyBvbiBtZXNzYWdlcy4gVGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGFyZSBkZXNjcmliZWQgYWJzdHJhY3RseSwgYW5kIHRoZW4gYm91bmQgdG8gYSBjb25jcmV0ZSBuZXR3b3JrIHByb3RvY29sIGFuZCBtZXNzYWdlIGZvcm1hdCB0byBkZWZpbmUgYW4gZW5kcG9pbnQuCi18Ci18V1NETCBkZXNjcmliZXMgdGhlIGZvcm1hdHMgb2YgdGhlIG1lc3NhZ2VzIGV4Y2hhbmdlZCBieSB0aGUgc2VydmljZXMsIGFuZCBzdXBwb3J0cyB0aGUgWE1MIFNjaGVtYXMgc3BlY2lmaWNhdGlvbiBhcyBpdHMgY2Fub25pY2FsIHR5cGUgc3lzdGVtLiBUaGlzIHBhY2thZ2UgdXNlcyBhbiBYTUwgU2NoZW1hIEluZm9zZXQgbW9kZWwgcGFja2FnZSAoc2VlIHRoZSBYU0QgcGFja2FnZSkgdG8gZGVzY3JpYmUgdGhlIGFic3RyYWN0IG1lc3NhZ2UgZm9ybWF0cy4KLXwKLXxUaGUgbW9kZWwgY29udGFpbnMgdGhlIGZvbGxvd2luZyBkaWFncmFtcywgbmFtZWQgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcHRlcnMgaW4gdGhlIFdTREwgMS4xIHNwZWNpZmljYXRpb24gKGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvTk9URS13c2RsLTIwMDEwMzE1KQotfC0gMi4xIERlZmluaXRpb24sIHNob3dzIHRoZSBXU0RMIGRlZmluaXRpb24gZWxlbWVudCBhbmQgdGhlIFdTREwgZG9jdW1lbnQgc3RydWN0dXJlCi18LSAyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmcsIHNob3dzIHRoZSBuYW1lc3BhY2UgYW5kIGltcG9ydCBtZWNoYW5pc20KLXwtIDIuMS4zIEV4dGVuc2liaWxpdHksIHNob3dzIHRoZSBXU0RMIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtCi18LSAyLjIgVHlwZXMsIHNob3dzIHRoZSB1c2Ugb2YgWE1MIFNjaGVtYSB0eXBlcyBpbiBXU0RMCi18LSAyLjMgTWVzc2FnZXMsIDIuNCBQb3J0VHlwZXMsIDIuNSBCaW5kaW5ncyBhbmQgMi43IFNlcnZpY2VzLCBzaG93IHRoZSBtYWpvciBXU0RMIGVsZW1lbnRzIGFuZCB0aGVpciByZWxhdGlvbnMuCi18Ci18VGhlIFdTREwgY2xhc3NlcyBleHRlbmQgdGhlIGphdmF4LndzZGwgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5IEpTUiAxMTAuIENsYXNzZXMgd2l0aCBpbnRlcmZhY2UgYW5kIGRhdGF0eXBlIHN0ZXJlb3R5cGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCB0aGVzZSBub24tTU9GIGludGVyZmFjZXMuCi0gICAgCi0gICAgZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLSAgICBsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCShvYmplY3QgQ2xhc3MgIldTRExFbGVtZW50IgotCSAgICBxdWlkICAgICAgIAkiM0FENUM2QTMwMkREIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBsYW5ndWFnZSBlbGVtZW50LiIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0QxNTI5NjAwQzgiCi0JCSAgICByZXN1bHQgICAgIAkiRGVmaW5pdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRFbmNsb3NpbmdEZWZpbml0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNDRDE1MkI4MDM0NyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJkZWZpbml0aW9uIgotCQkJICAgIHR5cGUgICAgICAgCSJEZWZpbml0aW9uIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZG9jdW1lbnRhdGlvbkVsZW1lbnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0NDRTQ0MzYwMkEzIgotCQkgICAgdHlwZSAgICAgICAJIkRPTUVsZW1lbnQiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJlbGVtZW50IgotCQkgICAgYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJKG9iamVjdCBBdHRyaWJ1dGUKLQkJCSAgICB0b29sICAgICAgIAkiRWNvcmUiCi0JCQkgICAgbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJICAgIHZhbHVlICAgICAgCVRSVUUpKQotCQkgICAgcXVpZCAgICAgICAJIjNGOTdEQkQzMDIwNyIKLQkJICAgIHR5cGUgICAgICAgCSJET01FbGVtZW50IikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIgotCSAgICBhYnN0cmFjdCAgIAlUUlVFKQotCShvYmplY3QgQ2xhc3MgIlBvcnRUeXBlIgotCSAgICBxdWlkICAgICAgIAkiM0FENUM3RjAwMUE1IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBwb3J0VHlwZSBlbGVtZW50IG9mIHRoZSBXU0RMIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjEgYW5kIGFuIEludGVyZmFjZSBjb21wb25lbnQgb2YgdGhlIFdTREwgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMi4gQSBwb3J0IHR5cGUgb3IgSW50ZXJmYWNlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1QzlCNzAxNTAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYxRkQ4MDE5RiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklQb3J0VHlwZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTVCRTAzMzEiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAicU5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQjQ4OEUwMDIzIgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidW5kZWZpbmVkIgotCQkgICAgcXVpZCAgICAgICAJIjNCRERGMUUzMDFFNSIKLQkJICAgIHR5cGUgICAgICAgCSJib29sZWFuIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJPcGVyYXRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50LiBBIFdTREwgb3BlcmF0aW9uIGlzIGFuIGFic3RyYWN0IGRlc2NyaXB0aW9uIG9mIGFuIGFjdGlvbiBzdXBwb3J0ZWQgYnkgYSBzZXJ2aWNlLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRTlERTk4MDAzQyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2RjFGRTIwMTcxIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU9wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTc3NjAwRDEiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAic3R5bGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQjQ3MjYwMUFDIgotCQkgICAgdHlwZSAgICAgICAJIk9wZXJhdGlvblR5cGUiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCREQ5NjQzMDA0QyIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJ1bmRlZmluZWQiCi0JCSAgICBxdWlkICAgICAgIAkiM0JEREYyMzUwMDNFIgotCQkgICAgdHlwZSAgICAgICAJImJvb2xlYW4iKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIk1lc3NhZ2UiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG1lc3NhZ2UgZWxlbWVudC4gQSBXU0RMIG1lc3NhZ2UgaXMgYW4gYWJzdHJhY3QsIHR5cGVkIGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgY29tbXVuaWNhdGVkLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRDVEMDU1MDFDNCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEE4RDEwMkJBIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE4QUYwMDRGIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInFOYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUI0ODdDMDFGRSIKLQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInVuZGVmaW5lZCIKLQkJICAgIHF1aWQgICAgICAgCSIzQkRERjFEMjAyMjYiCi0JCSAgICB0eXBlICAgICAgIAkiYm9vbGVhbiIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiUGFydCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcGFydCBlbGVtZW50LiBQYXJ0cyBkZXNjcmliZSB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRWFjaCBwYXJ0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGUgZnJvbSBzb21lIHR5cGUgc3lzdGVtLiAiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTk2RDAyRjEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUGFydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTkzRjAxQkUiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODk3RTIzMDIzNyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCQ0U3MEI3MDNDOCIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJlbGVtZW50TmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QjA4NzAzREIiCi0JCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJ0eXBlTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQkNFNzBDMzAzQzUiCi0JCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmciCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDI4NjAyNjEiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGJpbmRpbmcgZWxlbWVudC4gQSBiaW5kaW5nIGRlZmluZXMgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sIGRldGFpbHMgZm9yIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnRUeXBlLiBUaGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiBiaW5kaW5ncyBmb3IgYSBnaXZlbiBwb3J0VHlwZS4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RkEwRjAyRjAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODU5NTQxMDEyOSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nIgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQkM2MDIxOSIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJxTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVCNDg5OTAxNEIiCi0JCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJ1bmRlZmluZWQiCi0JCSAgICBxdWlkICAgICAgIAkiM0JEREYxRjQwMUEzIgotCQkgICAgdHlwZSAgICAgICAJImJvb2xlYW4iKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmdPcGVyYXRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50IHdpdGhpbiBhIGJpbmRpbmcuIEFuIG9wZXJhdGlvbiBlbGVtZW50IHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lIHdpdGhpbiB0aGUgYmluZGluZydzIHBvcnRUeXBlLiAiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ2MDA5MjAyRjciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODRBREU0MDFEQyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREMwMDA3MiIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCODlDNENCMDE5OSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIlNlcnZpY2UiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDhGMDAyRjgiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHNlcnZpY2UgZWxlbWVudC4gQSBzZXJ2aWNlIGdyb3VwcyBhIHNldCBvZiByZWxhdGVkIHBvcnRzIHRvZ2V0aGVyLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRDVGQTIwMDI1RSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NTk1NEUwMUI0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVNlcnZpY2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFCNDkwMjg3IikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInFOYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUI0OEE0MDE1MSIKLQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInVuZGVmaW5lZCIKLQkJICAgIHF1aWQgICAgICAgCSIzQkRERjIwRDAyMDMiCi0JCSAgICB0eXBlICAgICAgIAkiYm9vbGVhbiIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiUG9ydCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEOTE3MDI4NiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9ydCBlbGVtZW50LiBBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0FENjAwQ0IwMEFBIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1OTU0NTAyQzkiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUG9ydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUI4MDAzMjYiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDlBMDAzOTEiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEQkI2MDJBOSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LiBXU0RMIGFsbG93cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHRlY2hub2xvZ3kgdW5kZXIgdmFyaW91cyBlbGVtZW50cyBkZWZpbmVkIGJ5IFdTREwuIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEIxNDkwM0QwIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMTI0MDJBQiIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0JEREY1MzUwMkMzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6V1NETEVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM2QTMwMkREIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInJlcXVpcmVkIgotCQkgICAgcXVpZCAgICAgICAJIjNBRjk1NDNDMDA3MyIKLQkJICAgIHR5cGUgICAgICAgCSJib29sZWFuIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZWxlbWVudFR5cGUiCi0JCSAgICBhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkob2JqZWN0IEF0dHJpYnV0ZQotCQkJICAgIHRvb2wgICAgICAgCSJFY29yZSIKLQkJCSAgICBuYW1lICAgICAgIAkiaXNUcmFuc2llbnQiCi0JCQkgICAgdmFsdWUgICAgICAJVFJVRSkpCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUIyMUEwMjcxIgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJEZWZpbml0aW9uIgotCSAgICBxdWlkICAgICAgIAkiM0FENUU0M0YwMDhFIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgYSBXU0RMIGRvY3VtZW50LiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRDVGREI4MDNENCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEIxRjgwMzgyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SURlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEIxRDkwMTQyIikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldERvY3VtZW50IgotCQkgICAgcXVpZCAgICAgICAJIjNDRDE0RkMyMDEyQiIKLQkJICAgIHJlc3VsdCAgICAgCSJET01Eb2N1bWVudCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXREb2N1bWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0QxNTBERTAxRTciCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZG9jdW1lbnQiCi0JCQkgICAgdHlwZSAgICAgICAJIkRPTURvY3VtZW50IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidGFyZ2V0TmFtZXNwYWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNDc0MDA0RSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJsb2NhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSI0MDM1MkI3QzAzOTYiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAicU5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQjQ4NTcwMkY1IgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZW5jb2RpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwMEQwMDBEIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiSW1wb3J0IgotCSAgICBxdWlkICAgICAgIAkiM0FENUU0RjkwM0RFIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIFdTREwgaW1wb3J0IGVsZW1lbnQuIFdTREwgYWxsb3dzIGFzc29jaWF0aW5nIGEgbmFtZXNwYWNlIHdpdGggYSBkb2N1bWVudCBsb2NhdGlvbiB1c2luZyBhbiBpbXBvcnQgZWxlbWVudC4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RUU1ODAzN0EiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYyMDBEMDM0MCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklJbXBvcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEIyMDIwMTE5IikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFNjaGVtYSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NzJDMTAzNzkiCi0JCSAgICByZXN1bHQgICAgIAkiWFNEU2NoZW1hIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldFNjaGVtYSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NzJDMTAzOTciCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAic2NoZW1hIgotCQkJICAgIHR5cGUgICAgICAgCSJYU0RTY2hlbWEiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lc3BhY2VVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUU1MEEwMDM2IgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImxvY2F0aW9uVVJJIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNTE0MDIxMSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkV4dGVuc2libGVFbGVtZW50IgotCSAgICBxdWlkICAgICAgIAkiM0FENUZDRkEwMzNBIgotCSAgICBkb2N1bWVudGF0aW9uIAkiIFdTREwgYWxsb3dzIGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHRlY2hub2xvZ3kgKHJlZmVycmVkIHRvIGhlcmUgYXMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cykgdW5kZXIgdmFyaW91cyBlbGVtZW50cyBkZWZpbmVkIGJ5IFdTREwuIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9pbnQgb2YgZXh0ZW5zaWJpbGl0eS4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RkUzQzAzRDQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpXU0RMRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzZBMzAyREQiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODVDMTJDMDNDRCIKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QzE0NzAyOTUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZXh0RWxlbWVudCIKLQkJCSAgICB0eXBlICAgICAgIAkiSUV4dGVuc2liaWxpdHlFbGVtZW50IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiCi0JICAgIGFic3RyYWN0ICAgCVRSVUUpCi0JKG9iamVjdCBDbGFzcyAiSW5wdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwNzg5RjAwNTkiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGlucHV0IGVsZW1lbnQuIEFuIGlucHV0IGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgdGhlIGlucHV0IG9mIHRoZSBvcGVyYXRpb24uIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2NzcyMjgwMkU3IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzFEQjAyREMiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYxRkVFMDMxRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklJbnB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTdFRTAwMTUiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIk91dHB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNBRTA3OEI2MDIzMiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQuIEFuIG91dHB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzRjY3NzIzNTAwREQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlUmVmZXJlbmNlIgotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MURCMDJEQyIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2RjFGRjgwMUNEIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU91dHB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTgyOTAyN0QiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkZhdWx0IgotCSAgICBxdWlkICAgICAgIAkiM0FFMDc4QkUwMTA4IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50LiBGYXVsdCBlbGVtZW50cyBzcGVjaWZ5IHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgYW55IGVycm9yIG1lc3NhZ2VzIHRoYXQgbWF5IGJlIG91dHB1dCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2NzcyM0QwMzE5IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzFEQjAyREMiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYyMDAyMDAyRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTg2MTAzMUQiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmdJbnB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNBRTA4QTgyMDJENCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgaW5wdXQgZWxlbWVudCB3aXRoaW4gYSBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZy4gQW4gaW5wdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLiAiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUUxQjAxMTMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ0lucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREVCMDEwMCIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUI1OUIwMDcyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldElucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1M0E0MDIwMyIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW5wdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0SW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjUzQjUwM0EyIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImlucHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJSW5wdXQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCODVDMUVBMDIwRSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmdPdXRwdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwOEE4RjAyOEMiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvdXRwdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4gIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNDMwMkFCIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFMjEwMTExIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QjVBNDAyN0UiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0T3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1M0Q5MDBGMSIKLQkJICAgIHJlc3VsdCAgICAgCSJJT3V0cHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldE91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTNGMTAzMjYiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAib3V0cHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJT3V0cHV0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QzIwMjAwQkUiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJCaW5kaW5nRmF1bHQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwOEE5RTAzQTYiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGZhdWx0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEEgZmF1bHQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBmYXVsdCB3aXRoIHRoZSBzYW1lIG5hbWUuICIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRTA5Mzg2MDJDOSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNzEwMzMzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUU0RjAwQkQiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU0MTMwMzdGIgotCQkgICAgcmVzdWx0ICAgICAJIklGYXVsdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTQyMTAxMDkiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZmF1bHQiCi0JCQkgICAgdHlwZSAgICAgICAJIklGYXVsdCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUJGOUUwMTRBIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiUU5hbWUiCi0JICAgIHF1aWQgICAgICAgCSIzQUU4RUQyMjAxNDAiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuUU5hbWUgY2xhc3MuIEEgUU5hbWUgaXMgYSBmdWxseSBxdWFsaWZpZWQgbmFtZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0OURBOTAwM0QiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJOYW1lc3BhY2UiCi0JICAgIHF1aWQgICAgICAgCSIzQUVBM0NEMzAwMzAiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBuYW1lc3BhY2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5hbWVzcGFjZSBwcmVmaXggdXNlZCBpbiBhIFdTREwgZG9jdW1lbnQuIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNEMjkwMUIxIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInByZWZpeCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVBM0QzMjAyMzYiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJPcGVyYXRpb25UeXBlIgotCSAgICBxdWlkICAgICAgIAkiM0FFQjQ3ODIwMjRGIgotCSAgICBkb2N1bWVudGF0aW9uIAkKLXxPTkVfV0FZPTEKLXxSRVFVRVNUX1JFU1BPTlNFPTIKLXxTT0xJQ0lUX1JFU1BPTlNFPTMKLXxOT1RJRklDQVRJT049NAotCSAgICAKLQkgICAgc3RlcmVvdHlwZSAJImRhdGF0eXBlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk9wZXJhdGlvblR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUMzNTMwM0UzIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiSVBvcnRUeXBlIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEE1QkUwMzMxIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlBvcnRUeXBlIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2QUMxMDFDQSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJvcGVyYXRpb24iCi0JCQkgICAgdHlwZSAgICAgICAJIklPcGVyYXRpb24iKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTZCQUYwMUE0IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiaW5wdXROYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm91dHB1dE5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIklPcGVyYXRpb24iCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0T3BlcmF0aW9ucyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkJGNzAzMUEiCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5Qb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTYzMjAwMEQiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklPcGVyYXRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QTc3NjAwRDEiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuT3BlcmF0aW9uIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkRmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTZDNDIwMDY1IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImZhdWx0IgotCQkJICAgIHR5cGUgICAgICAgCSJJRmF1bHQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkM1OTAyOEYiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUZhdWx0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEZhdWx0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkM3MTAyQjEiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQYXJhbWV0ZXJPcmRlcmluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkM4MTAxQjAiCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0UGFyYW1ldGVyT3JkZXJpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTZDOTkwMzFEIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInBhcmFtZXRlck9yZGVyIgotCQkJICAgIHR5cGUgICAgICAgCSJJTGlzdCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldElucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1NEU1MDE4RCIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW5wdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0SW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYyQzQwMTA3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImlucHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJSW5wdXQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYyRTQwMDk0IgotCQkgICAgcmVzdWx0ICAgICAJIklPdXRwdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0T3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY2MkYwMDFEMiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJvdXRwdXQiCi0JCQkgICAgdHlwZSAgICAgICAJIklPdXRwdXQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk9wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTc5OTAxMkIiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklJbnB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBN0VFMDAxNSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5JbnB1dCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYzMzEwMEVGIgotCQkgICAgcmVzdWx0ICAgICAJIklNZXNzYWdlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYzNDcwMjc3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm1lc3NhZ2UiCi0JCQkgICAgdHlwZSAgICAgICAJIklNZXNzYWdlIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5JbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTgwMDAwMzkiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklPdXRwdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QTgyOTAyN0QiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuT3V0cHV0IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjQzQTAzNUQiCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjQ0NTAxQzgiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibWVzc2FnZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSU1lc3NhZ2UiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTgzOTAxRDUiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklGYXVsdCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBODYxMDMxRCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5GYXVsdCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjY0NkEwMEJEIgotCQkgICAgcmVzdWx0ICAgICAJIklNZXNzYWdlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjY0NzUwMTMxIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm1lc3NhZ2UiCi0JCQkgICAgdHlwZSAgICAgICAJIklNZXNzYWdlIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5GYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTg3MTAyMDgiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklNZXNzYWdlIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEE4QUYwMDRGIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLk1lc3NhZ2Ugbm9uLU1PRiBpbnRlcmZhY2UiCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZFBhcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTcyMjQwMjczIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInBhcnQiCi0JCQkgICAgdHlwZSAgICAgICAJIklQYXJ0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UGFydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NzIzRDAyMzMiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiSVBhcnQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UGFydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTcyNTQwMjVFIgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0T3JkZXJlZFBhcnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk3MjYxMDIwRCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJwYXJ0T3JkZXIiCi0JCQkgICAgdHlwZSAgICAgICAJIklMaXN0IikpCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5NZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBOEJDMDI2MCIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSVBhcnQiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QTkzRjAxQkUiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuUGFydCBub24tTU9GIGludGVyZmFjZSIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0RXh0ZW5zaW9uQXR0cmlidXRlIgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4ODQ1MDA1MiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCQkob2JqZWN0IFBhcmFtZXRlciAidmFsdWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICBleGNlcHRpb25zIAkiV1NETEV4Y2VwdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRFeHRlbnNpb25BdHRyaWJ1dGVOYW1lcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2OEEwMTAxQzMiCi0JCSAgICByZXN1bHQgICAgIAkiSUl0ZXJhdG9yIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEV4dGVuc2lvbkF0dHJpYnV0ZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2OEEyRDAyRDUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkJICAgIHJlc3VsdCAgICAgCSJRTmFtZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLlBhcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEE5NTAwMjMxIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJU2VydmljZSIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBQjQ5MDI4NyIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5TZXJ2aWNlIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkUG9ydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NUQ1NjAxRDEiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAicG9ydCIKLQkJCSAgICB0eXBlICAgICAgIAkiSVBvcnQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQb3J0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NURBMjAwMzYiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk1REIwMDFCQyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJUG9ydCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLlNlcnZpY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFCNUIwMDNFIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJUG9ydCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBQjgwMDMyNiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5Qb3J0IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0QmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTFGMzAyQjUiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmciCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0QmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTI2MzAyRjIiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiYmluZGluZyIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmciKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLlBvcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFCOEMwMDE2IgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJQmluZGluZyIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBQkM2MDIxOSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5CaW5kaW5nIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkQmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NUYxNjAxNTMiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiYmluZGluZ09wZXJhdGlvbiIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmdPcGVyYXRpb24iKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk1RjUwMDA2NiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImlucHV0TmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCShvYmplY3QgUGFyYW1ldGVyICJvdXRwdXROYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZ09wZXJhdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRCaW5kaW5nT3BlcmF0aW9ucyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NUZBNDAxQzUiCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UG9ydFR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjUyQTkwMjg0IgotCQkgICAgcmVzdWx0ICAgICAJIklQb3J0VHlwZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRQb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTJCRTAxQTgiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAicG9ydFR5cGUiCi0JCQkgICAgdHlwZSAgICAgICAJIklQb3J0VHlwZSIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuQmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUJDRjAzMDIiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklCaW5kaW5nT3BlcmF0aW9uIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFEQzAwMDcyIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRCaW5kaW5nRmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTYwQkMwMDQxIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImJpbmRpbmdGYXVsdCIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmdGYXVsdCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NjBEOTAwOUQiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmdGYXVsdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRCaW5kaW5nRmF1bHRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2MEZDMDA2MSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE9wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTMyRDAwMTciCi0JCSAgICByZXN1bHQgICAgIAkiSU9wZXJhdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjUzM0YwMzdCIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm9wZXJhdGlvbiIKLQkJCSAgICB0eXBlICAgICAgIAkiSU9wZXJhdGlvbiIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTUwOTAwREEiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmdJbnB1dCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRCaW5kaW5nSW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU1MUQwMDdGIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImJpbmRpbmdJbnB1dCIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmdJbnB1dCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU1MzQwMzQ5IgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nT3V0cHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldEJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU1NDcwMkE2IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImJpbmRpbmdPdXRwdXQiCi0JCQkgICAgdHlwZSAgICAgICAJIklCaW5kaW5nT3V0cHV0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBRENCMDIxQyIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUJpbmRpbmdJbnB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBREVCMDEwMCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLkJpbmRpbmdJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QURGRTAwMEQiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklCaW5kaW5nT3V0cHV0IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFFMjEwMTExIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFMkQwMDUwIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJQmluZGluZ0ZhdWx0IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNEYwMEJEIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuQmluZGluZ0ZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBRTVGMDAyQSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiRE9NRWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBRjMyMDNEQiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRWxlbWVudCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAib3JnLnczYy5kb20uRWxlbWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUY1NjAyOTIiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRCMTI0MDJBQiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QjEzNTAzRDEiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklEZWZpbml0aW9uIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEIxRDkwMTQyIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkRlZmluaXRpb24gbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRCaW5kaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4OEYxMDM5RCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJiaW5kaW5nIgotCQkJICAgIHR5cGUgICAgICAgCSJJQmluZGluZyIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZEltcG9ydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5ODk0OTAyNTkiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiaW1wb3J0RGVmIgotCQkJICAgIHR5cGUgICAgICAgCSJJSW1wb3J0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkTWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5ODk2RTAwNUUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibWVzc2FnZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSU1lc3NhZ2UiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGROYW1lc3BhY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTg5ODQwMDRCIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInByZWZpeCIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lc3BhY2VVUkkiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZFBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4OUM1MDA0NSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJwb3J0VHlwZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSVBvcnRUeXBlIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkU2VydmljZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5ODlFNDAxRUUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAic2VydmljZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSVNlcnZpY2UiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVCaW5kaW5nRmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBMTcwMzhDIgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nRmF1bHQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlQmluZGluZ0lucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QTMyMDI4NiIKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZ0lucHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBNDYwMTNCIgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nT3V0cHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBNUMwMEIwIgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUJpbmRpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTg5RkUwMzdDIgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QTc1MDJFNyIKLQkJICAgIHJlc3VsdCAgICAgCSJJRmF1bHQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlSW1wb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QTgzMDE0QyIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW1wb3J0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUlucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QTlEMDMzRSIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW5wdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlTWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEFBRjAyNTQiCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QUMyMDNDNCIKLQkJICAgIHJlc3VsdCAgICAgCSJJT3BlcmF0aW9uIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZU91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEFFODAwRUQiCi0JCSAgICByZXN1bHQgICAgIAkiSU91dHB1dCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVQYXJ0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QUY4MDI2RCIKLQkJICAgIHJlc3VsdCAgICAgCSJJUGFydCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVQb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QjA4MDFEQSIKLQkJICAgIHJlc3VsdCAgICAgCSJJUG9ydCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVQb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEIxNTAzOUIiCi0JCSAgICByZXN1bHQgICAgIAkiSVBvcnRUeXBlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZVNlcnZpY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThCMzIwMTNBIgotCQkgICAgcmVzdWx0ICAgICAJIklTZXJ2aWNlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThCNDIwMDc1IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmciCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0QmluZGluZ3MiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThCOTIwMzQxIgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0SW1wb3J0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEJDRDAwNjAiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRJbXBvcnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QkU3MDE0NCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lc3BhY2VVUkkiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIklMaXN0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDMTcwMTA3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TWVzc2FnZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDM0UwMDFEIgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TmFtZXNwYWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QzYyMDE0QiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJwcmVmaXgiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIlN0cmluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXROYW1lc3BhY2VzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4Qzc0MDExNSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4Q0JFMDA3MSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpKQotCQkgICAgcmVzdWx0ICAgICAJIklQb3J0VHlwZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQb3J0VHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDREEwMUM2IgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UHJlZml4IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4Q0ZEMDAxNyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lc3BhY2VVUkkiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIlN0cmluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRTZXJ2aWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4RDIzMDBBOCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpKQotCQkgICAgcmVzdWx0ICAgICAJIklTZXJ2aWNlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFNlcnZpY2VzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4RDNCMDNDRSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEV4dGVuc2lvblJlZ2lzdHJ5IgotCQkgICAgcXVpZCAgICAgICAJIjNCODlENUI4MDEyQiIKLQkJICAgIHJlc3VsdCAgICAgCSJJRXh0ZW5zaW9uUmVnaXN0cnkiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0RXh0ZW5zaW9uUmVnaXN0cnkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1RDcwM0JCIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImV4dGVuc2lvblJlZ2lzdHJ5IgotCQkJICAgIHR5cGUgICAgICAgCSJJRXh0ZW5zaW9uUmVnaXN0cnkiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXREb2N1bWVudEJhc2VVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1RkUwMjA4IgotCQkgICAgcmVzdWx0ICAgICAJIlN0cmluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXREb2N1bWVudEJhc2VVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ2MTgwMzI4IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImRvY3VtZW50QmFzZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlVHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwNTYwMDgwIgotCQkgICAgcmVzdWx0ICAgICAJIklUeXBlcyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJyZW1vdmVTZXJ2aWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNDQUREMDdFMDA0QyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpKQotCQkgICAgcmVzdWx0ICAgICAJIklTZXJ2aWNlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInJlbW92ZUJpbmRpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwQkEwMzU1IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmciCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAicmVtb3ZlUG9ydFR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwRDgwMjlBIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSVBvcnRUeXBlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInJlbW92ZU1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwRkEwMzA3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0VHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjcwNkYwMzFCIgotCQkgICAgcmVzdWx0ICAgICAJIklUeXBlcyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRUeXBlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NzA5NTAwRUUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAidHlwZXMiCi0JCQkgICAgdHlwZSAgICAgICAJIklUeXBlcyIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuRGVmaW5pdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QjFFNzAyQTEiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklJbXBvcnQiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QjIwMjAxMTkiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuSW1wb3J0IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5JbXBvcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEIyMEMwMkVBIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJTGlzdCIKLQkgICAgcXVpZCAgICAgICAJIjNCODVDMEEyMDNDNSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLnV0aWwuTGlzdCBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZhLnV0aWwuTGlzdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QzBBRjAyOTciCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklNYXAiCi0JICAgIHF1aWQgICAgICAgCSIzQjg5NkIwMzAwRDQiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS51dGlsLk1hcCBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZhLnV0aWwuTWFwIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2QjExMDJCNSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSVVSTCIKLQkgICAgcXVpZCAgICAgICAJIjNCODlENTYzMDI3NCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLm5ldC5VUkwgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS5uZXQuVVJMIgotCQkgICAgcXVpZCAgICAgICAJIjNCODlENTZFMDNFMiIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUV4dGVuc2lvblJlZ2lzdHJ5IgotCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1OTMwMkE1IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBub24tTU9GIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeSBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1OUYwMkU4IgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJUeXBlcyIKLQkgICAgcXVpZCAgICAgICAJIjNCOEJFOUE2MDNBOCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgdHlwZXMgZWxlbWVudC4gVGhlIHR5cGVzIGVsZW1lbnQgZW5jbG9zZXMgZGF0YSB0eXBlIGRlZmluaXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGZvciB0aGUgZXhjaGFuZ2VkIG1lc3NhZ2VzLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCOEJFQjAxMDMxMSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0NBRENEM0IwMzgwIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVR5cGVzIgotCQkgICAgcXVpZHUgICAgICAJIjNDQURDQkIyMDA1MCIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRTY2hlbWFzIgotCQkgICAgcXVpZCAgICAgICAJIjNDQURDRjM4MDNFNiIKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRTY2hlbWFzIgotCQkgICAgcXVpZCAgICAgICAJIjNDQURDRjdFMDMwMSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lc3BhY2VVUkkiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIklMaXN0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpKQotCShvYmplY3QgQ2xhc3MgIklJdGVyYXRvciIKLQkgICAgcXVpZCAgICAgICAJIjNDNDY4N0RBMDE2NyIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLnV0aWwuSXRlcmF0b3IgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS51dGlsLkl0ZXJhdG9yIgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4ODA4MDBCOSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiV1NETEV4Y2VwdGlvbiIKLQkgICAgcXVpZCAgICAgICAJIjNDNDY4OTY1MDMxMyIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5FeGNlcHRpb24gY2xhc3MuIgotCSAgICBzdGVyZW90eXBlIAkiZGF0YXR5cGUiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuV1NETEV4Y2VwdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2ODk3NDAzMTUiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklUeXBlcyIKLQkgICAgcXVpZCAgICAgICAJIjNDQURDQkIyMDA1MCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5UeXBlcyBub24tTU9GIGludGVyZmFjZSIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5UeXBlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0FEQ0JGMTAxNzMiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNDQjI0QUMwMDJBRSIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNDQjI0QUVDMDFDQiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpKSkKLQkob2JqZWN0IENsYXNzICJYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNDQzM2MEQ3MDM5QyIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNDQzM2MjdGMDBCNyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpKSkKLQkob2JqZWN0IENsYXNzICJET01Eb2N1bWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNDRDE1MDJDMDIzQiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRG9jdW1lbnQgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiZGF0YXR5cGUiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm9yZy53M2MuZG9tLkRvY3VtZW50IgotCQkgICAgcXVpZCAgICAgICAJIjNDRDE1MDYwMDE4MiIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiTWVzc2FnZVJlZmVyZW5jZSIKLQkgICAgcXVpZCAgICAgICAJIjNGNjc3MURCMDJEQyIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNzYyQTZBMDMwOCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNGNjc4MEEwMDFBQiIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciCi0JCSAgICBleHBvcnRDb250cm9sIAkiUHJvdGVjdGVkIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIgotCSAgICBhYnN0cmFjdCAgIAlUUlVFKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDAiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1QzgyNDAxOEMiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgInBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVDODI3MDFDMyIKLQkJICAgIGxhYmVsICAgICAgCSJwb3J0VHlwZSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnRUeXBlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDN0YwMDFBNSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiZU9wZXJhdGlvbnMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUM4MjcwMUNEIgotCQkgICAgbGFiZWwgICAgICAJImVPcGVyYXRpb25zIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDODBEMDNDRSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQxIgotCSAgICBxdWlkICAgICAgIAkiM0FENUNFQkUwMEUyIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQyIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVDRUJGMDA1NyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVQYXJ0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1Q0VCRjAwNjEiCi0JCSAgICBsYWJlbCAgICAgIAkiZVBhcnRzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMyIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEMzUyMDEwRiIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZVBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVEMzU0MDE3NiIKLQkJICAgIGxhYmVsICAgICAgCSJlUG9ydFR5cGUiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDM1NDAxODAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ1IgotCSAgICBxdWlkICAgICAgIAkiM0FENUQzRTEwMTc5IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ2IgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVEM0UyMDIyNSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmciCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVCaW5kaW5nT3BlcmF0aW9ucyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDNFMjAyMzkiCi0JCSAgICBsYWJlbCAgICAgIAkiZUJpbmRpbmdPcGVyYXRpb25zIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNyIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVENDI1MDM4QSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZU9wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDQyNjAyRjUiCi0JCSAgICBsYWJlbCAgICAgIAkiZU9wZXJhdGlvbiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok9wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkOCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDQyNjAyRkYiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0NCMDE0NSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ5IgotCSAgICBxdWlkICAgICAgIAkiM0FENUQ5NDAwMzkzIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlUG9ydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQ5NDEwMzFDIgotCQkgICAgbGFiZWwgICAgICAJImVQb3J0cyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5MTcwMjg2IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQxMCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDk0MTAzMUQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpTZXJ2aWNlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDExIgotCSAgICBxdWlkICAgICAgIAkiM0FENUQ5QjgwMTFGIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlQmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDlCOTAyNEQiCi0JCSAgICBsYWJlbCAgICAgIAkiZUJpbmRpbmciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQxMiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDlCOTAyNjEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOTE3MDI4NiIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQxMyIKLQkgICAgcXVpZCAgICAgICAJIjNDODY0REZGMDJFQyIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUltcG9ydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjRERkYwMkVEIgotCQkgICAgbGFiZWwgICAgICAJImVJbXBvcnRzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW1wb3J0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNEY5MDNERSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMTQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjRERkYwMkVFIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQxNSIKLQkgICAgcXVpZCAgICAgICAJIjNCOEJFQTI3MDI5RiIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMTYiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4QkVBMjkwMzU2IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiZVR5cGVzIgotCQkgICAgcXVpZCAgICAgICAJIjNCOEJFQTI5MDM2QSIKLQkJICAgIGxhYmVsICAgICAgCSJlVHlwZXMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpUeXBlcyIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRTlBNjAzQTgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMTciCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RTYwMzAxRTIiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDE4IgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjA0MDBCNyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVNZXNzYWdlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTYwNDAwQzEiCi0JCSAgICBsYWJlbCAgICAgIAkiZU1lc3NhZ2VzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMTkiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3MTAxMDQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDIwIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjcyMDM0QSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVQb3J0VHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUU2NzIwMzU0IgotCQkgICAgbGFiZWwgICAgICAJImVQb3J0VHlwZXMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMjEiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3NzAwOTUiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDIyIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjc4MDM3MSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVCaW5kaW5ncyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3ODAzN0IiCi0JCSAgICBsYWJlbCAgICAgIAkiZUJpbmRpbmdzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZyIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDI4NjAyNjEiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMjMiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3QjAzMTEiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDI0IgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjdEMDA3RiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVTZXJ2aWNlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3RDAwODkiCi0JCSAgICBsYWJlbCAgICAgIAkiZVNlcnZpY2VzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6U2VydmljZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDhGMDAyRjgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMjUiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RkQxMzAwNzkiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUZEMTQwMTlEIgotCQkgICAgbGFiZWwgICAgICAJImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDI2IgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVGRDE0MDE5RSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDI3IgotCSAgICBxdWlkICAgICAgIAkiM0FERjJFNjQwMUY1IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlQmluZGluZ0lucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNBREYyRTY1MDI1MSIKLQkJICAgIGxhYmVsICAgICAgCSJlQmluZGluZ0lucHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0lucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTgyMDJENCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMjgiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJFNjUwMjUyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQyOSIKLQkgICAgcXVpZCAgICAgICAJIjNBREYyRUIzMDE2MyIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJFQjQwMTNDIgotCQkgICAgbGFiZWwgICAgICAJImVCaW5kaW5nT3V0cHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ091dHB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE4RjAyOEMiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDMwIgotCQkgICAgcXVpZCAgICAgICAJIjNBREYyRUI0MDEzRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQzQ0IwMTQ1IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMzEiCi0JICAgIHF1aWQgICAgICAgCSIzQURGMkY5NDAyNEQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMkY5NTAxOTAiCi0JCSAgICBsYWJlbCAgICAgIAkiZUlucHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW5wdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4OUYwMDU5IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQzMiIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMkY5NTAxOUEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMzMiCi0JICAgIHF1aWQgICAgICAgCSIzQURGMkZCODAyRjkiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJGQjkwMjBBIgotCQkgICAgbGFiZWwgICAgICAJImVPdXRwdXQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPdXRwdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4QjYwMjMyIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQzNCIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMkZCOTAyMEIiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMzUiCi0JICAgIHF1aWQgICAgICAgCSIzQURGMzMxNjAxQTQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVGYXVsdHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjMzMTgwMzg3IgotCQkgICAgbGFiZWwgICAgICAJImVGYXVsdHMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDM2IgotCQkgICAgcXVpZCAgICAgICAJIjNBREYzMzE4MDM4OCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok9wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQzNyIKLQkgICAgcXVpZCAgICAgICAJIjNBREYzNDAwMDNFNSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUJpbmRpbmdGYXVsdHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjM0MDEwM0FBIgotCQkgICAgbGFiZWwgICAgICAJImVCaW5kaW5nRmF1bHRzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0ZhdWx0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTlFMDNBNiIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMzgiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjM0MDEwM0FCIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQzOSIKLQkgICAgcXVpZCAgICAgICAJIjNBRTA5MUY0MDJGMyIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNBRTA5MUY4MDFGRSIKLQkJICAgIGxhYmVsICAgICAgCSJlRmF1bHQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNDAiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFMDkxRjgwMUZGIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0ZhdWx0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTlFMDNBNiIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0MSIKLQkgICAgcXVpZCAgICAgICAJIjNBRUEzRDU1MDAyRCIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNDIiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNENTYwMzI4IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiZU5hbWVzcGFjZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNENTYwMzMyIgotCQkgICAgbGFiZWwgICAgICAJImVOYW1lc3BhY2VzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TmFtZXNwYWNlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRUEzQ0QzMDAzMCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0MyIKLQkgICAgcXVpZCAgICAgICAJIjNBRUEzRTNBMDAyRCIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZURlZmluaXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNFM0MwMUU4IgotCQkgICAgbGFiZWwgICAgICAJImVEZWZpbml0aW9uIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNDQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNFM0MwMUYyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW1wb3J0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNEY5MDNERSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0NSIKLQkgICAgcXVpZCAgICAgICAJIjNBRUE0MTJGMDAzNSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZVBhcmFtZXRlck9yZGVyaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUE0MTMxMDI1NSIKLQkJICAgIGxhYmVsICAgICAgCSJlUGFyYW1ldGVyT3JkZXJpbmciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ0NiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVBNDEzMTAyNUYiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDQ3IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFEMjQwMEJEIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlSW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFEMjUwMDgzIgotCQkgICAgbGFiZWwgICAgICAJImVJbnB1dCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3ODlGMDA1OSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ0OCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUQyNTAwODQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nSW5wdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDhBODIwMkQ0IikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDQ5IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFENzkwMEYyIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlT3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBRDdBMDE0RCIKLQkJICAgIGxhYmVsICAgICAgCSJlT3V0cHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3V0cHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3OEI2MDIzMiIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ1MCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUQ3QTAxNEUiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nT3V0cHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QThGMDI4QyIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ1MSIKLQkgICAgcXVpZCAgICAgICAJIjNCOEIxQkU5MDBDNCIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAidHlwZURlZmluaXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4QjFCRTkwMzI3IgotCQkgICAgbGFiZWwgICAgICAJInR5cGVEZWZpbml0aW9uIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6eHNkOjpYU0RUeXBlRGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjY2RUNEMzAyQTkiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNTIiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4QjFCRTkwMzMxIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNTMiCi0JICAgIHF1aWQgICAgICAgCSIzQjhCMUMxMjAzQjIiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVsZW1lbnREZWNsYXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjhCMUMxNDAwMUMiCi0JCSAgICBsYWJlbCAgICAgIAkiZWxlbWVudERlY2xhcmF0aW9uIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6eHNkOjpYU0RFbGVtZW50RGVjbGFyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0I2NkVENTgwMjE0IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDU0IgotCQkgICAgcXVpZCAgICAgICAJIjNCOEIxQzE0MDAyNiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDU1IgotCSAgICBxdWlkICAgICAgIAkiM0I4QjFEQ0MwMkU1IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlU2NoZW1hIgotCQkgICAgcXVpZCAgICAgICAJIjNCOEIxRENFMDI3MCIKLQkJICAgIGxhYmVsICAgICAgCSJlU2NoZW1hIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6eHNkOjpYU0RTY2hlbWEiCi0JCSAgICBxdWlkdSAgICAgIAkiMzc0QjE4MjUwMEJCIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDU2IgotCQkgICAgcXVpZCAgICAgICAJIjNCOEIxRENFMDI3QSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkltcG9ydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNTciCi0JICAgIHF1aWQgICAgICAgCSIzQzQ2ODI5MzAzRTUiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVNZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4Mjk2MDEwRSIKLQkJICAgIGxhYmVsICAgICAgCSJlTWVzc2FnZSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDU4IgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4Mjk2MDExOCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDU5IgotCSAgICBxdWlkICAgICAgIAkiM0NDMzYxNDUwMEYyIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ2MCIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0MzNjE0NjAyM0QiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0MzNjBENzAzOUMiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAic2NoZW1hIgotCQkgICAgcXVpZCAgICAgICAJIjNDQzM2MTQ2MDIzRSIKLQkJICAgIGxhYmVsICAgICAgCSJzY2hlbWEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTRFNjaGVtYSIKLQkJICAgIHF1aWR1ICAgICAgCSIzNzRCMTgyNTAwQkIiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNjEiCi0JICAgIHF1aWQgICAgICAgCSIzRjc0RTc4NDAxQjEiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVNZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNGNzRFNzg2MDAwRiIKLQkJICAgIGxhYmVsICAgICAgCSJlTWVzc2FnZSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDYyIgotCQkgICAgcXVpZCAgICAgICAJIjNGNzRFNzg2MDAyMyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2VSZWZlcmVuY2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcxREIwMkRDIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDYzIgotCSAgICBxdWlkICAgICAgIAkiM0Y3ODk2QTIwMjZFIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ2NCIKLQkJICAgIHF1aWQgICAgICAgCSIzRjc4OTZBNzAxMkIiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0NCMjRBQzAwMkFFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImNoaWxkcmVuIgotCQkgICAgcXVpZCAgICAgICAJIjNGNzg5NkE3MDEyQyIKLQkJICAgIGxhYmVsICAgICAgCSJjaGlsZHJlbiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0IyNEFDMDAyQUUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpKQotICAgIGxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjcgU2VydmljZXMiCi0JICAgIHF1aWQgICAgICAgCSIzOUFEM0VGNjAxMjciCi0JICAgIHRpdGxlICAgICAgCSIyLjcgU2VydmljZXMiCi0JICAgIHpvb20gICAgICAgCTkwCi0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nIiBAMQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTQyNCwgODAwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMQotCQkJbG9jYXRpb24gICAJKDExNzMsIDY2MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1MDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZyIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxCi0JCQlsb2NhdGlvbiAgIAkoMTE3MywgNjEwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1MDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQkM2MDIxOSIKLQkJICAgIHdpZHRoICAgICAgCTUyMAotCQkgICAgaGVpZ2h0ICAgICAJNDA0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklQb3J0IiBAMgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoODE2LCA1MjgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyCi0JCQlsb2NhdGlvbiAgIAkoNjg2LCA0ODEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjYwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSVBvcnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMgotCQkJbG9jYXRpb24gICAJKDY4NiwgNDMxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNjAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQjgwMDMyNiIKLQkJICAgIHdpZHRoICAgICAgCTI3OAotCQkgICAgaGVpZ2h0ICAgICAJMjE4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklTZXJ2aWNlIiBAMwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjQwLCAxNjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzCi0JCQlsb2NhdGlvbiAgIAkoMTI2LCA5MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyMjgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJU2VydmljZSIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzCi0JCQlsb2NhdGlvbiAgIAkoMTI2LCA0MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjI4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUI0OTAyODciCi0JCSAgICB3aWR0aCAgICAgIAkyNDYKLQkJICAgIGhlaWdodCAgICAgCTI2NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpTZXJ2aWNlIiBANAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyNDAsIDUyOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQKLQkJCWxvY2F0aW9uICAgCSg0NCwgNDMzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlNlcnZpY2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIHdpZHRoICAgICAgCTQxMAotCQkgICAgaGVpZ2h0ICAgICAJMjE0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA1Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NTk1NEUwMUI0IgotCQkgICAgY2xpZW50ICAgICAJQDQKLQkJICAgIHN1cHBsaWVyICAgCUAzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI0MCwgNDIxKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI0MCwgMjkyKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIiBANgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDQwLCAxMjY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANgotCQkJbG9jYXRpb24gICAJKDEyNDQsIDExNjkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMzkyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgd2lkdGggICAgICAJNDEwCi0JCSAgICBoZWlnaHQgICAgIAkyMTQKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg1OTU0MTAxMjkiCi0JCSAgICBjbGllbnQgICAgIAlANgotCQkgICAgc3VwcGxpZXIgICAJQDEKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQzMCwgMTE1NykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDMwLCAxMDAyKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0IiBAOAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg4MTYsIDkxMikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDgKLQkJCWxvY2F0aW9uICAgCSg2NzUsIDg0MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyODIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJQb3J0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDkxNzAyODYiCi0JCSAgICB3aWR0aCAgICAgIAkzMDAKLQkJICAgIGhlaWdodCAgICAgCTE2OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAOQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODU5NTQ1MDJDOSIKLQkJICAgIGNsaWVudCAgICAgCUA4Ci0JCSAgICBzdXBwbGllciAgIAlAMgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg4MDksIDgyOCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4MDksIDYzNykpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ5IiBAMTAKLQkJICAgIGxvY2F0aW9uICAgCSgzMjEsIDkxNikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDk0MDAzOTMiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVQb3J0cyIgQDExCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxMAotCQkJICAgIGxvY2F0aW9uICAgCSgtMTQzLCA2NDQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTIKLQkJCQlQYXJlbnRfVmlldyAJQDExCi0JCQkJbG9jYXRpb24gICAJKDM5NywgOTQ1KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE5MgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VQb3J0cyIKLQkJCQlwY3REaXN0ICAgIAkwLjIxODk3OAotCQkJCWhlaWdodCAgICAgCTI5Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5NDEwMzFDIgotCQkJICAgIGNsaWVudCAgICAgCUAxMAotCQkJICAgIHN1cHBsaWVyICAgCUA4Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzIxLCA5MTYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDY2NiwgOTE2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzCi0JCQkJUGFyZW50X1ZpZXcgCUAxMQotCQkJCWxvY2F0aW9uICAgCSg1MzAsIDg4MCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC42MDgwMDAKLQkJCQloZWlnaHQgICAgIAkzNwotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMQotCQkJCWxvY2F0aW9uICAgCSg0MzMsIDk5MCkKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNDYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjMyODQ2NwotCQkJCWhlaWdodCAgICAgCTc0Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTAiIEAxNQotCQkJICAgIFBhcmVudF9WaWV3IAlAMTAKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTE0MywgNjQ0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE2Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNQotCQkJCWxvY2F0aW9uICAgCSgyMTYsIDcwNCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5NDEwMzFEIgotCQkJICAgIGNsaWVudCAgICAgCUAxMAotCQkJICAgIHN1cHBsaWVyICAgCUA0Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDMyMSwgOTE2KQotCQkJCSgyNTcsIDkxNikKLQkJCQkoMjU3LCA2MzUpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDMyMSwgOTE2KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNTcsIDYzNSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNwotCQkJCVBhcmVudF9WaWV3IAlAMTUKLQkJCQlsb2NhdGlvbiAgIAkoMzAxLCA3NjApCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC42MzcwOTcKLQkJCQloZWlnaHQgICAgIAk0NAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMTEiIEAxOAotCQkgICAgbG9jYXRpb24gICAJKDg4NiwgMTI3MCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDlCODAxMUYiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVCaW5kaW5nIiBAMTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE4Ci0JCQkgICAgbG9jYXRpb24gICAJKDM4LCA0MjIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjAKLQkJCQlQYXJlbnRfVmlldyAJQDE5Ci0JCQkJbG9jYXRpb24gICAJKDExMTIsIDEyMzUpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTgwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUJpbmRpbmciCi0JCQkJcGN0RGlzdCAgICAJMC42NDg1NzEKLQkJCQloZWlnaHQgICAgIAkzNgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOUI5MDI0RCIKLQkJCSAgICBjbGllbnQgICAgIAlAMTgKLQkJCSAgICBzdXBwbGllciAgIAlANgotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDg4NiwgMTI3MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTIzNSwgMTI3MCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMQotCQkJCVBhcmVudF9WaWV3IAlAMTkKLQkJCQlsb2NhdGlvbiAgIAkoMTE3MCwgMTMxMykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjgxNDI4NgotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTIiIEAyMgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTgKLQkJCSAgICBsb2NhdGlvbiAgIAkoMzgsIDQyMikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMwotCQkJCVBhcmVudF9WaWV3IAlAMjIKLQkJCQlsb2NhdGlvbiAgIAkoODUyLCAxMTA2KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjY4Nzk0MwotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5QjkwMjYxIgotCQkJICAgIGNsaWVudCAgICAgCUAxOAotCQkJICAgIHN1cHBsaWVyICAgCUA4Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDg4NiwgMTI3MCkKLQkJCQkoODEyLCAxMjcwKQotCQkJCSg4MTIsIDk5NikpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoODg2LCAxMjcwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4MTIsIDk5NikpKSkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjUgQmluZGluZ3MiCi0JICAgIHF1aWQgICAgICAgCSIzOUFENTEyNzAyNTIiCi0JICAgIHRpdGxlICAgICAgCSIyLjUgQmluZGluZ3MiCi0JICAgIHpvb20gICAgICAgCTg1Ci0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nIiBAMjQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMwNCwgMjQwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjQKLQkJCWxvY2F0aW9uICAgCSg3MywgMTE0KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI0Ci0JCQlsb2NhdGlvbiAgIAkoNzMsIDY0KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQkM2MDIxOSIKLQkJICAgIHdpZHRoICAgICAgCTQ4MAotCQkgICAgaGVpZ2h0ICAgICAJMzc2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nT3BlcmF0aW9uIiBAMjUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDk3NiwgMzUyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjUKLQkJCWxvY2F0aW9uICAgCSg3ODAsIDEzMCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzOTIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZ09wZXJhdGlvbiIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNQotCQkJbG9jYXRpb24gICAJKDc4MCwgODApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFEQzAwMDcyIgotCQkgICAgd2lkdGggICAgICAJNDEwCi0JCSAgICBoZWlnaHQgICAgIAk1NjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdJbnB1dCIgQDI2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxOTIsIDEzNjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNgotCQkJbG9jYXRpb24gICAJKDYyLCAxMzM0KQotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI2MAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nSW5wdXQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjYKLQkJCWxvY2F0aW9uICAgCSg2MiwgMTI4NCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjYwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QURFQjAxMDAiCi0JCSAgICB3aWR0aCAgICAgIAkyNzgKLQkJICAgIGhlaWdodCAgICAgCTE3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ091dHB1dCIgQDI3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMDgsIDE2NjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNwotCQkJbG9jYXRpb24gICAJKDYxLCAxNjM4KQotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nT3V0cHV0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI3Ci0JCQlsb2NhdGlvbiAgIAkoNjEsIDE1ODgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFMjEwMTExIgotCQkgICAgd2lkdGggICAgICAJMzEyCi0JCSAgICBoZWlnaHQgICAgIAkxNzYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdGYXVsdCIgQDI4Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMDgsIDE5ODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyOAotCQkJbG9jYXRpb24gICAJKDcyLCAxOTU4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI3MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nRmF1bHQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjgKLQkJCWxvY2F0aW9uICAgCSg3MiwgMTkwOCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjcyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUU0RjAwQkQiCi0JCSAgICB3aWR0aCAgICAgIAkyOTAKLQkJICAgIGhlaWdodCAgICAgCTE3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIgQDI5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE5MDQsIDYyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI5Ci0JCQlsb2NhdGlvbiAgIAkoMTY5NywgNTIyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQxNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnRUeXBlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICB3aWR0aCAgICAgIAk0MzIKLQkJICAgIGhlaWdodCAgICAgCTIyOAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJbnB1dCIgQDMwCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE5MDQsIDEzNjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMAotCQkJbG9jYXRpb24gICAJKDE3NTYsIDEyODMpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3ODlGMDA1OSIKLQkJICAgIHdpZHRoICAgICAgCTMxNAotCQkgICAgaGVpZ2h0ICAgICAJMTc4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok91dHB1dCIgQDMxCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE5MDQsIDE2NjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMQotCQkJbG9jYXRpb24gICAJKDE3NTYsIDE1ODcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCNjAyMzIiCi0JCSAgICB3aWR0aCAgICAgIAkzMTQKLQkJICAgIGhlaWdodCAgICAgCTE3OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIiBAMzIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzA0LCA2ODgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMgotCQkJbG9jYXRpb24gICAJKDk3LCA1ODYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDE0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgd2lkdGggICAgICAJNDMyCi0JCSAgICBoZWlnaHQgICAgIAkyMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDMzCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NTk1NDEwMTI5IgotCQkgICAgY2xpZW50ICAgICAJQDMyCi0JCSAgICBzdXBwbGllciAgIAlAMjQKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjc5LCA1NzQpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjc5LCA0MjgpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMyIgQDM0Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTEwNCwgNzQyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMzUyMDEwRiIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZVBvcnRUeXBlIiBAMzUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDM0Ci0JCQkgICAgbG9jYXRpb24gICAJKDY0MCwgNTk4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM2Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNQotCQkJCWxvY2F0aW9uICAgCSgxNTY1LCA3ODEpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjE2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVBvcnRUeXBlIgotCQkJCXBjdERpc3QgICAgCTAuNzg5MjkyCi0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDM1NDAxNzYiCi0JCQkgICAgY2xpZW50ICAgICAJQDM0Ci0JCQkgICAgc3VwcGxpZXIgICAJQDI5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTEwNCwgNzQyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNjg4LCA3NDIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzcKLQkJCQlQYXJlbnRfVmlldyAJQDM1Ci0JCQkJbG9jYXRpb24gICAJKDE2MTMsIDcxNikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjg3MjE5MwotCQkJCWhlaWdodCAgICAgCTI3Ci0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNCIgQDM4Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNAotCQkJICAgIGxvY2F0aW9uICAgCSg2NDAsIDU5OCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzOQotCQkJCVBhcmVudF9WaWV3IAlAMzgKLQkJCQlsb2NhdGlvbiAgIAkoODA2LCA2OTcpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTEwOAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuNTA5NDQ5Ci0JCQkJaGVpZ2h0ICAgICAJNDYKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDM1NDAxODAiCi0JCQkgICAgY2xpZW50ICAgICAJQDM0Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMyCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTEwNCwgNzQyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg1MjAsIDc0MikpKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iIEA0MAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODg4LCAxMDI0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDAKLQkJCWxvY2F0aW9uICAgCSgxNjcyLCA4OTgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDMyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3BlcmF0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JCSAgICB3aWR0aCAgICAgIAk0NTAKLQkJICAgIGhlaWdodCAgICAgCTI3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nSW5wdXQiIEA0MQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg2MjQsIDE0MDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MQotCQkJbG9jYXRpb24gICAJKDQ3NiwgMTI4MykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyOTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTgyMDJENCIKLQkJICAgIHdpZHRoICAgICAgCTMxNAotCQkgICAgaGVpZ2h0ICAgICAJMjc0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNDciIEA0MgotCQkgICAgbG9jYXRpb24gICAJKDEyNjQsIDEzNTkpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFEMjQwMEJEIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlSW5wdXQiIEA0MwotCQkJICAgIFBhcmVudF9WaWV3IAlANDIKLQkJCSAgICBsb2NhdGlvbiAgIAkoOTYsIDI4NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA0NAotCQkJCVBhcmVudF9WaWV3IAlANDMKLQkJCQlsb2NhdGlvbiAgIAkoMTYzNywgMTMxNikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxMzIKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlSW5wdXQiCi0JCQkJcGN0RGlzdCAgICAJMC43NzUxNDgKLQkJCQloZWlnaHQgICAgIAk0NAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCODRBRDI1MDA4MyIKLQkJCSAgICBjbGllbnQgICAgIAlANDIKLQkJCSAgICBzdXBwbGllciAgIAlAMzAKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjY0LCAxMzU5KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzQ3LCAxMzU5KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDQ1Ci0JCQkJUGFyZW50X1ZpZXcgCUA0MwotCQkJCWxvY2F0aW9uICAgCSgxNjk0LCAxMzk4KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODg5NTQ2Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ0OCIgQDQ2Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA0MgotCQkJICAgIGxvY2F0aW9uICAgCSg5NiwgMjg3KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCODRBRDI1MDA4NCIKLQkJCSAgICBjbGllbnQgICAgIAlANDIKLQkJCSAgICBzdXBwbGllciAgIAlANDEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjY0LCAxMzU5KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg3ODEsIDEzNTkpKSkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ091dHB1dCIgQDQ3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDk2MCwgMTY2NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQ3Ci0JCQlsb2NhdGlvbiAgIAkoODEyLCAxNTM5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmdPdXRwdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QThGMDI4QyIKLQkJICAgIHdpZHRoICAgICAgCTMxNAotCQkgICAgaGVpZ2h0ICAgICAJMjc0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNDkiIEA0OAotCQkgICAgbG9jYXRpb24gICAJKDE0MzIsIDE2NTQpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFENzkwMEYyIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlT3V0cHV0IiBANDkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDQ4Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xMjAsIDM3NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA1MAotCQkJCVBhcmVudF9WaWV3IAlANDkKLQkJCQlsb2NhdGlvbiAgIAkoMTY0NSwgMTYxMikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlT3V0cHV0IgotCQkJCXBjdERpc3QgICAgCTAuNjc0NzcyCi0JCQkJaGVpZ2h0ICAgICAJNDMKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUQ3QTAxNEQiCi0JCQkgICAgY2xpZW50ICAgICAJQDQ4Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMxCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQzMiwgMTY1NCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc0NywgMTY1NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA1MQotCQkJCVBhcmVudF9WaWV3IAlANDkKLQkJCQlsb2NhdGlvbiAgIAkoMTY4MSwgMTY5NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc5MDI3NAotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNTAiIEA1MgotCQkJICAgIFBhcmVudF9WaWV3IAlANDgKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTEyMCwgMzc0KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCODRBRDdBMDE0RSIKLQkJCSAgICBjbGllbnQgICAgIAlANDgKLQkJCSAgICBzdXBwbGllciAgIAlANDcKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNDMyLCAxNjU0KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTE3LCAxNjU0KSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPcGVyYXRpb24iIEA1MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg5OTIsIDEwMDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA1MwotCQkJbG9jYXRpb24gICAJKDgxOSwgOTMxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM0NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmdPcGVyYXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0NCMDE0NSIKLQkJICAgIHdpZHRoICAgICAgCTM2NAotCQkgICAgaGVpZ2h0ICAgICAJMTc4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA1NAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREU0MDFEQyIKLQkJICAgIGNsaWVudCAgICAgCUA1MwotCQkgICAgc3VwcGxpZXIgICAJQDI1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDk2NiwgOTE5KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDk2NiwgNjM2KSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDUiIEA1NQotCQkgICAgbG9jYXRpb24gICAJKDQzMywgMTAyMikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNFMTAxNzkiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDYiIEA1NgotCQkJICAgIFBhcmVudF9WaWV3IAlANTUKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTEzNDMsIDQ5NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA1NwotCQkJCVBhcmVudF9WaWV3IAlANTYKLQkJCQlsb2NhdGlvbiAgIAkoMjM1LCA4NzcpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0UyMDIyNSIKLQkJCSAgICBjbGllbnQgICAgIAlANTUKLQkJCSAgICBzdXBwbGllciAgIAlAMzIKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNDMzLCAxMDIyKQotCQkJCSgyNzYsIDEwMjIpCi0JCQkJKDI3NiwgODAyKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg0MzMsIDEwMjIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI3NiwgODAyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDU4Ci0JCQkJUGFyZW50X1ZpZXcgCUA1NgotCQkJCWxvY2F0aW9uICAgCSgzMzAsIDg0MSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUJpbmRpbmdPcGVyYXRpb25zIiBANTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDU1Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xMzQzLCA0OTQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANjAKLQkJCQlQYXJlbnRfVmlldyAJQDU5Ci0JCQkJbG9jYXRpb24gICAJKDUxMywgOTc3KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTM4NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VCaW5kaW5nT3BlcmF0aW9ucyIKLQkJCQlwY3REaXN0ICAgIAkwLjIxMTY5OQotCQkJCWhlaWdodCAgICAgCTQ2Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQzRTIwMjM5IgotCQkJICAgIGNsaWVudCAgICAgCUA1NQotCQkJICAgIHN1cHBsaWVyICAgCUA1MwotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQzMywgMTAyMikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoODEwLCAxMDIyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDYxCi0JCQkJUGFyZW50X1ZpZXcgCUA1OQotCQkJCWxvY2F0aW9uICAgCSg3NjYsIDk4MCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjg4NDk1NgotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANjIKLQkJCQlQYXJlbnRfVmlldyAJQDU5Ci0JCQkJbG9jYXRpb24gICAJKDcwNiwgMTA2NykKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjcyNzU2NAotCQkJCWhlaWdodCAgICAgCTQ1Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ3IiBANjMKLQkJICAgIGxvY2F0aW9uICAgCSgxNDE4LCAxMDQwKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVENDI1MDM4QSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZU9wZXJhdGlvbiIgQDY0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA2MwotCQkJICAgIGxvY2F0aW9uICAgCSgtMzU4LCA0NjQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANjUKLQkJCQlQYXJlbnRfVmlldyAJQDY0Ci0JCQkJbG9jYXRpb24gICAJKDE1MjAsIDEwNzkpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjI4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZU9wZXJhdGlvbiIKLQkJCQlwY3REaXN0ICAgIAkwLjQyMDYwMQotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ0MjYwMkY1IgotCQkJICAgIGNsaWVudCAgICAgCUA2MwotCQkJICAgIHN1cHBsaWVyICAgCUA0MAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE0MTgsIDEwNDApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2NjMsIDEwNDApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANjYKLQkJCQlQYXJlbnRfVmlldyAJQDY0Ci0JCQkJbG9jYXRpb24gICAJKDE1ODksIDEwMDUpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC42OTY3MjEKLQkJCQloZWlnaHQgICAgIAkzNgotCQkJCW9yaWVudGF0aW9uIAkwKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDgiIEA2NwotCQkJICAgIFBhcmVudF9WaWV3IAlANjMKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTM1OCwgNDY0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDY4Ci0JCQkJUGFyZW50X1ZpZXcgCUA2NwotCQkJCWxvY2F0aW9uICAgCSgxMjczLCAxMDcwKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxOTIKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjU5NTQyMAotCQkJCWhlaWdodCAgICAgCTMwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ0MjYwMkZGIgotCQkJICAgIGNsaWVudCAgICAgCUA2MwotCQkJICAgIHN1cHBsaWVyICAgCUA1MwotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE0MTgsIDEwNDApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDExNzQsIDEwNDApKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQyNyIgQDY5Ci0JCSAgICBsb2NhdGlvbiAgIAkoNzg3LCAxMTkwKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBREYyRTY0MDFGNSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZUJpbmRpbmdJbnB1dCIgQDcwCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA2OQotCQkJICAgIGxvY2F0aW9uICAgCSgtMzgxLCA0NTQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANzEKLQkJCQlQYXJlbnRfVmlldyAJQDcwCi0JCQkJbG9jYXRpb24gICAJKDY2OSwgMTE1MikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyNzYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlQmluZGluZ0lucHV0IgotCQkJCXBjdERpc3QgICAgCTAuNTExOTA1Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkU2NTAyNTEiCi0JCQkgICAgY2xpZW50ICAgICAJQDY5Ci0JCQkgICAgc3VwcGxpZXIgICAJQDQxCi0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDc4NywgMTE5MCkKLQkJCQkoNjM2LCAxMTkwKQotCQkJCSg2MzYsIDEyNzEpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDc4NywgMTE5MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNjM2LCAxMjcxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDcyCi0JCQkJUGFyZW50X1ZpZXcgCUA3MAotCQkJCWxvY2F0aW9uICAgCSg2ODUsIDEyMjIpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC40NDA0NzYKLQkJCQloZWlnaHQgICAgIAkzMgotCQkJCW9yaWVudGF0aW9uIAkwKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDI4IiBANzMKLQkJCSAgICBQYXJlbnRfVmlldyAJQDY5Ci0JCQkgICAgbG9jYXRpb24gICAJKC0zODEsIDQ1NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA3NAotCQkJCVBhcmVudF9WaWV3IAlANzMKLQkJCQlsb2NhdGlvbiAgIAkoODg1LCAxMTQ0KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkU2NTAyNTIiCi0JCQkgICAgY2xpZW50ICAgICAJQDY5Ci0JCQkgICAgc3VwcGxpZXIgICAJQDUzCi0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDc4NywgMTE5MCkKLQkJCQkoOTI2LCAxMTkwKQotCQkJCSg5MjYsIDEwOTcpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDc4NywgMTE5MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoOTI2LCAxMDk3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDc1Ci0JCQkJUGFyZW50X1ZpZXcgCUA3MwotCQkJCWxvY2F0aW9uICAgCSg4NzEsIDExMzYpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44Mzc3NTgKLQkJCQloZWlnaHQgICAgIAk1NgotCQkJCW9yaWVudGF0aW9uIAkwKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjkiIEA3NgotCQkgICAgbG9jYXRpb24gICAJKDEwMjQsIDEzMTIpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FERjJFQjMwMTYzIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlQmluZGluZ091dHB1dCIgQDc3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA3NgotCQkJICAgIGxvY2F0aW9uICAgCSgtMTUwLCA1NzgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANzgKLQkJCQlQYXJlbnRfVmlldyAJQDc3Ci0JCQkJbG9jYXRpb24gICAJKDEwMTIsIDE0MjkpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMzA2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUJpbmRpbmdPdXRwdXQiCi0JCQkJcGN0RGlzdCAgICAJMC41NDUwODIKLQkJCQloZWlnaHQgICAgIAkxMwotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBREYyRUI0MDEzQyIKLQkJCSAgICBjbGllbnQgICAgIAlANzYKLQkJCSAgICBzdXBwbGllciAgIAlANDcKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMDI0LCAxMzEyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDI0LCAxNTI3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDc5Ci0JCQkJUGFyZW50X1ZpZXcgCUA3NwotCQkJCWxvY2F0aW9uICAgCSg5NjcsIDE0NzkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC43NzQ1OTAKLQkJCQloZWlnaHQgICAgIAk1OAotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDMwIiBAODAKLQkJCSAgICBQYXJlbnRfVmlldyAJQDc2Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xNTAsIDU3OCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA4MQotCQkJCVBhcmVudF9WaWV3IAlAODAKLQkJCQlsb2NhdGlvbiAgIAkoOTgzLCAxMTQwKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkVCNDAxM0QiCi0JCQkgICAgY2xpZW50ICAgICAJQDc2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDUzCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTAyNCwgMTMxMikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTAyNCwgMTA5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA4MgotCQkJCVBhcmVudF9WaWV3IAlAODAKLQkJCQlsb2NhdGlvbiAgIAkoMTAzMSwgMTE4NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjU5MDE2NAotCQkJCWhlaWdodCAgICAgCTcKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpGYXVsdCIgQDgzCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE5MjAsIDE5ODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA4MwotCQkJbG9jYXRpb24gICAJKDE3NzIsIDE5MDcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRmF1bHQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3OEJFMDEwOCIKLQkJICAgIHdpZHRoICAgICAgCTMxNAotCQkgICAgaGVpZ2h0ICAgICAJMTc4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdGYXVsdCIgQDg0Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEzNjAsIDE5ODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA4NAotCQkJbG9jYXRpb24gICAJKDEyMTIsIDE4NTkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZ0ZhdWx0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE5RTAzQTYiCi0JCSAgICB3aWR0aCAgICAgIAkzMTQKLQkJICAgIGhlaWdodCAgICAgCTI3NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAODUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUU3MTAzMzMiCi0JCSAgICBjbGllbnQgICAgIAlAODQKLQkJICAgIHN1cHBsaWVyICAgCUAyOAotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjAzLCAyMDA3KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM1MywgMjAwNykpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQzNyIgQDg2Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTM1NiwgMTM1MikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMzQwMDAzRTUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVCaW5kaW5nRmF1bHRzIiBAODcKLQkJCSAgICBQYXJlbnRfVmlldyAJQDg2Ci0JCQkgICAgbG9jYXRpb24gICAJKDE4OCwgNjE2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDg4Ci0JCQkJUGFyZW50X1ZpZXcgCUA4NwotCQkJCWxvY2F0aW9uICAgCSgxMzgyLCAxNzUwKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTMwMAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VCaW5kaW5nRmF1bHRzIgotCQkJCXBjdERpc3QgICAgCTAuODAzMTUwCi0JCQkJaGVpZ2h0ICAgICAJMjYKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMzQwMTAzQUEiCi0JCQkgICAgY2xpZW50ICAgICAJQDg2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDg0Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTM1NiwgMTM1MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM1NiwgMTg0NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA4OQotCQkJCVBhcmVudF9WaWV3IAlAODcKLQkJCQlsb2NhdGlvbiAgIAkoMTQwOSwgMTc5NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjg5OTE5NAotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAOTAKLQkJCQlQYXJlbnRfVmlldyAJQDg3Ci0JCQkJbG9jYXRpb24gICAJKDEyNTYsIDE4MDYpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC45MTkyOTEKLQkJCQloZWlnaHQgICAgIAkxMDEKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzOCIgQDkxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA4NgotCQkJICAgIGxvY2F0aW9uICAgCSgxODgsIDYxNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA5MgotCQkJCVBhcmVudF9WaWV3IAlAOTEKLQkJCQlsb2NhdGlvbiAgIAkoMTA3NiwgMTE5NykKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjM0MDEwM0FCIgotCQkJICAgIGNsaWVudCAgICAgCUA4NgotCQkJICAgIHN1cHBsaWVyICAgCUA1MwotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMzU2LCAxMzUyKQotCQkJCSgxMzU2LCAxMjE3KQotCQkJCSgxMTE3LCAxMjE3KQotCQkJCSgxMTE3LCAxMDk3KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzU2LCAxMzUyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTE3LCAxMDk3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDkzCi0JCQkJUGFyZW50X1ZpZXcgCUA5MQotCQkJCWxvY2F0aW9uICAgCSgxMTUyLCAxMTY0KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjg3MDA4Ci0JCQkJaGVpZ2h0ICAgICAJNTQKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDM5IiBAOTQKLQkJICAgIGxvY2F0aW9uICAgCSgxNjQwLCAxOTcwKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA5MUY0MDJGMyIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZUZhdWx0IiBAOTUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDk0Ci0JCQkgICAgbG9jYXRpb24gICAJKC0zNDQsIDgxOCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA5NgotCQkJCVBhcmVudF9WaWV3IAlAOTUKLQkJCQlsb2NhdGlvbiAgIAkoMTY3NCwgMTkxNSkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRmF1bHQiCi0JCQkJcGN0RGlzdCAgICAJMC4yNzY0MjMKLQkJCQloZWlnaHQgICAgIAk1NgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRTA5MUY4MDFGRSIKLQkJCSAgICBjbGllbnQgICAgIAlAOTQKLQkJCSAgICBzdXBwbGllciAgIAlAODMKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNjQwLCAxOTcwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzYzLCAxOTcwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDk3Ci0JCQkJUGFyZW50X1ZpZXcgCUA5NQotCQkJCWxvY2F0aW9uICAgCSgxNzE4LCAyMDEyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjQyMjc2Ci0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ0MCIgQDk4Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA5NAotCQkJICAgIGxvY2F0aW9uICAgCSgtMzQ0LCA4MTgpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFMDkxRjgwMUZGIgotCQkJICAgIGNsaWVudCAgICAgCUA5NAotCQkJICAgIHN1cHBsaWVyICAgCUA4NAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE2NDAsIDE5NzApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE1MTcsIDE5NzApKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDk5Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFNDMwMkFCIgotCQkgICAgY2xpZW50ICAgICAJQDQ3Ci0JCSAgICBzdXBwbGllciAgIAlAMjcKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoODAzLCAxNjU2KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM2NCwgMTY1NikpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDEwMAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBRTFCMDExMyIKLQkJICAgIGNsaWVudCAgICAgCUA0MQotCQkgICAgc3VwcGxpZXIgICAJQDI2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQ2NywgMTM4NSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzMzEsIDEzODUpKSkpCi0JKG9iamVjdCBDbGFzc0RpYWdyYW0gIjIuNCBQb3J0VHlwZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDFDNDAzNjYiCi0JICAgIHRpdGxlICAgICAgCSIyLjQgUG9ydFR5cGVzIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBub24tTU9GIGphdmEudXRpbC5JdGVyYXRvciBpbnRlcmZhY2UuIgotCSAgICB6b29tICAgICAgIAk4MAotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTAKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUG9ydFR5cGUiIEAxMDEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDQ5NiwgMjA4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTAxCi0JCQlsb2NhdGlvbiAgIAkoMTQ2LCAxNzIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNzAwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSVBvcnRUeXBlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMQotCQkJbG9jYXRpb24gICAJKDE0NiwgMTIyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3MDAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBNUJFMDMzMSIKLQkJICAgIHdpZHRoICAgICAgCTcxOAotCQkgICAgaGVpZ2h0ICAgICAJMTk2Ci0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklPcGVyYXRpb24iIEAxMDIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE1NTIsIDIwOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMgotCQkJbG9jYXRpb24gICAJKDExMTYsIDE3NikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk4NzMKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJT3BlcmF0aW9uIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMgotCQkJbG9jYXRpb24gICAJKDExMTYsIDEyNikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJODczCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTc3NjAwRDEiCi0JCSAgICB3aWR0aCAgICAgIAk4OTEKLQkJICAgIGhlaWdodCAgICAgCTE4OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJSW5wdXQiIEAxMDMKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDM2OCwgMTQ3MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMwotCQkJbG9jYXRpb24gICAJKDU1LCAxNDM3KQotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTYyNgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklJbnB1dCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDMKLQkJCWxvY2F0aW9uICAgCSg1NSwgMTM4NykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjI2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTdFRTAwMTUiCi0JCSAgICB3aWR0aCAgICAgIAk2NDQKLQkJICAgIGhlaWdodCAgICAgCTE5NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJT3V0cHV0IiBAMTA0Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzODQsIDE3OTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDQKLQkJCWxvY2F0aW9uICAgCSg1NiwgMTc1NykKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJT3V0cHV0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNAotCQkJbG9jYXRpb24gICAJKDU2LCAxNzA3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBODI5MDI3RCIKLQkJICAgIHdpZHRoICAgICAgCTY3NAotCQkgICAgaGVpZ2h0ICAgICAJMTk0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklGYXVsdCIgQDEwNQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzY4LCAyMTEyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTA1Ci0JCQlsb2NhdGlvbiAgIAkoNTUsIDIwNzYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjI2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUZhdWx0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNQotCQkJbG9jYXRpb24gICAJKDU1LCAyMDI2KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2MjYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBODYxMDMxRCIKLQkJICAgIHdpZHRoICAgICAgCTY0NAotCQkgICAgaGVpZ2h0ICAgICAJMTk2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnRUeXBlIiBAMTA2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0OTYsIDgwMCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNgotCQkJbG9jYXRpb24gICAJKDE1OCwgNjcyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY3NwotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnRUeXBlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICB3aWR0aCAgICAgIAk2OTUKLQkJICAgIGhlaWdodCAgICAgCTI4MQotCQkgICAgYW5ub3RhdGlvbiAJOCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IiBAMTA3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyNTc2LCA4MDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDcKLQkJCWxvY2F0aW9uICAgCSgyMzI1LCA2OTIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTAyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiUGFydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkgICAgd2lkdGggICAgICAJNTIwCi0JCSAgICBoZWlnaHQgICAgIAkyNDAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RmF1bHQiIEAxMDgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE3MjgsIDIxMTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDgKLQkJCWxvY2F0aW9uICAgCSgxNjQ3LCAyMDYwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkZhdWx0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICBoZWlnaHQgICAgIAkxMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW5wdXQiIEAxMDkKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEwNTYsIDE0NzIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDkKLQkJCWxvY2F0aW9uICAgCSg4NzAsIDE0MjIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMzcyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3ODlGMDA1OSIKLQkJICAgIHdpZHRoICAgICAgCTM5MAotCQkgICAgaGVpZ2h0ICAgICAJMTI1Ci0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok91dHB1dCIgQDExMAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTM2MCwgMTc5MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDExMAotCQkJbG9jYXRpb24gICAJKDEyMzIsIDE3NDIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjU2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCNjAyMzIiCi0JCSAgICB3aWR0aCAgICAgIAkyNzQKLQkJICAgIGhlaWdodCAgICAgCTEyNQotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iIEAxMTEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE1NTIsIDc4NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDExMQotCQkJbG9jYXRpb24gICAJKDEyMTQsIDYyMCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NzcKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJPcGVyYXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDODBEMDNDRSIKLQkJICAgIHdpZHRoICAgICAgCTY5NQotCQkgICAgaGVpZ2h0ICAgICAJMzUyCi0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMCIgQDExMgotCQkgICAgbG9jYXRpb24gICAJKDEwMjQsIDc5NykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgyNDAxOEMiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVPcGVyYXRpb25zIiBAMTEzCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxMTIKLQkJCSAgICBsb2NhdGlvbiAgIAkoNTkyLCAyNjkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTE0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMTMKLQkJCQlsb2NhdGlvbiAgIAkoMTA4OCwgNzQ4KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI0OQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VPcGVyYXRpb25zIgotCQkJCXBjdERpc3QgICAgCTAuMzU5NjQ5Ci0JCQkJaGVpZ2h0ICAgICAJNTAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgyNzAxQ0QiCi0JCQkgICAgY2xpZW50ICAgICAJQDExMgotCQkJICAgIHN1cHBsaWVyICAgCUAxMTEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMDI0LCA3OTcpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyMDUsIDc5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMTUKLQkJCQlQYXJlbnRfVmlldyAJQDExMwotCQkJCWxvY2F0aW9uICAgCSgxMTc2LCA4NjEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC44NDAzOTEKLQkJCQloZWlnaHQgICAgIAk2NAotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDExNgotCQkJCVBhcmVudF9WaWV3IAlAMTEzCi0JCQkJbG9jYXRpb24gICAJKDEwNzQsIDkyMykKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjI3NjI0MwotCQkJCWhlaWdodCAgICAgCTEyNgotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgInBvcnRUeXBlIiBAMTE3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxMTIKLQkJCSAgICBsb2NhdGlvbiAgIAkoNTkyLCAyNjkpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MjcwMUMzIgotCQkJICAgIGNsaWVudCAgICAgCUAxMTIKLQkJCSAgICBzdXBwbGllciAgIAlAMTA2Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTAyNCwgNzk3KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4NDMsIDc5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMTgKLQkJCQlQYXJlbnRfVmlldyAJQDExNwotCQkJCWxvY2F0aW9uICAgCSg4ODgsIDc1NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc1MzQ4OAotCQkJCWhlaWdodCAgICAgCTQxCi0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ0NSIgQDExOQotCQkgICAgbG9jYXRpb24gICAJKDIxMDcsIDc3MykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBNDEyRjAwMzUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVQYXJhbWV0ZXJPcmRlcmluZyIgQDEyMAotCQkJICAgIFBhcmVudF9WaWV3IAlAMTE5Ci0JCQkgICAgbG9jYXRpb24gICAJKDE4MTksIDEwMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjEKLQkJCQlQYXJlbnRfVmlldyAJQDEyMAotCQkJCWxvY2F0aW9uICAgCSgyMTQ1LCA2NDcpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMzk2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVBhcmFtZXRlck9yZGVyaW5nIgotCQkJCXBjdERpc3QgICAgCTAuMTgzMzMzCi0JCQkJaGVpZ2h0ICAgICAJMTI3Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFQTQxMzEwMjU1IgotCQkJICAgIGNsaWVudCAgICAgCUAxMTkKLQkJCSAgICBzdXBwbGllciAgIAlAMTA3Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjEwNywgNzczKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMzE2LCA3NzMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTIyCi0JCQkJUGFyZW50X1ZpZXcgCUAxMjAKLQkJCQlsb2NhdGlvbiAgIAkoMjI3MiwgODIyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuNzk2NjEwCi0JCQkJaGVpZ2h0ICAgICAJNDkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjMKLQkJCQlQYXJlbnRfVmlldyAJQDEyMAotCQkJCWxvY2F0aW9uICAgCSgyMTcxLCA4ODgpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTY0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC4zMDYyMjAKLQkJCQloZWlnaHQgICAgIAkxMTUKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ0NiIgQDEyNAotCQkJICAgIFBhcmVudF9WaWV3IAlAMTE5Ci0JCQkgICAgbG9jYXRpb24gICAJKDE4MTksIDEwMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUVBNDEzMTAyNUYiCi0JCQkgICAgY2xpZW50ICAgICAJQDExOQotCQkJICAgIHN1cHBsaWVyICAgCUAxMTEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMTA3LCA3NzMpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4OTksIDc3MykpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDM1IiBAMTI1Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTcwMiwgMTUwNCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMzMxNjAxQTQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVGYXVsdHMiIEAxMjYKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEyNQotCQkJICAgIGxvY2F0aW9uICAgCSgxNDE0LCA4MzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTI3Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMjYKLQkJCQlsb2NhdGlvbiAgIAkoMTgxNSwgMTk4MikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRmF1bHRzIgotCQkJCXBjdERpc3QgICAgCTAuODc4OTkyCi0JCQkJaGVpZ2h0ICAgICAJMTEzCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjMzMTgwMzg3IgotCQkJICAgIGNsaWVudCAgICAgCUAxMjUKLQkJCSAgICBzdXBwbGllciAgIAlAMTA4Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTcwMiwgMTUwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTcwMiwgMjA0OCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjgKLQkJCQlQYXJlbnRfVmlldyAJQDEyNgotCQkJCWxvY2F0aW9uICAgCSgxNjQ0LCAyMDIwKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuOTQ5NTgwCi0JCQkJaGVpZ2h0ICAgICAJNTkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjkKLQkJCQlQYXJlbnRfVmlldyAJQDEyNgotCQkJCWxvY2F0aW9uICAgCSgxNTkzLCAxOTYzKQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE2NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuODQ1Mzc4Ci0JCQkJaGVpZ2h0ICAgICAJMTEwCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMzYiIEAxMzAKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEyNQotCQkJICAgIGxvY2F0aW9uICAgCSgxNDE0LCA4MzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTMxCi0JCQkJUGFyZW50X1ZpZXcgCUAxMzAKLQkJCQlsb2NhdGlvbiAgIAkoMTY2MSwgMTA2OSkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjMzMTgwMzg4IgotCQkJICAgIGNsaWVudCAgICAgCUAxMjUKLQkJCSAgICBzdXBwbGllciAgIAlAMTExCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTcwMiwgMTUwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTcwMiwgOTYwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzMgotCQkJCVBhcmVudF9WaWV3IAlAMTMwCi0JCQkJbG9jYXRpb24gICAJKDE4MjEsIDEwMzkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NTczNjIKLQkJCQloZWlnaHQgICAgIAkxMTkKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDMxIiBAMTMzCi0JCSAgICBsb2NhdGlvbiAgIAkoMTE3OCwgMTIzNCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkY5NDAyNEQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVJbnB1dCIgQDEzNAotCQkJICAgIFBhcmVudF9WaWV3IAlAMTMzCi0JCQkgICAgbG9jYXRpb24gICAJKDg5MCwgNTYyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzNQotCQkJCVBhcmVudF9WaWV3IAlAMTM0Ci0JCQkJbG9jYXRpb24gICAJKDg3OCwgMTM0MykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxMzIKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlSW5wdXQiCi0JCQkJcGN0RGlzdCAgICAJMC44MTk4MjAKLQkJCQloZWlnaHQgICAgIAkxMDMKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkY5NTAxOTAiCi0JCQkgICAgY2xpZW50ICAgICAJQDEzMwotCQkJICAgIHN1cHBsaWVyICAgCUAxMDkKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTE3OCwgMTIzNCkKLQkJCQkoOTgwLCAxMjM0KQotCQkJCSg5ODAsIDE0MTApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExNzgsIDEyMzQpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDk4MCwgMTQxMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMzYKLQkJCQlQYXJlbnRfVmlldyAJQDEzNAotCQkJCWxvY2F0aW9uICAgCSgxMDQ2LCAxMzY0KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODc3NjYwCi0JCQkJaGVpZ2h0ICAgICAJNjYKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzMiIgQDEzNwotCQkJICAgIFBhcmVudF9WaWV3IAlAMTMzCi0JCQkgICAgbG9jYXRpb24gICAJKDg5MCwgNTYyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzOAotCQkJCVBhcmVudF9WaWV3IAlAMTM3Ci0JCQkJbG9jYXRpb24gICAJKDEyMzYsIDEwMzYpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBREYyRjk1MDE5QSIKLQkJCSAgICBjbGllbnQgICAgIAlAMTMzCi0JCQkgICAgc3VwcGxpZXIgICAJQDExMQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMTc4LCAxMjM0KQotCQkJCSgxMjc3LCAxMjM0KQotCQkJCSgxMjc3LCA5NjApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExNzgsIDEyMzQpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyNzcsIDk2MCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMzkKLQkJCQlQYXJlbnRfVmlldyAJQDEzNwotCQkJCWxvY2F0aW9uICAgCSgxMTk3LCAxMDU4KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzM2NDEzCi0JCQkJaGVpZ2h0ICAgICAJODEKLQkJCQlvcmllbnRhdGlvbiAJMCkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDMzIiBAMTQwCi0JCSAgICBsb2NhdGlvbiAgIAkoMTQ2OCwgMTM0NSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkZCODAyRjkiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVPdXRwdXQiIEAxNDEKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE0MAotCQkJICAgIGxvY2F0aW9uICAgCSgxMTgwLCA2NzMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTQyCi0JCQkJUGFyZW50X1ZpZXcgCUAxNDEKLQkJCQlsb2NhdGlvbiAgIAkoMTM2MiwgMTY2OSkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlT3V0cHV0IgotCQkJCXBjdERpc3QgICAgCTAuODQwOTA5Ci0JCQkJaGVpZ2h0ICAgICAJMTA3Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjJGQjkwMjBBIgotCQkJICAgIGNsaWVudCAgICAgCUAxNDAKLQkJCSAgICBzdXBwbGllciAgIAlAMTEwCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQ2OCwgMTM0NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTQ2OCwgMTczMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNDMKLQkJCQlQYXJlbnRfVmlldyAJQDE0MQotCQkJCWxvY2F0aW9uICAgCSgxNTQ2LCAxNjc2KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODYzNjM2Ci0JCQkJaGVpZ2h0ICAgICAJNzgKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzNCIgQDE0NAotCQkJICAgIFBhcmVudF9WaWV3IAlAMTQwCi0JCQkgICAgbG9jYXRpb24gICAJKDExODAsIDY3MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNDUKLQkJCQlQYXJlbnRfVmlldyAJQDE0NAotCQkJCWxvY2F0aW9uICAgCSgxNDI3LCAxMDM3KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkZCOTAyMEIiCi0JCQkgICAgY2xpZW50ICAgICAJQDE0MAotCQkJICAgIHN1cHBsaWVyICAgCUAxMTEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNDY4LCAxMzQ1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDY4LCA5NjApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTQ2Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNDQKLQkJCQlsb2NhdGlvbiAgIAkoMTUyMywgMTA4MCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjY5MDM0MQotCQkJCWhlaWdodCAgICAgCTU1Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE0NwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkQ4MDE5RiIKLQkJICAgIGNsaWVudCAgICAgCUAxMDYKLQkJICAgIHN1cHBsaWVyICAgCUAxMDEKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE0OAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkUyMDE3MSIKLQkJICAgIGNsaWVudCAgICAgCUAxMTEKLQkJICAgIHN1cHBsaWVyICAgCUAxMDIKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE0OQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkVFMDMxRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMDkKLQkJICAgIHN1cHBsaWVyICAgCUAxMDMKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkY4MDFDRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMTAKLQkJICAgIHN1cHBsaWVyICAgCUAxMDQKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1MQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYyMDAyMDAyRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMDgKLQkJICAgIHN1cHBsaWVyICAgCUAxMDUKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIgQDE1MgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjIyNCwgMTQ1NikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE1MgotCQkJbG9jYXRpb24gICAJKDE5MzcsIDEzMTIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTc1Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgd2lkdGggICAgICAJNTkzCi0JCSAgICBoZWlnaHQgICAgIAkzMTIKLQkJICAgIGFubm90YXRpb24gCTgpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIgQDE1MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTUyMCwgMjU0NCkKLQkJICAgIGZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJaXRhbGljcyAgICAJVFJVRSkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE1MwotCQkJbG9jYXRpb24gICAJKDExOTMsIDI0NjYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjU0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZVJlZmVyZW5jZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcxREIwMkRDIgotCQkgICAgY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCVBhcmVudF9WaWV3IAlAMTUzCi0JCQlsb2NhdGlvbiAgIAkoMTE5MywgMjUyNikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTApCi0JCSAgICB3aWR0aCAgICAgIAk2NzIKLQkJICAgIGhlaWdodCAgICAgCTE4MAotCQkgICAgYW5ub3RhdGlvbiAJOCkKLQkJKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDE1NAotCQkgICAgbG9jYXRpb24gICAJKDE1MjQsIDIyNzUpCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgc3VwcGxpZXIgICAJQDE1MwotCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkoMTUyNCwgMjI3NSkKLQkJCSgxNTI0LCAyNDU0KSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1NQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MjNEMDMxOSIKLQkJICAgIGNsaWVudCAgICAgCUAxMDgKLQkJICAgIHN1cHBsaWVyICAgCUAxNTMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTc3NiwgMjE3NikKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzc2LCAyMjc1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMTU0KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAxNTYKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzIzNTAwREQiCi0JCSAgICBjbGllbnQgICAgIAlAMTEwCi0JCSAgICBzdXBwbGllciAgIAlAMTUzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEzNzEsIDE4NTQpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM3MSwgMjI3NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDE1NCkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMTU3Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcyMjgwMkU3IgotCQkgICAgY2xpZW50ICAgICAJQDEwOQotCQkgICAgc3VwcGxpZXIgICAJQDE1MwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg5ODAsIDE1MzQpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoOTgwLCAyMjc1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMTU0KQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNjEiIEAxNTgKLQkJICAgIGxvY2F0aW9uICAgCSgyMjA2LCAyMjU5KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNzRFNzg0MDFCMSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZU1lc3NhZ2UiIEAxNTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE1OAotCQkJICAgIGxvY2F0aW9uICAgCSg3MzQsIC0yODUpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTYwCi0JCQkJUGFyZW50X1ZpZXcgCUAxNTkKLQkJCQlsb2NhdGlvbiAgIAkoMjA2OCwgMTY3MCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlTWVzc2FnZSIKLQkJCQlwY3REaXN0ICAgIAkwLjkxMjIzMAotCQkJCWhlaWdodCAgICAgCTEzOQotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNGNzRFNzg2MDAwRiIKLQkJCSAgICBjbGllbnQgICAgIAlAMTU4Ci0JCQkgICAgc3VwcGxpZXIgICAJQDE1MgotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIyMDYsIDIyNTkpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDIyMDYsIDE2MTIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTYxCi0JCQkJUGFyZW50X1ZpZXcgCUAxNTkKLQkJCQlsb2NhdGlvbiAgIAkoMjI2MCwgMTY3OCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNjIiIEAxNjIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE1OAotCQkJICAgIGxvY2F0aW9uICAgCSg3MzQsIC0yODUpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0Y3NEU3ODYwMDIzIgotCQkJICAgIGNsaWVudCAgICAgCUAxNTgKLQkJCSAgICBzdXBwbGllciAgIAlAMTUzCi0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDIyMDYsIDIyNTkpCi0JCQkJKDIyMDYsIDI1NTYpCi0JCQkJKDE4NTYsIDI1NTYpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIyMDYsIDIyNTkpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4NTYsIDI1NTYpKSkpKSkKLQkob2JqZWN0IENsYXNzRGlhZ3JhbSAiMi4xIERlZmluaXRpb25zIgotCSAgICBxdWlkICAgICAgIAkiM0FENUU0OEEwMjYyIgotCSAgICB0aXRsZSAgICAgIAkiMi4xIERlZmluaXRpb25zIgotCSAgICB6b29tICAgICAgIAk4MwotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTAKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRGVmaW5pdGlvbiIgQDE2MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNDMyLCAxOTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjMKLQkJCWxvY2F0aW9uICAgCSg4OCwgMTYxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY4OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklEZWZpbml0aW9uIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE2MwotCQkJbG9jYXRpb24gICAJKDg4LCAxMTEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY4OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEIxRDkwMTQyIgotCQkgICAgd2lkdGggICAgICAJNzA2Ci0JCSAgICBoZWlnaHQgICAgIAkxODYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6VHlwZXMiIEAxNjQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4MjQsIDk0NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE2NAotCQkJbG9jYXRpb24gICAJKDE2ODYsIDg5NikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNzYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJUeXBlcyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkU5QTYwM0E4IgotCQkgICAgd2lkdGggICAgICAJMjk0Ci0JCSAgICBoZWlnaHQgICAgIAkxMjAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW1wb3J0IiBAMTY1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMTQ0LCA2MjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjUKLQkJCWxvY2F0aW9uICAgCSgxOTEwLCA1NDUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDY4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW1wb3J0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiCi0JCSAgICB3aWR0aCAgICAgIAk0ODYKLQkJICAgIGhlaWdodCAgICAgCTE4MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIiBAMTY2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMTEyLCAxMTg0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTY2Ci0JCQlsb2NhdGlvbiAgIAkoMTkwMCwgMTEwNSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0MjQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJNZXNzYWdlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JCSAgICB3aWR0aCAgICAgIAk0NDIKLQkJICAgIGhlaWdodCAgICAgCTE4MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIgQDE2NwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTgwOCwgMTQ4OCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE2NwotCQkJbG9jYXRpb24gICAJKDE1OTYsIDE0MDkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDI0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiUG9ydFR5cGUiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDN0YwMDFBNSIKLQkJICAgIHdpZHRoICAgICAgCTQ0MgotCQkgICAgaGVpZ2h0ICAgICAJMTgyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmciIEAxNjgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDIzMzYsIDE3MjgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjgKLQkJCWxvY2F0aW9uICAgCSgyMTI0LCAxNjQ5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQyNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmciKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIKLQkJICAgIHdpZHRoICAgICAgCTQ0MgotCQkgICAgaGVpZ2h0ICAgICAJMTgyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iIEAxNjkKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTMyOCwgMjQwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTY5Ci0JCQlsb2NhdGlvbiAgIAkoMTA3MywgMzkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTEwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRGVmaW5pdGlvbiIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgd2lkdGggICAgICAJNTI4Ci0JCSAgICBoZWlnaHQgICAgIAk0MjYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQxNSIgQDE3MAotCQkgICAgbG9jYXRpb24gICAJKDEzNTgsIDg2MCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyNzAyOUYiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDE2IiBAMTcxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxNzAKLQkJCSAgICBsb2NhdGlvbiAgIAkoNjIsIC0zNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNzIKLQkJCQlQYXJlbnRfVmlldyAJQDE3MQotCQkJCWxvY2F0aW9uICAgCSgxMzE3LCA1MzUpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEJFQTI5MDM1NiIKLQkJCSAgICBjbGllbnQgICAgIAlAMTcwCi0JCQkgICAgc3VwcGxpZXIgICAJQDE2OQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEzNTgsIDg2MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM1OCwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE3MwotCQkJCVBhcmVudF9WaWV3IAlAMTcxCi0JCQkJbG9jYXRpb24gICAJKDE0MDMsIDUxMSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjg1NjY0OQotCQkJCWhlaWdodCAgICAgCTQ1Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZVR5cGVzIiBAMTc0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxNzAKLQkJCSAgICBsb2NhdGlvbiAgIAkoNjIsIC0zNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNzUKLQkJCQlQYXJlbnRfVmlldyAJQDE3NAotCQkJCWxvY2F0aW9uICAgCSgxNTg2LCA5MDkpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVR5cGVzIgotCQkJCXBjdERpc3QgICAgCTAuNzc5MDk3Ci0JCQkJaGVpZ2h0ICAgICAJNDAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyOTAzNkEiCi0JCQkgICAgY2xpZW50ICAgICAJQDE3MAotCQkJICAgIHN1cHBsaWVyICAgCUAxNjQKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTM1OCwgODYwKQotCQkJCSgxMzU4LCA5NDgpCi0JCQkJKDE2NzcsIDk0OCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTM1OCwgODYwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNjc3LCA5NDgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTc2Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNzQKLQkJCQlsb2NhdGlvbiAgIAkoMTYzMiwgOTg3KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODkyNjU1Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDEzIiBAMTc3Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTYxMiwgNTk1KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDODY0REZGMDJFQyIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTQiIEAxNzgKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE3NwotCQkJICAgIGxvY2F0aW9uICAgCSgxMiwgMjI3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE3OQotCQkJCVBhcmVudF9WaWV3IAlAMTc4Ci0JCQkJbG9jYXRpb24gICAJKDE0MjMsIDUxMikKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M4NjRERkYwMkVFIgotCQkJICAgIGNsaWVudCAgICAgCUAxNzcKLQkJCSAgICBzdXBwbGllciAgIAlAMTY5Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDE2MTIsIDU5NSkKLQkJCQkoMTQ2NCwgNTk1KQotCQkJCSgxNDY0LCA0NTMpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE2MTIsIDU5NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTQ2NCwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE4MAotCQkJCVBhcmVudF9WaWV3IAlAMTc4Ci0JCQkJbG9jYXRpb24gICAJKDE1MjQsIDQ5NSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjg1ODY2NwotCQkJCWhlaWdodCAgICAgCTYwCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUltcG9ydHMiIEAxODEKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE3NwotCQkJICAgIGxvY2F0aW9uICAgCSgxMiwgMjI3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE4MgotCQkJCVBhcmVudF9WaWV3IAlAMTgxCi0JCQkJbG9jYXRpb24gICAJKDE2OTIsIDU1NykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlSW1wb3J0cyIKLQkJCQlwY3REaXN0ICAgIAkwLjI4MDMzNQotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M4NjRERkYwMkVEIgotCQkJICAgIGNsaWVudCAgICAgCUAxNzcKLQkJCSAgICBzdXBwbGllciAgIAlAMTY1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTYxMiwgNTk1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxOTAxLCA1OTUpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTgzCi0JCQkJUGFyZW50X1ZpZXcgCUAxODEKLQkJCQlsb2NhdGlvbiAgIAkoMTg1NCwgNjUyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuODQxMDA0Ci0JCQkJaGVpZ2h0ICAgICAJNTcKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODQKLQkJCQlQYXJlbnRfVmlldyAJQDE4MQotCQkJCWxvY2F0aW9uICAgCSgxNjc2LCA2NDYpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC4yMjU5NDEKLQkJCQloZWlnaHQgICAgIAk1MQotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMTciIEAxODUKLQkJICAgIGxvY2F0aW9uICAgCSgxMjc5LCAxMTM2KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjAzMDFFMiIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTgiIEAxODYKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE4NQotCQkJICAgIGxvY2F0aW9uICAgCSgyNzEsIDI3MikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODcKLQkJCQlQYXJlbnRfVmlldyAJQDE4NgotCQkJCWxvY2F0aW9uICAgCSgxMjM4LCA1OTEpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjA0MDBCNyIKLQkJCSAgICBjbGllbnQgICAgIAlAMTg1Ci0JCQkgICAgc3VwcGxpZXIgICAJQDE2OQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyNzksIDExMzYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyNzksIDQ1MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODgKLQkJCQlQYXJlbnRfVmlldyAJQDE4NgotCQkJCWxvY2F0aW9uICAgCSgxMzIwLCA1ODcpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44MDQ5NzQKLQkJCQloZWlnaHQgICAgIAk0MQotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImVNZXNzYWdlcyIgQDE4OQotCQkJICAgIFBhcmVudF9WaWV3IAlAMTg1Ci0JCQkgICAgbG9jYXRpb24gICAJKDI3MSwgMjcyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5MAotCQkJCVBhcmVudF9WaWV3IAlAMTg5Ci0JCQkJbG9jYXRpb24gICAJKDE2NDcsIDExNzEpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjQwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZU1lc3NhZ2VzIgotCQkJCXBjdERpc3QgICAgCTAuNjQzMTM3Ci0JCQkJaGVpZ2h0ICAgICAJMzgKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTYwNDAwQzEiCi0JCQkgICAgY2xpZW50ICAgICAJQDE4NQotCQkJICAgIHN1cHBsaWVyICAgCUAxNjYKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTI3OSwgMTEzNikKLQkJCQkoMTI3OSwgMTIwOCkKLQkJCQkoMTg5MSwgMTIwOCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTI3OSwgMTEzNikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTg5MSwgMTIwOCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTEKLQkJCQlQYXJlbnRfVmlldyAJQDE4OQotCQkJCWxvY2F0aW9uICAgCSgxODIxLCAxMTcxKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuODk5MzQ2Ci0JCQkJaGVpZ2h0ICAgICAJMzgKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTIKLQkJCQlQYXJlbnRfVmlldyAJQDE4OQotCQkJCWxvY2F0aW9uICAgCSgxNzk3LCAxMjQ0KQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuODY0NDA3Ci0JCQkJaGVpZ2h0ICAgICAJMzYKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDE5IiBAMTkzCi0JCSAgICBsb2NhdGlvbiAgIAkoMTIxMiwgMTE1OSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTY3MTAxMDQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDIwIiBAMTk0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxOTMKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTMyNCwgMjE1KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5NQotCQkJCVBhcmVudF9WaWV3IAlAMTk0Ci0JCQkJbG9jYXRpb24gICAJKDExNzEsIDU5NCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUU2NzIwMzRBIgotCQkJICAgIGNsaWVudCAgICAgCUAxOTMKLQkJCSAgICBzdXBwbGllciAgIAlAMTY5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIxMiwgMTE1OSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTIxMiwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5NgotCQkJCVBhcmVudF9WaWV3IAlAMTk0Ci0JCQkJbG9jYXRpb24gICAJKDEyNTEsIDYyNCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc1Nzk2MgotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZVBvcnRUeXBlcyIgQDE5NwotCQkJICAgIFBhcmVudF9WaWV3IAlAMTkzCi0JCQkgICAgbG9jYXRpb24gICAJKC0zMjQsIDIxNSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTgKLQkJCQlQYXJlbnRfVmlldyAJQDE5NwotCQkJCWxvY2F0aW9uICAgCSgxMzkxLCAxNDUxKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI0MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VQb3J0VHlwZXMiCi0JCQkJcGN0RGlzdCAgICAJMC43MjM2OTgKLQkJCQloZWlnaHQgICAgIAk0MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjcyMDM1NCIKLQkJCSAgICBjbGllbnQgICAgIAlAMTkzCi0JCQkgICAgc3VwcGxpZXIgICAJQDE2NwotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMjEyLCAxMTU5KQotCQkJCSgxMjEyLCAxNDkwKQotCQkJCSgxNTg3LCAxNDkwKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjEyLCAxMTU5KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNTg3LCAxNDkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5OQotCQkJCVBhcmVudF9WaWV3IAlAMTk3Ci0JCQkJbG9jYXRpb24gICAJKDE1MzMsIDE0NTEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC45MjU2MTEKLQkJCQloZWlnaHQgICAgIAk0MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwMAotCQkJCVBhcmVudF9WaWV3IAlAMTk3Ci0JCQkJbG9jYXRpb24gICAJKDE1MTIsIDE1NDApCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC44OTU4NTUKLQkJCQloZWlnaHQgICAgIAk1MAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjEiIEAyMDEKLQkJICAgIGxvY2F0aW9uICAgCSgxMTE0LCAxNTg1KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjc3MDA5NSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMjIiIEAyMDIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIwMQotCQkJICAgIGxvY2F0aW9uICAgCSgtNDA2LCAyNDEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjAzCi0JCQkJUGFyZW50X1ZpZXcgCUAyMDIKLQkJCQlsb2NhdGlvbiAgIAkoMTA3MywgNjgwKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTY3ODAzNzEiCi0JCQkgICAgY2xpZW50ICAgICAJQDIwMQotCQkJICAgIHN1cHBsaWVyICAgCUAxNjkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMTE0LCAxNTg1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTE0LCA0NTMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjA0Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMDIKLQkJCQlsb2NhdGlvbiAgIAkoMTE1NSwgNzUyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzM2NzA0Ci0JCQkJaGVpZ2h0ICAgICAJNDEKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlQmluZGluZ3MiIEAyMDUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIwMQotCQkJICAgIGxvY2F0aW9uICAgCSgtNDA2LCAyNDEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjA2Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMDUKLQkJCQlsb2NhdGlvbiAgIAkoMTg1MSwgMTY3NCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlQmluZGluZ3MiCi0JCQkJcGN0RGlzdCAgICAJMC43NjYzNDcKLQkJCQloZWlnaHQgICAgIAk0MwotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjc4MDM3QiIKLQkJCSAgICBjbGllbnQgICAgIAlAMjAxCi0JCQkgICAgc3VwcGxpZXIgICAJQDE2OAotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMTE0LCAxNTg1KQotCQkJCSgxMTE0LCAxNzE2KQotCQkJCSgyMTE1LCAxNzE2KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMTE0LCAxNTg1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMTE1LCAxNzE2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwNwotCQkJCVBhcmVudF9WaWV3IAlAMjA1Ci0JCQkJbG9jYXRpb24gICAJKDIwNTMsIDE2NzcpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC45NDUwNzQKLQkJCQloZWlnaHQgICAgIAk0MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwOAotCQkJCVBhcmVudF9WaWV3IAlAMjA1Ci0JCQkJbG9jYXRpb24gICAJKDIwMTQsIDE3NTQpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC45MTEwNzIKLQkJCQloZWlnaHQgICAgIAkzOAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlNlcnZpY2UiIEAyMDkKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4NDAsIDIwNDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMDkKLQkJCWxvY2F0aW9uICAgCSgxNjI4LCAxOTY5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQyNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlNlcnZpY2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIHdpZHRoICAgICAgCTQ0MgotCQkgICAgaGVpZ2h0ICAgICAJMTgyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjMiIEAyMTAKLQkJICAgIGxvY2F0aW9uICAgCSgxMDY2LCAxNTMyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjdCMDMxMSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMjQiIEAyMTEKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIxMAotCQkJICAgIGxvY2F0aW9uICAgCSgtNTIxLCAtMTEyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIxMgotCQkJCVBhcmVudF9WaWV3IAlAMjExCi0JCQkJbG9jYXRpb24gICAJKDEwMjUsIDY3MCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUU2N0QwMDdGIgotCQkJICAgIGNsaWVudCAgICAgCUAyMTAKLQkJCSAgICBzdXBwbGllciAgIAlAMTY5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA2NiwgMTUzMikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTA2NiwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIxMwotCQkJCVBhcmVudF9WaWV3IAlAMjExCi0JCQkJbG9jYXRpb24gICAJKDExMDksIDc1NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjcxOTY5NwotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZVNlcnZpY2VzIiBAMjE0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAyMTAKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTUyMSwgLTExMikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMTUKLQkJCQlQYXJlbnRfVmlldyAJQDIxNAotCQkJCWxvY2F0aW9uICAgCSgxMzkzLCAyMDI4KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTIwNAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VTZXJ2aWNlcyIKLQkJCQlwY3REaXN0ICAgIAkwLjc5MTgyNAotCQkJCWhlaWdodCAgICAgCTMyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUU2N0QwMDg5IgotCQkJICAgIGNsaWVudCAgICAgCUAyMTAKLQkJCSAgICBzdXBwbGllciAgIAlAMjA5Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDEwNjYsIDE1MzIpCi0JCQkJKDEwNjYsIDIwNTkpCi0JCQkJKDE2MTksIDIwNTkpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEwNjYsIDE1MzIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2MTksIDIwNTkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjE2Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMTQKLQkJCQlsb2NhdGlvbiAgIAkoMTU1NCwgMjAzMSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjk0MDE5NwotCQkJCWhlaWdodCAgICAgCTI5Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjE3Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMTQKLQkJCQlsb2NhdGlvbiAgIAkoMTUzMiwgMjExMykKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjkyMDUxNQotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDIxOAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMUY4MDM4MiIKLQkJICAgIGNsaWVudCAgICAgCUAxNjkKLQkJICAgIHN1cHBsaWVyICAgCUAxNjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA2NCwgMjYzKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDc4NSwgMjYzKSkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjEuMyBFeHRlbnNpYmlsaXR5IgotCSAgICBxdWlkICAgICAgIAkiM0FENjBDNTEwMTkyIgotCSAgICB0aXRsZSAgICAgIAkiMi4xLjMgRXh0ZW5zaWJpbGl0eSIKLQkgICAgem9vbSAgICAgICAJODAKLQkgICAgbWF4X2hlaWdodCAJMjgzNTAKLQkgICAgbWF4X3dpZHRoICAJMjE2MDAKLQkgICAgb3JpZ2luX3ggICAJMAotCSAgICBvcmlnaW5feSAgIAk1NjQKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0IiBAMjE5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMzNjAsIDI1MjgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMTkKLQkJCWxvY2F0aW9uICAgCSgzMjc5LCAyNDc2KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOTE3MDI4NiIKLQkJICAgIGhlaWdodCAgICAgCTEyOAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpTZXJ2aWNlIiBAMjIwCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMxNjgsIDIzNTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMjAKLQkJCWxvY2F0aW9uICAgCSgzMDg3LCAyMjk5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlNlcnZpY2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEAyMjEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDI3ODQsIDIwOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyMQotCQkJbG9jYXRpb24gICAJKDIzOTEsIDE4NCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3ODYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjIxCi0JCQlsb2NhdGlvbiAgIAkoMjM5MSwgMTM0KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3ODYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMTI0MDJBQiIKLQkJICAgIHdpZHRoICAgICAgCTgwNAotCQkgICAgaGVpZ2h0ICAgICAJMTcyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlR5cGVzIiBAMjIyCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDUyOCwgMjQzMikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyMgotCQkJbG9jYXRpb24gICAJKDQ0NywgMjM4MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJUeXBlcyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkU5QTYwM0E4IgotCQkgICAgaGVpZ2h0ICAgICAJMTI4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IiBAMjIzCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEwNzIsIDczNikKLQkJICAgIGZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJaXRhbGljcyAgICAJVFJVRSkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyMwotCQkJbG9jYXRpb24gICAJKDgwMSwgNjI4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU0MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkV4dGVuc2libGVFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyMjMKLQkJCWxvY2F0aW9uICAgCSg4MDEsIDY4OSkKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTMKLQkJCW1heF93aWR0aCAgCTUzNCkKLQkJICAgIHdpZHRoICAgICAgCTU2MAotCQkgICAgaGVpZ2h0ICAgICAJMjQwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRUcmVlVmlldyAiIiBAMjI0Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTAyMiwgMjA1NikKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCSgxMDIyLCAyMDU2KQotCQkJKDEwMjIsIDg1NikpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMjUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUIwMTAzMTEiCi0JCSAgICBjbGllbnQgICAgIAlAMjIyCi0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQ3MiwgMjM2OCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg0NzIsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEAyMjYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjgwMCwgNzM2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjI2Ci0JCQlsb2NhdGlvbiAgIAkoMjUyOCwgNjMxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU0NQotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkV4dGVuc2liaWxpdHlFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyMjYKLQkJCWxvY2F0aW9uICAgCSgyNTI4LCA2OTIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkzCi0JCQltYXhfd2lkdGggIAk0NjUpCi0JCSAgICB3aWR0aCAgICAgIAk1NjMKLQkJICAgIGhlaWdodCAgICAgCTIzNAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDI1IiBAMjI3Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTkzNSwgNzIwKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGRDEzMDA3OSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMjYiIEAyMjgKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIyNwotCQkJICAgIGxvY2F0aW9uICAgCSg3NjcsIDYwOCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMjkKLQkJCQlQYXJlbnRfVmlldyAJQDIyOAotCQkJCWxvY2F0aW9uICAgCSgxNDY5LCA2NzkpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVGRDE0MDE5RSIKLQkJCSAgICBjbGllbnQgICAgIAlAMjI3Ci0JCQkgICAgc3VwcGxpZXIgICAJQDIyMwotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE5MzUsIDcyMCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM1MiwgNzIwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIzMAotCQkJCVBhcmVudF9WaWV3IAlAMjI4Ci0JCQkJbG9jYXRpb24gICAJKDE0NDYsIDY3NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjgzOTY5NQotCQkJCWhlaWdodCAgICAgCTQ1Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIgQDIzMQotCQkJICAgIFBhcmVudF9WaWV3IAlAMjI3Ci0JCQkgICAgbG9jYXRpb24gICAJKDc2NywgNjA4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIzMgotCQkJCVBhcmVudF9WaWV3IAlAMjMxCi0JCQkJbG9jYXRpb24gICAJKDIxNTUsIDU3MCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk0NTAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkJCXBjdERpc3QgICAgCTAuMzc5MDcwCi0JCQkJaGVpZ2h0ICAgICAJMTUxCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUZEMTQwMTlEIgotCQkJICAgIGNsaWVudCAgICAgCUAyMjcKLQkJCSAgICBzdXBwbGllciAgIAlAMjI2Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTkzNSwgNzIwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNTE5LCA3MjApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjMzCi0JCQkJUGFyZW50X1ZpZXcgCUAyMzEKLQkJCQlsb2NhdGlvbiAgIAkoMjM0OCwgNjc1KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuNzA5NDAyCi0JCQkJaGVpZ2h0ICAgICAJNDYKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMzQKLQkJCQlQYXJlbnRfVmlldyAJQDIzMQotCQkJCWxvY2F0aW9uICAgCSgyMzAzLCA4MTIpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTY0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC42MzI0NzkKLQkJCQloZWlnaHQgICAgIAk5MgotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OldTRExFbGVtZW50IiBAMjM1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE2ODAsIDI0MCkKLQkJICAgIGZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJaXRhbGljcyAgICAJVFJVRSkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIzNQotCQkJbG9jYXRpb24gICAJKDEzMDIsIDEzMikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3NTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJXU0RMRWxlbWVudCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM2QTMwMkREIgotCQkgICAgY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCVBhcmVudF9WaWV3IAlAMjM1Ci0JCQlsb2NhdGlvbiAgIAkoMTMwMiwgMTkzKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJMwotCQkJbWF4X3dpZHRoICAJNzU2KQotCQkgICAgd2lkdGggICAgICAJNzc0Ci0JCSAgICBoZWlnaHQgICAgIAkyNDAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEAyMzYKLQkJICAgIGxvY2F0aW9uICAgCSgxNjc0LCA1MTkpCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgc3VwcGxpZXIgICAJQDIzNQotCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkoMTY3NCwgNTE5KQotCQkJKDE2NzQsIDM2MCkpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMzcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QjE0OTAzRDAiCi0JCSAgICBjbGllbnQgICAgIAlAMjI2Ci0JCSAgICBzdXBwbGllciAgIAlAMjIxCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI5MTEsIDYxOSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyOTExLCAyOTQpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMzgKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQkRERjUzNTAyQzMiCi0JCSAgICBjbGllbnQgICAgIAlAMjI2Ci0JCSAgICBzdXBwbGllciAgIAlAMjM1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI2NjMsIDYxOSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNjYzLCA1MTkpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMzYpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IiBAMjM5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMwODgsIDE0NTYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMzkKLQkJCWxvY2F0aW9uICAgCSgyNjI1LCAxMzUxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTkyNwotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NCMjRBQzAwMkFFIgotCQkgICAgd2lkdGggICAgICAJOTQ1Ci0JCSAgICBoZWlnaHQgICAgIAkyMzUKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI0MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDQjI0QUVDMDFDQiIKLQkJICAgIGNsaWVudCAgICAgCUAyMzkKLQkJICAgIHN1cHBsaWVyICAgCUAyMjYKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjY5MiwgMTMzOSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNjkyLCA4NTMpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNjMiIEAyNDEKLQkJICAgIGxvY2F0aW9uICAgCSgzNTM2LCAxNzgyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNzg5NkEyMDI2RSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNjQiIEAyNDIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI0MQotCQkJICAgIGxvY2F0aW9uICAgCSgxNTA0LCAzOTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjQzCi0JCQkJUGFyZW50X1ZpZXcgCUAyNDIKLQkJCQlsb2NhdGlvbiAgIAkoMzY5MSwgMTQyOCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0Y3ODk2QTcwMTJCIgotCQkJICAgIGNsaWVudCAgICAgCUAyNDEKLQkJCSAgICBzdXBwbGllciAgIAlAMjM5Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDM1MzYsIDE3ODIpCi0JCQkJKDM3MjAsIDE3ODIpCi0JCQkJKDM3MjAsIDE0NjkpCi0JCQkJKDM1NjAsIDE0NjkpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDM1MzYsIDE3ODIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM1NjAsIDE0NjkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjQ0Ci0JCQkJUGFyZW50X1ZpZXcgCUAyNDIKLQkJCQlsb2NhdGlvbiAgIAkoMzYyNywgMTUyMykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAiY2hpbGRyZW4iIEAyNDUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI0MQotCQkJICAgIGxvY2F0aW9uICAgCSgxNTA0LCAzOTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjQ2Ci0JCQkJUGFyZW50X1ZpZXcgCUAyNDUKLQkJCQlsb2NhdGlvbiAgIAkoMjk3MCwgMTcwNikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitjaGlsZHJlbiIKLQkJCQlwY3REaXN0ICAgIAkwLjc5ODU2MQotCQkJCWhlaWdodCAgICAgCTExOAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNGNzg5NkE3MDEyQyIKLQkJCSAgICBjbGllbnQgICAgIAlAMjQxCi0JCQkgICAgc3VwcGxpZXIgICAJQDIzOQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgzNTM2LCAxNzgyKQotCQkJCSgzMDg3LCAxNzgyKQotCQkJCSgzMDg3LCAxNTczKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzNTM2LCAxNzgyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzMDg3LCAxNTczKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI0NwotCQkJCVBhcmVudF9WaWV3IAlAMjQ1Ci0JCQkJbG9jYXRpb24gICAJKDMxNDEsIDE2MzkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC45MDAwMDAKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmciIEAyNDgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjAwMCwgMjQxNikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI0OAotCQkJbG9jYXRpb24gICAJKDE5MTgsIDIzNjMpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTY0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgd2lkdGggICAgICAJMTgyCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI0OQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQTBGMDJGMCIKLQkJICAgIGNsaWVudCAgICAgCUAyNDgKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTk5NSwgMjM1MSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxOTk1LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNTAKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkUzQzAzRDQiCi0JCSAgICBjbGllbnQgICAgIAlAMjIzCi0JCSAgICBzdXBwbGllciAgIAlAMjM1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExODUsIDYxNikKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTg1LCA1MTkpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMzYpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UG9ydFR5cGUiIEAyNTEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTA4OCwgMjQzMikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI1MQotCQkJbG9jYXRpb24gICAJKDk5MCwgMjM3OSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxOTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJQb3J0VHlwZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM3RjAwMUE1IgotCQkgICAgd2lkdGggICAgICAJMjE0Ci0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIgQDI1MgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMTEyLCAyNjg4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjUyCi0JCQlsb2NhdGlvbiAgIAkoMTkzOSwgMjYzNSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzNDYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nT3BlcmF0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICB3aWR0aCAgICAgIAkzNjQKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpGYXVsdCIgQDI1MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODcyLCAzMzYwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjUzCi0JCQlsb2NhdGlvbiAgIAkoMTc5MSwgMzMwNykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJGYXVsdCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4QkUwMTA4IgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdGYXVsdCIgQDI1NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzMDA4LCAyODY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjU0Ci0JCQlsb2NhdGlvbiAgIAkoMjg4MCwgMjgxMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nRmF1bHQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTlFMDNBNiIKLQkJICAgIHdpZHRoICAgICAgCTI3NAotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNTUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOTM4NjAyQzkiCi0JCSAgICBjbGllbnQgICAgIAlAMjU0Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDMwMDgsIDI3OTkpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzAwOCwgMjA1NikKLQkJICAgIGRyYXdTdXBwbGllciAJQDIyNCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJbXBvcnQiIEAyNTYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzIwLCAyNDMyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjU2Ci0JCQlsb2NhdGlvbiAgIAkoMjM5LCAyMzc5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkltcG9ydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0RjkwM0RFIgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNTcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RUU1ODAzN0EiCi0JCSAgICBjbGllbnQgICAgIAlAMjU2Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI2NSwgMjM2NykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNjUsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIgQDI1OAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDQsIDIyMjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTgKLQkJCWxvY2F0aW9uICAgCSg0MiwgMjE2MykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyMDQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJEZWZpbml0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICB3aWR0aCAgICAgIAkyMjIKLQkJICAgIGhlaWdodCAgICAgCTE0NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJbnB1dCIgQDI1OQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDU2LCAzMzYwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjU5Ci0JCQlsb2NhdGlvbiAgIAkoMTM3NSwgMzMwNykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJbnB1dCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4OUYwMDU5IgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdJbnB1dCIgQDI2MAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMzM2LCAyODY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjYwCi0JCQlsb2NhdGlvbiAgIAkoMjIwOCwgMjgxMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTgyMDJENCIKLQkJICAgIHdpZHRoICAgICAgCTI3NAotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNjEKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg1QjU5QjAwNzIiCi0JCSAgICBjbGllbnQgICAgIAlAMjYwCi0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIzMzYsIDI3OTkpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjMzNiwgMjA1NikKLQkJICAgIGRyYXdTdXBwbGllciAJQDIyNCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpPdXRwdXQiIEAyNjIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTY2NCwgMzM2MCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI2MgotCQkJbG9jYXRpb24gICAJKDE1ODMsIDMzMDcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTYyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCNjAyMzIiCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ091dHB1dCIgQDI2MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyNjcyLCAyODY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjYzCi0JCQlsb2NhdGlvbiAgIAkoMjUyNywgMjgxMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyOTAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE4RjAyOEMiCi0JCSAgICB3aWR0aCAgICAgIAkzMDgKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjY0Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NUI1QTQwMjdFIgotCQkgICAgY2xpZW50ICAgICAJQDI2MwotCQkgICAgc3VwcGxpZXIgICAJQDIyMwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyNjcyLCAyNzk5KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI2NzIsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIiBAMjY1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEyNjQsIDI2ODgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNjUKLQkJCWxvY2F0aW9uICAgCSgxMTU3LCAyNjM1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIxNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk9wZXJhdGlvbiIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgd2lkdGggICAgICAJMjMyCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI2NgotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTlERTk4MDAzQyIKLQkJICAgIGNsaWVudCAgICAgCUAyNjUKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTI2NCwgMjYyMykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMjY0LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiIEAyNjcKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoOTEyLCAyNjg4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjY3Ci0JCQlsb2NhdGlvbiAgIAkoODMxLCAyNjM1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBhcnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjY4Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZEQjgwM0Q0IgotCQkgICAgY2xpZW50ICAgICAJQDI1OAotCQkgICAgc3VwcGxpZXIgICAJQDIyMwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMDgsIDIxNTEpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjA4LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNjkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg5N0UyMzAyMzciCi0JCSAgICBjbGllbnQgICAgIAlAMjY3Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDkwNSwgMjYyMykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg5MDUsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOUI3MDE1MCIKLQkJICAgIGNsaWVudCAgICAgCUAyNTEKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA3NywgMjM2NykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDc3LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNzEKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ2MDA5MjAyRjciCi0JCSAgICBjbGllbnQgICAgIAlAMjUyCi0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIxMDQsIDI2MjMpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjEwNCwgMjA1NikKLQkJICAgIGRyYXdTdXBwbGllciAJQDIyNCkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjcyCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZBMjAwMjVFIgotCQkgICAgY2xpZW50ICAgICAJQDIyMAotCQkgICAgc3VwcGxpZXIgICAJQDIyMwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzMTUwLCAyMjg3KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDMxNTAsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3MwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDYwMENCMDBBQSIKLQkJICAgIGNsaWVudCAgICAgCUAyMTkKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzM0MiwgMjQ2NCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzMzQyLCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiIEAyNzQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNzY4LCAyNDMyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjc0Ci0JCQlsb2NhdGlvbiAgIAkoNjY5LCAyMzc5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE5OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk1lc3NhZ2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOTU5MDA3OCIKLQkJICAgIHdpZHRoICAgICAgCTIxNgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNzUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDA1NTAxQzQiCi0JCSAgICBjbGllbnQgICAgIAlAMjc0Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDcxNCwgMjM2NykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg3MTQsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIgQDI3NgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNjQ4LCAyODY0KQotCQkgICAgZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQlpdGFsaWNzICAgIAlUUlVFKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjc2Ci0JCQlsb2NhdGlvbiAgIAkoMTQ1NiwgMjc4MSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzODQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJNZXNzYWdlUmVmZXJlbmNlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzFEQjAyREMiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyNzYKLQkJCWxvY2F0aW9uICAgCSgxNDU2LCAyODQyKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJMgotCQkJbWF4X3dpZHRoICAJMzEyKQotCQkgICAgd2lkdGggICAgICAJNDAyCi0JCSAgICBoZWlnaHQgICAgIAkxOTAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3NwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNzYyQTZBMDMwOCIKLQkJICAgIGNsaWVudCAgICAgCUAyNzYKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTYzNiwgMjc2OSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNjM2LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IEluaGVyaXRUcmVlVmlldyAiIiBAMjc4Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTY1OSwgMzA1NSkKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBzdXBwbGllciAgIAlAMjc2Ci0JCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCSgxNjU5LCAzMDU1KQotCQkJKDE2NTksIDI5NTkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjc5Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcyMzUwMEREIgotCQkgICAgY2xpZW50ICAgICAJQDI2MgotCQkgICAgc3VwcGxpZXIgICAJQDI3NgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNjgwLCAzMjk1KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2ODAsIDMwNTUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyNzgpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI4MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MjI4MDJFNyIKLQkJICAgIGNsaWVudCAgICAgCUAyNTkKLQkJICAgIHN1cHBsaWVyICAgCUAyNzYKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQ3MiwgMzI5NSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDcyLCAzMDU1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjc4KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyODEKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzIzRDAzMTkiCi0JCSAgICBjbGllbnQgICAgIAlAMjUzCi0JCSAgICBzdXBwbGllciAgIAlAMjc2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE4OTAsIDMyOTUpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTg5MCwgMzA1NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDI3OCkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmciCi0JICAgIHF1aWQgICAgICAgCSIzQUU4RUQ3MjAxQkQiCi0JICAgIHRpdGxlICAgICAgCSIyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmciCi0JICAgIHpvb20gICAgICAgCTkwCi0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklJbXBvcnQiIEAyODIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTcxMiwgMjI0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjgyCi0JCQlsb2NhdGlvbiAgIAkoMTQyMiwgMTc3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU4MAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklJbXBvcnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjgyCi0JCQlsb2NhdGlvbiAgIAkoMTQyMiwgMTI3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1ODAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMjAyMDExOSIKLQkJICAgIHdpZHRoICAgICAgCTU5OAotCQkgICAgaGVpZ2h0ICAgICAJMjE4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok5hbWVzcGFjZSIgQDI4MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0MzIsIDExMzYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyODMKLQkJCWxvY2F0aW9uICAgCSgyMDIsIDEwNDEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDYxCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTmFtZXNwYWNlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0NEMzAwMzAiCi0JCSAgICB3aWR0aCAgICAgIAk0NzkKLQkJICAgIGhlaWdodCAgICAgCTIxNQotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTRFNjaGVtYSIgQDI4NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNjMyLCAxMjE2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjg0Ci0JCQlsb2NhdGlvbiAgIAkoMTI5NCwgMTE0MikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NzYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJYU0RTY2hlbWEiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjM3NEIxODI1MDBCQiIKLQkJICAgIHdpZHRoICAgICAgCTY5NAotCQkgICAgaGVpZ2h0ICAgICAJMTczCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iIEAyODUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNDAwLCAzODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyODUKLQkJCWxvY2F0aW9uICAgCSgxNjQsIDIzNikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NzIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJEZWZpbml0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICB3aWR0aCAgICAgIAk0OTAKLQkJICAgIGhlaWdodCAgICAgCTMyMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDQxIiBAMjg2Ci0JCSAgICBsb2NhdGlvbiAgIAkoMzA5LCA3ODYpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFQTNENTUwMDJEIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlTmFtZXNwYWNlcyIgQDI4NwotCQkJICAgIFBhcmVudF9WaWV3IAlAMjg2Ci0JCQkgICAgbG9jYXRpb24gICAJKC05MSwgMjU4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI4OAotCQkJCVBhcmVudF9WaWV3IAlAMjg3Ci0JCQkJbG9jYXRpb24gICAJKDQ2MSwgOTU2KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI4OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VOYW1lc3BhY2VzIgotCQkJCXBjdERpc3QgICAgCTAuNjk4ODQyCi0JCQkJaGVpZ2h0ICAgICAJMTUyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFQTNENTYwMzMyIgotCQkJICAgIGNsaWVudCAgICAgCUAyODYKLQkJCSAgICBzdXBwbGllciAgIAlAMjgzCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzA5LCA3ODYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDMwOSwgMTAyOSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyODkKLQkJCQlQYXJlbnRfVmlldyAJQDI4NwotCQkJCWxvY2F0aW9uICAgCSgyNDgsIDk3MykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjc2ODcwNwotCQkJCWhlaWdodCAgICAgCTYyCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjkwCi0JCQkJUGFyZW50X1ZpZXcgCUAyODcKLQkJCQlsb2NhdGlvbiAgIAkoMjI4LCA5MTMpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC41MjUwOTcKLQkJCQloZWlnaHQgICAgIAk4MgotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDQyIiBAMjkxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAyODYKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTkxLCAyNTgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjkyCi0JCQkJUGFyZW50X1ZpZXcgCUAyOTEKLQkJCQlsb2NhdGlvbiAgIAkoMjY4LCA1OTIpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE5MgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0Q1NjAzMjgiCi0JCQkgICAgY2xpZW50ICAgICAJQDI4NgotCQkJICAgIHN1cHBsaWVyICAgCUAyODUKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzMDksIDc4NikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzA5LCA1NDQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjkzCi0JCQkJUGFyZW50X1ZpZXcgCUAyOTEKLQkJCQlsb2NhdGlvbiAgIAkoMjM5LCA1ODMpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NDQ5NjEKLQkJCQloZWlnaHQgICAgIAk3MQotCQkJCW9yaWVudGF0aW9uIAkwKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkltcG9ydCIgQDI5NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDcyLCA3MjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyOTQKLQkJCWxvY2F0aW9uICAgCSgxMjU1LCA1ODApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDM0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW1wb3J0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiCi0JCSAgICB3aWR0aCAgICAgIAk0NTIKLQkJICAgIGhlaWdodCAgICAgCTMwNAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDU1IiBAMjk1Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTQ4NiwgMTAwMSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMURDQzAyRTUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVTY2hlbWEiIEAyOTYKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI5NQotCQkJICAgIGxvY2F0aW9uICAgCSg1MTAsIC0xMDMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjk3Ci0JCQkJUGFyZW50X1ZpZXcgCUAyOTYKLQkJCQlsb2NhdGlvbiAgIAkoMTczNywgMTAxOCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlU2NoZW1hIgotCQkJCXBjdERpc3QgICAgCTAuNTkyNTkzCi0JCQkJaGVpZ2h0ICAgICAJMTA1Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFEQ0UwMjcwIgotCQkJICAgIGNsaWVudCAgICAgCUAyOTUKLQkJCSAgICBzdXBwbGllciAgIAlAMjg0Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDE0ODYsIDEwMDEpCi0JCQkJKDE2MzIsIDEwMDEpCi0JCQkJKDE2MzIsIDExMzApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE0ODYsIDEwMDEpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2MzIsIDExMzApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjk4Ci0JCQkJUGFyZW50X1ZpZXcgCUAyOTYKLQkJCQlsb2NhdGlvbiAgIAkoMTU2MywgMTAxOCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjU5MjU5MwotCQkJCWhlaWdodCAgICAgCTcwCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNTYiIEAyOTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI5NQotCQkJICAgIGxvY2F0aW9uICAgCSg1MTAsIC0xMDMpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFEQ0UwMjdBIgotCQkJICAgIGNsaWVudCAgICAgCUAyOTUKLQkJCSAgICBzdXBwbGllciAgIAlAMjk0Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQ4NiwgODcyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDg2LCA4NzIpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ0MyIgQDMwMAotCQkgICAgbG9jYXRpb24gICAJKDEwODcsIDQwMykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0UzQTAwMkQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDQ0IiBAMzAxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMDAKLQkJCSAgICBsb2NhdGlvbiAgIAkoNjg3LCAtMTI1KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMwMgotCQkJCVBhcmVudF9WaWV3IAlAMzAxCi0JCQkJbG9jYXRpb24gICAJKDE0MDYsIDQ4MCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNDUwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRUEzRTNDMDFGMiIKLQkJCSAgICBjbGllbnQgICAgIAlAMzAwCi0JCQkgICAgc3VwcGxpZXIgICAJQDI5NAotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMDg3LCA0MDMpCi0JCQkJKDEzNjQsIDQwMykKLQkJCQkoMTM2NCwgNTY4KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMDg3LCA0MDMpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEzNjQsIDU2OCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlRGVmaW5pdGlvbiIgQDMwMwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzAwCi0JCQkgICAgbG9jYXRpb24gICAJKDY4NywgLTEyNSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMDQKLQkJCQlQYXJlbnRfVmlldyAJQDMwMwotCQkJCWxvY2F0aW9uICAgCSg4MDUsIDM2MykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRGVmaW5pdGlvbiIKLQkJCQlwY3REaXN0ICAgIAkwLjYzNzUzMgotCQkJCWhlaWdodCAgICAgCTQxCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFQTNFM0MwMUU4IgotCQkJICAgIGNsaWVudCAgICAgCUAzMDAKLQkJCSAgICBzdXBwbGllciAgIAlAMjg1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA4NywgNDAzKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg2NDUsIDQwMykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMDUKLQkJCQlQYXJlbnRfVmlldyAJQDMwMwotCQkJCWxvY2F0aW9uICAgCSg3MjcsIDQ1NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjgxNDkxMAotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTApKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQxMyIgQDMwNgotCQkgICAgbG9jYXRpb24gICAJKDczNywgODI2KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDODY0REZGMDJFQyIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTQiIEAzMDcKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMwNgotCQkJICAgIGxvY2F0aW9uICAgCSgtNjcxLCAxMDYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzA4Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMDcKLQkJCQlsb2NhdGlvbiAgIAkoNTUyLCA2NDcpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTQ1MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQzg2NERGRjAyRUUiCi0JCQkgICAgY2xpZW50ICAgICAJQDMwNgotCQkJICAgIHN1cHBsaWVyICAgCUAyODUKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNzM3LCA4MjYpCi0JCQkJKDUxMCwgODI2KQotCQkJCSg1MTAsIDU0NCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNzM3LCA4MjYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDUxMCwgNTQ0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMwOQotCQkJCVBhcmVudF9WaWV3IAlAMzA3Ci0JCQkJbG9jYXRpb24gICAJKDQ1NywgNTk1KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuOTAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNTQKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlSW1wb3J0cyIgQDMxMAotCQkJICAgIFBhcmVudF9WaWV3IAlAMzA2Ci0JCQkgICAgbG9jYXRpb24gICAJKC02NzEsIDEwNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMTEKLQkJCQlQYXJlbnRfVmlldyAJQDMxMAotCQkJCWxvY2F0aW9uICAgCSgxMTQ0LCA3NzMpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTgwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUltcG9ydHMiCi0JCQkJcGN0RGlzdCAgICAJMC43OTkxODkKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNDODY0REZGMDJFRCIKLQkJCSAgICBjbGllbnQgICAgIAlAMzA2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDI5NAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDczNywgODI2KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMjQ2LCA4MjYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzEyCi0JCQkJUGFyZW50X1ZpZXcgCUAzMTAKLQkJCQlsb2NhdGlvbiAgIAkoMTE4MCwgODc5KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuODcyMjExCi0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMTMKLQkJCQlQYXJlbnRfVmlldyAJQDMxMAotCQkJCWxvY2F0aW9uICAgCSgxMTYyLCA5MzMpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC44Mzc3MjgKLQkJCQloZWlnaHQgICAgIAkxMDcKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzE0Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2RjIwMEQwMzQwIgotCQkgICAgY2xpZW50ICAgICAJQDI5NAotCQkgICAgc3VwcGxpZXIgICAJQDI4MgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNTU1LCA1NjgpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTU1NSwgMzMzKSkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjIgVHlwZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQjg1QUU1OTAzN0UiCi0JICAgIHRpdGxlICAgICAgCSIyLjIgVHlwZXMiCi0JICAgIHpvb20gICAgICAgCTkwCi0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJODEKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTRFR5cGVEZWZpbml0aW9uIiBAMzE1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDExMzYsIDEyMzIpCi0JCSAgICBmb250ICAgICAgIAkob2JqZWN0IEZvbnQKLQkJCWl0YWxpY3MgICAgCVRSVUUpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMTUKLQkJCWxvY2F0aW9uICAgCSg4OTUsIDExNTcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDgyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiWFNEVHlwZURlZmluaXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCNjZFQ0QzMDJBOSIKLQkJICAgIHdpZHRoICAgICAgCTUwMAotCQkgICAgaGVpZ2h0ICAgICAJMTc0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnhzZDo6WFNERWxlbWVudERlY2xhcmF0aW9uIiBAMzE2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDExMzYsIDE2MDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMTYKLQkJCWxvY2F0aW9uICAgCSg5MDYsIDE1MzEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDYwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiWFNERWxlbWVudERlY2xhcmF0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjY2RUQ1ODAyMTQiCi0JCSAgICB3aWR0aCAgICAgIAk0NzgKLQkJICAgIGhlaWdodCAgICAgCTE2MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIiBAMzE3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEyODAsIDE5NjgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMTcKLQkJCWxvY2F0aW9uICAgCSgxMDIyLCAxODI4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTUxNwotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk1lc3NhZ2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOTU5MDA3OCIKLQkJICAgIHdpZHRoICAgICAgCTUzNQotCQkgICAgaGVpZ2h0ICAgICAJMzA1Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiIEAzMTgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzUyLCAxMTg0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzE4Ci0JCQlsb2NhdGlvbiAgIAkoMTI4LCAxMDY3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ0OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBhcnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJICAgIHdpZHRoICAgICAgCTQ2NgotCQkgICAgaGVpZ2h0ICAgICAJMjU4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNTEiIEAzMTkKLQkJICAgIGxvY2F0aW9uICAgCSg3MzUsIDExNzIpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QjFCRTkwMEM0IgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJ0eXBlRGVmaW5pdGlvbiIgQDMyMAotCQkJICAgIFBhcmVudF9WaWV3IAlAMzE5Ci0JCQkgICAgbG9jYXRpb24gICAJKDE0MywgNjc2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMyMQotCQkJCVBhcmVudF9WaWV3IAlAMzIwCi0JCQkJbG9jYXRpb24gICAJKDc3NSwgMTEzMykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyNzYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIit0eXBlRGVmaW5pdGlvbiIKLQkJCQlwY3REaXN0ICAgIAkwLjI2OTAwNgotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFCRTkwMzI3IgotCQkJICAgIGNsaWVudCAgICAgCUAzMTkKLQkJCSAgICBzdXBwbGllciAgIAlAMzE1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNzM1LCAxMTcyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4ODYsIDExNzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzIyCi0JCQkJUGFyZW50X1ZpZXcgCUAzMjAKLQkJCQlsb2NhdGlvbiAgIAkoODM5LCAxMjA3KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjg4NzA1Ci0JCQkJaGVpZ2h0ICAgICAJMzUKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ1MiIgQDMyMwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzE5Ci0JCQkgICAgbG9jYXRpb24gICAJKDE0MywgNjc2KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEIxQkU5MDMzMSIKLQkJCSAgICBjbGllbnQgICAgIAlAMzE5Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMxOAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDczNSwgMTE3MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNTg1LCAxMTcyKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNTMiIEAzMjQKLQkJICAgIGxvY2F0aW9uICAgCSg1MjcsIDE1OTIpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QjFDMTIwM0IyIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlbGVtZW50RGVjbGFyYXRpb24iIEAzMjUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMyNAotCQkJICAgIGxvY2F0aW9uICAgCSgtNjUsIDEwOTYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzI2Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMjUKLQkJCQlsb2NhdGlvbiAgIAkoNjY2LCAxNTU0KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTM3MgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VsZW1lbnREZWNsYXJhdGlvbiIKLQkJCQlwY3REaXN0ICAgIAkwLjM3NTM5NAotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFDMTQwMDFDIgotCQkJICAgIGNsaWVudCAgICAgCUAzMjQKLQkJCSAgICBzdXBwbGllciAgIAlAMzE2Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNTI3LCAxNTkyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4OTcsIDE1OTIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzI3Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMjUKLQkJCQlsb2NhdGlvbiAgIAkoODA3LCAxNjQ1KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzU1ODc3Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ1NCIgQDMyOAotCQkJICAgIFBhcmVudF9WaWV3IAlAMzI0Ci0JCQkgICAgbG9jYXRpb24gICAJKC02NSwgMTA5NikKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMUMxNDAwMjYiCi0JCQkgICAgY2xpZW50ICAgICAJQDMyNAotCQkJICAgIHN1cHBsaWVyICAgCUAzMTgKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNTI3LCAxNTkyKQotCQkJCSg0MzcsIDE1OTIpCi0JCQkJKDQzNywgMTMxMykpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNTI3LCAxNTkyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg0MzcsIDEzMTMpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ1NyIgQDMyOQotCQkgICAgbG9jYXRpb24gICAJKDMyMiwgMTkxMSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQzQ2ODI5MzAzRTUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVNZXNzYWdlIiBAMzMwCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMjkKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTE0LCAxMTkxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMzMQotCQkJCVBhcmVudF9WaWV3IAlAMzMwCi0JCQkJbG9jYXRpb24gICAJKDgzOCwgMTg3MikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlTWVzc2FnZSIKLQkJCQlwY3REaXN0ICAgIAkwLjc0ODU2MAotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M0NjgyOTYwMTBFIgotCQkJICAgIGNsaWVudCAgICAgCUAzMjkKLQkJCSAgICBzdXBwbGllciAgIAlAMzE3Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzIyLCAxOTExKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDEzLCAxOTExKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMzMgotCQkJCVBhcmVudF9WaWV3IAlAMzMwCi0JCQkJbG9jYXRpb24gICAJKDk0MywgMTk2NSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNTgiIEAzMzMKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMyOQotCQkJICAgIGxvY2F0aW9uICAgCSgtMTQsIDExOTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M0NjgyOTYwMTE4IgotCQkJICAgIGNsaWVudCAgICAgCUAzMjkKLQkJCSAgICBzdXBwbGllciAgIAlAMzE4Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDMyMiwgMTkxMSkKLQkJCQkoMjI5LCAxOTExKQotCQkJCSgyMjksIDEzMTMpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDMyMiwgMTkxMSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjI5LCAxMzEzKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlR5cGVzIiBAMzM0Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDgwMCwgNjA4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzM0Ci0JCQlsb2NhdGlvbiAgIAkoNjE1LCA1MTIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMzcxCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiVHlwZXMiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCOEJFOUE2MDNBOCIKLQkJICAgIHdpZHRoICAgICAgCTM4OQotCQkgICAgaGVpZ2h0ICAgICAJMjE2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iIEAzMzUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTc2LCAxNjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMzUKLQkJCWxvY2F0aW9uICAgCSg3NCwgMTA3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIwNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkRlZmluaXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkJICAgIHdpZHRoICAgICAgCTIyMgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMTUiIEAzMzYKLQkJICAgIGxvY2F0aW9uICAgCSgyMzQsIDYwNCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyNzAyOUYiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVUeXBlcyIgQDMzNwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzM2Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xNTAsIDM5NikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMzgKLQkJCQlQYXJlbnRfVmlldyAJQDMzNwotCQkJCWxvY2F0aW9uICAgCSg0ODAsIDY0MCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDcKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlVHlwZXMiCi0JCQkJcGN0RGlzdCAgICAJMC42NjEwMTcKLQkJCQloZWlnaHQgICAgIAkzNgotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEJFQTI5MDM2QSIKLQkJCSAgICBjbGllbnQgICAgIAlAMzM2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMzNAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIzNCwgNjA0KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg2MDYsIDYwNCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMzkKLQkJCQlQYXJlbnRfVmlldyAJQDMzNwotCQkJCWxvY2F0aW9uICAgCSg1MjYsIDU2OSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc4Mzg4MwotCQkJCWhlaWdodCAgICAgCTM2Ci0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTYiIEAzNDAKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMzNgotCQkJICAgIGxvY2F0aW9uICAgCSgtMTUwLCAzOTYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzQxCi0JCQkJUGFyZW50X1ZpZXcgCUAzNDAKLQkJCQlsb2NhdGlvbiAgIAkoMTMzLCAzMTMpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEJFQTI5MDM1NiIKLQkJCSAgICBjbGllbnQgICAgIAlAMzM2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMzNQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgyMzQsIDYwNCkKLQkJCQkoMTc0LCA2MDQpCi0JCQkJKDE3NCwgMjI1KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMzQsIDYwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc0LCAyMjUpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzQyCi0JCQkJUGFyZW50X1ZpZXcgCUAzNDAKLQkJCQlsb2NhdGlvbiAgIAkoMjI4LCAyNzEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44OTc3MjkKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklUeXBlcyIgQDM0MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg2NDAsIDIyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM0MwotCQkJbG9jYXRpb24gICAJKDUyNSwgMjAzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIzMAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklUeXBlcyIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNDMKLQkJCWxvY2F0aW9uICAgCSg1MjUsIDE1MykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjMwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0FEQ0JCMjAwNTAiCi0JCSAgICB3aWR0aCAgICAgIAkyNDgKLQkJICAgIGhlaWdodCAgICAgCTE2NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCIgQDM0NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNzI4LCA4MDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNDQKLQkJCWxvY2F0aW9uICAgCSgxMzU5LCA3NTMpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNzM5Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNDQzM2MEQ3MDM5QyIKLQkJICAgIHdpZHRoICAgICAgCTc1NwotCQkgICAgaGVpZ2h0ICAgICAJMTE4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnhzZDo6WFNEU2NoZW1hIiBAMzQ1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4NTYsIDEyMTYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNDUKLQkJCWxvY2F0aW9uICAgCSgxNTI5LCAxMTAzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY1NQotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlhTRFNjaGVtYSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiMzc0QjE4MjUwMEJCIgotCQkgICAgd2lkdGggICAgICAJNjczCi0JCSAgICBoZWlnaHQgICAgIAkyNTAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ1OSIgQDM0NgotCQkgICAgbG9jYXRpb24gICAJKDE4MjYsIDk3NSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0MzNjE0NTAwRjIiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDYwIiBAMzQ3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNDYKLQkJCSAgICBsb2NhdGlvbiAgIAkoMzA2LCA0NDcpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0NDMzYxNDYwMjNEIgotCQkJICAgIGNsaWVudCAgICAgCUAzNDYKLQkJCSAgICBzdXBwbGllciAgIAlAMzQ0Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTgyNiwgOTc1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxODI2LCA4NTkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzQ4Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNDcKLQkJCQlsb2NhdGlvbiAgIAkoMTc3NCwgOTAwKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjU2NDg5Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJzY2hlbWEiIEAzNDkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDM0NgotCQkJICAgIGxvY2F0aW9uICAgCSgzMDYsIDQ0NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNTAKLQkJCQlQYXJlbnRfVmlldyAJQDM0OQotCQkJCWxvY2F0aW9uICAgCSgyMDA2LCAxMDMzKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE2OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK3NjaGVtYSIKLQkJCQlwY3REaXN0ICAgIAkwLjUwNzU3NgotCQkJCWhlaWdodCAgICAgCTE4MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNDQzM2MTQ2MDIzRSIKLQkJCSAgICBjbGllbnQgICAgIAlAMzQ2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDM0NQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE4MjYsIDk3NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTgyNiwgMTA5MSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNTEKLQkJCQlQYXJlbnRfVmlldyAJQDM0OQotCQkJCWxvY2F0aW9uICAgCSgxNzg4LCAxMDUwKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjUxNTE1Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzUyCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NBRENEM0IwMzgwIgotCQkgICAgY2xpZW50ICAgICAJQDMzNAotCQkgICAgc3VwcGxpZXIgICAJQDM0MwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg3MDUsIDUwMCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg3MDUsIDMwNykpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiIEAzNTMKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTA1NiwgMjI0KQotCQkgICAgZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQlpdGFsaWNzICAgIAlUUlVFKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzUzCi0JCQlsb2NhdGlvbiAgIAkoODE1LCAxMzApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDgyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRXh0ZW5zaWJsZUVsZW1lbnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIKLQkJICAgIHdpZHRoICAgICAgCTUwMAotCQkgICAgaGVpZ2h0ICAgICAJMjEyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNTQKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUIwMTAzMTEiCi0JCSAgICBjbGllbnQgICAgIAlAMzM0Ci0JCSAgICBzdXBwbGllciAgIAlAMzUzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDg1NCwgNTAwKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDg1NCwgMzMwKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIgQDM1NQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODI0LCA0NjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNTUKLQkJCWxvY2F0aW9uICAgCSgxNDkwLCAzNjgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjY5Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIKLQkJICAgIHdpZHRoICAgICAgCTY4NwotCQkgICAgaGVpZ2h0ICAgICAJMjE2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjUiIEAzNTYKLQkJICAgIGxvY2F0aW9uICAgCSgxMjA2LCA0OTMpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZEMTMwMDc5IgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQyNiIgQDM1NwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzU2Ci0JCQkgICAgbG9jYXRpb24gICAJKC01ODYsIDIzNykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNTgKLQkJCQlQYXJlbnRfVmlldyAJQDM1NwotCQkJCWxvY2F0aW9uICAgCSgxMTM2LCAzODYpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTQ1MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkQxNDAxOUUiCi0JCQkgICAgY2xpZW50ICAgICAJQDM1NgotCQkJICAgIHN1cHBsaWVyICAgCUAzNTMKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTIwNiwgNDkzKQotCQkJCSgxMDk0LCA0OTMpCi0JCQkJKDEwOTQsIDMzMCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIwNiwgNDkzKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDk0LCAzMzApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzU5Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNTcKLQkJCQlsb2NhdGlvbiAgIAkoMTA0MiwgMzc3KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODI4MzI2Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIiBAMzYwCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNTYKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTU4NiwgMjM3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM2MQotCQkJCVBhcmVudF9WaWV3IAlAMzYwCi0JCQkJbG9jYXRpb24gICAJKDExOTYsIDQ1NCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk0NDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkJCXBjdERpc3QgICAgCS0wLjAzOTcxMQotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUZEMTQwMTlEIgotCQkJICAgIGNsaWVudCAgICAgCUAzNTYKLQkJCSAgICBzdXBwbGllciAgIAlAMzU1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIwNiwgNDkzKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDgxLCA0OTMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzYyCi0JCQkJUGFyZW50X1ZpZXcgCUAzNjAKLQkJCQlsb2NhdGlvbiAgIAkoMTQxNSwgNTQ2KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuNzY0OTU3Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNjMKLQkJCQlQYXJlbnRfVmlldyAJQDM2MAotCQkJCWxvY2F0aW9uICAgCSgxMzk2LCAzOTIpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC42OTQ5MTUKLQkJCQloZWlnaHQgICAgIAkxMDIKLQkJCQlvcmllbnRhdGlvbiAJMCkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzY0Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NDMzYyN0YwMEI3IgotCQkgICAgY2xpZW50ICAgICAJQDM0NAotCQkgICAgc3VwcGxpZXIgICAJQDM1NQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxODEyLCA3NDEpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTgxMiwgNTcyKSkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjMgTWVzc2FnZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQkNFODUzRDAyQzgiCi0JICAgIHRpdGxlICAgICAgCSIyLjMgTWVzc2FnZXMiCi0JICAgIHpvb20gICAgICAgCTg1Ci0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklNZXNzYWdlIiBAMzY1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0NDgsIDIyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM2NQotCQkJbG9jYXRpb24gICAJKDI2NywgMTIyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklNZXNzYWdlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM2NQotCQkJbG9jYXRpb24gICAJKDI2NywgNzIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE4QUYwMDRGIgotCQkgICAgd2lkdGggICAgICAJMzgwCi0JCSAgICBoZWlnaHQgICAgIAkzMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVBhcnQiIEAzNjYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEzMjgsIDIyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM2NgotCQkJbG9jYXRpb24gICAJKDEwMjksIDEyNCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1OTkKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJUGFydCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNjYKLQkJCWxvY2F0aW9uICAgCSgxMDI5LCA3NCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTk5Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTkzRjAxQkUiCi0JCSAgICB3aWR0aCAgICAgIAk2MTcKLQkJICAgIGhlaWdodCAgICAgCTMyNAotCQkgICAgYW5ub3RhdGlvbiAJOCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IiBAMzY3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEzMTIsIDgxNikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM2NwotCQkJbG9jYXRpb24gICAJKDEwNzUsIDY5MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NzQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJQYXJ0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCSAgICB3aWR0aCAgICAgIAk0OTIKLQkJICAgIGhlaWdodCAgICAgCTI3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzY4Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE5NkQwMkYxIgotCQkgICAgY2xpZW50ICAgICAJQDM2NwotCQkgICAgc3VwcGxpZXIgICAJQDM2NgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzA0LCA2NzgpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTMwNCwgMzg2KSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIiBAMzY5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDQ0OCwgNjU2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzY5Ci0JCQlsb2NhdGlvbiAgIAkoMjQxLCA1MDcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDE0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgd2lkdGggICAgICAJNDMyCi0JCSAgICBoZWlnaHQgICAgIAkzMjIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM3MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBOEQxMDJCQSIKLQkJICAgIGNsaWVudCAgICAgCUAzNjkKLQkJICAgIHN1cHBsaWVyICAgCUAzNjUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNDQ1LCA0OTUpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNDQ1LCAzODgpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMSIgQDM3MQotCQkgICAgbG9jYXRpb24gICAJKDY4OCwgOTUyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRUJFMDBFMiIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZVBhcnRzIiBAMzcyCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNzEKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTc2LCAzMjgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzczCi0JCQkJUGFyZW50X1ZpZXcgCUAzNzIKLQkJCQlsb2NhdGlvbiAgIAkoOTUyLCA4OTcpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVBhcnRzIgotCQkJCXBjdERpc3QgICAgCTAuNjk3NDUyCi0JCQkJaGVpZ2h0ICAgICAJNTYKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0VCRjAwNjEiCi0JCQkgICAgY2xpZW50ICAgICAJQDM3MQotCQkJICAgIHN1cHBsaWVyICAgCUAzNjcKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg2ODgsIDk1MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTA2NiwgOTUyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM3NAotCQkJCVBhcmVudF9WaWV3IAlAMzcyCi0JCQkJbG9jYXRpb24gICAJKDk4NywgMTAwNSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjc4OTgwOQotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzc1Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNzIKLQkJCQlsb2NhdGlvbiAgIAkoOTY3LCAxMDYxKQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuNzQyMDM4Ci0JCQkJaGVpZ2h0ICAgICAJMTA5Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMiIgQDM3NgotCQkJICAgIFBhcmVudF9WaWV3IAlAMzcxCi0JCQkgICAgbG9jYXRpb24gICAJKDE3NiwgMzI4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM3NwotCQkJCVBhcmVudF9WaWV3IAlAMzc2Ci0JCQkJbG9jYXRpb24gICAJKDQwNCwgODkzKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0VCRjAwNTciCi0JCQkgICAgY2xpZW50ICAgICAJQDM3MQotCQkJICAgIHN1cHBsaWVyICAgCUAzNjkKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNjg4LCA5NTIpCi0JCQkJKDQ0NSwgOTUyKQotCQkJCSg0NDUsIDgxNykpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNjg4LCA5NTIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDQ0NSwgODE3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM3OAotCQkJCVBhcmVudF9WaWV3IAlAMzc2Ci0JCQkJbG9jYXRpb24gICAJKDM5MywgOTEyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzQ3NjA0Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMCkpKSkpKSkpCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4Mzc0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFRvIGNvZGUgZGV2ZWxvcGVyOgotIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQotIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCi0jICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCi0jICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXBsdWdpbk5hbWUgPSBXU0RMIE1vZGVsCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwotCi14cEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzID0gV1NETCBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmFjdG9yaWVzCi14cFBvcnRBbmRCaW5kaW5nQ29udGVudEdlbmVyYXRvcnMgPSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycwoteHBXU0RMQ29udGVudFR5cGUgPSBXU0RMIENvbnRlbnQgVHlwZQotCi1fRVJST1JfSU5WQUxJRF9XU0RMID0gVGhlIGlucHV0IHNvdXJjZSBpcyBub3QgYSB2YWxpZCBXU0RMIGRvY3VtZW50LgotX1VJX0lPRXJyb3JfbWVzc2FnZSA9IElPOiB7MH0KLV9VSV9QYXJzZXJFcnJvcl9tZXNzYWdlID0gRE9NOiB7MH0KLQotX1VJX1Jlc291cmNlTG9hZF9wcm9ncmVzcyA9IExvYWRpbmcgV1NETCBkb2N1bWVudHMgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczN2Y3YzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbi1wb2ludAotCQlpZD0iZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiCi0JCW5hbWU9IiV4cEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIiAKLQkJc2NoZW1hPSJzY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMuZXhzZCIvPgotCTxleHRlbnNpb24tcG9pbnQKLQkJaWQ9ImNvbnRlbnRHZW5lcmF0b3JzIgotCQluYW1lPSIleHBQb3J0QW5kQmluZGluZ0NvbnRlbnRHZW5lcmF0b3JzIiAKLQkJc2NoZW1hPSJzY2hlbWEvY29udGVudEdlbmVyYXRvcnMuZXhzZCIvPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KLQkJPHBhY2thZ2UKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlIgotICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvV1NETC5nZW5tb2RlbCIKLSAgICAgICAgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9XU0RMIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPCEtLSAKLQkJVGhpcyBleHRlbnNpb24gaXMgZHVwbGljYXRlZCBoZXJlIHRvIHByb3ZpZGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0JCVRoZSBuYW1lc3BhY2UgVVJJIHdhcyByZW5hbWVkIGZyb20gaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9XU0RMIHRvCi0JCWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1dTREwuIAotCSAtLT4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSIKLSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1dTREwuZ2VubW9kZWwiCi0gICAgICAgIHVyaT0iaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9XU0RMIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmV4dGVuc2lvbl9wYXJzZXIiPgotCQk8cGFyc2VyCi0JCQl0eXBlPSJ3c2RsIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGwiPgotCQk8L3BhcnNlcj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL0hUVFAiCi0JICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvSFRUUC5nZW5tb2RlbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UiPgotCQk8L3BhY2thZ2U+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIAotCQlUaGlzIGV4dGVuc2lvbiBpcyBkdXBsaWNhdGVkIGhlcmUgdG8gcHJvdmlkZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQkJVGhlIG5hbWVzcGFjZSBVUkkgd2FzIHJlbmFtZWQgZnJvbSBodHRwOi8vd3d3LmlibS5jb20vd3NkbC8yMDAzL0hUVFAgdG8KLQkJaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvSFRUUC4gCi0JIC0tPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KLQkJPHBhY2thZ2UKLQkJCXVyaT0iaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9IVFRQIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL0hUVFAuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiCi0JICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvTUlNRS5nZW5tb2RlbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UiPgotCQk8L3BhY2thZ2U+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIAotCQlUaGlzIGV4dGVuc2lvbiBpcyBkdXBsaWNhdGVkIGhlcmUgdG8gcHJvdmlkZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQkJVGhlIG5hbWVzcGFjZSBVUkkgd2FzIHJlbmFtZWQgZnJvbSBodHRwOi8vd3d3LmlibS5jb20vd3NkbC8yMDAzL01JTUUgdG8KLQkJaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvTUlNRS4gCi0JIC0tPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KLQkJPHBhY2thZ2UKLQkJCXVyaT0iaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9NSU1FIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL01JTUUuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1NPQVAiCi0JICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvU09BUC5nZW5tb2RlbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UiPgotCQk8L3BhY2thZ2U+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIAotCQlUaGlzIGV4dGVuc2lvbiBpcyBkdXBsaWNhdGVkIGhlcmUgdG8gcHJvdmlkZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQkJVGhlIG5hbWVzcGFjZSBVUkkgd2FzIHJlbmFtZWQgZnJvbSBodHRwOi8vd3d3LmlibS5jb20vd3NkbC8yMDAzL1NPQVAgdG8KLQkJaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvU09BUC4gCi0JIC0tPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KLQkJPHBhY2thZ2UKLQkJCXVyaT0iaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9TT0FQIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1NPQVAuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmNvbnRlbnRHZW5lcmF0b3JzIj4KLQkJPGNvbnRlbnRHZW5lcmF0b3IKLQkJCW5hbWU9IlNPQVAiCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmdlbmVyYXRvci5TT0FQQ29udGVudEdlbmVyYXRvciI+Ci0JCTwvY29udGVudEdlbmVyYXRvcj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmNvbnRlbnRHZW5lcmF0b3JzIj4KLQkJPGNvbnRlbnRHZW5lcmF0b3IKLQkJCW5hbWU9IkhUVFAiCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmdlbmVyYXRvci5IVFRQQ29udGVudEdlbmVyYXRvciI+Ci0JCTwvY29udGVudEdlbmVyYXRvcj4KLQk8L2V4dGVuc2lvbj4KLQotCi0KLQk8IS0tIGRlZmluZSBhIHdzZGwgY29udGVudCB0eXBlIC0tPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50VHlwZXMiPgotCQk8Y29udGVudC10eXBlCi0JCQlwcmlvcml0eT0iaGlnaCIKLQkJCW5hbWU9IiV4cFdTRExDb250ZW50VHlwZSIKLQkJCWlkPSJ3c2Rsc291cmNlIgotCQkJYmFzZS10eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotCQkJZGVmYXVsdC1jaGFyc2V0PSJVVEYtOCIKLQkJCWZpbGUtZXh0ZW5zaW9ucz0id3NkbCIgLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zY2hlbWEvY29udGVudEdlbmVyYXRvcnMuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc2NoZW1hL2NvbnRlbnRHZW5lcmF0b3JzLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MmE0NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zY2hlbWEvY29udGVudEdlbmVyYXRvcnMuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIGlkPSJjb250ZW50R2VuZXJhdG9ycyIgbmFtZT0iUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIFBvcnQgYW5kIEJpbmRpbmcgQ29udGVudCBHZW5lcmF0b3JzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBjdXN0b20gZ2VuZXJhdG9ycyBmb3IgUG9ydHMgYW5kIEJpbmRpbmdzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgY3VzdG9tIGNvbnRlbnQgZ2VuZXJhdG9ycyBmb3IgV1NETCBQb3J0cyBhbmQgQmluZGluZ3MuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNvbnRlbnRHZW5lcmF0b3IiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImNvbnRlbnRHZW5lcmF0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE5hbWUgdXNlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwbHVnaW5zLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgY29udGVudCBnZW5lcmF0b3IgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLmNvbnRlbnRHZW5lcmF0b3JzJnF1b3Q7Jmd0OwotICAgICAgJmx0O2NvbnRlbnRHZW5lcmF0b3IKLSAgICAgICAgICAgIG5hbWU9JnF1b3Q7U09BUCZxdW90OwotICAgICAgICAgICAgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDsKLSAgICAgICAgICAgIGNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3ImcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcmllcy5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0NTU3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcmllcy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIgaWQ9ImV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIiBuYW1lPSJXU0RMIEV4dGVuc2liaWxpdHkgRWxlbWVudCBGYWN0b3JpZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIFdTREwgRXh0ZW5zaWJpbGl0eSBFbGVtZW50IEZhY3RvcmllcyBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgZmFjdG9yaWVzIGZvciBjcmVhdGluZyBjdXN0b20gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ii8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkmbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGFuIGV4dGVuc2liaWxpdHkgZWxlbWVudCBmYWN0b3J5IGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC5leHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcmllcyZxdW90OyZndDsKLSAgICAgICZsdDtleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvJnF1b3Q7Ci0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5JnF1b3Q7LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Jmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYTgyOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQQWRkcmVzcygpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQQWRkcmVzcyBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldExvY2F0aW9uVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UjZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldExvY2F0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcyNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBIVFRQQWRkcmVzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YjFiZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nI2dldFZlcmIgPGVtPlZlcmI8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQQmluZGluZygpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQQmluZGluZyBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVyYjwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVyYjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVyYjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFZlcmIoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQQmluZGluZ19WZXJiKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRWZXJiKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZyNnZXRWZXJiIDxlbT5WZXJiPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZXJiPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0VmVyYigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VmVyYihTdHJpbmcgdmFsdWUpOwotCi19IC8vIEhUVFBCaW5kaW5nCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U4MjhkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSFRUUEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeQotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEhUVFBGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBGYWN0b3J5SW1wbC5pbml0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUEJpbmRpbmcgY3JlYXRlSFRUUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUE9wZXJhdGlvbiBjcmVhdGVIVFRQT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEhUVFBVcmxSZXBsYWNlbWVudCBjcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEhUVFBVcmxFbmNvZGVkIGNyZWF0ZUhUVFBVcmxFbmNvZGVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUEFkZHJlc3MgY3JlYXRlSFRUUEFkZHJlc3MoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQUGFja2FnZSBnZXRIVFRQUGFja2FnZSgpOwotCi19IC8vSFRUUEZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyOTVmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24jZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlI2dldEhUVFBPcGVyYXRpb24oKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSFRUUE9wZXJhdGlvbiBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TG9jYXRpb25VUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbiNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBIVFRQT3BlcmF0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZjY2E5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5Ci0gKiBAbW9kZWwga2luZD0icGFja2FnZSIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlCi17Ci0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOQU1FID0gImh0dHAiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9IVFRQIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTlNfUFJFRklYID0gImh0dHAiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBCaW5kaW5nSW1wbCA8ZW0+QmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBCaW5kaW5nSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBIVFRQX0JJTkRJTkcgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0JJTkRJTkdfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQklORElOR19fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9CSU5ESU5HX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlcmI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0JJTkRJTkdfX1ZFUkIgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQklORElOR19GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBPcGVyYXRpb25JbXBsIDxlbT5PcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQT3BlcmF0aW9uSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OID0gMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX09QRVJBVElPTl9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9PUEVSQVRJT05fX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5PcGVyYXRpb248L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQVXJsUmVwbGFjZW1lbnRJbXBsIDxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQVXJsUmVwbGFjZW1lbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBVcmxSZXBsYWNlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9SRVBMQUNFTUVOVCA9IDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9SRVBMQUNFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX1JFUExBQ0VNRU5UX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQVXJsRW5jb2RlZEltcGwgPGVtPlVybCBFbmNvZGVkPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybEVuY29kZWRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBVcmxFbmNvZGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX0VOQ09ERUQgPSAzOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VcmwgRW5jb2RlZDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUEFkZHJlc3NJbXBsIDxlbT5BZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUEFkZHJlc3NJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBBZGRyZXNzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEhUVFBfQUREUkVTUyA9IDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQUREUkVTU19fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9BRERSRVNTX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BZGRyZXNzPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIDxlbT5JSFRUUCBBZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBBZGRyZXNzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElIVFRQX0FERFJFU1MgPSA1OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQWRkcmVzczwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIDxlbT5JSFRUUCBCaW5kaW5nPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElIVFRQX0JJTkRJTkcgPSA2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQmluZGluZzwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUhUVFBfT1BFUkFUSU9OID0gNzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQgPGVtPklIVFRQIFVybCBFbmNvZGVkPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBVcmxFbmNvZGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElIVFRQX1VSTF9FTkNPREVEID0gODsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIFVybCBFbmNvZGVkPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElIVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCA8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQVXJsUmVwbGFjZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUhUVFBfVVJMX1JFUExBQ0VNRU5UID0gOTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZyA8ZW0+QmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SFRUUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcjZ2V0VmVyYiA8ZW0+VmVyYjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlcmI8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nI2dldFZlcmIoKQotICAgKiBAc2VlICNnZXRIVFRQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0SFRUUEJpbmRpbmdfVmVyYigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbiA8ZW0+T3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SFRUUE9wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24jZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAc2VlICNnZXRIVFRQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQgPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SFRUUFVybFJlcGxhY2VtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZCA8ZW0+VXJsIEVuY29kZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRIVFRQVXJsRW5jb2RlZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3MgPGVtPkFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3MKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEhUVFBBZGRyZXNzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzI2dldExvY2F0aW9uVVJJKCkKLSAgICogQHNlZSAjZ2V0SFRUUEFkZHJlc3MoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEhUVFBBZGRyZXNzX0xvY2F0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIDxlbT5JSFRUUCBBZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklIVFRQIEFkZHJlc3M8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUhUVFBBZGRyZXNzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIDxlbT5JSFRUUCBCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklIVFRQIEJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUhUVFBCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElIVFRQT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJSFRUUFVybEVuY29kZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IDxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQRmFjdG9yeSBnZXRIVFRQRmFjdG9yeSgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gICAqIDx1bD4KLSAgICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAgICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAgICogPC91bD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludGVyZmFjZSBMaXRlcmFscwotICB7Ci0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBCaW5kaW5nSW1wbCA8ZW0+QmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBCaW5kaW5nSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEhUVFBfQklORElORyA9IGVJTlNUQU5DRS5nZXRIVFRQQmluZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlcmI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgSFRUUF9CSU5ESU5HX19WRVJCID0gZUlOU1RBTkNFLmdldEhUVFBCaW5kaW5nX1ZlcmIoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQT3BlcmF0aW9uSW1wbCA8ZW0+T3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUE9wZXJhdGlvbkltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQT3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEhUVFBfT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldEhUVFBPcGVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSA9IGVJTlNUQU5DRS5nZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybFJlcGxhY2VtZW50SW1wbCA8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybFJlcGxhY2VtZW50SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBVcmxSZXBsYWNlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBIVFRQX1VSTF9SRVBMQUNFTUVOVCA9IGVJTlNUQU5DRS5nZXRIVFRQVXJsUmVwbGFjZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQVXJsRW5jb2RlZEltcGwgPGVtPlVybCBFbmNvZGVkPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybEVuY29kZWRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SFRUUFVybEVuY29kZWQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSFRUUF9VUkxfRU5DT0RFRCA9IGVJTlNUQU5DRS5nZXRIVFRQVXJsRW5jb2RlZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBBZGRyZXNzSW1wbCA8ZW0+QWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBBZGRyZXNzSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBBZGRyZXNzKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEhUVFBfQUREUkVTUyA9IGVJTlNUQU5DRS5nZXRIVFRQQWRkcmVzcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBIVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSA9IGVJTlNUQU5DRS5nZXRIVFRQQWRkcmVzc19Mb2NhdGlvblVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIDxlbT5JSFRUUCBBZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRJSFRUUEFkZHJlc3MoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUhUVFBfQUREUkVTUyA9IGVJTlNUQU5DRS5nZXRJSFRUUEFkZHJlc3MoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyA8ZW0+SUhUVFAgQmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElIVFRQX0JJTkRJTkcgPSBlSU5TVEFOQ0UuZ2V0SUhUVFBCaW5kaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiA8ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQT3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElIVFRQX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRJSFRUUE9wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBVcmxFbmNvZGVkKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElIVFRQX1VSTF9FTkNPREVEID0gZUlOU1RBTkNFLmdldElIVFRQVXJsRW5jb2RlZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCA8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJSFRUUF9VUkxfUkVQTEFDRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpOwotCi0gIH0KLQotfSAvL0hUVFBQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQxZTU5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VXJsIEVuY29kZWQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlI2dldEhUVFBVcmxFbmNvZGVkKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEhUVFBVcmxFbmNvZGVkIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkCi17Ci19IC8vIEhUVFBVcmxFbmNvZGVkCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDQ1MmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VXJsIFJlcGxhY2VtZW50PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQVXJsUmVwbGFjZW1lbnQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSFRUUFVybFJlcGxhY2VtZW50IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotewotfSAvLyBIVFRQVXJsUmVwbGFjZW1lbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2dlbmVyYXRvci9IVFRQQ29udGVudEdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvZ2VuZXJhdG9yL0hUVFBDb250ZW50R2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWE1MTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvZ2VuZXJhdG9yL0hUVFBDb250ZW50R2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuZ2VuZXJhdG9yOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBIVFRQQ29udGVudEdlbmVyYXRvciBpbXBsZW1lbnRzIENvbnRlbnRHZW5lcmF0b3IKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkVSQl9QT1NUID0gMDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWRVJCX0dFVCA9IDE7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkVSQl9OT1RfU0VUID0gLTE7Ci0KLSAgcHJpdmF0ZSBpbnQgdmVyYk9wdGlvbiA9IFZFUkJfTk9UX1NFVDsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGFkZHJlc3NMb2NhdGlvbiA9IENvbnRlbnRHZW5lcmF0b3IuQUREUkVTU19MT0NBVElPTjsKLQotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZ1tdIHJlcXVpcmVkTmFtZXNwYWNlcyA9IHsgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgfTsKLQotICBwdWJsaWMgdm9pZCBzZXRWZXJiKGludCB2ZXJiKQotICB7Ci0gICAgdmVyYk9wdGlvbiA9IHZlcmI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBZGRyZXNzTG9jYXRpb24oU3RyaW5nIGFkZHJlc3NMb2NhdGlvbikKLSAgewotICAgIHRoaXMuYWRkcmVzc0xvY2F0aW9uID0gYWRkcmVzc0xvY2F0aW9uOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFJlcXVpcmVkTmFtZXNwYWNlcygpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZWROYW1lc3BhY2VzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcmVmZXJyZWROYW1lc3BhY2VQcmVmaXgoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIikpCi0gICAgewotICAgICAgcmV0dXJuICJtaW1lIjsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZXNwYWNlLmVxdWFscygiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIpKQotICAgIHsKLSAgICAgIHJldHVybiAiaHR0cCI7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVQb3J0Q29udGVudChQb3J0IHBvcnQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QocG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBIVFRQQWRkcmVzcyBodHRwQWRkcmVzcyA9IEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQQWRkcmVzcygpOwotICAgIGh0dHBBZGRyZXNzLnNldExvY2F0aW9uVVJJKGFkZHJlc3NMb2NhdGlvbik7Ci0gICAgcG9ydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwQWRkcmVzcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdDb250ZW50KEJpbmRpbmcgYmluZGluZywgUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBIVFRQQmluZGluZyBodHRwQmluZGluZyA9IEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQQmluZGluZygpOwotICAgIGh0dHBCaW5kaW5nLnNldFZlcmIoZ2V0VmVyYk9wdGlvbihiaW5kaW5nKSA9PSBWRVJCX1BPU1QgPyAiUE9TVCIgOiAiR0VUIik7Ci0KLSAgICBiaW5kaW5nLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBCaW5kaW5nKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KGJpbmRpbmdPcGVyYXRpb24uZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ09wZXJhdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgSFRUUE9wZXJhdGlvbiBodHRwT3BlcmF0aW9uID0gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBPcGVyYXRpb24oKTsKLSAgICBodHRwT3BlcmF0aW9uLnNldExvY2F0aW9uVVJJKCIvIiArIG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cE9wZXJhdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCwgSW5wdXQgaW5wdXQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ0lucHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAvLyBoYWNrOiB3ZSdyZSBiZWluZyBzbmVha3kgaGVyZS4gU2V0IHRoZSAndmVyYicgb3B0aW9ucyBub3cuCi0gICAgaW50IG9wdGlvbiA9IGdldFZlcmJPcHRpb24oYmluZGluZ0lucHV0KTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ0lucHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBpZiAob3B0aW9uID09IFZFUkJfUE9TVCkKLSAgICB7Ci0gICAgICAvLyBUT0RPOiBJcyB0aGVyZSBhbiBlcXVpdmFsZW50IEhUVFAgTW9kZWwgT2JqZWN0IGZvciB0aGlzPy4uLi4KLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoYmluZGluZ0lucHV0LmdldEVsZW1lbnQoKSwgIm1pbWUiLCAiY29udGVudCIpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBIVFRQVXJsRW5jb2RlZCB1cmxFbmNvZGVkID0gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBVcmxFbmNvZGVkKCk7Ci0gICAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQodXJsRW5jb2RlZCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nT3V0cHV0Q29udGVudChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQsIE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ091dHB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCi0gICAgLy8gaGFjazogd2UncmUgYmVpbmcgc25lYWt5IGhlcmUuIFNldCB0aGUgJ3ZlcmInIG9wdGlvbnMgbm93LgotICAgIGdldFZlcmJPcHRpb24oYmluZGluZ091dHB1dCk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdPdXRwdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIC8vIFRPRE86IElzIHRoZXJlIGFuIGVxdWl2YWxlbnQgSFRUUCBNb2RlbCBPYmplY3QgZm9yIHRoaXM/Li4uLgotICAgIEVsZW1lbnQgYmluZGluZ091dHB1dEVsZW1lbnQgPSBiaW5kaW5nT3V0cHV0LmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGJpbmRpbmdPdXRwdXRFbGVtZW50LCAibWltZSIsICJjb250ZW50Iik7Ci0gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dC94bWwiKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ0ZhdWx0Q29udGVudChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0LCBGYXVsdCBmYXVsdCkKLSAgewotICAgIC8vVE9ETyEhCi0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudCBjcmVhdGVFbGVtZW50KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIGVsZW1lbnROYW1lKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBwcmVmaXggIT0gbnVsbCA/IChwcmVmaXggKyAiOiIgKyBlbGVtZW50TmFtZSkgOiBlbGVtZW50TmFtZTsKLSAgICBFbGVtZW50IHJlc3VsdCA9IHBhcmVudEVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQobmFtZSk7Ci0gICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUocmVzdWx0LCBwYXJlbnRFbGVtZW50LmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgLy8gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gIAotICBwcml2YXRlIGludCBnZXRWZXJiT3B0aW9uKE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIGlmICh2ZXJiT3B0aW9uID09IFZFUkJfTk9UX1NFVCAmJiBnZW5lcmljQmluZGluZ09iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIGluaXQoKSB3YXMgbmV2ZXIgY2FsbGVkLCB0cnkgdG8gZGV0ZXJtaW5lIHRoZSAndmVyYicgYmFzZWQgb24gd2hhdCB3ZSBoYXZlL2tub3cKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IGdldEJpbmRpbmdPYmplY3QoZ2VuZXJpY0JpbmRpbmdPYmplY3QpOwotCi0gICAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSB2ZXJiIGZyb20gdGhlIEJpbmRpbmcgT2JqZWN0Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgSXRlcmF0b3IgdmFsdWVzSXQgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGxpc3QsICJ2ZXJiIikuaXRlcmF0b3IoKTsKLQotICAgICAgICB3aGlsZSAodmFsdWVzSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHZlcmIgPSAoU3RyaW5nKXZhbHVlc0l0Lm5leHQoKTsKLQotICAgICAgICAgIGlmICh2ZXJiLmVxdWFscygiUE9TVCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHZlcmJPcHRpb24gPSBWRVJCX1BPU1Q7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKHZlcmIuZXF1YWxzKCJHRVQiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJiT3B0aW9uID0gVkVSQl9HRVQ7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHZlcmJPcHRpb24gIT0gVkVSQl9OT1RfU0VUKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmICh2ZXJiT3B0aW9uID09IFZFUkJfTk9UX1NFVCkKLSAgICB7Ci0gICAgICB2ZXJiT3B0aW9uID0gVkVSQl9HRVQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcmJPcHRpb247Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShMaXN0IGVlTGlzdCwgU3RyaW5nIGF0dHJpYnV0ZUtleSkKLSAgewotICAgIExpc3QgdmFsdWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGVlRWxlbWVudHNJdCA9IGVlTGlzdC5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGVlRWxlbWVudHNJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWVFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVlRWxlbWVudHNJdC5uZXh0KCk7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBlZUVsZW1lbnQuZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVLZXkpOwotICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwgJiYgIWF0dHJpYnV0ZVZhbHVlLmVxdWFscygiIikpCi0gICAgICB7Ci0gICAgICAgIHZhbHVlcy5hZGQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZXM7Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmcgZ2V0QmluZGluZ09iamVjdChPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBPYmplY3QgcGFyZW50ID0gZ2VuZXJpY0JpbmRpbmdPYmplY3Q7Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCAmJiBpbmRleCA8IDUpCi0gICAgewotICAgICAgcGFyZW50ID0gZ2V0R2VuZXJpY0JpbmRpbmdPYmplY3RQYXJlbnQocGFyZW50KTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGluZGV4Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nKSA/IChCaW5kaW5nKXBhcmVudCA6IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIE9iamVjdCBnZXRHZW5lcmljQmluZGluZ09iamVjdFBhcmVudChPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBPYmplY3QgcGFyZW50ID0gbnVsbDsKLQotICAgIGlmIChnZW5lcmljQmluZGluZ09iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ09wZXJhdGlvbilnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nSW5wdXQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2VuZXJpY0JpbmRpbmdPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgICAgewotICAgICAgICBwYXJlbnQgPSAoKEJpbmRpbmdPdXRwdXQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2VuZXJpY0JpbmRpbmdPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ0ZhdWx0KWdlbmVyaWNCaW5kaW5nT2JqZWN0KS5nZXRDb250YWluZXIoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhMaXN0IG9yaWdpbmFsTGlzdCwgTGlzdCByZW1vdmVMaXN0KQotICB7Ci0gICAgSXRlcmF0b3IgcmVtb3ZlSXQgPSByZW1vdmVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKHJlbW92ZUl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBvcmlnaW5hbExpc3QucmVtb3ZlKHJlbW92ZUl0Lm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpCi0gIHsKLSAgICByZXR1cm4gIkhUVFAiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBBZGRyZXNzSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQQWRkcmVzc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2NDg0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBBZGRyZXNzSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZGRyZXNzPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQWRkcmVzc0ltcGwjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBBZGRyZXNzSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEhUVFBBZGRyZXNzCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uVVJJID0gTE9DQVRJT05fVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEhUVFBBZGRyZXNzSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9BRERSRVNTOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvblVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIG5ld0xvY2F0aW9uVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZExvY2F0aW9uVVJJID0gbG9jYXRpb25VUkk7Ci0gICAgbG9jYXRpb25VUkkgPSBuZXdMb2NhdGlvblVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBIVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSwgb2xkTG9jYXRpb25VUkksIGxvY2F0aW9uVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIGdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgc2V0TG9jYXRpb25VUkkoTE9DQVRJT05fVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHJldHVybiBMT0NBVElPTl9VUklfRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uVVJJICE9IG51bGwgOiAhTE9DQVRJT05fVVJJX0VERUZBVUxULmVxdWFscyhsb2NhdGlvblVSSSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChsb2NhdGlvblVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGxvY2F0aW9uVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldExvY2F0aW9uVVJJKEhUVFBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBIVFRQQ29uc3RhbnRzLkxPQ0FUSU9OX1VSSV9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBIVFRQQ29uc3RhbnRzLkxPQ0FUSU9OX1VSSV9BVFRSSUJVVEUsIGdldExvY2F0aW9uVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJLCBIVFRQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotfSAvL0hUVFBBZGRyZXNzSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQQmluZGluZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUEJpbmRpbmdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZTkwMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQQmluZGluZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUEJpbmRpbmdJbXBsI2dldFZlcmIgPGVtPlZlcmI8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQQmluZGluZ0ltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBIVFRQQmluZGluZwotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlcmIoKSA8ZW0+VmVyYjwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VmVyYigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZXJiKCkgPGVtPlZlcmI8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFZlcmIoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHZlcmIgPSBWRVJCX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEhUVFBCaW5kaW5nSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9CSU5ESU5HOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZlcmIoKQotICB7Ci0gICAgcmV0dXJuIHZlcmI7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZlcmIoU3RyaW5nIG5ld1ZlcmIpCi0gIHsKLSAgICBTdHJpbmcgb2xkVmVyYiA9IHZlcmI7Ci0gICAgdmVyYiA9IG5ld1ZlcmI7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCLCBvbGRWZXJiLCB2ZXJiKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQklORElOR19fVkVSQjoKLSAgICAgIHJldHVybiBnZXRWZXJiKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCOgotICAgICAgc2V0VmVyYigoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQklORElOR19fVkVSQjoKLSAgICAgIHNldFZlcmIoVkVSQl9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCOgotICAgICAgcmV0dXJuIFZFUkJfRURFRkFVTFQgPT0gbnVsbCA/IHZlcmIgIT0gbnVsbCA6ICFWRVJCX0VERUZBVUxULmVxdWFscyh2ZXJiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHZlcmI6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh2ZXJiKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldFZlcmIoSFRUUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIEhUVFBDb25zdGFudHMuVkVSQl9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX0JJTkRJTkdfX1ZFUkIpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgSFRUUENvbnN0YW50cy5WRVJCX0FUVFJJQlVURSwgZ2V0VmVyYigpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShIVFRQQ29uc3RhbnRzLkhUVFBfTkFNRVNQQUNFX1VSSSwgSFRUUENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL0hUVFBCaW5kaW5nSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUEZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MjdkMzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSFRUUEZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgSFRUUEZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSFRUUEZhY3RvcnkgaW5pdCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBIVFRQRmFjdG9yeSB0aGVIVFRQRmFjdG9yeSA9IChIVFRQRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvSFRUUCIpOyAvLyROT04tTkxTLTEkIAotICAgICAgaWYgKHRoZUhUVFBGYWN0b3J5ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0aGVIVFRQRmFjdG9yeTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBuZXcgSFRUUEZhY3RvcnlJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQRmFjdG9yeUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpCi0gIHsKLSAgICBzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQklORElORzoKLSAgICAgIHJldHVybiBjcmVhdGVIVFRQQmluZGluZygpOwotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTjoKLSAgICAgIHJldHVybiBjcmVhdGVIVFRQT3BlcmF0aW9uKCk7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfVVJMX1JFUExBQ0VNRU5UOgotICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpOwotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEOgotICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBVcmxFbmNvZGVkKCk7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQUREUkVTUzoKLSAgICAgIHJldHVybiBjcmVhdGVIVFRQQWRkcmVzcygpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBCaW5kaW5nIGNyZWF0ZUhUVFBCaW5kaW5nKCkKLSAgewotICAgIEhUVFBCaW5kaW5nSW1wbCBodHRwQmluZGluZyA9IG5ldyBIVFRQQmluZGluZ0ltcGwoKTsKLSAgICByZXR1cm4gaHR0cEJpbmRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQT3BlcmF0aW9uIGNyZWF0ZUhUVFBPcGVyYXRpb24oKQotICB7Ci0gICAgSFRUUE9wZXJhdGlvbkltcGwgaHR0cE9wZXJhdGlvbiA9IG5ldyBIVFRQT3BlcmF0aW9uSW1wbCgpOwotICAgIHJldHVybiBodHRwT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUFVybFJlcGxhY2VtZW50IGNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpCi0gIHsKLSAgICBIVFRQVXJsUmVwbGFjZW1lbnRJbXBsIGh0dHBVcmxSZXBsYWNlbWVudCA9IG5ldyBIVFRQVXJsUmVwbGFjZW1lbnRJbXBsKCk7Ci0gICAgcmV0dXJuIGh0dHBVcmxSZXBsYWNlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBVcmxFbmNvZGVkIGNyZWF0ZUhUVFBVcmxFbmNvZGVkKCkKLSAgewotICAgIEhUVFBVcmxFbmNvZGVkSW1wbCBodHRwVXJsRW5jb2RlZCA9IG5ldyBIVFRQVXJsRW5jb2RlZEltcGwoKTsKLSAgICByZXR1cm4gaHR0cFVybEVuY29kZWQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQQWRkcmVzcyBjcmVhdGVIVFRQQWRkcmVzcygpCi0gIHsKLSAgICBIVFRQQWRkcmVzc0ltcGwgaHR0cEFkZHJlc3MgPSBuZXcgSFRUUEFkZHJlc3NJbXBsKCk7Ci0gICAgcmV0dXJuIGh0dHBBZGRyZXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUFBhY2thZ2UgZ2V0SFRUUFBhY2thZ2UoKQotICB7Ci0gICAgcmV0dXJuIChIVFRQUGFja2FnZSlnZXRFUGFja2FnZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZGVwcmVjYXRlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEhUVFBQYWNrYWdlIGdldFBhY2thZ2UoKQotICB7Ci0gICAgcmV0dXJuIEhUVFBQYWNrYWdlLmVJTlNUQU5DRTsKLSAgfQotfSAvL0hUVFBGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQT3BlcmF0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQT3BlcmF0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDFkMDZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUE9wZXJhdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBPcGVyYXRpb25JbXBsI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQT3BlcmF0aW9uSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEhUVFBPcGVyYXRpb24KLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb25VUkkgPSBMT0NBVElPTl9VUklfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgSFRUUE9wZXJhdGlvbkltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfT1BFUkFUSU9OOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvblVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIG5ld0xvY2F0aW9uVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZExvY2F0aW9uVVJJID0gbG9jYXRpb25VUkk7Ci0gICAgbG9jYXRpb25VUkkgPSBuZXdMb2NhdGlvblVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBIVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJLCBvbGRMb2NhdGlvblVSSSwgbG9jYXRpb25VUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSToKLSAgICAgIHJldHVybiBnZXRMb2NhdGlvblVSSSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSShMT0NBVElPTl9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkk6Ci0gICAgICByZXR1cm4gTE9DQVRJT05fVVJJX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvblVSSSAhPSBudWxsIDogIUxPQ0FUSU9OX1VSSV9FREVGQVVMVC5lcXVhbHMobG9jYXRpb25VUkkpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobG9jYXRpb25VUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChsb2NhdGlvblVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzOiBET00gLT4gTW9kZWwKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXRMb2NhdGlvblVSSShIVFRQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgSFRUUENvbnN0YW50cy5MT0NBVElPTl9VUklfQVRUUklCVVRFKSk7Ci0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBIVFRQQ29uc3RhbnRzLkxPQ0FUSU9OX1VSSV9BVFRSSUJVVEUsIGdldExvY2F0aW9uVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJLCBIVFRQQ29uc3RhbnRzLk9QRVJBVElPTl9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLX0gLy9IVFRQT3BlcmF0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQUGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjZhMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQUGFja2FnZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhY2thZ2U7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBIVFRQUGFja2FnZQotewotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGh0dHBCaW5kaW5nRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGh0dHBPcGVyYXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGh0dHBVcmxFbmNvZGVkRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGh0dHBBZGRyZXNzRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlodHRwQWRkcmVzc0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpaHR0cEJpbmRpbmdFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaWh0dHBPcGVyYXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaWh0dHBVcmxFbmNvZGVkRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0gICAqIHBhY2thZ2UgVVJJIHZhbHVlLgotICAgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0gICAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0gICAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0gICAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlI2VOU19VUkkKLSAgICogQHNlZSAjaW5pdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgSFRUUFBhY2thZ2VJbXBsKCkKLSAgewotICAgIHN1cGVyKGVOU19VUkksIEhUVFBGYWN0b3J5LmVJTlNUQU5DRSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0gICAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0gICAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0gICAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotICAgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0gICAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0gICAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLSAgICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0gICAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLSAgICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLSAgICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLSAgICogdGhvc2Ugb2YgYW5vdGhlci4KLSAgICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotICAgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNlTlNfVVJJCi0gICAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEhUVFBQYWNrYWdlIGluaXQoKQotICB7Ci0gICAgaWYgKGlzSW5pdGVkKQotICAgICAgcmV0dXJuIChIVFRQUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShIVFRQUGFja2FnZS5lTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLSAgICBIVFRQUGFja2FnZUltcGwgdGhlSFRUUFBhY2thZ2UgPSAoSFRUUFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIEhUVFBQYWNrYWdlSW1wbAotICAgICAgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBIVFRQUGFja2FnZUltcGwoKSk7Ci0KLSAgICBpc0luaXRlZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLSAgICBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7Ci0gICAgWFNEUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7Ci0KLSAgICAvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotICAgIHRoZUhUVFBQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotICAgIHRoZUhUVFBQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLSAgICB0aGVIVFRQUGFja2FnZS5mcmVlemUoKTsKLQotICAgIHJldHVybiB0aGVIVFRQUGFja2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRIVFRQQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gaHR0cEJpbmRpbmdFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEhUVFBCaW5kaW5nX1ZlcmIoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWh0dHBCaW5kaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SFRUUE9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaHR0cE9wZXJhdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0SFRUUE9wZXJhdGlvbl9Mb2NhdGlvblVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpaHR0cE9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEhUVFBVcmxSZXBsYWNlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEhUVFBVcmxFbmNvZGVkKCkKLSAgewotICAgIHJldHVybiBodHRwVXJsRW5jb2RlZEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRIVFRQQWRkcmVzcygpCi0gIHsKLSAgICByZXR1cm4gaHR0cEFkZHJlc3NFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEhUVFBBZGRyZXNzX0xvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlodHRwQWRkcmVzc0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElIVFRQQWRkcmVzcygpCi0gIHsKLSAgICByZXR1cm4gaWh0dHBBZGRyZXNzRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElIVFRQQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gaWh0dHBCaW5kaW5nRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElIVFRQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBpaHR0cE9wZXJhdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJSFRUUFVybEVuY29kZWQoKQotICB7Ci0gICAgcmV0dXJuIGlodHRwVXJsRW5jb2RlZEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJSFRUUFVybFJlcGxhY2VtZW50KCkKLSAgewotICAgIHJldHVybiBpaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUEZhY3RvcnkgZ2V0SFRUUEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIChIVFRQRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0gICAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gIHsKLSAgICBpZiAoaXNDcmVhdGVkKQotICAgICAgcmV0dXJuOwotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0KLSAgICAvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLSAgICBodHRwQmluZGluZ0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhIVFRQX0JJTkRJTkcpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoaHR0cEJpbmRpbmdFQ2xhc3MsIEhUVFBfQklORElOR19fVkVSQik7Ci0KLSAgICBodHRwT3BlcmF0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKEhUVFBfT1BFUkFUSU9OKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGh0dHBPcGVyYXRpb25FQ2xhc3MsIEhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkkpOwotCi0gICAgaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKEhUVFBfVVJMX1JFUExBQ0VNRU5UKTsKLQotICAgIGh0dHBVcmxFbmNvZGVkRUNsYXNzID0gY3JlYXRlRUNsYXNzKEhUVFBfVVJMX0VOQ09ERUQpOwotCi0gICAgaHR0cEFkZHJlc3NFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSFRUUF9BRERSRVNTKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGh0dHBBZGRyZXNzRUNsYXNzLCBIVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICBpaHR0cEFkZHJlc3NFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUhUVFBfQUREUkVTUyk7Ci0KLSAgICBpaHR0cEJpbmRpbmdFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUhUVFBfQklORElORyk7Ci0KLSAgICBpaHR0cE9wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJSFRUUF9PUEVSQVRJT04pOwotCi0gICAgaWh0dHBVcmxFbmNvZGVkRUNsYXNzID0gY3JlYXRlRUNsYXNzKElIVFRQX1VSTF9FTkNPREVEKTsKLQotICAgIGlodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUhUVFBfVVJMX1JFUExBQ0VNRU5UKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLSAgICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICB7Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHBhY2thZ2UKLSAgICBzZXROYW1lKGVOQU1FKTsKLSAgICBzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLSAgICBzZXROc1VSSShlTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLSAgICBXU0RMUGFja2FnZSB0aGVXU0RMUGFja2FnZSA9IChXU0RMUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShXU0RMUGFja2FnZS5lTlNfVVJJKTsKLQotICAgIC8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKLSAgICBodHRwQmluZGluZ0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBodHRwQmluZGluZ0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElIVFRQQmluZGluZygpKTsKLSAgICBodHRwT3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIGh0dHBPcGVyYXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJSFRUUE9wZXJhdGlvbigpKTsKLSAgICBodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpKTsKLSAgICBodHRwVXJsRW5jb2RlZEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBodHRwVXJsRW5jb2RlZEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElIVFRQVXJsRW5jb2RlZCgpKTsKLSAgICBodHRwQWRkcmVzc0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBodHRwQWRkcmVzc0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElIVFRQQWRkcmVzcygpKTsKLQotICAgIC8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0gICAgaW5pdEVDbGFzcyhodHRwQmluZGluZ0VDbGFzcywgSFRUUEJpbmRpbmcuY2xhc3MsICJIVFRQQmluZGluZyIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0SFRUUEJpbmRpbmdfVmVyYigpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJ2ZXJiIiwgbnVsbCwgMCwgMSwgSFRUUEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaHR0cE9wZXJhdGlvbkVDbGFzcywgSFRUUE9wZXJhdGlvbi5jbGFzcywgIkhUVFBPcGVyYXRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEhUVFBPcGVyYXRpb25fTG9jYXRpb25VUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibG9jYXRpb25VUkkiLCBudWxsLCAwLCAxLCBIVFRQT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzLAotICAgICAgSFRUUFVybFJlcGxhY2VtZW50LmNsYXNzLAotICAgICAgIkhUVFBVcmxSZXBsYWNlbWVudCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhodHRwVXJsRW5jb2RlZEVDbGFzcywgSFRUUFVybEVuY29kZWQuY2xhc3MsICJIVFRQVXJsRW5jb2RlZCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhodHRwQWRkcmVzc0VDbGFzcywgSFRUUEFkZHJlc3MuY2xhc3MsICJIVFRQQWRkcmVzcyIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibG9jYXRpb25VUkkiLCBudWxsLCAwLCAxLCBIVFRQQWRkcmVzcy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlodHRwQWRkcmVzc0VDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzLmNsYXNzLAotICAgICAgIklIVFRQQWRkcmVzcyIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaWh0dHBCaW5kaW5nRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcuY2xhc3MsCi0gICAgICAiSUhUVFBCaW5kaW5nIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpaHR0cE9wZXJhdGlvbkVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24uY2xhc3MsCi0gICAgICAiSUhUVFBPcGVyYXRpb24iLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlodHRwVXJsRW5jb2RlZEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkLmNsYXNzLAotICAgICAgIklIVFRQVXJsRW5jb2RlZCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaWh0dHBVcmxSZXBsYWNlbWVudEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudC5jbGFzcywKLSAgICAgICJJSFRUUFVybFJlcGxhY2VtZW50IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIENyZWF0ZSByZXNvdXJjZQotICAgIGNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotICB9Ci19IC8vSFRUUFBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBVcmxFbmNvZGVkSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQVXJsRW5jb2RlZEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE3NzdiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBVcmxFbmNvZGVkSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVybCBFbmNvZGVkPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSFRUUFVybEVuY29kZWRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgSFRUUFVybEVuY29kZWQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgSFRUUFVybEVuY29kZWRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX1VSTF9FTkNPREVEOwotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoSFRUUENvbnN0YW50cy5IVFRQX05BTUVTUEFDRV9VUkksIEhUVFBDb25zdGFudHMuVVJMX0VOQ09ERURfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi19IC8vSFRUUFVybEVuY29kZWRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBVcmxSZXBsYWNlbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFVybFJlcGxhY2VtZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDk2NGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFVybFJlcGxhY2VtZW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VcmwgUmVwbGFjZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQVXJsUmVwbGFjZW1lbnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgSFRUUFVybFJlcGxhY2VtZW50Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEhUVFBVcmxSZXBsYWNlbWVudEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfVVJMX1JFUExBQ0VNRU5UOwotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoSFRUUENvbnN0YW50cy5IVFRQX05BTUVTUEFDRV9VUkksIEhUVFBDb25zdGFudHMuVVJMX1JFUExBQ0VNRU5UX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL0hUVFBVcmxSZXBsYWNlbWVudEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmMwMmRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUEFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsOwotCi0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBIVFRQUGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQQWRhcHRlckZhY3RvcnkoKQotICB7Ci0gICAgaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsUGFja2FnZSA9IEhUVFBQYWNrYWdlLmVJTlNUQU5DRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgSFRUUFN3aXRjaCBtb2RlbFN3aXRjaCA9IG5ldyBIVFRQU3dpdGNoKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQQmluZGluZyhIVFRQQmluZGluZyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVIVFRQQmluZGluZ0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSFRUUE9wZXJhdGlvbihIVFRQT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBPcGVyYXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBVcmxSZXBsYWNlbWVudChIVFRQVXJsUmVwbGFjZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQVXJsRW5jb2RlZChIVFRQVXJsRW5jb2RlZCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVIVFRQVXJsRW5jb2RlZEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSFRUUEFkZHJlc3MoSFRUUEFkZHJlc3Mgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSFRUUEFkZHJlc3NBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQQWRkcmVzcyhqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSFRUUEFkZHJlc3NBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQQmluZGluZyhqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSFRUUEJpbmRpbmdBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQT3BlcmF0aW9uKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUhUVFBPcGVyYXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQVXJsRW5jb2RlZChqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSFRUUFVybEVuY29kZWRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQVXJsUmVwbGFjZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlIVFRQVXJsUmVwbGFjZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVdTRExFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KLSAgICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KQotICB7Ci0gICAgcmV0dXJuIChBZGFwdGVyKW1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcgPGVtPkJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUhUVFBCaW5kaW5nQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uIDxlbT5PcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSFRUUE9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IDxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5VcmwgRW5jb2RlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybEVuY29kZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSFRUUFVybEVuY29kZWRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzIDxlbT5BZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVIVFRQQWRkcmVzc0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyA8ZW0+SUhUVFAgQWRkcmVzczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSFRUUEFkZHJlc3NBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcgPGVtPklIVFRQIEJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUhUVFBCaW5kaW5nQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlIVFRQT3BlcmF0aW9uQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSFRUUFVybEVuY29kZWRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IDxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlIVFRQVXJsUmVwbGFjZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9IVFRQQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTFmZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEhUVFBDb25zdGFudHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUREUkVTU19FTEVNRU5UX1RBRyA9ICJhZGRyZXNzIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkdfRUxFTUVOVF9UQUcgPSAiYmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT05fRUxFTUVOVF9UQUcgPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSTF9FTkNPREVEX0VMRU1FTlRfVEFHID0gInVybEVuY29kZWQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJMX1JFUExBQ0VNRU5UX0VMRU1FTlRfVEFHID0gInVybFJlcGxhY2VtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfTkFNRVNQQUNFX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX1VSSV9BVFRSSUJVVEUgPSAibG9jYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSQl9BVFRSSUJVVEUgPSAidmVyYiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpIDogbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5N2Y5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotCi0KLXB1YmxpYyBjbGFzcyBIVFRQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci17Ci0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgaWYgKEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIGlmIChIVFRQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUEFkZHJlc3MoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKEhUVFBDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQQmluZGluZygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoSFRUUENvbnN0YW50cy5PUEVSQVRJT05fRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUE9wZXJhdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoSFRUUENvbnN0YW50cy5VUkxfRU5DT0RFRF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQVXJsRW5jb2RlZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoSFRUUENvbnN0YW50cy5VUkxfUkVQTEFDRU1FTlRfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbG9jYWxOYW1lOiAiICsgbG9jYWxOYW1lKTsKLSAgICAgICAgcmV0dXJuIFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbmFtZXNwYWNlOiAiICsgbmFtZXNwYWNlKTsKLSAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUFN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzFkZTE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUFN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQU3dpdGNoCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgSFRUUFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUFN3aXRjaCgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gSFRUUFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0gICAgICByZXR1cm4gZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8gZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOiBkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBzd2l0Y2ggKGNsYXNzaWZpZXJJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQklORElORzoKLSAgICAgIHsKLSAgICAgICAgSFRUUEJpbmRpbmcgaHR0cEJpbmRpbmcgPSAoSFRUUEJpbmRpbmcpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VIVFRQQmluZGluZyhodHRwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlIVFRQQmluZGluZyhodHRwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaHR0cEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT046Ci0gICAgICB7Ci0gICAgICAgIEhUVFBPcGVyYXRpb24gaHR0cE9wZXJhdGlvbiA9IChIVFRQT3BlcmF0aW9uKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSFRUUE9wZXJhdGlvbihodHRwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJSFRUUE9wZXJhdGlvbihodHRwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChodHRwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9VUkxfUkVQTEFDRU1FTlQ6Ci0gICAgICB7Ci0gICAgICAgIEhUVFBVcmxSZXBsYWNlbWVudCBodHRwVXJsUmVwbGFjZW1lbnQgPSAoSFRUUFVybFJlcGxhY2VtZW50KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSFRUUFVybFJlcGxhY2VtZW50KGh0dHBVcmxSZXBsYWNlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVybFJlcGxhY2VtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJSFRUUFVybFJlcGxhY2VtZW50KGh0dHBVcmxSZXBsYWNlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaHR0cFVybFJlcGxhY2VtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVybFJlcGxhY2VtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX1VSTF9FTkNPREVEOgotICAgICAgewotICAgICAgICBIVFRQVXJsRW5jb2RlZCBodHRwVXJsRW5jb2RlZCA9IChIVFRQVXJsRW5jb2RlZCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUhUVFBVcmxFbmNvZGVkKGh0dHBVcmxFbmNvZGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwVXJsRW5jb2RlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUhUVFBVcmxFbmNvZGVkKGh0dHBVcmxFbmNvZGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChodHRwVXJsRW5jb2RlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBVcmxFbmNvZGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0FERFJFU1M6Ci0gICAgICB7Ci0gICAgICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gKEhUVFBBZGRyZXNzKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSFRUUEFkZHJlc3MoaHR0cEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJSFRUUEFkZHJlc3MoaHR0cEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGh0dHBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSFRUUEJpbmRpbmcoSFRUUEJpbmRpbmcgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQT3BlcmF0aW9uKEhUVFBPcGVyYXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQVXJsUmVwbGFjZW1lbnQoSFRUUFVybFJlcGxhY2VtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBVcmxFbmNvZGVkKEhUVFBVcmxFbmNvZGVkIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BZGRyZXNzPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFkZHJlc3M8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQQWRkcmVzcyhIVFRQQWRkcmVzcyBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUhUVFAgQWRkcmVzczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBBZGRyZXNzPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUhUVFBBZGRyZXNzKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBCaW5kaW5nPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIEJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUEJpbmRpbmcoamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUE9wZXJhdGlvbihqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQVXJsRW5jb2RlZChqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQVXJsUmVwbGFjZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQob3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL0hUVFBTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTkwM2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVDb250ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db250ZW50PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQjZ2V0RVBhcnQgPGVtPkVQYXJ0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRUNvbnRlbnQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTUlNRUNvbnRlbnQgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlR5cGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlR5cGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRUeXBlKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRUNvbnRlbnRfVHlwZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFR5cGUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVQYXJ0KFBhcnQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2dldE1JTUVDb250ZW50X0VQYXJ0KCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFBhcnQgZ2V0RVBhcnQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50I2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RVBhcnQoUGFydCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRQYXJ0KFN0cmluZyBwYXJ0KTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRQYXJ0KCk7Ci0KLX0gLy8gTUlNRUNvbnRlbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGM0YTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNSU1FRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTUlNRUZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUZhY3RvcnlJbXBsLmluaXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db250ZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db250ZW50PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNSU1FQ29udGVudCBjcmVhdGVNSU1FQ29udGVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhcnQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVQYXJ0IGNyZWF0ZU1JTUVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBjcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pbWUgWG1sPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaW1lIFhtbDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTUlNRU1pbWVYbWwgY3JlYXRlTUlNRU1pbWVYbWwoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNSU1FUGFja2FnZSBnZXRNSU1FUGFja2FnZSgpOwotCi19IC8vTUlNRUZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTJkOGM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNaW1lWG1sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1pbWUgWG1sPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FTWltZVhtbCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNSU1FTWltZVhtbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVQYXJ0KFBhcnQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2dldE1JTUVNaW1lWG1sX0VQYXJ0KCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFBhcnQgZ2V0RVBhcnQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RVBhcnQoUGFydCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRQYXJ0KFN0cmluZyBwYXJ0KTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRQYXJ0KCk7Ci0KLX0gLy8gTUlNRU1pbWVYbWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDY1MGI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVNdWx0aXBhcnRSZWxhdGVkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpcGFydCBSZWxhdGVkPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCNnZXRFTUlNRVBhcnQgPGVtPkVNSU1FIFBhcnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1JTUUgUGFydDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU1JTUUgUGFydDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FTUlNRSBQYXJ0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RU1JTUVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBhZGRNSU1FUGFydChNSU1FUGFydCBtaW1lUGFydCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLkxpc3QiIG1hbnk9ImZhbHNlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBMaXN0IGdldE1JTUVQYXJ0cygpOwotCi19IC8vIE1JTUVNdWx0aXBhcnRSZWxhdGVkCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkzNzJkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUZhY3RvcnkKLSAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1JTUVQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UKLXsKLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5BTUUgPSAibWltZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOU19QUkVGSVggPSAibWltZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsIDxlbT5Db250ZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldE1JTUVDb250ZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX0NPTlRFTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVF9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9DT05URU5UX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX0NPTlRFTlRfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVF9fVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9DT05URU5UX19FUEFSVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvbnRlbnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9DT05URU5UX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhcnRJbXBsIDxlbT5QYXJ0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhcnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldE1JTUVQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE1JTUVfUEFSVCA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfUEFSVF9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9QQVJUX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlRfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfUEFSVF9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCA8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCA9IDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNSU1FIFBhcnQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU1pbWVYbWxJbXBsIDxlbT5NaW1lIFhtbDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNaW1lWG1sSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FTWltZVhtbCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MID0gMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfTUlNRV9YTUxfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfTUlNRV9YTUxfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfTUlNRV9YTUxfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfTUlNRV9YTUxfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19FUEFSVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1pbWUgWG1sPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfTUlNRV9YTUxfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCA8ZW0+SU1JTUUgUGFydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldElNSU1FUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTUlNRV9QQVJUID0gNDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNSU1FIFBhcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU1JTUVfUEFSVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCA8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRU11bHRpcGFydFJlbGF0ZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU1JTUVfTVVMVElQQVJUX1JFTEFURUQgPSA1OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU1JTUVfTVVMVElQQVJUX1JFTEFURURfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQgPGVtPklNSU1FIENvbnRlbnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRUNvbnRlbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU1JTUVfQ09OVEVOVCA9IDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBDb250ZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNSU1FX0NPTlRFTlRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwgPGVtPklNSU1FIE1pbWUgWG1sPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0SU1JTUVNaW1lWG1sKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElNSU1FX01JTUVfWE1MID0gNzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNSU1FIE1pbWUgWG1sPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNSU1FX01JTUVfWE1MX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkxpc3Q8L2VtPicgZGF0YSB0eXBlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZhLnV0aWwuTGlzdAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRMaXN0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IExJU1QgPSA4OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQgPGVtPkNvbnRlbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Q29udGVudDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE1JTUVDb250ZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50I2dldFR5cGUgPGVtPlR5cGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UeXBlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRUeXBlKCkKLSAgICogQHNlZSAjZ2V0TUlNRUNvbnRlbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE1JTUVDb250ZW50X1R5cGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQjZ2V0RVBhcnQgPGVtPkVQYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RVBhcnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50I2dldEVQYXJ0KCkKLSAgICogQHNlZSAjZ2V0TUlNRUNvbnRlbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldE1JTUVDb250ZW50X0VQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydCA8ZW0+UGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0TUlNRVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIDxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0I2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgKiBAc2VlICNnZXRNSU1FUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0TUlNRVBhcnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCNnZXRFTUlNRVBhcnQgPGVtPkVNSU1FIFBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVNSU1FIFBhcnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkI2dldEVNSU1FUGFydCgpCi0gICAqIEBzZWUgI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sIDxlbT5NaW1lIFhtbDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NaW1lIFhtbDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE1JTUVNaW1lWG1sKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVQYXJ0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbCNnZXRFUGFydCgpCi0gICAqIEBzZWUgI2dldE1JTUVNaW1lWG1sKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRNSU1FTWltZVhtbF9FUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCA8ZW0+SU1JTUUgUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTUlNRSBQYXJ0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElNSU1FUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCA8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SU1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IDxlbT5JTUlNRSBDb250ZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklNSU1FIENvbnRlbnQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SU1JTUVDb250ZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIDxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJTUlNRU1pbWVYbWwoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIGphdmEudXRpbC5MaXN0IDxlbT5MaXN0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5MaXN0PC9lbT4nLgotICAgKiBAc2VlIGphdmEudXRpbC5MaXN0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLnV0aWwuTGlzdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRURhdGFUeXBlIGdldExpc3QoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTUlNRUZhY3RvcnkgZ2V0TUlNRUZhY3RvcnkoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotICAgKiA8dWw+Ci0gICAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAgICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAgICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gICAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnRlcmZhY2UgTGl0ZXJhbHMKLSAgewotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FQ29udGVudEltcGwgPGVtPkNvbnRlbnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FQ29udGVudEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FQ29udGVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBNSU1FX0NPTlRFTlQgPSBlSU5TVEFOQ0UuZ2V0TUlNRUNvbnRlbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE1JTUVfQ09OVEVOVF9fVFlQRSA9IGVJTlNUQU5DRS5nZXRNSU1FQ29udGVudF9UeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgTUlNRV9DT05URU5UX19FUEFSVCA9IGVJTlNUQU5DRS5nZXRNSU1FQ29udGVudF9FUGFydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYXJ0SW1wbCA8ZW0+UGFydDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYXJ0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldE1JTUVQYXJ0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE1JTUVfUEFSVCA9IGVJTlNUQU5DRS5nZXRNSU1FUGFydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IGVJTlNUQU5DRS5nZXRNSU1FUGFydF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsIDxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE1JTUVfTVVMVElQQVJUX1JFTEFURUQgPSBlSU5TVEFOQ0UuZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTUlNRSBQYXJ0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVCA9IGVJTlNUQU5DRS5nZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTWltZVhtbEltcGwgPGVtPk1pbWUgWG1sPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU1pbWVYbWxJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TUlNRU1pbWVYbWwoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgTUlNRV9NSU1FX1hNTCA9IGVJTlNUQU5DRS5nZXRNSU1FTWltZVhtbCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1JTUVfTUlNRV9YTUxfX0VQQVJUID0gZUlOU1RBTkNFLmdldE1JTUVNaW1lWG1sX0VQYXJ0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgPGVtPklNSU1FIFBhcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldElNSU1FUGFydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTUlNRV9QQVJUID0gZUlOU1RBTkNFLmdldElNSU1FUGFydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIDxlbT5JTUlNRSBNdWx0aXBhcnQgUmVsYXRlZDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0SU1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElNSU1FX01VTFRJUEFSVF9SRUxBVEVEID0gZUlOU1RBTkNFLmdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IDxlbT5JTUlNRSBDb250ZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRUNvbnRlbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU1JTUVfQ09OVEVOVCA9IGVJTlNUQU5DRS5nZXRJTUlNRUNvbnRlbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCA8ZW0+SU1JTUUgTWltZSBYbWw8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldElNSU1FTWltZVhtbCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTUlNRV9NSU1FX1hNTCA9IGVJTlNUQU5DRS5nZXRJTUlNRU1pbWVYbWwoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5MaXN0PC9lbT4nIGRhdGEgdHlwZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YS51dGlsLkxpc3QKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRMaXN0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRURhdGFUeXBlIExJU1QgPSBlSU5TVEFOQ0UuZ2V0TGlzdCgpOwotCi0gIH0KLQotfSAvL01JTUVQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkyNGFiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FUGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cyA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FUGFydCgpCi0gKiBAbW9kZWwgc3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLklNSU1FUGFydCIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNSU1FUGFydCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2dldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTGlzdCIgbWFueT0iZmFsc2UiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLX0gLy8gTUlNRVBhcnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRUNvbnRlbnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVDb250ZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWFjMzA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRUNvbnRlbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db250ZW50PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FQ29udGVudEltcGwjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVDb250ZW50SW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE1JTUVDb250ZW50Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZSgpIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGUoKSA8ZW0+VHlwZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZSA9IFRZUEVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQYXJ0KCkgPGVtPkVQYXJ0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBQYXJ0IGVQYXJ0ID0gbnVsbDsKLQotICBwcml2YXRlIFN0cmluZyBwYXJ0OyAvLyBUQkQKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBNSU1FQ29udGVudEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfQ09OVEVOVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0eXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyBuZXdUeXBlKQotICB7Ci0gICAgU3RyaW5nIG9sZFR5cGUgPSB0eXBlOwotICAgIHR5cGUgPSBuZXdUeXBlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fVFlQRSwgb2xkVHlwZSwgdHlwZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUGFydCBnZXRFUGFydCgpCi0gIHsKLSAgICBpZiAoZVBhcnQgIT0gbnVsbCAmJiBlUGFydC5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFUGFydCA9IChJbnRlcm5hbEVPYmplY3QpZVBhcnQ7Ci0gICAgICBlUGFydCA9IChQYXJ0KWVSZXNvbHZlUHJveHkob2xkRVBhcnQpOwotICAgICAgaWYgKGVQYXJ0ICE9IG9sZEVQYXJ0KQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRVBBUlQsIG9sZEVQYXJ0LCBlUGFydCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZVBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGJhc2ljR2V0RVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFUGFydChQYXJ0IG5ld0VQYXJ0KQotICB7Ci0gICAgUGFydCBvbGRFUGFydCA9IGVQYXJ0OwotICAgIGVQYXJ0ID0gbmV3RVBhcnQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19FUEFSVCwgb2xkRVBhcnQsIGVQYXJ0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJ0KFN0cmluZyBwYXJ0KQotICB7Ci0gICAgdGhpcy5wYXJ0ID0gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFydCgpCi0gIHsKLSAgICByZXR1cm4gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19UWVBFOgotICAgICAgcmV0dXJuIGdldFR5cGUoKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19FUEFSVDoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RVBhcnQoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVQYXJ0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19UWVBFOgotICAgICAgc2V0VHlwZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19FUEFSVDoKLSAgICAgIHNldEVQYXJ0KChQYXJ0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fVFlQRToKLSAgICAgIHNldFR5cGUoVFlQRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRVBBUlQ6Ci0gICAgICBzZXRFUGFydCgoUGFydCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX1RZUEU6Ci0gICAgICByZXR1cm4gVFlQRV9FREVGQVVMVCA9PSBudWxsID8gdHlwZSAhPSBudWxsIDogIVRZUEVfRURFRkFVTFQuZXF1YWxzKHR5cGUpOwotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX0VQQVJUOgotICAgICAgcmV0dXJuIGVQYXJ0ICE9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh0eXBlOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzOiBET00gLT4gTW9kZWwKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXRQYXJ0KE1JTUVDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBNSU1FQ29uc3RhbnRzLlBBUlRfQVRUUklCVVRFKSk7Ci0gICAgc2V0VHlwZShNSU1FQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgTUlNRUNvbnN0YW50cy5UWVBFX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfQ09OVEVOVF9fRVBBUlQpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgTUlNRUNvbnN0YW50cy5QQVJUX0FUVFJJQlVURSwgZ2V0UGFydCgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBNSU1FUGFja2FnZS5MaXRlcmFscy5NSU1FX0NPTlRFTlRfX1RZUEUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgTUlNRUNvbnN0YW50cy5UWVBFX0FUVFJJQlVURSwgZ2V0VHlwZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgTUlNRUNvbnN0YW50cy5DT05URU5UX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL01JTUVDb250ZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWJjYWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIE1JTUVGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1JTUVGYWN0b3J5IGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTUlNRUZhY3RvcnkgdGhlTUlNRUZhY3RvcnkgPSAoTUlNRUZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiKTsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIGlmICh0aGVNSU1FRmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdGhlTUlNRUZhY3Rvcnk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIEVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IE1JTUVGYWN0b3J5SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRUZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKQotICB7Ci0gICAgc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlTUlNRUNvbnRlbnQoKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUOgotICAgICAgcmV0dXJuIGNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURUQ6Ci0gICAgICByZXR1cm4gY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTDoKLSAgICAgIHJldHVybiBjcmVhdGVNSU1FTWltZVhtbCgpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLkxJU1Q6Ci0gICAgICByZXR1cm4gY3JlYXRlTGlzdEZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLkxJU1Q6Ci0gICAgICByZXR1cm4gY29udmVydExpc3RUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVDb250ZW50IGNyZWF0ZU1JTUVDb250ZW50KCkKLSAgewotICAgIE1JTUVDb250ZW50SW1wbCBtaW1lQ29udGVudCA9IG5ldyBNSU1FQ29udGVudEltcGwoKTsKLSAgICByZXR1cm4gbWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNSU1FUGFydCBjcmVhdGVNSU1FUGFydCgpCi0gIHsKLSAgICBNSU1FUGFydEltcGwgbWltZVBhcnQgPSBuZXcgTUlNRVBhcnRJbXBsKCk7Ci0gICAgcmV0dXJuIG1pbWVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRU11bHRpcGFydFJlbGF0ZWQgY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKQotICB7Ci0gICAgTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsIG1pbWVNdWx0aXBhcnRSZWxhdGVkID0gbmV3IE1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCgpOwotICAgIHJldHVybiBtaW1lTXVsdGlwYXJ0UmVsYXRlZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVNaW1lWG1sIGNyZWF0ZU1JTUVNaW1lWG1sKCkKLSAgewotICAgIE1JTUVNaW1lWG1sSW1wbCBtaW1lTWltZVhtbCA9IG5ldyBNSU1FTWltZVhtbEltcGwoKTsKLSAgICByZXR1cm4gbWltZU1pbWVYbWw7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBMaXN0IGNyZWF0ZUxpc3RGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gKExpc3Qpc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydExpc3RUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVQYWNrYWdlIGdldE1JTUVQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiAoTUlNRVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBNSU1FUGFja2FnZSBnZXRQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiBNSU1FUGFja2FnZS5lSU5TVEFOQ0U7Ci0gIH0KLX0gLy9NSU1FRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU1pbWVYbWxJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVNaW1lWG1sSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGY5NTc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU1pbWVYbWxJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaW1lIFhtbDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU1pbWVYbWxJbXBsI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVNaW1lWG1sSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE1JTUVNaW1lWG1sCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUGFydCgpIDxlbT5FUGFydDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUGFydCBlUGFydCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgcGFydDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBNSU1FTWltZVhtbEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfTUlNRV9YTUw7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGdldEVQYXJ0KCkKLSAgewotICAgIGlmIChlUGFydCAhPSBudWxsICYmIGVQYXJ0LmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVQYXJ0ID0gKEludGVybmFsRU9iamVjdCllUGFydDsKLSAgICAgIGVQYXJ0ID0gKFBhcnQpZVJlc29sdmVQcm94eShvbGRFUGFydCk7Ci0gICAgICBpZiAoZVBhcnQgIT0gb2xkRVBhcnQpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRVBBUlQsIG9sZEVQYXJ0LCBlUGFydCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZVBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGJhc2ljR2V0RVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFUGFydChQYXJ0IG5ld0VQYXJ0KQotICB7Ci0gICAgUGFydCBvbGRFUGFydCA9IGVQYXJ0OwotICAgIGVQYXJ0ID0gbmV3RVBhcnQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRVBBUlQsIG9sZEVQYXJ0LCBlUGFydCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFydChTdHJpbmcgcGFydCkKLSAgewotICAgIHRoaXMucGFydCA9IHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VQQVJUOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFUGFydCgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RVBhcnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01JTUVfWE1MX19FUEFSVDoKLSAgICAgIHNldEVQYXJ0KChQYXJ0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VQQVJUOgotICAgICAgc2V0RVBhcnQoKFBhcnQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRVBBUlQ6Ci0gICAgICByZXR1cm4gZVBhcnQgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldFBhcnQoTUlNRUNvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIE1JTUVDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBNSU1FUGFja2FnZS5MaXRlcmFscy5NSU1FX0NPTlRFTlRfX0VQQVJUKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIE1JTUVDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUsIGdldFBhcnQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkksIE1JTUVDb25zdGFudHMuTUlNRV9YTUxfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotfSAvL01JTUVNaW1lWG1sSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NTRmMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCNnZXRFTUlNRVBhcnQgPGVtPkVNSU1FIFBhcnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBNSU1FTXVsdGlwYXJ0UmVsYXRlZAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RU1JTUVQYXJ0KCkgPGVtPkVNSU1FIFBhcnQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU1JTUVQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVNSU1FUGFydDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBNSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfTVVMVElQQVJUX1JFTEFURUQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFTUlNRVBhcnQoKQotICB7Ci0gICAgaWYgKGVNSU1FUGFydCA9PSBudWxsKQotICAgIHsKLSAgICAgIGVNSU1FUGFydCA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChNSU1FUGFydC5jbGFzcywgdGhpcywgTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVCk7Ci0gICAgfQotICAgIHJldHVybiBlTUlNRVBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNSU1FUGFydChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCBtaW1lUGFydCkKLSAgewotICAgIGdldEVNSU1FUGFydCgpLmFkZChtaW1lUGFydCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRNSU1FUGFydHMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVNSU1FUGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFTUlNRVBhcnQoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQ6Ci0gICAgICByZXR1cm4gZ2V0RU1JTUVQYXJ0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVDoKLSAgICAgIGdldEVNSU1FUGFydCgpLmNsZWFyKCk7Ci0gICAgICBnZXRFTUlNRVBhcnQoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVDoKLSAgICAgIGdldEVNSU1FUGFydCgpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVDoKLSAgICAgIHJldHVybiBlTUlNRVBhcnQgIT0gbnVsbCAmJiAhZU1JTUVQYXJ0LmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGlmIChNSU1FQ29uc3RhbnRzLlBBUlRfRUxFTUVOVF9UQUcuZXF1YWxzKGNoaWxkLmdldExvY2FsTmFtZSgpKSkKLSAgICB7Ci0gICAgICBNSU1FUGFydCBtaW1lUGFydCA9IE1JTUVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNSU1FUGFydCgpOwotICAgICAgbWltZVBhcnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgbWltZVBhcnQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICBhZGRNSU1FUGFydChtaW1lUGFydCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkksIE1JTUVDb25zdGFudHMuTVVMVElQQVJUX1JFTEFURURfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCNjcmVhdGVFbGVtZW50KCkKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gc3VwZXIuY3JlYXRlRWxlbWVudCgpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRNSU1FUGFydHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBNSU1FUGFydCkKLSAgICAgIHsKLSAgICAgICAgTUlNRVBhcnQgbWltZVBhcnQgPSAoTUlNRVBhcnQpb2JqOwotICAgICAgICBFbGVtZW50IGNoaWxkID0gKChNSU1FUGFydEltcGwpbWltZVBhcnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci19IC8vTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FUGFja2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYWU3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFja2FnZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIE1JTUVQYWNrYWdlCi17Ci0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgbWltZUNvbnRlbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgbWltZVBhcnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgbWltZU1pbWVYbWxFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaW1pbWVQYXJ0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGltaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpbWltZUNvbnRlbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaW1pbWVNaW1lWG1sRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRURhdGFUeXBlIGxpc3RFRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0gICAqIHBhY2thZ2UgVVJJIHZhbHVlLgotICAgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0gICAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0gICAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0gICAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2VOU19VUkkKLSAgICogQHNlZSAjaW5pdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgTUlNRVBhY2thZ2VJbXBsKCkKLSAgewotICAgIHN1cGVyKGVOU19VUkksIE1JTUVGYWN0b3J5LmVJTlNUQU5DRSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0gICAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0gICAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0gICAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotICAgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0gICAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0gICAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLSAgICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0gICAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLSAgICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLSAgICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLSAgICogdGhvc2Ugb2YgYW5vdGhlci4KLSAgICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotICAgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNlTlNfVVJJCi0gICAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1JTUVQYWNrYWdlIGluaXQoKQotICB7Ci0gICAgaWYgKGlzSW5pdGVkKQotICAgICAgcmV0dXJuIChNSU1FUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNSU1FUGFja2FnZS5lTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLSAgICBNSU1FUGFja2FnZUltcGwgdGhlTUlNRVBhY2thZ2UgPSAoTUlNRVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIE1JTUVQYWNrYWdlSW1wbAotICAgICAgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBNSU1FUGFja2FnZUltcGwoKSk7Ci0KLSAgICBpc0luaXRlZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLSAgICBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7Ci0gICAgWFNEUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7Ci0KLSAgICAvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotICAgIHRoZU1JTUVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotICAgIHRoZU1JTUVQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLSAgICB0aGVNSU1FUGFja2FnZS5mcmVlemUoKTsKLQotICAgIHJldHVybiB0aGVNSU1FUGFja2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRNSU1FQ29udGVudCgpCi0gIHsKLSAgICByZXR1cm4gbWltZUNvbnRlbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE1JTUVDb250ZW50X1R5cGUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW1pbWVDb250ZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE1JTUVDb250ZW50X0VQYXJ0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSltaW1lQ29udGVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE1JTUVQYXJ0KCkKLSAgewotICAgIHJldHVybiBtaW1lUGFydEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0TUlNRVBhcnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpbWltZVBhcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE1JTUVNdWx0aXBhcnRSZWxhdGVkX0VNSU1FUGFydCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRNSU1FTWltZVhtbCgpCi0gIHsKLSAgICByZXR1cm4gbWltZU1pbWVYbWxFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE1JTUVNaW1lWG1sX0VQYXJ0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSltaW1lTWltZVhtbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElNSU1FUGFydCgpCi0gIHsKLSAgICByZXR1cm4gaW1pbWVQYXJ0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gaW1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElNSU1FQ29udGVudCgpCi0gIHsKLSAgICByZXR1cm4gaW1pbWVDb250ZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElNSU1FTWltZVhtbCgpCi0gIHsKLSAgICByZXR1cm4gaW1pbWVNaW1lWG1sRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRURhdGFUeXBlIGdldExpc3QoKQotICB7Ci0gICAgcmV0dXJuIGxpc3RFRGF0YVR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNSU1FRmFjdG9yeSBnZXRNSU1FRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gKE1JTUVGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLSAgICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgewotICAgIGlmIChpc0NyZWF0ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNDcmVhdGVkID0gdHJ1ZTsKLQotICAgIC8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotICAgIG1pbWVDb250ZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JTUVfQ09OVEVOVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShtaW1lQ29udGVudEVDbGFzcywgTUlNRV9DT05URU5UX19UWVBFKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG1pbWVDb250ZW50RUNsYXNzLCBNSU1FX0NPTlRFTlRfX0VQQVJUKTsKLQotICAgIG1pbWVQYXJ0RUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JTUVfUEFSVCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShtaW1lUGFydEVDbGFzcywgTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyk7Ci0KLSAgICBtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNSU1FX01VTFRJUEFSVF9SRUxBVEVEKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzLCBNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUKTsKLQotICAgIG1pbWVNaW1lWG1sRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JTUVfTUlNRV9YTUwpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UobWltZU1pbWVYbWxFQ2xhc3MsIE1JTUVfTUlNRV9YTUxfX0VQQVJUKTsKLQotICAgIGltaW1lUGFydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTUlNRV9QQVJUKTsKLQotICAgIGltaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCk7Ci0KLSAgICBpbWltZUNvbnRlbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU1JTUVfQ09OVEVOVCk7Ci0KLSAgICBpbWltZU1pbWVYbWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU1JTUVfTUlNRV9YTUwpOwotCi0gICAgLy8gQ3JlYXRlIGRhdGEgdHlwZXMKLSAgICBsaXN0RURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKExJU1QpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcwotICAgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0gIHsKLSAgICBpZiAoaXNJbml0aWFsaXplZCkKLSAgICAgIHJldHVybjsKLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIC8vIEluaXRpYWxpemUgcGFja2FnZQotICAgIHNldE5hbWUoZU5BTUUpOwotICAgIHNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotICAgIHNldE5zVVJJKGVOU19VUkkpOwotCi0gICAgLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcwotICAgIFdTRExQYWNrYWdlIHRoZVdTRExQYWNrYWdlID0gKFdTRExQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFdTRExQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotICAgIG1pbWVDb250ZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIG1pbWVDb250ZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU1JTUVDb250ZW50KCkpOwotICAgIG1pbWVQYXJ0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIG1pbWVQYXJ0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU1JTUVQYXJ0KCkpOwotICAgIG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU1JTUVNdWx0aXBhcnRSZWxhdGVkKCkpOwotICAgIG1pbWVNaW1lWG1sRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIG1pbWVNaW1lWG1sRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU1JTUVNaW1lWG1sKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLSAgICBpbml0RUNsYXNzKG1pbWVDb250ZW50RUNsYXNzLCBNSU1FQ29udGVudC5jbGFzcywgIk1JTUVDb250ZW50IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRNSU1FQ29udGVudF9UeXBlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInR5cGUiLCBudWxsLCAwLCAxLCBNSU1FQ29udGVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKSwKLSAgICAgIHRoZVdTRExQYWNrYWdlLmdldFBhcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBhcnQiLCBudWxsLCAwLCAxLCBNSU1FQ29udGVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgRU9wZXJhdGlvbiBvcCA9IGFkZEVPcGVyYXRpb24obWltZUNvbnRlbnRFQ2xhc3MsIG51bGwsICJzZXRQYXJ0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicGFydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKG1pbWVDb250ZW50RUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZ2V0UGFydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKG1pbWVQYXJ0RUNsYXNzLCBNSU1FUGFydC5jbGFzcywgIk1JTUVQYXJ0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRNSU1FUGFydF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIiwgbnVsbCwgMCwgLTEsIE1JTUVQYXJ0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24obWltZVBhcnRFQ2xhc3MsIG51bGwsICJhZGRFeHRlbnNpYmlsaXR5RWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhlV1NETFBhY2thZ2UuZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCksICJleHRlbnNpYmlsaXR5RWxlbWVudCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKG1pbWVQYXJ0RUNsYXNzLCB0aGlzLmdldExpc3QoKSwgImdldEV4dGVuc2liaWxpdHlFbGVtZW50cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MsCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZC5jbGFzcywKLSAgICAgICJNSU1FTXVsdGlwYXJ0UmVsYXRlZCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0KCksCi0gICAgICB0aGlzLmdldE1JTUVQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVNSU1FUGFydCIsIG51bGwsIDAsIC0xLCBNSU1FTXVsdGlwYXJ0UmVsYXRlZC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzLCBudWxsLCAiYWRkTUlNRVBhcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SU1JTUVQYXJ0KCksICJtaW1lUGFydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzLCB0aGlzLmdldExpc3QoKSwgImdldE1JTUVQYXJ0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKG1pbWVNaW1lWG1sRUNsYXNzLCBNSU1FTWltZVhtbC5jbGFzcywgIk1JTUVNaW1lWG1sIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRNSU1FTWltZVhtbF9FUGFydCgpLAotICAgICAgdGhlV1NETFBhY2thZ2UuZ2V0UGFydCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlUGFydCIsIG51bGwsIDAsIDEsIE1JTUVNaW1lWG1sLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24obWltZU1pbWVYbWxFQ2xhc3MsIG51bGwsICJzZXRQYXJ0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicGFydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBhZGRFT3BlcmF0aW9uKG1pbWVNaW1lWG1sRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZ2V0UGFydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaW1pbWVQYXJ0RUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQuY2xhc3MsCi0gICAgICAiSU1JTUVQYXJ0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZC5jbGFzcywKLSAgICAgICJJTUlNRU11bHRpcGFydFJlbGF0ZWQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGltaW1lQ29udGVudEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50LmNsYXNzLAotICAgICAgIklNSU1FQ29udGVudCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaW1pbWVNaW1lWG1sRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwuY2xhc3MsCi0gICAgICAiSU1JTUVNaW1lWG1sIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIEluaXRpYWxpemUgZGF0YSB0eXBlcwotICAgIGluaXRFRGF0YVR5cGUobGlzdEVEYXRhVHlwZSwgTGlzdC5jbGFzcywgIkxpc3QiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2UKLSAgICBjcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKLSAgfQotfSAvL01JTUVQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FUGFydEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRVBhcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYWFmY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FUGFydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFydEltcGwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cyA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FUGFydEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBNSU1FUGFydAotewotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUV4dGVuc2liaWxpdHlFbGVtZW50czsKLQotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBNSU1FUGFydEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfUEFSVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICB7Ci0gICAgaWYgKGVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLCB0aGlzLCBNSU1FUGFja2FnZS5NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVFeHRlbnNpYmlsaXR5RWxlbWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgewotICAgIGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5jbGVhcigpOwotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzICE9IG51bGwgJiYgIWVFeHRlbnNpYmlsaXR5RWxlbWVudHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGlhdGlvbjogRE9NIC0+IE1PREVMCi0gIC8vCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBpZiAoIVdTRExDb25zdGFudHMuaXNNYXRjaGluZ05hbWVzcGFjZShjaGlsZC5nZXROYW1lc3BhY2VVUkkoKSwgV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpKQotICAgIHsKLSAgICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzKCkKLSAgICAgICAgPyAoKFdTRExGYWN0b3J5SW1wbClXU0RMRmFjdG9yeS5lSU5TVEFOQ0UpLmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KGdldE5hbWVzcGFjZShjaGlsZCksIGdldExvY2FsTmFtZShjaGlsZCkpCi0gICAgICAgIDogKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICBhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHVzZUV4dGVuc2lvbkZhY3RvcmllcygpCi0gIHsKLSAgICAvLyBVc2UgZXh0ZW5zaW9uIGZhY3RvcmllcyBieSBkZWZhdWx0LgotICAgIHJldHVybiBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkgPT0gbnVsbCA/IHRydWUgOiAoKERlZmluaXRpb25JbXBsKWdldEVuY2xvc2luZ0RlZmluaXRpb24oKSkuZ2V0VXNlRXh0ZW5zaW9uRmFjdG9yaWVzKCk7Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgTUlNRUNvbnN0YW50cy5QQVJUX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwjY3JlYXRlRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IHN1cGVyLmNyZWF0ZUVsZW1lbnQoKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRlbnNpYmlsaXR5RWxlbWVudCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9NSU1FUGFydEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzhlNGU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsOwotCi0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBNSU1FUGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNSU1FQWRhcHRlckZhY3RvcnkoKQotICB7Ci0gICAgaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsUGFja2FnZSA9IE1JTUVQYWNrYWdlLmVJTlNUQU5DRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTUlNRVN3aXRjaCBtb2RlbFN3aXRjaCA9IG5ldyBNSU1FU3dpdGNoKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FQ29udGVudChNSU1FQ29udGVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVNSU1FQ29udGVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlTUlNRVBhcnQoTUlNRVBhcnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlTUlNRVBhcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZU1JTUVNdWx0aXBhcnRSZWxhdGVkKE1JTUVNdWx0aXBhcnRSZWxhdGVkIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU1JTUVNdWx0aXBhcnRSZWxhdGVkQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FTWltZVhtbChNSU1FTWltZVhtbCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVNSU1FTWltZVhtbEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVQYXJ0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNSU1FUGFydEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVNdWx0aXBhcnRSZWxhdGVkKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNSU1FTXVsdGlwYXJ0UmVsYXRlZEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVDb250ZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNSU1FQ29udGVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVNaW1lWG1sKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNSU1FTWltZVhtbEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLSAgICAgIH0KLSAgICB9OwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotICAgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpCi0gIHsKLSAgICByZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCA8ZW0+Q29udGVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlTUlNRUNvbnRlbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0IDxlbT5QYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVNSU1FUGFydEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwgPGVtPk1pbWUgWG1sPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVNSU1FTWltZVhtbEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCA8ZW0+SU1JTUUgUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTUlNRVBhcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlNSU1FTXVsdGlwYXJ0UmVsYXRlZEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCA8ZW0+SU1JTUUgQ29udGVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTUlNRUNvbnRlbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwgPGVtPklNSU1FIE1pbWUgWG1sPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlNSU1FTWltZVhtbEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCA8ZW0+RWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL01JTUVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2MzI3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgTUlNRUNvbnN0YW50cwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX0VMRU1FTlRfVEFHID0gImNvbnRlbnQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9YTUxfRUxFTUVOVF9UQUcgPSAibWltZVhtbCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNVUxUSVBBUlRfUkVMQVRFRF9FTEVNRU5UX1RBRyA9ICJtdWx0aXBhcnRSZWxhdGVkIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlRfRUxFTUVOVF9UQUcgPSAicGFydCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX05BTUVTUEFDRV9VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0FUVFJJQlVURSA9ICJwYXJ0IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfQVRUUklCVVRFID0gInR5cGUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgPyBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA6IG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyY2I4YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLQotCi1wdWJsaWMgY2xhc3MgTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBpbXBsZW1lbnRzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotewotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIGlmIChNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBpZiAoTUlNRUNvbnN0YW50cy5DT05URU5UX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVDb250ZW50KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChNSU1FQ29uc3RhbnRzLk1JTUVfWE1MX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVNaW1lWG1sKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChNSU1FQ29uc3RhbnRzLk1VTFRJUEFSVF9SRUxBVEVEX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0gICAgICB9Ci0gICAgICAvKiBUT0RPIC0gZml4IHRoZSByb3NlIG1vZGVsCi0gICAgICAgZWxzZSBpZiAoInBhcnQiLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgIHsKLSAgICAgICByZXR1cm4gTUlNRUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgICAgfQotICAgICAgICovCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbG9jYWxOYW1lOiAiICsgbG9jYWxOYW1lKTsKLSAgICAgICAgcmV0dXJuIFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbmFtZXNwYWNlOiAiICsgbmFtZXNwYWNlKTsKLSAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRVN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTcxOGIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRVN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FU3dpdGNoCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgTUlNRVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRVN3aXRjaCgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gTUlNRVBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0gICAgICByZXR1cm4gZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8gZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOiBkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBzd2l0Y2ggKGNsYXNzaWZpZXJJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVDoKLSAgICAgIHsKLSAgICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSAoTUlNRUNvbnRlbnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VNSU1FQ29udGVudChtaW1lQ29udGVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQobWltZUNvbnRlbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlNSU1FQ29udGVudChtaW1lQ29udGVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQobWltZUNvbnRlbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lQ29udGVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUOgotICAgICAgewotICAgICAgICBNSU1FUGFydCBtaW1lUGFydCA9IChNSU1FUGFydCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU1JTUVQYXJ0KG1pbWVQYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lUGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU1JTUVQYXJ0KG1pbWVQYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChtaW1lUGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVQYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEOgotICAgICAgewotICAgICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lTXVsdGlwYXJ0UmVsYXRlZCA9IChNSU1FTXVsdGlwYXJ0UmVsYXRlZCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU1JTUVNdWx0aXBhcnRSZWxhdGVkKG1pbWVNdWx0aXBhcnRSZWxhdGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lTXVsdGlwYXJ0UmVsYXRlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU1JTUVNdWx0aXBhcnRSZWxhdGVkKG1pbWVNdWx0aXBhcnRSZWxhdGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChtaW1lTXVsdGlwYXJ0UmVsYXRlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVNdWx0aXBhcnRSZWxhdGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01JTUVfWE1MOgotICAgICAgewotICAgICAgICBNSU1FTWltZVhtbCBtaW1lTWltZVhtbCA9IChNSU1FTWltZVhtbCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU1JTUVNaW1lWG1sKG1pbWVNaW1lWG1sKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lTWltZVhtbCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU1JTUVNaW1lWG1sKG1pbWVNaW1lWG1sKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChtaW1lTWltZVhtbCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVNaW1lWG1sKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29udGVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbnRlbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FQ29udGVudChNSU1FQ29udGVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU1JTUVQYXJ0KE1JTUVQYXJ0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FTXVsdGlwYXJ0UmVsYXRlZChNSU1FTXVsdGlwYXJ0UmVsYXRlZCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaW1lIFhtbDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1pbWUgWG1sPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlTUlNRU1pbWVYbWwoTUlNRU1pbWVYbWwgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgUGFydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNSU1FIFBhcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJTUlNRVBhcnQoamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTUlNRSBNdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FTXVsdGlwYXJ0UmVsYXRlZChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTUlNRSBDb250ZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgQ29udGVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FQ29udGVudChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNSU1FIE1pbWUgWG1sPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVNaW1lWG1sKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQob3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9NSU1FU3dpdGNoCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlZDBjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQWRkcmVzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWRkcmVzczwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBBZGRyZXNzKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBBZGRyZXNzIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzCi17Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRMb2NhdGlvblVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gU09BUEFkZHJlc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWIzNThiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRUcmFuc3BvcnRVUkkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQmluZGluZygpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTT0FQQmluZGluZyBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZwotewotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc3BvcnQgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VHJhbnNwb3J0VVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEJpbmRpbmdfVHJhbnNwb3J0VVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRUcmFuc3BvcnRVUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nI2dldFRyYW5zcG9ydFVSSSA8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFRyYW5zcG9ydFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VHJhbnNwb3J0VVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRTdHlsZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBCaW5kaW5nX1N0eWxlKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRTdHlsZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmcjZ2V0U3R5bGUgPGVtPlN0eWxlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRTdHlsZShTdHJpbmcgdmFsdWUpOwotfSAvLyBTT0FQQmluZGluZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNmMwZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJvZHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Qm9keTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFRW5jb2RpbmdTdHlsZXMgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFUGFydHMgPGVtPkVQYXJ0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBCb2R5KCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBCb2R5IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5Ci17Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVc2UoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQm9keV9Vc2UoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFVzZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0VXNlIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VXNlKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lc3BhY2VVUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQm9keV9OYW1lc3BhY2VVUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzKCkKLSAgICogQG1vZGVsIHR5cGU9ImphdmEubGFuZy5TdHJpbmciIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVN0cmluZyIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJ0czwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydHM8L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBCb2R5X0VQYXJ0cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFUGFydHMoKTsKLX0gLy8gU09BUEJvZHkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjBlMzY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeQotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYWN0b3J5SW1wbC5pbml0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEJpbmRpbmcgY3JlYXRlU09BUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Cb2R5PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Cb2R5PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQQm9keSBjcmVhdGVTT0FQQm9keSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlciBCYXNlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXIgQmFzZTwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEhlYWRlckJhc2UgY3JlYXRlU09BUEhlYWRlckJhc2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBGYXVsdCBjcmVhdGVTT0FQRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUE9wZXJhdGlvbiBjcmVhdGVTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEFkZHJlc3MgY3JlYXRlU09BUEFkZHJlc3MoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEhlYWRlckZhdWx0IGNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlcjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQSGVhZGVyIGNyZWF0ZVNPQVBIZWFkZXIoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQUGFja2FnZSBnZXRTT0FQUGFja2FnZSgpOwotfSAvL1NPQVBGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzQ1ZjhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBGYXVsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQRmF1bHQoKQotICogQG1vZGVsIGZlYXR1cmVzPSJlRW5jb2RpbmdTdHlsZXMiIAotICogICAgICAgIGVFbmNvZGluZ1N0eWxlc1R5cGU9ImphdmEubGFuZy5TdHJpbmciIGVFbmNvZGluZ1N0eWxlc0RhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVN0cmluZyIgZUVuY29kaW5nU3R5bGVzTWFueT0idHJ1ZSIgZUVuY29kaW5nU3R5bGVzU3VwcHJlc3NlZEdldFZpc2liaWxpdHk9InRydWUiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUEZhdWx0IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdAotewotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VXNlKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEZhdWx0X1VzZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0VXNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0VXNlIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VXNlKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lc3BhY2VVUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdCNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWVzcGFjZVVSSShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBGYXVsdF9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBTT0FQRmF1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdmMWY1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyI2dldEhlYWRlckZhdWx0cyA8ZW0+SGVhZGVyIEZhdWx0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXIoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUEhlYWRlciBleHRlbmRzIFNPQVBIZWFkZXJCYXNlLCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5IZWFkZXIgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SGVhZGVyIEZhdWx0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5IZWFkZXIgRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyX0hlYWRlckZhdWx0cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0SGVhZGVyRmF1bHRzKCk7Ci0KLX0gLy8gU09BUEhlYWRlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NzM1MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckJhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlciBCYXNlPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRVc2UgPGVtPlVzZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVFbmNvZGluZ1N0eWxlcyA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldE1lc3NhZ2UgPGVtPk1lc3NhZ2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRQYXJ0IDxlbT5QYXJ0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RVBhcnQgPGVtPkVQYXJ0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlckJhc2UoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUEhlYWRlckJhc2UgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFVzZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJCYXNlX1VzZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0VXNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRVc2UgPGVtPlVzZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VXNlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0VXNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRVc2UoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWVzcGFjZVVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWVzcGFjZVVSSShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9FRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAbW9kZWwgdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5JU3RyaW5nIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVNZXNzYWdlKE1lc3NhZ2UpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJCYXNlX0VNZXNzYWdlKCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNZXNzYWdlIGdldEVNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVNZXNzYWdlKE1lc3NhZ2UgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RVBhcnQoUGFydCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlckJhc2VfRVBhcnQoKQotICAgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFBhcnQgZ2V0RVBhcnQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RVBhcnQoUGFydCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1lc3NhZ2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRNZXNzYWdlKFFOYW1lKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5RTmFtZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUU5hbWUgZ2V0TWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0TWVzc2FnZSA8ZW0+TWVzc2FnZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWVzc2FnZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE1lc3NhZ2UoUU5hbWUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UGFydChTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJCYXNlX1BhcnQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFBhcnQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldFBhcnQgPGVtPlBhcnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRQYXJ0KFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIiBtYW55PSJmYWxzZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTGlzdCBnZXRFbmNvZGluZ1N0eWxlcygpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGVuY29kaW5nU3R5bGVzTWFueT0iZmFsc2UiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RW5jb2RpbmdTdHlsZXMoTGlzdCBlbmNvZGluZ1N0eWxlcyk7Ci0KLX0gLy8gU09BUEhlYWRlckJhc2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NzJhODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlckZhdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlciBGYXVsdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBIZWFkZXJGYXVsdCBleHRlbmRzIFNPQVBIZWFkZXJCYXNlLCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQKLXsKLX0gLy8gU09BUEhlYWRlckZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYTZhNTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFNvYXBBY3Rpb25VUkkgPGVtPlNvYXAgQWN0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24jZ2V0U3R5bGUgPGVtPlN0eWxlPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUE9wZXJhdGlvbigpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTT0FQT3BlcmF0aW9uIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24KLXsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U29hcCBBY3Rpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNvYXAgQWN0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFNvYXBBY3Rpb25VUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFNvYXBBY3Rpb25VUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24jZ2V0U29hcEFjdGlvblVSSSA8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRTb2FwQWN0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRTb2FwQWN0aW9uVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRTdHlsZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBPcGVyYXRpb25fU3R5bGUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFN0eWxlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRTdHlsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0U3R5bGUoU3RyaW5nIHZhbHVlKTsKLX0gLy8gU09BUE9wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNzNhYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUFBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeQotICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZQotewotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTkFNRSA9ICJzb2FwIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvU09BUCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5TX1BSRUZJWCA9ICJzb2FwIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsLmluaXQoKTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQmluZGluZ0ltcGwgPGVtPkJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQmluZGluZ0ltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JJTkRJTkdfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQklORElOR19fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JJTkRJTkdfX1NUWUxFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZzwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwgPGVtPkJvZHk8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEJvZHkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZID0gMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQk9EWV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQk9EWV9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX1VTRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVMgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQk9EWV9fRVBBUlRTID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAzOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Qm9keTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwgPGVtPkhlYWRlciBCYXNlPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXJCYXNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0UgPSAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX19VU0UgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVMgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX19QQVJUID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRVBBUlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5IZWFkZXIgQmFzZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbCA8ZW0+RmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmF1bHRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUID0gMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9GQVVMVF9fVVNFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX05BTUUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5GYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUE9wZXJhdGlvbkltcGwgPGVtPk9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBPcGVyYXRpb25JbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT04gPSA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX09QRVJBVElPTl9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U29hcCBBY3Rpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX1NUWUxFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEFkZHJlc3NJbXBsIDxlbT5BZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEFkZHJlc3NJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBBZGRyZXNzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfQUREUkVTUyA9IDU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQUREUkVTU19fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9BRERSRVNTX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BZGRyZXNzPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJGYXVsdEltcGwgPGVtPkhlYWRlciBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJGYXVsdEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUID0gNjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBTT0FQX0hFQURFUl9CQVNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX0VMRU1FTlQgPSBTT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fUkVRVUlSRUQgPSBTT0FQX0hFQURFUl9CQVNFX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UX1RZUEUgPSBTT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fVVNFID0gU09BUF9IRUFERVJfQkFTRV9fVVNFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19OQU1FU1BBQ0VfVVJJID0gU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTID0gU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fTUVTU0FHRSA9IFNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX1BBUlQgPSBTT0FQX0hFQURFUl9CQVNFX19QQVJUOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fRU1FU1NBR0UgPSBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX0VQQVJUID0gU09BUF9IRUFERVJfQkFTRV9fRVBBUlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCA9IFNPQVBfSEVBREVSX0JBU0VfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckltcGwgPGVtPkhlYWRlcjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXIoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVIgPSA3OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFNPQVBfSEVBREVSX0JBU0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fRUxFTUVOVCA9IFNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19SRVFVSVJFRCA9IFNPQVBfSEVBREVSX0JBU0VfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX0VMRU1FTlRfVFlQRSA9IFNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19VU0UgPSBTT0FQX0hFQURFUl9CQVNFX19VU0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX05BTUVTUEFDRV9VUkkgPSBTT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX0VFTkNPRElOR19TVFlMRVMgPSBTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19NRVNTQUdFID0gU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fUEFSVCA9IFNPQVBfSEVBREVSX0JBU0VfX1BBUlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19FTUVTU0FHRSA9IFNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fRVBBUlQgPSBTT0FQX0hFQURFUl9CQVNFX19FUEFSVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhlYWRlciBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTID0gU09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkhlYWRlcjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UID0gU09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyA8ZW0+SVNPQVAgQmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9CSU5ESU5HID0gODsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEJpbmRpbmc8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVNPQVBfQklORElOR19GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcyA8ZW0+SVNPQVAgQWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQWRkcmVzcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9BRERSRVNTID0gOTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEFkZHJlc3M8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVNPQVBfQUREUkVTU19GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSA8ZW0+SVNPQVAgQm9keTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQm9keSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9CT0RZID0gMTA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBCb2R5PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX0JPRFlfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IDxlbT5JU09BUCBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTT0FQX0ZBVUxUID0gMTE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBGYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5JU09BUCBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTT0FQX09QRVJBVElPTiA9IDEyOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQgPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEhlYWRlckZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTT0FQX0hFQURFUl9GQVVMVCA9IDEzOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX0hFQURFUl9GQVVMVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIDxlbT5JU09BUCBIZWFkZXI8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQSGVhZGVyKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTT0FQX0hFQURFUiA9IDE0OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgSGVhZGVyPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX0hFQURFUl9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5JU3RyaW5nPC9lbT4nIGRhdGEgdHlwZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YS5sYW5nLlN0cmluZwotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU3RyaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTVFJJTkcgPSAxNTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nIDxlbT5CaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQQmluZGluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRUcmFuc3BvcnRVUkkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UcmFuc3BvcnQgVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRUcmFuc3BvcnRVUkkoKQotICAgKiBAc2VlICNnZXRTT0FQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEJpbmRpbmdfVHJhbnNwb3J0VVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlN0eWxlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRTdHlsZSgpCi0gICAqIEBzZWUgI2dldFNPQVBCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQQmluZGluZ19TdHlsZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkgPGVtPkJvZHk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Qm9keTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBCb2R5KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldFVzZSA8ZW0+VXNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VXNlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRVc2UoKQotICAgKiBAc2VlICNnZXRTT0FQQm9keSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEJvZHlfVXNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBzZWUgI2dldFNPQVBCb2R5KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQQm9keV9OYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFRW5jb2RpbmdTdHlsZXMgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldEVFbmNvZGluZ1N0eWxlcygpCi0gICAqIEBzZWUgI2dldFNPQVBCb2R5KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFUGFydHMgPGVtPkVQYXJ0czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBhcnRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFUGFydHMoKQotICAgKiBAc2VlICNnZXRTT0FQQm9keSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0U09BUEJvZHlfRVBhcnRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSA8ZW0+SGVhZGVyIEJhc2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQSGVhZGVyQmFzZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRVc2UgPGVtPlVzZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0VXNlKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX1VzZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAc2VlICNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RUVuY29kaW5nU3R5bGVzIDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAc2VlICNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldE1lc3NhZ2UgPGVtPk1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5NZXNzYWdlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRNZXNzYWdlKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX01lc3NhZ2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0UGFydCA8ZW0+UGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBhcnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldFBhcnQoKQotICAgKiBAc2VlICNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FTWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RU1lc3NhZ2UoKQotICAgKiBAc2VlICNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0U09BUEhlYWRlckJhc2VfRU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RVBhcnQgPGVtPkVQYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RVBhcnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVQYXJ0KCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQgPGVtPkZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0VXNlIDxlbT5Vc2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdCNnZXRVc2UoKQotICAgKiBAc2VlICNnZXRTT0FQRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9Vc2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdCNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAc2VlICNnZXRTT0FQRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdAotICAgKiBAc2VlICNnZXRTT0FQRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9FRW5jb2RpbmdTdHlsZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldFNPQVBGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEZhdWx0X05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24gPGVtPk9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbiNnZXRTb2FwQWN0aW9uVVJJIDxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24jZ2V0U29hcEFjdGlvblVSSSgpCi0gICAqIEBzZWUgI2dldFNPQVBPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlN0eWxlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFN0eWxlKCkKLSAgICogQHNlZSAjZ2V0U09BUE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUE9wZXJhdGlvbl9TdHlsZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MgPGVtPkFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBBZGRyZXNzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzI2dldExvY2F0aW9uVVJJKCkKLSAgICogQHNlZSAjZ2V0U09BUEFkZHJlc3MoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQgPGVtPkhlYWRlciBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0U09BUEhlYWRlckZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyIDxlbT5IZWFkZXI8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SGVhZGVyPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQSGVhZGVyKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciNnZXRIZWFkZXJGYXVsdHMgPGVtPkhlYWRlciBGYXVsdHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkhlYWRlciBGYXVsdHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXIjZ2V0SGVhZGVyRmF1bHRzKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlcigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcgPGVtPklTT0FQIEJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgQmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZwotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmciCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MgPGVtPklTT0FQIEFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgQWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcwotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEFkZHJlc3MoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgPGVtPklTT0FQIEJvZHk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgQm9keTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEJvZHkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IDxlbT5JU09BUCBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JU09BUCBGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElTT0FQRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiA8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNPQVBPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IDxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNPQVBIZWFkZXJGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIDxlbT5JU09BUCBIZWFkZXI8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgSGVhZGVyPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEhlYWRlcigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YS5sYW5nLlN0cmluZyA8ZW0+SVN0cmluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+SVN0cmluZzwvZW0+Jy4KLSAgICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFRGF0YVR5cGUgZ2V0SVN0cmluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQRmFjdG9yeSBnZXRTT0FQRmFjdG9yeSgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gICAqIDx1bD4KLSAgICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAgICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAgICogPC91bD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludGVyZmFjZSBMaXRlcmFscwotICB7Ci0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCaW5kaW5nSW1wbCA8ZW0+QmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCaW5kaW5nSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNPQVBfQklORElORyA9IGVJTlNUQU5DRS5nZXRTT0FQQmluZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJID0gZUlOU1RBTkNFLmdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfQklORElOR19fU1RZTEUgPSBlSU5TVEFOQ0UuZ2V0U09BUEJpbmRpbmdfU3R5bGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwgPGVtPkJvZHk8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQQm9keSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX0JPRFkgPSBlSU5TVEFOQ0UuZ2V0U09BUEJvZHkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9CT0RZX19VU0UgPSBlSU5TVEFOQ0UuZ2V0U09BUEJvZHlfVXNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkgPSBlSU5TVEFOQ0UuZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUyA9IGVJTlNUQU5DRS5nZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBTT0FQX0JPRFlfX0VQQVJUUyA9IGVJTlNUQU5DRS5nZXRTT0FQQm9keV9FUGFydHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwgPGVtPkhlYWRlciBCYXNlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgU09BUF9IRUFERVJfQkFTRSA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0hFQURFUl9CQVNFX19VU0UgPSBlSU5TVEFOQ0UuZ2V0U09BUEhlYWRlckJhc2VfVXNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX0VFbmNvZGluZ1N0eWxlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0hFQURFUl9CQVNFX19QQVJUID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX1BhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFNPQVBfSEVBREVSX0JBU0VfX0VQQVJUID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbCA8ZW0+RmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmF1bHRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNPQVBfRkFVTFQgPSBlSU5TVEFOQ0UuZ2V0U09BUEZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfRkFVTFRfX1VTRSA9IGVJTlNUQU5DRS5nZXRTT0FQRmF1bHRfVXNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJID0gZUlOU1RBTkNFLmdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyA9IGVJTlNUQU5DRS5nZXRTT0FQRmF1bHRfRUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0ZBVUxUX19OQU1FID0gZUlOU1RBTkNFLmdldFNPQVBGYXVsdF9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUE9wZXJhdGlvbkltcGwgPGVtPk9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBPcGVyYXRpb25JbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUE9wZXJhdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U29hcCBBY3Rpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkkgPSBlSU5TVEFOQ0UuZ2V0U09BUE9wZXJhdGlvbl9Tb2FwQWN0aW9uVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9PUEVSQVRJT05fX1NUWUxFID0gZUlOU1RBTkNFLmdldFNPQVBPcGVyYXRpb25fU3R5bGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQWRkcmVzc0ltcGwgPGVtPkFkZHJlc3M8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQWRkcmVzc0ltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQQWRkcmVzcygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX0FERFJFU1MgPSBlSU5TVEFOQ0UuZ2V0U09BUEFkZHJlc3MoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkgPSBlSU5TVEFOQ0UuZ2V0U09BUEFkZHJlc3NfTG9jYXRpb25VUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyRmF1bHRJbXBsIDxlbT5IZWFkZXIgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyRmF1bHRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNPQVBfSEVBREVSX0ZBVUxUID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJJbXBsIDxlbT5IZWFkZXI8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVySW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXIoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgU09BUF9IRUFERVIgPSBlSU5TVEFOQ0UuZ2V0U09BUEhlYWRlcigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhlYWRlciBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBTT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUyA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyX0hlYWRlckZhdWx0cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIDxlbT5JU09BUCBCaW5kaW5nPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEJpbmRpbmcoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVNPQVBfQklORElORyA9IGVJTlNUQU5DRS5nZXRJU09BUEJpbmRpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcyA8ZW0+SVNPQVAgQWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBBZGRyZXNzKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0FERFJFU1MgPSBlSU5TVEFOQ0UuZ2V0SVNPQVBBZGRyZXNzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgPGVtPklTT0FQIEJvZHk8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQm9keSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJU09BUF9CT0RZID0gZUlOU1RBTkNFLmdldElTT0FQQm9keSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCA8ZW0+SVNPQVAgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0ZBVUxUID0gZUlOU1RBTkNFLmdldElTT0FQRmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5JU09BUCBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBPcGVyYXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVNPQVBfT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldElTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IDxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEhlYWRlckZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0hFQURFUl9GQVVMVCA9IGVJTlNUQU5DRS5nZXRJU09BUEhlYWRlckZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciA8ZW0+SVNPQVAgSGVhZGVyPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQSGVhZGVyKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0hFQURFUiA9IGVJTlNUQU5DRS5nZXRJU09BUEhlYWRlcigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPklTdHJpbmc8L2VtPicgZGF0YSB0eXBlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVN0cmluZygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBJU1RSSU5HID0gZUlOU1RBTkNFLmdldElTdHJpbmcoKTsKLQotICB9Ci0KLX0gLy9TT0FQUGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvZ2VuZXJhdG9yL1NPQVBDb250ZW50R2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9nZW5lcmF0b3IvU09BUENvbnRlbnRHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE5MTkwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9nZW5lcmF0b3IvU09BUENvbnRlbnRHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3I7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3I7Ci0KLQotcHVibGljIGNsYXNzIFNPQVBDb250ZW50R2VuZXJhdG9yIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUFRJT05fTk9UX1NFVCA9IC0xOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0RPQ1VNRU5UID0gMTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9SUEMgPSAyOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRV9MSVRFUkFMID0gMTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VfRU5DT0RFRCA9IDI7Ci0KLSAgcHJpdmF0ZSBpbnQgc3R5bGVPcHRpb24gPSBPUFRJT05fTk9UX1NFVDsKLQotICBwcml2YXRlIGludCB1c2VPcHRpb24gPSBPUFRJT05fTk9UX1NFVDsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZVZhbHVlID0gIiI7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBhZGRyZXNzTG9jYXRpb24gPSBDb250ZW50R2VuZXJhdG9yLkFERFJFU1NfTE9DQVRJT047Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmdbXSByZXF1aXJlZE5hbWVzcGFjZXMgPSB7ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB9OwotCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nW10gcHJlZmVycmVkTmFtZXNwYWNlUHJlZml4ZXMgPSB7ICJzb2FwIiB9OwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRSZXF1aXJlZE5hbWVzcGFjZXMoKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVkTmFtZXNwYWNlczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZmVycmVkTmFtZXNwYWNlUHJlZml4KFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlLmVxdWFscygiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIpKQotICAgIHsKLSAgICAgIHJldHVybiAic29hcCI7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U3R5bGUoaW50IHN0eWxlKQotICB7Ci0gICAgc3R5bGVPcHRpb24gPSBzdHlsZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVzZShpbnQgdXNlKQotICB7Ci0gICAgdXNlT3B0aW9uID0gdXNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QWRkcmVzc0xvY2F0aW9uKFN0cmluZyBhZGRyZXNzTG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmFkZHJlc3NMb2NhdGlvbiA9IGFkZHJlc3NMb2NhdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlUG9ydENvbnRlbnQoUG9ydCBwb3J0KQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMocG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICBzb2FwQWRkcmVzcy5zZXRMb2NhdGlvblVSSShhZGRyZXNzTG9jYXRpb24pOwotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nQ29udGVudChCaW5kaW5nIGJpbmRpbmcsIFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUEZhY3Rvcnkgc29hcEZhY3RvcnkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBzb2FwRmFjdG9yeS5jcmVhdGVTT0FQQmluZGluZygpOwotICAgIHNvYXBCaW5kaW5nLnNldFN0eWxlKChnZXRTdHlsZU9wdGlvbihiaW5kaW5nKSA9PSBTVFlMRV9ET0NVTUVOVCkgPyAiZG9jdW1lbnQiIDogInJwYyIpOwotICAgIHNvYXBCaW5kaW5nLnNldFRyYW5zcG9ydFVSSSgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIik7Ci0KLSAgICBiaW5kaW5nLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCaW5kaW5nKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KGJpbmRpbmdPcGVyYXRpb24uZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ09wZXJhdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBPcGVyYXRpb24oKTsKLQotICAgIFN0cmluZyBzb2FwQWN0aW9uVmFsdWUgPSBnZXROYW1lc3BhY2UoYmluZGluZ09wZXJhdGlvbik7Ci0gICAgaWYgKCFzb2FwQWN0aW9uVmFsdWUuZW5kc1dpdGgoIi8iKSkKLSAgICB7Ci0gICAgICBzb2FwQWN0aW9uVmFsdWUgKz0gIi8iOwotICAgIH0KLSAgICBzb2FwQWN0aW9uVmFsdWUgKz0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLQotICAgIHNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSShzb2FwQWN0aW9uVmFsdWUpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ0lucHV0Q29udGVudChCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0LCBJbnB1dCBpbnB1dCkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nSW5wdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ0lucHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBTT0FQRmFjdG9yeSBzb2FwRmFjdG9yeSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRTsKLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IHNvYXBGYWN0b3J5LmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgc29hcEJvZHkuc2V0VXNlKChnZXRVc2VPcHRpb24obnVsbCkgPT0gVVNFX0VOQ09ERUQpID8gImVuY29kZWQiIDogImxpdGVyYWwiKTsKLSAgICBpZiAoZ2V0VXNlT3B0aW9uKGJpbmRpbmdJbnB1dCkgPT0gVVNFX0VOQ09ERUQgJiYgZ2V0U3R5bGVPcHRpb24oYmluZGluZ0lucHV0KSA9PSBTVFlMRV9SUEMpCi0gICAgewotICAgICAgTGlzdCBlbmNvZGluZ0xpc3QgPSBuZXcgQmFzaWNFTGlzdCgpOwotICAgICAgZW5jb2RpbmdMaXN0LmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICAgIHNvYXBCb2R5LnNldEVuY29kaW5nU3R5bGVzKGVuY29kaW5nTGlzdCk7Ci0gICAgICBzb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoZ2V0TmFtZXNwYWNlKGJpbmRpbmdJbnB1dCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRVc2VPcHRpb24oYmluZGluZ0lucHV0KSA9PSBVU0VfTElURVJBTCAmJiBnZXRTdHlsZU9wdGlvbihiaW5kaW5nSW5wdXQpID09IFNUWUxFX1JQQykKLSAgICB7Ci0gICAgICBzb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoZ2V0TmFtZXNwYWNlKGJpbmRpbmdJbnB1dCkpOwotICAgIH0KLQotICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPdXRwdXRDb250ZW50KEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCwgT3V0cHV0IG91dHB1dCkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nT3V0cHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdPdXRwdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIFNPQVBGYWN0b3J5IHNvYXBGYWN0b3J5ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFOwotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gc29hcEZhY3RvcnkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBzb2FwQm9keS5zZXRVc2UoKGdldFVzZU9wdGlvbihiaW5kaW5nT3V0cHV0KSA9PSBVU0VfRU5DT0RFRCkgPyAiZW5jb2RlZCIgOiAibGl0ZXJhbCIpOwotICAgIGlmIChnZXRVc2VPcHRpb24oYmluZGluZ091dHB1dCkgPT0gVVNFX0VOQ09ERUQgJiYgZ2V0U3R5bGVPcHRpb24oYmluZGluZ091dHB1dCkgPT0gU1RZTEVfUlBDKQotICAgIHsKLSAgICAgIExpc3QgZW5jb2RpbmdMaXN0ID0gbmV3IEJhc2ljRUxpc3QoKTsKLSAgICAgIGVuY29kaW5nTGlzdC5hZGQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIik7Ci0gICAgICBzb2FwQm9keS5zZXRFbmNvZGluZ1N0eWxlcyhlbmNvZGluZ0xpc3QpOwotICAgICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKGdldE5hbWVzcGFjZShiaW5kaW5nT3V0cHV0KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGdldFVzZU9wdGlvbihiaW5kaW5nT3V0cHV0KSA9PSBVU0VfTElURVJBTCAmJiBnZXRTdHlsZU9wdGlvbihiaW5kaW5nT3V0cHV0KSA9PSBTVFlMRV9SUEMpCi0gICAgewotICAgICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKGdldE5hbWVzcGFjZShiaW5kaW5nT3V0cHV0KSk7Ci0gICAgfQotCi0gICAgYmluZGluZ091dHB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdGYXVsdENvbnRlbnQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCwgRmF1bHQgZmF1bHQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ0ZhdWx0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdGYXVsdC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUEZhY3Rvcnkgc29hcEZhY3RvcnkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IHNvYXBGYWN0b3J5LmNyZWF0ZVNPQVBGYXVsdCgpOwotICAgIHNvYXBGYXVsdC5zZXRVc2UoKGdldFVzZU9wdGlvbihiaW5kaW5nRmF1bHQpID09IFVTRV9FTkNPREVEKSA/ICJlbmNvZGVkIiA6ICJsaXRlcmFsIik7Ci0gICAgc29hcEZhdWx0LnNldE5hbWUoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICAvLwlzb2FwRmF1bHQuc2V0TmFtZXNwYWNlVVJJKGdldE5hbWVzcGFjZShiaW5kaW5nRmF1bHQpKTsKLQotICAgIGlmIChnZXRVc2VPcHRpb24oYmluZGluZ0ZhdWx0KSA9PSBVU0VfRU5DT0RFRCAmJiBnZXRTdHlsZU9wdGlvbihiaW5kaW5nRmF1bHQpID09IFNUWUxFX1JQQykKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nTGlzdCA9IG5ldyBCYXNpY0VMaXN0KCk7Ci0gICAgICBlbmNvZGluZ0xpc3QuYWRkKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIpOwotICAgICAgc29hcEZhdWx0LnNldEVuY29kaW5nU3R5bGVzKGVuY29kaW5nTGlzdCk7Ci0gICAgfQotCi0gICAgYmluZGluZ0ZhdWx0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBGYXVsdCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXROYW1lc3BhY2UoV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlVmFsdWUuZXF1YWxzKCIiKSAmJiB3c2RsRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZVZhbHVlID0gd3NkbEVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICBpZiAobmFtZXNwYWNlVmFsdWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2VWYWx1ZSA9ICIiOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lc3BhY2VWYWx1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoTGlzdCBvcmlnaW5hbExpc3QsIExpc3QgcmVtb3ZlTGlzdCkKLSAgewotICAgIEl0ZXJhdG9yIHJlbW92ZUl0ID0gcmVtb3ZlTGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChyZW1vdmVJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgb3JpZ2luYWxMaXN0LnJlbW92ZShyZW1vdmVJdC5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgQmluZGluZyBnZXRCaW5kaW5nT2JqZWN0KE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIE9iamVjdCBwYXJlbnQgPSBnZW5lcmljQmluZGluZ09iamVjdDsKLQotICAgIGludCBpbmRleCA9IDA7Ci0gICAgd2hpbGUgKHBhcmVudCAhPSBudWxsICYmIGluZGV4IDwgNSkKLSAgICB7Ci0gICAgICBwYXJlbnQgPSBnZXRHZW5lcmljQmluZGluZ09iamVjdFBhcmVudChwYXJlbnQpOwotICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmcpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmcpID8gKEJpbmRpbmcpcGFyZW50IDogbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgT2JqZWN0IGdldEdlbmVyaWNCaW5kaW5nT2JqZWN0UGFyZW50KE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIE9iamVjdCBwYXJlbnQgPSBudWxsOwotCi0gICAgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZ09wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nT3BlcmF0aW9uKWdlbmVyaWNCaW5kaW5nT2JqZWN0KS5nZXRDb250YWluZXIoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGdlbmVyaWNCaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgICAgewotICAgICAgICBwYXJlbnQgPSAoKEJpbmRpbmdJbnB1dClnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ091dHB1dClnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nRmF1bHQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRTdHlsZU9wdGlvbihPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBpZiAoc3R5bGVPcHRpb24gPT0gT1BUSU9OX05PVF9TRVQgJiYgZ2VuZXJpY0JpbmRpbmdPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBpbml0KCkgd2FzIG5ldmVyIGNhbGxlZCwgdHJ5IHRvIGRldGVybWluZSB0aGUgJ3N0eWxlJyBiYXNlZCBvbiB3aGF0IHdlIGhhdmUva25vdwotICAgICAgQmluZGluZyBiaW5kaW5nID0gZ2V0QmluZGluZ09iamVjdChnZW5lcmljQmluZGluZ09iamVjdCk7Ci0KLSAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHN0eWxlIGZyb20gdGhlIEJpbmRpbmcgT2JqZWN0Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgSXRlcmF0b3IgdmFsdWVzSXQgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGxpc3QsICJzdHlsZSIpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgd2hpbGUgKHZhbHVlc0l0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBzdHlsZSA9IChTdHJpbmcpdmFsdWVzSXQubmV4dCgpOwotCi0gICAgICAgICAgaWYgKHN0eWxlLmVxdWFscygiZG9jdW1lbnQiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzdHlsZU9wdGlvbiA9IFNUWUxFX0RPQ1VNRU5UOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChzdHlsZS5lcXVhbHMoInJwYyIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHN0eWxlT3B0aW9uID0gU1RZTEVfUlBDOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChzdHlsZU9wdGlvbiAhPSBPUFRJT05fTk9UX1NFVCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3R5bGVPcHRpb24gPT0gT1BUSU9OX05PVF9TRVQpCi0gICAgewotICAgICAgc3R5bGVPcHRpb24gPSBTVFlMRV9ET0NVTUVOVDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVPcHRpb247Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRVc2VPcHRpb24oT2JqZWN0IGdlbmVyaWNCaW5kaW5nT2JqZWN0KQotICB7Ci0gICAgaWYgKHVzZU9wdGlvbiA9PSBPUFRJT05fTk9UX1NFVCkKLSAgICB7Ci0gICAgICAvLyBpbml0KCkgd2FzIG5ldmVyIGNhbGxlZCwgdHJ5IHRvIGRldGVybWluZSB0aGUgJ3VzZScgYmFzZWQgb24gd2hhdCB3ZSBoYXZlL2tub3cKLSAgICAgIEl0ZXJhdG9yIG1lc3NhZ2VSZWZJdCA9IGdldE1lc3NhZ2VSZWZlcmVuY2VCaW5kaW5nT2JqZWN0cyhnZW5lcmljQmluZGluZ09iamVjdCkuaXRlcmF0b3IoKTsKLQotICAgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgdXNlIGZyb20gdGhlIGxpc3Qgb2YgQmluZGluZ0lucHV0cywgQmluZGluZ091dHB1dHMsIGFuZCBCaW5kaW5nRmF1bHRzCi0gICAgICB3aGlsZSAobWVzc2FnZVJlZkl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG1lc3NhZ2VSZWYgPSBtZXNzYWdlUmVmSXQubmV4dCgpOwotICAgICAgICBMaXN0IHZhbHVlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgbGlzdCA9ICgoQmluZGluZ0lucHV0KW1lc3NhZ2VSZWYpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICB2YWx1ZXMgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGxpc3QsICJ1c2UiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgbGlzdCA9ICgoQmluZGluZ091dHB1dCltZXNzYWdlUmVmKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgdmFsdWVzID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShsaXN0LCAidXNlIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgbGlzdCA9ICgoQmluZGluZ0ZhdWx0KW1lc3NhZ2VSZWYpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICB2YWx1ZXMgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGxpc3QsICJ1c2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEl0ZXJhdG9yIHZhbHVlc0l0ID0gdmFsdWVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlICh2YWx1ZXNJdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdXNlID0gKFN0cmluZyl2YWx1ZXNJdC5uZXh0KCk7Ci0KLSAgICAgICAgICBpZiAodXNlLmVxdWFscygibGl0ZXJhbCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVzZU9wdGlvbiA9IFVTRV9MSVRFUkFMOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICh1c2UuZXF1YWxzKCJlbmNvZGVkIikpCi0gICAgICAgICAgewotICAgICAgICAgICAgdXNlT3B0aW9uID0gVVNFX0VOQ09ERUQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZU9wdGlvbiAhPSBPUFRJT05fTk9UX1NFVCkKLSAgICAgICAgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHVzZU9wdGlvbiA9PSBPUFRJT05fTk9UX1NFVCkKLSAgICB7Ci0gICAgICB1c2VPcHRpb24gPSBVU0VfTElURVJBTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXNlT3B0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldE1lc3NhZ2VSZWZlcmVuY2VCaW5kaW5nT2JqZWN0cyhPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gZ2V0QmluZGluZ09iamVjdChnZW5lcmljQmluZGluZ09iamVjdCk7Ci0KLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIG9wZXJhdGlvbnNJdCA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKG9wZXJhdGlvbnNJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gb3AgPSAoQmluZGluZ09wZXJhdGlvbilvcGVyYXRpb25zSXQubmV4dCgpOwotICAgICAgICBsaXN0LmFkZChvcC5nZXRFQmluZGluZ0lucHV0KCkpOwotICAgICAgICBsaXN0LmFkZChvcC5nZXRFQmluZGluZ091dHB1dCgpKTsKLSAgICAgICAgbGlzdC5hZGRBbGwob3AuZ2V0RUJpbmRpbmdGYXVsdHMoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShMaXN0IGVlTGlzdCwgU3RyaW5nIGF0dHJpYnV0ZUtleSkKLSAgewotICAgIExpc3QgdmFsdWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGVlRWxlbWVudHNJdCA9IGVlTGlzdC5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGVlRWxlbWVudHNJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWVFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVlRWxlbWVudHNJdC5uZXh0KCk7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBlZUVsZW1lbnQuZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVLZXkpOwotICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwgJiYgIWF0dHJpYnV0ZVZhbHVlLmVxdWFscygiIikpCi0gICAgICB7Ci0gICAgICAgIHZhbHVlcy5hZGQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkKLSAgewotICAgIHJldHVybiAiU09BUCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEFkZHJlc3NJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBBZGRyZXNzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTdhMWVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEFkZHJlc3NJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBBZGRyZXNzSW1wbCNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEFkZHJlc3NJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgU09BUEFkZHJlc3MKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb25VUkkgPSBMT0NBVElPTl9VUklfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEFkZHJlc3NJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0FERFJFU1M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgbmV3TG9jYXRpb25VUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTG9jYXRpb25VUkkgPSBsb2NhdGlvblVSSTsKLSAgICBsb2NhdGlvblVSSSA9IG5ld0xvY2F0aW9uVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJLCBvbGRMb2NhdGlvblVSSSwgbG9jYXRpb25VUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TG9jYXRpb25VUkkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHNldExvY2F0aW9uVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSShMT0NBVElPTl9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb25VUkkgIT0gbnVsbCA6ICFMT0NBVElPTl9VUklfRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uVVJJKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKGxvY2F0aW9uVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobG9jYXRpb25VUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TG9jYXRpb25VUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFKSk7Ci0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5MT0NBVElPTl9BVFRSSUJVVEUsIGdldExvY2F0aW9uVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotfSAvL1NPQVBBZGRyZXNzSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQQmluZGluZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJpbmRpbmdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OGE0ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQQmluZGluZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJpbmRpbmdJbXBsI2dldFRyYW5zcG9ydFVSSSA8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJpbmRpbmdJbXBsI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBCaW5kaW5nSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNPQVBCaW5kaW5nCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNwb3J0VVJJKCkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFRyYW5zcG9ydFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc3BvcnRVUkkoKSA8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VHJhbnNwb3J0VVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0cmFuc3BvcnRVUkkgPSBUUkFOU1BPUlRfVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdHlsZSgpIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0U3R5bGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHN0eWxlID0gU1RZTEVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJpbmRpbmdJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JJTkRJTkc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNwb3J0VVJJKCkKLSAgewotICAgIHJldHVybiB0cmFuc3BvcnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRyYW5zcG9ydFVSSShTdHJpbmcgbmV3VHJhbnNwb3J0VVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZFRyYW5zcG9ydFVSSSA9IHRyYW5zcG9ydFVSSTsKLSAgICB0cmFuc3BvcnRVUkkgPSBuZXdUcmFuc3BvcnRVUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJLCBvbGRUcmFuc3BvcnRVUkksIHRyYW5zcG9ydFVSSSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0eWxlKCkKLSAgewotICAgIHJldHVybiBzdHlsZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3R5bGUoU3RyaW5nIG5ld1N0eWxlKQotICB7Ci0gICAgU3RyaW5nIG9sZFN0eWxlID0gc3R5bGU7Ci0gICAgc3R5bGUgPSBuZXdTdHlsZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1NUWUxFLCBvbGRTdHlsZSwgc3R5bGUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJOgotICAgICAgcmV0dXJuIGdldFRyYW5zcG9ydFVSSSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1NUWUxFOgotICAgICAgcmV0dXJuIGdldFN0eWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJOgotICAgICAgc2V0VHJhbnNwb3J0VVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1NUWUxFOgotICAgICAgc2V0U3R5bGUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkk6Ci0gICAgICBzZXRUcmFuc3BvcnRVUkkoVFJBTlNQT1JUX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fU1RZTEU6Ci0gICAgICBzZXRTdHlsZShTVFlMRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJOgotICAgICAgcmV0dXJuIFRSQU5TUE9SVF9VUklfRURFRkFVTFQgPT0gbnVsbCA/IHRyYW5zcG9ydFVSSSAhPSBudWxsIDogIVRSQU5TUE9SVF9VUklfRURFRkFVTFQuZXF1YWxzKHRyYW5zcG9ydFVSSSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fU1RZTEU6Ci0gICAgICByZXR1cm4gU1RZTEVfRURFRkFVTFQgPT0gbnVsbCA/IHN0eWxlICE9IG51bGwgOiAhU1RZTEVfRURFRkFVTFQuZXF1YWxzKHN0eWxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHRyYW5zcG9ydFVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHRyYW5zcG9ydFVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBzdHlsZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHN0eWxlKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXRTdHlsZShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUpKTsKLSAgICBzZXRUcmFuc3BvcnRVUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuVFJBTlNQT1JUX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfQklORElOR19fU1RZTEUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIGdldFN0eWxlKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlRSQU5TUE9SVF9BVFRSSUJVVEUsIGdldFRyYW5zcG9ydFVSSSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLX0gLy9TT0FQQmluZGluZ0ltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJvZHlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBCb2R5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGNjNGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJvZHlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZVVuaXF1ZUVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJvZHk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCb2R5SW1wbCNnZXRVc2UgPGVtPlVzZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsI2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsI2dldEVFbmNvZGluZ1N0eWxlcyA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsI2dldEVQYXJ0cyA8ZW0+RVBhcnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEJvZHlJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgU09BUEJvZHkKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVc2UoKSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVc2UoKSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHVzZSA9IFVTRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWVzcGFjZVVSSSgpIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlVVJJID0gTkFNRVNQQUNFX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUVuY29kaW5nU3R5bGVzKCkgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUVuY29kaW5nU3R5bGVzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVFbmNvZGluZ1N0eWxlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQYXJ0cygpIDxlbT5FUGFydHM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVQYXJ0cyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBhcnRzKCkgPGVtPlBhcnRzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFBhcnRzKCkKLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IHBhcnRzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQQm9keUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfQk9EWTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVc2UoKQotICB7Ci0gICAgcmV0dXJuIHVzZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VXNlKFN0cmluZyBuZXdVc2UpCi0gIHsKLSAgICBTdHJpbmcgb2xkVXNlID0gdXNlOwotICAgIHVzZSA9IG5ld1VzZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX1VTRSwgb2xkVXNlLCB1c2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlVVJJKFN0cmluZyBuZXdOYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgIG5hbWVzcGFjZVVSSSA9IG5ld05hbWVzcGFjZVVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkksIG9sZE5hbWVzcGFjZVVSSSwgbmFtZXNwYWNlVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFRW5jb2RpbmdTdHlsZXMoKQotICB7Ci0gICAgaWYgKGVFbmNvZGluZ1N0eWxlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVFbmNvZGluZ1N0eWxlcyA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdChTdHJpbmcuY2xhc3MsIHRoaXMsIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUyk7Ci0gICAgfQotICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFUGFydHMoKQotICB7Ci0gICAgaWYgKGVQYXJ0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVQYXJ0cyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3QoUGFydC5jbGFzcywgdGhpcywgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFMpOwotICAgIH0KLSAgICByZXR1cm4gZVBhcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5jb2RpbmdTdHlsZXMoTGlzdCBsaXN0KQotICB7Ci0gICAgZUVuY29kaW5nU3R5bGVzID0gKEVMaXN0KWxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJ0cyhMaXN0IGxpc3QpCi0gIHsKLSAgICBwYXJ0cyA9IGxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRQYXJ0cygpCi0gIHsKLSAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBwYXJ0cyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3QoUGFydC5jbGFzcywgdGhpcywgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFMpOwotICAgICAgcmV0dXJuIGdldEltcGxpY2l0UGFydHMoKTsKLSAgICB9Ci0KLSAgICBpZiAocGFydHMuc2l6ZSgpID09IDApCi0gICAgewotICAgICAgcmV0dXJuIGdldEltcGxpY2l0UGFydHMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fVVNFOgotICAgICAgcmV0dXJuIGdldFVzZSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFM6Ci0gICAgICByZXR1cm4gZ2V0RVBhcnRzKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19VU0U6Ci0gICAgICBzZXRVc2UoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRVBBUlRTOgotICAgICAgZ2V0RVBhcnRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVQYXJ0cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX1VTRToKLSAgICAgIHNldFVzZShVU0VfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkk6Ci0gICAgICBzZXROYW1lc3BhY2VVUkkoTkFNRVNQQUNFX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRVBBUlRTOgotICAgICAgZ2V0RVBhcnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX1VTRToKLSAgICAgIHJldHVybiBVU0VfRURFRkFVTFQgPT0gbnVsbCA/IHVzZSAhPSBudWxsIDogIVVTRV9FREVGQVVMVC5lcXVhbHModXNlKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJOgotICAgICAgcmV0dXJuIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWVzcGFjZVVSSSAhPSBudWxsIDogIU5BTUVTUEFDRV9VUklfRURFRkFVTFQuZXF1YWxzKG5hbWVzcGFjZVVSSSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXMgIT0gbnVsbCAmJiAhZUVuY29kaW5nU3R5bGVzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFM6Ci0gICAgICByZXR1cm4gZVBhcnRzICE9IG51bGwgJiYgIWVQYXJ0cy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh1c2U6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1c2UpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbmFtZXNwYWNlVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZXNwYWNlVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGVFbmNvZGluZ1N0eWxlczogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGVFbmNvZGluZ1N0eWxlcyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0VXNlKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUpKTsKLSAgICBzZXROYW1lc3BhY2VVUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSkpOwotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5FTkNPRElOR19TVFlMRV9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIFN0cmluZyBlbmNvZGluZ1N0eWxlcyA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLkVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSk7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihlbmNvZGluZ1N0eWxlcyk7Ci0gICAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgICAgZ2V0RW5jb2RpbmdTdHlsZXMoKS5hZGQodG9rZW5pemVyLm5leHRUb2tlbigpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGdldEVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLlBBUlRTX0FUVFJJQlVURSkpCi0gICAgLy8gU3luY2hyb25pemUgJ3BhcnRzJyB2YXJpYWJsZSBmcm9tIGVsZW1lbnQncyBhdHRyaWJ1dGUuCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ2V0TWVzc2FnZSgpOwotICAgICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBTdHJpbmcgcGFydE5hbWVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5QQVJUU19BVFRSSUJVVEUpOwotICAgICAgU3RyaW5nVG9rZW5pemVyIHBhcnNlciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocGFydE5hbWVzLCAiICIpOwotICAgICAgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLSAgICAgIFBhcnQgbmV3UGFydCA9IG51bGw7Ci0gICAgICBnZXRQYXJ0cygpLmNsZWFyKCk7Ci0gICAgICB3aGlsZSAocGFyc2VyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcGFydE5hbWUgPSBwYXJzZXIubmV4dFRva2VuKCk7Ci0gICAgICAgIG5ld1BhcnQgPSAobWVzc2FnZSAhPSBudWxsKSA/IChQYXJ0KW1lc3NhZ2UuZ2V0UGFydChwYXJ0TmFtZSkgOiBudWxsOwotICAgICAgICBpZiAobmV3UGFydCAhPSBudWxsKQotICAgICAgICAgIC8vIERvIG5vdCB1c2UgZ2V0UGFydHMoKSBoZXJlIHNpbmNlIGl0IHdpbGwgcmV0dXJuIGEgbGlzdCBvZgotICAgICAgICAgIC8vIGltcGxpY2l0bHkgY29sbGVjdGVkIHBhcnRzLgotICAgICAgICAgIHBhcnRzLmFkZChuZXdQYXJ0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JPRFlfX1VTRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUsIGdldFVzZSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFLCBnZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTKQotICAgICAgewotICAgICAgICBMaXN0IGVuY29kaW5nU3R5bGVMaXN0ID0gZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgICAgU3RyaW5nIGVuY29kaW5nU3R5bGVzID0gIiI7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZW5jb2RpbmdTdHlsZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChlbmNvZGluZ1N0eWxlcy5lcXVhbHMoIiIpKSAvLyBmaXJzdCBpdGVyYXRpb24KLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVzICs9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVzICs9ICIgIiArIChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZW5jb2RpbmdTdHlsZXMuZXF1YWxzKCIiKSkKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFLCBlbmNvZGluZ1N0eWxlcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIC8vCi0gICAgLy8gVXBkYXRlIHRoZSBlbGVtZW50J3MgInBhcnRzIiBhdHRyaWJ1dGUgdmFsdWUuCi0gICAgLy8KLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CT0RZX19FUEFSVFMpCi0gICAgICB7Ci0gICAgICAgIC8vIFVzZWQgdG8gYmUgQnVnemlsbGEgMTA4MTc2LCBub3cgaXQgaXMgQnVnemlsbGEgMTM3OTkwCi0KLSAgICAgICAgU3RyaW5nIHBhcnRzQXR0cmlidXRlVmFsdWUgPSBudWxsOwotCi0gICAgICAgIC8vIERvIG5vdCB1c2UgZ2V0UGFydHMoKSBhcyBpdCB3aWxsIHJldHVybiB0aGUgbGlzdCBvZiBpbXBsaWNpdCBtZXNzYWdlCi0gICAgICAgIC8vIHBhcnRzLgotCi0gICAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmICFwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgcGFydE5hbWVzQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcGFydHMuaXRlcmF0b3IoKTsKLQotICAgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIHBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0KLSAgICAgICAgICAgIHBhcnROYW1lc0J1ZmZlci5hcHBlbmQocGFydE5hbWUpOwotCi0gICAgICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwYXJ0TmFtZXNCdWZmZXIuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBwYXJ0c0F0dHJpYnV0ZVZhbHVlID0gcGFydE5hbWVzQnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuUEFSVFNfQVRUUklCVVRFLCBwYXJ0c0F0dHJpYnV0ZVZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5CT0RZX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0SW1wbGljaXRQYXJ0cygpCi0gIHsKLSAgICBMaXN0IGltcGxpY2l0UGFydHMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGdldE1lc3NhZ2UoKTsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UuZ2V0RVBhcnRzKCkuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBpbXBsaWNpdFBhcnRzLmFkZEFsbChtZXNzYWdlLmdldEVQYXJ0cygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGltcGxpY2l0UGFydHM7Ci0gIH0KLQotICBwcml2YXRlIE1lc3NhZ2UgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotCi0gICAgaWYgKGVDb250YWluZXIoKSBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICB7Ci0gICAgICBpZiAoKChCaW5kaW5nSW5wdXQpZUNvbnRhaW5lcigpKS5nZXRFSW5wdXQoKSAhPSBudWxsKQotICAgICAgICBtZXNzYWdlID0gKChCaW5kaW5nSW5wdXQpZUNvbnRhaW5lcigpKS5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpOwotICAgIH0KLSAgICBpZiAoZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICBpZiAoKChCaW5kaW5nT3V0cHV0KWVDb250YWluZXIoKSkuZ2V0RU91dHB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2UgPSAoKEJpbmRpbmdPdXRwdXQpZUNvbnRhaW5lcigpKS5nZXRFT3V0cHV0KCkuZ2V0RU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgaWYgKGVDb250YWluZXIoKSBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICB7Ci0gICAgICBpZiAoKChCaW5kaW5nRmF1bHQpZUNvbnRhaW5lcigpKS5nZXRFRmF1bHQoKSAhPSBudWxsKQotICAgICAgICBtZXNzYWdlID0gKChCaW5kaW5nRmF1bHQpZUNvbnRhaW5lcigpKS5nZXRFRmF1bHQoKS5nZXRFTWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi19IC8vU09BUEJvZHlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlhMmU5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFNPQVBGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNPQVBGYWN0b3J5IGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU09BUEZhY3RvcnkgdGhlU09BUEZhY3RvcnkgPSAoU09BUEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1NPQVAiKTsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIGlmICh0aGVTT0FQRmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdGhlU09BUEZhY3Rvcnk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIEVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFNPQVBGYWN0b3J5SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKQotICB7Ci0gICAgc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkc6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEJpbmRpbmcoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0U6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEhlYWRlckJhc2UoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVDoKLSAgICAgIHJldHVybiBjcmVhdGVTT0FQRmF1bHQoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT046Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0FERFJFU1M6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFQ6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEhlYWRlckZhdWx0KCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBIZWFkZXIoKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY3JlYXRlRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5JU1RSSU5HOgotICAgICAgcmV0dXJuIGNyZWF0ZUlTdHJpbmdGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5JU1RSSU5HOgotICAgICAgcmV0dXJuIGNvbnZlcnRJU3RyaW5nVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQQmluZGluZyBjcmVhdGVTT0FQQmluZGluZygpCi0gIHsKLSAgICBTT0FQQmluZGluZ0ltcGwgc29hcEJpbmRpbmcgPSBuZXcgU09BUEJpbmRpbmdJbXBsKCk7Ci0gICAgcmV0dXJuIHNvYXBCaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgY3JlYXRlU09BUEJvZHkoKQotICB7Ci0gICAgU09BUEJvZHlJbXBsIHNvYXBCb2R5ID0gbmV3IFNPQVBCb2R5SW1wbCgpOwotICAgIHJldHVybiBzb2FwQm9keTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBIZWFkZXJCYXNlIGNyZWF0ZVNPQVBIZWFkZXJCYXNlKCkKLSAgewotICAgIFNPQVBIZWFkZXJCYXNlSW1wbCBzb2FwSGVhZGVyQmFzZSA9IG5ldyBTT0FQSGVhZGVyQmFzZUltcGwoKTsKLSAgICByZXR1cm4gc29hcEhlYWRlckJhc2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQRmF1bHQgY3JlYXRlU09BUEZhdWx0KCkKLSAgewotICAgIFNPQVBGYXVsdEltcGwgc29hcEZhdWx0ID0gbmV3IFNPQVBGYXVsdEltcGwoKTsKLSAgICByZXR1cm4gc29hcEZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUE9wZXJhdGlvbiBjcmVhdGVTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIFNPQVBPcGVyYXRpb25JbXBsIHNvYXBPcGVyYXRpb24gPSBuZXcgU09BUE9wZXJhdGlvbkltcGwoKTsKLSAgICByZXR1cm4gc29hcE9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBBZGRyZXNzIGNyZWF0ZVNPQVBBZGRyZXNzKCkKLSAgewotICAgIFNPQVBBZGRyZXNzSW1wbCBzb2FwQWRkcmVzcyA9IG5ldyBTT0FQQWRkcmVzc0ltcGwoKTsKLSAgICByZXR1cm4gc29hcEFkZHJlc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQSGVhZGVyRmF1bHQgY3JlYXRlU09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIFNPQVBIZWFkZXJGYXVsdEltcGwgc29hcEhlYWRlckZhdWx0ID0gbmV3IFNPQVBIZWFkZXJGYXVsdEltcGwoKTsKLSAgICByZXR1cm4gc29hcEhlYWRlckZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEhlYWRlciBjcmVhdGVTT0FQSGVhZGVyKCkKLSAgewotICAgIFNPQVBIZWFkZXJJbXBsIHNvYXBIZWFkZXIgPSBuZXcgU09BUEhlYWRlckltcGwoKTsKLSAgICByZXR1cm4gc29hcEhlYWRlcjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJU3RyaW5nRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydElTdHJpbmdUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBQYWNrYWdlIGdldFNPQVBQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiAoU09BUFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQUGFja2FnZSBnZXRQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5lSU5TVEFOQ0U7Ci0gIH0KLX0gLy9TT0FQRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEZhdWx0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQRmF1bHRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MDQxZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQRmF1bHRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZVVuaXF1ZUVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmF1bHQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYXVsdEltcGwjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYXVsdEltcGwjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmF1bHRJbXBsI2dldEVFbmNvZGluZ1N0eWxlcyA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEZhdWx0SW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNPQVBGYXVsdAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdXNlID0gVVNFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lc3BhY2VVUkkoKSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRW5jb2RpbmdTdHlsZXMoKSA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUVuY29kaW5nU3R5bGVzID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBGYXVsdEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfRkFVTFQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VXNlKCkKLSAgewotICAgIHJldHVybiB1c2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVzZShTdHJpbmcgbmV3VXNlKQotICB7Ci0gICAgU3RyaW5nIG9sZFVzZSA9IHVzZTsKLSAgICB1c2UgPSBuZXdVc2U7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fVVNFLCBvbGRVc2UsIHVzZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5ld05hbWVzcGFjZVVSSSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgbmFtZXNwYWNlVVJJID0gbmV3TmFtZXNwYWNlVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkksIG9sZE5hbWVzcGFjZVVSSSwgbmFtZXNwYWNlVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFRW5jb2RpbmdTdHlsZXMoKQotICB7Ci0gICAgaWYgKGVFbmNvZGluZ1N0eWxlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVFbmNvZGluZ1N0eWxlcyA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdChTdHJpbmcuY2xhc3MsIHRoaXMsIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMpOwotICAgIH0KLSAgICByZXR1cm4gZUVuY29kaW5nU3R5bGVzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCNnZXRFbmNvZGluZ1N0eWxlcygpCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX1VTRToKLSAgICAgIHJldHVybiBnZXRVc2UoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHJldHVybiBnZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRToKLSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fVVNFOgotICAgICAgc2V0VXNlKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJOgotICAgICAgc2V0TmFtZXNwYWNlVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUU6Ci0gICAgICBzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fVVNFOgotICAgICAgc2V0VXNlKFVTRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkk6Ci0gICAgICBzZXROYW1lc3BhY2VVUkkoTkFNRVNQQUNFX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVM6Ci0gICAgICBnZXRFRW5jb2RpbmdTdHlsZXMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19VU0U6Ci0gICAgICByZXR1cm4gVVNFX0VERUZBVUxUID09IG51bGwgPyB1c2UgIT0gbnVsbCA6ICFVU0VfRURFRkFVTFQuZXF1YWxzKHVzZSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gTkFNRVNQQUNFX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbmFtZXNwYWNlVVJJICE9IG51bGwgOiAhTkFNRVNQQUNFX1VSSV9FREVGQVVMVC5lcXVhbHMobmFtZXNwYWNlVVJJKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXMgIT0gbnVsbCAmJiAhZUVuY29kaW5nU3R5bGVzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuY29kaW5nU3R5bGVzKExpc3QgbGlzdCkKLSAgewotICAgIGVFbmNvZGluZ1N0eWxlcyA9IChFTGlzdClsaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHVzZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHVzZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBuYW1lc3BhY2VVUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lc3BhY2VVUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgZUVuY29kaW5nU3R5bGVzOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoZUVuY29kaW5nU3R5bGVzKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldE5hbWUoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpKTsKLSAgICBzZXROYW1lc3BhY2VVUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSkpOwotICAgIHNldFVzZShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5VU0VfQVRUUklCVVRFKSk7Ci0KLSAgICAvLyBUQkQgLSBoYW5kbGUgZW5jb2RpbmdTdHlsZXMKLQotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFLCBnZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9GQVVMVF9fVVNFKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuVVNFX0FUVFJJQlVURSwgZ2V0VXNlKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZW5jb2RpbmdTdHlsZUxpc3QgPSBnZXRFbmNvZGluZ1N0eWxlcygpOwotICAgICAgICBTdHJpbmcgZW5jb2RpbmdTdHlsZXMgPSAiIjsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBlbmNvZGluZ1N0eWxlTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGVuY29kaW5nU3R5bGVzLmVxdWFscygiIikpIC8vIGZpcnN0IGl0ZXJhdGlvbgotICAgICAgICAgICAgZW5jb2RpbmdTdHlsZXMgKz0gKFN0cmluZylpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZW5jb2RpbmdTdHlsZXMgKz0gIiAiICsgKFN0cmluZylpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFlbmNvZGluZ1N0eWxlcy5lcXVhbHMoIiIpKQotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5FTkNPRElOR19TVFlMRV9BVFRSSUJVVEUsIGVuY29kaW5nU3R5bGVzKTsKLSAgICAgIH0gLy8gVEJEIC0gSXMgdGhpcyB0aGUgcHJvcGVyIHdheSB0byBoYW5kbGUgZW5jb2RpbmdTdHlsZXMKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0ZBVUxUX19OQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuRkFVTFRfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi19IC8vU09BUEZhdWx0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVyQmFzZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEhlYWRlckJhc2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmY2QyNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVyQmFzZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FRGF0YVR5cGVVbmlxdWVFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgQmFzZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsI2dldFVzZSA8ZW0+VXNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwjZ2V0RUVuY29kaW5nU3R5bGVzIDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwjZ2V0TWVzc2FnZSA8ZW0+TWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsI2dldFBhcnQgPGVtPlBhcnQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbCNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQSGVhZGVyQmFzZUltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBTT0FQSGVhZGVyQmFzZQotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdXNlID0gVVNFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lc3BhY2VVUkkoKSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRW5jb2RpbmdTdHlsZXMoKSA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUVuY29kaW5nU3R5bGVzID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1lc3NhZ2UoKSA8ZW0+TWVzc2FnZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgTUVTU0FHRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1lc3NhZ2UoKSA8ZW0+TWVzc2FnZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSBtZXNzYWdlID0gTUVTU0FHRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBhcnQoKSA8ZW0+UGFydDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlRfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQYXJ0KCkgPGVtPlBhcnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcnQgPSBQQVJUX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTWVzc2FnZSgpIDxlbT5FTWVzc2FnZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZSBlTWVzc2FnZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQYXJ0KCkgPGVtPkVQYXJ0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBQYXJ0IGVQYXJ0ID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVyQmFzZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfSEVBREVSX0JBU0U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VXNlKCkKLSAgewotICAgIHJldHVybiB1c2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVzZShTdHJpbmcgbmV3VXNlKQotICB7Ci0gICAgU3RyaW5nIG9sZFVzZSA9IHVzZTsKLSAgICB1c2UgPSBuZXdVc2U7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fVVNFLCBvbGRVc2UsIHVzZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5ld05hbWVzcGFjZVVSSSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgbmFtZXNwYWNlVVJJID0gbmV3TmFtZXNwYWNlVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkksIG9sZE5hbWVzcGFjZVVSSSwgbmFtZXNwYWNlVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFRW5jb2RpbmdTdHlsZXMoKQotICB7Ci0gICAgaWYgKGVFbmNvZGluZ1N0eWxlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVFbmNvZGluZ1N0eWxlcyA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdChTdHJpbmcuY2xhc3MsIHRoaXMsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVMpOwotICAgIH0KLSAgICByZXR1cm4gZUVuY29kaW5nU3R5bGVzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBnZXRFTWVzc2FnZSgpCi0gIHsKLSAgICBpZiAoZU1lc3NhZ2UgIT0gbnVsbCAmJiBlTWVzc2FnZS5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFTWVzc2FnZSA9IChJbnRlcm5hbEVPYmplY3QpZU1lc3NhZ2U7Ci0gICAgICBlTWVzc2FnZSA9IChNZXNzYWdlKWVSZXNvbHZlUHJveHkob2xkRU1lc3NhZ2UpOwotICAgICAgaWYgKGVNZXNzYWdlICE9IG9sZEVNZXNzYWdlKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBiYXNpY0dldEVNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBlTWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU1lc3NhZ2UoTWVzc2FnZSBuZXdFTWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2Ugb2xkRU1lc3NhZ2UgPSBlTWVzc2FnZTsKLSAgICBlTWVzc2FnZSA9IG5ld0VNZXNzYWdlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBhcnQgZ2V0RVBhcnQoKQotICB7Ci0gICAgaWYgKGVQYXJ0ICE9IG51bGwgJiYgZVBhcnQuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRVBhcnQgPSAoSW50ZXJuYWxFT2JqZWN0KWVQYXJ0OwotICAgICAgZVBhcnQgPSAoUGFydCllUmVzb2x2ZVByb3h5KG9sZEVQYXJ0KTsKLSAgICAgIGlmIChlUGFydCAhPSBvbGRFUGFydCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVCwgb2xkRVBhcnQsIGVQYXJ0KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlUGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBhcnQgYmFzaWNHZXRFUGFydCgpCi0gIHsKLSAgICByZXR1cm4gZVBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVQYXJ0KFBhcnQgbmV3RVBhcnQpCi0gIHsKLSAgICBQYXJ0IG9sZEVQYXJ0ID0gZVBhcnQ7Ci0gICAgZVBhcnQgPSBuZXdFUGFydDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVCwgb2xkRVBhcnQsIGVQYXJ0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKFFOYW1lIG5ld01lc3NhZ2UpCi0gIHsKLSAgICBRTmFtZSBvbGRNZXNzYWdlID0gbWVzc2FnZTsKLSAgICBtZXNzYWdlID0gbmV3TWVzc2FnZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFLCBvbGRNZXNzYWdlLCBtZXNzYWdlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFydCgpCi0gIHsKLSAgICByZXR1cm4gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFydChTdHJpbmcgbmV3UGFydCkKLSAgewotICAgIFN0cmluZyBvbGRQYXJ0ID0gcGFydDsKLSAgICBwYXJ0ID0gbmV3UGFydDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19QQVJULCBvbGRQYXJ0LCBwYXJ0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZ1N0eWxlcyhMaXN0IGVuY29kaW5nU3R5bGVzKQotICB7Ci0gICAgZUVuY29kaW5nU3R5bGVzID0gKEVMaXN0KWVuY29kaW5nU3R5bGVzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19VU0U6Ci0gICAgICByZXR1cm4gZ2V0VXNlKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVM6Ci0gICAgICByZXR1cm4gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U6Ci0gICAgICByZXR1cm4gZ2V0TWVzc2FnZSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19QQVJUOgotICAgICAgcmV0dXJuIGdldFBhcnQoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0U6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFTWVzc2FnZSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVDoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RVBhcnQoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVQYXJ0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fVVNFOgotICAgICAgc2V0VXNlKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJOgotICAgICAgc2V0TmFtZXNwYWNlVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U6Ci0gICAgICBzZXRNZXNzYWdlKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQ6Ci0gICAgICBzZXRQYXJ0KChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRToKLSAgICAgIHNldEVNZXNzYWdlKChNZXNzYWdlKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRVBBUlQ6Ci0gICAgICBzZXRFUGFydCgoUGFydCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19VU0U6Ci0gICAgICBzZXRVc2UoVVNFX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSShOQU1FU1BBQ0VfVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U6Ci0gICAgICBzZXRNZXNzYWdlKE1FU1NBR0VfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19QQVJUOgotICAgICAgc2V0UGFydChQQVJUX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0U6Ci0gICAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRVBBUlQ6Ci0gICAgICBzZXRFUGFydCgoUGFydCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19VU0U6Ci0gICAgICByZXR1cm4gVVNFX0VERUZBVUxUID09IG51bGwgPyB1c2UgIT0gbnVsbCA6ICFVU0VfRURFRkFVTFQuZXF1YWxzKHVzZSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gTkFNRVNQQUNFX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbmFtZXNwYWNlVVJJICE9IG51bGwgOiAhTkFNRVNQQUNFX1VSSV9FREVGQVVMVC5lcXVhbHMobmFtZXNwYWNlVVJJKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXMgIT0gbnVsbCAmJiAhZUVuY29kaW5nU3R5bGVzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRToKLSAgICAgIHJldHVybiBNRVNTQUdFX0VERUZBVUxUID09IG51bGwgPyBtZXNzYWdlICE9IG51bGwgOiAhTUVTU0FHRV9FREVGQVVMVC5lcXVhbHMobWVzc2FnZSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQ6Ci0gICAgICByZXR1cm4gUEFSVF9FREVGQVVMVCA9PSBudWxsID8gcGFydCAhPSBudWxsIDogIVBBUlRfRURFRkFVTFQuZXF1YWxzKHBhcnQpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRToKLSAgICAgIHJldHVybiBlTWVzc2FnZSAhPSBudWxsOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVDoKLSAgICAgIHJldHVybiBlUGFydCAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAodXNlOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodXNlKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIG5hbWVzcGFjZVVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWVzcGFjZVVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBlRW5jb2RpbmdTdHlsZXM6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChlRW5jb2RpbmdTdHlsZXMpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbWVzc2FnZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG1lc3NhZ2UpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgcGFydDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHBhcnQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0VXNlKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUpKTsKLSAgICBzZXROYW1lc3BhY2VVUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSkpOwotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFNPQVBDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUpLCBjaGFuZ2VkRWxlbWVudCk7Ci0gICAgICBzZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRNZXNzYWdlKG51bGwpOwotICAgIH0KLSAgICBzZXRQYXJ0KFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlBBUlRfQVRUUklCVVRFKSk7Ci0gICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLkVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgU3RyaW5nIGVuY29kaW5nU3R5bGVzID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFNPQVBDb25zdGFudHMuRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGVuY29kaW5nU3R5bGVzKTsKLSAgICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgICBnZXRFRW5jb2RpbmdTdHlsZXMoKS5hZGQodG9rZW5pemVyLm5leHRUb2tlbigpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKHRoaXMubWVzc2FnZSAhPSBudWxsKSA/IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZSh0aGlzLm1lc3NhZ2UpIDogbnVsbDsKLSAgICAgIGlmIChtZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZSAhPSBnZXRFTWVzc2FnZSgpKQotICAgICAgewotICAgICAgICBzZXRFTWVzc2FnZShtZXNzYWdlKTsKLQotICAgICAgICBQYXJ0IG5ld1BhcnQgPSAoUGFydCltZXNzYWdlLmdldFBhcnQocGFydCk7Ci0gICAgICAgIGlmIChuZXdQYXJ0ICE9IG51bGwgJiYgbmV3UGFydCAhPSBnZXRFUGFydCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RVBhcnQobmV3UGFydCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0hFQURFUl9CQVNFX19VU0UpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5VU0VfQVRUUklCVVRFLCBnZXRVc2UoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUsIGdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0hFQURFUl9CQVNFX19QQVJUKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUsIGdldFBhcnQoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHVyaUxpc3QgPSBtZXNzYWdlICE9IG51bGwgPyBtZXNzYWdlLmdldE5hbWVzcGFjZVVSSSgpICsgIiMiICsgbWVzc2FnZS5nZXRMb2NhbFBhcnQoKSA6IG51bGw7Ci0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFLCB1cmlMaXN0KTsKLSAgICAgIH0KLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTKQotICAgICAgewotICAgICAgICBMaXN0IGVuY29kaW5nU3R5bGVMaXN0ID0gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICAgIFN0cmluZyBlbmNvZGluZ1N0eWxlcyA9ICIiOwotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGVuY29kaW5nU3R5bGVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoZW5jb2RpbmdTdHlsZXMuZXF1YWxzKCIiKSkgLy8gZmlyc3QgaXRlcmF0aW9uCi0gICAgICAgICAgICBlbmNvZGluZ1N0eWxlcyArPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbmNvZGluZ1N0eWxlcyArPSAiICIgKyAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWVuY29kaW5nU3R5bGVzLmVxdWFscygiIikpCi0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLkVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSwgZW5jb2RpbmdTdHlsZXMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZVJlZmVyZW5jZShFUmVmZXJlbmNlIGVSZWZlcmVuY2UpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZVJlZmVyZW5jZShlUmVmZXJlbmNlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0UpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGdldEVNZXNzYWdlKCk7Ci0gICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBRTmFtZSBxTmFtZSA9IG1lc3NhZ2UuZ2V0UU5hbWUoKTsKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlVVJJVmFsdWUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSwgcU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiIyIgKyBxTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBlUmVmZXJlbmNlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfSEVBREVSX0JBU0VfX0VQQVJUKQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSBnZXRFUGFydCgpOwotICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlBBUlRfQVRUUklCVVRFLCBwYXJ0TmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0gLy9TT0FQSGVhZGVyQmFzZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEhlYWRlckZhdWx0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVyRmF1bHRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNDQ4MzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVyRmF1bHRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlciBGYXVsdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBIZWFkZXJGYXVsdEltcGwgZXh0ZW5kcyBTT0FQSGVhZGVyQmFzZUltcGwgaW1wbGVtZW50cyBTT0FQSGVhZGVyRmF1bHQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEhlYWRlckZhdWx0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfRkFVTFQ7Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5IRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi19IC8vU09BUEhlYWRlckZhdWx0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTk5NWZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEhlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SGVhZGVyPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVySW1wbCNnZXRIZWFkZXJGYXVsdHMgPGVtPkhlYWRlciBGYXVsdHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQSGVhZGVySW1wbCBleHRlbmRzIFNPQVBIZWFkZXJCYXNlSW1wbCBpbXBsZW1lbnRzIFNPQVBIZWFkZXIKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhlYWRlckZhdWx0cygpIDxlbT5IZWFkZXIgRmF1bHRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEhlYWRlckZhdWx0cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBoZWFkZXJGYXVsdHMgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBIZWFkZXJJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0hFQURFUjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEhlYWRlckZhdWx0cygpCi0gIHsKLSAgICBpZiAoaGVhZGVyRmF1bHRzID09IG51bGwpCi0gICAgewotICAgICAgaGVhZGVyRmF1bHRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFNPQVBIZWFkZXJGYXVsdC5jbGFzcywgdGhpcywgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFMpOwotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0U09BUEhlYWRlckZhdWx0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0SGVhZGVyRmF1bHRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRTT0FQSGVhZGVyRmF1bHQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCkKLSAgewotICAgIEVMaXN0IGhlYWRlckZhdWx0cyA9IGdldEhlYWRlckZhdWx0cygpOwotICAgIGhlYWRlckZhdWx0cy5hZGQoc29hcEhlYWRlckZhdWx0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFM6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEhlYWRlckZhdWx0cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFM6Ci0gICAgICByZXR1cm4gZ2V0SGVhZGVyRmF1bHRzKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFM6Ci0gICAgICBnZXRIZWFkZXJGYXVsdHMoKS5jbGVhcigpOwotICAgICAgZ2V0SGVhZGVyRmF1bHRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTOgotICAgICAgZ2V0SGVhZGVyRmF1bHRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUzoKLSAgICAgIHJldHVybiBoZWFkZXJGYXVsdHMgIT0gbnVsbCAmJiAhaGVhZGVyRmF1bHRzLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGlmIChTT0FQQ29uc3RhbnRzLkhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRy5lcXVhbHMoY2hpbGQuZ2V0TG9jYWxOYW1lKCkpKQotICAgIHsKLSAgICAgIFNPQVBIZWFkZXJGYXVsdCBmYXVsdCA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQSGVhZGVyRmF1bHQoKTsKLSAgICAgIGZhdWx0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgIGZhdWx0LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgZ2V0SGVhZGVyRmF1bHRzKCkuYWRkKGZhdWx0KTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKHRoaXMsIGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgU09BUEhlYWRlciBoZWFkZXIgPSAoU09BUEhlYWRlciljb21wb25lbnQ7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgU09BUEhlYWRlckZhdWx0KQotICAgIHsKLSAgICAgIGhlYWRlci5nZXRIZWFkZXJGYXVsdHMoKS5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkhFQURFUl9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci19IC8vU09BUEhlYWRlckltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUE9wZXJhdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUE9wZXJhdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg3ZTNmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBPcGVyYXRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQT3BlcmF0aW9uSW1wbCNnZXRTb2FwQWN0aW9uVVJJIDxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBPcGVyYXRpb25JbXBsI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBPcGVyYXRpb25JbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgU09BUE9wZXJhdGlvbgotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNvYXBBY3Rpb25VUkkoKSA8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRTb2FwQWN0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BQ1RJT05fVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U29hcEFjdGlvblVSSSgpIDxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFNvYXBBY3Rpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHNvYXBBY3Rpb25VUkkgPSBTT0FQX0FDVElPTl9VUklfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdHlsZSgpIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0U3R5bGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0eWxlKCkgPGVtPlN0eWxlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRTdHlsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgc3R5bGUgPSBTVFlMRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQT3BlcmF0aW9uSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9PUEVSQVRJT047Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U29hcEFjdGlvblVSSSgpCi0gIHsKLSAgICByZXR1cm4gc29hcEFjdGlvblVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U29hcEFjdGlvblVSSShTdHJpbmcgbmV3U29hcEFjdGlvblVSSSkKLSAgewotICAgIFN0cmluZyBvbGRTb2FwQWN0aW9uVVJJID0gc29hcEFjdGlvblVSSTsKLSAgICBzb2FwQWN0aW9uVVJJID0gbmV3U29hcEFjdGlvblVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJLCBvbGRTb2FwQWN0aW9uVVJJLCBzb2FwQWN0aW9uVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3R5bGUoKQotICB7Ci0gICAgcmV0dXJuIHN0eWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdHlsZShTdHJpbmcgbmV3U3R5bGUpCi0gIHsKLSAgICBTdHJpbmcgb2xkU3R5bGUgPSBzdHlsZTsKLSAgICBzdHlsZSA9IG5ld1N0eWxlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19TVFlMRSwgb2xkU3R5bGUsIHN0eWxlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkk6Ci0gICAgICByZXR1cm4gZ2V0U29hcEFjdGlvblVSSSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU1RZTEU6Ci0gICAgICByZXR1cm4gZ2V0U3R5bGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJOgotICAgICAgc2V0U29hcEFjdGlvblVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NUWUxFOgotICAgICAgc2V0U3R5bGUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJOgotICAgICAgc2V0U29hcEFjdGlvblVSSShTT0FQX0FDVElPTl9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU1RZTEU6Ci0gICAgICBzZXRTdHlsZShTVFlMRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSToKLSAgICAgIHJldHVybiBTT0FQX0FDVElPTl9VUklfRURFRkFVTFQgPT0gbnVsbCA/IHNvYXBBY3Rpb25VUkkgIT0gbnVsbCA6ICFTT0FQX0FDVElPTl9VUklfRURFRkFVTFQuZXF1YWxzKHNvYXBBY3Rpb25VUkkpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU1RZTEU6Ci0gICAgICByZXR1cm4gU1RZTEVfRURFRkFVTFQgPT0gbnVsbCA/IHN0eWxlICE9IG51bGwgOiAhU1RZTEVfRURFRkFVTFQuZXF1YWxzKHN0eWxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHNvYXBBY3Rpb25VUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChzb2FwQWN0aW9uVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHN0eWxlOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoc3R5bGUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0U29hcEFjdGlvblVSSShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5TT0FQX0FDVElPTl9BVFRSSUJVVEUpKTsKLSAgICBzZXRTdHlsZShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuU09BUF9BQ1RJT05fQVRUUklCVVRFLCBnZXRTb2FwQWN0aW9uVVJJKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfT1BFUkFUSU9OX19TVFlMRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlNUWUxFX0FUVFJJQlVURSwgZ2V0U3R5bGUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuT1BFUkFUSU9OX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL1NPQVBPcGVyYXRpb25JbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQUGFja2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2ZmI1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYWNrYWdlOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgU09BUFBhY2thZ2UKLXsKLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBzb2FwQmluZGluZ0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBzb2FwQm9keUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBzb2FwSGVhZGVyQmFzZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBzb2FwRmF1bHRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcE9wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBzb2FwQWRkcmVzc0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBzb2FwSGVhZGVyRmF1bHRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEhlYWRlckVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpc29hcEJpbmRpbmdFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaXNvYXBBZGRyZXNzRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlzb2FwQm9keUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpc29hcEZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlzb2FwT3BlcmF0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlzb2FwSGVhZGVyRmF1bHRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaXNvYXBIZWFkZXJFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgaVN0cmluZ0VEYXRhVHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLSAgICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLSAgICogcGFja2FnZSBVUkkgdmFsdWUuCi0gICAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLSAgICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLSAgICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLSAgICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZU5TX1VSSQotICAgKiBAc2VlICNpbml0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBTT0FQUGFja2FnZUltcGwoKQotICB7Ci0gICAgc3VwZXIoZU5TX1VSSSwgU09BUEZhY3RvcnkuZUlOU1RBTkNFKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLSAgICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLSAgICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLSAgICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0gICAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLSAgICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLSAgICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotICAgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLSAgICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotICAgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotICAgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotICAgKiB0aG9zZSBvZiBhbm90aGVyLgotICAgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0gICAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2VOU19VUkkKLSAgICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUFBhY2thZ2UgaW5pdCgpCi0gIHsKLSAgICBpZiAoaXNJbml0ZWQpCi0gICAgICByZXR1cm4gKFNPQVBQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNPQVBQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotICAgIFNPQVBQYWNrYWdlSW1wbCB0aGVTT0FQUGFja2FnZSA9IChTT0FQUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgU09BUFBhY2thZ2VJbXBsCi0gICAgICA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFNPQVBQYWNrYWdlSW1wbCgpKTsKLQotICAgIGlzSW5pdGVkID0gdHJ1ZTsKLQotICAgIC8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotICAgIFdTRExQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKLSAgICBYU0RQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKLQotICAgIC8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCi0gICAgdGhlU09BUFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCi0gICAgdGhlU09BUFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCi0gICAgLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAotICAgIHRoZVNPQVBQYWNrYWdlLmZyZWV6ZSgpOwotCi0gICAgcmV0dXJuIHRoZVNPQVBQYWNrYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFNPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBzb2FwQmluZGluZ0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEJpbmRpbmdfVHJhbnNwb3J0VVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwQmluZGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQQmluZGluZ19TdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQQm9keSgpCi0gIHsKLSAgICByZXR1cm4gc29hcEJvZHlFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBCb2R5X1VzZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEJvZHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwQm9keUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXMoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBCb2R5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFNPQVBCb2R5X0VQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upc29hcEJvZHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQSGVhZGVyQmFzZSgpCi0gIHsKLSAgICByZXR1cm4gc29hcEhlYWRlckJhc2VFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX1VzZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEhlYWRlckJhc2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfTmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9FRW5jb2RpbmdTdHlsZXMoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBIZWFkZXJCYXNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX01lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBIZWFkZXJCYXNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX1BhcnQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBIZWFkZXJCYXNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFNPQVBIZWFkZXJCYXNlX0VNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRTT0FQSGVhZGVyQmFzZV9FUGFydCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upc29hcEhlYWRlckJhc2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBGYXVsdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEZhdWx0X1VzZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEZhdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9OYW1lc3BhY2VVUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBGYXVsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQRmF1bHRfRUVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwRmF1bHRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEZhdWx0X05hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBGYXVsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFNPQVBPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHNvYXBPcGVyYXRpb25FQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcE9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQT3BlcmF0aW9uX1N0eWxlKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwT3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEFkZHJlc3MoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBBZGRyZXNzRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQQWRkcmVzc19Mb2NhdGlvblVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEFkZHJlc3NFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQSGVhZGVyRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXJGYXVsdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQSGVhZGVyKCkKLSAgewotICAgIHJldHVybiBzb2FwSGVhZGVyRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRTT0FQSGVhZGVyX0hlYWRlckZhdWx0cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upc29hcEhlYWRlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gaXNvYXBCaW5kaW5nRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQQWRkcmVzcygpCi0gIHsKLSAgICByZXR1cm4gaXNvYXBBZGRyZXNzRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQQm9keSgpCi0gIHsKLSAgICByZXR1cm4gaXNvYXBCb2R5RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwRmF1bHRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SVNPQVBPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwT3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQSGVhZGVyRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwSGVhZGVyRmF1bHRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SVNPQVBIZWFkZXIoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwSGVhZGVyRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRURhdGFUeXBlIGdldElTdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGlTdHJpbmdFRGF0YVR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQRmFjdG9yeSBnZXRTT0FQRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gKFNPQVBGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLSAgICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgewotICAgIGlmIChpc0NyZWF0ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNDcmVhdGVkID0gdHJ1ZTsKLQotICAgIC8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotICAgIHNvYXBCaW5kaW5nRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfQklORElORyk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwQmluZGluZ0VDbGFzcywgU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBCaW5kaW5nRUNsYXNzLCBTT0FQX0JJTkRJTkdfX1NUWUxFKTsKLQotICAgIHNvYXBCb2R5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfQk9EWSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwQm9keUVDbGFzcywgU09BUF9CT0RZX19VU0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEJvZHlFQ2xhc3MsIFNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwQm9keUVDbGFzcywgU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHNvYXBCb2R5RUNsYXNzLCBTT0FQX0JPRFlfX0VQQVJUUyk7Ci0KLSAgICBzb2FwSGVhZGVyQmFzZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0hFQURFUl9CQVNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19VU0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEhlYWRlckJhc2VFQ2xhc3MsIFNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEhlYWRlckJhc2VFQ2xhc3MsIFNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVMpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEhlYWRlckJhc2VFQ2xhc3MsIFNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEhlYWRlckJhc2VFQ2xhc3MsIFNPQVBfSEVBREVSX0JBU0VfX1BBUlQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2Uoc29hcEhlYWRlckJhc2VFQ2xhc3MsIFNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19FUEFSVCk7Ci0KLSAgICBzb2FwRmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU09BUF9GQVVMVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwRmF1bHRFQ2xhc3MsIFNPQVBfRkFVTFRfX1VTRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwRmF1bHRFQ2xhc3MsIFNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEZhdWx0RUNsYXNzLCBTT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBGYXVsdEVDbGFzcywgU09BUF9GQVVMVF9fTkFNRSk7Ci0KLSAgICBzb2FwT3BlcmF0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfT1BFUkFUSU9OKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBPcGVyYXRpb25FQ2xhc3MsIFNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcE9wZXJhdGlvbkVDbGFzcywgU09BUF9PUEVSQVRJT05fX1NUWUxFKTsKLQotICAgIHNvYXBBZGRyZXNzRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfQUREUkVTUyk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwQWRkcmVzc0VDbGFzcywgU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkkpOwotCi0gICAgc29hcEhlYWRlckZhdWx0RUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfSEVBREVSX0ZBVUxUKTsKLQotICAgIHNvYXBIZWFkZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU09BUF9IRUFERVIpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2Uoc29hcEhlYWRlckVDbGFzcywgU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFMpOwotCi0gICAgaXNvYXBCaW5kaW5nRUNsYXNzID0gY3JlYXRlRUNsYXNzKElTT0FQX0JJTkRJTkcpOwotCi0gICAgaXNvYXBBZGRyZXNzRUNsYXNzID0gY3JlYXRlRUNsYXNzKElTT0FQX0FERFJFU1MpOwotCi0gICAgaXNvYXBCb2R5RUNsYXNzID0gY3JlYXRlRUNsYXNzKElTT0FQX0JPRFkpOwotCi0gICAgaXNvYXBGYXVsdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9GQVVMVCk7Ci0KLSAgICBpc29hcE9wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9PUEVSQVRJT04pOwotCi0gICAgaXNvYXBIZWFkZXJGYXVsdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9IRUFERVJfRkFVTFQpOwotCi0gICAgaXNvYXBIZWFkZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNPQVBfSEVBREVSKTsKLQotICAgIC8vIENyZWF0ZSBkYXRhIHR5cGVzCi0gICAgaVN0cmluZ0VEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShJU1RSSU5HKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLSAgICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICB7Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHBhY2thZ2UKLSAgICBzZXROYW1lKGVOQU1FKTsKLSAgICBzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLSAgICBzZXROc1VSSShlTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLSAgICBXU0RMUGFja2FnZSB0aGVXU0RMUGFja2FnZSA9IChXU0RMUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShXU0RMUGFja2FnZS5lTlNfVVJJKTsKLQotICAgIC8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKLSAgICBzb2FwQmluZGluZ0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBzb2FwQmluZGluZ0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElTT0FQQmluZGluZygpKTsKLSAgICBzb2FwQm9keUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBzb2FwQm9keUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElTT0FQQm9keSgpKTsKLSAgICBzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBzb2FwRmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVNPQVBGYXVsdCgpKTsKLSAgICBzb2FwT3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIHNvYXBPcGVyYXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU09BUE9wZXJhdGlvbigpKTsKLSAgICBzb2FwQWRkcmVzc0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBzb2FwQWRkcmVzc0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElTT0FQQWRkcmVzcygpKTsKLSAgICBzb2FwSGVhZGVyRmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTT0FQSGVhZGVyQmFzZSgpKTsKLSAgICBzb2FwSGVhZGVyRmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU09BUEhlYWRlckZhdWx0KCkpOwotICAgIHNvYXBIZWFkZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTT0FQSGVhZGVyQmFzZSgpKTsKLSAgICBzb2FwSGVhZGVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVNPQVBIZWFkZXIoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotICAgIGluaXRFQ2xhc3Moc29hcEJpbmRpbmdFQ2xhc3MsIFNPQVBCaW5kaW5nLmNsYXNzLCAiU09BUEJpbmRpbmciLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJ0cmFuc3BvcnRVUkkiLCBudWxsLCAwLCAxLCBTT0FQQmluZGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEJpbmRpbmdfU3R5bGUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAic3R5bGUiLCBudWxsLCAwLCAxLCBTT0FQQmluZGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzb2FwQm9keUVDbGFzcywgU09BUEJvZHkuY2xhc3MsICJTT0FQQm9keSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEJvZHlfVXNlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInVzZSIsIG51bGwsIDAsIDEsIFNPQVBCb2R5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQQm9keV9OYW1lc3BhY2VVUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZXNwYWNlVVJJIiwgbnVsbCwgMCwgMSwgU09BUEJvZHkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBCb2R5X0VFbmNvZGluZ1N0eWxlcygpLAotICAgICAgdGhpcy5nZXRJU3RyaW5nKCksCi0gICAgICAiZUVuY29kaW5nU3R5bGVzIiwgbnVsbCwgMCwgLTEsIFNPQVBCb2R5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRTT0FQQm9keV9FUGFydHMoKSwKLSAgICAgIHRoZVdTRExQYWNrYWdlLmdldFBhcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBhcnRzIiwgbnVsbCwgMCwgLTEsIFNPQVBCb2R5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQSGVhZGVyQmFzZS5jbGFzcywgIlNPQVBIZWFkZXJCYXNlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQSGVhZGVyQmFzZV9Vc2UoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAidXNlIiwgbnVsbCwgMCwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lc3BhY2VVUkkiLCBudWxsLCAwLCAxLCBTT0FQSGVhZGVyQmFzZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCksCi0gICAgICB0aGlzLmdldElTdHJpbmcoKSwKLSAgICAgICJlRW5jb2RpbmdTdHlsZXMiLCBudWxsLCAwLCAtMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBIZWFkZXJCYXNlX01lc3NhZ2UoKSwKLSAgICAgIHRoZVdTRExQYWNrYWdlLmdldFFOYW1lKCksCi0gICAgICAibWVzc2FnZSIsIG51bGwsIDAsIDEsIFNPQVBIZWFkZXJCYXNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInBhcnQiLCBudWxsLCAwLCAxLCBTT0FQSGVhZGVyQmFzZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0U09BUEhlYWRlckJhc2VfRU1lc3NhZ2UoKSwKLSAgICAgIHRoZVdTRExQYWNrYWdlLmdldE1lc3NhZ2UoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU1lc3NhZ2UiLCBudWxsLCAxLCAxLCBTT0FQSGVhZGVyQmFzZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0U09BUEhlYWRlckJhc2VfRVBhcnQoKSwKLSAgICAgIHRoZVdTRExQYWNrYWdlLmdldFBhcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBhcnQiLCBudWxsLCAxLCAxLCBTT0FQSGVhZGVyQmFzZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgRU9wZXJhdGlvbiBvcCA9IGFkZEVPcGVyYXRpb24oc29hcEhlYWRlckJhc2VFQ2xhc3MsIHRoZVdTRExQYWNrYWdlLmdldElMaXN0KCksICJnZXRFbmNvZGluZ1N0eWxlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oc29hcEhlYWRlckJhc2VFQ2xhc3MsIG51bGwsICJzZXRFbmNvZGluZ1N0eWxlcyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhlV1NETFBhY2thZ2UuZ2V0SUxpc3QoKSwgImVuY29kaW5nU3R5bGVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Moc29hcEZhdWx0RUNsYXNzLCBTT0FQRmF1bHQuY2xhc3MsICJTT0FQRmF1bHQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBGYXVsdF9Vc2UoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAidXNlIiwgbnVsbCwgMCwgMSwgU09BUEZhdWx0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWVzcGFjZVVSSSIsIG51bGwsIDAsIDEsIFNPQVBGYXVsdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEZhdWx0X0VFbmNvZGluZ1N0eWxlcygpLAotICAgICAgdGhpcy5nZXRJU3RyaW5nKCksCi0gICAgICAiZUVuY29kaW5nU3R5bGVzIiwgbnVsbCwgMCwgLTEsIFNPQVBGYXVsdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEZhdWx0X05hbWUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZSIsIG51bGwsIDAsIDEsIFNPQVBGYXVsdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzb2FwT3BlcmF0aW9uRUNsYXNzLCBTT0FQT3BlcmF0aW9uLmNsYXNzLCAiU09BUE9wZXJhdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUE9wZXJhdGlvbl9Tb2FwQWN0aW9uVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInNvYXBBY3Rpb25VUkkiLCBudWxsLCAwLCAxLCBTT0FQT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQT3BlcmF0aW9uX1N0eWxlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInN0eWxlIiwgbnVsbCwgMCwgMSwgU09BUE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzb2FwQWRkcmVzc0VDbGFzcywgU09BUEFkZHJlc3MuY2xhc3MsICJTT0FQQWRkcmVzcyIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEFkZHJlc3NfTG9jYXRpb25VUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibG9jYXRpb25VUkkiLCBudWxsLCAwLCAxLCBTT0FQQWRkcmVzcy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzb2FwSGVhZGVyRmF1bHRFQ2xhc3MsIFNPQVBIZWFkZXJGYXVsdC5jbGFzcywgIlNPQVBIZWFkZXJGYXVsdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzb2FwSGVhZGVyRUNsYXNzLCBTT0FQSGVhZGVyLmNsYXNzLCAiU09BUEhlYWRlciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKSwKLSAgICAgIHRoaXMuZ2V0U09BUEhlYWRlckZhdWx0KCksCi0gICAgICBudWxsLAotICAgICAgImhlYWRlckZhdWx0cyIsIG51bGwsIDAsIC0xLCBTT0FQSGVhZGVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaXNvYXBCaW5kaW5nRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcuY2xhc3MsCi0gICAgICAiSVNPQVBCaW5kaW5nIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpc29hcEFkZHJlc3NFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcy5jbGFzcywKLSAgICAgICJJU09BUEFkZHJlc3MiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlzb2FwQm9keUVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LmNsYXNzLAotICAgICAgIklTT0FQQm9keSIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaXNvYXBCb2R5RUNsYXNzLCB0aGVXU0RMUGFja2FnZS5nZXRJTGlzdCgpLCAiZ2V0RW5jb2RpbmdTdHlsZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlzb2FwQm9keUVDbGFzcywgbnVsbCwgInNldEVuY29kaW5nU3R5bGVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGVXU0RMUGFja2FnZS5nZXRJTGlzdCgpLCAiZW5jb2RpbmdTdHlsZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlzb2FwQm9keUVDbGFzcywgdGhlV1NETFBhY2thZ2UuZ2V0SUxpc3QoKSwgImdldFBhcnRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpc29hcEJvZHlFQ2xhc3MsIG51bGwsICJzZXRQYXJ0cyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhlV1NETFBhY2thZ2UuZ2V0SUxpc3QoKSwgInBhcnRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpc29hcEZhdWx0RUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LmNsYXNzLAotICAgICAgIklTT0FQRmF1bHQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlzb2FwT3BlcmF0aW9uRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbi5jbGFzcywKLSAgICAgICJJU09BUE9wZXJhdGlvbiIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaXNvYXBIZWFkZXJGYXVsdEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdC5jbGFzcywKLSAgICAgICJJU09BUEhlYWRlckZhdWx0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpc29hcEhlYWRlckVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIuY2xhc3MsCi0gICAgICAiSVNPQVBIZWFkZXIiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlzb2FwSGVhZGVyRUNsYXNzLCB0aGVXU0RMUGFja2FnZS5nZXRJTGlzdCgpLCAiZ2V0U09BUEhlYWRlckZhdWx0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaXNvYXBIZWFkZXJFQ2xhc3MsIG51bGwsICJhZGRTT0FQSGVhZGVyRmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SVNPQVBIZWFkZXJGYXVsdCgpLCAic29hcEhlYWRlckZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIEluaXRpYWxpemUgZGF0YSB0eXBlcwotICAgIGluaXRFRGF0YVR5cGUoaVN0cmluZ0VEYXRhVHlwZSwgU3RyaW5nLmNsYXNzLCAiSVN0cmluZyIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIENyZWF0ZSByZXNvdXJjZQotICAgIGNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotICB9Ci19IC8vU09BUFBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVhYjg2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgU09BUFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEFkYXB0ZXJGYWN0b3J5KCkKLSAgewotICAgIGlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBtb2RlbFBhY2thZ2UgPSBTT0FQUGFja2FnZS5lSU5TVEFOQ0U7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KQotICAgIHsKLSAgICAgIHJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBTd2l0Y2ggbW9kZWxTd2l0Y2ggPSBuZXcgU09BUFN3aXRjaCgpCi0gICAgewotICAgICAgcHVibGljIE9iamVjdCBjYXNlU09BUEJpbmRpbmcoU09BUEJpbmRpbmcgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU09BUEJpbmRpbmdBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBCb2R5KFNPQVBCb2R5IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBCb2R5QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQSGVhZGVyQmFzZShTT0FQSGVhZGVyQmFzZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQSGVhZGVyQmFzZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlU09BUEZhdWx0KFNPQVBGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQRmF1bHRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQQWRkcmVzc0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlU09BUEhlYWRlckZhdWx0KFNPQVBIZWFkZXJGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQSGVhZGVyRmF1bHRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBIZWFkZXIoU09BUEhlYWRlciBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQSGVhZGVyQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEJpbmRpbmcoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNPQVBCaW5kaW5nQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEFkZHJlc3MoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3Mgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNPQVBBZGRyZXNzQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEJvZHkoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNPQVBCb2R5QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJU09BUEZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUE9wZXJhdGlvbihqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlTT0FQT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEhlYWRlckZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJU09BUEhlYWRlckZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEhlYWRlcihqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlTT0FQSGVhZGVyQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQob3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwotICAgICAgfQotICAgIH07Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0gICAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkKLSAgewotICAgIHJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nIDxlbT5CaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVTT0FQQmluZGluZ0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkgPGVtPkJvZHk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBCb2R5QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSA8ZW0+SGVhZGVyIEJhc2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBIZWFkZXJCYXNlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQgPGVtPkZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlU09BUEZhdWx0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5PcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlU09BUE9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3MgPGVtPkFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBBZGRyZXNzQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQgPGVtPkhlYWRlciBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBIZWFkZXJGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciA8ZW0+SGVhZGVyPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBIZWFkZXJBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcgPGVtPklTT0FQIEJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBCaW5kaW5nQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzIDxlbT5JU09BUCBBZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlTT0FQQWRkcmVzc0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSA8ZW0+SVNPQVAgQm9keTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJU09BUEJvZHlBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0IDxlbT5JU09BUCBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5JU09BUCBPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJU09BUE9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQgPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBIZWFkZXJGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIDxlbT5JU09BUCBIZWFkZXI8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJU09BUEhlYWRlckFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCA8ZW0+RWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL1NPQVBBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY2YWE1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgU09BUENvbnN0YW50cwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBRERSRVNTX0VMRU1FTlRfVEFHID0gImFkZHJlc3MiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklORElOR19FTEVNRU5UX1RBRyA9ICJiaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJPRFlfRUxFTUVOVF9UQUcgPSAiYm9keSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGQVVMVF9FTEVNRU5UX1RBRyA9ICJmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRUxFTUVOVF9UQUcgPSAiaGVhZGVyIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyA9ICJoZWFkZXJmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT05fRUxFTUVOVF9UQUcgPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfTkFNRVNQQUNFX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfQUNUSU9OX0FUVFJJQlVURSA9ICJzb2FwQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0FUVFJJQlVURSA9ICJzdHlsZSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9BVFRSSUJVVEUgPSAibG9jYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBTlNQT1JUX0FUVFJJQlVURSA9ICJ0cmFuc3BvcnQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0FUVFJJQlVURSA9ICJ1c2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX0FUVFJJQlVURSA9ICJuYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VSSV9BVFRSSUJVVEUgPSAibmFtZXNwYWNlVVJJIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfQVRUUklCVVRFID0gIm5hbWUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFID0gImVuY29kaW5nU3R5bGUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9BVFRSSUJVVEUgPSAibWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0FUVFJJQlVURSA9ICJwYXJ0IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlRTX0FUVFJJQlVURSA9ICJwYXJ0cyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpIDogbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE0MmIwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotCi0KLXB1YmxpYyBjbGFzcyBTT0FQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci17Ci0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgaWYgKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIGlmIChTT0FQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNPQVBDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQmluZGluZygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5CT0RZX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChTT0FQQ29uc3RhbnRzLkZBVUxUX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBGYXVsdCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5PUEVSQVRJT05fRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5IRUFERVJfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEhlYWRlcigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5IRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEhlYWRlckZhdWx0KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbG9jYWxOYW1lOiAiICsgbG9jYWxOYW1lKTsKLSAgICAgICAgcmV0dXJuIFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmhhbmRsZWQgbmFtZXNwYWNlOiAiICsgbmFtZXNwYWNlKTsKLSAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUFN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTQ4NzQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUFN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQU3dpdGNoCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgU09BUFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUFN3aXRjaCgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gU09BUFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0gICAgICByZXR1cm4gZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8gZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOiBkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBzd2l0Y2ggKGNsYXNzaWZpZXJJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElORzoKLSAgICAgIHsKLSAgICAgICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQQmluZGluZyhzb2FwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQQmluZGluZyhzb2FwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZOgotICAgICAgewotICAgICAgICBTT0FQQm9keSBzb2FwQm9keSA9IChTT0FQQm9keSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBCb2R5KHNvYXBCb2R5KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNPQVBCb2R5KHNvYXBCb2R5KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChzb2FwQm9keSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFOgotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyQmFzZSBzb2FwSGVhZGVyQmFzZSA9IChTT0FQSGVhZGVyQmFzZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBIZWFkZXJCYXNlKHNvYXBIZWFkZXJCYXNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwSGVhZGVyQmFzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEhlYWRlckJhc2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwSGVhZGVyQmFzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVDoKLSAgICAgIHsKLSAgICAgICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IChTT0FQRmF1bHQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQRmF1bHQoc29hcEZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQRmF1bHQoc29hcEZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChzb2FwRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OOgotICAgICAgewotICAgICAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBPcGVyYXRpb24oc29hcE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNPQVBPcGVyYXRpb24oc29hcE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQUREUkVTUzoKLSAgICAgIHsKLSAgICAgICAgU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MgPSAoU09BUEFkZHJlc3MpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQQWRkcmVzcyhzb2FwQWRkcmVzcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQQWRkcmVzcyhzb2FwQWRkcmVzcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQWRkcmVzcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIFNPQVBIZWFkZXJGYXVsdCBzb2FwSGVhZGVyRmF1bHQgPSAoU09BUEhlYWRlckZhdWx0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlU09BUEhlYWRlckZhdWx0KHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlU09BUEhlYWRlckJhc2Uoc29hcEhlYWRlckZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJU09BUEhlYWRlckZhdWx0KHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlckZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSOgotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBIZWFkZXIoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlU09BUEhlYWRlckJhc2Uoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNPQVBIZWFkZXIoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBIZWFkZXIpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlU09BUEJpbmRpbmcoU09BUEJpbmRpbmcgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvZHk8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Qm9keTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBCb2R5KFNPQVBCb2R5IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5IZWFkZXIgQmFzZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5IZWFkZXIgQmFzZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBIZWFkZXJCYXNlKFNPQVBIZWFkZXJCYXNlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBGYXVsdChTT0FQRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQT3BlcmF0aW9uKFNPQVBPcGVyYXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFkZHJlc3M8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBBZGRyZXNzKFNPQVBBZGRyZXNzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlU09BUEhlYWRlckZhdWx0KFNPQVBIZWFkZXJGYXVsdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SGVhZGVyPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkhlYWRlcjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBIZWFkZXIoU09BUEhlYWRlciBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgQmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBCaW5kaW5nKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBBZGRyZXNzPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEFkZHJlc3M8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEFkZHJlc3MoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3Mgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEJvZHk8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgQm9keTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlTT0FQQm9keShqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgRmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlTT0FQT3BlcmF0aW9uKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEhlYWRlckZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgSGVhZGVyPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEhlYWRlcjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlTT0FQSGVhZGVyKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19IC8vU09BUFN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTU0MzQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vL2FwaXN0eWxlcy5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTx0aXRsZT5XU0RMIE1vZGVsIFNPQVAgQmluZGluZyBFeHRlbnNpb24gQVBJIE92ZXJ2aWV3PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPHA+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPHRhYmxlIHdpZHRoPSI1MDAiPgotPHRyPgotPHRkPgotPHA+VGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIGxvYWQsIG1vZGlmeSwgYW5kIHNhdmUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L3A+Ci08L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmNiOTJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxodG1sPgotCTxoZWFkPgotCQk8bWV0YQotCQkJbmFtZT0icm9vdCIKLQkKLQkJCWNvbnRlbnQ9Ii4uLy4uLy4uLy4uLy4uLy4uLyIgLz4KLQkJPHRpdGxlPldTREwgTW9kZWwgU09BUCBCaW5kaW5nIEV4dGVuc2lvbiBBUEkgT3ZlcnZpZXc8L3RpdGxlPgotCTwvaGVhZD4KLQotCTxib2R5PgotCQk8YWJzdHJhY3Q+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9hYnN0cmFjdD4KLQkJPHA+VGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIGxvYWQsIG1vZGlmeSwgYW5kIHNhdmUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L3A+IAotCTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNWUyMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGJpbmRpbmcgZWxlbWVudC4gQSBiaW5kaW5nIGRlZmluZXMgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sIGRldGFpbHMgZm9yIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnRUeXBlLiBUaGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiBiaW5kaW5ncyBmb3IgYSBnaXZlbiBwb3J0VHlwZS4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVQb3J0VHlwZSA8ZW0+RVBvcnQgVHlwZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRFQmluZGluZ09wZXJhdGlvbnMgPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmcoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQmluZGluZyBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLkJpbmRpbmcKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRRTmFtZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nX1FOYW1lKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5RTmFtZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUU5hbWUgZ2V0UU5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFFOYW1lKFFOYW1lIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFVuZGVmaW5lZChib29sZWFuKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdfVW5kZWZpbmVkKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGJvb2xlYW4gaXNVbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUG9ydCBUeXBlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUG9ydCBUeXBlPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RVBvcnRUeXBlKFBvcnRUeXBlKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdfRVBvcnRUeXBlKCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQb3J0VHlwZSBnZXRFUG9ydFR5cGUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRFUG9ydFR5cGUgPGVtPkVQb3J0IFR5cGU8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGU8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFUG9ydFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVQb3J0VHlwZShQb3J0VHlwZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbn0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZyBPcGVyYXRpb25zPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ19FQmluZGluZ09wZXJhdGlvbnMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVCaW5kaW5nT3BlcmF0aW9ucygpOwotCi19IC8vIEJpbmRpbmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTU2YjU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0ZhdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgRmF1bHQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGZhdWx0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEEgZmF1bHQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBmYXVsdCB3aXRoIHRoZSBzYW1lIG5hbWUuIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQjZ2V0RUZhdWx0IDxlbT5FRmF1bHQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdGYXVsdCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBCaW5kaW5nRmF1bHQgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nRmF1bHRfTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUZhdWx0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FRmF1bHQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVGYXVsdChGYXVsdCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nRmF1bHRfRUZhdWx0KCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBGYXVsdCBnZXRFRmF1bHQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldEVGYXVsdCA8ZW0+RUZhdWx0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FRmF1bHQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVGYXVsdChGYXVsdCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RUZhdWx0KCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNnZXRFRmF1bHQoKQotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FRmF1bHQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBqYXZheC53c2RsLkZhdWx0IGdldEZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgc2V0RUZhdWx0KEZhdWx0KSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi0gICAqIEBzZWUgI3NldEVGYXVsdChGYXVsdCkKLSAgICogQHBhcmFtIGZhdWx0IHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RUZhdWx0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQGlnbm9yZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RmF1bHQoamF2YXgud3NkbC5GYXVsdCBmYXVsdCk7Ci0KLX0gLy8gQmluZGluZ0ZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNjY2Q2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdJbnB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIElucHV0PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBpbnB1dCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBbiBpbnB1dCBlbGVtZW50IHdpdGhpbiBhbiBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGlucHV0IG9mIHRoZSBvcGVyYXRpb24uIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQjZ2V0RUlucHV0IDxlbT5FSW5wdXQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdJbnB1dCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBCaW5kaW5nSW5wdXQgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nSW5wdXRfTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVJbnB1dChJbnB1dCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nSW5wdXRfRUlucHV0KCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBJbnB1dCBnZXRFSW5wdXQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVJbnB1dChJbnB1dCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RUlucHV0KCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNnZXRFSW5wdXQoKQotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBqYXZheC53c2RsLklucHV0IGdldElucHV0KCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgc2V0RUlucHV0KElucHV0KSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi0gICAqIEBzZWUgI3NldEVJbnB1dChJbnB1dCkKLSAgICogQHBhcmFtIGlucHV0IHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQGlnbm9yZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0SW5wdXQoamF2YXgud3NkbC5JbnB1dCBpbnB1dCk7Ci0KLX0gLy8gQmluZGluZ0lucHV0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzIzYjUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ09wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgT3BlcmF0aW9uPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBvcGVyYXRpb24gZWxlbWVudCB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvcGVyYXRpb24gZWxlbWVudCB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSB3aXRoaW4gdGhlIGJpbmRpbmcncyBwb3J0VHlwZS4gCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVPcGVyYXRpb24gPGVtPkVPcGVyYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdJbnB1dCA8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdPdXRwdXQgPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0ZhdWx0cyA8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJpbmRpbmdPcGVyYXRpb24gZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ09wZXJhdGlvbl9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVPcGVyYXRpb24oT3BlcmF0aW9uKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPcGVyYXRpb25fRU9wZXJhdGlvbigpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgT3BlcmF0aW9uIGdldEVPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFT3BlcmF0aW9uIDxlbT5FT3BlcmF0aW9uPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FT3BlcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RU9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RU9wZXJhdGlvbihPcGVyYXRpb24gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZyBJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIElucHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RUJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0lucHV0KCkKLSAgICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nSW5wdXQgZ2V0RUJpbmRpbmdJbnB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nSW5wdXQgPGVtPkVCaW5kaW5nIElucHV0PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZyBJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dCgpCi0gICAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgQmluZGluZ091dHB1dCBnZXRFQmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nT3V0cHV0IDxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FQmluZGluZyBGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUJpbmRpbmdGYXVsdHMoKTsKLQotfSAvLyBCaW5kaW5nT3BlcmF0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjI0NWZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ091dHB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE91dHB1dDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEFuIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhbiBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG91dHB1dCBvZiB0aGUgb3BlcmF0aW9uLiAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQjZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ091dHB1dCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBCaW5kaW5nT3V0cHV0IGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuQmluZGluZ091dHB1dAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPdXRwdXRfTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFT3V0cHV0KE91dHB1dCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQoKQotICAgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE91dHB1dCBnZXRFT3V0cHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQjZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVPdXRwdXQoT3V0cHV0IHZhbHVlKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBnZXRFT3V0cHV0KCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNnZXRFT3V0cHV0KCkKLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGphdmF4LndzZGwuT3V0cHV0IGdldE91dHB1dCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVPdXRwdXQoT3V0cHV0KSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi0gICAqIEBzZWUgI3NldEVPdXRwdXQoT3V0cHV0KQotICAgKiBAcGFyYW0gb3V0cHV0IHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE91dHB1dChqYXZheC53c2RsLk91dHB1dCBvdXRwdXQpOwotCi19IC8vIEJpbmRpbmdPdXRwdXQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MjNjMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9EZWZpbml0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlZmluaXRpb248L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQuIFRoZSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQgaXMgdGhlIHJvb3QgZWxlbWVudCBvZiBhIFdTREwgZG9jdW1lbnQuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRUYXJnZXROYW1lc3BhY2UgPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFbmNvZGluZyA8ZW0+RW5jb2Rpbmc8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RUltcG9ydHMgPGVtPkVJbXBvcnRzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVUeXBlcyA8ZW0+RVR5cGVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVNZXNzYWdlcyA8ZW0+RU1lc3NhZ2VzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVQb3J0VHlwZXMgPGVtPkVQb3J0IFR5cGVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVCaW5kaW5ncyA8ZW0+RUJpbmRpbmdzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVTZXJ2aWNlcyA8ZW0+RVNlcnZpY2VzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVOYW1lc3BhY2VzIDxlbT5FTmFtZXNwYWNlczwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbigpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBEZWZpbml0aW9uIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbgotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGFyZ2V0IE5hbWVzcGFjZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFRhcmdldE5hbWVzcGFjZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2UoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldFRhcmdldE5hbWVzcGFjZSA8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFRhcmdldE5hbWVzcGFjZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VGFyZ2V0TmFtZXNwYWNlKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRMb2NhdGlvbihTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9Mb2NhdGlvbigpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldExvY2F0aW9uKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRRTmFtZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX1FOYW1lKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5RTmFtZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUU5hbWUgZ2V0UU5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFFOYW1lKFFOYW1lIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RW5jb2Rpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVuY29kaW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FbmNvZGluZzwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldEVuY29kaW5nKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0VuY29kaW5nKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRFbmNvZGluZygpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVuY29kaW5nIDxlbT5FbmNvZGluZzwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RW5jb2Rpbmc8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRFbmNvZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RW5jb2RpbmcoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1lc3NhZ2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2V9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU1lc3NhZ2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVNZXNzYWdlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0VNZXNzYWdlcygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RU1lc3NhZ2VzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQb3J0IFR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fRVBvcnRUeXBlcygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVQb3J0VHlwZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmdzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmd9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUJpbmRpbmdzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0VCaW5kaW5ncygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUJpbmRpbmdzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVTZXJ2aWNlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVTZXJ2aWNlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FU2VydmljZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVTZXJ2aWNlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTmFtZXNwYWNlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2V9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU5hbWVzcGFjZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU5hbWVzcGFjZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9FTmFtZXNwYWNlcygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFTmFtZXNwYWNlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVUeXBlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RVR5cGVzKFR5cGVzKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fRVR5cGVzKCkKLSAgICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBUeXBlcyBnZXRFVHlwZXMoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFVHlwZXMgPGVtPkVUeXBlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVR5cGVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RVR5cGVzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFVHlwZXMoVHlwZXMgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FSW1wb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUltcG9ydHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUltcG9ydHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9FSW1wb3J0cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFSW1wb3J0cygpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBSZXR1cm5zIGEgVzNDIERPTSBEb2N1bWVudCBidWlsdCBmcm9tIHRoZSBpbnB1dCBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIFczQyBET00gRG9jdW1lbnQuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5ET01Eb2N1bWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogU2V0cyBhIFczQyBET00gRG9jdW1lbnQgdG8gYmUgdXNlZCB3aGVuIGJ1aWxkaW5nIHVwIGEgRE9NIEVsZW1lbnQgdHJlZSBmb3IgdGhlIFdTREwgbW9kZWwuCi0gICAqIEBwYXJhbSBkb2N1bWVudCBXM0MgRE9NIERvY3VtZW50LgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwgZG9jdW1lbnREYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRE9NRG9jdW1lbnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQgZG9jdW1lbnQpOwotCi19IC8vIERlZmluaXRpb24KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3YjQxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuIFdTREwgYWxsb3dzIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgdGVjaG5vbG9neSB1bmRlciB2YXJpb3VzIGVsZW1lbnRzIGRlZmluZWQgYnkgV1NETC4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCNpc1JlcXVpcmVkIDxlbT5SZXF1aXJlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0RWxlbWVudFR5cGUgPGVtPkVsZW1lbnQgVHlwZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5kcyBXU0RMRWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVxdWlyZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlcXVpcmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UmVxdWlyZWQoYm9vbGVhbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBib29sZWFuIGlzUmVxdWlyZWQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjaXNSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlcXVpcmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjaXNSZXF1aXJlZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UmVxdWlyZWQoYm9vbGVhbiB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RWxlbWVudCBUeXBlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50IFR5cGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRFbGVtZW50VHlwZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiIHRyYW5zaWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0RWxlbWVudFR5cGUgPGVtPkVsZW1lbnQgVHlwZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudCBUeXBlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVsZW1lbnRUeXBlKFFOYW1lIHZhbHVlKTsKLQotfSAvLyBFeHRlbnNpYmlsaXR5RWxlbWVudApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmxlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzNmMmZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXh0ZW5zaWJsZSBFbGVtZW50PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogIFdTREwgYWxsb3dzIGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHRlY2hub2xvZ3kgKHJlZmVycmVkIHRvIGhlcmUgYXMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cykgdW5kZXIgdmFyaW91cyBlbGVtZW50cyBkZWZpbmVkIGJ5IFdTREwuIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9pbnQgb2YgZXh0ZW5zaWJpbGl0eS4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIDxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKQotICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEV4dGVuc2libGVFbGVtZW50IGV4dGVuZHMgV1NETEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEV4dGVuc2libGVFbGVtZW50X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLSAgICogQHNlZSAjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iIG1hbnk9ImZhbHNlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBMaXN0IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGRzIGFuIEV4dGVuc2liaWxpdHlFbGVtZW50IHRvIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAcGFyYW0gZXh0RWxlbWVudCBBbiBFeHRlbnNpYmlsaXR5RWxlbWVudCB0byBiZSBhZGRlZC4KLSAgICogQGlnbm9yZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCk7Ci0KLX0gLy8gRXh0ZW5zaWJsZUVsZW1lbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRmF1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmMDE4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmF1bHQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGZhdWx0IGVsZW1lbnQuIEZhdWx0IGVsZW1lbnRzIHNwZWNpZnkgdGhlIGFic3RyYWN0IG1lc3NhZ2UgZm9ybWF0IGZvciBhbnkgZXJyb3IgbWVzc2FnZXMgdGhhdCBtYXkgYmUgb3V0cHV0IGFzIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRGYXVsdCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBGYXVsdCBleHRlbmRzIE1lc3NhZ2VSZWZlcmVuY2UsIGphdmF4LndzZGwuRmF1bHQKLXsKLX0gLy8gRmF1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWI3MGQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW1wb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkltcG9ydDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBXU0RMIGltcG9ydCBlbGVtZW50LiBXU0RMIGFsbG93cyBhc3NvY2lhdGluZyBhIG5hbWVzcGFjZSB3aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24gdXNpbmcgYW4gaW1wb3J0IGVsZW1lbnQuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFRGVmaW5pdGlvbiA8ZW0+RURlZmluaXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFU2NoZW1hIDxlbT5FU2NoZW1hPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRJbXBvcnQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSW1wb3J0IGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuSW1wb3J0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZXNwYWNlVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZXNwYWNlVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRMb2NhdGlvblVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RURlZmluaXRpb248L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFRGVmaW5pdGlvbihEZWZpbml0aW9uKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEltcG9ydF9FRGVmaW5pdGlvbigpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBEZWZpbml0aW9uIGdldEVEZWZpbml0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFRGVmaW5pdGlvbiA8ZW0+RURlZmluaXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVEZWZpbml0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RURlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVEZWZpbml0aW9uKERlZmluaXRpb24gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FU2NoZW1hPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FU2NoZW1hPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FU2NoZW1hPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RVNjaGVtYShYU0RTY2hlbWEpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0SW1wb3J0X0VTY2hlbWEoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgWFNEU2NoZW1hIGdldEVTY2hlbWEoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldEVTY2hlbWEgPGVtPkVTY2hlbWE8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVTY2hlbWE8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFU2NoZW1hKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFU2NoZW1hKFhTRFNjaGVtYSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RVNjaGVtYSgpLgotICAgKiBAc2VlICNnZXRFU2NoZW1hKCkKLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVNjaGVtYTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFhTRFNjaGVtYSBnZXRTY2hlbWEoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBzZXRFU2NoZW1hKFhTRFNjaGVtYSkuCi0gICAqIEBzZWUgI3NldEVTY2hlbWEoWFNEU2NoZW1hKQotICAgKiBAcGFyYW0gc2NoZW1hIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RVNjaGVtYTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKTsKLQotfSAvLyBJbXBvcnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvSW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5YWQ1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5wdXQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGlucHV0IGVsZW1lbnQuIEFuIGlucHV0IGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgdGhlIGlucHV0IG9mIHRoZSBvcGVyYXRpb24uCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0SW5wdXQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSW5wdXQgZXh0ZW5kcyBNZXNzYWdlUmVmZXJlbmNlLCBqYXZheC53c2RsLklucHV0Ci17Ci19IC8vIElucHV0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTY5MmVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBtZXNzYWdlIGVsZW1lbnQuIEEgV1NETCBtZXNzYWdlIGlzIGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIGNvbW11bmljYXRlZC4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2dldEVQYXJ0cyA8ZW0+RVBhcnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRNZXNzYWdlKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2UgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5NZXNzYWdlCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UU5hbWUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TWVzc2FnZV9RTmFtZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldFFOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRRTmFtZShRTmFtZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVbmRlZmluZWQoYm9vbGVhbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRNZXNzYWdlX1VuZGVmaW5lZCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBib29sZWFuIGlzVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRNZXNzYWdlX0VQYXJ0cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RVBhcnRzKCk7Ci0KLX0gLy8gTWVzc2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4MDBiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2VSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlIFJlZmVyZW5jZTwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNZXNzYWdlUmVmZXJlbmNlIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RU1lc3NhZ2UoTWVzc2FnZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNZXNzYWdlIGdldEVNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIHZhbHVlKTsKLQotfSAvLyBNZXNzYWdlUmVmZXJlbmNlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRiYmFiNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL05hbWVzcGFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYW1lc3BhY2U8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBuYW1lc3BhY2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5hbWVzcGFjZSBwcmVmaXggdXNlZCBpbiBhIFdTREwgZG9jdW1lbnQuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFVSSSA8ZW0+VVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UjZ2V0UHJlZml4IDxlbT5QcmVmaXg8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE5hbWVzcGFjZSgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBOYW1lc3BhY2UgZXh0ZW5kcyBFT2JqZWN0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXROYW1lc3BhY2VfVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRVUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFVSSSA8ZW0+VVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVSSShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QcmVmaXg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlByZWZpeDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJlZml4PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UHJlZml4KFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXROYW1lc3BhY2VfUHJlZml4KCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRQcmVmaXgoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFByZWZpeCA8ZW0+UHJlZml4PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5QcmVmaXg8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRQcmVmaXgoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFByZWZpeChTdHJpbmcgdmFsdWUpOwotCi19IC8vIE5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MmQ3MmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50LiBBIFdTREwgb3BlcmF0aW9uIGlzIGFuIGFic3RyYWN0IGRlc2NyaXB0aW9uIG9mIGFuIGFjdGlvbiBzdXBwb3J0ZWQgYnkgYSBzZXJ2aWNlLgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVGYXVsdHMgPGVtPkVGYXVsdHM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFUGFyYW1ldGVyT3JkZXJpbmcgPGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE9wZXJhdGlvbigpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBPcGVyYXRpb24gZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5PcGVyYXRpb24KLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRTdHlsZShPcGVyYXRpb25UeXBlKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE9wZXJhdGlvbl9TdHlsZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uVHlwZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgT3BlcmF0aW9uVHlwZSBnZXRTdHlsZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0U3R5bGUgPGVtPlN0eWxlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdHlsZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRTdHlsZShPcGVyYXRpb25UeXBlIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE9wZXJhdGlvbl9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VW5kZWZpbmVkKGJvb2xlYW4pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3BlcmF0aW9uX1VuZGVmaW5lZCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBib29sZWFuIGlzVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RUlucHV0KElucHV0KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE9wZXJhdGlvbl9FSW5wdXQoKQotICAgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIElucHV0IGdldEVJbnB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RUlucHV0IDxlbT5FSW5wdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVJbnB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RUlucHV0KElucHV0IHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVPdXRwdXQoT3V0cHV0KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE9wZXJhdGlvbl9FT3V0cHV0KCkKLSAgICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBPdXRwdXQgZ2V0RU91dHB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RU91dHB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVPdXRwdXQoT3V0cHV0IHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3BlcmF0aW9uX0VGYXVsdHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFRmF1bHRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUGFyYW1ldGVyIE9yZGVyaW5nPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0T3BlcmF0aW9uX0VQYXJhbWV0ZXJPcmRlcmluZygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKTsKLQotfSAvLyBPcGVyYXRpb24KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjA5ZWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3V0cHV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3V0cHV0PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBvdXRwdXQgZWxlbWVudC4gQW4gb3V0cHV0IGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgdGhlIG91dHB1dCBvZiB0aGUgb3BlcmF0aW9uLgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE91dHB1dCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBPdXRwdXQgZXh0ZW5kcyBNZXNzYWdlUmVmZXJlbmNlLCBqYXZheC53c2RsLk91dHB1dAotewotfSAvLyBPdXRwdXQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZjVhZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9QYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcGFydCBlbGVtZW50LiBQYXJ0cyBkZXNjcmliZSB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRWFjaCBwYXJ0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGUgZnJvbSBzb21lIHR5cGUgc3lzdGVtLiAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RWxlbWVudE5hbWUgPGVtPkVsZW1lbnQgTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlTmFtZSA8ZW0+VHlwZSBOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldFR5cGVEZWZpbml0aW9uIDxlbT5UeXBlIERlZmluaXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RWxlbWVudERlY2xhcmF0aW9uIDxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UGFydCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBQYXJ0IGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuUGFydAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBhcnRfTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVsZW1lbnQgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RWxlbWVudCBOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50IE5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRFbGVtZW50TmFtZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQYXJ0X0VsZW1lbnROYW1lKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5RTmFtZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUU5hbWUgZ2V0RWxlbWVudE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFbGVtZW50TmFtZSA8ZW0+RWxlbWVudCBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50IE5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRFbGVtZW50TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RWxlbWVudE5hbWUoUU5hbWUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlR5cGUgTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VHlwZU5hbWUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UGFydF9UeXBlTmFtZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldFR5cGVOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0VHlwZU5hbWUgPGVtPlR5cGUgTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0VHlwZU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFR5cGVOYW1lKFFOYW1lIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHlwZSBEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UeXBlIERlZmluaXRpb248L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBhcnRfVHlwZURlZmluaXRpb24oKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgWFNEVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlRGVmaW5pdGlvbiA8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlIERlZmluaXRpb248L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRUeXBlRGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IERlY2xhcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RWxlbWVudERlY2xhcmF0aW9uKFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbigpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RWxlbWVudERlY2xhcmF0aW9uIDxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVNZXNzYWdlKE1lc3NhZ2UpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UGFydF9FTWVzc2FnZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNZXNzYWdlIGdldEVNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIHZhbHVlKTsKLQotfSAvLyBQYXJ0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGQ1YjdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcnQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvcnQgZWxlbWVudC4gQSBwb3J0IGRlZmluZXMgYW4gaW5kaXZpZHVhbCBlbmRwb2ludCBieSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGFkZHJlc3MgZm9yIGEgYmluZGluZwotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCNnZXRFQmluZGluZyA8ZW0+RUJpbmRpbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBvcnQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUG9ydCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLlBvcnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0X05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZzwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUJpbmRpbmc8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RUJpbmRpbmcoQmluZGluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0X0VCaW5kaW5nKCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nIGdldEVCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0RUJpbmRpbmcgPGVtPkVCaW5kaW5nPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZzwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFQmluZGluZyhCaW5kaW5nIHZhbHVlKTsKLQotfSAvLyBQb3J0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YzIwNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0IFR5cGU8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvcnRUeXBlIGVsZW1lbnQgb2YgdGhlIFdTREwgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMSBhbmQgYW4gSW50ZXJmYWNlIGNvbXBvbmVudCBvZiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gMS4yLiBBIHBvcnQgdHlwZSBvciBJbnRlcmZhY2UgaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQgdGhlIGFic3RyYWN0IG1lc3NhZ2VzIGludm9sdmVkLgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjZ2V0RU9wZXJhdGlvbnMgPGVtPkVPcGVyYXRpb25zPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0VHlwZSgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBQb3J0VHlwZSBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLlBvcnRUeXBlCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UU5hbWUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UG9ydFR5cGVfUU5hbWUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBRTmFtZSBnZXRRTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFFOYW1lKFFOYW1lIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFVuZGVmaW5lZChib29sZWFuKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBvcnRUeXBlX1VuZGVmaW5lZCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBib29sZWFuIGlzVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbn0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FT3BlcmF0aW9uczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FT3BlcmF0aW9uczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0VHlwZV9FT3BlcmF0aW9ucygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFT3BlcmF0aW9ucygpOwotCi19IC8vIFBvcnRUeXBlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDlmZjM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZXJ2aWNlPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuIEEgc2VydmljZSBncm91cHMgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2dldEVQb3J0cyA8ZW0+RVBvcnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRTZXJ2aWNlKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNlcnZpY2UgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5TZXJ2aWNlCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UU5hbWUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0U2VydmljZV9RTmFtZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldFFOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRRTmFtZShRTmFtZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVbmRlZmluZWQoYm9vbGVhbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRTZXJ2aWNlX1VuZGVmaW5lZCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBib29sZWFuIGlzVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBvcnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVQb3J0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRTZXJ2aWNlX0VQb3J0cygpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RVBvcnRzKCk7Ci0KLX0gLy8gU2VydmljZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9UeXBlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWUwOTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHlwZXM8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHR5cGVzIGVsZW1lbnQuIFRoZSB0eXBlcyBlbGVtZW50IGVuY2xvc2VzIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSByZWxldmFudCBmb3IgdGhlIGV4Y2hhbmdlZCBtZXNzYWdlcy4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRUeXBlcygpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBUeXBlcyBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLlR5cGVzCi17Ci0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBSZXR1cm5zIGEgTGlzdCBvZiBpbmxpbmUgWFNEU2NoZW1hIGluc3RhbmNlcyBpbiB0aGlzIFR5cGVzLiAKLSAgICogQHJldHVybiBMaXN0IG9mIFhTRFNjaGVtYSBpbnN0YW5jZXMuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYQotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIiBtYW55PSJmYWxzZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTGlzdCBnZXRTY2hlbWFzKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFJldHVybnMgYSBMaXN0IG9mIGlubGluZSBYU0RTY2hlbWEgaW5zdGFuY2VzIGluIHRoaXMgVHlwZXMuIFRoZSB0YXJnZXROYW1lc3BhY2Ugb2YKLSAgICogdGhlIHNjaGVtYXMgYXJlIHRoZSBzYW1lIGFzIG5hbWVzcGFjZVVSSSBhcmd1bWVudCB2YWx1ZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZVVSSSB0YXJnZXROYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYXMgdG8gYmUgc2VhcmNoZWQgZm9yLgotICAgKiBAcmV0dXJuIExpc3Qgb2YgWFNEU2NoZW1hIGluc3RhbmNlcy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBtYW55PSJmYWxzZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTGlzdCBnZXRTY2hlbWFzKFN0cmluZyBuYW1lc3BhY2VVUkkpOwotCi19IC8vIFR5cGVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0NDg2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50I2dldENoaWxkcmVuIDxlbT5DaGlsZHJlbjwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5DaGlsZHJlbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q2hpbGRyZW48L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q2hpbGRyZW48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50X0NoaWxkcmVuKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldENoaWxkcmVuKCk7Ci0KLX0gLy8gVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYTNkZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBsYW5ndWFnZSBlbGVtZW50LgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldERvY3VtZW50YXRpb25FbGVtZW50IDxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFdTRExFbGVtZW50KCkKLSAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMRWxlbWVudCBleHRlbmRzIEVPYmplY3QKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXREb2N1bWVudGF0aW9uRWxlbWVudChFbGVtZW50KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50KCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5ET01FbGVtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFbGVtZW50IGdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldERvY3VtZW50YXRpb25FbGVtZW50IDxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXREb2N1bWVudGF0aW9uRWxlbWVudChFbGVtZW50IHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogVGhpcyBpcyB0aGUgdW5kZXJseWluZyBET00gZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wb25lbnQsIAotICAgKiBpLmUuLCB0aGUge0BsaW5rICN1cGRhdGVFbGVtZW50KCkgc2VyaWFsaXphdGlvbn0gb2YgdGhpcyBjb21wb25lbnQuCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRFbGVtZW50KEVsZW1lbnQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRE9NRWxlbWVudCIgdHJhbnNpZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFbGVtZW50IGdldEVsZW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQjZ2V0RWxlbWVudCA8ZW0+RWxlbWVudDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldEVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFJldHVybnMgdGhlIERlZmluaXRpb24gdGhhdCBjb250YWlucyB0aGlzIFdTREwgZWxlbWVudC4KLSAgICogQHJldHVybiB0aGUgRGVmaW5pdGlvbiB0aGF0IGNvbnRhaW5zIHRoaXMgV1NETCBlbGVtZW50LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRGVmaW5pdGlvbiBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFNldHMgdGhlIGVuY2xvc2luZyBkZWZpbml0aW9uIG9mIHRoaXMgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiB0aGUgRGVmaW5pdGlvbiB0aGF0IGNvbnRhaW5zIHRoaXMgV1NETCBlbGVtZW50LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pOwotCi0gIC8qKgotICAgKiBFbnN1cmVzIHRoYXQgdGhlIHVuZGVybHlpbmcgRE9NIHtAbGluayAjZ2V0RWxlbWVudCBlbGVtZW50fSBib3RoIGV4aXN0cyBhbmQgaXMgdXAtdG8tZGF0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIG1vZGVsLAotICAgKiBpLmUuLCBpdCBzZXJpYWxpemVzIHRoZSBjb21wb25lbnQgYW5kIG1haW50YWlucyBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoYXQgc2VyaWFsaXphdGlvbi4KLSAgICogQHNlZSAjdXBkYXRlRWxlbWVudChib29sZWFuKQotICAgKiBAc2VlICNnZXRFbGVtZW50Ci0gICAqLwotICB2b2lkIHVwZGF0ZUVsZW1lbnQoKTsKLQotICAvKioKLSAgICogRW5zdXJlcyB0aGF0IHRoZSB1bmRlcmx5aW5nIERPTSB7QGxpbmsgI2dldEVsZW1lbnQgZWxlbWVudH0gYm90aCBleGlzdHMgYW5kIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2RlbCwKLSAgICogaS5lLiwgaXQgc2VyaWFsaXplcyB0aGUgY29tcG9uZW50IGFuZCBtYWludGFpbnMgYW4gYXNzb2NpYXRpb24gd2l0aCB0aGF0IHNlcmlhbGl6YXRpb24uCi0gICAqIEZvciA8Y29kZT5kZWVwID09IHRydWU8L2NvZGU+LCAKLSAgICogb3Igd2hlbiA8Y29kZT57QGxpbmsgI2dldEVsZW1lbnQgZ2V0RWxlbWVudCgpfSA9PSBudWxsPC9jb2RlPiwgCi0gICAqIHRoaXMgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyB7QGxpbmsgI3VwZGF0ZUVsZW1lbnQoKX07Ci0gICAqIG90aGVyd2lzZSwgaXQgdXBkYXRlcyBqdXN0IHRoZSBET00gZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wb25lbnQgdG8gcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZS4KLSAgICogQHNlZSAjdXBkYXRlRWxlbWVudCgpCi0gICAqIEBzZWUgI2dldEVsZW1lbnQKLSAgICovCi0gIHZvaWQgdXBkYXRlRWxlbWVudChib29sZWFuIGRlZXApOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Db250YWluZXI8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogVGhpcyByZXByZXNlbnRzIHRoZSBjb25jcmV0ZSBjb250YWluZXIgb2YgdGhpcyBjb21wb25lbnQsIAotICAgKiBpLmUuLCB0aGUgaW52ZXJzZSBvZiB0aGUgYmxhY2sgZGlhbW9uZCByZWxhdGlvbnMgaW4gdGhlIFVNTCBtb2RlbC4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q29udGFpbmVyPC9lbT4nIHJlZmVyZW5jZS4KLSAgICovCi0gIFdTRExFbGVtZW50IGdldENvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZ2l2ZW4gZWxlbWVudCBoYXMgY2hhbmdlZDsKLSAgICogdGhlIGVsZW1lbnQgc2hvdWxkIHR5cGljYWxseSBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHJldHVybmVkIHtAbGluayAjZ2V0RWxlbWVudH0uCi0gICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgY2xpZW50cyB3aWxsIG5vdCBjYWxsIHRoaXMgdGhlbXNlbHZlcyAKLSAgICogc2luY2UgdGhlIERPTSBldmVudCBsaXN0ZW5lcnMgYXR0YWNoZWQgdG8gdGhlIHVuZGVybHlpbmcgRE9NIHdpbGwgaW52b2tlIHRoZXNlIGF1dG9tYXRpY2FsbHkuCi0gICAqIEBwYXJhbSBjaGFuZ2VkRWxlbWVudCB0aGUgRE9NIGVsZW1lbnQgY2hhbmdlZCBmb3IgdGhpcyBpbnN0YW5jZS4KLSAgICovCi0gIHZvaWQgZWxlbWVudENoYW5nZWQoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCk7Ci0KLX0gLy8gV1NETEVsZW1lbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4ZTA1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBXU0RMRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExGYWN0b3J5SW1wbC5pbml0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9ydCBUeXBlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3J0IFR5cGU8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFBvcnRUeXBlIGNyZWF0ZVBvcnRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE9wZXJhdGlvbiBjcmVhdGVPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NZXNzYWdlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NZXNzYWdlPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNZXNzYWdlIGNyZWF0ZU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQYXJ0IGNyZWF0ZVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nIGNyZWF0ZUJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEJpbmRpbmdPcGVyYXRpb24gY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNlcnZpY2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNlcnZpY2U8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNlcnZpY2UgY3JlYXRlU2VydmljZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcnQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFBvcnQgY3JlYXRlUG9ydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlZmluaXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlZmluaXRpb248L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkltcG9ydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW1wb3J0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBJbXBvcnQgY3JlYXRlSW1wb3J0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5wdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklucHV0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBJbnB1dCBjcmVhdGVJbnB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk91dHB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3V0cHV0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBPdXRwdXQgY3JlYXRlT3V0cHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBGYXVsdCBjcmVhdGVGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEJpbmRpbmdJbnB1dCBjcmVhdGVCaW5kaW5nSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIE91dHB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEJpbmRpbmdPdXRwdXQgY3JlYXRlQmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEJpbmRpbmdGYXVsdCBjcmVhdGVCaW5kaW5nRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lc3BhY2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWVzcGFjZTwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTmFtZXNwYWNlIGNyZWF0ZU5hbWVzcGFjZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlR5cGVzPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UeXBlczwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgVHlwZXMgY3JlYXRlVHlwZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgV1NETFBhY2thZ2UgZ2V0V1NETFBhY2thZ2UoKTsKLQotICAvKgotICAgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICAvL1dTRExQYWNrYWdlIGdldFdTRExQYWNrYWdlKCk7Ci19IC8vV1NETEZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk2MzI4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoZSBXU0RMIG1vZGVsIGNvbnRhaW5zIGNsYXNzZXMgZm9yIHRoZSBXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpLgotICogCi0gKiBXU0RMIGRlc2NyaWJlcyBuZXR3b3JrIHNlcnZpY2VzIGFzIHNldHMgb2YgZW5kcG9pbnRzIG9wZXJhdGluZyBvbiBtZXNzYWdlcy4gVGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGFyZSBkZXNjcmliZWQgYWJzdHJhY3RseSwgYW5kIHRoZW4gYm91bmQgdG8gYSBjb25jcmV0ZSBuZXR3b3JrIHByb3RvY29sIGFuZCBtZXNzYWdlIGZvcm1hdCB0byBkZWZpbmUgYW4gZW5kcG9pbnQuCi0gKiAKLSAqIFdTREwgZGVzY3JpYmVzIHRoZSBmb3JtYXRzIG9mIHRoZSBtZXNzYWdlcyBleGNoYW5nZWQgYnkgdGhlIHNlcnZpY2VzLCBhbmQgc3VwcG9ydHMgdGhlIFhNTCBTY2hlbWFzIHNwZWNpZmljYXRpb24gYXMgaXRzIGNhbm9uaWNhbCB0eXBlIHN5c3RlbS4gVGhpcyBwYWNrYWdlIHVzZXMgYW4gWE1MIFNjaGVtYSBJbmZvc2V0IG1vZGVsIHBhY2thZ2UgKHNlZSB0aGUgWFNEIHBhY2thZ2UpIHRvIGRlc2NyaWJlIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdHMuCi0gKiAKLSAqIFRoZSBtb2RlbCBjb250YWlucyB0aGUgZm9sbG93aW5nIGRpYWdyYW1zLCBuYW1lZCBhZnRlciB0aGUgY29ycmVzcG9uZGluZyBjaGFwdGVycyBpbiB0aGUgV1NETCAxLjEgc3BlY2lmaWNhdGlvbiAoaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9OT1RFLXdzZGwtMjAwMTAzMTUpCi0gKiAtIDIuMSBEZWZpbml0aW9uLCBzaG93cyB0aGUgV1NETCBkZWZpbml0aW9uIGVsZW1lbnQgYW5kIHRoZSBXU0RMIGRvY3VtZW50IHN0cnVjdHVyZQotICogLSAyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmcsIHNob3dzIHRoZSBuYW1lc3BhY2UgYW5kIGltcG9ydCBtZWNoYW5pc20KLSAqIC0gMi4xLjMgRXh0ZW5zaWJpbGl0eSwgc2hvd3MgdGhlIFdTREwgZXh0ZW5zaWJpbGl0eSBtZWNoYW5pc20KLSAqIC0gMi4yIFR5cGVzLCBzaG93cyB0aGUgdXNlIG9mIFhNTCBTY2hlbWEgdHlwZXMgaW4gV1NETAotICogLSAyLjMgTWVzc2FnZXMsIDIuNCBQb3J0VHlwZXMsIDIuNSBCaW5kaW5ncyBhbmQgMi43IFNlcnZpY2VzLCBzaG93IHRoZSBtYWpvciBXU0RMIGVsZW1lbnRzIGFuZCB0aGVpciByZWxhdGlvbnMuCi0gKiAKLSAqIFRoZSBXU0RMIGNsYXNzZXMgZXh0ZW5kIHRoZSBqYXZheC53c2RsIGludGVyZmFjZXMgZGVmaW5lZCBieSBKU1IgMTEwLiBDbGFzc2VzIHdpdGggaW50ZXJmYWNlIGFuZCBkYXRhdHlwZSBzdGVyZW90eXBlcyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlc2Ugbm9uLU1PRiBpbnRlcmZhY2VzLgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeQotICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NETFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZQotewotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTkFNRSA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvV1NETCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5TX1BSRUZJWCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgV1NETFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsIDxlbT5FbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRXU0RMRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBXU0RMX0VMRU1FTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFdTRExfRUxFTUVOVF9fRUxFTUVOVCA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FbGVtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFdTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UID0gMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2libGVFbGVtZW50SW1wbCA8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmxlRWxlbWVudEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRFeHRlbnNpYmxlRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBFWFRFTlNJQkxFX0VMRU1FTlQgPSAxMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UID0gV1NETF9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBXU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgPSBXU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0VHlwZUltcGwgPGVtPlBvcnQgVHlwZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydFR5cGVJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0UG9ydFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgUE9SVF9UWVBFID0gMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9UWVBFX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX1RZUEVfX1FOQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9UWVBFX19VTkRFRklORUQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9UWVBFX19FT1BFUkFUSU9OUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBvcnQgVHlwZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX1RZUEVfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwgPGVtPk9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBPUEVSQVRJT04gPSAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPUEVSQVRJT05fX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fU1RZTEUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19OQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19VTkRFRklORUQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPUEVSQVRJT05fX0VJTlBVVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPUEVSQVRJT05fX0VPVVRQVVQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPUEVSQVRJT05fX0VGQVVMVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFyYW1ldGVyIE9yZGVyaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkcgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5PcGVyYXRpb248L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlSW1wbCA8ZW0+TWVzc2FnZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE1FU1NBR0UgPSAzOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNRVNTQUdFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfX1FOQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9fVU5ERUZJTkVEID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNRVNTQUdFX19FUEFSVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NZXNzYWdlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBhcnRJbXBsIDxlbT5QYXJ0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgUEFSVCA9IDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19OQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fRUxFTUVOVF9OQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fVFlQRV9OQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fVFlQRV9ERUZJTklUSU9OID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAzOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBEZWNsYXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04gPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX0VNRVNTQUdFID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA1OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW1wbCA8ZW0+QmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEJJTkRJTkcgPSA1OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfX1FOQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19fVU5ERUZJTkVEID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfX0VQT1JUX1RZUEUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAzOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZzwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbCA8ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPcGVyYXRpb25JbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09QRVJBVElPTiA9IDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09QRVJBVElPTl9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTiA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIElucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDU7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCA8ZW0+U2VydmljZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRTZXJ2aWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNFUlZJQ0UgPSA3OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU0VSVklDRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU0VSVklDRV9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTRVJWSUNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNFUlZJQ0VfX1FOQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU0VSVklDRV9fVU5ERUZJTkVEID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTRVJWSUNFX19FUE9SVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TZXJ2aWNlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNFUlZJQ0VfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRJbXBsIDxlbT5Qb3J0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgUE9SVCA9IDg7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX19OQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX19FQklORElORyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBvcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIDxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCSUxJVFlfRUxFTUVOVCA9IDk7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCA9IFdTRExfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCA9IFdTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFID0gV1NETF9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UID0gV1NETF9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwgPGVtPkRlZmluaXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OID0gMTA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBOYW1lc3BhY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19MT0NBVElPTiA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fUU5BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmNvZGluZzwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VOQ09ESU5HID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAzOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUltcG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VJTVBPUlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRVRZUEVTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA1OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FTUVTU0FHRVMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRVBPUlRfVFlQRVMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VCSU5ESU5HUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgODsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTZXJ2aWNlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRVNFUlZJQ0VTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA5OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU5hbWVzcGFjZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VOQU1FU1BBQ0VTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxMDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRlZmluaXRpb248L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGwgPGVtPkltcG9ydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEltcG9ydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTVBPUlQgPSAxMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNUE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU1QT1JUX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNUE9SVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNUE9SVF9fTkFNRVNQQUNFX1VSSSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNUE9SVF9fTE9DQVRJT05fVVJJID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RURlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0VERUZJTklUSU9OID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVNjaGVtYTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNUE9SVF9fRVNDSEVNQSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkltcG9ydDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VSZWZlcmVuY2VJbXBsIDxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZVJlZmVyZW5jZUltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFID0gNDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNRVNTQUdFX1JFRkVSRU5DRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9SRUZFUkVOQ0VfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9SRUZFUkVOQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9SRUZFUkVOQ0VfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLklucHV0SW1wbCA8ZW0+SW5wdXQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLklucHV0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElOUFVUID0gMTM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTlBVVF9fRUxFTUVOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IE1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTlBVVF9fTkFNRSA9IE1FU1NBR0VfUkVGRVJFTkNFX19OQU1FOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTlBVVF9fRU1FU1NBR0UgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnB1dDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTlBVVF9GRUFUVVJFX0NPVU5UID0gTUVTU0FHRV9SRUZFUkVOQ0VfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PdXRwdXRJbXBsIDxlbT5PdXRwdXQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk91dHB1dEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgT1VUUFVUID0gMTQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPVVRQVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX19FTEVNRU5UID0gTUVTU0FHRV9SRUZFUkVOQ0VfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IE1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPVVRQVVRfX05BTUUgPSBNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX19FTUVTU0FHRSA9IE1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk91dHB1dDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPVVRQVVRfRkVBVFVSRV9DT1VOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRmF1bHRJbXBsIDxlbT5GYXVsdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRmF1bHRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgRkFVTFQgPSAxNTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEZBVUxUX19FTEVNRU5UID0gTUVTU0FHRV9SRUZFUkVOQ0VfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgRkFVTFRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gTUVTU0FHRV9SRUZFUkVOQ0VfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEZBVUxUX19OQU1FID0gTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEZBVUxUX19FTUVTU0FHRSA9IE1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkZhdWx0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEZBVUxUX0ZFQVRVUkVfQ09VTlQgPSBNRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbnB1dEltcGwgPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbnB1dEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgQklORElOR19JTlBVVCA9IDE2OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19JTlBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19JTlBVVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX0lOUFVUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19JTlBVVF9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfX0VJTlBVVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ091dHB1dEltcGwgPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3V0cHV0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEJpbmRpbmdPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgQklORElOR19PVVRQVVQgPSAxNzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09VVFBVVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1VUUFVUX19OQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1VUUFVUX19FT1VUUFVUID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdGYXVsdEltcGwgPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdGYXVsdEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgQklORElOR19GQVVMVCA9IDE4OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19GQVVMVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX0ZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19GQVVMVF9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVGYXVsdDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfX0VGQVVMVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTmFtZXNwYWNlSW1wbCA8ZW0+TmFtZXNwYWNlPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5OYW1lc3BhY2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0TmFtZXNwYWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE5BTUVTUEFDRSA9IDE5OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTkFNRVNQQUNFX19VUkkgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJlZml4PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTkFNRVNQQUNFX19QUkVGSVggPSAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TmFtZXNwYWNlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE5BTUVTUEFDRV9GRUFUVVJFX0NPVU5UID0gMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlBvcnRUeXBlIDxlbT5JUG9ydCBUeXBlPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0VHlwZQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElQb3J0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJUE9SVF9UWVBFID0gMjA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JUG9ydCBUeXBlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElQT1JUX1RZUEVfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5PcGVyYXRpb24gPGVtPklPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLk9wZXJhdGlvbgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU9QRVJBVElPTiA9IDIxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuSW5wdXQgPGVtPklJbnB1dDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuSW5wdXQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUlOUFVUID0gMjI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSW5wdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUlOUFVUX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuT3V0cHV0IDxlbT5JT3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5PdXRwdXQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElPVVRQVVQgPSAyMzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklPdXRwdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU9VVFBVVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkZhdWx0IDxlbT5JRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLkZhdWx0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElGQVVMVCA9IDI0OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUZhdWx0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElGQVVMVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLk1lc3NhZ2UgPGVtPklNZXNzYWdlPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5NZXNzYWdlCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU1FU1NBR0UgPSAyNTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNZXNzYWdlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNRVNTQUdFX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuUGFydCA8ZW0+SVBhcnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLlBhcnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJUEFSVCA9IDI2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVBhcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVBBUlRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5TZXJ2aWNlIDxlbT5JU2VydmljZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuU2VydmljZQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElTZXJ2aWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElTRVJWSUNFID0gMjc7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU2VydmljZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJU0VSVklDRV9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlBvcnQgPGVtPklQb3J0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVBPUlQgPSAyODsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklQb3J0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElQT1JUX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZyA8ZW0+SUJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmcKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJQklORElORyA9IDI5OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmc8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIDxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZ09wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJQklORElOR19PUEVSQVRJT04gPSAzMDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJQklORElOR19PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgPGVtPklCaW5kaW5nIElucHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZ0lucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX0lOUFVUID0gMzE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBJbnB1dDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJQklORElOR19JTlBVVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgPGVtPklCaW5kaW5nIE91dHB1dDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ091dHB1dAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX09VVFBVVCA9IDMyOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX09VVFBVVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCA8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdGYXVsdAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfRkFVTFQgPSAzMzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nIEZhdWx0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX0ZBVUxUX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJRVhURU5TSUJJTElUWV9FTEVNRU5UID0gMzQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5EZWZpbml0aW9uIDxlbT5JRGVmaW5pdGlvbjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuRGVmaW5pdGlvbgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElEZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElERUZJTklUSU9OID0gMzU7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JRGVmaW5pdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJREVGSU5JVElPTl9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkltcG9ydCA8ZW0+SUltcG9ydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuSW1wb3J0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUltcG9ydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJSU1QT1JUID0gMzY7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSW1wb3J0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElJTVBPUlRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS51dGlsLkxpc3QgPGVtPklMaXN0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YS51dGlsLkxpc3QKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJTGlzdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTElTVCA9IDM3OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUxpc3Q8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUxJU1RfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS51dGlsLk1hcCA8ZW0+SU1hcDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmEudXRpbC5NYXAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJTWFwKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElNQVAgPSAzODsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNYXA8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU1BUF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZhLm5ldC5VUkwgPGVtPklVUkw8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZhLm5ldC5VUkwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJVVJMKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElVUkwgPSAzOTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklVUkw8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVVSTF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkgPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUVYVEVOU0lPTl9SRUdJU1RSWSA9IDQwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJRVhURU5TSU9OX1JFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVHlwZXNJbXBsIDxlbT5UeXBlczwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVHlwZXNJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0VHlwZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgVFlQRVMgPSA0MTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFRZUEVTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBUWVBFU19fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBUWVBFU19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VHlwZXM8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVFlQRVNfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZhLnV0aWwuSXRlcmF0b3IgPGVtPklJdGVyYXRvcjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmEudXRpbC5JdGVyYXRvcgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElJdGVyYXRvcigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJSVRFUkFUT1IgPSA0MjsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklJdGVyYXRvcjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSVRFUkFUT1JfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5UeXBlcyA8ZW0+SVR5cGVzPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5UeXBlcwotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElUeXBlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJVFlQRVMgPSA0MzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklUeXBlczwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJVFlQRVNfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIDxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCA9IDQ0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hpbGRyZW48L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTiA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCA9IDQ1OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+UU5hbWU8L2VtPicgZGF0YSB0eXBlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgUU5BTUUgPSA0NzsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5PcGVyYXRpb24gVHlwZTwvZW0+JyBkYXRhIHR5cGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE9wZXJhdGlvblR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX1RZUEUgPSA0ODsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5ET00gRWxlbWVudDwvZW0+JyBkYXRhIHR5cGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy53M2MuZG9tLkVsZW1lbnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRET01FbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IERPTV9FTEVNRU5UID0gNDk7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RXhjZXB0aW9uPC9lbT4nIGRhdGEgdHlwZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0V1NETEV4Y2VwdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBXU0RMX0VYQ0VQVElPTiA9IDUwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkRPTSBEb2N1bWVudDwvZW0+JyBkYXRhIHR5cGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy53M2MuZG9tLkRvY3VtZW50Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RE9NRG9jdW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgRE9NX0RPQ1VNRU5UID0gNTE7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50IDxlbT5FbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFdTRExFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQgPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBzZWUgI2dldFdTRExFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldEVsZW1lbnQoKQotICAgKiBAc2VlICNnZXRXU0RMRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSA8ZW0+UG9ydCBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcnQgVHlwZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0UG9ydFR5cGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5RTmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRRTmFtZSgpCi0gICAqIEBzZWUgI2dldFBvcnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRQb3J0VHlwZV9RTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VbmRlZmluZWQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjaXNVbmRlZmluZWQoKQotICAgKiBAc2VlICNnZXRQb3J0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0UG9ydFR5cGVfVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRFT3BlcmF0aW9ucyA8ZW0+RU9wZXJhdGlvbnM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVPcGVyYXRpb25zPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2dldEVPcGVyYXRpb25zKCkKLSAgICogQHNlZSAjZ2V0UG9ydFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFBvcnRUeXBlX0VPcGVyYXRpb25zKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiA8ZW0+T3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE9wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdHlsZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0U3R5bGUoKQotICAgKiBAc2VlICNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9TdHlsZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0T3BlcmF0aW9uX05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVuZGVmaW5lZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jaXNVbmRlZmluZWQoKQotICAgKiBAc2VlICNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9VbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RUlucHV0IDxlbT5FSW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5FSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVJbnB1dCgpCi0gICAqIEBzZWUgI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VJbnB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFT3V0cHV0IDxlbT5FT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RU91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RU91dHB1dCgpCi0gICAqIEBzZWUgI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFRmF1bHRzIDxlbT5FRmF1bHRzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FRmF1bHRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFRmF1bHRzKCkKLSAgICogQHNlZSAjZ2V0T3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRUZhdWx0cygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVQYXJhbWV0ZXJPcmRlcmluZyA8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkKLSAgICogQHNlZSAjZ2V0T3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UgPGVtPk1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5RTmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2dldFFOYW1lKCkKLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZV9RTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVuZGVmaW5lZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2lzVW5kZWZpbmVkKCkKLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZV9VbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjZ2V0RVBhcnRzIDxlbT5FUGFydHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVQYXJ0czwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2dldEVQYXJ0cygpCi0gICAqIEBzZWUgI2dldE1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldE1lc3NhZ2VfRVBhcnRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQgPGVtPlBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRQYXJ0X05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnROYW1lIDxlbT5FbGVtZW50IE5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FbGVtZW50IE5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFbGVtZW50TmFtZSgpCi0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFBhcnRfRWxlbWVudE5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldFR5cGVOYW1lIDxlbT5UeXBlIE5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UeXBlIE5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlTmFtZSgpCi0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFBhcnRfVHlwZU5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldFR5cGVEZWZpbml0aW9uIDxlbT5UeXBlIERlZmluaXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5UeXBlIERlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlRGVmaW5pdGlvbigpCi0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFBhcnRfVHlwZURlZmluaXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnREZWNsYXJhdGlvbiA8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFbGVtZW50RGVjbGFyYXRpb24oKQotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RU1lc3NhZ2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFTWVzc2FnZSgpCi0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFBhcnRfRU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyA8ZW0+QmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlFOYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjZ2V0UU5hbWUoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nX1FOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VW5kZWZpbmVkPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjaXNVbmRlZmluZWQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nX1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjZ2V0RVBvcnRUeXBlIDxlbT5FUG9ydCBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RVBvcnQgVHlwZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVQb3J0VHlwZSgpCi0gICAqIEBzZWUgI2dldEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdfRVBvcnRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVCaW5kaW5nT3BlcmF0aW9ucyA8ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVCaW5kaW5nT3BlcmF0aW9ucygpCi0gICAqIEBzZWUgI2dldEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24gPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEJpbmRpbmdPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RU9wZXJhdGlvbiA8ZW0+RU9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFT3BlcmF0aW9uKCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0lucHV0IDxlbT5FQmluZGluZyBJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVCaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdJbnB1dCgpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdPdXRwdXQgPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nT3V0cHV0KCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0ZhdWx0cyA8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FQmluZGluZyBGYXVsdHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0ZhdWx0cygpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSA8ZW0+U2VydmljZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TZXJ2aWNlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNlcnZpY2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlFOYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0UU5hbWUoKQotICAgKiBAc2VlICNnZXRTZXJ2aWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTZXJ2aWNlX1FOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VW5kZWZpbmVkPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjaXNVbmRlZmluZWQoKQotICAgKiBAc2VlICNnZXRTZXJ2aWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTZXJ2aWNlX1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSNnZXRFUG9ydHMgPGVtPkVQb3J0czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBvcnRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0RVBvcnRzKCkKLSAgICogQHNlZSAjZ2V0U2VydmljZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0U2VydmljZV9FUG9ydHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCA8ZW0+UG9ydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3J0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFBvcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldFBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFBvcnRfTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0RUJpbmRpbmcgPGVtPkVCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RUJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCNnZXRFQmluZGluZygpCi0gICAqIEBzZWUgI2dldFBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFBvcnRfRUJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjaXNSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SZXF1aXJlZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCNpc1JlcXVpcmVkKCkKLSAgICogQHNlZSAjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0RWxlbWVudFR5cGUgPGVtPkVsZW1lbnQgVHlwZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRFbGVtZW50VHlwZSgpCi0gICAqIEBzZWUgI2dldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uIDxlbT5EZWZpbml0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0RGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0VGFyZ2V0TmFtZXNwYWNlIDxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldFRhcmdldE5hbWVzcGFjZSgpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldExvY2F0aW9uKCkKLSAgICogQHNlZSAjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0RGVmaW5pdGlvbl9Mb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UU5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRRTmFtZSgpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldERlZmluaXRpb25fUU5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVuY29kaW5nIDxlbT5FbmNvZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVuY29kaW5nPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RW5jb2RpbmcoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX0VuY29kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVJbXBvcnRzIDxlbT5FSW1wb3J0czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUltcG9ydHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFSW1wb3J0cygpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRUltcG9ydHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVUeXBlcyA8ZW0+RVR5cGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RVR5cGVzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RVR5cGVzKCkKLSAgICogQHNlZSAjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RU1lc3NhZ2VzIDxlbT5FTWVzc2FnZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVNZXNzYWdlczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVNZXNzYWdlcygpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRU1lc3NhZ2VzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVQb3J0VHlwZXMgPGVtPkVQb3J0IFR5cGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FUG9ydCBUeXBlczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVQb3J0VHlwZXMoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RUJpbmRpbmdzIDxlbT5FQmluZGluZ3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVCaW5kaW5nczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVCaW5kaW5ncygpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRUJpbmRpbmdzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVTZXJ2aWNlcyA8ZW0+RVNlcnZpY2VzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FU2VydmljZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFU2VydmljZXMoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFTmFtZXNwYWNlcyA8ZW0+RU5hbWVzcGFjZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVOYW1lc3BhY2VzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RU5hbWVzcGFjZXMoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCA8ZW0+SW1wb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkltcG9ydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEltcG9ydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAc2VlICNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEltcG9ydF9OYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAc2VlICNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEltcG9ydF9Mb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFRGVmaW5pdGlvbiA8ZW0+RURlZmluaXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FRGVmaW5pdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RURlZmluaXRpb24oKQotICAgKiBAc2VlICNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEltcG9ydF9FRGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFU2NoZW1hIDxlbT5FU2NoZW1hPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RVNjaGVtYTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RVNjaGVtYSgpCi0gICAqIEBzZWUgI2dldEltcG9ydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0SW1wb3J0X0VTY2hlbWEoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEV4dGVuc2libGVFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIDxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAqIEBzZWUgI2dldEV4dGVuc2libGVFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0IDxlbT5JbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0IDxlbT5PdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+T3V0cHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0T3V0cHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0IDxlbT5GYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0RmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0IDxlbT5CaW5kaW5nIElucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRCaW5kaW5nSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEJpbmRpbmdJbnB1dF9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RUlucHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCNnZXRFSW5wdXQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdJbnB1dF9FSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCA8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0QmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCNnZXROYW1lKCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ091dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ091dHB1dF9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCNnZXRFT3V0cHV0IDxlbT5FT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RU91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldEVPdXRwdXQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0IDxlbT5CaW5kaW5nIEZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRCaW5kaW5nRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEJpbmRpbmdGYXVsdF9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldEVGYXVsdCA8ZW0+RUZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RUZhdWx0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCNnZXRFRmF1bHQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdGYXVsdF9FRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlIDxlbT5OYW1lc3BhY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TmFtZXNwYWNlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFVSSSA8ZW0+VVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSNnZXRVUkkoKQotICAgKiBAc2VlICNnZXROYW1lc3BhY2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE5hbWVzcGFjZV9VUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UjZ2V0UHJlZml4IDxlbT5QcmVmaXg8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5QcmVmaXg8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFByZWZpeCgpCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0TmFtZXNwYWNlX1ByZWZpeCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlBvcnRUeXBlIDxlbT5JUG9ydCBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklQb3J0IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0VHlwZQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5Qb3J0VHlwZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElQb3J0VHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLk9wZXJhdGlvbiA8ZW0+SU9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuT3BlcmF0aW9uCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLk9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5JbnB1dCA8ZW0+SUlucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklJbnB1dDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLklucHV0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLklucHV0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUlucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuT3V0cHV0IDxlbT5JT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5PdXRwdXQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuT3V0cHV0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SU91dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkZhdWx0IDxlbT5JRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUZhdWx0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuRmF1bHQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuRmF1bHQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5NZXNzYWdlIDxlbT5JTWVzc2FnZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLk1lc3NhZ2UKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuTWVzc2FnZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuUGFydCA8ZW0+SVBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVBhcnQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5QYXJ0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLlBhcnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlNlcnZpY2UgPGVtPklTZXJ2aWNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTZXJ2aWNlPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuU2VydmljZQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5TZXJ2aWNlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNlcnZpY2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5Qb3J0IDxlbT5JUG9ydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JUG9ydDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLlBvcnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuUG9ydCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElQb3J0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZyA8ZW0+SUJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLkJpbmRpbmciCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJQmluZGluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gPGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJQmluZGluZ09wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCA8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuQmluZGluZ0lucHV0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUJpbmRpbmdJbnB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgPGVtPklCaW5kaW5nIE91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJQmluZGluZ091dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCA8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuQmluZGluZ0ZhdWx0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUJpbmRpbmdGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkRlZmluaXRpb24gPGVtPklEZWZpbml0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklEZWZpbml0aW9uPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuRGVmaW5pdGlvbgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5EZWZpbml0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SURlZmluaXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5JbXBvcnQgPGVtPklJbXBvcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUltcG9ydDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLkltcG9ydAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5JbXBvcnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJSW1wb3J0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5MaXN0IDxlbT5JTGlzdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTGlzdDwvZW0+Jy4KLSAgICogQHNlZSBqYXZhLnV0aWwuTGlzdAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS51dGlsLkxpc3QiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJTGlzdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTWFwIDxlbT5JTWFwPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklNYXA8L2VtPicuCi0gICAqIEBzZWUgamF2YS51dGlsLk1hcAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS51dGlsLk1hcCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElNYXAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS5uZXQuVVJMIDxlbT5JVVJMPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklVUkw8L2VtPicuCi0gICAqIEBzZWUgamF2YS5uZXQuVVJMCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLm5ldC5VUkwiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJVVJMKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeSA8ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzIDxlbT5UeXBlczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UeXBlczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0VHlwZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLkl0ZXJhdG9yIDxlbT5JSXRlcmF0b3I8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUl0ZXJhdG9yPC9lbT4nLgotICAgKiBAc2VlIGphdmEudXRpbC5JdGVyYXRvcgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS51dGlsLkl0ZXJhdG9yIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUl0ZXJhdG9yKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuVHlwZXMgPGVtPklUeXBlczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JVHlwZXM8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5UeXBlcwotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5UeXBlcyIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElUeXBlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0Q2hpbGRyZW4gPGVtPkNoaWxkcmVuPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5DaGlsZHJlbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0Q2hpbGRyZW4oKQotICAgKiBAc2VlICNnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0U2NoZW1hIDxlbT5TY2hlbWE8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5TY2hlbWE8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0U2NoZW1hKCkKLSAgICogQHNlZSAjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50X1NjaGVtYSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlIDxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlI2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlI2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVNZXNzYWdlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UjZ2V0RU1lc3NhZ2UoKQotICAgKiBAc2VlICNnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIDxlbT5RTmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+UU5hbWU8L2VtPicuCi0gICAqIEBzZWUgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZQotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRURhdGFUeXBlIGdldFFOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZheC53c2RsLk9wZXJhdGlvblR5cGUgPGVtPk9wZXJhdGlvbiBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5PcGVyYXRpb24gVHlwZTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLk9wZXJhdGlvblR5cGUKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuT3BlcmF0aW9uVHlwZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRURhdGFUeXBlIGdldE9wZXJhdGlvblR5cGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIG9yZy53M2MuZG9tLkVsZW1lbnQgPGVtPkRPTSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5ET00gRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSBvcmcudzNjLmRvbS5FbGVtZW50Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcudzNjLmRvbS5FbGVtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFRGF0YVR5cGUgZ2V0RE9NRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uIDxlbT5FeGNlcHRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPkV4Y2VwdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLldTRExFeGNlcHRpb24KLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuV1NETEV4Y2VwdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRURhdGFUeXBlIGdldFdTRExFeGNlcHRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIG9yZy53M2MuZG9tLkRvY3VtZW50IDxlbT5ET00gRG9jdW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPkRPTSBEb2N1bWVudDwvZW0+Jy4KLSAgICogQHNlZSBvcmcudzNjLmRvbS5Eb2N1bWVudAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLnczYy5kb20uRG9jdW1lbnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVEYXRhVHlwZSBnZXRET01Eb2N1bWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBXU0RMRmFjdG9yeSBnZXRXU0RMRmFjdG9yeSgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gICAqIDx1bD4KLSAgICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAgICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAgICogPC91bD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludGVyZmFjZSBMaXRlcmFscwotICB7Ci0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsIDxlbT5FbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFdTRExFbGVtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFdTRExfRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRXU0RMRWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBXU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgV1NETF9FTEVNRU5UX19FTEVNRU5UID0gZUlOU1RBTkNFLmdldFdTRExFbGVtZW50X0VsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCA8ZW0+UG9ydCBUeXBlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0VHlwZUltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFBvcnRUeXBlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFBPUlRfVFlQRSA9IGVJTlNUQU5DRS5nZXRQb3J0VHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFBPUlRfVFlQRV9fUU5BTUUgPSBlSU5TVEFOQ0UuZ2V0UG9ydFR5cGVfUU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgUE9SVF9UWVBFX19VTkRFRklORUQgPSBlSU5TVEFOQ0UuZ2V0UG9ydFR5cGVfVW5kZWZpbmVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBQT1JUX1RZUEVfX0VPUEVSQVRJT05TID0gZUlOU1RBTkNFLmdldFBvcnRUeXBlX0VPcGVyYXRpb25zKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsIDxlbT5PcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE9wZXJhdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBPUEVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgT1BFUkFUSU9OX19TVFlMRSA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb25fU3R5bGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE9QRVJBVElPTl9fTkFNRSA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb25fTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBPUEVSQVRJT05fX1VOREVGSU5FRCA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb25fVW5kZWZpbmVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE9QRVJBVElPTl9fRUlOUFVUID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvbl9FSW5wdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE9QRVJBVElPTl9fRU9VVFBVVCA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb25fRU91dHB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBPUEVSQVRJT05fX0VGQVVMVFMgPSBlSU5TVEFOQ0UuZ2V0T3BlcmF0aW9uX0VGYXVsdHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFyYW1ldGVyIE9yZGVyaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvbl9FUGFyYW1ldGVyT3JkZXJpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VJbXBsIDxlbT5NZXNzYWdlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0TWVzc2FnZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBNRVNTQUdFID0gZUlOU1RBTkNFLmdldE1lc3NhZ2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBNRVNTQUdFX19RTkFNRSA9IGVJTlNUQU5DRS5nZXRNZXNzYWdlX1FOYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE1FU1NBR0VfX1VOREVGSU5FRCA9IGVJTlNUQU5DRS5nZXRNZXNzYWdlX1VuZGVmaW5lZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1FU1NBR0VfX0VQQVJUUyA9IGVJTlNUQU5DRS5nZXRNZXNzYWdlX0VQYXJ0cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwgPGVtPlBhcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBhcnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRQYXJ0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFBBUlQgPSBlSU5TVEFOQ0UuZ2V0UGFydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgUEFSVF9fTkFNRSA9IGVJTlNUQU5DRS5nZXRQYXJ0X05hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgUEFSVF9fRUxFTUVOVF9OQU1FID0gZUlOU1RBTkNFLmdldFBhcnRfRWxlbWVudE5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgUEFSVF9fVFlQRV9OQU1FID0gZUlOU1RBTkNFLmdldFBhcnRfVHlwZU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlIERlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgUEFSVF9fVFlQRV9ERUZJTklUSU9OID0gZUlOU1RBTkNFLmdldFBhcnRfVHlwZURlZmluaXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IERlY2xhcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBQQVJUX19FTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRQYXJ0X0VNZXNzYWdlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW1wbCA8ZW0+QmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEJpbmRpbmcoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgQklORElORyA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgQklORElOR19fUU5BTUUgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ19RTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBCSU5ESU5HX19VTkRFRklORUQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ19VbmRlZmluZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfX0VQT1JUX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ19FUG9ydFR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUyA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nX0VCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwgPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBCSU5ESU5HX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBCSU5ESU5HX09QRVJBVElPTl9fTkFNRSA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3BlcmF0aW9uX05hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPcGVyYXRpb25fRU9wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIElucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nSW5wdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nRmF1bHRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCA8ZW0+U2VydmljZTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFNlcnZpY2UoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgU0VSVklDRSA9IGVJTlNUQU5DRS5nZXRTZXJ2aWNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU0VSVklDRV9fUU5BTUUgPSBlSU5TVEFOQ0UuZ2V0U2VydmljZV9RTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTRVJWSUNFX19VTkRFRklORUQgPSBlSU5TVEFOQ0UuZ2V0U2VydmljZV9VbmRlZmluZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBTRVJWSUNFX19FUE9SVFMgPSBlSU5TVEFOQ0UuZ2V0U2VydmljZV9FUG9ydHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRJbXBsIDxlbT5Qb3J0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0UG9ydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBQT1JUID0gZUlOU1RBTkNFLmdldFBvcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFBPUlRfX05BTUUgPSBlSU5TVEFOQ0UuZ2V0UG9ydF9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgUE9SVF9fRUJJTkRJTkcgPSBlSU5TVEFOQ0UuZ2V0UG9ydF9FQmluZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIDxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgRVhURU5TSUJJTElUWV9FTEVNRU5UID0gZUlOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCA9IGVJTlNUQU5DRS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSA9IGVJTlNUQU5DRS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwgPGVtPkRlZmluaXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXREZWZpbml0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIERFRklOSVRJT04gPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBOYW1lc3BhY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRSA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX1RhcmdldE5hbWVzcGFjZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIERFRklOSVRJT05fX0xPQ0FUSU9OID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fTG9jYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBERUZJTklUSU9OX19RTkFNRSA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX1FOYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5jb2Rpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgREVGSU5JVElPTl9fRU5DT0RJTkcgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVJbXBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgREVGSU5JVElPTl9fRUlNUE9SVFMgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FSW1wb3J0cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBERUZJTklUSU9OX19FVFlQRVMgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBERUZJTklUSU9OX19FTUVTU0FHRVMgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FTWVzc2FnZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIERFRklOSVRJT05fX0VQT1JUX1RZUEVTID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fRVBvcnRUeXBlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIERFRklOSVRJT05fX0VCSU5ESU5HUyA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VCaW5kaW5ncygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVTZXJ2aWNlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIERFRklOSVRJT05fX0VTRVJWSUNFUyA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgREVGSU5JVElPTl9fRU5BTUVTUEFDRVMgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FTmFtZXNwYWNlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbCA8ZW0+SW1wb3J0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJbXBvcnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU1QT1JUID0gZUlOU1RBTkNFLmdldEltcG9ydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgSU1QT1JUX19OQU1FU1BBQ0VfVVJJID0gZUlOU1RBTkNFLmdldEltcG9ydF9OYW1lc3BhY2VVUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgSU1QT1JUX19MT0NBVElPTl9VUkkgPSBlSU5TVEFOQ0UuZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RURlZmluaXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgSU1QT1JUX19FREVGSU5JVElPTiA9IGVJTlNUQU5DRS5nZXRJbXBvcnRfRURlZmluaXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FU2NoZW1hPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIElNUE9SVF9fRVNDSEVNQSA9IGVJTlNUQU5DRS5nZXRJbXBvcnRfRVNjaGVtYSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIDxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2libGVFbGVtZW50SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgRVhURU5TSUJMRV9FTEVNRU5UID0gZUlOU1RBTkNFLmdldEV4dGVuc2libGVFbGVtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gZUlOU1RBTkNFLmdldEV4dGVuc2libGVFbGVtZW50X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLklucHV0SW1wbCA8ZW0+SW5wdXQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLklucHV0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SW5wdXQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU5QVVQgPSBlSU5TVEFOQ0UuZ2V0SW5wdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk91dHB1dEltcGwgPGVtPk91dHB1dDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3V0cHV0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0T3V0cHV0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE9VVFBVVCA9IGVJTlNUQU5DRS5nZXRPdXRwdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkZhdWx0SW1wbCA8ZW0+RmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkZhdWx0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RmF1bHQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgRkFVTFQgPSBlSU5TVEFOQ0UuZ2V0RmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbnB1dEltcGwgPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbnB1dEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEJpbmRpbmdJbnB1dCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBCSU5ESU5HX0lOUFVUID0gZUlOU1RBTkNFLmdldEJpbmRpbmdJbnB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgQklORElOR19JTlBVVF9fTkFNRSA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nSW5wdXRfTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX0lOUFVUX19FSU5QVVQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ0lucHV0X0VJbnB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ091dHB1dEltcGwgPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3V0cHV0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ091dHB1dCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBCSU5ESU5HX09VVFBVVCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBCSU5ESU5HX09VVFBVVF9fTkFNRSA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3V0cHV0X05hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfT1VUUFVUX19FT1VUUFVUID0gZUlOU1RBTkNFLmdldEJpbmRpbmdPdXRwdXRfRU91dHB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ZhdWx0SW1wbCA8ZW0+QmluZGluZyBGYXVsdDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ZhdWx0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ0ZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEJJTkRJTkdfRkFVTFQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ0ZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBCSU5ESU5HX0ZBVUxUX19OQU1FID0gZUlOU1RBTkNFLmdldEJpbmRpbmdGYXVsdF9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUZhdWx0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfRkFVTFRfX0VGQVVMVCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nRmF1bHRfRUZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5OYW1lc3BhY2VJbXBsIDxlbT5OYW1lc3BhY2U8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk5hbWVzcGFjZUltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE5hbWVzcGFjZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBOQU1FU1BBQ0UgPSBlSU5TVEFOQ0UuZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE5BTUVTUEFDRV9fVVJJID0gZUlOU1RBTkNFLmdldE5hbWVzcGFjZV9VUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QcmVmaXg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgTkFNRVNQQUNFX19QUkVGSVggPSBlSU5TVEFOQ0UuZ2V0TmFtZXNwYWNlX1ByZWZpeCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuUG9ydFR5cGUgPGVtPklQb3J0IFR5cGU8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLlBvcnRUeXBlCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJUG9ydFR5cGUoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVBPUlRfVFlQRSA9IGVJTlNUQU5DRS5nZXRJUG9ydFR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLk9wZXJhdGlvbiA8ZW0+SU9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuT3BlcmF0aW9uCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJT3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElPUEVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0SU9wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuSW5wdXQgPGVtPklJbnB1dDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuSW5wdXQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElJbnB1dCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJSU5QVVQgPSBlSU5TVEFOQ0UuZ2V0SUlucHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5PdXRwdXQgPGVtPklPdXRwdXQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLk91dHB1dAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU91dHB1dCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJT1VUUFVUID0gZUlOU1RBTkNFLmdldElPdXRwdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkZhdWx0IDxlbT5JRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLkZhdWx0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJRmF1bHQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUZBVUxUID0gZUlOU1RBTkNFLmdldElGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuTWVzc2FnZSA8ZW0+SU1lc3NhZ2U8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLk1lc3NhZ2UKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElNZXNzYWdlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElNRVNTQUdFID0gZUlOU1RBTkNFLmdldElNZXNzYWdlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5QYXJ0IDxlbT5JUGFydDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuUGFydAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVBhcnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVBBUlQgPSBlSU5TVEFOQ0UuZ2V0SVBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlNlcnZpY2UgPGVtPklTZXJ2aWNlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5TZXJ2aWNlCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJU2VydmljZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJU0VSVklDRSA9IGVJTlNUQU5DRS5nZXRJU2VydmljZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuUG9ydCA8ZW0+SVBvcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLlBvcnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElQb3J0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElQT1JUID0gZUlOU1RBTkNFLmdldElQb3J0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nIDxlbT5JQmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZwotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmcoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUJJTkRJTkcgPSBlSU5TVEFOQ0UuZ2V0SUJpbmRpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gPGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmdPcGVyYXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUJJTkRJTkdfT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldElCaW5kaW5nT3BlcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgPGVtPklCaW5kaW5nIElucHV0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nSW5wdXQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUJJTkRJTkdfSU5QVVQgPSBlSU5TVEFOQ0UuZ2V0SUJpbmRpbmdJbnB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ091dHB1dCA8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZ091dHB1dCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJQklORElOR19PVVRQVVQgPSBlSU5TVEFOQ0UuZ2V0SUJpbmRpbmdPdXRwdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCA8ZW0+SUJpbmRpbmcgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdGYXVsdAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmdGYXVsdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJQklORElOR19GQVVMVCA9IGVJTlNUQU5DRS5nZXRJQmluZGluZ0ZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUVYVEVOU0lCSUxJVFlfRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkRlZmluaXRpb24gPGVtPklEZWZpbml0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5EZWZpbml0aW9uCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJRGVmaW5pdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJREVGSU5JVElPTiA9IGVJTlNUQU5DRS5nZXRJRGVmaW5pdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuSW1wb3J0IDxlbT5JSW1wb3J0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5JbXBvcnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElJbXBvcnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUlNUE9SVCA9IGVJTlNUQU5DRS5nZXRJSW1wb3J0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YS51dGlsLkxpc3QgPGVtPklMaXN0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YS51dGlsLkxpc3QKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElMaXN0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElMSVNUID0gZUlOU1RBTkNFLmdldElMaXN0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YS51dGlsLk1hcCA8ZW0+SU1hcDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmEudXRpbC5NYXAKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElNYXAoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU1BUCA9IGVJTlNUQU5DRS5nZXRJTWFwKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YS5uZXQuVVJMIDxlbT5JVVJMPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YS5uZXQuVVJMCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJVVJMKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElVUkwgPSBlSU5TVEFOQ0UuZ2V0SVVSTCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeSA8ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElFWFRFTlNJT05fUkVHSVNUUlkgPSBlSU5TVEFOQ0UuZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5UeXBlc0ltcGwgPGVtPlR5cGVzPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5UeXBlc0ltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFR5cGVzKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFRZUEVTID0gZUlOU1RBTkNFLmdldFR5cGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YS51dGlsLkl0ZXJhdG9yIDxlbT5JSXRlcmF0b3I8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZhLnV0aWwuSXRlcmF0b3IKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElJdGVyYXRvcigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJSVRFUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0SUl0ZXJhdG9yKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5UeXBlcyA8ZW0+SVR5cGVzPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5UeXBlcwotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVR5cGVzKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElUWVBFUyA9IGVJTlNUQU5DRS5nZXRJVHlwZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q2hpbGRyZW48L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4gPSBlSU5TVEFOQ0UuZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50X0NoaWxkcmVuKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UID0gZUlOU1RBTkNFLmdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEgPSBlSU5TVEFOQ0UuZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbCA8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VSZWZlcmVuY2VJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE1FU1NBR0VfUkVGRVJFTkNFID0gZUlOU1RBTkNFLmdldE1lc3NhZ2VSZWZlcmVuY2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE1FU1NBR0VfUkVGRVJFTkNFX19OQU1FID0gZUlOU1RBTkNFLmdldE1lc3NhZ2VSZWZlcmVuY2VfTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+UU5hbWU8L2VtPicgZGF0YSB0eXBlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRRTmFtZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBRTkFNRSA9IGVJTlNUQU5DRS5nZXRRTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPk9wZXJhdGlvbiBUeXBlPC9lbT4nIGRhdGEgdHlwZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRPcGVyYXRpb25UeXBlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRURhdGFUeXBlIE9QRVJBVElPTl9UWVBFID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvblR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5ET00gRWxlbWVudDwvZW0+JyBkYXRhIHR5cGUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy53M2MuZG9tLkVsZW1lbnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldERPTUVsZW1lbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFRGF0YVR5cGUgRE9NX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0RE9NRWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPkV4Y2VwdGlvbjwvZW0+JyBkYXRhIHR5cGUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0V1NETEV4Y2VwdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBXU0RMX0VYQ0VQVElPTiA9IGVJTlNUQU5DRS5nZXRXU0RMRXhjZXB0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RE9NIERvY3VtZW50PC9lbT4nIGRhdGEgdHlwZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLnczYy5kb20uRG9jdW1lbnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldERPTURvY3VtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRURhdGFUeXBlIERPTV9ET0NVTUVOVCA9IGVJTlNUQU5DRS5nZXRET01Eb2N1bWVudCgpOwotCi0gIH0KLQotfSAvL1dTRExQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWY3NjUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5leHRlbnNpYmlsaXR5LkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5leHRlbnNpYmlsaXR5LkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotCi0KLS8qKgotICogVGhlIDxiPlBsdWdpbjwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIFRoZSBXU0RMIG1vZGVsIG5lZWRzIHRvIGJlIGFibGUgdG8gcnVuIHdpdGhpbiBhbiBFY2xpcHNlIHdvcmtiZW5jaCwKLSAqIHdpdGhpbiBhIGhlYWRsZXNzIEVjbGlwc2Ugd29ya3NwYWNlLCBvciBqdXN0IHN0YW5kLWFsb25lIGFzIHBhcnQgCi0gKiBvZiBzb21lIG90aGVyIGFwcGxpY2F0aW9uLgotICogVG8gc3VwcG9ydCB0aGlzLCBhbGwgYWNjZXNzIGlzIGRpcmVjdGVkIHRvIHRoZSBzdGF0aWMgbWV0aG9kcywKLSAqIHdoaWNoIGNhbiByZWRpcmVjdCB0aGUgc2VydmljZSBhcyBhcHBvcHJpYXRlIHRvIHRoZSBydW50aW1lLgotICogRHVyaW5nIHN0YW5kLWFsb25lIGludm9jYXRpb24gbm8gcGx1Z2luIGluaXRpYWxpemF0aW9uIHRha2VzIHBsYWNlLgotICogSW4gdGhpcyBjYXNlIHlvdSB3aWxsIG5lZWQgdGhlIHJlc291cmNlcyBqYXIgb24gdGhlIGNsYXNzIHBhdGguCi0gKiBAc2VlICNnZXRCYXNlVVJMCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gKiBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSAqIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuCi0gKiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogPC9wPgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbgotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGx1Z2luLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXU0RMUGx1Z2luIElOU1RBTkNFID0gbmV3IFdTRExQbHVnaW4oKTsKLQotICAvKioKLSAgICogVGhlIG9uZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAgKi8KLSAgc3RhdGljIFdTRExQbHVnaW5JbXBsZW1lbnRhdGlvbiBwbHVnaW47Ci0KLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KLSAgICovCi0gIHByaXZhdGUgV1NETFBsdWdpbigpCi0gIHsKLSAgICBzdXBlcihuZXcgUmVzb3VyY2VMb2NhdG9yIFtde30pOwotICB9Ci0KLSAgLyoKLSAgICogSmF2YWRvYyBjb3BpZWQgZnJvbSBiYXNlIGNsYXNzLgotICAgKi8KLSAgcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKQotICB7Ci0gICAgcmV0dXJuIHBsdWdpbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgotICAgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExQbHVnaW5JbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKQotICB7Ci0gICAgcmV0dXJuIHBsdWdpbjsKLSAgfQotCi0gIHByaXZhdGUgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsIGludGVybmFsR2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkoKQotICB7Ci0gICAgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5ID09IG51bGwpCi0gICAgewotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkgPSBuZXcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsKCk7Ci0gICAgICBpZiAocGx1Z2luICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5ldyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeVJlYWRlcihleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSkucmVhZFJlZ2lzdHJ5KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICByZXR1cm4gaW50ZXJuYWxHZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShuYW1lc3BhY2UpOwotICB9Ci0KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5IGdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBpbnRlcm5hbEdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0gIH0KLQotICBwdWJsaWMgV1NETEZhY3RvcnkgY3JlYXRlV1NETDRKRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiNmViNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW5JbXBsZW1lbnRhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbi5FY2xpcHNlUGx1Z2luOwotCi0KLS8qKgotICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotICogY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotICogKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFdTRExQbHVnaW5JbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4KLXsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgV1NETFBsdWdpbkltcGxlbWVudGF0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0KLSAgICAvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgotICAgIC8vCi0gICAgV1NETFBsdWdpbi5wbHVnaW4gPSB0aGlzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZmMxMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50I2dldFNjaGVtYSA8ZW0+U2NoZW1hPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TY2hlbWE8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNjaGVtYTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2NoZW1hPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0U2NoZW1hKFhTRFNjaGVtYSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKQotICAgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFhTRFNjaGVtYSBnZXRTY2hlbWEoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0U2NoZW1hIDxlbT5TY2hlbWE8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNjaGVtYTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFNjaGVtYSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0U2NoZW1hKFhTRFNjaGVtYSB2YWx1ZSk7Ci0KLX0gLy8gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTcyOTg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmV4dGVuc2liaWxpdHk7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLQotcHVibGljIGNsYXNzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIENMQVNTX0xPQURJTkdfRVJST1IgPSAiQ0xBU1NfTE9BRElOR19FUlJPUiI7Ci0KLSAgcHJvdGVjdGVkIEJ1bmRsZSBidW5kbGU7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBjbGFzc05hbWU7Ci0KLSAgcHJvdGVjdGVkIE9iamVjdCBmYWN0b3J5OwotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBuYW1lc3BhY2UsIEJ1bmRsZSBidW5kbGUpCi0gIHsKLSAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgfQotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZ2V0RXh0ZW5zaWJsaXR5RWxlbWVudEZhY3RvcnkoKQotICB7Ci0gICAgaWYgKGZhY3RvcnkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgQ2xhc3MgdGhlQ2xhc3MgPSBidW5kbGUubG9hZENsYXNzKGNsYXNzTmFtZSk7Ci0gICAgICAgIGZhY3RvcnkgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KXRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGZhY3RvcnkgPSBDTEFTU19MT0FESU5HX0VSUk9SOwotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFjdG9yeSAhPSBDTEFTU19MT0FESU5HX0VSUk9SID8gKEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSlmYWN0b3J5IDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVuc2libGl0eUVsZW1lbnRGYWN0b3J5KEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5KQotICB7Ci0gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjYzZmIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZXh0ZW5zaWJpbGl0eTsKLQotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwgaW1wbGVtZW50cyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeQotewotICBwcm90ZWN0ZWQgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0gIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcgbmFtZXNwYWNlLCBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCi0gIHsKLSAgICBtYXAucHV0KG5hbWVzcGFjZSwgZGVzY3JpcHRvcik7Ci0gIH0KLQotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IHJlc3VsdCA9IG51bGw7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvciBkZXNjcmlwdG9yID0gKEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IpbWFwLmdldChuYW1lc3BhY2UpOwotICAgIGlmIChkZXNjcmlwdG9yICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVzY3JpcHRvci5nZXRFeHRlbnNpYmxpdHlFbGVtZW50RmFjdG9yeSgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJGYWN0b3J5KFN0cmluZyBuYW1lc3BhY2UsIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5KQotICB7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbmV3IEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IobnVsbCwgbmFtZXNwYWNlLCBudWxsKTsKLSAgICBkZXNjcmlwdG9yLnNldEV4dGVuc2libGl0eUVsZW1lbnRGYWN0b3J5KGZhY3RvcnkpOwotICAgIG1hcC5wdXQobmFtZXNwYWNlLCBkZXNjcmlwdG9yKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5UmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ4YjRkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZXh0ZW5zaWJpbGl0eTsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLQotcHVibGljIGNsYXNzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9IFdTRExQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0U3ltYm9saWNOYW1lKCk7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5UX0lEID0gImV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX05BTUUgPSAiZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTID0gImNsYXNzIjsKLQotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsIGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeVJlYWRlcihFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk7Ci0gIH0KLQotICAvKioKLSAgICogcmVhZCBmcm9tIHBsdWdpbiByZWdpc3RyeSBhbmQgcGFyc2UgaXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHBsdWdpblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSBwbHVnaW5SZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChQTFVHSU5fSUQsIEVYVEVOU0lPTl9QT0lOVF9JRCk7Ci0gICAgaWYgKHBvaW50ICE9IG51bGwpCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBwb2ludC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHJlYWRFbGVtZW50KGVsZW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHJlc29sdmUoVVJMIHBsYXRmb3JtVVJMLCBTdHJpbmcgcmVsYXRpdmVQYXRoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKHBsYXRmb3JtVVJMKTsKLSAgICByZXR1cm4gcmVzb2x2ZWRVUkwudG9TdHJpbmcoKSArIHJlbGF0aXZlUGF0aDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhFTEVNRU5UX05BTUUpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGRFbGVtZW50ID0gKElDb25maWd1cmF0aW9uRWxlbWVudCllbGVtZW50OwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1MpOwotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IG5ldyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yKGNsYXNzTmFtZSwgbmFtZXNwYWNlLCBwbHVnaW5CdW5kbGUpOwotICAgICAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5LnB1dChuYW1lc3BhY2UsIGRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9CYXNlR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9CYXNlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYzZmZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQmFzZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3I7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VHZW5lcmF0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQotICBwcml2YXRlIFN0cmluZyByZWZOYW1lOwotCi0gIHByaXZhdGUgYm9vbGVhbiBvdmVyd3JpdGU7Ci0KLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQotICBwcm90ZWN0ZWQgQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yOwotCi0gIHB1YmxpYyB2b2lkIHNldENvbnRlbnRHZW5lcmF0b3IoQ29udGVudEdlbmVyYXRvciBnZW5lcmF0b3IpCi0gIHsKLSAgICBjb250ZW50R2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotICB9Ci0KLSAgcHVibGljIENvbnRlbnRHZW5lcmF0b3IgZ2V0Q29udGVudEdlbmVyYXRvcigpCi0gIHsKLSAgICByZXR1cm4gY29udGVudEdlbmVyYXRvcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE92ZXJ3cml0ZShib29sZWFuIG92ZXJ3cml0ZSkKLSAgewotICAgIHRoaXMub3ZlcndyaXRlID0gb3ZlcndyaXRlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0T3ZlcndyaXRlKCkKLSAgewotICAgIHJldHVybiBvdmVyd3JpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlZk5hbWUoU3RyaW5nIHJlZk5hbWUpCi0gIHsKLSAgICB0aGlzLnJlZk5hbWUgPSByZWZOYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWZOYW1lKCkKLSAgewotICAgIHJldHVybiByZWZOYW1lOwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKQotICB7Ci0gICAgaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udGVudEdlbmVyYXRvci5nZXRQcm90b2NvbCgpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9CaW5kaW5nR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9CaW5kaW5nR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNWY4MDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQmluZGluZ0dlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci0KLQotLyoKLSAqIENsYXNzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEJpbmRpbmcgYW5kIGl0J3MgY29udGVudC4gIFdlIGxvb2sgaW4gdGhlIHJlZ2lzdHJ5IGZvcgotICogYXBwcm9wcmlhdGUgQ29udGVudEdlbmVyYXRvciBjbGFzc2VzIGJhc2VkIG9uIHRoZSBleGlzdGluZyBCaW5kaW5nIENvbnRlbnQncyBuYW1lc3BhY2UuCi0gKiBBbHRlcm5hdGl2ZWx5LCB1c2VycyBjYW4gcGFzcyBpbiBhIG5hbWVzcGFjZSB0aHJvdWdoIHRoZSBjb25zdHJ1Y3RvciB0byBzcGVjaWZ5IHdoaWNoCi0gKiBuYW1lc3BhY2UgdG8gdXNlIHdoZW4gc2VhcmNoaW5nIHRoZSByZWdpc3RyeS4KLSAqIAotICogVGhlIENvbnRlbnRHZW5lcmF0b3IgbWF5IGFsc28gYmUgc2V0IG1hbnVhbGx5IGJ5IGNhbGxpbmcKLSAqIHNldENvbnRlbnRHZW5lcmF0b3IoQ29udGVudEdlbmVyYXRvcikuCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nR2VuZXJhdG9yIGV4dGVuZHMgQmFzZUdlbmVyYXRvcgotewotICBwcml2YXRlIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0KLSAgLyoKLSAgICogV2hlbiB0aGUgY29uc3RydWN0b3IgaXMgdXNlZCwgYXV0b21hdGljYWxseSBhdHRlbXB0IHRvIHJldHJpZXZlIGEgcHJvcGVyCi0gICAqIENvbnRlbnRHZW5lcmF0b3IgYmFzZWQgb24gdGhlIEJpbmRpbmcgZ2l2ZW4uICBUaGUgQ29udGVudEdlbmVyYXRvciBtYXkKLSAgICogYmUgcmVwbGFjZWQgYnkgY2FsbGluZyBzZXRDb250ZW50R2VuZXJhdG9yKENvbnRlbnRHZW5lcmF0b3IpLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdHZW5lcmF0b3IoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0gICAgY29udGVudEdlbmVyYXRvciA9IGdldENvbnRlbnRHZW5lcmF0b3IoYmluZGluZyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICB0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotICB9Ci0KLSAgLyoKLSAgICogV2hlbiB0aGUgY29uc3RydWN0b3IgaXMgdXNlZCwgYXV0b21hdGljYWxseSBhdHRlbXB0IHRvIHJldHJpZXZlIGEgcHJvcGVyCi0gICAqIENvbnRlbnRHZW5lcmF0b3IgYmFzZWQgb24gdGhlIG5hbWVzcGFjZSBnaXZlbi4gIFRoZSBDb250ZW50R2VuZXJhdG9yIG1heQotICAgKiBiZSByZXBsYWNlZCBieSBjYWxsaW5nIHNldENvbnRlbnRHZW5lcmF0b3IoQ29udGVudEdlbmVyYXRvcikuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0dlbmVyYXRvcihEZWZpbml0aW9uIGRlZmluaXRpb24sIEJpbmRpbmcgYmluZGluZywgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLSAgICBjb250ZW50R2VuZXJhdG9yID0gZ2V0Q29udGVudEdlbmVyYXRvcihuYW1lc3BhY2UpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBDb250ZW50R2VuZXJhdG9yIGdldENvbnRlbnRHZW5lcmF0b3IoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIEZpbmQgdGhlIHJlZ2Vpc3RlcmVkIENvbnRlbnQgR2VuZXJhdG9yIGZvciB0aGUgQmluZGluZwotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLy8gR2V0IEJpbmRpbmdDb250ZW50IG5hbWVzcGFjZQotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICAgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKGVlTGlzdC5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVlTGlzdC5nZXQoMCk7Ci0gICAgICAvLyBUT0RPOiBRTmFtZSBxTmFtZSA9IGVlLmdldEVsZW1lbnRUeXBlKCk7IGdvIGdldCB0aGUgbmFtZXNwYWNlIGluc3RlYWQ/Ci0gICAgICBuYW1lc3BhY2UgPSBlZS5nZXRFbGVtZW50KCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICByZXR1cm4gZ2V0Q29udGVudEdlbmVyYXRvcihuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBDb250ZW50R2VuZXJhdG9yIGdldENvbnRlbnRHZW5lcmF0b3IoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbiA9IG51bGw7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgZmFjdG9yeVJlZ2lzdHJ5ID0gQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgICAgY29udGVudEdlbiA9IGZhY3RvcnlSZWdpc3RyeS5nZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udGVudEdlbjsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZyBjcmVhdGVFbXB0eUJpbmRpbmcoU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIEJpbmRpbmcgbmV3QmluZGluZyA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgbmV3QmluZGluZy5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbG9jYWxOYW1lKSk7Ci0gICAgbmV3QmluZGluZy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkQmluZGluZyhuZXdCaW5kaW5nKTsKLQotICAgIHJldHVybiBuZXdCaW5kaW5nOwotICB9Ci0KLSAgLyoKLSAgICogVE9ETzogU2NlbmFyaW86Ci0gICAqIDEpb3ZlcndyaXRlID09IGZhbHNlCi0gICAqIDIpQmluZGluZ09wZXJhdGlvbiB3aXRoIDEgaW5wdXQKLSAgICogMylDb3JyZXNwb25kaW5nIE9wZXJhdGlvbiAod2l0aCBzYW1lIG5hbWUpIHdpdGggMSBpbnB1dCBhbmQgMSBvdXRwdXQKLSAgICogSWYgd2UgZ2VuZXJhdGUgd2l0aCBvdmVyd3JpdGUgPT0gZmFsc2UsIG5vdGhpbmcgaXMgZG9uZS4gIFRodXMsICBhbgotICAgKiBvdXRwdXQgaXMgbm90IGdlbmVyYXRlZCBvbiB0aGUgQmluZGluZ09wZXJhdGlvbi4gIFRoaXMgaXMgYmVjYXVzZSB3ZQotICAgKiBzZWFyY2ggZm9yIGV4aXN0aW5nIEVsZW1lbnRzIG9ubHkgYXQgdGhlIGxldmVsIG9mIEJpbmRpbmdPcGVyYXRpb25zLgotICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIEJpbmRpbmdPcGVyYXRpb24gd2l0aCB0aGUgc2FtZQotICAgKiBuYW1lIGFzIG91ciBPcGVyYXRpb24sIGxlYXZlIGl0IGFsb25lLi4uLiBidXQgc2luY2UgdGhlcmUgaXMgYWxyZWFkeQotICAgKiBhIEJpbmRpbmdPcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lLCB3ZSBkb24ndCBjcmVhdGUgYSBuZXcgQmluZGluZ09wZXJhdGlvbi4KLSAgICogCi0gICAqIFRoZSBjb3JyZWN0IGltcGxlbWVudGF0aW9uIGlzIHJlZHVjZSB0aGlzIGdyYW51bGFyaXR5IHRvIHRoZSBNZXNzYWdlUmVmZXJlbmNlCi0gICAqIGxldmVsLiAgVGhlIGNvZGUgaXMgYWxtb3N0IHRoZXJlIGV4Y2VwdCBmb3IgaG93IHdlIGdlbmVyYXRlIHRoZSBCaW5kaW5nIGVsZW1lbnQKLSAgICogY29udGVudC4gIExvb2sgYXQgQmluZGluZ0dlbnJhdG9yLmdlbmVyYXRlQmluZGluZ09wZXJhdGlvbigpIGFuZAotICAgKiBTT0FQQ29udGVudEdlbmVyYXRvci5qYXZhIGFuZCBpdCdzIGNvbnRlbnQgZ2VuZXJhdGlvbiBtZXRob2QKLSAgICogZm9yIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KLSAgICogCi0gICAqIEZvciB3dHAgUkMxLCBXZSBzaGFsbCBvbmx5IGxvb2sgYXQgdGhlIE9wZXJhdGlvbiBsZXZlbCAoYXMgd2UgZG8gaW4gdGhlIHByZXZpb3VzCi0gICAqIHZlcnNpb24pLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmcgZ2VuZXJhdGVCaW5kaW5nKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIEJpbmRpbmcgaXMgbnVsbCAoTm8gQmluZGluZyB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yKSwgd2UgY3JlYXRlIGFuIGVtcHR5IEJpbmRpbmcgZmlyc3QuCi0gICAgICBpZiAoYmluZGluZyA9PSBudWxsKQotICAgICAgewotICAgICAgICBiaW5kaW5nID0gY3JlYXRlRW1wdHlCaW5kaW5nKGdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZ2V0TmFtZSgpICE9IG51bGwgJiYgIWJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZy5zZXRRTmFtZShuZXcgUU5hbWUoYmluZGluZy5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBnZXROYW1lKCkpKTsKLSAgICAgIH0KLSAgICAgIGlmIChnZXRSZWZOYW1lKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBnZXRQb3J0VHlwZSgpOwotICAgICAgICBiaW5kaW5nLnNldEVQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgICAgIGlmIChwb3J0VHlwZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy9UaGUgbW9kZWwgZG9lc24ndCByZWNvbmlsZSB3aXRoIGl0J3MgRWxlbWVudCBwcm9wZXJseSB3aGVuIHdlJ3JlIHNldHRpbmcgYSBudWxsIGZvciBpdCdzIFBvcnRUeXBlCi0gICAgICAgICAgYmluZGluZy5nZXRFbGVtZW50KCkuc2V0QXR0cmlidXRlKCJ0eXBlIiwgIiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIExpc3QgYmluZGluZ09wZXJhdGlvbnMgPSBiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotCi0gICAgICBpZiAoIWdldE92ZXJ3cml0ZSgpKQotICAgICAgewotICAgICAgICAvLyBEb24ndCBPdmVyd3JpdGUKLSAgICAgICAgaWYgKHBvcnRUeXBlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gYmluZGluZzsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0KLSAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAqIERldGVybWluZSB3aGljaCBPcGVyYXRpb25zIHJlcXVpcmUgbmV3IGEgbmV3IGNvcnJlc3BvbmRpbmcgQmluZGluZ09wZXJhdGlvbnMKLSAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICBMaXN0IG5ld0JpbmRpbmdPcHNOZWVkZWQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpbmRleCsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnMuZ2V0KGluZGV4KTsKLQotICAgICAgICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBJdGVyYXRvciBiaW5kaW5nT3BlcmF0aW9uc0l0ID0gYmluZGluZ09wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChiaW5kaW5nT3BlcmF0aW9uc0l0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnNJdC5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgaWYgKG5hbWVzRXF1YWwoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCksIG9wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFmb3VuZE1hdGNoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuZXdCaW5kaW5nT3BzTmVlZGVkLmFkZChvcGVyYXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBuZXdCaW5kaW5nT3BzTmVlZGVkIGlzIHRoZSBMaXN0IG9mIE9wZXJhdGlvbnMgbmVlZGluZyBuZXcgY29ycmVzcG9uZGluZwotICAgICAgICAgIC8vIEJpbmRpbmdPcGVyYXRpb24ncwotICAgICAgICAgIExpc3QgbmV3QmluZGluZ09wcyA9IGNyZWF0ZU5ld0JpbmRpbmdPcGVyYXRpb25zKG5ld0JpbmRpbmdPcHNOZWVkZWQpOwotCi0gICAgICAgICAgLy8gZG9uJ3QgYWRkIHJlcXVpcmVkIG5hbWVzcGFjZSBpZiBub3RoaW5nIGlzIHJlYWxseSBiZWluZyBhZGRlZAotICAgICAgICAgIGlmICghbmV3QmluZGluZ09wcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFkZFJlcXVpcmVkTmFtZXNwYWNlcyhiaW5kaW5nKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgQmluZGluZ09wZXJhdGlvbidzCi0gICAgICAgICAgSXRlcmF0b3IgbmV3QmluZGluZ09wc0l0ID0gbmV3QmluZGluZ09wcy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChuZXdCaW5kaW5nT3BzSXQuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gbmV3QmluZGluZ09wID0gKEJpbmRpbmdPcGVyYXRpb24pbmV3QmluZGluZ09wc0l0Lm5leHQoKTsKLSAgICAgICAgICAgIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbihuZXdCaW5kaW5nT3ApOwotICAgICAgICAgICAgZ2VuZXJhdGVCaW5kaW5nT3BlcmF0aW9uQ29udGVudChuZXdCaW5kaW5nT3ApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE92ZXJ3cml0ZQotICAgICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYmxvdyBhd2F5IGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIEJpbmRpbmcuICBObyBQb3J0VHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBCaW5kaW5nCi0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbnMuY2xlYXIoKTsKLSAgICAgICAgICByZXR1cm4gYmluZGluZzsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRSZXF1aXJlZE5hbWVzcGFjZXMoYmluZGluZyk7Ci0gICAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotCi0gICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAqIENvbXBhcmUgdGhlIE9wZXJhdGlvbnMKLSAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgIC8vIFJlbW92ZSBhbnkgQmluZGluZ09wZXJhdGlvbnMgd2hpY2ggYXJlIG5vIGxvbmdlciB1c2VkCi0gICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGJpbmRpbmdPcGVyYXRpb25zLnNpemUoKTsgaW5kZXgrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nT3BlcmF0aW9ucy5nZXQoaW5kZXgpOwotCi0gICAgICAgICAgICBib29sZWFuIGZvdW5kTWF0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgIEl0ZXJhdG9yIG9wZXJhdGlvbnNJdCA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChvcGVyYXRpb25zSXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilvcGVyYXRpb25zSXQubmV4dCgpOwotCi0gICAgICAgICAgICAgIGlmIChuYW1lc0VxdWFsKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpLCBvcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZm91bmRNYXRjaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhpcyBCaW5kaW5nRmF1bHQgZnJvbSB0aGUgYmluZGluZ0ZhdWx0cyBMaXN0Ci0gICAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb25zLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgICAgIGluZGV4LS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gUmVtb3ZlIGFueSBPcGVyYXRpb25zIHdoaWNoIGFscmVhZHkgZXhpc3RzIGluIGJpbmRpbmdPcGVyYXRpb25zLiAgV2hhdCB3ZQotICAgICAgICAgIC8vIGhhdmUgbGVmdCBhcmUgdGhlIE9wZXJhdGlvbnMgd2hpY2ggbmVlZHMgbmV3bHkgY3JlYXRlZCBCaW5kaW5nT3BlcmF0aW9ucwotICAgICAgICAgIExpc3QgYmluZGluZ09wZXJhdGlvbnNOZWVkZWQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpbmRleCsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnMuZ2V0KGluZGV4KTsKLQotICAgICAgICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBJdGVyYXRvciBiaW5kaW5nT3BlcmF0aW9uc0l0ID0gYmluZGluZ09wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChiaW5kaW5nT3BlcmF0aW9uc0l0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnNJdC5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgaWYgKG5hbWVzRXF1YWwoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCksIG9wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFmb3VuZE1hdGNoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSB0aGlzIEJpbmRpbmdGYXVsdCBmcm9tIHRoZSBiaW5kaW5nRmF1bHRzIExpc3QKLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNOZWVkZWQuYWRkKG9wZXJhdGlvbik7IC8vIFN0b3JlIHRoZSBhY3R1YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gQ3JlYXRlIHJlcXVpcmVkIEJpbmRpbmdPcGVyYXRpb25zCi0gICAgICAgICAgY3JlYXRlTmV3QmluZGluZ09wZXJhdGlvbnMoYmluZGluZ09wZXJhdGlvbnNOZWVkZWQpOwotCi0gICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAqIFByb2Nlc3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBPcGVyYXRpb25zCi0gICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICBJdGVyYXRvciBiaW5kaW5nT3BlcmF0aW9uc0l0ID0gYmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChiaW5kaW5nT3BlcmF0aW9uc0l0Lmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnNJdC5uZXh0KCkpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZyk7Ci0KLSAgICAgICAgICByZXR1cm4gYmluZGluZzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgY3JlYXRlTmV3QmluZGluZ09wZXJhdGlvbnMoTGlzdCBvcGVyYXRpb25zKQotICB7Ci0gICAgTGlzdCBuZXdCaW5kaW5nT3BzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgSXRlcmF0b3IgbmVlZGVkQmluZGluZ09wZXJhdGlvbnNJdCA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAobmVlZGVkQmluZGluZ09wZXJhdGlvbnNJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pbmVlZGVkQmluZGluZ09wZXJhdGlvbnNJdC5uZXh0KCk7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIG5ld0JpbmRpbmdPcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICAgIG5ld0JpbmRpbmdPcGVyYXRpb24uc2V0RU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgICAgbmV3QmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKG5ld0JpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgICBuZXdCaW5kaW5nT3BzLmFkZChuZXdCaW5kaW5nT3BlcmF0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3QmluZGluZ09wczsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgICBMaXN0IGJpbmRpbmdGYXVsdHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCk7Ci0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0gICAgTGlzdCBmYXVsdHMgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpOwotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIENvbXBhcmUgdGhlIE9wZXJhdGlvbiBuYW1lcwotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgaWYgKCFuYW1lc0VxdWFsKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpLCBvcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldE5hbWUob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgfQotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIENvbXBhcmUgdGhlIE91dHB1dAotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgaWYgKG91dHB1dCA9PSBudWxsKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSBCaW5kaW5nT3V0cHV0IGlmIG5lY2Vzc2FyeQotICAgICAgaWYgKGJpbmRpbmdPdXRwdXQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ091dHB1dCBuZXdCaW5kaW5nT3V0cHV0ID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgIG5ld0JpbmRpbmdPdXRwdXQuc2V0RU91dHB1dChvdXRwdXQpOwotICAgICAgICBuZXdCaW5kaW5nT3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dChuZXdCaW5kaW5nT3V0cHV0KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQ29tcGFyZSB0aGUgT3V0cHV0IG5hbWVzCi0gICAgICAgIGlmICghbmFtZXNFcXVhbChiaW5kaW5nT3V0cHV0LmdldE5hbWUoKSwgb3V0cHV0LmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZ2VuZXJhdGVCaW5kaW5nT3V0cHV0Q29udGVudChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkpOwotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIENvbXBhcmUgdGhlIElucHV0Ci0gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICBpZiAoaW5wdXQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSBCaW5kaW5nSW5wdXQgaWYgbmVjZXNzYXJ5Ci0gICAgICBpZiAoYmluZGluZ0lucHV0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdJbnB1dCBuZXdCaW5kaW5nSW5wdXQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgICAgICBuZXdCaW5kaW5nSW5wdXQuc2V0RUlucHV0KGlucHV0KTsKLSAgICAgICAgbmV3QmluZGluZ0lucHV0LnNldE5hbWUoaW5wdXQuZ2V0TmFtZSgpKTsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQobmV3QmluZGluZ0lucHV0KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQ29tcGFyZSB0aGUgSW5wdXQgbmFtZXMKLSAgICAgICAgaWYgKCFuYW1lc0VxdWFsKGJpbmRpbmdJbnB1dC5nZXROYW1lKCksIGlucHV0LmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBiaW5kaW5nSW5wdXQuc2V0TmFtZShpbnB1dC5nZXROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdlbmVyYXRlQmluZGluZ0lucHV0Q29udGVudChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSk7Ci0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICogQ29tcGFyZSB0aGUgRmF1bHRzCi0gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvLyBSZW1vdmUgYW55IEJpbmRpbmdGYXVsdHMgd2hpY2ggYXJlIG5vIGxvbmdlciB1c2VkCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGJpbmRpbmdGYXVsdHMuc2l6ZSgpOyBpbmRleCsrKQotICAgIHsKLSAgICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdGYXVsdHMuZ2V0KGluZGV4KTsKLQotICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICBJdGVyYXRvciBmYXVsdHNJdCA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGZhdWx0c0l0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpZmF1bHRzSXQubmV4dCgpOwotICAgICAgICBpZiAobmFtZXNFcXVhbChiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpLCBmYXVsdC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFmb3VuZE1hdGNoKQotICAgICAgewotICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSB0aGlzIEJpbmRpbmdGYXVsdCBmcm9tIHRoZSBiaW5kaW5nRmF1bHRzIExpc3QKLSAgICAgICAgYmluZGluZ0ZhdWx0cy5yZW1vdmUoaW5kZXgpOwotICAgICAgICBpbmRleC0tOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlbW92ZSBhbnkgRmF1bHRzIHdoaWNoIGFscmVhZHkgZXhpc3RzIGluIGJpbmRpbmdGYXVsdHMuICBXaGF0IHdlCi0gICAgLy8gaGF2ZSBsZWZ0IGFyZSB0aGUgRmF1bHRzIHdoaWNoIG5lZWRzIG5ld2x5IGNyZWF0ZWQgQmluZGluZ0ZhdWx0cwotICAgIExpc3QgYmluZGluZ0ZhdWx0c05lZWRlZCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZmF1bHRzLnNpemUoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdClmYXVsdHMuZ2V0KGluZGV4KTsKLQotICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICBJdGVyYXRvciBiaW5kaW5nRmF1bHRzSXQgPSBiaW5kaW5nRmF1bHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoYmluZGluZ0ZhdWx0c0l0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ0ZhdWx0c0l0Lm5leHQoKTsKLSAgICAgICAgaWYgKG5hbWVzRXF1YWwoYmluZGluZ0ZhdWx0LmdldE5hbWUoKSwgZmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZm91bmRNYXRjaCkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhpcyBCaW5kaW5nRmF1bHQgZnJvbSB0aGUgYmluZGluZ0ZhdWx0cyBMaXN0Ci0gICAgICAgIGJpbmRpbmdGYXVsdHNOZWVkZWQuYWRkKGZhdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBiaW5kaW5nRmF1bHRzTmVlZGVkIGNvbnRhaW5zIHRoZSBuZWVkZWQgQmluZGluZ0ZhdWx0J3Mgd2UgbmVlZCB0byBjcmVhdGUKLSAgICBJdGVyYXRvciBuZWVkZWRCaW5kaW5nRmF1bHRzSXQgPSBiaW5kaW5nRmF1bHRzTmVlZGVkLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKG5lZWRlZEJpbmRpbmdGYXVsdHNJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpbmVlZGVkQmluZGluZ0ZhdWx0c0l0Lm5leHQoKTsKLSAgICAgIEJpbmRpbmdGYXVsdCBuZXdCaW5kaW5nRmF1bHQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgICAgbmV3QmluZGluZ0ZhdWx0LnNldEVGYXVsdChmYXVsdCk7Ci0gICAgICBuZXdCaW5kaW5nRmF1bHQuc2V0TmFtZShmYXVsdC5nZXROYW1lKCkpOwotICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQobmV3QmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgdGhlIGNvbnRlbnRzIGZvciBlYWNoIEJpbmRpbmdGYXVsdAotICAgIEl0ZXJhdG9yIGZhdWx0Q29udGVudEl0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGZhdWx0Q29udGVudEl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdClmYXVsdENvbnRlbnRJdC5uZXh0KCk7Ci0gICAgICBnZW5lcmF0ZUJpbmRpbmdGYXVsdENvbnRlbnQoYmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0KLSAgICBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb25Db250ZW50KGJpbmRpbmdPcGVyYXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIG5hbWVzRXF1YWwoU3RyaW5nIG5hbWUxLCBTdHJpbmcgbmFtZTIpCi0gIHsKLSAgICBib29sZWFuIG1hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAobmFtZTEgIT0gbnVsbCBeIG5hbWUyICE9IG51bGwpCi0gICAgewotICAgICAgLy8gb25lIGlzIG51bGwKLSAgICAgIG1hdGNoID0gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUxICE9IG51bGwgJiYgbmFtZTIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBuZWl0aGVyIGlzIG51bGwKLSAgICAgIG1hdGNoID0gbmFtZTEuZXF1YWxzKG5hbWUyKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGJvdGggYXJlIG51bGwKLSAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBnZW5lcmF0ZUJpbmRpbmdDb250ZW50KEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGdldE92ZXJ3cml0ZSgpIHx8IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZywgKFBvcnRUeXBlKWJpbmRpbmcuZ2V0RVBvcnRUeXBlKCkpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKGJpbmRpbmcpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCAmJiBjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb25Db250ZW50KGJpbmRpbmdPcGVyYXRpb24sIGJpbmRpbmdPcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZUV4dGVuc2liaWxpdHlFbGVtZW50cyhiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBnZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkKLSAgewotICAgIGlmIChiaW5kaW5nSW5wdXQgIT0gbnVsbCAmJiBjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoYmluZGluZ0lucHV0LCBiaW5kaW5nSW5wdXQuZ2V0RUlucHV0KCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdJbnB1dCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZ2VuZXJhdGVCaW5kaW5nT3V0cHV0Q29udGVudChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBpZiAoYmluZGluZ091dHB1dCAhPSBudWxsICYmIGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ091dHB1dENvbnRlbnQoYmluZGluZ091dHB1dCwgYmluZGluZ091dHB1dC5nZXRFT3V0cHV0KCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdPdXRwdXQpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGdlbmVyYXRlQmluZGluZ0ZhdWx0Q29udGVudChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0KQotICB7Ci0gICAgaWYgKGJpbmRpbmdGYXVsdCAhPSBudWxsICYmIGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0ZhdWx0Q29udGVudChiaW5kaW5nRmF1bHQsIGJpbmRpbmdGYXVsdC5nZXRFRmF1bHQoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVFeHRlbnNpYmlsaXR5RWxlbWVudHMoYmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKEV4dGVuc2libGVFbGVtZW50IGVlKQotICB7Ci0gICAgaWYgKGVlICE9IG51bGwpCi0gICAgewotICAgICAgZWUuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogR2VuZXJhdGUgUG9ydCBDb250ZW50IGZvciBhbGwgUG9ydHMgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgQmluZGluZwotICAgKiB3aGljaCB3YXMgcGFzc2VkIGluIHRocm91Z2ggdGhlIGNvbnN0cnVjdG9yIChvciBhIHJlZmVyZW5jZSB0byB0aGUKLSAgICogbmV3bHkgY3JlYXRlZCBCaW5kaW5nKS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlUG9ydENvbnRlbnQoKQotICB7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCAmJiBjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBwb3J0c1RvVXBkYXRlID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgICBJdGVyYXRvciBzZXJ2aWNlc0l0ID0gYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVNlcnZpY2VzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChzZXJ2aWNlc0l0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZXNJdC5uZXh0KCk7Ci0gICAgICAgIEl0ZXJhdG9yIHBvcnRzSXQgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwb3J0c0l0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXBvcnRzSXQubmV4dCgpOwotICAgICAgICAgIGlmIChiaW5kaW5nLmVxdWFscyhwb3J0LmdldEVCaW5kaW5nKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZvdW5kIGEgbWF0Y2gKLSAgICAgICAgICAgIHBvcnRzVG9VcGRhdGUuYWRkKHBvcnQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBwb3J0c1RvVXBkYXRlSXQgPSBwb3J0c1RvVXBkYXRlLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAocG9ydHNUb1VwZGF0ZUl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KChQb3J0KXBvcnRzVG9VcGRhdGVJdC5uZXh0KCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIG1ldGhvZHMgYWRkUmVxdWlyZWROYW1lc3BhY2VzKCkgYW5kIGNvbXB1dGVVbmlxdWVQcmVmaXgoKSBhcmUgdXNlZCB0byBhZGQgbmVjZXNzYXJ5Ci0gICAqIG5hbWVzcGFjZXMgCi0gICAqIAotICAgKiBUT0RPOgotICAgKiBEb2VzIHRoaXMgYmVsb25nIGhlcmU/ICBUaGlzIGlzIGNvcGllZCBmcm9tIHdzZGwudWkuICBDYW4gd2Ugc3luYyB1cCBpbiBzb21lIHdheT8KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFJlcXVpcmVkTmFtZXNwYWNlcyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIG5hbWVzcGFjZU5hbWVzID0gY29udGVudEdlbmVyYXRvci5nZXRSZXF1aXJlZE5hbWVzcGFjZXMoKTsKLSAgICAgIFN0cmluZ1tdIHByZWZlcnJlZFByZWZpeGVzID0gbmV3IFN0cmluZyBbbmFtZXNwYWNlTmFtZXMubGVuZ3RoXTsKLSAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lc3BhY2VOYW1lcy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIHByZWZlcnJlZFByZWZpeGVzW2luZGV4XSA9IGNvbnRlbnRHZW5lcmF0b3IuZ2V0UHJlZmVycmVkTmFtZXNwYWNlUHJlZml4KG5hbWVzcGFjZU5hbWVzW2luZGV4XSk7Ci0gICAgICB9Ci0KLSAgICAgIE1hcCBtYXAgPSBiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXROYW1lc3BhY2VzKCk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlTmFtZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBuYW1lc3BhY2VOYW1lc1tpXTsKLSAgICAgICAgaWYgKCFtYXAuY29udGFpbnNWYWx1ZShuYW1lc3BhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChpIDwgcHJlZmVycmVkUHJlZml4ZXMubGVuZ3RoKSA/IHByZWZlcnJlZFByZWZpeGVzW2ldIDogInAwIjsKLSAgICAgICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KHByZWZpeCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ID0gY29tcHV0ZVVuaXF1ZVByZWZpeCgicCIsIG1hcCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmFkZE5hbWVzcGFjZShwcmVmaXgsIG5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlVW5pcXVlUHJlZml4KFN0cmluZyBiYXNlLCBNYXAgdGFibGUpCi0gIHsKLSAgICBpbnQgaSA9IDA7Ci0gICAgU3RyaW5nIHByZWZpeCA9IGJhc2U7Ci0gICAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgaWYgKCF0YWJsZS5jb250YWluc0tleShwcmVmaXgpKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gYmFzZSArIGk7Ci0gICAgICAgIGkrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByZWZpeDsKLSAgfQotCi0gIHByaXZhdGUgUG9ydFR5cGUgZ2V0UG9ydFR5cGUoKQotICB7Ci0gICAgaWYgKGdldFJlZk5hbWUoKS5lcXVhbHMoIiIpKQotICAgIHsKLSAgICAgIC8vIE1lYW5zIHdlIHNob3VsZCBzZXQgdGhlIFBvcnRUeXBlIHRvIFVuc3BlY2lmaWVkCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0UmVmTmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgcG9ydFR5cGVJdCA9IGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChwb3J0VHlwZUl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcHQgPSAoUG9ydFR5cGUpcG9ydFR5cGVJdC5uZXh0KCk7Ci0gICAgICAgIExpc3QgcHJlZml4ZWROYW1lcyA9IGdldFByZWZpeGVkTmFtZXMocHQpOwotICAgICAgICBpZiAocHJlZml4ZWROYW1lcy5jb250YWlucyhnZXRSZWZOYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHB0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIExpc3QgcHJlZml4ZWROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmcgY3VycmVudFBvcnRUeXBlTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgU3RyaW5nIGN1cnJlbnROYW1lc3BhY2UgPSBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgTWFwIG5hbWVzcGFjZU1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgIEl0ZXJhdG9yIGtleXMgPSBuYW1lc3BhY2VNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoa2V5cy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGtleSA9IGtleXMubmV4dCgpOwotICAgICAgT2JqZWN0IHZhbHVlID0gbmFtZXNwYWNlTWFwLmdldChrZXkpOwotCi0gICAgICBpZiAoY3VycmVudE5hbWVzcGFjZS5lcXVhbHModmFsdWUpKQotICAgICAgewotICAgICAgICAvLyBGb3VuZCBhIG1hdGNoLiAgQWRkIHRvIG91ciBsaXN0Ci0gICAgICAgIHByZWZpeGVkTmFtZXMuYWRkKGtleSArICI6IiArIGN1cnJlbnRQb3J0VHlwZU5hbWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwcmVmaXhlZE5hbWVzOwotCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL0NvbnRlbnRHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL0NvbnRlbnRHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZiOTMwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9Db250ZW50R2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvcjsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci0KLQotcHVibGljIGludGVyZmFjZSBDb250ZW50R2VuZXJhdG9yCi17Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERFJFU1NfTE9DQVRJT04gPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iOwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRSZXF1aXJlZE5hbWVzcGFjZXMoKTsKLQotICBwdWJsaWMgU3RyaW5nIGdldFByZWZlcnJlZE5hbWVzcGFjZVByZWZpeChTdHJpbmcgbmFtZXNwYWNlKTsKLQotICAvLyBnZW5lcmF0ZXMgdGhlICdhZGRyZXNzJyBleHRlbnNpYmxpdHkgZWxlbWVudCBmb3IgYSBwb3J0Ci0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlUG9ydENvbnRlbnQoUG9ydCBwb3J0KTsKLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdDb250ZW50KEJpbmRpbmcgYmluZGluZywgUG9ydFR5cGUgcG9ydFR5cGUpOwotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBPcGVyYXRpb24gb3BlcmF0aW9uKTsKLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCwgSW5wdXQgaW5wdXQpOwotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ091dHB1dENvbnRlbnQoQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0LCBPdXRwdXQgb3V0cHV0KTsKLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdGYXVsdENvbnRlbnQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCwgRmF1bHQgZmF1bHQpOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEFkZHJlc3NMb2NhdGlvbihTdHJpbmcgYWRkcmVzc0xvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL1BvcnRHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL1BvcnRHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiODU4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9Qb3J0R2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3I7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotCi1wdWJsaWMgY2xhc3MgUG9ydEdlbmVyYXRvciBleHRlbmRzIEJhc2VHZW5lcmF0b3IKLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlIHNlcnZpY2U7Ci0gIHByaXZhdGUgU3RyaW5nIGFkZHJlc3NMb2NhdGlvbiA9IENvbnRlbnRHZW5lcmF0b3IuQUREUkVTU19MT0NBVElPTjsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHBvcnQgZ2VuZXJhdG9yIGdpdmVuIHRoZSB0YXJnZXQgc2VydmljZS4KLSAgICogQHBhcmFtIHNlcnZpY2UgdGhlIHRhcmdldCBTZXJ2aWNlLCBtdXN0IG5vdCBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIFBvcnRHZW5lcmF0b3IoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTsKLSAgICBkZWZpbml0aW9uID0gc2VydmljZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEFkZHJlc3NMb2NhdGlvbihTdHJpbmcgbG9jYXRpb24pIHsKLSAgICBhZGRyZXNzTG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZW5lcmF0ZXMgYSBzZXJ2aWNlIHBvcnQgZ2l2ZW4gaXQncyBuYW1lIGFuZCBiaW5kaW5nIG5hbWUuCi0gICAqIFRoZSBwb3J0IGlzIHRoZW4gYWRkZWQgdG8gdGhlIHNlcnZpY2UgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICogQHJldHVybiB0aGUgUG9ydCBpbnN0YW5jZQotICAgKi8KLSAgcHVibGljIFBvcnQgZ2VuZXJhdGVQb3J0KCkKLSAgewotICAgIFN0cmluZyBwb3J0TmFtZSA9IGdldE5hbWUoKTsKLSAgICBTdHJpbmcgYmluZGluZ05hbWUgPSBnZXRSZWZOYW1lKCk7Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBnZXRCaW5kaW5nKGJpbmRpbmdOYW1lKTsKLQotICAgIFBvcnQgcG9ydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3J0KCk7Ci0gICAgcG9ydC5zZXROYW1lKHBvcnROYW1lKTsKLSAgICBwb3J0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgc2VydmljZS5hZGRQb3J0KHBvcnQpOwotCi0gICAgQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yID0gZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCi0gICAgaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvL3d0cCBidWcgMjIxMDI0IC0gbmFtZXNwYWNlIGFuZCBwcmVmaXhlcyBhcmUgbm90IGFkZGVkIHdoZW4gYWRkIG5ldyBwb3J0Ci0gICAgICBhZGRSZXF1aXJlZE5hbWVzcGFjZXMoc2VydmljZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgY29udGVudEdlbmVyYXRvci5zZXRBZGRyZXNzTG9jYXRpb24oYWRkcmVzc0xvY2F0aW9uKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0Q29udGVudChwb3J0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qCi0gICAqIG1ldGhvZHMgYWRkUmVxdWlyZWROYW1lc3BhY2VzKCkgYW5kIGNvbXB1dGVVbmlxdWVQcmVmaXgoKSBhcmUgdXNlZCB0byBhZGQgbmVjZXNzYXJ5Ci0gICAqIG5hbWVzcGFjZXMgCi0gICAqIAotICAgKiBUT0RPOgotICAgKiBEb2VzIHRoaXMgYmVsb25nIGhlcmU/ICBUaGlzIGlzIGNvcGllZCBmcm9tIHdzZGwudWkuICBDYW4gd2Ugc3luYyB1cCBpbiBzb21lIHdheT8KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFJlcXVpcmVkTmFtZXNwYWNlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIG5hbWVzcGFjZU5hbWVzID0gY29udGVudEdlbmVyYXRvci5nZXRSZXF1aXJlZE5hbWVzcGFjZXMoKTsKLSAgICAgIFN0cmluZ1tdIHByZWZlcnJlZFByZWZpeGVzID0gbmV3IFN0cmluZyBbbmFtZXNwYWNlTmFtZXMubGVuZ3RoXTsKLSAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lc3BhY2VOYW1lcy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIHByZWZlcnJlZFByZWZpeGVzW2luZGV4XSA9IGNvbnRlbnRHZW5lcmF0b3IuZ2V0UHJlZmVycmVkTmFtZXNwYWNlUHJlZml4KG5hbWVzcGFjZU5hbWVzW2luZGV4XSk7Ci0gICAgICB9Ci0KLSAgICAgIE1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lc3BhY2VOYW1lcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG5hbWVzcGFjZU5hbWVzW2ldOwotICAgICAgICBpZiAoIW1hcC5jb250YWluc1ZhbHVlKG5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKGkgPCBwcmVmZXJyZWRQcmVmaXhlcy5sZW5ndGgpID8gcHJlZmVycmVkUHJlZml4ZXNbaV0gOiAicDAiOwotICAgICAgICAgIGlmIChtYXAuY29udGFpbnNLZXkocHJlZml4KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmVmaXggPSBjb21wdXRlVW5pcXVlUHJlZml4KCJwIiwgbWFwKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZVVuaXF1ZVByZWZpeChTdHJpbmcgYmFzZSwgTWFwIHRhYmxlKQotICB7Ci0gICAgaW50IGkgPSAwOwotICAgIFN0cmluZyBwcmVmaXggPSBiYXNlOwotICAgIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGlmICghdGFibGUuY29udGFpbnNLZXkocHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGJhc2UgKyBpOwotICAgICAgICBpKys7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmVmaXg7Ci0gIH0KLQotICAvKioKLSAgICogTG9jYXRlcyBhIGJpbmRpbmcgZ2l2ZW4gaXRzIHByZWZpeGVkIG5hbWUgKHNvbWVOU1ByZWZpeDpzb21lQmluZGluZ05hbWUpLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmdOYW1lIHRoZSBxbmFtZSBvZiB0aGUgZGVzaXJlZCBiaW5kaW5nLgotICAgKiBAcmV0dXJuIGEgQmluZGluZyB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG9uZSBpcyBub3QgZm91bmQuCi0gICAqLwotICBwcml2YXRlIEJpbmRpbmcgZ2V0QmluZGluZyhTdHJpbmcgYmluZGluZ05hbWUpCi0gIHsKLSAgICBMaXN0IGFsbEJpbmRpbmdzID0gZ2V0QWxsQmluZGluZ3MoKTsKLSAgICBJdGVyYXRvciBiaW5kaW5nSXRlcmF0b3IgPSBhbGxCaW5kaW5ncy5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGJpbmRpbmdJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpYmluZGluZ0l0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgTGlzdCBwcmVmaXhlZE5hbWVzID0gZ2V0UHJlZml4ZWROYW1lcyhiaW5kaW5nKTsKLQotICAgICAgaWYgKHByZWZpeGVkTmFtZXMuY29udGFpbnMoYmluZGluZ05hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gYmluZGluZzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBMb2NhdGVzIGFsbCB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIHRoaXMgZGVmaW5pdGlvbiBhbmQgYWxsIGl0cwotICAgKiBpbXBvcnRlZCBkZWZpbml0aW9ucy4KLSAgICogCi0gICAqIEByZXR1cm4gYSBMaXN0IHdpdGggYWxsIGF2YWlsYWJsZSBiaW5kaW5ncy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEFsbEJpbmRpbmdzKCkKLSAgewotICAgIExpc3QgYWxsQmluZGluZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgTGlzdCBhbGxEZWZpbml0aW9ucyA9IGdldEFsbERlZmluaXRpb25zKCk7Ci0KLSAgICBJdGVyYXRvciBkZWZzSXRlcmF0b3IgPSBhbGxEZWZpbml0aW9ucy5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGRlZnNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pZGVmc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIE1hcCBiaW5kaW5ncyA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKTsKLQotICAgICAgLy8gSVNTVUUgQSBwb3NzaWJsZSBwcm9ibGVtIGhlcmUgaWYgc29tZWhvdyBhIGJpbmRpbmcgaXMgZHVwbGljYXRlZCBpbiBvbmUgb2YgdGhlIGltcG9ydHM/Ci0gICAgICAvLyBJbiB0aGF0IGNhc2Ugd2Ugc2hvdWxkIGl0ZXJhdGUgb3ZlciBhbmQgY2hlY2sgdGhlbSBvbmUgYnkgb25lLgotCi0gICAgICBhbGxCaW5kaW5ncy5hZGRBbGwoYmluZGluZ3MudmFsdWVzKCkpOwotICAgIH0KLQotICAgIHJldHVybiBhbGxCaW5kaW5nczsKLSAgfQotCi0gIC8qKgotICAgKiBBdHRlbXB0cyB0byBsb2NhdGUgYW5kIGFkZCB0byB0aGUgbGlzdCBhbGwgdGhlIGRlZmluaXRpb25zIGltcG9ydGVkIGJ5IHRoZQotICAgKiBkZWZpbml0aW9uIHBhc3NlZCBpbi4gUmVjdXJzaXZlbHkgdHJpZXMgdG8gbG9jYXRlIGFsbCBkZWZpbml0aW9ucy4KLSAgICogCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIHRoZSBzdGFydCBEZWZpbml0aW9uLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gbGlzdCB1c2VkIHRvIGNvbGxlY3QgYWxsIHRoZSBpbXBvcnRlZCBkZWZpbml0aW9ucy4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTGlzdCBsaXN0KQotICB7Ci0gICAgbGlzdC5hZGQoZGVmaW5pdGlvbik7Ci0gICAgTGlzdCBpbXBvcnRzID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpOwotICAgIEl0ZXJhdG9yIGltcG9ydHNJdGVyYXRvciA9IGltcG9ydHMuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChpbXBvcnRzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWltcG9ydHNJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgIFN0cmluZyBpbXBvcnRMb2NhdGlvblVSSSA9IHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgaWYgKGltcG9ydExvY2F0aW9uVVJJICE9IG51bGwgJiYKLSAgICAgIC8vIElTU1VFIFRoaXMgYXNzdW1wdGlvbiBzZWVtcyBhIGJpdCB3ZWFrLgotICAgICAgICBpbXBvcnRMb2NhdGlvblVSSS5lbmRzV2l0aCgid3NkbCIpKQotICAgICAgewotICAgICAgICBEZWZpbml0aW9uIGltcG9ydGVkRGVmaW5pdGlvbiA9IHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpOwotCi0gICAgICAgIGlmIChpbXBvcnRlZERlZmluaXRpb24gIT0gbnVsbCAmJiAhbGlzdC5jb250YWlucyhpbXBvcnRlZERlZmluaXRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgdHJ5IHRvIGxvY2F0ZSBhbGwgZGVmaW5pdGlvbnMuCi0KLSAgICAgICAgICBhZGREZWZpbml0aW9uKGltcG9ydGVkRGVmaW5pdGlvbiwgbGlzdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQXR0ZW1wdHMgdG8gbG9jYXRlIGFsbCBkZWZpbml0aW9ucyBpbXBvcnRlZCBieSB0aGUgY3VycmVudCBkZWZpbml0aW9uIGFuZAotICAgKiBhbGwgdGhlaXIgaW1wb3J0cyBpbiB0dXJuLiAKLSAgICogCi0gICAqIEByZXR1cm4gYSBMaXN0IHdpdGggYWxsIGRlZmluaXRpb25zIGltcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGRlZmluaXRpb24uCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0QWxsRGVmaW5pdGlvbnMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGFkZERlZmluaXRpb24oZGVmaW5pdGlvbiwgbGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBMaXN0IHByZWZpeGVkTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgU3RyaW5nIGN1cnJlbnRCaW5kaW5nTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICBTdHJpbmcgY3VycmVudE5hbWVzcGFjZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIE1hcCBuYW1lc3BhY2VNYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICBJdGVyYXRvciBrZXlzID0gbmFtZXNwYWNlTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGtleXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBrZXkgPSBrZXlzLm5leHQoKTsKLSAgICAgIE9iamVjdCB2YWx1ZSA9IG5hbWVzcGFjZU1hcC5nZXQoa2V5KTsKLQotICAgICAgaWYgKGN1cnJlbnROYW1lc3BhY2UuZXF1YWxzKHZhbHVlKSkKLSAgICAgIHsKLSAgICAgICAgLy8gRm91bmQgYSBtYXRjaC4gIEFkZCB0byBvdXIgbGlzdAotICAgICAgICBwcmVmaXhlZE5hbWVzLmFkZChrZXkgKyAiOiIgKyBjdXJyZW50QmluZGluZ05hbWUpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHByZWZpeGVkTmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDFiZmYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0KLS8qCi0gKiBDbGFzcyB3aGljaCBhY3RzIGFzIGEgY29udGFpbmVyIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4dGVuc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yCi17Ci0gIHByb3RlY3RlZCBCdW5kbGUgYnVuZGxlOwotCi0gIHByb3RlY3RlZCBDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3I7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgY2xhc3NOYW1lOwotCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvcihCdW5kbGUgYnVuZGxlLCBTdHJpbmcgY2xhc3NTdHJpbmcsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5idW5kbGUgPSBidW5kbGU7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzU3RyaW5nOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRDb250ZW50R2VuZXJhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIENsYXNzIHRoZUNsYXNzID0gYnVuZGxlLmxvYWRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgY29udGVudEdlbmVyYXRvciA9IChDb250ZW50R2VuZXJhdG9yKXRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIHJldHVybiBjb250ZW50R2VuZXJhdG9yOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNWMxMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5leHRlbnNpb247Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeQotewotICBwcm90ZWN0ZWQgTWFwIG1hcDsKLQotICBwcm90ZWN0ZWQgc3RhdGljIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgaW5zdGFuY2U7Ci0KLSAgcHVibGljIHN0YXRpYyBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkoKTsKLQotICAgICAgLy8gVE9ETy4uLiBkb24ndCByZWFkIHRoZSByZWdpc3RyeSB1bnRpbCBhbiAnZ2V0J29jY3VycwotICAgICAgLy8KLSAgICAgIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlciByZWFkZXIgPSBuZXcgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKGluc3RhbmNlKTsKLSAgICAgIHJlYWRlci5yZWFkUmVnaXN0cnkoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSgpCi0gIHsKLSAgICBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lLCBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICB7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBuYW1lc3BhY2UvbmFtZSBrZXkgaXMgYWxyZWFkeSBpbiB0aGUgTWFwCi0gICAgTGlzdCBmb3VuZEtleSA9IGZpbmRFeGlzdGluZ0tleShuYW1lc3BhY2UsIG5hbWUpOwotCi0gICAgLy8gRGlkIHdlIGZpbmQgYW4gZXhpc3Rpbmcga2V5IHdpdGggdGhlIHNhbWUgbmFtZXNwYWNlL2tleSBwYWlyaW5nPwotICAgIGlmIChmb3VuZEtleSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIFNpbXBseSBhZGQgdGhlIGRlc2NyaXB0b3IgdG8gdGhlIGxpc3Qgb2YgZGVzY3JpcHRvcnMgYXNzb2NpYXRlZAotICAgICAgLy8gd2l0aCB0aGlzIG5hbWVzcGFjZS9uYW1lIGtleQotICAgICAgTGlzdCBkZXNjcmlwdG9yTGlzdCA9IChMaXN0KW1hcC5nZXQoZm91bmRLZXkpOwotICAgICAgZGVzY3JpcHRvckxpc3QuYWRkKGRlc2NyaXB0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgZW50cnkgaW4gdGhlIE1hcCBmb3IgdGhpcyBuYW1lc3BhY2UvbmFtZSBrZXkKLSAgICAgIExpc3QgbmV3S2V5ID0gbmV3IEFycmF5TGlzdCgyKTsKLSAgICAgIG5ld0tleS5hZGQobmFtZXNwYWNlKTsKLSAgICAgIG5ld0tleS5hZGQobmFtZSk7Ci0KLSAgICAgIExpc3QgbmV3RGVzY3JpcHRvckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBuZXdEZXNjcmlwdG9yTGlzdC5hZGQoZGVzY3JpcHRvcik7Ci0KLSAgICAgIG1hcC5wdXQobmV3S2V5LCBuZXdEZXNjcmlwdG9yTGlzdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBmb3IgdGhpcyBleHRlbnNpb24uCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nRXh0ZW5zaW9uTmFtZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgSXRlcmF0b3Iga2V5SXQgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBMaXN0IGtleSA9IG51bGw7Ci0gICAgd2hpbGUgKGtleUl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBrZXkgPSAoTGlzdClrZXlJdC5uZXh0KCk7Ci0gICAgICBsaXN0LmFkZChrZXkuZ2V0KDEpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybiB0aGUgY2xhc3Mgc3BlY2lmaWVkIGZvciB0aGlzIGV4dGVuc2lvbiBiYXNlZCBvbiB0aGUgbmFtZXNwYWNlCi0gICAqIGF0dHJpYnV0ZS4KLSAgICovCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yIGdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgQ29udGVudEdlbmVyYXRvciBnZW5lcmF0b3JDbGFzcyA9IG51bGw7Ci0gICAgTGlzdCBrZXkgPSBmaW5kRXhpc3RpbmdLZXlGcm9tTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0KLSAgICBpZiAoa2V5ICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBkZXNjcmlwdG9ycyA9IChMaXN0KW1hcC5nZXQoa2V5KTsKLQotICAgICAgLy8gR3JhYiB0aGUgZmlyc3QgZGVzY3JpcHRvciBhdmFpbGFibGUKLSAgICAgIGlmIChkZXNjcmlwdG9ycy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvciBleHRlbnNpb25EZXNjcmlwdG9yID0gKENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yKWRlc2NyaXB0b3JzLmdldCgwKTsKLSAgICAgICAgZ2VuZXJhdG9yQ2xhc3MgPSAoQ29udGVudEdlbmVyYXRvcilleHRlbnNpb25EZXNjcmlwdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZ2VuZXJhdG9yQ2xhc3M7Ci0gIH0KLQotICAvKgotICAgKiBSZXR1cm4gdGhlIGNsYXNzIHNwZWNpZmllZCBmb3IgdGhpcyBleHRlbnNpb24gYmFzZWQgb24gdGhlIG5hbWUKLSAgICogYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIENvbnRlbnRHZW5lcmF0b3IgZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3IgZ2VuZXJhdG9yQ2xhc3MgPSBudWxsOwotICAgIExpc3Qga2V5ID0gZmluZEV4aXN0aW5nS2V5RnJvbU5hbWUobmFtZSk7Ci0KLSAgICBpZiAoa2V5ICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBkZXNjcmlwdG9ycyA9IChMaXN0KW1hcC5nZXQoa2V5KTsKLQotICAgICAgLy8gR3JhYiB0aGUgZmlyc3QgZGVzY3JpcHRvciBhdmFpbGFibGUKLSAgICAgIGlmIChkZXNjcmlwdG9ycy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvciBleHRlbnNpb25EZXNjcmlwdG9yID0gKENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yKWRlc2NyaXB0b3JzLmdldCgwKTsKLSAgICAgICAgZ2VuZXJhdG9yQ2xhc3MgPSAoQ29udGVudEdlbmVyYXRvcilleHRlbnNpb25EZXNjcmlwdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZ2VuZXJhdG9yQ2xhc3M7Ci0gIH0KLQotICAvLyBUT0RPOiBXZSBuZWVkIHRvIGNvbW1vbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgdXAuLi4uLi4uCi0gIHByaXZhdGUgTGlzdCBmaW5kRXhpc3RpbmdLZXlGcm9tTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBJdGVyYXRvciBrZXlJdCA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIExpc3QgZm91bmRLZXkgPSBudWxsOwotICAgIHdoaWxlIChrZXlJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZm91bmRLZXkgPSAoTGlzdClrZXlJdC5uZXh0KCk7Ci0gICAgICBpZiAobmFtZXNwYWNlLmVxdWFscyhmb3VuZEtleS5nZXQoMCkpKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGZvdW5kS2V5ID0gbnVsbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZm91bmRLZXk7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZmluZEV4aXN0aW5nS2V5RnJvbU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBJdGVyYXRvciBrZXlJdCA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIExpc3QgZm91bmRLZXkgPSBudWxsOwotICAgIHdoaWxlIChrZXlJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZm91bmRLZXkgPSAoTGlzdClrZXlJdC5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMoZm91bmRLZXkuZ2V0KDEpKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBmb3VuZEtleSA9IG51bGw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kS2V5OwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGZpbmRFeGlzdGluZ0tleShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIEl0ZXJhdG9yIGtleUl0ID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgTGlzdCBmb3VuZEtleSA9IG51bGw7Ci0gICAgd2hpbGUgKGtleUl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBmb3VuZEtleSA9IChMaXN0KWtleUl0Lm5leHQoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKGZvdW5kS2V5LmdldCgwKSkgJiYgbmFtZS5lcXVhbHMoZm91bmRLZXkuZ2V0KDEpKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBmb3VuZEtleSA9IG51bGw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kS2V5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzAyYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uOwotCi0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotCi1wdWJsaWMgY2xhc3MgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9IFdTRExQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0U3ltYm9saWNOYW1lKCk7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5UX0lEID0gImNvbnRlbnRHZW5lcmF0b3JzIjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX05BTUUgPSAiY29udGVudEdlbmVyYXRvciI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FID0gIm5hbWUiOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0KLSAgcHJvdGVjdGVkIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgY29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeTsKLQotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgZ2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5ID0gZ2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIHBhcnNlIGl0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KCkKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSBwbHVnaW5SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUV4dGVuc2lvblBvaW50IHBvaW50ID0gcGx1Z2luUmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoUExVR0lOX0lELCBFWFRFTlNJT05fUE9JTlRfSUQpOwotICAgIGlmIChwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gcG9pbnQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICByZWFkRWxlbWVudChlbGVtZW50c1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyByZXNvbHZlKFVSTCBwbGF0Zm9ybVVSTCwgU3RyaW5nIHJlbGF0aXZlUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgVVJMIHJlc29sdmVkVVJMID0gRmlsZUxvY2F0b3IucmVzb2x2ZShwbGF0Zm9ybVVSTCk7Ci0gICAgcmV0dXJuIHJlc29sdmVkVVJMLnRvU3RyaW5nKCkgKyByZWxhdGl2ZVBhdGg7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoRUxFTUVOVF9OQU1FKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkRWxlbWVudCA9IChJQ29uZmlndXJhdGlvbkVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBjaGlsZEVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FKTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGNoaWxkRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUVTUEFDRSk7Ci0KLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1MpOwotICAgICAgICAgIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBuZXcgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IocGx1Z2luQnVuZGxlLCBjbGFzc05hbWUsIG5hbWVzcGFjZSwgbmFtZSk7Ci0gICAgICAgICAgY29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5wdXQobmFtZXNwYWNlLCBuYW1lLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdGYXVsdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nRmF1bHRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNzI1NmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdGYXVsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBGYXVsdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nRmF1bHRJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ZhdWx0SW1wbCNnZXRFRmF1bHQgPGVtPkVGYXVsdDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdGYXVsdEltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBCaW5kaW5nRmF1bHQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUZhdWx0KCkgPGVtPkVGYXVsdDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEZhdWx0IGVGYXVsdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0ZhdWx0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19GQVVMVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEZhdWx0IGdldEVGYXVsdCgpCi0gIHsKLSAgICBpZiAoZUZhdWx0ICE9IG51bGwgJiYgZUZhdWx0LmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVGYXVsdCA9IChJbnRlcm5hbEVPYmplY3QpZUZhdWx0OwotICAgICAgZUZhdWx0ID0gKEZhdWx0KWVSZXNvbHZlUHJveHkob2xkRUZhdWx0KTsKLSAgICAgIGlmIChlRmF1bHQgIT0gb2xkRUZhdWx0KQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0VGQVVMVCwgb2xkRUZhdWx0LCBlRmF1bHQpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEZhdWx0IGJhc2ljR2V0RUZhdWx0KCkKLSAgewotICAgIHJldHVybiBlRmF1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVGYXVsdChGYXVsdCBuZXdFRmF1bHQpCi0gIHsKLSAgICBGYXVsdCBvbGRFRmF1bHQgPSBlRmF1bHQ7Ci0gICAgZUZhdWx0ID0gbmV3RUZhdWx0OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0VGQVVMVCwgb2xkRUZhdWx0LCBlRmF1bHQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkZhdWx0IGdldEZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXRFRmF1bHQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZhdWx0KGphdmF4LndzZGwuRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBzZXRFRmF1bHQoKEZhdWx0KWZhdWx0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fTkFNRToKLSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0VGQVVMVDoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RUZhdWx0KCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFRmF1bHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fRUZBVUxUOgotICAgICAgc2V0RUZhdWx0KChGYXVsdCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fRUZBVUxUOgotICAgICAgc2V0RUZhdWx0KChGYXVsdCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fRUZBVUxUOgotICAgICAgcmV0dXJuIGVGYXVsdCAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIik7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXROYW1lKG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5yZW1vdmUoaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpY29tcG9uZW50OwotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZEFsbChiaW5kaW5nRmF1bHQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5CSU5ESU5HX0ZBVUxUX19OQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuRkFVTFQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgLy8gUmVzb2x2ZSB0aGUgcmVmZXJlbmNlIHRvIEZhdWx0Ci0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbilnZXRDb250YWluZXIoKTsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKTsKLSAgICAgIFN0cmluZyBmYXVsdE5hbWUgPSBnZXROYW1lKCk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCAmJiBmYXVsdE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF2YXgud3NkbC5GYXVsdCBmYXVsdCA9IG9wZXJhdGlvbi5nZXRGYXVsdChmYXVsdE5hbWUpOwotCi0gICAgICAgIGlmIChmYXVsdCAhPSBnZXRGYXVsdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RmF1bHQoZmF1bHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHN1cGVyLnJlY29uY2lsZVJlZmVyZW5jZXMoZGVlcCk7Ci0gIH0KLX0gLy9CaW5kaW5nRmF1bHRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmRjZjhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwjZ2V0RVBvcnRUeXBlIDxlbT5FUG9ydCBUeXBlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsI2dldEVCaW5kaW5nT3BlcmF0aW9ucyA8ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgQmluZGluZwotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgcU5hbWUgPSBRTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVU5ERUZJTkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRlZmluZWQgPSBVTkRFRklORURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQb3J0VHlwZSgpIDxlbT5FUG9ydCBUeXBlPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUG9ydFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydFR5cGUgZVBvcnRUeXBlID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkgPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVCaW5kaW5nT3BlcmF0aW9ucyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0ltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkJJTkRJTkc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRRTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFFOYW1lKFFOYW1lIG5ld1FOYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkUU5hbWUgPSBxTmFtZTsKLSAgICBxTmFtZSA9IG5ld1FOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfX1FOQU1FLCBvbGRRTmFtZSwgcU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gbmV3VW5kZWZpbmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRVbmRlZmluZWQgPSB1bmRlZmluZWQ7Ci0gICAgdW5kZWZpbmVkID0gbmV3VW5kZWZpbmVkOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfX1VOREVGSU5FRCwgb2xkVW5kZWZpbmVkLCB1bmRlZmluZWQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlIGdldEVQb3J0VHlwZSgpCi0gIHsKLSAgICBpZiAoZVBvcnRUeXBlICE9IG51bGwgJiYgZVBvcnRUeXBlLmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVQb3J0VHlwZSA9IChJbnRlcm5hbEVPYmplY3QpZVBvcnRUeXBlOwotICAgICAgZVBvcnRUeXBlID0gKFBvcnRUeXBlKWVSZXNvbHZlUHJveHkob2xkRVBvcnRUeXBlKTsKLSAgICAgIGlmIChlUG9ydFR5cGUgIT0gb2xkRVBvcnRUeXBlKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VQT1JUX1RZUEUsIG9sZEVQb3J0VHlwZSwgZVBvcnRUeXBlKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlUG9ydFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZSBiYXNpY0dldEVQb3J0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZVBvcnRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFUG9ydFR5cGUoUG9ydFR5cGUgbmV3RVBvcnRUeXBlKQotICB7Ci0gICAgUG9ydFR5cGUgb2xkRVBvcnRUeXBlID0gZVBvcnRUeXBlOwotICAgIGVQb3J0VHlwZSA9IG5ld0VQb3J0VHlwZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX19FUE9SVF9UWVBFLCBvbGRFUG9ydFR5cGUsIGVQb3J0VHlwZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkKLSAgewotICAgIGlmIChlQmluZGluZ09wZXJhdGlvbnMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlQmluZGluZ09wZXJhdGlvbnMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoQmluZGluZ09wZXJhdGlvbi5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUyk7Ci0gICAgfQotICAgIHJldHVybiBlQmluZGluZ09wZXJhdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGFuIG9wZXJhdGlvbiBiaW5kaW5nIHRvIGJpbmRpbmcuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQmluZGluZ09wZXJhdGlvbihqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIGdldEJpbmRpbmdPcGVyYXRpb25zKCkuYWRkKGJpbmRpbmdPcGVyYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbiBiaW5kaW5nLiBOb3RlIHRoYXQgb3BlcmF0aW9uIG5hbWVzIGNhbgotICAgKiBiZSBvdmVybG9hZGVkIHdpdGhpbiBhIFBvcnRUeXBlLiBJbiBjYXNlIG9mIG92ZXJsb2FkaW5nLCB0aGUKLSAgICogbmFtZXMgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZXMgY2FuIGJlIHVzZWQgdG8gZnVydGhlcgotICAgKiByZWZpbmUgdGhlIHNlYXJjaC4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgb3BlcmF0aW9uIGJpbmRpbmcuCi0gICAqIEBwYXJhbSBpbnB1dE5hbWUgdGhlIG5hbWUgb2YgdGhlIGlucHV0IG1lc3NhZ2U7IGlmIHRoaXMgaXMgbnVsbAotICAgKiBpdCB3aWxsIGJlIGlnbm9yZWQuCi0gICAqIEBwYXJhbSBvdXRwdXROYW1lIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgbWVzc2FnZTsgaWYgdGhpcyBpcyBudWxsCi0gICAqIGl0IHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYmluZGluZywgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogYW55IG1hdGNoaW5nIG9wZXJhdGlvbiBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgaW5wdXROYW1lLCBTdHJpbmcgb3V0cHV0TmFtZSkKLSAgewotICAgIEl0ZXJhdG9yIG9wQmluZGluZ0l0ZXJhdG9yID0gZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChvcEJpbmRpbmdJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIG9wID0gKGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbilvcEJpbmRpbmdJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBpZiAob3AgPT0gbnVsbCkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIFN0cmluZyBvcE5hbWUgPSBvcC5nZXROYW1lKCk7Ci0gICAgICBpZiAobmFtZSAhPSBudWxsICYmIG9wTmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoIW5hbWUuZXF1YWxzKG9wTmFtZSkpCi0gICAgICAgICAgb3AgPSBudWxsOwotICAgICAgfQotICAgICAgZWxzZSBpZiAobmFtZSAhPSBudWxsIHx8IG9wTmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBvcCA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvcCAhPSBudWxsICYmIGlucHV0TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBpbnB1dCA9IG9wLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBvcElucHV0TmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAob3BJbnB1dE5hbWUgPT0gbnVsbCB8fCAhb3BJbnB1dE5hbWUuZXF1YWxzKGlucHV0TmFtZSkpCi0gICAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgb3V0cHV0TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgb3V0cHV0ID0gb3AuZ2V0QmluZGluZ091dHB1dCgpOwotICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgb3BPdXRwdXROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAob3BPdXRwdXROYW1lID09IG51bGwgfHwgIW9wT3V0cHV0TmFtZS5lcXVhbHMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwpCi0gICAgICAgIHJldHVybiBvcDsKLSAgICB9IC8vIGVuZCB3aGlsZQotICAgIHJldHVybiBudWxsOyAvLyBiaW5kaW5nIG9wZXJhdGlvbiBub3QgZm91bmQKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBvcGVyYXRpb24gYmluZGluZ3MgZGVmaW5lZCBoZXJlLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdPcGVyYXRpb25zKCkKLSAgewotICAgIHJldHVybiBnZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBvcnRUeXBlIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBnZXRFUG9ydFR5cGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBvcnRUeXBlKGphdmF4LndzZGwuUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBzZXRFUG9ydFR5cGUoKFBvcnRUeXBlKXBvcnRUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19RTkFNRToKLSAgICAgIHJldHVybiBnZXRRTmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gaXNVbmRlZmluZWQoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0U7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VQT1JUX1RZUEU6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVQb3J0VHlwZSgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RVBvcnRUeXBlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlM6Ci0gICAgICByZXR1cm4gZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fUU5BTUU6Ci0gICAgICBzZXRRTmFtZSgoUU5hbWUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoKChCb29sZWFuKW5ld1ZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VQT1JUX1RZUEU6Ci0gICAgICBzZXRFUG9ydFR5cGUoKFBvcnRUeXBlKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUzoKLSAgICAgIGdldEVCaW5kaW5nT3BlcmF0aW9ucygpLmNsZWFyKCk7Ci0gICAgICBnZXRFQmluZGluZ09wZXJhdGlvbnMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fUU5BTUU6Ci0gICAgICBzZXRRTmFtZShRTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZChVTkRFRklORURfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19FUE9SVF9UWVBFOgotICAgICAgc2V0RVBvcnRUeXBlKChQb3J0VHlwZSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUzoKLSAgICAgIGdldEVCaW5kaW5nT3BlcmF0aW9ucygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fUU5BTUU6Ci0gICAgICByZXR1cm4gUU5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IHFOYW1lICE9IG51bGwgOiAhUU5BTUVfRURFRkFVTFQuZXF1YWxzKHFOYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fVU5ERUZJTkVEOgotICAgICAgcmV0dXJuIHVuZGVmaW5lZCAhPSBVTkRFRklORURfRURFRkFVTFQ7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VQT1JUX1RZUEU6Ci0gICAgICByZXR1cm4gZVBvcnRUeXBlICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlM6Ci0gICAgICByZXR1cm4gZUJpbmRpbmdPcGVyYXRpb25zICE9IG51bGwgJiYgIWVCaW5kaW5nT3BlcmF0aW9ucy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChxTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHFOYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHVuZGVmaW5lZDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHVuZGVmaW5lZCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUgPT0gbnVsbCA/ICIiIDogbmFtZSk7IC8vJE5PTi1OTFMtMSQKLSAgICBzZXRRTmFtZShxbmFtZSk7Ci0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWNvbXBvbmVudDsKLQotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZEFsbChiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpKTsKLSAgICBsaXN0LmFkZEFsbChiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3dpdGNoIChXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKGNoaWxkKSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuT1BFUkFUSU9OOgotICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgICAgb3BlcmF0aW9uLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgIG9wZXJhdGlvbi5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgIGFkZEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIExpc3QgbGlzdCA9IGdldExpc3QoY29tcG9uZW50LCBtb2RlbE9iamVjdCk7Ci0gICAgaWYgKGxpc3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldExpc3QoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgTGlzdCByZXN1bHQgPSBudWxsOwotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWNvbXBvbmVudDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgewotICAgICAgcmVzdWx0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19fUU5BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5CSU5ESU5HX19FUE9SVF9UWVBFKQotICAgICAgewotICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGdldEVQb3J0VHlwZSgpOwotICAgICAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFOYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKTsKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlVVJJVmFsdWUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSwgcU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiIyIgKyBxTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5CSU5ESU5HKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHlFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICBpdGVyYXRvciA9IGdldEVCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEJpbmRpbmdPcGVyYXRpb25JbXBsKW9wZXJhdGlvbikuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpLCBlbGVtZW50KTsKLSAgICAgIFBvcnRUeXBlIG5ld1BvcnRUeXBlID0gcG9ydFR5cGVRTmFtZSAhPSBudWxsID8gKFBvcnRUeXBlKWRlZmluaXRpb24uZ2V0UG9ydFR5cGUocG9ydFR5cGVRTmFtZSkgOiBudWxsOwotICAgICAgaWYgKG5ld1BvcnRUeXBlICE9IGdldEVQb3J0VHlwZSgpKQotICAgICAgewotICAgICAgICBzZXRFUG9ydFR5cGUobmV3UG9ydFR5cGUpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci19IC8vQmluZGluZ0ltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nSW5wdXRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ0lucHV0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmYwMWIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nSW5wdXRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgSW5wdXQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0lucHV0SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbnB1dEltcGwjZ2V0RUlucHV0IDxlbT5FSW5wdXQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nSW5wdXRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgQmluZGluZ0lucHV0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVJbnB1dCgpIDxlbT5FSW5wdXQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVJbnB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBJbnB1dCBlSW5wdXQgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdJbnB1dEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkJJTkRJTkdfSU5QVVQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBJbnB1dCBnZXRFSW5wdXQoKQotICB7Ci0gICAgaWYgKGVJbnB1dCAhPSBudWxsICYmIGVJbnB1dC5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFSW5wdXQgPSAoSW50ZXJuYWxFT2JqZWN0KWVJbnB1dDsKLSAgICAgIGVJbnB1dCA9IChJbnB1dCllUmVzb2x2ZVByb3h5KG9sZEVJbnB1dCk7Ci0gICAgICBpZiAoZUlucHV0ICE9IG9sZEVJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FSU5QVVQsIG9sZEVJbnB1dCwgZUlucHV0KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBJbnB1dCBiYXNpY0dldEVJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gZUlucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFSW5wdXQoSW5wdXQgbmV3RUlucHV0KQotICB7Ci0gICAgSW5wdXQgb2xkRUlucHV0ID0gZUlucHV0OwotICAgIGVJbnB1dCA9IG5ld0VJbnB1dDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FSU5QVVQsIG9sZEVJbnB1dCwgZUlucHV0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5JbnB1dCBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUlucHV0KCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnB1dChqYXZheC53c2RsLklucHV0IGlucHV0KQotICB7Ci0gICAgc2V0RUlucHV0KChJbnB1dClpbnB1dCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19FSU5QVVQ6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVJbnB1dCgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RUlucHV0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVDoKLSAgICAgIHNldEVJbnB1dCgoSW5wdXQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fTkFNRToKLSAgICAgIHNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVDoKLSAgICAgIHNldEVJbnB1dCgoSW5wdXQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVDoKLSAgICAgIHJldHVybiBlSW5wdXQgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxpYXRpb24gbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0TmFtZShuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkucmVtb3ZlKGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSAoQmluZGluZ0lucHV0KWNvbXBvbmVudDsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZ0lucHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19JTlBVVF9fTkFNRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXROYW1lKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLklOUFVUKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHlFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIC8vIFJlc29sdmUgdGhlIHJlZmVyZW5jZSB0byBJbnB1dAotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBib3AgPSAoQmluZGluZ09wZXJhdGlvbilnZXRDb250YWluZXIoKTsKLSAgICAgIE9wZXJhdGlvbiBvcCA9IGJvcC5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0SW5wdXQob3AuZ2V0RUlucHV0KCkpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci19IC8vQmluZGluZ0lucHV0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdPcGVyYXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ09wZXJhdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUzODNmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ09wZXJhdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPcGVyYXRpb25JbXBsI2dldEVPcGVyYXRpb24gPGVtPkVPcGVyYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwjZ2V0RUJpbmRpbmdJbnB1dCA8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwjZ2V0RUJpbmRpbmdPdXRwdXQgPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbCNnZXRFQmluZGluZ0ZhdWx0cyA8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ09wZXJhdGlvbkltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBCaW5kaW5nT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVPcGVyYXRpb24oKSA8ZW0+RU9wZXJhdGlvbjwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBPcGVyYXRpb24gZU9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVCaW5kaW5nSW5wdXQoKSA8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0lucHV0IGVCaW5kaW5nSW5wdXQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFQmluZGluZ091dHB1dCgpIDxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgZUJpbmRpbmdPdXRwdXQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFQmluZGluZ0ZhdWx0cygpIDxlbT5FQmluZGluZyBGYXVsdHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUJpbmRpbmdGYXVsdHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUJpbmRpbmdGYXVsdHMgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPcGVyYXRpb25JbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5CSU5ESU5HX09QRVJBVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0RU9wZXJhdGlvbigpCi0gIHsKLSAgICBpZiAoZU9wZXJhdGlvbiAhPSBudWxsICYmIGVPcGVyYXRpb24uZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRU9wZXJhdGlvbiA9IChJbnRlcm5hbEVPYmplY3QpZU9wZXJhdGlvbjsKLSAgICAgIGVPcGVyYXRpb24gPSAoT3BlcmF0aW9uKWVSZXNvbHZlUHJveHkob2xkRU9wZXJhdGlvbik7Ci0gICAgICBpZiAoZU9wZXJhdGlvbiAhPSBvbGRFT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OLCBvbGRFT3BlcmF0aW9uLCBlT3BlcmF0aW9uKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uIGJhc2ljR2V0RU9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZU9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU9wZXJhdGlvbihPcGVyYXRpb24gbmV3RU9wZXJhdGlvbikKLSAgewotICAgIE9wZXJhdGlvbiBvbGRFT3BlcmF0aW9uID0gZU9wZXJhdGlvbjsKLSAgICBlT3BlcmF0aW9uID0gbmV3RU9wZXJhdGlvbjsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTiwgb2xkRU9wZXJhdGlvbiwgZU9wZXJhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEVCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGVCaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IG5ld0VCaW5kaW5nSW5wdXQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgb2xkRUJpbmRpbmdJbnB1dCA9IGVCaW5kaW5nSW5wdXQ7Ci0gICAgZUJpbmRpbmdJbnB1dCA9IG5ld0VCaW5kaW5nSW5wdXQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgIHsKLSAgICAgIEVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCgKLSAgICAgICAgdGhpcywKLSAgICAgICAgTm90aWZpY2F0aW9uLlNFVCwKLSAgICAgICAgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVULAotICAgICAgICBvbGRFQmluZGluZ0lucHV0LAotICAgICAgICBuZXdFQmluZGluZ0lucHV0KTsKLSAgICAgIGlmIChtc2dzID09IG51bGwpCi0gICAgICAgIG1zZ3MgPSBub3RpZmljYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtc2dzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBuZXdFQmluZGluZ0lucHV0KQotICB7Ci0gICAgaWYgKG5ld0VCaW5kaW5nSW5wdXQgIT0gZUJpbmRpbmdJbnB1dCkKLSAgICB7Ci0gICAgICBOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKLSAgICAgIGlmIChlQmluZGluZ0lucHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCllQmluZGluZ0lucHV0KS5lSW52ZXJzZVJlbW92ZSgKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBtc2dzKTsKLSAgICAgIGlmIChuZXdFQmluZGluZ0lucHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdFQmluZGluZ0lucHV0KS5lSW52ZXJzZUFkZCgKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBtc2dzKTsKLSAgICAgIG1zZ3MgPSBiYXNpY1NldEVCaW5kaW5nSW5wdXQobmV3RUJpbmRpbmdJbnB1dCwgbXNncyk7Ci0gICAgICBpZiAobXNncyAhPSBudWxsKQotICAgICAgICBtc2dzLmRpc3BhdGNoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwoCi0gICAgICAgIHRoaXMsCi0gICAgICAgIE5vdGlmaWNhdGlvbi5TRVQsCi0gICAgICAgIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCwKLSAgICAgICAgbmV3RUJpbmRpbmdJbnB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdJbnB1dCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBnZXRFQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZUJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgbmV3RUJpbmRpbmdPdXRwdXQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0IG9sZEVCaW5kaW5nT3V0cHV0ID0gZUJpbmRpbmdPdXRwdXQ7Ci0gICAgZUJpbmRpbmdPdXRwdXQgPSBuZXdFQmluZGluZ091dHB1dDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgewotICAgICAgRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULAotICAgICAgICBvbGRFQmluZGluZ091dHB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdPdXRwdXQpOwotICAgICAgaWYgKG1zZ3MgPT0gbnVsbCkKLSAgICAgICAgbXNncyA9IG5vdGlmaWNhdGlvbjsKLSAgICAgIGVsc2UKLSAgICAgICAgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1zZ3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgbmV3RUJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBpZiAobmV3RUJpbmRpbmdPdXRwdXQgIT0gZUJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0gICAgICBpZiAoZUJpbmRpbmdPdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWVCaW5kaW5nT3V0cHV0KS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFCi0gICAgICAgICAgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULCBudWxsLCBtc2dzKTsKLSAgICAgIGlmIChuZXdFQmluZGluZ091dHB1dCAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3RUJpbmRpbmdPdXRwdXQpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UKLSAgICAgICAgICAtIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQsIG51bGwsIG1zZ3MpOwotICAgICAgbXNncyA9IGJhc2ljU2V0RUJpbmRpbmdPdXRwdXQobmV3RUJpbmRpbmdPdXRwdXQsIG1zZ3MpOwotICAgICAgaWYgKG1zZ3MgIT0gbnVsbCkKLSAgICAgICAgbXNncy5kaXNwYXRjaCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULAotICAgICAgICBuZXdFQmluZGluZ091dHB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdPdXRwdXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVCaW5kaW5nRmF1bHRzKCkKLSAgewotICAgIGlmIChlQmluZGluZ0ZhdWx0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVCaW5kaW5nRmF1bHRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KEJpbmRpbmdGYXVsdC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyk7Ci0gICAgfQotICAgIHJldHVybiBlQmluZGluZ0ZhdWx0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBmYXVsdCBiaW5kaW5nLgotICAgKiBAcGFyYW0gZmF1bHQgdGhlIG5ldyBmYXVsdCBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQmluZGluZ0ZhdWx0KGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuYWRkKChCaW5kaW5nRmF1bHQpYmluZGluZ0ZhdWx0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBmYXVsdCBiaW5kaW5nLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBmYXVsdCBiaW5kaW5nLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGZhdWx0IGJpbmRpbmcsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBmYXVsdCBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IGdldEJpbmRpbmdGYXVsdChTdHJpbmcgbmFtZSkKLSAgewotICAgIEJpbmRpbmdGYXVsdCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVCaW5kaW5nRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmdGYXVsdCBmYXVsdCA9IChCaW5kaW5nRmF1bHQpaS5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMoZmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZmF1bHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIGZhdWx0IGJpbmRpbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlvbiBiaW5kaW5nLgotICAgKiBAcmV0dXJuIG5hbWVzIG9mIGZhdWx0IGJpbmRpbmdzCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRCaW5kaW5nRmF1bHRzKCkKLSAgewotICAgIEhhc2hNYXAgaGFzaE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RUJpbmRpbmdGYXVsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpaS5uZXh0KCk7Ci0gICAgICBoYXNoTWFwLnB1dChiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpLCBiaW5kaW5nRmF1bHQpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaE1hcDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk9wZXJhdGlvbiBnZXRPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEVPcGVyYXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvbihqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBzZXRFT3BlcmF0aW9uKChPcGVyYXRpb24pb3BlcmF0aW9uKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBnZXRCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGdldEVCaW5kaW5nSW5wdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXQgdGhlIGlucHV0IG9mIHRoaXMgb3BlcmF0aW9uIGJpbmRpbmcuCi0gICAqIEBwYXJhbSBpbnB1dCB0aGUgZGVzaXJlZCBpbnB1dAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdJbnB1dChqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQpCi0gIHsKLSAgICBzZXRFQmluZGluZ0lucHV0KChCaW5kaW5nSW5wdXQpYmluZGluZ0lucHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgZ2V0QmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGlzIG9wZXJhdGlvbiBiaW5kaW5nLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdPdXRwdXQoamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBzZXRFQmluZGluZ091dHB1dCgoQmluZGluZ091dHB1dCliaW5kaW5nT3V0cHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUOgotICAgICAgcmV0dXJuIGJhc2ljU2V0RUJpbmRpbmdJbnB1dChudWxsLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHJldHVybiBiYXNpY1NldEVCaW5kaW5nT3V0cHV0KG51bGwsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFQmluZGluZ0ZhdWx0cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTjoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RU9wZXJhdGlvbigpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RU9wZXJhdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ6Ci0gICAgICByZXR1cm4gZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUOgotICAgICAgcmV0dXJuIGdldEVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM6Ci0gICAgICByZXR1cm4gZ2V0RUJpbmRpbmdGYXVsdHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OOgotICAgICAgc2V0RU9wZXJhdGlvbigoT3BlcmF0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUOgotICAgICAgc2V0RUJpbmRpbmdJbnB1dCgoQmluZGluZ0lucHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHNldEVCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUzoKLSAgICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT046Ci0gICAgICBzZXRFT3BlcmF0aW9uKChPcGVyYXRpb24pbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVDoKLSAgICAgIHNldEVCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHNldEVCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTOgotICAgICAgZ2V0RUJpbmRpbmdGYXVsdHMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT046Ci0gICAgICByZXR1cm4gZU9wZXJhdGlvbiAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ6Ci0gICAgICByZXR1cm4gZUJpbmRpbmdJbnB1dCAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUOgotICAgICAgcmV0dXJuIGVCaW5kaW5nT3V0cHV0ICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM6Ci0gICAgICByZXR1cm4gZUJpbmRpbmdGYXVsdHMgIT0gbnVsbCAmJiAhZUJpbmRpbmdGYXVsdHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIik7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXROYW1lKG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0KLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5JTlBVVDoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0lucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgICAgICBpbnB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBpbnB1dC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgc2V0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuT1VUUFVUOgotICAgICAgewotICAgICAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgIG91dHB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBvdXRwdXQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIHNldEJpbmRpbmdPdXRwdXQob3V0cHV0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdGYXVsdCBmYXVsdCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nRmF1bHQoKTsKLSAgICAgICAgZmF1bHQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICAgICAgZmF1bHQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZEJpbmRpbmdGYXVsdChmYXVsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWNvbXBvbmVudDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRFQmluZGluZ0lucHV0KG51bGwpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRFQmluZGluZ091dHB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pY29tcG9uZW50OwotCi0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkpOwotICAgIH0KLQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkpOwotICAgIH0KLQotICAgIGxpc3QuYWRkQWxsKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKSk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZ09wZXJhdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19PUEVSQVRJT05fX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5PUEVSQVRJT04pOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIEJpbmRpbmdJbnB1dCBpbnB1dCA9IGdldEVCaW5kaW5nSW5wdXQoKTsKLSAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChCaW5kaW5nSW5wdXRJbXBsKWlucHV0KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IGdldEVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEJpbmRpbmdPdXRwdXRJbXBsKW91dHB1dCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgaXRlcmF0b3IgPSBnZXRFQmluZGluZ0ZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nRmF1bHQgZmF1bHQgPSAoQmluZGluZ0ZhdWx0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEJpbmRpbmdGYXVsdEltcGwpZmF1bHQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgLy8gUmVzb2x2ZSB0aGUgcmVmZXJlbmNlIHRvIE9wZXJhdGlvbgotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZ2V0Q29udGFpbmVyKCk7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gICAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0lucHV0IGlucHV0ID0gZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IGdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgU3RyaW5nIGlucHV0TmFtZSA9IGlucHV0ICE9IG51bGwgPyBpbnB1dC5nZXROYW1lKCkgOiBudWxsOwotICAgICAgICBTdHJpbmcgb3V0cHV0TmFtZSA9IG91dHB1dCAhPSBudWxsID8gb3V0cHV0LmdldE5hbWUoKSA6IG51bGw7Ci0KLSAgICAgICAgc2V0T3BlcmF0aW9uKHBvcnRUeXBlLmdldE9wZXJhdGlvbihnZXROYW1lKCksIGlucHV0TmFtZSwgb3V0cHV0TmFtZSkpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci19IC8vQmluZGluZ09wZXJhdGlvbkltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nT3V0cHV0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdPdXRwdXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOTIzNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdPdXRwdXRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ091dHB1dEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3V0cHV0SW1wbCNnZXRFT3V0cHV0IDxlbT5FT3V0cHV0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ091dHB1dEltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBCaW5kaW5nT3V0cHV0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVPdXRwdXQoKSA8ZW0+RU91dHB1dDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU91dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBPdXRwdXQgZU91dHB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ091dHB1dEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkJJTkRJTkdfT1VUUFVUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE91dHB1dCBnZXRFT3V0cHV0KCkKLSAgewotICAgIGlmIChlT3V0cHV0ICE9IG51bGwgJiYgZU91dHB1dC5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFT3V0cHV0ID0gKEludGVybmFsRU9iamVjdCllT3V0cHV0OwotICAgICAgZU91dHB1dCA9IChPdXRwdXQpZVJlc29sdmVQcm94eShvbGRFT3V0cHV0KTsKLSAgICAgIGlmIChlT3V0cHV0ICE9IG9sZEVPdXRwdXQpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0VPVVRQVVQsIG9sZEVPdXRwdXQsIGVPdXRwdXQpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPdXRwdXQgYmFzaWNHZXRFT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBlT3V0cHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFT3V0cHV0KE91dHB1dCBuZXdFT3V0cHV0KQotICB7Ci0gICAgT3V0cHV0IG9sZEVPdXRwdXQgPSBlT3V0cHV0OwotICAgIGVPdXRwdXQgPSBuZXdFT3V0cHV0OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19FT1VUUFVULCBvbGRFT3V0cHV0LCBlT3V0cHV0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5PdXRwdXQgZ2V0T3V0cHV0KCkKLSAgewotICAgIHJldHVybiBnZXRFT3V0cHV0KCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPdXRwdXQoamF2YXgud3NkbC5PdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgc2V0RU91dHB1dCgoT3V0cHV0KW91dHB1dCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19OQU1FOgotICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0VPVVRQVVQ6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVPdXRwdXQoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVPdXRwdXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19FT1VUUFVUOgotICAgICAgc2V0RU91dHB1dCgoT3V0cHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0VPVVRQVVQ6Ci0gICAgICBzZXRFT3V0cHV0KChPdXRwdXQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX05BTUU6Ci0gICAgICByZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRU9VVFBVVDoKLSAgICAgIHJldHVybiBlT3V0cHV0ICE9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChuYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIik7Ci0gICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXROYW1lKG5hbWUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5yZW1vdmUoaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gKEJpbmRpbmdPdXRwdXQpY29tcG9uZW50OwotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZEFsbChiaW5kaW5nT3V0cHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19PVVRQVVRfX05BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5PVVRQVVQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgLy8gUmVzb2x2ZSB0aGUgcmVmZXJlbmNlIHRvIE91dHB1dAotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBib3AgPSAoQmluZGluZ09wZXJhdGlvbilnZXRDb250YWluZXIoKTsKLSAgICAgIE9wZXJhdGlvbiBvcCA9IGJvcC5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0T3V0cHV0KG9wLmdldEVPdXRwdXQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHN1cGVyLnJlY29uY2lsZVJlZmVyZW5jZXMoZGVlcCk7Ci0gIH0KLX0gLy9CaW5kaW5nT3V0cHV0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0RlZmluaXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRGVmaW5pdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MwZWEwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRGVmaW5pdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNESW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTREltcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLmV2ZW50cy5FdmVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5ldmVudHMuRXZlbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcudzNjLmRvbS5ldmVudHMuRXZlbnRUYXJnZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uZXZlbnRzLk11dGF0aW9uRXZlbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlZmluaXRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwjZ2V0VGFyZ2V0TmFtZXNwYWNlIDxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwjZ2V0RW5jb2RpbmcgPGVtPkVuY29kaW5nPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldEVJbXBvcnRzIDxlbT5FSW1wb3J0czwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFVHlwZXMgPGVtPkVUeXBlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFTWVzc2FnZXMgPGVtPkVNZXNzYWdlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFUG9ydFR5cGVzIDxlbT5FUG9ydCBUeXBlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFQmluZGluZ3MgPGVtPkVCaW5kaW5nczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFU2VydmljZXMgPGVtPkVTZXJ2aWNlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFTmFtZXNwYWNlcyA8ZW0+RU5hbWVzcGFjZXM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZpbml0aW9uSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIERlZmluaXRpb24KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFRhcmdldE5hbWVzcGFjZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9OQU1FU1BBQ0VfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXROYW1lc3BhY2UoKSA8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBUQVJHRVRfTkFNRVNQQUNFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uID0gTE9DQVRJT05fRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UU5hbWUoKSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIHFOYW1lID0gUU5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmNvZGluZygpIDxlbT5FbmNvZGluZzwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RW5jb2RpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFTkNPRElOR19FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVuY29kaW5nKCkgPGVtPkVuY29kaW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbmNvZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZW5jb2RpbmcgPSBFTkNPRElOR19FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUltcG9ydHMoKSA8ZW0+RUltcG9ydHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUltcG9ydHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUltcG9ydHMgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFVHlwZXMoKSA8ZW0+RVR5cGVzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFVHlwZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgVHlwZXMgZVR5cGVzID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RU1lc3NhZ2VzKCkgPGVtPkVNZXNzYWdlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFTWVzc2FnZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZU1lc3NhZ2VzID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RVBvcnRUeXBlcygpIDxlbT5FUG9ydCBUeXBlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUG9ydFR5cGVzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVQb3J0VHlwZXMgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFQmluZGluZ3MoKSA8ZW0+RUJpbmRpbmdzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVCaW5kaW5ncygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlQmluZGluZ3MgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFU2VydmljZXMoKSA8ZW0+RVNlcnZpY2VzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVTZXJ2aWNlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlU2VydmljZXMgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTmFtZXNwYWNlcygpIDxlbT5FTmFtZXNwYWNlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFTmFtZXNwYWNlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlTmFtZXNwYWNlcyA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeTsKLQotICBwcml2YXRlIERvY3VtZW50IGRvY3VtZW50OwotCi0gIHByaXZhdGUgSGFzaE1hcCBuYW1lc3BhY2VzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuREVGSU5JVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIHRhcmdldE5hbWVzcGFjZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGFyZ2V0TmFtZXNwYWNlKFN0cmluZyBuZXdUYXJnZXROYW1lc3BhY2UpCi0gIHsKLSAgICBTdHJpbmcgb2xkVGFyZ2V0TmFtZXNwYWNlID0gdGFyZ2V0TmFtZXNwYWNlOwotICAgIHRhcmdldE5hbWVzcGFjZSA9IG5ld1RhcmdldE5hbWVzcGFjZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFLCBvbGRUYXJnZXROYW1lc3BhY2UsIHRhcmdldE5hbWVzcGFjZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIG5ld0xvY2F0aW9uKQotICB7Ci0gICAgU3RyaW5nIG9sZExvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19MT0NBVElPTiwgb2xkTG9jYXRpb24sIGxvY2F0aW9uKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRRTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFFOYW1lKFFOYW1lIG5ld1FOYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkUU5hbWUgPSBxTmFtZTsKLSAgICBxTmFtZSA9IG5ld1FOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1FOQU1FLCBvbGRRTmFtZSwgcU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpCi0gIHsKLSAgICByZXR1cm4gZW5jb2Rpbmc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVuY29kaW5nKFN0cmluZyBuZXdFbmNvZGluZykKLSAgewotICAgIFN0cmluZyBvbGRFbmNvZGluZyA9IGVuY29kaW5nOwotICAgIGVuY29kaW5nID0gbmV3RW5jb2Rpbmc7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5DT0RJTkcsIG9sZEVuY29kaW5nLCBlbmNvZGluZykpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RU1lc3NhZ2VzKCkKLSAgewotICAgIGlmIChlTWVzc2FnZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlTWVzc2FnZXMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoTWVzc2FnZS5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU1FU1NBR0VTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVNZXNzYWdlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVQb3J0VHlwZXMoKQotICB7Ci0gICAgaWYgKGVQb3J0VHlwZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlUG9ydFR5cGVzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFBvcnRUeXBlLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FUE9SVF9UWVBFUyk7Ci0gICAgfQotICAgIHJldHVybiBlUG9ydFR5cGVzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RUJpbmRpbmdzKCkKLSAgewotICAgIGlmIChlQmluZGluZ3MgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlQmluZGluZ3MgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoQmluZGluZy5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUJJTkRJTkdTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVCaW5kaW5nczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVTZXJ2aWNlcygpCi0gIHsKLSAgICBpZiAoZVNlcnZpY2VzID09IG51bGwpCi0gICAgewotICAgICAgZVNlcnZpY2VzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFNlcnZpY2UuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VTRVJWSUNFUyk7Ci0gICAgfQotICAgIHJldHVybiBlU2VydmljZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFTmFtZXNwYWNlcygpCi0gIHsKLSAgICBpZiAoZU5hbWVzcGFjZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlTmFtZXNwYWNlcyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChOYW1lc3BhY2UuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVOYW1lc3BhY2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgVHlwZXMgZ2V0RVR5cGVzKCkKLSAgewotICAgIHJldHVybiBlVHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVUeXBlcyhUeXBlcyBuZXdFVHlwZXMsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBUeXBlcyBvbGRFVHlwZXMgPSBlVHlwZXM7Ci0gICAgZVR5cGVzID0gbmV3RVR5cGVzOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICB7Ci0gICAgICBFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVRZUEVTLCBvbGRFVHlwZXMsIG5ld0VUeXBlcyk7Ci0gICAgICBpZiAobXNncyA9PSBudWxsKQotICAgICAgICBtc2dzID0gbm90aWZpY2F0aW9uOwotICAgICAgZWxzZQotICAgICAgICBtc2dzLmFkZChub3RpZmljYXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbXNnczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RVR5cGVzKFR5cGVzIG5ld0VUeXBlcykKLSAgewotICAgIGlmIChuZXdFVHlwZXMgIT0gZVR5cGVzKQotICAgIHsKLSAgICAgIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOwotICAgICAgaWYgKGVUeXBlcyAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZVR5cGVzKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVRZUEVTLCBudWxsLCBtc2dzKTsKLSAgICAgIGlmIChuZXdFVHlwZXMgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0VUeXBlcykuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUywgbnVsbCwgbXNncyk7Ci0gICAgICBtc2dzID0gYmFzaWNTZXRFVHlwZXMobmV3RVR5cGVzLCBtc2dzKTsKLSAgICAgIGlmIChtc2dzICE9IG51bGwpCi0gICAgICAgIG1zZ3MuZGlzcGF0Y2goKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVMsIG5ld0VUeXBlcywgbmV3RVR5cGVzKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlTm90aWZ5KE5vdGlmaWNhdGlvbiBtc2cpCi0gIHsKLSAgICBzdXBlci5lTm90aWZ5KG1zZyk7Ci0KLSAgICAvLyBjcy4uIGlmIHdlJ3ZlIGFkZGVkIGEgVHlwZXMgZWxlbWVudCwgYW5kIHRoaXMgZGVmaW5pdGlvbiBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgcmVzb3VyY2UKLSAgICAvLyB3ZSBuZWVkIHRvIHNldCB0aGUgc2NoZW1hTG9jYXRpb25zIGZvciBhbnkgaW5saW5lIHNjaGVtYUxvY2F0aW9ucy4KLSAgICAvLyBJZiBub3QgeWV0IGF0dGFjaGVkIHRvIGEgcmVzb3VyY2UsIHRoZSBzY2hlbWFMb2NhdGlvbidzIHdpbGwgYmUgc2V0IHZpYSBXU0RMUmVzb3VyY2VJbXBsLmF0dGFjaGVkKEVPYmplY3QgbykKLSAgICAvLwotICAgIGlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLkRFRklOSVRJT05fX0VUWVBFUyAmJiBtc2cuZ2V0RXZlbnRUeXBlKCkgPT0gTm90aWZpY2F0aW9uLlNFVCkKLSAgICB7Ci0gICAgICBpZiAoZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsICYmIGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXRJbmxpbmVTY2hlbWFMb2NhdGlvbnMoZVJlc291cmNlKCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVJbXBvcnRzKCkKLSAgewotICAgIGlmIChlSW1wb3J0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVJbXBvcnRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KEltcG9ydC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFMpOwotICAgIH0KLSAgICByZXR1cm4gZUltcG9ydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgYmluZGluZyB0byB0aGlzIFdTREwgZGVzY3JpcHRpb24uCi0gICAqIEBwYXJhbSBiaW5kaW5nIHRoZSBiaW5kaW5nIHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQmluZGluZyhqYXZheC53c2RsLkJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGdldEVCaW5kaW5ncygpLmFkZCgoQmluZGluZyliaW5kaW5nKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYW4gaW1wb3J0IHRvIHRoaXMgV1NETCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGltcG9ydERlZiB0aGUgaW1wb3J0IHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkSW1wb3J0KGphdmF4LndzZGwuSW1wb3J0IGltcG9ydERlZikKLSAgewotICAgIGdldEVJbXBvcnRzKCkuYWRkKChJbXBvcnQpaW1wb3J0RGVmKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBtZXNzYWdlIHRvIHRoaXMgV1NETCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UgdG8gYmUgYWRkZWQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNZXNzYWdlKGphdmF4LndzZGwuTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgZ2V0RU1lc3NhZ2VzKCkuYWRkKChNZXNzYWdlKW1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaXMgYSB3YXkgdG8gYWRkIGEgbmFtZXNwYWNlIGFzc29jaWF0aW9uIHRvIGEgZGVmaW5pdGlvbi4KLSAgICogSXQgaXMgc2ltaWxhciB0byBhZGRpbmcgYSBuYW1lc3BhY2UgcHJlZml4IGRlY2xhcmF0aW9uIHRvIHRoZQotICAgKiB0b3Agb2YgYSAmbHQ7d3NkbDpkZWZpbml0aW9uJmd0OyBlbGVtZW50LiBUaGlzIGhhcyBub3RoaW5nIHRvIGRvCi0gICAqIHdpdGggdGhlICZsdDt3c2RsOmltcG9ydCZndDsgZWxlbWVudDsgdGhlcmUgYXJlIHNlcGFyYXRlIG1ldGhvZHMgZm9yCi0gICAqIGRlYWxpbmcgd2l0aCBpbmZvcm1hdGlvbiBkZXNjcmliZWQgYnkgJmx0O3dzZGw6aW1wb3J0Jmd0OyBlbGVtZW50cy4KLSAgICogVGhlcmUgaXMgYSBkZWZhdWx0IG5hbWVzcGFjZSBhc3NvY2lhdGlvbiAod2hpY2ggY2FuIGJlCi0gICAqIG92ZXJyaWRkZW4pIGJldHdlZW4gdGhlIG51bGwgcHJlZml4IGFuZAotICAgKiBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAgICogQHBhcmFtIHByZWZpeCB0aGUgcHJlZml4IHRvIHVzZSBmb3IgdGhpcyBuYW1lc3BhY2UgKHdoZW4KLSAgICogcmVuZGVyaW5nIHRoaXMgaW5mb3JtYXRpb24gYXMgWE1MKS4gVXNlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nCi0gICAqIHRvIGRlc2NyaWJlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSAoaS5lLiB4bWxucz0iLi4uIikuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkgdGhlIG5hbWVzcGFjZSBVUkkgdG8gYXNzb2NpYXRlIHRoZSBwcmVmaXgKLSAgICogd2l0aC4gSWYgeW91IHVzZSBudWxsLCB0aGUgbmFtZXNwYWNlIGFzc29jaWF0aW9uIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGROYW1lc3BhY2UoU3RyaW5nIHByZWZpeCwgU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgewotICAgIGlmIChwcmVmaXggPT0gbnVsbCkKLSAgICAgIHByZWZpeCA9ICIiOwotCi0gICAgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiB0aGVyZSBpcyB0aGlzIG5hbWVzcGFjZSBhbHJlYWR5LgotICAgICAgU3RyaW5nIGV4aXN0aW5nUHJlZml4ID0gZ2V0UHJlZml4KG5hbWVzcGFjZVVSSSk7Ci0gICAgICBpZiAoZXhpc3RpbmdQcmVmaXggIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICAvLyBNYWtlIHN1cmUgdGhlIHByZWZpeCBpcyBub3QgYWxyZWFkeSB1c2VkIGZvciBhIGRpZmZlcmVudCBuYW1lc3BhY2UKLSAgICAgIE1hcCBuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlcygpOwotICAgICAgU3RyaW5nIGV4aXN0aW5nTmFtZXNwYWNlID0gKFN0cmluZyluYW1lc3BhY2VzLmdldChwcmVmaXgpOwotICAgICAgaWYgKGV4aXN0aW5nTmFtZXNwYWNlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzcGFjZXMucHV0KHByZWZpeCwgbmFtZXNwYWNlVVJJKTsKLQotICAgICAgICAvLyBTdXBwb3J0IGZvciBOYW1lc3BhY2UKLSAgICAgICAgTmFtZXNwYWNlIGVucyA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOYW1lc3BhY2UoKTsKLSAgICAgICAgZW5zLnNldFByZWZpeChwcmVmaXgpOwotICAgICAgICBlbnMuc2V0VVJJKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgIGdldEVOYW1lc3BhY2VzKCkuYWRkKGVucyk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBUaGUgcHJlZml4IGlzIHRha2VuIGFscmVhZHkuIE1ha2UgYSB1bmlxdWUgcHJlZml4Ci0gICAgICBpZiAocHJlZml4LmVuZHNXaXRoKCIxIikpCi0gICAgICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCgpIC0gMSk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAyOzsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmV3UHJlZml4ID0gcHJlZml4ICsgaTsKLSAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmNvbnRhaW5zS2V5KG5ld1ByZWZpeCkpCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lc3BhY2VzLnB1dChuZXdQcmVmaXgsIG5hbWVzcGFjZVVSSSk7Ci0KLSAgICAgICAgICAvLyBTdXBwb3J0IGZvciBOYW1lc3BhY2UKLSAgICAgICAgICBOYW1lc3BhY2UgZW5zID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5hbWVzcGFjZSgpOwotICAgICAgICAgIGVucy5zZXRQcmVmaXgocHJlZml4KTsKLSAgICAgICAgICBlbnMuc2V0VVJJKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5hZGQoZW5zKTsKLQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gLy8gZW5kIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCkKLSAgICBlbHNlCi0gICAgewotICAgICAgZ2V0TmFtZXNwYWNlcygpLnJlbW92ZShwcmVmaXgpOwotCi0gICAgICAvLyBTdXBwb3J0IGZvciBOYW1lc3BhY2UKLSAgICAgIGdldEVOYW1lc3BhY2VzKCkucmVtb3ZlKHByZWZpeCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhIHBvcnRUeXBlIHRvIHRoaXMgV1NETCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIHBvcnRUeXBlIHRoZSBwb3J0VHlwZSB0byBiZSBhZGRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFBvcnRUeXBlKGphdmF4LndzZGwuUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBnZXRFUG9ydFR5cGVzKCkuYWRkKChQb3J0VHlwZSlwb3J0VHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgc2VydmljZSB0byB0aGlzIFdTREwgZGVzY3JpcHRpb24uCi0gICAqIEBwYXJhbSBzZXJ2aWNlIHRoZSBzZXJ2aWNlIHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU2VydmljZShqYXZheC53c2RsLlNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGdldEVTZXJ2aWNlcygpLmFkZCgoU2VydmljZSlzZXJ2aWNlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgYmluZGluZyBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBiaW5kaW5nIGZhdWx0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdGYXVsdCBjcmVhdGVCaW5kaW5nRmF1bHQoKQotICB7Ci0gICAgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nRmF1bHQoKTsKLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBiaW5kaW5nIGlucHV0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGJpbmRpbmcgaW5wdXQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGNyZWF0ZUJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIHJldHVybiBiaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IGJpbmRpbmcgb3V0cHV0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGJpbmRpbmcgb3V0cHV0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPdXRwdXQgY3JlYXRlQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ091dHB1dCgpOwotICAgIHJldHVybiBiaW5kaW5nT3V0cHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBiaW5kaW5nIG9wZXJhdGlvbgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgYmluZGluZy4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuQmluZGluZyBjcmVhdGVCaW5kaW5nKCkKLSAgewotICAgIGphdmF4LndzZGwuQmluZGluZyBiaW5kaW5nID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgYmluZGluZy5zZXRVbmRlZmluZWQodHJ1ZSk7Ci0gICAgcmV0dXJuIGJpbmRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IGZhdWx0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGZhdWx0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIEZhdWx0IGNyZWF0ZUZhdWx0KCkKLSAgewotICAgIGphdmF4LndzZGwuRmF1bHQgZmF1bHQgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZUZhdWx0KCk7Ci0gICAgcmV0dXJuIGZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBpbXBvcnQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgaW1wb3J0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuSW1wb3J0IGNyZWF0ZUltcG9ydCgpCi0gIHsKLSAgICBqYXZheC53c2RsLkltcG9ydCBpbXBvcnREZWYgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZUltcG9ydCgpOwotICAgIHJldHVybiBpbXBvcnREZWY7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IGlucHV0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGlucHV0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIElucHV0IGNyZWF0ZUlucHV0KCkKLSAgewotICAgIGphdmF4LndzZGwuSW5wdXQgaW5wdXQgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgcmV0dXJuIGlucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBtZXNzYWdlLgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIG1lc3NhZ2UKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5NZXNzYWdlIGNyZWF0ZU1lc3NhZ2UoKQotICB7Ci0gICAgamF2YXgud3NkbC5NZXNzYWdlIG1lc3NhZ2UgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBtZXNzYWdlLnNldFVuZGVmaW5lZCh0cnVlKTsKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIG9wZXJhdGlvbgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gY3JlYXRlT3BlcmF0aW9uKCkKLSAgewotICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIG9wZXJhdGlvbiA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlT3BlcmF0aW9uKCk7Ci0gICAgb3BlcmF0aW9uLnNldFVuZGVmaW5lZCh0cnVlKTsKLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBvdXRwdXQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgb3V0cHV0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE91dHB1dCBjcmVhdGVPdXRwdXQoKQotICB7Ci0gICAgamF2YXgud3NkbC5PdXRwdXQgb3V0cHV0ID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICByZXR1cm4gb3V0cHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBwYXJ0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIHBhcnQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgUGFydCBjcmVhdGVQYXJ0KCkKLSAgewotICAgIGphdmF4LndzZGwuUGFydCBwYXJ0ID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IHBvcnQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgcG9ydAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBQb3J0IGNyZWF0ZVBvcnQoKQotICB7Ci0gICAgamF2YXgud3NkbC5Qb3J0IHBvcnQgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVBvcnQoKTsKLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgcG9ydCB0eXBlLgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIHBvcnQgdHlwZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBvcnRUeXBlIGNyZWF0ZVBvcnRUeXBlKCkKLSAgewotICAgIGphdmF4LndzZGwuUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVBvcnRUeXBlKCk7Ci0gICAgcG9ydFR5cGUuc2V0VW5kZWZpbmVkKHRydWUpOwotICAgIHJldHVybiBwb3J0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgc2VydmljZS4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBzZXJ2aWNlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuU2VydmljZSBjcmVhdGVTZXJ2aWNlKCkKLSAgewotICAgIGphdmF4LndzZGwuU2VydmljZSBzZXJ2aWNlID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgYmluZGluZy4gQWxzbyBjaGVja3MgaW1wb3J0ZWQgZG9jdW1lbnRzLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBiaW5kaW5nLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGJpbmRpbmcsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuQmluZGluZyBnZXRCaW5kaW5nKFFOYW1lIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKGphdmF4LndzZGwuQmluZGluZylyZXNvbHZlV1NETEVsZW1lbnQoV1NETENvbnN0YW50cy5CSU5ESU5HLCBuYW1lLCB0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBiaW5kaW5ncyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRCaW5kaW5ncygpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTWFwKFdTRExDb25zdGFudHMuQklORElORywgZ2V0RUJpbmRpbmdzKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhIG1hcCBvZiBsaXN0cyBjb250YWluaW5nIGFsbCB0aGUgaW1wb3J0cyBkZWZpbmVkIGhlcmUuCi0gICAqIFRoZSBtYXAncyBrZXlzIGFyZSB0aGUgbmFtZXNwYWNlVVJJcywgYW5kIHRoZSBtYXAncyB2YWx1ZXMKLSAgICogYXJlIGxpc3RzLiBUaGVyZSBpcyBvbmUgbGlzdCBmb3IgZWFjaCBuYW1lc3BhY2VVUkkgZm9yIHdoaWNoCi0gICAqIGltcG9ydHMgaGF2ZSBiZWVuIGRlZmluZWQuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRJbXBvcnRzKCkKLSAgewotICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydClpLm5leHQoKTsKLSAgICAgIFN0cmluZyBrZXkgPSB0aGVJbXBvcnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAoa2V5ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGtleSA9ICIiOwotICAgICAgfQotCi0gICAgICBMaXN0IGxpc3QgPSBudWxsOwotICAgICAgaWYgKG1hcC5jb250YWluc0tleShrZXkpKQotICAgICAgewotICAgICAgICBsaXN0ID0gKExpc3QpbWFwLmdldChrZXkpOwotICAgICAgICBsaXN0LmFkZCh0aGVJbXBvcnQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBsaXN0LmFkZCh0aGVJbXBvcnQpOwotICAgICAgfQotICAgICAgbWFwLnB1dChrZXksIGxpc3QpOwotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgbGlzdCBvZiBpbXBvcnRzIGZvciB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZVVSSS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZVVSSSB0aGUgbmFtZXNwYWNlVVJJIGFzc29jaWF0ZWQgd2l0aCB0aGUKLSAgICogZGVzaXJlZCBpbXBvcnRzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiB0aGUgY29ycmVzcG9uZGluZyBpbXBvcnRzCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0SW1wb3J0cyhTdHJpbmcgbmFtZXNwYWNlVVJJKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWkubmV4dCgpOwotICAgICAgaWYgKFdTRExDb25zdGFudHMuaXNNYXRjaGluZ05hbWVzcGFjZShuYW1lc3BhY2VVUkksIHRoZUltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIGxpc3QuYWRkKHRoZUltcG9ydCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuIEFsc28gY2hlY2tzIGltcG9ydGVkIGRvY3VtZW50cy4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlLCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgbWVzc2FnZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk1lc3NhZ2UgZ2V0TWVzc2FnZShRTmFtZSBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChqYXZheC53c2RsLk1lc3NhZ2UpcmVzb2x2ZVdTRExFbGVtZW50KFdTRExDb25zdGFudHMuTUVTU0FHRSwgbmFtZSwgdGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGFsbCB0aGUgbWVzc2FnZXMgZGVmaW5lZCBoZXJlLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0TWVzc2FnZXMoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcChXU0RMQ29uc3RhbnRzLk1FU1NBR0UsIGdldEVNZXNzYWdlcygpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBVUkkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJlZml4LiBPciBudWxsIGlmCi0gICAqIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBVUkkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJlZml4LiBUaGlzIGlzCi0gICAqIHVucmVsYXRlZCB0byB0aGUgJmx0O3dzZGw6aW1wb3J0Jmd0OyBlbGVtZW50LgotICAgKiBAc2VlICNhZGROYW1lc3BhY2UoU3RyaW5nLCBTdHJpbmcpCi0gICAqIEBzZWUgI2dldFByZWZpeChTdHJpbmcpCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoU3RyaW5nIHByZWZpeCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKWdldE5hbWVzcGFjZXMoKS5nZXQocHJlZml4KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIG5hbWVzcGFjZSBhc3NvY2lhdGlvbnMgaW4gdGhpcyBkZWZpbml0aW9uLiBUaGUga2V5cyBhcmUKLSAgICogdGhlIHByZWZpeGVzLCBhbmQgdGhlIG5hbWVzcGFjZSBVUklzIGFyZSB0aGUgdmFsdWVzLiBUaGlzIGlzCi0gICAqIHVucmVsYXRlZCB0byB0aGUgJmx0O3dzZGw6aW1wb3J0Jmd0OyBlbGVtZW50LgotICAgKiBAc2VlICNhZGROYW1lc3BhY2UoU3RyaW5nLCBTdHJpbmcpCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXROYW1lc3BhY2VzKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgc3BlY2lmaWVkIHBvcnRUeXBlLiBBbHNvIGNoZWNrcyBpbXBvcnRlZCBkb2N1bWVudHMuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIHBvcnRUeXBlLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHBvcnRUeXBlLCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgcG9ydFR5cGUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5Qb3J0VHlwZSBnZXRQb3J0VHlwZShRTmFtZSBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChqYXZheC53c2RsLlBvcnRUeXBlKXJlc29sdmVXU0RMRWxlbWVudChXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRSwgbmFtZSwgdGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGFsbCB0aGUgcG9ydFR5cGVzIGRlZmluZWQgaGVyZS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTWFwIGdldFBvcnRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTWFwKFdTRExDb25zdGFudHMuUE9SVF9UWVBFLCBnZXRFUG9ydFR5cGVzKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhIHByZWZpeCBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lc3BhY2UgVVJJLiBPciBudWxsIGlmCi0gICAqIHRoZXJlIGFyZSBubyBwcmVmaXhlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lc3BhY2UgVVJJLiBUaGlzIGlzCi0gICAqIHVucmVsYXRlZCB0byB0aGUgJmx0O3dzZGw6aW1wb3J0Jmd0OyBlbGVtZW50LgotICAgKiBAc2VlICNhZGROYW1lc3BhY2UoU3RyaW5nLCBTdHJpbmcpCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZShTdHJpbmcpCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcmVmaXgoU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgewotICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgSXRlcmF0b3IgZW50cnlJdGVyYXRvciA9IGdldE5hbWVzcGFjZXMoKS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGVudHJ5SXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE1hcC5FbnRyeSBlbnRyeSA9IChNYXAuRW50cnkpZW50cnlJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKLSAgICAgIFN0cmluZyBhc3NvY05hbWVzcGFjZVVSSSA9IChTdHJpbmcpZW50cnkuZ2V0VmFsdWUoKTsKLQotICAgICAgaWYgKG5hbWVzcGFjZVVSSS5lcXVhbHMoYXNzb2NOYW1lc3BhY2VVUkkpICYmIHByZWZpeCAhPSAiIikgLy8gZGVmYXVsdCBuYW1lc3BhY2UKLSAgICAgICAgcmV0dXJuIHByZWZpeDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgc2VydmljZS4gQWxzbyBjaGVja3MgaW1wb3J0ZWQgZG9jdW1lbnRzLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBzZXJ2aWNlLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHNlcnZpY2UsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBzZXJ2aWNlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuU2VydmljZSBnZXRTZXJ2aWNlKFFOYW1lIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKGphdmF4LndzZGwuU2VydmljZSlyZXNvbHZlV1NETEVsZW1lbnQoV1NETENvbnN0YW50cy5TRVJWSUNFLCBuYW1lLCB0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBzZXJ2aWNlcyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRTZXJ2aWNlcygpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTWFwKFdTRExDb25zdGFudHMuU0VSVklDRSwgZ2V0RVNlcnZpY2VzKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgRXh0ZW5zaW9uUmVnaXN0cnkgZm9yIHRoaXMgRGVmaW5pdGlvbi4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgRXh0ZW5zaW9uUmVnaXN0cnkgZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuc2lvblJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFNldCB0aGUgRXh0ZW5zaW9uUmVnaXN0cnkgZm9yIHRoaXMgRGVmaW5pdGlvbi4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFeHRlbnNpb25SZWdpc3RyeShFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSkKLSAgewotICAgIHRoaXMuZXh0ZW5zaW9uUmVnaXN0cnkgPSBleHRlbnNpb25SZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RG9jdW1lbnRCYXNlVVJJKCkKLSAgewotICAgIHJldHVybiBnZXRMb2NhdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRCYXNlVVJJKFN0cmluZyBkb2N1bWVudEJhc2UpCi0gIHsKLSAgICBzZXRMb2NhdGlvbihkb2N1bWVudEJhc2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuVHlwZXMgY3JlYXRlVHlwZXMoKQotICB7Ci0gICAgamF2YXgud3NkbC5UeXBlcyB0eXBlcyA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlVHlwZXMoKTsKLSAgICByZXR1cm4gdHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5TZXJ2aWNlIHJlbW92ZVNlcnZpY2UoUU5hbWUgbmFtZSkKLSAgewotICAgIHJldHVybiAoamF2YXgud3NkbC5TZXJ2aWNlKWdldFNlcnZpY2VzKCkucmVtb3ZlKG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuQmluZGluZyByZW1vdmVCaW5kaW5nKFFOYW1lIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKGphdmF4LndzZGwuQmluZGluZylnZXRCaW5kaW5ncygpLnJlbW92ZShuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBvcnRUeXBlIHJlbW92ZVBvcnRUeXBlKFFOYW1lIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKGphdmF4LndzZGwuUG9ydFR5cGUpZ2V0UG9ydFR5cGVzKCkucmVtb3ZlKG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuTWVzc2FnZSByZW1vdmVNZXNzYWdlKFFOYW1lIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKGphdmF4LndzZGwuTWVzc2FnZSlnZXRNZXNzYWdlcygpLnJlbW92ZShuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIHJldHVybiBnZXRFVHlwZXMoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVzKGphdmF4LndzZGwuVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBzZXRFVHlwZXMoKFR5cGVzKXR5cGVzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFM6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEVJbXBvcnRzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVRZUEVTOgotICAgICAgcmV0dXJuIGJhc2ljU2V0RVR5cGVzKG51bGwsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTUVTU0FHRVM6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEVNZXNzYWdlcygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VQT1JUX1RZUEVTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFUG9ydFR5cGVzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUJJTkRJTkdTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFQmluZGluZ3MoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FU0VSVklDRVM6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEVTZXJ2aWNlcygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFTmFtZXNwYWNlcygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRToKLSAgICAgIHJldHVybiBnZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fTE9DQVRJT046Ci0gICAgICByZXR1cm4gZ2V0TG9jYXRpb24oKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fUU5BTUU6Ci0gICAgICByZXR1cm4gZ2V0UU5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5DT0RJTkc6Ci0gICAgICByZXR1cm4gZ2V0RW5jb2RpbmcoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFM6Ci0gICAgICByZXR1cm4gZ2V0RUltcG9ydHMoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVRZUEVTOgotICAgICAgcmV0dXJuIGdldEVUeXBlcygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTUVTU0FHRVM6Ci0gICAgICByZXR1cm4gZ2V0RU1lc3NhZ2VzKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VQT1JUX1RZUEVTOgotICAgICAgcmV0dXJuIGdldEVQb3J0VHlwZXMoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUJJTkRJTkdTOgotICAgICAgcmV0dXJuIGdldEVCaW5kaW5ncygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FU0VSVklDRVM6Ci0gICAgICByZXR1cm4gZ2V0RVNlcnZpY2VzKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTOgotICAgICAgcmV0dXJuIGdldEVOYW1lc3BhY2VzKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRToKLSAgICAgIHNldFRhcmdldE5hbWVzcGFjZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fTE9DQVRJT046Ci0gICAgICBzZXRMb2NhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fUU5BTUU6Ci0gICAgICBzZXRRTmFtZSgoUU5hbWUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkNPRElORzoKLSAgICAgIHNldEVuY29kaW5nKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FSU1QT1JUUzoKLSAgICAgIGdldEVJbXBvcnRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVJbXBvcnRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVRZUEVTOgotICAgICAgc2V0RVR5cGVzKChUeXBlcyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VNRVNTQUdFUzoKLSAgICAgIGdldEVNZXNzYWdlcygpLmNsZWFyKCk7Ci0gICAgICBnZXRFTWVzc2FnZXMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FUE9SVF9UWVBFUzoKLSAgICAgIGdldEVQb3J0VHlwZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RVBvcnRUeXBlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VCSU5ESU5HUzoKLSAgICAgIGdldEVCaW5kaW5ncygpLmNsZWFyKCk7Ci0gICAgICBnZXRFQmluZGluZ3MoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FU0VSVklDRVM6Ci0gICAgICBnZXRFU2VydmljZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RVNlcnZpY2VzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5BTUVTUEFDRVM6Ci0gICAgICBnZXRFTmFtZXNwYWNlcygpLmNsZWFyKCk7Ci0gICAgICBnZXRFTmFtZXNwYWNlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19UQVJHRVRfTkFNRVNQQUNFOgotICAgICAgc2V0VGFyZ2V0TmFtZXNwYWNlKFRBUkdFVF9OQU1FU1BBQ0VfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19MT0NBVElPTjoKLSAgICAgIHNldExvY2F0aW9uKExPQ0FUSU9OX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fUU5BTUU6Ci0gICAgICBzZXRRTmFtZShRTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQ09ESU5HOgotICAgICAgc2V0RW5jb2RpbmcoRU5DT0RJTkdfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FSU1QT1JUUzoKLSAgICAgIGdldEVJbXBvcnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVRZUEVTOgotICAgICAgc2V0RVR5cGVzKChUeXBlcyludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU1FU1NBR0VTOgotICAgICAgZ2V0RU1lc3NhZ2VzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVBPUlRfVFlQRVM6Ci0gICAgICBnZXRFUG9ydFR5cGVzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUJJTkRJTkdTOgotICAgICAgZ2V0RUJpbmRpbmdzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTOgotICAgICAgZ2V0RVNlcnZpY2VzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5BTUVTUEFDRVM6Ci0gICAgICBnZXRFTmFtZXNwYWNlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRToKLSAgICAgIHJldHVybiBUQVJHRVRfTkFNRVNQQUNFX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCA6ICFUQVJHRVRfTkFNRVNQQUNFX0VERUZBVUxULmVxdWFscyh0YXJnZXROYW1lc3BhY2UpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19MT0NBVElPTjoKLSAgICAgIHJldHVybiBMT0NBVElPTl9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb24gIT0gbnVsbCA6ICFMT0NBVElPTl9FREVGQVVMVC5lcXVhbHMobG9jYXRpb24pOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19RTkFNRToKLSAgICAgIHJldHVybiBRTkFNRV9FREVGQVVMVCA9PSBudWxsID8gcU5hbWUgIT0gbnVsbCA6ICFRTkFNRV9FREVGQVVMVC5lcXVhbHMocU5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkNPRElORzoKLSAgICAgIHJldHVybiBFTkNPRElOR19FREVGQVVMVCA9PSBudWxsID8gZW5jb2RpbmcgIT0gbnVsbCA6ICFFTkNPRElOR19FREVGQVVMVC5lcXVhbHMoZW5jb2RpbmcpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FSU1QT1JUUzoKLSAgICAgIHJldHVybiBlSW1wb3J0cyAhPSBudWxsICYmICFlSW1wb3J0cy5pc0VtcHR5KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHJldHVybiBlVHlwZXMgIT0gbnVsbDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU1FU1NBR0VTOgotICAgICAgcmV0dXJuIGVNZXNzYWdlcyAhPSBudWxsICYmICFlTWVzc2FnZXMuaXNFbXB0eSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FUE9SVF9UWVBFUzoKLSAgICAgIHJldHVybiBlUG9ydFR5cGVzICE9IG51bGwgJiYgIWVQb3J0VHlwZXMuaXNFbXB0eSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FQklORElOR1M6Ci0gICAgICByZXR1cm4gZUJpbmRpbmdzICE9IG51bGwgJiYgIWVCaW5kaW5ncy5pc0VtcHR5KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VTRVJWSUNFUzoKLSAgICAgIHJldHVybiBlU2VydmljZXMgIT0gbnVsbCAmJiAhZVNlcnZpY2VzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5BTUVTUEFDRVM6Ci0gICAgICByZXR1cm4gZU5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhZU5hbWVzcGFjZXMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGRvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFNldHMgdGhlIG93bmVyIGRvY3VtZW50LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50KERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHRhcmdldE5hbWVzcGFjZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBsb2NhdGlvbjogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGxvY2F0aW9uKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHFOYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocU5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgZW5jb2Rpbmc6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChlbmNvZGluZyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIEhhbmQtY29kZWQgbWV0aG9kcwotICAvLwotCi0gIHByb3RlY3RlZCBzdGF0aWMgUmVzb3VyY2VTZXQgZ2xvYmFsUmVzb3VyY2VTZXQ7Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgUmVzb3VyY2VTZXQgZ2V0R2xvYmFsUmVzb3VyY2VTZXQoKQotICB7Ci0gICAgaWYgKGdsb2JhbFJlc291cmNlU2V0ID09IG51bGwpCi0gICAgewotICAgICAgZ2xvYmFsUmVzb3VyY2VTZXQgPSBjcmVhdGVSZXNvdXJjZVNldCgpOwotICAgICAgLy9TdHJpbmcgYmFzZVVSTCA9IFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0QmFzZVVSTCgpLnRvU3RyaW5nKCk7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQmFzZSBVUkwgaXM6ICIgKyBiYXNlVVJMKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ2xvYmFsUmVzb3VyY2VTZXQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFJlc291cmNlU2V0IGNyZWF0ZVJlc291cmNlU2V0KCkKLSAgewotICAgIFJlc291cmNlU2V0IHJlc3VsdCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXN1bHQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIndzZGwiLCBuZXcgV1NETFJlc291cmNlRmFjdG9yeUltcGwoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oTm9kZSBub2RlKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZURlZmluaXRpb24obm9kZSwgbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihOb2RlIG5vZGUsIFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIHJldHVybiBjcmVhdGVEZWZpbml0aW9uKG5vZGUsIGxvY2F0aW9uLCB0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgRGVmaW5pdGlvbiBjcmVhdGVEZWZpbml0aW9uKE5vZGUgbm9kZSwgU3RyaW5nIGxvY2F0aW9uLCBib29sZWFuIHVzZUV4dGVuc2lvbkZhY3RvcmllcykKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5zZXRVc2VFeHRlbnNpb25GYWN0b3JpZXModXNlRXh0ZW5zaW9uRmFjdG9yaWVzKTsKLSAgICBkZWZpbml0aW9uLnNldEVsZW1lbnQoKEVsZW1lbnQpbm9kZSk7Ci0gICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudEJhc2VVUkkobG9jYXRpb24pOwotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBXU0RMRWxlbWVudCByZXNvbHZlV1NETEVsZW1lbnQoaW50IHR5cGUsIExpc3QgbGlzdCwgUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBXU0RMRWxlbWVudCByZXN1bHQgPSBudWxsOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClpLm5leHQoKTsKLSAgICAgICAgUU5hbWUgdGhlUU5hbWUgPSBnZXRRTmFtZUZvcldTRExFbGVtZW50KHR5cGUsIHdzZGxFbGVtZW50KTsKLSAgICAgICAgaWYgKHFuYW1lLmVxdWFscyh0aGVRTmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSB3c2RsRWxlbWVudDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBIYXNoTWFwIGNyZWF0ZU1hcChpbnQgdHlwZSwgTGlzdCBsaXN0KQotICB7Ci0gICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KWkubmV4dCgpOwotICAgICAgUU5hbWUgdGhlUU5hbWUgPSBnZXRRTmFtZUZvcldTRExFbGVtZW50KHR5cGUsIHdzZGxFbGVtZW50KTsKLSAgICAgIGlmICh0aGVRTmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtYXAucHV0KHRoZVFOYW1lLCB3c2RsRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtYXA7Ci0gIH0KLQotICBwcml2YXRlIFFOYW1lIGdldFFOYW1lRm9yV1NETEVsZW1lbnQoaW50IHR5cGUsIFdTRExFbGVtZW50IHdzZGxFbGVtZW50KQotICB7Ci0gICAgUU5hbWUgcmVzdWx0ID0gbnVsbDsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLk1FU1NBR0U6Ci0gICAgICByZXN1bHQgPSAoKE1lc3NhZ2Upd3NkbEVsZW1lbnQpLmdldFFOYW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRToKLSAgICAgIHJlc3VsdCA9ICgoUG9ydFR5cGUpd3NkbEVsZW1lbnQpLmdldFFOYW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLkJJTkRJTkc6Ci0gICAgICByZXN1bHQgPSAoKEJpbmRpbmcpd3NkbEVsZW1lbnQpLmdldFFOYW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlNFUlZJQ0U6Ci0gICAgICByZXN1bHQgPSAoKFNlcnZpY2Upd3NkbEVsZW1lbnQpLmdldFFOYW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc29sdmVzIHRoZSBlbGVtZW50IGRlc2NyaWJlZCBieSB0eXBlIGFuZCBxbmFtZSBpbiB0aGUgY29udGV4dCBvZiB0aGUKLSAgICogZ2l2ZW4gZGVmaW5pdGlvbi4gVGhlIGRlZmluaXRpb24ncyBpbXBvcnRlZCBkZWZpbml0aW9ucyBhcmUgY2hlY2tlZCBhcyB3ZWxsLgotICAgKiAKLSAgICogQHBhcmFtIHR5cGUgdGhlIGVsZW1lbnQgdHlwZS4KLSAgICogQHBhcmFtIHFuYW1lIHRoZSBlbGVtZW50J3MgUU5hbWUuIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIHRoZSBjb250ZXh0IGRlZmluaXRpb24uIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEByZXR1cm4gdGhlIHJlc29sdmVkIFdTRExFbGVtZW50IG9yIG51bGwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFdTRExFbGVtZW50IHJlc29sdmVXU0RMRWxlbWVudChpbnQgdHlwZSwgUU5hbWUgcW5hbWUsIERlZmluaXRpb25JbXBsIGRlZmluaXRpb24pCi0gIHsKLSAgICBpZiAocW5hbWUgPT0gbnVsbCB8fCBxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIExpc3QgZGVmaW5pdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZGVmaW5pdGlvbnMuYWRkKGRlZmluaXRpb24pOwotICAgIFdTRExFbGVtZW50IHJlc3VsdCA9IHJlc29sdmVXU0RMRWxlbWVudCh0eXBlLCBxbmFtZSwgZGVmaW5pdGlvbnMsIG5ldyBBcnJheUxpc3QoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc29sdmVzIHRoZSBlbGVtZW50IGRlc2NyaWJlZCBieSB0eXBlIGFuZCBxbmFtZSBpbiB0aGUgY29udGV4dCBvZiB0aGUKLSAgICogZ2l2ZW4gZGVmaW5pdGlvbnMuIFRoZSBkZWZpbml0aW9ucyBpbXBvcnRlZCBkZWZpbml0aW9ucyBhcmUgY2hlY2tlZCBhcyB3ZWxsLgotICAgKiAKLSAgICogSU1QT1JUQU5UISBUaGlzIG1ldGhvZCBpcyByZWN1cnNpdmUuIEl0IGNoZWNrcyB0aGUgZGVmaW5pdGlvbnMgYW5kIGFsbCB0aGVpcgotICAgKiBpbXBvcnRlZCBkZWZpbml0aW9ucy4gSXQgYWxzbyBpcyBjb2RlZCBzdWNoIHRoYXQgaXQgYXZvaWRzIGEgY3ljbGljIGltcG9ydAotICAgKiBzaG91bGQgb25lIGJlIGVuY291bnRlcmVkLgotICAgKiAKLSAgICogQHBhcmFtIHR5cGUgdGhlIGVsZW1lbnQgdHlwZS4KLSAgICogQHBhcmFtIHFuYW1lIHRoZSBlbGVtZW50J3MgcU5hbWUuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyB0aGUgY29udGV4dCBkZWZpbml0aW9ucwotICAgKiBAcGFyYW0gdmlzaXRlZERlZmluaXRpb25zIGEgbGlzdCB3aXRoIHRoZSBkZWZpbml0aW9ucyBhbHJlYWR5IHZpc2l0ZWQuCi0gICAqIEByZXR1cm4gdGhlIHJlc29sdmVkIFdTRExFbGVtZW50IG9yIG51bGwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFdTRExFbGVtZW50IHJlc29sdmVXU0RMRWxlbWVudChpbnQgdHlwZSwgUU5hbWUgcW5hbWUsIExpc3QgZGVmaW5pdGlvbnMsIExpc3QgdmlzaXRlZERlZmluaXRpb25zKQotICB7Ci0gICAgV1NETEVsZW1lbnQgcmVzdWx0ID0gbnVsbDsKLQotICAgIGlmIChkZWZpbml0aW9ucy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBJbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgb2xkIGJlaGF2aW91ciB3aGljaCB1c2VkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uCi0gICAgLy8gYW5kIGFsbCBmaXJzdCBsZXZlbCBpbXBvcnRzLCBjaGVjayB0aGUgZW50aXJlIGxpc3Qgb2YgZGVmaW5pdGlvbnMgcGFzc2VkCi0gICAgLy8gaW4gZmlyc3QuCi0KLSAgICBJdGVyYXRvciBkZWZpbml0aW9uc0l0ZXJhdG9yID0gZGVmaW5pdGlvbnMuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChkZWZpbml0aW9uc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gKERlZmluaXRpb25JbXBsKWRlZmluaXRpb25zSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICByZXN1bHQgPSBkZWZpbml0aW9uLnJlc29sdmVXU0RMRWxlbWVudCh0eXBlLCBxbmFtZSk7Ci0KLSAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZS1pdGVyYXRlIG92ZXIgdGhlIGRlZmluaXRpb25zIGFuZCByZWN1cnNlIGludG8gdGhlaXIgaW1wb3J0cy4KLQotICAgIGRlZmluaXRpb25zSXRlcmF0b3IgPSBkZWZpbml0aW9ucy5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGRlZmluaXRpb25zSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIERlZmluaXRpb25JbXBsIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbnNJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgIGlmICh2aXNpdGVkRGVmaW5pdGlvbnMuY29udGFpbnMoZGVmaW5pdGlvbikpCi0gICAgICB7Ci0gICAgICAgIC8vIFRoaXMgbWlnaHQgaGFwcGVuIGlmIHdlIGhhdmUgYSBjYXNlIG9mIGN5Y2xpYyBpbXBvcnRzLiBTaW5jZSB3ZQotICAgICAgICAvLyBhbHJlYWR5IGxvb2tlZCBpbiBpdCwgd2UgY2FuIGFuZCBzaG91bGQgc2tpcCBpdC4KLQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgdmlzaXRlZERlZmluaXRpb25zLmFkZChkZWZpbml0aW9uKTsKLQotICAgICAgTGlzdCBpbXBvcnRlZERlZmluaXRpb25zID0gZGVmaW5pdGlvbi5nZXRJbXBvcnRlZERlZmluaXRpb25zKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotICAgICAgcmVzdWx0ID0gcmVzb2x2ZVdTRExFbGVtZW50KHR5cGUsIHFuYW1lLCBpbXBvcnRlZERlZmluaXRpb25zLCB2aXNpdGVkRGVmaW5pdGlvbnMpOwotCi0gICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIFdTRExFbGVtZW50IHJlc29sdmVXU0RMRWxlbWVudChpbnQgdHlwZSwgUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBXU0RMRWxlbWVudCByZXN1bHQgPSBudWxsOwotICAgIGlmIChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLk1FU1NBR0U6Ci0gICAgICAgIHJlc3VsdCA9IHJlc29sdmVXU0RMRWxlbWVudCh0eXBlLCBnZXRFTWVzc2FnZXMoKSwgcW5hbWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdTRExDb25zdGFudHMuUE9SVF9UWVBFOgotICAgICAgICByZXN1bHQgPSByZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgZ2V0RVBvcnRUeXBlcygpLCBxbmFtZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV1NETENvbnN0YW50cy5CSU5ESU5HOgotICAgICAgICByZXN1bHQgPSByZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgZ2V0RUJpbmRpbmdzKCksIHFuYW1lKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlNFUlZJQ0U6Ci0gICAgICAgIHJlc3VsdCA9IHJlc29sdmVXU0RMRWxlbWVudCh0eXBlLCBnZXRFU2VydmljZXMoKSwgcW5hbWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxpYXRpb24gbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgRWxlbWVudCBvbGRFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmIChvbGRFbGVtZW50IGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpCi0gICAgewotICAgICAgRXZlbnRUYXJnZXQgb2xkRXZlbnRUYXJnZXQgPSAoKEV2ZW50VGFyZ2V0KW9sZEVsZW1lbnQpOwotICAgICAgb2xkRXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgZ2V0RXZlbnRMaXN0ZW5lcigpLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgb2xkRXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLCBnZXRFdmVudExpc3RlbmVyKCksIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBvbGRFdmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01BdHRyTW9kaWZpZWQiLCBnZXRFdmVudExpc3RlbmVyKCksIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHN1cGVyLnNldEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFdmVudFRhcmdldCkKLSAgICB7Ci0gICAgICBFdmVudFRhcmdldCBldmVudFRhcmdldCA9ICgoRXZlbnRUYXJnZXQpZWxlbWVudCk7Ci0gICAgICBldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0ZWQiLCBnZXRFdmVudExpc3RlbmVyKCksIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJET01Ob2RlUmVtb3ZlZCIsIGdldEV2ZW50TGlzdGVuZXIoKSwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUF0dHJNb2RpZmllZCIsIGdldEV2ZW50TGlzdGVuZXIoKSwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkb2N1bWVudCA9IGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHN1cGVyLnJlY29uY2lsZUF0dHJpYnV0ZXMoY2hhbmdlZEVsZW1lbnQpOwotCi0gICAgaWYgKGNoYW5nZWRFbGVtZW50ID09IGdldEVsZW1lbnQoKSkKLSAgICB7Ci0gICAgICBpZiAoY2hhbmdlZEVsZW1lbnQuaGFzQXR0cmlidXRlKFdTRExDb25zdGFudHMuVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSkpCi0gICAgICAgIHNldFRhcmdldE5hbWVzcGFjZShjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UQVJHRVROQU1FU1BBQ0VfQVRUUklCVVRFKSk7Ci0gICAgICBpZiAoY2hhbmdlZEVsZW1lbnQuaGFzQXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpKQotICAgICAgICBzZXRRTmFtZShuZXcgUU5hbWUoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksIGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKSkpOwotICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5jbGVhcigpOwotICAgICAgZ2V0TmFtZXNwYWNlcygpLmNsZWFyKCk7Ci0gICAgICAvL2dldE5hbWVzcGFjZXMoKS5wdXQoIiIsIG51bGwpOwotCi0gICAgICBOYW1lZE5vZGVNYXAgbWFwID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotICAgICAgaW50IG1hcExlbmd0aCA9IG1hcC5nZXRMZW5ndGgoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwTGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IChBdHRyKW1hcC5pdGVtKGkpOwotICAgICAgICBTdHJpbmcgbnNQcmVmaXggPSBudWxsOwotICAgICAgICBpZiAoWE1MTlMuZXF1YWxzKGF0dHIuZ2V0UHJlZml4KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgbnNQcmVmaXggPSBhdHRyLmdldExvY2FsTmFtZSgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKFhNTE5TLmVxdWFscyhhdHRyLmdldE5vZGVOYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgbnNQcmVmaXggPSAiIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuc1ByZWZpeCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZ2V0TmFtZXNwYWNlcygpLnB1dChuc1ByZWZpeCwgYXR0ci5nZXRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5CSU5ESU5HOgotICAgICAgewotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZygpOwotICAgICAgICBiaW5kaW5nLnNldEVuY2xvc2luZ0RlZmluaXRpb24odGhpcyk7Ci0gICAgICAgIGJpbmRpbmcuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZEJpbmRpbmcoYmluZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT046Ci0gICAgICB7Ci0gICAgICAgIC8vIENTOiB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHVuc2V0IHRoaXMgZWxlbWVudCB3aGVuIGl0cyByZW1vdmVkCi0gICAgICAgIC8vZGVmaW5pdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChjaGlsZCk7ICAKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuSU1QT1JUOgotICAgICAgewotICAgICAgICBJbXBvcnQgaSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbXBvcnQoKTsKLSAgICAgICAgaS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHRoaXMpOwotICAgICAgICBpLnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBhZGRJbXBvcnQoaSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLk1FU1NBR0U6Ci0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgbWVzc2FnZS5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgYWRkTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuUE9SVF9UWVBFOgotICAgICAgewotICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3J0VHlwZSgpOwotICAgICAgICBwb3J0VHlwZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHRoaXMpOwotICAgICAgICBwb3J0VHlwZS5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgYWRkUG9ydFR5cGUocG9ydFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5TRVJWSUNFOgotICAgICAgewotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVNlcnZpY2UoKTsKLSAgICAgICAgc2VydmljZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHRoaXMpOwotICAgICAgICBzZXJ2aWNlLnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBhZGRTZXJ2aWNlKHNlcnZpY2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5UWVBFUzoKLSAgICAgIHsKLSAgICAgICAgaWYgKGdldEVUeXBlcygpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBUeXBlcyB0eXBlcyA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlVHlwZXMoKTsKLSAgICAgICAgICB0eXBlcy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHRoaXMpOwotICAgICAgICAgIHR5cGVzLnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICAgIHNldEVUeXBlcyh0eXBlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IGdldFVzZUV4dGVuc2lvbkZhY3RvcmllcygpCi0gICAgICAgICAgPyAoKFdTRExGYWN0b3J5SW1wbClXU0RMRmFjdG9yeS5lSU5TVEFOQ0UpLmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KGdldE5hbWVzcGFjZShjaGlsZCksIGdldExvY2FsTmFtZShjaGlsZCkpCi0gICAgICAgICAgOiAoKFdTRExGYWN0b3J5SW1wbClXU0RMRmFjdG9yeS5lSU5TVEFOQ0UpLmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gICAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24odGhpcyk7Ci0gICAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuYWRkKGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICAgIHJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgVHlwZXMpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pY29tcG9uZW50OwotICAgICAgaWYgKGRlZmluaXRpb24uZ2V0RVR5cGVzKCkgPT0gbW9kZWxPYmplY3QpCi0gICAgICB7Ci0gICAgICAgIGRlZmluaXRpb24uc2V0RVR5cGVzKG51bGwpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgTGlzdCBsaXN0ID0gZ2V0TGlzdChjb21wb25lbnQsIG1vZGVsT2JqZWN0KTsKLSAgICAgIGlmIChsaXN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGxpc3QucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0TGlzdChPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IG51bGw7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pY29tcG9uZW50OwotCi0gICAgLy8gdG9kby4uLiB1c2UgV1NETFN3aXRjaAotICAgIC8vCi0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEltcG9ydCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2UpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBkZWZpbml0aW9uLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWNvbXBvbmVudDsKLSAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkpOwotICAgIGxpc3QuYWRkKGRlZmluaXRpb24uZ2V0RVR5cGVzKCkpOwotICAgIGxpc3QuYWRkQWxsKGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkpOwotICAgIGxpc3QuYWRkQWxsKGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpKTsKLSAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpKTsKLSAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVTZXJ2aWNlcygpKTsKLSAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHB1YmxpYyBEb2N1bWVudCB1cGRhdGVEb2N1bWVudCgpCi0gIHsKLSAgICBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50OwotICB9Ci0KLSAgcHJpdmF0ZSBEb2N1bWVudCBjcmVhdGVEb2N1bWVudCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRvY3VtZW50QnVpbGRlckZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLSAgICAgIERvY3VtZW50QnVpbGRlciBkb2N1bWVudEJ1aWxkZXIgPSBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgICAgcmV0dXJuIGRvY3VtZW50QnVpbGRlci5uZXdEb2N1bWVudCgpOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgV1NETFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLkRFRklOSVRJT04pOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0gICAgYWRkQ2hpbGRFbGVtZW50cyhuZXdFbGVtZW50LCBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCi0gICAgYWRkQ2hpbGRFbGVtZW50cyhuZXdFbGVtZW50LCBnZXRFSW1wb3J0cygpKTsKLQotICAgIFR5cGVzIHR5cGVzID0gZ2V0RVR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgewotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoVHlwZXNJbXBsKXR5cGVzKS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICBhZGRDaGlsZEVsZW1lbnRzKG5ld0VsZW1lbnQsIGdldEVNZXNzYWdlcygpKTsKLSAgICBhZGRDaGlsZEVsZW1lbnRzKG5ld0VsZW1lbnQsIGdldEVQb3J0VHlwZXMoKSk7Ci0gICAgYWRkQ2hpbGRFbGVtZW50cyhuZXdFbGVtZW50LCBnZXRFQmluZGluZ3MoKSk7Ci0gICAgYWRkQ2hpbGRFbGVtZW50cyhuZXdFbGVtZW50LCBnZXRFU2VydmljZXMoKSk7Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQsIExpc3QgYykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBjLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgV1NETEVsZW1lbnRJbXBsIHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50SW1wbClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gd3NkbEVsZW1lbnQuY3JlYXRlRWxlbWVudCgpOwotICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VSZWZlcmVuY2UoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gICAgLy8gQWRkIG5hbWVzcGFjZSBwcmVmaXggaW5mbwotICAgIC8vIFRCRCAtIE5lZWQgdG8gcmV2aXNpdC4KLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKGVSZWZlcmVuY2UgPT0gbnVsbCAmJiB0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgLy8gV2UgYXJlIHVwZGF0aW5nIHRoZSBEZWZpbml0aW9uIGVsZW1lbnQuCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXROYW1lc3BhY2VzKCkuZW50cnlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgU3RyaW5nIHByZWZpeCA9IG51bGw7Ci0gICAgICBTdHJpbmcgdXJpID0gbnVsbDsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE1hcC5FbnRyeSBlbnRyeSA9IChNYXAuRW50cnkpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBwcmVmaXggPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOwotICAgICAgICB1cmkgPSAoU3RyaW5nKWVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgIGlmIChwcmVmaXggIT0gIiIpCi0gICAgICAgICAgdGhlRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhYU0RDb25zdGFudHMuWE1MTlNfVVJJXzIwMDAsICJ4bWxuczoiICsgcHJlZml4LCB1cmkpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGVsc2UgaWYgKHVyaSAhPSBudWxsKQotICAgICAgICAgIC8vIEhhbmRsZSBkZWZhdWx0IG5hbWVzcGFjZSwgZS5nLiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0gICAgICAgICAgdGhlRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhYU0RDb25zdGFudHMuWE1MTlNfVVJJXzIwMDAsIFhNTE5TLCB1cmkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvL2lmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpKQotICAgICAgLy8gIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5FTkNPRElOR19BVFRSSUJVVEUsIGdldEVuY29kaW5nKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLkRFRklOSVRJT05fX1FOQU1FKQotICAgICAgICBpZiAoZ2V0UU5hbWUoKSAhPSBudWxsKQotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSwgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIGlmIChlQXR0cmlidXRlICE9IG51bGwgJiYgIWlzUmVjb25jaWxpbmcpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGF0Y2hUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0SW1wb3J0ZWREZWZpbml0aW9ucyhTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0SW1wb3J0cyhuYW1lc3BhY2UpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydClpLm5leHQoKTsKLSAgICAgICgoSW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotICAgICAgRGVmaW5pdGlvbiBpbXBvcnRlZERlZmluaXRpb24gPSB0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLSAgICAgIGlmIChpbXBvcnRlZERlZmluaXRpb24gIT0gbnVsbCAmJiBXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UobmFtZXNwYWNlLCBpbXBvcnRlZERlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgewotICAgICAgICBsaXN0LmFkZChpbXBvcnRlZERlZmluaXRpb24pOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uVVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoIiMiKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgewotICAgICAgcmVzdWx0ID0gcmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbih1cmkuc3Vic3RyaW5nKDAsIGluZGV4KSwgdXJpLnN1YnN0cmluZyhpbmRleCArIDEpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0NvbXBvbmVudERlZmluZWQoWFNEQ29uY3JldGVDb21wb25lbnQgY29tcG9uZW50KQotICB7Ci0gICAgLy8gbm90ZSB0aGUgZ2V0Q29udGFpbmVyKCkgdGVzdCB0byBlbGltaW5hdGUgJ3N5bnRoZXRpYycgdHlwZXMKLSAgICAvLyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoZSBYTUxTY2hlbWEgbW9kZWwgd2hlbiByZXNvbHV0aW9uIGZhaWxzICAgCi0gICAgcmV0dXJuIGNvbXBvbmVudCAhPSBudWxsICYmIGNvbXBvbmVudC5nZXRDb250YWluZXIoKSAhPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZXNvbHZlU2NoZW1hKG5hbWVzcGFjZSkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKWkubmV4dCgpOwotICAgICAgcmVzdWx0ID0gc2NoZW1hLnJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24obmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5lZChyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIENvdWxkIG5vdCByZXNvbHZlLiBUcnkgYWdhaW5zdCBhbGwgPGltcG9ydD5lZCBhbmQgaW5saW5lZCBzY2hlbWFzLgotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEltcG9ydGVkT3JJbmxpbmVkU2NoZW1hcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIHJlc3VsdCA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKG5hbWVzcGFjZSwgbG9jYWxOYW1lKTsKLSAgICAgIGlmIChpc0NvbXBvbmVudERlZmluZWQocmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIHJlc29sdmVUeXBlRGVmaW5pdGlvblVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoIiMiKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgewotICAgICAgcmVzdWx0ID0gcmVzb2x2ZVR5cGVEZWZpbml0aW9uKHVyaS5zdWJzdHJpbmcoMCwgaW5kZXgpLCB1cmkuc3Vic3RyaW5nKGluZGV4ICsgMSkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIHJlc29sdmVUeXBlRGVmaW5pdGlvbihTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZXNvbHZlU2NoZW1hKG5hbWVzcGFjZSkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKWkubmV4dCgpOwotICAgICAgcmVzdWx0ID0gc2NoZW1hLnJlc29sdmVUeXBlRGVmaW5pdGlvbihuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gICAgICBpZiAoaXNDb21wb25lbnREZWZpbmVkKHJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gQ291bGQgbm90IHJlc29sdmUuIFRyeSBhZ2FpbnN0IGFsbCA8aW1wb3J0PmVkIGFuZCBpbmxpbmVkIHNjaGVtYXMuCi0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0SW1wb3J0ZWRPcklubGluZWRTY2hlbWFzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKWkubmV4dCgpOwotICAgICAgcmVzdWx0ID0gc2NoZW1hLnJlc29sdmVUeXBlRGVmaW5pdGlvbihuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gICAgICBpZiAoaXNDb21wb25lbnREZWZpbmVkKHJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsgLy8gRmFpbGVkIHRvIHJlc29sdmUuCi0gIH0KLQotICAvKioKLSAgICogVGhpcyByZXR1cm5zIHNldCBvZiBzY2hlbWFzIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZSBhcyBpdCdzIHRhcmdldCBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgQ29sbGVjdGlvbiByZXNvbHZlU2NoZW1hKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBpZiAoIiIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgbmFtZXNwYWNlID0gbnVsbDsKLSAgICB9Ci0KLSAgICBpZiAoWFNEQ29uc3RhbnRzLmlzU2NoZW1hRm9yU2NoZW1hTmFtZXNwYWNlKG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnNpbmdsZXRvbihYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShuYW1lc3BhY2UpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoWFNEQ29uc3RhbnRzLmlzU2NoZW1hSW5zdGFuY2VOYW1lc3BhY2UobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uKFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hSW5zdGFuY2UobmFtZXNwYWNlKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0SW1wb3J0ZWRPcklubGluZWRTY2hlbWFzKG5hbWVzcGFjZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgZ2V0SW1wb3J0ZWRPcklubGluZWRTY2hlbWFzKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlID0gIiI7Ci0gICAgfQotCi0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGNvbGxlY3RJbXBvcnRlZFNjaGVtYXMobmFtZXNwYWNlLCBsaXN0KTsKLSAgICBjb2xsZWN0SW5saW5lZFNjaGVtYXMobmFtZXNwYWNlLCBsaXN0KTsKLSAgICBjb2xsZWN0SW5saW5lZFNjaGVtYXNPZkltcG9ydGVkRGVmaW5pdGlvbnMobmFtZXNwYWNlLCBsaXN0KTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRJbXBvcnRlZE9ySW5saW5lZFNjaGVtYXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWkubmV4dCgpOwotICAgICAgKChJbXBvcnRJbXBsKXRoZUltcG9ydCkuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLSAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgbGlzdC5hZGQoc2NoZW1hKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0RVR5cGVzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZEFsbChnZXRFVHlwZXMoKS5nZXRTY2hlbWFzKCkpOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHByb3RlY3RlZCBFdmVudExpc3RlbmVyIGV2ZW50TGlzdGVuZXI7Ci0KLSAgcHJvdGVjdGVkIE5vZGUgZGVsZXRpb25Ob2RlOwotCi0gIHB1YmxpYyBOb2RlIGdldERlbGV0aW9uTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gZGVsZXRpb25Ob2RlOwotICB9Ci0KLSAgcHJvdGVjdGVkIEV2ZW50TGlzdGVuZXIgZ2V0RXZlbnRMaXN0ZW5lcigpCi0gIHsKLSAgICBpZiAoZXZlbnRMaXN0ZW5lciA9PSBudWxsKQotICAgIHsKLSAgICAgIGV2ZW50TGlzdGVuZXIgPSBuZXcgRXZlbnRMaXN0ZW5lcigpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNdXRhdGlvbkV2ZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBNdXRhdGlvbkV2ZW50IG11dGF0aW9uRXZlbnQgPSAoTXV0YXRpb25FdmVudClldmVudDsKLSAgICAgICAgICAgICAgaWYgKG11dGF0aW9uRXZlbnQuZ2V0VGFyZ2V0KCkgaW5zdGFuY2VvZiBOb2RlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTm9kZSBub2RlID0gKE5vZGUpbXV0YXRpb25FdmVudC5nZXRUYXJnZXQoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uRXZlbnQuZ2V0QXR0ckNoYW5nZSgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgV1NETEVsZW1lbnRJbXBsIGxpc3RlbmVyID0gKFdTRExFbGVtZW50SW1wbClnZXRDb3JyZXNwb25kaW5nQ29tcG9uZW50KG5vZGUuZ2V0UGFyZW50Tm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0VHlwZSgpLmVxdWFscygiRE9NTm9kZVJlbW92ZWQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVsZXRpb25Ob2RlID0gKE5vZGUpZXZlbnQuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuZWxlbWVudENvbnRlbnRzQ2hhbmdlZCgoRWxlbWVudClub2RlLmdldFBhcmVudE5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0aW9uTm9kZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBXU0RMRWxlbWVudEltcGwgbGlzdGVuZXIgPSAoV1NETEVsZW1lbnRJbXBsKWdldENvcnJlc3BvbmRpbmdDb21wb25lbnQobm9kZSk7Ci0gICAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuZWxlbWVudEF0dHJpYnV0ZXNDaGFuZ2VkKChFbGVtZW50KW5vZGUpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci0gICAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7Ci0gIH0KLQotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0Q29ycmVzcG9uZGluZ0NvbXBvbmVudChOb2RlIG5vZGUpCi0gIHsKLSAgICAvLyBXZSBjb25zaWRlciBhbGwgcGFyZW50cyBzbyB0aGF0IHRoZXkgY2FuIGhhbmRsZSBvdGhlciBjb250YWluZWQgbm9kZXMgdGhhdCBvdGhlcndpc2UgZG9uJ3QgY29ycmVzcG9uZCB0byBhIGNvbXBvbmVudC4KLSAgICAvLwotICAgIExpc3QgcGFyZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlID0gKChBdHRyKW5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gU2tpcCBhaGVhZCB0byBhbiBlbGVtZW50LgotICAgICAgLy8KLSAgICAgIGZvciAoTm9kZSBzY2FuTm9kZSA9IG5vZGU7IHNjYW5Ob2RlICE9IG51bGw7IHNjYW5Ob2RlID0gc2Nhbk5vZGUuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNjYW5Ob2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICBub2RlID0gc2Nhbk5vZGU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gU2tpcCBiYWNrIHRvIGFuIGVsZW1lbnQuCi0gICAgICAvLwotICAgICAgZm9yIChOb2RlIHNjYW5Ob2RlID0gbm9kZTsgc2Nhbk5vZGUgIT0gbnVsbDsgc2Nhbk5vZGUgPSBzY2FuTm9kZS5nZXRQcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNjYW5Ob2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICBub2RlID0gc2Nhbk5vZGU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOYXZpZ2F0ZSBvdXQgdGhyb3VnaCB0aGUgZWxlbWVudHMuCi0gICAgLy8KLSAgICBmb3IgKE5vZGUgcGFyZW50ID0gbm9kZTsgcGFyZW50ICE9IG51bGw7IHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnROb2RlKCkpCi0gICAgewotICAgICAgaWYgKHBhcmVudC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgewotICAgICAgICBwYXJlbnRzLmFkZChwYXJlbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIFdTRExFbGVtZW50IGJlc3RXU0RMRWxlbWVudCA9IGdldEJlc3RXU0RMRWxlbWVudChwYXJlbnRzKTsKLSAgICByZXR1cm4gYmVzdFdTRExFbGVtZW50OwotICB9Ci0KLSAgLy8KLSAgLy8KLSAgLy8KLSAgcHJpdmF0ZSBib29sZWFuIHVzZUV4dGVuc2lvbkZhY3RvcmllcyA9IHRydWU7Ci0KLSAgcHVibGljIHZvaWQgc2V0VXNlRXh0ZW5zaW9uRmFjdG9yaWVzKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB1c2VFeHRlbnNpb25GYWN0b3JpZXMgPSB2YWx1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFVzZUV4dGVuc2lvbkZhY3RvcmllcygpCi0gIHsKLSAgICByZXR1cm4gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzOwotICB9Ci0KLSAgLy8gU2VlIEJ1ZyA1MzY2Ci0gIHB1YmxpYyB2b2lkIHJlbW92ZUFsbCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpc1JlY29uY2lsaW5nID0gdHJ1ZTsKLSAgICAgIGRvY3VtZW50ID0gbnVsbDsKLSAgICAgIGVsZW1lbnQgPSBudWxsOwotICAgICAgZ2V0RVNlcnZpY2VzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVCaW5kaW5ncygpLmNsZWFyKCk7Ci0gICAgICBnZXRFUG9ydFR5cGVzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVNZXNzYWdlcygpLmNsZWFyKCk7Ci0gICAgICBzZXRFVHlwZXMobnVsbCk7Ci0gICAgICBnZXRFSW1wb3J0cygpLmNsZWFyKCk7Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuY2xlYXIoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLQotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElubGluZVNjaGVtYUxvY2F0aW9ucyhSZXNvdXJjZSByZXNvdXJjZSkKLSAgewotICAgIC8vIEluaXRpYWxpemUgdGhlIGlubGluZSBzY2hlbWFzIGxvY2F0aW9uIAotICAgIFR5cGVzIHR5cGVzID0gdGhpcy5nZXRFVHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGlmICghKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gZWwuZ2V0U2NoZW1hKCk7Ci0gICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIG5lZWQgdGhpcyB0cnktY2F0Y2ggYmxvY2sgaW4gY2FzZSB3ZSBlbmNvdW50ZXIgYW4gZXhjZXB0aW9uIHdoaWxlIGF0dGVtcHRpbmcKLSAgICAgICAgICAvLyB0byByZXNvbHZlIHRoZSBzY2hlbWEuICBJbiB0aGUgY2FzZSBvZiB0aGUgV1NETCBFZGl0b3IsIHdlIGdldCBhCi0gICAgICAgICAgLy8gJ2Nhbm5vdCBjcmVhdGUgcGFydCBleGNlcHRpb24nLi4uLi4uU2VlIGVjbGlwc2UgYnVnemlsbGEgYnVnIDg5ODU1Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgc2NoZW1hLnNldFNjaGVtYUxvY2F0aW9uKHJlc291cmNlLmdldFVSSSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotICAvKiogCi0gICAqICBUaGlzIG1ldGhvZCB3aWxsIGNvbGxlY3QgdGhlIHNjaGVtYXMgbWF0Y2hpbmcgdGhlIG5hbWVzcGFjZQotICAgKiAgdGhhdCBhcmUgaW5saW5lZCBkaXJlY3RseSB3aXRoaW4gdGhpcyBkZWZpbml0aW9uLgotICAgKiAgCi0gICAqICBAcGFyYW0gbmFtZXNwYWNlIHRoZSBuYW1lc3BhY2UgdG8gbWF0Y2guCi0gICAqICBAcGFyYW0gbGlzdCBhbGwgaW5saW5lIHNjaGVtYXMgdGhhdCBtYXRjaCB0aGUgbmFtZXNwYWNlIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29sbGVjdElubGluZWRTY2hlbWFzKFN0cmluZyBuYW1lc3BhY2UsIExpc3QgbGlzdCkKLSAgewotICAgIFR5cGVzIHR5cGVzID0gZ2V0RVR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBzY2hlbWFzID0gdHlwZXMuZ2V0U2NoZW1hcygpOwotICAgICAgSXRlcmF0b3Igc2NoZW1hc0l0ZXJhdG9yID0gc2NoZW1hcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoc2NoZW1hc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpc2NoZW1hc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UobmFtZXNwYWNlLCB0YXJnZXROYW1lc3BhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoc2NoZW1hKTsKLSAgICAgICAgfQotCi0gICAgICAgIEVMaXN0IHNjaGVtYUNvbnRlbnRzID0gc2NoZW1hLmdldENvbnRlbnRzKCk7Ci0gICAgICAgIEl0ZXJhdG9yIHNjaGVtYUNvbnRlbnRzSXRlcmF0b3IgPSBzY2hlbWFDb250ZW50cy5pdGVyYXRvcigpOwotICAgICAgICAKLSAgICAgICAgd2hpbGUgKHNjaGVtYUNvbnRlbnRzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IGNvbXBvbmVudCA9IHNjaGVtYUNvbnRlbnRzSXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RJbXBvcnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNESW1wb3J0IHRoZUltcG9ydCA9IChYU0RJbXBvcnQpY29tcG9uZW50OwotICAgICAgICAgICAgU3RyaW5nIGltcG9ydE5hbWVzcGFjZSA9IHRoZUltcG9ydC5nZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UobmFtZXNwYWNlLCBpbXBvcnROYW1lc3BhY2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAoKFhTREltcG9ydEltcGwpdGhlSW1wb3J0KS5pbXBvcnRTY2hlbWEoKTsKLSAgICAgICAgICAgICAgWFNEU2NoZW1hIGltcG9ydGVkU2NoZW1hID0gdGhlSW1wb3J0LmdldFJlc29sdmVkU2NoZW1hKCk7Ci0gICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNjaGVtYSAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQoaW1wb3J0ZWRTY2hlbWEpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqIAotICAgKiAgVGhpcyBtZXRob2Qgd2lsbCBjb2xsZWN0IGFueSBzY2hlbWEgbWF0Y2hpbmcgdGhlIGdpdmVuIG5hbWVzcGFjZSB0aGF0IGFyZQotICAgKiAgaW1wb3J0ZWQgZGlyZWN0bHkgdmlhIGEgd3NkbCBpbXBvcnQgKGUuZy4gJmx0O3dzZGw6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJGb28ueHNkIi4uLikKLSAgICogIAotICAgKiAgQHBhcmFtIG5hbWVzcGFjZSB0aGUgbmFtZXNwYWNlIHRvIG1hdGNoCi0gICAqICBAcGFyYW0gbGlzdCBhbGwgaW1wb3J0ZWQgc2NoZW1hcyB0aGF0IG1hdGNoIHRoZSBuYW1lc3BhY2Ugd2lsbCBiZSBhZGRlZCB0byB0aGlzIGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0SW1wb3J0ZWRTY2hlbWFzKFN0cmluZyBuYW1lc3BhY2UsIExpc3QgbGlzdCkKLSAgewotICAgIEVMaXN0IGltcG9ydHMgPSBnZXRFSW1wb3J0cygpOwotICAgIEl0ZXJhdG9yIGltcG9ydHNJdGVyYXRvciA9IGltcG9ydHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaW1wb3J0c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydClpbXBvcnRzSXRlcmF0b3IubmV4dCgpOwotICAgICAgU3RyaW5nIGltcG9ydE5hbWVzcGFjZVVSSSA9IHRoZUltcG9ydC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIAotICAgICAgaWYgKFdTRExDb25zdGFudHMuaXNNYXRjaGluZ05hbWVzcGFjZShpbXBvcnROYW1lc3BhY2VVUkksIG5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgICgoSW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCAmJiBXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2Uoc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoc2NoZW1hKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKiAKLSAgICogIFRoaXMgbWV0aG9kIHdpbGwgdmlzaXQgYW55IGltcG9ydGVkIHdzZGwncyBhbmQgY29sbGVjdCBhbnkgY29udGFpbmVkIGlubGluZWQgc2NoZW1hcyB0aGF0IG1hdGNoCi0gICAqICB0aGUgZ2l2ZW4gbmFtZXNwYWNlLiAKLSAgICogIAotICAgKiAgQHBhcmFtIG5hbWVzcGFjZSB0aGUgbmFtZXNwYWNlIHRvIG1hdGNoCi0gICAqICBAcGFyYW0gbGlzdCBhbGwgaW5saW5lZCBzY2hlbWFzIG9mIGltcG9ydGVkIGRlZmluaXRpb25zIHRoYXQgbWF0Y2ggdGhlIG5hbWVzcGFjZSB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNvbGxlY3RJbmxpbmVkU2NoZW1hc09mSW1wb3J0ZWREZWZpbml0aW9ucyhTdHJpbmcgbmFtZXNwYWNlLCBMaXN0IGxpc3QpCi0gIHsKLSAgICBFTGlzdCBpbXBvcnRzID0gZ2V0RUltcG9ydHMoKTsKLSAgICBJdGVyYXRvciBpbXBvcnRzSXRlcmF0b3IgPSBpbXBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGltcG9ydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpaW1wb3J0c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIERlZmluaXRpb25JbXBsIGltcG9ydGVkRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uSW1wbCl0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLSAgICAgIGlmIChpbXBvcnRlZERlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW1wb3J0ZWREZWZpbml0aW9uLmNvbGxlY3RJbmxpbmVkU2NoZW1hcyhuYW1lc3BhY2UsIGxpc3QpOwotICAgICAgfQotICAgIH0KLSAgfSAgCi0KLSAgLyoqCi0gICAqIFByb3BhZ2F0ZXMgdGhlIGNoYW5nZSBpbiB0aGUgdGFyZ2V0IG5hbWVzcGFjZSB0byBhbGwgdGhlIHRvcCBsZXZlbCBuYW1lZCBjb21wb25lbnRzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhdGNoVGFyZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIEVMaXN0IG1lc3NhZ2VzID0gZ2V0RU1lc3NhZ2VzKCk7Ci0gICAgcGF0Y2hUYXJnZXROYW1lc3BhY2UobWVzc2FnZXMsIFdTRExDb25zdGFudHMuTUVTU0FHRSk7Ci0KLSAgICBFTGlzdCBwb3J0VHlwZXMgPSBnZXRFUG9ydFR5cGVzKCk7Ci0gICAgcGF0Y2hUYXJnZXROYW1lc3BhY2UocG9ydFR5cGVzLCBXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRSk7Ci0KLSAgICBFTGlzdCBiaW5kaW5ncyA9IGdldEVCaW5kaW5ncygpOwotICAgIHBhdGNoVGFyZ2V0TmFtZXNwYWNlKGJpbmRpbmdzLCBXU0RMQ29uc3RhbnRzLkJJTkRJTkcpOwotCi0gICAgRUxpc3Qgc2VydmljZXMgPSBnZXRFU2VydmljZXMoKTsKLSAgICBwYXRjaFRhcmdldE5hbWVzcGFjZShzZXJ2aWNlcywgV1NETENvbnN0YW50cy5TRVJWSUNFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJdGVyYXRlcyBvdmVyIHRoZSBXU0RMIGNvbXBvbmVudHMgaW4gdGhlIGxpc3QgYW5kIHVwZGF0ZXMgdGhlaXIgUU5hbWUuIFVzZXMKLSAgICogdGhlIGNvbXBvbmVudCB0eXBlIHRvIGRldGVybWluZSB3aGF0IHR5cGUgb2Ygb2JqZWN0IGlzIGluIHRoZSBsaXN0LgotICAgKiAKLSAgICogQHBhcmFtIGNvbXBvbmVudHNMaXN0IGEgbGlzdCB3aXRoIFdTRExFbGVtZW50czogbWVzc2FnZXMsIHBvcnQgdHlwZXMsIGJpbmRpbmdzIG9yIHBvcnQgdHlwZXMuCi0gICAqIEBwYXJhbSBjb21wb25lbnRUeXBlIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCB0eXBlIGFzIGRlZmluZWQgaW4ge0BsaW5rIFdTRExDb25zdGFudHN9Ci0gICAqLwotICBwcml2YXRlIHZvaWQgcGF0Y2hUYXJnZXROYW1lc3BhY2UoRUxpc3QgY29tcG9uZW50c0xpc3QsIGludCBjb21wb25lbnRUeXBlKQotICB7Ci0gICAgSXRlcmF0b3IgY29tcG9uZW50c0l0ZXJhdG9yID0gY29tcG9uZW50c0xpc3QuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoY29tcG9uZW50c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCljb21wb25lbnRzSXRlcmF0b3IubmV4dCgpOwotICAgICAgRGVmaW5pdGlvbiBlbmNsb3NpbmdEZWZpbml0aW9uID0gd3NkbEVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgaWYgKGVuY2xvc2luZ0RlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGVuY2xvc2luZ0RlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIAotICAgICAgICBRTmFtZSBjb21wb25lbnRRTmFtZSA9IGdldFFOYW1lRm9yV1NETEVsZW1lbnQoY29tcG9uZW50VHlwZSwgd3NkbEVsZW1lbnQpOwotCi0gICAgICAgIGlmIChjb21wb25lbnRRTmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGxvY2FsUGFydCA9IGNvbXBvbmVudFFOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICAgIFFOYW1lIG5ld0NvbXBvbmVudFFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgbG9jYWxQYXJ0KTsKLSAgICAgICAgICBzZXRRTmFtZUZvcldTRExFbGVtZW50KGNvbXBvbmVudFR5cGUsIHdzZGxFbGVtZW50LCBuZXdDb21wb25lbnRRTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVXBkYXRlcyB0aGUgUU5hbWUgZm9yIHRoZSBnaXZlbiBjb21wb25lbnQgYW5kIGNvbXBvbmVudCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZSB0aGUgY29tcG9uZW50IHR5cGUuIFNlZSB7QGxpbmsgV1NETENvbnN0YW50c30uCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCB0aGUgdGFyZ2V0IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHFOYW1lIHRoZSBuZXcgY29tcG9uZW50IHtAbGluayBRTmFtZX0uCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2V0UU5hbWVGb3JXU0RMRWxlbWVudChpbnQgdHlwZSwgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQsIFFOYW1lIHFOYW1lKQotICB7Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5NRVNTQUdFOgotICAgICAgICAoKE1lc3NhZ2Upd3NkbEVsZW1lbnQpLnNldFFOYW1lKHFOYW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuUE9SVF9UWVBFOgotICAgICAgICAoKFBvcnRUeXBlKXdzZGxFbGVtZW50KS5zZXRRTmFtZShxTmFtZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLkJJTkRJTkc6Ci0gICAgICAgICgoQmluZGluZyl3c2RsRWxlbWVudCkuc2V0UU5hbWUocU5hbWUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5TRVJWSUNFOgotICAgICAgICAoKFNlcnZpY2Upd3NkbEVsZW1lbnQpLnNldFFOYW1lKHFOYW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19IC8vRGVmaW5pdGlvbkltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE3M2ZmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEuYmVhbnMuQmVhbkluZm87Ci1pbXBvcnQgamF2YS5iZWFucy5JbnRyb3NwZWN0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuYmVhbnMuSW50cm9zcGVjdG9yOwotaW1wb3J0IGphdmEuYmVhbnMuUHJvcGVydHlEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsI2lzUmVxdWlyZWQgPGVtPlJlcXVpcmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCNnZXRFbGVtZW50VHlwZSA8ZW0+RWxlbWVudCBUeXBlPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGV4dGVuZHMgV1NETEVsZW1lbnRJbXBsIGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1JlcXVpcmVkKCkgPGVtPlJlcXVpcmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1JlcXVpcmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFJFUVVJUkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzUmVxdWlyZWQoKSA8ZW0+UmVxdWlyZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzUmVxdWlyZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiByZXF1aXJlZCA9IFJFUVVJUkVEX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWxlbWVudFR5cGUoKSA8ZW0+RWxlbWVudCBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbGVtZW50VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgRUxFTUVOVF9UWVBFX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWxlbWVudFR5cGUoKSA8ZW0+RWxlbWVudCBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbGVtZW50VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSBlbGVtZW50VHlwZSA9IEVMRU1FTlRfVFlQRV9FREVGQVVMVDsKLQotICBwcml2YXRlIEhhc2hNYXAgYmVhblByb3BlcnR5RGVzY3JpcHRvcnM7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5FWFRFTlNJQklMSVRZX0VMRU1FTlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUmVxdWlyZWQoKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVkOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZChib29sZWFuIG5ld1JlcXVpcmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRSZXF1aXJlZCA9IHJlcXVpcmVkOwotICAgIHJlcXVpcmVkID0gbmV3UmVxdWlyZWQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCwgb2xkUmVxdWlyZWQsIHJlcXVpcmVkKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShlQ2xhc3MoKS5nZXRFUGFja2FnZSgpLmdldE5zVVJJKCksIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0KLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnRUeXBlKFFOYW1lIG5ld0VsZW1lbnRUeXBlKQotICB7Ci0gICAgUU5hbWUgb2xkRWxlbWVudFR5cGUgPSBlbGVtZW50VHlwZTsKLSAgICBlbGVtZW50VHlwZSA9IG5ld0VsZW1lbnRUeXBlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFLCBvbGRFbGVtZW50VHlwZSwgZWxlbWVudFR5cGUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDoKLSAgICAgIHJldHVybiBpc1JlcXVpcmVkKCkgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRToKLSAgICAgIHJldHVybiBnZXRFbGVtZW50VHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ6Ci0gICAgICBzZXRSZXF1aXJlZCgoKEJvb2xlYW4pbmV3VmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU6Ci0gICAgICBzZXRFbGVtZW50VHlwZSgoUU5hbWUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDoKLSAgICAgIHNldFJlcXVpcmVkKFJFUVVJUkVEX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU6Ci0gICAgICBzZXRFbGVtZW50VHlwZShFTEVNRU5UX1RZUEVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ6Ci0gICAgICByZXR1cm4gcmVxdWlyZWQgIT0gUkVRVUlSRURfRURFRkFVTFQ7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOgotICAgICAgcmV0dXJuIEVMRU1FTlRfVFlQRV9FREVGQVVMVCA9PSBudWxsID8gZWxlbWVudFR5cGUgIT0gbnVsbCA6ICFFTEVNRU5UX1RZUEVfRURFRkFVTFQuZXF1YWxzKGVsZW1lbnRUeXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHJlcXVpcmVkOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocmVxdWlyZWQpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgZWxlbWVudFR5cGU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChlbGVtZW50VHlwZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRSZXF1aXJlZCgpCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRSZXF1aXJlZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oaXNSZXF1aXJlZCgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCNzZXRSZXF1aXJlZChCb29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWQoQm9vbGVhbiByZXF1aXJlZCkKLSAgewotICAgIHNldFJlcXVpcmVkKHJlcXVpcmVkLmJvb2xlYW5WYWx1ZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgYSBnaXZlbiBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBqYXZhLnV0aWwuTWFwIGdldFByb3BlcnR5RGVzY3JpcHRvcnMoamF2YS5sYW5nLkNsYXNzIGNsYXp6KQotICB7Ci0gICAgLy8gTG9va3VwIHByb3BlcnRpZXMgY2FjaGUKLSAgICBNYXAgcHJvcGVydGllcyA9IG51bGw7Ci0gICAgaWYgKGJlYW5Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpCi0gICAgICBiZWFuUHJvcGVydHlEZXNjcmlwdG9ycyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZWxzZQotICAgICAgcHJvcGVydGllcyA9IChNYXApYmVhblByb3BlcnR5RGVzY3JpcHRvcnMuZ2V0KGNsYXp6KTsKLQotICAgIGlmIChwcm9wZXJ0aWVzID09IG51bGwpCi0gICAgewotICAgICAgLy8gSW50cm9zcGVjdCB0aGUgYmVhbgotICAgICAgQXJyYXlMaXN0IGJpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBCZWFuSW5mbyBiaW5mbyA9IEludHJvc3BlY3Rvci5nZXRCZWFuSW5mbyhjbGF6eik7Ci0gICAgICAgIGlmIChiaW5mbyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgYmluZm9zLmFkZChiaW5mbyk7Ci0gICAgICAgICAgQmVhbkluZm9bXSBhYmluZm8gPSBiaW5mby5nZXRBZGRpdGlvbmFsQmVhbkluZm8oKTsKLSAgICAgICAgICBpZiAoYWJpbmZvICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgYiA9IDA7IGIgPCBhYmluZm8ubGVuZ3RoOyBiKyspCi0gICAgICAgICAgICAgIGJpbmZvcy5hZGQoYWJpbmZvW2JdKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChJbnRyb3NwZWN0aW9uRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIFRCRCAtIGhhbmRsZSBleGNlcHRpb24KLSAgICAgIH0KLQotICAgICAgcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGIgPSBiaW5mb3MuaXRlcmF0b3IoKTsgYi5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBCZWFuSW5mbyBiaW5mbyA9IChCZWFuSW5mbyliLm5leHQoKTsKLSAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yW10gcGRlc2MgPSBiaW5mby5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKCk7Ci0gICAgICAgIGlmIChwZGVzYyA9PSBudWxsKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKGludCBwID0gMDsgcCA8IHBkZXNjLmxlbmd0aDsgcCsrKQotICAgICAgICAgIHByb3BlcnRpZXMucHV0KHBkZXNjW3BdLmdldE5hbWUoKSwgcGRlc2NbcF0pOwotICAgICAgfQotICAgICAgYmVhblByb3BlcnR5RGVzY3JpcHRvcnMucHV0KGNsYXp6LCBwcm9wZXJ0aWVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCAmJiAhaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RWxlbWVudCgpOiBQcmVzZXJ2aW5nIG9sZCBlbGVtZW50Iik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRFbGVtZW50R2VuKGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHN1cGVyLnJlY29uY2lsZUF0dHJpYnV0ZXMoY2hhbmdlZEVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVJlY29uY2lsaWF0aW9uKHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IEVNRiAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIGRvY3VtZW50ID0gKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVEb2N1bWVudCgpOwotCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gbnVsbDsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKSAvLyBUaGlzIGlzIGFuIG9sZCBlbGVtZW50LgotICAgIHsKLSAgICAgIG5ld0VsZW1lbnQgPSAoRWxlbWVudClkb2N1bWVudC5pbXBvcnROb2RlKGVsZW1lbnQsIHRydWUpOwotICAgICAgZWxlbWVudCA9IG5ld0VsZW1lbnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIFN0cmluZyBxdWFsaWZpZXIgPSBkZWZpbml0aW9uLmdldFByZWZpeChuYW1lc3BhY2UpOwotICAgICAgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2UsIChxdWFsaWZpZXIgPT0gbnVsbCA/ICIiIDogcXVhbGlmaWVyICsgIjoiKSArIGdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgZWxlbWVudCA9IG5ld0VsZW1lbnQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmxlRWxlbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmxlRWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMyNjA0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRXh0ZW5zaWJsZUVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHRlbnNpYmxlIEVsZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJsZUVsZW1lbnRJbXBsI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGV4dGVuZHMgV1NETEVsZW1lbnRJbXBsIGltcGxlbWVudHMgRXh0ZW5zaWJsZUVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFeHRlbnNpYmxlRWxlbWVudEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkVYVEVOU0lCTEVfRUxFTUVOVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICB7Ci0gICAgaWYgKGVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KAotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywKLSAgICAgICAgdGhpcywKLSAgICAgICAgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyk7Ci0gICAgfQotICAgIHJldHVybiBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIHJldHVybiBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCkKLSAgewotICAgIGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZChleHRFbGVtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5jbGVhcigpOwotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIHJldHVybiBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzICE9IG51bGwgJiYgIWVFeHRlbnNpYmlsaXR5RWxlbWVudHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvLwotICAvLwotICAvLwotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgaWYgKCFXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCksIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IHVzZUV4dGVuc2lvbkZhY3RvcmllcygpCi0gICAgICAgID8gKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChnZXROYW1lc3BhY2UoY2hpbGQpLCBnZXRMb2NhbE5hbWUoY2hpbGQpKQotICAgICAgICA6ICgoV1NETEZhY3RvcnlJbXBsKVdTRExGYWN0b3J5LmVJTlNUQU5DRSkuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHVzZUV4dGVuc2lvbkZhY3RvcmllcygpCi0gIHsKLSAgICAvLyBVc2UgZXh0ZW5zaW9uIGZhY3RvcmllcyBieSBkZWZhdWx0LgotICAgIHJldHVybiBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkgPT0gbnVsbCA/IHRydWUgOiAoKERlZmluaXRpb25JbXBsKWdldEVuY2xvc2luZ0RlZmluaXRpb24oKSkuZ2V0VXNlRXh0ZW5zaW9uRmFjdG9yaWVzKCk7Ci0gIH0KLQotfSAvL0V4dGVuc2libGVFbGVtZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0ZhdWx0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0ZhdWx0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGY0ZTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9GYXVsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYXVsdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEZhdWx0SW1wbCBleHRlbmRzIE1lc3NhZ2VSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgRmF1bHQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRmF1bHRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5GQVVMVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk1lc3NhZ2UgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RU1lc3NhZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgc2V0RU1lc3NhZ2UoKG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UpbWVzc2FnZSk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5GQVVMVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL0ZhdWx0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0ltcG9ydEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9JbXBvcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMmU5ZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0ltcG9ydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETE1vZGVsTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkltcG9ydDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsI2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbCNnZXRFRGVmaW5pdGlvbiA8ZW0+RURlZmluaXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbCNnZXRFU2NoZW1hIDxlbT5FU2NoZW1hPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSW1wb3J0SW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEltcG9ydAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiByZXNvbHZlZDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWVzcGFjZVVSSSgpIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlVVJJID0gTkFNRVNQQUNFX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvblVSSSA9IExPQ0FUSU9OX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RURlZmluaXRpb24oKSA8ZW0+RURlZmluaXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVEZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZURlZmluaXRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFU2NoZW1hKCkgPGVtPkVTY2hlbWE8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVTY2hlbWEoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgWFNEU2NoZW1hIGVTY2hlbWEgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEltcG9ydEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLklNUE9SVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlVVJJKFN0cmluZyBuZXdOYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgIG5hbWVzcGFjZVVSSSA9IG5ld05hbWVzcGFjZVVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5JTVBPUlRfX05BTUVTUEFDRV9VUkksIG9sZE5hbWVzcGFjZVVSSSwgbmFtZXNwYWNlVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgbmV3TG9jYXRpb25VUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTG9jYXRpb25VUkkgPSBsb2NhdGlvblVSSTsKLSAgICBsb2NhdGlvblVSSSA9IG5ld0xvY2F0aW9uVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLklNUE9SVF9fTE9DQVRJT05fVVJJLCBvbGRMb2NhdGlvblVSSSwgbG9jYXRpb25VUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RURlZmluaXRpb24oKQotICB7Ci0gICAgaWYgKGVEZWZpbml0aW9uICE9IG51bGwgJiYgZURlZmluaXRpb24uZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRURlZmluaXRpb24gPSAoSW50ZXJuYWxFT2JqZWN0KWVEZWZpbml0aW9uOwotICAgICAgZURlZmluaXRpb24gPSAoRGVmaW5pdGlvbillUmVzb2x2ZVByb3h5KG9sZEVEZWZpbml0aW9uKTsKLSAgICAgIGlmIChlRGVmaW5pdGlvbiAhPSBvbGRFRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5JTVBPUlRfX0VERUZJTklUSU9OLCBvbGRFRGVmaW5pdGlvbiwgZURlZmluaXRpb24pKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVEZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBiYXNpY0dldEVEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBlRGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RURlZmluaXRpb24oRGVmaW5pdGlvbiBuZXdFRGVmaW5pdGlvbikKLSAgewotICAgIERlZmluaXRpb24gb2xkRURlZmluaXRpb24gPSBlRGVmaW5pdGlvbjsKLSAgICBlRGVmaW5pdGlvbiA9IG5ld0VEZWZpbml0aW9uOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLklNUE9SVF9fRURFRklOSVRJT04sIG9sZEVEZWZpbml0aW9uLCBlRGVmaW5pdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hIGdldEVTY2hlbWEoKQotICB7Ci0gICAgaWYgKGVTY2hlbWEgIT0gbnVsbCAmJiBlU2NoZW1hLmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVTY2hlbWEgPSAoSW50ZXJuYWxFT2JqZWN0KWVTY2hlbWE7Ci0gICAgICBlU2NoZW1hID0gKFhTRFNjaGVtYSllUmVzb2x2ZVByb3h5KG9sZEVTY2hlbWEpOwotICAgICAgaWYgKGVTY2hlbWEgIT0gb2xkRVNjaGVtYSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5JTVBPUlRfX0VTQ0hFTUEsIG9sZEVTY2hlbWEsIGVTY2hlbWEpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVTY2hlbWE7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWEgYmFzaWNHZXRFU2NoZW1hKCkKLSAgewotICAgIHJldHVybiBlU2NoZW1hOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFU2NoZW1hKFhTRFNjaGVtYSBuZXdFU2NoZW1hKQotICB7Ci0gICAgWFNEU2NoZW1hIG9sZEVTY2hlbWEgPSBlU2NoZW1hOwotICAgIGVTY2hlbWEgPSBuZXdFU2NoZW1hOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLklNUE9SVF9fRVNDSEVNQSwgb2xkRVNjaGVtYSwgZVNjaGVtYSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFhTRFNjaGVtYSBnZXRTY2hlbWEoKQotICB7Ci0gICAgcmV0dXJuIGdldEVTY2hlbWEoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKQotICB7Ci0gICAgc2V0RVNjaGVtYShzY2hlbWEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIGdldExvY2F0aW9uVVJJKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fRURFRklOSVRJT046Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVEZWZpbml0aW9uKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFRGVmaW5pdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0VTQ0hFTUE6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVTY2hlbWEoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVTY2hlbWEoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX05BTUVTUEFDRV9VUkk6Ci0gICAgICBzZXROYW1lc3BhY2VVUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fTE9DQVRJT05fVVJJOgotICAgICAgc2V0TG9jYXRpb25VUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fRURFRklOSVRJT046Ci0gICAgICBzZXRFRGVmaW5pdGlvbigoRGVmaW5pdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fRVNDSEVNQToKLSAgICAgIHNldEVTY2hlbWEoKFhTRFNjaGVtYSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX05BTUVTUEFDRV9VUkk6Ci0gICAgICBzZXROYW1lc3BhY2VVUkkoTkFNRVNQQUNFX1VSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fTE9DQVRJT05fVVJJOgotICAgICAgc2V0TG9jYXRpb25VUkkoTE9DQVRJT05fVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19FREVGSU5JVElPTjoKLSAgICAgIHNldEVEZWZpbml0aW9uKChEZWZpbml0aW9uKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0VTQ0hFTUE6Ci0gICAgICBzZXRFU2NoZW1hKChYU0RTY2hlbWEpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19OQU1FU1BBQ0VfVVJJOgotICAgICAgcmV0dXJuIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWVzcGFjZVVSSSAhPSBudWxsIDogIU5BTUVTUEFDRV9VUklfRURFRkFVTFQuZXF1YWxzKG5hbWVzcGFjZVVSSSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb25VUkkgIT0gbnVsbCA6ICFMT0NBVElPTl9VUklfRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uVVJJKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19FREVGSU5JVElPTjoKLSAgICAgIHJldHVybiBlRGVmaW5pdGlvbiAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0VTQ0hFTUE6Ci0gICAgICByZXR1cm4gZVNjaGVtYSAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZXNwYWNlVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZXNwYWNlVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGxvY2F0aW9uVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobG9jYXRpb25VUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJbXBvcnQjZ2V0RGVmaW5pdGlvbigpCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5EZWZpbml0aW9uIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEVEZWZpbml0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJbXBvcnQjc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihqYXZheC53c2RsLkRlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHNldEVEZWZpbml0aW9uKChvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKWRlZmluaXRpb24pOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TmFtZXNwYWNlVVJJKFdTRExDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUpKTsKLSAgICBzZXRMb2NhdGlvblVSSShXU0RMQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgV1NETENvbnN0YW50cy5MT0NBVElPTl9BVFRSSUJVVEUpKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGlzIGJvb2xlYW4gdG8gZmFsc2UgYmVjYXVzZSB0aGUgSW1wb3J0IG1heSBwb2ludCB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4KLSAgICAvLyBTbyB3ZSBuZWVkIHdlIHNob3VsZCB2aWV3IHRoaXMgaW1wb3J0IGFzIHVucmVzb2x2ZWQuCi0gICAgcmVzb2x2ZWQgPSBmYWxzZTsKLQotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5JTVBPUlRfX05BTUVTUEFDRV9VUkkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFLCBnZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5JTVBPUlRfX0xPQ0FUSU9OX1VSSSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLkxPQ0FUSU9OX0FUVFJJQlVURSwgZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuSU1QT1JUKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCkKLSAgewotICAgIHJlc29sdmUoZ2V0TmFtZXNwYWNlVVJJKCksIGdldExvY2F0aW9uVVJJKCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVzb2x2ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICBpZiAoIXJlc29sdmVkKQotICAgIHsKLSAgICAgIC8vIEtCOiBidWd6aWxsYSAxMTgyOTMKLSAgICAgIC8vIElmIGEgdXNlciBjaGFuZ2VzIDx3c2RsOmltcG9ydD4gZnJvbSBhIFdTREwgZmlsZSB0byBhbiBYTUwgU2NoZW1hIGZpbGUKLSAgICAgIC8vIG9yIHRoZSBvdGhlciB3YXkgYXJvdW5kLCB3ZSBzaG91bGQgc2V0IHRoZSB2YXJpYWJsZSBmb3IgdGhlIGZpcnN0Ci0gICAgICAvLyA8d3NkbDppbXBvcnQ+IHNvdXJjZSB0byBudWxsLiBIZXJlIEkgYW0gc2ltcGx5IHNldHRpbmcgYm90aCB2YXJpYWJsZXMgdG8gbnVsbCwKLSAgICAgIC8vIHdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QuCi0gICAgICBlRGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgICBlU2NoZW1hID0gbnVsbDsKLQotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCAmJiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFJlc291cmNlIHJlc291cmNlID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKTsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IHJlc291cmNlLmdldFJlc291cmNlU2V0KCk7Ci0gICAgICAgICAgaWYgKHJlc291cmNlU2V0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhdGlvbiA9IHJlc29sdmVMb2NhdGlvbihkZWZpbml0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkocmVzb2x2ZWRMb2NhdGlvbik7Ci0gICAgICAgICAgICBSZXNvdXJjZSByZXNvbHZlZFJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZWRSZXNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gcmVzb3VyY2VTZXQuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0odXJpKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlZFJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UodXJpKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlZFJlc291cmNlLmxvYWQoaW5wdXRTdHJlYW0sIHJlc291cmNlU2V0LmdldExvYWRPcHRpb25zKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJdCBpcyBnZW5lcmFsbHkgbm90IGFuIGVycm9yIHRvIGZhaWwgdG8gcmVzb2x2ZS4KLSAgICAgICAgICAgICAgICAvLyBJZiBhIHJlc291cmNlIGlzIGFjdHVhbGx5IGNyZWF0ZWQsIAotICAgICAgICAgICAgICAgIC8vIHdoaWNoIGhhcHBlbnMgb25seSB3aGVuIHdlIGNhbiBjcmVhdGUgYW4gaW5wdXQgc3RyZWFtLAotICAgICAgICAgICAgICAgIC8vIHRoZW4gaXQncyBhbiBlcnJvciBpZiBpdCdzIG5vdCBhIGdvb2Qgd3NkbCBvciBzY2hlbWEKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVzb2x2ZWRSZXNvdXJjZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlRGVmaW5pdGlvbiA9ICgoV1NETFJlc291cmNlSW1wbClyZXNvbHZlZFJlc291cmNlKS5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAocmVzb2x2ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIFhTRFJlc291cmNlSW1wbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVTY2hlbWEgPSAoKFhTRFJlc291cmNlSW1wbClyZXNvbHZlZFJlc291cmNlKS5nZXRTY2hlbWEoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlRGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIHJlc29sdmVMb2NhdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBzY2hlbWFMb2NhdGlvbikKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIFdTRExNb2RlbExvY2F0b3IgbG9jYXRvciA9IChXU0RMTW9kZWxMb2NhdG9yKUVjb3JlVXRpbC5nZXRSZWdpc3RlcmVkQWRhcHRlcihkZWZpbml0aW9uLmVSZXNvdXJjZSgpLCBXU0RMTW9kZWxMb2NhdG9yLmNsYXNzKTsKLSAgICBpZiAobG9jYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGxvY2F0b3IucmVzb2x2ZVVSSShkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBuYW1lc3BhY2UsIHNjaGVtYUxvY2F0aW9uKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFRPRE8uLi4gdGhlcmUncyBzb21lIGRlZmF1bHQgcmVzb2x2aW5nIHdlJ2xsIG5lZWQgdG8gZG8gaGVyZQotICAgICAgLy8gc2VlIFhTRFNjaGVtYURpcmVjdGl2ZQotICAgICAgVVJJIGJhc2VMb2NhdGlvblVSSSA9IGNyZWF0ZVVSSShkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAgIFVSSSBsb2NhdGlvblVSSSA9IFVSSS5jcmVhdGVVUkkoc2NoZW1hTG9jYXRpb24pOwotICAgICAgcmV0dXJuIGxvY2F0aW9uVVJJLnJlc29sdmUoYmFzZUxvY2F0aW9uVVJJKS50b1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy9UT0RPLi4uIHB1c2ggZG93biB0byBFTUYKLSAgcHJpdmF0ZSBzdGF0aWMgVVJJIGNyZWF0ZVVSSShTdHJpbmcgdXJpU3RyaW5nKQotICB7Ci0gICAgaWYgKGhhc1Byb3RvY29sKHVyaVN0cmluZykpCi0gICAgICByZXR1cm4gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBVUkkuY3JlYXRlRmlsZVVSSSh1cmlTdHJpbmcpOwotICB9Ci0KLSAgLy9UT0RPLi4uIHB1c2ggZG93biB0byBFTUYgIAotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGhhc1Byb3RvY29sKFN0cmluZyB1cmkpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmICh1cmkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSB1cmkuaW5kZXhPZigiOiIpOwotICAgICAgaWYgKGluZGV4ICE9IC0xICYmIGluZGV4ID4gMikgLy8gYXNzdW1lIHByb3RvY29sIHdpdGggYmUgbGVuZ3RoIDMgc28gdGhhdCB0aGUnQycgaW4gJ0M6LycgaXMgbm90IGludGVycHJldGVkIGFzIGEgcHJvdG9jb2wKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfSAvL0ltcG9ydEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9JbnB1dEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9JbnB1dEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYxMzJkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvSW5wdXRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5wdXQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBJbnB1dEltcGwgZXh0ZW5kcyBNZXNzYWdlUmVmZXJlbmNlSW1wbCBpbXBsZW1lbnRzIElucHV0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuSU5QVVQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5NZXNzYWdlIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIHNldEVNZXNzYWdlKChvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKW1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuSU5QVVQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9JbnB1dEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9NZXNzYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL01lc3NhZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczM2ZlOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL01lc3NhZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlSW1wbCNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlSW1wbCNnZXRFUGFydHMgPGVtPkVQYXJ0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgTWVzc2FnZQotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgcU5hbWUgPSBRTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVU5ERUZJTkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRlZmluZWQgPSBVTkRFRklORURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQYXJ0cygpIDxlbT5FUGFydHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVQYXJ0cyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRRTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFFOYW1lKFFOYW1lIG5ld1FOYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkUU5hbWUgPSBxTmFtZTsKLSAgICBxTmFtZSA9IG5ld1FOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk1FU1NBR0VfX1FOQU1FLCBvbGRRTmFtZSwgcU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gbmV3VW5kZWZpbmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRVbmRlZmluZWQgPSB1bmRlZmluZWQ7Ci0gICAgdW5kZWZpbmVkID0gbmV3VW5kZWZpbmVkOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk1FU1NBR0VfX1VOREVGSU5FRCwgb2xkVW5kZWZpbmVkLCB1bmRlZmluZWQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVQYXJ0cygpCi0gIHsKLSAgICBpZiAoZVBhcnRzID09IG51bGwpCi0gICAgewotICAgICAgZVBhcnRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFBhcnQuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLk1FU1NBR0VfX0VQQVJUUyk7Ci0gICAgfQotICAgIHJldHVybiBlUGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgcGFydCB0byB0aGlzIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJ0IHRoZSBwYXJ0IHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUGFydChqYXZheC53c2RsLlBhcnQgcGFydCkKLSAgewotICAgIGdldEVQYXJ0cygpLmFkZCgoUGFydClwYXJ0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBwYXJ0LgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBwYXJ0LgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBwYXJ0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuUGFydCBnZXRQYXJ0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgUGFydCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVQYXJ0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydClpLm5leHQoKTsKLSAgICAgIGlmIChuYW1lLmVxdWFscyhwYXJ0LmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIHBhcnRzIGRlZmluZWQgaGVyZS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTWFwIGdldFBhcnRzKCkKLSAgewotICAgIEhhc2hNYXAgaGFzaE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWkubmV4dCgpOwotICAgICAgaGFzaE1hcC5wdXQocGFydC5nZXROYW1lKCksIHBhcnQpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaE1hcDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldE9yZGVyZWRQYXJ0cyhMaXN0IHBhcnRPcmRlcikKLSAgewotICAgIExpc3Qgb3JkZXJlZFBhcnRzID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChwYXJ0T3JkZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcmRlcmVkUGFydHMuYWRkQWxsKGdldEVQYXJ0cygpKTsKLSAgICAgIHJldHVybiBvcmRlcmVkUGFydHM7Ci0gICAgfQotCi0gICAgSXRlcmF0b3IgcGFydE5hbWVJdGVyYXRvciA9IHBhcnRPcmRlci5pdGVyYXRvcigpOwotICAgIHdoaWxlIChwYXJ0TmFtZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcGFydE5hbWUgPSAoU3RyaW5nKXBhcnROYW1lSXRlcmF0b3IubmV4dCgpOwotICAgICAgamF2YXgud3NkbC5QYXJ0IHBhcnQgPSBnZXRQYXJ0KHBhcnROYW1lKTsKLSAgICAgIGlmIChwYXJ0ICE9IG51bGwpCi0gICAgICAgIG9yZGVyZWRQYXJ0cy5hZGQocGFydCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9yZGVyZWRQYXJ0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fRVBBUlRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFUGFydHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fRVBBUlRTOgotICAgICAgcmV0dXJuIGdldEVQYXJ0cygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKCgoQm9vbGVhbiluZXdWYWx1ZSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19FUEFSVFM6Ci0gICAgICBnZXRFUGFydHMoKS5jbGVhcigpOwotICAgICAgZ2V0RVBhcnRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoUU5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoVU5ERUZJTkVEX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fRVBBUlRTOgotICAgICAgZ2V0RVBhcnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19RTkFNRToKLSAgICAgIHJldHVybiBRTkFNRV9FREVGQVVMVCA9PSBudWxsID8gcU5hbWUgIT0gbnVsbCA6ICFRTkFNRV9FREVGQVVMVC5lcXVhbHMocU5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fRVBBUlRTOgotICAgICAgcmV0dXJuIGVQYXJ0cyAhPSBudWxsICYmICFlUGFydHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAocU5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChxTmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCB1bmRlZmluZWQ6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1bmRlZmluZWQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKTsKLSAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lID09IG51bGwgPyAiIiA6IG5hbWUpOyAvLyROT04tTkxTLTEkCi0gICAgc2V0UU5hbWUocW5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN3aXRjaCAoV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShjaGlsZCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlBBUlQ6Ci0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9ICgoV1NETFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoV1NETFBhY2thZ2UuZU5TX1VSSSkpLmdldFdTRExGYWN0b3J5KCkuY3JlYXRlUGFydCgpOwotICAgICAgICBwYXJ0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgcGFydC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgZ2V0RVBhcnRzKCkuYWRkKHBhcnQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB7Ci0gICAgICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSljb21wb25lbnQ7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgUGFydCkKLSAgICB7Ci0gICAgICBtZXNzYWdlLmdldEVQYXJ0cygpLnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgICAvLyAgICAgIG1lc3NhZ2UuZ2V0RVBhcnRzKCkuY2xlYXIoKTsKLSAgICB9Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuTUVTU0FHRV9fUU5BTUUpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuTUVTU0FHRSk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgUGFydCkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpb2JqOwotICAgICAgICBFbGVtZW50IGNoaWxkID0gKChQYXJ0SW1wbClwYXJ0KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL01lc3NhZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTWVzc2FnZVJlZmVyZW5jZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9NZXNzYWdlUmVmZXJlbmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjk4MDQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9NZXNzYWdlUmVmZXJlbmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlIFJlZmVyZW5jZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VSZWZlcmVuY2VJbXBsI2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE1lc3NhZ2VSZWZlcmVuY2VJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgTWVzc2FnZVJlZmVyZW5jZQotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTWVzc2FnZSgpIDxlbT5FTWVzc2FnZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZSBlTWVzc2FnZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZVJlZmVyZW5jZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0VfUkVGRVJFTkNFOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgZ2V0RU1lc3NhZ2UoKQotICB7Ci0gICAgaWYgKGVNZXNzYWdlICE9IG51bGwgJiYgZU1lc3NhZ2UuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRU1lc3NhZ2UgPSAoSW50ZXJuYWxFT2JqZWN0KWVNZXNzYWdlOwotICAgICAgZU1lc3NhZ2UgPSAoTWVzc2FnZSllUmVzb2x2ZVByb3h5KG9sZEVNZXNzYWdlKTsKLSAgICAgIGlmIChlTWVzc2FnZSAhPSBvbGRFTWVzc2FnZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UsIG9sZEVNZXNzYWdlLCBlTWVzc2FnZSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZU1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlIGJhc2ljR2V0RU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIG5ld0VNZXNzYWdlKQotICB7Ci0gICAgTWVzc2FnZSBvbGRFTWVzc2FnZSA9IGVNZXNzYWdlOwotICAgIGVNZXNzYWdlID0gbmV3RU1lc3NhZ2U7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFTWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFOgotICAgICAgc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U6Ci0gICAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRToKLSAgICAgIHJldHVybiBlTWVzc2FnZSAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGlhdGlvbiBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TmFtZShXU0RMQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0VfUkVGRVJFTkNFX19OQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGdldEVNZXNzYWdlKCk7Ci0gICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBRTmFtZSBxTmFtZSA9IG1lc3NhZ2UuZ2V0UU5hbWUoKTsKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlVVJJVmFsdWUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSwgcU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiIyIgKyBxTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSksIGVsZW1lbnQpOwotICAgICAgTWVzc2FnZSBuZXdNZXNzYWdlID0gbWVzc2FnZVFOYW1lICE9IG51bGwgPyAoTWVzc2FnZSlkZWZpbml0aW9uLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKSA6IG51bGw7Ci0gICAgICBpZiAobmV3TWVzc2FnZSAhPSBnZXRFTWVzc2FnZSgpKQotICAgICAgewotICAgICAgICBzZXRFTWVzc2FnZShuZXdNZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotfSAvL01lc3NhZ2VSZWZlcmVuY2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTmFtZXNwYWNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL05hbWVzcGFjZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNkMzMyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTmFtZXNwYWNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWVzcGFjZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5OYW1lc3BhY2VJbXBsI2dldFVSSSA8ZW0+VVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk5hbWVzcGFjZUltcGwjZ2V0UHJlZml4IDxlbT5QcmVmaXg8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBOYW1lc3BhY2VJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBOYW1lc3BhY2UKLXsKLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVUkkoKSA8ZW0+VVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVUkkoKSA8ZW0+VVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHVyaSA9IFVSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByZWZpeCgpIDxlbT5QcmVmaXg8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFByZWZpeCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWF9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByZWZpeCgpIDxlbT5QcmVmaXg8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFByZWZpeCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcHJlZml4ID0gUFJFRklYX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE5hbWVzcGFjZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLk5BTUVTUEFDRTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyBuZXdVUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkVVJJID0gdXJpOwotICAgIHVyaSA9IG5ld1VSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1VSSSwgb2xkVVJJLCB1cmkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcmVmaXgoKQotICB7Ci0gICAgcmV0dXJuIHByZWZpeDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlZml4KFN0cmluZyBuZXdQcmVmaXgpCi0gIHsKLSAgICBTdHJpbmcgb2xkUHJlZml4ID0gcHJlZml4OwotICAgIHByZWZpeCA9IG5ld1ByZWZpeDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1BSRUZJWCwgb2xkUHJlZml4LCBwcmVmaXgpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19VUkk6Ci0gICAgICByZXR1cm4gZ2V0VVJJKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fUFJFRklYOgotICAgICAgcmV0dXJuIGdldFByZWZpeCgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fVVJJOgotICAgICAgc2V0VVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1BSRUZJWDoKLSAgICAgIHNldFByZWZpeCgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fVVJJOgotICAgICAgc2V0VVJJKFVSSV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fUFJFRklYOgotICAgICAgc2V0UHJlZml4KFBSRUZJWF9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19VUkk6Ci0gICAgICByZXR1cm4gVVJJX0VERUZBVUxUID09IG51bGwgPyB1cmkgIT0gbnVsbCA6ICFVUklfRURFRkFVTFQuZXF1YWxzKHVyaSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fUFJFRklYOgotICAgICAgcmV0dXJuIFBSRUZJWF9FREVGQVVMVCA9PSBudWxsID8gcHJlZml4ICE9IG51bGwgOiAhUFJFRklYX0VERUZBVUxULmVxdWFscyhwcmVmaXgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAoVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodXJpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHByZWZpeDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHByZWZpeCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi19IC8vTmFtZXNwYWNlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL09wZXJhdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9PcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNjZkODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL09wZXJhdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwjZ2V0U3R5bGUgPGVtPlN0eWxlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCNnZXRFSW5wdXQgPGVtPkVJbnB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsI2dldEVPdXRwdXQgPGVtPkVPdXRwdXQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCNnZXRFRmF1bHRzIDxlbT5FRmF1bHRzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwjZ2V0RVBhcmFtZXRlck9yZGVyaW5nIDxlbT5FUGFyYW1ldGVyIE9yZGVyaW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgT3BlcmF0aW9uSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE9wZXJhdGlvbgotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0eWxlKCkgPGVtPlN0eWxlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRTdHlsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgT3BlcmF0aW9uVHlwZSBTVFlMRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0eWxlKCkgPGVtPlN0eWxlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRTdHlsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBPcGVyYXRpb25UeXBlIHN0eWxlID0gU1RZTEVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVU5ERUZJTkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRlZmluZWQgPSBVTkRFRklORURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVJbnB1dCgpIDxlbT5FSW5wdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVJbnB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBJbnB1dCBlSW5wdXQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFT3V0cHV0KCkgPGVtPkVPdXRwdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgT3V0cHV0IGVPdXRwdXQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRmF1bHRzKCkgPGVtPkVGYXVsdHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUZhdWx0cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlRmF1bHRzID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkgPGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVQYXJhbWV0ZXJPcmRlcmluZyA9IG51bGw7IC8vIGEgbGlzdCBvZiBwYXJ0cyAoRU1GKQotCi0gIHByaXZhdGUgTGlzdCBwYXJhbWV0ZXJPcmRlcmluZyA9IG51bGw7IC8vIGEgbGlzdCBvZiBwYXJ0IG5hbWVzIChXU0RMNEopCi0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgT3BlcmF0aW9uSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuT1BFUkFUSU9OOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE9wZXJhdGlvblR5cGUgZ2V0U3R5bGUoKQotICB7Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IGRlZHVjZU9wZXJhdGlvblR5cGUoZ2V0RWxlbWVudCgpKTsKLQotICAgIC8vIFRoZSB2YWx1ZSBvZiBzdHlsZSBpcyB1cGRhdGVkIHdoZW4KLSAgICAvLyAxKSB0aGUgV1NETCBpcyBsb2FkZWQgZm9yIHRoZSBmaXJzdCB0aW1lLAotICAgIC8vIDIpIHRoZSBzZXRTdHlsZSgpIG1ldGhvZCBpcyBjYWxsZWQsIGFuZAotICAgIC8vIDMpIHRoZSBjaGlsZHJlbiBvZiB0aGUgT3BlcmF0aW9uIChET00pIGVsZW1lbnQgYXJlIG1hbmlwdWxhdGVkLgotICAgIHJldHVybiBzdHlsZTsKLSAgfQotCi0gIHByaXZhdGUgT3BlcmF0aW9uVHlwZSBkZWR1Y2VPcGVyYXRpb25UeXBlKEVsZW1lbnQgb3BlcmF0aW9uKQotICB7Ci0gICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBpbnQgc3RhdGUgPSAwOwotICAgIGludCBtZXNzYWdlUmVmVHlwZSA9IC0xOwotICAgIE5vZGUgY2hpbGQgPSBudWxsOwotICAgIE5vZGVMaXN0IGNoaWxkcmVuID0gb3BlcmF0aW9uLmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBjaGlsZCA9IGNoaWxkcmVuLml0ZW0oaSk7Ci0gICAgICBpZiAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIFN0cmluZyBuc1VSSSA9IGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICBpZiAoIVdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhuc1VSSSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNraXAgb3ZlciBhbnkgbm9uLVdTREwgZWxlbWVudHMuIEZvciBleGFtcGxlLCB0byBzdXBwb3J0IG5ldyBXU0RMIAotICAgICAgICAvLyB1c2UgY2FzZXMgd2UgaGF2ZSB0byB0b2xlcmF0ZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGF0IHRoZSBvcGVyYXRpb24gbGV2ZWwuCi0KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIG1lc3NhZ2VSZWZUeXBlID0gV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZSgoRWxlbWVudCljaGlsZCk7Ci0KLSAgICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgMDogLy8gaW5pdGlhbCBzdGF0ZSAgICAgCi0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLklOUFVUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMTsKLSAgICAgICAgZWxzZSBpZiAoV1NETENvbnN0YW50cy5PVVRQVVQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAyOwotICAgICAgICBlbHNlIGlmIChXU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT04gPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUgPSAtMTsgLy8gY2Fubm90IGhhcHBlbgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6IC8vIG9uZS13YXkgb3IgcmVxdWVzdC1yZXNwb25zZQotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5GQVVMVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDExOyAvLyBvbmUtd2F5Ci0gICAgICAgIGVsc2UgaWYgKFdTRExDb25zdGFudHMuT1VUUFVUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMzsgLy8gcmVxdWVzdC1yZXNwb25zZQotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUgPSAtMTsgLy8gY2Fubm90IGhhcHBlbgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDExOiAvLyBvbmUtd2F5Ci0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLkZBVUxUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMTE7IC8vIG9uZS13YXkKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlID0gLTE7IC8vIGNhbm5vdCBoYXBwZW4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOiAvLyBzb2xpY2l0LXJlc3BvbnNlIG9yIG5vdGlmaWNhdGlvbgotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5JTlBVVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDQ7IC8vIHNvbGljaXQtcmVzcG9uc2UKLSAgICAgICAgZWxzZSBpZiAoV1NETENvbnN0YW50cy5GQVVMVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDIxOyAvLyBub3RpZmljYXRpb24KLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlID0gLTE7IC8vIGNhbm5vdCBoYXBwZW4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyMTogLy8gbm90aWZpY2F0aW9uCi0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLkZBVUxUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMjE7IC8vIG5vdGlmaWNhdGlvbgotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUgPSAtMTsgLy8gY2Fubm90IGhhcHBlbgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6IC8vIHJlcXVlc3QtcmVzcG9uc2UgCi0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLkZBVUxUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMzsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlID0gLTE7IC8vIGNhbm5vdCBoYXBwZW4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OiAvLyBzb2xpY2l0LXJlc3BvbnNlCi0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLkZBVUxUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gNDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlID0gLTE7IC8vIGNhbm5vdCBoYXBwZW4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogLy8gY2Fubm90IGhhcHBlbiAoLTEpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIE9wZXJhdGlvblR5cGUgb3BUeXBlID0gbnVsbDsKLSAgc3dpdGNoIChzdGF0ZSkKLSAgewotICAgIGNhc2UgMToKLSAgICBjYXNlIDExOgotICAgIG9wVHlwZSA9IE9wZXJhdGlvblR5cGUuT05FX1dBWTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICBjYXNlIDIxOgotICAgIG9wVHlwZSA9IE9wZXJhdGlvblR5cGUuTk9USUZJQ0FUSU9OOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgIG9wVHlwZSA9IE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICBvcFR5cGUgPSBPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0U7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAvLyBpbnZhbGlkCi0gICAgYnJlYWs7Ci19Ci1yZXR1cm4gb3BUeXBlOwotfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3R5bGUoT3BlcmF0aW9uVHlwZSBuZXdTdHlsZSkKLSAgewotICAgIE9wZXJhdGlvblR5cGUgb2xkU3R5bGUgPSBzdHlsZTsKLSAgICBzdHlsZSA9IG5ld1N0eWxlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fU1RZTEUsIG9sZFN0eWxlLCBzdHlsZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVW5kZWZpbmVkKCkKLSAgewotICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIG5ld1VuZGVmaW5lZCkKLSAgewotICAgIGJvb2xlYW4gb2xkVW5kZWZpbmVkID0gdW5kZWZpbmVkOwotICAgIHVuZGVmaW5lZCA9IG5ld1VuZGVmaW5lZDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1VOREVGSU5FRCwgb2xkVW5kZWZpbmVkLCB1bmRlZmluZWQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIElucHV0IGdldEVJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gZUlucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRFSW5wdXQoSW5wdXQgbmV3RUlucHV0LCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgSW5wdXQgb2xkRUlucHV0ID0gZUlucHV0OwotICAgIGVJbnB1dCA9IG5ld0VJbnB1dDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgewotICAgICAgRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVULCBvbGRFSW5wdXQsIG5ld0VJbnB1dCk7Ci0gICAgICBpZiAobXNncyA9PSBudWxsKQotICAgICAgICBtc2dzID0gbm90aWZpY2F0aW9uOwotICAgICAgZWxzZQotICAgICAgICBtc2dzLmFkZChub3RpZmljYXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbXNnczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RUlucHV0KElucHV0IG5ld0VJbnB1dCkKLSAgewotICAgIGlmIChuZXdFSW5wdXQgIT0gZUlucHV0KQotICAgIHsKLSAgICAgIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOwotICAgICAgaWYgKGVJbnB1dCAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZUlucHV0KS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQsIG51bGwsIG1zZ3MpOwotICAgICAgaWYgKG5ld0VJbnB1dCAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3RUlucHV0KS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQsIG51bGwsIG1zZ3MpOwotICAgICAgbXNncyA9IGJhc2ljU2V0RUlucHV0KG5ld0VJbnB1dCwgbXNncyk7Ci0gICAgICBpZiAobXNncyAhPSBudWxsKQotICAgICAgICBtc2dzLmRpc3BhdGNoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQsIG5ld0VJbnB1dCwgbmV3RUlucHV0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPdXRwdXQgZ2V0RU91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZU91dHB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0RU91dHB1dChPdXRwdXQgbmV3RU91dHB1dCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIE91dHB1dCBvbGRFT3V0cHV0ID0gZU91dHB1dDsKLSAgICBlT3V0cHV0ID0gbmV3RU91dHB1dDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgewotICAgICAgRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVCwgb2xkRU91dHB1dCwgbmV3RU91dHB1dCk7Ci0gICAgICBpZiAobXNncyA9PSBudWxsKQotICAgICAgICBtc2dzID0gbm90aWZpY2F0aW9uOwotICAgICAgZWxzZQotICAgICAgICBtc2dzLmFkZChub3RpZmljYXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbXNnczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU91dHB1dChPdXRwdXQgbmV3RU91dHB1dCkKLSAgewotICAgIGlmIChuZXdFT3V0cHV0ICE9IGVPdXRwdXQpCi0gICAgewotICAgICAgTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0gICAgICBpZiAoZU91dHB1dCAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZU91dHB1dCkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVCwgbnVsbCwgbXNncyk7Ci0gICAgICBpZiAobmV3RU91dHB1dCAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3RU91dHB1dCkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVCwgbnVsbCwgbXNncyk7Ci0gICAgICBtc2dzID0gYmFzaWNTZXRFT3V0cHV0KG5ld0VPdXRwdXQsIG1zZ3MpOwotICAgICAgaWYgKG1zZ3MgIT0gbnVsbCkKLSAgICAgICAgbXNncy5kaXNwYXRjaCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVCwgbmV3RU91dHB1dCwgbmV3RU91dHB1dCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RUZhdWx0cygpCi0gIHsKLSAgICBpZiAoZUZhdWx0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVGYXVsdHMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoRmF1bHQuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUZBVUxUUyk7Ci0gICAgfQotICAgIHJldHVybiBlRmF1bHRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkKLSAgewotICAgIGlmIChlUGFyYW1ldGVyT3JkZXJpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlUGFyYW1ldGVyT3JkZXJpbmcgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0KFBhcnQuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORyk7Ci0gICAgfQotICAgIHJldHVybiBlUGFyYW1ldGVyT3JkZXJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgZmF1bHQgbWVzc2FnZSB0aGF0IG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICogb3BlcmF0aW9uLgotICAgKiBAcGFyYW0gZmF1bHQgdGhlIG5ldyBmYXVsdCBtZXNzYWdlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRmF1bHQoamF2YXgud3NkbC5GYXVsdCBmYXVsdCkKLSAgewotICAgIGdldEVGYXVsdHMoKS5hZGQoKEZhdWx0KWZhdWx0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBmYXVsdCBtZXNzYWdlLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBmYXVsdCBtZXNzYWdlLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGZhdWx0IG1lc3NhZ2UsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBtZXNzYWdlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuRmF1bHQgZ2V0RmF1bHQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBGYXVsdCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVGYXVsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpaS5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMoZmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZmF1bHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIGZhdWx0IG1lc3NhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlvbi4KLSAgICogQHJldHVybiBuYW1lcyBvZiBmYXVsdCBtZXNzYWdlcwotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0RmF1bHRzKCkKLSAgewotICAgIEhhc2hNYXAgaGFzaE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdClpLm5leHQoKTsKLSAgICAgIGhhc2hNYXAucHV0KGZhdWx0LmdldE5hbWUoKSwgZmF1bHQpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaE1hcDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBQYXJ0IG5hbWVzLiBOb3RlIHRoYXQgCi0gICAqIGdldFBhcmFtZXRlckVPcmRlcmluZygpIHJldHVybnMgYSBjb2xsZWN0aW9uIG9mIFBhcnRzLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFBhcmFtZXRlck9yZGVyaW5nKCkKLSAgewotICAgIHBhcmFtZXRlck9yZGVyaW5nID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVQYXJhbWV0ZXJPcmRlcmluZygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaS5uZXh0KCk7Ci0gICAgICAgIHBhcmFtZXRlck9yZGVyaW5nLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIFRCRCAtIGhhbmRsZSBleGNlcHRpb24KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtZXRlck9yZGVyaW5nLmlzRW1wdHkoKSA/IG51bGwgOiBwYXJhbWV0ZXJPcmRlcmluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlck9yZGVyaW5nKExpc3QgcGFyYW1ldGVyT3JkZXIpCi0gIHsKLSAgICBwYXJhbWV0ZXJPcmRlcmluZyA9IHBhcmFtZXRlck9yZGVyOwotICAgIGdldEVQYXJhbWV0ZXJPcmRlcmluZygpLmNsZWFyKCk7Ci0gICAgaWYgKHBhcmFtZXRlck9yZGVyICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpID0gcGFyYW1ldGVyT3JkZXIuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICAvLyBLQjogV2Ugc2hvdWxkIGJlIHJlc29sdmluZyBwYXJ0cyBiYXNlZCBvbiB0aGUgcGFydCBuYW1lcyBpbiBwYXJhbWV0ZXJPcmRlci4KLSAgICAgICAgUGFydCBwYXJ0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhcnQoKTsKLSAgICAgICAgcGFydC5zZXROYW1lKChTdHJpbmcpaS5uZXh0KCkpOwotICAgICAgICBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKS5hZGQocGFydCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuSW5wdXQgZ2V0SW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGdldEVJbnB1dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5wdXQoamF2YXgud3NkbC5JbnB1dCBpbnB1dCkKLSAgewotICAgIHNldEVJbnB1dCgoSW5wdXQpaW5wdXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuT3V0cHV0IGdldE91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RU91dHB1dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0T3V0cHV0KGphdmF4LndzZGwuT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHNldEVPdXRwdXQoKE91dHB1dClvdXRwdXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVDoKLSAgICAgIHJldHVybiBiYXNpY1NldEVJbnB1dChudWxsLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVUOgotICAgICAgcmV0dXJuIGJhc2ljU2V0RU91dHB1dChudWxsLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FRkFVTFRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFRmF1bHRzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1NUWUxFOgotICAgICAgcmV0dXJuIGdldFN0eWxlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fTkFNRToKLSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fVU5ERUZJTkVEOgotICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKCkgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVDoKLSAgICAgIHJldHVybiBnZXRFSW5wdXQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVUOgotICAgICAgcmV0dXJuIGdldEVPdXRwdXQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FRkFVTFRTOgotICAgICAgcmV0dXJuIGdldEVGYXVsdHMoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HOgotICAgICAgcmV0dXJuIGdldEVQYXJhbWV0ZXJPcmRlcmluZygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fU1RZTEU6Ci0gICAgICBzZXRTdHlsZSgoT3BlcmF0aW9uVHlwZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKCgoQm9vbGVhbiluZXdWYWx1ZSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVDoKLSAgICAgIHNldEVJbnB1dCgoSW5wdXQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQ6Ci0gICAgICBzZXRFT3V0cHV0KChPdXRwdXQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VGQVVMVFM6Ci0gICAgICBnZXRFRmF1bHRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVGYXVsdHMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkc6Ci0gICAgICBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKS5jbGVhcigpOwotICAgICAgZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fU1RZTEU6Ci0gICAgICBzZXRTdHlsZShTVFlMRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fTkFNRToKLSAgICAgIHNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKFVOREVGSU5FRF9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVUOgotICAgICAgc2V0RUlucHV0KChJbnB1dCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVUOgotICAgICAgc2V0RU91dHB1dCgoT3V0cHV0KW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VGQVVMVFM6Ci0gICAgICBnZXRFRmF1bHRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HOgotICAgICAgZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX1NUWUxFOgotICAgICAgcmV0dXJuIFNUWUxFX0VERUZBVUxUID09IG51bGwgPyBzdHlsZSAhPSBudWxsIDogIVNUWUxFX0VERUZBVUxULmVxdWFscyhzdHlsZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fVU5ERUZJTkVEOgotICAgICAgcmV0dXJuIHVuZGVmaW5lZCAhPSBVTkRFRklORURfRURFRkFVTFQ7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVUOgotICAgICAgcmV0dXJuIGVJbnB1dCAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQ6Ci0gICAgICByZXR1cm4gZU91dHB1dCAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VGQVVMVFM6Ci0gICAgICByZXR1cm4gZUZhdWx0cyAhPSBudWxsICYmICFlRmF1bHRzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HOgotICAgICAgcmV0dXJuIGVQYXJhbWV0ZXJPcmRlcmluZyAhPSBudWxsICYmICFlUGFyYW1ldGVyT3JkZXJpbmcuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAoc3R5bGU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChzdHlsZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBuYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCB1bmRlZmluZWQ6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1bmRlZmluZWQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLyAKLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBpZiAoY2hhbmdlZEVsZW1lbnQuaGFzQXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0TmFtZShuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlZEVsZW1lbnQuaGFzQXR0cmlidXRlKFdTRExDb25zdGFudHMuUEFSQU1FVEVSX09SREVSX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgU3RyaW5nIHBhcmFtZXRlck9yZGVyID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuUEFSQU1FVEVSX09SREVSX0FUVFJJQlVURSk7Ci0gICAgICBpZiAocGFyYW1ldGVyT3JkZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nW10gYXJyYXkgPSBwYXJhbWV0ZXJPcmRlci5zcGxpdCgiICIpOwotICAgICAgICBMaXN0IGwgPSBBcnJheXMuYXNMaXN0KGFycmF5KTsKLSAgICAgICAgc2V0UGFyYW1ldGVyT3JkZXJpbmcobCk7Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBlbGVtZW50Q2hhbmdlZChFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc3R5bGUgPSBkZWR1Y2VPcGVyYXRpb25UeXBlKGNoYW5nZWRFbGVtZW50KTsKLSAgICBzdXBlci5lbGVtZW50Q2hhbmdlZChjaGFuZ2VkRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCi0gICAgc3dpdGNoIChXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKGNoaWxkKSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuSU5QVVQ6Ci0gICAgICB7Ci0gICAgICAgIElucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgICAgIGlucHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIGlucHV0LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBzZXRJbnB1dChpbnB1dCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLk9VVFBVVDoKLSAgICAgIHsKLSAgICAgICAgT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICAgICAgb3V0cHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIG91dHB1dC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgc2V0T3V0cHV0KG91dHB1dCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLkZBVUxUOgotICAgICAgewotICAgICAgICBGYXVsdCBmYXVsdCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYXVsdCgpOwotICAgICAgICBmYXVsdC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBmYXVsdC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgYWRkRmF1bHQoZmF1bHQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB7Ci0gICAgICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbiljb21wb25lbnQ7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgSW5wdXQpCi0gICAgewotICAgICAgb3BlcmF0aW9uLnNldEVJbnB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgewotICAgICAgb3BlcmF0aW9uLnNldEVPdXRwdXQobnVsbCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgRmF1bHQpCi0gICAgewotICAgICAgb3BlcmF0aW9uLmdldEVGYXVsdHMoKS5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pY29tcG9uZW50OwotCi0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgaWYgKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QuYWRkKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSk7Ci0gICAgfQotCi0gICAgaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsKLSAgICB9Ci0KLSAgICBsaXN0LmFkZEFsbChvcGVyYXRpb24uZ2V0RUZhdWx0cygpKTsKLQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLk9QRVJBVElPTl9fTkFNRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXROYW1lKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuT1BFUkFUSU9OX19TVFlMRSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uVHlwZSB0YXJnZXRUeXBlID0gZ2V0U3R5bGUoKTsKLSAgICAgICAgT3BlcmF0aW9uVHlwZSBjdXJyZW50VHlwZSA9IGRlZHVjZU9wZXJhdGlvblR5cGUodGhlRWxlbWVudCk7Ci0gICAgICAgIGlmICh0YXJnZXRUeXBlLmVxdWFscyhjdXJyZW50VHlwZSkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbHNlIGlmICgodGFyZ2V0VHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSB8fCB0YXJnZXRUeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UpKQotICAgICAgICAgICYmIChjdXJyZW50VHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSB8fCBjdXJyZW50VHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKSkpCi0gICAgICAgICAgcmVvcmRlckNoaWxkcmVuKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdHlsZSA9IGRlZHVjZU9wZXJhdGlvblR5cGUodGhlRWxlbWVudCk7IC8vIHN3aXRjaCBiYWNrLiBubyBzdXBwb3J0IGZvciB0aGUgb3RoZXIgdHlwZXMKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VSZWZlcmVuY2UoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VSZWZlcmVuY2UoZVJlZmVyZW5jZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBlUmVmZXJlbmNlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORykKLSAgICAgIHsKLSAgICAgICAgLy8gQnVpbGQgdXAgYSBzdHJpbmcgb2YgY29uY2F0ZW5hdGVkIHBhcnQgbmFtZXMgKHBhcmFtZXRlck9yZGVyKSBmcm9tIGVQYXJhbWV0ZXJPcmRlcmluZy4KLQotICAgICAgICBJdGVyYXRvciBwYXJ0cyA9IGdldEVQYXJhbWV0ZXJPcmRlcmluZygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIFBhcnQgcGFydCA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBwYXJ0TmFtZXMgPSAiIjsKLSAgICAgICAgd2hpbGUgKHBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIHBhcnQgPSAoUGFydClwYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAgcGFydE5hbWVzID0gcGFydE5hbWVzICsgcGFydC5nZXROYW1lKCkgKyAiICI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHBhcnROYW1lcyA9IHBhcnROYW1lcy50cmltKCkpLmxlbmd0aCgpICE9IDApCi0gICAgICAgICAgLy8gVXBkYXRlIHRoZSBlbGVtZW50J3MgYXR0cnVidXRlCi0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLlBBUkFNRVRFUl9PUkRFUl9BVFRSSUJVVEUsIHBhcnROYW1lcyk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vCi0gIH0KLQotICAvLyBTd2l0Y2ggPGlucHV0PiBhbmQgPG91dHB1dD4KLSAgcHJpdmF0ZSB2b2lkIHJlb3JkZXJDaGlsZHJlbigpCi0gIHsKLSAgICAvLyBGaW5kIG91dCB0aGUgcG9zaXRpb25zIG9mIDxpbnB1dD4gYW5kIDxvdXRwdXQ+Ci0gICAgTm9kZSBpbnB1dCA9IG51bGw7Ci0gICAgTm9kZSBvdXRwdXQgPSBudWxsOwotICAgIE5vZGUgcmVmZXJlbmNlID0gbnVsbDsKLSAgICBmb3IgKE5vZGUgY3VycmVudCA9IGdldEVsZW1lbnQoKS5nZXRGaXJzdENoaWxkKCk7IGN1cnJlbnQgIT0gbnVsbDsgY3VycmVudCA9IGN1cnJlbnQuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICB7Ci0gICAgICBpZiAoY3VycmVudC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgewotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5JTlBVVCA9PSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KWN1cnJlbnQpKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXQgPSBjdXJyZW50OwotICAgICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjcy4uIGZvciBzYWZldHkgdXNlIGN1cnJlbnQuZ2V0TmV4dFNpYmxpbmcoKSBpbnN0ZWFkIG9mIG5vZGVMaXN0Lml0ZW0oaSsxKSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVmZXJlbmNlID0gY3VycmVudC5nZXROZXh0U2libGluZygpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChXU0RMQ29uc3RhbnRzLk9VVFBVVCA9PSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KWN1cnJlbnQpKQotICAgICAgICB7Ci0gICAgICAgICAgb3V0cHV0ID0gY3VycmVudDsKLSAgICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjcy4uIGZvciBzYWZldHkgdXNlIGN1cnJlbnQuZ2V0TmV4dFNpYmxpbmcoKSBpbnN0ZWFkIG9mIG5vZGVMaXN0Lml0ZW0oaSsxKSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVmZXJlbmNlID0gY3VycmVudC5nZXROZXh0U2libGluZygpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gLy8gZW5kIGZvcgotCi0gICAgaWYgKGlucHV0ICE9IG51bGwgJiYgb3V0cHV0ICE9IG51bGwpCi0gICAgewotICAgICAgRWxlbWVudCBwYXJlbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgICBpZiAoZ2V0U3R5bGUoKS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gY3VycmVudCBvcmRlcjogPG91dHB1dD4gPGlucHV0PgotICAgICAgICBzd2l0Y2hDaGlsZHJlbihwYXJlbnQsIG91dHB1dCwgaW5wdXQsIHJlZmVyZW5jZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZXRTdHlsZSgpLmVxdWFscyhPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UpKQotICAgICAgewotICAgICAgICAvLyBjdXJyZW50IG9yZGVyOiA8aW5wdXQ+IDxvdXRwdXQ+Ci0gICAgICAgIHN3aXRjaENoaWxkcmVuKHBhcmVudCwgaW5wdXQsIG91dHB1dCwgcmVmZXJlbmNlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3dpdGNoQ2hpbGRyZW4oTm9kZSBwYXJlbnQsIE5vZGUgY2hpbGQxLCBOb2RlIGNoaWxkMiwgTm9kZSBuZXh0T2ZDaGlsZDIpCi0gIHsKLSAgICAvLyBjdXJyZW50IG5vZGUgc2VxdWVuY2U6IDxjaGlsZDE+IDxjaGlsZDI+IDxuZXh0T2ZDaGlsZDI+Ci0gICAgbmljZVJlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGQyKTsKLSAgICBuaWNlSW5zZXJ0QmVmb3JlKHBhcmVudCwgY2hpbGQyLCBjaGlsZDEpOwotICAgIG5pY2VSZW1vdmVDaGlsZChwYXJlbnQsIGNoaWxkMSk7Ci0gICAgbmljZUluc2VydEJlZm9yZShwYXJlbnQsIGNoaWxkMSwgbmV4dE9mQ2hpbGQyKTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLk9QRVJBVElPTik7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLQotICAgIElucHV0IGlucHV0ID0gZ2V0RUlucHV0KCk7Ci0gICAgaWYgKGlucHV0ICE9IG51bGwpCi0gICAgewotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoSW5wdXRJbXBsKWlucHV0KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICBPdXRwdXQgb3V0cHV0ID0gZ2V0RU91dHB1dCgpOwotICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChPdXRwdXRJbXBsKW91dHB1dCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEZhdWx0SW1wbClmYXVsdCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotfSAvL09wZXJhdGlvbkltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9PdXRwdXRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3V0cHV0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGFjODE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9PdXRwdXRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk91dHB1dDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE91dHB1dEltcGwgZXh0ZW5kcyBNZXNzYWdlUmVmZXJlbmNlSW1wbCBpbXBsZW1lbnRzIE91dHB1dAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBPdXRwdXRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5PVVRQVVQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5NZXNzYWdlIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIHNldEVNZXNzYWdlKChvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlKW1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuT1VUUFVUKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci19IC8vT3V0cHV0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BhcnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUGFydEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFhNDFhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUGFydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOyAvLyBpbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBhcnRJbXBsI2dldEVsZW1lbnROYW1lIDxlbT5FbGVtZW50IE5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwjZ2V0VHlwZU5hbWUgPGVtPlR5cGUgTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCNnZXRUeXBlRGVmaW5pdGlvbiA8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBhcnRJbXBsI2dldEVsZW1lbnREZWNsYXJhdGlvbiA8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXJ0SW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFBhcnQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVsZW1lbnROYW1lKCkgPGVtPkVsZW1lbnQgTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RWxlbWVudE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFFOYW1lIEVMRU1FTlRfTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVsZW1lbnROYW1lKCkgPGVtPkVsZW1lbnQgTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RWxlbWVudE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgZWxlbWVudE5hbWUgPSBFTEVNRU5UX05BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlTmFtZSgpIDxlbT5UeXBlIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFR5cGVOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBRTmFtZSBUWVBFX05BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlTmFtZSgpIDxlbT5UeXBlIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFR5cGVOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIHR5cGVOYW1lID0gVFlQRV9OQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlRGVmaW5pdGlvbigpIDxlbT5UeXBlIERlZmluaXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFR5cGVEZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWZpbml0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnREZWNsYXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2xhcmF0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RU1lc3NhZ2UoKSA8ZW0+RU1lc3NhZ2U8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2UgZU1lc3NhZ2UgPSBudWxsOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9QQVJUX0VYVEVOU0lPTlMgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9wYXJ0LWV4dGVuc2lvbnMvIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0KLSAgcHJpdmF0ZSBNYXAgZXh0ZW5zaW9uQXR0cmlidXRlcyA9IG5ldyBFeHRlbnNpb25BdHRyaWJ1dGVNYXAoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBQYXJ0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuUEFSVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBBUlRfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnROYW1lKCkKLSAgewotICAgIHJldHVybiBlbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudE5hbWUoUU5hbWUgbmV3RWxlbWVudE5hbWUpCi0gIHsKLSAgICBRTmFtZSBvbGRFbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lOwotICAgIGVsZW1lbnROYW1lID0gbmV3RWxlbWVudE5hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9OQU1FLCBvbGRFbGVtZW50TmFtZSwgZWxlbWVudE5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFR5cGVOYW1lKCkKLSAgewotICAgIHJldHVybiB0eXBlTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZU5hbWUoUU5hbWUgbmV3VHlwZU5hbWUpCi0gIHsKLSAgICBRTmFtZSBvbGRUeXBlTmFtZSA9IHR5cGVOYW1lOwotICAgIHR5cGVOYW1lID0gbmV3VHlwZU5hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9OQU1FLCBvbGRUeXBlTmFtZSwgdHlwZU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkKLSAgewotICAgIGlmICh0eXBlRGVmaW5pdGlvbiAhPSBudWxsICYmIHR5cGVEZWZpbml0aW9uLmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZFR5cGVEZWZpbml0aW9uID0gKEludGVybmFsRU9iamVjdCl0eXBlRGVmaW5pdGlvbjsKLSAgICAgIHR5cGVEZWZpbml0aW9uID0gKFhTRFR5cGVEZWZpbml0aW9uKWVSZXNvbHZlUHJveHkob2xkVHlwZURlZmluaXRpb24pOwotICAgICAgaWYgKHR5cGVEZWZpbml0aW9uICE9IG9sZFR5cGVEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfREVGSU5JVElPTiwgb2xkVHlwZURlZmluaXRpb24sIHR5cGVEZWZpbml0aW9uKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0eXBlRGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIGJhc2ljR2V0VHlwZURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHR5cGVEZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiBuZXdUeXBlRGVmaW5pdGlvbikKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIG9sZFR5cGVEZWZpbml0aW9uID0gdHlwZURlZmluaXRpb247Ci0gICAgdHlwZURlZmluaXRpb24gPSBuZXdUeXBlRGVmaW5pdGlvbjsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5QQVJUX19UWVBFX0RFRklOSVRJT04sIG9sZFR5cGVEZWZpbml0aW9uLCB0eXBlRGVmaW5pdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldEVsZW1lbnREZWNsYXJhdGlvbigpCi0gIHsKLSAgICBpZiAoZWxlbWVudERlY2xhcmF0aW9uICE9IG51bGwgJiYgZWxlbWVudERlY2xhcmF0aW9uLmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVsZW1lbnREZWNsYXJhdGlvbiA9IChJbnRlcm5hbEVPYmplY3QpZWxlbWVudERlY2xhcmF0aW9uOwotICAgICAgZWxlbWVudERlY2xhcmF0aW9uID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbillUmVzb2x2ZVByb3h5KG9sZEVsZW1lbnREZWNsYXJhdGlvbik7Ci0gICAgICBpZiAoZWxlbWVudERlY2xhcmF0aW9uICE9IG9sZEVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5SRVNPTFZFLAotICAgICAgICAgICAgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTiwKLSAgICAgICAgICAgIG9sZEVsZW1lbnREZWNsYXJhdGlvbiwKLSAgICAgICAgICAgIGVsZW1lbnREZWNsYXJhdGlvbikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZWxlbWVudERlY2xhcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGJhc2ljR2V0RWxlbWVudERlY2xhcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBlbGVtZW50RGVjbGFyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gbmV3RWxlbWVudERlY2xhcmF0aW9uKQotICB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIG9sZEVsZW1lbnREZWNsYXJhdGlvbiA9IGVsZW1lbnREZWNsYXJhdGlvbjsKLSAgICBlbGVtZW50RGVjbGFyYXRpb24gPSBuZXdFbGVtZW50RGVjbGFyYXRpb247Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwoCi0gICAgICAgIHRoaXMsCi0gICAgICAgIE5vdGlmaWNhdGlvbi5TRVQsCi0gICAgICAgIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04sCi0gICAgICAgIG9sZEVsZW1lbnREZWNsYXJhdGlvbiwKLSAgICAgICAgZWxlbWVudERlY2xhcmF0aW9uKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlIGdldEVNZXNzYWdlKCkKLSAgewotICAgIGlmIChlTWVzc2FnZSAhPSBudWxsICYmIGVNZXNzYWdlLmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVNZXNzYWdlID0gKEludGVybmFsRU9iamVjdCllTWVzc2FnZTsKLSAgICAgIGVNZXNzYWdlID0gKE1lc3NhZ2UpZVJlc29sdmVQcm94eShvbGRFTWVzc2FnZSk7Ci0gICAgICBpZiAoZU1lc3NhZ2UgIT0gb2xkRU1lc3NhZ2UpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV1NETFBhY2thZ2UuUEFSVF9fRU1FU1NBR0UsIG9sZEVNZXNzYWdlLCBlTWVzc2FnZSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZU1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlIGJhc2ljR2V0RU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIG5ld0VNZXNzYWdlKQotICB7Ci0gICAgTWVzc2FnZSBvbGRFTWVzc2FnZSA9IGVNZXNzYWdlOwotICAgIGVNZXNzYWdlID0gbmV3RU1lc3NhZ2U7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUEFSVF9fRU1FU1NBR0UsIG9sZEVNZXNzYWdlLCBlTWVzc2FnZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXh0ZW5zaW9uQXR0cmlidXRlKFFOYW1lIG5hbWUsIFFOYW1lIHZhbHVlKQotICB7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IG5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgaWYgKGxvY2FsTmFtZSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHZhbHVlID09IG51bGwpCi0gICAgICBleHRlbnNpb25BdHRyaWJ1dGVzLnJlbW92ZShuYW1lKTsKLSAgICBlbHNlCi0gICAgICBleHRlbnNpb25BdHRyaWJ1dGVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgSXRlcmF0b3IgZ2V0RXh0ZW5zaW9uQXR0cmlidXRlTmFtZXMoKQotICB7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKGV4dGVuc2lvbkF0dHJpYnV0ZXMpOwotCi0gICAgLy8gQWRqdXN0IG1lc3NhZ2VOYW1lIGF0dHJpYnV0ZQotICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gZ2V0TWVzc2FnZSgpICE9IG51bGwgPyBnZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSA6IG51bGw7Ci0gICAgaWYgKG1lc3NhZ2VOYW1lICE9IG51bGwpCi0gICAgICBtYXAucHV0KG5ldyBRTmFtZShOU19VUklfUEFSVF9FWFRFTlNJT05TLCBBVFRSX01FU1NBR0UpLCBtZXNzYWdlTmFtZSk7Ci0gICAgZWxzZQotICAgICAgbWFwLnJlbW92ZShuZXcgUU5hbWUoTlNfVVJJX1BBUlRfRVhURU5TSU9OUywgQVRUUl9NRVNTQUdFKSk7Ci0KLSAgICByZXR1cm4gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0RXh0ZW5zaW9uQXR0cmlidXRlKFFOYW1lIG5hbWUpCi0gIHsKLSAgICBpZiAobmFtZS5lcXVhbHMobmV3IFFOYW1lKE5TX1VSSV9QQVJUX0VYVEVOU0lPTlMsIEFUVFJfTUVTU0FHRSkpKQotICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoKSAhPSBudWxsID8gZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCkgOiBudWxsOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAoUU5hbWUpZXh0ZW5zaW9uQXR0cmlidXRlcy5nZXQobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0RWxlbWVudE5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9OQU1FOgotICAgICAgcmV0dXJuIGdldFR5cGVOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfREVGSU5JVElPTjoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgIHJldHVybiBiYXNpY0dldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT046Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFTWVzc2FnZSgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9OQU1FOgotICAgICAgc2V0RWxlbWVudE5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9OQU1FOgotICAgICAgc2V0VHlwZU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9ERUZJTklUSU9OOgotICAgICAgc2V0VHlwZURlZmluaXRpb24oKFhTRFR5cGVEZWZpbml0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTjoKLSAgICAgIHNldEVsZW1lbnREZWNsYXJhdGlvbigoWFNERWxlbWVudERlY2xhcmF0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRU1FU1NBR0U6Ci0gICAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9OQU1FOgotICAgICAgc2V0RWxlbWVudE5hbWUoRUxFTUVOVF9OQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9OQU1FOgotICAgICAgc2V0VHlwZU5hbWUoVFlQRV9OQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9ERUZJTklUSU9OOgotICAgICAgc2V0VHlwZURlZmluaXRpb24oKFhTRFR5cGVEZWZpbml0aW9uKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OOgotICAgICAgc2V0RWxlbWVudERlY2xhcmF0aW9uKChYU0RFbGVtZW50RGVjbGFyYXRpb24pbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFOgotICAgICAgc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfTkFNRToKLSAgICAgIHJldHVybiBFTEVNRU5UX05BTUVfRURFRkFVTFQgPT0gbnVsbCA/IGVsZW1lbnROYW1lICE9IG51bGwgOiAhRUxFTUVOVF9OQU1FX0VERUZBVUxULmVxdWFscyhlbGVtZW50TmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfTkFNRToKLSAgICAgIHJldHVybiBUWVBFX05BTUVfRURFRkFVTFQgPT0gbnVsbCA/IHR5cGVOYW1lICE9IG51bGwgOiAhVFlQRV9OQU1FX0VERUZBVUxULmVxdWFscyh0eXBlTmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfREVGSU5JVElPTjoKLSAgICAgIHJldHVybiB0eXBlRGVmaW5pdGlvbiAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OOgotICAgICAgcmV0dXJuIGVsZW1lbnREZWNsYXJhdGlvbiAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTUVTU0FHRToKLSAgICAgIHJldHVybiBlTWVzc2FnZSAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKGphdmF4LndzZGwuTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpbWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5NZXNzYWdlIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgZWxlbWVudE5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChlbGVtZW50TmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCB0eXBlTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHR5cGVOYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIE1hcCBnZXRFeHRlbnNpb25BdHRyaWJ1dGVzKCkKLSAgewotICAgIHJldHVybiBleHRlbnNpb25BdHRyaWJ1dGVzOwotICB9Ci0KLSAgY2xhc3MgRXh0ZW5zaW9uQXR0cmlidXRlTWFwIGV4dGVuZHMgSGFzaE1hcAotICB7Ci0gICAgLyoqCi0gICAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gICAgRXh0ZW5zaW9uQXR0cmlidXRlTWFwKCkKLSAgICB7Ci0gICAgICBzdXBlcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgcHV0KE9iamVjdCBrZXksIE9iamVjdCB2YWwpCi0gICAgewotICAgICAgUU5hbWUgbmFtZSA9IChRTmFtZSlrZXk7Ci0gICAgICBRTmFtZSB2YWx1ZSA9IChRTmFtZSl2YWw7Ci0gICAgICBTdHJpbmcgbE5hbWUgPSBuYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgU3RyaW5nIG5TcGFjZSA9IG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgIGlmIChOU19VUklfUEFSVF9FWFRFTlNJT05TLmVxdWFscyhuU3BhY2UpICYmIEFUVFJfTUVTU0FHRS5lcXVhbHMobE5hbWUpKQotICAgICAgewotICAgICAgICBqYXZheC53c2RsLk1lc3NhZ2UgbWVzc2FnZVByb3h5ID0gbmV3IE1lc3NhZ2VJbXBsKCk7Ci0gICAgICAgIG1lc3NhZ2VQcm94eS5zZXRRTmFtZSh2YWx1ZSk7Ci0gICAgICAgIHNldEVNZXNzYWdlKChNZXNzYWdlKW1lc3NhZ2VQcm94eSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc3VwZXIucHV0KGtleSwgdmFsdWUpOwotICAgIH0KLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlTlMobnVsbCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSk7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIFN0cmluZyBlbGVtZW50QXR0ciA9IFdTRExDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBXU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFKTsKLSAgICBzZXRFbGVtZW50TmFtZShlbGVtZW50QXR0ciAhPSBudWxsID8gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgZWxlbWVudEF0dHIsIGVsZW1lbnQsIHRydWUpIDogbnVsbCk7Ci0KLSAgICBTdHJpbmcgdHlwZUF0dHIgPSBXU0RMQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSk7Ci0gICAgc2V0VHlwZU5hbWUodHlwZUF0dHIgIT0gbnVsbCA/IGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHR5cGVBdHRyLCBlbGVtZW50LCB0cnVlKSA6IG51bGwpOwotCi0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIC8vc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5QQVJUX19OQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0KLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5QQVJUX19UWVBFX05BTUUpCi0gICAgICAgIGlmIChnZXRUeXBlTmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUsIGdldFR5cGVOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiIyIKLSAgICAgICAgICAgICsgZ2V0VHlwZU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5QQVJUX19FTEVNRU5UX05BTUUpCi0gICAgICAgIGlmIChnZXRFbGVtZW50TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUsIGdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiIyIKLSAgICAgICAgICAgICsgZ2V0RWxlbWVudE5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VSZWZlcmVuY2UoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VSZWZlcmVuY2UoZVJlZmVyZW5jZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBlUmVmZXJlbmNlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLlBBUlRfX1RZUEVfREVGSU5JVElPTikKLSAgICAgIHsKLSAgICAgICAgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZmluaXRpb24gPSBnZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgICBpZiAodHlwZURlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFLCB0eXBlRGVmaW5pdGlvbi5nZXRVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgICAgewotICAgICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBnZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgICAgaWYgKGVsZW1lbnREZWNsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlVVJJVmFsdWUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSwgZWxlbWVudERlY2wuZ2V0VVJJKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuUEFSVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIG5ld0VsZW1lbnREZWNsYXJhdGlvbiA9IHJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudE5hbWUpOwotICAgIGlmIChuZXdFbGVtZW50RGVjbGFyYXRpb24gIT0gZWxlbWVudERlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgIHNldEVsZW1lbnREZWNsYXJhdGlvbihuZXdFbGVtZW50RGVjbGFyYXRpb24pOwotICAgIH0KLQotICAgIFhTRFR5cGVEZWZpbml0aW9uIG5ld1R5cGVEZWZpbml0aW9uID0gcmVzb2x2ZVR5cGVEZWZpbml0aW9uKHR5cGVOYW1lKTsKLSAgICBpZiAobmV3VHlwZURlZmluaXRpb24gIT0gdHlwZURlZmluaXRpb24pCi0gICAgewotICAgICAgc2V0VHlwZURlZmluaXRpb24obmV3VHlwZURlZmluaXRpb24pOwotICAgIH0KLQotICAgIHN1cGVyLnJlY29uY2lsZVJlZmVyZW5jZXMoZGVlcCk7Ci0gIH0KLQotICBwcml2YXRlIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKFFOYW1lIHFuYW1lKQotICB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbkltcGwgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uSW1wbClnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBkZWZpbml0aW9uLnJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24ocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb24gcmVzb2x2ZVR5cGVEZWZpbml0aW9uKFFOYW1lIHFuYW1lKQotICB7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gKERlZmluaXRpb25JbXBsKWdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGRlZmluaXRpb24ucmVzb2x2ZVR5cGVEZWZpbml0aW9uKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0gLy9QYXJ0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BvcnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUG9ydEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBkMGEwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUG9ydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRJbXBsI2dldEVCaW5kaW5nIDxlbT5FQmluZGluZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFBvcnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgUG9ydAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFQmluZGluZygpIDxlbT5FQmluZGluZzwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZyBlQmluZGluZyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlBPUlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5QT1JUX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nIGdldEVCaW5kaW5nKCkKLSAgewotICAgIGlmIChlQmluZGluZyAhPSBudWxsICYmIGVCaW5kaW5nLmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVCaW5kaW5nID0gKEludGVybmFsRU9iamVjdCllQmluZGluZzsKLSAgICAgIGVCaW5kaW5nID0gKEJpbmRpbmcpZVJlc29sdmVQcm94eShvbGRFQmluZGluZyk7Ci0gICAgICBpZiAoZUJpbmRpbmcgIT0gb2xkRUJpbmRpbmcpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkcsIG9sZEVCaW5kaW5nLCBlQmluZGluZykpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZUJpbmRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nIGJhc2ljR2V0RUJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGVCaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFQmluZGluZyhCaW5kaW5nIG5ld0VCaW5kaW5nKQotICB7Ci0gICAgQmluZGluZyBvbGRFQmluZGluZyA9IGVCaW5kaW5nOwotICAgIGVCaW5kaW5nID0gbmV3RUJpbmRpbmc7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkcsIG9sZEVCaW5kaW5nLCBlQmluZGluZykpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuQmluZGluZyBnZXRCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBnZXRFQmluZGluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QmluZGluZyhqYXZheC53c2RsLkJpbmRpbmcgYmluZGluZykKLSAgewotICAgIHNldEVCaW5kaW5nKChCaW5kaW5nKWJpbmRpbmcpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19OQU1FOgotICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkc6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVCaW5kaW5nKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFQmluZGluZygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfX05BTUU6Ci0gICAgICBzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19FQklORElORzoKLSAgICAgIHNldEVCaW5kaW5nKChCaW5kaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19FQklORElORzoKLSAgICAgIHNldEVCaW5kaW5nKChCaW5kaW5nKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfX05BTUU6Ci0gICAgICByZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19FQklORElORzoKLSAgICAgIHJldHVybiBlQmluZGluZyAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldE5hbWUoY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnJlbW92ZShpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0TW9kZWxPYmplY3RzKE9iamVjdCBjb21wb25lbnQpCi0gIHsKLSAgICBQb3J0IHBvcnQgPSAoUG9ydCljb21wb25lbnQ7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGxpc3QuYWRkQWxsKHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5QT1JUX19OQU1FKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5QT1JUX19FQklORElORykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gZ2V0RUJpbmRpbmcoKTsKLSAgICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpOwotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLkJJTkRJTkdfQVRUUklCVVRFLCBxTmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICIjIiArIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLlBPUlQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCBlbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLkJJTkRJTkdfQVRUUklCVVRFKSwgZWxlbWVudCk7Ci0gICAgICBCaW5kaW5nIG5ld0JpbmRpbmcgPSAoYmluZGluZ1FOYW1lICE9IG51bGwpID8gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSkgOiBudWxsOwotICAgICAgaWYgKG5ld0JpbmRpbmcgIT0gZ2V0RUJpbmRpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgc2V0RUJpbmRpbmcobmV3QmluZGluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHN1cGVyLnJlY29uY2lsZVJlZmVyZW5jZXMoZGVlcCk7Ci0gIH0KLQotfSAvL1BvcnRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUG9ydFR5cGVJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUG9ydFR5cGVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MjkwOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BvcnRUeXBlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcnQgVHlwZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0VHlwZUltcGwjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCNnZXRFT3BlcmF0aW9ucyA8ZW0+RU9wZXJhdGlvbnM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBQb3J0VHlwZUltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBQb3J0VHlwZQotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgcU5hbWUgPSBRTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVU5ERUZJTkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRlZmluZWQgPSBVTkRFRklORURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVPcGVyYXRpb25zKCkgPGVtPkVPcGVyYXRpb25zPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVPcGVyYXRpb25zKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVPcGVyYXRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBQb3J0VHlwZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlBPUlRfVFlQRTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBxTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UU5hbWUoUU5hbWUgbmV3UU5hbWUpCi0gIHsKLSAgICBRTmFtZSBvbGRRTmFtZSA9IHFOYW1lOwotICAgIHFOYW1lID0gbmV3UU5hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19RTkFNRSwgb2xkUU5hbWUsIHFOYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVW5kZWZpbmVkKCkKLSAgewotICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIG5ld1VuZGVmaW5lZCkKLSAgewotICAgIGJvb2xlYW4gb2xkVW5kZWZpbmVkID0gdW5kZWZpbmVkOwotICAgIHVuZGVmaW5lZCA9IG5ld1VuZGVmaW5lZDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1VOREVGSU5FRCwgb2xkVW5kZWZpbmVkLCB1bmRlZmluZWQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVPcGVyYXRpb25zKCkKLSAgewotICAgIGlmIChlT3BlcmF0aW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVPcGVyYXRpb25zID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE9wZXJhdGlvbi5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19FT1BFUkFUSU9OUyk7Ci0gICAgfQotICAgIHJldHVybiBlT3BlcmF0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYW4gb3BlcmF0aW9uIHRvIHRoaXMgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIHRoZSBvcGVyYXRpb24gdG8gYmUgYWRkZWQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRPcGVyYXRpb24oamF2YXgud3NkbC5PcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgaWYgKCFvcGVyYXRpb24uaXNVbmRlZmluZWQoKSkKLSAgICAgIGdldEVPcGVyYXRpb25zKCkuYWRkKG9wZXJhdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uLiBOb3RlIHRoYXQgb3BlcmF0aW9uIG5hbWVzIGNhbgotICAgKiBiZSBvdmVybG9hZGVkIHdpdGhpbiBhIFBvcnRUeXBlLiBJbiBjYXNlIG9mIG92ZXJsb2FkaW5nLCB0aGUKLSAgICogbmFtZXMgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZXMgY2FuIGJlIHVzZWQgdG8gZnVydGhlcgotICAgKiByZWZpbmUgdGhlIHNlYXJjaC4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgb3BlcmF0aW9uLgotICAgKiBAcGFyYW0gaW5wdXROYW1lIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBtZXNzYWdlOyBpZiB0aGlzIGlzIG51bGwKLSAgICogICAgICAgIGl0IHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHBhcmFtIG91dHB1dE5hbWUgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBtZXNzYWdlOyBpZiB0aGlzIGlzIG51bGwKLSAgICogICAgICAgIGl0IHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24sIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqICAgICAgICAgYW55IG1hdGNoaW5nIG9wZXJhdGlvbgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk9wZXJhdGlvbiBnZXRPcGVyYXRpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBpbnB1dE5hbWUsIFN0cmluZyBvdXRwdXROYW1lKQotICB7Ci0gICAgSXRlcmF0b3Igb3BJdGVyYXRvciA9IGdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChvcEl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBvcCA9IChqYXZheC53c2RsLk9wZXJhdGlvbilvcEl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgU3RyaW5nIG9wTmFtZSA9IG9wLmdldE5hbWUoKTsKLSAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgb3BOYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmICghbmFtZS5lcXVhbHMob3BOYW1lKSkKLSAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChuYW1lICE9IG51bGwgfHwgb3BOYW1lICE9IG51bGwpCi0gICAgICAgIG9wID0gbnVsbDsKLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgaW5wdXROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuSW5wdXQgaW5wdXQgPSBvcC5nZXRJbnB1dCgpOwotICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBvcElucHV0TmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAob3BJbnB1dE5hbWUgPT0gbnVsbCB8fCAhb3BJbnB1dE5hbWUuZXF1YWxzKGlucHV0TmFtZSkpCi0gICAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgb3V0cHV0TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBqYXZheC53c2RsLk91dHB1dCBvdXRwdXQgPSBvcC5nZXRPdXRwdXQoKTsKLSAgICAgICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG9wT3V0cHV0TmFtZSA9IG91dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgaWYgKG9wT3V0cHV0TmFtZSA9PSBudWxsIHx8ICFvcE91dHB1dE5hbWUuZXF1YWxzKG91dHB1dE5hbWUpKQotICAgICAgICAgICAgb3AgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvcCAhPSBudWxsKQotICAgICAgICByZXR1cm4gb3A7Ci0gICAgfSAvLyBlbmQgd2hpbGUKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBvcGVyYXRpb25zIGRlZmluZWQgaGVyZS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRPcGVyYXRpb25zKCkKLSAgewotICAgIGlmICghaXNVbmRlZmluZWQoKSkKLSAgICAgIHJldHVybiBnZXRFT3BlcmF0aW9ucygpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0KCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fRU9QRVJBVElPTlM6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEVPcGVyYXRpb25zKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fVU5ERUZJTkVEOgotICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKCkgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX0VPUEVSQVRJT05TOgotICAgICAgcmV0dXJuIGdldEVPcGVyYXRpb25zKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19RTkFNRToKLSAgICAgIHNldFFOYW1lKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKCgoQm9vbGVhbiluZXdWYWx1ZSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX0VPUEVSQVRJT05TOgotICAgICAgZ2V0RU9wZXJhdGlvbnMoKS5jbGVhcigpOwotICAgICAgZ2V0RU9wZXJhdGlvbnMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19RTkFNRToKLSAgICAgIHNldFFOYW1lKFFOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoVU5ERUZJTkVEX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19FT1BFUkFUSU9OUzoKLSAgICAgIGdldEVPcGVyYXRpb25zKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1FOQU1FOgotICAgICAgcmV0dXJuIFFOQU1FX0VERUZBVUxUID09IG51bGwgPyBxTmFtZSAhPSBudWxsIDogIVFOQU1FX0VERUZBVUxULmVxdWFscyhxTmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fVU5ERUZJTkVEOgotICAgICAgcmV0dXJuIHVuZGVmaW5lZCAhPSBVTkRFRklORURfRURFRkFVTFQ7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fRU9QRVJBVElPTlM6Ci0gICAgICByZXR1cm4gZU9wZXJhdGlvbnMgIT0gbnVsbCAmJiAhZU9wZXJhdGlvbnMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAocU5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChxTmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCB1bmRlZmluZWQ6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1bmRlZmluZWQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKTsKLSAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lID09IG51bGwgPyAiIiA6IG5hbWUpOyAvLyROT04tTkxTLTEkCi0gICAgc2V0UU5hbWUocW5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN3aXRjaCAoV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShjaGlsZCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLk9QRVJBVElPTjoKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgICAgb3BlcmF0aW9uLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgb3BlcmF0aW9uLnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBnZXRFT3BlcmF0aW9ucygpLmFkZChvcGVyYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB7Ci0gICAgICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBnZXRMaXN0KGNvbXBvbmVudCwgbW9kZWxPYmplY3QpOwotICAgIGlmIChsaXN0ICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRMaXN0KE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIExpc3QgcmVzdWx0ID0gbnVsbDsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSljb21wb25lbnQ7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKWNvbXBvbmVudDsKLQotICAgIExpc3QgbGlzdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuUE9SVF9UWVBFX19RTkFNRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5QT1JUX1RZUEUpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKE9wZXJhdGlvbkltcGwpb3BlcmF0aW9uKS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL1BvcnRUeXBlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1NlcnZpY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvU2VydmljZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEyMzcyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvU2VydmljZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VydmljZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCNnZXRFUG9ydHMgPGVtPkVQb3J0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgU2VydmljZQotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgcU5hbWUgPSBRTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVU5ERUZJTkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRlZmluZWQgPSBVTkRFRklORURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQb3J0cygpIDxlbT5FUG9ydHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBvcnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVQb3J0cyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU2VydmljZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlNFUlZJQ0U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRRTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFFOYW1lKFFOYW1lIG5ld1FOYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkUU5hbWUgPSBxTmFtZTsKLSAgICBxTmFtZSA9IG5ld1FOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FLCBvbGRRTmFtZSwgcU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gbmV3VW5kZWZpbmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRVbmRlZmluZWQgPSB1bmRlZmluZWQ7Ci0gICAgdW5kZWZpbmVkID0gbmV3VW5kZWZpbmVkOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1VOREVGSU5FRCwgb2xkVW5kZWZpbmVkLCB1bmRlZmluZWQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVQb3J0cygpCi0gIHsKLSAgICBpZiAoZVBvcnRzID09IG51bGwpCi0gICAgewotICAgICAgZVBvcnRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFBvcnQuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX0VQT1JUUyk7Ci0gICAgfQotICAgIHJldHVybiBlUG9ydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgcG9ydCB0byB0aGlzIHNlcnZpY2UuCi0gICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0IHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUG9ydChqYXZheC53c2RsLlBvcnQgcG9ydCkKLSAgewotICAgIGdldEVQb3J0cygpLmFkZCgoUG9ydClwb3J0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBwb3J0cyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRQb3J0cygpCi0gIHsKLSAgICBIYXNoTWFwIGhhc2hNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClpLm5leHQoKTsKLSAgICAgIGhhc2hNYXAucHV0KHBvcnQuZ2V0TmFtZSgpLCBwb3J0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc2hNYXA7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgcG9ydC4KLSAgICoKLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgcG9ydC4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwb3J0LCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgcG9ydAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBvcnQgZ2V0UG9ydChTdHJpbmcgbmFtZSkKLSAgewotICAgIFBvcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMocG9ydC5nZXROYW1lKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBwb3J0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFUG9ydHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuIGdldEVQb3J0cygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKCgoQm9vbGVhbiluZXdWYWx1ZSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19FUE9SVFM6Ci0gICAgICBnZXRFUG9ydHMoKS5jbGVhcigpOwotICAgICAgZ2V0RVBvcnRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoUU5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoVU5ERUZJTkVEX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgZ2V0RVBvcnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19RTkFNRToKLSAgICAgIHJldHVybiBRTkFNRV9FREVGQVVMVCA9PSBudWxsID8gcU5hbWUgIT0gbnVsbCA6ICFRTkFNRV9FREVGQVVMVC5lcXVhbHMocU5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuIGVQb3J0cyAhPSBudWxsICYmICFlUG9ydHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAocU5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChxTmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCB1bmRlZmluZWQ6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1bmRlZmluZWQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKTsKLSAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lID09IG51bGwgPyAiIiA6IG5hbWUpOyAvLyROT04tTkxTLTEkCi0gICAgc2V0UU5hbWUocW5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN3aXRjaCAoV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShjaGlsZCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlBPUlQ6Ci0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSgoV1NETFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoV1NETFBhY2thZ2UuZU5TX1VSSSkpLmdldFdTRExGYWN0b3J5KCkuY3JlYXRlUG9ydCgpOwotICAgICAgICBwb3J0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgZ2V0RVBvcnRzKCkuYWRkKHBvcnQpOwotICAgICAgICBwb3J0LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OOgotICAgICAgewotICAgICAgICBzZXREb2N1bWVudGF0aW9uRWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZShpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZShPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBnZXRMaXN0KG1vZGVsT2JqZWN0KTsKLSAgICBpZiAobGlzdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0TGlzdChPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgUG9ydCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRFUG9ydHMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5TRVJWSUNFX19RTkFNRSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5TRVJWSUNFKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHlFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICBpdGVyYXRvciA9IGdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChQb3J0SW1wbClwb3J0KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi19IC8vU2VydmljZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9UeXBlc0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9UeXBlc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RlOGUzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvVHlwZXNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UeXBlczwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFR5cGVzSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFR5cGVzCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFR5cGVzSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuVFlQRVM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTY2hlbWFzKCkKLSAgewotICAgIExpc3QgYXJyYXlMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoIShleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RlZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gICAgICBpZiAoeHNkZWUuZ2V0U2NoZW1hKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYXJyYXlMaXN0LmFkZCh4c2RlZS5nZXRTY2hlbWEoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhcnJheUxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTY2hlbWFzKFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBMaXN0IHNjaGVtYXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0U2NoZW1hcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCAmJiBzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsICYmIG5hbWVzcGFjZVVSSS5lcXVhbHMoc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpKSkKLSAgICAgIHsKLSAgICAgICAgc2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlTm90aWZ5KE5vdGlmaWNhdGlvbiBtc2cpCi0gIHsKLSAgICBzdXBlci5lTm90aWZ5KG1zZyk7Ci0KLSAgICAvLyBjcy4uIGlmIHdlJ3ZlIGFkZGVkIGFuIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBhbmQgdGhlIFR5cGVzIG9iamVjdCBpcyBhbHJlYWR5IGF0dGFjaGVkIAotICAgIC8vIHRvIGEgcmVzb3VyY2Ugd2UgbmVlZCB0byBzZXQgdGhlIHNjaGVtYUxvY2F0aW9uIGZvciB0aGUgaW5saW5lIHNjaGVtYS4KLSAgICAvLyBJZiBub3QgeWV0IGF0dGFjaGVkIHRvIGEgcmVzb3VyY2UsIHRoZSBzY2hlbWFMb2NhdGlvbidzIHdpbGwgYmUgc2V0IHZpYSBXU0RMUmVzb3VyY2VJbXBsLmF0dGFjaGVkKEVPYmplY3QgbykKLSAgICAvLyAgICAgCi0gICAgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuTGl0ZXJhbHMuRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyAmJiBtc2cuZ2V0RXZlbnRUeXBlKCkgPT0gTm90aWZpY2F0aW9uLkFERCkKLSAgICB7Ci0gICAgICBpZiAobXNnLmdldE5ld1ZhbHVlKCkgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpCi0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBlZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpbXNnLmdldE5ld1ZhbHVlKCk7Ci0gICAgICAgIGlmIChlZS5nZXRTY2hlbWEoKSAhPSBudWxsICYmIGVlLmdldFNjaGVtYSgpLmVSZXNvdXJjZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBlZS5nZXRTY2hlbWEoKS5zZXRTY2hlbWFMb2NhdGlvbihlZS5nZXRTY2hlbWEoKS5lUmVzb3VyY2UoKS5nZXRVUkkoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgaWYgKFhTRENvbnN0YW50cy5TQ0hFTUFfRUxFTUVOVF9UQUcuZXF1YWxzKGNoaWxkLmdldExvY2FsTmFtZSgpKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkZWUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgICAgeHNkZWUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICB4c2RlZS5zZXRFbGVtZW50KGNoaWxkKTsgLy8gY3MgOiB0aGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgY3JlYXRpbmcgdGhlIGlubGluZSBzY2hlbWEgICAgICAgICAgICAgICAKLSAgICAgICAgYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoeHNkZWUpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKHRoaXMsIGkubmV4dCgpKTsKLSAgICB9Ci0gICAgKChEZWZpbml0aW9uSW1wbClnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpY29tcG9uZW50OwotICAgIExpc3QgbGlzdCA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBsaXN0LnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKWNvbXBvbmVudDsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgbGlzdC5hZGRBbGwodHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLlRZUEVTKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgLy8gQWRkIGNoaWxkcmVuCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3RWxlbWVudDsKLQotICAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCA9PSBudWxsKQotICAgICAgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyID0gZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgRWxlbWVudCBlbCA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHkgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlci5uZXh0KCk7Ci0gICAgICBlbCA9IGV4dGVuc2liaWxpdHkuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKGVsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCByZVBhcmVudGVkID0gKEVsZW1lbnQpZG9jdW1lbnQuaW1wb3J0Tm9kZShlbCwgdHJ1ZSk7Ci0gICAgICAgICAgZXh0ZW5zaWJpbGl0eS5zZXRFbGVtZW50KHJlUGFyZW50ZWQpOyAvLyByZXBsYWNlIHdpdGggdGhlIG5ldyBvbmUKLSAgICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKHJlUGFyZW50ZWQpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChET01FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHkpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLX0gLy9UeXBlc0ltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE4NDQxZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCNnZXRDaGlsZHJlbiA8ZW0+Q2hpbGRyZW48L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDaGlsZHJlbigpIDxlbT5DaGlsZHJlbjwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRDaGlsZHJlbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBjaGlsZHJlbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRDaGlsZHJlbigpCi0gIHsKLSAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjaGlsZHJlbiA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTik7Ci0gICAgfQotICAgIHJldHVybiBjaGlsZHJlbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRDaGlsZHJlbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOOgotICAgICAgcmV0dXJuIGdldENoaWxkcmVuKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOOgotICAgICAgZ2V0Q2hpbGRyZW4oKS5jbGVhcigpOwotICAgICAgZ2V0Q2hpbGRyZW4oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOOgotICAgICAgZ2V0Q2hpbGRyZW4oKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTjoKLSAgICAgIHJldHVybiBjaGlsZHJlbiAhPSBudWxsICYmICFjaGlsZHJlbi5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8vIAotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCAmJiAhaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RWxlbWVudCgpOiBQcmVzZXJ2aW5nIG9sZCBlbGVtZW50Iik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRFbGVtZW50R2VuKGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLnJlY29uY2lsZUF0dHJpYnV0ZXMoKSIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoKSIpOwotICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RWxlbWVudChjaGlsZCk7Ci0KLSAgICAvLyBUT0RPLi4gIHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY2hpbGQgc2hvdWxkIGdvIGluIHRoZSBpbiBjdXJyZW50IGxpc3QKLSAgICAvLyBzbyB0aGF0IGl0IGRvZXNuJ3QgYWx3YXlzIGVuZCB1cCBnb2luZyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IAotICAgIC8vIChzaW5jZSBhIG5ldyBlbGVtZW50IG1pZ2h0IGJlIGFkZGVkIGF0IHRoZSBzdGFydCkKLSAgICBnZXRDaGlsZHJlbigpLmFkZChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKHRoaXMsIGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IHVlZSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpY29tcG9uZW50OwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICB1ZWUuZ2V0Q2hpbGRyZW4oKS5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCA9PSBudWxsKQotICAgICAgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBudWxsOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpIC8vIFRoaXMgaXMgYW4gb2xkIGVsZW1lbnQuCi0gICAgewotICAgICAgbmV3RWxlbWVudCA9IChFbGVtZW50KWRvY3VtZW50LmltcG9ydE5vZGUoZWxlbWVudCwgdHJ1ZSk7Ci0gICAgICBlbGVtZW50ID0gbmV3RWxlbWVudDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBnZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIHF1YWxpZmllciA9IGRlZmluaXRpb24uZ2V0UHJlZml4KG5hbWVzcGFjZSk7Ci0gICAgICBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZSwgKHF1YWxpZmllciA9PSBudWxsID8gIiIgOiBxdWFsaWZpZXIgKyAiOiIpICsgZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBlbGVtZW50ID0gbmV3RWxlbWVudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIHByaXZhdGUgamF2YS51dGlsLk1hcCBwcm9wZXJ0aWVzID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0QXR0cmlidXRlKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHByb3BlcnRpZXMucHV0KGtleSwgdmFsdWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcHJvcGVydGllcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICBqYXZhLnV0aWwuTWFwLkVudHJ5IGVudHJ5ID0gbnVsbDsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIGVudHJ5ID0gKGphdmEudXRpbC5NYXAuRW50cnkpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBTdHJpbmcgYXR0cmlidXRlID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gKFN0cmluZyllbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgfQotfSAvL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRWxlbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIzNTU0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50c0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCA8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbCNnZXRFbGVtZW50IDxlbT5FbGVtZW50PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETEVsZW1lbnRJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBXU0RMRWxlbWVudAotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkgPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIEVsZW1lbnQgRE9DVU1FTlRBVElPTl9FTEVNRU5UX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSA8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFbGVtZW50IGRvY3VtZW50YXRpb25FbGVtZW50ID0gRE9DVU1FTlRBVElPTl9FTEVNRU5UX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWxlbWVudCgpIDxlbT5FbGVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBFbGVtZW50IEVMRU1FTlRfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50KCkgPGVtPkVsZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRWxlbWVudCBlbGVtZW50ID0gRUxFTUVOVF9FREVGQVVMVDsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRpbmdET00gPSBmYWxzZTsKLQotICBwcm90ZWN0ZWQgRUxpc3Qgd3NkbENvbnRlbnRzOwotCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBlbmNsb3NpbmdEZWZpbml0aW9uOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuV1NETF9FTEVNRU5UOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRWxlbWVudCBnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZG9jdW1lbnRhdGlvbkVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50YXRpb25FbGVtZW50KEVsZW1lbnQgbmV3RG9jdW1lbnRhdGlvbkVsZW1lbnQpCi0gIHsKLSAgICBFbGVtZW50IG9sZERvY3VtZW50YXRpb25FbGVtZW50ID0gZG9jdW1lbnRhdGlvbkVsZW1lbnQ7Ci0gICAgZG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBuZXdEb2N1bWVudGF0aW9uRWxlbWVudDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCgKLSAgICAgICAgdGhpcywKLSAgICAgICAgTm90aWZpY2F0aW9uLlNFVCwKLSAgICAgICAgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQsCi0gICAgICAgIG9sZERvY3VtZW50YXRpb25FbGVtZW50LAotICAgICAgICBkb2N1bWVudGF0aW9uRWxlbWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50R2VuKEVsZW1lbnQgbmV3RWxlbWVudCkKLSAgewotICAgIEVsZW1lbnQgb2xkRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgZWxlbWVudCA9IG5ld0VsZW1lbnQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19FTEVNRU5ULCBvbGRFbGVtZW50LCBlbGVtZW50KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmNsb3NpbmdEZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIGVuY2xvc2luZ0RlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDoKLSAgICAgIHJldHVybiBnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0VMRU1FTlQ6Ci0gICAgICByZXR1cm4gZ2V0RWxlbWVudCgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOgotICAgICAgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKEVsZW1lbnQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0VMRU1FTlQ6Ci0gICAgICBzZXRFbGVtZW50KChFbGVtZW50KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOgotICAgICAgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoRE9DVU1FTlRBVElPTl9FTEVNRU5UX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19FTEVNRU5UOgotICAgICAgc2V0RWxlbWVudChFTEVNRU5UX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDoKLSAgICAgIHJldHVybiBET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQgPT0gbnVsbAotICAgICAgICA/IGRvY3VtZW50YXRpb25FbGVtZW50ICE9IG51bGwgOiAhRE9DVU1FTlRBVElPTl9FTEVNRU5UX0VERUZBVUxULmVxdWFscyhkb2N1bWVudGF0aW9uRWxlbWVudCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRUxFTUVOVDoKLSAgICAgIHJldHVybiBFTEVNRU5UX0VERUZBVUxUID09IG51bGwgPyBlbGVtZW50ICE9IG51bGwgOiAhRUxFTUVOVF9FREVGQVVMVC5lcXVhbHMoZWxlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChkb2N1bWVudGF0aW9uRWxlbWVudDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGVsZW1lbnQ6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChlbGVtZW50KTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxhdGlvbiBtZXRob2RzOiBET00gLT4gTW9kZWwKLSAgLy8KLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIFdTRExDb250ZW50c0VMaXN0IGV4dGVuZHMgRUNvbnRlbnRzRUxpc3QKLSAgewotICAgIFdTRExDb250ZW50c0VMaXN0KEVPYmplY3QgZU9iamVjdCwgRVN0cnVjdHVyYWxGZWF0dXJlW10gZVN0cnVjdHVyYWxGZWF0dXJlcykKLSAgICB7Ci0gICAgICBzdXBlcihlT2JqZWN0LCBlU3RydWN0dXJhbEZlYXR1cmVzKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgTGlzdEl0ZXJhdG9yIG5ld0xpc3RJdGVyYXRvcigpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlSXRlcmF0b3JJbXBsKGVPYmplY3QsIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGlzSW5jbHVkZWQoRVN0cnVjdHVyYWxGZWF0dXJlIGVTdHJ1Y3R1cmFsRmVhdHVyZSkKLSAgICB7Ci0gICAgICBFUmVmZXJlbmNlIGVSZWZlcmVuY2UgPSAoRVJlZmVyZW5jZSllU3RydWN0dXJhbEZlYXR1cmU7Ci0gICAgICByZXR1cm4gIWVSZWZlcmVuY2UuaXNUcmFuc2llbnQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBiYXNpY0xpc3QoKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgV1NETENvbnRlbnRzRUxpc3QoZU9iamVjdCwgZVN0cnVjdHVyYWxGZWF0dXJlcyk7Ci0gICAgfQotCi0gICAgcHVibGljIEl0ZXJhdG9yIGJhc2ljSXRlcmF0b3IoKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgRmVhdHVyZUl0ZXJhdG9ySW1wbChlT2JqZWN0LCBlU3RydWN0dXJhbEZlYXR1cmVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZlYXR1cmVJdGVyYXRvckltcGwgZXh0ZW5kcyBFQ29udGVudHNFTGlzdC5GZWF0dXJlSXRlcmF0b3JJbXBsCi0gICAgewotICAgICAgcHVibGljIEZlYXR1cmVJdGVyYXRvckltcGwoRU9iamVjdCBlT2JqZWN0KQotICAgICAgewotICAgICAgICBzdXBlcihlT2JqZWN0LCAoRVN0cnVjdHVyYWxGZWF0dXJlW10pKChCYXNpY0VMaXN0KWVPYmplY3QuZUNsYXNzKCkuZ2V0RUFsbFJlZmVyZW5jZXMoKSkuZGF0YSgpKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIEZlYXR1cmVJdGVyYXRvckltcGwoRU9iamVjdCBlT2JqZWN0LCBFU3RydWN0dXJhbEZlYXR1cmVbXSBlU3RydWN0dXJhbEZlYXR1cmVzKQotICAgICAgewotICAgICAgICBzdXBlcihlT2JqZWN0LCBlU3RydWN0dXJhbEZlYXR1cmVzKTsKLSAgICAgIH0KLQotICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJbmNsdWRlZChFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlKQotICAgICAgewotICAgICAgICBFUmVmZXJlbmNlIGVSZWZlcmVuY2UgPSAoRVJlZmVyZW5jZSllU3RydWN0dXJhbEZlYXR1cmU7Ci0gICAgICAgIHJldHVybiAhZVJlZmVyZW5jZS5pc1RyYW5zaWVudCgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFTGlzdCBnZXRXU0RMQ29udGVudHMoKQotICB7Ci0gICAgaWYgKHdzZGxDb250ZW50cyA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzZGxDb250ZW50cyA9IG5ldyBXU0RMQ29udGVudHNFTGlzdCh0aGlzLCAoRVN0cnVjdHVyYWxGZWF0dXJlW10pKChCYXNpY0VMaXN0KWVDbGFzcygpLmdldEVBbGxDb250YWlubWVudHMoKSkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd3NkbENvbnRlbnRzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIGlzUmVjb25jaWxpbmcgPSB0cnVlOwotICAgICAgc2V0RWxlbWVudEdlbihudWxsKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgY29udGVudHMgPSBnZXRXU0RMQ29udGVudHMoKS5pdGVyYXRvcigpOyBjb250ZW50cy5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqID0gY29udGVudHMubmV4dCgpOwotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEVsZW1lbnRJbXBsIGNvbnRlbnQgPSAoV1NETEVsZW1lbnRJbXBsKW9iajsKLSAgICAgICAgICBjb250ZW50LnNldEVsZW1lbnQobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEVsZW1lbnRHZW4oZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZU5vdGlmeShOb3RpZmljYXRpb24gbXNnKQotICB7Ci0gICAgaW50IGV2ZW50VHlwZSA9IG1zZy5nZXRFdmVudFR5cGUoKTsKLSAgICBPYmplY3QgZmVhdHVyZSA9IG1zZy5nZXRGZWF0dXJlKCk7Ci0gICAgT2JqZWN0IG9sZFZhbHVlID0gbXNnLmdldE9sZFZhbHVlKCk7Ci0gICAgT2JqZWN0IG5ld1ZhbHVlID0gbXNnLmdldE5ld1ZhbHVlKCk7Ci0KLSAgICBpZiAoZUNsYXNzKCkuZ2V0RUFsbFJlZmVyZW5jZXMoKS5jb250YWlucyhmZWF0dXJlKSkKLSAgICB7Ci0gICAgICBFUmVmZXJlbmNlIGVSZWZlcmVuY2UgPSAoRVJlZmVyZW5jZSlmZWF0dXJlOwotICAgICAgaWYgKGVSZWZlcmVuY2UuaXNDb250YWlubWVudCgpICYmICFlUmVmZXJlbmNlLmlzVHJhbnNpZW50KCkpCi0gICAgICB7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uQUREOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGFkb3B0Q29udGVudChlUmVmZXJlbmNlLCBuZXdWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uQUREX01BTlk6Ci0gICAgICAgICAgewotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBuZXdWYWx1ZXMgPSAoKENvbGxlY3Rpb24pbmV3VmFsdWUpLml0ZXJhdG9yKCk7IG5ld1ZhbHVlcy5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCluZXdWYWx1ZXMubmV4dCgpOwotICAgICAgICAgICAgICBhZG9wdENvbnRlbnQoZVJlZmVyZW5jZSwgd3NkbEVsZW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlJFTU9WRToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgb3JwaGFuQ29udGVudChlUmVmZXJlbmNlLCAvKihXU0RMRWxlbWVudCkqL29sZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5SRU1PVkVfTUFOWToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIG9sZFZhbHVlcyA9ICgoQ29sbGVjdGlvbilvbGRWYWx1ZSkuaXRlcmF0b3IoKTsgb2xkVmFsdWVzLmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVPYmplY3Qgb2JqZWN0ID0gKEVPYmplY3Qpb2xkVmFsdWVzLm5leHQoKTsKLSAgICAgICAgICAgICAgb3JwaGFuQ29udGVudChlUmVmZXJlbmNlLCBvYmplY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLk1PVkU6Ci0gICAgICAgICAgewotICAgICAgICAgICAgbW92ZUNvbnRlbnQoZVJlZmVyZW5jZSwgKFdTRExFbGVtZW50KW5ld1ZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5TRVQ6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uVU5TRVQ6Ci0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG9ycGhhbkNvbnRlbnQoZVJlZmVyZW5jZSwgb2xkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFkb3B0Q29udGVudChlUmVmZXJlbmNlLCBuZXdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc3dpdGNoIChldmVudFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BREQ6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uQUREX01BTlk6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uUkVNT1ZFOgotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlJFTU9WRV9NQU5ZOgotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLk1PVkU6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uU0VUOgotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlVOU0VUOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYW5nZVJlZmVyZW5jZShlUmVmZXJlbmNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChlQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpLmNvbnRhaW5zKGZlYXR1cmUpKQotICAgIHsKLSAgICAgIEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSA9IChFQXR0cmlidXRlKWZlYXR1cmU7Ci0gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uQUREOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BRERfTUFOWToKLSAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uUkVNT1ZFOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5SRU1PVkVfTUFOWToKLSAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uTU9WRToKLSAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uU0VUOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5VTlNFVDoKLSAgICAgICAgewotICAgICAgICAgIGNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5lTm90aWZ5KG1zZyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBvcnBoYW5Db250ZW50KEVSZWZlcmVuY2UgZVJlZmVyZW5jZSwgT2JqZWN0IG9iaikKLSAgewotICAgIGlmICghaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICBFbGVtZW50IHBhcmVudCA9IGdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiBvYmogIT0gbnVsbCAmJiBvYmogaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpb2JqOwotICAgICAgICBFbGVtZW50IGNvbnRlbnRFbGVtZW50ID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgICBpZiAoY29udGVudEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICBuaWNlUmVtb3ZlQ2hpbGQoY29udGVudEVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpLCBjb250ZW50RWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIDsvL1N5c3RlbS5vdXQucHJpbnRsbigiV1NETEVsZW1lbnQub3JwaGFuQ29udGVudCgpLCBPYmplY3QgaXM6ICIgKyBvYmopOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIG5pY2VSZW1vdmVDaGlsZChOb2RlIHBhcmVudCwgTm9kZSBjaGlsZCkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgZG9tIHdyaXRlYmFjayBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmb3JjZU5pY2VSZW1vdmVDaGlsZChwYXJlbnQsIGNoaWxkKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGZvcmNlTmljZVJlbW92ZUNoaWxkKE5vZGUgcGFyZW50LCBOb2RlIGNoaWxkKQotICB7Ci0gICAgdXBkYXRpbmdET00gPSB0cnVlOwotCi0gICAgYm9vbGVhbiBkb25lID0gZmFsc2U7Ci0KLSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIj8qIik7Ci0gICAgTm9kZSBwcmV2aW91cyA9IGNoaWxkLmdldFByZXZpb3VzU2libGluZygpOwotICAgIGlmIChwcmV2aW91cyAhPSBudWxsICYmIHByZXZpb3VzLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpCi0gICAgewotICAgICAgVGV4dCB0ZXh0ID0gKFRleHQpcHJldmlvdXM7Ci0gICAgICBTdHJpbmcgZGF0YSA9IHRleHQuZ2V0RGF0YSgpOwotICAgICAgaW50IGluZGV4ID0gZGF0YS5sYXN0SW5kZXhPZignXG4nKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGluZGV4IC0gMSA+IDAgJiYgZGF0YS5jaGFyQXQoaW5kZXggLSAxKSA9PSAnXHInKQotICAgICAgICB7Ci0gICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIjEqIik7Ci0gICAgICAgICAgdGV4dC5kZWxldGVEYXRhKGluZGV4IC0gMSwgZGF0YS5sZW5ndGgoKSAtIGluZGV4ICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIjIqIik7Ci0gICAgICAgICAgdGV4dC5kZWxldGVEYXRhKGluZGV4LCBkYXRhLmxlbmd0aCgpIC0gaW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiTm8gcmV0dXJuIGJlZm9yZSEiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gdGV4dCBub2RlIGJlZm9yZSEiKTsKLSAgICB9Ci0KLSAgICBpZiAoIWRvbmUpCi0gICAgewotICAgICAgZm9yIChOb2RlIG5leHQgPSBjaGlsZC5nZXROZXh0U2libGluZygpOyBuZXh0ICE9IG51bGw7IG5leHQgPSBuZXh0LmdldE5leHRTaWJsaW5nKCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChuZXh0LmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICBUZXh0IHRleHQgPSAoVGV4dCluZXh0OwotICAgICAgICAgIFN0cmluZyBkYXRhID0gdGV4dC5nZXREYXRhKCk7Ci0gICAgICAgICAgLyoKLSAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgieHggIiArIGRhdGEubGVuZ3RoKCkgKyAiOjogIik7Ci0gICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGgoKTsgKytpKQotICAgICAgICAgICB7Ci0gICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICsgSW50ZWdlci50b0hleFN0cmluZygoaW50KWRhdGEuY2hhckF0KGkpKSk7Ci0gICAgICAgICAgIH0KLSAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICAgICAgICovCi0KLSAgICAgICAgICBpbnQgaW5kZXggPSBkYXRhLmluZGV4T2YoJ1xuJyk7Ci0gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCArIDEgPCBkYXRhLmxlbmd0aCgpICYmIGRhdGEuY2hhckF0KGluZGV4ICsgMSkgPT0gJ1xyJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIzKiIpOwotICAgICAgICAgICAgICB0ZXh0LmRlbGV0ZURhdGEoMCwgaW5kZXggKyAyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIjQqIik7Ci0gICAgICAgICAgICAgIHRleHQuZGVsZXRlRGF0YSgwLCBpbmRleCArIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIHJldHVybiBhZnRlciEiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobmV4dC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW92aW5nIGZyb20tLS0tLS0tLVxuICAgICAiICsgcGFyZW50KTsKLSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW92aW5nLS0tLS0tLS1cbiAgICAgIiArIGNoaWxkKTsKLSAgICBpZiAocGFyZW50ICE9IG51bGwpCi0gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpOwotCi0gICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIG1vdmVDb250ZW50KEVSZWZlcmVuY2UgZVJlZmVyZW5jZSwgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIGRvbSB3cml0ZWJhY2sgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm1vdmluZyAiICsgeHNkQ29uY3JldGVDb21wb25lbnQpOwotICAgIE5vZGUgcGFyZW50ID0gZ2V0QWRvcHRpb25QYXJlbnROb2RlKGVSZWZlcmVuY2UpOwotICAgIGlmIChwYXJlbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgY29udGVudHMgPSBnZXRXU0RMQ29udGVudHMoKTsKLSAgICAgICAgaW50IGluZGV4ID0gY29udGVudHMuaW5kZXhPZih3c2RsRWxlbWVudCk7Ci0gICAgICAgIG5pY2VSZW1vdmVDaGlsZChwYXJlbnQsIGNoaWxkKTsKLSAgICAgICAgbmljZUluc2VydEJlZm9yZShwYXJlbnQsIGNoaWxkLCArK2luZGV4ID09IGNvbnRlbnRzLnNpemUoKSA/IG51bGwgOiAoKFdTRExFbGVtZW50KWNvbnRlbnRzLmdldChpbmRleCkpLmdldEVsZW1lbnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJtb3ZlZCAiICsgeHNkQ29uY3JldGVDb21wb25lbnQpOwotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZG9wdENvbnRlbnQoRVJlZmVyZW5jZSBlUmVmZXJlbmNlLCBPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotICAgIHsKLSAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KW9iamVjdDsKLSAgICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgewotICAgICAgICBpZiAod3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkuZWxlbWVudENoYW5nZWQod3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkRWxlbWVudCA9IHdzZGxFbGVtZW50LmdldEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGdldEVsZW1lbnQoKSAhPSBudWxsICYmIChjaGlsZEVsZW1lbnQgPT0gbnVsbCB8fCBjaGlsZEVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpID09IG51bGwpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGNoaWxkRWxlbWVudCAhPSBudWxsICYmIGNoaWxkRWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkgIT0gZ2V0RWxlbWVudCgpLmdldE93bmVyRG9jdW1lbnQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3c2RsRWxlbWVudC5zZXRFbGVtZW50KG51bGwpOwotICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBoYW5kbGVFbGVtZW50Rm9yQWRvcHQoZVJlZmVyZW5jZSwgd3NkbEVsZW1lbnQpOwotICAgICAgICAgICgoV1NETEVsZW1lbnRJbXBsKXdzZGxFbGVtZW50KS51cGRhdGVFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgKChXU0RMRWxlbWVudEltcGwpd3NkbEVsZW1lbnQpLmFkb3B0QnkoZGVmaW5pdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAvLyBBZGQgYSBuYW1lc3BhY2UgYXR0cmlidXRlIHRvIHRoZSBEZWZpbml0aW9ucyBlbGVtZW50LgotICAgICAgTmFtZXNwYWNlIG5zID0gKE5hbWVzcGFjZSlvYmplY3Q7Ci0gICAgICBOb2RlIGFkb3B0aW9uUGFyZW50ID0gZ2V0QWRvcHRpb25QYXJlbnROb2RlKGVSZWZlcmVuY2UpOyAvLyBEZWZpbml0aW9ucyBub2RlCi0gICAgICAvLyBLQjogQXNzdW1wdGlvbiAtIFRoZSBwcmVmaXggaXMgdW5pcXVlIGlmIHdlIGFyZSBoZXJlIChieSB0aGUgRGVmaW5pdGlvbnMgbW9kZWwpLiAKLSAgICAgIGlmIChhZG9wdGlvblBhcmVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAoKEVsZW1lbnQpYWRvcHRpb25QYXJlbnQpLnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIG5zLmdldFByZWZpeCgpLCBucy5nZXRVUkkoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIE5vZGUgZ2V0QWRvcHRpb25QYXJlbnROb2RlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50KCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVFbGVtZW50Rm9yQWRvcHQoRVJlZmVyZW5jZSBlUmVmZXJlbmNlLCBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIC8vIEVzdGFibGlzaCBET00gcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcAotCi0gICAgTm9kZSBhZG9wdGlvblBhcmVudCA9IGdldEFkb3B0aW9uUGFyZW50Tm9kZShlUmVmZXJlbmNlKTsKLSAgICBFbGVtZW50IGNoaWxkRWxlbWVudCA9IHdzZGxFbGVtZW50LmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IHJlZmVyZW5jZWRFbGVtZW50ID0gbnVsbDsKLQotICAgIGZvciAoSXRlcmF0b3IgY29udGVudHMgPSBnZXRXU0RMQ29udGVudHMoKS5pdGVyYXRvcigpOyBjb250ZW50cy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGlmIChjb250ZW50cy5uZXh0KCkgPT0gd3NkbEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIGlmIChjb250ZW50cy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgbmV4dCA9IGNvbnRlbnRzLm5leHQoKTsKLSAgICAgICAgICBpZiAobmV4dCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZmVyZW5jZWRFbGVtZW50ID0gKChXU0RMRWxlbWVudCluZXh0KS5nZXRFbGVtZW50KCk7Ci0gICAgICAgICAgICB3aGlsZSAocmVmZXJlbmNlZEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZSBwYXJlbnQgPSByZWZlcmVuY2VkRWxlbWVudC5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmIChwYXJlbnQgPT0gYWRvcHRpb25QYXJlbnQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmIChwYXJlbnQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRFbGVtZW50ID0gKEVsZW1lbnQpcGFyZW50OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChjaGlsZEVsZW1lbnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkuaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICBjaGlsZEVsZW1lbnQgPSAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgKChXU0RMRWxlbWVudEltcGwpd3NkbEVsZW1lbnQpLmlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICAgIGlmIChjaGlsZEVsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm5vdCBjcmVhdGVkISAiICsgd3NkbEVsZW1lbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgYm9vbGVhbiBpc0F0dGFjaGVkID0gZmFsc2U7Ci0gICAgZm9yIChOb2RlIHJvb3REb2N1bWVudCA9IGNoaWxkRWxlbWVudDsgcm9vdERvY3VtZW50ICE9IG51bGw7IHJvb3REb2N1bWVudCA9IHJvb3REb2N1bWVudC5nZXRQYXJlbnROb2RlKCkpCi0gICAgewotICAgICAgaWYgKFdTRExDb25zdGFudHMubm9kZVR5cGUocm9vdERvY3VtZW50KSA9PSBXU0RMQ29uc3RhbnRzLkRFRklOSVRJT04pCi0gICAgICB7Ci0gICAgICAgIGlzQXR0YWNoZWQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWlzQXR0YWNoZWQpCi0gICAgewotICAgICAgLy8gSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgZG9jdW1lbnRhdGlvbiBlbGVtZW50IHdlIG5lZWQgdG8gcHV0IGl0IGZpcnN0IGluIHRoZSBsaXN0Ci0gICAgICAKLSAgICAgIGlmIChyZWZlcmVuY2VkRWxlbWVudCA9PSBudWxsICYmIFdTRExDb25zdGFudHMubm9kZVR5cGUoY2hpbGRFbGVtZW50KSA9PSBXU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT04gJiYgIWVSZWZlcmVuY2UuaXNNYW55KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEhlcmUgd2UgZmluZCB0aGUgZmlyc3QgZWxlbWVudCBub2RlIGluIHRoZSBsaXN0LCB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IG5lZWRzIHRvIGdvIGJlZm9yZSB0aGlzIGVsZW1lbnQKLSAgICAgICAgCi0gICAgICAgIGZvciAoTm9kZSBjaGlsZCA9IGFkb3B0aW9uUGFyZW50LmdldEZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbnVsbDsgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQgPSAoRWxlbWVudCljaGlsZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy9yZWZlcmVuY2VkRWxlbWVudCA9IGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKGFkb3B0aW9uUGFyZW50LGNoaWxkRWxlbWVudCk7ICAgICAKLSAgICAgIG5pY2VJbnNlcnRCZWZvcmUoYWRvcHRpb25QYXJlbnQsIGNoaWxkRWxlbWVudCwgcmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG5pY2VJbnNlcnRCZWZvcmUoTm9kZSBwYXJlbnQsIE5vZGUgbmV3Q2hpbGQsIE5vZGUgcmVmZXJlbmNlQ2hpbGQpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIGRvbSB3cml0ZWJhY2sgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3JjZU5pY2VJbnNlcnRCZWZvcmUocGFyZW50LCBuZXdDaGlsZCwgcmVmZXJlbmNlQ2hpbGQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZm9yY2VOaWNlSW5zZXJ0QmVmb3JlKE5vZGUgcGFyZW50LCBOb2RlIG5ld0NoaWxkLCBOb2RlIHJlZmVyZW5jZUNoaWxkKQotICB7Ci0gICAgdXBkYXRpbmdET00gPSB0cnVlOwotCi0gICAgTE9PUDogZm9yIChOb2RlIGNoaWxkID0gcmVmZXJlbmNlQ2hpbGQgPT0gbnVsbCA/IHBhcmVudC5nZXRMYXN0Q2hpbGQoKSA6IHJlZmVyZW5jZUNoaWxkLmdldFByZXZpb3VzU2libGluZygpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldFByZXZpb3VzU2libGluZygpKQotICAgIHsKLSAgICAgIHN3aXRjaCAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToKLSAgICAgICAgewotICAgICAgICAgIFRleHQgdGV4dCA9IChUZXh0KWNoaWxkOwotICAgICAgICAgIFN0cmluZyBkYXRhID0gdGV4dC5nZXREYXRhKCk7Ci0KLSAgICAgICAgICAvKgotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJ4eCAiICsgZGF0YS5sZW5ndGgoKSArICI6OiAiKTsKLSAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCgpOyArK2kpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKChpbnQpZGF0YS5jaGFyQXQoaSkpKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgICAgICAgKi8KLQotICAgICAgICAgIGludCBpbmRleCA9IGRhdGEubGFzdEluZGV4T2YoJ1xuJyk7Ci0gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gaGVyZSIpOwotCi0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgaW5kZW50ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgZm9yIChOb2RlIGFuY2VzdG9yID0gcGFyZW50LmdldFBhcmVudE5vZGUoKTsgYW5jZXN0b3IgIT0gbnVsbCAmJiBhbmNlc3Rvci5nZXROb2RlVHlwZSgpICE9IE5vZGUuRE9DVU1FTlRfTk9ERTsgYW5jZXN0b3IgPSBhbmNlc3Rvci5nZXRQYXJlbnROb2RlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGluZGVudC5hcHBlbmQoIiAgICAiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA8IGRhdGEubGVuZ3RoKCkgJiYgZGF0YS5jaGFyQXQoaW5kZXggKyAxKSA9PSAnXHInKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGV4dC5yZXBsYWNlRGF0YShpbmRleCArIDEsIGRhdGEubGVuZ3RoKCkgLSBpbmRleCAtIDEsIGluZGVudCArICIgICAgIik7Ci0KLSAgICAgICAgICAgIC8vIHNldENvcnJlY3RJbmRlbnRhdGlvbihpbmRlbnQsIG5ld1RleHQpOwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZUNoaWxkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGluZGVudC5hcHBlbmQoIiAgICAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFRleHQgbmV3VGV4dCA9IHBhcmVudC5nZXRPd25lckRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUoIlxuIiArIGluZGVudCk7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkluc2VydGVkLi4uIiArIG5ld1RleHQpOwotICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShuZXdUZXh0LCByZWZlcmVuY2VDaGlsZCk7Ci0gICAgICAgICAgICByZWZlcmVuY2VDaGlsZCA9IG5ld1RleHQ7Ci0gICAgICAgICAgICBicmVhayBMT09QOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6Ci0gICAgICAgIHsKLSAgICAgICAgICBicmVhayBMT09QOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJJbnNlcnRlZC4uLiIgKyBuZXdDaGlsZCk7Ci0gICAgcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgcmVmZXJlbmNlQ2hpbGQpOwotCi0gICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50IGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKE5vZGUgcGFyZW50Tm9kZSwgTm9kZSBub2RlVG9BZGQpCi0gIHsKLSAgICBFbGVtZW50IHJlc3VsdCA9IG51bGw7Ci0gICAgaW50IGEgPSBnZXRQcmVjZWRlbmNlKG5vZGVUb0FkZCk7Ci0KLSAgICBmb3IgKE5vZGUgbm9kZSA9IHBhcmVudE5vZGUuZ2V0Rmlyc3RDaGlsZCgpOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCkpCi0gICAgewotICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgaW50IGIgPSBnZXRQcmVjZWRlbmNlKG5vZGUpOwotICAgICAgICBpZiAoYiA+PSBhKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gKEVsZW1lbnQpbm9kZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBIYXNoTWFwIHByZWNlZGVuY2VNYXAgPSBjcmVhdGVQcmVjZWRlbmNlTWFwKCk7Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0UHJlY2VkZW5jZShOb2RlIG5vZGUpCi0gIHsKLSAgICBpbnQgcmVzdWx0ID0gMjsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gbm9kZS5nZXRMb2NhbE5hbWUoKTsKLSAgICBpZiAobG9jYWxOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgSW50ZWdlciBpbnRlZ2VyID0gKEludGVnZXIpcHJlY2VkZW5jZU1hcC5nZXQobG9jYWxOYW1lKTsKLSAgICAgIGlmIChpbnRlZ2VyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgSGFzaE1hcCBjcmVhdGVQcmVjZWRlbmNlTWFwKCkKLSAgewotICAgIEhhc2hNYXAgaGFzaE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcigxKSk7Ci0gICAgaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5JTVBPUlRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDMpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLlRZUEVTX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig0KSk7Ci0gICAgaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5NRVNTQUdFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig1KSk7Ci0gICAgaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5QT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDYpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDcpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLlNFUlZJQ0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDgpKTsKLSAgICByZXR1cm4gaGFzaE1hcDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkb3B0QnkoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBjb21wb25lbnRzID0gZ2V0V1NETENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgY29tcG9uZW50cy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCBjaGlsZCA9IGNvbXBvbmVudHMubmV4dCgpOwotICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgewotICAgICAgICAoKFdTRExFbGVtZW50SW1wbCljaGlsZCkuYWRvcHRCeShkZWZpbml0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1VwZGF0aW5nRE9NKCkKLSAgewotICAgIHJldHVybiB1cGRhdGluZ0RPTTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBpZiAoIWlzVXBkYXRpbmdET00oKSkKLSAgICB7Ci0gICAgICBpZiAoIWlzUmVjb25jaWxpbmcpCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGNoYW5nZUZvciAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICAgIHJlY29uY2lsZShjaGFuZ2VkRWxlbWVudCk7Ci0KLSAgICAgICAgV1NETEVsZW1lbnQgdGhlQ29udGFpbmVyID0gZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmICh0aGVDb250YWluZXIgIT0gbnVsbCAmJiB0aGVDb250YWluZXIuZ2V0RWxlbWVudCgpID09IGNoYW5nZWRFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpdGhlQ29udGFpbmVyKS5lbGVtZW50Q2hhbmdlZChjaGFuZ2VkRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0gICAgICAgIHRyYXZlcnNlVG9Sb290Rm9yUGF0Y2hpbmcoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgOyAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgaW50ZXJuYWwgcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICA7IC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBET00gcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKiBUT0RPLi4uIHJlbW92ZSB0aGlzIG1ldGhvZCEKLSAgICovCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgcmV0dXJuIGdldFdTRExDb250ZW50cygpOwotICB9Ci0KLSAgLyoKLSAgIHByb3RlY3RlZCBFbGVtZW50IGdldEVsZW1lbnRGb3JNb2RlbE9iamVjdChPYmplY3QgbW9kZWxPYmplY3QpCi0gICB7Ci0gICBFbGVtZW50IHJlc3VsdCA9IG51bGw7Ci0gICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgewotICAgcmVzdWx0ID0gKEVsZW1lbnQpIG1vZGVsT2JqZWN0OwotICAgfQotICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLSAgIHsKLSAgIHJlc3VsdCA9ICgoV1NETEVsZW1lbnQpIG1vZGVsT2JqZWN0KS5nZXRFbGVtZW50KCk7Ci0gICB9Ci0gICByZXR1cm4gcmVzdWx0OwotICAgfQotICAgKi8KLQotICBwcml2YXRlIENvbGxlY3Rpb24gZ2V0Q29udGVudE5vZGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBDb2xsZWN0aW9uIHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKE5vZGUgY2hpbGQgPSBjaGFuZ2VkRWxlbWVudC5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICB7Ci0gICAgICBpZiAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0LmFkZChjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLyBTb21lIHN1YmNsYXNzZXMgdXNlIHRoaXMgbWV0aG9kCi0gIHByb3RlY3RlZCBRTmFtZSBjcmVhdGVRTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBwcmVmaXhlZE5hbWUpCi0gIHsKLSAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgbmV3IGZvcm0gdG8gcHJlc2VydmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpbiBjYXNlIHNvbWVvbmUKLSAgICAvLyBlbHNlIGNhbGxzIHRoaXMgbWV0aG9kLgotCi0gICAgcmV0dXJuIGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHByZWZpeGVkTmFtZSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIFFOYW1lIGZyb20gYSBwcmVmaXhlZCBuYW1lLiBUYWtlcyBpbnRvIGFjY291bnQgbG9jYWxseSBkZWZpbmVkCi0gICAqIG5hbWVzcGFjZSBwcmVmaXhlcy4KLSAgICogCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAqICAgICAgICAgIHRoZSBlbmNsb3NpbmcgZGVmaW5pdGlvbi4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHBhcmFtIHByZWZpeGVkTmFtZQotICAgKiAgICAgICAgICB0aGUgcHJlZml4ZWQgbmFtZSB0byBjb252ZXJ0IHRvIFFOYW1lCi0gICAqIEBwYXJhbSBlbGVtZW50Ci0gICAqICAgICAgICAgIHRoZSBlbmNsb3NpbmcgZWxlbWVudC4gTWF5IGJlIG51bGwgaW4gd2hpY2ggY2FzZSB0aGUgcHJlZml4IGlzCi0gICAqICAgICAgICAgIG9ubHkgbG9va2VkIHVwIGFtb25nIHRoZSBvbmVzIGRlZmluZWQgYXQgdGhlIGRlZmluaXRpb24gbGV2ZWwuCi0gICAqIEByZXR1cm4gdGhlIFFOYW1lIGVxdWl2YWxlbnQgZm9yIHRoZSBnaXZlbiBwcmVmaXhlZCBuYW1lLCBvciBudWxsIGlmIGEKLSAgICogICAgICAgICBuYW1lc3BhY2UgcHJlZml4IGNhbm5vdCBiZSBmb3VuZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZSBVUkkgb3IgaWYKLSAgICogICAgICAgICB0aGUgcHJlZml4ZWQgbmFtZSBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIGNyZWF0ZVFOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHByZWZpeGVkTmFtZSwgRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHByZWZpeGVkTmFtZSwgZWxlbWVudCwgZmFsc2UpOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlcyBhIFFOYW1lIGZyb20gYSBwcmVmaXhlZCBuYW1lLiBUYWtlcyBpbnRvIGFjY291bnQgbG9jYWxseSBkZWZpbmVkCi0gICAqIG5hbWVzcGFjZSBwcmVmaXhlcy4gU2VsZWN0aXZlbHkgYWxsb3dzIG51bGwgbmFtZXNwYWNlIFVSSXMuCi0gICAqIAotICAgKiBAcGFyYW0gZGVmaW5pdGlvbgotICAgKiAgICAgICAgICB0aGUgZW5jbG9zaW5nIGRlZmluaXRpb24uIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEBwYXJhbSBwcmVmaXhlZE5hbWUKLSAgICogICAgICAgICAgdGhlIHByZWZpeGVkIG5hbWUgdG8gY29udmVydCB0byBRTmFtZQotICAgKiBAcGFyYW0gZWxlbWVudAotICAgKiAgICAgICAgICB0aGUgZW5jbG9zaW5nIGVsZW1lbnQuIE1heSBiZSBudWxsIGluIHdoaWNoIGNhc2UgdGhlIHByZWZpeCBpcwotICAgKiAgICAgICAgICBvbmx5IGxvb2tlZCB1cCBhbW9uZyB0aGUgb25lcyBkZWZpbmVkIGF0IHRoZSBkZWZpbml0aW9uIGxldmVsLgotICAgKiBAcGFyYW0gYWxsb3dOdWxsTmFtZXNwYWNlVVJJIGlmIHRydWUgYW5kIHRoZSBwcmVmaXhlZCBuYW1lIGRvZXMgbm90IGhhdmUgCi0gICAqICAgICAgICAgIGEgcHJlZml4IGEgUU5hbWUgaXMgY29uc3RydWN0ZWQgYW5kIHJldHVybmVkIHVzaW5nIAotICAgKiAgICAgICAgICB7QGxpbmsgWE1MQ29uc3RhbnRzI05VTExfTlNfVVJJfSBmb3IgdGhlIG5hbWVzcGFjZSBVUkkgICAgICAgICAgCi0gICAqIEByZXR1cm4gdGhlIFFOYW1lIGVxdWl2YWxlbnQgZm9yIHRoZSBnaXZlbiBwcmVmaXhlZCBuYW1lLCBvciBudWxsIGlmIGEKLSAgICogICAgICAgICBuYW1lc3BhY2UgcHJlZml4IGNhbm5vdCBiZSBmb3VuZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZSBVUkkgb3IgaWYKLSAgICogICAgICAgICB0aGUgcHJlZml4ZWQgbmFtZSBpcyBudWxsLiAKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSBjcmVhdGVRTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBwcmVmaXhlZE5hbWUsIEVsZW1lbnQgZWxlbWVudCwgYm9vbGVhbiBhbGxvd051bGxOYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBRTmFtZSBxbmFtZSA9IG51bGw7Ci0gICAgaWYgKHByZWZpeGVkTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IHByZWZpeGVkTmFtZS5pbmRleE9mKCI6Iik7IC8vLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHByZWZpeCA9IChpbmRleCA9PSAtMSkgPyAiIiA6IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2UocHJlZml4KTsKLQotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsICYmIGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBsb2NhbGx5IGRlZmluZWQgbmFtZXNwYWNlIHByZWZpeC4KLQotICAgICAgICBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2VVUklGcm9tUHJlZml4KGVsZW1lbnQsIHByZWZpeCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCB8fCAoYWxsb3dOdWxsTmFtZXNwYWNlVVJJICYmIHByZWZpeC5sZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGxvY2FsUGFydCA9IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICAgICAgcW5hbWUgPSBuZXcgUU5hbWUobmFtZXNwYWNlLCBsb2NhbFBhcnQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcW5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogR2l2ZW4gYSBwcmVmaXggYW5kIGEgbm9kZSwgZmluZHMgdGhlIG5hbWVzcGFjZSBVUkkgcG9pbnRlZCB0byBieSB0aGUKLSAgICogcHJlZml4LiBXYWxrcyB0aGUgZWxlbWVudCBjb250YWlubWVudCBoaWVyYXJjaHkgdW50aWwgaXQgZmluZHMgb25lIG9yIGl0Ci0gICAqIHJlYWNoZXMgdGhlIGRvY3VtZW50IHJvb3QuCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICB0aGUgc3RhcnRpbmcgbm9kZQotICAgKiBAcGFyYW0gcHJlZml4Ci0gICAqICAgICAgICAgIHRoZSBwcmVmaXggdG8gZmluZCBhbiB4bWxuczpwcmVmaXg9dXJpIGZvcgotICAgKiAKLSAgICogQHJldHVybiB0aGUgbmFtZXNwYWNlIFVSSSBvciBudWxsIGlmIG5vdCBmb3VuZAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSUZyb21QcmVmaXgoTm9kZSBub2RlLCBTdHJpbmcgcHJlZml4KQotICB7Ci0gICAgaWYgKG5vZGUgPT0gbnVsbCB8fCBwcmVmaXggPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBOb2RlIGN1cnJlbnROb2RlID0gbm9kZTsKLQotICAgIHdoaWxlIChjdXJyZW50Tm9kZSAhPSBudWxsICYmIGN1cnJlbnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGdldEF0dHJpYnV0ZU5TKChFbGVtZW50KWN1cnJlbnROb2RlLCBYU0RDb25zdGFudHMuWE1MTlNfVVJJXzIwMDAsIHByZWZpeCk7Ci0KLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0cmlldmVzIGFuIGF0dHJpYnV0ZSdzIHZhbHVlLgotICAgKiBAcGFyYW0gZWxlbWVudCB0aGUgY29udGFpbmluZyBlbGVtZW50LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJIHRoZSBuYW1lc3BhY2UgVVJJLgotICAgKiBAcGFyYW0gbG9jYWxQYXJ0IHRoZSBsb2NhbCBuYW1lLgotICAgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUncyB2YWx1ZSBpZiBwcmVzZW50LCBvciBudWxsIGlmIG5vdC4gCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlTlMoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxQYXJ0KQotICB7Ci0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gbnVsbDsKLSAgICBBdHRyIGF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxQYXJ0KTsKLQotICAgIGlmIChhdHRyaWJ1dGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZS5nZXRWYWx1ZSgpOwotICAgIH0KLQotICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgdXBkYXRlRWxlbWVudChib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZGVlcCB8fCBnZXRFbGVtZW50KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cGRhdGVFbGVtZW50KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjaGFuZ2VBdHRyaWJ1dGUobnVsbCk7Ci0gICAgICBjaGFuZ2VSZWZlcmVuY2UobnVsbCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdXBkYXRlRWxlbWVudCgpCi0gIHsKLSAgICBpZiAoZ2V0RWxlbWVudCgpID09IG51bGwpCi0gICAgewotICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICBjcmVhdGVFbGVtZW50KCk7Ci0gICAgICBpc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0gICAgfQotCi0gICAgY2hhbmdlQXR0cmlidXRlKG51bGwpOwotICAgIGNoYW5nZVJlZmVyZW5jZShudWxsKTsKLQotICAgIE9iamVjdCBvYmogPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgY29udGFpbm1lbnRzID0gZUNsYXNzKCkuZ2V0RUFsbENvbnRhaW5tZW50cygpLml0ZXJhdG9yKCk7IGNvbnRhaW5tZW50cy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA9IChFUmVmZXJlbmNlKWNvbnRhaW5tZW50cy5uZXh0KCk7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BKQotICAgICAgewotICAgICAgICAvLyBUQkQgLSBUaGlzIGlzIGFuIGluc3RhbmNlIG9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGFuZAotICAgICAgICAvLyBlUmVmZXJuY2UgaXMgWFNEU2NoZW1hLiBXaGF0IGRvIHdlIHdhbnQgdG8gZG8gZm9yIHVwZGF0ZT8KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFlUmVmZXJlbmNlLmlzVHJhbnNpZW50KCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChlUmVmZXJlbmNlLmlzTWFueSgpKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBvYmplY3RzID0gKChDb2xsZWN0aW9uKWVHZXQoZVJlZmVyZW5jZSkpLml0ZXJhdG9yKCk7IG9iamVjdHMuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvYmogPSBvYmplY3RzLm5leHQoKTsKLSAgICAgICAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB8fCBvYmogPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gU2tpcCBpdC4gUHJvYmFibHkgdGhpcyBpcyBOYW1lc3BhY2UuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KW9iajsKLSAgICAgICAgICAgICAgLy9oYW5kbGVFbGVtZW50Rm9yQWRvcHQoZVJlZmVyZW5jZSwgd3NkbEVsZW1lbnQpOwotICAgICAgICAgICAgICAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkudXBkYXRlRWxlbWVudCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCllR2V0KGVSZWZlcmVuY2UpOwotICAgICAgICAgIGlmICh3c2RsRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vaGFuZGxlRWxlbWVudEZvckFkb3B0KGVSZWZlcmVuY2UsICB3c2RsRWxlbWVudCk7Ci0gICAgICAgICAgICAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkudXBkYXRlRWxlbWVudCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSAvLyBlbmQgZWxzZSBpZgotICAgIH0gLy8gZW5kIGZvcgotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLkxpdGVyYWxzLldTRExfRUxFTUVOVF9fRUxFTUVOVCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsICYmICFpc1JlY29uY2lsaW5nKQotICAgICAgewotICAgICAgICBmb3IgKE5vZGUgcm9vdERvY3VtZW50ID0gdGhlRWxlbWVudC5nZXRQYXJlbnROb2RlKCk7IHJvb3REb2N1bWVudCAhPSBudWxsOyByb290RG9jdW1lbnQgPSByb290RG9jdW1lbnQuZ2V0UGFyZW50Tm9kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHJvb3REb2N1bWVudC5nZXROb2RlVHlwZSgpID09IE5vZGUuRE9DVU1FTlRfTk9ERSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpc1JlY29uY2lsaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVjb25jaWxlQXR0cmlidXRlcyhnZXRFbGVtZW50KCkpOwotICAgICAgICAgICAgICBpc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlY29uY2lsZShnZXRFbGVtZW50KCkpOwotICAgICAgICAgICAgICBpc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgIHRyYXZlcnNlVG9Sb290Rm9yUGF0Y2hpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdHJhdmVyc2VUb1Jvb3RGb3JQYXRjaGluZygpCi0gIHsKLSAgICBpZiAoIWlzUmVjb25jaWxpbmcpCi0gICAgewotICAgICAgV1NETEVsZW1lbnRJbXBsIGNvbnRhaW5lciA9IChXU0RMRWxlbWVudEltcGwpZ2V0Q29udGFpbmVyKCk7Ci0gICAgICBpZiAoY29udGFpbmVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvbnRhaW5lci50cmF2ZXJzZVRvUm9vdEZvclBhdGNoaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICByZWNvbmNpbGVBdHRyaWJ1dGVzKGNoYW5nZWRFbGVtZW50KTsKLSAgICByZWNvbmNpbGVDb250ZW50cyhjaGFuZ2VkRWxlbWVudCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlY29uY2lsZUNvbnRlbnRzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IHJlbWFpbmluZ01vZGVsT2JqZWN0cyA9IG5ldyBBcnJheUxpc3QoZ2V0V1NETENvbnRlbnRzKCkpOwotCi0gICAgQ29sbGVjdGlvbiBjb250ZW50Tm9kZXMgPSBnZXRDb250ZW50Tm9kZXMoY2hhbmdlZEVsZW1lbnQpOwotCi0gICAgRWxlbWVudCB0aGVEb2N1bWVudGF0aW9uRWxlbWVudCA9IG51bGw7Ci0KLSAgICAvLyBmb3IgZWFjaCBhcHBsaWNhYmxlIGNoaWxkIG5vZGUgb2YgY2hhbmdlZEVsZW1lbnQKLSAgICBMT09QOiBmb3IgKEl0ZXJhdG9yIGkgPSBjb250ZW50Tm9kZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudClpLm5leHQoKTsKLSAgICAgIC8vIFNldCBEb2N1bWVudGF0aW9uIGVsZW1lbnQgaWYgZXhpc3RzCi0gICAgICBpZiAoV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHLmVxdWFscyhjaGlsZC5nZXRMb2NhbE5hbWUoKSkKLSAgICAgICAgJiYgV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLCBXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSkpCi0gICAgICB7Ci0gICAgICAgIC8vIGFzc3VtZSB0aGUgZmlyc3QgJ2RvY3VtZW50YXRpb24nIGVsZW1lbnQgaXMgJ3RoZScgZG9jdW1lbnRhdGlvbiBlbGVtZW50Ci0gICAgICAgIC8vICd0aGVyZSBjYW4gYmUgb25seSBvbmUhJwotICAgICAgICBpZiAodGhlRG9jdW1lbnRhdGlvbkVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRoZURvY3VtZW50YXRpb25FbGVtZW50ID0gY2hpbGQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGdvIHRocnUgdGhlIG1vZGVsIG9iamVjdHMgdG8gY29sbGVjdCBtYXRjaGluZyBvYmplY3QgZm9yIHJldXNlCi0gICAgICBmb3IgKEl0ZXJhdG9yIGNvbnRlbnRzID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGNvbnRlbnRzLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBtb2RlbE9iamVjdCA9IChPYmplY3QpY29udGVudHMubmV4dCgpOwotICAgICAgICBpZiAoKChXU0RMRWxlbWVudCltb2RlbE9iamVjdCkuZ2V0RWxlbWVudCgpID09IGNoaWxkKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGVudHMucmVtb3ZlKCk7IC8vIHJlbW92ZXMgdGhlICdjaGlsZCcgTm9kZSBmcm9tIHRoZSByZW1haW5pbmdNb2RlbE9iamVjdHMgbGlzdAotICAgICAgICAgIGNvbnRpbnVlIExPT1A7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gaWYgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBoYXMgY2hhbmdlZC4uLiB1cGRhdGUgaXQKLSAgICAgIC8vCi0gICAgICBpZiAodGhlRG9jdW1lbnRhdGlvbkVsZW1lbnQgIT0gZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkKLSAgICAgIHsKLSAgICAgICAgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGhlRG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyB3ZSBoYXZlbid0IGZvdW5kIGEgbWF0Y2hpbmcgbW9kZWwgb2JqZWN0IGZvciB0aGUgTm9kZSwgc2Ugd2UgbWF5IG5lZWQgdG8KLSAgICAgIC8vIGNyZWF0ZSBhIG5ldyBtb2RlbCBvYmplY3QKLSAgICAgIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gICAgfQotCi0gICAgLy8gbm93IHdlIGNhbiByZW1vdmUgdGhlIHJlbWFpbmluZyBtb2RlbCBvYmplY3RzCi0gICAgaGFuZGxlUmVjb25jaWxpYXRpb24ocmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpCi0gIHsKLSAgICBpZiAoZW5jbG9zaW5nRGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgcmV0dXJuIGVuY2xvc2luZ0RlZmluaXRpb247Ci0KLSAgICAvLyBUQkQgLSBSZXZpc2l0Ci0gICAgLy9FT2JqZWN0IGMgPSBlQ29udGFpZXIoKTsgYyAhPSBudWxsOyBjID0gYy5lQ29udGFpbnRlcigpKQotICAgIC8vewotCi0gICAgZm9yIChXU0RMRWxlbWVudCBjb250YWluZXIgPSB0aGlzOyBjb250YWluZXIgIT0gbnVsbDsgY29udGFpbmVyID0gKChXU0RMRWxlbWVudEltcGwpY29udGFpbmVyKS5nZXRDb250YWluZXIoKSkKLSAgICB7Ci0gICAgICBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgZW5jbG9zaW5nRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWNvbnRhaW5lcjsKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0RlZmluaXRpb247Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKgotICAgcHVibGljIERlZmluaXRpb24gZ2V0Um9vdEVuY2xvc2luZ0RlZmluaXRpb24oKQotICAgewotICAgaWYgKGVuY2xvc2luZ0RlZmluaXRpb24gPT0gbnVsbCkKLSAgIHsKLSAgIFJlc291cmNlIHJlc291cmNlID0gZVJlc291cmNlKCk7Ci0gICBMaXN0IGNvbnRlbnRzID0gcmVzb3VyY2UuZ2V0Q29udGVudHMoKTsKLSAgIGlmIChjb250ZW50cy5zaXplKCkgPT0gMSAKLSAgICYmIGNvbnRlbnRzLmdldCgwKSBpbnN0YW5jZW9mIERlZmluaXRpb24pCi0gICBlbmNsb3NpbmdEZWZpbml0aW9uID0gKERlZmluaXRpb24pY29udGVudHMuZ2V0KDApOwotICAgfSAKLSAgIHJldHVybiBlbmNsb3NpbmdEZWZpbml0aW9uOwotICAgfQotICAgKi8KLQotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0Q29udGFpbmVyKCkKLSAgewotICAgIHJldHVybiBlQ29udGFpbmVyKCkgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCA/IChXU0RMRWxlbWVudCllQ29udGFpbmVyKCkgOiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgbmljZVNldEF0dHJpYnV0ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyaWJ1dGUsIFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBkb20gYXR0cmlidXRlIHdyaXRlYmFjayBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZU5TKG51bGwsIGF0dHJpYnV0ZSkpCi0gICAgICB7Ci0gICAgICAgIHVwZGF0aW5nRE9NID0gdHJ1ZTsKLSAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLSAgICAgICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlTlMobnVsbCwgYXR0cmlidXRlKSB8fCAhZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBhdHRyaWJ1dGUpLmVxdWFscyh2YWx1ZSkpCi0gICAgewotICAgICAgdXBkYXRpbmdET00gPSB0cnVlOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLSAgICAgIHVwZGF0aW5nRE9NID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuaWNlQ3JlYXRlTmFtZXNwYWNlQXR0cmlidXRlKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIHVuaXF1ZSBwcmVmaXggZm9yICJuYW1lc3BhY2UuIgotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZSwgU3RyaW5nIHVyaUxpc3QpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIGRvbSBhdHRyaWJ1dGUgd3JpdGViYWNrIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHVyaUxpc3QgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cGRhdGluZ0RPTSA9IHRydWU7Ci0gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwotICAgICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciB2YWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodXJpTGlzdCwgIiAiKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVFbGVtZW50cygpOykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHVyaSA9IHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1cmk7Ci0gICAgICAgIGludCBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZigiIyIpOwotICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaW5kZXggPiAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZSA9IHVyaS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBsb2NhbE5hbWUgPSB1cmkuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHF1YWxpZmllciA9IFhTRENvbnN0YW50cy5sb29rdXBRdWFsaWZpZXIoZWxlbWVudCwgbmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcXVhbGlmaWVyID0gbmljZUNyZWF0ZU5hbWVzcGFjZUF0dHJpYnV0ZShuYW1lc3BhY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHFOYW1lID0gcXVhbGlmaWVyID09IG51bGwgfHwgcXVhbGlmaWVyLmxlbmd0aCgpID09IDAgPyBsb2NhbE5hbWUgOiBxdWFsaWZpZXIgKyAiOiIgKyBsb2NhbE5hbWU7Ci0KLSAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICB2YWx1ZS5hcHBlbmQoJyAnKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZS5hcHBlbmQocU5hbWUpOwotICAgICAgfQotCi0gICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlTlMobnVsbCwgYXR0cmlidXRlKSB8fCAhZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBhdHRyaWJ1dGUpLmVxdWFscyh2YWx1ZS50b1N0cmluZygpKSkKLSAgICAgIHsKLSAgICAgICAgdXBkYXRpbmdET00gPSB0cnVlOwotICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIGF0dHJpYnV0ZSwgdmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHVwZGF0aW5nRE9NID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpIC8vIFNob3VsZCBJIG1ha2UgdGhpcyBhYnN0cmFjdD8KLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIEVsZW1lbnQgY3JlYXRlRWxlbWVudChpbnQgbm9kZVR5cGUpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLSAgICAgIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbil0aGlzOwotICAgIGVsc2UKLSAgICAgIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0KLSAgICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIGRvY3VtZW50ID0gKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVEb2N1bWVudCgpOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIG5hbWVzcGFjZSBwcmVmaXggZm9yIHRoZSBXU0RMIG5hbWVzcGFjZQotICAgIFN0cmluZyB3c2RsTmFtZXNwYWNlID0gV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkk7Ci0gICAgU3RyaW5nIHF1YWxpZmllciA9IGRlZmluaXRpb24uZ2V0UHJlZml4KHdzZGxOYW1lc3BhY2UpOwotCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHdzZGxOYW1lc3BhY2UsIChxdWFsaWZpZXIgPT0gbnVsbCA/ICIiIDogcXVhbGlmaWVyICsgIjoiKQotICAgICAgKyBXU0RMQ29uc3RhbnRzLmdldEVsZW1lbnRUYWcobm9kZVR5cGUpKTsKLQotICAgIGlmIChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSA9PSBudWxsKQotICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7Ci0KLSAgICBpZiAoZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSAhPSBudWxsKQotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5pbXBvcnROb2RlKGdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHRydWUpKTsKLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZGVlcCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGNvbnRlbnRzID0gZ2V0V1NETENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgY29udGVudHMuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGNvbnRlbnQgPSBjb250ZW50cy5uZXh0KCk7Ci0gICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEVsZW1lbnRJbXBsIGVsZW1lbnQgPSAoV1NETEVsZW1lbnRJbXBsKWNvbnRlbnQ7Ci0gICAgICAgICAgZWxlbWVudC5pc1JlY29uY2lsaW5nID0gdHJ1ZTsKLSAgICAgICAgICBlbGVtZW50LnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gICAgICAgICAgZWxlbWVudC5pc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0QmVzdFdTRExFbGVtZW50KExpc3QgZWxlbWVudFBhdGgpCi0gIHsKLSAgICBXU0RMRWxlbWVudCByZXN1bHQgPSB0aGlzOwotICAgIGZvciAoSXRlcmF0b3IgY29tcG9uZW50cyA9IGdldFdTRExDb250ZW50cygpLml0ZXJhdG9yKCk7IGNvbXBvbmVudHMuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gY29tcG9uZW50cy5uZXh0KCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEVsZW1lbnRJbXBsKQotICAgICAgewotICAgICAgICBXU0RMRWxlbWVudEltcGwgY2hpbGRXU0RMRWxlbWVudCA9IChXU0RMRWxlbWVudEltcGwpb2JqZWN0OwotCi0gICAgICAgIGlmIChlbGVtZW50UGF0aC5jb250YWlucyhjaGlsZFdTRExFbGVtZW50LmdldEVsZW1lbnQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBjaGlsZFdTRExFbGVtZW50OwotICAgICAgICAgIFdTRExFbGVtZW50IGJldHRlcldTRExFbGVtZW50ID0gY2hpbGRXU0RMRWxlbWVudC5nZXRCZXN0V1NETEVsZW1lbnQoZWxlbWVudFBhdGgpOwotICAgICAgICAgIGlmIChiZXR0ZXJXU0RMRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGJldHRlcldTRExFbGVtZW50OwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghY29uc2lkZXJBbGxDb250YWluc0ZvckJlc3RXU0RMRWxlbWVudCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25zaWRlckFsbENvbnRhaW5zRm9yQmVzdFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVsZW1lbnRBdHRyaWJ1dGVzQ2hhbmdlZChFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgaWYgKCFpc1VwZGF0aW5nRE9NKCkpCi0gICAgewotICAgICAgaWYgKCFpc1JlY29uY2lsaW5nKQotICAgICAgewotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY2hhbmdlRm9yICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotCi0gICAgICAgIGlzUmVjb25jaWxpbmcgPSB0cnVlOwotICAgICAgICByZWNvbmNpbGVBdHRyaWJ1dGVzKGNoYW5nZWRFbGVtZW50KTsKLQotICAgICAgICBXU0RMRWxlbWVudEltcGwgdGhlQ29udGFpbmVyID0gKFdTRExFbGVtZW50SW1wbClnZXRDb250YWluZXIoKTsKLSAgICAgICAgaWYgKHRoZUNvbnRhaW5lciAhPSBudWxsICYmIHRoZUNvbnRhaW5lci5nZXRFbGVtZW50KCkgPT0gY2hhbmdlZEVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVDb250YWluZXIuZWxlbWVudEF0dHJpYnV0ZXNDaGFuZ2VkKGNoYW5nZWRFbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICAgICAgdHJhdmVyc2VUb1Jvb3RGb3JQYXRjaGluZygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIGludGVybmFsIHJlY29uY2lsZSBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBET00gcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZWxlbWVudENvbnRlbnRzQ2hhbmdlZChFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgaWYgKCFpc1VwZGF0aW5nRE9NKCkpCi0gICAgewotICAgICAgaWYgKCFpc1JlY29uY2lsaW5nKQotICAgICAgewotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY2hhbmdlRm9yICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotCi0gICAgICAgIGlzUmVjb25jaWxpbmcgPSB0cnVlOwotICAgICAgICByZWNvbmNpbGVDb250ZW50cyhjaGFuZ2VkRWxlbWVudCk7Ci0KLSAgICAgICAgV1NETEVsZW1lbnRJbXBsIHRoZUNvbnRhaW5lciA9IChXU0RMRWxlbWVudEltcGwpZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmICh0aGVDb250YWluZXIgIT0gbnVsbCAmJiB0aGVDb250YWluZXIuZ2V0RWxlbWVudCgpID09IGNoYW5nZWRFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgdGhlQ29udGFpbmVyLmVsZW1lbnRDb250ZW50c0NoYW5nZWQoY2hhbmdlZEVsZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgICAgICB0cmF2ZXJzZVRvUm9vdEZvclBhdGNoaW5nKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgaW50ZXJuYWwgcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIERPTSByZWNvbmNpbGUgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcmVmaXgoTm9kZSBub2RlLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgb2xkUHJlZml4LCBTdHJpbmcgbmV3UHJlZml4KQotICB7Ci0gICAgaWYgKChuYW1lc3BhY2UgPT0gbnVsbCA/IG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCA6IG5hbWVzcGFjZS5lcXVhbHMobm9kZS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICAmJiAob2xkUHJlZml4ID09IG51bGwgPyBub2RlLmdldFByZWZpeCgpID09IG51bGwgOiBvbGRQcmVmaXguZXF1YWxzKG5vZGUuZ2V0UHJlZml4KCkpKSkKLSAgICB7Ci0gICAgICBub2RlLnNldFByZWZpeChuZXdQcmVmaXgpOwotICAgIH0KLQotICAgIGZvciAoTm9kZSBjaGlsZCA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpCi0gICAgewotICAgICAgdXBkYXRlUHJlZml4KGNoaWxkLCBuYW1lc3BhY2UsIG9sZFByZWZpeCwgbmV3UHJlZml4KTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldE5hbWVzcGFjZShFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0VGFnTmFtZSgpOwotICAgIGludCBpbmRleCA9IG5hbWUuaW5kZXhPZigiOiIpOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIG5zUHJlZml4ICA9IG51bGw7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIG5zUHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgbnNQcmVmaXggPSAieG1sbnMiOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IG51bGw7Ci0KLSAgICAvLyBGaXJzdCB0cnkgdG8gbG9jYXRlIHRoZSBuYW1lc3BhY2UgVVJJIGluIHRoZSBkZWZpbml0aW9uJ3MgcHJlZml4IHRvIG5hbWVzcGFjZSBtYXAuCi0gICAgLy8gVGhpcyB3aWxsIHByb3ZpZGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgZXhpc3RpbmcgY2xpZW50cy4KLSAgICAKLSAgICBEZWZpbml0aW9uIGVuY2xvc2luZ0RlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgaWYgKGVuY2xvc2luZ0RlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2VVUkkgPSBlbmNsb3NpbmdEZWZpbml0aW9uLmdldE5hbWVzcGFjZShuc1ByZWZpeCk7Ci0gICAgfQotCi0gICAgLy8gV2UgZGlkIG5vdCBmaW5kIGl0IGF0IHRoZSB0b3AgbGV2ZWwsIHRyeSB0byBmaW5kIGEgbG9jYWxseSBkZWZpbmVkIG5hbWVzcGFjZSBwcmVmaXguCi0KLSAgICBpZiAobmFtZXNwYWNlVVJJID09IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlVVJJID0gZ2V0TmFtZXNwYWNlVVJJRnJvbVByZWZpeChlbGVtZW50LCBuc1ByZWZpeCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0TG9jYWxOYW1lKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gZWxlbWVudC5nZXRUYWdOYW1lKCk7Ci0gICAgaW50IGluZGV4ID0gbmFtZS5pbmRleE9mKCI6Iik7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gIH0KLQotfSAvL1dTRExFbGVtZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzc3NTU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBXU0RMRmFjdG9yeQotewotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMRmFjdG9yeSBpbml0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExGYWN0b3J5IHRoZVdTRExGYWN0b3J5ID0gKFdTRExGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9XU0RMIik7IC8vJE5PTi1OTFMtMSQgCi0gICAgICBpZiAodGhlV1NETEZhY3RvcnkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRoZVdTRExGYWN0b3J5OwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExGYWN0b3J5SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykKLSAgewotICAgIHN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFOgotICAgICAgcmV0dXJuIGNyZWF0ZVBvcnRUeXBlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTjoKLSAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRToKLSAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlUGFydCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HOgotICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmcoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT046Ci0gICAgICByZXR1cm4gY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFOgotICAgICAgcmV0dXJuIGNyZWF0ZVNlcnZpY2UoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVDoKLSAgICAgIHJldHVybiBjcmVhdGVQb3J0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVDoKLSAgICAgIHJldHVybiBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OOgotICAgICAgcmV0dXJuIGNyZWF0ZURlZmluaXRpb24oKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUOgotICAgICAgcmV0dXJuIGNyZWF0ZUltcG9ydCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTlBVVDoKLSAgICAgIHJldHVybiBjcmVhdGVJbnB1dCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PVVRQVVQ6Ci0gICAgICByZXR1cm4gY3JlYXRlT3V0cHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkZBVUxUOgotICAgICAgcmV0dXJuIGNyZWF0ZUZhdWx0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVQ6Ci0gICAgICByZXR1cm4gY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUOgotICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVDoKLSAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nRmF1bHQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFOgotICAgICAgcmV0dXJuIGNyZWF0ZU5hbWVzcGFjZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5UWVBFUzoKLSAgICAgIHJldHVybiBjcmVhdGVUeXBlcygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDoKLSAgICAgIHJldHVybiBjcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY3JlYXRlRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5RTkFNRToKLSAgICAgIHJldHVybiBjcmVhdGVRTmFtZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fVFlQRToKLSAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb25UeXBlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRPTV9FTEVNRU5UOgotICAgICAgcmV0dXJuIGNyZWF0ZURPTUVsZW1lbnRGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FWENFUFRJT046Ci0gICAgICByZXR1cm4gY3JlYXRlV1NETEV4Y2VwdGlvbkZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ET01fRE9DVU1FTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlRE9NRG9jdW1lbnRGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5RTkFNRToKLSAgICAgIHJldHVybiBjb252ZXJ0UU5hbWVUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fVFlQRToKLSAgICAgIHJldHVybiBjb252ZXJ0T3BlcmF0aW9uVHlwZVRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRPTV9FTEVNRU5UOgotICAgICAgcmV0dXJuIGNvbnZlcnRET01FbGVtZW50VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FWENFUFRJT046Ci0gICAgICByZXR1cm4gY29udmVydFdTRExFeGNlcHRpb25Ub1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ET01fRE9DVU1FTlQ6Ci0gICAgICByZXR1cm4gY29udmVydERPTURvY3VtZW50VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZSBjcmVhdGVQb3J0VHlwZSgpCi0gIHsKLSAgICBQb3J0VHlwZUltcGwgcG9ydFR5cGUgPSBuZXcgUG9ydFR5cGVJbXBsKCk7Ci0gICAgcmV0dXJuIHBvcnRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uIGNyZWF0ZU9wZXJhdGlvbigpCi0gIHsKLSAgICBPcGVyYXRpb25JbXBsIG9wZXJhdGlvbiA9IG5ldyBPcGVyYXRpb25JbXBsKCk7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgY3JlYXRlTWVzc2FnZSgpCi0gIHsKLSAgICBNZXNzYWdlSW1wbCBtZXNzYWdlID0gbmV3IE1lc3NhZ2VJbXBsKCk7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGNyZWF0ZVBhcnQoKQotICB7Ci0gICAgUGFydEltcGwgcGFydCA9IG5ldyBQYXJ0SW1wbCgpOwotICAgIHJldHVybiBwYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZyBjcmVhdGVCaW5kaW5nKCkKLSAgewotICAgIEJpbmRpbmdJbXBsIGJpbmRpbmcgPSBuZXcgQmluZGluZ0ltcGwoKTsKLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gY3JlYXRlQmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uSW1wbCBiaW5kaW5nT3BlcmF0aW9uID0gbmV3IEJpbmRpbmdPcGVyYXRpb25JbXBsKCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoKQotICB7Ci0gICAgU2VydmljZUltcGwgc2VydmljZSA9IG5ldyBTZXJ2aWNlSW1wbCgpOwotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUG9ydCBjcmVhdGVQb3J0KCkKLSAgewotICAgIFBvcnRJbXBsIHBvcnQgPSBuZXcgUG9ydEltcGwoKTsKLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IG5ldyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwoKTsKLSAgICByZXR1cm4gZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oKQotICB7Ci0gICAgRGVmaW5pdGlvbkltcGwgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uSW1wbCgpOwotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGNyZWF0ZUltcG9ydCgpCi0gIHsKLSAgICBJbXBvcnRJbXBsIGltcG9ydF8gPSBuZXcgSW1wb3J0SW1wbCgpOwotICAgIHJldHVybiBpbXBvcnRfOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSW5wdXQgY3JlYXRlSW5wdXQoKQotICB7Ci0gICAgSW5wdXRJbXBsIGlucHV0ID0gbmV3IElucHV0SW1wbCgpOwotICAgIHJldHVybiBpbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE91dHB1dCBjcmVhdGVPdXRwdXQoKQotICB7Ci0gICAgT3V0cHV0SW1wbCBvdXRwdXQgPSBuZXcgT3V0cHV0SW1wbCgpOwotICAgIHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBGYXVsdCBjcmVhdGVGYXVsdCgpCi0gIHsKLSAgICBGYXVsdEltcGwgZmF1bHQgPSBuZXcgRmF1bHRJbXBsKCk7Ci0gICAgcmV0dXJuIGZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGNyZWF0ZUJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICBCaW5kaW5nSW5wdXRJbXBsIGJpbmRpbmdJbnB1dCA9IG5ldyBCaW5kaW5nSW5wdXRJbXBsKCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPdXRwdXQgY3JlYXRlQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0SW1wbCBiaW5kaW5nT3V0cHV0ID0gbmV3IEJpbmRpbmdPdXRwdXRJbXBsKCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nRmF1bHQgY3JlYXRlQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIEJpbmRpbmdGYXVsdEltcGwgYmluZGluZ0ZhdWx0ID0gbmV3IEJpbmRpbmdGYXVsdEltcGwoKTsKLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTmFtZXNwYWNlIGNyZWF0ZU5hbWVzcGFjZSgpCi0gIHsKLSAgICBOYW1lc3BhY2VJbXBsIG5hbWVzcGFjZSA9IG5ldyBOYW1lc3BhY2VJbXBsKCk7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFR5cGVzIGNyZWF0ZVR5cGVzKCkKLSAgewotICAgIFR5cGVzSW1wbCB0eXBlcyA9IG5ldyBUeXBlc0ltcGwoKTsKLSAgICByZXR1cm4gdHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50ID0gbmV3IFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwoKTsKLSAgICByZXR1cm4gdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50ID0gbmV3IFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCgpOwotICAgIHJldHVybiB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGNyZWF0ZVFOYW1lRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIChRTmFtZSlzdXBlci5jcmVhdGVGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0UU5hbWVUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb25UeXBlIGNyZWF0ZU9wZXJhdGlvblR5cGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICBpZiAoIlJFUVVFU1RfUkVTUE9OU0UiLmVxdWFscyhpbml0aWFsVmFsdWUpKQotICAgIHsKLSAgICAgIHJldHVybiBPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0U7Ci0gICAgfQotICAgIGVsc2UgaWYgKCJPTkVfV0FZIi5lcXVhbHMoaW5pdGlhbFZhbHVlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gT3BlcmF0aW9uVHlwZS5PTkVfV0FZOwotICAgIH0KLSAgICBlbHNlIGlmICgiTk9USUZJQ0FUSU9OIi5lcXVhbHMoaW5pdGlhbFZhbHVlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT047Ci0gICAgfQotICAgIGVsc2UgaWYgKCJTT0xJQ0lUX1JFU1BPTlNFIi5lcXVhbHMoaW5pdGlhbFZhbHVlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0T3BlcmF0aW9uVHlwZVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLmNvbnZlcnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVET01FbGVtZW50RnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIChFbGVtZW50KXN1cGVyLmNyZWF0ZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGNvbnZlcnRET01FbGVtZW50VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIuY29udmVydFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBXU0RMRXhjZXB0aW9uIGNyZWF0ZVdTRExFeGNlcHRpb25Gcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gKFdTRExFeGNlcHRpb24pc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydFdTRExFeGNlcHRpb25Ub1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGNyZWF0ZURPTURvY3VtZW50RnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKQotICB7Ci0gICAgcmV0dXJuIChEb2N1bWVudClzdXBlci5jcmVhdGVGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0RE9NRG9jdW1lbnRUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExQYWNrYWdlIGdldFdTRExQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiAoV1NETFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMUGFja2FnZSBnZXRQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5lSU5TVEFOQ0U7Ci0gIH0KLQotICAvLwotICAvLwotICAvLwotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkobmFtZXNwYWNlKTsKLSAgICBpZiAoZmFjdG9yeSAhPSBudWxsKQotICAgICAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQobmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IGNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgICAgLy8gUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAgICAKLSAgICAgIFFOYW1lIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVsZW1lbnRUeXBlKGVsZW1lbnRUeXBlKTsKLSAgICAgIHJldHVybiBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgcHVibGljIHZvaWQgc2V0QWx3YXlzVXNlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KGJvb2xlYW4gdmFsdWUpCi0gICB7Ci0gICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcHJlY2F0ZWQ6IFdTRExGYWN0b3J5SW1wbC5zZXRVc2VFeHRlbnNpb25GYWN0b3JpZXMiKTsKLSAgIH0KLSAgICovCi19IC8vV1NETEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETFBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETFBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MmYxYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFja2FnZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgV1NETFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgV1NETFBhY2thZ2UKLXsKLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyB3c2RsRWxlbWVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBwb3J0VHlwZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBvcGVyYXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgbWVzc2FnZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBwYXJ0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGJpbmRpbmdFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgYmluZGluZ09wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBzZXJ2aWNlRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHBvcnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgZGVmaW5pdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpbXBvcnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgZXh0ZW5zaWJsZUVsZW1lbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaW5wdXRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgb3V0cHV0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGJpbmRpbmdJbnB1dEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBiaW5kaW5nT3V0cHV0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGJpbmRpbmdGYXVsdEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBuYW1lc3BhY2VFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaVBvcnRUeXBlRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlPcGVyYXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUlucHV0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlPdXRwdXRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlNZXNzYWdlRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlQYXJ0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlTZXJ2aWNlRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlQb3J0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlCaW5kaW5nRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlCaW5kaW5nSW5wdXRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUJpbmRpbmdPdXRwdXRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUJpbmRpbmdGYXVsdEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaURlZmluaXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUltcG9ydEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpTGlzdEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpTWFwRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGl1cmxFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUV4dGVuc2lvblJlZ2lzdHJ5RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHR5cGVzRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlJdGVyYXRvckVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpVHlwZXNFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG1lc3NhZ2VSZWZlcmVuY2VFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgcU5hbWVFRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgb3BlcmF0aW9uVHlwZUVEYXRhVHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVEYXRhVHlwZSBkb21FbGVtZW50RURhdGFUeXBlID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRURhdGFUeXBlIHdzZGxFeGNlcHRpb25FRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgZG9tRG9jdW1lbnRFRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0gICAqIHBhY2thZ2UgVVJJIHZhbHVlLgotICAgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0gICAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0gICAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0gICAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZU5TX1VSSQotICAgKiBAc2VlICNpbml0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBXU0RMUGFja2FnZUltcGwoKQotICB7Ci0gICAgc3VwZXIoZU5TX1VSSSwgV1NETEZhY3RvcnkuZUlOU1RBTkNFKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLSAgICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLSAgICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLSAgICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0gICAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLSAgICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLSAgICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotICAgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLSAgICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotICAgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotICAgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotICAgKiB0aG9zZSBvZiBhbm90aGVyLgotICAgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0gICAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2VOU19VUkkKLSAgICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLSAgICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NETFBhY2thZ2UgaW5pdCgpCi0gIHsKLSAgICBpZiAoaXNJbml0ZWQpCi0gICAgICByZXR1cm4gKFdTRExQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFdTRExQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotICAgIFdTRExQYWNrYWdlSW1wbCB0aGVXU0RMUGFja2FnZSA9IChXU0RMUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgV1NETFBhY2thZ2VJbXBsCi0gICAgICA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFdTRExQYWNrYWdlSW1wbCgpKTsKLQotICAgIGlzSW5pdGVkID0gdHJ1ZTsKLQotICAgIC8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotICAgIFhTRFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOwotCi0gICAgLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLSAgICB0aGVXU0RMUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLSAgICB0aGVXU0RMUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLSAgICAvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0gICAgdGhlV1NETFBhY2thZ2UuZnJlZXplKCk7Ci0KLSAgICByZXR1cm4gdGhlV1NETFBhY2thZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxFbGVtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpd3NkbEVsZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpd3NkbEVsZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRQb3J0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gcG9ydFR5cGVFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFBvcnRUeXBlX1FOYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlwb3J0VHlwZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3J0VHlwZV9VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXBvcnRUeXBlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFBvcnRUeXBlX0VPcGVyYXRpb25zKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlwb3J0VHlwZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRPcGVyYXRpb25fU3R5bGUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRPcGVyYXRpb25fTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpb3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRUlucHV0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlvcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRUZhdWx0cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upb3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE9wZXJhdGlvbl9FUGFyYW1ldGVyT3JkZXJpbmcoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE1lc3NhZ2VfUU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW1lc3NhZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZV9VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW1lc3NhZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0TWVzc2FnZV9FUGFydHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW1lc3NhZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRQYXJ0KCkKLSAgewotICAgIHJldHVybiBwYXJ0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYXJ0X05hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXBhcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGFydF9FbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpcGFydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYXJ0X1R5cGVOYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlwYXJ0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFBhcnRfVHlwZURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXBhcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXBhcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0UGFydF9FTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpcGFydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEJpbmRpbmdfUU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ19VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ19FUG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ19FQmluZGluZ09wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nT3BlcmF0aW9uX05hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWJpbmRpbmdPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ09wZXJhdGlvbl9FT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSliaW5kaW5nT3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpYmluZGluZ09wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSliaW5kaW5nT3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXJ2aWNlX1FOYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzZXJ2aWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNlcnZpY2VfVW5kZWZpbmVkKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzZXJ2aWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFNlcnZpY2VfRVBvcnRzKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlzZXJ2aWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0UG9ydCgpCi0gIHsKLSAgICByZXR1cm4gcG9ydEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9ydF9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlwb3J0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFBvcnRfRUJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEV4dGVuc2liaWxpdHlFbGVtZW50X1JlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9FbGVtZW50VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX1RhcmdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX0xvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlkZWZpbml0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldERlZmluaXRpb25fUU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FTmFtZXNwYWNlcygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FSW1wb3J0cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlpbXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlpbXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0SW1wb3J0X0VEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlpbXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0SW1wb3J0X0VTY2hlbWEoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWltcG9ydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEV4dGVuc2libGVFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBleHRlbnNpYmxlRWxlbWVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZXh0ZW5zaWJsZUVsZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gaW5wdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0T3V0cHV0KCkKLSAgewotICAgIHJldHVybiBvdXRwdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0RmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0lucHV0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nSW5wdXRfTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpYmluZGluZ0lucHV0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdJbnB1dF9FSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdJbnB1dEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEJpbmRpbmdPdXRwdXRfTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpYmluZGluZ091dHB1dEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdPdXRwdXRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRCaW5kaW5nRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdGYXVsdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ0ZhdWx0X05hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWJpbmRpbmdGYXVsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nRmF1bHRfRUZhdWx0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSliaW5kaW5nRmF1bHRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZXNwYWNlX1VSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZXNwYWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVzcGFjZV9QcmVmaXgoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKW5hbWVzcGFjZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElQb3J0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gaVBvcnRUeXBlRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGlPcGVyYXRpb25FQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUlucHV0KCkKLSAgewotICAgIHJldHVybiBpSW5wdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SU91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gaU91dHB1dEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGlGYXVsdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gaU1lc3NhZ2VFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGlQYXJ0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBpU2VydmljZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gaVBvcnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGlCaW5kaW5nRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBpQmluZGluZ09wZXJhdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJQmluZGluZ0lucHV0KCkKLSAgewotICAgIHJldHVybiBpQmluZGluZ0lucHV0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBpQmluZGluZ091dHB1dEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBpQmluZGluZ0ZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gaUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBpRGVmaW5pdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJSW1wb3J0KCkKLSAgewotICAgIHJldHVybiBpSW1wb3J0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElMaXN0KCkKLSAgewotICAgIHJldHVybiBpTGlzdEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJTWFwKCkKLSAgewotICAgIHJldHVybiBpTWFwRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElVUkwoKQotICB7Ci0gICAgcmV0dXJuIGl1cmxFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBpRXh0ZW5zaW9uUmVnaXN0cnlFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIHR5cGVzRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElJdGVyYXRvcigpCi0gIHsKLSAgICByZXR1cm4gaUl0ZXJhdG9yRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gaVR5cGVzRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSl4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE1lc3NhZ2VSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VSZWZlcmVuY2VFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE1lc3NhZ2VSZWZlcmVuY2VfTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpbWVzc2FnZVJlZmVyZW5jZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSltZXNzYWdlUmVmZXJlbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFRGF0YVR5cGUgZ2V0UU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHFOYW1lRURhdGFUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRURhdGFUeXBlIGdldE9wZXJhdGlvblR5cGUoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvblR5cGVFRGF0YVR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFRGF0YVR5cGUgZ2V0RE9NRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZG9tRWxlbWVudEVEYXRhVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVEYXRhVHlwZSBnZXRXU0RMRXhjZXB0aW9uKCkKLSAgewotICAgIHJldHVybiB3c2RsRXhjZXB0aW9uRURhdGFUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRURhdGFUeXBlIGdldERPTURvY3VtZW50KCkKLSAgewotICAgIHJldHVybiBkb21Eb2N1bWVudEVEYXRhVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExGYWN0b3J5IGdldFdTRExGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiAoV1NETEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotICAgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotICB7Ci0gICAgaWYgKGlzQ3JlYXRlZCkKLSAgICAgIHJldHVybjsKLSAgICBpc0NyZWF0ZWQgPSB0cnVlOwotCi0gICAgLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCi0gICAgd3NkbEVsZW1lbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoV1NETF9FTEVNRU5UKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHdzZGxFbGVtZW50RUNsYXNzLCBXU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZSh3c2RsRWxlbWVudEVDbGFzcywgV1NETF9FTEVNRU5UX19FTEVNRU5UKTsKLQotICAgIHBvcnRUeXBlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBPUlRfVFlQRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShwb3J0VHlwZUVDbGFzcywgUE9SVF9UWVBFX19RTkFNRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShwb3J0VHlwZUVDbGFzcywgUE9SVF9UWVBFX19VTkRFRklORUQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UocG9ydFR5cGVFQ2xhc3MsIFBPUlRfVFlQRV9fRU9QRVJBVElPTlMpOwotCi0gICAgb3BlcmF0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKE9QRVJBVElPTik7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShvcGVyYXRpb25FQ2xhc3MsIE9QRVJBVElPTl9fU1RZTEUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUob3BlcmF0aW9uRUNsYXNzLCBPUEVSQVRJT05fX05BTUUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUob3BlcmF0aW9uRUNsYXNzLCBPUEVSQVRJT05fX1VOREVGSU5FRCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShvcGVyYXRpb25FQ2xhc3MsIE9QRVJBVElPTl9fRUlOUFVUKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG9wZXJhdGlvbkVDbGFzcywgT1BFUkFUSU9OX19FT1VUUFVUKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG9wZXJhdGlvbkVDbGFzcywgT1BFUkFUSU9OX19FRkFVTFRTKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG9wZXJhdGlvbkVDbGFzcywgT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HKTsKLQotICAgIG1lc3NhZ2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTUVTU0FHRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShtZXNzYWdlRUNsYXNzLCBNRVNTQUdFX19RTkFNRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShtZXNzYWdlRUNsYXNzLCBNRVNTQUdFX19VTkRFRklORUQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UobWVzc2FnZUVDbGFzcywgTUVTU0FHRV9fRVBBUlRTKTsKLQotICAgIHBhcnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUEFSVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShwYXJ0RUNsYXNzLCBQQVJUX19OQU1FKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHBhcnRFQ2xhc3MsIFBBUlRfX0VMRU1FTlRfTkFNRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShwYXJ0RUNsYXNzLCBQQVJUX19UWVBFX05BTUUpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UocGFydEVDbGFzcywgUEFSVF9fVFlQRV9ERUZJTklUSU9OKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHBhcnRFQ2xhc3MsIFBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04pOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UocGFydEVDbGFzcywgUEFSVF9fRU1FU1NBR0UpOwotCi0gICAgYmluZGluZ0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhCSU5ESU5HKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGJpbmRpbmdFQ2xhc3MsIEJJTkRJTkdfX1FOQU1FKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGJpbmRpbmdFQ2xhc3MsIEJJTkRJTkdfX1VOREVGSU5FRCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nRUNsYXNzLCBCSU5ESU5HX19FUE9SVF9UWVBFKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdFQ2xhc3MsIEJJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlMpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhCSU5ESU5HX09QRVJBVElPTik7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBCSU5ESU5HX09QRVJBVElPTl9fTkFNRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBCSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTik7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ09wZXJhdGlvbkVDbGFzcywgQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTKTsKLQotICAgIHNlcnZpY2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VSVklDRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzZXJ2aWNlRUNsYXNzLCBTRVJWSUNFX19RTkFNRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzZXJ2aWNlRUNsYXNzLCBTRVJWSUNFX19VTkRFRklORUQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2Uoc2VydmljZUVDbGFzcywgU0VSVklDRV9fRVBPUlRTKTsKLQotICAgIHBvcnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUE9SVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShwb3J0RUNsYXNzLCBQT1JUX19OQU1FKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHBvcnRFQ2xhc3MsIFBPUlRfX0VCSU5ESU5HKTsKLQotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKEVYVEVOU0lCSUxJVFlfRUxFTUVOVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcywgRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcywgRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUpOwotCi0gICAgZGVmaW5pdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERUZJTklUSU9OKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fTE9DQVRJT04pOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fUU5BTUUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fRU5DT0RJTkcpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fRUlNUE9SVFMpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fRVRZUEVTKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0VNRVNTQUdFUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19FUE9SVF9UWVBFUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19FQklORElOR1MpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fRVNFUlZJQ0VTKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0VOQU1FU1BBQ0VTKTsKLQotICAgIGltcG9ydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTVBPUlQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoaW1wb3J0RUNsYXNzLCBJTVBPUlRfX05BTUVTUEFDRV9VUkkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoaW1wb3J0RUNsYXNzLCBJTVBPUlRfX0xPQ0FUSU9OX1VSSSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShpbXBvcnRFQ2xhc3MsIElNUE9SVF9fRURFRklOSVRJT04pOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoaW1wb3J0RUNsYXNzLCBJTVBPUlRfX0VTQ0hFTUEpOwotCi0gICAgZXh0ZW5zaWJsZUVsZW1lbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRVhURU5TSUJMRV9FTEVNRU5UKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGV4dGVuc2libGVFbGVtZW50RUNsYXNzLCBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTKTsKLQotICAgIGlucHV0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElOUFVUKTsKLQotICAgIG91dHB1dEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhPVVRQVVQpOwotCi0gICAgZmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRkFVTFQpOwotCi0gICAgYmluZGluZ0lucHV0RUNsYXNzID0gY3JlYXRlRUNsYXNzKEJJTkRJTkdfSU5QVVQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoYmluZGluZ0lucHV0RUNsYXNzLCBCSU5ESU5HX0lOUFVUX19OQU1FKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdJbnB1dEVDbGFzcywgQklORElOR19JTlBVVF9fRUlOUFVUKTsKLQotICAgIGJpbmRpbmdPdXRwdXRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQklORElOR19PVVRQVVQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoYmluZGluZ091dHB1dEVDbGFzcywgQklORElOR19PVVRQVVRfX05BTUUpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ091dHB1dEVDbGFzcywgQklORElOR19PVVRQVVRfX0VPVVRQVVQpOwotCi0gICAgYmluZGluZ0ZhdWx0RUNsYXNzID0gY3JlYXRlRUNsYXNzKEJJTkRJTkdfRkFVTFQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoYmluZGluZ0ZhdWx0RUNsYXNzLCBCSU5ESU5HX0ZBVUxUX19OQU1FKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdGYXVsdEVDbGFzcywgQklORElOR19GQVVMVF9fRUZBVUxUKTsKLQotICAgIG5hbWVzcGFjZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOQU1FU1BBQ0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUobmFtZXNwYWNlRUNsYXNzLCBOQU1FU1BBQ0VfX1VSSSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShuYW1lc3BhY2VFQ2xhc3MsIE5BTUVTUEFDRV9fUFJFRklYKTsKLQotICAgIGlQb3J0VHlwZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJUE9SVF9UWVBFKTsKLQotICAgIGlPcGVyYXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU9QRVJBVElPTik7Ci0KLSAgICBpSW5wdXRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUlOUFVUKTsKLQotICAgIGlPdXRwdXRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU9VVFBVVCk7Ci0KLSAgICBpRmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUZBVUxUKTsKLQotICAgIGlNZXNzYWdlRUNsYXNzID0gY3JlYXRlRUNsYXNzKElNRVNTQUdFKTsKLQotICAgIGlQYXJ0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElQQVJUKTsKLQotICAgIGlTZXJ2aWNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKElTRVJWSUNFKTsKLQotICAgIGlQb3J0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElQT1JUKTsKLQotICAgIGlCaW5kaW5nRUNsYXNzID0gY3JlYXRlRUNsYXNzKElCSU5ESU5HKTsKLQotICAgIGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKElCSU5ESU5HX09QRVJBVElPTik7Ci0KLSAgICBpQmluZGluZ0lucHV0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElCSU5ESU5HX0lOUFVUKTsKLQotICAgIGlCaW5kaW5nT3V0cHV0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElCSU5ESU5HX09VVFBVVCk7Ci0KLSAgICBpQmluZGluZ0ZhdWx0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElCSU5ESU5HX0ZBVUxUKTsKLQotICAgIGlFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJRVhURU5TSUJJTElUWV9FTEVNRU5UKTsKLQotICAgIGlEZWZpbml0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKElERUZJTklUSU9OKTsKLQotICAgIGlJbXBvcnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUlNUE9SVCk7Ci0KLSAgICBpTGlzdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTElTVCk7Ci0KLSAgICBpTWFwRUNsYXNzID0gY3JlYXRlRUNsYXNzKElNQVApOwotCi0gICAgaXVybEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJVVJMKTsKLQotICAgIGlFeHRlbnNpb25SZWdpc3RyeUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJRVhURU5TSU9OX1JFR0lTVFJZKTsKLQotICAgIHR5cGVzRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRZUEVTKTsKLQotICAgIGlJdGVyYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJSVRFUkFUT1IpOwotCi0gICAgaVR5cGVzRUNsYXNzID0gY3JlYXRlRUNsYXNzKElUWVBFUyk7Ci0KLSAgICB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UodW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4pOwotCi0gICAgeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsIFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEpOwotCi0gICAgbWVzc2FnZVJlZmVyZW5jZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNRVNTQUdFX1JFRkVSRU5DRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShtZXNzYWdlUmVmZXJlbmNlRUNsYXNzLCBNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlRUNsYXNzLCBNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UpOwotCi0gICAgLy8gQ3JlYXRlIGRhdGEgdHlwZXMKLSAgICBxTmFtZUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShRTkFNRSk7Ci0gICAgb3BlcmF0aW9uVHlwZUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShPUEVSQVRJT05fVFlQRSk7Ci0gICAgZG9tRWxlbWVudEVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShET01fRUxFTUVOVCk7Ci0gICAgd3NkbEV4Y2VwdGlvbkVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShXU0RMX0VYQ0VQVElPTik7Ci0gICAgZG9tRG9jdW1lbnRFRGF0YVR5cGUgPSBjcmVhdGVFRGF0YVR5cGUoRE9NX0RPQ1VNRU5UKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLSAgICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICB7Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHBhY2thZ2UKLSAgICBzZXROYW1lKGVOQU1FKTsKLSAgICBzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLSAgICBzZXROc1VSSShlTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLSAgICBYU0RQYWNrYWdlIHRoZVhTRFBhY2thZ2UgPSAoWFNEUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShYU0RQYWNrYWdlLmVOU19VUkkpOwotCi0gICAgLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotICAgIHBvcnRUeXBlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgcG9ydFR5cGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJUG9ydFR5cGUoKSk7Ci0gICAgb3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgb3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU9wZXJhdGlvbigpKTsKLSAgICBtZXNzYWdlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgbWVzc2FnZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElNZXNzYWdlKCkpOwotICAgIHBhcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBwYXJ0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVBhcnQoKSk7Ci0gICAgYmluZGluZ0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIGJpbmRpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJQmluZGluZygpKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElCaW5kaW5nT3BlcmF0aW9uKCkpOwotICAgIHNlcnZpY2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBzZXJ2aWNlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVNlcnZpY2UoKSk7Ci0gICAgcG9ydEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIHBvcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJUG9ydCgpKTsKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFdTRExFbGVtZW50KCkpOwotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIGRlZmluaXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBkZWZpbml0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SURlZmluaXRpb24oKSk7Ci0gICAgaW1wb3J0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgaW1wb3J0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUltcG9ydCgpKTsKLSAgICBleHRlbnNpYmxlRWxlbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFdTRExFbGVtZW50KCkpOwotICAgIGlucHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TWVzc2FnZVJlZmVyZW5jZSgpKTsKLSAgICBpbnB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElJbnB1dCgpKTsKLSAgICBvdXRwdXRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRNZXNzYWdlUmVmZXJlbmNlKCkpOwotICAgIG91dHB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElPdXRwdXQoKSk7Ci0gICAgZmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRNZXNzYWdlUmVmZXJlbmNlKCkpOwotICAgIGZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUZhdWx0KCkpOwotICAgIGJpbmRpbmdJbnB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIGJpbmRpbmdJbnB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElCaW5kaW5nSW5wdXQoKSk7Ci0gICAgYmluZGluZ091dHB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIGJpbmRpbmdPdXRwdXRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJQmluZGluZ091dHB1dCgpKTsKLSAgICBiaW5kaW5nRmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBiaW5kaW5nRmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJQmluZGluZ0ZhdWx0KCkpOwotICAgIHR5cGVzRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgdHlwZXNFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJVHlwZXMoKSk7Ci0gICAgdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBtZXNzYWdlUmVmZXJlbmNlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotICAgIGluaXRFQ2xhc3Mod3NkbEVsZW1lbnRFQ2xhc3MsIFdTRExFbGVtZW50LmNsYXNzLCAiV1NETEVsZW1lbnQiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0V1NETEVsZW1lbnRfRG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwKLSAgICAgIHRoaXMuZ2V0RE9NRWxlbWVudCgpLAotICAgICAgImRvY3VtZW50YXRpb25FbGVtZW50IiwgbnVsbCwgMCwgMSwgV1NETEVsZW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFdTRExFbGVtZW50X0VsZW1lbnQoKSwKLSAgICAgIHRoaXMuZ2V0RE9NRWxlbWVudCgpLAotICAgICAgImVsZW1lbnQiLCBudWxsLCAwLCAxLCBXU0RMRWxlbWVudC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbih3c2RsRWxlbWVudEVDbGFzcywgdGhpcy5nZXREZWZpbml0aW9uKCksICJnZXRFbmNsb3NpbmdEZWZpbml0aW9uIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbih3c2RsRWxlbWVudEVDbGFzcywgbnVsbCwgInNldEVuY2xvc2luZ0RlZmluaXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0RGVmaW5pdGlvbigpLCAiZGVmaW5pdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHBvcnRUeXBlRUNsYXNzLCBQb3J0VHlwZS5jbGFzcywgIlBvcnRUeXBlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRQb3J0VHlwZV9RTmFtZSgpLAotICAgICAgdGhpcy5nZXRRTmFtZSgpLAotICAgICAgInFOYW1lIiwgbnVsbCwgMCwgMSwgUG9ydFR5cGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFBvcnRUeXBlX1VuZGVmaW5lZCgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksCi0gICAgICAidW5kZWZpbmVkIiwgbnVsbCwgMCwgMSwgUG9ydFR5cGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFBvcnRUeXBlX0VPcGVyYXRpb25zKCksCi0gICAgICB0aGlzLmdldE9wZXJhdGlvbigpLAotICAgICAgbnVsbCwKLSAgICAgICJlT3BlcmF0aW9ucyIsIG51bGwsIDAsIC0xLCBQb3J0VHlwZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhvcGVyYXRpb25FQ2xhc3MsIE9wZXJhdGlvbi5jbGFzcywgIk9wZXJhdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0T3BlcmF0aW9uX1N0eWxlKCksCi0gICAgICB0aGlzLmdldE9wZXJhdGlvblR5cGUoKSwKLSAgICAgICJzdHlsZSIsIG51bGwsIDAsIDEsIE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0T3BlcmF0aW9uX05hbWUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZSIsIG51bGwsIDAsIDEsIE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0T3BlcmF0aW9uX1VuZGVmaW5lZCgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksCi0gICAgICAidW5kZWZpbmVkIiwgbnVsbCwgMCwgMSwgT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRPcGVyYXRpb25fRUlucHV0KCksCi0gICAgICB0aGlzLmdldElucHV0KCksCi0gICAgICBudWxsLAotICAgICAgImVJbnB1dCIsIG51bGwsIDAsIDEsIE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0T3BlcmF0aW9uX0VPdXRwdXQoKSwKLSAgICAgIHRoaXMuZ2V0T3V0cHV0KCksCi0gICAgICBudWxsLAotICAgICAgImVPdXRwdXQiLCBudWxsLCAwLCAxLCBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE9wZXJhdGlvbl9FRmF1bHRzKCksCi0gICAgICB0aGlzLmdldEZhdWx0KCksCi0gICAgICBudWxsLAotICAgICAgImVGYXVsdHMiLCBudWxsLCAwLCAtMSwgT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nKCksCi0gICAgICB0aGlzLmdldFBhcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBhcmFtZXRlck9yZGVyaW5nIiwgbnVsbCwgMCwgLTEsIE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhtZXNzYWdlRUNsYXNzLCBNZXNzYWdlLmNsYXNzLCAiTWVzc2FnZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0TWVzc2FnZV9RTmFtZSgpLAotICAgICAgdGhpcy5nZXRRTmFtZSgpLAotICAgICAgInFOYW1lIiwgbnVsbCwgMCwgMSwgTWVzc2FnZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0TWVzc2FnZV9VbmRlZmluZWQoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLAotICAgICAgInVuZGVmaW5lZCIsIG51bGwsIDAsIDEsIE1lc3NhZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE1lc3NhZ2VfRVBhcnRzKCksCi0gICAgICB0aGlzLmdldFBhcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBhcnRzIiwgbnVsbCwgMCwgLTEsIE1lc3NhZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MocGFydEVDbGFzcywgUGFydC5jbGFzcywgIlBhcnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFBhcnRfTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgUGFydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0UGFydF9FbGVtZW50TmFtZSgpLAotICAgICAgdGhpcy5nZXRRTmFtZSgpLAotICAgICAgImVsZW1lbnROYW1lIiwgbnVsbCwgMCwgMSwgUGFydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0UGFydF9UeXBlTmFtZSgpLAotICAgICAgdGhpcy5nZXRRTmFtZSgpLAotICAgICAgInR5cGVOYW1lIiwgbnVsbCwgMCwgMSwgUGFydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0UGFydF9UeXBlRGVmaW5pdGlvbigpLAotICAgICAgdGhlWFNEUGFja2FnZS5nZXRYU0RUeXBlRGVmaW5pdGlvbigpLAotICAgICAgbnVsbCwKLSAgICAgICJ0eXBlRGVmaW5pdGlvbiIsIG51bGwsIDAsIDEsIFBhcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFBhcnRfRWxlbWVudERlY2xhcmF0aW9uKCksCi0gICAgICB0aGVYU0RQYWNrYWdlLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLAotICAgICAgbnVsbCwKLSAgICAgICJlbGVtZW50RGVjbGFyYXRpb24iLCBudWxsLCAwLCAxLCBQYXJ0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRQYXJ0X0VNZXNzYWdlKCksCi0gICAgICB0aGlzLmdldE1lc3NhZ2UoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU1lc3NhZ2UiLCBudWxsLCAwLCAxLCBQYXJ0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGJpbmRpbmdFQ2xhc3MsIEJpbmRpbmcuY2xhc3MsICJCaW5kaW5nIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRCaW5kaW5nX1FOYW1lKCksCi0gICAgICB0aGlzLmdldFFOYW1lKCksCi0gICAgICAicU5hbWUiLCBudWxsLCAwLCAxLCBCaW5kaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRCaW5kaW5nX1VuZGVmaW5lZCgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksCi0gICAgICAidW5kZWZpbmVkIiwgbnVsbCwgMCwgMSwgQmluZGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ19FUG9ydFR5cGUoKSwKLSAgICAgIHRoaXMuZ2V0UG9ydFR5cGUoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBvcnRUeXBlIiwgbnVsbCwgMSwgMSwgQmluZGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ19FQmluZGluZ09wZXJhdGlvbnMoKSwKLSAgICAgIHRoaXMuZ2V0QmluZGluZ09wZXJhdGlvbigpLAotICAgICAgbnVsbCwKLSAgICAgICJlQmluZGluZ09wZXJhdGlvbnMiLCBudWxsLCAwLCAtMSwgQmluZGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLCAiQmluZGluZ09wZXJhdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0QmluZGluZ09wZXJhdGlvbl9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nT3BlcmF0aW9uX0VPcGVyYXRpb24oKSwKLSAgICAgIHRoaXMuZ2V0T3BlcmF0aW9uKCksCi0gICAgICBudWxsLAotICAgICAgImVPcGVyYXRpb24iLCBudWxsLCAxLCAxLCBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nSW5wdXQoKSwKLSAgICAgIHRoaXMuZ2V0QmluZGluZ0lucHV0KCksCi0gICAgICBudWxsLAotICAgICAgImVCaW5kaW5nSW5wdXQiLCBudWxsLCAwLCAxLCBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nT3V0cHV0KCksCi0gICAgICB0aGlzLmdldEJpbmRpbmdPdXRwdXQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUJpbmRpbmdPdXRwdXQiLCBudWxsLCAwLCAxLCBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nRmF1bHRzKCksCi0gICAgICB0aGlzLmdldEJpbmRpbmdGYXVsdCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlQmluZGluZ0ZhdWx0cyIsIG51bGwsIDAsIC0xLCBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHNlcnZpY2VFQ2xhc3MsIFNlcnZpY2UuY2xhc3MsICJTZXJ2aWNlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTZXJ2aWNlX1FOYW1lKCksCi0gICAgICB0aGlzLmdldFFOYW1lKCksCi0gICAgICAicU5hbWUiLCBudWxsLCAwLCAxLCBTZXJ2aWNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTZXJ2aWNlX1VuZGVmaW5lZCgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksCi0gICAgICAidW5kZWZpbmVkIiwgbnVsbCwgMCwgMSwgU2VydmljZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0U2VydmljZV9FUG9ydHMoKSwKLSAgICAgIHRoaXMuZ2V0UG9ydCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlUG9ydHMiLCBudWxsLCAwLCAtMSwgU2VydmljZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhwb3J0RUNsYXNzLCBQb3J0LmNsYXNzLCAiUG9ydCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0UG9ydF9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBQb3J0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRQb3J0X0VCaW5kaW5nKCksCi0gICAgICB0aGlzLmdldEJpbmRpbmcoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUJpbmRpbmciLCBudWxsLCAxLCAxLCBQb3J0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywKLSAgICAgICJFeHRlbnNpYmlsaXR5RWxlbWVudCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfUmVxdWlyZWQoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLAotICAgICAgInJlcXVpcmVkIiwgbnVsbCwgMCwgMSwgRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlKCksCi0gICAgICB0aGlzLmdldFFOYW1lKCksCi0gICAgICAiZWxlbWVudFR5cGUiLCBudWxsLCAwLCAxLCBFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGRlZmluaXRpb25FQ2xhc3MsIERlZmluaXRpb24uY2xhc3MsICJEZWZpbml0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXREZWZpbml0aW9uX1RhcmdldE5hbWVzcGFjZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJ0YXJnZXROYW1lc3BhY2UiLCBudWxsLCAwLCAxLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXREZWZpbml0aW9uX0xvY2F0aW9uKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgImxvY2F0aW9uIiwgbnVsbCwgMCwgMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9RTmFtZSgpLAotICAgICAgdGhpcy5nZXRRTmFtZSgpLAotICAgICAgInFOYW1lIiwgbnVsbCwgMCwgMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJlbmNvZGluZyIsIG51bGwsIDAsIDEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldERlZmluaXRpb25fRUltcG9ydHMoKSwKLSAgICAgIHRoaXMuZ2V0SW1wb3J0KCksCi0gICAgICBudWxsLAotICAgICAgImVJbXBvcnRzIiwgbnVsbCwgMCwgLTEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldERlZmluaXRpb25fRVR5cGVzKCksCi0gICAgICB0aGlzLmdldFR5cGVzKCksCi0gICAgICBudWxsLAotICAgICAgImVUeXBlcyIsIG51bGwsIDAsIDEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldERlZmluaXRpb25fRU1lc3NhZ2VzKCksCi0gICAgICB0aGlzLmdldE1lc3NhZ2UoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU1lc3NhZ2VzIiwgbnVsbCwgMCwgLTEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldERlZmluaXRpb25fRVBvcnRUeXBlcygpLAotICAgICAgdGhpcy5nZXRQb3J0VHlwZSgpLAotICAgICAgbnVsbCwKLSAgICAgICJlUG9ydFR5cGVzIiwgbnVsbCwgMCwgLTEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldERlZmluaXRpb25fRUJpbmRpbmdzKCksCi0gICAgICB0aGlzLmdldEJpbmRpbmcoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUJpbmRpbmdzIiwgbnVsbCwgMCwgLTEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldERlZmluaXRpb25fRVNlcnZpY2VzKCksCi0gICAgICB0aGlzLmdldFNlcnZpY2UoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVNlcnZpY2VzIiwgbnVsbCwgMCwgLTEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldERlZmluaXRpb25fRU5hbWVzcGFjZXMoKSwKLSAgICAgIHRoaXMuZ2V0TmFtZXNwYWNlKCksCi0gICAgICBudWxsLAotICAgICAgImVOYW1lc3BhY2VzIiwgbnVsbCwgMCwgLTEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihkZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldERPTURvY3VtZW50KCksICJnZXREb2N1bWVudCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oZGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgInNldERvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldERPTURvY3VtZW50KCksICJkb2N1bWVudCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGltcG9ydEVDbGFzcywgSW1wb3J0LmNsYXNzLCAiSW1wb3J0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWVzcGFjZVVSSSIsIG51bGwsIDAsIDEsIEltcG9ydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgImxvY2F0aW9uVVJJIiwgbnVsbCwgMCwgMSwgSW1wb3J0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRJbXBvcnRfRURlZmluaXRpb24oKSwKLSAgICAgIHRoaXMuZ2V0RGVmaW5pdGlvbigpLAotICAgICAgbnVsbCwKLSAgICAgICJlRGVmaW5pdGlvbiIsIG51bGwsIDAsIDEsIEltcG9ydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0SW1wb3J0X0VTY2hlbWEoKSwKLSAgICAgIHRoZVhTRFBhY2thZ2UuZ2V0WFNEU2NoZW1hKCksCi0gICAgICBudWxsLAotICAgICAgImVTY2hlbWEiLCBudWxsLCAwLCAxLCBJbXBvcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpbXBvcnRFQ2xhc3MsIHRoZVhTRFBhY2thZ2UuZ2V0WFNEU2NoZW1hKCksICJnZXRTY2hlbWEiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGltcG9ydEVDbGFzcywgbnVsbCwgInNldFNjaGVtYSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhlWFNEUGFja2FnZS5nZXRYU0RTY2hlbWEoKSwgInNjaGVtYSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgZXh0ZW5zaWJsZUVsZW1lbnRFQ2xhc3MsCi0gICAgICBFeHRlbnNpYmxlRWxlbWVudC5jbGFzcywKLSAgICAgICJFeHRlbnNpYmxlRWxlbWVudCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksCi0gICAgICB0aGlzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCksCi0gICAgICBudWxsLAotICAgICAgImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiLCBudWxsLCAwLCAtMSwgRXh0ZW5zaWJsZUVsZW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihleHRlbnNpYmxlRWxlbWVudEVDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihleHRlbnNpYmxlRWxlbWVudEVDbGFzcywgbnVsbCwgImFkZEV4dGVuc2liaWxpdHlFbGVtZW50Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpLCAiZXh0RWxlbWVudCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlucHV0RUNsYXNzLCBJbnB1dC5jbGFzcywgIklucHV0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKG91dHB1dEVDbGFzcywgT3V0cHV0LmNsYXNzLCAiT3V0cHV0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGZhdWx0RUNsYXNzLCBGYXVsdC5jbGFzcywgIkZhdWx0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGJpbmRpbmdJbnB1dEVDbGFzcywgQmluZGluZ0lucHV0LmNsYXNzLCAiQmluZGluZ0lucHV0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRCaW5kaW5nSW5wdXRfTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgQmluZGluZ0lucHV0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nSW5wdXRfRUlucHV0KCksCi0gICAgICB0aGlzLmdldElucHV0KCksCi0gICAgICBudWxsLAotICAgICAgImVJbnB1dCIsIG51bGwsIDEsIDEsIEJpbmRpbmdJbnB1dC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGJpbmRpbmdJbnB1dEVDbGFzcywgdGhpcy5nZXRJSW5wdXQoKSwgImdldElucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihiaW5kaW5nSW5wdXRFQ2xhc3MsIG51bGwsICJzZXRJbnB1dCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJSW5wdXQoKSwgImlucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoYmluZGluZ091dHB1dEVDbGFzcywgQmluZGluZ091dHB1dC5jbGFzcywgIkJpbmRpbmdPdXRwdXQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEJpbmRpbmdPdXRwdXRfTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgQmluZGluZ091dHB1dC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCksCi0gICAgICB0aGlzLmdldE91dHB1dCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlT3V0cHV0IiwgbnVsbCwgMSwgMSwgQmluZGluZ091dHB1dC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGJpbmRpbmdPdXRwdXRFQ2xhc3MsIHRoaXMuZ2V0SU91dHB1dCgpLCAiZ2V0T3V0cHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihiaW5kaW5nT3V0cHV0RUNsYXNzLCBudWxsLCAic2V0T3V0cHV0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElPdXRwdXQoKSwgIm91dHB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGJpbmRpbmdGYXVsdEVDbGFzcywgQmluZGluZ0ZhdWx0LmNsYXNzLCAiQmluZGluZ0ZhdWx0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRCaW5kaW5nRmF1bHRfTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgQmluZGluZ0ZhdWx0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nRmF1bHRfRUZhdWx0KCksCi0gICAgICB0aGlzLmdldEZhdWx0KCksCi0gICAgICBudWxsLAotICAgICAgImVGYXVsdCIsIG51bGwsIDEsIDEsIEJpbmRpbmdGYXVsdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGJpbmRpbmdGYXVsdEVDbGFzcywgdGhpcy5nZXRJRmF1bHQoKSwgImdldEZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihiaW5kaW5nRmF1bHRFQ2xhc3MsIG51bGwsICJzZXRGYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJRmF1bHQoKSwgImZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MobmFtZXNwYWNlRUNsYXNzLCBOYW1lc3BhY2UuY2xhc3MsICJOYW1lc3BhY2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE5hbWVzcGFjZV9VUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAiVVJJIiwgbnVsbCwgMCwgMSwgTmFtZXNwYWNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXROYW1lc3BhY2VfUHJlZml4KCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInByZWZpeCIsIG51bGwsIDAsIDEsIE5hbWVzcGFjZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpUG9ydFR5cGVFQ2xhc3MsIGphdmF4LndzZGwuUG9ydFR5cGUuY2xhc3MsICJJUG9ydFR5cGUiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlQb3J0VHlwZUVDbGFzcywgbnVsbCwgImFkZE9wZXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJT3BlcmF0aW9uKCksICJvcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlQb3J0VHlwZUVDbGFzcywgdGhpcy5nZXRJT3BlcmF0aW9uKCksICJnZXRPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaW5wdXROYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAib3V0cHV0TmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBvcnRUeXBlRUNsYXNzLCB0aGlzLmdldElMaXN0KCksICJnZXRPcGVyYXRpb25zIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaU9wZXJhdGlvbkVDbGFzcywgamF2YXgud3NkbC5PcGVyYXRpb24uY2xhc3MsICJJT3BlcmF0aW9uIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAiYWRkRmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUZhdWx0KCksICJmYXVsdCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU9wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJRmF1bHQoKSwgImdldEZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU9wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJTWFwKCksICJnZXRGYXVsdHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUxpc3QoKSwgImdldFBhcmFtZXRlck9yZGVyaW5nIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAic2V0UGFyYW1ldGVyT3JkZXJpbmciKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUxpc3QoKSwgInBhcmFtZXRlck9yZGVyIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElJbnB1dCgpLCAiZ2V0SW5wdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJzZXRJbnB1dCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJSW5wdXQoKSwgImlucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElPdXRwdXQoKSwgImdldE91dHB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU9wZXJhdGlvbkVDbGFzcywgbnVsbCwgInNldE91dHB1dCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJT3V0cHV0KCksICJvdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpSW5wdXRFQ2xhc3MsIGphdmF4LndzZGwuSW5wdXQuY2xhc3MsICJJSW5wdXQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlJbnB1dEVDbGFzcywgdGhpcy5nZXRJTWVzc2FnZSgpLCAiZ2V0TWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUlucHV0RUNsYXNzLCBudWxsLCAic2V0TWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJTWVzc2FnZSgpLCAibWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlPdXRwdXRFQ2xhc3MsIGphdmF4LndzZGwuT3V0cHV0LmNsYXNzLCAiSU91dHB1dCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU91dHB1dEVDbGFzcywgdGhpcy5nZXRJTWVzc2FnZSgpLCAiZ2V0TWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU91dHB1dEVDbGFzcywgbnVsbCwgInNldE1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SU1lc3NhZ2UoKSwgIm1lc3NhZ2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpRmF1bHRFQ2xhc3MsIGphdmF4LndzZGwuRmF1bHQuY2xhc3MsICJJRmF1bHQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlGYXVsdEVDbGFzcywgdGhpcy5nZXRJTWVzc2FnZSgpLCAiZ2V0TWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUZhdWx0RUNsYXNzLCBudWxsLCAic2V0TWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJTWVzc2FnZSgpLCAibWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlNZXNzYWdlRUNsYXNzLCBqYXZheC53c2RsLk1lc3NhZ2UuY2xhc3MsICJJTWVzc2FnZSIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU1lc3NhZ2VFQ2xhc3MsIG51bGwsICJhZGRQYXJ0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElQYXJ0KCksICJwYXJ0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpTWVzc2FnZUVDbGFzcywgdGhpcy5nZXRJUGFydCgpLCAiZ2V0UGFydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlNZXNzYWdlRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldFBhcnRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpTWVzc2FnZUVDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0T3JkZXJlZFBhcnRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElMaXN0KCksICJwYXJ0T3JkZXIiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpUGFydEVDbGFzcywgamF2YXgud3NkbC5QYXJ0LmNsYXNzLCAiSVBhcnQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlQYXJ0RUNsYXNzLCBudWxsLCAic2V0RXh0ZW5zaW9uQXR0cmlidXRlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJ2YWx1ZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRUV4Y2VwdGlvbihvcCwgdGhpcy5nZXRXU0RMRXhjZXB0aW9uKCkpOwotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlQYXJ0RUNsYXNzLCB0aGlzLmdldElJdGVyYXRvcigpLCAiZ2V0RXh0ZW5zaW9uQXR0cmlidXRlTmFtZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlQYXJ0RUNsYXNzLCB0aGlzLmdldFFOYW1lKCksICJnZXRFeHRlbnNpb25BdHRyaWJ1dGUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpU2VydmljZUVDbGFzcywgamF2YXgud3NkbC5TZXJ2aWNlLmNsYXNzLCAiSVNlcnZpY2UiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlTZXJ2aWNlRUNsYXNzLCBudWxsLCAiYWRkUG9ydCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJUG9ydCgpLCAicG9ydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVNlcnZpY2VFQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0UG9ydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlTZXJ2aWNlRUNsYXNzLCB0aGlzLmdldElQb3J0KCksICJnZXRQb3J0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlQb3J0RUNsYXNzLCBqYXZheC53c2RsLlBvcnQuY2xhc3MsICJJUG9ydCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBvcnRFQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmcoKSwgImdldEJpbmRpbmciLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlQb3J0RUNsYXNzLCBudWxsLCAic2V0QmluZGluZyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJQmluZGluZygpLCAiYmluZGluZyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlCaW5kaW5nRUNsYXNzLCBqYXZheC53c2RsLkJpbmRpbmcuY2xhc3MsICJJQmluZGluZyIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdFQ2xhc3MsIG51bGwsICJhZGRCaW5kaW5nT3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElCaW5kaW5nT3BlcmF0aW9uKCksICJiaW5kaW5nT3BlcmF0aW9uIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ0VDbGFzcywgdGhpcy5nZXRJQmluZGluZ09wZXJhdGlvbigpLCAiZ2V0QmluZGluZ09wZXJhdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJpbnB1dE5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJvdXRwdXROYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ0VDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0QmluZGluZ09wZXJhdGlvbnMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nRUNsYXNzLCB0aGlzLmdldElQb3J0VHlwZSgpLCAiZ2V0UG9ydFR5cGUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nRUNsYXNzLCBudWxsLCAic2V0UG9ydFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJwb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24uY2xhc3MsCi0gICAgICAiSUJpbmRpbmdPcGVyYXRpb24iLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAiYWRkQmluZGluZ0ZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElCaW5kaW5nRmF1bHQoKSwgImJpbmRpbmdGYXVsdCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdGYXVsdCgpLCAiZ2V0QmluZGluZ0ZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0QmluZGluZ0ZhdWx0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU9wZXJhdGlvbigpLCAiZ2V0T3BlcmF0aW9uIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ09wZXJhdGlvbkVDbGFzcywgbnVsbCwgInNldE9wZXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJT3BlcmF0aW9uKCksICJvcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nSW5wdXQoKSwgImdldEJpbmRpbmdJbnB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJzZXRCaW5kaW5nSW5wdXQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUJpbmRpbmdJbnB1dCgpLCAiYmluZGluZ0lucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ09wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJQmluZGluZ091dHB1dCgpLCAiZ2V0QmluZGluZ091dHB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJzZXRCaW5kaW5nT3V0cHV0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElCaW5kaW5nT3V0cHV0KCksICJiaW5kaW5nT3V0cHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaUJpbmRpbmdJbnB1dEVDbGFzcywgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQuY2xhc3MsICJJQmluZGluZ0lucHV0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpQmluZGluZ091dHB1dEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuQmluZGluZ091dHB1dC5jbGFzcywKLSAgICAgICJJQmluZGluZ091dHB1dCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlCaW5kaW5nRmF1bHRFQ2xhc3MsIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0LmNsYXNzLCAiSUJpbmRpbmdGYXVsdCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLAotICAgICAgIklFeHRlbnNpYmlsaXR5RWxlbWVudCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlEZWZpbml0aW9uRUNsYXNzLCBqYXZheC53c2RsLkRlZmluaXRpb24uY2xhc3MsICJJRGVmaW5pdGlvbiIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJhZGRCaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElCaW5kaW5nKCksICJiaW5kaW5nIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgImFkZEltcG9ydCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJSW1wb3J0KCksICJpbXBvcnREZWYiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBudWxsLCAiYWRkTWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJTWVzc2FnZSgpLCAibWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJhZGROYW1lc3BhY2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwcmVmaXgiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lc3BhY2VVUkkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBudWxsLCAiYWRkUG9ydFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJwb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJhZGRTZXJ2aWNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElTZXJ2aWNlKCksICJzZXJ2aWNlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJQmluZGluZ0ZhdWx0KCksICJjcmVhdGVCaW5kaW5nRmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nSW5wdXQoKSwgImNyZWF0ZUJpbmRpbmdJbnB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdPdXRwdXQoKSwgImNyZWF0ZUJpbmRpbmdPdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nT3BlcmF0aW9uKCksICJjcmVhdGVCaW5kaW5nT3BlcmF0aW9uIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJQmluZGluZygpLCAiY3JlYXRlQmluZGluZyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUZhdWx0KCksICJjcmVhdGVGYXVsdCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUltcG9ydCgpLCAiY3JlYXRlSW1wb3J0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJSW5wdXQoKSwgImNyZWF0ZUlucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJTWVzc2FnZSgpLCAiY3JlYXRlTWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU9wZXJhdGlvbigpLCAiY3JlYXRlT3BlcmF0aW9uIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJT3V0cHV0KCksICJjcmVhdGVPdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElQYXJ0KCksICJjcmVhdGVQYXJ0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJUG9ydCgpLCAiY3JlYXRlUG9ydCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJjcmVhdGVQb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVNlcnZpY2UoKSwgImNyZWF0ZVNlcnZpY2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nKCksICJnZXRCaW5kaW5nIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJTWFwKCksICJnZXRCaW5kaW5ncyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0SW1wb3J0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUxpc3QoKSwgImdldEltcG9ydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lc3BhY2VVUkkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNZXNzYWdlKCksICJnZXRNZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJTWFwKCksICJnZXRNZXNzYWdlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJnZXROYW1lc3BhY2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwcmVmaXgiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldE5hbWVzcGFjZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElQb3J0VHlwZSgpLCAiZ2V0UG9ydFR5cGUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldFBvcnRUeXBlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJnZXRQcmVmaXgiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lc3BhY2VVUkkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElTZXJ2aWNlKCksICJnZXRTZXJ2aWNlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJTWFwKCksICJnZXRTZXJ2aWNlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCksICJnZXRFeHRlbnNpb25SZWdpc3RyeSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJzZXRFeHRlbnNpb25SZWdpc3RyeSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKSwgImV4dGVuc2lvblJlZ2lzdHJ5IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImdldERvY3VtZW50QmFzZVVSSSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJzZXREb2N1bWVudEJhc2VVUkkiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkb2N1bWVudEJhc2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElUeXBlcygpLCAiY3JlYXRlVHlwZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElTZXJ2aWNlKCksICJyZW1vdmVTZXJ2aWNlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJQmluZGluZygpLCAicmVtb3ZlQmluZGluZyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJyZW1vdmVQb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1lc3NhZ2UoKSwgInJlbW92ZU1lc3NhZ2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElUeXBlcygpLCAiZ2V0VHlwZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBudWxsLCAic2V0VHlwZXMiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SVR5cGVzKCksICJ0eXBlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlJbXBvcnRFQ2xhc3MsIGphdmF4LndzZGwuSW1wb3J0LmNsYXNzLCAiSUltcG9ydCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlMaXN0RUNsYXNzLCBMaXN0LmNsYXNzLCAiSUxpc3QiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpTWFwRUNsYXNzLCBNYXAuY2xhc3MsICJJTWFwIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaXVybEVDbGFzcywgVVJMLmNsYXNzLCAiSVVSTCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaUV4dGVuc2lvblJlZ2lzdHJ5RUNsYXNzLAotICAgICAgRXh0ZW5zaW9uUmVnaXN0cnkuY2xhc3MsCi0gICAgICAiSUV4dGVuc2lvblJlZ2lzdHJ5IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3ModHlwZXNFQ2xhc3MsIFR5cGVzLmNsYXNzLCAiVHlwZXMiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbih0eXBlc0VDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0U2NoZW1hcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24odHlwZXNFQ2xhc3MsIHRoaXMuZ2V0SUxpc3QoKSwgImdldFNjaGVtYXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lc3BhY2VVUkkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpSXRlcmF0b3JFQ2xhc3MsIEl0ZXJhdG9yLmNsYXNzLCAiSUl0ZXJhdG9yIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaVR5cGVzRUNsYXNzLCBqYXZheC53c2RsLlR5cGVzLmNsYXNzLCAiSVR5cGVzIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsCi0gICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsCi0gICAgICAiVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKSwKLSAgICAgIHRoaXMuZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCksCi0gICAgICBudWxsLAotICAgICAgImNoaWxkcmVuIiwgbnVsbCwgMCwgLTEsIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLAotICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsCi0gICAgICAiWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50X1NjaGVtYSgpLAotICAgICAgdGhlWFNEUGFja2FnZS5nZXRYU0RTY2hlbWEoKSwKLSAgICAgIG51bGwsCi0gICAgICAic2NoZW1hIiwgbnVsbCwgMCwgMSwgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MobWVzc2FnZVJlZmVyZW5jZUVDbGFzcywgTWVzc2FnZVJlZmVyZW5jZS5jbGFzcywgIk1lc3NhZ2VSZWZlcmVuY2UiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBNZXNzYWdlUmVmZXJlbmNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRNZXNzYWdlUmVmZXJlbmNlX0VNZXNzYWdlKCksCi0gICAgICB0aGlzLmdldE1lc3NhZ2UoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU1lc3NhZ2UiLCBudWxsLCAxLCAxLCBNZXNzYWdlUmVmZXJlbmNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKLSAgICBpbml0RURhdGFUeXBlKHFOYW1lRURhdGFUeXBlLCBRTmFtZS5jbGFzcywgIlFOYW1lIiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFRGF0YVR5cGUob3BlcmF0aW9uVHlwZUVEYXRhVHlwZSwgT3BlcmF0aW9uVHlwZS5jbGFzcywgIk9wZXJhdGlvblR5cGUiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVEYXRhVHlwZShkb21FbGVtZW50RURhdGFUeXBlLCBFbGVtZW50LmNsYXNzLCAiRE9NRWxlbWVudCIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RURhdGFUeXBlKHdzZGxFeGNlcHRpb25FRGF0YVR5cGUsIFdTRExFeGNlcHRpb24uY2xhc3MsICJXU0RMRXhjZXB0aW9uIiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFRGF0YVR5cGUoZG9tRG9jdW1lbnRFRGF0YVR5cGUsIERvY3VtZW50LmNsYXNzLCAiRE9NRG9jdW1lbnQiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2UKLSAgICBjcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKLSAgfQotCi19IC8vV1NETFBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZGIzMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsI2dldFNjaGVtYSA8ZW0+U2NoZW1hPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjaGVtYSgpIDxlbT5TY2hlbWE8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFNjaGVtYSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RTY2hlbWEgc2NoZW1hID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hIGdldFNjaGVtYSgpCi0gIHsKLSAgICByZXR1cm4gc2NoZW1hOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRTY2hlbWEoWFNEU2NoZW1hIG5ld1NjaGVtYSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIFhTRFNjaGVtYSBvbGRTY2hlbWEgPSBzY2hlbWE7Ci0gICAgc2NoZW1hID0gbmV3U2NoZW1hOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICB7Ci0gICAgICBFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwoCi0gICAgICAgIHRoaXMsCi0gICAgICAgIE5vdGlmaWNhdGlvbi5TRVQsCi0gICAgICAgIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEsCi0gICAgICAgIG9sZFNjaGVtYSwKLSAgICAgICAgbmV3U2NoZW1hKTsKLSAgICAgIGlmIChtc2dzID09IG51bGwpCi0gICAgICAgIG1zZ3MgPSBub3RpZmljYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtc2dzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoWFNEU2NoZW1hIG5ld1NjaGVtYSkKLSAgewotICAgIGlmIChuZXdTY2hlbWEgIT0gc2NoZW1hKQotICAgIHsKLSAgICAgIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOwotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3Qpc2NoZW1hKS5lSW52ZXJzZVJlbW92ZSgKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BLAotICAgICAgICAgIG51bGwsCi0gICAgICAgICAgbXNncyk7Ci0gICAgICBpZiAobmV3U2NoZW1hICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdTY2hlbWEpLmVJbnZlcnNlQWRkKAotICAgICAgICAgIHRoaXMsCi0gICAgICAgICAgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBtc2dzKTsKLSAgICAgIG1zZ3MgPSBiYXNpY1NldFNjaGVtYShuZXdTY2hlbWEsIG1zZ3MpOwotICAgICAgaWYgKG1zZ3MgIT0gbnVsbCkKLSAgICAgICAgbXNncy5kaXNwYXRjaCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEsIG5ld1NjaGVtYSwgbmV3U2NoZW1hKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUE6Ci0gICAgICByZXR1cm4gYmFzaWNTZXRTY2hlbWEobnVsbCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQToKLSAgICAgIHJldHVybiBnZXRTY2hlbWEoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BOgotICAgICAgc2V0U2NoZW1hKChYU0RTY2hlbWEpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQToKLSAgICAgIHNldFNjaGVtYSgoWFNEU2NoZW1hKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUE6Ci0gICAgICByZXR1cm4gc2NoZW1hICE9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbCNyZWNvbmNpbGUob3JnLnczYy5kb20uRWxlbWVudCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlY29uY2lsZShFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgZWxlbWVudCA9IGNoYW5nZWRFbGVtZW50OyAvLyBUaGlzIGxpbmUgbWF5IG5vdCBuZWVkZWQuICAgIAotICAgIGlmIChzY2hlbWEgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgbmV3U2NoZW1hID0gWFNEU2NoZW1hSW1wbC5jcmVhdGVTY2hlbWEoY2hhbmdlZEVsZW1lbnQpOwotICAgICAgc2V0U2NoZW1hKG5ld1NjaGVtYSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFhTRFNjaGVtYSBjcmVhdGVTY2hlbWEoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKCJzY2hlbWEiKSAmJiBYU0RDb25zdGFudHMuaXNTY2hlbWFGb3JTY2hlbWFOYW1lc3BhY2UoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgewotICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFNjaGVtYSgpOwotICAgICAgeHNkU2NoZW1hLnNldEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICByZXR1cm4geHNkU2NoZW1hOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpCi0gIHsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgZWxzZSBpZiAoZ2V0U2NoZW1hKCkgIT0gbnVsbCkKLSAgICAgIGVsZW1lbnQgPSBnZXRTY2hlbWEoKS5nZXRFbGVtZW50KCk7Ci0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCBuZXdFbGVtZW50KQotICB7Ci0gICAgaWYgKG5ld0VsZW1lbnQgPT0gbnVsbCAmJiAhaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICBlbGVtZW50ID0gbnVsbDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEVsZW1lbnRHZW4obmV3RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCBYU0RDb25zdGFudHMuU0NIRU1BX0VMRU1FTlRfVEFHKTsKLQotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnRUeXBlKFFOYW1lIG5ld0VsZW1lbnRUeXBlKQotICB7Ci0gICAgLy8gU2hvdWxkIG5vdCBkbyBhbnl0aGluZy4KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHN1cGVyLnJlY29uY2lsZUF0dHJpYnV0ZXMoY2hhbmdlZEVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBpZiAoc2NoZW1hID09IG51bGwpIC8vIGtiIE5vdGU6IFRoaXMgY2FzZSBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuLgotICAgIHsKLSAgICAgIC8vIGNzIC4uLiB3aHkgZG8gd2UgZG8gdGhpcyBpZiBpdHMgbm90IHN1cHBvc2VkIHRvIGhhcHBlbj8KLSAgICAgIC8vIElzIHRoZXJlIGEgc2NlbmFyaW8gd2hlcmUgdGhpcyBpcyBhIHVzZWZ1bGwgZmFsbGJhY2s/Ci0gICAgICAvLyBVbmRlciB3aGF0IGNvbmRpdGlvbnMgZG9lcyB0aGlzIGNvZGUgZ2V0IGV4ZWN1dGVkIChpLmUuIHdoeSB3b3VsZCBzY2hlbWEgPT0gbnVsbCk/Ci0gICAgICBzY2hlbWEgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RTY2hlbWEoKTsKLSAgICAgIHNjaGVtYS5zZXRTY2hlbWFGb3JTY2hlbWFRTmFtZVByZWZpeCgieHNkIik7Ci0gICAgICBzY2hlbWEuc2V0VGFyZ2V0TmFtZXNwYWNlKCJodHRwOi8vdGVtcHVyaS5vcmcvIik7Ci0gICAgICBqYXZhLnV0aWwuTWFwIHFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAgPSBzY2hlbWEuZ2V0UU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcCgpOwotICAgICAgcU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcC5wdXQoIiIsIHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgICBxTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwLnB1dChzY2hlbWEuZ2V0U2NoZW1hRm9yU2NoZW1hUU5hbWVQcmVmaXgoKSwgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxKTsKLSAgICAgIGFkb3B0KHNjaGVtYSk7Ci0gICAgICBzY2hlbWEudXBkYXRlRWxlbWVudCh0cnVlKTsKLSAgICAgIHJldHVybiBzY2hlbWEuZ2V0RWxlbWVudCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZWxlbWVudCA9IHNjaGVtYS5nZXRFbGVtZW50KCk7Ci0gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKQotICAgICAgewotICAgICAgICBhZG9wdChzY2hlbWEpOwotICAgICAgICBzY2hlbWEudXBkYXRlRWxlbWVudCh0cnVlKTsKLSAgICAgICAgZWxlbWVudCA9IHNjaGVtYS5nZXRFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRvcHQoWFNEU2NoZW1hIHhzZFNjaGVtYSkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50ID09IG51bGwpCi0gICAgICBkb2N1bWVudCA9ICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikudXBkYXRlRG9jdW1lbnQoKTsKLQotICAgIGlmICh4c2RTY2hlbWEuZ2V0RG9jdW1lbnQoKSAhPSBudWxsKQotICAgICAgeHNkU2NoZW1hLnNldERvY3VtZW50KG51bGwpOwotCi0gICAgeHNkU2NoZW1hLnNldERvY3VtZW50KGRvY3VtZW50KTsKLSAgfQotCi0gIC8qCi0gICBwcml2YXRlIEVsZW1lbnQgYWRvcHQoRWxlbWVudCBlbGVtZW50KQotICAgewotICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkKLSAgIHJldHVybiBlbGVtZW50OwotCi0gICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgIGlmIChkb2N1bWVudCA9PSBudWxsKQotICAgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKSBkZWZpbml0aW9uKS51cGRhdGVEb2N1bWVudCgpOwotICAgCi0gICByZXR1cm4gKEVsZW1lbnQpZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50LHRydWUpOwotICAgfQotICAgKi8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICAvLyBUT0RPLi4uIHJldmlzdCB0aGlzIGJsb2NrIG9mIGNvZGUKLSAgICAvLwotICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BKQotICAgIHsKLSAgICAgIC8vIFdlIGdvdCBhIG5ldyBzY2hlbWEgc28gcmUtcGFyZW50IGl0LgotICAgICAgLy8gY3MuLi4gYXJlIHdlIHJlYWxseSBkb2luZyB0aGUgcmlnaHQgdGhpbmcgaGVyZT8gIHRoaXMgc2VlbXMgc3RyYW5nZQotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoKHNjaGVtYS5nZXRFbGVtZW50KCkgPT0gbnVsbCAmJiBnZXRFbGVtZW50KCkgPT0gbnVsbCkgfHwgKHNjaGVtYS5nZXRFbGVtZW50KCkgIT0gZ2V0RWxlbWVudCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHNjaGVtYS5zZXREb2N1bWVudChudWxsKTsKLSAgICAgICAgICBzY2hlbWEuc2V0RWxlbWVudChudWxsKTsKLSAgICAgICAgICBhZG9wdChzY2hlbWEpOwotICAgICAgICAgIHNjaGVtYS51cGRhdGVFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5MaXRlcmFscy5XU0RMX0VMRU1FTlRfX0VMRU1FTlQpCi0gICAgewotICAgICAgc2V0U2NoZW1hKGNyZWF0ZVNjaGVtYShlbGVtZW50KSk7IC8vIGVsZW1lbnQgaXMgbm90IG51bGwKLSAgICB9Ci0gIH0KLX0gLy9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETEZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvd3NkbDRqL1dTRExGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODA2YTQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqOwotCi0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExXcml0ZXI7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIFdTRExGYWN0b3J5SW1wbCBleHRlbmRzIFdTRExGYWN0b3J5Ci17Ci0KLSAgLy9wdWJsaWMgc3RhdGljIFdTRExGYWN0b3J5IG5ld0luc3RhbmNlKCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgLy97Ci0gIC8vICByZXR1cm4gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICAvL30KLQotICBwdWJsaWMgV1NETEZhY3RvcnlJbXBsKCkKLSAgewotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gbmV3RGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZURlZmluaXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBFeHRlbnNpb25SZWdpc3RyeSBuZXdQb3B1bGF0ZWRFeHRlbnNpb25SZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBXU0RMUmVhZGVyIG5ld1dTRExSZWFkZXIoKQotICB7Ci0gICAgV1NETFJlYWRlciByZWFkZXIgPSBuZXcgV1NETFJlYWRlckltcGwoKTsKLSAgICByZWFkZXIuc2V0RmFjdG9yeUltcGxOYW1lKGdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gcmVhZGVyOwotICB9Ci0KLSAgcHVibGljIFdTRExXcml0ZXIgbmV3V1NETFdyaXRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IFdTRExXcml0ZXJJbXBsKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETFJlYWRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETFJlYWRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY5NjNmNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvd3NkbDRqL1dTRExSZWFkZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ajsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETExvY2F0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXU0RMUmVhZGVySW1wbCBpbXBsZW1lbnRzIFdTRExSZWFkZXIKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZmFjdG9yeUltcGxOYW1lOwotCi0gIHByaXZhdGUgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0UmVnOwotCi0gIHB1YmxpYyBFeHRlbnNpb25SZWdpc3RyeSBnZXRFeHRlbnNpb25SZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gZXh0UmVnOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RXh0ZW5zaW9uUmVnaXN0cnkoRXh0ZW5zaW9uUmVnaXN0cnkgZXh0UmVnKQotICB7Ci0gICAgdGhpcy5leHRSZWcgPSBleHRSZWc7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZhY3RvcnlJbXBsTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZmFjdG9yeUltcGxOYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RmFjdG9yeUltcGxOYW1lKFN0cmluZyBmYWN0b3J5SW1wbE5hbWUpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgdGhpcy5mYWN0b3J5SW1wbE5hbWUgPSBmYWN0b3J5SW1wbE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRGZWF0dXJlKFN0cmluZyBuYW1lKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGZWF0dXJlKFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBXU0RMIGRvY3VtZW50IGFjY2Vzc2libGUgdmlhIHRoZSBzcGVjaWZpZWQKLSAgICogVVJJIGludG8gYSBXU0RMIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSB3c2RsVVJJIGEgVVJJIChjYW4gYmUgYSBmaWxlbmFtZSBvciBVUkwpIHBvaW50aW5nIHRvIGEKLSAgICogV1NETCBYTUwgZGVmaW5pdGlvbi4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbi4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIHJlYWRXU0RMKFN0cmluZyB3c2RsVVJJKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgVVJJIHVyaTsKLSAgICBpZiAoaGFzUHJvdG9jb2wod3NkbFVSSSkpCi0gICAgICB1cmkgPSBVUkkuY3JlYXRlVVJJKHdzZGxVUkkpOwotICAgIGVsc2UKLSAgICAgIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKHdzZGxVUkkpOwotCi0gICAgLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0LCBjcmVhdGUgYSB3c2RsIHJlc291cmNlLCBhbmQgbG9hZCB0aGUgbWFpbiB3c2RsIGZpbGUgaW50byBpdC4KLQotICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgIHJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCJ3c2RsIiwgbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOwotCi0gICAgV1NETFJlc291cmNlSW1wbCB3c2RsTWFpblJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOwotICAgIHdzZGxNYWluUmVzb3VyY2Uuc2V0VVJJKHVyaSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IHJlc291cmNlU2V0LmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHVyaSk7Ci0gICAgICB3c2RsTWFpblJlc291cmNlLmxvYWQoaW5wdXRTdHJlYW0sIHJlc291cmNlU2V0LmdldExvYWRPcHRpb25zKCkpOwotICAgICAgLy93c2RsTWFpblJlc291cmNlLmxvYWQocmVzb3VyY2VTZXQuZ2V0TG9hZE9wdGlvbnMoKSk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uSU5WQUxJRF9XU0RMLCAiV1NETCBVUkk6ICIgKyB3c2RsVVJJLCBlKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBtYWluIHJlc291cmNlLgotICAgIHJldHVybiB3c2RsTWFpblJlc291cmNlLmdldERlZmluaXRpb24oKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNQcm90b2NvbChTdHJpbmcgdXJpKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAodXJpICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gdXJpLmluZGV4T2YoIjoiKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSAmJiBpbmRleCA+IDIpIC8vIGFzc3VtZSBwcm90b2NvbCB3aXRoIGJlIGxlbmd0aCAzIHNvIHRoYXQgdGhlJ0MnIGluICdDOi8nIGlzIG5vdCBpbnRlcnByZXRlZCBhcyBhIHByb3RvY29sCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCB0aGUgV1NETCBkb2N1bWVudCBhY2Nlc3NpYmxlIHZpYSB0aGUgc3BlY2lmaWVkCi0gICAqIFVSSSBpbnRvIGEgV1NETCBkZWZpbml0aW9uLgotICAgKgotICAgKiBAcGFyYW0gY29udGV4dFVSSSB0aGUgY29udGV4dCBpbiB3aGljaCB0byByZXNvbHZlIHRoZQotICAgKiB3c2RsVVJJLCBpZiB0aGUgd3NkbFVSSSBpcyByZWxhdGl2ZS4gQ2FuIGJlIG51bGwsIGluIHdoaWNoCi0gICAqIGNhc2UgaXQgd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcGFyYW0gd3NkbFVSSSBhIFVSSSAoY2FuIGJlIGEgZmlsZW5hbWUgb3IgVVJMKSBwb2ludGluZyB0byBhCi0gICAqIFdTREwgWE1MIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24uCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiByZWFkV1NETChTdHJpbmcgY29udGV4dFVSSSwgU3RyaW5nIHdzZGxVUkkpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLk9USEVSX0VSUk9SLCAiTm90IEltcGxlbWVudGVkIik7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCB0aGUgc3BlY2lmaWVkICZsdDt3c2RsOmRlZmluaXRpb25zJmd0OyBlbGVtZW50IGludG8gYSBXU0RMCi0gICAqIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgdGhlIGRvY3VtZW50IGJhc2UgVVJJIG9mIHRoZSBXU0RMIGRlZmluaXRpb24KLSAgICogZGVzY3JpYmVkIGJ5IHRoZSBlbGVtZW50LiBXaWxsIGJlIHNldCBhcyB0aGUgZG9jdW1lbnRCYXNlVVJJCi0gICAqIG9mIHRoZSByZXR1cm5lZCBEZWZpbml0aW9uLiBDYW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSBpdAotICAgKiB3aWxsIGJlIGlnbm9yZWQuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uc0VsZW1lbnQgdGhlICZsdDt3c2RsOmRlZmluaXRpb25zJmd0OyBlbGVtZW50Ci0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZGVzY3JpYmVkIGJ5IHRoZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRWxlbWVudCBkZWZpbml0aW9uc0VsZW1lbnQpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLk9USEVSX0VSUk9SLCAiTm90IEltcGxlbWVudGVkIik7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCB0aGUgc3BlY2lmaWVkIFdTREwgZG9jdW1lbnQgaW50byBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIGRvY3VtZW50QmFzZVVSSSB0aGUgZG9jdW1lbnQgYmFzZSBVUkkgb2YgdGhlIFdTREwgZGVmaW5pdGlvbgotICAgKiBkZXNjcmliZWQgYnkgdGhlIGRvY3VtZW50LiBXaWxsIGJlIHNldCBhcyB0aGUgZG9jdW1lbnRCYXNlVVJJCi0gICAqIG9mIHRoZSByZXR1cm5lZCBEZWZpbml0aW9uLiBDYW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSBpdAotICAgKiB3aWxsIGJlIGlnbm9yZWQuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgdGhlIFdTREwgZG9jdW1lbnQsIGFuIFhNTCAKLSAgICogZG9jdW1lbnQgb2JleWluZyB0aGUgV1NETCBzY2hlbWEuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIHJlYWRXU0RMKFN0cmluZyBkb2N1bWVudEJhc2VVUkksIERvY3VtZW50IHdzZGxEb2N1bWVudCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IsICJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIGEgV1NETCBkb2N1bWVudCBpbnRvIGEgV1NETCBkZWZpbml0aW9uLgotICAgKgotICAgKiBAcGFyYW0gZG9jdW1lbnRCYXNlVVJJIHRoZSBkb2N1bWVudCBiYXNlIFVSSSBvZiB0aGUgV1NETCBkZWZpbml0aW9uCi0gICAqIGRlc2NyaWJlZCBieSB0aGUgZG9jdW1lbnQuIFdpbGwgYmUgc2V0IGFzIHRoZSBkb2N1bWVudEJhc2VVUkkKLSAgICogb2YgdGhlIHJldHVybmVkIERlZmluaXRpb24uIENhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlIGl0Ci0gICAqIHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHBhcmFtIGlucHV0U291cmNlIGFuIElucHV0U291cmNlIHBvaW50aW5nIHRvIHRoZQotICAgKiBXU0RMIGRvY3VtZW50LCBhbiBYTUwgZG9jdW1lbnQgb2JleWluZyB0aGUgV1NETCBzY2hlbWEuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudCBwb2ludGVkIHRvCi0gICAqIGJ5IHRoZSBJbnB1dFNvdXJjZS4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIHJlYWRXU0RMKFN0cmluZyBkb2N1bWVudEJhc2VVUkksIElucHV0U291cmNlIGlucHV0U291cmNlKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIndzZGwiLCBuZXcgV1NETFJlc291cmNlRmFjdG9yeUltcGwoKSk7Ci0gICAgV1NETFJlc291cmNlSW1wbCB3c2RsTWFpblJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGRvY3VtZW50QmFzZVVSSSAhPSBudWxsKQotICAgICAgICB3c2RsTWFpblJlc291cmNlLnNldFVSSShjcmVhdGVVUkkoZG9jdW1lbnRCYXNlVVJJKSk7Ci0gICAgICByZXNvdXJjZVNldC5nZXRMb2FkT3B0aW9ucygpLnB1dChXU0RMUmVzb3VyY2VJbXBsLkNPTlRJTlVFX09OX0xPQURfRVJST1IsIG5ldyBCb29sZWFuKGZhbHNlKSk7Ci0gICAgICB3c2RsTWFpblJlc291cmNlLmxvYWQoaW5wdXRTb3VyY2UuZ2V0Qnl0ZVN0cmVhbSgpLCByZXNvdXJjZVNldC5nZXRMb2FkT3B0aW9ucygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLklOVkFMSURfV1NETCwgIiIsIGlvZSk7Ci0gICAgfQotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbE1haW5SZXNvdXJjZS5nZXREZWZpbml0aW9uKCk7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIGRlZmluaXRpb24uc2V0RG9jdW1lbnRCYXNlVVJJKGRvY3VtZW50QmFzZVVSSSk7Ci0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIGEgV1NETCBkb2N1bWVudCBpbnRvIGEgV1NETCBkZWZpbml0aW9uLgotICAgKgotICAgKiBAcGFyYW0gbG9jYXRvciBBIFdTRExMb2NhdG9yIG9iamVjdCB1c2VkIHRvIHByb3ZpZGUgSW5wdXRTb3VyY2VzCi0gICAqIHBvaW50aW5nIHRvIHRoZSB3c2RsIGZpbGUuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gcmVhZFdTREwoV1NETExvY2F0b3IgbG9jYXRvcikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IsICJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIHByaXZhdGUgVVJJIGNyZWF0ZVVSSShTdHJpbmcgdXJpU3RyaW5nKQotICB7Ci0gICAgaWYgKGhhc1Byb3RvY29sKHVyaVN0cmluZykpCi0gICAgICByZXR1cm4gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBVUkkuY3JlYXRlRmlsZVVSSSh1cmlTdHJpbmcpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETFdyaXRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETFdyaXRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY2OWY2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvd3NkbDRqL1dTRExXcml0ZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ajsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETFdyaXRlckltcGwgaW1wbGVtZW50cyBXU0RMV3JpdGVyCi17Ci0gIC8qKgotICAgKiBTZXRzIHRoZSBzcGVjaWZpZWQgZmVhdHVyZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgotICAgKiA8cD4KLSAgICogVGhlcmUgYXJlIG5vIG1pbmltdW0gZmVhdHVyZXMgdGhhdCBtdXN0IGJlIHN1cHBvcnRlZC4KLSAgICogPHA+Ci0gICAqIEFsbCBmZWF0dXJlIG5hbWVzIG11c3QgYmUgZnVsbHktcXVhbGlmaWVkLCBKYXZhIHBhY2thZ2Ugc3R5bGUuIEFsbAotICAgKiBuYW1lcyBzdGFydGluZyB3aXRoIGphdmF4LndzZGwuIGFyZSByZXNlcnZlZCBmb3IgZmVhdHVyZXMgZGVmaW5lZAotICAgKiBieSB0aGUgSldTREwgc3BlY2lmaWNhdGlvbi4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpbXBsZW1lbnRhdGlvbi0KLSAgICogc3BlY2lmaWMgZmVhdHVyZXMgYmUgZnVsbHktcXVhbGlmaWVkIHRvIG1hdGNoIHRoZSBwYWNrYWdlIG5hbWUKLSAgICogb2YgdGhhdCBpbXBsZW1lbnRhdGlvbi4gRm9yIGV4YW1wbGU6IGNvbS5hYmMuZmVhdHVyZU5hbWUKLSAgICoKLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gYmUgc2V0LgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHNldCB0aGUgZmVhdHVyZSB0by4KLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGZlYXR1cmUgbmFtZSBpcyBub3QgcmVjb2duaXplZC4KLSAgICogQHNlZSAjZ2V0RmVhdHVyZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGZWF0dXJlKFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGZlYXR1cmUuCi0gICAqCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGdldCB0aGUgdmFsdWUgb2YuCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBmZWF0dXJlIG5hbWUgaXMgbm90IHJlY29nbml6ZWQuCi0gICAqIEBzZWUgI3NldEZlYXR1cmUoU3RyaW5nLCBib29sZWFuKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0RmVhdHVyZShTdHJpbmcgbmFtZSkgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgotICB7Ci0gICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTm90IEltcGxlbWVudGVkIik7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgZG9jdW1lbnQgZ2VuZXJhdGVkIGZyb20gdGhlIHNwZWNpZmllZCBXU0RMIG1vZGVsLgotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KERlZmluaXRpb24gd3NkbERlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHJldHVybiAoKERlZmluaXRpb25JbXBsKXdzZGxEZWYpLmdldERvY3VtZW50KCk7Ci0gIH0KLQotICAvKioKLSAgICogV3JpdGUgdGhlIHNwZWNpZmllZCBXU0RMIGRlZmluaXRpb24gdG8gdGhlIHNwZWNpZmllZCBXcml0ZXIuCi0gICAqCi0gICAqIEBwYXJhbSB3c2RsRGVmIHRoZSBXU0RMIGRlZmluaXRpb24gdG8gYmUgd3JpdHRlbi4KLSAgICogQHBhcmFtIHNpbmsgdGhlIFdyaXRlciB0byB3cml0ZSB0aGUgeG1sIHRvLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGVXU0RMKERlZmluaXRpb24gd3NkbERlZiwgV3JpdGVyIHNpbmspIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIFRyYW5zZm9ybWVyRmFjdG9yeSB0cmFuc2Zvcm1lckZhY3RvcnkgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXJGYWN0b3J5Lm5ld1RyYW5zZm9ybWVyKCk7Ci0KLSAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0gICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLk1FVEhPRCwgInhtbCIpOwotCi0gICAgICAvLyBVbmxlc3MgYSB3aWR0aCBpcyBzZXQsIHRoZXJlIHdpbGwgYmUgb25seSBsaW5lIGJyZWFrcyBidXQgbm8gaW5kZW50YXRpb24uCi0gICAgICAvLyBUaGUgSUJNIEpESyBhbmQgdGhlIFN1biBKREsgZG9uJ3QgYWdyZWUgb24gdGhlIHByb3BlcnR5IG5hbWUsCi0gICAgICAvLyBzbyB3ZSBzZXQgdGhlbSBib3RoLgotICAgICAgLy8KLSAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFufWluZGVudC1hbW91bnQiLCAiMiIpOwotICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjIiKTsKLSAgICAgIGlmIChlbmNvZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCBlbmNvZGluZyk7Ci0gICAgICB9Ci0KLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gKChEZWZpbml0aW9uSW1wbCl3c2RsRGVmKS5nZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvY3VtZW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgICgoRGVmaW5pdGlvbkltcGwpd3NkbERlZikudXBkYXRlRWxlbWVudCh0cnVlKTsKLSAgICAgICAgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKXdzZGxEZWYpLmdldERvY3VtZW50KCk7Ci0gICAgICB9Ci0KLSAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShuZXcgRE9NU291cmNlKGRvY3VtZW50KSwgbmV3IFN0cmVhbVJlc3VsdChzaW5rKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwgIkZhaWxlZCB0byBzYXZlIERlZmluaXRpb25zLiIsIGV4Y2VwdGlvbik7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogV3JpdGUgdGhlIHNwZWNpZmllZCBXU0RMIGRlZmluaXRpb24gdG8gdGhlIHNwZWNpZmllZCBPdXRwdXRTdHJlYW0uCi0gICAqCi0gICAqIEBwYXJhbSB3c2RsRGVmIHRoZSBXU0RMIGRlZmluaXRpb24gdG8gYmUgd3JpdHRlbi4KLSAgICogQHBhcmFtIHNpbmsgdGhlIE91dHB1dFN0cmVhbSB0byB3cml0ZSB0aGUgeG1sIHRvLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGVXU0RMKERlZmluaXRpb24gd3NkbERlZiwgT3V0cHV0U3RyZWFtIHNpbmspIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLQotICAgIFJlc291cmNlIHJlc291cmNlID0gKChEZWZpbml0aW9uSW1wbCl3c2RsRGVmKS5lUmVzb3VyY2UoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXNvdXJjZS5zYXZlKHNpbmssIG51bGwpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLk9USEVSX0VSUk9SLCAiRmFpbGVkIHRvIHNhdmUgRGVmaW5pdGlvbnMuIiwgZSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvUmVjb25jaWxhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvUmVjb25jaWxhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNzhiNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1JlY29uY2lsYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLy8gVE9ETy4uLiB3aHkgZG8gd2UgbmVlZCB0aGlzPwotLy8gCi1wdWJsaWMgaW50ZXJmYWNlIFJlY29uY2lsYWJsZQotewotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7Ci0KLSAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpOwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCk7Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmEyMGM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFdTRExBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBXU0RMUGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBXU0RMQWRhcHRlckZhY3RvcnkoKQotICB7Ci0gICAgaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsUGFja2FnZSA9IFdTRExQYWNrYWdlLmVJTlNUQU5DRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETFN3aXRjaCBtb2RlbFN3aXRjaCA9IG5ldyBXU0RMU3dpdGNoKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlUG9ydFR5cGUoUG9ydFR5cGUgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlUG9ydFR5cGVBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZU9wZXJhdGlvbihPcGVyYXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VNZXNzYWdlKE1lc3NhZ2Ugb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlUGFydChQYXJ0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmcoQmluZGluZyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQmluZGluZ09wZXJhdGlvbkFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlU2VydmljZShTZXJ2aWNlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVNlcnZpY2VBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVBvcnQoUG9ydCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVQb3J0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlRGVmaW5pdGlvbihEZWZpbml0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZURlZmluaXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUltcG9ydChJbXBvcnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSW1wb3J0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmxlRWxlbWVudChFeHRlbnNpYmxlRWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeHRlbnNpYmxlRWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSW5wdXQoSW5wdXQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSW5wdXRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZU91dHB1dChPdXRwdXQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlT3V0cHV0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VGYXVsdChGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGYXVsdEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nSW5wdXRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nT3V0cHV0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmdGYXVsdEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlTmFtZXNwYWNlKE5hbWVzcGFjZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVOYW1lc3BhY2VBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlQb3J0VHlwZShqYXZheC53c2RsLlBvcnRUeXBlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlQb3J0VHlwZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU9wZXJhdGlvbihqYXZheC53c2RsLk9wZXJhdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJSW5wdXQoamF2YXgud3NkbC5JbnB1dCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSW5wdXRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlPdXRwdXQoamF2YXgud3NkbC5PdXRwdXQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSU91dHB1dEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUZhdWx0KGphdmF4LndzZGwuRmF1bHQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJTWVzc2FnZShqYXZheC53c2RsLk1lc3NhZ2Ugb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSU1lc3NhZ2VBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlQYXJ0KGphdmF4LndzZGwuUGFydCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJUGFydEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVNlcnZpY2UoamF2YXgud3NkbC5TZXJ2aWNlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlTZXJ2aWNlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJUG9ydChqYXZheC53c2RsLlBvcnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVBvcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nKGphdmF4LndzZGwuQmluZGluZyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJQmluZGluZ0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmdPcGVyYXRpb24oamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlCaW5kaW5nT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZ0lucHV0KGphdmF4LndzZGwuQmluZGluZ0lucHV0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlCaW5kaW5nSW5wdXRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nT3V0cHV0KGphdmF4LndzZGwuQmluZGluZ091dHB1dCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJQmluZGluZ091dHB1dEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmdGYXVsdChqYXZheC53c2RsLkJpbmRpbmdGYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJQmluZGluZ0ZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSURlZmluaXRpb24oamF2YXgud3NkbC5EZWZpbml0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlEZWZpbml0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJSW1wb3J0KGphdmF4LndzZGwuSW1wb3J0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlJbXBvcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlMaXN0KExpc3Qgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUxpc3RBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlNYXAoTWFwIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlNYXBBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlVUkwoVVJMIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlVUkxBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlFeHRlbnNpb25SZWdpc3RyeShFeHRlbnNpb25SZWdpc3RyeSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJRXh0ZW5zaW9uUmVnaXN0cnlBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVR5cGVzKFR5cGVzIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVzQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJSXRlcmF0b3IoSXRlcmF0b3Igb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUl0ZXJhdG9yQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJVHlwZXMoamF2YXgud3NkbC5UeXBlcyBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJVHlwZXNBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlTWVzc2FnZVJlZmVyZW5jZShNZXNzYWdlUmVmZXJlbmNlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VSZWZlcmVuY2VBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwotICAgICAgfQotICAgIH07Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0gICAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkKLSAgewotICAgIHJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUgPGVtPlBvcnQgVHlwZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3J0VHlwZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24gPGVtPk9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlT3BlcmF0aW9uQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UgPGVtPk1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVNZXNzYWdlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQgPGVtPlBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVQYXJ0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcgPGVtPkJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVCaW5kaW5nQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24gPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQmluZGluZ09wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIDxlbT5TZXJ2aWNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlU2VydmljZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0IDxlbT5Qb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9ydEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24gPGVtPkRlZmluaXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVEZWZpbml0aW9uQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCA8ZW0+SW1wb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJbXBvcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQgPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlbnNpYmxlRWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dCA8ZW0+SW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSW5wdXRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0IDxlbT5PdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZU91dHB1dEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCA8ZW0+RmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRmF1bHRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0IDxlbT5CaW5kaW5nIElucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVCaW5kaW5nSW5wdXRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCA8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVCaW5kaW5nT3V0cHV0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCA8ZW0+QmluZGluZyBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQmluZGluZ0ZhdWx0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSA8ZW0+TmFtZXNwYWNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVOYW1lc3BhY2VBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5Qb3J0VHlwZSA8ZW0+SVBvcnQgVHlwZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLlBvcnRUeXBlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlQb3J0VHlwZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLk9wZXJhdGlvbiA8ZW0+SU9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLk9wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJT3BlcmF0aW9uQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuSW5wdXQgPGVtPklJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLklucHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlJbnB1dEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLk91dHB1dCA8ZW0+SU91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLk91dHB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJT3V0cHV0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuRmF1bHQgPGVtPklGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLkZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLk1lc3NhZ2UgPGVtPklNZXNzYWdlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuTWVzc2FnZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTWVzc2FnZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlBhcnQgPGVtPklQYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuUGFydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJUGFydEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlNlcnZpY2UgPGVtPklTZXJ2aWNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuU2VydmljZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJU2VydmljZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlBvcnQgPGVtPklQb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuUG9ydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJUG9ydEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmcgPGVtPklCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJQmluZGluZ0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gPGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUJpbmRpbmdPcGVyYXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgPGVtPklCaW5kaW5nIElucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ0lucHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlCaW5kaW5nSW5wdXRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IDxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlCaW5kaW5nT3V0cHV0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IDxlbT5JQmluZGluZyBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdGYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJQmluZGluZ0ZhdWx0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuRGVmaW5pdGlvbiA8ZW0+SURlZmluaXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5EZWZpbml0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlEZWZpbml0aW9uQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuSW1wb3J0IDxlbT5JSW1wb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuSW1wb3J0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlJbXBvcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLkxpc3QgPGVtPklMaXN0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmEudXRpbC5MaXN0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlMaXN0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAgPGVtPklNYXA8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YS51dGlsLk1hcAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTWFwQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubmV0LlVSTCA8ZW0+SVVSTDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZhLm5ldC5VUkwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVVSTEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkgPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlFeHRlbnNpb25SZWdpc3RyeUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcyA8ZW0+VHlwZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlVHlwZXNBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLkl0ZXJhdG9yIDxlbT5JSXRlcmF0b3I8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YS51dGlsLkl0ZXJhdG9yCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlJdGVyYXRvckFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlR5cGVzIDxlbT5JVHlwZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5UeXBlcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJVHlwZXNBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlIDxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1lc3NhZ2VSZWZlcmVuY2VBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19IC8vV1NETEFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETERlZmluaXRpb25GYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETERlZmluaXRpb25GYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYTViMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExEZWZpbml0aW9uRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGw7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMRGVmaW5pdGlvbkZhY3RvcnkgZXh0ZW5kcyBjb20uaWJtLndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeUltcGwKLXsKLQotICBwcml2YXRlIHN0YXRpYyBXU0RMRGVmaW5pdGlvbkZhY3RvcnkgaW5zdGFuY2UgPSBudWxsOwotCi0gIHB1YmxpYyBXU0RMRGVmaW5pdGlvbkZhY3RvcnkoKQotICB7Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBXU0RMIHBhY2thZ2UgaXMgaW5pdGlhbGl6ZWQuCi0gICAgV1NETFBhY2thZ2VJbXBsLmluaXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgRGVmaW5pdGlvbi4KLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkRlZmluaXRpb24gbmV3RGVmaW5pdGlvbigpCi0gIHsKLSAgICBqYXZheC53c2RsLkRlZmluaXRpb24gZGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBmYWN0b3J5Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeSBnZXRJbnN0YW5jZSgpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICAgIGluc3RhbmNlID0gbmV3IFdTRExEZWZpbml0aW9uRmFjdG9yeSgpOwotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgV1NETFJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBXU0RMUmVhZGVyIG5ld1dTRExSZWFkZXIoKQotICB7Ci0gICAgV1NETFJlYWRlciByZWFkZXIgPSBuZXcgV1NETFJlYWRlckltcGwoKTsKLSAgICByZWFkZXIuc2V0RmFjdG9yeUltcGxOYW1lKGdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gcmVhZGVyOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMTW9kZWxMb2NhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETE1vZGVsTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2RhYWQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMTW9kZWxMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi0vKioKLSAqIEFuIGFkYXB0ZXIgaW50ZXJmYWNlIHVzZWQgYnkge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydEltcGwgdG8gZmluZCByZWZlcmVuY2VkIHJlc291cmNlcy4KLSAqIFdoZW4gdGhlIHJlc291cmNlIHJlZmVyZW5jZWQgYnkgYSB3c2RsIGltcG9ydCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkLCAKLSAqIHRoZSBjb250YWluaW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2V9Ci0gKiB3aWxsIGJlIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWwjZ2V0UmVnaXN0ZXJlZEFkYXB0ZXIob3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlLE9iamVjdCkgaW5zcGVjdGVkfSAKLSAqIGZvciBhbiBhZGFwdGVyIHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZS4KLSAqIEFzIHN1Y2gsIHlvdSBjYW4gcmVnaXN0ZXIgYW4gYWRhcHRlciBmYWN0b3J5IGxpa2UgdGhpcyB0byB0YWlsb3IgdGhlIGFsZ29yaXRobSB1c2VkIHRvIGxvY2F0ZSB0aGUgcmVzb3VyY2UgOgotICo8cHJlPgotICogIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICogIHJlc291cmNlU2V0LmdldEFkYXB0ZXJGYWN0b3JpZXMoKS5hZGQKLSAqICAgIChuZXcgQWRhcHRlckZhY3RvcnlJbXBsKCkKLSAqICAgICB7Ci0gKiAgICAgICBjbGFzcyBDdXN0b21VUklSZXNvbHZlciBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMgV1NETE1vZGVsTG9jYXRvcgotICogICAgICAgewotICogICAgICAgICBwdWJsaWMgU3RyaW5nIHJlc29sdmVVUkkoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKTsKLSAqICAgICAgICAgewotICogICAgICAgICAgIHJldHVybiBudWxsOyAgLy8gQWRkaXRpb25hbCBsb2dpYy4uLgotICogICAgICAgICB9Ci0gKgotICogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0FkYXRwZXJGb3JUeXBlKE9iamVjdCB0eXBlKQotICogICAgICAgICB7Ci0gKiAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAqICAgICAgICAgfQotICogICAgICAgfQotICoKLSAqICAgICAgIHByb3RlY3RlZCBDdXN0b21VUklSZXNvbHZlciBjdXN0b21VUklSZXNvbHZlciA9IG5ldyBDdXN0b21VUklSZXNvbHZlcigpOwotICoKLSAqICAgICAgIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpCi0gKiAgICAgICB7Ci0gKiAgICAgICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbExvY2F0b3IuY2xhc3M7Ci0gKiAgICAgICB9Ci0gKgotICogICAgICAgcHVibGljIEFkYXB0ZXIgYWRhcHROZXcoTm90aWZpZXIgdGFyZ2V0LCBPYmplY3QgdHlwZSkKLSAqICAgICAgIHsKLSAqICAgICAgICAgcmV0dXJuIGN1c3RvbVVSSVJlc29sdmVyOwotICogICAgICAgfQotICogICAgIH0pOwotICo8L3ByZT4KLSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsI2dldFJlZ2lzdGVyZWRBZGFwdGVyKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZSxPYmplY3QpCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NETE1vZGVsTG9jYXRvcgotewotICBwdWJsaWMgU3RyaW5nIHJlc29sdmVVUkkoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YmMxOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgUmVzb3VyY2VGYWN0b3J5SW1wbAotewotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpCi0gIHsKLSAgICBSZXNvdXJjZSByZXN1bHQgPSBuZXcgV1NETFJlc291cmNlSW1wbCh1cmkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0gLy9XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMU3dpdGNoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MzNhMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaCBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMU3dpdGNoCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgV1NETFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgV1NETFN3aXRjaCgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0gICAgICByZXR1cm4gZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8gZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOiBkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICBzd2l0Y2ggKGNsYXNzaWZpZXJJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVDoKLSAgICAgIHsKLSAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudCh3c2RsRWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFOgotICAgICAgewotICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChwb3J0VHlwZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChwb3J0VHlwZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OOgotICAgICAgewotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KG9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KG9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRToKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KG1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KG1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlQ6Ci0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlUGFydChwYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChwYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJUGFydChwYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChwYXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HOgotICAgICAgewotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZyl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUJpbmRpbmcoYmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoYmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUJpbmRpbmcoYmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoYmluZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT046Ci0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlQmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFOgotICAgICAgewotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoc2VydmljZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc2VydmljZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVDoKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VQb3J0KHBvcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KHBvcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlQb3J0KHBvcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHBvcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVDoKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTjoKLSAgICAgIHsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGRlZmluaXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGRlZmluaXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVDoKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IGltcG9ydF8gPSAoSW1wb3J0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSW1wb3J0KGltcG9ydF8pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGltcG9ydF8pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlJbXBvcnQoaW1wb3J0Xyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaW1wb3J0Xyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJMRV9FTEVNRU5UOgotICAgICAgewotICAgICAgICBFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCA9IChFeHRlbnNpYmxlRWxlbWVudCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGV4dGVuc2libGVFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChleHRlbnNpYmxlRWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU5QVVQ6Ci0gICAgICB7Ci0gICAgICAgIElucHV0IGlucHV0ID0gKElucHV0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSW5wdXQoaW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZU1lc3NhZ2VSZWZlcmVuY2UoaW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlJbnB1dChpbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoaW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGlucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PVVRQVVQ6Ci0gICAgICB7Ci0gICAgICAgIE91dHB1dCBvdXRwdXQgPSAoT3V0cHV0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlT3V0cHV0KG91dHB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlTWVzc2FnZVJlZmVyZW5jZShvdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlPdXRwdXQob3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChvdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KG91dHB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlRmF1bHQoZmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZU1lc3NhZ2VSZWZlcmVuY2UoZmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlGYXVsdChmYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoZmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUOgotICAgICAgewotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gKEJpbmRpbmdJbnB1dCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmdJbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmdJbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVQ6Ci0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IChCaW5kaW5nT3V0cHV0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlQmluZGluZ091dHB1dChiaW5kaW5nT3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChiaW5kaW5nT3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQmluZGluZ091dHB1dChiaW5kaW5nT3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChiaW5kaW5nT3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUOgotICAgICAgewotICAgICAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFOgotICAgICAgewotICAgICAgICBOYW1lc3BhY2UgbmFtZXNwYWNlID0gKE5hbWVzcGFjZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlRZUEVTOgotICAgICAgewotICAgICAgICBUeXBlcyB0eXBlcyA9IChUeXBlcyl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVR5cGVzKHR5cGVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudCh0eXBlcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVR5cGVzKHR5cGVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudCh0eXBlcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQ6Ci0gICAgICB7Ci0gICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQodW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudCh1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudCh1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UOgotICAgICAgewotICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudCh4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudCh4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0U6Ci0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSA9IChNZXNzYWdlUmVmZXJlbmNlKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlTWVzc2FnZVJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChtZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChtZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3J0IFR5cGU8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9ydCBUeXBlPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlUG9ydFR5cGUoUG9ydFR5cGUgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VPcGVyYXRpb24oT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NZXNzYWdlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1lc3NhZ2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VNZXNzYWdlKE1lc3NhZ2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBhcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVBhcnQoUGFydCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZyhCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2VydmljZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXJ2aWNlPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlU2VydmljZShTZXJ2aWNlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3J0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VQb3J0KFBvcnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVmaW5pdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWZpbml0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlRGVmaW5pdGlvbihEZWZpbml0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbXBvcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW1wb3J0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSW1wb3J0KEltcG9ydCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2libGVFbGVtZW50KEV4dGVuc2libGVFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnB1dDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlucHV0KElucHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PdXRwdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3V0cHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlT3V0cHV0KE91dHB1dCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VGYXVsdChGYXVsdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBJbnB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWVzcGFjZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OYW1lc3BhY2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VOYW1lc3BhY2UoTmFtZXNwYWNlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JUG9ydCBUeXBlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklQb3J0IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJUG9ydFR5cGUoamF2YXgud3NkbC5Qb3J0VHlwZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSU9wZXJhdGlvbihqYXZheC53c2RsLk9wZXJhdGlvbiBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUlucHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklJbnB1dDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlJbnB1dChqYXZheC53c2RsLklucHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JT3V0cHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJT3V0cHV0KGphdmF4LndzZGwuT3V0cHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUZhdWx0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUZhdWx0KGphdmF4LndzZGwuRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNZXNzYWdlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNZXNzYWdlPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSU1lc3NhZ2UoamF2YXgud3NkbC5NZXNzYWdlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JUGFydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JUGFydDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlQYXJ0KGphdmF4LndzZGwuUGFydCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNlcnZpY2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNlcnZpY2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU2VydmljZShqYXZheC53c2RsLlNlcnZpY2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklQb3J0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklQb3J0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVBvcnQoamF2YXgud3NkbC5Qb3J0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nKGphdmF4LndzZGwuQmluZGluZyBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklCaW5kaW5nIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nT3BlcmF0aW9uKGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZ0lucHV0KGphdmF4LndzZGwuQmluZGluZ0lucHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmdPdXRwdXQoamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBGYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nRmF1bHQoamF2YXgud3NkbC5CaW5kaW5nRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklEZWZpbml0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklEZWZpbml0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSURlZmluaXRpb24oamF2YXgud3NkbC5EZWZpbml0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSW1wb3J0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklJbXBvcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJSW1wb3J0KGphdmF4LndzZGwuSW1wb3J0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTGlzdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTGlzdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlMaXN0KExpc3Qgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNYXA8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1hcDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlNYXAoTWFwIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JVVJMPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklVUkw8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJVVJMKFVSTCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2lvblJlZ2lzdHJ5KEV4dGVuc2lvblJlZ2lzdHJ5IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UeXBlczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UeXBlczwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVR5cGVzKFR5cGVzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSXRlcmF0b3I8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUl0ZXJhdG9yPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUl0ZXJhdG9yKEl0ZXJhdG9yIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JVHlwZXM8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVR5cGVzPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVR5cGVzKGphdmF4LndzZGwuVHlwZXMgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VNZXNzYWdlUmVmZXJlbmNlKE1lc3NhZ2VSZWZlcmVuY2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL1dTRExTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZmNiM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgV1NETFV0aWwgZXh0ZW5kcyBXU0RMQ29uc3RhbnRzCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgV1NETFV0aWwgaW5zdGFuY2U7Ci0KLSAgLy8gIHByb3RlY3RlZCBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyIG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgPSBuZXcgTm9kZUFzc29jaWF0aW9uTWFuYWdlcigpOwotCi0gIHByb3RlY3RlZCBIYXNoTWFwIGVsZW1lbnROYW1lVG9UeXBlTWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICBwdWJsaWMgc3RhdGljIFdTRExVdGlsIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IFdTRExVdGlsKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMVXRpbCgpCi0gIHsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoQklORElOR19FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoQklORElORykpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChERUZJTklUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihERUZJTklUSU9OKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERPQ1VNRU5UQVRJT04pKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoRkFVTFRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKEZBVUxUKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KElNUE9SVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoSU1QT1JUKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KElOUFVUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTlBVVCkpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChNRVNTQUdFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihNRVNTQUdFKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE9QRVJBVElPTl9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoT1BFUkFUSU9OKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE9VVFBVVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoT1VUUFVUKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KFBBUlRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFBBUlQpKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoUE9SVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoUE9SVCkpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFBPUlRfVFlQRSkpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChTRVJWSUNFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihTRVJWSUNFKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KFRZUEVTX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihUWVBFUykpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRXU0RMVHlwZShFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpbnQgcmVzdWx0ID0gLTE7Ci0KLSAgICBJbnRlZ2VyIGludGVnZXIgPSAoSW50ZWdlcillbGVtZW50TmFtZVRvVHlwZU1hcC5nZXQoZWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0gICAgaWYgKGludGVnZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBpbnRlZ2VyLmludFZhbHVlKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBnZXRQYXJlbnRFbGVtZW50Q2hhaW4oRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHdoaWxlIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGQoMCwgZWxlbWVudCk7Ci0gICAgICBOb2RlIG5vZGUgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLSAgICAgIGVsZW1lbnQgPSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgPyAoRWxlbWVudClub2RlIDogbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvKgotICAgcHVibGljIE9iamVjdCBmaW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KERlZmluaXRpb24gZGVmaW5pdGlvbiwgRWxlbWVudCB0YXJnZXRFbGVtZW50KQotICAgeyAgIAotICAgT2JqZWN0IG8gPSBub2RlQXNzb2NpYXRpb25NYW5hZ2VyLmdldE1vZGVsT2JqZWN0Rm9yTm9kZShkZWZpbml0aW9uLCB0YXJnZXRFbGVtZW50KTsKLSAgIHJldHVybiBvOwotICAgfQotICAgCi0gICAKLSAgIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnRGb3JPYmplY3QoT2JqZWN0IG8pCi0gICB7ICAgICAgCi0gICBOb2RlIG5vZGUgPSBub2RlQXNzb2NpYXRpb25NYW5hZ2VyLmdldE5vZGUobyk7ICAKLSAgIHJldHVybiAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgPyAoRWxlbWVudClub2RlIDogbnVsbDsgICAgICAgICAgICAgICAgICAKLSAgIH0KLSAgIAotICAgcHVibGljIE5vZGUgZ2V0Tm9kZUZvck9iamVjdChPYmplY3QgbykKLSAgIHsgICAgICAKLSAgIHJldHVybiBub2RlQXNzb2NpYXRpb25NYW5hZ2VyLmdldE5vZGUobyk7ICAgICAgICAgICAgICAgICAgICAgIAotICAgfQotICAgCi0gICBwdWJsaWMgSVR5cGVTeXN0ZW1Qcm92aWRlciBnZXRUeXBlU3lzdGVtUHJvdmlkZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICAgeyAgICAgIAotICAgcmV0dXJuIFdTRExUb0RPTUVsZW1lbnRVdGlsLmdldFR5cGVTeXN0ZW1Qcm92aWRlcihkZWZpbml0aW9uKTsgICAgICAgICAgICAgICAgICAgIAotICAgfQotICAgCi0gICAKLSAgIHB1YmxpYyB2b2lkIHNldFR5cGVTeXN0ZW1Qcm92aWRlcihEZWZpbml0aW9uIGRlZmluaXRpb24sIElUeXBlU3lzdGVtUHJvdmlkZXIgdHlwZVN5c3RlbVByb3ZpZGVyKQotICAgeyAgICAgIAotICAgV1NETFRvRE9NRWxlbWVudFV0aWwuc2V0VHlwZVN5c3RlbVByb3ZpZGVyKGRlZmluaXRpb24sIHR5cGVTeXN0ZW1Qcm92aWRlcik7ICAgICAgICAgICAgICAgICAgICAgIAotICAgfSAgIAotICAgKi8KLQotICBwdWJsaWMgc3RhdGljIFFOYW1lIGNyZWF0ZVFOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHByZWZpeGVkTmFtZSkKLSAgewotICAgIFFOYW1lIHFuYW1lID0gbnVsbDsKLSAgICBpZiAocHJlZml4ZWROYW1lICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gcHJlZml4ZWROYW1lLmluZGV4T2YoIjoiKTsKLSAgICAgIFN0cmluZyBwcmVmaXggPSAoaW5kZXggPT0gLTEpID8gbnVsbCA6IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgaWYgKHByZWZpeCAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGxvY2FsUGFydCA9IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICAgICAgICBxbmFtZSA9IG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsUGFydCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHFuYW1lOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnROb2RlcyhFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCkKLSAgewotICAgIExpc3QgY2hpbGRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGV4dGVuc2libGVFbGVtZW50LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY2hpbGRMaXN0LmFkZChlbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY2hpbGRMaXN0OwotICAgIC8vcmV0dXJuIGV4dGVuc2libGVFbGVtZW50LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1hTRFNjaGVtYUxvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1hTRFNjaGVtYUxvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzBhYjY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9YU0RTY2hlbWFMb2NhdG9yQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0b3I7Ci0KLQotcHVibGljIGNsYXNzIFhTRFNjaGVtYUxvY2F0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICBwcm90ZWN0ZWQgWFNEU2NoZW1hTG9jYXRvckltcGwgc2NoZW1hTG9jYXRvciA9IG5ldyBYU0RTY2hlbWFMb2NhdG9ySW1wbCgpOwotCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBYU0RTY2hlbWFMb2NhdG9yLmNsYXNzOwotICB9Ci0KLSAgcHVibGljIEFkYXB0ZXIgYWRhcHROZXcoTm90aWZpZXIgdGFyZ2V0LCBPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiBzY2hlbWFMb2NhdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvWFNEU2NoZW1hTG9jYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9YU0RTY2hlbWFMb2NhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTAyNmM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9YU0RTY2hlbWFMb2NhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0b3I7Ci0KLQotcHVibGljIGNsYXNzIFhTRFNjaGVtYUxvY2F0b3JJbXBsIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBYU0RTY2hlbWFMb2NhdG9yCi17Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0b3IjbG9jYXRlU2NoZW1hKG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEsCi0gICAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWEgbG9jYXRlU2NoZW1hKFhTRFNjaGVtYSB4c2RTY2hlbWEsIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyByYXdTY2hlbWFMb2NhdGlvblVSSSwgU3RyaW5nIHJlc29sdmVkU2NoZW1hTG9jYXRpb25VUkkpCi0gIHsKLSAgICBYU0RTY2hlbWEgcmVzb2x2ZWRTY2hlbWEgPSBudWxsOwotCi0gICAgLy8gQnVnemlsbGEgMTIyNjI0OiAgV1NETCBtb2RlbCBkb2VzIG5vdCByZXNvbHZlIDxpbXBvcnQ+IG9mIGlubGluZSBzY2hlbWEgd2l0aCBubyBuYW1lc3BhY2UuCi0gICAgLy8gS0I6IFdlIGFyZSBub3QgcmVzb2x2aW5nIDxpbXBvcnQ+ZWQgb3IgPGluY2x1ZGU+ZCBzY2hlbWFzIGZyb20gdGhlIHJvb3QgaW5saW5lIHNjaGVtYXMuCi0gICAgLy8gSW4gb3RoZXIgd29yZHMsIHNpbmNlIHdlIGFyZSByZXNvbHZpbmcgb25seSBiZXR3ZWVuIG11bHRpcGxlIHJvb3QgaW5saW5lIHNjaGVtYXMsCi0gICAgLy8gZG8gbm90IGF0dGVtcHQgdG8gcmVzb2x2ZSBpZiAicmF3U2NoZW1hTG9jYXRpb25VUkkiIGlzIG5vdCBudWxsLiAKLSAgICBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwgJiYgcmF3U2NoZW1hTG9jYXRpb25VUkkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgICBmb3IgKEVPYmplY3QgcGFyZW50ID0geHNkU2NoZW1hLmVDb250YWluZXIoKTsgcGFyZW50ICE9IG51bGw7IHBhcmVudCA9IHBhcmVudC5lQ29udGFpbmVyKCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKXBhcmVudDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsICYmIGRlZmluaXRpb24uZ2V0RVR5cGVzKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IG8gPSBpLm5leHQoKTsKLSAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KW8pLmdldFNjaGVtYSgpOwotICAgICAgICAgICAgaWYgKHNjaGVtYSAhPSBudWxsICYmIG5hbWVzcGFjZVVSSS5lcXVhbHMoc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzb2x2ZWRTY2hlbWEgPSBzY2hlbWE7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZWRTY2hlbWE7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0FkYXRwZXJGb3JUeXBlKE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gWFNEU2NoZW1hTG9jYXRvci5jbGFzczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyMmRlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vL2FwaXN0eWxlcy5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTx0aXRsZT5XU0RMIE1vZGVsIEFQSSBPdmVydmlldzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvcD4KLTx0YWJsZSB3aWR0aD0iNTAwIj4KLTx0cj4KLTx0ZD4KLTxwPlRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYTViYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08aHRtbD4KLQk8aGVhZD4KLQkJPG1ldGEKLQkJCW5hbWU9InJvb3QiCi0JCi0JCQljb250ZW50PSIuLi8uLi8uLi8uLi8uLi8uLi8iIC8+Ci0JCTx0aXRsZT5XU0RMIE1vZGVsIEFQSSBPdmVydmlldzwvdGl0bGU+Ci0JPC9oZWFkPgotCi0JPGJvZHk+Ci0JCTxhYnN0cmFjdD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L2Fic3RyYWN0PgotCQk8cD5UaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gbG9hZCwgbW9kaWZ5LCBhbmQgc2F2ZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvcD4gCi0JPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFlYjdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gKiBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSAqIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuCi0gKiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogPC9wPgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotewotICBFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MjBiODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw7Ci0KLQotLyoqCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gKiBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSAqIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuCi0gKiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogPC9wPgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5Ci17Ci0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRmFjdG9yeShTdHJpbmcgbmFtZXNwYWNlLCBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZmFjdG9yeSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc2NDVhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDsKLQotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBkZWZpbmVzIGNvbnN0YW50cyBmb3IgV1NETCBlbGVtZW50IHRhZ3MgYW5kIHJlbGV2YW50IG5hbWVzcGFjZXMuCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29uc3RhbnRzCi17Ci0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImJpbmRpbmciPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklORElORyA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZGVmaW5pdGlvbnMiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGSU5JVElPTiA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZG9jdW1lbnRhdGlvbiI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET0NVTUVOVEFUSU9OID0gMjsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJmYXVsdCI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQVVMVCA9IDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iaW1wb3J0IjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVCA9IDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iaW5wdXQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5QVVQgPSA1OwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im1lc3NhZ2UiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRSA9IDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ib3BlcmF0aW9uIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTiA9IDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ib3V0cHV0IjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9VVFBVVCA9IDg7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icGFydCI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJUID0gOTsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0IjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlQgPSAxMDsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0VHlwZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUX1RZUEUgPSAxMTsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJzZXJ2aWNlIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZJQ0UgPSAxMjsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJ0eXBlcyI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFUyA9IDEzOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImJpbmRpbmciPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0VMRU1FTlRfVEFHID0gImJpbmRpbmciOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZGVmaW5pdGlvbnMiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZJTklUSU9OX0VMRU1FTlRfVEFHID0gImRlZmluaXRpb25zIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImRvY3VtZW50YXRpb24iPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHID0gImRvY3VtZW50YXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZmF1bHQiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGQVVMVF9FTEVNRU5UX1RBRyA9ICJmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJpbXBvcnQiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTVBPUlRfRUxFTUVOVF9UQUcgPSAiaW1wb3J0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImlucHV0IjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5QVVRfRUxFTUVOVF9UQUcgPSAiaW5wdXQiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ibWVzc2FnZSI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfRUxFTUVOVF9UQUcgPSAibWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJvcGVyYXRpb24iPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT05fRUxFTUVOVF9UQUcgPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im91dHB1dCI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9VVFBVVF9FTEVNRU5UX1RBRyA9ICJvdXRwdXQiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icGFydCI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlRfRUxFTUVOVF9UQUcgPSAicGFydCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwb3J0IjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVF9FTEVNRU5UX1RBRyA9ICJwb3J0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBvcnRUeXBlIjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVF9UWVBFX0VMRU1FTlRfVEFHID0gInBvcnRUeXBlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InNlcnZpY2UiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0VMRU1FTlRfVEFHID0gInNlcnZpY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4idHlwZXMiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFU19FTEVNRU5UX1RBRyA9ICJ0eXBlcyI7IC8vJE5PTi1OTFMtMSQKLQotICAvLyBjb21tb24KLQotICAvKioKLSAgICogVGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4ibmFtZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9BVFRSSUJVVEUgPSAibmFtZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4ibWVzc2FnZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9BVFRSSUJVVEUgPSAibWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4iYmluZGluZyI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklORElOR19BVFRSSUJVVEUgPSAiYmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4idHlwZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9BVFRSSUJVVEUgPSAidHlwZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvLyBkZWZpbml0aW9ucwotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJlbmNvZGluZyI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRU5DT0RJTkdfQVRUUklCVVRFID0gImVuY29kaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJ0YXJnZXROYW1lc3BhY2UiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBUkdFVE5BTUVTUEFDRV9BVFRSSUJVVEUgPSAidGFyZ2V0TmFtZXNwYWNlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIGJpbmRpbmcKLQotICAvKioKLSAgICogVGhlIGF0dHJpYnV0ZSBpcyA8Y29kZT4icmVzb3VyY2VVUkkiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFU09VUkNFX1VSSV9BVFRSSUJVVEUgPSAicmVzb3VyY2VVUkkiOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gcGFydAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJlbGVtZW50IjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBFTEVNRU5UX0FUVFJJQlVURSA9ICJlbGVtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIGltcG9ydAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJsb2NhdGlvbiI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9DQVRJT05fQVRUUklCVVRFID0gImxvY2F0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIG9wZXJhdGlvbgotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJwYXJhbWV0ZXJPcmRlciI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUEFSQU1FVEVSX09SREVSX0FUVFJJQlVURSA9ICJwYXJhbWV0ZXJPcmRlciI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJuYW1lc3BhY2UiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9BVFRSSUJVVEUgPSAibmFtZXNwYWNlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjwvY29kZT4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX05BTUVTUEFDRV9VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPC9jb2RlPi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9OQU1FU1BBQ0VfVVJJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIjwvY29kZT4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMTk5OSA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hNTFNjaGVtYSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHZhbHVlIDxjb2RlPiJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYSI8L2NvZGU+LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDBfMTAgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPC9jb2RlPi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVMRU1FTlRfVEFHUyA9IG5ldyBTdHJpbmcgW117Ci0gICAgQklORElOR19FTEVNRU5UX1RBRywKLSAgICBERUZJTklUSU9OX0VMRU1FTlRfVEFHLAotICAgIERPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsCi0gICAgRkFVTFRfRUxFTUVOVF9UQUcsCi0gICAgSU1QT1JUX0VMRU1FTlRfVEFHLAotICAgIElOUFVUX0VMRU1FTlRfVEFHLAotICAgIE1FU1NBR0VfRUxFTUVOVF9UQUcsCi0gICAgT1BFUkFUSU9OX0VMRU1FTlRfVEFHLAotICAgIE9VVFBVVF9FTEVNRU5UX1RBRywKLSAgICBQQVJUX0VMRU1FTlRfVEFHLAotICAgIFBPUlRfRUxFTUVOVF9UQUcsCi0gICAgUE9SVF9UWVBFX0VMRU1FTlRfVEFHLAotICAgIFNFUlZJQ0VfRUxFTUVOVF9UQUcsCi0gICAgVFlQRVNfRUxFTUVOVF9UQUcgfTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIFN0cmluZyBuYW1lIG9mIGVsZW1lbnQgdGFnIGdpdmVuIHRoZSBub2RlVHlwZS4KLSAgICogQHBhcmFtIG5vZGVUeXBlIGEgY29uc3RhbnQgZGVmaW5lZCBpbiBXU0RMQ29uc3RhbnRzLgotICAgKiBAcmV0dXJuIGVsZW1lbnQgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0RWxlbWVudFRhZyhpbnQgbm9kZVR5cGUpCi0gIHsKLSAgICByZXR1cm4gRUxFTUVOVF9UQUdTW25vZGVUeXBlXTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbm9kZSB0eXBlIGdpdmVuIHRoZSBTdHJpbmcgbmFtZSBvZiBlbGVtZW50IHRhZy4KLSAgICogQHBhcmFtIGxvY2FsTmFtZSB0aGUgbG9jYWwgbmFtZSBvZiBlbGVtZW50IHRhZy4KLSAgICogQHJldHVybiBhIG5vZGUgdHlwZSBkZWZpbmVkIGluIFdTRExDb25zdGFudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBFTEVNRU5UX1RBR1MubGVuZ3RoOyArK2kpCi0gICAgewotICAgICAgaWYgKGxvY2FsTmFtZS5lcXVhbHMoRUxFTUVOVF9UQUdTW2ldKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbm9kZSB0eXBlIGRlZmluZWQgaW4gV1NETENvbnN0YW50cyBnaXZlbiB0aGUgRE9NIG5vZGUuCi0gICAqIEBwYXJhbSBub2RlIGEgRE9NIG5vZGUuCi0gICAqIEByZXR1cm4gYSBub2RlIHR5cGUgZGVmaW5lZCBpbiBXU0RMQ29uc3RhbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgbm9kZVR5cGUoTm9kZSBub2RlKQotICB7Ci0gICAgcmV0dXJuIGlzV1NETE5hbWVzcGFjZShub2RlLmdldE5hbWVzcGFjZVVSSSgpKSA/IG5vZGVUeXBlKG5vZGUuZ2V0TG9jYWxOYW1lKCkpIDogLTE7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBuYW1lc3BhY2UgaXMgdGhlIFdTREwgbmFtZXNwYWNlIG9yIG5vdC4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSBhIG5hbWVzcGFjZS4KLSAgICogQHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBuYW1lc3BhY2UgaXMgdGhlIFdTREwgbmFtZXNwYWNlIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1dTRExOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJldHVybiBXU0RMX05BTUVTUEFDRV9VUkkuZXF1YWxzKG5hbWVzcGFjZSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIG5hbWVzcGFjZTEgZXF1YWxzIHRvIG5hbWVzcGFjZTIuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UxIGEgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlMiBhIG5hbWVzcGFjZS4KLSAgICogQHJldHVybiB0cnVlIGlmIG5hbWVzcGFjZTEgZXF1YWxzIHRvIG5hbWVzcGFjZTIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNNYXRjaGluZ05hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlMSwgU3RyaW5nIG5hbWVzcGFjZTIpCi0gIHsKLSAgICByZXR1cm4gKG5hbWVzcGFjZTEgPT0gbnVsbCA/IG5hbWVzcGFjZTIgPT0gbnVsbCA6IG5hbWVzcGFjZTEuZXF1YWxzKG5hbWVzcGFjZTIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSBnaXZlbiB0aGUgYXR0cmlidXRlTmFtZSBpbiB0aGUgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQgYSBET00gZWxlbWVudCB0byBzZWFyY2ggZm9yIHRoZSBhdHRyaWJ1dGUgZnJvbS4KLSAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgYW4gYXR0cmlidXRlIHRvIGZpbmQgZnJvbSB0aGUgZWxlbWVudC4KLSAgICogQHJldHVybiBhbiBhdHRyaWJ1dGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpIDogbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzYjIwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogR2VuZXJhdGVkIGJ5IHRoZSBXU0RMIG1vZGVsIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gbWVjaGFuaXNtcy4KLSAqIAotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMKLSAqIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIGEgY2FuZGlkYXRlIHRvIGJlY29taW5nIGEgZmlyc3QgY2xhc3MgV1NETCBtb2RlbCBvYmplY3QuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NETERpYWdub3N0aWMgZXh0ZW5kcyBSZXNvdXJjZS5EaWFnbm9zdGljCi17Ci0gIC8qKgotICAgKiBQcm92aWRlcyB0aGlzIGRpYWdub3N0aWMncyBzZXZlcml0eS4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gWFNERGlhZ25vc3RpY1NldmVyaXR5Ci0gICAqLwotICBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IGdldFNldmVyaXR5KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhpcyBkaWFnbm9zdGljJ3Mgc2V2ZXJpdHkuCi0gICAqIAotICAgKiBAcGFyYW0gc2V2ZXJpdHkKLSAgICogICAgICAgICAgdGhlIG5ldyBkaWFnbm9zdGljIHNldmVyaXR5LgotICAgKi8KLSAgdm9pZCBzZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5IHNldmVyaXR5KTsKLQotICAvKioKLSAgICogR2V0cyB0aGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuCi0gICAqIAotICAgKiBAcmV0dXJuIGEgU3RyaW5nIHdpdGggdGhlIG9yaWdpbmFsIG1lc3NhZ2Uga2V5LgotICAgKi8KLSAgU3RyaW5nIGdldEtleSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGtleS4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgbWVzc2FnZSBrZXkgdmFsdWUuCi0gICAqLwotICB2b2lkIHNldEtleShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBET00gTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBET00gbm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqLwotICBOb2RlIGdldE5vZGUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgRE9NIE5vZGUgd2hlcmUgdGhlIGVycm9yIG9jY3VycwotICAgKiBAcGFyYW0gbm9kZQotICAgKi8KLSAgdm9pZCBzZXROb2RlKE5vZGUgbm9kZSk7Ci0KLSAgLyoqCi0gICAqIHJldHVybnMgdGhlIEVsZW1lbnQgd2hlcmUgdGhlIGVycm9yIG9jY3VycwotICAgKiBAcmV0dXJuIC0gT2JqZWN0IG9mIHR5cGUgWFNEQ29uY3JldGVDb21wb25lbnQgaWYgdGhlIGVycm9yCi0gICAqIAkJCWNvbWVzIGZyb20gdGhlIGlubGluZSBzY2hlbWEgb2YgYSB3c2RsIGZpbGUKLSAgICogCQkgLSBvYmplY3Qgb2YgdHlwZSBXU0RMRWxlbWVudCBpZiB0aGUgZXJyb3IgY29tZXMgZnJvbQotICAgKiAJCQlvdGhlciBwYXJ0IG9mIHRoZSB3c2RsIGZpbGUKLSAgICovCi0gIE9iamVjdCBnZXRDb250YWluZXIoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgQ29udGFpbmVyIG9mIHRoZSBlcnJvcgotICAgKiBAcGFyYW0gY29udGFpbmVyCi0gICAqIAkJCWFuIE9iamVjdCBvZiBlaXRoZXIgWFNEQ29uY3JldGVDb21wb25lbnQgb3IgV1NETEVsZW1lbnQgCi0gICAqLwotICB2b2lkIHNldENvbnRhaW5lcihPYmplY3QgY29udGFpbmVyKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBwYXJhbWV0ZXJzIGFzIFN0cmluZ3MuCi0gICAqIEByZXR1cm4gIGEgbGlzdCB3aXRoIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHBhcmFtZXRlcnMgYXMgU3RyaW5ncy4KLSAgICovCi0gIEVMaXN0IGdldFN1YnN0aXR1dGlvbnMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JlMGYxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWNTZXZlcml0eTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV1NETERpYWdub3N0aWMgaW50ZXJmYWNlLiBUaGlzIGNsYXNzIGlzIGJhc2VkCi0gKiBvbiBYU0REaWFnbm9zdGljSW1wbAotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMKLSAqIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMRGlhZ25vc3RpY0ltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFdTRExEaWFnbm9zdGljCi17Ci0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29sdW1uKCkgPGVtPkNvbHVtbjwvZW0+fScKLSAgICogYXR0cmlidXRlLgotICAgKiAKLSAgICogQHNlZSAjZ2V0Q29sdW1uKCkKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IENPTFVNTl9FREVGQVVMVCA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMaW5lKCkgPGVtPkxpbmU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIAotICAgKiBAc2VlICNnZXRMaW5lKCkKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IExJTkVfRURFRkFVTFQgPSAxOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiAKLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1lc3NhZ2UoKSA8ZW0+TWVzc2FnZTwvZW0+fScKLSAgICogYXR0cmlidXRlLgotICAgKiAKLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNldmVyaXR5KCkgPGVtPlNldmVyaXR5PC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRTZXZlcml0eSgpCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgU0VWRVJJVFlfRURFRkFVTFQgPSBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkZBVEFMX0xJVEVSQUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbHVtbigpIDxlbT5Db2x1bW48L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIAotICAgKiBAc2VlICNnZXRDb2x1bW4oKQotICAgKiAKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBpbnQgY29sdW1uID0gQ09MVU1OX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMaW5lKCkgPGVtPkxpbmU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIAotICAgKiBAc2VlICNnZXRMaW5lKCkKLSAgICovCi0gIHByb3RlY3RlZCBpbnQgbGluZSA9IExJTkVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScKLSAgICogYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogCi0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb25VUkkgPSBMT0NBVElPTl9VUklfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1lc3NhZ2UoKSA8ZW0+TWVzc2FnZTwvZW0+fScKLSAgICogYXR0cmlidXRlLgotICAgKiAKLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG1lc3NhZ2UgPSBNRVNTQUdFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZXZlcml0eSgpIDxlbT5TZXZlcml0eTwvZW0+fScKLSAgICogYXR0cmlidXRlLgotICAgKiAKLSAgICogQHNlZSAjZ2V0U2V2ZXJpdHkoKQotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgc2V2ZXJpdHkgPSBTRVZFUklUWV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIG9yaWdpbmFsIG1lc3NhZ2Uga2V5LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBrZXk7Ci0KLSAgLyoqCi0gICAqIFRoZSBvcmlnaW5hbCBtZXNzYWdlIHBhcmFtZXRlcnMuCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3Qgc3Vic3RpdHV0aW9uczsKLQotICAvKioKLSAgICogVGhlIE5vZGUgd2hlcmUgdGhlIGVycm9yIG9jY3VycwotICAgKi8KLSAgcHJvdGVjdGVkIE5vZGUgbm9kZTsKLQotICAvKioKLSAgICogVGhlIFdTRExFbGVtZW50IG9yIFhTRENvbmNyZXRlQ29tcG9uZW50IG9iamVjdCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqLwotICBwcm90ZWN0ZWQgT2JqZWN0IGNvbnRhaW5lcjsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMRGlhZ25vc3RpY0ltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBXcmFwcyBhbiBYU0QgZGlhZ25vc3RpYyBpbnRvIGEgV1NETCBkaWFnbm9zdGljLiBVc2VkIHRvIHJlcG9ydCBwcm9ibGVtcyBpbgotICAgKiBpbmxpbmUgc2NoZW1hcy4KLSAgICogCi0gICAqIEBwYXJhbSB4c2REaWFnbm9zdGljCi0gICAqICAgICAgICAgIHRoZSBYU0QgZGlhZ25vc3RpYyBvYmplY3QgdG8gd3JhcC4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICovCi0gIHB1YmxpYyBXU0RMRGlhZ25vc3RpY0ltcGwoWFNERGlhZ25vc3RpYyB4c2REaWFnbm9zdGljKQotICB7Ci0gICAgdGhpcygpOwotICAgIHNldE1lc3NhZ2UoeHNkRGlhZ25vc3RpYy5nZXRNZXNzYWdlKCkpOwotICAgIHNldFNldmVyaXR5KGdldFNldmVyaXR5KHhzZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSkpOwotICAgIHNldExpbmUoeHNkRGlhZ25vc3RpYy5nZXRMaW5lKCkpOwotICAgIHNldENvbHVtbih4c2REaWFnbm9zdGljLmdldENvbHVtbigpKTsKLSAgICBzZXROb2RlKHhzZERpYWdub3N0aWMuZ2V0Tm9kZSgpKTsKLSAgICBzZXRDb250YWluZXIoeHNkRGlhZ25vc3RpYy5nZXRDb250YWluZXIoKSk7Ci0gICAgc2V0TG9jYXRpb24oeHNkRGlhZ25vc3RpYy5nZXRMb2NhdGlvbigpKTsKLSAgICBzZXRLZXkoeHNkRGlhZ25vc3RpYy5nZXRLZXkoKSk7Ci0gICAgZ2V0U3Vic3RpdHV0aW9ucygpLmFkZEFsbCh4c2REaWFnbm9zdGljLmdldFN1YnN0aXR1dGlvbnMoKSk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZSREaWFnbm9zdGljI2dldENvbHVtbigpCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2UkRGlhZ25vc3RpYyNnZXRMaW5lKCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlJERpYWdub3N0aWMjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbG9jYXRpb25VUkk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZSREaWFnbm9zdGljI2dldE1lc3NhZ2UoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjZ2V0U2V2ZXJpdHkoKQotICAgKi8KLSAgcHVibGljIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZ2V0U2V2ZXJpdHkoKQotICB7Ci0gICAgcmV0dXJuIHNldmVyaXR5OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnRzIGFuIFhTRCBkaWFnbm9zdGljIHNldmVyaXR5IGxldmVsIGludG8gYSBXU0RMIGRpYWdub3N0aWMgc2V2ZXJpdHkKLSAgICogbGV2ZWwuCi0gICAqIAotICAgKiBAcGFyYW0geHNkRGlhZ25vc3RpY1NldmVyaXR5Ci0gICAqICAgICAgICAgIHRoZSBzb3VyY2UgWFNEIGRpYWdub3N0aWMgc2V2ZXJpdHkuCi0gICAqIEByZXR1cm4gdGhlIGVxdWl2YWxlbnQgV1NETCBkaWFnbm9zdGljIHNldmVyaXR5LgotICAgKi8KLSAgcHJpdmF0ZSBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IGdldFNldmVyaXR5KFhTRERpYWdub3N0aWNTZXZlcml0eSB4c2REaWFnbm9zdGljU2V2ZXJpdHkpCi0gIHsKLSAgICBzd2l0Y2ggKHhzZERpYWdub3N0aWNTZXZlcml0eS5nZXRWYWx1ZSgpKQotICAgIHsKLSAgICAgIGNhc2UgWFNERGlhZ25vc3RpY1NldmVyaXR5LkZBVEFMOgotICAgICAgcmV0dXJuIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTDsKLSAgICAgIGNhc2UgWFNERGlhZ25vc3RpY1NldmVyaXR5LkVSUk9SOgotICAgICAgcmV0dXJuIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRVJST1JfTElURVJBTDsKLSAgICAgIGNhc2UgWFNERGlhZ25vc3RpY1NldmVyaXR5LldBUk5JTkc6Ci0gICAgICByZXR1cm4gV1NETERpYWdub3N0aWNTZXZlcml0eS5XQVJOSU5HX0xJVEVSQUw7Ci0gICAgICBjYXNlIFhTRERpYWdub3N0aWNTZXZlcml0eS5JTkZPUk1BVElPTjoKLSAgICAgIHJldHVybiBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LklORk9STUFUSU9OX0xJVEVSQUw7Ci0gICAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIFNFVkVSSVRZX0VERUZBVUxUOwotfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBuZXcgdmFsdWUgb2YgdGhlIGNvbHVtbiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAcGFyYW0gbmV3Q29sdW1uCi0gICAqICAgICAgICAgIHRoZSBuZXcgY29sdW1uIHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29sdW1uKGludCBuZXdDb2x1bW4pCi0gIHsKLSAgICBjb2x1bW4gPSBuZXdDb2x1bW47Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMaW5lKGludCBuZXdMaW5lKQotICB7Ci0gICAgbGluZSA9IG5ld0xpbmU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGxvYWN0aW9uIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIEBwYXJhbSBsb2NhdGlvbgotICAgKiAgICAgICAgICBhIFN0cmluZyB3aXRoIHRoZSBuZXcgdmFsdWUgZm9yIHRoZSBsb2NhdGlvbiBhdHRyaWJ1dGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIGxvY2F0aW9uVVJJID0gbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyBhIG5ldyB2YWx1ZSBmb3IgdGhlIG1lc3NhZ2UgYXR0cmlidXRlLgotICAgKiAKLSAgICogQHBhcmFtIG5ld01lc3NhZ2UKLSAgICogICAgICAgICAgYSBTdHJpbmcgd2l0aCB0aGUgbmV3IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKFN0cmluZyBuZXdNZXNzYWdlKQotICB7Ci0gICAgbWVzc2FnZSA9IG5ld01lc3NhZ2U7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYyNzZXRTZXZlcml0eShvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljU2V2ZXJpdHkpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5IG5ld1NldmVyaXR5KQotICB7Ci0gICAgc2V2ZXJpdHkgPSBuZXdTZXZlcml0eSA9PSBudWxsID8gU0VWRVJJVFlfRURFRkFVTFQgOiBuZXdTZXZlcml0eTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYyNnZXRLZXkoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRLZXkoKQotICB7Ci0gICAgcmV0dXJuIGtleTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljI3NldEtleShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0S2V5KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGtleSA9IHZhbHVlOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjZ2V0U3Vic3RpdHV0aW9ucygpCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0U3Vic3RpdHV0aW9ucygpCi0gIHsKLSAgICBpZiAoc3Vic3RpdHV0aW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIHN1YnN0aXR1dGlvbnMgPSBuZXcgQmFzaWNFTGlzdCgpOwotICAgIH0KLSAgICByZXR1cm4gc3Vic3RpdHV0aW9uczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljI2dldE5vZGUoKQotICAgKi8KLSAgcHVibGljIE5vZGUgZ2V0Tm9kZSgpCi0gIHsKLSAgICByZXR1cm4gbm9kZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljI3NldE5vZGUob3JnLnczYy5kb20uTm9kZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5vZGUoTm9kZSBub2RlKQotICB7Ci0gICAgdGhpcy5ub2RlID0gbm9kZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljI2dldENvbnRhaW5lcigpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldENvbnRhaW5lcigpCi0gIHsKLSAgICByZXR1cm4gY29udGFpbmVyOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjc2V0Q29udGFpbmVyKGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb250YWluZXIoT2JqZWN0IGNvbnRhaW5lcikKLSAgewotICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljU2V2ZXJpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQyZjgwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQWJzdHJhY3RFbnVtZXJhdG9yOwotCi0KLS8qKgotICogV1NETCBkaWFnbm9zdGljIHNldmVyaXR5IGxldmVscyB0eXBlIHNhZmUgZW51bWVyYXRpb24uIFRoaXMgY2xhc3MgaXMgc2ltaWxhcgotICogdG8gWFNERGlhZ25vc3RpY1NldmVyaXR5LgotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMKLSAqIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IGV4dGVuZHMgQWJzdHJhY3RFbnVtZXJhdG9yCi17Ci0gIC8qKgotICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvYmxlbSBpcyByZWFsbHkgYmFkIGFuZCB0aGF0IGZ1cnRoZXIKLSAgICogcHJvY2Vzc2luZyBpcyBsaWtlbHkgbm90IHBvc3NpYmxlLgotICAgKiAKLSAgICogQHNlZSAjRkFUQUxfTElURVJBTAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkFUQUwgPSAwOwotCi0gIC8qKgotICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvYmxlbSBpcyBiYWQgYW5kIHRoYXQgdGhlIHNjaGVtYSBpcwotICAgKiBsaWtlbHkgbm90IHN1aXRhYmxlIGZvciB1c2UuCi0gICAqIAotICAgKiBAc2VlICNFUlJPUl9MSVRFUkFMCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIG5vdCB0b28gYmFkIGFuZCB0aGF0IHRoZQotICAgKiBkZWZpbml0aW9uIGlzIGxpa2VseSBzdWl0YWJsZSBmb3IgdXNlLgotICAgKiAKLSAgICogQHNlZSAjV0FSTklOR19MSVRFUkFMCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gMjsKLQotICAvKioKLSAgICogVGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2JsZW0gaXMgb25seSBwb3RlbnRpYWwgYW5kIHRoYXQgdGhlCi0gICAqIGRlZmluaXRpb24gaXMgdmVyeSBsaWtlbHkgc3VpdGFibGUgZm9yIHVzZS4KLSAgICogCi0gICAqIEBzZWUgI0lORk9STUFUSU9OX0xJVEVSQUwKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9STUFUSU9OID0gMzsKLQotICAvKioKLSAgICogVGhlICc8ZW0+PGI+RmF0YWw8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgotICAgKiAKLSAgICogQHNlZSAjRkFUQUwKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV1NETERpYWdub3N0aWNTZXZlcml0eSBGQVRBTF9MSVRFUkFMID0gbmV3IFdTRExEaWFnbm9zdGljU2V2ZXJpdHkoRkFUQUwsICJmYXRhbCIsICJmYXRhbCIpOwotCi0gIC8qKgotICAgKiBUaGUgJzxlbT48Yj5FcnJvcjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi0gICAqIAotICAgKiBAc2VlICNFUlJPUgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IEVSUk9SX0xJVEVSQUwgPSBuZXcgV1NETERpYWdub3N0aWNTZXZlcml0eShFUlJPUiwgImVycm9yIiwgImVycm9yIik7Ci0KLSAgLyoqCi0gICAqIFRoZSAnPGVtPjxiPldhcm5pbmc8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgotICAgKiAKLSAgICogQHNlZSAjV0FSTklORwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IFdBUk5JTkdfTElURVJBTCA9IG5ldyBXU0RMRGlhZ25vc3RpY1NldmVyaXR5KFdBUk5JTkcsICJ3YXJuaW5nIiwgIndhcm5pbmciKTsKLQotICAvKioKLSAgICogVGhlICc8ZW0+PGI+SW5mb3JtYXRpb248L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgotICAgKiAKLSAgICogQHNlZSAjSU5GT1JNQVRJT04KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV1NETERpYWdub3N0aWNTZXZlcml0eSBJTkZPUk1BVElPTl9MSVRFUkFMID0gbmV3IFdTRExEaWFnbm9zdGljU2V2ZXJpdHkoSU5GT1JNQVRJT04sICJpbmZvcm1hdGlvbiIsICJpbmZvcm1hdGlvbiIpOwotCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBhbGwgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgZW51bWVyYXRvcnMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBXU0RMRGlhZ25vc3RpY1NldmVyaXR5W10gVkFMVUVTX0FSUkFZID0gbmV3IFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgW117Ci0gICAgRkFUQUxfTElURVJBTCwKLSAgICBFUlJPUl9MSVRFUkFMLAotICAgIFdBUk5JTkdfTElURVJBTCwKLSAgICBJTkZPUk1BVElPTl9MSVRFUkFMLCB9OwotCi0gIC8qKgotICAgKiBBIHB1YmxpYyByZWFkLW9ubHkgbGlzdCBvZiBhbGwgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicKLSAgICogZW51bWVyYXRvcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIExpc3QgVkFMVUVTID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KFZBTFVFU19BUlJBWSkpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPkRpYWdub3N0aWMgU2V2ZXJpdHk8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUKLSAgICogc3BlY2lmaWVkIGxpdGVyYWwgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZ2V0KFN0cmluZyBsaXRlcmFsKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpCi0gICAgewotICAgICAgV1NETERpYWdub3N0aWNTZXZlcml0eSByZXN1bHQgPSBWQUxVRVNfQVJSQVlbaV07Ci0gICAgICBpZiAocmVzdWx0LnRvU3RyaW5nKCkuZXF1YWxzKGxpdGVyYWwpKQotICAgICAgewotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPkRpYWdub3N0aWMgU2V2ZXJpdHk8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUKLSAgICogc3BlY2lmaWVkIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZ2V0QnlOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpCi0gICAgewotICAgICAgV1NETERpYWdub3N0aWNTZXZlcml0eSByZXN1bHQgPSBWQUxVRVNfQVJSQVlbaV07Ci0gICAgICBpZiAocmVzdWx0LmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotICAgKiBzcGVjaWZpZWQgaW50ZWdlciB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NETERpYWdub3N0aWNTZXZlcml0eSBnZXQoaW50IHZhbHVlKQotICB7Ci0gICAgc3dpdGNoICh2YWx1ZSkKLSAgICB7Ci0gICAgICBjYXNlIEZBVEFMOgotICAgICAgcmV0dXJuIEZBVEFMX0xJVEVSQUw7Ci0gICAgICBjYXNlIEVSUk9SOgotICAgICAgcmV0dXJuIEVSUk9SX0xJVEVSQUw7Ci0gICAgICBjYXNlIFdBUk5JTkc6Ci0gICAgICByZXR1cm4gV0FSTklOR19MSVRFUkFMOwotICAgICAgY2FzZSBJTkZPUk1BVElPTjoKLSAgICAgIHJldHVybiBJTkZPUk1BVElPTl9MSVRFUkFMOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBPbmx5IHRoaXMgY2xhc3MgY2FuIGNvbnN0cnVjdCBpbnN0YW5jZXMuCi0gICAqLwotICBwcml2YXRlIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkoaW50IHZhbHVlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGxpdGVyYWwpCi0gIHsKLSAgICBzdXBlcih2YWx1ZSwgbmFtZSwgbGl0ZXJhbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzkwNTM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotaW1wb3J0IGphdmEudXRpbC5XZWFrSGFzaE1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLkRlZmF1bHRKQVhQQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5KQVhQQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5KQVhQUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUGFyc2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkNvbW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5Mb2NhdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotCi0vKioKLSAqIFRoZSA8Yj5TQVggUGFyc2VyPC9iPiBmb3IgdGhlIFdTREwgbW9kZWwuIFRoaXMgY2xhc3MnIG1haW4gcmVzcG9uc2liaWxpdHkgaXMKLSAqIHRvIGNvbXB1dGUgbGluZS9jb2x1bW4gaW5mb3JtYXRpb24gZm9yIGFsbCBlbGVtZW50cyBpbiB0aGUgc291cmNlIFhNTAotICogZG9jdW1lbnQuIFRoaXMgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGEgbWFwIG9mIGVhY2ggbm9kZSB0byBpdHMgdXNlciBkYXRhLgotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMKLSAqIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiAKLSAqIFtJU1NVRV0gTW9zdCBvZiB0aGlzIGNsYXNzJyBpbXBsZW1lbnRhdGlvbiBpcyBhIGNsb25lIG9mIFhTRFBhcnNlci4gVGhlcmUgYXJlCi0gKiBwbGFucyB0byB3b3JrIG9uIGNsb3NlbHkgaW50ZWdyYXRpbmcgdGhpcyBjbGFzcyBhbmQgWFNEUGFyc2VyIHRvIHByb3ZpZGUgZm9yCi0gKiB0aGUgbW9zdCBlZmZpY2llbnQgcHJvY2Vzc2luZyBvZiBpbmxpbmUgc2NoZW1hcy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExQYXJzZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlciBpbXBsZW1lbnRzIExleGljYWxIYW5kbGVyCi17Ci0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciBkYXRhIHBhcnQgaG9sZGluZyBlbmQgY29sdW1uIGxvY2F0aW9uIG9mIGFuIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX0NPTFVNTiA9ICJlbmRDb2x1bW4iOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGRhdGEgcGFydCBob2xkaW5nIGVuZCBsaW5lIGxvY2F0aW9uIG9mIGFuIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX0xJTkUgPSAiZW5kTGluZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIG5hbWUgb2YgdGhlIHVzZXIgZGF0YSBwYXJ0IGhvbGRpbmcgc3RhcnQgY29sdW1uIGxvY2F0aW9uIG9mIGFuIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfQ09MVU1OID0gInN0YXJ0Q29sdW1uIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciBkYXRhIHBhcnQgaG9sZGluZyBzdGFydCBsaW5lIGxvY2F0aW9uIG9mIGFuIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfTElORSA9ICJzdGFydExpbmUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIEhvbGRzIHBhaXJzIE5vZGUgLT4gTWFwIHdpdGggdXNlciBkYXRhLgotICAgKiAKLSAgICogQHNlZSAjRU5EX0NPTFVNTgotICAgKiBAc2VlICNFTkRfTElORQotICAgKiBAc2VlICNTVEFSVF9DT0xVTU4KLSAgICogQHNlZSAjU1RBUlRfTElORQotICAgKiAKLSAgICogQSBXZWFrSGFzaE1hcCBpcyB1c2VkIGluIG9yZGVyIHRvIHNpbXBsaWZ5IHRoaXMgbWFwJ3MgbWFpbnRlbmFuY2UuIEFzIG5vZGVzCi0gICAqIGFyZSBnYXJiYWdlIGNvbGxlY3RlZCB3aGVuIG5vdCBuZWVkZWQgYW55bW9yZSwgdGhlIEpWTSB3aWxsIHRha2UgY2FyZSBvZgotICAgKiByZW1vdmluZyBlbnRyaWVzIGZyb20gdGhpcyBtYXAuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIE1hcCB1c2VyRGF0YU1hcCA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZE1hcChuZXcgV2Vha0hhc2hNYXAoKSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBlbmRzLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgdGhlIG5vZGUgdG8gcXVlcnkuCi0gICAqIEByZXR1cm4gdGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBlbmRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0RW5kQ29sdW1uKE5vZGUgbm9kZSkKLSAgewotICAgIEludGVnZXIgcmVzdWx0ID0gKEludGVnZXIpZ2V0VXNlckRhdGEobm9kZSkuZ2V0KEVORF9DT0xVTU4pOwotICAgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/IDEgOiByZXN1bHQuaW50VmFsdWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsaW5lIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIGVuZHMuCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICB0aGUgbm9kZSB0byBxdWVyeS4KLSAgICogQHJldHVybiB0aGUgbGluZSBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBlbmRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0RW5kTGluZShOb2RlIG5vZGUpCi0gIHsKLSAgICBJbnRlZ2VyIHJlc3VsdCA9IChJbnRlZ2VyKWdldFVzZXJEYXRhKG5vZGUpLmdldChFTkRfTElORSk7Ci0gICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gMSA6IHJlc3VsdC5pbnRWYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBzdGFydHMuCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICB0aGUgbm9kZSB0byBxdWVyeS4KLSAgICogQHJldHVybiB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIHN0YXJ0cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFN0YXJ0Q29sdW1uKE5vZGUgbm9kZSkKLSAgewotICAgIEludGVnZXIgcmVzdWx0ID0gKEludGVnZXIpZ2V0VXNlckRhdGEobm9kZSkuZ2V0KFNUQVJUX0NPTFVNTik7Ci0gICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gMSA6IHJlc3VsdC5pbnRWYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgc3RhcnRzLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgdGhlIG5vZGUgdG8gcXVlcnkuCi0gICAqIEByZXR1cm4gdGhlIGxpbmUgYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgc3RhcnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0U3RhcnRMaW5lKE5vZGUgbm9kZSkKLSAgewotICAgIEludGVnZXIgcmVzdWx0ID0gKEludGVnZXIpZ2V0VXNlckRhdGEobm9kZSkuZ2V0KFNUQVJUX0xJTkUpOwotICAgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/IDEgOiByZXN1bHQuaW50VmFsdWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB1c2VyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlLiBJZiB0aGUgbm9kZSBoYXMgbm8gdXNlcgotICAgKiBkYXRhLCBhIG5ldyBlbXB0eSBtYXAgaXMgY3JlYXRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBub2RlCi0gICAqICAgICAgICAgIHRoZSBub2RlIHRvIHF1ZXJ5LgotICAgKiBAcmV0dXJuIHRoZSB1c2VyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBNYXAgZ2V0VXNlckRhdGEoTm9kZSBub2RlKQotICB7Ci0gICAgTWFwIHJlc3VsdCA9IChNYXApdXNlckRhdGFNYXAuZ2V0KG5vZGUpOwotICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgdXNlckRhdGFNYXAucHV0KG5vZGUsIHJlc3VsdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgaW50IGNvbHVtbjsKLQotICBMaXN0IGRpYWdub3N0aWNzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIHByb3RlY3RlZCBEb2N1bWVudCBkb2N1bWVudDsKLQotICBwcm90ZWN0ZWQgRWxlbWVudCBlbGVtZW50OwotCi0gIHByb3RlY3RlZCBTdHJpbmcgZW5jb2Rpbmc7Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaW5TY2hlbWE7Ci0KLSAgcHJvdGVjdGVkIGludCBsaW5lOwotCi0gIHByb3RlY3RlZCBMb2NhdG9yIGxvY2F0b3I7Ci0KLSAgcHJvdGVjdGVkIFNBWFBhcnNlciBzYXhQYXJzZXI7Ci0KLSAgcHJvdGVjdGVkIFN0YWNrIHN0YWNrID0gbmV3IFN0YWNrKCk7Ci0KLSAgcHJvdGVjdGVkIEpBWFBQb29sIGpheHBQb29sOwotICAgIAotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMUGFyc2VyKCkKLSAgewotICAgIHRoaXMoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBXU0RMIHBhcnNlciBnaXZlbiBhIHNldCBvZiBwYXJzaW5nIG9wdGlvbnMuCi0gICAqIAotICAgKiBAcGFyYW0gb3B0aW9ucyBhIE1hcCBvZiBTdHJpbmcgdG8gT2JqZWN0LCBwYXNzZWQgYWxvbmcgdGhyb3VnaCB0aGUgUmVzb3VyY2VTZXQgYW5kIFJlc291cmNlLiAKLSAgICovCi0gIHB1YmxpYyBXU0RMUGFyc2VyKE1hcCBvcHRpb25zKQotICB7Ci0gICAgSkFYUENvbmZpZ3VyYXRpb24gY29uZmlnID0gbnVsbDsKLSAgICBpZiAob3B0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIGpheHBQb29sID0gKEpBWFBQb29sKW9wdGlvbnMuZ2V0KFdTRExSZXNvdXJjZUltcGwuV1NETF9KQVhQX1BPT0wpOwotICAgICAgY29uZmlnID0gKEpBWFBDb25maWd1cmF0aW9uKW9wdGlvbnMuZ2V0KFdTRExSZXNvdXJjZUltcGwuV1NETF9KQVhQX0NPTkZJRyk7Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChqYXhwUG9vbCA9PSBudWxsKQotICAgICAgeyAgICAgIAotICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzYXhQYXJzZXIgPSBjb25maWcuY3JlYXRlU0FYUGFyc2VyKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHNheFBhcnNlciA9IG5ldyBEZWZhdWx0SkFYUENvbmZpZ3VyYXRpb24oKS5jcmVhdGVTQVhQYXJzZXIodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2F4UGFyc2VyID0gamF4cFBvb2wuZ2V0U0FYUGFyc2VyKHRoaXMpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBmYXRhbEVycm9yKGV4Y2VwdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBmYXRhbEVycm9yKGV4Y2VwdGlvbik7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyI2NoYXJhY3RlcnMoY2hhcltdLCBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoYXJhY3RlcnMsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgVGV4dCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ldyBTdHJpbmcoY2hhcmFjdGVycywgc3RhcnQsIGxlbmd0aCkpOwotICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGV4dE5vZGUpOwotICAgIHNhdmVMb2NhdGlvbigpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjY29tbWVudChjaGFyW10sIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgY29tbWVudChjaGFyW10gY2hhcmFjdGVycywgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgICBDb21tZW50IGNvbW1lbnROb2RlID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChuZXcgU3RyaW5nKGNoYXJhY3RlcnMsIHN0YXJ0LCBsZW5ndGgpKTsKLSAgICBpZiAoZWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKGNvbW1lbnROb2RlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29tbWVudE5vZGUpOwotICAgIH0KLSAgICBzYXZlTG9jYXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGVtcHR5IERPTSBEb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gZW1wdHkgRE9NIERvY3VtZW50IG9yIG51bGwgaXMgYSBKQVhQIG1pc2NvbmZpZ3VyYXRpb24gZXJyb3IKLSAgICogICAgICAgICBvY2N1cnMuCi0gICAqLwotICBwcml2YXRlIERvY3VtZW50IGNyZWF0ZURvY3VtZW50KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIGRvY3VtZW50QnVpbGRlckZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0gICAgICBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyIGRvY3VtZW50QnVpbGRlciA9IGRvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICByZXR1cm4gZG9jdW1lbnRCdWlsZGVyLm5ld0RvY3VtZW50KCk7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjZW5kQ0RBVEEoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ0RBVEEoKQotICB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZW5kRG9jdW1lbnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kRG9jdW1lbnQoKQotICB7Ci0gICAgZWxlbWVudCA9IG51bGw7Ci0gICAgc2F2ZUxvY2F0aW9uKCk7Ci0gICAgdGhpcy5sb2NhdG9yID0gbnVsbDsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI2VuZERURCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBlbmREVEQoKQotICB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZW5kRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgc2F2ZUxvY2F0aW9uKCk7Ci0KLSAgICBNYXAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0gbnVsbDsKLQotICAgIGlmIChpblNjaGVtYSkKLSAgICB7Ci0gICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPSBYU0RQYXJzZXIuZ2V0VXNlckRhdGEoZWxlbWVudCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPSBnZXRVc2VyRGF0YShlbGVtZW50KTsKLSAgICB9Ci0KLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMucHV0KEVORF9MSU5FLCBuZXcgSW50ZWdlcihsaW5lKSk7Ci0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzLnB1dChFTkRfQ09MVU1OLCBuZXcgSW50ZWdlcihjb2x1bW4pKTsKLQotICAgIGlmIChpc1NjaGVtYUVsZW1lbnQodXJpLCBsb2NhbE5hbWUpKQotICAgIHsKLSAgICAgIGluU2NoZW1hID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZWxlbWVudCA9IChFbGVtZW50KXN0YWNrLnBvcCgpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjZW5kRW50aXR5KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBlbmRFbnRpdHkoU3RyaW5nIG5hbWUpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgewotICAgIFdTRExEaWFnbm9zdGljSW1wbCBkaWFnbm9zdGljID0gbmV3IFdTRExEaWFnbm9zdGljSW1wbCgpOwotICAgIGRpYWdub3N0aWMuc2V0U2V2ZXJpdHkoV1NETERpYWdub3N0aWNTZXZlcml0eS5FUlJPUl9MSVRFUkFMKTsKLSAgICBkaWFnbm9zdGljLnNldE1lc3NhZ2UoV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JT0Vycm9yX21lc3NhZ2UiLCBuZXcgT2JqZWN0IFtdeyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpIH0pKTsKLSAgICBkaWFnbm9zdGljLnNldExpbmUoZXhjZXB0aW9uLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgZGlhZ25vc3RpYy5zZXRDb2x1bW4oZXhjZXB0aW9uLmdldENvbHVtbk51bWJlcigpKTsKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBmYXRhbEVycm9yKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgewotICAgIFdTRExEaWFnbm9zdGljSW1wbCBkaWFnbm9zdGljID0gbmV3IFdTRExEaWFnbm9zdGljSW1wbCgpOwotICAgIGRpYWdub3N0aWMuc2V0U2V2ZXJpdHkoV1NETERpYWdub3N0aWNTZXZlcml0eS5GQVRBTF9MSVRFUkFMKTsKLSAgICBkaWFnbm9zdGljLnNldE1lc3NhZ2UoV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JT0Vycm9yX21lc3NhZ2UiLCBuZXcgT2JqZWN0IFtdeyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpIH0pKTsKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBmYXRhbEVycm9yKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXhjZXB0aW9uKQotICB7Ci0gICAgV1NETERpYWdub3N0aWNJbXBsIGRpYWdub3N0aWMgPSBuZXcgV1NETERpYWdub3N0aWNJbXBsKCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkZBVEFMX0xJVEVSQUwpOwotICAgIGRpYWdub3N0aWMuc2V0TWVzc2FnZShXU0RMUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1BhcnNlckVycm9yX21lc3NhZ2UiLCBuZXcgT2JqZWN0IFtdeyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpIH0pKTsKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gIHsKLSAgICBXU0RMRGlhZ25vc3RpY0ltcGwgZGlhZ25vc3RpYyA9IG5ldyBXU0RMRGlhZ25vc3RpY0ltcGwoKTsKLSAgICBkaWFnbm9zdGljLnNldFNldmVyaXR5KFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRNZXNzYWdlKFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUGFyc2VyRXJyb3JfbWVzc2FnZSIsIG5ldyBPYmplY3QgW117IGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkgfSkpOwotICAgIGRpYWdub3N0aWNzLmFkZChkaWFnbm9zdGljKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKQotICB7Ci0gICAgV1NETERpYWdub3N0aWNJbXBsIGRpYWdub3N0aWMgPSBuZXcgV1NETERpYWdub3N0aWNJbXBsKCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkZBVEFMX0xJVEVSQUwpOwotICAgIGRpYWdub3N0aWMuc2V0TWVzc2FnZShXU0RMUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1BhcnNlckVycm9yX21lc3NhZ2UiLCBuZXcgT2JqZWN0IFtdeyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpIH0pKTsKLSAgICBkaWFnbm9zdGljLnNldExpbmUoZXhjZXB0aW9uLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgZGlhZ25vc3RpYy5zZXRDb2x1bW4oZXhjZXB0aW9uLmdldENvbHVtbk51bWJlcigpKTsKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLQotICAvKioKLSAgICogUHJvdmlkZXMgYSBjb2xsZWN0aW9uIHdpdGggdGhlIGRpYWdub3N0aWNzIGdlbmVyYXRlZCBkdXJpbmcgcGFyc2luZy4KLSAgICogCi0gICAqIEByZXR1cm4gYSBDb2xsZWN0aW9uIG9mIHtAbGluayBXU0RMRGlhZ25vc3RpY30gb2JqZWN0cy4KLSAgICovCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldERpYWdub3N0aWNzKCkKLSAgewotICAgIHJldHVybiBkaWFnbm9zdGljczsKLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlcyB0aGUgRE9NIGRvY3VtZW50IGNyZWF0ZWQgYnkgcGFyc2luZyB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdGluZyBET00gZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGRvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZXMgaWYgYW4gZWxlbWVudCBpcyB0aGUgcm9vdCBYTUwgc2NoZW1hIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpCi0gICAqICAgICAgICAgIHRoZSBVUkkgdG8gdGVzdC4KLSAgICogQHBhcmFtIGxvY2FsTmFtZQotICAgKiAgICAgICAgICB0aGUgZWxlbWVudCdzIGxvY2FsIG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyB0aGUgcm9vdCBYTUwgc2NoZW1hIGVsZW1lbnQsIGZhbHNlCi0gICAqICAgICAgICAgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzU2NoZW1hRWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgaWYgKHVyaS5lcXVhbHMoWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxKSAmJiBsb2NhbE5hbWUuZXF1YWxzKFhTRENvbnN0YW50cy5TQ0hFTUFfRUxFTUVOVF9UQUcpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXJzZShJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHNheFBhcnNlci5wYXJzZShpbnB1dFNvdXJjZSwgdGhpcyk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBpZiAoZGlhZ25vc3RpY3MuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBmYXRhbEVycm9yKGV4Y2VwdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBpZiAoamF4cFBvb2wgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF4cFBvb2wucmVsZWFzZVNBWFBhcnNlcihzYXhQYXJzZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZXMgdGhlIFhNTCBjb250ZW50IHJlYWQgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgc3RyZWFtLgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtCi0gICAqICAgICAgICAgIHRoZSBzb3VyY2UgaW5wdXQgc3RyZWFtLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2UoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzYXhQYXJzZXIucGFyc2UobmV3IElucHV0U291cmNlKGlucHV0U3RyZWFtKSwgdGhpcyk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBpZiAoZGlhZ25vc3RpY3MuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBmYXRhbEVycm9yKGV4Y2VwdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBpZiAoamF4cFBvb2wgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF4cFBvb2wucmVsZWFzZVNBWFBhcnNlcihzYXhQYXJzZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uKFN0cmluZyB0YXJnZXQsIFN0cmluZyBkYXRhKQotICB7Ci0gICAgTm9kZSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKLQotICAgIGlmIChzdGFjay5pc0VtcHR5KCkpCi0gICAgewotICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQocHJvY2Vzc2luZ0luc3RydWN0aW9uKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQocHJvY2Vzc2luZ0luc3RydWN0aW9uKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2U7Ci0gICAgaWYgKCItLy9XM0MvL0RURCBYTUxTQ0hFTUEgMjAwMTAyLy9FTiIuZXF1YWxzSWdub3JlQ2FzZShwdWJsaWNJZCkpCi0gICAgewotICAgICAgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoWFNEUGx1Z2luLklOU1RBTkNFLmdldEJhc2VVUkwoKSArICJjYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLmR0ZCIpOwotICAgICAgaW5wdXRTb3VyY2Uuc2V0UHVibGljSWQocHVibGljSWQpOwotICAgIH0KLSAgICBlbHNlIGlmIChzeXN0ZW1JZCAhPSBudWxsICYmIHN5c3RlbUlkLnN0YXJ0c1dpdGgoImZpbGU6Ly9idW5kbGVlbnRyeToiKSkKLSAgICB7Ci0gICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShzeXN0ZW1JZC5zdWJzdHJpbmcoNykpOwotICAgICAgaW5wdXRTb3VyY2Uuc2V0UHVibGljSWQocHVibGljSWQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlucHV0U291cmNlID0gc3VwZXIucmVzb2x2ZUVudGl0eShwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgICAgICBpZiAoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbnB1dFNvdXJjZTsKLSAgfQotCi0gIC8qKgotICAgKiBTYXZlcyB0aGUgY3VycmVudCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNhdmVMb2NhdGlvbigpCi0gIHsKLSAgICBpZiAobG9jYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpbmUgPSBsb2NhdG9yLmdldExpbmVOdW1iZXIoKTsKLSAgICAgIGNvbHVtbiA9IGxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAKLSAgICAgIC8vIFRoZSBjcmltc29uIHBhcnNlciBzZWVtcyB0byBnaXZlIHBvb3IgY29vcmRpbmF0ZXMgYW5kIGlzIDAtYmFzZWQgZm9yIGxpbmUKLSAgICAgIC8vIGNvdW50LgotCi0gICAgICBpZiAoY29sdW1uID09IC0xKQotICAgICAgewotICAgICAgICBjb2x1bW4gPSAxOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNzZXREb2N1bWVudExvY2F0b3Iob3JnLnhtbC5zYXguTG9jYXRvcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50TG9jYXRvcihMb2NhdG9yIGxvY2F0b3IpCi0gIHsKLSAgICB0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotICAgIHN1cGVyLnNldERvY3VtZW50TG9jYXRvcihsb2NhdG9yKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI3N0YXJ0Q0RBVEEoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRDREFUQSgpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNzdGFydERvY3VtZW50KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoKQotICB7Ci0gICAgc2F2ZUxvY2F0aW9uKCk7Ci0gICAgZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjc3RhcnREVEQoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnREVEQoU3RyaW5nIG5hbWUsIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjc3RhcnRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFpblNjaGVtYSkKLSAgICB7Ci0gICAgICBpblNjaGVtYSA9IGlzU2NoZW1hRWxlbWVudCh1cmksIGxvY2FsTmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgcU5hbWUpOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwLCBjb3VudCA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHJpYnV0ZVVSSSA9IGF0dHJpYnV0ZXMuZ2V0VVJJKGluZGV4KTsKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVRTmFtZSA9IGF0dHJpYnV0ZXMuZ2V0UU5hbWUoaW5kZXgpOwotICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlcy5nZXRWYWx1ZShpbmRleCk7Ci0KLSAgICAgIGlmIChhdHRyaWJ1dGVRTmFtZS5lcXVhbHMoInhtbG5zIikgfHwgYXR0cmlidXRlUU5hbWUuc3RhcnRzV2l0aCgieG1sbnM6IikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgewotICAgICAgICBhdHRyaWJ1dGVVUkkgPSBYU0RDb25zdGFudHMuWE1MTlNfVVJJXzIwMDA7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgiIi5lcXVhbHMoYXR0cmlidXRlVVJJKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBhdHRyaWJ1dGVVUkkgPSBudWxsOwotICAgICAgfQotCi0gICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZU5TKGF0dHJpYnV0ZVVSSSwgYXR0cmlidXRlUU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhY2suaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBzdGFjay5wdXNoKGVsZW1lbnQpOwotICAgIGVsZW1lbnQgPSBuZXdFbGVtZW50OwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGxvY2F0aW9uIGF0dHJpYnV0ZXMgZW5kIHVwIGluIHRoZSBYU0RQYXJzZXIncyB1c2VyIGRhdGEgaWYKLSAgICAvLyB3ZSBhcmUgaW5zaWRlIGFuIGlubGluZSBzY2hlbWEuIElmIG5vdCwgdGhleSBzaG91bGQgZ28gaW4gdGhlCi0gICAgLy8gV1NETFBhcnNlcidzIHVzZXIgZGF0YS4KLQotICAgIE1hcCBleHRlbmRlZEF0dHJpYnV0ZXMgPSBudWxsOwotCi0gICAgaWYgKGluU2NoZW1hKQotICAgIHsKLSAgICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9IFhTRFBhcnNlci5nZXRVc2VyRGF0YShlbGVtZW50KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9IGdldFVzZXJEYXRhKGVsZW1lbnQpOwotICAgIH0KLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMucHV0KFNUQVJUX0xJTkUsIG5ldyBJbnRlZ2VyKGxpbmUpKTsKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMucHV0KFNUQVJUX0NPTFVNTiwgbmV3IEludGVnZXIoY29sdW1uKSk7Ci0KLSAgICBzYXZlTG9jYXRpb24oKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI3N0YXJ0RW50aXR5KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydEVudGl0eShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyI3dhcm5pbmcob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgewotICAgIFdTRExEaWFnbm9zdGljSW1wbCBkaWFnbm9zdGljID0gbmV3IFdTRExEaWFnbm9zdGljSW1wbCgpOwotICAgIGRpYWdub3N0aWMuc2V0U2V2ZXJpdHkoV1NETERpYWdub3N0aWNTZXZlcml0eS5XQVJOSU5HX0xJVEVSQUwpOwotICAgIGRpYWdub3N0aWMuc2V0TWVzc2FnZSgiRE9NOiIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgICBkaWFnbm9zdGljLnNldExpbmUoZXhjZXB0aW9uLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgZGlhZ25vc3RpYy5zZXRDb2x1bW4oZXhjZXB0aW9uLmdldENvbHVtbk51bWJlcigpKTsKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkKLSAgewotICAgIGlmIChsb2NhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5IAotICAgICAgewotICAgICAgICBNZXRob2QgZ2V0RW5jb2RpbmdNZXRob2QgPSBsb2NhdG9yLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJnZXRFbmNvZGluZyIsIG5ldyBDbGFzc1tde30pOwotICAgICAgICBpZiAoZ2V0RW5jb2RpbmdNZXRob2QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGVuY29kaW5nID0gKFN0cmluZylnZXRFbmNvZGluZ01ldGhvZC5pbnZva2UobG9jYXRvciwgbmV3IE9iamVjdFtdIHt9KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSAKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgd2UgY2FuJ3QgZmluZCBpdCwgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4uLgotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlbmNvZGluZzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzI5NTA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2UuRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUZhY3RvcnlSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5YTUxSZWFkZXJGYWN0b3J5OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgbG9hZGluZyBvZiBXU0RMIG9yIFhTRCByZXNvdXJjZSBmcm9tCi0gKiBVUkkncyB0aGF0IGRvbid0IGVuZCB3aXRoIC54c2Qgb3IgLndzZGwgZXh0ZW5zaW9ucy4KLSAqIAotICogVGhlc2UgVVJJJ3MgZm9pbCBFTUYncyBzdGFuZGFyZCByZXNvdXJjZSBsb2FkaW5nIG1lY2hhbmlzbSB3aWNoIGFzc3VtZXMgdGhhdAotICogYSByZXNvdXJjZSB0eXBlIGNhbiBhbHdheXMgYmUgZGVkdWNlZCBmcm9tIHRoZSBmaWxlIGV4dGVuc2lvbi4KLSAqIAotICogIENvZGUgRXhhbXBsZToKLSAqICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICogICAgV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LklOU1RBTkNFKTsKLSAqICAgIHJlc291cmNlU2V0LnNldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KHJlZ2lzdHJ5KTsKLSAqIDxwPgotICogPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSAqIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAqIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkgZXh0ZW5kcyBSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeUltcGwKLXsKLSAgcHJvdGVjdGVkIFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkgcGFyZW50OwotCi0gIHB1YmxpYyBXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeSBwYXJlbnQpCi0gIHsKLSAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsKLSAgfQotCi0gIHB1YmxpYyBNYXAgZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkKLSAgewotICAgIHJldHVybiBwYXJlbnQuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCk7Ci0gIH0KLQotICBwdWJsaWMgTWFwIGdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkKLSAgewotICAgIHJldHVybiBwYXJlbnQuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKTsKLSAgfQotCi0gIHB1YmxpYyBGYWN0b3J5IGdldEZhY3RvcnkoVVJJIHVyaSkKLSAgewotICAgIHJldHVybiBnZXRGYWN0b3J5KHVyaSwgbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgUmVzb3VyY2UuRmFjdG9yeSBnZXRGYWN0b3J5KFVSSSB1cmksIFN0cmluZyBjb250ZW50VHlwZSkKLSAgewotICAgIFN0cmluZyB1cmlTdHJpbmcgPSB1cmkudG9TdHJpbmcoKTsKLQotICAgIEZhY3RvcnkgZmFjdG9yeSA9IHBhcmVudC5nZXRGYWN0b3J5KHVyaSwgY29udGVudFR5cGUpOwotICAgIEZhY3RvcnkgZGVmYXVsdEZhY3RvcnkgPSAoRmFjdG9yeSlJTlNUQU5DRS5nZXRGYWN0b3J5KFVSSS5jcmVhdGVVUkkoREVGQVVMVF9FWFRFTlNJT04pLCBjb250ZW50VHlwZSk7Ci0KLSAgICAvLyBnaXZlIHRoZSBwYXJlbnQgdGhlIGZpcnN0IGNyYWNrIGF0IGdldHRpbmcgdGhlIGZhY3RvcnkKLSAgICAvLyBpZiB0aGUgZmFjdG9yeSBpcyBudWxsIG9yIHRoZSBrbm93biAnZGVmYXVsdCcgZmFjdG9yeSB0aGVuIHdlJ2xsCi0gICAgLy8gdHJ5IHRvIGNvbXB1dGUgdGhlIGZhY3Rvcnkgb3Vyc2VsdmVzCi0gICAgaWYgKGZhY3RvcnkgPT0gbnVsbCB8fCBmYWN0b3J5ID09IGRlZmF1bHRGYWN0b3J5KQotICAgIHsKLSAgICAgIGlmICh1cmlTdHJpbmcuZW5kc1dpdGgoIndzZGwiKSB8fCB1cmlTdHJpbmcuZW5kc1dpdGgoIldTREwiKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaGFuZGxlIGNhc2VzIGxpa2UgImh0dHA6Ly94eHgvRGlzdGFuY2UuandzP3dzZGwiCi0gICAgICAgIC8vICAgICAgICAgIAkKLSAgICAgICAgZmFjdG9yeSA9IHBhcmVudC5nZXRGYWN0b3J5KFVSSS5jcmVhdGVVUkkoIioud3NkbCIpLCBjb250ZW50VHlwZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh1cmlTdHJpbmcuZW5kc1dpdGgoInhzZCIpIHx8IHVyaVN0cmluZy5lbmRzV2l0aCgiWFNEIikpCi0gICAgICB7Ci0gICAgICAgIC8vIGhhbmRsZSBjYXNlcyBsaWtlICJodHRwOi8veHh4L0Rpc3RhbmNlLmp3cz94c2QiCi0gICAgICAgIC8vICAgICAgICAJCi0gICAgICAgIGZhY3RvcnkgPSBwYXJlbnQuZ2V0RmFjdG9yeShVUkkuY3JlYXRlVVJJKCIqLnhzZCIpLCBjb250ZW50VHlwZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAvL2lmICh1cmkuZmlsZUV4dGVuc2lvbigpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIGhhbmRsZSBjYXNlcyBsaWtlICJodHRwOi8veHh4L2V4YW1wbGU/Z2V0UXVvdGUiCi0gICAgICAgIC8vICAgICAgICAgICAgICAJCi0gICAgICAgIC8vIGZpbmFsbHkgd2UgbXVzdCByZXNvcnQgdG8gb3BlbmluZyB0aGUgdXJpJ3Mgc3RyZWFtIGFuZAotICAgICAgICAvLyBwZWVraW5nIGF0IHRoZSBjb250ZW50IHRvIGRldGVybWluZSBpZiBpdHMgYW4geHNkIG9yIHdzZGwKLSAgICAgICAgLy8gICAgICAgICAJCi0gICAgICAgIFN0cmluZyByb290RWxlbWVudE5hbWUgPSBnZXRSb290RWxlbWVudE5hbWUodXJpU3RyaW5nKTsKLSAgICAgICAgaWYgKHJvb3RFbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHJvb3RFbGVtZW50TmFtZS5lcXVhbHMoInNjaGVtYSIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhY3RvcnkgPSBwYXJlbnQuZ2V0RmFjdG9yeShVUkkuY3JlYXRlVVJJKCIqLnhzZCIpLCBjb250ZW50VHlwZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKHJvb3RFbGVtZW50TmFtZS5lcXVhbHMoImRlZmluaXRpb25zIikpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFjdG9yeSA9IHBhcmVudC5nZXRGYWN0b3J5KFVSSS5jcmVhdGVVUkkoIioud3NkbCIpLCBjb250ZW50VHlwZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWN0b3J5OwotICB9Ci0KLSAgLy8gdGhpcyBtZXRob2QgdXNlcyBhIFNBWCBQYXJzZXIgdG8gcGFyc2VyIGEgc3RyZWFtIGFuZCBkZXRlcm1pbmUgdGhlIHJvb3QgZWxlbWVudCBuYW1lCi0gIC8vIG9mIGFueSB4bWwgY29udGVudAotICBwcml2YXRlIFN0cmluZyBnZXRSb290RWxlbWVudE5hbWUoU3RyaW5nIHVyaSkKLSAgewotICAgIFJvb3RFbGVtZW50TmFtZUNvbnRlbnRIYW5kbGVyIGhhbmRsZXIgPSBuZXcgUm9vdEVsZW1lbnROYW1lQ29udGVudEhhbmRsZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBYTUxSZWFkZXIgcmVhZGVyID0gWE1MUmVhZGVyRmFjdG9yeS5jcmVhdGVYTUxSZWFkZXIoKTsKLSAgICAgIHJlYWRlci5zZXRDb250ZW50SGFuZGxlcihoYW5kbGVyKTsKLSAgICAgIHJlYWRlci5wYXJzZSh1cmkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHJldHVybiBoYW5kbGVyLnJvb3RFbGVtZW50TmFtZTsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgUm9vdEVsZW1lbnROYW1lQ29udGVudEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0gICAgcHVibGljIFN0cmluZyByb290RWxlbWVudE5hbWU7Ci0KLSAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICByb290RWxlbWVudE5hbWUgPSBsb2NhbE5hbWU7Ci0KLSAgICAgIC8vIGhlcmUgSSB0aHJvdyBhbiBleGNlcHRpb24gdG8gbWFrZSB0aGUgU0FYIFBhcnNlciB0byBzdG9wIHBhcnNpbmcKLSAgICAgIHRocm93IG5ldyBTQVhFeGNlcHRpb24oIlNBWFBhcnNlciBpbnRlbnRvbmFsbHkgc3RvcHBlZCIpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OWI1NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExSZXNvdXJjZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlVSSUNvbnZlcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5YU0RTY2hlbWFMb2NhdG9yQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5EZWZhdWx0SkFYUENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuSkFYUENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuSkFYUFBvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEU2NoZW1hTG9jYXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlPC9iPiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG1vZGVsLgotICogVGhpcyBzcGVjaWFsaXplZCByZXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBpdCdzIG93biB3YXkgb2YgbWFraW5nIGtleXMgYW5kIAotICogaHJlZnMsIGFuZCBpdCdzIG93biBzZXJpYWxpemF0aW9uLiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCBmb3Igc3ViY2xhc3NpbmcgCi0gKiBvdXRzaWRlIG9mIHRoZSBtb2RlbCBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBpcyB3aXRoIHRoZSAKLSAqIFJlc291cmNlIGZyYW1ld29yay4KLSAqIDxwPgotICogPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSAqIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAqIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgV1NETFJlc291cmNlSW1wbCBleHRlbmRzIFJlc291cmNlSW1wbAotewotCi0gIHByaXZhdGUgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMgPSB0cnVlOwotCi0gIHByaXZhdGUgYm9vbGVhbiBjb250aW51ZU9uTG9hZEVycm9yID0gdHJ1ZTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyA9ICJVU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05USU5VRV9PTl9MT0FEX0VSUk9SID0gIkNPTlRJTlVFX09OX0xPQURfRVJST1IiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9FTkNPRElORyA9ICJXU0RMX0VOQ09ESU5HIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfUFJPR1JFU1NfTU9OSVRPUiA9ICJXU0RMX1BST0dSRVNTX01PTklUT1IiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIEFkZCB0aGlzIG9wdGlvbiB3aXRoIGEgdmFsdWUgb2YgQm9vbGVhbi5UUlVFIHRvIHRoZSBvcHRpb25zIG1hcCB3aGVuCi0gICAqIGxvYWRpbmcgYSByZXNvdXJjZSB0byBpbnN0cnVjdCB0aGUgbG9hZGVyIHRvIHRyYWNrIHNvdXJjZSBjb2RlIGxvY2F0aW9uIGZvcgotICAgKiBlYWNoIG5vZGUgaW4gdGhlIHNvdXJjZSBkb2N1bWVudC4KLSAgICogCi0gICAqIEBzZWUgV1NETFBhcnNlciNnZXRVc2VyRGF0YShvcmcudzNjLmRvbS5Ob2RlKQotICAgKiBAc2VlIFdTRExQYXJzZXIjZ2V0U3RhcnRDb2x1bW4ob3JnLnczYy5kb20uTm9kZSkKLSAgICogQHNlZSBXU0RMUGFyc2VyI2dldEVuZENvbHVtbihvcmcudzNjLmRvbS5Ob2RlKQotICAgKiBAc2VlIFdTRExQYXJzZXIjZ2V0U3RhcnRMaW5lKG9yZy53M2MuZG9tLk5vZGUpCi0gICAqIEBzZWUgV1NETFBhcnNlciNnZXRFbmRMaW5lKG9yZy53M2MuZG9tLk5vZGUpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDS19MT0NBVElPTiA9ICJUUkFDS19MT0NBVElPTiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgYXMgYW4gb3B0aW9uIG9uIFJlc291cmNlI2xvYWQgbWV0aG9kcyB0byBzcGVjaWZ5IEpBWFAgcG9vbCB0byBiZSB1c2VkCi0gICAqIGZvciBsb2FkaW5nIGFuZCBzZXJpYWxpemluZyBYTUwgU2NoZW1hcy4KLSAgICogQHNlZSBSZXNvdXJjZSNsb2FkKElucHV0U3RyZWFtLCBNYXApCi0gICAqIEBzZWUgUmVzb3VyY2UjbG9hZChNYXApCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0pBWFBfUE9PTCA9ICJXU0RMX0pBWFBfUE9PTCI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8qKgotICAgKiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcHRpb24gb24gUmVzb3VyY2UjbG9hZCBtZXRob2RzIHRvIHNwZWNpZnkgSkFYUCBjb25maWd1cmF0aW9uCi0gICAqIHRoYXQgY3JlYXRlcyBhbmQgY29uZmlndXJlcyBTQVgsIERPTSBwYXJzZXJzIGFuZCBUcmFuc2Zvcm1lci4KLSAgICogQHNlZSBSZXNvdXJjZSNsb2FkKElucHV0U3RyZWFtLCBNYXApCi0gICAqIEBzZWUgUmVzb3VyY2UjbG9hZChNYXApCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0pBWFBfQ09ORklHID0gIldTRExfSkFYUF9DT05GSUciOyAvLyROT04tTkxTLTEkCi0gIAotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuIAotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiAKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIAotICAgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4gCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBXU0RMUmVzb3VyY2VJbXBsKFVSSSB1cmkpCi0gIHsKLSAgICBzdXBlcih1cmkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZG9TYXZlKE91dHB1dFN0cmVhbSBvcywgTWFwIG9wdGlvbnMpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbigpOwotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0gICAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVEb2N1bWVudCgpOwotICAgICAgICBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikudXBkYXRlRWxlbWVudCgpOwotICAgICAgfQotCi0gICAgICBkb1NlcmlhbGl6ZShvcywgZG9jdW1lbnQsIG9wdGlvbnMpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSdzIERlZmluaXRpb24uCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRDb250ZW50cygpLnNpemUoKSA9PSAxICYmIGdldENvbnRlbnRzKCkuZ2V0KDApIGluc3RhbmNlb2YgRGVmaW5pdGlvbiA/IChEZWZpbml0aW9uKWdldENvbnRlbnRzKCkuZ2V0KDApIDogbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgZG9TZXJpYWxpemUoT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgRG9jdW1lbnQgZG9jdW1lbnQsIFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gbmV3IERlZmF1bHRKQVhQQ29uZmlndXJhdGlvbigpLmNyZWF0ZVRyYW5zZm9ybWVyKGVuY29kaW5nKTsKLSAgICAgIC8vIEJlIHN1cmUgdG8gdXNlIGFjdHVhbCBlbmNvZGluZyBvZiB0aGUgdHJhbnNmb3JtZXIgd2hpY2ggbWlnaHQgYmUgbm9uLW51bGwgZXZlbiBpZiBlbmNvZGluZyBzdGFydGVkIGFzIG51bGwuCi0gICAgICBlbmNvZGluZyA9IHRyYW5zZm9ybWVyLmdldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcpOwotICAgICAgV3JpdGVyIHdyaXRlciA9IGVuY29kaW5nID09IG51bGwgPyBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSkgOiBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSwgZW5jb2RpbmcpOwotICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpLCBuZXcgU3RyZWFtUmVzdWx0KHdyaXRlcikpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1NlcmlhbGl6ZShPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtLCBEb2N1bWVudCBkb2N1bWVudCwgTWFwIG9wdGlvbnMpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSkFYUFBvb2wgamF4cFBvb2wgPSBudWxsOwotICAgIEpBWFBDb25maWd1cmF0aW9uIGNvbmZpZyA9IG51bGw7Ci0gICAgU3RyaW5nIGVuY29kaW5nID0gbnVsbDsKLSAgICAKLSAgICBpZiAob3B0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIGpheHBQb29sID0gKEpBWFBQb29sKW9wdGlvbnMuZ2V0KFdTRExfSkFYUF9QT09MKTsKLSAgICAgIGNvbmZpZyA9IChKQVhQQ29uZmlndXJhdGlvbilvcHRpb25zLmdldChXU0RMX0pBWFBfQ09ORklHKTsKLSAgICAgIGVuY29kaW5nID0gKFN0cmluZylvcHRpb25zLmdldChXU0RMX0VOQ09ESU5HKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGpheHBQb29sID09IG51bGwpCi0gICAgewotICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKQotICAgICAgewotICAgICAgICBkb1NlcmlhbGl6ZShvdXRwdXRTdHJlYW0sIGRvY3VtZW50LCBlbmNvZGluZyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBjb25maWcuY3JlYXRlVHJhbnNmb3JtZXIoZW5jb2RpbmcpOwotICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdXNlIGFjdHVhbCBlbmNvZGluZyBvZiB0aGUgdHJhbnNmb3JtZXIgd2hpY2ggbWlnaHQgYmUgbm9uLW51bGwgZXZlbiBpZiBlbmNvZGluZyBzdGFydGVkIGFzIG51bGwuCi0gICAgICAgICAgZW5jb2RpbmcgPSB0cmFuc2Zvcm1lci5nZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HKTsKLSAgICAgICAgICBXcml0ZXIgd3JpdGVyID0gZW5jb2RpbmcgPT0gbnVsbCA/IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0U3RyZWFtKSA6IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0U3RyZWFtLCBlbmNvZGluZyk7Ci0gICAgICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpLCBuZXcgU3RyZWFtUmVzdWx0KHdyaXRlcikpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBXU0RMUGx1Z2luLmdldFBsdWdpbigpLmxvZyhleGNlcHRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IG51bGw7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdHJhbnNmb3JtZXIgPSBqYXhwUG9vbC5nZXRUcmFuc2Zvcm1lcihlbmNvZGluZyk7Ci0gICAgICAgIFdyaXRlciB3cml0ZXIgPSBlbmNvZGluZyA9PSBudWxsID8gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvdXRwdXRTdHJlYW0pIDogbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvdXRwdXRTdHJlYW0sIGVuY29kaW5nKTsKLSAgICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpLCBuZXcgU3RyZWFtUmVzdWx0KHdyaXRlcikpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgV1NETFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgamF4cFBvb2wucmVsZWFzZVRyYW5zZm9ybWVyKHRyYW5zZm9ybWVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTG9hZHMgYSBuZXcge0BsaW5rIFdTRExSZXNvdXJjZUltcGx9IGludG8gdGhlIHJlc291cmNlIHNldC4KLSAgICogQHBhcmFtIGlucHV0U291cmNlIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHJlc291cmNlLgotICAgKiBAcGFyYW0gb3B0aW9ucyBhbnkgb3B0aW9ucyB0byBpbmZsdWVuY2UgbG9hZGluZyBiZWhhdmlvci4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGRvTG9hZChJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgTWFwIG9wdGlvbnMpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLy8gVGhpcyBwYXR0ZXJuIGF2b2lkcyBsb2FkaW5nIHRoZSBJUHJvZ3Jlc3NNb25pdG9yIGNsYXNzIHdoZW4gdGhlcmUgaXMgbm8gcHJvZ3Jlc3MgbW9uaXRvci4KLSAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBmb3Igc3RhbmQtYWxvbmUgZXhlY3V0aW9uIHRvIHdvcmsgY29ycmVjdGx5LgotICAgIC8vCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPSBudWxsOwotICAgIE9iamVjdCBtb25pdG9yID0gb3B0aW9ucyA9PSBudWxsID8gbnVsbCA6IG9wdGlvbnMuZ2V0KFdTRExfUFJPR1JFU1NfTU9OSVRPUik7Ci0gICAgaWYgKG1vbml0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9ncmVzc01vbml0b3IgPSAoSVByb2dyZXNzTW9uaXRvciltb25pdG9yOwotICAgICAgcHJvZ3Jlc3NNb25pdG9yLnNldFRhc2tOYW1lKFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVzb3VyY2VMb2FkX3Byb2dyZXNzIikpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9ncmVzc01vbml0b3Iuc3ViVGFzayhnZXRVUkkoKS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBPYmplY3QgYmluZGluZ3MgPSBvcHRpb25zID09IG51bGwgPyBudWxsIDogb3B0aW9ucy5nZXQoVVNFX0VYVEVOU0lPTl9GQUNUT1JJRVMpOwotICAgIGlmIChiaW5kaW5ncyAhPSBudWxsICYmIGJpbmRpbmdzIGluc3RhbmNlb2YgQm9vbGVhbikKLSAgICAgIC8vIHRydWUgYnkgZGVmYXVsdAotICAgICAgdXNlRXh0ZW5zaW9uRmFjdG9yaWVzID0gKChCb29sZWFuKWJpbmRpbmdzKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIE9iamVjdCBjb250aW51ZU9uRXJyb3IgPSBvcHRpb25zID09IG51bGwgPyBudWxsIDogb3B0aW9ucy5nZXQoQ09OVElOVUVfT05fTE9BRF9FUlJPUik7Ci0gICAgaWYgKGNvbnRpbnVlT25FcnJvciAhPSBudWxsICYmIGNvbnRpbnVlT25FcnJvciBpbnN0YW5jZW9mIEJvb2xlYW4pCi0gICAgICAvLyB0cnVlIGJ5IGRlZmF1bHQKLSAgICAgIGNvbnRpbnVlT25Mb2FkRXJyb3IgPSAoKEJvb2xlYW4pY29udGludWVPbkVycm9yKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIERvY3VtZW50IGRvYyA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiB0cmFja0xvY2F0aW9uID0gb3B0aW9ucyAhPSBudWxsICYmIEJvb2xlYW4uVFJVRS5lcXVhbHMob3B0aW9ucy5nZXQoVFJBQ0tfTE9DQVRJT04pKTsKLQotICAgICAgaWYgKHRyYWNrTG9jYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGRvYyA9IGdldERvY3VtZW50VXNpbmdTQVgoaW5wdXRTb3VyY2UsIG9wdGlvbnMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBDcmVhdGUgYSBET00gZG9jdW1lbnQKLSAgICAgICAgZG9jID0gZ2V0RG9jdW1lbnQoaW5wdXRTb3VyY2UsIG5ldyBJbnRlcm5hbEVycm9ySGFuZGxlcigpLCBvcHRpb25zKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGRvYyAhPSBudWxsICYmIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoIWZpbmREZWZpbml0aW9uKGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY29udGludWVPbkxvYWRFcnJvcikKLSAgICAgICAgICAgIGhhbmRsZURlZmluaXRpb25FbGVtZW50KGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKFdTRExQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0U3RyaW5nKCJfRVJST1JfSU5WQUxJRF9XU0RMIikpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaGFuZGxlRGVmaW5pdGlvbkVsZW1lbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgaWYgKGNvbnRpbnVlT25Mb2FkRXJyb3IpCi0gICAgICB7Ci0gICAgICAgIFdTRExQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7Ci0gICAgICAgIGhhbmRsZURlZmluaXRpb25FbGVtZW50KG51bGwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBleGNlcHRpb247Ci0gICAgfQotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbilpLm5leHQoKTsKLQotICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgaW5saW5lIHNjaGVtYXMgbG9jYXRpb24gCi0gICAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSBudWxsOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGogPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpai5uZXh0KCk7Ci0gICAgICAgICAgaWYgKCEoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGVsID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICAgICAgICBYU0RTY2hlbWEgc2NoZW1hID0gZWwuZ2V0U2NoZW1hKCk7Ci0gICAgICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAgICAgc2NoZW1hLnNldFNjaGVtYUxvY2F0aW9uKGdldFVSSSgpLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByb2dyZXNzTW9uaXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb2dyZXNzTW9uaXRvci53b3JrZWQoMSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIExvYWRzIGEgbmV3IHtAbGluayBXU0RMUmVzb3VyY2VJbXBsfSBpbnRvIHRoZSByZXNvdXJjZSBzZXQuCi0gICAqIEBwYXJhbSBpbnB1dFN0cmVhbSB0aGUgY29udGVudHMgb2YgdGhlIG5ldyByZXNvdXJjZS4KLSAgICogQHBhcmFtIG9wdGlvbnMgYW55IG9wdGlvbnMgdG8gaW5mbHVlbmNlIGxvYWRpbmcgYmVoYXZpb3IuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBkb0xvYWQoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIE1hcCBvcHRpb25zKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIElucHV0U291cmNlIGlucHV0U291cmNlID0gaW5wdXRTdHJlYW0gaW5zdGFuY2VvZiBVUklDb252ZXJ0ZXIuUmVhZGFibGVJbnB1dFN0cmVhbSA/IG5ldyBJbnB1dFNvdXJjZSgKLSAgICAgICgoVVJJQ29udmVydGVyLlJlYWRhYmxlSW5wdXRTdHJlYW0paW5wdXRTdHJlYW0pLmFzUmVhZGVyKCkpIDogbmV3IElucHV0U291cmNlKGlucHV0U3RyZWFtKTsKLQotICAgIGlmIChnZXRVUkkoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBpZCA9IGdldFVSSSgpLnRvU3RyaW5nKCk7Ci0gICAgICBpbnB1dFNvdXJjZS5zZXRQdWJsaWNJZChpZCk7Ci0gICAgICBpbnB1dFNvdXJjZS5zZXRTeXN0ZW1JZChpZCk7Ci0gICAgfQotICAgIGRvTG9hZChpbnB1dFNvdXJjZSwgb3B0aW9ucyk7Ci0gIH0KLQotICAvKioKLSAgICogVXNlIGEgY3VzdG9tIFNBWCBwYXJzZXIgdG8gYWxsb3cgdXMgdG8gdHJhY2sgdGhlIHNvdXJjZSBsb2NhdGlvbiBvZiAKLSAgICogZWFjaCBub2RlIGluIHRoZSBzb3VyY2UgWE1MIGRvY3VtZW50LgotICAgKiBAcGFyYW0gaW5wdXRTb3VyY2UgdGhlIHBhcnNpbmcgc291cmNlLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgbG9hZGluZyBvcHRpb25zLiAKLSAgICogQHJldHVybiB0aGUgRE9NIGRvY3VtZW50IGNyZWF0ZWQgYnkgcGFyc2luZyB0aGUgaW5wdXQgc3RyZWFtLiAKLSAgICovCi0gIHByaXZhdGUgRG9jdW1lbnQgZ2V0RG9jdW1lbnRVc2luZ1NBWChJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgTWFwIG9wdGlvbnMpCi0gIHsKLSAgICBXU0RMUGFyc2VyIHdzZGxQYXJzZXIgPSBuZXcgV1NETFBhcnNlcihvcHRpb25zKTsKLSAgICB3c2RsUGFyc2VyLnBhcnNlKGlucHV0U291cmNlKTsKLQotICAgIENvbGxlY3Rpb24gZXJyb3JzID0gd3NkbFBhcnNlci5nZXREaWFnbm9zdGljcygpOwotCi0gICAgaWYgKGVycm9ycyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZXJyb3JzLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEaWFnbm9zdGljIHdzZGxEaWFnbm9zdGljID0gKFdTRExEaWFnbm9zdGljKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgc3dpdGNoICh3c2RsRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpLmdldFZhbHVlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUw6Ci0gICAgICAgICAgY2FzZSBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkVSUk9SOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldEVycm9ycygpLmFkZCh3c2RsRGlhZ25vc3RpYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LldBUk5JTkc6Ci0gICAgICAgICAgY2FzZSBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LklORk9STUFUSU9OOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldFdhcm5pbmdzKCkuYWRkKHdzZGxEaWFnbm9zdGljKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIERvY3VtZW50IGRvYyA9IHdzZGxQYXJzZXIuZ2V0RG9jdW1lbnQoKTsKLSAgICAKLSAgICBpZiAod3NkbFBhcnNlci5nZXRFbmNvZGluZygpICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFdTRExfRU5DT0RJTkcsIHdzZGxQYXJzZXIuZ2V0RW5jb2RpbmcoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBkb2M7Ci0gIH0KLQotICAvKioKLSAgICogQnVpbGRzIGEgZG9jdW1lbnQgdXNpbmcgWGVyY2VzLgotICAgKiBAcGFyYW0gaW5wdXRTb3VyY2UgdGhlIGNvbnRlbnRzIHRvIHBhcnNlLgotICAgKiBAcGFyYW0gZXJyb3JIYW5kbGVyIHRoZSBoYW5kbGVkIHVzZWQgYnkgdGhlIHBhcnNlci4KLSAgICogQHJldHVybiBhIGRvY3VtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsIEVycm9ySGFuZGxlciBlcnJvckhhbmRsZXIpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgQ2xhc3NMb2FkZXIgcHJldmlvdXNDbGFzc0xvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoV1NETFJlc291cmNlRmFjdG9yeUltcGwuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0KLSAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIGRvY3VtZW50QnVpbGRlckZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0gICAgICBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVXNpbmcgYSBkZWZlcnJlZCBET00gZG9jdW1lbnQgaW4gdGhlIFdTREwgbW9kZWwgbWF5IGNhdXNlIGEKLSAgICAgICAgLy8gcGVyZm9ybWFuY2UgcHJvYmxlbSBpbiB0ZXJtcyBvZiBtZW1vcnkgY29uc3VtcHRpb24gaW4gcGFydGljdWxhci4KLSAgICAgICAgLy8gV2UncmUgYXR0ZW1wdGluZyB0byB1c2UgdGhlIGZlYXR1cmUgd2hpY2ggaW5zdHJ1Y3RzIHRoZSBYZXJjZXMgcGFyc2VyCi0gICAgICAgIC8vIHRvIG5vdCB1c2UgZGVmZXJyZWQgRE9NIHRyZWVzLgotICAgICAgICAvLyBUT0RPIENvbnZlcnQgdG8gdXNlIHNldEZlYXR1cmUgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhlIFhlcmNlcwotICAgICAgICAvLyB2ZXJzaW9ucyA8IDIuNy4xIGRvIG5vdCBmdWxseSBzdXBwb3J0IHNldEZlYXR1cmUsIHNvIHdlIGhhdmUgdG8gdXNlCi0gICAgICAgIC8vIHNldEF0dHJpYnV0ZS4KLSAgICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5zZXRBdHRyaWJ1dGUoImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9kb20vZGVmZXItbm9kZS1leHBhbnNpb24iLCBCb29sZWFuLkZBTFNFKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBJZ25vcmUsIGFzIHRoZSBjb2RlIHdpbGwgaGF2ZSB0byBydW4gd2l0aCBwYXJzZXJzIG90aGVyIHRoYW4gWGVyY2VzLgotICAgICAgfQotCi0gICAgICBEb2N1bWVudEJ1aWxkZXIgZG9jdW1lbnRCdWlsZGVyID0gZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQotICAgICAgLy8gVEJEIC0gUmV2aXNpdAotICAgICAgLy9FbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IGNyZWF0ZUVudGl0eVJlc29sdmVyKCk7Ci0gICAgICAvL2RvY3VtZW50QnVpbGRlci5zZXRFbnRpdHlSZXNvbHZlcihlbnRpdHlSZXNvbHZlcik7Ci0KLSAgICAgIGRvY3VtZW50QnVpbGRlci5zZXRFcnJvckhhbmRsZXIoZXJyb3JIYW5kbGVyKTsKLQotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2N1bWVudEJ1aWxkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotICAgICAgcmV0dXJuIGRvY3VtZW50OwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgdGhyb3cgbmV3IElPV3JhcHBlZEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSU9XcmFwcGVkRXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihwcmV2aW91c0NsYXNzTG9hZGVyKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBCdWlsZHMgRE9NIGRvY3VtZW50IHVzaW5nIEpBWFAgRG9jdW1lbnRCdWlsZGVyCi0gICAqIEBzZWUgI1dTRExfSkFYUF9QT09MCi0gICAqIEBzZWUgI1dTRExfSkFYUF9DT05GSUcKLSAgICogQHBhcmFtIGlucHV0U291cmNlIHRoZSBjb250ZW50IHRvIHBhcnNlcgotICAgKiBAcGFyYW0gZXJyb3JIYW5kbGVyIGVycm9yIGhhbmRsZXIgZm9yIHJlY29yZGluZyBhbnkgbG9hZGluZyBlcnJvcnMKLSAgICogQHBhcmFtIG9wdGlvbnMgbG9hZGluZyBvcHRpb25zCi0gICAqIEByZXR1cm4gZG9jdW1lbnQgRE9NIGRvY3VtZW50Ci0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIERvY3VtZW50IGdldERvY3VtZW50KElucHV0U291cmNlIGlucHV0U291cmNlLCBFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyLCBNYXAgb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBKQVhQUG9vbCBqYXhwUG9vbCA9IG51bGw7Ci0gICAgSkFYUENvbmZpZ3VyYXRpb24gY29uZmlnID0gbnVsbDsKLSAgICBpZiAob3B0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIGpheHBQb29sID0gKEpBWFBQb29sKW9wdGlvbnMuZ2V0KFdTRExfSkFYUF9QT09MKTsKLSAgICAgIGNvbmZpZyA9IChKQVhQQ29uZmlndXJhdGlvbilvcHRpb25zLmdldChXU0RMX0pBWFBfQ09ORklHKTsKLSAgICB9Ci0KLSAgICBpZiAoamF4cFBvb2wgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoY29uZmlnID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBnZXREb2N1bWVudChpbnB1dFNvdXJjZSwgZXJyb3JIYW5kbGVyKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBEb2N1bWVudEJ1aWxkZXIgZG9jdW1lbnRCdWlsZGVyID0gY29uZmlnLmNyZWF0ZURvY3VtZW50QnVpbGRlcihlcnJvckhhbmRsZXIpOwotICAgICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZG9jdW1lbnRCdWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICAgICAgICByZXR1cm4gZG9jdW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IElPV3JhcHBlZEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IElPV3JhcHBlZEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXIgZG9jdW1lbnRCdWlsZGVyID0gbnVsbDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkb2N1bWVudEJ1aWxkZXIgPSBqYXhwUG9vbC5nZXREb2N1bWVudEJ1aWxkZXIoZXJyb3JIYW5kbGVyKTsKLSAgICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2N1bWVudEJ1aWxkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotICAgICAgICByZXR1cm4gZG9jdW1lbnQ7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBJT1dyYXBwZWRFeGNlcHRpb24oZXhjZXB0aW9uKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgSU9XcmFwcGVkRXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGpheHBQb29sLnJlbGVhc2VEb2N1bWVudEJ1aWxkZXIoZG9jdW1lbnRCdWlsZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZmluZERlZmluaXRpb24oRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKFdTRExDb25zdGFudHMubm9kZVR5cGUoZWxlbWVudCkgPT0gV1NETENvbnN0YW50cy5ERUZJTklUSU9OKQotICAgIHsKLSAgICAgIGhhbmRsZURlZmluaXRpb25FbGVtZW50KGVsZW1lbnQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgICAgLyoKLSAgICAgICBmb3IgKE5vZGUgY2hpbGQgPSBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbnVsbDsgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKQotICAgICAgIHsKLSAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgIHsKLSAgICAgICBpZiAoZmluZERlZmluaXRpb24oKEVsZW1lbnQpIGNoaWxkKSkKLSAgICAgICB7Ci0gICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICB9Ci0gICAgICAgfQotICAgICAgIH0KLSAgICAgICAqLwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlRGVmaW5pdGlvbkVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBpZiAoZWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5zZXRVc2VFeHRlbnNpb25GYWN0b3JpZXModXNlRXh0ZW5zaW9uRmFjdG9yaWVzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uSW1wbC5jcmVhdGVEZWZpbml0aW9uKGVsZW1lbnQsIGdldFVSSSgpLnRvU3RyaW5nKCksIHVzZUV4dGVuc2lvbkZhY3Rvcmllcyk7Ci0gICAgfQotICAgIGdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgIC8vIERvIHdlIG5lZWQgdGhlIG5leHQgbGluZT8KLSAgICAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0sIERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgc2VyaWFsaXplKG91dHB1dFN0cmVhbSwgZG9jdW1lbnQsIG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtLCBEb2N1bWVudCBkb2N1bWVudCwgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gICAgZG9TZXJpYWxpemUob3V0cHV0U3RyZWFtLCBkb2N1bWVudCwgZW5jb2RpbmcpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBzZXJpYWxpemUob3V0cHV0U3RyZWFtLCBlbGVtZW50LCBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgZW5jb2RpbmcpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBkb1NlcmlhbGl6ZShvdXRwdXRTdHJlYW0sIGVsZW1lbnQsIGVuY29kaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgZG9TZXJpYWxpemUoT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgZW5jb2RpbmcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVHJhbnNmb3JtZXJGYWN0b3J5IHRyYW5zZm9ybWVyRmFjdG9yeSA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1lckZhY3RvcnkubmV3VHJhbnNmb3JtZXIoKTsKLQotICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5NRVRIT0QsICJ4bWwiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIGVuY29kaW5nKTsKLSAgICAgIH0KLQotICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKG5ldyBET01Tb3VyY2UoZWxlbWVudCksIG5ldyBTdHJlYW1SZXN1bHQob3V0cHV0U3RyZWFtKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgV1NETFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIEludGVybmFsRXJyb3JIYW5kbGVyIGltcGxlbWVudHMgRXJyb3JIYW5kbGVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV1NETCBQQVJTRSBFUlJPUjogIiArIGUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldTREwgUEFSU0UgRkFUQUwgRVJST1I6ICIgKyBlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXU0RMIFBBUlNFIFdBUk5JTkc6ICIgKyBlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhdHRhY2hlZChFT2JqZWN0IGVPYmplY3QpCi0gIHsKLSAgICBzdXBlci5hdHRhY2hlZChlT2JqZWN0KTsKLQotICAgIC8vIHdlIG5lZWQgdG8gYXR0YWNoIGEgWFNEU2NoZW1hTG9jYXRvciBpbiBvcmRlciB0byByZXNvbHZlIGlubGluZSBzY2hlbWEgbG9jYXRpb25zCi0gICAgLy8gaWYgdGhlcmUncyBub3QgYWxyZWFkeSBvbmUgYXR0YWNoZWQKLSAgICBYU0RTY2hlbWFMb2NhdG9yIHhzZFNjaGVtYUxvY2F0b3IgPSAoWFNEU2NoZW1hTG9jYXRvcilFY29yZVV0aWwuZ2V0UmVnaXN0ZXJlZEFkYXB0ZXIodGhpcywgWFNEU2NoZW1hTG9jYXRvci5jbGFzcyk7Ci0gICAgaWYgKHhzZFNjaGVtYUxvY2F0b3IgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXRSZXNvdXJjZVNldCgpLmdldEFkYXB0ZXJGYWN0b3JpZXMoKS5hZGQobmV3IFhTRFNjaGVtYUxvY2F0b3JBZGFwdGVyRmFjdG9yeSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIERlZmluaXRpb25JbXBsKQotICAgIHsKLSAgICAgIERlZmluaXRpb25JbXBsIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbkltcGwpZU9iamVjdDsKLSAgICAgIGRlZmluaXRpb24uc2V0SW5saW5lU2NoZW1hTG9jYXRpb25zKHRoaXMpOwotICAgIH0KLSAgfQotICAvKgotICAgcHVibGljIHZvaWQgc2V0SW5saW5lU2NoZW1hTG9jYXRpb25zKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgIHsKLSAgIC8vIEluaXRpYWxpemUgdGhlIGlubGluZSBzY2hlbWFzIGxvY2F0aW9uIAotICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICB7Ci0gICBmb3IgKEl0ZXJhdG9yIGogPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgewotICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGoubmV4dCgpOwotICAgWFNEU2NoZW1hIHNjaGVtYSA9IGVsLmdldFNjaGVtYSgpOwotICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgeyAgCi0gICBzY2hlbWEuc2V0U2NoZW1hTG9jYXRpb24oZ2V0VVJJKCkudG9TdHJpbmcoKSk7Ci0gICB9ICAKLSAgIH0gICAgICAgIAotICAgfSAgICAgIAotICAgfSovCi0KLSAgcHVibGljIE1hcCBnZXREZWZhdWx0U2F2ZU9wdGlvbnMoKQotICB7Ci0gICAgaWYgKGRlZmF1bHRTYXZlT3B0aW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIGRlZmF1bHRTYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmF1bHRTYXZlT3B0aW9uczsKLSAgfQotfSAvL1dTRExSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ0ZWI3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi8vYXBpc3R5bGVzLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPHRpdGxlPldTREwgTW9kZWwgQVBJIE92ZXJ2aWV3PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPHA+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPHRhYmxlIHdpZHRoPSI1MDAiPgotPHRyPgotPHRkPgotPHA+Ci0JCVRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjVhMGU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08aHRtbD4KLQk8aGVhZD4KLQkJPG1ldGEKLQkJCW5hbWU9InJvb3QiCi0JCi0JCQljb250ZW50PSIuLi8uLi8uLi8uLi8uLi8uLi8iIC8+Ci0JCTx0aXRsZT5XU0RMIE1vZGVsIEFQSSBPdmVydmlldzwvdGl0bGU+Ci0JPC9oZWFkPgotCi0JPGJvZHk+Ci0JCTxhYnN0cmFjdD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L2Fic3RyYWN0PgotCQk8cD4KLQkJVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIGxvYWQsIG1vZGlmeSwgYW5kIHNhdmUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L3A+IAotCTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOTE1OTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0iamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZSIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZDUxZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLXdzaXVpLmphcgotYnVpbGQueG1sCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTExMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzaS51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNmNGZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI1dlZCBNYXIgMjkgMDQ6MDg6NTggRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyOWQzYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNXZWQgTWFyIDI5IDA0OjA4OjU3IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgzZDRiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlX1BMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lVSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJV9QUk9WSURFUl9OQU1FCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5pY29uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkczt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lOyBidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7cmVzb2x1dGlvbjo9b3B0aW9uYWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzO3Jlc29sdXRpb246PW9wdGlvbmFsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzO3Jlc29sdXRpb246PW9wdGlvbmFsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O3Jlc29sdXRpb246PW9wdGlvbmFsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvcjtyZXNvbHV0aW9uOj1vcHRpb25hbDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3M7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzaTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg1NzBmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS4uID0gc3JjLwotamFycy5jb21waWxlLm9yZGVyID0gLgotb3V0cHV0Li4gPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvZnVsbC9vYmoxNi92YWxpZGF0ZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvZnVsbC9vYmoxNi92YWxpZGF0ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZWIxMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2ljb25zL2Z1bGwvb2JqMTYvdmFsaWRhdGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2ljb25zL3dzaV9sb2dmaWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvd3NpX2xvZ2ZpbGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiMTExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvd3NpX2xvZ2ZpbGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI0NDJmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSEtLSBDb25zdGFudHMgZm9yIHN0cmluZ3MgIAotCi1fUExVR0lOX05BTUUgICAgICAgICAgICAgICAgICA9IFNvYXAgTW9uaXRvcgotX1BST1ZJREVSX05BTUUgICAgICAgICAgICAgICAgPSBFY2xpcHNlLm9yZwotX1VJX1dTSV9WQUxJREFUT1IgICAgICAgICAgICAgPSBXUy1JIE1lc3NhZ2UgVmFsaWRhdG9yCi1fVUlfQUNUSU9OX1ZBTElEQVRFICAgICAgICAgICA9IFZhbGlkYXRlIFdTLUkgTG9nIEZpbGUKLV9VSV9XSVpBUkRfVkFMSURBVEVfTE9HX1RJVExFID0gVmFsaWRhdGUgV1MtSSBNZXNzYWdlIExvZyBGaWxlCi1fVUlfTE9HX0VESVRPUiAgICAgICAgICAgICAgICA9IFhNTCBFZGl0b3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYTljNjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0tLT4gCi0KLTxwbHVnaW4+Ci0KLSAgICAKLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gUHVycG9zZTogQWRkIHZhbGlkYXRvciBhY3Rpb24gdG8gVENQSVAgbW9uaXRvci4gICAgICAgICAtLT4KLTwhLS0gRXh0ZW5zaW9uIHBvaW50OiBvcmcuZWNsaXBzZS51aS52aWV3QWN0aW9ucyAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3QWN0aW9ucyI+Ci0gICAgICA8dmlld0NvbnRyaWJ1dGlvbgotICAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnZpZXciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkuYXJ0aWNsZXMuYWN0aW9uLmNvbnRyaWJ1dGlvbi52aWV3Ij4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSJXUy1JIFByb2ZpbGUgVmFsaWRhdG9yIgotICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi92YWxpZGF0ZS5naWYiCi0gICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1dJWkFSRF9WQUxJREFURV9MT0dfVElUTEUiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlcy5WYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZSIKLSAgICAgICAgICAgICAgIHRvb2xiYXJQYXRoPSJncm91cDEiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlcy5WYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZSI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvdmlld0NvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFB1cnBvc2U6IFRvIHJlZ2lzdGVyIFdTLUkgbWVzc2FnZSB2YWxpZGF0b3IuICAgICAgICAgICAgLS0+Ci08IS0tIEV4dGVuc2lvbiBwb2ludDogb3JnLmVjbGlwc2UudWkudmlld0FjdGlvbnMgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ3c2lWYWxpZGF0b3IiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTSV9WQUxJREFUT1IiCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdG9yIj4KLSAgICAgIDx2YWxpZGF0b3I+Ci0gICAgICAgICA8ZmlsdGVyCi0gICAgICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlPSJmYWxzZSIKLSAgICAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NpbXNnIj4KLSAgICAgICAgIDwvZmlsdGVyPgotICAgICAgICAgPGhlbHBlciAgICAgIAotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuSGVscGVyIj4KLSAgICAgICAgIDwvaGVscGVyPgotICAgICAgICAgPHJ1bgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJTWVzc2FnZVZhbGlkYXRvciI+Ci0gICAgICAgICA8L3J1bj4KLSAgICAgIDwvdmFsaWRhdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDwhLS0gRXh0ZW5zaW9uIHBvaW50OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzICAtLT4gCi0gICA8IS0tIFB1cnBvc2U6IFNwZWNpZnkgZmlsZSBhc3NvY2lhdGlvbiBmb3Igd3NpbXNnLiAgICAgICAgICAgLS0+Ci0gICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4gCi0gICAgICA8ZmlsZS1hc3NvY2lhdGlvbiAKLSAgICAgICBjb250ZW50LXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0gICAgICAgZmlsZS1leHRlbnNpb25zPSJ3c2ltc2ciLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gQWRkIHZhbGlkYXRlIGFjdGlvbiAgdG8gLndzaW1zZyBmaWxlICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzaW1zZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zb2FwLnZhbGlkYXRlLndzaS5hY3Rpb24iPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfQUNUSU9OX1ZBTElEQVRFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXMuVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUiCi0gICAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXMuVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjEzZmQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0gCi0vKioKLSAqIFRyYW5zbGF0ZWQgbWVzc2FnZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIE5MUyAKLXsKLSAgICAvLy0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAtLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBWQUxJREFUSU9OX1dJWkFSRF9USVRMRTsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChXU0RMIHBhZ2UpIC0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9GSUxFX1NIRUxMX1RFWFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX0ZJTEVfVElUTEUgOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9GSUxFX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9IRUFESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9FWFBMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9JTkNMVURFX1dTRExfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9JTkNMVURFX1dTRExfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX1ZBTElEX1dTRExfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX1dPUktCRU5DSF9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX0JST1dTRV9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX1NFQVJDSF9VRERJX0JVVFRPTjsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChXU0RMIGNvbnRlbnQgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0hFQURJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0VYUEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfR1JPVVBfVEVYVF9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX0dST1VQX1RFWFRfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9SQURJT19QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1JBRElPX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfUkFESU9fUE9SVF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1JBRElPX09QRVJBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9SQURJT19NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfTEFCRUxfTkFNRVNQQUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX1BBUkVOVDsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChMb2cgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTE9HX1BBR0VfU0VMRUNUX0xPR19GSUxFTkFNRV9IRUFESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExPR19QQUdFX1NFTEVDVF9MT0dfRklMRU5BTUVfRVhQTDsKLQotCS8vIEFjdGlvbnMKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBQ1RJT05fV1NJX1ZBTElEQVRPUjsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIEVycm9ycyAtLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9VTkFCTEVfVE9fVkFMSURBVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfVkFMSURBVElPTl9GQUlMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfVEhFX1dTSU1TR19GSUxFX0lTX05PVF9WQUxJRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9QUk9CTEVNU19SRUFESU5HX1dTSU1TR19GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX0lOVkFMSURfTE9HX0ZJTEVfRVhURU5TSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBUk5JTkdfVkFMSURBVElPTl9XQVJOSU5HU19ERVRFQ1RFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXQVJOSU5HX0ZJTEVfQUxSRUFEWV9FWElTVFM7Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLSBJbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIC0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElORk9fVkFMSURBVElPTl9TVUNFRURFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJTkZPX1RIRV9XU0lNU0dfRklMRV9JU19WQUxJRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJTkZPX05PX01FU1NBR0VTX1RPX1ZBTElEQVRFOwotCi0gIHN0YXRpYyAKLSAgewotCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoV1NJVUlQbHVnaW4uUExVR0lOX0lEICsgIi5pbnRlcm5hbC5NZXNzYWdlcyIsIE1lc3NhZ2VzLmNsYXNzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL01lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY0YjM3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgICogCi0jICAqIENvbnRyaWJ1dG9yczogCi0jICAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jIC0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAtLS0tLS0tLS0tLS0tLS0KLVZBTElEQVRJT05fV0laQVJEX1RJVExFICAgICAgICAgICAgICAgID0gVmFsaWRhdGUgV1MtSSBNZXNzYWdlIExvZyBGaWxlCi0KLSMgLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChXU0RMIHBhZ2UpIC0tLS0tLS0tLS0tLS0tLQotV1NETF9QQUdFX0ZJTEVfU0hFTExfVEVYVCAgICAgICAgICAgICAgPSBTZWxlY3QgRmlsZQotV1NETF9QQUdFX0ZJTEVfVElUTEUgICAgICAgICAgICAgICAgICAgPSBTZWxlY3QgYSBGaWxlCi1XU0RMX1BBR0VfRklMRV9ERVNDUklQVElPTiAgICAgICAgICAgICA9IFNlbGVjdCBhIGZpbGUgZnJvbSB0aGUgd29ya2JlbmNoLgotV1NETF9QQUdFX1NFTEVDVF9XU0RMX0ZJTEVOQU1FX0hFQURJTkcgPSBJbmNsdWRlIFdTREwgRmlsZQotV1NETF9QQUdFX1NFTEVDVF9XU0RMX0ZJTEVOQU1FX0VYUEwgICAgPSBPcHRpb25hbGx5IHNlbGVjdCBhIFdTREwgZmlsZSBmb3IgdGhlIFdlYiBzZXJ2aWNlCi1XU0RMX1BBR0VfSU5DTFVERV9XU0RMX0JVVFRPTiAgICAgICAgICA9IEluY2x1ZGUgV1NETCBkb2N1bWVudCBmb3IgV2ViIHNlcnZpY2UKLVdTRExfUEFHRV9JTkNMVURFX1dTRExfTEFCRUwgICAgICAgICAgID0gRW50ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0RMIGRvY3VtZW50IGZvciB0aGUgV2ViIHNlcnZpY2UKLVdTRExfUEFHRV9WQUxJRF9XU0RMX0xBQkVMICAgICAgICAgICAgID0gKk5vdGU6IFlvdSBjYW4gb25seSBzZWxlY3QgdGhlIE5leHQgYnV0dG9uIGlmIHRoZSBXU0RMIGRvY3VtZW50IGlzIHZhbGlkLgotV1NETF9QQUdFX1dPUktCRU5DSF9CVVRUT04gICAgICAgICAgICAgPSBXb3JrYmVuY2guLi4KLVdTRExfUEFHRV9CUk9XU0VfQlVUVE9OICAgICAgICAgICAgICAgID0gQnJvd3NlLi4uCi1XU0RMX1BBR0VfU0VBUkNIX1VERElfQlVUVE9OICAgICAgICAgICA9IFNlYXJjaCBVRERJLi4uCi0KLSMgLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChXU0RMIGNvbnRlbnQgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi1XU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfSEVBRElORyAgICAgICA9IFNwZWNpZnkgdGhlIFdTREwgZWxlbWVudCB0byBiZSBBbmFseXplZAotV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0VYUEwgICAgICAgICAgPSBJbmRpY2F0ZSB0aGUgbmFtZSwgdHlwZSwgYW5kIG5hbWVzcGFjZSBvZiB0aGUgV1NETCBlbGVtZW50IHRvIGJlIGFuYWx5emVkCi1XU0RMX0NPTlRFTlRfUEFHRV9HUk9VUF9URVhUX0VMRU1FTlQgICA9IFRoZSBXU0RMIGVsZW1lbnQKLVdTRExfQ09OVEVOVF9QQUdFX0dST1VQX1RFWFRfVFlQRSAgICAgID0gdHlwZQotV1NETF9DT05URU5UX1BBR0VfUkFESU9fUE9SVCAgICAgICAgICAgPSBwb3J0Ci1XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19CSU5ESU5HICAgICAgICA9IGJpbmRpbmcKLVdTRExfQ09OVEVOVF9QQUdFX1JBRElPX1BPUlRfVFlQRSAgICAgID0gcG9ydFR5cGUKLVdTRExfQ09OVEVOVF9QQUdFX1JBRElPX09QRVJBVElPTiAgICAgID0gb3BlcmF0aW9uCi1XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19NRVNTQUdFICAgICAgICA9IG1lc3NhZ2UKLVdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUUgICAgICAgICAgID0gbmFtZToKLVdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUVTUEFDRSAgICAgID0gbmFtZXNwYWNlOgotV1NETF9DT05URU5UX1BBR0VfTEFCRUxfUEFSRU5UICAgICAgICAgPSBwYXJlbnQ6Ci0KLSMgLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChMb2cgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi1MT0dfUEFHRV9TRUxFQ1RfTE9HX0ZJTEVOQU1FX0hFQURJTkcgICA9IFNwZWNpZnkgdGhlIFdTLUkgTWVzc2FnZSBMb2cgRmlsZSBOYW1lCi1MT0dfUEFHRV9TRUxFQ1RfTE9HX0ZJTEVOQU1FX0VYUEwgICAgICA9IFNlbGVjdCBhIGZvbGRlciBhbmQgc3BlY2lmeSBhIG1lc3NhZ2UgbG9nIGZpbGUgbmFtZQotCi0jIEFjdGlvbnMKLUFDVElPTl9XU0lfVkFMSURBVE9SICAgICAgICAgICAgICAgICAgID0gV1MtSSBNZXNzYWdlIFZhbGlkYXRvcgotCi0jIC0tLS0tLS0tLS0tLS0tLSBFcnJvcnMgLS0tLS0tLS0tLS0tLS0tCi1FUlJPUl9VTkFCTEVfVE9fVkFMSURBVEUgICAgICAgICAgICAgICA9IFVuYWJsZSB0byBWYWxpZGF0ZQotRVJST1JfVkFMSURBVElPTl9GQUlMRUQgICAgICAgICAgICAgICAgPSBWYWxpZGF0aW9uIEZhaWxlZAotRVJST1JfVEhFX1dTSU1TR19GSUxFX0lTX05PVF9WQUxJRCAgICAgPSBUaGUgV1MtSSBNZXNzYWdlIExvZyBmaWxlIGlzIG5vdCB2YWxpZC4gIFNlZSB0aGUgUHJvYmxlbXMgdmlldyBmb3IgYSBsaXN0IG9mIHRoZSB2YWxpZGF0aW9uIGVycm9ycy4KLUVSUk9SX1BST0JMRU1TX1JFQURJTkdfV1NJTVNHX0ZJTEUgICAgID0gUHJvYmxlbXMgcmVhZGluZyB0aGUgV1MtSSBNZXNzYWdlIExvZyBmaWxlLiAgU2VlIHRoZSBQcm9ibGVtcyB2aWV3IGZvciBhIGxpc3Qgb2YgZXJyb3JzLgotRVJST1JfSU5WQUxJRF9MT0dfRklMRV9FWFRFTlNJT04gICAgICAgPSBUaGUgZmlsZSBuYW1lIGV4dGVuc2lvbiBjYW4gb25seSBiZSAiLndzaW1zZyIuCi1XQVJOSU5HX1ZBTElEQVRJT05fV0FSTklOR1NfREVURUNURUQgICA9IEhvd2V2ZXIgd2FybmluZ3MgaGF2ZSBiZWVuIGlzc3VlZC4gU2VlIHRoZSBQcm9ibGVtcyB2aWV3IGZvciBhIGxpc3Qgb2YgdGhlIHZhbGlkYXRpb24gd2FybmluZ3MuCi1XQVJOSU5HX0ZJTEVfQUxSRUFEWV9FWElTVFMgICAgICAgICAgICA9IFdhcm5pbmc6IFRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGFuZCB3aWxsIGJlIG92ZXJ3cml0dGVuLiAKLQotIyAtLS0tLS0tLS0tLS0tLS0gSW5mb3JtYXRpb25hbCBtZXNzYWdlcyAtLS0tLS0tLS0tLS0tLS0KLUlORk9fVkFMSURBVElPTl9TVUNFRURFRCAgICAgICAgICAgICAgID0gVmFsaWRhdGlvbiBTdWNjZWVkZWQKLUlORk9fVEhFX1dTSU1TR19GSUxFX0lTX1ZBTElEICAgICAgICAgID0gVGhlIFdTLUkgTWVzc2FnZSBMb2cgZmlsZSBpcyB2YWxpZC4KLUlORk9fTk9fTUVTU0FHRVNfVE9fVkFMSURBVEUgICAgICAgICAgID0gTm8gTWVzc2FnZXMgdG8gVmFsaWRhdGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9SZXNvdXJjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YWYxYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi0vKioKLSAqIEdJRiBjb25zdGFudHMKLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlc291cmNlCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRFX1dTSV9MT0dGSUxFX1dJWiA9ICJhY3Rpb25zL2ljb25zL3dzaV9sb2dmaWxlX3dpei5wbmciOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvUmVzb3VyY2VGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwMjI1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvUmVzb3VyY2VGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VGaWx0ZXIgZXh0ZW5kcyBWaWV3ZXJGaWx0ZXIgCi17Ci0gIHByb3RlY3RlZCBTdHJpbmdbXSBmRXh0ZW5zaW9uczsKLSAgcHJvdGVjdGVkIElGaWxlW10gZkV4Y2x1ZGVkRmlsZXM7Ci0gIHByb3RlY3RlZCBDb2xsZWN0aW9uIGZFeGNsdWRlczsKLQkKLSAgcHVibGljIFJlc291cmNlRmlsdGVyKFN0cmluZ1tdIGV4dGVuc2lvbnMsIENvbGxlY3Rpb24gZXhjbHVkZSkgCi0gIHsKLSAgICBmRXh0ZW5zaW9ucz0gZXh0ZW5zaW9uczsKLSAgICBmRXhjbHVkZXM9IGV4Y2x1ZGU7Ci0gICAgZkV4Y2x1ZGVkRmlsZXMgPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFJlc291cmNlRmlsdGVyKFN0cmluZ1tdIGV4dGVuc2lvbnMsIElGaWxlW10gZXhjbHVkZWRGaWxlcywgQ29sbGVjdGlvbiBleGNsdWRlKSAKLSAgewotICAgIGZFeHRlbnNpb25zPSBleHRlbnNpb25zOwotICAgIGZFeGNsdWRlcz0gZXhjbHVkZTsKLSAgICBmRXhjbHVkZWRGaWxlcyA9IGV4Y2x1ZGVkRmlsZXM7Ci0gIH0KLQkKLSAgcHVibGljIGJvb2xlYW4gaXNGaWx0ZXJQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgT2JqZWN0IHByb3BlcnR5KSAKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCQotICBwdWJsaWMgYm9vbGVhbiBzZWxlY3QoVmlld2VyIHZpZXdlciwgT2JqZWN0IHBhcmVudCwgT2JqZWN0IGVsZW1lbnQpIAotICB7Ci0gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSkgCi0gICAgewotICAgICAgaWYgKGZFeGNsdWRlcyAhPSBudWxsICYmIGZFeGNsdWRlcy5jb250YWlucyhlbGVtZW50KSkgCi0gICAgICB7Ci0JcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgU3RyaW5nIG5hbWU9ICgoSUZpbGUpZWxlbWVudCkuZ2V0TmFtZSgpOwotICAgICAgaWYgKGZFeGNsdWRlZEZpbGVzICE9IG51bGwpIAotICAgICAgewotICAgICAgICBmb3IgKGludCBqPSAwOyBqIDwgZkV4Y2x1ZGVkRmlsZXMubGVuZ3RoOyBqKyspIAotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCAoKElGaWxlKWVsZW1lbnQpLmdldExvY2F0aW9uKCkuCi0gICAgICAgICAgICAgICB0b1N0cmluZygpLmNvbXBhcmVUbygoKElGaWxlKWZFeGNsdWRlZEZpbGVzW2pdKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpID09IDAgKQotICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgICBpZiAoZkV4dGVuc2lvbnMubGVuZ3RoID09IDApIAotICAgICAgewotICAgICAgICAvLyBhc3N1bWUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGZpbHRlciBhbnkgZmlsZXMgYmFzZWQgb24gCi0gICAgICAgIC8vIGV4dGVuc2lvbgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGk9IDA7IGkgPCBmRXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykgCi0gICAgICB7Ci0gICAgICAgIGlmIChuYW1lLmVuZHNXaXRoKGZFeHRlbnNpb25zW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9IAotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gCi0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElDb250YWluZXIpIAotICAgIHsgLy8gSVByb2plY3QsIElGb2xkZXIKLSAgICAgIHRyeSAKLSAgICAgIHsKLSAgICAgIAlJUmVzb3VyY2VbXSByZXNvdXJjZXM9ICgoSUNvbnRhaW5lcillbGVtZW50KS5tZW1iZXJzKCk7Ci0JZm9yIChpbnQgaT0gMDsgaSA8IHJlc291cmNlcy5sZW5ndGg7IGkrKykgCi0gICAgICAgIHsKLQkgIC8vIHJlY3Vyc2l2ZSEKLQkgIGlmIChzZWxlY3Qodmlld2VyLCBwYXJlbnQsIHJlc291cmNlc1tpXSkpIAotICAgICAgICAgIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JICB9Ci0JfQotICAgICAgfSAKLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIAotICAgICAgewotICAgICAgfQkJCQkKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJTWVzc2FnZVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSU1lc3NhZ2VWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVlYTQ0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJTWVzc2FnZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuVmFsaWRhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLldTSVZhbGlkYXRlQWN0aW9uOwotLy9pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLQotLyoqCi0gKiBBIFZhbGlkYXRvciB0aGF0IHBlcmZvcm1zIHZhbGlkYXRpb24gb24gYSBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUuIAotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lNZXNzYWdlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvcgotewotICBwcm90ZWN0ZWQgSVJlcG9ydGVyIHJlcG9ydGVyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0lfTUVTU0FHRV9WQUxJREFUT1JfSUQgPSAid3NpbWVzc2FnZXZhbGlkYXRvciIuaW50ZXJuKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnZhbGlkYXRlLklWYWxpZGF0b3IjdmFsaWRhdGUob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShJRmlsZSBmaWxlKQotICB7ICAKLSAgICBXU0lWYWxpZGF0ZUFjdGlvbiB2YWxpZGF0ZUFjdGlvbiA9IG5ldyBXU0lWYWxpZGF0ZUFjdGlvbihmaWxlLCBmYWxzZSk7Ci0gICAgdmFsaWRhdGVBY3Rpb24uc2V0VmFsaWRhdG9yKHRoaXMpOwotICAgIC8vdmFsaWRhdGVBY3Rpb24uc2V0UmVwb3J0ZXIoZ2V0UmVwb3J0ZXIoKSk7Ci0gICAgdmFsaWRhdGVBY3Rpb24ucnVuKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS52YWxpZGF0ZS5JVmFsaWRhdG9yI3NldFJlcG9ydGVyKG9yZy5lY2xpcHNlLnZhbGlkYXRlLklSZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydGVyKElSZXBvcnRlciByZXBvcnRlcikKLSAgewotICAJdGhpcy5yZXBvcnRlciA9IHJlcG9ydGVyOwotICB9Ci0KLXB1YmxpYyB2b2lkIGNsZWFudXAoSVJlcG9ydGVyIHJlcG9ydGVyKSB7Ci0JLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQotfQotCi1wdWJsaWMgdm9pZCB2YWxpZGF0ZShJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyLCBJUmVwb3J0ZXIgcmVwb3J0ZXIpIHRocm93cyBWYWxpZGF0aW9uRXhjZXB0aW9uCi0gewotCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSVVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhYzY4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci0KLS8qKgotICogV1NJVmFsaWRhdGVQbHVnaW4gaXMgYSBwbHVnaW4gdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIEVjbGlwc2UgcGxhdGZvcm0gVUkuIAotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLQotcHVibGljIGNsYXNzIFdTSVVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbi4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgV1NJVUlQbHVnaW4gaW5zdGFuY2U7ICAgICAgICAgICAgICAgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzaS51aSI7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0lVSVBsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlID0gdGhpczsKLSAgfSAgICAKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uLiAoQmFzZWQgb24gdGhlIFNpbmdsZXRvbiBQYXR0ZXJuKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NJVUlQbHVnaW4gZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIEltYWdlUmVnaXN0cnkgY3JlYXRlSW1hZ2VSZWdpc3RyeSgpIAotICB7Ci0JCUltYWdlUmVnaXN0cnkgcmVnaXN0cnkgPSBzdXBlci5jcmVhdGVJbWFnZVJlZ2lzdHJ5KCk7Ci0JCXJlZ2lzdGVySW1hZ2UocmVnaXN0cnksIFJlc291cmNlLlZBTElEQVRFX1dTSV9MT0dGSUxFX1dJWik7Ci0JCXJldHVybiByZWdpc3RyeTsKLSAgfQotCi0JLyoqCi0JICogUmVnaXN0ZXIgYW4gaW1hZ2Ugd2l0aCB0aGUgcmVnaXN0cnkuCi0JICogCi0JICogQHBhcmFtIGtleSB0aGUga2V5Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHJlZ2lzdGVySW1hZ2UoSW1hZ2VSZWdpc3RyeSByZWdpc3RyeSwgU3RyaW5nIGtleSkKLQl7Ci0gIAkgIHRyeSAKLSAgCSAgewotCQlJbWFnZURlc2NyaXB0b3IgaWQgPSBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoV1NJVUlQbHVnaW4uY2xhc3MsIGtleSk7Ci0JCXJlZ2lzdHJ5LnB1dChrZXksIGlkKTsKLQkgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSAKLQkgIHsKLSAgICAgIH0KLQl9Ci0KLSAgLyoqCi0gICAqIENvbnZpZW5jZSBBUEkuICAKLSAgICogRmluZHMgdGhlIHNwZWNpZmllZCBpbWFnZSBzdG9yZWQgaW4gdGhpcyBwbHVnLWluJ3MgaW1hZ2UgcmVnaXN0cnkuCi0gICAqIEBwYXJhbSBpY29uTmFtZTogdGhlIG5hbWUgb2YgdGhlIGltYWdlLgotICAgKiBAcmV0dXJuIHRoZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEltYWdlIGdldFJlc291cmNlSW1hZ2UoU3RyaW5nIGljb25OYW1lKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoaWNvbk5hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYjY0NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5XU0lWYWxpZGF0ZUFjdGlvbjsKLQotLyoqCi0gKiBBIHNpbXBsZSBpbnRlcmZhY2UgdG8gdGhlIFdTLUkgbWVzc2FnZSBsb2cgdmFsaWRhdG9yLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lWYWxpZGF0b3IgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFdTSVZhbGlkYXRvcigpCi0JewotCX0KLQkKLQkvKioKLQkgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gbG9nIGZpbGUuCi0JICogCi0JICogQHBhcmFtIGZpbGUgVGhlIGxvZyBmaWxlIHRvIHZhbGlkYXRlLgotCSAqLwotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKElGaWxlIGZpbGUpCi0JewotCQlXU0lNZXNzYWdlVmFsaWRhdG9yIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgV1NJTWVzc2FnZVZhbGlkYXRvcigpOwotCQlXU0lWYWxpZGF0ZUFjdGlvbiB2YWxpZGF0ZUFjdGlvbiA9IG5ldyBXU0lWYWxpZGF0ZUFjdGlvbihmaWxlLCB0cnVlKTsKLQkJdmFsaWRhdGVBY3Rpb24uc2V0VmFsaWRhdG9yKG1lc3NhZ2VWYWxpZGF0b3IpOwotCQl2YWxpZGF0ZUFjdGlvbi5ydW4oKTsKLQl9Ci0JCi0JLyoqCi0JICogVmFsaWRhdGUgdGhlIGdpdmVuIGxvZyBmaWxlIHdpdGggYSBXU0RMIGRvY3VtZW50IHNwZWNpZmllZC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBUaGUgbG9nIGZpbGUgdG8gdmFsaWRhdGUuCi0JICogQHBhcmFtIHdzZGxmaWxlIFRoZSBXU0RMIGZpbGUgdG8gdXNlIGZvciB2YWxpZGF0aW9uLgotCSAqIEBwYXJhbSBlbGVtZW50bmFtZSBUaGUgV1NETCBlbGVtZW50IHRvIHZhbGlkYXRlLgotCSAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUgV1NETCBlbGVtZW50IHRvIHZhbGlkYXRlLgotCSAqIEBwYXJhbSBwYXJlbnRuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLQkgKi8KLQkvKioKLQkgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gbG9nIGZpbGUuCi0JICogCi0JICogQHBhcmFtIGZpbGUgVGhlIGxvZyBmaWxlIHRvIHZhbGlkYXRlLgotCSAqLwotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKElGaWxlIGZpbGUsIFN0cmluZyB3c2RsZmlsZSwgU3RyaW5nIGVsZW1lbnRuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50bmFtZSwgU3RyaW5nIHR5cGUpCi0JewotCQlXU0lNZXNzYWdlVmFsaWRhdG9yIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgV1NJTWVzc2FnZVZhbGlkYXRvcigpOwotCQlXU0lWYWxpZGF0ZUFjdGlvbiB2YWxpZGF0ZUFjdGlvbiA9IG5ldyBXU0lWYWxpZGF0ZUFjdGlvbihmaWxlLCB0cnVlLCB3c2RsZmlsZSwgZWxlbWVudG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50bmFtZSwgdHlwZSk7Ci0JCXZhbGlkYXRlQWN0aW9uLnNldFZhbGlkYXRvcihtZXNzYWdlVmFsaWRhdG9yKTsKLQkJdmFsaWRhdGVBY3Rpb24ucnVuKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvVmFsaWRhdGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1ZhbGlkYXRlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZmNlY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvVmFsaWRhdGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuTG9jYWxpemVkTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLldvcmtiZW5jaFJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvblVJTWVzc2FnZXM7Ci0KLS8qKgotICogQSBnZW5lcmFsIHZhbGlkYXRlIGFjdGlvbiBjbGFzcyB0aGF0IGNhbiBiZSBleHRlbmRlZCBieSB2YWxpZGF0b3JzLiBUaGlzIGNsYXNzCi0gKiBwcm92aWRlcyBtZXRob2RzIHRvIHJ1biB0aGUgYWN0aW9uLCBhZGQgbWFya2VycyB0byBhIGZpbGUgYW5kIHdpbGwgaGFuZGxlCi0gKiBzaG93aW5nIGEgZGlhbG9nIHdpdGggdGhlIHJlc3VsdHMgb2YgdmFsaWRhdGlvbiAoaWYgcmVxdWVzdGVkKSBhbmQgcHJvbXB0IHRvCi0gKiBzYXZlIGRpcnR5IGZpbGVzIChpZiByZXF1ZXN0ZWQuKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgLy8gTG9jYWxseSB1c2VkLCBub24tVUkgc3RyaW5ncy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRURfRklMRV9FUlJPUl9PUEVOID0gInJlZmVyZW5jZWRGaWxlRXJyb3IoIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZFUkVOQ0VEX0ZJTEVfRVJST1JfQ0xPU0UgPSAiKSI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFRF9GSUxFX0VSUk9SID0gInJlZmVyZW5jZWRGaWxlRXJyb3IiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdST1VQX05BTUUgPSAiZ3JvdXBOYW1lIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfUFJPVE9DT0xfTk9fU0xBU0ggPSAiZmlsZToiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiY29sdW1uTnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gInNxdWlnZ2xlU2VsZWN0aW9uU3RyYXRlZ3kiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gInNxdWlnZ2xlTmFtZU9yVmFsdWUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0RpYWxvZyA9IHRydWU7Ci0KLSAgcHJvdGVjdGVkIElGaWxlIGZpbGUgPSBudWxsOwotCi0gIHByb3RlY3RlZCBJUmVwb3J0ZXIgcmVwb3J0ZXI7Ci0KLSAgcHJvdGVjdGVkIElWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlCi0gICAqICAgICAgICAgIFRoZSBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gc2hvd0RpYWxvZwotICAgKiAgICAgICAgICBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgZGlhbG9nIHdoZW4gdmFsaWRhdGlvbiBpcyBjb21wbGV0ZS4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZUFjdGlvbihJRmlsZSBmaWxlLCBib29sZWFuIHNob3dEaWFsb2cpCi0gIHsKLSAgICB0aGlzLnNob3dEaWFsb2cgPSBzaG93RGlhbG9nOwotICAgIHRoaXMuZmlsZSA9IGZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIHNwZWNpZmllZCBmaWxlLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGUKLSAgICogICAgICAgICAgVGhlIGZpbGUgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB2YWxpZGF0ZShmaW5hbCBJRmlsZSBmaWxlKTsKLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRJbmZvVG9NZXNzYWdlIChWYWxpZGF0aW9uTWVzc2FnZSB2LCBJTWVzc2FnZSBtKQotICB7IC8vIFRoaXMgbWV0aG9kIGlzIG92ZXJpZGRlbiBieSBzdWJjbGFzc2VzCi0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgbWFya2VycyBmb3IgdGhlIHZhbGlhdGlvbiBtZXNzYWdlcyBnZW5lcmF0ZWQgZnJvbSB0aGUgdmFsaWRhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBpRmlsZQotICAgKiAgICAgICAgICBUaGUgcmVzb3VyY2UgdG8gY3JlYXRlIHRoZSBtYXJrZXJzIG9uLgotICAgKiBAcGFyYW0gdmFsbWVzc2FnZXMKLSAgICogICAgICAgICAgVGhlIGFycmF5IG9mIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVNYXJrZXJzKElGaWxlIGlGaWxlLCBWYWxpZGF0aW9uTWVzc2FnZVtdIHZhbG1lc3NhZ2VzKQotICB7Ci0gICAgaWYgKCFmaWxlSXNPSyhpRmlsZSkpCi0gICAgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgbnVtbWVzc2FnZXMgPSB2YWxtZXNzYWdlcy5sZW5ndGg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgIHsKLSAgICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlID0gdmFsbWVzc2FnZXNbaV07Ci0gICAgICBTdHJpbmcgdXJpID0gdmFsaWRhdGlvbk1lc3NhZ2UuZ2V0VXJpKCk7Ci0KLSAgICAgIExvY2FsaXplZE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgIGlmICh2YWxpZGF0aW9uTWVzc2FnZS5nZXRTZXZlcml0eSgpID09IFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1cpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBuZXcgTG9jYWxpemVkTWVzc2FnZShnZXRWYWxpZGF0aW9uRnJhbWV3b3JrU2V2ZXJpdHkoSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKSwgdmFsaWRhdGlvbk1lc3NhZ2UKLSAgICAgICAgICAgIC5nZXRNZXNzYWdlKCksIGlGaWxlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgCi0gICAgICAgIG1lc3NhZ2UgPSBuZXcgTG9jYWxpemVkTWVzc2FnZShnZXRWYWxpZGF0aW9uRnJhbWV3b3JrU2V2ZXJpdHkoSU1hcmtlci5TRVZFUklUWV9FUlJPUiksIHZhbGlkYXRpb25NZXNzYWdlLmdldE1lc3NhZ2UoKSwgaUZpbGUpOwotICAgICAgfQotICAgICAgCi0gICAgICBtZXNzYWdlLnNldExpbmVObyh2YWxpZGF0aW9uTWVzc2FnZS5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0gICAgICAKLSAgICAgIExpc3QgbmVzdGVkZXJyb3JzID0gdmFsaWRhdGlvbk1lc3NhZ2UuZ2V0TmVzdGVkTWVzc2FnZXMoKTsKLSAgICAgIGlmIChuZXN0ZWRlcnJvcnMgIT0gbnVsbCAmJiAhbmVzdGVkZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZS5zZXRHcm91cE5hbWUoUkVGRVJFTkNFRF9GSUxFX0VSUk9SX09QRU4gKyB1cmkgKyBSRUZFUkVOQ0VEX0ZJTEVfRVJST1JfQ0xPU0UpOwotICAgICAgfQotCi0gICAgICBnZXRPckNyZWF0ZVJlcG9ydGVyKCkuYWRkTWVzc2FnZShnZXRWYWxpZGF0b3IoKSwgbWVzc2FnZSk7Ci0KLSAgICAgIAotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJTWFya2VyW10gbWFya2VycyA9IGlGaWxlLmZpbmRNYXJrZXJzKG51bGwsIHRydWUsIElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIElNYXJrZXIgbWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgU3RyaW5nIGdyb3VwTmFtZSA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgZ3JvdXBOYW1lID0gKFN0cmluZykgbWFya2VyLmdldEF0dHJpYnV0ZShHUk9VUF9OQU1FKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChncm91cE5hbWUgIT0gbnVsbCAmJiBncm91cE5hbWUuc3RhcnRzV2l0aChSRUZFUkVOQ0VEX0ZJTEVfRVJST1IpKQotICAgICAgICB7Ci0KLSAgICAgICAgICBtYXJrZXIuc2V0QXR0cmlidXRlKElNYXJrZXIuRE9ORSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xlYXJNYXJrZXJzKElGaWxlIGlGaWxlKQotICB7Ci0gICAgaWYgKGZpbGVJc09LKGlGaWxlKSkKLSAgICB7Ci0gICAgICBnZXRPckNyZWF0ZVJlcG9ydGVyKCkucmVtb3ZlQWxsTWVzc2FnZXMoZ2V0VmFsaWRhdG9yKCksIGlGaWxlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gIAl0cnkKLSAgCXsKLSAgCQkvLyBDUy4uLiBhIHRlbXBvcmFyeSB0ZXN0IHRvIGF2b2lkIHBlcmZvcm1pbmcgdmFsaWRhdGlvbiBpbiB0aGUgYWJzZW5jZSBvZiB4ZXJjZXMgCi0gIAkJLy8KLSAgCQkvL2R3IENsYXNzIHRoZUNsYXNzID0gCi0gIAkJQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZXJDb25maWd1cmF0aW9uIiwgdHJ1ZSwgdGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOyAvLyROT04tTkxTLTEkCi0gIAkJICAJCQotICAJCWlmIChmaWxlSXNPSyhmaWxlKSkKLSAgCQl7Ci0gIAkJCS8vIENoZWNrIGlmIHRoZSBlZGl0b3IgaXMgZGlydHkgZm9yIHRoaXMgZmlsZS4gSWYgc28sIHByb21wdCB0aGUgdXNlciB0bwotICAJCQkvLyBzYXZlIGJlZm9yZSB2YWxpZGF0aW5nLgotICAJCQlpZihzaG93RGlhbG9nKQotICAJCQl7Ci0gIAkJCQljaGVja0lmRmlsZURpcnR5KGZpbGUpOwotICAJCQl9Ci0gIAkJCXRyeQotICAJCQl7Ci0gIAkJCQl2YWxpZGF0ZShmaWxlKTsKLSAgCQkJfQotICAJCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0gIAkJCXsKLSAgCQkJCUlMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXJJbnN0YW5jZSgpOwotICAJCQkJbG9nZ2VyLmxvZ0Vycm9yKCIiLCBlKTsgLy8kTk9OLU5MUy0xJAotICAJCQkJLy8gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAJCQl9Ci0gIAkJfQotICAJfQotICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAJewkJCi0gIAl9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCB3aGV0aGVyIHRoZSBmaWxlIGdpdmVuIGlzIE9LIHRvIHVzZS4gQSBmaWxlIGlzIE9LIHRvIHVzZSBpZiAxLiBJdCBpcwotICAgKiBub3QgbnVsbCAyLiBJdCBleGlzdHMuIDMuIFRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGUgaXMgYWNjZXNzaWJsZS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIGNoZWNrLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgT0sgdG8gdXNlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBmaWxlSXNPSyhJRmlsZSBmaWxlKQotICB7Ci0gICAgaWYgKGZpbGUgIT0gbnVsbCAmJiBmaWxlLmV4aXN0cygpICYmIGZpbGUuZ2V0UHJvamVjdCgpLmlzQWNjZXNzaWJsZSgpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIGZpbGUgaXMgZGlydHkuIEEgZmlsZSBpcyBkaXJ0eSBpZiB0aGVyZSBpcyBhbiBvcGVuIGVkaXRvciBmb3IKLSAgICogdGhlIGZpbGUgdGhhdCBjb250YWlucyBjaGFuZ2VzIHRoYXQgaGF2ZW4ndCBiZWVuIHNhdmVkLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGRpcnR5LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY2hlY2tJZkZpbGVEaXJ0eShJRmlsZSBmaWxlKQotICB7Ci0gICAgSUVkaXRvclBhcnRbXSBkaXJ0eUVkaXRvcnMgPSBXU0lVSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpCi0gICAgICAgIC5nZXRBY3RpdmVQYWdlKCkuZ2V0RGlydHlFZGl0b3JzKCk7Ci0gICAgaW50IG51bWVkaXRvcnMgPSBkaXJ0eUVkaXRvcnMubGVuZ3RoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtZWRpdG9yczsgaSsrKQotICAgIHsKLSAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGRpcnR5RWRpdG9yc1tpXS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgRmlsZUVkaXRvcklucHV0KQotICAgICAgewotICAgICAgICBGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKEZpbGVFZGl0b3JJbnB1dCkgZWRpdG9ySW5wdXQ7Ci0gICAgICAgIGlmIChmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpLmVxdWFscyhmaWxlKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gWE1MVmFsaWRhdGlvblVJTWVzc2FnZXMuX1VJX1NBVkVfRElSVFlfRklMRV9NRVNTQUdFOwotICAgICAgICAgIFN0cmluZyB0aXRsZSA9IFhNTFZhbGlkYXRpb25VSU1lc3NhZ2VzLl9VSV9TQVZFX0RJUlRZX0ZJTEVfVElUTEU7Ci0gICAgICAgICAgaWYgKE1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBkaXJ0eUVkaXRvcnNbaV0uZG9TYXZlKG51bGwpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmUgb3BlbiBlZGl0b3IvZmlsZSBzbyB3ZSBjYW4gYnJlYWsuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgcmVwb3J0ZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgYSBJUmVwb3J0ZXIKLSAgICovCi0gIHB1YmxpYyBJUmVwb3J0ZXIgZ2V0UmVwb3J0ZXIoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHJlcG9ydGVyLgotICAgKiAKLSAgICogQHBhcmFtIHJlcG9ydGVyCi0gICAqICAgICAgICAgIFRoZSByZXBvcnRlciB0byBzZXQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydGVyKElSZXBvcnRlciByZXBvcnRlcikKLSAgewotICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgYSBJVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRvciBnZXRWYWxpZGF0b3IoKQotICB7Ci0gICAgcmV0dXJuIHZhbGlkYXRvcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsaWRhdG9yCi0gICAqICAgICAgICAgIFRoZSB2YWxpZGF0b3IgdG8gc2V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0b3IoSVZhbGlkYXRvciB2YWxpZGF0b3IpCi0gIHsKLSAgICB0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjsKLSAgfQotCi0gIHByb3RlY3RlZCBJUmVwb3J0ZXIgZ2V0T3JDcmVhdGVSZXBvcnRlcigpCi0gIHsKLSAgICBpZiAocmVwb3J0ZXIgPT0gbnVsbCkKLSAgICB7IAotICAgICAgcmVwb3J0ZXIgPSBuZXcgV29ya2JlbmNoUmVwb3J0ZXIoZmlsZS5nZXRQcm9qZWN0KCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVwb3J0ZXI7Ci0gIH0KLQotICAvKioKLSAgICogT3JpZ2luYWxseSBmcm9tICp2YWxpZGF0aW9uLkhlbHBlcgotICAgKiAKLSAgICogQHBhcmFtIHNldmVyaXR5Ci0gICAqICAgICAgICAgIFRoZSBzZXZlcml0eSBnaXZlbi4KLSAgICogQHJldHVybiBUaGUgdmFsaWRhdGlvbiBmcmFtZXdvcmsgc2V2ZXJpdHkgY29ycmVzcG9uZGluZyB0byB0aGUgZXJyb3IuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGdldFZhbGlkYXRpb25GcmFtZXdvcmtTZXZlcml0eShpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICBzd2l0Y2ggKHNldmVyaXR5KSB7Ci0gICAgY2FzZSBJTWFya2VyLlNFVkVSSVRZX0VSUk9SOgotICAgICAgcmV0dXJuIElNZXNzYWdlLkhJR0hfU0VWRVJJVFk7Ci0gICAgY2FzZSBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkc6Ci0gICAgICByZXR1cm4gSU1lc3NhZ2UuTk9STUFMX1NFVkVSSVRZOwotICAgIGNhc2UgSU1hcmtlci5TRVZFUklUWV9JTkZPOgotICAgICAgcmV0dXJuIElNZXNzYWdlLkxPV19TRVZFUklUWTsKLSAgICB9Ci0gICAgcmV0dXJuIElNZXNzYWdlLkxPV19TRVZFUklUWTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE9wZW4gYW4gZXJyb3IgZGlhbG9nIHdpdGggdGhlIGdpdmVuIHRpdGxlIGFuZCBtZXNzYWdlLiBTaG93IHRoZSBwcm9ibGVtcyB2aWV3Ci0gICAqIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHZpc2libGUuCi0gICAqIAotICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBlcnJvciBkaWFsb2cuCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGluIHRoZSBlcnJvciBkaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBvcGVuRXJyb3JEaWFsb2coU3RyaW5nIHRpdGxlLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHNob3dQcm9ibGVtc1ZpZXcoKTsKLSAgICBNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBPcGVuIGFuIHdhcm5pbmcgZGlhbG9nIHdpdGggdGhlIGdpdmVuIHRpdGxlIGFuZCBtZXNzYWdlLiBTaG93IHRoZSBwcm9ibGVtcyB2aWV3Ci0gICAqIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHZpc2libGUuCi0gICAqIAotICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSB3YXJuaW5nIGRpYWxvZy4KLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgaW4gdGhlIHdhcm5pbmcgZGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgb3Blbldhcm5pbmdEaWFsb2coU3RyaW5nIHRpdGxlLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHNob3dQcm9ibGVtc1ZpZXcoKTsKLSAgICBNZXNzYWdlRGlhbG9nLm9wZW5XYXJuaW5nKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE9wZW4gYSB2YWxpZCBkaWFsb2cgd2l0aCB0aGUgZ2l2ZW4gdGl0bGUgYW5kIG1lc3NhZ2UuIAotICAgKiAKLSAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgdmFsaWQgZGlhbG9nLgotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBpbiB0aGUgdmFsaWQgZGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgb3BlblZhbGlkRGlhbG9nKFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTaG93IHRoZSBwcm9ibGVtcyB2aWV3IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHZpc2libGUuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzaG93UHJvYmxlbXNWaWV3KCkKLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgZHcgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBkdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHBhZ2Uuc2hvd1ZpZXcoSVBhZ2VMYXlvdXQuSURfUFJPQkxFTV9WSUVXKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotICAgIH0KLSAgICBwYWdlLmFjdGl2YXRlKGFjdGl2ZVBhcnQpOwotICB9Ci0gIAotICAvKioKLSAgICogRm9ybWF0IGEgZmlsZSBuYW1lIGludG8gYSBjb3JyZWN0IFVSSS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZSBuYW1lIHRvIGZvcm1hdC4KLSAgICogQHJldHVybiBUaGUgZm9ybWF0dGVkIFVSSS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY3JlYXRlVVJJRm9yRmlsZVBhdGgoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0gIAlpZighZmlsZW5hbWUuc3RhcnRzV2l0aChGSUxFX1BST1RPQ09MX05PX1NMQVNIKSkKLSAgICB7Ci0gICAgICB3aGlsZShmaWxlbmFtZS5zdGFydHNXaXRoKCIvIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMSk7Ci0gICAgICB9Ci0gICAgICBmaWxlbmFtZSA9IEZJTEVfUFJPVE9DT0wgKyBmaWxlbmFtZTsKLSAgICB9Ci0gIAlyZXR1cm4gZmlsZW5hbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGUgdmFsaWRhdGlvbiBvdXRjb21lIGNsYXNzIGhvbGRzIHRoZSByZXN1bHRzIGZyb20gdmFsaWRhdGluZwotICAgKiBhIGZpbGUuCi0gICAqIAotICAgKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgVmFsaWRhdGlvbk91dGNvbWUKLSAgewotICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQgPSB0cnVlOwotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzTWVzc2FnZXMgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBWYWxpZGF0aW9uT3V0Y29tZSgpCi0gICAgewotICAgIH0KLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9XU0lWYWxpZGF0ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZhYWI4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9XU0lWYWxpZGF0ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuSU1lc3NhZ2VBY2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5NZXNzYWdlTGltaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5NZXNzYWdlQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5XU0lBbmFseXplckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LkFzc2VydGlvbkVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBY3Rpb24gZm9yIHJ1bm5pbmcgdGhlIHZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgV1NJVmFsaWRhdGVBY3Rpb24gZXh0ZW5kcyBWYWxpZGF0ZUFjdGlvbgotewotICBwcm90ZWN0ZWQgSVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxmaWxlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBlbGVtZW50bmFtZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBwYXJlbnRuYW1lID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlID0gbnVsbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gd3NkbHNwZWNpZmllZCA9IGZhbHNlOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGNlcHRpb25DYXVnaHQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gZiBUaGUgZmlsZSB0byB2YWxpZGF0ZQotICAgKiBAcGFyYW0gc2hvd0RpYWxvZyBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgc3RhdHVzIGRpYWxvZyBhZnRlciB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIFdTSVZhbGlkYXRlQWN0aW9uKElGaWxlIGYsIGJvb2xlYW4gc2hvd0RpYWxvZykKLSAgewotICAJc3VwZXIoZiwgc2hvd0RpYWxvZyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciB3aXRoIFdTREwgZWxlbWVudCBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZiBUaGUgZmlsZSB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHNob3dEaWFsb2cgV2hldGhlciBvciBub3QgdG8gc2hvdyBhIHN0YXR1cyBkaWFsb2cgYWZ0ZXIgdmFsaWRhdGlvbi4KLSAgICogQHBhcmFtIGZpbGUgVGhlIFdTREwgZmlsZSB0byB1c2UgZm9yIHZhbGlkYXRpb24uCi0gICAqIEBwYXJhbSBlbGVtZW50bmFtZSBUaGUgbmFtZSBvZiB0aGUgV1NETCBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIFdTREwgZWxlbWVudCB0byB2YWxpZGF0ZQotICAgKiBAcGFyYW0gcGFyZW50bmFtZSBUaGUgcGFyZW50IG5hbWUgb2YgdGhlIFdTREwgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICovCi0gIHB1YmxpYyBXU0lWYWxpZGF0ZUFjdGlvbihJRmlsZSBmLCBib29sZWFuIHNob3dEaWFsb2csIFN0cmluZyBmaWxlLCBTdHJpbmcgZWxlbWVudG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBwYXJlbnRuYW1lLCBTdHJpbmcgdHlwZSkKLSAgewotICAJdGhpcyhmLCBzaG93RGlhbG9nKTsKLSAgCWlmIChmaWxlICE9IG51bGwpCi0gIAl7Ci0gIAkgIHdzZGxmaWxlID0gZmlsZS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0gIAkgIGlmICgoIXdzZGxmaWxlLnN0YXJ0c1dpdGgoV1NJQ29uc3RhbnRzLkZJTEVfUFJFRklYKSkgJiYgCi0gIAkJICAoIXdzZGxmaWxlLnN0YXJ0c1dpdGgoV1NJQ29uc3RhbnRzLkhUVFBfUFJFRklYKSkpCi0gICAgICB7Ci0gIAkgICAgd3NkbGZpbGUgPSBXU0lDb25zdGFudHMuRklMRV9QUk9UT0NPTCArIHdzZGxmaWxlOyAgCi0gIAkgIH0KLSAgCX0KLSAgCXRoaXMuZWxlbWVudG5hbWUgPSBlbGVtZW50bmFtZTsKLSAgCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAJdGhpcy5wYXJlbnRuYW1lID0gcGFyZW50bmFtZTsKLSAgCXRoaXMudHlwZSA9IHR5cGU7Ci0gIAl0aGlzLndzZGxzcGVjaWZpZWQgPSB0cnVlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnZhbGlkYXRlLlZhbGlkYXRlQWN0aW9uI3ZhbGlkYXRlKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGUoZmluYWwgSUZpbGUgZmlsZTEpCi0gIHsKLSAgCWZpbmFsIE1lc3NhZ2VBbmFseXplciBtZXNzYWdlYW5hbHl6ZXI7Ci0gIAkKLSAgCWlmKHdzZGxzcGVjaWZpZWQpCi0gIAl7Ci0gIAkgIG1lc3NhZ2VhbmFseXplciA9IG5ldyBNZXNzYWdlQW5hbHl6ZXIoV1NJQ29uc3RhbnRzLkZJTEVfUFJPVE9DT0wgKyBmaWxlMS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCksIHdzZGxmaWxlLCBlbGVtZW50bmFtZSwgbmFtZXNwYWNlLCBwYXJlbnRuYW1lLCB0eXBlKTsJCi0gIAl9Ci0gIAllbHNlCi0gIAl7CQotICAJICBtZXNzYWdlYW5hbHl6ZXIgPSBuZXcgTWVzc2FnZUFuYWx5emVyKFdTSUNvbnN0YW50cy5GSUxFX1BST1RPQ09MICsgZmlsZTEuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsKLSAgCX0KLSAgCQotICAJSVdvcmtzcGFjZVJ1bm5hYmxlIG9wID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIAotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gCi0gICAgICB7ICAgICAgICAKLSAgICAgICAgY2xlYXJNYXJrZXJzKGZpbGUxKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChXU0lBbmFseXplckV4Y2VwdGlvbiBhZSkKLSAgICAgICAgewotICAgICAgICAJZXhjZXB0aW9uQ2F1Z2h0ID0gdHJ1ZTsKLSAgICAgICAgCWlmIChhZS5nZXRUYXJnZXRFeGNlcHRpb24oKSBpbnN0YW5jZW9mIFNBWFBhcnNlRXhjZXB0aW9uKQotICAgICAgICAJewotICAgICAgICAJICBjcmVhdGVNYXJrZXJzKGZpbGUxLCBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VbXXtjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbigoU0FYUGFyc2VFeGNlcHRpb24pYWUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCksIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwpfSk7Ci0gICAgICAgIAl9Ci0gICAgICAgIAllbHNlCi0gICAgICAgIAl7Ci0gICAgICAgICAJICBjcmVhdGVNYXJrZXJzKGZpbGUxLCBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VbXXtjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihhZSwgVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX05PUk1BTCl9KTsKLSAgICAgICAgCX0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGNyZWF0ZU1hcmtlcnMoZmlsZTEsIGNvbnZlcnRWYWxpZGF0aW9uTWVzc2FnZXMobWVzc2FnZWFuYWx5emVyLmdldEFzc2VydGlvbldhcm5pbmdzKCksIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1cpKTsKLSAgICAgICAgY3JlYXRlTWFya2VycyhmaWxlMSwgY29udmVydFZhbGlkYXRpb25NZXNzYWdlcyhtZXNzYWdlYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwpKTsKLSAgICAgICAgZmlsZS5zZXRTZXNzaW9uUHJvcGVydHkoVmFsaWRhdGlvbk1lc3NhZ2UuRVJST1JfTUVTU0FHRV9NQVBfUVVBTElGSUVEX05BTUUsIGdldE9yQ3JlYXRlUmVwb3J0ZXIoKS5nZXRNZXNzYWdlcygpKTsKLQkJfQotICAgIH07Ci0gICAKLSAgICAKLSAgICAgdHJ5Ci0gICAgewotICAgICAgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihvcCwgbnVsbCk7Ci0gICAgIGlmIChzaG93RGlhbG9nKQotICAgICAgewotICAgICAgICBpZiAoZXhjZXB0aW9uQ2F1Z2h0KQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgCi0gICAgICAgICAgCQlNZXNzYWdlcy5FUlJPUl9VTkFCTEVfVE9fVkFMSURBVEUsIAotICAgICAgICAgIAkJTWVzc2FnZXMuRVJST1JfUFJPQkxFTVNfUkVBRElOR19XU0lNU0dfRklMRSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobWVzc2FnZWFuYWx5emVyLmdldEFzc2VydGlvbkVycm9ycygpLnNpemUoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgCi0gICAgICAgICAgCQlNZXNzYWdlcy5FUlJPUl9WQUxJREFUSU9OX0ZBSUxFRCwgCi0gICAgICAgICAgCQlNZXNzYWdlcy5FUlJPUl9USEVfV1NJTVNHX0ZJTEVfSVNfTk9UX1ZBTElEKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtZXNzYWdlYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKS5zaXplKCkgIT0gMCkKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgU3RyaW5nIHRpdGxlID0gTWVzc2FnZXMuSU5GT19WQUxJREFUSU9OX1NVQ0VFREVEOwotICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gTWVzc2FnZXMuV0FSTklOR19WQUxJREFUSU9OX1dBUk5JTkdTX0RFVEVDVEVEOwotICAgICAgICAgIE1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBNZXNzYWdlcy5JTkZPX1ZBTElEQVRJT05fU1VDRUVERUQ7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBNZXNzYWdlcy5JTkZPX1RIRV9XU0lNU0dfRklMRV9JU19WQUxJRDsKLSAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpe30KLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBmcm9tIHRoZSBleGNlcHRpb24gYW5kIHNldmVyaXR5LgotICAgKiAKLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvci4KLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eS4KLSAgICogQHJldHVybiBBbiBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25NZXNzYWdlIGNyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKFNBWFBhcnNlRXhjZXB0aW9uIGVycm9yLCBpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICBTdHJpbmcgdXJpID0gZXJyb3IuZ2V0U3lzdGVtSWQoKTsKLSAgICBpZih1cmkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmkgPSBlcnJvci5nZXRQdWJsaWNJZCgpOwotICAgIH0KLSAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZShlcnJvci5nZXRNZXNzYWdlKCksIGVycm9yLmdldExpbmVOdW1iZXIoKSwgZXJyb3IuZ2V0Q29sdW1uTnVtYmVyKCksIHVyaSk7Ci0gICAgdmFsaWRhdGlvbk1lc3NhZ2Uuc2V0U2V2ZXJpdHkoc2V2ZXJpdHkpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBmcm9tIHRoZSBleGNlcHRpb24gYW5kIHNldmVyaXR5LgotICAgKiAKLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvci4KLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eS4KLSAgICogQHJldHVybiBBbiBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25NZXNzYWdlIGNyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKFdTSUFuYWx5emVyRXhjZXB0aW9uIGVycm9yLCBpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZShlcnJvci5nZXRNZXNzYWdlKCksIDAsIDApOwotICAgIHZhbGlkYXRpb25NZXNzYWdlLnNldFNldmVyaXR5KHNldmVyaXR5KTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2U7Ci0gIH0KLSAKLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlW10gIGNvbnZlcnRWYWxpZGF0aW9uTWVzc2FnZXMoTGlzdCBsaXN0LCBpbnQgbWFya2VyKQotICB7Ci0JaWYgKGxpc3QgIT0gbnVsbCkKLQl7Ci0JICBpbnQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwotCSAgVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcyA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZVtzaXplXTsKLQkgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQXNzZXJ0aW9uRXJyb3IgYXNzZXJ0aW9uRXJyb3IgPSAoQXNzZXJ0aW9uRXJyb3IpIGxpc3QuZ2V0KGkpOwotCi0gICAgICAgIGludCBuID0gYXNzZXJ0aW9uRXJyb3IuZ2V0TGluZSgpOwotICAgICAgICBpbnQgYyA9IGFzc2VydGlvbkVycm9yLmdldENvbHVtbigpOwotICAgICAgICBTdHJpbmcgbSA9IFdTSUNvbnN0YW50cy5XU0lfUFJFRklYICsgIigiICsgYXNzZXJ0aW9uRXJyb3IuZ2V0QXNzZXJ0aW9uSUQoKSsgIikgIiArIGFzc2VydGlvbkVycm9yLmdldEVycm9yTWVzc2FnZSgpOwotICAgICAgCi0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UobSxuLCBjKTsKLSAgICAgICAgbWVzc2FnZS5zZXRTZXZlcml0eShtYXJrZXIpOwotICAgICAgICBtZXNzYWdlc1tpXSA9IG1lc3NhZ2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWVzc2FnZXM7Ci0gICAgfQotCXJldHVybiBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VbMF07Ci0gIH0KLQotIC8qKgotICBwcm90ZWN0ZWQgSVJlcG9ydGVyIGdldE9yQ3JlYXRlUmVwb3J0ZXIoKQotICB7Ci0gICAgaWYgKHJlcG9ydGVyID09IG51bGwpCi0gICAgeyAKLSAgICAgIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyKCk7Ci0gICAgfQotICAgIHJldHVybiByZXBvcnRlcjsKLSAgfQotICAqLwotICAvLyBNeSBJbXBsZW1lbnRhdGlvbiBvZiBJUmVwb3J0ZXIKLSAgY2xhc3MgUmVwb3J0ZXIgaW1wbGVtZW50cyBJUmVwb3J0ZXIgCi0gIHsKLQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgUmVwb3J0ZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIElNZXNzYWdlQWNjZXNzIGdldE1lc3NhZ2VBY2Nlc3MoKSB7Ci0JCXJldHVybiBudWxsOyAvLyBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGxlZCgpIHsKLQkJcmV0dXJuIGZhbHNlOyAvLyBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbiwgT2JqZWN0IG9iamVjdCkgeyAvLyBkbwotCQkJCQkJCQkJCQkJCQkJCQkJLy8gbm90Ci0JCQkJCQkJCQkJCQkJCQkJCQkvLyBuZWVkCi0JCQkJCQkJCQkJCQkJCQkJCQkvLyB0bwotCQkJCQkJCQkJCQkJCQkJCQkJLy8gaW1wbGVtZW50Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4pIHsvLyBkbyBub3QgbmVlZCB0bwotCQkJCQkJCQkJCQkJCQkvLyBpbXBsZW1lbnQKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVNZXNzYWdlU3Vic2V0KElWYWxpZGF0b3IgdmFsaWRhdG9yLCBPYmplY3Qgb2JqLCBTdHJpbmcgZ3JvdXBOYW1lKSB7Ly8gZG8KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gbm90Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIG5lZWQKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gdG8KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gaW1wbGVtZW50Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKSB7Ci0JCXJldHVybiBsaXN0OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoSVZhbGlkYXRvciBvcmlnaW4sIElNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBNZXNzYWdlTGltaXRFeGNlcHRpb24gCi0JewotCQlsaXN0LmFkZChtZXNzYWdlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwbGF5U3VidGFzayhJVmFsaWRhdG9yIHZhbGlkYXRvciwgSU1lc3NhZ2UgbWVzc2FnZSkgCi0JewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQotCX0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGlvblVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1dTSVZhbGlkYXRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMWEyYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGlvblVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogU3RyaW5ncyB1c2VkIGJ5IFhNTCBWYWxpZGF0aW9uCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lWYWxpZGF0aW9uVUlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy53c2l2YWxpZGF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBXU0lWYWxpZGF0aW9uVUlNZXNzYWdlcygpIHsKLQkJLy8gY2Fubm90IGNyZWF0ZSBuZXcgaW5zdGFuY2UKLQl9Ci0KLQlzdGF0aWMgewotCQkvLyBpbml0aWFsaXplIHJlc291cmNlIGJ1bmRsZQotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU0lWYWxpZGF0aW9uVUlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TQVZFX0RJUlRZX0ZJTEVfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU0FWRV9ESVJUWV9GSUxFX1RJVExFOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1JlcXVlc3RIYW5kbGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1JlcXVlc3RIYW5kbGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjVmNjA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9SZXF1ZXN0SGFuZGxlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyOwotCi0vKioKLSAqIEltcGxlbWVudHMgdGhlIFJlcXVlc3RIYW5kbGVyIGludGVyZmFjZSB3aGljaCByZXByZXNlbnRzIGEgVENQL0lQCi0gKiByZXF1ZXN0IG1hZGUgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLiBFYWNoIHJlcXVlc3QgCi0gKiByZXByZXNlbnRzIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLCB3aGVyZSB0aGUgcmVxdWVzdCBpcyBmcm9tIAotICogY2xpZW50IC0+IHNlcnZlciwgYW5kIHRoZSByZXNwb25zZSBpcyBmcm9tIHNlcnZlciAtPiBjbGllbnQuCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgUmVxdWVzdEhhbmRsZXJJbXBsIGltcGxlbWVudHMgUmVxdWVzdEhhbmRsZXIgCi17Ci0JLyoqCi0JICogVGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqLwotCXByb3RlY3RlZCBieXRlW10gcmVxdWVzdEhlYWRlcjsKLQkKLQkvKioKLQkgKiBUaGUgSFRUUCBoZWFkZXIgb2YgdGhlIHJlc3BvbnNlIHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqLwotCXByb3RlY3RlZCBieXRlW10gcmVzcG9uc2VIZWFkZXI7Ci0KLQkvKioKLQkgKiBUaGUgSFRUUCBib2R5IG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqLwotCXByb3RlY3RlZCBieXRlW10gcmVxdWVzdENvbnRlbnQ7Ci0KLQkvKioKLQkgKiBUaGUgSFRUUCBib2R5IG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwcm90ZWN0ZWQgYnl0ZVtdIHJlc3BvbnNlQ29udGVudDsKLQotCS8qKgotCSAqIFRoZSB0aW1lIHRoaXMgcmVxdWVzdCB3YXMgbWFkZS4KLQkgKi8KLQlwcm90ZWN0ZWQgRGF0ZSBkYXRlID0gbnVsbDsKLQkKLQkvKioKLQkgKiBUaGUgbG9jYWwgKGNsaWVudCkgcG9ydC4KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGxvY2FsUG9ydCA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgcmVtb3RlIChzZXJ2ZXIpIHBvcnQuCi0JICovCi0JcHJvdGVjdGVkIGludCByZW1vdGVQb3J0ID0gMDsKLQkKLQkvKioKLQkgKiBUaGUgcmVtb3RlIChzZXJ2ZXIpIGhvc3QuCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyByZW1vdGVIb3N0ID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBzZXJ2ZXIncyByZXNwb25zZSB0aW1lIGluIG1pbGxpc2Vjb25kcy4gCi0JICovCi0JcHJvdGVjdGVkIGxvbmcgcmVzcG9uc2VUaW1lID0gMDsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiBAcGFyYW0gcmVxdWVzdCBhIFRDUC9JUCByZXF1ZXN0Ci0JICovCi0JUmVxdWVzdEhhbmRsZXJJbXBsKFJlcXVlc3QgcmVxdWVzdCkKLQl7Ci0JICBpZiAocmVxdWVzdCAhPSBudWxsKQotCSAgewotCQl0aGlzLnJlcXVlc3RIZWFkZXIgPSByZXF1ZXN0LmdldFJlcXVlc3QoUmVxdWVzdC5UUkFOU1BPUlQpOwotCQl0aGlzLnJlcXVlc3RDb250ZW50ID0gcmVxdWVzdC5nZXRSZXF1ZXN0KFJlcXVlc3QuQ09OVEVOVCk7Ci0JCXRoaXMucmVzcG9uc2VIZWFkZXIgPSByZXF1ZXN0LmdldFJlc3BvbnNlKFJlcXVlc3QuVFJBTlNQT1JUKTsKLQkJdGhpcy5yZXNwb25zZUNvbnRlbnQgPSByZXF1ZXN0LmdldFJlc3BvbnNlKFJlcXVlc3QuQ09OVEVOVCk7Ci0JCXRoaXMuZGF0ZSA9IHJlcXVlc3QuZ2V0RGF0ZSgpOwotCQl0aGlzLmxvY2FsUG9ydCA9IHJlcXVlc3QuZ2V0TG9jYWxQb3J0KCk7Ci0JCXRoaXMucmVtb3RlUG9ydCA9IHJlcXVlc3QuZ2V0UmVtb3RlUG9ydCgpOwotCQl0aGlzLnJlbW90ZUhvc3QgPSByZXF1ZXN0LmdldFJlbW90ZUhvc3QoKTsKLQkJdGhpcy5yZXNwb25zZVRpbWUgPSByZXF1ZXN0LmdldFJlc3BvbnNlVGltZSgpOwotCSAgfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlcXVlc3RIZWFkZXIoKQotCSAqLwotCXB1YmxpYyBieXRlW10gZ2V0UmVxdWVzdEhlYWRlcigpIAotCXsKLQkJcmV0dXJuIHRoaXMucmVxdWVzdEhlYWRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlcXVlc3RIZWFkZXIoYnl0ZVtdKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlcXVlc3RIZWFkZXIoYnl0ZVtdIHJlcXVlc3RIZWFkZXIpIAotCXsKLQkJdGhpcy5yZXF1ZXN0SGVhZGVyID0gcmVxdWVzdEhlYWRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlc3BvbnNlSGVhZGVyKCkKLQkgKi8KLQlwdWJsaWMgYnl0ZVtdIGdldFJlc3BvbnNlSGVhZGVyKCkgCi0JewotCQlyZXR1cm4gdGhpcy5yZXNwb25zZUhlYWRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlc3BvbnNlSGVhZGVyKGJ5dGVbXSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXNwb25zZUhlYWRlcihieXRlW10gcmVzcG9uc2VIZWFkZXIpIAotCXsKLQkJdGhpcy5yZXNwb25zZUhlYWRlciA9IHJlc3BvbnNlSGVhZGVyOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVxdWVzdENvbnRlbnQoKQotCSAqLwotCXB1YmxpYyBieXRlW10gZ2V0UmVxdWVzdENvbnRlbnQoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlcXVlc3RDb250ZW50OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0UmVzcG9uc2VDb250ZW50KGJ5dGVbXSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXNwb25zZUNvbnRlbnQoYnl0ZVtdIHJlc3BvbnNlQ29udGVudCkgCi0JewotCQl0aGlzLnJlc3BvbnNlQ29udGVudCA9IHJlc3BvbnNlQ29udGVudDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlc3BvbnNlQ29udGVudCgpCi0JICovCi0JcHVibGljIGJ5dGVbXSBnZXRSZXNwb25zZUNvbnRlbnQoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlc3BvbnNlQ29udGVudDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlcXVlc3RDb250ZW50KGJ5dGVbXSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXF1ZXN0Q29udGVudChieXRlW10gcmVxdWVzdENvbnRlbnQpIAotCXsKLQkJdGhpcy5yZXF1ZXN0Q29udGVudCA9IHJlcXVlc3RDb250ZW50OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0RGF0ZSgpCi0JICovCi0JcHVibGljIERhdGUgZ2V0RGF0ZSgpIAotCXsKLQkJcmV0dXJuIHRoaXMuZGF0ZTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldERhdGUoamF2YS51dGlsLkRhdGUpCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGF0ZShEYXRlIGRhdGUpIAotCXsKLQkJdGhpcy5kYXRlID0gZGF0ZTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldExvY2FsUG9ydCgpCi0JICovCi0JcHVibGljIGludCBnZXRMb2NhbFBvcnQoKSAKLQl7Ci0JCXJldHVybiB0aGlzLmxvY2FsUG9ydDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldExvY2FsUG9ydChpbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0TG9jYWxQb3J0KGludCBsb2NhbFBvcnQpIAotCXsKLQkJdGhpcy5sb2NhbFBvcnQgPSBsb2NhbFBvcnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZW1vdGVQb3J0KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldFJlbW90ZVBvcnQoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlbW90ZVBvcnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZW1vdGVQb3J0KGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZW1vdGVQb3J0KGludCByZW1vdGVQb3J0KSAKLQl7Ci0JCXRoaXMucmVtb3RlUG9ydCA9IHJlbW90ZVBvcnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZW1vdGVIb3N0KCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFJlbW90ZUhvc3QoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlbW90ZUhvc3Q7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZW1vdGVIb3N0KGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVtb3RlSG9zdChTdHJpbmcgcmVtb3RlSG9zdCkgCi0JewotCQl0aGlzLnJlbW90ZUhvc3QgPSByZW1vdGVIb3N0OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVzcG9uc2VUaW1lKCkKLQkgKi8KLQlwdWJsaWMgbG9uZyBnZXRSZXNwb25zZVRpbWUoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlc3BvbnNlVGltZTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlc3BvbnNlVGltZShsb25nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlc3BvbnNlVGltZShsb25nIHJlc3BvbnNlVGltZSkgCi0JewotCQl0aGlzLnJlc3BvbnNlVGltZSA9IHJlc3BvbnNlVGltZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9WYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzQxMGU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9WYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuV1NJVmFsaWRhdGVBY3Rpb247Ci0KLQotLyoqCi0gKiBBY3Rpb24gZGVsZWdhdGUgZm9yIHZhbGlkYXRpbmcgYSBXUy1JIGxvZyBmaWxlLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIElBY3Rpb25EZWxlZ2F0ZQotewotICAvKioKLSAgICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbi4KLSAgICovCi0gIElTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCAgb2JqID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICAgIHsKLSAgICAgICAgICBJRmlsZSBmaWxlID0gKElGaWxlKW9iajsKLSAgICAgICAgICBXU0lNZXNzYWdlVmFsaWRhdG9yIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgV1NJTWVzc2FnZVZhbGlkYXRvcigpOwotICAgICAgICAgIFdTSVZhbGlkYXRlQWN0aW9uIHZhbGlkYXRlQWN0aW9uID0gbmV3IFdTSVZhbGlkYXRlQWN0aW9uKGZpbGUsIHRydWUpOwotICAgICAgICAgIHZhbGlkYXRlQWN0aW9uLnNldFZhbGlkYXRvcihtZXNzYWdlVmFsaWRhdG9yKTsKLSAgICAgICAgICB2YWxpZGF0ZUFjdGlvbi5ydW4oKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1ZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiYWU1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5Nb25pdG9yVUlDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC53aXphcmRzLlZhbGlkYXRpb25XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld0FjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkNvbnRhaW5lckdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLQotLyoqCi0gKiBBY3Rpb24gZGVsZWdhdGUgZm9yIHRoZSBXUy1JIHZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJVmlld0FjdGlvbkRlbGVnYXRlCi17Ci0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGVuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0dfRklMRU5BTUUgPSAibG9nLndzaW1zZyI7Ci0KLSAgLyoqCi0gICAqIFRoZSBIVFRQIHByb3RvY29sLgotICAgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUCA9ICJodHRwOi8vIjsKLSAgCi0gIAotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdGFnIGZvciBXU0RMIGxvY2F0aW9ucy4KLSAgICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTREwgPSAiP1dTREwiOwotICAKLSAgLyoqCi0gICAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCi0gICAqLwotICBJU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQotICAvKioKLSAgICogVGhlIGxpc3Qgb2YgbWVzc2FnZXMgaW4gdGhlIGZvcm0gb2YgcmVxdWVzdC1yZXNwb25zZSBwYWlycy4KLSAgICovCi0gIFJlcXVlc3RbXSByZXF1ZXN0UmVzcG9uc2VzOwotCi0gIC8qKgotICAgKiBUaGUgdmlldyB0aGF0IHByb3ZpZGVzIHRoZSBjb250ZXh0IGZvciB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgSVZpZXdQYXJ0IHZpZXc7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdBY3Rpb25EZWxlZ2F0ZSNpbml0KG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVZpZXdQYXJ0IHZpZXcpCi0gIHsKLSAgICB0aGlzLnZpZXcgPSB2aWV3OwotICB9Ci0KLSAgLyoqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikKLSAgICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlKHByb2dyZXNzTW9uaXRvcik7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBvcGVyYXRpb24ucnVuKG51bGwpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgdmFsaWRhdGUgYWN0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXF1ZXN0UmVzcG9uc2VzID0gTW9uaXRvclVJQ29yZS5nZXRSZXF1ZXN0cygpOwotICAgICAgU2hlbGwgc2hlbGwgPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpOwotICAgICAgaWYgKChyZXF1ZXN0UmVzcG9uc2VzICE9IG51bGwpICYmIChyZXF1ZXN0UmVzcG9uc2VzLmxlbmd0aCA+IDApKQotICAgICAgewotICAgICAgICBWYWxpZGF0aW9uV2l6YXJkIHZhbGlkYXRlV2l6YXJkID0gbmV3IFZhbGlkYXRpb25XaXphcmQoREVGQVVMVF9MT0dfRklMRU5BTUUpOwotICAgICAgICBMaXN0IHdzZGxsb2NzID0gbmV3IFZlY3RvcigpOwotCi0gICAgICAgCWZvciAoaW50IGk9MDsgaTxyZXF1ZXN0UmVzcG9uc2VzLmxlbmd0aDsgaSsrKQotICAgICAgCXsKLSAgICAgIAkgIFJlcXVlc3QgcmVxcmVzcCA9IHJlcXVlc3RSZXNwb25zZXNbaV07Ci0gICAgICAJICBTdHJpbmcgcmVtb3RlaG9zdCA9IHJlcXJlc3AuZ2V0UmVtb3RlSG9zdCgpOwotICAgICAgCSAgaW50IHJlbW90ZXBvcnQgPSByZXFyZXNwLmdldFJlbW90ZVBvcnQoKTsKLSAgICAgIAkgIFN0cmluZyByZW1vdGVsYWJlbCA9IHJlcXJlc3AuZ2V0TmFtZSgpOwotICAgICAgCSAgU3RyaW5nIGxvY2F0aW9uID0gSFRUUCArIHJlbW90ZWhvc3QgKyAiOiIgKyByZW1vdGVwb3J0ICsgcmVtb3RlbGFiZWwgKyBXU0RMOwotICAgICAgCSAgaWYoIXdzZGxsb2NzLmNvbnRhaW5zKGxvY2F0aW9uKSkKLSAgICAgIAkgIHsKLSAgICAgIAkgICAgd3NkbGxvY3MuYWRkKGxvY2F0aW9uKTsKLSAgICAgIAkgIH0KLSAgICAgIAl9Ci0gICAgICAKLSAgICAgICAgdmFsaWRhdGVXaXphcmQuc2V0V1NETExvY2F0aW9ucygoU3RyaW5nW10pd3NkbGxvY3MudG9BcnJheShuZXcgU3RyaW5nW3dzZGxsb2NzLnNpemUoKV0pKTsKLSAgICAgICAgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coc2hlbGwsIHZhbGlkYXRlV2l6YXJkKTsKLSAgICAgICAgd2l6YXJkRGlhbG9nLmNyZWF0ZSgpOwotCi0gICAgICAgIGludCByZXN1bHQgPSB3aXphcmREaWFsb2cub3BlbigpOwotCi0gICAgICAgIGlmICh2YWxpZGF0ZVdpemFyZC5pc1ZhbGlkKCkgJiYgKHJlc3VsdCAhPSBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93LkNBTkNFTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiB0aGUgY29udGFpbmVyIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdCBub3cKLSAgICAgICAgICBjaGVja0FuZENyZWF0ZUNvbnRhaW5lcih2YWxpZGF0ZVdpemFyZC5nZXRDb250YWluZXJGdWxsUGF0aCgpKTsKLQotICAgICAgICAgIElGaWxlIGZpbGUgPSB2YWxpZGF0ZVdpemFyZC5nZXRGaWxlKCk7Ci0gICAgICAgICAgTG9nQnVpbGRlciBidWlsZGVyID0gbmV3IExvZ0J1aWxkZXIoZmlsZSk7Ci0gICAgICAgICAgTG9nIGxvZyA9IGJ1aWxkZXIuYnVpbGRMb2coZ2V0UmVxdWVzdEhhbmRsZXJzKHJlcXVlc3RSZXNwb25zZXMpKTsKLQotICAgICAgICAgIGJ1aWxkZXIud3JpdGVMb2cobG9nKTsKLSAgICAgICAgICBmaWxlLnJlZnJlc2hMb2NhbCgxLCBwcm9ncmVzc01vbml0b3IpOwotICAgICAgICAKLSAgICAgICAgICBXU0lWYWxpZGF0b3IgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBXU0lWYWxpZGF0b3IoKTsKLSAgICAgICAgICBpZih2YWxpZGF0ZVdpemFyZC5pbmNsdWRlV1NETEZpbGUoKSkKLSAgICAgICAgICB7CQotICAgICAgICAJU3RyaW5nIHdzZGxmaWxlID0gdmFsaWRhdGVXaXphcmQuZ2V0V1NETEZpbGUoKTsKLSAgICAgICAgCVN0cmluZyBuYW1lID0gdmFsaWRhdGVXaXphcmQuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICAgICAgCVN0cmluZyBuYW1lc3BhY2UgPSB2YWxpZGF0ZVdpemFyZC5nZXROYW1lc3BhY2UoKTsKLSAgICAgICAgCVN0cmluZyBwYXJlbnRuYW1lID0gdmFsaWRhdGVXaXphcmQuZ2V0UGFyZW50TmFtZSgpOwotICAgICAgICAJU3RyaW5nIHR5cGUgPSB2YWxpZGF0ZVdpemFyZC5nZXRUeXBlKCk7Ci0gICAgICAgIAltZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlKGZpbGUsIHdzZGxmaWxlLCBuYW1lLCBuYW1lc3BhY2UsIHBhcmVudG5hbWUsIHR5cGUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewkKLSAgICAgICAgCW1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGUoZmlsZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIGF2YWlsYWJsZSBtZXNzYWdlcyB0byB2YWxpZGF0ZQotICAgIAkgIFN0cmluZyB0aXRsZSA9IE1lc3NhZ2VzLkFDVElPTl9XU0lfVkFMSURBVE9SOwotICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gTWVzc2FnZXMuSU5GT19OT19NRVNTQUdFU19UT19WQUxJREFURTsKLSAgICAJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oc2hlbGwsIHRpdGxlLCBtZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldFJlcXVlc3RIYW5kbGVycyhSZXF1ZXN0W10gcmVxdWVzdFJlc3BvbnNlcykgCi0gIHsKLQlMaXN0IHJlcXVlc3RIYW5kbGVycyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgc2l6ZSA9IHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoOwotCWZvciAoaW50IGkgPSAwOyBpPHNpemU7IGkrKykKLQl7Ci0JICBSZXF1ZXN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzcG9uc2VzW2ldOwotCSAgUmVxdWVzdEhhbmRsZXIgaGFuZGxlciA9IG5ldyBSZXF1ZXN0SGFuZGxlckltcGwocmVxdWVzdCk7Ci0JICByZXF1ZXN0SGFuZGxlcnMuYWRkKGhhbmRsZXIpOwotCX0KLQlyZXR1cm4gcmVxdWVzdEhhbmRsZXJzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24sIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gIH0KLSAKLSAgLyoqCi0gICAqIElmIHRoZSBjb250YWluZXIgZG9lc24ndCBleGlzdCBmb3IgdGhlIHNlbGVjdGVkIElGaWxlLCBjcmVhdGUgaXQgbm93LgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRhaW5lclBhdGggVGhlIGNvbnRhaW5lciBmb3IgdGhlIHNlbGVjdGVkIElGaWxlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrQW5kQ3JlYXRlQ29udGFpbmVyKElQYXRoIGNvbnRhaW5lclBhdGgpCi0gIHsKLSAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIoY29udGFpbmVyUGF0aCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIGNvbnRhaW5lciBkb2Vzbid0IGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UsIGNyZWF0ZSBpdC4KLSAgICBpZiAocmVzb3VyY2UgPT0gbnVsbCkgCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIENvbnRhaW5lckdlbmVyYXRvciBnZW5lcmF0b3IgPSBuZXcgQ29udGFpbmVyR2VuZXJhdG9yKGNvbnRhaW5lclBhdGgpOwotICAgICAgICBnZW5lcmF0b3IuZ2VuZXJhdGVDb250YWluZXIobnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvaWNvbnMvd3NpX2xvZ2ZpbGVfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2ljb25zL3dzaV9sb2dmaWxlX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkODVmODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvaWNvbnMvd3NpX2xvZ2ZpbGVfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL3dzaXZhbGlkYXRpb24ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL3dzaXZhbGlkYXRpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRmNzQ0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy93c2l2YWxpZGF0aW9uLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMjIENvbnN0YW50cyBmb3Igc3RyaW5ncyAgCi0KLSMKLSMgRGlydHkgRmlsZSBEaWFsb2cgUmVsYXRlZCBNZXNzYWdlcwotIwotX1VJX1NBVkVfRElSVFlfRklMRV9NRVNTQUdFICAgICAgICAgPSBBbiBvcGVuIGVkaXRvciBjb250YWlucyBjaGFuZ2VzIHRvIHRoaXMgZmlsZSB0aGF0IGhhdmUgbm90IGJlZW4gc2F2ZWQuIERvIHlvdSB3YW50IHRvIHNhdmUgdGhlIGZpbGUgYmVmb3JlIHJ1bm5pbmcgdmFsaWRhdGlvbj8gKElmIHlvdSBkbyBub3Qgc2F2ZSB0aGUgZmlsZSB0aGUgcHJldmlvdXNseSBzYXZlZCB2ZXJzaW9uIHdpbGwgYmUgdmFsaWRhdGVkLikKLV9VSV9TQVZFX0RJUlRZX0ZJTEVfVElUTEUgICAgICAgICAgID0gU2F2ZSBmaWxlPwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjM4YjlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MubmF2aWdhdG9yLlJlc291cmNlTmF2aWdhdG9yOwotCi0vKioKLSAqIFRoaXMgd2l6YXJkIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgCi0gKiBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUgZm9yIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbldpemFyZCBleHRlbmRzIFdpemFyZAotewotICAvKioKLSAgICogV2l6YXJkIHBhZ2UgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIAotICAgKiBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUgZm9yIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UgbG9nUGFnZTsKLQotICAvKioKLSAgICogV2l6YXJkIHBhZ2UgdG8gb3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBsb2NhdGlvbgotICAgKiBvZiB0aGUgV1NETCBkb2N1bWVudCBmb3IgdGhlIFdlYiBzZXJ2aWNlLgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25XaXphcmRXU0RMUGFnZSB3c2RsUGFnZTsKLQotICAvKioKLSAgICogV2l6YXJkIHBhZ2UgdG8gc3BlY2lmeSB0aGUgbmFtZSwgdHlwZSBhbmQgbmFtZXNwYWNlCi0gICAqIGZvciB0aGUgV1NETCBlbGVtZW50IHRvIGFuYWx5emUuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZSB3c2RsQ29udGVudFBhZ2U7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgV1MtSSBNZXNzYWdlIGZpbGVuYW1lIHBhc3NlZCBpbiB0aGUgQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGVuYW1lOwotCi0gIC8qKgotICAgKiBUaGUgc2VsZWN0ZWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIElGaWxlIGZpbGU7Ci0KLSAgLyoqCi0gICAqIFRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgc2VsZWN0ZWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIElQYXRoIGNvbnRhaW5lckZ1bGxQYXRoOwotCi0gIC8qKgotICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBzZWxlY3RlZCBmaWxlIGlzIHZhbGlkLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZDsKLQotICAvKioKLSAgICogVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnRuYW1lOwotCi0gIC8qKgotICAgKiBUaGUgbmFtZXNwYWNlIG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudG5hbWU7Ci0KLSAgLyoqCi0gICAqIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlOwotCi0gIC8qKgotICAgKiBUaGUgV1NETCBmaWxlIHRvIHVzZSBmb3IgdmFsaWRhdGlvbjsKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbGZpbGU7Ci0KLSAgLyoqCi0gICAqIFRydWUgaWYgYSBXU0RMIGZpbGUgaXMgaW5jbHVkZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGluY2x1ZGV3c2RsZmlsZTsKLQotICAKLSAgLyoqCi0gICAqIFRoaXMgbGlzdCBvZiBXU0RMIGxvY2F0aW9ucyB0aGUgdXNlciBjYW4gY2hvb3NlIGZyb20uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nW10gd3NkbGxvY2F0aW9ucyA9IG51bGw7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBEZWZhdWx0IG1lc3NhZ2UgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uV2l6YXJkKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZTsKLSAgICB0aGlzLnNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLlZBTElEQVRJT05fV0laQVJEX1RJVExFKTsKLSAgICBzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcigKLSAgICAgIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShXU0lVSVBsdWdpbi5jbGFzcywgUmVzb3VyY2UuVkFMSURBVEVfV1NJX0xPR0ZJTEVfV0laKSk7Ci0gICAgc2V0TmVlZHNQcm9ncmVzc01vbml0b3IodHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZCNhZGRQYWdlcygpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYWdlcygpCi0gIHsKLSAgICBsb2dQYWdlID0gbmV3IFZhbGlkYXRpb25XaXphcmRMb2dQYWdlKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0UmVzb3VyY2VOYXZpZ2F0b3JTZWxlY3Rpb24oKSwgZmlsZW5hbWUpOwotICAgIHdzZGxQYWdlID0gbmV3IFZhbGlkYXRpb25XaXphcmRXU0RMUGFnZSgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFJlc291cmNlTmF2aWdhdG9yU2VsZWN0aW9uKCkpOwotICAgIHdzZGxDb250ZW50UGFnZSA9IG5ldyBWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0UmVzb3VyY2VOYXZpZ2F0b3JTZWxlY3Rpb24oKSk7Ci0gICAgYWRkUGFnZShsb2dQYWdlKTsKLSAgICBhZGRQYWdlKHdzZGxQYWdlKTsKLSAgICBhZGRQYWdlKHdzZGxDb250ZW50UGFnZSk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFRydWUgaWYgYSBXU0RMIGZpbGUgaXMgaW5jbHVkZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGluY2x1ZGVXU0RMRmlsZSgpCi0gIHsKLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgewotICAgICAgcmV0dXJuIHdzZGxQYWdlLmluY2x1ZGVXU0RMRmlsZSgpOwotICAgIH0KLSAgICByZXR1cm4gaW5jbHVkZXdzZGxmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZWxlbWVudCBuYW1lIHRvIHZhbGlkYXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZWxlbWVudCBuYW1lIHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETEZpbGUoKQotICB7Ci0gICAgaWYgKCFpc1ZhbGlkKQotICAgIHsKLSAgICAgIHJldHVybiB3c2RsUGFnZS5nZXRXU0RMRmlsZSgpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbGZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZCNnZXROZXh0UGFnZShvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZFBhZ2UpCi0gICAqLwotICBwdWJsaWMgSVdpemFyZFBhZ2UgZ2V0TmV4dFBhZ2UoSVdpemFyZFBhZ2UgY3VycmVudFBhZ2UpCi0gIHsKLSAgICBpZiAoY3VycmVudFBhZ2UgPT0gd3NkbFBhZ2UpCi0gICAgewotICAgICAgaWYgKCF3c2RsUGFnZS5pbmNsdWRlV1NETEZpbGUoKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgV1NETFJlYWRlciByZWFkZXIgPSBmYWN0b3J5Lm5ld1dTRExSZWFkZXIoKTsKLSAgICAgICAgICByZWFkZXIucmVhZFdTREwoZ2V0V1NETEZpbGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIFdTREwgZmlsZSB0aGVyZSBpcyBubyBuZXh0IHBhZ2UuCi0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmdldE5leHRQYWdlKGN1cnJlbnRQYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlbGVjdGVkIGZpbGUgaXMgYSB2YWxpZCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGVuYW1lLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzZWxlY3RlZCBmaWxlIGlzIGEgdmFsaWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlbmFtZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKQotICB7Ci0gICAgcmV0dXJuIGlzVmFsaWQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZCNwZXJmb3JtRmluaXNoKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gICAgZmlsZSA9IGxvZ1BhZ2UuZ2V0RmlsZSgpOwotICAgIGNvbnRhaW5lckZ1bGxQYXRoID0gbG9nUGFnZS5nZXRDb250YWluZXJGdWxsUGF0aCgpOwotICAgIGluY2x1ZGV3c2RsZmlsZSA9IHdzZGxQYWdlLmluY2x1ZGVXU0RMRmlsZSgpOwotICAgIHdzZGxmaWxlID0gd3NkbFBhZ2UuZ2V0V1NETEZpbGUoKTsKLSAgICBlbGVtZW50bmFtZSA9IHdzZGxDb250ZW50UGFnZS5nZXRFbGVtZW50TmFtZSgpOwotICAgIG5hbWVzcGFjZSA9IHdzZGxDb250ZW50UGFnZS5nZXROYW1lc3BhY2UoKTsKLSAgICBwYXJlbnRuYW1lID0gd3NkbENvbnRlbnRQYWdlLmdldFBhcmVudE5hbWUoKTsKLSAgICB0eXBlID0gd3NkbENvbnRlbnRQYWdlLmdldFR5cGUoKTsKLSAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmaWxlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIGluIHRoZSBjaG9vc2UgcGFnZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGZpbGUgc2VsZWN0ZWRieSB0aGUgdXNlciBpbiB0aGUgY2hvb3NlIHBhZ2UuCi0gICAqLwotICBwdWJsaWMgSUZpbGUgZ2V0RmlsZSgpCi0gIHsKLSAgICByZXR1cm4gZmlsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBJUGF0aCBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBJRmlsZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIElQYXRoIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIElGaWxlLgotICAgKi8KLSAgcHVibGljIElQYXRoIGdldENvbnRhaW5lckZ1bGxQYXRoKCkKLSAgewotICAgIHJldHVybiBjb250YWluZXJGdWxsUGF0aDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gaW4gdGhlIFJlc291cmNlIE5hdmlnYXRvciB2aWV3LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgc2VsZWN0aW9uIGluIHRoZSBSZXNvdXJjZSBOYXZpZ2F0b3Igdmlldy4KLSAgICovCi0gIHB1YmxpYyBJU2VsZWN0aW9uIGdldFJlc291cmNlTmF2aWdhdG9yU2VsZWN0aW9uKCkKLSAgewotICAgIElWaWV3UmVmZXJlbmNlIHZpZXdQYXJ0c1tdID0KLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldFZpZXdSZWZlcmVuY2VzKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpZXdQYXJ0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAodmlld1BhcnRzW2ldIGluc3RhbmNlb2YgUmVzb3VyY2VOYXZpZ2F0b3IpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoKFJlc291cmNlTmF2aWdhdG9yKSB2aWV3UGFydHNbaV0pLmdldFZpZXdTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5nZXRTZWxlY3Rpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBsaXN0IG9mIFdTREwgbG9jYXRpb25zIHRvIGxldCB0aGUgdXNlciBjaG9vc2UgZnJvbS4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsbG9jYXRpb25zIEEgbGlzdCBvZiBXU0RMIGRvY3VtZW50IGxvY2F0aW9ucy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExMb2NhdGlvbnMoU3RyaW5nW10gd3NkbGxvY2F0aW9ucykgCi0gIHsKLQl0aGlzLndzZGxsb2NhdGlvbnMgPSB3c2RsbG9jYXRpb25zOwotCQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBsaXN0IG9mIFdTREwgbG9jYXRpb25zIHRoZSB1c2VyIGNhbiBjaG9vc2UgZnJvbS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgV1NETCBsb2NhdGlvbnMuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0V1NETExvY2F0aW9ucygpCi0gIHsKLSAgCXJldHVybiB3c2RsbG9jYXRpb25zOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkTG9nUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4OGNhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkTG9nUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotLyoqCi0gKiBXaXphcmQgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgCi0gKiBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUgZm9yIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqLwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlCi17Ci0gIC8qKgotICAgKiBSZWNvbW1lbmRlZCBleHRlbnNpb24gZm9yIGEgV1MtSSBNZXNzYWdlIExvZyBmaWxlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NJX0xPR19FWFRFTlNJT04gPSAid3NpbXNnIjsKLSAKLSAgLyoqCi0gICAqIERlZmF1bHQgV1MtSSBNZXNzYWdlIGZpbGVuYW1lIHBhc3NlZCBpbiB0aGUgQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGVuYW1lOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGlvbjogc2VsZWN0aW9uIGluIHRoZSBSZXNvdXJjZSBOYXZpZ2F0b3Igdmlldy4KLSAgICogQHBhcmFtIGZpbGVuYW1lOiBkZWZhdWx0IG1lc3NhZ2UgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uV2l6YXJkTG9nUGFnZShJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sIFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHN1cGVyKCJWYWxpZGF0aW9uV2l6YXJkTG9nUGFnZSIsIHNlbGVjdGlvbik7Ci0gICAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lOwotICAgIHRoaXMuc2V0VGl0bGUoTWVzc2FnZXMuTE9HX1BBR0VfU0VMRUNUX0xPR19GSUxFTkFNRV9IRUFESU5HKTsKLSAgICB0aGlzLnNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLkxPR19QQUdFX1NFTEVDVF9MT0dfRklMRU5BTUVfRVhQTCk7Ci0gIH0KLQotCi0gIC8qKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dQYWdlI2NyZWF0ZUNvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSAKLSAgewotICAgIHN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLSAgICBzdXBlci5zZXRGaWxlTmFtZShmaWxlbmFtZSk7Ci0gICAgc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIGZpbGUuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBzZWxlY3RlZCBJRmlsZS4gIAotICAgKi8KLSAgcHVibGljIElGaWxlIGdldEZpbGUoKQotICB7Ci0gICAgU3RyaW5nIGZpbGVOYW1lID0gZ2V0RmlsZU5hbWUoKTsKLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IChuZXcgUGF0aChmaWxlTmFtZSkpLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgICAKLSAgICBpZiAoZmlsZUV4dGVuc2lvbiA9PSBudWxsKQotICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5jb25jYXQoIi4iICsgV1NJX0xPR19FWFRFTlNJT04pOwotICAgICAgCi0gICAgcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChmaWxlTmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBzZWxlY3RlZCBmaWxlIGlzIGEgdmFsaWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlbmFtZS4KLSAgICogCi0gICAqIFNpbmNlIHRoZSBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGRvZXMgbm90IHByb3ZpZGUgYW4gaW50ZXJmYWNlIHRvCi0gICAqIGFsbG93IHRoZSBmaWxlIHNwZWNpZmllZCB0byBhbHJlYWR5IGV4aXN0IChpdCBnaXZlcyBhbiBlcnJvciB0aGF0IHRoZQotICAgKiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgYW4gbm8gd2F5IG9mIGFsbG93aW5nIGl0IHRvIHBhc3MpLCBhbmQgd2Ugd2FudAotICAgKiB0byBhbGxvdyB0aGUgZmlsZSB0byBleGlzdCwgc28gdGhhdCB3ZSBjYW4gb3ZlcndyaXRlIGl0LCB3ZSBoYXZlIHRvCi0gICAqIG92ZXJyaWRlIHRoaXMgbWV0aG9kLCBhbmQgZG8gc29tZSBtYWdpYyB0byBhbGxvdyB0aGlzIGNhc2UgdG8gcGFzcy4KLSAgICoKLSAgICogQHJldHVybiB0cnVlIGlmIHNlbGVjdGVkIGZpbGUgaXMgYSB2YWxpZCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGVuYW1lLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSN2YWxpZGF0ZVBhZ2UoKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgCi0gIHsKLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IChuZXcgUGF0aChnZXRGaWxlTmFtZSgpKSkuZ2V0RmlsZUV4dGVuc2lvbigpOwotICAgIGlmIChmaWxlRXh0ZW5zaW9uICE9IG51bGwpIAotICAgIHsKLSAgICAgIGlmIChmaWxlRXh0ZW5zaW9uLmNvbXBhcmVUbyhXU0lfTE9HX0VYVEVOU0lPTikgIT0gMCkKLSAgICAgIHsgICAgICAgIAotICAgICAgICBzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuRVJST1JfSU5WQUxJRF9MT0dfRklMRV9FWFRFTlNJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIEVzc2VudGlhbGx5LCB3ZSB0YWtlIHRoZSBjb250YWluZXIgYW5kIGNvbmNhdCB0aGUgZmlsZSB0byBpdCwgYW5kCi0gICAgLy8gY2hlY2sgaWYgaXRzIGluIHRoZSB3b3Jrc3BhY2UsIGlmIGl0IGlzLCB0aGVuIGl0IGV4aXN0cyBhbmQgd2UgY2FuIAotICAgIC8vIHByb2NlZWQuIE90aGVyd2lzZSwgY29udGludWUgd2l0aCB0aGUgZGVmYXVsdCB2YWxpZGF0aW5nLgotICAgIGlmICggKGdldENvbnRhaW5lckZ1bGxQYXRoKCkgIT0gbnVsbCkgJiYgKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuaXNFbXB0eSgpID09IGZhbHNlKQotICAgICAgICAgICAmJiAoZ2V0RmlsZU5hbWUoKS5jb21wYXJlVG8oIiIpICE9IDApKQotICAgIHsKLSAgICAgIFBhdGggZnVsbFBhdGg7Ci0gICAgICAgICAgICAKLSAgICAgIGlmIChmaWxlRXh0ZW5zaW9uICE9IG51bGwpCi0gICAgICAgIGZ1bGxQYXRoID0gbmV3IFBhdGgoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS50b1N0cmluZygpICsgJy8nICsgZ2V0RmlsZU5hbWUoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGZ1bGxQYXRoID0gbmV3IFBhdGgoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS50b1N0cmluZygpICsgJy8nICsgZ2V0RmlsZU5hbWUoKSArICIuIiArIFdTSV9MT0dfRVhURU5TSU9OKTsKLSAgICAgIAotICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKGZ1bGxQYXRoKTsKLSAgICAgIAotICAgICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpCi0gICAgICAgIHNldE1lc3NhZ2UoTWVzc2FnZXMuV0FSTklOR19GSUxFX0FMUkVBRFlfRVhJU1RTKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2V0TWVzc2FnZShudWxsKTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYTA1NzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLQotLyoqCi0gKiBXaXphcmQgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgCi0gKiBXU0RMIGRvY3VtZW50IGZvciB0aGUgV2ViIHNlcnZpY2UuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotewotICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVCA9ICJwb3J0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkcgPSAiYmluZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRUWVBFID0gInBvcnR0eXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRSA9ICJtZXNzYWdlIjsKLSAgLyoqCi0gICAqIEFjY2VzcyB0byB0aGUgaW5jbHVkZVdTREwgZmxhZy4gIAotICAgKi8KLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsUG9ydEJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsQmluZGluZ0J1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsUG9ydFR5cGVCdXR0b247Ci0gIHByb3RlY3RlZCBCdXR0b24gd3NkbE9wZXJhdGlvbkJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsTWVzc2FnZUJ1dHRvbjsKLQotICBwcm90ZWN0ZWQgQ29tYm8gbmFtZUNvbWJvOwotICBwcm90ZWN0ZWQgVGV4dCBuYW1lc3BhY2VUZXh0OwotICAvL3Byb3RlY3RlZCBDb21ibyBwYXJlbnRDb21ibzsKLSAgLy9wcm90ZWN0ZWQgVGV4dCBuYW1lVGV4dDsKLSAgcHJvdGVjdGVkIFRleHQgcGFyZW50bmFtZVRleHQ7Ci0KLSAgcHJvdGVjdGVkIExpc3QgcG9ydHMgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBvcGVyYXRpb25zID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3QgYmluZGluZ3MgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBwb3J0dHlwZXMgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBtZXNzYWdlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGlvbjogc2VsZWN0aW9uIGluIHRoZSBSZXNvdXJjZSBOYXZpZ2F0b3Igdmlldy4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIHN1cGVyKCJWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlIik7Ci0gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gICAgdGhpcy5zZXRUaXRsZShNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfSEVBRElORyk7Ci0gICAgdGhpcy5zZXREZXNjcmlwdGlvbihNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfRVhQTCk7Ci0gIH0KLQotICAvKioKLSAgICogQWx3YXlzIHJldHVybnMgdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUGFnZUNvbXBsZXRlKCkKLSAgewotICAgIGlmICgoKFZhbGlkYXRpb25XaXphcmQpIGdldFdpemFyZCgpKS5pbmNsdWRlV1NETEZpbGUoKSkKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0aW9uID0gbmFtZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoc2VsZWN0aW9uICE9IC0xICYmICFuYW1lQ29tYm8uZ2V0SXRlbShzZWxlY3Rpb24pLmVxdWFscygiIikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qCi0gICAqIENyZWF0ZXMgdGhlIHRvcCBsZXZlbCBjb250cm9sIGZvciB0aGlzIHBhZ2UgdW5kZXIgdGhlIGdpdmVuIAotICAgKiBwYXJlbnQgY29tcG9zaXRlLiBJbXBsZW1lbnRvcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZwotICAgKiB0aGF0IHRoZSBjcmVhdGVkIGNvbnRyb2wgY2FuIGJlIGFjY2Vzc2VkIHZpYSBnZXRDb250cm9sIAotICAgKgotICAgKiBAcGFyYW0gcGFyZW50IC0gdGhlIHBhcmVudCBjb21wb3NpdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBiYXNlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBiYXNlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLSAgICBHcmlkRGF0YSBkYXRhOwotCi0gICAgLy8gY3JlYXRlIGEgZ3JvdXAKLSAgICBHcm91cCB3c2RsRWxlbWVudEdyb3VwID0gbmV3IEdyb3VwKGJhc2UsIFNXVC5TSEFET1dfRVRDSEVEX0lOKTsKLSAgICB3c2RsRWxlbWVudEdyb3VwLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfR1JPVVBfVEVYVF9FTEVNRU5UKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIHdzZGxFbGVtZW50R3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHdzZGxFbGVtZW50R3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICAvLyBjcmVhdGUgYSBiYXNlIHBhbmVsIHdpdGggMiBjb2x1bW5zCi0gICAgQ29tcG9zaXRlIGJhc2VQYW5lbCA9IG5ldyBDb21wb3NpdGUod3NkbEVsZW1lbnRHcm91cCwgU1dULk5PTkUpOwotICAgIGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGxheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSBmYWxzZTsKLSAgICBiYXNlUGFuZWwuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBiYXNlUGFuZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIC8vIGNvbnRlbnQgZm9yIGZpcnN0IGNvbHVtbgotICAgIGNyZWF0ZVdTRExFbGVtZW50VHlwZUNvbnRlbnQoYmFzZVBhbmVsKTsKLQotICAgIC8vIGNvbnRlbnQgZm9yIHNlY29uZCBjb2x1bW4KLSAgICBjcmVhdGVXU0RMRWxlbWVudENvbnRlbnQoYmFzZVBhbmVsKTsKLQotICAgIHNldENvbnRyb2woYmFzZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgZ3JvdXAgb2YgcmFkaW8gYnV0dG9ucyBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIFdTREwgZWxlbWVudC4KLSAgICogVGhlIGZpdmUgdHBlcyBhcmU6IHBvcnQsIGJpbmRpbmcsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb250YWluZXIuIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlV1NETEVsZW1lbnRUeXBlQ29udGVudChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIGEgZ3JvdXAKLSAgICBHcm91cCB3c2RsVHlwZUdyb3VwID0gbmV3IEdyb3VwKHBhcmVudCwgU1dULlNIQURPV19FVENIRURfSU4pOwotICAgIHdzZGxUeXBlR3JvdXAuc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9HUk9VUF9URVhUX1RZUEUpOwotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOwotICAgIHdzZGxUeXBlR3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHdzZGxUeXBlR3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICB3c2RsUG9ydEJ1dHRvbiA9IG5ldyBCdXR0b24od3NkbFR5cGVHcm91cCwgU1dULlJBRElPKTsKLSAgICB3c2RsUG9ydEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1JBRElPX1BPUlQpOwotICAgIHdzZGxQb3J0QnV0dG9uLnNldERhdGEoIndzZGxQb3J0QnV0dG9uIik7Ci0gICAgd3NkbFBvcnRCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotICAgIHdzZGxQb3J0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBQb3J0QnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0KLSAgICB3c2RsQmluZGluZ0J1dHRvbiA9IG5ldyBCdXR0b24od3NkbFR5cGVHcm91cCwgU1dULlJBRElPKTsKLSAgICB3c2RsQmluZGluZ0J1dHRvbi5zZXREYXRhKCJ3c2RsQmluZGluZ0J1dHRvbiIpOwotICAgIHdzZGxCaW5kaW5nQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfUkFESU9fQklORElORyk7Ci0gICAgd3NkbEJpbmRpbmdCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB3c2RsQmluZGluZ0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgQmluZGluZ0J1dHRvblNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCi0gICAgd3NkbFBvcnRUeXBlQnV0dG9uID0gbmV3IEJ1dHRvbih3c2RsVHlwZUdyb3VwLCBTV1QuUkFESU8pOwotICAgIHdzZGxQb3J0VHlwZUJ1dHRvbi5zZXREYXRhKCJ3c2RsUG9ydFR5cGVCdXR0b24iKTsKLSAgICB3c2RsUG9ydFR5cGVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19QT1JUX1RZUEUpOwotICAgIHdzZGxQb3J0VHlwZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHdzZGxQb3J0VHlwZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgUG9ydFR5cGVCdXR0b25TZWxlY3Rpb25MaXN0ZW5lcigpKTsKLQotICAgIHdzZGxPcGVyYXRpb25CdXR0b24gPSBuZXcgQnV0dG9uKHdzZGxUeXBlR3JvdXAsIFNXVC5SQURJTyk7Ci0gICAgd3NkbE9wZXJhdGlvbkJ1dHRvbi5zZXREYXRhKCJ3c2RsT3BlcmF0aW9uQnV0dG9uIik7Ci0gICAgd3NkbE9wZXJhdGlvbkJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1JBRElPX09QRVJBVElPTik7Ci0gICAgd3NkbE9wZXJhdGlvbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHdzZGxPcGVyYXRpb25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IE9wZXJhdGlvbkJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCi0gICAgd3NkbE1lc3NhZ2VCdXR0b24gPSBuZXcgQnV0dG9uKHdzZGxUeXBlR3JvdXAsIFNXVC5SQURJTyk7Ci0gICAgd3NkbE1lc3NhZ2VCdXR0b24uc2V0RGF0YSgid3NkbE1lc3NhZ2VCdXR0b24iKTsKLSAgICB3c2RsTWVzc2FnZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1JBRElPX01FU1NBR0UpOwotICAgIHdzZGxNZXNzYWdlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgd3NkbE1lc3NhZ2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IE1lc3NhZ2VCdXR0b25TZWxlY3Rpb25MaXN0ZW5lcigpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBwYW5lbCB0byBjYXB0dXJlIHRoZSBuYW1lLCBuYW1lc3BhY2UgYW5kIHBhcmVudCBvZiBhbgotICAgKiBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb250YWluZXIuIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlV1NETEVsZW1lbnRDb250ZW50KENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgYSBncm91cGluZyB3aXRoIDIgY29sdW1ucywgb25lIGZvciBsYWJlbHMgYW5kIHRoZW90aGVyIGZvciBmaWVsZHMKLSAgICBDb21wb3NpdGUgZmllbGRDb2x1bW4gPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgbGF5b3V0Lm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IGZhbHNlOwotICAgIGZpZWxkQ29sdW1uLnNldExheW91dChsYXlvdXQpOwotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZmllbGRDb2x1bW4uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIC8vIFRoZSBXU0RMIGVsZW1lbnQgbmFtZSBsYWJlbAotICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGZpZWxkQ29sdW1uLCBTV1QuTEVGVCk7Ci0gICAgbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9OQU1FKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBuYW1lIGZpZWxkCi0gICAgbmFtZUNvbWJvID0gbmV3IENvbWJvKGZpZWxkQ29sdW1uLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIG5hbWVDb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIG5hbWVDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgTmFtZVNlbGVjdGlvbkxpc3RlbmVyKCkpOwotICAgIC8vbmFtZVRleHQgPSBuZXcgVGV4dChmaWVsZENvbHVtbiwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIC8vZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAvL2RhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgLy9kYXRhLndpZHRoSGludCA9IDUwOwotICAgIC8vbmFtZVRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAvL25hbWVUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBUZXh0Qm94TGlzdGVuZXIoKSk7Ci0KLSAgICAvLyBUaGUgV1NETCBlbGVtZW50IG5hbWVzcGFjZSBsYWJlbAotICAgIGxhYmVsID0gbmV3IExhYmVsKGZpZWxkQ29sdW1uLCBTV1QuTEVGVCk7Ci0gICAgbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9OQU1FU1BBQ0UpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICAvLyBUaGUgV1NETCBlbGVtZW50IG5hbWVzcGFjZSBmaWVsZAotICAgIG5hbWVzcGFjZVRleHQgPSBuZXcgVGV4dChmaWVsZENvbHVtbiwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZGF0YS53aWR0aEhpbnQgPSA1MDsKLSAgICBuYW1lc3BhY2VUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgbmFtZXNwYWNlVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgVGV4dEJveExpc3RlbmVyKCkpOwotICAgIG5hbWVzcGFjZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBwYXJlbnQgbGFiZWwKLSAgICBsYWJlbCA9IG5ldyBMYWJlbChmaWVsZENvbHVtbiwgU1dULkxFRlQpOwotICAgIGxhYmVsLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfTEFCRUxfUEFSRU5UKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBwYXJlbnQgZmllbGQKLSAgICAvLyAgICBwYXJlbnRDb21ibyA9IG5ldyBDb21ibyhmaWVsZENvbHVtbiwgU1dULlJFQURfT05MWSk7Ci0gICAgLy8gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgLy8gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICAvLyAgICBwYXJlbnRDb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIHBhcmVudG5hbWVUZXh0ID0gbmV3IFRleHQoZmllbGRDb2x1bW4sIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEud2lkdGhIaW50ID0gNTA7Ci0gICAgcGFyZW50bmFtZVRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBwYXJlbnRuYW1lVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgVGV4dEJveExpc3RlbmVyKCkpOwotICAgIHBhcmVudG5hbWVUZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBBbHdheXMgcmV0dXJuIHRydWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlbnQgd2hlbiBkZWZhdWx0IHNlbGVjdGlvbiBvY2N1cnMgaW4gdGhlIGNvbnRyb2wuCi0gICAqIEBwYXJhbSBlIC0gYW4gZXZlbnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAge30KLQotICAvKioKLSAgICogSGFuZGxlcyB0aGUgaW5jbHVkZVdTREwgY2hlY2tib3guCi0gICAqIFNlbnQgd2hlbiBzZWxlY3Rpb24gb2NjdXJzIGluIHRoZSBjb250cm9sLiAKLSAgICogQHBhcmFtIGUgLSBhbiBldmVudCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWxlY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHt9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZWxlbWVudCBuYW1lLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICBpbnQgc2VsZWN0aW9uID0gbmFtZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgaWYoc2VsZWN0aW9uICE9IC0xKQotICAgIHsgIAotICAgICAgcmV0dXJuIG5hbWVDb21iby5nZXRJdGVtKHNlbGVjdGlvbik7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2VUZXh0LmdldFRleHQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyZW50TmFtZSgpCi0gIHsKLSAgICAvL3JldHVybiBwYXJlbnRDb21iby5nZXRJdGVtKHBhcmVudENvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOwotICAgIHJldHVybiBwYXJlbnRuYW1lVGV4dC5nZXRUZXh0KCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICBpZiAod3NkbEJpbmRpbmdCdXR0b24uZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgcmV0dXJuIEJJTkRJTkc7Ci0gICAgfQotICAgIGVsc2UgaWYgKHdzZGxNZXNzYWdlQnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIHJldHVybiBNRVNTQUdFOwotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsT3BlcmF0aW9uQnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIHJldHVybiBPUEVSQVRJT047Ci0gICAgfQotICAgIGVsc2UgaWYgKHdzZGxQb3J0QnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIHJldHVybiBQT1JUOwotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsUG9ydFR5cGVCdXR0b24uZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgcmV0dXJuIFBPUlRUWVBFOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRWxlbWVudChTdHJpbmcgdHlwZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBwYXJlbnQpCi0gIHsKLSAgICBpZiAocG9ydHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXNldEVsZW1lbnRzKCk7Ci0gICAgfQotICAgIGlmICh0eXBlLmVxdWFscyhQT1JUKSkKLSAgICB7Ci0gICAgICBwb3J0cy5hZGQobmV3IFdTRExFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzSWdub3JlQ2FzZShPUEVSQVRJT04pKQotICAgIHsKLSAgICAgIG9wZXJhdGlvbnMuYWRkKG5ldyBXU0RMRWxlbWVudChuYW1lLCBuYW1lc3BhY2UsIHBhcmVudCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmVxdWFsc0lnbm9yZUNhc2UoQklORElORykpCi0gICAgewotICAgICAgYmluZGluZ3MuYWRkKG5ldyBXU0RMRWxlbWVudChuYW1lLCBuYW1lc3BhY2UsIHBhcmVudCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmVxdWFsc0lnbm9yZUNhc2UoUE9SVFRZUEUpKQotICAgIHsKLSAgICAgIHBvcnR0eXBlcy5hZGQobmV3IFdTRExFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzSWdub3JlQ2FzZShNRVNTQUdFKSkKLSAgICB7Ci0gICAgICBtZXNzYWdlcy5hZGQobmV3IFdTRExFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50KSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXRFbGVtZW50cygpCi0gIHsKLSAgICBwb3J0cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBvcGVyYXRpb25zID0gbmV3IFZlY3RvcigpOwotICAgIGJpbmRpbmdzID0gbmV3IFZlY3RvcigpOwotICAgIHBvcnR0eXBlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBtZXNzYWdlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBuYW1lQ29tYm8uY2xlYXJTZWxlY3Rpb24oKTsKLSAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgY2xhc3MgV29ya3NwYWNlQnV0dG9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGxpc3QgYm94Ci0gICAqLwotICBjbGFzcyBCcm93c2VCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgbGlzdCBib3gKLSAgICovCi0gIGNsYXNzIFNlYXJjaFVERElCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotICB9Ci0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGZpbGUgZmllbGQuCi0gICAqLwotICBjbGFzcyBUZXh0Qm94TGlzdGVuZXIgaW1wbGVtZW50cyBNb2RpZnlMaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXIjbW9kaWZ5VGV4dChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgICB7Ci0gICAgICBnZXRDb250YWluZXIoKS51cGRhdGVCdXR0b25zKCk7Ci0KLSAgICB9Ci0KLSAgfQotICBwcml2YXRlIGNsYXNzIFdTRExFbGVtZW50Ci0gIHsKLSAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZTsKLSAgICBwcml2YXRlIFN0cmluZyBwYXJlbnQ7Ci0KLSAgICBwdWJsaWMgV1NETEVsZW1lbnQoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBwYXJlbnQpCi0gICAgewotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gICAgewotICAgICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudE5hbWUoKQotICAgIHsKLSAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dQYWdlI3NldFZpc2libGUoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKQotICB7Ci0gICAgcmVzZXRFbGVtZW50cygpOwotICAgIHN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7Ci0gICAgaWYgKHZpc2libGUpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBXU0RMUmVhZGVyIHJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgICAgICBEZWZpbml0aW9uIGRlZkVsZW0gPSByZWFkZXIucmVhZFdTREwoKChWYWxpZGF0aW9uV2l6YXJkKSBnZXRXaXphcmQoKSkuZ2V0V1NETEZpbGUoKSk7Ci0gICAgICAgIFFOYW1lIGRlZlFOYW1lID0gZGVmRWxlbS5nZXRRTmFtZSgpOwotICAgICAgICBTdHJpbmcgZGVmbmFtZSA9ICIiOwotICAgICAgICBpZiAoZGVmUU5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGRlZm5hbWUgPSBkZWZRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZGVmRWxlbS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQotICAgICAgICAvLyByZWdpc3RlciB0aGUgcG9ydHMKLSAgICAgICAgTWFwIHNlcnZtYXAgPSBkZWZFbGVtLmdldFNlcnZpY2VzKCk7Ci0gICAgICAgIGlmIChzZXJ2bWFwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBDb2xsZWN0aW9uIHNlcnZzID0gc2Vydm1hcC52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAoc2VydnMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJdGVyYXRvciBzZXJ2SXRlciA9IHNlcnZzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoc2Vydkl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgc2Vydkl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgc2Vydm5hbWUgPSBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0KLSAgICAgICAgICAgICAgTWFwIHBvcnRtYXAgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICAgICAgICAgIGlmIChwb3J0bWFwICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9uIHBvcnRzID0gcG9ydG1hcC52YWx1ZXMoKTsKLSAgICAgICAgICAgICAgICBpZiAocG9ydHMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBJdGVyYXRvciBwb3J0SXRlciA9IHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICB3aGlsZSAocG9ydEl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgcG9ydEl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHBvcnQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuUE9SVCwgbmFtZSwgbmFtZXNwYWNlLCBzZXJ2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIEJpbmRpbmdzCi0gICAgICAgIE1hcCBiaW5kaW5nbWFwID0gZGVmRWxlbS5nZXRCaW5kaW5ncygpOwotICAgICAgICBpZiAoYmluZGluZ21hcCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBiaW5kaW5ncyA9IGJpbmRpbmdtYXAudmFsdWVzKCk7Ci0gICAgICAgICAgaWYgKGJpbmRpbmdzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3IgYmluZEl0ZXIgPSBiaW5kaW5ncy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGJpbmRJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGJpbmRJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnQoVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5CSU5ESU5HLCBuYW1lLCBuYW1lc3BhY2UsIGRlZm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBQb3J0VHlwZXMgYW5kIE9wZXJhdGlvbnMKLSAgICAgICAgTWFwIHBvcnR0eXBlbWFwID0gZGVmRWxlbS5nZXRQb3J0VHlwZXMoKTsKLSAgICAgICAgaWYgKHBvcnR0eXBlbWFwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBDb2xsZWN0aW9uIHBvcnR0eXBlcyA9IHBvcnR0eXBlbWFwLnZhbHVlcygpOwotICAgICAgICAgIGlmIChwb3J0dHlwZXMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJdGVyYXRvciBwb3J0dHlwZUl0ZXIgPSBwb3J0dHlwZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChwb3J0dHlwZUl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQb3J0VHlwZSBwb3J0dHlwZSA9IChQb3J0VHlwZSkgcG9ydHR5cGVJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIHBvcnR0eXBlbmFtZSA9IHBvcnR0eXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnQoVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5QT1JUVFlQRSwgcG9ydHR5cGVuYW1lLCBuYW1lc3BhY2UsIGRlZm5hbWUpOwotCi0gICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBPcGVyYXRpb25zCi0gICAgICAgICAgICAgIExpc3Qgb3BlcmF0aW9ucyA9IHBvcnR0eXBlLmdldE9wZXJhdGlvbnMoKTsKLSAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbnMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEl0ZXJhdG9yIG9wZXJJdGVyID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChvcGVySXRlci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9wZXJJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5PUEVSQVRJT04sIG5hbWUsIG5hbWVzcGFjZSwgcG9ydHR5cGVuYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgTWFwIG1lc3NhZ2VtYXAgPSBkZWZFbGVtLmdldE1lc3NhZ2VzKCk7Ci0gICAgICAgIGlmIChtZXNzYWdlbWFwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBDb2xsZWN0aW9uIG1lc3NhZ2VzID0gbWVzc2FnZW1hcC52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAobWVzc2FnZXMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJdGVyYXRvciBtZXNzSXRlciA9IG1lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAobWVzc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgbWVzc0l0ZXIubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYWRkRWxlbWVudChWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLk1FU1NBR0UsIG5hbWUsIG5hbWVzcGFjZSwgZGVmbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICAgIGludCBudW1FbGVtcyA9IHBvcnRzLnNpemUoKTsKLSAgICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBwb3J0cy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0UGFyZW50TmFtZSgpKTsKLQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB3c2RsUG9ydEJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgIHdzZGxCaW5kaW5nQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgIHdzZGxNZXNzYWdlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgIHdzZGxPcGVyYXRpb25CdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgd3NkbFBvcnRUeXBlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZSBXU0RMIGZpbGUgaXMgbm90IHZhbGlkLgotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzZXRFbGVtZW50cygpOwotICAgIH0KLQotICB9Ci0KLSAgY2xhc3MgUG9ydEJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotCi0gICAgfQotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOwotICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBpbnQgbnVtRWxlbXMgPSBwb3J0cy5zaXplKCk7Ci0gICAgICBXU0RMRWxlbWVudFtdIGVsZW1zID0gKFdTRExFbGVtZW50W10pIHBvcnRzLnRvQXJyYXkobmV3IFdTRExFbGVtZW50W251bUVsZW1zXSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG5hbWVDb21iby5hZGQoZWxlbXNbaV0uZ2V0TmFtZSgpLCBpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVDb21iby5zZWxlY3QoMCk7Ci0gICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldFBhcmVudE5hbWUoKSk7Ci0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0gIGNsYXNzIEJpbmRpbmdCdXR0b25TZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoIiIpOwotICAgICAgaW50IG51bUVsZW1zID0gYmluZGluZ3Muc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBiaW5kaW5ncy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtczsgaSsrKQotICAgICAgewotICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXRQYXJlbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgfQotICBjbGFzcyBQb3J0VHlwZUJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotCi0gICAgfQotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOwotICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBpbnQgbnVtRWxlbXMgPSBwb3J0dHlwZXMuc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBwb3J0dHlwZXMudG9BcnJheShuZXcgV1NETEVsZW1lbnRbbnVtRWxlbXNdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRWxlbXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgbmFtZUNvbWJvLmFkZChlbGVtc1tpXS5nZXROYW1lKCksIGkpOwotICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0UGFyZW50TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgfQotCi0gIH0KLSAgY2xhc3MgT3BlcmF0aW9uQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0KLSAgICB9Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIGludCBudW1FbGVtcyA9IG9wZXJhdGlvbnMuc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBvcGVyYXRpb25zLnRvQXJyYXkobmV3IFdTRExFbGVtZW50W251bUVsZW1zXSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG5hbWVDb21iby5hZGQoZWxlbXNbaV0uZ2V0TmFtZSgpLCBpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVDb21iby5zZWxlY3QoMCk7Ci0gICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldFBhcmVudE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICB9Ci0gIGNsYXNzIE1lc3NhZ2VCdXR0b25TZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoIiIpOwotICAgICAgaW50IG51bUVsZW1zID0gbWVzc2FnZXMuc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBtZXNzYWdlcy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtczsgaSsrKQotICAgICAgewotICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXRQYXJlbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgfQotCi0gIGNsYXNzIE5hbWVTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgaW50IHNlbGVjdGlvbiA9ICgoQ29tYm8pIGUuZ2V0U291cmNlKCkpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBTdHJpbmcgdHlwZSA9IGdldFR5cGUoKTsKLSAgICAgIFdTRExFbGVtZW50IGVsZW0gPSBudWxsOwotICAgICAgaWYgKHR5cGUuZXF1YWxzKFBPUlQpKQotICAgICAgewotICAgICAgICBlbGVtID0gKFdTRExFbGVtZW50KSBwb3J0cy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKEJJTkRJTkcpKQotICAgICAgewotICAgICAgICBlbGVtID0gKFdTRExFbGVtZW50KSBiaW5kaW5ncy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKFBPUlRUWVBFKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbSA9IChXU0RMRWxlbWVudCkgcG9ydHR5cGVzLmdldChzZWxlY3Rpb24pOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoT1BFUkFUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbSA9IChXU0RMRWxlbWVudCkgb3BlcmF0aW9ucy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKE1FU1NBR0UpKQotICAgICAgewotICAgICAgICBlbGVtID0gKFdTRExFbGVtZW50KSBtZXNzYWdlcy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGVsZW0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW0uZ2V0UGFyZW50TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZFdTRExQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA1OTMxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5kaWFsb2dzLlNlbGVjdFNpbmdsZUZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci0KLS8qKgotICogV2l6YXJkIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIAotICogV1NETCBkb2N1bWVudCBmb3IgdGhlIFdlYiBzZXJ2aWNlLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLQotcHVibGljIGNsYXNzIFZhbGlkYXRpb25XaXphcmRXU0RMUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotewotCi0gIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB3c2RsaW52YWxpZCA9IGZhbHNlOwotICAvKioKLSAgICogQWNjZXNzIHRvIHRoZSBpbmNsdWRlV1NETCBmbGFnLiAgCi0gICAqLwotICBwcm90ZWN0ZWQgQnV0dG9uIGluY2x1ZGVXU0RMQnV0dG9uOwotCi0gIC8qKgotICAgKiBBY2Nlc3MgdG8gdGhlIHdzZGwgZG9jdW1lbnQgZ3JvdXAuCi0gICAqLwotICBwcm90ZWN0ZWQgR3JvdXAgZG9jdW1lbnRHcm91cDsKLSAgcHJvdGVjdGVkIFRleHQgZG9jdW1lbnRMb2NhdGlvblRleHQ7Ci0gIHByb3RlY3RlZCBDb21ibyBmaWxlRmllbGQ7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3Rpb246IHNlbGVjdGlvbiBpbiB0aGUgUmVzb3VyY2UgTmF2aWdhdG9yIHZpZXcuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbldpemFyZFdTRExQYWdlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIHN1cGVyKCJWYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UiKTsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgICB0aGlzLnNldFRpdGxlKE1lc3NhZ2VzLldTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9IRUFESU5HKTsKLSAgICB0aGlzLnNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLldTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9FWFBMKTsKLSAgfQotCi0gIC8qKgotICAgKiBBbHdheXMgcmV0dXJucyB0cnVlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQYWdlQ29tcGxldGUoKQotICB7Ci0gICAgaWYgKGluY2x1ZGVXU0RMRmlsZSgpKQotICAgIHsKLQotICAgICAgaWYgKGZpbGVGaWVsZC5nZXRUZXh0KCkgPT0gbnVsbCB8fCBmaWxlRmllbGQuZ2V0VGV4dCgpLmVxdWFscygiIikgfHwgd3NkbGludmFsaWQpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKgotICAgKiBDcmVhdGVzIHRoZSB0b3AgbGV2ZWwgY29udHJvbCBmb3IgdGhpcyBwYWdlIHVuZGVyIHRoZSBnaXZlbiBwYXJlbnQKLSAgICogY29tcG9zaXRlLiBJbXBsZW1lbnRvcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBjcmVhdGVkCi0gICAqIGNvbnRyb2wgY2FuIGJlIGFjY2Vzc2VkIHZpYSBnZXRDb250cm9sCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50IC0gdGhlIHBhcmVudCBjb21wb3NpdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBiYXNlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBiYXNlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLSAgICBHcmlkRGF0YSBkYXRhOwotCi0gICAgLy8gYWRkIGluY2x1ZGVXU0RMIGZsYWcKLSAgICBpbmNsdWRlV1NETEJ1dHRvbiA9IG5ldyBCdXR0b24oYmFzZSwgU1dULkNIRUNLKTsKLSAgICBpbmNsdWRlV1NETEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfUEFHRV9JTkNMVURFX1dTRExfQlVUVE9OKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBpbmNsdWRlV1NETEJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIGluY2x1ZGVXU0RMQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIGluY2x1ZGVXU0RMQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0KLSAgICAvLyBjcmVhdGUgYSBXU0RMIGRvY3VtZW50IGdyb3VwCi0gICAgZG9jdW1lbnRHcm91cCA9IG5ldyBHcm91cChiYXNlLCBTV1QuU0hBRE9XX0VUQ0hFRF9JTik7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBkb2N1bWVudEdyb3VwLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBkb2N1bWVudEdyb3VwLnNldExheW91dChsYXlvdXQpOwotICAgIGRvY3VtZW50R3JvdXAuc2V0VmlzaWJsZShmYWxzZSk7Ci0KLSAgICBjcmVhdGVEb2N1bWVudEdyb3VwQ29udGVudHMoZG9jdW1lbnRHcm91cCk7Ci0KLSAgICBzZXRDb250cm9sKGJhc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRG9jdW1lbnRHcm91cENvbnRlbnRzKENvbXBvc2l0ZSBkb2N1bWVudEdyb3VwKQotICB7Ci0gICAgLy9yYWRpbyBidXR0b25zJyBjb250YWluZXIKLSAgICBDb21wb3NpdGUgYmFzZVBhbmVsID0gbmV3IENvbXBvc2l0ZShkb2N1bWVudEdyb3VwLCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBsYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gZmFsc2U7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBiYXNlUGFuZWwuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBiYXNlUGFuZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIENvbXBvc2l0ZSBncm91cDEgPSBuZXcgQ29tcG9zaXRlKGJhc2VQYW5lbCwgU1dULk5PTkUpOwotICAgIGdyb3VwMS5zZXRGb250KGdldEZvbnQoKSk7Ci0gICAgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgZ3JvdXAxLnNldExheW91dChsYXlvdXQpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdyb3VwMS5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgTGFiZWwgZG9jdW1lbnRMYWJlbCA9IG5ldyBMYWJlbChncm91cDEsIFNXVC5MRUZUKTsKLSAgICBkb2N1bWVudExhYmVsLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX0lOQ0xVREVfV1NETF9MQUJFTCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZG9jdW1lbnRMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIC8qKgotCSAqIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGJhc2VQYW5lbCwgU1dULkxFRlQpOyBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0JICogZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsgZGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7Ci0JICogbGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkgKi8KLSAgICBmaWxlRmllbGQgPSBuZXcgQ29tYm8oZ3JvdXAxLCBTV1QuRFJPUF9ET1dOKTsKLSAgICBTdHJpbmdbXSB3c2RsbG9jYXRpb25zID0gKChWYWxpZGF0aW9uV2l6YXJkKSBnZXRXaXphcmQoKSkuZ2V0V1NETExvY2F0aW9ucygpOwotICAgIGlmKHdzZGxsb2NhdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgbnVtbG9jcyA9IHdzZGxsb2NhdGlvbnMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWxvY3M7IGkrKykKLSAgICAgIHsKLSAgICAgIAlmaWxlRmllbGQuYWRkKHdzZGxsb2NhdGlvbnNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEud2lkdGhIaW50ID0gMzA7Ci0gICAgZmlsZUZpZWxkLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgZmlsZUZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBGaWxlRmllbGRMaXN0ZW5lcigpKTsKLQotICAgIExhYmVsIHdzZGxMYWJlbCA9IG5ldyBMYWJlbChncm91cDEsIFNXVC5MRUZUKTsKLSAgICB3c2RsTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5XU0RMX1BBR0VfVkFMSURfV1NETF9MQUJFTCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZG9jdW1lbnRMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gZG9jdW1lbnRMb2NhdGlvblRleHQgPSBuZXcgVGV4dChkb2N1bWVudEdyb3VwLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgLy8gZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgLy8gZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICAvLyBkYXRhLndpZHRoSGludCA9IDMwOwotICAgIC8vIGRvY3VtZW50TG9jYXRpb25UZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICBDb21wb3NpdGUgZ3JvdXAgPSBuZXcgQ29tcG9zaXRlKGJhc2VQYW5lbCwgU1dULk5PTkUpOwotICAgIGdyb3VwLnNldEZvbnQoZ2V0Rm9udCgpKTsKLSAgICBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBncm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBncm91cC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgQnV0dG9uIHdvcmtzcGFjZUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5QVVNIKTsKLSAgICB3b3Jrc3BhY2VCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX1BBR0VfV09SS0JFTkNIX0JVVFRPTik7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgd29ya3NwYWNlQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgd29ya3NwYWNlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBXb3Jrc3BhY2VCdXR0b25MaXN0ZW5lcigpKTsKLQotICAgIEJ1dHRvbiBicm93c2VCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUFVTSCk7Ci0gICAgYnJvd3NlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX0JST1dTRV9CVVRUT04pOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGJyb3dzZUJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIGJyb3dzZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgQnJvd3NlQnV0dG9uTGlzdGVuZXIoKSk7Ci0KLSAgICAvLyBCdXR0b24gc2VhcmNoVURESUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5QVVNIKTsKLSAgICAvLyBzZWFyY2hVRERJQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuKCJfVUlfV0laQVJEX1ZfU0VBUkNIX1VERElfQlVUVE9OIikpOwotICAgIC8vIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICAvLyBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIC8vIHNlYXJjaFVERElCdXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAvLyBzZWFyY2hVRERJQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWFyY2hVRERJQnV0dG9uTGlzdGVuZXIoKSk7Ci0KLSAgICByZXR1cm4gZG9jdW1lbnRHcm91cDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGluY2x1ZGVXU0RMRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gaW5jbHVkZVdTRExCdXR0b24uZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdTRExGaWxlKCkKLSAgewotICAgIHJldHVybiBmaWxlRmllbGQuZ2V0VGV4dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsd2F5cyByZXR1cm4gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogU2VudCB3aGVuIGRlZmF1bHQgc2VsZWN0aW9uIG9jY3VycyBpbiB0aGUgY29udHJvbC4KLSAgICogCi0gICAqIEBwYXJhbSBlIC0KLSAgICogICAgICAgICAgICBhbiBldmVudCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWxlY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICB7fQotCi0gIC8qKgotICAgKiBIYW5kbGVzIHRoZSBpbmNsdWRlV1NETCBjaGVja2JveC4gU2VudCB3aGVuIHNlbGVjdGlvbiBvY2N1cnMgaW4gdGhlCi0gICAqIGNvbnRyb2wuCi0gICAqIAotICAgKiBAcGFyYW0gZSAtCi0gICAqICAgICAgICAgICAgYW4gZXZlbnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICB7Ci0gICAgaWYgKGUud2lkZ2V0ID09IGluY2x1ZGVXU0RMQnV0dG9uKQotICAgIHsKLSAgICAgIGlmIChpbmNsdWRlV1NETEJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkKLSAgICAgIHsKLSAgICAgICAgZG9jdW1lbnRHcm91cC5zZXRWaXNpYmxlKHRydWUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBkb2N1bWVudEdyb3VwLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgfQotICAgICAgZ2V0Q29udGFpbmVyKCkudXBkYXRlQnV0dG9ucygpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdTRExJbnZhbGlkKCkKLSAgewotICAgIHdzZGxpbnZhbGlkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGxpc3QgYm94Ci0gICAqLwotICBjbGFzcyBXb3Jrc3BhY2VCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBTZWxlY3RTaW5nbGVGaWxlRGlhbG9nIGRpYWxvZyA9IG5ldyBTZWxlY3RTaW5nbGVGaWxlRGlhbG9nKGdldFNoZWxsKCksIHNlbGVjdGlvbiwgZmFsc2UpOwotICAgICAgZGlhbG9nLmFkZEZpbHRlckV4dGVuc2lvbnMobmV3IFN0cmluZ1tdIHsgIi53c2RsIiB9KTsKLSAgICAgIGRpYWxvZy5jcmVhdGUoKTsKLSAgICAgIGRpYWxvZy5nZXRTaGVsbCgpLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX0ZJTEVfU0hFTExfVEVYVCk7Ci0gICAgICBkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuV1NETF9QQUdFX0ZJTEVfVElUTEUpOwotICAgICAgZGlhbG9nLnNldE1lc3NhZ2UoTWVzc2FnZXMuV1NETF9QQUdFX0ZJTEVfREVTQ1JJUFRJT04pOwotICAgICAgZGlhbG9nLnNldFRpdGxlSW1hZ2UoV1NJVUlQbHVnaW4uZ2V0UmVzb3VyY2VJbWFnZShSZXNvdXJjZS5WQUxJREFURV9XU0lfTE9HRklMRV9XSVopKTsKLSAgICAgIAotICAgICAgaW50IHJlc3VsdCA9IGRpYWxvZy5vcGVuKCk7Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gV2luZG93Lk9LKQotICAgICAgewotICAgICAgICBJRmlsZSBjdXJyZW50SUZpbGUgPSBkaWFsb2cuZ2V0RmlsZSgpOwotICAgICAgICBpZiAoY3VycmVudElGaWxlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmaWxlRmllbGQuYWRkKGN1cnJlbnRJRmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCksIDApOwotICAgICAgICAgIGZpbGVGaWVsZC5zZWxlY3QoMCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgY2xhc3MgQnJvd3NlQnV0dG9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgRmlsZURpYWxvZyBkaWFsb2cgPSBuZXcgRmlsZURpYWxvZyhnZXRTaGVsbCgpKTsKLSAgICAgIGRpYWxvZy5zZXRGaWx0ZXJFeHRlbnNpb25zKG5ldyBTdHJpbmdbXSB7ICIqLndzZGwiIH0pOwotICAgICAgU3RyaW5nIHNlbGVjdGlvbiA9IGRpYWxvZy5vcGVuKCk7Ci0gICAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZpbGVGaWVsZC5hZGQoc2VsZWN0aW9uLCAwKTsKLSAgICAgICAgZmlsZUZpZWxkLnNlbGVjdCgwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgLy8gY2xhc3MgU2VhcmNoVURESUJ1dHRvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgLy8gewotICAvLyAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIC8vICB7fQotICAvLwotICAvLyAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgLy8gIHsKLSAgLy8gICAgU3RyaW5nIHRpdGxlID0gIkluZm9ybWF0aW9uIjsKLSAgLy8gICAgU3RyaW5nIG1lc3NhZ2UgPSAiVGhlIGNob3NlbiBvcGVyYXRpb24gaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGUuIjsKLSAgLy8gICAgTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpOwotICAvLyAgfQotICAvL30KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBmaWxlIGZpZWxkLgotICAgKi8KLSAgY2xhc3MgRmlsZUZpZWxkTGlzdGVuZXIgaW1wbGVtZW50cyBNb2RpZnlMaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXIjbW9kaWZ5VGV4dChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgICB7Ci0gICAgICB3c2RsaW52YWxpZCA9IGZhbHNlOwotICAgICAgZ2V0Q29udGFpbmVyKCkudXBkYXRlQnV0dG9ucygpOwotCi0gICAgfQotCi0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU0OTAyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvYXBhY2hlL3hlcmNlcy8qKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94bWwvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9taXNjL0JBU0U2NERlY29kZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9taXNjL0JBU0U2NEVuY29kZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9taXNjL0NoYXJhY3RlckVuY29kZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9taXNjL0NoYXJhY3RlckRlY29kZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9uZXQvd3d3L01lc3NhZ2VIZWFkZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWIxOTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi1idWlsZC54bWwKLXdzaS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2MGMxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDcwMzJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODoyNiBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5MGI0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBNYXIgMjkgMDQ6MDg6MjYgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODc3N2E3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2k7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDUucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJV9QUk9WSURFUl9OQU1FCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5kb2N1bWVudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lOyBidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDIuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLnVkZGk0ajtidW5kbGUtdmVyc2lvbj0iWzIuMC40LDIuMS4wKSIsCi0gb3JnLmFwYWNoZS5heGlzO2J1bmRsZS12ZXJzaW9uPSJbMS4zLjAsMi4wLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjguMCwzLjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2YxOTFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zb3VyY2UuLiA9IHNyYy8KLWphcnMuY29tcGlsZS5vcmRlciA9IC4KLW91dHB1dC4uID0gYmluLwotc3JjLmluY2x1ZGVzID0gY29tcG9uZW50LnhtbCxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvY29tcG9uZW50LnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGEyY2FmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Y29tcG9uZW50ICB4bWxucz0iaHR0cDovL2VjbGlwc2Uub3JnL3d0cC9yZWxlbmcvdG9vbHMvY29tcG9uZW50LW1vZGVsIiBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3NpIj48ZGVzY3JpcHRpb24gdXJsPSIiPjwvZGVzY3JpcHRpb24+PGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+PC9jb21wb25lbnQtZGVwZW5kcz48cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpIiBmcmFnbWVudD0iZmFsc2UiLz48cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpIiBmcmFnbWVudD0iZmFsc2UiLz48L2NvbXBvbmVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMmU5NmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1fUExVR0lOX05BTUUgICA9IFdTSSBDb25mb3JtYW5jZSBUb29scwotX1BST1ZJREVSX05BTUUgPSBFY2xpcHNlLm9yZwotX1dTSV9WQUxJREFUT0VfTkFNRSA9IFdTLUkgVmFsaWRhdG9yCi1fVEVTVF9BU1NFUlRJT05fRE9DVU1FTlRTX05BTUUgPSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudHMKLV9SRVBPUlRfQVJUSUZBQ1RfVFlQRVNfTkFNRSA9IFJlcG9ydCBBcnRpZmFjdCBUeXBlcwotX1VJX1dTRExfV1NJX1ZBTElEQVRPUiA9IFdTREwgV1MtSSBWYWxpZGF0b3IKLV9VSV9XU0lfRlJBTUVXT1JLX1VERElfVkFMSURBVE9SID0gV1MtSSBGcmFtZXdvcmsgVURESSBWYWxpZGF0b3IKLV9VSV9XU0lfRlJBTUVXT1JLX1dTRExfVkFMSURBVE9SID0gV1MtSSBGcmFtZXdvcmsgV1NETFZhbGlkYXRvcgotX1VJX1dTSV9GUkFNRVdPUktfTUVTU0FHRV9WQUxJREFUT1IgPSBXUy1JIEZyYW1ld29yayBNZXNzYWdlIFZhbGlkYXRvcgotX1VJX1dTSV9GUkFNRVdPUktfRU5WRUxPUEVfVkFMSURBVE9SID0gV1MtSSBGcmFtZXdvcmsgRW52ZWxvcGUgVmFsaWRhdG9yCi1fVUlfV1NJX0JQX1RBRF9WRVJTSU9OUyA9IFdTLUkgQmFzaWMgUHJvZmlsZSBUQUQgVmVyc2lvbnMKLV9VSV9XU0lfQlBfUkVQT1JUX0FSVElGQUNUUyA9IFdTLUkgQmFzaWMgUHJvZmlsZSBSZXBvcnQgQXJ0aWZhY3RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzZTJlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS0tPiAKLQotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9IndzaXZhbGlkYXRvciIgbmFtZT0iJV9XU0lfVkFMSURBVE9FX05BTUUiIHNjaGVtYT0ic2NoZW1hL3dzaXZhbGlkYXRvci5leHNkIi8+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJ0YWRzIiBuYW1lPSIlX1RFU1RfQVNTRVJUSU9OX0RPQ1VNRU5UU19OQU1FIiBzY2hlbWE9InNjaGVtYS90YWRzLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InJlcG9ydEFydGlmYWN0VHlwZXMiIG5hbWU9IiVfUkVQT1JUX0FSVElGQUNUX1RZUEVTX05BTUUiIHNjaGVtYT0ic2NoZW1hL3JlcG9ydEFydGlmYWN0VHlwZXMuZXhzZCIvPgotICAgICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ3c2RsV1NJVmFsaWRhdG9yIgotICAgICAgICAgbmFtZT0iJV9VSV9XU0RMX1dTSV9WQUxJREFUT1IiCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5leHR2YWxpZGF0b3IiPgotICAgICAgPGV4dHZhbGlkYXRvcgotICAgICAgICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnZhbGlkYXRlLndzZGwuV1NETFZhbGlkYXRvciI+Ci0gICAgICA8L2V4dHZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgICBpZD0idWRkaVZhbGlkYXRvciIKLSAgICAgICAgICAgbmFtZT0iJV9VSV9XU0lfRlJBTUVXT1JLX1VERElfVkFMSURBVE9SIgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzaS53c2l2YWxpZGF0b3IiPgotICAgICAgICA8d3NpdmFsaWRhdG9yCi0gICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpLlVERElWYWxpZGF0b3JJbXBsIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgICAgaWQ9IndzZGxWYWxpZGF0b3IiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0ZSQU1FV09SS19XU0RMX1ZBTElEQVRPUiIKLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2kud3NpdmFsaWRhdG9yIj4KLSAgICAgICAgPHdzaXZhbGlkYXRvcgotICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbC5XU0RMVmFsaWRhdG9ySW1wbCIvPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIGlkPSJtZXNzYWdlVmFsaWRhdG9yIgotICAgICAgICAgICBuYW1lPSIlX1VJX1dTSV9GUkFNRVdPUktfTUVTU0FHRV9WQUxJREFUT1IiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLndzaXZhbGlkYXRvciI+Ci0gICAgICAgIDx3c2l2YWxpZGF0b3IKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2UuTWVzc2FnZVZhbGlkYXRvckltcGwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgICBpZD0iZW52ZWxvcGVWYWxpZGF0b3IiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0ZSQU1FV09SS19FTlZFTE9QRV9WQUxJREFUT1IiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLndzaXZhbGlkYXRvciI+Ci0gICAgICAgIDx3c2l2YWxpZGF0b3IKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkVudmVsb3BlVmFsaWRhdG9ySW1wbCIvPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIGlkPSJicFRhZHMiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0JQX1RBRFMiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLnRhZHMiPgotICAgICAgICA8dGFkCi0gICAgICAgICAgIG5hbWU9IkJhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zIgotICAgICAgICAgICB2ZXJzaW9uPSIxLjEuMCIvPgotICAgICAgICA8dGFkCi0gICAgICAgICAgIG5hbWU9IkJhc2ljIFByb2ZpbGUgMS4xIFRlc3QgQXNzZXJ0aW9ucyIKLSAgICAgICAgICAgdmVyc2lvbj0iMS4xLjAiLz4KLSAgICAgICAgPHRhZAotICAgICAgICAgICBuYW1lPSJTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUgWzEuMF0gKHdpdGggQmFzaWMgUHJvZmlsZSBbMS4xXSkgVGVzdCBBc3NlcnRpb25zIgotICAgICAgICAgICB2ZXJzaW9uPSIxLjAuMCIvPgotICAgICAgICA8dGFkCi0gICAgICAgICAgIG5hbWU9IkF0dGFjaG1lbnRzIFByb2ZpbGUgWzEuMF0gKHdpdGggQmFzaWMgUHJvZmlsZSBbMS4xXSBhbmQgU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlIFsxLjBdKSBUZXN0IEFzc2VydGlvbnMiCi0gICAgICAgICAgIHZlcnNpb249IjEuMC4wIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgICAgaWQ9ImJwUmVwb3J0QXJ0aWZhY3RzIgotICAgICAgICAgICBuYW1lPSIlX1VJX1dTSV9CUF9SRVBPUlRfQVJUSUZBQ1RTIgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzaS5yZXBvcnRBcnRpZmFjdFR5cGVzIj4KLSAgICAgICAgPHJlcG9ydEFydGlmYWN0VHlwZQotICAgICAgICAgICBhcnRpZmFjdFR5cGU9Im1lc3NhZ2UiLz4KLSAgIDwvZXh0ZW5zaW9uPiAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS9yZXBvcnRBcnRpZmFjdFR5cGVzLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3JlcG9ydEFydGlmYWN0VHlwZXMuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiMTI4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3JlcG9ydEFydGlmYWN0VHlwZXMuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NpIiBpZD0icmVwb3J0QXJ0aWZhY3RUeXBlcyIgbmFtZT0iUmVwb3J0IEFydGlmYWN0IFR5cGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSByZXBvcnQgYXJ0aWZhY3QgdHlwZSBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gZGVub3RlIGFydGlmYWN0IHR5cGVzIHRoYXQgc2hvdWxkIGJlIG91dHB1dCB0byB0aGUgbG9nIGZpbGUuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InJlcG9ydEFydGlmYWN0VHlwZSIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJyZXBvcnRBcnRpZmFjdFR5cGUiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJhcnRpZmFjdFR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFdUUCAyLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgcmVwb3J0IGFydGlmYWN0IHR5cGUgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSZsdDtleHRlbnNpb24KLSAgICAgICAgaWQ9JnF1b3Q7YnBSZXBvcnRBcnRpZmFjdHMmcXVvdDsKLSAgICAgICAgbmFtZT0mcXVvdDslX1VJX1dTSV9CUF9SRVBPUlRfQVJUSUZBQ1RTJnF1b3Q7Ci0gICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2kucmVwb3J0QXJ0aWZhY3RzJnF1b3Q7Jmd0OwotICAgICAmbHQ7cmVwb3J0QXJ0aWZhY3RUeXBlCi0gICAgICAgIGFydGlmYWN0VHlwZT0mcXVvdDttZXNzYWdlJnF1b3Q7LyZndDsKLSZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgTm8gQVBJIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4dGVuc2lvbiBwb2ludC4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgTm8gaW1wbGVtZW50YXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS90YWRzLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3RhZHMuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhYmZkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3RhZHMuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NpIiBpZD0idGFkcyIgbmFtZT0iVGVzdCBBc3NlcnRpb24gRG9jdW1lbnRzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSB0YWRzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byBkZW5vdGUgYWRkaXRpb25hbCBUZXN0IEFzc2VydGlvbiBEb2N1bWVudHMgdGhhdCB0aGV5IGNhbiBoYW5kbGUuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgKG5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSkKLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0idGFkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InRhZCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgKG5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSkKLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBXVFAgMi4wCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFRBRCB2ZXJzaW9uIGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0mbHQ7ZXh0ZW5zaW9uCi0gICAgICAgIGlkPSZxdW90O2JwVGFkVmVyc2lvbnMmcXVvdDsKLSAgICAgICAgbmFtZT0mcXVvdDslX1VJX1dTSV9CUF9UQURfVkVSU0lPTlMmcXVvdDsKLSAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS50YWRfdmVyc2lvbnMmcXVvdDsmZ3Q7Ci0gICAgICZsdDt0YWQKLSAgICAgICAgbmFtZT0mcXVvdDtCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyZxdW90OwotICAgICAgICB2ZXJzaW9uPSZxdW90OzEuMS4wJnF1b3Q7LyZndDsKLSZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgTm8gQVBJIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4dGVuc2lvbiBwb2ludC4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgTm8gaW1wbGVtZW50YXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS93c2l2YWxpZGF0b3IuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvd3NpdmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyODA1OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS93c2l2YWxpZGF0b3IuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJic3Aub3JnLmVjbGlwc2Uud3N0LndzaSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0iYnNwLm9yZy5lY2xpcHNlLndzdC53c2kiIGlkPSJ3c2l2YWxpZGF0b3IiIG5hbWU9IldTLUkgVmFsaWRhdG9yIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBXUy1JIFZhbGlkYXRvciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gY29udHJpYnV0ZSBhIHZhbGlkYXRvciB0aGF0IGNhbiB2YWxpZGF0ZSBkaWZmZXJlbnQgV1MtSSBQcm9maWxlcy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3c2l2YWxpZGF0b3IiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id3NpdmFsaWRhdG9yIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFdUUCAyLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgV1MtSSBWYWxpZGF0b3IgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSZsdDtleHRlbnNpb24KLSAgICAgICAgaWQ9JnF1b3Q7bWVzc2FnZVZhbGlkYXRvciZxdW90OwotICAgICAgICBuYW1lPSZxdW90OyVfVUlfV1NJX0ZSQU1FV09SS19NRVNTQUdFX1ZBTElEQVRPUiZxdW90OwotICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NpLnZhbGlkYXRvciZxdW90OyZndDsKLSAgICAgJmx0O3dzaV92YWxpZGF0b3IKLSAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZS5NZXNzYWdlVmFsaWRhdG9ySW1wbCZxdW90Oy8mZ3Q7Ci0mbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtjb2RlJmd0Owotb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZS5NZXNzYWdlVmFsaWRhdG9ySW1wbAotJmx0Oy9jb2RlJmd0OwotQ29udHJpYnV0ZXMgV1MtSSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgQmFzaWMgUHJvZmlsZSB2YWxpZGF0aW9uIG9mIG1lc3NhZ2VzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVByZWZlcmVuY2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJUHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRiOGQyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJUHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWw7Ci0KLS8qKgotICogV1MtSSB0ZXN0IHRvb2xzIHByb3BlcnR5LgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBXU0lQcmVmZXJlbmNlcwotewotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXBsaWFuY2VMZXZlbCA9ICIiOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZGZpbGUgPSAiIjsKLSAgCi0gIC8qKgotICAgKiAgQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NJUHJlZmVyZW5jZXMoKQotICB7Ci0JY29tcGxpYW5jZUxldmVsID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5XQVJOX05PTl9XU0k7Ci0JdGFkZmlsZSA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuREVGQVVMVF9BU1NFUlRJT05fRklMRTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFdTLUkgY29tcGxpYW5jZSBsZXZlbC4KLSAgICogQHJldHVybiB0aGUgV1MtSSBjb21wbGlhbmNlIGxldmVsLgotICAgKiBAc2VlICNzZXRDb21wbGlhbmNlTGV2ZWwKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcGxpYW5jZUxldmVsKCkKLSAgewotICAgIHJldHVybiBjb21wbGlhbmNlTGV2ZWw7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXUy1JIGNvbXBsaWFuY2UgbGV2ZWwuCi0gICAqIEBwYXJhbSBjb21wbGlhbmNlIHRoZSBXUy1JIGNvbXBsaWFuY2UgbGV2ZWwuCi0gICAqIEBzZWUgI2dldENvbXBsaWFuY2VMZXZlbAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tcGxpYW5jZUxldmVsKFN0cmluZyBjb21wbGlhbmNlKQotICB7Ci0gICAgdGhpcy5jb21wbGlhbmNlTGV2ZWwgPSBjb21wbGlhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgQmFzaWMgUHJvZmlsZSBUZXN0IEFzc2VydGlvbnMgZmlsZS4KLSAgICogQHNlZSAjc2V0VEFERmlsZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQURGaWxlKCkKLSAgewotICAgIHJldHVybiB0YWRmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgbG9jYXRpb24gb2YgdGhlIEJhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlIHRoZSBsb2NhdGlvbiBvZiB0aGUgQmFzaWMgUHJvZmlsZSBUZXN0IEFzc2VydGlvbnMgZmlsZS4KLSAgICogQHNlZSAjZ2V0VEFERmlsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VEFERmlsZShTdHJpbmcgZmlsZSkKLSAgewotICAgIHRoaXMudGFkZmlsZSA9IGZpbGU7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViY2ZmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotLyoqCi0gKiBXUy1JIHRlc3QgdG9vbCBwcm9wZXJ0aWVzIHNwZWNpZmljIGZvciBFY2xpcHNlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMgZXh0ZW5kcyBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzCi17Ci0gLyoqCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXMjY2hlY2tXU0lQcmVmZXJlbmNlcyhqYXZhLmxhbmcuU3RyaW5nKQotICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVByZWZlcmVuY2VzIGNoZWNrV1NJUHJlZmVyZW5jZXMoU3RyaW5nIGZpbGV1cmkpCi0gIHsKLQkvLyBDYWNoZSB0aGUgV1MtSSB0YWRzLgotCWNhY2hlVEFERmlsZXMoKTsKLQkKLSAgICBXU0lQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG5ldyBXU0lQcmVmZXJlbmNlcygpOwotICAgIC8vIFJlbW92ZSBmaWxlOiBhbmQgYW55IHNsYXNoZXMgZnJvbSB0aGUgZmlsZXVyaS4gCi0gICAgLy8gRWNsaXBzZSdzIHJlc29sdXRpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHN0YXJ0IHdpdGggdGhlIGRyaXZlLgotICAgIFN0cmluZyB1cmlTdHIgPSB0cmltVVJJKGZpbGV1cmkpOwotCi0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgQVBjb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCBTU0JQY29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICAKLSAgICBJRmlsZVtdIGZpbGVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kRmlsZXNGb3JMb2NhdGlvbihuZXcgUGF0aCh1cmlTdHIpKTsKLSAgICBpZiAoZmlsZXMgIT0gbnVsbCAmJiBmaWxlcy5sZW5ndGggPT0gMSkKLSAgICB7Ci0gICAgICAvL2NoZWNrIHByb2plY3QgbGV2ZWwgY29ucGxpYW5jZQotICAgICAgSVByb2plY3QgcHJvamVjdCA9IGZpbGVzWzBdLmdldFByb2plY3QoKTsKLSAgICAgIAotICAgICAgaWYgKEFQY29udGV4dC5wcm9qZWN0U3RvcE5vbldTSUNvbXBsaWFuY2VzKHByb2plY3QpKQotICAgICAgewotICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKEFQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gICAgICB9IAotICAgICAgZWxzZSBpZiAoQVBjb250ZXh0LnByb2plY3RXYXJuTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoQVBfQVNTRVJUSU9OX0ZJTEUpOwotICAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNTQlBjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoU1NCUF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU1NCUGNvbnRleHQucHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoREVGQVVMVF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBJZiB3ZSBjYW4ndCBvYnRhaW4gdGhlIHByb2plY3QgcHJlZmVyZW5jZSB1c2UgdGhlIGdsb2JhbCBwcmVmZXJlbmNlLgotICAgICAgU3RyaW5nIEFQbGV2ZWwgPSBBUGNvbnRleHQuZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UoKTsKLSAgICAgIFN0cmluZyBTU0JQbGV2ZWwgPSBTU0JQY29udGV4dC5nZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpOwotICAgICAgaWYoQVBsZXZlbC5lcXVhbHMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShBUF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgICAgfQotICAgICAgZWxzZSBpZihBUGxldmVsLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpKQotICAgICAgewotICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKEFQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgIH0KLSAgICAgaWYoU1NCUGxldmVsLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpKQotICAgICB7Ci0gICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgICAgfQotICAgICBlbHNlIGlmKFNTQlBsZXZlbC5lcXVhbHMoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKSkKLSAgICAgewotICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoREVGQVVMVF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmVmZXJlbmNlczsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGNhY2hlVEFERmlsZXMoKQotICB7Ci0JICBTdHJpbmcgcmVzdWx0QVAgPSBjYWNoZUZpbGUoQVBfQVNTRVJUSU9OX0ZJTEUpOwotCSAgaWYocmVzdWx0QVAgIT0gbnVsbCkKLQkgIHsKLQkJICBBUF9BU1NFUlRJT05fRklMRSA9IHJlc3VsdEFQOwotCSAgfQotCSAgCi0JICBTdHJpbmcgcmVzdWx0U1NCUCA9IGNhY2hlRmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLQkgIGlmKHJlc3VsdFNTQlAgIT0gbnVsbCkKLQkgIHsKLQkJICBTU0JQX0FTU0VSVElPTl9GSUxFID0gcmVzdWx0U1NCUDsKLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgY2FjaGVGaWxlKFN0cmluZyB1cmkpCi0gIHsKLQkgIFVSSVJlc29sdmVyIHJlc29sdmVyID0gZ2V0VVJJUmVzb2x2ZXIoKTsKLQkgIFN0cmluZyByZXNvbHZlZFVyaSA9IHJlc29sdmVyLnJlc29sdmUoIiIsIG51bGwsIHVyaSk7Ci0JICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZVBoeXNpY2FsTG9jYXRpb24oIiIsIG51bGwsIHJlc29sdmVkVXJpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIHRvIHVzZSBmb3IgV1MtSSB2YWxpZGFpdG9uLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBVUkkgcmVzb2x2ZXIgdG8gdXNlIGZvciBXUy1JIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFVSSVJlc29sdmVyIGdldFVSSVJlc29sdmVyKCkKLSAgewotCSAgcmV0dXJuIFVSSVJlc29sdmVyUGx1Z2luLmNyZWF0ZVJlc29sdmVyKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1BsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTBkYWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotCi0vKioKLSAqIFRoZSBXUy1JIHRlc3QgdG9vbHMgcGx1Z2luLgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIHByaXZhdGUgc3RhdGljIFBsdWdpbiBpbnN0YW5jZTsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBQTFVHSU5fUFJPUEVSVElFUyA9ICJ3c2l2YWxpZGF0ZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NpIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX0VYVF9JRCA9IFBMVUdJTl9JRCArICIud3NpdmFsaWRhdG9yIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFEX1ZFUlNJT05fRVhUX0lEID0gUExVR0lOX0lEICsgIi50YWRzIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVQT1JUX0FSVElGQUNUX1RZUEVTX0VYVF9JRCA9IFBMVUdJTl9JRCArICIucmVwb3J0QXJ0aWZhY3RUeXBlcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UQURfTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX1RBRF9WRVJTSU9OID0gInZlcnNpb24iOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQVJUSUZBQ1RfVFlQRSA9ICJhcnRpZmFjdFR5cGUiOwotCi0gIC8qIEhvbGRzIHZhbGlkYXRvcnMgcmVhZCBmcm9tIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4gIExhenkgaW5pdGlhbGl6ZWQgaW4KLSAgICogY29tcHV0ZVZhbGlkYXRvcnMoKS4gICovCi0gIHByaXZhdGUgQmFzZVZhbGlkYXRvciB2YWxpZGF0b3JzW107Ci0KLSAgLyogSG9sZHMgYXJyYXlzIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgVGVzdCBBc3NlcnRpb24gZG9jdW1lbnQgKFRBRCkKLSAgICogdmVyc2lvbnMgcmVhZCBmcm9tIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4gIEVhY2ggYXJyYXkgaGFzIHR3byBlbGVtZW50czoKLSAgICogICAwOiB0aGUgVEFEIG5hbWUKLSAgICogICAxOiB0aGUgVEFEIHZlcnNpb24gc3RyaW5nCi0gICAqIExhenkgaW5pdGlhbGl6ZWQgaW4gY29tcHV0ZVRBRFZlcnNpb25zKCkuICAqLwotICBwcml2YXRlIFN0cmluZyB0YWRWZXJzaW9uc1tdW107Ci0KLSAgLyogSG9sZHMgYXJ0aWZhY3QgdHlwZSBuYW1lcyBmb3IgcmVwb3J0aW5nIHJlYWQgZnJvbSB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuCi0gICAqIExhenkgaW5pdGlhbGl6ZWQgaW4gZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpLiAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVwb3J0QXJ0aWZhY3RUeXBlc1tdOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3Igd3NpVGVzdFRvb2xzUGx1Z2luLgotICAgKiBAcGFyYW0gZGVzY3JpcHRvciBhbiBJUGx1Z2luRGVzY3JpcHRvciBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NJVGVzdFRvb2xzUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotCi0gICAgLy8gc2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeQotICAgV1NJVGVzdFRvb2xzUHJvcGVydGllcy5zZXRFY2xpcHNlQ29udGV4dCh0cnVlKTsKLSAgIC8vcmVzb3VyY2VidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoUExVR0lOX1BST1BFUlRJRVMpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRJbnN0YW5jZS4KLSAgICogQHJldHVybiBBYnN0cmFjdFVJUGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAgLyoqCi0gICAqIE1ldGhvZCBnZXRQbHVnaW4uCi0gICAqIEByZXR1cm4gV1NJVG9vbHNVdGlsUGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVRlc3RUb29sc1BsdWdpbiBnZXRQbHVnaW4oKQotICB7Ci0gICAgcmV0dXJuIChXU0lUZXN0VG9vbHNQbHVnaW4pIGluc3RhbmNlOwotICB9Ci0KLSAgLyogQ29tcHV0ZXMgdGhlIGxpc3Qgb2YgdmFsaWRhdG9ycyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuICovCi0gIHByaXZhdGUgQmFzZVZhbGlkYXRvcltdIGNvbXB1dGVWYWxpZGF0b3JzKCkgewotICAgICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgIElFeHRlbnNpb25Qb2ludCBleHRlbnNpb25Qb2ludCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KAotICAgICAgICAgICAgICBWQUxJREFUT1JfRVhUX0lEKTsKLSAgICAgIElFeHRlbnNpb25bXSBleHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAvKiBPbmx5IG9uZSB2YWxpZGF0b3IgcGVyIGV4dGVuc2lvbiBwb2ludCAqLwotICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCB2YWxpZGF0b3JFbGVtZW50ID0gZXh0ZW5zaW9uc1tpXS4KLSAgICAgICAgICAgICAgICAgIGdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpWzBdOwotICAgICAgICAgIEJhc2VWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICB2YWxpZGF0b3IgPSAoQmFzZVZhbGlkYXRvcikgdmFsaWRhdG9yRWxlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEFUVF9DTEFTUyk7Ci0gICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVzdWx0cy5hZGQodmFsaWRhdG9yKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAoQmFzZVZhbGlkYXRvcltdKSByZXN1bHRzLnRvQXJyYXkobmV3IEJhc2VWYWxpZGF0b3JbMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEZpbmQgYWxsIHZhbGlkYXRvcnMgZm91bmQgaW4gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5IGV4dGVuc2lvbiBwb2ludHMKLSAgICogb3JnLmVjbGlwc2Uud3N0LndzaS52YWxpZGF0b3IuCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGVzZSB2YWxpZGF0b3JzCi0gICAqLwotICBwdWJsaWMgQmFzZVZhbGlkYXRvcltdIGdldEJhc2VWYWxpZGF0b3JzKCkgCi0gIHsKLQlpZiAodmFsaWRhdG9ycyA9PSBudWxsKQotCSAgdmFsaWRhdG9ycyA9IGNvbXB1dGVWYWxpZGF0b3JzKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRvcnM7ICAKLSAgfQotCi0gIC8qKgotICAgKiBTY2FuIGFsbCB2YWxpZGF0b3JzIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSByZWdpc3RyeSBmb3Igc3VwcG9ydGVkIGFydGlmYWN0Ci0gICAqIHR5cGVzLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGFydGlmYWN0IHR5cGUgbmFtZXMgKFN0cmluZ3MpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0QXJ0aWZhY3RUeXBlcygpIHsKLSAgICAgIGlmICh2YWxpZGF0b3JzID09IG51bGwpCi0gICAgICAgICBnZXRCYXNlVmFsaWRhdG9ycygpOwotICAgICAgU3RyaW5nIGFydGlmYWN0VHlwZXNbXSA9IG5ldyBTdHJpbmdbdmFsaWRhdG9ycy5sZW5ndGhdOwotICAgICAgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgYXJ0aWZhY3RUeXBlc1tpXSA9IHZhbGlkYXRvcnNbaV0uZ2V0QXJ0aWZhY3RUeXBlKCk7Ci0gICAgICByZXR1cm4gYXJ0aWZhY3RUeXBlczsKLSAgfQotICAKLSAgLyogQ29tcHV0ZXMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIFRBRCB2ZXJzaW9ucyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gCi0gICAqIHJlZ2lzdHJ5LiAgU2VlIGNvbW1lbnQgZm9yIHRhZFZlcnNpb25zIGluc3QgdmFyIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQotICAgKiByZXR1cm4gdHlwZS4gKi8KLSAgcHJpdmF0ZSBTdHJpbmdbXVtdIGNvbXB1dGVUQURWZXJzaW9ucygpIHsKLSAgICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgICBJRXh0ZW5zaW9uUG9pbnQgZXh0ZW5zaW9uUG9pbnQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludCgKLSAgICAgICAgICAgICAgVEFEX1ZFUlNJT05fRVhUX0lEKTsKLSAgICAgIElFeHRlbnNpb25bXSBleHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsKLQotICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCB2ZXJzaW9uRWxlbWVudHNbXSA9IGV4dGVuc2lvbnNbaV0uCi0gICAgICAgICAgICAgICAgICBnZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZlcnNpb25FbGVtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICBTdHJpbmcgbmFtZVZlcnNpb25bXSA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICAgICAgICAgIG5hbWVWZXJzaW9uWzBdID0gdmVyc2lvbkVsZW1lbnRzW2pdLmdldEF0dHJpYnV0ZShBVFRfVEFEX05BTUUpOwotICAgICAgICAgICAgICBuYW1lVmVyc2lvblsxXSA9IHZlcnNpb25FbGVtZW50c1tqXS5nZXRBdHRyaWJ1dGUoQVRUX1RBRF9WRVJTSU9OKTsKLSAgICAgICAgICAgICAgcmVzdWx0cy5hZGQobmFtZVZlcnNpb24pOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiAoU3RyaW5nW11bXSkgcmVzdWx0cy50b0FycmF5KG5ldyBTdHJpbmdbMF1bMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEZpbmQgYWxsIFRBRCB2ZXJzaW9ucyBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gcmVnaXN0cnkgZXh0ZW5zaW9uIHBvaW50cwotICAgKiBvcmcuZWNsaXBzZS53c3Qud3NpLnRhZF92ZXJzaW9ucy4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgYSB0d28gZWxlbWVudCBhcnJheXMgdGhhdCBkZXNjcmliZXMKLSAgICogb25lIFRBRCB2ZXJzaW9uOgotICAgKiAgIGVsZW1lbnQgMDogdGhlIFRBRCBuYW1lCi0gICAqICAgZWxlbWVudCAxOiB0aGUgVEFEIHZlcnNpb24gc3RyaW5nCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW11bXSBnZXRBbGxUQURWZXJzaW9ucygpIAotICB7Ci0JaWYgKHRhZFZlcnNpb25zID09IG51bGwpCi0JICB0YWRWZXJzaW9ucyA9IGNvbXB1dGVUQURWZXJzaW9ucygpOwotICAgIHJldHVybiB0YWRWZXJzaW9uczsgIAotICB9Ci0gIAotICAvKiBDb21wdXRlcyB0aGUgbGlzdCBvZiBhcnRpZmFjdCB0eXBlcyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuICovCi0gIHByaXZhdGUgU3RyaW5nW10gY29tcHV0ZVJlcG9ydEFydGlmYWN0VHlwZXMoKSAKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUV4dGVuc2lvblBvaW50IGV4dGVuc2lvblBvaW50ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoUkVQT1JUX0FSVElGQUNUX1RZUEVTX0VYVF9JRCk7Ci0gICAgSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBleHRlbnNpb25Qb2ludC5nZXRFeHRlbnNpb25zKCk7Ci0gICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgcmVwb3J0QXJ0aWZhY3RFbGVtZW50c1tdID0gZXh0ZW5zaW9uc1tpXS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVwb3J0QXJ0aWZhY3RFbGVtZW50cy5sZW5ndGg7IGorKykgCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZXBvcnRBcnRpZmFjdCA9IHJlcG9ydEFydGlmYWN0RWxlbWVudHNbal0uZ2V0QXR0cmlidXRlKEFUVF9BUlRJRkFDVF9UWVBFKTsKLSAgICAgICAgcmVzdWx0cy5hZGQocmVwb3J0QXJ0aWZhY3QpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZ1tdKSByZXN1bHRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBGaW5kIGFsbCByZXBvcnQgYXJ0aWZhY3QgdHlwZXMgdGFncyBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gcmVnaXN0cnkKLSAgICogZXh0ZW5zaW9uIHBvaW50cyBvcmcuZWNsaXBzZS53c3Qud3NpLnJlcG9ydEFydGlmYWN0VHlwZXMuCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGVzZSBTdHJpbmdzCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpIAotICB7Ci0gICAgaWYgKHJlcG9ydEFydGlmYWN0VHlwZXMgPT0gbnVsbCkKLSAgICAgICAgcmVwb3J0QXJ0aWZhY3RUeXBlcyA9IGNvbXB1dGVSZXBvcnRBcnRpZmFjdFR5cGVzKCk7Ci0gICAgcmV0dXJuIHJlcG9ydEFydGlmYWN0VHlwZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzAzMzQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXI7Ci0KLS8qKgotICogV1MtSSB0ZXN0IHRvb2xzIHByb3BlcnR5LgotICovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzUHJvcGVydGllcwotewotICBwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBpbnN0YWxsVVJMID0gIiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIHRhZGZpbGUgPSAiIjsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBzY2hlbWFEaXIgPSAiY29tbW9uL3NjaGVtYXMvIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgU1NCUF9BU1NFUlRJT05fRklMRSA9ICJodHRwOi8vd3d3LndzLWkub3JnL1Rlc3RpbmcvVG9vbHMvMjAwNS8wMS9TU0JQMTBfQlAxMV9UQURfMS0wLnhtbCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEFQX0FTU0VSVElPTl9GSUxFID0gImh0dHA6Ly93d3cud3MtaS5vcmcvVGVzdGluZy9Ub29scy8yMDA0LzEyL0FQMTBfQlAxMV9TU0JQMTBfVEFELnhtbCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFRkFVTFRfQVNTRVJUSU9OX0ZJTEUgPSBBUF9BU1NFUlRJT05fRklMRTsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUT1BfTk9OX1dTSSA9ICIwIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0FSTl9OT05fV1NJID0gIjEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJR05PUkVfTk9OX1dTSSA9ICIyIjsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBlY2xpcHNlQ29udGV4dCA9IGZhbHNlOwotICBwcm90ZWN0ZWQgc3RhdGljIE1hcCB1cmlUb0Fzc2VydGlvbnNNYXAgPSBuZXcgSGFzaE1hcCgpOwotICBwcm90ZWN0ZWQgc3RhdGljIERvY3VtZW50RmFjdG9yeSBkb2N1bWVudEZhY3RvcnkgPSBudWxsOwotCi0gIC8qKgotICAgKiAgQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NJVGVzdFRvb2xzUHJvcGVydGllcygpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RWNsaXBzZUNvbnRleHQoYm9vbGVhbiBlY2xpcHNlQWN0aXZlKQotICB7Ci0gICAgZWNsaXBzZUNvbnRleHQgPSBlY2xpcHNlQWN0aXZlOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0RWNsaXBzZUNvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGVjbGlwc2VDb250ZXh0OwotICB9Ci0gIAotICAvKioKLSAgICogQ2hlY2tzIHRoZSBXUy1JIHByZWZlcmVuY2VzIGZvciB0aGUgZ2l2ZW4gZmlsZSBhbmQgcmV0dXJuIHRoZW0gaW4gYQotICAgKiBXU0lQcmVmZXJlbmNlcyBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZXVyaSBUaGUgZmlsZSBVUkkgdG8gY2hlY2sgdGhlIFdTLUkgcHJlZmVyZW5jZXMgZm9yLgotICAgKiBAcmV0dXJuIEEgV1NJUHJlZmVyZW5jZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByZWZlcmVuY2UgZm9yIHRoaXMgZmlsZSBVUkkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVByZWZlcmVuY2VzIGNoZWNrV1NJUHJlZmVyZW5jZXMoU3RyaW5nIGZpbGV1cmkpCi0gIHsKLSAgCXJldHVybiBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyBsb2NhdGVkIGF0IHRoZSBnaXZlbiBVUkkuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25zVVJJICB0aGUgbG9jYXRpb24gb2YgdGhlIFRBRC4KLSAgICogQHJldHVybiB0aGUgcHJvZmlsZSBhc3NlcnRpb25zIGxvY2F0ZWQgYXQgdGhlIGdpdmVuIFVSSS4KLSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBQcm9maWxlQXNzZXJ0aW9ucyBnZXRQcm9maWxlQXNzZXJ0aW9ucyhTdHJpbmcgYXNzZXJ0aW9uc1VSSSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0JIFByb2ZpbGVBc3NlcnRpb25zIHJlc3VsdCA9IG51bGw7Ci0JIGlmIChhc3NlcnRpb25zVVJJICE9IG51bGwpCi0JIHsKLQkgICB0cnkKLQkgICB7Ci0JICAgICBpZiAodXJpVG9Bc3NlcnRpb25zTWFwLmNvbnRhaW5zS2V5KGFzc2VydGlvbnNVUkkpKQotCQkgICByZXN1bHQgPSAoUHJvZmlsZUFzc2VydGlvbnMpdXJpVG9Bc3NlcnRpb25zTWFwLmdldChhc3NlcnRpb25zVVJJKTsKLQkgICAgIGVsc2UKLQkgICAgIHsKLQkgICAgICAgLy8gUmVhZCBwcm9maWxlIGFzc2VydGlvbnMKLQkgICAgICAgaWYgKGRvY3VtZW50RmFjdG9yeSA9PSBudWxsKQotCSAgICAJICAgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JICAgICAgIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIHByb2ZpbGVBc3NlcnRpb25zUmVhZGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVyKCk7Ci0JICAgICAgIHJlc3VsdCA9IHByb2ZpbGVBc3NlcnRpb25zUmVhZGVyLnJlYWRQcm9maWxlQXNzZXJ0aW9ucyhhc3NlcnRpb25zVVJJKTsKLSAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICAgICB7Ci0gICAgICAgIAkgdXJpVG9Bc3NlcnRpb25zTWFwLnB1dChhc3NlcnRpb25zVVJJLCByZXN1bHQpOwotICAgICAgICAgICB9Ci0JICAgICB9Ci0JICAgfQotCSAgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgICB7Ci0JCSByZXN1bHQgPSBudWxsOwotCSAgIH0KLQkgfQotCSByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICAvKioKLSAgICogUmVtb3ZlIGZpbGU6IGFuZCBhbnkgc2xhc2hlcyBmcm9tIHRoZSBmaWxldXJpLiAKLSAgICogRWNsaXBzZSdzIHJlc29sdXRpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHN0YXJ0IHdpdGggdGhlIGRyaXZlLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgdHJpbVVSSShTdHJpbmcgZmlsZXVyaSkKLSAgewotICAJU3RyaW5nIHVyaVN0ciA9IGZpbGV1cmk7Ci0gIAkKLSAgICBpZihmaWxldXJpLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gICAgewotICAgICAgdXJpU3RyID0gZmlsZXVyaS5zdWJzdHJpbmcoNSk7Ci0gICAgfQotICAgIHdoaWxlKHVyaVN0ci5zdGFydHNXaXRoKCIvIikgfHwgdXJpU3RyLnN0YXJ0c1dpdGgoIlxcIikpCi0gICAgewotICAgICAgdXJpU3RyID0gdXJpU3RyLnN1YnN0cmluZygxKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVyaVN0cjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvTWVzc2FnZUFuYWx5emVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvTWVzc2FnZUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzBkM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL01lc3NhZ2VBbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETFJlZmVyZW5jZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuRmFpbHVyZURldGFpbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLlJlcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LkFzc2VydGlvbkVycm9yOwotCi0vKioKLSAqIE1lc3NhZ2VBbmFseXplcgotICogCi0gKiBBIGNsYXNzIHRoYXQgYWxsb3dzIHNpbXBsZSBhY2Nlc3MgdG8gdGhlIFdTLUkgVGVzdCBUb29scyBpbiBvcmRlciB0byBhbmFseXplCi0gKiBtZXNzYWdlcyBpbiBhIGxvZyBmaWxlLgotICovCi0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlQW5hbHl6ZXIKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy53c2kudGVzdC50b29scyI7Ci0gIAotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUWVBFX1BPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfQklORElORyA9ICJiaW5kaW5nIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFlQRV9QT1JUVFlQRSA9ICJwb3J0dHlwZSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfTUVTU0FHRSA9ICJtZXNzYWdlIjsKLQotICAvLyBUZXN0IHJlc3VsdCBTdHJpbmdzCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgTk9UUEFTU0VEID0gIm5vdFBhc3NlZCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgV0FSTklORyA9ICJ3YXJuaW5nIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBGQUlMRUQgPSAiZmFpbGVkIjsKLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZmlsZW5hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbGZpbGUgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnRuYW1lID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudG5hbWUgPSBudWxsOwotICBwcm90ZWN0ZWQgYm9vbGVhbiB3c2Rsc3BlY2lmaWVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZSAgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBhc3NlcnRpb253YXJuaW5nczsKLSAgcHJvdGVjdGVkIExpc3QgYXNzZXJ0aW9uZXJyb3JzOwotICBwcm90ZWN0ZWQgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMgPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBNZXNzYWdlQW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VBbmFseXplcihTdHJpbmcgZmlsZW5hbWUpCi0gIHsKLSAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgYXNzZXJ0aW9ud2FybmluZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgYXNzZXJ0aW9uZXJyb3JzID0gbmV3IFZlY3RvcigpOwotICAJdGhpcy53c2lQcmVmZXJlbmNlcyA9IFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXMoZmlsZW5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIE1lc3NhZ2VBbmFseXplci4KLSAgICogQHBhcmFtIGZpbGVuYW1lIGxvZyBmaWxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUFuYWx5emVyKFN0cmluZyBmaWxlbmFtZSwgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMpCi0gIHsKLSAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgYXNzZXJ0aW9ud2FybmluZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgYXNzZXJ0aW9uZXJyb3JzID0gbmV3IFZlY3RvcigpOwotICAJdGhpcy53c2lQcmVmZXJlbmNlcyA9IHdzaVByZWZlcmVuY2VzOwotICB9Ci0KLSAgcHVibGljIE1lc3NhZ2VBbmFseXplcihTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB3c2RsZmlsZSwgU3RyaW5nIGVsZW1lbnRuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50bmFtZSwgU3RyaW5nIHR5cGUpCi0gIHsKLSAgCXRoaXMoZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpKTsKLSAgCXdzZGxzcGVjaWZpZWQgPSB0cnVlOwotICAJCi0gIAl0aGlzLndzZGxmaWxlID0gd3NkbGZpbGUucmVwbGFjZSgnXFwnLCAnLycpOwotICAJdGhpcy5lbGVtZW50bmFtZSA9IGVsZW1lbnRuYW1lOwotICAJdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIAl0aGlzLnBhcmVudG5hbWUgPSBwYXJlbnRuYW1lOwotICAJdGhpcy50eXBlID0gdHlwZTsKLSAgfQotCi0gIHB1YmxpYyBNZXNzYWdlQW5hbHl6ZXIoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgd3NkbGZpbGUsIFN0cmluZyBlbGVtZW50bmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHBhcmVudG5hbWUsIFN0cmluZyB0eXBlLCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcykKLSAgewotICAJdGhpcyhmaWxlbmFtZSwgd3NpUHJlZmVyZW5jZXMpOwotICAJd3NkbHNwZWNpZmllZCA9IHRydWU7Ci0gIAkKLSAgCXRoaXMud3NkbGZpbGUgPSB3c2RsZmlsZS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0gIAl0aGlzLmVsZW1lbnRuYW1lID0gZWxlbWVudG5hbWU7Ci0gIAl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgCXRoaXMucGFyZW50bmFtZSA9IHBhcmVudG5hbWU7Ci0gIAl0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCB2YWxpZGF0ZUNvbmZvcm1hbmNlLgotICAgKiAKLSAgICogQ2hlY2tzIHRoZSBjb25mb3JtYW5jZSBvZiB0aGUgZ2l2ZW4gbG9nZmlsZSBhZ2FpbnN0IHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUuCi0gICAqIElmIHRoZXJlIGFyZSBjb25mb3JtYW5jZSBwcm9ibGVtcyB0aGV5IGNhbiBiZSBvYnRhaW5lZCBmcm9tIGdldEFzc2VydGlvbkVycm9ycy4KLSAgICogCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlQ29uZm9ybWFuY2UoKSB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLQkgIGlmICh3c2lQcmVmZXJlbmNlcy5nZXRDb21wbGlhbmNlTGV2ZWwoKSAhPSBXU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5JR05PUkVfTk9OX1dTSSkKLQkgIHsKLSAgICAgICAgRG9jdW1lbnRGYWN0b3J5IGRvY3VtZW50RmFjdG9yeSA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBCYXNpY1Byb2ZpbGVBbmFseXplciB1c2luZyBhbiBhbmFseXplcmNvbmZpZyBvYmplY3QKLSAgICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJjb25maWcgPSBkb2N1bWVudEZhY3RvcnkubmV3QW5hbHl6ZXJDb25maWcoKTsKLSAgICAgICAgaWYod3NkbHNwZWNpZmllZCkKLSAgICAgICAgewotICAgICAgCSAgV1NETFJlZmVyZW5jZSB3c2RscmVmID0gbmV3IFdTRExSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAJICB3c2RscmVmLnNldFdTRExMb2NhdGlvbih3c2RsZmlsZSk7Ci0gICAgICAJCi0gICAgICAJICBXU0RMRWxlbWVudCB3c2RsZWxlbSA9IG5ldyBXU0RMRWxlbWVudEltcGwoKTsKLSAgICAgIAkgIHdzZGxlbGVtLnNldE5hbWUoZWxlbWVudG5hbWUpOwotICAgICAgCSAgd3NkbGVsZW0uc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAJICB3c2RsZWxlbS5zZXRQYXJlbnRFbGVtZW50TmFtZShwYXJlbnRuYW1lKTsKLSAgICAgIAkgIHdzZGxlbGVtLnNldFR5cGUodHlwZSk7Ci0gICAgICAJCi0gICAgICAJICB3c2RscmVmLnNldFdTRExFbGVtZW50KHdzZGxlbGVtKTsKLSAgICAgIAkKLSAgICAgIAkgIGFuYWx5emVyY29uZmlnLnNldFdTRExSZWZlcmVuY2Uod3NkbHJlZik7Ci0gICAgICAgIH0KLQotICAgICAgICBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFybyA9IG5ldyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbCgpOwotICAgICAgICBhcm8uc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlLm5ld0luc3RhbmNlKE5PVFBBU1NFRCkpOwotICAgICAgICBhcm8uc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKGZhbHNlKTsKLSAgICAgICAgYXJvLnNldFNob3dGYWlsdXJlRGV0YWlsKGZhbHNlKTsKLSAgICAgICAgYXJvLnNldFNob3dGYWlsdXJlTWVzc2FnZShmYWxzZSk7Ci0gICAgICAgIGFyby5zZXRTaG93TWVzc2FnZUVudHJ5KGZhbHNlKTsKLQotICAgICAgICAvLyBhbHRob3VnaCB3ZSBkb24ndCB1c2UgYSBzdHlsZXNoZWV0IGZvciBvdXIgYXBwbGljYXRpb24gaXQgaXMgcmVxdWlyZWQgb3IgdGhlIAotICAgICAgICAvLyBXUy1JIHRvb2xzIHdpbGwgZmFpbAotICAgICAgICBBZGRTdHlsZVNoZWV0IGFkZHN0eWxlc2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLQotICAgICAgICBhbmFseXplcmNvbmZpZy5zZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKGFybyk7Ci0gICAgICAgIGFuYWx5emVyY29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkc3R5bGVzaGVldCk7Ci0gICAgICAKLSAgICAgICAgYW5hbHl6ZXJjb25maWcuc2V0Q29ycmVsYXRpb25UeXBlKCJlbmRwb2ludCIpOwotICAJICAgIHRyeQotCQl7Ci0JCSAgYW5hbHl6ZXJjb25maWcuc2V0TG9nTG9jYXRpb24oVVJJRW5jb2Rlci5lbmNvZGUoZmlsZW5hbWUsICJVVEY4IikpOwotCQkgIGFuYWx5emVyY29uZmlnLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbih3c2lQcmVmZXJlbmNlcy5nZXRUQURGaWxlKCkpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLQkJewotCQkgIGFuYWx5emVyY29uZmlnLnNldExvZ0xvY2F0aW9uKFVSSUVuY29kZXIuZW5jb2RlKGZpbGVuYW1lLCAiVVRGOCIpKTsKLQkgICAgICBhbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oVVJJRW5jb2Rlci5lbmNvZGUod3NpUHJlZmVyZW5jZXMuZ2V0VEFERmlsZSgpLCAiVVRGOCIpKTsKLQkJfQotICAgICAgICAvL2FuYWx5emVyY29uZmlnLnNldExvZ0xvY2F0aW9uKGZpbGVuYW1lKTsKLSAgICAgICAgLy9hbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oZ2V0QmFzaWNQcm9maWxlVGVzdEFzc2VydGlvbnNGaWxlKCkpOwotICAgICAgICBhbmFseXplcmNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKGZhbHNlKTsKLSAgICAgIAotCi0gICAgICAgIExpc3QgYW5hbHl6ZXJDb25maWdzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBhbmFseXplckNvbmZpZ3MuYWRkKGFuYWx5emVyY29uZmlnKTsKLSAgICAgICAgLy8gaGVyZSdzIHdoZXJlIHRoZSB2YWxpZGF0aW9uIGFjdHVhbGx5IHN0YXJ0cyBoYXBwZW5pbmcKLSAgICAgICAgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIgYnBhbmFseXplciA9IG5ldyBXU0lCYXNpY1Byb2ZpbGVBbmFseXplcihhbmFseXplckNvbmZpZ3MpOwotCi0gICAgICAgIGJwYW5hbHl6ZXIudmFsaWRhdGVBbGwoKTsKLSAgICAgICAgUmVwb3J0SW1wbCByZXBvcnQgPSAoUmVwb3J0SW1wbCkgYnBhbmFseXplci5nZXRSZXBvcnQoKTsKLQotICAgICAgICBMaXN0IGVudHJpZXMgPSByZXBvcnQuZ2V0RW50cmllcygpOwotCi0gICAgICAgIC8vIGlmIHRoZXJlIGFyZSByZXBvcnQgZW50cmllcyB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgYWRkIGFsbAotICAgICAgICAvLyBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlcyB0byB0aGUgZXJyb3IgbGlzdC4KLSAgICAgICAgaWYgKGVudHJpZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGllbnRyeSA9IGVudHJpZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaWVudHJ5Lmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSkgaWVudHJ5Lm5leHQoKTsKLSAgICAgICAgICAgIE1hcCBhc3NlcnRpb25SZXN1bHRzID0gZW50cnkuZ2V0QXNzZXJ0aW9uUmVzdWx0TGlzdCgpOwotCi0gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uUmVzdWx0cyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVyYXRvciBpYXNzZXJ0aW9uUmVzdWx0cyA9IGFzc2VydGlvblJlc3VsdHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQotICAgICAgICAgICAgICB3aGlsZSAoaWFzc2VydGlvblJlc3VsdHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IGFyID0gKEFzc2VydGlvblJlc3VsdCkgaWFzc2VydGlvblJlc3VsdHMubmV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyLmdldFJlc3VsdCgpLmVxdWFsc0lnbm9yZUNhc2UoRkFJTEVEKSAmJiAKLSAgICAgICAgICAgICAgICAJd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLlNUT1BfTk9OX1dTSSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgICAgaWYgKHRhLmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gYXIuZ2V0RmFpbHVyZURldGFpbExpc3QoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXJyb3JNZXNzYWdlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50TG9jYXRpb24gZWwgPSBmZGkuZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWwuZ2V0TGluZU51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgLy9UT0RPOiBnZXQgYXNzZXJ0aW9uIGxvY2F0aW9ucyBpbiB0aGUgbG9nIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb25lcnJvcnMuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgdGEuZ2V0SWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJNZXNzYWdlIElEICIgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpICsgIjoiICsgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhci5nZXRSZXN1bHQoKS5lcXVhbHNJZ25vcmVDYXNlKEZBSUxFRCkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgICAgaWYgKHRhLmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gYXIuZ2V0RmFpbHVyZURldGFpbExpc3QoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXJyb3JNZXNzYWdlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50TG9jYXRpb24gZWwgPSBmZGkuZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWwuZ2V0TGluZU51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogZ2V0IGFzc2VydGlvbiBsb2NhdGlvbnMgaW4gdGhlIGxvZyBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9ud2FybmluZ3MuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgdGEuZ2V0SWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJNZXNzYWdlIElEICIgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpICsgIjoiICsgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSAKLQkgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lBbmFseXplckV4Y2VwdGlvbigiVGhlIE1lc3NhZ2VBbmFseXplciB3YXMgdW5hYmxlIHRvIHZhbGlkYXRlIHRoZSBnaXZlbiBsb2dmaWxlLiIsIGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUFuYWx5emVyRXhjZXB0aW9uKCJUaGUgTWVzc2FnZUFuYWx5emVyIHdhcyB1bmFibGUgdG8gdmFsaWRhdGUgdGhlIGdpdmVuIGxvZ2ZpbGUuIik7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEFzc2VydGlvbldhcm5pbmdzLgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gICAqIEByZXR1cm4gTGlzdAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbndhcm5pbmdzOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBc3NlcnRpb25GYWlsdXJlcy4KLSAgICogUmV0dXJucyBhIGxpc3Qgb2YgYW55IGFzc2VydGlvbiBlcnJvcnMgZ2VuZXJhdGVkIGZyb20gdmFsaWRhdGVDb25mb3JtYW5jZS4KLSAgICogQHJldHVybiBMaXN0Ci0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRBc3NlcnRpb25FcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbmVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTRExBbmFseXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTRExBbmFseXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWJmMjMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9XU0RMQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyOwotCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJRW5jb2RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5XU0RMUmVmZXJlbmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsLkFkZFN0eWxlU2hlZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5GYWlsdXJlRGV0YWlsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuQXNzZXJ0aW9uRXJyb3I7Ci0KLS8qKgotICogV1NETEFuYWx5emVyCi0gKiBUaGUgaW50ZXJmYWNlIHRvIHRoZSBXUy1JIFRlc3QgVG9vbHMgZm9yIGFuYWx5emluZyBhIFdTREwgZmlsZS4gIEFsbG93cyBhIFdTREwgZmlsZSB0byBiZSBhbmFseXplZAotICogYXQgYW55IG9mIHRoZSBmb2xsb3dpbmcgbGV2ZWxzLgotICogIHBvcnQKLSAqICBiaW5kaW5nCi0gKiAgcG9ydFR5cGUKLSAqICBvcGVyYXRpb24KLSAqICBtZXNzYWdlCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExBbmFseXplcgotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLndzaS50ZXN0LnRvb2xzIjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkcgPSAiYmluZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRUWVBFID0gInBvcnRUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0UgPSAibWVzc2FnZSI7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBOT1RQQVNTRUQgPSAibm90UGFzc2VkIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBXQVJOSU5HID0gIndhcm5pbmciOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZBSUxFRCA9ICJmYWlsZWQiOwotICAKLSAgcHJvdGVjdGVkIExpc3QgYW5hbHl6ZXJDb25maWdzOwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxVUkk7Ci0gIC8vIGFzc2VydGlvbnMgdG8gaWdub3JlIC0gdXNlZCBmb3IgYXNzZXJ0aW9ucyB0aGF0IHRoZSB0b29scyBoYXZlIG5vdCBpbXBsZW1lbnRlZCBwcm9wZXJseSB5ZXQKLSAgLy9wcm90ZWN0ZWQgU3RyaW5nW10gaWdub3JlQXNzZXJ0aW9ucyA9IHsgLyoiV1NJMjEwNSIgLCAiV1NJMjExOSIqL307Ci0gIHByb3RlY3RlZCBMaXN0IGFzc2VydGlvbmVycm9yczsKLSAgcHJvdGVjdGVkIExpc3QgYXNzZXJ0aW9ud2FybmluZ3M7Ci0gIHByb3RlY3RlZCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBHaXZlbiB0aGUgZmlsZSBuYW1lLCBwYXJlbnQgZWxlbWVudCBuYW1lLCB0aGUgZWxlbWVudCB0byBhbmFseXplIGFuZCB0aGUgdHlwZSBvZiBlbGVtZW50Ci0gICAqIHNldHMgdXAgdGhlIFdTRExBbmFseXplciB0byBhbmFseXplIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gZmlsZU5hbWUgbG9nIGZpbGUgbmFtZS4KLSAgICogQHBhcmFtIHBhcmVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSAgYSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBlbGVtZW50TmFtZSB0aGUgZWxlbWVudCB0byBhbmFseXplLgotICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2lQcmVmZXJlbmNlcyB0aGUgcHJlZmVyZW5jZXMuCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFdTRExBbmFseXplcihTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBwYXJlbnROYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgZWxlbWVudE5hbWUsIFN0cmluZyBlbGVtZW50VHlwZSwgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gICAgdGhpcyhmaWxlTmFtZSwgd3NpUHJlZmVyZW5jZXMpOwotICAgIGFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QocGFyZW50TmFtZSwgbmFtZXNwYWNlLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpOwotCi0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEdpdmVuIHRoZSBmaWxlIG5hbWUsIHBhcmVudCBlbGVtZW50IG5hbWUsIHRoZSBlbGVtZW50IHRvIGFuYWx5emUgYW5kIHRoZSB0eXBlIG9mIGVsZW1lbnQKLSAgICogc2V0cyB1cCB0aGUgV1NETEFuYWx5emVyIHRvIGFuYWx5emUgdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50TmFtZSBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlICBhIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBlbGVtZW50IHRvIGFuYWx5emUuCi0gICAqIEBwYXJhbSBlbGVtZW50VHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gYWRkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgV1NETEFuYWx5emVyKFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIHBhcmVudE5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBlbGVtZW50TmFtZSwgU3RyaW5nIGVsZW1lbnRUeXBlKSB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgewotICAgIHRoaXMoZmlsZU5hbWUpOwotICAgIGFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QocGFyZW50TmFtZSwgbmFtZXNwYWNlLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpOwotCi0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSAgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMQW5hbHl6ZXIoU3RyaW5nIGZpbGVOYW1lLCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcykKLSAgewotICAgIHJlc2V0KGZpbGVOYW1lKTsKLSAgICB0aGlzLndzaVByZWZlcmVuY2VzID0gd3NpUHJlZmVyZW5jZXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSAgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMQW5hbHl6ZXIoU3RyaW5nIGZpbGVOYW1lKQotICB7Ci0gICAgcmVzZXQoZmlsZU5hbWUpOwotICAgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLSAgICB7Ci0gICAgICB0aGlzLndzaVByZWZlcmVuY2VzID0gV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuY2hlY2tXU0lQcmVmZXJlbmNlcyhmaWxlTmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gIAkgIHRoaXMud3NpUHJlZmVyZW5jZXMgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXMoZmlsZU5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBXU0lQcmVmZXJlbmNlcyBnZXRXU0lQcmVmZXJlbmNlcygpCi0gIHsKLQkgIHJldHVybiB0aGlzLndzaVByZWZlcmVuY2VzOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gICAqIFZhbGlkYXRlIHRoZSBXU0RMIGZpbGUgYXMgc2V0dXAgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgKiBAdGhyb3dzIFdTSUFuYWx5emVyRXhjZXB0aW9uIGlmIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZ2l2ZW4gV1NETCBGaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotCSAgaWYgKHdzaVByZWZlcmVuY2VzLmdldENvbXBsaWFuY2VMZXZlbCgpICE9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuSUdOT1JFX05PTl9XU0kpCi0JICB7Ci0gICAgICAgIC8vIGhlcmUncyB3aGVyZSB0aGUgdmFsaWRhdGlvbiBhY3R1YWxseSBzdGFydHMgaGFwcGVuaW5nCi0gICAgICAgIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyIGJwYW5hbHl6ZXIgPSBuZXcgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIoYW5hbHl6ZXJDb25maWdzLHdzZGxVUkkpOwotICAgICAgICBicGFuYWx5emVyLnZhbGlkYXRlQWxsKCk7Ci0gICAgICAgIFJlcG9ydEltcGwgcmVwb3J0ID0gKFJlcG9ydEltcGwpIGJwYW5hbHl6ZXIuZ2V0UmVwb3J0KCk7Ci0KLSAgICAgICAgTGlzdCBlbnRyaWVzID0gcmVwb3J0LmdldEVudHJpZXMoKTsKLQotICAgICAgICAvLyBpZiB0aGVyZSBhcmUgcmVwb3J0IGVudHJpZXMgd2UgaXRlcmF0ZSB0aHJvdWdoIHRoZW0gYW5kIGFkZCBhbGwKLSAgICAgICAgLy8gZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIGVycm9yIGxpc3QuIAotICAgICAgICBpZiAoZW50cmllcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaWVudHJ5ID0gZW50cmllcy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpZW50cnkuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBpZW50cnkubmV4dCgpOwotICAgICAgICAgICAgTWFwIGFzc2VydGlvblJlc3VsdHMgPSBlbnRyeS5nZXRBc3NlcnRpb25SZXN1bHRMaXN0KCk7Ci0KLSAgICAgICAgICAgIGlmIChhc3NlcnRpb25SZXN1bHRzICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEl0ZXJhdG9yIGlhc3NlcnRpb25SZXN1bHRzID0gYXNzZXJ0aW9uUmVzdWx0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAgIHdoaWxlIChpYXNzZXJ0aW9uUmVzdWx0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQgYXIgPSAoQXNzZXJ0aW9uUmVzdWx0KSBpYXNzZXJ0aW9uUmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgIC8vIGFkZCBpbiB0byBza2lwIGVycm9ycyBmb3IgYXNzZXJ0aW9ucyB0aGF0IGFyZSByZXBvcnRpbmcgaW5jb3JyZWN0IHByb2JsZW1zLgotICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG5vdCByZXBvcnQgaW5jb3JyZWN0IGVycm9ycyByZXBvcnRlZCBpbiB0aGUgdG9vbHMgd2l0aG91dCBkaXNhYmxpbmcgdGhlbQotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTdHJpbmcgYXNzZXJ0aW9uSWQgPSB0YS5nZXRJZCgpOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBib29sZWFuIGlnbm9yZUFzc2VydGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBmb3IoaW50IGkgPSBpZ25vcmVBc3NlcnRpb25zLmxlbmd0aC0xOyBpID49MDtpLS0pCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCWlmKGlnbm9yZUFzc2VydGlvbnNbaV0uZXF1YWxzSWdub3JlQ2FzZShhc3NlcnRpb25JZCkpCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIAl7Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIAkJaWdub3JlQXNzZXJ0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCX0KLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZihpZ25vcmVBc3NlcnRpb24pCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCWNvbnRpbnVlOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGFyLmdldFJlc3VsdCgpLmVxdWFsc0lnbm9yZUNhc2UoRkFJTEVEKSAmJiAKLSAgICAgICAgICAgICAgICAJd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGEuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3QgZXJyb3JNZXNzYWdlTGlzdCA9IGFyLmdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlTGlzdC5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVycm9yTWVzc2FnZXMuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmVEZXRhaWxJbXBsIGZkaSA9IChGYWlsdXJlRGV0YWlsSW1wbCkgZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudExvY2F0aW9uIGVsID0gZmRpLmdldEVsZW1lbnRMb2NhdGlvbigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciA9IGVsLmdldExpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbmVycm9ycy5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBc3NlcnRpb25FcnJvcih0YS5nZXRJZCgpLCB0YS5nZXRGYWlsdXJlTWVzc2FnZSgpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVycm9yTWVzc2FnZUxpc3QgaXMgbnVsbCBidXQgdGhlcmUgaXMgYW4gZXJyb3Igc28gYXNzaWduIGl0IHRvIGxpbmUgMCBmb3Igbm93Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbmVycm9ycy5hZGQobmV3IEFzc2VydGlvbkVycm9yKHRhLmdldElkKCksIHRhLmdldEZhaWx1cmVNZXNzYWdlKCksIDAsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhci5nZXRSZXN1bHQoKS5lcXVhbHNJZ25vcmVDYXNlKEZBSUxFRCkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuV0FSTl9OT05fV1NJKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGEuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3QgZXJyb3JNZXNzYWdlTGlzdCA9IGFyLmdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlTGlzdC5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChlcnJvck1lc3NhZ2VzLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpIGVycm9yTWVzc2FnZXMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbCA9IGZkaS5nZXRFbGVtZW50TG9jYXRpb24oKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBlbC5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlciA9IGVsLmdldENvbHVtbk51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9ud2FybmluZ3MuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXNzZXJ0aW9uRXJyb3IodGEuZ2V0SWQoKSwgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlcnJvck1lc3NhZ2VMaXN0IGlzIG51bGwgYnV0IHRoZXJlIGlzIGFuIGVycm9yIHNvIGFzc2lnbiBpdCB0byBsaW5lIDAgZm9yIG5vdwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb253YXJuaW5ncy5hZGQobmV3IEFzc2VydGlvbkVycm9yKHRhLmdldElkKCksIHRhLmdldEZhaWx1cmVNZXNzYWdlKCksIDAsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCSAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJQW5hbHl6ZXJFeGNlcHRpb24oZSArICJUaGUgV1NETEFuYWx5emVyIHdhcyB1bmFibGUgdG8gdmFsaWRhdGUgdGhlIGdpdmVuIFdTREwgRmlsZS4iKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBBZGQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIHBhcmVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSAgYSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBlbGVtZW50TmFtZSB0aGUgZWxlbWVudCB0byBhbmFseXplLgotICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29uZmlndXJhdGlvblRvVGVzdCgKLSAgICBTdHJpbmcgcGFyZW50TmFtZSwKLSAgICBTdHJpbmcgbmFtZXNwYWNlLAotICAgIFN0cmluZyBlbGVtZW50TmFtZSwKLSAgICBTdHJpbmcgZWxlbWVudFR5cGUpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gIAl0cnkKLSAgCXsKLSAgICAgIFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSA9IG5ldyBXU0RMUmVmZXJlbmNlSW1wbCgpOwotCi0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0VHlwZShlbGVtZW50VHlwZSk7Ci0gICAgICBpZiAocGFyZW50TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB3c2RsRWxlbWVudC5zZXRQYXJlbnRFbGVtZW50TmFtZShwYXJlbnROYW1lKTsKLSAgICAgIH0KLSAgICAgIHdzZGxFbGVtZW50LnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShlbGVtZW50TmFtZSk7Ci0gICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLQotICAgICAgd3NkbFJlZmVyZW5jZS5zZXRXU0RMTG9jYXRpb24od3NkbFVSSSk7Ci0gICAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAvLyBJbml0aWFsaXplIHRoZSBCYXNpY1Byb2ZpbGVBbmFseXplciB1c2luZyBhbiBhbmFseXplcmNvbmZpZyBvYmplY3QKLSAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyY29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld0FuYWx5emVyQ29uZmlnKCk7Ci0KLSAgICAgIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXJvID0gbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0gICAgICBhcm8uc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlLm5ld0luc3RhbmNlKE5PVFBBU1NFRCkpOwotICAgICAgYXJvLnNldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbihmYWxzZSk7Ci0gICAgICBhcm8uc2V0U2hvd0ZhaWx1cmVEZXRhaWwoZmFsc2UpOwotICAgICAgYXJvLnNldFNob3dGYWlsdXJlTWVzc2FnZShmYWxzZSk7Ci0gICAgICBhcm8uc2V0U2hvd01lc3NhZ2VFbnRyeShmYWxzZSk7Ci0KLSAgICAgIC8vIGFsdGhvdWdoIHdlIGRvbid0IHVzZSBhIHN0eWxlc2hlZXQgZm9yIG91ciBhcHBsaWNhdGlvbiBpdCBpcyByZXF1aXJlZCBvciB0aGUgCi0gICAgICAvLyBXUy1JIHRvb2xzIHdpbGwgZmFpbAotICAgICAgQWRkU3R5bGVTaGVldCBhZGRzdHlsZXNoZWV0ID0gbmV3IEFkZFN0eWxlU2hlZXRJbXBsKCk7Ci0KLSAgICAgIGFuYWx5emVyY29uZmlnLnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oYXJvKTsKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkc3R5bGVzaGVldCk7Ci0gICAgICBhbmFseXplcmNvbmZpZy5zZXRSZXBsYWNlUmVwb3J0KHRydWUpOwotICAgICAgLy9hbmFseXplcmNvbmZpZy5zZXRMb2dMb2NhdGlvbihmaWxlbmFtZSk7Ci0gICAgICBhbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24od3NpUHJlZmVyZW5jZXMuZ2V0VEFERmlsZSgpKTsKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldFZlcmJvc2VPcHRpb24oZmFsc2UpOwotCi0gICAgICAvLyBzZXQgdGhlIHdzZGxSZWZlcmVuY2UKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldFdTRExSZWZlcmVuY2Uod3NkbFJlZmVyZW5jZSk7Ci0gICAgICBhbmFseXplckNvbmZpZ3MuYWRkKGFuYWx5emVyY29uZmlnKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lBbmFseXplckV4Y2VwdGlvbigiVW5hYmxlIHRvIGFkZCBBbmFseXplckNvbmZpZyB0byBsaXN0LiAiICsgZSk7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgKiBNZXRob2QgZ2V0QXNzZXJ0aW9uRmFpbHVyZXMuCi0gICAqIFJldHVybiBhIGxpc3Qgb2YgdGhlIGFzc2VydGlvbiBmYWlsdXJlcy4KLSAgICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIGFzc2VydGlvbiBmYWlsdXJlcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEFzc2VydGlvbkVycm9ycygpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9uZXJyb3JzOwotICB9Ci0KLSAgLyoqCi0gIAkgKiBNZXRob2QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MuCi0gIAkgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gIAkgKiBAcmV0dXJuIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gIAkgKi8KLSAgcHVibGljIExpc3QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbndhcm5pbmdzOwotICB9Ci0gIAotICAvKioKLSAgICogUmVzZXQuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0JaWYgKGZpbGVuYW1lICE9IG51bGwpCi0JewotCSAgU3RyaW5nIHRtcCA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkgIGlmICgoIXRtcC5zdGFydHNXaXRoKFdTSUNvbnN0YW50cy5IVFRQX1BSRUZJWCkpICYmCi0gICAgICAgICAgKCF0bXAuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuRklMRV9QUkVGSVgpKSkKLQkgIHsKLQkgICAgdG1wID0gV1NJQ29uc3RhbnRzLkZJTEVfUFJPVE9DT0wgKyB0bXA7Ci0JICB9Ci0JICB0cnkKLQkgIHsKLQkgICAgd3NkbFVSSSA9IFVSSUVuY29kZXIuZW5jb2RlKHRtcCwgIlVURjgiKTsKLQkgIH0KLQkgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLQkgIHsKLQkgIH0KLQl9Ci0gIAlhbmFseXplckNvbmZpZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gIAlhc3NlcnRpb25lcnJvcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAlhc3NlcnRpb253YXJuaW5ncyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTSUFuYWx5emVyRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQW5hbHl6ZXJFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3Nzg1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQW5hbHl6ZXJFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLS8qKgotICogQW5hbHl6ZXJFeGNlcHRpb24KLSAqIAotICogRXhjZXB0aW9uIHRvIGJlIHRocm93biBpZiBhbiBhbmFseXplciBmYWlscwotICovCi1wdWJsaWMgY2xhc3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODM1MTU4MzUwMjE5MTk0Njc3TDsKLQkvKioKLSAgICogVGhyb3dhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIFRocm93YWJsZSB0aHJvd2FibGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQW5hbHl6ZXJFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJQW5hbHl6ZXJFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQW5hbHl6ZXJFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBzIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFdTSUFuYWx5emVyRXhjZXB0aW9uKFN0cmluZyBzKQotICB7Ci0gICAgc3VwZXIocyk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFuIGV4Y2VwdGlvbiB3aXRoIGEgbWVzc2FnZSBhbmQgcmVsYXRlZCBleGNlcHRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbXNnICAgICAgICB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UKLSAgICogQHBhcmFtIHRocm93YWJsZSAgdGhyb3dhYmxlIHRoYXQgaXMgcmVsYXRlZCB0byB0aGlzIGV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIFdTSUFuYWx5emVyRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcihtc2cpOwotCi0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2UKLSAgICB0aGlzLnRocm93YWJsZSA9IHRocm93YWJsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QncyB2YWx1ZXMuCi0gICAqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZGV0YWlsIG1lc3NhZ2Ugb2YgdGhpcyB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoaXMgZXhjZXB0aW9uIHRvIGJlIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGVuY2Fwc3VsYXRlZCB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFRocm93YWJsZSBnZXRUYXJnZXRFeGNlcHRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRocm93YWJsZQotICAgIHJldHVybiB0aHJvd2FibGU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTSUJhc2ljUHJvZmlsZUFuYWx5emVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5YjkyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5CYXNpY1Byb2ZpbGVBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5kb2N1bWVudC5Eb2N1bWVudEZhY3RvcnlJbXBsOwotCi0vKioKLSAqIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyCi0gKiAKLSAqIEFuIGV4dGVuc2lvbiBvZiB0aGUgQmFzaWNQcm9maWxlQW5hbHl6ZXIgZnJvbSB0aGUgV1MtSSBUZXN0IFRvb2xzIHRoYXQKLSAqIGFsbG93cyBjYWxsaW5nIGNvZGUgdG8gZ2V0IHRoZSByZXBvcnQgZ2VuZXJhdGVkIGZyb20gV1MtSSB2YWxpZGF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIgZXh0ZW5kcyBCYXNpY1Byb2ZpbGVBbmFseXplcgotewotICAvKioKLSAgICogRGVmYXVsdCBkb2N1bWVudCBmYWN0b3J5IGNsYXNzIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfRE9DVU1FTlRfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c2kudGVzdC50b29scy51dGlsLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeUltcGwiOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gd3NkbFVSSSB0aGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWcsIFN0cmluZyB3c2RsVVJJKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhbmFseXplckNvbmZpZywgd3NkbFVSSSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb25maWcgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIoTGlzdCBhbmFseXplckNvbmZpZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIoYW5hbHl6ZXJDb25maWcpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1vbiBpbml0aWFsaXphdGlvbi4KLSAgICogQHBhcmFtIHRvb2xJbmZvIGEgVG9vbEluZm8gb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbml0KFRvb2xJbmZvIHRvb2xJbmZvKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLnRvb2xJbmZvID0gdG9vbEluZm87Ci0gICAgCi0gICAgLy8gQ3JlYXRlIG1lc3NhZ2UgbGlzdAotICAgIG1lc3NhZ2VMaXN0ID0gbmV3IE1lc3NhZ2VMaXN0KFJFU09VUkNFX0JVTkRMRV9OQU1FKTsKLQotICAgIC8vIENyZWF0ZSBwcm9maWxlIHZhbGlkYXRvciBmYWN0b3J5Ci0gICAgZmFjdG9yeSA9IFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgZG9jdW1lbnQgZmFjdG9yeQotICAgIGRvY3VtZW50RmFjdG9yeSA9IG5ldyBEb2N1bWVudEZhY3RvcnlJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFJlcG9ydC4KLSAgICogCi0gICAqIFJldHVybiB0aGUgUmVwb3J0IGdlbmVyYXRlZCBieSB0aGUgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiB0aGUgUmVwb3J0IGdlbmVyYXRlZCBieSB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnQgZ2V0UmVwb3J0KCkKLSAgewotICAgIHJldHVybiByZXBvcnRlci5nZXRSZXBvcnQoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sRW52aXJvbm1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xFbnZpcm9ubWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGJlZTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5YTUxJbmZvOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgVG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVG9vbEVudmlyb25tZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9FTlZJUk9OTUVOVDsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICAvL3B1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPSBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQ09NTU9OLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBUb29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBydW50aW1lTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ydW50aW1lLm5hbWUiKTsKLSAgcHJvdGVjdGVkIFN0cmluZyBydW50aW1lVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ydW50aW1lLnZlcnNpb24iKTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIG9zTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpOwotICBwcm90ZWN0ZWQgU3RyaW5nIG9zVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MudmVyc2lvbiIpOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgeG1sUGFyc2VyTmFtZSA9ICI/IjsKLSAgcHJvdGVjdGVkIFN0cmluZyB4bWxQYXJzZXJWZXJzaW9uID0gIj8iOwotCi0gIC8qKgotICAgKiBBZGRpdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MSW5mbyB4bWxJbmZvID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdG9vbCBydW50aW1lIGVudmlyb25tZW50LgotICAgKi8KLSAgcHVibGljIFRvb2xFbnZpcm9ubWVudCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIC8vIEZVVFVSRTogbWFkZSBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgWGVyY2VzIHdoZXJlIGdldFZlcnNpb24KLSAgICAgIC8vIGlzIG5vIGxvbmdlciBzdGF0aWNhbGx5IGF2YWlsYWJsZS4KLSAgICAgIC8vIHhtbFBhcnNlclZlcnNpb24gPSBuZXcgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5WZXJzaW9uKCkuZ2V0VmVyc2lvbigpOwotICAgICAgeG1sUGFyc2VyVmVyc2lvbiA9IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuVmVyc2lvbi5nZXRWZXJzaW9uKCk7Ci0KLSAgICAgIHhtbFBhcnNlck5hbWUgPSAiQXBhY2hlIFhlcmNlcyI7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEFERDogSG93IGVsc2UgY2FuIHdlIGdldCB0aGUgbmFtZSB2ZXJzaW9uIG51bWJlcgotICAgIH0KLQotICAgIGNhdGNoIChFcnJvciBlcnIpCi0gICAgewotICAgICAgLy8gQUREOiBIb3cgZWxzZSBjYW4gd2UgZ2V0IHRoZSBuYW1lIHZlcnNpb24gbnVtYmVyCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRvb2wgcnVudGltZSBlbnZpcm9ubWVudC4KLSAgICogQHBhcmFtIHhtbEluZm8gYWRkaXRpb25hbCB0b29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xFbnZpcm9ubWVudChYTUxJbmZvIHhtbEluZm8pCi0gIHsKLSAgICB0aGlzLnhtbEluZm8gPSB4bWxJbmZvOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG9zTmFtZS4KLSAgICogQHJldHVybiB0aGUgb3NOYW1lLgotICAgKiBAc2VlICNzZXRPU05hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T1NOYW1lKCkKLSAgewotICAgIHJldHVybiBvc05hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3NWZXJzaW9uLgotICAgKiBAcmV0dXJuIHRoZSBvc1ZlcnNpb24uCi0gICAqIEBzZWUgI3NldE9TVmVyc2lvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRPU1ZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIG9zVmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYXJzZXJOYW1lLgotICAgKiBAcmV0dXJuIHRoZSBwYXJzZXJOYW1lLgotICAgKiBAc2VlICNzZXRYTUxQYXJzZXJOYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFhNTFBhcnNlck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHhtbFBhcnNlck5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHJldHVybiB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHNlZSAjc2V0WE1MUGFyc2VyVmVyc2lvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRYTUxQYXJzZXJWZXJzaW9uKCkKLSAgewotICAgIHJldHVybiB4bWxQYXJzZXJWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJ1bnRpbWVOYW1lLgotICAgKiBAcmV0dXJuIHRoZSBydW50aW1lTmFtZS4KLSAgICogQHNlZSAjc2V0UnVudGltZU5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJ1bnRpbWVWZXJzaW9uLgotICAgKiBAcmV0dXJuIHRoZSBydW50aW1lVmVyc2lvbi4KLSAgICogQHNlZSAjc2V0UnVudGltZVZlcnNpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZVZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG9zTmFtZS4KLSAgICogQHBhcmFtIG9zTmFtZSB0aGUgb3NOYW1lIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0T1NOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPU05hbWUoU3RyaW5nIG9zTmFtZSkKLSAgewotICAgIHRoaXMub3NOYW1lID0gb3NOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG9zVmVyc2lvbi4KLSAgICogQHBhcmFtIG9zVmVyc2lvbiB0aGUgb3NWZXJzaW9uIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0T1NWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPU1ZlcnNpb24oU3RyaW5nIG9zVmVyc2lvbikKLSAgewotICAgIHRoaXMub3NWZXJzaW9uID0gb3NWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHBhcnNlck5hbWUuCi0gICAqIEBwYXJhbSB4bWxQYXJzZXJOYW1lIHRoZSBwYXJzZXJOYW1lIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0WE1MUGFyc2VyTmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0WE1MUGFyc2VyTmFtZShTdHJpbmcgeG1sUGFyc2VyTmFtZSkKLSAgewotICAgIHRoaXMueG1sUGFyc2VyTmFtZSA9IHhtbFBhcnNlck5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHBhcmFtIHhtbFBhcnNlclZlcnNpb24gdGhlIHBhcnNlclZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRYTUxQYXJzZXJWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRYTUxQYXJzZXJWZXJzaW9uKFN0cmluZyB4bWxQYXJzZXJWZXJzaW9uKQotICB7Ci0gICAgdGhpcy54bWxQYXJzZXJWZXJzaW9uID0geG1sUGFyc2VyVmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBydW50aW1lTmFtZS4KLSAgICogQHBhcmFtIHJ1bnRpbWVOYW1lIHRoZSBydW50aW1lTmFtZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJ1bnRpbWVOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lTmFtZShTdHJpbmcgcnVudGltZU5hbWUpCi0gIHsKLSAgICB0aGlzLnJ1bnRpbWVOYW1lID0gcnVudGltZU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcnVudGltZVZlcnNpb24uCi0gICAqIEBwYXJhbSBydW50aW1lVmVyc2lvbiB0aGUgcnVudGltZVZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRSdW50aW1lVmVyc2lvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UnVudGltZVZlcnNpb24oU3RyaW5nIHJ1bnRpbWVWZXJzaW9uKQotICB7Ci0gICAgdGhpcy5ydW50aW1lVmVyc2lvbiA9IHJ1bnRpbWVWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB4bWxJbmZvIGFkZGl0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxUb29sRW52aXJvbm1lbnQoWE1MSW5mbyB4bWxJbmZvKQotICB7Ci0gICAgdGhpcy54bWxJbmZvID0geG1sSW5mbzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4gCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICB0aGUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiB0aGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICghbnNOYW1lLmVxdWFscygiIikpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gU3RhcnQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SVU5USU1FICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBydW50aW1lTmFtZSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1ZFUlNJT04gKyAiPVwiIiArIHJ1bnRpbWVWZXJzaW9uICsgIlwiLz4iKTsKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9PUEVSQVRJTkdfU1lTVEVNICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBvc05hbWUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyBvc1ZlcnNpb24gKyAiXCIvPiIpOwotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1hNTF9QQVJTRVIgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX05BTUUgKyAiPVwiIiArIHhtbFBhcnNlck5hbWUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyB4bWxQYXJzZXJWZXJzaW9uICsgIlwiLz4iKTsKLQotICAgIC8vIElmIGFkZHRpb25hbCBpbmZvLCB0aGVuIGdldCBpdAotICAgIGlmICh4bWxJbmZvICE9IG51bGwpCi0gICAgICBwdy5wcmludCh4bWxJbmZvLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvVG9vbEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5N2VmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuWE1MSW5mbzsKLQotLyoqCi0gKiBJbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyBhIGNvbmZvcm1hbmNlIHRvb2wuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVG9vbEluZm8KLXsKLSAgLyoqCi0gICAqIFRvb2wgaW5mb3JtYXRpb24gcHJvcGVydHkgbmFtZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfVkVSU0lPTiA9ICJ3c2kudG9vbC52ZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9UT09MX1JFTEVBU0VfREFURSA9ICJ3c2kudG9vbC5yZWxlYXNlLmRhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfSU1QTEVNRU5URVIgPSAid3NpLnRvb2wuaW1wbGVtZW50ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfTE9DQVRJT04gPSAid3NpLnRvb2wubG9jYXRpb24iOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IHRvb2wgaW5mb3JtYXRpb24gcHJvcGVydHkgdmFsdWVzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9UT09MX1ZFUlNJT04gPSAiMS4wLjEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1RPT0xfUkVMRUFTRV9EQVRFID0gIjIwMDQtMDEtMjIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1RPT0xfSU1QTEVNRU5URVIgPSAiRWNsaXBzZS5vcmcgT3JnYW5pemF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9UT09MX0xPQ0FUSU9OID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3N2dCI7Ci0KLSAgLyoqCi0gICAqIFRvb2wgaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdmVyc2lvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWxlYXNlRGF0ZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBpbXBsZW1lbnRlcjsKLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvbjsKLQotICAvKioKLSAgICogVG9vbCBlbnZpcm9ubWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBUb29sRW52aXJvbm1lbnQgdG9vbEVudmlyb25tZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogVG9vbCBpbmZvIHByb3BlcnRpZXMgZmlsZW5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0ZJTEVOQU1FID0gIm9yZy53c2kudGVzdC50b29saW5mbyI7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xJbmZvKCkKLSAgewotICAgIHRoaXMudG9vbEVudmlyb25tZW50ID0gbmV3IFRvb2xFbnZpcm9ubWVudCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSB0b29sIGluZm9ybWF0aW9uIGZyb20gaW5mb3JtYXRpb24gaW4gdGhlIHRvb2xpbmZvLnByb3BlcnRpZXMgZmlsZS4KLSAgICogQHBhcmFtIG5hbWUgIHRoZSB0b29sIG5hbWUuCi0gICAqLwotICBwdWJsaWMgVG9vbEluZm8oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotCi0gICAgZ2V0UHJvcGVydGllcygpOwotCi0gICAgdGhpcy50b29sRW52aXJvbm1lbnQgPSBuZXcgVG9vbEVudmlyb25tZW50KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSBuYW1lICAgICAgICAgdGhlIHRvb2wgbmFtZS4KLSAgICogQHBhcmFtIHZlcnNpb24gICAgICB0aGUgdmVyc2lvbiBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIHJlbGVhc2VEYXRlICB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoZSB0b29sLgotICAgKiBAcGFyYW0gaW1wbGVtZW50ZXIgIHRoZSBpbXBsZW1lbnRlciBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIGxvY2F0aW9uICAgICB0aGUgaW1wbGVtZW50ZXIgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgVG9vbEluZm8oCi0gICAgU3RyaW5nIG5hbWUsCi0gICAgU3RyaW5nIHZlcnNpb24sCi0gICAgU3RyaW5nIHJlbGVhc2VEYXRlLAotICAgIFN0cmluZyBpbXBsZW1lbnRlciwKLSAgICBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gICAgdGhpcy5yZWxlYXNlRGF0ZSA9IHJlbGVhc2VEYXRlOwotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0KLSAgICB0aGlzLnRvb2xFbnZpcm9ubWVudCA9IG5ldyBUb29sRW52aXJvbm1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgdG9vbCBpbmZvcm1hdGlvbiB3aXRoIHRvb2wgdW5pcXVlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gbmFtZSAgICAgICAgIHRoZSB0b29sIG5hbWUuCi0gICAqIEBwYXJhbSB2ZXJzaW9uICAgICAgdGhlIHZlcnNpb24gb2YgdGhlIHRvb2wuCi0gICAqIEBwYXJhbSByZWxlYXNlRGF0ZSAgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIGltcGxlbWVudGVyICB0aGUgaW1wbGVtZW50ZXIgb2YgdGhlIHRvb2wuCi0gICAqIEBwYXJhbSBsb2NhdGlvbiAgICAgdGhlIGltcGxlbWVudGVyIGxvY2F0aW9uLgotICAgKiBAcGFyYW0geG1sSW5mbyAgICAgIGFkZGl0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyBUb29sSW5mbygKLSAgICBTdHJpbmcgbmFtZSwKLSAgICBTdHJpbmcgdmVyc2lvbiwKLSAgICBTdHJpbmcgcmVsZWFzZURhdGUsCi0gICAgU3RyaW5nIGltcGxlbWVudGVyLAotICAgIFN0cmluZyBsb2NhdGlvbiwKLSAgICBYTUxJbmZvIHhtbEluZm8pCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gICAgdGhpcy5yZWxlYXNlRGF0ZSA9IHJlbGVhc2VEYXRlOwotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0KLSAgICB0aGlzLnRvb2xFbnZpcm9ubWVudCA9IG5ldyBUb29sRW52aXJvbm1lbnQoeG1sSW5mbyk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG5hbWUuCi0gICAqIEByZXR1cm4gbmFtZS4KLSAgICogQHNlZSAjc2V0TmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB2ZXJzaW9uLgotICAgKiBAcmV0dXJuIHZlcnNpb24uCi0gICAqIEBzZWUgI3NldFZlcnNpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gdmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcmVsZWFzZSBkYXRlLgotICAgKiBAcmV0dXJuIHJlbGVhc2UgZGF0ZS4KLSAgICogQHNlZSAjc2V0UmVsZWFzZURhdGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVsZWFzZURhdGUoKQotICB7Ci0gICAgcmV0dXJuIHJlbGVhc2VEYXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBpbXBsZW1lbnRlci4KLSAgICogQHJldHVybiBpbXBsZW1lbnRlci4KLSAgICogQHNlZSAjc2V0SW1wbGVtZW50ZXIKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW1wbGVtZW50ZXIoKQotICB7Ci0gICAgcmV0dXJuIGltcGxlbWVudGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBpbXBsZW1lbnRlciBsb2NhdGlvbi4KLSAgICogQHJldHVybiBpbXBsZW1lbnRlciBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRvb2xFbnZpcm9ubWVudC4KLSAgICogQHJldHVybiBUb29sRW52aXJvbm1lbnQKLSAgICogQHNlZSAjc2V0VG9vbEVudmlyb25tZW50Ci0gICAqLwotICBwdWJsaWMgVG9vbEVudmlyb25tZW50IGdldFRvb2xFbnZpcm9ubWVudCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbEVudmlyb25tZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGltcGxlbWVudGVyLgotICAgKiBAcGFyYW0gaW1wbGVtZW50ZXIgdGhlIGltcGxlbWVudGVyIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0SW1wbGVtZW50ZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEltcGxlbWVudGVyKFN0cmluZyBpbXBsZW1lbnRlcikKLSAgewotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvY2F0aW9uIHRoZSBsb2NhdGlvbiB0byBzZXQuCi0gICAqIEBzZWUgI2dldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgbmFtZS4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgdG8gc2V0LgotICAgKiBAc2VlICNnZXROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSByZWxlYXNlRGF0ZS4KLSAgICogQHBhcmFtIHJlbGVhc2VEYXRlIHRoZSByZWxlYXNlRGF0ZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJlbGVhc2VEYXRlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWxlYXNlRGF0ZShTdHJpbmcgcmVsZWFzZURhdGUpCi0gIHsKLSAgICB0aGlzLnJlbGVhc2VEYXRlID0gcmVsZWFzZURhdGU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdG9vbEVudmlyb25tZW50LgotICAgKiBAcGFyYW0gdG9vbEVudmlyb25tZW50IHRoZSB0b29sRW52aXJvbm1lbnQgdG8gc2V0LgotICAgKiBAc2VlICNnZXRUb29sRW52aXJvbm1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRvb2xFbnZpcm9ubWVudChUb29sRW52aXJvbm1lbnQgdG9vbEVudmlyb25tZW50KQotICB7Ci0gICAgdGhpcy50b29sRW52aXJvbm1lbnQgPSB0b29sRW52aXJvbm1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdG9vbEVudmlyb25tZW50LgotICAgKiBAcGFyYW0geG1sSW5mbyBhZGRpdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRpdGlvbmFsVG9vbEVudmlyb25tZW50KFhNTEluZm8geG1sSW5mbykKLSAgewotICAgIHRoaXMudG9vbEVudmlyb25tZW50LnNldEFkZGl0aW9uYWxUb29sRW52aXJvbm1lbnQoeG1sSW5mbyk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdmVyc2lvbi4KLSAgICogQHBhcmFtIHZlcnNpb24gdGhlIHZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJzaW9uKFN0cmluZyB2ZXJzaW9uKQotICB7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gc3RhcnQgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgIHRoZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIHRoZSBzdGFydCBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCFuc05hbWUuZXF1YWxzKCIiKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIGdldE5hbWUoKS50b0xvd2VyQ2FzZSgpICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyBnZXRWZXJzaW9uKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFTEVBU0VfREFURSArICI9XCIiICsgZ2V0UmVsZWFzZURhdGUoKSArICJcIj4iKTsKLQotICAgIHB3LnByaW50KCIgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9JTVBMRU1FTlRFUiArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSArICI9XCIiICsgZ2V0SW1wbGVtZW50ZXIoKSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OICsgIj1cIiIgKyBnZXRMb2NhdGlvbigpICsgIlwiLz4iKTsKLQotICAgIC8vIEVudmlyb25tZW50Ci0gICAgcHcucHJpbnQodG9vbEVudmlyb25tZW50LnRvWE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZW5kIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICB0aGUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiB0aGUgZW5kIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCFuc05hbWUuZXF1YWxzKCIiKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICBwdy5wcmludGxuKCIgIDwvIiArIG5zTmFtZSArIGdldE5hbWUoKS50b0xvd2VyQ2FzZSgpICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB2YWx1ZXMgZnJvbSB0aGUgdG9vbHMucHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZ2V0UHJvcGVydGllcygpCi0gIHsKLSAgICAvL1Byb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotICAgIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVHJ5IHRvIGxvYWQgcHJvcGVydGllcyBmcm9tIHdzaS5wcm9wZXJ0aWVzCi0gICAgICAvL0lucHV0U3RyZWFtIGlzID0gVXRpbHMuZ2V0SW5wdXRTdHJlYW0oUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIExvYWQgcHJvcGVydGllcyBmcm9tIGZpbGUKLSAgICAgIC8vcHJvcHMubG9hZChpcyk7Ci0KLSAgICAgIC8vIEdldCByZXNvdXJjZQotICAgICAgcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIEdldCBwcm9wZXJ0eSB2YWx1ZXMKLSAgICAgIHRoaXMudmVyc2lvbiA9Ci0gICAgICAgIGdldFByb3BlcnR5KHJlc291cmNlQnVuZGxlLCBQUk9QX1RPT0xfVkVSU0lPTiwgREVGX1RPT0xfVkVSU0lPTik7Ci0gICAgICB0aGlzLnJlbGVhc2VEYXRlID0KLSAgICAgICAgZ2V0UHJvcGVydHkoCi0gICAgICAgICAgcmVzb3VyY2VCdW5kbGUsCi0gICAgICAgICAgUFJPUF9UT09MX1JFTEVBU0VfREFURSwKLSAgICAgICAgICBERUZfVE9PTF9SRUxFQVNFX0RBVEUpOwotICAgICAgdGhpcy5pbXBsZW1lbnRlciA9Ci0gICAgICAgIGdldFByb3BlcnR5KAotICAgICAgICAgIHJlc291cmNlQnVuZGxlLAotICAgICAgICAgIFBST1BfVE9PTF9JTVBMRU1FTlRFUiwKLSAgICAgICAgICBERUZfVE9PTF9JTVBMRU1FTlRFUik7Ci0gICAgICB0aGlzLmxvY2F0aW9uID0KLSAgICAgICAgZ2V0UHJvcGVydHkocmVzb3VyY2VCdW5kbGUsIFBST1BfVE9PTF9MT0NBVElPTiwgREVGX1RPT0xfTE9DQVRJT04pOwotICAgIH0KLQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBsb2FkaW5nIHByb3BlcnRpZXM6ICAiICsgZS50b1N0cmluZygpKTsKLQotICAgICAgLy8gU2V0IGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzCi0gICAgICB0aGlzLnZlcnNpb24gPSBERUZfVE9PTF9WRVJTSU9OOwotICAgICAgdGhpcy5yZWxlYXNlRGF0ZSA9IERFRl9UT09MX1JFTEVBU0VfREFURTsKLSAgICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBERUZfVE9PTF9JTVBMRU1FTlRFUjsKLSAgICAgIHRoaXMubG9jYXRpb24gPSBERUZfVE9PTF9MT0NBVElPTjsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHByb3BlcnR5LgotICAgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgIGEgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlICAgIGEgZGVmYXVsdCB2YWx1ZS4KLSAgICogQHJldHVybiBwcm9wZXJ0eS4gSWYgbm90IGZvdW5kIHJldHVybiBkZWZhdWx0IHZhbHVlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9wZXJ0eSgKLSAgICBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZSwKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBkZWZhdWx0VmFsdWUpCi0gIHsKLSAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICBpZiAoKHZhbHVlID0gcmVzb3VyY2VCdW5kbGUuZ2V0U3RyaW5nKGtleSkpID09IG51bGwpCi0gICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLQotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgdGhlIHRvb2xzLnByb3BlcnRpZXMgZmlsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAqIFRoZSBpbnB1dCBhcmd1ZW1lbnRzIGFyZToKLSAgICogPG9sPgotICAgKiA8bGk+RmlsZW5hbWUgZm9yIHRoZSBwcm9wZXJ0aWVzIGZpbGUgdG8gY3JlYXRlCi0gICAqIDxsaT5WZXJzaW9uIG51bWJlcgotICAgKiA8bGk+Ci0gICAqIDwvb2w+Ci0gICAqIEBwYXJhbSBhcmdzICB0aGUgYXJndW1lbnRzIGZvciBtYWluLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGludCBzdGF0dXNDb2RlID0gMDsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBQUk9QX0ZJTEVOQU1FOwotICAgIFN0cmluZyB2ZXJzaW9uID0gREVGX1RPT0xfVkVSU0lPTjsKLSAgICBTdHJpbmcgaW1wbGVtZW50ZXIgPSBERUZfVE9PTF9JTVBMRU1FTlRFUjsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBERUZfVE9PTF9MT0NBVElPTjsKLQotICAgIC8vIFNldCB0aGUgZmlsZSBuYW1lCi0gICAgaWYgKGFyZ3MubGVuZ3RoID49IDEpCi0gICAgICBmaWxlbmFtZSA9IGFyZ3NbMF07Ci0KLSAgICBpZiAoYXJncy5sZW5ndGggPj0gMikKLSAgICAgIHZlcnNpb24gPSBhcmdzWzFdOwotCi0gICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpCi0gICAgICBpbXBsZW1lbnRlciA9IGFyZ3NbMl07Ci0KLSAgICBpZiAoYXJncy5sZW5ndGggPj0gNCkKLSAgICAgIGxvY2F0aW9uID0gYXJnc1szXTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSBmaWxlIHdyaXRlcgotICAgICAgRmlsZVdyaXRlciBmaWxlV3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoZmlsZW5hbWUpOwotCi0gICAgICAvLyBDcmVhdGUgcHJpbnQgd3JpdGVyCi0gICAgICBQcmludFdyaXRlciBwcmludFdyaXRlciA9IG5ldyBQcmludFdyaXRlcihmaWxlV3JpdGVyKTsKLQotICAgICAgLy8gV3JpdGUgb3V0IGNvbnRlbnRzIG9mIHByb3BlcnRpZXMgZmlsZQotICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbihDT01NRU5UUyk7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9WRVJTSU9OICsgIj0iICsgdmVyc2lvbik7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9SRUxFQVNFX0RBVEUgKyAiPSIgKyBVdGlscy5nZXREYXRlKCkpOwotICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbihQUk9QX1RPT0xfSU1QTEVNRU5URVIgKyAiPSIgKyBpbXBsZW1lbnRlcik7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9MT0NBVElPTiArICI9IiArIGxvY2F0aW9uKTsKLQotICAgICAgLy8gQ2xvc2UgZmlsZSB3cml0ZXIKLSAgICAgIGZpbGVXcml0ZXIuY2xvc2UoKTsKLQotICAgICAgLy8gRG9uZQotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaWxlIFsiICsgZmlsZW5hbWUgKyAiXSBjcmVhdGVkLiIpOwotICAgIH0KLQotICAgIGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICBzdGF0dXNDb2RlID0gMTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVhDRVBUSU9OOiAiICsgaW9lLnRvU3RyaW5nKCkpOwotICAgICAgaW9lLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIC8vIEV4aXQKLSAgICBTeXN0ZW0uZXhpdChzdGF0dXNDb2RlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NRU5UUyA9ICIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjN2M0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLS8qKgotICogV1MtSSBjb25zdGFudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgSmltIENsdW5lCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsIChndHVycmVsbEB1ay5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTSUNvbnN0YW50cyB7Ci0KLQkvKioKLQkgKiBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9ERUNMID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiI7Ci0KLQkvKioKLQkgKiBYTUwgbmFtZXNwYWNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfWE1MTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUwgPSAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI7Ci0JLyoqCi0JICogWE1MIHNjaGVtYSBuYW1lc3BhY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCi0JLyoqCi0JICogWE1MIHNjaGVtYSBsb2NhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYU0RfU0NIRU1BX0xPQ0FUSU9OID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIG5hbWVzcGFjZSBuYW1lLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfWFNEID0gInhzZCI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIGluc3RhbmNlIG5hbWVzcGFjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIG5hbWVzcGFjZSBuYW1lLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfWFNJID0gInhzaSI7Ci0KLQotCS8qKgotCSAqIFdTLUkgbWVzc2FnZSBsb2cgbmFtZXNwYWNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0xPRyA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfV1NJX0xPRyA9ICJ3c2ktbG9nIjsKLQotCS8qKgotCSAqIFdTLUkgY29uZm9ybWFuY2UgcmVwb3J0IG5hbWVzcGFjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9SRVBPUlQgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvcmVwb3J0LyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9XU0lfUkVQT1JUID0gIndzaS1yZXBvcnQiOwotCi0JLyoqCi0JICogV1MtSSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBuYW1lc3BhY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9XU0lfQVNTRVJUSU9OU18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL2Fzc2VydGlvbnMvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0FTU0VSVElPTlMgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvYXNzZXJ0aW9ucy8iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9XU0lfQVNTRVJUSU9OUyA9ICJ3c2ktYXNzZXJ0aW9ucyI7Ci0KLQkvKioKLQkgKiBXUy1JIG1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVzYXBjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJR18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL21vbml0b3JDb25maWcvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX01PTklUT1JfQ09ORklHID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIjsKLQkKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHID0gIndzaS1tb25Db25maWciOwotCi0JLyoqCi0JICogV1MtSSBhbmFseXplciBjb25maWd1cmF0aW9uIGZpbGUgbmFtZXNhcGNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0FOQUxZWkVSX0NPTkZJR18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL2FuYWx5emVyQ29uZmlnLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvYW5hbHl6ZXJDb25maWcvIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19OQU1FX1dTSV9BTkFMWVpFUl9DT05GSUcgPSAid3NpLWFuYWx5emVyQ29uZmlnIjsKLQotCS8qKgotCSAqIFdTLUkgY29tbW9uIG5hbWVzYXBjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9DT01NT05fMjAwMyA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwMy8wMy9jb21tb24vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0NPTU1PTiA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9jb21tb24vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19OQU1FX1dTSV9DT01NT04gPSAid3NpLWNvbW1vbiI7Ci0KLQkvKioKLQkgKiBTT0FQIFYxLjEgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIjsKLQotCS8qKgotCSAqIFNPQVAvMS4xIGVuY29kaW5nLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQX0VOQ09ESU5HID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX05FWFRfQUNUT1IgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0IiA7Ci0JLyoqCi0JICogSFRUUCB0cmFuc3BvcnQuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1NPQVBfSFRUUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiOwotCi0JLyoqCi0JICogV1NETCBWMS4xIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfV1NETCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7Ci0KLQkvKioKLQkgKiBXU0RMIFNPQVAgYmluZGluZyBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1dTRExfU09BUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfV1NETF9TT0FQMTIgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19OQU1FX1dTRExfU09BUCA9ICJzb2FwIjsKLQotCS8qKgotCSAqIFdTREwgTUlNRSBiaW5kaW5nIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19OQU1FX1dTRExfTUlNRSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsKLQotCS8qKgotCSAqIFdTREwgSFRUUCBHRVQgJiBQT1NUIGJpbmRpbmcgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX05BTUVfV1NETF9IVFRQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iOwotCi0JLyoqCi0JICogV1NETCBESU1FIGJpbmRpbmcgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX05BTUVfV1NETF9ESU1FID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDIvMDQvZGltZS93c2RsLyI7Ci0KLQkvKioKLQkgKiBDb25mb3JtYW5jZSBDbGFpbSBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX0NMQUlNID0gImh0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vIjsKLQotCS8qKgotCSAqIFVEREkgVjIgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9VRERJX1YyID0gInVybjp1ZGRpLW9yZzphcGlfdjIiOwotCi0JLyoqCi0JICogVGhlIFhNTCBTY2hlbWEgZm9yIHRoZSB0eXBlIHVzZWQgdG8gcmVmZXIgdG8gYXR0YWNobWVudHMgZnJvbSB0aGUgU09BUAotCSAqIGVudmVsb3BlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TV0FfUkVGID0gImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9iYXNpYy8xLjEveHNkIjsKLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNDSEVNQV9UWVBFX1NXQV9SRUYgPSAic3dhUmVmIjsKLQotCS8qKgotCSAqIEVsZW1lbnQgbmFtZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BRERfU1RZTEVfU0hFRVQgPSAiYWRkU3R5bGVTaGVldCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FERElUSU9OQUxfRU5UUllfVFlQRV9MSVNUID0gImFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQU5BTFlaRVJfRkFJTFVSRSA9ICJhbmFseXplckZhaWx1cmUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BUlRJRkFDVCA9ICJhcnRpZmFjdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FSVElGQUNUX1JFRkVSRU5DRSA9ICJhcnRpZmFjdFJlZmVyZW5jZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9DT1ZFUkFHRSA9ICJhc3NlcnRpb25Db3ZlcmFnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9ERVNDUklQVElPTiA9ICJhc3NlcnRpb25EZXNjcmlwdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9SRVNVTFQgPSAiYXNzZXJ0aW9uUmVzdWx0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQVNTRVJUSU9OX1JFU1VMVF9TVU1NQVJZID0gImFzc2VydGlvblJlc3VsdFN1bW1hcnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BU1NFUlRJT05fUkVTVUxUUyA9ICJhc3NlcnRpb25SZXN1bHRzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQ0xFQU5VUF9USU1FT1VUX1NFQ09ORFMgPSAiY2xlYW51cFRpbWVvdXRTZWNvbmRzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQ09ORklHID0gImNvbmZpZ3VyYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9DT01NRU5UID0gImNvbW1lbnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9DT05URVhUID0gImNvbnRleHQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9ERVRBSUwgPSAiZGV0YWlsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fREVUQUlMX0RFU0NSSVBUSU9OID0gImRldGFpbERlc2NyaXB0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9FTlZJUk9OTUVOVCA9ICJlbnZpcm9ubWVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0VOVFJZID0gImVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fRkFJTFVSRV9ERVRBSUwgPSAiZmFpbHVyZURldGFpbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0ZBSUxVUkVfREVUQUlMX0RFU0NSSVBUSU9OID0gImZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0ZBSUxVUkVfTUVTU0FHRSA9ICJmYWlsdXJlTWVzc2FnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0hUVFBfSEVBREVSUyA9ICJodHRwSGVhZGVycyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0lNUExFTUVOVEVSID0gImltcGxlbWVudGVyIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fSU5RVUlSWV9VUkwgPSAiaW5xdWlyeVVSTCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0xJU1RFTl9QT1JUID0gImxpc3RlblBvcnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9MT0cgPSAibG9nIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTE9HX0RVUkFUSU9OID0gImxvZ0R1cmF0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTE9HX0ZJTEUgPSAibG9nRmlsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01BTl9JTl9USEVfTUlERExFID0gIm1hbkluVGhlTWlkZGxlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUFYX0NPTk5FQ1RJT05TID0gIm1heENvbm5lY3Rpb25zIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUVTU0FHRV9DT05URU5UID0gIm1lc3NhZ2VDb250ZW50IjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01FU1NBR0VfQ09OVEVOVF9XSVRIX0FUVEFDSE1FTlRTID0gIm1lc3NhZ2VDb250ZW50V2l0aEF0dGFjaG1lbnRzIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01FU1NBR0VfRU5UUlkgPSAibWVzc2FnZUVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUVTU0FHRV9JTlBVVCA9ICJtZXNzYWdlSW5wdXQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NT05JVE9SID0gIm1vbml0b3IiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9PUEVSQVRJTkdfU1lTVEVNID0gIm9wZXJhdGluZ1N5c3RlbSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BSRVJFUV9GQUlMRURfTElTVCA9ICJwcmVyZXFGYWlsZWRMaXN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUFJFUkVRX0xJU1QgPSAicHJlcmVxTGlzdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BST0ZJTEUgPSAicHJvZmlsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BST0ZJTEVfQVNTRVJUSU9OUyA9ICJwcm9maWxlQXNzZXJ0aW9ucyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTID0gInJlYWRUaW1lb3V0U2Vjb25kcyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQgPSAicmVjZWl2ZXJIb3N0QW5kUG9ydCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFRElSRUNUID0gInJlZGlyZWN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUkVQT1JUID0gInJlcG9ydCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFUE9SVF9GSUxFID0gInJlcG9ydEZpbGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9SVU5USU1FID0gInJ1bnRpbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUID0gInNjaGVtZUFuZEhvc3RQb3J0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQgPSAic2VuZGVySG9zdEFuZFBvcnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9TRVJWSUNFX0xPQ0FUSU9OID0gInNlcnZpY2VMb2NhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1NVTU1BUlkgPSAic3VtbWFyeSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1RFU1RfQVNTRVJUSU9OID0gInRlc3RBc3NlcnRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0FTU0VSVElPTlNfRklMRSA9ICJ0ZXN0QXNzZXJ0aW9uc0ZpbGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0FTU0VSVElPTl9JRCA9ICJ0ZXN0QXNzZXJ0aW9uSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0NPVkVSQUdFID0gInRlc3RDb3ZlcmFnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1VERElfRU5UUlkgPSAidWRkaUVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fVURESV9LRVkgPSAidWRkaUtleSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1VERElfUkVGRVJFTkNFID0gInVkZGlSZWZlcmVuY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9WRVJCT1NFID0gInZlcmJvc2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX0VMRU1FTlQgPSAid3NkbEVsZW1lbnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX0lOUFVUID0gIndzZGxJbnB1dCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1dTRExfUkVGRVJFTkNFID0gIndzZGxSZWZlcmVuY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX1VSSSA9ICJ3c2RsVVJJIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fWE1MX1BBUlNFUiA9ICJ4bWxQYXJzZXIiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUlNRV9QQVJUID0gIm1pbWVQYXJ0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUlNRV9IRUFERVJTID0gIm1pbWVIZWFkZXJzIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01JTUVfQ09OVEVOVCA9ICJtaW1lQ29udGVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0JPVU5EQVJZX1NUUklORyA9ICJib3VuZGFyeVN0cmluZyI7Ci0KLQkvKioKLQkgKiBBdHRyaWJ1dGUgbmFtZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BTFRFUk5BVEUgPSAiYWx0ZXJuYXRlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQVJSQVlfVFlQRSA9ICJhcnJheVR5cGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BU1NFUlRJT05fREVTQ1JJUFRJT04gPSAiYXNzZXJ0aW9uRGVzY3JpcHRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9CT00gPSAiQk9NIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ0hBUlNFVCA9ICJjaGFyc2V0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ09ERSA9ICJjb2RlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ09MVU1OX05VTUJFUiA9ICJjb2x1bW5OdW1iZXIiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DT05WRVJTQVRJT05fSUQgPSAiY29udmVyc2F0aW9uSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DT1JSRUxBVElPTl9UWVBFID0gImNvcnJlbGF0aW9uVHlwZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0RBVEUgPSAiZGF0ZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0VOQUJMRUQgPSAiZW5hYmxlZCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0VOVFJZX1RZUEUgPSAiZW50cnlUeXBlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRkFJTFVSRV9NRVNTQUdFID0gImZhaWx1cmVNZXNzYWdlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRkFJTFVSRV9ERVRBSUwgPSAiZmFpbHVyZURldGFpbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0hSRUYgPSAiaHJlZiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lEID0gImlkIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSURfVUMgPSAiSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JTVBMRU1FTlRFUiA9ICJpbXBsZW1lbnRlciI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0xJTkVfTlVNQkVSID0gImxpbmVOdW1iZXIiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9MT0NBVElPTiA9ICJsb2NhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01FRElBID0gIm1lZGlhIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTUVTU0FHRV9FTlRSWSA9ICJtZXNzYWdlRW50cnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NRVNTQUdFUyA9ICJtZXNzYWdlcyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUUgPSAibmFtZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9QQVJFTlRfRUxFTUVOVF9OQU1FID0gInBhcmVudEVsZW1lbnROYW1lIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVGRVJFTkNFX0lEID0gInJlZmVyZW5jZUlEIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVGRVJFTkNFX1RZUEUgPSAicmVmZXJlbmNlVHlwZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFTEVBU0VfREFURSA9ICJyZWxlYXNlRGF0ZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFUExBQ0UgPSAicmVwbGFjZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFU1VMVCA9ICJyZXN1bHQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TRVJWSUNFX05BTUUgPSAic2VydmljZU5hbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TUEVDSUZJQ0FUSU9OID0gInNwZWNpZmljYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9USU1FU1RBTVAgPSAidGltZXN0YW1wIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVElUTEUgPSAidGl0bGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9UWVBFID0gInR5cGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9WRVJTSU9OID0gInZlcnNpb24iOwotCi0JLyoqCi0JICogRGVmYXVsdCB2YWx1ZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfVVJJID0gInJlcG9ydC54bWwiOwotCi0JLy8gVEVNUDogVXNlIHRoZSBmb2xsb3dpbmcgcmVwb3J0IHRpdGxlIGZvciB0aGUgZHJhZnQgcmVsZWFzZSBvbmx5LgotCS8vcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfVElUTEUgPSAiV1MtSSBQcm9maWxlCi0JLy8gQ29uZm9ybWFuY2UgUmVwb3J0IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1JFUE9SVF9USVRMRSA9ICJXUy1JIEJhc2ljIFByb2ZpbGUgQ29uZm9ybWFuY2UgUmVwb3J0LiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1RFU1RfQVNTRVJUSU9OU19ET0NVTUVOVF9VUkkgPSAiaHR0cDovL3d3dy53cy1pLm9yZy9UZXN0aW5nL1Rvb2xzLzIwMDQvMTIvQVAxMF9CUDExX1NTQlAxMF9UQUQueG1sIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTE9HX1hTTCA9ICIuLi9jb21tb24veHNsL2xvZy54c2wiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfWFNMID0gIi4uL2NvbW1vbi94c2wvcmVwb3J0LnhzbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1hTTF9UWVBFID0gInRleHQveHNsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfWE1MX0VOQ09ESU5HID0gIlVURi04IjsKLQotCS8qKgotCSAqIEJPTSBjb25zdGFudHMuCi0JICogIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgaW50IEJPTV9VVEYxNiA9IDB4RkZGRTsKLQotCXB1YmxpYyBzdGF0aWMgaW50IEJPTV9VVEYxNl9CSUdfRU5ESUFOID0gMHhGRUZGOwotCi0JcHVibGljIHN0YXRpYyBpbnQgQk9NX1VURjggPSAweEVGQkJCRjsKLQotCS8qKgotCSAqIFZhbGlkYXRpb24gY29uc3RhbnRzLgotCSAqICAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUID0gImxpdGVyYWwiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0VOQyA9ICJlbmNvZGVkIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQyA9ICJkb2N1bWVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMgPSAicnBjIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfQ09SUkVMQVRJT05fVFlQRV9FTkRQT0lOVCA9ICJlbmRwb2ludCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0KLQkvKioKLQkgKiBXUy1JIGNvbnN0YW50cyAtIGF0dHJpYnV0ZXMgZm9yIGNvbmZvcm1hbmNlIGNsYWltcyAoZGlzY292ZXJ5KS4KLQkgKiAgCi0JICovCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1VERElfQ0xBSU1fS0VZVkFMVUUgPSAiaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1VERElfQ0xBSU1fVE1PREVMS0VZID0gInV1aWQ6NjU3MTkxNjgtNzJjNi0zZjI5LThjMjAtNjJkZWZiMDk2MWMwIjsKLQotCS8qKgotCSAqIFdTLUkgbmFtZXMgYW5kIHZlcnNpb25zIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50IHN1cHBvcnRlZAotCSAqIGluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHRlc3QgdG9vbHMuCi0gICAgICovCi0JLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV9UQURfTkFNRSA9ICJCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV8xXzFfVEFEX05BTUUgPSAiQmFzaWMgUHJvZmlsZSAxLjEgVGVzdCBBc3NlcnRpb25zIjsKLSAgICAvKiogQGRlcHJlY2F0ZWQgLS0gdGhpcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgVEFEIHJlZ2lzdHJ5IG1lY2hhbmlzbS4gKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSU1QTEVfU09BUF9CSU5ESU5HU19QUk9GSUxFX1RBRF9OQU1FID0gIlNpbXBsZSBTb2FwIEJpbmRpbmcgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdKSBUZXN0IEFzc2VydGlvbnMiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVEFDSE1FTlRTX1BST0ZJTEVfVEFEX05BTUUgPSAiQXR0YWNobWVudHMgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdIGFuZCBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUgWzEuMF0pIFRlc3QgQXNzZXJ0aW9ucyI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV9UQURfVkVSU0lPTiA9ICIxLjEuMCI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV8xXzFfVEFEX1ZFUlNJT04gPSAiMS4xLjAiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVBMRV9TT0FQX0JJTkRJTkdTX1BST0ZJTEVfVEFEX1ZFUlNJT04gPSAiMS4wLjAiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVEFDSE1FTlRTX1BST0ZJTEVfVEFEX1ZFUlNJT04gPSAiMS4wLjAiOwotCi0JLyoqCi0JICogU3lzdGVtIGRlcGVuZGVudCBsaW5lIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElORV9TRVBBUkFUT1IgPSBTeXN0ZW0KLQkJCS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotCS8qKgotCSAqIFN5c3RlbSBkZXBlbmRlbnQgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfU0VQQVJBVE9SID0gU3lzdGVtCi0JCQkuZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0KLQkvKioKLQkgKiBGaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBjb3B5cmlnaHQsIGxpY2Vuc2UgYW5kIGZlZWRiYWNrIGNvbW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlRTX0ZJTEUgPSAiY29tbWVudHMueG1sIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX1RZUEVfVEVYVF9YTUwgPSAidGV4dC94bWwiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfVFlQRV9NVUxUSVBBUlQgPSAibXVsdGlwYXJ0L3JlbGF0ZWQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZToiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfUFJFRklYID0gImh0dHA6IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0lfUFJFRklYID0gIldTLUk6ICI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZlOGRiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci0KLS8qKgotICogUHJpbWFyeSBXUy1JIGV4Y2VwdGlvbi4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLSAgICogU3RhdGljIG5lZWRlZCBmb3Igc2VyaWFsaXphYmxlIGNsYXNzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA1NDQ2ODIzMjIyNzY3Mjk5MzA4TDsKLQotICAvKioKLSAgICogVGhyb3dhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIFRocm93YWJsZSB0aHJvd2FibGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gZXhjZXB0aW9uIHdpdGhvdXQgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFdTSUV4Y2VwdGlvbigpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBleGNlcHRpb24gd2l0aCBhIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbXNnIHRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKi8KLSAgcHVibGljIFdTSUV4Y2VwdGlvbihTdHJpbmcgbXNnKQotICB7Ci0gICAgLy8gRXhjZXB0aW9uCi0gICAgc3VwZXIobXNnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gZXhjZXB0aW9uIHdpdGggYSBtZXNzYWdlIGFuZCByZWxhdGVkIGV4Y2VwdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBtc2cgICAgICAgIHRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKiBAcGFyYW0gdGhyb3dhYmxlICB0aHJvd2FibGUgdGhhdCBpcyByZWxhdGVkIHRvIHRoaXMgZXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgV1NJRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcihtc2cpOwotCi0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2UKLSAgICB0aGlzLnRocm93YWJsZSA9IHRocm93YWJsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QncyB2YWx1ZXMuCi0gICAqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZGV0YWlsIG1lc3NhZ2Ugb2YgdGhpcyB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0J3MgdmFsdWVzLgotICAgKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGRldGFpbCBtZXNzYWdlIG9mIHRoaXMgdGhyb3dhYmxlIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgLy9TdHJpbmdXcml0ZXIgc3c7Ci0gICAgLy9QcmludFdyaXRlciBwdzsKLQotICAgIC8vIEFsd2F5cyBnZXQgbWVzc2FnZSBmcm9tIHN1cGVyIGNsYXNzCi0gICAgU3RyaW5nIG1zZyA9IHN1cGVyLmdldE1lc3NhZ2UoKTsKLQotICAgIC8vIElmIHRoaXMgZXhjZXB0aW9uIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgZXhjZXB0aW9uLAotICAgIC8vIHRoZW4gYWRkIGl0IHRvIHRoZSBtZXNzYWdlCi0gICAgaWYgKHRocm93YWJsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIG1zZyArPSAiXG4iCi0gICAgICAgICsgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotICAgICAgICArICIgIE5lc3RlZCBleGNlcHRpb24gaXM6IFxuXG4gICIKLSAgICAgICAgKyB0aHJvd2FibGUudG9TdHJpbmcoKQotICAgICAgICArICJcbiI7Ci0KLSAgICAgIC8vIElmIHRocm93YWJsZSBpcyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24sIAotICAgICAgLy8gdGhlbiBhZGQgY2xhc3MgbmFtZSBhbmQga2V5IHRvIG91dHB1dAotICAgICAgaWYgKHRocm93YWJsZSBpbnN0YW5jZW9mIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSA9IChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24pIHRocm93YWJsZTsKLQotICAgICAgICAvLyBHZXQgY2xhc3MgbmFtZSBhbmQga2V5Ci0gICAgICAgIG1zZyArPSAiIC0gIgotICAgICAgICAgICsgbXJlLmdldEtleSgpCi0gICAgICAgICAgKyAiXG5cdCIKLSAgICAgICAgICArICJbQ2xhc3MgTmFtZTogIgotICAgICAgICAgICsgbXJlLmdldENsYXNzTmFtZSgpCi0gICAgICAgICAgKyAiXSI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRocm93YWJsZSBpcyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCAKLSAgICAgIC8vIHRoZW4gdGFyZ2V0IG9mIGV4Y2VwdGlvbgotICAgICAgZWxzZSBpZiAodGhyb3dhYmxlIGluc3RhbmNlb2YgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUgPSAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbikgdGhyb3dhYmxlOwotCi0gICAgICAgIC8vIEdldCB0YXJnZXQKLSAgICAgICAgbXNnICs9ICIgLSAiICsgaXRlLmdldFRhcmdldEV4Y2VwdGlvbigpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFERDogUHJpbnQgc3RhY2sgdHJhY2UKLSAgICAgIC8vc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAvL3B3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICAgIC8vdGhyb3dhYmxlLnByaW50U3RhY2tUcmFjZShwdyk7Ci0KLSAgICAgIC8vIEFkZCBpdCB0byB0aGUgbWVzc2FnZQotICAgICAgLy9tc2cgKz0gc3cudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gbWVzc2FnZQotICAgIHJldHVybiBtc2c7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoaXMgZXhjZXB0aW9uIHRvIGJlIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGVuY2Fwc3VsYXRlZCB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFRocm93YWJsZSBnZXRUYXJnZXRFeGNlcHRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRocm93YWJsZQotICAgIHJldHVybiB0aHJvd2FibGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYmY1ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLS8qKgotICogU2lnbmFscyB0aGF0IGFuIGF0dGVtcHQgdG8gb3BlbiB0aGUgZmlsZSBkZW5vdGVkIGJ5IGEgc3BlY2lmaWVkIAotICogcGF0aG5hbWUgaGFzIGZhaWxlZC4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleHRlbmRzIFdTSUV4Y2VwdGlvbgotewotCi0gIC8qKgotICAgKiBTdGF0aWMgbmVlZGVkIGZvciBzZXJpYWxpemFibGUgY2xhc3MKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xOTE2MDEwNDQ0NjAxNjY2NDAxTDsKLQotLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAKLSAgICovCi0gIHB1YmxpYyBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24oU3RyaW5nIG1zZykKLSAgewotICAgIHN1cGVyKG1zZyk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgICAgICAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlICBpbml0aWFsIGV4Y2VwdGlvbiB0aHJvd24uCi0gICAqLwotICBwdWJsaWMgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBzdXBlcihtc2csIHRocm93YWJsZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJUnVudGltZUV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJUnVudGltZUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWUzMGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSVJ1bnRpbWVFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgcnVudGltZSBleGNlcHRpb25zIHRoYXQgb2NjdXIgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFdTSVJ1bnRpbWVFeGNlcHRpb24gZXh0ZW5kcyBXU0lFeGNlcHRpb24KLXsKLQotICAvKioKLSAgICogU3RhdGljIG5lZWRlZCBmb3Igc2VyaWFsaXphYmxlIGNsYXNzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA0MzA5MzIwOTgxNTE1NTEzMTcxTDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSVJ1bnRpbWVFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJUnVudGltZUV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0lSdW50aW1lRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gbXNnICB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgV1NJUnVudGltZUV4Y2VwdGlvbihTdHJpbmcgbXNnKQotICB7Ci0gICAgc3VwZXIobXNnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJUnVudGltZUV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgICAgICAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlICB0aGUgaW5pdGlhbCBleGNlcHRpb24gdGhyb3duLgotICAKLSAgICovCi0gIHB1YmxpYyBXU0lSdW50aW1lRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBzdXBlcihtc2csIHRocm93YWJsZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJVGFnLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lUYWcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiMzQzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lUYWcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotCi0vKioKLSAqIFdTLUkgY29uc3RhbnRzLiAgCi0gKiAgCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NJVGFnIGV4dGVuZHMgWE1MVGFncwotewotICAvKioKLSAgICogUXVhbGlmaWVkIG5hbWVzIG9mIFdTREwgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfSU1QT1JUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiaW1wb3J0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9UWVBFUyA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgInR5cGVzIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9NRVNTQUdFID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAibWVzc2FnZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfRE9DVU1FTlRBVElPTiA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImRvY3VtZW50YXRpb24iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0RFRklOSVRJT05TID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiZGVmaW5pdGlvbnMiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0JJTkRJTkcgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJiaW5kaW5nIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9PUEVSQVRJT04gPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJvcGVyYXRpb24iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX1BBUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJwYXJ0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9JTlBVVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImlucHV0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9PVVRQVVQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJvdXRwdXQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0ZBVUxUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiZmF1bHQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX1NFUlZJQ0UgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJzZXJ2aWNlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9QT1JUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAicG9ydCIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfUE9SVFRZUEUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJwb3J0VHlwZSIpOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgV1NETF9TT0FQX0JJTkRJTkcgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImJpbmRpbmciKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX1NPQVBfQk9EWSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYm9keSIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfU09BUF9IRUFERVIgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImhlYWRlciIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfU09BUF9IRUFERVJGQVVMVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiaGVhZGVyZmF1bHQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX1NPQVBfRkFVTFQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImZhdWx0Iik7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX01JTUVfQ09OVEVOVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTRExfTUlNRSwgImNvbnRlbnQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX01JTUVfWE1MID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9NSU1FLCAibWltZVhtbCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfTUlNRV9QQVJUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9NSU1FLCAicGFydCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfTUlNRV9NVUxUSVBBUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX01JTUUsICJtdWx0aXBhcnRSZWxhdGVkIik7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1dTRExfQVJSQVlUWVBFID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiYXJyYXlUeXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9XU0RMX05BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgIm5hbWVzcGFjZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfV1NETF9MT0NBVElPTiA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImxvY2F0aW9uIik7Ci0KLSAgLyoqCi0gICAqIE5hbWVzcGFjZXMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfQ0xBSU0gPQotICAgICJodHRwOi8vd3MtaS5vcmcvc2NoZW1hcy9jb25mb3JtYW5jZUNsYWltLyI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQID0KLSAgICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfU09BUEVOQyA9Ci0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX0JBU0lDX1BST0ZJTEUxMCA9Ci0gICAgImh0dHA6Ly93c2kub3JnL3Byb2ZpbGVzL2Jhc2ljMS4wLyI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBTT0FQRU5DX0FSUkFZID0gbmV3IFFOYW1lKE5TX1VSSV9TT0FQRU5DLCAiQXJyYXkiKTsKLQotICAvKioKLSAgICogUXVhbGlmaWVkIG5hbWVzIG9mIFdTLUkgY2xhaW0gZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTSV9DTEFJTSA9IG5ldyBRTmFtZShOU19VUklfQ0xBSU0sICJDbGFpbSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfQ0xBSU1fQ09ORk9STVNUTyA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9DTEFJTSwgImNvbmZvcm1zVG8iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1NPQVBfTVVTVFVOREVSU1RBTkQgPQotICAgIG5ldyBRTmFtZShOU19VUklfU09BUCwgIm11c3RVbmRlcnN0YW5kIik7Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllZCBuYW1lcyBvZiBTT0FQIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1NPQVBfRU5WRUxPUEUgPSBuZXcgUU5hbWUoTlNfVVJJX1NPQVAsICJFbnZlbG9wZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fU09BUF9CT0RZID0gbmV3IFFOYW1lKE5TX1VSSV9TT0FQLCAiQm9keSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fU09BUF9GQVVMVCA9IG5ldyBRTmFtZShOU19VUklfU09BUCwgIkZhdWx0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9TT0FQX0hFQURFUiA9IG5ldyBRTmFtZShOU19VUklfU09BUCwgIkhlYWRlciIpOwotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OWFhMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotCi0vKioKLSAqIFRoZSBBbmFseXplciB3aWxsIHByb2Nlc3MgYWxsIFByb2ZpbGUgY29uZm9ybWFuY2UgZnVuY3Rpb25zLgotICogVGhpcyBjbGFzcyBzaG91bGQgYmUgc3ViLWNsYXNzZWQgZm9yIGVhY2ggcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW5hbHl6ZXIKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVTT1VSQ0VfQlVORExFX05BTUUgPQotICAgICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXIiOwotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFVTQUdFX01FU1NBR0UgPQotICAgICJVc2FnZTogQW5hbHl6ZXIgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+IjsKLQotICBwcm90ZWN0ZWQgUmVwb3J0ZXIgcmVwb3J0ZXIgPSBudWxsOwotICBwcm90ZWN0ZWQgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCA9IG51bGw7Ci0gIHByb3RlY3RlZCBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZUluZm8gPSBudWxsOwotCi0gIC8qKgotICAgKiBBbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFRvb2xJbmZvIHRvb2xJbmZvID0gbnVsbDsKLQotICAvKioKLSAgICogUHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeS4KLSAgICovCi0gIHByb3RlY3RlZCBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQotICAvKioKLSAgICogUHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeS4KLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gbnVsbDsKLQotICAvKioKLSAgICogQW5hbHl6ZXIgY29uZmlnIGZpbGUgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGFuYWx5emVyQ29uZmlnTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJvdGVjdGVkIGludCBhbmFseXplckNvbmZpZ0luZGV4ID0gMDsKLQotICAvKioKLSAgICogUHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgTG9nIGxvZyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICogQHBhcmFtIGFyZ3MgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAcGFyYW0gdG9vbEluZm8gIGFuYWx5emVyIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIGNyZWF0aW5nIHRoZSBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplcihTdHJpbmdbXSBhcmdzLCBUb29sSW5mbyB0b29sSW5mbykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW5pdCh0b29sSW5mbyk7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyBvYmplY3QgICAKLSAgICB0aGlzLmFuYWx5emVyQ29uZmlnTGlzdC5hZGQoCi0gICAgICBhbmFseXplckNvbmZpZ0luZGV4LAotICAgICAgZG9jdW1lbnRGYWN0b3J5Lm5ld0FuYWx5emVyQ29uZmlnKCkpOwotICAgIGdldEFuYWx5emVyQ29uZmlnKCkuaW5pdChtZXNzYWdlTGlzdCk7Ci0KLSAgICAvLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZ2V0QW5hbHl6ZXJDb25maWcoKS5wYXJzZUFyZ3MoYXJncywgdHJ1ZSk7Ci0KLSAgICAvLyBEaXNwbGF5IGNvcHlyaWdodCBhbmQgb3B0aW9ucyB0aGF0IHdlcmUgc3BlY2lmaWVkCi0gICAgVGVzdFV0aWxzLnByaW50VG9vbEluZm8odG9vbEluZm8pOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRBbmFseXplckNvbmZpZygpLnRvU3RyaW5nKCkpOwotCi0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgcHJpbnRNZXNzYWdlKAotICAgICAgInByb2dyZXNzMDEiLAotICAgICAgbnVsbCwKLSAgICAgICJQbGVhc2Ugd2FpdCB3aGlsZSB0aGUgc3BlY2lmaWVkIGFydGlmYWN0cyBhcmUgYW5hbHl6ZWQuLi4iKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqIEBwYXJhbSBhcmdzICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIHRvb2xJbmZvICBhbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gdmFsaWRhdGUgIGZsYWcgZm9yIGNvbmZpZyBvcHRpb25zIHZhbGlkYXRpb24uIAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBjcmVhdGluZyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXIoU3RyaW5nW10gYXJncywgVG9vbEluZm8gdG9vbEluZm8sIGJvb2xlYW4gdmFsaWRhdGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGluaXQodG9vbEluZm8pOwotCi0gICAgLy8gR2V0IG5ldyBjb25maWcgb2JqZWN0ICAgCi0gICAgdGhpcy5hbmFseXplckNvbmZpZ0xpc3QuYWRkKAotICAgICAgICBhbmFseXplckNvbmZpZ0luZGV4LAotICAgICAgICBkb2N1bWVudEZhY3RvcnkubmV3QW5hbHl6ZXJDb25maWcoKSk7Ci0gICAgZ2V0QW5hbHl6ZXJDb25maWcoKS5pbml0KG1lc3NhZ2VMaXN0KTsKLQotICAgIC8vIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLSAgICBnZXRBbmFseXplckNvbmZpZygpLnBhcnNlQXJncyhhcmdzLCB2YWxpZGF0ZSk7Ci0KLSAgICAvLyBEaXNwbGF5IGNvcHlyaWdodCBhbmQgb3B0aW9ucyB0aGF0IHdlcmUgc3BlY2lmaWVkCi0gICAgVGVzdFV0aWxzLnByaW50VG9vbEluZm8odG9vbEluZm8pOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRBbmFseXplckNvbmZpZygpLnRvU3RyaW5nKCkpOwotCi0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgcHJpbnRNZXNzYWdlKAotICAgICAgICAicHJvZ3Jlc3MwMSIsCi0gICAgICAgIG51bGwsCi0gICAgIlBsZWFzZSB3YWl0IHdoaWxlIHRoZSBzcGVjaWZpZWQgYXJ0aWZhY3RzIGFyZSBhbmFseXplZC4uLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnTGlzdCAgYW5hbHl6ZXIgY29uZmlnIGZpbGUgbGlzdC4KLSAgICogQHBhcmFtIHRvb2xJbmZvICAgICAgICAgICAgYW5hbHl6ZXIgdG9vbCBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIGluc3RhbmNlIG9mIHRoZSBhbmFseXplciB0b29sLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWdMaXN0LCBUb29sSW5mbyB0b29sSW5mbykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbml0KHRvb2xJbmZvKTsKLQotICAgIHRoaXMuYW5hbHl6ZXJDb25maWdMaXN0ID0gYW5hbHl6ZXJDb25maWdMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1vbiBpbml0aWFsaXphdGlvbi4KLSAgICogQHBhcmFtIHRvb2xJbmZvICBhbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY29tbW9uIGluaXRpYWxpemF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdChUb29sSW5mbyBpbmZvKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLnRvb2xJbmZvID0gaW5mbzsKLQotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGxpc3QKLSAgICBtZXNzYWdlTGlzdCA9IG5ldyBNZXNzYWdlTGlzdChSRVNPVVJDRV9CVU5ETEVfTkFNRSk7Ci0KLSAgICAvLyBDcmVhdGUgcHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeQotICAgIGZhY3RvcnkgPSBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0gICAgLy8gQ3JlYXRlIGRvY3VtZW50IGZhY3RvcnkKLSAgICBkb2N1bWVudEZhY3RvcnkgPSBEb2N1bWVudEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGFsbCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4KLSAgICogQHJldHVybiBzdGF0dXMgY29kZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgaW50IHZhbGlkYXRlQWxsKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW50IHN0YXR1c0NvZGUgPSAwOwotICAgIGludCB0ZW1wU3RhdHVzQ29kZTsKLQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhbmFseXplckNvbmZpZ0xpc3Quc2l6ZSgpOyBpbmRleCsrKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImluZGV4OiAiICsgaW5kZXgpOwotCi0gICAgICAvLyBTZXQgY3VycmVudCBhbmFseXplciBjb25maWcgaW5kZXggCi0gICAgICBzZXRBbmFseXplckNvbmZpZyhpbmRleCk7Ci0KLSAgICAgIGlmICgodGVtcFN0YXR1c0NvZGUgPSB2YWxpZGF0ZUNvbmZvcm1hbmNlKCkpID4gc3RhdHVzQ29kZSkKLSAgICAgICAgc3RhdHVzQ29kZSA9IHRlbXBTdGF0dXNDb2RlOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXNDb2RlOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYWxsIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gZnVuY3Rpb25zLgotICAgKiBAcmV0dXJuIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBpbnQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEdldCB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xJbmZvIGdldFRvb2xJbmZvKCkKLSAgCi0gIHsKLSAgICByZXR1cm4gdGhpcy50b29sSW5mbzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgY3VycmVudCBhbmFseXplciBjb25maWd1cmF0aW9uLgotICAgKiBAcGFyYW0gaW5kZXggIHVycmVudCBhbmFseXplciBjb25maWd1cmF0aW9uLgotICAgKiBAc2VlICNnZXRBbmFseXplckNvbmZpZwotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0QW5hbHl6ZXJDb25maWcoaW50IGluZGV4KQotICB7Ci0gICAgdGhpcy5hbmFseXplckNvbmZpZ0luZGV4ID0gaW5kZXg7Ci0gIH0KLQotICBwcm90ZWN0ZWQgaW50IGdldEFuYWx5emVyQ29uZmlnSW5kZXgoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuYW5hbHl6ZXJDb25maWdJbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHJldHVybiBhbmFseXplciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNzZXRBbmFseXplckNvbmZpZwotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnIGdldEFuYWx5emVyQ29uZmlnKCkKLSAgewotICAgIHJldHVybiAoQW5hbHl6ZXJDb25maWcpIHRoaXMuYW5hbHl6ZXJDb25maWdMaXN0LmdldChhbmFseXplckNvbmZpZ0luZGV4KTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gbWVzc2FnZURhdGEgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlTGlzdC5wcmludE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgIGEgZGVmYXVsdCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY1ByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBNZXNzYWdlTGlzdC5wcmludE1lc3NhZ2UoCi0gICAgICBSRVNPVVJDRV9CVU5ETEVfTkFNRSwKLSAgICAgIGtleSwKLSAgICAgIG1lc3NhZ2VEYXRhLAotICAgICAgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSAgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIC8vIFN0YXJ0ICAgICAKLSAgICBwdy5wcmludCh0b29sSW5mby5nZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICAvLyBDb25maWcKLSAgICBwdy5wcmludCgKLSAgICAgIGdldEFuYWx5emVyQ29uZmlnKCkudG9YTUxTdHJpbmcoCi0gICAgICAgIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9BTkFMWVpFUl9DT05GSUcpKTsKLQotICAgIC8vIEVuZAotICAgIHB3LnByaW50bG4odG9vbEluZm8uZ2V0RW5kWE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGEgbWVzc2FnZS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgaWYgKGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0VmVyYm9zZU9wdGlvbigpKQotICAgIHsKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDg0ODJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIC8qKgotIyAgKiA8Y29weXJpZ2h0PgotIyAgKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoKLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotCi0jCi0jIEFuYWx5emVyIHJlc291cmNlIGJ1bmRsZS4KLSMKLXVzYWdlMDE9VXNhZ2U6IEFuYWx5emVyIC1jb25maWcgPGNvbmZpZ0ZpbGVuYW1lPgotY3JlYXRlZDAxPUNvbmZvcm1hbmNlIHJlcG9ydCBoYXMgYmVlbiBjcmVhdGVkLgotcHJvZ3Jlc3MwMT1QbGVhc2Ugd2FpdCB3aGlsZSB0aGUgc3BlY2lmaWVkIGFydGlmYWN0cyBhcmUgYW5hbHl6ZWQuLi4KLWVycm9yMDE9QW5hbHl6ZXIgRXJyb3I6Ci1lcnJvcjAyPUFuYWx5emVyIFN0b3BwZWQgQnkgRXhjZXB0aW9uOgotZXJyb3IwMz1UaGUgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBwcm9jZXNzIGZhaWxlZC4KLWV4Y2VwdGlvbjAxPUV4Y2VwdGlvbjoKLWNvbmZpZzAxPUFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMgbm90IGZvdW5kLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwMj1Db3VsZCBub3QgZmluZCBsb2cgZmlsZS4gIFNwZWNpZmllZCBmaWxlIGxvY2F0aW9uOgotY29uZmlnMDM9Q291bGQgbm90IGZpbmQgV1NETCBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwND1DYW4gbm90IHNwZWNpZnkgYm90aCB0aGUgV1NETCByZWZlcmVuY2UgYW5kIFVEREkgcmVmZXJlbmNlIG9wdGlvbnMuCi1jb25maWcwNT1XU0RMIGRvY3VtZW50IHdhcyBlaXRoZXIgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuCi1jb25maWcwNj1JbnZhbGlkIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZWxlbWVudDoKLWNvbmZpZzA3PUJvdGggdGhlIDx3c2RsRWxlbWVudD4gYW5kIDx3c2RsVVJJPiBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZC4KLWNvbmZpZzA4PUNvdWxkIG5vdCByZWFkIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFNwZWNpZmllZCBmaWxlIGxvY2F0aW9uOgotY29uZmlnMDk9VGhlIHBhcmVudEVsZW1lbnROYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aXRoIGEgV1NETCB0eXBlIG9mIHBvcnQgb3Igb3BlcmF0aW9uLgotY29uZmlnMTA9VGhlIC13c2RsRWxlbWVudCBvcHRpb24gbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIC13c2RsVVJJIG9yIC11ZGRpS2V5IG9wdGlvbnMuCi1jb25maWcxMT1UaGUgLXNlcnZpY2VMb2NhdGlvbiBvcHRpb24gbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIC13c2RsVVJJIG9yIC11ZGRpS2V5IG9wdGlvbnMuCi1jb25maWcxMj1UaGUgc3BlY2lmaWVkIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkOgotY29uZmlnMTM9T3B0aW9uIGRpZCBub3QgY29udGFpbiBhIHZhbHVlLiAgU3BlY2lmaWVkIG9wdGlvbjoKLWNvbmZpZzE0PUNvdWxkIG5vdCBmaW5kIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcxNT1SZXBvcnQgZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgcmVwbGFjZSBvcHRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCi1jb25maWcxNj1UZXN0IGFzc2VydGlvbiBkb2N1bWVudCBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZC4KLWNvbmZpZzE3PUNvdWxkIG5vdCBnZXQgcmVwb3J0IGZpbGUgbG9jYXRpb24uCi1jb25maWcxOD1JbnZhbGlkIGNvcnJlbGF0aW9uIHR5cGUgc3BlY2lmaWVkLgotY29uZmlnMTk9VGhlIFdTREwgZWxlbWVudCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLgotY29uZmlnMjA9VGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQgKFRBRClkb2N1bWVudCB3YXMgZWl0aGVyIG5vdCBmb3VuZCBvciBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhZDVhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplckNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRlc3QgYXNzZXJ0aW9ucyBhY3Jvc3MgYWxsIGFydGlmYWN0cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEFuYWx5emVyQ29udGV4dAotewotICBwcm90ZWN0ZWQgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlSW5mbyA9IG51bGw7Ci0gIHByb3RlY3RlZCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGFuYWx5emVyIGNvbnRleHQgd2l0aCBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2UgYSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbnRleHQoU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlUmVmZXJlbmNlID0gc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEByZXR1cm4gc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFNlcnZpY2VSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlUmVmZXJlbmNlIGdldFNlcnZpY2VSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUmVmZXJlbmNlIGEgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFNlcnZpY2VSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VSZWZlcmVuY2UoU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlUmVmZXJlbmNlID0gc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjYW5kaWRhdGVJbmZvLgotICAgKiBAcmV0dXJuIENhbmRpZGF0ZUluZm8uCi0gICAqIEBzZWUgI3NldENhbmRpZGF0ZUluZm8KLSAgICovCi0gIHB1YmxpYyBDYW5kaWRhdGVJbmZvIGdldENhbmRpZGF0ZUluZm8oKQotICB7Ci0gICAgcmV0dXJuIGNhbmRpZGF0ZUluZm87Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgY2FuZGlkYXRlSW5mby4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZUluZm8gdGhlIGNhbmRpZGF0ZUluZm8gdG8gc2V0LgotICAgKiBAc2VlICNnZXRDYW5kaWRhdGVJbmZvCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDYW5kaWRhdGVJbmZvKENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlSW5mbykKLSAgewotICAgIHRoaXMuY2FuZGlkYXRlSW5mbyA9IGNhbmRpZGF0ZUluZm87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB3c2RsRG9jdW1lbnQuCi0gICAqIEByZXR1cm4gV1NETERvY3VtZW50LgotICAgKiBAc2VlICNzZXRXc2RsRG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgZ2V0V3NkbERvY3VtZW50KCkgewotICAgICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB3c2RsRG9jdW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgdGhlIHdzZGxEb2N1bWVudCB0byBzZXQuCi0gICAqIEBzZWUgI2dldFdzZGxEb2N1bWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbERvY3VtZW50KFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpIHsKLSAgICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25GYWlsRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25GYWlsRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZjVhMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi0vKioKLSAqIEJhc2UgRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gRmFpbC4KLSAqIAotICogQGF1dGhvciBndHVycmVsbAotICogKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0KLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU3MDA3NjM1NzQzMjU4OTMzTDsKLQotCS8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihTdHJpbmcgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQzNGE1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLS8qKgotICogRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gTm90IEFwcGxpY2FibGUuCi0gKiAKLSAqIEBhdXRob3IgZ3R1cnJlbGwKLSAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM5MDU1MjM3ODI5OTQxMTI1NjRMOwotCi0JLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIGFyZzAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oU3RyaW5nIGFyZzApCi0gIHsKLSAgICBzdXBlcihhcmcwKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25QYXNzRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25QYXNzRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NTdkNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi0vKioKLSAqIEV4Y2VwdGlvbiBmb3IgQXNzZXJ0aW9uIFBhc3MuCi0gKiAKLSAqIEBhdXRob3IgZ3R1cnJlbGwKLSAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvblBhc3NFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotCS8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NzI4NTg0MjI4MzU0MTgxMEw7Ci0KLQkvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEFzc2VydGlvblBBc3NFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25QQXNzRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbihTdHJpbmcgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvblJlc3VsdEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDVhZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLS8qKgotICogRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gUmVzdWx0LgotICogCi0gKiBAYXV0aG9yIGd0dXJyZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTY3MjA2ODQ3MDAxNTI2MzJMOwotCXByaXZhdGUgU3RyaW5nIGRldGFpbE1lc3NhZ2U7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9ucmVzdWx0RXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGRldGFpbE1lc3NhZ2UgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBhcmcwIHRoZSBkZXRhaWwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24oU3RyaW5nIGFyZzApCi0gIHsKLSAgICBzdXBlcihhcmcwKTsKLSAgICBkZXRhaWxNZXNzYWdlID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBhcmcxICBmdXJ0aGVyIGRldGFpbGVkIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICAgIGRldGFpbE1lc3NhZ2UgPSBhcmcxOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGRldGFpbE1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIGRldGFpbE1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERldGFpbE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGRldGFpbE1lc3NhZ2U7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Jhc2ljUHJvZmlsZUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlN2JhN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5EZWZhdWx0UmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuQXJ0aWZhY3RUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0lQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxEb2N1bWVudENhY2hlOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuQmluZGluZ1RlbXBsYXRlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJpbmRpbmdEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RmFjdG9yeTsKLQotCi0vKioKLSAqIEFuYWx5emVzIGxvZyBmaWxlcyB0byBjb25maXJtIGNvbmZvcm1hbmNlIHRvIGEgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbAotICovCi1wdWJsaWMgY2xhc3MgQmFzaWNQcm9maWxlQW5hbHl6ZXIgZXh0ZW5kcyBBbmFseXplcgotewotICAvKioKLSAgICogVG9vbCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xfTkFNRSA9ICJBbmFseXplciI7Ci0KLSAgLyoqCi0gICAqIFdTREwgZG9jdW1lbnQgdG8gYW5hbHl6ZS4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLSAgLy8gcHJpdmF0ZSBXU0RMVmFsaWRhdG9yIHdzZGxWYWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIEJhc2ljUHJvZmlsZUFuYWx5emVyKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHN1cGVyKGFyZ3MsIG5ldyBUb29sSW5mbyhUT09MX05BTUUpKTsKLSAgICBuZXcgWE1MRG9jdW1lbnRDYWNoZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEBwYXJhbSB2YWxpZGF0ZSBmbGFnIGZvciBjb21tYW5kIGxpbmUgYXJndW1lbnQgdmFsaWRhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgQmFzaWNQcm9maWxlQW5hbHl6ZXIoU3RyaW5nW10gYXJncywgYm9vbGVhbiB2YWxpZGF0ZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIoYXJncywgbmV3IFRvb2xJbmZvKFRPT0xfTkFNRSksIHZhbGlkYXRlKTsKLSAgICBuZXcgWE1MRG9jdW1lbnRDYWNoZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZ0xpc3QgYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYW5hbHl6ZXIuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIEJhc2ljUHJvZmlsZUFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWdMaXN0KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhbmFseXplckNvbmZpZ0xpc3QsIG5ldyBUb29sSW5mbyhUT09MX05BTUUpKTsKLSAgICBuZXcgWE1MRG9jdW1lbnRDYWNoZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZ0xpc3QgYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSB3c2RsVVJJIGEgd3NkbCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgQmFzaWNQcm9maWxlQW5hbHl6ZXIoTGlzdCBhbmFseXplckNvbmZpZ0xpc3QsIFN0cmluZyB3c2RsVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHN1cGVyKGFuYWx5emVyQ29uZmlnTGlzdCwgbmV3IFRvb2xJbmZvKFRPT0xfTkFNRSkpOwotICAgIG5ldyBYTUxEb2N1bWVudENhY2hlKCk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBpZiAod3NkbFVSSSAhPSBudWxsKQotICAgICAgICB0aGlzLndzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQod3NkbFVSSSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gd2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih3ZS5nZXRNZXNzYWdlKCksIHdlKTsKLSAgICB9Ci0KLSAgfQotICAKLSAgcHJpdmF0ZSBXU0RMRG9jdW1lbnQgZ2V0V3NkbEZyb21VZGRpKCkgewotICAgICAgV1NETERvY3VtZW50IHdzZGxEb2MgPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgICBVRERJUHJveHkgdWRkaVByb3h5ID0gbmV3IFVERElQcm94eSgpOwotICAgICAgICAgIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZSA9IGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0VURESVJlZmVyZW5jZSgpOwotICAgICAgICAgIHVkZGlQcm94eS5zZXRJbnF1aXJ5VVJMKHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgICAgICBUTW9kZWwgdE1vZGVsID0gbnVsbDsKLQotICAgICAgICAgIGlmICh1ZGRpUmVmZXJlbmNlLmdldEtleVR5cGUoKS5lcXVhbHMoVURESVJlZmVyZW5jZS5CSU5ESU5HX0tFWSkpIHsKLSAgICAgICAgICAgICAgQmluZGluZ0RldGFpbCBiaW5kaW5nRGV0YWlsID0gdWRkaVByb3h5LmdldF9iaW5kaW5nRGV0YWlsKAotICAgICAgICAgICAgICAgICAgICAgIHVkZGlSZWZlcmVuY2UuZ2V0S2V5KCkpOwotICAgICAgICAgICAgICBCaW5kaW5nVGVtcGxhdGUgYmluZGluZ1RlbXBsYXRlID0gKEJpbmRpbmdUZW1wbGF0ZSkgYmluZGluZ0RldGFpbC4KLSAgICAgICAgICAgICAgICAgICAgICBnZXRCaW5kaW5nVGVtcGxhdGVWZWN0b3IoKS5lbGVtZW50QXQoMCk7Ci0gICAgICAgICAgICAgIHRNb2RlbCA9IFVERElVdGlscy5maW5kVE1vZGVsKHVkZGlQcm94eSwgYmluZGluZ1RlbXBsYXRlLCBmYWxzZSk7Ci0gICAgICAgICAgfSBlbHNlIHsgLy8gVURESVJlZmVyZW5jZS5UTU9ERUxfS0VZCi0gICAgICAgICAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSB1ZGRpUHJveHkuZ2V0X3RNb2RlbERldGFpbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWRkaVJlZmVyZW5jZS5nZXRLZXkoKSk7Ci0gICAgICAgICAgICAgIHRNb2RlbCA9IChUTW9kZWwpIHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKS5lbGVtZW50QXQoMCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nIG92ZXJ2aWV3VVJMID0gVURESVV0aWxzLmdldE92ZXJ2aWV3VVJMKHRNb2RlbCk7Ci0gICAgICAgICAgU3RyaW5nIHdzZGxVUkkgPSBVRERJVXRpbHMuZ2V0V1NETExvY2F0aW9uKG92ZXJ2aWV3VVJMKTsKLSAgICAgICAgICB3c2RsRG9jID0gbmV3IFdTRExEb2N1bWVudCh3c2RsVVJJKTsKLQotICAgICAgICAgIC8qIFRPRE86ICBJIHJlZmFjdG9yZWQgdGhpcyBjb2RlIGZyb20gQlNQMzAwMSBidXQgSSdtIG5vdCBzdXJlIHRoYXQKLSAgICAgICAgICAgKiBpdCdzIGNvcnJlY3QuICBUaGlzIG92ZXJyaWRlcyB0aGUgPHdzZGxFbGVtZW50PiBjaGlsZCBvZgotICAgICAgICAgICAqIDx1ZGRpUmVmZXJlbmNlPiBmcm9tIHRoZSBjb25maWcgZmlsZSwgd2hpY2ggbmV2ZXIgZ2V0cyB1c2VkLgotICAgICAgICAgICAqLwotICAgICAgICAgIC8vIElmIHRoZSB3c2RsRWxlbWVudCBkb2VzIG5vdCBleGlzdCwgdGhlbiBzZXQgaXQKLSAgICAgICAgICBpZiAoYW5hbHl6ZXJDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2UoKS5nZXRXU0RMRWxlbWVudCgpID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBVRERJVXRpbHMuZ2V0QmluZGluZyhvdmVydmlld1VSTCwgd3NkbERvYyk7Ci0gICAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9Ci0gICAgICAgICAgICAgICAgICBiaW5kaW5nID09IG51bGwgPyBudWxsIDogYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPQotICAgICAgICAgICAgICAgICAgYmluZGluZyA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgICAgICAgICAgLy8gR2V0IFdTREwgYmluZGluZyBmcm9tIHRoZSBvdmVydmlld1VSTCBhbmQgc2V0IGluIGFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0gICAgICAgICAgICB3c2RsRWxlbWVudC5zZXROYW1lKGJpbmRpbmdOYW1lKTsKLSAgICAgICAgICAgIHdzZGxFbGVtZW50LnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgICAgICAgICAgd3NkbEVsZW1lbnQuc2V0VHlwZShXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fQklORElORyk7Ci0gICAgICAgICAgICBhbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHdzZGxEb2M7Ci0KLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8qIElmIHRoZSB3c2RsRG9jIGlzIHNldCBhdCB0aGUgcG9pbnQgb2YgdGhlIGV4Y2VwdGlvbiwgcmV0dXJuIGl0OwotICAgICAgICAgKiBvdGhlcndpc2UgcmV0dXJuIG51bGwuICovCi0gICAgICAgIHJldHVybiB3c2RsRG9jOwotICAgIH0KLSAgfQotICAKLSAgCi0gIC8qKgotICAgKiBQcm9jZXNzIGFsbCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4KLSAgICogQHJldHVybiBzdGF0dXMgY29kZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBwcm9jZXNzIGZhaWxlZC4KLSAgICovCi0gIHB1YmxpYyBpbnQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGludCBzdGF0dXNDb2RlID0gMDsKLQotICAgIFJlcG9ydCByZXBvcnQgPSBudWxsOwotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0ID0gbnVsbDsKLQotICAgIC8vIFNldCB1cCBpbml0aWFsIGFuYWx5emVyIGNvbnRleHQgYmFzZWQgb24gZW50cmllcyBpbiB0aGUgY29uZmlnIGZpbGUKLSAgICB0aGlzLmFuYWx5emVyQ29udGV4dCA9Ci0gICAgICBuZXcgQW5hbHl6ZXJDb250ZXh0KG5ldyBTZXJ2aWNlUmVmZXJlbmNlKGdldEFuYWx5emVyQ29uZmlnKCkpKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIHRoaXMucHJvZmlsZUFzc2VydGlvbnMgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmdldFByb2ZpbGVBc3NlcnRpb25zKAotICAgICAgICAgICAgICAgIGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKCkpOwotCi0gICAgICBpZiAodGhpcy5wcm9maWxlQXNzZXJ0aW9ucyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoImNvbmZpZzIwIiwKLSAgICAgICAJCSAgICJUaGUgV1MtSSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudCAoVEFEKWRvY3VtZW50IHdhcyBlaXRoZXIgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuIikpOyAgCi0gICAgICB9CQotCi0gICAgICAvLyBDcmVhdGUgcmVwb3J0IGZyb20gZG9jdW1lbnQgZmFjdG9yeQotICAgICAgcmVwb3J0ID0gZG9jdW1lbnRGYWN0b3J5Lm5ld1JlcG9ydCgpOwotICAgICAgcmVwb3J0LnNldExvY2F0aW9uKGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0UmVwb3J0TG9jYXRpb24oKSk7Ci0KLSAgICAgIC8vIENyZWF0ZSByZXBvcnQgY29udGV4dAotICAgICAgUmVwb3J0Q29udGV4dCByZXBvcnRDb250ZXh0ID0KLSAgICAgICAgbmV3IFJlcG9ydENvbnRleHQoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1RJVExFLAotICAgICAgICAgIHByb2ZpbGVBc3NlcnRpb25zLAotICAgICAgICAgIHRoaXMpOwotICAgICAgcmVwb3J0LnNldFJlcG9ydENvbnRleHQocmVwb3J0Q29udGV4dCk7Ci0KLSAgICAgIC8vIENyZWF0ZSByZXBvcnQgd3JpdGVyCi0gICAgICBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld1JlcG9ydFdyaXRlcigpOwotICAgICAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUIAotICAgICAgLy9yZXBvcnRXcml0ZXIuc2V0V3JpdGVyKG5ldyBGaWxlV3JpdGVyKGFuYWx5emVyQ29uZmlnLmdldFJlcG9ydExvY2F0aW9uKCkpKTsKLSAgICAgIHJlcG9ydFdyaXRlci5zZXRXcml0ZXIoZ2V0QW5hbHl6ZXJDb25maWcoKS5nZXRSZXBvcnRMb2NhdGlvbigpKTsKLQotICAgICAgLy8gQ3JlYXRlIHJlcG9ydGVyCi0gICAgICB0aGlzLnJlcG9ydGVyID0gbmV3IERlZmF1bHRSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0KLSAgICAgIC8vIGZldGNoIFdTREwgaWYgbm90IHNldCBpbiBjb25zdHJ1Y3RvcgotICAgICAgLy8gRmlyc3QsIGF0dGVtcHQgdG8gZ2V0IHRoZSBXU0RMIFVSSSBmcm9tIGEgVURESSB0TW9kZWwKLSAgICAgIGlmICgod3NkbERvY3VtZW50ID09IG51bGwpICYmIChnZXRBbmFseXplckNvbmZpZygpLmlzVURESVJlZmVyZW5jZVNldCgpKSkKLSAgICAgICAgICAgICAgd3NkbERvY3VtZW50ID0gZ2V0V3NkbEZyb21VZGRpKCk7Ci0KLSAgICAgIC8qIE5leHQsIHRyeSB0byB1c2UgdGhlIFdTREwgc2V0dGluZ3MgZnJvbSB0aGUgY29uZmlnIGZpbGUuICBJZiB3ZSBjYW4ndAotICAgICAgICogZmV0Y2ggdGhhdCBXU0RMLCBhbmQgdGhlIGNvbmZpZyBmaWxlIGlzIHNldCB1cCB0byB0ZXN0IGEgV1NETCwgdGhlbiB0aGUKLSAgICAgICAqIHZhbGlkYXRvciBmYWlscyBoZXJlLiAqLwotICAgICAgaWYgKCh3c2RsRG9jdW1lbnQgPT0gbnVsbCkgJiYgKGdldEFuYWx5emVyQ29uZmlnKCkuaXNXU0RMUmVmZXJlbmNlU2V0KCkpKQotICAgICAgewotICAgICAgICAgIHdzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQoZ2V0QW5hbHl6ZXJDb25maWcoKS4KLSAgICAgICAgICAgICAgICAgIGdldFdTRExMb2NhdGlvbigpKTsKLQotICAgICAgICAgIGlmICh3c2RsRG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJjb25maWcwNSIsCi0gICAgICAgICAgICAgICAgICAgICAgIldTREwgZG9jdW1lbnQgd2FzIGVpdGhlciBub3QgZm91bmQgb3IgY291bGQgbm90IGJlICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAicHJvY2Vzc2VkLiIpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyoKLSAgICAgICAqIE9ubHkgdmFsaWRhdGUgbWVzc2FnZXMgYWdhaW5zdCBhIHdzZGwgZG9jdW1lbnQgaWYgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICAgICAqIGRvZXMgbm90IGNvbnRhaW4gc29hcCAxLjIgYmluZGluZ3MuIAotICAgICAgICovCi0JICBpZiAoV1NETFV0aWxzLmlzU09BUDEyV1NETCh3c2RsRG9jdW1lbnQpICYmIGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0TG9nTG9jYXRpb24oKSAhPSBudWxsKQotCQkgIGdldEFuYWx5emVyQ29uZmlnKCkuc2V0V1NETFJlZmVyZW5jZShudWxsKTsKLQkgIGVsc2UKLQkJICBhbmFseXplckNvbnRleHQuc2V0V3NkbERvY3VtZW50KHdzZGxEb2N1bWVudCk7ICAKLQotICAgICAgLy8gU3RhcnQgd3JpdGluZyByZXBvcnQKLSAgICAgIHRoaXMucmVwb3J0ZXIuc3RhcnRSZXBvcnQoKTsKLQotICAgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBhcnRpZmFjdCBlbGVtZW50cyBmcm9tIHRoZSBUQUQsIHZhbGlkYXRpbmcgZWFjaCBvbmUKLSAgICAgIHByb2ZpbGVBc3NlcnRpb25zLmdldEFydGlmYWN0TGlzdCgpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwcm9maWxlQXNzZXJ0aW9ucy5nZXRBcnRpZmFjdExpc3QoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICBpLmhhc05leHQoKTsgKSB7Ci0gICAgICAgICAgU3RyaW5nIGFydGlmYWN0VHlwZSA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgIC8vIFNldCBjdXJyZW50IGFydGlmYWN0Ci0gICAgICAgICAgcmVwb3J0QXJ0aWZhY3QgPSBzZXRDdXJyZW50QXJ0aWZhY3QoQXJ0aWZhY3RUeXBlLmdldEFydGlmYWN0VHlwZSgKLSAgICAgICAgICAgICAgICAgIGFydGlmYWN0VHlwZSkpOwotICAgICAgICAgIHZhbGlkYXRlKHJlcG9ydEFydGlmYWN0LCBmYWN0b3J5LmdldFZhbGlkYXRvckZvckFydGlmYWN0KAotICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RUeXBlKSk7Ci0gICAgICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50QXJ0aWZhY3QoKTsKLSAgICAgIH0KLQotICAgICAgLy8gRmluaXNoIHRoZSBjb25mb3JtYW5jZSByZXBvcnQKLSAgICAgIHJlcG9ydGVyLmZpbmlzaFJlcG9ydCgpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICAgIFN0cmluZyBtZXNzYWdlID0KLSAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiZXJyb3IwMyIsCi0gICAgICAgICAgIlRoZSBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIHByb2Nlc3MgZmFpbGVkLiIpOwotCi0gICAgICAvLyBGaW5pc2ggcmVwb3J0Ci0gICAgICBpZiAocmVwb3J0ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnRsbihtZXNzYWdlKTsKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJleGNlcHRpb24wMSIsICJFeGNlcHRpb246ICIpCi0gICAgICAgICAgICArIGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgICBlLnByaW50U3RhY2tUcmFjZShwdyk7Ci0gICAgICAgIHJlcG9ydGVyLmZpbmlzaFJlcG9ydFdpdGhFcnJvcihzdy50b1N0cmluZygpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBXU0lFeGNlcHRpb24pCi0gICAgICAgIHRocm93IChXU0lFeGNlcHRpb24pIGU7Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24obWVzc2FnZSwgZSk7Ci0gICAgfQotCi0gICAgaWYgKHJlcG9ydCAhPSBudWxsKQotICAgIHsKLSAgICAgIHN0YXR1c0NvZGUgPQotICAgICAgICAocmVwb3J0LmdldFN1bW1hcnlSZXN1bHQoKS5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQpCi0gICAgICAgICAgPyAwCi0gICAgICAgICAgOiAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzQ29kZTsKLSAgfQotCi0gIC8qKgotICAgKiBSdW4gdGVzdCBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LCBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcikKLSAgICAgICAgICB0aHJvd3MgV1NJRXhjZXB0aW9uIAotICB7Ci0gICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFdTRExWYWxpZGF0b3JJbXBsKQotCXsKLSAgICAJKChXU0RMVmFsaWRhdG9ySW1wbCl2YWxpZGF0b3IpLmluaXQoYW5hbHl6ZXJDb250ZXh0LCBwcm9maWxlQXNzZXJ0aW9ucywgcmVwb3J0QXJ0aWZhY3QsIGdldEFuYWx5emVyQ29uZmlnKCksIHJlcG9ydGVyLAotICAgIAkJCWdldEFuYWx5emVyQ29uZmlnSW5kZXgoKSA9PSAwKTsKLQl9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbGlkYXRvci5pbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFzc2VydGlvbnMsIHJlcG9ydEFydGlmYWN0LCBnZXRBbmFseXplckNvbmZpZygpLCByZXBvcnRlcik7Ci0gICAgfQotCi0gICAgaWYgKHZhbGlkYXRvci5ydW5UZXN0cygpKSB7Ci0gICAgICAgIHZhbGlkYXRvci52YWxpZGF0ZUFydGlmYWN0KCk7Ci0gICAgICAgIHZhbGlkYXRvci5jbGVhbnVwKCk7Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIHZhbGlkYXRvci5zZXRBbGxNaXNzaW5nSW5wdXQoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ29tbWFuZCBsaW5lIGludGVyZmFjZSBmb3IgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgSU8gcHJvYmxlbXMgb2NjdXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGludCBzdGF0dXNDb2RlID0gMDsKLSAgICBBbmFseXplciBhbmFseXplciA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBTZXQgZG9jdW1lbnQgYnVpbGRlciBmYWN0b3J5IGNsYXNzCi0gICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoCi0gICAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gICAgICAgIFdTSVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoV1NJUHJvcGVydGllcy5QUk9QX0pBWFBfRE9DVU1FTlRfRkFDVE9SWSkpOwotCi0gICAgICAvLyBTZXQgdGhlIHN5c3RlbSBwcm9wZXJ0eSBmb3IgVURESTRKIHRyYW5zcG9ydAotICAgICAgU3lzdGVtLnNldFByb3BlcnR5KAotICAgICAgICBUcmFuc3BvcnRGYWN0b3J5LlBST1BFUlRZX05BTUUsCi0gICAgICAgIFdTSVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVHJhbnNwb3J0RmFjdG9yeS5QUk9QRVJUWV9OQU1FKSk7Ci0KLSAgICAgIC8vIENyZWF0ZSB0aGUgYW5hbHl6ZXIgb2JqZWN0Ci0gICAgICBhbmFseXplciA9IG5ldyBCYXNpY1Byb2ZpbGVBbmFseXplcihhcmdzKTsKLQotICAgICAgLy8gSGF2ZSBpdCBwcm9jZXNzIHRoZSBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucwotICAgICAgc3RhdHVzQ29kZSA9IGFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLQotICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICBhbmFseXplci5wcmludE1lc3NhZ2UoCi0gICAgICAgICJjcmVhdGVkMDEiLAotICAgICAgICBudWxsLAotICAgICAgICAiQ29uZm9ybWFuY2UgcmVwb3J0IGhhcyBiZWVuIGNyZWF0ZWQuIik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHN0YXR1c0NvZGUgPSAxOwotCi0gICAgICBTdHJpbmcgbWVzc2FnZUlEOwotICAgICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlOwotICAgICAgU3RyaW5nIG1lc3NhZ2VEYXRhOwotCi0gICAgICBpZiAoKGUgaW5zdGFuY2VvZiBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24pCi0gICAgICAgIHx8IChlIGluc3RhbmNlb2YgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgLy9wcmludFN0YWNrVHJhY2UgPSBmYWxzZTsKLSAgICAgICAgbWVzc2FnZUlEID0gImVycm9yMDEiOwotICAgICAgICBkZWZhdWx0TWVzc2FnZSA9ICJBbmFseXplciBFcnJvcjoiOwotICAgICAgICBtZXNzYWdlRGF0YSA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vcHJpbnRTdGFja1RyYWNlID0gdHJ1ZTsKLSAgICAgICAgbWVzc2FnZUlEID0gImVycm9yMDIiOwotICAgICAgICBkZWZhdWx0TWVzc2FnZSA9ICJBbmFseXplciBTdG9wcGVkIEJ5IEV4Y2VwdGlvbjoiOwotICAgICAgICBtZXNzYWdlRGF0YSA9IGUudG9TdHJpbmcoKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGFuYWx5emVyICE9IG51bGwpCi0gICAgICAgIGFuYWx5emVyLnByaW50TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIEFuYWx5emVyLnN0YXRpY1ByaW50TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0KLSAgICAgIGlmIChhbmFseXplciAhPSBudWxsCi0gICAgICAgICYmIGFuYWx5emVyLmdldEFuYWx5emVyQ29uZmlnKCkgIT0gbnVsbAotICAgICAgICAmJiBhbmFseXplci5nZXRBbmFseXplckNvbmZpZygpLmdldFZlcmJvc2VPcHRpb24oKSkKLSAgICAgICAgZHVtcChlKTsKLSAgICB9Ci0KLSAgICAvLyBFeGl0Ci0gICAgU3lzdGVtLmV4aXQoc3RhdHVzQ29kZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBhcnRpZmFjdFR5cGUgYW4gQXJ0aWZhY3RUeXBlIG9iamVjdC4KLSAgICogQHJldHVybiBhIFJlcG9ydEFydGlmYWN0IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgY3JlYXRpbmcgcmVwb3J0IGFydGlmYWN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydEFydGlmYWN0IHNldEN1cnJlbnRBcnRpZmFjdChBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBhcnRpZmFjdAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0ID0gcmVwb3J0ZXIuY3JlYXRlQXJ0aWZhY3QoKTsKLSAgICByZXBvcnRBcnRpZmFjdC5zZXRUeXBlKGFydGlmYWN0VHlwZSk7Ci0KLSAgICAvLyBBZGQgYXJ0aWZhY3QgdG8gcmVwb3J0Ci0gICAgdGhpcy5yZXBvcnRlci5zZXRDdXJyZW50QXJ0aWZhY3QocmVwb3J0QXJ0aWZhY3QpOwotCi0gICAgcmV0dXJuIHJlcG9ydEFydGlmYWN0OwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIHQgYSBUaHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoVGhyb3dhYmxlIHQpCi0gIHsKLSAgICB3aGlsZSAodCBpbnN0YW5jZW9mIFdTSUV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBUaHJvd2FibGUgbmVzdGVkID0gKChXU0lFeGNlcHRpb24pIHQpLmdldFRhcmdldEV4Y2VwdGlvbigpOwotICAgICAgaWYgKG5lc3RlZCA9PSBudWxsKQotICAgICAgICBicmVhazsKLSAgICAgIGVsc2UKLSAgICAgICAgdCA9IG5lc3RlZDsKLSAgICB9Ci0gICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQ2FuZGlkYXRlSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQ2FuZGlkYXRlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmU4MjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0NhbmRpZGF0ZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci0KLS8qKgotICogUHJvdmlkZSBhIG5vcm1hbGl6ZWQgc2V0IG9mIGRhdGEgcmVsYXRpbmcgdG8gdGhlIHNlcnZpY2UgdW5kZXIgdGVzdC4KLSAqIEZvciBleGFtcGxlLCB3aXRoIGVuZHBvaW50IGNvcnJlbGF0aW9uIGFuZCB3c2RsRWxlbWVudCBvZiB0eXBlICJtZXNzYWdlIiAKLSAqIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIG1hdGNoZXMgZm9yIG1vc3QgZWxlbWVudCB0eXBlcyBpbmNsdWRpbmcgV1NETCBTZXJ2aWNlLgotICogKHRob3VnaCB0aGUgb2JqZWN0aXZlIGlzIHRvIGVuc3VyZSBmaWx0ZXJpbmcgdG8gYSBzaW5nbGUgc2VydmljZSBpZiBhdCBhbGwgcG9zc2libGUpLiAKLSAqIAotICogQGF1dGhvciBndHVycmVsbAotICovCi0KLS8vIEFERDpjb3VsZCBiZSBiZXR0ZXIgYXMgYSBzaW5nbGV0b24/Ci0KLXB1YmxpYyBjbGFzcyBDYW5kaWRhdGVJbmZvCi17Ci0KLSAgLy8gTm9ybWFsaXplZCBmaXhlZCBjb3JyZWxhdGlvbiBkYXRhIGRlcml2ZWQgZnJvbSB0aGUgYW5hbHl6ZXIgY29uZmlnIGFuZCB0aGUgd3NkbCwKLSAgLy8gcmVwcmVzZW50aW5nIHdoYXQgd2Uga25vdyBhYm91dCB0aGUgc2VydmljZSBmcm9tIHRoZXNlIHR3byBzb3VyY2VzLiAgCi0gIHByaXZhdGUgRGVmaW5pdGlvbltdIGRlZmluaXRpb25zID0gbnVsbDsKLQotICBwcml2YXRlIEltcG9ydFtdIGltcG9ydHMgPSBudWxsOwotICBwcml2YXRlIFR5cGVzW10gdHlwZXMgPSBudWxsOwotCi0gIHByaXZhdGUgTWVzc2FnZVtdIG1lc3NhZ2VzID0gbnVsbDsKLSAgcHJpdmF0ZSBPcGVyYXRpb25bXSBvcGVyYXRpb25zID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0VHlwZVtdIHBvcnRUeXBlcyA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ1tdIGJpbmRpbmdzID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0W10gcG9ydHMgPSBudWxsOwotCi0gIHByaXZhdGUgVVJJW10gZW5kUG9pbnRzID0gbnVsbDsgLy8gbGlzdCBvYnRhaW5hYmxlIGZyb20gYSBwb3J0Ci0KLSAgcHJpdmF0ZSBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50OyAvLyByZWZlcmVuY2UgcHJvYmFibHkgbm90IGRlc2lyYWJsZSBoZXJlCi0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBDYW5kaWRhdGVJbmZvLgotICAgKiBFeHRyYWN0IG5vcm1hbGlzZWQgZW50cnkgZGF0YSBmcm9tIHdzZGwsIGFjY29yZGluZyB0byBjb25maWcgd3NkbEVsZW1lbnQgJiBzZXJ2aWNlTG9jYXRpb24KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2UgYSBTZXJ2aWNlUmVmZXJlbmNlIG9iamVjdC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBhIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGNyZWF0aW5nIENhbmRpZGF0ZUluZm8gb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENhbmRpZGF0ZUluZm8oCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBBREQ6IGNoZWNrIGZvciBudWxsIGRvY3VtZW50PwotCi0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCk7Ci0KLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLQotICAgIC8qCi0gICAgICogR2VuZXJhbGlzZWQgZmllbGRzIGluZGVwZW5kZW50IG9mIHdzZGxFbGVtZW50OgotICAgICAqLwotICAgIC8vIEFERDogY2hlY2sgd2hldGhlciB0aGVzZSBuZWVkIHRvIGJlIGVpdGhlciBleHBhbmRlZCBvciBmaWx0ZXJlZCBkb3duLgotICAgIC8vIEFzc3VtZSBXU0RMNEogcHVsbHMgaW50IHRoZSBmdWxsIHRyZWUgYXQgdGhlIHJvb3QgZG9jdW1lbnQgZm9yIG5vdwkJCi0gICAgLy90aGlzLmltcG9ydHMgPSB3c2RsRG9jdW1lbnQuZ2V0SW1wb3J0cygpOwotCi0gICAgLy8gLi4uIG9yIGlmIG9ubHkgZG93biB0byBmaXJzdCBsZXZlbC4uLi4KLSAgICB0aGlzLmltcG9ydHMgPQotICAgICAgKEltcG9ydFtdKSBnZXRBbGxJbXBvcnRzKAotICAgICAgICB3c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKSkudG9BcnJheShuZXcgSW1wb3J0W10gewotICAgIH0pOwotCi0gICAgLyogRGVmaW5pdGlvbnMuIAotICAgICAqIE5vdGUgdGhhdCB0aGUgdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgaXMgZm9yIHRoZSByb290IGRvYwotICAgICAqIHdoaWNoIGNvbnRhaW5zIGFsbCBXU0RMIGVsZW1lbnRzIGluIHNjb3BlIHZpYSA8aW1wb3J0PiBkZWNsYXJhdGlvbnMsCi0gICAgICogYXMgd2VsbCBhcyB0aGUgcm9vdCBkb2N1bWVudCBpdHNlbGYuIFRoZXJlZm9yZSB0aGUgc2Vjb25kIGRlZmluaXRpb25zIAotICAgICAqIGFycmF5IGVsZW1lbnQgYW5kIGFib3ZlIGFyZSByZWR1bmRhbnQsIGJ1dCAqbWF5KiBwcm92ZSB1c2VmdWwgdG8gdGhlIGFzc2VydGlvbgotICAgICAqIGNvZGUuCi0gICAgICovCi0KLSAgICB0aGlzLmRlZmluaXRpb25zID0gbmV3IERlZmluaXRpb25baW1wb3J0cy5sZW5ndGggKyAxXTsKLSAgICAvLyBhbGxvdyByb29tIGZvciByb290IGRvYwkJCi0KLSAgICB0aGlzLmRlZmluaXRpb25zWzBdID0gd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCk7IC8vIHJvb3QgZG9jdW1lbnQgICAgCi0KLSAgICAvLyBBbGxvY2F0ZSBhcnJheSBmb3IgdHlwZXMgZWxlbWVudHMKLSAgICBUeXBlc1tdIHRlbXBUeXBlcyA9IG5ldyBUeXBlc1tkZWZpbml0aW9ucy5sZW5ndGhdOwotCi0gICAgaW50IHR5cGVzQ291bnQgPSAwOwotCi0gICAgaWYgKGRlZmluaXRpb25zWzBdLmdldFR5cGVzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0ZW1wVHlwZXNbMF0gPSB0aGlzLmRlZmluaXRpb25zWzBdLmdldFR5cGVzKCk7IC8vIHJvb3QgZG9jdW1lbnQJCi0gICAgICB0eXBlc0NvdW50Kys7Ci0gICAgfQotCi0gICAgLy8gRGVmaW5pdGlvbnMgZnJvbSBvdGhlciAoaW1wb3J0ZWQpIHdzZGxzIGNvcnJlbGF0aW5nIHRvIHRoZSBjYW5kaWRhdGUKLSAgICAvLyBPbmx5IG9uZSBsZXZlbCBkb3duIGZvciBub3cKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKCgoZGVmaW5pdGlvbnNbaSArIDFdID0gaW1wb3J0c1tpXS5nZXREZWZpbml0aW9uKCkpICE9IG51bGwpCi0gICAgICAgICYmIChkZWZpbml0aW9uc1tpICsgMV0uZ2V0VHlwZXMoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgdGVtcFR5cGVzW3R5cGVzQ291bnRdID0gZGVmaW5pdGlvbnNbaSArIDFdLmdldFR5cGVzKCk7Ci0gICAgICAgIHR5cGVzQ291bnQrKzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodHlwZXNDb3VudCA+IDApCi0gICAgewotICAgICAgdGhpcy50eXBlcyA9IG5ldyBUeXBlc1t0eXBlc0NvdW50XTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlc0NvdW50OyBpKyspCi0gICAgICAgIHRoaXMudHlwZXNbaV0gPSB0ZW1wVHlwZXNbaV07Ci0gICAgfQotICAgIC8qIAotICAgICAqIFBvcHVsYXRlIGVsZW1lbnQgaGllcmFjaHk6Ci0gICAgICogUG9ydAotICAgICAqIEJpbmRpbmcKLSAgICAgKiBQb3J0VHlwZQotICAgICAqIG9wZXJhdGlvbihzKQotICAgICAqIG1lc3NhZ2UocykKLSAgICAgKi8KLQotICAgIGlmICh3c2RsRWxlbWVudC5pc1BvcnQoKSkKLSAgICB7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0KLSAgICAgIC8vIFVzZSBwYXJlbnRFbGVtZW50TmFtZSB0byBxdWFsaWZ5IHRoZSBwb3J0IHdpdGhpbiBhIHNlcnZpY2UuCQkKLSAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gd3NkbEVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCk7Ci0gICAgICBTZXJ2aWNlW10gcyA9IHdzZGxEb2N1bWVudC5nZXRTZXJ2aWNlcygpOwotICAgICAgU3RyaW5nIHBvcnROYW1lID0gd3NkbEVsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCAmJiBwb3J0ID09IG51bGw7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNbaV0uZ2V0UU5hbWUoKS5lcXVhbHMoc2VydmljZU5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcG9ydCA9IHNbaV0uZ2V0UG9ydChwb3J0TmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKHBvcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiV1NETCBQb3J0IFwnIgotICAgICAgICAgICAgKyBwb3J0TmFtZQotICAgICAgICAgICAgKyAiXCcgZm9yIFNlcnZpY2UgXCciCi0gICAgICAgICAgICArIHNlcnZpY2VOYW1lCi0gICAgICAgICAgICArICJcJyBub3QgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aGlzLnBvcnRzID0gbmV3IFBvcnRbXSB7IHBvcnQgfTsKLSAgICAgICAgLy8gQUREOiBkbyBzZXJ2aWNlTG9jYXRpb24gY2hlY2sgZm9yIHNvYXBiaW5kOmFkZHJlc3M/Ci0gICAgICAgIGRlc2NlbmRlbnRzKHBvcnQpOwotICAgICAgfQotCi0gICAgICAvLyBBREQ6IHRoZSBmb2xsb3dpbmcgY291bGQgYmUgaW5zdGFudGlhdGVkIGhlcmUgaW5zdGVhZCB0byByZWZpbmUgY29udGV4dCBpbmZvCi0gICAgICAvLyBkZWZpbml0aW9ucyAKLSAgICAgIC8vIGltcG9ydHMgCi0gICAgICAvLyB0eXBlcwotCi0gICAgfQotCi0gICAgZWxzZSBpZiAod3NkbEVsZW1lbnQuaXNCaW5kaW5nKCkpCi0gICAgewotICAgICAgaWYgKHdzZGxFbGVtZW50LmdldFFOYW1lKCkgIT0gbnVsbAotICAgICAgICAmJiB3c2RsRWxlbWVudC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICE9IG51bGwKLSAgICAgICAgJiYgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9Ci0gICAgICAgICAgd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCkuZ2V0QmluZGluZyh3c2RsRWxlbWVudC5nZXRRTmFtZSgpKTsKLQotICAgICAgICBpZiAoYmluZGluZyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJXU0RMIEJpbmRpbmcgbmFtZWQgXCciCi0gICAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgICArICJcJyBub3QgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRoaXMuYmluZGluZ3MgPSBuZXcgQmluZGluZ1tdIHsgYmluZGluZyB9OwotCi0gICAgICAgICAgLy8gdGhlIHJlc3QgLi4uIGJlbG93IGJpbmRpbmc6CQotICAgICAgICAgIC8vIHBvcnRUeXBlcyBmcm9tIGJpbmRpbmcKLSAgICAgICAgICAvLyBvcGVyYXRpb25zIGZyb20gcG9ydFR5cGVzCi0gICAgICAgICAgLy8gbWVzc2FnZXMgZnJvbSBvcGVyYXRpb25zCi0gICAgICAgICAgZGVzY2VuZGVudHMoYmluZGluZyk7Ci0KLSAgICAgICAgICAvLyBhYm92ZSBiaW5kaW5nOgotICAgICAgICAgIC8vIHBvcnRzCi0gICAgICAgICAgLy8gZGVmaW5pdGlvbnMsIGltcG9ydHMsIHR5cGVzIChmdXR1cmU/KQkJCQkKLSAgICAgICAgICAvLyBhbmNlc3RvcnMoYmluZGluZ3MpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZSBpZiAod3NkbEVsZW1lbnQuaXNQb3J0VHlwZSgpKQotICAgIHsKLQotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPQotICAgICAgICB3c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKS5nZXRQb3J0VHlwZSh3c2RsRWxlbWVudC5nZXRRTmFtZSgpKTsKLSAgICAgIHRoaXMucG9ydFR5cGVzID0gbmV3IFBvcnRUeXBlW10geyBwb3J0VHlwZSB9OwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiV1NETCBQb3J0VHlwZSBuYW1lZCBcJyIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgKyAiXCcgbm90IGZvdW5kIGluIHNlcnZpY2UgZGVzY3JpcHRpb24iKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhpcy5wb3J0VHlwZXMgPSBuZXcgUG9ydFR5cGVbXSB7IHBvcnRUeXBlIH07Ci0gICAgICAgIC8vIHRoZSByZXN0IC4uLiBiZWxvdyBwb3J0VHlwZToJCi0gICAgICAgIGRlc2NlbmRlbnRzKHBvcnRUeXBlKTsKLQotICAgICAgICAvLyBhYm92ZSBwb3J0VHlwZToKLSAgICAgICAgLy8gcG9ydHMKLSAgICAgICAgLy8gZGVmaW5pdGlvbnMsIGltcG9ydHMsIHR5cGVzIChmdXR1cmUpID8KLSAgICAgICAgLy9hbmNlc3RvcnMocG9ydFR5cGVzKTsJCQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsRWxlbWVudC5pc09wZXJhdGlvbigpKQotICAgIHsKLQotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgICBTdHJpbmcgY29uZmlnT3BOYW1lID0gd3NkbEVsZW1lbnQuZ2V0TmFtZSgpOwotCi0gICAgICAvLyBVc2UgcGFyZW50RWxlbWVudE5hbWUgdG8gcXVhbGlmeSB0aGUgb3BlcmF0aW9uIHdpdGhpbiBhIHBvcnRUeXBlLgotICAgICAgUU5hbWUgcG9ydFR5cGVOYW1lID0gd3NkbEVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCk7Ci0gICAgICBQb3J0VHlwZVtdIHAgPSB3c2RsRG9jdW1lbnQuZ2V0UG9ydFR5cGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHAubGVuZ3RoICYmIG9wZXJhdGlvbiA9PSBudWxsOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChwW2ldLmdldFFOYW1lKCkuZXF1YWxzKHBvcnRUeXBlTmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3c2RsNGogYXZhaWxhYmxlIG1ldGhvZCBjYWxsIGJlbG93IGltcGxpZXMgdGhhdCBvbmx5IAotICAgICAgICAgIC8vIG5hbWUraW5wdXRuYW1lK291dHB1dG5hbWUgdW5pcXVlbHkgZGVmaW5lcyBvcGVyYXRpb24hIAotICAgICAgICAgIC8vIFNpbmNlIHdlIGRvIG5vdCBoYXZlIDxpbnB1dD4gJiA8b3V0cHV0PiBuYW1lIGluZm9ybWF0aW9uCi0gICAgICAgICAgLy8gYXZhaWxhYmxlIGluIHRoZSBjb25maWcsIHVzZSB0aGlzIGluc3RlYWQgZm9yIG5vdzogLSAKLSAgICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IG9wZXJhdGlvbiB3ZSBmaW5kOgotICAgICAgICAgIEl0ZXJhdG9yIG9wSXQgPSBwW2ldLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgICAgICAgd2hpbGUgKG9wSXQuaGFzTmV4dCgpICYmIG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9wID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnT3BOYW1lLmVxdWFscyhvcC5nZXROYW1lKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJObyBXU0RMIE9wZXJhdGlvbiBuYW1lZCBcJyIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgKyAiXCcgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBuZXcgT3BlcmF0aW9uW10geyBvcGVyYXRpb24gfTsKLQotICAgICAgICBkZXNjZW5kZW50cyhvcGVyYXRpb24pOwotICAgICAgICAvL2FuY2VzdG9ycyhvcGVyYXRpb25zKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh3c2RsRWxlbWVudC5pc01lc3NhZ2UoKSkKLSAgICB7Ci0KLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9Ci0gICAgICAgIHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpLmdldE1lc3NhZ2Uod3NkbEVsZW1lbnQuZ2V0UU5hbWUoKSk7Ci0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJObyBXU0RMIE1lc3NhZ2UgbmFtZWQgXCciCi0gICAgICAgICAgICArIHdzZGxFbGVtZW50LmdldFFOYW1lKCkKLSAgICAgICAgICAgICsgIlwnIGZvdW5kIGluIHNlcnZpY2UgZGVzY3JpcHRpb24iKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlW10geyBtZXNzYWdlIH07Ci0KLSAgICAgICAgLy9hbmNlc3RvcnMobWVzc2FnZXMpOyAKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIlVucmVjb2duaXNlZCA8V1NETEVsZW1lbnQgdHlwZT4gaW4gY29uZmlnOiAiICsgd3NkbEVsZW1lbnQuZ2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBnZXQgaW5mbyBhYm91dCB0aGUgZWZmZWN0aXZlIHNlcnZpY2UgbG9jYXRpb24gKHMpCi0gICAgLy90aGlzLmVuZFBvaW50cyA9IGRlcml2ZUVuZHBvaW50cyhhbmFseXplckNvbmZpZywgdGhpcy5wb3J0cywgdGhpcy5kZWZpbml0aW9ucyk7Ci0gICAgdGhpcy5lbmRQb2ludHMgPQotICAgICAgZGVyaXZlRW5kcG9pbnRzKHNlcnZpY2VSZWZlcmVuY2UsIHRoaXMucG9ydHMsIHRoaXMuZGVmaW5pdGlvbnMpOwotICB9Ci0KLSAgLyoqIAotICAgICAqIGFuY2VzdG9yIGNvZGUgaXMgbm90IHVzZWQgYXQgcHJlc2VudC4KLSAgICAgKiAKLSAgICAgKi8KLSAgLyogICAKLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKFBvcnRbXSBwb3J0cykgewotICAgICAJLy8gbm8gYW5jZXN0b3JzIG9mIFBvcnQgcmVxdWlyZWQgKGZvciBub3cpCi0gICAgIH0gCSAgICAKLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKEJpbmRpbmdbXSBiaW5kaW5ncykgewkgICAgCi0gICAgCQkvLyBQb3J0cyBmcm9tIEJpbmRpbmdzICAxLTItMQotICAgICAJCi0gICAgIAkvLyAqKiogY2hlYXQgZm9yIG5vdyAtIGdldCBwb3J0cyBmcm9tIGFsbCBzZXJ2aWNlcyBpbiB0aGUgd3NkbCBkb2MKLSAgICAgCS8vIEFERDogZmluZCBjb3JyZWN0IG1hcHBpbmcgYmFzZWQgb24gdGhlIHN1cHBsaWVkIGJpbmRpbmdzCi0gICAgIAlTZXJ2aWNlW10gc2VydmljZSA9IHdzZGxEb2N1bWVudC5nZXRTZXJ2aWNlcygpOwotICAgICAJSGFzaFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOwotICAJCWZvciAoaW50IGk9MDsgaT5zZXJ2aWNlLmxlbmd0aDsgaSsrKSB7Ci0gIAkJCXNldC5hZGQoc2VydmljZVtpXS5nZXRQb3J0cygpKTsgIAotICAJCX0KLSAgCQkJCi0gIAkJLy8gYXNzaWduIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIHByb2Nlc3MgdGhlIGdyYW5kcGFyZW50cyBpZiBhbnkJCQkJCQkJCQotICAJCWFuY2VzdG9ycyh0aGlzLnBvcnRzID0gKFBvcnRbXSlzZXQudG9BcnJheSh0aGlzLnBvcnRzID0gbmV3IFBvcnRbMF0pKTsKLSAgICAgfQotICAgICBwcm90ZWN0ZWQgdm9pZCBhbmNlc3RvcnMoUG9ydFR5cGVbXSBwb3J0VHlwZXMpIHsJICAgIAotICAgIAkJLy8gQmluZGluZ3MgZnJvbSBQb3J0VHlwZXMgIDEtMi0xCi0gICAgIAkKLSAgICAgCS8vIGFkZCBoYXZlIHRvIHN0YXJ0IHdpdGggYWxsIGJpbmRpbmdzIGluIGRvYyBhbmQgc2VhcmNoIGZvciB0aG9zZQotICAgICAJLy8gd2l0aCB0aGUgcG9ydFR5cGUgIAotICAgICAJSGFzaFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOwotICAJCWZvciAoaW50IGk9MDsgaT5wb3J0VHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgCQkvLyBzZXQuYWRkKHBvcnRUeXBlc1tpXS5nZXQoKSk7ICAKLSAgCQl9Ci0gIAkJCQotICAJCS8vIGFzc2lnbiB0aGUgcGFyZW50IGdyb3VwIGFuZCBwcm9jZXNzIHRoZSBncmFuZHBhcmVudHMgaWYgYW55CQkJCQkJCQkKLSAgCQlhbmNlc3RvcnModGhpcy5iaW5kaW5ncyA9IChCaW5kaW5nW10pc2V0LnRvQXJyYXkodGhpcy5iaW5kaW5ncyA9IG5ldyBCaW5kaW5nWzBdKSk7Ci0gICAgIH0KLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKE9wZXJhdGlvbltdIG9wZXJhdGlvbnMpIHsJICAgIAotICAgIAkJLy8gUG9ydFR5cGVzIGZyb20gT3BlcmF0aW9ucyAgMS0yLTEKLSAgICAgCSAgCi0gICAgIAlIYXNoU2V0IHNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gIAkJZm9yIChpbnQgaT0wOyBpPm9wZXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgCQkJLy8gc2V0LmFkZChvcGVyYXRpb25zW2ldLmdldCgpKTsgIAotICAJCX0KLSAgCQkJCi0gIAkJLy8gYXNzaWduIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIHByb2Nlc3MgdGhlIGdyYW5kcGFyZW50cyBpZiBhbnkJCQkJCQkJCQotICAJCWFuY2VzdG9ycyh0aGlzLnBvcnRUeXBlcyA9IChQb3J0VHlwZVtdKXNldC50b0FycmF5KHRoaXMucG9ydFR5cGVzID0gbmV3IFBvcnRUeXBlWzBdKSk7Ci0gICAgIH0KLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKE1lc3NhZ2VbXSBtZXNzYWdlcykgewkgICAgCi0gICAgCQkvLyBPcGVyYXRpb25zIGZyb20gTWVzc2FnZXMgIDEtMi0xCi0gICAgIAkvLyBBREQgZml4IGl0ISAgCi0gICAgIAlIYXNoU2V0IHNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gIAkJZm9yIChpbnQgaT0wOyBpPm1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gIAkJCS8vIHNldC5hZGQobWVzc2FnZXNbaV0uZ2V0KCkpOyAgCi0gIAkJfQotICAJCQkKLSAgCQkvLyBhc3NpZ24gdGhlIHBhcmVudCBncm91cCAJCi0gIAkJdGhpcy5wb3J0VHlwZXMgPSAoUG9ydFR5cGVbXSlzZXQudG9BcnJheSh0aGlzLnBvcnRUeXBlcyA9IG5ldyBQb3J0VHlwZVswXSk7Ci0gICAgIH0KLSAgKi8KLQotICAvKioKLSAgICogRGVzY2VuZGFudCBtZXRob2QgZm9yIGNvbXBsZXRpbmcgY2FuZGlkYXRlIHNlcnZpY2UgY29udGV4dCBjcmVhdGlvbi4KLSAgICogQHBhcmFtIHBvcnQgIGEgUG9ydCBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcG9ydCBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoUG9ydCBwb3J0KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBCaW5kaW5nIGZyb20gUG9ydCAgMS0yLTEKLQotICAgIGlmIChwb3J0ID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGEgUG9ydCB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5iaW5kaW5ncyA9IG5ldyBCaW5kaW5nW10geyBwb3J0LmdldEJpbmRpbmcoKX07Ci0gICAgICBpZiAodGhpcy5iaW5kaW5nc1swXSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvKiBBc3NpZ24gdGhlIGNoaWxkIGdyb3VwIGFuZCBwcm9jZXNzIHRoZSBncmFuZGNoaWxkcmVuIGlmIGFueS4KLSAgICAgICAgKiBOdWxsIGFyZ3VtZW50IHZhbHVlIHBhc3NlZCBpbnRvIHRoZSBmb2xsb3dpbmcgbWV0aG9kIHdvdWxkIAotICAgICAgICAqIHN1Z2dlc3QgYSBXU0RMIGRlZmluaXRpb24gaW5jb25zaXN0ZW5jeQotICAgICAgICAqIHdoaWNoIHdpbGwgYmUgcGlja2VkIHVwIGR1cmluZyBEZXNjcmlwdGlvbiBBcnRpZmFjdCBUQSB0ZXN0aW5nLgotICAgICAgICAqLwotICAgICAgICBkZXNjZW5kZW50cyh0aGlzLmJpbmRpbmdzWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRGVzY2VuZGFudCBtZXRob2QgZm9yIGNvbXBsZXRpbmcgY2FuZGlkYXRlIHNlcnZpY2UgY29udGV4dCBjcmVhdGlvbi4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYmluZGluZyBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoQmluZGluZyBiaW5kaW5nKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBwb3J0VHlwZSBmcm9tIEJpbmRpbmcgMS0yLTEKLQotICAgIGlmIChiaW5kaW5nID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGEgQmluZGluZyB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5wb3J0VHlwZXMgPSBuZXcgUG9ydFR5cGVbXSB7IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKX07Ci0gICAgICBpZiAodGhpcy5wb3J0VHlwZXNbMF0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLyogQXNzaWduIHRoZSBjaGlsZCBncm91cCBhbmQgcHJvY2VzcyB0aGUgZ3JhbmRjaGlsZHJlbiBpZiBhbnkuCi0gICAgICAgIAkqIE51bGwgYXJndW1lbnQgdmFsdWUgcGFzc2VkIGludG8gdGhlIGZvbGxvd2luZyBtZXRob2Qgd291bGQgCi0gICAgICAgIAkqIHN1Z2dlc3QgYSBXU0RMIGRlZmluaXRpb24gaW5jb25zaXN0ZW5jeQotICAgICAgICAJKiB3aGljaCB3aWxsIGJlIHBpY2tlZCB1cCBkdXJpbmcgRGVzY3JpcHRpb24gQXJ0aWZhY3QgVEEgdGVzdGluZy4KLSAgICAgICAgCSovCi0gICAgICAgIGRlc2NlbmRlbnRzKHRoaXMucG9ydFR5cGVzWzBdKTsKLQotICAgICAgICAvLyBHZXQgYW55IG1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSBoZWFkZXJzIGFuZCBoZWFkZXJmYXVsdHMKLQotICAgICAgICAvLyBHZXQgcmVmZXJlbmNlIHRvIGRlZmluaXRpb24KLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbMF07Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1lc3NhZ2VzIGFscmVhZHksIHRoZW4gZ2V0IHRoZW0gYXMgYSBjb2xsZWN0aW9uCi0gICAgICAgIEhhc2hTZXQgbWVzc2FnZVNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIGlmIChtZXNzYWdlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlU2V0LmFkZChtZXNzYWdlc1tpXSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZWZlcmVuY2VkIG9ubHkgYnkgYSBiaW5kaW5nIAotICAgICAgICBIYXNoU2V0IGJpbmRpbmdNZXNzYWdlcyA9IFdTRExVdGlscy5maW5kTWVzc2FnZXMoZGVmaW5pdGlvbiwgYmluZGluZyk7Ci0KLSAgICAgICAgLy8gQWRkIHRoZXNlIG1lc3NhZ2VzIHRvIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGxpc3QgIAotICAgICAgICBtZXNzYWdlU2V0LmFkZEFsbChiaW5kaW5nTWVzc2FnZXMpOwotCi0gICAgICAgIC8vIENyZWF0ZSBhcnJheSBmcm9tIG1lc3NhZ2Ugc2V0Ci0gICAgICAgIHRoaXMubWVzc2FnZXMgPQotICAgICAgICAgIChNZXNzYWdlW10pIG1lc3NhZ2VTZXQudG9BcnJheSh0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VbMF0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBEZXNjZW5kYW50IG1ldGhvZCBmb3IgY29tcGxldGluZyBjYW5kaWRhdGUgc2VydmljZSBjb250ZXh0IGNyZWF0aW9uLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgIGEgUG9ydFR5cGUgb2JqZWN0Ci0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHBvcnRUeXBlIGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBkZXNjZW5kZW50cyhQb3J0VHlwZSBwb3J0VHlwZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gT3BlcmF0aW9ucyBmcm9tIFBvcnRUeXBlIDEtMi1uCi0KLSAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvcjogZXhwZWN0ZWQgYSBQb3J0VHlwZSB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5vcGVyYXRpb25zID0KLSAgICAgICAgKE9wZXJhdGlvbltdKSAocG9ydFR5cGUKLSAgICAgICAgICAuZ2V0T3BlcmF0aW9ucygpCi0gICAgICAgICAgLnRvQXJyYXkodGhpcy5vcGVyYXRpb25zID0gbmV3IE9wZXJhdGlvblswXSkpOwotICAgICAgaWYgKHRoaXMub3BlcmF0aW9ucy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBkZXNjZW5kZW50cyh0aGlzLm9wZXJhdGlvbnMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgICAqIERlc2NlbmRhbnQgbWV0aG9kIGZvciBjb21wbGV0aW5nIGNhbmRpZGF0ZSBzZXJ2aWNlIGNvbnRleHQgY3JlYXRpb24uCi0gICAgICogQHBhcmFtIG9wZXJhdGlvbiAgYSBPcGVyYXRpb24gb2JqZWN0Ci0gICAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgb3BlcmF0aW9uIGlzIG51bGwuCi0gICAgICovCi0gIHByb3RlY3RlZCB2b2lkIGRlc2NlbmRlbnRzKE9wZXJhdGlvbiBvcGVyYXRpb24pIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIE1lc3NhZ2VzIGZyb20gT3BlcmF0aW9uCi0KLSAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGFuIE9wZXJhdGlvbiB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZGVzY2VuZGVudHMobmV3IE9wZXJhdGlvbltdIHsgb3BlcmF0aW9uIH0pOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBEZXNjZW5kYW50IG1ldGhvZCBmb3IgY29tcGxldGluZyBjYW5kaWRhdGUgc2VydmljZSBjb250ZXh0IGNyZWF0aW9uLgotICAgKiBAcGFyYW0gb3BlcmF0aW9ucyAgYW4gYXJyYXkgb2Ygb3BlcmF0aW9ucy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgb3BlcmF0aW9ucyBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoT3BlcmF0aW9uW10gb3BlcmF0aW9ucykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gTWVzc2FnZXMgZnJvbSBPcGVyYXRpb25zIDEtMi1uCi0KLSAgICBpZiAob3BlcmF0aW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkludGVybmFsIGVycm9yOiBleHBlY3RlZCBhbiBPcGVyYXRpb25bXSB2YWx1ZSIpOwotICAgIH0KLQotICAgIEhhc2hTZXQgc2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG9wZXJhdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKG9wZXJhdGlvbnNbaV0uZ2V0SW5wdXQoKSAhPSBudWxsKQotICAgICAgICBzZXQuYWRkKG9wZXJhdGlvbnNbaV0uZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkpOyAvLzEtMi0xCi0gICAgICBpZiAob3BlcmF0aW9uc1tpXS5nZXRPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICBzZXQuYWRkKG9wZXJhdGlvbnNbaV0uZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpKTsgLy8xLTItMQotCi0gICAgICAvLyBnZXQgbWVzc2FnZXMgYXNzb2NpYXRlZCB3aXRoIGZhdWx0cyBmb3IgdGhpcyBvcGVyYXRpb24gCi0gICAgICAvLyAxLTItbgotICAgICAgSXRlcmF0b3IgaXQgPSBvcGVyYXRpb25zW2ldLmdldEZhdWx0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBzZXQuYWRkKCgoRmF1bHQpIGl0Lm5leHQoKSkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhpcy5tZXNzYWdlcyA9IChNZXNzYWdlW10pIHNldC50b0FycmF5KHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZVswXSk7Ci0gICAgLy8gbm8gZGVzY2VuZGVudHMgb2YgbWVzc2FnZXMgc28gc3RvcC4KLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlIGEgcmVjdXJzaXZlIG5vbi1yZXBlYXRpbmcgbGlzdCBvZiBpbXBvcnRzIGZvciB0aGUgc3BlY2lmaWVkCi0gICAqIFdTREwgZG9jdW1lbnQgZGVmaW5pdGlvbi4KLSAgICovCi0gIC8qICAgcHJpdmF0ZSBIYXNoU2V0IGdldEFsbEltcG9ydHMoRGVmaW5pdGlvbiByb290RGVmKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgCQotICAgICAJSGFzaFNldCBpbXBvcnRTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAJCi0gICAgIAlDb2xsZWN0aW9uIGltcG9ydExpc3QgPSAgcm9vdERlZi5nZXRJbXBvcnRzKCkudmFsdWVzKCk7Ci0gICAgIAlJdGVyYXRvciBpID0gaW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAJCi0gICAgIAl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLSAgICAgCQlJbXBvcnQgbmV4dEltcG9ydCA9IChJbXBvcnQpKGkubmV4dCgpKTsKLSAgICAgCQlpZiAobmV4dEltcG9ydCAhPSBudWxsKSB7Ci0gICAgIAkJCS8vIGl0cyBhIHdzZGwgZG9jdW1lbnQKLSAgICAgCQkJaW1wb3J0U2V0LmFkZEFsbChnZXRBbGxJbXBvcnRzKG5leHRJbXBvcnQuZ2V0RGVmaW5pdGlvbigpKSk7Ci0gICAgIAkJfSAgIAkJCQotICAgICAJfQotICAgICAJCi0gICAgIAlyZXR1cm4gKGltcG9ydFNldCk7Ci0gICAgIH0KLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRBbGxJbXBvcnRzKERlZmluaXRpb24gcm9vdERlZikgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBIYXNoU2V0IGltcG9ydFNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgaW1wb3J0U2V0ID0gIGdldEFsbEltcG9ydHMobmV3IEFycmF5TGlzdCgpLCByb290RGVmKTsKLSAgICByZXR1cm4gKGltcG9ydFNldCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSGFzaFNldCBnZXRBbGxJbXBvcnRzKExpc3QgYWxyZWFkeVByb2Nlc3NlZERlZmluaXRpb25zLCBEZWZpbml0aW9uIHJvb3REZWYpIAotICB7Ci0JSGFzaFNldCBpbXBvcnRTZXQgPSBuZXcgSGFzaFNldCgpOwotCWlmICgocm9vdERlZiAhPSBudWxsKSAmJiAoIWFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucy5jb250YWlucyhyb290RGVmKSkpCi0JewotICAgICAgYWxyZWFkeVByb2Nlc3NlZERlZmluaXRpb25zLmFkZChyb290RGVmKTsJCi0JICBNYXAgaW1wb3J0TWFwID0gcm9vdERlZi5nZXRJbXBvcnRzKCk7Ci0gICAgICBJdGVyYXRvciBpID0gaW1wb3J0TWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBuZXh0SW1wb3J0TGlzdCA9IChMaXN0KSAoaS5uZXh0KCkpOwotICAgICAgICBJdGVyYXRvciBsaXN0SXQgPSBuZXh0SW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAobGlzdEl0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEltcG9ydCBuZXh0SW1wb3J0ID0gKEltcG9ydCkgbGlzdEl0Lm5leHQoKTsKLSAgICAgICAgICBpZiAobmV4dEltcG9ydCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltcG9ydFNldC5hZGQobmV4dEltcG9ydCk7Ci0gICAgICAgICAgICBEZWZpbml0aW9uIGRlZiA9IG5leHRJbXBvcnQuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgIAkgICAgSGFzaFNldCBuZXN0ZWRJbXBvcnRzID0gZ2V0QWxsSW1wb3J0cyhhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMsIGRlZik7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGogPSBuZXN0ZWRJbXBvcnRzLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgICAgICAgICAgaW1wb3J0U2V0LmFkZChqLm5leHQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbXBvcnRTZXQ7Ci0gIH0KLQotICAvKioKLSAgICogZ2V0IGFsbCBzZXJ2aWNlIGxvY2F0aW9uIGVuZHBvaW50IHZhbHVlcwotICAgKiByZWxldmFudCB0byB0aGUgc2VydmljZSB1bmRlciB0ZXN0LgotICAgKiAKLSAgICogSWYgdGhlIHNlcnZpY2UgbG9jYXRpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBjb25maWcgd2UgdXNlCi0gICAqIGp1c3QgdGhhdC4KLSAgICogT3RoZXJ3aXNlLCBpZiB0aGUgcG9ydCBpcyBzcGVjaWZpZWQsIHdlIGdldCBhbGwgZW5kcG9pbnRzCi0gICAqIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBvcnQuCi0gICAqIElmIHdlIGhhdmUgbmVpdGhlciB0aGUgc2VydmljZSBsb2NhdGlvbiB2YWx1ZSBvciB0aGUgcG9ydCwKLSAgICogdGhlbiBhbGwgZW5kcG9pbnRzIGluIHRoZSBkZWZpbml0aW9uIGFyZSB1c2VkLgotICAgKi8KLSAgcHJpdmF0ZSBVUklbXSBkZXJpdmVFbmRwb2ludHMoCi0gIC8vQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsIAotICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsIFBvcnRbXSBwb3J0cywgRGVmaW5pdGlvbltdIGRlZmluaXRpb25zKQotICB7Ci0KLSAgICBVUklbXSBlbmRwID0gbnVsbDsKLSAgICAvL1BvcnQgcG9ydCA9IG51bGw7CQotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBzZXJ2aWNlTG9jYXRpb24gPSBudWxsOwotICAgICAgLy8gdHJ5IHNlcnZpY2UgbG9jYXRpb24uLi4KLSAgICAgIC8vaWYgKChzZXJ2aWNlTG9jYXRpb24gPSBhbmFseXplckNvbmZpZy5nZXRTZXJ2aWNlTG9jYXRpb24oKSkgIT0gbnVsbCkgeyAgICAgIAotICAgICAgaWYgKChzZXJ2aWNlTG9jYXRpb24gPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFNlcnZpY2VMb2NhdGlvbigpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBlbmRwID0gbmV3IFVSSVtdIHsgbmV3IFVSSShzZXJ2aWNlTG9jYXRpb24pfTsKLSAgICAgIH0KLSAgICAgIC8vZWxzZSBpZiAoYW5hbHl6ZXJDb25maWcuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnQoKSkgewotICAgICAgZWxzZSBpZiAoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmlzUG9ydCgpKQotICAgICAgewotICAgICAgICBpZiAocG9ydHMubGVuZ3RoICE9IDEpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciAtIGV4cGVjdGVkIDEtZWxlbWVudCBQb3J0IGFycmF5Iik7Ci0gICAgICAgIH0KLSAgICAgICAgLy9lbHNlIHsKLSAgICAgICAgLy8JcG9ydCA9IHBvcnRzWzBdOyAvLyBpZiBQb3J0IHdhcyBnaXZlbiBpbiBjb25maWcsIHRoZXJlIGlzIGp1c3Qgb25lCi0gICAgICAgIC8vfQotICAgICAgICAvL1FOYW1lIHNvYXBBZGRyZXNzID0gbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYWRkcmVzcyIpOwotICAgICAgICBJdGVyYXRvciBpID0gcG9ydHNbMF0uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpICYmIHNlcnZpY2VMb2NhdGlvbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGV4dEVsZW0gaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2lmIChleHRFbC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhzb2FwQWRkcmVzcykgewotICAgICAgICAgICAgLy8gdGhpcyBlbGVtZW50IGlzIG91ciBTT0FQQWRkcmVzcyAtIGdldCB0aGUgbG9jYXRpb24KLSAgICAgICAgICAgIHNlcnZpY2VMb2NhdGlvbiA9ICgoU09BUEFkZHJlc3MpIGV4dEVsZW0pLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICBlbmRwID0gbmV3IFVSSVtdIHsgbmV3IFVSSShzZXJ2aWNlTG9jYXRpb24pfTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgLy8gbm8gcG9ydCBpbmZvIGZyb20gY29uZmlnLCBzbyBzdXBwbHkgYWxsIGluIGRvY3VtZW50Ci0gICAgICAgIC8vIFFOYW1lIHNvYXBBZGRyZXNzID0gbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYWRkcmVzcyIpOwotICAgICAgICBIYXNoU2V0IGVuZHBvaW50U2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgSXRlcmF0b3IgaSA9IGRlZmluaXRpb25zWzBdLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGkubmV4dCgpOwotICAgICAgICAgIGlmIChleHRFbGVtIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9pZiAoZXh0RWwuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoc29hcEFkZHJlc3MpIHsKLSAgICAgICAgICAgIC8vIHRoaXMgZWxlbWVudCBpcyBvdXIgU09BUEFkZHJlc3MgLSBnZXQgdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICBlbmRwb2ludFNldC5hZGQoKChTT0FQQWRkcmVzcykgZXh0RWxlbSkuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIGRlcml2ZWQgTGlzdCB0byBhIFVSSSBhcnJheQotICAgICAgICBlbmRwID0gKFVSSVtdKSBlbmRwb2ludFNldC50b0FycmF5KGVuZHAgPSBuZXcgVVJJWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIGVuZHA7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgYmluZGluZy4KLSAgICogQHJldHVybiBCaW5kaW5nCi0gICAqLwotICBwdWJsaWMgQmluZGluZ1tdIGdldEJpbmRpbmdzKCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlbmRQb2ludHMuCi0gICAqIEByZXR1cm4gVVJJW10KLSAgICovCi0gIHB1YmxpYyBVUklbXSBnZXRFbmRQb2ludHMoKQotICB7Ci0gICAgLy8gZ2V0IGxpc3Qgb2YgbWF0Y2hpbmcgZW5kcG9pbnQocykgYXNzb2NpYXRlZCB3aXRoIHNlcnZpY2UuCi0gICAgcmV0dXJuIGVuZFBvaW50czsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGVuZFBvaW50cyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGhvc3QgYW5kIHBvcnQuCi0gICogQHBhcmFtIGhvc3RBbmRQb3J0ICBob3N0IGFuZCBwb3J0IGxvY2F0aW9uLgotICAqIEByZXR1cm4gVVJJW10gaWYgbWF0Y2hlZCwgbnVsbCBvdGhlcndpc2UuCi0gICovCi0gIHB1YmxpYyBVUklbXSBnZXRFbmRQb2ludHMoU3RyaW5nIGhvc3RBbmRQb3J0KQotICB7Ci0gICAgLy8gZ2V0IGxpc3Qgb2YgbWF0Y2hpbmcgZW5kcG9pbnRzIGFzc29jaWF0ZWQgd2l0aCBzZXJ2aWNlLAotICAgIC8vIGhhdmluZyB0aGUgc3BlY2lmaWVkIGhvc3QgYW5kIHBvcnQgY29uZmlndXJhdGlvbgotICAgIFN0cmluZyBwb3J0OwotCi0gICAgVmVjdG9yIG1hdGNoZWRFbmRwb2ludHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRQb2ludHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gUEI6IElmIHRoZSBlbmRwb2ludCBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXIsIHRoZW4gZGVmYXVsdCBpdCB0byAiODAiCi0gICAgICBwb3J0ID0KLSAgICAgICAgKGVuZFBvaW50c1tpXS5nZXRQb3J0KCkgPT0gLTEpCi0gICAgICAgICAgPyAiODAiCi0gICAgICAgICAgOiBTdHJpbmcudmFsdWVPZihlbmRQb2ludHNbaV0uZ2V0UG9ydCgpKTsKLSAgICAgIGlmIChob3N0QW5kUG9ydC5lcXVhbHMoZW5kUG9pbnRzW2ldLmdldEhvc3QoKSArICI6IiArIHBvcnQpKQotICAgICAgewotICAgICAgICBtYXRjaGVkRW5kcG9pbnRzLmFkZChlbmRQb2ludHNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKFVSSVtdKSBtYXRjaGVkRW5kcG9pbnRzLnRvQXJyYXkobmV3IFVSSVswXSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIE9wZXJhdGlvbgotICAgKi8KLSAgcHVibGljIE9wZXJhdGlvbltdIGdldE9wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcG9ydFR5cGUuCi0gICAqIEByZXR1cm4gUG9ydFR5cGUKLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVtdIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBwb3J0VHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBob3N0QW5kUG9ydCBtYXRjaGVzIGF0IGxlYXN0IG9uZSBjb250ZXh0IGVuZHBvaW50LgotICAgKiBAcGFyYW0gaG9zdEFuZFBvcnRTdHJpbmcgYSBob3N0IGFuZCBwb3J0IGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGhvc3RBbmRQb3J0IG1hdGNoZXMgYXQgbGVhc3Qgb25lIGNvbnRleHQgZW5kcG9pbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGdpdmVuIGhvc3RhbmRQb3J0IFN0cmluZyBkb2VzIG5vdCBjb252ZXJ0IHRvIFVSSS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0hvc3RBbmRQb3J0KFN0cmluZyBob3N0QW5kUG9ydFN0cmluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVVJJIGhvc3RBbmRQb3J0OwotICAgIHRyeQotICAgIHsKLSAgICAgIGhvc3RBbmRQb3J0ID0gbmV3IFVSSShob3N0QW5kUG9ydFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQ291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIFVSSTogIiArIGhvc3RBbmRQb3J0U3RyaW5nKTsKLSAgICB9Ci0gICAgU3RyaW5nIGhvc3QgPSBob3N0QW5kUG9ydC5nZXRIb3N0KCk7Ci0gICAgaW50IHBvcnQgPSBob3N0QW5kUG9ydC5nZXRQb3J0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmVuZFBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAodGhpcy5lbmRQb2ludHNbaV0uZ2V0SG9zdCgpLmVxdWFscyhob3N0KQotICAgICAgICAmJiB0aGlzLmVuZFBvaW50c1tpXS5nZXRQb3J0KCkgPT0gcG9ydCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsgLy8gZm9yIG5vdwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGRlZmluaXRpb25zLgotICAgKiBAcmV0dXJuIERlZmluaXRpb25bXQotICAgKi8KLSAgcHVibGljIERlZmluaXRpb25bXSBnZXREZWZpbml0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gZGVmaW5pdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW1wb3J0cy4KLSAgICogQHJldHVybiBJbXBvcnRbXQotICAgKi8KLSAgcHVibGljIEltcG9ydFtdIGdldEltcG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gTWVzc2FnZVtdCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVtdIGdldE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwb3J0cy4KLSAgICogQHJldHVybiBQb3J0W10KLSAgICovCi0gIHB1YmxpYyBQb3J0W10gZ2V0UG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBvcnRUeXBlcy4KLSAgICogQHJldHVybiBQb3J0VHlwZVtdCi0gICAqLwotICBwdWJsaWMgUG9ydFR5cGVbXSBnZXRQb3J0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRUeXBlczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB0eXBlcy4KLSAgICogQHJldHVybiBUeXBlc1tdCi0gICAqLwotICBwdWJsaWMgVHlwZXNbXSBnZXRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gdHlwZXM7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHdzZGxEb2N1bWVudC4KLSAgICogQHJldHVybiBXU0RMRG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgZ2V0V3NkbERvY3VtZW50KCkKLSAgewotICAgIHJldHVybiB3c2RsRG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdHlwZXMgZWxlbWVudC4KLSAgICogQHBhcmFtIHR5cGVzIGEgVHlwZXMgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdHlwZXMgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIFR5cGVzIGNoZWNrVHlwZXM7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoKChjaGVja1R5cGVzID0gZGVmaW5pdGlvbnNbaV0uZ2V0VHlwZXMoKSkgIT0gbnVsbCkKLSAgICAgICAgJiYgKGNoZWNrVHlwZXMuZXF1YWxzKHR5cGVzKSkpCi0gICAgICB7Ci0gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBiaW5kaW5nIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBiaW5kaW5nIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbnNbaV0uZ2V0QmluZGluZyhiaW5kaW5nLmdldFFOYW1lKCkpICE9IG51bGwpCi0gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBwb3J0VHlwZSBlbGVtZW50LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgYSBQb3J0VHlwZSBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBwb3J0VHlwZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbnNbaV0uZ2V0UG9ydFR5cGUocG9ydFR5cGUuZ2V0UU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgICAgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zW2ldOwotICAgIH0KLQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgTWVzc2FnZSBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZpbml0aW9ucy5sZW5ndGggJiYgZGVmaW5pdGlvbiA9PSBudWxsOyBpKyspCi0gICAgewotICAgICAgaWYgKGRlZmluaXRpb25zW2ldLmdldE1lc3NhZ2UobWVzc2FnZS5nZXRRTmFtZSgpKSAhPSBudWxsKQotICAgICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbaV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvRW52aXJvbm1lbnRJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9FbnZpcm9ubWVudEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWI0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9FbnZpcm9ubWVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlhNTEluZm87Ci0KLS8qKgotICogVGhpcyBjbGFzcyBtYWludGFpbnMgdGhlIEVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRW52aXJvbm1lbnRJbmZvIGltcGxlbWVudHMgWE1MSW5mbwotewotICAvKioKLSAgICogTG9nIHRpbWVzdGFtcC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9nVGltZXN0YW1wID0gbnVsbDsKLQotICAvKioKLSAgICogTW9uaXRvciBjb25maWcgY29tbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbW9uaXRvckNvbmZpZ0NvbW1lbnQgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgb2JqZWN0LgotICAgKiBAcGFyYW0gbG9nVGltZXN0YW1wIHRoZSBsb2cgdGltZXN0YW1wLgotICAgKiBAcGFyYW0gbW9uaXRvckNvbmZpZ0NvbW1lbnQgdGhlIE1vbml0b3IgY29uZmlnIGNvbW1lbnQuCi0gICAqLwotICBwdWJsaWMgRW52aXJvbm1lbnRJbmZvKFN0cmluZyBsb2dUaW1lc3RhbXAsIFN0cmluZyBtb25pdG9yQ29uZmlnQ29tbWVudCkKLSAgewotICAgIHRoaXMubG9nVGltZXN0YW1wID0gbG9nVGltZXN0YW1wOwotICAgIHRoaXMubW9uaXRvckNvbmZpZ0NvbW1lbnQgPSBtb25pdG9yQ29uZmlnQ29tbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlhNTEluZm8jdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoIW5zTmFtZS5lcXVhbHMoIiIpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIFN0YXJ0IGVsZW1lbnQKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9MT0cgKyAiICIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIHRoaXMubG9nVGltZXN0YW1wICsgIlwiLz4iKTsKLQotICAgIHB3LnByaW50KAotICAgICAgIiAgICAgICAgPCIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVAotICAgICAgICArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy5tb25pdG9yQ29uZmlnQ29tbWVudCk7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgICAgIDwvIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9MT0cKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UCi0gICAgICAgICsgIj4iKTsKLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPRyArICI+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9TZXJ2aWNlUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9TZXJ2aWNlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2U0ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvU2VydmljZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gcHJvY2VzcyBkZXNjcmlwdGlvbiB0ZXN0IGFzc2VydGlvbnMuICBUaGUgaW5mcm9tYXRpb24KLSAqIGluIHRoaXMgb2JqZWN0IHdpbGwgYmUgZGVyaXZlZCBmcm9tIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIFVEREkgZW50cmllcywgb3IgdGhlIFdTREwgcG9ydCBlbGVtZW50LiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VSZWZlcmVuY2UKLXsKLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50OwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxMb2NhdGlvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyBzZXJ2aWNlTG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBzZXJ2aWNlIHJlZmVyZW5jZSB3aXRob3V0IHJlZmVyZW5jZXMuICBBbGwgb2YgdGhlbSB3aWxsIGJlIHNldCBsYXRlciBhcyB0ZXN0IGFzc2VydGlvbnMgYXJlIAotICAgKiBiZWluZyBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgU2VydmljZVJlZmVyZW5jZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgc2VydmljZSByZWZlcmVuY2UgZnJvbSBlbnRyaWVzIHNwZWNpZmllZCBpbiB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuICBUaGlzIGluZm9ybWF0aW9uIG1heSBpbmNsdWRlCi0gICAqIHRoZSBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSB0aGUgd3NkbEVsZW1lbnQsIHdzZGxVUkkgYW5kIHNlcnZpY2VMb2NhdGlvbiBlbGVtZW50cy4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnIGFuIEFuYWx5emVyQ29uZmlnIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlUmVmZXJlbmNlKEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnKQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudCA9IGFuYWx5emVyQ29uZmlnLmdldFdTRExFbGVtZW50KCk7Ci0gICAgdGhpcy53c2RsTG9jYXRpb24gPSBhbmFseXplckNvbmZpZy5nZXRXU0RMTG9jYXRpb24oKTsKLSAgICB0aGlzLnNlcnZpY2VMb2NhdGlvbiA9IGFuYWx5emVyQ29uZmlnLmdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBXU0RMIGVsZW1lbnQgd2hlcmUgYW5hbHlzaXMgc2hvdWxkIGJlZ2luLgotICAgKiBAcmV0dXJuIGhlIFdTREwgZWxlbWVudCB3aGVyZSBhbmFseXNpcyBzaG91bGQgYmVnaW4uCi0gICAqIEBzZWUgI3NldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXU0RMIGVsZW1lbnQgd2hlcmUgYW5hbHlzaXMgc2hvdWxkIGJlZ2luLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgdGhlIFdTREwgZWxlbWVudCB3aGVyZSBhbmFseXNpcyBzaG91bGQgYmVnaW4uCi0gICAqIEBzZWUgI2dldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRXU0RMTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxMb2NhdGlvbiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRXU0RMTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsTG9jYXRpb24gPSB3c2RsTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdlYiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdlYiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnNlcnZpY2VMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgV2ViIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBzZXJ2aWNlTG9jYXRpb24gZWIgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMuc2VydmljZUxvY2F0aW9uID0gc2VydmljZUxvY2F0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQW5hbHl6ZXJDb25maWcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGEyMTk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWc7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgYW5hbHp5ZXIgY29uZmlndXJhdGlvbiBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQW5hbHl6ZXJDb25maWcgZXh0ZW5kcyBXU0lEb2N1bWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIENvcnJlbGF0aW9uIHR5cGVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9PUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9FTkRQT0lOVCA9ICJlbmRwb2ludCI7Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnLgotICAgKiBAcGFyYW0gbWVzc2FnZUxpc3QgYSBNZXNzYWdlTGlzdCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0KTsKLQotICAvKioKLSAgICogR2V0IG9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIG9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXREZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBzZWUgI2dldERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgdmVyYm9zZSBvcHRpb24uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB2ZXJib3NlLgotICAgKiBAc2VlICNzZXRWZXJib3NlT3B0aW9uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRWZXJib3NlT3B0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHBhcmFtIHZlcmJvc2UgdmVyYm9zZSBvcHRpb24uCi0gICAqIEBzZWUgI2dldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZlcmJvc2VPcHRpb24oYm9vbGVhbiB2ZXJib3NlKTsKLQotICAvKioKLSAgICogR2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHJldHVybiBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgcmVwbGFjZSByZXBvcnQgZmlsZSBvcHRpb24uCi0gICAqIEByZXR1cm4gcmVwbGFjZSByZXBvcnQgZmlsZSBvcHRpb24uCi0gICAqIEBzZWUgI3NldFJlcGxhY2VSZXBvcnQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJlcGxhY2VSZXBvcnQoKTsKLQotICAvKioKLSAgICogU2V0IHJlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAcGFyYW0gcmVwbGFjZVJlcG9ydCAgZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0UmVwbGFjZVJlcG9ydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVwbGFjZVJlcG9ydChib29sZWFuIHJlcGxhY2VSZXBvcnQpOwotCi0gIC8qKgotICAgKiBHZXQgcmVwb3J0IGZpbGUgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gcmVwb3J0IGZpbGUgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcG9ydExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHBhcmFtIHJlcG9ydFVSSSByZXBvcnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKTsKLQotICAvKioKLSAgICogR2V0IHN0eWxlIHNoZWV0LgotICAgKiBAcmV0dXJuIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNzZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgQWRkU3R5bGVTaGVldCBnZXRBZGRTdHlsZVNoZWV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzdHlsZSBzaGVldC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYSBzdHlsZSBzaGVldC4KLSAgICogQHNlZSAjZ2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWRkU3R5bGVTaGVldChBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQpOwotCi0gIC8qKgotICAgKiBHZXQgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJIHByb2ZpbGUgdGVzdCBhc3NlcnRpb25zIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbihTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSk7Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNhZ2UgbG9nIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIG1lc2FnZSBsb2cgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldExvZ0xvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0xvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvZ1VSSSBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpOwotCi0gIC8qKgotICAgKiBJcyBtZXNzYWdlIGxvZyBsb2NhdGlvbiBzcGVjaWZpZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBtZXNzYWdlIGxvZyBsb2NhdGlvbiBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xvZ1NldCgpOwotCi0gIC8qKgotICAgKiBHZXQgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHJldHVybiBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAc2VlICNzZXRDb3JyZWxhdGlvblR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVsYXRpb25UeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAcGFyYW0gY29ycmVsYXRpb25UeXBlIGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEBzZWUgI2dldENvcnJlbGF0aW9uVHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29ycmVsYXRpb25UeXBlKFN0cmluZyBjb3JyZWxhdGlvblR5cGUpOwotCi0gIC8qKgotICAgKiBJcyBXU0RMIHJlZmVyZW5jZSBzZXQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBXU0RMIHJlZmVyZW5jZSBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dTRExSZWZlcmVuY2VTZXQoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAcmV0dXJuIFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgV1NETFJlZmVyZW5jZSBnZXRXU0RMUmVmZXJlbmNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHdzZGxSZWZlcmVuY2UgV1NETCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFdTRExSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExSZWZlcmVuY2UoV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBJcyBVRERJIHJlZmVyZW5jZSBzZXQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBVRERJIHJlZmVyZW5jZSBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VERElSZWZlcmVuY2VTZXQoKTsKLQotICAvKioKLSAgICogR2V0IFVEREkgcmVmZXJlbmNlLgotICAgKiBAcmV0dXJuIFVEREkgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRVRERJUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgVURESVJlZmVyZW5jZSBnZXRVRERJUmVmZXJlbmNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHVkZGlSZWZlcmVuY2UgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVERElSZWZlcmVuY2UoVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlKTsKLQotICAvKioKLSAgICogUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAcGFyYW0gdmFsaWRhdGUgZmxhZyBmb3IgY29tbWFuZCBsaW5lIHZhbGlkYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUFyZ3MoU3RyaW5nW10gYXJncywgYm9vbGVhbiB2YWxpZGF0ZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICogQHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQW5hbHl6ZXJDb25maWdSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZ1JlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM2NGZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZ1JlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIHRoZSBhbmFseXplciBjb25maWcgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQW5hbHl6ZXJDb25maWdSZWFkZXIgZXh0ZW5kcyBEb2N1bWVudFJlYWRlciB7Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnIHJlYWRlci4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgTWVzc2FnZUxpc3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCk7Ci0gIAotICAvKioKLSAgICogUmVhZCB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZ1VSSSB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIEFuYWx5emVyQ29uZmlnIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHJlYWQgdGhlIGFuYWx5emVyIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnIHJlYWRBbmFseXplckNvbmZpZyhTdHJpbmcgYW5hbHl6ZXJDb25maWdVUkkpIHRocm93cyBXU0lFeGNlcHRpb247Ci0gIAotICAvKioKLSAgICogUmVhZCB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSByZWFkZXIgYSBSZWFkZXIgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBBbmFseXplckNvbmZpZyBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBwYXJzZSB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWcgcmVhZEFuYWx5emVyQ29uZmlnKFJlYWRlciByZWFkZXIpIHRocm93cyBXU0lFeGNlcHRpb247Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMGM5ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogVGVzdCBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQXNzZXJ0aW9uUmVzdWx0VHlwZQotewotICAvKioKLSAgICogVGhpcyB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVzdWx0VHlwZSA9IF9BTEw7Ci0KLSAgLyoqCi0gICAqIFN0cmluZyB2ZXJzaW9uIG9mIHJlc3VsdCB0eXBlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfQUxMID0gImFsbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfTk9UX0lORk8gPSAibm90SW5mbyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfT05MWV9GQUlMRUQgPSAib25seUZhaWxlZCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfTk9UX1BBU1NFRCA9ICJub3RQYXNzZWQiOwotCi0gIC8qKgotICAgKiBSZXN1bHQgdHlwZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFzc2VydGlvblJlc3VsdFR5cGUgQUxMID0gbmV3IEFzc2VydGlvblJlc3VsdFR5cGUoX0FMTCk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXNzZXJ0aW9uUmVzdWx0VHlwZSBOT1RfSU5GTyA9IG5ldyBBc3NlcnRpb25SZXN1bHRUeXBlKF9OT1RfSU5GTyk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXNzZXJ0aW9uUmVzdWx0VHlwZSBPTkxZX0ZBSUxFRCA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdFR5cGUoX09OTFlfRkFJTEVEKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBc3NlcnRpb25SZXN1bHRUeXBlIE5PVF9QQVNTRUQgPQotICAgIG5ldyBBc3NlcnRpb25SZXN1bHRUeXBlKF9OT1RfUEFTU0VEKTsKLQotICAvKioKLSAgICogRG8gbm90IGFsbG93IHRoaXMgb2JqZWN0IHRvIGJlIGNyZWF0ZWQgd2l0aCBudWxsIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJpdmF0ZSBBc3NlcnRpb25SZXN1bHRUeXBlKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSByZXN1bHQgdHlwZS4KLSAgICogQHBhcmFtIHJlc3VsdFR5cGUgYSByZXN1bHQgdHlwZS4KLSAgICovCi0gIHByaXZhdGUgQXNzZXJ0aW9uUmVzdWx0VHlwZShTdHJpbmcgcmVzdWx0VHlwZSkKLSAgewotICAgIHRoaXMucmVzdWx0VHlwZSA9IHJlc3VsdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogSXMgcmVzdWx0IHR5cGUgYWxsLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIGFsbC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQWxsKCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlLmVxdWFscyhfQUxMKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyByZXN1bHQgdHlwZSBmYWlsZWQgb25seS4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSByZXN1bHQgdHlwZSBpcyBmYWlsZWQgb25seS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRmFpbGVkT25seSgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZS5lcXVhbHMoX09OTFlfRkFJTEVEKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyByZXN1bHQgdHlwZSBub3QgcGFzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIG5vdCBwYXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc05vdFBhc3NlZCgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZS5lcXVhbHMoX05PVF9QQVNTRUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHJlc3VsdCB0eXBlIG5vdCBpbmZvLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIG5vdCBpbmZvLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNOb3RJbmZvKCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlLmVxdWFscyhfTk9UX0lORk8pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCByZXN1bHQgdHlwZS4KLSAgICogQHJldHVybiByZXN1bHQgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgbmV3IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHBhcmFtIHJlc3VsdFR5cGUgYW4gYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcmV0dXJuIG5ldyBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGludmFsaWQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlIHdhcyBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEFzc2VydGlvblJlc3VsdFR5cGUgbmV3SW5zdGFuY2UoU3RyaW5nIHJlc3VsdFR5cGUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgQXNzZXJ0aW9uUmVzdWx0VHlwZSBhc3NlcnRpb25SZXN1bHRUeXBlID0gbnVsbDsKLQotICAgIGlmIChyZXN1bHRUeXBlID09IG51bGwpCi0gICAgewotICAgICAgYXNzZXJ0aW9uUmVzdWx0VHlwZSA9IE5PVF9JTkZPOwotICAgIH0KLQotICAgIGVsc2UgaWYgKHJlc3VsdFR5cGUuZXF1YWxzKF9BTEwpKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBBTEw7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0VHlwZS5lcXVhbHMoX09OTFlfRkFJTEVEKSkKLSAgICB7Ci0gICAgICBhc3NlcnRpb25SZXN1bHRUeXBlID0gT05MWV9GQUlMRUQ7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0VHlwZS5lcXVhbHMoX05PVF9QQVNTRUQpKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBOT1RfUEFTU0VEOwotICAgIH0KLSAgICBlbHNlIGlmIChyZXN1bHRUeXBlLmVxdWFscyhfTk9UX0lORk8pKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBOT1RfSU5GTzsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIkFuIGludmFsaWQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlIHdhcyBzcGVjaWZpZWQ6ICIgKyByZXN1bHRUeXBlICsgIi4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXNzZXJ0aW9uUmVzdWx0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIHJlc3VsdFR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGVkNTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgYSBkZWZpbml0aW9uIG9mIHRoZSBhc3NlcnRpb24gcmVzdWx0cyB0aGF0IAotICogc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXBvcnQuICBJdCBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uIAotICogdGhhdCBpbmRpY2F0ZXMgd2hpY2ggbWVzc2FnZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXBvcnQuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcmV0dXJuIGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdFR5cGUgZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcGFyYW0gcmVzdWx0VHlwZSBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEBzZWUgI2dldEFzc2VydGlvblJlc3VsdFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvblJlc3VsdFR5cGUoQXNzZXJ0aW9uUmVzdWx0VHlwZSByZXN1bHRUeXBlKTsKLQotICAvKioKLSAgICogR2V0IHNob3cgbWVzc2FnZSBlbnRyeSBpbmRpY2F0b3IuCi0gICAqIEByZXR1cm4gc2hvdyBtZXNzYWdlIGVudHJ5IGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd01lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd01lc3NhZ2VFbnRyeSgpOwotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBtZXNzYWdlIGVudHJ5IGluZGljdG9yLgotICAgKiBAcGFyYW0gc2hvd01lc3NhZ2VFbnRyeSBzaG93IG1lc3NhZ2UgZW50cnkgaW5kaWN0b3IuCi0gICAqIEBzZWUgI2dldFNob3dNZXNzYWdlRW50cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNob3dNZXNzYWdlRW50cnkoYm9vbGVhbiBzaG93TWVzc2FnZUVudHJ5KTsKLQotICAvKioKLSAgICogR2V0IHNob3cgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluZGljYXRvci4KLSAgICogQHJldHVybiBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY3Rvci4KLSAgICogQHBhcmFtIHNob3dBc3NlcnRpb25EZXNjcmlwdGlvbiBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY3Rvci4KLSAgICogQHNlZSAjZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24oYm9vbGVhbiBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0IHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHBhcmFtIHNob3dGYWlsdXJlTWVzc2FnZSBzaG93IGZhaWx1cmUgbWVzc2FnZSBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2dldFNob3dGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0ZhaWx1cmVNZXNzYWdlKGJvb2xlYW4gc2hvd0ZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IHNob3cgZXJyb3IgZGV0YWlsIGluZGljYXRvci4KLSAgICogQHJldHVybiBzaG93IGVycm9yIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZURldGFpbCgpOwotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBlcnJvciBkZXRhaWwgaW5kaWNhdG9yLgotICAgKiBAcGFyYW0gc2hvd2ZhaWx1cmVEZXRhaWwgc2hvdyBlcnJvciBkZXRhaWwgaW5kaWNhdG9yLgotICAgKiBAc2VlICNnZXRTaG93RmFpbHVyZURldGFpbAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0ZhaWx1cmVEZXRhaWwoYm9vbGVhbiBzaG93ZmFpbHVyZURldGFpbCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1VERElSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9VRERJUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhM2JjZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1VERElSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBhIHJlZmVyZW5jZSB0byBhIGRpc2NvdmVyeSBhcnRpZmFjdC4gIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElSZWZlcmVuY2UgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX1VERElfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIFVEREkga2V5IHR5cGU6IGJpbmRpbmdLZXkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0tFWSA9ICJiaW5kaW5nS2V5IjsKLQotICAvKioKLSAgICogVURESSBrZXkgdHlwZTogdE1vZGVsS2V5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE1PREVMX0tFWSA9ICJ0TW9kZWxLZXkiOwotCi0gIC8qKgotICAgKiBHZXQgVURESSAga2V5IHR5cGUuCi0gICAqIEByZXR1cm4gVURESSAga2V5IHR5cGUuCi0gICAqIEBzZWUgI3NldEtleVR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0S2V5VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgVURESSBrZXkgdHlwZS4KLSAgICogQHBhcmFtIGtleVR5cGUgVURESSBrZXkgdHlwZS4KLSAgICogQHNlZSAjZ2V0S2V5VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0S2V5VHlwZShTdHJpbmcga2V5VHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBVRERJIGtleS4KLSAgICogQHJldHVybiBVRERJIGtleS4KLSAgICogQHNlZSAjc2V0S2V5Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleSgpOwotCi0gIC8qKgotICAgKiBTZXQgVURESSBrZXkuCi0gICAqIEBwYXJhbSBrZXkgVURESSBrZXkuCi0gICAqIEBzZWUgI2dldEtleQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0S2V5KFN0cmluZyBrZXkpOwotCi0gIC8qKgotICAgKiBHZXQgVURESSBpbnF1aXJ5IFVSTC4KLSAgICogQHJldHVybiBVRERJIGlucXVpcnkgVVJMLgotICAgKiBAc2VlICNzZXRJbnF1aXJ5VVJMCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLQotICAvKioKLSAgICogU2V0IFVEREkgaW5xdWlyeVVSTC4KLSAgICogQHBhcmFtIGlucXVpcnlVUkwgVURESSBpbnF1aXJ5VVJMLgotICAgKiBAc2VlICNnZXRJbnF1aXJ5VVJMCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQuCi0gICAqIEBzZWUgI3NldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHdzZGxFbGVtZW50IFdTREwgZWxlbWVudC4KLSAgICogQHNlZSAjZ2V0V1NETEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExFbGVtZW50KFdTRExFbGVtZW50IHdzZGxFbGVtZW50KTsKLQotICAvKioKLSAgICogR2V0IHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VMb2NhdGlvbiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9XU0RMRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTMzZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGJhc2UgaW50ZXJmYWNlIGZvciBXU0RMIGRlZmluaXRpb25zLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMRWxlbWVudCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgV1NETCBlbGVtZW50IHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50IG5hbWVzcGFjZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlLgotICAgKiBAc2VlICNzZXROYW1lc3BhY2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFdTREwgZWxlbWVudCBuYW1lc3BhY2UuCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEByZXR1cm4gV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldE5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEBwYXJhbSBuYW1lIFdTREwgZWxlbWVudCBuYW1lLgotICAgKiBAc2VlICNnZXROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudCBxdWFsaWZpZWQgbmFtZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgcXVhbGlmaWVkIG5hbWUuCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHJldHVybiBXU0RMIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldFBhcmVudEVsZW1lbnROYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRFbGVtZW50TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgV1NETCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50RWxlbWVudE5hbWUgV1NETCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAc2VlICNnZXRQYXJlbnRFbGVtZW50TmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFyZW50RWxlbWVudE5hbWUoU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgUU5hbWUuCi0gICAqIEByZXR1cm4gV1NETCBwYXJlbnQgZWxlbWVudCBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRQYXJlbnRFbGVtZW50UU5hbWUoKTsKLQotICAvKioKLSAgICogSXMgcG9ydCBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYSBwb3J0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQb3J0KCk7Ci0KLSAgLyoqCi0gICAqIElzIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBsZW1lbnQgaXMgYSBiaW5kaW5nLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIElzIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbGVtZW50IGlzIGEgcG9ydCB0eXBlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQb3J0VHlwZSgpOwotCi0gIC8qKgotICAgKiBJcyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIGFuIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIElzIG1lc3NhZ2UgZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIGVsZW1lbnQgaXMgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETFJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM1NTBjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETFJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgYSByZWZlcmVuY2UgdG8gYSBkZXNjcmlwdGlvbiBhcnRpZmFjdC4gIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExSZWZlcmVuY2UgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX1dTRExfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gV1NETCBlbGVtZW50LgotICAgKiBAc2VlICNzZXRXU0RMRWxlbWVudAotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBzZWUgI2dldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdTREwgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFdTRExMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTG9jYXRpb24gV1NETCBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0V1NETExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMTG9jYXRpb24oU3RyaW5nIHdzZGxMb2NhdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFNlcnZpY2VMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBzZXJ2aWNlTG9jYXRpb24gc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWVlNzRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGwuQWRkU3R5bGVTaGVldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBmaWxlIGludGVyZmFjZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQW5hbHl6ZXJDb25maWdJbXBsIGltcGxlbWVudHMgQW5hbHl6ZXJDb25maWcKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdCByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBBbmFseXplciBjb25maWd1cmF0aW9uIGZpbGUgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjb25maWdVUkkgPSBudWxsOwotCi0gIC8qKgotICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBWZXJib3NlIG9wdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVwb3J0VVJJID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1VSSTsKLQotICAvKioKLSAgICogUmVwbGFjZSByZXBvcnQgaW5kaWNhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcmVwbGFjZVJlcG9ydCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBBZGQgc3R5bGUgc2hlZXQuCi0gICAqLwotICBwcm90ZWN0ZWQgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0OwotCi0gIC8qKgotICAgKiBQcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSA9Ci0gICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfVEVTVF9BU1NFUlRJT05TX0RPQ1VNRU5UX1VSSTsKLQotICAvKioKLSAgICogTWVzc2FnZSBsb2cgbG9jYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvZ1VSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgY29ycmVsYXRpb24gdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY29ycmVsYXRpb25UeXBlID0KLSAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX09QRVJBVElPTjsKLQotICAvKioKLSAgICogV1NETCByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogVURESSByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZ0ltcGwoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3Igd2l0aCBhbGwgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIHZlcmJvc2UgICAgICAgICAgICAgICAgICAgIHRoZSB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gICAgIGFuIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIHJlcG9ydFVSSSAgICAgICAgICAgICAgICAgIHJlcG9ydCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHJlcGxhY2VSZXBvcnQgICAgICAgICAgICAgIGEgcmVwbGFjZSByZXBvcnQgaW5kaWNhdG9yLgotICAgKiBAcGFyYW0gYWRkU3R5bGVTaGVldCAgICAgICAgICAgICAgYWRkIHN0eWxlIHNoZWV0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSAgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBsb2dVUkkgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGNvcnJlbGF0aW9uVHlwZSAgICAgICAgICAgIG1lc3NhZ2UgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHBhcmFtIHdzZGxSZWZlcmVuY2UgICAgICAgICAgICAgIGEgV1NETCByZWZlcmVuY2UuLgotICAgKiBAcGFyYW0gdWRkaVJlZmVyZW5jZSAgICAgICAgICAgICAgYSBVVURESSByZWZlcmVuY2UuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWdJbXBsKAotICAgIFN0cmluZyBkZXNjcmlwdGlvbiwKLSAgICBib29sZWFuIHZlcmJvc2UsCi0gICAgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLAotICAgIFN0cmluZyByZXBvcnRVUkksCi0gICAgYm9vbGVhbiByZXBsYWNlUmVwb3J0LAotICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCwKLSAgICBTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSwKLSAgICBTdHJpbmcgbG9nVVJJLAotICAgIFN0cmluZyBjb3JyZWxhdGlvblR5cGUsCi0gICAgV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlLAotICAgIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZSkKLSAgewotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlOwotICAgIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IGFzc2VydGlvblJlc3VsdHNPcHRpb247Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSByZXBvcnRVUkk7Ci0gICAgdGhpcy5yZXBsYWNlUmVwb3J0ID0gcmVwbGFjZVJlcG9ydDsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBhZGRTdHlsZVNoZWV0OwotICAgIHRoaXMudGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSA9IHRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkk7Ci0gICAgdGhpcy5sb2dVUkkgPSBsb2dVUkk7Ci0gICAgdGhpcy5jb3JyZWxhdGlvblR5cGUgPSBjb3JyZWxhdGlvblR5cGU7Ci0gICAgdGhpcy53c2RsUmVmZXJlbmNlID0gd3NkbFJlZmVyZW5jZTsKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSB1ZGRpUmVmZXJlbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCkKLSAgewotICAgIHRoaXMubWVzc2FnZUxpc3QgPSBtZXNzYWdlTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBzZWUgI3NldERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0RGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikKLSAgewotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNzZXRWZXJib3NlT3B0aW9uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRWZXJib3NlT3B0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnZlcmJvc2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0VmVyYm9zZU9wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYm9zZU9wdGlvbihib29sZWFuIHZlcmJvc2UpCi0gIHsKLSAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbikKLSAgewotICAgIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IGFzc2VydGlvblJlc3VsdHNPcHRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0UmVwb3J0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVwb3J0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwb3J0VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKQotICB7Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSByZXBvcnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAc2VlICNzZXRSZXBsYWNlUmVwb3J0Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRSZXBsYWNlUmVwb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlcGxhY2VSZXBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHJlcG9ydCBmaWxlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRSZXBsYWNlUmVwb3J0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlUmVwb3J0KGJvb2xlYW4gcmVwbGFjZVJlcG9ydCkKLSAgewotICAgIHRoaXMucmVwbGFjZVJlcG9ydCA9IHJlcGxhY2VSZXBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHNlZSAjc2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIEFkZFN0eWxlU2hlZXQgZ2V0QWRkU3R5bGVTaGVldCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hZGRTdHlsZVNoZWV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCByZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWRkU3R5bGVTaGVldChBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQpCi0gIHsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBhZGRTdHlsZVNoZWV0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldFRlc3RBc3NlcnRpb25Eb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldFRlc3RBc3NlcnRpb25Eb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oU3RyaW5nIHRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkpCi0gIHsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkgPSB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldExvZ0xvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0xvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBsb2dVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpCi0gIHsKLSAgICB0aGlzLmxvZ1VSSSA9IGxvZ1VSSTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzTG9nU2V0KCkKLSAgewotICAgIHJldHVybiAobG9nVVJJICE9IG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAc2VlICNzZXRDb3JyZWxhdGlvblR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVsYXRpb25UeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvcnJlbGF0aW9uVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHNlZSAjZ2V0Q29ycmVsYXRpb25UeXBlCi0gICAqIAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29ycmVsYXRpb25UeXBlKFN0cmluZyBjb3JyZWxhdGlvblR5cGUpCi0gIHsKLSAgICB0aGlzLmNvcnJlbGF0aW9uVHlwZSA9IGNvcnJlbGF0aW9uVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBXU0RMIHJlZmVyZW5jZSBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dTRExSZWZlcmVuY2VTZXQoKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCA/IGZhbHNlIDogdHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgV1NETFJlZmVyZW5jZSBnZXRXU0RMUmVmZXJlbmNlKCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxSZWZlcmVuY2U7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMUmVmZXJlbmNlKFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSkKLSAgewotICAgIHRoaXMud3NkbFJlZmVyZW5jZSA9IHdzZGxSZWZlcmVuY2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgID8gbnVsbAotICAgICAgOiB0aGlzLndzZGxSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiAodGhpcy53c2RsUmVmZXJlbmNlID09IG51bGwpCi0gICAgICA/IG51bGwKLSAgICAgIDogdGhpcy53c2RsUmVmZXJlbmNlLmdldFNlcnZpY2VMb2NhdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZyNnZXRXU0RMTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgID8gbnVsbAotICAgICAgOiB0aGlzLndzZGxSZWZlcmVuY2UuZ2V0V1NETExvY2F0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnI2lzVWRkaVJlZmVyZW5jZVNldCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVURESVJlZmVyZW5jZVNldCgpCi0gIHsKLSAgICByZXR1cm4gKHRoaXMudWRkaVJlZmVyZW5jZSA9PSBudWxsID8gZmFsc2UgOiB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBVRERJUmVmZXJlbmNlIGdldFVERElSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudWRkaVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVERElSZWZlcmVuY2UoVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy51ZGRpUmVmZXJlbmNlID0gdWRkaVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNzZXRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgZ2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBjb25maWdVUkkpCi0gIHsKLSAgICB0aGlzLmNvbmZpZ1VSSSA9IGNvbmZpZ1VSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudCN0b1hNTFN0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBTdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFZlcmJvc2Ugb3B0aW9uCi0gICAgcHcucHJpbnQoIiAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVkVSQk9TRSArICI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0VmVyYm9zZU9wdGlvbigpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9WRVJCT1NFICsgIj4iKTsKLQotICAgIC8vIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24KLSAgICBwdy5wcmludChhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotCi0gICAgLy8gcmVwb3J0IGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1JFUE9SVF9GSUxFICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9SRVBMQUNFICsgIj1cIiIgKyBnZXRSZXBsYWNlUmVwb3J0KCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OICsgIj1cIiIgKyBnZXRSZXBvcnRMb2NhdGlvbigpICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldEFkZFN0eWxlU2hlZXQoKS50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgICA8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRVBPUlRfRklMRSArICI+Iik7Ci0KLSAgICAvLyB0ZXN0IGFzc2VydGlvbiBmaWxlCi0gICAgcHcucHJpbnQoCi0gICAgICAiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OU19GSUxFICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05TX0ZJTEUgKyAiPiIpOwotCi0gICAgLy8gbG9nIGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFKTsKLSAgICBwdy5wcmludCgKLSAgICAgICIgIgotICAgICAgICArIFdTSUNvbnN0YW50cy5BVFRSX0NPUlJFTEFUSU9OX1RZUEUKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIHRoaXMuY29ycmVsYXRpb25UeXBlCi0gICAgICAgICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldExvZ0xvY2F0aW9uKCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFICsgIj4iKTsKLQotICAgIC8vIFdTREwgcmVmZXJlbmNlIAotICAgIGlmICh0aGlzLndzZGxSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChnZXRXU0RMUmVmZXJlbmNlKCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gVURESSBSZWZlcmVuY2UKLSAgICBpZiAodGhpcy51ZGRpUmVmZXJlbmNlICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnQoZ2V0VURESVJlZmVyZW5jZSgpLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgLy8gdmVyYm9zZSBvcHRpb24KLSAgICBwdy5wcmludGxuKCIgIHZlcmJvc2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMudmVyYm9zZSk7Ci0KLSAgICAvLyBhc3NlcnRpb25SZXN1bHRzIG9wdGlvbnMKLSAgICBwdy5wcmludCh0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24udG9TdHJpbmcoKSk7Ci0KLSAgICAvLyByZXBvcnRGaWxlIG9wdGlvbnMKLSAgICBwdy5wcmludGxuKCIgIFJlcG9ydCBGaWxlOiIpOwotICAgIHB3LnByaW50bG4oIiAgICByZXBsYWNlIC4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5yZXBsYWNlUmVwb3J0KTsKLSAgICBwdy5wcmludGxuKCIgICAgbG9jYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMucmVwb3J0VVJJKTsKLSAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0ICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnRsbigiICAgIFN0eWxlIFNoZWV0OiIpOwotICAgICAgaWYgKHRoaXMuYWRkU3R5bGVTaGVldC5nZXRIcmVmKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgaHJlZiAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0SHJlZigpKTsKLSAgICAgIGlmICh0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0VHlwZSgpICE9IG51bGwpCi0gICAgICAgIHB3LnByaW50bG4oCi0gICAgICAgICAgIiAgICAgIHR5cGUgLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5hZGRTdHlsZVNoZWV0LmdldFR5cGUoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldFRpdGxlKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgdGl0bGUgLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0VGl0bGUoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldE1lZGlhKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgbWVkaWEgLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0TWVkaWEoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldENoYXJzZXQoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICBjaGFyc2V0IC4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuYWRkU3R5bGVTaGVldC5nZXRDaGFyc2V0KCkpOwotICAgICAgaWYgKHRoaXMuYWRkU3R5bGVTaGVldC5nZXRBbHRlcm5hdGUoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICBhbHRlcm5hdGUgLi4uLi4uLi4uLi4uLi4gIgotICAgICAgICAgICAgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0QWx0ZXJuYXRlKCkpOwotICAgIH0KLQotICAgIC8vIHRlc3RBc3NlcnRpb25zRmlsZSBwYXJhbWV0ZXIKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgdGVzdEFzc2VydGlvbnNGaWxlIC4uLi4uLi4uLiAiICsgdGhpcy50ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJKTsKLQotICAgIC8vIGxvZ0ZpbGUgb3B0aW9ucwotICAgIGlmICh0aGlzLmxvZ1VSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAgTWVzc2FnZSBMb2cgRmlsZToiKTsKLSAgICAgIHB3LnByaW50bG4oIiAgICBsb2NhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dVUkkpOwotICAgICAgcHcucHJpbnRsbigiICAgIGNvcnJlbGF0aW9uVHlwZSAuLi4uLi4uLi4uICIgKyB0aGlzLmNvcnJlbGF0aW9uVHlwZSk7Ci0gICAgfQotCi0gICAgLy8gd3NkbFJlZmVyZW5jZSBvcHRpb25zICAgCi0gICAgaWYgKHRoaXMuaXNXU0RMUmVmZXJlbmNlU2V0KCkpCi0gICAgewotICAgICAgcHcucHJpbnQodGhpcy53c2RsUmVmZXJlbmNlLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIHVkZGlSZWZlcmVuY2Ugb3B0aW9ucwotICAgIGlmICh0aGlzLmlzVURESVJlZmVyZW5jZVNldCgpKQotICAgIHsKLSAgICAgIHB3LnByaW50KHRoaXMudWRkaVJlZmVyZW5jZS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBkZXNjcmlwdGlvbiBwYXJhbWV0ZXIKLSAgICBpZiAodGhpcy5kZXNjcmlwdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAgZGVzY3JpcHRpb24gLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5kZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGNvbmZpZyB2YWx1ZXMgZnJvbSBhbm90aGVyIGFuYWx5emVyIGNvbmZpZyBvYmplY3QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2V0Q29uZmlnKEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnKQotICB7Ci0gICAgdGhpcy5jb25maWdVUkkgPSBhbmFseXplckNvbmZpZy5nZXRMb2NhdGlvbigpOwotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBhbmFseXplckNvbmZpZy5nZXREZXNjcmlwdGlvbigpOwotICAgIHRoaXMudmVyYm9zZSA9IGFuYWx5emVyQ29uZmlnLmdldFZlcmJvc2VPcHRpb24oKTsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24gPSBhbmFseXplckNvbmZpZy5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCk7Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSBhbmFseXplckNvbmZpZy5nZXRSZXBvcnRMb2NhdGlvbigpOwotICAgIHRoaXMucmVwbGFjZVJlcG9ydCA9IGFuYWx5emVyQ29uZmlnLmdldFJlcGxhY2VSZXBvcnQoKTsKLSAgICB0aGlzLmxvZ1VSSSA9IGFuYWx5emVyQ29uZmlnLmdldExvZ0xvY2F0aW9uKCk7Ci0gICAgdGhpcy5jb3JyZWxhdGlvblR5cGUgPSBhbmFseXplckNvbmZpZy5nZXRDb3JyZWxhdGlvblR5cGUoKTsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkgPQotICAgICAgYW5hbHl6ZXJDb25maWcuZ2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKCk7Ci0gICAgdGhpcy5hZGRTdHlsZVNoZWV0ID0gYW5hbHl6ZXJDb25maWcuZ2V0QWRkU3R5bGVTaGVldCgpOwotICAgIHRoaXMud3NkbFJlZmVyZW5jZSA9IGFuYWx5emVyQ29uZmlnLmdldFdTRExSZWZlcmVuY2UoKTsKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSBhbmFseXplckNvbmZpZy5nZXRVRERJUmVmZXJlbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlQXJncyhTdHJpbmdbXSBhcmdzLCBib29sZWFuIHZhbGlkYXRlKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMUmVmZXJlbmNlIHdzZGxSZWZlcmVuY2UgPSBudWxsOwotICAgIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZSA9IG51bGw7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyByZWFkZXIKLSAgICBBbmFseXplckNvbmZpZ1JlYWRlciBhbmFseXplckNvbmZpZ1JlYWRlciA9IG5ldyBBbmFseXplckNvbmZpZ1JlYWRlckltcGwoKTsKLSAgICBhbmFseXplckNvbmZpZ1JlYWRlci5pbml0KHRoaXMubWVzc2FnZUxpc3QpOwotCi0gICAgLy8gQW5hbHl6ZXIgY29uZmlnIG9iamVjdCB3aGljaCB3aWxsIGJlIG1lcmdlZCBhZnRlciBhbGwgb2YgdGhlIGlucHV0IHBhcm1zIGFyZSBwcm9jZXNzZWQKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZ0Zyb21BcmdzID0gbnVsbDsKLQotICAgIC8vIEFzc2VydGlvbiByZXN1bHRzIG9wdGlvbgotICAgIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBJZiBubyBpbnB1dCBhcmd1bWVudHMsIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKGFyZ3MubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gQUREOiAKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoInVzYWdlMDEiLCBBbmFseXplci5VU0FHRV9NRVNTQUdFKSk7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gbG9jYXRlIHRoZSBjb25maWcgZmlsZSBvcHRpb24gKGlmIGl0IHdhcyBzcGVjaWZpZWQpCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWcKLSAgICAgIGlmICgoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvbmZpZyIpKQotICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYyIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncyA9Ci0gICAgICAgICAgYW5hbHl6ZXJDb25maWdSZWFkZXIucmVhZEFuYWx5emVyQ29uZmlnKAotICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBjb25maWcgZmlsZSB3YXMgbm90IHNwZWNpZmllZCwgdGhlbiBjcmVhdGUgYW5hbHl6ZXIgY29uZmlnIG9iamVjdAotICAgIGlmIChhbmFseXplckNvbmZpZ0Zyb21BcmdzID09IG51bGwpCi0gICAgewotICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncyA9IG5ldyBBbmFseXplckNvbmZpZ0ltcGwoKTsKLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MuaW5pdCh0aGlzLm1lc3NhZ2VMaXN0KTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uCi0gICAgaWYgKChhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0KLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MuZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpKQotICAgICAgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0gbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0gICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oYXNzZXJ0aW9uUmVzdWx0c09wdGlvbik7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgYWxsIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWcKLSAgICAgIGlmICgoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvbmZpZyIpKQotICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYyIpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2tpcCB0aGlzIG9wdGlvbiBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwcm9jZXNzZWQKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgIH0KLQotICAgICAgLy8gLXZlcmJvc2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXZlcmJvc2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItdiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRWZXJib3NlT3B0aW9uKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWFzc2VydGlvblJlc3VsdHMKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWFzc2VydGlvblJlc3VsdHMiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYSIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRBc3NlcnRpb25SZXN1bHRUeXBlKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdFR5cGUubmV3SW5zdGFuY2UoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1tZXNzYWdlRW50cnkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLW1lc3NhZ2VFbnRyeSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1NIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dNZXNzYWdlRW50cnkoCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgfQotCi0gICAgICAvLyAtYXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWFzc2VydGlvbkRlc2NyaXB0aW9uIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUEiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgfQotCi0gICAgICAvLyAtZmFpbHVyZU1lc3NhZ2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhaWx1cmVNZXNzYWdlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUYiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd0ZhaWx1cmVNZXNzYWdlKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWZhaWx1cmVEZXRhaWwKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhaWx1cmVEZXRhaWwiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItRCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZURldGFpbCgKLSAgICAgICAgICBCb29sZWFuLnZhbHVlT2YoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1sb2dGaWxlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1sb2dGaWxlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLWwiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0TG9nTG9jYXRpb24oZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXRlc3RBc3NlcnRpb25GaWxlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi10ZXN0QXNzZXJ0aW9uRmlsZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi10IikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigKLSAgICAgICAgICBnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgfQotCi0gICAgICAvLyAtcmVwb3J0RmlsZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItcmVwb3J0RmlsZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1yIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFJlcG9ydExvY2F0aW9uKAotICAgICAgICAgIGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1yZXBsYWNlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1yZXBsYWNlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVIiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0UmVwbGFjZVJlcG9ydCgKLSAgICAgICAgICBCb29sZWFuLnZhbHVlT2YoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1jb3JyZWxhdGlvblR5cGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvcnJlbGF0aW9uVHlwZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1DIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldENvcnJlbGF0aW9uVHlwZSgKLSAgICAgICAgICBnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgfQotCi0gICAgICAvLyAtd3NkbEVsZW1lbnQKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXdzZGxFbGVtZW50IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVciKSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBvcHRpb25OYW1lID0gYXJnc1thcmdDb3VudF07Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0KLSAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0gICAgICAgIHdzZGxFbGVtZW50LnNldE5hbWUoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgd3NkbEVsZW1lbnQuc2V0VHlwZShnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCwgb3B0aW9uTmFtZSkpOwotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgaWYgKCFhcmdzW2FyZ0NvdW50XS5zdGFydHNXaXRoKCItIikpCi0gICAgICAgIHsKLSAgICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICAgIHdzZGxFbGVtZW50LnNldFBhcmVudEVsZW1lbnROYW1lKAotICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3c2RsUmVmZXJlbmNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh1ZGRpUmVmZXJlbmNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzEwIiwKLSAgICAgICAgICAgICAgIlRoZSAtd3NkbEVsZW1lbnQgb3B0aW9uIG11c3QgYXBwZWFyIGFmdGVyIHRoZSAtd3NkbFVSSSBvciAtdWRkaUtleSBvcHRpb25zLiIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXNlcnZpY2VMb2NhdGlvbgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItc2VydmljZUxvY2F0aW9uIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVMiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0KLSAgICAgICAgaWYgKHdzZGxSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0U2VydmljZUxvY2F0aW9uKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodWRkaVJlZmVyZW5jZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRTZXJ2aWNlTG9jYXRpb24oZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzExIiwKLSAgICAgICAgICAgICAgIlRoZSAtc2VydmljZUxvY2F0aW9uIG9wdGlvbiBtdXN0IGFwcGVhciBhZnRlciB0aGUgLXdzZGxVUkkgb3IgLXVkZGlLZXkgb3B0aW9ucy4iKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gLXdzZGxVUkkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXdzZGxVUkkiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItVyIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHdzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB3c2RsUmVmZXJlbmNlID0gbmV3IFdTRExSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0V1NETExvY2F0aW9uKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXVkZGlLZXlUeXBlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi11ZGRpS2V5VHlwZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1LIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBpZiAodWRkaVJlZmVyZW5jZSA9PSBudWxsKQotICAgICAgICAgIHVkZGlSZWZlcmVuY2UgPSBuZXcgVURESVJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRLZXlUeXBlKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0VURESVJlZmVyZW5jZSh1ZGRpUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXVkZGlLZXkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXVkZGlLZXkiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItayIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHVkZGlSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0S2V5KGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0VURESVJlZmVyZW5jZSh1ZGRpUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWlucXVpcnlVUkwKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWlucXVpcnlVUkwiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItaSIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHVkZGlSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0SW5xdWlyeVVSTChnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFVERElSZWZlcmVuY2UodWRkaVJlZmVyZW5jZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFERDogTmVlZCB0byBhZGQgc3VwcG9ydCBmb3Igb3RoZXIgb3B0aW9ucyAoLWNvbmZpZywgLWJpbmRpbmcsIGV0Yy4pCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICJjb25maWcxMiIsCi0gICAgICAgICAgICBhcmdzW2FyZ0NvdW50XSwKLSAgICAgICAgICAgICJUaGUgc3BlY2lmaWVkIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkOiIpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBhZGRTdHlsZVNoZWV0IHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNyZWF0ZSBhIGNvbW1lbnQgdmVyc2lvbiBvZiBpdAotICAgIGlmIChhbmFseXplckNvbmZpZ0Zyb21BcmdzLmdldEFkZFN0eWxlU2hlZXQoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotICAgICAgYWRkU3R5bGVTaGVldC5zZXRIcmVmKFdTSUNvbnN0YW50cy5ERUZBVUxUX1JFUE9SVF9YU0wpOwotICAgICAgYWRkU3R5bGVTaGVldC5zZXRUeXBlKFdTSUNvbnN0YW50cy5ERUZBVUxUX1hTTF9UWVBFKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0Q29tbWVudCh0cnVlKTsKLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICB9Ci0KLSAgICAvLyBNZXJnZSBjb25maWcgaW5mbyBpbnRvIHRoaXMgb2JqZWN0Ci0gICAgc2V0Q29uZmlnKGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MpOwotCi0gICAgaWYgKHZhbGlkYXRlKQotICAgIHsgIAotICAgICAgLy8gVmVyaWZ5IHRoYXQgYWxsIHJlcXVpcmVkIG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgYW5kIAotICAgICAgLy8gdGhhdCB0aGUgc3BlY2lmaWVkIG9uZXMgd2VyZSBjb3JyZWN0Ci0gICAgICBjaGVja0NvbmZpZ09wdGlvbnMoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVmVyaWZ5IGNvbmZpZyBvcHRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrQ29uZmlnT3B0aW9ucygpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBmaWxlTG9jYXRpb247Ci0KLSAgICAvLyBJZiB3c2RsUmVmZXJlbmNlIGFuZCB1ZGRpUmVmZXJlbmNlIHNwZWNpZmllZCwgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoKHRoaXMuaXNXU0RMUmVmZXJlbmNlU2V0KCkpICYmICh0aGlzLmlzVURESVJlZmVyZW5jZVNldCgpKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwNCIsCi0gICAgICAgICAgIkNhbiBub3Qgc3BlY2lmeSBib3RoIHRoZSBXU0RMIHJlZmVyZW5jZSBhbmQgVURESSByZWZlcmVuY2Ugb3B0aW9ucyIpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0ZXN0IGFzc2VydGlvbiBmaWxlIGV4aXN0cwotICAgIGlmICgoZmlsZUxvY2F0aW9uID0gdGhpcy5nZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxNiIsCi0gICAgICAgICAgIlRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50IGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkLiIpKTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzE0IiwKLSAgICAgICAgICBmaWxlTG9jYXRpb24sCi0gICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246IikpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGxvZyBmaWxlIGV4aXN0cwotICAgIGlmICgoZmlsZUxvY2F0aW9uID0gdGhpcy5nZXRMb2dMb2NhdGlvbigpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDIiLAotICAgICAgICAgICAgZmlsZUxvY2F0aW9uLAotICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIGxvZyBmaWxlOiIpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBXU0RMIGZpbGUgZXhpc3RzCi0gICAgaWYgKCh0aGlzLmdldFdTRExSZWZlcmVuY2UoKSAhPSBudWxsKQotICAgICAgJiYgKGZpbGVMb2NhdGlvbiA9IHRoaXMuZ2V0V1NETFJlZmVyZW5jZSgpLmdldFdTRExMb2NhdGlvbigpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDMiLAotICAgICAgICAgICAgZmlsZUxvY2F0aW9uLAotICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIFdTREwgZmlsZToiKSk7Ci0gICAgfQotCi0gICAgRmlsZSBmaWxlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgZmlsZSBvYmplY3QgZm9yIHJlcG9ydCBmaWxlCi0gICAgICBmaWxlID0gbmV3IEZpbGUodGhpcy5nZXRSZXBvcnRMb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTciLAotICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHJlcG9ydCBmaWxlIGxvY2F0aW9uLiIpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByZXBsYWNlIGZsYWcgaXMgZmFsc2UgYW5kIGZpbGUgZXhpc3RzLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmIChmaWxlLmV4aXN0cygpICYmICF0aGlzLmdldFJlcGxhY2VSZXBvcnQoKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxNSIsCi0gICAgICAgICAgIlJlcG9ydCBmaWxlIGFscmVhZHkgZXhpc3RzIGFuZCByZXBsYWNlIG9wdGlvbiB3YXMgbm90IHNwZWNpZmllZC4iKSk7Ci0gICAgfQotCi0gICAgaWYgKGNvcnJlbGF0aW9uVHlwZSAhPSBudWxsCi0gICAgICAmJiAhdGhpcy5jb3JyZWxhdGlvblR5cGUuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX0VORFBPSU5UKQotICAgICAgJiYgIXRoaXMuY29ycmVsYXRpb25UeXBlLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfQ09SUkVMQVRJT05fVFlQRV9OQU1FU1BBQ0UpCi0gICAgICAmJiAhdGhpcy5jb3JyZWxhdGlvblR5cGUuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX09QRVJBVElPTikpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTgiLAotICAgICAgICAgICJJbnZhbGlkIGNvcnJlbGF0aW9uIHR5cGUgc3BlY2lmaWVkLiIpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG9wdGlvbiB2YWx1ZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE9wdGlvblZhbHVlKFN0cmluZ1tdIGFyZ3MsIGludCBpbmRleCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGdldE9wdGlvblZhbHVlKGFyZ3MsIGluZGV4LCBhcmdzW2luZGV4IC0gMV0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBvcHRpb24gdmFsdWUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRPcHRpb25WYWx1ZShTdHJpbmdbXSBhcmdzLCBpbnQgaW5kZXgsIFN0cmluZyBvcHRpb25OYW1lKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIElmIGluZGV4IGdyZWF0ZXIgdGhhbiBhcnJheSBsZW5ndGgsIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKGluZGV4ID49IGFyZ3MubGVuZ3RoKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEzIiwKLSAgICAgICAgICBvcHRpb25OYW1lLAotICAgICAgICAgICJPcHRpb24gZGlkIG5vdCBjb250YWluIGEgdmFsdWUuICBTcGVjaWZpZWQgb3B0aW9uOiIpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gb3B0aW9uIChpLmUuIHN0YXJ0cyB3aXRoIGEgIi0iKSwgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoYXJnc1tpbmRleF0uc3RhcnRzV2l0aCgiLSIpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEzIiwKLSAgICAgICAgICBvcHRpb25OYW1lLAotICAgICAgICAgICJPcHRpb24gZGlkIG5vdCBjb250YWluIGEgdmFsdWUuICBTcGVjaWZpZWQgb3B0aW9uOiIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKGFyZ3NbaW5kZXhdKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJRCwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlELCBudWxsLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKAotICAgIFN0cmluZyBtZXNzYWdlSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgZWxzZSBpZiAobWVzc2FnZURhdGEgIT0gbnVsbCkKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQW5hbHl6ZXJDb25maWdSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ1JlYWRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5OTFjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ1JlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsLkFkZFN0eWxlU2hlZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHJlYWQgdGhlIGFuYWx5emVyIGNvbmZpZyBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEFuYWx5emVyQ29uZmlnUmVhZGVySW1wbCBpbXBsZW1lbnRzIEFuYWx5emVyQ29uZmlnUmVhZGVyCi17Ci0gIC8qKgotICAgKiBNZXNzYWdlIGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3Q7Ci0KLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBhbmFseXplciBjb25maWcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCkKLSAgewotICAgIHRoaXMubWVzc2FnZUxpc3QgPSBtZXNzYWdlTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWdSZWFkZXIjcmVhZEFuYWx5emVyQ29uZmlnKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZyByZWFkQW5hbHl6ZXJDb25maWcoU3RyaW5nIGFuYWx5emVyQ29uZmlnVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIEZpbGVSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKGFuYWx5emVyQ29uZmlnVVJJKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMDEiLAotICAgICAgICAgIGFuYWx5emVyQ29uZmlnVVJJLAotICAgICAgICAgICJDb3VsZCBub3QgZmluZCBhbmFseXplciBjb25maWcgZmlsZTogIiksCi0gICAgICAgIGZuZmUpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwOCIsCi0gICAgICAgICAgYW5hbHl6ZXJDb25maWdVUkksCi0gICAgICAgICAgIkNvdWxkIG5vdCByZWFkIGFuYWx5emVyIGNvbmZpZyBmaWxlOiAiKSwKLSAgICAgICAgZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlYWRBbmFseXplckNvbmZpZyhmaWxlUmVhZGVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWdSZWFkZXIjcmVhZEFuYWx5emVyQ29uZmlnKFJlYWRlcikKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZyByZWFkQW5hbHl6ZXJDb25maWcoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcgPSBuZXcgQW5hbHl6ZXJDb25maWdJbXBsKCk7Ci0KLSAgICAvLyBQYXJzZSBYTUwKLSAgICBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChyZWFkZXIpOwotCi0gICAgLy8gUGFyc2UgZWxlbWVudHMgaW4gdGhlIGNvbmZpZyBkb2N1bWVudAotICAgIHBhcnNlQ29uZmlnRWxlbWVudChhbmFseXplckNvbmZpZywgZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQotICAgIHJldHVybiBhbmFseXplckNvbmZpZzsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNnZXRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBjb25maWcgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZUNvbmZpZ0VsZW1lbnQoCi0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEFERDogR2V0IG5hbWUgYW5kIHZlcnNpb24KLQotICAgIC8vIEFERDogVmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgY29uZmlnIGVsZW1lbnQKLQotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRWxlbWVudCBuYW1lOiAiICsgbmV4dEVsZW1lbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8ZGVzY3JpcHRpb24+Ci0gICAgICBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9ERVNDUklQVElPTikpCi0gICAgICB7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnLnNldERlc2NyaXB0aW9uKFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHZlcmJvc2U+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1ZFUkJPU0UpKQotICAgICAgewotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKAotICAgICAgICAgIFhNTFV0aWxzLmdldEJvb2xlYW5WYWx1ZShuZXh0RWxlbWVudCwgZmFsc2UpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGFzc2VydGlvblJlc3VsdHM+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FTU0VSVElPTl9SRVNVTFRTKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbiBvYmplY3QKLSAgICAgICAgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0KLSAgICAgICAgICBuZXcgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwoKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihhc3NlcnRpb25SZXN1bHRzT3B0aW9uKTsKLQotICAgICAgICAvLyBTZXQgcmVzdWx0IHR5cGUKLSAgICAgICAgU3RyaW5nIHJlc3VsdFR5cGUgPQotICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9UWVBFKTsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRBc3NlcnRpb25SZXN1bHRUeXBlKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdFR5cGUubmV3SW5zdGFuY2UocmVzdWx0VHlwZSkpOwotCi0gICAgICAgIC8vIFNldCBzaG93IGxvZyBlbnRyeQotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dNZXNzYWdlRW50cnkoCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKAotICAgICAgICAgICAgbmV4dEVsZW1lbnQsCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9NRVNTQUdFX0VOVFJZLAotICAgICAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93TWVzc2FnZUVudHJ5KCkpKTsKLQotICAgICAgICAvLyBTZXQgc2hvdyBmYWlsdXJlIG1lc3NhZ2UKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZU1lc3NhZ2UoCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKAotICAgICAgICAgICAgbmV4dEVsZW1lbnQsCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9GQUlMVVJFX01FU1NBR0UsCi0gICAgICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLmdldFNob3dGYWlsdXJlTWVzc2FnZSgpKSk7Ci0KLSAgICAgICAgLy8gU2V0IHNob3cgZmFpbHVyZSBkZXRhaWwKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZURldGFpbCgKLSAgICAgICAgICBYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUoCi0gICAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0ZBSUxVUkVfREVUQUlMLAotICAgICAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93RmFpbHVyZURldGFpbCgpKSk7Ci0KLSAgICAgICAgLy8gUkVNT1ZFOiBTZXQgc2hvdyB3YXJuaW5nIG1lc3NhZ2UKLSAgICAgICAgLy9hc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dXYXJuaW5nTWVzc2FnZShYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUobmV4dEVsZW1lbnQsIAotICAgICAgICAvLyAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1dBUk5JTkdfTUVTU0FHRSwgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93V2FybmluZ01lc3NhZ2UoKSkpOwotICAgICAgfQotCi0gICAgICAvLyA8cmVwb3J0RmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fUkVQT1JUX0ZJTEUpKQotICAgICAgewotICAgICAgICBwYXJzZVJlcG9ydEZpbGVFbGVtZW50KGFuYWx5emVyQ29uZmlnLCBuZXh0RWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uRmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05TX0ZJTEUpKQotICAgICAgewotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8bG9nRmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0ZJTEUpKQotICAgICAgewotICAgICAgICBTdHJpbmcgY29ycmVsYXRpb25UeXBlID0KLSAgICAgICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZSgKLSAgICAgICAgICAgIG5leHRFbGVtZW50LAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfQ09SUkVMQVRJT05fVFlQRSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnLnNldENvcnJlbGF0aW9uVHlwZSgKLSAgICAgICAgICBjb3JyZWxhdGlvblR5cGUgPT0gbnVsbCA/ICJvcGVyYXRpb24iIDogY29ycmVsYXRpb25UeXBlKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0TG9nTG9jYXRpb24oWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8d3NkbFJlZmVyZW5jZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9SRUZFUkVOQ0UpKQotICAgICAgewotICAgICAgICBwYXJzZVdzZGxSZWZlcmVuY2UoYW5hbHl6ZXJDb25maWcsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gPHVkZGlSZWZlcmVuY2U+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1VERElfUkVGRVJFTkNFKSkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VVZGRpUmVmZXJlbmNlKGFuYWx5emVyQ29uZmlnLCBuZXh0RWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVGhyb3cgZXhjZXB0aW9uCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICJjb25maWcwNiIsCi0gICAgICAgICAgICBuZXh0RWxlbWVudC5nZXRMb2NhbE5hbWUoKSwKLSAgICAgICAgICAgICJJbnZhbGlkIGFuYWx5emVyIGNvbmZpZyBlbGVtZW50OiIpKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHJlcG9ydEZpbGUgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZVJlcG9ydEZpbGVFbGVtZW50KAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIEVsZW1lbnQgZWxlbWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgcmVwb3J0IGxvY2F0aW9uIGFuZCByZXBsYWNlIGluZGljYXRvcgotICAgIGFuYWx5emVyQ29uZmlnLnNldFJlcGxhY2VSZXBvcnQoCi0gICAgICBYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfUkVQTEFDRSwgZmFsc2UpKTsKLSAgICBhbmFseXplckNvbmZpZy5zZXRSZXBvcnRMb2NhdGlvbigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBlbGVtZW50LAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9MT0NBVElPTiwKLSAgICAgICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1VSSSkpOwotCi0gICAgLy8gQUREOiBJZiB0aGUgcmVwb3J0IGxvY2F0aW9uIHdhc24ndCBzcGVjaWZpZWQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgLy9pZiAoYW5hbHl6ZXJDb25maWcuZ2V0UmVwb3J0TG9jYXRpb24oKSA9PSBudWxsKQotICAgIC8vICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJUaGUgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgY29udGFpbiB0aGUgcmVwb3J0IGZpbGUgbG9jYXRpb24uIik7Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8YWRkU3R5bGVTaGVldD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FERF9TVFlMRV9TSEVFVCkpCi0gICAgICB7Ci0gICAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotCi0gICAgICAgIC8vIFBhcnNlIHRoZSBlbGVtZW50ICAKLSAgICAgICAgVGVzdFV0aWxzLnBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICBhZGRTdHlsZVNoZWV0LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX1JFUE9SVF9YU0wpOwotCi0gICAgICAgIC8vIFNldCBhZGQgc3R5bGUgc2hlZXQKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2Ugd3NkbCByZWZlcmVuY2UgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZVdzZGxSZWZlcmVuY2UoCi0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBVRERJIHJlZmVyZW5jZQotICAgIFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSA9IG5ldyBXU0RMUmVmZXJlbmNlSW1wbCgpOwotCi0gICAgLy8gU2V0IFdTREwgcmVmZXJlbmNlCi0gICAgYW5hbHl6ZXJDb25maWcuc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLQotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDx3c2RsVVJJPgotICAgICAgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9VUkkpKQotICAgICAgewotICAgICAgICAvLyBTZXQgV1NETCBsb2NhdGlvbgotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExMb2NhdGlvbihYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxzZXJ2aWNlTG9jYXRpb24+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1NFUlZJQ0VfTE9DQVRJT04pKQotICAgICAgewotICAgICAgICAvLyBTZXQgc2VydmljZSBsb2NhdGlvbgotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFNlcnZpY2VMb2NhdGlvbihYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsRWxlbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IFdTREwgZWxlbWVudAotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHBhcnNlV3NkbEVsZW1lbnQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0KLSAgICAvLyBJZiBXU0RMIGVsZW1lbnQgb3IgV1NMIFVSSSBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmICgod3NkbFJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpID09IG51bGwpCi0gICAgICB8fCAod3NkbFJlZmVyZW5jZS5nZXRXU0RMTG9jYXRpb24oKSA9PSBudWxsKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwNyIsCi0gICAgICAgICAgIkJvdGggdGhlIDx3c2RsRWxlbWVudD4gYW5kIDx3c2RsVVJJPiBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZC4iKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdHlwZSBpcyBwb3J0IG9yIG9wZXJhdGlvbiwgdGhlbiBwYXJlbnQgZWxlbWVudCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkCi0gICAgaWYgKCgod3NkbFJlZmVyZW5jZQotICAgICAgLmdldFdTRExFbGVtZW50KCkKLSAgICAgIC5nZXRUeXBlKCkKLSAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9QT1JUKSkKLSAgICAgIHx8ICh3c2RsUmVmZXJlbmNlCi0gICAgICAgIC5nZXRXU0RMRWxlbWVudCgpCi0gICAgICAgIC5nZXRUeXBlKCkKLSAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpKQotICAgICAgJiYgKHdzZGxSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50TmFtZSgpID09IG51bGwpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA5IiwKLSAgICAgICAgICAiVGhlIHBhcmVudEVsZW1lbnROYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aXRoIGEgV1NETCB0eXBlIG9mICIKLSAgICAgICAgICAgICsgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQKLSAgICAgICAgICAgICsgIiBvciAiCi0gICAgICAgICAgICArIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04KLSAgICAgICAgICAgICsgIi4iKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHVkZGkgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlVWRkaVJlZmVyZW5jZSgKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIFVEREkgcmVmZXJlbmNlCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0KLSAgICAvLyBTZXQgVURESSByZWZlcmVuY2UKLSAgICBhbmFseXplckNvbmZpZy5zZXRVRERJUmVmZXJlbmNlKHVkZGlSZWZlcmVuY2UpOwotCi0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgd2hpbGUgKG5leHRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gPGlucXVpcnlVUkw+Ci0gICAgICBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9JTlFVSVJZX1VSTCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBpbnF1aXJ5IFVSTAotICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldElucXVpcnlVUkwoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8dWRkaUtleT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkpKQotICAgICAgewotICAgICAgICAvLyBTZXQgVURESSBrZXkgYW5kIGtleSB0eXBlCi0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0S2V5KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRLZXlUeXBlKAotICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9UWVBFKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsRWxlbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IFdTREwgZWxlbWVudAotICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHBhcnNlV3NkbEVsZW1lbnQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHNlcnZpY2VMb2NhdGlvbj4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTikpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBzZXJ2aWNlIGxvY2F0aW9uCi0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0U2VydmljZUxvY2F0aW9uKFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLyogUkVNT1ZFOgotICAgICAgLy8gPHdzZGxFbGVtZW50PgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9XU0RMX0VMRU1FTlQpKSB7Ci0gICAgICAgIC8vIFNldCBzZXJ2aWNlIGxvY2F0aW9uCi0gICAgICAgIHBhcnNlV3NkbEVsZW1lbnQoYW5hbHl6ZXJDb25maWcsIG5leHRFbGVtZW50KTsKLSAgICAgICB9Ci0gICAgICAgKi8KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBXU0RMRWxlbWVudCBwYXJzZVdzZGxFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0KLSAgICAvLyBTZXQgdHlwZSwgbmFtZXNwYWNlLCBwYXJlbnQgZWxlbWVudCBuYW1lIGFuZCBuYW1lCi0gICAgd3NkbEVsZW1lbnQuc2V0VHlwZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpKTsKLSAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UoCi0gICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UpKTsKLSAgICB3c2RsRWxlbWVudC5zZXRQYXJlbnRFbGVtZW50TmFtZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBlbGVtZW50LAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9QQVJFTlRfRUxFTUVOVF9OQU1FKSk7Ci0KLSAgICBTdHJpbmcgd3NkbEVsZW1lbnROYW1lID0gWE1MVXRpbHMuZ2V0VGV4dChlbGVtZW50KTsKLSAgICBpZiAod3NkbEVsZW1lbnROYW1lLmVxdWFscygiIikpCi0gICAgewotICAgICAgLy8gVGhyb3cgZXhjZXB0aW9uCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKCJjb25maWcxOSIsICJUaGUgV1NETCBlbGVtZW50IG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuIikpOwotICAgIH0KLSAgICB3c2RsRWxlbWVudC5zZXROYW1lKHdzZGxFbGVtZW50TmFtZSk7Ci0KLSAgICByZXR1cm4gd3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICByZXR1cm4gaXNFbGVtZW50KAotICAgICAgZWxlbWVudCwKLSAgICAgIGdldFZhbGlkV1NJQW5hbHl6ZXJDb25maWdOYW1lc3BhY2VzKCksCi0gICAgICBsb2NhbE5hbWUpOwotICB9Ci0KLSAgCi0gIHN0YXRpYyBwdWJsaWMgTGlzdCBnZXRWYWxpZFdTSUFuYWx5emVyQ29uZmlnTmFtZXNwYWNlcygpCi0gIHsKLSAgCUFycmF5TGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAJbGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQU5BTFlaRVJfQ09ORklHXzIwMDMpOwotICAJbGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQU5BTFlaRVJfQ09ORklHKTsKLSAgCXJldHVybiBsaXN0OwotICB9Ci0gIAotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgTGlzdCBuYW1lc3BhY2VzLAotICAgIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICByZXR1cm4gWE1MVXRpbHMuaXNFbGVtZW50KGVsZW1lbnQsIG5hbWVzcGFjZXMsIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSUQsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlKG1lc3NhZ2VJRCwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgbWVzc2FnZUlELAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlOwotICAgIGlmIChtZXNzYWdlTGlzdCAhPSBudWxsKQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0Fzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTNkMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbiBkZWZpbml0aW9uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbCBpbXBsZW1lbnRzIEFzc2VydGlvblJlc3VsdHNPcHRpb24KLXsKLSAgLyoqCi0gICAqIEFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBBc3NlcnRpb25SZXN1bHRUeXBlIHJlc3VsdFR5cGUgPSBBc3NlcnRpb25SZXN1bHRUeXBlLkFMTDsKLQotICAvKioKLSAgICogU2hvdyBtZXNzYWdlIGVudHJ5IGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3dNZXNzYWdlRW50cnkgPSB0cnVlOwotCi0gIC8qKgotICAgKiBTaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBmYWxzZTsKLQotICAvKioKLSAgICogU2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0ZhaWx1cmVNZXNzYWdlID0gdHJ1ZTsKLQotICAvKioKLSAgICogU2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93RmFpbHVyZURldGFpbCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdFR5cGUKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRUeXBlIGdldEFzc2VydGlvblJlc3VsdFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHJlc3VsdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlIHJlc3VsdFR5cGUpCi0gIHsKLSAgICB0aGlzLnJlc3VsdFR5cGUgPSByZXN1bHRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzaG93IG1lc3NhZ2UgZW50cnkgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRTaG93TWVzc2FnZUVudHJ5Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93TWVzc2FnZUVudHJ5KCkKLSAgewotICAgIHJldHVybiB0aGlzLnNob3dNZXNzYWdlRW50cnk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHNob3cgbWVzc2FnZSBlbnRyeSBpbmRpY3Rvci4KLSAgICogQHNlZSAjZ2V0U2hvd01lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd01lc3NhZ2VFbnRyeShib29sZWFuIHNob3dNZXNzYWdlRW50cnkpCi0gIHsKLSAgICB0aGlzLnNob3dNZXNzYWdlRW50cnkgPSBzaG93TWVzc2FnZUVudHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnNob3dBc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBhc3NlcnRpb24gZGVzY3JpcHRpb24gaW5kaWN0b3IuCi0gICAqIEBzZWUgI2dldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKGJvb2xlYW4gc2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5zaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2hvd0ZhaWx1cmVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGZhaWx1cmUgbWVzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93RmFpbHVyZU1lc3NhZ2UoYm9vbGVhbiBzaG93RmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLnNob3dGYWlsdXJlTWVzc2FnZSA9IHNob3dGYWlsdXJlTWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZURldGFpbCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zaG93RmFpbHVyZURldGFpbDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2dldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93RmFpbHVyZURldGFpbChib29sZWFuIHNob3dGYWlsdXJlRGV0YWlsKQotICB7Ci0gICAgdGhpcy5zaG93RmFpbHVyZURldGFpbCA9IHNob3dGYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgIEFzc2VydGlvbiBSZXN1bHRzOiIpOwotICAgIHB3LnByaW50bG4oIiAgICB0eXBlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5yZXN1bHRUeXBlKTsKLSAgICBwdy5wcmludGxuKCIgICAgbWVzc2FnZUVudHJ5IC4uLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd01lc3NhZ2VFbnRyeSk7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gLi4uLi4gIiArIHRoaXMuc2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKTsKLSAgICBwdy5wcmludGxuKCIgICAgZmFpbHVyZU1lc3NhZ2UgLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd0ZhaWx1cmVNZXNzYWdlKTsKLSAgICBwdy5wcmludGxuKCIgICAgZmFpbHVyZURldGFpbCAuLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd0ZhaWx1cmVEZXRhaWwpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0IGFzIGFuIFhNTCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDb25maWcgb3B0aW9ucwotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FTU0VSVElPTl9SRVNVTFRTICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9UWVBFICsgIj1cIiIgKyBnZXRBc3NlcnRpb25SZXN1bHRUeXBlKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9NRVNTQUdFX0VOVFJZICsgIj1cIiIgKyBnZXRTaG93TWVzc2FnZUVudHJ5KCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9BU1NFUlRJT05fREVTQ1JJUFRJT04KLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIGdldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbigpCi0gICAgICAgICsgIlwiICIpOwotICAgIHB3LnByaW50KAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfRkFJTFVSRV9NRVNTQUdFCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKQotICAgICAgICArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfRkFJTFVSRV9ERVRBSUwKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIGdldFNob3dGYWlsdXJlRGV0YWlsKCkKLSAgICAgICAgKyAiXCIvPiIpOwotICAgIC8vIFJFTU9WRToKLSAgICAvL3B3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfV0FSTklOR19NRVNTQUdFICsgIj1cIiIgKyBnZXRTaG93V2FybmluZ01lc3NhZ2UoKSArICJcIi8+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvVURESVJlZmVyZW5jZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1VERElSZWZlcmVuY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzdiNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvVURESVJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGlpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgdG8gYSBkaXNjb3ZlcnkgYXJ0aWZhY3QuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgVURESVJlZmVyZW5jZQotewotICAvKioKLSAgICogVURESSBrZXkgdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcga2V5VHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFVEREkga2V5LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBrZXkgPSBudWxsOwotCi0gIC8qKgotICAgKiBVRERJIGlucXVpcnkgVVJMLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBpbnF1aXJ5VVJMID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogU2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgc2VydmljZUxvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2UjZ2V0S2V5VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMua2V5VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZSNzZXRLZXlUeXBlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEtleVR5cGUoU3RyaW5nIGtleVR5cGUpCi0gIHsKLSAgICBpZiAoa2V5VHlwZS5lcXVhbHMoQklORElOR19LRVkpIHx8IGtleVR5cGUuZXF1YWxzKFRNT0RFTF9LRVkpKQotICAgICAgdGhpcy5rZXlUeXBlID0ga2V5VHlwZTsKLSAgICBlbHNlCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiSW52YWxpZCBVRERJIGtleSB0eXBlOiBbIiArIGtleVR5cGUgKyAiXS4iKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZSNnZXRLZXkoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRLZXkoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMua2V5OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlI3NldEtleShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIGtleSkKLSAgewotICAgIHRoaXMua2V5ID0ga2V5OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlI2dldElucXVpcnlVUkwoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiB0aGlzLmlucXVpcnlVUkw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2Ujc2V0SW5xdWlyeVVSTChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgdGhpcy5pbnF1aXJ5VVJMID0gaW5xdWlyeVVSTDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0V1NETEVsZW1lbnQoV1NETEVsZW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRTZXJ2aWNlTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2VydmljZUxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI3NldFNlcnZpY2VMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMuc2VydmljZUxvY2F0aW9uID0gc2VydmljZUxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgIFVEREkgUmVmZXJlbmNlOiAiKTsKLSAgICBwdy5wcmludGxuKCIgICAgVURESSBLZXk6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICAgIHR5cGUgLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5rZXlUeXBlKTsKLSAgICBwdy5wcmludGxuKCIgICAgICBrZXkgLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMua2V5KTsKLSAgICBwdy5wcmludGxuKCIgICAgaW5xdWlyeVVSTCAuLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuaW5xdWlyeVVSTCk7Ci0gICAgaWYgKHRoaXMuc2VydmljZUxvY2F0aW9uICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKCIgICAgc2VydmljZUxvY2F0aW9uIC4uLi4uLi4uLi4gIiArIHRoaXMuc2VydmljZUxvY2F0aW9uKTsKLSAgICBpZiAodGhpcy53c2RsRWxlbWVudCAhPSBudWxsKQotICAgICAgcHcucHJpbnQodGhpcy53c2RsRWxlbWVudC50b1N0cmluZygpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBFbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIGdldEtleVR5cGUoKSArICJcIj4iKTsKLSAgICBwdy5wcmludChnZXRLZXkoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkgKyAiPiIpOwotICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSU5RVUlSWV9VUkwgKyAiPiIpOwotICAgIHB3LnByaW50KGdldElucXVpcnlVUkwoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSU5RVUlSWV9VUkwgKyAiPiIpOwotCi0gICAgaWYgKHRoaXMud3NkbEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KGdldFdTRExFbGVtZW50KCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICBpZiAodGhpcy5zZXJ2aWNlTG9jYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NFUlZJQ0VfTE9DQVRJT04gKyAiPiIpOwotICAgICAgcHcucHJpbnQoZ2V0U2VydmljZUxvY2F0aW9uKCkpOwotICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgIiAgICAgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTiArICI+Iik7Ci0gICAgfQotCi0gICAgcHcucHJpbnRsbigiICAgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzY3ZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciBXU0RMIGRlZmluaXRpb25zLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFdTRExFbGVtZW50Ci17Ci0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZTsKLQotICAvKioKLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0TmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5uYW1lc3BhY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldE5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5uYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBuZXcgUU5hbWUodGhpcy5uYW1lc3BhY2UsIHRoaXMubmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjc2V0UGFyZW50RWxlbWVudE5hbWUKLSAgCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudEVsZW1lbnROYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLnBhcmVudEVsZW1lbnROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI2dldFBhcmVudEVsZW1lbnROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbGVtZW50TmFtZShTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUpCi0gIHsKLSAgICB0aGlzLnBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50I2dldFBhcmVudEVsZW1lbnRRTmFtZSgpCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UGFyZW50RWxlbWVudFFOYW1lKCkKLSAgewotICAgIHJldHVybiBuZXcgUU5hbWUodGhpcy5uYW1lc3BhY2UsIHRoaXMucGFyZW50RWxlbWVudE5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHBvcnQgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGJpbmRpbmcgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1BvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHR5cGUuZXF1YWxzKFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIG1lc3NhZ2UgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgICAgV1NETCBFbGVtZW50OiAiKTsKLSAgICBwdy5wcmludGxuKCIgICAgICB0eXBlIC4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMudHlwZSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgbmFtZXNwYWNlIC4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLm5hbWVzcGFjZSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgbmFtZSAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLm5hbWUpOwotCi0gICAgaWYgKHRoaXMucGFyZW50RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50bG4oIiAgICAgIHBhcmVudEVsZW1lbnROYW1lIC4uLi4uLiAiICsgdGhpcy5wYXJlbnRFbGVtZW50TmFtZSk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QgYXMgYW4gWE1MIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIGdldFR5cGUoKSArICJcIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UgKyAiPVwiIiArIGdldE5hbWVzcGFjZSgpICsgIlwiICIpOwotICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICBwdy5wcmludCgKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfUEFSRU5UX0VMRU1FTlRfTkFNRQotICAgICAgICAgICsgIj1cIiIKLSAgICAgICAgICArIGdldFBhcmVudEVsZW1lbnROYW1lKCkKLSAgICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50KCI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0TmFtZSgpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExSZWZlcmVuY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9XU0RMUmVmZXJlbmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGJmZjQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExSZWZlcmVuY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIGEgcmVmZXJlbmNlIHRvIGEgZGVzY3JpcHRpb24gYXJ0aWZhY3QuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgV1NETFJlZmVyZW5jZQotewotICAvKioKLSAgICogV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogU2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgc2VydmljZUxvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbExvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMUmVmZXJlbmNlSW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciB3aXRoIGFsbCBzZXR0aW5ncy4KLSAgICogQHBhcmFtIHdzZGxFbGVtZW50ICAgICAgYSBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsTG9jYXRpb24gICAgIGEgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VMb2NhdGlvbiAgYSBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIFdTRExSZWZlcmVuY2VJbXBsKAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50LAotICAgIFN0cmluZyB3c2RsTG9jYXRpb24sCi0gICAgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgICB0aGlzLndzZGxMb2NhdGlvbiA9IHdzZGxMb2NhdGlvbjsKLSAgICB0aGlzLnNlcnZpY2VMb2NhdGlvbiA9IHNlcnZpY2VMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0V1NETEVsZW1lbnQoV1NETEVsZW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI3NldFdTRExMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMTG9jYXRpb24oU3RyaW5nIHdzZGxMb2NhdGlvbikKLSAgewotICAgIHRoaXMud3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI2dldFNlcnZpY2VMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0U2VydmljZUxvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlTG9jYXRpb24gPSBzZXJ2aWNlTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgV1NETCBSZWZlcmVuY2U6Iik7Ci0gICAgcHcucHJpbnQodGhpcy53c2RsRWxlbWVudC50b1N0cmluZygpKTsKLSAgICBwdy5wcmludGxuKCIgICAgd3NkbFVSSSAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMud3NkbExvY2F0aW9uKTsKLSAgICBpZiAodGhpcy5zZXJ2aWNlTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHB3LnByaW50bG4oIiAgc2VydmljZUxvY2F0aW9uIC4uLi4uLi4uLi4gIiArIHRoaXMuc2VydmljZUxvY2F0aW9uKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBFbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIHB3LnByaW50KGdldFdTRExFbGVtZW50KCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9XU0RMX1VSSSArICI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0V1NETExvY2F0aW9uKCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1dTRExfVVJJICsgIj4iKTsKLQotICAgIGlmICh0aGlzLnNlcnZpY2VMb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTiArICI+Iik7Ci0gICAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGdldFNlcnZpY2VMb2NhdGlvbigpKSk7Ci0gICAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TRVJWSUNFX0xPQ0FUSU9OICsgIj4iKTsKLSAgICB9Ci0KLSAgICBwdy5wcmludGxuKCIgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL0FkZFN0eWxlU2hlZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2NvbW1vbi9BZGRTdHlsZVNoZWV0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZGY3ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL0FkZFN0eWxlU2hlZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIEFkZFN0eWxlU2hlZXQgZWxlbWVudC4gCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQWRkU3R5bGVTaGVldCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQUREX1NUWUxFX1NIRUVUOwotCi0gIC8qKgotICAgKiBHZXQgaHJlZi4KLSAgICogQHJldHVybiBocmVmLgotICAgKiBAc2VlICNzZXRIcmVmCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhyZWYoKTsKLQotICAvKioKLSAgICogU2V0IGhyZWYuCi0gICAqIEBwYXJhbSBocmVmIGEgaHJlZi4KLSAgICogQHNlZSAjZ2V0SHJlZgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SHJlZihTdHJpbmcgaHJlZik7Ci0KLSAgLyoqCi0gICAqIEdldCB0eXBlLgotICAgKiBAcmV0dXJuIHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgYSB0eXBlLgotICAgKiBAc2VlICNnZXRUeXBlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKTsKLQotICAvKioKLSAgICogR2V0IHRpdGxlLgotICAgKiBAcmV0dXJuIHRpdGxlLgotICAgKiBAc2VlICNzZXRUaXRsZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGl0bGUuCi0gICAqIEBwYXJhbSB0aXRsZSBhIHRpdGxlLgotICAgKiBAc2VlICNnZXRUaXRsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGl0bGUoU3RyaW5nIHRpdGxlKTsKLQotICAvKioKLSAgICogR2V0IG1lZGlhLgotICAgKiBAcmV0dXJuIG1lZGlhLgotICAgKiBAc2VlICNzZXRNZWRpYQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZWRpYSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGl0bGUuCi0gICAqIEBwYXJhbSBtZWRpYSBtZWRpYS4KLSAgICogQHNlZSAjZ2V0TWVkaWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lZGlhKFN0cmluZyBtZWRpYSk7Ci0KLSAgLyoqCi0gICAqIEdldCBjaGFyc2V0LgotICAgKiBAcmV0dXJuIGNoYXJzZXQuCi0gICAqIEBzZWUgI3NldENoYXJzZXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2hhcnNldCgpOwotCi0gIC8qKgotICAgKiBTZXQgY2hhcnNldC4KLSAgICogQHBhcmFtIGNoYXJzZXQgY2hhcnNldC4KLSAgICogQHNlZSAjZ2V0Q2hhcnNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2hhcnNldChTdHJpbmcgY2hhcnNldCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhbHRlcm5hdGUuCi0gICAqIEByZXR1cm4gYWx0ZXJuYXRlLgotICAgKiBAc2VlICNzZXRBbHRlcm5hdGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWx0ZXJuYXRlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhbHRlcm5hdGUuCi0gICAqIEBwYXJhbSBhbHRlcm5hdGUgYWx0ZXJuYXRlLgotICAgKiBAc2VlICNnZXRBbHRlcm5hdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFsdGVybmF0ZShTdHJpbmcgYWx0ZXJuYXRlKTsKLQotICAvKioKLSAgICogU2V0IGlmIHRoZSBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbiBzaG91bGQgYmUgYSBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIGJvb2xlYW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KGJvb2xlYW4gY29tbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbi4KLSAgICogQHJldHVybiBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVTaGVldFN0cmluZygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL2ltcGwvQWRkU3R5bGVTaGVldEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2NvbW1vbi9pbXBsL0FkZFN0eWxlU2hlZXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NjVkMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL2ltcGwvQWRkU3R5bGVTaGVldEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciBBZGRTdHlsZVNoZWV0IGVsZW1lbnQuIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQWRkU3R5bGVTaGVldEltcGwgaW1wbGVtZW50cyBBZGRTdHlsZVNoZWV0Ci17Ci0gIC8qKgotICAgKiBBdHRyaWJ1dGUgdmFsdWVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXR0cmlidXRlVmFsdWVMaXN0ID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBhdHRyaWJ1dGVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGF0dHJpYnV0ZU5hbWVMaXN0ID0KLSAgICB7Ci0gICAgICBXU0lDb25zdGFudHMuQVRUUl9IUkVGLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSwKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1RJVExFLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfTUVESUEsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9DSEFSU0VULAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFIH07Ci0KLSAgLyoqCi0gICAqIFNldCBpZiB0aGUgc3R5bGUgc2hlZXQgZGVjbGFyYXRpb24gc2hvdWxkIGJlIGEgY29tbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGNvbW1lbnQgPSBmYWxzZTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I2dldEhyZWYoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIcmVmKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfSFJFRik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I3NldEhyZWYoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SHJlZihTdHJpbmcgaHJlZikKLSAgewotICAgIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LnB1dChXU0lDb25zdGFudHMuQVRUUl9IUkVGLCBocmVmKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LmdldChXU0lDb25zdGFudHMuQVRUUl9UWVBFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0VHlwZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUsIHR5cGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRUaXRsZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfVElUTEUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNzZXRUaXRsZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpCi0gIHsKLSAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5wdXQoV1NJQ29uc3RhbnRzLkFUVFJfVElUTEUsIHRpdGxlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0TWVkaWEoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZWRpYSgpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZykgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QuZ2V0KFdTSUNvbnN0YW50cy5BVFRSX01FRElBKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0TWVkaWEoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVkaWEoU3RyaW5nIG1lZGlhKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX01FRElBLCBtZWRpYSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I2dldENoYXJzZXQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDaGFyc2V0KCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I3NldENoYXJzZXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2hhcnNldChTdHJpbmcgY2hhcnNldCkKLSAgewotICAgIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LnB1dChXU0lDb25zdGFudHMuQVRUUl9DSEFSU0VULCBjaGFyc2V0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0QWx0ZXJuYXRlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWx0ZXJuYXRlKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0QWx0ZXJuYXRlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFsdGVybmF0ZShTdHJpbmcgYWx0ZXJuYXRlKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX0FMVEVSTkFURSwgYWx0ZXJuYXRlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogU2V0IGlmIHRoZSBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbiBzaG91bGQgYmUgYSBjb21tZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChib29sZWFuIGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRTdHlsZVNoZWV0U3RyaW5nKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVTaGVldFN0cmluZygpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc3R5bGVTaGVldCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgIGlmIChjb21tZW50KQotICAgICAgc3R5bGVTaGVldC5hcHBlbmQoIjwhLS0gIik7Ci0KLSAgICBzdHlsZVNoZWV0LmFwcGVuZCgiPD94bWwtc3R5bGVzaGVldCIpOwotCi0gICAgU3RyaW5nIHZhbHVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKCh2YWx1ZSA9IChTdHJpbmcpIGF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoYXR0cmlidXRlTmFtZUxpc3RbaV0pKQotICAgICAgICAhPSBudWxsKQotICAgICAgICBzdHlsZVNoZWV0LmFwcGVuZCgiICIgKyBhdHRyaWJ1dGVOYW1lTGlzdFtpXSArICI9XCIiICsgdmFsdWUgKyAiXCIiKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHN0eWxlU2hlZXQuYXBwZW5kKCIgPz4iKTsKLQotICAgIGlmIChjb21tZW50KQotICAgICAgc3R5bGVTaGVldC5hcHBlbmQoIiAtLT4iKTsKLQotICAgIHJldHVybiBzdHlsZVNoZWV0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldFN0eWxlU2hlZXRTdHJpbmcoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgcHcucHJpbnQoIiAgICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9IUkVGICsgIj1cIiIgKyBnZXRIcmVmKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0VHlwZSgpICsgIlwiICIpOwotICAgIGlmIChnZXRUaXRsZSgpICE9IG51bGwpCi0gICAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9USVRMRSArICI9XCIiICsgZ2V0VGl0bGUoKSArICJcIiAiKTsKLSAgICBpZiAoZ2V0TWVkaWEoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfTUVESUEgKyAiPVwiIiArIGdldE1lZGlhKCkgKyAiXCIgIik7Ci0gICAgaWYgKGdldENoYXJzZXQoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCArICI9XCIiICsgZ2V0Q2hhcnNldCgpICsgIlwiICIpOwotICAgIGlmIChnZXRBbHRlcm5hdGUoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFICsgIj1cIiIgKyBnZXRBbHRlcm5hdGUoKSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKCIvPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2ZDI3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCBmb3IgYWxsIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFJldHVybiBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSAgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4ZGUzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTSVByb3BlcnRpZXM7Ci0KLS8qKgotICogVGhpcyBhYnN0cmFjdCBjbGFzcyBkZWZpbmVzIHRoZSBmYWN0b3J5IGludGVyZmFjZSB0aGF0IGNhbiBiZSB1c2VkIHRvIAotICogcmVhZCBhbmQgd3JpdGUgYWxsIG9mIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEb2N1bWVudEZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIEdldCBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeS4KLSAgICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIGNyZWF0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBEb2N1bWVudEZhY3RvcnkgbmV3SW5zdGFuY2UoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBSZXR1cm4gaW5zdGFuY2Ugb2YgZmFjdG9yeQotICAgIHJldHVybiBuZXdJbnN0YW5jZShnZXRGYWN0b3J5Q2xhc3NOYW1lKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeSB1c2luZyB0aGUgc3BlY2lmaWVkCi0gICAqIGZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICogQHBhcmFtIGZhY3RvcnlDbGFzc05hbWUgZmFjdG9yeSBjbGFzcyBuYW1lLgotICAgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRGYWN0b3J5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY3JlYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIERvY3VtZW50RmFjdG9yeSBuZXdJbnN0YW5jZShTdHJpbmcgZmFjdG9yeUNsYXNzTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gbnVsbDsKLQotICAgIC8vIElmIGEgZmFjdG9yeSBjbGFzcyBuYW1lIHdhcyBzcGVjaWZpZWQsIHRoZW4gY3JlYXRlIG9iamVjdAotICAgIGlmIChmYWN0b3J5Q2xhc3NOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCBjbGFzcyBvYmplY3QKLSAgICAgICAgQ2xhc3MgZmFjdG9yeUNsYXNzID0gQ2xhc3MuZm9yTmFtZShmYWN0b3J5Q2xhc3NOYW1lKTsKLQotICAgICAgICAvLyBDcmVhdGUgbmV3IGZhY3RvcnkKLSAgICAgICAgZG9jdW1lbnRGYWN0b3J5ID0gKERvY3VtZW50RmFjdG9yeSkgZmFjdG9yeUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGluc3RhbnRpYXRlIGRvY3VtZW50IGZhY3RvcnkgY2xhc3M6ICIKLSAgICAgICAgICAgICsgZmFjdG9yeUNsYXNzTmFtZQotICAgICAgICAgICAgKyAiLiIsCi0gICAgICAgICAgZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJBIFdTSURvY3VtZW50RmFjdG9yeSBpbXBsZW1lbnRhdGlvbiBjbGFzcyB3YXMgbm90IGZvdW5kLiIpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBmYWN0b3J5Ci0gICAgcmV0dXJuIGRvY3VtZW50RmFjdG9yeTsKLSAgfQotCi0gIC8vIERPQ1VNRU5UIFRZUEVTCi0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgZmlsZS4KLSAgICogQHJldHVybiBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBMb2cgbmV3TG9nKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIG1vbml0b3IgY29uZmlnLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IE1vbml0b3JDb25maWcgbmV3TW9uaXRvckNvbmZpZygpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYW5hbHl6ZXIgY29uZmlnLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgYW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEFuYWx5emVyQ29uZmlnIG5ld0FuYWx5emVyQ29uZmlnKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBwcm9maWxlIGFzc2VydGlvbnMuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgUHJvZmlsZUFzc2VydGlvbnMgbmV3UHJvZmlsZUFzc2VydGlvbnMoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHJlcG9ydC4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBSZXBvcnQgbmV3UmVwb3J0KCk7Ci0KLSAgLy8gUkVBREVSUwotCi0gIC8qKgotICAgKiBDcmVhdGUgcHJvZmlsZSBhc3NlcnRpb25zIHJlYWRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHByb2ZpbGUgYXNzZXJ0aW9ucyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIgbmV3UHJvZmlsZUFzc2VydGlvbnNSZWFkZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIG1vbml0b3IgY29uZmlnIHJlYWRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIG1vbml0b3IgY29uZmlnIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBNb25pdG9yQ29uZmlnUmVhZGVyIG5ld01vbml0b3JDb25maWdSZWFkZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGFuYWx5emVyIGNvbmZpZyByZWFkZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhbmFseXplciBjb25maWcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEFuYWx5emVyQ29uZmlnUmVhZGVyIG5ld0FuYWx5emVyQ29uZmlnUmVhZGVyKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgcmVhZGVyLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbG9nIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBMb2dSZWFkZXIgbmV3TG9nUmVhZGVyKCk7Ci0KLSAgLy8gQUREOiBBZGQgb3RoZXIgcmVhZGVycwotCi0gIC8vIFdSSVRFUlMKLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydCB3cml0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnQgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFJlcG9ydFdyaXRlciBuZXdSZXBvcnRXcml0ZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyB3cml0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBsb2cgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IExvZ1dyaXRlciBuZXdMb2dXcml0ZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgcmVwb3J0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBSZXBvcnRlciBuZXdSZXBvcnRlcihSZXBvcnQgcmVwb3J0LCBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyKTsKLQotICAvLyBBREQ6IEFkZCBvdGhlciB3cml0ZXJzCi0KLSAgLyoqCi0gICAqIEZpbmQgdGhlIGZhY3RvcnkgY2xhc3MgbmFtZSB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgSmF2YSBwcm9wZXJ0eS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRGYWN0b3J5Q2xhc3NOYW1lKCkKLSAgewotICAgIC8vIEdldCBwcm9wZXJ0eSB2YWx1ZQotICAgIHJldHVybiBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KAotICAgICAgV1NJUHJvcGVydGllcy5QUk9QX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9ET0NVTUVOVF9GQUNUT1JZKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2NlNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIEdldCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZG9jdW1lbnRVUkkgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgZG9jdW1lbnRVUkkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50V3JpdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODg5MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRXcml0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHdyaXRlIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgRG9jdW1lbnQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIENvbmZvcm1hbmNlIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBEb2N1bWVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQ29uZm9ybWFuY2UgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFNldCB3cml0ZXIuCi0gICAqIEBwYXJhbSBkb2N1bWVudExvY2F0aW9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgZmFpbGVkIG9yIGludGVycnVwdGVkIEkvTyBvcGVyYXRpb25zLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSBvdXQgb25seSBhIHBhcnQgb2YgYSBkb2N1bWVudCB0byB0aGUgbG9jYXRpb24KLSAgICogdGhhdCB3YXMgcHJldmlvdXNseSBzZXQgdXNpbmcgdGhlIHNldExvY2F0aW9uIG1ldGhvZC4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIHRyb3VibGUgd3JpdGluZyBvdXQgdGhlIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGlzIG9wZXJhdGlvbiBoYXMgYmVlbiBpbnZva2VkIAotICAgKiAgICAgICAgIGF0IGFuIGlsbGVnYWwgb3IgaW5hcHByb3ByaWF0ZSB0aW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSBvdXQgb25seSBhIHBhcnQgb2YgYSBkb2N1bWVudC4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEBwYXJhbSB3cml0ZXIgYSBXcml0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyB0cm91YmxlIHdyaXRpbmcgb3V0IHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIsIFdyaXRlciB3cml0ZXIpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIENsb3NlIHdyaXRlci4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgdHJvdWJsZSBjbG9zaW5nIHRoZSB3cml0ZXIuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBXU0lFeGNlcHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L1dTSURvY3VtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9XU0lEb2N1bWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGRiMGQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L1dTSURvY3VtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgZm9yIGFsbCBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NJRG9jdW1lbnQgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqIEBzZWUgI3NldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnRVUkkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudC4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9pbXBsL0RvY3VtZW50RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTNmZmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5BbmFseXplckNvbmZpZ0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFuYWx5emVyQ29uZmlnUmVhZGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dXcml0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsLk1vbml0b3JDb25maWdJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsLk1vbml0b3JDb25maWdSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGwuUHJvZmlsZUFzc2VydGlvbnNJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGwuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0V3JpdGVySW1wbDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ29uZm9ybWFuY2UgZG9jdW1lbnQgZmFjdG9yeSB3aGljaCBwcm92aWRlcyBhY2Nlc3MgdG8KLSAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZG9jdW1lbnRzLCByZWFkZXJzIGFuZCB3cml0ZXJzLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRGYWN0b3J5SW1wbCBleHRlbmRzIERvY3VtZW50RmFjdG9yeQotewotICAvKioKLSAgICogRG9jdW1lbnQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEZhY3RvcnlJbXBsKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBMb2cgbmV3TG9nKCkKLSAgewotICAgIHJldHVybiBuZXcgTG9nSW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyBNb25pdG9yQ29uZmlnIG5ld01vbml0b3JDb25maWcoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNb25pdG9yQ29uZmlnSW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbmFseXplciBjb25maWcuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWcgbmV3QW5hbHl6ZXJDb25maWcoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbmFseXplckNvbmZpZ0ltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgcHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zIG5ld1Byb2ZpbGVBc3NlcnRpb25zKCkKLSAgewotICAgIHJldHVybiBuZXcgUHJvZmlsZUFzc2VydGlvbnNJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydC4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnQgbmV3UmVwb3J0KCkKLSAgewotICAgIHJldHVybiBuZXcgUmVwb3J0SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZ1JlYWRlciBuZXdNb25pdG9yQ29uZmlnUmVhZGVyKCkKLSAgewotICAgIHJldHVybiBuZXcgTW9uaXRvckNvbmZpZ1JlYWRlckltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW5hbHl6ZXIgY29uZmlnIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZ1JlYWRlciBuZXdBbmFseXplckNvbmZpZ1JlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFuYWx5emVyQ29uZmlnUmVhZGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIG5ld1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVyKCkKLSAgewotICAgIC8vIFJldHVybiBpbXBsZW1lbnRhdGlvbgotICAgIHJldHVybiBuZXcgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgTG9nUmVhZGVyIG5ld0xvZ1JlYWRlcigpCi0gIHsKLSAgICAvLyBSZXR1cm4gaW1wbGVtZW50YXRpb24KLSAgICByZXR1cm4gbmV3IExvZ1JlYWRlckltcGwoKTsKLSAgfQotCi0gIC8vIFdSSVRFUlMKLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgTG9nV3JpdGVyIG5ld0xvZ1dyaXRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IExvZ1dyaXRlckltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBEb2N1bWVudFJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRXcml0ZXIgbmV3UmVwb3J0V3JpdGVyKCkKLSAgewotICAgIC8vIFJldHVybiBpbXBsZW1lbnRhdGlvbgotICAgIHJldHVybiBuZXcgUmVwb3J0V3JpdGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIERlZmF1bHRSZXBvcnRlcgotICAgKi8KLSAgcHVibGljIFJlcG9ydGVyIG5ld1JlcG9ydGVyKFJlcG9ydCByZXBvcnQsIFJlcG9ydFdyaXRlciByZXBvcnRXcml0ZXIpCi0gIHsKLSAgICByZXR1cm4gbmV3IERlZmF1bHRSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgZmFjdG9yeSBjbGFzcyBuYW1lIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBKYXZhIHByb3BlcnR5LgotICAgKi8KLSAgLy9wcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RmFjdG9yeUNsYXNzTmFtZSgpCi0gIC8vewotICAvLyAgLy8gR2V0IHByb3BlcnR5IHZhbHVlCi0gIC8vICByZXR1cm4gV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eSgKLSAgLy8gICAgV1NJUHJvcGVydGllcy5QUk9QX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gIC8vICAgIFdTSVByb3BlcnRpZXMuREVGX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAvL30KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRXcml0ZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9pbXBsL0RvY3VtZW50V3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjFlNmQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRXcml0ZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFdyaXRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHdyaXRlIHRoZSBDb25mb3JtYW5jZSBYTUwgCi0gKiBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIERvY3VtZW50V3JpdGVySW1wbCBpbXBsZW1lbnRzIERvY3VtZW50V3JpdGVyCi17Ci0gIC8qKgotICAgKiBEb2N1bWVudCB3cml0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgV3JpdGVyIHdyaXRlciA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudFdyaXRlciNnZXREb2N1bWVudCgpCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KLSAgewotICAgIC8vIEFERDoKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjc2V0V3JpdGVyKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikKLSAgICB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQgCi0gICAgdGhpcy53cml0ZXIgPQotICAgICAgbmV3IFByaW50V3JpdGVyKAotICAgICAgICBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAotICAgICAgICAgIG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRvY3VtZW50TG9jYXRpb24pLAotICAgICAgICAgICJVVEYtOCIpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJZiB0aGUgd3JpdGVyIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGFuIGV4Y2VwdGlvbgotICAgIGlmICh3cml0ZXIgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBkb2N1bWVudCBzaW5jZSB3cml0ZXIgd2FzIG5vdCBzZXQuIik7Ci0KLSAgICB3cml0ZShyZWFkZXIsIHdyaXRlcik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI3dyaXRlKFJlYWRlciwgV3JpdGVyKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIsIFdyaXRlciB3cml0ZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIGJ1ZmZlcmVkIHJlYWRlcgotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZlJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOwotCi0gICAgLy8gQ3JlYXRlIHByaW50IHdyaXRlcgotICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKHdyaXRlcik7Ci0KLSAgICBTdHJpbmcgbmV4dExpbmUgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUmVhZCBlYWNoIGxpbmUgZnJvbSB0aGUgcmVhZGVyCi0gICAgICB3aGlsZSAoKG5leHRMaW5lID0gYnVmUmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFdyaXRlIHRleHQgYW5kIGZsdXNoIHN0cmVhbQotICAgICAgICBwcmludFdyaXRlci5wcmludGxuKG5leHRMaW5lKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHdyaXRlIGRvY3VtZW50LiIsIGUpOwotICAgIH0KLQotICAgIC8vIEZsdXNoIGFuZCBjbG9zZSB0aGUgd3JpdGVyCi0gICAgcHJpbnRXcml0ZXIuZmx1c2goKTsKLSAgICAvL3ByaW50V3JpdGVyLmNsb3NlKCk7ICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIENsb3NlIHdyaXRlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJZiB0aGUgd3JpdGVyIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGFuIGV4Y2VwdGlvbgotICAgIGlmICh3cml0ZXIgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBsb2cgZmlsZSBzaW5jZSB3cml0ZXIgd2FzIG5vdCBzZXQuIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBDbG9zZSB0aGUgd3JpdGVyCi0gICAgICB3cml0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oaW9lLnRvU3RyaW5nKCksIGlvZSk7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1ODZiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LldTSURvY3VtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtZXNzYWdlIGxvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nIGV4dGVuZHMgV1NJRG9jdW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX0xPRzsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTE9HLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBBZGQgbWVzc2FnZSB0byBsb2cgZmlsZS4gIFRoZSBtZXNzYWdlIHdpbGwgY29udGFpbiBib3RoIAotICAgKiB0cmFuc3BvcnQgYW5kIGNvbnRlbnQgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSBsb2dFbnRyeSBtZXNzYWdlIGNvbnRhaW5pbmcgYm90aCB0cmFuc3BvcnQgYW5kIGNvbnRlbnQgaW5mb3JtYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGFkZGluZyB0aGUgbWVzc2FnZSB0byBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZExvZ0VudHJ5KE1lc3NhZ2VFbnRyeSBsb2dFbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHRoZSBudW1iZXIgb2YgbG9nIGVudHJpZXMuCi0gICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBsb2cgZW50cmllcy4gCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVudHJ5Q291bnQoKTsKLQotICAvKioKLSAgICogR2V0IGEgc3BlY2lmaWMgbG9nIGZpbGUgZW50cnkuIAotICAgKiBAcGFyYW0gaW5kZXggaW5kZXggaW50byBsb2cgZW50cmllcy4KLSAgICogQHJldHVybiBsb2cgZmlsZSBlbnRyeSBhdCBzcGVjaWZpZWQgaW5kZXguCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldExvZ0VudHJ5KGludCBpbmRleCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZW50cnkgbGlzdC4KLSAgICogQHJldHVybiBsaXN0IG9mIGxvZyBlbnRyaWVzLgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRMb2dFbnRyeUxpc3QoKTsKLQotICAvKioKLSAgICogR2V0IGxhc3QgbG9nIGVudHJ5LgotICAgKiBAcmV0dXJuIGFzdCBsb2cgZW50cnkuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldExhc3RMb2dFbnRyeSgpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIGVudHJ5IG9iamVjdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGxvZyBlbnRyeS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgY3JlYXRlTG9nRW50cnkoKTsKLQotICAvKioKLSAgICogU2V0IHN0eWxlIHNoZWV0IHN0cmluZy4KLSAgICogQHBhcmFtIHN0eWxlU2hlZXRTdHJpbmcgYSBzdHlsZSBzaGVldCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdHlsZVNoZWV0U3RyaW5nKFN0cmluZyBzdHlsZVNoZWV0U3RyaW5nKTsKLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gc3RhcnQgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKTsKLQotICAvKioKLSAgICogR2V0IGVuZCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIGVuZCBlbGVtZW50IHN0cmluZy4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nQnVpbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZ0J1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM0Y2E3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nQnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGwuQWRkU3R5bGVTaGVldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTG9nSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTG9nV3JpdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTWVzc2FnZUVudHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLmltcGwuQ29tbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLmltcGwuTWFuSW5UaGVNaWRkbGVJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmU7Ci0KLS8qKgotICogR2l2ZW4gYSBsaXN0IG9mIFJlcXVlc3RIYW5kbGVycywgdGhpcyBjbGFzcyBidWlsZHMgYSAKLSAqIFdTLUkgY29tcGxpYW50IE1lc3NhZ2UgTG9nIGZpbGUuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIExvZ0J1aWxkZXIKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgICogSURzIHRvIGlkZW50aWZ5IHJlcXVlc3RzIGFuZCBjb3JyZXNwb25kaW5nIHJlc3BvbnNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgY29udmVyc2F0aW9uSWQgPSAxOwotCi0gIC8qKgotICAgKiBJRHMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgZWFjaCBhbmQgZXZlcnkgbWVzc2FnZSB3aXRoaW4gdGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBpZCA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBhY3R1YWwgbG9nIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBMb2cgbG9nID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIElGaWxlIGlmaWxlOwotCi0gIC8qKgotICAgKiBUb29sIGluZm9ybWF0aW9uIHByb3BlcnR5IHZhbHVlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX05BTUUgPSAiTW9uaXRvciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX1ZFUlNJT04gPSAiMS4wIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xfUkVMRUFTRV9EQVRFID0gIjIwMDMtMDMtMjAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9JTVBMRU1FTlRFUiA9ICJJQk0iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9MT0NBVElPTiA9ICIiOwotCi0gIC8qKgotICAgKiBDb21tb24gdGltZXN0YW1wIGZvcm1hdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCB0aW1lc3RhbXBGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCAoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBpZmlsZTogdGhlIGZpbGUgaGFuZGxlciBmb3IgdGhlIGxvZy4KLSAgICovCi0gIHB1YmxpYyBMb2dCdWlsZGVyKElGaWxlIGlmaWxlKQotICB7Ci0gICAgdGhpcy5pZmlsZSA9IGlmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgYnVpbGRzIGFuZCB0aGVuIHJldHVybnMgYSBsb2cgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVxdWVzdC1yZXNwb25zZSBwYWlycy4KLSAgICogQHBhcmFtIHJlcXVlc3RSZXNwb25zZXM6IGEgbGlzdCBvZiBtZXNzYWdlcyBpbiB0aGUgZm9ybSBvZiByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotICAgKiBAcmV0dXJuIGEgbG9nIGJhc2VkIG9uIGEgbGlzdCBvZiByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotICAgKi8KLSAgcHVibGljIExvZyBidWlsZExvZyhMaXN0IHJlcXVlc3RSZXNwb25zZXMpCi0gIHsKLSAgICBsb2cgPSBuZXcgTG9nSW1wbCgpOwotICAgIGxvZ01vbml0b3JJbmZvcm1hdGlvbigpOwotCi0gICAgLy8gbG9nIHRoZSBtZXNzYWdlcwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlcXVlc3RSZXNwb25zZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFJlcXVlc3RIYW5kbGVyIHJyID0gKFJlcXVlc3RIYW5kbGVyKWkubmV4dCgpOwotICAgICAgaWYgKHJyICE9IG51bGwpIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBsb2dSZXF1ZXN0UmVzcG9uc2UocnIpOwotICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgIC8qIEVtcHR5IGNhdGNoIGJsb2NrLiAgVGhpcyByZXF1ZXN0L3Jlc3BvbnNlIHBhaXIgaXMgbm90IGEgdmFsaWQgU09BUAotICAgICAgICAgICAgICAgKiBtZXNzYWdlLCBzbyBza2lwIGl0LiAqLwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxvZzsKLSAgfQotCi0gIC8qKgotICAgKiBDdXJyZW50bHkgYSBuby1vcC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZ01vbml0b3JJbmZvcm1hdGlvbigpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBMb2cgdGhlIHJlcXVlc3QtcmVzcG9uc2UgcGFpci4KLSAgICpAcGFyYW0gcnI6IGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgbG9nUmVxdWVzdFJlc3BvbnNlKFJlcXVlc3RIYW5kbGVyIHJyKQotICB7Ci0gICAgaWYgKHJyICE9IG51bGwpCi0gICAgewotICAgICAgYnl0ZVtdIHJlcXVlc3RIZWFkZXJCeXRlcyA9IHJyLmdldFJlcXVlc3RIZWFkZXIoKTsKLSAgICAgIGJ5dGVbXSByZXNwb25zZUhlYWRlckJ5dGVzID0gcnIuZ2V0UmVzcG9uc2VIZWFkZXIoKTsKLSAKLSAgICAgIGlmICgocmVxdWVzdEhlYWRlckJ5dGVzICE9IG51bGwpIHx8IChyZXNwb25zZUhlYWRlckJ5dGVzICE9IG51bGwpKQotICAgICAgewotICAgICAgICBsb25nIHRpbWVzdGFtcCA9IHJyLmdldERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbEhvc3RBbmRQb3J0ID0gImxvY2FsaG9zdDoiICsgcnIuZ2V0TG9jYWxQb3J0KCk7Ci0gICAgICAgIFN0cmluZyByZW1vdGVIb3N0QW5kUG9ydCA9IHJyLmdldFJlbW90ZUhvc3QoKSArICI6IiArIHJyLmdldFJlbW90ZVBvcnQoKTsKLQotICAgICAgICBpbnQgY29udmVyc2F0aW9uSWQgPSBnZXROZXh0QXZhaWxhYmxlQ29udmVyc2F0aW9uSWQoKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiAocmVxdWVzdEhlYWRlckJ5dGVzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHJlcXVlc3RIZWFkZXIgPSBuZXcgU3RyaW5nKHJlcXVlc3RIZWFkZXJCeXRlcyk7Ci0gICAgICAgICAgICBieXRlW10gdW5jaHVua2VkUmVxdWVzdEJvZHkgPSByci5nZXRSZXF1ZXN0Q29udGVudCgpOwotICAgICAgICAgICAgaW50IHJlcXVlc3RJZCAgPSBnZXROZXh0QXZhaWxhYmxlSWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlcXVlc3QgPSBjcmVhdGVNZXNzYWdlRW50cnkocmVxdWVzdElkLCBjb252ZXJzYXRpb25JZCwgCi0gICAgICAgICAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCwgdGltZXN0YW1wLCBsb2NhbEhvc3RBbmRQb3J0LAotICAgICAgICAgICAgICAgIHJlbW90ZUhvc3RBbmRQb3J0LCB1bmNodW5rZWRSZXF1ZXN0Qm9keSwgcmVxdWVzdEhlYWRlcik7Ci0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShtZXNzYWdlRW50cnlSZXF1ZXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHJlc3BvbnNlSGVhZGVyQnl0ZXMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VIZWFkZXIgPSBuZXcgU3RyaW5nKHJlc3BvbnNlSGVhZGVyQnl0ZXMpOwotICAgICAgICAgICAgYnl0ZVtdIHVuY2h1bmtlZFJlc3BvbnNlQm9keSA9IHJyLmdldFJlc3BvbnNlQ29udGVudCgpOwotICAgICAgICAgICAgaW50IHJlc3BvbnNlSWQgPSBnZXROZXh0QXZhaWxhYmxlSWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlc3BvbnNlID0gY3JlYXRlTWVzc2FnZUVudHJ5KHJlc3BvbnNlSWQsIGNvbnZlcnNhdGlvbklkLCAKLSAgICAgICAgICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSwgdGltZXN0YW1wICsgcnIuZ2V0UmVzcG9uc2VUaW1lKCksIHJlbW90ZUhvc3RBbmRQb3J0LAotICAgICAgICAgICAgICAgIGxvY2FsSG9zdEFuZFBvcnQsIHVuY2h1bmtlZFJlc3BvbnNlQm9keSwgcmVzcG9uc2VIZWFkZXIpOwotIAotICAgICAgICAgICAgaWYgKG1lc3NhZ2VFbnRyeVJlc3BvbnNlICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcmVxdWVzdCByZXNwb25zZSBwYWlyCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIGhhcyBhdCBsZWFzdAotICAgKiBvbmUgbGVmdCBhbmQgb25lIHJpZ2h0IGJyYWNrZXQuCi0gICAqIEBwYXJhbSBtZXNzYWdlOiBhIG1lc3NhZ2UgY29udGVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIGhhcyBhdCBsZWFzdAotICAgKiAgICAgICAgIG9uZSBsZWZ0IGFuZCBvbmUgcmlnaHQgYnJhY2tldC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWVzc2FnZVdpdGhCcmFja2V0cyhTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHJldHVybiAoKG1lc3NhZ2UgIT0gbnVsbCkgJiYgCi0gICAgICAgICAgICAobWVzc2FnZS5pbmRleE9mKCI8IikhPSAtMSkgJiYgCi0gICAgICAgICAgICAobWVzc2FnZS5pbmRleE9mKCI+IikgIT0gLTEpKTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaGVhZGVyIG9mIGEgbWVzc2FnZS4KLSAgICogQHBhcmFtIHJlcXVlc3RPclJlc3BvbnNlOiBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBoZWFkZXJMZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciBpbiB0aGUgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgaGVhZGVyIG9mIGEgbWVzc2FnZS4KLSAgICovIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihieXRlW10gcmVxdWVzdE9yUmVzcG9uc2UsICBpbnQgaGVhZGVyTGVuZ3RoKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYgKChyZXF1ZXN0T3JSZXNwb25zZSAhPSBudWxsKSAmJiAKLSAgICAgICAgKGhlYWRlckxlbmd0aCA+IDApICYmIAotICAgICAgICAocmVxdWVzdE9yUmVzcG9uc2UubGVuZ3RoID49IGhlYWRlckxlbmd0aCkpCi0gICAgewotICAgICAgYnl0ZVtdIGhlYWRlciA9IG5ldyBieXRlW2hlYWRlckxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHJlcXVlc3RPclJlc3BvbnNlLCAwLCBoZWFkZXIsIDAsIGhlYWRlckxlbmd0aCk7Ci0gICAgICByZXN1bHQgPSBuZXcgU3RyaW5nKGhlYWRlcik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgYm9keSBvZiBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSByZXF1ZXN0T3JSZXNwb25zZTogYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gaGVhZGVyTGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBoZWFkZXIgaW4gdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlLgotICAgKi8gCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0Qm9keShieXRlW10gcmVxdWVzdE9yUmVzcG9uc2UsICBpbnQgaGVhZGVyTGVuZ3RoKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYgKChyZXF1ZXN0T3JSZXNwb25zZSAhPSBudWxsKSAmJiAKLSAgICAgICAgKGhlYWRlckxlbmd0aCA+IDApICYmIAotICAgICAgICAocmVxdWVzdE9yUmVzcG9uc2UubGVuZ3RoID4gaGVhZGVyTGVuZ3RoKSkKLSAgICB7Ci0gICAgICBpbnQgYm9keUxlbmd0aCA9IHJlcXVlc3RPclJlc3BvbnNlLmxlbmd0aCAtIGhlYWRlckxlbmd0aDsKLSAgICAgIGJ5dGVbXSBib2R5ID0gbmV3IGJ5dGVbYm9keUxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHJlcXVlc3RPclJlc3BvbnNlLCBoZWFkZXJMZW5ndGgsIGJvZHksIDAsIGJvZHlMZW5ndGgpOwotICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZyhib2R5KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgICAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBsb2cgZW50cnkuCi0gICAqIEBwYXJhbSBpZDogdW5pcXVlIG1lc3NhZ2UgaWQgd2l0aGluIHRoZSBsb2cuCi0gICAqIEBwYXJhbSBjb252ZXJzYXRpb25JZDogY29udmVyc2F0aW9uIGlkIHRvIGlkZW50aWZ5IHJlcXVlc3QtcmVzcG9uc2UgcGFpcnMuCi0gICAqIEBwYXJhbSB0eXBlOiB0eXBlIGluZGljYXRpbmcgYSByZXF1ZXN0IG9yIHJlc3BvbnNlLgotICAgKiBAcGFyYW0gdGltZXN0YW1wOiB0aGUgZGF0ZSBhbmQgdGltZSBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHNlbmRlckhvc3RBbmRQb3J0OiB0aGUgaG9zdCBhbmQgcG9ydCBvZiB0aGUgc2VuZGVyLgotICAgKiBAcGFyYW0gcmVjZWl2ZXJIb3N0QW5kUG9ydDogdGhlIGhvc3QgYW5kIHBvcnQgb2YgdGhlIHJlY2VpdmVyLgotICAgKiBAcGFyYW0gbWVzc2FnZUNvbnRlbnQ6IHRoZSBjb250ZW50IG9yIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBoZWFkZXI6IHRoZSBoZWFkZXIgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gYSBsb2cgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IGNyZWF0ZU1lc3NhZ2VFbnRyeShpbnQgaWQsIGludCBjb252ZXJzYXRpb25JZCwgU3RyaW5nIHR5cGUsIGxvbmcgdGltZXN0YW1wLCAKLSAgICAgICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LCBTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCwgYnl0ZVtdIG1lc3NhZ2VDb250ZW50LCBTdHJpbmcgaGVhZGVyKSAKLSAgewotIAkvLyBDcmVhdGUgbG9nIGVudHJ5Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldElkKFN0cmluZy52YWx1ZU9mKGlkKSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldENvbnZlcnNhdGlvbklkKFN0cmluZy52YWx1ZU9mKGNvbnZlcnNhdGlvbklkKSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFR5cGUodHlwZSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcChnZXRUaW1lc3RhbXAobmV3IERhdGUodGltZXN0YW1wKSkpOwotICAgIG1lc3NhZ2VFbnRyeS5zZXRTZW5kZXJIb3N0QW5kUG9ydChzZW5kZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFJlY2VpdmVySG9zdEFuZFBvcnQocmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKFdTSUNvbnN0YW50cy5ERUZBVUxUX1hNTF9FTkNPRElORyk7Ci0gICAgCi0gICAgbWVzc2FnZUVudHJ5LnNldEhUVFBIZWFkZXJzKGhlYWRlcik7Ci0KLSAgICBpZiAoVXRpbHMuaXNNdWx0aXBhcnRSZWxhdGVkTWVzc2FnZShoZWFkZXIpKQotICAgIHsKLSAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IFV0aWxzLnBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UobWVzc2FnZUNvbnRlbnQsIGhlYWRlciwgV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HKTsKLSAgICAJaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgIAl7Ci0gICAgCSAgLy8gcHJvYmxlbSBjcmVhdGluZyBNaW1lcGFydHMgLS0gdHJlYXQgaXQgYXMgc2ltcGxlIFNPQVAgbWVzc2FnZQotICAgIAkgIGlmIChtZXNzYWdlQ29udGVudCAhPSBudWxsKQotICAgIAkgIHsKLSAgICAJICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKG5ldyBTdHJpbmcobWVzc2FnZUNvbnRlbnQpKTsKLSAgICAJICB9Ci0gICAgCSAgZWxzZQotICAgIAkgIHsKLSAgICAJICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKCIiKTsKLSAgICAJICB9Ci0gICAgCSAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KGZhbHNlKTsKLSAgICAJfQotICAgIAllbHNlCi0gICAgCXsKLSAgICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWltZVBhcnRzKG1pbWVQYXJ0cyk7Ci0gICAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KHRydWUpOwotICAgIAl9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIG1lc3NhZ2UgY29udGVudAotICAgICAgaWYgKG1lc3NhZ2VDb250ZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKG5ldyBTdHJpbmcobWVzc2FnZUNvbnRlbnQpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UoIiIpOwotICAgICAgfQotICAgICAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KGZhbHNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBpZCwgdGhlbiBpbmNyZW1lbnRzIHRoZSBpZCB2YWx1ZS4KLSAgICogQHJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgaWQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGdldE5leHRBdmFpbGFibGVJZCgpCi0gIHsKLSAgICByZXR1cm4gaWQrKzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBjb252ZXJzYXRpb24gaWQsIHRoZW4gaW5jcmVtZW50cyB0aGUgY29udmVyc2F0aW9uIGlkIHZhbHVlLgotICAgKiBBIGNvbnZlcnNhdGlvbiBpZCBpZGVudGZpZXMgYSByZXF1ZXN0IGFuZCBpdHMgY29ycmVzcG9uZGluZyByZXNwb25zZS4KLSAgICogQHJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgY29udmVyYXNhdGlvbmlkLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBnZXROZXh0QXZhaWxhYmxlQ29udmVyc2F0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnZlcnNhdGlvbklkKys7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEhlYWRlckxlbmd0aChJbnRlZ2VyIG9iaikKLSAgewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGlmIChvYmogIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBvYmouaW50VmFsdWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSBsb2cgb3V0IHRvIGZpbGUuCi0gICAqIEBwYXJhbSBsb2c6IGxvZyB0byBiZSB3cml0dGVuIHRvIGZpbGUuCi0gICAqLwotCi0gIHB1YmxpYyB2b2lkIHdyaXRlTG9nKExvZyBsb2cpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgbG9nIHdyaXRlcgotICAgICAgTG9nV3JpdGVyIGxvZ1dyaXRlciA9IG5ldyBMb2dXcml0ZXJJbXBsKCk7Ci0gICAgCi0gICAgICBsb2dXcml0ZXIuc2V0V3JpdGVyKGlmaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7Ci0gICAgICAKLSAgICAgIC8vIFdyaXRlIHN0YXJ0IG9mIGxvZyBmaWxlCi0gICAgICBsb2dXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihsb2cuZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKSk7Ci0gICAgCi0gICAgICAvLyBXcml0ZSBtb25pdG9yIHRvb2wgaW5mb3JtYXRpb24KLSAgICAgIFN0cmluZyBtb25pdG9ySW5mbyA9IGdlbmVyYXRlTW9uaXRvclRvb2xJbmZvKCk7Ci0gICAgICBsb2dXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihtb25pdG9ySW5mbykpOwotCi0gICAgICBmb3IgKGludCBpPTA7IGk8bG9nLmdldEVudHJ5Q291bnQoKTsgaSsrKQotICAgICAgewotICAgICAgICBNZXNzYWdlRW50cnkgbWUgPSBsb2cuZ2V0TG9nRW50cnkoaSk7Ci0gICAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKG1lLnRvWE1MU3RyaW5nKCIiKSkpOwotICAgICAgfQotICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldEVuZFhNTFN0cmluZygiIikpKTsKLSAgICAgIGxvZ1dyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gdGhyb3duIHdoZW4gcHJpbnRpbmcgbG9nIGZpbGUuIik7Ci0gICAgfQotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNb25pdG9yIHRvb2wuCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTW9uaXRvciB0b29sLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBnZW5lcmF0ZU1vbml0b3JUb29sSW5mbygpCi0gIHsKLQotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7IAotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVG9vbCBpbmZvcm1hdGlvbgotICAgICAgVG9vbEluZm8gdG9vbEluZm8gPSBuZXcgVG9vbEluZm8oVE9PTF9OQU1FLCBUT09MX1ZFUlNJT04sIFRPT0xfUkVMRUFTRV9EQVRFLCBUT09MX0lNUExFTUVOVEVSLCBUT09MX0xPQ0FUSU9OKTsKLQotICAgICAgRG9jdW1lbnRGYWN0b3J5IGRvY3VtZW50RmFjdG9yeSA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgTW9uaXRvckNvbmZpZyBtb25pdG9yQ29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld01vbml0b3JDb25maWcoKTsKLSAgICAKLSAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgY29tbWVudC5zZXRUZXh0KCJDb21tZW50Iik7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldENvbW1lbnQoY29tbWVudCk7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldExvZ0xvY2F0aW9uKCJVUkwiKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0UmVwbGFjZUxvZyh0cnVlKTsKLQotICAgICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0ID0gbmV3IEFkZFN0eWxlU2hlZXRJbXBsKCk7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkU3R5bGVTaGVldCk7Ci0KLSAgICAgIG1vbml0b3JDb25maWcuc2V0TG9nRHVyYXRpb24oNjAwKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0VGltZW91dCgzKTsKLSAgICAgCi0gICAgICBNYW5JblRoZU1pZGRsZSBtYW5JblRoZU1pZGRsZSA9IG5ldyBNYW5JblRoZU1pZGRsZUltcGwoKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0TWFuSW5UaGVNaWRkbGUobWFuSW5UaGVNaWRkbGUpOwotCi0gICAgICBtb25pdG9yQ29uZmlnLnNldExvY2F0aW9uKCJkb2N1bWVudFVSSSIpOwotICAgICAgbW9uaXRvckNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKGZhbHNlKTsKLQotICAgICAgLy8gU3RhcnQgICAgIAotICAgICAgcHcucHJpbnQodG9vbEluZm8uZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKTsKLSAgICAKLSAgICAgIC8vIENvbmZpZwotICAgICAgcHcucHJpbnQobW9uaXRvckNvbmZpZy50b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTU9OSVRPUl9DT05GSUcpKTsKLQotICAgICAgLy8gRW5kCi0gICAgICBwdy5wcmludGxuKHRvb2xJbmZvLmdldEVuZFhNTFN0cmluZygiIikpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGdpdmVuIGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSBkYXRlOiBhIGRhdGUgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBnaXZlbiBkYXRlIGFuZCB0aW1lIGFzIGEgdGltZXN0YW1wLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKERhdGUgZGF0ZSkKLSAgewotICAgIHRpbWVzdGFtcEZvcm1hdC5zZXRUaW1lWm9uZShUaW1lWm9uZS5nZXREZWZhdWx0KCkpOwotICAgIHJldHVybiB0aW1lc3RhbXBGb3JtYXQuZm9ybWF0KGRhdGUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nUmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nUmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNjAxMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZ1JlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gcmVhZCB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nUmVhZGVyIGV4dGVuZHMgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIFN0YXJ0IHJlYWRpbmcgbG9nIGVudHJpZXMgZnJvbSBhIHNwZWNpZmllZCBVUkkgbG9jYXRpb24gdXNpbmcgdGhlIHNwZWNpZmllZCBjYWxsYmFjay4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dVUkkgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGxvZ0VudHJ5SGFuZGxlciB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBwcm9jZXNzIGVhY2ggbG9nIGVudHJ5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIHJlYWRpbmcgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZExvZyhTdHJpbmcgbG9nVVJJLCBNZXNzYWdlRW50cnlIYW5kbGVyIGxvZ0VudHJ5SGFuZGxlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBTdGFydCByZWFkaW5nIGxvZyBlbnRyaWVzIGZyb20gYSByZWFkZXIgdXNpbmcgdGhlIHNwZWNpZmllZCBjYWxsYmFjay4KLSAgICogCi0gICAqIEBwYXJhbSByZWFkZXIgdGhlIHNvdXJjZSBmb3IgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gbG9nRW50cnlIYW5kbGVyIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIHByb2Nlc3MgZWFjaCBsb2cgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gcmVhZGluZyBsb2cuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFJlYWRlciByZWFkZXIsIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nRW50cnlIYW5kbGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLy8gQUREOiBEbyB3ZSBuZWVkIHRvIGFkZCBmdW5jdGlvbnMgdGhhdCB3aWxsIHJlYWQgdGhlIGVudGlyZSBsb2cgZmlsZT8KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlMzNlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nV3JpdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFdyaXRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byB3cml0ZSB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nV3JpdGVyIGV4dGVuZHMgRG9jdW1lbnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50IHVzaW5nIHRoZSBsb2NhdGlvbgotICAgKiB0aGF0IHdhcyBwcmV2aW91c2x5IHNldCB1c2luZyB0aGUgc2V0TG9jYXRpb24gbWV0aG9kLgotICAgKiBAcGFyYW0gbG9nIHRoZSBMb2cgb2JqZWN0LgotICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGlzIG9wZXJhdGlvbiBoYXMgYmVlbiBpbnZva2VkIAotICAgKiAgICAgICAgIGF0IGFuIGlsbGVnYWwgb3IgaW5hcHByb3ByaWF0ZSB0aW1lCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyB0aGUgd3JpdGluZyBvZiAKLSAgICogICAgICAgICB0aGUgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoTG9nIGxvZykgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiwgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudC4KLSAgICogQHBhcmFtIGxvZyB0aGUgTG9nIG9iamVjdC4KLSAgICogQHBhcmFtIHdyaXRlciBhIFdyaXRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyB0aGUgd3JpdGluZyBvZiAKLSAgICogICAgICAgICB0aGUgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoTG9nIGxvZywgV3JpdGVyIHdyaXRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1OGZmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSogTWVzc2FnZSBlbnRyeSBpbnRlcmZhY2UuCi0qCi0qIEB2ZXJzaW9uIDEuMC4xCi0qIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUVudHJ5IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gLyoqCi0gICogRWxlbWVudCBuYW1lLgotICAqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfRU5UUlk7Ci0KLSAvKioKLSAgKiBRTmFtZS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9MT0csIEVMRU1fTkFNRSk7Ci0KLSAvKioKLSAgKiBUeXBlIG9mIGxvZyBlbnRyeS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX1JFUVVFU1QgPSAicmVxdWVzdCI7Ci0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9SRVNQT05TRSA9ICJyZXNwb25zZSI7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBpZC4KLSAgKiBAcmV0dXJuIHRoZSBpZC4KLSAgKiBAc2VlICNzZXRJZAotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIGlkLgotICAqIEBwYXJhbSBpZCB0aGUgaWRlbnRpZmllciBmb3IgdGhlIGxvZyBlbnRyeS4KLSAgKiBAc2VlICNnZXRJZAotICAqLwotIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICogQHJldHVybiB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBzZWUgI3NldENvbnZlcnNhdGlvbklkCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRDb252ZXJzYXRpb25JZCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBwYXJhbSBjb252ZXJzYXRpb25JZCB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBzZWUgI2dldENvbnZlcnNhdGlvbklkCi0gICovCi0gcHVibGljIHZvaWQgc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nIGNvbnZlcnNhdGlvbklkKTsKLQotIC8qKgotICAqIEdldHMgdGhlIHRpbWVzdGFtcC4KLSAgKiBAcmV0dXJuIHRoZSB0aW1lc3RhbXAuCi0gICogQHNlZSAjc2V0VGltZXN0YW1wCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRUaW1lc3RhbXAoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIHRpbWVzdGFtcC4KLSAgKiBAcGFyYW0gdGltZXN0YW1wIHRoZSB0aW1lc3RhbXAuCi0gICogQHNlZSAjZ2V0VGltZXN0YW1wCi0gICovCi0gcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApOwotCi0gLyoqCi0gICogR2V0cyB0aGUgdHlwZS4KLSAgKiBAcmV0dXJuIHRoZSB0eXBlLgotICAqIEBzZWUgI3NldFR5cGUKLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIHR5cGUuCi0gICogQHBhcmFtIHR5cGUgdGhlIHR5cGUuCi0gICogQHNlZSAjZ2V0VHlwZQotICAqLwotIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gLyoqCi0gICogR2V0cyB0aGUgc2VuZGVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHJldHVybiAgdGhlIHNlbmRlciBob3N0IGFuZCBwb3J0LgotICAqIEBzZWUgI3NldFNlbmRlckhvc3RBbmRQb3J0Ci0gICovCi0gcHVibGljIFN0cmluZyBnZXRTZW5kZXJIb3N0QW5kUG9ydCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgc2VuZGVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHBhcmFtIHNlbmRlckhvc3RBbmRQb3J0IHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAc2VlICNnZXRTZW5kZXJIb3N0QW5kUG9ydAotICAqLwotIHB1YmxpYyB2b2lkIHNldFNlbmRlckhvc3RBbmRQb3J0KFN0cmluZyBzZW5kZXJIb3N0QW5kUG9ydCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSByZWNlaXZlciBob3N0IGFuZCBwb3J0LgotICAqIEByZXR1cm4gdGhlIHJlY2VpdmVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHNlZSAjc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydAotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgcmVjZWl2ZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAcGFyYW0gcmVjZWl2ZXJIb3N0QW5kUG9ydCB0aGUgcmVjZWl2ZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAc2VlICNnZXRSZWNlaXZlckhvc3RBbmRQb3J0Ci0gICovCi0gcHVibGljIHZvaWQgc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBtZXNzYWdlLgotICAqIEByZXR1cm4gdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjc2V0TWVzc2FnZQotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgbWVzc2FnZS4KLSAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZS4KLSAgKiBAc2VlICNnZXRNZXNzYWdlCi0gICovCi0gcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBlbmNvZGluZy4KLSAgKiBAcGFyYW0gZW5jb2RpbmcgdGhlIGVuY29kaW5nLgotICAqIEBzZWUgI2dldE1lc3NhZ2UKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgZW5jb2RpbmcpOwotCi0gLyoqCi0gICogR2V0cyB0aGUgQk9NLgotICAqIEByZXR1cm4gdGhlIEJPTS4KLSAgKiBAc2VlICNzZXRCT00KLSAgKi8KLSBwdWJsaWMgaW50IGdldEJPTSgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgQk9NLgotICAqIEBwYXJhbSBib20gdGhlIEJPTS4KLSAgKiBAc2VlICNnZXRCT00KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRCT00oaW50IGJvbSk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBIVFRQIGhlYWRlcnMuCi0gICogQHJldHVybiB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBzZWUgI3NldEhUVFBIZWFkZXJzCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRIVFRQSGVhZGVycygpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBwYXJhbSBodHRwSGVhZGVycyB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBzZWUgI2dldEhUVFBIZWFkZXJzCi0gICovCi0gcHVibGljIHZvaWQgc2V0SFRUUEhlYWRlcnMoU3RyaW5nIGh0dHBIZWFkZXJzKTsKLQotIC8qKgotICAqIEdldHMgZWxlbWVudCBsb2NhdGlvbi4KLSAgKiBAcmV0dXJuIGVsZW1lbnQgbG9jYXRpb24uCi0gICogQHNlZSAjc2V0RWxlbWVudExvY2F0aW9uCi0gICovCi0gcHVibGljIEVsZW1lbnRMb2NhdGlvbiBnZXRFbGVtZW50TG9jYXRpb24oKTsKLQotIC8qKgotICAqIFNldHMgZWxlbWVudCBsb2NhdGlvbi4KLSAgKiBAcGFyYW0gZWxlbWVudExvY2F0aW9uIGVsZW1lbnQgbG9jYXRpb24uCi0gICogQHNlZSAjZ2V0RWxlbWVudExvY2F0aW9uCi0gICovCi0gcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pOwotIAotIC8qKgotICAqIElmIGNvbnRlbnQgaXMgTUlNRSB0eXBlIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlICAKLSAgKiBAcmV0dXJuIGlmIGNvbnRlbnQgaXMgTUlNRSB0eXBlIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlCi0gICovCi0gcHVibGljIGJvb2xlYW4gaXNNaW1lQ29udGVudCgpOwotIAotIC8qKgotICAqIFNldCBmbGFnIHRvIGRldGVybWluZSBpZiBjb250ZW50IGlzIE1JTUUgdHlwZS4gCi0gICogQHBhcmFtIGlzTWltZUNvbnRlbnQgYSBib29vbGVhbiB2YWx1ZQotICAqLwotIHB1YmxpYyB2b2lkIHNldE1pbWVDb250ZW50KGJvb2xlYW4gaXNNaW1lQ29udGVudCk7Ci0KLSAvKioKLSAgKiBSZXR1cm5zIGFycmF5IG9mIHRoZSBNSU1FIHBhcnRzIG9mIHRoZSBtZXNzYWdlLgotICAqIEByZXR1cm4gYXJyYXkgb2YgdGhlIE1JTUUgcGFydHMgb2YgdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjaXNNSU1FQ29udGVudCgpIAotICAqLwotIHB1YmxpYyBNaW1lUGFydHMgZ2V0TWltZVBhcnRzKCk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgTUlNRSBwYXJ0cyBvZiB0aGUgbWVzc2FnZS4KLSAgKiBAcGFyYW0gbWltZVBhcnRzIGhlIE1JTUUgcGFydHMgb2YgdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjZ2V0TWltZVBhcnRzCi0gICovCi0gcHVibGljIHZvaWQgc2V0TWltZVBhcnRzKE1pbWVQYXJ0cyBtaW1lUGFydHMpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5SGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01lc3NhZ2VFbnRyeUhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQwMWUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlOwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSBmb3IgdGhlIE1lc3NhZ2VFbnRyeSBoYW5kbGVyLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsIChndHVycmVsbEB1ay5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VFbnRyeUhhbmRsZXIKLXsKLSAgLyoqCi0gICAqIFByb2Nlc3MgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciB3aGlsZSBwcm9jZXNzaW5nIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByb2Nlc3NBcnRpZmFjdFJlZmVyZW5jZShBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBQcm9jZXNzIGEgc2luZ2xlIGxvZyBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhIHNpbmdsZSBsb2cgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHByb2Nlc3NpbmcgYSBzaW5nbGUgbG9nIGVudHJ5LgotICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHByb2Nlc3NMb2dFbnRyeShFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01pbWVQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0NmRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIEBhdXRob3IgbGF1em9uZAotICogCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0byBXaW5kb3cgLQotICogUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWltZVBhcnQgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQgewotCi0JLyoqCi0JICogR2V0cyB0aGUgY29udGVudCBmb3IgdGhlIG1pbWUgcGFydC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtaW1lIGNvbnRlbnQuCi0JICogQHNlZSAjc2V0Q29udGVudAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgY29udGVudCBmb3IgdGhlIG1pbWUgcGFydC4KLQkgKiAKLQkgKiBAcGFyYW0gbWltZUNvbnRlbnQKLQkgKiAgICAgICAgICAgIHRoZSBtaW1lIGNvbnRlbnQuCi0JICogQHNlZSAjZ2V0Q29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIG1pbWVDb250ZW50KTsKLQotCS8qKgotCSAqIEdldHMgdGhlIGhlYWRlcnMgZm9yIHRoZSBtaW1lIHBhcnQuCi0JICogCi0JICogQHJldHVybiB0aGUgbWltZSBoZWFkZXJzLgotCSAqIEBzZWUgI3NldE1pbWVIZWFkZXJzCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRIZWFkZXJzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBoZWFkZXJzIGZvciB0aGUgbWltZSBwYXJ0LgotCSAqIAotCSAqIEBwYXJhbSBtaW1lSGVhZGVycwotCSAqICAgICAgICAgICAgdGhlIG1pbWUgaGVhZGVycy4KLQkgKiBAc2VlICNnZXRIZWFkZXJzCi0JICovCi0JcHVibGljIHZvaWQgc2V0SGVhZGVycyhTdHJpbmcgbWltZUhlYWRlcnMpOwotCi0JLyoqCi0JICogR2V0cyB0aGUgYm91bmRhcnkgc3RyaW5ncyBmb3IgdGhlIG1pbWUgcGFydC4gTm90ZSB0aGF0IHRoZSBsYXN0IHBhcnQgb2YgYQotCSAqIG11bHRpcGFydC8gcmVsYXRlZCBtZXNzYWdlIHdpbGwgaGF2ZSAyIGJvdW5kYXJ5IHN0cmluZ3MuIEFsbCBvdGhlciBwYXJ0cwotCSAqIHdpbGwgaGF2ZSBvbmUuCi0JICogCi0JICogQHJldHVybiB0aGUgYm91bmRhcnkgc3RyaW5ncy4KLQkgKiBAc2VlICNzZXRCb3VuZGFyeVN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0Qm91bmRhcnlTdHJpbmdzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBib3VuZGFyeSBzdHJpbmdzIGZvciB0aGUgbWltZSBwYXJ0LiBOb3RlIHRoYXQgdGhlIGxhc3QgcGFydCBvZiBhCi0JICogbXVsdGlwYXJ0LyByZWxhdGVkIG1lc3NhZ2Ugd2lsbCBoYXZlIDIgYm91bmRhcnkgc3RyaW5ncy4gQWxsIG90aGVyIHBhcnRzCi0JICogd2lsbCBoYXZlIG9uZS4KLQkgKiAKLQkgKiBAcGFyYW0gYm91bmRhcnlTdHJpbmdzCi0JICogICAgICAgICAgICB0aGUgYm91bmRhcnkgc3RyaW5ncy4KLQkgKiBAc2VlICNnZXRCb3VuZGFyeVN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCb3VuZGFyeVN0cmluZ3MoU3RyaW5nW10gbWltZUhlYWRlcnMpOwotCi0JcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZTNmMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01pbWVQYXJ0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi0vKioKLSAqIE1pbWUgcGFydHMgaW50ZXJmYWNlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiAobGF1em9uZEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1pbWVQYXJ0cwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RhcnQgYXR0cmlidXRlIHZhbHVlIGZyb20gdGhlIC4KLSAgICogQHJldHVybiB0aGUgaGUgc3RhcnQgYXR0cmlidXRlIHZhbHVlLgotICAgKiBAc2VlICNzZXRSb290UGFydAotICAgKi8KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJvb3QgcGFydCwgb3RoZXJ3aXNlIG51bGwuCi0gICAqIEByZXR1cm4gdGhlIHJvb3QgcGFydC4KLSAgICogQHNlZSAjc2V0Um9vdFBhcnQKLSAgICovCi0gIHB1YmxpYyBNaW1lUGFydCBnZXRSb290UGFydCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSByb290IHBhcnQuCi0gICAqIEBwYXJhbSByb290UGFydCB0aGUgcm9vdCBwYXJ0LgotICAgKiBAc2VlICNnZXRSb290UGFydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Um9vdFBhcnQoTWltZVBhcnQgcm9vdFBhcnQpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFydHMuCi0gICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwYXJ0cy4KLSAgICovCi0gIHB1YmxpYyBpbnQgY291bnQoKTsKLQotICAvKioKLSAgICogR2V0cyB0aGUgY29udmVyc2F0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICAqIEBzZWUgI3NldENvbnZlcnNhdGlvbklkCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJ0KE1pbWVQYXJ0IHBhcnQpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBtaW1lIHBhcnRzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBtaW1lIHBhcnRzLgotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0UGFydHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9SZXF1ZXN0SGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL1JlcXVlc3RIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOTJkZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL1JlcXVlc3RIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBUQ1AvSVAgcmVxdWVzdCBtYWRlIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci4KLSAqIEVhY2ggcmVxdWVzdCByZXByZXNlbnRzIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLCB3aGVyZSB0aGUgcmVxdWVzdAotICogaXMgZnJvbSBjbGllbnQgLT4gc2VydmVyLCBhbmQgdGhlIHJlc3BvbnNlIGlzIGZyb20gc2VydmVyIC0+IGNsaWVudC4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLQotcHVibGljIGludGVyZmFjZSBSZXF1ZXN0SGFuZGxlciAKLXsKLQkvKioKLQkgKiBSZXR1cm5zIGp1c3QgdGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEByZXR1cm4gdGhlIGNvbnRlbnQgYnl0ZXMKLQkgKi8KLQlieXRlW10gZ2V0UmVxdWVzdEhlYWRlcigpOwotCi0JLyoqCi0JICogQWRkIHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVxdWVzdCBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcGFyYW0gcmVxdWVzdEhlYWRlciBieXRlW10KLQkgKi8KLQl2b2lkIHNldFJlcXVlc3RIZWFkZXIoYnl0ZVtdIHJlcXVlc3RIZWFkZXIpOwotCi0JLyoqCi0JICogUmV0dXJucyBqdXN0IHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHJldHVybiB0aGUgY29udGVudCBieXRlcwotCSAqLwotCWJ5dGVbXSBnZXRSZXNwb25zZUhlYWRlcigpOwotCi0JLyoqCi0JICogQWRkIHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHBhcmFtIHJlc3BvbnNlSGVhZGVyIGJ5dGVbXQotCSAqLwotCXZvaWQgc2V0UmVzcG9uc2VIZWFkZXIoYnl0ZVtdIHJlc3BvbnNlSGVhZGVyKTsKLQotCS8qKgotCSAqIFJldHVybnMganVzdCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEByZXR1cm4gdGhlIGNvbnRlbnQgYnl0ZXMKLQkgKi8KLQlieXRlW10gZ2V0UmVxdWVzdENvbnRlbnQoKTsKLQotCS8qKgotCSAqIEFkZCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEBwYXJhbSByZXF1ZXN0Q29udGVudCBieXRlW10KLQkgKi8KLQl2b2lkIHNldFJlcXVlc3RDb250ZW50KGJ5dGVbXSByZXF1ZXN0Q29udGVudCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGp1c3QgdGhlIEhUVFAgYm9keSBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHJldHVybiB0aGUgY29udGVudCBieXRlcwotCSAqLwotCWJ5dGVbXSBnZXRSZXNwb25zZUNvbnRlbnQoKTsKLQotCS8qKgotCSAqIEFkZCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcGFyYW0gcmVzcG9uc2VDb250ZW50IGJ5dGVbXQotCSAqLwotCXZvaWQgc2V0UmVzcG9uc2VDb250ZW50KGJ5dGVbXSByZXNwb25zZUNvbnRlbnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdGltZSB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUuCi0JICogQHJldHVybiB0aGUgdGltZXN0YW1wCi0JICovCi0JRGF0ZSBnZXREYXRlKCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIHRpbWUgdGhpcyByZXF1ZXN0IHdhcyBtYWRlLgotCSAqIEBwYXJhbSBkYXRlIHRoZSB0aW1lCi0JICovCi0gICAgdm9pZCBzZXREYXRlKERhdGUgZGF0ZSk7Ci0KLSAgICAvKioKLQkgKiBSZXR1cm5zIHRoZSBsb2NhbCAoY2xpZW50KSBwb3J0LgotCSAqIEByZXR1cm4gdGhlIGxvY2FsIHBvcnQgbnVtYmVyCi0JICovCi0JaW50IGdldExvY2FsUG9ydCgpOwotCi0JLyoqCi0JICogQWRkIHRoZSBsb2NhbCAoY2xpZW50KSBwb3J0LgotCSAqIEBwYXJhbSBsb2NhbFBvcnQgdGhlIGxvY2FsIHBvcnQKLQkgKi8KLQl2b2lkIHNldExvY2FsUG9ydChpbnQgbG9jYWxQb3J0KTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlbW90ZSAoc2VydmVyKSBwb3J0LgotCSAqIEByZXR1cm4gdGhlIHJlbW90ZSBwb3J0IG51bWJlcgotCSAqLwotCWludCBnZXRSZW1vdGVQb3J0KCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIHRoZSByZW1vdGUgKHNlcnZlcikgcG9ydC4KLQkgKiBAcGFyYW0gcmVtb3RlUG9ydCB0aGUgcmVtb3RlIHBvcnQKLQkgKi8KLQl2b2lkIHNldFJlbW90ZVBvcnQoaW50IHJlbW90ZVBvcnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVtb3RlIChzZXJ2ZXIpIGhvc3QuCi0gICAgICogQHJldHVybiB0aGUgcmVtb3RlIGhvc3QKLQkgKi8KLQlTdHJpbmcgZ2V0UmVtb3RlSG9zdCgpOwotCi0JLyoqCi0JICogQWRkIHRoZSByZW1vdGUgKHNlcnZlcikgaG9zdC4KLQkgKiBAcGFyYW0gcmVtb3RlSG9zdCB0aGUgcmVtb3RlIGhvc3QKLQkgKi8KLQl2b2lkIHNldFJlbW90ZUhvc3QoU3RyaW5nIHJlbW90ZUhvc3QpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgdGltZSBpbiBtaWxsaXNlY29uZHMuIAotCSAqIEByZXR1cm4gdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRpbWUKLQkgKi8KLQlsb25nIGdldFJlc3BvbnNlVGltZSgpOwotCi0JLyoqCi0JICogQWRkIHRoZSB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgdGltZSBpbiBtaWxsaXNlY29uZHMuIAotCSAqIEBwYXJhbSByZXNwb25zZVRpbWUgdGhlIHJlc3BvbnNlIHRpbWUKLQkgKi8KLQl2b2lkIHNldFJlc3BvbnNlVGltZShsb25nIHJlc3BvbnNlVGltZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZDc4YWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UZXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBtZXNzYWdlIGxvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dJbXBsIGltcGxlbWVudHMgTG9nCi17Ci0gIC8qKgotICAgKiBMb2cgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dVUkkgPSBudWxsOwotCi0gIC8qKgotICAgKiBTdGFydCB0aW1lIHN0YW1wLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBzdGFydFRpbWVzdGFtcCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyBlbnRyaWVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBsb2dFbnRyeUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyoqCi0gICAqIExhc3QgbG9nIGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeSBsYXN0TG9nRW50cnkgPSBudWxsOwotCi0gIC8qKgotICAgKiBMb2cgdGl0bGUuCi0gICAqLwotICAvLyBBREQ6IFNob3VsZCB3ZSBwcm92aWRlIGEgd2F5IHRvIHNldCB0aGUgbG9nIHRpdGxlPwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvZ1RpdGxlID0gIk1lc3NhZ2UgTG9nIEZpbGUiOwotCi0gIC8qKgotICAgKiBTdHlsZSBzaGVldCBzdHJpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHN0eWxlU2hlZXRTdHJpbmcgPSBudWxsOwotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nI2FkZExvZ0VudHJ5KExvZ0VudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTG9nRW50cnkoTWVzc2FnZUVudHJ5IGxvZ0VudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBTYXZlIGxhc3QgbG9nIGVudHJ5Ci0gICAgbGFzdExvZ0VudHJ5ID0gbG9nRW50cnk7Ci0KLSAgICAvLyBBZGQgbG9nIGVudHJ5Ci0gICAgbG9nRW50cnlMaXN0LmFkZChsb2dFbnRyeSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZyNnZXRFbnRyeUNvdW50KCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RW50cnlDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gbG9nRW50cnlMaXN0LnNpemUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nI2dldExvZ0VudHJ5KGludCkKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgZ2V0TG9nRW50cnkoaW50IGluZGV4KQotICB7Ci0gICAgcmV0dXJuIChNZXNzYWdlRW50cnkpIGxvZ0VudHJ5TGlzdC5lbGVtZW50QXQoaW5kZXgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2cjZ2V0TG9nRW50cnlMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0TG9nRW50cnlMaXN0KCkKLSAgewotICAgIHJldHVybiBsb2dFbnRyeUxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGxhc3QgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRMYXN0TG9nRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIGxhc3RMb2dFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIGVudHJ5IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgY3JlYXRlTG9nRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2dVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKQotICB7Ci0gICAgdGhpcy5sb2dVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc3R5bGUgc2hlZXQgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3R5bGVTaGVldFN0cmluZyhTdHJpbmcgc3R5bGVTaGVldFN0cmluZykKLSAgewotICAgIHRoaXMuc3R5bGVTaGVldFN0cmluZyA9IHN0eWxlU2hlZXRTdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSByZXBvcnQgZWxlbWVudCAKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5YTUxfREVDTCk7Ci0gICAgaWYgKHRoaXMuc3R5bGVTaGVldFN0cmluZyAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbih0aGlzLnN0eWxlU2hlZXRTdHJpbmcpOwotCi0gICAgLy8gQWRkIFhNTCBjb21tZW50Ci0gICAgU3RyaW5nIGNvbW1lbnQ7Ci0gICAgaWYgKChjb21tZW50ID0gVGVzdFV0aWxzLmdldFhNTENvbW1lbnQoKSkgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KGNvbW1lbnQpOwotCi0gICAgLy8gTG9nCi0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgRUxFTV9OQU1FKTsKLQotICAgIC8vIFJFTU9WRUQ6IE5vIGxvbmdlciByZXF1aXJlZCBieSB0aGUgbW9uaXRvciBzcGVjCi0gICAgLy9wdy5wcmludCgiICIgKyBXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBsb2dUaXRsZSArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICIgKyBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIFV0aWxzLmdldFRpbWVzdGFtcCgpICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigiICAgIHhtbG5zPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0xPRyArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTU9OSVRPUl9DT05GSUcKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHCi0gICAgICAgICsgIlwiIik7Ci0gICAgLy9wdy5wcmludGxuKCIgICAgeG1sbnM6IiArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9DT01NT04gKyAiPVwiIiArIAotICAgIC8vICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQ09NTU9OICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgeG1sbnM6IgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19OQU1FX1hTSQotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0kKLSAgICAgICAgKyAiXCI+Iik7Ci0KLSAgICAvLyBBZGQgIG1vbml0b3IgdG9vbCBpbmZvCi0gICAgLy9wdy5wcmludGxuKG1vbml0b3IudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBlbmQgZWxlbWVudCBzdHJpbmcuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEVuZCBsb2cgZWxlbWVudCAKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gUmV0dXJuIFhNTCBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIC8vIEFERDoKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YWE3NjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbC5Db21tZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5NZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuQXJ0aWZhY3RSZWZlcmVuY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5FbnRyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHJlYWQgdGhlIExvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBOZWlsIERlbGltYSAobmRkZWxpbWFAY2EuaWJtLmNvbSkKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIExvZ1JlYWRlckltcGwgaW1wbGVtZW50cyBMb2dSZWFkZXIKLXsKLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZG9jdW1lbnRVUkk7Ci0KLSAgLyoqIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGltcGxlbWVudGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50IGFmdGVyIHRoZSBsb2cgZWxlbWVudCAqKi8KLSAgcHJpdmF0ZSBpbnQgZmlyc3RMb2dFbGVtZW50ID0gMDsKLSAgcHJpdmF0ZSBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgcHJpdmF0ZSBib29sZWFuIGJNb25pdG9yRmlyc3QgPSBmYWxzZTsKLQotICBwcml2YXRlIFdTSUV4Y2VwdGlvbiB3c2lFeGNlcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyI3JlYWRMb2coU3RyaW5nLCBMb2dFbnRyeUhhbmRsZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFN0cmluZyBsb2dVUkksIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nUmVhZGVyQ2FsbGJhY2spCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVhZCB0aGUgbG9nIGZpbGUgZW50cmllcwotICAgIHJlYWRMb2cobmV3IElucHV0U291cmNlKGxvZ1VSSSksIGxvZ1JlYWRlckNhbGxiYWNrKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyI3JlYWRMb2coUmVhZGVyLCBMb2dFbnRyeUhhbmRsZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFJlYWRlciByZWFkZXIsIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nUmVhZGVyQ2FsbGJhY2spCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVhZCB0aGUgbG9nIGZpbGUgZW50cmllcwotICAgIHJlYWRMb2cobmV3IElucHV0U291cmNlKHJlYWRlciksIGxvZ1JlYWRlckNhbGxiYWNrKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIGFuZCBwYXJzZSB0aGUgbG9nIGZpbGUuCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAgICAgICAgICBhbiBJbnB1dFNvdXJjZSBvYmplY3QKLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeUhhbmRsZXIgIGEgTWVzc2FnZUVudHJ5SGFuZGxlciBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYSBwcm9ibGVtIG9jY3VycyB3aGlsZSByZWFkaW5nIHRoZSBsb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRMb2coCi0gICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsCi0gICAgTWVzc2FnZUVudHJ5SGFuZGxlciBtZXNzYWdlRW50cnlIYW5kbGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgWE1MIHJlYWRlcgotICAgICAgWE1MUmVhZGVyIHhtbFJlYWRlciA9IFhNTFV0aWxzLmdldFhNTFJlYWRlcigpOwotCi0gICAgICAvKiogVE8gRE86ICBUaGUgTG9nRmlsZSBtdXN0IGJlIHZhbGlkIHdydCBpdHMgc2NoZW1hLiAgVGhlIHNjaGVtYUxvY2F0aW9uIHByb2JhYmx5Ci0gICAgICAgKiBuZWVkcyB0byBiZSBzZXQgaW4gc29tZSBwcm9wZXJ0aWVzIGZpbGUuCi0gICAgICAgKiBUaGVzZSB0d28gYXJlIHRvIHR1cm4gb24gdmFsaWRhdGlvbiAKLSAgICAgIHJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfVkFMSURBVElPTix0cnVlKTsKLSAgICAgICovCi0KLSAgICAgIC8vIFNldCB0aGUgY29udGVudCBoYW5kbGVyCi0gICAgICB4bWxSZWFkZXIuc2V0Q29udGVudEhhbmRsZXIobmV3IExvZ0ZpbGVIYW5kbGVyKG1lc3NhZ2VFbnRyeUhhbmRsZXIpKTsKLQotICAgICAgLy8gU3RhcnQgcGFyc2luZyB0aGUgZmlsZQotICAgICAgeG1sUmVhZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQotICAgICAgLy8gQUREOiBOZWVkIHRvIGZpbmQgYSB3YXkgdG8gZGV0ZXJtaW5lIHdoZW4gdGhpcyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biwgCi0gICAgICAvLyBzaW5jZSBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZSBhbGwgb2YgdGhlIHRlc3QgYXNzZXJ0aW9ucyBoYXZlIGJlZW4gcHJvY2Vzc2VkLgotICAgICAgLy8gQWxzbywgb25seSB0aGUgbGFzdCBleGNlcHRpb24gaXMgcHJvcG9nYXRlZCBiYWNrLiAgU2hvdWxkIGFsbCBvZiB0aGUgZXhjZXB0aW9ucwotICAgICAgLy8gYmUgY2FwdHVyZWQgYW5kIHByb3BvZ2F0ZWQgYmFjaz8KLSAgICAgIGlmICh3c2lFeGNlcHRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogRm9yIG5vdywgZG9uJ3QgdGhyb3cgdGhlIGV4Y2VwdGlvbgotICAgICAgICAvL3Rocm93IHdzaUV4Y2VwdGlvbjsKLSAgICAgIH0KLQotICAgICAgLy9SZXF1aXJlbWVudCwgdGhlIG1vbml0b3IgTVVTVCBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGxvZy4KLSAgICAgIC8vUGVyaGFwcyB3ZSBuZWVkIHRvIHByZXByb2Nlc3MgdGhlIGxvZyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjb25kaXRpb24gdG8gYmUgbWV0LgotICAgICAgaWYgKCFiTW9uaXRvckZpcnN0KQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJUaGUgRWxlbWVudCBcIiIKLSAgICAgICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUgotICAgICAgICAgICAgKyAiXCIgaXMgbm90IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgRWxlbWVudCBcImxvZ1wiIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgbWVzc2FnZSBsb2cgZmlsZS4iLAotICAgICAgICBlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNzZXRMb2NhdGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgZG9jdW1lbnRVUkkpCi0gIHsKLSAgICB0aGlzLmRvY3VtZW50VVJJID0gZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKioKLSAgKiBQcm9jZXNzIGFuZCBoYW5kbGVzIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGUgaW4gdGhlIGxvZyBmaWxlIGFuZCBpbnZva2VzCi0gICogbWVzc2FnZSB2YWxpZGF0aW9uIGFzc2VydGlvbnMgc2VyaWFsbHkgYXMgdGhlIGZpbGUgaXMgYmVpbmcgcHJvY2Vzc2VkLAotICAqIGlmIGEgbWVzc2FnZXZhbGlkYXRvciBleGlzdHMuCi0gICovCi0gIHByaXZhdGUgY2xhc3MgTG9nRmlsZUhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0KLSAgICAvKiogcHJpdmF0ZSBtZW1iZXJzIHRoYXQgcmVwcmVzZW50IGEgTWVzc2FnZUVudHJ5LiovCi0gICAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgY29udmVyc2F0aW9uSUQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgdHlwZTsKLSAgICBwcml2YXRlIFN0cmluZyB0aW1lc3RhbXA7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgc2VuZGVySG9zdEFuZFBvcnQgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIHJlY2VpdmVySG9zdEFuZFBvcnQgID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtZXNzYWdlQ29udGVudCAgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGh0dHBIZWFkZXJzICA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgYm91bmRhcnkgID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtaW1lSGVhZGVycyA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbWltZUNvbnRlbnQgPSBudWxsOwotICAgIHByaXZhdGUgTWltZVBhcnRzIG1pbWVQYXJ0cyA9IG51bGw7Ci0gICAgcHJpdmF0ZSBMaXN0IGJvdW5kYXJpZXMgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBpbnQgYm9tID0gMDsKLQotICAgIHByaXZhdGUgU3RyaW5nIGxvZ1RpbWVzdGFtcCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbW9uaXRvckNvbW1lbnQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlnbm9yZUNvbW1lbnQgPSBmYWxzZTsKLQotICAgIC8qKiBPdGhlciBwcml2YXRlIG1lbWJlcnMgKi8KLSAgICBwcml2YXRlIFN0cmluZyBjdXJyZW50RWxlbWVudDsKLQotICAgIHByaXZhdGUgRWxlbWVudExvY2F0aW9uIGVudHJ5RWxlbWVudExvY2F0aW9uID0gbnVsbDsKLQotICAgIHByaXZhdGUgVG9vbEluZm8gdG9vbEluZm8gPSBudWxsOwotCi0gICAgcHJpdmF0ZSBWZWN0b3IgbWVzc2FnZUVudHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIHByaXZhdGUgTWVzc2FnZUVudHJ5SGFuZGxlciBsb2dFbnRyeUhhbmRsZXIgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogTG9nIGZpbGUgaGFuZGxlci4gCi0gICAgICovCi0gICAgcHVibGljIExvZ0ZpbGVIYW5kbGVyKE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nRW50cnlIYW5kbGVyKQotICAgIHsKLSAgICAgIHRoaXMubG9nRW50cnlIYW5kbGVyID0gbG9nRW50cnlIYW5kbGVyOwotCi0gICAgICB0b29sSW5mbyA9IG5ldyBUb29sSW5mbygpOwotICAgICAgdG9vbEluZm8uc2V0VG9vbEVudmlyb25tZW50KG5ldyBUb29sRW52aXJvbm1lbnQoKSk7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIFN0YXJ0IGRvY3VtZW50LiAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydERvY3VtZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIFNldCBkb2N1bWVudCBsb2NhdG8uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRMb2NhdG9yKExvY2F0b3IgbG9jYXRvcikKLSAgICB7Ci0gICAgICB0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJsaW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLSAgICB9Ci0KLSAgICAvKiogCi0gICAgICogU3RhcnQgZWxlbWVudC4gCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KAotICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSwKLSAgICAgIFN0cmluZyBsb2NhbE5hbWUsCi0gICAgICBTdHJpbmcgcU5hbWUsCi0gICAgICBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigibG9jYWxOYW1lOiIgKyBsb2NhbE5hbWUgKyAiLCBsaW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLQotICAgICAgLy9SZXF1aXJlbWVudCwgdGhlIGltcGxlbWVudGVyIE1VU1QgYmUgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBsb2cgICAgICAgCi0gICAgICBpZiAoZWxlbWVudENvdW50ID09IDIpCi0gICAgICAgIGlmIChmaXJzdExvZ0VsZW1lbnQgPT0gMSkKLSAgICAgICAgICBiTW9uaXRvckZpcnN0ID0gdHJ1ZTsKLQotICAgICAgZWxlbWVudENvdW50Kys7Ci0KLSAgICAgIC8vIDxsb2c+Ci0gICAgICBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX0xPRykKLSAgICAgIHsKLSAgICAgICAgLy8gU2F2ZSB0aGUgdGltZXN0YW1wIHZhbHVlCi0gICAgICAgIHRoaXMubG9nVGltZXN0YW1wID0gYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVApOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLWNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHKQotICAgICAgICAgICYmIChuYW1lc3BhY2VVUkkgPT0gV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcpKQotICAgICAgewotICAgICAgICAvLyBTYXZlIGNvbW1lbnQgZWxlbWVudCBpZiBpdCBleGlzdHMKLSAgICAgICAgaWdub3JlQ29tbWVudCA9IGZhbHNlOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLWNvbmZpZzpjb21tZW50PgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkKLSAgICAgICAgICAmJiAobmFtZXNwYWNlVVJJID09IFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY29tbWVudCBlbGVtZW50IHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50LCB0aGVuIGdldCBpdHMgY29udGVudAotICAgICAgICBpZiAoIWlnbm9yZUNvbW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQ7Ci0gICAgICAgICAgbW9uaXRvckNvbW1lbnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gPHdzaS1jb25maWc6cmVkaXJlY3Q+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9SRURJUkVDVCkKLSAgICAgICAgICAmJiAobmFtZXNwYWNlVVJJID09IFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQWZ0ZXIgaGl0dGluZyB0aGUgZmlyc3QgcmVkaXJlY3Qgc3RhdGVtZW50LCBpZ25vcmUgYWxsIGNvbW1lbnQgZWxlbWVudHMKLSAgICAgICAgaWdub3JlQ29tbWVudCA9IHRydWU7Ci0gICAgICAgIG1vbml0b3JDb21tZW50ID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgLy8gPG1vbml0b3I+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUikKLSAgICAgIHsKLSAgICAgICAgZmlyc3RMb2dFbGVtZW50Kys7Ci0gICAgICAgIHRvb2xJbmZvLnNldE5hbWUoV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBtb25pdG9yIHZlcnNpb24gYW5kIHJlbGVhc2UgZGF0ZQotICAgICAgICB0b29sSW5mby5zZXRWZXJzaW9uKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgICB0b29sSW5mby5zZXRSZWxlYXNlRGF0ZSgKLSAgICAgICAgICBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1JFTEVBU0VfREFURSkpOwotICAgICAgfQotCi0gICAgICAvLyA8aW1wbGVtZW50ZXI+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSU1QTEVNRU5URVIpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fSU1QTEVNRU5URVI7Ci0gICAgICAgIHRvb2xJbmZvLnNldEltcGxlbWVudGVyKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5zZXRMb2NhdGlvbihhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxydW50aW1lPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX1JVTlRJTUUpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fUlVOVElNRTsKLSAgICAgICAgdG9vbEluZm8uZ2V0VG9vbEVudmlyb25tZW50KCkuc2V0UnVudGltZU5hbWUoCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSk7Ci0gICAgICAgIHRvb2xJbmZvLmdldFRvb2xFbnZpcm9ubWVudCgpLnNldFJ1bnRpbWVWZXJzaW9uKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgfQotCi0gICAgICAvLyA8b3BlcmF0aW5nU3lzdGVtPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX09QRVJBVElOR19TWVNURU0pCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fT1BFUkFUSU5HX1NZU1RFTTsKLSAgICAgICAgdG9vbEluZm8uZ2V0VG9vbEVudmlyb25tZW50KCkuc2V0T1NOYW1lKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRPU1ZlcnNpb24oCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx4bWxQYXJzZXI+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fWE1MX1BBUlNFUikKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9YTUxfUEFSU0VSOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRYTUxQYXJzZXJOYW1lKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRYTUxQYXJzZXJWZXJzaW9uKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUVudHJ5PgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfRU5UUlkpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9FTlRSWTsKLSAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24gPSBuZXcgRWxlbWVudExvY2F0aW9uKHRoaXMubG9jYXRvcik7Ci0gICAgICAgIHRpbWVzdGFtcCA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVElNRVNUQU1QKTsKLSAgICAgICAgY29udmVyc2F0aW9uSUQgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0NPTlZFUlNBVElPTl9JRCk7Ci0gICAgICAgIGlkID0gYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9JRF9VQyk7Ci0gICAgICAgIHR5cGUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpOwotICAgICAgfQotCi0gICAgICAvLyA8aHR0cEhlYWRlcnM+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTKQotICAgICAgewotICAgICAgICAvL05vdGU6IENoYXJhY3RlciBkYXRhIGNvdWxkIGJlIHNwbGl0IHVwIGFuZCByZXR1cm5lZCAKLSAgICAgICAgLy9pbiBtb3JlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVycyBjYWxsLiAKLSAgICAgICAgaHR0cEhlYWRlcnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUNvbnRlbnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UKQotICAgICAgewotICAgICAgICBtZXNzYWdlQ29udGVudCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgbWltZVBhcnRzID0gbnVsbDsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlQ7Ci0gICAgICAgIFN0cmluZyBib21TdHJpbmcgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0JPTSk7Ci0gICAgICAgIGlmIChib21TdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgICBib20gPSBJbnRlZ2VyLnZhbHVlT2YoYm9tU3RyaW5nKS5pbnRWYWx1ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYm9tID0gMDsKLSAgICAgIH0KLQotICAgICAgLy8gPG1lc3NhZ2VDb250ZW50V2l0aEF0dGFjaG1lbnRzPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVF9XSVRIX0FUVEFDSE1FTlRTKQotICAgICAgewotICAgICAgICBtZXNzYWdlQ29udGVudCA9IG51bGw7Ci0gICAgICAgIG1pbWVQYXJ0cyA9IG5ldyBNaW1lUGFydHNJbXBsKCk7Ci0KLSAgICAgICAgU3RyaW5nIGJvbVN0cmluZyA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfQk9NKTsKLSAgICAgICAgaWYgKGJvbVN0cmluZyAhPSBudWxsKQotICAgICAgICAgIGJvbSA9IEludGVnZXIudmFsdWVPZihib21TdHJpbmcpLmludFZhbHVlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBib20gPSAwOwotICAgICAgfQotCi0gICAgICAvLyA8bWltZVBhcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9QQVJUKQotICAgICAgewotICAgICAgICBpZiAoYm91bmRhcmllcyA9PSBudWxsKQotICAgICAgICAgIGJvdW5kYXJpZXMgPSBuZXcgQXJyYXlMaXN0KDIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYm91bmRhcmllcy5jbGVhcigpOwotICAgICAgfQotCi0gICAgICAvLyA8Ym91bmRhcnlTdHJpbmc+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQk9VTkRBUllfU1RSSU5HKQotICAgICAgewotICAgICAgICBib3VuZGFyeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9CT1VOREFSWV9TVFJJTkc7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtaW1lSGVhZGVycz4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMpCi0gICAgICB7Ci0gICAgICAgIG1pbWVIZWFkZXJzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX01JTUVfSEVBREVSUzsKLSAgICAgIH0KLQotICAgICAgLy8gPG1pbWVDb250ZW50PgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCkKLSAgICAgIHsKLSAgICAgICAgbWltZUNvbnRlbnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UOwotICAgICAgfQotCi0gICAgICAvLyA8c2VuZGVySG9zdEFuZFBvcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQpCi0gICAgICB7Ci0gICAgICAgIHNlbmRlckhvc3RBbmRQb3J0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUOwotICAgICAgfQotCi0gICAgICAvLyA8cmVjZWl2ZXJIb3N0QW5kUG9ydD4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICByZWNlaXZlckhvc3RBbmRQb3J0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIAotICAgICogQ2hhcmFjdGVycyBjYWxsYmFjay4gCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzKGNoYXIgY2hbXSwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgIC8vIElnbm9yaW5nIENSTEYgdGhhdCBhcHBlYXJzIGluIGxvZyBlbGVtZW50cwotICAgICAgaW50IGFsdFN0YXJ0ID0gc3RhcnQ7Ci0gICAgICBpbnQgYWx0TGVuZ3RoID0gbGVuZ3RoOwotICAgICAgaWYgKHN0YXJ0ID4gMCAmJiBjaFtzdGFydC0xXSA9PSAxMyAmJiBjaFtzdGFydF0gPT0gMTApCi0gICAgICB7Ci0gICAgICAgIGFsdFN0YXJ0Kys7Ci0gICAgICAgIGFsdExlbmd0aC0tOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgaWYgKG1vbml0b3JDb21tZW50ICE9IG51bGwgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkKLSAgICAgIHsKLSAgICAgICAgbW9uaXRvckNvbW1lbnQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPG1lc3NhZ2VDb250ZW50PgotICAgICAgZWxzZSBpZiAobWVzc2FnZUNvbnRlbnQgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlQpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb250ZW50LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxodHRwSGVhZGVycz4KLSAgICAgIGVsc2UgaWYgKGh0dHBIZWFkZXJzICE9IG51bGwKLSAgICAgICAgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTKQotICAgICAgewotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8Ym91bmRhcnlTdHJpbmc+Ci0gICAgICBlbHNlIGlmIChib3VuZGFyeSAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORykKLSAgICAgIHsKLSAgICAgICAgYm91bmRhcnkuYXBwZW5kKGNoLCBhbHRTdGFydCwgYWx0TGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPG1pbWVIZWFkZXJzPgotICAgICAgZWxzZSBpZiAobWltZUhlYWRlcnMgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMpCi0gICAgICB7Ci0gICAgICAgIG1pbWVIZWFkZXJzLmFwcGVuZChjaCwgYWx0U3RhcnQsIGFsdExlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtaW1lQ29udGVudD4KLSAgICAgIGVsc2UgaWYgKG1pbWVDb250ZW50ICE9IG51bGwKLSAgICAgICAgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UKQotICAgICAgewotICAgICAgICBtaW1lQ29udGVudC5hcHBlbmQoY2gsIGFsdFN0YXJ0LCBhbHRMZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8c2VuZGVySG9zdEFuZFBvcnQ+Ci0gICAgICBlbHNlIGlmIChzZW5kZXJIb3N0QW5kUG9ydCAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICBzZW5kZXJIb3N0QW5kUG9ydC5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8cmVjZWl2ZXJIb3N0QW5kUG9ydD4KLSAgICAgIGVsc2UgaWYgKHJlY2VpdmVySG9zdEFuZFBvcnQgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICByZWNlaXZlckhvc3RBbmRQb3J0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIEVuZCBFbGVtZW50LiAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSkKLSAgICB7Ci0gICAgICAvLyA8d3NpLWNvbmZpZzpjb21tZW50PgotICAgICAgaWYgKAotICAgICAgICAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQpCi0gICAgICAgICAgJiYgKG5hbWVzcGFjZVVSSSA9PSBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRykpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHdlIHNhdmVkIHRoZSBjb21tZW50LCB0aGVuIHByb2Nlc3MgaXQgYW5kIHRoZSBsb2cgdGltZXN0YW1wCi0gICAgICAgIGlmICh0aGlzLm1vbml0b3JDb21tZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSA9IG5ldyBBcnRpZmFjdFJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgICBhcnRpZmFjdFJlZmVyZW5jZS5zZXRUaW1lc3RhbXAodGhpcy5sb2dUaW1lc3RhbXApOwotICAgICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICAgIGNvbW1lbnQuc2V0VGV4dChtb25pdG9yQ29tbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgICBhcnRpZmFjdFJlZmVyZW5jZS5zZXREb2N1bWVudEVsZW1lbnQoCi0gICAgICAgICAgICBjb21tZW50LAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHKTsKLSAgICAgICAgICBwcm9jZXNzQXJ0aWZhY3RSZWZlcmVuY2UoYXJ0aWZhY3RSZWZlcmVuY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxib3VuZGFyeVN0cmluZz4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9CT1VOREFSWV9TVFJJTkcpCi0gICAgICB7Ci0gICAgICAgIC8vIEFkZGluZyBib3VuZGFyeSBzdHJpbmcgdG8gYSBsaXN0Ci0gICAgICAgIGJvdW5kYXJpZXMuYWRkKGJvdW5kYXJ5LnRvU3RyaW5nKCkpOwotICAgICAgfQotCi0gICAgICAvLyA8bWltZVBhcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9QQVJUKQotICAgICAgewotICAgICAgICAvLyBDcmVhdGluZyBhIE1lc3NhZ2VNSU1FUGFydCBpbnN0YW5jZQotICAgICAgICBNaW1lUGFydCBwYXJ0ID0gbmV3IE1pbWVQYXJ0SW1wbCgpOwotICAgICAgICBwYXJ0LnNldEhlYWRlcnMobWltZUhlYWRlcnMudG9TdHJpbmcoKSk7Ci0gICAgICAgIHBhcnQuc2V0Q29udGVudChtaW1lQ29udGVudC50b1N0cmluZygpKTsKLSAgICAgICAgcGFydC5zZXRCb3VuZGFyeVN0cmluZ3MoKFN0cmluZ1tdKWJvdW5kYXJpZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKSk7Ci0KLSAgICAgICAgbWltZVBhcnRzLmFkZFBhcnQocGFydCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtZXNzYWdlRW50cnk+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9FTlRSWSkKLSAgICAgIHsKLSAgICAgICAgLy8gQXNzdW1wdGlvbjogUmVsYXRlZCBtZXNzYWdlcyBhcmUgc2VxdWVudGlhbGx5IGF2YWlsYWJsZSBpbiB0aGUgbWVzc2FnZSBsb2cuCi0gICAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNULmVxdWFsc0lnbm9yZUNhc2UodHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgbG9nIGVudHJ5Ci0gICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlcXVlc3QgPQotICAgICAgICAgICAgY3JlYXRlTWVzc2FnZUVudHJ5KAotICAgICAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgIHNlbmRlckhvc3RBbmRQb3J0LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydC50b1N0cmluZygpLAotICAgICAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID09IG51bGwgPyAiIiA6IG1lc3NhZ2VDb250ZW50LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgaHR0cEhlYWRlcnMudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBtaW1lUGFydHMsCi0gICAgICAgICAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24pOwotCi0gICAgICAgICAgLy8gQWRkIGxvZyBlbnRyeSB0byB0aGUgbGlzdAotICAgICAgICAgIG1lc3NhZ2VFbnRyeUxpc3QuYWRkKG1lc3NhZ2VFbnRyeVJlcXVlc3QpOwotICAgICAgICAgIC8vIFJlcXVlc3QgaXMgbm93IHByb2Nlc3NlZCBvbmx5IHdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBpZiAoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UuZXF1YWxzSWdub3JlQ2FzZSh0eXBlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBsb2cgZW50cnkKLSAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVzcG9uc2UgPQotICAgICAgICAgICAgY3JlYXRlTWVzc2FnZUVudHJ5KAotICAgICAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgIHNlbmRlckhvc3RBbmRQb3J0LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydC50b1N0cmluZygpLAotICAgICAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID09IG51bGwgPyAiIiA6IG1lc3NhZ2VDb250ZW50LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgaHR0cEhlYWRlcnMudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBtaW1lUGFydHMsCi0gICAgICAgICAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24pOwotCi0gICAgICAgICAgaWYgKGxvZ0VudHJ5SGFuZGxlciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGxvb2sgdXAgdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgICAgICAgLy8gSVNTVUUgOiBuZWVkIHRvIHRocm93ICYgY2F0Y2ggYSBudWxscG9pbnRlcmV4Y2VwdGlvbiBpbiBoZXJlLi4uCi0gICAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVxdWVzdCA9IGZpbmRSZWxhdGVkUmVxdWVzdChtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghaXNNZXNzYWdlRW5jcnlwdGVkKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0TWVzc2FnZSgpKSAmJgotICAgICAgICAgICAgICAgICAgIWlzTWVzc2FnZUVuY3J5cHRlZChtZXNzYWdlRW50cnlSZXNwb25zZS5nZXRNZXNzYWdlKCkpKQotICAgICAgICAgICAgICB7Ci0JICAgICAgICBpZiAoIW9taXRSZXF1ZXN0KG1lc3NhZ2VFbnRyeVJlcXVlc3QpKQotCSAgICAgICAgewotCSAgICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0JICAgICAgICAgIC8vIEFERDogTmVlZCB0byBjcmVhdGUgZW50cnkgZnJvbSByZXBvcnQKLQkgICAgICAgICAgLy9FbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLQkgICAgICAgICAgRW50cnkgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLQkgICAgICAgICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0SWQoKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKG1lc3NhZ2VFbnRyeVJlcXVlc3QpOwotCQotCSAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgZm9yIHRoZSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIKLQkgICAgICAgICAgRW50cnlDb250ZXh0IHJlcXVlc3RUYXJnZXRDb250ZXh0ID0KLQkgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KAotCSAgICAgICAgICAgICAgICAgICAgZW50cnksCi0JICAgICAgICAgICAgICAgICAgICBtZXNzYWdlRW50cnlSZXF1ZXN0LAotCSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUVudHJ5UmVzcG9uc2UpOwotCSAgICAgICAgICBpZiAocmVxdWVzdFRhcmdldENvbnRleHQgIT0gbnVsbCkKLQkgICAgICAgICAgICBwcm9jZXNzTG9nRW50cnkocmVxdWVzdFRhcmdldENvbnRleHQpOwotCQotCSAgICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0JICAgICAgICAgIC8vIEFERDogTmVlZCB0byBjcmVhdGUgZW50cnkgZnJvbSByZXBvcnQKLQkgICAgICAgICAgLy9FbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLQkgICAgICAgICAgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLQkgICAgICAgICAgICBFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFU1BPTlNFKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKG1lc3NhZ2VFbnRyeVJlc3BvbnNlLmdldElkKCkpOwotCSAgICAgICAgICBlbnRyeS5zZXRFbnRyeURldGFpbChtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0JCi0JICAgICAgICAgIEVudHJ5Q29udGV4dCByZXNwb25zZVRhcmdldENvbnRleHQgPQotCSAgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KAotCSAgICAgICAgICAgICAgICAgIGVudHJ5LAotCSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VFbnRyeVJlcXVlc3QsCi0JICAgICAgICAgICAgICAgICAgbWVzc2FnZUVudHJ5UmVzcG9uc2UpOwotCSAgICAgICAgICBpZiAocmVzcG9uc2VUYXJnZXRDb250ZXh0ICE9IG51bGwpCi0JICAgICAgICAgICAgcHJvY2Vzc0xvZ0VudHJ5KHJlc3BvbnNlVGFyZ2V0Q29udGV4dCk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjdXJyZW50RWxlbWVudCA9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICogRW5kIERvY3VtZW50LiAKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkKLSAgICB7Ci0gICAgICAvL0lmIHdlIHdhbnQgdG8gc2VyaWFsbHkgcHJvY2VzcyB0aGUgbG9nIGZpbGUuICBJbnZva2UgdmFsaWRhdGVNZXNzYWdlcyB3aXRoCi0gICAgICAvL21zZ1ZhbGlkYXRvciE9bnVsbC4gIEhlcmUgd2UgaGF2ZSB0aGUgb3B0aW9uIG9mIGNsZWFyaW5nIHRoZSBsb2dFbnRyeSB2ZWN0b3IKLSAgICAgIC8vb25jZSBtZXNzYWdlIHZhbGlkYXRpb24gaXMgZG9uZS4KLSAgICAgIC8vaWYgKG1zZ1ZhbGlkYXRvciE9bnVsbCkKLSAgICAgIC8vbG9nRW50cnlMaXN0LmNsZWFyKCk7Ci0gICAgICAgIAotICAgICAgICAvKiBQcm9jZXNzIGFsbCByZW1haW5pbmcgcmVxdWVzdHMgaW4gdGhlIG1lc3NhZ2VFbnRyeUxpc3QgKi8KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlRW50cnlMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBNZXNzYWdlRW50cnkgbG9nRW50cnkgPSAoTWVzc2FnZUVudHJ5KSBtZXNzYWdlRW50cnlMaXN0LmdldChpKTsKLSAgICAgICAgICAgIGlmICghb21pdFJlcXVlc3QobG9nRW50cnkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbnRyeSBlbnRyeSA9IG5ldyBFbnRyeUltcGwoKTsKLSAgICAgICAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoCi0gICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKTsKLSAgICAgICAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobG9nRW50cnkuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGxvZ0VudHJ5KTsKLSAgICAgICAgICAgICAgRW50cnlDb250ZXh0IHJlcXVlc3RUYXJnZXRDb250ZXh0ID0KLSAgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBsb2dFbnRyeSwgbnVsbCk7Ci0gICAgICAgICAgICAgIGlmIChyZXF1ZXN0VGFyZ2V0Q29udGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHByb2Nlc3NMb2dFbnRyeShyZXF1ZXN0VGFyZ2V0Q29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9jZXNzIHRoZSBtZXNzYWdlIGluIHRoZSBsb2cgZW50cnkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcHJvY2Vzc0xvZ0VudHJ5KEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vQmVmb3JlIHZhbGlkYXRpbmcgYW55IG1lc3NhZ2VzIGNoZWNrIGlmIGltcGxlbWVudGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBsb2dFbnRyeUhhbmRsZXIucHJvY2Vzc0xvZ0VudHJ5KGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHdzaUV4Y2VwdGlvbiA9Ci0gICAgICAgICAgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIgotICAgICAgICAgICAgICArICIgdGhlIG1lc3NhZ2UgbG9nRW50cnk6ICIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SWQoKSwKLSAgICAgICAgICAgIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgdGhlIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc0FydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvL0JlZm9yZSB2YWxpZGF0aW5nIGFueSBtZXNzYWdlcyBjaGVjayBpZiBpbXBsZW1lbnRlciBpcyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgbG9nRW50cnlIYW5kbGVyLnByb2Nlc3NBcnRpZmFjdFJlZmVyZW5jZShhcnRpZmFjdFJlZmVyZW5jZSk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgd3NpRXhjZXB0aW9uID0KLSAgICAgICAgICBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmciCi0gICAgICAgICAgICAgICsgIiB0aGUgYXJ0aWZhY3QgcmVmZXJlbmNlOiAiCi0gICAgICAgICAgICAgICsgYXJ0aWZhY3RSZWZlcmVuY2UudG9TdHJpbmcoKSwKLSAgICAgICAgICAgIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAgICogRmluZCB0aGUgcmVsYXRlZCBSZXF1ZXN0IExvZ0VudHJ5LiAgVGhlIGN1cnJlbnQgcnVsZSBmb3IgcmVsYXRlZCBsb2cgZW50aXJlcyBpcwotICAgICAgICogdGhhdCBhIHJlcXVlc3Qgd2lsbCBhbHdheXMgcHJlY2VkZSBpdHMgcmVzcG9uc2UuCi0gICAgICAgKiBJU1NVRTogU2VxdWVuY2UgaW4gbG9nIGZpbGUgaXMgdGltZXN0YW1wIGRyaXZlbiAobW9uaXRvciBzcGVjKS4gCi0gICAgICAgKiBBc3NlcnRpb24gaXMgdGhhdCBmb3IgYSBnaXZlbiBjb252ZXJzYXRpb25JRCwgYSBzZWNvbmQgcmVxdWVzdCBpcyBub3Qgc2VudCAKLSAgICAgICAqIHVudGlsIGl0cyByZXNwb25zZSBpcyByZWNlaXZlZCAoY2hyb25vbG9naWNhbGx5KS4gCi0gICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGhhdmUgdG8gYmUgbW9kaWZpZWQgaWYgdGhlIHJ1bGUgY2hhbmdlcy4KLSAgICAgICAqLwotICAgIC8vIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkga2VlcGluZyBhIG11Y2ggc21hbGxlciBsaXN0IG9mIHVucmVzcG9uZGVkIHJlcXVlc3RzLi4uCi0gICAgcHVibGljIE1lc3NhZ2VFbnRyeSBmaW5kUmVsYXRlZFJlcXVlc3QoTWVzc2FnZUVudHJ5IGxvZ0VudHJ5UmVzcG9uc2UpCi0gICAgewotICAgICAgaWYgKGxvZ0VudHJ5UmVzcG9uc2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgZW50cnkgPSBtZXNzYWdlRW50cnlMaXN0LnNpemUoKSAtIDE7IGVudHJ5ID49IDA7IGVudHJ5LS0pCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIGxvZyBlbnRyeSBvZiB0aGUgbWF0Y2hpbmcgcmVxdWVzdAotICAgICAgICAgIE1lc3NhZ2VFbnRyeSBsb2dFbnRyeSA9IChNZXNzYWdlRW50cnkpIG1lc3NhZ2VFbnRyeUxpc3QuZ2V0KGVudHJ5KTsKLSAgICAgICAgICAvLyBJZ25vcmUgb3duIGVudHJ5Ci0gICAgICAgICAgaWYgKCFsb2dFbnRyeVJlc3BvbnNlLmVxdWFscyhsb2dFbnRyeSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxvZ0VudHJ5UmVzcG9uc2UKLSAgICAgICAgICAgICAgLmdldENvbnZlcnNhdGlvbklkKCkKLSAgICAgICAgICAgICAgLmVxdWFscyhsb2dFbnRyeS5nZXRDb252ZXJzYXRpb25JZCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gZm91bmQgdGhlIG1vc3QgcmVjZW50bHkgcmVhZCBtZXNzYWdlIHdpdGggdGhlIHNhbWUgY29udmVyc2F0aW9uSUQuCi0gICAgICAgICAgICAgIC8vIEZyb20gYWJvdmUsIHRoaXMgc2hvdWxkIGJlIHRoZSBjb3JyZXNwb25kaW5nIHJlcXVlc3QuIENoZWNrIGFzIGZhciBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgaWYgKGxvZ0VudHJ5LmdldFR5cGUoKS5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlRW50cnlMaXN0LnJlbW92ZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ0VudHJ5OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBleHBlY3RlZCBhIHJlcXVlc3QuIG5lZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICAgIC8vIGNvbnZlcnNhdGlvbklEIG1hdGNoIG5vdCBmb3VuZCBhbnl3aGVyZS4gbmVlZCB0byB0aHJvdyBhbiBleGNlcHRpb24hCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGxvZyBlbnRyeS4KLSAgICAgKi8KLSAgICBwcml2YXRlIE1lc3NhZ2VFbnRyeSBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICBTdHJpbmcgaWQsCi0gICAgICBTdHJpbmcgY29udmVyc2F0aW9uSWQsCi0gICAgICBTdHJpbmcgdHlwZSwKLSAgICAgIFN0cmluZyB0aW1lc3RhbXAsCi0gICAgICBTdHJpbmcgc2VuZGVySVBQb3J0LAotICAgICAgU3RyaW5nIHJlY2VpdmVySVBQb3J0LAotICAgICAgU3RyaW5nIG1lc3NhZ2VDb250ZW50LAotICAgICAgU3RyaW5nIGh0dHBIZWFkZXJzLAotICAgICAgTWltZVBhcnRzIG1pbWVQYXJ0cywKLSAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pCi0gICAgewotICAgICAgLy8gQ3JlYXRlIGxvZyBlbnRyeQotICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0SWQoaWQpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldENvbnZlcnNhdGlvbklkKGNvbnZlcnNhdGlvbklEKTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRUeXBlKHR5cGUpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgICAgbWVzc2FnZUVudHJ5LnNldFNlbmRlckhvc3RBbmRQb3J0KHNlbmRlcklQUG9ydCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChyZWNlaXZlcklQUG9ydCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0SFRUUEhlYWRlcnMoaHR0cEhlYWRlcnMpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEJPTShib20pOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEVsZW1lbnRMb2NhdGlvbihlbGVtZW50TG9jYXRpb24pOwotCi0gICAgICBTdHJpbmcgZW5jb2RpbmcgPSBudWxsOwotICAgICAgaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIGVuY29kaW5nIGZvciB0aGlzIG1lc3NhZ2UgY29udGVudAotICAgICAgICBlbmNvZGluZyA9IFV0aWxzLmdldFhNTEVuY29kaW5nKG1lc3NhZ2VDb250ZW50KTsKLSAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UobWVzc2FnZUNvbnRlbnQpOwotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZVBhcnRzKG1pbWVQYXJ0cyk7Ci0gICAgICAgCU1pbWVQYXJ0IHJvb3QgPSBVdGlscy5maW5kUm9vdFBhcnQoaHR0cEhlYWRlcnMsIG1pbWVQYXJ0cy5nZXRQYXJ0cygpKTsKLSAgICAgICAJaWYgKHJvb3QgIT0gbnVsbCkKLSAgICAgICAJewotICAgICAgICAgIC8vIEdldCB0aGUgZW5jb2RpbmcgZm9yIHRoaXMgbWVzc2FnZSBjb250ZW50Ci0gICAgICAgICAgZW5jb2RpbmcgPSBVdGlscy5nZXRYTUxFbmNvZGluZyhyb290LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgbWltZVBhcnRzLnNldFJvb3RQYXJ0KHJvb3QpOwotICAgICAgIAl9Ci0gICAJCS8vIGVsc2UgZW1wdHkgYm9keQotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoKGVuY29kaW5nID09IG51bGwpIHx8IChlbmNvZGluZy5lcXVhbHMoIiIpKSkKLSAgICAgICAgIGVuY29kaW5nID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKGVuY29kaW5nKTsKLQotICAgICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgICB9Ci0KLSAgfSAvL0VuZCBDb250ZW50SGFuZGxlcgotICAKLSAgLyoqCi0gICAqIENoZWNrIGZvciBIVFRQIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBsb2dnZWQuCi0gICAqIEBwYXJhbSBycjogYSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmVxdWVzdC1yZXNwb25zZSBwYWlyIHNob3VsZCBiZSBvbWl0dGVkIGZyb20gdGhlIGxvZy4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBvbWl0UmVxdWVzdChNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gb21pdCA9IGZhbHNlOwotICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ID09IG51bGwpCi0gICAgICAgb21pdCA9IHRydWU7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyByZXF1ZXN0SGVhZGVycyA9IG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIGlmICgocmVxdWVzdEhlYWRlcnMgIT0gbnVsbCkgJiYKLSAgICAgICAgICAoKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIkNPTk5FQ1QiKSkgfHwKLSAgICAgICAgICAgKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIlRSQUNFIikpIHx8IAotICAgICAgICAgICAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiREVMRVRFIikpIHx8IAotICAgICAgICAgICAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiT1BUSU9OUyIpKSB8fCAKLSAgICAgICAgICAgKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIkhFQUQiKSkgfHwKLSAgICAgICAgICAgKChyZXF1ZXN0SGVhZGVycy5zdGFydHNXaXRoKCJHRVQiKSkgJiYKLSAgICAgICAgCSghaXNNZXNzYWdlV2l0aEJyYWNrZXRzKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0TWVzc2FnZSgpKSkpKSkKLSAgICAgIHsgCi0gICAgICAgIG9taXQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb21pdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgaGFzIGF0IGxlYXN0Ci0gICAqIG9uZSBsZWZ0IGFuZCBvbmUgcmlnaHQgYnJhY2tldC4KLSAgICogQHBhcmFtIG1lc3NhZ2U6IGEgbWVzc2FnZSBjb250ZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgaGFzIGF0IGxlYXN0Ci0gICAqICAgICAgICAgb25lIGxlZnQgYW5kIG9uZSByaWdodCBicmFja2V0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlV2l0aEJyYWNrZXRzKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuICgobWVzc2FnZSAhPSBudWxsKSAmJiAKLSAgICAgICAgICAgIChtZXNzYWdlLmluZGV4T2YoIjwiKSE9IC0xKSAmJiAKLSAgICAgICAgICAgIChtZXNzYWdlLmluZGV4T2YoIj4iKSAhPSAtMSkpOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNNZXNzYWdlRW5jcnlwdGVkKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuICgobWVzc2FnZSAhPSBudWxsKSAmJiAKLQkgICAgKG1lc3NhZ2UuaW5kZXhPZigiPEVuY3J5cHRlZEtleSAiKSAhPSAtMSkpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nV3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nV3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGVlOTgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL0xvZ1dyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudFdyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCB0byB3cml0ZSB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dXcml0ZXJJbXBsIGV4dGVuZHMgRG9jdW1lbnRXcml0ZXJJbXBsIGltcGxlbWVudHMgTG9nV3JpdGVyCi17Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyI3dyaXRlKExvZykKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCB3cml0ZShMb2cgbG9nKQotICAgIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgdGhlIHdyaXRlciB3YXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aHJvdyBhbiBleGNlcHRpb24KLSAgICBpZiAod3JpdGVyID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb3VsZCBub3Qgd3JpdGUgbG9nIGZpbGUgc2luY2Ugd3JpdGVyIHdhcyBub3Qgc2V0LiIpOwotCi0gICAgLy8gV3JpdGUgbG9nIGZpbGUKLSAgICB3cml0ZShsb2csIHdyaXRlcik7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlciN3cml0ZShMb2csIFdyaXRlcikKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCB3cml0ZShMb2cgbG9nLCBXcml0ZXIgd3JpdGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBBREQ6Ci0gICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiV3JpdGUgZW50aXJlIGxvZyBmaWxlIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgeWV0LiIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NZXNzYWdlRW50cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NZXNzYWdlRW50cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYzdhM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTWVzc2FnZUVudHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSAqIE1lc3NhZ2UgZW50cnkgaW1wbGVtZW50YXRpb24uCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VFbnRyeUltcGwgaW1wbGVtZW50cyBNZXNzYWdlRW50cnkKLXsKLSAgLyoqCi0gICAqIExvZyBlbnRyeSBpZC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgaWQ7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBjb252ZXJzYXRpb25JZDsKLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRpbWVzdGFtcDsKLSAgcHJvdGVjdGVkIFN0cmluZyBzZW5kZXJIb3N0QW5kUG9ydDsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0OwotICBwcm90ZWN0ZWQgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBodHRwSGVhZGVycyA9ICIiOwotICBwcm90ZWN0ZWQgaW50IGJvbTsKLSAgcHJvdGVjdGVkIFN0cmluZyBlbmNvZGluZyA9ICIiOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc01pbWVDb250ZW50ID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBNaW1lUGFydHMgbWltZVBhcnRzID0gbmV3IE1pbWVQYXJ0c0ltcGwoKTsKLQotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEVtcHR5IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeUltcGwoKQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I2dldElkKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRDb252ZXJzYXRpb25JZCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnZlcnNhdGlvbklkKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbklkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nIGNvbnZlcnNhdGlvbklkKQotICB7Ci0gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0VGltZXN0YW1wKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKCkKLSAgewotICAgIHJldHVybiB0aGlzLnRpbWVzdGFtcDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFRpbWVzdGFtcChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lc3RhbXAoU3RyaW5nIHRpbWVzdGFtcCkKLSAgewotICAgIHRoaXMudGltZXN0YW1wID0gdGltZXN0YW1wOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRTZW5kZXJIb3N0QW5kUG9ydCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlbmRlckhvc3RBbmRQb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnNlbmRlckhvc3RBbmRQb3J0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0U2VuZGVySG9zdEFuZFBvcnQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VuZGVySG9zdEFuZFBvcnQoU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0KQotICB7Ci0gICAgdGhpcy5zZW5kZXJIb3N0QW5kUG9ydCA9IHNlbmRlckhvc3RBbmRQb3J0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlY2VpdmVySG9zdEFuZFBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVjZWl2ZXJIb3N0QW5kUG9ydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFJlY2VpdmVySG9zdEFuZFBvcnQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCkKLSAgewotICAgIHRoaXMucmVjZWl2ZXJIb3N0QW5kUG9ydCA9IHJlY2VpdmVySG9zdEFuZFBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRNZXNzYWdlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgCWlmICghdGhpcy5pc01pbWVDb250ZW50KQotICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7Ci0gIAllbHNlCi0gIAl7Ci0gIAkgICBpZiAodGhpcy5taW1lUGFydHMuZ2V0Um9vdFBhcnQoKSA9PSBudWxsKSByZXR1cm4gIiI7Ci0gIAkgICBlbHNlIHJldHVybiB0aGlzLm1pbWVQYXJ0cy5nZXRSb290UGFydCgpLmdldENvbnRlbnQoKTsKLSAgCX0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldE1lc3NhZ2UoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRFbmNvZGluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgZW5jb2RpbmcpCi0gIHsKLSAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjZ2V0Qk9NKCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Qk9NKCkKLSAgewotICAgIHJldHVybiBib207Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0Qk9NKGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJPTShpbnQgYm9tKQotICB7Ci0gICAgdGhpcy5ib20gPSBib207Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRIVFRQSGVhZGVycygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhUVFBIZWFkZXJzKCkKLSAgewotICAgIHJldHVybiB0aGlzLmh0dHBIZWFkZXJzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0SFRUUEhlYWRlcnMoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SFRUUEhlYWRlcnMoU3RyaW5nIGh0dHBIZWFkZXJzKQotICB7Ci0gICAgdGhpcy5odHRwSGVhZGVycyA9IGh0dHBIZWFkZXJzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWVzc2FnZUVudHJ5I2dldEVsZW1lbnRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbGVtZW50TG9jYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0RWxlbWVudExvY2F0aW9uKG9yZy53c2kueG1sLmRvbS5FbGVtZW50TG9jYXRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50TG9jYXRpb24oRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbikKLSAgewotICAgIHRoaXMuZWxlbWVudExvY2F0aW9uID0gZWxlbWVudExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiB0b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEFERDogTmVlZCB0byBhZGQgd2F5IHRvIGluZGljYXRlIFhNTCBzY2hlbWEgdHlwZSBmb3IgbG9nRW50cnkKLSAgICAvLyBBZGQgbG9nIGVudHJ5Ci0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludCgKLSAgICAgICJ4c2k6dHlwZT1cImh0dHBNZXNzYWdlRW50cnlcIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9JRF9VQyArICI9XCIiICsgaWQgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9DT05WRVJTQVRJT05fSUQgKyAiPVwiIiArIGNvbnZlcnNhdGlvbklkICsgIlwiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIHR5cGUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIHRpbWVzdGFtcCArICJcIj4iKTsKLQotICAgIGlmIChpc01pbWVDb250ZW50KCkpCi0gICAgewotICAgICAgICAvLyBBZGQgbWVzc2FnZSBjb250ZW50IHdpdGggYXR0YWNobWVudHMgZWxlbWVudAotICAgICAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlRfV0lUSF9BVFRBQ0hNRU5UUyk7Ci0gICAgICAgIGlmIChib20gIT0gMCkKLSAgICAgICAgICBwdy5wcmludCgiICIgKyBXU0lDb25zdGFudHMuQVRUUl9CT00gKyAiPVwiIiArIGJvbSArICJcIiIpOwotICAgICAgICBwdy5wcmludCgiPiIpOwotCi0gICAgICAgIENvbGxlY3Rpb24gcGFydExpc3QgPSBtaW1lUGFydHMuZ2V0UGFydHMoKTsKLSAgICAgICAgaWYgKCFwYXJ0TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgIAlJdGVyYXRvciBpTWltZVBhcnRzID0gcGFydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpTWltZVBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgCSAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAJICBwdy5wcmludChtaW1lUGFydC50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBZGQgZW5kIG1lc3NhZ2UgZWxlbWVudAotICAgICAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlRfV0lUSF9BVFRBQ0hNRU5UUyArICI+Iik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBBZGQgbWVzc2FnZSBjb250ZW50IGVsZW1lbnQKLSAgICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVCk7Ci0gICAgICBpZiAoYm9tICE9IDApCi0gICAgICAgIHB3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX0JPTSArICI9XCIiICsgYm9tICsgIlwiIik7Ci0gICAgICBwdy5wcmludCgiPiIpOwotCi0gICAgICAvLyBBZGQgZW5jb2RlZCBtZXNzYWdlCi0gICAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICAgIAotICAgICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVCArICI+Iik7Ci0gICAgfQotCi0gICAgLy8gQWRkIHNlbmRlcklQUG9ydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICI8IgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iCi0gICAgICAgICsgc2VuZGVySG9zdEFuZFBvcnQKLSAgICAgICAgKyAiPC8iCi0gICAgICAgICsgbnNOYW1lCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQKLSAgICAgICAgKyAiPiIpOwotCi0gICAgLy8gQWRkIHJlY2VpdmVySVAgZWxlbWVudAotICAgIHB3LnByaW50bG4oCi0gICAgICAiPCIKLSAgICAgICAgKyBuc05hbWUKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iCi0gICAgICAgICsgcmVjZWl2ZXJIb3N0QW5kUG9ydAotICAgICAgICArICI8LyIKLSAgICAgICAgKyBuc05hbWUKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iKTsKLQotICAgIC8vIEFkZCBIVFRQSGVhZGVycyBlbGVtZW50Ci0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTICsgIj4iKTsKLQotICAgIC8vIEFERDogRG9lcyB0aGlzIHN0cmluZyBuZWVkIHRvIGJlIFhNTCBlbmNvZGVkPwotICAgIC8vIEFkZCBIVFRQIGhlYWRlcnMKLSAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGh0dHBIZWFkZXJzKSk7Ci0KLSAgICAvLyBFbmQgSFRUUEhlYWRlcnMgZWxlbWVudAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0hUVFBfSEVBREVSUyArICI+Iik7Ci0KLSAgICAvLyBFbmQgbG9nIGVudHJ5Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFJldHVybiBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNpc01pbWVDb250ZW50KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWltZUNvbnRlbnQoKQotICB7Ci0gICAgcmV0dXJuIGlzTWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0TWltZUNvbnRlbnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWltZUNvbnRlbnQoYm9vbGVhbiBpc01pbWVDb250ZW50KQotICB7Ci0gICAgdGhpcy5pc01pbWVDb250ZW50ID0gaXNNaW1lQ29udGVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNnZXRNSU1FUGFydHMoKQotICAgKi8KLSAgcHVibGljIE1pbWVQYXJ0cyBnZXRNaW1lUGFydHMoKQotICB7Ci0gICAgcmV0dXJuIG1pbWVQYXJ0czsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNzZXRNaW1lUGFydHMoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWltZVBhcnRzKE1pbWVQYXJ0cyBtaW1lUGFydHMpCi0gIHsKLSAgICB0aGlzLm1pbWVQYXJ0cyA9IG1pbWVQYXJ0czsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NaW1lUGFydEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWU3ZGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotLyoqCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBNaW1lUGFydEltcGwgaW1wbGVtZW50cyBNaW1lUGFydCAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgbWltZUNvbnRlbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIG1pbWVIZWFkZXJzOwotICBwcml2YXRlIFN0cmluZ1tdIGJvdW5kYXJ5U3RyaW5ncyA9IG5ldyBTdHJpbmdbMF07Ci0gIAotICBwdWJsaWMgTWltZVBhcnRJbXBsICgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnQjZ2V0Q29udGVudCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydCNzZXRDb250ZW50KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIG1pbWVDb250ZW50KQotICB7Ci0gIAl0aGlzLm1pbWVDb250ZW50ID0gbWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKioKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQjZ2V0SGVhZGVycygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhlYWRlcnMoKQotICB7Ci0gIAlyZXR1cm4gdGhpcy5taW1lSGVhZGVyczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0I3NldEhlYWRlcnMoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGVhZGVycyhTdHJpbmcgbWltZUhlYWRlcnMpCi0gIHsKLSAgCXRoaXMubWltZUhlYWRlcnMgPSBtaW1lSGVhZGVyczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0I2dldEJvdW5kYXJ5U3RyaW5ncygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0Qm91bmRhcnlTdHJpbmdzKCkKLSAgewotICAJcmV0dXJuIHRoaXMuYm91bmRhcnlTdHJpbmdzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnQjc2V0Qm91bmRhcnlTdHJpbmdzKFN0cmluZ1tdKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Qm91bmRhcnlTdHJpbmdzKFN0cmluZ1tdIGJvdW5kYXJ5U3RyaW5ncykKLSAgewotICAJdGhpcy5ib3VuZGFyeVN0cmluZ3MgPSBib3VuZGFyeVN0cmluZ3M7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIHRvWE1MU3RyaW5nKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9MT0cpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQWRkIG1pbWVQYXJ0IGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfUEFSVCAgKyAiPiIpOwotICAgIAotICAgIC8vIEFkZCBib3VuZGFyeSBzdHJpbmcgZWxlbWVudAotICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJvdW5kYXJ5U3RyaW5ncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORyArICI+Iik7Ci0gICAgICAgIHB3LnByaW50KGJvdW5kYXJ5U3RyaW5nc1tpXSk7Ci0gICAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORyArICI+Iik7Ci0gICAgfQotICAgCi0gICAgLy8gQWRkIG1pbWVIZWFkZXJzIGVsZW1lbnQKLSAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMgKyAiPiIpOwotICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcobWltZUhlYWRlcnMpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMgKyAiPiIpOwotCi0gICAgLy8gQWRkIGVuY29kZWQgY29udGVudAotICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCArICI+Iik7Ci0gICAgaWYgKChtaW1lQ29udGVudC5pbmRleE9mKCI8IikgIT0gLTEpICB8fCAKLSAgICAgICAgKG1pbWVDb250ZW50LmluZGV4T2YoIj4iKSAhPSAtMSkgIHx8IAotCQkobWltZUNvbnRlbnQuaW5kZXhPZigiXCIiKSAhPSAtMSkgfHwKLQkJKG1pbWVDb250ZW50LmluZGV4T2YoIlwnIikgIT0gLTEpKQotICAgIAlwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKG1pbWVDb250ZW50KSk7Ci0gICAgZWxzZQotICAgICAgICBwdy5wcmludChnZXRDb250ZW50KCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCArICI+Iik7Ci0gCi0gICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX1BBUlQgKyAiPiIpOwotCi0gICAgLy8gUmV0dXJuIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0c0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0c0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMzOTJjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NaW1lUGFydHNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLQotLyoqCi0gKiBNaW1lUGFydHNJbXBsIGNsYXNzLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiAobGF1em9uZEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTWltZVBhcnRzSW1wbCBpbXBsZW1lbnRzIE1pbWVQYXJ0cwotewotCQotICBwcm90ZWN0ZWQgTWltZVBhcnQgcm9vdFBhcnQ7Ci0gIHByb3RlY3RlZCBDb2xsZWN0aW9uIG1pbWVQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICBwdWJsaWMgTWltZVBhcnRzSW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0cyNnZXRSb290UGFydCgpCi0gICAqLwotICBwdWJsaWMgTWltZVBhcnQgZ2V0Um9vdFBhcnQoKQotICB7Ci0JcmV0dXJuIHJvb3RQYXJ0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnRzI3NldFJvb3RQYXJ0KE1pbWVQYXJ0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Um9vdFBhcnQoTWltZVBhcnQgcm9vdFBhcnQpCi0gIHsKLSAgCXRoaXMucm9vdFBhcnQgPSByb290UGFydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0cyNjb3VudCgpCi0gICAqLwotICBwdWJsaWMgaW50IGNvdW50KCkKLSAgewotCXJldHVybiBtaW1lUGFydHMuc2l6ZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnRzI2FkZFBhcnQoTWltZVBhcnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJ0KE1pbWVQYXJ0IHBhcnQpCi0gIHsKLSAgCWlmIChwYXJ0ICE9IG51bGwpCi0gIAkgIG1pbWVQYXJ0cy5hZGQocGFydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydHMjZ2V0UGFydHMoKQotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0UGFydHMoKQotICB7Ci0gIAlyZXR1cm4gbWltZVBhcnRzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0NodW5rZWREYXRhLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0NodW5rZWREYXRhLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjFhMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9DaHVua2VkRGF0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3Mgd2lsbCBwcm9jZXNzIGNodW5rZWQgZGF0YS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIENodW5rZWREYXRhCi17Ci0gIHByb3RlY3RlZCBib29sZWFuIG1vcmVDaHVua2VkRGF0YSA9IGZhbHNlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGNodW5rZWREYXRhID0gIiI7Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgQ2h1bmtlZERhdGEgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENodW5rZWREYXRhKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBDaHVua2VkRGF0YSBvYmplY3QuCi0gICAqIEBwYXJhbSBzb2NrZXRIYW5kbGVyIHNvY2tldCBoYW5kbGVyLgotICAgKiBAcGFyYW0gbW9yZUNodW5rZWREYXRhIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBDaHVua2VkRGF0YShTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIsIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhKQotICB7Ci0gICAgdGhpcy5zb2NrZXRIYW5kbGVyID0gc29ja2V0SGFuZGxlcjsKLSAgICB0aGlzLm1vcmVDaHVua2VkRGF0YSA9IG1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgQ2h1bmtlZERhdGEgb2JqZWN0LgotICAgKiBAcGFyYW0gc29ja2V0SGFuZGxlciBzb2NrZXQgaGFuZGxlci4KLSAgICogQHBhcmFtIGNodW5rZWREYXRhIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBDaHVua2VkRGF0YShTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIsIFN0cmluZyBjaHVua2VkRGF0YSkKLSAgewotICAgIHRoaXMuc29ja2V0SGFuZGxlciA9IHNvY2tldEhhbmRsZXI7Ci0gICAgdGhpcy5jaHVua2VkRGF0YSA9IGNodW5rZWREYXRhOwotICAgIHRoaXMubW9yZUNodW5rZWREYXRhID0gY2hlY2tEYXRhKGNodW5rZWREYXRhKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdGhlIGNodW5rZWQgZGF0YSB0byB0aGUgYnVmZmVyLgotICAgKiBAcGFyYW0gY2h1bmtlZERhdGEgY2h1bmtlZCBkYXRhLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRGF0YShTdHJpbmcgY2h1bmtlZERhdGEpCi0gIHsKLSAgICB0aGlzLmNodW5rZWREYXRhICs9IGNodW5rZWREYXRhOwotICAgIHRoaXMubW9yZUNodW5rZWREYXRhID0gY2hlY2tEYXRhKGNodW5rZWREYXRhKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZGF0YSBidWZmZXIuCi0gICAqIEByZXR1cm4gIGRhdGEgYnVmZmVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREYXRhKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNodW5rZWREYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIENsZWFyIGRhdGEgYnVmZmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYXJEYXRhKCkKLSAgewotICAgIHRoaXMuY2h1bmtlZERhdGEgPSAiIjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbW9yZSBjaHVua2VkIGRhdGEuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBtb3JlIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTW9yZUNodW5rZWREYXRhKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWNvZGUgYW5kIGFkZCBkYXRhIHRvIHRoZSBidWZmZXIuCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyIGEgU3RyaW5nQnVmZmVyIG9iamVjdC4KLSAgICogQHJldHVybiB0cnVlIGlmIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGJ1ZmZlci4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRlY29kZUFuZEFkZERhdGFUb0J1ZmZlcihTdHJpbmdCdWZmZXIgbWVzc2FnZUJ1ZmZlcikKLSAgewotICAgIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhID0gZmFsc2U7Ci0gICAgaWYgKCF0aGlzLm1vcmVDaHVua2VkRGF0YSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKCJkZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIiLCAiY2h1bmtlZERhdGE6ICIgKyBjaHVua2VkRGF0YSk7Ci0KLSAgICAgIG1vcmVDaHVua2VkRGF0YSA9IGRlY29kZURhdGEoY2h1bmtlZERhdGEsIG1lc3NhZ2VCdWZmZXIpOwotICAgIH0KLQotICAgIHJldHVybiBtb3JlQ2h1bmtlZERhdGE7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgZGF0YS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjaGVja0RhdGEoU3RyaW5nIGNodW5rZWREYXRhKQotICB7Ci0gICAgYm9vbGVhbiBtb3JlQ2h1bmtlZERhdGEgPSBmYWxzZTsKLSAgICAvLyBMb29rIGZvciBbQ1JMRl1bMF1bQ1JMRl0gaW4gdGhlIGNodW5rZWQgZGF0YSAgICAgIAotICAgIGlmIChjaHVua2VkRGF0YS5pbmRleE9mKFNvY2tldEhhbmRsZXIuQ1JMRiArICIwIiArIFNvY2tldEhhbmRsZXIuQ1JMRikgIT0gLTEpCi0gICAgewotICAgICAgbW9yZUNodW5rZWREYXRhID0gZmFsc2U7Ci0KLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoCi0gICAgICAgICJjaGVja0RhdGEiLAotICAgICAgICAiQ2h1bmsgY29udGFpbnMgW0NSTEZdWzBdW0NSTEZdLCBzbyB0aGVyZSBpcyBubyBtb3JlIGRhdGEuIik7Ci0gICAgfQotCi0gICAgLy8gTG9vayBmb3IgWzBdW0NSTEZdIGF0IHN0YXJ0IG9mIGNodW5rZWQgZGF0YSAgICAgIAotICAgIGVsc2UgaWYgKGNodW5rZWREYXRhLnN0YXJ0c1dpdGgoIjAiICsgU29ja2V0SGFuZGxlci5DUkxGKSkKLSAgICB7Ci0gICAgICBtb3JlQ2h1bmtlZERhdGEgPSBmYWxzZTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImNoZWNrRGF0YSIsCi0gICAgICAgICJDaHVuayBkYXRhIHN0YXJ0cyB3aXRoIFswXVtDUkxGXSwgc28gdGhlcmUgaXMgbm8gbW9yZSBkYXRhLiIpOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBzdGVwIHRocm91Z2ggaXQgdG8gc2VlIGlmIHdlIGhhdmUgYWxsIG9mIHRoZSBkYXRhCi0gICAgZWxzZQotICAgIHsKLSAgICAgIG1vcmVDaHVua2VkRGF0YSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWNvZGUgY2h1bmtlZCBkYXRhLgotICAgKiAKLSAgICogRGF0YSBmb3JtYXQ6Ci0gICAqIDxwcmU+Ci0gICAqICAgW0NodW5rIFNpemVdW0NSTEZdW0RhdGEgQ2h1bmtdW0NSTEZdW0NodW5rIFNpemVdW0NSTEZdW0RhdGEgQ2h1bmtdW0NSTEZdLi4uWzBdW0NSTEZdW09wdGlvbmFsIEZvb3Rlcl1bQ1JMRl0KLSAgICogPC9wcmU+Ci0gICAqIAotICAgKiBAcGFyYW0gY2h1bmtlZERhdGEKLSAgICogQHBhcmFtIG1lc3NhZ2VMb2dnaW5nQnVmZmVyCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gZGVjb2RlRGF0YShTdHJpbmcgY2h1bmtlZERhdGEsIFN0cmluZ0J1ZmZlciBtZXNzYWdlQnVmZmVyKQotICB7Ci0gICAgYm9vbGVhbiBlbmRPZkRhdGEgPSBmYWxzZTsKLSAgICBpbnQgbmV4dEluZGV4ID0gMDsKLSAgICBpbnQgcHJldkluZGV4ID0gMDsKLSAgICBpbnQgY2h1bmtTaXplID0gMDsKLQotICAgIFN0cmluZyBuZXh0Q2h1bmtEYXRhID0gbnVsbDsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCBjaHVuayBvZiBkYXRhCi0gICAgd2hpbGUgKCEoZW5kT2ZEYXRhKQotICAgICAgJiYgKG5leHRJbmRleCA8IGNodW5rZWREYXRhLmxlbmd0aCgpKQotICAgICAgJiYgKG5leHRJbmRleCA9IGNodW5rZWREYXRhLmluZGV4T2YoU29ja2V0SGFuZGxlci5DUkxGLCBwcmV2SW5kZXgpKSAhPSAtMSkKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIGRhdGEgbGVuZ3RoIHdoaWNoIGlzIHJpZ2h0IGFmdGVyIHRoaXMKLSAgICAgIFN0cmluZyBoZXhDaHVua2VkU2l6ZSA9IGNodW5rZWREYXRhLnN1YnN0cmluZyhwcmV2SW5kZXgsIG5leHRJbmRleCk7Ci0KLSAgICAgIC8vIERlY29kZSBsZW5ndGgKLSAgICAgIGNodW5rU2l6ZSA9IEludGVnZXIuZGVjb2RlKCIweCIgKyBoZXhDaHVua2VkU2l6ZSkuaW50VmFsdWUoKTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygiZGVjb2RlRGF0YSIsICJjaHVua2VkU2l6ZTogIiArIGNodW5rU2l6ZSk7Ci0KLSAgICAgIC8vIElmIHNpemUgaXMgemVybywgdGhlbiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIHRoZSBjaHVua2VkIGRhdGEKLSAgICAgIGlmIChjaHVua1NpemUgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgZW5kT2ZEYXRhID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbGwgb2YgdGhlIGRhdGEgdGhlbiBzdG9wCi0gICAgICBlbHNlIGlmIChuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplID4gY2h1bmtlZERhdGEubGVuZ3RoKCkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG5leHRDaHVua0RhdGEgPQotICAgICAgICAgIGNodW5rZWREYXRhLnN1YnN0cmluZyhuZXh0SW5kZXggKyAyLCBuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplKTsKLQotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoImRlY29kZURhdGEiLCAibmV4dENodW5rRGF0YTogIiArIG5leHRDaHVua0RhdGEpOwotCi0gICAgICAgIC8vIEdldCBtZXNzYWdlIGJhc2VkIG9uIGxlbmd0aAotICAgICAgICBpZiAobWVzc2FnZUJ1ZmZlciAhPSBudWxsKQotICAgICAgICAgIG1lc3NhZ2VCdWZmZXIuYXBwZW5kKG5leHRDaHVua0RhdGEpOwotICAgICAgfQotCi0gICAgICAvLyBQb2ludCBhdCB0aGUgbmV4dCBjaHVuayBzaXplCi0gICAgICBwcmV2SW5kZXggPSBuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplICsgMjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5kT2ZEYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIERlYnVnLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGRlYnVnKFN0cmluZyBtZXRob2QsIFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgdGhpcy5zb2NrZXRIYW5kbGVyLmRlYnVnKCJDaHVua2VkRGF0YSIsIG1ldGhvZCwgbWVzc2FnZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Db25uZWN0aW9uTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvQ29ubmVjdGlvbkxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OGNlOWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Db25uZWN0aW9uTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIGZvciByZWNlaXZpbmcgY29ubmVjdGlvbiBldmVudHMuCi0gKiAKLSAqIEBhdXRob3IgU2VyZ2V5IFN1aG9ydWNoa2luCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbm5lY3Rpb25MaXN0ZW5lcgotewotICAvKioKLSAgICogSW52b2tlZCB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgotICAgKiBAcGFyYW0gY29ubmVjdGlvbiBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoU29ja2V0Q29ubmVjdGlvbiBjb25uZWN0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTWVzc2FnZUVudHJ5UXVldWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTWVzc2FnZUVudHJ5UXVldWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDljYzA0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01lc3NhZ2VFbnRyeVF1ZXVlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRoZSBxdWV1ZSB0aGF0IGlzIHVzZWQgdG8gd3JpdGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMKLSAqIHRvIHRoZSBsb2cgZmlsZSBpbiB0aGUgY29ycmVjdCBvcmRlci4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlRW50cnlRdWV1ZQotewotICAvKioKLSAgICogUmVxdWVzdCB0eXBlIG1lc3NhZ2UgZW50cnkgcXVldWUuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIHJlcXVlc3RMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBSZXNwb25zZSB0eXBlIG1lc3NhZ2UgZW50cnkgcXVldWUuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIHJlc3BvbnNlTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogTW9uaXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBNb25pdG9yIG1vbml0b3IgPSBudWxsOwotCi0gIC8qKgotICAgKiBMb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCBMb2cgbG9nID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIHdyaXRlci4KLSAgICovCi0gIHByb3RlY3RlZCBMb2dXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKLQotICAvKioKLSAgICogTGlzdCBsb2NrLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsaXN0TG9jayA9ICJsaXN0TG9jayI7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgSUQgd2hpY2ggaXMgaW5jcmVtZW50ZWQgd2hlbiBhIG5ldyBsb2cgZW50cnkgaXMgYWRkZWQgdG8gdGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBtZXNzYWdlSWQgPSAxOwotCi0gIC8qKgotICAgKiBDcmVhdGUgbWVzc2FnZSBlbnRyeSBxdWV1ZS4KLSAgICogQHBhcmFtIG1vbml0b3IgYSBtb25pdG9yLgotICAgKiBAcGFyYW0gbG9nIHRoZSBsb2cuCi0gICAqIEBwYXJhbSBsb2dXcml0ZXIgYSBsb2cgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeVF1ZXVlKE1vbml0b3IgbW9uaXRvciwgTG9nIGxvZywgTG9nV3JpdGVyIGxvZ1dyaXRlcikKLSAgewotICAgIC8vIFNhdmUgaW5wdXQgcmVmZXJlbmNlcwotICAgIHRoaXMubW9uaXRvciA9IG1vbml0b3I7Ci0gICAgdGhpcy5sb2cgPSBsb2c7Ci0gICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGxvZyBlbnRyeSB0byBxdWV1ZS4KLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeSBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlzIHRoZXJlIGlzIGEgcHJvYmxlbSBhZGRpbmcgdGhlIGxvZyAKLSAgICogICAgICAgICBlbnRyeSB0byB0aGUgcXVldWUuCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgYWRkTWVzc2FnZUVudHJ5KE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3luY2hyb25pemVkIChsaXN0TG9jaykKLSAgICB7Ci0gICAgICAvLyBJZiB0aGlzIGlzIGEgcmVxdWVzdCB0eXBlIG9mIG1lc3NhZ2UgZW50cnksIHRoZW4gYWRkIHRvIHJlcXVlc3QgbGlzdAotICAgICAgaWYgKG1lc3NhZ2VFbnRyeS5nZXRUeXBlKCkuZXF1YWxzKE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpKQotICAgICAgewotICAgICAgICByZXF1ZXN0TGlzdC5hZGQobWVzc2FnZUVudHJ5KTsKLSAgICAgIH0KLQotICAgICAgLy8gT3RoZXJ3aXNlIHRoaXMgaXMgYSByZXNwb25zZSB0eXBlIG9mIG1lc3NhZ2UgZW50cnkKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzcG9uc2VMaXN0LmFkZChtZXNzYWdlRW50cnkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRlbGwgdGhlIGxvZyBlbnRyeSB3cml0ZXIgdGhyZWFkIHRvIHJ1bgotICAgIHdyaXRlRnJvbVF1ZXVlKCk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIGFueSBsb2cgZW50cmllcyBuZWVkIHRvIGJlIHdyaXR0ZW4uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlzIHRoZXJlIGlzIGEgcHJvYmxlbSBhZGRpbmcgbG9nIGVudHJpZXMuCi0gIAotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlRnJvbVF1ZXVlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgTWVzc2FnZUVudHJ5IHJlcXVlc3RNZXNzYWdlRW50cnkgPSBudWxsOwotICAgIE1lc3NhZ2VFbnRyeSByZXNwb25zZU1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0gICAgYm9vbGVhbiByZXNwb25zZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBDcmVhdGUgYXJyYXkgdGhhdCB3aWxsIGNvbnRhaW4gbGlzdCBvZiBpbmRleCB0byByZW1vdmUgZnJvbSByZXF1ZXN0IGxpc3QKLSAgICBpbnRbXSByZXF1ZXN0SW5kZXhMaXN0ID0gbmV3IGludFtyZXF1ZXN0TGlzdC5zaXplKCldOwotICAgIGludCByZXFJbmRleENvdW50ID0gMDsKLQotICAgIHN5bmNocm9uaXplZCAobGlzdExvY2spCi0gICAgewotICAgICAgLy8gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhlIHJlcXVlc3QgcXVldWUsCi0gICAgICAvLyB0aGVuIHRyeSB0byBtYXRjaCB0aGVtIHdpdGggZW50cmllcyBpbiB0aGUgcmVzcG9uc2UgcXVldWUKLSAgICAgIGZvciAoaW50IHJlcUluZGV4ID0gMDsgcmVxSW5kZXggPCByZXF1ZXN0TGlzdC5zaXplKCk7IHJlcUluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCByZXF1ZXN0IGxvZyBlbnRyeQotICAgICAgICByZXF1ZXN0TWVzc2FnZUVudHJ5ID0gKE1lc3NhZ2VFbnRyeSkgcmVxdWVzdExpc3QuZWxlbWVudEF0KHJlcUluZGV4KTsKLQotICAgICAgICAvLyBDaGVjayBlYWNoIHJlc3BvbnNlIGxvZyBlbnRyeSB0byBzZWUgaWYgdGhlIGNvbnZlcnNhdGlvbklkIG1hdGNoZXMKLSAgICAgICAgcmVzcG9uc2VGb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCByZXNwSW5kZXggPSAwOwotICAgICAgICAgIHJlc3BJbmRleCA8IHJlc3BvbnNlTGlzdC5zaXplKCkgJiYgIXJlc3BvbnNlRm91bmQ7Ci0gICAgICAgICAgcmVzcEluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgcmVzcG9uc2UgbG9nIGVudHJ5Ci0gICAgICAgICAgcmVzcG9uc2VNZXNzYWdlRW50cnkgPQotICAgICAgICAgICAgKE1lc3NhZ2VFbnRyeSkgcmVzcG9uc2VMaXN0LmVsZW1lbnRBdChyZXNwSW5kZXgpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGhhdmUgdGhlIHNhbWUgY29udmVyc2F0aW9uSWQsCi0gICAgICAgICAgLy8gdGhlbiB3cml0ZSB0aGVtIG91dCB0byB0aGUgbG9nIGZpbGUKLSAgICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2VFbnRyeQotICAgICAgICAgICAgLmdldENvbnZlcnNhdGlvbklkKCkKLSAgICAgICAgICAgIC5lcXVhbHMocmVzcG9uc2VNZXNzYWdlRW50cnkuZ2V0Q29udmVyc2F0aW9uSWQoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcG9uc2VGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFNldCB0aGUgaWQgZm9yIHRoZSBsb2cgZW50cmllcwotICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2VFbnRyeS5zZXRJZChnZXROZXh0TWVzc2FnZUlkKCkpOwotICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlRW50cnkuc2V0SWQoZ2V0TmV4dE1lc3NhZ2VJZCgpKTsKLQotICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHJlcXVlc3QgYW5kIHRoZW4gcmVzcG9uc2UKLSAgICAgICAgICAgIC8vPT09PSBTUyBzdGFydCA6IHdoYXQgdGhpcyBsaW5lIGlzIHVzZWQgZm9yPz8/IC0gY2F1c2VzIG1lbW9yeSBsZWFrLCBhcyBubyByZW1vdmVMb2dFbnRyeSBpcyBjYWxsZWQgPT09PQotICAgICAgICAgICAgLy8gICAgICAgICAgICBsb2cuYWRkTG9nRW50cnkocmVxdWVzdE1lc3NhZ2VFbnRyeSk7Ci0gICAgICAgICAgICAvLz09PT0gU1MgZW5kID09PQotICAgICAgICAgICAgU3RyaW5nUmVhZGVyIHJlcXVlc3RSZWFkZXIgPQotICAgICAgICAgICAgICBuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlRW50cnkudG9YTUxTdHJpbmcoIiIpKTsKLSAgICAgICAgICAgIGxvZ1dyaXRlci53cml0ZShyZXF1ZXN0UmVhZGVyKTsKLQotICAgICAgICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICAgICAgICBwcmludE1lc3NhZ2UocmVxdWVzdE1lc3NhZ2VFbnRyeSk7Ci0KLSAgICAgICAgICAgIC8vIFdyaXRlIG91dCByZXNwb25zZQotICAgICAgICAgICAgLy89PT09IFNTIHN0YXJ0IDogd2hhdCB0aGlzIGxpbmUgaXMgdXNlZCBmb3I/Pz8gLSBjYXVzZXMgbWVtb3J5IGxlYWssIGFzIG5vIHJlbW92ZUxvZ0VudHJ5IGlzIGNhbGxlZCA9PT09Ci0gICAgICAgICAgICAvLyAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShyZXNwb25zZU1lc3NhZ2VFbnRyeSk7Ci0gICAgICAgICAgICAvLz09PT0gU1MgZW5kID09PQotICAgICAgICAgICAgU3RyaW5nUmVhZGVyIHJlc3BvbnNlUmVhZGVyID0KLSAgICAgICAgICAgICAgbmV3IFN0cmluZ1JlYWRlcihyZXNwb25zZU1lc3NhZ2VFbnRyeS50b1hNTFN0cmluZygiIikpOwotICAgICAgICAgICAgbG9nV3JpdGVyLndyaXRlKHJlc3BvbnNlUmVhZGVyKTsKLQotICAgICAgICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICAgICAgICBwcmludE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlRW50cnkpOwotCi0gICAgICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBsaXN0IHNvIHRoYXQgaXQgY2FuIGJlIHJlbW92ZWQgbGF0ZXIKLSAgICAgICAgICAgIHJlcXVlc3RJbmRleExpc3RbcmVxSW5kZXhDb3VudCsrXSA9IHJlcUluZGV4OwotCi0gICAgICAgICAgICAvLyBSZW1vdmUgbG9nIGVudHJ5IGZyb20gcmVzcG9uc2UgbGlzdAotICAgICAgICAgICAgcmVzcG9uc2VMaXN0LnJlbW92ZShyZXNwSW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBSZW1vdmUgcmVxdWVzdHMgdGhhdCB3ZXJlIHdyaXR0ZW4gb3V0Ci0gICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgcmVxSW5kZXhDb3VudDsgY291bnQrKykKLSAgICAgICAgcmVxdWVzdExpc3QucmVtb3ZlKHJlcXVlc3RJbmRleExpc3RbY291bnRdKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuZXh0IG1lc3NhZ2UgaWRlbnRpZmllci4KLSAgICogQHJldHVybiB0aGUgbmV4dCBtZXNzYWdlIGlkZW50aWZpZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgc3luY2hyb25pemVkIFN0cmluZyBnZXROZXh0TWVzc2FnZUlkKCkKLSAgewotICAgIHJldHVybiBTdHJpbmcudmFsdWVPZihtZXNzYWdlSWQrKyk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBtZXNzYWdlLgotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5IGEgbWVzc2FnZSBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByaW50TWVzc2FnZShNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5KQotICB7Ci0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgbW9uaXRvci5wcmludE1lc3NhZ2UoCi0gICAgICAibG9nMDEiLAotICAgICAgbWVzc2FnZUVudHJ5LmdldElkKCkKLSAgICAgICAgKyAiLCAiCi0gICAgICAgICsgbWVzc2FnZUVudHJ5LmdldFR5cGUoKQotICAgICAgICArICIsICIKLSAgICAgICAgKyBtZXNzYWdlRW50cnkuZ2V0U2VuZGVySG9zdEFuZFBvcnQoKSwKLSAgICAgICJMb2cgbWVzc2FnZSBlbnRyeSAtICBJRDogIgotICAgICAgICArIG1lc3NhZ2VFbnRyeS5nZXRJZCgpCi0gICAgICAgICsgIiwgVHlwZTogIgotICAgICAgICArIG1lc3NhZ2VFbnRyeS5nZXRUeXBlKCkKLSAgICAgICAgKyAiLCBTZW5kZXI6ICIKLSAgICAgICAgKyBtZXNzYWdlRW50cnkuZ2V0U2VuZGVySG9zdEFuZFBvcnQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Nb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMzFkZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Nb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLQotLyoqCi0gKiBNZXNzYWdlIE1vbml0b3IuCi0gKgotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyLnVzLmlibS5jb20pCi0gKi8KLQotcHVibGljIGNsYXNzIE1vbml0b3IKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFU09VUkNFX0JVTkRMRV9OQU1FID0KLSAgICAib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuTW9uaXRvciI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVVNBR0VfTUVTU0FHRSA9Ci0gICAgIlVzYWdlOiBNb25pdG9yIC1jb25maWcgPGNvbmZpZ0ZpbGVuYW1lPiI7Ci0KLSAgLyoqCi0gICAqIENvbnZlcnNhdGlvbiBJRC4KLSAgICovCi0gIHByaXZhdGUgaW50IGNvbnZlcnNhdGlvbklkID0gMTsKLQotICBwcml2YXRlIExvZyBsb2cgPSBudWxsOwotICBwcml2YXRlIExvZ1dyaXRlciBsb2dXcml0ZXIgPSBudWxsOwotICBwcml2YXRlIE1vbml0b3JDb25maWcgbW9uaXRvckNvbmZpZyA9IG51bGw7Ci0KLSAgLyoqCi0gICogVG9vbCBpbmZvcm1hdGlvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9OQU1FID0gIk1vbml0b3IiOwotCi0gIHByb3RlY3RlZCBUb29sSW5mbyB0b29sSW5mbyA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIFZlY3RvciBsaXN0ZW5lckxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeVF1ZXVlIG1lc3NhZ2VFbnRyeVF1ZXVlID0gbnVsbDsKLQotICAvKioKLSAgICogTWVzc2FnZSBtb25pdG9yLgotICAgKiBAcGFyYW0gYXJncyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gY3JlYXRpbmcgYSBNb25pdG9yIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBNb25pdG9yKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGxpc3QKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbmV3IE1lc3NhZ2VMaXN0KFJFU09VUkNFX0JVTkRMRV9OQU1FKTsKLQotICAgIC8vIFRvb2wgaW5mb3JtYXRpb24KLSAgICB0b29sSW5mbyA9IG5ldyBUb29sSW5mbyhUT09MX05BTUUpOwotCi0gICAgLy8gQ3JlYXRlIGRvY3VtZW50IGZhY3RvcnkKLSAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyBvYmplY3QKLSAgICBtb25pdG9yQ29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld01vbml0b3JDb25maWcoKTsKLSAgICBtb25pdG9yQ29uZmlnLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0KLSAgICAvLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgbW9uaXRvckNvbmZpZy5wYXJzZUFyZ3MoYXJncyk7Ci0KLSAgICBTdHJpbmcgbG9nTG9jYXRpb24gPSBtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCk7Ci0gICAgaWYgKGxvZ0xvY2F0aW9uLmluZGV4T2YoV1NJQ29uc3RhbnRzLlBBVEhfU0VQQVJBVE9SKSA+IC0xKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzExIiwKLSAgICAgICAgICBtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCksCi0gICAgICAgICAgIlRoZSBsb2cgZmlsZSBsb2NhdGlvbiB2YWx1ZSBjYW5ub3QgY29udGFpbiB0aGUgcGFzcyBzZXBhcmF0b3IgY2hhcmFjdGVyOiIpKTsKLSAgICB9Ci0KLSAgICBGaWxlIGZpbGUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBmaWxlIG9iamVjdCBmb3IgbG9nIGZpbGUKLSAgICAgIGZpbGUgPSBuZXcgRmlsZShtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJjb25maWcwNyIsICJDb3VsZCBub3QgZ2V0IGxvZyBmaWxlIGxvY2F0aW9uLiIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByZXBsYWNlIGZsYWcgaXMgZmFsc2UgYW5kIGZpbGUgZXhpc3RzLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmIChmaWxlLmV4aXN0cygpICYmICFtb25pdG9yQ29uZmlnLmdldFJlcGxhY2VMb2coKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwOCIsCi0gICAgICAgICAgbW9uaXRvckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpLAotICAgICAgICAgICJMb2cgZmlsZSBhbHJlYWR5IGV4aXN0czoiKSk7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIG91dHB1dCBmaWxlCi0gICAgICBsb2cgPSBkb2N1bWVudEZhY3RvcnkubmV3TG9nKCk7Ci0KLSAgICAgIC8vIFNldCBzdHlsZSBzaGVldCBzdHJpbmcKLSAgICAgIGxvZy5zZXRTdHlsZVNoZWV0U3RyaW5nKAotICAgICAgICBtb25pdG9yQ29uZmlnLmdldEFkZFN0eWxlU2hlZXQoKS5nZXRTdHlsZVNoZWV0U3RyaW5nKCkpOwotCi0gICAgICAvLyBHZXQgbG9nIHdyaXRlcgotICAgICAgbG9nV3JpdGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld0xvZ1dyaXRlcigpOwotICAgICAgbG9nV3JpdGVyLnNldFdyaXRlcihtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCkpOwotCi0gICAgICAvLyBXcml0ZSBzdGFydCBvZiBsb2cgZmlsZQotICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldFN0YXJ0WE1MU3RyaW5nKCIiKSkpOwotCi0gICAgICAvLyBXcml0ZSBtb25pdG9yIHRvb2wgaW5mb3JtYXRpb24KLSAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKHRvWE1MU3RyaW5nKCIiKSkpOwotCi0gICAgICAvLyBDcmVhdGUgbG9nIGVudHJ5IHF1ZXVlCi0gICAgICBtZXNzYWdlRW50cnlRdWV1ZSA9IG5ldyBNZXNzYWdlRW50cnlRdWV1ZSh0aGlzLCBsb2csIGxvZ1dyaXRlcik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImVycm9yMDMiLAotICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGxvZyBvciBsb2cgd3JpdGVyLiIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgbWFuSW5UaGVNaWRkbGUgc2V0dGluZ3MKLSAgICBNYW5JblRoZU1pZGRsZSBtYW5JblRoZU1pZGRsZSA9IG1vbml0b3JDb25maWcuZ2V0TWFuSW5UaGVNaWRkbGUoKTsKLQotICAgIC8vIEdldCBsaXN0IG9mIHJlZGlyZWN0cwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWFuSW5UaGVNaWRkbGUuZ2V0UmVkaXJlY3RMaXN0KCkuaXRlcmF0b3IoKTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCByZWRpcmVjdAotICAgIFJlZGlyZWN0IHJlZGlyZWN0OwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgcmVkaXJlY3QKLSAgICAgIHJlZGlyZWN0ID0gKFJlZGlyZWN0KSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgIC8vIENyZWF0ZSBzZXJ2ZXIgc29ja2V0IHNvY2tldCBsaXN0ZW5lcgotICAgICAgbGlzdGVuZXJMaXN0LmFkZChuZXcgU2VydmVyU29ja2V0TGlzdGVuZXIodGhpcywgcmVkaXJlY3QpKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgc2h1dGRvd24gaG9vawotICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmFkZFNodXRkb3duSG9vayhuZXcgU2h1dGRvd25Ib29rKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuZCBzdGFydCBjb25zb2xlCi0gICAgQ29uc29sZSBjb25zb2xlID0gbmV3IENvbnNvbGUoKTsKLSAgICBjb25zb2xlLnN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKiBAcmV0dXJuIHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgZ2V0TW9uaXRvckNvbmZpZygpCi0gIHsKLSAgICByZXR1cm4gbW9uaXRvckNvbmZpZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGxvZyBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGxvZyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgTG9nIGdldExvZygpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2c7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBsb2cgZW50cnkgcXVldWUgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBsb2cgZW50cnkgcXVldWUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeVF1ZXVlIGdldE1lc3NhZ2VFbnRyeVF1ZXVlKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1lc3NhZ2VFbnRyeVF1ZXVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlcm1pbmF0ZSB0aGUgbW9uaXRvci4KLSAgICovCi0gIHZvaWQgZXhpdE1vbml0b3IoKQotICB7Ci0gICAgcHJpbnRNZXNzYWdlKCJzdG9wcGluZzAxIiwgIlN0b3BwaW5nIHRoZSBtb25pdG9yLi4uIik7Ci0gICAgU3lzdGVtLmV4aXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogU3RvcCB0aGUgbW9uaXRvciBiZWNhdXNlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZC4KLSAgICovCi0gIHZvaWQgZXhpdE1vbml0b3IoRXhjZXB0aW9uIGUpCi0gIHsKLSAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2UKLSAgICBwcmludE1lc3NhZ2UoCi0gICAgICAic3RvcHBpbmcwMiIsCi0gICAgICAiU3RvcHBpbmcgbW9uaXRvciBiZWNhdXNlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZC4iKTsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVYQ0VQVElPTjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgaWYgKHRoaXMubW9uaXRvckNvbmZpZy5nZXRWZXJib3NlT3B0aW9uKCkpCi0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgLy8gRXhpdCBtb25pdG9yCi0gICAgZXhpdE1vbml0b3IoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIHRoZSBtb25pdG9yLgotICAgKi8KLSAgdm9pZCBzdG9wTW9uaXRvcigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgbGlzdCBvZiBsaXN0ZW5lcnMgdG8gc3RvcAotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0ZW5lckxpc3QuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgKChTZXJ2ZXJTb2NrZXRMaXN0ZW5lcikgaXRlcmF0b3IubmV4dCgpKS5zaHV0ZG93bigpOwotICAgICAgfQotCi0gICAgICAvLyBXYWl0IGZvciB0aGUgY2xlYW51cCB0aW1lb3V0IHNlY29uZHMKLSAgICAgIFRocmVhZC5zbGVlcChtb25pdG9yQ29uZmlnLmdldFRpbWVvdXQoKSAqIDEwMDApOwotCi0gICAgICAvLyBXcml0ZSBlbmQgb2YgbG9nIGZpbGUKLSAgICAgIGlmIChsb2dXcml0ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldEVuZFhNTFN0cmluZygiIikpKTsKLQotICAgICAgICBsb2dXcml0ZXIuY2xvc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgZXhlY3B0aW9uIGJlIGhhbmRsZWQ/Ci0gICAgfQotCi0gICAgcHJpbnRNZXNzYWdlKCJzdG9wcGVkMDEiLCAiTW9uaXRvciBzdG9wcGVkLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1hbmQgbGluZSBpbnRlcmZhY2UuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgTW9uaXRvciBtb25pdG9yID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpCi0gICAgICB7Ci0gICAgICAgIHN0YXRpY1ByaW50TWVzc2FnZSgidXNhZ2UwMSIsIFVTQUdFX01FU1NBR0UpOwotICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb25maWciKSkKLSAgICAgIHsKLSAgICAgICAgc3RhdGljUHJpbnRNZXNzYWdlKCJ1c2FnZTAxIiwgVVNBR0VfTUVTU0FHRSk7Ci0gICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgfQotCi0gICAgICAvLyBSdW4gdGhlIG1vbml0b3IKLSAgICAgIG1vbml0b3IgPSBuZXcgTW9uaXRvcihhcmdzKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgYm9vbGVhbiBwcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgU3RyaW5nIG1lc3NhZ2VJRDsKLSAgICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZTsKLSAgICAgIFN0cmluZyBtZXNzYWdlRGF0YTsKLQotICAgICAgaWYgKChlIGluc3RhbmNlb2YgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKQotICAgICAgICB8fCAoZSBpbnN0YW5jZW9mIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbikpCi0gICAgICB7Ci0gICAgICAgIHByaW50U3RhY2tUcmFjZSA9IGZhbHNlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMSI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIk1vbml0b3IgRXJyb3I6IjsKLSAgICAgICAgbWVzc2FnZURhdGEgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMiI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIk1vbml0b3IgU3RvcHBlZCBCeSBFeGNlcHRpb246IjsKLSAgICAgICAgbWVzc2FnZURhdGEgPSBlLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtb25pdG9yICE9IG51bGwpCi0gICAgICAgIG1vbml0b3IucHJpbnRNZXNzYWdlKG1lc3NhZ2VJRCwgbWVzc2FnZURhdGEsIGRlZmF1bHRNZXNzYWdlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgTW9uaXRvci5zdGF0aWNQcmludE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotCi0gICAgICBpZiAocHJpbnRTdGFja1RyYWNlKQotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICAvLyBFeGl0Ci0gICAgICBpZiAobW9uaXRvciAhPSBudWxsKQotICAgICAgICBtb25pdG9yLmV4aXRNb25pdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIFN5c3RlbS5leGl0KDIpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5IGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwcmludE1lc3NhZ2UoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcHJpbnRNZXNzYWdlKGtleSwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlTGlzdC5wcmludE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNQcmludE1lc3NhZ2UoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgc3RhdGljUHJpbnRNZXNzYWdlKGtleSwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljUHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2VMaXN0LnByaW50TWVzc2FnZSgKLSAgICAgIFJFU09VUkNFX0JVTkRMRV9OQU1FLAotICAgICAga2V5LAotICAgICAgbWVzc2FnZURhdGEsCi0gICAgICBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuZXh0IGNvbnZlcnNhdGlvbiBpZGVudGlmaWVyLgotICAgKiBAcmV0dXJuIHRoZSBuZXh0IGNvbnZlcnNhdGlvbiBpZGVudGlmaWVyLgotICAgKi8KLSAgc3luY2hyb25pemVkIGludCBnZXROZXh0Q29udmVyc2F0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnZlcnNhdGlvbklkKys7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgLy8gU3RhcnQKLSAgICBwdy5wcmludCh0b29sSW5mby5nZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICAvLyBDb25maWcKLSAgICBwdy5wcmludCgKLSAgICAgIG1vbml0b3JDb25maWcudG9YTUxTdHJpbmcoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHKSk7Ci0KLSAgICAvLyBFbmQKLSAgICBwdy5wcmludGxuKHRvb2xJbmZvLmdldEVuZFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTaHV0ZG93biBob29rLgotICAgKi8KLSAgY2xhc3MgU2h1dGRvd25Ib29rIGV4dGVuZHMgVGhyZWFkCi0gIHsKLSAgICAvKioKLSAgICAgKiBSdW4gc2h1dGRvd24gcHJvY2VkdXJlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgc3RvcE1vbml0b3IoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUnVuIGNvbW1hbmQgZnJvbSBjb25zb2xlLgotICAgKi8KLSAgY2xhc3MgQ29uc29sZSBleHRlbmRzIFRocmVhZAotICB7Ci0gICAgLyoqCi0gICAgICogUHJvbXB0IHVzZXIgYW5kIHdhaXQgZm9yIGlucHV0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBleGl0IHN0cmluZwotICAgICAgU3RyaW5nIGV4aXRTdHJpbmcgPSBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJleGl0MDEiLCAiZXhpdCIpOwotCi0gICAgICAvLyBEaXNwbGF5IG9wdGlvbnMgYW5kIGhvdyB0byBzdG9wIGFwcGxpY2F0aW9uCi0gICAgICBUZXN0VXRpbHMucHJpbnRUb29sSW5mbyh0b29sSW5mbyk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KG1vbml0b3JDb25maWcudG9TdHJpbmcoKSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAiKTsKLSAgICAgIHByaW50TWVzc2FnZSgKLSAgICAgICAgInN0YXJ0MDEiLAotICAgICAgICAiVGhlICIKLSAgICAgICAgICArIHRvb2xJbmZvLmdldE5hbWUoKQotICAgICAgICAgICsgIiB0b29sIGlzIHJlYWR5IHRvIGludGVyY2VwdCBhbmQgbG9nIHdlYiBzZXJ2aWNlIG1lc3NhZ2VzLiIpOwotICAgICAgcHJpbnRNZXNzYWdlKAotICAgICAgICAic3RhcnQwMiIsCi0gICAgICAgICJUeXBlIFwiZXhpdFwiIHRvIHN0b3AgdGhlICIgKyB0b29sSW5mby5nZXROYW1lKCkgKyAiLiIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIik7Ci0KLSAgICAgIC8vIEdldCB0aGUgdGltZSB0byBzdG9wIGFjY2VwdGluZyBjb25uZWN0aW9ucwotICAgICAgbG9uZyBzdG9wVGltZSA9Ci0gICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgKG1vbml0b3JDb25maWcuZ2V0TG9nRHVyYXRpb24oKSAqIDEwMDApOwotICAgICAgLy8gU1MKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCBzdGRpbiBhcyBhIGJ1ZmZlcmVkIHJlYWRlcgotICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPQotICAgICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBpbnB1dCBmcm9tIGNvbnNvbGUKLSAgICAgICAgYm9vbGVhbiBleGl0ID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlICgoIWV4aXQpICYmIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSA8IHN0b3BUaW1lKSkKLSAgICAgICAgeyAvLyBTUwotICAgICAgICAgIC8vIFNsZWVwCi0gICAgICAgICAgVGhyZWFkLnNsZWVwKDUwMCk7Ci0KLSAgICAgICAgICAvLyBDaGVjayBmb3IgdXNlciBpbnB1dAotICAgICAgICAgIGlmIChyZWFkZXIucmVhZHkoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRMaW5lKCkuZXF1YWxzSWdub3JlQ2FzZShleGl0U3RyaW5nKSkKLSAgICAgICAgICAgICAgZXhpdCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgYmUgaGFuZGxlZD8KLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGUudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEV4aXQKLSAgICAgIGV4aXRNb25pdG9yKCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01vbml0b3IucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGQ2MDZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSMKLSMgTW9uaXRvciBtZXNzYWdlIHJlc291cmNlIGJ1bmRsZS4KLSMKLXVzYWdlMDE9VXNhZ2U6IE1vbml0b3IgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+Ci1zdG9wcGVkMDE9TW9uaXRvciBzdG9wcGVkLgotZXJyb3IwMT1Nb25pdG9yIEVycm9yOgotZXJyb3IwMj1Nb25pdG9yIFN0b3BwZWQgQnkgRXhjZXB0aW9uOiAKLWVycm9yMDM9Q291bGQgbm90IGNyZWF0ZSBsb2cgb3IgbG9nIHdyaXRlci4KLWVycm9yMDQ9TW9uaXRvciBjYW5ub3QgY29ubmVjdCB0byBhIHJlZGlyZWN0IGhvc3Q6Ci1zdG9wcGluZzAxPVN0b3BwaW5nIHRoZSBtb25pdG9yLi4uCi1zdG9wcGluZzAyPVN0b3BwaW5nIG1vbml0b3IgYmVjYXVzZSBhbiBleGNlcHRpb24gb2NjdXJyZWQuCi1sb2cwMT1Mb2cgbWVzc2FnZSBlbnRyeSBbSUQsIFR5cGUsIFNlbmRlcl06Ci1zdGFydDAxPVRoZSBNb25pdG9yIHRvb2wgaXMgcmVhZHkgdG8gaW50ZXJjZXB0IGFuZCBsb2cgd2ViIHNlcnZpY2UgbWVzc2FnZXMuCi1zdGFydDAyPVR5cGUgImV4aXQiIHRvIHN0b3AgdGhlIE1vbml0b3IuCi1leGl0MDE9ZXhpdAotY29uZmlnMDE9VGhlIHNwZWNpZmllZCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZDoKLWNvbmZpZzAyPU1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBub3QgZm91bmQuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzAzPUNvdWxkIG5vdCByZWFkIG1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwND1FbGVtZW50IG11c3QgY29udGFpbiBhbiBpbnRlZ2VyIHZhbHVlLiAgRWxlbWVudCBuYW1lOgotY29uZmlnMDU9TW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgZGlkIG5vdCBjb250YWluIGFueSByZWRpcmVjdCBzdGF0ZW1lbnRzLgotY29uZmlnMDY9TW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgZGlkIG5vdCBjb250YWluIHRoZSBsb2cgZmlsZSBVUkkuCi1jb25maWcwNz1Db3VsZCBub3QgZ2V0IGxvZyBmaWxlIGxvY2F0aW9uLgotY29uZmlnMDg9TG9nIGZpbGUgYWxyZWFkeSBleGlzdHMuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzA5PUVsZW1lbnQgaXMgbWlzc2luZy4gRWxlbWVudCBuYW1lOgotY29uZmlnMTA9UGFyYW1ldGVyIHZhbHVlIGNhbid0IGJlIG5lZ2F0aXZlLiBFbGVtZW50IG5hbWU6Ci1jb25maWcxMT1UaGUgbG9nIGZpbGUgbG9jYXRpb24gdmFsdWUgY2Fubm90IGNvbnRhaW4gdGhlIHBhc3Mgc2VwYXJhdG9yIGNoYXJhY3RlcjoKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9TZXJ2ZXJTb2NrZXRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9TZXJ2ZXJTb2NrZXRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTE2YzhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU2VydmVyU29ja2V0TGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvcjsKLQotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci0KLS8qKgotICogQSBzZXJ2ZXIgc29ja2V0IGxpc3RlbmVyLgotICoKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJTb2NrZXRMaXN0ZW5lcgotICBleHRlbmRzIFRocmVhZAotICBpbXBsZW1lbnRzIENvbm5lY3Rpb25MaXN0ZW5lciAvLyBTUwotewotICBwcm90ZWN0ZWQgTW9uaXRvciBtb25pdG9yID0gbnVsbDsKLSAgcHJvdGVjdGVkIFJlZGlyZWN0IHJlZGlyZWN0ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG51bGw7Ci0gIHByb3RlY3RlZCBib29sZWFuIHN0b3BTZXJ2ZXJTb2NrZXQgPSBmYWxzZTsKLQotICBwcm90ZWN0ZWQgVmVjdG9yIGNvbm5lY3Rpb25MaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgc2VydmVyIHNvY2tldCBsaXN0ZW5lci4KLSAgICogQHBhcmFtIG1vbml0b3IgYSBNb25pdG9yIG9iamVjdC4KLSAgICogQHBhcmFtIHJlZGlyZWN0IGEgUmVkaXJlY3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFNlcnZlclNvY2tldExpc3RlbmVyKE1vbml0b3IgbW9uaXRvciwgUmVkaXJlY3QgcmVkaXJlY3QpCi0gIHsKLSAgICB0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotICAgIHRoaXMucmVkaXJlY3QgPSByZWRpcmVjdDsKLQotICAgIC8vIFN0YXJ0IGxpc3RlbmluZwotICAgIHN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogUnVuIHRoZSB0aHJlYWQgYW5kIGxpc3RlbiBmb3IgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIHNlcnZlciBzb2NrZXQKLSAgICAgIHNlcnZlclNvY2tldCA9Ci0gICAgICAgIG5ldyBTZXJ2ZXJTb2NrZXQoCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0TGlzdGVuUG9ydCgpLAotICAgICAgICAgIHJlZGlyZWN0LmdldE1heENvbm5lY3Rpb25zKCkpOwotICAgICAgLy8gU1MKLQotICAgICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCBzZXJ2ZXIgc29ja2V0IHdpbGwgY29udGludWUgdG8gYWNjZXB0IGNvbm5lY3Rpb25zCi0gICAgICBzZXJ2ZXJTb2NrZXQuc2V0U29UaW1lb3V0KDApOwotCi0gICAgICAvLyBMaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIHVudGlsIGludGVycnVwdGVkCi0gICAgICB3aGlsZSAoIXN0b3BTZXJ2ZXJTb2NrZXQpCi0gICAgICB7Ci0gICAgICAgIC8vIEFjY2VwdCBjb25uZWN0aW9ucwotICAgICAgICBTb2NrZXQgc29ja2V0ID0gc2VydmVyU29ja2V0LmFjY2VwdCgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgc29ja2V0IHdhcyBOT1Qgc3RvcHBlZCwgcHJvY2VzcyBjb25uZWN0aW9uCi0gICAgICAgIGlmICghc3RvcFNlcnZlclNvY2tldCkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBuZXcgY29ubmVjdGlvbgotICAgICAgICAgIFNvY2tldENvbm5lY3Rpb24gc29ja2V0Q29ubmVjdGlvbiA9Ci0gICAgICAgICAgICBuZXcgU29ja2V0Q29ubmVjdGlvbih0aGlzLm1vbml0b3IsIHRoaXMucmVkaXJlY3QsIHNvY2tldCk7Ci0KLSAgICAgICAgICAvL3JlZ2lzdGVyIGFzIGEgbGlzdGVuZXIKLSAgICAgICAgICBzb2NrZXRDb25uZWN0aW9uLmFkZENvbm5lY3Rpb25MaXN0ZW5lcih0aGlzKTsgLy8gU1MKLQotICAgICAgICAgIC8vIEFkZCB0byBjb25uZWN0aW9uIGxpc3QKLSAgICAgICAgICBjb25uZWN0aW9uTGlzdC5hZGQoc29ja2V0Q29ubmVjdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiB3YXMgTk9UIGNhdXNlZCBieSBjbG9zaW5nIHRoZSBzb2NrZXQsIHRoZW4gc3RvcCBtb25pdG9yCi0gICAgICBpZiAoIWUuZ2V0TWVzc2FnZSgpLmVxdWFscygic29ja2V0IGNsb3NlZCIpKQotICAgICAgewotICAgICAgICBtb25pdG9yLmV4aXRNb25pdG9yKGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIGxpc3RlbmluZyBmb3IgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzaHV0ZG93bigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBTaHV0ZG93biBhbGwgYWN0aXZlIGNvbm5lY3Rpb25zCi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGNvbm5lY3Rpb25MaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAoKFNvY2tldENvbm5lY3Rpb24pIGl0ZXJhdG9yLm5leHQoKSkuc2h1dGRvd24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gVGVsbCB0aGUgc2VydmVyIHNvY2tldCBsaXN0ZW5pbmcgdGhyZWFkIHRvIHN0b3AKLSAgICAgIHRoaXMuc3RvcFNlcnZlclNvY2tldCA9IHRydWU7Ci0KLSAgICAgIC8vIFNldCB0aGUgc2VydmVyIHNvY2tldCB0aW1lb3V0IHRvIDEgbXMKLSAgICAgIHNlcnZlclNvY2tldC5zZXRTb1RpbWVvdXQoMSk7Ci0KLSAgICAgIC8vIENsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0Ci0gICAgICBpZiAoc2VydmVyU29ja2V0ICE9IG51bGwpCi0gICAgICAgIHNlcnZlclNvY2tldC5jbG9zZSgpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PSBTUyBzdGFydCA9PT09Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5Db25uZWN0aW9uTGlzdGVuZXIjY29ubmVjdGlvbkNsb3NlZCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFNvY2tldENvbm5lY3Rpb24gY29ubmVjdGlvbikKLSAgewotICAgIGNvbm5lY3Rpb25MaXN0LnJlbW92ZShjb25uZWN0aW9uKTsKLSAgfQotICAvLyA9PT09IFNTIGVuZCA9PT09Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL1NvY2tldENvbm5lY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0Q29ubmVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTJhMGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0Q29ubmVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi1pbXBvcnQgamF2YS5uZXQuU29ja2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogQSBzb2NrZXQgY29ubmVjdGlvbi4KLSAqCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgU29ja2V0Q29ubmVjdGlvbiBleHRlbmRzIFRocmVhZAotewotICBwcm90ZWN0ZWQgTW9uaXRvciBtb25pdG9yOwotICBwcm90ZWN0ZWQgUmVkaXJlY3QgcmVkaXJlY3Q7Ci0gIHByb3RlY3RlZCBTb2NrZXQgaW5Tb2NrZXQ7Ci0gIHByb3RlY3RlZCBTb2NrZXQgb3V0U29ja2V0OwotCi0gIHByb3RlY3RlZCBTdHJpbmcgaHR0cFByb3h5SG9zdCA9IG51bGw7Ci0gIHByb3RlY3RlZCBpbnQgaHR0cFByb3h5UG9ydDsKLQotICBwcm90ZWN0ZWQgU29ja2V0SGFuZGxlciByZXF1ZXN0U29ja2V0SGFuZGxlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHJlc3BvbnNlU29ja2V0SGFuZGxlciA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBWZWN0b3IgbGlzdGVuZXJzID0gbmV3IFZlY3RvcigpOyAvLyBTUwotCi0gIC8qKgotICAgKiBDcmVhdGUgc29ja2V0IGNvbm5lY3Rpb24uCi0gICAqIEBwYXJhbSBtb25pdG9yICBhIE1vbml0b3Igb2JqZWN0LgotICAgKiBAcGFyYW0gcmVkaXJlY3QgYSBSZWRpcmVjdCBvYmplY3QuCi0gICAqIEBwYXJhbSBpblNvY2tldCBpbiBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgU29ja2V0Q29ubmVjdGlvbihNb25pdG9yIG1vbml0b3IsIFJlZGlyZWN0IHJlZGlyZWN0LCBTb2NrZXQgaW5Tb2NrZXQpCi0gIHsKLSAgICB0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotICAgIHRoaXMucmVkaXJlY3QgPSByZWRpcmVjdDsKLSAgICB0aGlzLmluU29ja2V0ID0gaW5Tb2NrZXQ7Ci0KLSAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHRoZSBjb25uZWN0aW9uCi0gICAgc3RhcnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHRoZSBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICAvLyBHZXQgdGhlIEhUVFAgcHJveHkgc2V0dGluZ3MgaWYgdGhlcmUgYXJlIGFueSBzZXQgKG5vdCB1c2VkIGN1cnJlbnRseSkKLSAgICBsb2FkSHR0cFByb3h5U2V0dGluZ3MoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIE9wZW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlcgotICAgICAgdGhpcy5vdXRTb2NrZXQgPSBuZXcgU29ja2V0KHJlZGlyZWN0LmdldFRvSG9zdCgpLCByZWRpcmVjdC5nZXRUb1BvcnQoKSk7Ci0KLSAgICAgIC8vIFNldCB0aGUgcmVhZCB0aW1lb3V0IGZvciB0aGUgaW5wdXQgc29ja2V0Ci0gICAgICB0aGlzLmluU29ja2V0LnNldFNvVGltZW91dChyZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSAqIDEwMDApOwotCi0gICAgICAvLyBHZXQgdGhlIG5leHQgY29udmVyc2F0aW9uIElECi0gICAgICBpbnQgY29udmVyc2F0aW9uSWQgPSBtb25pdG9yLmdldE5leHRDb252ZXJzYXRpb25JZCgpOwotCi0gICAgICAvLyBDcmVhdGUgdGhlIHNvY2tldCBoYW5kbGVycyB3aGljaCBhcmUgdXNlZCB0byBzZW5kIHRoZSBkYXRhIGZyb20KLSAgICAgIC8vIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlcgotICAgICAgcmVxdWVzdFNvY2tldEhhbmRsZXIgPQotICAgICAgICBuZXcgU29ja2V0SGFuZGxlcigKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QsCi0gICAgICAgICAgY29udmVyc2F0aW9uSWQsCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0VG9Ib3N0KCksCi0gICAgICAgICAgdGhpcy5pblNvY2tldCwKLSAgICAgICAgICB0aGlzLm91dFNvY2tldCwKLSAgICAgICAgICByZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSk7Ci0gICAgICByZXNwb25zZVNvY2tldEhhbmRsZXIgPQotICAgICAgICBuZXcgU29ja2V0SGFuZGxlcigKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFLAotICAgICAgICAgIGNvbnZlcnNhdGlvbklkLAotICAgICAgICAgIHJlZGlyZWN0LmdldFRvSG9zdCgpLAotICAgICAgICAgIHRoaXMub3V0U29ja2V0LAotICAgICAgICAgIHRoaXMuaW5Tb2NrZXQsCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0UmVhZFRpbWVvdXRTZWNvbmRzKCkpOwotCi0gICAgICAvLyBUZWxsIGVhY2ggc29ja2V0SGFuZGxlciBhYm91dCB0aGUgb3RoZXIgb25lCi0gICAgICByZXF1ZXN0U29ja2V0SGFuZGxlci5zZXRQYWlyZWRTb2NrZXRIYW5kbGVyKHJlc3BvbnNlU29ja2V0SGFuZGxlcik7Ci0gICAgICByZXNwb25zZVNvY2tldEhhbmRsZXIuc2V0UGFpcmVkU29ja2V0SGFuZGxlcihyZXF1ZXN0U29ja2V0SGFuZGxlcik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIE1vbml0b3Iuc3RhdGljUHJpbnRNZXNzYWdlKAotICAgICAgICAiZXJyb3IwNCIsCi0gICAgICAgIHJlZGlyZWN0LmdldFRvSG9zdCgpLAotICAgICAgICAiTW9uaXRvciBjYW5ub3QgY29ubmVjdCB0byBhIHJlZGlyZWN0IGhvc3Q6Iik7Ci0KLSAgICAgIHNodXRkb3duKCk7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0aGlzLmluU29ja2V0LmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIExvZyBtZXNzYWdlLgotICAgKiBAcGFyYW0gY29udmVyc2F0aW9uSUQgICAgICB0aGUgY292ZXJzYXRpb24gaWQuCi0gICAqIEBwYXJhbSBjb25uZWN0aW9uVHlwZSAgICAgIHRoZSBjb25uZWN0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXAgICAgICAgICAgIHRoZSB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSBzZW5kZXJIb3N0QW5kUG9ydCAgIHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgICogQHBhcmFtIHJlY2VpdmVySG9zdEFuZFBvcnQgdGhlIHJlY2VpdmVyIGhvc3QgYW5kIHBvcnQuCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyICAgICAgIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gYm9tICAgICAgICAgICAgICAgICB0aGUgQk9NLgotICAgKiBAcGFyYW0gZW5jb2RpbmcgICAgICAgICAgICB0aGUgZW5jb2RpbmcuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmICB0aGVyZSBpcyBhIHByb2JsZW0gbG9nZ2luZyBtZXNzYWdlLgotICAqLwotICBwdWJsaWMgdm9pZCBsb2dNZXNzYWdlKAotICAgIGludCBjb252ZXJzYXRpb25JRCwKLSAgICBTdHJpbmcgY29ubmVjdGlvblR5cGUsCi0gICAgU3RyaW5nIHRpbWVzdGFtcCwKLSAgICBTdHJpbmcgc2VuZGVySG9zdEFuZFBvcnQsCi0gICAgU3RyaW5nIHJlY2VpdmVySG9zdEFuZFBvcnQsCi0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIsCi0gICAgaW50IGJvbSwKLSAgICBTdHJpbmcgZW5jb2RpbmcpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgbWVzc2FnZSBlbnRyeQotICAgIG1lc3NhZ2VFbnRyeSA9Ci0gICAgICBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICBjb25uZWN0aW9uVHlwZSwKLSAgICAgICAgdGltZXN0YW1wLAotICAgICAgICBzZW5kZXJIb3N0QW5kUG9ydCwKLSAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydCwKLSAgICAgICAgbWVzc2FnZUJ1ZmZlci50b1N0cmluZygpLAotICAgICAgICBib20sCi0gICAgICAgIGVuY29kaW5nKTsKLQotICAgIC8vIERFQlVHOgotICAgIC8vZGVidWcoImxvZ01lc3NhZ2UiLCAiIG1lc3NhZ2VFbnRyeTogIiArIG1lc3NhZ2VFbnRyeSk7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gdGhlIHF1ZXVlCi0gICAgbW9uaXRvci5nZXRNZXNzYWdlRW50cnlRdWV1ZSgpLmFkZE1lc3NhZ2VFbnRyeShtZXNzYWdlRW50cnkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBlbnRyeSBmcm9tIGFsbCBvZiB0aGUgZGF0YSB0aGF0IHdhcyBnYXRoZXJlZC4KLSAgICovCi0gIHByaXZhdGUgTWVzc2FnZUVudHJ5IGNyZWF0ZU1lc3NhZ2VFbnRyeSgKLSAgICBpbnQgY29udmVyc2F0aW9uSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VUeXBlLAotICAgIFN0cmluZyB0aW1lc3RhbXAsCi0gICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LAotICAgIFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0LAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIGludCBib20sCi0gICAgU3RyaW5nIGVuY29kaW5nKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBsb2cgZW50cnkgb2JqZWN0Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG1vbml0b3IuZ2V0TG9nKCkuY3JlYXRlTG9nRW50cnkoKTsKLQotICAgIC8vIFNldCBpbnB1dCBpbmZvcm1hdGlvbiBpbiBsb2cgZW50cnkKLSAgICAvLyBOT1RFOiAgVGhlIElEIGlzIHNldCBqdXN0IGJlZm9yZSB0aGUgbG9nIGVudHJ5IGlzIHdyaXR0ZW4gdG8gdGhlIGxvZyBmaWxlIGluIExvZ0VudHJ5UXVldWUKLSAgICAvL2xvZ0VudHJ5LnNldElkKGlkKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nLnZhbHVlT2YoY29udmVyc2F0aW9uSUQpKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0VHlwZShtZXNzYWdlVHlwZSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgIG1lc3NhZ2VFbnRyeS5zZXRTZW5kZXJIb3N0QW5kUG9ydChzZW5kZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFJlY2VpdmVySG9zdEFuZFBvcnQocmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKGVuY29kaW5nKTsKLQotICAgIC8vIEdldCBIVFRQIGhlYWRlcnMgZnJvbSBmdWxsIG1lc3NhZ2UKLSAgICBTdHJpbmcgaHR0cEhlYWRlcnMgPSBVdGlscy5nZXRIVFRQSGVhZGVycyhtZXNzYWdlKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0SFRUUEhlYWRlcnMoaHR0cEhlYWRlcnMpOwotCQotICAgaWYgKFV0aWxzLmlzTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoaHR0cEhlYWRlcnMpKQotICAgIHsKLSAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IFV0aWxzLnBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UobWVzc2FnZSwgaHR0cEhlYWRlcnMsIGVuY29kaW5nKTsKLSAgICAJaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgIAl7Ci0gICAgCSAgLy8gcHJvYmxlbSBjcmVhdGluZyBNaW1lcGFydHMgLS0gdHJlYXQgaXQgYXMgc2ltcGxlIFNPQVAgbWVzc2FnZQotICAgIAkgIFN0cmluZyBjb250ZW50ID0gVXRpbHMuZ2V0Q29udGVudChtZXNzYWdlKTsKLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShjb250ZW50KTsKLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgIAl9Ci0gICAgCWVsc2UKLSAgICAJewotICAgICAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lUGFydHMobWltZVBhcnRzKTsKLSAgICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQodHJ1ZSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgICBTdHJpbmcgY29udGVudCA9IFV0aWxzLmdldENvbnRlbnQobWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShjb250ZW50KTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lQ29udGVudChmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBCT00sIGlmIHRoZXJlIGlzIG9uZQotICAgIGlmIChib20gIT0gMCkKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRCT00oYm9tKTsKLQotICAgIHJldHVybiBtZXNzYWdlRW50cnk7Ci0gIH0KLQotICAvKioKLSAgICogTG9hZCBIVFRQIHByb3h5IHNldHRpbmdzLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9hZEh0dHBQcm94eVNldHRpbmdzKCkKLSAgewotICAgIC8vIEdldCB0aGUgSFRUUCBwcm94eSBob3N0IHNldHRpbmcKLSAgICB0aGlzLmh0dHBQcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlIb3N0Iik7Ci0gICAgaWYgKHRoaXMuaHR0cFByb3h5SG9zdCAhPSBudWxsICYmIGh0dHBQcm94eUhvc3QuZXF1YWxzKCIiKSkKLSAgICAgIHRoaXMuaHR0cFByb3h5SG9zdCA9IG51bGw7Ci0KLSAgICAvLyBJZiB0aGVyZSB3YXMgYW4gSFRUUCBwcm94eSBob3N0IHNldHRpbmcsIHRoZW4gZ2V0IHRoZSBwb3J0Ci0gICAgaWYgKHRoaXMuaHR0cFByb3h5SG9zdCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwb3J0U3RyaW5nID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5UG9ydCIpOwotCi0gICAgICAvLyBTZXQgZGVmYXVsdCB0byA4MAotICAgICAgaWYgKHBvcnRTdHJpbmcgPT0gbnVsbCB8fCBwb3J0U3RyaW5nLmVxdWFscygiIikpCi0gICAgICAgIHRoaXMuaHR0cFByb3h5UG9ydCA9IDgwOwotICAgICAgZWxzZQotICAgICAgICBodHRwUHJveHlQb3J0ID0gSW50ZWdlci5wYXJzZUludChwb3J0U3RyaW5nKTsKLSAgICB9Ci0gIH0KLQotICBNb25pdG9yIGdldE1vbml0b3IoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubW9uaXRvcjsKLSAgfQotCi0gIHN5bmNocm9uaXplZCB2b2lkIHdha2VVcCgpCi0gIHsKLSAgICBmaXJlQ29ubmVjdGlvbkNsb3NlZCgpOyAvLyBTUwotICAgIG5vdGlmeUFsbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNodXRkb3duLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2h1dGRvd24oKQotICB7Ci0gICAgaWYgKHRoaXMucmVxdWVzdFNvY2tldEhhbmRsZXIgIT0gbnVsbCkKLSAgICAgIHRoaXMucmVxdWVzdFNvY2tldEhhbmRsZXIuc2h1dGRvd24oKTsKLSAgICBpZiAodGhpcy5yZXNwb25zZVNvY2tldEhhbmRsZXIgIT0gbnVsbCkKLSAgICAgIHRoaXMucmVzcG9uc2VTb2NrZXRIYW5kbGVyLnNodXRkb3duKCk7Ci0gIH0KLQotICAvLyA9PT09IFNTIHN0YXJ0ID09PT0KLSAgLyoqCi0gICAqIEFkZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyLgotICAgKiBAcGFyYW0gbGlzdGVuZXIgZXZlbnQgbGlzdGVuZXIuCi0gICAqIEBzZWUgI3JlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkxpc3RlbmVyKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotICB9Ci0gIC8qKgotICAgKiBSZW1vdmUgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lci4KLSAgICogQHBhcmFtIGxpc3RlbmVyIGV2ZW50IGxpc3RlbmVyLgotICAgKiBAc2VlICNhZGRDb25uZWN0aW9uTGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLSAgfQotICAvKioKLSAgICogTm90aWZ5IGxpc3RlbmVycyBvbiBjb25uZWN0aW9uIGNsb3NlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGZpcmVDb25uZWN0aW9uQ2xvc2VkKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3RlbmVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gKENvbm5lY3Rpb25MaXN0ZW5lcikgaS5uZXh0KCk7Ci0gICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwotICAgIH0KLSAgfQotICAvLyA9PT09IFNTIGVuZCA9PT09Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL1NvY2tldEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTM4YTI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIEJlYWNvbiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IEluYy4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEJlYWNvbklUIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogU29ja2V0IEhhbmRsZXIuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBTb2NrZXRIYW5kbGVyIGV4dGVuZHMgVGhyZWFkCi17Ci0gIHByb3RlY3RlZCBTb2NrZXRDb25uZWN0aW9uIHNvY2tldENvbm5lY3Rpb247Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHBhaXJlZFNvY2tldEhhbmRsZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgY29ubmVjdGlvblR5cGU7Ci0gIHByb3RlY3RlZCBpbnQgY29udmVyc2F0aW9uSUQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SG9zdDsKLSAgcHJvdGVjdGVkIGludCByZWFkVGltZW91dFNlY29uZHM7Ci0KLSAgcHJvdGVjdGVkIFNvY2tldCBpblNvY2tldDsKLSAgcHJvdGVjdGVkIFNvY2tldCBvdXRTb2NrZXQ7Ci0gIHByb3RlY3RlZCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0gIHByb3RlY3RlZCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcmVhZFRpbWVkT3V0ID0gZmFsc2U7Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIHByaXZhdGUgU3RyaW5nIG1pbWVDaGFyc2V0ID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgeG1sRW5jb2RpbmcgPSBudWxsOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENSTEYgPSAiXHJcbiI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF8xMDBfQ09OVElOVUUgPQotICAgICIxMDAgQ29udGludWUiLnRvVXBwZXJDYXNlKCk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENIVU5LRUQgPQotICAgICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIudG9VcHBlckNhc2UoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hVTktFRF9XSVRIX1FVT1RFUyA9Ci0gICAgIlRyYW5zZmVyLUVuY29kaW5nOiBcImNodW5rZWRcIiIudG9VcHBlckNhc2UoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF9MRU5HVEggPQotICAgICJDb250ZW50LUxlbmd0aDoiLnRvVXBwZXJDYXNlKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBzb2NrZXQgaGFuZGxlci4KLSAgICogQHBhcmFtIHNvY2tldENvbm5lY3Rpb24gICBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICogQHBhcmFtIGNvbm5lY3Rpb25UeXBlICAgICBjb25uZWN0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjb252ZXJzYXRpb25JRCAgICAgY29udmVyc2F0aW9uIGlkLgotICAgKiBAcGFyYW0gdGFyZ2V0SG9zdCAgICAgICAgIHRhcmdldCBob3N0LgotICAgKiBAcGFyYW0gaW5Tb2NrZXQgICAgICAgICAgIGluIHNvY2tldC4KLSAgICogQHBhcmFtIG91dFNvY2tldCAgICAgICAgICBvdXQgc29ja2V0LgotICAgKiBAcGFyYW0gcmVhZFRpbWVvdXRTZWNvbmRzIHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKi8KLSAgcHVibGljIFNvY2tldEhhbmRsZXIoCi0gICAgU29ja2V0Q29ubmVjdGlvbiBzb2NrZXRDb25uZWN0aW9uLAotICAgIFN0cmluZyBjb25uZWN0aW9uVHlwZSwKLSAgICBpbnQgY29udmVyc2F0aW9uSUQsCi0gICAgU3RyaW5nIHRhcmdldEhvc3QsCi0gICAgU29ja2V0IGluU29ja2V0LAotICAgIFNvY2tldCBvdXRTb2NrZXQsCi0gICAgaW50IHJlYWRUaW1lb3V0U2Vjb25kcykKLSAgewotICAgIHRoaXMuc29ja2V0Q29ubmVjdGlvbiA9IHNvY2tldENvbm5lY3Rpb247Ci0gICAgdGhpcy5jb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlOwotICAgIHRoaXMuY29udmVyc2F0aW9uSUQgPSBjb252ZXJzYXRpb25JRDsKLSAgICB0aGlzLnRhcmdldEhvc3QgPSB0YXJnZXRIb3N0OwotICAgIHRoaXMuaW5Tb2NrZXQgPSBpblNvY2tldDsKLSAgICB0aGlzLm91dFNvY2tldCA9IG91dFNvY2tldDsKLSAgICB0aGlzLnJlYWRUaW1lb3V0U2Vjb25kcyA9IHJlYWRUaW1lb3V0U2Vjb25kczsKLQotICAgIC8vIEFERDoKLSAgICB2ZXJib3NlID0KLSAgICAgIHNvY2tldENvbm5lY3Rpb24uZ2V0TW9uaXRvcigpLmdldE1vbml0b3JDb25maWcoKS5nZXRWZXJib3NlT3B0aW9uKCk7Ci0KLSAgICBzdGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBwYWlyZWQgc29ja2V0IGhhbmRsZXIuCi0gICAqIEBwYXJhbSBwYWlyZWRTb2NrZXRIYW5kbGVyIHBhaXJlZCBzb2NrZXQgaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhaXJlZFNvY2tldEhhbmRsZXIoU29ja2V0SGFuZGxlciBwYWlyZWRTb2NrZXRIYW5kbGVyKQotICB7Ci0gICAgdGhpcy5wYWlyZWRTb2NrZXRIYW5kbGVyID0gcGFpcmVkU29ja2V0SGFuZGxlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZW5kIHRoZSBkYXRhIGZyb20gdGhlIGlucHV0IHNvY2tldCB0byB0aGUgb3V0cHV0IHNvY2tldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpbnQgcmVhZExlbjsKLSAgICBTdHJpbmcgcmVhZE1zZzsKLSAgICBNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgcmVhZCBidWZmZXIgICAgICAKLSAgICBieXRlW10gcmVhZEJ1ZmZlciA9IG5ldyBieXRlWzQwOTZdOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMKLSAgICAgIHRoaXMuaW5wdXRTdHJlYW0gPSB0aGlzLmluU29ja2V0LmdldElucHV0U3RyZWFtKCk7Ci0gICAgICB0aGlzLm91dHB1dFN0cmVhbSA9IHRoaXMub3V0U29ja2V0LmdldE91dHB1dFN0cmVhbSgpOwotCi0gICAgICAvLyBQcm9jZXNzIHdoaWxlIHRoZSBjb25uZWN0aW9uIGlzIGFjdGl2ZSAKLSAgICAgIC8vIChOT1RFOiB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gMSBtZXNzYWdlIHBlciBjb25uZWN0aW9uKQotICAgICAgYm9vbGVhbiBjb25uZWN0aW9uQWN0aXZlID0gdHJ1ZTsKLSAgICAgIHdoaWxlIChjb25uZWN0aW9uQWN0aXZlKQotICAgICAgewotICAgICAgICAvLyBSZXNldCBhbGwgZGF0YQotICAgICAgICByZWFkTGVuID0gMDsKLSAgICAgICAgbWVzc2FnZUNvbnRleHQgPSBuZXcgTWVzc2FnZUNvbnRleHQoKTsKLQotICAgICAgICAvLyBSZWFkIHVudGlsIG1lc3NhZ2UgaXMgY29tcGxldGUKLSAgICAgICAgYm9vbGVhbiBtZXNzYWdlQ29tcGxldGUgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKCFtZXNzYWdlQ29tcGxldGUpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiUmVhZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbS4iKTsKLQotICAgICAgICAgICAgLy8gUmVhZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbQotICAgICAgICAgICAgcmVhZExlbiA9IGlucHV0U3RyZWFtLnJlYWQocmVhZEJ1ZmZlciwgMCwgcmVhZEJ1ZmZlci5sZW5ndGgpOwotCi0gICAgICAgICAgICAvLyBSZXNldCByZWFkIHRpbWVvdXQgZmxhZwotICAgICAgICAgICAgcmVhZFRpbWVkT3V0ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIERFQlVHOgotICAgICAgICAgICAgZGVidWcoInJ1biIsICJyZWFkTGVuOiAiICsgcmVhZExlbik7Ci0KLSAgICAgICAgICAgIGlmIChyZWFkTGVuID09IC0xKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjb25uZWN0aW9uQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGRhdGEgd2FzIHJlYWQsIHRoZW4gY2hlY2sgZm9yIDEwMCBjb250aW51ZQotICAgICAgICAgICAgZWxzZSBpZiAocmVhZExlbiA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgdGhhdCB3YXMgcmVhZCwgdGhlbiBnZXQgdGhlIHRpbWVzdGFtcAotICAgICAgICAgICAgICBpZiAobWVzc2FnZUNvbnRleHQudGltZXN0YW1wID09IG51bGwpCi0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRleHQudGltZXN0YW1wID0gVXRpbHMuZ2V0VGltZXN0YW1wKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25UeXBlLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ5dGVbXSB0b0hvc3QgPQotICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgc29ja2V0Q29ubmVjdGlvbi5yZWRpcmVjdC5nZXRUb0hvc3QoKQotICAgICAgICAgICAgICAgICAgICAgICsgIjoiCi0gICAgICAgICAgICAgICAgICAgICAgKyBzb2NrZXRDb25uZWN0aW9uLnJlZGlyZWN0LmdldFRvUG9ydCgpKQotICAgICAgICAgICAgICAgICAgICAuZ2V0Qnl0ZXMoKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gbmV3IFN0cmluZyhyZWFkQnVmZmVyLCAwLCByZWFkTGVuKTsKLQotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IG1lc3NhZ2UuaW5kZXhPZihDUkxGICsgIkhvc3Q6ICIpOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDg7Ci0gICAgICAgICAgICAgICAgICBpbnQgc2Vjb25kUGFydCA9IG1lc3NhZ2UuaW5kZXhPZihDUkxGLCBpbmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGVuIGdvIGZvcm1hdCBpdAotICAgICAgICAgICAgICAgICAgd3JpdGUodGhpcy5vdXRwdXRTdHJlYW0sIHJlYWRCdWZmZXIsIDAsIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgIHdyaXRlKHRoaXMub3V0cHV0U3RyZWFtLCB0b0hvc3QsIDAsIHRvSG9zdC5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgd3JpdGUoCi0gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RyZWFtLAotICAgICAgICAgICAgICAgICAgICByZWFkQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICBzZWNvbmRQYXJ0LAotICAgICAgICAgICAgICAgICAgICByZWFkTGVuIC0gc2Vjb25kUGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgdGhlbiBnbyBmb3JtYXQgaXQKLSAgICAgICAgICAgICAgICAgIHdyaXRlKHRoaXMub3V0cHV0U3RyZWFtLCByZWFkQnVmZmVyLCAwLCByZWFkTGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZW4gZ28gZm9ybWF0IGl0Ci0gICAgICAgICAgICAgICAgd3JpdGUodGhpcy5vdXRwdXRTdHJlYW0sIHJlYWRCdWZmZXIsIDAsIHJlYWRMZW4pOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGJ1ZmZlclN0cmluZyA9IG5ldyBTdHJpbmcocmVhZEJ1ZmZlciwgMCwgcmVhZExlbik7Ci0gICAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJidWZmZXIgYXMgc3RyaW5nOiBbIiArIGJ1ZmZlclN0cmluZyArICJdIik7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclN0cmluZy5sZW5ndGgoKSA8PSA1MCkKLSAgICAgICAgICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgICAgICAgICAicnVuIiwKLSAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBhcyBoZXhzdHJpbmc6IFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBVdGlscy50b0hleFN0cmluZyhidWZmZXJTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXSIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgICAgICAgICAicnVuIiwKLSAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBhcyBoZXhzdHJpbmc6IFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBVdGlscy50b0hleFN0cmluZyhidWZmZXJTdHJpbmcuc3Vic3RyaW5nKDAsIDUwKSkKLSAgICAgICAgICAgICAgICAgICAgICArICIgLi4uXSIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgcGFydCBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIHRoZSBCT00KLSAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VDb250ZXh0LmJvbSA9PSAwKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRleHQuYm9tID0gZ2V0Qk9NKHJlYWRCdWZmZXIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gREVCVUcKLSAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJib206ICIgKyBtZXNzYWdlQ29udGV4dC5ib20pOwotCi0gICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZzsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoKTsKLSAgICAgICAgICAgICAgICByZWFkTXNnID0KLSAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIHJlYWRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgIHJlYWRMZW4sCi0gICAgICAgICAgICAgICAgICAgIFV0aWxzLmdldEphdmFFbmNvZGluZyhlbmNvZGluZykpOwotICAgICAgICAgICAgICAgIHNldEVuY29kaW5nKHJlYWRNc2cpOwotICAgICAgICAgICAgICAgIGlmICghZW5jb2RpbmcuZXF1YWxzKGdldEVuY29kaW5nKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoKTsKLSAgICAgICAgICAgICAgICAgIHJlYWRNc2cgPQotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgIHJlYWRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICByZWFkTGVuLAotICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmdldEphdmFFbmNvZGluZyhlbmNvZGluZykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiRVhDRVBUSU9OICgzKTogIiArIHVlZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbih1ZWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBTZXQgZW5jb2RpbmcgaW4gdGhlIG1lc3NhZ2UgY29udGV4dAotICAgICAgICAgICAgICBtZXNzYWdlQ29udGV4dC5lbmNvZGluZyA9IGVuY29kaW5nOwotCi0gICAgICAgICAgICAgIC8vIERFQlVHCi0gICAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiZW5jb2Rpbmc6ICIgKyBtZXNzYWdlQ29udGV4dC5lbmNvZGluZyk7Ci0KLSAgICAgICAgICAgICAgLy8gUHJvY2VzcyBtZXNzYWdlCi0gICAgICAgICAgICAgIG1lc3NhZ2VDb250ZXh0ID0gcHJvY2Vzc01lc3NhZ2UocmVhZExlbiwgcmVhZE1zZywgbWVzc2FnZUNvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiBtZXNzYWdlIGlzIGNvbXBsZXRlLCB0aGVuIGxvZyBpdCBhbmQgcmVzZXQgYnVmZmVyCi0gICAgICAgICAgICBpZiAoKGlzTWVzc2FnZUNvbXBsZXRlKG1lc3NhZ2VDb250ZXh0KSkKLSAgICAgICAgICAgICAgfHwgKChyZWFkTGVuID09IC0xKSAmJiAobWVzc2FnZUNvbnRleHQubWVzc2FnZUJ1ZmZlci5sZW5ndGgoKSA+IDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gTG9nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgbG9nTWVzc2FnZShtZXNzYWdlQ29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgLy8gU2V0IG1lc3NhZ2UgY29tcGxldGUKLSAgICAgICAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbiBpZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTZXQgcmVhZCB0aW1lb3V0IGZsYWcKLSAgICAgICAgICAgIHJlYWRUaW1lZE91dCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjogIiArIGllLnRvU3RyaW5nKCkpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgcmVhZCBpcyBub3QgZG9uZSwgdGhlbiBzaHV0ZG93biAKLSAgICAgICAgICAgIGlmIChwYWlyZWRTb2NrZXRIYW5kbGVyICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgcGFpcmVkU29ja2V0SGFuZGxlci5pc1JlYWRXYWl0aW5nKCkKLSAgICAgICAgICAgICAgJiYgcGFpcmVkU29ja2V0SGFuZGxlci5pc1JlYWRUaW1lZE91dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJyZWFkIHRpbWVkIG91dCBvbiBib3RoIHNvY2tldHMiKTsKLQotICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBhbmQgaXQgaXMgY29tcGxldGUsIHRoZW4gbG9nIGl0Ci0gICAgICAgICAgICAgIGlmICgoaXNNZXNzYWdlQ29tcGxldGUobWVzc2FnZUNvbnRleHQpKQotICAgICAgICAgICAgICAgIHx8IChtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMb2cgbWVzc2FnZQotICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UobWVzc2FnZUNvbnRleHQpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gU2V0IG1lc3NhZ2UgY29tcGxldGUKLSAgICAgICAgICAgICAgY29ubmVjdGlvbkFjdGl2ZSA9IGZhbHNlOwotICAgICAgICAgICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZTIpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICBkZWJ1ZygKLSAgICAgICAgICAgICAgInJ1biIsCi0gICAgICAgICAgICAgICJFWENFUFRJT04gKDIpOiAiCi0gICAgICAgICAgICAgICAgKyBlMi50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiXG4iCi0gICAgICAgICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUyKSk7Ci0gICAgICAgICAgICAvL2UyLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBhbmQgaXQgaXMgY29tcGxldGUsIHRoZW4gbG9nIGl0Ci0gICAgICAgICAgICBpZiAoKGlzTWVzc2FnZUNvbXBsZXRlKG1lc3NhZ2VDb250ZXh0KSkKLSAgICAgICAgICAgICAgfHwgKG1lc3NhZ2VDb250ZXh0Lm1lc3NhZ2VCdWZmZXIubGVuZ3RoKCkgPiAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gTG9nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgbG9nTWVzc2FnZShtZXNzYWdlQ29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNldCBtZXNzYWdlIGNvbXBsZXRlCi0gICAgICAgICAgICBjb25uZWN0aW9uQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAicnVuIiwKLSAgICAgICAgIkVYQ0VQVElPTiAoMSk6ICIKLSAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgKyAiXG4iCi0gICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUpKTsKLSAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXJyb3IgZXJyKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoInJ1biIsICJFUlJPUjogIiArIGVyci5nZXRNZXNzYWdlKCkpOwotICAgICAgLy9lcnIucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCi0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHNodXRkb3duKCk7Ci0gICAgICBzb2NrZXRDb25uZWN0aW9uLndha2VVcCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHJpdmF0ZSBNZXNzYWdlQ29udGV4dCBwcm9jZXNzTWVzc2FnZSgKLSAgICBpbnQgcmVhZExlbiwKLSAgICBTdHJpbmcgcmVhZE1zZywKLSAgICBNZXNzYWdlQ29udGV4dCBpbk1lc3NhZ2VDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gY29udGludWVSZWFkID0gZmFsc2U7Ci0KLSAgICAvLyBJbml0aWFsaXplIG1lc3NhZ2UgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIE1lc3NhZ2VDb250ZXh0IG1lc3NhZ2VDb250ZXh0ID0gaW5NZXNzYWdlQ29udGV4dDsKLQotICAgIC8vIEdldCBtZXNzYWdlIGJ1ZmZlciBhbmQgY2h1bmtlZCBkYXRhIGZyb20gbWVzc2FnZSBjb250ZXh0Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIgPSBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyOwotICAgIENodW5rZWREYXRhIGNodW5rZWREYXRhID0gbWVzc2FnZUNvbnRleHQuY2h1bmtlZERhdGE7Ci0KLSAgICAvLyBJZiBhbGwgd2UgcmVjZWl2ZWQgd2FzIHRoZSBoZWFkZXIgd2l0aCAxMDAgY29udGludWUsIHRoZW4gaWdub3JlIGl0Ci0gICAgaWYgKChyZWFkTXNnLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihIVFRQXzEwMF9DT05USU5VRSkgIT0gLTEpCi0gICAgICAmJiAocmVhZExlbiA+PSAyNSkpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygicHJvY2Vzc01lc3NhZ2UiLCAiSWdub3JlIEhUVFAgMTAwIENvbnRpbnVlLiIpOwotCi0gICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIEhUVFAgMTAwIG1lc3NhZ2UKLSAgICAgIGludCBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYocmVhZE1zZyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgdGhlIEhUVFAgMTAwIG1lc3NhZ2UsIHRoZW4ganVzdCBpZ25vcmUgaXQKLSAgICAgIGlmIChpbmRleCA9PSByZWFkTXNnLmxlbmd0aCgpKQotICAgICAgICBjb250aW51ZVJlYWQgPSB0cnVlOwotCi0gICAgICAvLyBPdGhlcndpc2UgcmVtb3ZlIHRoZSBIVFRQIDEwMCBtZXNzYWdlIGFuZCBjb250aW51ZQotICAgICAgZWxzZQotICAgICAgICByZWFkTXNnID0gcmVhZE1zZy5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIC8vIEFERDogV2hhdCBpZiBhIGJ5cGFzc2VkIG1lc3NhZ2UgY29udGFpbnMgYW5vdGhlciBtZXNzYWdlIGFmdGVyIGl0PwotICAgIGlmICghY29udGludWVSZWFkICYmIGJ5cGFzc01lc3NhZ2UocmVhZE1zZykpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgIkRvIG5vdCBsb2cgbWVzc2FnZSBhcyBkZWZpbmVkIGluIHRoZSBtb25pdG9yIHNwZWMsIGJ1dCBpdCB3aWxsIGJlIHNlbnQuIik7Ci0KLSAgICAgIGNvbnRpbnVlUmVhZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFjb250aW51ZVJlYWQpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gMDsKLQotICAgICAgLy8gSWYgdGhlcmUgaXMgY2h1bmtlZCBkYXRhLCB0aGVuIGdldCB0aGUgbGVuZ3RoCi0gICAgICBpZiAoKHJlYWRNc2cudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRUQpICE9IC0xKQotICAgICAgICB8fCAocmVhZE1zZy50b1VwcGVyQ2FzZSgpLmluZGV4T2YoQ0hVTktFRF9XSVRIX1FVT1RFUykgIT0gLTEpKQotICAgICAgewotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoInByb2Nlc3NNZXNzYWdlIiwgIlByb2Nlc3NpbmcgY2h1bmtlZCBkYXRhLi4uIik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgQ0ZMRgotICAgICAgICBpZiAoKGluZGV4ID0gcmVhZE1zZy5pbmRleE9mKENSTEYgKyBDUkxGKSkgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIGVuZCBvZiBIVFRQIGhlYWRlci4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEluY2x1ZGUgdGhlIENSTEYrQ1JMRiBpbiB0aGUgaW5kZXgKLSAgICAgICAgaW5kZXggKz0gNDsKLQotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoCi0gICAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgICAiQWRkIGhlYWRlciBiZWZvcmUgZGVjb2RpbmcgY2h1bmtlZCBkYXRhOiBbIgotICAgICAgICAgICAgKyByZWFkTXNnLnN1YnN0cmluZygwLCBpbmRleCkKLSAgICAgICAgICAgICsgIl0iKTsKLQotICAgICAgICAvLyBBZGQgSFRUUCBoZWFkZXIgdG8gYnVmZmVyCi0gICAgICAgIG1lc3NhZ2VCdWZmZXIuYXBwZW5kKHJlYWRNc2cuc3Vic3RyaW5nKDAsIGluZGV4KSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIChpLmUuIGhlYWRlciBvbmx5KSwgdGhlbiBqdXN0IGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbW9yZSBjaHVua2VkIGRhdGEKLSAgICAgICAgaWYgKHJlYWRNc2cubGVuZ3RoKCkgPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICBjaHVua2VkRGF0YSA9IG5ldyBDaHVua2VkRGF0YSh0aGlzLCB0cnVlKTsKLQotICAgICAgICAgIC8vIERFQlVHOgotICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgICAgICJUaGVyZSBpcyBjaHVuayBkYXRhLCBidXQgbm9uZSBpbiB0aGlzIHBhcnQgb2YgdGhlIG1lc3NhZ2UuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHJlbWFpbmRlciBvZiB0aGUgZGF0YSBpcyBjb21wbGV0ZSAoaS5lLiBlbmRzIHdpdGggWzBdW0NSTEZdW09wdGlvbmFsIEZvb3Rlcl1bQ1JMRl0pCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBjaHVua2VkIGRhdGEgb2JqZWN0Ci0gICAgICAgICAgY2h1bmtlZERhdGEgPSBuZXcgQ2h1bmtlZERhdGEodGhpcywgcmVhZE1zZy5zdWJzdHJpbmcoaW5kZXgpKTsKLQotICAgICAgICAgIGlmICghY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaHVua2VkRGF0YS5kZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIobWVzc2FnZUJ1ZmZlcik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKGNodW5rZWREYXRhICE9IG51bGwgJiYgY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIGRlYnVnKCJwcm9jZXNzTWVzc2FnZSIsICJQcm9jZXNzaW5nIE1PUkUgY2h1bmtlZCBkYXRhLi4uIik7Ci0KLSAgICAgICAgLy8gQWRkIGRhdGEKLSAgICAgICAgY2h1bmtlZERhdGEuYWRkRGF0YShyZWFkTXNnKTsKLQotICAgICAgICAvLyBEZWNvZGUgZGF0YQotICAgICAgICBpZiAoIWNodW5rZWREYXRhLmlzTW9yZUNodW5rZWREYXRhKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaHVua2VkRGF0YS5kZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIobWVzc2FnZUJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gRWxzZSBqdXN0IGFwcGVuZCB0aGUgZGF0YSB0byB0aGUgYnVmZmVyCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIERFQlVHOgotICAgICAgICBkZWJ1ZygKLSAgICAgICAgICAicHJvY2Vzc01lc3NhZ2UiLAotICAgICAgICAgICJBZGQgZGF0YSB0byBtZXNzYWdlIGVudHJ5IGJ1ZmZlcjogWyIgKyByZWFkTXNnICsgIl0iKTsKLQotICAgICAgICBtZXNzYWdlQnVmZmVyLmFwcGVuZChyZWFkTXNnKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgdXBkYXRlZCBtZXNzYWdlIGJ1ZmZlciBhbmQgY2h1bmtlZCBkYXRhIGluIG1lc3NhZ2UgY29udGV4dCAgICAKLSAgICBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyID0gbWVzc2FnZUJ1ZmZlcjsKLSAgICBtZXNzYWdlQ29udGV4dC5jaHVua2VkRGF0YSA9IGNodW5rZWREYXRhOwotCi0gICAgLy8gUmV0dXJuIG1lc3NhZ2UgY29udGV4dCAKLSAgICByZXR1cm4gbWVzc2FnZUNvbnRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogU2h1dGRvd24gaW5wdXQgc29ja2V0IGFuZCBjbG9zZSBpbnB1dCBzdHJlYW0uCi0gICAqIEBwYXJhbSBpblNvY2tldCBpbiBzb2NrZXQuCi0gICAqIEBwYXJhbSBpbnB1dFN0cmVhbSBpbnB1dCBzdHJlYW0uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW5wdXQoU29ja2V0IGluU29ja2V0LCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgaW5wdXQgc29ja2V0LCB0aGVuIHNodXRkb3duIHRoZSBpbnB1dAotICAgICAgaWYgKGluU29ja2V0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGluU29ja2V0LnNodXRkb3duSW5wdXQoKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gaW5wdXQgc3RyZWFtIHRoZW4gY2xvc2UgaXQKLSAgICAgIGlmIChpbnB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnB1dFN0cmVhbS5jbG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWdub3JlIHNpbmNlIHdlIGFyZSBzdG9wcGluZyBldmVyeXRoaW5nCi0gICAgfQotCi0gICAgaW5wdXRTdHJlYW0gPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFNodXRkb3duIG91dHB1dCBzb2NrZXQgYW5kIGNsb3NlIG91dHB1dCBzdHJlYW0uCi0gICAqIEBwYXJhbSBvdXRTb2NrZXQgb3V0IHNvY2tldC4KLSAgICogQHBhcmFtIG91dHB1dFN0cmVhbSBvdXRwdXQgc3RyZWFtLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc3RvcE91dHB1dChTb2NrZXQgb3V0U29ja2V0LCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gb3V0cHV0IHN0cmVhbSwgdGhlbiBmbHVzaCBpdAotICAgICAgaWYgKG91dHB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBvdXRwdXRTdHJlYW0uZmx1c2goKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYSBpbnB1dCBzb2NrZXQsIHRoZW4gc2h1dGRvd24gdGhlIGlucHV0Ci0gICAgICBpZiAob3V0U29ja2V0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG91dFNvY2tldC5zaHV0ZG93bk91dHB1dCgpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhbiBvdXRwdXQgc3RyZWFtIHRoZW4gY2xvc2UgaXQKLSAgICAgIGlmIChvdXRwdXRTdHJlYW0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0U3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIElnbm9yZSBzaW5jZSB3ZSBhcmUgc3RvcHBpbmcgZXZlcnl0aGluZwotICAgIH0KLQotICAgIG91dHB1dFN0cmVhbSA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogU2h1dGRvd24gaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNodXRkb3duKCkKLSAgewotICAgIC8vIFN0b3AgYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dAotICAgIHN0b3BJbnB1dCh0aGlzLmluU29ja2V0LCB0aGlzLmlucHV0U3RyZWFtKTsKLSAgICBzdG9wT3V0cHV0KHRoaXMub3V0U29ja2V0LCB0aGlzLm91dHB1dFN0cmVhbSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBkZWJ1ZyBtZXNzYWdlcy4KLSAgICovCi0gIHZvaWQgZGVidWcoU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBkZWJ1ZygiU29ja2V0SGFuZGxlciIsIG1ldGhvZCwgbWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBkZWJ1ZyBtZXNzYWdlcy4KLSAgICovCi0gIHZvaWQgZGVidWcoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgIHByaW50KGNsYXNzTmFtZSwgbWV0aG9kLCBtZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBEaXNwbGF5IG1lc3NhZ2VzLgotICAgKi8KLSAgdm9pZCBwcmludChTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICJbIgotICAgICAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCi0gICAgICAgICsgIl0gWyIKLSAgICAgICAgKyBjbGFzc05hbWUKLSAgICAgICAgKyAiLiIKLSAgICAgICAgKyBtZXRob2QKLSAgICAgICAgKyAiXSBbIgotICAgICAgICArIHRoaXMuY29ubmVjdGlvblR5cGUKLSAgICAgICAgKyAiXSAiCi0gICAgICAgICsgbWVzc2FnZSk7Ci0gIH0KLQotICAvKiogCi0gICAqIFdyaXRlIGRhdGEuCi0gICAqLwotICBwcml2YXRlIHZvaWQgd3JpdGUoCi0gICAgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwKLSAgICBieXRlW10gYnVmZmVyLAotICAgIGludCBzdGFydCwKLSAgICBpbnQgbGVuZ3RoKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKG91dHB1dFN0cmVhbSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoIndyaXRlIiwgIkNvdWxkIG5vdCB3cml0ZSBidWZmZXIgYmVjYXVzZSBvdXRwdXQgc3RyZWFtIGlzIG51bGwuIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKCJ3cml0ZSIsICJidWZmZXI6IFsiICsgbmV3IFN0cmluZyhidWZmZXIsIHN0YXJ0LCBsZW5ndGgpICsgIl0iKTsKLQotICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKGJ1ZmZlciwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIAotICAgKiBDaGVjayBpZiBtZXNzYWdlIGlzIGNvbXBsZXRlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2VDb250ZXh0Ci0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNNZXNzYWdlQ29tcGxldGUoTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW50IGluZGV4LCBpbmRleDIsIGNvbnRlbnRMZW47Ci0gICAgYm9vbGVhbiBtZXNzYWdlQ29tcGxldGUgPSBmYWxzZTsKLQotICAgIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhID0gbWVzc2FnZUNvbnRleHQuY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKTsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gbWVzc2FnZUNvbnRleHQubWVzc2FnZUJ1ZmZlci50b1N0cmluZygpOwotCi0gICAgLy8gRmluZCB0aGUgZmlyc3QgQ1JMRiArIENSTEYgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXIKLSAgICBTdHJpbmcgaHR0cEhlYWRlcjsKLSAgICBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaHR0cEhlYWRlciA9IG1lc3NhZ2U7Ci0gICAgZWxzZQotICAgICAgaHR0cEhlYWRlciA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQotICAgIC8vIElmIGNodW5rZWQgZGF0YSwgdGhlbiBjb21wbGV0ZSBvbmx5IGlmIHRoZXJlIGlzIG5vIG1vcmUgZGF0YQotICAgIGlmICgoKGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRUQpICE9IC0xKQotICAgICAgfHwgKGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRURfV0lUSF9RVU9URVMpICE9IC0xKSkKLSAgICAgICYmICghbW9yZUNodW5rZWREYXRhKSkKLSAgICB7Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzTWVzc2FnZUNvbXBsZXRlIiwKLSAgICAgICAgIkhUVFAgaGVhZGVyIGluZGljYXRlcyBjaHVua2VkIGRhdGEgYW5kIHRoZXJlIGlzIG5vIG1vcmUgY2h1bmtlZCBkYXRhIik7Ci0gICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZvciBjb250ZW50IGxlbmd0aAotICAgIGVsc2UgaWYgKChpbmRleCA9IGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIKSkgPT0gLTEpCi0gICAgewotICAgICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgIkhUVFAgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gY29udGVudCBsZW5ndGgiKTsKLQotICAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIGNvbXBsZXRlIFBPU1QgaGVhZGVyIHdpdGhvdXQgY29udGVudCBsZW5ndGgKLSAgICAgIGlmIChodHRwSGVhZGVyLnN0YXJ0c1dpdGgoIlBPU1QiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGh0dHBIZWFkZXIuZW5kc1dpdGgoQ1JMRiArIENSTEYpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSBjb250ZW50LWxlbmd0aCBpbiBIVFRQIFBPU1QgaGVhZGVyLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBHRVQsIHNvIHNlZSBpZiB0aGUgdGhlIGNvbXBsZXRlIGhlYWRlciBoYXMgYmVlbiByZWNlaXZlZAotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIGh0dHBIZWFkZXIuc3RhcnRzV2l0aCgiR0VUIikKLSAgICAgICAgICAmJiAobWVzc2FnZS5sZW5ndGgoKSA9PSBodHRwSGVhZGVyLmxlbmd0aCgpCi0gICAgICAgICAgICAmJiBtZXNzYWdlLmVuZHNXaXRoKENSTEYgKyBDUkxGKSkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgY29udGVudCBsZW5ndGgsIHRoZW4gc2VlIGlmIHRoZSBlbnRpcmUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZAotICAgIGVsc2UgaWYgKChpbmRleCA9IGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIKSkgIT0gLTEpCi0gICAgewotICAgICAgLy8gRmluZCBlbmQgb2YgY29udGVudCBsZW5ndGggdmFsdWUKLSAgICAgIGluZGV4MiA9IGh0dHBIZWFkZXIuaW5kZXhPZihDUkxGLCBpbmRleCk7Ci0KLSAgICAgIGRlYnVnKCJpc01lc3NhZ2VDb21wbGV0ZSIsICJDUkxGOiAiICsgVXRpbHMudG9IZXhTdHJpbmcoQ1JMRikpOwotICAgICAgZGVidWcoCi0gICAgICAgICJpc01lc3NhZ2VDb21wbGV0ZSIsCi0gICAgICAgICJodHRwSGVhZGVyL2luZGV4OiAiICsgVXRpbHMudG9IZXhTdHJpbmcoaHR0cEhlYWRlci5zdWJzdHJpbmcoaW5kZXgpKSk7Ci0KLSAgICAgIC8vIEdldCBjb250ZW50IGxlbmd0aAotICAgICAgY29udGVudExlbiA9Ci0gICAgICAgIEludGVnZXIKLSAgICAgICAgICAuZGVjb2RlKAotICAgICAgICAgICAgaHR0cEhlYWRlci5zdWJzdHJpbmcoaW5kZXggKyBDT05URU5UX0xFTkdUSC5sZW5ndGgoKSArIDEsIGluZGV4MikpCi0gICAgICAgICAgLmludFZhbHVlKCk7Ci0KLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgImNvbnRlbnRMZW46ICIgKyBjb250ZW50TGVuKTsKLQotICAgICAgLy8gRmluZCB0aGUgZmlyc3QgQ1JMRiArIENSTEYgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXIKLSAgICAgIGluZGV4ID0gVXRpbHMuZ2V0Rmlyc3RDUkxGQ1JMRihtZXNzYWdlKTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzTWVzc2FnZUNvbXBsZXRlIiwKLSAgICAgICAgImFjdHVhbCByZWNlaXZlZCBtZXNzYWdlIGxlbmd0aDogIiArIChtZXNzYWdlLmxlbmd0aCgpIC0gKGluZGV4KSkpOwotCi0gICAgICAvLyBJZiBjb250ZW50IGxlbmd0aCBpcyBlcXVhbCB0byBhY3R1YWwgbWVzc2FnZSBjb250ZW50IGxlbmd0aCwgdGhlbiBtZXNzYWdlIGlzIGNvbXBsZXRlCi0gICAgICBpZiAoY29udGVudExlbiA9PSBtZXNzYWdlLmxlbmd0aCgpIC0gaW5kZXgpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIGRlYnVnKAotICAgICAgICAgICJpc01lc3NhZ2VDb21wbGV0ZSIsCi0gICAgICAgICAgImNvbnRlbnRMZW4gPSBhY3R1YWwgcmVjZWl2ZWQgbWVzc2FnZSBsZW5ndGguIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWVzc2FnZSBpcyBub3QgY29tcGxldGUKLSAgICBlbHNlCi0gICAgewotICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gREVCVUc6Ci0gICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgIm1lc3NhZ2VDb21wbGV0ZTogIiArIG1lc3NhZ2VDb21wbGV0ZSk7Ci0KLSAgICByZXR1cm4gbWVzc2FnZUNvbXBsZXRlOwotICB9Ci0KLSAgLyoqIAotICAgKiBMb2cgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyCi0gICAqLwotICBwcml2YXRlIHZvaWQgbG9nTWVzc2FnZShNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gRGV0ZXJtaW5lIHNlbmRlciBhbmQgcmVjZWl2ZXIgaG9zdC9wb3J0Ci0gICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LCByZWNlaXZlckhvc3RBbmRQb3J0OwotCi0gICAgLy8gUmVxdWVzdAotICAgIGlmIChjb25uZWN0aW9uVHlwZS5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgewotICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPQotICAgICAgICBpblNvY2tldC5nZXRJbmV0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBpblNvY2tldC5nZXRQb3J0KCk7Ci0gICAgICByZWNlaXZlckhvc3RBbmRQb3J0ID0gdGFyZ2V0SG9zdCArICI6IiArIG91dFNvY2tldC5nZXRQb3J0KCk7Ci0gICAgfQotCi0gICAgLy8gUmVzcG9uc2UgICAgICAKLSAgICBlbHNlCi0gICAgewotICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPSB0YXJnZXRIb3N0ICsgIjoiICsgaW5Tb2NrZXQuZ2V0UG9ydCgpOwotICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydCA9Ci0gICAgICAgIG91dFNvY2tldC5nZXRJbmV0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBvdXRTb2NrZXQuZ2V0UG9ydCgpOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGVudHJ5Ci0gICAgdGhpcy5zb2NrZXRDb25uZWN0aW9uLmxvZ01lc3NhZ2UoCi0gICAgICBjb252ZXJzYXRpb25JRCwKLSAgICAgIHRoaXMuY29ubmVjdGlvblR5cGUsCi0gICAgICBtZXNzYWdlQ29udGV4dC50aW1lc3RhbXAsCi0gICAgICBzZW5kZXJIb3N0QW5kUG9ydCwKLSAgICAgIHJlY2VpdmVySG9zdEFuZFBvcnQsCi0gICAgICBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyLAotICAgICAgbWVzc2FnZUNvbnRleHQuYm9tLAotICAgICAgbWVzc2FnZUNvbnRleHQuZW5jb2RpbmcpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGZvciBIVFRQIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBsb2dnZWQuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYnlwYXNzTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIGJvb2xlYW4gYnlwYXNzID0gZmFsc2U7Ci0gICAgaWYgKChtZXNzYWdlLnN0YXJ0c1dpdGgoIkNPTk5FQ1QiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIlRSQUNFIikpCi0gICAgICB8fCAobWVzc2FnZS5zdGFydHNXaXRoKCJERUxFVEUiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIk9QVElPTlMiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIkhFQUQiKSkpCi0gICAgewotICAgICAgYnlwYXNzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnlwYXNzOwotICB9Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIC8qKgotICAgKiBTZXQgRW5jb2RpbmcgUGFyYW1ldGVycwotICAgKiBAcGFyYW0gbWVzc2FnZUZyYWdtZW50IFN0cmluZyBvZiBhIEhUVFAgbWVzc2FnZSBmcmFnbWVudC4KLSAgICogQGF1dGhvciBLLk5ha2Fnb21lQEJlYWNvbklUIEphcGFuIFNJRyAKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgbWVzc2FnZUZyYWdtZW50KQotICB7Ci0gICAgaWYgKG1pbWVDaGFyc2V0ID09IG51bGwgfHwgbWltZUNoYXJzZXQubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9IFV0aWxzLmdldEhUVFBDaGFyc2V0KG1lc3NhZ2VGcmFnbWVudCk7Ci0gICAgfQotICAgIGlmICh4bWxFbmNvZGluZyA9PSBudWxsIHx8IHhtbEVuY29kaW5nLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgeG1sRW5jb2RpbmcgPSBVdGlscy5nZXRYTUxFbmNvZGluZyhtZXNzYWdlRnJhZ21lbnQpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBFbmNvZGluZyBQYXJhbWV0ZXIKLSAgICogQHJldHVybiBDaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgSFRUUCBtZXNzYWdlLgotICAgKiBAYXV0aG9yIEsuTmFrYWdvbWVAQmVhY29uSVQgSmFwYW4gU0lHIAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RW5jb2RpbmcoKQotICB7Ci0gICAgU3RyaW5nIGVuY29kaW5nID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HOwotICAgIGlmIChtaW1lQ2hhcnNldCAhPSBudWxsICYmIG1pbWVDaGFyc2V0Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBlbmNvZGluZyA9IG1pbWVDaGFyc2V0OwotICAgIH0KLSAgICBpZiAoeG1sRW5jb2RpbmcgIT0gbnVsbCAmJiB4bWxFbmNvZGluZy5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgZW5jb2RpbmcgPSB4bWxFbmNvZGluZzsKLSAgICB9Ci0gICAgcmV0dXJuIGVuY29kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgQnl0ZSBPcmRlciBNYXJrIGZyb20gdGhlIG1lc3NhZ2UgKGlmIHRoZXJlIGlzIG9uZSkuCi0gICAqLwotICBwcml2YXRlIGludCBnZXRCT00oYnl0ZVtdIG1lc3NhZ2UpCi0gIHsKLSAgICBpbnQgYm9tID0gMDsKLQotICAgIGJ5dGUgRkYgPSAoYnl0ZSkgMHhGRjsKLSAgICBieXRlIEZFID0gKGJ5dGUpIDB4RkU7Ci0gICAgYnl0ZSBFRiA9IChieXRlKSAweEVGOwotICAgIGJ5dGUgQkIgPSAoYnl0ZSkgMHhCQjsKLSAgICBieXRlIEJGID0gKGJ5dGUpIDB4QkY7Ci0KLSAgICAvLyBTZWFyY2ggdGhyb3VnaCB0aGUgYnl0ZSBhcnJheSBmb3IgQ1JMRitDUkxGLiAgVGhpcyB3aWxsIG1hcmsgdGhlIGVuZCBvZiB0aGUgaGVhZGVyLgotICAgIGludCBpID0gVXRpbHMuZ2V0Rmlyc3RDUkxGQ1JMRihtZXNzYWdlLCAwKTsKLSAgICBpZiAoaSAhPSAtMSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAiZ2V0Qk9NIiwKLSAgICAgICAgIm1lc3NhZ2VbaV06ICIKLSAgICAgICAgICArIG1lc3NhZ2VbaV0KLSAgICAgICAgICArICIsIG1lc3NhZ2VbaSsxXTogIgotICAgICAgICAgICsgbWVzc2FnZVtpKzFdKTsKLQotICAgICAgLy8gQ2hlY2sgZm9yIFVURi04IEJPTQotICAgICAgaWYgKCgoaSArIDIpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICYmIG1lc3NhZ2VbaV0gPT0gRUYKLSAgICAgICAgJiYgbWVzc2FnZVtpKzFdID09IEJCCi0gICAgICAgICYmIG1lc3NhZ2VbaSsyXSA9PSBCRikKLSAgICAgIHsKLSAgICAgICAgYm9tID0gMHhFRkJCQkY7Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBmb3IgVVRGLTE2IGJpZy1lbmRpYW4gQk9NCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKChpKzEpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICAgJiYgbWVzc2FnZVtpXSA9PSBGRQotICAgICAgICAgICYmIG1lc3NhZ2VbaSArIDFdID09IEZGKQotICAgICAgewotICAgICAgICBib20gPSAweEZFRkY7Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBmb3IgVVRGLTE2IGxpdHRsZS1lbmRpYW4gQk9NCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKChpKzEpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICAgJiYgbWVzc2FnZVtpXSA9PSBGRgotICAgICAgICAgICYmIG1lc3NhZ2VbaSsxXSA9PSBGRSkKLSAgICAgIHsKLSAgICAgICAgYm9tID0gMHhGRkZFOwotICAgICAgfQotICAgICAgLy8gQUREOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBCT01zCi0gICAgfQotICAgIHJldHVybiBib207Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSByZWFkIGlzIHN0aWxsIHdhaXRpbmcgZm9yIGRhdGEuCi0gICAqLwotICBib29sZWFuIGlzUmVhZFdhaXRpbmcoKQotICB7Ci0gICAgYm9vbGVhbiByZWFkV2FpdGluZyA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzUmVhZFdhaXRpbmciLAotICAgICAgICAiaW5Tb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKS5hdmFpbGFibGUoKTogIgotICAgICAgICAgICsgaW5Tb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKS5hdmFpbGFibGUoKSk7Ci0KLSAgICAgIGlmIChpblNvY2tldC5nZXRJbnB1dFN0cmVhbSgpLmF2YWlsYWJsZSgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHJlYWRXYWl0aW5nID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVhZFdhaXRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlYWQgdGltZWQgb3V0IGZsYWcuCi0gICAqLwotICBib29sZWFuIGlzUmVhZFRpbWVkT3V0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlYWRUaW1lZE91dDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXNzYWdlIGNvbnRleHQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lc3NhZ2UgdGhhdCBpcyBiZWluZyBwcm9jZXNzZWQuCi0gICAqLwotICBjbGFzcyBNZXNzYWdlQ29udGV4dAotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXI7Ci0gICAgQ2h1bmtlZERhdGEgY2h1bmtlZERhdGE7Ci0gICAgU3RyaW5nIHRpbWVzdGFtcDsKLSAgICBpbnQgYm9tOwotICAgIFN0cmluZyBlbmNvZGluZzsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBuZXcgbWVzc2FnZSBjb250ZXh0LgotICAgICAqLwotICAgIE1lc3NhZ2VDb250ZXh0KCkKLSAgICB7Ci0gICAgICBtZXNzYWdlQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgY2h1bmtlZERhdGEgPSBuZXcgQ2h1bmtlZERhdGEoKTsKLSAgICAgIHRpbWVzdGFtcCA9IG51bGw7Ci0gICAgICBib20gPSAwOwotICAgICAgZW5jb2RpbmcgPSBXU0lDb25zdGFudHMuREVGQVVMVF9YTUxfRU5DT0RJTkc7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Db21tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Db21tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZTRhZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvQ29tbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBtb25pdG9yIGNvbmZpZyBDb21tZW50IGVsZW1lbnQuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tZW50IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGNvbW1lbnQgdGV4dC4KLSAgICogQHJldHVybiBjb21tZW50IHRleHQuCi0gICAqIEBzZWUgI3NldFRleHQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpOwotCi0gIC8qKgotICAgKiBTZXQgY29tbWVudCB0ZXh0LgotICAgKiBAcGFyYW0gdGV4dCB0aGUgY29tbWVudCB0ZXh0LgotICAgKiBAc2VlICNnZXRUZXh0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01hbkluVGhlTWlkZGxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9NYW5JblRoZU1pZGRsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWMwYWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01hbkluVGhlTWlkZGxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbW9uaXRvciBjb25maWcgTWFuSW5UaGVNaWRkbGUgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hbkluVGhlTWlkZGxlIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9NQU5fSU5fVEhFX01JRERMRTsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBjb21tZW50LgotICAgKiBAcmV0dXJuIGNvbW1lbnQuCi0gICAqIEBzZWUgI3NldENvbW1lbnQKLSAgICovCi0gIHB1YmxpYyBDb21tZW50IGdldENvbW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0IGNvbW1lbnQuCi0gICAqIEBwYXJhbSBjb21tZW50IHRoZSBDb21tZW50IG9iamVjdC4KLSAgICogQHNlZSAjZ2V0Q29tbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpOwotCi0gIC8qKgotICAgKiBHZXQgcmVkaXJlY3RzLgotICAgKiBAcmV0dXJuIHRoZSByZWRpcmlyZWN0cy4KLSAgICogQHNlZSAjc2V0UmVkaXJlY3RMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFJlZGlyZWN0TGlzdCgpOwotCi0gIC8qKgotICAgKiBBZGQgcmVkaXJlY3QuCi0gICAqIEBwYXJhbSByZWRpcmVjdCB0aGUgUmVkaXJlY3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUmVkaXJlY3QoUmVkaXJlY3QgcmVkaXJlY3QpOwotCi0gIC8qKgotICAgKiBTZXQgcmVkaXJlY3RzLgotICAgKiBAcGFyYW0gcmVkaXJlY3RMaXN0IGEgbGlzdCBvZiB0aGUgcmVkaXJlY3RzLgotICAgKiBAc2VlICNnZXRSZWRpcmVjdExpc3QgCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWRpcmVjdExpc3QoVmVjdG9yIHJlZGlyZWN0TGlzdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZGYxZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvTW9uaXRvckNvbmZpZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1vbml0b3JDb25maWcgZXh0ZW5kcyBXU0lEb2N1bWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgbE1lc3NhZ2VMaXN0IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpOwotCi0gIC8qKgotICAgKiBHZXQgY29tbWVudC4KLSAgICogQHJldHVybiBjb21tZW50LgotICAgKiBAc2VlICNzZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIENvbW1lbnQgb2JqZWN0LgotICAgKiBAc2VlICNnZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KENvbW1lbnQgY29tbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBsb2cgZmlsZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGxvZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gbG9nVVJJIGxvZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRMb2dMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nTG9jYXRpb24oU3RyaW5nIGxvZ1VSSSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBsYWNlIGxvZy4KLSAgICogQHJldHVybiByZXBsYWNlIGxvZy4KLSAgICogQHNlZSAjc2V0UmVwbGFjZUxvZwotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0UmVwbGFjZUxvZygpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwbGFjZSBsb2cuCi0gICAqIEBwYXJhbSByZXBsYWNlTG9nIGEgcmVwbGFjZSBsb2cuCi0gICAqIEBzZWUgI2dldFJlcGxhY2VMb2cKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcGxhY2VMb2coYm9vbGVhbiByZXBsYWNlTG9nKTsKLQotICAvKioKLSAgICogR2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHJldHVybiBhZGQgc3R5bGUgc2hlZXQuCi0gICAqIEBzZWUgI3NldEFkZFN0eWxlU2hlZXQKLSAgICovCi0gIHB1YmxpYyBBZGRTdHlsZVNoZWV0IGdldEFkZFN0eWxlU2hlZXQoKTsKLQotICAvKioKLSAgICogU2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYWRkIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNnZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZHVyYXRpb24uCi0gICAqIEByZXR1cm4gbG9nIGR1cmF0aW9uLgotICAgKiBAc2VlICNzZXRMb2dEdXJhdGlvbgotICAgKi8KLSAgcHVibGljIGludCBnZXRMb2dEdXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgbG9nIGR1cmF0aW9uLgotICAgKiBAcGFyYW0gbG9nRHVyYXRpb24gbG9nIGR1cmF0aW9uLgotICAgKiBAc2VlICNnZXRMb2dEdXJhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nRHVyYXRpb24oaW50IGxvZ0R1cmF0aW9uKTsKLQotICAvKioKLSAgICogR2V0IHRpbWVvdXQuCi0gICAqIEByZXR1cm4gdGltZW91dC4KLSAgICogQHNlZSAjc2V0VGltZW91dAotICAgKi8KLSAgcHVibGljIGludCBnZXRUaW1lb3V0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aW1lb3V0LgotICAgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0LgotICAgKiBAc2VlICNnZXRUaW1lb3V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KTsKLQotICAvKioKLSAgICogR2V0IG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAcmV0dXJuIG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNzZXRNYW5JblRoZU1pZGRsZQotICAgKi8KLSAgcHVibGljIE1hbkluVGhlTWlkZGxlIGdldE1hbkluVGhlTWlkZGxlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBtYW4taW4tdGhlLW1pZGRsZSBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIG1hbkluVGhlTWlkZGxlIG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNnZXRNYW5JblRoZU1pZGRsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWFuSW5UaGVNaWRkbGUoTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUpOwotCi0gIC8qKgotICAgKiBHZXQgdmVyYm9zZSBvcHRpb24uCi0gICAqIEByZXR1cm4gdmVyYm9zZSBvcHRpb24uCi0gICAqIEBzZWUgI3NldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHZlcmJvc2Ugb3B0aW9uLgotICAgKiBAcGFyYW0gdmVyYm9zZSB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0VmVyYm9zZU9wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYm9zZU9wdGlvbihib29sZWFuIHZlcmJvc2UpOwotCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHBhcnNpbmcgdGhlIAotICAgKiAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUFyZ3MoU3RyaW5nW10gYXJncykgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01vbml0b3JDb25maWdSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01vbml0b3JDb25maWdSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmYmQwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHJlYWQgdGhlIG1vbml0b3IgY29uZmlnIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1vbml0b3JDb25maWdSZWFkZXIgZXh0ZW5kcyBEb2N1bWVudFJlYWRlcgotewotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgTWVzc2FnZUxpc3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIG1vbml0b3IgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSBtb25pdG9yQ29uZmlnVVJJIHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIGEgTW9uaXRvckNvbmZpZyBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgd2hpbGUgcmVhZGluZyBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgcmVhZE1vbml0b3JDb25maWcoU3RyaW5nIG1vbml0b3JDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogUmVhZCB0aGUgbW9uaXRvciBjb25maWcgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBNb25pdG9yQ29uZmlnIG9iamVjdAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciB3aGlsZSByZWFkaW5nIG1vbml0b3IgY29uZmlnIGZpbGUuCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZyByZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvUmVkaXJlY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL1JlZGlyZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzA4MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvUmVkaXJlY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIG1vbml0b3IgY29uZmlnIFJlZGlyZWN0IGVsZW1lbnQuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZWRpcmVjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVESVJFQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBHZXQgY29tbWVudC4KLSAgICogQHJldHVybiBjb21tZW50LgotICAgKiBAc2VlICNzZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIENvbW1lbnRvYmplY3QuCi0gICAqIEBzZWUgI2dldENvbW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbW1lbnQoQ29tbWVudCBjb21tZW50KTsKLQotICAvKioKLSAgICogR2V0IGxpc3RlbiBwb3J0LgotICAgKiBAcmV0dXJuIGxpc3RlbiBwb3J0LgotICAgKiBAc2VlICNzZXRMaXN0ZW5Qb3J0Ci0gICAqLwotICBwdWJsaWMgaW50IGdldExpc3RlblBvcnQoKTsKLQotICAvKioKLSAgICogU2V0IGxpc3RlbiBwb3J0LgotICAgKiBAcGFyYW0gbGlzdGVuUG9ydCBsaXN0ZW4gcG9ydC4KLSAgICogQHNlZSAjZ2V0TGlzdGVuUG9ydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGlzdGVuUG9ydChpbnQgbGlzdGVuUG9ydCk7Ci0KLSAgLyoqCi0gICAqIEdldCBob3N0LgotICAgKiBAcmV0dXJuIGhvc3QuCi0gICAqIEBzZWUgI3NldEhvc3QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpOwotCi0gIC8qKgotICAgKiBTZXQgaG9zdC4KLSAgICogQHBhcmFtIGhvc3QgIGhvc3QuCi0gICAqIEBzZWUgI2dldEhvc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhvc3QoU3RyaW5nIGhvc3QpOwotCi0gIC8qKgotICAgKiBHZXQgc2VuZCB0byBwb3J0LgotICAgKiBAcmV0dXJuIHNlbmQgdG8gcG9ydC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0VG9Qb3J0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzZW5kIHRvIGhvc3QuCi0gICAqIEByZXR1cm4gc2VuZCB0byBob3N0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUb0hvc3QoKTsKLQotICAvKioKLSAgICogR2V0IHNlbmQgdG8gcHJvdG9jb2wuCi0gICAqIEByZXR1cm4gc2VuZCB0byBwcm90b2NvbC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Qcm90b2NvbCgpOwotCi0gIC8qKgotICAgKiBHZXQgbWF4aW11bSBjb25uZWN0aW9ucy4KLSAgICogQHJldHVybiBtYXhpbXVtIGNvbm5lY3Rpb25zLgotICAgKiBAc2VlICNzZXRNYXhDb25uZWN0aW9ucwotICAgKi8KLSAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpOwotCi0gIC8qKgotICAgKiBTZXQgbWF4aW11bSBjb25uZWN0aW9ucy4KLSAgICogQHBhcmFtIG1heENvbm5lY3Rpb25zIG1heGltdW0gY29ubmVjdGlvbnMuCi0gICAqIEBzZWUgI2dldE1heENvbm5lY3Rpb25zCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNYXhDb25uZWN0aW9ucyhpbnQgbWF4Q29ubmVjdGlvbnMpOwotCi0gIC8qKgotICAgKiBHZXQgcmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqIEByZXR1cm4gcmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqIEBzZWUgI3NldFJlYWRUaW1lb3V0U2Vjb25kcwotICAgKi8KLSAgcHVibGljIGludCBnZXRSZWFkVGltZW91dFNlY29uZHMoKTsKLQotICAvKioKLSAgICogU2V0IHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKiBAcGFyYW0gcmVhZFRpbWVvdXRTZWNvbmRzIHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKiBAc2VlICNnZXRSZWFkVGltZW91dFNlY29uZHMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlYWRUaW1lb3V0U2Vjb25kcyhpbnQgcmVhZFRpbWVvdXRTZWNvbmRzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvQ29tbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvQ29tbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjMDliNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL0NvbW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIG1vbml0b3IgY29uZmlnIENvbW1lbnQgZWxlbWVudC4gCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tZW50SW1wbCBpbXBsZW1lbnRzIENvbW1lbnQKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQgdGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGV4dCA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Db21tZW50I2dldFRleHQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRleHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLkNvbW1lbnQjc2V0VGV4dChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KQotICB7Ci0gICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgLy9wdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiB4bWxucz1cIiIgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRyArICJcIj4iKTsgICAgCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy50ZXh0KTsKLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gdGV4dDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01hbkluVGhlTWlkZGxlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9NYW5JblRoZU1pZGRsZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU4ZmE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01hbkluVGhlTWlkZGxlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbW9uaXRvciBjb25maWcgTWFuSW5UaGVNaWRkbGUgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTWFuSW5UaGVNaWRkbGVJbXBsIGltcGxlbWVudHMgTWFuSW5UaGVNaWRkbGUKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50OwotCi0gIC8qKgotICAgKiBSZWRpcmVjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciByZWRpcmVjdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNnZXRDb21tZW50KCkKLSAgICovCi0gIHB1YmxpYyBDb21tZW50IGdldENvbW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuY29tbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGUjc2V0Q29tbWVudChDb21tZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNnZXRSZWRpcmVjdExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRSZWRpcmVjdExpc3QoKQotICB7Ci0gICAgcmV0dXJuIHJlZGlyZWN0TGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGUjYWRkUmVkaXJlY3QoUmVkaXJlY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRSZWRpcmVjdChSZWRpcmVjdCByZWRpcmVjdCkKLSAgewotICAgIHJlZGlyZWN0TGlzdC5hZGQocmVkaXJlY3QpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNzZXRSZWRpcmVjdExpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVkaXJlY3RMaXN0KFZlY3RvciByZWRpcmVjdExpc3QpCi0gIHsKLSAgICB0aGlzLnJlZGlyZWN0TGlzdCA9IHJlZGlyZWN0TGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgbWFuLWluLXRoZS1taWRkbGUgY29tbWVudCAuLi4gIiArIHRoaXMuY29tbWVudCk7Ci0KLSAgICAvLyBSZWRpcmVjdCBsaXN0Ci0gICAgaW50IGNvdW50ID0gMTsKLSAgICBSZWRpcmVjdCByZWRpcmVjdDsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHJlZGlyZWN0TGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgcmVkaXJlY3QgZWxlbWVudAotICAgICAgcmVkaXJlY3QgPSAoUmVkaXJlY3QpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHB3LnByaW50bG4oIiAgcmVkaXJlY3QgWyIgKyBjb3VudCsrICsiXSIpOwotICAgICAgcHcucHJpbnQocmVkaXJlY3QudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBTdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gQ29tbWVudAotICAgIGlmICh0aGlzLmNvbW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludGxuKHRoaXMuY29tbWVudC50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBSZWRpcmVjdAotICAgIFJlZGlyZWN0IHJlZGlyZWN0OwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcmVkaXJlY3RMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbmV4dCByZWRpcmVjdCBlbGVtZW50Ci0gICAgICByZWRpcmVjdCA9IChSZWRpcmVjdCkgaXRlcmF0b3IubmV4dCgpOwotICAgICAgcHcucHJpbnQocmVkaXJlY3QudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODY5NjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvTW9uaXRvckNvbmZpZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5Nb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTW9uaXRvckNvbmZpZ0ltcGwgaW1wbGVtZW50cyBNb25pdG9yQ29uZmlnCi17Ci0gIC8qKgotICAgKiBNZXNzYWdlIGxpc3QgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogTW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dVUkk7Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2UgbG9nIGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHJlcGxhY2VMb2cgPSBmYWxzZTsKLQotICAvKioKLSAgICogU3R5bGUgc2hlZXQgZGVjbGFyYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0OwotCi0gIC8qKgotICAgKiBMb2cgZHVyYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGxvZ0R1cmF0aW9uID0gNjAwOwotCi0gIC8qKgotICAgKiBUaW1lb3V0LgotICAgKi8KLSAgcHJvdGVjdGVkIGludCB0aW1lb3V0ID0gMzsKLQotICAvKioKLSAgICogTWFuLWluLXRoZS1taWRkbGUgc2V0dGluZ3MuCi0gICAqLwotICBwcm90ZWN0ZWQgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBWZXJib3NlIG9wdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbWVzc2FnZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0Q29tbWVudCgpCi0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0Q29tbWVudChDb21tZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI2dldExvZ0xvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubG9nVVJJOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI3NldExvZ0xvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpCi0gIHsKLSAgICB0aGlzLmxvZ1VSSSA9IGxvZ1VSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRSZXBsYWNlTG9nKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJlcGxhY2VMb2coKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwbGFjZUxvZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNzZXRSZXBsYWNlTG9nKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlTG9nKGJvb2xlYW4gcmVwbGFjZUxvZykKLSAgewotICAgIHRoaXMucmVwbGFjZUxvZyA9IHJlcGxhY2VMb2c7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0QWRkU3R5bGVTaGVldCgpCi0gICAqLwotICBwdWJsaWMgQWRkU3R5bGVTaGVldCBnZXRBZGRTdHlsZVNoZWV0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0QWRkU3R5bGVTaGVldChvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCkKLSAgewotICAgIHRoaXMuYWRkU3R5bGVTaGVldCA9IGFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0TG9nRHVyYXRpb24oKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMb2dEdXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbG9nRHVyYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0TG9nRHVyYXRpb24oaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nRHVyYXRpb24oaW50IGxvZ0R1cmF0aW9uKQotICB7Ci0gICAgdGhpcy5sb2dEdXJhdGlvbiA9IGxvZ0R1cmF0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI2dldFRpbWVvdXQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRUaW1lb3V0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRpbWVvdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0VGltZW91dChpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KQotICB7Ci0gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRNYW5JblRoZU1pZGRsZSgpCi0gICAqLwotICBwdWJsaWMgTWFuSW5UaGVNaWRkbGUgZ2V0TWFuSW5UaGVNaWRkbGUoKQotICB7Ci0gICAgcmV0dXJuIG1hbkluVGhlTWlkZGxlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI3NldE1hbkluVGhlTWlkZGxlKE1hbkluVGhlTWlkZGxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWFuSW5UaGVNaWRkbGUoTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUpCi0gIHsKLSAgICB0aGlzLm1hbkluVGhlTWlkZGxlID0gbWFuSW5UaGVNaWRkbGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRWZXJib3NlT3B0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudmVyYm9zZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4gdmVyYm9zZSkKLSAgewotICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDb25maWcgb3B0aW9ucwotICAgIHB3LnByaW50bG4oIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBDb21tZW50Ci0gICAgaWYgKHRoaXMuY29tbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KGNvbW1lbnQudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gTG9nIGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9MT0dfRklMRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfUkVQTEFDRSArICI9XCIiICsgdGhpcy5yZXBsYWNlTG9nICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04gKyAiPVwiIiArIHRoaXMubG9nVVJJICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldEFkZFN0eWxlU2hlZXQoKS50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFICsgIj4iKTsKLQotICAgIC8vIExvZyBkdXJhdGlvbgotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy5sb2dEdXJhdGlvbik7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0RVUkFUSU9OICsgIj4iKTsKLQotICAgIC8vIFRpbWVvdXQKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0NMRUFOVVBfVElNRU9VVF9TRUNPTkRTICsgIj4iKTsKLSAgICBwdy5wcmludCh0aGlzLnRpbWVvdXQpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0NMRUFOVVBfVElNRU9VVF9TRUNPTkRTICsgIj4iKTsKLQotICAgIC8vIE1hbi1pbi10aGUtbWlkZGxlCi0gICAgaWYgKHRoaXMubWFuSW5UaGVNaWRkbGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChtYW5JblRoZU1pZGRsZS50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgY29tbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuY29tbWVudCk7Ci0gICAgcHcucHJpbnRsbigiICBsb2dVUkkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dVUkkpOwotICAgIHB3LnByaW50bG4oIiAgcmVwbGFjZUxvZyAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMucmVwbGFjZUxvZyk7Ci0gICAgcHcucHJpbnRsbigiICBsb2dEdXJhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dEdXJhdGlvbik7Ci0gICAgcHcucHJpbnRsbigiICB0aW1lb3V0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy50aW1lb3V0KTsKLQotICAgIC8vIGFkZFN0eWxlU2hlZXQKLSAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0ICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKAotICAgICAgICAiICBhZGRTdHlsZVNoZWV0IC4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5hZGRTdHlsZVNoZWV0LnRvU3RyaW5nKCkpOwotCi0gICAgLy8gTWFuLWluLXRoZS1taWRkbGUKLSAgICBpZiAodGhpcy5tYW5JblRoZU1pZGRsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KHRoaXMubWFuSW5UaGVNaWRkbGUudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGNvbmZpZyB2YWx1ZXMgZnJvbSBhbm90aGVyIG1vbml0b3IgY29uZmlnIG9iamVjdC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRDb25maWcoTW9uaXRvckNvbmZpZyBtb25pdG9yQ29uZmlnKQotICB7Ci0gICAgLy8gQUREOiBTaG91bGQgdGhpcyBiZSBhIGNsb25lIG9wZXJhdGlvbj8KLSAgICB0aGlzLmNvbW1lbnQgPSBtb25pdG9yQ29uZmlnLmdldENvbW1lbnQoKTsKLSAgICB0aGlzLmRvY3VtZW50VVJJID0gbW9uaXRvckNvbmZpZy5nZXRMb2NhdGlvbigpOwotICAgIHRoaXMubG9nVVJJID0gbW9uaXRvckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpOwotICAgIHRoaXMucmVwbGFjZUxvZyA9IG1vbml0b3JDb25maWcuZ2V0UmVwbGFjZUxvZygpOwotICAgIHRoaXMubG9nRHVyYXRpb24gPSBtb25pdG9yQ29uZmlnLmdldExvZ0R1cmF0aW9uKCk7Ci0gICAgdGhpcy50aW1lb3V0ID0gbW9uaXRvckNvbmZpZy5nZXRUaW1lb3V0KCk7Ci0gICAgdGhpcy5tYW5JblRoZU1pZGRsZSA9IG1vbml0b3JDb25maWcuZ2V0TWFuSW5UaGVNaWRkbGUoKTsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBtb25pdG9yQ29uZmlnLmdldEFkZFN0eWxlU2hlZXQoKTsKLSAgICB0aGlzLnZlcmJvc2UgPSBtb25pdG9yQ29uZmlnLmdldFZlcmJvc2VPcHRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBWZXJpZnkgY29uZmlnIG9wdGlvbnMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5Q29uZmlnKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgbm8gcmVkaXJlY3Qgc3RhdGVtZW50cywgdGhlbiBleGl0Ci0gICAgaWYgKCh0aGlzLm1hbkluVGhlTWlkZGxlID09IG51bGwpCi0gICAgICB8fCAodGhpcy5tYW5JblRoZU1pZGRsZS5nZXRSZWRpcmVjdExpc3QoKSA9PSBudWxsKQotICAgICAgfHwgKHRoaXMubWFuSW5UaGVNaWRkbGUuZ2V0UmVkaXJlY3RMaXN0KCkuc2l6ZSgpID09IDApKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA1IiwKLSAgICAgICAgICAiTW9uaXRvciBjb25maWcgZmlsZSBkaWQgbm90IGNvbnRhaW4gYW55IHJlZGlyZWN0IHN0YXRlbWVudHMuIikpOwotICAgIH0KLQotICAgIGlmICh0aGlzLmxvZ1VSSSA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAiTW9uaXRvciBjb25maWcgZmlsZSBkaWQgbm90IGNvbnRhaW4gdGhlIGxvZyBmaWxlIFVSSS4iKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VBcmdzKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBuZXcgY29uZmlnIHJlYWRlcgotICAgIE1vbml0b3JDb25maWdSZWFkZXIgbW9uaXRvckNvbmZpZ1JlYWRlciA9IG5ldyBNb25pdG9yQ29uZmlnUmVhZGVySW1wbCgpOwotCi0gICAgLy8gTW9uaXRvciBjb25maWcgb2JqZWN0IHdoaWNoIHdpbGwgYmUgbWVyZ2VkIGFmdGVyIGFsbCBvZiB0aGUgaW5wdXQgcGFybXMgYXJlIHByb2Nlc3NlZAotICAgIE1vbml0b3JDb25maWcgbW9uaXRvckNvbmZpZ0Zyb21BcmdzID0gbnVsbDsKLQotICAgIC8vIElmIG5vIGlucHV0IGFyZ3VtZW50cywgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICAvLyBBREQ6IAotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgidXNhZ2UwMSIsIE1vbml0b3IuVVNBR0VfTUVTU0FHRSkpOwotICAgIH0KLQotICAgIC8vIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGxvY2F0ZSB0aGUgY29uZmlnIGZpbGUgb3B0aW9uIChpZiBpdCB3YXMgc3BlY2lmaWVkKQotICAgIGZvciAoaW50IGFyZ0NvdW50ID0gMDsgYXJnQ291bnQgPCBhcmdzLmxlbmd0aDsgYXJnQ291bnQrKykKLSAgICB7Ci0gICAgICAvLyAtY29uZmlnRmlsZQotICAgICAgaWYgKChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItY29uZmlnIikpCi0gICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1jIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3MgPQotICAgICAgICAgIG1vbml0b3JDb25maWdSZWFkZXIucmVhZE1vbml0b3JDb25maWcoYXJnc1thcmdDb3VudF0pOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGNvbmZpZyBmaWxlIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNyZWF0ZSBhbmFseXplciBjb25maWcgb2JqZWN0Ci0gICAgaWYgKG1vbml0b3JDb25maWdGcm9tQXJncyA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vbml0b3JDb25maWdGcm9tQXJncyA9IG5ldyBNb25pdG9yQ29uZmlnSW1wbCgpOwotICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgYWxsIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWdGaWxlCi0gICAgICBpZiAoKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb25maWciKSkKLSAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLWMiKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNraXAgdGhpcyBvcHRpb24gc2luY2UgaXQgd2FzIGFscmVhZHkgcHJvY2Vzc2VkCi0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1jb21tZW50Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb21tZW50IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUMiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoYXJnc1thcmdDb3VudF0pOwotICAgICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gLWxvZ0ZpbGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWxvZ0ZpbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldExvZ0xvY2F0aW9uKGFyZ3NbYXJnQ291bnRdKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXJlcGxhY2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXJlcGxhY2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItciIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldFJlcGxhY2VMb2coCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGFyZ3NbYXJnQ291bnRdKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1sb2dEdXJhdGlvbgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbG9nRHVyYXRpb24iKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItZCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldExvZ0R1cmF0aW9uKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuaW50VmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC10aW1lb3V0Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi10aW1lb3V0IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLXQiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIG1vbml0b3JDb25maWdGcm9tQXJncy5zZXRUaW1lb3V0KAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuaW50VmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1tYW5JblRoZU1pZGRsZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbWFuSW5UaGVNaWRkbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbSIpKSkKLSAgICAgIHsKLSAgICAgICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBudWxsOwotCi0gICAgICAgIC8vIEluY3JlbWVudCBhcmcgY291bnQKLSAgICAgICAgYXJnQ291bnQrKzsKLQotICAgICAgICAvLyBHZXQgdGhlIG1hbi1pbi10aGUtbWlkZGxlIG9iamVjdAotICAgICAgICBpZiAoKG1hbkluVGhlTWlkZGxlID0gbW9uaXRvckNvbmZpZ0Zyb21BcmdzLmdldE1hbkluVGhlTWlkZGxlKCkpCi0gICAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgICBtYW5JblRoZU1pZGRsZSA9IG5ldyBNYW5JblRoZU1pZGRsZUltcGwoKTsKLQotICAgICAgICAvLyBBREQ6IENoZWNrIGZvciBjb3JyZWN0IG51bWJlciBvZiByZW1haW5pbmcgYXJncwotCi0gICAgICAgIC8vIENyZWF0ZSByZWRpcmVjdAotICAgICAgICBSZWRpcmVjdCByZWRpcmVjdCA9IG5ldyBSZWRpcmVjdEltcGwoKTsKLQotICAgICAgICAvLyBHZXQgdGhlIHJlZGlyZWN0IHZhbHVlcyAKLSAgICAgICAgcmVkaXJlY3Quc2V0TGlzdGVuUG9ydChJbnRlZ2VyLnZhbHVlT2YoYXJnc1thcmdDb3VudCsrXSkuaW50VmFsdWUoKSk7Ci0gICAgICAgIHJlZGlyZWN0LnNldEhvc3QoYXJnc1thcmdDb3VudCsrXSk7Ci0gICAgICAgIHJlZGlyZWN0LnNldE1heENvbm5lY3Rpb25zKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50KytdKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgcmVkaXJlY3Quc2V0UmVhZFRpbWVvdXRTZWNvbmRzKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50KytdKS5pbnRWYWx1ZSgpKTsKLQotICAgICAgICAvLyBBZGQgcmVkaXJlY3QKLSAgICAgICAgbWFuSW5UaGVNaWRkbGUuYWRkUmVkaXJlY3QocmVkaXJlY3QpOwotCi0gICAgICAgIC8vIFNldCB0aGUgbWFuLWluLXRoZS1taWRkbGUKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldE1hbkluVGhlTWlkZGxlKG1hbkluVGhlTWlkZGxlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXZlcmJvc2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXZlcmJvc2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItdiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgLy9tb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0VmVyYm9zZU9wdGlvbihCb29sZWFuLnZhbHVlT2YoYXJnc1thcmdDb3VudF0pLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldFZlcmJvc2VPcHRpb24odHJ1ZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1HVUkKLSAgICAgIGVsc2UgaWYgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1HVUkiKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWdub3JlIC1HVUkgb3B0aW9uCi0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzAxIiwKLSAgICAgICAgICAgIGFyZ3NbYXJnQ291bnRdLAotICAgICAgICAgICAgIlRoZSBzcGVjaWZpZWQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIikpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGFkZFN0eWxlU2hlZXQgd2FzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY3JlYXRlIGEgY29tbWVudCB2ZXJzaW9uIG9mIGl0Ci0gICAgaWYgKG1vbml0b3JDb25maWdGcm9tQXJncy5nZXRBZGRTdHlsZVNoZWV0KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0SHJlZihXU0lDb25zdGFudHMuREVGQVVMVF9MT0dfWFNMKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0VHlwZShXU0lDb25zdGFudHMuREVGQVVMVF9YU0xfVFlQRSk7Ci0gICAgICBhZGRTdHlsZVNoZWV0LnNldENvbW1lbnQodHJ1ZSk7Ci0gICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICB9Ci0KLSAgICAvLyBNZXJnZSBjb25maWcgaW5mbyBpbnRvIHRoaXMgb2JqZWN0Ci0gICAgc2V0Q29uZmlnKG1vbml0b3JDb25maWdGcm9tQXJncyk7Ci0KLSAgICAvLyBWZXJpZnkgY29uZmlnIG9wdGlvbnMKLSAgICB2ZXJpZnlDb25maWcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJRCwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlELCBudWxsLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKAotICAgIFN0cmluZyBtZXNzYWdlSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgZWxzZQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YSArICIuIjsKLQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01vbml0b3JDb25maWdSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01vbml0b3JDb25maWdSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNGFiY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCB0byByZWFkIHRoZSBtb25pdG9yIGNvbmZpZyBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1vbml0b3JDb25maWdSZWFkZXJJbXBsIGltcGxlbWVudHMgTW9uaXRvckNvbmZpZ1JlYWRlcgotewotICAvKioKLSAgICogTWVzc2FnZSBsaXN0IHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbWVzc2FnZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXIjcmVhZE1vbml0b3JDb25maWcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgcmVhZE1vbml0b3JDb25maWcoU3RyaW5nIG1vbml0b3JDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihtb25pdG9yQ29uZmlnVVJJKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgiY29uZmlnMDIiLCBtb25pdG9yQ29uZmlnVVJJLCAiQ291bGQgbm90IGZpbmQgZmlsZToiKSwKLSAgICAgICAgZm5mZSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoImNvbmZpZzAzIiwgbW9uaXRvckNvbmZpZ1VSSSwgIkNvdWxkIG5vdCByZWFkIGZpbGU6IiksCi0gICAgICAgIGUpOwotICAgIH0KLQotICAgIHJldHVybiByZWFkTW9uaXRvckNvbmZpZyhmaWxlUmVhZGVyKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlciNyZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIpCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZyByZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcgPSBuZXcgTW9uaXRvckNvbmZpZ0ltcGwoKTsKLQotICAgIC8vIFBhcnNlIFhNTAotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlYWRlcik7Ci0KLSAgICAvLyBQYXJzZSBlbGVtZW50cyBpbiB0aGUgY29uZmlnIGRvY3VtZW50Ci0gICAgcGFyc2VDb25maWdFbGVtZW50KG1vbml0b3JDb25maWcsIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0KLSAgICByZXR1cm4gbW9uaXRvckNvbmZpZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudFVSSSA9IGRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGNvbmZpZyBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQ29uZmlnRWxlbWVudChNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcsIEVsZW1lbnQgZWxlbWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBBREQ6IFZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgYm9vbGVhbiBpc0xvZ0R1cmF0aW9uRGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc0NsZWFudXBUaW1lb3V0U2Vjb25kc0RlZmluZSA9IGZhbHNlOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8bG9nRmlsZT4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUGFyc2UgdGhlIGxvZyBlbGVtZW50Ci0gICAgICAgIHBhcnNlTG9nRmlsZUVsZW1lbnQobW9uaXRvckNvbmZpZywgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8bG9nRHVyYXRpb24+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTikpCi0gICAgICB7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0TG9nRHVyYXRpb24oZ2V0SW50VmFsdWUobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaWYgKG1vbml0b3JDb25maWcuZ2V0TG9nRHVyYXRpb24oKSA8IDApCi0gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgICAgICJjb25maWcwOSIsCi0gICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiwKLSAgICAgICAgICAgICAgIlBhcmFtZXRlciB2YWx1ZSBjYW4ndCBiZSBuZWdhdGl2ZS4gRWxlbWVudCBuYW1lOiIpKTsKLSAgICAgICAgaXNMb2dEdXJhdGlvbkRlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUykpCi0gICAgICB7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0VGltZW91dChnZXRJbnRWYWx1ZShuZXh0RWxlbWVudCkpOwotICAgICAgICBpZiAobW9uaXRvckNvbmZpZy5nZXRUaW1lb3V0KCkgPCAwKQotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgICAiY29uZmlnMDkiLAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUywKLSAgICAgICAgICAgICAgIlBhcmFtZXRlciB2YWx1ZSBjYW4ndCBiZSBuZWdhdGl2ZS4gRWxlbWVudCBuYW1lOiIpKTsKLSAgICAgICAgaXNDbGVhbnVwVGltZW91dFNlY29uZHNEZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8bWFuSW5UaGVNaWRkbGU+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX01BTl9JTl9USEVfTUlERExFKSkKLSAgICAgIHsKLSAgICAgICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBuZXcgTWFuSW5UaGVNaWRkbGVJbXBsKCk7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0TWFuSW5UaGVNaWRkbGUobWFuSW5UaGVNaWRkbGUpOwotICAgICAgICBwYXJzZU1hbkluVGhlTWlkZGxlRWxlbWVudChtYW5JblRoZU1pZGRsZSwgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8Y29tbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkpCi0gICAgICB7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICBtb25pdG9yQ29uZmlnLnNldENvbW1lbnQoY29tbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQUREOiBoYW5kbGUgaW52YWxpZCBlbGVtZW50cwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzTG9nRHVyYXRpb25EZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiwKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotICAgIH0KLSAgICBpZiAoIWlzQ2xlYW51cFRpbWVvdXRTZWNvbmRzRGVmaW5lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEwIiwKLSAgICAgICAgICBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUywKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBsb2dGaWxlIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VMb2dGaWxlRWxlbWVudCgKLSAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgbG9jYXRpb24gYXR0cmlidXRlCi0gICAgbW9uaXRvckNvbmZpZy5zZXRMb2dMb2NhdGlvbigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OKSk7Ci0KLSAgICAvLyBHZXQgdGhlIHJlcGxhY2UgYXR0cmlidXRlCi0gICAgbW9uaXRvckNvbmZpZy5zZXRSZXBsYWNlTG9nKAotICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1JFUExBQ0UsIGZhbHNlKSk7Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8YWRkU3R5bGVTaGVldD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FERF9TVFlMRV9TSEVFVCkpCi0gICAgICB7Ci0gICAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotCi0gICAgICAgIC8vIFBhcnNlIHRoZSBlbGVtZW50ICAKLSAgICAgICAgVGVzdFV0aWxzLnBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICBhZGRTdHlsZVNoZWV0LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX0xPR19YU0wpOwotCi0gICAgICAgIC8vIFNldCBhZGQgc3R5bGUgc2hlZXQKLSAgICAgICAgbW9uaXRvckNvbmZpZy5zZXRBZGRTdHlsZVNoZWV0KGFkZFN0eWxlU2hlZXQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEFERDogaGFuZGxlIGludmFsaWQgZWxlbWVudHMKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIG1hbkludGhlTWlkZGxlIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VNYW5JblRoZU1pZGRsZUVsZW1lbnQoCi0gICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDxyZWRpcmVjdD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1JFRElSRUNUKSkKLSAgICAgIHsKLSAgICAgICAgUmVkaXJlY3QgcmVkaXJlY3QgPSBuZXcgUmVkaXJlY3RJbXBsKCk7Ci0gICAgICAgIG1hbkluVGhlTWlkZGxlLmFkZFJlZGlyZWN0KHJlZGlyZWN0KTsKLSAgICAgICAgcGFyc2VSZWRpcmVjdEVsZW1lbnQocmVkaXJlY3QsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gPGNvbW1lbnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQpKQotICAgICAgewotICAgICAgICBDb21tZW50IGNvbW1lbnQgPSBuZXcgQ29tbWVudEltcGwoKTsKLSAgICAgICAgY29tbWVudC5zZXRUZXh0KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgbWFuSW5UaGVNaWRkbGUuc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBBREQ6IGhhbmRsZSBpbnZhbGlkIGVsZW1lbnRzCi0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBuZXh0IGVsZW1lbnQKLSAgICAgIG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcobmV4dEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSByZWRpcmVjdCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlUmVkaXJlY3RFbGVtZW50KFJlZGlyZWN0IHJlZGlyZWN0LCBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIGJvb2xlYW4gaXNMaXN0ZW5Qb3J0RGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc1NjaGVtZUFuZEhvc3RQb3J0RGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc01heENvbm5lY3Rpb25zRGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc1JlYWRUaW1lb3V0U2Vjb25kc0RlZmluZSA9IGZhbHNlOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8bGlzdGVuUG9ydD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xJU1RFTl9QT1JUKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0TGlzdGVuUG9ydChnZXRJbnRWYWx1ZShuZXh0RWxlbWVudCkpOwotICAgICAgICBpc0xpc3RlblBvcnREZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8c2NoZW1lQW5kSG9zdFBvcnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQpKQotICAgICAgewotICAgICAgICByZWRpcmVjdC5zZXRIb3N0KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaXNTY2hlbWVBbmRIb3N0UG9ydERlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtYXhDb25uZWN0aW9ucz4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0TWF4Q29ubmVjdGlvbnMoZ2V0SW50VmFsdWUobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaXNNYXhDb25uZWN0aW9uc0RlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxyZWFkVGltZW91dFNlY29uZHM+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0UmVhZFRpbWVvdXRTZWNvbmRzKGdldEludFZhbHVlKG5leHRFbGVtZW50KSk7Ci0gICAgICAgIGlmIChyZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzA5IiwKLSAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMsCi0gICAgICAgICAgICAgICJQYXJhbWV0ZXIgdmFsdWUgY2FuJ3QgYmUgbmVnYXRpdmUuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaXNSZWFkVGltZW91dFNlY29uZHNEZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8Y29tbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkpCi0gICAgICB7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICByZWRpcmVjdC5zZXRDb21tZW50KGNvbW1lbnQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEFERDogaGFuZGxlIGludmFsaWQgZWxlbWVudHMKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotCi0gICAgaWYgKCFpc0xpc3RlblBvcnREZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xJU1RFTl9QT1JULAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICAgIGlmICghaXNTY2hlbWVBbmRIb3N0UG9ydERlZmluZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxMCIsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fU0NIRU1FX0FORF9IT1NUUE9SVCwKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotCi0gICAgfQotICAgIGlmICghaXNNYXhDb25uZWN0aW9uc0RlZmluZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxMCIsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TLAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICAgIGlmICghaXNSZWFkVGltZW91dFNlY29uZHNEZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTLAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgYW5hbHl6ZXIgY29uZmlnIG5hbWVzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0VsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgcmV0dXJuIGlzRWxlbWVudCgKLSAgICAgIGVsZW1lbnQsCi0gICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywKLSAgICAgIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgU3RyaW5nIG5hbWVzcGFjZSwKLSAgICBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgcmV0dXJuIFhNTFV0aWxzLmlzRWxlbWVudChlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVsZW1lbnQgdGV4dCBhcyBhbiBpbnQuCi0gICAqLwotICBwcml2YXRlIGludCBnZXRJbnRWYWx1ZShFbGVtZW50IGVsZW1lbnQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGludCByZXR1cm5WYWx1ZTsKLSAgICBTdHJpbmcgaW50VmFsdWUgPSBudWxsOwotCi0gICAgLy8gR2V0IHZhbHVlIGFzIGEgc3RyaW5nCi0gICAgaWYgKChpbnRWYWx1ZSA9IFhNTFV0aWxzLmdldFRleHQoZWxlbWVudCkpID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMDQiLAotICAgICAgICAgIGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkgKyAiRWxlbWVudCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlciB2YWx1ZToiKSk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVyblZhbHVlID0gSW50ZWdlci52YWx1ZU9mKGludFZhbHVlKS5pbnRWYWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBpbnQKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSUQsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlKG1lc3NhZ2VJRCwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgbWVzc2FnZUlELAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlOwotICAgIGlmIChtZXNzYWdlTGlzdCAhPSBudWxsKQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9SZWRpcmVjdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvUmVkaXJlY3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZDE2OWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9SZWRpcmVjdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLkNvbW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci0KLS8qKgotICogIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgbW9uaXRvciBjb25maWcgUmVkaXJlY3QgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVkaXJlY3RJbXBsIGltcGxlbWVudHMgUmVkaXJlY3QKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50OwotCi0gIC8qKgotICAgKiBMaXN0ZW4gcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgbGlzdGVuUG9ydDsKLQotICAvKioKLSAgICogSG9zdC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgaG9zdDsKLQotICAvKioKLSAgICogVG8gcHJvdG9jb2wuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHRvUHJvdG9jb2w7Ci0KLSAgLyoqCi0gICAqIFRvIHBvcnQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IHRvUG9ydDsKLQotICAvKioKLSAgICogVG8gaG9zdC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdG9Ib3N0OwotCi0gIC8qKgotICAgKiBNYXhpbXVtIGNvbm5lY3Rpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBtYXhDb25uZWN0aW9uczsKLQotICAvKioKLSAgICogUmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IHJlYWRUaW1lb3V0U2Vjb25kczsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldENvbW1lbnQoKQotICAgKi8KLSAgcHVibGljIENvbW1lbnQgZ2V0Q29tbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNzZXRDb21tZW50KGNvbW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KENvbW1lbnQgY29tbWVudCkKLSAgewotICAgIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldExpc3RlblBvcnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMaXN0ZW5Qb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmxpc3RlblBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldExpc3RlblBvcnQoaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGlzdGVuUG9ydChpbnQgbGlzdGVuUG9ydCkKLSAgewotICAgIHRoaXMubGlzdGVuUG9ydCA9IGxpc3RlblBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldEhvc3QoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIb3N0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmhvc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldEhvc3QoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SG9zdChTdHJpbmcgaG9zdCkKLSAgewotICAgIHRoaXMuaG9zdCA9IGhvc3Q7Ci0KLSAgICAvLyBQYXJzZSBsb2NhdGlvbiB0byBnZXQgcHJvdG9jb2wsIGhvc3QgYW5kIHBvcnQKLSAgICBVUkwgdXJsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHVybCA9IG5ldyBVUkwoaG9zdCk7Ci0gICAgICB0aGlzLnRvUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICAgIHRoaXMudG9Ib3N0ID0gdXJsLmdldEhvc3QoKTsKLSAgICAgIHRoaXMudG9Qb3J0ID0gdXJsLmdldFBvcnQoKTsKLSAgICAgIGlmICh0aGlzLnRvUG9ydCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHRoaXMudG9Qcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJodHRwIikpCi0gICAgICAgICAgdGhpcy50b1BvcnQgPSA4MDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRoaXMudG9Qb3J0ID0gODA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlRoZSAiCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUCi0gICAgICAgICAgKyAiIG9wdGlvbiBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVlOiAiCi0gICAgICAgICAgKyBob3N0KTsKLSAgICB9Ci0KLSAgICBpZiAoKHVybC5nZXRQYXRoKCkgIT0gbnVsbCAmJiAhdXJsLmdldFBhdGgoKS5lcXVhbHMoIiIpKQotICAgICAgfHwgKHVybC5nZXRRdWVyeSgpICE9IG51bGwgJiYgIXVybC5nZXRRdWVyeSgpLmVxdWFscygiIikpKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlRoZSAiCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUCi0gICAgICAgICAgKyAiIG9wdGlvbiBtdXN0IGNvbnRhaW4gb25seSBhIHNjaGVtZSwgaG9zdCBhbmQgcG9ydDogIgotICAgICAgICAgICsgaG9zdCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRvIHBvcnQuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRUb1BvcnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRUb1BvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudG9Qb3J0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0byBob3N0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kubW9uaXRvci5jb25maWcuUmVkaXJlY3QjZ2V0VG9Ib3N0KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Ib3N0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRvSG9zdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdG8gcHJvdG9jb2wuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRUb1Byb3RvY29sKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Qcm90b2NvbCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50b1Byb3RvY29sOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRNYXhDb25uZWN0aW9ucygpCi0gICAqLwotICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1heENvbm5lY3Rpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNzZXRNYXhDb25uZWN0aW9ucyhpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNYXhDb25uZWN0aW9ucyhpbnQgbWF4Q29ubmVjdGlvbnMpCi0gIHsKLSAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gbWF4Q29ubmVjdGlvbnM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldFJlYWRUaW1lb3V0U2Vjb25kcygpCi0gICAqLwotICBwdWJsaWMgaW50IGdldFJlYWRUaW1lb3V0U2Vjb25kcygpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZWFkVGltZW91dFNlY29uZHM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldFJlYWRUaW1lb3V0U2Vjb25kcyhpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWFkVGltZW91dFNlY29uZHMoaW50IHJlYWRUaW1lb3V0U2Vjb25kcykKLSAgewotICAgIHRoaXMucmVhZFRpbWVvdXRTZWNvbmRzID0gcmVhZFRpbWVvdXRTZWNvbmRzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgICAgY29tbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmNvbW1lbnQpOwotICAgIHB3LnByaW50bG4oIiAgICBsaXN0ZW5Qb3J0IC4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMubGlzdGVuUG9ydCk7Ci0gICAgcHcucHJpbnRsbigiICAgIGhvc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgY3V0SG9zdCh0aGlzLmhvc3QpKTsKLSAgICBwdy5wcmludGxuKCIgICAgbWF4Q29ubmVjdGlvbnMgLi4uLi4uLi4uLi4uICIgKyB0aGlzLm1heENvbm5lY3Rpb25zKTsKLSAgICBwdy5wcmludGxuKCIgICAgcmVhZFRpbWVvdXRTZWNvbmRzIC4uLi4uLi4uICIgKyB0aGlzLnJlYWRUaW1lb3V0U2Vjb25kcyk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBGb3JtYXRzIGhvc3QgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gKHBhdGggaXMgb21taXRlZCkuCi0gICAqIEBwYXJhbSBob3N0Ci0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGN1dEhvc3QoU3RyaW5nIGhvc3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gbmV3IFVSTChob3N0KTsKLSAgICAgIFN0cmluZyBwb3J0ID0gdXJsLmdldFBvcnQoKSA+IC0xID8gU3RyaW5nLnZhbHVlT2YodXJsLmdldFBvcnQoKSkgOiAiODAiOwotICAgICAgLy8gUkVNT1ZFRDogVGhpcyBjb2RlIG9ubHkgd29ya3Mgb24gMS40Ci0gICAgICAvLyBTdHJpbmcudmFsdWVPZih1cmwuZ2V0RGVmYXVsdFBvcnQoKSk7Ci0gICAgICByZXR1cm4gdXJsLmdldFByb3RvY29sKCkgKyAiOi8vIiArIHVybC5nZXRIb3N0KCkgKyAiOiIgKyBwb3J0OwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGhvc3Q7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gU3RhcnQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRURJUkVDVCArICI+Iik7Ci0KLSAgICAvLyBDb21tZW50Ci0gICAgaWYgKHRoaXMuY29tbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4odGhpcy5jb21tZW50LnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIGxpc3RlblBvcnQKLSAgICBwdy5wcmludCgiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTElTVEVOX1BPUlQgKyAiPiIpOwotICAgIHB3LnByaW50KGdldExpc3RlblBvcnQoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTElTVEVOX1BPUlQgKyAiPiIpOwotCi0gICAgLy8gc2NoZW1lQW5kSG9zdFBvcnQKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUICsgIj4iKTsKLSAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGdldEhvc3QoKSkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQgKyAiPiIpOwotCi0gICAgLy8gbWF4Q29ubmVjdGlvbnMKLSAgICBwdy5wcmludCgiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRNYXhDb25uZWN0aW9ucygpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NQVhfQ09OTkVDVElPTlMgKyAiPiIpOwotCi0gICAgLy8gcmVhZFRpbWVvdXRTZWNvbmRzCi0gICAgcHcucHJpbnQoCi0gICAgICAiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMgKyAiPiIpOwotICAgIHB3LnByaW50KGdldFJlYWRUaW1lb3V0U2Vjb25kcygpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRUFEX1RJTUVPVVRfU0VDT05EUyArICI+Iik7Ci0KLSAgICAvLyBFbmQgRWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVESVJFQ1QgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9FbnRyeVR5cGVMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL0VudHJ5VHlwZUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4ZDEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL0VudHJ5VHlwZUxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGEgcHJvZmlsZSBFbnRyeVR5cGVMaXN0LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5VHlwZUxpc3QgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIExvZyBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19JTlBVVF9OT05FID0gIm5vbmUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfSU5QVVRfUkVRVUVTVCA9ICJyZXF1ZXN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX0lOUFVUX1JFU1BPTlNFID0gInJlc3BvbnNlIjsKLQotICAvKioKLSAgICogV1NETCBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfSU5QVVRfTk9ORSA9ICJub25lIjsKLQotICAvKioKLSAgICogVURESSBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVERElfSU5QVVRfTk9ORSA9ICJub25lIjsKLQotICAvKioKLSAgICogR2V0IGxvZyBpbnB1dC4KLSAgICogQHJldHVybiBsb2cgaW5wdXQuCi0gICAqIEBzZWUgI3NldExvZ0lucHV0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0lucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBsb2cgaW5wdXQuCi0gICAqIEBwYXJhbSBsb2dJbnB1dCBsb2cgaW5wdXQuCi0gICAqIEBzZWUgI2dldExvZ0lucHV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dJbnB1dChTdHJpbmcgbG9nSW5wdXQpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBpbnB1dC4KLSAgICogQHJldHVybiBXU0RMIGlucHV0LgotICAgKiBAc2VlICNzZXRXU0RMSW5wdXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETElucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGlucHV0LgotICAgKiBAcGFyYW0gd3NkbElucHV0IFdTREwgaW5wdXQuCi0gICAqIEBzZWUgI2dldFdTRExJbnB1dAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETElucHV0KFN0cmluZyB3c2RsSW5wdXQpOwotCi0gIC8qKgotICAgKiBHZXQgVURESSBpbnB1dC4KLSAgICogQHJldHVybiBVRERJIGlucHV0LgotICAgKiBAc2VlICNzZXRVRERJSW5wdXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VURESUlucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIGlucHV0LgotICAgKiBAcGFyYW0gdWRkaUlucHV0IFVEREkgaW5wdXQuCi0gICAqIEBzZWUgI2dldFVERElJbnB1dAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESUlucHV0KFN0cmluZyB1ZGRpSW5wdXQpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Byb2ZpbGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMyNmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gbWFpbnRhaW4gUHJvZmlsZSBpbmZvcm1hdGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBQcm9maWxlIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFydGlmYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Byb2ZpbGVBcnRpZmFjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTM0ZjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFydGlmYWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLQotLyoqCi0gKiBBbiBhcnRpZmFjdCBjb250YWlucyBhIHNldCBvZiByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVBcnRpZmFjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCB0eXBlLgotICAgKiBAcmV0dXJuIGFydGlmYWN0IHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBBcnRpZmFjdFR5cGUgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgYW4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHNlZSAjZ2V0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShBcnRpZmFjdFR5cGUgdHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBzcGVjaWZpY2F0aW9uIGxpc3QuCi0gICAqIEByZXR1cm4gc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAc2VlICNzZXRTcGVjaWZpY2F0aW9uTGlzdAotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRTcGVjaWZpY2F0aW9uTGlzdCgpOwotCi0gIC8qKgotICAgKiBTZXQgc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAcGFyYW0gc3BlY2lmaWNhdGlvbkxpc3Qgc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAc2VlICNnZXRTcGVjaWZpY2F0aW9uTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yIHNwZWNpZmljYXRpb25MaXN0KTsKLQotICAvKioKLSAgICogR2V0IHRlc3QgYXNzZXJ0aW9uIGxpc3QuCi0gICAqIEByZXR1cm4gdGVzdCBhc3NlcnRpb24gbGlzdC4KLSAgICovCi0gIHB1YmxpYyBMaW5rZWRMaXN0IGdldFRlc3RBc3NlcnRpb25MaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGlkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIFRlc3RBc3NlcnRpb24gZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcgaWQpOwotCi0gIC8qKgotICAgKiBBZGQgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9ucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzY3NzYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFzc2VydGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgbWFpbnRhaW5zIHByb2ZpbGUgYXNzZXJ0aW9ucy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBQcm9maWxlQXNzZXJ0aW9ucyBleHRlbmRzIFdTSURvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9QUk9GSUxFX0FTU0VSVElPTlM7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHByb2ZpbGVzLgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgcHJvZmlsZXMuCi0gICAqIEBzZWUgI3NldFByb2ZpbGVMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFByb2ZpbGVMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBsaXN0IG9mIHByb2ZpbGVzLgotICAgKiBAcGFyYW0gcHJvZmlsZUxpc3QgbGlzdCBvZiBwcm9maWxlcy4KLSAgICogQHNlZSAjZ2V0UHJvZmlsZUxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2ZpbGVMaXN0KFZlY3RvciBwcm9maWxlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIEFkZCBwcm9maWxlLgotICAgKiBAcGFyYW0gcHJvZmlsZSBwcm9maWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUHJvZmlsZShQcm9maWxlIHByb2ZpbGUpOwotCi0gIC8qKgotICAgKiBHZXQgbGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gbGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqIEBzZWUgI3NldEFydGlmYWN0TGlzdAotICAgKi8KLSAgcHVibGljIFRyZWVNYXAgZ2V0QXJ0aWZhY3RMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHR5cGUgYW4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHJldHVybiBhIHByb2ZpbGUgYXJ0aWZhY3QgYmFzZWQgb24gdGhlIGdpdmVuIHR5cGUuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFydGlmYWN0IGdldEFydGlmYWN0KFN0cmluZyB0eXBlKTsKLQotICAvKioKLSAgICogU2V0IGxpc3Qgb2YgYXJ0aWZhY3RzLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RMaXN0IGEgbGlzdCBwZiBwcm9maWxlIGFydGlmaWFjdHMuCi0gICAqIEBzZWUgI2dldEFydGlmYWN0TGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXJ0aWZhY3RMaXN0KFRyZWVNYXAgYXJ0aWZhY3RMaXN0KTsKLQotICAvKioKLSAgICogQWRkIGFydGlmYWN0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgcHJvZmlsZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0KFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGlkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIFRlc3RBc3NlcnRpb24gZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcgaWQpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBwcm9maWxlIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRBRE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnROYW1lIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRBRE5hbWUoU3RyaW5nIGRvY3VtZW50TmFtZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQURWZXJzaW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbiBkb2N1bWVudC4KLSAgICogQHBhcmFtIGRvY3VtZW50VmVyc2lvbiB0aGUgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUQURWZXJzaW9uKFN0cmluZyBkb2N1bWVudFZlcnNpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGIwYTNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIGEgcHJvZmlsZSBhc3NlcnRpb25zIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIGV4dGVuZHMgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIFJlYWQgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uc1VSSSBoZSBwcm9maWxlIGFzc2VydGlvbnMgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiB0aGUgUHJvZmlsZUFzc2VydGlvbnMgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VyIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgcmVhZFByb2ZpbGVBc3NlcnRpb25zKFN0cmluZyBhc3NlcnRpb25zVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyAgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIFByb2ZpbGVBc3NlcnRpb25zIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gIGlmIHByb2JsZW0gb2NjdXIgd2hpbGUgcmVhZGluZyB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXNzZXJ0aW9ucyByZWFkUHJvZmlsZUFzc2VydGlvbnMoUmVhZGVyIHJlYWRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9UZXN0QXNzZXJ0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Rlc3RBc3NlcnRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBlYTRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Rlc3RBc3NlcnRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICogQSB0ZXN0IGFzc2VydGlvbiBpcyBvbmUgYXNzZXJ0aW9uIGluIGEgcHJvZmlsZSBkZWZpbml0aW9uLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBUZXN0QXNzZXJ0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfSU5GT1JNQVRJT05BTCA9ICJpbmZvcm1hdGlvbmFsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9SRUNPTU1FTkRFRCA9ICJyZWNvbW1lbmRlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfUkVRVUlSRUQgPSAicmVxdWlyZWQiOwotICAvKioKLSAgICogR2V0IHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAc2VlICNzZXRJZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSBpZCB0ZXN0IGFzc2VydGlvbiBpZC4KLSAgICogQHNlZSAjZ2V0SWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbiB0eXBlLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uIHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gdHlwZS4KLSAgICogQHBhcmFtICB0eXBlIHRlc3QgYXNzZXJ0aW9uIHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEByZXR1cm4gdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEBzZWUgI3NldEVudHJ5VHlwZU5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW50cnlUeXBlTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEBwYXJhbSBlbnRyeVR5cGVOYW1lIHRlc3QgYXNzZXJ0aW9uIHByaW1hcnkgZW50cnkgdHlwZSBuYW1lLgotICAgKiBAc2VlICNnZXRFbnRyeVR5cGVOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeVR5cGVOYW1lKFN0cmluZyBlbnRyeVR5cGVOYW1lKTsKLQotICAvKioKLSAgICogR2V0IGVuYWJsZWQgaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIGVuYWJsZWQgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRFbmFibGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKTsKLQotICAvKioKLSAgICogU2V0ICBlbmFibGVkIGluZGljYXRvci4KLSAgICogQHBhcmFtIGVuYWJsZWQgZW5hYmxlZCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2lzRW5hYmxlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwotCi0gIC8qKgotICAgKiBHZXQgY29udGV4dC4KLSAgICogQHJldHVybiBjb250ZXh0LgotICAgKiBAc2VlICNzZXRDb250ZXh0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHQoKTsKLQotICAvKioKLSAgICogU2V0IGNvbnRleHQuCi0gICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQuCi0gICAqIEBzZWUgI2dldENvbnRleHQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoU3RyaW5nIGNvbnRleHQpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbkRlc2NyaXB0aW9uIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZyBhc3NlcnRpb25EZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBmYWlsdXJlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAc2VlICNzZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGYWlsdXJlTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXQgZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZmFpbHVyZU1lc3NhZ2UgZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZU1lc3NhZ2UoU3RyaW5nIGZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IGZhaWx1cmUgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIGZhaWx1cmUgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBkZXRhaWwgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXREZXRhaWxEZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXRhaWxEZXNjcmlwdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gZGV0YWlsRGVzY3JpcHRpb24gZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNnZXREZXRhaWxEZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGRldGFpbERlc2NyaXB0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAcmV0dXJuIGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAc2VlICNzZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdAotICAgKi8KLSAgcHVibGljIEVudHJ5VHlwZUxpc3QgZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKTsKLQotICAvKioKLSAgICogU2V0IGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAcGFyYW0gZW50cnlUeXBlTGlzdCBhZGRpdGlvbmFsIGVudHJ5IHR5cGUgbGlzdC4KLSAgICogQHNlZSAjZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHByZXJlcSBpZHMuCi0gICAqIEByZXR1cm4gbGlzdCBvZiBwcmVyZXEgaWRzLgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRQcmVyZXFJZExpc3QoKTsKLQotICAvKioKLSAgICogQWRkIHByZXJlcSB0ZXN0IGFzc2VydGlvbiBpZC4KLSAgICogQHBhcmFtICBwcmVyZXFJZCBwcmVyZXEgdGVzdCBhc3NlcnRpb24gaWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcmVyZXFJZChTdHJpbmcgcHJlcmVxSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL0VudHJ5VHlwZUxpc3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvRW50cnlUeXBlTGlzdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4MWYyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvRW50cnlUeXBlTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotCi0vKioKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgdXNlZCB0byBtYWludGFpbiBhIHByb2ZpbGUgRW50cnlUeXBlTGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5VHlwZUxpc3RJbXBsIGltcGxlbWVudHMgRW50cnlUeXBlTGlzdAotewotICAvKioKLSAgICogTG9nIGlucHV0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFdTREwgaW5wdXQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFVEREkgaW5wdXQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHVkZGlJbnB1dCA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLkVudHJ5VHlwZUxpc3QjZ2V0TG9nSW5wdXQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2dJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2dJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I3NldExvZ0lucHV0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0lucHV0KFN0cmluZyBsb2dJbnB1dCkKLSAgewotICAgIHRoaXMubG9nSW5wdXQgPSBsb2dJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I2dldFdTRExJbnB1dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdTRExJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCNzZXRXU0RMSW5wdXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETElucHV0KFN0cmluZyB3c2RsSW5wdXQpCi0gIHsKLSAgICB0aGlzLndzZGxJbnB1dCA9IHdzZGxJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I2dldFVERElJbnB1dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVERElJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy51ZGRpSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCNzZXRVRERJSW5wdXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESUlucHV0KFN0cmluZyB1ZGRpSW5wdXQpCi0gIHsKLSAgICB0aGlzLnVkZGlJbnB1dCA9IHVkZGlJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFydGlmYWN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Byb2ZpbGVBcnRpZmFjdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhYjNiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFydGlmYWN0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5BcnRpZmFjdFR5cGU7Ci0KLS8qKgotICogQW4gYXJ0aWZhY3QgY29udGFpbnMgYSBzZXQgb2YgcmVsYXRlZCB0ZXN0IGFzc2VydGlvbnMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9maWxlQXJ0aWZhY3RJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFydGlmYWN0Ci17Ci0gIC8qKgotICAgKiBBcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEFydGlmYWN0VHlwZSB0eXBlOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBtYXAuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCB0ZXN0QXNzZXJ0aW9uTWFwID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBMaW5rZWRMaXN0IHRlc3RBc3NlcnRpb25MaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgQXJ0aWZhY3RUeXBlIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5SZXBvcnRBcnRpZmFjdCNzZXRUeXBlKEFydGlmYWN0VHlwZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoQXJ0aWZhY3RUeXBlIHR5cGUpCi0gIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlJlcG9ydEFydGlmYWN0I2dldFNwZWNpZmljYXRpb25MaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U3BlY2lmaWNhdGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3Qjc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yIHNwZWNpZmljYXRpb25MaXN0KQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbkxpc3QoKQotICAgKi8KLSAgcHVibGljIExpbmtlZExpc3QgZ2V0VGVzdEFzc2VydGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGVzdEFzc2VydGlvbkxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRUZXN0QXNzZXJ0aW9uKFN0cmluZyBpZCkKLSAgewotICAgIHJldHVybiAoVGVzdEFzc2VydGlvbikgdGhpcy50ZXN0QXNzZXJ0aW9uTWFwLmdldChpZCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gIHsKLSAgICAvLyBBREQ6IE5lZWQgdG8gbWVyZ2UgdGhlIGxpc3QgYW5kIG1hcAotICAgIHRoaXMudGVzdEFzc2VydGlvbk1hcC5wdXQodGVzdEFzc2VydGlvbi5nZXRJZCgpLCB0ZXN0QXNzZXJ0aW9uKTsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25MaXN0LmFkZCh0ZXN0QXNzZXJ0aW9uKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIFJlcG9ydEFydGlmYWN0Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcHcucHJpbnRsbigiICAgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9Qcm9maWxlQXNzZXJ0aW9uc0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9Qcm9maWxlQXNzZXJ0aW9uc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4MTQxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUHJvZmlsZUFzc2VydGlvbnNJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFzc2VydGlvbnMKLXsKLSAgLyoqCi0gICAqIExvY2F0aW9uIG9mIHRoZSBwcm9maWxlIGRlZmluaXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VVJJOwotCi0gIC8qKgotICAgKiBOYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudE5hbWU7Ci0KLSAgLyoqCi0gICAqIFZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VmVyc2lvbjsKLQotICAvLyBBREQ6IEEgcHJvZmlsZSBkZWZpbml0aW9uIHNob3VsZCBhbHNvIGhhdmUgYSBkZXNjcmlwdGlvbi4KLQotICAvKioKLSAgICogTGlzdCBvZiBwcm9maWxlcy4KLSAgICovCi0gIFZlY3RvciBwcm9maWxlTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqLwotICBUcmVlTWFwIGFydGlmYWN0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2dldFByb2ZpbGVMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UHJvZmlsZUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjc2V0UHJvZmlsZUxpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvZmlsZUxpc3QoVmVjdG9yIHByb2ZpbGVMaXN0KQotICB7Ci0gICAgdGhpcy5wcm9maWxlTGlzdCA9IHByb2ZpbGVMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2FkZFByb2ZpbGUoUHJvZmlsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFByb2ZpbGUoUHJvZmlsZSBwcm9maWxlKQotICB7Ci0gICAgdGhpcy5wcm9maWxlTGlzdC5hZGQocHJvZmlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0QXJ0aWZhY3RMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBUcmVlTWFwIGdldEFydGlmYWN0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0QXJ0aWZhY3QoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXJ0aWZhY3QgZ2V0QXJ0aWZhY3QoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICByZXR1cm4gKFByb2ZpbGVBcnRpZmFjdCkgdGhpcy5hcnRpZmFjdExpc3QuZ2V0KHR5cGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI3NldEFydGlmYWN0TGlzdChUcmVlTWFwKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXJ0aWZhY3RMaXN0KFRyZWVNYXAgYXJ0aWZhY3RMaXN0KQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdExpc3QgPSBhcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjYWRkQXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBcnRpZmFjdChQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QpCi0gIHsKLSAgICB0aGlzLmFydGlmYWN0TGlzdC5wdXQoYXJ0aWZhY3QuZ2V0VHlwZSgpLCBhcnRpZmFjdCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRUZXN0QXNzZXJ0aW9uKFN0cmluZyBpZCkKLSAgewotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiA9IG51bGw7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGFydGlmYWN0cyBhbmQgZmluZCB0aGUgdGVzdCBhc3NlcnRpb24gCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBhcnRpZmFjdExpc3QudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoKGl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHRlc3RBc3NlcnRpb24gPT0gbnVsbCkpCi0gICAgewotICAgICAgdGVzdEFzc2VydGlvbiA9ICgoUHJvZmlsZUFydGlmYWN0KSBpdGVyYXRvci5uZXh0KCkpLmdldFRlc3RBc3NlcnRpb24oaWQpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXN0QXNzZXJ0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXJ0aWZhY3QgY3JlYXRlQXJ0aWZhY3QoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBQcm9maWxlQXJ0aWZhY3RJbXBsKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2dldFRBRE5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQUROYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI3NldFRBRE5hbWUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VEFETmFtZShTdHJpbmcgZG9jdW1lbnROYW1lKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudE5hbWUgPSBkb2N1bWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9ucyNnZXRUQURWZXJzaW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VEFEVmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9ucyNzZXRUQURWZXJzaW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRBRFZlcnNpb24oU3RyaW5nIGRvY3VtZW50VmVyc2lvbikKLSAgewotICAgIHRoaXMuZG9jdW1lbnRWZXJzaW9uID0gZG9jdW1lbnRWZXJzaW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTBkYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgLi4uCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9maWxlQXNzZXJ0aW9uc1JlYWRlckltcGwgaW1wbGVtZW50cyBQcm9maWxlQXNzZXJ0aW9uc1JlYWRlcgotewotICAvKioKLSAgICogUHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zOwotCi0gIC8qKgotICAgKiBSZXBvcnRBcnRpZmFjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXJ0aWZhY3RMaXN0ID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIG5ldyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zUmVhZGVyI3JlYWRQcm9maWxlQXNzZXJ0aW9ucyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgcmVhZFByb2ZpbGVBc3NlcnRpb25zKFN0cmluZyBhc3NlcnRpb25zVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkUHJvZmlsZUFzc2VydGlvbnMobmV3IElucHV0U291cmNlKGFzc2VydGlvbnNVUkkpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlciNyZWFkUHJvZmlsZUFzc2VydGlvbnMoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zIHJlYWRQcm9maWxlQXNzZXJ0aW9ucyhSZWFkZXIgcmVhZGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkUHJvZmlsZUFzc2VydGlvbnMobmV3IElucHV0U291cmNlKHJlYWRlcikpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgcHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBQcm9maWxlQXNzZXJ0aW9ucyByZWFkUHJvZmlsZUFzc2VydGlvbnMoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHByb2ZpbGUgYXNzZXJ0aW9ucwotICAgIHByb2ZpbGVBc3NlcnRpb25zID0gbmV3IFByb2ZpbGVBc3NlcnRpb25zSW1wbCgpOwotCi0gICAgLy8gUHJvZmlsZSBwYXJ0cyBhcmUgcHV0IGludG8gYSB2ZWN0b3IKLSAgICBhcnRpZmFjdExpc3QgPSBuZXcgVHJlZU1hcCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIHhtbCByZWFkZXIKLSAgICAgIFhNTFJlYWRlciByZWFkZXIgPSBYTUxVdGlscy5nZXRYTUxSZWFkZXIoKTsKLQotICAgICAgLy8gU2V0IGNvbnRlbnQgaGFuZGxlciB0byBpbm5lciBjbGFzcwotICAgICAgcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKG5ldyBQcm9maWxlQXNzZXJ0aW9uc0hhbmRsZXIoKSk7Ci0gICAgICAKLSAgICAgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLSAgICAgIHsKLSAgICAJICBFbnRpdHlSZXNvbHZlciByZXNvbHZlciA9IG5ldyBFbnRpdHlSZXNvbHZlcigpewotCi0JCQlwdWJsaWMgSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkJCVVSSVJlc29sdmVyIHJlc29sdmVyID0gV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuZ2V0VVJJUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgdXJpID0gcmVzb2x2ZXIucmVzb2x2ZSgiIiwgcHVibGljSWQsIHN5c3RlbUlkKTsKLQkJCQlTdHJpbmcgcGh5c2ljYWxMb2NhdGlvbiA9IHJlc29sdmVyLnJlc29sdmVQaHlzaWNhbExvY2F0aW9uKCIiLCBwdWJsaWNJZCwgdXJpKTsKLQkJCQlJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlVUkwgdXJsID0gbmV3IFVSTChwaHlzaWNhbExvY2F0aW9uKTsKLQkJCQkJaXMgPSBuZXcgSW5wdXRTb3VyY2UodXJpKTsKLQkJCQkJaXMuc2V0Qnl0ZVN0cmVhbSh1cmwub3BlblN0cmVhbSgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQkvLyBEbyBub3RoaW5nIGlmIG9wZW5pbmcgdGhlIHN0cmVhbSBmYWlscy4KLQkJCQl9Ci0JCQkJcmV0dXJuIGlzOwotCQkJfQotICAgIAkJICAKLSAgICAJICB9OwotICAgIAkgIHJlYWRlci5zZXRFbnRpdHlSZXNvbHZlcihyZXNvbHZlcik7Ci0gICAgICB9Ci0gICAgICAvLyBQYXJzZSBwcm9maWxlIGRlZmluaXRpb24gZmlsZQotICAgICAgcmVhZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHJlYWQgYW5kIHBhcnNlIHByb2ZpbGUgZGVmaW5pdGlvbi4iLCBlKTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIC8vQ2hlY2sgdG8gc2VlIGlmIHRoZSB2ZXJzaW9uIG9mIHRlc3QgYXNzc2VydGlvbiBkb2N1bWVudCBpcyBzdXBwb3J0ZWQKLSAgICAgIGlmICghVXRpbHMuaXNWYWxpZFByb2ZpbGVUQURWZXJzaW9uKHByb2ZpbGVBc3NlcnRpb25zKSkKLSAgICAgIHsKLSAgICAJU3RyaW5nIHRhZFZlcnNpb24gPSBwcm9maWxlQXNzZXJ0aW9ucy5nZXRUQURWZXJzaW9uKCk7Ci0gICAgCWlmKHRhZFZlcnNpb24gIT0gbnVsbCkKLSAgICAJewotICAgIAkgIFN0cmluZyB0YWROYW1lID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFETmFtZSgpOwotICAgICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIlxuVmVyc2lvbiAiCi0gICAgICAgICAgICArIHRhZFZlcnNpb24KLSAgICAgICAgICAgICsgIiBvZiB0aGUgXCIiCi0gICAgICAgICAgICArIHRhZE5hbWUKLSAgICAgICAgICAgICsgIlwiXG4iCi0gICAgICAgICAgICArICJkb2N1bWVudCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgdmVyc2lvbiBvZiIKLSAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgKyAidGhlIHRlc3QgdG9vbHMuIik7Ci0gICAgCX0KLSAgICAJZWxzZQotICAgIAl7Ci0gICAgCSAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiV1MtSSB2YWxpZGF0aW9uIHdhcyB1bmFibGUgdG8gcnVuLiBVbmFibGUgdG8gcmVhZCB0aGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuIik7Ci0gICAgCX0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgYXNzZXJ0aW9ucyBmcm9tIHRoZSBUQUQgYXJlIHJlb3JkZXJlZCBmb3IgcHVycG9zZXMgb2YgcHJvY2Vzc2luZy4gQWxsCi0gICAgLy8gYXNzZXJ0aW9ucyBvZiBhbiBhcnRpZmFjdCBhcmUgcmVvcmRlcmVkIHN1Y2ggdGhhdCBwcmVyZXF1aXNpdGVzIG9jY3VyCi0gICAgLy8gYmVmb3JlIHRoZSBhc3NlcnRpb25zIHRoZXkgcHJlcmVxLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0ICBwcmVyZXF1aXNpdGVzIGRvCi0gICAgLy8gbm90IGNyb3NzIGFydGlmYWN0IHR5cGVzLgotICAgIC8vCi0gICAgSXRlcmF0b3IgaXQgPSBhcnRpZmFjdExpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAvLyBmb3IgZWFjaCBhcnRpZmFjdCB0eXBlIGRvIHJlb3JkZXJpbmcgYXNzZXJ0aW9uIAotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUHJvZmlsZUFydGlmYWN0IGFydCA9IChQcm9maWxlQXJ0aWZhY3QpIGFydGlmYWN0TGlzdC5nZXQoaXQubmV4dCgpKTsKLSAgICAgIC8vIHJlc3VsdCBsaXN0IG9mIHRoZSByZW9yZGVyaW5nIGFzc2VydGlvbnMgCi0gICAgICBMaW5rZWRMaXN0IHJlcyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gICAgICBJdGVyYXRvciBpdDIgPSBhcnQuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5pdGVyYXRvcigpOwotICAgICAgLy8gc29ydCB0aGUgYXJ0aWZhY3QgYXNzZXJ0aW9ucyBpbnRvIHJlc3VsdCBsaXN0IAotICAgICAgd2hpbGUgKGl0Mi5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGNhbGwgZm9yIGVhY2ggYXNzZXJ0aW9uICwgCi0gICAgICAgIC8vIGlmIHRoZSBhc3NlcnRpb24gaGFzIHRoZSBwcmVyZXEsIHRoZSBwcmVyZXEgd2lsbCBhZGRlZCBmaXJzdCBpbnRvIHJlcyBsaXN0Ci0gICAgICAgIHNvcnRUZXN0QXNzZXJ0aW9ucyhhcnQsIChUZXN0QXNzZXJ0aW9uKSBpdDIubmV4dCgpLCByZXMpOwotICAgICAgfQotICAgICAgLy8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgYXNzZXJ0aW9ucyBsaXN0IHRvIHRoZSBwcmVyZXEgcmVvcmRlcmluZyBhc3NlcnRpb25zIGxpc3QKLSAgICAgIGFydC5nZXRUZXN0QXNzZXJ0aW9uTGlzdCgpLmNsZWFyKCk7Ci0gICAgICBhcnQuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5hZGRBbGwocmVzKTsKLSAgICB9Ci0gICAgLy8gUHV0IHRoZSBwcm9maWxlIHBhcnRzIGludG8gdGhlIHByb2ZpbGUgZGVmaW5pdGlvbgotICAgIHByb2ZpbGVBc3NlcnRpb25zLnNldEFydGlmYWN0TGlzdChhcnRpZmFjdExpc3QpOwotCi0gICAgcmV0dXJuIHByb2ZpbGVBc3NlcnRpb25zOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFJlY3Vyc2l2ZSB3YWxrIHRvIG9yZGVyIGFzc2VydGlvbnMgc28gdGhhdCBhc3NlcnRpb25zIGFyZSAKLSAgICogcHJvY2Vzc2VkIGZvbGxvd2luZyB0aGUgb25lcyB0aGF0IHByZXJlcSB0aGVtLgotICAgKiBJZiBhc3NlcnRpb24gaGFzIHByZXJlcSwgdGhlbiBhZGQgaXQgdG8gdGhlIHJlc3VsdCBsaXN0IGZpcnN0LgotICAgKiAgCi0gICAqIEBwYXJhbSBhcnQgcHJvZmlsZSBhcnRpZmFjdCBmb3IgY2FsbCBAbGluayBQcm9maWxlQXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqIEBwYXJhbSBhc3J0IHRlc3QgYXNzZXJ0aW9uCi0gICAqIEBwYXJhbSBsaXN0IHJlc3VsdCBsaXN0IHRvIHNvcnQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzb3J0VGVzdEFzc2VydGlvbnMoUHJvZmlsZUFydGlmYWN0IGFydCwgVGVzdEFzc2VydGlvbiBhc3J0LCBMaXN0IGxpc3QpCi0gIHsKLSAgICAvLyBpZiBhc3NlcnRpb24gaXMgbnVsbCBvciBkb2VzIG5vdCBleGlzdCwgdGhlbiBleGl0Ci0gICAgaWYoKGFzcnQgPT0gbnVsbCkgfHwgbGlzdC5jb250YWlucyhhc3J0KSkgCi0gICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gaWYgaXQgaGFzIG5vdCBwcmVyZXEsIGFkZCB0aGUgYXNlcnRpb24gYW5kIGV4aXQKLSAgICBpZihhc3J0LmdldFByZXJlcUlkTGlzdCgpLmlzRW1wdHkoKSkgCi0gICAgewotICAgICAgbGlzdC5hZGQoYXNydCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGdldCBsaXN0IHByZXJlcSBhc3NlcnRpb24gYW5kIHJlcXVyc2l2ZSBjYWxsIHNvcnRUZXN0QXNzZXJ0aW9ucyB0aGlzIGVhY2ggICAgCi0gICAgSXRlcmF0b3IgaXQgPSBhc3J0LmdldFByZXJlcUlkTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0gICAgICBzb3J0VGVzdEFzc2VydGlvbnMoYXJ0LCBhcnQuZ2V0VGVzdEFzc2VydGlvbihpZCksIGxpc3QpOwotICAgIH0KLSAgICBsaXN0LmFkZChhc3J0KTsKLSAgfQotCi0gIC8qKgotICAgKiBJbm5lciBjbGFzczogUHJvZmlsZUFzc2VydGlvbnNIYW5kbGVyCi0gICAqLwotICBjbGFzcyBQcm9maWxlQXNzZXJ0aW9uc0hhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0gICAgcHJpdmF0ZSBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QgPSBwcm9maWxlQXNzZXJ0aW9ucy5jcmVhdGVBcnRpZmFjdCgpOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGNvbnRleHQgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGFzc2VydGlvbkRlc2NyaXB0aW9uID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBkZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgdGVzdEFzc2VydGlvbklkID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZyBjdXJyZW50RWxlbWVudCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24gPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGxvZ0lucHV0ID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciB3c2RsSW5wdXQgPSBudWxsOwotICAgIHByaXZhdGUgRW50cnlUeXBlTGlzdCBlbnRyeVR5cGVMaXN0ID0gbnVsbDsKLQotICAgIC8vIFByb2Nlc3Mgc3RhcnQgZWxlbWVudCBldmVudAotICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudCgKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkksCi0gICAgICBTdHJpbmcgbG9jYWxOYW1lLAotICAgICAgU3RyaW5nIHFOYW1lLAotICAgICAgQXR0cmlidXRlcyBhdHRzKQotICAgIHsKLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbAotICAgICAgICAmJiAobmFtZXNwYWNlVVJJLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BU1NFUlRJT05TXzIwMDMpCi0gICAgICAgIHx8ICBuYW1lc3BhY2VVUkkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2F2ZSBlbGVtZW50IG5hbWUKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBsb2NhbE5hbWU7Ci0KLSAgICAgICAgLy8gPGFydGlmYWN0PgotICAgICAgICBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9BUlRJRkFDVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcHJvZmlsZSBhcnRpZmFjdCBvYmplY3QKLSAgICAgICAgICBhcnRpZmFjdCA9IHByb2ZpbGVBc3NlcnRpb25zLmNyZWF0ZUFydGlmYWN0KCk7Ci0KLSAgICAgICAgICAvLyBTZXQgdHlwZQotICAgICAgICAgIGFydGlmYWN0LnNldFR5cGUoCi0gICAgICAgICAgICBBcnRpZmFjdFR5cGUuZ2V0QXJ0aWZhY3RUeXBlKAotICAgICAgICAgICAgICBhdHRzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpKSk7Ci0KLSAgICAgICAgICAvLyBBREQ6IEdldCBzcGVjaWZpY2F0aW9uIGxpc3QKLQotICAgICAgICAgIC8vIEFkZCBhcnRpZmFjdCB0byBsaXN0IG9mIGFydGlmYWN0IGxpc3QKLSAgICAgICAgICBhcnRpZmFjdExpc3QucHV0KGFydGlmYWN0LmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpLCBhcnRpZmFjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8dGVzdEFzc2VydGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9URVNUX0FTU0VSVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uID0gbmV3IFRlc3RBc3NlcnRpb25JbXBsKCk7Ci0KLSAgICAgICAgICAvLyBHZXQgYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAgIFN0cmluZyBpZCA9IGF0dHMuZ2V0VmFsdWUoIiIsIFdTSUNvbnN0YW50cy5BVFRSX0lEKTsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldElkKGlkKTsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldFR5cGUoYXR0cy5nZXRWYWx1ZSgiIiwgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSkpOwotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0RW50cnlUeXBlTmFtZSgKLSAgICAgICAgICAgIGF0dHMuZ2V0VmFsdWUoIiIsIFdTSUNvbnN0YW50cy5BVFRSX0VOVFJZX1RZUEUpKTsKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBpZiBhc3NlcnRpb24gaXMgbm90IHJlcXVpcmVkIG9yIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBieSBjb3JlIHZhbGlkYXRvciB0aGVuIGRpc2FibGUgaXQKLSAgICAgICAgICBpZiAoYWxyZWFkeUNoZWNrZWQoaWQpIHx8ICEodGVzdEFzc2VydGlvbi5nZXRUeXBlKCkuZXF1YWxzKFRlc3RBc3NlcnRpb24uVFlQRV9SRVFVSVJFRCkpKQotICAgICAgICAJICB0ZXN0QXNzZXJ0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgCSAgdGVzdEFzc2VydGlvbi5zZXRFbmFibGVkKEJvb2xlYW4udmFsdWVPZihhdHRzLmdldFZhbHVlKCIiLCBXU0lDb25zdGFudHMuQVRUUl9FTkFCTEVEKSkuYm9vbGVhblZhbHVlKCkpOwotCi0gICAgICAgICAgLy8gQWRkIHRlc3QgYXNzZXJ0aW9uIHRvIGFydGlmYWN0Ci0gICAgICAgICAgYXJ0aWZhY3QuYWRkVGVzdEFzc2VydGlvbih0ZXN0QXNzZXJ0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxjb250ZXh0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0NPTlRFWFQpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxhc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9BU1NFUlRJT05fREVTQ1JJUFRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZmFpbHVyZU1lc3NhZ2U+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9NRVNTQUdFKSkKLSAgICAgICAgewotICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX0RFVEFJTF9ERVNDUklQVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZGV0YWlsRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGRldGFpbERlc2NyaXB0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPHRlc3RBc3NlcnRpb25JRD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9URVNUX0FTU0VSVElPTl9JRCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uSWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8YWRkaXRpb25hbEVudHJ5VHlwZUxpc3Q+Ci0gICAgICAgIGVsc2UgaWYgKAotICAgICAgICAgIGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQURESVRJT05BTF9FTlRSWV9UWVBFX0xJU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ3JlYXRlIGVudHJ5IHR5cGUgbGlzdAotICAgICAgICAgIGVudHJ5VHlwZUxpc3QgPSBuZXcgRW50cnlUeXBlTGlzdEltcGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxtZXNzYWdlSW5wdXQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9JTlBVVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBsb2dJbnB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDx3c2RsSW5wdXQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9JTlBVVCkpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsSW5wdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gPHByb2ZpbGVBc3NlcnRpb25zPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1BST0ZJTEVfQVNTRVJUSU9OUykpCi0gICAgICAgIHsKLSAgICAgICAgICBwcm9maWxlQXNzZXJ0aW9ucy5zZXRUQUROYW1lKAotICAgICAgICAgICAgYXR0cy5nZXRWYWx1ZSgiIiwgV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICAgIHByb2ZpbGVBc3NlcnRpb25zLnNldFRBRFZlcnNpb24oCi0gICAgICAgICAgICBhdHRzLmdldFZhbHVlKCIiLCBXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBSRU1PVkU6ICAgICAKLSAgICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkgewotICAgICAgICAgIHVkZGlJbnB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfSAKLSAgICAgICAgKi8KLSAgICAgIH0KLSAgICB9IC8vIEVORCBzdGFydEVsZW1lbnQKLQotICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFuYW1lKQotICAgIHsKLSAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHByb2ZpbGUgbmFtZXNwYWNlLCB0aGVuIGNoZWNrIGZvciBhbmQgcHJvY2VzcyBzZWxlY3RlZCBlbGVtZW50cwotICAgICAgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsCi0gICAgICAgICYmIChuYW1lc3BhY2VVUkkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlNfMjAwMykKLSAgICAgICAgfHwgbmFtZXNwYWNlVVJJLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BU1NFUlRJT05TKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIDxjb250ZXh0PgotICAgICAgICBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9DT05URVhUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBjb250ZXh0IGluIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRDb250ZXh0KGNvbnRleHQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBhc3NlcnRpb24gZGVzY3JpcHRpb24gaW4gdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldEFzc2VydGlvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGZhaWx1cmVNZXNzYWdlPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTZXQgZmFpbHVyZSBtZXNzYWdlIGluIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRGYWlsdXJlTWVzc2FnZShmYWlsdXJlTWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZmFpbHVyZURldGFpbERlc2NyaXB0aW9uPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbiBpbiB0ZXN0IGFzc2VydGlvbgotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKAotICAgICAgICAgICAgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZGV0YWlsRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBkZXRhaWwgZGVzY3JpcHRpb24gaW4gdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldERldGFpbERlc2NyaXB0aW9uKGRldGFpbERlc2NyaXB0aW9uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGRldGFpbERlc2NyaXB0aW9uID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uSUQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbi5hZGRQcmVyZXFJZCh0ZXN0QXNzZXJ0aW9uSWQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbklkID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxhZGR0aW9uYWxFbnRyeVR5cGVMaXN0PgotICAgICAgICBlbHNlIGlmICgKLSAgICAgICAgICBsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0FERElUSU9OQUxfRU5UUllfVFlQRV9MSVNUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCB0YXJnZXQgbGlzdAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoZW50cnlUeXBlTGlzdCk7Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8bWVzc2FnZUlucHV0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfSU5QVVQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdC5zZXRMb2dJbnB1dChsb2dJbnB1dC50b1N0cmluZygpKTsKLSAgICAgICAgICBsb2dJbnB1dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8d3NkbElucHV0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1dTRExfSU5QVVQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdC5zZXRXU0RMSW5wdXQod3NkbElucHV0LnRvU3RyaW5nKCkpOwotICAgICAgICAgIHdzZGxJbnB1dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8cHJvZmlsZUFzc2VydGlvbnM+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fUFJPRklMRV9BU1NFUlRJT05TKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGEgbm8tb3AKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFJFTU9WRToKLSAgICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkgewotICAgICAgICAgIC8vIFNldCB0ZXN0IGFzc2VydGlvbiBpZCBpbiBwcmVyZXEgbGlzdAotICAgICAgICAgICBlbnRyeVR5cGVMaXN0LnNldFVERElJbnB1dCh1ZGRpSW5wdXQudG9TdHJpbmcoKSk7ICAgICAgICAgCi0gICAgICAgICAgdWRkaUlucHV0ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICAqLwotICAgICAgfQotICAgIH0gLy8gRU5EIGVuZEVsZW1lbnQKLQotICAgIHB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpCi0gICAgewotICAgICAgLy8gPGNvbnRleHQ+Ci0gICAgICBpZiAoKGNvbnRleHQgIT0gbnVsbCkKLSAgICAgICAgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9DT05URVhUKSkpCi0gICAgICB7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGFzc2VydGlvbkRlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhc3NlcnRpb25EZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX0RFU0NSSVBUSU9OKSkpCi0gICAgICB7Ci0gICAgICAgIGFzc2VydGlvbkRlc2NyaXB0aW9uLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxmYWlsdXJlTWVzc2FnZT4KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoZmFpbHVyZU1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoY3VycmVudEVsZW1lbnQuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSkpKQotICAgICAgewotICAgICAgICBmYWlsdXJlTWVzc2FnZS5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8ZmFpbHVyZURldGFpbERlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gIT0gbnVsbCkgJiYgKAotICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX0RFVEFJTF9ERVNDUklQVElPTikpKQotICAgICAgewotICAgICAgICBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24uYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGRldGFpbERlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChkZXRhaWxEZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkpCi0gICAgICB7Ci0gICAgICAgIGRldGFpbERlc2NyaXB0aW9uLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uSUQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKHRlc3RBc3NlcnRpb25JZCAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQpKSkKLSAgICAgIHsKLSAgICAgICAgdGVzdEFzc2VydGlvbklkLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtZXNzYWdlSW5wdXQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGxvZ0lucHV0ICE9IG51bGwpCi0gICAgICAgICAgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0lOUFVUKSkpCi0gICAgICB7Ci0gICAgICAgIGxvZ0lucHV0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsSW5wdXQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKHdzZGxJbnB1dCAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9JTlBVVCkpKQotICAgICAgewotICAgICAgICB3c2RsSW5wdXQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLyogUkVNT1ZFOgotICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgIGVsc2UgaWYgKCh1ZGRpSW5wdXQgIT0gbnVsbCkgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkpIHsKLSAgICAgICAgdWRkaUlucHV0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0gICAgICAqLwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBOT1RFIHRoYXQgdGhpcyBhcGkgYXNzdW1lcyB0aGF0IGJhc2Ugd3NkbCB2YWxpZGF0b3IgaGFzIGFscmVhZHkgdmFsaWRhdGVkCi0gICAqIHRoZSB3c2RsIGRvY3VtZW50IGFuZCBjb3JyZXNwb25kaW5nIHNjaGVtYXMgYWdhaW5zdCB0aGUgd3NkbCAxLjEgc3BlY2lmaWNhdGlvbi4KLSAgICogTm90ZSBhbHNvIHRoYXQgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGR1cGxpY2F0ZSBjaGVja3MgYmV0d2VlbiB0aGUgYmFzZSB2YWxpZGF0b3IKLSAgICogYW5kIHRoZSB3cy1pIHZhbGlkYXRvci4gU2luY2Ugc29tZSBvZiB0aGVzZSBjaGVja3MgYXJlIGNwdSBpbnRlbnNpdmUsIHdlIGRpc2FibGUgCi0gICAqIHRob3NlIGFzc2VydGlvbnMgaGVyZS4gCi0gICAqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXNzZXJ0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBieSB0aGUgYmFzZSB2YWxpZGF0b3IuIAotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGFzc2VydGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYnkgdGhlIGJhc2UgdmFsaWRhdG9yLiAKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGFscmVhZHlDaGVja2VkKFN0cmluZyBpZCkKLSAgewotCSBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCSBpZiAoaWQgIT0gbnVsbCkKLQkgewotICAgICAgIHJlc3VsdCA9IChpZC5lcXVhbHMoIkJQMjExMCIpIHx8Ci0gICAgCQkgICAJIGlkLmVxdWFscygiQlAyMTE1IikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJCUDI0MTciKSB8fAotCQkgICAgICAgICBpZC5lcXVhbHMoIkJQMjExNCIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiQlAyMTIzIikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJTU0JQMjIwOSIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiQVAyMjA5IikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJCUDI3MDAiKQkgICAgICAgICAKLQkJICAgICAgICAgKTsKLQkgfQotCSByZXR1cm4gcmVzdWx0OwotfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9UZXN0QXNzZXJ0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Rlc3RBc3NlcnRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OTc1N2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Rlc3RBc3NlcnRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyAuLi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RBc3NlcnRpb25JbXBsIGltcGxlbWVudHMgVGVzdEFzc2VydGlvbgotewotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gaWQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGlkID0gbnVsbDsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRlc3QgYXNzZXJ0aW9uIHByaW1hcnkgZW50cnkgdHlwZSBuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBlbnRyeVR5cGVOYW1lID0gbnVsbDsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gZW5hYmxlZCBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBlbmFibGVkID0gdHJ1ZTsKLQotICAvKioKLSAgICogQ29udGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY29udGV4dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBGYWlsdXJlIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZhaWx1cmVNZXNzYWdlID0gbnVsbDsKLQotICAvKioKLSAgICogRmFpbHVyZSBkZXRhaWwgZGVzY3JpcHRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERldGFpbCBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZGV0YWlsRGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBBZGR0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSBJRCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBwcmVyZXFJZExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0SWQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5pZDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldElkKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2dldFR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRUeXBlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVudHJ5VHlwZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlUeXBlTmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEVudHJ5VHlwZU5hbWUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlUeXBlTmFtZShTdHJpbmcgZW50cnlUeXBlTmFtZSkKLSAgewotICAgIHRoaXMuZW50cnlUeXBlTmFtZSA9IGVudHJ5VHlwZU5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNpc0VuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBlbmFibGVkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpCi0gIHsKLSAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0Q29udGV4dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRDb250ZXh0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBc3NlcnRpb25EZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZyBhc3NlcnRpb25EZXNjcmlwdGlvbikKLSAgewotICAgIHRoaXMuYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBhc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2dldEZhaWx1cmVNZXNzYWdlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcgZmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLmZhaWx1cmVNZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZmFpbHVyZURldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbihTdHJpbmcgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5mYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gPSBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXREZXRhaWxEZXNjcmlwdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERldGFpbERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGRldGFpbERlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5kZXRhaWxEZXNjcmlwdGlvbiA9IGRldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKQotICAgKi8KLSAgcHVibGljIEVudHJ5VHlwZUxpc3QgZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlUeXBlTGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KG9yZy53c2kudGVzdC5wcm9maWxlLkVudHJ5VHlwZUxpc3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdChFbnRyeVR5cGVMaXN0IGVudHJ5VHlwZUxpc3QpCi0gIHsKLSAgICB0aGlzLmVudHJ5VHlwZUxpc3QgPSBlbnRyeVR5cGVMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0UHJlcmVxSWRMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UHJlcmVxSWRMaXN0KCkKLSAgewotICAgIHJldHVybiBwcmVyZXFJZExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNhZGRQcmVyZXFJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcmVyZXFJZChTdHJpbmcgcHJlcmVxSWQpCi0gIHsKLSAgICB0aGlzLnByZXJlcUlkTGlzdC5hZGQocHJlcmVxSWQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9CYXNlVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9CYXNlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZTcwMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvQmFzZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIFRoZSBiYXNlIGludGVyZmFjZSBmb3IgdGhlIHByb2ZpbGUgdmFsaWRhdG9yLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJhc2VWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFNldCBhbGwgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBhcnRpZmFjdCB0byBtaXNzaW5nSW5wdXQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFueSBwcm9ibGVtcyB3aGlsZSBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWxsTWlzc2luZ0lucHV0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogQ2xlYW51cCBhZnRlciBwcm9jZXNzaW5nIGFsbCBvZiB0aGUgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBhcnRpZmFjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW55IHByb2JsZW1zIGR1cmluZyBjbGVhbnVwLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAgICogUGFyc2UgWE1MIGRvY3VtZW50IGFuZCB2YWxpZGF0ZSB3aXRoIGEgc2NoZW1hIGRvY3VtZW50LgotICAgICAqIEBwYXJhbSB1cmxTdHJpbmcgWE1MIGRvY3VtZW50IGxvY2F0aW9uLgotICAgICAqIEBwYXJhbSBiYXNlVVJJIGEgYmFzZSB1cmwgdG8gYXNzaXN0IGluIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAgICogQHBhcmFtIHNjaGVtYSB0aGUgcmVsYXRlZCBYTUwgc2NoZW1hLgotICAgICAqIEByZXR1cm4gWE1MIGRvY3VtZW50LgotICAgICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgd2hpbGUgcGFyc2luZyBvciAKLSAgICAgKiAgICAgICAgIHZhbGlkYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICAgKi8KLSAgcHVibGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgU3RyaW5nIHVybFN0cmluZywKLSAgICBTdHJpbmcgYmFzZVVSSSwKLSAgICBTdHJpbmcgc2NoZW1hKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEluaXRpYWlsaXplIHZhbGlkYXRpb24gdGVzdCBwcm9jZWR1cmUuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbnRleHQgdGhlIGFuYWx5emVyQ29udGV4dC4KLSAgICogQHBhcmFtIGFzc2VydGlvbnMgICAgICB0aGUgYXNzZXJ0aW9ucwotICAgKiBAcGFyYW0gcmVwb3J0QXJ0aWZhY3QgIHRoZSByZXBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZyAgdGhlIGFuYWx5emVyQ29uZmlnCi0gICAqIEBwYXJhbSByZXBvcnRlciAgICAgICAgdGhlIHJlcG9ydGVyIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGVycm9ycyB0byB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25mb3JtYW5jZSByZXBvcnQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gICBpZiBtZXNzYWdlIHZhbGlkYXRvciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgdmFsaWRhdG9yIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKiBAcmV0dXJuIGJvb2xlYW4gIHRydWUgaWYgdmFsaWRhdG9yIHNob3VsZCBiZSBydW4sIGZhbHNlIGlmIG5vdAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKTsKLQotICAvKioKLSAgICogUnVuIHRoZSB2YWxpZGF0b3IKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnMgZHVyaW5nIHZhbGlkYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlQXJ0aWZhY3QoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgYXJ0aWZhY3QgdHlwZSB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gdGhlIGFydGlmYWN0IHR5cGUgKGEgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBcnRpZmFjdFR5cGUoKTsKLQotICAvKioKLSAgICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIGVudHJ5IHR5cGVzIHRoYXQgdGhpcyB2YWxpZGF0b3IgYXBwbGllcyB0by4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBlbnRyeSB0eXBlcyAoU3RyaW5ncykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRFbnRyeVR5cGVzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9FbnRyeUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudHJ5Q29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGJkODkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudHJ5Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIHRhcmdldCBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgYSB0ZXN0IGFzc2VydGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwgKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnRyeUNvbnRleHQKLXsKLSAgcHJvdGVjdGVkIEVudHJ5IGVudHJ5ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IHJlcXVlc3QgPSBudWxsOwotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IHJlc3BvbnNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnkgPSBudWxsOwotCi0gIHByb3RlY3RlZCBEb2N1bWVudCByZXF1ZXN0RG9jdW1lbnQgPSBudWxsOwotICBwcm90ZWN0ZWQgRG9jdW1lbnQgcmVzcG9uc2VEb2N1bWVudCA9IG51bGw7Ci0gIHByb3RlY3RlZCBEb2N1bWVudCBtZXNzYWdlRW50cnlEb2N1bWVudCA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotCi0gIHByb3RlY3RlZCBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0ID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSAgICBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEBwYXJhbSByZXF1ZXN0ICB0aGUgcmVxdWVzdC4KLSAgICogQHBhcmFtIHJlc3BvbnNlIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRleHQoRW50cnkgZW50cnksIE1lc3NhZ2VFbnRyeSByZXF1ZXN0LCBNZXNzYWdlRW50cnkgcmVzcG9uc2UpCi0gIHsKLSAgICB0aGlzKGVudHJ5LCByZXF1ZXN0LCByZXNwb25zZSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSAgICAgICAgICAgYSBtZXNzYWdlIGVudHJ5LgotICAgKiBAcGFyYW0gcmVxdWVzdCAgICAgICAgIHRoZSByZXF1ZXN0LgotICAgKiBAcGFyYW0gcmVzcG9uc2UgICAgICAgIHRoZSByZXNwb25zZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dCgKLSAgICBFbnRyeSBlbnRyeSwKLSAgICBNZXNzYWdlRW50cnkgcmVxdWVzdCwKLSAgICBNZXNzYWdlRW50cnkgcmVzcG9uc2UsCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTsKLSAgICB0aGlzLmFuYWx5emVyQ29udGV4dCA9IGFuYWx5emVyQ29udGV4dDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIGFsbCBkb2N1bWVudHMKLSAgICAgIGlmKHJlcXVlc3QuaXNNaW1lQ29udGVudCgpKSAKLSAgICAgIHsKLSAgICAgIAlNaW1lUGFydCBwYXJ0ID0gcmVxdWVzdC5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpOwotICAgICAgICBpZiAoKHBhcnQgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0Q29udGVudCgpLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgcmVxdWVzdERvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUwocGFydC5nZXRDb250ZW50KCkpOwotICAgICAgfQotICAgICAgZWxzZSAKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlcXVlc3QuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICByZXF1ZXN0RG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChyZXF1ZXN0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7Ci0gICAgICAgICAgaWYocmVzcG9uc2UuaXNNaW1lQ29udGVudCgpKSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgCU1pbWVQYXJ0IHBhcnQgPSByZXNwb25zZS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpOwotICAgICAgICAgIAlpZiAoKHBhcnQgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0Q29udGVudCgpLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgICAgIHJlc3BvbnNlRG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChwYXJ0LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmdldE1lc3NhZ2UoKS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgIHJlc3BvbnNlRG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChyZXNwb25zZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBuZWVkIHNvbWUgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGhlcmUgYW5kIG1vcmUgY2FyZWZ1bCBjaGVja2luZwotICAgIGlmIChlbnRyeS5nZXRFbnRyeVR5cGUoKS5lcXVhbHMoRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSkpCi0gICAgewotICAgICAgdGhpcy5tZXNzYWdlRW50cnkgPSByZXF1ZXN0OwotICAgICAgdGhpcy5tZXNzYWdlRW50cnlEb2N1bWVudCA9IHJlcXVlc3REb2N1bWVudDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMubWVzc2FnZUVudHJ5ID0gcmVzcG9uc2U7Ci0gICAgICB0aGlzLm1lc3NhZ2VFbnRyeURvY3VtZW50ID0gcmVzcG9uc2VEb2N1bWVudDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgYSBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dChFbnRyeSBlbnRyeSwgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGVudHJ5IGEgbWVzc2FnZSBlbnRyeS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dChFbnRyeSBlbnRyeSwgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLmFuYWx5emVyQ29udGV4dCA9IGFuYWx5emVyQ29udGV4dDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlbnRyeS4gCi0gICAqIEByZXR1cm4gdGhlIGVudHJ5LiAKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIHRoZSByZXF1ZXN0LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRSZXF1ZXN0KCkKLSAgewotICAgIHJldHVybiByZXF1ZXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3BvbnNlLgotICAgKiBAcmV0dXJuIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgZ2V0UmVzcG9uc2UoKQotICB7Ci0gICAgcmV0dXJuIHJlc3BvbnNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvZyBlbnRyeSB3aGljaCBpcyBub3QgbnVsbC4KLSAgICogQHJldHVybiB0aGUgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRNZXNzYWdlRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIE1lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldFJlcXVlc3REb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWVzdERvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3BvbnNlLgotICAgKiBAcmV0dXJuIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBnZXRSZXNwb25zZURvY3VtZW50KCkKLSAgewotICAgIHJldHVybiByZXNwb25zZURvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvZyBlbnRyeSB3aGljaCBpcyBub3QgbnVsbC4KLSAgICogQHJldHVybiB0aGUgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlRW50cnlEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuYWx5emVyQ29udGV4dC4KLSAgICogQHJldHVybiBhbmFseXplckNvbnRleHQKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbnRleHQgZ2V0QW5hbHl6ZXJDb250ZXh0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmFuYWx5emVyQ29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW52ZWxvcGVWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudmVsb3BlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZGNjOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW52ZWxvcGVWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgZW52ZWxvcGUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAKLSAqLwotcHVibGljIGludGVyZmFjZSBFbnZlbG9wZVZhbGlkYXRvciBleHRlbmRzIExvZ1ZhbGlkYXRvcgotewotCi0gIC8qKgotICAgKiBJbml0aWFpbGl6ZSB2YWxpZGF0aW9uIHRlc3QgcHJvY2VkdXJlLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb250ZXh0IHRoZSBhbmFseXplckNvbnRleHQuCi0gICAqIEBwYXJhbSBhcnRpZmFjdCAgICAgICAgYW4gcHJvZmlsZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHJlcG9ydEFydGlmYWN0ICB0aGUgcmVwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IHRoZSBXZWIgc2VydmljZSBkZWZpbml0aW9uCi0gICAqIEBwYXJhbSByZXBvcnRlciB0aGUgcmVwb3J0ZXIgd2hpY2ggaXMgdXNlZCB0byBhZGQgZXJyb3JzIHRvIHRoZSBjb25mb3JtYW5jZSByZXBvcnQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgbWVzc2FnZSB2YWxpZGF0b3IgY291bGQgbm90IGJlIGluaXRpYWxpemVkLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgaW5pdChBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0gIAotICAvKiogRW52ZWxvcGUgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFID0gImVudmVsb3BlIjsKLQotICAvKiogUmVxdWVzdCBlbnZlbG9wZSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX1JFUVVFU1QgPSAicmVxdWVzdEVudmVsb3BlIjsKLQotICAvKiogUmVzcG9uc2UgZW52ZWxvcGUgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRV9SRVNQT05TRSA9ICJyZXNwb25zZUVudmVsb3BlIjsKLQotICAvKiogQW55IGVudmVsb3BlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRU5WRUxPUEVfQU5ZID0gImFueUVudmVsb3BlIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9Mb2dWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0xvZ1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTRkZGI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0xvZ1ZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZXMgY29tbW9uIHRvIGVudmVsb3BlcyBhbmQKLSAqIG1lc3NhZ2VzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIExvZ1ZhbGlkYXRvciBleHRlbmRzIEJhc2VWYWxpZGF0b3IgewotICAgIC8qKgotICAgICAqIFZhbGlkYXRlIHRoZSBlbnZlbG9wZSBsb2NhdGVkIGJ5IHRoZSBsb2cgZW50cnkuIAotICAgICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYSBsb2cgZW50cnkgbG9jYXRpbmcgYW4gZW52ZWxvcGUuCi0gICAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCB3aGlsZQotICAgICAqICAgICAgICAgcHJvY2Vzc2luZyB0aGUgbG9nIGVudHJ5LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9NZXNzYWdlVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9NZXNzYWdlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNTNmNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvTWVzc2FnZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotCi0vKioKLSAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciBtZXNzYWdlIHZhbGlkYXRpb24gdGVzdCBwcm9jZWR1cmUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBNZXNzYWdlVmFsaWRhdG9yIGV4dGVuZHMgTG9nVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBIVFRQIDEuMCB2ZXJzaW9uIGluZGljYXRvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSU0lPTl8xXzAgPSAiSFRUUC8xLjAiOwotCi0gIC8qKgotICAgKiBIVFRQIDEuMSB2ZXJzaW9uIGluZGljYXRvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSU0lPTl8xXzEgPSAiSFRUUC8xLjEiOwotCi0gIC8qKgotICAgKiBIVFRQIFBPU1QgbWVzc2FnZSBpbmRpY2F0b3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1BPU1QgPSAiUE9TVCI7Ci0KLSAgLyoqIE1lc3NhZ2UgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0KLSAgLyoqIFJlcXVlc3QgbWVzc2FnZSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0VfUkVRVUVTVCA9ICJyZXF1ZXN0TWVzc2FnZSI7Ci0KLSAgLyoqIFJlc3BvbnNlIG1lc3NhZ2UgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NRVNTQUdFX1JFU1BPTlNFID0gInJlc3BvbnNlTWVzc2FnZSI7Ci0KLSAgLyoqIEFueSBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRV9BTlkgPSAiYW55TWVzc2FnZSI7Ci0KLSAgLyoqIE1pbWUgcGFydCBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9QQVJUID0gInBhcnQiOwotCi0gIC8qKiBNaW1lIHJvb3QgcGFydCBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9ST09UX1BBUlQgPSAicm9vdC1wYXJ0IjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIGFuIHByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCB0aGUgV2ViIHNlcnZpY2UgZGVmaW5pdGlvbgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgdGhlIHJlcG9ydGVyIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGVycm9ycyB0byB0aGUgY29uZm9ybWFuY2UgcmVwb3J0Ci0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIG1lc3NhZ2UgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1Byb2ZpbGVWYWxpZGF0b3JGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNmYxZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTSVByb3BlcnRpZXM7Ci0KLS8qKgotKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gYWNjZXNzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgYWJzdHJhY3QgY2xhc3MuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIHZhbGlkYXRvciBkZXBlbmRpbmcgb24gdGhlIGdpdmVuIGFydGlmYWN0IG5hbWUKLSAgICogQHBhcmFtIGFydGlmYWN0TmFtZSAtIFN0cmluZyBjb250YWluaW5nIHRoZSBhcnRpZmFjdCBuYW1lIGZyb20gdGhlIFRBRAotICAgKiBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEJhc2VWYWxpZGF0b3IgaW50ZXJmYWNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgdmFsaWRhdG9yIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBCYXNlVmFsaWRhdG9yIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpCi0gICAgICAgICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKiogCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIFVEREkgdmFsaWRhdG9yLgotICAgKiBAcmV0dXJuICBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBXU0RMVmFsaWRhdG9yIGludGVyZmFjZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgVURESSB2YWxpZGF0b3IgY2Fubm90IGJlIGluc3RhbnRpYXRlZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFVERElWYWxpZGF0b3IgbmV3VURESVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBXU0RMIHZhbGlkYXRvci4KLSAgICogQHJldHVybiBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBXU0RMVmFsaWRhdG9yIGludGVyZmFjZS4gCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIFdTREwgdmFsaWRhdG9yIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRWYWxpZGF0b3JGb3JBcnRpZmFjdChTdHJpbmcgYXJ0aWZhY3ROYW1lKS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBXU0RMVmFsaWRhdG9yIG5ld1dTRExWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKiAKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgbWVzc2FnZSB2YWxpZGF0b3IuCi0gICAqIE5PVEU6IERvIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSB0cmFucG9ydCBhbmQgU09BUCAKLSAgICogbWVzc2FnZSB2YWxpZGF0b3I/Ci0gICAqCi0gICAqIEByZXR1cm4gYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgTWVzc2FnZVZhbGlkYXRvciBpbnRlcmZhY2UuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIG1lc3NhZ2UgdmFsaWRhdG9yY2Fubm90IGJlIGluc3RhbnRpYXRlZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IE1lc3NhZ2VWYWxpZGF0b3IgbmV3TWVzc2FnZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gZW52ZWxvcGUgdmFsaWRhdG9yLgotICAgKiBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEVudmVsb3BlVmFsaWRhdG9yIGludGVyZmFjZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgbWVzc2FnZSB2YWxpZGF0b3IgY2Fubm90IGJlIGluc3RhbnRpYXRlZC4gCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRWYWxpZGF0b3JGb3JBcnRpZmFjdChTdHJpbmcgYXJ0aWZhY3ROYW1lKS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBFbnZlbG9wZVZhbGlkYXRvciBuZXdFbnZlbG9wZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEluc3RhbnRpYXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MuCi0gICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhpcyBpbnRlcmZhY2UgaXMgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgCi0gICAqIEphdmEgc3lzdGVtIHByb3BlcnR5OgotICAgKiA8VUw+Ci0gICAqICAgPExJPndzaS5wcm9maWxlLnZhbGlkYXRvci5mYWN0b3J5Ci0gICAqIDwvVUw+Ci0gICAqCi0gICAqIEByZXR1cm4gdGhlIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZmFjdG9yeSBjbGFzcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeSBuZXdJbnN0YW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotICAgIFN0cmluZyBmYWN0b3J5Q2xhc3NOYW1lID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBmYWN0b3J5IGNsYXNzIG5hbWUKLSAgICAgIGZhY3RvcnlDbGFzc05hbWUgPQotICAgICAgICBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KAotICAgICAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9WQUxJREFUT1JfRkFDVE9SWSwKLSAgICAgICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9WQUxJREFUT1JfRkFDVE9SWSk7Ci0KLSAgICAgIC8vIENyZWF0ZSB0aGUgZmFjdG9yeSBjbGFzcwotICAgICAgQ2xhc3MgZmFjdG9yeUNsYXNzID0gQ2xhc3MuZm9yTmFtZShmYWN0b3J5Q2xhc3NOYW1lKTsKLQotICAgICAgLy8gSW5zdGFudGlhdGUgdGhlIGZhY3RvcnkgCi0gICAgICBmYWN0b3J5ID0gKFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5KSBmYWN0b3J5Q2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBpbnN0YW50aWF0ZSBmYWN0b3J5IGNsYXNzOiAiICsgZmFjdG9yeUNsYXNzTmFtZSArICIuIiwKLSAgICAgICAgZSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGZhY3RvcnkKLSAgICByZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1VERElWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1VERElWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMxMjliZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9VRERJVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlVmFsaWRhdG9yCi17Ci0gIC8qKiBEaXNjb3ZlcnkgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWSA9ICJkaXNjb3ZlcnkiOwotCi0gIC8qKiBCaW5kaW5nIHRlbXBsYXRlIGRpc2NvdmVyeSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUgPSAiYmluZGluZ1RlbXBsYXRlIjsKLQotICAvKiogdE1vZGVsIGRpc2NvdmVyeSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWV9UTU9ERUwgPSAidE1vZGVsIjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIGFuIHByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHVkZGlSZWZlcmVuY2UgICBhIFVEREkgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgICAgICAgIGEgUmVwb3J0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBVRERJIHZhbGlkYXRvciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBpbml0KEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGVBc3NlcnRpb25zIGFzc2VydGlvbnMsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBVRERJIGJhc2VkIHNlcnZpY2UgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gSWYgdGhlIFVEREkgZW50cmllcyBhcmUgdmFsaWQsIHRoZW4gdGhlIHZhbHVlIHJldHVybmVkIAotICAgKiAgICAgICAgIGlzIHRoZSBVUkwgZm9yIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZAotICAgKiAgICAgICAgIHdoaWxlIHByb2Nlc3NpbmcgdGhlIFVEREllbnRyaWVzLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgdmFsaWRhdGVBcnRpZmFjdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHZhbGlkYXRlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1dTRExWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1dTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkODg2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlVmFsaWRhdG9yCi17Ci0gIC8qKiBEZXNjcmlwdGlvbiBhcnRpZmFjdCB0eXBlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwotCSAKLSAgLyoqIERlZmluaXRpb25zIGRlc2NyaXB0aW9uIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMgPSAiZGVmaW5pdGlvbnMiOwotCi0gIC8qKiBJbXBvcnQgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9JTVBPUlQgPSAiaW1wb3J0IjsKLQotICAvKiogVHlwZXMgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9UWVBFUyA9ICJ0eXBlcyI7Ci0KLSAgLyoqIE1lc3NhZ2UgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFID0gIm1lc3NhZ2UiOwotCi0gIC8qKiBPcGVyYXRpb24gZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLQotICAvKiogUG9ydFR5cGUgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSA9ICJwb3J0VHlwZSI7Ci0KLSAgLyoqIEJpbmRpbmcgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HID0gImJpbmRpbmciOwotCi0gIC8qKiBQb3J0IGRlc2NyaXB0aW9uIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT05fUE9SVCA9ICJwb3J0IjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIHRoZSBwcm9maWxlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcmVwb3J0QXJ0aWZhY3QgIHRoZSByZXBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSB3c2RsVVJMICAgICAgICAgdGhlIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgICAgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSByZXBvcnRlciAgICAgICAgYSBSZXBvcnRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIFdTREwgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgU3RyaW5nIHdzZGxVUkwsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBiYXNlZCBzZXJ2aWNlIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkCi0gICAqICAgICAgICAgd2hpbGUgdmFsaWRhdGluZyBoZSBXU0RMIGJhc2VkIHNlcnZpY2UgZGVzY3JpcHRpb24uCi0gICAqIEBkZXByZWNhdGVkICAtLSB1c2UgdmFsaWRhdGVBcnRpZmFjdCgpCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50IHZhbGlkYXRlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYTNkMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRmFpbHVyZURldGFpbDsKLQotCi0vKioKLSAqIFByb2Nlc3MgYXNzZXJ0aW9uLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcm90ZWN0ZWQgU3RyaW5nIHJlc3VsdDsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWlsdXJlRGV0YWlsTWVzc2FnZTsKLSAgcHJvdGVjdGVkIEZhaWx1cmVEZXRhaWwgZmFpbHVyZURldGFpbDsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlVmFsaWRhdG9ySW1wbCBiYXNlX3ZhbGlkYXRvcjsKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25Qcm9jZXNzKEJhc2VWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICB0aGlzLmJhc2VfdmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICovCi0gIHZvaWQgcmVzZXQoKQotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBudWxsOwotICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFzc2VydGlvbi4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCB0YXJnZXRDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFZlcmJvc2Ugb3V0cHV0LgotICAgKi8KLSAgcHVibGljIHZvaWQgZGVidWcoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBpZiAoKGJhc2VfdmFsaWRhdG9yICE9IG51bGwpICYmIGJhc2VfdmFsaWRhdG9yLnZlcmJvc2VPcHRpb24pCi0gICAgewotICAgICAgU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjY2VlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Fzc2VydGlvblByb2Nlc3NWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogUHJvY2VzcyBhc3NlcnRpb24gdXNpbmcgV1NETFZpc2l0b3IgaW50ZXJmYWNlLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLSAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi0gIGltcGxlbWVudHMgV1NETFZpc2l0b3IKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yKEJhc2VWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFNlcnZpY2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KElucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoT3V0cHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ09wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nSW5wdXQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ091dHB1dCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KE1lc3NhZ2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBIZWFkZXIgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZU1lc3NhZ2VWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZU1lc3NhZ2VWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJjMDU4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Jhc2VNZXNzYWdlVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5DYW5kaWRhdGVJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5TZXJ2aWNlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTG9nVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5NZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGwuV1NETFZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET00yV3JpdGVyOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLQotLyoqCi0gKiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCB2ZXJpZnkgdGhhdCB0aGUgV1NETCBhbmQgYXNzb2NpYXRlZCBYTUwgc2NoZW1hIGRlZmluaXRpb25zCi0gKiBhcmUgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEppbSBDbHVuZQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqIEBhdXRob3IgTmVpbCBEZWxpbWEgKG5kZGVsaW1hQGNhLmlibS5jb20pIAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgZXh0ZW5kcyBCYXNlVmFsaWRhdG9ySW1wbAotICBpbXBsZW1lbnRzIExvZ1ZhbGlkYXRvcgotewotICAvKioKLSAgKiBXU0RMIGRvY3VtZW50LgotICAqLwotICBwcml2YXRlIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQ7Ci0KLSAgLyoqCi0gICAqIExvZyBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlRW50cnkgbG9nRW50cnk7Ci0gIHByb3RlY3RlZCBMb2cgbG9nOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RhYmxlOwotICBwcml2YXRlIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnOwotCi0gIHB1YmxpYyB2b2lkIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotCi0gICAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgYXNzZXJ0aW9ucy5nZXRBcnRpZmFjdChnZXRBcnRpZmFjdFR5cGUoKSksCi0gICAgICAgICAgICAgIHJlcG9ydEFydGlmYWN0LCByZXBvcnRlcik7Ci0KLSAgICAgIHRlc3RhYmxlID0gYW5hbHl6ZXJDb25maWcuZ2V0TG9nTG9jYXRpb24oKSAhPSBudWxsOwotICAgICAgdGhpcy5hbmFseXplckNvbmZpZyA9IGFuYWx5emVyQ29uZmlnOwotICAgICAgdGhpcy53c2RsRG9jdW1lbnQgPSAoV1NETERvY3VtZW50KSBhbmFseXplckNvbnRleHQuZ2V0V3NkbERvY3VtZW50KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3IjaW5pdChvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0LCBvcmcud3NpLnRlc3QucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3QsIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QsIG9yZy53c2kud3NkbC5XU0RMRG9jdW1lbnQsIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBcnRpZmFjdCwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLQotICAgIHRoaXMuYW5hbHl6ZXJDb25maWcgPSBVdGlscy5nZXRBbmFseXplckNvbmZpZyhyZXBvcnRlcik7Ci0gICAgdGVzdGFibGUgPSAoKGFuYWx5emVyQ29uZmlnICE9IG51bGwpICYmIChhbmFseXplckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpICE9IG51bGwpKTsJCi0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZXMKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdzZGxEb2N1bWVudAotICAgKiBAcmV0dXJuIHdzZGxEb2N1bWVudAotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3IjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgLy8gU2F2ZSBsb2cgZW50cnkgdG8gYmUgcmVmZXJlbmNlZCBieSBvdGhlciBtZXRob2RzCi0gICAgdGhpcy5sb2dFbnRyeSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKTsKLQotICAgIC8vIEdldCByZWZlcmVuY2UgdG8gdGhlIGFuYWx5emVyIGNvbmZpZyBvYmplY3QKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZyA9Ci0gICAgICByZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRSZXBvcnRDb250ZXh0KCkuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpOwotCi0gICAgLyogSWYgU2VydmljZSBEZXNjcmlwdGlvbiAoV1NETC9VRERJKSBOT1Qgc3VwcGxpZWQgaW4gYW5hbHl6ZXIgY29uZmlnIE9SCi0gICAgICogU2VydmljZSBEZXNjcmlwdGlvbiBJUyBzdXBwbGllZCBhbmQgdGhlIGN1cnJlbnQgbWVzc2FnZSBjb3JyZWxhdGVzIHRvIGl0Li4uCi0gICAgICovCi0gICAgaWYgKCghYW5hbHl6ZXJDb25maWcuaXNXU0RMUmVmZXJlbmNlU2V0KCkpCi0gICAgICB8fCBtZXNzYWdlQ29ycmVsYXRlc1RvU2VydmljZSgKLSAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICBhbmFseXplckNvbmZpZy5nZXRDb3JyZWxhdGlvblR5cGUoKSkpCi0gICAgewotICAgICAgLy8gbm93IGlubmVyIGNsYXNzZXMgbW92ZWQgb3V0IGZyb20gdGhlIHZhbGlkYXRvcgotICAgICAgLy9TdHJpbmcgY2xhc3NQcmVmaXggPSB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiQiOwotICAgICAgU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi4iOwotCi0gICAgICAvLyBQcm9jZXNzIGFzc2VydGlvbnMgZm9yIHRoaXMgYXJ0aWZhY3QgYWdhaW5zdCB0aGUgdGFyZ2V0IGNvbnRleHQKLSAgICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB3aGV0aGVyIHRoZSBtZXNzYWdlIGNvcnJlbGF0ZXMgdG8gdGhlIHNlcnZpY2UgdW5kZXIgdGVzdC4KLSAgICogVXNlIHRoZSByZXF1ZXN0IHBhcnQgb2YgdGhlIHJlcXVlc3QtcmVzcG9uc2UgcGFpciwgZnJvbSB3aGljaCB0aGUgY29ycmVsYXRpb24gb2YgdGhlIHJlc3BvbnNlIGlzIGltcGxpZWQuCi0gICAqIEVudGl0aWVzIGZyb20gdGhlIFNlcnZpY2UgdW5kZXIgdGVzdCBhcmUgZGV0ZXJtaW5lZCBvbmNlIGZvciBhbGwuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgICAgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGNvcnJlbGF0aW9uVHlwZSBhIGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWVzc2FnZSBjb3JyZWxhdGVzIHRvIHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGNvcnJlbGF0aW9uIHR5cGUgaXMgbm90IGFwcHJvcHJpYXRlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIG1lc3NhZ2VDb3JyZWxhdGVzVG9TZXJ2aWNlKAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgU3RyaW5nIGNvcnJlbGF0aW9uVHlwZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIFVSSVtdIGVuZHBvaW50cyA9IG51bGw7Ci0gICAgYm9vbGVhbiBjb3JyZWxhdGlvbiA9IGZhbHNlOwotCi0gICAgLyogVEVNUDogR2V0IGl0IGZyb20gYW5hbHl6ZXIgY29uZmlnIHBhc3NlZCBpbiBvbiBpbml0IG1ldGhvZAotICAgIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlID0gZW50cnlDb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QW5hbHl6ZXJDb250ZXh0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCk7Ci0gICAgKi8KLSAgICBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZSA9IGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCk7Ci0KLSAgICAvLyBTZXJ2aWNlIHJlZmVyZW5jZSAKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPSBhbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IG51bGw7Ci0gICAgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgc2VydmljZQotICAgICAgU2VydmljZSBzZXJ2aWNlID0KLSAgICAgICAgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldCBwb3J0Ci0gICAgICBQb3J0IHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldCBiaW5kaW5nCi0gICAgICBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgYmluZGluZwotICAgICAgYmluZGluZyA9Ci0gICAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKChlbmRwb2ludHMgPSBob3N0QW5kUG9ydENvcnJlbGF0aW9uKGVudHJ5Q29udGV4dCkpICE9IG51bGwKLSAgICAgICYmIHVybFBhdGhDb3JyZWxhdGlvbihlbnRyeUNvbnRleHQsIGVuZHBvaW50cykpCi0gICAgewotCi0gICAgICAvKiBJZiBjb3JyZWxhdGlvbiB0eXBlIGlzICJlbmRwb2ludCIsIHRoaXMgaXMgYWxsIHRoZSBjb3JyZWxhdGlvbiB0aGF0IGNhbiBiZSBkb25lLgotICAgICAgICogKE5vdGUgLSB0aGlzIGlzIGluY29tcGxldGUgY29ycmVsYXRpb24gc2luY2UgPjEgc2VydmljZSBjb3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVuZHBvaW50LgotICAgICAgICogIFRoZXJlZm9yZSAsIGlmIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgc2VydmljZXMgb24gdGhlIHNhbWUgZW5kcG9pbnQgYXBwZWFyIGluIHRoZSBsb2cgZmlsZQotICAgICAgICogIGFuZCBjb3JyZWxhdGlvbiB0eXBlIGlzICJlbmRwb2ludCIsIGFsbCB0aG9zZSBtZXNzYWdlcyB3aWxsIGJlIGFuYWx5emVkKS4KLSAgICAgICAqLwotICAgICAgaWYgKGNvcnJlbGF0aW9uVHlwZQotICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfRU5EUE9JTlQpKQotICAgICAgewotICAgICAgICBjb3JyZWxhdGlvbiA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGFsd2F5cyBhbGxvdyBHRVQgcmVxdWVzdHMgcmlnaHQgdGhyb3VnaCBpZiB0aGV5J3ZlIHBhc3NlZCBFbmRwb2ludCBDb3JyZWxhdGlvbgotICAgICAgICBTdHJpbmcgcmVxdWVzdFR5cGUgPSBnZXRIdHRwUmVxdWVzdFR5cGUoZW50cnlDb250ZXh0KTsKLSAgICAgICAgaWYgKChyZXF1ZXN0VHlwZSAhPSBudWxsKSAmJiByZXF1ZXN0VHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJHRVQiKSkKLSAgICAgICAgewotICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgY29ycmVsYXRpb25UeXBlIGlzIG5vdCAiZW5kcG9pbnQiIHNvIGNvbnRpbnVlIG9uIHRvIHByb2Nlc3NpbmcgZm9yIGF0IGxlYXN0IAotICAgICAgICAgIC8vICJuYW1lc3BhY2UiIGNvcnJlbGF0aW9uLi4uCi0KLSAgICAgICAgICAvLyBnZXQgdGhlIG9wZXJhdGlvbiBzaWduYXR1cmUgKGlucHV0ICYgb3V0cHV0KSBmcm9tIHJlcXVlc3QgJiByZXNwb25zZSBtZXNzYWdlcy4uLgkgICAKLSAgICAgICAgICAvLyBhbmQgZG8gYSBxdWljayBET00gcGFyc2UgCi0gICAgICAgICAgRG9jdW1lbnQgcmVxdWVzdE1lc3NhZ2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgICAgICAvLyBDaGVjayBpZiBuYW1lc3BhY2UgaXMgZm91bmQgaW4gcmVxdWVzdCBtZXNzYWdlIG9ubHkKLSAgICAgICAgICBpZiAobmFtZXNwYWNlQ29ycmVsYXRpb24oYmluZGluZywgcmVxdWVzdE1lc3NhZ2UpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIG5hbWVzcGFjZSBmb3VuZCBhbmQgdGhlIGNvcnJlbGF0aW9uIHR5cGUgaXMgbmFtZXNwYWNlLCB0aGVuIHByb2Nlc3MgbWVzc2FnZXMKLSAgICAgICAgICAgIGlmIChjb3JyZWxhdGlvblR5cGUKLSAgICAgICAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX05BTUVTUEFDRSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgb3BlcmF0aW9uIGlzIGZvdW5kIGFuZCBjb3JyZWxhdGlvbiB0eXBlIGlzIG9wZXJhdGlvbiwgdGhlbiBwcm9jZXNzIG1lc3NhZ2VzCi0gICAgICAgICAgICBlbHNlIGlmICgKLSAgICAgICAgICAgICAgKG9wZXJhdGlvbkNvcnJlbGF0aW9uKGJpbmRpbmcsIHJlcXVlc3RNZXNzYWdlKSkKLSAgICAgICAgICAgICAgICAmJiAoY29ycmVsYXRpb25UeXBlCi0gICAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGlmIGNvbmZpZyBzY2hlbWEgd2FzIGZvbGxvd2VkIGNvcnJlY3RseQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJCYWQgY29ycmVsYXRpb24gdHlwZSBmb3VuZCBpbiBjb25maWc6ICIgKyBjb3JyZWxhdGlvblR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3JyZWxhdGlvbjsKLSAgfQotCi0gIC8qKiAKLSAgICogIENvcnJlbGF0aW9uIENoZWNrIDE6IFNlcnZpY2UgRGVzY3JpcHRpb24gZW5kcG9pbnQgdnMgSFRUUCBIZWFkZXIgKHRlc3QgMSkKLSAgICogIENoZWNrIGlmIHJlY2VpdmVySG9zdEFuZFBvcnQgZnJvbSByZXF1ZXN0IG1lc3NhZ2UgbG9nIG1hdGNoZXMgaG9zdCAmIHBvcnQgZnJvbSBXU0RMIFNPQVAgYmluZGluZyBmb3IKLSAgICogIHRoZSBTZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqICBJZiBpdCBkb2VzIG5vdCwgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbWVzc2FnZSBwYWlyLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEByZXR1cm4gaWYgcmVjZWl2ZXJIb3N0QW5kUG9ydCBmcm9tIHJlcXVlc3QgbWVzc2FnZSBsb2cgbWF0Y2hlcyAKLSAgICogICAgICAgICBob3N0ICYgcG9ydCBmcm9tIFdTREwgU09BUCBiaW5kaW5nIGZvciB0aGUgU2VydmljZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIGNvcnJlbGF0aW9uIGNoZWNrLgotICAgKi8KLSAgcHJpdmF0ZSBVUklbXSBob3N0QW5kUG9ydENvcnJlbGF0aW9uKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXQgPHJlY2VpdmVySG9zdEFuZFBvcnQ+IGZyb20gcmVxdWVzdCBtZXNzYWdlCi0gICAgU3RyaW5nIGh0dHBIb3N0QW5kUG9ydCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpOwotICAgIC8vIFNlYXJjaCBlbmRwb2ludCBsaXN0IGZvciBhIG1hdGNoIHdpdGggPHJlY2VpdmVySG9zdEFuZFBvcnQ+Ci0KLSAgICAvKiBURU1QOiBHZXQgaXQgZnJvbSBhbmFseXplciBjb25maWcgcGFzc2VkIGluIG9uIGluaXQgbWV0aG9kCi0gICAgcmV0dXJuIGVudHJ5Q29udGV4dC5nZXRBbmFseXplckNvbnRleHQoKQotICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbmRQb2ludHMoaHR0cEhvc3RBbmRQb3J0KTsKLSAgICAqLwotICAgIHJldHVybiBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEVuZFBvaW50cyhodHRwSG9zdEFuZFBvcnQpOwotICB9Ci0KLSAgLyoqIAotICAgKiBDb3JyZWxhdGlvbiBDaGVjayAyOiBTZXJ2aWNlIERlc2NyaXB0aW9uIGVuZHBvaW50IHZzIEhUVFAgSGVhZGVyICh0ZXN0IDIpCi0gICAqIAotICAgKiBVc2UgYW5hbHl6ZXIgY29uZmlnIGhvc3QgJiBwb3J0LCBwbHVzIFVSTCBwYXRoIChmcm9tIHJlcXVlc3QgbWVzc2FnZSBoZWFkZXIgSFRUUCBQT1NUKQotICAgKiB0byBsb29rIGZvciB0aGUgY29ycmVzcG9uZGluZyBlbmRwb2ludCBpbiB0aGUgU2VydmljZSBEZWZpbml0aW9uLgotICAgKiBJZiBpdCBkb2VzIG5vdCwgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbWVzc2FnZSBwYWlyLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbmRwb2ludHMgYW4gYXJyYXkgb2YgZW5kcG9pbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgY29ycmVzcG9uZGluZyBlbmRwb2ludHMgYXJlIGZvdW5kIGluIHRoZSBTZXJ2aWNlIERlZmluaXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbiBjaGVjay4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB1cmxQYXRoQ29ycmVsYXRpb24oCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCwKLSAgICBVUklbXSBlbmRwb2ludHMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBjb21wYXJlczogcHJvdG9jb2wgKG11c3QgYmUgaHR0cCBmb3IgUE9TVCksIGhvc3QsIHBvcnQgYW5kIHBhdGguCi0KLSAgICAvLyBnZXQgUE9TVCBVUkkgcGF0aCBmcm9tIG1lc3NhZ2UgdXNpbmcgVG9rZW5pemVyCQotICAgIFZlY3RvciByZXF1ZXN0TGluZSA9Ci0gICAgICBnZXRIdHRwUmVxdWVzdChlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgIGlmIChyZXF1ZXN0TGluZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsgLy8gYW4gdW5leHBlY3RlZCBIVFRQIHJlcXVlc3QgdHlwZSAhCi0gICAgfQotCi0gICAgU3RyaW5nIHJlcXVlc3RQYXRoID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDEpOwotICAgIC8vIFBhdGggaW1tZWRpYXRlbHkgZm9sbG93cyBQT1NUCi0KLSAgICAvLyBjb21wYXJlIHBhdGggd2l0aCB0aG9zZSBpbiB0aGUgcHJldmlvdXMgZ2VuZXJhdGVkIFVSSSBsaXN0CQotICAgIFZlY3RvciBmaWx0ZXJlZEVuZHBvaW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZHBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZW5kcG9pbnRzW2ldLnRvU3RyaW5nKCkuZW5kc1dpdGgocmVxdWVzdFBhdGgpKQotICAgICAgewotICAgICAgICBmaWx0ZXJlZEVuZHBvaW50cy5hZGQoZW5kcG9pbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmlsdGVyZWRFbmRwb2ludHMuc2l6ZSgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyB0aGlzIFVSSSBzaG91bGQgYmUgdW5pcXVlIGluIHRoZSBXU0RMIC0gdGhlcmUgc2hvdWxkIGJlIGF0IG1vc3Qgb25lIG1hdGNoCi0gICAgLy8gYnV0IGlmIHdlIGhhdmUgYXQgbGVhc3Qgb25lLCB0aGF0J3Mgc3VmZmljaWVudCB0byBhY2NlcHQgdGhlIG1lc3NhZ2UKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqIAotICAgKiBDb3JyZWxhdGlvbiBDaGVjayAzOiBTZXJ2aWNlIERlc2NyaXB0aW9uIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIERldGVybWluZSBpZiB0aGUgU2VydmljZSBEZXNjcmlwdGlvbiBkZWNsYXJlcyB0aGUgbmFtZXNwYWNlIHRoYXQgYXBwZWFycyBpbiB0aGUgKHJlcXVlc3Q/KSBtZXNzYWdlIHNvYXAgYm9keS4KLSAgICogTG9jYXRpb24gb2YgcmVsZXZlbnQgbmFtZXNwYWNlIDoKLSAgICogT3BlcmF0aW9uIHR5cGUgICAgICAgICAgICAgICAgICAgIAktIE1lc3NhZ2UgTmFtZXNwYWNlOiAoY29tcGFyZSB3aXRoKSAgU2VydmljZSBEZWZpbml0aW9uIE5hbWVzcGFjZToKLSAgICogKGZyb20gbWVzc2FnZT8gZW5kcG9pbnQ/IHdoZXJlPykKLSAgICogcnBjLWxpdGVyYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7c29hcDpCb2R5Jmd0OyBjaGlsZCBuYW1lc3BhY2UuICAgICAgICAmbHQ7c29hcGJpbmQ6Ym9keSZndDsgbmFtZXNwYWNlLgotICAgKiBkb2MtbGl0ZXJhbAkJCSAgICAgICAgICAgICAgICAgJmx0O3NvYXA6Qm9keSZndDsgY2hpbGQgbmFtZXNwYWNlLiAgICAgICB0YXJnZXROYW1lU3BhY2Ugb2Ygc2NoZW1hIHRoYXQKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgICZsdDtzb2FwOmJvZHkmZ3Q7IGNoaWxkLgotICAgKiBJZiBpdCBkb2Vzbid0IG1hdGNoLCBzdG9wIHByb2Nlc3NpbmcgdGhpcyBtZXNzYWdlIHBhaXIuCi0gICAqIEBwYXJhbSBiaW5kaW5nIGEgYmluZGluZy4KLSAgICogQHBhcmFtIHJlcXVlc3QgYSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgZGVzY3JpcHRpb24gZGVjbGFyZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGFyZSB0aGUgCi0gICAqICAgICAgICAgc2FtZSBhcyB0aG9zZSB0aGF0IGFwcGVhciBpbiB0aGUgbWVzc2FnZSBzb2FwIGJvZHkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbmNoZWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gbmFtZXNwYWNlQ29ycmVsYXRpb24oQmluZGluZyBiaW5kaW5nLCBEb2N1bWVudCByZXF1ZXN0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gbmFtZXNwYWNlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLQotICAgIC8vIEdldCBvcGVyYXRpb24gbmFtZXNwYWNlIGZyb20gdGhlIHJlcXVlc3Qgc29hcCBtZXNzYWdlCi0gICAgU3RyaW5nIHNvYXBPcE5TID0gZ2V0U29hcEJvZHlDaGlsZChyZXF1ZXN0KS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIC8vIEdldCBzb2FwYmluZDpiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBudWxsOwotICAgIGlmICgoc29hcEJpbmRpbmcgPSBXU0RMVXRpbHMuZ2V0U29hcEJpbmRpbmcoYmluZGluZykpICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ1N0eWxlID0gc29hcEJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICB9Ci0KLSAgICAvLyBHbyB0aHJvdWdoIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBiaW5kaW5nIGFuZCBjaGVjayBmb3IgbmFtZXNwYWNlIG1hdGNoCi0gICAgSXRlcmF0b3Igb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChvcGVyYXRpb25zLmhhc05leHQoKSAmJiAhKG5hbWVzcGFjZUZvdW5kKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BlcmF0aW9ucy5uZXh0KCk7Ci0KLSAgICAgIC8vIElmIHJwYy1saXRlcmFsLCB0aGVuIGxvb2sgYXQgbmFtZXNwYWNlIGF0dHJpYnV0ZSBvbiBzb2FwYmluZDpib2R5Ci0gICAgICBpZiAoV1NETFV0aWxzLmlzUnBjTGl0ZXJhbChiaW5kaW5nU3R5bGUsIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICAvLyBHZXQgc29hcGJpbmQ6Ym9keSBlbGVtZW50IAotICAgICAgICBTT0FQQm9keSBzb2FwQm9keSA9IFdTRExVdGlscy5nZXRJbnB1dFNvYXBCb2R5KGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgICAgIGlmICgoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKHNvYXBPcE5TKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lc3BhY2VGb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgZG9jLWxpdGVyYWwsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICBlbHNlIGlmIChXU0RMVXRpbHMuaXNEb2NMaXRlcmFsKGJpbmRpbmdTdHlsZSwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICB7Ci0gICAgICAgIGludCBwYXJ0Q291bnQ7Ci0gICAgICAgIEl0ZXJhdG9yIHBhcnRzSXRlcmF0b3IgPSBudWxsOwotCi0gICAgICAgIC8vIEdldCBmaXJzdCBwYXJ0IG5hbWUgZnJvbSBzb2FwYmluZDpib2R5IGVsZW1lbnQgcGFydHMgYXR0cmlidXRlCi0gICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldEZpcnN0UGFydE5hbWUoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHBhcnRzIGZyb20gdGhlIG1lc3NhZ2UgICAgICAgICAgIAotICAgICAgICBNYXAgcGFydHNNYXAgPSBudWxsOwotICAgICAgICBpZiAoKHBhcnRzTWFwID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkpCi0gICAgICAgICAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBhcnRzSXRlcmF0b3IgPSBwYXJ0c01hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHBhcnQgbmFtZSB3YXNuJ3Qgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQsIHRoZW4gcHJvY2VzcyBqdXN0IHRoZSBmaXJzdCBvbmUKLSAgICAgICAgICBpZiAocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHBhcnRDb3VudCA9IDE7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFydENvdW50ID0gcGFydHNNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0Q291bnQgJiYgIW5hbWVzcGFjZUZvdW5kOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0IG5leHQgcGFydAotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIHBhcnRzSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgICAvLyBJZiBwYXJ0IG5hbWUgbWF0Y2hlcyBvciB0aGVyZSBpcyBubyBwYXJ0IG5hbWUsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICAgICAgICBpZiAoKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgIHx8ICgocGFydE5hbWUgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0TmFtZSgpLmVxdWFscyhwYXJ0TmFtZSkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKChwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAmJiAocGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhzb2FwT3BOUykpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZUZvdW5kOwotICB9Ci0KLSAgLyoqIAotICAqIENvcnJlbGF0aW9uIENoZWNrIDQgOiBTZXJ2aWNlIERlc2NyaXB0aW9uICJvcGVyYXRpb24iCi0gICoKLSAgKiBDaGVjayBpZiB0aGUgbWVzc2FnZSBjb250ZW50IG1hdGNoZXMgYW55IG9mIHRoZSBjYW5kaWRhdGUgb3BlcmF0aW9uIGRlZmluaXRpb25zIAotICAqIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiB0aGUgU2VydmljZSBEZXNjcmlwdGlvbi4KLSAgKiAgCi0gICogRm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UsIGxvb2sgZm9yIHRoZSBzb2FwIGJvZHkgY2hpbGQgZWxlbWVudCBuYW1lCi0gICogaW4gdGhlIGxpc3Qgb2YgY2FuZGlkYXRlIG9wZXJhdGlvbiBuYW1lcy4KLSAgKiBAcGFyYW0gYmluZGluZyAgICAgICAgYSBiaW5kaW5nLgotICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBhIHJlcXVlc3QgbWVzc2FnZS4KLSAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG1lc3NhZ2UgY29udGVudCBtYXRjaGVzIGFueSBvZiB0aGUgY2FuZGlkYXRlIAotICAqICAgICAgICAgb3BlcmF0aW9uIGRlZmluaXRpb25zIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiB0aGUgCi0gICogICAgICAgICBTZXJ2aWNlIERlc2NyaXB0aW9uLgotICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbmNoZWNrLgotICAqLwotICBwcml2YXRlIGJvb2xlYW4gb3BlcmF0aW9uQ29ycmVsYXRpb24oCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIERvY3VtZW50IHJlcXVlc3RNZXNzYWdlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gb3BlcmF0aW9uRm91bmQgPSBmYWxzZTsKLQotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUgPSBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DOwotCi0gICAgLy8gR2V0IHNvYXBiaW5kOmJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IG51bGw7Ci0gICAgaWYgKChzb2FwQmluZGluZyA9IFdTRExVdGlscy5nZXRTb2FwQmluZGluZyhiaW5kaW5nKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nU3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBmcm9tIHRoZSBzb2FwIGJvZHkKLSAgICBFbGVtZW50IHNvYXBCb2R5Q2hpbGQgPSBnZXRTb2FwQm9keUNoaWxkKHJlcXVlc3RNZXNzYWdlKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIGEgY2hpbGQgZWxlbWVudCwgdGhlbiBjaGVjayBpdAotICAgIGlmIChzb2FwQm9keUNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IG9wZXJhdGlvbiBuYW1lIGZyb20gdGhlIHNvYXA6Ym9keQotICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBzb2FwQm9keUNoaWxkLmdldExvY2FsTmFtZSgpOwotCi0gICAgICAvLyBHZXQgb3BlcmF0aW9uIFFOYW1lCi0gICAgICBRTmFtZSBvcGVyYXRpb25RTmFtZSA9Ci0gICAgICAgIG5ldyBRTmFtZShzb2FwQm9keUNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLCBvcGVyYXRpb25OYW1lKTsKLQotICAgICAgLy8gR28gdGhyb3VnaCBlYWNoIG9wZXJhdGlvbiBpbiB0aGUgYmluZGluZyBhbmQgY2hlY2sgZm9yIG5hbWVzcGFjZSBtYXRjaAotICAgICAgSXRlcmF0b3Igb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG9wZXJhdGlvbnMuaGFzTmV4dCgpICYmICEob3BlcmF0aW9uRm91bmQpKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPQotICAgICAgICAgIChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLm5leHQoKTsKLQotICAgICAgICAvLyBJZiBycGMtbGl0ZXJhbCwgdGhlbiBsb29rIGF0IG5hbWVzcGFjZSBhdHRyaWJ1dGUgb24gc29hcGJpbmQ6Ym9keQotICAgICAgICBpZiAoV1NETFV0aWxzLmlzUnBjTGl0ZXJhbChiaW5kaW5nU3R5bGUsIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHNvYXBiaW5kOmJvZHkgZWxlbWVudCAKLSAgICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkuZXF1YWxzKG9wZXJhdGlvbk5hbWUpKQotICAgICAgICAgICAgb3BlcmF0aW9uRm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgZG9jLWxpdGVyYWwsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICAgIGVsc2UgaWYgKFdTRExVdGlscy5pc0RvY0xpdGVyYWwoYmluZGluZ1N0eWxlLCBiaW5kaW5nT3BlcmF0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgIGludCBwYXJ0Q291bnQ7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHNJdGVyYXRvciA9IG51bGw7Ci0KLSAgICAgICAgICAvLyBHZXQgZmlyc3QgcGFydCBuYW1lIGZyb20gc29hcGJpbmQ6Ym9keSBlbGVtZW50IHBhcnRzIGF0dHJpYnV0ZQotICAgICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldEZpcnN0UGFydE5hbWUoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgZnJvbSB0aGUgbWVzc2FnZSAgICAgICAgICAgCi0gICAgICAgICAgTWFwIHBhcnRzTWFwID0gbnVsbDsKLSAgICAgICAgICBpZiAoKHBhcnRzTWFwID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UGFydHMoKSkKLSAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHNJdGVyYXRvciA9IHBhcnRzTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBwYXJ0IG5hbWUgd2Fzbid0IHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50LCB0aGVuIHByb2Nlc3MganVzdCB0aGUgZmlyc3Qgb25lCi0gICAgICAgICAgICBpZiAocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgcGFydENvdW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcGFydENvdW50ID0gcGFydHNNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRDb3VudCAmJiAhb3BlcmF0aW9uRm91bmQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0IG5leHQgcGFydAotICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgcGFydHNJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgLy8gSWYgcGFydCBuYW1lIG1hdGNoZXMgb3IgdGhlcmUgaXMgbm8gcGFydCBuYW1lLCB0aGVuIGNoZWNrIG5hbWVzcGFjZQotICAgICAgICAgICAgICBpZiAoKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgfHwgKChwYXJ0TmFtZSAhPSBudWxsKSAmJiAocGFydC5nZXROYW1lKCkuZXF1YWxzKHBhcnROYW1lKSkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChwYXJ0LmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICYmIChwYXJ0LmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKG9wZXJhdGlvblFOYW1lKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBvcGVyYXRpb24gdG8gZmluZCBhIG1hdGNoCi0gICAgcmV0dXJuIG9wZXJhdGlvbkZvdW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBmYWlsdXJlIGRldGFpbC4KLSAgICogQHBhcmFtIG1lc3NhZ2UgICAgICAgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0ICBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIGZhaWx1cmUgZGV0YWlsLgotICAgKi8KLSAgcHVibGljIEZhaWx1cmVEZXRhaWwgY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oCi0gICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0RWxlbWVudExvY2F0aW9uKCkpOwotICAgIHJldHVybiBmYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIGFkZGl0aW9uYWwgZW50cnkgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBzZXQgbm90QXBwbGljYWJsZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uLmdldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KCkuZ2V0V1NETElucHV0KCkgIT0gbnVsbAotICAgICAgJiYgIXRlc3RBc3NlcnRpb24uZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKS5nZXRXU0RMSW5wdXQoKS5lcXVhbHMoIm5vbmUiKQotICAgICAgJiYgYW5hbHl6ZXJDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2UoKS5nZXRXU0RMTG9jYXRpb24oKSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5vdEFwcGxpY2FibGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBub3RBcHBsaWNhYmxlOwotICB9Ci0KLQotICAvKioKLSAgICogR2V0IFBPU1QgcmVxdWVzdC4KLSAgICogQHBhcmFtIGh0dHBIZWFkZXIgYW4gSFRUUCAKLSAgICogQHJldHVybiBQT1NUIHJlcXVlc3QuCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFBvc3RSZXF1ZXN0KFN0cmluZyBodHRwSGVhZGVyKQotICB7Ci0gICAgLy9SZXF1ZXN0LUxpbmUgICA9IE1ldGhvZCBTUCBSZXF1ZXN0LVVSSSBTUCBIVFRQLVZlcnNpb24gQ1JMRgotICAgIFZlY3RvciByZXF1ZXN0TGluZSA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmcgc3RhcnRMaW5lID0gbnVsbDsKLQotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgc3RhcnRMaW5lID0gaHR0cE1lc3NhZ2VUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXJ0TGluZS5zdGFydHNXaXRoKCJQT1NUIikpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RhcnRMaW5lLCAiXHUwMDIwIik7Ci0gICAgICB3aGlsZSAoc3RhcnRMaW5lVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWVzdExpbmUuYWRkKHN0YXJ0TGluZVRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0TGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgSFRUUCByZXF1ZXN0LgotICAgKiBAcGFyYW0gaHR0cEhlYWRlciBhbiBIVFRQIAotICAgKiBAcmV0dXJuIEhUVFAgcmVxdWVzdC4KLSAgKi8KLSAgcHJpdmF0ZSBWZWN0b3IgZ2V0SHR0cFJlcXVlc3QoU3RyaW5nIGh0dHBIZWFkZXIpCi0gIHsKLSAgICAvL1JlcXVlc3QtTGluZSAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCi0gICAgVmVjdG9yIHJlcXVlc3RMaW5lID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoaHR0cEhlYWRlciwgIlxuXHJcZiIpOwotCi0gICAgaWYgKGh0dHBNZXNzYWdlVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICBzdGFydExpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhcnRMaW5lLnN0YXJ0c1dpdGgoIlBPU1QiKSB8fCBzdGFydExpbmUuc3RhcnRzV2l0aCgiR0VUIikpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RhcnRMaW5lLCAiXHUwMDIwIik7Ci0gICAgICB3aGlsZSAoc3RhcnRMaW5lVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWVzdExpbmUuYWRkKHN0YXJ0TGluZVRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXF1ZXN0TGluZSA9IG51bGw7IC8vIHNpZ25pZnkgbm90IFBPU1Qgb3IgR0VUCi0gICAgfQotCi0gICAgcmV0dXJuIHJlcXVlc3RMaW5lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBIVFRQIHJlcXVlc3QgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIEhUVFAgcmVxdWVzdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SHR0cFJlcXVlc3RUeXBlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gIHsKLSAgICAvL1JlcXVlc3QtTGluZSAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCi0KLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICBTdHJpbmcgaHR0cFJlcXVlc3RUeXBlID0gbnVsbDsKLSAgICBTdHJpbmcgc3RhcnRMaW5lID0gbnVsbDsKLQotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgc3RhcnRMaW5lID0gaHR0cE1lc3NhZ2VUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3RhcnRMaW5lVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihzdGFydExpbmUsICJcdTAwMjAiKTsKLSAgICAgIGlmIChzdGFydExpbmVUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgewotICAgICAgICBodHRwUmVxdWVzdFR5cGUgPSBzdGFydExpbmVUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBodHRwUmVxdWVzdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgZm9yIGEgb25lLXdheSBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgZm9yIGEgb25lLXdheSBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc09uZVdheVJlc3BvbnNlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gIHsKLSAgICBib29sZWFuIG9uZXdheSA9IGZhbHNlOwotCi0gICAgLy8gVEVNUDogSWYgdGhpcyBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UgYW5kIHRoZXJlIGlzIG5vIGNvbnRlbnQsIHRoZW4gc2V0IG9uZS13YXkgdG8gdHJ1ZQotICAgIC8vIFRFTVA6IE5lZWQgdG8gZmluZCBhIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3BvbnNlIGlzIGZvciBhIG9uZS13YXkgbWVzc2FnZQotICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAmJiBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgb25ld2F5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb25ld2F5OwotICB9Ci0KLSAgLyoqCi0gICAqIG1lc3NhZ2VJc0RvY0xpdFNjaGVtYVZhbGlkLgotICAgKgotICAgKiBWYWxpZGF0ZXMgdGhlIGRvYy1saXQgbWVzc2FnZXMgYWdhaW5zdCB0aGUgc2NoZW1hIGZvdW5kIGluIGEgY2FuZGlkYXRlIHdzZGwgZG9jdW1lbnQuCi0gICAqCi0gICAqIElkZW50aWZ5IChvciBiZSBnaXZlbikgYSByZWZlcmVuY2UgaW4gdGhlIHdzZGwgdG8gZWxlbWVudHMgKGZvdW5kIGluICZsdDt3c2RsOnR5cGVzJmd0OyZsdDtzY2hlbWEmZ3Q7Li4uKQotICAgKiB0aGF0IGFyZSBpbW1lZGlhdGUgY2hpbGRyZW4gZWxlbWVudHMgaW4gdGhlIHNvYXAgYm9keS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGRvY3VtZW50IGxpdGVyYWwgbWVzc2FnZSBpcyBjb21wbGlhbnQgdG8gdGhlIAotICAgKiAgICAgICAgIHNjaGVtYSBmb3VuZCBpbiBhIGNhbmRpZGF0ZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHBhcnNpbmcgcHJvYmxlbSBkdXJpbmcgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIG1lc3NhZ2VJc0RvY0xpdFNjaGVtYVZhbGlkKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgdXNlIGEgdmFsaWRhdGluZyBwYXJzZXIgdGhhdCBpcyBjYXBhYmxlIG9mIGFjY2VwcHRpbmcgbXVsdGlwbGUgc2NoZW1hIHJlZmVyZW5jZXMKLSAgICAvLyBwcm9ncmFtbWF0aWNhbGx5LiBUaGVuLCBldmVyeSBzY2hlbWEgaW4gY2FuZGlkYXRlIHdzZGwgY2FuIGJlIHBhc3NlZCBpbiB0byB0aGUgdmFsaWRhdG9yLiBUaGlzIGF2b2lkcyB0aGUKLSAgICAvLyBuZWVkIHRvIHBpbnBvaW50IGEgcGFydGljdWxhciBzY2hlbWEgZWxlbWVudCBmcm9tIGFsbCBjYW5kaWRhdGUgd3NkbDp0eXBlcywgY29ycmVzcG9uZGluZyB0byB0aGUgCi0gICAgLy8gd3NkbDpvcGVyYXRpb24gYmVpbmcgdXNlZC4gVGhlIHBpbnBvaW50aW5nIGlzIGFuIGluY29tcGxldGUgd29ya2Fyb3VuZCBmb3IgcGFyc2VycyBub3QgY2FwYWJsZSAKLSAgICAvLyBvZiBhY2NlcHRpbmcgYXJyYXlzIG9mIHNjZWhtYSByZWZlcmVuY2VzIAotICAgIC8vIFsgaS5lLiB0aGUgRE9NIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BIFNPVVJDRSwgT2JqZWN0W10gey4uLn0pIF0KLSAgICAvLyBnZXQgYWxsIHhzOnNjaGVtYSBmcm9tIGFsbCBjYW5kaWRhdGUgd3NkbDp0eXBlcyAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gYWRkIGVhY2ggPHNjaGVtYT4gdG8gYW4gYXJyYXkgYW5kIHBhc3MgdGhpcyBhcnJheSB0byB0aGUgdmFsaWRhdGluZyBwYXJzZXIKLSAgICAvLyB3aGVuIHZhbGlkYXRpbmcgdGhlL2VhY2ggc29hcCBib2R5IGNoaWxkLgotCi0gICAgLy8gdXNlIHRoZSByZWZlcmVuY2VkIFdTREwgZmlsZSBhbmQgaXRzIGltcG9ydGVkIGZpbGVzIHRvIGZpbmQgc2NoZW1hcwotICAgIExpc3Qgc2NoZW1hV1NETHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgTGlzdCBpbmxpbmVTY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIExpc3Qgc2NoZW1hU3RyaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIERlZmluaXRpb25bXSBhbGxEZWZzID0KLSAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbnMoKTsKLSAgICBmb3IgKGludCB0aGlzRGVmID0gMDsgdGhpc0RlZiA8IGFsbERlZnMubGVuZ3RoOyB0aGlzRGVmKyspCi0gICAgewotICAgICAgc2NoZW1hV1NETHMuYWRkKGFsbERlZnNbdGhpc0RlZl0uZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIH0KLSAgICBJdGVyYXRvciBmaWxlSXRlcmF0b3IgPSBzY2hlbWFXU0RMcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChmaWxlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIC8vIHBhcnNlIGZpbGUgaWYgcG9zc2libGUKLSAgICAgIERvY3VtZW50IHdzZGxEb2MgPSBudWxsOwotICAgICAgU3RyaW5nIHdzZGxVUkkgPSAoU3RyaW5nKSBmaWxlSXRlcmF0b3IubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdzZGxEb2MgPSBYTUxVdGlscy5wYXJzZVhNTERvY3VtZW50VVJMKHdzZGxVUkksIG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnQgcm9vdCA9IHdzZGxEb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBmaW5kIHRoZSBzY2hlbWEKLSAgICAgIE5vZGVMaXN0IHNjaGVtYUVsZW1lbnRzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lUYWcuRUxFTV9YU0RfU0NIRU1BLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICBXU0lUYWcuRUxFTV9YU0RfU0NIRU1BLmdldExvY2FsUGFydCgpKTsKLQotICAgICAgZm9yIChpbnQgZWxlbSA9IDA7IGVsZW0gPCBzY2hlbWFFbGVtZW50cy5nZXRMZW5ndGgoKTsgZWxlbSsrKQotICAgICAgeyAgICAgCi0gICAgICAgIEVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpIHNjaGVtYUVsZW1lbnRzLml0ZW0oZWxlbSk7Ci0gICAgICAgIC8vIGNvcHlpbmcgYWxsIHRoZSBOUyBkZWNsYXJhdGlvbnMgZnJvbSB3c2RsOmRlZmluaXRpb25zIHdzZGw6dHlwZXMKLSAgICAgICAgY29weU5TRGVjbGFyYXRpb25zKHJvb3QsIHNjaGVtYSk7Ci0gICAgICAgIGNvcHlOU0RlY2xhcmF0aW9ucygoRWxlbWVudCkgc2NoZW1hLmdldFBhcmVudE5vZGUoKSwgc2NoZW1hKTsKLSAgICAgICAgLy8gUmVwbGFjaW5nIGFsbCByZWxhdGl2ZSBzY2hlbWFMb2NhdGlvbiBVUklzIHdpdGggYWJzb2x1dGUgb25lcwotICAgICAgICByZXBsYWNlUmVsYXRpdmVVUklzKHNjaGVtYSwgd3NkbFVSSSk7Ci0gICAgICAgIGlubGluZVNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBYZXJjZXMgcGFyc2VyIE9OTFkgYWNjZXB0cyBhbiBhcnJheQotICAgIC8vIG9mIHNjaGVtYXMgd2l0aCB1bmlxdWUgbmFtZXNwYWNlcy4KLSAgICBpZiAoIWR1cGxpY2F0ZU5hbWVzcGFjZXNEZXRlY3RlZChpbmxpbmVTY2hlbWFzKSkKLSAgICB7Ci0gICAgICAvLyBTZXJpYWxpemUgdGhlIHNjaGVtYSBlbGVtZW50cyBpbnNpZGUgdGhlIFR5cGVzLCB0aGVuIHVzZSB0aGlzIGFzCi0gICAgICAvLyB0aGUgc2NoZW1hIHN0cmluZyBmb3IgdGhlIHZhbGlkYXRpb24KLSAgICAgIEl0ZXJhdG9yIGkgPSBpbmxpbmVTY2hlbWFzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgCUVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpaS5uZXh0KCk7IAotICAgICAgICBTdHJpbmcgc2NoZW1hU3RyaW5nID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoc2NoZW1hKTsKLSAgICAgICAgc2NoZW1hU3RyaW5ncy5hZGQoc2NoZW1hU3RyaW5nKTsKLSAgICAgIH0KLQotICAgICAgTm9kZUxpc3QgZWxlbWVudExpc3QgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKQotICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lUYWcuRUxFTV9TT0FQX0JPRFkuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKGVsZW1lbnRMaXN0ID09IG51bGwgfHwgZWxlbWVudExpc3QuZ2V0TGVuZ3RoKCkgIT0gMSkKLSAgICAgIHsKLSAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc29hcCBib2R5ICEKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBwcm9iYWJseSBhbiBlcnJvciBjb25kaXRpb24gdGhvdWdoCi0gICAgICB9Ci0KLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5Q2hpbGRMaXN0ID0gKChFbGVtZW50KWVsZW1lbnRMaXN0Lml0ZW0oMCkpLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGNoaWxkID0gMDsgY2hpbGQgPCBzb2FwQm9keUNoaWxkTGlzdC5nZXRMZW5ndGgoKTsgY2hpbGQrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBzb2FwQm9keUNoaWxkID0gc29hcEJvZHlDaGlsZExpc3QuaXRlbShjaGlsZCk7Ci0gICAgICAgIGlmIChzb2FwQm9keUNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBkbyBhbGwgZm9yIG5vdwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdyaXRlIG91dCBlbGVtZW50IHRyZWUgdG8gU3RyaW5nCi0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZUNvbnRlbnQgPSBET00yV3JpdGVyLm5vZGVUb1N0cmluZyhzb2FwQm9keUNoaWxkKTsKLSAgICAgICAgICAgIC8vIHBhcnNlIHRoZSBjaGlsZCBlbGVtZW50LCB2YWxpZGF0aW5nIGFnYWluc3QgdGhlIHNjaGVtYSAKLSAgICAgICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKG1lc3NhZ2VDb250ZW50LCBzY2hlbWFTdHJpbmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZhaWxlZAotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJWYWxpZGF0aW5nIFBhcnNpbmcgcHJvYmxlbSIsIGUpOwotICAgICAgICAgICAgLy8gQmFkIHRoaW5ncyBoYXZlIGhhcHBlbmVkCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9ICAgCi0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvcHkgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gY2hpbGQgYSBzdHJpcHBlZCBtZXNzYWdlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNvcHlOU0RlY2xhcmF0aW9ucyhFbGVtZW50IHBhcmVudCwgRWxlbWVudCBjaGlsZCkKLSAgewotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gcGFyZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBub2RlSWQgPSAwOyBub2RlSWQgPCBub2RlTWFwLmdldExlbmd0aCgpOyBub2RlSWQrKykKLSAgICB7Ci0gICAgICBOb2RlIG5vZGUgPSBub2RlTWFwLml0ZW0obm9kZUlkKTsKLQotICAgICAgaWYgKChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkKLSAgICAgICAgJiYgKG5vZGUuZ2V0Tm9kZU5hbWUoKS5zdGFydHNXaXRoKCJ4bWxuczoiKSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgLy8gSWYgYW4gTlMgYmVpbmcgY29waWVkIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY2hpbGQgZWxlbWVudCBoYXMsIGNvcHkgaXQKLSAgICAgICAgaWYgKCFjaGlsZC5nZXROb2RlTmFtZSgpLnN0YXJ0c1dpdGgoCi0gICAgICAgICAgbm9kZU5hbWUuc3Vic3RyaW5nKG5vZGVOYW1lLmluZGV4T2YoIjoiKSArIDEpICsgIjoiKSkKLSAgICAgICAgewotICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShub2RlTmFtZSwgbm9kZS5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVwbGFjZXMgYWxsIHJlbGF0aXZlIFVSSXMgZm9yIHNjaGVtYUxvY2F0aW9uIGF0dHJpYnV0ZXMuCi0gICAqIEBwYXJhbSBzY2hlbWEgYW4geHNkOnNjaGVtYSBlbGVtZW50LgotICAgKiBAcGFyYW0gd3NkbFVSSSBhbiBVUkkgb2YgV1NETCB0aGF0IGNvbnRhaW5zIHhzZDpzY2hlbWEgYmVpbmcgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlcGxhY2VSZWxhdGl2ZVVSSXMoRWxlbWVudCBzY2hlbWEsIFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgLy8gUmV0cmlldmluZyBhbGwgeHNkOmltcG9ydCBlbGVtZW50cwotICAgIE5vZGVMaXN0IGltcG9ydHMgPSBzY2hlbWEuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgIFdTSVRhZy5FTEVNX1hTRF9JTVBPUlQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICBXU0lUYWcuRUxFTV9YU0RfSU1QT1JULmdldExvY2FsUGFydCgpKTsKLSAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wb3J0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgaW1wID0gKEVsZW1lbnQpIGltcG9ydHMuaXRlbShpKTsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHNjaGVtYUxvY2F0aW9uIGF0dHJpYnV0ZQotICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9Ci0gICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbXAsIFdTSVRhZy5BVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIHByZXNlbnQKLSAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUcnlpbmcgdG8gY3JlYXRlIGFuIFVSSSBvYmplY3QgdXNpbmcgYXR0cmlidXRlJ3MgdmFsdWUKLSAgICAgICAgVVJJIHVyaSA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgdXJpID0gbmV3IFVSSShzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgYW4gYWJzb2x1dGUgVVJJICh0aGUgVVJJIGNvbnN0cnVjdG9yIHRocm93cyB0aGUKLSAgICAgICAgLy8gTWFsZm9ybWVkVVJJRXhjZXB0aW9uKSwgY3JlYXRpbmcgdGhlIGFic29sdXRlIFVSSSB1c2luZyB3c2RsVVJJCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBuZXdVUkkgPSB3c2RsVVJJLnN1YnN0cmluZygwLCB3c2RsVVJJLmxhc3RJbmRleE9mKCIvIikgKyAxKQotICAgICAgICAgICAgKyBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVyaSA9IG5ldyBVUkkobmV3VVJJKTsKLSAgICAgICAgICAgIC8vIFNldHRpbmcgYSBuZXcgVVJJIGFzIGEgdmFsdWUgZm9yIHRoZSBzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUKLSAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uLnNldFZhbHVlKHVyaS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYmluZGluZyBvcGVyYXRpb24gbWF0Y2hlZCBmb3IgU09BUCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlUeXBlIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIGRvYyBhIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gYW55IGJpbmRpbmcgb3BlcmF0aW9uIG1hdGNoZWQsIG51bGwgaWYgaXQgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uTWF0Y2goRW50cnlUeXBlIGVudHJ5VHlwZSwgRG9jdW1lbnQgZG9jKSAKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgU09BUCBCb2R5IGNoaWxkIGVsZW1lbnQKLSAgICAgIFFOYW1lIG9wZXJhdGlvbiA9IGdldE9wZXJhdGlvbkZyb21NZXNzYWdlKGRvYyk7Ci0gICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBSUEMgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBycGNCaW5kaW5nT3BzID0gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpKTsKLSAgICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSB0aGUgZ2l2ZW4gb3BlcmF0aW9uIG5hbWUKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIGVudHJ5VHlwZSwgb3BlcmF0aW9uLCBycGNCaW5kaW5nT3BzKTsKLSAgICAgICAgLy8gSWYgbm8gb25lIFJQQyBvcGVyYXRpb24gbWF0Y2hlZAotICAgICAgICBpZihiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgZG9jdW1lbnQgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbltdIGRvY0JpbmRpbmdPcGVyYXRpb25zID0gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKSk7Ci0gICAgICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSBnaXZlbiBlbGVtZW50IG5hbWUKLSAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgICAgIGdldERvY0xpdE9wZXJhdGlvbnMoZW50cnlUeXBlLCBvcGVyYXRpb24sIGRvY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBleGFjdGx5IG9uZSBvcGVyYXRpb24gbWF0Y2hlZAotICAgICAgICAgIGlmIChwb3RlbnRpYWxEb2NMaXRPcHMubGVuZ3RoID09IDEpCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uID0gcG90ZW50aWFsRG9jTGl0T3BzWzBdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIE1hdGNoIGVpdGhlciBJbnB1dCBvciBPdXRwdXQuCi0gICAqIEBwYXJhbSBtZXNzYWdlRW50cnlUeXBlIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIHNvYXAgbWVzc2FnZS4KLSAgICogQHBhcmFtIG9wIGJpbmRpbmcgb3BlcmF0aW9ucy4KLSAgICogQHJldHVybiBtYXRjaGVkIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldE9wZXJhdGlvbk1hdGNoKAotICAgIEVudHJ5VHlwZSBtZXNzYWdlRW50cnlUeXBlLAotICAgIERvY3VtZW50IHNvYXBNZXNzYWdlLAotICAgIEJpbmRpbmdPcGVyYXRpb25bXSBvcCkKLSAgewotICAgIC8vIEdldCBvcGVyYXRpb24gZnJvbSBtZXNzYWdlCi0gICAgUU5hbWUgb3BlcmF0aW9uID0gZ2V0T3BlcmF0aW9uRnJvbU1lc3NhZ2Uoc29hcE1lc3NhZ2UpOwotICAgIC8vIGxpc3Qgb2YgUU5hbWVzCi0KLSAgICByZXR1cm4gZ2V0T3BlcmF0aW9uTWF0Y2gobWVzc2FnZUVudHJ5VHlwZSwgb3BlcmF0aW9uLCBvcCk7Ci0gIH0KLQotICAvKioKLSAgICogTWF0Y2ggZWl0aGVyIElucHV0IG9yIE91dHB1dC4KLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeVR5cGUgbWVzc2FnZSBlbnRyeSB0eXBlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIFNPQVAgb3BlcmF0aW9uIG5hbWUuCi0gICAqIEBwYXJhbSBvcCBiaW5kaW5nIG9wZXJhdGlvbnMuCi0gICAqIEByZXR1cm4gbWF0Y2hlZCBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb25NYXRjaCgKLSAgICBFbnRyeVR5cGUgbWVzc2FnZUVudHJ5VHlwZSwKLSAgICBRTmFtZSBvcGVyYXRpb24sCi0gICAgQmluZGluZ09wZXJhdGlvbltdIG9wKQotICB7Ci0gICAgUU5hbWUgY2hlY2tPcGVyYXRpb247Ci0KLSAgICAvLyBMb29rIGZvciBhIGNhbmRpZGF0ZSBvcGVyYXRpb24gaW4gdGhlIHdzZGwgdGhhdCBtYXRjaGVzIHRoaXMgc2lnbmF0dXJlLgotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgb3AubGVuZ3RoOyBrKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgTGlzdCBleHRlbnNpYmxlcyA9IG51bGw7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCA9IG9wW2tdOwotCi0gICAgICBpZiAobWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpKQotICAgICAgewotICAgICAgICBuYW1lID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgICAgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgbWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpCi0gICAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgbmFtZSA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiUmVzcG9uc2UiOwotICAgICAgICBleHRlbnNpYmxlcyA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBzb2FwOmJvZHkKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gZ2V0U29hcEJvZHkoZXh0ZW5zaWJsZXMpOwotICAgICAgaWYgKHNvYXBCb2R5ID09IG51bGwpCi0gICAgICAgIGNoZWNrT3BlcmF0aW9uID0gbmV3IFFOYW1lKG5hbWUpOwotICAgICAgZWxzZQotICAgICAgICBjaGVja09wZXJhdGlvbiA9IG5ldyBRTmFtZShzb2FwQm9keS5nZXROYW1lc3BhY2VVUkkoKSwgbmFtZSk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCAmJiBvcGVyYXRpb24uZXF1YWxzKGNoZWNrT3BlcmF0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIChiaW5kaW5nT3ApOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBNYXRjaCBlaXRoZXIgSW5wdXQgb3IgT3V0cHV0LgotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5VHlwZSBhIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIGEgc29hcCBtZXNzYWdlLgotICAgKiBAcGFyYW0gb3AgYmluc2luZyBvcGVyYXRpb25zLgotICAgKiBAcmV0dXJuIG1hdGNoZWQgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCgKLSAgICBFbnRyeVR5cGUgbWVzc2FnZUVudHJ5VHlwZSwKLSAgICBEb2N1bWVudCBzb2FwTWVzc2FnZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gb3ApCi0gIHsKLSAgICBNYXAgcGFydHMgPSBnZXRQYXJ0TGlzdEZyb21NZXNzYWdlKHNvYXBNZXNzYWdlKTsgLy8gbGlzdCBvZiBRTmFtZXMKLQotICAgIC8vIExvb2sgZm9yIGEgY2FuZGlkYXRlIG9wZXJhdGlvbiBpbiB0aGUgd3NkbCB0aGF0IG1hdGNoZXMgdGhpcyBzaWduYXR1cmUuCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBvcC5sZW5ndGg7IGsrKykKLSAgICB7Ci0KLSAgICAgIE1lc3NhZ2Ugd3NkbE1lc3NhZ2UgPSBudWxsOwotICAgICAgTGlzdCBleHRlbnNpYmxlcyA9IG51bGw7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCA9IG9wW2tdOwotCi0gICAgICBpZiAobWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpKQotICAgICAgewotICAgICAgICB3c2RsTWVzc2FnZSA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgbWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpCi0gICAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgd3NkbE1lc3NhZ2UgPSBiaW5kaW5nT3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICBleHRlbnNpYmxlcyA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICAvL3dzZGxGYXVsdFBhcnRzID0gb3Bba10uZ2V0RmF1bHRzKCk7Ci0gICAgICAvLyBBREQ6IGNoZWNrIGZvciBjYXNlIHdoZW4gcmVzcG9uc2UgbWVzc2FnZSBpcyBhIGZhdWx0Ci0KLSAgICAgIGlmIChzYW1lUGFydHMocGFydHMsIHdzZGxNZXNzYWdlLCBnZXRTb2FwSGVhZGVyKGV4dGVuc2libGVzKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoYmluZGluZ09wKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiogCi0gICAqIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCguLikuCi0gICAqIAotICAgKiBGaW5kIG9uZSBvciBtb3JlIG1hdGNoaW5nIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHRoZSBXU0RMIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAqIGdpdmVuIHJlcXVlc3QtcmVzcG9uc2Ugc2lnbmF0dXJlLgotICAgKiAKLSAgICogVGhpcyBvdmVybG9hZGVkIHZlcnNpb24gaXMgaW50ZW5kZWQgZm9yIHBvc3NpYmxlIENvcnJlbGF0aW9uIG9ubHkgKG5vdCBhc3NlcnRpb25zKSwKLSAgICogc2luY2UgaXQgY2hlY2tzIGZvciBhbiBvcGVyYXRpb24gc2lnbmF0dXJlIG9uIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLgotICAgKiBBc3NlcnRpb25zIG5vdyBjaGVjayByZXF1ZXN0ICYgcmVzcG9uc2UgbWVzc2FnZXMgaW5kZXBlbmRlbnRseS4gCi0gICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBhIHJlcXVlc3QgbWVzc2FnZS4KLSAgICogQHBhcmFtIHJlc3BvbnNlTWVzc2FnZSBhIHJlc3BvbnNlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBvcCBiaW5kaW5nIG9wZXJhdGlvbnMuCi0gICAqIEByZXR1cm4gbWF0Y2hlZCBvcGVyYXRpb24uCi0gICAqLwotICAvL3ByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb25QYXJ0c01hdGNoKAotICAvLyAgRG9jdW1lbnQgcmVxdWVzdE1lc3NhZ2UsCi0gIC8vICBEb2N1bWVudCByZXNwb25zZU1lc3NhZ2UsCi0gIC8vICBCaW5kaW5nT3BlcmF0aW9uW10gb3ApCi0gIC8vewotICAvLyAgTWFwIGluUGFydHMgPSBnZXRQYXJ0TGlzdEZyb21NZXNzYWdlKHJlcXVlc3RNZXNzYWdlKTsgLy8gbGlzdCBvZiBRTmFtZXMKLSAgLy8gIE1hcCBvdXRQYXJ0cyA9IGdldFBhcnRMaXN0RnJvbU1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTsKLSAgLy8gIC8vIGxpc3Qgb2YgUU5hbWVzCi0gIC8vCi0gIC8vICAvLyBMb29rIGZvciBhIGNhbmRpZGF0ZSBvcGVyYXRpb24gaW4gdGhlIHdzZGwgdGhhdCBtYXRjaGVzIHRoaXMgc2lnbmF0dXJlLgotICAvLyAgZm9yIChpbnQgayA9IDA7IGsgPCBvcC5sZW5ndGg7IGsrKykKLSAgLy8gIHsKLSAgLy8KLSAgLy8gICAgLy9NYXAgd3NkbEZhdWx0UGFydHMgPSBudWxsOwotICAvLyAgICBNZXNzYWdlIHdzZGxJbk1lc3NhZ2UgPSBudWxsOwotICAvLyAgICBNZXNzYWdlIHdzZGxPdXRNZXNzYWdlID0gbnVsbDsKLSAgLy8KLSAgLy8gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSBvcFtrXTsKLSAgLy8gICAgaWYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpCi0gIC8vICAgIHsKLSAgLy8gICAgICB3c2RsSW5NZXNzYWdlID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAvLyAgICB9Ci0gIC8vCi0gIC8vICAgIGlmIChiaW5kaW5nT3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgIT0gbnVsbCkKLSAgLy8gICAgewotICAvLyAgICAgIHdzZGxPdXRNZXNzYWdlID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgLy8gICAgfQotICAvLyAgICAvL3dzZGxGYXVsdFBhcnRzID0gb3Bba10uZ2V0RmF1bHRzKCk7Ci0gIC8vICAgIC8vIEFERDogY2hlY2sgZm9yIGNhc2Ugd2hlbiByZXNwb25zZSBtZXNzYWdlIGlzIGEgZmF1bHQKLSAgLy8KLSAgLy8gICAgaWYgKHNhbWVQYXJ0cyhpblBhcnRzLAotICAvLyAgICAgIHdzZGxJbk1lc3NhZ2UsCi0gIC8vICAgICAgZ2V0U29hcEhlYWRlcihiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpKSkKLSAgLy8gICAgewotICAvLyAgICAgIC8vIG1hdGNoIG9uIHRoZSByZXF1ZXN0IC0gbm93IGNoZWNrIHJlc3BvbnNlIGlmIGl0cyBub3QgYSBmYXVsdAotICAvLyAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UgIT0gbnVsbCAmJiBpc0ZhdWx0KHJlc3BvbnNlTWVzc2FnZSkpCi0gIC8vICAgICAgewotICAvLyAgICAgICAgcmV0dXJuIChiaW5kaW5nT3ApOwotICAvLyAgICAgIH0KLSAgLy8gICAgICBlbHNlIGlmICgKLSAgLy8gICAgICAgIHNhbWVQYXJ0cygKLSAgLy8gICAgICAgICAgb3V0UGFydHMsCi0gIC8vICAgICAgICAgIHdzZGxPdXRNZXNzYWdlLAotICAvLyAgICAgICAgICBnZXRTb2FwSGVhZGVyKAotICAvLyAgICAgICAgICAgIGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpKSkKLSAgLy8gICAgICB7Ci0gIC8vICAgICAgICAvLyBJdCBkb2VzIG1hdGNoIHNvIHRyZWF0IHRoaXMgYXMgYSByZWxldmFudCBtZXNzYWdlIHBhaXIuIAotICAvLyAgICAgICAgLy8gTGV0IHRoZSBtZXNzYWdlIHRocm91Z2ggZm9yIHZhbGlkYXRpb24uCi0gIC8vICAgICAgICAvL0FERDogY291bGQgcGFzcyB0aGUgb3BlcmF0aW9ucyBsaXN0IGJhY2sgdG8gdGhlIGVudHJ5Q29udGV4dCBmb3IgdGhlIG1lc3NhZ2UuCi0gIC8vICAgICAgICByZXR1cm4gKGJpbmRpbmdPcCk7Ci0gIC8vICAgICAgfQotICAvLyAgICB9Ci0gIC8vICB9Ci0gIC8vICByZXR1cm4gbnVsbDsKLSAgLy99Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgc29hcDpib2R5IGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgc29hcDpib2R5IGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIFNPQVBCb2R5IGdldFNvYXBCb2R5KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICAvLyBGaW5kIHRoZSBzb2FwIGJvZHkKLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTSVRhZy5XU0RMX1NPQVBfQk9EWSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKFNPQVBCb2R5KSBleHRFbGVtOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBlbHNlIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTSVRhZy5XU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBvZiB0aGlzIG1pbWU6cGFydAotICAgICAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSBnZXRTb2FwQm9keSgKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICAgICAgICAgIHJldHVybiBzb2FwQm9keTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFNPQVBIZWFkZXIgZnJvbSBhIExpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dGVuc2libGVzIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRoZSBTT0FQSGVhZGVyIGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIFNPQVBIZWFkZXIgZ2V0U29hcEhlYWRlcihMaXN0IGV4dGVuc2libGVzKQotICB7Ci0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gbnVsbDsKLQotICAgIC8vIGZpbmQgdGhlIHNvYXAgaGVhZGVyCi0gICAgaWYgKGV4dGVuc2libGVzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaSA9IGV4dGVuc2libGVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkgJiYgc29hcEhlYWRlciA9PSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaS5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBjKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGZpcnN0IHBhcnQgbmFtZSBmcm9tIHNvYXBiaW5kOmJvZHkgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEZpcnN0UGFydE5hbWUoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLSAgICBMaXN0IGV4dExpc3QgPSBudWxsOwotICAgIEl0ZXJhdG9yIHBhcnRzSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbGlzdCBvZiBwYXJ0cyBieSBmaW5kaW5nIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQKLSAgICBpZiAoKGV4dExpc3QgPQotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSkKLSAgICAgICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBwYXJ0c0xpc3QgPSBudWxsOwotICAgICAgSXRlcmF0b3IgZXh0SXRlcmF0b3IgPSBleHRMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXh0SXRlcmF0b3IuaGFzTmV4dCgpICYmIChwYXJ0TmFtZSA9PSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGV4dEVsZW1lbnQgPSBleHRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoKHBhcnRzTGlzdCA9ICgoU09BUEJvZHkpIGV4dEVsZW1lbnQpLmdldFBhcnRzKCkpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHNJdGVyYXRvciA9IHBhcnRzTGlzdC5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgZG9jIGxpdGVyYWwgYmluZGluZyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgcGFydCBuYW1lCi0gICAgICAgICAgICBpZiAocGFydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHBhcnROYW1lID0gKFN0cmluZykgcGFydHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnROYW1lOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb25bXSBnZXREb2NMaXRPcGVyYXRpb25zKAotICAgIEVudHJ5VHlwZSBtZXNzYWdlVHlwZSwKLSAgICBRTmFtZSBwYXJ0RWxlbWVudFFOYW1lLAotICAgIEJpbmRpbmdPcGVyYXRpb25bXSB3c2RsT3BlcmF0aW9ucykKLSAgewotCi0gICAgaWYgKG1lc3NhZ2VUeXBlLmlzVHlwZShFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0SW5wdXREb2NMaXRPcGVyYXRpb25zKHBhcnRFbGVtZW50UU5hbWUsIHdzZGxPcGVyYXRpb25zKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZVR5cGUuaXNUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0T3V0cHV0RG9jTGl0T3BlcmF0aW9ucyhwYXJ0RWxlbWVudFFOYW1lLCB3c2RsT3BlcmF0aW9ucyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsgLy8gc2hvdWxkIGJlIG9uZSBvciB0aGUgb3RoZXIKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb25bXSBnZXRJbnB1dERvY0xpdE9wZXJhdGlvbnMoCi0gICAgUU5hbWUgcGFydEVsZW1lbnRRTmFtZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gd3NkbE9wZXJhdGlvbnMpCi0gIHsKLQotICAgIFZlY3RvciBwb3RlbnRpYWxPcHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHdzZGxPcGVyYXRpb25zW2ldLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAvLyBJZiBTT0FQIEJvZHkgY2hpbGQgZWxlbWVudCBpcyBub3QgcHJlc2VudCBhbmQgd3NkbDptZXNzYWdlIGRvZXMgbm90IGhhdmUgYW55IHdzZGw6cGFydHMsIHRoYXQgaXMgdGhlIG1hdGNoIAotICAgICAgICBpZiAocGFydEVsZW1lbnRRTmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFydHMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3RlbnRpYWxPcHMuYWRkKHdzZGxPcGVyYXRpb25zW2ldKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEl0ZXJhdG9yIHBhcnRzSXQgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHBhcnRzSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgUGFydCBuZXh0UGFydCA9IChQYXJ0KSBwYXJ0c0l0Lm5leHQoKTsKLSAgICAgICAgICBpZiAocGFydEVsZW1lbnRRTmFtZS5lcXVhbHMobmV4dFBhcnQuZ2V0RWxlbWVudE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gbWF0Y2hpbmcgcGFydCBmb3VuZCAoZG9jLWxpdCkgLSBhZGQgdG8gbGlzdCBvZiBwb3NzaWJsZSBvcGVyYXRpb24gbWF0Y2hlcwotICAgICAgICAgICAgcG90ZW50aWFsT3BzLmFkZCh3c2RsT3BlcmF0aW9uc1tpXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChCaW5kaW5nT3BlcmF0aW9uW10pIHBvdGVudGlhbE9wcy50b0FycmF5KG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbltdIGdldE91dHB1dERvY0xpdE9wZXJhdGlvbnMoCi0gICAgUU5hbWUgcGFydEVsZW1lbnRRTmFtZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gd3NkbE9wZXJhdGlvbnMpCi0gIHsKLQotICAgIFZlY3RvciBwb3RlbnRpYWxPcHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIC8vIElmIFNPQVAgQm9keSBjaGlsZCBlbGVtZW50IGlzIG5vdCBwcmVzZW50IGFuZCB3c2RsOm1lc3NhZ2UgZG9lcyBub3QgaGF2ZSBhbnkgd3NkbDpwYXJ0cywgdGhhdCBpcyB0aGUgbWF0Y2gKLSAgICAgICAgaWYgKHBhcnRFbGVtZW50UU5hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcnRzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgcG90ZW50aWFsT3BzLmFkZCh3c2RsT3BlcmF0aW9uc1tpXSk7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciBwYXJ0c0l0ID0gbWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwYXJ0c0l0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgbmV4dFBhcnQgPSAoUGFydCkgcGFydHNJdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKHBhcnRFbGVtZW50UU5hbWUuZXF1YWxzKG5leHRQYXJ0LmdldEVsZW1lbnROYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIG1hdGNoaW5nIHBhcnQgZm91bmQgKGRvYy1saXQpIC0gYWRkIHRvIGxpc3Qgb2YgcG9zc2libGUgb3BlcmF0aW9uIG1hdGNoZXMKLSAgICAgICAgICAgIHBvdGVudGlhbE9wcy5hZGQod3NkbE9wZXJhdGlvbnNbaV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoQmluZGluZ09wZXJhdGlvbltdKSBwb3RlbnRpYWxPcHMudG9BcnJheShuZXcgQmluZGluZ09wZXJhdGlvblswXSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcGFyZSBzb2FwIG1lc3NhZ2UgZWxlbWVudCBwYXJ0IG5hbWVzIHdpdGggUGFydHMgZnJvbSBzcGVjaWZpZWQgd3NkbCBPcGVyYXRpb24KLSAgICovCi0gIC8vcHJpdmF0ZSBib29sZWFuIHNhbWVQYXJ0cyhIYXNoU2V0IG1lc3NhZ2VQYXJ0cywgTWFwIHdzZGxQYXJ0cykKLSAgLy97Ci0gIC8vCi0gIC8vICAvLyBsb29rIGZvciB0aGUgc29hcC1tZXNzYWdlIG9wZXJhdGlvbiBzaWduYXR1cmUKLSAgLy8gIEl0ZXJhdG9yIGkgPSB3c2RsUGFydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgLy8gIC8vIGJ1aWxkIGEgc2V0IG9mIFBhcnQgbmFtZXMKLSAgLy8gIEhhc2hTZXQgaCA9IG5ldyBIYXNoU2V0KCk7Ci0gIC8vICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gIC8vICB7Ci0gIC8vICAgIFBhcnQgcCA9IChQYXJ0KSBpLm5leHQoKTsKLSAgLy8gICAgaC5hZGQocC5nZXROYW1lKCkpOwotICAvLyAgfQotICAvLwotICAvLyAgLy8gY29tcGFyZSB3aXRoIHRoZSBwYXJ0cyBsaXN0IGZyb20gdGhlIG1lc3NhZ2UJKHVub3JkZXJlZCkKLSAgLy8gIHJldHVybiAoaC5lcXVhbHMobWVzc2FnZVBhcnRzKSk7Ci0gIC8vfQotCi0gIC8qKgotICAgKiBDb21wYXJlIHNvYXAgbWVzc2FnZSBlbGVtZW50IHBhcnQgbmFtZXMgd2l0aCBQYXJ0cyBmcm9tIHNwZWNpZmllZCB3c2RsIE9wZXJhdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNhbWVQYXJ0cygKLSAgICBNYXAgbWVzc2FnZVBhcnRzLAotICAgIE1lc3NhZ2Ugd3NkbE1lc3NhZ2UsCi0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyKQotICB7Ci0KLSAgICBTdHJpbmcgc29hcEhlYWRlclBhcnQgPSBudWxsOwotICAgIGlmIChzb2FwSGVhZGVyICE9IG51bGwpCi0gICAgICBzb2FwSGVhZGVyUGFydCA9IHNvYXBIZWFkZXIuZ2V0UGFydCgpOwotCi0gICAgLy8gY2hlY2sgbnVsbCBjb25kaXRpb25zCi0gICAgaWYgKG1lc3NhZ2VQYXJ0cyA9PSBudWxsICYmIHdzZGxNZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7IC8vIHNpbXBsZSBlcXVhbGl0eSB0ZXN0Ci0gICAgfQotICAgIGVsc2UgaWYgKG1lc3NhZ2VQYXJ0cyA9PSBudWxsIHx8IHdzZGxNZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIC8vTGlzdCB3c2RsUGFydHMgPSB3c2RsTWVzc2FnZS5nZXRPcmRlcmVkUGFydHMobnVsbCk7Ci0gICAgTWFwIHdzZGxQYXJ0cyA9IG51bGw7Ci0gICAgaWYgKHdzZGxNZXNzYWdlLmdldFBhcnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c2RsUGFydHMgPSB3c2RsTWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICAgLy8gbG9vayBmb3IgdGhlIHNvYXAtbWVzc2FnZSBvcGVyYXRpb24gc2lnbmF0dXJlCi0gICAgICBJdGVyYXRvciBpID0gd3NkbFBhcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAvLyBidWlsZCBhIHNldCBvZiBQYXJ0IG5hbWVzICAgIAotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHAgPSAoUGFydCkgaS5uZXh0KCk7Ci0gICAgICAgIC8vIGRvIG5vdCBpbmNsdWRlIHRoZSBwYXJ0IGZvciB0aGUgc29hcDpoZWFkZXIgKGlmIGFueSkKLSAgICAgICAgaWYgKCFwLmdldE5hbWUoKS5lcXVhbHMoc29hcEhlYWRlclBhcnQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgcGFydCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNvYXA6Ym9keQotICAgICAgICAgIHYuYWRkKG5ldyBRTmFtZShwLmdldE5hbWUoKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBpZiBvbmUgb2YgdGhlIHBhcnRzIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNvYXA6aGVhZGVyIGluIHRoZSBiaW5kaW5nCi0gICAgICAvLyAoYnkgPHNvYXA6aGVhZGVyIHBhcnQ9IntwYXJ0bmFtZX0iPiksIHJlbW92ZSB0aGlzIGZyb20gdGhlIHNldAotCi0gICAgfQotCi0gICAgLy8gY29tcGFyZSB3aXRoIHRoZSBwYXJ0cyBsaXN0IGZyb20gdGhlIG1lc3NhZ2UJKG9yZGVyZWQpCi0gICAgaWYgKHYuaXNFbXB0eSgpICYmIG1lc3NhZ2VQYXJ0cy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUEI6IENoYW5nZWQgdG8gY29udGFpbnNBbGwoKSBzaW5jZSBlcXVhbHMoKSBmYWlscyB3aGVuIHVzaW5nIEpSRSAxLjQKLSAgICBpZiAodi5jb250YWluc0FsbChtZXNzYWdlUGFydHMua2V5U2V0KCkpCi0gICAgICAmJiAodi5zaXplKCkgPT0gbWVzc2FnZVBhcnRzLnNpemUoKSkpCi0gICAgewotICAgICAgLy8gQ2hlY2sgZm9yIHhzaTp0eXBlIG1pc21hdGNoCi0gICAgICBJdGVyYXRvciBwYXJ0cyA9IG1lc3NhZ2VQYXJ0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgUU5hbWUgcGFydE5hbWUsIHhzaVR5cGU7Ci0gICAgICB3aGlsZSAocGFydHMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBwYXJ0TmFtZSA9IChRTmFtZSkgcGFydHMubmV4dCgpOwotCi0gICAgICAgIC8vIEdldCB4c2k6dHlwZSBRTmFtZQotICAgICAgICBpZiAoKHhzaVR5cGUgPSAoUU5hbWUpIG1lc3NhZ2VQYXJ0cy5nZXQocGFydE5hbWUpKSAhPSBudWxsCi0gICAgICAgICAgJiYgd3NkbFBhcnRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIFdTREwgcGFydCBkZWZpbml0aW9uCi0gICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIHdzZGxQYXJ0cy5nZXQocGFydE5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgICAgLy8gSWYgeHNpVHlwZSBpcyBOT1QgZGVyaXZlZCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydAotICAgICAgICAgIGlmICghaXNEZXJpdmVkVHlwZSh4c2lUeXBlLCBwYXJ0LmdldFR5cGVOYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vcmV0dXJuICh2LmVxdWFscyhtZXNzYWdlUGFydHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBvbmUgc2NoZW1hIHR5cGUgaXMgZGVyaXZlZCBmcm9tIGFub3RoZXIuCi0gICAqIEBwYXJhbSBleHRUeXBlIGFuIGFzc3VtZWQgZGVyaXZlZCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZSBhbiBhc3N1bWVkIGJhc2UgdHlwZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGV4dFR5cGUgaXMgZGVyaXZlZCBmcm9tIHR5cGUsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZXJpdmVkVHlwZShRTmFtZSBleHRUeXBlLCBRTmFtZSB0eXBlKQotICB7Ci0gICAgLy8gSWYgZWl0aGVyIG9mIHR5cGVzIGlzIG51bGwsIHJldHVybiBmYWxzZQotICAgIGlmIChleHRUeXBlID09IG51bGwgfHwgdHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIElmIHRoZSB0eXBlcyBhcmUgZXF1YWwsIHJldHVybiB0cnVlCi0gICAgaWYgKGV4dFR5cGUuZXF1YWxzKHR5cGUpKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCBzY2hlbWFzIAotICAgIEl0ZXJhdG9yIGkgPSB3c2RsRG9jdW1lbnQuZ2V0U2NoZW1hcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFhTTW9kZWwgeHNNb2RlbCA9IChYU01vZGVsKSBpLm5leHQoKTsKLSAgICAgIC8vIFJldHJpZXZpbmcgdGhlIGRlcml2ZWQgdHlwZSBkZWZpbml0aW9uCi0gICAgICBYU1R5cGVEZWZpbml0aW9uIHhzVHlwZSA9IHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24oCi0gICAgICAgIGV4dFR5cGUuZ2V0TG9jYWxQYXJ0KCksIGV4dFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgLy8gSWYgaXQgaXMgZm91bmQgYW5kIGRlcml2ZWQgZnJvbSB0aGUgYmFzZSB0eXBlLCByZXR1cm4gdHJ1ZQotICAgICAgaWYgKHhzVHlwZSAhPSBudWxsICYmIHhzVHlwZS5kZXJpdmVkRnJvbSh0eXBlLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICB0eXBlLmdldExvY2FsUGFydCgpLCBYU0NvbnN0YW50cy5ERVJJVkFUSU9OX05PTkUpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZXh0VHlwZSBpcyBub3QgZGVyaXZlZCBmcm9tIHR5cGUsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAJKiBHZXQgYSBsaXN0IG9mIFFOYW1lcyBvZiBwYXJ0cyBmcm9tIHRoZSBzb2FwIGJvZHkgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlCi0gIAkqLwotICBwdWJsaWMgRWxlbWVudCBnZXRTb2FwQm9keUNoaWxkKERvY3VtZW50IGRvYykKLSAgewotCi0gICAgRWxlbWVudCBvcEVsZW0gPSBudWxsOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHNvYXA6Ym9keSBjaGlsZCBlbGVtZW50IG5hbWVzIGZyb20gdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKSAmJiBvcEVsZW0gPT0gbnVsbDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3BFbGVtID0gKEVsZW1lbnQpIG47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvcEVsZW07Ci0gIH0KLQotICAvKiogQ2hlY2sgd2hldGhlciB0aGlzIG1lc3NhZ2UgaXMgYSBzb2FwIGZhdWx0Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhdWx0KERvY3VtZW50IGRvYykKLSAgewotICAgIGJvb2xlYW4gaXNGYXVsdCA9IGZhbHNlOwotCi0gICAgaWYgKGRvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIGlzRmF1bHQgPQotICAgICAgICAocm9vdAotICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkZhdWx0IikKLSAgICAgICAgICAuZ2V0TGVuZ3RoKCkKLSAgICAgICAgICA+IDApOwotICAgIH0KLQotICAgIHJldHVybiBpc0ZhdWx0OwotICB9Ci0KLSAgLyoqIAotICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVzc2FnZSBoYXMgYSBzb2FwIGJvZHkgd2l0aCBhIGNoaWxkIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBjb250YWluc1NvYXBCb2R5V2l0aENoaWxkKERvY3VtZW50IGRvYykKLSAgewotICAgIGJvb2xlYW4gY29udGFpbnMgPSBmYWxzZTsKLQotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb250YWlucyA9ICgoZ2V0U29hcEJvZHlDaGlsZChkb2MpID09IG51bGwpID8gZmFsc2UgOiB0cnVlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udGFpbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFNPQVBBY3Rpb24gdmFsdWUgZnJvbSB0aGUgSFRUUCBoZWFkZXJzLgotICAgKiBAcGFyYW0gaGVhZGVycyBIVFRQIGhlYWRlcnMKLSAgICogQHJldHVybiBTT0FQQWN0aW9uIHZhbHVlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNvYXBBY3Rpb24oU3RyaW5nIGhlYWRlcnMpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgUU5hbWVzIG9mIHBhcnRzIGZyb20gdGhlIHNvYXAgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgUlBDIHN0eWxlIG1lc3NhZ2UgY29udGVudAotICAgKi8KLSAgcHJpdmF0ZSBRTmFtZSBnZXRPcGVyYXRpb25Gcm9tTWVzc2FnZShEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBRTmFtZSBvcGVyYXRpb24gPSBudWxsOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICAvLyBJZiBlbGVtZW50LCB0aGVuIHRoaXMgaXMgdGhlIG9wZXJhdGlvbiBuYW1lCi0gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9wZXJhdGlvbiA9IG5ldyBRTmFtZShuLmdldE5hbWVzcGFjZVVSSSgpLCBuLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgUU5hbWVzIG9mIHBhcnRzIGZyb20gdGhlIHNvYXAgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgUlBDIHN0eWxlIG1lc3NhZ2UgY29udGVudAotICAgKi8KLSAgcHJpdmF0ZSBNYXAgZ2V0UGFydExpc3RGcm9tTWVzc2FnZShEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBNYXAgcGFydHMgPSBuZXcgSGFzaE1hcCgpOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHNvYXA6Ym9keSBncmFuZC1jaGlsZCBlbGVtZW50IG5hbWVzIGZyb20gdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgLy8gKGltbWVkaWF0ZSBjaGlsZCBpcyB0aGUgbWVzc2FnZSBuYW1lKQotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgb3BlcmF0aW9uIG5hbWUuIEl0cyBjaGlsZHJlbiBhcmUgdGhlIHBhcnRzCi0gICAgICAgICAgICBOb2RlTGlzdCBncmFuZENoaWxkcmVuID0gbi5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyYW5kQ2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZSBtID0gZ3JhbmRDaGlsZHJlbi5pdGVtKGopOwotICAgICAgICAgICAgICBpZiAobSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHBhcnQgaGFzIGFuIHhzaTp0eXBlCi0gICAgICAgICAgICAgICAgQXR0ciBhdHRyID0KLSAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQpIG0sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1hTSSwgInR5cGUiKSk7Ci0KLSAgICAgICAgICAgICAgICBRTmFtZSB4c2lUeXBlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIHhzaTp0eXBlIGF0dHJpYnV0ZSwgdGhlbiBnZXQgdGhlIHZhbHVlIGFzIGEgUU5hbWUgCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgeHNpVHlwZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgRE9NVXRpbHMuZ2V0UU5hbWUoYXR0ci5nZXROb2RlVmFsdWUoKSwgKEVsZW1lbnQpIG0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uIHdlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBhZGQgdG8gdGhlIGNoaWxkIGVsZW1lbnQgbGlzdAotICAgICAgICAgICAgICAgIHBhcnRzLnB1dCgKLSAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShtLmdldE5hbWVzcGFjZVVSSSgpLCBtLmdldExvY2FsTmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgIHhzaVR5cGUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJ0czsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uW10gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ1tdIGJpbmRpbmdzKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgSGFzaFNldCBiaW5kaW5nT3BlcmF0aW9uc1NldCA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICAvLyB3aGl6eiB0aHJvdWdoIHRoZSBiaW5kaW5ncywgY2hlY2tpbmcgZm9yIGEgYmluZGluZ09wZXJhdGlvbiBtYXRjaGluZyB0aGUgbWVzc2FnZQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspCi0gICAgewotCi0gICAgICBCaW5kaW5nIHRyeUJpbmRpbmcgPSBiaW5kaW5nc1tpXTsKLSAgICAgIExpc3QgYmluZGluZ09wcyA9IHRyeUJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQotICAgICAgaWYgKGJpbmRpbmdPcHMgIT0gbnVsbCkKLSAgICAgIHsKLQotICAgICAgICAvLyBzZWFyY2ggdGhyb3VnaCBiaW5kaW5nIE9wZXJhdGlvbnMKLSAgICAgICAgSXRlcmF0b3IgYmluZGluZ09wSXQgPSB0cnlCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGJpbmRpbmdPcEl0Lmhhc05leHQoKSkKLSAgICAgICAgewotCi0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wSXQubmV4dCgpOwotICAgICAgICAgIC8vIGNoZWNrIGRlcGVuZHMgb24gd2hpY2ggYmluZGluZyBzdHlsZSBpcyBkZWNsYXJlZCBpbiB0aGUgd3NkbAotICAgICAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcE9wZXJhdGlvbihiaW5kaW5nT3ApOwotICAgICAgICAgIC8vR1Q6IG1vdmUgdGhpcyBtZXRob2QgdG8gdXRpbHMKLQotICAgICAgICAgIFN0cmluZyBzdHlsZTsKLSAgICAgICAgICBpZiAoKHNvYXBPcCA9PSBudWxsKSB8fCAoc3R5bGUgPSBzb2FwT3AuZ2V0U3R5bGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyB1c2UgdGhlIHN0eWxlIG9mIHRoZSBwYXJlbnQgYmluZGluZ09wCi0KLSAgICAgICAgICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcEJpbmRpbmcodHJ5QmluZGluZyk7Ci0gICAgICAgICAgICAvL0dUOiBtb3ZlIHRoaXMgbWV0aG9kIHRvIHV0aWxzCi0gICAgICAgICAgICBpZiAoKHN0eWxlID0gc29hcEJpbmQuZ2V0U3R5bGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3R5bGUgPSBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DOwotICAgICAgICAgICAgICAvL2RlZmF1bHQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHN0eWxlLmVxdWFscyhiaW5kaW5nU3R5bGUpKQotICAgICAgICAgIHsKLQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNTZXQuYWRkKGJpbmRpbmdPcCk7Ci0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gY3VycmVudCBiaW5kaW5nIGhhcyBubyBiaW5kaW5nT3BlcmF0aW9ucywgaWdub3JlCi0gICAgfQotICAgIHJldHVybiAoQmluZGluZ09wZXJhdGlvbltdKSBiaW5kaW5nT3BlcmF0aW9uc1NldC50b0FycmF5KAotICAgICAgbmV3IEJpbmRpbmdPcGVyYXRpb25bMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHNvYXA6Ym9keSBlbGVtZW50IGlzIGxpdGVyYWwuCi0gICAqIEBwYXJhbSBleHRFbGVtZW50cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIHdzZGw6aW5wdXQgb3Igd3NkbDpvdXRwdXQKLSAgICogb2YgYSBiaW5kaW5nCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xpdGVyYWwoTGlzdCBleHRFbGVtcykKLSAgewotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gZ2V0U09BUEJvZHkoZXh0RWxlbXMpOwotICAgIGlmIChzb2FwQm9keSAhPSBudWxsCi0gICAgICAmJiBzb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIE9yZGVycyB3c2RsOnBhcnQgbmFtZXMga2VlcGluZyBpbiBtaW5kIHRoZSAicGFydHMiIGF0dHJpYnV0ZSBvZiBXU0RMIHNvYXA6Ym9keQotICAgKiBAcGFyYW0gbWVzc2FnZVBhcnRzIGEgbGlzdCBvZiB3c2RsOnBhcnRTCi0gICAqIEBwYXJhbSBleHRFbGVtcyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nCi0gICAqIEByZXR1cm4gdGhlIG9yZGVyZWQgbGlzdCBvZiBwYXJ0IG5hbWVzCi0gICAqLwotICBwdWJsaWMgTGlzdCBvcmRlclBhcnROYW1lcyhMaXN0IG1lc3NhZ2VQYXJ0cywgTGlzdCBleHRFbGVtcykKLSAgewotICAgIExpc3Qgb3JkZXJlZFBhcnROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBMaXN0IGJvZHlQYXJ0cyA9IG51bGw7Ci0KLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IGdldFNPQVBCb2R5KGV4dEVsZW1zKTsKLSAgICBpZiAoc29hcEJvZHkgIT0gbnVsbCkKLSAgICAgIGJvZHlQYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0KLSAgICBJdGVyYXRvciBpID0gbWVzc2FnZVBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0TmFtZSA9ICgoUGFydCkgaS5uZXh0KCkpLmdldE5hbWUoKTsKLSAgICAgIC8vIElmIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBvciBjb250YWlucwotICAgICAgLy8gdGhlIHdzZGw6cGFydCBuYW1lLCB0aGVuIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIG9yZGVyZWQgbGlzdAotICAgICAgaWYgKGJvZHlQYXJ0cyA9PSBudWxsIHx8IGJvZHlQYXJ0cy5jb250YWlucyhwYXJ0TmFtZSkpCi0gICAgICAgIG9yZGVyZWRQYXJ0TmFtZXMuYWRkKHBhcnROYW1lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3JkZXJlZFBhcnROYW1lczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZXMgdGhlIFNPQVBCb2R5IG9iamVjdCBmcm9tIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsbWVudHMgaW4gYmluZGluZwotICAgKiBAcGFyYW0gZXh0RWxlbXMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRoZSBTT0FQQm9keSBlbGVtZW50Ci0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgZ2V0U09BUEJvZHkoTGlzdCBleHRFbGVtcykKLSAgewotICAgIGlmIChleHRFbGVtcyA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZXh0RWxlbXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpLm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgcmV0dXJuIChTT0FQQm9keSkgb2JqOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0gCi0gIHB1YmxpYyBMaXN0IHJlc29sdmVTYW1lTmFtZXNwYWNlcyhMaXN0IHNjaGVtYUVsZW1lbnRzKQotICB7Ci0gIAlMaXN0IG5hbWVzcGFjZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAlMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCUl0ZXJhdG9yIGkgPSBzY2hlbWFFbGVtZW50cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IHNjaGVtYSA9IChFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgaWYgKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzcGFjZXMuYWRkKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgCUxpc3Qgc2NoZW1hcyA9IGdldFNjaGVtYXNXaXRoU2FtZU5hbWVzcGFjZShzY2hlbWFFbGVtZW50cywgdGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAJaWYgKHNjaGVtYXMuc2l6ZSgpID09IDEpCi0gICAgICAJewotICAgICAgCSAgcmVzdWx0LmFkZChzY2hlbWEpOwotICAgICAgCX0KLSAgICAJZWxzZQotICAgIAl7Ci0gICAgCQkvLyBjb3B5aW5nIGFsbCB0aGUgTlMgZGVjbGFyYXRpb25zIGZyb20gd3NkbDpkZWZpbml0aW9ucyB3c2RsOnR5cGVzCi0gICAgICAvL2NvcHlOU0RlY2xhcmF0aW9ucyhyb290LCBzY2hlbWEpOwotICAgICAgY29weU5TRGVjbGFyYXRpb25zKChFbGVtZW50KSBzY2hlbWEuZ2V0UGFyZW50Tm9kZSgpLCBzY2hlbWEpOwotICAgICAgLy8gUmVwbGFjaW5nIGFsbCByZWxhdGl2ZSBzY2hlbWFMb2NhdGlvbiBVUklzIHdpdGggYWJzb2x1dGUgb25lcwotICAgICAgLy9yZXBsYWNlUmVsYXRpdmVVUklzKHNjaGVtYSwgd3NkbFVSSSk7Ci0gICAgICAvLyBTZXJpYWxpemUgdGhlIHNjaGVtYSBlbGVtZW50cyBpbnNpZGUgdGhlIFR5cGVzLCB0aGVuIHVzZSB0aGlzIGFzCi0gICAgICAvLyB0aGUgc2NoZW1hIHN0cmluZyBmb3IgdGhlIHZhbGlkYXRpb24KLSAgICAgIC8vU3RyaW5nIHNjaGVtYVN0cmluZyA9Ci0gICAgICAvLyAgRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoc2NoZW1hKTsKLSAgICAgIC8vIHNjaGVtYVN0cmluZ3MuYWRkKHNjaGVtYVN0cmluZyk7Ci0gICAgICAJfQotICAgICAgfQotICAgIH0KLSAgCXJldHVybiBudWxsOwotICB9Ci0gIAkKLSAgcHVibGljIExpc3QgZ2V0U2NoZW1hc1dpdGhTYW1lTmFtZXNwYWNlKExpc3Qgc2NoZW1hRWxlbWVudHMsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsgCi0gIAlMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpID0gc2NoZW1hRWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRWxlbWVudCBzY2hlbWEgPSAoRWxlbWVudClpLm5leHQoKTsKLSAgICAgIFN0cmluZyBzY2hlbWFUYXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgaWYgKHNjaGVtYVRhcmdldE5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgIAlzY2hlbWFUYXJnZXROYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgCi0gICAgICBpZiAoc2NoZW1hVGFyZ2V0TmFtZXNwYWNlLmVxdWFscyh0YXJnZXROYW1lc3BhY2UpKQotICAgICAgewotICAgICAgIAlyZXN1bHQuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkdXBsaWNhdGVOYW1lc3BhY2VzRGV0ZWN0ZWQoTGlzdCBzY2hlbWFFbGVtZW50cykKLSAgeyAKLSAgCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgTGlzdCBuYW1lc3BhY2VzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGkgPSBzY2hlbWFFbGVtZW50cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgCUVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgICBpZiAodGFyZ2V0TmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIAl0YXJnZXROYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgCXJlc3VsdCA9IHRydWU7Ci0gICAgICAgIAlicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCW5hbWVzcGFjZXMuYWRkKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlc2UgdGVzdHMgc2hvdWxkIGJlIHJ1biAoZGVwZW5kaW5nIG9uIHRoZSBhbmFseXplcgotICAgKiBjb25maWcpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBydW5UZXN0cygpIHsgcmV0dXJuIHRlc3RhYmxlOyB9Ci0gIAotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0gICAgICAvLyBHZXQgdGhlIGxvZyBmaWxlIHJlYWRlcgotICAgICAgTG9nUmVhZGVyIGxvZ1JlYWRlciA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0xvZ1JlYWRlcigpOwotCi0gICAgICAvLyBDcmVhdGUgbG9nIHJlYWRlciBjYWxsYmFjawotICAgICAgTG9nUHJvY2Vzc29yIGVudmVsb3BlUHJvY2Vzc29yID0gbmV3IExvZ1Byb2Nlc3Nvcih0aGlzKTsKLQotICAgICAgLy8gU3RhcnQgcmVhZGluZyB0aGUgbG9nIGZpbGUKLSAgICAgIGxvZ1JlYWRlci5yZWFkTG9nKGFuYWx5emVyQ29uZmlnLmdldExvZ0xvY2F0aW9uKCksIGVudmVsb3BlUHJvY2Vzc29yKTsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMb2dQcm9jZXNzb3IgaW1wbGVtZW50cyBNZXNzYWdlRW50cnlIYW5kbGVyIHsKLSAgICAgIExvZ1ZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIG1lc3NhZ2UgcHJvY2Vzc29yIGFzIGEgbG9nIHJlYWRlciBjYWxsYmFjayBmdW5jdGlvbi4KLSAgICAgKi8KLSAgICAgIExvZ1Byb2Nlc3NvcihMb2dWYWxpZGF0b3IgdmFsaWRhdG9yKSB7Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0b3I7Ci0gICAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9jZXNzIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwcm9jZXNzQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgICAgICAgICB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgICAgcmVwb3J0ZXIuYWRkQXJ0aWZhY3RSZWZlcmVuY2UoYXJ0aWZhY3RSZWZlcmVuY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgYSBzaW5nbGUgbG9nIGVudHJ5LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NMb2dFbnRyeShFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlKGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9CYXNlVmFsaWRhdG9ySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9CYXNlVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzJjZTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZVZhbGlkYXRvckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUHJlcmVxRmFpbGVkTGlzdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MRG9jdW1lbnRDYWNoZVVzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSAqIFRoZSBXU0RMIHZhbGlkYXRvciB3aWxsIHZlcmlmeSB0aGF0IHRoZSBXU0RMIGFuZCBhc3NvY2lhdGVkIFhNTCBzY2hlbWEgZGVmaW5pdGlvbnMKLSAqIGFyZSBpbiBjb25mb3JtYW5jZSB3aXRoIHRoZSBwcm9maWxlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwgICAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgWE1MRG9jdW1lbnRDYWNoZVVzZXIKLSAgaW1wbGVtZW50cyBCYXNlVmFsaWRhdG9yCi17Ci0KLSAgLyoqCi0gICAqIEEgaGFzaHRhYmxlIHRoYXQgbWFwcyBhc3NlcnRpb24gcmVzdWx0cyB0byB0aGVpciBwcmlvcml0aWVzLCAwIGlzIGxvd2VzdAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGFzaHRhYmxlIHJlc3VsdFByaW9yaXR5ID0gbmV3IEhhc2h0YWJsZSg2KTsKLSAgc3RhdGljIHsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQsIG5ldyBJbnRlZ2VyKDApKTsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgbmV3IEludGVnZXIoMSkpOwotICAgIHJlc3VsdFByaW9yaXR5LnB1dChBc3NlcnRpb25SZXN1bHQuUkVTVUxUX01JU1NJTkdfSU5QVVQsIG5ldyBJbnRlZ2VyKDIpKTsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HLCBuZXcgSW50ZWdlcigzKSk7Ci0gICAgcmVzdWx0UHJpb3JpdHkucHV0KEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUFJFUkVRX0ZBSUxFRCwgbmV3IEludGVnZXIoNCkpOwotICAgIHJlc3VsdFByaW9yaXR5LnB1dChBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCwgbmV3IEludGVnZXIoNSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGJlaW5nIHBhc3NlZCB3aGVuIHByb2Nlc3NpbmcgcHJlLXJlcXVpc2l0ZXMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVkFMSURfUFJJT1JJVFkgPSAxOwotCi0gIC8qKgotICAgKiBBbmFseXplciBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQ7Ci0KLSAgLyoqCi0gICAqIFByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdDsKLQotICAvKioKLSAgICogUmVwb3J0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0ZXIgcmVwb3J0ZXI7Ci0KLSAgLyoqCi0gICAqIEVudHJ5LgotICAgKi8KLSAgLy8gcHJvdGVjdGVkIEVudHJ5IGVudHJ5OwotCi0gIC8qKgotICAgKiBSZXBvcnQgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3Q7Ci0KLSAgLyoqCi0gICAqIFZlcmJvc2Ugb3B0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gdmVyYm9zZU9wdGlvbiA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBwcm9jZXNzZWQgY291bnQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGFzc2VydGlvbkNvdW50ID0gMDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgQmFzZVZhbGlkYXRvckltcGwoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gcHJvZmlsZUFydGlmYWN0IHRoZSBwcm9maWxlIGFydGlmaWFjdC4KLSAgICogQHBhcmFtIHJlcG9ydEFydGlmYWN0ICB0aGUgcmVwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgICAgICAgIGEgUmVwb3J0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB2YWxpZGF0b3IgY291bGQgbm90IGJlIGluaXRpYWxpemVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2VzCi0gICAgdGhpcy5hbmFseXplckNvbnRleHQgPSBhbmFseXplckNvbnRleHQ7Ci0gICAgdGhpcy5wcm9maWxlQXJ0aWZhY3QgPSBwcm9maWxlQXJ0aWZhY3Q7Ci0gICAgdGhpcy5yZXBvcnRBcnRpZmFjdCA9IHJlcG9ydEFydGlmYWN0OwotICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjsKLQotICAgIC8vIEdldCB2ZXJib3NlIG9wdGlvbiAgICAKLSAgICB2ZXJib3NlT3B0aW9uID0KLSAgICAgIHJlcG9ydGVyCi0gICAgICAgIC5nZXRSZXBvcnQoKQotICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRWZXJib3NlT3B0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyBhbGwgb2YgdGhlIHRlc3QgYXNzZXJ0aW9ucyBmb3Igb25lIGVudHJ5LgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggYSBjbGFzcyBwcmVmaXguCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgc2VyaW91cyBwcm9ibGVtcyBvY2N1ciB3aGlsZSBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIGFsbCBvZiB0aGUgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NBc3NlcnRpb25zKAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGxvbmcgc3RhcnRUaW1lID0gMDsKLQotICAgIEhhc2hNYXAgcHJvY2Vzc0xpc3QgPSBuZXcgSGFzaE1hcCgpOwotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiA9IG51bGw7Ci0gICAgQXNzZXJ0aW9uUHJvY2VzcyBhc3NlcnRpb25Qcm9jZXNzOwotICAgIEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQ7Ci0KLSAgICBUcmVlTWFwIHByZVJlcVJlc3VsdHM7Ci0gICAgUHJlcmVxRmFpbGVkTGlzdCBwcmVyZXFGYWlsZWRMaXN0OwotICAgIFN0cmluZyBwcmVSZXFJZDsKLQotICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IG5ldyBDbGFzc1sxXTsKLSAgICAvLyBJZiB0aGlzIGlzIGFuIGluc3RhbmNlIG9mIE1lc3NhZ2VWYWxpZGF0b3Igb3IgRW52ZWxvcGVWYWxpZGF0b3IKLSAgICAvLyB0aGVuIHVzZSBCYXNlTWVzc2FnZVZhbGlkYXRvciBhcyBhIHBhcmFtIHR5cGUgb2YgYXNzZXJ0aW9ucyBjb25zdHJ1Y3RvcgotICAgIHBhcmFtVHlwZXNbMF0gPSB0aGlzIGluc3RhbmNlb2YgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgPwotICAgICAgQmFzZU1lc3NhZ2VWYWxpZGF0b3IuY2xhc3MgOiB0aGlzLmdldENsYXNzKCk7Ci0KLSAgICBPYmplY3RbXSBwYXJhbXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIHBhcmFtc1swXSA9IHRoaXM7Ci0KLSAgICAvLyBHZXQgZW50cnkgZnJvbSBjb250ZXh0Ci0gICAgRW50cnkgZW50cnkgPSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKTsKLQotICAgIC8vIEFkZCBlbnRyeSB0byBhcnRpZmFjdAotICAgIHRoaXMucmVwb3J0QXJ0aWZhY3QuYWRkRW50cnkoZW50cnkpOwotCi0gICAgLy8gQWRkIGVudHJ5IHRvIHJlcG9ydAotICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRW52ZWxvcGVWYWxpZGF0b3IpCi0gICAgIAl0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnZlbG9wZUVudHJ5KGVudHJ5KTsgCi0JZWxzZSB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIHRlc3QgYXNzZXJ0aW9ucyBmb3IgdGhlIGFydGlmYWN0Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHByb2ZpbGVBcnRpZmFjdC5nZXRUZXN0QXNzZXJ0aW9uTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAvLyBHZXQgbmV4dCB0ZXN0IGFzc2VydGlvbgotICAgICAgICB0ZXN0QXNzZXJ0aW9uID0gKFRlc3RBc3NlcnRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAvLyBSZXNldCB2YXJpYWJsZXMKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0ID0gbnVsbDsKLQotICAgICAgICAvLyBJZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgZW5hYmxlZCwgdGhlbiBjb250aW51ZQotICAgICAgICAvLyAgICAgICAgaWYgKCh0ZXN0QXNzZXJ0aW9uLmlzRW5hYmxlZCgpKSAmJiAKLSAgICAgICAgLy8gICAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHModGFyZ2V0Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLmdldFR5cGVOYW1lKCkpKSB7IAotICAgICAgICBpZiAodGVzdEFzc2VydGlvbi5pc0VuYWJsZWQoKQotICAgICAgICAgICYmIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBBZGQgMSB0byBhc3NlcnRpb24gcHJvY2Vzc2VkIGNvdW50Ci0gICAgICAgICAgICBhc3NlcnRpb25Db3VudCsrOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgYXNzZXJ0aW9uIHByb2Nlc3MgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQsIHRoZW4gY3JlYXRlIGl0Ci0gICAgICAgICAgICBpZiAoKGFzc2VydGlvblByb2Nlc3MgPQotICAgICAgICAgICAgICAoQXNzZXJ0aW9uUHJvY2VzcykgcHJvY2Vzc0xpc3QuZ2V0KHRlc3RBc3NlcnRpb24uZ2V0SWQoKSkpCi0gICAgICAgICAgICAgID09IG51bGwpCi0gICAgICAgICAgICB7Ci0KLSAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGFzc2VydGlvbiBwcm9jZXNzCi0gICAgICAgICAgICAgIENsYXNzIGFzc2VydGlvbkNsYXNzID0KLSAgICAgICAgICAgICAgICBDbGFzcy5mb3JOYW1lKGNsYXNzUHJlZml4ICsgdGVzdEFzc2VydGlvbi5nZXRJZCgpKTsKLQotICAgICAgICAgICAgICBhc3NlcnRpb25Qcm9jZXNzID0KLSAgICAgICAgICAgICAgICAoQXNzZXJ0aW9uUHJvY2VzcykgYXNzZXJ0aW9uQ2xhc3MuZ2V0Q29uc3RydWN0b3IoCi0gICAgICAgICAgICAgICAgICBwYXJhbVR5cGVzKS5uZXdJbnN0YW5jZSgKLSAgICAgICAgICAgICAgICAgIHBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICAgIHByb2Nlc3NMaXN0LnB1dCh0ZXN0QXNzZXJ0aW9uLmdldElkKCksIGFzc2VydGlvblByb2Nlc3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGVudHJ5IGlzIG51bGwKLSAgICAgICAgICAgIGlmIChlbnRyeS5nZXRFbnRyeURldGFpbCgpID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgICAgICAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTUlTU0lOR19JTlBVVCwKLSAgICAgICAgICAgICAgICAgIChTdHJpbmcpIG51bGwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRlc3QgYXNzZXJ0aW9uIHNob3VsZCBiZSBydW4KLSAgICAgICAgICAgIC8vaWYgKGlzTm90QXBwbGljYWJsZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpKSB7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc05vdEFwcGxpY2FibGUodGVzdEFzc2VydGlvbikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgICAgICAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsCi0gICAgICAgICAgICAgICAgICAoU3RyaW5nKSBudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBhbGwgdGhlIGFzc2VydGlvbiBwcmUtcmVxdWlzaXRlcwotCi0gICAgICAgICAgICAgIHByZVJlcVJlc3VsdHMgPSBudWxsOwotICAgICAgICAgICAgICBwcmVyZXFGYWlsZWRMaXN0ID0gbnVsbDsKLSAgICAgICAgICAgICAgLy8gR2V0IGxpc3Qgb2YgcHJlLXJlcXMgZm9yIHNwZWNpZmllZCBhc3NlcnRpb24KLSAgICAgICAgICAgICAgSXRlcmF0b3IgaSA9IHRlc3RBc3NlcnRpb24uZ2V0UHJlcmVxSWRMaXN0KCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZVJlcVJlc3VsdHMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHByZVJlcVJlc3VsdHMgPSBuZXcgVHJlZU1hcCgpOwotICAgICAgICAgICAgICAgIC8vIEdldCBuZXh0IGlkCi0gICAgICAgICAgICAgICAgcHJlUmVxSWQgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHByZXJlcSByZXN1bHQKLSAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQgcHJlUmVxUmVzdWx0ID0gcmVwb3J0ZXIuZ2V0QXNzZXJ0aW9uUmVzdWx0KHByZVJlcUlkKTsKLQotICAgICAgICAgICAgICAgIC8vIEFkZGluZyBhIHJlc3VsdCBwcmlvcml0eSB2YWx1ZSB0byBwcmVSZXFSZXN1bHRzCi0gICAgICAgICAgICAgICAgcHJlUmVxUmVzdWx0cy5wdXQoCi0gICAgICAgICAgICAgICAgICByZXN1bHRQcmlvcml0eS5nZXQocHJlUmVxUmVzdWx0LmdldFJlc3VsdCgpKSwKLSAgICAgICAgICAgICAgICAgIHByZVJlcVJlc3VsdC5nZXRSZXN1bHQoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJlcmVxIGZhaWxlZCwgdGhlbiBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICBpZiAoKChJbnRlZ2VyKXJlc3VsdFByaW9yaXR5LmdldChwcmVSZXFSZXN1bHQuZ2V0UmVzdWx0KCkpKS5pbnRWYWx1ZSgpCi0gICAgICAgICAgICAgICAgICA+IE1BWF9WQUxJRF9QUklPUklUWSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgZmFpbGVkIHByZXJlcSBJRCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgaWYgKHByZXJlcUZhaWxlZExpc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgcHJlcmVxRmFpbGVkTGlzdCA9IG5ldyBQcmVyZXFGYWlsZWRMaXN0SW1wbCgpOwotICAgICAgICAgICAgICAgICAgcHJlcmVxRmFpbGVkTGlzdC5hZGRUZXN0QXNzZXJ0aW9uSUQocHJlUmVxSWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChwcmVyZXFGYWlsZWRMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBoaWdoZXN0IHByZS1yZXF1aXNpdGVzJyByZXN1bHQKLSAgICAgICAgICAgICAgICBJbnRlZ2VyIG1heFJlcyA9IChJbnRlZ2VyKXByZVJlcVJlc3VsdHMubGFzdEtleSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZXNTdHJpbmcgPSAoU3RyaW5nKXByZVJlcVJlc3VsdHMuZ2V0KG1heFJlcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc1N0cmluZy5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgICAgICAgICAgICAgICB8fHJlc1N0cmluZy5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HKSkgewotICAgICAgICAgICAgICAgICAgcmVzU3RyaW5nID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QUkVSRVFfRkFJTEVEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdCBiYXNlZCBvbiBwcmUtcmVxdWlzaXRlcyB3aGljaCBhcmUgbm90IHBhc3NlZAotICAgICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9IGNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXNTdHJpbmcsIHByZXJlcUZhaWxlZExpc3QpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gUHJlLXJlcXVpc2l0ZXMgYXJlIHBhc3NlZCwgdmFsaWRhdGUgY3VycmVudCBhc3NlcnRpb24KLSAgICAgICAgICAgICAgZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZXNldCB0ZXN0IGFzc2VydGlvbgotICAgICAgICAgICAgICAgIGFzc2VydGlvblByb2Nlc3MucmVzZXQoKTsKLQotICAgICAgICAgICAgICAgIC8vICBWRVJCT1NFCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAiICBQcm9jZXNzaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICArIHRlc3RBc3NlcnRpb24uZ2V0SWQoKQotICAgICAgICAgICAgICAgICAgICAgICsgIiBmb3IgZW50cnkgcmVmZXJlbmNlIElEIFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXSAuLi4iKTsKLSAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRoZSB0YXJnZXQKLSAgICAgICAgICAgICAgICBhc3NlcnRpb25SZXN1bHQgPQotICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uUHJvY2Vzcy52YWxpZGF0ZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgLy8gIFZFUkJPU0UKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZU9wdGlvbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICIgICAgRWxhcHNlZCB0aW1lOiAiCi0gICAgICAgICAgICAgICAgICAgICAgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWUpCi0gICAgICAgICAgICAgICAgICAgICAgKyAibXMiKTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCByZXN1bHQgdG8gdGhlIHJlcG9ydAotICAgICAgICAgICAgcmVwb3J0ZXIuYWRkQXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvblJlc3VsdCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY25mZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgIGlmICh0ZXN0QXNzZXJ0aW9uICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlcG9ydGVyCi0gICAgICAgICAgICAgICAgLmdldFJlcG9ydCgpCi0gICAgICAgICAgICAgICAgLmdldFJlcG9ydENvbnRleHQoKQotICAgICAgICAgICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgICAgICAgICAgLnByaW50TWVzc2FnZSgKLSAgICAgICAgICAgICAgICAiV0FSTklORzogIgotICAgICAgICAgICAgICAgICAgKyB0ZXN0QXNzZXJ0aW9uLmdldElkKCkKLSAgICAgICAgICAgICAgICAgICsgIiBpcyBub3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFWEVDRVBUSU9OOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0KLSAgICAgIGlmIChlIGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgICAgICB0aHJvdyAoV1NJRXhjZXB0aW9uKSBlOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICB9Ci0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgYXNzZXJ0aW9uIHRhcmdldAotICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSB0ZXN0IGFzc2VydGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkIGZvciB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gYSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCAgdGhlIGVudHJ5IGNvbnRleHQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpc1ByaW1hcnlFbnRyeVR5cGVNYXRjaCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCk7Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uICBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAcGFyYW0gZW50cnkgICAgICAgICAgYW4gRW50cnkgb2JqZWN0Ci0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1ByaW1hcnlFbnRyeVR5cGVNYXRjaCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnkgZW50cnkpCi0gIHsKLSAgICBib29sZWFuIG1hdGNoID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgdGVzdCBhc3NlcnRpb24gZW50cnkgdHlwZSBtYXRjaGVzIHRoZSB0YXJnZXQgY29udGV4dCBlbnRyeSB0eXBlLCB0aGVuIGNvbnRpbmUKLSAgICBpZiAodGVzdEFzc2VydGlvbgotICAgICAgLmdldEVudHJ5VHlwZU5hbWUoKQotICAgICAgLmVxdWFscyhlbnRyeS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpc05vdEFwcGxpY2FibGUoVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3IjY2xlYW51cCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgbm8gYXNzZXJ0aW9ucyB3ZXJlIHByb2Nlc3NlZCwgdGhlbiBzZXQgYWxsIG1pc3NpbmdJbnB1dAotICAgIGlmIChhc3NlcnRpb25Db3VudCA9PSAwKQotICAgICAgc2V0QWxsTWlzc2luZ0lucHV0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWwgYSBGYWlsdXJlRGV0YWlsIG9iamVjdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsKQotICB7Ci0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLQotICAgIC8vIENyZWF0ZSBmYWlsdXJlIGRldGFpbCBsaXN0Ci0gICAgaWYgKGZhaWx1cmVEZXRhaWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxMaXN0LmFkZChmYWlsdXJlRGV0YWlsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gZmFpbHVyZURldGFpbE1lc3NhZ2UgIGEgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgU3RyaW5nIGZhaWx1cmVEZXRhaWxNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sCi0gICAgICByZXN1bHQsCi0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSwKLSAgICAgIG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gZmFpbHVyZURldGFpbE1lc3NhZ2UgIGEgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGVsZW1lbnRMb2NhdGlvbiAgICAgICBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgdGVzdCByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBTdHJpbmcgZmFpbHVyZURldGFpbE1lc3NhZ2UsCi0gICAgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbikKLSAgewotICAgIC8vIENyZWF0ZSBmYWlsdXJlIGRldGFpbCBsaXN0Ci0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLSAgICBpZiAoZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEZhaWx1cmVEZXRhaWwgZmFpbHVyZURldGFpbCA9IHJlcG9ydGVyLmNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oZWxlbWVudExvY2F0aW9uKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxMaXN0LmFkZChmYWlsdXJlRGV0YWlsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgYSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIHJlc3VsdCAgICAgICAgICAgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0IGEgZmFpbHVyZSBkZXRhaWwgbGlzdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KQotICB7Ci0gICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQKLSAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0ID0gcmVwb3J0ZXIuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KCk7Ci0KLSAgICAvLyBTZXQgdmFsdWVzIGluIGFzc2VydGlvbiByZXN1bHQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotCi0gICAgLy8gU2V0IGZhaWx1cmUgZGV0YWlsIGxpc3QKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RmFpbHVyZURldGFpbExpc3QoZmFpbHVyZURldGFpbExpc3QpOwotCi0gICAgcmV0dXJuIGFzc2VydGlvblJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICBhIFN0cmluZyBvYmplY3QuCi0gICAqIEBwYXJhbSBwcmVyZXFGYWlsZWRMaXN0ICBhIGxpc3QgZmFpbGVkIHByZS1yZXF1aXNpdGUgYXNzZXJ0aW9ucy4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgUHJlcmVxRmFpbGVkTGlzdCBwcmVyZXFGYWlsZWRMaXN0KQotICB7Ci0gICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQKLSAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0ID0gcmVwb3J0ZXIuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KCk7Ci0KLSAgICAvLyBTZXQgdmFsdWVzIGluIGFzc2VydGlvbiByZXN1bHQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRQcmVyZXFGYWlsZWRMaXN0KHByZXJlcUZhaWxlZExpc3QpOwotCi0gICAgcmV0dXJuIGFzc2VydGlvblJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdCB0byByZXBvcnQuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25JZCAgYXNzZXJ0aW9uIGlkLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBhc3NlcnRpb24gcmVzdWx0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KFN0cmluZyBhc3NlcnRpb25JZCwgU3RyaW5nIHJlc3VsdCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IHJlcG9ydGVyLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgpOwotCi0gICAgLy8gU2V0IGFzc2VydGlvbiwgcmVzdWx0IGFuZCB0YXJnZXQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHByb2ZpbGVBcnRpZmFjdC5nZXRUZXN0QXNzZXJ0aW9uKGFzc2VydGlvbklkKSk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldFJlc3VsdChyZXN1bHQpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRFbnRyeShyZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRDdXJyZW50RW50cnkoKSk7Ci0KLSAgICAvLyBBZGQgaXQgdG8gdGhlIHJlcG9ydAotICAgIHJlcG9ydGVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhc3NlcnRpb24gcmVzdWx0IHRvIHJlcG9ydCB3aXRoIGFuIGVycm9yIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uSWQgICAgICAgICAgYXNzZXJ0aW9uIGlkLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgICAgICAgICAgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxNZXNzYWdlIGFuIGVycm9yIGRldGFpbCBtZXNzYWdlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEFzc2VydGlvblJlc3VsdCgKLSAgICBTdHJpbmcgYXNzZXJ0aW9uSWQsCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBTdHJpbmcgZmFpbHVyZURldGFpbE1lc3NhZ2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ29udmVydCBtZXNzYWdlIHRvIHZlY3RvcgotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCA9IG51bGw7Ci0gICAgaWYgKGZhaWx1cmVEZXRhaWxNZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBGYWlsdXJlRGV0YWlsIGZhaWx1cmVEZXRhaWwgPSByZXBvcnRlci5jcmVhdGVGYWlsdXJlRGV0YWlsKCk7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoZmFpbHVyZURldGFpbCk7Ci0gICAgfQotCi0gICAgLy8gQWRkIGFzc2VydGlvbiByZXN1bHQKLSAgICBhZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQsIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhc3NlcnRpb24gcmVzdWx0IHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkICAgICAgICBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0ICBhIGxpc3Qgb2YgZXJyb3IgZGV0YWlsIG1lc3NhZ2VzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEFzc2VydGlvblJlc3VsdCgKLSAgICBTdHJpbmcgYXNzZXJ0aW9uSWQsCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBWZWN0b3IgZmFpbHVyZURldGFpbExpc3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdAotICAgIEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQgPSByZXBvcnRlci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAgIC8vIFNldCBhc3NlcnRpb24sIHJlc3VsdCBhbmQgdGFyZ2V0Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvbihwcm9maWxlQXJ0aWZhY3QuZ2V0VGVzdEFzc2VydGlvbihhc3NlcnRpb25JZCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRGYWlsdXJlRGV0YWlsTGlzdChmYWlsdXJlRGV0YWlsTGlzdCk7Ci0KLSAgICAvLyBBZGQgaXQgdG8gdGhlIHJlcG9ydAotICAgIHJlcG9ydGVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBtaXNzaW5nSW5wdXQgYXNzZXJ0aW9uIHJlc3VsdCB0byByZXBvcnQuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFueSBwcm9ibGVtIGFkZGluZyBtaXNzaW5nSW5wdXQgCi0gICAqIAkJIGFzc2VydGlvbiByZXN1bHQgdG8gcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkTWlzc2luZ0lucHV0UmVzdWx0KFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IHJlcG9ydGVyLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgpOwotCi0gICAgLy8gU2V0IGFzc2VydGlvbiwgcmVzdWx0IGFuZCB0YXJnZXQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9NSVNTSU5HX0lOUFVUKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotCi0gICAgLy8gQWRkIGl0IHRvIHRoZSByZXBvcnQKLSAgICByZXBvcnRlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvciNzZXRBbGxNaXNzaW5nSW5wdXQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWxsTWlzc2luZ0lucHV0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgcHJvZmlsZSBhcnRpZmFjdCBpcyBzZXQKLSAgICBpZiAocHJvZmlsZUFydGlmYWN0ICE9IG51bGwpCi0gICAgewotICAgICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uOwotICAKLSAgICAgIC8vIENyZWF0ZSBlbnRyeQotICAgICAgRW50cnkgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgICBlbnRyeS5zZXRBcnRpZmFjdE5hbWUodGhpcy5yZXBvcnRBcnRpZmFjdC5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSk7Ci0gIAotICAgICAgLy8gQWRkIGVudHJ5IHRvIGFydGlmYWN0Ci0gICAgICB0aGlzLnJlcG9ydEFydGlmYWN0LmFkZEVudHJ5KGVudHJ5KTsKLSAgCi0gICAgICAvLyBBZGQgZW50cnkgdG8gcmVwb3J0Ci0gICAgICB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0gIAotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiB0ZXN0IGFzc2VydGlvbnMgZm9yIHRoZSBhcnRpZmFjdAotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwcm9maWxlQXJ0aWZhY3QuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IG5leHQgdGVzdCBhc3NlcnRpb24KLSAgICAgICAgdGVzdEFzc2VydGlvbiA9IChUZXN0QXNzZXJ0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gIAotICAgICAgICAvLyBBZGQgbWlzc2luZ0lucHV0IHJlc3VsdAotICAgICAgICBpZiAodGVzdEFzc2VydGlvbi5pc0VuYWJsZWQoKSkKLSAgICAgICAgICBhZGRNaXNzaW5nSW5wdXRSZXN1bHQodGVzdEFzc2VydGlvbik7Ci0gICAgICB9Ci0gIAotICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgYXNzZXJ0aW9uIHRhcmdldAotICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFsbCByZXN1bHRzIGZvciBhbiBlbnRyeSB0eXBlIHRvIG1pc3NpbmdJbnB1dC4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBhbiBFbnRyeVR5cGUgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbnkgcHJvYmxlbSB3aGlsZSBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZSBlbnRyeVR5cGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbjsKLQotICAgIC8vIENyZWF0ZSBlbnRyeSAKLSAgICBFbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICBlbnRyeS5zZXRFbnRyeVR5cGUoZW50cnlUeXBlKTsKLSAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRCgiWyIgKyBlbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSArICJdIik7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gYXJ0aWZhY3QKLSAgICB0aGlzLnJlcG9ydEFydGlmYWN0LmFkZEVudHJ5KGVudHJ5KTsKLQotICAgIC8vIEFkZCBlbnRyeSB0byByZXBvcnQKLSAgICB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0KLSAgICAvL3RyeSB7Ci0gICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiB0ZXN0IGFzc2VydGlvbnMgZm9yIHRoZSBhcnRpZmFjdAotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcHJvZmlsZUFydGlmYWN0LmdldFRlc3RBc3NlcnRpb25MaXN0KCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIC8vIEdldCBuZXh0IHRlc3QgYXNzZXJ0aW9uCi0gICAgICB0ZXN0QXNzZXJ0aW9uID0gKFRlc3RBc3NlcnRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmICh0ZXN0QXNzZXJ0aW9uLmlzRW5hYmxlZCgpCi0gICAgICAgICYmIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKHRlc3RBc3NlcnRpb24sIGVudHJ5KSkKLSAgICAgIHsKLSAgICAgICAgYWRkTWlzc2luZ0lucHV0UmVzdWx0KHRlc3RBc3NlcnRpb24pOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEluZGljYXRlIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIGVudHJ5Ci0gICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1Y2M2ZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnZlbG9wZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuRW52ZWxvcGVWYWxpZGF0b3JJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2UuTWVzc2FnZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaS5VRERJVmFsaWRhdG9ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFdTSUxEb2N1bWVudEZhY3RvcnkuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3I6IFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotcHVibGljIGNsYXNzIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5SW1wbCBleHRlbmRzIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5Ci17Ci0gIHByaXZhdGUgc3RhdGljIE1hcCB2YWxpZGF0b3JSZWdpc3RyeTsKLQotICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkVG9WYWxpZGF0YXRvclJlZ2lzdHJ5KFN0cmluZyBhcnRpZmFjdE5hbWUsCi0gICAgICAgICAgQmFzZVZhbGlkYXRvciB2YWxpZGF0b3JDbGFzcykgewotICAgICAgaWYgKHZhbGlkYXRvclJlZ2lzdHJ5ID09IG51bGwpCi0gICAgICAgICAgdmFsaWRhdG9yUmVnaXN0cnkgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgdmFsaWRhdG9yUmVnaXN0cnkucHV0KGFydGlmYWN0TmFtZSwgdmFsaWRhdG9yQ2xhc3MpOwotICB9Ci0KLSAgcHVibGljIEJhc2VWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yRm9yQXJ0aWZhY3QoU3RyaW5nIGFydGlmYWN0TmFtZSkgCi0gICAgICAgICAgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0gICAgICBpZiAodmFsaWRhdG9yUmVnaXN0cnkgPT0gbnVsbCkgewotICAgICAgICAgIEJhc2VWYWxpZGF0b3IgdmFsaWRhdG9yc1tdID0gV1NJVGVzdFRvb2xzUGx1Z2luLmdldFBsdWdpbigpLgotICAgICAgICAgICAgICAgICAgZ2V0QmFzZVZhbGlkYXRvcnMoKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgIGFkZFRvVmFsaWRhdGF0b3JSZWdpc3RyeSh2YWxpZGF0b3JzW2ldLmdldEFydGlmYWN0VHlwZSgpLAotICAgICAgICAgICAgICB2YWxpZGF0b3JzW2ldKTsKLSAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIHJldHVybiAoQmFzZVZhbGlkYXRvcikgdmFsaWRhdG9yUmVnaXN0cnkuZ2V0KGFydGlmYWN0TmFtZSk7Ci0gIH0KLSAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeSNuZXdVRERJVmFsaWRhdG9yKCkKLSAgICovCi0gIHB1YmxpYyBVRERJVmFsaWRhdG9yIG5ld1VERElWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgbmV3IFVEREkgdmFsaWRhdG9yIAotICAgIFVERElWYWxpZGF0b3IgdWRkaVZhbGlkYXRvciA9IG5ldyBVRERJVmFsaWRhdG9ySW1wbCgpOwotICAgIC8vIFJldHVybiB2YWxpZGF0b3IKLSAgICByZXR1cm4gdWRkaVZhbGlkYXRvcjsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5I25ld1dTRExWYWxpZGF0b3IoKQotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3IgbmV3V1NETFZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBuZXcgV1NETCB2YWxpZGF0b3IgCi0gICAgV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3JJbXBsKCk7Ci0KLSAgICAvLyBSZXR1cm4gdmFsaWRhdG9yCi0gICAgcmV0dXJuIHdzZGxWYWxpZGF0b3I7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5I25ld01lc3NhZ2VWYWxpZGF0b3IoKQotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VWYWxpZGF0b3IgbmV3TWVzc2FnZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBuZXcgbWVzc2FnZSB2YWxpZGF0b3IgCi0gICAgTWVzc2FnZVZhbGlkYXRvciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IE1lc3NhZ2VWYWxpZGF0b3JJbXBsKCk7Ci0gICAgLy8gUmV0dXJuIHZhbGlkYXRvcgotICAgIHJldHVybiBtZXNzYWdlVmFsaWRhdG9yOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeSNuZXdFbnZlbG9wZVZhbGlkYXRvcigpCi0gICAqLwotICBwdWJsaWMgRW52ZWxvcGVWYWxpZGF0b3IgbmV3RW52ZWxvcGVWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgbmV3IGVudmVsb3BlIHZhbGlkYXRvciAKLSAgICBFbnZlbG9wZVZhbGlkYXRvciBlbnZlbG9wZVZhbGlkYXRvciA9IG5ldyBFbnZlbG9wZVZhbGlkYXRvckltcGwoKTsKLSAgICAvLyBSZXR1cm4gdmFsaWRhdG9yCi0gICAgcmV0dXJuIGVudmVsb3BlVmFsaWRhdG9yOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MTFjOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLQotLyoqCi0gKiBBUDE5MjAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYW4gZW52ZWxvcGUgaW4gYSByZXNwb25zZSBtZXNzYWdlCi0gKiBjb250YWluaW5nIGEgc29hcDpGYXVsdCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkluIGEgZGVzY3JpcHRpb24sIGlmIGFuZCBvbmx5IGlmLCB0aGUgd3NkbDpvdXRwdXQKLSAqIGVsZW1lbnQgaXMgZGVzY3JpYmVkIHVzaW5nIFdTREwgTUlNRSBiaW5kaW5nLCB0aGVuIHRoZSBlbnZlbG9wZSBpbiB0aGUKLSAqIHJlc3BvbnNlIG1lc3NhZ2UgY2FuIGNvbnRhaW4gZmF1bHRzIHdpdGggYXR0YWNobWVudHMuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgCi0gICAgewotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBjaGVjayBmb3IgYSBmYXVsdCBlbGVtZW50IHdpdGhpbiB0aGUgbWVzc2FnZSAKLSAgICAgIGlmKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSA9PSBudWxsKSB8fCAKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKS4KLSAgICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSVRhZy5FTEVNX1NPQVBfRkFVTFQuZ2V0TmFtZXNwYWNlVVJJKCksIAotICAgICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxULmdldExvY2FsUGFydCgpKS5nZXRMZW5ndGgoKSAhPSAxKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIC8vIElmIHRoZSBlbnZlbG9wZSBpbiBhIHJlc3BvbnNlIG1lc3NhZ2UgY29udGFpbnMgYSBmYXVsdCB3aXRoIGF0dGFjaG1lbnRzCi0gICAgICAvLyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpvdXRwdXQgZWxlbWVudCBpbiB0aGUgZGVzY3JpcHRpb24gaXMgbm90IAotICAgICAgLy8gZGVzY3JpYmVkIHVzaW5nIHRoZSBXU0RMIE1JTUUgYmluZGluZywgdGhlIGFzc2VydGlvbiBpcyBmYWlsZWQgIAotICAgICAgaWYgKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCkuY291bnQoKSA+IDEpICYmCi0gICAgICAgICAgKGdldE11bHRpcGFydFJlbGF0ZWRCaW5kaW5ncyhiaW5kaW5nT3BlcmF0aW9uKSA9PSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgICB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgiVGhlIG1lc3NhZ2UgY29udGFpbnMgXCIiICsgCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5jb3VudCgpICsgIlwiIHBhcnQocykiLCAKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOyAKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIE11bHRpcGFydCByZWxhdGVkIGJpbmRpbmdzLCBpZiBkb2VzIG5vdCBmb3VuZCwgcmV0dXJucyBudWxsLgotICAgKiBAcGFyYW0gb3AgYmluZGluZyBvcGVyYXRpb24KLSAgICogQHJldHVybiBNdWx0aXBhcnQgcmVsYXRlZCBiaW5kaW5ncywgaWYgZG9lcyBub3QgZm91bmQsIHJldHVybnMgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgTUlNRU11bHRpcGFydFJlbGF0ZWQgZ2V0TXVsdGlwYXJ0UmVsYXRlZEJpbmRpbmdzKAotICAgICAgQmluZGluZ09wZXJhdGlvbiBvcCkgCi0gIHsKLSAgICAvLyBGaW5kaW5nIG9wZXJhdGlvbiBleHRlbnNpYmlsaXR5IGVsZW1zCi0gICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgIExpc3QgZXh0RWxlbXMgPSBvcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgLy8gY2hlY2sgbGlzdCBvbiBmaXJzdCBlbGVtZW50Ci0gICAgaWYoKGV4dEVsZW1zID09IG51bGwpIHx8IChleHRFbGVtcy5zaXplKCkgPT0gMCkgfHwgCi0gICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICByZXR1cm4gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7IAotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTI4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NjVmY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0VsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWxHcm91cDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU09iamVjdExpc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1Rlcm07Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRVV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBBUDE5MjgKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGUgY29udGFpbmluZyBhIFVSSSByZWZlcmVuY2UKLSAqIHRoYXQgaXMgdHlwZWQgdXNpbmcgdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SW4gYW4gZW52ZWxvcGUsIGEgVVJJIHJlZmVyZW5jZSB0aGF0IGlzIHR5cGVkIHVzaW5nCi0gKiB0aGUgcmVmOnN3YVJlZiBzY2hlbWEgdHlwZSByZXNvbHZlcyB0byBhIE1JTUUgcGFydCBpbiB0aGUgc2FtZSBtZXNzYWdlCi0gKiBhcyB0aGUgZW52ZWxvcGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICAvLyBnZXQgdGhlIHJyb3QgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IHJvb3QgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIE1pbWVQYXJ0cyBtaW1lUGFydHMgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCk7Ci0KLSAgICAgIC8vIGdldCBhbiBvcGVyYXRpb24gbWF0Y2hlZCBmb3IgdGhlIG1lc3NhZ2UKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksIHJvb3QpOwotIAotICAgICAgLy8gaWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhbmQgbWVzc2FnZQotICAgICAgTGlzdCBleHRFbGVtczsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUCi0gICAgICAgIC5lcXVhbHMoZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCkpKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoZSBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGV4dEVsZW1zID09IG51bGwgfHwgZXh0RWxlbXMuc2l6ZSgpIDwgMSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gQ29sbGVjdGluZyB0aGUgbmFtZXMgb2Ygc2NoZW1hIGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQKLSAgICAgIC8vIHdpdGggdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUKLSAgICAgIExpc3Qgc3dhUmVmcyA9IGdldFN3YVJlZnMoKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLmdldCgwKSwgbWVzc2FnZSk7Ci0gICAgICAvLyBJZiBzdWNoIHNjaGVtYSBlbGVtZW50cyBhcmUgbm90IGZvdW5kLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoc3dhUmVmcy5pc0VtcHR5KCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBzY2hlbWEgZWxlbWVudCBuYW1lcwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzd2FSZWZzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBRTmFtZSBlbGVtTmFtZSA9IChRTmFtZSkgc3dhUmVmcy5nZXQoaSk7Ci0gICAgICAgIC8vIExvb2tpbmcgZm9yIHN1Y2ggZWxlbWVudHMgaW4gdGhlIHJvb3QgTUlNRSBwYXJ0Ci0gICAgICAgIE5vZGVMaXN0IGVsZW1zID0gcm9vdC5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgICAgZWxlbU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIGVsZW1OYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIHJlZjpzd2FSZWYgcmVmZXJlbmNlcwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsZW1zLmdldExlbmd0aCgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIGVsZW0gPSBlbGVtcy5pdGVtKGopOwotICAgICAgICAgIC8vIEdldHRpbmcgYSB2YWx1ZSBvZiB0aGlzIHJlZmVyZW5jZQotICAgICAgICAgIFN0cmluZyByZWYgPSBlbGVtLmdldEZpcnN0Q2hpbGQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBlbGVtLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocmVmID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGVsZW1lbnQgIiArIGVsZW0uZ2V0Tm9kZU5hbWUoKQotICAgICAgICAgICAgICArICIgb2YgdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUgaXMgc3BlY2lmaWVkLCBidXQgaXRzIHZhdWxlIgotICAgICAgICAgICAgICArICIgaXMgaW52YWxpZC4iKTsKLSAgICAgICAgICAvLyBJZiB0aGUgVVJJIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlICJjaWQ6IiBjb250ZW50LWlkIHByZWZpeAotICAgICAgICAgIC8vIFRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFyZWYuc3RhcnRzV2l0aCgiY2lkOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgVVJJICIgKyByZWYKLSAgICAgICAgICAgICAgKyAiIG9mIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlIG11c3QgdXNlIHRoZSBjaWQ6IHByZWZpeC4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYm9vbGVhbiByZWZGb3VuZCA9IGZhbHNlOwotICAgICAgICAgIEl0ZXJhdG9yIGlNaW1lUGFydHMgPSBtaW1lUGFydHMuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBNSU1FIHBhcnRzIG9mIHRoZSBTT0FQIG1lc3NhZ2UKLSAgICAgICAgICB3aGlsZSAoaU1pbWVQYXJ0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHBhcnQncyBDb250ZW50LUlEIGhlYWRlcgotICAgICAgICAgICAgU3RyaW5nIGNpZCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKAotICAgICAgICAgICAgICAgIG1pbWVQYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgICBpZiAoY2lkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIElmIHRoZSBoZWFkZXIgdmFsdWUgZXF1YWxzIHRoZSByZWZlcmVuY2UgVVJJLAotICAgICAgICAgICAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQgaXMgZm91bmQKLSAgICAgICAgICAgICAgaWYgKGNpZC5lcXVhbHMoJzwnICsgcmVmLnN1YnN0cmluZyg0KSArICc+JykpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWZGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0IGlzIG5vdCBmb3VuZAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFyZWZGb3VuZCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgU09BUCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4iCi0gICAgICAgICAgICAgICsgIiBhIE1JTUUgcGFydCB3aXRoIHRoZSA8IiArIHJlZi5zdWJzdHJpbmcoNCkgKyAiPiBDb250ZW50LUlELiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBuYW1lcyBvZiBzY2hlbWEgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmCi0gICAqIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gZXh0RWxlbSBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHN1Y2ggbmFtZXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0U3dhUmVmcyhFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtLCBNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBMaXN0IHN3YVJlZnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgcm9vdCBtaW1lOnBhcnQKLSAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICBpZiAobWltZVBhcnRzLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIC8vIEdldHRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBvZiB0aGUgZmlyc3QgbWltZTpwYXJ0Ci0gICAgICAgIExpc3QgZWxlbXMgPSAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KDApKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgTGlzdCBib3VuZFBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgTUlNRSBwYXJ0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGVsZW1zLnNpemUoKTsgayArKykKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1zLmdldChrKTsKLSAgICAgICAgICAvLyBJZiB0aGF0IGlzIGEgc29hcDpib2R5Ci0gICAgICAgICAgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpICYmIG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHBhcnRzIHNwZWNpZmllZCBieSB0aGUgcGFydHMgYXR0cmlidXRlCi0gICAgICAgICAgICBMaXN0IGJvZHlQYXJ0cyA9ICgoU09BUEJvZHkpIGVsZW0pLmdldFBhcnRzKCk7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWVzc2FnZSBwYXJ0cyBib3VuZCBieSB0aGlzIHNvYXBiaW5kOmJvZHkKLSAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIGkubmV4dCgpOwotICAgICAgICAgICAgICBpZiAoYm9keVBhcnRzID09IG51bGwgfHwgYm9keVBhcnRzLmNvbnRhaW5zKHBhcnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvdW5kUGFydHMuYWRkKHBhcnQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGVsc2UgaWYgdGhhdCBpcyBhIHNvYXA6aGVhZGVyCi0gICAgICAgICAgZWxzZSBpZiAoZWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBRTmFtZSBtc2dOYW1lOwotICAgICAgICAgICAgU3RyaW5nIHBhcnROYW1lOwotICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTT0FQSGVhZGVyIGhlYWRlciA9IChTT0FQSGVhZGVyKSBlbGVtOwotICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgbXNnTmFtZSA9IGhlYWRlci5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgIHBhcnROYW1lID0gaGVhZGVyLmdldFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFdTREw0SiAxLjQgZG9lcyBub3QgcmVjb2duaXplIHNvYXA6aGVhZGVyIGVsZW1lbnRzIHRoYXQKLSAgICAgICAgICAgIC8vIGFyZSBlbmNsb3NlZCBpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQsIHNvIHVzaW5nIGEgd29ya2Fyb3VuZAotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50IGhlYWRlciA9Ci0gICAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgZWxlbWVudCdzIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgICAgICAgIFN0cmluZyBtc2dWYWwgPSBoZWFkZXIuZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7Ci0gICAgICAgICAgICAgIC8vIGZpbmRpbmcgdGhlIGNvbG9uIGRlbGltaXRlcgotICAgICAgICAgICAgICBpbnQgY29sb25Qb3MgPSBtc2dWYWwuaW5kZXhPZigiOiIpOwotICAgICAgICAgICAgICBTdHJpbmcgbnMgPSBudWxsOwotICAgICAgICAgICAgICAvLyBHZXR0aW5nIGEgbG9jYWwgcGFydAotICAgICAgICAgICAgICBTdHJpbmcgbHAgPSBjb2xvblBvcyA+IC0xID8gbXNnVmFsLnN1YnN0cmluZyhjb2xvblBvcyArIDEpIDogbXNnVmFsOwotICAgICAgICAgICAgICAvLyBJZiB0aGUgZGVsaW1pdGVyIGlzIGZvdW5kCi0gICAgICAgICAgICAgIGlmIChjb2xvblBvcyA+IC0xKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUmV0cmlldmluZyBhIG5hbWVzcGFjZSBVUkkKLSAgICAgICAgICAgICAgICBucyA9IHZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKQotICAgICAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpLmdldE5hbWVzcGFjZShtc2dWYWwuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgbXNnTmFtZSA9IG5ldyBRTmFtZShucywgbHApOwotICAgICAgICAgICAgICBwYXJ0TmFtZSA9IGhlYWRlci5nZXRBdHRyaWJ1dGUoInBhcnQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIHJlZmVyZW5jZWQgYnkgdGhpcyBzb2FwYmluZDpoZWFkZXIgZWxlbWVudAotICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSAKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0TWVzc2FnZShtc2dOYW1lKTsKLSAgICAgICAgICAgIGlmIChtc2cgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBwYXJ0IHRvIHRoZSBsaXN0IG9mIGJvdW5kIHBhcnRzCi0gICAgICAgICAgICAgIFBhcnQgcGFydCA9IG1zZy5nZXRQYXJ0KHBhcnROYW1lKTsKLSAgICAgICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBib3VuZFBhcnRzLmFkZChwYXJ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBbGwgdGhlIGJvdW5kIHBhcnRzIGZyb20gc29hcGJpbmQ6Ym9keSBhbmQgc29hcGJpbmQ6aGVhZGVyCi0gICAgICAgIC8vIGFyZSBjb2xsZWN0ZWQsIGZpbmRpbmcgc3dhUmVmIHJlZmVyZW5jZXMuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm91bmRQYXJ0cy5zaXplKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBib3VuZFBhcnRzLmdldChpKTsKLSAgICAgICAgICBRTmFtZSByZWY7Ci0gICAgICAgICAgc2hvcnQgdHlwZTsKLSAgICAgICAgICAvLyBHZXR0aW5nIGVpdGhlciBwYXJ0J3MgZWxlbWVudCByZWZlcmVuY2Ugb3IgdHlwZSByZWZlcmVuY2UKLSAgICAgICAgICBpZiAoKHJlZiA9IHBhcnQuZ2V0VHlwZU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlID0gWFNDb25zdGFudHMuVFlQRV9ERUZJTklUSU9OOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICgocmVmID0gcGFydC5nZXRFbGVtZW50TmFtZSgpKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHR5cGUgPSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGUgcGFydCBjb25hdGlucyBuZWl0aGVyIGVsZW1lbnQgbm9yIHR5cGUgYXR0cmlidXRlLAotICAgICAgICAgIC8vIHByb2NlZWRpbmcgd2l0aCB0aGUgbmV4dCBwYXJ0Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBzY2hlbWFzIGRlZmluZWQKLSAgICAgICAgICBNYXAgc2NoZW1hcyA9IHZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXRTY2hlbWFzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgc2NoZW1hcwotICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gc2NoZW1hcy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNNb2RlbCB4c01vZGVsID0gKFhTTW9kZWwpIGl0Lm5leHQoKTsKLSAgICAgICAgICAgIFhTVHlwZURlZmluaXRpb24geHNUeXBlID0gbnVsbDsKLSAgICAgICAgICAgIC8vIEdldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcGFydCB0eXBlCi0gICAgICAgICAgICBpZiAodHlwZSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXR0aW5nIHNjaGVtYSBlbGVtZW50Ci0gICAgICAgICAgICAgIFhTRWxlbWVudERlY2xhcmF0aW9uIGVsZW0gPSB4c01vZGVsLmdldEVsZW1lbnREZWNsYXJhdGlvbigKLSAgICAgICAgICAgICAgICByZWYuZ2V0TG9jYWxQYXJ0KCksIHJlZi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgICAgICAgIGlmIChlbGVtICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBHZXR0aW5nIGVsZW1lbnQncyB0eXBlCi0gICAgICAgICAgICAgICAgeHNUeXBlID0gZWxlbS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICAgIC8vIElmIGl0IGlzIHJlZjpzd2FSZWYKLSAgICAgICAgICAgICAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZSgpKQotICAgICAgICAgICAgICAgICAgJiYgV1NJQ29uc3RhbnRzLlNDSEVNQV9UWVBFX1NXQV9SRUYuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICB4c1R5cGUuZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIEFkZGluZyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgc3dhUmVmcy5hZGQoCi0gICAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShlbGVtLmdldE5hbWVzcGFjZSgpLCBlbGVtLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4c1R5cGUgPSB4c01vZGVsLmdldFR5cGVEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgIHJlZi5nZXRMb2NhbFBhcnQoKSwgcmVmLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBlbGVtZW50IG5hbWVzLGFkZGluZyBlbGVtZW50IG5hbWVzIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICBzd2FSZWZzLmFkZEFsbChjb2xsZWN0U3dhUmVmcyh4c1R5cGUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN3YVJlZnM7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgbmFtZXMgb2Ygc2NoZW1hIGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgKiBzY2hlbWEgdHlwZS4KLSAgICogQHBhcmFtIHhzVHlwZSBhIHNjaGVtYSB0eXBlLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBjb2xsZWN0U3dhUmVmcyhYU1R5cGVEZWZpbml0aW9uIHhzVHlwZSkKLSAgewotICAgIExpc3Qgc3dhUmVmcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoeHNUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbXBsZXggdHlwZQotICAgICAgaWYgKHhzVHlwZS5nZXRUeXBlQ2F0ZWdvcnkoKSA9PSBYU1R5cGVEZWZpbml0aW9uLkNPTVBMRVhfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNDb21wbGV4VHlwZURlZmluaXRpb24geHNDb21wbGV4VHlwZSA9Ci0gICAgICAgICAgKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c1R5cGU7Ci0gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIG1peGVkIGNvbnRleHQKLSAgICAgICAgaWYgKHhzQ29tcGxleFR5cGUuZ2V0UGFydGljbGUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY29sbGVjdGluZyBlbGVtZW50IG5hbWVzIAotICAgICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKHhzQ29tcGxleFR5cGUuZ2V0UGFydGljbGUoKS5nZXRUZXJtKCkpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3dhUmVmczsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBuYW1lcyBvZiBzY2hlbWEgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmCi0gICAqIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gdGVybSBhIHNjaGVtYSB0ZXJtLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBjb2xsZWN0U3dhUmVmcyhYU1Rlcm0gdGVybSkKLSAgewotICAgIExpc3Qgc3dhUmVmcyA9IG5ldyBBcnJheUxpc3QoKTsgCi0gICAgLy8gSWYgYSB0ZXJtIGlzIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24KLSAgICBpZiAodGVybS5nZXRUeXBlKCkgPT0gWFNDb25zdGFudHMuRUxFTUVOVF9ERUNMQVJBVElPTikKLSAgICB7Ci0gICAgICBYU0VsZW1lbnREZWNsYXJhdGlvbiBlbGVtID0gKFhTRWxlbWVudERlY2xhcmF0aW9uKSB0ZXJtOwotICAgICAgWFNUeXBlRGVmaW5pdGlvbiB4c1R5cGUgPSBlbGVtLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICAvLyBJZiBlbGVtZW50J3MgdHlwZSBpcyByZWY6c3dhUmVmCi0gICAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZXNwYWNlKCkpCi0gICAgICAgICYmIFdTSUNvbnN0YW50cy5TQ0hFTUFfVFlQRV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQWRkIGVsZW1lbnQncyBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgICAgIHN3YVJlZnMuYWRkKAotICAgICAgICAgIG5ldyBRTmFtZShlbGVtLmdldE5hbWVzcGFjZSgpLCBlbGVtLmdldE5hbWUoKSkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBlbHNlIGNvbGxlY3RpbmcgZWxlbWVudCBuYW1lcyBmcm9tIGVsZW1lbnQncyB0eXBlCi0gICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKHhzVHlwZSkpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBlbHNlIGlmIGEgdGVybSBpcyBhIG1vZGVsIGdyb3VwCi0gICAgZWxzZSBpZih0ZXJtLmdldFR5cGUoKSA9PSBYU0NvbnN0YW50cy5NT0RFTF9HUk9VUCkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBQYXJ0aWNsZSBzY2hlbWEgY29tcG9uZW50cwotICAgICAgWFNPYmplY3RMaXN0IGxpc3QgPSAoKFhTTW9kZWxHcm91cCkgdGVybSkuZ2V0UGFydGljbGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgLy8gQ29sbGVjdGluZyBlbGVtZW50IG5hbWVzCi0gICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKCgoWFNQYXJ0aWNsZSkgbGlzdC5pdGVtKGkpKS5nZXRUZXJtKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN3YVJlZnM7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhNDY1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMDUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDUgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgIC8vIElmIHRoaXMgaXMgYSBmYXVsdCBtZXNhZ2UsIHRoZW4gaXQgaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgc29hcCBib2R5IGVsZW1lbnQKLSAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY29udGFpbnNTb2FwQm9keVdpdGhDaGlsZChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSByZXF1ZXN0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBtYXRjaC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLy8gSXMgcnBjIHN0eWxlPwotICAgICAgaWYgKCFXU0lDb25zdGFudHMKLSAgICAgICAgLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQwotICAgICAgICAuZXF1YWxzKG1hdGNoLmdldE9wZXJhdGlvblN0eWxlKCkpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBMaXN0IGV4dEVsZW1lbnRzID0gbnVsbDsKLQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgIGV4dEVsZW1lbnRzID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgICAgLy8gSXMgbWVzc2FnZSBSUEMtbGl0ZXJhbD8KLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtZW50cykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vR2V0IG1lc3NhZ2UKLQotICAgICAgLy8gR2V0cyBib2R5Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUxpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0JPRFkpOwotICAgICAgaWYgKHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKSA9PSAwIHx8IHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vdCBhIGJvZHkgb3IgbW9yZSB0aGFuIG9uZSBib2RpZXMgaW4gdGhlIGVudmxvcGUuCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50IHNvYXBCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbSgwKTsKLQotICAgICAgLy8gRmluZCB3cmFwcGVyIGVsZW1lbnQgaW4gdGhlIGJvZHkKLSAgICAgIEVsZW1lbnQgd3JhcHBlckVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBCb2R5RWxlbSk7Ci0gICAgICBpZiAod3JhcHBlckVsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHdyYXBwZXJFbGVtZW50Ci0gICAgICAgIC5nZXRMb2NhbE5hbWUoKQotICAgICAgICAuZXF1YWxzKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlJlc3BvbnNlIikpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njk0ODY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEwMDcKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSwgaW4gdGhlIG1lc3NhZ2UgbG9nIGZpbGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RFREcyByZWxhdGluZyB0byBzb2FwOmhlYWRlciBvciBzb2FwOmJvZHkgZG9jdW1lbnRzLCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG1lc3NhZ2U6IG5vIERPQ1RZUEUgZWxlbWVudCBpcyBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUGFyc2UgbG9nIG1lc3NhZ2UgCi0gICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgaWYgKGRvYyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgLy8gZWxzZSBpZiB0aGUgbWVzc2FnZSBjb250YWlucyBhIERvY3VtZW50IFR5cGUgRGVjbGFyYXRpb24sIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgZWxzZSBpZiAoZG9jLmdldERvY3R5cGUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTIwMjM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMDguCi0gKiBNZXNzYWdlIGhhcyBwYXJ0IGFjY2Vzc29yIGVsZW1lbnRzIGZvciBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWUsIGluIG5vIG5hbWVzcGFjZXMsIAotICogYnV0IHRoZSBjaGlsZHJlbiBvZiB0aGVzZSBhcmUgbmFtZXNwYWNlIHF1YWxpZmllZCB3aXRoIHRoZSBzYW1lIHRhcmdldE5hbWVzcGFjZSB3aXRoIHdoaWNoIAotICogdGhlaXIgdHlwZXMgYXJlIGRlZmluZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLQotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtZXNzYWdlLCB0aGVuIHRocm93IGZhaWwgZXhjZXB0aW9uCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNvYXAgYm9keSBlbGVtZW50Ci0gICAgICBpZiAoIXRoaXMudmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGFjdGlvbiA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRTb2FwQWN0aW9uKGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0KLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0gICAgICAvL0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVudHJ5Q29udGV4dC5nZXRBbmFseXplckNvbnRleHQoKS5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbnMoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gbWF0Y2guZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICAgIC8vIElzIHJwYyBzdHlsZT8KLSAgICAgIGlmICghV1NJQ29uc3RhbnRzCi0gICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgLmVxdWFscyhtYXRjaC5nZXRPcGVyYXRpb25TdHlsZSgpKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0KLSAgICAgIC8vIEdldHMgYm9keQotICAgICAgTm9kZUxpc3Qgc29hcEJvZHlMaXN0ID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKTsKLSAgICAgIGlmIChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgewotICAgICAgICAvLyBUaGVyZSBpcyBub3QgYSBib2R5IG9yIG1vcmUgdGhhbiBvbmUgYm9kaWVzIGluIHRoZSBlbnZsb3BlLgotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgRWxlbWVudCBzb2FwQm9keUVsZW0gPSAoRWxlbWVudCkgc29hcEJvZHlMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIHJlc3VsdCA9IG51bGw7Ci0KLSAgICAgIC8vIEZpbmQgb3BlcmF0aW9uIGluIHRoZSBib2R5Ci0gICAgICBFbGVtZW50IHNvYXBPcGVyYXRpb24gPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBCb2R5RWxlbSk7Ci0gICAgICBpZiAoc29hcE9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBGaW5kIG9wZXJhdGlvbiBtZXNzYWdlIGFuZCBleHQuIGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nCi0gICAgICBNZXNzYWdlIG9wZXJhdGlvbk1lc3NhZ2UgPSBudWxsOwotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0gICAgICBpZiAoTWVzc2FnZUVudHJ5Ci0gICAgICAgIC5UWVBFX1JFUVVFU1QKLSAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKSkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBleHRFbGVtZW50cyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoTWVzc2FnZUVudHJ5Ci0gICAgICAgICAgLlRZUEVfUkVTUE9OU0UKLSAgICAgICAgICAuZXF1YWxzKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICAgIGV4dEVsZW1lbnRzID0KLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSXMgbWVzc2FnZSBSUEMtbGl0ZXJhbD8KLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtZW50cykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotCi0gICAgICAvLyBnZXRzIGZpcnN0IGNoaWxkIG9mIG1lc3NhZ2UKLSAgICAgIEVsZW1lbnQgc29hcE1lc3NhZ2VQYXJ0ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwT3BlcmF0aW9uKTsKLSAgICAgIGlmIChzb2FwTWVzc2FnZVBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgd2hpbGUgKHNvYXBNZXNzYWdlUGFydCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHBhcnQgYWNjZXNzb3Igb3IgcmV0dXJuIGFyZSBpbiBubyBuYW1lc3BhY2UJCSAgICAJCQotCi0gICAgICAgIGlmIChzb2FwTWVzc2FnZVBhcnQuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgIHx8ICIiLmVxdWFscyhzb2FwTWVzc2FnZVBhcnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICAgIGNoZWNrIHdoZXRoZXIgY2hpbGRyZW4gYXJlIG5hbWVzcGFjZSBxdWFsaWZpZWQgCi0gICAgICAgIC8vICB3aXRoIHRoZSBzYW1lIHRhcmdldE5hbWVzcGFjZSB3aXRoIHdoaWNoIHRoZWlyIHR5cGVzIGFyZSBkZWZpbmVkCi0gICAgICAgIFN0cmluZyB0eXBlc1RhcmdldE5TID0KLSAgICAgICAgICBnZXRUeXBlTlMob3BlcmF0aW9uTWVzc2FnZSwgc29hcE1lc3NhZ2VQYXJ0LmdldExvY2FsTmFtZSgpKTsKLQotICAgICAgICBpZiAodHlwZXNUYXJnZXROUyA9PSBudWxsKQotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgaWYgKCFjaGVja0NoaWxkcmVuTmFtZXNwYWNlKHNvYXBNZXNzYWdlUGFydCwgdHlwZXNUYXJnZXROUykpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgc29hcE1lc3NhZ2VQYXJ0ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoc29hcE1lc3NhZ2VQYXJ0KTsKLSAgICAgIH0KLQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBpZiAoZS5nZXRNZXNzYWdlKCkgIT0gbnVsbCAmJiBlLmdldE1lc3NhZ2UoKS5sZW5ndGgoKSA+IDApCi0gICAgICAgIHJlc3VsdCA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvblBhc3NFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChudWxsLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHBhcnQgdHlwZSBOUy4KLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogQHBhcmFtIHBhcnROYW1lCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRUeXBlTlMoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgcGFydE5hbWUpCi0gIHsKLSAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydE5hbWUpOwotICAgIGlmIChwYXJ0ID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcGFydC5nZXRUeXBlTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBjaGlsZHJlbiBlbGVtZW50cycgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gbm9kZQotICAgKiBAcGFyYW0gdHlwZXNUYXJnZXROUwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2hpbGRyZW5OYW1lc3BhY2UoRWxlbWVudCBub2RlLCBTdHJpbmcgdHlwZXNUYXJnZXROUykKLSAgewotICAgIE5vZGVMaXN0IHBhcnRzID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IHBhcnQgPSAoRWxlbWVudCkgcGFydHMuaXRlbShpKTsKLSAgICAgIGlmICghdHlwZXNUYXJnZXROUy5lcXVhbHMocGFydC5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmICghY2hlY2tDaGlsZHJlbk5hbWVzcGFjZShwYXJ0LCB0eXBlc1RhcmdldE5TKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZTQwMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTAwOS4KLSAqIE1lc3NhZ2UgaW5jbHVkZXMgYWxsIHNvYXBiaW5kOmhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSB3c2RsOmlucHV0IAotICogKGlmIHJlcXVlc3QpIG9yIHdzZGw6b3V0cHV0IChpZiByZXNwb25zZSkgb2YgdGhlIG9wZXJhdGlvbiByZWZlcnJlZCAKLSAqIHRvIGJ5IGl0cyB3c2RsOmJpbmRpbmcsIGFuZCBtYXkgYWxzbyBpbmNsdWRlIGhlYWRlcnMgdGhhdCB3ZXJlIG5vdCBzcGVjaWZpZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDkoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICBpZiAoZG9jID09IG51bGwgfHwgZG9jUmVxdWVzdCA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNvYXAgYm9keSBlbGVtZW50Ci0gICAgICBpZiAoIXRoaXMudmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzRmF1bHQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLQotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXdheSBvcGVyYXRpb24gYW5kIHdlIGFyZSBwcm9jZXNzaW5nIGEgcmVzcG9uc2UsIHRoZW4gc2V0IHJlc3VsdCB0byBub3RBcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbgotICAgICAgICAuZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgLmdldFN0eWxlKCkKLSAgICAgICAgLmVxdWFscyhPcGVyYXRpb25UeXBlLk9ORV9XQVkpCi0gICAgICAgICYmIChlbnRyeUNvbnRleHQKLSAgICAgICAgICAuZ2V0TWVzc2FnZUVudHJ5KCkKLSAgICAgICAgICAuZ2V0VHlwZSgpCi0gICAgICAgICAgLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBmaW5kIGJvZHkKLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICBpZiAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDAgfHwgc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm90IGEgYm9keSBvciBtb3JlIHRoYW4gb25lIGJvZGllcyBpbiB0aGUgZW52bG9wZS4KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIC8vIGZpbmQgaGVhZGVycwotICAgICAgTm9kZUxpc3Qgc29hcEhlYWRlcnMgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUi5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUi5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICAgIC8vZmluZCBhbGwgb3BlcmF0aW9uCi0gICAgICAvL0VsZW1lbnQgc29hcE9wZXJhdGlvbiA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoc29hcEJvZHlFbGVtKTsKLQotICAgICAgLy8gZ2V0cyBzb2FwYmluZDpoZWFkZXJzCi0gICAgICBMaXN0IGJpbmRpbmdIZWFkZXJzID0gbnVsbDsKLSAgICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAgIC5nZXRUeXBlKCkKLSAgICAgICAgLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBiaW5kaW5nSGVhZGVycyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAgICAgLmdldFR5cGUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgICAgICBiaW5kaW5nSGVhZGVycyA9Ci0gICAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChiaW5kaW5nSGVhZGVycyA9PSBudWxsIHx8IGJpbmRpbmdIZWFkZXJzLnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmdIZWFkZXJzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBPYmplY3QgYmluZGluZ0hlYWRlciA9IGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdIZWFkZXIgaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZmluZCBzb2FwYmluZDpoZWFkZXIgaW4gU09BUCBtZXNzYWdlCi0gICAgICAgICAgaWYgKCFpc0JpbmRpbmdIZWFkZXJJblNPQVBNZXNzYWdlKGVudHJ5Q29udGV4dCwKLSAgICAgICAgICAgIHNvYXBIZWFkZXJzLAotICAgICAgICAgICAgKFNPQVBIZWFkZXIpIGJpbmRpbmdIZWFkZXIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGUuZ2V0TWVzc2FnZSgpICE9IG51bGwgJiYgZS5nZXRNZXNzYWdlKCkubGVuZ3RoKCkgPiAwKQotICAgICAgICByZXN1bHQgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwobnVsbCwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgKiBDaGVja3Mgd2hldGhlciBzcGVjaWZpZWQgU09BUEhlYWRlciBpcyBpbiB0aGUgU09BUE1lc3NhZ2UuCi0gICogQHBhcmFtIHNvYXBIZWFkZXJMaXN0Ci0gICogQHBhcmFtIFNPQVBIZWFkZXIKLSAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzQmluZGluZ0hlYWRlckluU09BUE1lc3NhZ2UoCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCwKLSAgICBOb2RlTGlzdCBzb2FwSGVhZGVycywKLSAgICBTT0FQSGVhZGVyIGJpbmRpbmdIZWFkZXIpCi0gIHsKLQotICAgIE1lc3NhZ2UgbXNnID0gZ2V0TWVzc2FnZUJ5UU5hbWUoZW50cnlDb250ZXh0LCBiaW5kaW5nSGVhZGVyLmdldE1lc3NhZ2UoKSk7Ci0gICAgaWYgKG1zZyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUGFydCBwYXJ0ID0gbXNnLmdldFBhcnQoYmluZGluZ0hlYWRlci5nZXRQYXJ0KCkpOwotICAgIGlmIChwYXJ0ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBRTmFtZSBwYXJ0RWxlbWVudE5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCk7Ci0gICAgUU5hbWUgcGFydFR5cGVOYW1lID0gcGFydC5nZXRUeXBlTmFtZSgpOwotCi0gICAgaWYgKHBhcnRUeXBlTmFtZSA9PSBudWxsICYmIHBhcnRFbGVtZW50TmFtZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNvYXBIZWFkZXJzID09IG51bGwgfHwgc29hcEhlYWRlcnMuZ2V0TGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFZlY3RvciBoZWFkZXJzTGlzdCA9Ci0gICAgICBYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKChFbGVtZW50KSBzb2FwSGVhZGVycy5pdGVtKDApKTsKLQotICAgIGZvciAoaW50IGluZGV4SGVhZGVyID0gMDsKLSAgICAgIGluZGV4SGVhZGVyIDwgaGVhZGVyc0xpc3Quc2l6ZSgpOwotICAgICAgaW5kZXhIZWFkZXIrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IHNvYXBIZWFkZXJQYXJ0ID0gKEVsZW1lbnQpIGhlYWRlcnNMaXN0LmdldChpbmRleEhlYWRlcik7Ci0gICAgICBpZiAoc29hcEhlYWRlclBhcnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgUU5hbWUgc29hcEhlYWRlclBhcnRRTmFtZSA9Ci0gICAgICAgICAgbmV3IFFOYW1lKAotICAgICAgICAgICAgc29hcEhlYWRlclBhcnQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBzb2FwSGVhZGVyUGFydC5nZXRMb2NhbE5hbWUoKSk7Ci0gICAgICAgIGlmICgocGFydFR5cGVOYW1lICE9IG51bGwKLSAgICAgICAgICAmJiBwYXJ0VHlwZU5hbWUuZXF1YWxzKHNvYXBIZWFkZXJQYXJ0UU5hbWUpKQotICAgICAgICAgIHx8IChwYXJ0RWxlbWVudE5hbWUgIT0gbnVsbAotICAgICAgICAgICAgJiYgcGFydEVsZW1lbnROYW1lLmVxdWFscyhzb2FwSGVhZGVyUGFydFFOYW1lKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIG1lc3NhZ2UgYnkgUU5hbWUuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQKLSAgICogQHBhcmFtIG1lc3NhZ2VOYW1lCi0gICAqIEByZXR1cm4gTWVzc2FnZQotICAgKi8KLSAgcHJpdmF0ZSBNZXNzYWdlIGdldE1lc3NhZ2VCeVFOYW1lKAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgUU5hbWUgbWVzc2FnZU5hbWUpCi0gIHsKLSAgICBEZWZpbml0aW9uW10gZGVmcyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb25zKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbXNnID0gZGVmc1tpXS5nZXRNZXNzYWdlKG1lc3NhZ2VOYW1lKTsKLSAgICAgIGlmIChtc2cgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG1zZzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM3YWI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQMTAxMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUT0RPIG5lZWQgdG8gaGFuZGxlIHNvYXAgd2l0aCBhdHRhY2htZW50cwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0gICAgICAJIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAKLSAgICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCk7Ci0KLSAgICAgIC8vIGdldCBzb2FwIG1lc3NhZ2UgY2hpbGQgbmFtZQotICAgICAgLy8gR2V0IHRoZSBET00gY29udGVudHMgb2YgdGhlIG1lc3NhZ2Ugc29hcDpib2R5IChpZiBub24tZW1wdHkpCi0gICAgICBEb2N1bWVudCBtZXNzYWdlRG9jID0gbnVsbDsKLQotICAgICAgUU5hbWUgbWVzc2FnZVBhcnRFbGVtZW50UU5hbWUgPSBudWxsOwotCi0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZURvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgICAvL21lc3NhZ2VEb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLCAKLSAgICAgICAgLy8JV1NJUHJvcGVydGllcy5ERUZfU09BUF9TQ0hFTUEpOwotICAgICAgICAvLyBnZXQgc29hcCBvcGVyYXRpb24gbmFtZSBmcm9tIHRoZSBzb2FwOmJvZHkKLQotICAgICAgICAvLyBOT1RFOiBnZXRTb2FwQm9keUNoaWxkKCkgbWF5IHJldHVybiBudWxsLCBpZiB0aGUgc29hcDpib2R5IGRpZCBub3QgY29udGFpbiBhbnkgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgRWxlbWVudCBzb2FwTWVzc2FnZUVsZW1lbnQgPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChtZXNzYWdlRG9jKTsKLQotICAgICAgICAvLyBmb3IgZG9jLWxpdC4uLiBmaW5kIHRoZSB3c2RsOnBhcnQgZnJvbSBvbmUgb2YgdGhlIHNwZWNpZmllZCBvcGVyYXRpb25zIHRoYXQgaGFzIAotICAgICAgICAvLyB0aGUgc29hcCBlbGVtZW50IHVzZWQgaW4gdGhlIG1lc3NhZ2UuICAgICAgCi0gICAgICAgIC8vIHdlIGFyZSBsb29raW5nIGZvciBhIHBhcnQgd2l0aCBhbiBlbGVtZW50IGF0dHJpYiB2YWwgbWF0Y2hpbmcgdGhlIHNvYXAgbWVzc2FnZSBlbGVtZW50Ci0gICAgICAgIGlmIChzb2FwTWVzc2FnZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VQYXJ0RWxlbWVudFFOYW1lID0KLSAgICAgICAgICAgIG5ldyBRTmFtZSgKLSAgICAgICAgICAgICAgc29hcE1lc3NhZ2VFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICgobWVzc2FnZURvYyA9PSBudWxsKSB8fCB0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KG1lc3NhZ2VEb2MpKQotICAgICAgewotICAgICAgICAvLyBlbXB0eSBtZXNzYWdlcyBhbmQgZmF1bHQgbWVzc2FnZXMgZG8gbm90IHF1YWxpZnkgZm9yIHRoaXMgVEEKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gbG9vayBmb3IgbWF0Y2gocykgaW4gZG9jIG9wZXJhdGlvbnMKLSAgICAgIC8vIGlmIGZvdW5kLCB3ZSdyZSBkb25lLCBlbHNlCi0gICAgICAvLyBsb29rIGZvciBtYXRjaChzKSBpbiBycGMgb3BlcmF0aW9ucwotCi0gICAgICAvKiBEb2MtbGl0IAotICAgICAgICogZ2V0IGxpc3Qgb2Ygb3BlcmF0aW9ucyAoZnJvbSBjYW5kaWRhdGVzKSBmb3Igd2hpY2ggdGhlIGZpcnN0IHNvYXA6Ym9keSBjaGlsZCBRTmFtZSBpcyB0aGUKLSAgICAgICAqIDxwYXJ0IGVsZW1lbnQ9Ii4uLiI+IHZhbHVlIG9mIHRoYXQgb3BlcmF0aW9uJ3MgPHdzZGw6aW5wdXQ+IG9yIDx3c2RsOm91dHB1dD4gZWxlbWVudCAoZGVwZW5kaW5nCi0gICAgICAgKiBvbiB3aGV0aGVyIG1lc3NhZ2UgaXMgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2UpLgotICAgICAgICovCi0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBkb2NCaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRNYXRjaGluZ0JpbmRpbmdPcHMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICBiaW5kaW5ncyk7Ci0gICAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdGhhdCBtYXRjaCB0aGUgPHdzZGw6aW5wdXQ+IG9yIDx3c2RsOm91dHB1dD4gKGRlcGVuZGluZyBvbiBlbnRyeVR5cGUpCi0gICAgICAvLyBmb3IgcGFydCBlbGVtZW50PSIuLi4iCi0gICAgICAvLyAoSVNTVUU6IHdoYXQgYWJvdXQgcGFydCB0eXBlPSIuLi4iPykKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBwb3RlbnRpYWxEb2NMaXRPcHMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICBpZiAocG90ZW50aWFsRG9jTGl0T3BzLmxlbmd0aCAhPSAwKQotICAgICAgewotICAgICAgICAvLyBmb3VuZCBhdCBsZWFzdCBvbmUgZG9jIGxpdCBtYXRjaAotCi0gICAgICAgIC8vICoqKiBOb3cgd2Uga25vdyBpdCdzIGRvY3VtZW50LWxpdGVyYWwsIHNjaGVtYS12YWxpZGF0ZSB0aGUgU09BUCBwYXlsb2FkIGFjY29yZGluZ2x5ICAgICAgICAgICAgCQkKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5tZXNzYWdlSXNEb2NMaXRTY2hlbWFWYWxpZChlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvKiBzb2FwIG1lc3NhZ2UgaXMgbm90IGRvYy1saXQgc28gdHJ5IDoKLSAgICAgICAqIFJwYy1saXQKLSAgICAgICAqLwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgYmluZGluZ3MpOwotCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4gb3BlcmF0aW9uIG1hdGNoCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIHJjcE9wTWF0Y2ggPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlRG9jLAotICAgICAgICAgIHJwY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgIGlmIChyY3BPcE1hdGNoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgcGFydHMgbWF0Y2gKLSAgICAgICAgcmNwT3BNYXRjaCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCgKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICAgICAgbWVzc2FnZURvYywKLSAgICAgICAgICAgIHJwY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHJjcE9wTWF0Y2ggPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy9ub3QgbWF0Y2hlZCB3aXRoIHJwYyBlaXRoZXIuIFByZXBhcmUgYXNzZXJ0aW9uIGZhaWx1cmUuCi0gICAgICAgIFN0cmluZ0J1ZmZlciBycGNPcGVyYXRpb25MaXN0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJwY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgcnBjT3BlcmF0aW9uTGlzdC5hcHBlbmQocnBjQmluZGluZ09wZXJhdGlvbnNbaV0udG9TdHJpbmcoKSArICJcbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nQnVmZmVyIGRvY09wZXJhdGlvbkxpc3QgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZG9jQmluZGluZ09wZXJhdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBkb2NPcGVyYXRpb25MaXN0LmFwcGVuZChkb2NCaW5kaW5nT3BlcmF0aW9uc1tpXS50b1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAiLS1NRVNTQUdFOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgICArICJcbi0tQ0FORElEQVRFIFJQQyBTVFlMRSBPUEVSQVRJT05TICgiCi0gICAgICAgICAgICArIChycGNCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggIT0gMAotICAgICAgICAgICAgICA/IChycGNCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggKyAiKTpcbiIgKyBycGNPcGVyYXRpb25MaXN0KQotICAgICAgICAgICAgICA6ICJOT05FKSIpCi0gICAgICAgICAgICArICJcbi0tQ0FORElEQVRFIERPQ1VNRU5UIFNUWUxFIE9QRVJBVElPTlMgKCIKLSAgICAgICAgICAgICsgKGRvY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aCAhPSAwCi0gICAgICAgICAgICAgID8gKGRvY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aCArICIpOlxuIiArIGRvY09wZXJhdGlvbkxpc3QpCi0gICAgICAgICAgICAgIDogIk5PTkUpIikpOwotCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNWQ0ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMTIuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMTIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RW52ZWxvcGU+IGVsZW1lbnRzOgotICAgICAgLy8gKE5vdGU6IHNpbmNlIHRoaXMgaXMgYSBTb2FwIG1lc3NhZ2Ugd2UgZXhwZWN0IGV4YWN0bHkgb25lIHNvYXAgZW52ZWxvcGUsIGJ1dCB3ZSBkbyBub3QgYXNzdW1lIGl0KS4KLSAgICAgIERvY3VtZW50IHJlcXVlc3REb2MgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgIC8vIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHJlcXVlc3REb2MgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgRWxlbWVudCBlbnZFbGVtID0gcmVxdWVzdERvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vTm9kZUxpc3Qgc29hcEVudkxpc3QgPSByZXF1ZXN0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiRW52ZWxvcGUiKTsKLQotICAgICAgLy8gSWYgdGhlIGRvY3VtZW50IGVsZW1lbnQgdGFnIG5hbWUgaXMgbm90IEVudmVsb3BlCi0gICAgICAvLyBvciB0aGUgbmFtZXNwYWNlIGlzIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvCi0gICAgICBpZiAoIWVudkVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSkKLSAgICAgICAgfHwgZW52RWxlbS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQKSkKLSAgICAgICAgLy8gUmVxdWVzdCBjb250YWlucyBwcm9wZXIgc29hcCBFbnZlbG9wZSBlbGVtZW50Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIHdlIGV4cGVjdCBhIFNvYXAgRmF1bHQgYXMgYSByZXNwb25zZQkKLSAgICAgIERvY3VtZW50IHJlc3BvbnNlRG9jID0KLSAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldFJlc3BvbnNlKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIE5vZGVMaXN0IHNvYXBGYXVsdExpc3QgPQotICAgICAgICByZXNwb25zZURvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICAiRmF1bHQiKTsKLSAgICAgIC8vIEFERCBleHRyYSBjaGVjayBoZXJlIHRoYXQgdGhlIDxzb2FwOkZhdWx0PiBpcyBhIGNoaWxkIG9mIDxzb2FwOkVudmVsb3BlPiA/PwkJICAgICAgCQkJCQotICAgICAgaWYgKChzb2FwRmF1bHRMaXN0ID09IG51bGwpIHx8IChzb2FwRmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgewotICAgICAgICAvLyBObyBTb2FwIGZhdWx0IGZvdW5kLgotICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkIChBREQgaGlnaGxpZ2h0IHRoZSBjaGlsZCBoZXJlID8pCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICItLS0gUkVRVUVTVDpcbiIKLSAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgICsgIlxuLS0tIFJFU1BPTlNFOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjZmOGViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0KLQotLyoqCi0gKiBCUDEwMTMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMTMgZXh0ZW5kcyBCUDEwMTEKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMzEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiZGFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0KLS8qKgotICogQlAxMDMxLgotICogCi0gKiBAYXV0aG9yOiBHcmFoYW0gVHVycmVsbCwgSUJNIFVLCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMzEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMzEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnQgZG9jOwotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgICAvLyBvciBtZXNzYWdlIGlzIG1lcHR5IG9yIGludmFsaWQKLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgICAgICB8fCAoZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBOb2RlTGlzdCBmYXVsdENvZGVzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmYXVsdGNvZGUiKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF1bHRDb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlTGlzdCBmYXVsdENvZGVOb2RlcyA9IChmYXVsdENvZGVzLml0ZW0oaSkpLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmYXVsdENvZGVOb2Rlcy5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGZhdWx0Q29kZU5vZGVzLml0ZW0oaikgaW5zdGFuY2VvZiBUZXh0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRleHQgZmF1bHRDb2RlVGV4dCA9IChUZXh0KSBmYXVsdENvZGVOb2Rlcy5pdGVtKGopOwotICAgICAgICAgICAgaWYgKGZhdWx0Q29kZVRleHQuZ2V0RGF0YSgpLmluZGV4T2YoJy4nKSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgIC8vIGRvdHRlZCBub3RhdGlvbiB1c2VkLgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgLy8gbm8gZG90dGVkIG5vdGF0aW9uIHVzZWQgaW4gYSBmYXVsdGNvZGUgZWxlbWVudAotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzQxMzA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotCi0KLS8qKgotICogQlAxMDMyCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBzb2FwOkVudmVsb3BlLCBzb2FwOkhlYWRlciwgYW5kIHNvYXA6Qm9keSBlbGVtZW50cyBkbyBub3QgaGF2ZSBhbnkgYXR0cmlidXRlcyBpbiB0aGUgbmFtZXNwYWNlICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDMyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDMyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gQXNzdW1pbmcgdGhhdCByb290IGVsZW1lbnQgc2hvdWxkIGJlIHNvYXA6RW52ZWxvcGUKLSAgICAgIC8vIElmIG5vdCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fRU5WRUxPUEUpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBsb29raW5nIGZvciBhbnkgYXR0cmlidXRlIG9mIHNvYXA6RW52ZWxvcGUgaW4gdGhlIG5hbWVzcGFjZQotICAgICAgLy8gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIgotICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIEF0dHIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigic29hcDpFbnZlbG9wZSBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgKyBhdHRyLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGNoaWxkIG9mIHNvYXA6RW52ZWxvcGUKLSAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpIZWFkZXIKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0hFQURFUikpCi0gICAgICB7Ci0gICAgICAgIC8vIGxvb2tpbmcgZm9yIGFueSBhdHRyaWJ1dGUgb2Ygc29hcDpIZWFkZXIgaW4gdGhlIG5hbWVzcGFjZQotICAgICAgICAvLyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAgICAgIC8vIElmIGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJzb2FwOkhlYWRlciBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgICArIGF0dHIuZ2V0TmFtZSgpKTsKLQotICAgICAgICAvLyBNb3ZpbmcgdG8gdGhlIG5leHQgc29hcDpFbnZlbG9wZSBjaGlsZAotICAgICAgICBlbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBzb2FwOkJvZHkKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0JPRFkpKQotICAgICAgewotICAgICAgICAvLyBsb29raW5nIGZvciBhbnkgYXR0cmlidXRlIG9mIHNvYXA6Qm9keSBpbiB0aGUgbmFtZXNwYWNlCi0gICAgICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIKLSAgICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIGlmIChhdHRyICE9IG51bGwpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInNvYXA6Qm9keSBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgICArIGF0dHIuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogTG9va3MgZm9yIGFuIGF0dHJpYnV0ZSB0aGF0IGlzIGluIHRoZSBuYW1lc3BhY2UKLSAgICogaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8KLSAgICogQHBhcmFtIGF0dHJzIGEgY29sbGVjdGlvbiBvZiBhdHRyaWJ1dGVzCi0gICAqIEByZXR1cm4gYW4gYXR0cmlidXRlIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlIG9yIG51bGwKLSAgICovCi0gIHByaXZhdGUgQXR0ciBnZXRBdHRyaWJ1dGUoTmFtZWROb2RlTWFwIGF0dHJzKQotICB7Ci0gICAgQXR0ciByZXQgPSBudWxsOwotICAgIGlmIChhdHRycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLSAgICAgICAgaWYgKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgICYmIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXQgPSBhdHRyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmVjOGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTAzMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgU09BUCBlbnZlbG9wZSBkb2VzIG5vdCBjb250YWluIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24geG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMzMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMzMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbSA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vIElmIGl0IGlzIG5vdCB0aGUgc29hcDpFbnZlbG9wZSwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFlbGVtLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApCi0gICAgICAgIHx8ICFlbGVtLmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fRU5WRUxPUEUpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGUgZW52ZWxvcGUgY29udGFpbnMgdGhlIHhtbG5zOnhtbCBuYW1lc3BhY2UgZGVjbGFyYXRpb24sCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgU3RyaW5nIGluY29ycmVjdEVsZW1lbnROYW1lID0gZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoZWxlbSk7Ci0gICAgICBpZiAoaW5jb3JyZWN0RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBuYW1lIG9mIGFuIGVsZW1lbnQgY29udGFpbmluZyAiCi0gICAgICAgICAgKyAic3VjaCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gaXMgXCIiICsgaW5jb3JyZWN0RWxlbWVudE5hbWUgKyAiXCIuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW55IGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgYXR0cmlidXRlIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi4gCi0gICAqIEBwYXJhbSBlbGVtIHRoZSByb290IGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIG5hbWUgb2YgYW4gZWxlbWVudCBmb3VuZCBvciBudWxsLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgLy8gR2V0dGluZyBhIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgeG1sbnM6eG1sCi0gICAgU3RyaW5nIGF0dHJWYWx1ZSA9IGVsZW0uZ2V0QXR0cmlidXRlTlMoCi0gICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hNTE5TLCAieG1sIik7Ci0gICAgLy8gSWYgaXQgZXF1YWxzIHRvICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLAotICAgIC8vIHJldHVybiBhbiBlbGVtZW50IG5hbWU7Ci0gICAgaWYgKFdTSUNvbnN0YW50cy5OU19VUklfWE1MLmVxdWFscyhhdHRyVmFsdWUpKQotICAgIHsKLSAgICAgIHJldHVybiBlbGVtLmdldE5vZGVOYW1lKCk7Ci0gICAgfQotICAgIC8vIEdvaW5nIHRocm91Z2ggZWxlbWVudCdzIGNoaWxkcmVuCi0gICAgRWxlbWVudCBjaGlsZCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbSk7Ci0gICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgLy8gSWYgYW55IG9mIHRoZW0gaGFzIHhtbG5zOnhtbCBhdHRyaWJ1dGUsIHJldHVybiBhIHZhbHVlCi0gICAgICBTdHJpbmcgbmFtZSA9IGdldEluY29ycmVjdEVsZW1lbnROYW1lKGNoaWxkKTsKLSAgICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgICAgfQotICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBlbGVtZW50J3MgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICAvLyBObyB4bWxuczp4bWwgYXR0cmlidXRlcyBmb3VuZCwgcmV0dXJuIG51bGwKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTEwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmJhZDcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTEwMC4KLSAqIEEgbWVzc2FnZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBTT0FQIGZhdWx0IFNIT1VMRCB1c2UgYSAiMjAwIE9LIiAKLSAqIEhUVFAgc3RhdHVzIGNvZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDpGYXVsdD4gZWxlbWVudDoKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkZhdWx0Iik7Ci0KLSAgICAgICAgLy8gSWYgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6RmF1bHQsIHRoZW4gY2hlY2sgaXQKLSAgICAgICAgaWYgKChmYXVsdExpc3QgPT0gbnVsbCkgfHwgKGZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOkZhdWx0Ci0gICAgICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZQotICAgICAgICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgICAgICAgIFV0aWxzLmdldEhUVFBTdGF0dXNDb2RlKAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0gICAgICAgICAgaWYgKCEiMjAwIi5lcXVhbHMoaHR0cFN0YXR1cykpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgICAgLy9mYWlsdXJlRGV0YWlsTWVzc2FnZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAiXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgICAgICsgIlxuTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIGl0IGlzIGEgc29hcDpGYXVsdCwgdGhlbiB0aGUgcmVzdWx0IG11c3QgYmUgbm90QXBwbGljYWJsZQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDExMDcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTA3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzg2OTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDExMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5OdWxsVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQlAxMTA3LgotICogVGhlIGNvbnRhaW5lZCBzb2FwYmluZDpmYXVsdCBpcyBkZWZpbmVkIGluIHRoZSB3c2RsOmJpbmRpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgT3BlcmF0aW9uU2lnbmF0dXJlIHJlc3BvbnNlU2lnID0gbnVsbDsKLSAgcHJpdmF0ZSBWZWN0b3IgZmF1bHRzID0gbnVsbDsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBmYXVsdCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLQotICAgIGlmIChmYXVsdE5hbWUgPT0gbnVsbCkKLSAgICAgIGZhdWx0TmFtZSA9IGN0eC5nZXRCaW5kaW5nRmF1bHQoKS5nZXROYW1lKCk7Ci0KLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgIGlmIChvcCA9PSBudWxsIC8qIHx8IGZhdWx0TmFtZSA9PSBudWxsKi8KLSAgICAgICkgLy8gbWF5IGJlIGl0J3MgcG9zc2libGUgdG8gaGF2ZSBsZWdhbCBmYXVsdCB3aXRoIG51bGwgbmFtZQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IFNPQVBGYXVsdC5nZXROYW1lKCkgY29ycmVzcG9uZHMgdG8gdGhlIGFic3RyYWN0IG9wZXJhdGlvbidzIGZhdWx0IG5hbWUgICAgICAgICAgIAotICAgIEZhdWx0IGYgPSBvcC5nZXRGYXVsdChmYXVsdE5hbWUpOwotICAgIGlmIChmID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICBNZXNzYWdlIG0gPSBmLmdldE1lc3NhZ2UoKTsKLSAgICAvLyBtZXNzYWdlIHNob3VsZCBoYXZlIG9ubHkgb25lIHBhcnQKLSAgICBpZiAobSA9PSBudWxsIHx8IG0uZ2V0UGFydHMoKSA9PSBudWxsIHx8IG0uZ2V0UGFydHMoKS5zaXplKCkgIT0gMSkKLSAgICAgIHJldHVybjsKLQotICAgIC8vUGFydCBmYXVsdFBhcnQgPSBXU0RMVXRpbC5nZXRQYXJ0KG0sIGZhdWx0TmFtZSk7Ci0gICAgUGFydCBmYXVsdFBhcnQgPSAoUGFydCkgbS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCi0gICAgVHlwZXNSZWdpc3RyeSB0UmVnID0gKFR5cGVzUmVnaXN0cnkpIGN0eC5nZXRQYXJhbWV0ZXIoIlR5cGVzUmVnaXN0cnkiKTsKLSAgICBRTmFtZSBlbGVtUU5hbWUgPSBmYXVsdFBhcnQuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICBRTmFtZSB0eXBlUU5hbWUgPSBmYXVsdFBhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICBpZiAodHlwZVFOYW1lID09IG51bGwpCi0gICAgICB0eXBlUU5hbWUgPSB0UmVnLmdldFR5cGUoZmF1bHRQYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIGlmICh0eXBlUU5hbWUgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcnQgdHlwZSBjYW4gbm90IGJlIG51bGwuIik7Ci0KLSAgICAvLyBmb3IgYWxsIGZhdWx0czsgaWYgaXQgcHJlc2VudHMgaW4gdGhlIGRlZmluaXRpb24gcmVtb3ZlIGl0IGZyb20gbGlzdAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF1bHRzLnNpemUoKTspCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIGZhdWx0cy5nZXQoaSk7Ci0KLSAgICAgIC8vIFRPRE86IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyBoZXJlLiAgT25seSB0aGUgZWxlbWVudCBzZXR0aW5nIHNob3VsZCBiZSBjaGVja2VkLiAKLSAgICAgIC8vYm9vbGVhbiBtYXRjaEJ5VHlwZSA9Ci0gICAgICAvLyAgZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHModHlwZVFOYW1lLmdldExvY2FsUGFydCgpKSAmJiBOdWxsVXRpbC5lcXVhbHMoZWxlbS5nZXROYW1lc3BhY2VVUkkoKSwgdHlwZVFOYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotICAgICAgYm9vbGVhbiBtYXRjaEJ5RWxlbWVudCA9Ci0gICAgICAgIGVsZW1RTmFtZSAhPSBudWxsCi0gICAgICAgICAgJiYgZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoZWxlbVFOYW1lLmdldExvY2FsUGFydCgpKQotICAgICAgICAgICYmIE51bGxVdGlsLmVxdWFscygKLSAgICAgICAgICAgIGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBlbGVtUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0gICAgICAvL2lmIChtYXRjaEJ5VHlwZSB8fCBtYXRjaEJ5RWxlbWVudCkKLSAgICAgIGlmIChtYXRjaEJ5RWxlbWVudCkKLSAgICAgICAgZmF1bHRzLnJlbW92ZShpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgaSsrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0gICAgICBEb2N1bWVudCBkb2NSZXNwb25zZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICBpZiAoKGRvY1JlcXVlc3QgPT0gbnVsbCkgfHwgKGRvY1Jlc3BvbnNlID09IG51bGwpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoIXRoaXMudmFsaWRhdG9yLmlzRmF1bHQoZG9jUmVzcG9uc2UpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjcmVhdGUgcmVxdWVzdCBzaWduYXR1cmUKLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0U29hcEFjdGlvbihlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkpLAotICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXSwKLSAgICAgICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgICAgdmFsaWRhdG9yKSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIE1PVkVEOiBQYXJzZSByZXNwb25zZSBtZXNzYWdlCi0gICAgICAgICAgLy9kb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgICAgIHJlc3BvbnNlU2lnID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShkb2NSZXNwb25zZSk7Ci0gICAgICAgICAgaWYgKFdTSUNvbnN0YW50cwotICAgICAgICAgICAgLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQwotICAgICAgICAgICAgLmVxdWFscyhtYXRjaC5nZXRPcGVyYXRpb25TdHlsZSgpKSkKLSAgICAgICAgICAgIHJlc3BvbnNlU2lnLmNyZWF0ZVJQQ1NpZ25hdHVyZSgpOwotCi0gICAgICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICAgICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEZhdWx0KHRydWUpOwotICAgICAgICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ091dHB1dCgpOwotCi0gICAgICAgICAgaWYgKHJlc3BvbnNlU2lnID09IG51bGwgfHwgIXJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZVNpZyAhPSBudWxsICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBleHRyYWN0IGFsbCBmYXVsdHMgYW5kIHRyeSBmaW5kIHRoZW0gaW4gdGhlIGRlZmluaXRpb24KLSAgICAgICAgICAgIC8vIGV4dHJhY3RzIG9ubHkgZmF1bHRzIHdpdGggbmFtZXNwYWNlCi0gICAgICAgICAgICBFbGVtZW50IGJvZHkgPQotICAgICAgICAgICAgICBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KAotICAgICAgICAgICAgICAgIGRvY1Jlc3BvbnNlLmdldERvY3VtZW50RWxlbWVudCgpLAotICAgICAgICAgICAgICAgIFdTSVRhZy5FTEVNX1NPQVBfQk9EWSk7Ci0gICAgICAgICAgICBFbGVtZW50IGZhdWx0ID0KLSAgICAgICAgICAgICAgWE1MVXRpbHMuZmluZENoaWxkRWxlbWVudChib2R5LCBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxUKTsKLSAgICAgICAgICAgIEVsZW1lbnQgZGV0YWlsID0gWE1MVXRpbHMuZ2V0RWxlbWVudCgiZGV0YWlsIiwgZmF1bHQpOwotICAgICAgICAgICAgaWYgKGRldGFpbCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgICAgICAgICAgICBmYXVsdHMgPSBYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKGRldGFpbCk7Ci0KLSAgICAgICAgICAgICAgLy8gUkVNT1ZFOiBXaHkgZG8gdGhlIGZhdWx0cyBoYXZlIHRvIGJlIG5hbWVzcGFjZWQgcXVhbGlmaWVkPwotICAgICAgICAgICAgICAvL1hNTFV0aWxzLnJlbW92ZUFsbEVsZW1lbnRzV2l0aG91dE5TKGZhdWx0cyk7Ci0KLSAgICAgICAgICAgICAgLy8gaWYgZmF1bHRzIGV4aXN0IHRyeSB0byB2YWxpZGF0ZSBpdAotICAgICAgICAgICAgICBpZiAoZmF1bHRzLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBNYXAgbSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgV1NETFV0aWwuZXhwYW5kRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgICAgICAgICAgbS5wdXQoCi0gICAgICAgICAgICAgICAgICAiZGVmaW5pdGlvbiIsCi0gICAgICAgICAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpKTsKLSAgICAgICAgICAgICAgICBUeXBlc1JlZ2lzdHJ5IHRSZWcgPQotICAgICAgICAgICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3IpOwotICAgICAgICAgICAgICAgIG0ucHV0KCJUeXBlc1JlZ2lzdHJ5IiwgdFJlZyk7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpLCBtKTsKLSAgICAgICAgICAgICAgICBpZiAoZmF1bHRzLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgICAgICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXVsdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuc2VyaWFsaXplRWxlbWVudCgoRWxlbWVudCkgZmF1bHRzLmdldChpKSwgc3cpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3cuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICAgICAgICJcbkZhdWx0czpcbiIgKyBzdy50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjY5MzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEyMDEuCi0gKiBUaGUgbmFtZXNwYWNlIG9mIHRoZSBzb2FwOkVudmVsb3BlIGluIHRoZSBtZXNzYWdlIGhhcyB2YWx1ZTogaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8uIAotICovCi1wdWJsaWMgY2xhc3MgQlAxMjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50IGRvYzsKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG9uZSB3YXkgcmVzcG9uc2Ugb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSB8fAotICAgICAgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmcgbnMgPSByb290LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIGxvY2FsID0gcm9vdC5nZXRMb2NhbE5hbWUoKTsKLSAgICAgIGlmICghRUxFTV9TT0FQX0VOVkVMT1BFLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhucykpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIlJvb3QgZWxlbWVudCBoYXMgbmFtZXNwYWNlOiAiICsgbnMsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKCFFTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGxvY2FsKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAiUm9vdCBlbGVtZW50IGhhcyBsb2NhbCBuYW1lOiAiICsgbG9jYWwsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVhYmVlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTIwMi4gCi0gKiBFYWNoIGNoaWxkIGVsZW1lbnQgKGlmIGFueSkgb2YgdGhlIHNvYXA6Qm9keSBlbGVtZW50IGlzIG5hbWVzcGFjZSBxdWFsaWZpZWQgKG5vdCB0aGUgZ3JhbmRjaGlsZHJlbikuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUGFyc2UgbG9nIG1lc3NhZ2UgCi0gICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICBpZiAodmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgc29hcCBib2R5IGVsZW1lbnQKLSAgICBlbHNlIGlmICghdmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gR2V0IHRoZSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gR2V0IGEgbm9kZSBsaXN0IHdoaWNoIHNob3VsZCBjb250YWluIHRoZSBzb2FwOkJvZHkgZWxlbWVudAotICAgICAgTm9kZUxpc3Qgcm9vdE5vZGVMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBFTEVNX1NPQVBfQk9EWS5nZXROYW1lc3BhY2VVUkkoKSwgRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc29hcDpCb2R5IGVsZW1lbnQsCi0gICAgICAvLyB0aGVuIG1ha2Ugc3VyZSB0aGF0IGVhY2ggY2hpbGQgaXMgbmFtZXNwYWNlIHF1YWxpZmllZAotICAgICAgaWYgKHJvb3ROb2RlTGlzdC5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCB0aGUgc29hcDpCb2R5IGVsZW1lbnQKLSAgICAgICAgRWxlbWVudCBib2R5ID0gKEVsZW1lbnQpIHJvb3ROb2RlTGlzdC5pdGVtKDApOwotCi0gICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBzb2FwOkJvZHkgY2hpbGQgZWxlbWVudHMgCi0gICAgICAgIE5vZGVMaXN0IGNoaWxkcmVuID0gYm9keS5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgZWFjaCBjaGlsZCBlbGVtZW50IGlzIG5hbWVzcGFjZSBxdWFsaWZpZWQKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7Ci0gICAgICAgICAgaSA8IGNoaWxkcmVuLmdldExlbmd0aCgpICYmIHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIG4gPSBjaGlsZHJlbi5pdGVtKGkpOwotICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbnMgPSBuLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgaWYgKG5zID09IG51bGwgfHwgbnMubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzBhY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEyMDMuIAotICogVGhlIG5hbWVzcGFjZSBvZiB0aGUgZGV0YWlsIGVsZW1lbnQgb2YgYSBxdWFsaWZpZWQgYXR0cmlidXRlIGluIHRoZSBzb2FwOkZhdWx0IGlzIGEgCi0gKiBmb3JlaWduIG5hbWVzcGFjZSwgZGlmZmVyZW50IGZyb20gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBib29sZWFuIHF1YWxpZmllZEF0dHJpYnV0ZXMgPSBmYWxzZTsKLQotICAgIERvY3VtZW50IGRvYzsKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG9uZSB3YXkgcmVzcG9uc2Ugb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgICB8fCAoZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEFERDogTmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGVjayBpcyByZXF1aXJlZCwgc2luY2UgaXQgc2hvdWxkIGFscmVhZHkgYmUgZG9uZQotICAgICAgLy8gQXBwbGljYWJsZSB0byByZXNwb25zZSBtZXNzYWdlcyBvbmx5Ci0gICAgICBpZiAoZW50cnlDb250ZXh0Ci0gICAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgICAuZ2V0VHlwZSgpCi0gICAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotICAgICAgICBpZiAoKGZhdWx0TGlzdCA9PSBudWxsKSB8fCAoZmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6RmF1bHQKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gd2UgaGF2ZSBhIHNvYXA6RmF1bHQuIAotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBsb29rIGF0IGVhY2ggc29hcDpGYXVsdCBpbiB0dXJuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0TGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50IHNvYXBGYXVsdCA9IChFbGVtZW50KSBmYXVsdExpc3QuaXRlbShpKTsKLSAgICAgICAgICAgICAgLy8gZmluZCB0aGUgZGV0YWlsIGVsZW1lbnQocykgaWYgYW55Ci0gICAgICAgICAgICAgIE5vZGVMaXN0IGRldGFpbExpc3QgPQotICAgICAgICAgICAgICAgIHNvYXBGYXVsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKTsKLSAgICAgICAgICAgICAgaWYgKGRldGFpbExpc3QgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGRldGFpbCBlbGVtZW50Li4uICAgICAJCQkJCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXRhaWxMaXN0LmdldExlbmd0aCgpOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwIGRldGFpbEF0dHJpYnMgPQotICAgICAgICAgICAgICAgICAgICBkZXRhaWxMaXN0Lml0ZW0oaikuZ2V0QXR0cmlidXRlcygpOwotICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGFueSBxdWFsaWZpZWQgYXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbEF0dHJpYnMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBkZXRhaWxBdHRyaWJzLmdldExlbmd0aCgpOyBrKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBBdHRyIG5leHRBdHRyID0gKEF0dHIpIChkZXRhaWxBdHRyaWJzLml0ZW0oaykpOwotICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIHF1YWxpZmllZCBhdHRyaWJ1dGUsIGNoZWNrIHRoYXQgCi0gICAgICAgICAgICAgICAgICAgICAgLy8gcW5hbWUgIT0gaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZQotICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0QXR0ci5nZXROYW1lc3BhY2VVUkkoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZEF0dHJpYnV0ZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRBdHRyCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIHVuZXhwZWN0ZWQgcW5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcXVhbGlmaWVkQXR0cmlidXRlcykKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyB0YXJnZXQgbWVzc2FnZSBpcyBub3QgYSBSZXNwb25zZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmY0ODBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEyMDQuCi0gKiBUaGUgc2VyaWFsaXplZCBhcnJheSBmb3JtIGluIHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIAotICogc29hcGVuYzphcnJheVR5cGUgYXR0cmlidXRlLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMDQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9Ci0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSByZXF1ZXN0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPQotICAgICAgICBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLQotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICBNZXNzYWdlIG9wZXJhdGlvbk1lc3NhZ2UgPSBudWxsOwotICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAuVFlQRV9SRVFVRVNUCi0gICAgICAgIC5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKSkKLSAgICAgICAgJiYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAgIC5UWVBFX1JFU1BPTlNFCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKQotICAgICAgICAgICYmIChiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpICE9IG51bGwpKQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3BlcmF0aW9uTWVzc2FnZSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotCi0gICAgICBib29sZWFuIGlzQ29udGFpbkFycmF5ID0gZmFsc2U7Ci0KLSAgICAgIENvbGxlY3Rpb24gcGFydHMgPSBvcGVyYXRpb25NZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdGVyLm5leHQoKTsKLQotICAgICAgICBRTmFtZSB0eXBlID0gbnVsbDsKLQotICAgICAgICBpZiAocGFydC5nZXRUeXBlTmFtZSgpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0eXBlID0gcmVnaXN0cnkuZ2V0VHlwZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHR5cGUgPSBwYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpc0NvbnRhaW5BcnJheSA9Ci0gICAgICAgICAgcmVnaXN0cnkuaXNFeHRlbmRzQXJyYXkodHlwZSkKLSAgICAgICAgICAgIHx8IHJlZ2lzdHJ5LmlzVXNlc1dTRExBcnJheVR5cGUodHlwZSkKLSAgICAgICAgICAgIHx8IGlzQXJyYXlUeXBlKHR5cGUpOwotICAgICAgICBpZiAoaXNDb250YWluQXJyYXkpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpc0NvbnRhaW5BcnJheSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0cyBib2R5Ci0gICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICAgIGlmIChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEVsZW1lbnQgc29hcEJvZHlFbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApOwotCi0gICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5Q2lsZHJlbkxpc3QgPQotICAgICAgICAgIHNvYXBCb2R5RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgIioiKTsKLSAgICAgICAgZm9yIChpbnQgaW5kZXhDaGlsZCA9IDA7Ci0gICAgICAgICAgaW5kZXhDaGlsZCA8IHNvYXBCb2R5Q2lsZHJlbkxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgaW5kZXhDaGlsZCsrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5Q2lsZHJlbkxpc3QuaXRlbShpbmRleENoaWxkKTsKLSAgICAgICAgICBpZiAoZWxlbQotICAgICAgICAgICAgLmhhc0F0dHJpYnV0ZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5DT0RJTkcsCi0gICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0FSUkFZX1RZUEUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0eXBlIHVzZXMgYW4gYXJyYXkgb3Igbm90LgotICAgKiBAcGFyYW0gdHlwZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0FycmF5VHlwZShRTmFtZSB0eXBlKQotICB7Ci0gICAgYm9vbGVhbiBhcnJheVR5cGUgPSBmYWxzZTsKLQotICAgIEVsZW1lbnQgdHlwZUVsZW1lbnQgPSBnZXRUeXBlRWxlbWVudCh0eXBlKTsKLSAgICBpZiAodHlwZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBOb2RlTGlzdCBsaXN0ID0KLSAgICAgICAgdHlwZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hTRCwKLSAgICAgICAgICAic2VxdWVuY2UiKTsKLSAgICAgIGlmIChsaXN0LmdldExlbmd0aCgpID4gMCkKLSAgICAgICAgYXJyYXlUeXBlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXlUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgWE1MIGVsZW1lbnQgZGVmaW5pbmcgdGhlIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlCi0gICAqIEByZXR1cm4gRWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldFR5cGVFbGVtZW50KFFOYW1lIHR5cGUpCi0gIHsKLSAgICBUeXBlc1tdIGFsbFR5cGVzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0VHlwZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgYWxsVHlwZXMgIT0gbnVsbCAmJiBpIDwgYWxsVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCB0eXBlc0VsZW1lbnQgPSBudWxsOwotICAgICAgaWYgKGFsbFR5cGVzW2ldICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGVzRWxlbWVudCA9IGFsbFR5cGVzW2ldLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICAgIGlmICh0eXBlc0VsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgZXh0TGlzdCA9IGFsbFR5cGVzW2ldLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IGV4dExpc3QuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgICAgICBpZiAoZXh0RWxlbQotICAgICAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKQotICAgICAgICAgICAgICAuZXF1YWxzKG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1hTRCwgInNjaGVtYSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHlwZXNFbGVtZW50ID0KLSAgICAgICAgICAgICAgICAoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbSkuZ2V0RWxlbWVudCgpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGVzRWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZUxpc3QgY29tcGxleFR5cGVzTGlzdCA9Ci0gICAgICAgICAgICB0eXBlc0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QsCi0gICAgICAgICAgICAgICJjb21wbGV4VHlwZSIpOwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29tcGxleFR5cGVzTGlzdC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgdHlwZUVsZW0gPSAoRWxlbWVudCkgY29tcGxleFR5cGVzTGlzdC5pdGVtKGopOwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKHR5cGVFbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFbGVtOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmFmOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFRyYXZlcnNhbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci0KLQotLyoqCi0gKiBCUDEyMDggTk9UIEZVTExZIFRFU1RFRC4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBQYXJzZSBsb2cgbWVzc2FnZSAKLSAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jID09IG51bGwpIHsKLSAgICAgIC8vbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfSBlbHNlIHsKLQotICAgICAgLy8gVHJhdmVyc2UgZG9jdW1lbnQgbG9va2luZyBmb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuCi0gICAgICAvLyBJU1NVRTogdGhpcyBpbm5lciBjbGFzcyBuZWVkcyAuLi4gcmV2aXNpdGluZy9yZXBsYWNpbmcKLSAgICAgIC8vIEVHLiBEbyB3ZSB3YW50IHRvIGxpc3QgYWxsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCAKLSAgICAgIC8vIG9yIGlzIHRoZSBmaXJzdCBzdWZmaWNpZW50PwotICAgICAgWE1MVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBYTUxUcmF2ZXJzYWwoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIlRhcmdldDogIiArIHBpLmdldFRhcmdldCgpICsgIiwgRGF0YTogIiArIHBpLmdldERhdGEoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFERDogSG93IHNob3VsZCB0aGlzIGV4Y2VwdGlvbiBiZSBoYW5kbGVkPwotICAgICAgICAgIH0KLQotICAgICAgICAgIHN1cGVyLnZpc2l0KHBpKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgdHJhdmVyc2FsLnZpc2l0KGRvYyk7Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQKLSAgICAgICAgJiYgZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjExLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MTMzYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQlAxMjExLgotICogCi0gKiBDb250ZXh0OiAKLSAqIEZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlLCB0aGF0IGlzIHJlZmVycmVkIGJ5IGEgYmluZGluZyBzdHlsZSBSUEMtbGl0ZXJhbAotICogCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFBhcnQgYWNjZXNzb3IgZWxlbWVudHMgaW4gdGhlIG1lc3NhZ2UgZG8gbm90IGhhdmUgYW4geHNpOm5pbCBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG9mICIxIiBvciAidHJ1ZSIuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgWE1MVGFncwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMjExKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgZG9jUmVxdWVzdCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBHZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkICAgICAgICAgICAgICAgIAotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLQotICAgICAgLy9DcmVhdGUgdGhlIHR5cGVzIHJlZ2lzdHJ5Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotCi0gICAgICAvLyBGaW5kIGFuIG9wZXJhdGlvbiBtYXRjaCAgICAgICAgCi0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgbWF0Y2gKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIG5vdCBycGMtbGl0ZXJhbCwgdGhlbiByZXR1cm4gbm90QXBwbGljYWJsZSByZXN1bHQKLSAgICAgIGlmICghV1NETFV0aWxzCi0gICAgICAgIC5pc1JwY0xpdGVyYWwobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBhY2Nlc3NvcnMKLSAgICAgIEVsZW1lbnQgYWNjZXNzb3IgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBPcGVyYXRpb24pOwotICAgICAgd2hpbGUgKGFjY2Vzc29yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShhY2Nlc3NvciwgQVRUUl9YU0lfTklMKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgeHNpOm5pbCBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZSBpcyAiMSIgb3IgInRydWUiCi0gICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChhdHRyICE9IG51bGwKLSAgICAgICAgICAmJiAoYXR0ci5nZXRWYWx1ZSgpLmVxdWFscygiMSIpIHx8IGF0dHIuZ2V0VmFsdWUoKS5lcXVhbHMoInRydWUiKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGFjY2Vzc29yIG5hbWUgaXMgIgotICAgICAgICAgICAgKyBhY2Nlc3Nvci5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGFjY2Vzc29yCi0gICAgICAgIGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoYWNjZXNzb3IpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMxZjc3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTIxMgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tZmF1bHQgZW52ZWxvcGUgY29udGFpbmluZyBhIHNvYXA6Ym9keSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBlbnZlbG9wZSBjb250YWlucyBleGFjdGx5IG9uZSBwYXJ0IGFjY2Vzc29yIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHdzZGw6cGFydCBlbGVtZW50cyBib3VuZCB0byB0aGUgZW52ZWxvcGUncyBjb3JyZXNwb25kaW5nIHNvYXBiaW5kOmJvZHkgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMjEyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIxMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICBFbGVtZW50IHNvYXBPcGVyYXRpb24gPSBudWxsOwotICAgICAgLy8gSWYgdGhlcmUgaXMgYSBGYXVsdCBlbnRyeSBvciBubyBib2R5IGVudHJpZXMsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAodmFsaWRhdG9yLmlzRmF1bHQoZG9jKQotICAgICAgICB8fCAoc29hcE9wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRTb2FwQm9keUNoaWxkKGRvYykpID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIENyZWF0aW5nIGEgcXVhbGlmaWVkIG5hbWUgb2YgcG90ZW50aWFsIFNPQVAgb3BlcmF0aW9uCi0gICAgICBRTmFtZSBvcGVyYXRpb25RTmFtZSA9IG5ldyBRTmFtZSgKLSAgICAgICAgc29hcE9wZXJhdGlvbi5nZXROYW1lc3BhY2VVUkkoKSwgc29hcE9wZXJhdGlvbi5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBSUEMgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcnBjQmluZGluZ09wZXJhdGlvbnMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYmluZGluZyBvcGVyYXRpb24gYnkgZ2l2ZW4gb3BlcmF0aW9uIG5hbWUKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgIG9wZXJhdGlvblFOYW1lLAotICAgICAgICBycGNCaW5kaW5nT3BlcmF0aW9ucyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoZWQgb3BlcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBGaW5kaW5nIG9wZXJhdGlvbiBtZXNzYWdlIHBhcnRzIGFuZCBleHRlbnNpYmlsaXR5IGVsZW1zCi0gICAgICAvLyBpbiB0aGUgYmluZGluZyBkZXBlbmRpbmcgb24gbWVzc2FnZSB0eXBlCi0gICAgICBMaXN0IG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IG51bGw7Ci0gICAgICBMaXN0IGV4dEVsZW1zID0gbnVsbDsKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgICAuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG51bGwpOwotICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSAhPSBudWxsKQotICAgICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgICAuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgICAgZXh0RWxlbXMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldHRpbmcgYWxsIHRoZSBhY2Nlc3NvcnMgb2YgdGhlIG9wZXJhdGlvbiBlbGVtZW50Ci0gICAgICBMaXN0IGFjY2Vzc29ycyA9IFhNTFV0aWxzLmdldENoaWxkRWxlbWVudHMoc29hcE9wZXJhdGlvbik7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBvcmRlcmVkIGxpc3Qgb2Ygd3NkbDpwYXJ0IG5hbWVzCi0gICAgICBMaXN0IG9yZGVyZWRQYXJ0TmFtZXMgPQotICAgICAgICB2YWxpZGF0b3Iub3JkZXJQYXJ0TmFtZXMob3BlcmF0aW9uTWVzc2FnZVBhcnRzLCBleHRFbGVtcyk7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgd3NkbDpwYXJ0IG5hbWVzCi0gICAgICBJdGVyYXRvciBpID0gb3JkZXJlZFBhcnROYW1lcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm90IGV4YWN0bHkgb25lIGFjY2Vzc29yIGZvciB0aGUgcGFydCBzcGVjaWZpZWQsCi0gICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChnZXRQYXJ0c0NvdW50KGFjY2Vzc29ycywgcGFydE5hbWUpICE9IDEpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhlIG5hbWUgb2Ygd3NkbDpwYXJ0IGlzICIgKyBwYXJ0TmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb3VudHMgdGhlIGFtb3VudCBvZiBhY2Nlc3NvcnMgb2YgYSBzcGVjaWZpYyBuYW1lCi0gICAqIEBwYXJhbSBhY2Nlc3NvcnMgYSBsaXN0IG9mIGFjY2Vzc29ycwotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiBhY2Nlc3NvciBlbGVtZW50cyB0byBiZSBjb3VudGVkCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgaW50IGdldFBhcnRzQ291bnQoTGlzdCBhY2Nlc3NvcnMsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWNjZXNzb3JzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgYWNjZXNzb3IgPSAoRWxlbWVudCkgYWNjZXNzb3JzLmdldChpKTsKLSAgICAgIGlmIChhY2Nlc3Nvci5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobmFtZSkpCi0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWQ4NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTIxMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tZmF1bHQgZW52ZWxvcGUgY29udGFpbmluZyBhIHNvYXA6Qm9keSBlbGVtZW50LCBhbmQgaXMgcmVmZXJyZWQgYnkgYSBkb2MtbGl0ZXJhbCBiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBlbnZlbG9wZSBoYXMgbm8gZWxlbWVudCBjb250ZW50IGluIHRoZSBzb2FwOkJvZHkgZWxlbWVudCBpZiB0aGUgdmFsdWUgb2YgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZG9jLWxpdGVyYWwgZGVzY3JpcHRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIxMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMTMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBtZXNzYWdlRWxlbWVudCA9IG51bGw7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkIG9yIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkKLSAgICAgIC8vIG9yIHRoZXJlIGlzIG5vIGJvZHkgZW50cmllcywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsCi0gICAgICAgIHx8IHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKG1lc3NhZ2VFbGVtZW50ID0gdmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQoZG9jKSkgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0dGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIG1lc3NhZ2UgZWxlbWVudAotICAgICAgUU5hbWUgbWVzc2FnZVBhcnRFbGVtZW50UU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIG1lc3NhZ2VFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLCBtZXNzYWdlRWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBkb2N1bWVudCBiaW5kaW5nIG9wZXJhdGlvbnMgZnJvbSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBkb2NCaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRNYXRjaGluZ0JpbmRpbmdPcHMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpKTsKLQotICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSBnaXZlbiBlbGVtZW50IG5hbWUKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBwb3RlbnRpYWxEb2NMaXRPcHMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vdCBleGFjdGx5IG9uZSBvcGVyYXRpb24gbWF0Y2hlZCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChwb3RlbnRpYWxEb2NMaXRPcHMubGVuZ3RoICE9IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEZpbmRpbmcgb3BlcmF0aW9uIGV4dGVuc2liaWxpdHkgZWxlbXMKLSAgICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICAgIExpc3QgZXh0RWxlbXMgPSBudWxsOwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKQotICAgICAgICAmJiBwb3RlbnRpYWxEb2NMaXRPcHNbMF0uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBwb3RlbnRpYWxEb2NMaXRPcHNbMF0KLSAgICAgICAgICAuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAgICYmIHBvdGVudGlhbERvY0xpdE9wc1swXS5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBwb3RlbnRpYWxEb2NMaXRPcHNbMF0KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgZnJvbSBzb2FwYmluZDpib2R5Ci0gICAgICBMaXN0IHBhcnRzID0gbnVsbDsKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gdmFsaWRhdG9yLmdldFNPQVBCb2R5KGV4dEVsZW1zKTsKLSAgICAgIGlmIChzb2FwQm9keSAhPSBudWxsKQotICAgICAgICBwYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0KLSAgICAgIC8vIGlmIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgaXMgYW4gZW1wdHkgc3RyaW5nIGFuZCB0aGVyZSBpcwotICAgICAgLy8gYXQgbGVhc3Qgb25lIGFjY2Vzc29yLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgaWYgKHBhcnRzICE9IG51bGwgJiYgcGFydHMuaXNFbXB0eSgpCi0gICAgICAgICYmICFYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKG1lc3NhZ2VFbGVtZW50KS5pc0VtcHR5KCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJ3c2RsOm9wZXJhdGlvbiBuYW1lIGlzICIKLSAgICAgICAgICArIHBvdGVudGlhbERvY0xpdE9wc1swXS5nZXROYW1lKCkpOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGExMzQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBCUDEyMTQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbm9uLWZhdWx0IGVudmVsb3BlIGNvbnRhaW5pbmcgYSBzb2FwOkJvZHkgZWxlbWVudCwgYW5kIGlzIHJlZmVycmVkIGJ5IGEgcnBjLWxpdGVyYWwgYmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgZW52ZWxvcGUgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBhY2Nlc3NvciBlbGVtZW50cyBpZiB0aGUgdmFsdWUgb2YgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcnBjLWxpdGVyYWwgZGVzY3JpcHRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIxNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMTQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDcmVhdGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIHBvdGVudGlhbCBTT0FQIG9wZXJhdGlvbgotICAgICAgUU5hbWUgb3BlcmF0aW9uUU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIHNvYXBPcGVyYXRpb24uZ2V0TmFtZXNwYWNlVVJJKCksIHNvYXBPcGVyYXRpb24uZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgUlBDIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgb3BlcmF0aW9uIGJ5IGdpdmVuIG9wZXJhdGlvbiBuYW1lCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICBvcGVyYXRpb25RTmFtZSwKLSAgICAgICAgcnBjQmluZGluZ09wZXJhdGlvbnMpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPQotICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbm90IGxpdGVyYWwsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtcykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnRzIGF0dHJpYnV0ZSBmcm9tIHNvYXBiaW5kOmJvZHkKLSAgICAgIExpc3QgcGFydHMgPSBudWxsOwotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSB2YWxpZGF0b3IuZ2V0U09BUEJvZHkoZXh0RWxlbXMpOwotICAgICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICAgIHBhcnRzID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLQotICAgICAgLy8gaWYgdGhlIHBhcnRzIGF0dHJpYnV0ZSBpcyBhbiBlbXB0eSBzdHJpbmcgYW5kIHRoZXJlIGlzCi0gICAgICAvLyBhdCBsZWFzdCBvbmUgYWNjZXNzb3IsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAocGFydHMgIT0gbnVsbCAmJiBwYXJ0cy5pc0VtcHR5KCkKLSAgICAgICAgJiYgIVhNTFV0aWxzLmdldENoaWxkRWxlbWVudHMoc29hcE9wZXJhdGlvbikuaXNFbXB0eSgpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigid3NkbDpvcGVyYXRpb24gbmFtZSBpcyAiCi0gICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYTIwYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTMwMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTMwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vR2V0IHRoZSByZXF1ZXRzIG1lc3NhZ2UgYW5kIGNoZWNrIHRoZSB2YWx1ZSBvZiBtdXN0VW5kZXJzdGFuZC4KLSAgICBTdHJpbmcgbWVzc2FnZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCk7Ci0gICAgT2JqZWN0W10gbXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzID0gZ2V0TXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzKG1lc3NhZ2UpOwotCi0gICAgaWYgKG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKChtdXN0VW5kZXJzdGFuZEF0dHJpYnV0ZXNbaW5kZXhdICE9IG51bGwpCi0gICAgICAgICAgJiYgKG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0uZXF1YWxzKCIxIikKLSAgICAgICAgICAgIHx8IG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0uZXF1YWxzKCIwIikpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiVGhlIFNPQVAgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIHdhcyBwcmVzZW50ICIKLSAgICAgICAgICAgICAgICArICIgYW5kIGl0cyB2YWx1ZSB3YXMgICIKLSAgICAgICAgICAgICAgICArIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0sCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0gLy9FbmQgaWYKLSAgICAgIH0gLy9FbmQgZm9yCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLy9SZXRyZWl2ZXMgdGhlIHZhbHVlIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUgZnJvbSBBTEwgU09BUCBoZWFkZXIKLSAgLy9JZiB0aGUgSGVhZGVyIGlzIG1pc3Npbmcgb3IgaWYgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgdGFyZ2V0cyBvciBpZgotICAvL3RoZSBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBhIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSB0aGVuIHNldCB0aGUKLSAgLy9hc3NlcnRpb25SZXN1bHQgdG8gUkVTVUxUX05PVF9BUFBMSUNBQkxFLgotICBwcml2YXRlIE9iamVjdFtdIGdldE11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyhTdHJpbmcgbWVzc2FnZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAobWVzc2FnZSA9PSBudWxsIHx8IG1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKG1lc3NhZ2UpOwotICAgIE5vZGVMaXN0IGhlYWRlcnMgPQotICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0KLSAgICAvL0lmIGEgaGVhZGVyIG5vdCBwcmVzZW50IHNldCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotICAgIC8vZWxzZSBwcm9jZXNzIGVhY2ggaGVhZGVyRW50cnkKLSAgICBpZiAoaGVhZGVycy5nZXRMZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgVmVjdG9yIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEVsZW1lbnQgaGVhZGVyID0gKEVsZW1lbnQpIGhlYWRlcnMuaXRlbSgwKTsKLSAgICAgIGlmIChoZWFkZXIgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgIE5vZGVMaXN0IGhlYWRlckVudHJpZXMgPSBoZWFkZXIuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgLy9Gb3IgZWFjaCBoZWFkZXIgZW50cnkgY2hlY2sgcmV0cmVpdmUgdGhlIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSAKLSAgICAgIC8vaWYgYW55LCBlbHNlIHNldCB0aGUgdGVzdCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotCi0gICAgICAvL1RoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSBpZiBhIGhlYWRlciBjb250YWluZWQgYW55IGNoaWxkIEVsZW1lbnRzCi0gICAgICBib29sZWFuIGhlYWRlclRhcmdldHMgPSBmYWxzZTsKLQotICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlckVudHJpZXMuZ2V0TGVuZ3RoKCk7ICsraW5kZXgpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgaGVhZGVyRW50cnkgPSBoZWFkZXJFbnRyaWVzLml0ZW0oaW5kZXgpOwotICAgICAgICBpZiAoaGVhZGVyRW50cnkuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgewotICAgICAgICAgIGhlYWRlclRhcmdldHMgPSB0cnVlOwotICAgICAgICAgIEF0dHIgbXVzdFVuZGVyc3RhbmQgPQotICAgICAgICAgICAgKChFbGVtZW50KSBoZWFkZXJFbnRyeSkuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICAgICJtdXN0VW5kZXJzdGFuZCIpOwotICAgICAgICAgIC8vUmV0cmVpdmUgdGhlIHZhbHVlIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUgb2YgdGhlIHJlcXVlc3QuCi0gICAgICAgICAgaWYgKG11c3RVbmRlcnN0YW5kICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG11c3RVbmRlcnN0YW5kVmFsdWUgPSBtdXN0VW5kZXJzdGFuZC5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICAgIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcy5hZGQobXVzdFVuZGVyc3RhbmRWYWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgLy9UaGUgU09BUCBIZWFkZXIgZG9lcyBub3QgY29udGFpbiBhIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZS4iCi0gICAgICAgICAgfSAvLwltdXN0VW5kZXJzdGFuZCAhPSBudWxsCi0gICAgICAgIH0KLSAgICAgIH0gLy9FbmQgZm9yCi0KLSAgICAgIGlmICghaGVhZGVyVGFyZ2V0cykKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgLy9UaGUgU09BUCBIZWFkZXIgZG9lcyBub3QgY29udGFpbiBhbnkgaGVhZGVyIGVudHJpZXMuCi0gICAgICB9Ci0KLSAgICAgIHJldHVybiBtdXN0VW5kZXJzdGFuZEF0dHJpYnV0ZXMudG9BcnJheSgpOwotICAgIH0gLy9FbmQgSWYgaGVhZGVycy5nZXRMZW5ndGgoKSA8IDAJCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgb2JqZWN0IGlzIG11c3QgdW5kZXJzdGFuZCBmYXVsdCBjb2RlLgotICAgKiBAcGFyYW0gZmF1bHRDb2RlRWxlbSB1bmRlcnN0YW5kIGZhdWx0IGNvZGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCBpcyBtdXN0IHVuZGVyc3RhbmQgZmF1bHQgY29kZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTXVzdFVuZGVyc3RhbmRGYXVsdENvZGUoRWxlbWVudCBmYXVsdENvZGVFbGVtKQotICB7Ci0gICAgLy9BIGZhdWx0Y29kZSBtYXkgb3IgbWF5bm90IGhhdmUgYSBwcmVmaXgsIGlmIGl0IGRvZXMgaXRzIG5hbWVzcGFjZSBzaG91bGQgYmUgCi0gICAgLy9odHQ6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGZhdWx0Y29kZSBlbGVtZW50LgotICAgIC8vSWYgYSBwcmVmaXggaXMgcHJlc2VudCBhbmQgaXQgY29ycmVzcG9uZHMgdG8gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIG9yIGlzIG51bGwgCi0gICAgLy90aGVuIHRoaXMgcmV0dXJucyBmYWxzZS4gIFRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBmYXVsdGNvZGUgaXMgdGhlbiBjaGVjayB0byBzZWUKLSAgICAvL2lmIGl0IGlzIG9uZSBvZiB0aGUgcGVybWl0dGVkIHZhbHVlcy4KLSAgICBpZiAoZmF1bHRDb2RlRWxlbSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGZhdWx0Q29kZSA9IGZhdWx0Q29kZUVsZW0uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLSAgICBpZiAoZmF1bHRDb2RlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgZmF1bHRDb2RlRWxlbVByZWZpeCA9IGZhdWx0Q29kZUVsZW0uZ2V0UHJlZml4KCk7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZVByZWZpeCA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoMCwgZmF1bHRDb2RlLmluZGV4T2YoJzonKSk7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZU5hbWUgPQotICAgICAgZmF1bHRDb2RlLnN1YnN0cmluZyhmYXVsdENvZGUuaW5kZXhPZignOicpICsgMSwgZmF1bHRDb2RlLmxlbmd0aCgpKTsKLQotICAgIGlmICgoZmF1bHRDb2RlRWxlbVByZWZpeCAhPSBudWxsIHx8IGZhdWx0Q29kZVByZWZpeCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBpZiAoZmF1bHRDb2RlUHJlZml4LmVxdWFscyhmYXVsdENvZGVFbGVtUHJlZml4KQotICAgICAgICAmJiAoZmF1bHRDb2RlTmFtZS5lcXVhbHMoIk11c3RVbmRlcnN0YW5kIikKLSAgICAgICAgICB8fCBmYXVsdENvZGVOYW1lLnN0YXJ0c1dpdGgoIk11c3RVbmRlcnN0YW5kLiIpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChmYXVsdENvZGUuZXF1YWxzKCJNdXN0VW5kZXJzdGFuZCIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYWNkNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gICAqIEJQMTMwMi4KLSAgICogVGhlIHNvYXA6ZmF1bHRjb2RlIHZhbHVlIGluIHRoZSBzb2FwOkZhdWx0IGVsZW1lbnQgb2YgdGhlIHJlc3BvbnNlIAotICAgKiBtZXNzYWdlIGlzIG5vdCBjdXN0b20sIGFuZCBpcyBvbmUgb2Y6IFZlcnNpb25NaXNtYXRjaCwgTXVzdFVuZGVyc3RhbmQsIENsaWVudCwgU2VydmVyLgotICAgKi8KLXB1YmxpYyBjbGFzcyBCUDEzMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8vU09BUCBmYXVsdCBjb2RlIHZhbHVlcyBzaG91bGQgbm90IGJlIGN1c3RvbTogb25seSBzdGFuZGFyZCBjb2RlIHF1YWxpZmllcnMgCi0gIC8vYXJlIHVzZWQ6IFZlcnNpb25NaXNtYXRjaCwgTXVzdFVuZGVyc3RhbmQsIENsaWVudCwgU2VydmVyCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvL1N0cmluZyByZXF1ZXN0TWVzc2FnZSA9IG51bGw7Ci0gICAgU3RyaW5nIHJlc3BvbnNlTWVzc2FnZSA9IG51bGw7Ci0KLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL0dldCB0aGUgcmVzcG9uc2UgbWVzc2FnZSBjaGVjayB0aGUgZmF1bHRjb2RlLgotICAgICAgTWVzc2FnZUVudHJ5IGxvZ0VudHJ5UmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKTsKLSAgICAgIGlmIChsb2dFbnRyeVJlc3BvbnNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3BvbnNlTWVzc2FnZSA9IGxvZ0VudHJ5UmVzcG9uc2UuZ2V0TWVzc2FnZSgpOwotCi0gICAgICAgIERvY3VtZW50IHRhcmdldERvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlc3BvbnNlTWVzc2FnZSk7Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0Q29kZXMgPSB0YXJnZXREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZhdWx0Y29kZSIpOwotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiZmF1bHRjb2RlIik7Ci0KLSAgICAgICAgaWYgKGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAvL05vIGZhdWx0Y29kZQkKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgZmF1bHRDb2RlRWxlbSA9IGZhdWx0Q29kZXMuaXRlbShpKTsKLSAgICAgICAgICAvL0lmIHRoZSBmYXVsdGNvZGUgd2FzIE11c3RVbmRlcnN0YW5kLCBjaGVjayB0aGUgdmFsdWUgb2YgCi0gICAgICAgICAgLy90aGUgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIGluIHRoZSByZXF1ZXN0LgotICAgICAgICAgIGlmIChmYXVsdENvZGVFbGVtID09IG51bGwpCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIGVsc2UgaWYgKGZhdWx0Q29kZUVsZW0uZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZEZhdWx0Q29kZSgoRWxlbWVudCkgZmF1bHRDb2RlRWxlbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwocmVzcG9uc2VNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICAvL2ZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAvLyAgICAiVGhlIGZhdWx0Y29kZSB2YWx1ZSB3YXMgOiAiCi0gICAgICAgICAgICAgIC8vICAgICAgICArIGZhdWx0Q29kZUVsZW0uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLSAgICAgICAgICAgIH0gLy9FbmQgaWYgKGZhdWx0Q29kZS5lcXVhbHMuLi4pCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIH0KLSAgICAgICAgfSAvL0VuZCBmb3IJCi0gICAgICB9IC8vRW5kIGlmIGxvZ0VudHJ5UmVzcG9uc2UhPSBudWxsCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGZhdWx0Q29kZS4KLSAgICogQHBhcmFtIGZhdWx0Q29kZUVsZW0gYSBmYXVsdGNvZGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBmYXVsdGNvZGUgaXMgdmFsaWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkRmF1bHRDb2RlKEVsZW1lbnQgZmF1bHRDb2RlRWxlbSkKLSAgewotICAgIC8vQSBmYXVsdGNvZGUgbWF5IG9yIG1heW5vdCBoYXZlIGEgcHJlZml4LCBpZiBpdCBkb2VzIGl0cyBuYW1lc3BhY2Ugc2hvdWxkIGJlIAotICAgIC8vaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZSB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgZmF1bHRjb2RlIGVsZW1lbnQuCi0gICAgLy9JZiBhIHByZWZpeCBpcyBwcmVzZW50IGFuZCBpdCBjb3JyZXNwb25kcyB0byBhIGRpZmZlcmVudCBuYW1lc3BhY2Ugb3IgaXMgbnVsbCAKLSAgICAvL3RoZW4gdGhpcyByZXR1cm5zIGZhbHNlLiAgVGhlIGxvY2FsIHBhcnQgb2YgdGhlIGZhdWx0Y29kZSBpcyB0aGVuIGNoZWNrIHRvIHNlZQotICAgIC8vaWYgaXQgaXMgb25lIG9mIHRoZSBwZXJtaXR0ZWQgdmFsdWVzLgotICAgIGlmIChmYXVsdENvZGVFbGVtID09IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBmYXVsdENvZGUgPSBmYXVsdENvZGVFbGVtLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKS50cmltKCk7Ci0gICAgaWYgKGZhdWx0Q29kZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYOiBUaGlzIGlzIG5vdCBjb3JyZWN0LCBzaW5jZSB0aGlzIGVsZW1lbnQgY2FuIG5vdCBiZSBuYW1lc3BhY2UgcXVhbGlmaWVkCi0gICAgU3RyaW5nIGZhdWx0Q29kZUVsZW1QcmVmaXggPSBmYXVsdENvZGVFbGVtLmdldFBhcmVudE5vZGUoKS5nZXRQcmVmaXgoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgbm90IGEgUU5hbWUgdGhlbiByZXR1cm4gZmFsc2UKLSAgICBpbnQgaW5kZXg7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZVByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZU5hbWUgPSBmYXVsdENvZGU7Ci0gICAgaWYgKChpbmRleCA9IGZhdWx0Q29kZS5pbmRleE9mKCc6JykpICE9IC0xKQotICAgIHsKLSAgICAgIGZhdWx0Q29kZVByZWZpeCA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgZmF1bHRDb2RlTmFtZSA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBmYXVsdENvZGUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlmICgoZmF1bHRDb2RlRWxlbVByZWZpeCAhPSBudWxsICYmIGZhdWx0Q29kZVByZWZpeCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBpZiAoZmF1bHRDb2RlUHJlZml4LmVxdWFscyhmYXVsdENvZGVFbGVtUHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgaWYgKChmYXVsdENvZGVOYW1lLmVxdWFscygiTXVzdFVuZGVyc3RhbmQiKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJWZXJzaW9uTWlzbWF0Y2giKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJDbGllbnQiKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJTZXJ2ZXIiKSkpCi0gICAgICAgICAgLyogUkVNT1ZFOgotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikKLSAgICAgICAgICB8fCBmYXVsdENvZGVOYW1lLnN0YXJ0c1dpdGgoIlZlcnNpb25NaXNtYXRjaC4iKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiQ2xpZW50LiIpCi0gICAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJTZXJ2ZXIuIikpKQotICAgICAgICAgICovCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJNdXN0VW5kZXJzdGFuZCIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJWZXJzaW9uTWlzbWF0Y2giKQotICAgICAgICB8fCBmYXVsdENvZGVOYW1lLmVxdWFscygiQ2xpZW50IikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5lcXVhbHMoIlNlcnZlciIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJWZXJzaW9uTWlzbWF0Y2guIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJDbGllbnQuIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJTZXJ2ZXIuIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOWIyYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAgICogQlAxMzA1LgotICAgKiBJdCBpcyBpbiBhbiBIVFRQIDUwMCBtZXNzYWdlIHdpdGggIlNlcnZlciIgRXJyb3IgY29kZS4KLSAgICovCi1wdWJsaWMgY2xhc3MgQlAxMzA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOmZhdWx0Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIHdlIGhhdmUgYSBzb2FwOkZhdWx0LiBDaGVjayB0aGF0IGl0IGlzIGNvbnRhaW5lZCBpbiBhIEhUVFAgNTAwIG1lc3NhZ2UKLSAgICAgICAgLy8gR1QgOiBiYXNlIEhUVFAgSGVhZGVyIHBhcnNpbmcgb24gQlAxMDAxIC0gdGhpcyBzaG91bGQgYmUgZmFjdG9yZWQgdG8gYSAKLSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIEhUVFAgbWVzc2FnZSBwYXJzaW5nIG1ldGhvZCBvciBtZXRob2RzIChyZXF1ZXN0ICYgcmVzcG9uc2UpCi0gICAgICAgIFN0cmluZyBodHRwSGVhZGVyID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICAgIC8vUmVzcG9uc2UtTGluZSAgID0gSFRUUC1WZXJzaW9uIFJlc3BvbnNlQ29kZSBSZXNwb25zZU1zZyBTUCBDUkxGCi0gICAgICAgIFZlY3RvciByZXNwb25zZUxpbmUgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotICAgICAgICAvL1N0cmluZyBodHRwVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgIC8vU3RyaW5nIHJlc3BvbnNlQ29kZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBzdGF0dXNDb2RlID0gbnVsbDsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgICAgICBpZiAoaHR0cE1lc3NhZ2VUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgICAgIHN0YXJ0TGluZSA9IGh0dHBNZXNzYWdlVG9rZW5pemVyLm5leHRUb2tlbigpOwotCi0gICAgICAgIGlmIChzdGFydExpbmUuc3RhcnRzV2l0aCgiSFRUUCIpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKHN0YXJ0TGluZSwgIlx1MDAyMCIpOwotCi0gICAgICAgICAgd2hpbGUgKHN0YXJ0TGluZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcG9uc2VMaW5lLmFkZChzdGFydExpbmVUb2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vaHR0cFZlcnNpb24gPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDApOwotCi0gICAgICAgICAgLy8gUEI6IENoZWNrIGZvciA1MDAgc3RhdHVzIGNvZGUgd2hpY2ggc2hvdWxkIGJlIHRoZSBzZWNvbmQgdG9rZW4gaW4gdGhlIHN0cmluZwotICAgICAgICAgIHN0YXR1c0NvZGUgPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDEpOwotCi0gICAgICAgICAgLy9yZXNwb25zZUNvZGUgPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDEpOwotICAgICAgICAgIC8vc3RhdHVzQ29kZSA9IChTdHJpbmcpIHJlc3BvbnNlTGluZS5nZXQoMik7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBQQjogSnVzdCBjaGVjayBmb3IgNTAwIHN0YXR1cyBjb2RlCi0gICAgICAgICAgaWYgKCFzdGF0dXNDb2RlCi0gICAgICAgICAgICAuZXF1YWxzKFN0cmluZy52YWx1ZU9mKEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfSU5URVJOQUxfRVJST1IpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2lmICghcmVzcG9uc2VDb2RlLmVxdWFsc0lnbm9yZUNhc2UoIk9LIikgfHwKLSAgICAgICAgICAgIC8vCSghc3RhdHVzQ29kZS5lcXVhbHNJZ25vcmVDYXNlKCJTZXJ2ZXJFcnJvciIpKSkgeyAgICAgCQkJCi0gICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihodHRwSGVhZGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZTQwZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gICAqIEJQMTMwNi4KLSAgICogVGhlIHNvYXA6RmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuIG90aGVyIHRoYW4gc29hcDpmYXVsdGNvZGUsIHNvYXA6ZmF1bHRzdHJpbmcsIHNvYXA6ZmF1bHRhY3RvciBvciBzb2FwOmRldGFpbC4KLSAgICovCi1wdWJsaWMgY2xhc3MgQlAxMzA2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAJICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOmZhdWx0Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgbm8gc29hcDpmYXVsdCBjb250YWlucyBvbmx5IGZhdWx0Y29kZSwgZmF1bHRzdHJpbmcsIGZhdWx0YWN0b3IsIGRldGFpbC4KLSAgICAgICAgLy8gSWYgaXQgZG9lcywgZnVydGhlciBjaGVjayB0aGF0IGl0IGlzIHVucXVhbGlmaWVkLgotICAgICAgICAvLyBGb3IgZWFjaCA8c29hcDpGYXVsdD4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGZhdWx0TGlzdC5nZXRMZW5ndGgoKTsgbisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoTm9kZSBjaGlsZCA9IGZhdWx0TGlzdC5pdGVtKG4pLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgY2hpbGQgIT0gbnVsbDsKLSAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICAgICAgJiYgIShjaGlsZAotICAgICAgICAgICAgICAgICAgLmdldExvY2FsTmFtZSgpCi0gICAgICAgICAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfQ09ERSkKLSAgICAgICAgICAgICAgICAgIHx8IGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoCi0gICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9GQVVMVF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfQUNUT1IpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBQQjogVGhpcyBpcyBjaGVja2VkIGluIDEzMTYgbm93Ci0gICAgICAgICAgICAgICAgLy98fCAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2ZGQ2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTMwNy4KLSAqIFRoZSBlbGVtZW50cyBvZiB0aGUgbWVzc2FnZSB0aGF0IGFyZSBuYW1lc3BhY2VkIAotICogImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiBkbyBub3QgaGF2ZSBhIHNvYXA6ZW5jb2RpbmdTdHlsZSBhdHRyaWJ1dGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEzMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDp4eHg+IGVsZW1lbnRzOgotICAgICAgTm9kZUxpc3Qgc29hcExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICIqIik7Ci0gICAgICBpZiAoKHNvYXBMaXN0ID09IG51bGwpIHx8IChzb2FwTGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbnkgc29hcCBlbnZlbG9wZSBlbGVtZW50cwotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjaGVjayB0aGF0IG5vIDxzb2FwOnh4eD4gZWxlbWVudHMgY29udGFpbnMgYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlCi0gICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOnh4eD4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IHNvYXBMaXN0LmdldExlbmd0aCgpOyBuKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBuZXh0RWxlbSA9IChFbGVtZW50KSBzb2FwTGlzdC5pdGVtKG4pOwotICAgICAgICAgICAgaWYgKG5leHRFbGVtCi0gICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGVOb2RlTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiZW5jb2RpbmdTdHlsZSIpCi0gICAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2MwYTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEzMDguCi0gKiBUaGUgY2hpbGRyZW4gZWxlbWVudHMgb2Ygc29hcDpCb2R5IGRvIG5vdCBoYXZlIGEgc29hcDplbmNvZGluZ1N0eWxlIGF0dHJpYnV0ZS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTMwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSBkb2N1bWVudAotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIGxvb2sgZm9yIHNvYXA6Qm9keSBlbGVtZW50czoKLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBFTEVNX1NPQVBfQk9EWS5nZXROYW1lc3BhY2VVUkkoKSwgRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAvLyBUaGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGFueSBzb2FwOkJvZHksIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICgoc29hcEJvZHlMaXN0ID09IG51bGwpIHx8IChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIGNoZWNrIHRoYXQgbm8gc29hcDpCb2R5IGNoaWxkIGVsZW1lbnRzIGNvbnRhaW4gYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBzb2FwOkJvZHkgY2hpbGQgZWxlbWVudAotICAgICAgRWxlbWVudCBjaGlsZCA9Ci0gICAgICAgIFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApKTsKLSAgICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoY2hpbGQuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgIEVMRU1fU09BUF9CT0RZLmdldE5hbWVzcGFjZVVSSSgpLCAiZW5jb2RpbmdTdHlsZSIpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNoaWxkIGVsZW1lbnQgbmFtZSBpcyBcIiIgKwotICAgICAgICAgICAgY2hpbGQuZ2V0Tm9kZU5hbWUoKSArICJcIi4iKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IHNvYXA6Qm9keSBjaGlsZCBlbGVtZW50Ci0gICAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwOS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNiNmE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQlAxMzA5LgotICogVGhlIHNvYXA6RW52ZWxvcGUgZG9lcyBub3QgaGF2ZSBkaXJlY3QgY2hpbGRyZW4gYWZ0ZXIgdGhlIHNvYXA6Qm9keSBlbGVtZW50IAotICovCi1wdWJsaWMgY2xhc3MgQlAxMzA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RW52ZWxvcGU+IGVsZW1lbnRzOgotICAgICAgLy8gKE5vdGU6IHNpbmNlIHRoaXMgaXMgYSBTb2FwIG1lc3NhZ2Ugd2UgZXhwZWN0IGV4YWN0bHkgb25lIHNvYXAgZW52ZWxvcGUsIGJ1dCB3ZSBkbyBub3QgYXNzdW1lIGl0KS4KLSAgICAgIE5vZGVMaXN0IHNvYXBFbnZMaXN0ID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSk7Ci0gICAgICBpZiAoKHNvYXBFbnZMaXN0ID09IG51bGwpIHx8IChzb2FwRW52TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbnkgc29hcCBFbnZlbG9wZSBlbGVtZW50KHMpCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgaWYgYSA8c29hcDpCb2R5PiBleGlzdHMgaW4gYSA8c29hcDpFbnZlbG9wZT4sIHRoYXQgaXRzIHRoZSBsYXN0IGluIHRoZSBlbnZlbG9wZSAgICAgICAgCQkgICAgICAJCQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOkVudmVsb3BlPgotICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgc29hcEVudkxpc3QuZ2V0TGVuZ3RoKCk7IG4rKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIGluIHRoZSBFbnZlbG9wZSAgICAgICAJCQkJCi0gICAgICAgICAgICBFbGVtZW50IHNvYXBFbnYgPSAoRWxlbWVudCkgc29hcEVudkxpc3QuaXRlbShuKTsKLSAgICAgICAgICAgIE5vZGVMaXN0IGVudkNoaWxkTGlzdCA9IHNvYXBFbnYuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgVmVjdG9yIGVudkNoaWxkRWxlbUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IGVudkNoaWxkTGlzdC5nZXRMZW5ndGgoKTsgdisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOb2RlIG5leHROb2RlID0gZW52Q2hpbGRMaXN0Lml0ZW0odik7Ci0gICAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW52Q2hpbGRFbGVtTGlzdC5hZGRFbGVtZW50KChFbGVtZW50KSBuZXh0Tm9kZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgbGlzdCBmb3IgPHNvYXA6Qm9keT4KLSAgICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgZW52Q2hpbGRFbGVtTGlzdC5zaXplKCk7IG0rKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBlbnZDaGlsZEVsZW0gPSAoRWxlbWVudCkgZW52Q2hpbGRFbGVtTGlzdC5lbGVtZW50QXQobSk7Ci0gICAgICAgICAgICAgIGlmIChlbnZDaGlsZEVsZW0KLSAgICAgICAgICAgICAgICAuZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkKLSAgICAgICAgICAgICAgICAmJiBlbnZDaGlsZEVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgPHNvYXA6Qm9keT4gc28gY2hlY2sgaXRzIHRoZSBsYXN0IGluIHRoZSBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBFbnZlbG9wZQotICAgICAgICAgICAgICAgIGlmIChlbnZDaGlsZEVsZW0gIT0gZW52Q2hpbGRFbGVtTGlzdC5sYXN0RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDE4MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEzMTYuCi0gKiBUaGUgc29hcDpGYXVsdCBlbGVtZW50IGNoaWxkcmVuIChzb2FwOmZhdWx0Y29kZSwgc29hcDpmYXVsdHN0cmluZywgc29hcDpmYXVsdGFjdG9yIG9yIHNvYXA6ZGV0YWlsKSBhcmUgdW5xdWFsaWZpZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEzMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMTYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDpGYXVsdD4gZWxlbWVudDoKLSAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotICAgICAgaWYgKChmYXVsdExpc3QgPT0gbnVsbCkgfHwgKGZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6ZmF1bHQKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gY2hlY2sgdGhhdCBubyBzb2FwOmZhdWx0IGNvbnRhaW5zIG9ubHkgZmF1bHRjb2RlLCBmYXVsdHN0cmluZywgZmF1bHRhY3RvciwgZGV0YWlsLgotICAgICAgICAvLyBJZiBpdCBkb2VzLCBmdXJ0aGVyIGNoZWNrIHRoYXQgaXQgaXMgdW5xdWFsaWZpZWQuCi0gICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOkZhdWx0PgotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgZmF1bHRMaXN0LmdldExlbmd0aCgpOyBuKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgZm9yIChOb2RlIGNoaWxkID0gZmF1bHRMaXN0Lml0ZW0obikuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICBjaGlsZCAhPSBudWxsOwotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoY2hpbGQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAmJiAoY2hpbGQKLSAgICAgICAgICAgICAgICAgIC5nZXRMb2NhbE5hbWUoKQotICAgICAgICAgICAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0NPREUpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfU1RSSU5HKQotICAgICAgICAgICAgICAgICAgfHwgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKLSAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0FDVE9SKQotICAgICAgICAgICAgICAgICAgfHwgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKLSAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0RFVEFJTCkpCi0gICAgICAgICAgICAgICAgJiYgKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpICE9IG51bGwpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzE4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODA4MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLQkgKiBCUDEzMTgKLQkgKiAKLQkgKiBUaGUgZ3JhbmRjaGlsZHJlbiBlbGVtZW50cyBvZiBzb2FwOkJvZHkgZG8gbm90IGhhdmUgYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlLgotCSAqLwotcHVibGljIGNsYXNzIEJQMTMxOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMxOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBQYXJzZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCByZXNwb25zZURvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgcmVxdWVzdERvYyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgLy8gbWVzc2FnZXMgYXJlIGVtcHR5IG9yIGludmFsaWQsIERPTSBvYmplY3RzIGFyZSBudWxsCi0gICAgICBpZiAocmVzcG9uc2VEb2MgPT0gbnVsbCB8fCByZXF1ZXN0RG9jID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy9pZiAoaXNGYXVsdChyZXNwb25zZURvYykpCi0gICAgICAvLyAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0IFNPQVBBY3Rpb24KLSAgICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotICAgICAgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgICAgICBhY3Rpb24gPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhoZWFkZXJzLCAiOiIpLmdldCgiU09BUEFjdGlvbiIudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZCAgICAgICAgICAgICAgICAKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0KLSAgICAgIC8vQ3JlYXRlIHRoZSB0eXBlcyByZWdpc3RyeQotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgICAgLy8gRmluZCBhbiBvcGVyYXRpb24gbWF0Y2ggICAgICAgIAotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIHJlcXVlc3REb2MsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyBvcGVyYXRpb24gYmFzZWQgb24gdGhlIG1hdGNoCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBtYXRjaC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLy8gSWYgdGhpcyBpcyBub3QgcnBjLWxpdGVyYWwsIHRoZW4gcmV0dXJuIG5vdEFwcGxpY2FibGUgcmVzdWx0Ci0gICAgICBpZiAoIVdTRExVdGlscwotICAgICAgICAuaXNScGNMaXRlcmFsKG1hdGNoLmdldE9wZXJhdGlvblN0eWxlKCksIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6Qm9keT4gZWxlbWVudHM6Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUxpc3QgPQotICAgICAgICByZXNwb25zZURvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICBpZiAoKHNvYXBCb2R5TGlzdCA9PSBudWxsKSB8fCAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICAvLyBSZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGFueSBzb2FwIEJvZHkgZWxlbWVudHMKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gY2hlY2sgdGhhdCBubyA8c29hcDpCb2R5PiBjaGlsZCBvciBncmFuZGNoaWxkIGVsZW1lbnRzIGNvbnRhaW5zIGEgc29hcDplbmNvZGluZ1N0eWxlIGF0dHJpYnV0ZQotICAgICAgLy8gRm9yIGVhY2ggPHNvYXA6Qm9keT4KLSAgICAgIGJvb2xlYW4gZ3JhbmRDaGlsZEZvdW5kID0gZmFsc2U7Ci0gICAgICBmb3IgKGludCBuID0gMDsgbiA8IHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKTsgbisrKQotICAgICAgewotICAgICAgICBFbGVtZW50IG5leHRCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbShuKTsKLSAgICAgICAgLy8gUkVNT1ZFOiBUaGlzIHdpbGwgZ2V0IGFsbCBub2RlcyAoY2hpbGQsIGdyYW5kY2hpbGRyZW4sIGV0Yy4pCi0gICAgICAgIC8vTm9kZUxpc3QgY2hpbGRMaXN0ID0gbmV4dEJvZHlFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0gICAgICAgIE5vZGVMaXN0IGNoaWxkTGlzdCA9IG5leHRCb2R5RWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGlmIChjaGlsZExpc3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGNoZWNrIGFsbCBjaGlsZCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgY2hpbGRMaXN0LmdldExlbmd0aCgpOyBtKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5pdGVtKG0pLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnQgbmV4dENoaWxkRWxlbSA9IChFbGVtZW50KSBjaGlsZExpc3QuaXRlbShtKTsKLSAgICAgICAgICAgICAgLy8gY2hlY2sgY2hpbGRyZW4gb2YgdGhpcyBjaGlsZAotICAgICAgICAgICAgICAvLyBSRU1PVkU6IFRoaXMgd2lsbCBnZXQgYWxsIG5vZGVzIChjaGlsZCwgZ3JhbmRjaGlsZHJlbiwgZXRjLikKLSAgICAgICAgICAgICAgTm9kZUxpc3QgZ3JhbmRDaGlsZExpc3QgPSBuZXh0Q2hpbGRFbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGRMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBwID0gMDsgcCA8IGdyYW5kQ2hpbGRMaXN0LmdldExlbmd0aCgpOyBwKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGRMaXN0Lml0ZW0ocCkuZ2V0Tm9kZVR5cGUoKQotICAgICAgICAgICAgICAgICAgICA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIAlncmFuZENoaWxkRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBFbGVtZW50IG5leHRHcmFuZENoaWxkRWxlbSA9Ci0gICAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQpIGdyYW5kQ2hpbGRMaXN0Lml0ZW0ocCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0R3JhbmRDaGlsZEVsZW0KLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgICAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nU3R5bGUiKQotICAgICAgICAgICAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkIChBREQgaGlnaGxpZ2h0IHRoZSBjaGlsZCBoZXJlID8pCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFncmFuZENoaWxkRm91bmQpCi0gICAgICB7Ci0gICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNjAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE0YzFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNjAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLQotLyoqCi0gKiBCUDE2MDAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudmVsb3BlIGNvbmZvcm1zIHRvIHRoZSBzdHJ1Y3R1cmUgc3BlY2lmaWVkIGluIFNPQVAgMS4xIFNlY3Rpb24gNC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxNjAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxNjAwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgIAlpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgCQl0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgICBlbHNlIAotICAgICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsb2cgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLiIpOwotICAgICAgfQotICAgICAgLy8gU09BUCAxLjEgc3BlY2lmaWNhdGlvbnMsIFNlY3Rpb24gNC4KLSAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvTk9URS1TT0FQLTIwMDAwNTA4LyNfVG9jNDc4MzgzNDk0Ci0KLSAgICAgIC8vIFRoZSBuYW1lc3BhY2UgaWRlbnRpZmllciBmb3IgdGhlIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGRlZmluZWQKLSAgICAgIC8vIGluIHRoaXMgc2VjdGlvbiBpcyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iLgotCi0gICAgICAvLyAgbyBUaGUgRW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQgcmVwcmVzZW50aW5nIHRoZSBtZXNzYWdlLgotCi0gICAgICAvLyBSdWxlIDEuIEVudmVsb3BlCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBuYW1lIGlzICJFbnZlbG9wZSIuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNVVNUIGJlIHByZXNlbnQgaW4gYSBTT0FQIG1lc3NhZ2UKLSAgICAgIC8vICBvIFRoZSBlbGVtZW50IE1BWSBjb250YWluIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuCi0gICAgICAvLyAgICBJZiBwcmVzZW50LCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBNVVNUIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQuIFNpbWlsYXJseSwKLSAgICAgIC8vICAgIHRoZSBlbGVtZW50IE1BWSBjb250YWluIGFkZGl0aW9uYWwgc3ViIGVsZW1lbnRzLiBJZiBwcmVzZW50IHRoZXNlIGVsZW1lbnRzCi0gICAgICAvLyAgICBNVVNUIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQgYW5kIE1VU1QgZm9sbG93IHRoZSBTT0FQIEJvZHkgZWxlbWVudC4KLQotICAgICAgLy8gR2V0dGluZyB0aGUgdG9wIGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgdG9wIGVsZW1lbnQgc2hvdWxkIGJlIHNvYXA6RW52ZWxvcGUKLSAgICAgIC8vIElmIG5vdCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIGlmICghZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKQotICAgICAgICB8fCAhaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHRvcCBlbGVtZW50IGlzIG5vdCBzb2FwOkVudmVsb3BlIik7Ci0KLSAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zCi0gICAgICBDb2xsZWN0aW9uIGVudmVsb3BlTmFtZXNwYWNlcyA9IGNvbGxlY3ROYW1lc3BhY2VzKGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgIGVudmVsb3BlTmFtZXNwYWNlcy5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUyk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYW4gYXR0cmlidXRlIHRoYXQgaXMgbm90IGluIGFueSBvZiB0aGUgbmFtZXNwYWNlcwotICAgICAgQXR0ciBub3RWYWxpZEF0dHIgPSBnZXROb3RWYWxpZEF0dHIoCi0gICAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpLAotICAgICAgICBlbnZlbG9wZU5hbWVzcGFjZXMpOwotCi0gICAgICAvLyBJZiBmb3VuZCBvbmUsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAobm90VmFsaWRBdHRyICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYXR0cmlidXRlICIKLSAgICAgICAgICArIG5vdFZhbGlkQXR0ci5nZXROb2RlTmFtZSgpICsgIiBpcyBub3QgbmFtZXNwYWNlLXF1YWxpZmllZCIpOwotCi0KLSAgICAgIC8vIFJ1bGUgMi4gSGVhZGVyIAotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgbmFtZSBpcyAiSGVhZGVyIi4KLSAgICAgIC8vICBvIFRoZSBlbGVtZW50IE1BWSBiZSBwcmVzZW50IGluIGEgU09BUCBtZXNzYWdlLiBJZiBwcmVzZW50LCB0aGUgZWxlbWVudAotICAgICAgLy8gICAgTVVTVCBiZSB0aGUgZmlyc3QgaW1tZWRpYXRlIGNoaWxkIGVsZW1lbnQgb2YgYSBTT0FQIEVudmVsb3BlIGVsZW1lbnQuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNQVkgY29udGFpbiBhIHNldCBvZiBoZWFkZXIgZW50cmllcyBlYWNoIGJlaW5nIGFuIGltbWVkaWF0ZQotICAgICAgLy8gICAgY2hpbGQgZWxlbWVudCBvZiB0aGUgU09BUCBIZWFkZXIgZWxlbWVudC4gQWxsIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cwotICAgICAgLy8gICAgb2YgdGhlIFNPQVAgSGVhZGVyIGVsZW1lbnQgTVVTVCBiZSBuYW1lc3BhY2UtcXVhbGlmaWVkLgotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBzdWIgZWxlbWVudCBvZiB0aGUgZW52ZWxvcGUKLSAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotICAgICAgQ29sbGVjdGlvbiBoZWFkZXJOYW1lc3BhY2VzID0gY29sbGVjdE5hbWVzcGFjZXMoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotCi0gICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpIZWFkZXIKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0hFQURFUikKLSAgICAgICAgJiYgaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotCi0gICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBIZWFkZXIgZW50cmllcwotICAgICAgICBFbGVtZW50IGhlYWRlckVudHJ5ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgICAgd2hpbGUgKGhlYWRlckVudHJ5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbmFtZXNwYWNlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnkKLSAgICAgICAgICBDb2xsZWN0aW9uIGhlYWRlckVudHJ5TmFtZXNwYWNlcyA9IGNvbGxlY3ROYW1lc3BhY2VzKAotICAgICAgICAgICAgaGVhZGVyRW50cnkuZ2V0QXR0cmlidXRlcygpKTsKLQotICAgICAgICAgIC8vIElmIHRoZSBlbnRyeSBpcyBub3QgaW4gdGhlIG5hbWVzcGFjZXMsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFlbnZlbG9wZU5hbWVzcGFjZXMuY29udGFpbnMoaGVhZGVyRW50cnkuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICAgICAmJiAhaGVhZGVyTmFtZXNwYWNlcy5jb250YWlucyhoZWFkZXJFbnRyeS5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAgICYmICFoZWFkZXJFbnRyeU5hbWVzcGFjZXMuY29udGFpbnMoaGVhZGVyRW50cnkuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBoZWFkZXIgZW50cnkgIgotICAgICAgICAgICAgICArIGhlYWRlckVudHJ5LmdldE5vZGVOYW1lKCkgKyAiIGlzIG5vdCBuYW1lc3BhY2UtcXVhbGlmaWVkIik7Ci0KLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IEhlYWRlciBlbnRyeQotICAgICAgICAgIGhlYWRlckVudHJ5ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoaGVhZGVyRW50cnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBzdWIgZWxlbWVudCBvZiB0aGUgZW52ZWxvcGUKLSAgICAgICAgZWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKGVsZW1lbnQpOwotICAgICAgfQotCi0KLSAgICAgIC8vIFJ1bGUgMy4gQm9keQotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgbmFtZSBpcyAiQm9keSIuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNVVNUIGJlIHByZXNlbnQgaW4gYSBTT0FQIG1lc3NhZ2UgYW5kIE1VU1QgYmUgYW4gaW1tZWRpYXRlCi0gICAgICAvLyAgICBjaGlsZCBlbGVtZW50IG9mIGEgU09BUCBFbnZlbG9wZSBlbGVtZW50LiBJdCBNVVNUIGRpcmVjdGx5IGZvbGxvdyB0aGUKLSAgICAgIC8vICAgIFNPQVAgSGVhZGVyIGVsZW1lbnQgaWYgcHJlc2VudC4gT3RoZXJ3aXNlIGl0IE1VU1QgYmUgdGhlIGZpcnN0IGltbWVkaWF0ZQotICAgICAgLy8gICAgY2hpbGQgZWxlbWVudCBvZiB0aGUgU09BUCBFbnZlbG9wZSBlbGVtZW50LgotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgTUFZIGNvbnRhaW4gYSBzZXQgb2YgYm9keSBlbnRyaWVzIGVhY2ggYmVpbmcgYW4gaW1tZWRpYXRlCi0gICAgICAvLyAgICBjaGlsZCBlbGVtZW50IG9mIHRoZSBTT0FQIEJvZHkgZWxlbWVudC4gSW1tZWRpYXRlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZQotICAgICAgLy8gICAgU09BUCBCb2R5IGVsZW1lbnQgTUFZIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQuIFNPQVAgZGVmaW5lcyB0aGUgU09BUCBGYXVsdAotICAgICAgLy8gICAgZWxlbWVudCwgd2hpY2ggaXMgdXNlZCB0byBpbmRpY2F0ZSBlcnJvciBtZXNzYWdlcy4KLQotICAgICAgLy8gaWYgdGhlIFNPQVAgQm9keSBlbGVtZW50IGlzIG5vdCBwcmVzZW50ZWQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAoZWxlbWVudCA9PSBudWxsCi0gICAgICAgIHx8ICFlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSkKLSAgICAgICAgfHwgIWlzU09BUE5hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBzb2FwOkJvZHkgZWxlbWVudCBpcyBub3QgcHJlc2VudGVkICIKLSAgICAgICAgICArICJvciBmb2xsb3dzIGFuIGFkZGl0aW9uYWwgc3ViIGVsZW1lbnQgb2Ygc29hcDpFbnZlbG9wZSIpOwotCi0gICAgICAvLyBQcm9jZXNzaW5nIGFsbCBvdGhlciBzdWIgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlCi0gICAgICBlbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbWVudCk7Ci0gICAgICB3aGlsZSAoZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBDaGVja2luZyBmb3IgdGhlIFNPQVAgSGVhZGVyIGVsZW1lbnQKLSAgICAgICAgaWYgKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpCi0gICAgICAgICAgJiYgaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgc29hcDpIZWFkZXIgZWxlbWVudCBjYW5ub3QgZm9sbG93IHRoZSBzb2FwOkJvZHkgZWxlbWVudCIpOwotCi0gICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBuYW1lc3BhY2VzIGZvciB0aGUgY3VycmVudCBlbGVtZW50Ci0gICAgICAgIENvbGxlY3Rpb24gZWxlbWVudE5hbWVzcGFjZXMgPSBjb2xsZWN0TmFtZXNwYWNlcygKLSAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGluIHRoZSBuYW1lc3BhY2VzLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoIWVudmVsb3BlTmFtZXNwYWNlcy5jb250YWlucyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKQotICAgICAgICAgICYmICFlbGVtZW50TmFtZXNwYWNlcy5jb250YWlucyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHN1YiBlbnZlbG9wZSBlbGVtZW50ICIKLSAgICAgICAgICAgICsgZWxlbWVudC5nZXROb2RlTmFtZSgpICsgIiBpcyBub3QgbmFtZXNwYWNlLXF1YWxpZmllZCIpOwotCi0gICAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgc3ViIGVsZW1lbnQgb2YgdGhlIGVudmVsb3BlCi0gICAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0JewotCSAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQl9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgYWxsIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGZyb20gYXR0cmlidXRlcyBjb2xsZWN0aW9uCi0gICAqIEBwYXJhbSBhdHRycyBhbiBhdHRyaWJ1dGVzIGNvbGxlY3Rpb24KLSAgICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2YgbmFtZXNwYWNlcwotICAgKi8KLSAgcHJpdmF0ZSBDb2xsZWN0aW9uIGNvbGxlY3ROYW1lc3BhY2VzKE5hbWVkTm9kZU1hcCBhdHRycykKLSAgewotICAgIENvbGxlY3Rpb24gbnMgPSBuZXcgSGFzaFNldCgpOwotICAgIGlmIChhdHRycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLSAgICAgICAgaWYgKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgICYmIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfWE1MTlMpKQotICAgICAgICAgIG5zLmFkZChhdHRyLmdldFZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZXMgYW4gYXR0cmlidXRlIHRoYXQgaXMgbm90IGluIG5hbWVzcGFjZXMKLSAgICogQHBhcmFtIGF0dHJzIGFuIGF0dHJpYnV0ZXMgY29sbGVjdGlvbgotICAgKiBAcGFyYW0gbnMgYSBuYW1lc3BhY2VzIGNvbGxlY3Rpb24KLSAgICogQHJldHVybiBhbiBhdHRyaWJ0dWUgdGhhdCBpcyBub3QgaW4gYW55IG9mIHRoZSBuYW1lc3BhY2VzIHNwZWNpZmllZAotICAgKi8KLSAgcHJpdmF0ZSBBdHRyIGdldE5vdFZhbGlkQXR0cihOYW1lZE5vZGVNYXAgYXR0cnMsIENvbGxlY3Rpb24gbnMpCi0gIHsKLSAgICBBdHRyIHJldCA9IG51bGw7Ci0gICAgaWYgKGF0dHJzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yKGludCBpID0gMDsgaSA8IGF0dHJzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IChBdHRyKSBhdHRycy5pdGVtKGkpOwotICAgICAgICBpZiAoYXR0ci5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsCi0gICAgICAgICAgfHwgIW5zLmNvbnRhaW5zKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0ID0gYXR0cjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllcyB3aGV0aGVyIGEgbmFtZXNwYWNlIGlzIHRoZSBTT0FQIG5hbWVzcGFjZQotICAgKiAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAqIEBwYXJhbSBucyBhIG5hbWVzcGFjZSB0byBiZSBxdWFsaWZpZWQKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBuYW1lc3BhY2UgaXMgcXVhbGlmaWVkLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1NPQVBOYW1lc3BhY2UoU3RyaW5nIG5zKQotICB7Ci0gICAgaWYgKG5zID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbnMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDE2MDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlN2M0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0KLS8qKgotICogQlAxNjAxLgotICovCi1wdWJsaWMgY2xhc3MgQlAxNjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxNjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIE9uZS13YXkgcmVzcG9uc2VzIHdpbGwgbm90IGNvbnRhaW4gYSBTT0FQIG1lc3NhZ2UKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBTT0FQIG1lc3NhZ2UKLSAgICAgICAgLy9Eb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICBlLmdldFRhcmdldEV4Y2VwdGlvbigpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2ExYzg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NMldyaXRlcjsKLQotCi0vKioKLSAqIEJQMTcwMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTcwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTcwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogVXNlIGxvY2FsIGNvcHkgb2Ygc2NoZW1hIGZvciBub3cKLSAgICAgICAgLy8gRG9jdW1lbnQgZG9jID0gWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldExvZ0VudHJ5KCkuZ2V0TWVzc2FnZSgpLCBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApOwotICAgICAgICAvLyBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TG9nRW50cnkoKS5nZXRNZXNzYWdlKCksICJzY2hlbWFzL3NvYXBFbnZlbG9wZS54c2QiKTsKLQotICAgICAgICAvLyBHZXQgYSBub24tdmFsaWRhdGVkIGJ1dCAod2VsbC1mb3JtZWQpIERPTSB0cmVlIG9mIHRoZSBtZXNzYWdlIGNvbnRlbnQKLSAgICAgICAgRG9jdW1lbnQgZG9jID0KLSAgICAgICAgICBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAvLyBSZW1vdmUgYW55IHhzaTp0eXBlcyBhdHRyaWJ1dGVzIGZyb20gdGhlIG1lc3NhZ2UgKFNPQVAgSGVhZGVyLCBCb2R5IGFuZCBFbnZlbG9wZSBpdHNlbGYpCi0KLSAgICAgICAgTm9kZUxpc3QgZWxlbWVudExpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICAgICAgaWYgKGVsZW1lbnRMaXN0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIGVsZW1lbnRMaXN0Lml0ZW0oaSk7Ci0gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5TKFdTSUNvbnN0YW50cy5OU19VUklfWFNJLCAidHlwZSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdyaXRlIG91dCB0aGUgKHBvdGVudGlhbGx5KSBtb2RpZmllZCB0cmVlIHRvIFN0cmluZwotICAgICAgICBTdHJpbmcgZmlsdGVyZWRNZXNzYWdlID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoZG9jKTsKLQotICAgICAgICAvLyBQYXJzZSB0aGUgcmVzdWx0IHdpdGggdmFsaWRhdGlvbiAib24iCi0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKAotICAgICAgICAgIGZpbHRlcmVkTWVzc2FnZSwKLSAgICAgICAgICBUZXN0VXRpbHMuZ2V0U09BUFNjaGVtYUxvY2F0aW9uKCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBpZiAoZS5nZXRUYXJnZXRFeGNlcHRpb24oKSBpbnN0YW5jZW9mIFNBWEV4Y2VwdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgVXRpbHMuZ2V0RXhjZXB0aW9uRGV0YWlscyhlLmdldFRhcmdldEV4Y2VwdGlvbigpKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzU1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTc1NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjgzZWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzU1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQlAxNzU1Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG5vbi1mYXVsdCBlbnZlbG9wZSBjb250YWluaW5nIGEgc29hcDpib2R5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGlzIHJlZmVycmVkIGJ5IGEgYmluZGluZyBzdHlsZSBSUEMtbGl0ZXJhbDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5FYWNoIHBhcnQgYWNjZXNzb3IgZWxlbWVudCBpbiB0aGUgZW52ZWxvcGUgaGFzIGEgbG9jYWwgbmFtZSBvZiB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpwYXJ0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTc1NSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDE3NTUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDcmVhdGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIHBvdGVudGlhbCBTT0FQIG9wZXJhdGlvbgotICAgICAgUU5hbWUgb3BlcmF0aW9uUU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIHNvYXBPcGVyYXRpb24uZ2V0TmFtZXNwYWNlVVJJKCksIHNvYXBPcGVyYXRpb24uZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgUlBDIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgb3BlcmF0aW9uIGJ5IGdpdmVuIG9wZXJhdGlvbiBuYW1lCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICBvcGVyYXRpb25RTmFtZSwKLSAgICAgICAgcnBjQmluZGluZ09wZXJhdGlvbnMpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gbWVzc2FnZSBwYXJ0cyBhbmQgZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBudWxsOwotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpKQotICAgICAgewotICAgICAgICBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBleHRFbGVtcyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRPcmRlcmVkUGFydHMobnVsbCk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgbGl0ZXJhbCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCF2YWxpZGF0b3IuaXNMaXRlcmFsKGV4dEVsZW1zKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotCi0gICAgICAvKiBCYXNpYyBQcm9maWxlIFZlcnNpb24gMS4xIChodHRwOi8vd3d3LndzLWkub3JnL1Byb2ZpbGVzL0Jhc2ljLzIwMDMtMTIvQmFzaWNQcm9maWxlLTEuMS5odG0pCi0gICAgICAgKiBzYXlzIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc29hcDpib2R5IG9mIGFuIEVOVkVMT1BFIE1VU1QgYmUKLSAgICAgICAqIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIHdzZGw6cGFydHMgaW4gdGhlIHdzZGw6bWVzc2FnZSB0aGF0IGRlc2NyaWJlcyBpdC4KLSAgICAgICAqIEhvd2V2ZXIsIHdlIHNob3VsZCBrZWVwIGluIG1pbmQgdGhlcmUgaXMgdGhlICJwYXJ0cyIgYXR0cmlidXRlIG9mIHNvYXBiaW5kOmJvZHkKLSAgICAgICAqIHRoYXQgaW5kaWNhdGVzIHdoaWNoIHBhcnRzIGFwcGVhciB3aXRoaW4gdGhlIFNPQVAgQm9keS4gCi0gICAgICAgKi8KLQotICAgICAgLy8gR2V0dGluZyB0aGUgb3JkZXJlZCBsaXN0IG9mIHdzZGw6cGFydCBuYW1lcwotICAgICAgTGlzdCBvcmRlcmVkUGFydE5hbWVzID0KLSAgICAgICAgdmFsaWRhdG9yLm9yZGVyUGFydE5hbWVzKG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cywgZXh0RWxlbXMpOwotICAgICAgSXRlcmF0b3IgaSA9IG9yZGVyZWRQYXJ0TmFtZXMuaXRlcmF0b3IoKTsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGFjY2Vzc29yCi0gICAgICBFbGVtZW50IGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwT3BlcmF0aW9uKTsKLSAgICAgIHdoaWxlIChhY2Nlc3NvciAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBhcnQgZWxlbWVudAotICAgICAgICAvLyBmb3IgYW4gYWNjZXNzb3IsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmICghaS5oYXNOZXh0KCkpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhlIHBhcnQgYWNjZXNzb3IgZWxlbWVudCAnIiArIGFjY2Vzc29yLmdldExvY2FsTmFtZSgpCi0gICAgICAgICAgICArICInIGRvZXMgbm90IGhhdmUgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpwYXJ0IGVsZW1lbnQuIik7Ci0KLSAgICAgICAgLy8gSWYgbG9jYWwgbmFtZSBvZiBhY2Nlc3NvciBkb2VzIG5vdCBlcXVhbCB0byB0aGUgbmFtZSBvZiB0aGUKLSAgICAgICAgLy8gY29ycmVzcG9uZGluZyB3c2RsOnBhcnQgZWxlbWVudCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgU3RyaW5nIHBhcnROYW1lID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgIGlmICghYWNjZXNzb3IuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKHBhcnROYW1lKSkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJUaGUgYWNjZXNzb3IgbG9jYWwgbmFtZSBpcyAiICsgYWNjZXNzb3IuZ2V0TG9jYWxOYW1lKCkKLSAgICAgICAgICAgICsgIiwgdGhlIGNvcnJlc3BvbmRpbmcgcGFydCBlbGVtZW50IG5hbWUgaXMgIiArIHBhcnROYW1lKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGFjY2Vzc29yCi0gICAgICAgIGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoYWNjZXNzb3IpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUwOWMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotCi0vKioKLSAqIEJQNDEwMAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBoZWFkZXIgYmxvY2sgdGhhdCBpcyBlaXRoZXIgbWFuZGF0b3J5IG9yIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIHdzZGw6YmluZGluZy48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QW4gZW52ZWxvcGUgY29udGFpbnMgYSBoZWFkZXIgYmxvY2sgdGhhdCBpcyBlaXRoZXIgbWFuZGF0b3J5IG9yIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIHdzZGw6YmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIGhlYWRlciBlbGVtZW50cyBmcm9tIGVudmVsb3BlCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsIFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBoZWFkZXIsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChoZWFkZXJMaXN0ID09IG51bGwgfHwgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBoZWFkZXIgZWxlbWVudAotICAgICAgTm9kZSBoZWFkZXIgPSBoZWFkZXJMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICBOb2RlTGlzdCBlbGVtcyA9IGhlYWRlci5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZWxlbXMgPT0gbnVsbCB8fCBlbGVtcy5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBXYWxraW5nIHRocm91Z2ggY2hpbGQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLQotICAgICAgICBpZiAoZWxlbXMuaXRlbShpKS5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUKLSAgICAgICAgICBOb2RlIG11Tm9kZSA9IGVsZW1zLml0ZW0oaSkuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgKLSAgICAgICAgICAgIHJvb3QuZ2V0UHJlZml4KCkgKyAiOiIgKyBYTUxVdGlscy5TT0FQX0FUVFJfTVVTVF9VTkRFUlNUQU5EKTsKLSAgICAgICAgICAvLyBJZiBhIGhlYWRlciBibG9jayBpcyBtYW5kYXRvcnksIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICAgICAgICBpZiAobXVOb2RlICE9IG51bGwgJiYgbXVOb2RlLmdldE5vZGVWYWx1ZSgpLmVxdWFscygiMSIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyBoZWFkZXIgYmxvY2sgbmFtZQotICAgICAgICBTdHJpbmcgYmxvY2tOYW1lID0gZWxlbXMuaXRlbShpKS5nZXRMb2NhbE5hbWUoKTsKLSAgICAgICAgLy8gSWYgdGhlIG5hbWUgaXMgbm90IHByZXNlbnRlZCAob2NjdXJzIHdoZW4gZWxlbWVudCBpcyBlbXB0eSBzdHJpbmcpCi0gICAgICAgIC8vIHRoZW4gY29udGludWUgd2l0aCB0aGUgbmV4dCBlbGVtZW50Ci0gICAgICAgIGlmIChibG9ja05hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBibG9ja05hbWVFeGlzdHMgPSBmYWxzZTsKLQotICAgICAgICAvLyBHZXR0aW5nIFdTREwgYmluZGluZ3MKLSAgICAgICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldEJpbmRpbmdzKCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYmluZGluZ3MubGVuZ3RoOyBqKyspIAotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyB3c2RsOm9wZXJhdGlvbnMKLSAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBiaW5kaW5nc1tqXS5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgICAgIEl0ZXJhdG9yIGsgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGsuaGFzTmV4dCgpICYmICFibG9ja05hbWVFeGlzdHMpCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgay5uZXh0KCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyB0aGVuIGdldHRpbmcgd3NkbDppbnB1dCBmb3IgYW4gb3BlcmF0aW9uIAotICAgICAgICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ0lucHV0IG9wSW5wdXQgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICAgIGlmIChvcElucHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3c2RsOmlucHV0IGlzIHByZXNlbnRlZCB0aGVuIGNoZWNraW5nCi0gICAgICAgICAgICAgICAgLy8gd2hldGhlciB0aGUgYmxvY2sgbmFtZSBpcyBkZXNjcmliZWQgdGhlcmUgb3Igbm90Ci0gICAgICAgICAgICAgICAgYmxvY2tOYW1lRXhpc3RzID0gYmxvY2tOYW1lRXhpc3RzKAotICAgICAgICAgICAgICAgICAgb3BJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgYmxvY2tOYW1lKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyB0aGVuIGdldHRpbmcgd3NkbDpvdXRwdXQgZm9yIGFuIG9wZXJhdGlvbgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCaW5kaW5nT3V0cHV0IG9wT3V0cHV0ID0gb3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgICAgICAgaWYgKG9wT3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3c2RsOm91dHB1dCBpcyBwcmVzZW50ZWQgdGhlbiBjaGVja2luZwotICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgdGhlIGJsb2NrIG5hbWUgaXMgZGVzY3JpYmVkIHRoZXJlIG9yIG5vdAotICAgICAgICAgICAgICAgIGJsb2NrTmFtZUV4aXN0cyA9IGJsb2NrTmFtZUV4aXN0cygKLSAgICAgICAgICAgICAgICAgIG9wT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCBibG9ja05hbWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgYSBoZWFkZXIgYmxvY2sgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgYXBwcm9wcmlhdGUgd3NkbDpiaW5kaW5nCi0gICAgICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICAgICAgaWYgKCFibG9ja05hbWVFeGlzdHMpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIE5vIG9uZSBoZWFkZXIgYmxvY2sgaXMgZWl0aGVyIG1hbmRhdG9yeSBvciBpcyBub3QgZGVzY3JpYmVkIGluIHRoZQotICAgICAgLy8gYXBwcm9wcmlhdGUgd3NkbDpiaW5kaW5nLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgdGhlIGV4aXN0ZW5zZSBvZiBibG9ja05hbWUgaW4gd3NkbHNvYXA6aGVhZGVyLCBpZiBpdCBpcyBmb3VuZCBpbgotICAgKiBhIGxpc3Qgb2YgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0cwotICAgKiAKLSAgICogQHBhcmFtIGVsZW1zIEEgbGlzdCBvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3RzCi0gICAqIEBwYXJhbSBibG9ja05hbWUgVGhlIG5hbWUgdGhhdCB3aWxsIGJlIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZQotICAgKiBAcmV0dXJuIHRydWUgaWYgYmxvY2tOYW1lIGlzIGRlc2NyaWJlZCBpbiB0aGUgd3NkbHNvYXA6aGVhZGVyIGV4dGVuc2liaWxpdHkgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGJsb2NrTmFtZUV4aXN0cyhMaXN0IGVsZW1zLCBTdHJpbmcgYmxvY2tOYW1lKQotICB7Ci0gICAgaWYgKGVsZW1zID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGkgPSBlbGVtcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgIFN0cmluZyBlbGVtTmFtZSA9IGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgIGlmIChlbGVtTmFtZS5lcXVhbHMoImhlYWRlciIpKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgZWxlbTsKLSAgICAgICAgaWYgKHNvYXBIZWFkZXIuZ2V0UGFydCgpLmVxdWFscyhibG9ja05hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkOTNmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBCUDQxMDEKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZSBjb250YWluaW5nIGEgc29hcDphY3RvciBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG90aGVyIHRoYW4gdGhlIHNwZWNpYWwgdXJpICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIGhlYWRlciBlbGVtZW50IGluIHRoZSBlbnZlbG9wZSBjb250YWlucyBhIHNvYXA6YWN0b3IgYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBvdGhlciB0aGFuIHRoZSBzcGVjaWFsIHVyaSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0Ii48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIGhlYWRlciBlbGVtZW50cyBmcm9tIGVudmVsb3BlCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsIFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBoZWFkZXIsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChoZWFkZXJMaXN0ID09IG51bGwgfHwgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBoZWFkZXIgZWxlbWVudAotICAgICAgTm9kZSBoZWFkZXIgPSBoZWFkZXJMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICBOb2RlTGlzdCBlbGVtcyA9IGhlYWRlci5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBoZWFkZXIKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChlbGVtcyA9PSBudWxsIHx8IGVsZW1zLmdldExlbmd0aCgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdhbGtpbmcgdGhyb3VnaCBjaGlsZCBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIG5vZGUgYXR0cmlidXRlcwotICAgICAgICBOYW1lZE5vZGVNYXAgYXR0cnMgPSBlbGVtcy5pdGVtKGkpLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAvLyBJZiB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZXMgdGhlbiBjb250aW51ZQotICAgICAgICBpZiAoYXR0cnMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyBhY3RvciBhdHRyaWJ1dGUKLSAgICAgICAgTm9kZSBhY3RvciA9IGF0dHJzLmdldE5hbWVkSXRlbShyb290LmdldFByZWZpeCgpCi0gICAgICAgICAgKyAiOiIgKyBYTUxVdGlscy5TT0FQX0FUVFJfQUNUT1IpOwotCi0gICAgICAgIC8vIElmIHRoZSBhY3RvciBhdHRyaWJ1dGUgaXMgcHJlc2VudGVkIGFuZCBkb2VzIG5vdCBlcXVhbAotICAgICAgICAvLyB0byAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0IiwKLSAgICAgICAgLy8gdGhlbiB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgICBpZiAoYWN0b3IgIT0gbnVsbAotICAgICAgICAgICYmICFhY3Rvci5nZXROb2RlVmFsdWUoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQX05FWFRfQUNUT1IpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBObyBvbmUgYWN0b3IgYXR0cmlidXRlIGhhcyBhIHZhbHVlIG90aGVyIHRoYW4KLSAgICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZSAKLSAgICAgIHJlc3VsdCAgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmUxNzkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQlA0MTAyCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGUgY29udGFpbmluZyBhIGZhdWx0IHdpdGggYSBub24tZW1wdHkgZGV0YWlsIGVsZW1lbnQuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgRmF1bHQgZWxlbWVudCBpbiBhbiBlbnZlbG9wZSBjb250YWlucyBhIG5vbi1lbXB0eSBkZXRhaWwgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIEZhdWx0IGVsZW1lbnRzIGZyb20gZW52ZWxvcGUKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBGYXVsdCBlbGVtZW50LCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZmF1bHRMaXN0ID09IG51bGwgfHwgZmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZhdWx0IGVsZW1lbnQgbXVzdCBub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlCi0gICAgICAvLyB3aXRoaW4gYSBCb2R5IGVsZW1lbnQsIHNvIGdldHRpbmcgdGhlIGZpcnN0IG9uZQotICAgICAgRWxlbWVudCBmYXVsdCA9IChFbGVtZW50KSBmYXVsdExpc3QuaXRlbSgwKTsKLQotICAgICAgLy8gR2V0dGluZyBGdWFsdCdzIGRldGFpbCBlbGVtZW50cwotICAgICAgTm9kZUxpc3QgZGV0YWlscyA9IGZhdWx0LmdldEVsZW1lbnRzQnlUYWdOYW1lKAotICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKTsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGRldGFpbCBlbGVtZW50LCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoZGV0YWlscyAhPSBudWxsCi0gICAgICAgICYmIGRldGFpbHMuZ2V0TGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBOb2RlTGlzdCBsaXN0ID0gZGV0YWlscy5pdGVtKDApLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgLy8gc2VhcmNoIGZpcnN0IGVsZW1lbnQgbm9kZSAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZigobGlzdC5pdGVtKGkpLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIAotICAgICAgICAgICYmIChsaXN0Lml0ZW0oaSkuZ2V0TG9jYWxOYW1lKCkgIT0gbnVsbCkgKSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBUaGVyZSBpcyBubyBkZXRhaWwgZWxlbWVudCBpbiBGYXVsdCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvblBhc3NFeGNlcHRpb24gYXBlKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjhkMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQlA0MTA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBzb2FwOkJvZHkgZWxlbWVudCB3aXRoIGF0dHJpYnV0ZXM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QW4gZW52ZWxvcGUgY29udGFpbnMgYSBhIHNvYXA6Qm9keSBlbGVtZW50IHdpdGggYXR0cmlidXRlcy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwOShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBzb2FwOkJvZHkgZWxlbWVudHMgZnJvbSBlbnZlbG9wZQotICAgICAgTm9kZUxpc3QgYm9keUxpc3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEJvZHkgZWxlbWVudCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJvZHlMaXN0ID09IG51bGwgfHwgYm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0dGluZyB0aGUgZmlyc3Qgc29hcDpCb2R5IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2R5TGlzdC5pdGVtKDApOwotCi0gICAgICAvLyBJZiB0aGUgQm9keSBlbGVtZW50IGhhcyBhdHRyaWJ1dGVzIChleGNsdWRpbmcgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyksCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgTmFtZWROb2RlTWFwIGF0dHJzID0gYm9keS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpZiAoYXR0cnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGF0dHJOYW1lID0gKChBdHRyKSBhdHRycy5pdGVtKGkpKS5nZXROYW1lKCk7Ci0gICAgICAgICAgaWYgKCFhdHRyTmFtZS5lcXVhbHMoInhtbG5zIikgJiYgIWF0dHJOYW1lLnN0YXJ0c1dpdGgoInhtbG5zOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvRW52ZWxvcGVWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0VudmVsb3BlVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdiZDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvRW52ZWxvcGVWYWxpZGF0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogQHZlcnNpb24gMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnZlbG9wZVZhbGlkYXRvckltcGwKLSAgZXh0ZW5kcyBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICBpbXBsZW1lbnRzIEVudmVsb3BlVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfRU5WRUxPUEU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIGVudHJ5IHR5cGVzIHRoYXQgdGhpcyB2YWxpZGF0b3IgYXBwbGllcyB0by4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBlbnRyeSB0eXBlcyAoU3RyaW5ncykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRFbnRyeVR5cGVzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgIFRZUEVfRU5WRUxPUEVfUkVRVUVTVCwKLSAgICAgICAgICAgICAgVFlQRV9FTlZFTE9QRV9SRVNQT05TRSwKLSAgICAgICAgICAgICAgVFlQRV9FTlZFTE9QRV9BTlkKLSAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGVudHJ5IGFuZCB0ZXN0IGFzc2VydGlvbiBoYXZlIHRoZSBzYW1lIHByaW1hcnkgY29udGV4dAotICAgIGlmICgodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfRU5WRUxPUEVfQU5ZKSkKLSAgICAgIHx8ICh0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHMoVFlQRV9FTlZFTE9QRV9SRVFVRVNUKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldEVudHJ5KCkKLSAgICAgICAgICAuZ2V0RW50cnlUeXBlKCkKLSAgICAgICAgICAuZ2V0VHlwZU5hbWUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkpKQotICAgICAgfHwgKHRlc3RBc3NlcnRpb24uZ2V0RW50cnlUeXBlTmFtZSgpLmVxdWFscyhUWVBFX0VOVkVMT1BFX1JFU1BPTlNFKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldEVudHJ5KCkKLSAgICAgICAgICAuZ2V0RW50cnlUeXBlKCkKLSAgICAgICAgICAuZ2V0VHlwZU5hbWUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKSkpCi0gICAgewotICAgICAgbWF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBtYXRjaDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvU1NCUDE2MDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvU1NCUDE2MDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5ZDM1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlAxNjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFNTQlAxNjAxCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0JQMTYwMSBleHRlbmRzIEJQMTYwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQMTYwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlA5NzA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlA5NzA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNTUyNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9TU0JQOTcwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBTU0JQOTcwNAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgRU5WRUxPUEUgZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDk3MDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQOTcwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSBkb2N1bWVudAotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIHJvb3QgZWxlbWVudAotICAgICAgRWxlbWVudCBlbGVtID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgLy8gSWYgaXQgaXMgbm90IHRoZSBzb2FwOkVudmVsb3BlLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIWVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkKLSAgICAgICAgfHwgIWVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBlbnZlbG9wZSBjb250YWlucyB0aGUgeG1sbnM6eG1sIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBTdHJpbmcgaW5jb3JyZWN0RWxlbWVudE5hbWUgPSBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShlbGVtKTsKLSAgICAgIGlmIChpbmNvcnJlY3RFbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG5hbWUgb2YgYW4gZWxlbWVudCBjb250YWluaW5nICIKLSAgICAgICAgICArICJzdWNoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpcyBcIiIgKyBpbmNvcnJlY3RFbGVtZW50TmFtZSArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBhbnkgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLiAKLSAgICogQHBhcmFtIGVsZW0gdGhlIHJvb3QgZWxlbWVudC4KLSAgICogQHJldHVybiB0aGUgbmFtZSBvZiBhbiBlbGVtZW50IGZvdW5kIG9yIG51bGwuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShFbGVtZW50IGVsZW0pCi0gIHsKLSAgICAvLyBHZXR0aW5nIGEgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB4bWxuczp4bWwKLSAgICBTdHJpbmcgYXR0clZhbHVlID0gZWxlbS5nZXRBdHRyaWJ1dGVOUygKLSAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfWE1MTlMsICJ4bWwiKTsKLSAgICAvLyBJZiBpdCBlcXVhbHMgdG8gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCi0gICAgLy8gcmV0dXJuIGFuIGVsZW1lbnQgbmFtZTsKLSAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUwuZXF1YWxzKGF0dHJWYWx1ZSkpCi0gICAgewotICAgICAgcmV0dXJuIGVsZW0uZ2V0Tm9kZU5hbWUoKTsKLSAgICB9Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBlbGVtZW50J3MgY2hpbGRyZW4KLSAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtKTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiBhbnkgb2YgdGhlbSBoYXMgeG1sbnM6eG1sIGF0dHJpYnV0ZSwgcmV0dXJuIGEgdmFsdWUKLSAgICAgIFN0cmluZyBuYW1lID0gZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoY2hpbGQpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICB9Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGVsZW1lbnQncyBjaGlsZAotICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgfQotICAgIC8vIE5vIHhtbG5zOnhtbCBhdHRyaWJ1dGVzIGZvdW5kLCByZXR1cm4gbnVsbAotICAgIHJldHVybiBudWxsOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2ZmMzcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDEwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDEwMDMKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbm9uLW11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UgaW4gdGhlIGxvZyBmaWxlLCB3aGljaCBoYXMgYSBub24tZW1wdHkgZW50aXR5LWJvZHk8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKiAgVGhlIGxvZ2dlZCBTT0FQIGVudmVsb3BlIGlzIGEgVVRGLTggdHJhbnNjcmlwdCBvZiBhbiBlbnZlbG9wZSBvcmlnaW5hbGx5IGVuY29kZWQgYXMgVVRGLTggb3IgVVRGLTE2LiAKLSAqICBUaGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyJ3MgY2hhcnNldCB2YWx1ZSBpcyBlaXRoZXIgVVRGLTggb3IgVVRGLTE2LiBMb29raW5nIGF0IHRoZSBtZXNzYWdlQ29udGVudCAKLSAqICBlbGVtZW50IG9mIHRoZSBsb2dnZWQgbWVzc2FnZSwgZWl0aGVyIAotICogICAgKDEpIGl0IGhhcyBhIEJPTSBhdHRyaWJ1dGUgd2hpY2ggbWFwcyB0aGUgY2hhcnNldCB2YWx1ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgb3IgCi0gKiAgICAoMikgaXQgaGFzIGl0IGhhcyBhbiBYTUwgZGVjbGFyYXRpb24gd2hpY2ggbWF0Y2hlcyB0aGUgY2hhcnNldCB2YWx1ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgb3IgCi0gKiAgICAoMykgdGhlcmUgaXMgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIGNoYXJzZXQgdmFsdWUgaXMgVVRGLTguCi0gKiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICoKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgQVAxMDAzIGV4dGVuZHMgU1NCUDEwMDMgewotCi0JLyoqCi0JICogQHBhcmFtIGltcGwKLQkgKi8KLQlwdWJsaWMgQVAxMDAzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpIAotCXsKLQkJc3VwZXIoaW1wbCk7Ci0JfQotCi0JcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLQkgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLQkgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0JICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0JewotCSAgLy8gSWYgdGhlcmUgaXMgYSBTT0FQIE1lc3NhZ2Ugd2l0aCBBdHRhY2htZW50cywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotCSAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0JICB7Ci0JICAJcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgZmFpbHVyZURldGFpbCk7Ci0JICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpOwotCSAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ5MDBlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDE5MDIKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBpZiB0aGUgd3NkbDppbnB1dCBvciB3c2RsOm91dHB1dAotICogZWxlbWVudCBpbiB0aGUgd3NkbDpiaW5kaW5nIHNwZWNpZmllcyBXU0RMIE1JTUUgYmluZGluZywgdGhlbiB0aGUgbWVzc2FnZQotICogY2FuIGNvbnRhaW4gU09BUCBhdHRhY2htZW50cy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYW4gb3BlcmF0aW9uIG1hdGNoZWQgZm9yIGEgbWVzc2FnZQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotICAgICAgLy8gSWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgLy8gR2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBMaXN0IGV4dEVsZW1zOwotICAgICAgU3RyaW5nIHR5cGU7Ci0gICAgICBpZiAoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVAotICAgICAgICAuZXF1YWxzKGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpKSkKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9ICJpbnB1dCI7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9ICJvdXRwdXQiOwotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBNSU1FIGJpbmRpbmcgaXMgbm90IHVzZWQsIGJ1dCB0aGUgbWVzc2FnZSBoYXMKLSAgICAgIC8vIGF0IGxlYXN0IG9uZSBub24tcm9vdCBNSU1FIHBhcnQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAoIXVzZXNNaW1lQmluZGluZyhleHRFbGVtcykKLSAgICAgICAgJiYgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHdzZGw6IiArIHR5cGUgKyAiIG9mIHRoZSBcIiIKLSAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGZpcnN0IGV4dGVuc2liaWxpdHkgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdXNlc01pbWVCaW5kaW5nKExpc3QgZXh0RWxlbXMpIHsKLSAgICAvLyBJZiB0aGUgZmlyc3QgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwKLSAgICAvLyByZXR1cm4gdHJ1ZQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsICYmIGV4dEVsZW1zLnNpemUoKSA+IDAKLSAgICAgICYmICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMuZ2V0KDApKQotICAgICAgLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODUyOTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogQVAxOTE1Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJvb3QtcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudGl0eSBib2R5IG9mIHRoZSByb290LXBhcnQgb2YgYQotICogbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSBpcyBzZXJpYWxpemVkIHVzaW5nIGVpdGhlciBVVEYtOCBvciBVVEYtMTYKLSAqIGNoYXJhY3RlciBlbmNvZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTE1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTE1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGdldCBNSU1FIHBhcnRzCi0gICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOyAgICAJCi0gICAgICBNaW1lUGFydCBwYXJ0ID0gbWltZVBhcnRzLmdldFJvb3RQYXJ0KCk7Ci0gICAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgeG1sRW5jb2RpbmcgPSBudWxsOwotICAgICAgICBTdHJpbmcgY2hhcnNldCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKAotICAgICAgICAgIHBhcnQuZ2V0SGVhZGVycygpLAotICAgICAgICAgIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRSwgCi0gICAgICAgICAgImNoYXJzZXQiKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyJ3MgY2hhcnNldCB2YWx1ZSBpcyBlaXRoZXIgVVRGLTggb3IgVVRGLTE2LiAKLSAgICAgICAgICBpZigoY2hhcnNldCAhPSBudWxsKSAmJiAoY2hhcnNldC5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtOCIpIHx8Ci0gICAgICAgICAgICAgIGNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIExvb2tpbmcgYXQgdGhlIG1lc3NhZ2VDb250ZW50IGVsZW1lbnQgb2YgdGhlIGxvZ2dlZCBtZXNzYWdlLCBlaXRoZXIgCi0gICAgICAgICAgICAvLyAoMSkgaXQgaGFzIGEgQk9NIGF0dHJpYnV0ZSB3aGljaCBtYXBzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAgICAgICAgICAgIGludCBib20gPSAwOwotICAgICAgICAgICAgaWYgKChib20gPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0Qk9NKCkpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGOAotICAgICAgICAgICAgICAgICYmICFjaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICAgICAgfHwgKChib20gPT0gV1NJQ29uc3RhbnRzLkJPTV9VVEYxNgotICAgICAgICAgICAgICAgICAgJiYgIWNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKQotICAgICAgICAgICAgICAgIHx8ICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGMTZfQklHX0VORElBTgotICAgICAgICAgICAgICAgICAgJiYgIWNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgQk9NICgiICsgYm9tICsgCi0gICAgICAgICAgICAgICAgICAgICIpIGFuZCBjaGFyc2V0IHZhbHVlICgiICsgY2hhcnNldCArICIpZG8gbm90IG1hdGNoLiIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAoMikgaXQgaGFzIGFuIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBtYXRjaGVzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAgICAgICAgICAgIGVsc2UgaWYgKCgoeG1sRW5jb2RpbmcgPSAKLSAgICAgICAgICAgICAgVXRpbHMuZ2V0WE1MRW5jb2RpbmcocGFydC5nZXRDb250ZW50KCkpKSAhPSBudWxsKSAmJgotICAgICAgICAgICAgICAheG1sRW5jb2RpbmcuZXF1YWxzKCIiKSkgIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZigheG1sRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShjaGFyc2V0KSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgWE1MIGRlY2xhcmF0aW9uIGVuY29kaW5nICgiICsgCi0gICAgICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nICsgIikgYW5kIGNoYXJzZXQgdmFsdWUgKCIgKyBjaGFyc2V0ICsgCi0gICAgICAgICAgICAgICAgICAgICIpIGRvIG5vdCBtYXRjaC4iKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAoMykgdGhlcmUgaXMgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIGNoYXJzZXQgdmFsdWUgaXMgVVRGLTguCi0gICAgICAgICAgICBlbHNlIGlmKCFjaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MICIrCi0gICAgICAgICAgICAgICAgICAiZGVjbGFyYXRpb24sIGFuZCB0aGUgY2hhcnNldCB2YWx1ZSBpcyAoIiArIGNoYXJzZXQgKyAiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBoZWFkZXIgZG8gbm90IGZvdW5kIG9yIGluY29ycmVjdCBjaGFyc2V0IHZhbHVlCi0gICAgICAgICAgZWxzZSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiRWl0aGVyIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCAiKwotICAgICAgICAgICAgICAgICJwcmVzZW50IGluIHRoZSBSb290IFBhcnQgb3IgYSBjaGFyc2V0IHZhbHVlIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpIAotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTJkMGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQVAxOTE3Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgY29udGFpbmluZyB6ZXJvIGF0dGFjaG1lbnQgcGFydHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIGNvbnRhaW5pbmcgemVybyBhdHRhY2htZW50IHBhcnRzIGlzIHNlbnQKLSAqIHVzaW5nIGEgY29udGVudC10eXBlIG9mIGVpdGhlciAidGV4dC94bWwiIGFzIHRob3VnaCBhIFNPQVAgSFRUUCBiaW5kaW5nIHdlcmUKLSAqIHVzZWQgb3IgIm11bHRpcGFydC9yZWxhdGVkIiB3aGVuIHRoZSBXU0RMIGRlc2NyaXB0aW9uIGZvciB0aGUgbWVzc2FnZQotICogc3BlY2lmaWVzIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBvbiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0Ci0gKiBvciB3c2RsOm91dHB1dCBlbGVtZW50IGluIGl0cyB3c2RsOmJpbmRpbmcuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkxNyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkxNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBub3QgYXBwbGljYWJsZSBpZiB0aGVyZSBhcmUgYXR0YWNobWVudHMKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKQotICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBjaGVjayBsaXN0Ci0gICAgICBpZigoZXh0RWxlbXMgPT0gbnVsbCkgfHwgKGV4dEVsZW1zLnNpemUoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gZGV0ZXJtaW5lIHR5cGUgCi0gICAgICBib29sZWFuIGlzTXVsdGlQYXJ0ID0gZmFsc2U7Ci0gICAgICAKLSAgICAgIC8vIGlmIE1JTUVNdWx0aXBhcnRSZWxhdGVkIHRoZW4gb25seSByb290LXBhcnQgYWxsb3dlZCAKLSAgICAgIGlmKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIE1JTUVNdWx0aXBhcnRSZWxhdGVkKQotICAgICAgewotICAgICAgICBpZigoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCkpLmdldE1JTUVQYXJ0cygpLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBpc011bHRpUGFydCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICAvLyBlbHNlIGlmIG5vdCBzb2FwYmluZDpib2R5IHJvb3QgZWxlbWVudAotICAgICAgZWxzZSBpZighKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIFNPQVBCb2R5KSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gZ2V0IEhUVFAgY29udGVudCB0eXBlCi0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgICBIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUpOwotIAotICAgICAgLy9hbGxvdyAidGV4dC94bWwiIG9yIAotICAgICAgLy8oIm11bHRpcGFydC9yZWxhdGVkIiBhbmQgIm1pbWU6bXVsdGlwYXJ0UmVsYXRlZCIgV1NETCBiaW5kaW5ncykKLSAgICAgIGlmKChjb250ZW50VHlwZSA9PSBudWxsKSB8fCAKLSAgICAgICAgICghY29udGVudFR5cGUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX01VTFRJUEFSVCkgJiYKLSAgICAgICAgICFjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwpKSB8fAotICAgICAgICAgKChjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfTVVMVElQQVJUKSAmJiAKLSAgICAgICAgICAgICAhaXNNdWx0aVBhcnQpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBjb250ZW50LXR5cGUgaGVhZGVyIGZpZWxkICAiICsKLSAgICAgICAgICAgICJ2YWx1ZSBcIiIgKyBjb250ZW50VHlwZSArICJcIiBpcyBpbmNvcnJlY3QiKTsKLSAgICAgIH0KLSAgICB9IAotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDFhMmI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MjUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0vKioKLSAqIEFQMTkyNQotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIHRoZSBXU0RMIGRlc2NyaXB0aW9uIGxpc3RzIGF0IGxlYXN0IG9uZSBub24tcm9vdAotICogTUlNRSBwYXJ0LCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2UgaGFzIGEgQ29udGVudC1UeXBlIEhUVFAgaGVhZGVyCi0gKiBmaWVsZC12YWx1ZSB3aXRoIGEgbWVkaWEtdHlwZSBvZiAibXVsdGlwYXJ0L3JlbGF0ZWQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotICAKLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoZWQgb3BlcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAKLSAgICAgIC8vIEZpbmRpbmcgb3BlcmF0aW9uIGV4dGVuc2liaWxpdHkgZWxlbXMKLSAgICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICAgIExpc3QgZXh0RWxlbXMgPSBudWxsOwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbgotICAgICAgICAgIC5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkKLSAgICAgICAgJiYgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIGNoZWNrIGxpc3Qgb24gZmlyc3QgZWxlbWVudAotICAgICAgaWYoKGV4dEVsZW1zID09IG51bGwpIHx8IChleHRFbGVtcy5zaXplKCkgPT0gMCkgfHwgCi0gICAgICAgICAhKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIE1JTUVNdWx0aXBhcnRSZWxhdGVkKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgLy8gZ2V0IGxpc3QgbWltZSBwYXJ0cyBmcm9tIGRlZmluaXRpb24KLSAgICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG1pbWUgPSAoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW1zLmdldCgwKTsKLSAgICAgIExpc3QgcGFydHMgPSBtaW1lLmdldE1JTUVQYXJ0cygpOwotICAgICAgLy8gaWYgcGFydHMgY291bnQgaXMgbW9yZSB0aGFuIG9uZSwgdGhhbiBhc3NlcnRpb24gaXMgbm90QXBwbGljYWJsZQotICAgICAgaWYocGFydHMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgICBIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUpOyAKLSAgICAgIGlmKChjb250ZW50VHlwZSA9PSBudWxsKSB8fCAKLSAgICAgICAgICFjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfTVVMVElQQVJUKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIkluY29ycmVjdCBDb250ZW50LVR5cGUgdmFsdWUgXCIiICsKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlICsgIlwiIGluIEhUVFAgaGVhZGVyIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnQgdmFsdWUgZnJvbSBNSU1FQ29udGVudCBlbGVtZW50Ci0gICAqIEBwYXJhbSBwYXJ0IE1JTUVQYXJ0IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICovCi0gIC8vcHJpdmF0ZSBTdHJpbmcgZ2V0TUlNRUNvbnRlbnRQYXJ0KE1JTUVQYXJ0IHBhcnQpIHsKLSAgLy8gIExpc3QgbGlzdCA9IHBhcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gIC8vICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAvLyAgICByZXR1cm4gbnVsbDsKLSAgLy8gIHJldHVybiAoKE1JTUVDb250ZW50KSBsaXN0LmdldCgwKSkuZ2V0UGFydCgpOwotICAvL30KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTI2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTI2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZjI0ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FVXRpbHM7Ci0KLS8qKgotICogQVAxOTI2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIGluY2x1ZGVzIGFsbCBvZiB0aGUgTUlNRSBwYXJ0cyBkZXNjcmliZWQgYnkKLSAqIGl0cyBXU0RMIE1JTUUgYmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTI2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTI2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBnZXQgbWVzc2FnZSBtaW1lIHBhcnRzCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgLy8gY2hlY2sgbGlzdCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBsaXN0IG1pbWUgcGFydHMgZnJvbSBkZWZpbml0aW9uCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lID0gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICBMaXN0IHBhcnRzID0gbWltZS5nZXRNSU1FUGFydHMoKTsKLQotICAgICAgaWYobWltZVBhcnRzLmdldFJvb3RQYXJ0KCkgPT0gbnVsbCB8fCBtaW1lUGFydHMuY291bnQoKT09MCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIC8vIHNraXAgcm9vdCBwYXJ0Ci0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IHBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBnZXRNSU1FQ29udGVudFBhcnQoKE1JTUVQYXJ0KSBwYXJ0cy5nZXQoaSkpOwotICAgICAgICAvLyBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIE1JTUUgcGFydAotICAgICAgICBpZiAoZmluZE1JTUVQYXJ0KG1pbWVQYXJ0cy5nZXRQYXJ0cygpLCBwYXJ0TmFtZSkgPT0gbnVsbCkgCi0gICAgICAgIHsgICAgICAgICAgICAKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyAiICsKLSAgICAgICAgICAgICAgIm9wZXJhdGlvbiBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArIAotICAgICAgICAgICAgICAiXCIgZG9lcyBub3QgY29udGFpbiBwYXJ0IFwiIiArIHBhcnROYW1lICsgIlwiIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IAotICAgICAgICB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogZmluZCBjb3JyZXNwb25kaW5nIE1JTUUgcGFydAotICAgKiBAcGFyYW0gcGFydHMgYXJyYXkgb2Ygc29hcCBNSU1FIHBhcnRzCi0gICAqIEBwYXJhbSBwYXJ0TmFtZSBwYXJ0IG5hbWUgdG8gZmluZAotICAgKiBAcmV0dXJuIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0ICJDb250ZW50LUlEIiB2YWx1ZSwgCi0gICAqIGlmIHRoZSBwYXJ0IGRvZXNudCBmb3VuZCwgcmV0dW5zIG51bGwKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGZpbmRNSU1FUGFydChDb2xsZWN0aW9uIHBhcnRzLCBTdHJpbmcgcGFydE5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaWYocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICByZXR1cm4gbnVsbDsKLSAgICBJdGVyYXRvciBpcGFydHMgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE1pbWVQYXJ0IHBhcnQgPSAoTWltZVBhcnQpaXBhcnRzLm5leHQoKTsKLSAgICAgIFN0cmluZyBtX3BhcnROYW1lID0gTUlNRVV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgICAgcGFydC5nZXRIZWFkZXJzKCksIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotCi0gICAgICAvLyBjaGVjayB2YWx1ZSBmb3JtYXQgPHBhcnRuYW1lPVVJREBob3N0PgotICAgICAgaWYgKChtX3BhcnROYW1lICE9IG51bGwpICYmIChtX3BhcnROYW1lLnN0YXJ0c1dpdGgoIjwiKSkgJiYgCi0gICAgICAgICAgKG1fcGFydE5hbWUuaW5kZXhPZigiPSIpICE9IC0xKSAmJiAKLSAgICAgICAgICAoZW5jb2RlUGFydE5hbWUobV9wYXJ0TmFtZS5zdWJzdHJpbmcoMSwgbV9wYXJ0TmFtZS5pbmRleE9mKCI9IikpKS5lcXVhbHMocGFydE5hbWUpKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGFydE5hbWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnQgdmFsdWUgZnJvbSBNSU1FQ29udGVudCBlbGVtZW50Ci0gICAqIEBwYXJhbSBwYXJ0IE1JTUVQYXJ0IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1JTUVDb250ZW50UGFydChNSU1FUGFydCBwYXJ0KSB7Ci0gICAgTGlzdCBsaXN0ID0gcGFydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoTUlNRUNvbnRlbnQpIGxpc3QuZ2V0KDApKS5nZXRQYXJ0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxY2RmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQVAxOTMxCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJvb3QtcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudGl0eSBib2R5IG9mIHRoZSByb290LXBhcnQgb2YgbXVsdGlwYXJ0L3JlbGF0ZWQKLSAqIG1lc3NhZ2UgaXMgYSBzb2FwOkVudmVsb3BlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MzEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gY2hlY2sgZm9yIHRoZSByb290IHBhcnQKLSAgICBpZihlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpICYmCi0gICAgICAgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpICE9IG51bGwpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgLy8gcGFyc2Ugcm9vdCBwYXJ0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpLmdldENvbnRlbnQoKSk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBlbnRpdHkgYm9keQotICAgICAgRWxlbWVudCBlbCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IHNvYXA6RW52ZWxvcGUsIHRoZW4gZmFpbCAgCi0gICAgICBpZighZWwuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTSVRhZy5FTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TG9jYWxQYXJ0KCkpIHx8Ci0gICAgICAgICAhZWwuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSVRhZy5FTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgInRoZSBlbnRpdHkgYm9keSBvZiB0aGUgcm9vdCBwYXJ0IGlzIHsiICsKLSAgICAgICAgICAgIGVsLmdldE5hbWVzcGFjZVVSSSgpICsgIn0iICsgZWwuZ2V0TG9jYWxOYW1lKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgInRoZSBlbnRpdHkgYm9keSBvZiB0aGUgcm9vdCBwYXJ0IGRvZXMgbm90IGNvbnRhaW4gIiArCi0gICAgICAgICAgICAiXCJzb2FwOkVudmVsb3BlXCIgZWxlbWVudCIsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWMwZmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQVAxOTMyCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgY29udGFpbmluZyBhIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlcgotICogZmllbGQtdmFsdWUgd2l0aCBhIG1lZGlhIHR5cGUgb2YgIm11bHRpcGFydC9yZWxhdGVkIjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIG1lc3NhZ2UsIHRoZSBDb250ZW50LVR5cGUgSFRUUCBoZWFkZXIgZmllbGQtdmFsdWUKLSAqIGhhcyBhIHR5cGUgcGFyYW1ldGVyIHdpdGggYSB2YWx1ZSBvZiAidGV4dC94bWwiIHdoZW4gaXQgaGFzIGEgbWVkaWEgdHlwZSBvZgotICogIm11bHRpcGFydC9yZWxhdGVkIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTMyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTMyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGNoZWNrIGZvciBtdWx0aXBhcnQvcmVsYXRlZCBjb250ZW50IHR5cGUKLSAgICBTdHJpbmcgY29udGVudF90eXBlID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLCAKLSAgICAgICAgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICAKLSAgICBpZigoY29udGVudF90eXBlID09IG51bGwpIHx8IAotICAgICAgICghY29udGVudF90eXBlLmVxdWFsc0lnbm9yZUNhc2UoV1NJQ29uc3RhbnRzLkNPTlRFTlRfVFlQRV9NVUxUSVBBUlQpKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0gCi0gICAgZWxzZSAgCi0gICAgewotICAgICAgU3RyaW5nIHN1YlR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwgCi0gICAgICAgICAgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAidHlwZSIpOwotICAgICAgaWYoKHN1YlR5cGUgPT0gbnVsbCkKLSAgICAgICAgfHwgIXN1YlR5cGUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICJUaGUgXCJ0eXBlXCIgcGFyYW1ldGVyIHZhbHVlIGlzIFwiIiArIHN1YlR5cGUgKyAiXCIiLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0OTFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRVV0aWxzOwotCi0vKioKLSAqIEFQMTkzMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIGEgZGVzY3JpcHRpb24gYmluZHMgYSB3c2RsOm1lc3NhZ2UgcGFydCB0byBhCi0gKiBtaW1lOmNvbnRlbnQgZWxlbWVudCwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQgaW4gYSBtZXNzYWdlIGhhcyBhCi0gKiBjb250ZW50LWlkIGhlYWRlciB3aXRoIGEgZ2xvYmFsbHkgdW5pcXVlIHZhbHVlIG9mIHRoZSBmb3JtCi0gKiAmbHQ7cGFydG5hbWU9SURAaG9zdG5hbWUmZ3Q7LCB3aGVyZSAncGFydG5hbWUnIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YKLSAqIHRoZSB3c2RsOnBhcnQgZWxlbWVudCByZWZlcmVuY2VkIGJ5IHRoZSBtaW1lOmNvbnRlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkzMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkzMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBnZXQgbWVzc2FnZSBtaW1lIHBhcnRzCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgLy8gY2hlY2sgbGlzdCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBsaXN0IG1pbWUgcGFydHMgZnJvbSBkZWZpbml0aW9uCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lID0gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICBMaXN0IHBhcnRzID0gbWltZS5nZXRNSU1FUGFydHMoKTsKLSAgICAgIAotICAgICAgLy8gc2tpcCByb290IHBhcnQKLSAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldE1JTUVDb250ZW50UGFydCgoTUlNRVBhcnQpIHBhcnRzLmdldChpKSk7Ci0gICAgICAgIC8vIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0Ci0gICAgICAgIGlmIChmaW5kTUlNRVBhcnQobWltZVBhcnRzLmdldFBhcnRzKCksIHBhcnROYW1lKSA9PSBudWxsKSAKLSAgICAgICAgeyAgICAgICAgICAgIAotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY29ycmVzcG9uZGluZyBiaW5kaW5nICIgKwotICAgICAgICAgICAgICAib3BlcmF0aW9uIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgCi0gICAgICAgICAgICAgICJcIiBkb2VzIG5vdCBjb250YWluIHBhcnQgXCIiICsgcGFydE5hbWUgKyAiXCIiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gCi0gICAgICAgIHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIGZpbmQgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQKLSAgICogQHBhcmFtIHBhcnRzIGFycmF5IG9mIHNvYXAgTUlNRSBwYXJ0cwotICAgKiBAcGFyYW0gcGFydE5hbWUgcGFydCBuYW1lIHRvIGZpbmQKLSAgICogQHJldHVybiBjb3JyZXNwb25kaW5nIE1JTUUgcGFydCAiQ29udGVudC1JRCIgdmFsdWUsIAotICAgKiBpZiB0aGUgcGFydCBkb2VzbnQgZm91bmQsIHJldHVucyBudWxsCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBmaW5kTUlNRVBhcnQoQ29sbGVjdGlvbiBwYXJ0cywgU3RyaW5nIHBhcnROYW1lKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24sIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIGlmKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgSXRlcmF0b3IgaXBhcnRzID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUgKGlwYXJ0cy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgaSA9IGkgKyAxOwotICAgICAgTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgU3RyaW5nIG1fcGFydE5hbWUgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBwYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0KLSAgICAgIC8vIGNoZWNrIHZhbHVlIGZvcm1hdCA8cGFydG5hbWU9VUlEQGhvc3RuYW1lPgotICAgICAgaWYgKChtX3BhcnROYW1lICE9IG51bGwpICYmIG1fcGFydE5hbWUuc3RhcnRzV2l0aCgiPCIpICYmIG1fcGFydE5hbWUuZW5kc1dpdGgoIj4iKSkgCi0gICAgICB7Ci0gICAgICAgIGludCBpZHgsIGF0SWR4OwotICAgICAgICBTdHJpbmcgZW5QYXJ0TmFtZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyB1aWQgPSBudWxsOwotICAgICAgICBTdHJpbmcgaG9zdCA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICAvLyBnZXQgcGFydCBuYW1lIGZyb20gY29udGVudC1pZAotICAgICAgICBpZiAoKGlkeCA9IG1fcGFydE5hbWUuaW5kZXhPZigiPSIpKSAhPSAtMSkgCi0gICAgICAgIHsKLSAgICAgICAgICBlblBhcnROYW1lID0gZW5jb2RlUGFydE5hbWUobV9wYXJ0TmFtZS5zdWJzdHJpbmcoMSwgaWR4KSk7IAotICAgICAgICB9Ci0gICAgICAgIC8vIGdldCB1aWQgYW5kIGhvc3RuYW1lIGZyb20gY29udGVudC1pZAotICAgICAgICBpZiAoKChhdElkeCA9IG1fcGFydE5hbWUuaW5kZXhPZigiQCIpKSAhPSAtMSkgJiYgKGF0SWR4ID4gaWR4KSkgCi0gICAgICAgIHsKLSAgICAgICAgICB1aWQgPSBtX3BhcnROYW1lLnN1YnN0cmluZyhpZHgrMSwgYXRJZHgpOwotICAgICAgICAgIGhvc3QgPSBtX3BhcnROYW1lLnN1YnN0cmluZyhhdElkeCsxLCBtX3BhcnROYW1lLmxlbmd0aCgpLTEpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGlmIHBhcnQgbmFtZXMgbWF0Y2gsIHZhbGlkYXRlIGZvcm1hdAotICAgICAgICBpZigoZW5QYXJ0TmFtZSAhPSBudWxsKSAmJiBlblBhcnROYW1lLmVxdWFscyhwYXJ0TmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZigodWlkID09IG51bGwpIHx8ICh1aWQubGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgVUlEIGZvcm1hdCIpOwotICAgICAgICAgIGlmKGhvc3QgPT0gbnVsbCkgCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgaG9zdCBmb3JtYXQiKTsKLSAgICAgICAgICAvLyBjaGVjayBmb3IgbWFsZm9ybWVkIFVSTAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBVUkwoIkhUVFAiLCBob3N0LCAiIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgaG9zdCBmb3JtYXQiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIG1fcGFydE5hbWU7Ci0gICAgICAgIH0gCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICogQHBhcmFtIHBhcnQgTUlNRVBhcnQgZWxlbWVudAotICAgKiBAcmV0dXJuIHRoZSBwYXJ0IHZhbHVlIGZyb20gTUlNRUNvbnRlbnQgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TUlNRUNvbnRlbnRQYXJ0KE1JTUVQYXJ0IHBhcnQpIAotICB7Ci0gICAgTGlzdCBsaXN0ID0gcGFydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoTUlNRUNvbnRlbnQpIGxpc3QuZ2V0KDApKS5nZXRQYXJ0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMwNjA1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLQotLyoqCi0gKiBBUDE5MzQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcgZmllbGQgb2YgYSBwYXJ0IGluIGEKLSAqIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UgaGFzIGEgdmFsdWUgb2YgIjdiaXQiLCAiOGJpdCIsICJiaW5hcnkiLAotICogInF1b3RlZC1wcmludGFibGUiIG9yICJiYXNlNjQiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MzQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gY2hlY2sgZm9yIG11bHRpcGFydC9yZWxhdGVkIGNvbnRlbnQgdHlwZQotICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIC8vIGdldCBNSU1FIHBhcnRzCi0gICAgICBNaW1lUGFydHMgcGFydHMgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCk7Ci0gICAgICBpZihwYXJ0cy5jb3VudCgpID09IDApIAotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgCUl0ZXJhdG9yIGlwYXJ0cyA9IHBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgLy8gY2hlY2sgZWFjaCBwYXJ0IGZvciB0aGUgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBmaWVsZAotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgICAgIFN0cmluZyB0eXBlX3ZhbHVlID0gTUlNRVV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgIHBhcnQuZ2V0SGVhZGVycygpLAotICAgICAgICAgICAgICBNSU1FQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HKTsKLSAgICAgICAgICBpZiAodHlwZV92YWx1ZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCh0eXBlX3ZhbHVlID09IG51bGwpIHx8ICEodHlwZV92YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCI3Yml0IikgfHwKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoIjhiaXQiKSB8fCAKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpIHx8Ci0gICAgICAgICAgICAgICAgdHlwZV92YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJxdW90ZWQtcHJpbnRhYmxlIikgfHwKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImJpbmFyeSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICIoIiArIChpKzEpICsKLSAgICAgICAgICAgICAgICAgICIpLCBwYXJ0IGhlYWRlciBmaWVsZCBcIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdcIiBoYXMgaW5jb3JyZWN0IHZhbHVlIFwiIisKLSAgICAgICAgICAgICAgICAgIHR5cGVfdmFsdWUrIlwiIiwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjUxZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotLyoqCi0gKiBBUDE5MzUKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVuY29kaW5nIG9mIHRoZSBib2R5IG9mIGEgcGFydCBpbiBhCi0gKiBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlIGNvbmZvcm1zIHRvIHRoZSBlbmNvZGluZyBpbmRpY2F0ZWQgYnkgdGhlCi0gKiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGZpZWxkLXZhbHVlLAotICogYXMgc3BlY2lmaWVkIGJ5IFJGQzIwNDUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkzNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkzNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZighZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0gCi0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAvLyBnZXQgTUlNRSBwYXJ0cwotICAgICAgTWltZVBhcnRzIHBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgaWYocGFydHMuY291bnQoKSA9PSAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjaGVjayBlYWNoIHBhcnQgZm9yIHRoZSBlbmNvZGluZyBtYXRjaAotICAgICAgCUl0ZXJhdG9yIGlwYXJ0cyA9IHBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIAlpbnQgaSA9IDA7Ci0gICAgICAJTWltZVBhcnQgcm9vdCA9IHBhcnRzLmdldFJvb3RQYXJ0KCk7Ci0gICAgICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaSA9IDE7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAJTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgICAJCi0gICAgICAgICAgICAvLyBnZXQgZW5jb2RpbmcgZnJvbSBoZWFkZXIKLSAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9ICBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShwYXJ0LmdldEhlYWRlcnMoKSwgCi0gICAgICAgICAgICAJSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORyk7Ci0gICAgICAgICAgCi0gICAgICAgICAgIAlpZiAoKHBhcnQgPT0gcm9vdCkgfHwgCi0gICAgICAgICAgIAkJKChlbmNvZGluZyAhPSBudWxsKSAmJiBlbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJiYXNlNjQiKSkpCi0gICAgICAgICAgICAgIGNoZWNrUGFydChwYXJ0LCBlbmNvZGluZywgZmFsc2UpOwotICAgICAgICAgIAllbHNlIAotICAgICAgICAgIAkgIGNoZWNrUGFydChwYXJ0LCBlbmNvZGluZywgdHJ1ZSk7Ci0gICAgICAgICAgfSBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICJwYXJ0ICIrKGkrMSkrIiBFcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogQ2hlY2sgbWVzc2FnZSBlbnRyeSB0byBlbmNvZGluZyBjb25mb3JtaXR5IAotICAgKiBAcGFyYW0gZW50cnkgbWVzc2FnZSBlbnRyeQotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBlbmNvZGluZyBjb25mb3JtaXR5ICAKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tQYXJ0KE1pbWVQYXJ0IHBhcnQsIFN0cmluZyAgZW5jb2RpbmcsIGJvb2xlYW4gZW5jb2RlZCkgCi0gICAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24sIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGNvbnRlbnQgPSBudWxsOwotICAgIGlmIChlbmNvZGVkKQotICAgICAgIGNvbnRlbnQgPSBuZXcgU3RyaW5nKFV0aWxzLmRlY29kZUJhc2U2NChwYXJ0LmdldENvbnRlbnQoKSkpOwotICAgICBlbHNlCi0gICAgCWNvbnRlbnQgPSBwYXJ0LmdldENvbnRlbnQoKTsKLSAgICAKLSAgICBpZihlbmNvZGluZyA9PSBudWxsKSAKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIC8vIGNoZWNrIDdiaXQKLSAgICB9IGVsc2UgaWYoZW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZSgiN2JpdCIpKSB7Ci0gICAgICBjaGVja09uN2JpdChjb250ZW50KTsKLSAgICAvLyBjaGVjayA4Yml0Ci0gICAgfSBlbHNlIGlmKGVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoIjhiaXQiKSkgewotICAgICAgY2hlY2tPbjhiaXQoY29udGVudCk7Ci0gICAgLy8gY2hlY2sgcXVvdGVkLXByaW50YWJsZQotICAgIH0gZWxzZSBpZihlbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJxdW90ZWQtcHJpbnRhYmxlIikpIHsKLSAgICAgIGNoZWNrT25RdW90ZWRQcmludGFibGUoY29udGVudCk7Ci0gICAgLy8gY2hlY2sgYmFzZTY0Ci0gICAgfSBlbHNlIGlmKGVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpKSB7Ci0gICAgICBjaGVja09uQmFzZTY0KGNvbnRlbnQpOwotICAgIH0KLSAgICAvLyB3ZSBkb250IGNoZWNrIGJpbmFyeSBlbmNvZGluZywgc2luY2UgbWVzc2FnZSBjYW4gY29udGFpbnMgYW55IGNoYXJzIAotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgN2JpdCBlbmNvZGVkIG1lc3NhZ2UgKFJGQzIwNDUpCi0gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdG8gY2hlY2sKLSAgICogQHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGlmIG1lc3NhZ2UgZG9lcyBub3QgY29uZm9ybQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT243Yml0KFN0cmluZyBtZXNzYWdlKSAKLSAgICB0aHJvd3MgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gc3RycyA9IHNwbGl0KG1lc3NhZ2UpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3Ryc1tpXTsKLSAgICAgIAotICAgICAgLy8gY2hlY2sgc3RyaW5nIGxlbmd0aAotICAgICAgaWYoc3RyLmxlbmd0aCgpID4gOTk4KSAKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsZW5ndGggKCIgKyBzdHIubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAiKSBncmVhdGVyIHRoYW4gOTk4Iik7Ci0gICAgICB9Ci0gICAgICAvLyBObyBvY3RldHMgd2l0aCBkZWNpbWFsIHZhbHVlcyBncmVhdGVyIHRoYW4gMTI3Ci0gICAgICAvLyBhcmUgYWxsb3dlZCBhbmQgbmVpdGhlciBhcmUgTlVMcyAob2N0ZXRzIHdpdGggZGVjaW1hbCB2YWx1ZSAwKS4gIENSCi0gICAgICAvLyhkZWNpbWFsIHZhbHVlIDEzKSBhbmQgTEYgKGRlY2ltYWwgdmFsdWUgMTApIG9jdGV0cyBvbmx5IG9jY3VyIGFzCi0gICAgICAvLyBwYXJ0IG9mIENSTEYgbGluZSBzZXBhcmF0aW9uIHNlcXVlbmNlcy4KLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYoKGNoYXJzW2pdID4gMTI3KSB8fCAoY2hhcnNbal0gPT0gMCkgfHwgCi0gICAgICAgICAgICAoY2hhcnNbal0gPT0gMTApIHx8IChjaGFyc1tqXSA9PSAxMykpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNoYXIgKCIgKyBjaGFyc1tqXSArIAotICAgICAgICAgICAgICAiKVtjb2RlPSIgKyAoYnl0ZSkgY2hhcnNbal0gKyAiIHBvc2l0aW9uPSIgKyBqICsgCi0gICAgICAgICAgICAgICJdIGRvZXMgbm90IGFsbG93cyBpbiA3Yml0IGVuY29kaW5nIGNvbnRlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiA4Yml0IGVuY29kZWQgbWVzc2FnZSAoUkZDMjA0NSkKLSAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBjaGVjawotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBjb25mb3JtCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tPbjhiaXQoU3RyaW5nIG1lc3NhZ2UpIAotICAgIHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzdHJzID0gc3BsaXQobWVzc2FnZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdHJzW2ldOwotICAgICAgCi0gICAgICAvLyBjaGVjayBzdHJpbmcgbGVuZ3RoCi0gICAgICBpZihzdHIubGVuZ3RoKCkgPiA5OTgpIAotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGxlbmd0aCAoIiArIHN0ci5sZW5ndGgoKSArIAotICAgICAgICAgICAgIikgb2YgdGhlIGxpbmUgKCIgKyAoaSsxKSArICIpIGdyZWF0ZXIgdGhhbiA5OTgiKTsKLSAgICAgIH0KLSAgICAgIC8vIG9jdGV0cyB3aXRoIGRlY2ltYWwgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjcKLSAgICAgIC8vIG1heSBiZSB1c2VkLiAgQXMgd2l0aCAiN2JpdCBkYXRhIiBDUiBhbmQgTEYgb2N0ZXRzIG9ubHkgb2NjdXIgYXMgcGFydAotICAgICAgLy8gb2YgQ1JMRiBsaW5lIHNlcGFyYXRpb24gc2VxdWVuY2VzIGFuZCBubyBOVUxzIGFyZSBhbGxvd2VkLiAKLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYoKGNoYXJzW2pdID09IDApIHx8IChjaGFyc1tqXSA9PSAxMCkgfHwgKGNoYXJzW2pdID09IDEzKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY2hhciAoIiArIGNoYXJzW2pdICsgCi0gICAgICAgICAgICAgICIpW2NvZGU9IiArIChieXRlKSBjaGFyc1tqXSArICIgcG9zaXRpb249IiArIGogKyAKLSAgICAgICAgICAgICAgIl0gZG9lcyBub3QgYWxsb3dzIGluIDhiaXQgZW5jb2RpbmcgY29udGVudCIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgcXVvdGVkLXByaW50YWJsZSBlbmNvZGVkIG1lc3NhZ2UgKFJGQzIwNDUpCi0gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdG8gY2hlY2sKLSAgICogQHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGlmIG1lc3NhZ2UgZG9lcyBub3QgY29uZm9ybQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25RdW90ZWRQcmludGFibGUoU3RyaW5nIG1lc3NhZ2UpCi0gICAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHN0cnMgPSBzcGxpdChtZXNzYWdlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gY2hlY2sgbGVuZ3RoCi0gICAgICAvLyBSRkMyMDQ1Ci0gICAgICAvLyAoNSkgICAoU29mdCBMaW5lIEJyZWFrcykgVGhlIFF1b3RlZC1QcmludGFibGUgZW5jb2RpbmcKLSAgICAgIC8vUkVRVUlSRVMgdGhhdCBlbmNvZGVkIGxpbmVzIGJlIG5vIG1vcmUgdGhhbiA3NgotICAgICAgLy9jaGFyYWN0ZXJzIGxvbmcuICBJZiBsb25nZXIgbGluZXMgYXJlIHRvIGJlIGVuY29kZWQKLSAgICAgIC8vd2l0aCB0aGUgUXVvdGVkLVByaW50YWJsZSBlbmNvZGluZywgInNvZnQiIGxpbmUgYnJlYWtzCi0gICAgICAvL211c3QgYmUgdXNlZC4gIEFuIGVxdWFsIHNpZ24gYXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIGEKLSAgICAgIC8vZW5jb2RlZCBsaW5lIGluZGljYXRlcyBzdWNoIGEgbm9uLXNpZ25pZmljYW50ICgic29mdCIpCi0gICAgICAvL2xpbmUgYnJlYWsgaW4gdGhlIGVuY29kZWQgdGV4dC4KLSAgICAgIGlmKCgoc3Ryc1tpXS5pbmRleE9mKCJcdCIpICE9IC0xKSB8fCAoc3Ryc1tpXS5pbmRleE9mKCIgIikgIT0gLTEpKSAmJgotICAgICAgICAgIChzdHJzW2ldLmxlbmd0aCgpID4gNzYpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGxlbmd0aCAoIiArIHN0cnNbaV0ubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAKLSAgICAgICAgICAgICIpIGdyZWF0ZXIgdGhhbiA3NiwgXCJzb2Z0XCIgbGluZSBicmVha3MgbXVzdCBiZSB1c2VkIik7Ci0gICAgICB9Ci0KLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0cnNbaV0udG9DaGFyQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hhcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIC8vKDEpICAgKEdlbmVyYWwgOGJpdCByZXByZXNlbnRhdGlvbikgQW55IG9jdGV0LCBleGNlcHQgYSBDUiBvcgotICAgICAgICAvL0xGIHRoYXQgaXMgcGFydCBvZiBhIENSTEYgbGluZSBicmVhayBvZiB0aGUgY2Fub25pY2FsCi0gICAgICAgIC8vKHN0YW5kYXJkKSBmb3JtIG9mIHRoZSBkYXRhIGJlaW5nIGVuY29kZWQsIG1heSBiZQotICAgICAgICAvL3JlcHJlc2VudGVkIGJ5IGFuICI9IiBmb2xsb3dlZCBieSBhIHR3byBkaWdpdAotICAgICAgICAvL2hleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvY3RldCdzIHZhbHVlLiAgVGhlCi0gICAgICAgIC8vZGlnaXRzIG9mIHRoZSBoZXhhZGVjaW1hbCBhbHBoYWJldCwgZm9yIHRoaXMgcHVycG9zZSwKLSAgICAgICAgLy9hcmUgIjAxMjM0NTY3ODlBQkNERUYiLiAgVXBwZXJjYXNlIGxldHRlcnMgbXVzdCBiZQotICAgICAgICAvL3VzZWQ7IGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSBub3QgYWxsb3dlZC4gIFRodXMsIGZvcgotICAgICAgICAvL2V4YW1wbGUsIHRoZSBkZWNpbWFsIHZhbHVlIDEyIChVUy1BU0NJSSBmb3JtIGZlZWQpIGNhbgotICAgICAgICAvL2JlIHJlcHJlc2VudGVkIGJ5ICI9MEMiLCBhbmQgdGhlIGRlY2ltYWwgdmFsdWUgNjEgKFVTLQotICAgICAgICAvL0FTQ0lJIEVRVUFMIFNJR04pIGNhbiBiZSByZXByZXNlbnRlZCBieSAiPTNEIi4gIFRoaXMKLSAgICAgICAgLy9ydWxlIG11c3QgYmUgZm9sbG93ZWQgZXhjZXB0IHdoZW4gdGhlIGZvbGxvd2luZyBydWxlcwotICAgICAgICAvL2FsbG93IGFuIGFsdGVybmF0aXZlIGVuY29kaW5nLgotICAgICAgICAvLyAoMikgICAoTGl0ZXJhbCByZXByZXNlbnRhdGlvbikgT2N0ZXRzIHdpdGggZGVjaW1hbCB2YWx1ZXMgb2YKLSAgICAgICAgLy8zMyB0aHJvdWdoIDYwIGluY2x1c2l2ZSwgYW5kIDYyIHRocm91Z2ggMTI2LCBpbmNsdXNpdmUsCi0gICAgICAgIC8vTUFZIGJlIHJlcHJlc2VudGVkIGFzIHRoZSBVUy1BU0NJSSBjaGFyYWN0ZXJzIHdoaWNoCi0gICAgICAgIC8vY29ycmVzcG9uZCB0byB0aG9zZSBvY3RldHMgKEVYQ0xBTUFUSU9OIFBPSU5UIHRocm91Z2gKLSAgICAgICAgLy9MRVNTIFRIQU4sIGFuZCBHUkVBVEVSIFRIQU4gdGhyb3VnaCBUSUxERSwKLSAgICAgICAgLy9yZXNwZWN0aXZlbHkpLgotICAgICAgICBpZigoY2hhcnNbal0gPT0gNjEpICYmIChjaGFycy5sZW5ndGggPiBqKzIpKSAKLSAgICAgICAgewotICAgICAgICAgIGlmKCFpc0hleChjaGFyc1tqKzFdKSB8fCAhaXNIZXgoY2hhcnNbaisyXSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInRoZSBxdW90ZWQgY2hhciAoIiArIAotICAgICAgICAgICAgICAgICBjaGFyc1tqXSArIGNoYXJzW2orMV0gKyBjaGFyc1tqKzJdICsgIikgaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGogKz0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBhbmQgdGFiCi0gICAgICAgIGVsc2UgaWYoKGNoYXJzW2pdICE9IDkpICYmIChjaGFyc1tqXSAhPSAzMikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBjaGVjayBpbnZhbGlkIHN5bWJvbAotICAgICAgICAgIGlmKChjaGFyc1tqXSA9PSAwKSB8fCAoY2hhcnNbal0gPT0gMTApIHx8IChjaGFyc1tqXSA9PSAxMykgfHwKLSAgICAgICAgICAgICAoY2hhcnNbal0gPCAzMykgfHwgKGNoYXJzW2pdID4gMTI2KSB8fCAoY2hhcnNbal0gPT0gNjEpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY2hhciAoIiArIGNoYXJzW2pdICsgCi0gICAgICAgICAgICAgICAgIilbY29kZT0iICsgKGJ5dGUpIGNoYXJzW2pdICsgIiBwb3NpdGlvbj0iICsgaiArIAotICAgICAgICAgICAgICAgICJdIG11c3QgYmUgcXVvdGVkIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgYmFzZTY0IGVuY29kZWQgbWVzc2FnZSAoUkZDMzU0OCkKLSAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBjaGVjawotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBjb25mb3JtCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tPbkJhc2U2NChTdHJpbmcgbWVzc2FnZSkKLSAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHN0cnMgPSBzcGxpdChtZXNzYWdlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0cnNbaV07Ci0gICAgICAKLSAgICAgIC8vIGNoZWNrIHN0cmluZyBsZW5ndGgKLSAgICAgIGlmKHN0ci5sZW5ndGgoKSA+IDc2KSAKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsZW5ndGggKCIgKyBzdHIubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAiKSBncmVhdGVyIHRoYW4gOTk4Iik7Ci0gICAgICB9Ci0gICAgICAvLyBjaGVjayBmb3IgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkvKyIKLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgY2hhciBjID0gY2hhcnNbaV07Ci0gICAgICAgIGlmKChjIDwgNDcpIHx8IChjID4gMTIyKSB8fCAoKGMgPiA1NykgJiYgKGMgPCA2NSkpIHx8IAotICAgICAgICAgICAoKGMgPiA5MCkgJiYgKGMgPCA5NykpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBjaGFyICgiICsgY2hhcnNbal0gKyAKLSAgICAgICAgICAgICAgIilbY29kZT0iICsgKGJ5dGUpIGNoYXJzW2pdICsgIiBwb3NpdGlvbj0iICsgaiArIAotICAgICAgICAgICAgICAiXSBkb2VzIG5vdCBhbGxvd3MgaW4gYmFzZTY0IGVuY29kaW5nIGNvbnRlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIHNwbGl0IHN0cmluZyB0byBhcnJheSBvZiBzdHJpbmdzIGFuZCB1c2UgYXMgZGVsaW1ldGVyIENSTEYKLSAgICogQHBhcmFtIHN0ciBvcmlnaW5hbCBzdHJpbmcKLSAgICogQHJldHVybiBhcnJheSBvZiBzdHJpbmdzCi0gICAqLwotICBwcml2YXRlIFN0cmluZ1tdIHNwbGl0KFN0cmluZyBzdHIpCi0gIHsKLSAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IoaW50IGlkeCA9IHN0ci5pbmRleE9mKCJcclxuIik7IGlkeCAhPSAtMTsgaWR4ID0gc3RyLmluZGV4T2YoIlxyXG4iKSkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChzdHIuc3Vic3RyaW5nKDAsIGlkeCkpOwotICAgICAgc3RyID0gc3RyLnN1YnN0cmluZyhpZHgrMik7Ci0gICAgfQotICAgIGxpc3QuYWRkKHN0cik7Ci0gICAgcmV0dXJuIChTdHJpbmdbXSkgbGlzdC50b0FycmF5KG5ldyBTdHJpbmdbbGlzdC5zaXplKCldKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBieXRlIGlzICIwMTIzNDU2Nzg5QUJDREVGIiByYW5nZSwgZmFsc2Ugb3RoZXdpc2UKLSAgICogQHBhcmFtIGMgY2hhcgotICAgKiBAcmV0dXJuIHRydWUgaWYgYnl0ZSBpcyAiMDEyMzQ1Njc4OUFCQ0RFRiIgcmFuZ2UsIGZhbHNlIG90aGV3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNIZXgoY2hhciBjKSB7Ci0gICAgcmV0dXJuICgoKGMgPj0gNDgpICYmIChjIDw9IDU3KSkgfHwgKChjID49IDY1KSAmJiAoYyA8PSA3MCkpKTsgCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOGFlNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAxOTM2Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIG1lc3NhZ2UsIGFsbCBNSU1FIGVuY2Fwc3VsYXRpb24gYm91bmRhcnkgc3RyaW5ncyAKLSAqIGFyZSBwcmVjZWRlZCB3aXRoIHRoZSBhc2NpaSBjaGFyYWN0ZXJzIENSICgxMykgYW5kIExGICgxMCkgCi0gKiBpbiB0aGF0IHNlcXVlbmNlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBBUDE5MzYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gaWYgYm91bmRhcnkgZXF1YWxzIG51bGwsIHRoZW4gcmVzdWx0IGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAgICAKLSAgICAvLyBvdGhlcndpc2UgaXQgaXMgdHJ1ZSAtLSBjaGVja2VkIGluIG1vbml0b3IKLSAgICAvLyBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgIC8vIEl0ZXJhdG9yIGkgPSBtaW1lUGFydHMuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgIC8vIGJvb2xlYW4gaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQgPSBmYWxzZTsKLSAgICAvL3doaWxlIChpLmhhc05leHQoKSAmJiAhaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQpCi0gICAgLy97Ci0gICAgLy8JTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpLm5leHQoKTsKLSAgICAvLwlTdHJpbmdbXSBib3VuZGFyaWVzID0gcGFydC5nZXRCb3VuZGFyeVN0cmluZ3MoKTsKLSAgICAvLwlmb3IgKGludCBqID0gMDsgajxib3VuZGFyaWVzLmxlbmd0aDsgaisrKQotICAgIC8vCXsKLSAgICAvLwkJaWYgKCFib3VuZGFyaWVzW2pdLnN0YXJ0c1dpdGgoIiYjeGQ7XG4iKSkKLSAgICAvLwkJewotICAgIC8vCQkJaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQgPSB0cnVlOwotICAgIC8vCQkJcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgLy8JCQlmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoYm91bmRhcmllc1tqXSwgZW50cnlDb250ZXh0KTsKLSAgICAvLwkJCWJyZWFrOwotICAgIC8vCQl9Ci0gICAgLy8JfQotICAgIC8vfQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Mi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmI3OTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5NDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEFQMTk0MgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBwYXJ0IG9mIGEgbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSB0aGF0IGlzIGJvdW5kCi0gKiB0byBhIG1pbWU6Y29udGVudCB0aGF0IHJlZmVycyB0byBnbG9iYWwgZWxlbWVudCBkZWNsYXJhdGlvbiAodmlhIHRoZSBlbGVtZW50Ci0gKiBhdHRyaWJ1dGUgb2YgdGhlIHdzZGw6cGFydCBlbGVtZW50KTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgYm91bmQgbWVzc2FnZSBwYXJ0IGlzIHNlcmlhbGl6ZWQgd2l0aGluIHRoZSBNSU1FCi0gKiBwYXJ0IGFzIGEgc2VyaWFsaXphdGlvbiBvZiBhbiBYTUwgaW5mb3NldCB3aG9zZSByb290IGVsZW1lbnQgaXMgZGVzY3JpYmVkIGJ5Ci0gKiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5NDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5NDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgCXRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKTsKLSAgICAgIAotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIG5vbi1yb290IE1JTUUgcGFydHMKLSAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgICBpZiAobWltZVBhcnRzLmNvdW50KCk8IDIpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgICAvLyBHZXR0aW5nIGFuIG9wZXJhdGlvbiBtYXRjaGVkIGZvciBhIG1lc3NhZ2UKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKTsKLSAgICAgICAgLy8gSWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAgIC8vIEdldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhbmQgbWVzc2FnZQotICAgICAgICBMaXN0IGV4dEVsZW1zOwotICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0gICAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gbWltZTpjb250ZW50IGVsZW1lbnQgdGhhdCByZWZlcnMgdG8gZ2xvYmFsIGVsZW1lbnQgZGVjbGFyYXRpb24gCi0gICAgICAgIGJvb2xlYW4gbWltZUNvbnRlbnRGb3VuZCA9IGZhbHNlOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBtZXNzYWdlIE1JTUUgcGFydHMKLSAgICAgICAgSXRlcmF0b3IgaU1pbWVQYXJ0cyA9IG1pbWVQYXJ0cy5nZXRQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgd2hpbGUgKGlNaW1lUGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAJICBpID0gaSArIDE7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIE1JTUUgcGFydAotICAgICAgICAgIE1pbWVQYXJ0IG1pbWVQYXJ0ID0gKE1pbWVQYXJ0KWlNaW1lUGFydHMubmV4dCgpOwotICAgICAgICAgIC8vIEdldHRpbmcgYSBwYXJ0IG5hbWUgZm9ybSB0aGUgQ29udGVudC1JRCBoZWFkZXIKLSAgICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICAgIG1pbWVQYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaW50IGlkeCA9IHBhcnROYW1lLmluZGV4T2YoIj0iKTsKLSAgICAgICAgICAgIGlmKChpZHggIT0gLTEpICYmIHBhcnROYW1lLnN0YXJ0c1dpdGgoIjwiKSkKLSAgICAgICAgICAgICAgcGFydE5hbWUgPSBlbmNvZGVQYXJ0TmFtZShwYXJ0TmFtZS5zdWJzdHJpbmcoMSwgaWR4KSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb3VsZCBub3QgZXh0cmFjdCBhIHBhcnQgbmFtZSBmcm9tIHRoZSBoZWFkZXIsCi0gICAgICAgICAgICAvLyBwcm9jZWVkIHdpdGggdGhlIG5leHQgTUlNRSBwYXJ0Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSBhIG1pbWU6Y29udGVudCBlbGVtZW50Ci0gICAgICAgICAgaWYgKGJvdW5kVG9NaW1lQ29udGVudChleHRFbGVtcywgcGFydE5hbWUpICYmIG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQKLSAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldFBhcnRzKCkuZ2V0KHBhcnROYW1lKTsKLSAgICAgICAgICAgIFFOYW1lIHJlZk5hbWU7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcGFydCByZWZlcnMgdG8gZ2xvYmFsIGVsZW1lbnQgZGVjbGFyYXRpb24KLSAgICAgICAgICAgIGlmIChwYXJ0ICE9IG51bGwgJiYgKHJlZk5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1pbWVDb250ZW50Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAvLyBUcnlpbmcgdG8gcGFyc2UgcGFydCBjb250ZW50Ci0gICAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IG51bGw7Ci0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZG9jID0gWE1MVXRpbHMucGFyc2VYTUwobWltZVBhcnQuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhbiBYTUwgaW5mb3NldCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBib3VuZCBtZXNzYWdlIHBhcnQgb2YgdGhlICIKLSAgICAgICAgICAgICAgICAgICsgIk1JTUUgcGFydCBudW1iZXIgIiArIChpICsgMSkgKyAiIGlzIGludmFsaWQgWE1MIGluZm9zZXQuIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBRTmFtZSBvYmplY3Qgb2YgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICAgICAgICBRTmFtZSByb290TmFtZSA9IG5ldyBRTmFtZSgKLSAgICAgICAgICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgZG9jLmdldERvY3VtZW50RWxlbWVudCgpLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgLy8gSWYgdGhlIG5hbWVzIG9mIHRoZSByb290IGVsZW1lbnQgYW5kIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQKLSAgICAgICAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgaWYgKCFyZWZOYW1lLmVxdWFscyhyb290TmFtZSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHJvb3QgZWxlbWVudCBuYW1lIGlzICIKLSAgICAgICAgICAgICAgICAgICsgcm9vdE5hbWUgKyAiLCB0aGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzICIKLSAgICAgICAgICAgICAgICAgICsgcmVmTmFtZSArICIuIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgbm8gbWltZTpjb250ZW50UyBmb3VuZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgICBpZiAoIW1pbWVDb250ZW50Rm91bmQpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgYSBwYXJ0IGlzIGJvdW5kIGJ5IGEgbWltZTpjb250ZW50IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHBhcmFtIHBhcnQgYSBwYXJ0IG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhIHBhcnQgaXMgYm91bmQgYnkgbWltZTpjb250ZW50LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYm91bmRUb01pbWVDb250ZW50KExpc3QgZXh0RWxlbXMsIFN0cmluZyBwYXJ0KQotICB7Ci0gICAgaWYgKGV4dEVsZW1zICE9IG51bGwgJiYgZXh0RWxlbXMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICAvLyBFeHBlY3RlZCB0aGUgZmlyc3QgZXh0IGVsZW0gaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lUGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudCBuZWVkZWQKLSAgICAgICAgICBMaXN0IGVsZW1zID0gKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChpKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgaWYgKGVsZW1zLnNpemUoKSA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgZmlyc3QgZWxlbWVudAotICAgICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWxlbXMuZ2V0KDApOwotICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50IGFuZCBpdCBiaW5kcyBhIHBhcnQKLSAgICAgICAgICAgIGlmIChlbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKQotICAgICAgICAgICAgICAmJiBwYXJ0LmVxdWFscygoKE1JTUVDb250ZW50KWVsZW0pLmdldFBhcnQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYmYzMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotLyoqCi0gKiBBUDE5NDUKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBDb250ZW50LVR5cGUgSFRUUCBoZWFkZXIgZmllbGQtdmFsdWUgaW4gYSBtZXNzYWdlIAotICogaXMgZWl0aGVyICJtdWx0aXBhcnQvcmVsYXRlZCIgb3IgInRleHQveG1sIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTQ1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQVAxOTQ1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBoZWFkZXJOYW1lID0gSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFOwotCi0gICAgLy8gR2V0dGluZyBhIGhlYWRlcgotICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyQXR0cmlidXRlKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgaGVhZGVyTmFtZSk7Ci0gICAgLy8gSWYgaGVhZGVyVmFsdWUgaXMgbnVsbCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgIGlmIChoZWFkZXJWYWx1ZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAKLSAgICAvLyBJZiB0aGUgaGVhZGVyIGlzICJtdWx0aXBhcnQvcmVsYXRlZCIgb3IgInRleHQveG1sIiwKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgZWxzZSBpZiAoaGVhZGVyVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX01VTFRJUEFSVCkKLSAgICAgICAgfHwgaGVhZGVyVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICB7Ci0gICAgfQotICAgIC8vIGVsc2UgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIGhlYWRlclZhbHVlLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZjBmMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAxOTQ2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UKLSAqIGNvbnRhaW5pbmcgbm9uLXJvb3QgcGFydHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGNhbmRpZGF0ZSBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlCi0gKiBjb250YWluaW5nIG5vbi1yb290IHBhcnRzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5NDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5NDYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgTUlNRSBwYXJ0cywgdGhlIGFzc2VydGlvbiBwYXNzZWQgCi0gICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5jb3VudCgpID4gMSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBUaGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTBlNjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDUxMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDUxMDAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgIG5vbi1tdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlIGluIHRoZSBsb2cgZmlsZSwgd2l0aCBhbiBIVFRQIGVudGl0eS1ib2R5LjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgU09BUCBlbnZlbG9wZSBpcyB0aGUgZXhjbHVzaXZlIHBheWxvYWQgb2YgdGhlIEhUVFAgZW50aXR5LWJvZHkuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIEFQNTEwMCBleHRlbmRzIFNTQlA1MTAwIAotewotCS8qKgotICAgICAqIENvbnN0cnVjdG9yLgotCSAqIEBwYXJhbSBpbXBsCi0JICovCi0JcHVibGljIEFQNTEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKSAKLQl7Ci0JCXN1cGVyKGltcGwpOwotCX0KLQotCXB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0JICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0JICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotCSAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotCXsKLQkgIC8vIElmIHRoZXJlIGlzIGEgU09BUCBNZXNzYWdlIHdpdGggQXR0YWNobWVudHMsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLQkgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotCSAgewotCSAgCXJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsIGZhaWx1cmVEZXRhaWwpOwotCSAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUodGVzdEFzc2VydGlvbiwgZW50cnlDb250ZXh0KTsKLQkgIH0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVA1MTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVA1MTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYTJjYjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDUxMDEKLSAqIDxjb250ZXh0PkZvciBhIG5vbi1tdWx0aXBhcnQvcmVsYXRlZCBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbG9nIGZpbGUuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgbWVzc2FnZSBtdXN0IGhhdmUgYSAiQ29udGVudC1UeXBlIiBIVFRQIGhlYWRlciBmaWVsZC4gIFRoZSAiQ29udGVudC1UeXBlIiBIVFRQIGhlYWRlciBmaWVsZCBtdXN0IGhhdmUgYSBmaWVsZC12YWx1ZSB3aG9zZSBtZWRpYSB0eXBlIGlzICJ0ZXh0L3htbCIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBBUDUxMDEgZXh0ZW5kcyBTU0JQNTEwMSB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gaW1wbAotCSAqLwotCXB1YmxpYyBBUDUxMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkgCi0JewotCQlzdXBlcihpbXBsKTsKLQl9Ci0KLQlwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotCSAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotCSAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLQkgIHRocm93cyBXU0lFeGNlcHRpb24KLQl7Ci0JICAvLyBJZiB0aGVyZSBpcyBhIFNPQVAgTWVzc2FnZSB3aXRoIEF0dGFjaG1lbnRzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0JICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLQkgIHsKLQkgIAlyZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFLCBmYWlsdXJlRGV0YWlsKTsKLQkgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCk7Ci0JICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWJjYmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAxMDAxLgotICogSWYgaXQgaXMgYSByZXF1ZXN0LCB0aGUgYXJnICMyIG9mIFBPU1QgaXMgJmx0O0hUVFAvMS4xJmd0Oy4gSWYgYWJzZW50LCBmaXJzdCBsaW5lIG9mIHRoZSAKLSAqIGJvZHkgaXM6IEhUVFAtVmVyc2lvbiA9IEhUVFAvMS4xLiBJZiBpdCBpcyBhIHJlc3BvbnNlLCBpdCBzdGFydHMgd2l0aCAmbHQ7SFRUUC8xLjEmZ3Q7LgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBodHRwSGVhZGVyID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0KLSAgICAvLyBJZiB0aGlzIGlzIGEgcmVxdWVzdCBtZXNzYWdlLCB0aGVuIGNoZWNrIFBPU1QgaGVhZGVyCi0gICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAuZ2V0VHlwZSgpCi0gICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVxdWVzdExpbmU7Ci0gICAgICBpZiAoKChyZXF1ZXN0TGluZSA9IHRoaXMudmFsaWRhdG9yLmdldFBvc3RSZXF1ZXN0KGh0dHBIZWFkZXIpKSA9PSBudWxsKQotICAgICAgICB8fCAocmVxdWVzdExpbmUuc2l6ZSgpID09IDApKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgbWV0aG9kID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDApOwotICAgICAgICAvL1N0cmluZyByZXF1ZXN0VVJJID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDEpOwotICAgICAgICBTdHJpbmcgaHR0cFZlcnNpb24gPSAoU3RyaW5nKSByZXF1ZXN0TGluZS5nZXQoMik7Ci0KLSAgICAgICAgLy9Gb3IgZWFjaCByZXF1ZXN0IG1lc3NhZ2UgdGhhdCBpcyBhbiBIVFRQIFBPU1QKLSAgICAgICAgaWYgKG1ldGhvZC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1BPU1QpICYmIGh0dHBWZXJzaW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaHR0cFZlcnNpb24uZXF1YWxzKE1lc3NhZ2VWYWxpZGF0b3IuSFRUUF9WRVJTSU9OXzFfMSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBpdCBtdXN0IGJlIGEgcmVzcG9uc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGh0dHBIZWFkZXIuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfVkVSU0lPTl8xXzEpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5YTQ2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMTAwMi4KLSAqIElmIGl0IGlzIGEgcmVxdWVzdCwgdGhlIGFyZyAjMiBvZiBQT1NUIGlzICZsdDtIVFRQLzEuMSZndDsgb3IgJmx0O0hUVFAvMS4wJmd0Oy4gSWYgYWJzZW50LCBmaXJzdCBsaW5lIAotICogb2YgdGhlIGJvZHkgaXM6IEhUVFAtVmVyc2lvbiA9IEhUVFAvMS4xLiAob3IgSFRUUC8xLjApLiBJZiBpdCBpcyBhIHJlc3BvbnNlLCBpdCBzdGFydHMgd2l0aCAKLSAqICZsdDtIVFRQLzEuMSZndDsgb3IgJmx0O0hUVFAvMS4wJmd0OyBvciBoaWdoZXI7Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGh0dHBIZWFkZXIgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IG1lc3NhZ2UsIHRoZW4gY2hlY2sgUE9TVCBmb3IgMS4xIG9yIDEuMAotICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgewotICAgICAgLy8gR2V0IGVhY2ggZW50cnkgaW4gdGhlIHBvc3QgaGVhZGVyCi0gICAgICBTdHJpbmdUb2tlbml6ZXIgcG9zdE1lc3NhZ2UgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICIgXHJcbiIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGlyZCB0b2tlbiwgdGhlbiBmYWlsCi0gICAgICBpZiAocG9zdE1lc3NhZ2UuY291bnRUb2tlbnMoKSA8IDMpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIDNyZCB0b2tlbiAodGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcz8pCi0gICAgICAgIFN0cmluZyBodHRwVmVyc2lvbiA9ICIiOwotICAgICAgICBTdHJpbmcgbWVzc2FnZVR5cGUgPSAiIjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNZXNzYWdlIHR5cGUKLSAgICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgICAgbWVzc2FnZVR5cGUgPSBwb3N0TWVzc2FnZS5uZXh0VG9rZW4oKTsKLSAgICAgICAgICBlbHNlIGlmIChpID09IDIpCi0gICAgICAgICAgICBodHRwVmVyc2lvbiA9IHBvc3RNZXNzYWdlLm5leHRUb2tlbigpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvc3RNZXNzYWdlLm5leHRUb2tlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtZXNzYWdlVHlwZS5lcXVhbHMoIlBPU1QiKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgdGhpcmQgdG9rZW4gaXMgbm90IEhUVFAvMS4xIG90IEhUVFAvMS4wLCB0aGVuIGZhaWwKLSAgICAgICAgZWxzZSBpZiAoCi0gICAgICAgICAgKCFodHRwVmVyc2lvbi5lcXVhbHNJZ25vcmVDYXNlKE1lc3NhZ2VWYWxpZGF0b3IuSFRUUF9WRVJTSU9OXzFfMSkpCi0gICAgICAgICAgICAmJiAoIWh0dHBWZXJzaW9uLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1ZFUlNJT05fMV8wKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gRWxzZSBpdCBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gUmVzcG9uc2UtTGluZSAoMXN0KSA9IEhUVFAtVmVyc2lvbiBTUCBSZXNwb25zZS1jb2RlIFNQIFJlc3BvbnNlLXRleHQgQ1JMRgotICAgICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihodHRwSGVhZGVyLCAiXG5cclxmIik7Ci0KLSAgICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGFydExpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBIVFRQIHZlcnNpb24gaW5mbyBleHBlY3RlZCBidXQgbm90IGZvdW5kCi0gICAgICAgICAgLy8gKHN0YXRlIHRoZSBmYWN0IGluIHRoZSBleGNlcHRpb24gbWVzc2FnZT8pCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaHR0cEhlYWRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGF0IHByb3RvY29sIHZlcnNpb24gaW5kaWNhdGVzIEhUVFAvMS4wIG9yIEhUVFAvMS4xCi0gICAgICAgIGlmICghc3RhcnRMaW5lLnN0YXJ0c1dpdGgoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1ZFUlNJT05fMV8xKQotICAgICAgICAgICYmICFzdGFydExpbmUuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfVkVSU0lPTl8xXzApKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaHR0cEhlYWRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmN2YxZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMTAwNC4gCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIGlzIGEgUE9TVCBtZXNzYWdlLCB3aXRob3V0IGFueSB1c2Ugb2YgZnJhbWV3b3JrIGV4dGVuc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAwNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBQT1NUIG1lc3NhZ2UKLSAgICBpZiAoIWh0dHBIZWFkZXIuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfUE9TVCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICB3aGlsZSAoaHR0cE1lc3NhZ2VUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpCi0gICAgICAmJiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCkpKQotICAgIHsKLSAgICAgIGxpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICgobGluZSAhPSBudWxsKQotICAgICAgICAmJiAobGluZS5zdGFydHNXaXRoKCJNLVBPU1QiKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIkV4dDoiKSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0gLy9FbmQgV2hpbGUKLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2N2NlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlAxMDA2LiAKLSAqLwotcHVibGljIGNsYXNzIEJQMTAwNiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAwNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBQYXJzZSB0aGUgSFRUUCBoZWFkZXIKLSAgICBTdHJpbmcgcmF3SFRUUEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotICAgIE1hcCBodHRwSGVhZGVyID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMocmF3SFRUUEhlYWRlciwgIjoiKTsKLQotICAgIC8vIEdldCB0aGUgc29hcCBhY3Rpb24gaGVhZGVyCi0gICAgU3RyaW5nIHNvYXBBY3Rpb24gPSAoU3RyaW5nKSBodHRwSGVhZGVyLmdldCgiU09BUEFjdGlvbiIudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBzb2FwIGFjdGlvbiBoZWFkZXIsIHRoZW4gTkEKLSAgICBpZiAoc29hcEFjdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UgaWYgKCEoc29hcEFjdGlvbi5zdGFydHNXaXRoKCJcIiIpKSB8fCAhKHNvYXBBY3Rpb24uZW5kc1dpdGgoIlwiIikpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIkhUVFAgSGVhZGVyOiBcIiIgKyByYXdIVFRQSGVhZGVyICsgIlwiLiIsCi0gICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYWM3MzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAxMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEwMTAuCi0gKiBJdCBNVVNUIE5PVCBjb250YWluIGEgU09BUCBFbnZlbG9wZTogdGhlIEhUVFAgZW50aXR5LWJvZHkgbXVzdCBiZSBlbXB0eS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0KLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotICAgICAgICAvL2ZpbmQgb3BlcmF0aW9uIGluIHBvcnQgdHlwZQotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG9wZXJhdGlvbi5nZXRPdXRwdXQoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgICB7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlY2FjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMTEwMS4KLSAqIEEgcmVzcG9uc2UgbWVzc2FnZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBTT0FQIG1lc3NhZ2UgU0hPVUxEIGJlIHNlbnQgCi0gKiB1c2luZyBlaXRoZXIgYSAiMjAwIE9LIiBvciAiMjAyIEFjY2VwdGVkIiBIVFRQIHN0YXR1cyBjb2RlLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMTAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyByZXNwb25zZSBkb2VzIG5vdCBjb250YWlucyBTT0FQIG1lc3NhZ2UKLSAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSA9PSBudWxsCi0gICAgICB8fCAiIi5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSkpCi0gICAgewotICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZSAKLSAgICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgICAgVXRpbHMuZ2V0SFRUUFN0YXR1c0NvZGUoCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgICAgaWYgKCIyMDAiLmVxdWFscyhodHRwU3RhdHVzKSk7Ci0gICAgICBlbHNlIGlmICgiMjAyIi5lcXVhbHMoaHR0cFN0YXR1cykpOwotCi0gICAgICAvLyBJZiA0eHgsIHRoZW4gcmVzdWx0IGlzIG5vdEFwcGxpY2FibGUKLSAgICAgIGVsc2UgaWYgKGh0dHBTdGF0dXMuc3RhcnRzV2l0aCgiNCIpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAiXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgICArICJNZXNzYWdlOlxuIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gcmVzcG9uc2UgY29udGFpbnMgU09BUCBtZXNzYWdlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAwOTM4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMTEwMy4KLSAqIFRoZSByZXF1ZXN0IG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250YWluIGEgUE9TVCBtZXRob2QuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKTsKLSAgICBTdHJpbmcgcmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0LmdldEhUVFBIZWFkZXJzKCk7Ci0KLSAgICAvLyBHZXQgSFRUUCBzdGF0dXMgY29kZQotICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgIFV0aWxzLmdldEhUVFBTdGF0dXNDb2RlKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0KLSAgICBpZiAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiUE9TVCAiKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlIGlmICghIjQwNSIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICJcblJlcXVlc3QgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgKyAiXG5NZXNzYWdlOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldE1lc3NhZ2UoKQotICAgICAgICAgICAgKyAiXG5cblJlc3BvbnNlIG1lc3NhZ2U6XG5IZWFkZXJzOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICArICJcbk1lc3NhZ2U6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjZGJkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotCi0KLS8qKgotICogQlAxMTA0LgotICogVGhlIHJlcXVlc3QgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4gYSBjb250ZW50LXR5cGUgb2YgInRleHQveG1sIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTEwNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGNoZWNrIHJlcXVlc3QgZm9yIHRoZSAidGV4dC94bWwiIGNvbnRlbnQgdHlwZQotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKTsKLSAgICBTdHJpbmcgaGVhZGVycyA9IHJlcXVlc3QuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhoZWFkZXJzLCAiOiIpCi0gICAgICAuZ2V0KEhUVFBDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRS50b1VwcGVyQ2FzZSgpKTsKLQotICAgIC8vIEdldCBIVFRQIHN0YXR1cyBjb2RlCi0gICAgU3RyaW5nIGh0dHBTdGF0dXMgPQotICAgICAgVXRpbHMuZ2V0SFRUUFN0YXR1c0NvZGUoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpKTsKLQotICAgIC8vIElmIHRoZSByZXF1ZXN0IG1lc3NhZ2UgaGFzIGEgY29udGVudCB0eXBlIG9mIHRleHQveG1sLAotICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgIGlmIChjb250ZW50VHlwZSAhPSBudWxsCi0gICAgICAmJiBjb250ZW50VHlwZS5pbmRleE9mKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwpICE9IC0xKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBIVFRQIHN0YXR1cyBjb2RlCi0gICAgICBpZiAoISI0MTUiLmVxdWFscyhodHRwU3RhdHVzKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIlxuUmVxdWVzdCBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgKyAiXG5NZXNzYWdlOlxuIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgICAgICsgIlxuXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICsgIlxuTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTExNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTBmODRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDExMTYuCi0gKiBTT0FQQWN0aW9uIGhlYWRlciBzaG91bGQgY29udGFpbiBhIHF1b3RlZCBzdHJpbmcgdGhhdCBoYXMgc2FtZSAKLSAqIHZhbHVlIGFzIHRoZSB2YWx1ZSBvZiB0aGUgc29hcGJpbmQ6b3BlcmF0aW9uL0Bzb2FwQWN0aW9uIGF0dHJpYnV0ZSwgCi0gKiBhbmQgYW4gZW1wdHkgc3RyaW5nICgiIikgaWYgdGhlcmUgaXMgbm8gc3VjaCBhdHRyaWJ1dGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMTYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGhlYWRlcnMgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHNvYXBBY3Rpb24gPSBzb2FwT3Blci5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgaWYgKHNvYXBBY3Rpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoISIiLmVxdWFscyhhY3Rpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICJcbkhUVFAgaGVhZGVyczpcbiIgKyBoZWFkZXJzICsgIlxuc29hcEFjdGlvbjpcbiIgKyBzb2FwQWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCFzb2FwQWN0aW9uLmVxdWFscyhhY3Rpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICJcbkhUVFAgaGVhZGVyczpcbiIgKyBoZWFkZXJzICsgIlxuc29hcEFjdGlvbjpcbiIgKyBzb2FwQWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBpZiAoYWN0aW9uID09IG51bGwpIAotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBpZiAoYWN0aW9uLmxlbmd0aCgpID4gMQotICAgICAgICAmJiBhY3Rpb24uY2hhckF0KDApID09ICciJwotICAgICAgICAmJiBhY3Rpb24uY2hhckF0KGFjdGlvbi5sZW5ndGgoKSAtIDEpID09ICciJykKLSAgICAgIHsKLSAgICAgICAgYWN0aW9uID0gYWN0aW9uLnN1YnN0cmluZygxLCBhY3Rpb24ubGVuZ3RoKCkgLSAxKTsKLSAgICAgIH0KLQotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvYywKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgIHZhbGlkYXRvciksCi0gICAgICAgICAgZmFsc2UpOwotCi0gICAgICBpZiAobWF0Y2ggIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRAotICAgICAgJiYgZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2M2E1Y2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0vKioKLSAqIEJQNDEwMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBtZXNzYWdlIGNvbnRhaW5zIGFuIEhUVFAgQXV0aGVudGljYXRpb24gaGVhZGVyIGZpZWxkPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQNDEwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0FVVEhfU0NIRU1FX0JBU0lDID0gIkJhc2ljIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfQVVUSF9TQ0hFTUVfRElHRVNUID0gIkRpZ2VzdCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXR0aW5nIG1lc3NhZ2UgaGVhZGVycwotICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgLy8gSWYgdGhpcyBpcyBhIHJlcXVlc3QgbWVzc2FnZQotICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGUgcmVxdWVzdCBoZWFkZXJzIGNvbnRhaW4gYXV0aGVudGljYXRpb24gc2NoZW1lICJCYXNpYyIgb3IgIkRpZ2VzdCIKLSAgICAgIC8vIG9yIHRoZXJlIGFyZSBubyBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlcnMsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghY29udGFpbnNJbnZhbGlkQXV0aChoZWFkZXJzLCBIVFRQQ29uc3RhbnRzLkhFQURFUl9BVVRIT1JJWkFUSU9OKQotICAgICAgICAmJiAhY29udGFpbnNJbnZhbGlkQXV0aChoZWFkZXJzLCBIVFRQQ29uc3RhbnRzLkhFQURFUl9QUk9YWV9BVVRIT1JJWkFUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZWxzZSB0aGlzIGlzIGEgcmVzcG9uc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIGhlYWRlcnMgY29udGFpbiBhdXRoZW50aWNhdGlvbiBzY2hlbWUgIkJhc2ljIiBvciAiRGlnZXN0IgotICAgICAgLy8gb3IgdGhlcmUgYXJlIG5vIEhUVFAgQXV0aGVudGljYXRpb24gaGVhZGVycywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFjb250YWluc0ludmFsaWRBdXRoKGhlYWRlcnMsIEhUVFBDb25zdGFudHMuSEVBREVSX1dXV19BVVRIRU5USUNBVEUpCi0gICAgICAgICYmICFjb250YWluc0ludmFsaWRBdXRoKGhlYWRlcnMsIEhUVFBDb25zdGFudHMuSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQXNzZXJ0aW9uIHJlc3VsdCBoYXMgbm90IGJlZW4gY2hhbmdlZCwgSFRUUCBBdXRoZW50aWNhdGlvbiBoZWFkZXJzCi0gICAgLy8gZG9lcyBub3QgY29udGFpbiBhdXRoZW50aWNhdGlvbiBzY2hlbWUgIkJhc2ljIiBvciAiRGlnZXN0IiwKLSAgICAvLyB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgIGlmIChyZXN1bHQuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBIVFRQIGhlYWRlcnMgY29udGFpbiBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgdGhhdCB1c2VzCi0gICAqIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvdGhlciB0aGFuICJCYXNpYyIgb3IgIkRpZ2VzdCIuCi0gICAqIEBwYXJhbSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHBhcmFtIGhlYWRlciBhIGhlYWRlciBuYW1lIGJlaW5nIHJldHJpZXZlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlciB0aGF0IHVzZXMgYXV0aGVudGljYXRpb24KLSAgICogc2NoZW1lIG90aGVyIHRoYW4gIkJhc2ljIiBvciAiRGlnZXN0IiBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zSW52YWxpZEF1dGgoU3RyaW5nIGhlYWRlcnMsIFN0cmluZyBoZWFkZXIpCi0gIHsKLSAgICAvLyBHZXR0aW5nIGEgaGVhZGVyIHZhbHVlCi0gICAgU3RyaW5nIGhlYWRlclZhbHVlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBoZWFkZXJWYWx1ZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsIjoiKQotICAgICAgICAuZ2V0KGhlYWRlci50b1VwcGVyQ2FzZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCi0gICAgLy8gSWYgdGhlIGhlYWRlciBpcyBwcmVzZW50ZWQKLSAgICBpZiAoaGVhZGVyVmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBSZXRyaWV2aW5nIGF1dGhlbnRpY2F0aW9uIHNjaGVtZQotICAgICAgaW50IGlkeFNQID0gaGVhZGVyVmFsdWUuaW5kZXhPZigiICIpOwotICAgICAgaWYgKGlkeFNQID4gLTEpCi0gICAgICB7Ci0gICAgICAgIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWUuc3Vic3RyaW5nKDAsIGlkeFNQKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIGEgc2NoZW1lIGlzIG5laXRoZXIgIkJhc2ljIiBub3IgIkRpZ2VzdCIsIHJldHVybiB0cnVlCi0gICAgICBpZiAoIWhlYWRlclZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoSFRUUF9BVVRIX1NDSEVNRV9CQVNJQykKLSAgICAgICAgJiYgIWhlYWRlclZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoSFRUUF9BVVRIX1NDSEVNRV9ESUdFU1QpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmQwY2Y5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQlA0MTA0Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBsb2cgZmlsZSBjb250YWluaW5nIGFuIEhUVFAgSGVhZGVyIGZpZWxkIHRoYXQgaXMgbm90IGZyb20gdGhlIGZvbGxvd2luZyBsaXN0IG9mIHNwZWNpZmllZCBoZWFkZXIgZmllbGRzOiAoaHR0cDovL3d3dy5tbm90Lm5ldC9kcmFmdHMvZHJhZnQtbm90dGluZ2hhbS1odHRwLWhlYWRlci1yZWctMDAudHh0KTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbWVzc2FnZSBjb250YWlucyBhbiBIVFRQIEhlYWRlciBmaWVsZCB0aGF0IGlzIG5vdCBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBzcGVjaWZpZWQgaGVhZGVyIGZpZWxkczogKGh0dHA6Ly93d3cubW5vdC5uZXQvZHJhZnRzL2RyYWZ0LW5vdHRpbmdoYW0taHR0cC1oZWFkZXItcmVnLTAwLnR4dCk8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgcHJpdmF0ZSBMaXN0IGtub3duSGVhZGVyTmFtZXM7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICAgIGtub3duSGVhZGVyTmFtZXMgPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEFsbEtub3duSGVhZGVyTmFtZXMoKSB7Ci0gICAgaWYgKGtub3duSGVhZGVyTmFtZXMgPT0gbnVsbCkgewotICAgICAga25vd25IZWFkZXJOYW1lcyA9IEhUVFBDb25zdGFudHMuZ2V0QWxsS25vd25IZWFkZXJOYW1lcygpOwotICAgIH0KLSAgICByZXR1cm4ga25vd25IZWFkZXJOYW1lczsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXR0aW5nIEhUVFAgSGVhZGVycwotICAgIE1hcCBobWFwID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoCi0gICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwgIjoiKTsKLQotICAgIEl0ZXJhdG9yIGkgPSBobWFwLmtleVNldCgpLml0ZXJhdG9yKCkgOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgIC8vIElmIGhlYWRlciBuYW1lIGlzIG5vdCBrbm93biwgdGhlbiB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgaWYgKCFnZXRBbGxLbm93bkhlYWRlck5hbWVzKCkuY29udGFpbnMoaGVhZGVyTmFtZS50b1VwcGVyQ2FzZSgpKSkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBIVFRQIGhlYWRlciB0aGF0IGlzIG5vdCBmcm9tIGEgbGlzdCwKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUgCi0gICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwM2QzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTA1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlA0MTA1Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBsb2cgZmlsZSBjb250YWluaW5nIGEgQ29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlciBmaWVsZCB3aXRoIGEgdmFsdWUgb3RoZXIgdGhhbiAiZ3ppcCIsICJjb21wcmVzcyIgb3IgImRlZmxhdGUiPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBjb250YWluZWQgQ29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlciBmaWVsZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuICJnemlwIiwgImNvbXByZXNzIiBvciAiZGVmbGF0ZSIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQNDEwNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIC8vIEFsbCB0aGUgcmVnaXN0ZXJlZCBjb250ZW50LWNvZGluZyB2YWx1ZSB0b2tlbnMgKFJGQzI2MTYpIGV4Y2VwdCAiaWRlbnRpdHkiCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHWklQX1ZBTFVFID0gImd6aXAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUFJFU1NfVkFMVUUgPSAiY29tcHJlc3MiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGTEFURV9WQUxVRSA9ICJkZWZsYXRlIjsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyB0aGUgQ29udGVudC1FbmNvZGluZyBIVFRQIGhlYWRlciB2YWx1ZQotICAgIFN0cmluZyBjb250ZW50RW5jb2RpbmcgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucygKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLAotICAgICAgIjoiKS5nZXQoSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpKTsKLQotICAgIGlmIChjb250ZW50RW5jb2RpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBMb3dlcmluZyB2YWx1ZSdzIGNhc2UgYmVjYXVzZSBSRkMyNjE2IHNheXMKLSAgICAgIC8vIHRoYXQgYWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgIC8vIE11bHRpcGxlIGVuY29kaW5ncyBjYW4gYmUgYXBwbGllZCB0byBhbiBlbnRpdHksCi0gICAgICAvLyBzbyBicmVha2luZyB0aGUgdmFsdWUgaW50byB0b2tlbnMKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY29udGVudEVuY29kaW5nLCAiLCIpOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRva2VuID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgICAvLyBJZiBhIHRva2VuIGRvZXMgbm90IGVxdWFsIHRvIGFueSByZWdpc3RlcmVkIG9uZQotICAgICAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICAgIGlmICggIXRva2VuLmVxdWFscyhHWklQX1ZBTFVFKQotICAgICAgICAgICYmICF0b2tlbi5lcXVhbHMoQ09NUFJFU1NfVkFMVUUpCi0gICAgICAgICAgJiYgIXRva2VuLmVxdWFscyhERUZMQVRFX1ZBTFVFKSkgewotCi0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyB1bnJlZ2lzdGVyZWQgdmFsdWUgb2YgQ29udGVudC1FbmNvZGluZywKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUgCi0gICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3ODYzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotCi0vKioKLSAqIEJQNDEwNgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJlc3BvbnNlIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBjb250YWlucyBhIHRyYW5zZmVyLWVuY29kaW5nIEhUVFAgaGVhZGVyIGZpZWxkLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgY29udGFpbmVkIHRyYW5zZmVyLWVuY29kaW5nIEhUVFAgaGVhZGVyIGZpZWxkIGhhcyBhIHZhbHVlIG9mICJjaHVua2VkIjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDQxMDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hVTktFRF9WQUxVRSA9ICJjaHVua2VkIjsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyBhIFRyYW5zZmVyLUVuY29kaW5nIEhUVFAgaGVhZGVyIHZhbHVlCi0gICAgU3RyaW5nIHRyYW5zZmVyRW5jb2RpbmcgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucygKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLAotICAgICAgIjoiKS5nZXQoSFRUUENvbnN0YW50cy5IRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcudG9VcHBlckNhc2UoKSk7Ci0KLSAgICBpZiAodHJhbnNmZXJFbmNvZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIExvd2VyaW5nIHZhbHVlJ3MgY2FzZSBiZWNhdXNlIFJGQzI2MTYgc2F5cwotICAgICAgLy8gdGhhdCBhbGwgdHJhbnNmZXItY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgdHJhbnNmZXJFbmNvZGluZyA9IHRyYW5zZmVyRW5jb2RpbmcudG9Mb3dlckNhc2UoKTsKLQotICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG90aGVyIHRoYW4gImNodW5rZWQiLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoIXRyYW5zZmVyRW5jb2RpbmcuZXF1YWxzKENIVU5LRURfVkFMVUUpKSB7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldERldGFpbERlc2NyaXB0aW9uKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gVHJhbmZlci1FbmNvZGluZyBvciBpdHMgdmFsdWUgaXMgImNodW5rZWQiLAotICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZSAKLSAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjk5YTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlA0MTA3Ci0gKiA8Y29udGV4dD5Gb3IgYSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbmluZyBhbiBVcGdyYWRlIGZpZWxkIGluIHRoZSBIVFRQIEhlYWRlcnMuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbnMgYW4gVXBncmFkZSBmaWVsZCBpbiB0aGUgSFRUUCBIZWFkZXJzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDQxMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA3KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldHRpbmcgdGhlIFVwZ3JhZGUgSFRUUCBoZWFkZXIgdmFsdWUKLSAgICBTdHJpbmcgdXBncmFnZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKAotICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCksCi0gICAgICAiOiIpLmdldChIVFRQQ29uc3RhbnRzLkhFQURFUl9VUEdSQURFLnRvVXBwZXJDYXNlKCkpOyAKLQotICAgIC8vIElmIHRoZSBoZWFkZXIgaXMgcHJlc2VudGVkLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgaWYgKHVwZ3JhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gZWxzZSB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL01lc3NhZ2VWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvTWVzc2FnZVZhbGlkYXRvckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhZjBlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvTWVzc2FnZVZhbGlkYXRvckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBAdmVyc2lvbiAxLjAKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgaW1wbGVtZW50cyBNZXNzYWdlVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfTUVTU0FHRTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKSB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgVFlQRV9NRVNTQUdFX1JFUVVFU1QsCi0gICAgICAgICAgICAgIFRZUEVfTUVTU0FHRV9SRVNQT05TRSwKLSAgICAgICAgICAgICAgVFlQRV9NRVNTQUdFX0FOWSwKLSAgICAgICAgICAgICAgVFlQRV9NSU1FX1BBUlQsCi0gICAgICAgICAgICAgIFRZUEVfTUlNRV9ST09UX1BBUlQKLSAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGVudHJ5IGFuZCB0ZXN0IGFzc2VydGlvbiBoYXZlIHRoZSBzYW1lIHByaW1hcnkgY29udGV4dAotICAgIGlmICgodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUVTU0FHRV9BTlkpKQotICAgICAgfHwgKHRlc3RBc3NlcnRpb24uZ2V0RW50cnlUeXBlTmFtZSgpLmVxdWFscyhUWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRFbnRyeSgpCi0gICAgICAgICAgLmdldEVudHJ5VHlwZSgpCi0gICAgICAgICAgLmdldFR5cGVOYW1lKCkKLSAgICAgICAgICAuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVFVRVNUKSkpCi0gICAgICB8fCAodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVNQT05TRSkKLSAgICAgICAgJiYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRFbnRyeSgpCi0gICAgICAgICAgLmdldEVudHJ5VHlwZSgpCi0gICAgICAgICAgLmdldFR5cGVOYW1lKCkKLSAgICAgICAgICAuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVNQT05TRSkpKQotICAgICAgfHwgdGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUlNRV9ST09UX1BBUlQpCi0gICAgICB8fCB0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHMoVFlQRV9NSU1FX1BBUlQpKQotICAgIHsKLSAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDEwMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9TU0JQMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjFlYWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9TU0JQMTAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotCi0vKioKLSAqIFNTQlAxMDAzLgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSBpbiB0aGUgbG9nIGZpbGUsIHdoaWNoIGhhcyBhIG5vbi1lbXB0eSBlbnRpdHktYm9keTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqICBUaGUgbG9nZ2VkIFNPQVAgZW52ZWxvcGUgaXMgYSBVVEYtOCB0cmFuc2NyaXB0IG9mIGFuIGVudmVsb3BlIG9yaWdpbmFsbHkgZW5jb2RlZCBhcyBVVEYtOCBvciBVVEYtMTYuIAotICogIFRoZSBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIncyBjaGFyc2V0IHZhbHVlIGlzIGVpdGhlciBVVEYtOCBvciBVVEYtMTYuIExvb2tpbmcgYXQgdGhlIG1lc3NhZ2VDb250ZW50IAotICogIGVsZW1lbnQgb2YgdGhlIGxvZ2dlZCBtZXNzYWdlLCBlaXRoZXIgCi0gKiAgICAoMSkgaXQgaGFzIGEgQk9NIGF0dHJpYnV0ZSB3aGljaCBtYXBzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAqICAgICgyKSBpdCBoYXMgaXQgaGFzIGFuIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBtYXRjaGVzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAqICAgICgzKSB0aGVyZSBpcyBubyBCT00gYXR0cmlidXRlIGFuZCBubyBYTUwgZGVjbGFyYXRpb24sIGFuZCB0aGUgY2hhcnNldCB2YWx1ZSBpcyBVVEYtOC4KLSAqIDwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKgotICogQGF1dGhvciBsYXV6b25kCi0gKi8gCi1wdWJsaWMgY2xhc3MgU1NCUDEwMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFNTQlAxMDAzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzcG9uc2UgbWVzc2FnZSBmb3Igb25lLXdheSBvcGVyYXRpb24sIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICh2YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgICBNYXAgaHR0cEhlYWRlck1hcCA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGh0dHBIZWFkZXIsICI6Iik7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSAoU3RyaW5nKSBodHRwSGVhZGVyTWFwLmdldCgiQ29udGVudC1UeXBlIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgaWYgKGNvbnRlbnRUeXBlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICJUaGUgQ29udGVudC1UeXBlIGhlYWRlciBpcyBub3QgcHJlc2VudC4iKTsKLSAgICAgIH0KLQotICAgICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS50cmltKCk7Ci0gICAgICBTdHJpbmcgY2hhcnNldCA9IGNvbnRlbnRUeXBlLnN1YnN0cmluZygKLSAgICAgICAgY29udGVudFR5cGUuaW5kZXhPZigiOyIpICsgMSwgY29udGVudFR5cGUubGVuZ3RoKCkpOwotICAgICAgY2hhcnNldCA9IGNoYXJzZXQudHJpbSgpOwotICAgICAgaWYgKCFjaGFyc2V0LnN0YXJ0c1dpdGgoImNoYXJzZXQiKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgIk1pc3Npbmcgb3IgYmFkIFwiY2hhcnNldFwiIGF0dHJpYnV0ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlcjogIgotICAgICAgICAgICsgY2hhcnNldCk7Ci0gICAgICB9Ci0KLSAgICAgIFN0cmluZyBjaGFyc2V0VmFsdWUgPSBjaGFyc2V0LnN1YnN0cmluZygKLSAgICAgICAgY2hhcnNldC5pbmRleE9mKCI9IikgKyAxLCBjaGFyc2V0Lmxlbmd0aCgpKTsKLSAgICAgIGlmIChjaGFyc2V0VmFsdWUuc3RhcnRzV2l0aCgiXCIiKSkKLSAgICAgIHsKLSAgICAgICAgY2hhcnNldFZhbHVlID0gY2hhcnNldFZhbHVlLnN1YnN0cmluZygxLCBjaGFyc2V0VmFsdWUubGVuZ3RoKCkgLSAxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTgiKQotICAgICAgICAgICYmICFjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgdmFsdWUgb2YgdGhlIFwiY2hhcnNldFwiICIKLSAgICAgICAgICArICJhdHRyaWJ1dGUgb2YgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgaXMgIiArIGNvbnRlbnRUeXBlKTsKLSAgICAgIH0KLSAgICAgIC8vIFBhcnNlIGxvZyBtZXNzYWdlCi0gICAgICAvL2dldHMgZmlyc3Qgc3RyaW5nCi0gICAgICBpbnQgaWR4ID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKS5pbmRleE9mKCI8P3htbCIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaW50IGlkeDIgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmluZGV4T2YoIj8+Iik7Ci0gICAgICBpZiAoaWR4MiA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHhtbERlY2xhcmF0aW9uID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKQotICAgICAgICAuc3Vic3RyaW5nKGlkeCwgaWR4MiArICI/PiIubGVuZ3RoKCkpOwotCi0gICAgICBpZHggPSB4bWxEZWNsYXJhdGlvbi5pbmRleE9mKCJlbmNvZGluZyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoYXJzZXRWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtOCIpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBYTUwgZGVjbGFyYXRpb24gYW5kIHRoZSIKLSAgICAgICAgICAgICsgIiBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCBVVEYtOC4iCi0gICAgICAgICAgICArICJcbkNoYXJzZXQgdmFsdWUgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXI6ICIgKyBjaGFyc2V0VmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGludCBpZHhRID0geG1sRGVjbGFyYXRpb24uaW5kZXhPZignXCcnLCBpZHgpOwotICAgICAgaW50IGlkeFFRID0geG1sRGVjbGFyYXRpb24uaW5kZXhPZignXCInLCBpZHgpOwotICAgICAgaW50IGlkeFF1b3RlID0gLTE7Ci0gICAgICBjaGFyIHFvdXRlQ2ggPSAnXDAnOwotICAgICAgaWYgKGlkeFEgPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlkeFF1b3RlID0gaWR4UVE7Ci0gICAgICAgIHFvdXRlQ2ggPSAnXCInOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoaWR4UVEgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBpZHhRdW90ZSA9IGlkeFE7Ci0gICAgICAgICAgcW91dGVDaCA9ICdcJyc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGlkeFFRIDwgaWR4USkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZHhRdW90ZSA9IGlkeFFROwotICAgICAgICAgICAgcW91dGVDaCA9ICdcIic7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZHhRdW90ZSA9IGlkeFE7Ci0gICAgICAgICAgICBxb3V0ZUNoID0gJ1wnJzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGlkeFF1b3RlID09IC0xIHx8IHFvdXRlQ2ggPT0gJ1wwJykKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaW50IGlkeExRb3V0ZSA9IHhtbERlY2xhcmF0aW9uLmluZGV4T2YocW91dGVDaCwgaWR4UXVvdGUgKyAxKTsKLQotICAgICAgaWYgKGlkeExRb3V0ZSA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHhtbEVuY29kaW5nID0KLSAgICAgICAgeG1sRGVjbGFyYXRpb24uc3Vic3RyaW5nKGlkeFF1b3RlICsgMSwgaWR4TFFvdXRlKTsKLSAgICAgIGlmIChjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSh4bWxFbmNvZGluZykpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgQk9NLCB0aGVuIGNoZWNrIHRoYXQgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIHhtbEVuY29kaW5nCi0gICAgICAgIGludCBib20gPSAwOwotICAgICAgICBpZiAoKGJvbSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRCT00oKSkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGOAotICAgICAgICAgICAgJiYgIXhtbEVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICB8fCAoKGJvbSA9PSBXU0lDb25zdGFudHMuQk9NX1VURjE2Ci0gICAgICAgICAgICAgICYmICF4bWxFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtMTYiKSkpCi0gICAgICAgICAgICB8fCAoKGJvbSA9PSBXU0lDb25zdGFudHMuQk9NX1VURjE2X0JJR19FTkRJQU4KLSAgICAgICAgICAgICAgJiYgIXhtbEVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoInV0Zi0xNiIpKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgQk9NIGFuZCBYTUwgZGVjbGFyYXRpb24gZG8gbm90IG1hdGNoLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGVyZSBpcyBhbiBYTUwgZGVjbGFyYXRpb24sIGJ1dCBpdHMgIgotICAgICAgICAgICsgImVuY29kaW5nIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSBjaGFyc2V0IHZhbHVlLlxuIgotICAgICAgICAgICsgIkNoYXJzZXQgdmFsdWUgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXI6ICIgKyBjaGFyc2V0VmFsdWUKLSAgICAgICAgICArICJcbkVuY29kaW5nIGluIHRoZSBYTUwgZGVjbGFyYXRpb246ICIgKyB4bWxFbmNvZGluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1NTQlA1MTAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyMTUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBTU0JQNTEwMAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgaW4gdGhlIGxvZyBmaWxlLCB3aXRoIGFuIEhUVFAgZW50aXR5LWJvZHkuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBTT0FQIGVudmVsb3BlIGlzIHRoZSBleGNsdXNpdmUgcGF5bG9hZCBvZiB0aGUgSFRUUCBlbnRpdHktYm9keS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDUxMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcm90ZWN0ZWQgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQNTEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgeyAKLSAgICAgIAlpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgCQkgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAllbHNlCQotICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWRvYy5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1NTQlA1MTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhZTUyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogU1NCUDUxMDEKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBsb2cgZmlsZS48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIG11c3QgaGF2ZSBhICJDb250ZW50LVR5cGUiIEhUVFAgaGVhZGVyIGZpZWxkLiAgVGhlICJDb250ZW50LVR5cGUiIEhUVFAgaGVhZGVyIGZpZWxkIG11c3QgaGF2ZSBhIGZpZWxkLXZhbHVlIHdob3NlIG1lZGlhIHR5cGUgaXMgInRleHQveG1sIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIFNTQlA1MTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgU1NCUDUxMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXR0aW5nIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlcgotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKAotICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCksCi0gICAgICAiOiIpLmdldChIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAvLyBpZiBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCBwcmVzZW50ZWQKLSAgICAvLyBvciBkb2VzIG5vdCBlcXVhbCB0byB0ZXh0L3htbCwgdGhlbiB0aGUgYXNzZXJ0aW9uIGlzIGZhaWxlZAotICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsCi0gICAgICB8fCAhY29udGVudFR5cGUuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXRGYWlsdXJlTWVzc2FnZSgpLAotICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy52YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzA2NmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMSBleHRlbmRzIEJQMTAwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjQzMDhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMiBleHRlbmRzIEJQMTAwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDA0MTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMyBleHRlbmRzIFNTQlAxMDAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmFkODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBXU0kxMDA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDA0IGV4dGVuZHMgQlAxMDA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMWMwMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMDU7Ci0KLS8qKgotICogV1NJMTAwNQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwNSBleHRlbmRzIEJQMTAwNQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmQ2Zjg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwNiBleHRlbmRzIEJQMTAwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg1YWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDA3OwotCi0vKioKLSAqIFdTSTEwMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMDcgZXh0ZW5kcyBCUDEwMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjZDBlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTAwODsKLQotLyoqCi0gKiBXU0kxMDA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDA4IGV4dGVuZHMgQlAxMDA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNjhlYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMDk7Ci0KLS8qKgotICogV1NJMTAwOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwOSBleHRlbmRzIEJQMTAwOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJkOTg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAxMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAxMCBleHRlbmRzIEJQMTAxMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDEwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWRjZGNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDExOwotCi0vKioKLSAqIFdTSTEwMTEKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMTEgZXh0ZW5kcyBCUDEwMTEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAxMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmNTcxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTAxMjsKLQotLyoqCi0gKiBXU0kxMDEyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDEyIGV4dGVuZHMgQlAxMDEyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMTIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4N2U1OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMTM7Ci0KLS8qKgotICogV1NJMTAxMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAxMyBleHRlbmRzIEJQMTAxMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDEzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDMxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAzMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2QzOTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDMxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDMxOwotCi0vKioKLSAqIFdTSTEwMzEKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMzEgZXh0ZW5kcyBCUDEwMzEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAzMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyMGEwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTEwMDsKLQotLyoqCi0gKiBXU0kxMTAwCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAwIGV4dGVuZHMgQlAxMTAwCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjExM2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBXU0kxMTAxCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAxIGV4dGVuZHMgQlAxMTAxCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMzgzMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IdHRwSGVhZGVyc1ZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLQotLyoqCi0gKiBCUFdTSTQuCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIHNob3VsZCBiZSBpbnZhbGlkIChIVFRQIHJlcXVlc3QgbWFsZm9ybWVkLCAKLSAqIFhNTCBub3Qgd2VsbCBmb3JtZWQsIC4uLikuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgU3RyaW5nIHJlcXVlc3RNZXNzYWdlID0gbnVsbDsKLSAgICAvL1N0cmluZyByZXNwb25zZU1lc3NhZ2UgPSBudWxsOwotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IG51bGw7Ci0gICAgcmVzdWx0ID0gbnVsbDsKLSAgICAvLwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZQotICAgICAgU3RyaW5nIGh0dHBTdGF0dXMgPQotICAgICAgICBVdGlscy5nZXRIVFRQU3RhdHVzQ29kZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0gICAgICBpZiAoIjQwMCIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgICAgewotCi0gICAgICAgIHJlcXVlc3RNZXNzYWdlID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAgICAgU3RyaW5nIHJlcXVlc3RIVFRQSGVhZGVycyA9Ci0gICAgICAgICAgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgICAgIC8vY2hlY2sgcmVxdWVzdCBIVFRQIEhlYWRlcnMKLQotICAgICAgICAvL0h0dHBIZWFkZXJzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBIdHRwSGVhZGVyc1ZhbGlkYXRvcigpOwotCi0gICAgICAgIGlmICghSHR0cEhlYWRlcnNWYWxpZGF0b3IKLSAgICAgICAgICAudmFsaWRhdGVIdHRwUmVxdWVzdEhlYWRlcnMocmVxdWVzdEhUVFBIZWFkZXJzKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9jaGVjayByZXF1ZXN0IHhtbCBtZXNzYWdlCi0KLSAgICAgICAgY29udGVudFR5cGUgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhodHRwSGVhZGVyLCAiOiIpCi0gICAgICAgICAuZ2V0KEhUVFBDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRS50b1VwcGVyQ2FzZSgpKTsKLSAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoV1NJQ29uc3RhbnRzLkNPTlRFTlRfVFlQRV9URVhUX1hNTCkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgLy9Eb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlKSkpOwotICAgICAgICAgICAgICBidWlsZGVyLnBhcnNlKAotICAgICAgICAgICAgICAgIG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBXU0lFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJcblJlcXVlc3QgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgICArICJNZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgICAgICArICJcblxuUmVzcG9uc2UgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgKyAiTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdzaWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0NjUyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTExMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTExMDMgZXh0ZW5kcyBCUDExMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyZTQ2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTExMDQuCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIHNob3VsZCBub3QgY29udGFpbiBhIGNvbnRlbnQtdHlwZSBvZiAidGV4dC94bWwiLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTEwNCBleHRlbmRzIEJQMTEwNAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMTA0KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMWEzYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuU2V0Q29va2llMlZhbGlkYXRvcjsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIFRoZSBDb29raWVzIHNob3VsZCBjb25mb3JtIHRvIFJGQzI5NjUuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU2V0Q29va2llMlZhbGlkYXRvciBjb29raWVWYWwgPSBuZXcgU2V0Q29va2llMlZhbGlkYXRvcigpOwotICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAuZ2V0VHlwZSgpCi0gICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkpCi0gICAgewotICAgICAgLy8gaWYgcmVzcG9uc2UgdHJvbSBzZXJ2ZXIKLSAgICAgIFN0cmluZyBzZXRDb29raWUyID0KLSAgICAgICAgKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNldC1Db29raWUyIi50b1VwcGVyQ2FzZSgpKTsKLSAgICAgIGlmIChzZXRDb29raWUyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChjb29raWVWYWwuaXNTZXRDb29raWUyKHNldENvb2tpZTIudHJpbSgpKSkKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgIlxuTWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gaWYgcmVxdWVzdCB0byB0aGUgc2VydmVyCi0gICAgICBTdHJpbmcgY29va2llID0KLSAgICAgICAgKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIkNvb2tpZSIpOwotICAgICAgaWYgKGNvb2tpZSA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoY29va2llVmFsLmlzQ29va2llKGNvb2tpZS50cmltKCkpKQotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiXG5NZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgKyAiXG5TT0FQIG1lc3NhZ2U6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTkxM2U1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMTA3OwotCi0vKioKLSAqIFdTSTExMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTExMDcgZXh0ZW5kcyBCUDExMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMzZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTnVsbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIEVhY2ggc29hcGJpbmQgZXh0ZW5zaW9uIGVsZW1lbnQgd2l0aCBhIHdzZGw6cmVxdWlyZWQgCi0gKiBhdHRyaWJ1dGUgb2YgZmFsc2UgbXVzdCBhcHBlYXIgaW4gYSBtZXNzYWdlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTEwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0gbnVsbDsKLSAgcHJpdmF0ZSBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0ID0gbnVsbDsKLSAgcHJpdmF0ZSBPcGVyYXRpb25TaWduYXR1cmUgcmVzcG9uc2VTaWcgPSBudWxsOwotICBwcml2YXRlIFZlY3RvciBoZWFkZXJSYXJ0cyA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBleGlzdFNPQVBIZWFkZXIgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gaXNSZXF1ZXN0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBleGlzdFNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQQm9keSwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotCi0gICAgLy8gaWYgIndzZGw6cmVxdWlyZWQiIGlzIHRydWUgdGhlbiByZXR1cm4KLSAgICBpZiAoYm9keS5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICYmIGJvZHkuZ2V0UmVxdWlyZWQoKS5ib29sZWFuVmFsdWUoKSA9PSB0cnVlKQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gYXNzZXJ0IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgaWYgKGJvcC5nZXRPcGVyYXRpb24oKSA9PSBudWxsCi0gICAgICB8fCBib3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgPT0gbnVsbAotICAgICAgfHwgYm9wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE1lc3NhZ2UgbXNnID0gYm9wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICBMaXN0IHBhcnRzID0KLSAgICAgIFdTRExVdGlsLmdldFBhcnRzKAotICAgICAgICBib3AuZ2V0T3BlcmF0aW9uKCksCi0gICAgICAgIG1zZywKLSAgICAgICAgYm9keSwKLSAgICAgICAgbWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSk7Ci0KLSAgICBRTmFtZSBhZGRpdGlvbmFsTmFtZSA9IG51bGw7Ci0gICAgLy8gaWYgb3BlcmF0aW9uIGlzIHJwYywgYWRkIHRvIHBhcnRzIHFuYW1lIHFpdGggZnVuY3Rpb24gbmFtZQotICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgewotICAgICAgLy8gZm91bmQgb3V0IHRhcmdldCBuYW1lc3BhY2UKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBib2R5LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsIHx8IG5hbWVzcGFjZS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAvLyAhISBBVFRFTlRJT04KLSAgICAgICAgLy8gbmFtZXNwYWNlIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSBzZXJ2aWNlIHRhcmdldCBuYW1lYXBjZSAgICAgICAgICAgIAotICAgICAgICBuYW1lc3BhY2UgPSBjdHguZ2V0QmluZGluZygpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgIC8vIGluc2VydCBvcGVyYXRpb24gbmFtZSBhcyBmaXJzdCBzaWduYXR1cmUgcGFydAotICAgICAgYWRkaXRpb25hbE5hbWUgPQotICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgbmFtZXNwYWNlLAotICAgICAgICAgIGJvcAotICAgICAgICAgICAgLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgICAuZ2V0T3V0cHV0KCkKLSAgICAgICAgICAgIC5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgIC5nZXRRTmFtZSgpCi0gICAgICAgICAgICAuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLQotICAgIC8vIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uCi0gICAgT3BlcmF0aW9uU2lnbmF0dXJlIG9wID0KLSAgICAgIG5ldyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgICAgIHBhcnRzLAotICAgICAgICBudWxsLAotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICB2YWxpZGF0b3IpLAotICAgICAgICBmYWxzZSk7Ci0gICAgaWYgKGFkZGl0aW9uYWxOYW1lICE9IG51bGwpCi0gICAgICBvcC5nZXRTaWduYXR1cmUoKS5hZGQoMCwgYWRkaXRpb25hbE5hbWUpOwotCi0gICAgaWYgKG9wLmdldFNpZ25hdHVyZSgpLmVxdWFscyhyZXNwb25zZVNpZy5nZXRTaWduYXR1cmUoKSkpCi0gICAgewotICAgICAgLy8gICAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uCi0gICAgICBvcCA9Ci0gICAgICAgIG5ldyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgICAgICAgcGFydHMsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yKSwKLSAgICAgICAgICB0cnVlKTsKLQotICAgICAgaWYgKGFkZGl0aW9uYWxOYW1lICE9IG51bGwpCi0gICAgICAgIG9wLmdldFNpZ25hdHVyZSgpLmFkZCgwLCBhZGRpdGlvbmFsTmFtZSk7Ci0gICAgICBpZiAob3AuZ2V0U2lnbmF0dXJlKCkuZXF1YWxzKHJlc3BvbnNlU2lnLmdldFNpZ25hdHVyZSgpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gICAgICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICJcbk1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotCi0gICAgaWYgKGV4aXN0U09BUEhlYWRlckZhdWx0ID09IGZhbHNlKQotICAgIHsKLSAgICAgIGV4aXN0U09BUEhlYWRlciA9IGZhbHNlOwotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGlmICJ3c2RsOnJlcXVpcmVkIiBpcyB0cnVlIHRoZW4gcmV0dXJuCi0gICAgaWYgKGhlYWRlci5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICYmIGhlYWRlci5nZXRSZXF1aXJlZCgpLmJvb2xlYW5WYWx1ZSgpID09IHRydWUpCi0gICAgICByZXR1cm47Ci0gICAgLy8gZmluZCBoZWFkciBwYXJ0Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBUeXBlc1JlZ2lzdHJ5IHRSZWcgPSAoVHlwZXNSZWdpc3RyeSkgY3R4LmdldFBhcmFtZXRlcigiVHlwZXNSZWdpc3RyeSIpOwotICAgIFBhcnQgbWVzUGFydCA9Ci0gICAgICBXU0RMVXRpbC5nZXRQYXJ0KGQuZ2V0TWVzc2FnZShoZWFkZXIuZ2V0TWVzc2FnZSgpKSwgaGVhZGVyLmdldFBhcnQoKSk7Ci0KLSAgICAvLyB0ZXN0IHRoaXMgcGFydCBhbmQgcGFydHMgZnJvbSBoZWFkZXIgICAgICAgIAotICAgIFFOYW1lIHBhcnRRTmFtZSA9IG1lc1BhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICBpZiAocGFydFFOYW1lID09IG51bGwpCi0gICAgICBwYXJ0UU5hbWUgPSB0UmVnLmdldFR5cGUobWVzUGFydC5nZXRFbGVtZW50TmFtZSgpKTsKLSAgICBpZiAocGFydFFOYW1lID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiUGFydCB0eXBlIGNhbiBub3QgYmUgbnVsbC4iICsgbWVzUGFydC5nZXRFbGVtZW50TmFtZSgpLnRvU3RyaW5nKCkpOwotICAgIFN0cmluZyBsb2NhbCA9IHBhcnRRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICBTdHJpbmcgbnMgPSBwYXJ0UU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICBleGlzdFNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlYWRlclJhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbSA9IChFbGVtZW50KSBoZWFkZXJSYXJ0cy5nZXQoaSk7Ci0gICAgICBpZiAoZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobG9jYWwpCi0gICAgICAgICYmIE51bGxVdGlsLmVxdWFscyhucywgZWxlbS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIGV4aXN0U09BUEhlYWRlciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IHRydWUpCi0gICAgICBjdHguY2FuY2VsU09BUEhlYWRlclByb2Nlc3NpbmcoKTsKLSAgICBpZiAoaXNSZXF1ZXN0ID09IHRydWUpCi0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IGZhbHNlICYmIGlzUmVxdWVzdCA9PSBmYWxzZSkKLSAgICAgIGV4aXN0U09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgaGVhZGVyRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBmaW5kIGhlYWRyIHBhcnQKLSAgICBEZWZpbml0aW9uIGQgPSAoRGVmaW5pdGlvbikgY3R4LmdldFBhcmFtZXRlcigiZGVmaW5pdGlvbiIpOwotICAgIFR5cGVzUmVnaXN0cnkgdFJlZyA9IChUeXBlc1JlZ2lzdHJ5KSBjdHguZ2V0UGFyYW1ldGVyKCJUeXBlc1JlZ2lzdHJ5Iik7Ci0gICAgUGFydCBtZXNQYXJ0ID0KLSAgICAgIFdTRExVdGlsLmdldFBhcnQoCi0gICAgICAgIGQuZ2V0TWVzc2FnZShoZWFkZXJGYXVsdC5nZXRNZXNzYWdlKCkpLAotICAgICAgICBoZWFkZXJGYXVsdC5nZXRQYXJ0KCkpOwotCi0gICAgLy8gdGVzdCB0aGlzIHBhcnQgYW5kIHBhcnRzIGZyb20gaGVhZGVyZmF1bHQKLSAgICBRTmFtZSBwYXJ0UU5hbWUgPSBtZXNQYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgaWYgKHBhcnRRTmFtZSA9PSBudWxsKQotICAgICAgcGFydFFOYW1lID0gdFJlZy5nZXRUeXBlKG1lc1BhcnQuZ2V0RWxlbWVudE5hbWUoKSk7Ci0gICAgaWYgKHBhcnRRTmFtZSA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlBhcnQgdHlwZSBjYW4gbm90IGJlIG51bGwuIiArIG1lc1BhcnQuZ2V0RWxlbWVudE5hbWUoKS50b1N0cmluZygpKTsKLSAgICBTdHJpbmcgbG9jYWwgPSBwYXJ0UU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgU3RyaW5nIG5zID0gcGFydFFOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWFkZXJSYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW0gPSAoRWxlbWVudCkgaGVhZGVyUmFydHMuZ2V0KGkpOwotICAgICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKGxvY2FsKQotICAgICAgICAmJiBOdWxsVXRpbC5lcXVhbHMobnMsIGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICBleGlzdFNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyRmF1bHQgPT0gdHJ1ZSkKLSAgICAgIGN0eC5jYW5jZWxTT0FQSGVhZGVyUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IGZhdWx0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBzZXQgaW4gdHJ1ZSBpZiBhbnkgU09BUEZhdWx0IGV4aXN0Ci0gICAgdmlzaXRGYXVsdCA9IHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMuZW50cnlDb250ZXh0ID0gZW50cnlDb250ZXh0OwotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0gICAgICAvLyBjcmVhdGUgcmVxdWVzdCBzaWduYXR1cmUKLSAgICAgIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvYywKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgIHZhbGlkYXRvciksCi0gICAgICAgICAgZmFsc2UpOwotCi0gICAgICAvLyBpZiBzdWNoIG9wZXJhdGlvbiBleGlzdCAgICAgIAotICAgICAgaWYgKG1hdGNoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlzUmVxdWVzdCA9Ci0gICAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVC5lcXVhbHMoCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKTsKLSAgICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgICBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgICBpZiAoIWlzUmVxdWVzdCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3BvbnNlU2lnID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShkb2MpOwotICAgICAgICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgICAgICAgICByZXNwb25zZVNpZy5jcmVhdGVSUENTaWduYXR1cmUoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBleHRyYWN0IGFsbCBoZWFkZXJzIGZyb20gbWVzc2FnZQotICAgICAgICBFbGVtZW50IGhlYWRlckVsZW0gPQotICAgICAgICAgIFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoCi0gICAgICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUik7Ci0gICAgICAgIGhlYWRlclJhcnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAoaGVhZGVyRWxlbSAhPSBudWxsKQotICAgICAgICAgIGhlYWRlclJhcnRzID0gWE1MVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cyhoZWFkZXJFbGVtKTsKLQotICAgICAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlcih0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0KLSAgICAgICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdJbnB1dDJTT0FQQm9keSgpOwotCi0gICAgICAgIGlmIChpc1JlcXVlc3QpCi0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nSW5wdXQyU09BUEhlYWRlcigpOwotCi0gICAgICAgIGlmIChyZXNwb25zZVNpZyAhPSBudWxsICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ091dHB1dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdGYXVsdCgpOwotCi0gICAgICAgIGV4aXN0U09BUEhlYWRlckZhdWx0ID0gdHJ1ZTsKLSAgICAgICAgTWFwIG0gPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBXU0RMVXRpbC5leHBhbmREZWZpbml0aW9uKAotICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgIG0ucHV0KAotICAgICAgICAgICJkZWZpbml0aW9uIiwKLSAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpKTsKLSAgICAgICAgVHlwZXNSZWdpc3RyeSB0UmVnID0KLSAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgICAgbS5wdXQoIlR5cGVzUmVnaXN0cnkiLCB0UmVnKTsKLSAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpLCBtKTsKLQotICAgICAgICBpZiAoaXNSZXF1ZXN0ID09IGZhbHNlKQotICAgICAgICAgIGlmIChleGlzdFNPQVBIZWFkZXJGYXVsdCA9PSB0cnVlKQotICAgICAgICAgICAgZXhpc3RTT0FQSGVhZGVyID0gdHJ1ZTsKLQotICAgICAgICBpZiAocmVzcG9uc2VTaWcgIT0gbnVsbAotICAgICAgICAgICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKQotICAgICAgICAgICYmIHZpc2l0RmF1bHQgPT0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJcbk1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiXG5NZXNzYWdlOlxuIiArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmNDRjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIFdTSTExMDkuCi0gKiBBbnkgY29uZm9ybWFuY2UgY2xhaW1zIE1VU1QgYmUgY2hpbGRyZW4gb2YgdGhlIHNvYXA6SGVhZGVyIGVsZW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwOShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgaWYgKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkgIT0gbnVsbCkKLSAgICAgICYmICghdGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAvLyBmaW5kICJIZWFkZXIiIGVsZW1lbnQKLSAgICAgICAgTm9kZUxpc3QgaGVhZGVyTGlzdCA9Ci0gICAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkhlYWRlciIpOwotICAgICAgICBFbGVtZW50IGhlYWRlckVsZW0gPSBudWxsOwotICAgICAgICBpZiAoaGVhZGVyTGlzdCAhPSBudWxsICYmIGhlYWRlckxpc3QuZ2V0TGVuZ3RoKCkgIT0gMCkKLSAgICAgICAgICBoZWFkZXJFbGVtID0gKEVsZW1lbnQpIGhlYWRlckxpc3QuaXRlbSgwKTsKLQotICAgICAgICAvLyBmaW5kICJDbGFpbSIgZWxlbWVudAotICAgICAgICBOb2RlTGlzdCBjbGFpbUxpc3QgPQotICAgICAgICAgIHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX0NMQUlNLCAiQ2xhaW0iKTsKLSAgICAgICAgaWYgKGNsYWltTGlzdCA9PSBudWxsIHx8IGNsYWltTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYWltTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChoZWFkZXJFbGVtID09IG51bGwKLSAgICAgICAgICAgICAgfHwgY2xhaW1MaXN0Lml0ZW0oaSkuZ2V0UGFyZW50Tm9kZSgpICE9IGhlYWRlckVsZW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjNiOWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBXU0kxMTEwLgotICogQW55IGNvbmZvcm1hbmNlIGNsYWltcyBNVVNUIGFkaGVyZSB0byB0aGUgV1MtSSBjb25mb3JtYW5jZSAKLSAqIGNsYWltIHNjaGVtYSBkZWZpbmVkIGluIHRoZSBCYXNpYyBQcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTExMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMTAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIERvY3VtZW50IGRvYzsKLSAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpICE9IG51bGwKLSAgICAgICYmICF0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgICYmIChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBmaW5kICJDbGFpbSIgZWxlbWVudAotICAgICAgTm9kZUxpc3QgY2xhaW1MaXN0ID0KLSAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfQ0xBSU0sICJDbGFpbSIpOwotICAgICAgaWYgKGNsYWltTGlzdCA9PSBudWxsIHx8IGNsYWltTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYWltTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIGNsYWltTGlzdC5pdGVtKGkpOwotICAgICAgICAgIC8vIGNoZWNrICJjb25mb3Jtc1RvIiBhdHRyaWJ1dGUKLSAgICAgICAgICBOb2RlIG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImNvbmZvcm1zVG8iKTsKLSAgICAgICAgICBpZiAobm9kZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogVGhpcyBpcyBjaGVja2VkIGluIFdTSTExMTEKLSAgICAgICAgICAvLyBjaGVjayAibXVzdFVuZGVyc3RhbmQiIGF0dHJpYnV0ZQotICAgICAgICAgIG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICJtdXN0VW5kZXJzdGFuZCIpOwotICAgICAgICAgIGlmIChub2RlICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gY3JlYXRlRmFpbHVyZURldGFpbCgiXG5TT0FQIG1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODRlM2ZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBXU0kxMTExLgotICogQW55IGNvbmZvcm1hbmNlIGNsYWltcyBNVVNUIE5PVCB1c2Ugc29hcDptdXN0VW5kZXJzdGFuZD0nMScuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTExIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTExMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkgIT0gbnVsbAotICAgICAgJiYgIXRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgJiYgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vIGZpbmQgIkNsYWltIiBlbGVtZW50Ci0gICAgICBOb2RlTGlzdCBjbGFpbUxpc3QgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9DTEFJTSwgIkNsYWltIik7Ci0gICAgICBpZiAoY2xhaW1MaXN0ICE9IG51bGwgJiYgY2xhaW1MaXN0LmdldExlbmd0aCgpICE9IDApCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIGNvbnRhaW5zICJDbGFpbSIgZWxlbWVudCBmaW5kIGFsbCAiSGVhZGVyIiBlbGVtZW50cwotICAgICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0KLSAgICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0gICAgICAgIGlmIChoZWFkZXJMaXN0ICE9IG51bGwgJiYgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaUhlYWRlciA9IDA7IGlIZWFkZXIgPCBoZWFkZXJMaXN0LmdldExlbmd0aCgpOyBpSGVhZGVyKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZmluZCBhbGwgIkhlYWRlciIgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICAgIE5vZGUgY2hpbGQgPSBoZWFkZXJMaXN0Lml0ZW0oaUhlYWRlcikuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChjaGlsZC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgY29udGFpbnMgIm11c3RVbmRlcnN0YW5kIiAtPiBmYWlsCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF0dHJWYWwgPQotICAgICAgICAgICAgICAgICAgKChFbGVtZW50KSBjaGlsZCkuZ2V0QXR0cmlidXRlTlMoCi0gICAgICAgICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICAgICAgICAgICAgIm11c3RVbmRlcnN0YW5kIik7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJWYWwgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKGF0dHJWYWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICBpSGVhZGVyID0gaGVhZGVyTGlzdC5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5ZGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTExNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTExNiBleHRlbmRzIEJQMTExNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMTE2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjNlYmFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUFdTSTQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTIxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEyMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdUOiAtLSBzdGFydDogYmFzZSBvbiB3c2kxMDExIC0gc2hvdWxkIHJlZmFjdG9yIHRoaXMKLQotICAgICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKTsKLQotICAgICAgLy8gZ2V0IHNvYXAgbWVzc2FnZSBjaGlsZCBuYW1lCi0gICAgICAvLyBHZXQgdGhlIERPTSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSBzb2FwOmJvZHkgKGlmIG5vbi1lbXB0eSkKLSAgICAgIERvY3VtZW50IG1lc3NhZ2VEb2MgPSBudWxsOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9IG51bGw7Ci0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZURvYyA9Ci0gICAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIC8vIGdldCBzb2FwIG9wZXJhdGlvbiBuYW1lIGZyb20gdGhlIHNvYXA6Ym9keQotCi0gICAgICAgIC8vIE5PVEU6IGdldFNvYXBCb2R5Q2hpbGQoKSBtYXkgcmV0dXJuIG51bGwsIGlmIHRoZSBzb2FwOmJvZHkgZGlkIG5vdCBjb250YWluIGFueSBjaGlsZCBlbGVtZW50cwotICAgICAgICBFbGVtZW50IHNvYXBNZXNzYWdlRWxlbWVudCA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQobWVzc2FnZURvYyk7Ci0KLSAgICAgICAgLy8gZm9yIGRvYy1saXQuLi4gZmluZCB0aGUgd3NkbDpwYXJ0IGZyb20gb25lIG9mIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9ucyB0aGF0IGhhcyAKLSAgICAgICAgLy8gdGhlIHNvYXAgZWxlbWVudCB1c2VkIGluIHRoZSBtZXNzYWdlLiAgICAgIAotICAgICAgICAvLyB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0IHdpdGggYW4gZWxlbWVudCBhdHRyaWIgdmFsIG1hdGNoaW5nIHRoZSBzb2FwIG1lc3NhZ2UgZWxlbWVudAotICAgICAgICBpZiAoc29hcE1lc3NhZ2VFbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9Ci0gICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICAgICAgc29hcE1lc3NhZ2VFbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoKG1lc3NhZ2VEb2MgPT0gbnVsbCkgfHwgdGhpcy52YWxpZGF0b3IuaXNGYXVsdChtZXNzYWdlRG9jKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZW1wdHkgbWVzc2FnZXMgYW5kIG1lc3NhZ2VzIGNvbnRhaW5pbmcgc29hcDpGYXVsdHMgZG8gbm90IHF1YWxpZnkgZm9yIHRoaXMgVEEKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgQmluZGluZ09wZXJhdGlvbltdIGRvY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICAgICAgYmluZGluZ3MpOwotICAgICAgLy8gbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbWF0Y2ggdGhlIDx3c2RsOmlucHV0PiBvciA8d3NkbDpvdXRwdXQ+IChkZXBlbmRpbmcgb24gZW50cnlUeXBlKQotICAgICAgLy8gZm9yIHBhcnQgZWxlbWVudD0iLi4uIgotICAgICAgLy8gKElTU1VFOiB3aGF0IGFib3V0IHBhcnQgdHlwZT0iLi4uIj8pCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICAvLyBHVDogLS0tIGVuZDogYmFzZSBvbiB3c2kxMDExCi0KLSAgICAgIC8vICAgICAgICAgICAgICAgCi0gICAgICBpZiAocG90ZW50aWFsRG9jTGl0T3BzLmxlbmd0aCA9PSAwKQotICAgICAgewotICAgICAgICAvLyBub3QgZG9jLWxpdCBzbyBxdWl0Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgYSBkb2MtbGl0IG1hdGNoLCBzbyBub3cgdHJ5IHRvIHZhbGlkYXRlIHRoZSBzb2FwIG1lc3NhZ2UgYWdhaW5zdCB0aGUKLSAgICAgIC8vIHJlZmVyZW5jZWQgc2NoZW1hCi0KLSAgICAgIC8vIEdUIC0gaG93IHRvIHJlZmVyZW5jZSB0aGUgc2NoZW1hIGRvY3VtZW50Pz8gbmVlZCB0byB1c2UgdGhlIDx3c2RsOnBhcnQ+LCBvciBkbyBpdCBwdXJlbHkKLSAgICAgIC8vIGZyb20gdGhlIHNvYXAgbWVzc2FnZSBlbGVtZW50cz8KLSAgICAgIC8vIGllIGJvZHksIGVudmVsb3BlIG9yIHdzZGw/PwotCi0gICAgICAvLyA8ZXhwZXJpbWVudD4KLQotICAgICAgYm9vbGVhbiBpc1NjaGVtYVZhbGlkOwotICAgICAgCi0gICAgICB0cnkgewotICAgICAgCQlpc1NjaGVtYVZhbGlkID0gdGhpcy52YWxpZGF0b3IubWVzc2FnZUlzRG9jTGl0U2NoZW1hVmFsaWQoZW50cnlDb250ZXh0KTsgICAgICAgICAKLSAgICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgIAkJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIAl9Ci0gICAgICAvLyA8L2V4cGVyaW1lbnQ+Ci0gICAgICAKLQotICAgICAgLy9pc1NjaGVtYVZhbGlkID0gdHJ1ZTsgLy8gZm9yIG5vdywgZ2V0dGluZyB0aGlzIGZhciBkb2VzIGl0Ci0KLSAgICAgIGlmIChpc1NjaGVtYVZhbGlkKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNmYwODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEyMDE7Ci0KLS8qKgotICogV1NJMTIwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTIwMSBleHRlbmRzIEJQMTIwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTMxY2Q2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMjAyOwotCi0vKioKLSAqIFdTSTEyMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTEyMDIgZXh0ZW5kcyBCUDEyMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTIwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzYmNiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTIwMzsKLQotLyoqCi0gKiBXU0kxMjAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMjAzIGV4dGVuZHMgQlAxMjAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEyMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZGRhNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEyMDQ7Ci0KLS8qKgotICogV1NJMTIwNAotICovCi1wdWJsaWMgY2xhc3MgV1NJMTIwNCBleHRlbmRzIEJQMTIwNAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMjA0KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk0OTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMjA4OwotCi0vKioKLSAqIFdTSTEyMDgKLSAqLwotcHVibGljIGNsYXNzIFdTSTEyMDggZXh0ZW5kcyBCUDEyMDgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTIwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNTdjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTIxMTsKLQotLyoqCi0gKiBXU0kxMjExCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMjExIGV4dGVuZHMgQlAxMjExCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEyMTEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMGViODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDE7Ci0KLS8qKgotICogV1NJMTMwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwMSBleHRlbmRzIEJQMTMwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTk3NmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzAyOwotCi0vKioKLSAqIFdTSTEzMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMDIgZXh0ZW5kcyBCUDEzMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyZTEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMwNTsKLQotLyoqCi0gKiBXU0kxMzA1Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzA1IGV4dGVuZHMgQlAxMzA1Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMDUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MTA2MjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDY7Ci0KLS8qKgotICogV1NJMTMwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwNiBleHRlbmRzIEJQMTMwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwNWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzA3OwotCi0vKioKLSAqIFdTSTEzMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMDcgZXh0ZW5kcyBCUDEzMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyNzFjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMwODsKLQotLyoqCi0gKiBXU0kxMzA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzA4IGV4dGVuZHMgQlAxMzA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjQzNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDk7Ci0KLS8qKgotICogV1NJMTMwOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwOSBleHRlbmRzIEJQMTMwOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk4ZmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIFRoZSByZXNwb25zZSAoU09BUCBlbnZlbG9wZSkgc2hvdWxkIGJlIGNhcnJpZWQgYnkgYW4gSFRUUCAKLSAqIHJlc3BvbnNlLCBvdmVyIHNhbWUgSFRUUCBjb25uZWN0aW9uIGFzIHRoZSBSZXF1ZXN0LiAKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzExKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBib29sZWFuIGlzT25lV2F5UmVzcG9uc2UgPSB0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCk7Ci0KLSAgICBEb2N1bWVudCBkb2NSZXNwb25zZSA9IG51bGw7Ci0gICAgaWYgKCFpc09uZVdheVJlc3BvbnNlKQotICAgICAgZG9jUmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2VEb2N1bWVudCgpOwotCi0gICAgLy9pZiBmYXVsdAotICAgIGlmICghaXNPbmVXYXlSZXNwb25zZSAmJiB0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvY1Jlc3BvbnNlKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsgLy8gbm90IGZhdWx0Ci0gICAgICAvLyAxLiBnZXQgYW4gb3BlcmF0aW9uIGZyb20gcmVxdWVzdAotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvY1JlcXVlc3QsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotCi0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLQotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotCi0gICAgICAgICAgLy8gICAgQ2hlY2sgd2hldGhlciB0aGUgdHJhbnNwb3J0IGF0dHJpYnV0ZSBoYXMgdGhlIHZhbHVlIAotICAgICAgICAgIC8vICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi4gCi0gICAgICAgICAgTGlzdCBleHRFbGVtID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGluZGV4ID0gZXh0RWxlbS5pdGVyYXRvcigpOyBpbmRleC5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCBvID0gKE9iamVjdCkgaW5kZXgubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTT0FQQmluZGluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIG87Ci0gICAgICAgICAgICAgIGlmICghV1NJQ29uc3RhbnRzCi0gICAgICAgICAgICAgICAgLk5TX1VSSV9TT0FQX0hUVFAKLSAgICAgICAgICAgICAgICAuZXF1YWxzKHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vZmluZCBvcGVyYXRpb24gaW4gcG9ydCB0eXBlCi0gICAgICAgICAgb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoaXNPbmVXYXlSZXNwb25zZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3BlcmF0aW9uLmdldE91dHB1dCgpID09IG51bGwpCi0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gICAgY2hlY2sgd2hldGhlciB0aGUgcmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBsb2cgCi0gICAgICAgICAgLy8gIGNvbnRhaW5zIHRoZSBvdXRwdXQgbWVzc2FnZQotICAgICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgICAgICBkb2NSZXNwb25zZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKTsKLSAgICAgICAgICBpZiAoKHNvYXBCb2R5TGlzdCA9PSBudWxsKSB8fCAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYW55IHNvYXAgQm9keSBlbGVtZW50cwotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IG5leHRCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbShpKTsKLSAgICAgICAgICAgIEVsZW1lbnQgc29hcE1lc3NhZ2VFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChuZXh0Qm9keUVsZW0pOwotICAgICAgICAgICAgd2hpbGUgKHNvYXBNZXNzYWdlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBvcGVyYXRpb24gb3V0cHV0IGhhcyBtZXNzYWdlIGZyb20gU09BUCByZXNwb25zZQotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgICBRTmFtZSBzb2FwTWVzc2FnZVFOYW1lID0KLSAgICAgICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAgICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwKLSAgICAgICAgICAgICAgICAmJiBzb2FwTWVzc2FnZVFOYW1lLmVxdWFscyhtZXNzYWdlLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudCA9Ci0gICAgICAgICAgICAgICAgWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoc29hcE1lc3NhZ2VFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQzMTY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzE2OwotCi0vKioKLSAqIFdTSTEzMTYKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMTYgZXh0ZW5kcyBCUDEzMTYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMxNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzY2Q5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMxODsKLQotLyoqCi0gKiBXU0kxMzE4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzE4IGV4dGVuZHMgQlAxMzE4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMTgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTE2MDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTIwZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTE2MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDE2MDE7Ci0KLS8qKgotICogV1NJMTYwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTYwMSBleHRlbmRzIEJQMTYwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxNjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTdiZWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxNzAxOwotCi0vKioKLSAqIFdTSTE3MDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTE3MDEgZXh0ZW5kcyBCUDE3MDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTcwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFjMWExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQNDEwMDsKLQotLyoqCi0gKiBXU0k0MTAwCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0k0MTAwIGV4dGVuZHMgQlA0MTAwCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTQxMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDE2NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDQxMDE7Ci0KLS8qKgotICogV1NJNDEwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJNDEwMSBleHRlbmRzIEJQNDEwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0k0MTAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjVmZmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlA0MTAyOwotCi0vKioKLSAqIFdTSTQxMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDIgZXh0ZW5kcyBCUDQxMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2MWQwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDMgZXh0ZW5kcyBCUDQxMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxNzZkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDQKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDQgZXh0ZW5kcyBCUDQxMDQKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmZjhkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDUKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDUgZXh0ZW5kcyBCUDQxMDUKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhNDRhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDYKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDYgZXh0ZW5kcyBCUDQxMDYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkNTI0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDcgZXh0ZW5kcyBCUDQxMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZjAzZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuT3ZlcnZpZXdEb2M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi0KLS8qKgotICogQlAzMDAxIC0gVGhlIHRNb2RlbCBlbGVtZW50IHVzZXMgV1NETCBhcyB0aGUgZGVzY3JpcHRpb24gbGFuZ3VhZ2U6Ci0gKiB0aGUgdWRkaTpvdmVydmlld0RvYy91ZGRpOm92ZXJ2aWV3VVJMIGVsZW1lbnQgY29udGFpbnMgYSByZWZlcmVuY2UKLSAqIHRvIGEgV1NETCBkZWZpbml0aW9uLCB3aGljaCB1c2VzIGEgbmFtZXNwYWNlCi0gKiBvZiBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAqIFRoZSB1ZGRpOm92ZXJ2aWV3VVJMIG1heSB1c2UgdGhlIGZyYWdtZW50IG5vdGF0aW9uIHRvIHJlc29sdmUKLSAqIHRvIGEgd3NkbDpiaW5kaW5nLgotICovCi1wdWJsaWMgY2xhc3MgQlAzMDAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFVERElWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAzMDAxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcmVzdWx0IHZhcmlhYmxlIHRvIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEIHZhbHVlIGFuZAotICAgKiBwbGFjZXMgYSB0TW9kZWwga2V5IGluIHRoZSBmYXVsdCBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIHRNb2RlbEtleQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNldEZhdWx0TWVzc2FnZShTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiVGhlIHRNb2RlbCBrZXkgaXM6IFsiICsgdE1vZGVsS2V5ICsgIl0uIjsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSB0TW9kZWwgZnJvbSB0aGUgZW50cnlDb250ZXh0Ci0gICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBJZiB0aGUgdE1vZGVsIGRvZXMgbm90IGV4aXN0LCB0aGVuIGZhaWwKLSAgICBpZiAodE1vZGVsID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9ICJDb3VsZCBub3QgbG9jYXRlIGEgdE1vZGVsLiI7Ci0gICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgcmVzdWx0LAotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGtleSA9IHRNb2RlbC5nZXRUTW9kZWxLZXkoKTsKLQotICAgIE92ZXJ2aWV3RG9jIGRvYyA9IHRNb2RlbC5nZXRPdmVydmlld0RvYygpOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXJsVGV4dCA9IGRvYy5nZXRPdmVydmlld1VSTFN0cmluZygpOwotCi0gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgVVJMICYgY2hlY2sgdGhlIFdTREwKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbmV3IFdTRExEb2N1bWVudCh1cmxUZXh0KTsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCk7Ci0gICAgICAgIE1hcCBuYW1lc3BhY2VzID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGlmICghbmFtZXNwYWNlcy5jb250YWluc1ZhbHVlKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkpCi0gICAgICAgIHsKLSAgICAgICAgICB1cmxUZXh0ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCBiaW5kaW5nCi0gICAgICAgIGJpbmRpbmcgPSBVRERJVXRpbHMuZ2V0QmluZGluZyh1cmxUZXh0LCB3c2RsRG9jdW1lbnQpOwotCi0gICAgICAgIC8vIFNlZSBpZiB0aGUgYmluZGluZyBpcyBpbiB0aGUgV1NETCBkb2N1bWVudAotICAgICAgICBpZiAoYmluZGluZyA9PSBudWxsCi0gICAgICAgICAgfHwgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmcuZ2V0UU5hbWUoKSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHVybFRleHQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgdXJsVGV4dCA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1cmxUZXh0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBmcmFnbWVudElEID0gbnVsbDsKLSAgICAgICAgaW50IGluZGV4ID0gdXJsVGV4dC5pbmRleE9mKCIjIik7Ci0gICAgICAgIGlmIChpbmRleCA+IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgZnJhZ21lbnRJRCA9IHVybFRleHQuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGZyYWdtZW50SUQgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoZnJhZ21lbnRJRC5sZW5ndGgoKSAhPSAwKQotICAgICAgICAgICYmIChmcmFnbWVudElELnRvVXBwZXJDYXNlKCkuaW5kZXhPZigieHBvaW50ZXIoIi50b1VwcGVyQ2FzZSgpKSA9PSAtMQotICAgICAgICAgICAgfHwgZnJhZ21lbnRJRC5sYXN0SW5kZXhPZigiKSIpICE9IGZyYWdtZW50SUQubGVuZ3RoKCkgLSAxKSkKLSAgICAgICAgewotICAgICAgICAgIHNldEZhdWx0TWVzc2FnZShrZXkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2V0RmF1bHRNZXNzYWdlKGtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEZhdWx0TWVzc2FnZShrZXkpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MmNkZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLQotCi0vKioKLSAqIEJQMzAwMiAtIFRoZSB1ZGRpOmJpbmRpbmdUZW1wbGF0ZSBlbGVtZW50IGNvbnRhaW5zIGEgdWRkaTphY2Nlc3NQb2ludCBlbGVtZW50LAotICogd2l0aCBhIG5vbi1lbXB0eSB2YWx1ZS4KLSAqLwotcHVibGljIGNsYXNzIEJQMzAwMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMzAwMihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbiA9IG51bGw7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZ1RlbXBsYXRlIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPQotICAgICAgKEJpbmRpbmdUZW1wbGF0ZSkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIHRoZSBiaW5kaW5nVGVtcGxhdGUgZG9lcyBub3QgY29udGFpbiBhbiBhY2Nlc3NQb2ludCwgdGhlbiBmYWlsCi0gICAgaWYgKChiaW5kaW5nVGVtcGxhdGUuZ2V0QWNjZXNzUG9pbnQoKSA9PSBudWxsKQotICAgICAgfHwgKChzZXJ2aWNlTG9jYXRpb24gPSBiaW5kaW5nVGVtcGxhdGUuZ2V0QWNjZXNzUG9pbnQoKS5nZXRUZXh0KCkpCi0gICAgICAgID09IG51bGwpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAiVGhlIGJpbmRpbmdUZW1wYXRlIGtleSBpczogWyIKLSAgICAgICAgICArIGJpbmRpbmdUZW1wbGF0ZS5nZXRCaW5kaW5nS2V5KCkKLSAgICAgICAgICArICJdLiI7Ci0gICAgfQotCi0gICAgLy8gRWxzZSBzYXZlIHRoZSBzZXJ2aWNlIGxvY2F0aW9uIGluIHRoZSBhc3NlcnRpb24gcmVzdWx0Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFNhdmUgc2VydmljZSBsb2NhdGlvbiBpbiBhbmFseXplciBjb250ZXh0Ci0gICAgICBlbnRyeUNvbnRleHQKLSAgICAgICAgLmdldEFuYWx5emVyQ29udGV4dCgpCi0gICAgICAgIC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCkKLSAgICAgICAgLnNldFNlcnZpY2VMb2NhdGlvbigKLSAgICAgICAgc2VydmljZUxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGU3ZDQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9CUDMwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLQotLyoqCi0gKiBCUDMwMDMgLSBUaGUgdWRkaTp0TW9kZWwgaXMgY2F0ZWdvcml6ZWQgdXNpbmcgdGhlIHVkZGk6dHlwZXMgdGF4b25vbXksCi0gKiBhcyAid3NkbFNwZWMiOiB0aGUgdWRkaTprZXllZFJlZmVyZW5jZSBlbGVtZW50IGhhcyBhbiBhdHRyaWJ1dGUga2V5VmFsdWUKLSAqIGVxdWFsIHRvICJ3c2RsU3BlYyIsIGFuZCBrZXlOYW1lIGVxdWFsIHRvICJ1ZGRpLW9yZzp0eXBlcyIgb3IgInR5cGVzIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMzAwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMzAwMyhVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIHRNb2RlbCBmcm9tIHRoZSBlbnRyeUNvbnRleHQKLSAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbCkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIHRoZSB0TW9kZWwgZG9lcyBub3QgZXhpc3QsIHRoZW4gZmFpbAotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgYSB0TW9kZWwgd2l0aCBhIGNhdGVnb3JpemF0aW9uIG9mICd3c2RsU3BlYycuIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRNb2RlbCBhbmQgaXQgaXMgbm90IGNhdGVnb3JpemVkIGFzICJ3c2RsU3BlYyIsIHRoZW4gZmFpbAotICAgIGVsc2UgaWYgKCEoVURESVV0aWxzLmlzV3NkbFNwZWModE1vZGVsKSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIKLSAgICAgICAgICArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICsgIl1cbiIKLSAgICAgICAgICArICJUaGUgY2F0ZWdvcnlCYWcgaXM6IFsiCi0gICAgICAgICAgKyB0aGlzLnZhbGlkYXRvci5jYXRlZ29yeUJhZ1RvU3RyaW5nKHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKQotICAgICAgICAgICsgIl0iOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvVURESVZhbGlkYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9VRERJVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGJjOWVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9VRERJVmFsaWRhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQmluZGluZ0RldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogVGhlIFVEREkgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgYSB3ZWIgc2VydmljZSBkZXNjcmlwdGlvbiB3YXMgcHVibGlzaGVkIGNvcnJlY3RseSBpbiBhIFVEREkgcmVnaXN0cnkuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVURESVZhbGlkYXRvckltcGwKLSAgZXh0ZW5kcyBCYXNlVmFsaWRhdG9ySW1wbAotICBpbXBsZW1lbnRzIFVERElWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFVEREkgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZTsKLSAgLyoqCi0gICAqIFVEREkgcHJveHkuCi0gICAqLwotICBwcm90ZWN0ZWQgVURESVByb3h5IHVkZGlQcm94eTsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RhYmxlOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfRElTQ09WRVJZOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgY29sbGVjdGlvbiBvZiBlbnRyeSB0eXBlcyB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgZW50cnkgdHlwZXMgKFN0cmluZ3MpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0RW50cnlUeXBlcygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICBUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUsCi0gICAgICAgICAgICAgIFRZUEVfRElTQ09WRVJZX1RNT0RFTH07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgICAgICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotICAgICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsCi0gICAgICAgICAgICAgIGFzc2VydGlvbnMuZ2V0QXJ0aWZhY3QoVFlQRV9ESVNDT1ZFUlkpLCByZXBvcnRBcnRpZmFjdCwgcmVwb3J0ZXIpOwotICAgICAgdGhpcy51ZGRpUmVmZXJlbmNlID0gYW5hbHl6ZXJDb25maWcuZ2V0VURESVJlZmVyZW5jZSgpOwotICAgICAgdGVzdGFibGUgPSBhbmFseXplckNvbmZpZy5pc1VERElSZWZlcmVuY2VTZXQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuVURESVZhbGlkYXRvciNpbml0KG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQsIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCwgb3JnLndzaS50ZXN0LmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlLCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBcnRpZmFjdCwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLQotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnID0gVXRpbHMuZ2V0QW5hbHl6ZXJDb25maWcocmVwb3J0ZXIpOwotICAgIHRlc3RhYmxlID0gKChhbmFseXplckNvbmZpZyAhPSBudWxsKSAmJiAoYW5hbHl6ZXJDb25maWcuaXNVRERJUmVmZXJlbmNlU2V0KCkpKTsJCi0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZXMKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSB1ZGRpUmVmZXJlbmNlOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuVURESVZhbGlkYXRvciN2YWxpZGF0ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9IG51bGw7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IG51bGw7Ci0KLSAgICAvLyBpdCBkZXByaWNhdGVkIGFmdGVyIHJlZmFjdG9yaW5nIAotICAgIC8vIG5vdyB0aGUgaW5uZXIgY2xhc3NlcyBtb3ZlZCBvdXQgZnJvbSB2YWxpZGF0b3IKLSAgICAvL1N0cmluZyBjbGFzc1ByZWZpeCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiJCI7Ci0gICAgU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi4iOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2V0IHVwIGEgcmVmZXJlbmNlIHRvIHRoZSBVRERJIHJlZ2lzdHJ5Ci0gICAgICB1ZGRpUHJveHkgPSBuZXcgVURESVByb3h5KCk7Ci0KLSAgICAgIC8vbmV3IFNvY2tldChuZXcgSW5ldEFkZHJlc3ModWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCkpKTsKLSAgICAgIHVkZGlQcm94eS5zZXRJbnF1aXJ5VVJMKHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgIGJvb2xlYW4gd2FzRXggPSBmYWxzZTsKLSAgICAgIElucHV0U3RyZWFtIHN0cmVhbTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBVUkwgdXJsID0gU3RyaW5nVXRpbHMuZ2V0VVJMKG51bGwsIHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgICAgc3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgc3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiBleCkKLSAgICAgIHsKLSAgICAgICAgd2FzRXggPSB0cnVlOwotICAgICAgfQotCi0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXgpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghd2FzRXgpCi0gICAgICB7Ci0KLSAgICAgICAgLy8gSWYgdGhlIFVEREkgcmVmZXJlbmNlIGlzIHRvIGEgYmluZGluZ1RlbXBsYXRlIHRoZW4gZ2V0IGl0Ci0gICAgICAgIGlmICh1ZGRpUmVmZXJlbmNlLmdldEtleVR5cGUoKS5lcXVhbHMoVURESVJlZmVyZW5jZS5CSU5ESU5HX0tFWSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgYmluZGluZyBkZXRhaWwgd2hpY2ggd2lsbCBjb250YWluIHRoZSBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgICBCaW5kaW5nRGV0YWlsIGJpbmRpbmdEZXRhaWwgPQotICAgICAgICAgICAgdWRkaVByb3h5LmdldF9iaW5kaW5nRGV0YWlsKHVkZGlSZWZlcmVuY2UuZ2V0S2V5KCkpOwotCi0gICAgICAgICAgLy8gR2V0IGJpbmRpbmdUZW1wbGF0ZQotICAgICAgICAgIGJpbmRpbmdUZW1wbGF0ZSA9Ci0gICAgICAgICAgICAoQmluZGluZ1RlbXBsYXRlKSBiaW5kaW5nRGV0YWlsCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nVGVtcGxhdGVWZWN0b3IoKQotICAgICAgICAgICAgICAuZWxlbWVudEF0KAotICAgICAgICAgICAgICAwKTsKLQotICAgICAgICAgIGlmICh2ZXJib3NlT3B0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgICAgICAgIiAgICBCaW5kaW5nVGVtcGxhdGUgLSAiCi0gICAgICAgICAgICAgICAgKyBVRERJVXRpbHMuYmluZGluZ1RlbXBsYXRlVG9TdHJpbmcoYmluZGluZ1RlbXBsYXRlKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gR2V0IHRoZSB3c2RsU3BlYyB0TW9kZWwKLSAgICAgICAgICB0TW9kZWwgPSBVRERJVXRpbHMuZmluZFRNb2RlbCh1ZGRpUHJveHksIGJpbmRpbmdUZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2VPcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRWxzZSBpdCBoYXMgdG8gYmUgYSB0TW9kZWwKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9Ci0gICAgICAgICAgICB1ZGRpUHJveHkuZ2V0X3RNb2RlbERldGFpbCh1ZGRpUmVmZXJlbmNlLmdldEtleSgpKTsKLSAgICAgICAgICB0TW9kZWwgPSAoVE1vZGVsKSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCkuZWxlbWVudEF0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAiICAgIFRNb2RlbCBzcGVjaWZpZWQgb3IgZm91bmQgaW4gYmluZGluZ1RlbXBsYXRlIC0gIgotICAgICAgICAgICAgICArIFVERElVdGlscy50TW9kZWxUb1N0cmluZyh0TW9kZWwpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoYmluZGluZ1RlbXBsYXRlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dCgKLSAgICAgICAgICBFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSkpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhIGJpbmRpbmdUZW1wbGF0ZSwgdGhlbiBwcm9jZXNzIHRlc3QgYXNzZXJ0aW9ucyBmb3IgaXQKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIGVudHJ5Ci0gICAgICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoCi0gICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUpKTsKLSAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoYmluZGluZ1RlbXBsYXRlLmdldEJpbmRpbmdLZXkoKSk7Ci0gICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGJpbmRpbmdUZW1wbGF0ZSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyB0ZXN0IGFzc2VydGlvbnMKLSAgICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgbmV3IEVudHJ5Q29udGV4dChlbnRyeSwgdGhpcy5hbmFseXplckNvbnRleHQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gTk9URTogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIGlmIGEgYmluZGluZ1RlbXBsYXRlIGRvZXMgTk9UIGhhdmUgYSB3c2RsU3BlYyB0TW9kZWwsCi0gICAgICAvLyAgICAgICB0aGUgdE1vZGVsIHdpbGwgYmUgTlVMTC4KLQotICAgICAgLy8gQ3JlYXRlIGVudHJ5Ci0gICAgICBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLSAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9UTU9ERUwpKTsKLSAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKAotICAgICAgICAodE1vZGVsID09IG51bGwgPyAiW3RNb2RlbF0iIDogdE1vZGVsLmdldFRNb2RlbEtleSgpKSk7Ci0gICAgICBlbnRyeS5zZXRFbnRyeURldGFpbCh0TW9kZWwpOwotCi0gICAgICAvLyBQcm9jZXNzIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB0aGlzLmFuYWx5emVyQ29udGV4dCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBUaHJvdyBXU0lFeGNlcHRpb24KLSAgICAgIGlmIChlIGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgICAgICB0aHJvdyAoV1NJRXhjZXB0aW9uKSBlOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZGlzY292ZXJ5IHRlc3QgYXNzZXJ0aW9ucy4iLAotICAgICAgICAgIGUpOwotICAgIH0KLQotICAgIC8vIENsZWFudXAKLSAgICBjbGVhbnVwKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3IjdmFsaWRhdGUoKQotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSB2YWxpZGF0ZUFydGlmYWN0KCkuICovCi0gIHB1YmxpYyBTdHJpbmcgdmFsaWRhdGUoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0ZUFydGlmYWN0KCk7Ci0gICAgLy8gR2V0IFdTREwgbG9jYXRpb24KLSAgICByZXR1cm4gdGhpcy5hbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpLmdldFdTRExMb2NhdGlvbigpOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IFdTREwgYmluZGluZyBpbiB0aGUgc2VydmljZSByZWZlcmVuY2UgcG9ydGlvbiBvZiB0aGUgYW5hbHl6ZXIgY29udGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFdTRExCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9Ci0gICAgICBiaW5kaW5nID09IG51bGwgPyBudWxsIDogYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPQotICAgICAgYmluZGluZyA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIC8vIFNldCB0aGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbiBpbiBhbmFseXplckNvbnRleHQKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPQotICAgICAgdGhpcy5hbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpOwotCi0gICAgLy8gSWYgdGhlIHdzZGxFbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVuIHNldCBpdAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50OwotICAgIGlmICgod3NkbEVsZW1lbnQgPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkpID09IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgYW5kIHNldCBpbiBhbmFseXplckNvbnRleHQKLSAgICAgIHdzZGxFbGVtZW50ID0gbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShiaW5kaW5nTmFtZSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgIHdzZGxFbGVtZW50LnNldFR5cGUoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgd3NkbEVsZW1lbnQgaW4gdGhlIHNlcnZpY2UgcmVmZXJlbmNlCi0gICAgc2VydmljZVJlZmVyZW5jZS5zZXRXU0RMRWxlbWVudCh3c2RsRWxlbWVudCk7Ci0KLSAgICAvLyBTZXQgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIGJhY2sgaW50byB0aGUgYW5hbHl6ZXJDb250ZXh0Ci0gICAgYW5hbHl6ZXJDb250ZXh0LnNldFNlcnZpY2VSZWZlcmVuY2Uoc2VydmljZVJlZmVyZW5jZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXU0RMIGxvY2F0aW9uIGluIHRoZSBzZXJ2aWNlIHJlZmVyZW5jZSBwb3J0aW9uIG9mIHRoZSBhbmFseXplciBjb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgLy8gU2V0IHRoZSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uIGluIGFuYWx5emVyQ29udGV4dAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSA9Ci0gICAgICB0aGlzLmFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCk7Ci0gICAgc2VydmljZVJlZmVyZW5jZS5zZXRXU0RMTG9jYXRpb24od3NkbFVSTCk7Ci0KLSAgICAvLyBTZXQgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIGJhY2sgaW50byB0aGUgYW5hbHl6ZXJDb250ZXh0Ci0gICAgYW5hbHl6ZXJDb250ZXh0LnNldFNlcnZpY2VSZWZlcmVuY2Uoc2VydmljZVJlZmVyZW5jZSk7Ci0gIH0KLQotICAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGlzIGEgd3NkbFNwZWMgdE1vZGVsLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVV0aWxzLmlzV3NkbFNwZWMoU3RyaW5nIHdzZGxMb2NhdGlvbikuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1dzZGxTcGVjKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBib29sZWFuIHRNb2RlbEZvdW5kID0gZmFsc2U7Ci0gICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSBudWxsOwotICAgIEl0ZXJhdG9yIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBjYXRldGdvcnlCYWcgY29udGFpbnMgd3NkbFNwZWMKLSAgICBpZiAoKGNhdGVnb3J5QmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCkpICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGtleWVkIHJlZmVyZW5jZXMKLSAgICAgIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBjYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmZXJlbmNlID0gbnVsbDsKLQotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBrZXllZCByZWZlcmVuY2VzCi0gICAgICB3aGlsZSAoY2F0ZWdvcnlCYWdJdGVyYXRvci5oYXNOZXh0KCkgJiYgISh0TW9kZWxGb3VuZCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGtleWVkIHJlZmVyZW5jZQotICAgICAgICBrZXllZFJlZmVyZW5jZSA9IChLZXllZFJlZmVyZW5jZSkgY2F0ZWdvcnlCYWdJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHR5cGVzIHRheG9ub215IHRNb2RlbCBhbmQgdGhlIHZhbHVlIGlzIHdzZGxTcGVjLCB0aGVuIHRoaXMgaXMgdGhlIHRNb2RlbCB3ZSB3YW50Ci0gICAgICAgIC8vIFJFTU9WRTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayB0aGUga2V5IG5hbWUKLSAgICAgICAgLy9pZiAoa2V5ZWRSZWZlcmVuY2UuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkgJiYKLSAgICAgICAgLy8gICAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSAmJgotICAgICAgICAvLyAgICgidHlwZXMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlOYW1lKCkpIHx8Ci0gICAgICAgIC8vICAgICJ1ZGRpLW9yZzp0eXBlcyIuZXF1YWxzKGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKSkpKSB7Ci0gICAgICAgIC8vICB0TW9kZWxGb3VuZCA9IHRydWU7Ci0gICAgICAgIC8vfQotICAgICAgICBpZiAoa2V5ZWRSZWZlcmVuY2UKLSAgICAgICAgICAuZ2V0VE1vZGVsS2V5KCkKLSAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkKLSAgICAgICAgICAmJiAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRNb2RlbEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0TW9kZWxGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYW4gT3ZlcnZpZXdVUkwgZnJvbSB0TW9kZWwuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwoU3RyaW5nIHdzZGxMb2NhdGlvbikuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldE92ZXJ2aWV3VVJMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBpZiAodE1vZGVsICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkwoKS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVV0aWxzLmdldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsTG9jYXRpb24pCi0gIHsKLSAgICBpbnQgaW5kZXg7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgb3ZlcnZpZXdVUkwgY29udGFpbnMgYSBmcmFnbWVudCBpZGVudGlmaWVyCi0gICAgaWYgKChpbmRleCA9IHdzZGxMb2NhdGlvbi5pbmRleE9mKCIjIikpID4gLTEpCi0gICAgewotICAgICAgd3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsTG9jYXRpb247Ci0gIH0KLSAKLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoU3RyaW5nIHdzZGxMb2NhdGlvbikKLSAgICB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3IFdTRExEb2N1bWVudChVRERJVXRpbHMuZ2V0V1NETExvY2F0aW9uKHdzZGxMb2NhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgaW4gdGhlIHRNb2RlbC4KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nIGdldEJpbmRpbmcoU3RyaW5nIG92ZXJ2aWV3VVJMLCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICB7Ci0gICAgaW50IGluZGV4OwotICAgIGludCBuYW1lSW5kZXg7Ci0KLSAgICBCaW5kaW5nW10gYmluZGluZ3MgPSB3c2RsRG9jdW1lbnQuZ2V0QmluZGluZ3MoKTsKLSAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCB8fCBiaW5kaW5ncy5sZW5ndGggPT0gMCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgaWYgKG92ZXJ2aWV3VVJMICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQ2hlY2sgaWYgdGhlIG92ZXJ2aWV3VVJMIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllcgotICAgICAgaWYgKChpbmRleCA9IG92ZXJ2aWV3VVJMLmluZGV4T2YoIiMiKSkgPiAtMSkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogTmVlZCB0byB1c2UgYSByZWFsIFhQYXRoIGV2YWx1YXRvciBsaWtlIFhhbGFuCi0gICAgICAgIFN0cmluZyBuYW1lQXR0cmlidXRlID0gIkBuYW1lPSI7Ci0KLSAgICAgICAgLy8gTG9jYXRlIG5hbWUgcmVmZXJlbmNlCi0gICAgICAgIGlmICgobmFtZUluZGV4ID0KLSAgICAgICAgICBvdmVydmlld1VSTC5zdWJzdHJpbmcoaW5kZXggKyAxKS5pbmRleE9mKG5hbWVBdHRyaWJ1dGUpKQotICAgICAgICAgID4gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyIHdoaWNoIHNob3VsZCBiZSBhIHF1b3RlCi0gICAgICAgICAgaW50IGZpcnN0UXVvdGVJbmRleCA9IGluZGV4ICsgMSArIG5hbWVJbmRleCArIG5hbWVBdHRyaWJ1dGUubGVuZ3RoKCk7Ci0gICAgICAgICAgU3RyaW5nIHF1b3RlID0KLSAgICAgICAgICAgIG92ZXJ2aWV3VVJMLnN1YnN0cmluZyhmaXJzdFF1b3RlSW5kZXgsIGZpcnN0UXVvdGVJbmRleCArIDEpOwotCi0gICAgICAgICAgLy8gR2V0IHRoZSBwYXJ0IG9mIHRoZSBVUkwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIGJpbmRpbmcgbmFtZQotICAgICAgICAgIFN0cmluZyB1cmxQYXJ0ID0gb3ZlcnZpZXdVUkwuc3Vic3RyaW5nKGZpcnN0UXVvdGVJbmRleCArIDEpOwotCi0gICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCBxdW90ZQotICAgICAgICAgIGludCBuZXh0UXVvdGVJbmRleDsKLSAgICAgICAgICBpZiAoKG5leHRRdW90ZUluZGV4ID0gdXJsUGFydC5pbmRleE9mKHF1b3RlKSkgPiAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSB1cmxQYXJ0LnN1YnN0cmluZygwLCBuZXh0UXVvdGVJbmRleCk7Ci0gICAgICAgICAgICAvL2xvb2sgZm9yIGJpbmRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChiaW5kaW5nTmFtZS5lcXVhbHMoYmluZGluZ3NbaV0uZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJpbmRpbmdzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBiaW5kaW5nc1swXTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKiBAcGFyYW0gY2F0ZWdvcnlCYWcgYSBDYXRlZ29yeUJhZyBvYmplY3QuCi0gICAqIEByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjYXRlZ29yeUJhZ1RvU3RyaW5nKENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnKQotICB7Ci0gICAgU3RyaW5nIHRvU3RyaW5nID0gIiI7Ci0KLSAgICBpZiAoY2F0ZWdvcnlCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VMaXN0ID0gbnVsbDsKLSAgICAgIGlmICgoKGtleWVkUmVmZXJlbmNlTGlzdCA9IGNhdGVnb3J5QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChrZXllZFJlZmVyZW5jZUxpc3Quc2l6ZSgpID09IDApKQotICAgICAgewotICAgICAgICB0b1N0cmluZyArPSAiTm8gS2V5ZWRSZWZlcmVuY2VzIjsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZmVyZW5jZTsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBrZXllZFJlZmVyZW5jZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGtleWVkUmVmZXJlbmNlID0gKEtleWVkUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgdG9TdHJpbmcgKz0gIlxuICBbIgotICAgICAgICAgICAgKyBjb3VudCsrCi0gICAgICAgICAgICArICJdIHRNb2RlbEtleTogIgotICAgICAgICAgICAgKyBrZXllZFJlZmVyZW5jZS5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiLCBrZXlOYW1lOiAiCi0gICAgICAgICAgICArIGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKQotICAgICAgICAgICAgKyAiLCBrZXlWYWx1ZTogIgotICAgICAgICAgICAgKyBrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0b1N0cmluZyA9ICJudWxsIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9TdHJpbmc7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgdGFyZ2V0Q29udGV4dCkKLSAgewotICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSB0ZXN0IGFzc2VydGlvbiBlbnRyeSB0eXBlIG1hdGNoZXMgdGhlIHRhcmdldCBjb250ZXh0IGVudHJ5IHR5cGUsIHRoZW4gY29udGluZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uCi0gICAgICAuZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAgICAuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gQUREOgotCi0gICAgcmV0dXJuIG5vdEFwcGxpY2FibGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjg0YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLS8qKgotICogV1NJMzAwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMzAwMSBleHRlbmRzIEJQMzAwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDAxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDhkZDJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi0vKioKLSAqIFdTSTMwMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDIgZXh0ZW5kcyBCUDMwMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMzAwMihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViMDE3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotLyoqCi0gKiBXU0kzMDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kzMDAzIGV4dGVuZHMgQlAzMDAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDMoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMTczYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFdTSTMwMDQgLSBUaGUgY29uZm9ybWFuY2UgY2xhaW1zIGluIHRoZSB1ZGRpOnRNb2RlbCBhcmUgdGhlIHNhbWUKLSAqIGFzIHRob3NlIGluIHRoZSB3c2RsOmJpbmRpbmcgd2hpY2ggaXMgcmVmZXJlbmNlZCBieSB0aGUgdWRkaTp0TW9kZWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kzMDA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDQoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUU19QQVJBTSA9ICJwb3J0cyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX1BBUkFNID0gImJpbmRpbmciOwotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSBhIHRNb2RlbC4KLSAgICogQHBhcmFtIHRNb2RlbAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDb25mb3JtYW5jZUNsYWltc0Zyb21VRERJKFRNb2RlbCB0TW9kZWwpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGNvbmZvcm1hbmNlS2V5ID0gVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHZhbGlkYXRvci51ZGRpUHJveHkpOwotCi0gICAgSGFzaFNldCByZXN1bHQgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgQ2F0ZWdvcnlCYWcgYmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgaWYgKHJlZi5nZXRUTW9kZWxLZXkoKS5lcXVhbHNJZ25vcmVDYXNlKGNvbmZvcm1hbmNlS2V5KSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdC5hZGQocmVmLmdldEtleVZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSBXU0RMIGJpbmRpbmcKLSAgICogdGhhdCByZWZlcmVuY2VzIHNwZWNpZmllZCB0TW9kZWwuIEFkZGl0aW9uYWxseSwKLSAgICogV1NETCBwb3J0cywgd2hpY2ggdXNlcyB0aGUgYmluZGluZywgYXJlIHByb2Nlc3NlZC4KLSAgICoKLSAgICogQHBhcmFtIHRNb2RlbAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDb25mb3JtYW5jZUNsYWltc0Zyb21XU0RMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBIYXNoU2V0IHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBSZWFkIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBTdHJpbmcgb3ZlcnZpZXdVUkwgPSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwodE1vZGVsKTsKLSAgICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSB2YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KG92ZXJ2aWV3VVJMKTsKLQotICAgICAgLy8gR2V0IGJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IFVERElVdGlscy5nZXRCaW5kaW5nKG92ZXJ2aWV3VVJMLCB3c2RsRG9jdW1lbnQpOwotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0gICAgICAvLyBHZXQgY2xhaW1zCi0gICAgICByZXN1bHQgPQotICAgICAgICBnZXRDbGFpbXNGcm9tRWxlbWVudChiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHJlc3VsdCk7Ci0KLSAgICAgIC8vIEdldCBwb3J0cywgd2hpY2ggcmVmZXJlbmNlIHRoaXMgYmluZGluZywgYmVjYXVzZToKLSAgICAgIC8vICJBIGNsYWltIG9uIGEgd3NkbDpwb3J0IGlzIGluaGVyaXRlZCBieSB0aGUgcmVmZXJlbmNlZCB3c2RsOmJpbmRpbmdzLiIKLSAgICAgIFZlY3RvciBwb3J0cyA9IGdldFBvcnRzKHdzZGxEb2N1bWVudCwgYmluZGluZ05hbWUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRzLmdldChpKTsKLQotICAgICAgICByZXN1bHQgPSBnZXRDbGFpbXNGcm9tRWxlbWVudChwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHJlc3VsdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBBREQ6Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSB0aGUgJ2RvY3VtZW50YXRpb24nIFhNTCBlbGVtZW50Ci0gICAqIGFuZCBwdXRzIHRoZW0gaW50byB0aGUgSGFzaFNldC4KLSAgICogQHBhcmFtIGRvY0VsZW1lbnQKLSAgICogQHBhcmFtIHJlc3VsdAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDbGFpbXNGcm9tRWxlbWVudChFbGVtZW50IGRvY0VsZW1lbnQsIEhhc2hTZXQgcmVzdWx0KQotICB7Ci0gICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgfQotCi0gICAgaWYgKGRvY0VsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNsYWltRWxlbWVudCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZG9jRWxlbWVudCwgV1NJX0NMQUlNKTsKLSAgICAgIHdoaWxlIChjbGFpbUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgTm9kZSBhdHRyID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGNsYWltRWxlbWVudCwgQVRUUl9DTEFJTV9DT05GT1JNU1RPKTsKLSAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgCXJlc3VsdC5hZGQoYXR0ci5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgICovCi0gICAgICAgIFN0cmluZyB2YWx1ZSA9Ci0gICAgICAgICAgY2xhaW1FbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSX0NMQUlNX0NPTkZPUk1TVE8uZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQuYWRkKHZhbHVlKTsKLQotICAgICAgICBjbGFpbUVsZW1lbnQgPSBYTUxVdGlscy5maW5kRWxlbWVudChjbGFpbUVsZW1lbnQsIFdTSV9DTEFJTSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHdzZGw6cG9ydHMsIHdoaWNoIHVzZSBzcGVjaWZpZWQgYmluZGluZy4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudAotICAgKiBAcGFyYW0gYmluZGluZ05hbWUKLSAgICogQHJldHVybiBWZWN0b3IKLSAgICovCi0gIHByaXZhdGUgVmVjdG9yIGdldFBvcnRzKFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQsIFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotICAgIFZlY3RvciBwb3J0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoUE9SVFNfUEFSQU0sIHBvcnRzKTsKLSAgICBwYXJhbXMucHV0KEJJTkRJTkdfUEFSQU0sIGJpbmRpbmdOYW1lKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpLCBwYXJhbXMpOwotCi0gICAgcmV0dXJuIHBvcnRzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBwb3J0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocG9ydAotICAgICAgLmdldEJpbmRpbmcoKQotICAgICAgLmdldFFOYW1lKCkKLSAgICAgIC5nZXRMb2NhbFBhcnQoKQotICAgICAgLmVxdWFscyhjdHguZ2V0UGFyYW1ldGVyKEJJTkRJTkdfUEFSQU0pLnRvU3RyaW5nKCkpKQotICAgIHsKLSAgICAgICgoVmVjdG9yKSBjdHguZ2V0UGFyYW1ldGVyKFBPUlRTX1BBUkFNKSkuYWRkKHBvcnQpOwotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgdE1vZGVsCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBIYXNoU2V0IGNsYWltc0Zyb21VRERJID0gZ2V0Q29uZm9ybWFuY2VDbGFpbXNGcm9tVURESSh0TW9kZWwpOwotICAgICAgICBIYXNoU2V0IGNsYWltc0Zyb21XU0RMID0gZ2V0Q29uZm9ybWFuY2VDbGFpbXNGcm9tV1NETCh0TW9kZWwpOwotCi0gICAgICAgIGlmIChjbGFpbXNGcm9tVURESS5zaXplKCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNsYWltc0Zyb21VRERJLnNpemUoKSA9PSBjbGFpbXNGcm9tV1NETC5zaXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyID0gY2xhaW1zRnJvbVdTREwuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBjbGFpbSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIyID0gY2xhaW1zRnJvbVVEREkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgaXRlcjIuaGFzTmV4dCgpOwotICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyB1ZGRpQ2xhaW0gPSAoU3RyaW5nKSBpdGVyMi5uZXh0KCk7Ci0gICAgICAgICAgICAgIGlmIChjbGFpbS5lcXVhbHNJZ25vcmVDYXNlKHVkZGlDbGFpbSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoY291bnRlciAhPSBjbGFpbXNGcm9tV1NETC5zaXplKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZmFpbGVkCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIlRoZSB0TW9kZWwga2V5IGlzOiBbIiArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKSArICJdLiI7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIGZhaWxlZAotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIgKyB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkgKyAiXS4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgIlRoZSB0TW9kZWwga2V5IGlzOiBbIiArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKSArICJdLiI7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDVfT0JTT0xFVEUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA1X09CU09MRVRFLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNmY1YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDVfT0JTT0xFVEUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVURESVV0aWxzOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSAqIFdTSTMwMDVfT0JTT0xFVEUgLSBBIHVkZGk6dE1vZGVsIHdoaWNoIGNsYWltcyBjb25mb3JtYW5jZSB3aXRoIGEgV1MtSSBwcm9maWxlCi0gKiBtdXN0IGJlIGNhdGVnb3JpemVkIHVzaW5nIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvIHRheG9ub215LgotICovCi1wdWJsaWMgY2xhc3MgV1NJMzAwNV9PQlNPTEVURSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDVfT0JTT0xFVEUoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgdE1vZGVsCi0gICAgZWxzZQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYmFnKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZhaWxlZAotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIgKyB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkgKyAiXS4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgIlRoZSBVRERJIHJlZ2lzdHJ5IGRvZXMgbm90IGNvbnRhaW4gV1NJIGNvbmZvcm1hbmNlIHRheG9ub215IgotICAgICAgICAgICAgKyAiIHRNb2RlbCAoXCJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTJcIikuIjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBhIGNhdGVnb3J5IGJhZy4KLSAgICogQHBhcmFtIHByb3h5Ci0gICAqIEBwYXJhbSBiYWcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tDYXRlZ29yeUJhZyhVRERJUHJveHkgcHJveHksIENhdGVnb3J5QmFnIGJhZykKLSAgewotICAgIFN0cmluZyBjb25mb3JtYW5jZUtleSA9IFVERElVdGlscy5nZXRXU0lDb25mb3JtYW5jZVRNb2RlbEtleShwcm94eSk7Ci0KLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpICYmICFyZXN1bHQ7IGkrKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2UgcmVmID0gKEtleWVkUmVmZXJlbmNlKSByZWZlcmVuY2VzLmdldChpKTsKLQotICAgICAgICByZXN1bHQgPSByZWYuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShjb25mb3JtYW5jZUtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYThjMDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi0KLS8qKgotICogV1NJMzAwNiAtIFRoZSB1ZGRpOnRNb2RlbCB1c2VzIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIgY2F0ZWdvcml6YXRpb24KLSAqIHZhbHVlIG9mICJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzZS8xLjAiLiBUaGUgY2F0ZWdvcnlCYWcgaW4gdGhlIHRNb2RlbAotICogY29udGFpbnMgYSBrZXllZFJlZmVyZW5jZSB3aXRoIGEgdE1vZGVsS2V5IHRoYXQgY29udGFpbnMgdGhlIGtleSB2YWx1ZQotICogdXVpZDo2NTcxOTE2OC03MmM2LTNmMjktOGMyMC02MmRlZmIwOTYxYzAgZm9yIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIKLSAqIHRNb2RlbC4KLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMzAwNihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gbnVsbDsKLSAgICBLZXllZFJlZmVyZW5jZSBjbGFpbUtleWVkUmVmID0gbnVsbDsKLQotICAgIC8vIGNoZWNrIHdoZXRoZXIgYSBVRERJIGNvbmZvcm1hbmNlIGNsYWltIGlzIGJlaW5nIG1hZGUuLi4KLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmICgoY2xhaW1LZXllZFJlZiA9IGNvbmZvcm1hbmNlQ2xhaW1NYWRlKHRNb2RlbCkpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHdlIGhhdmUgYSBjb25mb3JtYW5jZSBjbGFpbSwgc28gY2hlY2sgdGhlIGtleWVkUmVmZXJlbmNlIGtleVZhbHVlCi0gICAgICBpZiAoIWNsYWltS2V5ZWRSZWYKLSAgICAgICAgLmdldEtleVZhbHVlKCkKLSAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbigKLSAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCwKLSAgICAgICAgICAiVGhlIHRNb2RlbCBrZXkgaXM6IFsiCi0gICAgICAgICAgICArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiXS5cblRoZSBjYXRlZ29yeUJhZyBpczogWyIKLSAgICAgICAgICAgICsgdE1vZGVsLmdldENhdGVnb3J5QmFnKCkKLSAgICAgICAgICAgICsgIl0uIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gZS5nZXREZXRhaWxNZXNzYWdlKCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgYSBjYXRlZ29yeSBiYWcgYW5kIGV4dHJhY3RzIEtleWVkUmVmZXJlbmNlIGNvbnRhaW5pbmcKLSAgICogdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBAcGFyYW0gcHJveHkKLSAgICogQHBhcmFtIGJhZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY2hlY2tDYXRlZ29yeUJhZyhVRERJUHJveHkgcHJveHksIENhdGVnb3J5QmFnIGJhZykKLSAgewotICAgIFN0cmluZyBjb25mb3JtYW5jZUtleSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZm9ybWFuY2VLZXkgPSBVRERJVXRpbHMuZ2V0V1NJQ29uZm9ybWFuY2VUTW9kZWxLZXkocHJveHkpOwotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBLZXllZFJlZmVyZW5jZSBjb25mb3JtYW5jZVJlZiA9IG51bGw7Ci0KLSAgICBpZiAoYmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHJlZmVyZW5jZXMgPSBiYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmZXJlbmNlcy5zaXplKCkgJiYgcmVzdWx0OyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgaWYgKHJlZgotICAgICAgICAgIC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKGNvbmZvcm1hbmNlS2V5KSAvLyYmIHJlZi5nZXRLZXlWYWx1ZSgpLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKQotICAgICAgICAvLyB3ZSBuZWVkIG9ubHkgdE1vZGVsIGtleQotICAgICAgICApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICAgIGNvbmZvcm1hbmNlUmVmID0gcmVmOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbmZvcm1hbmNlUmVmOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIEtleWVkUmVmZXJlbmNlIGNvbnRhaW5pbmcgdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBAcGFyYW0gdE1vZGVsCi0gICAqIEByZXR1cm4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY29uZm9ybWFuY2VDbGFpbU1hZGUoVE1vZGVsIHRNb2RlbCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIElmIHRoZSB0TW9kZWwgZG9lcyBub3QgZXhpc3QsIHRoZW4gZmFpbAotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ0TW9kZWwgY2Fubm90IGJlIG51bGwiKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRNb2RlbAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBiYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICAgIHJldHVybiBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYmFnKTsKLSAgICB9Ci0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjY3NGRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSAqIFdTSTMwMDcgLSBBIHVkZGk6YnVzaW5lc3NFbnRpdHkgb3IgdWRkaTpidXNpbmVzc1NlcnZpY2UgYXNzb2NpYXRlZAotICogd2l0aCB0aGlzIHVkZGk6YmluZGluZ1RlbXBsYXRlIGlzIG5vdCBjYXRlZ29yaXplZCB1c2luZwotICogdGhlIHdzLWktb3JnOmNvbmZvcm1zVG86MjAwMl8xMiB0YXhvbm9teS4KLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDA3KFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBiaW5kaW5nVGVtcGxhdGUgZnJvbSB0aGUgZW50cnlDb250ZXh0Ci0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9Ci0gICAgICAoQmluZGluZ1RlbXBsYXRlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgYm9vbGVhbiB2YWxpZFNlcnZpY2UgPSBmYWxzZTsKLSAgICBib29sZWFuIHZhbGlkQnVzaW5lc3MgPSBmYWxzZTsKLQotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHNlcnZpY2VLZXkgPSBiaW5kaW5nVGVtcGxhdGUuZ2V0U2VydmljZUtleSgpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIHNlcnZpY2UgPQotICAgICAgICBVRERJVXRpbHMuZ2V0QnVzaW5lc3NTZXJ2aWNlQnlLZXkodGhpcy52YWxpZGF0b3IudWRkaVByb3h5LCBzZXJ2aWNlS2V5KTsKLQotICAgICAgYnVzaW5lc3NLZXkgPSBzZXJ2aWNlLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBidXNpbmVzcyA9Ci0gICAgICAgIFVERElVdGlscy5nZXRCdXNpbmVzc0J5S2V5KHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYnVzaW5lc3NLZXkpOwotCi0gICAgICB2YWxpZFNlcnZpY2UgPSBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgc2VydmljZS5nZXRDYXRlZ29yeUJhZygpKTsKLSAgICAgIHZhbGlkQnVzaW5lc3MgPSBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYnVzaW5lc3MuZ2V0Q2F0ZWdvcnlCYWcoKSk7Ci0KLSAgICAgIGlmICghdmFsaWRCdXNpbmVzcyB8fCAhdmFsaWRTZXJ2aWNlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgICAgICBpZiAoIXZhbGlkQnVzaW5lc3MpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgICAiVGhlIGJ1c2luZXNzRW50aXR5IGtleSBpczogWyIgKyBidXNpbmVzc0tleSArICJdLiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkU2VydmljZSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghdmFsaWRCdXNpbmVzcykKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlICs9ICIgIjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9ICIiOwotCi0gICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgKz0gIlRoZSBidXNpbmVzc1NlcnZpY2Uga2V5IGlzOiBbIgotICAgICAgICAgICAgKyBzZXJ2aWNlS2V5Ci0gICAgICAgICAgICArICJdLiI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAiVGhlIFVEREkgcmVnaXN0cnkgZG9lcyBub3QgY29udGFpbiBXU0kgY29uZm9ybWFuY2UgdGF4b25vbXkiCi0gICAgICAgICAgKyAiIHRNb2RlbCAoXCJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTJcIikuIjsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZGlzY292ZXJ5IHRlc3QgYXNzZXJ0aW9ucy4iLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjYXRlZ29yeSBiYWcgY29udGFpbnMgdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBSZXR1cm5zIDxiPnRydWU8L2I+IGlmIHRoZSBiYWcgZG9lcyBub3QgY29udGFpbiB0aGUgY29uZm9ybWFuY2UgY2xhaW0uCi0gICAqIEBwYXJhbSBwcm94eQotICAgKiBAcGFyYW0gYmFnCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2F0ZWdvcnlCYWcoVURESVByb3h5IHByb3h5LCBDYXRlZ29yeUJhZyBiYWcpCi0gIHsKLSAgICBTdHJpbmcgY29uZm9ybWFuY2VLZXkgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZvcm1hbmNlS2V5ID0gVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHByb3h5KTsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpICYmIHJlc3VsdDsgaSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSByZWYgPSAoS2V5ZWRSZWZlcmVuY2UpIHJlZmVyZW5jZXMuZ2V0KGkpOwotCi0gICAgICAgIHJlc3VsdCA9ICFyZWYuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShjb25mb3JtYW5jZUtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODUzNTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSogV1NJMzAyMSAtIFRoZSB1ZGRpOnRNb2RlbCBoYXMgYSAibmFtZSIgZWxlbWVudCBvZiB2YWx1ZSAid3MtaS1vcmc6Y29uZm9ybXNUbzoyMDAyXzEyIiAsCi0qIGhhcyBhbiBvdmVydmlld1VSTCB2YWx1ZSBvZiAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iLCBhbmQgaGFzCi0qIGEga2V5ZWRSZWZlcmVuY2UgZWxlbWVudCB3aXRoIGtleU5hbWUgYXR0cmlidXRlIHZhbHVlIG9mICJ1ZGRpLW9yZzp0eXBlczpjYXRlZ29yaXphdGlvbiIuCi0qLwotcHVibGljIGNsYXNzIFdTSTMwMjEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDIxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgVE1vZGVsIHRNb2RlbCA9Ci0gICAgICBVRERJVXRpbHMuZ2V0VE1vZGVsQnlLZXkoCi0gICAgICAgIHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwKLSAgICAgICAgVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSkpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYm9vbGVhbiB2YWxpZFVSTCA9Ci0gICAgICAgIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICAgICAmJiAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iLmVxdWFscygKLSAgICAgICAgICAgIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMU3RyaW5nKCkpOwotICAgICAgYm9vbGVhbiB2YWxpZENhdGVnb3J5ID0gY2hlY2tDYXRlZ29yeUJhZyh0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKSk7Ci0KLSAgICAgIGlmICh2YWxpZFVSTCAmJiB2YWxpZENhdGVnb3J5KQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gdGhpcy52YWxpZGF0b3IudWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY2F0ZWdvcnkgYmFnIG1lZXRzIHRoZSBXU0kncyByZXF1aXJlbWVudHMuCi0gICAqIEBwYXJhbSBiYWcKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2F0ZWdvcnlCYWcoQ2F0ZWdvcnlCYWcgYmFnKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChiYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVmZXJlbmNlcyA9IGJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWZlcmVuY2VzLnNpemUoKSAmJiAhcmVzdWx0OyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgcmVzdWx0ID0KLSAgICAgICAgICAidWRkaS1vcmc6dHlwZXM6Y2F0ZWdvcml6YXRpb24iLmVxdWFscyhyZWYuZ2V0S2V5TmFtZSgpKQotICAgICAgICAgICAgJiYgImNhdGVnb3JpemF0aW9uIi5lcXVhbHMocmVmLmdldEtleVZhbHVlKCkpCi0gICAgICAgICAgICAmJiAidXVpZDpDMUFDRjI2RC05NjcyLTQ0MDQtOUQ3MC0zOUI3NTZFNjJBQjQiLmVxdWFscygKLSAgICAgICAgICAgICAgcmVmLmdldFRNb2RlbEtleSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmU1NjFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDI5MDEKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBkZXNjcmlwdGlvbiB1c2VzIGVpdGhlciB0aGUgV1NETCBNSU1FIEJpbmRpbmcgYXMgZGVzY3JpYmVkIGluIFdTREwgMS4xIFNlY3Rpb24gNQotICogb3IgV1NETCBTT0FQIGJpbmRpbmcgYXMgZGVzY3JpYmVkIGluIFdTREwgMS4xIFNlY3Rpb24gMwotICogb24gZWFjaCBvZiB0aGUgd3NkbDppbnB1dCBvciB3c2RsOm91dHB1dCBlbGVtZW50cyBvZiBhIHdzZGw6YmluZGluZy4gPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgLyoqCi0gICAqIFdTRExWYWxpZGF0b3IKLSAgICovCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIHByaXZhdGUgQ29sbGVjdGlvbiBtaW1lRWxlbWVudHM7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotCi0gICAgbWltZUVsZW1lbnRzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBtaW1lRWxlbWVudHMuYWRkKFdTRExfTUlNRV9DT05URU5UKTsKLSAgICBtaW1lRWxlbWVudHMuYWRkKFdTRExfTUlNRV9YTUwpOwotICAgIG1pbWVFbGVtZW50cy5hZGQoV1NETF9NSU1FX01VTFRJUEFSVCk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICBRTmFtZSBpbmFwcGxpY2FibGVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6aW5wdXQKLSAgICAgICAgLy8gSWYgc3VjaCBlbGVtZW50IGV4aXN0cywgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgaWYgKGJpbmRpbmdJbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6aW5wdXQKLSAgICAgICAgICAvLyBJZiBzdWNoIGVsZW1lbnQgZXhpc3RzLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGluYXBwbGljYWJsZUVsZW1lbnQgPSBnZXRJbmFwcGxpY2FibGVFbGVtZW50KGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgICBpZiAoaW5hcHBsaWNhYmxlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaW5hcHBsaWNhYmxlRWxlbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6b3V0cHV0Ci0gICAgICAgIC8vIElmIHN1Y2ggZWxlbWVudCBleGlzdHMsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChiaW5kaW5nT3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbmFwcGxpY2FibGVFbGVtZW50ID0KLSAgICAgICAgICAgIGdldEluYXBwbGljYWJsZUVsZW1lbnQoYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgaWYgKGluYXBwbGljYWJsZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKGluYXBwbGljYWJsZUVsZW1lbnQudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW55IGV4dGVuc2liaWxpdHkgZWxlbWVudCBvZiB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0Ci0gICAqIHRoYXQgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgU09BUCBiaW5kaW5nIG9yIHRoZSBNSU1FIGJpbmRpbmcuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRoZSBRTmFtZSBvZiBhbiBpbmFwcGxpY2FibGUgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBRTmFtZSBnZXRJbmFwcGxpY2FibGVFbGVtZW50KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFFOYW1lIGVsZW1lbnROYW1lID0KLSAgICAgICAgKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpKS5nZXRFbGVtZW50VHlwZSgpOwotCi0gICAgICBpZiAoIW1pbWVFbGVtZW50cy5jb250YWlucyhlbGVtZW50TmFtZSkgJiYKLSAgICAgICAgICAhZWxlbWVudE5hbWUuZXF1YWxzKFdTRExfU09BUF9CT0RZKSAmJgotICAgICAgICAgICFlbGVtZW50TmFtZS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBlbGVtZW50TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiYzMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTAzCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyB3aXRoIGF0IGxlYXN0IG9uZSBtaW1lOmNvbnRlbnQgZWxlbWVudDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgcGFydCBhdHRyaWJ1dGUgb2YgZWFjaCBtaW1lOmNvbnRlbnQgZWxlbWVudCBpbiBhIHdzZGw6YmluZGluZyByZWZlcmVuY2VzCi0gKiBhIHdzZGw6cGFydCBlbGVtZW50IG9mIGEgd3NkbDptZXNzYWdlIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgcmVzcGVjdGl2ZSB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0IG9mIHRoZQotICogY29ycmVzcG9uZGluZyB3c2RsOm9wZXJhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZUNvbnRlbnRzID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIElucHV0IHBvcnRUeXBlSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCk7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBpbiB3c2RsOnBvcnRUeXBlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiVGhlcmUgaXMgbm8gdGhlIGNvcnJlc3Bvbmdpbmcgd3NkbDppbnB1dCBpbiB0aGUgd3NkbDpwb3J0VHlwZSIKLSAgICAgICAgICAgICAgKyAiIG9wZXJhdGlvbiBmb3IgdGhlIHdzZGw6aW5wdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGw6cG9ydFR5cGUgaW5wdXQgZG9lcyBub3QgcmVmZXJlbmNlIGFueSB3c2RsOm1lc3NhZ2UsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiXCIgd3NkbDpwb3J0VHlwZSAiCi0gICAgICAgICAgICAgICsgIm9wZXJhdGlvbiBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHdzZGw6bWVzc2FnZS4iKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHdzZGw6bWVzc2FnZQotICAgICAgICAgIC8vIHRoZSBpbnB1dCBvZiB3c2RsOnBvcnRUeXBlIHJlZmVycyB0bwotICAgICAgICAgIFN0cmluZyBwYXJ0ID0gZ2V0SW52YWxpZE1pbWVDb250ZW50UGFydCgKLSAgICAgICAgICAgIGlucHV0TWltZUNvbnRlbnRzLCBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgICAvLyBJZiBzdWNoIHBhcnQgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwYXJ0PVwiIiArIHBhcnQgKwotICAgICAgICAgICAgICAiXCIsIHRoZSBpbnB1dCBvZiB0aGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIE91dHB1dCBwb3J0VHlwZU91dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBpbiB3c2RsOnBvcnRUeXBlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIlRoZXJlIGlzIG5vIHRoZSBjb3JyZXNwb25naW5nIHdzZGw6b3V0cHV0IGluIHRoZSB3c2RsOnBvcnRUeXBlIgotICAgICAgICAgICAgICArICIgb3BlcmF0aW9uIGZvciB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGw6cG9ydFR5cGUgb3V0cHV0IGRvZXMgbm90IHJlZmVyZW5jZSBhbnkgd3NkbDptZXNzYWdlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSB3c2RsOm91dHB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiXCIgd3NkbDpwb3J0VHlwZSAiCi0gICAgICAgICAgICAgICsgIm9wZXJhdGlvbiBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHdzZGw6bWVzc2FnZS4iKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHdzZGw6bWVzc2FnZQotICAgICAgICAgIC8vIHRoZSBvdXRwdXQgb2Ygd3NkbDpwb3J0VHlwZSByZWZlcnMgdG8KLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICAgIG91dHB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAgIC8vIElmIHN1Y2ggcGFydCBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInBhcnQ9XCIiICsgcGFydCArCi0gICAgICAgICAgICAgICAgIlwiLCB0aGUgb3V0cHV0IG9mIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgY29udGFpbnMgbm8gbWltZTpjb250ZW50IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtaW1lQ29udGVudHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgYWxsIG1pbWU6Y29udGVudCBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dEVsZW1zIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoYXQgY2FuIGNvbnRhaW4gbWltZTpjb250ZW50Uy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZUNvbnRlbnRFbGVtZW50cyhMaXN0IGV4dEVsZW1zKQotICB7Ci0gICAgTGlzdCBtaW1lQ29udGVudEVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgaWYgKGV4dEVsZW1zICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1zLmdldChpKTsKLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1pbWVQYXJ0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIG9mIHRoaXMgbWltZTpwYXJ0Ci0gICAgICAgICAgICBMaXN0IGVsZW1zID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGRBbGwoZWxlbXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBFbHNlIGlmIHRoZSBlbGVtZW50IGlzIG1pbWU6Y29udGVudAotICAgICAgICBlbHNlIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgZWxlbWVudCB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIG1pbWVDb250ZW50RWxlbWVudHMuYWRkKGV4dEVsZW0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVDb250ZW50RWxlbWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBwYXJ0IG5hbWUgc3BlY2lmaWVkIGluIG1pbWU6Y29udGVudCBlbGVtZW50IHRoYXQgaXMgbm90IHByZXNlbnRlZCBpbiB3c2RsOm1lc3NhZ2UKLSAgICogQHBhcmFtIG1pbWVDb250ZW50cyBhIGxpc3Qgb2YgbWltZTpjb250ZW50IGVsZW1lbnRzIHdoaWNoIHBhcnQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgd3NkbDptZXNzYWdlCi0gICAqIEByZXR1cm4gYSBwYXJ0IG5hbWUKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoTGlzdCBtaW1lQ29udGVudHMsIE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIC8vIEdvaW5nIHRocm91ZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZUNvbnRlbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSBvZiBhIG1pbWU6ZWxlbWVudAotICAgICAgU3RyaW5nIHBhcnQgPSAoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCk7Ci0gICAgICAvLyBJZiB0aGUgd3NkbDptZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gc3VjaCBwYXJ0LCByZXR1cm4gdGhlIHBhcnQKLSAgICAgIGlmICghbWVzc2FnZS5nZXRQYXJ0cygpLmtleVNldCgpLmNvbnRhaW5zKHBhcnQpKQotICAgICAgICByZXR1cm4gcGFydDsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgbm8gb25lIHBhcnQgaXMgZm91bmQKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhOTcxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTA0Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIHdpdGggYXQgbGVhc3Qgb25lIG1pbWU6Y29udGVudCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBwYXJ0IGF0dHJpYnV0ZSBvZiBlYWNoIG1pbWU6Y29udGVudCBlbGVtZW50IGluIGEgd3NkbDpiaW5kaW5nCi0gKiBkb2VzIG5vdCByZWZlcmVuY2UgYSBzdWItY29tcG9uZW50IG9mIGEgd3NkbDpwYXJ0IG9mIHRoZSB3c2RsOm1lc3NhZ2UgdGhhdCBpcyBwcmVzZW50IGluIHRoZQotICogcmVzcGVjdGl2ZSB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3BlcmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCi0gKiB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDQgZXh0ZW5kcyBBUDI5MDMKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkwNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWM3Y2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkwNgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgY29udGFpbmluZyBhIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgbm9uLXJvb3QgTUlNRSBwYXJ0IGluIGEgd3NkbDpiaW5kaW5nIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwYmluZDpoZWFkZXIgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTA2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEEgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgYSBiaW5kaW5nIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQotICAgICAgLy8gbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQKLSAgICAgIGJvb2xlYW4gbXVsdGlwYXJ0c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE11bHRpcGFydHMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE11bHRpcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbXVsdGlwYXJ0c0ZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc29hcDpoZWFkZXIgaW4gdGhlIG5vbi1yb290IG1pbWU6cGFydCwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmIChjb250YWluc0ludmFsaWRNaW1lUGFydChpbnB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICAgICsgImlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDpvdXRwdXQgY29udGFpbnMgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgICAgIGlmICghb3V0cHV0TXVsdGlwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aXBhcnRzRm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzb2FwOmhlYWRlciBpbiB0aGUgbm9uLXJvb3QgbWltZTpwYXJ0LAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KG91dHB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICAgICAgKyAiaXMgaW4gdGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgY29udGFpbnMgbm8gb25lIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtdWx0aXBhcnRzRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBzdWNoIG5vbi1yb290IG1pbWU6cGFydCBlbGVtZW50IGZyb20gYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgKiB0aGF0IGNvbnRhaW5zIGEgc29hcDpoZWFkZXIgZWxlbWVudC4KLSAgICogQHBhcmFtIG11bHRpcGFydHMgYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRydWUsIGlmIHN1Y2ggZWxlbWVudCBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNJbnZhbGlkTWltZVBhcnQoTGlzdCBtdWx0aXBhcnRzKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aXBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgTGlzdCBtaW1lUGFydHMgPQotICAgICAgICAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBtdWx0aXBhcnRzLmdldChpKSkuZ2V0TUlNRVBhcnRzKCk7Ci0KLSAgICAgIC8vIExvb2tpbmcgZm9yIG5vbi1yb290IG1pbWU6cGFydFMKLSAgICAgIGlmIChtaW1lUGFydHMuc2l6ZSgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIGEgbWltZTpwYXJ0Ci0gICAgICAgICAgTGlzdCBleHRFbGVtcyA9Ci0gICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBleHRFbGVtcy5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYSBzb2FwOmhlYWRlciwKLSAgICAgICAgICAgIC8vIHJldHVybiB0cnVlCi0gICAgICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaykpCi0gICAgICAgICAgICAgIC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIHJldHVybiBmYWxzZSwgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIGFsbCBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbiBjb250YWluIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVNdWx0aXBhcnRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgZWxlbWVudCB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIG1pbWVNdWx0aXBhcnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1pbWVQYXJ0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIG9mIHRoaXMgbWltZTpwYXJ0Ci0gICAgICAgICAgICBMaXN0IGVsZW1zID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkQWxsKGVsZW1zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZU11bHRpcGFydEVsZW1lbnRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQ0NDVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkwNwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBNSU1FIHBhcnQgaW4gYSBkZXNjcmlwdGlvbiBpcyBkZWZpbmVkIHVzaW5nCi0gKiBhbiBlbGVtZW50IHdpdGggYSBsb2NhbCBuYW1lIG9mIHBhcnQgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGUKLSAqIFdTREwgTUlNRSBCaW5kaW5nIGV4dGVuc2lvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODlmNGJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEFQMjkwOAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIG1pbWU6cGFydCBlbGVtZW50IGluIGEgREVTQ1JJUFRJT04gZG9lcyBub3QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5MDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZyB3c2RsQmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBTaW5jZSBXU0RMNEogMS40IGlnbm9yZXMgYW55IGF0dHJpYnV0ZXMgb2YgbWltZTpwYXJ0LCB1c2UgWGVyY2VzIDIuNi4yIGluc3RlYWQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICBkb2MgPSB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTCh2YWxpZGF0b3Iud3NkbERvY3VtZW50LmdldExvY2F0aW9uKCksIG51bGwpOwotICAgICAgfQotCi0gICAgICAvLyBGaW5kaW5nIHRoZSB3c2RsOmJpbmRpbmcgZWxlbWVudCBiZWluZyBwcm9jZXNzZWQKLSAgICAgIEVsZW1lbnQgYmluZGluZyA9IGdldEJpbmRpbmdFbGVtZW50KAotICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksIHdzZGxCaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICBMaXN0IG9wcyA9IGdldENoaWxkRWxlbWVudHMoYmluZGluZywgV1NETF9PUEVSQVRJT04pOwotCi0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICBib29sZWFuIG11bHRpcGFydHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFbGVtZW50IGJpbmRpbmdPcGVyYXRpb24gPSAoRWxlbWVudCkgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBFbGVtZW50IGJpbmRpbmdJbnB1dCA9IGdldENoaWxkRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uLCBXU0RMX0lOUFVUKTsKLSAgICAgICAgRWxlbWVudCBiaW5kaW5nT3V0cHV0ID0gZ2V0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb24sIFdTRExfT1VUUFVUKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE11bHRpcGFydHMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoYmluZGluZ0lucHV0KTsKLSAgICAgICAgTGlzdCBvdXRwdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKGJpbmRpbmdPdXRwdXQpOwotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOmlucHV0IGNvbnRhaW5zIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgICAgICBpZiAoIWlucHV0TXVsdGlwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aXBhcnRzRm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBtaW1lOnBhcnQgZWxlbWVudCBjb250YWluaW5nIGEgbmFtZSBhdHRyaWJ1dGUsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQoaW5wdXRNdWx0aXBhcnRzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgIgotICAgICAgICAgICAgICAgICsgIm1pbWU6cGFydCBlbGVtZW50IGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpCi0gICAgICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE11bHRpcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbXVsdGlwYXJ0c0ZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZyBhIG5hbWUgYXR0cmlidXRlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KG91dHB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCAiCi0gICAgICAgICAgICAgICAgKyAibWltZTpwYXJ0IGVsZW1lbnQgaXMgaW4gdGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpCi0gICAgICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiB0aGUgYmluZGluZyBjb250YWlucyBubyBvbmUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIW11bHRpcGFydHNGb3VuZCkKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgbWltZTpwYXJ0IGVsZW1lbnRzIGZvciBlYWNoIG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LgotICAgKiBAcGFyYW0gbXVsdGlwYXJ0cyBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUsIGlmIGFueSBtaW1lOnBhcnQgY29udGFpbnMgYSBuYW1lIGF0dHJpYnV0ZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KExpc3QgbXVsdGlwYXJ0cykgewotICAgIC8vIEdvaW5nIHRocm91Z2ggYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXVsdGlwYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIExpc3QgbWltZVBhcnRzID0KLSAgICAgICAgZ2V0Q2hpbGRFbGVtZW50cygoRWxlbWVudCkgbXVsdGlwYXJ0cy5nZXQoaSksIFdTRExfTUlNRV9QQVJUKTsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBFbGVtZW50IG1pbWVQYXJ0ID0gKEVsZW1lbnQpIG1pbWVQYXJ0cy5nZXQoaik7Ci0gICAgICAgIC8vIElmIHRoZSBtaW1lOnBhcnQgZWxlbWVudCBjb250YWlucyBhIG5hbWUgYXR0cmlidXRlLAotICAgICAgICAvLyByZXR1cm4gdHJ1ZQotICAgICAgICBpZiAobWltZVBhcnQuZ2V0QXR0cmlidXRlTm9kZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gTm8gb25lIGludmFsaWQgbWltZTpwYXJ0IGVsZW1lbnQgaXMgZm91bmQsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gcGFyZW50IGFuIGVsZW1lbnQgd2hpY2ggdGhlIGNoaWxkIGVsZW1lbnRzIGFyZSBnYXRoZXJlZCBmcm9tLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoRWxlbWVudCBwYXJlbnQpCi0gIHsKLSAgICBMaXN0IG1pbWVNdWx0aXBhcnRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBudWxsCi0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICAgIGlmIChjaGlsZC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVC5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAmJiBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVC5nZXRMb2NhbFBhcnQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QgYmVpbmcgcmV0dXJuZWQKLSAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkKGNoaWxkKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgbWltZTpwYXJ0UyBmcm9tIHRoZSBlbGVtZW50Ci0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSBnZXRDaGlsZEVsZW1lbnRzKGNoaWxkLCBXU0RMX01JTUVfUEFSVCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZVBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoKEVsZW1lbnQpIG1pbWVQYXJ0cy5nZXQoaSkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZU11bHRpcGFydEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgY2hpbGQKLSAgICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW4gZWxlbWVudCdzIGNoaWxkIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBwYXJlbnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGNoaWxkTmFtZSBhIHF1YWxpZmllZCBlbGVtZW50IG5hbWUgYmVpbmcgZm91bmQuCi0gICAqIEByZXR1cm4gYW4gZWxlbWVudCBvciBudWxsIGlmIGl0IGlzIG5vdCBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgRWxlbWVudCBnZXRDaGlsZEVsZW1lbnQoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGNoaWxkTmFtZSkKLSAgewotICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgRWxlbWVudCBjaGlsZCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQocGFyZW50KTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSByZXF1aXJlZCBxdWFsaWZpZWQgbmFtZQotICAgICAgaWYgKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICYmIGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgewotICAgICAgICAvLyByZXR1cm4gdGhlIGNoaWxkCi0gICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgIH0KLSAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBlbGVtZW50J3MgY2hpbGQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBwYXJlbnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGNoaWxkTmFtZSBhIHF1YWxpZmllZCBlbGVtZW50IG5hbWUgYmVpbmcgZm91bmQuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGNoaWxkTmFtZSkKLSAgewotICAgIExpc3QgY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgdGhlIHJlcXVpcmVkIHF1YWxpZmllZCBuYW1lCi0gICAgICAgIGlmIChjaGlsZC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoY2hpbGROYW1lLmdldE5hbWVzcGFjZVVSSSgpKQotICAgICAgICAgICYmIGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBjaGlsZCB0byB0aGUgbGlzdAotICAgICAgICAgIGNoaWxkcmVuLmFkZChjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBiaW5kaW5nJ3MgY2hpbGQKLSAgICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjaGlsZHJlbjsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3Igd3NkbDpiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyBhIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGJpbmRpbmdOYW1lIGEgbmFtZSBvZiB3c2RsOmJpbmRpbmcgZWxlbWVudC4KLSAgICogQHJldHVybiBhIHdzZGw6YmluZGluZyBlbGVtZW50IG9yIG51bGwgaWYgaXQgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldEJpbmRpbmdFbGVtZW50KEVsZW1lbnQgZGVmaW5pdGlvbnMsIFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGRlZmluaXRpb25zJyBjaGlsZAotICAgIEVsZW1lbnQgY2hpbGQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGRlZmluaXRpb25zKTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiBkZWZpbml0aW9ucycgY2hpbGQgaXMgd3NkbDpiaW5kaW5nIGVsZW1lbnQKLSAgICAgIC8vIGFuZCBpcyB0aGUgc2FtZSB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZCBieSBXU0RMVmFsaWRhdG9yCi0gICAgICBpZiAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExfQklORElORy5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgJiYgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTRExfQklORElORy5nZXRMb2NhbFBhcnQoKSkKLSAgICAgICAgJiYgY2hpbGQuZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpLmVxdWFscyhiaW5kaW5nTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIC8vIHJldHVybiB0aGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQKLSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgfQotICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBkZWZpbml0aW9ucycgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICAvLyByZXR1cm4gbnVsbCwgaXMgdGhlcmUgaXMgbm8gc3VjaCB3c2RsOmJpbmRpbmcKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2ODFiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5NdWx0aXBsZSBtaW1lOmNvbnRlbnQgY2hpbGQgZWxlbWVudHMgb2YgYSBtaW1lOnBhcnQgZWxlbWVudAotICogaW4gYSBkZXNjaXB0aW9uIHJlZmVyZW5jZSB0aGUgc2FtZSB3c2RsOnBhcnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkwOSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMKLSAgLy8gbXVsdGlwbGUgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gIHByaXZhdGUgYm9vbGVhbiBtdWx0aXBsZUNvbnRlbnRGb3VuZDsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJlc2V0dGluZyB0aGUgdmFyaWFibGUKLSAgICBtdWx0aXBsZUNvbnRlbnRGb3VuZCA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgaXRzIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnRzCi0gICAgICBMaXN0IG9wcyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQotICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgb3BlcmF0aW9uIGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9wcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIG9wcy5nZXQoaSk7Ci0KLSAgICAgICAgLy8gR2V0dGluZyB3c2RsOmlucHV0IGFuZCB3c2RsOm91dHB1dCBlbGVtZW50cyBvZiBhbiBvcGVyYXRpb24KLSAgICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpOwotCi0gICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgZnJvbSB3c2RsOmlucHV0IGFuZCB3c2RsOm91dHB1dAotICAgICAgICBMaXN0IGlucHV0TWltZVBhcnRzID0gZ2V0TWltZVBhcnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZVBhcnRzID0gZ2V0TWltZVBhcnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbWU6cGFydCBjb250YWluaW5nIG11bHRpcGxlIG1pbWU6Y29udGVudFMKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQoaW5wdXRNaW1lUGFydHMpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBpbnZhbGlkIG1pbWU6cGFydCBlbGVtZW50ICIKLSAgICAgICAgICAgICsgImlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbWU6cGFydCBjb250YWluaW5nIG11bHRpcGxlIG1pbWU6Y29udGVudFMKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQob3V0cHV0TWltZVBhcnRzKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICArICJpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgICAvLyBJZiB0aGUgYmluZGluZyBkb2VzIG5vdCBjb250YWluIGEgbWltZTpwYXJ0IHdpdGggbXVsdGlwbGUKLSAgICAgIC8vIG1pbWU6Y29udGVudCBlbGVtZW50cywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtdWx0aXBsZUNvbnRlbnRGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBtaW1lOnBhcnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBtaW1lUGFydHMgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0cnVlIGlmIG11bHRpcGxlIG1pbWU6Y29udGVudFMgb2YgYSBtaW1lOnBhcnQKLSAgICogcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNJbnZhbGlkTWltZVBhcnQoTGlzdCBtaW1lUGFydHMpCi0gIHsKLSAgICAvLyBHb2luZyB0aHJvdWdoIGEgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVQYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBtaW1lOnBhcnQgY29udGFpbnMKLSAgICAgIC8vIGF0IGxlYXN0IG9uZSBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudEZvdW5kID0gZmFsc2U7Ci0gICAgICBTdHJpbmcgbWltZUNvbnRlbnRQYXJ0ID0gbnVsbDsKLQotICAgICAgLy8gR29pbmcgdGhyb3VnaCBtaW1lOnBhcnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgTGlzdCBleHRFbGVtcyA9ICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoaSkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBleHRFbGVtcy5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgYW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG1pbWU6Y29udGVudAotICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaikpCi0gICAgICAgICAgLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKSkKLSAgICAgICAgewotICAgICAgICAgIE1JTUVDb250ZW50IG1pbWVDb250ZW50ICA9IChNSU1FQ29udGVudCkgZXh0RWxlbXMuZ2V0KGopOwotICAgICAgICAgIC8vIElmIGEgbWltZTpjb250ZW50IGVsZW1lbnQgd2FzIGFscmVhZHkgZm91bmQgaW4gdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICBpZiAobWltZUNvbnRlbnRGb3VuZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtdWx0aXBsZUNvbnRlbnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAvLyBJZiBhIG1pbWU6Y29udGVudCByZWZlcmVuY2VzIG90aGVyIHdzZGw6cGFydCB0aGFuIHRoZQotICAgICAgICAgICAgLy8gcHJldmlvdXMgbWltZTpjb250ZW50IGRvLCByZXR1cm4gdHJ1ZQotICAgICAgICAgICAgaWYgKG1pbWVDb250ZW50LmdldFBhcnQoKSA9PSBudWxsCi0gICAgICAgICAgICAgIHx8ICFtaW1lQ29udGVudC5nZXRQYXJ0KCkuZXF1YWxzKG1pbWVDb250ZW50UGFydCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBtaW1lOmNvbnRlbnQgZWxlbWVudCBvZiBtaW1lOnBhcnQKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgbWltZUNvbnRlbnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBtaW1lQ29udGVudFBhcnQgPSBtaW1lQ29udGVudC5nZXRQYXJ0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRoZXJlIGFyZSBubyBpbnZhbGlkIG1pbWU6cGFydCBlbGVtZW50cywgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIGFsbCBtaW1lOnBhcnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbiBjb250YWluIG1pbWU6cGFydCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZVBhcnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICBtaW1lUGFydHMuYWRkQWxsKG1QYXJ0cyk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lUGFydHMoCi0gICAgICAgICAgICAgICAgKChNSU1FUGFydCkgbVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICAgIG1pbWVQYXJ0cy5hZGRBbGwoZWxlbXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWltZVBhcnRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkxMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDJkMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTEwCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIG1pbWU6Y29udGVudCBpbiBhIERFU0NSSVBUSU9OIHJlZmVyZW5jZXMKLSAqIGEgd3NkbDpwYXJ0IHRoYXQgaXMgZGVmaW5lZCB1c2luZyBlaXRoZXIgdGhlIHR5cGUgYXR0cmlidXRlCi0gKiBvciB0aGUgZWxlbWVudCBhdHRyaWJ1dGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6Y29udGVudCBlbGVtZW50Ci0gICAgICBib29sZWFuIG1pbWVDb250ZW50c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE1pbWVDb250ZW50cyA9IGdldE1pbWVDb250ZW50RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaW1lQ29udGVudHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgSW5wdXQgcG9ydFR5cGVJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0IGluIHdzZGw6cG9ydFR5cGUKLSAgICAgICAgICAvLyBvciB0aGUgd3NkbDppbnB1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgbWVzc2FnZSBhdHRyaWJ1dGUsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocG9ydFR5cGVJbnB1dCA9PSBudWxsIHx8IHBvcnRUeXBlSW5wdXQuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIlRoZSBjb3JyZXNwb25naW5nIG9wZXJhdGlvbiBpbiB0aGUgd3NkbDpwb3J0VHlwZSBmb3IgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIG1pbWU6Y29udGVudCByZWZlcmVuY2luZyBhbiBpbnZhbGlkIHdzZGw6cGFydCAKLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICBpbnB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIC8vIElmIHN1Y2ggcGFydCBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInBhcnQ9XCIiICsgcGFydCArCi0gICAgICAgICAgICAgICJcIiwgdGhlIGlucHV0IG9mIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaW1lQ29udGVudHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgT3V0cHV0IHBvcnRUeXBlT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOm91dHB1dCBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgICAgLy8gb3IgdGhlIHdzZGw6b3V0cHV0IGRvZXMgbm90IHNwZWNpZnkgYSBtZXNzYWdlIGF0dHJpYnV0ZSwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmIChwb3J0VHlwZU91dHB1dCA9PSBudWxsIHx8IHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgY29ycmVzcG9uZ2luZyBvcGVyYXRpb24gaW4gdGhlIHdzZGw6cG9ydFR5cGUgZm9yIHRoZSBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiBiaW5kaW5nIG9wZXJhdGlvbiBpcyBpbnZhbGlkLiIpOwotICAgICAgICAgIC8vIEdldHRpbmcgYSBtaW1lOmNvbnRlbnQgcmVmZXJlbmNpbmcgYW4gaW52YWxpZCB3c2RsOnBhcnQKLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICAgIG91dHB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAvLyBJZiBzdWNoIHBhcnQgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwYXJ0PVwiIiArIHBhcnQgKwotICAgICAgICAgICAgICAgICJcIiwgdGhlIG91dHB1dCBvZiB0aGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGRvZXMgbm90IGNvbnRhaW4gbWltZTpjb250ZW50IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtaW1lQ29udGVudHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBldmVyeSBtaW1lOmNvbnRlbnQgZWxlbWVudC4gSWYgaXQgcmVmZXJlbmNlcyBhIHdzZGw6cGFydCB0aGF0Ci0gICAqIGlzIGRlZmluZWQgdXNpbmcgbmVpdGhlciB0aGUgdHlwZSBhdHRyaWJ1dGUgbm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZQotICAgKiBvciB1c2luZyB0aGVtIHRvZ2V0aGVyLCBpdCBpcyBpbnZhbGlkLgotICAgKiBAcGFyYW0gbWltZUNvbnRlbnRzIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6bWVzc2FnZSBlbGVtZW50IGZvciBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIGEgdmFsdWUgb2YgdGhlIHBhcnQgYXR0cmlidXRlIG9mIGFuIGludmFsaWQgbWltZTpjb250ZW50Ci0gICAqIG9yIG51bGwgaWYgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgYXJlIHZhbGlkLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SW52YWxpZE1pbWVDb250ZW50UGFydChMaXN0IG1pbWVDb250ZW50cywgTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgLy8gR29pbmcgdGhyb3VnIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lQ29udGVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHZhbHVlIG9mIHRoZSBwYXJ0IGF0dHJpYnV0ZSBmcm9tIGEgbWltZTplbGVtZW50Ci0gICAgICBTdHJpbmcgcGFydE5hbWUgPSAoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCk7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25naW5nIHdzZGw6cGFydAotICAgICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KHBhcnROYW1lKTsKLSAgICAgIC8vIGlmIGl0IGlzIGRlZmluZWQgYW5kIHVzZSBuZWl0aGVyIHRoZSB0eXBlIGF0dHJpYnV0ZQotICAgICAgLy8gbm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBvciB1c2UgdGhlbSB0b2dldGhlciwgcmV0dXJuIHBhcnQgdmFsdWUKLSAgICAgIGlmIChwYXJ0ICE9IG51bGwKLSAgICAgICAgJiYgKChwYXJ0LmdldFR5cGVOYW1lKCkgPT0gbnVsbCAmJiBwYXJ0LmdldEVsZW1lbnROYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBhcnQuZ2V0VHlwZU5hbWUoKSAhPSBudWxsICYmIHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBwYXJ0TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgbm8gb25lIHBhcnQgaXMgZm91bmQKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzMzgzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTExCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGluIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3VwdXQgZWxlbWVudHMKLSAqIG9mIG9wZXJhdGlvbnMgaW4gYSB3c2RsOmJpbmRpbmcsIGNvbnRhaW4gZXhhY3RseSBvbmUgbWltZTpwYXJ0IGNoaWxkIGVsZW1lbnQgdGhhdCBjb250YWlucwotICogYSBzb2FwYmluZDpib2R5IGNoaWxkIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkxMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICBib29sZWFuIG11bHRpcGFydHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TXVsdGlwYXJ0cyA9IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNdWx0aXBhcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIG11bHRpcGFydHNGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZwotICAgICAgICAgIC8vIGEgc29hcGJpbmQ6Ym9keSBjaGlsZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWNvbnRhaW5zT25lU29hcEJvZHkoaW5wdXRNdWx0aXBhcnRzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgIgotICAgICAgICAgICAgICAgICsgIm1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50IGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNdWx0aXBhcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIG11bHRpcGFydHNGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZwotICAgICAgICAgIC8vIGEgc29hcGJpbmQ6Ym9keSBjaGlsZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWNvbnRhaW5zT25lU29hcEJvZHkob3V0cHV0TXVsdGlwYXJ0cykpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBpbnZhbGlkICIKLSAgICAgICAgICAgICAgICArICJtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGNvbnRhaW5zIG5vIG9uZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghbXVsdGlwYXJ0c0ZvdW5kKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogTG9va3MgZm9yIG1pbWU6cGFydCBlbGVtZW50cyBjb250YWluaW5nIGEgc29hcDpib2R5IGNoaWxkCi0gICAqIGZvciBlYWNoIG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LgotICAgKiBAcGFyYW0gbXVsdGlwYXJ0cyBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGNvbnRhaW5pbmcgYSBzb2FwOmJvZHkKLSAgICogY2hpbGQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjb250YWluc09uZVNvYXBCb2R5KExpc3QgbXVsdGlwYXJ0cykKLSAgewotICAgIC8vIEEgdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgYSBzb2FwOmJvZHkgZWxlbWVudCBpcyBmb3VuZAotICAgIGJvb2xlYW4gc29hcEJvZHlGb3VuZCA9IGZhbHNlOwotCi0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aXBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgTGlzdCBtaW1lUGFydHMgPQotICAgICAgICAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBtdWx0aXBhcnRzLmdldChpKSkuZ2V0TUlNRVBhcnRzKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIGEgbWltZTpwYXJ0Ci0gICAgICAgIExpc3QgZXh0RWxlbXMgPQotICAgICAgICAgICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoaikpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZXh0RWxlbXMuc2l6ZSgpOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYSBzb2FwOmJvZHkKLSAgICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaykpCi0gICAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIGEgc29hcDpib2R5IGVsZW1lbnQgd2FzIGFscmVhZHkgZm91bmQsCi0gICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZQotICAgICAgICAgICAgaWYgKHNvYXBCb2R5Rm91bmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGVsc2Ugc2V0IHRoZSB2YXJpYWJsZSB0byB0aGUgdHJ1ZSB2YWx1ZQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBzb2FwQm9keUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJvZHlGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cyhMaXN0IGV4dEVsZW1zKQotICB7Ci0gICAgTGlzdCBtaW1lTXVsdGlwYXJ0RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QgYmVpbmcgcmV0dXJuZWQKLSAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkKGV4dEVsZW0pOwotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBvZiB0aGlzIG1pbWU6cGFydAotICAgICAgICAgICAgTGlzdCBlbGVtcyA9IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cygKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZU11bHRpcGFydEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MzAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MzAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3MzRmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTMwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkzMAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSB3c2RsOmZhdWx0IGVsZW1lbnQgaW4gYSBkZXNjcmlwdGlvbiBkb2VzIG5vdCBoYXZlCi0gKiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBhcyBpdHMgY2hpbGQgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTMwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTMwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEEgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgYSBiaW5kaW5nIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQotICAgICAgLy8gd3NkbDpmYXVsdCBlbGVtZW50Ci0gICAgICBib29sZWFuIGZhdWx0c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDpmYXVsdCBlbGVtZW50cwotICAgICAgICBDb2xsZWN0aW9uIGZhdWx0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0cygpLnZhbHVlcygpOwotICAgICAgICBpZiAoIWZhdWx0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBmYXVsdHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zTWltZU11bHRpcGFydHMoZmF1bHRzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYmluZGluZyBvcGVyYXRpb24gaXMgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgZG9lcyBub3QgY29udGFpbiB3c2RsOmZhdWx0IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFmYXVsdHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB3c2RsOmZhdWx0IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZmF1bHRzIGEgY29sbGVjdGlvbiBvZiB3c2RsOmZhdWx0IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYW55IHdzZGw6ZmF1bHQgaGFzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkIGNoaWxkCi0gICAqIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjb250YWluc01pbWVNdWx0aXBhcnRzKENvbGxlY3Rpb24gZmF1bHRzKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIHdzZGw6ZmF1bHRTCi0gICAgSXRlcmF0b3IgaSA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIHdzZGw6ZmF1bHQncyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBMaXN0IGV4dEVsZW1zID0gKChCaW5kaW5nRmF1bHQpIGkubmV4dCgpKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZXh0RWxlbXMuc2l6ZSgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQsIHJldHVybiB0cnVlCi0gICAgICAgIGlmICgoKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLmdldChqKSkKLSAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBUaGVyZSBhcmUgbm8gbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTJhMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuWFNTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTT2JqZWN0TGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1BhcnRpY2xlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVGVybTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQVAyOTQwCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBhIHdzZGw6cGFydCBkZWZpbmVkIHdpdGggdGhlCi0gKiByZWY6c3dhUmVmIHNjaGVtYSB0eXBlIGlzIGJvdW5kIHRvIGEgc29hcGJpbmQ6Ym9keSwgb3IgYSBzb2FwYmluZDpoZWFkZXIKLSAqIGluIGEgTUlNRSBiaW5kaW5nLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5NDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB3c2RsOnBvcnRUeXBlIHJlZmVyZW5jZXMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyB3c2RsOnBhcnQgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICBib29sZWFuIHN3YVJlZkZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICBJbnB1dCBwb3J0VHlwZUlucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpOwotICAgICAgICBPdXRwdXQgcG9ydFR5cGVPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpOwotICAgICAgICAvLyBJZiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgIT0gbnVsbCAmJiBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1lc3NhZ2UncyBwYXJ0cyBkZWZpbmVkIHdpdGggcmVmOnN3YVJlZgotICAgICAgICAgIExpc3Qgc3dhUmVmUGFydHMgPSBnZXRTd2FSZWZQYXJ0cyhwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgaWYgKCFzd2FSZWZQYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3dhUmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0dGluZyBhIHdzZGw6cGFydCB0aGF0IGlzIHVuYm91bmQKLSAgICAgICAgICAgIFN0cmluZyB1bmJvdW5kUGFydCA9IGdldFVuYm91bmRQYXJ0KHN3YVJlZlBhcnRzLAotICAgICAgICAgICAgICBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpLAotICAgICAgICAgICAgICBiaW5kaW5nSW5wdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gSWYgc3VjaCB3c2RsOnBhcnQgZXhpc3RzLCBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICBpZiAodW5ib3VuZFBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBwYXJ0IFwiIiArIHVuYm91bmRQYXJ0Ci0gICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGJvdW5kIHByb3Blcmx5IHRvIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ICE9IG51bGwgJiYgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWVzc2FnZSdzIHBhcnRzIGRlZmluZWQgd2l0aCByZWY6c3dhUmVmCi0gICAgICAgICAgTGlzdCBzd2FSZWZQYXJ0cyA9IGdldFN3YVJlZlBhcnRzKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgaWYgKCFzd2FSZWZQYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3dhUmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0dGluZyBhIHdzZGw6cGFydCB0aGF0IGlzIHVuYm91bmQKLSAgICAgICAgICAgIFN0cmluZyB1bmJvdW5kUGFydCA9IGdldFVuYm91bmRQYXJ0KHN3YVJlZlBhcnRzLAotICAgICAgICAgICAgICBwb3J0VHlwZU91dHB1dC5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgYmluZGluZ091dHB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdPdXRwdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gSWYgc3VjaCB3c2RsOnBhcnQgZXhpc3RzLCBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICBpZiAodW5ib3VuZFBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBwYXJ0IFwiIiArIHVuYm91bmRQYXJ0Ci0gICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGJvdW5kIHByb3Blcmx5IHRvIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB3c2RsOnBhcnRTIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgICAgLy8gc2NoZW1hIHR5cGUsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghc3dhUmVmRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIC8vIFRoZSBhc3NlcnRpb24gaXMgInJlY29tbWVuZGVkIiwgdXNpbmcgdGhlICJ3YXJuaW5nIiByZXN1bHQKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYSB3c2RsOnBhcnQgdGhhdCBpcyBub3QgYm91bmQgdG8gZWl0aGVyIHNvYXA6Ym9keSBvciBzb2FwOmhlYWRlcgotICAgKiBpbiBhIE1JTUUgYmluZGluZy4KLSAgICogQHBhcmFtIHN3YVJlZlBhcnRzIGEgbGlzdCBvZiB3c2RsOnBhcnQgbmFtZXMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZQotICAgKiByZWY6c3dhUmVmIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB3c2RsOm1lc3NhZ2UgYmVpbmcgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgb2YgZWl0aGVyIHdzZGw6aW5wdXQgb3IKLSAgICogd3NkbDpvdXRwdXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gYSB3c2RsOnBhcnQgbmFtZSB0aGF0IGlzIG5vdCBib3VuZCBwcm9wZXJseSwgb3IgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFVuYm91bmRQYXJ0KExpc3Qgc3dhUmVmUGFydHMsIFFOYW1lIG1lc3NhZ2VOYW1lLCBMaXN0IGV4dEVsZW1zKSB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCB3c2RsOnBhcnQgbmFtZXMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN3YVJlZlBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0ID0gKFN0cmluZykgc3dhUmVmUGFydHMuZ2V0KGkpOwotICAgICAgYm9vbGVhbiBib3VuZFByb3Blcmx5ID0gZmFsc2U7Ci0gICAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZXh0RWxlbXMuc2l6ZSgpICYmICFib3VuZFByb3Blcmx5OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaik7Ci0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBtaW1lOnBhcnQgZWxlbWVudCB3aGVyZSBzb2FwOmJvZHkKLSAgICAgICAgICAgIC8vIGFuZCBzb2FwOmhlYWRlciBjb3VsZCBhcHBlYXIKLSAgICAgICAgICAgIGlmIChtaW1lUGFydHMuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGlzdCBlbGVtcyA9ICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoMCkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgTUlNRSBwYXJ0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGVsZW1zLnNpemUoKTsgayArKykKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1zLmdldChrKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGF0IGlzIGEgc29hcDpib2R5Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIExpc3QgcHRzID0gKChTT0FQQm9keSkgZWxlbSkuZ2V0UGFydHMoKTsKLSAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJ0IGlzIGJvdW5kIGJ5IHRoaXMgZWxlbWVudAotICAgICAgICAgICAgICAgICAgaWYgKHB0cyA9PSBudWxsIHx8IHB0cy5jb250YWlucyhwYXJ0KSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBzb2FwOmhlYWRlcgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTT0FQSGVhZGVyIGhlYWRlciA9IChTT0FQSGVhZGVyKSBlbGVtOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VOYW1lLmVxdWFscyhoZWFkZXIuZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICYmIGhlYWRlci5nZXRQYXJ0KCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICYmIGhlYWRlci5nZXRQYXJ0KCkuZXF1YWxzKHBhcnQpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIC8vIFdTREw0SiAxLjQgZG9lcyBub3QgcmVjb2duaXplIHNvYXA6aGVhZGVyIGVsZW1lbnRzIHRoYXQKLSAgICAgICAgICAgICAgICAgIC8vIGFyZSBlbmNsb3NlZCBpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQsIHNvIHVzaW5nIGEgd29ya2Fyb3VuZAotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFbGVtZW50IGhlYWRlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBoZWFkZXIgcmVmZXJlbmNlcyB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZXNNZXNzYWdlKGhlYWRlciwgbWVzc2FnZU5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgaGVhZGVyLmdldEF0dHJpYnV0ZSgicGFydCIpLmVxdWFscyhwYXJ0KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGJvdW5kUHJvcGVybHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiB0aGlzIHBhcnQgaXMgdW5ib3VuZCBwcm9wZXJseSwgcmV0dXJuIGl0Ci0gICAgICBpZiAoIWJvdW5kUHJvcGVybHkpCi0gICAgICAgIHJldHVybiBwYXJ0OwotICAgIH0KLSAgICAvLyBBbGwgdGhlIHBhcnRzIGFyZSBib3VuZCBwcm9wZXJseSwgcmV0dXJuIG51bGwKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgd2hldGhlciBhbiBlbGVtZW50IGNvbnRhaW5zIGEgbWVzc2FnZSBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzCi0gICAqIGEgbWVzc2FnZSB0aGF0IGhhdmUgdGhlIHF1YWxpZmllZCBuYW1lIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIGVsZW0gYW4gZWxlbWVudCB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIEBwYXJhbSBtZXNzYWdlTmFtZSB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYW4gZWxlbWVudCBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNNZXNzYWdlKEVsZW1lbnQgZWxlbSwgUU5hbWUgbWVzc2FnZU5hbWUpCi0gIHsKLSAgICAvLyBHZXR0aW5nIHRoZSBlbGVtZW50J3MgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGVsZW0uZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7Ci0gICAgLy8gZmluZGluZyB0aGUgY29sb24gZGVsaW1pdGVyCi0gICAgaW50IGNvbG9uUG9zID0gbWVzc2FnZS5pbmRleE9mKCI6Iik7Ci0gICAgU3RyaW5nIG5zID0gbnVsbDsKLSAgICAvLyBHZXR0aW5nIGEgbG9jYWwgcGFydAotICAgIFN0cmluZyBscCA9IGNvbG9uUG9zID4gLTEgPyBtZXNzYWdlLnN1YnN0cmluZyhjb2xvblBvcyArIDEpIDogbWVzc2FnZTsKLSAgICAvLyBJZiB0aGUgZGVsaW1pdGVyIGlzIGZvdW5kCi0gICAgaWYgKGNvbG9uUG9zID4gLTEpCi0gICAgewotICAgICAgLy8gUmV0cmlldmluZyBhIG5hbWVzcGFjZSBVUkkKLSAgICAgIG5zID0gdmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpCi0gICAgICAgIC5nZXROYW1lc3BhY2UobWVzc2FnZS5zdWJzdHJpbmcoMCwgY29sb25Qb3MpKTsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGxvY2FsIHBhcnQgYW5kIHRoZSBuYW1lc3BhY2UgVVJJIGFyZSB0aGUgc2FtZSBhcyBhIG1lc3NhZ2UgaGF2ZQotICAgIGlmIChtZXNzYWdlTmFtZS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMobHApCi0gICAgICAmJiBtZXNzYWdlTmFtZS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMobnMpKQotICAgIHsKLSAgICAgIC8vIGVsZW1lbnQgaXMgdmFsaWQsIHJldHVybiB0cnVlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gZWxlbWVudCBpcyBub3QgdmFsaWQsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIHdzZGw6cGFydCBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgbWVzc2FnZSBjb250YWluaWcgd3NkbDpwYXJ0IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiB3c2RsOnBhcnQgbmFtZXMuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0U3dhUmVmUGFydHMoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgTGlzdCBzd2FSZWZQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIEdvaW5nIHRocm91Z2ggbWVzc2FnZSdzIHBhcnRzCi0gICAgSXRlcmF0b3IgaXQgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICBRTmFtZSByZWY7Ci0gICAgICBzaG9ydCB0eXBlOwotICAgICAgLy8gR2V0dGluZyBlaXRoZXIgcGFydCdzIGVsZW1lbnQgcmVmZXJlbmNlIG9yIHR5cGUgcmVmZXJlbmNlCi0gICAgICBpZiAoKHJlZiA9IHBhcnQuZ2V0VHlwZU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9IFhTQ29uc3RhbnRzLlRZUEVfREVGSU5JVElPTjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKChyZWYgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGUgPSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAgICAgfQotICAgICAgLy8gVGhlIHBhcnQgZG9lcyBjb25hdGlucyBuZWl0aGVyIGVsZW1lbnQgbm9yIHR5cGUgYXR0cmlidXRlLAotICAgICAgLy8gcHJvY2VlZGluZyB3aXRoIHRoZSBuZXh0IHBhcnQKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBzY2hlbWFzIGRlZmluZWQKLSAgICAgIE1hcCBzY2hlbWFzID0gdmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXRTY2hlbWFzKCk7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBzY2hlbWFzCi0gICAgICBJdGVyYXRvciBpdDIgPSBzY2hlbWFzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNNb2RlbCB4c01vZGVsID0gKFhTTW9kZWwpIGl0Mi5uZXh0KCk7Ci0gICAgICAgIFhTVHlwZURlZmluaXRpb24gcGFydFR5cGUgPSBudWxsOwotICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQgdHlwZQotICAgICAgICBpZiAodHlwZSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgWFNFbGVtZW50RGVjbGFyYXRpb24gZWxlbSA9IHhzTW9kZWwuZ2V0RWxlbWVudERlY2xhcmF0aW9uKAotICAgICAgICAgICAgcmVmLmdldExvY2FsUGFydCgpLCByZWYuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgICAgIGlmIChlbGVtICE9IG51bGwpCi0gICAgICAgICAgICBwYXJ0VHlwZSA9IGVsZW0uZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0VHlwZSA9IHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24oCi0gICAgICAgICAgICByZWYuZ2V0TG9jYWxQYXJ0KCksIHJlZi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgdGhlIHBhcnQgdHlwZSBpcyBkZWZpbmVkIHVzaW5nIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKHBhcnRUeXBlLCBuZXcgQXJyYXlMaXN0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBwYXJ0J3MgbmFtZSB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIHN3YVJlZlBhcnRzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIHRoZSBsaXN0Ci0gICAgcmV0dXJuIHN3YVJlZlBhcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHNjaGVtYSB0eXBlIHdoZXRoZXIgaXQgY29udGFpbnMgcmVmOnN3YVJlZiBzaW1wbGUgc2NoZW1hIHR5cGUKLSAgICogb3IgaGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGlzIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0geHNUeXBlIGEgc2NoZW1hIHR5cGUgZGVmaW5pdGlvbiBlbGVtZW50Ci0gICAqIEByZXR1cm4gdHJ1ZSwgaWYgc2NoZW1hIHR5cGUgY29udGFpbnMgcmVmOnN3YVJlZiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNTd2FSZWYoWFNUeXBlRGVmaW5pdGlvbiB4c1R5cGUsIExpc3QgdHlwZXMpCi0gIHsKLSAgICBpZiAoKHhzVHlwZSAhPSBudWxsKSAmJiAoIXR5cGVzLmNvbnRhaW5zKHhzVHlwZSkpKQotICAgIHsKLSAgICAgIHR5cGVzLmFkZCh4c1R5cGUpOwotICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbXBsZXggdHlwZQotICAgICAgaWYgKHhzVHlwZS5nZXRUeXBlQ2F0ZWdvcnkoKSA9PSBYU1R5cGVEZWZpbml0aW9uLkNPTVBMRVhfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNDb21wbGV4VHlwZURlZmluaXRpb24geHNDb21wbGV4VHlwZSA9Ci0gICAgICAgICAgKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c1R5cGU7Ci0gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIG1peGVkIGNvbnRleHQKLSAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgY29udGV4dCBjb250YWlucyByZWY6c3dhUmVmCi0gICAgICAgIGlmICh4c0NvbXBsZXhUeXBlLmdldFBhcnRpY2xlKCkgIT0gbnVsbAotICAgICAgICAgICYmIHJlZmVyZW5jZXNTd2FSZWYoeHNDb21wbGV4VHlwZS5nZXRQYXJ0aWNsZSgpLmdldFRlcm0oKSwgdHlwZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgdHlwZSdzIGF0dHJpYnV0ZXMKLSAgICAgICAgWFNPYmplY3RMaXN0IGF0dHJMaXN0ID0geHNDb21wbGV4VHlwZS5nZXRBdHRyaWJ1dGVVc2VzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ckxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFhTQXR0cmlidXRlVXNlIHhzQXR0clVzZSA9IChYU0F0dHJpYnV0ZVVzZSkgYXR0ckxpc3QuaXRlbShpKTsKLSAgICAgICAgICAvLyBJZiBhbiBhdHRyaWJ1dGUgaXMgZGVmaW5lZCB1c2luZyByZWY6c3dhUmVmLCByZXR1cm4gdHJ1ZQotICAgICAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKAotICAgICAgICAgICAgeHNBdHRyVXNlLmdldEF0dHJEZWNsYXJhdGlvbigpLmdldFR5cGVEZWZpbml0aW9uKCksIHR5cGVzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGVsc2UgaWYgdGhpcyBpcyBhIHNpbXBsZSB0eXBlCi0gICAgICBlbHNlIGlmICh4c1R5cGUuZ2V0VHlwZUNhdGVnb3J5KCkgPT0gWFNUeXBlRGVmaW5pdGlvbi5TSU1QTEVfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNTaW1wbGVUeXBlIHhzU2ltcGxlVHlwZSA9IChYU1NpbXBsZVR5cGUpIHhzVHlwZTsKLSAgICAgICAgLy8gSWYgdGhpcyB0eXBlIGlzIHJlZjpzd2FSZWYsIHJldHVybiB0cnVlCi0gICAgICAgIGlmICh4c1NpbXBsZVR5cGUuZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU1dBX1JFRikKLSAgICAgICAgICAmJiB4c1NpbXBsZVR5cGUuZ2V0TmFtZSgpLmVxdWFscyhXU0lDb25zdGFudHMuU0NIRU1BX1RZUEVfU1dBX1JFRikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBUaGUgc2NoZW1hIHR5cGUgZG9lcyBub3QgY29udGFpbiBhbnkgZWxlbWVudCBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYKLSAgICAvLyByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIGEgdGVybSB3aGV0aGVyIGl0IGlzIGRlZmluZWQgd2l0aCByZWY6c3dhUmVmLgotICAgKiBAcGFyYW0gdGVybSBhIHRlcm0gdGhhdCBjYW4gYmUgb25lIG9mIGEgbW9kZWwgZ3JvdXAgb3IgYW4KLSAgICogZWxlbWVudCBkZWNsYXJhdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIGEgdGVybSBpcyBkZWZpbmVkIHdpdGggcmVmOnN3YVJlZiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNTd2FSZWYoWFNUZXJtIHRlcm0sIExpc3QgdHlwZXMpCi0gIHsKLSAgICAvLyBJZiBhIHRlcm0gaXMgYW4gZWxlbWVudCBkZWNsYXJhdGlvbgotICAgIGlmICh0ZXJtLmdldFR5cGUoKSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgIHsKLSAgICAgIC8vIElmIGVsZW1lbnQncyB0eXBlIGlzIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZiwgcmV0dXJuIHRydWUKLSAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKAotICAgICAgICAoKFhTRWxlbWVudERlY2xhcmF0aW9uKSB0ZXJtKS5nZXRUeXBlRGVmaW5pdGlvbigpLCB0eXBlcykpCi0gICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGVsc2UgaWYgYSB0ZXJtIGlzIGEgbW9kZWwgZ3JvdXAKLSAgICBlbHNlIGlmKHRlcm0uZ2V0VHlwZSgpID09IFhTQ29uc3RhbnRzLk1PREVMX0dST1VQKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIFBhcnRpY2xlIHNjaGVtYSBjb21wb25lbnRzCi0gICAgICBYU09iamVjdExpc3QgbGlzdCA9ICgoWFNNb2RlbEdyb3VwKSB0ZXJtKS5nZXRQYXJ0aWNsZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGUgdGVybSBvZiBhIHBhcnRpY2xlIGlzIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZiwKLSAgICAgICAgLy8gcmV0dXJuIHRydWUKLSAgICAgICAgaWYgKHJlZmVyZW5jZXNTd2FSZWYoKChYU1BhcnRpY2xlKSBsaXN0Lml0ZW0oaSkpLmdldFRlcm0oKSwgdHlwZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJmMGRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBBUDI5NDEKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgd3NkbDpiaW5kaW5nIGluIGEgZGVzY3JpcHRpb24gYmluZHMgZXZlcnkgd3NkbDpwYXJ0Ci0gKiBvZiBhIHdzZGw6bWVzc2FnZSBpbiB0aGUgd3NkbDpwb3J0VHlwZSB0byB3aGljaCBpdCByZWZlcnMgdG8gb25lIG9mCi0gKiBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmZhdWx0ICwgc29hcGJpbmQ6aGVhZGVyZmF1bHQsCi0gKiBvciBtaW1lOmNvbnRlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjk0MSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjk0MShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLSAgICAgICAgSW5wdXQgcG9ydFR5cGVJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKTsKLSAgICAgICAgT3V0cHV0IHBvcnRUeXBlT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKTsKLSAgICAgICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBleGlzdHMgaW4gd3NkbDpwb3J0VHlwZQotICAgICAgICAvLyBhbmQgaW5jbHVkZXMgdGhlIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgIGlmIChwb3J0VHlwZUlucHV0ICE9IG51bGwgJiYgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIGxpc3Qgb2YgYWxsIHRoZSBwYXJ0cyBib3VuZCBieSB3c2RsOmlucHV0J3MgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICBMaXN0IGlucHV0UGFydHMgPSBnZXRCaW5kaW5nUGFydHMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLAotICAgICAgICAgICAgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIC8vIElmIG5vdCB0cnVlIHRoYXQgYWxsIHRoZSB3c2RsOnBhcnRTIGFyZSBib3VuZCwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmICghaW5wdXRQYXJ0cwotICAgICAgICAgICAgLmNvbnRhaW5zQWxsKHBvcnRUeXBlSW5wdXQuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkua2V5U2V0KCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIgYmluZGluZyBvcGVyYXRpb24gZG9lcyBub3QgIgotICAgICAgICAgICAgICArICJiaW5kIGFsbCB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBhcnRTLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ICE9IG51bGwgJiYgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBsaXN0IG9mIGFsbCB0aGUgcGFydHMgYm91bmQgYnkgd3NkbDpvdXRwdXQncyBjaGlsZCBlbGVtZW50cwotICAgICAgICAgIExpc3Qgb3V0cHV0UGFydHMgPSBnZXRCaW5kaW5nUGFydHMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgIHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgLy8gSWYgbm90IHRydWUgdGhhdCBhbGwgdGhlIHdzZGw6cGFydFMgYXJlIGJvdW5kLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFvdXRwdXRQYXJ0cwotICAgICAgICAgICAgLmNvbnRhaW5zQWxsKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpLmtleVNldCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiBiaW5kaW5nIG9wZXJhdGlvbiBkb2VzIG5vdCAiCi0gICAgICAgICAgICAgICsgImJpbmQgYWxsIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6cGFydFMuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSUYgdGhlcmUgYXJlIHdzZGw6ZmF1bHRTIGluIHRoZSB3c2RsOnBvcnRUeXBlIG9wZXJhdGlvbgotICAgICAgICBpZiAoIWJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0RmF1bHRzKCkuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIHNvYXA6ZmF1bHQgbmFtZXMKLSAgICAgICAgICBMaXN0IGZhdWx0TmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBmYXVsdHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgd3NkbDpmYXVsdFMKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB3c2RsOmZhdWx0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgTGlzdCBleHRFbGVtcyA9ICgoQmluZGluZ0ZhdWx0KSBpdC5uZXh0KCkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBleHRFbGVtcy5zaXplKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMuZ2V0KGopKQotICAgICAgICAgICAgICAgIC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfRkFVTFQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmF1bHROYW1lcy5hZGQoKChTT0FQRmF1bHQpZXh0RWxlbXMuZ2V0KGopKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBzb2FwOmhlYWRlcmZhdWx0UwotICAgICAgICAgIGZhdWx0TmFtZXMuYWRkQWxsKGZpbmRBbGxIZWFkZXJGYXVsdHMoYmluZGluZ09wZXJhdGlvbikpOwotICAgICAgICAgIC8vIElmIG5vdCB0cnVlIHRoYXQgYWxsIHRoZSB3c2RsOmZhdWx0UyBhcmUgYm91bmQsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWZhdWx0TmFtZXMuY29udGFpbnNBbGwoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldEZhdWx0cygpLmtleVNldCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGRvZXMgbm90ICIKLSAgICAgICAgICAgICAgICAgICsgImJpbmQgYWxsIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6ZmF1bHRTLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgLy8gVGhlIGFzc2VydGlvbiBpcyAicmVjb21tZW5kZWQiLCB1c2luZyB0aGUgIndhcm5pbmciIHJlc3VsdAotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIHBhcnRzIGJvdW5kIGJ5IGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgd3NkbDptZXNzYWdlIGVsZW1lbnQgY29ycmVzcG9uZ2luZwotICAgKiB0byB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIGxpc3Qgb2Ygd3NkbDpwYXJ0IG5hbWVzIGJvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEJpbmRpbmdQYXJ0cyhMaXN0IGV4dEVsZW1zLCBNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1zLmdldChpKTsKLSAgICAgICAgLy8gSWYgdGhhdCBpcyBhIHNvYXA6Ym9keQotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfQk9EWSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgYWxsIHRoZSBwYXJ0cyBib3VuZCB0byB0aGUgbGlzdAotICAgICAgICAgIExpc3QgcHRzID0gKChTT0FQQm9keSkgZXh0RWxlbSkuZ2V0UGFydHMoKTsKLSAgICAgICAgICBpZiAocHRzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHMuYWRkQWxsKHB0cyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGVsc2UgdGhlIHBhcnRzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLAotICAgICAgICAgIC8vIGFsbCBwYXJ0cyBkZWZpbmVkIGJ5IHRoZSBtZXNzYWdlIGFyZSBhc3N1bWVkIHRvIGJlIGluY2x1ZGVkCi0gICAgICAgICAgLy8gaW4gdGhlIFNPQVAgQm9keSBwb3J0aW9uLgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0cy5hZGRBbGwobWVzc2FnZS5nZXRQYXJ0cygpLmtleVNldCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZWxzZSBpZiB0aGF0IGlzIGEgc29hcDpoZWFkZXIKLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgaGVhZGVyRmF1bHRzID0gbnVsbDsKLSAgICAgICAgICBpZiAoZXh0RWxlbSBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgU09BUEhlYWRlciBoZWFkZXIgPSAoU09BUEhlYWRlcikgZXh0RWxlbTsKLSAgICAgICAgICAgIC8vIElmIGEgaGVhZGVyIHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QgCi0gICAgICAgICAgICBpZiAobWVzc2FnZS5nZXRRTmFtZSgpLmVxdWFscyhoZWFkZXIuZ2V0TWVzc2FnZSgpKSkKLSAgICAgICAgICAgICAgcGFydHMuYWRkKGhlYWRlci5nZXRQYXJ0KCkpOwotCi0gICAgICAgICAgICBoZWFkZXJGYXVsdHMgPSBoZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBXU0RMNEogMS40IGRvZXMgbm90IHJlY29nbml6ZSBzb2FwOmhlYWRlciBlbGVtZW50cyB0aGF0IGFyZSBlbmNsb3NlZAotICAgICAgICAgIC8vIGluIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwgc28gdXNpbmcgYSB3b3JrYXJvdW5kCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgaGVhZGVyID0KLSAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgIC8vIElmIGEgaGVhZGVyIHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgIGlmIChyZWZlcmVuY2VzTWVzc2FnZShoZWFkZXIsIG1lc3NhZ2UuZ2V0UU5hbWUoKSkpCi0gICAgICAgICAgICAgIHBhcnRzLmFkZChoZWFkZXIuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBzb2FwOmhlYWRlcmZhdWx0IGVsZW1lbnRzIGZvciB0aGUgaGVhZGVyCi0gICAgICAgICAgICBoZWFkZXJGYXVsdHMgPSBnZXRIZWFkZXJGYXVsdHMoaGVhZGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgc29hcDpoZWFkZXJmYXVsdFMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGhlYWRlckZhdWx0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyRmF1bHRzLmdldChqKSBpbnN0YW5jZW9mIFNPQVBIZWFkZXJGYXVsdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNoZiA9IChTT0FQSGVhZGVyRmF1bHQpIGhlYWRlckZhdWx0cy5nZXQoaik7Ci0gICAgICAgICAgICAgIC8vIElmIGEgc29hcDpoZWFkZXJmYXVsdCByZWZlcmVuY2VzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgIC8vIG1lc3NhZ2UsIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXF1YWxzKHNoZi5nZXRNZXNzYWdlKCkpKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChzaGYuZ2V0UGFydCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHRoZSBzYW1lIHdvcmthcm91bmQuLi4KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBzaGYgPSAoRWxlbWVudCkgaGVhZGVyRmF1bHRzLmdldChqKTsKLSAgICAgICAgICAgICAgLy8gSWYgYSBzb2FwOmhlYWRlcmZhdWx0IHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgLy8gbWVzc2FnZSwgYWRkaW5nIHBhcnQgbmFtZSB0byB0aGUgbGlzdAotICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlc01lc3NhZ2Uoc2hmLCBtZXNzYWdlLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChzaGYuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBtaW1lOmNvbnRlbnQKLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfQ09OVEVOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBhZGRpbmcgcGFydCBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgcGFydHMuYWRkKCgoTUlNRUNvbnRlbnQpIGV4dEVsZW0pLmdldFBhcnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZWxzZSBpZiB0aGF0IGlzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSB2YWx1ZXMgb2YgcGFydCBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAvLyBvZiBtaW1lOnBhcnQncyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgICBwYXJ0cy5hZGRBbGwoZ2V0QmluZGluZ1BhcnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgICAgbWVzc2FnZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgYW4gZWxlbWVudCBjb250YWlucyBhIG1lc3NhZ2UgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcwotICAgKiBhIG1lc3NhZ2UgdGhhdCBoYXZlIHRoZSBxdWFsaWZpZWQgbmFtZSBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSBlbGVtIGFuIGVsZW1lbnQgdG8gYmUgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGFuIGVsZW1lbnQgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiByZWZlcmVuY2VzTWVzc2FnZShFbGVtZW50IGVsZW0sIFFOYW1lIG1lc3NhZ2VOYW1lKQotICB7Ci0gICAgLy8gR2V0dGluZyB0aGUgZWxlbWVudCdzIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSBlbGVtLmdldEF0dHJpYnV0ZSgibWVzc2FnZSIpOwotICAgIC8vIGZpbmRpbmcgdGhlIGNvbG9uIGRlbGltaXRlcgotICAgIGludCBjb2xvblBvcyA9IG1lc3NhZ2UuaW5kZXhPZigiOiIpOwotICAgIFN0cmluZyBucyA9IG51bGw7Ci0gICAgLy8gR2V0dGluZyBhIGxvY2FsIHBhcnQKLSAgICBTdHJpbmcgbHAgPSBjb2xvblBvcyA+IC0xID8gbWVzc2FnZS5zdWJzdHJpbmcoY29sb25Qb3MgKyAxKSA6IG1lc3NhZ2U7Ci0gICAgLy8gSWYgdGhlIGRlbGltaXRlciBpcyBmb3VuZAotICAgIGlmIChjb2xvblBvcyA+IC0xKQotICAgIHsKLSAgICAgIC8vIFJldHJpZXZpbmcgYSBuYW1lc3BhY2UgVVJJCi0gICAgICBucyA9IHZhbGlkYXRvci53c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKQotICAgICAgICAuZ2V0TmFtZXNwYWNlKG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKSk7Ci0gICAgfQotICAgIC8vIElmIHRoZSBsb2NhbCBwYXJ0IGFuZCB0aGUgbmFtZXNwYWNlIFVSSSBhcmUgdGhlIHNhbWUgYXMgYSBtZXNzYWdlIGhhdmUKLSAgICBpZiAobWVzc2FnZU5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGxwKQotICAgICAgJiYgbWVzc2FnZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKG5zKSkKLSAgICB7Ci0gICAgICAvLyBlbGVtZW50IGlzIHZhbGlkLCByZXR1cm4gdHJ1ZQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIGVsZW1lbnQgaXMgbm90IHZhbGlkLCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZmluZEFsbEhlYWRlckZhdWx0cyhCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCkKLSAgewotICAgIExpc3QgaGVhZGVyRmF1bHRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChiaW5kaW5nT3AgPT0gbnVsbCkKLSAgICAgIHJldHVybiBoZWFkZXJGYXVsdHM7Ci0gICAgTGlzdCBpb0VsZW1lbnRzID0gYmluZGluZ09wLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlvRWxlbWVudHMuYWRkQWxsKGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW9FbGVtZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpb0VsZW1lbnRzLmdldChpKTsKLSAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfU09BUF9IRUFERVIpKSB7Ci0gICAgICAgIExpc3Qgc2hmTGlzdCA9ICgoU09BUEhlYWRlcikgZXh0RWxlbSkuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNoZkxpc3Quc2l6ZSgpOyBqKyspCi0gICAgICAgICAgaGVhZGVyRmF1bHRzLmFkZCgoKFNPQVBIZWFkZXJGYXVsdCkgc2hmTGlzdC5nZXQoaikpLmdldFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICghZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfQk9EWSkpIHsKLSAgICAgICAgTGlzdCBlbExpc3QgPSBnZXRIZWFkZXJGYXVsdHMoKAotICAgICAgICAgICAgICAgICAgKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbSkuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbExpc3Quc2l6ZSgpOyBqKyspCi0gICAgICAgICAgaGVhZGVyRmF1bHRzLmFkZCgoKEVsZW1lbnQpZWxMaXN0LmdldChqKSkuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIGVsZW1lbnQncyBjaGlsZCBlbGVtZW50cyBvZiB0aGUgc29hcDpoZWFkZXJmYXVsdCB0eXBlLgotICAgKiBAcGFyYW0gZWxlbWVudCBhbiBlbGVtZW50IHRoYXQgY2FuIGhhdmUgc29hcDpoZWFkZXJmYXVsdCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBzb2FwOmhlYWRlcmZhdWx0IGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEhlYWRlckZhdWx0cyhFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IGhlYWRlckZhdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGhlYWRlcidzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpoZWFkZXJmYXVsdAotICAgICAgICBpZiAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExfU09BUF9IRUFERVJGQVVMVC5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAmJiBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUkZBVUxULmdldExvY2FsUGFydCgpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgY2hpbGQgdG8gdGhlIGxpc3QKLSAgICAgICAgICBoZWFkZXJGYXVsdHMuYWRkKGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGhlYWRlcidzIGNoaWxkCi0gICAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0NC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTkzYTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDI5NDQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkluIGEgREVTQ1JJUFRJT04sIGlmIGEgd3NkbDpwYXJ0IGVsZW1lbnQgcmVmZXJzIHRvIGEKLSAqIGdsb2JhbCBlbGVtZW50IGRlY2xhcmF0aW9uICh2aWEgdGhlIGVsZW1lbnQgYXR0cmlidXRlIG9mIHRoZSB3c2RsOnBhcnQgZWxlbWVudCkKLSAqIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBhIG1pbWU6Y29udGVudCBlbGVtZW50IHRoYXQgYmluZHMgdGhhdCBwYXJ0Ci0gKiBpcyBhIGNvbnRlbnQgdHlwZSBzdWl0YWJsZSBmb3IgY2FycnlpbmcgYW4gWE1MIHNlcmlhbGl6YXRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjk0NCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gIC8vIHRoYXQgYmluZCB3c2RsOnBhcnRTIGRlZmluZWQgd2l0aCB0aGUgZWxlbWVudCBhdHRyaWJ1dGUKLSAgcHJpdmF0ZSBib29sZWFuIG1pbWVDb250ZW50Rm91bmQ7Ci0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVzZXR0aW5nIHRoZSB2YXJpYWJsZQotICAgIG1pbWVDb250ZW50Rm91bmQgPSBmYWxzZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE1pbWVDb250ZW50cyA9IGdldE1pbWVDb250ZW50RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJbnB1dCBwb3J0VHlwZUlucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpOwotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6aW5wdXQgZXhpc3RzIGluIHdzZGw6cG9ydFR5cGUKLSAgICAgICAgICAvLyBhbmQgaW5jbHVkZXMgdGhlIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgIT0gbnVsbCAmJiBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQKLSAgICAgICAgICAgIE1JTUVDb250ZW50IGltYyA9IGdldEludmFsaWRNaW1lQ29udGVudCgKLSAgICAgICAgICAgICAgICBpbnB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgaWYgKGltYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG1pbWU6Y29udGVudCBlbGVtZW50IGluICIKLSAgICAgICAgICAgICAgICArICJ0aGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkKLSAgICAgICAgICAgICAgICArICJcIiB0aGF0IGJpbmRzIHRoZSBcIiIgKyBpbWMuZ2V0UGFydCgpCi0gICAgICAgICAgICAgICAgKyAiXCIgd3NkbDpwYXJ0IHVzZXMgdGhlIGludmFsaWQgY29udGVudCB0eXBlIFwiIgotICAgICAgICAgICAgICAgICsgaW1jLmdldFR5cGUoKSArICJcIi4gIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBPdXRwdXQgcG9ydFR5cGVPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpOwotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgICAgLy8gYW5kIGluY2x1ZGVzIHRoZSBtZXNzYWdlIGF0dHJpYnV0ZQotICAgICAgICAgIGlmIChwb3J0VHlwZU91dHB1dCAhPSBudWxsICYmIHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQKLSAgICAgICAgICAgIE1JTUVDb250ZW50IGltYyA9IGdldEludmFsaWRNaW1lQ29udGVudCgKLSAgICAgICAgICAgICAgb3V0cHV0TWltZUNvbnRlbnRzLCBwb3J0VHlwZU91dHB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgaWYgKGltYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG1pbWU6Y29udGVudCBlbGVtZW50IGluICIKLSAgICAgICAgICAgICAgICArICJ0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICAgKyAiXCIgdGhhdCBiaW5kcyB0aGUgXCIiICsgaW1jLmdldFBhcnQoKQotICAgICAgICAgICAgICAgICsgIlwiIHdzZGw6cGFydCB1c2VzIHRoZSBpbnZhbGlkIGNvbnRlbnQgdHlwZSBcIiIKLSAgICAgICAgICAgICAgICArIGltYy5nZXRUeXBlKCkgKyAiXCIuICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgbWltZTpjb250ZW50IGVsZW1lbnRzIGFyZSBub3QgZm91bmQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIW1pbWVDb250ZW50Rm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBhbnkgbWltZTpjb250ZW50IGVsZW1lbnQgYmluZHMgd3NkbDpwYXJ0IHRoYXQgaXMgZGVmaW5lZAotICAgKiB3aXRoIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBhbmQgdXNlcyB0aGUgY29udGVudCB0eXBlICJ0ZXh0L3htbCIuCi0gICAqIEBwYXJhbSBtaW1lQ29udGVudHMgYSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBvZiBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDptZXNzYWdlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBtaW1lOmNvbnRlbnQgZWxlbWVudCB0aGF0IHVzZXMgYSBjb250ZW50IHR5cGUgb3RoZXIgdGhhbgotICAgKiAidGV4dC94bWwiLCBudWxsIGlmIG5vIG9uZSBzdWNoIGVsZW1lbnQgaXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIE1JTUVDb250ZW50IGdldEludmFsaWRNaW1lQ29udGVudChMaXN0IG1pbWVDb250ZW50cywgTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lQ29udGVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSAoTUlNRUNvbnRlbnQpIG1pbWVDb250ZW50cy5nZXQoaSk7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6cGFydAotICAgICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KG1pbWVDb250ZW50LmdldFBhcnQoKSk7Ci0gICAgICAvLyBJZiB0aGUgcGFydCBpcyBkZWZpbmVkIHdpdGggdGhlIGVsZW1lbnQgYXR0cmlidXRlCi0gICAgICBpZiAocGFydCAhPSBudWxsICYmIHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtaW1lQ29udGVudEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgLy8gSWYgdGhlIHR5cGUgYXR0cmlidXRlIHZhbHVlIGlzIG90aGVyIHRoYW4gInRleHQveG1sIgotICAgICAgICBpZiAoIVdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwuZXF1YWxzKG1pbWVDb250ZW50LmdldFR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyByZXR1cm4gdGhlIGludmFsaWQgZWxlbWVudAotICAgICAgICAgIHJldHVybiBtaW1lQ29udGVudDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU1NTczOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQ2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTQ2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyAgd2l0aCBhdCBsZWFzdCBvbmUgbWltZTpjb250ZW50IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SW4gYSBERVNDUklQVElPTiwgYSBtaW1lOmNvbnRlbnQgZWxlbWVudAotICogaW5jbHVkZXMgdGhlIHBhcnQgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5NDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZUNvbnRlbnRzID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpjb250ZW50IHRoYXQgZG9lcyBub3QgaW5jbHVkZQotICAgICAgICAgIC8vIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoaGFzSW52YWxpZE1pbWVDb250ZW50KGlucHV0TWltZUNvbnRlbnRzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOmNvbnRlbnQgZWxlbWVudCIKLSAgICAgICAgICAgICAgKyAiIGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpjb250ZW50IHRoYXQgZG9lcyBub3QgaW5jbHVkZQotICAgICAgICAgIC8vIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoaGFzSW52YWxpZE1pbWVDb250ZW50KG91dHB1dE1pbWVDb250ZW50cykpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQiCi0gICAgICAgICAgICAgICsgIiBpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGNvbnRhaW5zIG5vIG1pbWU6Y29udGVudCBlbGVtZW50cywKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghbWltZUNvbnRlbnRzRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gbWltZUNvbnRlbnRzIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnkgbWltZTpjb250ZW50IGRvZXMgbm90IGluY2x1ZGUgdGhlIHBhcnQgYXR0cmlidXRlLAotICAgKiBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNJbnZhbGlkTWltZUNvbnRlbnQoTGlzdCBtaW1lQ29udGVudHMpCi0gIHsKLSAgICAvLyBHb2luZyB0aHJvdWdoIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVDb250ZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBJZiBhIG1pbWU6Y29udGVudCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgcmV0dXJuIHRydWUKLSAgICAgIGlmICgoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIFRoZXJlIGFyZSBubyBpbnZhbGlkIG1pbWU6Y29udGVudFMsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE1MTkzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotKiBCUDIwMTAuCi0qICJOYW1lIiBhdHRyaWJ1dGVzIG9mIE9wZXJhdGlvbnMgYXJlIHVuaXF1ZSBhY3Jvc3MgdGhlIHdzZGw6cG9ydFR5cGUgZGVmaW5pdGlvbiAKLSoKLSogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIEdldCB0aGUgcG9ydFR5cGUgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gQ2hlY2sgdGhlIG9wZXJhdGlvbnMgbmFtZXMgZm9yIHVuaXF1ZW5lc3Mgd2l0aGluIHRoZSBjYW5kaWRhdGUgUG9ydCBUeXBlIGluIHRoZSBXU0RMIAotICAgIEl0ZXJhdG9yIG9wczsKLSAgICBIYXNoU2V0IG5hbWVzU2VlbiA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgSGFzaFNldCBkdXBsaWNhdGVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBMaXN0IG9wc0xpc3QgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICBpZiAob3BzTGlzdCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAvLyBubyBvcGVyYXRpb25zIGZvdW5kIGluIHBvcnRUeXBlCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wcyA9IG9wc0xpc3QuaXRlcmF0b3IoKTsgLy8gd2lsbCB1c2UgQ2FuZGlkYXRlLmdldE9wZXJhdGlvbnMoKQotICAgICAgICB3aGlsZSAob3BzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIE9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wcy5uZXh0KCk7Ci0gICAgICAgICAgU3RyaW5nIG9wTmFtZSA9IG9wLmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAobmFtZXNTZWVuLmNvbnRhaW5zKG9wTmFtZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZHVwbGljYXRlcy5hZGQob3BOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzU2Vlbi5hZGQob3BOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFkdXBsaWNhdGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGZhaWxJbmZvID0KLSAgICAgICAgICBuZXcgU3RyaW5nQnVmZmVyKAotICAgICAgICAgICAgIkR1cGxpY2F0ZSBvcGVyYXRpb24gbmFtZXMgaW4gcG9ydFR5cGUgIgotICAgICAgICAgICAgICArIHBvcnRUeXBlLmdldFFOYW1lKCkKLSAgICAgICAgICAgICAgKyAiOiAiKTsKLSAgICAgICAgSXRlcmF0b3IgaSA9IGR1cGxpY2F0ZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgZmFpbEluZm8uYXBwZW5kKChTdHJpbmcpIGkubmV4dCgpICsgIjsgIik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oZmFpbEluZm8udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgIHsgLy8gPz8gbm8gb3BlcmF0aW9ucyBmb3VuZCwgYnV0IGRvZXMgbm90IGZhaWwgdGhlIGFzc2VydGlvbi4KLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0LCBwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzFlMDU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjAxMS4KLSAqIFRoZSBpbXBvcnRlZCBYTUwgc2NoZW1hIGlzIGEgd2VsbC1mb3JtZWQgWE1MIDEuMCBkb2N1bWVudCBhbmQgaWYgaXQgY29udGFpbnMgYW4gCi0gKiBYTUwgZGVjbGFyYXRpb24sIGl0IGlzIHZlcnNpb24gMS4wLiAKLSAqCi0gKiBAdmVyc2lvbiAxLjAuMSAyNy4wNi4yMDAzCi0gKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgZmluYWwgY2hhcltdIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMgPQotICAgIG5ldyBjaGFyW10geyAweDIwLCAweDksIDB4RCwgMHhBLCAnXCcnLCAnXCInIH07Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXSB7ICc9JyB9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBWRVJTSU9OX1RPS0VOID0gInZlcnNpb24iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBWRVJTSU9OID0gIjEuMCI7Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICAvL0RlZmluaXRpb24gZGVmID0gKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBMaXN0IGV4dHMgPSBudWxsOwotICAgIC8vaWYgKGRlZi5nZXRUeXBlcygpIT1udWxsKQotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGV4dHMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgaWYgKGV4dHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgICAgaWYgKChkZWZpbml0aW9uID0KLSAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbih0eXBlcykpCi0gICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIHR5cGVzIGRlZmluaXRpb24gaW4gYW55IFdTREwgZG9jdW1lbnQuIik7Ci0gICAgICB9Ci0KLSAgICAgIEl0ZXJhdG9yIGl0ID0gZXh0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHNlYXJjaEZvclNjaGVtYSgoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZWwpLmdldEVsZW1lbnQoKSwKLSAgICAgICAgICAgICAgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbmV3IEFycmF5TGlzdCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9IC8qZWxzZQotICAgICAgICAgCQkJcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ki8KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBuIC0gVW5rbm93bkV4dGVuY2liaWxpdHlFbGVtZW50Ci0gICovCi0gIHByaXZhdGUgdm9pZCBzZWFyY2hGb3JTY2hlbWEoTm9kZSBuLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0gICAgaWYgKChuIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKG4pKSkKLSAgICB7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBzZWFyY2hlcyBmb3IgeHNkOmltcG9ydCBlbGVtZW50Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIC8vIGlmIHhzZDppbXBvcnQgZWxlbWVudCBpcyBmb3VuZCAtPiBsb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICAgIC8vIEZJWEVEOiBpZiB4c2Q6aW1wb3J0IGlzIGZvdW5kIGFuZCBwYXJlbnQgZWxlbWVudCBpcyB4c2Q6c2NoZW1hCi0gICAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkKLSAgICAgICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4uZ2V0UGFyZW50Tm9kZSgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAvLyBlbHNlIGl0ZXJhdGUgZWxlbWVudCByZWN1cnNpdmVseQotICAgICAgICAgICAgICBzZWFyY2hGb3JTY2hlbWEobi5nZXRGaXJzdENoaWxkKCksIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogSXQgbG9hZHMgeHNkIHNjaGVtYSBhbmQgdGhlbiBjaGVjayB0aGUgdmVyc2lvbiAxLjAgYW5kIGxvb2tpbmcgZm9yIHhzZDpzY2hlbWEgZWxlbWVudCBmb3IgbmV4dCBwcm9jZXNzLgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZSB4c2Qgc2NoZW1hCi0gICovCi0gIHByaXZhdGUgdm9pZCBsb2FkU2NoZW1hKE5vZGUgaW1wb3J0Tm9kZSwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotICAgIEVsZW1lbnQgaW0gPSAoRWxlbWVudCkgaW1wb3J0Tm9kZTsKLSAgICBBdHRyIHNjaGVtYUxvY2F0aW9uID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgLy8gdHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICBTdHJpbmcgZGVjbCA9Ci0gICAgICAgICAgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotICAgICAgICBpZiAoIXZhbGlkVmVyc2lvbihkZWNsKSkKLSAgICAgICAgewotICAgICAgICAgIEF0dHIgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfTkFNRVNQQUNFKTsKLSAgICAgICAgICBlcnJvcnMuYWRkKChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiIpOwotICAgICAgICB9Ci0gICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc1NjaGVtYShzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICBYTUxVdGlscy5jcmVhdGVVUkxTdHJpbmcoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCksIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICAvLyBlbHNlIGlmIHRoZXJlIGlzIG9ubHkgdGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUsIHRoZSBpbXBvcnQgcmVsYXRlcyB0byBpbmxpbmUgc2NoZW1hCi0gICAgZWxzZSBpZiAoWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9OQU1FU1BBQ0UpICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmVhZHMgYW4gWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4KLSAgKiBAcGFyYW0gbG9jYXRpb24KLSAgKiBAcmV0dXJuIFN0cmluZwotICAqLwotICBwcml2YXRlIFN0cmluZyByZWFkWE1MRGVjbGFyYXRpb25TdGF0ZW1lbnQoU3RyaW5nIGxvY2F0aW9uLCBTdHJpbmcgYmFzZVVSSSkKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG5ldyBVUkwobG9jYXRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgLy8gbm90aGluZwotICAgICAgaW50IGkgPSBiYXNlVVJJLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgICBpbnQgaiA9IGJhc2VVUkkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgICBpZiAoaiA+IGkpCi0gICAgICAgIGkgPSBqOwotICAgICAgbG9jYXRpb24gPSBiYXNlVVJJLnN1YnN0cmluZygwLCBpICsgMSkgKyBsb2NhdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gbnVsbDsKLSAgICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSBzaG91bGQgdHJ5IHRvIGFjY2VzcyBsb2NhdGlvbiBhcyBmaWxlCi0gICAgICAgIH0KLQotICAgICAgICBpZiAodXJsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIodXJsLm9wZW5TdHJlYW0oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0obG9jYXRpb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBjaGFyQ29kZTsKLSAgICAgICAgYm9vbGVhbiBlbmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlYWRlci5yZWFkeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotCi0gICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICEoY2hhckNvZGUgPT0gJzwnKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gJzwnKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpIGNoYXJDb2RlKTsKLSAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucmVhZHkoKSAmJiAhZW5kKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpIGNoYXJDb2RlKTsKLQotICAgICAgICAgICAgICBlbmQgPSBjaGFyQ29kZSA9PSAnPic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlc3VsdCBkb2VzIG5vdCBnZXQgcHJvcG9nYXRlZCBiYWNrIQotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgICAgICJDYW5ub3QgcmVhZCB0aGUgWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4iOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0geG1sRGVjbCAtIHhtbCBkZWNsYXJhdGlvbgotICAgKiBAcmV0dXJuIGlmIHhtbCBkZWNsYXJhdGlvbiBjb250YWlucyB2ZXJzaW9uPSIxLjAiIGl0IHJldGlybnMgdHJ1ZS4gCi0gICovCi0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZFZlcnNpb24oU3RyaW5nIHhtbERlY2wpCi0gIHsKLSAgICAvL2Jvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGlmICh4bWxEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcigKLSAgICAgICAgICBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTLAotICAgICAgICAgIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTKTsKLSAgICAgIEVudW1lcmF0aW9uIHRva2VucyA9IHN0LnBhcnNlKHhtbERlY2wpOwotICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0b2tlbi5lcXVhbHNJZ25vcmVDYXNlKFZFUlNJT05fVE9LRU4pKQotICAgICAgICB7Ci0gICAgICAgICAgZm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgU3RyaW5nIHZlciA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgICAgcmVzdWx0ID0gVkVSU0lPTi5lcXVhbHModmVyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBJdCdzIGxva2luZyBmb3IgeHNkIGltcG9ydCBhbmQgbG9hZCBpdCBpZiBmaW5kLgotICAgKiBAcGFyYW0gc2NoZW1hIHhzZCBzY2hlbWEKLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NTY2hlbWEoTm9kZSBzY2hlbWEsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKHNjaGVtYSAhPSBudWxsKSAmJiAoIXByb2Nlc3NlZFNjaGVtYXMuY29udGFpbnMoc2NoZW1hKSkpCi0JewotCSAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0gICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgfQotCX0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEzM2MxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsLkJpbmRpbmdNYXRjaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAgKiBCUDIwMTIuCi0gICogRXhhbXBsZToKLSAgKiAKLSAgKiA8bWVzc2FnZSBuYW1lPSJnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QiPgotICAqIAk8cGFydCBuYW1lPSJyZWZyZXNoIiBlbGVtZW50PSJjZmc6cmVmcmVzaCIgLz4gCi0gICogPC9tZXNzYWdlPgotICAqIDxwb3J0VHlwZSBuYW1lPSJDb25maWd1cmF0b3JQb3J0VHlwZSI+Ci0gICogCTxvcGVyYXRpb24gbmFtZT0iZ2V0Q29uZmlndXJhdGlvbk9wdGlvbnMiPgotICAqIAkJPGlucHV0IG1lc3NhZ2U9InRuczpnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QiIC8+IAotICAqIAkJPG91dHB1dCAuLi4uLiAvPiAKLSAgKiAJCTxmYXVsdCAuLi4uLiAvPiAKLSAgKiAJPC9vcGVyYXRpb24+Ci0gICogPC9wb3J0VHlwZT4KLSAgKiA8YmluZGluZyBuYW1lPSJDb25maWd1cmF0b3JCaW5kaW5nIiB0eXBlPSJ0bnM6Q29uZmlndXJhdG9yUG9ydFR5cGUiPgotICAqIAk8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0iZG9jdW1lbnQiIC8+IAotICAqIAk8b3BlcmF0aW9uIG5hbWU9ImdldENvbmZpZ3VyYXRpb25PcHRpb25zIj4KLSAgKgkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuenp6LmNvbS96enoud3NkbC9nZXRDb25maWd1cmF0aW9uT3B0aW9ucyIgLz4gCi0gICogCQk8aW5wdXQ+Ci0gICogCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy56enouY29tL3p6ei53c2RsIiAvPiAKLSAgKiAJCTwvaW5wdXQ+Ci0gICogCQk8b3V0cHV0Pi4uLi4uPC9vdXRwdXQ+Ci0gICoJCTxmYXVsdD4uLi4uLi48L2ZhdWx0PgotICAqIAk8L29wZXJhdGlvbj4KLSAgKiA8L2JpbmRpbmc+Ci0gICogCi0gICogQWJvdmUsIHRoZSB0ZXN0IGZvciB0aGlzIGFzc2VydGlvbiBtaWdodCBiZSB0aGF0IHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgaW4gdGhlICJyZWZyZXNoIiAKLSAgKiBwYXJ0IG9mIHRoZSBnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QgbWVzc2FnZS4gCi0gICogCi0gICogQ29udGV4dCA6IGZvciA8YmluZGluZz4gIkNvbmZpZ3VyYXRvckJpbmRpbmciLCA8c29hcDpiaW5kaW5nPiBzdHlsZT1kb2N1bWVudDsgPHNvYXA6Ym9keT4gdXNlPWxpdGVyYWwKLSAgKiBmb3IgdGhlIDxpbnB1dD4gb2YgYmluZGluZyBvcGVyYXRpb24gImdldENvbmZpZ3VyYXRpb25PcHRpb25zIi4gCi0gICogKDxpbnB1dD4gaXMgYW4gZXhhbXBsZS4gQ291bGQgYmUgPG91dHB1dD4gb3IgPGZhdWx0PiBlcXVhbGx5KS4KLSAgKiBBY3Rpb246IGNoZWNrIHRoZSBwYXJ0KHMpIG9mIHRoZSBtZXNzYWdlIHNwZWNpZmllZCBpbiB0aGUgPGlucHV0PiBlbGVtZW50IChpbiBleGFtcGxlKSBvZiB0aGUgPHBvcnRUeXBlPiwKLSAgKiBuYW1lbHkgdG5zOmdldENvbmZpZ3VyYXRpb25PcHRpb25zUmVxdWVzdCwgdGhhdCB0aGUgZWxlbWVudCBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZQotICAqIDxwYXJ0IG5hbWU9InJlZnJlc2giIGVsZW1lbnQ9ImNmZzpyZWZyZXNoIiAvPiwgc28gdGhlIHRlc3QgcGFzc2VzLgotICAqIEFsbCBzdWNoIHBhcnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzZXJ0aW9uIGNhbmRpZGF0ZSBiaW5kaW5nKHMpIG11c3QgYmUgc2ltaWxhcmx5IGNoZWNrZWQgZm9yIHRoaXMgYXNzZXJ0aW9uCi0gICogdG8gcGFzcy4KLSAgKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBiaW5kaW5nIGZyb20gZW50cnkgY29udGV4dAotCi0gICAgLy8gT2xlZydzICYgR3JhaGFtJ3MgdmVyc2lvbjoKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIHRvIHVzZSBvcmlnaW5hbCB2ZXJzaW9uIHJlcXVpcmUgYSBiaW5kaW5nIGFycmF5Ci0gICAgLy9CaW5kaW5nW10gYmluZGluZyA9IHsoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKX07Ci0KLSAgICAvLyBnZXQgbGlzdCBvZiBjYW5kaWRhdGUgbWF0Y2hlcwotICAgIEJpbmRpbmdNYXRjaFtdIGJpbmRpbmdNYXRjaCA9Ci0gICAgICB0aGlzLnZhbGlkYXRvci5nZXRCaW5kaW5nTWF0Y2hlcygKLSAgICAgICAgYmluZGluZywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpOwotICAgIGlmIChiaW5kaW5nTWF0Y2gubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VJbnB1dCIsICJ1c2VFbGVtZW50IikKLSAgICAgICAgICB8fCAhdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VPdXRwdXQiLCAidXNlRWxlbWVudCIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oImRpYWdub3N0aWM6IGludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IhIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQsIGJpbmRpbmcpOwotICAgICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTNhMzc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbC5XU0RMVmFsaWRhdG9ySW1wbC5CaW5kaW5nTWF0Y2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIwMTMuCi0gKiBUaGUgYmluZGluZyAoaW4gc29hcGJpbmQ6Ym9keSBlbGVtZW50cykgb25seSByZWZlcnMgdG8gcGFydCBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSAidHlwZSIgYXR0cmlidXRlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xIDI3LjA2LjIwMDMKLSAqIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotICovCi1wdWJsaWMgY2xhc3MgQlAyMDEzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDEzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBiaW5kaW5nIGZyb20gZW50cnkgY29udGV4dAotCi0gICAgLy8gT2xlZydzICYgR3JhaGFtJ3MgdmVyc2lvbjoKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIHRvIHVzZSBvcmlnaW5hbCB2ZXJzaW9uIHJlcXVpcmUgYSBiaW5kaW5nIGFycmF5Ci0gICAgLy9CaW5kaW5nW10gYmluZGluZyA9IHsoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKX07Ci0KLSAgICAvLyBnZXQgbGlzdCBvZiBjYW5kaWRhdGUgbWF0Y2hlcwotICAgIEJpbmRpbmdNYXRjaFtdIGJpbmRpbmdNYXRjaCA9Ci0gICAgICB0aGlzLnZhbGlkYXRvci5nZXRCaW5kaW5nTWF0Y2hlcygKLSAgICAgICAgYmluZGluZywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpOwotICAgIGlmIChiaW5kaW5nTWF0Y2gubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VJbnB1dCIsICJ1c2VUeXBlIikKLSAgICAgICAgICB8fCAhdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VPdXRwdXQiLCAidXNlVHlwZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oImRpYWdub3N0aWM6IGludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IhIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQsIGJpbmRpbmcpOwotICAgICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzEwODg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIwMTQuCi0gKiBDb250ZXh0OgotICogRm9yIGEgY2FuZGlkYXRlIHdzZGw6b3BlcmF0aW9uLCBpZiByZWZlcnJlZCB0byBieSBhIGNhbmRpZGF0ZSBycGMtbGl0ZXJhbCB3c2RsOmJpbmRpbmcgZWxlbWVudAotICogSWYgdGhlIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCBpdCBvbWl0cyBhdCBtb3N0IDEgcGFydCBmcm9tIG91dHB1dCB3c2RsOm1lc3NhZ2UuCi0gKiovCi1wdWJsaWMgY2xhc3MgQlAyMDE0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gYmluZGluZwotICAgKiBAcmV0dXJuIEl0IHJldHVybnMgc3R5bGUgb2Ygc29hcCBiaW5kaW5nIG9mIGJpbmRpbmcuIElmIHN0eWxlIG9taXR0ZWQgcmV0dXJucyAiZG9jdW1lbnQiIHN0eWxlLiAgIAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0U09BUEJpbmRpbmdTdHlsZShCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBudWxsOwotICAgIExpc3QgbGlzdCA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmIChsaXN0LmdldChpKSBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgewotICAgICAgICBzdHlsZSA9ICgoU09BUEJpbmRpbmcpIGxpc3QuZ2V0KGkpKS5nZXRTdHlsZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0M7Ci0gICAgcmV0dXJuIHN0eWxlOwotICB9Ci0KLSAgLyoKLSAgICogQHBhcmFtIGxpc3QgLSBMaXN0IG9mIGV4dGVuY2liaWxpdHkgZWxlbWVudHMgZnJvbSBiaW5kaW5nIG91dHB1dAotICAgKiBAcmV0dXJuIGZpcnN0IHNvYXAgYm9keSBpbiBsaXN0LgotICAgKi8KLSAgcHJpdmF0ZSBTT0FQQm9keSBnZXRTT0FQQm9keShMaXN0IGxpc3QpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICBpZiAobGlzdC5nZXQoaSkgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgcmV0dXJuIChTT0FQQm9keSkgbGlzdC5nZXQoaSk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0gbGlzdCAtIExpc3Qgb2YgZXh0ZW5jaWJpbGl0eSBlbGVtZW50cyBvZiBiaW5kaW5nIG9wZXJhdGlvbgotICAgKiBAcmV0dXJuIEZpcnN0IHNvYXAgb3BlcmF0aW9uIGluIGxpc3QuCi0gICAqLwotICBwcml2YXRlIFNPQVBPcGVyYXRpb24gZ2V0U09BUE9wZXJhdGlvbihMaXN0IGxpc3QpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICBpZiAobGlzdC5nZXQoaSkgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgICByZXR1cm4gKFNPQVBPcGVyYXRpb24pIGxpc3QuZ2V0KGkpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyogICAgICAgICAgCi0gICAqIEBwYXJhbSBvcGVyIC0gb3BlcmF0aW9uCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gYmluZGluZwotICAgKiBAcmV0dXJuIGlmIHN0eWxlIG9mIHNvYXAgYmluZGluZyBvZiBiaW5kaW5nIGlzIHJwYyBhbmQgdXNlIG9mIHNvYXAgYm9keSBvZiBiaW5kaW5nIG91dHB1dCBvZiBiaW5kaW5nIG9wZXJhdGlvbiBpcyBsaXRlcmFsIHRoZW4gaXQgcmV0dXJucyB0cnVlLiAKLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUnBjTGl0ZXJhbChCaW5kaW5nT3BlcmF0aW9uIG9wZXIsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIExpc3QgbGlzdCA9IG9wZXIuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgU09BUE9wZXJhdGlvbiBzb3AgPSBnZXRTT0FQT3BlcmF0aW9uKGxpc3QpOwotICAgIGlmIChzb3AgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKHNvcC5nZXRTdHlsZSgpID09IG51bGwKLSAgICAgICAgPyBnZXRTT0FQQmluZGluZ1N0eWxlKGJpbmRpbmcpCi0gICAgICAgIDogc29wLmdldFN0eWxlKCkpOwotICAgIGlmICghc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGxpc3QgPSBvcGVyLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBTT0FQQm9keSBib2R5ID0gZ2V0U09BUEJvZHkobGlzdCk7Ci0gICAgaWYgKGJvZHkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgdXNlID0gYm9keS5nZXRVc2UoKTsKLSAgICBpZiAodXNlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdXNlLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCk7Ci0gIH0KLQotICAvKiBJdCBjaGVja3Mgb3BlcmF0aW9uIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFydCBpbiBwYXJhbWV0ZXIgb3JkZXIgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCk7Ci0gICAgaWYgKG9iai5nZXRQYXJhbWV0ZXJPcmRlcmluZygpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCB8fCBvYmogPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChvYmouZ2V0T3V0cHV0KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChvYmouZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3IgZWFjaCBiaW5kaW5nCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBMaXN0IGxpc3QgPSBiaW5kaW5nc1tpXS5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgLy8gRm9yIGVhY2ggYmluZGluZyBvcGVyYXRpb24KLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGlzdC5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyID0gKEJpbmRpbmdPcGVyYXRpb24pIGxpc3QuZ2V0KGopOwotCi0gICAgICAgIC8vIElmIHRoZSBpbnB1dCBvcGVyYXRpb24gbmFtZSBhbmQgYmluZGluZyBvcGVyYXRpbm8gbmFtZSBhcmUgbm90IG51bGwKLSAgICAgICAgaWYgKG9iai5nZXROYW1lKCkgIT0gbnVsbCAmJiBvcGVyLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSWYgdGhlIG9wZXJhdGlvbiBuYW1lcyBhcmUgZXF1YWwKLSAgICAgICAgICBpZiAob2JqLmdldE5hbWUoKS5lcXVhbHMob3Blci5nZXROYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBvcGVyYXRpb24gaXMgUlBDIGxpdGVyYWwKLSAgICAgICAgICAgIGlmIChjaGVja1JwY0xpdGVyYWwob3BlciwgYmluZGluZ3NbaV0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgaW4gdGhlIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZQkJCQkKLSAgICAgICAgICAgICAgTGlzdCBwYXJ0cyA9IG9iai5nZXRQYXJhbWV0ZXJPcmRlcmluZygpOwotCi0gICAgICAgICAgICAgIE91dHB1dCBvdXRwdXQgPSBudWxsOwotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotICAgICAgICAgICAgICBNYXAgbWVzc2FnZVBhcnRzID0gbnVsbDsKLQotICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgZm9yIHRoZSBvdXRwdXQgbWVzc2FnZQotICAgICAgICAgICAgICBpZiAoKG91dHB1dCA9IG9iai5nZXRPdXRwdXQoKSkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgobWVzc2FnZSA9IG91dHB1dC5nZXRNZXNzYWdlKCkpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbWVzc2FnZVBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXJ0cyBpbiB0aGUgcGFyYW1ldGVyT3JkZXIgYXR0cmlidXRlIAotICAgICAgICAgICAgICAvLyBhbmQgdGhlcmUgYXJlIG91dHB1dCBtZXNzYWdlIHBhcnRzLCB0aGVuIHByb2Nlc3MgYXNzZXJ0aW9uCi0gICAgICAgICAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmIG1lc3NhZ2VQYXJ0cyAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHBhcnRDb3VudCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgcGFydE5hbWU7Ci0gICAgICAgICAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gR2V0IHBhcnQgbmFtZSBmcm9tIHBhcmFtZXRlck9yZGVyIGxpc3QKLSAgICAgICAgICAgICAgICAgIHBhcnROYW1lID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgICAgICAgICAvLyBDaGVjayBlYWNoIG91dHB1dCBtZXNzYWdlIHBhcnQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2gKLSAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlUGFydHMuY29udGFpbnNLZXkocGFydE5hbWUpKQotICAgICAgICAgICAgICAgICAgICBwYXJ0Q291bnQrKzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoKHBhcnRDb3VudCA9PSBtZXNzYWdlUGFydHMuc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgfHwgKHBhcnRDb3VudCA9PSBtZXNzYWdlUGFydHMuc2l6ZSgpIC0gMSkpCi0gICAgICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChvYmouZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgIGN0eC5jYW5jZWxPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChwYXJ0cyA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChPcGVyYXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgZXJyb3JzLnRvU3RyaW5nKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotICAgIH0KLSAgICAvL2Vsc2UKLSAgICAvLyAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGY0NTkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjAxNy4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJzdHlsZSIgYXR0cmlidXRlIG9mIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBjb250YWluZWQgc29hcDpiaW5kaW5nIGhhcyB0aGUgc2FtZSB2YWx1ZSBvZiAiZG9jdW1lbnQiIG9yICJycGMiLCBmb3IgYWxsIG9wZXJhdGlvbnMgb2YgdGhlIHdzZGw6YmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMDE3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vU3RyaW5nIGZpcnN0U3R5bGUgPSBudWxsOyAvLyBHVDogaXMgdGhpcyBuZWVkZWQ/PwotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTGlzdCk7Ci0gICAgfQotICAgIFNPQVBCaW5kaW5nIHNvYXBCID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcEJpbmRpbmcoYmluZGluZyk7Ci0gICAgaWYgKHNvYXBCID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICAgIH0KLSAgICBTdHJpbmcgc3R5bGVCID0KLSAgICAgIChzb2FwQi5nZXRTdHlsZSgpID09IG51bGwKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogc29hcEIuZ2V0U3R5bGUoKSk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIG9wZXJhdGlvbnMKLSAgICBIYXNoTWFwIHNvYXBPcGVyYXRpb25MaXN0ID0gdmFsaWRhdG9yLmdldFNvYXBPcGVyYXRpb25zKGJpbmRpbmcpOwotCi0gICAgaWYgKHNvYXBPcGVyYXRpb25MaXN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgdGhhdCB0aGV5IGFsbCBoYXZlIHRoZSBzYW1lIHN0eWxlIGVsZW1lbnQgdmFsdWUKLSAgICAgIFN0cmluZyBzdHlsZSA9IG51bGw7Ci0gICAgICBTdHJpbmcgY2hlY2tTdHlsZTsKLSAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbjsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc29hcE9wZXJhdGlvbkxpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBjaGVja1N0eWxlID0gc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgICAgICBpZiAoY2hlY2tTdHlsZSA9PSBudWxsKQotICAgICAgICAgIGNoZWNrU3R5bGUgPSBzdHlsZUI7Ci0gICAgICAgIGlmIChjaGVja1N0eWxlICE9IG51bGwKLSAgICAgICAgICAmJiAhY2hlY2tTdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQykKLSAgICAgICAgICAmJiAhY2hlY2tTdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQykpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoCi0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiT3BlcmF0aW9uIE5hbWU6ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb25MaXN0LmdldChzb2FwT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBPcGVyYXRpb246ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb24udG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgICAgICBzb2FwT3BlcmF0aW9uKSk7Ci0gICAgICAgICAgLy8gUkVNT1ZFOiBOZWVkIHRvIHByb2Nlc3MgYWxsIG9wZXJhdGlvbnMKLSAgICAgICAgICAvL2JyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzdHlsZSA9IGNoZWNrU3R5bGU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIXN0eWxlLmVxdWFscyhjaGVja1N0eWxlKSB8fCAhc3R5bGUuZXF1YWxzKHN0eWxlQikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoCi0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiT3BlcmF0aW9uIE5hbWU6ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb25MaXN0LmdldChzb2FwT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBPcGVyYXRpb246ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb24udG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgICAgICBzb2FwT3BlcmF0aW9uKSk7Ci0gICAgICAgICAgLy8gUkVNT1ZFOiBOZWVkIHRvIHByb2Nlc3MgYWxsIG9wZXJhdGlvbnMKLSAgICAgICAgICAvL2JyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzdHlsZSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBubyBzdHlsZSBhdHRyaWJ1dGUgd2FzIGZvdW5kIGluIHRoZSBTT0FQIG9wZXJhdGlvbihzKSBvZiB0aGUgYmluZGluZy4KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxMaXN0KTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0NjdjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDIwMTguIAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIFdlYiBzZXJ2aWNlIGRlZmluaXRpb248L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6dHlwZXMgZWxlbWVudCBvY2N1cnMgZWl0aGVyIGFzIHRoZSBmaXJzdCBjaGlsZCBpbiB0aGUgV1NETCBuYW1lc3BhY2Ugb2YgdGhlIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudCBpZiBubyB3c2RsOmRvY3VtZW50YXRpb24gb3Igd3NkbDppbXBvcnQgZWxlbWVudCBpcyBwcmVzZW50OyBvciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHdzZGw6ZG9jdW1lbnRhdGlvbiBlbGVtZW50KHMpIGlmIHRoZXkgYXJlIHByZXNlbnQgYnV0IHdzZGw6aW1wb3J0KHMpIGFyZSBub3QsIG9yIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBib3RoIHRoZSB3c2RsOmRvY3VtZW50YXRpb24gYW5kIHdzZGw6aW1wb3J0IGVsZW1lbihzKSBpZiBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qCi0gICAqIEBwYXJhbSBlbCAtIHhtbCBlbGVtZW50Ci0gICAqIEByZXR1cm4gaWYgZWxlbWVudCBpcyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgcmV0dXJucyB0cnVlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRWxlbWVudCBlbCkKLSAgewotICAgIGJvb2xlYW4gaXNFeCA9IHRydWU7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9CSU5ESU5HKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RFRklOSVRJT05TKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RPQ1VNRU5UQVRJT04pOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRkFVTFQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU1QT1JUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0lOUFVUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX01FU1NBR0UpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfT1BFUkFUSU9OKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX09VVFBVVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9QQVJUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1BPUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfUE9SVFRZUEUpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfU0VSVklDRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9UWVBFUyk7Ci0KLSAgICByZXR1cm4gaXNFeDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50IGFzIGFuIFhNTCBmaWxlCi0gICAgICBEb2N1bWVudCBkb2MgPQotICAgICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBudWxsKTsKLQotICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOyAvLyBnZXQgZGVmaW5pdGlvbgotCi0gICAgICBFbGVtZW50IHR5cGVzID0gWE1MVXRpbHMuZmluZENoaWxkRWxlbWVudCgoRWxlbWVudCkgcm9vdCwgV1NETF9UWVBFUyk7Ci0KLSAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsID0gWE1MVXRpbHMuZmluZFByZXZpb3VzU2libGluZyh0eXBlcyk7Ci0gICAgICAgIHdoaWxlIChlbCAhPSBudWxsKQotCQl7Ci0gICAgICAgICAgaWYgKCFpc0V4dGVuc2liaWxpdHlFbGVtZW50KGVsKSAmJgotCQkJICAgKCghWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0lNUE9SVCkpICYmCi0JCQkgICAgKCFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRE9DVU1FTlRBVElPTikpKSkKLQkJICB7Ci0JCSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQkJCVN0cmluZyBtZXNzYWdlID0gIlRoZSAiICsgZWwuZ2V0TG9jYWxOYW1lKCkgKyAiIGVsZW1lbnQgbXVzdCBub3QgcHJlY2VkZSB0aGUgdHlwZXMgZWxlbWVudC4iOwotCQkgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwobWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgCQkgICAgYnJlYWs7Ci0JCSAgfQotICAgICAgICAgIGVsID0gWE1MVXRpbHMuZmluZFByZXZpb3VzU2libGluZyhlbCk7Ci0JCX0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBkb2N1bWVudCBhdCAiCi0gICAgICAgICAgICArIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCkKLSAgICAgICAgICAgICsgIi5cblxuIgotICAgICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKHQpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2NzBiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMjAxOS4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIGNvbnRhaW5lZCBzb2FwOmJpbmRpbmcgZWxlbWVudCBoYXMgYSAic3R5bGUiIGF0dHJpYnV0ZSBlcXVhbCB0byAiZG9jdW1lbnQiIGFuZCBzb2FwOm9wZXJhdGlvbnMgaGF2ZSAidXNlIiBhdHRyaWJ1dGUgZXF1YWwgdG8gImxpdGVyYWwiOjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgIm5hbWVzcGFjZSIgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaW4gYW55IGNvbnRhaW5lZCBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOjpoZWFkZXJmYXVsdCwgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudHMgPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqIEB2ZXJzaW9uIDEuMC4xIDI3LjA2LjIwMDMKLSAqIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotICovCi1wdWJsaWMgY2xhc3MgQlAyMDE5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDE5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiBkb2NMaXRGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBlcnJhbnRFbGVtZW50cyA9IG5ldyBTdHJpbmcoIiIpOwotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIGJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgaWYgKHNvYXBCaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHN0eWxlID0KLSAgICAgICAgKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgICA6IHNvYXBCaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgICBpZiAoc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MpKQotICAgICAgewotICAgICAgICBWZWN0b3Igc29hcEVsZW1lbnRzID0gVXRpbHMuYXJyYXlUb1ZlY3Rvcih0aGlzLnZhbGlkYXRvci5nZXRTb2FwQm9kaWVzKGJpbmRpbmcpKTsKLSAgICAgICAgc29hcEVsZW1lbnRzLmFkZEFsbChVdGlscy5hcnJheVRvVmVjdG9yKHRoaXMudmFsaWRhdG9yLmdldFNvYXBGYXVsdHMoYmluZGluZykpKTsKLSAgICAgICAgc29hcEVsZW1lbnRzLmFkZEFsbChVdGlscy5hcnJheVRvVmVjdG9yKHRoaXMudmFsaWRhdG9yLmdldFNvYXBIZWFkZXJzKGJpbmRpbmcpKSk7Ci0gICAgICAgIHNvYXBFbGVtZW50cy5hZGRBbGwoCi0gICAgICAgICAgVXRpbHMuYXJyYXlUb1ZlY3Rvcih0aGlzLnZhbGlkYXRvci5nZXRTb2FwSGVhZGVyRmF1bHRzKGJpbmRpbmcpKSk7Ci0KLSAgICAgICAgSXRlcmF0b3IgaSA9IHNvYXBFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBzb2FwRWxlbWVudCA9Ci0gICAgICAgICAgICAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIChpLm5leHQoKSk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzTGl0ZXJhbChzb2FwRWxlbWVudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGRvY0xpdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLm5hbWVzcGFjZUZvdW5kSW5Tb2FwTGl0ZXJhbChzb2FwRWxlbWVudCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnJhbnRFbGVtZW50cyArPSAiXG4tLS0gIiArIChzb2FwRWxlbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0gLy8gY29udGludWUgd2l0aCBjbGVuY2hlZCB0ZWV0aAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFkb2NMaXRGb3VuZCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gSWYgYSBuYW1lc3BhY2Ugd2FzIG5vdCBmb3VuZCB0aGVuIHRlc3QgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgaWYgKGVycmFudEVsZW1lbnRzLmxlbmd0aCgpICE9IDApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIkZhaWxpbmcgZWxlbWVudHM6IiArIGVycmFudEVsZW1lbnRzLAotICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGJmOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlVSSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlVSSS5NYWxmb3JtZWRVUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotKiBCUDIwMjAuCi0qICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIHN0eWxlIGF0dHJpYnV0ZSBvZiB0aGUgY29udGFpbmVkIHNvYXBiaW5kOmJpbmRpbmcgaXMgInJwYyIgCi0qICAgICAgIGFuZCB0aGUgdXNlIGF0dHJpYnV0ZSBpcyAibGl0ZXJhbCIuPC9jb250ZXh0PgotKiAgICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIG9uIGFsbCBzb2FwYmluZDpib2R5IGVsZW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhlIAotKiBuYW1lc3BhY2UgYXR0cmlidXRlIGlzIGFuIGFic29sdXRlIFVSSS4gPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAyMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAyMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICBib29sZWFuIHJwY0xpdEZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gVHJ5IHRvIGdldCB0aGUgU09BUCBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBXU0RMVmFsaWRhdG9ySW1wbC5nZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBzdHlsZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBycGMgLSB0aGUgc3ViamVjdCBvZiB0aGUgYXNzZXJ0aW9uCi0gICAgU3RyaW5nIHN0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLSAgICBpZiAoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHN0eWxlID0KLSAgICAgICAgKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbAotICAgICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICAgIDogc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSk7Ci0KLSAgICBpZiAoKHNvYXBCaW5kaW5nICE9IG51bGwpCi0gICAgICAmJiAoc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgU09BUCBib2R5IGVsZW1lbnRzCi0gICAgICBTT0FQQm9keVtdIHNvYXBCb2RpZXMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwQm9kaWVzKGJpbmRpbmcpOwotCi0gICAgICAvLyBDaGVjayBmb3IgU29hcCBvcGVyYXRpb24gbmFtZXNwYWNlCi0gICAgICBib29sZWFuIGFzc2VydGlvbkZhaWx1cmUgPSBmYWxzZTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBudWxsOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9kaWVzLmxlbmd0aCAmJiAhKGFzc2VydGlvbkZhaWx1cmUpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gc29hcEJvZGllc1tpXTsKLSAgICAgICAgLy8gQWRkZWQgY2hlY2sgZm9yIG51bGwgdXNlIHZhbHVlLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBsaXRlcmFsCi0gICAgICAgIGlmIChzb2FwQm9keS5nZXRVc2UoKSA9PSBudWxsCi0gICAgICAgICAgfHwgc29hcEJvZHkuZ2V0VXNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgICAgewotICAgICAgICAgIHJwY0xpdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuYW1lc3BhY2UsIHRoZW4gZmxhZyBhcyBhIGZhaWx1cmUKLSAgICAgICAgICBpZiAoKG5hbWVzcGFjZVVSSSA9IHNvYXBCb2R5LmdldE5hbWVzcGFjZVVSSSgpKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydGlvbkZhaWx1cmUgPSB0cnVlOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgIi0tLSBTT0FQIEJPRFk6XG4iCi0gICAgICAgICAgICAgICAgICArIHNvYXBCb2R5LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICsgIlxuLS0tIEJJTkRJTkcgUU5BTUU6XG4iCi0gICAgICAgICAgICAgICAgICArIGJpbmRpbmcuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIEVsc2UsIHZlcmlmeSB0aGF0IHRoZSBuYW1lc3BhY2UgaXMgYW4gYWJzb2x1dGUgVVJJCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL1VSTCB1cmwgPSBuZXcgVVJMKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgICAgICAgIFVSSSB1cmkgPSBuZXcgVVJJKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgICAgICAgIGlmICh1cmkuZ2V0U2NoZW1lKCkgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIG5vIHNjaGVtZSBpbXBsaWVzIG5vdCBhbiBhYnNvbHV0ZSBVUkkKLSAgICAgICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICItLS0gU09BUCBCT0RZOlxuIgotICAgICAgICAgICAgICAgICAgICAgICsgc29hcEJvZHkudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICAgICAgICsgIlxuLS0tIEJJTkRJTkcgUU5BTUU6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgKyBiaW5kaW5nLmdldFFOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUklFeGNlcHRpb24gbXVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICItLS0gU09BUCBCT0RZOlxuIgotICAgICAgICAgICAgICAgICAgICArIHNvYXBCb2R5LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiXG4tLS0gQklORElORyBRTkFNRTpcbiIKLSAgICAgICAgICAgICAgICAgICAgKyBiaW5kaW5nLmdldFFOYW1lKCksCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXJwY0xpdEZvdW5kKQotICAgICAgewotICAgICAgICAvLyBzdHlsZSBpcyBycGMgYnV0IG5vIGRvY3VtZW50IHVzZSBlbGVtZW50cwotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFhc3NlcnRpb25GYWlsdXJlKQotICAgICAgeyAvLyBJZiBubyBhc3NlcnRpb24gZmFpbHVyZSwgdGhlbiBzZXQgcmVzdWx0IHRvIHBhc3NlZAotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBzdHlsZSBpcyBub3QgcnBjCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDUwODZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0KLS8qKgotKiAgQlAyMDIxLgotKiAgICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotKiAgICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmlucHV0IGVsZW1lbnQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnQgb2YgZWFjaCBvcGVyYXRpb24gdXNlcyB0aGUgYXR0cmlidXRlIG5hbWUgInBhcnQiIHdpdGggYSBTY2hlbWEgdHlwZSBvZiAiTk1UT0tFTiIgYW5kIGRvZXMgbm90IHVzZSAicGFydHMiLCBmb3IgYm90aCBzb2FwYmluZDpoZWFkZXIgZWxlbWVudHMgYW5kIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnRzLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKgotKiBAdmVyc2lvbiAxLjAuMSAyNy4wNi4yMDAzCi0qIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotKiovCi1wdWJsaWMgY2xhc3MgQlAyMDIxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDIxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IFNPQVAgaGVhZGVycyBmb3IgdGhpcyBiaW5kaW5nCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEhlYWRlcnMoYmluZGluZyk7Ci0KLSAgICBpZiAoc29hcEhlYWRlcnMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENoZWNrIGVhY2ggaGVhZGVyIHRvIHNlZSBpZiBpdCBoYXMgcGFydCBlbGVtZW50IHdpdGggTk1UT0tFTiB0eXBlCi0gICAgICBmb3IgKGludCBoZWFkZXIgPSAwOwotICAgICAgICBoZWFkZXIgPCBzb2FwSGVhZGVycy5sZW5ndGgKLSAgICAgICAgICAmJiByZXN1bHQuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKTsKLSAgICAgICAgaGVhZGVyKyspCi0gICAgICB7Ci0gICAgICAgIGlmICgoc29hcEhlYWRlcnNbaGVhZGVyXS5nZXRQYXJ0KCkgPT0gbnVsbCkKLSAgICAgICAgICB8fCAoIVhNTFV0aWxzLmlzTm10b2tlbihzb2FwSGVhZGVyc1toZWFkZXJdLmdldFBhcnQoKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHNvYXBIZWFkZXJzW2hlYWRlcl0udG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICAvLyBFbHNlLCBjaGVjayB0aGUgaGVhZGVyZmF1bHQgaWYgdGhlcmUgaXMgb25lCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIExpc3Qgc29hcEhlYWRlckZhdWx0TGlzdCA9Ci0gICAgICAgICAgICBzb2FwSGVhZGVyc1toZWFkZXJdLmdldFNPQVBIZWFkZXJGYXVsdHMoKTsKLSAgICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNvYXBIZWFkZXJGYXVsdExpc3QuaXRlcmF0b3IoKTsKLQotICAgICAgICAgIC8vIENoZWNrIGVhY2ggaGVhZGVyIGZhdWx0IHRvIHNlZSBpZiBpdCBoYXMgcGFydCBlbGVtZW50IHdpdGggTk1UT0tFTiB0eXBlCi0gICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKQotICAgICAgICAgICAgJiYgcmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9Ci0gICAgICAgICAgICAgIChTT0FQSGVhZGVyRmF1bHQpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgIGlmICgoc29hcEhlYWRlckZhdWx0LmdldFBhcnQoKSA9PSBudWxsKQotICAgICAgICAgICAgICB8fCAoIVhNTFV0aWxzLmlzTm10b2tlbihzb2FwSGVhZGVyRmF1bHQuZ2V0UGFydCgpKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHNvYXBIZWFkZXJGYXVsdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE0NWQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gICogQlAyMDIyLgotICAqICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgKiAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPnRoZSBuYW1lIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgb24gdGhlIHNvYXBiaW5kOmZhdWx0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSoqLwotcHVibGljIGNsYXNzIEJQMjAyMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAyMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IGxpc3Qgb2YgU09BUCBmYXVsdHMgZm9yIHRoZSBiaW5kaW5nCi0gICAgU09BUEZhdWx0W10gc29hcEZhdWx0cyA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBGYXVsdHMoYmluZGluZyk7Ci0KLSAgICBpZiAoc29hcEZhdWx0cyA9PSBudWxsIHx8IHNvYXBGYXVsdHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgYWxsIHNvYXA6ZmF1bHRzLiAKLSAgICAgIC8vIE1VU1QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBGYXVsdHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBzb2FwRmF1bHRzW2ldOwotICAgICAgICBpZiAoc29hcEZhdWx0LmdldE5hbWUoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAic29hcGJpbmQ6ZmF1bHQgZWxlbWVudCA6ICIgKyBzb2FwRmF1bHQudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAzNjBhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjAyMy4KLSAqICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCB3aXRoIHRoZSAidXNlIiBhdHRyaWJ1dGUgcHJlc2VudCBvbiB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudDwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGlzICJsaXRlcmFsIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMDIzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDIzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBTT0FQIGZhdWx0cyBmb3IgdGhlIGJpbmRpbmcKLSAgICBTT0FQRmF1bHRbXSBzb2FwRmF1bHRzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEZhdWx0cyhiaW5kaW5nKTsKLQotICAgIGlmIChzb2FwRmF1bHRzID09IG51bGwgfHwgc29hcEZhdWx0cy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBhbGwgc29hcDpmYXVsdHMuIAotICAgICAgLy8gTVVTVCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUsIGFuZCBpZiBhIHVzZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBNVVNUIGJlIHZhbHVlICJsaXRlcmFsIgotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwRmF1bHRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBTT0FQRmF1bHQgc29hcEZhdWx0ID0gc29hcEZhdWx0c1tpXTsKLSAgICAgICAgaWYgKChzb2FwRmF1bHQuZ2V0VXNlKCkgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoIXNvYXBGYXVsdAotICAgICAgICAgICAgLmdldFVzZSgpCi0gICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChzb2FwRmF1bHQudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkOTZkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDMyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIwMzIuCi0gKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPnRoZSBuYW1lIGF0dHJpYnV0ZSB0aGF0IGlzIHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBtYXRjaGVzIHRoZSB2YWx1ZSBzcGVjaWZpZWQgb24gdGhlIHBhcmVudCBlbGVtZW50IHdzZGw6ZmF1bHQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjAzMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAzMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IGxpc3Qgb2YgQmluZGluZyBmYXVsdHMgZm9yIHRoZSBiaW5kaW5nCi0gICAgQmluZGluZ0ZhdWx0W10gYmluZGluZ0ZhdWx0cyA9IHRoaXMudmFsaWRhdG9yLmdldEFsbEJpbmRpbmdGYXVsdHMoYmluZGluZyk7Ci0KLSAgICBpZiAoYmluZGluZ0ZhdWx0cyA9PSBudWxsIHx8IGJpbmRpbmdGYXVsdHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGZvciBlYWNoIGJpbmRpbmcgZmF1bHQsIGNvbXBhcmUgdGhlIGNoaWxkIHNvYXA6ZmF1bHQgbmFtZSB3aXRoIHRoZSBiaW5kaW5nIGZhdWx0IG5hbWUgCi0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ0ZhdWx0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IGJpbmRpbmdGYXVsdHNbaV07Ci0gICAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwRmF1bHQoYmluZGluZ0ZhdWx0KTsKLSAgICAgICAgaWYgKHNvYXBGYXVsdCA9PSBudWxsCi0gICAgICAgICAgfHwgc29hcEZhdWx0LmdldE5hbWUoKSA9PSBudWxsCi0gICAgICAgICAgfHwgYmluZGluZ0ZhdWx0LmdldE5hbWUoKSA9PSBudWxsCi0gICAgICAgICAgfHwgIWJpbmRpbmdGYXVsdC5nZXROYW1lKCkuZXF1YWxzKHNvYXBGYXVsdC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgIHNvYXBGYXVsdCA9PSBudWxsID8gbnVsbCA6IHNvYXBGYXVsdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGU2MWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQlAyMDM0Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGRlc2NyaXB0aW9uIHdpdGhpbiBhIFdTREwgZG9jdW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGNhbmRpZGF0ZSBkZXNjcmlwdGlvbiBkb2VzIG5vdCBjb250YWluIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24geG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+IAotICovCi1wdWJsaWMgY2xhc3MgQlAyMDM0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDM0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldHRpbmcgd3NkbDpkZWZpbml0aW9uIGVsZW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIFR5cGVzIHR5cGVzOwotICAgIC8vIEdldHRpbmcgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiB4bWxuczp4bWwKLSAgICBTdHJpbmcgeG1sTnMgPSAoU3RyaW5nKSBkZWYuZ2V0TmFtZXNwYWNlcygpLmdldCgieG1sIik7Ci0gICAgLy8gSWYgaXQgZXhpc3RzIGFuZCBlcXVhbHMgdG8gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAgICBpZiAoeG1sTnMgIT0gbnVsbCAmJiB4bWxOcy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUwpKQotICAgIHsKLSAgICAgIC8vIHNldHRpbmcgYXNzZXJ0aW9uIHJlc3VsdCB0byB3YXJuaW5nCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgfQotICAgIC8vIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiB4bWxuczp4bWwgaW4gdGhlIHdzZGw6ZGVmaW5pdGlvbgotICAgIC8vIGVsZW1lbnQsIGNoZWNraW5nIHdoZXRoZXIgdGhlIGRlZmluaXRpb24gaGFzIHdzZGw6dHlwZSBlbGVtZW50Ci0gICAgZWxzZSBpZiAoKHR5cGVzID0gZGVmLmdldFR5cGVzKCkpICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgbGlzdCBvZiB3c2RsOnNjaGVtYVMKLSAgICAgIExpc3QgZXh0RWxlbXMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIC8vIEdldHRpbmcgd3NkbDpzY2hlbWEgZWxlbWVudAotICAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hID0KLSAgICAgICAgICAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIEdldHRpbmcgYSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHhtbG5zOnhtbAotICAgICAgICBTdHJpbmcgYXR0clZhbHVlID0gc2NoZW1hLmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hNTE5TLCAieG1sIik7Ci0gICAgICAgIC8vIElmIGl0IGVxdWFscyB0byAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKLSAgICAgICAgaWYgKFdTSUNvbnN0YW50cy5OU19VUklfWE1MLmVxdWFscyhhdHRyVmFsdWUpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gc2V0dGluZyBhc3NlcnRpb24gcmVzdWx0IHRvIHdhcm5pbmcKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKCJUaGUgbmFtZXNwYWNlICIKLSAgICAgICAgICAgICsgImRlY2xhcmF0aW9uIG5lc3RlZCBpbiB3c2RsOnNjaGVtYSBlbGVtZW50LiIsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwOTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwOTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiNjUzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDk4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotCi0KLS8qKgotICogQlAyMDk4LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6aW1wb3J0IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJsb2NhdGlvbiIgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBmb3IgdGhlIHdzZGw6aW1wb3J0IGVsZW1lbnQsIGFuZCBoYXMgYSBub24tZW1wdHkgdmFsdWUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjA5OCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjA5OChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBJbXBvcnQgaW0gPSAoSW1wb3J0KSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIC8vIHN1cHBvc2UgdGhhdCBpZiBsb2NhdGlvbiBpcyBpbnZhbGlkLCB0aGUgZGVmaW5pdGlvbiBlcXVhbHMgdG8gbnVsbAotICAgIGlmIChpbS5nZXRMb2NhdGlvblVSSSgpID09IG51bGwgfHwgaW0uZ2V0TG9jYXRpb25VUkkoKSA9PSAiIikKLSAgICAgIGVycm9ycy5hZGQoaW0uZ2V0TmFtZXNwYWNlVVJJKCksIGltLmdldExvY2F0aW9uVVJJKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1YTc3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEwMS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbiwgaWYgaXQgY29udGFpbnMgd3NkbDppbXBvcnQgc3RhdGVtZW50czwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkVhY2ggd3NkbDppbXBvcnQgc3RhdGVtZW50IGlzIG9ubHkgdXNlZCB0byBpbXBvcnQgYW5vdGhlciBXU0RMIGRlc2NyaXB0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTAxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIGltcG9ydCBjb250YWlucyByZWZlcmVuY2UgdG8gbm9uIFdTREwgZGVzY3JpcHRpb24uIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5JbXBvcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgaW0sIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgLy8gYnkgdGhlIHdheSA6IFdTREw0SiB0aHJvd3MgRXhjZXB0aW9uIGlmIGltcG9ydGVkIFdTREwgaXMgbm90IHJlc29sdmVkCi0gICAgLy8gYnV0IGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IGltLmdldERlZmluaXRpb24oKSB3aWxsIGJlIGVxdWFsIHRvIG51bGwKLSAgICBpZiAoaW0uZ2V0RGVmaW5pdGlvbigpID09IG51bGwpCi0gICAgICBlcnJvcnMuYWRkKAotICAgICAgICBpbS5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICsgIjoiCi0gICAgICAgICAgKyBpbS5nZXRMb2NhdGlvblVSSSgpCi0gICAgICAgICAgKyAiXG5JbXBvcnQgZWxlbWVudCBkb2VzIG5vdCByZWZlcmVuY2UgYSBXU0RMIGRlZmluaXRpb24uIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKAotICAgICAgICBpbS5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICsgIjoiCi0gICAgICAgICAgKyBpbS5nZXRMb2NhdGlvblVSSSgpCi0gICAgICAgICAgKyAiXG5JbXBvcnQgZWxlbWVudCBkb2VzIG5vdCByZWZlcmVuY2UgYSBXU0RMIGRlZmluaXRpb24uIik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghaW1wb3J0Rm91bmQpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NTliNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwMi4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQsIHdpdGggWE1MIHNjaGVtYSBpbXBvcnQgZWxlbWVudHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBYTUwgc2NoZW1hIGltcG9ydCBzdGF0ZW1lbnQgKHhzZDppbXBvcnQpIGlzIG9ubHkgdXNlZCB0byBkaXJlY3RseSByZWZlcmVuY2UgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uLCB3aGljaCBoYXMgInNjaGVtYSIgZnJvbSBYTUwgbmFtZXNwYWNlICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgYXMgcm9vdCBlbGVtZW50LiAgSXQgZG9lcyBub3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGRvY3VtZW50IGVtYmVkZGluZyB0aGUgWE1MIHNjaGVtYSBkZWZpbml0aW9uIChlLmcuIFdTREwpLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIHBhcnNlIFdTREwgYXMgWE1MCi0gICAgdHJ5Ci0gICAgewotICAgICAgVHlwZXMgdCA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAgIExpc3QgZXh0cyA9IHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoKGRlZmluaXRpb24gPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9uKHQpKQotICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0eXBlcyBkZWZpbml0aW9uIGluIGFueSBXU0RMIGRvY3VtZW50LiIpOwotICAgICAgfQotCi0gICAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdCA9IGV4dHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgICAmJiBlbC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgdGVzdE5vZGUoKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsKS5nZXRFbGVtZW50KCksCi0gICAgICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0KLSAgICAgICAgICBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghaW1wb3J0Rm91bmQpCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFRocm93YWJsZSB0dCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIldTREwgZG9jdW1lbnQgY2FuIG5vdCBiZSBwcm9jZXNzZWQiLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIG5vZGUgaXMgeHNkIGltcG9ydCBhbmQgaXQgaXMgCi0gICAqIG9ubHkgdXNlZCB0byBkaXJlY3RseSByZWZlcmVuY2UgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uLCB3aGljaCBoYXMgInNjaGVtYSIgCi0gICAqIGZyb20gWE1MIG5hbWVzcGFjZSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGFzIHJvb3QgZWxlbWVudC4gIAotICAgKiBBbmQgaXQgZG9lcyBub3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGRvY3VtZW50IGVtYmVkZGluZyB0aGUgWE1MIHNjaGVtYSAKLSAgICogZGVmaW5pdGlvbiAoZS5nLiBXU0RMKS4KLSAgKiBAcGFyYW0gbiAtIFVua25vd24gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICovCi0gIHByaXZhdGUgdm9pZCB0ZXN0Tm9kZShOb2RlIG4sIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKG4gIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKG4pKSkKLQl7Ci0gICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4uZ2V0UGFyZW50Tm9kZSgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQobik7ICAgIAkKLQotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgICAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgc2NoZW1hTG9jYXRpb24gYW5kIHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlcwotICAgICAgICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9Ci0gICAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgICAgICAgICAgQXR0ciBuYW1lc3BhY2UgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSk7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlIG9mIGltcG9ydCBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyBhbGwgdGhlIGlubGluZSBzY2hlbWFzIG9mIHRoZSB3c2RsIGRlZmluaXRpb24KLSAgICAgICAgICAgICAgTWFwIHNjaGVtYXNNYXAgPSB2YWxpZGF0b3Iud3NkbERvY3VtZW50LmdldFNjaGVtYXMoKTsKLSAgICAgICAgICAgICAgLy8gSWYgYW4gaW5saW5lIHNjaGVtYSBpbXBvcnRlZCBpcyBkZWZpbmVkCi0gICAgICAgICAgICAgIGlmIChzY2hlbWFzTWFwLmtleVNldCgpLmNvbnRhaW5zKG5hbWVzcGFjZS5nZXRWYWx1ZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIElmIGFuIGlubGluZSBzY2hlbWEgaW1wb3J0ZWQgaXMgZGVmaW5lZAotICAgICAgICAgICAgICAgIC8vICh0aGF0IG1lYW5zIHRoZSBzY2hlbWEgaXMgdmFsaWQpLAotICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgZWxlbWVudAotICAgICAgICAgICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBubyBzY2hlbWFMb2NhdGlvbiBzbyB0cnkgdGhlIG5hbWVzcGFjZSAKLSAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb24gPSBuYW1lc3BhY2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICAgICAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhbnkgZXJyb3Igb3Igcm9vdCBlbGVtZW50IGlzIG5vdCBYU0Qgc2NoZW1hIC0+IGVycm9yCi0gICAgICAgICAgICAgICAgLy8gISEgQVRURU5USU9OCi0gICAgICAgICAgICAgICAgLy8gcm9vdCBYU0QgU0NIRU1BIFNDSEVNQSBpcyBub3QgdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy9Eb2N1bWVudCBzY2hlbWEgPSBYTUxVdGlscy5wYXJzZVhNTERvY3VtZW50VVJMKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIFhTRF9TQ0hFTUFMT0NBVElPTiwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgRG9jdW1lbnQgc2NoZW1hID0KLSAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5wYXJzZVhNTERvY3VtZW50VVJMKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGltcG9ydCBpcyB2YWxpZCwgdGhlbiBjaGVjayBpdHMgY29udGVudHMKLSAgICAgICAgICAgICAgICBpZiAoWE1MVXRpbHMKLSAgICAgICAgICAgICAgICAgIC5lcXVhbHMoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGNvbnRlbnQgb2YgaW1wb3J0ZWQgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgIHRlc3ROb2RlKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRGaXJzdENoaWxkKCksCi0gICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KSwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgICAic2NoZW1hTG9jYXRpb24gPT0gbnVsbCBhbmQgbmFtZXNwYWNlID09IG51bGwiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgdGVzdE5vZGUobi5nZXRGaXJzdENoaWxkKCksIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmRhOTcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwMy4KLSAgICogPGNvbnRleHQ+Rm9yIGVhY2ggYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9uczwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkZvciB0aGUgcmVmZXJlbmNlZCBkZWZpbml0aW9ucyBhcyB3ZWxsIGFzIGFsbCBpbXBvcnRlZCAKLSAgICogZGVzY3JpcHRpb25zLCBUaGUgWE1MIHNjaGVtYSBpbXBvcnQgc3RhdGVtZW50IGlzIG9ubHkgdXNlZCB3aXRoaW4gYW4geHNkOnNjaGVtYSAKLSAgICogZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTAzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIENoZWNrIGFsbCB1bmtub3duIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgaXQgaXMgbm90IHhzZCBpbXBvcnQuCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChlbCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgIHNlYXJjaEZvckltcG9ydCgoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZWwpLmdldEVsZW1lbnQoKSk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICAvL3Byb2Nlc3NXU0RMKGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXRGaWxlbmFtZSgpKTsKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoKLSAgICogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgbm9kZSBpcyB4c2QgaW1wb3J0LiAKLSAgICogQHBhcmFtIG4gLSBub2RlCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9ySW1wb3J0KE5vZGUgbikKLSAgewotICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgewotICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICB7Ci0gICAgICAgICAgQXR0ciBhID0KLSAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgICAgICAgIFN0cmluZyBzY2hlbWFMb2NhdGlvbiA9IChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiI7Ci0gICAgICAgICAgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfTkFNRVNQQUNFKTsKLSAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIjsKLSAgICAgICAgICBlcnJvcnMuYWRkKG5ldyBRTmFtZShuYW1lc3BhY2UsIHNjaGVtYUxvY2F0aW9uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBpZiAoIVhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgc2VhcmNoRm9ySW1wb3J0KG4uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkyZjM2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTnVsbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTA0LgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDppbXBvcnQ8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgdGFyZ2V0TmFtZXNwYWNlIGF0dHJpYnV0ZSBvbiB0aGUgd3NkbDpkZWZpbml0aW9ucyBlbGVtZW50IGZvciB0aGUgaW1wb3J0ZWQgV1NETCBkZXNjcmlwdGlvbiBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgb24gdGhlIHdzZGw6aW1wb3J0IGVsZW1lbnQgdGhhdCBpbXBvcnRlZCB0aGUgV1NETCBkZXNjcmlwdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIG5hbWVzcGFjZSBvZiB3c2RsOmltcG9ydCBkb2VzIG5vdCBlcXVhbCB0YXJnZXRuYW1lc3BhY2UgaW4gcmVmZXJlbmNlZCB3c2RsLiAgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkltcG9ydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEltcG9ydCBpbSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaW1wb3J0Rm91bmQgPSB0cnVlOwotICAgIERlZmluaXRpb24gZGVmID0gaW0uZ2V0RGVmaW5pdGlvbigpOwotICAgIGlmIChkZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIU51bGxVdGlsLmVxdWFscyhpbS5nZXROYW1lc3BhY2VVUkkoKSwgZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKSkKLSAgICAgICAgZXJyb3JzLmFkZCgKLSAgICAgICAgICBuZXcgUU5hbWUoaW0uZ2V0TmFtZXNwYWNlVVJJKCksIGltLmdldExvY2F0aW9uVVJJKCkpLAotICAgICAgICAgIG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSkpOwotICAgIH0KLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIWltcG9ydEZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNGM2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAgKiBCUDIxMDUuCi0gICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnM8L2NvbnRleHQ+Ci0gICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkZvciB0aGUgcmVmZXJlbmNlZCBkZWZpbml0aW9ucywgYXMgd2VsbCBhcyBhbGwgaW1wb3J0ZWQgZGVzY3JpcHRpb25zLCBpbiB0aGUgV1NETCBuYW1lc3BhY2UgdW5kZXIgdGhlIHdzZGw6ZGVmaW50aXRpb25zIGVsZW1lbnQsIHRoZSB3c2RsOmltcG9ydCBlbGVtZW50IGlzIGVpdGhlciBkaXJlY3RseSBhZnRlciB0aGUgd3NkbDpkb2N1bWVudGF0aW9uIGVsZW1lbnQgb3IgaXMgdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgaWYgdGhlIHdzZGw6ZG9jdW1lbnRhdGlvbiBlbGVtZW50IGlzIG5vdCBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICovCi1wdWJsaWMgY2xhc3MgQlAyMTA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwNShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIAotICAgKiBDaGVjayB3c2xkIGltcG9ydCBlbGVtZW50IGlzIGVpdGhlciBkaXJlY3RseSBhZnRlciB0aGUgd3NkbDpkb2N1bWVudGF0aW9uIGVsZW1lbnQgCi0gICAqIG9yIGlzIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IGlmIHRoZSB3c2RsOmRvY3VtZW50YXRpb24gZWxlbWVudCBpcyBub3QgcHJlc2VudC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuSW1wb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IGltLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpbXBvcnRGb3VuZCA9IHRydWU7Ci0gICAgaWYgKGltLmdldERlZmluaXRpb24oKSAhPSBudWxsICYmIGltLmdldExvY2F0aW9uVVJJKCkgIT0gbnVsbCkKLSAgICAgIHByb2Nlc3NXU0RMKGltLmdldERlZmluaXRpb24oKS5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gIH0KLQotICAvKgotICAgKiBDaGVjayBlbGVtZW50IGlzIGV4dGVuc2liaWxpdHkuCi0gICAqIEBwYXJhbSBlbCAtIHhtbCBlbGVtZW50Ci0gICAqIEByZXR1cm4gYm9vbGVhbgotICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNFeHRlbnNpYmlsaXR5RWxlbWVudChFbGVtZW50IGVsKQotICB7Ci0gICAgYm9vbGVhbiBpc0V4ID0gdHJ1ZTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0JJTkRJTkcpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfREVGSU5JVElPTlMpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRE9DVU1FTlRBVElPTik7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9GQVVMVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTVBPUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU5QVVQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfTUVTU0FHRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9PUEVSQVRJT04pOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfT1VUUFVUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1BBUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfUE9SVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9QT1JUVFlQRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9TRVJWSUNFKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1RZUEVTKTsKLQotICAgIHJldHVybiBpc0V4OwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCB3aWxsIGJlIGFuYWx5emVkICAgICAgIAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIGl0IGRvZXNuJ3QgY29udGFpbiBhbnkgaW1wb3J0cywgdGhlbiB0aGUgcmVzdWx0IGlzIG5vdEFwcGxpY2FibGUKLSAgICBpZiAoKGRlZmluaXRpb24uZ2V0SW1wb3J0cygpID09IG51bGwpCi0gICAgICB8fCAoZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkuc2l6ZSgpID09IDApKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgLy8gRWxzZSBhbmFseXplIHRoZSAKLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvY2Vzc1dTREwoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0KLSAgICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLQotICAgICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgKLSAgICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLQotICAgICAgZWxzZSBpZiAoIWltcG9ydEZvdW5kKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKgotICAgKiB0aGUgbWV0aG9kIGxvYWRzIFdTREwgYW5kIGNoZWNrIHN0cnVjdHVyZQotICAgKiBAcGFyYW0gbG9jYXRpb24KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzV1NETChTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBwYXJzZXMgV1NETAotICAgICAgRG9jdW1lbnQgZG9jID0gdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwobG9jYXRpb24sIG51bGwpOwotICAgICAgY2hlY2tXU0RMKGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7IC8vIGdldCBkZWZpbml0aW9uCi0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICAvLyBBREQ6IGFkZCBleGNlcHRpb24gaGFuZGxpbmcKLSAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCIyMTA1IC0gV1NETCBsb2FkIGZhaWxlZCIpOwotICAgICAgZXJyb3JzLmFkZCh0LnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9mIG5vZGUuCi0gICAqIEBwYXJhbSByb290Ci0gICAqLwotICBwcml2YXRlIHZvaWQgY3JlYXRlRmFpbGVkKE5vZGUgcm9vdCkKLSAgewotICAgIEF0dHIgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgcm9vdCwgQVRUUl9XU0RMX0xPQ0FUSU9OKTsKLSAgICBTdHJpbmcgc2NoZW1hTG9jYXRpb24gPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHJvb3QsIEFUVFJfV1NETF9OQU1FU1BBQ0UpOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgIGVycm9ycy5hZGQobmV3IFFOYW1lKG5hbWVzcGFjZSwgc2NoZW1hTG9jYXRpb24pKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIHdzZGwgY29ycmVzcG9ucyBhc3NlcnRpb24gZGVzY3JpcHRpb24uCi0gICogQHBhcmFtIHJvb3QgLSBkZWZpbml0aW9uCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tXU0RMKE5vZGUgcm9vdCkKLSAgewotICAgIGlmIChyb290ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgZmlyc3QgaW1wb3J0IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgaW0gPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KChFbGVtZW50KSByb290LCBXU0RMX0lNUE9SVCk7Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiBhIGRvY3VtZW50YXRpb24gZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBib29sZWFuIGRvY3VtZW50SXNQcmVzZW50ID0KLSAgICAgICAgKFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoKEVsZW1lbnQpIHJvb3QsIFdTRExfRE9DVU1FTlRBVElPTikKLSAgICAgICAgICAhPSBudWxsKTsKLQotICAgICAgLy8gVmVyaWZ5IHRoYXQgYWxsIGltcG9ydCBlbGVtZW50cyBvY2N1ciBhZnRlciBhIGRvY3VtZW50YXRpb24gZWxlbWVudAotICAgICAgd2hpbGUgKGltICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIEZpbmQgZWxlbWVudHMgdGhhdCBhcmUgcHJldmlvdXMgdG8gdGhlIGltcG9ydCBlbGVtZW50Ci0gICAgICAgIEVsZW1lbnQgZWwgPSBYTUxVdGlscy5maW5kUHJldmlvdXNTaWJsaW5nKGltKTsKLSAgICAgICAgaWYgKGVsICE9IG51bGwpCi0gICAgICAgICAgd2hpbGUgKGlzRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZWwpICYmIGVsICE9IG51bGwpCi0gICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgZWwgPSBYTUxVdGlscy5maW5kUHJldmlvdXNTaWJsaW5nKGVsKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDpkb2N1bWVudCBlbGVtbnQgaXMgcHJlc2VudAotICAgICAgICBpZiAoZG9jdW1lbnRJc1ByZXNlbnQgJiYgZWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmICghWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RPQ1VNRU5UQVRJT04pICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU1QT1JUKSkKLSAgICAgICAgICAgIGNyZWF0ZUZhaWxlZChyb290KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEVsc2UgY2hlY2sgaWYgaXQgaXMgYW5vdGhlciB3c2RsOiBlbGVtZW50Ci0gICAgICAgIGVsc2UgaWYgKGVsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiBub3QgdGhlIGRlZmluaXRpb25zIGVsZW1lbnQsIHRoZW4gY2hlY2sgZm9yIG90aGVyIHdzZGw6IGVsZW1lbnQKLSAgICAgICAgICBpZiAoIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9ERUZJTklUSU9OUykgJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTVBPUlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlbC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkKLSAgICAgICAgICAgICAgY3JlYXRlRmFpbGVkKHJvb3QpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCB0aGUgbmV4dCBpbXBvcnQgZWxlbWVudAotICAgICAgICBpbSA9IFhNTFV0aWxzLmZpbmRFbGVtZW50KGltLCBXU0RMX0lNUE9SVCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmZmYjAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwNy4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQgY29udGFpbmluZyBhbiB4c2Q6c2NoZW1hIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHhzZDpzY2hlbWEgZWxlbWVudCBjb250YWlucyBhIHRhcmdldE5hbWVzcGFjZSBhdHRyaWJ1dGUgd2l0aCBhIHZhbGlkIGFuZCBub24tbnVsbCB2YWx1ZSB1bmxlc3MgdGhlIHhzZDpzY2hlbWEgZWxlbWVudCBoYXMgeHNkOmltcG9ydCBhbmQvb3IgeHNkOmFubm90YXRpb24gYXMgaXRzIG9ubHkgY2hpbGQgZWxlbWVudChzKS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTA3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2NoZW1hRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICAvL3ByaXZhdGUgU3RyaW5nIGNvbnRleHQ7Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFR5cGVzIHQgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgTGlzdCBleHRzID0gdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vY29udGV4dCA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgICAgSXRlcmF0b3IgaXQgPSBleHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpOwotICAgICAgICBpZiAoZWwgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKCgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwkJCSAgY29udGV4dCA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIC8vCQkJICBwcm9jZXNzV1NETChlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RmlsZW5hbWUoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghc2NoZW1hRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoKLSAgICogQ2hlY2sgbm9kZSBzY2hlbWEgb3IgbG9hZCBzY2hlbWEgZnJvbSBpbm1wb3J0IGlmIGl0IGV4aXN0cyBhbmQgcHJvY2VzcyBpdC4gCi0gICAqIEBwYXJhbSBuIC0gbm9kZQotICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbikKLSAgewotICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgewotICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgeHNkOnNjaGVtYSBlbGVtZW50IGlzIGZvdW5kIC0+IHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgewotICAgICAgICAgIHNjaGVtYUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICBwcm9jZXNzU2NoZW1hKG4sIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gaWYgeHNkOmltcG9ydCBlbGVtZW50IGlzIGZvdW5kIC0+IGxvYWQgc2NoZW1hIGFuZCBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgIC8vaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICAgIC8vICBsb2FkU2NoZW1hKG4pOwotICAgICAgICAgIC8vZWxzZQotICAgICAgICAgIC8vIGVsc2UgaXRlcmF0ZSBlbGVtZW50IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKG4uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIExvYWQgc2NoZW1hIGFuZCBwcm9jZXNzIGl0LgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZSAtIHhzZDppbXBvcnQgZWxlbWVudAotICAqLwotICAvL3ByaXZhdGUgdm9pZCBsb2FkU2NoZW1hKE5vZGUgaW1wb3J0Tm9kZSkKLSAgLy97Ci0gIC8vICBFbGVtZW50IGltID0gKEVsZW1lbnQpIGltcG9ydE5vZGU7Ci0gIC8vICBBdHRyIHNjaGVtYUxvY2F0aW9uID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gIC8vICAvLyB0cnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gIC8vICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gIC8vICAgIHRyeQotICAvLyAgICB7Ci0gIC8vICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAvLyAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gIC8vICAgICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KTsKLSAgLy8gICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgLy8gICAgICB7Ci0gIC8vICAgICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSk7Ci0gIC8vICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIjsKLSAgLy8gICAgICAgIHByb2Nlc3NTY2hlbWEoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBuYW1lc3BhY2UpOwotICAvLyAgICAgIH0KLSAgLy8gICAgfQotICAvLyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gIC8vICAgIHsKLSAgLy8gICAgICAvLyBub3RoaW5nLiBpdCdzIG5vdCBhIHNjaGVtYQotICAvLyAgICB9Ci0gIC8vfQotCi0gIC8qCi0gICAqIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIGl0J3Mgbm90IGNvcnJlc3BvbnMgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gc2NoZW1hIC0geHNkOnNjaGVtYQotICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gbmFtZXNwYWNlIG9mIHNjaGVtYQotICAqLwotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1NjaGVtYShOb2RlIHNjaGVtYSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIEF0dHIgYSA9Ci0gICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHNjaGVtYSwgQVRUUl9YU0RfVEFSR0VUTkFNRVNQQUNFKTsKLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiBudWxsOwotCi0gICAgTm9kZSBuID0gc2NoZW1hLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAvLwkgICAhISB3ZSBzdXBwb3NlIHRoYXQgeHNkOmltcG9ydCBlbGVtZW50IGlzIG9jY3VyZWQgb25seSB3aXRoaW4geHNkOnNjaGVtYSBlbGVtZW50Ci0gICAgYm9vbGVhbiBjb250YWluc09ubHlJbXBvcnRBbmRBbm5vdGF0aW9uID0gdHJ1ZTsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICB7Ci0gICAgICAgIGNvbnRhaW5zT25seUltcG9ydEFuZEFubm90YXRpb24KLSAgICAgICAgICAmPSAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkKLSAgICAgICAgICAgIHx8IFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9BTk5PVEFUSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSAmJiBYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgIC8vCWxvYWRTY2hlbWEobik7Ci0KLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHRhcmdldCBuYW1lc3BhY2UgaXMgbm90IHNldCBhbmQgdGhlcmUgYXJlIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIGltcG9ydCBhbmQgYW5ub3RhdGlvbiwgdGhlbiBlcnJvcgotICAgIGlmICgodGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwgdGFyZ2V0TmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAmJiAoIWNvbnRhaW5zT25seUltcG9ydEFuZEFubm90YXRpb24pKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQodGFyZ2V0TmFtZXNwYWNlLCBYTUxVdGlscy5zZXJpYWxpemUoKEVsZW1lbnQpIHNjaGVtYSkpOwotICAgIH0KLQotICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCAmJiAhbmFtZXNwYWNlLmVxdWFscyh0YXJnZXROYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQobmFtZXNwYWNlLCBYTUxVdGlscy5zZXJpYWxpemUoKEVsZW1lbnQpIHNjaGVtYSkpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY3MzNmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLQotCi0vKioKLQkgKiBCUDIxMDguCi0gICAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6dHlwZXMsIHdpdGggQXJyYXkgZGVjbGFyYXRpb25zIGVpdGhlciBsb2NhbGx5IGRlZmluZWQgb3IgZnJvbSBhbiBpbXBvcnRlZCBkZXNjcmlwdGlvbjwvY29udGV4dD4KLSAgICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHR5cGUgc29hcGVuYzpBcnJheSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlc2UgZGVjbGFyYXRpb25zLCBhbmQgdGhlIHdzZGw6YXJyYXlUeXBlIGF0dHJpYnV0ZSBpcyBub3QgdXNlZCBpbiB0aGUgdHlwZSBkZWNsYXJhdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotCSAqLwotcHVibGljIGNsYXNzIEJQMjEwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBUeXBlcyB0ID0gKFR5cGVzKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gU2VhcmNoIHRoZSBkZWZpbml0aW9ucyBpbiBDYW5kaWRhdGVJbmZvIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCB0eXBlcyBlbGVtZW50Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBpZiAoKGRlZmluaXRpb24gPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9uKHQpKQotICAgICAgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzIHRoZW4gdGhyb3cgYW4gZXhlY3B0aW9uCi0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIHR5cGVzIGVsZW1lbnQgZGVmaW5pdGlvbi4iKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHQsCi0gICAgICAgICAgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotCi0gICAgICBJdGVyYXRvciBpdCA9IHJlZ2lzdHJ5LmdldEFycmF5VHlwZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgZXJyb3JzLmFkZCgoUU5hbWUpIGl0Lm5leHQoKSk7Ci0KLSAgICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTliNmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotCi0KLS8qKgotICogQlAyMTEwLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDp0eXBlczwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkFycmF5IGRlY2xhcmF0aW9uIHdyYXBwZXIgZWxlbWVudHMgZG9lcyBub3QgdXNlIHRoZSBuYW1pbmcgY29udmVudGlvbiBBcnJheU9mWFhYLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotCi0gICAgVHlwZXMgdCA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIFNlYXJjaCB0aGUgZGVmaW5pdGlvbnMgaW4gQ2FuZGlkYXRlSW5mbyB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdHlwZXMgZWxlbWVudAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgaWYgKChkZWZpbml0aW9uID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbih0KSkKLSAgICAgID09IG51bGwpCi0gICAgewotICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcyB0aGVuIHRocm93IGFuIGV4ZWNwdGlvbgotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSB0eXBlcyBlbGVtZW50IGRlZmluaXRpb24uIik7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0LAotICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgICAgSXRlcmF0b3IgaXQgPSByZWdpc3RyeS5nZXRFbGVtZW50TGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBRTmFtZSB0eXBlID0gKFFOYW1lKSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmICh0eXBlLmdldExvY2FsUGFydCgpLnN0YXJ0c1dpdGgoIkFycmF5T2YiKSkKLSAgICAgICAgICBlcnJvcnMuYWRkKHR5cGUpOwotICAgICAgfQotCi0gICAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlkOTQyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExMS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZywgd2hpY2ggY29udGFpbnMgYSBkb2N1bWVudC1saXRlcmFsIHNvYXA6YmluZGluZzwvY29udGV4dD4KLSAgICogCi0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JZiB0aGUgInBhcnRzIiBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50KHMpIGhhdmUgYXQgbW9zdCBvbmUgcGFydCBsaXN0ZWQgaW4gdGhlIHBhcnRzIGF0dHJpYnV0ZS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTExIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjExMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGRvY0xpdGVyYWxGb3VuZCA9IGZhbHNlOwotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogCi0gICAqIFB1dCBpbiBjb250ZXh0IHNvYXAgYmluZGluZydzIHN0eWxlCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIAotICAgKiBWZXJpZnkgc3R5bGUgb2Ygc29hcCBvcGVyYXRpb24gaXMgImRvY3VtZW50IiBpZiBub3QgdGhlbiBpdCdzIGNhbmNlbGVkIHByb2Nlc3MuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IChTdHJpbmcpIGN0eC5nZXRQYXJhbWV0ZXIoInN0eWxlIik7Ci0gICAgLy8gYXNzZXJ0IHN0eWxlICE9IG51bGwKLSAgICBpZiAoIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MuZXF1YWxzKHN0eWxlKSkKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogCi0gICAqIElmIHVzZSBvZiBzb2FwIGJvZHkgaXMgImxpdGVyYWwiIGFuZCBwYXJ0cyBvZiBzb2FwIGJvZHkgaXMgbW9yZSB0aGFuIG9uZSBpdCBjcmVhdGVzIGZhbHVyZSByZXBvcnQuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBhc3NlcnQgc3R5bGUgPT0gImRvY3VtZW50IgotICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVC5lcXVhbHMoYm9keS5nZXRVc2UoKSkpCi0gICAgewotICAgICAgZG9jTGl0ZXJhbEZvdW5kID0gdHJ1ZTsKLQotICAgICAgTGlzdCBwYXJ0cyA9IGJvZHkuZ2V0UGFydHMoKTsKLSAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmIHBhcnRzLnNpemUoKSA+IDEpCi0gICAgICAgIC8vaG93IHRvIHBpY2sgb3V0IG9uZSBib2R5IGZyb20gYW5vdGhlciBvbmUgPwkJCQkJCQotICAgICAgICBlcnJvcnMuYWRkKGJvZHkuZ2V0RWxlbWVudFR5cGUoKSwgYm9keS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFkb2NMaXRlcmFsRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjJiYzlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTIuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcsIHdpdGggYSBzdHlsZSAicnBjIiBhdHRyaWJ1dGUgYW5kIGNvbnRhaW5pbmcgYXQgbGVhc3QgYSBzb2FwYmluZDpib2R5IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5ObyB3c2RsOnBhcnQgcmVmZXJyZWQgYnkgc3VjaCBhIHNvYXBiaW5kOmJvZHkgZWxlbWVudCBpcyBkZWZpbmVkIHVzaW5nIHRoZSAiZWxlbWVudCIgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTEyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcnBjTGl0ZXJhbEZvdW5kID0gZmFsc2U7Ci0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAKLSAgICogUHV0IGluIGNvbnRleHQgc29hcCBiaW5kaW5nJ3Mgc3R5bGUKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQQmluZGluZyBiaW5kaW5nLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0KLSAgICAgIChiaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgIGN0eC5hZGRQYXJhbWV0ZXIoImJpbmRpbmdTdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdPcGVyYXRpb24gb3AsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVtb3ZlUGFyYW1ldGVyKCJvcGVyYXRpb25TdHlsZSIpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzdHlsZSBvZiBzb2FwIG9wZXJhdGlvbiBpcyAicnBjIiBpZiBub3QgdGhlbiBpdCdzIGNhbmNlbGVkIHByb2Nlc3MuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigib3BlcmF0aW9uU3R5bGUiLCBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gIH0KLQotICAvKiAKLSAgICogSWYgdXNlIG9mIHNvYXAgYm9keSBpcyAibGl0ZXJhbCIgYW5kIGlmIGF0IGxlYXN0IG9uZSBwYXJ0IGlzIGRlZmluZSB1c2luZyAiZWxlbWVudCIgYXR0cmlidXRlIGl0IGNyZWF0ZXMgZmFsdXJlIHJlcG9ydC4gICAgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBvcFN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigib3BlcmF0aW9uU3R5bGUiKTsKLSAgICBTdHJpbmcgYlN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigiYmluZGluZ1N0eWxlIik7Ci0KLSAgICBpZiAoKG9wU3R5bGUgPT0gbnVsbAotICAgICAgICAmJiAhV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQy5lcXVhbHMoYlN0eWxlKSkKLSAgICAgIHx8IChvcFN0eWxlICE9IG51bGwgCi0gICAgICAJJiYgIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMuZXF1YWxzKG9wU3R5bGUpKSkKLSAgICB7Ci0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gYXNzZXJ0IHVzZSA9PSAibGl0ZXJhbCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKGJvZHkuZ2V0VXNlKCkpKQotICAgIHsKLSAgICAgIHJwY0xpdGVyYWxGb3VuZCA9IHRydWU7Ci0KLSAgICAgIC8vIGZpbmQgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgICAgLy8gaWYgc29tZSBsaW5rcyBhcmUgYnJva2VuLCBjYW5jZWwgcHJvY2Vzc2luZwotICAgICAgaWYgKG9wID09IG51bGwKLSAgICAgICAgfHwgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCAmJiBvcC5nZXRJbnB1dCgpID09IG51bGwpCi0gICAgICAgIHx8IChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0ICYmIG9wLmdldE91dHB1dCgpID09IG51bGwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIE1lc3NhZ2UgbSA9Ci0gICAgICAgIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgICAgPyBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKQotICAgICAgICAgIDogb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgLy8gUkVNT1ZFOiBjdXJyZW50IG1lc3NhZ2Ugc2hvdWxkIGVxdWFscyB0byBtZXNzYWdlIGdpdmVuIGFzIGVudHJ5Ci0gICAgICAvL2lmIChtID09IG51bGwgfHwgbWVzc2FnZSAhPSBtKQotICAgICAgaWYgKG0gPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBMaXN0IHBhcnRzID0KLSAgICAgICAgV1NETFV0aWwuZ2V0UGFydHMoCi0gICAgICAgICAgb3AsCi0gICAgICAgICAgbSwKLSAgICAgICAgICBib2R5LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpOwotICAgICAgaWYgKHBhcnRzID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgLyogY2hlY2sgd2hldGhlciBwYXJ0cyBsaXN0IGNvbnRhaW5zIGEgcGFydHMgd2hpY2ggdXNlcwotICAgICAgICogZWxlbWVudCBhdHRyaWJ1dGUuIElmIHNvLCBwYXJ0IG5hbWUgd2lsbCBiZSBhZGRlZCBpbnRvCi0gICAgICAgKiBlcnJvcnMgc2V0LgotICAgICAgICovCi0gICAgICBJdGVyYXRvciBpdCA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXQubmV4dCgpOwotICAgICAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgZXJyb3JzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAvLyBzYXZlIG1lc3NhZ2UgCi0gICAgLy9tZXNzYWdlID0gKE1lc3NhZ2UpZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBPcGVyYXRpb24odHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLQotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghcnBjTGl0ZXJhbEZvdW5kKQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQzMWNkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTMuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGFuZCBzb2FwYmluZDpmYXVsdCBlbGVtZW50cyBvbmx5IHJlZmVyIHRvIHdzZGw6cGFydCBlbGVtZW50KHMpIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQgdXNpbmcgdGhlICJlbGVtZW50IiBhdHRyaWJ1dGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAKLSAgICogVmVyaWZ5IHNvYXAgaGVhZGVyIHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZSAgIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXIgaGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBNZXNzYWdlIG0gPSBkLmdldE1lc3NhZ2UoaGVhZGVyLmdldE1lc3NhZ2UoKSk7Ci0gICAgaWYgKG0gIT0gbnVsbCkKLSAgICAgIGNoZWNrUGFydChtLmdldFBhcnQoaGVhZGVyLmdldFBhcnQoKSksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzb2FwIGhlYWRlcmZhdWx0IHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IGZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBNZXNzYWdlIG0gPSBkLmdldE1lc3NhZ2UoZmF1bHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAvLyBpZiBtZXNzYWdlIG9yIHBhcnQgaXMgbm90IGZvdW5kIC0gTk9UX0FQUExJQ0FCTEUgPz8/PwotICAgIGlmIChtICE9IG51bGwpCi0gICAgICBjaGVja1BhcnQobS5nZXRQYXJ0KGZhdWx0LmdldFBhcnQoKSksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzb2FwIGZhdWx0IHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IGZhdWx0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgIGlmIChmYXVsdE5hbWUgPT0gbnVsbCkKLSAgICAgIGZhdWx0TmFtZSA9IGN0eC5nZXRCaW5kaW5nRmF1bHQoKS5nZXROYW1lKCk7Ci0gICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICBpZiAob3AgPT0gbnVsbCAvKiB8fCBmYXVsdE5hbWUgPT0gbnVsbCovCi0gICAgICApIC8vIG1heSBiZSBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgbGVnYWwgZmF1bHQgd2l0aCBudWxsIG5hbWUKLSAgICAgIHJldHVybjsKLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgU09BUEZhdWx0LmdldE5hbWUoKSBjb3JyZXNwb25kcyB0byB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9uJ3MgZmF1bHQgbmFtZQkJCQotICAgIEZhdWx0IGYgPSBvcC5nZXRGYXVsdChmYXVsdE5hbWUpOwotICAgIGlmIChmID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgTWVzc2FnZSBtID0gZi5nZXRNZXNzYWdlKCk7Ci0gICAgLy8gbWVzc2FnZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSBwYXJ0Ci0gICAgaWYgKG0gPT0gbnVsbCB8fCBtLmdldFBhcnRzKCkgPT0gbnVsbCB8fCBtLmdldFBhcnRzKCkuc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm47Ci0gICAgY2hlY2tQYXJ0KChQYXJ0KSBtLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5nZXQoMCksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyoKLSAgICogVmVyaWZ5IHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSBwIC0gcGFydAotICAgKiBAcGFyYW0gYiAtIGJpbmRpbmcKLSAgKi8KLSAgLy8gcmVmYWN0b3JpbmcKLSAgcHJpdmF0ZSB2b2lkIGNoZWNrUGFydChQYXJ0IHAsIEJpbmRpbmcgYikKLSAgewotICAgIGlmIChwICE9IG51bGwgJiYgcC5nZXRFbGVtZW50TmFtZSgpID09IG51bGwpCi0gICAgICBlcnJvcnMuYWRkKGIuZ2V0UU5hbWUoKSwgcC5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQSGVhZGVyKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXJGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0KLSAgICBNYXAgbSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgRGVmaW5pdGlvbiBkZWYgPSBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKTsKLSAgICBXU0RMVXRpbC5leHBhbmREZWZpbml0aW9uKGRlZik7Ci0gICAgbS5wdXQoImRlZmluaXRpb24iLCBkZWYpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSwgbSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjU0OWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExNC4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAqIAotICogCi0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RXZlcnkgd3NkbDpwYXJ0IGZyb20gZWFjaCB3c2RsOm1lc3NhZ2UgaW4gdGhlIGFzc29jaWF0ZWQgCi0gKiB3c2RsOnBvcnRUeXBlIGlzIHJlZmVyZW5jZWQgZWl0aGVyIGJ5IHRoZSBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIAotICogc29hcGJpbmQ6ZmF1bHQsIG9yIHNvYXBiaW5kOmhlYWRlcmZhdWx0LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIC8vIG1hcCBNZXNzYWdlIFFOYW1lIC0+IHNldChQYXJ0IG5hbWUpCi0gIHB1YmxpYyBNYXAgbWVzc2FnZXMgPSBuZXcgSGFzaE1hcCgpOwotCi0gIC8qIAotICAgKiBBZGQgdG8gTWFwIHBhcnRzIHdoaWNoIHVzZWQgYnkgbWVzc2FnZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5NZXNzYWdlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAobSAhPSBudWxsCi0gICAgICAmJiAhbWVzc2FnZXMuY29udGFpbnNLZXkobSkKLSAgICAgICYmIG0uZ2V0T3JkZXJlZFBhcnRzKG51bGwpICE9IG51bGwpCi0gICAgewotICAgICAgU2V0IHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgSXRlcmF0b3IgaXQgPSBtLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgcy5hZGQoKChQYXJ0KSBpdC5uZXh0KCkpLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vbWVzc2FnZXMucHV0KG0uZ2V0UU5hbWUoKSwgcyk7Ci0gICAgICBpZiAocy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBtZXNzYWdlcy5wdXQobS5nZXRRTmFtZSgpLCBzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAKLSAgICogUHV0IGluIGNvbnRleHQgc3R5bGUgb2Ygc29hcCBiaW5kaW5nCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0KLSAgLyogCi0gICAqIFJlbW92ZSBwYXJ0cyBvZiBzb2FwIGJvZHkgZnJvbSBNYXAuICAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gU3RyaW5nIHN0eWxlID0gKFN0cmluZyljdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gZmluZCBjb3JyZXNwb25kaW5nIG1lc3NhZ2UKLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgIC8vIGlmIHNvbWUgbGlua3MgYXJlIGJyb2tlbiwgY2FuY2VsIHByb2Nlc3NpbmcKLSAgICBpZiAob3AgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBNZXNzYWdlIG0gPSBudWxsOwotICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgaWYgKG9wLmdldElucHV0KCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgbSA9IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgIHsKLSAgICAgIGlmIChvcC5nZXRPdXRwdXQoKSA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0gICAgICBtID0gb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICBpZiAobSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gZ2V0IHBhcnRzCi0gICAgTGlzdCBwYXJ0cyA9IFdTRExVdGlsLmdldFBhcnRzKG9wLCBtLCBib2R5LCBudWxsKTsKLSAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIC8vIGl0ZXJhdGUgYWxsIHBhcnRzIGFuZCBjaGVjawotICAgIEl0ZXJhdG9yIGl0ID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgcmVtb3ZlUGFydChtLmdldFFOYW1lKCksICgoUGFydCkgaXQubmV4dCgpKS5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFJlbW92ZSBwYXJ0cyBvZiBzb2FwIGhlYWRlciBmcm9tIE1hcC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIHdlIHN1cHBvc2UgdGhhdCBpdCBwb3NzaWJsZSB0byBoYXZlIGxlZ2FsIG1lc3NhZ2UgYW5kIHBhcnQgd2l0aCBudWxsIG5hbWVzCi0gICAgLy8gQVRURU5USU9OCi0gICAgLy8gc2hvdWxkIHdlIGFkZCBtZXNzYWdlIHdoaWNoIGlzIHJlZmVyZW5jZWQgYnkgaGVhZGVyIG9yIGhlYWRlcmZhdWx0IHRvIG1lc3NhZ2VzID8KLSAgICByZW1vdmVQYXJ0KGhlYWRlci5nZXRNZXNzYWdlKCksIGhlYWRlci5nZXRQYXJ0KCkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IGZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IGl0IHBvc3NpYmxlIHRvIGhhdmUgbGVnYWwgbWVzc2FnZSBhbmQgcGF0ciB3aXRoIG51bGwgbmFtZXMKLSAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IGZhdWx0LmdldE1lc3NhZ2UoKTsKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gbnVsbCkKLSAgICAgIG1lc3NhZ2VOYW1lID0gY3R4LmdldFNPQVBIZWFkZXIoKS5nZXRNZXNzYWdlKCk7Ci0gICAgcmVtb3ZlUGFydChtZXNzYWdlTmFtZSwgZmF1bHQuZ2V0UGFydCgpKTsKLSAgfQotCi0gIC8qIAotICAgKiBSZW1vdmUgcGFydHMgb2Ygc29hcCBmYXVsdCBmcm9tIE1hcC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBmYXVsdCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lID09IG51bGwpCi0gICAgICBmYXVsdE5hbWUgPSBjdHguZ2V0QmluZGluZ0ZhdWx0KCkuZ2V0TmFtZSgpOwotICAgIE9wZXJhdGlvbiBvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCk7Ci0gICAgaWYgKG9wID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgU09BUEZhdWx0LmdldE5hbWUoKSBjb3JyZXNwb25kcyB0byB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9uJ3MgZmF1bHQgbmFtZSAgICAgICAgICAgCi0gICAgRmF1bHQgZiA9IG9wLmdldEZhdWx0KGZhdWx0TmFtZSk7Ci0KLSAgICAvLyBmYXVsdCBtZXNzYWdlIHNob3VsZCBoYXZlIDEgcGFydAotICAgIGlmIChmID09IG51bGwKLSAgICAgIHx8IGYuZ2V0TWVzc2FnZSgpID09IG51bGwKLSAgICAgIHx8IGYuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkuc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm47Ci0KLSAgICBQYXJ0IHAgPSAoUGFydCkgZi5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG51bGwpLmdldCgwKTsKLSAgICByZW1vdmVQYXJ0KGYuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIHAuZ2V0TmFtZSgpKTsKLSAgfQotCi0gIC8qCi0gICAqIFJlbW92ZSBwYXJ0IGZyb20gTWFwLiAKLSAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgLSBtZXNzYWdlCi0gICogQHBhcmFtIHBhcnROYW1lIC0gcGFydAotICAqLwotICAvLyByZWZhdG9yaW5nCi0gIHByaXZhdGUgdm9pZCByZW1vdmVQYXJ0KFFOYW1lIG1lc3NhZ2VOYW1lLCBTdHJpbmcgcGFydE5hbWUpCi0gIHsKLSAgICBTZXQgcGFydHMgPSAoU2V0KSBtZXNzYWdlcy5nZXQobWVzc2FnZU5hbWUpOwotICAgIGlmIChwYXJ0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnRzLnJlbW92ZShwYXJ0TmFtZSk7Ci0gICAgICBpZiAocGFydHMuc2l6ZSgpID09IDApCi0gICAgICAgIG1lc3NhZ2VzLnJlbW92ZShtZXNzYWdlTmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRNZXNzYWdlKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCb2R5KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXIodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgQmluZGluZyBiID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKGIpOwotCi0gICAgaWYgKG1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgICBlcnJvcnMuYWRkKGIuZ2V0UU5hbWUoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTk4Mjk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTUuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDptZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkFuICJlbGVtZW50IiBhdHRyaWJ1dGUgb24gYW55IHdzZGw6cGFydCBlbGVtZW50IHJlZmVycyB0byBhIGdsb2JhbCBlbGVtZW50IGRlY2xhcmF0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTUgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE1KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5QYXJ0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBwYXJ0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwKLSAgICAgICYmIHJlZ2lzdHJ5LmdldFR5cGUocGFydC5nZXRFbGVtZW50TmFtZSgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQoY3R4LmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpKTsKLSAgICAgIGN0eC5jYW5jZWxNZXNzYWdlUHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIHJlZ2lzdHJ5ID0KLSAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBhcnQodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKE1lc3NhZ2UpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTlmZjA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTE2LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6bWVzc2FnZSBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOm1lc3NhZ2UgZWxlbWVudCBkb2VzIG5vdCBjb250YWluIHBhcnQgZWxlbWVudHMgdGhhdCB1c2UgYm90aCAidHlwZSIgYW5kICJlbGVtZW50IiBhdHRyaWJ1dGVzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUGFydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBwYXJ0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwgJiYgcGFydC5nZXRUeXBlTmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgZXJyb3JzLmFkZChjdHguZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCkpOwotICAgICAgY3R4LmNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBhcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChNZXNzYWdlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MDlmYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExNy4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCByZWZlcnJlZCB0byBieSBhbiBycGMtbGl0ZXJhbCBzb2FwOmJpbmRpbmc8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgcnBjLWxpdGVyYWwgYmluZGluZyBkb2VzIG5vdCBoYXZlIGEgbmFtZXNwYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgb24gYSBjb250YWluZWQgc29hcGJpbmQ6aGVhZGVyLCBzb2FwYmluZDpoZWFkZXJmYXVsdCwgYW5kIHNvYXBiaW5kOmZhdWx0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExNyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTcoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBycGNMaXRlcmFsRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIAotICAgKiBJZiB1c2Ugb2Ygc29hcCBib2R5IGlzICJsaXRlcmFsIiBhbmQgaWYgYXQgbGVhc3Qgb25lIHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUgaXQgY3JlYXRlcyBmYWx1cmUgcmVwb3J0LiAgICAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gYXNzZXJ0IHVzZSA9PSAibGl0ZXJhbCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKGJvZHkuZ2V0VXNlKCkpCi0gICAgICAmJiAoKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKSkuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDKSkKLSAgICB7Ci0gICAgICBycGNMaXRlcmFsRm91bmQgPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9IG9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgIGlmIChzdHlsZSA9PSBudWxsKQotICAgICAgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gYXNzZXJ0IHN0eWxlICE9IG51bGwKLSAgICBpZiAoIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMuZXF1YWxzKHN0eWxlKSkKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXIgaGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY2hlY2soaGVhZGVyLmdldFVzZSgpLCBoZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCksIGN0eCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgZmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjaGVjayhmYXVsdC5nZXRVc2UoKSwgZmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCksIGN0eCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgZmF1bHQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGNoZWNrKGZhdWx0LmdldFVzZSgpLCBmYXVsdC5nZXROYW1lc3BhY2VVUkkoKSwgY3R4KTsKLSAgfQotCi0gIC8vIHJlZmFjdG9yaW5nCi0gIC8vIGNoZWNrIExJVEVSQUwgdXNlIGFuZCAhPSBuYW1lc3BhY2UKLSAgLy8gY2FuY2VsaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZwotICBwcml2YXRlIHZvaWQgY2hlY2soU3RyaW5nIHVzZSwgU3RyaW5nIG5hbWVzcGFjZSwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyh1c2UpCi0gICAgICAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKGN0eC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKSk7Ci0gICAgICAvLyAgICAgICAgICAgICAgc3VwcHJlc3NlcyBzdWJzZXF1ZW50IHByb2Nlc3NpbmcsIGJlY2F1c2UgZXJyb3IgbGlzdCBjb250YWlucyBvbmx5IGZhaWxlZCBiaW5kaW5nCi0gICAgICBjdHguY2FuY2VsUHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCb2R5KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXIodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFycGNMaXRlcmFsRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTRhNzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTguCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBsaXN0IChvciBzZXQpIG9mIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnRzIGZvciB0aGUgY29udGFpbmVkIHdzZGw6YmluZGluZyBpcyB0aGUgc2FtZSBhcyB0aGUgbGlzdCBvZiB3c2RsOm9wZXJhdGlvbnMgZm9yIHRoZSByZWZlcnJlZCB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvcCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gYXNzZXJ0IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24KLSAgICBpZiAob3AgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKGN0eC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKSk7Ci0gICAgICAvLwkJCQlzdXBwcmVzc2VzIHN1YnNlcXVlbnQgcHJvY2Vzc2luZywgYmVjYXVzZSBlcnJvciBsaXN0IGNvbnRhaW5zIG9ubHkgZmFpbGVkIGJpbmRpbmcKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgQmluZGluZyBiID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgLy8gaWYgb3BlcmF0aW9ucyBjb3VudCBpbiBwb3J0IHR5cGUgYW5kIGJpbmRpbmcgaXMgZGlmZmVyIC0+IGVycm9yCi0gICAgaWYgKGIuZ2V0UG9ydFR5cGUoKSA9PSBudWxsCi0gICAgICB8fCBiLmdldFBvcnRUeXBlKCkuZ2V0T3BlcmF0aW9ucygpLnNpemUoKQotICAgICAgICAhPSBiLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuc2l6ZSgpKQotICAgICAgZXJyb3JzLmFkZChiLmdldFFOYW1lKCkpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgICB0cmF2ZXJzYWwudmlzaXRPcGVyYXRpb24odHJ1ZSk7Ci0gICAgICB0cmF2ZXJzYWwudHJhdmVyc2UoYik7Ci0gICAgfQotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlMWE4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExOS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZywgd2hpY2ggaXMgb2YgdHlwZSBkb2N1bWVudC1saXRlcmFsPC9jb250ZXh0PgotICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SWYgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgcGFydHMgYXR0cmlidXRlIG9uIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LCB0aGUgY29ycmVzcG9uZGluZyBhYnN0cmFjdCB3c2RsOm1lc3NhZ2UgZGVmaW5lcyB6ZXJvIG9yIG9uZSB3c2RsOnBhcnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExOSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBkb2NMaXRlcmFsRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLSAgICAvLyBhc3NlcnQgc3R5bGUgIT0gbnVsbAotICAgIGlmICghV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQy5lcXVhbHMoc3R5bGUpKQotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgdXNlID0KLSAgICAgIChib2R5LmdldFVzZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQKLSAgICAgICAgOiBib2R5LmdldFVzZSgpOwotCi0gICAgLy8gYXNzZXJ0IHN0eWxlID09ICJkb2N1bWVudCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKHVzZSkpCi0gICAgewotICAgICAgZG9jTGl0ZXJhbEZvdW5kID0gdHJ1ZTsKLSAgICAgIGlmIChib2R5LmdldFBhcnRzKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE1hcCBwYXJ0cyA9IG51bGw7Ci0gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0SW5wdXQoKSA9PSBudWxsIHx8IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgcGFydHMgPSBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0T3V0cHV0KCkgPT0gbnVsbCB8fCBvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICBwYXJ0cyA9IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnRzICE9IG51bGwgJiYgcGFydHMuc2l6ZSgpID4gMSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9ycy5hZGQoY3R4LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpKTsKLSAgICAgICAgICAvLwkJCQkJCXN1cHByZXNzZXMgc3Vic2VxdWVudCBwcm9jZXNzaW5nLCBiZWNhdXNlIGVycm9yIGxpc3QgY29udGFpbnMgb25seSBmYWlsZWQgYmluZGluZwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nSW5wdXRQcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIWRvY0xpdGVyYWxGb3VuZCkKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MjcyODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEyMC4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBvcGVyYXRpb24gcmVmZXJlbmNlZCBieSB0aGUgYmluZGluZyByZXN1bHRzIGluIGEgdW5pcXVlIHdpcmUgc2lnbmF0dXJlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMjAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTIwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgU2V0IHdhcmVzID0gbmV3IEhhc2hTZXQoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBMaXN0IHNpZ25hdHVyZSA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0KLSAgICBTdHJpbmcgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gZmluZCBjb3JyZXNwb25kaW5nIG1lc3NhZ2UKLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotCi0gICAgLy8gaWYgc29tZSBsaW5rcyBhcmUgYnJva2VuLCBjYW5jZWwgcHJvY2Vzc2luZwotICAgIGlmIChvcCA9PSBudWxsCi0gICAgICB8fCBvcC5nZXRJbnB1dCgpID09IG51bGwKLSAgICAgIHx8IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgTWVzc2FnZSBtID0gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICBMaXN0IHBhcnRzID0gV1NETFV0aWwuZ2V0UGFydHMob3AsIG0sIGJvZHksIHN0eWxlKTsKLSAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICAvLyAhISBBVFRFTlRJT04KLSAgICAvLyBtYXkgYmUgcmVxdWlyZWQgdG8gYWRkIHR5cGVzIGluc3RlYWQgb2YgcGFydCBpbnRvIHNpZ25hdHVyZSA/Ci0KLSAgICAvLyBjcmVhdGUgc2lnbmF0dXJlCi0gICAgc2lnbmF0dXJlLmFkZEFsbChwYXJ0cyk7Ci0KLSAgICAvLyBzdXBwb3NlIHRoYXQgd2lyZSBzaWduYXR1cmUgZm9yCi0gICAgLy8gLSBycGMgc3R5bGUgPSBvcGVyYXRpb24gbmFtZSArIHBhcnRzJyBxbmFtZQotICAgIC8vIC0gZG9jdW1lbnQgc3R5bGUgPSBwYXJ0cycgcW5hbWUKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQy5lcXVhbHMoc3R5bGUpKQotICAgICAgc2lnbmF0dXJlLmFkZCgwLCBvcC5nZXROYW1lKCkpOwotCi0gICAgaWYgKHNhbWVTaWduYXR1cmUod2FyZXMsIHNpZ25hdHVyZSkpCi0gICAgICBlcnJvcnMuYWRkKG9wLmdldE5hbWUoKSk7Ci0gICAgZWxzZQotICAgICAgd2FyZXMuYWRkKHNpZ25hdHVyZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIHNpZ25hdHVyZSBpcyBpbiB0aGUgc2V0IG1hdGNoLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNhbWVTaWduYXR1cmUoU2V0IHNpZ25hdHVyZVNldCwgTGlzdCBzaWduYXR1cmUpCi0gIHsKLSAgICBib29sZWFuIHNhbWUgPSBmYWxzZTsKLQotICAgIC8vIEdldCBpdGVyYXRvciBmb3Igc2V0Ci0gICAgSXRlcmF0b3Igc2V0ID0gc2lnbmF0dXJlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKHNldC5oYXNOZXh0KCkgJiYgIXNhbWUpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgc2lnbmF0dXJlIGZyb20gdGhlIHNldAotICAgICAgTGlzdCBuZXh0U2lnbmF0dXJlID0gKExpc3QpIHNldC5uZXh0KCk7Ci0KLSAgICAgIC8vIE9ubHkgY29udGludWUgaWYgdGhlIHNpZ25hdHVyZXMgYXJlIHRoZSBzYW1lIHNpemUKLSAgICAgIGlmIChuZXh0U2lnbmF0dXJlLnNpemUoKSA9PSBzaWduYXR1cmUuc2l6ZSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdGVyYXRvcjEgPSBuZXh0U2lnbmF0dXJlLml0ZXJhdG9yKCk7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yMiA9IHNpZ25hdHVyZS5pdGVyYXRvcigpOwotCi0gICAgICAgIC8vIEFzc3VtZSBzYW1lIHVudGlsIGEgZGlmZmVyZW5jZSBpcyBmb3VuZAotICAgICAgICBzYW1lID0gdHJ1ZTsKLQotICAgICAgICAvLyBQcm9jZXNzIGVhY2ggbGlzdCB1bnRpbCBhIGRpZmZlcmVuY2UgaXMgZm91bmQKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yMS5oYXNOZXh0KCkgJiYgaXRlcmF0b3IyLmhhc05leHQoKSAmJiBzYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGVsZW1lbnRzCi0gICAgICAgICAgT2JqZWN0IGVsZW1lbnQxID0gaXRlcmF0b3IxLm5leHQoKTsKLSAgICAgICAgICBPYmplY3QgZWxlbWVudDIgPSBpdGVyYXRvcjIubmV4dCgpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBzdHJpbmcsIHRoZW4gaWYgZXF1YWwgY2hlY2sgcGFydHMKLSAgICAgICAgICBpZiAoKGVsZW1lbnQxIGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICAgICAgJiYgKGVsZW1lbnQyIGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICAgICAgJiYgKCgoU3RyaW5nKSBlbGVtZW50MSkuZXF1YWxzKChTdHJpbmcpIGVsZW1lbnQyKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc2FtZSA9IHRydWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnRzIGFyZSBwYXJ0cywgdGhlbiBjaGVjayBpZiB0aGV5IGFyZSBlcXVhbAotICAgICAgICAgIGVsc2UgaWYgKChlbGVtZW50MSBpbnN0YW5jZW9mIFBhcnQpICYmIChlbGVtZW50MiBpbnN0YW5jZW9mIFBhcnQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNhbWUgPSBzYW1lUGFydHMoKFBhcnQpIGVsZW1lbnQxLCAoUGFydCkgZWxlbWVudDIpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzYW1lID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNhbWU7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdHdvIHBhcnRzIGFyZSB0aGUgc2FtZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBzYW1lUGFydHMoUGFydCBwYXJ0MSwgUGFydCBwYXJ0MikKLSAgewotICAgIGJvb2xlYW4gc2FtZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIHBhcnQgaGFzIGFuIGVsZW1lbnQgdGhlbiBzZWUgaWYgdGhleSBhcmUgdGhlIHNhbWUKLSAgICBpZiAocGFydDEuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsCi0gICAgICAmJiBwYXJ0Mi5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwKLSAgICAgICYmIHBhcnQxLmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKHBhcnQyLmdldEVsZW1lbnROYW1lKCkpKQotICAgIHsKLSAgICAgIHNhbWUgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBwYXJ0IGhhcyBhbiB0eXBlIHRoZW4gc2VlIGlmIHRoZXkgYXJlIHRoZSBzYW1lCi0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJ0MS5nZXRUeXBlTmFtZSgpICE9IG51bGwKLSAgICAgICAgJiYgcGFydDIuZ2V0VHlwZU5hbWUoKSAhPSBudWxsCi0gICAgICAgICYmIHBhcnQxLmdldFR5cGVOYW1lKCkuZXF1YWxzKHBhcnQyLmdldFR5cGVOYW1lKCkpKQotICAgIHsKLSAgICAgIHNhbWUgPSB0cnVlOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzYW1lID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNhbWU7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIC8vICEhIEFUVEVOVElPTgotICAgIC8vIEFuYWx5emUgc29hcGJpbmQ6Ym9keTpuYW1lc3BhY2UgYW5kIHNlcnZpY2UgdGFyZ2V0TmFtZXNwYWNlICAgICAgICAgICAgCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkNTk0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEyMS4KLSAqIENvbnRleHQ6Ci0gKiBGb3IgIGEgd3NkbDpiaW5kaW5nIGVsZW1lbnQgd2hpY2ggaXMgcmVmZXJlbmNlZCBkaXJlY3RseSBvciBhc3NvY2lhdGVkCi0gKiB3aXRoIGEgc3BlY2lmaWVkIHdzZGw6cG9ydC4KLSAqIAotICogQXNzZXJ0aW9uIERlc2NyaXB0aW9uOgotICogRWFjaCAgb3BlcmF0aW9uIHJlZmVyZW5jZWQgYnkgYSBkb2N1bWVudC1saXRlcmFsIGJpbmRpbmcgbXVzdCBoYXZlIGEKLSAqIG1lc3NhZ2UgZGVmaW5pdGlvbiB3aGVyZSB0aGUgd3NkbDpwYXJ0IHJlZmVyZW5jZXMgYSBnbG9iYWwgZWxlbWVudAotICogZGVmaW5pdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEJQMjEyMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0KLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEyMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPSBudWxsOwotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLSAgICAvLyBhc3NlcnQgc3R5bGUgIT0gbnVsbAotICAgIGlmICghV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQy5lcXVhbHMoc3R5bGUpKQotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyAhISBBVFRFTlRJT04KLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgc29hcGJvZHkgY2hpbGQgZWxlbWVudHMgaXMgaXRzIHBhcnRzLgotICAgIC8vIGFzc2VydCBzdHlsZSA9PSAiZG9jdW1lbnQiCi0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyhib2R5LmdldFVzZSgpKSkKLSAgICB7Ci0gICAgICAvLyBmaW5kIGNvcnJlc3BvbmRpbmcgbWVzc2FnZQotICAgICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgIC8vIGlmIHNvbWUgbGlua3MgYXJlIGJyb2tlbiwgY2FuY2VsIHByb2Nlc3NpbmcKLSAgICAgIGlmIChvcCA9PSBudWxsCi0gICAgICAgIHx8IChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQgJiYgb3AuZ2V0SW5wdXQoKSA9PSBudWxsKQotICAgICAgICB8fCAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCAmJiBvcC5nZXRPdXRwdXQoKSA9PSBudWxsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBNZXNzYWdlIG0gPQotICAgICAgICAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgICAgICAgID8gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICA6IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIGlmIChtID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgLy8gZmluZCBwYXJ0cyB3aGljaCBhcmUgaW52b2x2ZWQgaW4gdGhlIGdpdmVuIGJvZHkKLSAgICAgIExpc3QgcGFydHMgPQotICAgICAgICBXU0RMVXRpbC5nZXRQYXJ0cygKLSAgICAgICAgICBvcCwKLSAgICAgICAgICBtLAotICAgICAgICAgIGJvZHksCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQyk7Ci0gICAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICAvLyBjaGVjayBwYXJ0cwotICAgICAgSXRlcmF0b3IgaXQgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwID0gKFBhcnQpIGl0Lm5leHQoKTsKLSAgICAgICAgLy8gY2hlY2sgd2hldGhlciBwIGRlY2xhcmVkIGFzIGdsb2JhbCBlbGVtZW50Ci0gICAgICAgIGlmIChwLmdldEVsZW1lbnROYW1lKCkgPT0gbnVsbAotICAgICAgICAgIHx8IHJlZ2lzdHJ5LmdldFR5cGUocC5nZXRFbGVtZW50TmFtZSgpKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JzLmFkZChvcC5nZXROYW1lKCkpOwotICAgICAgICAgIC8vCQkJCQkJc3VwcHJlc3NlcyBzdWJzZXF1ZW50IHByb2Nlc3NpbmcsIGJlY2F1c2UgZXJyb3IgbGlzdCBjb250YWlucyBvbmx5IGZhaWxlZCBvcGVyYXRpb24KLSAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICByZWdpc3RyeSA9Ci0gICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgIHZhbGlkYXRvcik7Ci0KLSAgICAvLyBjb2xsZWN0IGFsbCB0eXBlcyBmcm9tIG1lc3NhZ2VzIHRvIGNoZWNrZWRQYXJ0cyBtYXAKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmNhZjExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotCi0KLS8qKgotICogQlAyMTIyLiAKLSAqICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiAgICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGRhdGEgdHlwZSBkZWZpbml0aW9uIGlmIGFueSB3aXRoaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCBpcyBhbiBYTUwgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgWE1MIFNjaGVtYSAxLjAgUmVjb21tZW5kYXRpb24gd2l0aCB0aGUgbmFtZXNwYWNlIFVSSSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMjIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotCi0gICAgLy8gR2V0IHRoZSB0eXBlcyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50OwotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgICAvLyBQcm9jZXNzIGVhY2ggZXh0LiBlbGVtZW50Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBJZiBpdCBpcyBhbiB1bmtub3duIGV4dC4gZWxlbWVudCBhbmQgaXQgaXMgYSBzY2hlbWEsIHRoZW4gY2hlY2sgaXQKLSAgICAgICAgaWYgKChleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoaSkpCi0gICAgICAgICAgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NJVGFnLkVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgc2NoZW1hIGRlZmluaXRpb24sIHRoZW4gaXQgaXMgYW4gZXJyb3IKLSAgICAgICAgICAgIGVycm9yTGlzdC5hZGQoCi0gICAgICAgICAgICAgIGV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiIGNhbiBub3QgYmUgYSBjaGlsZCBvZiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIFhNTFNjaGVtYVZhbGlkYXRvciBjb3VsZCBub3QgZmluZCBhbnkgZXJyb3JzLCBjaGVjayBlcnJvcnMgZnJvbSB0aGUgaW5saW5lIHNjaGVtYSB2YWxpZGF0b3IKLSAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICAgIGVycm9yTGlzdC5hZGQodmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXRTY2hlbWFzVmFsaWRhdGlvbkVycm9ycygpKTsKLQotICAgIGlmICghZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNWY4MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDIxMjMuIAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnMsIGlmIGl0IGNvbnRhaW5zIGEgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Q29udGFpbmVkIFdTREwgZXh0ZW5zaW9uIGVsZW1lbnRzIGRvIG5vdCB1c2UgdGhlIHdzZGw6cmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlIG9mICJ0cnVlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTIzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEyMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGNsYWltRm91bmQgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVF9LRVkgPSAicG9ydCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0tFWSA9ICJiaW5kaW5nIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRfVFlQRV9LRVkgPSAicG9ydCB0eXBlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRVJBVElPTl9LRVkgPSAib3BlcmF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfS0VZID0gIm1lc3NhZ2UiOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IHBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGNvbnRhaW5zTGVnYWxDbGFpbShwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgewotICAgICAgICBjbGFpbUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgY3R4LmFkZFBhcmFtZXRlcihQT1JUX0tFWSwgQm9vbGVhbi5UUlVFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY3R4LmFkZFBhcmFtZXRlcihQT1JUX0tFWSwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIEJvb2xlYW4gcG9ydCA9IChCb29sZWFuKSBjdHguZ2V0UGFyYW1ldGVyKFBPUlRfS0VZKTsKLQotICAgICAgaWYgKHBvcnQuYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoQklORElOR19LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgQklORElOR19LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oY29udGFpbnNMZWdhbENsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgdHlwZSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCb29sZWFuIGJpbmRpbmcgPSAoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihCSU5ESU5HX0tFWSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nLmJvb2xlYW5WYWx1ZSgpKQotICAgICAgewotICAgICAgICBjdHguYWRkUGFyYW1ldGVyKFBPUlRfVFlQRV9LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKHR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgUE9SVF9UWVBFX0tFWSwKLSAgICAgICAgICBuZXcgQm9vbGVhbihjb250YWluc0xlZ2FsQ2xhaW0odHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCb29sZWFuIHR5cGUgPSAoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihQT1JUX1RZUEVfS0VZKTsKLQotICAgICAgaWYgKHR5cGUuYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoT1BFUkFUSU9OX0tFWSwgQm9vbGVhbi5UUlVFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY2xhaW1Gb3VuZCA9IGNvbnRhaW5zQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgICAgICBjdHguYWRkUGFyYW1ldGVyKAotICAgICAgICAgIE9QRVJBVElPTl9LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oCi0gICAgICAgICAgICBjb250YWluc0xlZ2FsQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5NZXNzYWdlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtZXNzYWdlLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJvb2xlYW4gb3BlcmF0aW9uID0gKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoT1BFUkFUSU9OX0tFWSk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24uYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoTUVTU0FHRV9LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKG1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgTUVTU0FHRV9LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oY29udGFpbnNMZWdhbENsYWltKG1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KSB7Ci0gIAlpZiAob3BlcmF0aW9uICE9IG51bGwpIHsKLSAgCQlpZiAoY29udGFpbnNMZWdhbENsYWltKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkgewotICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oImJpbmRpbmcgb3BlcmF0aW9uIGZvdW5kIik7Ci0gIAkJfSBlbHNlIHsKLSAgCQkJCi0gIAkJfQotICAJfQotICB9Ci0gICovCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGJvb2xlYW4gcmVxdWlyZWQgPQotICAgICAgZWwgIT0gbnVsbAotICAgICAgICAmJiBlbC5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICAgJiYgZWwuZ2V0UmVxdWlyZWQoKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIGlmIChpc1BhcmVudENvbmZvcm1zKHBhcmVudCwgY3R4KSkKLSAgICB7Ci0gICAgICBpZiAocmVxdWlyZWQpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBlbC50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyZW50IGVsZW1lbnQgY29uZm9ybXMgdG8gdGhlIGJhc2ljIHByb2ZpbGUuCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogQHBhcmFtIGN0eAotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1BhcmVudENvbmZvcm1zKE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgUG9ydCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoUE9SVF9LRVkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nCi0gICAgICAgIHx8IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0Ci0gICAgICAgIHx8IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQKLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihCSU5ESU5HX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoUE9SVF9UWVBFX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICgKLSAgICAgIHBhcmVudCBpbnN0YW5jZW9mIE9wZXJhdGlvbgotICAgICAgICB8fCBwYXJlbnQgaW5zdGFuY2VvZiBJbnB1dAotICAgICAgICB8fCBwYXJlbnQgaW5zdGFuY2VvZiBPdXRwdXQKLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgRmF1bHQpCi0gICAgewotICAgICAgcmVzdWx0ID0gKChCb29sZWFuKSBjdHguZ2V0UGFyYW1ldGVyKE9QRVJBVElPTl9LRVkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgTWVzc2FnZSB8fCBwYXJlbnQgaW5zdGFuY2VvZiBQYXJ0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihNRVNTQUdFX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBFeHBlY3Qgd3NkbDpkZWZpbnRpb25zCi0gICAgRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAvLygoU2VydmljZSlkZWYuZ2V0U2VydmljZXMoKS52YWx1ZXMoKS50b0FycmF5KClbMF0pLmdldFBvcnRzKCkKLSAgICAvLyBUcmF2ZXJzZSBXU0RMCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vIFZpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0VHlwZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlRGVmaW5pdGlvbjJCaW5kaW5nKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yRWxlbWVudCgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVEZWZpbml0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yTWVzc2FnZSgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVEZWZpbml0aW9uMlBvcnRUeXBlKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yVHlwZXMoKTsKLQotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWYpOwotCi0gICAgaWYgKCFjbGFpbUZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkcpKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGZhaWx1cmVEZXRhaWxNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCB3aGV0aGVyIGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltcy4KLSAgICogUmV0dXJucyB0cnVlIGlmIGRvY3VtZW50YXRpb24gZWxlbWVudCBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbSB3aXRoCi0gICAqIGxlZ2FsIHNjaGVtYSBkZWZpbml0aW9uIFVSSS4gCi0gICAqIGxlZ2FsIGlzICdodHRwOi8vd3MtaS5vcmcvc2NoZW1hcy9jb25mb3JtYW5jZUNsYWltLycKLSAgICogQHBhcmFtIGVsCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zQ2xhaW0oRWxlbWVudCBlbCkKLSAgewotICAgIGlmIChlbCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIGZpbmQgY2xhaW0KLSAgICBlbCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0gICAgaWYgKGVsICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IHdoZXRoZXIgY29udGFpbnMgY29uZm9ybWFuY2UgY2xhaW1zLgotICAgKiBSZXR1cm5zIHRydWUgaWYgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltIHdpdGgKLSAgICogbGVnYWwgc2NoZW1hIGRlZmluaXRpb24gVVJJLiAKLSAgICogbGVnYWwgaXMgJ2h0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vJwotICAgKiBAcGFyYW0gZWwKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMZWdhbENsYWltKEVsZW1lbnQgZWwpCi0gIHsKLSAgICBpZiAoZWwgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBmaW5kIGNsYWltCi0gICAgZWwgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KGVsLCBXU0lfQ0xBSU0pOwotICAgIHdoaWxlIChlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB2YWx1ZSA9IGVsLmdldEF0dHJpYnV0ZShBVFRSX0NMQUlNX0NPTkZPUk1TVE8uZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwKLSAgICAgICAgJiYgdmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGVsID0gWE1MVXRpbHMuZmluZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0ZGRmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLS8qKgotICogQlAyMjAxLiAKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBXZWIgc2VydmljZSBkZWZpbml0aW9uIHdpdGhpbiBhIFdTREwgZG9jdW1lbnQgd2l0aCBhIFhNTCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuIDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudCB1c2VzIFVURi04IG9yIFVURi0xNiBmb3IgdGhlIGVuY29kaW5nLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMjAxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGNoYXJbXSBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXXsweDIwLAotICAgICAgMHg5LCAweEQsIDB4QSwgJ1wnJywgJ1wiJ307Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXXsnPSd9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVVEZfOF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURl8xNl9FTkNPRElORyA9ICJVVEYtMTYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTkNPRElOR19UT0tFTiA9ICJlbmNvZGluZyI7Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLAotICAgKiAgICAgIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKQotICAgICAgICAuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIFN0cmluZyB4bWxEZWNsID0gcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KGxvY2F0aW9uKTsKLSAgICBpZiAoeG1sRGVjbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSBlbHNlCi0gICAgewotICAgICAgaWYgKCF2YWxpZEVuY29kaW5nKHhtbERlY2wpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHhtbERlY2wsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogUmVhZHMgYW4gWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2NhdGlvbgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSTCB1cmwgPSBudWxsOwotICAgICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSBzaG91bGQgdHJ5IHRvIGFjY2VzcyBsb2NhdGlvbiBhcyBmaWxlCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHVybCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKHVybC5vcGVuU3RyZWFtKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGxvY2F0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGNoYXJDb2RlOwotICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICBpZiAocmVhZGVyLnJlYWR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICEoY2hhckNvZGUgPT0gJzwnKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNoYXJbXSBjID0gbmV3IGNoYXJbNF07Ci0gICAgICAgICAgcmVhZGVyLnJlYWQoYyk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBpZiAobmV3IFN0cmluZyhjKS50b0xvd2VyQ2FzZSgpLmVxdWFscygiP3htbCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjw/eG1sIik7Ci0gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIWVuZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotICAgICAgICAgICAgICBidWYuYXBwZW5kKChjaGFyKSBjaGFyQ29kZSk7Ci0gICAgICAgICAgICAgIGVuZCA9IGNoYXJDb2RlID09ICc+JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlc3VsdCBkb2VzIG5vdCBnZXQgcHJvcG9nYXRlZCBiYWNrIQotICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy9WRVJCT1NFCi0gICAgICAgIGlmICh2YWxpZGF0b3IudmVyYm9zZU9wdGlvbikKLSAgICAgICAgewotICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICBbV1NJMjIwMV0gRXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgICB9IGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIC8qCi0gICAqIFZlcmlmeSB4bWwgZGVjbGFyYXRpb24gY29udGFpbnMgdXRmLTE2IG9yIHV0Zi04IGVuY29kaW5nLiBAcGFyYW0geG1sRGVjbCAtCi0gICAqIHhtbCBkZWNsYXJhdGlvbiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRFbmNvZGluZyhTdHJpbmcgeG1sRGVjbCkKLSAgewotICAgIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaWYgKHhtbERlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKAotICAgICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTKTsKLSAgICAgIEVudW1lcmF0aW9uIHRva2VucyA9IHN0LnBhcnNlKHhtbERlY2wpOwotICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotICAgICAgICBpZiAodG9rZW4uZXF1YWxzKEVOQ09ESU5HX1RPS0VOKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICBTdHJpbmcgZW5jID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgcmVzdWx0ID0gVVRGXzhfRU5DT0RJTkcuZXF1YWxzSWdub3JlQ2FzZShlbmMpCi0gICAgICAgICAgICAgIHx8IFVURl8xNl9FTkNPRElORy5lcXVhbHNJZ25vcmVDYXNlKGVuYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWVkMGQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjIwMi4KLSAqICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDp0eXBlcyBlbGVtZW50IHdpdGhpbiBhIFdTREwgZG9jdW1lbnQgd2hpY2ggaW1wb3J0cyBhbiBYTUwgc2NoZW1hIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBpbXBvcnRlZCBzY2hlbWEgdXNlcyBVVEYtOCBvciBVVEYtMTYgZm9yIHRoZSBlbmNvZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMjAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMjAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgZmluYWwgY2hhcltdIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMgPQotICAgIG5ldyBjaGFyW10geyAweDIwLCAweDksIDB4RCwgMHhBLCAnXCcnLCAnXCInIH07Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXSB7ICc9JyB9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVVEZfOF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURl8xNl9FTkNPRElORyA9ICJVVEYtMTYiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEVOQ09ESU5HX1RPS0VOID0gImVuY29kaW5nIjsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgLy9EZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIExpc3QgZXh0cyA9IG51bGw7Ci0gICAgLy9pZiAoZGVmLmdldFR5cGVzKCkgIT0gbnVsbCkKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIC8vZXh0cyA9IGRlZi5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZXh0cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmIChleHRzICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICAgIGlmICgoZGVmaW5pdGlvbiA9Ci0gICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24odHlwZXMpKQotICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0eXBlcyBkZWZpbml0aW9uIGluIGFueSBXU0RMIGRvY3VtZW50LiIpOwotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBpdCA9IGV4dHMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChlbCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgICAgICYmIGVsLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKCgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpLAotICAgICAgICAgICAgICBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFpbXBvcnRGb3VuZCkKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBuIC0gbm9kZQotICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbiwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotCWlmICgobiE9IG51bGwpICYmICghcHJvY2Vzc2VkU2NoZW1hcy5jb250YWlucyhuKSkpCi0JewotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gaWYgeHNkOnNjaGVtYSBlbGVtZW50IGlzIGZvdW5kIC0+IHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByb2Nlc3NTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiB4c2Q6aW1wb3J0IGVsZW1lbnQgaXMgZm91bmQgLT4gbG9hZCBzY2hlbWEgYW5kIHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgLy8gZWxzZSBpdGVyYXRlIGVsZW1lbnQgcmVjdXJzaXZlbHkKLSAgICAgICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKG4uZ2V0Rmlyc3RDaGlsZCgpLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBJdCBsb2FkcyB4c2Qgc2NoZW1hIGFuZCB0aGVuIGNoZWNrIHZhbGlkIGVuY29kaW5nIGFuZCBsb29raW5nIGZvciB4c2Q6c2NoZW1hIGVsZW1lbnQgZm9yIG5leHQgcHJvY2Vzcy4gCi0gICAqIEBwYXJhbSBpbXBvcnROb2RlIC0geHNkIHNjaGVtYQotICAqLwotICBwcml2YXRlIHZvaWQgbG9hZFNjaGVtYShOb2RlIGltcG9ydE5vZGUsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLSAgICBFbGVtZW50IGltID0gKEVsZW1lbnQpIGltcG9ydE5vZGU7Ci0gICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgIC8vIHRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICBTdHJpbmcgZGVjbCA9Ci0gICAgICAgICAgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotICAgICAgICBpZiAoIXZhbGlkRGVjbGFyYXRpb24oZGVjbCwKLSAgICAgICAgICBFTkNPRElOR19UT0tFTiwKLSAgICAgICAgICBuZXcgU3RyaW5nW10geyBVVEZfOF9FTkNPRElORywgVVRGXzE2X0VOQ09ESU5HIH0pKQotICAgICAgICB7Ci0gICAgICAgICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9OQU1FU1BBQ0UpOwotICAgICAgICAgIGVycm9ycy5hZGQoKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkRGVjbGFyYXRpb24oZGVjbCwgInZlcnNpb24iLCBuZXcgU3RyaW5nW10geyAiMS4wIiB9KSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9ycy5hZGQoCi0gICAgICAgICAgICAiVmVyc2lvbiBudW1iZXIgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIG5vdCAxLjAuICBYTUwgc2NoZW1hIGZpbGU6ICIKLSAgICAgICAgICAgICAgKyBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERFQlVHOgotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSArICI6IiArIGNvbnRleHQpOwotCi0gICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0KLSAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgcHJvY2Vzc1NjaGVtYShzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KSwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZWFkcyBhbiBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LgotICAqIEBwYXJhbSBsb2NhdGlvbgotICAqIEByZXR1cm4gU3RyaW5nCi0gICovCi0gIHByaXZhdGUgU3RyaW5nIHJlYWRYTUxEZWNsYXJhdGlvblN0YXRlbWVudChTdHJpbmcgbG9jYXRpb24sIFN0cmluZyBiYXNlVVJJKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbmV3IFVSTChsb2NhdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICAvLyBub3RoaW5nCi0gICAgICBpbnQgaSA9IGJhc2VVUkkubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgIGludCBqID0gYmFzZVVSSS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICAgIGlmIChqID4gaSkKLSAgICAgICAgaSA9IGo7Ci0gICAgICBsb2NhdGlvbiA9IGJhc2VVUkkuc3Vic3RyaW5nKDAsIGkgKyAxKSArIGxvY2F0aW9uOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSTCB1cmwgPSBudWxsOwotICAgICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHdlIHNob3VsZCB0cnkgdG8gYWNjZXNzIGxvY2F0aW9uIGFzIGZpbGUKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcih1cmwub3BlblN0cmVhbSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IEZpbGVJbnB1dFN0cmVhbShsb2NhdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGNoYXJDb2RlOwotICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICBpZiAocmVhZGVyLnJlYWR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0KLSAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIShjaGFyQ29kZSA9PSAnPCcpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAnPCcpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgY2hhckNvZGUpOwotICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICFlbmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLSAgICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgY2hhckNvZGUpOwotCi0gICAgICAgICAgICAgIGVuZCA9IGNoYXJDb2RlID09ICc+JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgcmVzdWx0IGRvZXMgbm90IGdldCBwcm9wb2dhdGVkIGJhY2shCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHRoZSBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LiI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JzLmFkZChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0geG1sRGVjbCAtIHhtbCBkZWNsYXJhdGlvbgotICAgKiBAcmV0dXJuIGlmIHhtbCBkZWNsYXJhdGlvbiBjb250YWlucyBlbmNvZGluZz0idXRmLTE2IiBvciBlbmNvZGluZz0idXRmLTgiIGl0IHJldGlybnMgdHJ1ZS4gCi0gICovCi0KLSAgLy9wcml2YXRlIGJvb2xlYW4gdmFsaWRFbmNvZGluZyhTdHJpbmcgeG1sRGVjbCkKLSAgLy97Ci0gIC8vICAvL2Jvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gIC8vICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gIC8vICBpZiAoeG1sRGVjbCAhPSBudWxsKQotICAvLyAgewotICAvLyAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPQotICAvLyAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoCi0gIC8vICAgICAgICBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTLAotICAvLyAgICAgICAgWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMpOwotICAvLyAgICBFbnVtZXJhdGlvbiB0b2tlbnMgPSBzdC5wYXJzZSh4bWxEZWNsKTsKLSAgLy8gICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0gIC8vICAgIHdoaWxlICh0b2tlbnMuaGFzTW9yZUVsZW1lbnRzKCkgJiYgIWZvdW5kKQotICAvLyAgICB7Ci0gIC8vICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vCi0gIC8vICAgICAgaWYgKHRva2VuLmVxdWFscyhFTkNPRElOR19UT0tFTikpCi0gIC8vICAgICAgewotICAvLyAgICAgICAgZm91bmQgPSB0cnVlOwotICAvLwotICAvLyAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vICAgICAgICBTdHJpbmcgZW5jID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vCi0gIC8vICAgICAgICByZXN1bHQgPQotICAvLyAgICAgICAgIFVURl84X0VOQ09ESU5HLmVxdWFsc0lnbm9yZUNhc2UoZW5jKQotICAvLyAgICAgICAgICAgIHx8IFVURl8xNl9FTkNPRElORy5lcXVhbHNJZ25vcmVDYXNlKGVuYyk7Ci0gIC8vICAgICAgfQotICAvLyAgICB9Ci0gIC8vICB9Ci0gIC8vCi0gIC8vICByZXR1cm4gcmVzdWx0OwotICAvL30KLQotICAvKioKLSAgICogQHBhcmFtIHhtbERlY2wgLSB4bWwgZGVjbGFyYXRpb24KLSAgICogQHJldHVybiBpZiB4bWwgZGVjbGFyYXRpb24gY29udGFpbnMgdmFsaWQgdmVyc2lvbiBudW1iZXIgdGhlbiB0cnVlIGlzIHJldHVybmVkLiAKLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkRGVjbGFyYXRpb24oCi0gICAgU3RyaW5nIHhtbERlY2wsCi0gICAgU3RyaW5nIHRva2VuTmFtZSwKLSAgICBTdHJpbmdbXSBjaGVja1ZhbHVlTGlzdCkKLSAgewotICAgIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaWYgKHhtbERlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPQotICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKAotICAgICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsCi0gICAgICAgICAgWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMpOwotICAgICAgRW51bWVyYXRpb24gdG9rZW5zID0gc3QucGFyc2UoeG1sRGVjbCk7Ci0KLSAgICAgIGlmICh0b2tlbnMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLQotICAgICAgICAgIGlmICh0b2tlbi5lcXVhbHModG9rZW5OYW1lKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLQotICAgICAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdG9rZW5WYWx1ZSA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoZWNrVmFsdWVMaXN0Lmxlbmd0aCAmJiAhcmVzdWx0OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlTGlzdFtpXS5lcXVhbHNJZ25vcmVDYXNlKHRva2VuVmFsdWUpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0b2tlbnMgdGhlbiBpdCBpcyBub3QgYSB2YWxpZCBkZWNsYXJhY3Rpb24KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qCi0gICAqIEl0J3MgbG9va2luZyBmb3IgeHNkIGltcG9ydCBhbmQgbG9hZCBpdCBpZiBmaW5kLgotICAgKiBAcGFyYW0gc2NoZW1hIC0geHNkIHNjaGVtYQotICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gbmFtZXNwYWNlIG9mIHNjaGVtYQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NTY2hlbWEoTm9kZSBzY2hlbWEsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKHNjaGVtYSAhPSBudWxsKSAmJiAoIXByb2Nlc3NlZFNjaGVtYXMuY29udGFpbnMoc2NoZW1hKSkpCi0JewotCSAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0gICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbXBvcnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTk2MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIyMDguCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpvcGVyYXRpb24gaW4gYSB3c2RsOnBvcnRUeXBlIGRlZmluaXRpb248L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnQgaXMgZWl0aGVyIGEgV1NETCByZXF1ZXN0L3Jlc3BvbnNlIG9yIGEgb25lLXdheSBvcGVyYXRpb24gKG5vIE5vdGlmaWNhdGlvbiBvciBTb2xsaWNpdC1SZXNwb25zZSkuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjIwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjIwOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9Ci0gICAgICAoT3BlcmF0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIE9wZXJhdGlvblR5cGUgb3BUeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKChvcFR5cGUgPT0gbnVsbCkKLSAgICAgIHx8ICghb3BUeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLk9ORV9XQVkpCi0gICAgICAgICYmICFvcFR5cGUuZXF1YWxzKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSkpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgaWYgKG9wVHlwZSA9PSBudWxsKQotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbiB0eXBlIGZvciAiCi0gICAgICAgICAgICAgICsgb3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICIuIiwKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOyAvLyBub25lIGRlZmluZWQgaW4gVEFEIGF0IHByZXNlbnQgCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGYzZGE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNDAyLgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmJpbmRpbmcgZWxlbWVudCBoYXMgYSBzb2FwYmluZDpiaW5kaW5nIGNoaWxkIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjQwMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgLy8gR2V0IHRoZSBwb3J0IGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICAvL1BvcnQgcG9ydCA9IChQb3J0KSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gVHJ5IHRvIGdldCB0aGUgU09BUCBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBXU0RMVmFsaWRhdG9ySW1wbC5nZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBTT0FQIEJpbmRpbmcKLSAgICBpZiAoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg4ZThkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNDA0LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBjb250YWluZWQgc29hcDpiaW5kaW5nIGVsZW1lbnQgaGFzIGEgInRyYW5zcG9ydCIgYXR0cmlidXRlLCB3aGljaCBoYXMgdmFsdWU6IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyNDA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNDA0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIGJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBTb2FwIGJpbmRpbmcgbmFtZXNwYWNlIAotICAgIGlmICgoc29hcEJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIHx8IChzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSA9PSBudWxsKQotICAgICAgfHwgIXNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVBfSFRUUCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBzb2FwQmluZGluZyA9PSBudWxsCi0gICAgICAgICAgPyAiV1NETCBkb2N1bWVudCBkb2VzIG5vdCBjb250YWluIFNPQVAgYmluZGluZyBlbGVtZW50LiIKLSAgICAgICAgICA6IHNvYXBCaW5kaW5nLnRvU3RyaW5nKCksCi0gICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDVkOGVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjQwNi4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIHVzZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpmYXVsdCwgc29hcGJpbmQ6aGVhZGVyLCBvciBzb2FwYmluZDpoZWFkZXJmYXVsdCBlbGVtZW50cy48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHVzZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgb2YgImxpdGVyYWwiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDI0MDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDI0MDYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgU09BUCBib2R5IGVsZW1lbnRzICAgICAgCi0gICAgU09BUEJvZHlbXSBzb2FwQm9kaWVzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEJvZGllcyhiaW5kaW5nKTsKLQotICAgIC8vIEFERDogV2hhdCBoYXBwZW5zIGlmIHRoZXJlIGFyZSBubyBzb2FwIGJvZHkgZWxlbWVudHM/ICBSaWdodCBub3cgdGhlIFRBIHJlc3VsdCBpcyBOQS4gICAgICAKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9kaWVzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gc29hcEJvZGllc1tpXTsKLSAgICAgIGlmIChzb2FwQm9keS5nZXRVc2UoKSAhPSBudWxsCi0gICAgICAgICYmICFzb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChzb2FwQm9keS50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBmYXVsdCBlbGVtZW50cyAgICAgIAotICAgIFNPQVBGYXVsdFtdIHNvYXBGYXVsdHMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwRmF1bHRzKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBjb3JyZWN0IHVzZSB2YWx1ZSAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBGYXVsdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IHNvYXBGYXVsdHNbaV07Ci0gICAgICBpZiAoc29hcEZhdWx0LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgJiYgIXNvYXBGYXVsdC5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgIChmYWlsdXJlRGV0YWlsTWVzc2FnZSA9PSBudWxsCi0gICAgICAgICAgICA/IHNvYXBGYXVsdC50b1N0cmluZygpCi0gICAgICAgICAgICA6IGZhaWx1cmVEZXRhaWxNZXNzYWdlICsgIlxuXG4iICsgc29hcEZhdWx0LnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBoZWFkZXIgZWxlbWVudHMgICAgICAKLSAgICBTT0FQSGVhZGVyW10gc29hcEhlYWRlcnMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwSGVhZGVycyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwSGVhZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSBzb2FwSGVhZGVyc1tpXTsKLSAgICAgIGlmIChzb2FwSGVhZGVyLmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgJiYgIXNvYXBIZWFkZXIuZ2V0VXNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAoZmFpbHVyZURldGFpbE1lc3NhZ2UgPT0gbnVsbAotICAgICAgICAgICAgPyBzb2FwSGVhZGVyLnRvU3RyaW5nKCkKLSAgICAgICAgICAgIDogZmFpbHVyZURldGFpbE1lc3NhZ2UgKyAiXG5cbiIgKyBzb2FwSGVhZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBoZWFkZXIgZmF1bHQgZWxlbWVudHMgICAgICAKLSAgICBTT0FQSGVhZGVyRmF1bHRbXSBzb2FwSGVhZGVyRmF1bHRzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEhlYWRlckZhdWx0cyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwSGVhZGVyRmF1bHRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNPQVBIZWFkZXJGYXVsdCBzb2FwSGVhZGVyRmF1bHQgPSBzb2FwSGVhZGVyRmF1bHRzW2ldOwotICAgICAgaWYgKHNvYXBIZWFkZXJGYXVsdC5nZXRVc2UoKSAhPSBudWxsCi0gICAgICAgICYmICFzb2FwSGVhZGVyRmF1bHQuZ2V0VXNlKCkuZXF1YWxzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAoZmFpbHVyZURldGFpbE1lc3NhZ2UgPT0gbnVsbAotICAgICAgICAgICAgPyBzb2FwSGVhZGVyRmF1bHQudG9TdHJpbmcoKQotICAgICAgICAgICAgOiBmYWlsdXJlRGV0YWlsTWVzc2FnZSArICJcblxuIiArIHNvYXBIZWFkZXJGYXVsdC50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsLnNldEZhaWx1cmVNZXNzYWdlKGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBwYXNzZWQsIGJ1dCB0aGVyZSB3YXMgbm90aGluZyB0byBjaGVjayB0aGVuIHNldCB0byBub3RBcHBsaWNhYmxlCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRAotICAgICAgJiYgKHNvYXBCb2RpZXMgPT0gbnVsbCB8fCBzb2FwQm9kaWVzLmxlbmd0aCA9PSAwKQotICAgICAgJiYgKHNvYXBGYXVsdHMgPT0gbnVsbCB8fCBzb2FwRmF1bHRzLmxlbmd0aCA9PSAwKQotICAgICAgJiYgKHNvYXBIZWFkZXJzID09IG51bGwgfHwgc29hcEhlYWRlcnMubGVuZ3RoID09IDApCi0gICAgICAmJiAoc29hcEhlYWRlckZhdWx0cyA9PSBudWxsIHx8IHNvYXBIZWFkZXJGYXVsdHMubGVuZ3RoID09IDApKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTFlYmEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotKiBCUDI0MTYuIAotKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zPC9jb250ZXh0PgotKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5FdmVyeSBRTmFtZSBpbiB0aGUgV1NETCBkb2N1bWVudCBhbmQgaXRzIGltcG9ydHMsIGlzIHJlZmVyZW5jaW5nIGFuIGVsZW1lbnQgaW4gYSBuYW1lc3BhY2UgdGhhdCBoYXMgZWl0aGVyIGJlZW4gaW1wb3J0ZWQgb3IgZGVmaW5lZCBpbiB0aGUgV1NETCBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRoZSByZWZlcmVuY2UuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSovCi1wdWJsaWMgY2xhc3MgQlAyNDE2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQxNihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX0xJU1RfS0VZID0gIm5hbWVzcGFjZXMiOwotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0aGUgbmFtZXNwYWNlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEBwYXJhbSBxbmFtZQotICAgKiBAcGFyYW0gY3R4Ci0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tOYW1lc3BhY2UoUU5hbWUgcW5hbWUsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBxbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IG5hbWVzcGFjZXMgPSAoTGlzdCkgY3R4LmdldFBhcmFtZXRlcihOU19MSVNUX0tFWSk7Ci0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmNvbnRhaW5zKG5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9IG5hbWVzcGFjZTsKLQotICAgICAgICAgIGN0eC5jYW5jZWxQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gPz8/IHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgb3RoZXJ3aXNlICAKLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBvcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IHBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBjaGVja05hbWVzcGFjZShiaW5kaW5nLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHBUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpOwotICAgICAgaWYgKHBUeXBlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNoZWNrTmFtZXNwYWNlKHBUeXBlLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5PcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2hlY2tOYW1lc3BhY2UoaW5wdXQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0KLSAgICAgIE91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCk7Ci0gICAgICBpZiAob3V0cHV0ICE9IG51bGwgJiYgb3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjaGVja05hbWVzcGFjZShvdXRwdXQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0KLSAgICAgIE1hcCBmYXVsdHMgPSBvcGVyYXRpb24uZ2V0RmF1bHRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBmYXVsdHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgaXRlci5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKGZhdWx0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY2hlY2tOYW1lc3BhY2UoZmF1bHQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICAvKiBSRU1PVkU6IFRoaXMgaXMgYWxyZWFkeSBkb25lIGluIFdTSTI0MTcKLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtZXNzYWdlLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpIHsKLSAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKLSAgICAgTWFwIHBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXRlci5uZXh0KCk7Ci0gICAgICAgCi0gICAgICAgY2hlY2tOYW1lc3BhY2UocGFydC5nZXRFbGVtZW50TmFtZSgpLCBjdHgpOyAgICAgICAgICAgICAgICAKLSAgICAgICBjaGVja05hbWVzcGFjZShwYXJ0LmdldFR5cGVOYW1lKCksIGN0eCk7Ci0gICAgIH0KLSAgIH0KLSAgfQotICAqLwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gZ2V0IGxpc3Qgb2YgbmFtZXNwYWNlcyBpbXBvcnRlZCBhbmQgZGVmaW5lZCBpbiB0aGUgZGVmaW5pdGlvbgotICAgIExpc3QgbmFtZXNwYWNlcyA9IHRoaXMudmFsaWRhdG9yLmdldFdTRExUYXJnZXROYW1lc3BhY2VMaXN0KGRlZmluaXRpb24pOwotCi0gICAgLy8gUkVNT1ZFOgotICAgIC8vTWFwIG5hbWVzcGFjZXMgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQotICAgIC8vIHRyYXZlcnNlIGRlZmluaXRpb24gdG8gY2hlY2sgbmFtZXNwYWNlcwotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoTlNfTElTVF9LRVksIG5hbWVzcGFjZXMpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vIFZpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uLCBwYXJhbXMpOwotCi0gICAgaWYgKHJlc3VsdC5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpKQotICAgIHsKLSAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzQzZDQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDI0MTcuIAotICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9uczwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPkV2ZXJ5IFFOYW1lIGluIHRoZSBXU0RMIGRvY3VtZW50IGFuZCBpdHMgaW1wb3J0cyBhbmQgdGhhdCAKLSAqICAgICAgaXMgcmVmZXJyaW5nIHRvIGEgc2NoZW1hIGNvbXBvbmVudCwgdXNlcyB0aGUgbmFtZXNwYWNlIGRlZmluZWQgaW4gdGhlIHRhcmdldE5hbWVzcGFjZSAKLSAqICAgICAgYXR0cmlidXRlIG9uIHRoZSB4czpzY2hlbWEgZWxlbWVudCwgb3IgYSBuYW1lc3BhY2UgZGVmaW5lZCBpbiB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSAKLSAqICAgICAgb24gYW4geHM6aW1wb3J0IGVsZW1lbnQgd2l0aGluIHRoZSB4czpzY2hlbWEgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyNDE3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQxNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTElTVF9LRVkgPSAibmFtZXNwYWNlcyI7Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBuYW1lc3BhY2UgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCBpbiB0aGUgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIHFuYW1lCi0gICAqIEBwYXJhbSBjdHgKLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja05hbWVzcGFjZShRTmFtZSBxbmFtZSwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbmFtZXNwYWNlTGlzdCA9IChMaXN0KSBjdHguZ2V0UGFyYW1ldGVyKE5TX0xJU1RfS0VZKTsKLQotICAgICAgICBpZiAoKG5hbWVzcGFjZUxpc3QgIT0gbnVsbCkgJiYgIW5hbWVzcGFjZUxpc3QuY29udGFpbnMobmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9yTGlzdC5hZGQocW5hbWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG1lc3NhZ2UsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgTWFwIHBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotCi0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdGVyLm5leHQoKTsKLQotICAgICAgICBjaGVja05hbWVzcGFjZShwYXJ0LmdldEVsZW1lbnROYW1lKCksIGN0eCk7Ci0gICAgICAgIGNoZWNrTmFtZXNwYWNlKHBhcnQuZ2V0VHlwZU5hbWUoKSwgY3R4KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPQotICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgYSBsaXN0IG9mIGFsbCBzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlcwotICAgIExpc3QgdG5zTGlzdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCh0bnNMaXN0ID0gdGhpcy52YWxpZGF0b3IuZ2V0U2NoZW1hTmFtZXNwYWNlTGlzdChkZWZpbml0aW9uKSkgPT0gbnVsbCkKLSAgICAgICAgdG5zTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVGhpcyBleGNlcHRpb24gd291bGQgaW5kaWNhdGUgdGhhdCB0aGUgc2NoZW1hIGRlZmluaXRpb24gaGFkIGEgcHJvYmxlbQotICAgICAgdG5zTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICB9Ci0KLSAgICAvLyBBbHdheXMgYWRkIFhNTCBzY2hlbWEgbmFtZXNwYWNlIHRvIGNvdmVyIGJ1aWx0LWluIHR5cGVzCi0gICAgdG5zTGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpOwotCi0gICAgLy8gVHJhdmVyc2UgZGVmaW5pdGlvbiB0byBjaGVjayBzY2hlbWEgbmFtZXNwYWNlcwotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoTlNfTElTVF9LRVksIHRuc0xpc3QpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoZGVmaW5pdGlvbiwgcGFyYW1zKTsKLQotICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gZXJyb3JzLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgaWYgKGVycm9yTGlzdC5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlIGl0IGZhaWxlZCAvIGNyZWF0ZSB0aGUgZmFpbHVyZSBkZXRhaWwgdXNpbmcgdGhlIFFOYW1lcyB0aGF0IHdlcmUgaW4gZXJyb3IKLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvckxpc3QudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNjRlMTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0vKioKLSAgKiBCUDI3MDAuCi0gICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9ucyBlbGVtZW50IHdpdGhpbiBhIFdTREwgZG9jdW1lbnQuPC9jb250ZXh0PgotICAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmRlZmluaXRpb25zIGlzIGEgd2VsbC1mb3JtZWQgWE1MIDEuMCBkb2N1bWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICAqLwotcHVibGljIGNsYXNzIEJQMjcwMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvL1N0cmluZyB3c2RsVVJJID0gZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0RG9jdW1lbnRCYXNlVVJJKCk7ICAKLSAgICAgIC8vIFRFTVA6IE5lZWQgdG8gZGVmaW5lIGEgYmV0dGVyIHdheSB0byBnZXQgdGhlIFdTREwgVVJJCi0gICAgICBTdHJpbmcgd3NkbFVSSSA9IGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldFJlZmVyZW5jZUlEKCk7Ci0gICAgICAvLyBub24tdmFsaWRhdGluZyBwYXJzZQotICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwod3NkbFVSSSwgbnVsbCk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgIFV0aWxzLmdldEV4Y2VwdGlvbkRldGFpbHMoZS5nZXRUYXJnZXRFeGNlcHRpb24oKSksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKFV0aWxzLmdldEV4Y2VwdGlvbkRldGFpbHMoZSksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRjMWY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI3MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gICogQlAyNzAxLgotICAqICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudCB3aXRoaW4gYSBXU0RMIGRvY3VtZW50LjwvY29udGV4dD4KLSAgKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgd3NkbDpkZWZpbml0aW9ucyBuYW1lc3BhY2UgaGFzIHZhbHVlOiBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICAqLwotcHVibGljIGNsYXNzIEJQMjcwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8qCi0gICAgaWYgKGRlZiAhPSBudWxsKSB7Ci0gICAgCVFOYW1lIHFuYW1lID0gZGVmLmdldFFOYW1lKCk7Ci0gICAgCQkJCQotICAgIAlpZiAocW5hbWUgIT0gbnVsbCkgewkKLSAgICAJCS8vaWYgKGRlZi5nZXROYW1lc3BhY2UoIiIpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpIHsKLSAgICAJCWlmIChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkgewotICAgIAkJCXJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICAgICovCi0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgc2NoZW1hVXNlZCA9IHRoaXMudmFsaWRhdG9yLmdldFNjaGVtYVVzZWQoZGVmKTsKLSAgICAgIGlmIChzY2hlbWFVc2VkLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgLy9BREQ6IGZhaWx1cmUgZGVzY3JpcHRpb24/Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTI1NjUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI3MDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNzAzLgotICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZGVzY3JpcHRpb24gd2l0aGluIGEgV1NETCBkb2N1bWVudCwgaWYgaXQgdXNlcyB0aGUgV1NETCBuYW1lc3BhY2U8L2NvbnRleHQ+Ci0gKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgZGVmaW5pdGlvbiBjb25mb3JtcyB0byB0aGUgV1NETCBzY2hlbWEgbG9jYXRlZCBhdCBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLzIwMDMtMDItMTEueHNkPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjcwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gbm90ZSB0aGF0IHRoaXMgYXNzZXJ0aW9uIGlzIHJlZHVuZGFudCwgc2luY2UgdGhlIGJhc2Ugd3NkbCB2YWxpZGF0b3IgY2hlY2tzIHRoaXMgYWxyZWFkeS4KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyODAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyODAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNjAyYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjgwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLQotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjgwMwotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6aW1wb3J0IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJuYW1lc3BhY2UiIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgZm9yIHRoZSB3c2RsOmltcG9ydCBlbGVtZW50LCBhbmQgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIG5vdCBhIHJlbGF0aXZlIFVSSS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyODAzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyODAzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyB3c2RsOmltcG9ydAotICAgIEltcG9ydCBpbSA9IChJbXBvcnQpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgIm5hbWVzcGFjZSIgYXR0cmlidXRlIGluIHRoZSBpbXBvcnQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoaW0uZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgYSBuYW1lc3BhY2UgVVJJIGlzIHJlbGF0aXZlIG9yIGludmFsaWQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBVUkkgdXJpID0gbmV3IFVSSShpbS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAoIXVyaS5pc0Fic29sdXRlKCkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIGltLmdldE5hbWVzcGFjZVVSSSgpICsgIiBpcyByZWxhdGl2ZSBVUkkuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYzA2NWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLS8qKgotICogQlA0MjAwLiAKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zIHRoYXQgY29udGFpbnMgYSB3c2RsIGV4dGVuc2lvbiBlbGVtZW50IG9yIGF0dHJpYnV0ZSBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5Db250YWluZWQgV1NETCBleHRlbnNpb24gZWxlbWVudHMgdGhhdCBkbyBub3QgYmVsb25nIHRvIHRoZSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZXNwYWNlcyBtYXkgcmVxdWlyZSBvdXQgb2YgYmFuZCBuZWdvdGlhdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKi8KLXB1YmxpYyBjbGFzcyBCUDQyMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDQyMDAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBJZiBhIGNoaWxkIGVsZW1lbnQgb2Ygd3NkbDp0eXBlcyBpcyBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4KLSAgICAvLyAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFR5cGVzKQotICAgIHsKLSAgICAgIC8vaWYgKCFvYmouZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoCi0gICAgICAvLyAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpKQotICAgICAgLy97Ci0gICAgICAvLyAgQWRkIGVsZW1lbnQgbmFtZSB0byBlcnJvciBsaXN0Ci0gICAgICAvLyAgZXJyb3JMaXN0LmFkZChvYmouZ2V0RWxlbWVudFR5cGUoKSk7Ci0gICAgICAvL30KLSAgICB9Ci0gICAgLy8gb3IgYW55IG90aGVyIGV4dCBlbGVtZW50IGNvbWluZyBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4KLSAgICAvLyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLSAgICBlbHNlIGlmICghb2JqLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQKQotICAgIAkgICYmICFvYmouZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgZWxlbWVudCBuYW1lIHRvIGVycm9yIGxpc3QKLSAgICAgIGVycm9yTGlzdC5hZGQob2JqLmdldEVsZW1lbnRUeXBlKCkpOyAKLSAgICB9Ci0gIH0KLQotICAgLyoqCi0gICogIChub24tSmF2YWRvYykKLSAgKiAgQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotCi0gICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uKTsKLQotICAgIHRyeQotCXsKLSAgICAgIC8vIGdldHRpbmcgV1NETCBkb2N1bWVudC4KLSAgICAgIERvY3VtZW50IGRvYyA9IHZhbGlkYXRvci5wYXJzZVhNTERvY3VtZW50VVJMKGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG51bGwpOwotICAgICAgaWYgKGRvYyAhPSBudWxsKQotICAgICAgeyAgIAotICAgICAgICBjaGVja0VsZW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQotICAgICAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSArICJcblxuIiArIGVycm9yTGlzdC50b1N0cmluZygpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQl9ICAgCi0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLQl9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgb24gd3NkbCBlbGVtZW50cyByZWN1cnNpdmVseSB3aGV0aGVyIHRoZXkgY29udGFpbiBleHRlbnNpb24gYXR0cmlidXRlcy4KLSAgICogQHBhcmFtIGVsZW0gRWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja0VsZW1lbnQoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgd2hpbGUgKGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgZWxlbU5TID0gZWxlbS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRycyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgICAgaWYgKGF0dHJzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIEF0dHIgYXR0ciA9IChBdHRyKSBhdHRycy5pdGVtKGkpOwotICAgICAgICAgIFN0cmluZyBhdHRyTlMgPSBhdHRyLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgIGlmIChhdHRyTlMgIT0gbnVsbAotICAgICAgICAgICAgJiYgIWF0dHJOUy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUykKLSAgICAgICAgICAgICYmICFhdHRyTlMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkKLQkJCSYmICFhdHRyTlMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvckxpc3QuYWRkKCJFeHRlbnNpYmlsaXR5IGF0dHJpYnV0ZSAiICsgYXR0ci5nZXROYW1lKCkKLSAgICAgICAgICAgICAgKyAiZm9yIHRoZSAiICsgZWxlbS5nZXROb2RlTmFtZSgpICsgIiBlbGVtZW50IGlzIGZvdW5kLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIWVsZW1OUy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpKQotICAgICAgewotICAgICAgICBjaGVja0VsZW1lbnQoWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtKSk7Ci0gICAgICB9Ci0gICAgICBlbGVtID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbSk7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWYxMzFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotKiBCUDQyMDEuIAotKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDppbXBvcnQgZWxlbWVudCwgd2hlcmUgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBvciB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSB0aGF0IGlzIGEgcmVsYXRpdmUgVVJJLCBvciBhIGZvciBzb2FwOmFkZHJlc3MgZWxlbWVudCB3aGVyZSB0aGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGEgcmVsYXRpdmUgVVJJLjwvY29udGV4dD4KLSogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB1c2Ugb2YgYSByZWxhdGl2ZSBVUkkgYXMgdGhlIHZhbHVlIGZvciBhIHdzZGw6aW1wb3J0IGxvY2F0aW9uIG9yIG5hbWVzcGFjZSBhdHRyaWJ1dGUsIG9yIGZvciBhIHNvYXA6YWRkcmVzcyBsb2NhdGlvbiBhdHRyaWJ1dGUgbWF5IHJlcXVpcmUgb3V0IG9mIGJhbmQgY29vcmRpbmF0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0qLwotcHVibGljIGNsYXNzIEJQNDIwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDQyMDEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvckxpc3QgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyoqIAotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChJbXBvcnQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZihvYmogIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZihpc1JlbGF0aXZlVVJJKG9iai5nZXROYW1lc3BhY2VVUkkoKSkgfHwgCi0gICAgICAgICAgaXNSZWxhdGl2ZVVSSShvYmouZ2V0TG9jYXRpb25VUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIGVycm9yTGlzdC5hZGQob2JqLmdldE5hbWVzcGFjZVVSSSgpLCBvYmouZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqIAotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmKG9iaiAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAgT2JqZWN0IGUgPSAoT2JqZWN0KSBpdC5uZXh0KCk7Ci0gICAgICAgICAvLyBmb3IgZWFjaCBTT0FQQWRkcmVzcyBlbGVtZW50cyBjaGVjayBMb2NhdGlvblVSSSAKLSAgICAgICAgIGlmKGUgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgewotICAgICAgICAgICBpZihpc1JlbGF0aXZlVVJJKCgoU09BUEFkZHJlc3MpIGUpLmdldExvY2F0aW9uVVJJKCkpKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgZXJyb3JMaXN0LmFkZCgoKFNPQVBBZGRyZXNzKSBlKS5nZXRFbGVtZW50VHlwZSgpICsgCi0gICAgICAgICAgICAgICAgICI6IiArICgoU09BUEFkZHJlc3MpIGUpLmdldExvY2F0aW9uVVJJKCkpOwotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqICAobm9uLUphdmFkb2MpCi0gICAqICBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uKTsKLQotICAgIGlmIChlcnJvckxpc3QuaXNFbXB0eSgpKSAKLSAgICB7Ci0gICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgCi0gICAgICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgKFN0cmluZykgbnVsbCk7Ci0gICAgfQotICAgIAotICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHRlc3RBc3NlcnRpb24uZ2V0RmFpbHVyZU1lc3NhZ2UoKSArIAotICAgICAgICAiXG5cbiIgKyBlcnJvckxpc3QudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBVUkkgaXMgcmVsYXRpdmUgCi0gICAqIEBwYXJhbSBzIC0gVVJJCi0gICAqIEByZXR1cm4gdHJ1ZSAtIGlmIFVSSSBpcyByZWxhdGl2ZSwgZmFsc2UgLSBpbiBvdGhlciBjYXNlICAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1JlbGF0aXZlVVJJKFN0cmluZyBzKQotICB7Ci0gICAgaWYocyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKG5ldyBqYXZhLm5ldC5VUkkocykuaXNBYnNvbHV0ZSgpKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM3OTFlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWEuWE1MU2NoZW1hUHJvY2Vzc29yOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQNDIwMi4gCi0gKiA8Y29udGV4dD5Gb3IgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uIGRlZmluZWQgaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCwgb3IgaW1wb3J0ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBhIHNjaGVtYSBkZWZpbml0aW9uIGRlZmluZWQgaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCwgd2hpY2ggY29udGFpbnMgYW55IHNjaGVtYSBhbm5vdGF0aW9uIGVsZW1lbnRzLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BbiBYTUwgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LCBvciBpbXBvcnRlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5IGEgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LCBtYXkgdXNlIHNjaGVtYSBhbm5vdGF0aW9uIGVsZW1lbnRzIGFzIGFuIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLSBwdWJsaWMgY2xhc3MgQlA0MjAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcgCi0gewotICAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQNDIwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFOTk9UQVRJT05fS0VZID0gImFubm90YXRpb24iOwotICAgCi0gICBwcml2YXRlIEVycm9yTGlzdCBlcnJvckxpc3QgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gICBwcml2YXRlIEFubm90YXRpb25Qcm9jZXNzb3IgcHJvY2Vzc29yOwotCi0gICAvKiogCi0gICAgKiAobm9uLUphdmFkb2MpCi0gICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoTWVzc2FnZSwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAqLwotICAgcHVibGljIHZvaWQgdmlzaXQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICB7Ci0gICAgIGlmKChvYmogIT0gbnVsbCkgJiYgKG9iaiBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkpCi0gICAgIHsKLSAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBvYmo7Ci0gICAgICAgdHJ5IHsKLSAgICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzQWxsU2NoZW1hKGVsLmdldEVsZW1lbnQoKSk7Ci0gICAgICAgfSBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpIHt9Ci0gICAgIH0KLSAgIH0KLQotICAgLyoqCi0gICAgKiAgKG5vbi1KYXZhZG9jKQotICAgICogIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgICovCi0gICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgIHsKLSAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAgLy8gR2V0IHRoZSB0eXBlcyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgIFR5cGVzIHR5cGVzID0KLSAgICAgICAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgIAotICAgICBwcm9jZXNzb3IgPSBuZXcgQW5ub3RhdGlvblByb2Nlc3NvcigKLSAgICAgICAgICAgZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgICAKLSAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0gICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgIHRyYXZlcnNhbC50cmF2ZXJzZSh0eXBlcyk7Ci0gICAgIAotICAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkgCi0gICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgCi0gICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsIChTdHJpbmcpIG51bGwpOwotICAgICB9Ci0gICAgIAotICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCh0ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVNZXNzYWdlKCkgKyAKLSAgICAgICAgICJcblxuIiArIGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICAgfQotICAgCi0gICAvKioKLSAgICAqIENsYXNzIGZvciBwYXJzZSBzY2hlbWEgYW5kIHNlYXJjaCBhbm5vdGF0aW9uIGVsZW1lbnRzIAotICAgICovCi0gICBjbGFzcyBBbm5vdGF0aW9uUHJvY2Vzc29yIGV4dGVuZHMgWE1MU2NoZW1hUHJvY2Vzc29yCi0gICB7Ci0gICAgIHB1YmxpYyBBbm5vdGF0aW9uUHJvY2Vzc29yKFN0cmluZyBjb250ZXh0KQotICAgICB7Ci0gICAgICAgc3VwZXIoY29udGV4dCwgZmFsc2UpOwotICAgICB9Ci0KLSAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1NjaGVtYShFbGVtZW50IGVsZW1lbnQpCi0gICAgIHsKLSAgICAgICBjaGVja0ZvckFubm90YXRpb24oZWxlbWVudCk7Ci0gICAgIH0KLSAgICAgCi0gICAgIHByaXZhdGUgdm9pZCBjaGVja0ZvckFubm90YXRpb24oTm9kZSBub2RlKSAKLSAgICAgewotICAgICAgIGlmKChub2RlLmdldExvY2FsTmFtZSgpICE9IG51bGwpICYmIChub2RlLmdldExvY2FsTmFtZSgpLmVxdWFscyhBTk5PVEFUSU9OX0tFWSkpKSB7Ci0gICAgICAgICBlcnJvckxpc3QuYWRkKG5vZGUudG9TdHJpbmcoKSk7Ci0gICAgICAgfQotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5nZXRDaGlsZE5vZGVzKCkuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICB7Ci0gICAgICAgICBjaGVja0ZvckFubm90YXRpb24obm9kZS5nZXRDaGlsZE5vZGVzKCkuaXRlbShpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICB9Ci0gfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjIwOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyMjA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNGRkMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyMjA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0KLS8qKgotICogU1NCUDIyMDkKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6YmluZGluZyBiaW5kcyBldmVyeSB3c2RsOnBhcnQgb2YgYSB3c2RsOm1lc3NhZ2UgaW4gdGhlIHdzZGw6cG9ydFR5cGUgdG8gd2hpY2ggaXQgcmVmZXJzIHRvIG9uZSBvZiBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmZhdWx0IG9yIHNvYXBiaW5kOmhlYWRlcmZhdWx0LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBTU0JQMjIwOSBleHRlbmRzIEJQMjExNAotewotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgU1NCUDIyMDkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvU1NCUDI0MDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5MWYzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvU1NCUDI0MDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogU1NCUDI0MDIKLSAqLwotcHVibGljIGNsYXNzIFNTQlAyNDAyIGV4dGVuZHMgQlAyNDAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFNTQlAyNDAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjQwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MTMyMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVHJhdmVyc2FsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogU1NCUDI0MDMuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RGVzY2VuZGFudCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBpbiB0aGUgd3NkbDpiaW5kaW5nIGFyZSBub3QgZnJvbSB0aGUgbmFtZXNwYWNlcyBmb3IgdGhlIFdTREwgTUlNRSwgSFRUUCBHRVQvUE9TVCBvciBESU1FIGJpbmRpbmcgZXh0ZW5zaW9ucy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDI0MDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgU1NCUDI0MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVzIGFueSBXU0RMIE1JTUUsCi0gICAqIEhUVFAgR0VUL1BPU1Qgb3IgRElNRSBiaW5kaW5nIGV4dGVuc2lvbnMuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgYSBuYW1lc3BhY2UuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGhlIG5hbWVzcGFjZSBzcGVjaWZpZXMgYW55IFdTREwgTUlNRSwKLSAgICogICAgICAgICBIVFRQIEdFVC9QT1NUIG9yIERJTUUgYmluZGluZyBleHRlbnNpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzTm9uQ29uZm9ybWFudEJpbmRpbmdFeHRlbnNpb24oU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTRExfTUlNRSkKLSAgICAgICAgfHwgbmFtZXNwYWNlLmVxdWFscyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX0hUVFApCi0gICAgICAgIHx8IG5hbWVzcGFjZS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9ESU1FKSkKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4ZWwsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoaXNOb25Db25mb3JtYW50QmluZGluZ0V4dGVuc2lvbihleGVsCi0gICAgICAuZ2V0RWxlbWVudFR5cGUoKQotICAgICAgLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgIGVycm9ycy5hZGQoZXhlbC5nZXRFbGVtZW50VHlwZSgpKTsKLSAgICBlbHNlCi0gICAgewotICAgIAkvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgb2ssIGNoZWNrIHRoZSBkZXNjZW5kYW50cwotICAgICAgaWYgKGV4ZWwgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWwgPSAoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXhlbCkuZ2V0RWxlbWVudCgpOwotCi0gICAgICAgIC8vIHRyYXZlcnNlIGFsbCBvZiB0aGUgZGVzY2VuZGFudHMgYW5kIGNoZWNrIGZvciBub24gY29tcGxpYW50IGJpbmRpbmcgZXh0ZW5zaW9ucwotICAgICAgICBYTUxUcmF2ZXJzYWxDaGVja2luZ0V4dGVuc2lvbnMgdHJhdmVyc2FsID0KLSAgICAgICAgICBuZXcgWE1MVHJhdmVyc2FsQ2hlY2tpbmdFeHRlbnNpb25zKCk7Ci0gICAgICAgIHRyYXZlcnNhbC52aXNpdChlbCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBBIHNwZWNpYWxpemVkIFhNTFRyYXZlcnNhbCBjbGFzcyB0byBjaGVjayBpZiB0aGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQgaGFzIGFueSAKLSAgICogZGVzY2VuZGFudCBlbGVtZW50cy9hdHRyaWJ1dGVzIGZyb20gdGhlIG5hbWVzcGFjZXMgZm9yIHRoZSBXU0RMIE1JTUUsIAotICAgKiBIVFRQIEdFVC9QT1NUIG9yIERJTUUgYmluZGluZyBleHRlbnNpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBYTUxUcmF2ZXJzYWxDaGVja2luZ0V4dGVuc2lvbnMgZXh0ZW5kcyBYTUxUcmF2ZXJzYWwKLSAgewotICAgIGJvb2xlYW4gbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gZmFsc2U7Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLnhtbC5YTUxUcmF2ZXJzYWwjYWN0aW9uKG9yZy53M2MuZG9tLk5vZGUpCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gYWN0aW9uKE5vZGUgbikKLSAgICB7Ci0gICAgICByZXR1cm4gIW5vbkNvbmZvcm1hbnRFeHRlbnNpb25Gb3VuZDsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLnhtbC5YTUxWaXNpdG9yI3Zpc2l0KG9yZy53M2MuZG9tLkF0dHIpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoQXR0ciBub2RlKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb24obm9kZSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChpc05vbkNvbmZvcm1hbnRCaW5kaW5nRXh0ZW5zaW9uKG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JzLmFkZChub2RlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kueG1sLlhNTFZpc2l0b3IjdmlzaXQob3JnLnczYy5kb20uRWxlbWVudCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG5vZGUpCi0gICAgewotICAgICAgaWYgKGFjdGlvbihub2RlKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGlzTm9uQ29uZm9ybWFudEJpbmRpbmdFeHRlbnNpb24obm9kZS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvcnMuYWRkKG5vZGUuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgICAgbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBlbGVtZW50IGlzIGNvbXBsaWFudCwgY2hlY2sgYXR0cmlidXRlcyBhbmQgZGVzY2VuZGFudHMKLSAgICAgICAgICB2aXNpdChub2RlLmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgZm9yIChOb2RlIG4gPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIG4gIT0gbnVsbDsKLSAgICAgICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZG9WaXNpdChuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NETFZhbGlkYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0RMVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjMwM2NmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0RMVmFsaWRhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lSdW50aW1lRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkNhbmRpZGF0ZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5Q29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRmFpbHVyZURldGFpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRWxlbWVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLnNjaGVtYS5UYXJnZXROYW1lc3BhY2VQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWEuWE1MU2NoZW1hVmFsaWRhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAJKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgQmFzZVZhbGlkYXRvckltcGwKLSAgaW1wbGVtZW50cyBXU0RMVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBXU0RMIFVSTC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYWNjZXNzIHRoZSB3c2RsIHVybCB2aWEgd3NkbERvY3VtZW50IGZpZWxkLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB3c2RsVVJMOwotCi0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gdGVzdGFibGU7Ci0gIAotICAvKioKLSAgICogRW50cnkgY29udGFpbmVyIG1hcC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNoTWFwIGNvbnRhaW5lck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRGVmQXNzZXJ0aW9ucyA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXJ0aWZhY3QgdHlwZSB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gdGhlIGFydGlmYWN0IHR5cGUgKGEgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBcnRpZmFjdFR5cGUoKSAKLSAgeyAgCi0gICAgICByZXR1cm4gVFlQRV9ERVNDUklQVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKSAKLSAgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fSU1QT1JULAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fUE9SVAotICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvciNpbml0KG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQsIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCwgamF2YS5sYW5nLlN0cmluZywgb3JnLndzaS53c2RsLldTRExEb2N1bWVudCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGluaXQoYW5hbHl6ZXJDb250ZXh0LCBhc3NlcnRpb25zLCByZXBvcnRBcnRpZmFjdCwgYW5hbHl6ZXJDb25maWcsIHJlcG9ydGVyLCB0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyLAotICAgIGJvb2xlYW4gcHJvY2Vzc0RlZkFzc2VydGlvbnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQmFzZVZhbGlkYXRvckltcGwKLSAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgYXNzZXJ0aW9ucy5nZXRBcnRpZmFjdChUWVBFX0RFU0NSSVBUSU9OKSwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IGFuYWx5emVyQ29udGV4dC5nZXRXc2RsRG9jdW1lbnQoKTsKLSAgICB0ZXN0YWJsZSA9IGFuYWx5emVyQ29udGV4dC5nZXRXc2RsRG9jdW1lbnQoKSAhPSBudWxsOwotICAgIGlmICh0aGlzLndzZGxEb2N1bWVudCAhPSBudWxsKQotICAgICAgdGhpcy53c2RsVVJMID0gd3NkbERvY3VtZW50LmdldExvY2F0aW9uKCk7Ci0gICAgdGhpcy5wcm9jZXNzRGVmQXNzZXJ0aW9ucyA9IHByb2Nlc3NEZWZBc3NlcnRpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yI2luaXQob3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dCwgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0LCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcud3NpLndzZGwuV1NETERvY3VtZW50LCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgU3RyaW5nIHdzZGxVUkwsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFydGlmYWN0LCByZXBvcnRBcnRpZmFjdCwgd3NkbFVSTCwgd3NkbERvY3VtZW50LCByZXBvcnRlciwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBTdHJpbmcgd3NkbFVSTCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyLAotICAgIGJvb2xlYW4gcHJvY2Vzc0RlZkFzc2VydGlvbnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQmFzZVZhbGlkYXRvckltcGwKLSAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFydGlmYWN0LCByZXBvcnRBcnRpZmFjdCwgcmVwb3J0ZXIpOwotICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotICAgIHRlc3RhYmxlID0gKHdzZGxEb2N1bWVudCAhPSBudWxsKTsKLSAgICBpZiAod3NkbERvY3VtZW50ICE9IG51bGwpCi0gICAgICB0aGlzLndzZGxVUkwgPSB3c2RsRG9jdW1lbnQuZ2V0TG9jYXRpb24oKTsKLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICB0aGlzLndzZGxVUkwgPSB3c2RsVVJMOwotICAgIHRoaXMucHJvY2Vzc0RlZkFzc2VydGlvbnMgPSBwcm9jZXNzRGVmQXNzZXJ0aW9uczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvciN2YWxpZGF0ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy9XU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gbnVsbDsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLQotICAgIC8vIGl0IGRlcHJpY2F0ZWQgYWZ0ZXIgcmVmYWN0b3JpbmcgCi0gICAgLy8gbm93IHRoZSBpbm5lciBjbGFzc2VzIG1vdmVkIG91dCBmcm9tIHZhbGlkYXRvcgotICAgIC8vU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSArICIkIjsKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXggPSB0aGlzLmdldENsYXNzKCkuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSsiLiI7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZWxlbWVudAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpOwotCi0gICAgLy8gR2V0IHNlcnZpY2UgcmVmZXJlbmNlIGZyb20gYW5hbHl6ZXIgY29udGV4dAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSA9IGFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgbm9ybWFsaXplZCBkYXRhIGFib3V0IHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGUgPSBuZXcgQ2FuZGlkYXRlSW5mbyhzZXJ2aWNlUmVmZXJlbmNlLCB3c2RsRG9jdW1lbnQpOwotCi0gICAgYW5hbHl6ZXJDb250ZXh0LnNldENhbmRpZGF0ZUluZm8oY2FuZGlkYXRlKTsKLQotICAgIC8vIFNldCBwcmVyZXEgdHlwZSB0byBlbnRyeSBjb250YWluZXIKLSAgICByZXBvcnRlci5zZXRQcmVyZXFUeXBlKFJlcG9ydGVyLlBSRVJFUV9UWVBFX0VOVFJZX0NPTlRBSU5FUik7Ci0KLSAgICAvLyBhbHdheXMgcHJvY2VzcyBJbXBvcnQsIERlZmluaXRpb25zICYgVHlwZXMgYXNzZXJ0aW9ucyAKLSAgICAvLyBURU1QOgotICAgIGlmIChwcm9jZXNzRGVmQXNzZXJ0aW9ucykKLSAgICB7Ci0gICAgICBwcm9jZXNzRGVmaW5pdGlvbkFzc2VydGlvbnMoY2xhc3NQcmVmaXgsIGNhbmRpZGF0ZSk7Ci0gICAgICBwcm9jZXNzVHlwZXNBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBjYW5kaWRhdGUpOwotICAgICAgcHJvY2Vzc0ltcG9ydEFzc2VydGlvbnMoY2xhc3NQcmVmaXgsIGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gUHJvY2VzcyB0aGUgZWxlbWVudCBoaWVyYXJjaHkgaW4gdGhlIFdTREwgZG9jdW1lbnQgc3RhcnRpbmcgd2l0aCB0aGUgb25lIHRoYXQgd2FzIHNwZWNpZmllZCAgCi0gICAgLy8gRklYOiBFbGVtZW50IGZpbmRpbmcgYWxyZWFkeSBjb21wbGV0ZWQgYnkgQ2FuZGlkYXRlSW5mbyBjb25zdHJ1Y3RvciAtIHNvIHVzZSB0aGF0IHJhdGhlciB0aGFuIHJldGVzdCBoZXJlICAKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIHdzZGw6cG9ydAotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNQb3J0KCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgc2VydmljZSBlbGVtZW50Ci0gICAgICBpZiAoKHNlcnZpY2UgPQotICAgICAgICBkZWZpbml0aW9uLmdldFNlcnZpY2UoCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnRRTmFtZSgpKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBzZXJ2aWNlOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gRmluZCB0aGUgcG9ydCBlbGVtZW50Ci0gICAgICBpZiAoKHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIFdTREwgcG9ydDogIgotICAgICAgICAgICAgKyBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gVEVNUDogUmVtb3ZlIHVudGlsIHRoZXJlIGFyZSBwb3J0IHRlc3QgYXNzZXJ0aW9ucyAgICAgIAotICAgICAgLy9wcm9jZXNzUG9ydEFzc2VydGlvbnMocG9ydCwgc2VydmljZVJlZmVyZW5jZSwgY2xhc3NQcmVmaXgsIHdzZGxEb2N1bWVudCk7CSAgICAgCi0KLSAgICAgIC8vIE5leHQsIHByb2Nlc3MgdGhlIGJpbmRpbmcKLSAgICAgIGlmICgoKGJpbmRpbmcgPSBwb3J0LmdldEJpbmRpbmcoKSkgPT0gbnVsbCkgfHwgKGJpbmRpbmcuaXNVbmRlZmluZWQoKSkpCi0gICAgICB7Ci0gICAgICAgIC8vdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBiaW5kaW5nIGZvciBwb3J0OiAiICsgcG9ydC5nZXROYW1lKCkpOyAgCi0gICAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9ucyAKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJvY2Vzc0JpbmRpbmdBc3NlcnRpb25zKAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotCi0gICAgICAgIC8vIE5leHQsIHByb2Nlc3MgdGhlIHBvcnRUeXBlCi0gICAgICAgIGlmICgoKHBvcnRUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpKSA9PSBudWxsKQotICAgICAgICAgIHx8IChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBwb3J0VHlwZSBmb3IgYmluZGluZzogIiArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb25zIAotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpOwotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgYmluZGluZywKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzT3BlcmF0aW9uQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIHdzZGw6YmluZGluZwotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKTsKLSAgICAgIC8vIEZpbmQgdGhlIGJpbmRpbmcgZWxlbWVudAotICAgICAgaWYgKHdzZGxFbGVtZW50LmdldFFOYW1lKCkgIT0gbnVsbAotICAgICAgICAmJiB3c2RsRWxlbWVudC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICE9IG51bGwKLSAgICAgICAgJiYgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmICgoKGJpbmRpbmcgPQotICAgICAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSkpCi0gICAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgICB8fCAoYmluZGluZy5pc1VuZGVmaW5lZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBiaW5kaW5nOiAiCi0gICAgICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm9jZXNzQmluZGluZ0Fzc2VydGlvbnMoCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgICAvLyBOZXh0LCBwcm9jZXNzIHRoZSBwb3J0VHlwZQotICAgICAgICBpZiAoKChwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICB8fCAocG9ydFR5cGUuaXNVbmRlZmluZWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3Rocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIFdTREwgUG9ydFR5cGUgZm9yIEJpbmRpbmc6ICIgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb25zIAotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpOwotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzT3BlcmF0aW9uQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgICAgIC8vIFByb2Nlc3MgZWFjaCBtZXNzYWdlIHdpdGhpbiBlYWNoIG9wZXJhdGlvbiBvZiB0aGUgcG9ydFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBiaW5kaW5nCi0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgYmluZGluZyBlbGVtZW50IHNwZWNpZmljYXRpb24uICBUaGlzIGNhbiAKLSAgICAgIC8vIGhhcHBlbiB3aGVuIGEgVURESSB0TW9kZWwgZGlkIG5vdCBoYXZlIGEgdmFsaWQgYmluZGluZyByZWZlcmVuY2UuCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9ucyAKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gd3NkbDpwb3J0VHlwZQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnRUeXBlKCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgUG9ydFR5cGUgZWxlbWVudAotICAgICAgaWYgKCgocG9ydFR5cGUgPQotICAgICAgICBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRRTmFtZSgpKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBvcnRUeXBlLmlzVW5kZWZpbmVkKCkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGxvY2F0ZSBXU0RMIFBvcnRUeXBlOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXROYW1lKCkpOwotICAgICAgfQotCi0gICAgICAvLyBTZXQgbWlzc2luZ0lucHV0IGZvciBhbGwgYmluZGluZyB0ZXN0IGFzc2VydGlvbnMgCi0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpKTsKLQotICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgICAgIHBvcnRUeXBlLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgLy8gUHJvY2VzcyBlYWNoIG1lc3NhZ2Ugd2l0aGluIGVhY2ggb3BlcmF0aW9uIG9mIHRoZSBwb3J0VHlwZQotICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gd3NkbDpvcGVyYXRpb24KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNPcGVyYXRpb24oKSkKLSAgICB7Ci0gICAgICAvLyBGaW5kIHRoZSBvcGVyYXRpb24KLSAgICAgIC8vIGdldCBwb3J0VHlwZSBmcm9tIGNvbmZpZyBwYXJlbnQgZWxlbWVudAotICAgICAgaWYgKCgocG9ydFR5cGUgPQotICAgICAgICBkZWZpbml0aW9uLmdldFBvcnRUeXBlKAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBwb3J0VHlwZTogIgotICAgICAgICAgICAgKyBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCkpOwotICAgICAgfQotCi0gICAgICBpZiAoKChvcGVyYXRpb24gPQotICAgICAgICBnZXRPcGVyYXRpb25Gcm9tUG9ydFR5cGUoCi0gICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChvcGVyYXRpb24uaXNVbmRlZmluZWQoKSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIFdTREwgT3BlcmF0aW9uOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXROYW1lKCkKLSAgICAgICAgICAgICsgImluIHBvcnRUeXBlOiAiCi0gICAgICAgICAgICArIHBvcnRUeXBlLmdldFFOYW1lKCkpOwotICAgICAgfQotCi0gICAgICAvLyBTZXQgbWlzc2luZ0lucHV0IGZvciBhbGwgYmluZGluZyBhbmQgcG9ydFR5cGUgdGVzdCBhc3NlcnRpb25zIAotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFKSk7Ci0KLSAgICAgIHByb2Nlc3NPcGVyYXRpb25Bc3NlcnRpb25zKAotICAgICAgICBvcGVyYXRpb24sCi0gICAgICAgIHBvcnRUeXBlLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgb3BlcmF0aW9uLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyB3c2RsOm1lc3NhZ2UKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNNZXNzYWdlKCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgbWVzc2FnZQotICAgICAgaWYgKCgobWVzc2FnZSA9Ci0gICAgICAgIGRlZmluaXRpb24uZ2V0TWVzc2FnZShzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGxvY2F0ZSBXU0RMIE1lc3NhZ2U6ICIKLSAgICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgYW5kIG9wZXJhdGlvbiB0ZXN0IGFzc2VydGlvbnMgCi0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpKTsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSk7Ci0KLSAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAiVGhlIGZvbGxvd2luZyBXU0RMIHR5cGUgaXMgbm90IHN1cHBvcnRlZDogIgotICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFR5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYW51cAotICAgIGNsZWFudXAoKTsKLSAgfQotCi0gLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3IjdmFsaWRhdGUoKQotICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIHZhbGlkYXRlQXJ0aWZhY3QoKS4gKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCB2YWxpZGF0ZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRlQXJ0aWZhY3QoKTsKLSAgICAKLSAgICAvLyBSZXR1cm4gV1NETCBkb2N1bWVudAotICAgIHJldHVybiB0aGlzLndzZGxEb2N1bWVudDsKLSAgfQotICAvKioKLSAgICogR2V0IGVudHJ5IGNvbnRhaW5lciB1c2luZyB0aGUgZmlsZW5hbWUgZm9yIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBhIGZpbGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSBjb250YWluZXIgdXNpbmcgdGhlIGZpbGVuYW1lIGZvciBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5Q29udGFpbmVyIGdldEVudHJ5Q29udGFpbmVyKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIEVudHJ5Q29udGFpbmVyIGVudHJ5Q29udGFpbmVyID0gbnVsbDsKLQotICAgIC8vIElmIHRoZSBlbnRyeSBjb250YWluZXIgYWxyZWFkeSBleGlzdHMsIHRoZW4gdXNlIGl0Ci0gICAgaWYgKChlbnRyeUNvbnRhaW5lciA9IChFbnRyeUNvbnRhaW5lcikgY29udGFpbmVyTWFwLmdldChmaWxlbmFtZSkpID09IG51bGwpCi0gICAgewotICAgICAgLy8gQ3JlYXRlIG5ldyBlbnRyeSBjb250YWluZXIKLSAgICAgIGVudHJ5Q29udGFpbmVyID0gdGhpcy5yZXBvcnRlci5jcmVhdGVFbnRyeUNvbnRhaW5lcigpOwotCi0gICAgICAvLyBTZXQgY29udGFpbmVyIGlkIHVzaW5nIHRoZSBmaWxlbmFtZSBmb3IgdGhlIFdTREwgZG9jdW1lbnQKLSAgICAgIGVudHJ5Q29udGFpbmVyLnNldElkKGZpbGVuYW1lKTsKLQotICAgICAgLy8gUHV0IHRoZSBuZXcgZW50cnkgY29udGFpbmVyIGludG8gdGhlIGNvbnRhaW5lciBtYXAKLSAgICAgIGNvbnRhaW5lck1hcC5wdXQoZmlsZW5hbWUsIGVudHJ5Q29udGFpbmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG9wZXJhdGlvbiBmcm9tIHBvcnQgdHlwZS4KLSAgICogQHBhcmFtIHBvcnRUeXBlIHBvcnQgdHlwZS4KLSAgICogQHBhcmFtIG9wZXJhdGlvbk5hbWUgb3BlcmF0aW9uIG5hbWUuCi0gICAqIEByZXR1cm4gb3BlcmF0aW9uIGZyb20gcG9ydCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIE9wZXJhdGlvbiBnZXRPcGVyYXRpb25Gcm9tUG9ydFR5cGUoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUpCi0gIHsKLSAgICAvLyBGSVg6IHdzZGw0aiBhdmFpbGFibGUgbWV0aG9kIGNhbGwgYmVsb3cgaW1wbGllcyB0aGF0IG9ubHkgCi0gICAgLy8gbmFtZStpbnB1dG5hbWUrb3V0cHV0bmFtZSB1bmlxdWVseSBkZWZpbmVzIG9wZXJhdGlvbiAKLSAgICAvLyBVc2UgdGhpcyBpbnN0ZWFkIGZvciBub3c6IC0gZ2V0IHRoZSBmaXJzdCBvcGVyYXRpb24gd2UgZmluZC4uLgotICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIG9wSXQgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKG9wSXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBvcCA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMob3AuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBvcDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOyAvLyBubyBtYXRjaGluZyBvcGVyYXRpb24gZm91bmQKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGRlZmluaXRpb24gYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZSBjYW5kaWRhdGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0RlZmluaXRpb25Bc3NlcnRpb25zKAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEVudHJ5IGVudHJ5ID0gbnVsbDsKLQotICAgIERlZmluaXRpb25bXSB3c2RsRGVmaW5pdGlvbnMgPSBjYW5kaWRhdGUuZ2V0RGVmaW5pdGlvbnMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbERlZmluaXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxEZWZpbml0aW9uc1tpXTsKLSAgICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0RFRklOSVRJT05TKSk7Ci0gICAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGRlZmluaXRpb24pOwotCi0gICAgICAvLyBTZXQgZW50cnkgY29udGFpbmVyCi0gICAgICBlbnRyeS5zZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgZ2V0RW50cnlDb250YWluZXIoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpOwotCi0gICAgICAvLyBQcm9jZXNzIGFsbCBvZiB0aGUgZGVmaW5pdGlvbiByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkpKTsKLSAgICAgIC8vIEFERDogbmVlZCB0byB1c2UgaGVyZSB0aGUgc3BlY2lmaWMgZG9jdW1lbnQgY29ycmVzcG9uZGluZyB0byB0aGUgZGVmaW5pdGlvbj8/Ci0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyB0eXBlcyBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gY2FuZGlkYXRlIGNhbmRpZGF0ZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHByb2Nlc3NpbmcgCi0gICAqICAgICAgICAgdHlwZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1R5cGVzQXNzZXJ0aW9ucygKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgVHlwZXNbXSB3c2RsVHlwZXMgPSBjYW5kaWRhdGUuZ2V0VHlwZXMoKTsKLSAgICBEZWZpbml0aW9uW10gd3NkbERlZmluaXRpb25zID0gY2FuZGlkYXRlLmdldERlZmluaXRpb25zKCk7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdHlwZXMgZWxlbWVudHMsIHRoZW4gc2V0IGFsbCByZXN1bHRzIHRvIG1pc3NpbmdJbnB1dCAgIAotICAgIGlmICh3c2RsVHlwZXMgPT0gbnVsbCB8fCB3c2RsVHlwZXMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHRlc3QgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgZW50cnkgdHlwZQotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9UWVBFUykpOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgVHlwZXMgdHlwZXMgPSB3c2RsVHlwZXNbaV07Ci0gICAgICAgIGlmICh0eXBlcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gbm8gVHlwZXMgZWxlbWVudCBpbiBpLXRoIGRvY3VtZW50Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1RZUEVTKSk7Ci0gICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKAotICAgICAgICAgIGNhbmRpZGF0ZS5nZXREZWZpbml0aW9uKHR5cGVzKS5nZXREb2N1bWVudEJhc2VVUkkoKSArICItVHlwZXMiKTsKLSAgICAgICAgZW50cnkuc2V0RW50cnlEZXRhaWwodHlwZXMpOwotCi0gICAgICAgIC8vIFNldCBlbnRyeSBjb250YWluZXIKLSAgICAgICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICAgICAgZ2V0RW50cnlDb250YWluZXIod3NkbERlZmluaXRpb25zW2ldLmdldERvY3VtZW50QmFzZVVSSSgpKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIFR5cGVzIHJlbGF0ZWQgdGVzdCBhc3NlcnRpb25zCi0gICAgICAgIHByb2Nlc3NBc3NlcnRpb25zKAotICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIGNhbmRpZGF0ZS5nZXRXc2RsRG9jdW1lbnQoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGltcG9ydCBhc3NlcnRpb25zLiAKLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZSBjYW5kaWRhdGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIGltcG9ydCBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0ltcG9ydEFzc2VydGlvbnMoCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgSW1wb3J0W10gd3NkbEltcG9ydHMgPSBjYW5kaWRhdGUuZ2V0SW1wb3J0cygpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGltcG9ydCBlbGVtZW50cywgdGhlbiBzZXQgYWxsIHJlc3VsdHMgdG8gbWlzc2luZ0lucHV0ICAgCi0gICAgaWYgKHdzZGxJbXBvcnRzID09IG51bGwgfHwgd3NkbEltcG9ydHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHRlc3QgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgZW50cnkgdHlwZQotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9JTVBPUlQpKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsSW1wb3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IHdzZGxJbXBvcnQgPSB3c2RsSW1wb3J0c1tpXTsKLSAgICAgICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgICAgICBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9JTVBPUlQpKTsKLSAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQod3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKHdzZGxJbXBvcnQpOwotCi0gICAgICAgIC8vIFNldCBlbnRyeSBjb250YWluZXIKLSAgICAgICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoZ2V0RW50cnlDb250YWluZXIod3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIGltcG9ydCByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgICBwcm9jZXNzQXNzZXJ0aW9ucygKLSAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkpKTsKLSAgICAgICAgLy8gQUREOiBuZWVkIHRvIHVzZSBoZXJlIHRoZSBzcGVjaWZpYyBkb2N1bWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbXBvcnQhIQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHBvcnQgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIHBvcnQgYSBwb3J0LgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBwb3J0IGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUG9ydEFzc2VydGlvbnMoCi0gICAgUG9ydCBwb3J0LAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCSAgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQocG9ydC5nZXROYW1lKCkpOwotICAgIGVudHJ5LnNldFBhcmVudEVsZW1lbnROYW1lKAotICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnROYW1lKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKHBvcnQpOwotCi0gICAgLy8gUHJvY2VzcyBhc3NlcnRpb25zIGZvciB0aGlzIGFydGlmYWN0IGFnYWluc3QgdGhlIHRhcmdldCBjb250ZXh0Ci0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYmluZGluZyBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gYmluZGluZyBiaW5kaW5nLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBiaW5kaW5nIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzQmluZGluZ0Fzc2VydGlvbnMoCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgUU5hbWUgYmluZGluZ1FOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpOwotCi0gICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLSAgICAgIEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoYmluZGluZ1FOYW1lLnRvU3RyaW5nKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGJpbmRpbmcpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24oYmluZGluZyk7Ci0gICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICBnZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgKGRlZmluaXRpb24gPT0gbnVsbCA/IG51bGwgOiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKSkpOwotCi0gICAgLy8gUHJvY2VzcyBiaW5kaW5nIHRlc3QgYXNzZXJ0aW9ucwotICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB3c2RsRG9jdW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHBvcnQgdHlwZSBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBwb3J0IHR5cGUgYXNzZXJ0aW9ucy4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSkpOwotICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKHBvcnRUeXBlUU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgZW50cnkuc2V0RW50cnlEZXRhaWwocG9ydFR5cGUpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24ocG9ydFR5cGUpOwotICAgIGVudHJ5LnNldEVudHJ5Q29udGFpbmVyKAotICAgICAgZ2V0RW50cnlDb250YWluZXIoCi0gICAgICAgIChkZWZpbml0aW9uID09IG51bGwgPyBudWxsIDogZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpKTsKLQotICAgIC8vIFByb2Nlc3MgdGVzdCBhc3NlcnRpb25zCi0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3Mgb3BlcmF0aW9uIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBvcGVyYXRpb24gYW4gb3BlcmF0aW9uLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBvcGVyYXRpb24gYXNzZXJ0aW9ucy4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gcXVhbGlmeSBvcGVyYXRpb24gd2l0aCBzZXJ2aWNlIGxvY2F0aW9uIGZyb20gY29uZmlnLgkKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChvcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBlbnRyeS5zZXRQYXJlbnRFbGVtZW50TmFtZShwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICBlbnRyeS5zZXRFbnRyeURldGFpbChvcGVyYXRpb24pOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24ocG9ydFR5cGUpOwotICAgIGVudHJ5LnNldEVudHJ5Q29udGFpbmVyKAotICAgICAgZ2V0RW50cnlDb250YWluZXIoCi0gICAgICAgIChkZWZpbml0aW9uID09IG51bGwgPyBudWxsIDogZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpKTsKLQotICAgIC8vIFByb2Nlc3MgdGVzdCBhc3NlcnRpb25zCi0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3Mgb3BlcmF0aW9uIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBwb3J0VHlwZSBwb3J0IHR5cGUuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2UgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIG9wZXJhdGlvbiBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEZvciBlYWNoIG9wZXJhdGlvbiwgCi0gICAgaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0gICAgICBJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAob3BJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwgfHwgb3BlcmF0aW9uLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByb2Nlc3NPcGVyYXRpb25Bc3NlcnRpb25zKAotICAgICAgICAgICAgb3BlcmF0aW9uLAotICAgICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIG1lc3NhZ2UgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgTWVzc2FnZSBtZXNzYWdlLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEVudHJ5IGVudHJ5ID0gbnVsbDsKLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCk7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobWVzc2FnZVFOYW1lLnRvU3RyaW5nKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKG1lc3NhZ2UpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24obWVzc2FnZSk7Ci0gICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICBnZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgKGRlZmluaXRpb24gPT0gbnVsbCA/IG51bGwgOiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKSkpOwotCi0gICAgLy8gUHJvY2VzcyBiaW5kaW5nIHRlc3QgYXNzZXJ0aW9ucwotICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB3c2RsRG9jdW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIG1lc3NhZ2UgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBiaW5kaW5nLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQ7Ci0KLSAgICBpZiAoYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpICE9IG51bGwpCi0gICAgeyAvLyBjYW4gZG8gbm90aGluZyBpZiBoYXZlIG5vIG9wZXJhdGlvbnMgZGVmaW5lZAotICAgICAgbWVzc2FnZVNldCA9Ci0gICAgICAgIFdTRExVdGlscy5maW5kTWVzc2FnZXMod3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCksIGJpbmRpbmcpOwotCi0gICAgICAvLyBQcm9jZXNzIGFueSBtZXNzYWdlcyB0aGF0IHdlcmUgZm91bmQgICAgCi0gICAgICBpZiAobWVzc2FnZVNldC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXQgPSBtZXNzYWdlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG1lc3NhZ2VJdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKCFtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgbWVzc2FnZSBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgSGFzaFNldCBtZXNzYWdlU2V0ID0gbmV3IEhhc2hTZXQoKTsKLQotICAgIGlmIChwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBjYW4gZG8gbm90aGluZyBpZiBoYXZlIG5vIG9wZXJhdGlvbnMgZGVmaW5lZAotCi0gICAgICBJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChvcEl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0KLSAgICAgICAgLy8gU2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgd2UgaGF2ZSBib3RoIGFuZCBpbnB1dCBhbmQgb3V0cHV0IG1lc3NhZ2UsIAotICAgICAgICAvLyBjaGVjayBmb3IgaXRzIGV4aXN0ZW5jZSBiZWZvcmUgYWRkaW5nIGl0Ci0gICAgICAgIGlmIChvcC5nZXRJbnB1dCgpICE9IG51bGwgJiYgIW9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgbWVzc2FnZVNldC5hZGQob3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICAgIGlmIChvcC5nZXRPdXRwdXQoKSAhPSBudWxsCi0gICAgICAgICAgJiYgIW9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgLy8gYWxzbyBtZXNzYWdlcyBmcm9tIGFueSBGYXVsdHMgZGVmaW5lZCB3aXRoaW4gdGhlIG9wZXJhdGlvbgotICAgICAgICBpZiAob3AuZ2V0RmF1bHRzKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgICAgICB3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgbWVzc2FnZSA9ICgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICBpZiAoIW1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgbWVzc2FnZVNldC5hZGQobWVzc2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtZXNzYWdlU2V0LnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICAvLyBTZXQgYWxsIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb24gcmVzdWx0cyB0byBtaXNzaW5nSW5wdXQKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gbm93IHN0ZXAgdGhyb3VnaCBlYWNoIGRlcml2ZWQgTWVzc2FnZQotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXQgPSBtZXNzYWdlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgKE1lc3NhZ2UpIChtZXNzYWdlSXQubmV4dCgpKSwKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBvcCAtIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBjbGFzc1ByZWZpeCBjbGFzcyBwcmVmaXguCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgV1NETCBkb2N1bWVudC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHByb2Nlc3NpbmcgCi0gICAqICAgICAgICAgbWVzc2FnZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgIE9wZXJhdGlvbiBvcCwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIGlmIChvcC5nZXRJbnB1dCgpICE9IG51bGwgJiYgIW9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICBtZXNzYWdlU2V0LmFkZChvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICBpZiAob3AuZ2V0T3V0cHV0KCkgIT0gbnVsbCAmJiAhb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICBtZXNzYWdlU2V0LmFkZChvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgLy8gYWxzbyBtZXNzYWdlcyBmcm9tIGFueSBGYXVsdHMgZGVmaW5lZCB3aXRoaW4gdGhlIG9wZXJhdGlvbgotICAgIEl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICB3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgbWVzc2FnZSA9ICgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoIW1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgbWVzc2FnZVNldC5hZGQobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VTZXQuc2l6ZSgpID09IDApCi0gICAgewotICAgICAgLy8gU2V0IGFsbCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdHMgdG8gbWlzc2luZ0lucHV0Ci0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UpKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbm93IHN0ZXAgdGhyb3VnaCBlYWNoIGRlcml2ZWQgTWVzc2FnZQotICAgICAgSXRlcmF0b3IgbWVzc2FnZUl0ID0gbWVzc2FnZVNldC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG1lc3NhZ2VJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgICAoTWVzc2FnZSkgKG1lc3NhZ2VJdC5uZXh0KCkpLAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgdGFyZ2V0Q29udGV4dCkKLSAgewotICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSB0ZXN0IGFzc2VydGlvbiBlbnRyeSB0eXBlIG1hdGNoZXMgdGhlIHRhcmdldCBjb250ZXh0IGVudHJ5IHR5cGUsIHRoZW4gY29udGluZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uCi0gICAgICAuZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAgICAuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gQUREOgotCi0gICAgcmV0dXJuIG5vdEFwcGxpY2FibGU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBGYXVsdHMuCi0gICAqIAotICAgKiBAcGFyYW0gaW5CaW5kaW5nIGluIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gc29hcCBmYXVsdHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHByb2Nlc3NpbmcgYmluZGluZyBmYXVsdHMuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0W10gZ2V0U29hcEZhdWx0cyhCaW5kaW5nIGluQmluZGluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBWZWN0b3Igc29hcEZhdWx0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBiaW5kaW5nRmF1bHQgb25lIGF0IGEgdGltZQotICAgIEJpbmRpbmdGYXVsdFtdIGJpbmRpbmdGYXVsdHMgPSBnZXRBbGxCaW5kaW5nRmF1bHRzKGluQmluZGluZyk7Ci0gICAgZm9yIChpbnQgZmF1bHQgPSAwOyBmYXVsdCA8IGJpbmRpbmdGYXVsdHMubGVuZ3RoOyBmYXVsdCsrKQotICAgIHsKLSAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBnZXRTb2FwRmF1bHQoYmluZGluZ0ZhdWx0c1tmYXVsdF0pOwotICAgICAgaWYgKHNvYXBGYXVsdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBzb2FwRmF1bHRzLmFkZChzb2FwRmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICAgIFNPQVBGYXVsdFtdIHNvYXBGYXVsdEFycmF5ID0gbmV3IFNPQVBGYXVsdFtzb2FwRmF1bHRzLnNpemUoKV07Ci0gICAgc29hcEZhdWx0cy5jb3B5SW50byhzb2FwRmF1bHRBcnJheSk7Ci0KLSAgICByZXR1cm4gc29hcEZhdWx0QXJyYXk7Ci0gIH0KLQotICAvKioKLSAgKiBNZXRob2QgZ2V0QWxsQmluZGluZ0ZhdWx0cy4KLSAgKiAKLSAgKiBAcGFyYW0gaW5CaW5kaW5nIGJpbmRpbmcuCi0gICogQHJldHVybiBhbGwgYmluZGluZyBmYXVsdHMuCi0gICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICovCi0gIHByb3RlY3RlZCBCaW5kaW5nRmF1bHRbXSBnZXRBbGxCaW5kaW5nRmF1bHRzKEJpbmRpbmcgaW5CaW5kaW5nKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgVmVjdG9yIGZhdWx0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIHRyeQotICAgIHsKLQotICAgICAgSXRlcmF0b3IgYmluZGluZ09wZXJhdGlvbnMgPSBpbkJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoYmluZGluZ09wZXJhdGlvbnMuaGFzTmV4dCgpKQotICAgICAgewotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBibyA9IChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nT3BlcmF0aW9ucy5uZXh0KCk7Ci0gICAgICAgICAgSXRlcmF0b3IgYmluZGluZ0ZhdWx0cyA9IGJvLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChiaW5kaW5nRmF1bHRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIGZhdWx0cy5hZGQoKEJpbmRpbmdGYXVsdCkgYmluZGluZ0ZhdWx0cy5uZXh0KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgewotCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gbm8gYmluZGluZyBvcGVyYXRpb25zIGluIHRoaXMgYmluZGluZyAtIGlnbm9yZSAmIGNvbnRpbnVlCi0gICAgfQotCi0gICAgQmluZGluZ0ZhdWx0W10gZmF1bHRBcnJheSA9IG5ldyBCaW5kaW5nRmF1bHRbZmF1bHRzLnNpemUoKV07Ci0gICAgZmF1bHRzLmNvcHlJbnRvKGZhdWx0QXJyYXkpOwotCi0gICAgcmV0dXJuIGZhdWx0QXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFdTRExGYXVsdHMuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0ZhdWx0IGEgYmluZGluZyBmYXVsdC4KLSAgICogQHJldHVybiBXU0RMIGZhdWx0cy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0IGdldFNvYXBGYXVsdChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSXRlcmF0b3IgZmF1bHRFeHRlbnNpYmxlcyA9Ci0gICAgICAgIGJpbmRpbmdGYXVsdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoZmF1bHRFeHRlbnNpYmxlcy5oYXNOZXh0KCkgJiYgc29hcEZhdWx0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEZhdWx0ID0gKFNPQVBGYXVsdCkgZmF1bHRFeHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgICAgICB7IC8vIGlnbm9yZSBldmVyeXRoaW5nIGJ1dCBTT0FQIEZhdWx0IGVsZW1lbnRzLgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRTb2FwSGVhZGVyLgotICAgKiAKLSAgICogQHBhcmFtIGluQmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gU09BUCBoZWFkZXJzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVyW10gZ2V0U29hcEhlYWRlcnMoQmluZGluZyBpbkJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBhbGwgYmluZGluZ3MKLSAgICBCaW5kaW5nW10gYmluZGluZ0xpc3QgPSBuZXcgQmluZGluZ1sxXTsKLSAgICBiaW5kaW5nTGlzdFswXSA9IGluQmluZGluZzsKLQotICAgIFZlY3RvciBzb2FwSGVhZGVyTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBiaW5kaW5nIG9uZSBhdCBhIHRpbWUKLSAgICBmb3IgKGludCBiaW5kaW5nID0gMDsgYmluZGluZyA8IGJpbmRpbmdMaXN0Lmxlbmd0aDsgYmluZGluZysrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBnZXQgdGhlIGxpc3Qgb2YgYmluZGluZyBPcGVyYXRpb25zCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBiaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgICAgKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ0xpc3RbYmluZGluZ10KLSAgICAgICAgICAgIC5nZXRCaW5kaW5nT3BlcmF0aW9ucygpCi0gICAgICAgICAgICAudG9BcnJheSgKLSAgICAgICAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLQotICAgICAgICAvLyBnZXQgcmVmZXJlbmNlcyB0byB0aGUgZXh0ZW5zaWJsZSBlbGVtZW50cyB3aXRoaW4gdGhlIDxpbnB1dD4gYW5kIDxvdXRwdXQ+IGVsZW1lbnRzIG9mIHRoaXMgYmluZGluZyA8b3BlcmF0aW9uPi4gCi0gICAgICAgIGZvciAoaW50IGJvID0gMDsgYm8gPCBiaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IGJvKyspCi0gICAgICAgIHsKLQotICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgaW5wdXQvb3V0cHV0IGV4dGVuc2libGVzLCBsb29raW5nIGZvciA8U09BUDpCb2R5PiBlbGVtZW50cy4KLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbnNbYm9dLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0KLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNbYm9dLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAgICAgSXRlcmF0b3IgZXh0RWxlbWVudHMgPQotICAgICAgICAgICAgICBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChleHRFbGVtZW50cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc29hcEhlYWRlckxpc3QuYWRkKChTT0FQSGVhZGVyKSBleHRFbGVtZW50cy5uZXh0KCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgeyAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgU09BUCBIZWFkZXIuCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXh0RWxlbWVudHMgPSBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoZXh0RWxlbWVudHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNvYXBIZWFkZXJMaXN0LmFkZCgoU09BUEhlYWRlcikgZXh0RWxlbWVudHMubmV4dCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgSGVhZGVyLgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsgLy8gbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgPGlucHV0PiBvciA8b3V0cHV0PiAtIGlnbm9yZSA6IG5vdCBjaGVja2luZyB0aGlzIGhlcmUuCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gYmluZGluZyBvcGVyYXRpb25zIGluIHRoaXMgYmluZGluZyAtIGlnbm9yZSAmIGNvbnRpbnVlCi0gICAgICB9Ci0gICAgfQotCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJBcnJheSA9IG5ldyBTT0FQSGVhZGVyW3NvYXBIZWFkZXJMaXN0LnNpemUoKV07Ci0gICAgc29hcEhlYWRlckxpc3QuY29weUludG8oc29hcEhlYWRlckFycmF5KTsKLQotICAgIHJldHVybiBzb2FwSGVhZGVyQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBIZWFkZXJGYXVsdHMuCi0gICAqIAotICAgKiBXU0RMRG9jdW1lbnQgZ2V0dGVyIG1ldGhvZCAtIG1heWJlIGJldHRlciBvZmYgaW4gY2xhc3MgV1NETERvY3VtZW50Li4uCi0gICAqIAotICAgKiBAcGFyYW0gaW5CaW5kaW5nIGEgYmluZGluZy4KLSAgICogQHJldHVybiBTT0FQIGhlYWRlciBmYXVsdHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBIZWFkZXJGYXVsdFtdIGdldFNvYXBIZWFkZXJGYXVsdHMoQmluZGluZyBpbkJpbmRpbmcpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVmVjdG9yIHNvYXBIZWFkZXJGYXVsdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgU09BUCBoZWFkZXJzCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJBcnJheSA9IGdldFNvYXBIZWFkZXJzKGluQmluZGluZyk7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IGFuZCBnZXQgdGhlIGhlYWRlciBmYXVsdHMKLSAgICBMaXN0IGxpc3QgPSBudWxsOwotICAgIGZvciAoaW50IGhlYWRlciA9IDA7IGhlYWRlciA8IHNvYXBIZWFkZXJBcnJheS5sZW5ndGg7IGhlYWRlcisrKQotICAgIHsKLSAgICAgIC8vIEdldCBsaXN0IGZvciB0aGlzIGhlYWRlcgotICAgICAgaWYgKChsaXN0ID0gc29hcEhlYWRlckFycmF5W2hlYWRlcl0uZ2V0U09BUEhlYWRlckZhdWx0cygpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBBZGQgdG8gcHJpbWFyeSBsaXN0ICAgICAgCi0gICAgICAgIHNvYXBIZWFkZXJGYXVsdExpc3QuYWRkQWxsKGxpc3QpOwotICAgICAgfQotICAgIH0KLQotICAgIFNPQVBIZWFkZXJGYXVsdFtdIHNvYXBIZWFkZXJGYXVsdEFycmF5ID0KLSAgICAgIG5ldyBTT0FQSGVhZGVyRmF1bHRbc29hcEhlYWRlckZhdWx0TGlzdC5zaXplKCldOwotICAgIHNvYXBIZWFkZXJGYXVsdExpc3QuY29weUludG8oc29hcEhlYWRlckZhdWx0QXJyYXkpOwotCi0gICAgcmV0dXJuIHNvYXBIZWFkZXJGYXVsdEFycmF5OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRTb2FwQm9kaWVzLgotICAgKiAKLSAgICogV1NETERvY3VtZW50IGdldHRlciBtZXRob2QgLSBtYXliZSBiZXR0ZXIgb2ZmIGluIGNsYXNzIFdTRExEb2N1bWVudC4uLgotICAgKiAKLSAgICogQHBhcmFtIGluQmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gU09BUCBib2RpZXMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBCb2R5W10gZ2V0U29hcEJvZGllcyhCaW5kaW5nIGluQmluZGluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUkVNT1ZFOiBHZXQgYWxsIGJpbmRpbmdzCi0gICAgLy9CaW5kaW5nW10gYmluZGluZ0xpc3QgPSB3c2RsRG9jdW1lbnQuZ2V0QmluZGluZ3MoKTsKLSAgICBCaW5kaW5nW10gYmluZGluZ0xpc3QgPSBuZXcgQmluZGluZ1sxXTsKLSAgICBiaW5kaW5nTGlzdFswXSA9IGluQmluZGluZzsKLQotICAgIFZlY3RvciBzb2FwQm9kaWVzID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gR28gdGhyb3VnaCBlYWNoIGJpbmRpbmcgb25lIGF0IGEgdGltZQotICAgIGZvciAoaW50IGJpbmRpbmcgPSAwOyBiaW5kaW5nIDwgYmluZGluZ0xpc3QubGVuZ3RoOyBiaW5kaW5nKyspCi0gICAgewotICAgICAgLy8gZ2V0IHRoZSBsaXN0IG9mIGJpbmRpbmcgT3BlcmF0aW9ucwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIGJpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ0xpc3RbYmluZGluZ10KLSAgICAgICAgICAuZ2V0QmluZGluZ09wZXJhdGlvbnMoKQotICAgICAgICAgIC50b0FycmF5KAotICAgICAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLQotICAgICAgLy8gZ2V0IHJlZmVyZW5jZXMgdG8gdGhlIGV4dGVuc2libGUgZWxlbWVudHMgd2l0aGluIHRoZSA8aW5wdXQ+IGFuZCA8b3V0cHV0PiBlbGVtZW50cyBvZiB0aGlzIGJpbmRpbmcgPG9wZXJhdGlvbj4uIAotICAgICAgZm9yIChpbnQgYm8gPSAwOyBibyA8IGJpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgYm8rKykKLSAgICAgIHsKLQotICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGlucHV0L291dHB1dCBleHRlbnNpYmxlcywgbG9va2luZyBmb3IgPFNPQVA6Qm9keT4gZWxlbWVudHMuCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaW5wdXRFeHRlbnNpYmxlcyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uc1tib10KLSAgICAgICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpCi0gICAgICAgICAgICAgIC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgICAgICAgICAgICAuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaW5wdXRFeHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBCb2RpZXMuYWRkKChTT0FQQm9keSkgaW5wdXRFeHRlbnNpYmxlcy5uZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgeyAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgU09BUCBCb2R5IGVsZW1lbnRzLgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgeyAvLyBubyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciA8aW5wdXQ+IC0gaWdub3JlIDogbm90IGNoZWNraW5nIHRoaXMgaGVyZS4KLSAgICAgICAgfQotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3Igb3V0cHV0RXh0ZW5zaWJsZXMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNbYm9dCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nT3V0cHV0KCkKLSAgICAgICAgICAgICAgLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAgICAgICAgICAgIC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChvdXRwdXRFeHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBCb2RpZXMuYWRkKChTT0FQQm9keSkgb3V0cHV0RXh0ZW5zaWJsZXMubmV4dCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgQm9keSBlbGVtZW50cy4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpCi0gICAgICAgIHsgLy8gbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgPG91dHB1dD4uCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBTT0FQQm9keVtdIHNvYXBCb2R5QXJyYXkgPSBuZXcgU09BUEJvZHlbc29hcEJvZGllcy5zaXplKCldOwotICAgIHNvYXBCb2RpZXMuY29weUludG8oc29hcEJvZHlBcnJheSk7Ci0KLSAgICByZXR1cm4gc29hcEJvZHlBcnJheTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0U29hcEJvZHkuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0lucHV0IGEgQmluZGluZ0lucHV0IG9iamVjdC4KLSAgICogQHJldHVybiAgYm9keS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJvZHkgZ2V0U29hcEJvZHkoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IG51bGw7Ci0KLSAgICBJdGVyYXRvciBleHRlbnNpYmxlcyA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZSBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgewotICAgICAgICBzb2FwQm9keSA9IChTT0FQQm9keSkgZXh0ZW5zaWJsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzb2FwQm9keTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0U29hcEJvZHkuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ091dHB1dCBhIEJpbmRpbmdPdXRwdXQgb2JqZWN0LgotICAgKiBAcmV0dXJuIFNPQVAgYm9keS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJvZHkgZ2V0U29hcEJvZHkoQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBudWxsOwotCi0gICAgSXRlcmF0b3IgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGV4dGVuc2libGVzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBPYmplY3QgZXh0ZW5zaWJsZSA9IGV4dGVuc2libGVzLm5leHQoKTsKLSAgICAgIGlmIChleHRlbnNpYmxlIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICB7Ci0gICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBleHRlbnNpYmxlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvYXBCb2R5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzY2hlbWEgdXNlZC4KLSAgICogQHBhcmFtIGRlZiBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFNjaGVtYSB1c2VkLgotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgcHJvYmxlbSBnZXR0aW5nIFdTREwgZGVmaW50aW9ucyAKLSAgICogICAgICAgICBuYW1lc3BhY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFNjaGVtYVVzZWQoRGVmaW5pdGlvbiBkZWYpIHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgc2NoZW1hVXNlZCA9ICIiOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gTmVlZCB0byByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBzaW5jZSBXU0RMNEogYWx3YXlzIHB1dHMgaW4gdGhlIGRlZmF1bHQgV1NETCBuYW1lc3BhY2UKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gd3NkbERvY3VtZW50LmdldERvY3VtZW50KCk7Ci0gICAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZG9jdW1lbnQgPSBwYXJzZVhNTERvY3VtZW50VVJMKGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbnVsbCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkb2N1bWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgICAvLyBHZXQgdGhlIG5hbWVzcGFjZSBmb3IgdGhpcyBlbGVtZW50Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgc2NoZW1hVXNlZCA9IGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3ZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigicHJvYmxlbSBnZXR0aW5nIFdTREwgZGVmaW50aW9ucyBuYW1lc3BhY2UiKTsKLSAgICB9Ci0KLSAgICAvKgotICAgIC8vIEdldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICBTdHJpbmcgc2NoZW1hVXNlZCA9IGRlZi5nZXROYW1lc3BhY2UoIiIpOwotICAgIAotICAgIC8vIElmIHRoZSBkZWZhdWx0IHdhcyBzZXQsIHRoZW4gcHJvY2VzcyBpdCB0byBnZXQgdGhlIG5hbWVzcGFjZQotICAgIGlmIChzY2hlbWFVc2VkID09IG51bGwpIHsKLSAgICAgIC8vIGRvIGl0IHRoZSBoYXJkIHdheSAoc3RpbGwgYmV0dGVyIHRoYW4gYW5vdGhlciBET00gcGFyc2UpLi4uIAkJCQkKLSAgICAgIC8vV1NETFdyaXRlciB3ID0gbmV3IFdTRExXcml0ZXJJbXBsKCk7Ci0gICAgICB0cnkgewotICAgICAgICBXU0RMV3JpdGVyIHcgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1dTRExXcml0ZXIoKTsKLSAgICAgIAlEb2N1bWVudCBkb2MgPSB3LmdldERvY3VtZW50KGRlZik7Ci0gICAgICAJRWxlbWVudCBlID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgCXNjaGVtYVVzZWQgPSBlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgfSAKLSAgICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInByb2JsZW0gZ2V0dGluZyBXU0RMIGRlZmludGlvbnMgbmFtZXNwYWNlIik7Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkgewotICAgICAgCXRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwcm9ibGVtIGdldHRpbmcgZG9jdW1lbnQgZGVmaW50aW9uIik7Ci0gICAgICB9ICAgICAgCQotICAgIH0KLSAgICAqLwotCi0gICAgcmV0dXJuIHNjaGVtYVVzZWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBCaW5kaW5nLgotICAgKiAKLSAgICogR2V0IHRoZSBTT0FQIGJpbmRpbmcgZm9yIGEgQmluZGluZy4KLSAgICAqIAotICAgKiBAcGFyYW0gYmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gYSBTT0FQIGJpbmRpbmcuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQQmluZGluZyBnZXRTb2FwQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgTGlzdCBleEVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXhFbGVtZW50cyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICAvLyAgQ2hlY2sgZm9yIDxzb2FwOmJpbmRpbmc+IGVsZW1lbnQKLSAgICAgIHdoaWxlICgoaXRlcmF0b3IuaGFzTmV4dCgpKSAmJiAoc29hcEJpbmRpbmcgPT0gbnVsbCkpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgQmluZGluZyBlbGVtZW50Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJpbmRpbmc7Ci0gIH0KLQotICAvKiogCi0gICAqIENyZWF0ZSBYTUwgc2NoZW1hIHZhbGlkYXRvci4gIFRoaXMgaXMgZG9uZSBoZXJlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgZG8gbm90IGFsbG93Ci0gICAqIHRoZSBkb2N1bWVudExpc3QgZmllbGQgdG8gYmUgYWNjZXNzZWQgZnJvbSB3aXRoaW4gYW4gaW5uZXIgY2xhc3MuCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgdGhlIGJhc2UgVVJMLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgWE1MIHNjaGVtYSB2YWxpZGF0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MU2NoZW1hVmFsaWRhdG9yIGNyZWF0ZVhNTFNjaGVtYVZhbGlkYXRvcihTdHJpbmcgZG9jdW1lbnRCYXNlVVJJKQotICB7Ci0gICAgLy8gQ3JlYXRlIFhNTCBzY2hlbWEgdmFsaWRhdG9yCi0gICAgcmV0dXJuIG5ldyBYTUxTY2hlbWFWYWxpZGF0b3IoZG9jdW1lbnRCYXNlVVJJKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHNjaGVtYSB0YXJnZXQgbmFtZXNwYWNlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBkdXJpbmcgcHJvY2Vzc2luZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRTY2hlbWFUYXJnZXROYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBudWxsLCBuZXh0TGlzdCA9IG51bGw7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBleHRlbnNpb24gZWxlbWVudHMgd2l0aGluIHRoZSB0eXBlcyBlbGVtZW50Ci0gICAgVHlwZXMgdHlwZXMgPSBudWxsOwotICAgIGlmICgodHlwZXMgPSBkZWZpbml0aW9uLmdldFR5cGVzKCkpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gbnVsbDsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGV4dC4gZWxlbWVudAotICAgICAgICBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gdW5rbm93biBleHQuIGVsZW1lbnQsIHRoZW4gc2VlIGlmIGl0IGlzIGEgc2NoZW1hIGVsZW1lbnQKLSAgICAgICAgVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yIHRuc1Byb2Nlc3NvciA9IG51bGw7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgdG5zUHJvY2Vzc29yID0gbmV3IFRhcmdldE5hbWVzcGFjZVByb2Nlc3NvcihkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLQotCi0gICAgICAgICAgaWYgKChuZXh0TGlzdCA9Ci0gICAgICAgICAgICB0bnNQcm9jZXNzb3IucHJvY2Vzc0FsbFNjaGVtYSgKLSAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKSkpCi0gICAgICAgICAgICAhPSBudWxsKQotICAgICAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgbGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBsaXN0LmFkZEFsbChuZXh0TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotIC8qKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHNjaGVtYSB0YXJnZXQgbmFtZXNwYWNlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBkdXJpbmcgcHJvY2Vzc2luZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRTY2hlbWFOYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgLy8gQWx3YXlzIGFkZCBjdXJyZW50IGRvY3VtZW50IHRhcmdldE5hbWVzcGFjZQotICAgIExpc3QgdGFyZ2V0TmFtZXNwYWNlTGlzdCA9IGdldFNjaGVtYVRhcmdldE5hbWVzcGFjZUxpc3QoZGVmaW5pdGlvbik7Ci0gICAgCi0gICAgaWYgKCh0YXJnZXROYW1lc3BhY2VMaXN0ICE9IG51bGwpICYmICF0YXJnZXROYW1lc3BhY2VMaXN0LmlzRW1wdHkoKSkKLSAgICAgIGxpc3QuYWRkQWxsKHRhcmdldE5hbWVzcGFjZUxpc3QpOwotICAgIAotICAgIC8vIEdldCBsaXN0IG9mIGltcG9ydGVkIFdTREwgZG9jdW1lbnRzCi0gICAgTWFwIGltcG9ydE1hcCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotCi0gICAgSW1wb3J0IGltcDsKLQotICAgIC8vIEFkZCBlYWNoIGltcG9ydHMgdGFyZ2V0TmFtZXNwYWNlIHRvIHRoZSBsaXN0Ci0gICAgaWYgKGltcG9ydE1hcCAhPSBudWxsICYmICFpbXBvcnRNYXAuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIHZhbHVlcyA9IGltcG9ydE1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgTGlzdCBpbXBvcnRMaXN0OwotICAgICAgd2hpbGUgKHZhbHVlcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIGltcG9ydExpc3QgPSAoTGlzdCkgdmFsdWVzLm5leHQoKTsKLSAgICAgICAgSXRlcmF0b3IgaW1wb3J0cyA9IGltcG9ydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGltcG9ydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaW1wID0gKEltcG9ydCkgaW1wb3J0cy5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGltcCAhPSBudWxsICYmIGltcC5nZXREZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgICAJbGlzdC5hZGRBbGwoZ2V0U2NoZW1hTmFtZXNwYWNlTGlzdChpbXAuZ2V0RGVmaW5pdGlvbigpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZCBsaXN0IG9mIFdTREwgdGFyZ2V0TmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIGRlZmluaXRpb24gYSBEZWZpbml0aW9uIG9iamVjdC4KLSAgICogQHJldHVybiBsaXN0IG9mIFdTREwgdGFyZ2V0TmFtZXNwYWNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldFdTRExUYXJnZXROYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHJldHVybiBnZXRXU0RMVGFyZ2V0TmFtZXNwYWNlTGlzdChkZWZpbml0aW9uLCBuZXcgQXJyYXlMaXN0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkIGxpc3Qgb2YgV1NETCB0YXJnZXROYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiBhIERlZmluaXRpb24gb2JqZWN0LgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgV1NETCB0YXJnZXROYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgZ2V0V1NETFRhcmdldE5hbWVzcGFjZUxpc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBMaXN0IGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucykKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoKGRlZmluaXRpb24gIT0gbnVsbCkgJiYgKCFhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMuY29udGFpbnMoZGVmaW5pdGlvbikpKQotICAgIHsKLSAgICAgIGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucy5hZGQoZGVmaW5pdGlvbik7Ci0gICAgICAKLSAgICAgIC8vIEFsd2F5cyBhZGQgY3VycmVudCBkb2N1bWVudCB0YXJnZXROYW1lc3BhY2UKLSAgICAgIGlmIChkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwpCi0gICAgICAgIGxpc3QuYWRkKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCi0gICAgICAvLyBHZXQgbGlzdCBvZiBpbXBvcnRlZCBXU0RMIGRvY3VtZW50cwotICAgICAgTWFwIGltcG9ydE1hcCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotCi0gICAgICBJbXBvcnQgaW1wOwotCi0gICAgICAvLyBBZGQgZWFjaCBpbXBvcnRzIHRhcmdldE5hbWVzcGFjZSB0byB0aGUgbGlzdAotICAgICAgaWYgKGltcG9ydE1hcCAhPSBudWxsICYmICFpbXBvcnRNYXAuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciB2YWx1ZXMgPSBpbXBvcnRNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgTGlzdCBpbXBvcnRMaXN0OwotICAgICAgICB3aGlsZSAodmFsdWVzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGltcG9ydExpc3QgPSAoTGlzdCkgdmFsdWVzLm5leHQoKTsKLSAgICAgICAgICBJdGVyYXRvciBpbXBvcnRzID0gaW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpbXBvcnRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbXAgPSAoSW1wb3J0KSBpbXBvcnRzLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChpbXAgIT0gbnVsbCAmJiBpbXAuZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICAgICAgICBsaXN0LmFkZEFsbChnZXRXU0RMVGFyZ2V0TmFtZXNwYWNlTGlzdChpbXAuZ2V0RGVmaW5pdGlvbigpLCBhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMpKTsKLSAgICAgICAgICAgIC8vIGxpc3QuYWRkKGltcC5nZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIEJpbmRpbmdNYXRjaAotICB7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gICAgcHJpdmF0ZSBTT0FQQmluZGluZyBzb2FwQmluZGluZzsKLSAgICAvL3ByaXZhdGUgVmVjdG9yIGJpbmRpbmdBcmdzOyAvLyBzZXQgb2YgQmluZGluZ0lucHV0cyBhbmQgQmluZGluZ091dHB1dHMKLSAgICBwcml2YXRlIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQ7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQ7Ci0KLSAgICAvLyBBREQ6IG5lZWQgdG8gaW5jbHVkZSBCaW5kaW5nRmF1bHQgc3VwcG9ydC4uLgotICAgIHB1YmxpYyBCaW5kaW5nTWF0Y2goCi0gICAgICBCaW5kaW5nIGIsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvLAotICAgICAgU09BUEJpbmRpbmcgc2IsCi0gICAgICBCaW5kaW5nSW5wdXQgYmluLAotICAgICAgQmluZGluZ091dHB1dCBib3V0KQotICAgIHsKLSAgICAgIGJpbmRpbmcgPSBiOwotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGJvOwotICAgICAgc29hcEJpbmRpbmcgPSBzYjsKLSAgICAgIC8vYmluZGluZ0FyZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvL2lmIChiaW4gICE9IG51bGwpIHsgYmluZGluZ0FyZ3MuYWRkKGJpbik7ICB9Ci0gICAgICAvL2lmIChib3V0ICE9IG51bGwpIHsgYmluZGluZ0FyZ3MuYWRkKGJvdXQpOyB9Ci0gICAgICBiaW5kaW5nSW5wdXQgPSBiaW47Ci0gICAgICBiaW5kaW5nT3V0cHV0ID0gYm91dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ01hdGNoKAotICAgICAgQmluZGluZyBiLAotICAgICAgQmluZGluZ09wZXJhdGlvbiBibywKLSAgICAgIFNPQVBCaW5kaW5nIHNiLAotICAgICAgQmluZGluZ0lucHV0IGJpbikKLSAgICB7Ci0gICAgICB0aGlzKGIsIGJvLCBzYiwgYmluLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ01hdGNoKAotICAgICAgQmluZGluZyBiLAotICAgICAgQmluZGluZ09wZXJhdGlvbiBibywKLSAgICAgIFNPQVBCaW5kaW5nIHNiLAotICAgICAgQmluZGluZ091dHB1dCBib3V0KQotICAgIHsKLSAgICAgIHRoaXMoYiwgYm8sIHNiLCBudWxsLCBib3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzb2FwQmluZGluZy4KLSAgICAgKiBAcmV0dXJuIFNPQVBCaW5kaW5nCi0gICAgICovCi0gICAgcHVibGljIFNPQVBCaW5kaW5nIGdldFNvYXBCaW5kaW5nKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc29hcEJpbmRpbmc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYmluZGluZ09wZXJhdGlvbi4KLSAgICAgKiBAcmV0dXJuIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nSW5wdXQuCi0gICAgICogQHJldHVybiBCaW5kaW5nSW5wdXQKLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dCgpCi0gICAgewotICAgICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nT3V0cHV0LgotICAgICAqIEByZXR1cm4gQmluZGluZ091dHB1dAotICAgICAqLwotICAgIHB1YmxpYyBCaW5kaW5nT3V0cHV0IGdldEJpbmRpbmdPdXRwdXQoKQotICAgIHsKLSAgICAgIHJldHVybiBiaW5kaW5nT3V0cHV0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc0JpbmRpbmdJbnB1dCgpCi0gICAgewotICAgICAgcmV0dXJuICh0aGlzLmJpbmRpbmdJbnB1dCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNCaW5kaW5nT3V0cHV0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gKHRoaXMuYmluZGluZ091dHB1dCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nLgotICAgICAqIEByZXR1cm4gQmluZGluZwotICAgICAqLwotICAgIHB1YmxpYyBCaW5kaW5nIGdldEJpbmRpbmcoKQotICAgIHsKLSAgICAgIHJldHVybiBiaW5kaW5nOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBiaW5kaW5nIG1hdGNoZXMuCi0gICogQHBhcmFtIGJpbmRpbmcgYSBiaW5kaW5nLgotICAqIEBwYXJhbSBzb2FwQmluZGluZ1N0eWxlIHNvYXAgYmluZGluZyBzdHlsZS4KLSAgKiBAcGFyYW0gc29hcEJvZHlVc2Ugc29hcCBib2R5IHVzZS4KLSAgKiBAcmV0dXJuIGJpbmRpbmcgbWF0Y2hlcy4KLSAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgKi8KLSAgcHVibGljIEJpbmRpbmdNYXRjaFtdIGdldEJpbmRpbmdNYXRjaGVzKAotICAgIEJpbmRpbmcgYmluZGluZywKLSAgICBTdHJpbmcgc29hcEJpbmRpbmdTdHlsZSwKLSAgICBTdHJpbmcgc29hcEJvZHlVc2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBWZWN0b3IgYmluZGluZ01hdGNoZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBDaGVjayBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBnZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNvYXA6YmluZGluZyBmb3IgdGhpcyBXU0RMIGJpbmRpbmcgaXMgdGhlIHNwZWNpZmllZCBzdHlsZQotICAgIC8vIEFERDogY2hlY2sgZm9yIG51bGwgcG9pbnRlcgotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBkZWZhdWx0U3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotCi0gICAgICBpZiAoZGVmYXVsdFN0eWxlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRTdHlsZSA9IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0M7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCB0aGUgc2V0IG9mIG9wZXJhdGlvbnMgZm9yIHRoaXMgV1NETCBiaW5kaW5nCi0gICAgICBMaXN0IGJpbmRpbmdPcHNMaXN0ID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgaWYgKGJpbmRpbmdPcHNMaXN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIGJpbmRpbmdPcHMgPSBiaW5kaW5nT3BzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICAvLyBmb3IgZWFjaCBiaW5kaW5nIG9wZXJhdGlvbjoKLSAgICAgICAgd2hpbGUgKGJpbmRpbmdPcHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wcy5uZXh0KCk7Ci0KLSAgICAgICAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcCA9IGdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wKTsKLQotICAgICAgICAgIGlmICgoc29hcE9wID09IG51bGwgJiYgZGVmYXVsdFN0eWxlLmVxdWFscyhzb2FwQmluZGluZ1N0eWxlKSkKLSAgICAgICAgICAgIHx8IChzb2FwT3AgIT0gbnVsbAotICAgICAgICAgICAgICAmJiBzb2FwT3AuZ2V0U3R5bGUoKSA9PSBudWxsCi0gICAgICAgICAgICAgICYmIGRlZmF1bHRTdHlsZS5lcXVhbHMoc29hcEJpbmRpbmdTdHlsZSkpCi0gICAgICAgICAgICB8fCAoc29hcE9wICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgc29hcE9wLmdldFN0eWxlKCkgIT0gbnVsbAotICAgICAgICAgICAgICAmJiBzb2FwT3AuZ2V0U3R5bGUoKS5lcXVhbHMoc29hcEJpbmRpbmdTdHlsZSkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGNoZWNrIGJpbmRpbmcgaW5wdXQgJiBvdXRwdXQKLSAgICAgICAgICAgIEJpbmRpbmdJbnB1dCBiSW5wdXQgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICBpZiAoYklucHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNPQVBCb2R5IGlucHV0U29hcEJvZHkgPSBnZXRTb2FwQm9keShiSW5wdXQpOwotICAgICAgICAgICAgICBpZiAoaW5wdXRTb2FwQm9keSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgKGlucHV0U29hcEJvZHkuZ2V0VXNlKCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgJiYgIWlucHV0U29hcEJvZHkuZ2V0VXNlKCkuZXF1YWxzKHNvYXBCb2R5VXNlKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBiSW5wdXQgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEJpbmRpbmdPdXRwdXQgYk91dHB1dCA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgICAgICBpZiAoYk91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTT0FQQm9keSBvdXRwdXRTb2FwQm9keSA9IGdldFNvYXBCb2R5KGJPdXRwdXQpOwotCi0gICAgICAgICAgICAgIGlmIChvdXRwdXRTb2FwQm9keSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgKG91dHB1dFNvYXBCb2R5LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICYmICFvdXRwdXRTb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoc29hcEJvZHlVc2UpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJPdXRwdXQgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoYk91dHB1dCAhPSBudWxsKSB8fCAoYklucHV0ICE9IG51bGwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgbWF0Y2gsIGFkZCB0byB0aGUgdmVjdG9yCi0gICAgICAgICAgICAgIGJpbmRpbmdNYXRjaGVzLmFkZCgKLSAgICAgICAgICAgICAgICBuZXcgQmluZGluZ01hdGNoKAotICAgICAgICAgICAgICAgICAgYmluZGluZywKLSAgICAgICAgICAgICAgICAgIGJpbmRpbmdPcCwKLSAgICAgICAgICAgICAgICAgIHNvYXBCaW5kaW5nLAotICAgICAgICAgICAgICAgICAgYklucHV0LAotICAgICAgICAgICAgICAgICAgYk91dHB1dCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmdNYXRjaFtdIEJpbmRpbmdNYXRjaEFycmF5ID0gbmV3IEJpbmRpbmdNYXRjaFtiaW5kaW5nTWF0Y2hlcy5zaXplKCldOwotICAgIGJpbmRpbmdNYXRjaGVzLmNvcHlJbnRvKEJpbmRpbmdNYXRjaEFycmF5KTsKLSAgICByZXR1cm4gQmluZGluZ01hdGNoQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBPcGVyYXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBiaW5kaW5nT3BlcmF0aW9uIGEgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gYSBzb2FwIG9wZXJhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgd2hpbGUgcHJvY2Vzc2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUE9wZXJhdGlvbiBnZXRTb2FwT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgSXRlcmF0b3IgZXh0ZW5zaWJsZXMgPQotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZSBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoU09BUE9wZXJhdGlvbikgZXh0ZW5zaWJsZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAKLSAgICogUmV0dXJucyBhbiBhcnJheSBvZiBTT0FQT3BlcmF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3c2RsOmJpbmRpbmcgc3VwcGxpZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaE1hcCBnZXRTb2FwT3BlcmF0aW9ucyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIEhhc2hNYXAgc29hcE9wZXJhdGlvbkxpc3QgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgaWYgKGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vVmVjdG9yIHNvYXBPcFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBiaW5kaW5nIG9wZXJhdGlvbnMKLSAgICBJdGVyYXRvciBvcGVyYXRpb25zID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBDaGVjayBlYWNoIGJpbmRpbmcgb3BlcmF0aW9uIHRvIHNlZSBpZiBpdCBoYXMgYSBzb2FwIG9wZXJhdGlvbiBlbGVtZW50Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gbnVsbDsKLSAgICB3aGlsZSAob3BlcmF0aW9ucy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLm5leHQoKTsKLSAgICAgIEl0ZXJhdG9yIGV4dGVuc2libGVzID0KLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGV4dGVuc2libGVzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRlbnNpYmxlIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHNvYXBPcGVyYXRpb25MaXN0LnB1dChleHRlbnNpYmxlLCBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvL3JldHVybiAoU09BUE9wZXJhdGlvbltdKXNvYXBPcFZlY3Rvci50b0FycmF5KG5ldyBTT0FQT3BlcmF0aW9uW10ge30pOwotICAgIHJldHVybiBzb2FwT3BlcmF0aW9uTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayBwYXJ0IGF0dHJpYnV0ZXMuCi0gICAqIEBwYXJhbSBiaW5kaW5nTWF0Y2ggYW4gYXJyYXkgb2YgQmluZGluZ01hdGNoIG9iamVjdHMuCi0gICAqIEBwYXJhbSBpbk9yT3V0IGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGF0dHJpYiBhdHRyaWJ1dGUuCi0gICAqIEByZXR1cm4gYSBib29sZWFuLgotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgdGhlIHBhcnQgaXMgbm90IGNvbXBsaWFudC4KLSAgICovCi0gIC8vIEdUIC0gcmV3b3JrIHRoaXMgbWV0aG9kIHdpdGggYSBiZXR0ZXIgd2F5IG9mIHBhcmFtZXRlcml6aW5nIHRoZSBnZXR0ZXJzIHJlcXVpcmVkIGZvciB0aGUgaW52b2NhdGlvbi4KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tQYXJ0QXR0cmlidXRlcygKLSAgICBCaW5kaW5nTWF0Y2hbXSBiaW5kaW5nTWF0Y2gsCi0gICAgU3RyaW5nIGluT3JPdXQsCi0gICAgU3RyaW5nIGF0dHJpYikKLSAgICB0aHJvd3MgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbgotICB7Ci0KLSAgICBpZiAoIShpbk9yT3V0LmVxdWFscygidXNlSW5wdXQiKSB8fCBpbk9yT3V0LmVxdWFscygidXNlT3V0cHV0IikpCi0gICAgICB8fCAhKGF0dHJpYi5lcXVhbHMoInVzZVR5cGUiKSB8fCBhdHRyaWIuZXF1YWxzKCJ1c2VFbGVtZW50IikpKQotICAgIHsKLSAgICAgIC8vIGludmFsaWQgYXJndW1lbnQgdmFsdWUgc3VwcGxpZWQgYnkgY2FsbGluZyBtZXRob2QgLSAiaW50ZXJuYWwgZXJyb3IiCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5nTWF0Y2gubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgQmluZGluZ01hdGNoIG5leHRNYXRjaCA9IGJpbmRpbmdNYXRjaFtpXTsKLQotICAgICAgLy8gY2hlY2sgdGhlIGFzc29jaWF0ZWQgcGFydHMKLSAgICAgIE1lc3NhZ2UgbXNnOwotICAgICAgTWFwIHBhcnRzOwotICAgICAgSXRlcmF0b3IgcGFydEl0ZXJhdGlvbjsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSBuZXh0TWF0Y2guZ2V0QmluZGluZ09wZXJhdGlvbigpOwotICAgICAgaWYgKGJpbmRpbmdPcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBjb250aW51ZTsgLy8gbm8gQmluZGluZyBPcGVyYXRpb24gZm9yIHNvbWUgcmVhc29uCi0gICAgICB9Ci0KLSAgICAgIE9wZXJhdGlvbiBvcCA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLyoJQUREOiBoYW5kbGUgc29hcDpmYXVsdHMgaW4gc2ltaWxhciB3YXkJICAgCQkKLSAgICAgIHRyeSB7Ci0gICAgICAvLyBjaGVjayBmYXVsdHMgLSByZW1hcmthYmx5IHNpbWlsYXIuLi4uIChuZWVkIHRvIHJldGFpbiBvcGVyYXRpb24gaWQgZm9yIGZhaWx1cmVkZXRhaWwgbXNnKQotICAgICAgCWlmIChuZXh0TWF0Y2guaGFzQmluZGluZ0ZhdWx0KCkpIHsKLSAgICAgIAkJCQkKLSAgICAgIAkJbXNnID0gb3AuZ2V0RmF1bHQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAJCXBhcnRzID0gbXNnLmdldFBhcnRzKCk7Ci0gICAgICAJCQkJICAgIAkJCQkJICAgICAJCQkKLSAgICAgIAkJLy9jaGVjayB0aGF0IGVhY2ggcGFydCBoYXMgYW4gZWxlbWVudCBhdHRyaWJ1dGUgICAgCQkJCi0gICAgICAJCXBhcnRJdGVyYXRpb24gPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgCQl3aGlsZSAocGFydEl0ZXJhdGlvbi5oYXNOZXh0KCkpIHsKLSAgICAgIAkJCVBhcnQgcGFydCA9IChQYXJ0KXBhcnRJdGVyYXRpb24ubmV4dCgpOwotICAgICAgCQkJaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSA9PSBudWxsKSB7Ci0gICAgICAJCQkJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIk9QRVJBVElPTjogIiArIG9wICsgIk1FU1NBR0U6ICIgKyBtc2cpOwotICAgICAgCQkJfQotICAgICAgCQl9CSAJCQkKLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbikgewotICAgICAgCS8vIG5vIHBhcnRzIGZvdW5kIC0gdGhpcyBxdWFsaWZpZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgIAl0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihuLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICAqLwotCi0gICAgICB0cnkKLSAgICAgIHsKLQotICAgICAgICBRTmFtZSBhdHRyaWJ1dGVOYW1lOwotCi0gICAgICAgIC8vR1Q6IERvIHdlIG5lZWQgdG8gY2hlY2sgQmluZGluZ0lucHV0IC8gT3V0cHV0IGhlcmUgPz8KLQotICAgICAgICBpZiAoaW5Pck91dC5lcXVhbHMoInVzZUlucHV0IikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0SW5wdXQoKSA9PSBudWxsIHx8ICFuZXh0TWF0Y2guaGFzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTm8gSW5wdXQgc28gbm90aGluZyB0byBjaGVjawotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbXNnID0gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsgLy8gTG9va2luZyBmb3IgT3V0cHV0Ci0gICAgICAgICAgaWYgKG9wLmdldE91dHB1dCgpID09IG51bGwgfHwgIW5leHRNYXRjaC5oYXNCaW5kaW5nT3V0cHV0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTm8gT3V0cHV0IHNvIG5vdGhpbmcgdG8gY2hlY2sKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG1zZyA9IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtc2cgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3RoaW5nIHRvIGNoZWNrIGZyb20gdGhpcyBCaW5kaW5nIE1hdGNoICg/KQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHBhcnRzIAotICAgICAgICBwYXJ0cyA9IG1zZy5nZXRQYXJ0cygpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGFydHMgYXR0cmlidXRlLCB0aGVuIG9ubHkgcHJvY2VzcyB0aG9zZSBwYXJ0cwotICAgICAgICBMaXN0IHBhcnRzTmFtZUxpc3QgPSBudWxsOwotICAgICAgICBpZiAoKHBhcnRzTmFtZUxpc3QgPSBnZXRQYXJ0c0xpc3QobmV4dE1hdGNoLCBpbk9yT3V0KSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBwYXJ0c0xpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHNOYW1lSXRlcmF0b3IgPSBwYXJ0c05hbWVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKHBhcnRzTmFtZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0c0xpc3QuYWRkKHBhcnRzLmdldCgoU3RyaW5nKSBwYXJ0c05hbWVJdGVyYXRvci5uZXh0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcGFydEl0ZXJhdGlvbiA9IHBhcnRzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSB0aGUgY29tcGxldGUgbGlzdCBvZiBwYXJ0cwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0SXRlcmF0aW9uID0gcGFydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vY2hlY2sgdGhhdCBlYWNoIHBhcnQgaGFzIGFuIGVsZW1lbnQgb3IgdHlwZSBhdHRyaWJ1dGUgICAgCQkJCi0gICAgICAgIHdoaWxlIChwYXJ0SXRlcmF0aW9uLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0SXRlcmF0aW9uLm5leHQoKTsKLSAgICAgICAgICBpZiAoYXR0cmliLmVxdWFscygidXNlRWxlbWVudCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7IC8vICJ1c2VUeXBlIgotICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IHBhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiTmFtZSBvZiBvcGVyYXRpb24gdGhhdCBmYWlsZWQ6ICIKLSAgICAgICAgICAgICAgICArIG9wLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgb3AudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgIlxuTmFtZSBvZiBtZXNzYWdlIHRoYXQgZmFpbGVkOiAiCi0gICAgICAgICAgICAgICAgKyBtc2cuZ2V0UU5hbWUoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgbXNnLnRvU3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG4pCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIHBhcnRzIGZvdW5kIC0gdGhpcyBxdWFsaWZpZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24obi50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7IC8vIHRlc3RzIHN1Y2Nlc3NmdWwKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcGFydHMgbGlzdCBmcm9tIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldFBhcnRzTGlzdChCaW5kaW5nTWF0Y2ggYmluZGluZ01hdGNoLCBTdHJpbmcgdHlwZSkKLSAgewotICAgIExpc3QgcGFydHNMaXN0ID0gbnVsbDsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG51bGw7Ci0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyBvcGVyYXRpb24KLSAgICAgIGJpbmRpbmdPcCA9IGJpbmRpbmdNYXRjaC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiB0aGUgYmluZGluZyBvcGVyYXRpb24gY29udGFpbnMgYSBzb2FwYmluZDpib2R5IHdpdGggYSBwYXJ0cyBhdHRyaWJ1dGUKLSAgICAgIGlmICh0eXBlLmVxdWFscygidXNlSW5wdXQiKSkKLSAgICAgIHsKLSAgICAgICAgaXRlcmF0b3IgPQotICAgICAgICAgIGJpbmRpbmdPcC5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpdGVyYXRvciA9Ci0gICAgICAgICAgYmluZGluZ09wLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICAgIC8vIGVpdGhlciBubyBiaW5kaW5nIG9wZXJhdGlvbiwgYmluZGluZyBpbnB1dC9vdXRwdXQsIG9yIFNPQVAgZWxlbWVudAotICAgIH0KLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgYmluZGluZyBvcGVyYXRpb24gY29udGFpbnMgYSBzb2FwYmluZDpib2R5IHdpdGggYSBwYXJ0cyBhdHRyaWJ1dGUKLSAgICB3aGlsZSAoKGl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHBhcnRzTGlzdCA9PSBudWxsKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgcGFydHNMaXN0ID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgICAgeyAvLyBub3QgYSBTT0FQQm9keSBleHRlbnNpYmlsaXR5IGVsZW1lbnQgc28gaWdub3JlCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnRzTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgV1NETCBlbGVtZW50LgotICAgKiBAcmV0dXJuIGVsZW1lbnQgbG9jYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbigKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIE9iamVjdCB3c2RsRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24gPSBudWxsOwotICAgIFdTRExFbGVtZW50TGlzdCB3c2RsRWxlbWVudExpc3Q7Ci0KLSAgICBpZiAoKHdzZGxFbGVtZW50TGlzdCA9IHdzZGxEb2N1bWVudC5nZXRFbGVtZW50TGlzdCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGVsZW1lbnRMb2NhdGlvbiA9IHdzZGxFbGVtZW50TGlzdC5nZXRFbGVtZW50TG9jYXRpb24od3NkbEVsZW1lbnQpOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50TG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGZhaWx1cmUgZGV0YWlsLgotICAgKiBAcGFyYW0gbWVzc2FnZSBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgZW50cnkgY29udGV4dC4KLSAgICogQHJldHVybiBmYWlsdXJlIGRldGFpbC4KLSAgICovCi0gIHByb3RlY3RlZCBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgewotICAgIHJldHVybiBjcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgbWVzc2FnZSwKLSAgICAgIGVudHJ5Q29udGV4dCwKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBmYWlsdXJlIGRldGFpbC4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwuCi0gICAqLwotICBwcm90ZWN0ZWQgRmFpbHVyZURldGFpbCBjcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgT2JqZWN0IHdzZGxFbGVtZW50KQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oCi0gICAgICBnZXRFbGVtZW50TG9jYXRpb24oZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLCB3c2RsRWxlbWVudCkpOwotICAgIHJldHVybiBmYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyoqIAotICAgKiBTT0FQQm9keSwgU09BUEZhdWx0LCBTT0FQSGVhZGVyIGFuZCBTT0FQSGVhZGVyRmF1bHQgY2xhc3MgCi0gICAqIGludGVyZmFjZXMgaGF2ZSBjb21wYXRpYmxlIGdldFVzZSgpIGFuZCBnZXROYW1lc3BhY2VVUkkoKSAKLSAgICogbWV0aG9kcywgYnV0IHdzZGw0aiBkb2VzIG5vdCBkZWNsYXJlIHRoZW0gYXQgdGhlIHBhcmVudCBpbnRlcmZhY2UuIAotICAgKiBUaGVyZWZvcmUgdXNlIHJlZmxlY3Rpb24gdG8gYWNjZXNzIHRoZXNlIGNvbW1vbiBtZXRob2RzLgotICAgKiAKLSAgICogQHBhcmFtIGV4dEVsZW1lbnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlIGlzIGZvdW5kIGluIFNPQVAgbGl0ZXJhbC4KLSAgICogQHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24gaWYgdGhpcyBtZXRob2QgY2Fubm90IGJlIGZvdW5kLgotICAgKiBAdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgaW4gYW4gaW52b2tlZCBtZXRob2Qgb3IgY29uc3RydWN0b3IKLSAgICogQHRocm93cyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFtIGF0dGVtcHQgdG8gbG9hZCBhCi0gICAqICAgICAgICAgY2xhc3MgdGhhdCBpdCBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0by4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIG5hbWVzcGFjZUZvdW5kSW5Tb2FwTGl0ZXJhbChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50KQotICAgIHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24sIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24KLSAgewotICAgIENsYXNzIGMgPSBleHRFbGVtZW50LmdldENsYXNzKCk7Ci0gICAgTWV0aG9kIGdldFVzZU1ldGhvZCA9IGMuZ2V0TWV0aG9kKCJnZXRVc2UiLCBuZXcgQ2xhc3NbMF0pOwotICAgIE1ldGhvZCBnZXROYW1lc3BhY2VVUklNZXRob2QgPSBjLmdldE1ldGhvZCgiZ2V0TmFtZXNwYWNlVVJJIiwgbmV3IENsYXNzWzBdKTsKLQotICAgIC8vICh1c2UgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSBidXQgdGhlIG51bGwgY2FzZSBpcyBjaGVja2VkIGZvciBzaW5jZSBhIG1pc3NpbmcgdXNlIGlzIG5vdAotICAgIC8vIGNoZWNrZWQgd2l0aCB0aGlzIFRBLiBJZiBpdHMgbWlzc2luZyBpdHMgaW52YWxpZCBidXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgZG9jLWxpdCkuICAgICAJCQotICAgIGlmIChnZXRVc2VNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpID09IG51bGwKLSAgICAgIHx8ICFnZXRVc2VNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBuYW1lc3BhY2UgZm91bmQKLSAgICBib29sZWFuIG5hbWVzcGFjZUZvdW5kID0KLSAgICAgIChnZXROYW1lc3BhY2VVUklNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpICE9IG51bGwpOwotCi0gICAgLy8gcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlIGZvdW5kCi0gICAgcmV0dXJuIG5hbWVzcGFjZUZvdW5kOwotCi0gIH0KLQotICAvKioKLSAgICogVmVyaWZ5IGV4dGVuc2liaWxpdHkgZWxlbWVudCB1c2VzIGxpdGVyYWwuCi0gICAqIEBwYXJhbSBleHRlbnNpYmxlIC0gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKiBAdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBpZiB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgZm91bmQuCi0gICAqIEB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBpbiBhbiBpbnZva2VkIG1ldGhvZCBvciBjb25zdHJ1Y3RvcgotICAgKiBAdGhyb3dzIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW0gYXR0ZW1wdCB0byBsb2FkIGEKLSAgICogICAgICAgICBjbGFzcyB0aGF0IGl0IGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMaXRlcmFsKEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2libGUpCi0gICAgdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiwgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbgotICB7Ci0KLSAgICBDbGFzcyBjID0gZXh0ZW5zaWJsZS5nZXRDbGFzcygpOwotICAgIE1ldGhvZCBnZXRVc2VNZXRob2QgPSBjLmdldE1ldGhvZCgiZ2V0VXNlIiwgbmV3IENsYXNzWzBdKTsKLQotICAgIC8vICh1c2UgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSBidXQgdGhlIG51bGwgY2FzZSBpcyBjaGVja2VkIGZvciBzaW5jZSBhIG1pc3NpbmcgdXNlIGlzIG5vdAotICAgIC8vIGNoZWNrZWQgd2l0aCB0aGlzIFRBLiBJZiBpdHMgbWlzc2luZyBpdHMgaW52YWxpZCBidXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgZG9jLWxpdCkuICAgICAJCQotICAgIGlmIChnZXRVc2VNZXRob2QuaW52b2tlKGV4dGVuc2libGUsIG51bGwpID09IG51bGwKLSAgICAgIHx8ICFnZXRVc2VNZXRob2QuaW52b2tlKGV4dGVuc2libGUsIG51bGwpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBzaG93biB0byBoYXZlIHVzZT0ibGl0ZXJhbCIKLSAgICByZXR1cm4gdHJ1ZTsKLQotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjM5YjVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTAKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTAgZXh0ZW5kcyBCUDIwMTAKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkNWRhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDExCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDExIGV4dGVuZHMgQlAyMDExCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZDllZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAxMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAxMiBleHRlbmRzIEJQMjAxMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDEyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGYwMWNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTMKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTMgZXh0ZW5kcyBCUDIwMTMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJiNmE2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDE0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDE0IGV4dGVuZHMgQlAyMDE0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZTk4MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAxNwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAxNyBleHRlbmRzIEJQMjAxNwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ1ZTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTgKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTggZXh0ZW5kcyBCUDIwMTgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxOTdmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDE5Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDE5IGV4dGVuZHMgQlAyMDE5Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZjAyMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAyMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAyMCBleHRlbmRzIEJQMjAyMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDIwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzdmMWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMjEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMjEgZXh0ZW5kcyBCUDIwMjEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAyMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2OTk2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDIyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDIyIGV4dGVuZHMgQlAyMDIyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMzIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDMyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMDdhYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAzMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAzMiBleHRlbmRzIEJQMjAzMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDMyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDk4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmE5MDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDk4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwOTgKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwOTggZXh0ZW5kcyBCUDIwOTgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjA5OChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwOTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0YjUyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFdTSTIwOTkuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zLCA8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIFdTLUkgY29uZm9ybWFuY2UgYW5ub3RhdGlvbiBkb2VzIG5vdCBhcHBlYXIgb3V0c2lkZSBhIHdzZGw6cG9ydCwgd3NkbDpiaW5kaW5nLCB3c2RsOnBvcnRUeXBlLCB3c2RsOm9wZXJhdGlvbiwgb3Igd3NkbDptZXNzYWdlIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIFdTSTIwOTkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjA5OShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNDbGFpbXMgPSBmYWxzZTsKLQotICAvKioKLSAgICogIENoZWNrIGEgV1MtSSBjb25mb3JtYW5jZSBhbm5vdGF0aW9uIGRvZXMgbm90IGFwcGVhciBvdXRzaWRlIGEgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2UgZWxlbWVudCBpZiBub3QgaXQgY3JlYXRlcyBmYWlsdXJlIHJlcG9ydC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgZWwsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIGNvbmZvcm1hbmNlIGNsYWltIHNob3VsZCBiZSB3aXRoaW4gOiBwb3J0LCBiaW5kaW5nLCBwb3J0dHlwZSwgb3BlcmF0aW9uLCBtZXNzYWdlCi0gICAgaWYgKGNvbnRhaW5zQ29uZm9ybWFuY2VDbGFpbShlbCkpCi0gICAgewotICAgICAgY29udGFpbnNDbGFpbXMgPSB0cnVlOwotCi0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgICAgICBlcnJvcnMuYWRkKFdTRExfRkFVTFQsICgoQmluZGluZ0ZhdWx0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChCaW5kaW5nSW5wdXQpIHBhcmVudCkuZ2V0TmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9PUEVSQVRJT04sICgoQmluZGluZ09wZXJhdGlvbikgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX09VVFBVVCwgKChCaW5kaW5nT3V0cHV0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgICBlcnJvcnMuYWRkKFdTRExfREVGSU5JVElPTlMsICgoRGVmaW5pdGlvbikgcGFyZW50KS5nZXRRTmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFNlcnZpY2UpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9TRVJWSUNFLCAoKFNlcnZpY2UpIHBhcmVudCkuZ2V0UU5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX0ZBVUxULCAoKEZhdWx0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChPdXRwdXQpIHBhcmVudCkuZ2V0TmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEltcG9ydCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX0lNUE9SVCwgKChJbXBvcnQpIHBhcmVudCkuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgSW5wdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChJbnB1dCkgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgUGFydCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX1BBUlQsICgoUGFydCkgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgVHlwZXMpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9UWVBFUyk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLSAgICAvKgotICAgIHRyYXZlcnNhbC4KLSAgICAJaWdub3JlUG9ydDJFbGVtZW50KCkuCi0gICAgCWlnbm9yZU1lc3NhZ2UyRWxlbWVudCgpLgotICAgIAlpZ25vcmVCaW5kaW5nMkVsZW1lbnQoKS4KLSAgICAJaWdub3JlUG9ydFR5cGUyRWxlbWVudCgpLgotICAgIAlpZ25vcmVPcGVyYXRpb24yRWxlbWVudCgpOwkJCi0gICAgICAqLwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyBjcmVhdGUgZGV0YWlsIG1lc3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvciBlbGVtZW50cwotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFjb250YWluc0NsYWltcykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgd2hldGhlciBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbXMuIAotICAgKiBSZXR1cm5zIHRydWUgaWYgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltLiAKLSAgICogQHBhcmFtIGVsCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zQ29uZm9ybWFuY2VDbGFpbShFbGVtZW50IGVsKQotICB7Ci0gICAgaWYgKGVsID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWwgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KGVsLCBXU0lfQ0xBSU0pOwotICAgIHJldHVybiAoZWwgIT0gbnVsbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExNTU4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBXU0kyMTAwLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9ucywgaWYgaXQgY29udGFpbnMgYSB3c2RsOnBvcnQsIHdzZGw6YmluZGluZywgd3NkbDpwb3J0VHlwZSwgd3NkbDpvcGVyYXRpb24sIG9yIHdzZGw6bWVzc2FnZSwgd2hpY2ggaW4gdHVybiBjb250YWlucyBhIGNvbmZvcm1hbmNlIGFubm90YXRpb248L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgY29uZm9ybWFuY2UgYW5ub3RhdGlvbiBvZiB0aGUgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2UsIHZhbGlkYXRlcyB0byB0aGUgc2NoZW1hIGRlZmluZWQgaW4gdGhlIEJhc2ljIFByb2ZpbGUsIGFuZCBpcyBkaXJlY3QgY2hpbGQgb2YgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBmb3IgdGhlIFdTREwgZWxlbWVudC4gVGhlIHNjaGVtYSBkZWZpbml0aW9uIHVzZXMgImh0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vIiBhcyB0aGUgdGFyZ2V0TmFtZXNwYWNlLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNDbGFpbXMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIHBvcnQgY29udGFpbnMgaWxsZWdhbCBjbGFpbS4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUG9ydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgcG9ydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHBvcnQgIT0gbnVsbCAmJiAhY29udGFpbnNMZWdhbENsYWltKHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpCi0gICAgICBlcnJvcnMuYWRkKFdTRExfUE9SVCwgcG9ydC5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgYmluZGluZyBjb250YWlucyBpbGxlZ2FsIGNsYWltLgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsCi0gICAgICAmJiAhY29udGFpbnNMZWdhbENsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpCi0gICAgICBlcnJvcnMuYWRkKFdTRExfQklORElORywgYmluZGluZy5nZXRRTmFtZSgpKTsKLSAgfQotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIHBvcnQgdHlwZSBjb250YWlucyBpbGxlZ2FsIGNsYWltLgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0VHlwZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnRUeXBlIHR5cGUsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmICh0eXBlICE9IG51bGwgJiYgIWNvbnRhaW5zTGVnYWxDbGFpbSh0eXBlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgZXJyb3JzLmFkZChXU0RMX1BPUlRUWVBFLCB0eXBlLmdldFFOYW1lKCkpOwotICB9Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgb3BlcmF0aW9uIGNvbnRhaW5zIGlsbGVnYWwgY2xhaW0uCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwKLSAgICAgICYmICFjb250YWluc0xlZ2FsQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgZXJyb3JzLmFkZChXU0RMX09QRVJBVElPTiwgb3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gIH0KLQotICAvKiBDcmVhdGUgZmFsdXJlIHJlcG9ydCBpZiBtZXNzYWdlIGNvbnRhaW5zIGlsbGVnYWwgY2xhaW0uCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG1lc3NhZ2UsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChtZXNzYWdlICE9IG51bGwKLSAgICAgICYmICFjb250YWluc0xlZ2FsQ2xhaW0obWVzc2FnZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkKLSAgICAgIGVycm9ycy5hZGQoV1NETF9NRVNTQUdFLCBtZXNzYWdlLmdldFFOYW1lKCkpOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0T3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0TWVzc2FnZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFBvcnRUeXBlKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyBjcmVhdGUgZGV0YWlsIG1lc3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvciBlbGVtZW50cwotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFjb250YWluc0NsYWltcykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCB3aGV0aGVyIGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltcy4KLSAgICogUmV0dXJucyB0cnVlIGlmIGRvY3VtZW50YXRpb24gZWxlbWVudCBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbSB3aXRoCi0gICAqIGlsbGVnYWwgc2NoZW1hIGRlZmluaXRpb24gVVJJLiAKLSAgICogbGVnYWwgaXMgJ2h0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vJwotICAgKiBAcGFyYW0gZWwKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMZWdhbENsYWltKEVsZW1lbnQgZWwpCi0gIHsKLSAgICBpZiAoZWwgPT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIGZpbmQgY2xhaW0KLSAgICBlbCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0KLSAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgIGNvbnRhaW5zQ2xhaW1zID0gdHJ1ZTsKLQotICAgIHdoaWxlIChlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfQ0xBSU1fQ09ORk9STVNUTykgPT0gbnVsbAotICAgICAgICB8fCBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfU09BUF9NVVNUVU5ERVJTVEFORCkgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZWwgPSBYTUxVdGlscy5maW5kRWxlbWVudChlbCwgV1NJX0NMQUlNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhmMDlkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTAxCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTAxIGV4dGVuZHMgQlAyMTAxCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjI3ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEwMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwMiBleHRlbmRzIEJQMjEwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc1ZjE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMDMgZXh0ZW5kcyBCUDIxMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc0Mjc3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTA0IGV4dGVuZHMgQlAyMTA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYmRkZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEwNQotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwNSBleHRlbmRzIEJQMjEwNQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTA1KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU3NDJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMDcgZXh0ZW5kcyBCUDIxMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEwNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2YmVhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTA4IGV4dGVuZHMgQlAyMTA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MGNjNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExMCBleHRlbmRzIEJQMjExMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTEwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjkyODZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTEgZXh0ZW5kcyBCUDIxMTEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0MGFiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTEyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTEyIGV4dGVuZHMgQlAyMTEyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMTE4OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExMyBleHRlbmRzIEJQMjExMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTEzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjU1YTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTQKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTQgZXh0ZW5kcyBCUDIxMTQKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2ZWY3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTE1Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTE1IGV4dGVuZHMgQlAyMTE1Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTUoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMzU4ZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExNiBleHRlbmRzIEJQMjExNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTE2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2IzNzdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTcKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTcgZXh0ZW5kcyBCUDIxMTcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkMzMwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTE4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTE4IGV4dGVuZHMgQlAyMTE4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTZjZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExOSBleHRlbmRzIEJQMjExOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTE5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJlMjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMjAKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMjAgZXh0ZW5kcyBCUDIxMjAKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEyMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI5OTRlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTIyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTIyIGV4dGVuZHMgQlAyMTIyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjA1YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEyMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEyMyBleHRlbmRzIEJQMjEyMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTIzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY0NTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIyMDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIyMDEgZXh0ZW5kcyBCUDIyMDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiNTlmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMjAyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMjAyIGV4dGVuZHMgQlAyMjAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDcxMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjIwOAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjIwOCBleHRlbmRzIEJQMjIwOAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMjA4KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGM1Nzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI0MDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTI0MDIgZXh0ZW5kcyBCUDI0MDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhY2Q0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDAzIGV4dGVuZHMgU1NCUDI0MDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRmYThlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDA0IGV4dGVuZHMgQlAyNDA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI0MDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZDQyMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjQwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjQwNiBleHRlbmRzIEJQMjQwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyNDA2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzBiZjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI0MTYKLSAqLwotcHVibGljIGNsYXNzIFdTSTI0MTYgZXh0ZW5kcyBCUDI0MTYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQxNihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MTcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyMzgzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDE3Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDE3IGV4dGVuZHMgQlAyNDE3Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI0MTcoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YmJiMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjcwMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjcwMCBleHRlbmRzIEJQMjcwMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyNzAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM3ZjUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI3MDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTI3MDEgZXh0ZW5kcyBCUDI3MDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjcwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2MzcwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNzAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNzAzIGV4dGVuZHMgQlAyNzAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI3MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNDNhN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJNDIwMAotICovCi1wdWJsaWMgY2xhc3MgV1NJNDIwMCBleHRlbmRzIEJQNDIwMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0k0MjAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzIzM2Q5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTQyMDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTQyMDEgZXh0ZW5kcyBCUDQyMDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJNDIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJkOWJhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0k0MjAyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0k0MjAyIGV4dGVuZHMgQlA0MjAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTQyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0FydGlmYWN0UmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXJ0aWZhY3RSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4OTlkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXJ0aWZhY3RSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIEFuIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBcnRpZmFjdFJlZmVyZW5jZSBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1RfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aW1lc3RhbXAuCi0gICAqIEByZXR1cm4gdGltZXN0YW1wLgotICAgKiBAc2VlICNzZXRUaW1lc3RhbXAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXAgYSB0aW1lc3RhbXAuCi0gICAqIEBzZWUgI2dldFRpbWVzdGFtcAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApOwotCi0gIC8qKgotICAgKiBHZXQgZG9jdW1lbnQgZWxlbWVudC4KLSAgICogQHJldHVybiBkb2N1bWVudCBlbGVtZW50LgotICAgKiBAc2VlICNzZXREb2N1bWVudEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEVsZW1lbnQgZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBkb2N1bWVudCBlbGVtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnRFbGVtZW50IGRvY3VtZW50IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICAgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHNlZSAjZ2V0RG9jdW1lbnRFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoCi0gICAgRG9jdW1lbnRFbGVtZW50IGRvY3VtZW50RWxlbWVudCwKLSAgICBTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXNzZXJ0aW9uUmVzdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXNzZXJ0aW9uUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MTEzZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0Fzc2VydGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUZXN0IGFzc2VydGlvbiByZXN1bHQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEFzc2VydGlvblJlc3VsdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX1JFU1VMVDsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfUkVQT1JULCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBSZXN1bHQgdmFsdWVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUX1BBU1NFRCA9ICJwYXNzZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRfRkFJTEVEID0gImZhaWxlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9QUkVSRVFfRkFJTEVEID0gInByZXJlcUZhaWxlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9NSVNTSU5HX0lOUFVUID0gIm1pc3NpbmdJbnB1dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9XQVJOSU5HID0gIndhcm5pbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRfTk9UX0FQUExJQ0FCTEUgPSAibm90QXBwbGljYWJsZSI7Ci0KLSAgLyoqCi0gICAqIEdldCByZXN1bHQuCi0gICAqIEByZXR1cm4gcmVzdWx0LgotICAgKiBAc2VlICNzZXRSZXN1bHQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVzdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZXN1bHQuCi0gICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCB2YWx1ZS4KLSAgICogQHNlZSAjZ2V0UmVzdWx0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoU3RyaW5nIHJlc3VsdCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24uCi0gICAqIEByZXR1cm4gcHJvZmlsZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRBc3NlcnRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIHByb2ZpbGVBc3NlcnRpb24gcHJvZmlsZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb24oVGVzdEFzc2VydGlvbiBwcm9maWxlQXNzZXJ0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGVudHJ5LgotICAgKiBAcmV0dXJuIGVudHJ5LgotICAgKiBAc2VlICNzZXRFbnRyeQotICAgKi8KLSAgcHVibGljIEVudHJ5IGdldEVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5IGFuIGVudHJ5LgotICAgKiBAc2VlICNnZXRFbnRyeQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnkoRW50cnkgZW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqIEBzZWUgI3NldEZhaWx1cmVEZXRhaWxMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBmYWlsdXJlIGRldGFpbCBtZXNzYWdlcy4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2VzLgotICAgKiBAc2VlICNnZXRGYWlsdXJlRGV0YWlsTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbExpc3QoVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KTsKLQotICAvKioKLSAgICogR2V0IHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gd2FybmluZyBtZXNzYWdlcy4KLSAgICogQHNlZSAjc2V0V2FybmluZ01lc3NhZ2VzCi0gICAqLwotICAvL3B1YmxpYyBWZWN0b3IgZ2V0V2FybmluZ01lc3NhZ2VzKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKiBAcGFyYW0gd2FybmluZ01lc3NhZ2VzIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEBzZWUgI2dldFdhcm5pbmdNZXNzYWdlcwotICAgKi8KLSAgLy9wdWJsaWMgdm9pZCBzZXRXYXJuaW5nTWVzc2FnZXMoVmVjdG9yIHdhcm5pbmdNZXNzYWdlcyk7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEByZXR1cm4gc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBwcmVyZXEgZmFpbGVkIGxpc3QuCi0gICAqIEByZXR1cm4gcHJlcmVxIGZhaWxlZCBsaXN0LgotICAgKiBAc2VlICNzZXRQcmVyZXFGYWlsZWRMaXN0Ci0gICAqLwotICBwdWJsaWMgUHJlcmVxRmFpbGVkTGlzdCBnZXRQcmVyZXFGYWlsZWRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwcmVyZXEgZmFpbGVkIGxpc3QuCi0gICAqIEBwYXJhbSBwcmVyZXFGYWlsZWRMaXN0IHByZXJlcSBmYWlsZWQgbGlzdC4KLSAgICogQHNlZSAjZ2V0UHJlcmVxRmFpbGVkTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxRmFpbGVkTGlzdChQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0J1aWxkUmVwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQnVpbGRSZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkYmMyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQnVpbGRSZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBQcm9maWxlIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJ1aWxkUmVwb3J0Ci17Ci0gIC8qKgotICAgKiBQcmVyZXEgdHlwZSAtIGVudHJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFUkVRX1RZUEVfRU5UUlkgPSAiZW50cnkiOwotCi0gIC8qKgotICAgKiBQcmVyZXEgdHlwZSAtIGVudHJ5IGNvbnRhaW5lci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRVJFUV9UWVBFX0VOVFJZX0NPTlRBSU5FUiA9ICJlbnRyeUNvbnRhaW5lciI7Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCBjdXJyZW50IHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50QXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogQWRkIGFydGlmYWN0IHJlZmVyZXJlbmNlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEVuZCBjdXJyZW50IGFydGlmYWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRBcnRpZmFjdCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSBlbnRyeSB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RW50cnkoRW50cnkgZW50cnkpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSBlbnRyeSB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RW52ZWxvcGVFbnRyeShFbnRyeSBlbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLSAgLyoqCi0gICAqIEVuZCBjdXJyZW50IGVudHJ5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRFbnRyeSgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEFkZCB0ZXN0IGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25SZXN1bHQgdGVzdCBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFzc2VydGlvblJlc3VsdChBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBmb3IgYSBzcGVjaWZpYyB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkIHRoZSB0ZXN0IGFzc2VydGlvbiBJRC4KLSAgICogQHJldHVybiAgdGhlIGFzc2VydGlvbiByZXN1bHQgZm9yIHRoZSBzcGVjaWZpZWQgdGVzdCBhc3NlcnRpb24gSUQuCi0gICAqICAgICAgICAgIElmIGFuIGFzc2VydGlvbiByZXN1bHQgd2FzIG5vdCBmb3VuZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBnZXRBc3NlcnRpb25SZXN1bHQoU3RyaW5nIGFzc2VydGlvbklkKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5LgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRhaW5lci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGVudHJ5IGNvbnRhaW5lci4KLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRhaW5lciBjcmVhdGVFbnRyeUNvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgZmFpbHVyZSBkZXRhaWwuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBmYWlsdXJlIGRldGFpbC4KLSAgICovCi0gIHB1YmxpYyBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLQotICAvKioKLSAgICogU2V0IHR5cGUgb2YgcHJlcmVxIHByb2Nlc3NpbmcgLSBlaXRoZXIgZW50cnkgb3IgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBwcmVyZXFUeXBlIHR5cGUgb2YgcHJlcmVxIHByb2Nlc3NpbmcgLSBlaXRoZXIgZW50cnkgb3IgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVyZXFUeXBlKFN0cmluZyBwcmVyZXFUeXBlKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5Y2Q4OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotCi0vKioKLSAqIFRlc3QgYXNzZXJ0aW9uIHRhcmdldC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRW50cnkgZXh0ZW5kcyBFbnRyeVJlc3VsdCwgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9FTlRSWTsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfUkVQT1JULCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgLy9wdWJsaWMgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqLwotICAvL3B1YmxpYyB2b2lkIHNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGVudHJ5IHR5cGUuCi0gICAqIEByZXR1cm4gZW50cnkgdHlwZS4KLSAgICogQHNlZSAjc2V0RW50cnlUeXBlCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlIGdldEVudHJ5VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBlbnRyeSB0eXBlLgotICAgKiBAc2VlICNnZXRFbnRyeVR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVudHJ5VHlwZShFbnRyeVR5cGUgZW50cnlUeXBlKTsKLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IG5hbWUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgbmFtZS4KLSAgICogQHNlZSAjc2V0QXJ0aWZhY3ROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgYXJ0aWZhY3QgbmFtZS4KLSAgICogQHBhcmFtIGFydGlmYWN0TmFtZSBhcnRpZmFjdCBuYW1lLgotICAgKiBAc2VlICNnZXRBcnRpZmFjdE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFydGlmYWN0TmFtZShTdHJpbmcgYXJ0aWZhY3ROYW1lKTsKLQotICAvKioKLSAgICogR2V0IHJlZmVyZW5jZSBJRC4KLSAgICogQHJldHVybiByZWZlcmVuY2UgSUQuCi0gICAqIEBzZWUgI3NldFJlZmVyZW5jZUlECi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZUlEKCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZWZlcmVuY2UgSUQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VJRCByZWZlcmVuY2VJRC4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZUlEKFN0cmluZyByZWZlcmVuY2VJRCk7Ci0KLSAgLyoqCi0gICAqIEdldCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcmV0dXJuIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldFBhcmVudEVsZW1lbnROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudEVsZW1lbnROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50RWxlbWVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjZ2V0UGFyZW50RWxlbWVudE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBlbnRyeSBkZXRhaWwuCi0gICAqIEByZXR1cm4gZW50cnkgZGV0YWlsLgotICAgKiBAc2VlICNzZXRFbnRyeURldGFpbAotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRFbnRyeURldGFpbCgpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgZGV0YWlsLgotICAgKiBAcGFyYW0gZGV0YWlsIGVudHJ5IGRldGFpbC4KLSAgICogQHNlZSAjZ2V0RW50cnlEZXRhaWwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVudHJ5RGV0YWlsKE9iamVjdCBkZXRhaWwpOwotCi0gIC8qKgotICAgKiBHZXQgZW50cnkgY29udGFpbmVyLgotICAgKiBAcmV0dXJuIGVudHJ5IGNvbnRhaW5lci4KLSAgICogQHNlZSAjc2V0RW50cnlDb250YWluZXIKLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRhaW5lciBnZXRFbnRyeUNvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgY29udGFpbmVyLgotICAgKiBAcGFyYW0gZW50cnlDb250YWluZXIgZW50cnkgY29udGFpbmVyLgotICAgKiBAc2VlICNnZXRFbnRyeUNvbnRhaW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlDb250YWluZXIoRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIpOwotCi0gIC8qKgotICAgKiBHZXQgc3RhcnQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEBwYXJhbSBzaG93TG9nRW50cnkgc2hvdyBsb2cgZW50cnkgb3B0aW9uLgotICAgKiBAcmV0dXJuIHN0YXJ0IFhNTCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIGJvb2xlYW4gc2hvd0xvZ0VudHJ5KTsKLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcGFyYW0gc2hvd0xvZ0VudHJ5IHNob3cgbG9nIGVudHJ5IG9wdGlvbi4KLSAgICogQHJldHVybiBzdGFydCBYTUwgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lLCBib29sZWFuIHNob3dMb2dFbnRyeSwgYm9vbGVhbiBlbnZlbG9wZUFydGlmYWN0VHlwZSk7Ci0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIGVuZCBYTUwgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvRW50cnlDb250YWluZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeUNvbnRhaW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTkxZTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeUNvbnRhaW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBjb250YWluZXIgd2hpY2ggaGFzIG9uZSBvciBtb3JlIGVudHJpZXMuCi0gKiBGb3IgZXhhbXBsZSwgYSBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIG9uZSBvciBtb3JlIGVsZW1lbnRzLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5Q29udGFpbmVyIGV4dGVuZHMgRW50cnlSZXN1bHQKLXsKLSAgLyoqCi0gICAqIEdldCBjb250YWluZXIgaWQuCi0gICAqIEByZXR1cm4gY29udGFpbmVyIGlkLgotICAgKiBAc2VlICNzZXRJZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gIC8qKgotICAgKiBTZXQgY29udGFpbmVyIGlkLgotICAgKiBAcGFyYW0gaWQgY29udGFpbmVyIGlkLgotICAgKiBAc2VlICNnZXRJZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeVJlc3VsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5UmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YTRmNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5UmVzdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLS8qKgotICogUmVzdWx0IGZvciBhIHNwZWNpZmljIHRlc3QgYXNzZXJ0aW9uLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5UmVzdWx0Ci17Ci0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdCBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMuCi0gICAqIEByZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdHMuCi0gICAqLwotICBwdWJsaWMgVHJlZU1hcCBnZXRBc3NlcnRpb25SZXN1bHRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBmb3IgYSBzcGVjaWZpYyB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRoZSBhc3NlcnRpb24gcmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIHRlc3QgYXNzZXJ0aW9uIElELgotICAgKiAgICAgICAgIElmIGFuIGFzc2VydGlvbiByZXN1bHQgd2FzIG5vdCBmb3VuZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBnZXRBc3NlcnRpb25SZXN1bHQoU3RyaW5nIGFzc2VydGlvbklkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9GYWlsdXJlRGV0YWlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvRmFpbHVyZURldGFpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzhhY2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9GYWlsdXJlRGV0YWlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogRmFpbHVyZSBkZXRhaWwuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRmFpbHVyZURldGFpbCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUw7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHNlZSAjc2V0RmFpbHVyZU1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmYWlsdXJlTWVzc2FnZSBmYWlsdXJlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZU1lc3NhZ2UoU3RyaW5nIGZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IHJlZmVyZW5jZSB0eXBlLgotICAgKiBAcmV0dXJuIHJlZmVyZW5jZSB0eXBlLgotICAgKiBAc2VlICNzZXRSZWZlcmVuY2VUeXBlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZVR5cGUoKTsKLQotICAvKioKLSAgICogU2V0IHJlZmVyZW5jZSB0eXBlLgotICAgKiBAcGFyYW0gcmVmZXJlbmNlVHlwZSByZWZlcmVuY2UgdHlwZS4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlVHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVHlwZShTdHJpbmcgcmVmZXJlbmNlVHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZWZlcmVuY2UgSUQuCi0gICAqIEByZXR1cm4gcmVmZXJlbmNlIElELgotICAgKiBAc2VlICNzZXRSZWZlcmVuY2VJRG4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlSUQoKTsKLQotICAvKioKLSAgICogU2V0IHJlZmVyZW5jZSBJRC4KLSAgICogQHBhcmFtIHJlZmVyZW5jZUlEIHJlZmVyZW5jZSBJRC4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZUlEbihTdHJpbmcgcmVmZXJlbmNlSUQpOwotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRFbGVtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50TG9jYXRpb24gZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZWxlbWVudExvY2F0aW9uIGVsZW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUHJlcmVxRmFpbGVkTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1ByZXJlcUZhaWxlZExpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwNTlkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUHJlcmVxRmFpbGVkTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBtYWludGFpbiBhbmQgYWNjZXNzIHRoZSBQcmVyZXF1aXNpdGUgRmFpbGVkIExpc3QuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUHJlcmVxRmFpbGVkTGlzdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICAqIEVsZW1lbnQgbmFtZS4KLSAgICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9QUkVSRVFfRkFJTEVEX0xJU1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogQWRkIHRlc3QgYXNzZXJ0aW9uIElELgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uSUQgdGVzdCBhc3NlcnRpb24gSUQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRUZXN0QXNzZXJ0aW9uSUQoU3RyaW5nIGFzc2VydGlvbklEKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjBhZDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogQ29uZm9ybWFuY2UgdGVzdCByZXBvcnQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcG9ydCBleHRlbmRzIFdTSURvY3VtZW50LCBCdWlsZFJlcG9ydAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVQT1JUOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBvcnQgY29udGV4dC4KLSAgICogQHJldHVybiByZXBvcnQgY29udGV4dC4KLSAgICogQHNlZSAjc2V0UmVwb3J0Q29udGV4dAotICAgKi8KLSAgcHVibGljIFJlcG9ydENvbnRleHQgZ2V0UmVwb3J0Q29udGV4dCgpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwb3J0IGNvbnRleHQuCi0gICAqIEBwYXJhbSByZXBvcnRDb250ZXh0IHJlcG9ydCBjb250ZXh0LgotICAgKiBAc2VlICNnZXRSZXBvcnRDb250ZXh0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRDb250ZXh0KFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGFydGlmYWN0LgotICAgKiBAcmV0dXJuIGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0QXJ0aWZhY3QgZ2V0Q3VycmVudEFydGlmYWN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGVudHJ5LgotICAgKiBAcmV0dXJuIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRW50cnkgZ2V0Q3VycmVudEVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRFbnRyaWVzLgotICAgKiBAcmV0dXJuIGVudHJ5IGxpc3QuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbnRyaWVzKCk7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3RzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXJ0aWZhY3RzKCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeAotICAgKiBAcmV0dXJuIHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBlbmQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXgKLSAgICogQHJldHVybiBlbmQgZWxlbWVudCBzdHJpbmcuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZXJyb3IgWE1MIHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHBhcmFtIGVycm9yRGV0YWlsIGFuIGVycm9yIGRldGFpbC4KLSAgICogQHJldHVybiBlcnJvciBYTUwgc3RyaW5nLiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIFN0cmluZyBlcnJvckRldGFpbCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdW1tYXJ5IHJlc3VsdC4gCi0gICAqIEByZXR1cm4gc3VtbWFyeSByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnlSZXN1bHQoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydEFydGlmYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0QXJ0aWZhY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGExZmI5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0QXJ0aWZhY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuQXJ0aWZhY3RUeXBlOwotCi0vKioKLSAqIFJlcG9ydCBhcnRpZmFjdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZXBvcnRBcnRpZmFjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IHR5cGUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIEFydGlmYWN0VHlwZSBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhcnRpZmFjdCB0eXBlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RUeXBlIGFydGlmYWN0IHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSk7Ci0KLSAgLyoqCi0gICAqIEFkZCBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5IGFuIGVudHJ5LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnkoRW50cnkgZW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgZW50cnkgbGlzdC4KLSAgICogQHJldHVybiBlbnRyeSBsaXN0LgotICAgKi8KLSAgcHVibGljIFRyZWVNYXAgZ2V0RW50cnlMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBlbmQgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydENvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1MDdiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLQotLyoqCi0gKiBSZXBvcnQgY29udGV4dC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXBvcnRDb250ZXh0Ci17Ci0gIC8qKgotICAgKiBSZXBvcnQgdGl0bGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlcG9ydFRpdGxlID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1RJVExFOwotCi0gIC8qKgotICAgKiBQcm9maWxlIGRlZmluaXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnM7Ci0KLSAgLyoqCi0gICAqIEFuYWx5emVyLgotICAgKi8KLSAgcHJvdGVjdGVkIEFuYWx5emVyIGFuYWx5emVyOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVwb3J0IGNvbnRleHQuCi0gICAqIEBwYXJhbSByZXBvcnRUaXRsZSByZXBvcnQgdGl0bGUuCi0gICAqIEBwYXJhbSBwcm9maWxlQXNzZXJ0aW9ucyBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGFuYWx5emVyIGFuIEFuYWx5emVyIG9iamVjdC4KLSAgKi8KLSAgcHVibGljIFJlcG9ydENvbnRleHQoCi0gICAgU3RyaW5nIHJlcG9ydFRpdGxlLAotICAgIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zLAotICAgIEFuYWx5emVyIGFuYWx5emVyKQotICB7Ci0gICAgdGhpcy5yZXBvcnRUaXRsZSA9IHJlcG9ydFRpdGxlOwotICAgIHRoaXMucHJvZmlsZUFzc2VydGlvbnMgPSBwcm9maWxlQXNzZXJ0aW9uczsKLSAgICB0aGlzLmFuYWx5emVyID0gYW5hbHl6ZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcG9ydCB0aXRsZS4KLSAgICogQHJldHVybiByZXBvcnQgdGl0bGUuCi0gICAqIEBzZWUgI3NldFJlcG9ydFRpdGxlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcG9ydFRpdGxlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlcG9ydFRpdGxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCByZXBvcnQgdGl0bGUuCi0gICAqIEBwYXJhbSByZXBvcnRUaXRsZSByZXBvcnQgdGl0bGUuCi0gICAqIEBzZWUgI2dldFJlcG9ydFRpdGxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRUaXRsZShTdHJpbmcgcmVwb3J0VGl0bGUpCi0gIHsKLSAgICB0aGlzLnJlcG9ydFRpdGxlID0gcmVwb3J0VGl0bGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHJldHVybiBwcm9maWxlIGRlZmluaXRpb24uCi0gICAqIEBzZWUgI3NldFByb2ZpbGVBc3NlcnRpb25zCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgZ2V0UHJvZmlsZUFzc2VydGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZUFzc2VydGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIHByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHNlZSAjZ2V0UHJvZmlsZUFzc2VydGlvbnMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2ZpbGVBc3NlcnRpb25zKFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zKQotICB7Ci0gICAgdGhpcy5wcm9maWxlQXNzZXJ0aW9ucyA9IHByb2ZpbGVBc3NlcnRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbmFseXplci4KLSAgICogQHJldHVybiBhbmFseXplci4KLSAgICogQHNlZSAjc2V0QW5hbHl6ZXIKLSAgICovCi0gIHB1YmxpYyBBbmFseXplciBnZXRBbmFseXplcigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hbmFseXplcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplciBhbiBBbmFseXplciBvYmplY3QuCi0gICAqIEBzZWUgI2dldEFuYWx5emVyCi0gICAqIAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QW5hbHl6ZXIoQW5hbHl6ZXIgYW5hbHl6ZXIpCi0gIHsKLSAgICB0aGlzLmFuYWx5emVyID0gYW5hbHl6ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnRXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnRXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3ZmM2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0V3JpdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIHJlcG9ydCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZXBvcnRXcml0ZXIgZXh0ZW5kcyBEb2N1bWVudFdyaXRlcgotewotICAvKioKLSAgICogV3JpdGUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgdXNpbmcgdGhlIGxvY2F0aW9uCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRMb2NhdGlvbiBtZXRob2QuCi0gICAqIEBwYXJhbSByZXBvcnQgYSByZXBvcnQuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVwb3J0IGEgcmVwb3J0LgotICAgKiBAcGFyYW0gd3JpdGVyIGEgV3JpdGVyIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQsIFdyaXRlciB3cml0ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhNzg0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLS8qKgotICogQ29uZm9ybWFuY2UgdGVzdCByZXBvcnRlciBpbnRlcmZhY2UuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcG9ydGVyIGV4dGVuZHMgQnVpbGRSZXBvcnQsIFdyaXRlUmVwb3J0Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvV3JpdGVSZXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9Xcml0ZVJlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwZDlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9Xcml0ZVJlcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyAuLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV3JpdGVSZXBvcnQKLXsKLSAgLyoqCi0gICAqIFN0YXJ0IGNvbmZvcm1hbmNlIHJlcG9ydC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydFJlcG9ydCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEZpbmlzaCB0aGUgY29uZm9ybWFuY2UgcmVwb3J0IGJ5IGFkZGluZyB0aGUgc3VtbWFyeSBhbmQgdGVzdCBjb3ZlcmFnZSBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBmaW5pc2hSZXBvcnQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBGaW5pc2ggdGhlIGNvbmZvcm1hbmNlIHJlcG9ydCBiZWNhdXNlIG9mIGFuIGFuYWx5emVyIGVycm9yLgotICAgKiBAcGFyYW0gZXJyb3JEZXRhaWwgYW5hbHl6ZXIgZXJyb3IuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIHRoZSBiYXNlIFdTLUkgZXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgZmluaXNoUmVwb3J0V2l0aEVycm9yKFN0cmluZyBlcnJvckRldGFpbCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHJlcG9ydC4KLSAgICogQHJldHVybiByZXBvcnQuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IGdldFJlcG9ydCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXJ0aWZhY3RSZWZlcmVuY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9BcnRpZmFjdFJlZmVyZW5jZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiNDZiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9BcnRpZmFjdFJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci0KLS8qKgotICogQW4gYXJ0aWZhY3QgcmVmZXJlbmNlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQXJ0aWZhY3RSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgQXJ0aWZhY3RSZWZlcmVuY2UKLXsKLSAgLyoqCi0gICAqIFRpbWVzdGFtcC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGltZXN0YW1wID0gbnVsbDsKLQotICAvKioKLSAgICogT3B0aW9uYWwgZG9jdW1lbnQgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudEVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogT3B0aW9uYWwgZG9jdW1lbnQgZWxlbWVudCBuYW1lc3BhY2UgbmFtZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudE5hbWVzcGFjZU5hbWUgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlI2dldFRpbWVzdGFtcCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRpbWVzdGFtcCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50aW1lc3RhbXA7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSNzZXRUaW1lc3RhbXAoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApCi0gIHsKLSAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlI2dldERvY3VtZW50RWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRFbGVtZW50IGdldERvY3VtZW50RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudEVsZW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSNzZXREb2N1bWVudEVsZW1lbnQoRG9jdW1lbnRFbGVtZW50LCBTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoCi0gICAgRG9jdW1lbnRFbGVtZW50IGRvY3VtZW50RWxlbWVudCwKLSAgICBTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnRFbGVtZW50OwotICAgIHRoaXMuZWxlbWVudE5hbWVzcGFjZU5hbWUgPSBuYW1lc3BhY2VOYW1lOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiICBBcnRpZmFjdCBSZWZlcmVuY2U6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICB0aW1lc3RhbXAgLi4uLi4uLi4uLi4gIiArIHRoaXMudGltZXN0YW1wKTsKLQotICAgIGlmICh0aGlzLmRvY3VtZW50RWxlbWVudCAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgIiAgICBkb2N1bWVudEVsZW1lbnQgLi4uLi4gIgotICAgICAgICAgICsgdGhpcy5kb2N1bWVudEVsZW1lbnQudG9YTUxTdHJpbmcodGhpcy5lbGVtZW50TmFtZXNwYWNlTmFtZSkpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgZWxlbWVudCAKLSAgICBwdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1RJTUVTVEFNUCArICI9XCIiICsgZ2V0VGltZXN0YW1wKCkgKyAiXCI+Iik7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIGRvY3VtZW50IGVsZW1lbnQsIHRoZW4gYWRkIGl0Ci0gICAgaWYgKHRoaXMuZG9jdW1lbnRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnQoZG9jdW1lbnRFbGVtZW50LnRvWE1MU3RyaW5nKHRoaXMuZWxlbWVudE5hbWVzcGFjZU5hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXNzZXJ0aW9uUmVzdWx0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXNzZXJ0aW9uUmVzdWx0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjJkOGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0Fzc2VydGlvblJlc3VsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0OwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotCi0vKioKLSAqIFRlc3QgYXNzZXJ0aW9uIHJlc3VsdC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRJbXBsIGltcGxlbWVudHMgQXNzZXJ0aW9uUmVzdWx0Ci17Ci0gIC8qKgotICAgKiBBc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXN1bHQgPSBudWxsOwotCi0gIC8qKgotICAgKiBFbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByb2ZpbGUgdGVzdCBhc3NlcnRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSBmYWlsZWQgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRJbXBsKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldFJlc3VsdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlc3VsdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQjc2V0UmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoU3RyaW5nIHJlc3VsdCkKLSAgewotICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEFzc2VydGlvbigpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRBc3NlcnRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGVzdEFzc2VydGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRBc3NlcnRpb24ob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gIHsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb24gPSB0ZXN0QXNzZXJ0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRFbnRyeShvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnkoRW50cnkgZW50cnkpCi0gIHsKLSAgICB0aGlzLmVudHJ5ID0gZW50cnk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQjZ2V0RmFpbHVyZURldGFpbExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRGYWlsdXJlRGV0YWlsTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5mYWlsdXJlRGV0YWlsTGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRGYWlsdXJlRGV0YWlsTGlzdChqYXZhLnV0aWwuVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbExpc3QoVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KQotICB7Ci0gICAgdGhpcy5mYWlsdXJlRGV0YWlsTGlzdCA9IGZhaWx1cmVEZXRhaWxMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdHNPcHRpb24gZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24ob3JnLndzaS50ZXN0LmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24pCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24gPSBhc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldFByZXJlcUZhaWxlZExpc3QoKQotICAgKi8KLSAgcHVibGljIFByZXJlcUZhaWxlZExpc3QgZ2V0UHJlcmVxRmFpbGVkTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5wcmVyZXFGYWlsZWRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I3NldFByZXJlcUZhaWxlZExpc3Qob3JnLndzaS50ZXN0LnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxRmFpbGVkTGlzdChQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QpCi0gIHsKLSAgICB0aGlzLnByZXJlcUZhaWxlZExpc3QgPSBwcmVyZXFGYWlsZWRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfSUQgKyAiPVwiIiArIHRoaXMudGVzdEFzc2VydGlvbi5nZXRJZCgpICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cIiIgKyB0aGlzLnJlc3VsdCArICJcIj4iKTsKLQotICAgIC8vIEFERDogQWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgdGFyZ2V0cwotCi0gICAgLy8gQWRkIHByZXJlcSBmYWlsZWQgbGlzdAotICAgIGlmICh0aGlzLnByZXJlcUZhaWxlZExpc3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChwcmVyZXFGYWlsZWRMaXN0LnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIEFERDogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcwotICAgIC8vIElmIHJlc3VsdCBpcyBmYWlsZWQgb3Igd2FybmluZywgdGhlbiBhZGQgZmFpbHVyZSBtZXNzYWdlCi0gICAgaWYgKChyZXN1bHQuZXF1YWxzKFJFU1VMVF9GQUlMRUQpIHx8IHJlc3VsdC5lcXVhbHMoUkVTVUxUX1dBUk5JTkcpKQotICAgICAgJiYgKGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlKCkpKQotICAgIHsKLSAgICAgIHB3LnByaW50KAotICAgICAgICAiICAgICAgICA8IgotICAgICAgICAgICsgbnNOYW1lCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX01FU1NBR0UKLSAgICAgICAgICArICIgeG1sOmxhbmc9XCJlblwiPiIpOwotICAgICAgcHcucHJpbnQoRE9NVXRpbHMuY2xlYW5TdHJpbmcodGhpcy50ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVNZXNzYWdlKCkpKTsKLSAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSArICI+Iik7Ci0gICAgfQotCi0gICAgLy8gQUREOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzCi0gICAgLy8gSWYgYW55IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2VzIHdlcmUgc3BlY2lmaWVkLCB0aGVuIGFkZCB0aGVtCi0gICAgaWYgKChmYWlsdXJlRGV0YWlsTGlzdCAhPSBudWxsKQotICAgICAgJiYgKGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVEZXRhaWwoKSkpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYWlsdXJlRGV0YWlsTGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnQoKChGYWlsdXJlRGV0YWlsKSBpdGVyYXRvci5uZXh0KCkpLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEVuZCB0aGUgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0RlZmF1bHRSZXBvcnRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRGVmYXVsdFJlcG9ydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYWMyZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRGVmYXVsdFJlcG9ydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgUGFyYXNvZnQgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZXJyb3JzIGZyb20gdGhlIGFuYWx5emVyLgotICogRXh0ZW5kIHRoaXMgY2xhc3MgZm9yIHNwZWNpZmljIHR5cGVzIG9mIHJlcG9ydGluZywgc3VjaCBhcyByZXBvcnRpbmcKLSAqIGluIGRpZmZlcmVudCBmb3JtYXRzLCByZXBvcnRpbmcgdG8gZmlsZXMsIHJlcG9ydGluZyB0byBhIEdVSS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFJlcG9ydGVyIGltcGxlbWVudHMgUmVwb3J0ZXIKLXsKLSAgLyoqCi0gICAqIENvbmZvcm1hbmNlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBSZXBvcnQgcmVwb3J0OwotCi0gIC8qKgotICAgKiBEb2N1bWVudCB3cml0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcjsKLQotICAvKioKLSAgICogQW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHJvdGVjdGVkIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnOwotCi0gIC8qKgotICAgKiBBc3NlcnRvaW4gcmVzdWx0IHR5cGUuCi0gICAqLwotICBwcm90ZWN0ZWQgQXNzZXJ0aW9uUmVzdWx0VHlwZSBhc3NlcnRpb25SZXN1bHRUeXBlOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVzdWx0IHJlcG9ydGVyLgotICAgKiBAcGFyYW0gcmVwb3J0IGEgUmVwb3J0IG9iamVjdC4KLSAgICogQHBhcmFtIHJlcG9ydFdyaXRlciBhIFJlcG9ydFdyaXRlck9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBEZWZhdWx0UmVwb3J0ZXIoUmVwb3J0IHJlcG9ydCwgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcikKLSAgewotICAgIHRoaXMucmVwb3J0ID0gcmVwb3J0OwotICAgIHRoaXMucmVwb3J0V3JpdGVyID0gcmVwb3J0V3JpdGVyOwotCi0gICAgLy8gQUREOiBWZXJpZnkgdGhhdCB3cml0ZXIgc2V0IGluIHJlcG9ydFdyaXRlcgotCi0gICAgLy8gR2V0IHJlcG9ydCBjb250ZXh0Ci0gICAgdGhpcy5hbmFseXplckNvbmZpZyA9Ci0gICAgICByZXBvcnQuZ2V0UmVwb3J0Q29udGV4dCgpLmdldEFuYWx5emVyKCkuZ2V0QW5hbHl6ZXJDb25maWcoKTsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdFR5cGUgPQotICAgICAgdGhpcy5hbmFseXplckNvbmZpZy5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkuZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjc2V0Q3VycmVudEFydGlmYWN0KG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50QXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0LnNldEN1cnJlbnRBcnRpZmFjdChyZXBvcnRBcnRpZmFjdCk7Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0QXJ0aWZhY3QuZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKAotICAgICAgbmV3IFN0cmluZ1JlYWRlcihyZXBvcnQuZ2V0Q3VycmVudEFydGlmYWN0KCkuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICAgIHJlcG9ydC5lbmRDdXJyZW50QXJ0aWZhY3QoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2FkZEFydGlmYWN0UmVmZXJlbmNlKG9yZy53c2kudGVzdC5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBcnRpZmFjdFJlZmVyZW5jZShBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihhcnRpZmFjdFJlZmVyZW5jZS50b1hNTFN0cmluZygiIikpKTsKLQotICAgIC8vIEFkZCBhcnRpZmFjdCByZWZlcmVuY2UgdG8gcmVwb3J0Ci0gICAgcmVwb3J0LmFkZEFydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I3NldEN1cnJlbnRFbnRyeShvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEVudHJ5KEVudHJ5IGVudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuc2V0Q3VycmVudEVudHJ5KGVudHJ5KTsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKAotICAgICAgICBlbnRyeS5nZXRTdGFydFhNTFN0cmluZygKLSAgICAgICAgICAiIiwKLSAgICAgICAgICB0aGlzCi0gICAgICAgICAgICAucmVwb3J0Ci0gICAgICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgLmdldEFuYWx5emVyQ29uZmlnKCkKLSAgICAgICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkKLSAgICAgICAgICAgIC5nZXRTaG93TWVzc2FnZUVudHJ5KCkpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50RW50cnkob3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFbnZlbG9wZUVudHJ5KEVudHJ5IGVudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuc2V0Q3VycmVudEVudHJ5KGVudHJ5KTsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKAotICAgICAgICBlbnRyeS5nZXRTdGFydFhNTFN0cmluZygKLSAgICAgICAgICAiIiwKLSAgICAgICAgICB0aGlzCi0gICAgICAgICAgICAucmVwb3J0Ci0gICAgICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgLmdldEFuYWx5emVyQ29uZmlnKCkKLSAgICAgICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkKLSAgICAgICAgICAgIC5nZXRTaG93TWVzc2FnZUVudHJ5KCksCi0JCSAgdHJ1ZSkpKTsKLSAgfQotLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZW5kQ3VycmVudEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRFbnRyeSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlcG9ydFdyaXRlci53cml0ZSgKLSAgICAgIG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0LmdldEN1cnJlbnRFbnRyeSgpLmdldEVuZFhNTFN0cmluZygiIikpKTsKLSAgICByZXBvcnQuZW5kQ3VycmVudEVudHJ5KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBCYXNlZCBvbiB0aGUgY29uZmlnIG9wdGlvbnMsIHdyaXRlIG91dCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgaWYgKChhc3NlcnRpb25SZXN1bHRUeXBlLmlzQWxsKCkpCi0gICAgICB8fCAoKGFzc2VydGlvblJlc3VsdFR5cGUuaXNGYWlsZWRPbmx5KCkpCi0gICAgICAgICYmIChhc3NlcnRpb25SZXN1bHQuZ2V0UmVzdWx0KCkuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKSkpCi0gICAgICB8fCAoKGFzc2VydGlvblJlc3VsdFR5cGUuaXNOb3RQYXNzZWQoKSkKLSAgICAgICAgJiYgKCFhc3NlcnRpb25SZXN1bHQuZ2V0UmVzdWx0KCkuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkpCi0JICAgICAgfHwgKChhc3NlcnRpb25SZXN1bHRUeXBlLmlzTm90SW5mbygpKQotCSAgICAgICAgICAgICYmICghYXNzZXJ0aW9uUmVzdWx0LmdldEFzc2VydGlvbigpLmdldFR5cGUoKS5lcXVhbHMoVGVzdEFzc2VydGlvbi5UWVBFX0lORk9STUFUSU9OQUwpKSkpCi0gICAgewotICAgICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIoYXNzZXJ0aW9uUmVzdWx0LnRvWE1MU3RyaW5nKCIiKSkpOwotICAgIH0KLQotICAgIC8vIEFkZCBhc3NlcnRpb24gdG8gcmVwb3J0Ci0gICAgcmVwb3J0LmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZ2V0QXNzZXJ0aW9uUmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGdldEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQpCi0gIHsKLSAgICAvLyBHZXQgdGhlIGFzc2VydGlvbiByZXN1bHQgZnJvbSB0aGUgY3VycmVudCBhc3NlcnRpb24gdGFyZ2V0Ci0gICAgcmV0dXJuIHJlcG9ydC5nZXRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjc3RhcnRSZXBvcnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRSZXBvcnQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBXcml0ZSBvdXQgc3RhcnQgb2YgcmVwb3J0Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0LmdldFN0YXJ0WE1MU3RyaW5nKCIiKSkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjZmluaXNoUmVwb3J0KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGZpbmlzaFJlcG9ydCgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEVuZCB0aGUgcmVwb3J0IGZpbGUKLSAgICByZXBvcnRXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihyZXBvcnQuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjZmluaXNoUmVwb3J0V2l0aEVycm9yKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBmaW5pc2hSZXBvcnRXaXRoRXJyb3IoU3RyaW5nIGVycm9yRGV0YWlsKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDaGVjayBpZiBlbnRyeSBvciBhcnRpZmFjdCBuZWVkIHRvIGJlIGNsb3NlZAotICAgIGlmICh0aGlzLnJlcG9ydC5nZXRDdXJyZW50RW50cnkoKSAhPSBudWxsKQotICAgICAgZW5kQ3VycmVudEVudHJ5KCk7Ci0gICAgaWYgKHRoaXMucmVwb3J0LmdldEN1cnJlbnRBcnRpZmFjdCgpICE9IG51bGwpCi0gICAgICBlbmRDdXJyZW50QXJ0aWZhY3QoKTsKLQotICAgIC8vIEVuZCB0aGUgcmVwb3J0IGZpbGUKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKHJlcG9ydC5nZXRFcnJvclhNTFN0cmluZygiIiwgZXJyb3JEZXRhaWwpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydC5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0LmNyZWF0ZUFydGlmYWN0KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVFbnRyeSgpCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydC5jcmVhdGVFbnRyeSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjY3JlYXRlRW50cnlDb250YWluZXIoKQotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGFpbmVyIGNyZWF0ZUVudHJ5Q29udGFpbmVyKCkKLSAgewotICAgIHJldHVybiByZXBvcnQuY3JlYXRlRW50cnlDb250YWluZXIoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUZhaWx1cmVEZXRhaWwoKQotICAgKi8KLSAgcHVibGljIEZhaWx1cmVEZXRhaWwgY3JlYXRlRmFpbHVyZURldGFpbCgpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0LmNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LldyaXRlUmVwb3J0I2dldFJlcG9ydCgpCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IGdldFJlcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRQcmVyZXFUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVyZXFUeXBlKFN0cmluZyBwcmVyZXFUeXBlKQotICB7Ci0gICAgdGhpcy5yZXBvcnQuc2V0UHJlcmVxVHlwZShwcmVyZXFUeXBlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlDb250YWluZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeUNvbnRhaW5lckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2ZDA4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeUNvbnRhaW5lckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgY29udGFpbmVyIGZvciBvbmUgb3IgbW9yZSBlbnRyaWVzLiAgCi0gKiBBbiBleGFtcGxlIHdvdWxkIGJlIGEgV1NETCBkb2N1bWVudC4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5Q29udGFpbmVySW1wbAotICBleHRlbmRzIEVudHJ5UmVzdWx0SW1wbAotICBpbXBsZW1lbnRzIEVudHJ5Q29udGFpbmVyCi17Ci0gIC8qKgotICAgKiBDb250YWluZXIgSUQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGlkOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5Q29udGFpbmVyI2dldElkKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeUNvbnRhaW5lciNzZXRJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuICJbIiArIHRoaXMuaWQgKyAiXSAiICsgdGhpcy5hc3NlcnRpb25SZXN1bHRMaXN0OwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0VudHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDc3NTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5Q29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRyeSBpbiBhIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5SW1wbCBleHRlbmRzIEVudHJ5UmVzdWx0SW1wbCBpbXBsZW1lbnRzIEVudHJ5Ci17Ci0gIC8qKgotICAgKiBFbnRyeSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5VHlwZSBlbnRyeVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBBcnRpZmFjdCBuYW1lIChvcHRpb25hbCkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGFydGlmYWN0TmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlZmVyZW5jZSBJRC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlSUQgPSBudWxsOwotCi0gIC8qKgotICAgKiBQYXJlbnQgZWxlbWVudCBuYW1lIChvbmx5IHVzZWQgd2hlbiBlbnRyeSB0eXBlIGlzICJwb3J0IiBvciAib3BlcmF0aW9uIikuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gbnVsbDsKLQotICAvKioKLSAgICogRW50cnkgZGV0YWlsIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZW50cnlEZXRhaWwgPSBudWxsOwotCi0gIC8qKgotICAgKiBFbnRyeSBjb250YWluZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVudHJ5VHlwZSgpCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlIGdldEVudHJ5VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeVR5cGUoRW50cnlUeXBlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlUeXBlKEVudHJ5VHlwZSBlbnRyeVR5cGUpCi0gIHsKLSAgICB0aGlzLmVudHJ5VHlwZSA9IGVudHJ5VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEFydGlmYWN0TmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hcnRpZmFjdE5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRBcnRpZmFjdE5hbWUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFydGlmYWN0TmFtZShTdHJpbmcgYXJ0aWZhY3ROYW1lKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdE5hbWUgPSBhcnRpZmFjdE5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNnZXRSZWZlcmVuY2VJRCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZUlEKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjc2V0UmVmZXJlbmNlSUQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlSUQoU3RyaW5nIHJlZmVyZW5jZUlEKQotICB7Ci0gICAgdGhpcy5yZWZlcmVuY2VJRCA9IHJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0UGFyZW50RWxlbWVudE5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5wYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I3NldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMucGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVudHJ5RGV0YWlsKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0RW50cnlEZXRhaWwoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeURldGFpbChPYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeURldGFpbChPYmplY3QgZW50cnlEZXRhaWwpCi0gIHsKLSAgICB0aGlzLmVudHJ5RGV0YWlsID0gZW50cnlEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNnZXRFbnRyeUNvbnRhaW5lcigpCi0gICAqLwotICBwdWJsaWMgRW50cnlDb250YWluZXIgZ2V0RW50cnlDb250YWluZXIoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeUNvbnRhaW5lcihvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5Q29udGFpbmVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlDb250YWluZXIoRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIpCi0gIHsKLSAgICB0aGlzLmVudHJ5Q29udGFpbmVyID0gZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeVJlc3VsdCNhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpCi0gIHsKLSAgICBzdXBlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLQotICAgIGlmICh0aGlzLmVudHJ5Q29udGFpbmVyICE9IG51bGwpCi0gICAgICB0aGlzLmVudHJ5Q29udGFpbmVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgYm9vbGVhbiBzaG93TG9nRW50cnksIGJvb2xlYW4gZW52ZWxvcGVBcnRpZmFjdFR5cGUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotCi0gICAgaWYgKHRoaXMuZW50cnlUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVudmVsb3BlQXJ0aWZhY3RUeXBlKQotCSAgewotICAgICAgCS8vIHdlIHVzZSB0aGUgc2FtZSBhY3R1YWwgZW50cnkgZm9yIGJvdGggbWVzc2FnZSBhbmQgZW52ZWxvcGUgYXJ0aWZhY3RzCi0gICAgICAJLy8gd2Ugbm93IG5lZWQgdG8gb3V0cHV0IGVudHJ5IHR5cGUgbmFtZXMgdGhhdCBhY3R1YWxseSBwZXJ0YWluIHRvIHRoZSBhcnRpZmFjdCB0eXBlCi0gICAgICAJcHcucHJpbnQoCi0gICAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0Q29ycmVzcG9uZGluZ0VudmVsb3BlRW50cnlUeXBlTmFtZSh0aGlzLmVudHJ5VHlwZS5nZXRUeXBlTmFtZSgpKSArICJcIiAiKTsKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLSAgICAgICAgcHcucHJpbnQoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgdGhpcy5lbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSArICJcIiAiKTsKLQkgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0aGlzLmFydGlmYWN0TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiWyIgKyB0aGlzLmFydGlmYWN0TmFtZSArICJdXCIgIik7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMucmVmZXJlbmNlSUQgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9JRCArICI9XCIiICsgWE1MVXRpbHMueG1sRXNjYXBlZFN0cmluZyh0aGlzLnJlZmVyZW5jZUlEKSArICJcIiAiKTsKLQotCi0gICAgLy8gSWYgc2VydmljZSBuYW1lIHdhcyBzZXQgdGhlbiBhZGQgaXQKLSAgICAvL2lmIChwYXJlbnRFbGVtZW50TmFtZSAhPSBudWxsKSB7Ci0gICAgLy8gIHB3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX1BBUkVOVF9FTEVNRU5UX05BTUUgKyAiPVwiIiArIHRoaXMucGFyZW50RWxlbWVudE5hbWUgKyAiXCIiKTsKLSAgICAvL30KLQotICAgIC8vIEFERDogTmVlZCB0byBjaGVjayBmb3IgY29uZmlnIG9wdGlvbiB0aGF0IHNwZWNpZmllcyAKLSAgICAvLyAgICAgIHRoYXQgbG9nIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkCi0KLSAgICAvLyBJZiB0YXJnZXQgaXMgYSBsb2cgZW50cnksIHRoZW4gYWRkIHJlZmVyZW5jZSB0byBpdAotICAgIGlmICgoZW50cnlUeXBlICE9IG51bGwpICYmIChlbnRyeVR5cGUuZ2V0QXJ0aWZhY3RUeXBlKCkuaXNMb2dnYWJsZSgpKSAmJiAoc2hvd0xvZ0VudHJ5KSkgCi0gICAgewotICAgICAgRG9jdW1lbnRFbGVtZW50IGxvZ0VudHJ5ID0gKERvY3VtZW50RWxlbWVudCkgZW50cnlEZXRhaWw7Ci0gICAgICBwdy5wcmludGxuKCJ2YWx1ZT1cIiIgKyBsb2dFbnRyeS50b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HKSArICJcIiAiKTsKLSAgICB9Ci0gICAKLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgYm9vbGVhbiBzaG93TG9nRW50cnkpCi0gIHsKLSAgCXJldHVybiBnZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lLCBzaG93TG9nRW50cnksIGZhbHNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVuZFhNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICByZXR1cm4gIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgLy8gUmV0dXJuIHN0cmluZwotICAgIHJldHVybiBnZXRTdGFydFhNTFN0cmluZygiIiwgZmFsc2UpICsgZ2V0RW5kWE1MU3RyaW5nKCIiKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVzcG9uZGluZ0VudmVsb3BlRW50cnlUeXBlTmFtZShTdHJpbmcgbWVzc2FnZUVudHJ5VHlwZU5hbWUpCi0gIHsKLSAgCVN0cmluZyBlbnZlbG9wZUVudHJ5VHlwZU5hbWUgPSBtZXNzYWdlRW50cnlUeXBlTmFtZTsKLSAgCWlmIChtZXNzYWdlRW50cnlUeXBlTmFtZSAhPSBudWxsKQotICAJewotICAJaWYgKG1lc3NhZ2VFbnRyeVR5cGVOYW1lLmVxdWFscyhNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9BTlkpKQotICAJCWVudmVsb3BlRW50cnlUeXBlTmFtZSA9IEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfQU5ZOwotICAJZWxzZSBpZiAobWVzc2FnZUVudHJ5VHlwZU5hbWUuZXF1YWxzKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKQotICAJCWVudmVsb3BlRW50cnlUeXBlTmFtZSA9IEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfUkVRVUVTVDsKLSAgCWVsc2UgaWYgKG1lc3NhZ2VFbnRyeVR5cGVOYW1lLmVxdWFscyhNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVNQT05TRSkpCi0gIAkJZW52ZWxvcGVFbnRyeVR5cGVOYW1lID0gRW52ZWxvcGVWYWxpZGF0b3IuVFlQRV9FTlZFTE9QRV9SRVNQT05TRTsKLSAgCX0KLQotICAJcmV0dXJuIGVudmVsb3BlRW50cnlUeXBlTmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlSZXN1bHRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeVJlc3VsdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmZmI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeVJlc3VsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeVJlc3VsdDsKLQotLyoqCi0gKiBSZXN1bHQgZm9yIGEgc3BlY2lmaWMgdGVzdCBhc3NlcnRpb24uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFbnRyeVJlc3VsdEltcGwgaW1wbGVtZW50cyBFbnRyeVJlc3VsdAotewotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXNzZXJ0aW9uUmVzdWx0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjYWRkQXNzZXJ0aW9uUmVzdWx0KG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdExpc3QucHV0KAotICAgICAgYXNzZXJ0aW9uUmVzdWx0LmdldEFzc2VydGlvbigpLmdldElkKCksCi0gICAgICBhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjZ2V0QXNzZXJ0aW9uUmVzdWx0TGlzdCgpCi0gICAqLwotICBwdWJsaWMgVHJlZU1hcCBnZXRBc3NlcnRpb25SZXN1bHRMaXN0KCkKLSAgewotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjZ2V0QXNzZXJ0aW9uUmVzdWx0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgZ2V0QXNzZXJ0aW9uUmVzdWx0KFN0cmluZyBhc3NlcnRpb25JZCkKLSAgewotICAgIHJldHVybiAoQXNzZXJ0aW9uUmVzdWx0KSBhc3NlcnRpb25SZXN1bHRMaXN0LmdldChhc3NlcnRpb25JZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0ZhaWx1cmVEZXRhaWxJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9GYWlsdXJlRGV0YWlsSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzdkYzUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0ZhaWx1cmVEZXRhaWxJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHdpbGwgLi4uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBGYWlsdXJlRGV0YWlsSW1wbCBpbXBsZW1lbnRzIEZhaWx1cmVEZXRhaWwKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlVHlwZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlSUQgPSBudWxsOwotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNnZXRGYWlsdXJlTWVzc2FnZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZhaWx1cmVNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmZhaWx1cmVNZXNzYWdlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcgZmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLmZhaWx1cmVNZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI2dldFJlZmVyZW5jZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZWZlcmVuY2VUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI3NldFJlZmVyZW5jZVR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVHlwZShTdHJpbmcgcmVmZXJlbmNlVHlwZSkKLSAgewotICAgIHRoaXMucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI2dldFJlZmVyZW5jZUlEKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlSUQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlSUQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI3NldFJlZmVyZW5jZUlEbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2VJRG4oU3RyaW5nIHJlZmVyZW5jZUlEKQotICB7Ci0gICAgdGhpcy5yZWZlcmVuY2VJRCA9IHJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNnZXRFbGVtZW50TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIEVsZW1lbnRMb2NhdGlvbiBnZXRFbGVtZW50TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZWxlbWVudExvY2F0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNzZXRFbGVtZW50TG9jYXRpb24oRWxlbWVudExvY2F0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmVsZW1lbnRMb2NhdGlvbiA9IGVsZW1lbnRMb2NhdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgeG1sOmxhbmc9XCJlblwiICIpOwotCi0gICAgaWYgKHRoaXMucmVmZXJlbmNlVHlwZSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9UWVBFICsgIj1cIiIgKyB0aGlzLnJlZmVyZW5jZVR5cGUgKyAiXCIgIik7Ci0KLSAgICBpZiAodGhpcy5yZWZlcmVuY2VJRCAhPSBudWxsKQotICAgICAgcHcucHJpbnQoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9JRCArICI9XCIiICsgdGhpcy5yZWZlcmVuY2VJRCArICJcIiAiKTsKLQotICAgIC8vIEFERDogTmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0gICAgLyoKLSAgICBpZiAodGhpcy5lbGVtZW50TG9jYXRpb24gIT0gbnVsbCkgewotICAgICAgU3RyaW5nIG5zTmFtZUV4dCA9ICJyZXBvcnRleHQiOwotICAgICAgcHcucHJpbnQoInhtbG5zOiIgKyBuc05hbWVFeHQgKyAiPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCArICIvZXh0L1wiIik7Ci0gICAgICBwdy5wcmludChuc05hbWVFeHQgKyAiOiIgKyBXU0lDb25zdGFudHMuQVRUUl9MSU5FX05VTUJFUiArICI9XCIiICsgdGhpcy5lbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpICsgIlwiICIpOwotICAgICAgcHcucHJpbnQobnNOYW1lRXh0ICsgIjoiICsgV1NJQ29uc3RhbnRzLkFUVFJfQ09MVU1OX05VTUJFUiArICI9XCIiICsgdGhpcy5lbGVtZW50TG9jYXRpb24uZ2V0Q29sdW1uTnVtYmVyKCkgKyAiXCIgIik7Ci0gICAgfQotICAgICovCi0KLSAgICAvLyBDbG9zZSBzdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnQoIj4iKTsKLQotICAgIGlmICh0aGlzLmZhaWx1cmVNZXNzYWdlICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKERPTVV0aWxzLmNsZWFuU3RyaW5nKHRoaXMuZmFpbHVyZU1lc3NhZ2UpKTsKLQotICAgIGlmICh0aGlzLmVsZW1lbnRMb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAiKTsKLSAgICAgIHB3LnByaW50KHRoaXMuZWxlbWVudExvY2F0aW9uLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIEVuZCB0aGUgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUHJlcmVxRmFpbGVkTGlzdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1ByZXJlcUZhaWxlZExpc3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMWRlMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUHJlcmVxRmFpbGVkTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUHJlcmVxRmFpbGVkTGlzdDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGFuZCBhY2Nlc3MgdGhlIFByZXJlcXVpc2l0ZSBGYWlsZWQgTGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFByZXJlcUZhaWxlZExpc3RJbXBsIGltcGxlbWVudHMgUHJlcmVxRmFpbGVkTGlzdAotewotICAvKioKLSAgICogTGlzdCBvZiB0ZXN0IGFzc2VydGlvbiBJRHMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGlkTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0I2FkZFRlc3RBc3NlcnRpb25JRChqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbklEKFN0cmluZyBhc3NlcnRpb25JRCkKLSAgewotICAgIGlkTGlzdC5hZGQoYXNzZXJ0aW9uSUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgaWYgKHRoaXMuaWRMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgLy8gQ3JlYXRlIGVsZW1lbnQgCi0gICAgICBwdy5wcmludGxuKCIgICAgICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgICAgLy8gSW5jbHVkZSBlYWNoIHRlc3QgYXNzZXJ0aW9uIElECi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGlkTGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnQoCi0gICAgICAgICAgIiAgICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OX0lEICsgIj4iKTsKLSAgICAgICAgcHcucHJpbnQoKFN0cmluZykgaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQgKyAiPiIpOwotICAgICAgfQotCi0gICAgICAvLyBFbmQgZWxlbWVudAotICAgICAgcHcucHJpbnRsbigiICAgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIH0KLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydEFydGlmYWN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0QXJ0aWZhY3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0Mjk5YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0QXJ0aWZhY3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGEgcmVwb3J0IGFydGlmYWN0LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVwb3J0QXJ0aWZhY3RJbXBsIGltcGxlbWVudHMgUmVwb3J0QXJ0aWZhY3QKLXsKLSAgLyoqCi0gICAqIEFydGlmYWN0IHR5cGUuCi0gICAqLwotICBwcm90ZWN0ZWQgQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEVudHJpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCBlbnRyeUxpc3QgPSBuZXcgVHJlZU1hcCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0I2dldFR5cGUoKQotICAgKi8KLSAgcHVibGljIEFydGlmYWN0VHlwZSBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmFydGlmYWN0VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0I3NldFR5cGUoQXJ0aWZhY3RUeXBlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdFR5cGUgPSBhcnRpZmFjdFR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNhZGRFbnRyeShFbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudHJ5KEVudHJ5IGVudHJ5KQotICB7Ci0gICAgLy8gQWRkIGVudHJ5Ci0gICAgaWYgKGVudHJ5LmdldEVudHJ5VHlwZSgpICE9IG51bGwpCi0gICAgICB0aGlzLmVudHJ5TGlzdC5wdXQoZW50cnkuZ2V0RW50cnlUeXBlKCkuZ2V0VHlwZU5hbWUoKSwgZW50cnkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QjZ2V0RW50cnlMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBUcmVlTWFwIGdldEVudHJ5TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgZWxlbWVudCAKLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9UWVBFICsgIj1cIiIgKyB0aGlzLmFydGlmYWN0VHlwZS5nZXRUeXBlTmFtZSgpICsgIlwiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNnZXRFbmRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgcmV0dXJuICIgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+IjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIGdldFN0YXJ0WE1MU3RyaW5nKCIiKSArIGdldEVuZFhNTFN0cmluZygiIik7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGIxMmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFdTLUkgY29uZm9ybWFuY2UgdGVzdCByZXBvcnQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVwb3J0SW1wbCBpbXBsZW1lbnRzIFJlcG9ydAotewotICAvKioKLSAgICogUmVwb3J0IGZpbGVuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCBjb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIExvZyBsb2cgPSBudWxsOwotCi0gIC8qKgotICAgKiBTdW1tYXJ5IGFsbCBwYXNzZWQgZmxhZy4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGFsbFBhc3NlZCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIFRlc3QgY292ZXJhZ2UuCi0gICAqLwotICAvL3Byb3RlY3RlZCBUZXN0Q292ZXJhZ2UgdGVzdENvdmVyYWdlOwotCi0gIC8qKgotICAgKiBBcnRpZmFjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBhcnRpZmFjdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyoqCi0gICAqIEVudHJ5IGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGVudHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogQ3VycmVudCBhcnRpZmFjdC4KLSAgICovCi0gIHByb3RlY3RlZCBSZXBvcnRBcnRpZmFjdCBjdXJyZW50QXJ0aWZhY3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBDdXJyZW50IGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5IGN1cnJlbnRFbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBwcmVyZXFUeXBlOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgY29uZm9ybWFuY2UgcmVwb3J0LgotICAgKi8KLSAgcHVibGljIFJlcG9ydEltcGwoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgLy8gR2V0IHJlcG9ydCBVUkkKLSAgICAvL3JldHVybiByZXBvcnRVUkk7Ci0gICAgcmV0dXJuIHRoaXMuZmlsZW5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKQotICB7Ci0gICAgdGhpcy5maWxlbmFtZSA9IHJlcG9ydFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRSZXBvcnRDb250ZXh0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRDb250ZXh0IGdldFJlcG9ydENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwb3J0Q29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNzZXRSZXBvcnRDb250ZXh0KG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydENvbnRleHQoUmVwb3J0Q29udGV4dCByZXBvcnRDb250ZXh0KQotICB7Ci0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2VzCi0gICAgdGhpcy5yZXBvcnRDb250ZXh0ID0gcmVwb3J0Q29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIFJlcG9ydEFydGlmYWN0IGdldEN1cnJlbnRBcnRpZmFjdCgpCi0gIHsKLSAgICAvLyBSZXR1cm4gYXJ0aWZhY3QKLSAgICByZXR1cm4gdGhpcy5jdXJyZW50QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50QXJ0aWZhY3Qob3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRBcnRpZmFjdChSZXBvcnRBcnRpZmFjdCBhcnRpZmFjdCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJ0aWZhY3QKLSAgICBhcnRpZmFjdExpc3QuYWRkKGFydGlmYWN0KTsKLQotICAgIC8vIFNldCBhcyBjdXJyZW50IGFydGlmYWN0Ci0gICAgdGhpcy5jdXJyZW50QXJ0aWZhY3QgPSBhcnRpZmFjdDsKLQotICAgIC8vIFNldCBkZWZhdWx0IHByZXJlcSBwcm9jZXNzaW5nCi0gICAgdGhpcy5wcmVyZXFUeXBlID0gUFJFUkVRX1RZUEVfRU5UUlk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgYXJ0aWZhY3QKLSAgICB0aGlzLmN1cnJlbnRBcnRpZmFjdCA9IG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBcnRpZmFjdFJlZmVyZW5jZShvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgYmUgc2F2ZWQ/ICBTaG91bGQgaXQgYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgYXJ0aWZhY3Q/Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0Q3VycmVudEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRDdXJyZW50RW50cnkoKQotICB7Ci0gICAgLy8gUmV0dXJuIGVudHJ5Ci0gICAgcmV0dXJuIHRoaXMuY3VycmVudEVudHJ5OwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRDdXJyZW50RW50cnkoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEVudmVsb3BlRW50cnkoRW50cnkgZW50cnkpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIAotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50RW50cnkob3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFbnRyeShFbnRyeSBlbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gZW50cnkKLSAgICBlbnRyeUxpc3QuYWRkKGVudHJ5KTsKLQotICAgIC8vIFNldCBhcyBjdXJyZW50IGVudHJ5Ci0gICAgdGhpcy5jdXJyZW50RW50cnkgPSBlbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0RW50cmllcy4KLSAgICogQHJldHVybiBlbnRyeSBsaXN0LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RW50cmllcygpCi0gIHsKLSAgICByZXR1cm4gZW50cnlMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3RzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXJ0aWZhY3RzKCkKLSAgewotICAgIHJldHVybiBhcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50RW50cnkoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEVudHJ5KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgZW50cnkKLSAgICB0aGlzLmN1cnJlbnRFbnRyeSA9IG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgewotICAgIC8vIEFERDogTmVlZCB0byBrZWVwIGp1c3QgYSBzdW1tYXJ5IAotCi0gICAgLy8gQWRkIHJlc3VsdCB0byBjdXJyZW50IGVudHJ5Ci0gICAgaWYgKGN1cnJlbnRFbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIGN1cnJlbnRFbnRyeS5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBub3QgcGFzc2VkLCB0aGVuIHNldCBzdW1tYXJ5IGZsYWcKLSAgICBpZiAoYXNzZXJ0aW9uUmVzdWx0LmdldFJlc3VsdCgpLmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgewotICAgICAgYWxsUGFzc2VkID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZ2V0QXNzZXJ0aW9uUmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGdldEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQpCi0gIHsKLSAgICBBc3NlcnRpb25SZXN1bHQgcmVzdWx0ID0gbnVsbDsKLQotICAgIC8vIERldGVybWluZSB3aGVyZSB0byBnZXQgdGhlIGFzc2VydGlvbiByZXN1bHQgZnJvbSAKLSAgICBpZiAodGhpcy5wcmVyZXFUeXBlLmVxdWFscyhQUkVSRVFfVFlQRV9FTlRSWSkpCi0gICAgICByZXN1bHQgPSBjdXJyZW50RW50cnkuZ2V0QXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvbklkKTsKLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBjdXJyZW50RW50cnkuZ2V0RW50cnlDb250YWluZXIoKS5nZXRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQpOwotCi0gICAgLy8gdGhlIGFzc2VydGlvbiByZXN1bHQgaXMgbm90IGZvdW5kIGF0IHRoZSBjdXJyZW50IGVudHJ5LCBnb2luZyB0aHJvdWdoIGFsbCB0aGUgZW50cmllcwotICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5TGlzdC5zaXplKCk7IGkgKyspCi0gICAgICB7Ci0gICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBlbnRyeUxpc3QuZ2V0KGkpOwotICAgICAgICBpZiAoKHJlc3VsdCA9IGVudHJ5LmdldEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25JZCkpICE9IG51bGwpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICB7Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IG5ldyBBc3NlcnRpb25SZXN1bHRJbXBsKCk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oCi0gICAgICByZXBvcnRDb250ZXh0Ci0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkpOwotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVFbnRyeSgpCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKQotICB7Ci0gICAgRW50cnkgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0gICAgLy9lbnRyeS5zZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKHJlcG9ydENvbnRleHQuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpLmdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKSk7Ci0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjY3JlYXRlRW50cnlDb250YWluZXIoKQotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGFpbmVyIGNyZWF0ZUVudHJ5Q29udGFpbmVyKCkKLSAgewotICAgIEVudHJ5Q29udGFpbmVyIGVudHJ5Q29udGFpbmVyID0gbmV3IEVudHJ5Q29udGFpbmVySW1wbCgpOwotICAgIHJldHVybiBlbnRyeUNvbnRhaW5lcjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpCi0gIHsKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCA9IG5ldyBSZXBvcnRBcnRpZmFjdEltcGwoKTsKLSAgICByZXR1cm4gcmVwb3J0QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVGYWlsdXJlRGV0YWlsKCkKLSAgICovCi0gIHB1YmxpYyBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoKQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gbmV3IEZhaWx1cmVEZXRhaWxJbXBsKCk7Ci0gICAgcmV0dXJuIGZhaWx1cmVEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0U3VtbWFyeVJlc3VsdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnlSZXN1bHQoKQotICB7Ci0gICAgcmV0dXJuICgKLSAgICAgIGFsbFBhc3NlZAotICAgICAgICA/IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VECi0gICAgICAgIDogQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjc2V0UHJlcmVxVHlwZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxVHlwZShTdHJpbmcgcHJlcmVxVHlwZSkKLSAgewotICAgIHRoaXMucHJlcmVxVHlwZSA9IHByZXJlcVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIC8vIEFERDogCi0gICAgcmV0dXJuICJSZXBvcnQ6ICAiOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldFN0YXJ0WE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgcmVwb3J0IGVsZW1lbnQgCi0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuWE1MX0RFQ0wpOwotICAgIHB3LnByaW50bG4oCi0gICAgICByZXBvcnRDb250ZXh0Ci0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRBZGRTdHlsZVNoZWV0KCkKLSAgICAgICAgLmdldFN0eWxlU2hlZXRTdHJpbmcoKSk7Ci0KLSAgICAvLyBBZGQgWE1MIGNvbW1lbnQKLSAgICBTdHJpbmcgY29tbWVudDsKLSAgICBpZiAoKGNvbW1lbnQgPSBUZXN0VXRpbHMuZ2V0WE1MQ29tbWVudCgpKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoY29tbWVudCk7Ci0KLSAgICAvLyByZXBvcnQKLSAgICBwdy5wcmludCgKLSAgICAgICI8IgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIEVMRU1fTkFNRQotICAgICAgICArICIgIgotICAgICAgICArIFdTSUNvbnN0YW50cy5BVFRSX05BTUUKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIHJlcG9ydENvbnRleHQuZ2V0UmVwb3J0VGl0bGUoKQotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgICIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFV0aWxzLmdldFRpbWVzdGFtcCgpCi0gICAgICAgICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigiICAgIHhtbG5zPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfUkVQT1JUCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQKLSAgICAgICAgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX0xPRwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTE9HCi0gICAgICAgICsgIlwiIik7Ci0gICAgLy9wdy5wcmludGxuKCIgICAgeG1sbnM6IiArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9DT01NT04gKyAiPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0NPTU1PTiArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfQU5BTFlaRVJfQ09ORklHCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcKLSAgICAgICAgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRwotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfQVNTRVJUSU9OUwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQVNTRVJUSU9OUwotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9YU0kKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19VUklfWFNJCi0gICAgICAgICsgIlwiPiIpOwotCi0gICAgLy8gQWRkICBhbmFseXplciB0b29sIGluZm8KLSAgICBwdy5wcmludChyZXBvcnRDb250ZXh0LmdldEFuYWx5emVyKCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldEVuZFhNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEJ1aWxkIHN1bW1hcnkKLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NVTU1BUlkgKyAiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cIiIgKyBnZXRTdW1tYXJ5UmVzdWx0KCkgKyAiXCI+Iik7Ci0KLSAgICAvLyBBREQ6ICBEZXRhaWwgc3VtbWFyeQotICAgIC8qCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FSVElGQUNUX1NVTU1BUlkgKyAiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cInh4eHhcIj4iKTsKLSAgICAKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1RfU1VNTUFSWSArICI+Iik7Ci0gICAgKi8KLQotICAgIC8vIEVuZCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIiAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU1VNTUFSWSArICI+Iik7Ci0KLSAgICAvLyBFbmQgcmVwb3J0IGVsZW1lbnQgCi0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFJldHVybiBYTUwgc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0RXJyb3JYTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIFN0cmluZyBlcnJvckRldGFpbCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQnVpbGQgYW5hbHl6ZXIgZmFpbHVyZQotICAgIHB3LnByaW50bG4oIiAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9BTkFMWVpFUl9GQUlMVVJFICsgIj4iKTsKLQotICAgIC8vIEFkZCBlcnJvciBkZXRhaWwKLSAgICBwdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUwgKyAiPiIpOwotICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcoZXJyb3JEZXRhaWwpKTsKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUwgKyAiPiIpOwotCi0gICAgLy8gRW5kIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FOQUxZWkVSX0ZBSUxVUkUgKyAiPiIpOwotCi0gICAgLy8gRW5kIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiBnZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSArIGdldEVuZFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0V3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0V3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2VlYjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydFdyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudFdyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFJlcG9ydFdyaXRlckltcGwKLSAgZXh0ZW5kcyBEb2N1bWVudFdyaXRlckltcGwKLSAgaW1wbGVtZW50cyBSZXBvcnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFJlcG9ydCB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0V3JpdGVySW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCB1c2luZyB0aGUgd3JpdGVyCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRXcml0ZXIgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgd3JpdGVyIHdhcyBub3Qgc2V0IHByZXZpb3VzbHksIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKHdyaXRlciA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJlcG9ydCB3cml0ZXIgbXVzdCBiZSBzZXQgYmVmb3JlIHdyaXRpbmcgcmVwb3J0LiIpOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHJlcG9ydAotICAgIHdyaXRlKHJlcG9ydCwgdGhpcy53cml0ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCwgV3JpdGVyIHdyaXRlcikKLSAgewotICAgIC8vIENyZWF0ZSBwcmludCB3cml0ZXIKLSAgICBuZXcgUHJpbnRXcml0ZXIod3JpdGVyKTsKLQotICAgIC8vIEFERDogV3JpdGUgb3V0IGNvbXBsZXRlIHJlcG9ydAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS90b29saW5mby5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdG9vbGluZm8ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEzMDRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS90b29saW5mby5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqIDwvY29weXJpZ2h0PgotIyAgKi8KLQotd3NpLnRvb2wudmVyc2lvbj0xLjAuMAotd3NpLnRvb2wucmVsZWFzZS5kYXRlPTIwMDUtMDQtMTUKLXdzaS50b29sLmltcGxlbWVudGVyPUVjbGlwc2Uub3JnIE9yZ2FuaXphdGlvbgotd3NpLnRvb2wubG9jYXRpb249aHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQXJ0aWZhY3RUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0FydGlmYWN0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTY2N2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQXJ0aWZhY3RUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQXJ0aWZhY3RUeXBlCi17Ci0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyB0eXBlOwotCi0gIHByaXZhdGUgc3RhdGljIE1hcCB0eXBlTWFwOwotICBwcml2YXRlIHN0YXRpYyBMaXN0IGxvZ2dhYmxlQXJ0aWZhY3RUeXBlczsgCi0KLSAgLyoqCi0gICAqIFJlcG9ydEFydGlmYWN0IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBFbnZlbG9wZVZhbGlkYXRvci5UWVBFX0VOVkVMT1BFICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRSA9ICJlbnZlbG9wZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0UgKiovIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVZhbGlkYXRvci5UWVBFX0RJU0NPVkVSWSAqKi8gCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZID0gImRpc2NvdmVyeSI7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydEFydGlmYWN0IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9FTlZFTE9QRSA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0VOVkVMT1BFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9NRVNTQUdFID0KLSAgICBuZXcgQXJ0aWZhY3RUeXBlKFRZUEVfTUVTU0FHRSk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0QXJ0aWZhY3RUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEFydGlmYWN0VHlwZSAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9ERVNDUklQVElPTiA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0RFU0NSSVBUSU9OKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFydGlmYWN0VHlwZSBBUlRJRkFDVF9UWVBFX0RJU0NPVkVSWSA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0RJU0NPVkVSWSk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFydGlmYWN0IHR5cGUuCi0gICAqLwotICBwcml2YXRlIEFydGlmYWN0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKiogUmV0dXJucyB0cnVlIGlmIHRoaXMgYXJ0aWZhY3QgY2FuIGJlIG91dHB1dCB0byB0aGUgcmVwb3J0LiAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xvZ2dhYmxlKCkgCi0gIHsKLSAgICBpZiAobG9nZ2FibGVBcnRpZmFjdFR5cGVzID09IG51bGwpIAotICAgIHsKLSAgICAgIFN0cmluZyBhcnRpZmFjdEFycmF5W10gPSBXU0lUZXN0VG9vbHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpOwotICAgICAgbG9nZ2FibGVBcnRpZmFjdFR5cGVzID0gbmV3IEFycmF5TGlzdChhcnRpZmFjdEFycmF5Lmxlbmd0aCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFydGlmYWN0QXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICAgICBsb2dnYWJsZUFydGlmYWN0VHlwZXMuYWRkKGFydGlmYWN0QXJyYXlbaV0pOwotICAgIH0KLSAgICByZXR1cm4gbG9nZ2FibGVBcnRpZmFjdFR5cGVzLmNvbnRhaW5zKHR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGFydGlmYWN0IHR5cGUgZW52ZWxvcGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhcnRpZmFjdCB0eXBlIGVudmVsb3BlLgotICAgKiBAZGVwcmVjYXRlZCAtLSBhbiBhcnRpZmFjdFR5cGUgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gZW52ZWxvcGUsIAotICAgKiAgICAgICAgICAgICAgICBtZXNzYWdlLCBkZXNjcmlwdGlvbiBvciBkaXNjb3ZlcnkuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VudmVsb3BlKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhUWVBFX0VOVkVMT1BFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBhcnRpZmFjdCB0eXBlIG1lc3NhZ2VzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYXJ0aWZhY3QgdHlwZSBtZXNzYWdlcy4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoVFlQRV9NRVNTQUdFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBhcnRpZmFjdCB0eXBlIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYXJ0aWZhY3QgdHlwZSBkZXNjcmlwdGlvbi4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoVFlQRV9ERVNDUklQVElPTik7Ci0gIH0KLQotICAvKioKLSAgICogSXMgYXJ0aWZhY3QgdHlwZSBkaXNjb3ZlcnkuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhcnRpZmFjdCB0eXBlIGRpc2NvdmVyeS4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEaXNjb3ZlcnkoKQotICB7Ci0gICAgcmV0dXJuIHR5cGUuZXF1YWxzKFRZUEVfRElTQ09WRVJZKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHJldHVybiBhcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgYXJ0aWZhY3QgdHlwZSBhbmQgYWRkcyBpdCB0byB0aGUgcmVnaXN0cnkgbWFwCi0gICAqIEBwYXJhbSBuYW1lIC0gdGhlIGFydGlmYWN0IG5hbWUgKG1hdGNoZXMgYXJ0aWZhY3QgdHlwZSBhdHRyaWJ1dGUgZnJvbSBUQUQpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXJBcnRpZmFjdFR5cGUoU3RyaW5nIG5hbWUpIHsKLSAgICAgIGlmICh0eXBlTWFwID09IG51bGwpCi0gICAgICAgICAgdHlwZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICB0eXBlTWFwLnB1dChuYW1lLCBuZXcgQXJ0aWZhY3RUeXBlKG5hbWUpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhcnRpZmFjdCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZU5hbWUgYXJ0aWZhY3QgdHlwZSBuYW1lLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGFydGlmYWN0IHR5cGUgbmFtZSBpcyBpbnZhbGlkIG9yIGluYXBwcm9wcmlhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFydGlmYWN0VHlwZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uCi0gIHsKLSAgICAgIGlmICh0eXBlTWFwID09IG51bGwpIHsKLSAgICAgICAgICBTdHJpbmcgdHlwZXNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRBcnRpZmFjdFR5cGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgcmVnaXN0ZXJBcnRpZmFjdFR5cGUodHlwZXNbaV0pOwotICAgICAgfQotICAgICAgCi0gICAgaWYgKHR5cGVNYXAuY29udGFpbnNLZXkodHlwZU5hbWUpKQotICAgICAgICByZXR1cm4gKEFydGlmYWN0VHlwZSkgdHlwZU1hcC5nZXQodHlwZU5hbWUpOwotICAgICBlbHNlIHsKLSAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBuZXcgYXJ0aWZhY3QgdHlwZSB1c2luZyBpbnZhbGlkIHR5cGUgbmFtZTogIgotICAgICAgICAgICAgICAgICArIHR5cGVOYW1lICsgIi4iKTsKLSAgICAgfQotICB9Ci0gIAotICAgIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHBhcmFtIHR5cGVOYW1lIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGFydGlmYWN0IHR5cGUuCi0gICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBhcnRpZmFjdCB0eXBlIG5hbWUgaXMgaW52YWxpZCBvciBpbmFwcHJvcHJpYXRlLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0QXJ0aWZhY3RUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXJ0aWZhY3RUeXBlIG5ld0FydGlmYWN0VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KLSAgewotICAgIEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUgPSBudWxsOwotCi0gICAgaWYgKHR5cGVOYW1lLmVxdWFscyhUWVBFX0RFU0NSSVBUSU9OKSkKLSAgICB7Ci0gICAgICBhcnRpZmFjdFR5cGUgPSBBUlRJRkFDVF9UWVBFX0RFU0NSSVBUSU9OOwotICAgIH0KLQotICAgIGVsc2UgaWYgKHR5cGVOYW1lLmVxdWFscyhUWVBFX01FU1NBR0UpKQotICAgIHsKLSAgICAgIGFydGlmYWN0VHlwZSA9IEFSVElGQUNUX1RZUEVfTUVTU0FHRTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0eXBlTmFtZS5lcXVhbHMoVFlQRV9FTlZFTE9QRSkpCi0gICAgewotICAgICAgYXJ0aWZhY3RUeXBlID0gQVJUSUZBQ1RfVFlQRV9FTlZFTE9QRTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0eXBlTmFtZS5lcXVhbHMoVFlQRV9ESVNDT1ZFUlkpKQotICAgIHsKLSAgICAgIGFydGlmYWN0VHlwZSA9IEFSVElGQUNUX1RZUEVfRElTQ09WRVJZOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IGFydGlmYWN0IHR5cGUgdXNpbmcgaW52YWxpZCB0eXBlIG5hbWU6ICIKLSAgICAgICAgICArIHR5cGVOYW1lCi0gICAgICAgICAgKyAiLiIpOwotICAgIH0KLQotICAgIHJldHVybiBhcnRpZmFjdFR5cGU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0Jhc2ljUnVsZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQmFzaWNSdWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjMyYjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQmFzaWNSdWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdmFsaWRhdGVzIGJhc2ljIGNvbnN0cnVjdHMgb2YgUkZDIDI2MTYuCi0gKiAKLSAqIEBhdXRob3IgVm9sb2RpbgotICovCi1wdWJsaWMgY2xhc3MgQmFzaWNSdWxlcwotewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBDUiA9IDEzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgTEYgPSAxMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIFNQID0gMzI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBIVCA9IDk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBEUSA9IDM0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDUkxGID0gIiIgKyBDUiArIExGOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhcltdIFNFUEFSQVRPUlMgPQotICAgIHsKLSAgICAgICcoJywKLSAgICAgICcpJywKLSAgICAgICc8JywKLSAgICAgICc+JywKLSAgICAgICdAJywKLSAgICAgICcsJywKLSAgICAgICc7JywKLSAgICAgICc6JywKLSAgICAgICdcXCcsCi0gICAgICAnXCInLAotICAgICAgJy8nLAotICAgICAgJ1snLAotICAgICAgJ10nLAotICAgICAgJz8nLAotICAgICAgJz0nLAotICAgICAgJ3snLAotICAgICAgJ30nLAotICAgICAgU1AsCi0gICAgICBIVCB9OwotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlLgotICAgKiAJCU9DVEVUID0gJmx0O2FueSA4LWJpdCBzZXF1ZW5jZSBvZiBkYXRhJmd0OwotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc09DVEVUKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNIQVIgPSAmbHQ7YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDSEFSKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID49IDAgJiYgY2ggPD0gMTI3KSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCVVQQUxQSEEgPSAmbHQ7YW55IFVTLUFTQ0lJIHVwcGVyY2FzZSBsZXR0ZXIgIkEiLi4iWiImZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VQQUxQSEEoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlMT0FMUEhBID0gJmx0O2FueSBVUy1BU0NJSSBsb3dlcmNhc2UgbGV0dGVyICJhIi4uInoiJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMT0FMUEhBKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJQUxQSEEgPSBVUEFMUEhBIHwgTE9BTFBIQS4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBTFBIQShjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChpc0xPQUxQSEEoY2gpIHx8IGlzVVBBTFBIQShjaCkpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJRElHSVQgPSAmbHQ7YW55IFVTLUFTQ0lJIGRpZ2l0ICIwIi4uIjkiJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNESUdJVChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNUTCA9ICZsdDthbnkgVVMtQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMzEpIGFuZCBERUwgKDEyNykmZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NUTChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuICgoY2ggPj0gMCAmJiBjaCA8PSAzMSkgfHwgY2ggPT0gMTI3KSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNSID0gJmx0O1VTLUFTQ0lJIENSLCBjYXJyaWFnZSByZXR1cm4gKDEzKSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ1IoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPT0gQ1IpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJTEYgPSAmbHQ7VVMtQVNDSUkgTEYsIGxpbmVmZWVkICgxMCkmZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMRihjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSBMRikgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlTUCA9ICZsdDtVUy1BU0NJSSBTUCwgc3BhY2UgKDMyKSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU1AoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPT0gU1ApID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJSFQgPSAmbHQ7VVMtQVNDSUkgSFQsIGhvcml6b250YWwtdGFiICg5KSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIKLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0hUKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID09IEhUKSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCSZsdDsiJmd0OyA9ICZsdDtVUy1BU0NJSSBkb3VibGUtcXVvdGUgbWFyayAoMzQpJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEb3VibGVRdW90ZShjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSBEUSkgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlDUkxGID0gQ1IgTEYuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NSTEYoU3RyaW5nIHN0cikKLSAgewotICAgIHJldHVybiBDUkxGLmVxdWFscyhzdHIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJTFdTID0gW0NSTEZdIDEqKCBTUCB8IEhUICkuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdHIgaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMV1MoU3RyaW5nIHN0cikKLSAgewotCi0gICAgaW50IGluZGV4ID0gZ2V0TGFzdEluZGV4TFdTKHN0ciwgMCk7Ci0gICAgaWYgKGluZGV4ID09IC0xIHx8IGluZGV4ICE9IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgTFdTIHN0cmluZy4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0IExXUy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RJbmRleExXUyhTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleCA9IHN0ci5pbmRleE9mKENSTEYsIHN0YXJ0SW5kZXgpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBlbHNlIGlmIChpbmRleCA9PSBzdGFydEluZGV4KQotICAgICAgaW5kZXggKz0gQ1JMRi5sZW5ndGgoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIWlzU1Aoc3RyLmNoYXJBdChpbmRleCkpICYmIGlzSFQoc3RyLmNoYXJBdChpbmRleCkpKQotICAgICAgcmV0dXJuIC0xOwotCi0gICAgaW5kZXgrKzsKLSAgICBmb3IgKDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgICBpZiAoIWlzU1Aoc3RyLmNoYXJBdChpbmRleCkpICYmIGlzSFQoc3RyLmNoYXJBdChpbmRleCkpKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgVEVYVCBzdHJpbmcuCi0gICAqIFRFWFQgPSAmbHQ7YW55IE9DVEVUIGV4Y2VwdCBDVExzLCBidXQgaW5jbHVkaW5nIExXUyZndDsKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0IFRFWFQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRMYXN0VEVYVChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleDsKLSAgICBmb3IgKGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgewotICAgICAgaWYgKCFpc09DVEVUKHN0ci5jaGFyQXQoaW5kZXgpKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgaWYgKGlzQ1RMKHN0ci5jaGFyQXQoaW5kZXgpKSkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RMV1MgPSBnZXRMYXN0SW5kZXhMV1Moc3RyLCBpbmRleCk7Ci0gICAgICAgIGlmIChsYXN0TFdTID09IC0xKQotICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgaW5kZXggPSBsYXN0TFdTIC0gMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJSEVYID0gIkEiIHwgIkIiIHwgIkMiIHwgIkQiIHwgIkUiIHwgIkYiIHwgImEiIHwgImIiIHwgImMiIHwgImQiIHwgImUiIHwgImYiIHwgRElHSVQuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSEVYKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKAotICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8IChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSB8fCBpc0RJR0lUKGNoKSkKLSAgICAgID8gdHJ1ZQotICAgICAgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXRva2VuID0gMSombHQ7YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycyZndDsuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdHIgaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUb2tlbihTdHJpbmcgc3RyKQotICB7Ci0gICAgaWYgKHN0ci5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgICBpZiAoIWlzQ0hBUihjaCkgfHwgaXNTRVBBUkFUT1IoY2gpIHx8IGlzQ1RMKGNoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyBsYXN0IGluZGV4IG9mIHRoZSAidG9rZW4iIHN0cmluZy4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJ0b2tlbiIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRMYXN0VG9rZW4oU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGZvciAoOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgICBpZiAoIWlzQ0hBUihjaCkgfHwgaXNTRVBBUkFUT1IoY2gpIHx8IGlzQ1RMKGNoKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgfQotICAgIHJldHVybiBpbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXNlcGFyYXRvcnMgPSAiKCIgfCAiKSIgfCAiPCIgfCAiPiIgfCAiQCIKLSAgICAgKiAgICAgICAgICAgICAgICAgfCAiLCIgfCAiOyIgfCAiOiIgfCAiXCIgfCA8Ij4KLSAgICAgKiAgICAgICAgICAgICAgICAgfCAiLyIgfCAiWyIgfCAiXSIgfCAiPyIgfCAiPSIKLSAgICAgKiAgICAgICAgICAgICAgICAgfCAieyIgfCAifSIgfCBTUCB8IEhULgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NFUEFSQVRPUihjaGFyIGNoKQotICB7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IFNFUEFSQVRPUlMubGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGlmIChjaCA9PSBTRVBBUkFUT1JTW2luZGV4XSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJjb21tZW50IiBzdHJpbmcuCi0gICAqIAkJY29tbWVudCA9ICIoIiAqKCBjdGV4dCB8IHF1b3RlZC1wYWlyIHwgY29tbWVudCApICIpIi4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJjb21tZW50Ii4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RDb21tZW50KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGlmIChzdHIubGVuZ3RoKCkgPD0gc3RhcnRJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnKCcpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIGJvb2xlYW4gYkV4aXQgPSBmYWxzZTsKLSAgICBib29sZWFuIGJRdW90ZWRQYWlyID0gZmFsc2U7Ci0gICAgaW50IGlkeCA9IHN0YXJ0SW5kZXggKyAxOwotICAgIHdoaWxlIChiRXhpdCA9PSBmYWxzZSkKLSAgICB7Ci0gICAgICB3aGlsZSAoYlF1b3RlZFBhaXIgPT0gZmFsc2UpCi0gICAgICB7Ci0gICAgICAgIGlkeCA9IGdldExhc3RDdGV4dChzdHIsIGlkeCk7Ci0gICAgICAgIGlmIChpZHggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICAgIHJldHVybiBpZHg7Ci0gICAgICAgIGlmICghaXNRdW90ZWRQYWlyKHN0ciwgaWR4IC0gMSkpCi0gICAgICAgICAgYlF1b3RlZFBhaXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgaWR4Kys7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpZHgpID09ICcoJykKLSAgICAgIHsKLSAgICAgICAgZ2V0TGFzdENvbW1lbnQoc3RyLCBpZHgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc3RyLmNoYXJBdChpZHgpID09ICcpJykKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGlkeCArIDE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlkeDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJjdGV4dCIgc3RyaW5nLgotICAgKiAJCWN0ZXh0ID0gJmx0O2FueSBURVhUIGV4Y2x1ZGluZyAiKCIgYW5kICIpIiZndDsKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJjdGV4dCIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdEN0ZXh0KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGlkeCA9IGdldExhc3RURVhUKHN0ciwgc3RhcnRJbmRleCk7Ci0gICAgaW50IGlCcmFja2V0ID0gc3RhcnRJbmRleDsKLSAgICBmb3IgKDsgaUJyYWNrZXQgPCBpZHg7IGlCcmFja2V0KyspCi0gICAgewotICAgICAgaWYgKHN0ci5jaGFyQXQoaUJyYWNrZXQpID09ICcoJyB8fCBzdHIuY2hhckF0KGlCcmFja2V0KSA9PSAnKScpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaUJyYWNrZXQgPCBpZHgpCi0gICAgICBpZHggPSBpQnJhY2tldDsKLSAgICByZXR1cm4gaWR4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgInFkdGV4dCIgc3RyaW5nLgotICAgKiAJCXFkdGV4dCA9ICZsdDthbnkgVEVYVCBleGNlcHQgJmx0OyImZ3Q7Jmd0OwotICAgKiBAcGFyYW0gc3RyIHN0cmluZy4KLSAgICogQHBhcmFtIHN0YXJ0SW5kZXggc3RhcnQgaW5kZXguCi0gICAqIEByZXR1cm4gaW50IGFuIGluZGV4IG9mIHRoZSBmaXJzdCBzeW1ib2wgd2hpY2ggaXNuJ3QgInFkdGV4dCIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdFFkdGV4dChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpZHggPSBnZXRMYXN0VEVYVChzdHIsIHN0YXJ0SW5kZXgpOwotICAgIGludCBpQnJhY2tldCA9IHN0YXJ0SW5kZXg7Ci0gICAgZm9yICg7IGlCcmFja2V0IDwgaWR4OyBpQnJhY2tldCsrKQotICAgIHsKLSAgICAgIGlmIChzdHIuY2hhckF0KGlCcmFja2V0KSA9PSAnXCInKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGlCcmFja2V0IDwgaWR4KQotICAgICAgaWR4ID0gaUJyYWNrZXQ7Ci0gICAgcmV0dXJuIGlkeDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXF1b3RlZC1wYWlyID0gIlwiIENIQVIuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcGFyYW0gc3RhcnRJbmRleCBzdGFydCBpbmRleC4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgc3RyIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUXVvdGVkUGFpcihTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGlmIChzdHIubGVuZ3RoKCkgPj0gc3RhcnRJbmRleCArIDIKLSAgICAgICYmIHN0ci5jaGFyQXQoc3RhcnRJbmRleCkgPT0gJ1xcJwotICAgICAgJiYgaXNDSEFSKHN0ci5jaGFyQXQoc3RhcnRJbmRleCArIDEpKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJxdW90ZWQtc3RyaW5nIiBzdHJpbmcuCi0gICAqIAkJcXVvdGVkLXN0cmluZyAgPSAoICZsdDsiJmd0OyAqKHFkdGV4dCB8IHF1b3RlZC1wYWlyICkgJmx0OyImZ3Q7ICkKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJxdW90ZWQtc3RyaW5nIi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RRdW90ZWRTdHJpbmcoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotCi0gICAgLy8gaWYgZW5kIGlmIHRoZSBzdHJpbmcKLSAgICBpZiAoc3RhcnRJbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAvLyBpZiB0aGUgYmVnaW4gaXMgbm90ICciJwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSBEUSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXgrKzsKLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpbmRleCA9IGdldExhc3RRZHRleHQoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIGlmIChpc1F1b3RlZFBhaXIoc3RyLCBpbmRleCAtIDEpKQotICAgICAgewotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gaWYgdGhlIGVuZCBpcyBub3QgJyInCi0gICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9IERRKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIHJldHVybiBpbmRleDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9FbnRyeVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRW50cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMWEzNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9FbnRyeVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRW50cnlUeXBlCi17Ci0gIC8qKgotICAgKiBSZXBvcnRBcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlOwotCi0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyB0eXBlTmFtZTsKLQotICAvKioKLSAgICogRW50cnkgdHlwZXMgYWNjZXNzaWJsZSBieSB0eXBlIG5hbWUuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFRyZWVNYXAgZW50cnlUeXBlTWFwOwotCi0gIC8qKgotICAgKiBFbnRyeSB0eXBlIG5hbWVzIGFjY2Vzc2libGUgYnkgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFRyZWVNYXAgZW50cnlUeXBlTmFtZU1hcCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyoqCi0gICAqIEVudmVsb3BlIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBFbnZlbG9wZVZhbGlkYXRvci5UWVBFX0VOVkVMT1BFX1JFUVVFU1QgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRV9SRVFVRVNUID0gInJlcXVlc3RFbnZlbG9wZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgRW52ZWxvcGVWYWxpZGF0b3IuVFlQRV9FTlZFTE9QRV9SRVNQT05TRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX1JFU1BPTlNFID0gInJlc3BvbnNlRW52ZWxvcGUiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfQU5ZVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX0FOWSA9ICJhbnlFbnZlbG9wZSI7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgZW50cnkgdHlwZXMuCi0gICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NRVNTQUdFX1JFUVVFU1QgPSAicmVxdWVzdE1lc3NhZ2UiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFU1BPTlNFICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRV9SRVNQT05TRSA9ICJyZXNwb25zZU1lc3NhZ2UiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX0FOWSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0VfQU5ZID0gImFueU1lc3NhZ2UiOwotCi0gIC8qKgotICAgKiBNSU1FIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUlNRV9QQVJUICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9QQVJUID0gInBhcnQiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NSU1FX1JPT1RfUEFSVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01JTUVfUk9PVF9QQVJUID0gInJvb3QtcGFydCI7Ci0KLSAgLyoqCi0gICAqIERlc2NyaXB0aW9uIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9ERUZJTklUSU9OUyA9ICJkZWZpbml0aW9ucyI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCA9ICJpbXBvcnQiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9UWVBFUyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTID0gInR5cGVzIjsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFID0gInBvcnRUeXBlIjsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fQklORElORyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9QT1JUID0gInBvcnQiOwotCi0gIC8qKgotICAgKiBEaXNjb3ZlcnkgZW50cnkgdHlwZXMuCi0gICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFVERElWYWxpZGF0b3IuVFlQRV9ESVNDT1ZFUllfQklORElOR1RFTVBMQVRFICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSA9ICJiaW5kaW5nVGVtcGxhdGUiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFVERElWYWxpZGF0b3IuVFlQRV9ESVNDT1ZFUllfVE1PREVMICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX1RNT0RFTCA9ICJ0TW9kZWwiOwotCi0gIC8qKgotICAgKiBFbnZlbG9wZSBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVFVRVNURU5WID0gZ2V0RW50cnlUeXBlKFRZUEVfRU5WRUxPUEVfUkVRVUVTVCk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVNQT05TRUVOViA9IGdldEVudHJ5VHlwZShUWVBFX0VOVkVMT1BFX1JFU1BPTlNFKTsKLQotICAvKioKLSAgICogTWVzc2FnZSBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVFVRVNUID0gZ2V0RW50cnlUeXBlKFRZUEVfTUVTU0FHRV9SRVFVRVNUKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX1JFU1BPTlNFID0gZ2V0RW50cnlUeXBlKFRZUEVfTUVTU0FHRV9SRVNQT05TRSk7Ci0gIC8vICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0FOWUVOVFJZID0gCi0gIC8vICAgICAgICBuZXcgRW50cnlUeXBlKEFydGlmYWN0VHlwZS5BUlRJRkFDVF9UWVBFX01FU1NBR0VTLCBUWVBFX01FU1NBR0VfQU5ZRU5UUlkpOwotCi0gIC8qKgotICAgKiBEZXNjcmlwdGlvbiBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9ERUZJTklUSU9OUyA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0RFRklOSVRJT05TKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0lNUE9SVCA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9UWVBFUyA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1RZUEVTKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX01FU1NBR0UgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX09QRVJBVElPTiA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTik7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9QT1JUVFlQRSA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0JJTkRJTkcgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX1BPUlQgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUKTsKLQotICAvKioKLSAgICogRGlzY292ZXJ5IGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0JJTkRJTkdURU1QTEFURSA9IGdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUpOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldEVudHJ5VHlwZShTdHJpbmcgdHlwZU5hbWUpIHRvIGFjY2VzcyBFbnRyeVR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIEVOVFJZX1RZUEVfVE1PREVMID0gZ2V0RW50cnlUeXBlKFRZUEVfRElTQ09WRVJZX1RNT0RFTCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBlbnRyeSB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBFbnRyeVR5cGUoQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSwgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdFR5cGUgPSBhcnRpZmFjdFR5cGU7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGVudHJ5IHR5cGUgZXF1YWwgdG8gc3BlY2lmaWVkIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlTmFtZSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbnRyeSB0eXBlIGVxdWFsIHRvIHNwZWNpZmllZCB0eXBlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGVOYW1lLmVxdWFscyh0eXBlTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgZW50cnkgdHlwZSBlcXVhbCB0byBzcGVjaWZpZWQgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBlbnRyeSB0eXBlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZW50cnkgdHlwZSBlcXVhbCB0byBzcGVjaWZpZWQgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVHlwZShFbnRyeVR5cGUgZW50cnlUeXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGVOYW1lLmVxdWFscyhlbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IHR5cGUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBBcnRpZmFjdFR5cGUgZ2V0QXJ0aWZhY3RUeXBlKCkKLSAgewotICAgIHJldHVybiBhcnRpZmFjdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVudHJ5IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSB0eXBlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lKCkKLSAgewotICAgIHJldHVybiB0eXBlTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyB2YWxpZCBlbnRyeSB0eXBlLgotICAgKiBAcGFyYW0gdHlwZU5hbWUgZW50cnkgdHlwZSBuYW1lLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZW50cnkgdHlwZSBuYW1lIGlzIHZhbGlkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzVmFsaWRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgcmV0dXJuIChlbnRyeVR5cGVNYXAuZ2V0KHR5cGVOYW1lKSA9PSBudWxsID8gZmFsc2UgOiB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHR5cGVOYW1lIGVudHJ5IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSB0eXBlLgotICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gaWYgZW50cnkgdHlwZSBuYW1lIGlzIGludmFsaWQgb3IgaW5hcHByb3ByaWF0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIGdldEVudHJ5VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KLSAgewotICAgIGlmIChlbnRyeVR5cGVNYXAgPT0gbnVsbCkgewotICAgICAgICBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcnNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKQotICAgICAgICAgICAgICAgIC5nZXRCYXNlVmFsaWRhdG9ycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZyBlbnRyeVR5cGVzW10gPSB2YWxpZGF0b3JzW2ldLmdldEVudHJ5VHlwZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZW50cnlUeXBlcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICByZWdpc3RlckVudHJ5VHlwZShBcnRpZmFjdFR5cGUuZ2V0QXJ0aWZhY3RUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yc1tpXS5nZXRBcnRpZmFjdFR5cGUoKSksIGVudHJ5VHlwZXNbal0pOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIEdldCB0aGUgZW50cnkgdHlwZSBieSB0eXBlIG5hbWUKLSAgICBFbnRyeVR5cGUgZW50cnlUeXBlID0gKEVudHJ5VHlwZSkgZW50cnlUeXBlTWFwLmdldCh0eXBlTmFtZSk7Ci0KLSAgICBpZiAoZW50cnlUeXBlID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgZ2V0IGVudHJ5IHR5cGUgYmVjYXVzZSB0eXBlIG5hbWUgaXMgaW52YWxpZDogIgotICAgICAgICAgICsgdHlwZU5hbWUKLSAgICAgICAgICArICIuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbGlzdCBvZiBlbnRyeSB0eXBlIG5hbWVzIGZvciBhIHNwZWNpZmllZCBhcnRpZmFjdCB0eXBlIG5hbWUuCi0gICAqIEBwYXJhbSBhcnRpZmFjdFR5cGVOYW1lIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBsaXN0IG9mIGVudHJ5IHR5cGUgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGVudHJ5IHR5cGUgbmFtZSBpcyBpbnZhbGlkIG9yIGluYXBwcm9wcmlhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlY3RvciBnZXRFbnRyeVR5cGVOYW1lTGlzdChTdHJpbmcgYXJ0aWZhY3RUeXBlTmFtZSkKLSAgICB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGxpc3QKLSAgICBWZWN0b3IgZW50cnlUeXBlTmFtZUxpc3QgPSAoVmVjdG9yKSBlbnRyeVR5cGVOYW1lTWFwLmdldChhcnRpZmFjdFR5cGVOYW1lKTsKLQotICAgIC8vIElmIHRoZSBsaXN0IHdhcyBub3QgZm91bmQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgaWYgKGVudHJ5VHlwZU5hbWVMaXN0ID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgZ2V0IGVudHJ5IHR5cGUgbmFtZSBsaXN0IGJlY2F1c2UgYXJ0aWZhY3QgdHlwZSBuYW1lIGlzIGludmFsaWQ6ICIKLSAgICAgICAgICArIGFydGlmYWN0VHlwZU5hbWUKLSAgICAgICAgICArICIuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VHlwZU5hbWVMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHR5cGUgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIHJlZ2lzdGVyRW50cnlUeXBlKAotICAgIEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUsCi0gICAgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgRW50cnlUeXBlIGVudHJ5VHlwZSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgdHlwZQotICAgIGVudHJ5VHlwZSA9IG5ldyBFbnRyeVR5cGUoYXJ0aWZhY3RUeXBlLCB0eXBlTmFtZSk7Ci0KLSAgICBpZiAoZW50cnlUeXBlTWFwID09IG51bGwpIHsKLSAgICAgICAgZW50cnlUeXBlTWFwID0gbmV3IFRyZWVNYXAoKTsKLSAgICB9Ci0gICAgLy8gQWRkIHRvIGVudHJ5IHR5cGUgbWFwCi0gICAgZW50cnlUeXBlTWFwLnB1dCh0eXBlTmFtZSwgZW50cnlUeXBlKTsKLQotICAgIC8vIEdldCB0aGUgZW50cnkgdHlwZSBuYW1lIHZlY3RvciBmb3IgdGhlIGFydGlmYWN0IHR5cGUKLSAgICBWZWN0b3IgZW50cnlUeXBlTmFtZUxpc3QgPQotICAgICAgKFZlY3RvcikgZW50cnlUeXBlTmFtZU1hcC5nZXQoYXJ0aWZhY3RUeXBlLmdldFR5cGVOYW1lKCkpOwotICAgIAotICAgIC8vIExhenkgaW5pdGlhbGl6ZQotICAgIGlmIChlbnRyeVR5cGVOYW1lTGlzdCA9PSBudWxsKSB7Ci0gICAgICAgIGVudHJ5VHlwZU5hbWVMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBlbnRyeVR5cGVOYW1lTWFwLnB1dChhcnRpZmFjdFR5cGUuZ2V0VHlwZU5hbWUoKSwgZW50cnlUeXBlTmFtZUxpc3QpOwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgdHlwZSBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgZW50cnlUeXBlTmFtZUxpc3QuYWRkKHR5cGVOYW1lKTsKLQotICAgIHJldHVybiBlbnRyeVR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRXJyb3JMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0Vycm9yTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTU5N2Y0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRXJyb3JMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVGhlIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBlcnJvciBzdHJpbmdzIGludG8gc3RyaW5nIGJ1ZmZlci4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRXJyb3JMaXN0Ci17Ci0gIHByaXZhdGUgU2V0IGVycm9ycyA9IG5ldyBIYXNoU2V0KCk7Ci0gIHByaXZhdGUgTWVzc2FnZUZvcm1hdCBmb3JtYXQgPSBuZXcgTWVzc2FnZUZvcm1hdCgiezB9OnsxfSIpOwotICBwcml2YXRlIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3QgZXJyb3IgbGlzdCB1c2luZyBjb250ZW50cyBvZiBhIGxpc3QuCi0gICAqIEBwYXJhbSBsaXN0IGEgTGlzdCBvYmplY3QuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdChMaXN0IGxpc3QpCi0gIHsKLSAgICBhZGQobGlzdCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgZm9ybWF0LgotICAgKiBAcGFyYW0gZiBhIG1lc3NhZ2UgZm9ybWF0LgotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdChNZXNzYWdlRm9ybWF0IGYpCi0gIHsKLSAgICBpZiAoZiAhPSBudWxsKQotICAgICAgZm9ybWF0ID0gZjsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgbGlzdC4gCi0gICAqIEBwYXJhbSBsaXN0IGxpc3Qgb2YgZXJyb3JzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKExpc3QgbGlzdCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYWRkKChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgZXJyb3IgZGVzY3JpcHRpb24gaW50byB0aGUgbGlzdC4gCi0gICAqIEBwYXJhbSBzMSBhIHN0cmluZy4KLSAgICogQHBhcmFtIHMyIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBzMSwgU3RyaW5nIHMyKQotICB7Ci0gICAgZXJyb3JzLmFkZChuZXcgUGFpcihzMSwgczIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBxIGEgUU5hbWUgb2JqZWN0LgotICAgKiBAcGFyYW0gcyBhIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZChRTmFtZSBxLCBTdHJpbmcgcykKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocSksIHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBxMSBhIFFOYW1lIG9iamVjdC4KLSAgICogQHBhcmFtIHEyIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFFOYW1lIHExLCBRTmFtZSBxMikKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocTEpLCBOdWxsVXRpbC50b1N0cmluZyhxMikpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuLi4KLSAgICogQHBhcmFtIHEgYSBRTmFtZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoUU5hbWUgcSkKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocSksIG51bGwpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBzIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBzKQotICB7Ci0gICAgZXJyb3JzLmFkZChuZXcgUGFpcihzLCBudWxsKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbGlzdCBzdHJpbmcgcmVwcmVzZW50YXRpb24uIAotICAgKiBAcmV0dXJuIHRoZSBlcnJvciBsaXN0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICBJdGVyYXRvciBpdCA9IGVycm9ycy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFpciBwID0gKFBhaXIpIGl0Lm5leHQoKTsKLSAgICAgIGlmIChwLmdldEZpcnN0KCkgIT0gbnVsbCAmJiBwLmdldFNlY29uZCgpICE9IG51bGwpCi0gICAgICAgIGZvcm1hdC5mb3JtYXQobmV3IE9iamVjdFtdIHsgcC5nZXRGaXJzdCgpLCBwLmdldFNlY29uZCgpfSwgYnVmLCBwb3MpOwotICAgICAgZWxzZSBpZiAocC5nZXRGaXJzdCgpICE9IG51bGwpCi0gICAgICAgIGJ1Zi5hcHBlbmQocC5nZXRGaXJzdCgpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVmLmFwcGVuZChwLmdldFNlY29uZCgpKTsKLSAgICAgIGlmIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIGJ1Zi5hcHBlbmQoIixcbiIpOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciBlcnJvciBsaXN0IGlzIGVtcHR5IG9yIG5vdC4KLSAgICogQHJldHVybiB0cnVlIGlmIGVycm9yIGxpc3QgaXMgZW1wdHkuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkKLSAgewotICAgIHJldHVybiBlcnJvcnMuc2l6ZSgpID09IDA7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSFRUUENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YjA1MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEEgc2V0IG9mIEhUVFAgdmFsdWVzIHRoYXQgYXJlIGRlZmluZWQgYnkgTmV0d29yayBXb3JraW5nIEdyb3VwLgotICogaHR0cDovL3d3dy5pZXRmLm9yZy8KLSAqCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBhdXRob3IgSWx5YSBLYW5vbmlyb3YgKGtpb0Bpc2cuYXhtb3IuY29tKQotICovCi1wdWJsaWMgY2xhc3MgSFRUUENvbnN0YW50cyB7Ci0gIC8vIFRoZSBzdGFuZGFyZGl6ZWQgSFRUUCBIZWFkZXIgZmllbGQtbmFtZXMKLSAgLy8gaHR0cDovL3d3dy5tbm90Lm5ldC9kcmFmdHMvZHJhZnQtbm90dGluZ2hhbS1odHRwLWhlYWRlci1yZWctMDAudHh0Ci0KLSAgLy8gSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xIChvYnNvbGV0ZXMgUkZDMjA2OCkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVCA9ICJBY2NlcHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0NIQVJTRVQgPSAiQWNjZXB0LUNoYXJzZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0VOQ09ESU5HID0gIkFjY2VwdC1FbmNvZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BQ0NFUFRfTEFOR1VBR0UgPSAiQWNjZXB0LUxhbmd1YWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9SQU5HRVMgPSAiQWNjZXB0LVJhbmdlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BR0UgPSAiQWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FMTE9XID0gIkFsbG93IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FVVEhPUklaQVRJT04gPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DQUNIRV9DT05UUk9MID0gIkNhY2hlLUNvbnRyb2wiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OTkVDVCA9ICJDb25uZWN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcgPSAiQ29udGVudC1FbmNvZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xBTkdVQUdFID0gIkNvbnRlbnQtTGFuZ3VhZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9MRU5HVEggPSAiQ29udGVudC1MZW5ndGgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9MT0NBVElPTiA9ICJDb250ZW50LUxvY2F0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfTUQ1ID0gIkNvbnRlbnQtTUQ1IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfUkFOR0UgPSAiQ29udGVudC1SYW5nZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RZUEUgPSAiQ29udGVudC1UeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RBVEUgPSAiRGF0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9FVEFHID0gIkVUYWciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQRUNUID0gIkV4cGVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9FWFBJUkVTID0gIkV4cGlyZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRlJPTSA9ICJGcm9tIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0hPU1QgPSAiSG9zdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NQVRDSCA9ICJJZi1NYXRjaCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSA9ICJJZi1Nb2RpZmllZC1TaW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9OT05FX01BVENIID0gIklmLU5vbmUtTWF0Y2giOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfUkFOR0UgPSAiSWYtUmFuZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRSA9ICJJZi1Vbm1vZGlmaWVkLVNpbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0xBU1RfTU9ESUZJRUQgPSAiTGFzdC1Nb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9MT0NBVElPTiA9ICJMb2NhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NQVhfRk9SV0FSRFMgPSAiTWF4LUZvcndhcmRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPWFlfQVVUSEVOVElDQVRFID0gIlByb3h5LUF1dGhlbnRpY2F0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9BVVRIT1JJWkFUSU9OID0gIlByb3h5LUF1dGhvcml6YXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkFOR0UgPSAiUmFuZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVGRVJFUiA9ICJSZWZlcmVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1JFVFJZX0FGVEVSID0gIlJldHJ5LUFmdGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NFUlZFUiA9ICJTZXJ2ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVEUgPSAiVEUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVFJBSUxFUiA9ICJUcmFpbGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HID0gIlRyYW5zZmVyLUVuY29kaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VQR1JBREUgPSAiVXBncmFkZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9VU0VSX0FHRU5UID0gIlVzZXItQWdlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVkFSWSA9ICJWYXJ5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1ZJQSA9ICJWaWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfV0FSTklORyA9ICJXYXJuaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1dXV19BVVRIRU5USUNBVEUgPSAiV1dXLUF1dGhlbnRpY2F0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NSU1FX1ZFUlNJT04gPSAiTUlNRS1WZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRElTUE9TSVRJT04gPSAiQ29udGVudC1EaXNwb3NpdGlvbiI7ICAKLQotICAvLyBIVFRQIEF1dGhlbnRpY2F0aW9uOiBCYXNpYyBhbmQgRGlnZXN0IEFjY2VzcyBBdXRoZW50aWNhdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSEVOVElDQVRJT05fSU5GTyA9ICJBdXRoZW50aWNhdGlvbi1JbmZvIjsKLQotICAvLyBIVFRQIFN0YXRlIE1hbmFnZW1lbnQgTWVjaGFuaXNtCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9TRVRfQ09PS0lFID0gIlNldC1Db29raWUiOwotCi0gIC8vIEhUVFAgU3RhdGUgTWFuYWdlbWVudCBNZWNoYW5pc20gKG9ic29sZXRlcyBSRkMyMTA5KQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09PS0lFID0gIkNvb2tpZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT09LSUUyID0gIkNvb2tpZTIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU0VUX0NPT0tJRTIgPSAiU2V0LUNvb2tpZTIiOwotCi0gIC8vIFdlYiBEaXN0cmlidXRlZCBBdXRob3JpbmcgYW5kIFZlcnNpb25pbmcKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RBViA9ICJEQVYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVQVEggPSAiRGVwdGgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVTVElOQVRJT04gPSAiRGVzdGluYXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUYgPSAiSWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTE9DS19UT0tFTiA9ICJMb2NrLVRva2VuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX09WRVJXUklURSA9ICJPdmVyd3JpdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1RBVFVTX1VSSSA9ICJTdGF0dXMtVVJJIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RJTUVPVVQgPSAiVGltZW91dCI7Ci0KLSAgLy8gSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xIChQcm9wb3NlZCBTdGFuZGFyZCAtIHRoZXNlIGZpZWxkLW5hbWVzIGFyZSBub3cgY29uc2lkZXJlZCBvYnNvbGV0ZSkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfQkFTRSA9ICJDb250ZW50LUJhc2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFVCTElDID0gIlB1YmxpYyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1ZFUlNJT04gPSAiQ29udGVudC1WZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RFUklWRURfRlJPTSA9ICJEZXJpdmVkLUZyb20iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTElOSyA9ICJMaW5rIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VSSSA9ICJVUkkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfS0VFUF9BTElWRSA9ICJLZWVwLUFsaXZlIjsKLQotICAvLyBEZWx0YSBFbmNvZGluZyBpbiBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BX0lNID0gIkEtSU0iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVMVEFfQkFTRSA9ICJEZWx0YS1CYXNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0lNID0gIklNIjsKLQotICAvLyBJbnN0YW5jZSBEaWdlc3RzIGluIEhUVFAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJR0VTVCA9ICJEaWdlc3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfV0FOVF9ESUdFU1QgPSAiV2FudC1EaWdlc3QiOwotCi0gIC8vIFNpbXBsZSBIaXQtTWV0ZXJpbmcgYW5kIFVzYWdlLUxpbWl0aW5nIGZvciBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NRVRFUiA9ICJNZXRlciI7Ci0KLSAgLy8gVGhlIEtub3duIE5vbi1TdGFuZGFyZGl6ZWQgSFRUUCBIZWFkZXIgZmllbGQtbmFtZXMKLQotICAvLyBUcmFuc3BhcmVudCBDb250ZW50IE5lZ290aWF0aW9uIGluIEhUVFAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9GRUFUVVJFUyA9ICJBY2NlcHQtRmVhdHVyZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUxURVJOQVRFUyA9ICJBbHRlcm5hdGVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX05FR09USUFURSA9ICJOZWdvdGlhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVENOID0gIlRDTiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WQVJJQU5UX1ZBUlkgPSAiVmFyaWFudC1WYXJ5IjsKLQotICAvLyBUaGUgU2FmZSBSZXNwb25zZSBIZWFkZXIgRmllbGQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NBRkUgPSAiU2FmZSI7Ci0KLSAgLy8gSHlwZXIgVGV4dCBDb2ZmZWUgUG90IENvbnRyb2wgUHJvdG9jb2wgKEhUQ1BDUC8xLjApCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BQ0NFUFRfQURESVRJT05TID0gIkFjY2VwdC1BZGRpdGlvbnMiOwotCi0gIC8vIFRoZSBTZWN1cmUgSHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1BSSVZBQ1lfRE9NQUlOID0gIkNvbnRlbnQtUHJpdmFjeS1Eb21haW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTUFDX0lORk8gPSAiTUFDLUluZm8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJFQVJSQU5HRURfS0VZX0lORk8gPSAiUHJlYXJyYW5nZWQtS2V5LUluZm8iOwotCi0gIC8vIEFuIEhUVFAgRXh0ZW5zaW9uIEZyYW1ld29yawotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19FWFQgPSAiQy1FeHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19NQU4gPSAiQy1NYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19PUFQgPSAiQy1PcHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhUID0gIkV4dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NQU4gPSAiTWFuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX09QVCA9ICJPcHQiOwotCi0gIC8vIFBJQ1MgTGFiZWwgRGlzdHJpYnV0aW9uIExhYmVsIFN5bnRheCBhbmQgQ29tbXVuaWNhdGlvbiBQcm90b2NvbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BJQ1NfTEFCRUwgPSAiUElDUy1MYWJlbCI7Ci0KLSAgLy8gUGxhdGZvcm0gRm9yIFByaXZhY3kgUHJlZmVyZW5jZXMgMS4wCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QM1AgPSAiUDNQIjsKLQotICAvLyBQRVAgLSBhbiBFeHRlbnNpb24gTWVjaGFuaXNtIGZvciBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DX1BFUCA9ICJDLVBFUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DX1BFUF9JTkZPID0gIkMtUEVQLUluZm8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUEVQID0gIlBFUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QRVBfSU5GTyA9ICJQZXAtSW5mbyI7Ci0KLSAgLy8gVGhlIEhUVFAgRGlzdHJpYnV0aW9uIGFuZCBSZXBsaWNhdGlvbiBQcm90b2NvbAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9JRCA9ICJDb250ZW50LUlEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJRkZFUkVOVElBTF9JRCA9ICJEaWZmZXJlbnRpYWwtSUQiOwotCi0gIC8vIEVTSSBBcmNoaXRlY3R1cmUKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NVUlJPR0FURV9DQVBBQklMSVRZID0gIlN1cnJvZ2F0ZS1DYXBhYmlsaXR5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NVUlJPR0FURV9DT05UUk9MID0gIlN1cnJvZ2F0ZS1Db250cm9sIjsKLQotICAvLyBTZWxlY3RpbmcgUGF5bWVudCBNZWNoYW5pc21zIE92ZXIgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPVE9DT0wgPSAiUHJvdG9jb2wiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPVE9DT0xfSU5GTyA9ICJQcm90b2NvbC1JbmZvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1RPQ09MX1FVRVJZID0gIlByb3RvY29sLVF1ZXJ5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1RPQ09MX1JFUVVFU1QgPSAiUHJvdG9jb2wtUmVxdWVzdCI7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gb2YgT1BTIE92ZXIgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfR0VUUFJPRklMRSA9ICJHZXRQcm9maWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST0ZJTEVPQkpFQ1QgPSAiUHJvZmlsZU9iamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9TRVRQUk9GSUxFID0gIlNldFByb2ZpbGUiOwotCi0gIC8vIE5vdGlmaWNhdGlvbiBmb3IgUHJveHkgQ2FjaGVzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9GRUFUVVJFUyA9ICJQcm94eS1GZWF0dXJlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9JTlNUUlVDVElPTiA9ICJQcm94eS1JbnN0cnVjdGlvbiI7Ci0KLSAgLy8gT2JqZWN0IEhlYWRlciBsaW5lcyBpbiBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09TVCA9ICJDb3N0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX01FU1NBR0VfSUQgPSAiTWVzc2FnZS1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9USVRMRSA9ICJUaXRsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WRVJTSU9OID0gIlZlcnNpb24iOwotCi0gIC8vIEEgUHJvcG9zZWQgRXh0ZW5zaW9uIE1lY2hhbmlzbSBmb3IgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhURU5TSU9OID0gIkV4dGVuc2lvbiI7Ci0KLSAgLy8gV0lSRSAtIFczIElkZW50aWZpZXIgUmVzb2x1dGlvbiBFeHRlbnNpb25zCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9PUFRJT05BTCA9ICJPcHRpb25hbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SRVNPTFVUSU9OX0hJTlQgPSAiUmVzb2x1dGlvbi1IaW50IjsKLQotICAvLyBEdXBsaWNhdGUgU3VwcHJlc3Npb24gaW4gSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1VCT0sgPSAiU3ViT0siOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1VCU1QgPSAiU3Vic3QiOwotCi0gIC8vIFNwZWNpZmljYXRpb24gb2YgSFRUUC8xLjEgT1BUSU9OUyBtZXNzYWdlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09NUExJQU5DRSA9ICJDb21wbGlhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX05PTl9DT01QTElBTkNFID0gIk5vbi1Db21wbGlhbmNlIjsKLQotICAvLyBXaWRlbHktdXNlZCB1bmRvY3VtZW50ZWQgaGVhZGVycwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVRVUVTVF9SQU5HRSA9ICJSZXF1ZXN0LVJhbmdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VBX0NPTE9SID0gIlVBLUNvbG9yIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VBX0NQVSA9ICJVQS1DUFUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVUFfT1MgPSAiVUEtT1MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVUFfUElYRUxTID0gIlVBLVBpeGVscyI7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gZXJyb3JzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SRUZFUlJFUiA9ICJSZWZlcnJlciI7Ci0KLSAgLy8gUHJpdmF0ZSBmZWF0dXJlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09QWVJJR0hUID0gIkNvcHlyaWdodCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UID0gIkNvbnRlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSE9SID0gIkF1dGhvciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05UQUNUID0gIkNvbnRhY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfS0VZV09SRFMgPSAiS2V5d29yZHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfR0VORVJBVE9SID0gIkdlbmVyYXRvciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9ERVNDUklQVElPTiA9ICJEZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT01NQU5EID0gIkNvbW1hbmQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU0VTU0lPTiA9ICJTZXNzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RZUEUgPSAiVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NRVNTQUdFID0gIk1lc3NhZ2UiOwotCi0gIC8vIEFiYW5kb25lZCBwcm9wb3NhbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VOTEVTU19NT0RJRklFRF9TSU5DRSA9ICJVbmxlc3MtTW9kaWZpZWQtU2luY2UiOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCB0aGUgc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzIHByZXNlbnRlZCBhcyBMaXN0Ci0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2Ygc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0U3RhbmRhcmRpemVkSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BQ0NFUFRfQ0hBUlNFVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9SQU5HRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTExPVy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DQUNIRV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OTkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9MRU5HVEgudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9NRDUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VUQUcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBFQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBJUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRlJPTS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0hPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRl9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfTk9ORV9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xBU1RfTU9ESUZJRUQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9MT0NBVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BWF9GT1JXQVJEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BSQUdNQS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SQU5HRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFRkVSRVIudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SRVRSWV9BRlRFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFUlZFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFJBSUxFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVVBHUkFERS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VTRVJfQUdFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WQVJZLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVklBLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfV0FSTklORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dXV19BVVRIRU5USUNBVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NSU1FX1ZFUlNJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BVVRIRU5USUNBVElPTl9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TRVRfQ09PS0lFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT09LSUUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT09LSUUyLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUX0NPT0tJRTIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RBVi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFUFRILnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVTVElOQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xPQ0tfVE9LRU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9PVkVSV1JJVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVEFUVVNfVVJJLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElNRU9VVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFVCTElDLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVSSVZFRF9GUk9NLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTElOSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VSSS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0tFRVBfQUxJVkUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0FfSU0udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERUxUQV9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSU0udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RJR0VTVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dBTlRfRElHRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9NRVRFUi50b1VwcGVyQ2FzZSgpCi0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbGwgdGhlIG5vbi1zdGFuZGFyZGl6ZWQgSFRUUCBoZWFkZXIgbmFtZXMgcHJlc2VudGVkIGFzIExpc3QKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBub24tc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0Tm9uU3RhbmRhcmRpemVkSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFRfRkVBVFVSRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTFRFUk5BVEVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTkVHT1RJQVRFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVENOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVkFSSUFOVF9WQVJZLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TQUZFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BQ0NFUFRfQURESVRJT05TLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT05URU5UX1BSSVZBQ1lfRE9NQUlOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUFDX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUkVBUlJBTkdFRF9LRVlfSU5GTy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ19FWFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DX01BTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NfT1BULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRVhULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUFOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfT1BULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QSUNTX0xBQkVMLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0wudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9SRVFVRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QM1AudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NfUEVQLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ19QRVBfSU5GTy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BFUC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BFUF9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT05URU5UX0lELnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRElGRkVSRU5USUFMX0lELnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TVVJST0dBVEVfQ0FQQUJJTElUWS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NVUlJPR0FURV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QUk9UT0NPTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9RVUVSWS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MX1JFUVVFU1QudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0dFVFBST0ZJTEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9GSUxFT0JKRUNULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUUFJPRklMRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUFJPWFlfRkVBVFVSRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9YWV9JTlNUUlVDVElPTi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NRVNTQUdFX0lELnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElUTEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9FWFRFTlNJT04udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX09QVElPTkFMLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUkVTT0xVVElPTl9ISU5ULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TVUJPSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NVQlNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT01QTElBTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTk9OX0NPTVBMSUFOQ0UudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1JFUVVFU1RfUkFOR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9DT0xPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX0NQVS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX09TLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVUFfUElYRUxTLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9SRUZFUlJFUi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09QWVJJR0hULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRBQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9LRVlXT1JEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0dFTkVSQVRPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFU0NSSVBUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09NTUFORC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFU1NJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUVTU0FHRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfVU5MRVNTX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCkKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCBrbm93biBIVFRQIGhlYWRlciBuYW1lcyBwcmVzZW50ZWQgYXMgTGlzdAotICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIGFsbCBrbm93biBIVFRQIGhlYWRlciBuYW1lcwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbEtub3duSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BQ0NFUFRfQ0hBUlNFVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9SQU5HRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTExPVy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DQUNIRV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OTkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9MRU5HVEgudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9NRDUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VUQUcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBFQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBJUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRlJPTS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0hPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRl9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfTk9ORV9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xBU1RfTU9ESUZJRUQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9MT0NBVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BWF9GT1JXQVJEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BSQUdNQS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SQU5HRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFRkVSRVIudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SRVRSWV9BRlRFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFUlZFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFJBSUxFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVVBHUkFERS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VTRVJfQUdFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WQVJZLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVklBLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfV0FSTklORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dXV19BVVRIRU5USUNBVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NSU1FX1ZFUlNJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BVVRIRU5USUNBVElPTl9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TRVRfQ09PS0lFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT09LSUUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT09LSUUyLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUX0NPT0tJRTIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RBVi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFUFRILnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVTVElOQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xPQ0tfVE9LRU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9PVkVSV1JJVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVEFUVVNfVVJJLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElNRU9VVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFVCTElDLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVSSVZFRF9GUk9NLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTElOSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VSSS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0tFRVBfQUxJVkUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0FfSU0udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERUxUQV9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSU0udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RJR0VTVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dBTlRfRElHRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9NRVRFUi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQUNDRVBUX0ZFQVRVUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQUxURVJOQVRFUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX05FR09USUFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RDTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1ZBUklBTlRfVkFSWS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU0FGRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQUNDRVBUX0FERElUSU9OUy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9QUklWQUNZX0RPTUFJTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BQ19JTkZPLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJFQVJSQU5HRURfS0VZX0lORk8udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NfRVhULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ19NQU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DX09QVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VYVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX09QVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUElDU19MQUJFTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0xfUkVRVUVTVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUDNQLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DX1BFUC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NfUEVQX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QRVAudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QRVBfSU5GTy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9JRC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RJRkZFUkVOVElBTF9JRC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU1VSUk9HQVRFX0NBUEFCSUxJVFkudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVVJST0dBVEVfQ09OVFJPTC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUFJPVE9DT0wudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9JTkZPLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0xfUVVFUlkudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9SRVFVRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9HRVRQUk9GSUxFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPRklMRU9CSkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFVFBST0ZJTEUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1BST1hZX0ZFQVRVUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPWFlfSU5TVFJVQ1RJT04udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT1NULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUVTU0FHRV9JRC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RJVExFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVkVSU0lPTi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfRVhURU5TSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9PUFRJT05BTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFU09MVVRJT05fSElOVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU1VCT0sudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVUJTVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09NUExJQU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX05PTl9DT01QTElBTkNFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9SRVFVRVNUX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVUFfQ09MT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9DUFUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9PUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX1BJWEVMUy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUkVGRVJSRVIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NPUFlSSUdIVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BVVRIT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05UQUNULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfS0VZV09SRFMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9HRU5FUkFUT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERVNDUklQVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTU1BTkQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TRVNTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFlQRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01FU1NBR0UudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1VOTEVTU19NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpCi0gICAgfSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0hUVFBVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2ZTQ0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0hUVFBVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogU2V0IG9mIEhUVFBMIHJlbGF0ZWQgdXRpbGl0aWVzLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSFRUUFV0aWxzCi17Ci0KLSAgLyoqCi0gICAqIEZpbmQgdGhlIFVSTCBzdHJpbmcgaW4gYSBIVFRQIFBPU1QgaGVhZGVyLgotICAgKiBAcGFyYW0gaHR0cFBvc3RIZWFkZXIgIGEgSFRUUCBQT1NUIGhlYWRlci4gCi0gICAqIEByZXR1cm4gdGhlIFVSTCBzdHJpbmcgaW4gYSBIVFRQIFBPU1QgaGVhZGVyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VVJMU3RyaW5nKFN0cmluZyBodHRwUG9zdEhlYWRlcikKLSAgewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSBudWxsOwotICAgIGludCBzdGFydCwgZW5kOwotCi0gICAgLy8gSWYgUE9TVCwgdGhlbiBjb250aW51ZQotICAgIGlmIChodHRwUG9zdEhlYWRlci5zdGFydHNXaXRoKCJQT1NUIikgfHwgaHR0cFBvc3RIZWFkZXIuc3RhcnRzV2l0aCgiR0VUIikpCi0gICAgewotICAgICAgLy8gU3RhcnQgYWZ0ZXIgZmlyc3Qgc3BhY2UKLSAgICAgIHN0YXJ0ID0gaHR0cFBvc3RIZWFkZXIuaW5kZXhPZignICcpICsgMTsKLQotICAgICAgLy8gTG9vayBmb3IgbmV4dCBub24tc3BhY2UgY2hhcmFjdGVyCi0gICAgICB3aGlsZSAoaHR0cFBvc3RIZWFkZXIuY2hhckF0KHN0YXJ0KSA9PSAnICcpCi0gICAgICAgIHN0YXJ0Kys7Ci0KLSAgICAgIC8vIEZpbmQgbmV4dCBzcGFjZSBjaGFyYWN0ZXIKLSAgICAgIGVuZCA9IGh0dHBQb3N0SGVhZGVyLmluZGV4T2YoJyAnLCBzdGFydCk7Ci0KLSAgICAgIC8vIEdldCBVUkwgc3RyaW5nIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYmV0d2VlbiBzdGFydCBhbmQgZW5kCi0gICAgICB1cmxTdHJpbmcgPSBodHRwUG9zdEhlYWRlci5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Ci0gICAgfQotCi0gICAgLy8gRWxzZSB0aHJvdyBleGNlcHRpb24KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIkhUVFAgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gUE9TVCBkYXRhICh3YXM6ICIgKyBodHRwUG9zdEhlYWRlciArICIpIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIFVSTCBzdHJpbmcKLSAgICByZXR1cm4gdXJsU3RyaW5nOwotICB9Ci0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHByZXNlbnQgSFRUUCBoZWFkZXIgaW5mb3JtYXRpb24gYXMgYXR0cmlidXRlLXZhbHVlIHBhaXJzLCAKLSAgICogYmFzZWQgb24gJzonIGFzIGF0dHJpYnV0ZS12YWx1ZSBzZXBhcmF0b3IuCi0gICAqIEBwYXJhbSBodHRwSGVhZGVyU3RyaW5nIGFuIEhUVFAgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIHNlcGFyYXRvcnMgYXR0cmlidXRlLXZhbHVlIHNlcGFyYXRvciBsaXN0LgotICAgKiBAcmV0dXJuIEhUVFAgaGVhZGVyIGluZm9ybWF0aW9uIGFzIGF0dHJpYnV0ZS12YWx1ZSBwYWlycy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBIVFRQIGhlYWRlciBpbmZvcm1hdGlvbiAKLSAgICogICAgICAgICBhcyBhdHRyaWJ1dGUtdmFsdWUgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRIdHRwSGVhZGVyVG9rZW5zKFN0cmluZyBodHRwSGVhZGVyU3RyaW5nLCBTdHJpbmcgc2VwYXJhdG9ycykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihodHRwSGVhZGVyU3RyaW5nLCAiXG5cclxmIik7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIFN0cmluZyBsaW5lID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwotICAgICAgaW50IGluZGV4ID0gbGluZS5pbmRleE9mKHNlcGFyYXRvcnMpOwotICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8IGxpbmUubGVuZ3RoKCkgLSAxKQotICAgICAgewotICAgICAgCW5hbWUgPSBsaW5lLnN1YnN0cmluZygwLCBpbmRleCkudG9VcHBlckNhc2UoKTsKLSAgICAgICAgbWFwLnB1dChuYW1lLCBsaW5lLnN1YnN0cmluZyhpbmRleCArIDEpLnRyaW0oKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICgobmFtZSAhPSBudWxsKSAmJiAobGluZS5sZW5ndGgoKT4wKSAmJiBDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGxpbmUuY2hhckF0KDApKSkKLSAgICAgICAgICAgbWFwLnB1dChuYW1lLCBtYXAuZ2V0KG5hbWUpICsgIiAiICsgbGluZS50cmltKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0gIAotICAvKioKLSAgICogVXRpbGl0eSB0byB0YWtlIHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBIVFRQIGhlYWRlcgotICAgKiBAcGFyYW0gaHR0cEhlYWRlclN0cmluZyBhbiBIVFRQIGhlYWRlciBzdHJpbmcuCi0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcGFyYW0gc3ViQXR0cmlidXRlTmFtZSBzdWIgYXR0cmlidXRlIG5hbWUuCi0gICAqIEByZXR1cm4gc3ViIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIEhUVFAgaGVhZGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBIVFRQIGhlYWRlci4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBodHRwSGVhZGVyU3RyaW5nLCAKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBTdHJpbmcgc3ViQXR0cmlidXRlTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBnZXQgYXR0cmlidXRlIHZhbHVlCi0gICAgU3RyaW5nIHZhbHVlID0gCi0gICAgICAoU3RyaW5nKSBnZXRIdHRwSGVhZGVyVG9rZW5zKGh0dHBIZWFkZXJTdHJpbmcsIjoiKS5nZXQoYXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKTsKLSAgICBpZih2YWx1ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIHNlYXJjaCBzdWIgYXR0cmlidXRlIHRva2VuCi0gICAgICBpbnQgaWR4USA9IHZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdWJBdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkrIj1cIiIpOwotICAgICAgaW50IGlkeCA9IHZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdWJBdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkrIj0iKTsKLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBpcyBxdW90ZWQKLSAgICAgIGlmIChpZHhRICE9IC0xKSAKLSAgICAgIHsKLSAgICAgICAgaWR4USArPSAoc3ViQXR0cmlidXRlTmFtZSsiPVwiIikubGVuZ3RoKCk7Ci0gICAgICAgIGludCBlSWR4USA9IHZhbHVlLmluZGV4T2YoIlwiIiwgaWR4USk7Ci0gICAgICAgIGlmIChlSWR4USAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaWR4USwgZUlkeFEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gaWYgYXR0cmlidXRlIGRvIG5vdCBxdW90ZWQKLSAgICAgIGVsc2UgaWYgKGlkeCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWR4ICs9IChzdWJBdHRyaWJ1dGVOYW1lKyI9IikubGVuZ3RoKCk7Ci0gICAgICAgIGludCBlSWR4ID0gLTE7Ci0gICAgICAgIC8vIGZpbmQgZW5kIHNwYWNlIHNlcGFyYXRvcgotICAgICAgICBpZiAoKGVJZHggPSB2YWx1ZS5pbmRleE9mKCIgIiwgaWR4KSkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCwgZUlkeCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZmluZCBjb21hIHNlcGFyYXRvcgotICAgICAgICBlbHNlIGlmICgoZUlkeCA9IHZhbHVlLmluZGV4T2YoIjsiLCBpZHgpKSAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaWR4LCBlSWR4KTsKLSAgICAgICAgfQotICAgICAgICAvLyB0aGlzIGlzIGxhc3QgYXR0cmlidXRlCi0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBkbyBub3QgZm91bmQKLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogVXRpbGl0eSB0byB0YWtlIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIEhUVFAgaGVhZGVyCi0gICAqIEBwYXJhbSBodHRwSGVhZGVyU3RyaW5nIGFuIEhUVFAgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgYXR0cmlidXRlIG5hbWUuCi0gICAqIEByZXR1cm4gYXR0cmlidXRlIHZhbHVlIGZyb20gSFRUUCBoZWFkZXIuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBnZXQgYXR0cmlidXRlIHZhbHVlIGZyb20gSFRUUCBoZWFkZXIuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShTdHJpbmcgaHR0cEhlYWRlclN0cmluZywgCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSAKLSAgICAgICAgKFN0cmluZykgZ2V0SHR0cEhlYWRlclRva2VucyhodHRwSGVhZGVyU3RyaW5nLCI6IikuZ2V0KGF0dHJpYnV0ZU5hbWUudG9VcHBlckNhc2UoKSk7Ci0gICAgLy8gZ2V0IGZpcnN0IHRva2VuCi0gICAgaWYoKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwpICYmIChhdHRyaWJ1dGVWYWx1ZS5pbmRleE9mKCI7IikgIT0gLTEpKSB7Ci0gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVZhbHVlLnN1YnN0cmluZygwLCBhdHRyaWJ1dGVWYWx1ZS5pbmRleE9mKCI7IikpOwotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSHR0cEhlYWRlcnNWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSHR0cEhlYWRlcnNWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2YTQ5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0h0dHBIZWFkZXJzVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBzdW4ubmV0Lnd3dy5NZXNzYWdlSGVhZGVyOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2hlY2tzIEhUVFAgcmVxdWVzdCBoZWFkZXJzIGFib3V0IFJGQyAyNjE2LgotICoKLSAqIEBhdXRob3IgVm9sb2RpbiAKLSAqLwotcHVibGljIGNsYXNzIEh0dHBIZWFkZXJzVmFsaWRhdG9yCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BTExPVyA9ICJBbGxvdyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9FTkNPRElORyA9ICJDb250ZW50LUVuY29kaW5nIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xBTkdVQUdFID0gIkNvbnRlbnQtTGFuZ3VhZ2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfTEVOR0hUID0gIkNvbnRlbnQtTGVuZ3RoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OID0gIkNvbnRlbnQtTG9jYXRpb24iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfUkFOR0UgPSAiQ29udGVudC1SYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQSVJFUyA9ICJFeHBpcmVzIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9MQVNUX01PRElGSUVEID0gIkxhc3QtTW9kaWZpZWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NBQ0hFX0NPTlRST0wgPSAiQ2FjaGUtQ29udHJvbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OTkVDVElPTiA9ICJDb25uZWN0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9EQVRFID0gIkRhdGUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RSQUlMRVIgPSAiVHJhaWxlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcgPSAiVHJhbnNmZXItRW5jb2RpbmciOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVVBHUkFERSA9ICJVcGdyYWRlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WSUEgPSAiVmlhIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9XQVJOSU5HID0gIldhcm5pbmciOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUID0gIkFjY2VwdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0NIQVJTRVQgPSAiQWNjZXB0LUNoYXJzZXQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9FTkNPRElORyA9ICJBY2NlcHQtRW5jb2RpbmciOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRSA9ICJBY2NlcHQtTGFuZ3VhZ2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FVVEhPUklaQVRJT04gPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQRUNUID0gIkV4cGVjdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRlJPTSA9ICJGcm9tIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9IT1NUID0gIkhvc3QiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0lGX01BVENIID0gIklmLU1hdGNoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSA9ICJJZi1Nb2RpZmllZC1TaW5jZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfTk9ORV9NQVRDSCA9ICJJZi1Ob25lLU1hdGNoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9SQU5HRSA9ICJJZi1SYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRSA9Ci0gICAgIklmLVVubW9kaWZpZWQtU2luY2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX01BWF9GT1JXQVJEUyA9ICJNYXgtRm9yd2FyZHMiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04gPQotICAgICJQcm94eS1BdXRob3JpemF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SQU5HRSA9ICJSYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVGRVJFUiA9ICJSZWZlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9URSA9ICJURSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVVNFUl9BR0VOVCA9ICJVc2VyLUFnZW50IjsKLQotICAvKioKLSAgICogVGhpcyBjbGFzcyBjaGVja3MgZS1tYWlsIHN0cmluZyBhYm91dCBSRkMgODIyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBNYWlsYm94VmFsaWRhdG9yCi0gIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gU1BFQ0lBTCA9Ci0gICAgICB7ICcoJywgJyknLCAnPCcsICc+JywgJ0AnLCAnLCcsICc7JywgJzonLCAnXFwnLCAnXCInLCAnLicsICdbJywgJ10nIH07Ci0KLSAgICAvKioKLSAgICAJKiBWYWxpZGF0ZXMgZS1tYWlsIHN0cmluZy4KLSAgICAqIEBwYXJhbSBtYWlsYm94IGUtbWFpbCBzdHJpbmcKLSAgICAqIEByZXR1cm4gYm9vbGVhbiAgdHJ1ZSBpZiBlLW1haWwgc3RyaW5nIGlzIGNvbmZvcm0gdG8gUkZDIDgyMiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICovCi0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVNYWlsYm94KFN0cmluZyBtYWlsYm94KQotICAgIHsKLQotICAgICAgaWYgKCFpc0Z1bGxBZGRyKG1haWxib3gpICYmICFpc1Nob3J0QWRkcihtYWlsYm94KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNTaW1wbGVBZGRyLgotICAgICAqIEBwYXJhbSBtYWlsYm94Ci0gICAgICogQHJldHVybiBib29sZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Nob3J0QWRkcihTdHJpbmcgbWFpbGJveCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXhBdCA9IG1haWxib3guaW5kZXhPZignQCcpOwotICAgICAgaWYgKGluZGV4QXQgPT0gLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgaWYgKCFpc0xvY2FsUGFydChtYWlsYm94LnN1YnN0cmluZygwLCBpbmRleEF0KSkKLSAgICAgICAgfHwgIWlzRG9tYWluKG1haWxib3guc3Vic3RyaW5nKGluZGV4QXQgKyAxKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTWV0aG9kIGlzRG9tYWltLgotICAgICAqIEBwYXJhbSBzdHJpbmcKLSAgICAgKiByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEb21haW4oU3RyaW5nIHN0cmluZykKLSAgICB7Ci0gICAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cmluZywgIi4iKTsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdWJEb21haW4gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgaWYgKCFpc0F0b20oc3ViRG9tYWluKSAmJiAhaXNEb21haW5MaXRlcmFsKHN1YkRvbWFpbikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNEb21haW5MaXRlcmFsLgotICAgICAqIEBwYXJhbSBzdWJEb21haW4KLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRG9tYWluTGl0ZXJhbChTdHJpbmcgc3ViRG9tYWluKQotICAgIHsKLSAgICAgIGlmIChnZXRMYXN0RG9tYWluTGl0ZXJhbChzdWJEb21haW4sIDApID09IHN1YkRvbWFpbi5sZW5ndGgoKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdERvbWFpbkxpdGVyYWwoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gICAgewotCi0gICAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgICAgLy9pbnQgbmV3SW5kZXggPSAwOwotCi0gICAgICAvLyBpZiBlbmQgaWYgdGhlIHN0cmluZwotICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIC8vIGlmIHRoZSBiZWdpbiBpcyBub3QgJ1snCi0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJ1snKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgaW5kZXgrKzsKLSAgICAgIHdoaWxlICh0cnVlKQotICAgICAgewotICAgICAgICBpbmRleCA9IGdldExhc3REdGV4dChzdHIsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgICAgaWYgKEJhc2ljUnVsZXMuaXNRdW90ZWRQYWlyKHN0ciwgaW5kZXggLSAxKSkKLSAgICAgICAgewotICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8vIGlmIHRoZSBlbmQgaXMgbm90ICddJwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICddJykKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIGluZGV4Kys7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldExhc3REdGV4dChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgICB7Ci0gICAgICBpZiAoc3RyLmxlbmd0aCgpID09IHN0YXJ0SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgaW50IGkgPSAwOwotICAgICAgZm9yICg7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgY2hhciBjaCA9IHN0ci5jaGFyQXQoaSk7Ci0gICAgICAgIGkgPSBCYXNpY1J1bGVzLmdldExhc3RJbmRleExXUyhzdHIsIGkpOwotICAgICAgICBpZiAoIUJhc2ljUnVsZXMuaXNDSEFSKGNoKQotICAgICAgICAgIHx8IHN0ci5jaGFyQXQoaSkgPT0gJ1snCi0gICAgICAgICAgfHwgc3RyLmNoYXJBdChpKSA9PSAnXScKLSAgICAgICAgICB8fCBzdHIuY2hhckF0KGkpID09ICdcXCcKLSAgICAgICAgICB8fCBzdHIuY2hhckF0KGkpID09IEJhc2ljUnVsZXMuQ1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaSArIDE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBpICsgMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNMb2NhbFBhcnQuCi0gICAgICogQHBhcmFtIHN0cmluZwotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMb2NhbFBhcnQoU3RyaW5nIHN0cmluZykKLSAgICB7Ci0gICAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cmluZywgIi4iKTsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNXb3JkKHN0Lm5leHRUb2tlbigpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNXb3JkLgotICAgICAqIEBwYXJhbSBzdHJpbmcKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzV29yZChTdHJpbmcgc3RyaW5nKQotICAgIHsKLSAgICAgIGlmICghaXNBdG9tKHN0cmluZykgJiYgIWlzUXVvdGVkU3RyaW5nKHN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1ldGhvZCBpc0F0b20uCi0gICAgICogQHBhcmFtIHN0cmluZwotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBdG9tKFN0cmluZyBzdHJpbmcpCi0gICAgewotICAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBpZiAoIUJhc2ljUnVsZXMuaXNDSEFSKHN0cmluZy5jaGFyQXQoaSkpCi0gICAgICAgICAgfHwgaXNTcGVjaWFsKHN0cmluZy5jaGFyQXQoaSkpCi0gICAgICAgICAgfHwgc3RyaW5nLmNoYXJBdChpKSA9PSAnICcKLSAgICAgICAgICB8fCBCYXNpY1J1bGVzLmlzQ1RMKHN0cmluZy5jaGFyQXQoaSkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNTcGVjaWFsLgotICAgICAqIEBwYXJhbSBjCi0gICAgICogQHJldHVybiBib29sZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NwZWNpYWwoY2hhciBjaCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgU1BFQ0lBTC5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGlmIChjaCA9PSBTUEVDSUFMW2luZGV4XSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNGdWxsQWRkci4KLSAgICAgKiBAcGFyYW0gbWFpbGJveAotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNGdWxsQWRkcihTdHJpbmcgbWFpbGJveCkKLSAgICB7Ci0gICAgICBpZiAobWFpbGJveC5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBpbnQgaWR4TFQgPSBtYWlsYm94LmluZGV4T2YoJzwnKTsKLSAgICAgIGlmIChpZHhMVCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAvL2lzIHBocmFzZQotICAgICAgU3RyaW5nIHBocmFzZSA9IG1haWxib3guc3Vic3RyaW5nKDAsIGlkeExUKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocGhyYXNlLCAiICIpOwotICAgICAgaWYgKHN0LmNvdW50VG9rZW5zKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1dvcmQoc3QubmV4dFRva2VuKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChwaHJhc2UuY2hhckF0KHBocmFzZS5sZW5ndGgoKSAtIDEpICE9IEJhc2ljUnVsZXMuU1ApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy9pcyByb3V0ZS1hZGRyCi0gICAgICBTdHJpbmcgcm91dGVBZGRyID0gbWFpbGJveC5zdWJzdHJpbmcoaWR4TFQgKyAxKTsKLSAgICAgIC8vIGlzIHJvdXRlCi0gICAgICBpbnQgaWR4VHdvU3BvdCA9IHJvdXRlQWRkci5pbmRleE9mKCc6Jyk7Ci0gICAgICBpZiAoaWR4VHdvU3BvdCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0Um91dGVBZGRyID0KLSAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKHJvdXRlQWRkci5zdWJzdHJpbmcoMCwgaWR4VHdvU3BvdCksICIsIik7Ci0gICAgICAgIGlmICghc3RSb3V0ZUFkZHIuaGFzTW9yZVRva2VucygpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHN0Um91dGVBZGRyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNEb21haW4oc3RSb3V0ZUFkZHIubmV4dFRva2VuKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vaXMgYWRkciBzcGVjCi0gICAgICBpbnQgaWR4R1QgPSByb3V0ZUFkZHIuaW5kZXhPZignPicpOwotICAgICAgaWYgKGlkeEdUID09IC0xIHx8IGlkeEdUICE9IChyb3V0ZUFkZHIubGVuZ3RoKCkgLSAxKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpZiAoIWlzU2hvcnRBZGRyKHJvdXRlQWRkci5zdWJzdHJpbmcoaWR4VHdvU3BvdCArIDEsIGlkeEdUKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIEhUVFAgcmVxdWVzdCBoZWFkZXJzLgotICAgKiBAcGFyYW0gaGVhZGVycyBIVFRQIHJlcXVlc3QgaGVhZGVycwotICAgKiBAcmV0dXJuIGJvb2xlYW4gIHRydWUgaWYgYWxsIEhUVFAgaGVhZGVycyBzdHJpbmcgaXMgY29uZm9ybSB0byBSRkMgMjYxNiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVIdHRwUmVxdWVzdEhlYWRlcnMoU3RyaW5nIGhlYWRlcnMpCi0gIHsKLQotICAgIE1lc3NhZ2VIZWFkZXIgbWggPSBuZXcgTWVzc2FnZUhlYWRlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIG1oLnBhcnNlSGVhZGVyKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShoZWFkZXJzLmdldEJ5dGVzKCkpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0cmluZyBoZWFkZXIgPSBudWxsOwotICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0KLSAgICBoZWFkZXIgPSBtaC5nZXRLZXkoMCk7Ci0gICAgaWYgKGhlYWRlciAhPSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFsdWUgPSBtaC5nZXRWYWx1ZSgwKTsKLSAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vbWV0aG9kCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiAiKTsKLSAgICBpZiAoIXN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RyID0gc3QubmV4dFRva2VuKCk7Ci0gICAgaWYgKCFpc1VSSShzdHIpICYmICFzdHIuZXF1YWxzKCIqIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotICAgIGlmICghaXNIVFRQVmVyc2lvbihzdHIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGkgPSAxOwotICAgIHRyeQotICAgIHsKLSAgICAgIHdoaWxlICgoaGVhZGVyID0gbWguZ2V0S2V5KGkpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICB2YWx1ZSA9IG1oLmdldFZhbHVlKGkpOwotICAgICAgICBpKys7Ci0KLSAgICAgICAgLy8gaXMgbWVzc2FnZS1oZWFkZXIgdG9rZW4KLSAgICAgICAgaWYgKCFpc1Rva2VuKGhlYWRlcikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vLS0tLSBlbnRpdHktaGVhZGVycwotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9BTExPVykpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRBbGxvdyh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9UWVBFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNNZWRpYVR5cGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9DT05URU5UX0VOQ09ESU5HKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0NPTlRFTlRfTEFOR1VBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0xhbmd1YWdlVGFnKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9MRU5HSFQpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0RpZGdpdCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0NPTlRFTlRfTE9DQVRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1VSSSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9SQU5HRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRDb250ZW50UmFuZ2UodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0VYUElSRVMpCi0gICAgICAgICAgfHwgaGVhZGVyLmVxdWFscyhIRUFERVJfTEFTVF9NT0RJRklFRCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8tLS0tIGdlbmVyYWwtaGVhZGVycwotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ0FDSEVfQ09OVFJPTCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRDYWNoZUNvbnRyb2wodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9DT05ORUNUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfREFURSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1BSQUdNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzUHJhZ21hRGVyZWN0aXZlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9UUkFJTEVSKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1RyYW5zZmVyQ29kaW5nKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9VUEdSQURFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZFVwZ3JhZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1ZJQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRWaWEodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1dBUk5JTkcpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkV2FybmluZyh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZEFjY2VwdCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUX0NIQVJTRVQpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkQWNjZXB0Q2hhclNldCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUX0VOQ09ESU5HKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZEFjY2VwdEVuY29kaW5nKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9BQ0NFUFRfTEFOR1VBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkQWNjZXB0TGFuZ3VhZ2UodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0FVVEhPUklaQVRJT04pCi0gICAgICAgICAgfHwgaGVhZGVyLmVxdWFscyhIRUFERVJfUFJPWFlfQVVUSE9SSVpBVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzQ3JlZGVudGlhbHModmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9FWFBFQ1QpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0V4cGVjdGF0aW9uKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9GUk9NKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghTWFpbGJveFZhbGlkYXRvci52YWxpZGF0ZU1haWxib3godmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX01BVENIKQotICAgICAgICAgIHx8IGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX05PTkVfTUFUQ0gpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkSWZNYXRjaCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX1JBTkdFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNFbnRpdHlUYWcodmFsdWUpICYmICFpc0hUVFBEYXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLS0tCQkJCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9JRl9VTk1PRElGSUVEX1NJTkNFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNIVFRQRGF0ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX01BWF9GT1JXQVJEUykpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzRGlkZ2l0KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9VU0VSX0FHRU5UKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZFVzZXJBZ2VudCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfVEUpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkVEUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1JBTkdFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNSYW5nZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0hPU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0hvc3QodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9SRUZFUkVSKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNVUkkodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRJZk1hdGNoLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRJZk1hdGNoKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICgiKiIuZXF1YWxzKHZhbHVlLnRyaW0oKSkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpZiAoIWlzRW50aXR5VGFnKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkVXBncmFkZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXBncmFkZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGlmICghaXNQcm9kdWN0KHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZENhY2hlQ29udHJvbC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQ2FjaGVDb250cm9sKFN0cmluZyB2YWx1ZSkKLSAgewotCi0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGludCBpbmRleCA9IHN0ci5pbmRleE9mKCc9Jyk7Ci0gICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICB7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBzdHJBZnRlckVxID0gc3RyLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyQWZ0ZXJFcSkgJiYgIWlzUXVvdGVkU3RyaW5nKHN0ckFmdGVyRXEpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzSFRUUFZlcnNpb24uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSFRUUFZlcnNpb24oU3RyaW5nIHN0cikKLSAgewotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIkhUVFAvIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IGlkeCA9ICJIVFRQLyIubGVuZ3RoKCk7Ci0KLSAgICBpbnQgaWR4MiA9IHN0ci5pbmRleE9mKCIuIik7Ci0KLSAgICAvLyAxKkRJR0lUCi0gICAgU3RyaW5nIHMgPSBzdHIuc3Vic3RyaW5nKGlkeCwgaWR4Mik7Ci0gICAgaWYgKCFpc0RpZGdpdChzKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHMgPSBzdHIuc3Vic3RyaW5nKGlkeDIgKyAxKTsKLSAgICBpZiAoIWlzRGlkZ2l0KHMpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRXYXJuaW5nLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRXYXJuaW5nKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZhbHVlID0gdmFsdWUudHJpbSgpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIgIik7Ci0gICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotCi0gICAgaWYgKHN0ci5sZW5ndGgoKSA+IDMgfHwgIWlzRGlkZ2l0KHN0cikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICBpZiAoIWlzSG9zdChzdHIpICYmICFpc1Rva2VuKHN0cikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvL2lmKCFzdC5oYXNNb3JlVG9rZW5zKCkpIHJldHVybiBmYWxzZTsKLSAgICBzdHIgPSBzdC5uZXh0VG9rZW4oIiIpLnRyaW0oKTsKLSAgICAvLz8/PwotCi0gICAgaW50IGxhc3RRdW90ZWRTdHJpbmcgPSBCYXNpY1J1bGVzLmdldExhc3RRdW90ZWRTdHJpbmcoc3RyLCAwKTsKLSAgICBpZiAobGFzdFF1b3RlZFN0cmluZyA9PSBzdHIubGVuZ3RoKCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgZGF0YSA9IHN0ci5zdWJzdHJpbmcobGFzdFF1b3RlZFN0cmluZyk7Ci0gICAgICBpZiAoZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGgoKSkgIT0gJ1wiJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKHN0ci5jaGFyQXQoMCkgIT0gJ1wiJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFpc0hUVFBEYXRlKHN0ci5zdWJzdHJpbmcoMSwgZGF0YS5sZW5ndGgoKSAtIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkVmlhLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRWaWEoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotCi0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotCi0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QyID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICIgIik7Ci0KLSAgICAgIC8vIHByb3RvY29sL3ZlcnNpb24KLSAgICAgIHN0ciA9IHN0Mi5uZXh0VG9rZW4oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiLyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1Rva2VuKHN0cikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgIHx8ICFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy9ob3N0Ci0gICAgICBzdHIgPSBzdDIubmV4dFRva2VuKCk7Ci0gICAgICBpZiAoIWlzSG9zdChzdHIpICYmICFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgLy9jb21tZW50Ci0gICAgICBpZiAoc3QyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgc3RyID0gc3QyLm5leHRUb2tlbigiIik7Ci0gICAgICAgIGlmICghaXNDb21tZW50KHN0ci50cmltKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzSG9zdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0hvc3QoU3RyaW5nIHZhbHVlKQotICB7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXcgVVJMKCJodHRwOi8vIiArIHZhbHVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRBbGxvdy4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWxsb3coU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgaWYgKCFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRDb250ZW50UmFuZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZENvbnRlbnRSYW5nZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoImJ5dGVzIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nIHN0ciA9IHZhbHVlLnN1YnN0cmluZygiYnl0ZXMiLmxlbmd0aCgpKS50cmltKCk7Ci0KLSAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIi8iKTsKLSAgICBpZiAoaWR4ID09IC0xKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGJ5dGVSYW5nZSA9IHN0ci5zdWJzdHJpbmcoMCwgaWR4KTsKLSAgICBpbnQgaWR4MiA9IGJ5dGVSYW5nZS5pbmRleE9mKCItIik7Ci0gICAgaWYgKGlkeDIgPT0gLTEpCi0gICAgewotICAgICAgaWYgKCFieXRlUmFuZ2UuZXF1YWxzKCIqIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICghaXNEaWRnaXQoYnl0ZVJhbmdlLnN1YnN0cmluZygwLCBpZHgyKSkKLSAgICAgICAgfHwgIWlzRGlkZ2l0KGJ5dGVSYW5nZS5zdWJzdHJpbmcoaWR4MiArIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNEaWRnaXQoc3RyLnN1YnN0cmluZyhpZHggKyAxKSkKLSAgICAgICYmICFzdHIuc3Vic3RyaW5nKGlkeCArIDEpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzUmFuZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNSYW5nZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoImJ5dGVzPSIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHJCeXRlUmFuZ2UgPSB2YWx1ZS5zdWJzdHJpbmcoImJ5dGVzPSIubGVuZ3RoKCkpOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJCeXRlUmFuZ2UsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiLSIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKGlkeCA9PSAwKQotICAgICAgewotICAgICAgICBpZiAoIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoMSkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKGlkeCA9PSAoc3RyLmxlbmd0aCgpIC0gMSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCgpIC0gMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNEaWRnaXQoc3RyLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgICAgfHwgIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZFRFLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRURShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpZiAoc3QuZXF1YWxzKCJ0cmFpbGVycyIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI7Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoIWlzTGFuZ3VhZ2VSYW5nZShzdHIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0gICAgICAgIGlmICghaXNMYW5ndWFnZVJhbmdlKF8xKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNRQW5kUVZhbHVlKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZFVzZXJBZ2VudC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXNlckFnZW50KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIgIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICghaXNQcm9kdWN0KHN0cikgJiYgIWlzQ29tbWVudChzdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNDb21tZW50LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbW1lbnQoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChCYXNpY1J1bGVzLmdldExhc3RDb21tZW50KHN0ciwgMCkgIT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0TGFuZ3VhZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEFjY2VwdExhbmd1YWdlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIjsiKTsKLSAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNUb2tlbihzdHIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0gICAgICAgIGlmICghaXNUb2tlbihfMSkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzQWNjZXB0UGFyYW1zKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNMYW5ndWFnZVJhbmdlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0xhbmd1YWdlUmFuZ2UoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChzdHIudHJpbSgpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICItIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXM4QUxQSEEoc3QubmV4dFRva2VuKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0RW5jb2RpbmcuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEFjY2VwdEVuY29kaW5nKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIjsiKTsKLSAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNUb2tlbihzdHIpICYmICFzdHIuZXF1YWxzKCIqIikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgXzEgPSBzdHIuc3Vic3RyaW5nKDAsIGlkeCkudHJpbSgpOwotICAgICAgICBTdHJpbmcgXzIgPSBzdHIuc3Vic3RyaW5nKGlkeCArIDEpLnRyaW0oKTsKLQotICAgICAgICBpZiAoKCFpc1Rva2VuKF8xKSAmJiAhXzEuZXF1YWxzKCIqIikpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1FBbmRRVmFsdWUoXzIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0Q2hhclNldC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWNjZXB0Q2hhclNldChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI7Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyKSAmJiAhc3RyLmVxdWFscygiKiIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0KLSAgICAgICAgaWYgKCghaXNUb2tlbihfMSkgJiYgIV8xLmVxdWFscygiKiIpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNRQW5kUVZhbHVlKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZEFjY2VwdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWNjZXB0KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiOyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc01lZGlhUmFuZ2Uoc3RyKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNNZWRpYVJhbmdlKHN0ci5zdWJzdHJpbmcoMCwgaWR4KS50cmltKCkpCi0gICAgICAgICAgfHwgIWlzQWNjZXB0UGFyYW1zKHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkudHJpbSgpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNBY2NlcHRQYXJhbXMuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNjZXB0UGFyYW1zKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJpbmcsICI7Iik7Ci0gICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotCi0gICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI9Iik7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAoc3RyLmVxdWFscygicSIpIHx8ICFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChzdHIuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCJxIikpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNRVmFsdWUoc3RyLnN1YnN0cmluZyhpZHggKyAxKSkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoIWlzUGFyYW1ldGVyV2l0aG91dFZhbHVlKHN0cikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXJXaXRob3V0VmFsdWUoc3RyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRQW5kUVZhbHVlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1FBbmRRVmFsdWUoU3RyaW5nIHN0cikKLSAgewotICAgIHN0ciA9IHN0ci50cmltKCk7Ci0gICAgaWYgKCFzdHIudHJpbSgpLnN0YXJ0c1dpdGgoInE9IikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFpc1FWYWx1ZShzdHIuc3Vic3RyaW5nKCJxPSIubGVuZ3RoKCkpKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRVmFsdWUuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUVZhbHVlKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGlkeCA9IHN0cmluZy5pbmRleE9mKCIuIik7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAoISIwIi5lcXVhbHMoc3RyaW5nKSAmJiAhIjEiLmVxdWFscyhzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyRGlnID0gc3RyaW5nLnN1YnN0cmluZyhpZHggKyAxKTsKLSAgICAgIGlmIChzdHJEaWcubGVuZ3RoKCkgPiAzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGlmIChzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCIwIikpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNEaWRnaXQoc3RyRGlnKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCFzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCIxIikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyRGlnLmxlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoc3RyRGlnLmNoYXJBdChpKSAhPSAnMCcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNNZWRpYVJhbmdlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc01lZGlhUmFuZ2UoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChzdHIudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIi8iKTsKLSAgICBpZiAoaWR4ID09IC0xKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoMCwgaWR4KSkgJiYgIXN0ci5zdWJzdHJpbmcoMCwgaWR4KS5lcXVhbHMoIioiKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyLnN1YnN0cmluZyhpZHggKyAxKSkKLSAgICAgICYmICFzdHIuc3Vic3RyaW5nKGlkeCArIDEpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzRW50aXR5VGFnLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRW50aXR5VGFnKFN0cmluZyB2YWx1ZSkKLSAgewotCi0gICAgaW50IGlkeCA9IDA7Ci0gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoIlcvIikpCi0gICAgICBpZHggPSAyOwotICAgIGlmICghaXNRdW90ZWRTdHJpbmcodmFsdWUuc3Vic3RyaW5nKGlkeCkpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0V4cGVjdGF0aW9uLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRXhwZWN0YXRpb24oU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmVxdWFscygiMTAwLWNvbnRpbnVlIikpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXJXaXRob3V0VmFsdWUoc3QubmV4dFRva2VuKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzQ3JlZGVudGlhbHMuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDcmVkZW50aWFscyhTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiICIpOwotICAgIGlmICghaXNUb2tlbihzdC5uZXh0VG9rZW4oKSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHBhcmFtID0gc3QubmV4dFRva2VuKCIsIik7Ci0gICAgICBpZiAoIWlzUGFyYW1ldGVyKHBhcmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNQcm9kdWN0LgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUHJvZHVjdChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpbnQgaWR4ID0gdmFsdWUuaW5kZXhPZigiLyIpOwotICAgIGlmIChpZHggPT0gLTEpCi0gICAgewotICAgICAgaWYgKCFpc1Rva2VuKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCFpc1Rva2VuKHZhbHVlLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICB8fCAhaXNUb2tlbih2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1RyYW5zZmVyQ29kaW5nLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVHJhbnNmZXJDb2RpbmcoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmVxdWFscygiY2h1bmtlZCIpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIjsiKTsKLSAgICAgIGlmICghaXNUb2tlbihzdC5uZXh0VG9rZW4oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBpZiAoIWlzUGFyYW1ldGVyKHN0Lm5leHRUb2tlbigpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNQYXJhbWV0ZXIuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUGFyYW1ldGVyKFN0cmluZyBzdHJpbmcpCi0gIHsKLQotICAgIC8vIGNoZWNrIHBhcmFtZXRlcgkKLSAgICBpbnQgaWR4ID0gc3RyaW5nLmluZGV4T2YoIj0iKTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyaW5nLnN1YnN0cmluZygwLCBpZHgpKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZyBwYXJWYWx1ZSA9IHN0cmluZy5zdWJzdHJpbmcoaWR4ICsgMSk7Ci0gICAgaWYgKCFpc1Rva2VuKHBhclZhbHVlKSAmJiAhaXNRdW90ZWRTdHJpbmcocGFyVmFsdWUpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzUGFyYW1ldGVyV2l0aG91dFZhbHVlLgotICAgKiBAcGFyYW0gc3RyaW5nCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1BhcmFtZXRlcldpdGhvdXRWYWx1ZShTdHJpbmcgc3RyaW5nKQotICB7Ci0KLSAgICAvLyBjaGVjayBwYXJhbWV0ZXIJCi0gICAgaW50IGlkeCA9IHN0cmluZy5pbmRleE9mKCI9Iik7Ci0gICAgaWYgKGlkeCAhPSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIWlzVG9rZW4oc3RyaW5nLnN1YnN0cmluZygwLCBpZHgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgU3RyaW5nIHBhclZhbHVlID0gc3RyaW5nLnN1YnN0cmluZyhpZHggKyAxKTsKLSAgICAgIGlmICghaXNUb2tlbihwYXJWYWx1ZSkgJiYgIWlzUXVvdGVkU3RyaW5nKHBhclZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoIWlzVG9rZW4oc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ByYWdtYURlcmVjdGl2ZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ByYWdtYURlcmVjdGl2ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUuZXF1YWxzKCJuby1jYWNoZSIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGludCBpZHggPSB2YWx1ZS5pbmRleE9mKCI9Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSB2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSk7Ci0gICAgICAgIGlmIChpc1Rva2VuKHZhbHVlLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgICYmIChpc1Rva2VuKHN0cikgfHwgaXNRdW90ZWRTdHJpbmcoc3RyKSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0hUVFBEYXRlLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSFRUUERhdGUoU3RyaW5nIHZhbHVlKQotICB7Ci0KLSAgICBTdHJpbmcgcmZjMTEyM19kYXRlID0gIkVFRSwgZGQgTU1NIHl5eXkgaGg6bW06c3MgJ0dNVCciOwotICAgIFN0cmluZyByZmM4NTBfZGF0ZSA9ICJFRUVFLCBkZC1NTU0teXkgaGg6bW06c3MgJ0dNVCciOwotICAgIFN0cmluZyBhc2N0aW1lX2RhdGUgPSAiRUVFIE1NTSBkIGhoOm1tOnNzIHl5eXkiOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChyZmMxMTIzX2RhdGUsIExvY2FsZS5VUyk7Ci0gICAgICBpZiAoc2RmLnBhcnNlKHZhbHVlKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocmZjODUwX2RhdGUsIExvY2FsZS5VUyk7Ci0gICAgICBpZiAoc2RmLnBhcnNlKHZhbHVlKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoYXNjdGltZV9kYXRlLCBMb2NhbGUuVVMpOwotICAgICAgaWYgKHNkZi5wYXJzZSh2YWx1ZSkgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNVUkkuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNVUkkoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbmV3IFVSTCh2YWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdCIgKyB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzTGFuZ3VhZ2VUYWcuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMYW5ndWFnZVRhZyhTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpbnQgaWR4ID0gdmFsdWUuaW5kZXhPZigiLSIpOwotICAgIGlmIChpZHggPT0gLTEpCi0gICAgewotICAgICAgcmV0dXJuIGlzOEFMUEhBKHZhbHVlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICghaXM4QUxQSEEodmFsdWUuc3Vic3RyaW5nKDAsIGlkeCkpCi0gICAgICAgIHx8ICFpczhBTFBIQSh2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpczhBTFBIQS4KLSAgICogQHBhcmFtIHN0cmluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXM4QUxQSEEoU3RyaW5nIHN0cmluZykKLSAgewotICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiA4IHx8ICFpc0FMUEhBKHN0cmluZykpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzQUxQSEEuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQUxQSEEoU3RyaW5nIHN0cmluZykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgaWYgKCFCYXNpY1J1bGVzLmlzQ0hBUihzdHJpbmcuY2hhckF0KGkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0RpZGdpdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0RpZGdpdChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjaGFyW10gY2hzID0gdmFsdWUudG9DaGFyQXJyYXkoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNocy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoY2hzW2ldIDwgJzAnIHx8IGNoc1tpXSA+ICc5JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc01lZGlhVHlwZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc01lZGlhVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiOyIpOwotICAgIFN0cmluZyBtZWRpYVR5cGUgPSBzdC5uZXh0VG9rZW4oKTsKLQotICAgIGludCBpZHggPSBtZWRpYVR5cGUuaW5kZXhPZigiLyIpOwotICAgIGlmICghaXNUb2tlbihtZWRpYVR5cGUuc3Vic3RyaW5nKDAsIGlkeCkpCi0gICAgICB8fCAhaXNUb2tlbihtZWRpYVR5cGUuc3Vic3RyaW5nKGlkeCArIDEpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXIoc3QubmV4dFRva2VuKCI7IikudHJpbSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRdW90ZWRTdHJpbmcuCi0gICAqIEBwYXJhbSBwYXJWYWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNRdW90ZWRTdHJpbmcoU3RyaW5nIHBhclZhbHVlKQotICB7Ci0gICAgaWYgKEJhc2ljUnVsZXMuZ2V0TGFzdFF1b3RlZFN0cmluZyhwYXJWYWx1ZSwgMCkgIT0gcGFyVmFsdWUubGVuZ3RoKCkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNUb2tlbi4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Rva2VuKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHJldHVybiBCYXNpY1J1bGVzLmlzVG9rZW4odmFsdWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0phdmFFbmNvZGluZy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9KYXZhRW5jb2RpbmcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5MzUzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0phdmFFbmNvZGluZy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotIyMgSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUIAotIyMgUHJvcGVydHkgZmlsZSB1c2VkIHRvIGdldCBKYXZhVk0gc3VwcG9ydGVkIGNoYXJhY3RlciBlbmNvZGluZy4KLQotSVNPODg1OV8xPUlTTzg4NTlfMSAKLUlTTzg4NTktMT1JU084ODU5XzEgCi11dGY4PVVURjggCi11dGYtOD1VVEY4IAotVVRGLTg9VVRGOCAKLXV0ZjE2PVVURi0xNiAKLXV0Zi0xNj1VVEYtMTYgCi1VVEYxNj1VVEYtMTYgCi0KLSMjIAotU2hpZnRfSklTPVdpbmRvd3MtMzFKCi0KLU1TOTMyPVdpbmRvd3MtMzFKCi0jU0pJUz1TaGlmdF9KSVMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01JTUVDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTRiNGI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLS8qKgotICogQSBzZXQgb2YgSFRUUCB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5lZCBieSBOZXR3b3JrIFdvcmtpbmcgR3JvdXAuCi0gKiBodHRwOi8vd3d3LmlldGYub3JnLwotICoKLSAqIEB2ZXJzaW9uIDEuMAotICogQGF1dGhvciBJbHlhIEthbm9uaXJvdiAoa2lvQGlzZy5heG1vci5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FQ29uc3RhbnRzIHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfSUQgPSAiQ29udGVudC1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NSU1FVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Y2QzMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NSU1FVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotCi0vKioKLSAqIFNldCBvZiBIVFRQTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLQotcHVibGljIGZpbmFsIGNsYXNzIE1JTUVVdGlscwotewotCi0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHByZXNlbnQgTUlNRSBoZWFkZXIgaW5mb3JtYXRpb24gYXMgYXR0cmlidXRlLXZhbHVlIHBhaXJzLCAKLSAgICogYmFzZWQgb24gJzonIGFzIGF0dHJpYnV0ZS12YWx1ZSBzZXBhcmF0b3IuCi0gICAqIEBwYXJhbSBtaW1lSGVhZGVyU3RyaW5nIGFuIE1JTUUgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIHNlcGFyYXRvcnMgYXR0cmlidXRlLXZhbHVlIHNlcGFyYXRvciBsaXN0LgotICAgKiBAcmV0dXJuIE1JTUUgaGVhZGVyIGluZm9ybWF0aW9uIGFzIGF0dHJpYnV0ZS12YWx1ZSBwYWlycy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBNSU1FIGhlYWRlciBpbmZvcm1hdGlvbiAKLSAgICogICAgICAgICBhcyBhdHRyaWJ1dGUtdmFsdWUgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRNaW1lSGVhZGVyVG9rZW5zKFN0cmluZyBtaW1lSGVhZGVyU3RyaW5nLCBTdHJpbmcgc2VwYXJhdG9ycykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihtaW1lSGVhZGVyU3RyaW5nLCAiXG5cclxmIik7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIGxpbmUgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICBpbnQgaW5kZXggPSBsaW5lLmluZGV4T2Yoc2VwYXJhdG9ycyk7Ci0gICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgbGluZS5sZW5ndGgoKSAtIDEpCi0gICAgICB7Ci0gICAgICAgIG1hcC5wdXQobGluZS5zdWJzdHJpbmcoMCwgaW5kZXgpLnRvVXBwZXJDYXNlKCksIGxpbmUuc3Vic3RyaW5nKGluZGV4ICsgMSkudHJpbSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gdGFrZSBzdWIgYXR0cmlidXRlIHZhbHVlIGZyb20gTUlNRSBoZWFkZXIKLSAgICogQHBhcmFtIG1pbWVIZWFkZXJTdHJpbmcgYW4gTUlNRSBoZWFkZXIgc3RyaW5nLgotICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUgbmFtZS4KLSAgICogQHBhcmFtIHN1YkF0dHJpYnV0ZU5hbWUgc3ViIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcmV0dXJuIHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBNSU1FIGhlYWRlci4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGdldCBzdWIgYXR0cmlidXRlIHZhbHVlIGZyb20gTUlNRSBoZWFkZXIuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWltZUhlYWRlclN1YkF0dHJpYnV0ZShTdHJpbmcgbWltZUhlYWRlclN0cmluZywgCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSwgU3RyaW5nIHN1YkF0dHJpYnV0ZU5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZQotICAgIFN0cmluZyB2YWx1ZSA9IAotICAgICAgKFN0cmluZykgZ2V0TWltZUhlYWRlclRva2VucyhtaW1lSGVhZGVyU3RyaW5nLCI6IikuZ2V0KGF0dHJpYnV0ZU5hbWUudG9VcHBlckNhc2UoKSk7Ci0gICAgaWYodmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBzZWFyY2ggc3ViIGF0dHJpYnV0ZSB0b2tlbgotICAgICAgaW50IGlkeFEgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3ViQXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKyI9XCIiKTsKLSAgICAgIGludCBpZHggPSB2YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3ViQXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKyI9Iik7Ci0gICAgICAvLyBpZiBhdHRyaWJ1dGUgaXMgcXVvdGVkCi0gICAgICBpZiAoaWR4USAhPSAtMSkgCi0gICAgICB7Ci0gICAgICAgIGlkeFEgKz0gKHN1YkF0dHJpYnV0ZU5hbWUrIj1cIiIpLmxlbmd0aCgpOwotICAgICAgICBpbnQgZUlkeFEgPSB2YWx1ZS5pbmRleE9mKCJcIiIsIGlkeFEpOwotICAgICAgICBpZiAoZUlkeFEgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeFEsIGVJZHhRKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBpcyBub3QgcXVvdGVkCi0gICAgICBlbHNlIGlmIChpZHggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlkeCArPSAoc3ViQXR0cmlidXRlTmFtZSsiPSIpLmxlbmd0aCgpOwotICAgICAgICBpbnQgZUlkeCA9IC0xOwotICAgICAgICAvLyBmaW5kIGVuZCBzcGFjZSBzZXBhcmF0b3IKLSAgICAgICAgaWYgKChlSWR4ID0gdmFsdWUuaW5kZXhPZigiICIsIGlkeCkpICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpZHgsIGVJZHgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGZpbmQgY29tYSBzZXBhcmF0b3IKLSAgICAgICAgZWxzZSBpZiAoKGVJZHggPSB2YWx1ZS5pbmRleE9mKCI7IiwgaWR4KSkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCwgZUlkeCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gdGhpcyBpcyBsYXN0IGF0dHJpYnV0ZQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpZHgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBpZiBhdHRyaWJ1dGUgZG8gbm90IGZvdW5kCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gdGFrZSBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBNSU1FIGhlYWRlcgotICAgKiBAcGFyYW0gbWltZUhlYWRlclN0cmluZyBhbiBNSU1FIGhlYWRlciBzdHJpbmcuCi0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIE1JTUUgaGVhZGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIE1JTUUgaGVhZGVyLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIG1pbWVIZWFkZXJTdHJpbmcsIAotICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gCi0gICAgICAgIChTdHJpbmcpIGdldE1pbWVIZWFkZXJUb2tlbnMobWltZUhlYWRlclN0cmluZywiOiIpLmdldChhdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkpOwotICAgIC8vIGdldCBmaXJzdCB0b2tlbgotICAgIGlmKChhdHRyaWJ1dGVWYWx1ZSAhPSBudWxsKSAmJiAoYXR0cmlidXRlVmFsdWUuaW5kZXhPZigiOyIpICE9IC0xKSkgewotICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS5zdWJzdHJpbmcoMCwgYXR0cmlidXRlVmFsdWUuaW5kZXhPZigiOyIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01lc3NhZ2VMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01lc3NhZ2VMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMjhjYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NZXNzYWdlTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhbmQgbWFpbnRhaW5zIGEgbWVzc2FnZSBsaXN0LgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxpc3QKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSBtZXNzYWdlUmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgTWVzc2FnZUxpc3QuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZU5hbWUgIGEgcmVzb3VyY2UgYnVuZGxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUxpc3QoU3RyaW5nIHJlc291cmNlQnVuZGxlTmFtZSkKLSAgewotICAgIHRoaXMubWVzc2FnZVJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKHJlc291cmNlQnVuZGxlTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZShrZXksIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICAgICAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoCi0gICAgU3RyaW5nIGtleSwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBtZXNzYWdlCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZVJlc291cmNlQnVuZGxlLmdldFN0cmluZyhrZXkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgYW5kIGp1c3QgdXNlIGRlZmF1bHQgbWVzc2FnZQotICAgIH0KLQotICAgIGlmIChtZXNzYWdlRGF0YSAhPSBudWxsKQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YTsKLQotICAgIC8vIFJldHVybiBtZXNzYWdlCi0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnQgYSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSAgICAgIGEgZGVmYXVsdCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHByaW50TWVzc2FnZShrZXksIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICAvLyBQcmludCBtZXNzYWdlCi0gICAgU3lzdGVtLm91dC5wcmludGxuKGdldE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdGF0aWMgZ2V0IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZU5hbWUgIHJlc291cmNlIGJ1bmRsZSBuYW1lLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgcmVzb3VyY2VCdW5kbGVOYW1lLAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgUmVzb3VyY2VCdW5kbGUgbWVzc2FnZVJlc291cmNlQnVuZGxlID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCByZXNvdXJjZSBidW5kbGUKLSAgICAgIG1lc3NhZ2VSZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShyZXNvdXJjZUJ1bmRsZU5hbWUpOwotCi0gICAgICAvLyBHZXQgbWVzc2FnZQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VSZXNvdXJjZUJ1bmRsZS5nZXRTdHJpbmcoa2V5KTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWdub3JlIGFuZCBqdXN0IHVzZSBkZWZhdWx0IG1lc3NhZ2UKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZURhdGEgIT0gbnVsbCkKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGE7Ci0KLSAgICBpZiAoIW1lc3NhZ2UuZW5kc1dpdGgoIi4iKSkKLSAgICAgIG1lc3NhZ2UgKz0gIi4iOwotCi0gICAgLy8gUmV0dXJuIG1lc3NhZ2UKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBtZXNzYWdlLgotICAgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGVOYW1lICByZXNvdXJjZSBidW5kbGUgbmFtZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICAgICAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyByZXNvdXJjZUJ1bmRsZU5hbWUsCi0gICAgU3RyaW5nIGtleSwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgLy8gUHJpbnQgbWVzc2FnZQotICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgIGdldE1lc3NhZ2UocmVzb3VyY2VCdW5kbGVOYW1lLCBrZXksIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTnVsbFV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTnVsbFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3Y2NhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL051bGxVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGUgdXRpbGl0eSBjbGFzcyB0byBhdXRvbWF0ZSBudWxsIGNoZWNraW5nLgotICogCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBOdWxsVXRpbAotewotICAvKioKLSAgICogVGhlIG1ldGhvZCBjaGVja3Mgb2JqZWN0cyBvbiBleGlzdGVuY2UgYW5kIGNvbXBhcmUgd2l0aCA8Y29kZT5lcXVhbHM8L2NvZGU+IG1ldGhvZC4KLSAgICogQHBhcmFtIG8xIGZpcnN0IG9iamVjdC4KLSAgICogQHBhcmFtIG8yIHNlY29uZCBvYmplY3QuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBmaXJzdCBvYmplY3QgaXMgZXF1YWwgdG8gdGhlIHNlY29uZCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvMSwgT2JqZWN0IG8yKQotICB7Ci0gICAgcmV0dXJuICgobzEgPT0gbnVsbCAmJiBvMiA9PSBudWxsKSB8fCAobzEgIT0gbnVsbCAmJiBvMS5lcXVhbHMobzIpKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBjaGVja3Mgb2JqZWN0IG9uIGV4aXN0ZW5jZSBhbmQgcmV0dXJucyBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdpdGggPGNvZGU+dG9TdHJpbmcoKTwvY29kZT4gbWV0aG9kLgotICAgKiBAcGFyYW0gbyBzb3VyY2Ugb2JqZWN0LgotICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyhPYmplY3QgbykKLSAgewotICAgIHJldHVybiAobyA9PSBudWxsKSA/IG51bGwgOiBvLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvT3BlcmF0aW9uU2lnbmF0dXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL09wZXJhdGlvblNpZ25hdHVyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzlhM2YyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvT3BlcmF0aW9uU2lnbmF0dXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3ODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIHVuaXF1ZSBzaWduYXR1cmUgb2Ygb3BlcmF0aW9uLgotICogCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBPcGVyYXRpb25TaWduYXR1cmUKLXsKLSAgLy8gdGhlIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGlzIHJlcHJlc2VudGVkIGFzIGRvY3VtZW50IHN0eWxlCi0gIC8vIHZpY2UgdmVyc2EgaXMgbm90IGdlbmVyYWxseSB0cnVlCi0gIHByaXZhdGUgYm9vbGVhbiBpc0RvY3VtZW50U3R5bGUgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNGYXVsdCA9IGZhbHNlOwotCi0gIHByb3RlY3RlZCBMaXN0IHNpZ25hdHVyZSA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gIHByaXZhdGUgRWxlbWVudCBmaXJzdEJvZHkgPSBudWxsOwotCi0gIC8qKgotICAgKiBDbGFzcyBvcGVyYXRlcyBhcyBjb250YWluZXIgZm9yIG1hdGNoZWQgb3BlcmF0aW9uLgotICAqIEBhdXRob3IgS3VsaWsKLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgT3BlcmF0aW9uTWF0Y2gKLSAgewotICAgIGZpbmFsIHByaXZhdGUgU3RyaW5nIHN0eWxlOwotICAgIGZpbmFsIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb247Ci0gICAgZmluYWwgcHJpdmF0ZSBMaXN0IHNpZ25hdHVyZTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yLgotICAgICAqIEBwYXJhbSBzdHlsZSBvcGVyYXRpb24gc3R5bGUuCi0gICAgICogQHBhcmFtIHNpZ25hdHVyZSBhIHNpZ25hdHVyZS4KLSAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIGEgYmluZGluZyBvcGVyYXRpb24uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIE9wZXJhdGlvbk1hdGNoKAotICAgICAgU3RyaW5nIHN0eWxlLAotICAgICAgTGlzdCBzaWduYXR1cmUsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgICB7Ci0gICAgICB0aGlzLnN0eWxlID0gc3R5bGU7Ci0gICAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTsKLSAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBHZXRzIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKiBAcmV0dXJuIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE9wZXJhdGlvblN0eWxlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc3R5bGU7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEdldHMgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiBvYmplY3QuCi0gICAgICogQHJldHVybiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb24oKQotICAgIHsKLSAgICAgIHJldHVybiBvcGVyYXRpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyBvcGVyYXRpb24gc2lnbmF0dXJlIGFzIGxpc3QuCi0gICAgICogQHJldHVybiBvcGVyYXRpb24gc2lnbmF0dXJlIGFzIGxpc3QuCi0gICAgICovCi0gICAgcHVibGljIExpc3QgZ2V0U2lnbmF0dXJlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2lnbmF0dXJlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgY2xhc3Mgc2VhcmNoZXMgQmluZGluZ09wZXJhdGlvbiBieSB0aGUgZ2l2ZW4gT3BlcmF0aW9uU2lnYm5hdHVyZS4gCi0gICogQGF1dGhvciBLdWxpawotICAgKi8KLSAgcHVibGljIGZpbmFsIGNsYXNzIFZpc2l0b3IgaW1wbGVtZW50cyBXU0RMVmlzaXRvcgotICB7Ci0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBhcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlNlcnZpY2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoU2VydmljZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlR5cGVzLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFR5cGVzIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLklucHV0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KElucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3V0cHV0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KE91dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkJpbmRpbmdJbnB1dCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdJbnB1dCBvYmosCi0gICAgICBPYmplY3QgcGFyZW50LAotICAgICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ091dHB1dCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdPdXRwdXQgb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nRmF1bHQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgICBCaW5kaW5nRmF1bHQgb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoSW1wb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEltcG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRWxlbWVudCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KE1lc3NhZ2UsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoUG9ydFR5cGUsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRGVmaW5pdGlvbiwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpIAotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChFeHRlbnNpYmlsaXR5RWxlbWVudCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG9iaiwKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykgCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBIZWFkZXIsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEhlYWRlckZhdWx0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUEhlYWRlckZhdWx0IG9iaiwKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykgCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHJlcXVpcmVkU3R5bGUgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nIHNvYXBBY3Rpb24gPSBudWxsOwotICAgIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotICAgIHByaXZhdGUgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlzU09BUEFjdGlvblJlcXVpcmVkID0gZmFsc2U7Ci0KLSAgICAvKioKLSAgICAqIENvbnN0cnVjdG9yLgotICAgICovCi0gICAgcHVibGljIFZpc2l0b3IoKQotICAgIHsKLSAgICAgIHN1cGVyKCk7Ci0gICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gcmVxdWlyZWRTdHlsZSByZXF1aXJlZCBzdHlsZS4KLSAgICAgKiBAcGFyYW0gcmVnaXN0cnkgdHlwZXMgcmVnaXN0cnkuCi0gICAgICovCi0gICAgcHVibGljIFZpc2l0b3IoU3RyaW5nIHJlcXVpcmVkU3R5bGUsIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkpCi0gICAgewotICAgICAgdGhpcy5yZXF1aXJlZFN0eWxlID0gcmVxdWlyZWRTdHlsZTsKLSAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0aG9kIHJldHVybnMgbWF0Y2hlZCBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICAgKiBAcmV0dXJuIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRNYXRjaGVkT3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICByZXR1cm4gb3BlcmF0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRob2Qgc2V0cyB1cCByZXF1aXJlZCBvcGVyYXRpb24gdG8gYmUgZm91bmQuCi0gICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBpcyBycGMgYW5kIGRvY3VtZW50LgotICAgICAqIEBwYXJhbSByZXF1aXJlZFN0eWxlIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZFN0eWxlKFN0cmluZyByZXF1aXJlZFN0eWxlKQotICAgIHsKLSAgICAgIHRoaXMucmVxdWlyZWRTdHlsZSA9IHJlcXVpcmVkU3R5bGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBTT0FQIEFjdGlvbiBiZSBpbmNsdWRlZCBpbnRvIG9wZXJhdGlvbi4KLSAgICAgKiBzaWduYXR1cmUuCi0gICAgICogQHJldHVybiB0cnVlIGlmIFNPQVAgQWN0aW9uIGlzZCByZXF1aXJlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NPQVBBY3Rpb25SZXF1aXJlZCgpCi0gICAgewotICAgICAgcmV0dXJuIGlzU09BUEFjdGlvblJlcXVpcmVkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgU09BUCBhY3Rpb24gdG8gYmUgaW5jbHVkZWQgaW50byBzaWduYXR1cmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U09BUEFjdGlvblJlcXVpcmVkKCkKLSAgICB7Ci0gICAgICBpc1NPQVBBY3Rpb25SZXF1aXJlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgU3RyaW5nIHN0eWxlID0KLSAgICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgICBPYmplY3QgcGFyZW50LAotICAgICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICAgIHNvYXBBY3Rpb24gPSBudWxsOwotICAgICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgICAgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotICAgICAgaWYgKCFyZXF1aXJlZFN0eWxlLmVxdWFscyhzdHlsZSkpCi0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgZWxzZQotICAgICAgICAvL2lmIChpc1NPQVBBY3Rpb25SZXF1aXJlZCkKLSAgICAgICAgc29hcEFjdGlvbiA9IG9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAvLyBhc3NlcnQgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICBpZiAoYm9wLmdldE9wZXJhdGlvbigpID09IG51bGwKLSAgICAgICAgfHwgYm9wLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkgPT0gbnVsbAotICAgICAgICB8fCBib3AuZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBNZXNzYWdlIG1zZyA9IGJvcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIExpc3QgcGFydHMgPQotICAgICAgICBXU0RMVXRpbC5nZXRQYXJ0cyhib3AuZ2V0T3BlcmF0aW9uKCksIG1zZywgYm9keSwgcmVxdWlyZWRTdHlsZSk7Ci0KLSAgICAgIFFOYW1lIGFkZGl0aW9uYWxOYW1lID0gbnVsbDsKLSAgICAgIC8vIGlmIG9wZXJhdGlvbiBpcyBycGMsIGFkZCB0byBwYXJ0cyBxbmFtZSBxaXRoIGZ1bmN0aW9uIG5hbWUKLSAgICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhyZXF1aXJlZFN0eWxlKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZm91bmQgb3V0IHRhcmdldCBuYW1lc3BhY2UKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCB8fCBuYW1lc3BhY2UubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAvLyAhISBBVFRFTlRJT04KLSAgICAgICAgICAvLyBuYW1lc3BhY2Ugc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHNlcnZpY2UgdGFyZ2V0IG5hbWVhcGNlICAgICAgICAgICAgCi0gICAgICAgICAgbmFtZXNwYWNlID0gY3R4LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICAgIC8vIGluc2VydCBvcGVyYXRpb24gbmFtZSBhcyBmaXJzdCBzaWduYXR1cmUgcGFydAotICAgICAgICBhZGRpdGlvbmFsTmFtZSA9Ci0gICAgICAgICAgbmV3IFFOYW1lKG5hbWVzcGFjZSwgY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXROYW1lKCkpOwotICAgICAgfQotCi0gICAgICBPcGVyYXRpb25TaWduYXR1cmUgb3AgPQotICAgICAgICBuZXcgT3BlcmF0aW9uU2lnbmF0dXJlKHBhcnRzLCBudWxsLCByZWdpc3RyeSwgZmFsc2UpOwotCi0gICAgICBpZiAoYWRkaXRpb25hbE5hbWUgIT0gbnVsbCkKLSAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIGFkZGl0aW9uYWxOYW1lKTsKLSAgICAgIC8vaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkKQotICAgICAgLy9pZiAoc29hcEFjdGlvbiAhPSBudWxsKQotICAgICAgaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkICYmIHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotICAgICAgaWYgKG9wLmdldFNpZ25hdHVyZSgpLmVxdWFscyhzaWduYXR1cmUpKQotICAgICAgewotICAgICAgICAvLyByZXF1aXJlZCBvcGVyYXRpb24gaXMgZm91bmQKLSAgICAgICAgb3BlcmF0aW9uID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShwYXJ0cywgbnVsbCwgcmVnaXN0cnksIHRydWUpOwotICAgICAgICBpZiAoYWRkaXRpb25hbE5hbWUgIT0gbnVsbCkKLSAgICAgICAgICBvcC5nZXRTaWduYXR1cmUoKS5hZGQoMCwgYWRkaXRpb25hbE5hbWUpOwotCi0gICAgICAgIC8vaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkKQotICAgICAgICAvL2lmIChzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICAgIGlmIChpc1NPQVBBY3Rpb25SZXF1aXJlZCAmJiBzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotCi0gICAgICAgIGlmIChvcC5nZXRTaWduYXR1cmUoKS5lcXVhbHMoc2lnbmF0dXJlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHJlcXVpcmVkIG9wZXJhdGlvbiBpcyBmb3VuZAotICAgICAgICAgIG9wZXJhdGlvbiA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgT3BlcmF0aW9uU2lnbmF0dXJlIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBkb2MgYSBEb2N1bWVudCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uU2lnbmF0dXJlKERvY3VtZW50IGRvYykKLSAgewotICAgIEVsZW1lbnQgYm9keSA9Ci0gICAgICBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KAotICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgIFdTSVRhZy5FTEVNX1NPQVBfQk9EWSk7Ci0gICAgcHJvY2Vzc1BhcnRzKGJvZHksIGZhbHNlKTsKLSAgICBpc0RvY3VtZW50U3R5bGUgfD0gKHNpZ25hdHVyZS5zaXplKCkgPiAxKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBPcGVyYXRpb25TSWduYXR1cmUgZm9yIAotICAgKiBsaXN0IG9mIDxjb2RlPlBhcnQ8L2NvZGU+IG9iamVjdHMgYW5kIGdpdmVuIFdTREwgZG9jdW1lbnQgd2l0aGluIHRoZXNlCi0gICAqIHBhcnRzIGFyZSBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIHBhcnRzIGEgbGlzdCBvZiBQYXJ0IG9iamVjdHMuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgYSBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVnaXN0cnkgYSB0eXBlcyByZWdpc3RyeS4KLSAgICogQHBhcmFtIHBhcnRpYWwgYSBwYXJ0aWFsIHN0YXR1cy4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgTGlzdCBwYXJ0cywKLSAgICBEb2N1bWVudCB3c2RsRG9jdW1lbnQsCi0gICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSwKLSAgICBib29sZWFuIHBhcnRpYWwpCi0gIHsKLSAgICBpZiAocGFydHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSAocGFydGlhbCkgPyBwYXJ0LmdldE5hbWUoKSA6IG51bGw7Ci0gICAgICAgIFFOYW1lIHR5cGVOYW1lID0gcGFydC5nZXRUeXBlTmFtZSgpOwotICAgICAgICBRTmFtZSBlbGVtZW50TmFtZSA9IHBhcnQuZ2V0RWxlbWVudE5hbWUoKTsKLQotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gIiI7Ci0KLSAgICAgICAgLy8gSWYgdHlwZSBuYW1lIGlzIG5vdCBudWxsLCB0aGVuIGEgdHlwZSBlbGVtZW50IHdhcyB1c2VkIHNvIGl0IHNob3VsZCBiZSBhbiBSUEMgc3R5bGUgc2lnbmF0dXJlIAotICAgICAgICBpZiAodHlwZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIFBhcnQgd3JhcHBlcnMgZG8gbm90IGhhdmUgbmFtZXNwYWNlcyAKLSAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLQotICAgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIGxvY2FsTmFtZSA9IHR5cGVOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgZWxlbWVudCBuYW1lIGlzIG5vdCBudWxsLCB0aGVuIGl0IHNob3VsZCBiZSBhIGRvY3VtZW50IHN0eWxlIHNpZ25hdHVyZQotICAgICAgICBlbHNlIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZXNwYWNlID0gZWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgICBpZiAobG9jYWxOYW1lID09IG51bGwpCi0gICAgICAgICAgICBsb2NhbE5hbWUgPSBlbGVtZW50TmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNpZ25hdHVyZS5hZGQobmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaXNDcmVhdGVkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJlY3JlYXRlcyBPcGVyYXRpb25TaWduYXR1cmUgd2l0aCBhc3N1bXB0aW9uIHRoYXQgb3BlcmF0aW9uIGlzCi0gICAqIFJQQy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVJQQ1NpZ25hdHVyZSgpCi0gIHsKLSAgICBpc0NyZWF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoZmlyc3RCb2R5ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgcHJvY2Vzc1BhcnRzKGZpcnN0Qm9keSwgdHJ1ZSk7Ci0gICAgaXNEb2N1bWVudFN0eWxlID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBXU0RMIHBhcnRzIGFuZCBjcmVhdGVzIG9wZXJhdGlvbiBzaWduYXR1cmUuCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzUGFydHMoTm9kZSBwYXJlbnQsIGJvb2xlYW4gcHJvY2Vzc1dyYXBwZXIpCi0gIHsKLSAgICBpZiAocGFyZW50ICE9IG51bGwpCi0gICAgewotICAgICAgTm9kZSBuID0gcGFyZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotICAgICAgLy8gdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgZmlyc3QgdGFnIGlzIHByb2Nlc3NlZAotICAgICAgYm9vbGVhbiBpc0ZpcnN0ID0gdHJ1ZTsKLSAgICAgIC8vIGl0ZXJhdGUgYWxsIGJvZGllcwotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpc0ZpcnN0ICYmIGZpcnN0Qm9keSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGZpcnN0Qm9keSA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgLy8gY2hlY2sgc29hcGVudjpmYXVsdAotICAgICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaXNGYXVsdCA9IHRydWU7Ci0gICAgICAgICAgICAgIGlzQ3JlYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG4uZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IG4uZ2V0TG9jYWxOYW1lKCk7Ci0KLSAgICAgICAgICAvKkkgaGF2ZSBubyBpZGVhIHdoeSB0aGlzIGNvZGUgaXMgaW4gaGVyZSBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSBhdCBhbGwsIHNvIEkgYW0gY29tbWVudGluZyBpdCBvdXQKLSAgICAgICAgICAvLyB0cnkgdG8gZ2V0IHhzaTp0YWcKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBXU0lUYWcuQVRUUl9YU0lfVFlQRSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgUlBDIHN0eWxlIGRvZXMgbm90IHVzZSB4c2k6dHlwZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgaXNEb2N1bWVudFN0eWxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgQXR0ciB4c2lUeXBlID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBXU0lUYWcuQVRUUl9YU0lfVFlQRSk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBTdHJpbmcgeHNpVmFsdWUgPSB4c2lUeXBlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgICAgICBpbnQgaSA9IHhzaVZhbHVlLmluZGV4T2YoJzonKTsKLSAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgeHNpVmFsdWUuc3Vic3RyaW5nKDAsIGkpKTsKLSAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSA9IHhzaVZhbHVlLnN1YnN0cmluZyhpKzEpOwotICAgICAgICAgICAgICB9IAotICAgICAgICAgIH0KLSAgICAgICAgICAqLwotCi0gICAgICAgICAgLy8gSWYgdGhpcyBpcyBycGMtbGl0ZXJhbCBhbmQgcHJvY2Vzc2luZyBhIHBhcnQgKG5vdCB0aGUgd3JhcHBlciksIHRoZW4gdGhlIHBhcnQgc2hvdWxkIG5vdCBoYXZlIGEgbmFtZXNwYWNlCi0gICAgICAgICAgLy8gQW5kIGlmIGl0IGRvZXMsIHRoZW4gb25lIG9mIHRoZSB0ZXN0IGFzc2VydGlvbnMgd2lsbCBkZXRlY3QgaXQKLSAgICAgICAgICBpZiAoIWlzRG9jdW1lbnRTdHlsZSAmJiBwcm9jZXNzV3JhcHBlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRTdHlsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9FbGVtZW50IGZpcnN0Q2hpbGQgID0gbnVsbDsKLSAgICAgICAgICAgICAgTm9kZSBpdCA9IG4uZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICB3aGlsZSAoaXQgIT0gbnVsbCAmJiAhKGl0IGluc3RhbmNlb2YgRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgaXQgPSBpdC5nZXROZXh0U2libGluZygpOwotICAgICAgICAgICAgICBpZiAoaXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBpdC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBub3JtYWxpemUgbmFtZXNwYWNlcy4gQWxsIGVtcHR5IG5hbWVzcGFjZXMgLT4gbnVsbCAKLSAgICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgJiYgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgICAgICAgLy8gcHV0IHBhcnQgaW50byBzaWduYXR1cmUKLSAgICAgICAgICBzaWduYXR1cmUuYWRkKG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsTmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlzQ3JlYXRlZCA9IGZhbHNlOyAvLyBub3QgZm91bmQgPwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3BlcmF0aW9uIGhhcyBkb2N1bWVudCBzdHlsZSBvciBSUEMuIAotICAgKiBAcmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIGhhcyBkb2N1bWVudCBzdHlsZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRTdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gaXNEb2N1bWVudFN0eWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIFdTREwgZmF1bHQgcGFydHMgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gc2lnbmF0dXJlIG9yCi0gICAqIG5vdC4KLSAgICogQHJldHVybiB0cnVlIGlmIFdTREwgZmF1bHQgcGFydHMgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gc2lnbmF0dXJlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gaXNGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgdGhhdCBvcGVyYXRpb24gc2lnbmF0dXJlIHdhcyBjcmVhdGVkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIHNpZ25hdHVyZSB3YXMgY3JlYXRlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gaXNDcmVhdGVkOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgb3BlcmF0aW9uIHNpZ25hdHVyZSBjcmVhdGVkIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gb3BlcmF0aW9uIHNpZ25hdHVyZSBjcmVhdGVkIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTaWduYXR1cmUoKQotICB7Ci0gICAgcmV0dXJuIHNpZ25hdHVyZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjaGFzaENvZGUoKQotICAgKi8KLSAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gIHsKLSAgICByZXR1cm4gc2lnbmF0dXJlLmhhc2hDb2RlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIE9wZXJhdGlvblNpZ25hdHVyZSkKLSAgICAgIHJldHVybiBzaWduYXR1cmUuZXF1YWxzKCgoT3BlcmF0aW9uU2lnbmF0dXJlKSBvKS5nZXRTaWduYXR1cmUoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgbWF0Y2hlcyBvcGVyYXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIFNPQVAgbWVzc2FnZSByZXF1ZXN0LAotICAgKiBXU0RMIGJpbmRpbmcsIGFuZCBzb2FwQWN0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0TWVzc2FnZSBhbiBTT0FQIG1lc3NhZ2UgcmVxdWVzdC4KLSAgICogQHBhcmFtIHNvYXBBY3Rpb24gYSBzb2FwIGFjdGlvbi4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBXU0RMIGJpbmRpbmcuCi0gICAqIEBwYXJhbSByZWdpc3RyeSBhIHR5cGVzIHJlZ2lzdHJ5LgotICAgKiBAcmV0dXJuIE9wZXJhdGlvbk1hdGNoIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgT3BlcmF0aW9uTWF0Y2ggbWF0Y2hPcGVyYXRpb24oCi0gICAgRG9jdW1lbnQgaW5wdXRNZXNzYWdlLAotICAgIFN0cmluZyBzb2FwQWN0aW9uLAotICAgIEJpbmRpbmcgYmluZGluZywKLSAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gICAgcmV0dXJuIG1hdGNoT3BlcmF0aW9uKGlucHV0TWVzc2FnZSwgc29hcEFjdGlvbiwgYmluZGluZywgcmVnaXN0cnksIHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICAgICogVGhlIG1ldGhvZCBtYXRjaGVzIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gU09BUCBtZXNzYWdlIHJlcXVlc3QsCi0gICAgICogV1NETCBiaW5kaW5nLCBhbmQgc29hcEFjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gaW5wdXRNZXNzYWdlIFNPQVAgbWVzc2FnZSByZXF1ZXN0LgotICAgICAqIEBwYXJhbSBzb2FwQWN0aW9uIGEgc29hcCBhY3Rpb24uCi0gICAgICogQHBhcmFtIGJpbmRpbmcgYSBXU0RMIGJpbmRpbmcuCi0gICAgICogQHBhcmFtIHJlZ2lzdHJ5IGEgdHlwZXMgcmVnaXN0cnkuCi0gICAgICogQHBhcmFtIHNvYXBBY3Rpb25SZXF1aXJlZCBtdXN0IHByb2Nlc3MgdGhlIHNvYXBBY3Rpb24gdmFsdWUgZXZlbiBpZiBpdCBpcyBudWxsIAotICAgICAqIEByZXR1cm4gT3BlcmF0aW9uTWF0Y2ggb2JqZWN0LgotICAgICAqLwotICBwdWJsaWMgc3RhdGljIE9wZXJhdGlvbk1hdGNoIG1hdGNoT3BlcmF0aW9uKAotICAgIERvY3VtZW50IGlucHV0TWVzc2FnZSwKLSAgICBTdHJpbmcgc29hcEFjdGlvbiwKLSAgICBCaW5kaW5nIGJpbmRpbmcsCi0gICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSwKLSAgICBib29sZWFuIHNvYXBBY3Rpb25SZXF1aXJlZCkKLSAgewotICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgIE9wZXJhdGlvblNpZ25hdHVyZSBzaWduYXR1cmUgPSBuZXcgT3BlcmF0aW9uU2lnbmF0dXJlKGlucHV0TWVzc2FnZSk7Ci0gICAgaWYgKCFzaWduYXR1cmUuaXNDcmVhdGVkKCkpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIC8vIGZpcnN0IG9mIGFsbCBsb29raW5nIGZvciBkb2N1bWVudCBzdHlsZQotICAgIC8vIGJlY2F1c2UgcnBjIHN0eWxlIGlzIHN1YnNldCBvZiBkb2N1bWVudCBzdHlsZSAgCi0gICAgT3BlcmF0aW9uU2lnbmF0dXJlLlZpc2l0b3IgcmVzb2x2ZXIgPQotICAgICAgc2lnbmF0dXJlLm5ldyBWaXNpdG9yKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsIHJlZ2lzdHJ5KTsKLQotICAgIC8vIG5vcm1hbGl6ZSBTT0FQQWN0aW9uCi0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbAotICAgICAgJiYgc29hcEFjdGlvbi5sZW5ndGgoKSA+IDEKLSAgICAgICYmIHNvYXBBY3Rpb24uY2hhckF0KDApID09ICciJwotICAgICAgJiYgc29hcEFjdGlvbi5jaGFyQXQoc29hcEFjdGlvbi5sZW5ndGgoKSAtIDEpID09ICciJykKLSAgICAgIHNvYXBBY3Rpb24gPSBzb2FwQWN0aW9uLnN1YnN0cmluZygxLCBzb2FwQWN0aW9uLmxlbmd0aCgpIC0gMSk7Ci0KLSAgICAvLyAgICAgIGlmIHNvYXAgYWN0aW9uIFVSSSBwcm9jZXNzaW5nIHJlcXVpcmVkCi0gICAgLy8gaWYgc29hcCBhY3Rpb24gVVJJIHByb2Nlc3NpbmcgcmVxdWlyZWQgCi0gICAgLy8gYW5hbHl6ZSBTT0FQQWN0aW9uIGFmdGVyIHBhcnRzIGJlaW5nIHByb2Nlc3NlZAotICAgIC8vIHB1dCBTT0FQQWN0aW9uIGludG8gc2lnbmF0dXJlCi0gICAgLy9pZiAoc29hcEFjdGlvbiAhPSBudWxsICYmIHNvYXBBY3Rpb24ubGVuZ3RoKCkgPiAwKSB7Ci0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzaWduYXR1cmUuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChzb2FwQWN0aW9uUmVxdWlyZWQpCi0gICAgICByZXNvbHZlci5zZXRTT0FQQWN0aW9uUmVxdWlyZWQoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHJlc29sdmVyKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcihyZXNvbHZlcik7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoYmluZGluZyk7Ci0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHJlc29sdmVyLmdldE1hdGNoZWRPcGVyYXRpb24oKTsKLSAgICBpZiAob3BlcmF0aW9uID09IG51bGwgJiYgIXNpZ25hdHVyZS5pc0RvY3VtZW50U3R5bGUoKSkKLSAgICB7Ci0gICAgICByZXNvbHZlci5zZXRSZXF1aXJlZFN0eWxlKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpOwotICAgICAgc2lnbmF0dXJlLmNyZWF0ZVJQQ1NpZ25hdHVyZSgpOwotICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKGJpbmRpbmcpOwotICAgICAgb3BlcmF0aW9uID0gcmVzb2x2ZXIuZ2V0TWF0Y2hlZE9wZXJhdGlvbigpOwotICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IE9wZXJhdGlvbk1hdGNoKAotICAgICAgcmVzb2x2ZXIucmVxdWlyZWRTdHlsZSwKLSAgICAgIHNpZ25hdHVyZS5nZXRTaWduYXR1cmUoKSwKLSAgICAgIHJlc29sdmVyLmdldE1hdGNoZWRPcGVyYXRpb24oKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvUGFpci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9QYWlyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MWExOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9QYWlyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyBwYWlyIG9mIHZhbHVlcy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGFpcgotewotICBmaW5hbCBwcml2YXRlIE9iamVjdCBmaXJzdDsKLSAgZmluYWwgcHJpdmF0ZSBPYmplY3Qgc2Vjb25kOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZpcnN0IG9iamVjdAotICAgKiBAcGFyYW0gc2Vjb25kIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBQYWlyKE9iamVjdCBmaXJzdCwgT2JqZWN0IHNlY29uZCkKLSAgewotICAgIHRoaXMuZmlyc3QgPSBmaXJzdDsKLSAgICB0aGlzLnNlY29uZCA9IHNlY29uZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGZpcnN0IG9iamVjdC4KLSAgICogQHJldHVybiBPYmplY3QKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0Rmlyc3QoKQotICB7Ci0gICAgcmV0dXJuIGZpcnN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgc2Vjb25kIG9iamVjdC4KLSAgICogQHJldHVybiBPYmplY3QKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0U2Vjb25kKCkKLSAgewotICAgIHJldHVybiBzZWNvbmQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyA9PSBudWxsIHx8ICEobyBpbnN0YW5jZW9mIFBhaXIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBhaXIgcCA9IChQYWlyKSBvOwotICAgIHJldHVybiAoCi0gICAgICBOdWxsVXRpbC5lcXVhbHMocC5nZXRGaXJzdCgpLCBmaXJzdCkKLSAgICAgICAgJiYgTnVsbFV0aWwuZXF1YWxzKHAuZ2V0U2Vjb25kKCksIHNlY29uZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNoYXNoQ29kZSgpCi0gICAqLwotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgewotICAgIGludCBjb2RlID0gMDsKLSAgICBpZiAoZmlyc3QgIT0gbnVsbCkKLSAgICAgIGNvZGUgKz0gZmlyc3QuaGFzaENvZGUoKTsKLSAgICBpZiAoc2Vjb25kICE9IG51bGwpCi0gICAgICBjb2RlICs9IHNlY29uZC5oYXNoQ29kZSgpOwotICAgIHJldHVybiBjb2RlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1NldENvb2tpZTJWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU2V0Q29va2llMlZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTgyZTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU2V0Q29va2llMlZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2hlY2tzIHRoZSBjb29raWVzIGNvbmZvcm0gdG8gUkZDMjk2NS4KLSAqIAotICogQGF1dGhvciBCYWx0YWsKLSAqLwotcHVibGljIGNsYXNzIFNldENvb2tpZTJWYWxpZGF0b3IKLXsKLQotICBwcml2YXRlIFZlY3RvciBjb21tZW50VmVjdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgY29tbWVudFVSTFZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGRvbWFpblZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIG1heF9BZ2VWZWN0ID0gbmV3IFZlY3RvcigpOwotICBwcml2YXRlIFZlY3RvciBwYXRoVmVjdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgcG9ydFZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIHZlcnNpb25WZWN0ID0gbmV3IFZlY3RvcigpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBwYXRoID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCByZXNldEZsYWdzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlc2V0UGF0aCgpCi0gIHsKLSAgICBwYXRoID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIHN0cmluZyBzYXRpc2Z5IHRoZSAiU2V0LUNvb2tpZTIiIGhlYWRlciB2YWx1ZS4KLSAgICogQHBhcmFtIHN0ciBTdHJpbmcgCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNTZXRDb29raWUyKFN0cmluZyBzdHIpCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICBpbnQgbmV3SW5kZXggPSAwOwotICAgICAgd2hpbGUgKHRydWUpCi0gICAgICB7Ci0gICAgICAgIG5ld0luZGV4ID0gZ2V0TGFzdENvb2tpZShzdHIsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgIC8vIHNraXAgc3BhY2VzCi0gICAgICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0aCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RDb29raWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RDb29raWUoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLQotICAgIHJlc2V0UGF0aCgpOwotCi0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICAvLyBmaW5kIHRva2VuCi0gICAgaW50IG5ld0luZGV4ID0gQmFzaWNSdWxlcy5nZXRMYXN0VG9rZW4oc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCA9IG5ld0luZGV4OwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIGlmIG5vdCAnPScgLSBlcnJvcgotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnPScpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgLy8gZ2V0IHZhbHVlCi0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpbmRleCA9IG5ld0luZGV4OwotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJzsnKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICBpbmRleCsrOwotICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgIGluZGV4ID0gc2tpcFNwYWNlcyhzdHIsIGluZGV4KTsKLQotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RTZXRDb29raWVBdihzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRMYXN0VmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RWYWx1ZShTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotCi0gICAgaW50IGluZGV4ID0gQmFzaWNSdWxlcy5nZXRMYXN0VG9rZW4oc3RyLCBzdGFydEluZGV4KTsKLSAgICBpZiAoaW5kZXggIT0gc3RhcnRJbmRleCkKLSAgICAgIHJldHVybiBpbmRleDsKLSAgICBpbmRleCA9IEJhc2ljUnVsZXMuZ2V0TGFzdFF1b3RlZFN0cmluZyhzdHIsIHN0YXJ0SW5kZXgpOwotICAgIGlmIChpbmRleCAhPSBzdGFydEluZGV4KQotICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RTZXRDb29raWVBdi4KLSAgICogQHBhcmFtIHN0cgotICAgKiBAcGFyYW0gc3RhcnRJbmRleAotICAgKiBAcmV0dXJuIGludAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0TGFzdFNldENvb2tpZUF2KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoIkNvbW1lbnQ9IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJDb21tZW50PSIubGVuZ3RoKCk7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RWYWx1ZShzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIGNvbW1lbnRWZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIkNvbW1lbnRVUkw9IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJDb21tZW50VVJMPSIubGVuZ3RoKCk7Ci0KLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgbmV3SW5kZXggPSBzdHIuaW5kZXhPZignXCInLCBpbmRleCArIDEpOwotICAgICAgaWYgKG5ld0luZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBuZXcgVVJMKHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCBuZXdJbmRleCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgfQotICAgICAgLy8gZGVidWcgLT4KLSAgICAgIFN0cmluZyBxcXEgPSBnZXRWYWx1ZShzdHIsIGluZGV4ICsgMSwgbmV3SW5kZXgpOwotICAgICAgY29tbWVudFVSTFZlY3QuYWRkKHFxcSk7Ci0gICAgICAvLyBkZWJ1ZyA8LQotICAgICAgbmV3SW5kZXgrKzsKLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIkRpc2NhcmQiLCBpbmRleCkpCi0gICAgewotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXggKyAiRGlzY2FyZCIubGVuZ3RoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJEb21haW49IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJEb21haW49Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIGRvbWFpblZlY3QuYWRkKHFxcSk7Ci0gICAgICAvLyBkZWJ1ZyA8LQotICAgICAgcmV0dXJuIG5ld0luZGV4OwotICAgIH0KLSAgICBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiTWF4LUFnZT0iLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIk1heC1BZ2U9Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBTdHJpbmcgcXFxID0gZ2V0VmFsdWUoc3RyLCBpbmRleCwgbmV3SW5kZXgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEludGVnZXIucGFyc2VJbnQocXFxKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgewotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIH0KLSAgICAgIC8vIGRlYnVnIC0+Ci0gICAgICBtYXhfQWdlVmVjdC5hZGQocXFxKTsKLSAgICAgIC8vIGRlYnVnIDwtCi0gICAgICByZXR1cm4gbmV3SW5kZXg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJQYXRoPSIsIGluZGV4KSkKLSAgICB7Ci0gICAgICBpbmRleCArPSAiUGF0aD0iLmxlbmd0aCgpOwotCi0gICAgICBuZXdJbmRleCA9IGdldExhc3RWYWx1ZShzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIFN0cmluZyBxcXEgPSBnZXRWYWx1ZShzdHIsIGluZGV4LCBuZXdJbmRleCk7Ci0gICAgICBpZiAocGF0aCA9PSBmYWxzZSkKLSAgICAgICAgcGF0aFZlY3QuYWRkKHFxcSk7Ci0gICAgICBwYXRoID0gdHJ1ZTsKLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlBvcnQiLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIlBvcnQiLmxlbmd0aCgpOwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc9JykKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBpbmRleCsrOwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICdcIicpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBpbmRleCsrOwotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0UG9ydExpc3Qoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIHBvcnRWZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLQotICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIGluZGV4Kys7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlNlY3VyZSIsIGluZGV4KSkKLSAgICB7Ci0gICAgICByZXR1cm4gc3RhcnRJbmRleCArICJTZWN1cmUiLmxlbmd0aCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiVmVyc2lvbj0iLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIlZlcnNpb249Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0RElHSVQoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIHZlcnNpb25WZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFBvcnRMaXN0LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0UG9ydExpc3QoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RESUdJVChzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJywnKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICBpbmRleCsrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdERJR0lULgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0RElHSVQoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGZvciAoOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBpZiAoIUJhc2ljUnVsZXMuaXNESUdJVChzdHIuY2hhckF0KGluZGV4KSkpCi0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoZSBzdHJpbmcgc2F0aXNmeSB0aGUgIkNvb2tpZSIgaGVhZGVyIHZhbHVlLgotICAgKiBAcGFyYW0gc3RyIFN0cmluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ29va2llKFN0cmluZyBzdHIpCi0gIHsKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RWZXJzaW9uKHN0ciwgaW5kZXgpOwotICAgICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJzsnICYmIHN0ci5jaGFyQXQoaW5kZXgpICE9ICcsJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpbmRleCsrOwotICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotCi0gICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgIHsKLSAgICAgICAgbmV3SW5kZXggPSBnZXRMYXN0Q29va2llc1ZhbHVlKHN0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JyAmJiBzdHIuY2hhckF0KGluZGV4KSAhPSAnLCcpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbmRleCsrOwotICAgICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdGgpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFZlcnNpb24uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RWZXJzaW9uKFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBpbnQgbmV3SW5kZXggPSAwOwotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIiRWZXJzaW9uPSIpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgaW5kZXggKz0gIiRWZXJzaW9uPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RDb29raWVzVmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RDb29raWVzVmFsdWUoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0gICAgaW50IG9sZEluZGV4ID0gMDsKLQotICAgIC8vIGZpbmQgdG9rZW4KLSAgICBuZXdJbmRleCA9IEJhc2ljUnVsZXMuZ2V0TGFzdFRva2VuKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAvLyBpZiBub3QgJz0nIC0gZXJyb3IKLSAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJz0nKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIGdldCB2YWx1ZQotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFZhbHVlKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JykKLSAgICAgIHJldHVybiBpbmRleDsKLQotICAgIC8vIHByb2Nlc3MgWyI7IiBwYXRoXSBbIjsiIGRvbWFpbl0gWyI7IiBwb3J0XSAKLSAgICBvbGRJbmRleCA9IGluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIHByb2Nlc3MgcGF0aAotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBhdGgoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ICE9IG5ld0luZGV4KQotICAgIHsKLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnOycpCi0gICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgb2xkSW5kZXggPSBpbmRleDsKLSAgICAgIGluZGV4Kys7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICB9Ci0KLSAgICAvLyBwcm9jZXNzIGRvbWFpbgotICAgIG5ld0luZGV4ID0gZ2V0TGFzdERvbWFpbihzdHIsIGluZGV4KTsKLSAgICBpZiAoaW5kZXggIT0gbmV3SW5kZXgpCi0gICAgewotICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JykKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBvbGRJbmRleCA9IGluZGV4OwotICAgICAgaW5kZXgrKzsKLSAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIH0KLQotICAgIC8vIHByb2Nlc3MgcG9ydAotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBvcnQoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ICE9IG5ld0luZGV4KQotICAgICAgcmV0dXJuIG5ld0luZGV4OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBvbGRJbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFBhdGguCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RQYXRoKFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBpbnQgbmV3SW5kZXggPSAwOwotCi0gICAgaWYgKCFzdHIuc3RhcnRzV2l0aCgiJFBhdGg9IiwgaW5kZXgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgaW5kZXggKz0gIiRQYXRoPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3REb21haW4uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3REb21haW4oU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICBpZiAoIXN0ci5zdGFydHNXaXRoKCIkRG9tYWluPSIsIGluZGV4KSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGluZGV4ICs9ICIkRG9tYWluPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RQb3J0LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0UG9ydChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleCA9IHN0YXJ0SW5kZXg7Ci0gICAgaW50IG5ld0luZGV4ID0gMDsKLQotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIiRQb3J0IiwgaW5kZXgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCArPSAiJFBvcnQiLmxlbmd0aCgpOwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnPScpCi0gICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBvcnRMaXN0KHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJ1wiJykKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBza2lwU3BhY2VzLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBpbmRleAotICAgKiBAcmV0dXJuIGludAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgc2tpcFNwYWNlcyhTdHJpbmcgc3RyLCBpbnQgaW5kZXgpCi0gIHsKLSAgICBmb3IgKDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgICBpZiAoIUJhc2ljUnVsZXMuaXNTUChzdHIuY2hhckF0KGluZGV4KSkpCi0gICAgICAgIGJyZWFrOwotICAgIHJldHVybiBpbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0VmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIGJlZwotICAgKiBAcGFyYW0gZW5kCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRWYWx1ZShTdHJpbmcgc3RyLCBpbnQgYmVnLCBpbnQgZW5kKQotICB7Ci0gICAgU3RyaW5nIHFxcSA9IG51bGw7Ci0gICAgaWYgKHN0ci5jaGFyQXQoYmVnKSA9PSAnXCInKQotICAgICAgcXFxID0gc3RyLnN1YnN0cmluZyhiZWcgKyAxLCBlbmQgLSAxKTsKLSAgICBlbHNlCi0gICAgICBxcXEgPSBzdHIuc3Vic3RyaW5nKGJlZywgZW5kKTsKLSAgICByZXR1cm4gcXFxOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1N0cmluZ1Rva2VuaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzk1Mzk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi0vKioKLSAqIFN0cmluZyB0b2tlbml6ZXIuCi0gKiAKLSAqIEBhdXRob3I6IEt1bGlrCi0gKi8KLWZpbmFsIHB1YmxpYyBjbGFzcyBTdHJpbmdUb2tlbml6ZXIKLXsKLSAgcHJpdmF0ZSBjaGFyW10gc3BhY2VEZWw7Ci0gIHByaXZhdGUgY2hhcltdIGRlbDsKLSAgcHJpdmF0ZSBjaGFyW10gYWxsRGVsOwotCi0gIC8qKgotICAgKiBFbnVtZXJhdGlvbiBvZiBzdHJpbmdzLgotICAqIEBhdXRob3IgS3VsaWsKLSAgICovCi0gIHByaXZhdGUgY2xhc3MgU3RyaW5nVG9rZW5pemVyRW51bWVyYXRpb24gaW1wbGVtZW50cyBqYXZhLnV0aWwuRW51bWVyYXRpb24KLSAgewotICAgIHByaXZhdGUgZmluYWwgY2hhcltdIHN0cjsKLSAgICBwcml2YXRlIGZpbmFsIGludCBzaXplOwotICAgIHByaXZhdGUgaW50IGluZGV4OwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IuCi0gICAgICogQHBhcmFtIHMKLSAgICAgKi8KLSAgICBTdHJpbmdUb2tlbml6ZXJFbnVtZXJhdGlvbihjaGFyW10gcykKLSAgICB7Ci0gICAgICBzdHIgPSBzOwotICAgICAgc2l6ZSA9IHN0ci5sZW5ndGg7Ci0gICAgICBpbmRleCA9IDA7Ci0KLSAgICAgIC8vIHNraXAgc3BhY2UgZGVsaW1pdGVycwotICAgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSAmJiBjb250YWluKHN0cltpbmRleF0sIHNwYWNlRGVsKSkKLSAgICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIGphdmEudXRpbC5FbnVtZXJhdGlvbiNoYXNNb3JlRWxlbWVudHMoKQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGhhc01vcmVFbGVtZW50cygpCi0gICAgewotICAgICAgcmV0dXJuIChpbmRleCA8IHNpemUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgamF2YS51dGlsLkVudW1lcmF0aW9uI25leHRFbGVtZW50KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IG5leHRFbGVtZW50KCkKLSAgICB7Ci0gICAgICBpZiAoaW5kZXggPj0gc2l6ZSkKLSAgICAgICAgdGhyb3cgbmV3IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJTdHJpbmdUb2tlbml6ZXIgZW51bWVyYXRpb24iKTsKLQotICAgICAgLy8gc2tpcCBkZWxpbWl0ZXJzCi0gICAgICBpbnQgYmVnU3RyID0gaW5kZXg7Ci0gICAgICBpZiAoaW5kZXggPCBzaXplICYmIGNvbnRhaW4oc3RyW2luZGV4XSwgZGVsKSkKLSAgICAgICAgaW5kZXgrKzsKLQotICAgICAgLy8gc2tpcCB3b3JkCi0gICAgICBpZiAoYmVnU3RyID09IGluZGV4KQotICAgICAgICB3aGlsZSAoaW5kZXggPCBzaXplICYmICFjb250YWluKHN0cltpbmRleF0sIGFsbERlbCkpCi0gICAgICAgICAgaW5kZXgrKzsKLQotICAgICAgaW50IGVuZFN0ciA9IGluZGV4OwotCi0gICAgICAvLyBza2lwIHNwYWNlIGRlbGltaXRlcnMKLSAgICAgIHdoaWxlIChpbmRleCA8IHNpemUgJiYgY29udGFpbihzdHJbaW5kZXhdLCBzcGFjZURlbCkpCi0gICAgICAgIGluZGV4Kys7Ci0KLSAgICAgIHJldHVybiBTdHJpbmcuY29weVZhbHVlT2Yoc3RyLCBiZWdTdHIsIGVuZFN0ciAtIGJlZ1N0cik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICBpbnQgaSA9IGluZGV4OwotICAgICAgU3RyaW5nIHMgPSAoU3RyaW5nKSBuZXh0RWxlbWVudCgpOwotICAgICAgaW5kZXggPSBpOwotICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFN0cmluZ1Rva2VuaXplciBjb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gc3BhY2VEZWxpbWl0ZXJzIHRoZSBzZXQgb2YgZGVsaW1pdGVycyB0byBiZSBpZ25vcmVkCi0gICAgICogQHBhcmFtIGRlbGltaXRlcnMgdGhlIHNldCBvZiBkZWxpbWl0ZXJzIHRvIGJlIHJlbWFpbmVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1Rva2VuaXplcihjaGFyW10gc3BhY2VEZWxpbWl0ZXJzLCBjaGFyW10gZGVsaW1pdGVycykKLSAgewotICAgIHN1cGVyKCk7Ci0KLSAgICBpZiAoc3BhY2VEZWxpbWl0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgc3BhY2VEZWwgPSBuZXcgY2hhcltzcGFjZURlbGltaXRlcnMubGVuZ3RoXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3BhY2VEZWxpbWl0ZXJzLCAwLCBzcGFjZURlbCwgMCwgc3BhY2VEZWxpbWl0ZXJzLmxlbmd0aCk7Ci0gICAgICBzb3J0KHNwYWNlRGVsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc3BhY2VEZWwgPSBudWxsOwotCi0gICAgaWYgKGRlbGltaXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWwgPSBuZXcgY2hhcltkZWxpbWl0ZXJzLmxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRlbGltaXRlcnMsIDAsIGRlbCwgMCwgZGVsaW1pdGVycy5sZW5ndGgpOwotICAgICAgc29ydChkZWwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBkZWwgPSBudWxsOwotCi0gICAgaWYgKGRlbCAhPSBudWxsICYmIHNwYWNlRGVsICE9IG51bGwpCi0gICAgewotICAgICAgYWxsRGVsID0gbmV3IGNoYXJbZGVsLmxlbmd0aCArIHNwYWNlRGVsLmxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRlbCwgMCwgYWxsRGVsLCAwLCBkZWwubGVuZ3RoKTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3BhY2VEZWwsIDAsIGFsbERlbCwgZGVsLmxlbmd0aCwgc3BhY2VEZWwubGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVsICE9IG51bGwpCi0gICAgICBhbGxEZWwgPSBkZWw7Ci0gICAgZWxzZQotICAgICAgYWxsRGVsID0gc3BhY2VEZWw7Ci0KLSAgICBzb3J0KGFsbERlbCk7Ci0gIH0KLSAgLyoqCi0gICAqIFBhcnNlcyBzdHJpbmcuCi0gICAqIEByZXR1cm4gamF2YS51dGlsLkVudW1lcmF0aW9uCi0gICAqIEBwYXJhbSBzIGphdmEubGFuZy5TdHJpbmcKLSAgICovCi0gIHB1YmxpYyBqYXZhLnV0aWwuRW51bWVyYXRpb24gcGFyc2UoU3RyaW5nIHMpCi0gIHsKLSAgICBpZiAocyA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3RyaW5nVG9rZW5pemVyIDogU3RyaW5nIGNhbm5vdCBiZSBOVUxMIik7Ci0KLSAgICByZXR1cm4gbmV3IFN0cmluZ1Rva2VuaXplckVudW1lcmF0aW9uKHMudG9DaGFyQXJyYXkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQmluYXJ5IHNlYXJjaC4KLSAgICogQHJldHVybiBib29sZWFuCi0gICAqIEBwYXJhbSBjIGNoYXIKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29udGFpbihjaGFyIGMsIGNoYXJbXSBhKQotICB7Ci0gICAgaWYgKGEgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsID0gMCwgciA9IGEubGVuZ3RoIC0gMSwgY2VudGVyOwotICAgIHdoaWxlIChsIDwgcikKLSAgICB7Ci0gICAgICBjZW50ZXIgPSAobCArIHIpIC8gMjsKLSAgICAgIGlmIChjID4gYVtjZW50ZXJdKQotICAgICAgICBsID0gY2VudGVyICsgMTsKLSAgICAgIGVsc2UKLSAgICAgICAgciA9IGNlbnRlcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYVtsXSA9PSBjOwotICB9Ci0gIC8qKgotICAgKiBIZWFwIHNvcnQKLSAgICogQHBhcmFtIGMgY2hhcltdCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSB2b2lkIHNvcnQoY2hhcltdIGMpCi0gIHsKLSAgICBpZiAoYyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBqLCBrOwotICAgICAgY2hhciBjaTsKLQotICAgICAgLy8gcHVzaCBoZWFwCi0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IGMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGogPSAoKGsgPSBpKSAtIDEpIC8gMjsKLSAgICAgICAgY2kgPSBjW2ldOwotICAgICAgICB3aGlsZSAoayA+IDAgJiYgY1tqXSA8IGNpKQotICAgICAgICB7Ci0gICAgICAgICAgY1trXSA9IGNbal07Ci0gICAgICAgICAgaiA9ICgoayA9IGopIC0gMSkgLyAyOwotICAgICAgICB9Ci0gICAgICAgIGNba10gPSBjaTsKLSAgICAgIH0KLQotICAgICAgLy8gcG9wIGhlYXAKLSAgICAgIGZvciAoaW50IGkgPSBjLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pCi0gICAgICB7Ci0gICAgICAgIGogPSAyOwotICAgICAgICBrID0gMDsKLSAgICAgICAgY2kgPSBjWzBdOwotICAgICAgICB3aGlsZSAoaiA8PSBpKQotICAgICAgICB7Ci0gICAgICAgICAgY1trXSA9IChjW2ogLSAxXSA+IGNbal0pID8gY1stLWpdIDogY1tqXTsKLSAgICAgICAgICBqID0gKChrID0gaikgKyAxKSAqIDI7Ci0gICAgICAgIH0KLSAgICAgICAgY1trXSA9IGNbaV07Ci0gICAgICAgIGNbaV0gPSBjaTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVGVzdFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1Rlc3RVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDdjMWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVGVzdFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRlc3QgVXRpbGl0eSBjbGFzcy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFRlc3RVdGlscwotewotICAvKioKLSAgICogRm9ybWF0IGEgc3R5bGUgc2hlZXQgZGVjbGFyYXRpb24gZnJvbSB0aGUgYWRkU3R5bGVTaGVldCBlbGVtZW50LgotICAgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYW4gYWRkU3R5bGVTaGVldCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmYXVsdEhyZWYgZGVmYXVsdCBocmVmLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0LAotICAgIFN0cmluZyBkZWZhdWx0SHJlZikKLSAgewotICAgIGFkZFN0eWxlU2hlZXQuc2V0SHJlZigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX0hSRUYsIGRlZmF1bHRIcmVmKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRUeXBlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoCi0gICAgICAgIGVsZW1lbnQsCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUsCi0gICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX1hTTF9UWVBFKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRUaXRsZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RJVExFKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRNZWRpYSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX01FRElBKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRDaGFyc2V0KAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCkpOwotICAgIGFkZFN0eWxlU2hlZXQuc2V0QWx0ZXJuYXRlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFKSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSB0b29sIG5hbWUgYW5kIGNvcHlyaWdodCBub3RpY2UuCi0gICAqIEBwYXJhbSB0b29sSW5mbyBhIFRvb2xJbmZvIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFRvb2xJbmZvKFRvb2xJbmZvIHRvb2xJbmZvKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgIkNvbmZvcm1hbmNlICIKLSAgICAgICAgKyB0b29sSW5mby5nZXROYW1lKCkKLSAgICAgICAgKyAiIFRvb2wiCi0gICAgICAgICsgIiwgVmVyc2lvbjogIgotICAgICAgICArIHRvb2xJbmZvLmdldFZlcnNpb24oKQotICAgICAgICArICIsIFJlbGVhc2UgRGF0ZTogIgotICAgICAgICArIHRvb2xJbmZvLmdldFJlbGVhc2VEYXRlKCkpOwotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihXU0lDb25zdGFudHMuQ09QWVJJR0hUKTsKLSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIiAiKTsKLSAgfQotCi0gIC8qKiAKLSAgICogR2V0IFhNTCBjb21tZW50IHVzZWQgaW4gbG9nIGFuZCByZXBvcnQgZmlsZS4KLSAgICogQHJldHVybiBYTUwgY29tbWVudCB1c2VkIGluIGxvZyBhbmQgcmVwb3J0IGZpbGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRYTUxDb21tZW50KCkKLSAgewotICAgIFN0cmluZyBjb21tZW50ID0gbnVsbDsKLSAgICBTdHJpbmcgcmVhZExpbmUgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQWRkIHJlcXVpcmVkIGNvbW1lbnRzIChjb3B5cmlnaHQsIGV0Yy4pCi0gICAgICBCdWZmZXJlZFJlYWRlciBidWZmZXJlZFJlYWRlciA9Ci0gICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcigKLSAgICAgICAgICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCi0gICAgICAgICAgICBVdGlscy5nZXRJbnB1dFN0cmVhbShXU0lDb25zdGFudHMuQ09NTUVOVFNfRklMRSkpKTsKLQotICAgICAgLy8gSW5pdGlhbGl6ZSBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nCi0gICAgICBjb21tZW50ID0gIiI7Ci0KLSAgICAgIHdoaWxlIChidWZmZXJlZFJlYWRlci5yZWFkeSgpKQotICAgICAgewotICAgICAgICBpZiAoKHJlYWRMaW5lID0gYnVmZmVyZWRSZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgICAgICBjb21tZW50ICs9IHJlYWRMaW5lICsgV1NJQ29uc3RhbnRzLkxJTkVfU0VQQVJBVE9SOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgZXhjZXB0aW9uIGFuZCBqdXN0IHJldHVybiBudWxsCi0gICAgfQotCi0gICAgcmV0dXJuIGNvbW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNjaGVtYSBsb2NhdGlvbiBmb3IgWE1MIHNjaGVtYS4KLSAgICogQHJldHVybiBzY2hlbWEgbG9jYXRpb24gZm9yIFhNTCBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRYTUxTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfWE1MX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1hNTF9TQ0hFTUEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNPQVBTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfU09BUF9TQ0hFTUEsCi0gICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9TT0FQX1NDSEVNQSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFNjaGVtYUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRTY2hlbWFMb2NhdGlvbigKLSAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9XU0RMX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1dTRExfU0NIRU1BKTsKLSAgfQotCi0gIC8qKgotICAqIEdldCBXU0RMIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAqIEByZXR1cm4gV1NETCBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFNPQVBTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfV1NETF9TT0FQX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1dTRExfU09BUF9TQ0hFTUEpOwotICB9Ci0gIC8qKgotICAgKiBHZXQgV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgU3RyaW5nIHByb3BlcnR5TmFtZSwKLSAgICBTdHJpbmcgZGVmYXVsdFZhbHVlKQotICB7Ci0gICAgLy9TdHJpbmcgc2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSB3c2kuaG9tZSBzeXN0ZW0gcHJvcGVydHkKLSAgICAvL1N0cmluZyB3c2lIb21lID0gU3lzdGVtLmdldFByb3BlcnR5KFdTSVByb3BlcnRpZXMuUFJPUF9XU0lfSE9NRSk7Ci0gICAgLy9TdHJpbmcgZmlsZUxvY2F0aW9uID0gV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgLy8KLSAgICAvLyBJZiB0aGUgZmlsZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlIHdzaS5wcm9wZXJ0aWVzIGZpbGUgdGhlbiBidWlsZCBsb2NhdGlvbgotICAgIC8vaWYgKGZpbGVMb2NhdGlvbiAhPSBudWxsKQotICAgIC8vewotICAgIC8vIElmIHdzaS5ob21lIGlzIHNldCwgdGhlbiB1c2UgaXQKLSAgICAvLyAgaWYgKHdzaUhvbWUgIT0gbnVsbCkKLSAgICAvLyAgewotICAgIC8vICAgICBzY2hlbWFMb2NhdGlvbiA9IHdzaUhvbWU7Ci0gICAgLy8gICB9Ci0gICAgLy8gICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCkKLSAgICAvLyAgIHsKLSAgICAvLyAgICBzY2hlbWFMb2NhdGlvbiA9IGZpbGVMb2NhdGlvbjsKLSAgICAvLyAgfQotICAgIC8vICBlbHNlCi0gICAgLy8gIHsKLSAgICAvLyAgIGlmICghc2NoZW1hTG9jYXRpb24uZW5kc1dpdGgoIi8iKSkKLSAgICAvLyAgICB7Ci0gICAgLy8gICAgIHNjaGVtYUxvY2F0aW9uICs9ICIvIjsKLSAgICAvLyAgIH0KLSAgICAvLwotICAgIC8vICAgIHNjaGVtYUxvY2F0aW9uICs9IGZpbGVMb2NhdGlvbjsKLSAgICAvLyAgfQotICAgIC8vIH0KLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1R5cGVzUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVHlwZXNSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWZkYWI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVHlwZXNSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIFRoZSBjbGFzcyBleHRyYWN0cyBYU0Qgc2NoZW1hIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIFdTREwuCi0gKiAKLSAqIEBhdXRob3IgS3VsaWsKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFR5cGVzUmVnaXN0cnkgaW1wbGVtZW50cyBXU0lUYWcsIFdTRExWaXNpdG9yCi17Ci0gIExpc3Qgc2NoZW1hUHJvY2Vzc2VkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUGFydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBhcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuU2VydmljZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNlcnZpY2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoVHlwZXMsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChPcGVyYXRpb24sIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPcGVyYXRpb24gb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoSW5wdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbnB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChPdXRwdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRmF1bHQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nT3BlcmF0aW9uLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ09wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoQmluZGluZ0lucHV0LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZ0lucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEJpbmRpbmdPdXRwdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nT3V0cHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEJpbmRpbmdGYXVsdCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmdGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChFbGVtZW50LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChNZXNzYWdlLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0VHlwZSwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnRUeXBlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KERlZmluaXRpb24sIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEV4dGVuc2liaWxpdHlFbGVtZW50LAotICAgKiBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBCaW5kaW5nLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEJvZHksIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQSGVhZGVyLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQSGVhZGVyRmF1bHQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQT3BlcmF0aW9uLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0KLSAgcHJpdmF0ZSBNYXAgZWxlbWVudDJUeXBlID0gbmV3IEhhc2hNYXAoKTsKLSAgcHJpdmF0ZSBTZXQgZXh0ZW5kc0FycmF5ID0gbmV3IEhhc2hTZXQoKTsKLSAgcHJpdmF0ZSBTZXQgdXNlc1dzZGxBcnJheVR5cGUgPSBuZXcgSGFzaFNldCgpOwotCi0gIHByb3RlY3RlZCBCYXNlVmFsaWRhdG9yIGJhc2VWYWxpZGF0b3IgPSBudWxsOwotIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgY3JlYXRlcyB0aGUgdHlwZXMgcmVnaXN0cnkuIGJ5IHRoZSBnaXZlbiBXU0RMIGRlZmluaXRpb24KLSAgICogb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIGRlZiBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIGJhc2VWYWxpZGF0b3IgYSBiYXNlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBUeXBlc1JlZ2lzdHJ5KERlZmluaXRpb24gZGVmLCBCYXNlVmFsaWRhdG9yIGJhc2VWYWxpZGF0b3IpCi0gIHsKLSAgICB0aGlzLmJhc2VWYWxpZGF0b3IgPSBiYXNlVmFsaWRhdG9yOwotICAgIGlmIChkZWYgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkRlZmluaXRpb24gY2FuIG5vdCBiZSBudWxsIik7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgCi0gICAgcHJvY2Vzc1R5cGVzKGRlZi5nZXRUeXBlcygpLCBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWYpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGNyZWF0ZXMgdGhlIHR5cGVzIHJlZ2lzdHJ5IGJ5IGdpdmVuIFdTREwgdHlwZXMgb2JqZWN0IGFuZAotICAgKiBsb2NhdGlvbiBjb250ZXh0IFVSSS4KLSAgICogQHBhcmFtIHR5cGVzIFdTREwgdHlwZXMgb2JqZWN0LgotICAgKiBAcGFyYW0gY29udGV4dCBsb2NhdGlvbiBjb250ZXh0IFVSSS4KLSAgICogQHBhcmFtIGJhc2VWYWxpZGF0b3IgYSBiYXNlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBUeXBlc1JlZ2lzdHJ5KAotICAgIFR5cGVzIHR5cGVzLAotICAgIFN0cmluZyBjb250ZXh0LAotICAgIEJhc2VWYWxpZGF0b3IgYmFzZVZhbGlkYXRvcikKLSAgewotICAgIHRoaXMuYmFzZVZhbGlkYXRvciA9IGJhc2VWYWxpZGF0b3I7Ci0gICAgcHJvY2Vzc1R5cGVzKHR5cGVzLCBjb250ZXh0KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgdHlwZSdzIHFuYW1lIGJ5IGdpdmVuIGVsZW1lbnQncyBxbmFtZS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIGEgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZS4KLSAgICogQHJldHVybiB0eXBlJ3MgcW5hbWUgYnkgZ2l2ZW4gZWxlbWVudCdzIHFuYW1lLgotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFR5cGUoUU5hbWUgZWxlbWVudE5hbWUpCi0gIHsKLSAgICByZXR1cm4gKFFOYW1lKSBlbGVtZW50MlR5cGUuZ2V0KGVsZW1lbnROYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgc2V0IG9mIHR5cGVzIHdoaWNoIGlzIGFycmF5IGF0dHJpYnV0ZS4KLSAgICogQHJldHVybiBzZXQgb2YgdHlwZXMgd2hpY2ggaXMgYXJyYXkgYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIFNldCBnZXRBcnJheVR5cGVzKCkKLSAgewotICAgIFNldCBzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBzLmFkZEFsbCgoQ29sbGVjdGlvbikgdXNlc1dzZGxBcnJheVR5cGUpOwotICAgIHMuYWRkQWxsKChDb2xsZWN0aW9uKSBleHRlbmRzQXJyYXkpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyBzZXQgb2YgZWxlbWVudHMgZGVmaW5lZCBpbiB0eXBlcyBlbGVtZW50LgotICAgKiBAcmV0dXJuIHNldCBvZiBlbGVtZW50cyBkZWZpbmVkIGluIHR5cGVzIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU2V0IGdldEVsZW1lbnRMaXN0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmVsZW1lbnQyVHlwZS5rZXlTZXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBkZWNsYXJlcyB3c2RsOmFycmF5VHlwZQotICAgKiBhdHRyaWJ1dGUgd2l0aGluIGRlY2xhcmF0aW9uLgotICAgKiBAcGFyYW0gdHlwZSBhIHR5cGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBkZWNsYXJlcyB3c2RsOmFycmF5VHlwZQotICAgKiBhdHRyaWJ1dGUgd2l0aGluIGRlY2xhcmF0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVc2VzV1NETEFycmF5VHlwZShRTmFtZSB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHVzZXNXc2RsQXJyYXlUeXBlLmNvbnRhaW5zKHR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyB0cnVlIGlmIGdpdmVuIHR5cGUgZXh0ZW5kcyBzb2FwZW5jOkFycmF5IHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlIGEgdHlwZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGdpdmVuIHR5cGUgZXh0ZW5kcyBzb2FwZW5jOkFycmF5IHR5cGUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0V4dGVuZHNBcnJheShRTmFtZSB0eXBlKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuZHNBcnJheS5jb250YWlucyh0eXBlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuSW1wb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IGltLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoaW0uZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICBwcm9jZXNzV1NETChpbS5nZXREZWZpbml0aW9uKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBwcm9jZXNzZXMgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gZGVmIGEgV1NETCBkZWZpbml0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NXU0RMKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgaWYgKGRlZi5nZXRUeXBlcygpICE9IG51bGwpCi0gICAgICBwcm9jZXNzVHlwZXMoZGVmLmdldFR5cGVzKCksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBXU0RMIHR5cGVzLgotICAgKiBAcGFyYW0gdHlwZXMgV1NETCB0eXBlcy4KLSAgICogQHBhcmFtIGNvbnRleHQgYSBjb250ZXh0LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NUeXBlcyhUeXBlcyB0eXBlcywgU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICBpZiAodHlwZXMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBMaXN0IGV4dHMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gZXh0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHNlYXJjaEZvclNjaGVtYSgKLSAgICAgICAgICAgICgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpLAotICAgICAgICAgICAgY29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBzZWFyY2hlcyBYU0Qgc2NoZW1hIGRlY2xhcmF0aW9uIGFuZCBYU0QgaW1wb3J0Ci0gICAqIHN0YXRlbWVudHMuCi0gICAqIEBwYXJhbSBuCi0gICAqIEBwYXJhbSBjb250ZXh0Ci0gICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbiwgU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIHNlYXJjaGVzIGZvciB4c2Q6aW1wb3J0IGVsZW1lbnQKLSAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgcHJvY2Vzc1NjaGVtYShuLCBjb250ZXh0LCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgfQotICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIGxvYWRzIFhTRCBzY2hlbWEgYnkgdXNpbmcgc2NoZW1hIGxvY2F0aW9uIGFuZAotICAgKiBsb2NhdGlvbiBjb250ZXh0LgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZQotICAgKiBAcGFyYW0gY29udGV4dAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGxvYWRTY2hlbWEoTm9kZSBpbXBvcnROb2RlLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0gICAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBpbXBvcnROb2RlOwotICAgIEF0dHIgc2NoZW1hTG9jYXRpb24gPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX1NDSEVNQUxPQ0FUSU9OKTsKLQkKLSAgICAvLyB0cnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gICAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgCVN0cmluZyB1cmxTdHJpbmcgPSBYTUxVdGlscy5jcmVhdGVVUkxTdHJpbmcoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gICAgCWlmICghc2NoZW1hUHJvY2Vzc2VkTGlzdC5jb250YWlucyh1cmxTdHJpbmcpKQotICAgIAl7Ci0gICAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgICBiYXNlVmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksCi0gICAgICAgICAgICAgIGNvbnRleHQsCi0gICAgICAgICAgICAgIG51bGwpOwotICAgICAgICAgIHNjaGVtYVByb2Nlc3NlZExpc3QuYWRkKHVybFN0cmluZyk7Ci0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKAotICAgICAgICAgICAgICBzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICAgIHVybFN0cmluZywgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgCX0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgICAgLy90LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAvLyBub3RoaW5nLiBpdCdzIG5vdCBhIHNjaGVtYQotICAgICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBwcm9jZXNzZXMgWFNEIHNjaGVtYSBhbmQgcmV0cmlldmVzIHR5cGVzIGRlY2xhcmF0aW9uIGZyb20KLSAgICogaXQuCi0gICAqIEBwYXJhbSBzY2hlbWEKLSAgICogQHBhcmFtIGNvbnRleHQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzU2NoZW1hKE5vZGUgc2NoZW1hLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0JaWYgKChzY2hlbWEgIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKHNjaGVtYSkpKQotCXsKLQkgIHByb2Nlc3NlZFNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHNjaGVtYSwgQVRUUl9YU0RfVEFSR0VUTkFNRVNQQUNFKTsKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgICAgLy8gaXRlcmF0ZSBzY2hlbWEKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAvLyAhISB3ZSBzdXBwb3NlIHRoYXQgeHNkOmltcG9ydCBlbGVtZW50IGlzIG9jY3VyZWQgb25seSB3aXRoaW4geHNkOnNjaGVtYSBlbGVtZW50ICAgICAgICAKLSAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0VMRU1FTlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbjsKLSAgICAgICAgICAgIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfWFNEX05BTUUpOwotICAgICAgICAgICAgUU5hbWUgZWxlbWVudCA9Ci0gICAgICAgICAgICAgIG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiIpOwotCi0gICAgICAgICAgICBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsLCBBVFRSX1hTRF9UWVBFKTsKLSAgICAgICAgICAgIFFOYW1lIHR5cGUgPSBudWxsOwotICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHQgPSBhLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgIC8vIGlmIHR5cGUgY29udGFpbnMgJzonLCBpdCBtZWFucyB0aGF0IGl0IGNvbnRhaW5zIHFuYW1lCi0gICAgICAgICAgICAgIGludCBpID0gdC5pbmRleE9mKCc6Jyk7Ci0gICAgICAgICAgICAgIGlmIChpICE9IC0xKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHQuc3Vic3RyaW5nKDAsIGkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBuc1VSSSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgcHJlZml4KTsKLSAgICAgICAgICAgICAgICB0eXBlID0gbmV3IFFOYW1lKG5zVVJJLCB0LnN1YnN0cmluZyhpICsgMSkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0eXBlID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIHN1cHBvc2UgdGhhdCBlbGVtZW50IGRpcmVjdGx5IGNvbnRhaW5zIHR5cGUgZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgdHlwZSA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgIGNoZWNrVHlwZShuLCB0eXBlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudDJUeXBlLnB1dChlbGVtZW50LCB0eXBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgIGVsc2UgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTkNMVURFKSkKLSAgICAgICAgICAgIGxvYWRTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgZWxzZSBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0NPTVBMRVhUWVBFKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IGVsID0gKEVsZW1lbnQpIG47Ci0gICAgICAgICAgICBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsLCBBVFRSX1hTRF9OQU1FKTsKLSAgICAgICAgICAgIFFOYW1lIHR5cGUgPQotICAgICAgICAgICAgICBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiKTsKLSAgICAgICAgICAgIGNoZWNrVHlwZShuLCB0eXBlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0JfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBjaGVja3Mgd2hldGhlciBzcGVjaWZpZWQgdHlwZSBoYXMgV1NETCBhcnJheSB0eXBlCi0gICAqIGF0dHJpYnV0ZSBpbiB0aGUgWFNEIGRlY2xhcmF0aW9uLgotICAgKiBAcGFyYW0gbgotICAgKiBAcGFyYW0gbmFtZQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrVHlwZShOb2RlIG4sIFFOYW1lIG5hbWUpCi0gIHsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHN1Y2ggc2VudGVuY2UKLSAgICAgICAgLy8gICAgICAgICAgICAgIHhzZDphdHRyaWJ1dGUgcmVmPSJzb2FwZW5jOmFycmF5VHlwZSIgd3NkbDphcnJheVR5cGU9InRuczpNeUFycmF5MlR5cGVbXSIvPgotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0FUVFJJQlVURSkpCi0gICAgICAgIHsKLSAgICAgICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIG4sIEFUVFJfV1NETF9BUlJBWVRZUEUpOwotICAgICAgICAgIGlmIChhICE9IG51bGwpCi0gICAgICAgICAgICB1c2VzV3NkbEFycmF5VHlwZS5hZGQobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXRyaWV2ZSBiYXNlIGF0dHJpYnV0ZSBtYXkgYmUgZnJvbSByZXN0cmljdGlvbiBvciBleHRlbnNpb24KLSAgICAgICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBBVFRSX1hTRF9CQVNFKTsKLSAgICAgICAgaWYgKGEgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBiYXNlID0gYS5nZXRWYWx1ZSgpOwotICAgICAgICAgIGludCBpID0gYmFzZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgICAgaWYgKGkgIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGJhc2Uuc3Vic3RyaW5nKDAsIGkpOwotICAgICAgICAgICAgU3RyaW5nIGxvY2FsID0gYmFzZS5zdWJzdHJpbmcoaSArIDEpOwotICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgcHJlZml4KTsKLSAgICAgICAgICAgIGlmIChTT0FQRU5DX0FSUkFZLmVxdWFscyhuZXcgUU5hbWUobmFtZXNwYWNlLCBsb2NhbCkpKQotICAgICAgICAgICAgICBleHRlbmRzQXJyYXkuYWRkKG5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjaGVja1R5cGUobi5nZXRGaXJzdENoaWxkKCksIG5hbWUpOwotICAgICAgfQotICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVURESVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1VERElVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTJlMDY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVURESVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuQmluZGluZ1RlbXBsYXRlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5UTW9kZWxJbnN0YW5jZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXJzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGUgc29tZSBzZXJ2aWNlIGZ1bmN0aW9ucyB1c2VkIGJ5IFVERElWYWxpZGF0b3IuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgVURESVV0aWxzCi17Ci0gIHN0YXRpYyBwdWJsaWMgZmluYWwgRmluZFF1YWxpZmllcnMgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVI7Ci0gIHN0YXRpYyB7Ci0gICAgVmVjdG9yIHZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBFWEFDVF9OQU1FX01BVENIX1FVQUxJRklFUiA9IG5ldyBGaW5kUXVhbGlmaWVycygpOwotICAgIHZlY3Rvci5hZGQobmV3IEZpbmRRdWFsaWZpZXIoRmluZFF1YWxpZmllci5leGFjdE5hbWVNYXRjaCkpOwotICAgIHZlY3Rvci5hZGQobmV3IEZpbmRRdWFsaWZpZXIoRmluZFF1YWxpZmllci5zb3J0QnlOYW1lQXNjKSk7Ci0gICAgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVIuc2V0RmluZFF1YWxpZmllclZlY3Rvcih2ZWN0b3IpOwotICB9Ci0KLSAgc3RhdGljIGZpbmFsIFN0cmluZyBXU19JX0NPTkZPUk1BTkNFX1RNT0RFTF9OQU1FID0KLSAgICAid3MtaS1vcmc6Y29uZm9ybXNUbzoyMDAyXzEyIjsKLQotICBzdGF0aWMgcHJpdmF0ZSBIYXNodGFibGUgd3NpQ29uZm9ybWFuY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQotICAvKioKLSAgICogR2V0cyBhIGJ1c2luZXNzIHNlcnZpY2UgYnkga2V5LgotICAgKiBAcGFyYW0gcHJveHkgIGEgVURESSBwcm94eS4KLSAgICogQHBhcmFtIGtleSAgICBhIGtleSB0byBhIGJ1c2luZXNzIHNlcnZpY2UuCi0gICAqIEByZXR1cm4gYSBidXNpbmVzcyBzZXJ2aWNlIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4ga2V5LgotICAgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiBpZiBlcnJvciBvcmlnaW5hdGluZyB3aXRoaW4gdGhlIFNPQVAgdHJhbnNwb3J0LgotICAgKiBAdGhyb3dzIFVERElFeGNlcHRpb24gaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFVEREkgQVBJIGNhbm5vdCBpbmRpY2F0ZSBhbiBlcnJvciBjb25kaXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJ1c2luZXNzU2VydmljZSBnZXRCdXNpbmVzc1NlcnZpY2VCeUtleSgKLSAgICBVRERJUHJveHkgcHJveHksCi0gICAgU3RyaW5nIGtleSkKLSAgICB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uLCBVRERJRXhjZXB0aW9uCi0gIHsKLSAgICBCdXNpbmVzc1NlcnZpY2UgcmVzdWx0ID0gbnVsbDsKLQotICAgIFNlcnZpY2VEZXRhaWwgc2QgPSBwcm94eS5nZXRfc2VydmljZURldGFpbChrZXkpOwotCi0gICAgaWYgKHNkICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHYgPSBzZC5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLQotICAgICAgaWYgKHYgIT0gbnVsbCAmJiB2LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChCdXNpbmVzc1NlcnZpY2UpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGJ1c2luZXNzIGVudGl0eSBieSBrZXkuCi0gICAqIEBwYXJhbSBwcm94eSAgYSBVRERJIHByb3h5LgotICAgKiBAcGFyYW0ga2V5ICAgIGEga2V5IHRvIGEgYnVzaW5lc3MgZW50aXkuCi0gICAqIEByZXR1cm4gYSBidXNpbmVzcyBlbnRpdHkgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIGlmIGVycm9yIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgU09BUCB0cmFuc3BvcnQuCi0gICAqIEB0aHJvd3MgVURESUV4Y2VwdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgVURESSBBUEkgY2Fubm90IGluZGljYXRlIAotICAgKiAgICAgICAgIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnVzaW5lc3NFbnRpdHkgZ2V0QnVzaW5lc3NCeUtleShVRERJUHJveHkgcHJveHksIFN0cmluZyBrZXkpCi0gICAgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiwgVURESUV4Y2VwdGlvbgotICB7Ci0gICAgQnVzaW5lc3NFbnRpdHkgcmVzdWx0ID0gbnVsbDsKLQotICAgIEJ1c2luZXNzRGV0YWlsIGJkID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGtleSk7Ci0KLSAgICBpZiAoYmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IGJkLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0KLSAgICAgIGlmICh2ICE9IG51bGwgJiYgdi5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoQnVzaW5lc3NFbnRpdHkpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGEgdE1vZGVsIGJ5IGtleS4KLSAgICogQHBhcmFtIHByb3h5ICBhIFVEREkgcHJveHkuCi0gICAqIEBwYXJhbSBrZXkgICAgYSBrZXkgdG8gYSB0TW9kZWwuCi0gICAqIEByZXR1cm4gYSB0TW9kZWwgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIGlmIGVycm9yIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgU09BUCB0cmFuc3BvcnQuCi0gICAqIEB0aHJvd3MgVURESUV4Y2VwdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgVURESSBBUEkgY2Fubm90IGluZGljYXRlIAotICAgKiAgICAgICAgIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVE1vZGVsIGdldFRNb2RlbEJ5S2V5KFVERElQcm94eSBwcm94eSwgU3RyaW5nIGtleSkKLSAgewotICAgIFRNb2RlbCByZXN1bHQgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgVE1vZGVsRGV0YWlsIGJkID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbChrZXkpOwotCi0gICAgICBpZiAoYmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHYgPSBiZC5nZXRUTW9kZWxWZWN0b3IoKTsKLQotICAgICAgICBpZiAodiAhPSBudWxsICYmIHYuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IChUTW9kZWwpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMga2V5IG9mIHRoZSBXU0kgQ29uZm9ybWFuY2UgdE1vZGVsLgotICAgKiBAcGFyYW0gcHJveHkgIGEgVURESSBwcm94eS4KLSAgICogQHJldHVybiB0aGUga2V5IG9mIHRoZSBXU0kgQ29uZm9ybWFuY2UgdE1vZGVsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NJQ29uZm9ybWFuY2VUTW9kZWxLZXkoVURESVByb3h5IHByb3h5KQotICB7Ci0gICAgaWYgKHByb3h5ID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVRERJIHByb3h5IGNhbm5vdCBiZSBudWxsLiIpOwotCi0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0KLSAgICBpZiAod3NpQ29uZm9ybWFuY2VUYWJsZS5jb250YWluc0tleShwcm94eSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gd3NpQ29uZm9ybWFuY2VUYWJsZS5nZXQocHJveHkpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRUTW9kZWxLZXlCeU5hbWUocHJveHksIFdTX0lfQ09ORk9STUFOQ0VfVE1PREVMX05BTUUpOwotCi0gICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldTLUkgY29uZm9ybWFuY2UgdGF4b25vbXkgdE1vZGVsIHdhcyBub3QgZm91bmQiKTsKLSAgICAgIH0KLQotICAgICAgd3NpQ29uZm9ybWFuY2VUYWJsZS5wdXQocHJveHksIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGEgdE1vZGVsIGtleSBieSB0TW9kZWwgbmFtZS4KLSAgICogQHBhcmFtIHByb3h5ICBhIFVEREkgcHJveHkuCi0gICAqIEBwYXJhbSBuYW1lICAgYSB0TW9kZWwgbmFtZS4KLSAgICogQHJldHVybiBhIHRNb2RlbCBrZXkgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiB0TW9kZWwgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRNb2RlbEtleUJ5TmFtZShVRERJUHJveHkgcHJveHksIFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVE1vZGVsTGlzdCBsaXN0ID0KLSAgICAgICAgcHJveHkuZmluZF90TW9kZWwobmFtZSwgbnVsbCwgbnVsbCwgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVIsIDEpOwotICAgICAgVE1vZGVsSW5mbyBpbmZvID0KLSAgICAgICAgKFRNb2RlbEluZm8pIGxpc3QuZ2V0VE1vZGVsSW5mb3MoKS5nZXRUTW9kZWxJbmZvVmVjdG9yKCkuZmlyc3RFbGVtZW50KCk7Ci0gICAgICByZXN1bHQgPSBpbmZvLmdldFRNb2RlbEtleSgpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgewotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBiaW5kaW5nVGVtcGxhdGUuCi0gICAqIEBwYXJhbSBiaW5kaW5nVGVtcGxhdGUgIGEgQmluZGluZ1RlbXBsYXRlIG9iamVjdC4KLSAgICogQHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBiaW5kaW5nVGVtcGxhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBiaW5kaW5nVGVtcGxhdGVUb1N0cmluZyhCaW5kaW5nVGVtcGxhdGUgYmluZGluZ1RlbXBsYXRlKQotICB7Ci0gICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOwotCi0gICAgaWYgKGJpbmRpbmdUZW1wbGF0ZSA9PSBudWxsKQotICAgICAgcmV0dXJuU3RyaW5nID0gIm51bGwiOwotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVyblN0cmluZyA9Ci0gICAgICAgICJhY2Nlc3NQb2ludDogIgotICAgICAgICAgICsgKGJpbmRpbmdUZW1wbGF0ZS5nZXRBY2Nlc3NQb2ludCgpID09IG51bGwKLSAgICAgICAgICAgID8gIm51bGwiCi0gICAgICAgICAgICA6IGJpbmRpbmdUZW1wbGF0ZS5nZXRBY2Nlc3NQb2ludCgpLmdldFRleHQoKSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nVGVtcGxhdGUuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkgPT0gbnVsbAotICAgICAgICB8fCBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkKLSAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VJbmZvVmVjdG9yKCkKLSAgICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiwgW25vIHRNb2RlbCByZWZlcmVuY2VdIjsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlCi0gICAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkKLSAgICAgICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IoKQotICAgICAgICAgICAgLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgaW50IGluZm9Db3VudCA9IDE7Ci0gICAgICAgIFRNb2RlbEluc3RhbmNlSW5mbyBpbmZvOwotICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaW5mbyA9IChUTW9kZWxJbnN0YW5jZUluZm8pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiwgWyIKLSAgICAgICAgICAgICsgaW5mb0NvdW50KysKLSAgICAgICAgICAgICsgIl0gdE1vZGVsS2V5OiAiCi0gICAgICAgICAgICArIGluZm8uZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dXJuU3RyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdE1vZGVsLgotICAgKiBAcGFyYW0gdE1vZGVsICBhIFRNb2RlbCBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdE1vZGVsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdE1vZGVsVG9TdHJpbmcoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIFN0cmluZyByZXR1cm5TdHJpbmcgPSAiIjsKLQotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICAgIHJldHVyblN0cmluZyA9ICJudWxsIjsKLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm5TdHJpbmcgPQotICAgICAgICAibmFtZTogIgotICAgICAgICAgICsgdE1vZGVsLmdldE5hbWVTdHJpbmcoKQotICAgICAgICAgICsgIiwgY2F0ZWdvcnlCYWc6ICIKLSAgICAgICAgICArICh0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKSA9PSBudWxsCi0gICAgICAgICAgICA/ICJudWxsIgotICAgICAgICAgICAgOiBjYXRlZ29yeUJhZ1RvU3RyaW5nKHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKSkKLSAgICAgICAgICArICIsIG92ZXJ2aWV3VVJMOiAiCi0gICAgICAgICAgKyAodE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkgPT0gbnVsbAotICAgICAgICAgICAgPyAibnVsbCIKLSAgICAgICAgICAgIDogdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkxTdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHVyblN0cmluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKiBAcGFyYW0gY2F0ZWdvcnlCYWcgIGEgQ2F0ZWdvcnlCYWcgb2JqZWN0LgotICAgKiBAcmV0dXJuIGEgdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY2F0ZWdvcnlCYWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjYXRlZ29yeUJhZ1RvU3RyaW5nKENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnKQotICB7Ci0gICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOwotCi0gICAgaWYgKGNhdGVnb3J5QmFnID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuU3RyaW5nICs9ICJudWxsIjsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuU3RyaW5nICs9ICJLZXllZFJlZmVyZW5jZUxpc3Q6ICI7Ci0KLSAgICAgIFZlY3RvciBrckxpc3QgPSBudWxsOwotICAgICAgaWYgKChrckxpc3QgPSBjYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpKSA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5TdHJpbmcgKz0gIm51bGwiOwotICAgICAgfQotCi0gICAgICBlbHNlIGlmIChrckxpc3Quc2l6ZSgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHJldHVyblN0cmluZyArPSAiZW1wdHkiOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbnVsbDsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBrckxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGtyID0gKEtleWVkUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgcmV0dXJuU3RyaW5nICs9ICJ0TW9kZWxLZXk6ICIKLSAgICAgICAgICAgICsga3IuZ2V0VE1vZGVsS2V5KCkKLSAgICAgICAgICAgICsgIiwga2V5TmFtZTogIgotICAgICAgICAgICAgKyBrci5nZXRLZXlOYW1lKCkKLSAgICAgICAgICAgICsgIiwga2V5VmFsdWU6ICIKLSAgICAgICAgICAgICsga3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5TdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgd3NkbFNwZWMgdE1vZGVsIGFzc29jaWF0ZWQgd2l0aCBhIGJpbmRpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRNb2RlbCBmaW5kVE1vZGVsKAotICAgIFVERElQcm94eSB1ZGRpUHJveHksCi0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSwKLSAgICBib29sZWFuIHZlcmJvc2VPcHRpb24pCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IG51bGw7Ci0KLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgdE1vZGVsIHJlZmVyZW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYmluZGluZ1RlbXBsYXRlCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPQotICAgICAgYmluZGluZ1RlbXBsYXRlCi0gICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZURldGFpbHMoKQotICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VJbmZvVmVjdG9yKCkKLSAgICAgICAgLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggdE1vZGVsIHJlZmVyZW5jZQotICAgIFZlY3RvciB0TW9kZWxLZXlMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IHRNb2RlbEluc3RhbmNlSW5mbwotICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluc3RhbmNlSW5mbyA9Ci0gICAgICAgIChUTW9kZWxJbnN0YW5jZUluZm8pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gQWRkIGtleSB0byBsaXN0Ci0gICAgICB0TW9kZWxLZXlMaXN0LmFkZCh0TW9kZWxJbnN0YW5jZUluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgdE1vZGVscyBhc3NvY2lhdGVkIHdpdGggdGhlIGJpbmRpbmdUZW1wbGF0ZQotICAgIGlmICh0TW9kZWxLZXlMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCB0aGUgdE1vZGVsIGRldGFpbHMKLSAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHVkZGlQcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleUxpc3QpOwotCi0gICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiB0TW9kZWxzCi0gICAgICAgIEl0ZXJhdG9yIHRNb2RlbEl0ZXJhdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgLy9ib29sZWFuIHRNb2RlbEZvdW5kID0gZmFsc2U7Ci0gICAgICAgIFRNb2RlbCBuZXh0VE1vZGVsID0gbnVsbDsKLQotICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIHRNb2RlbHMKLSAgICAgICAgd2hpbGUgKCh0TW9kZWxJdGVyYXRvci5oYXNOZXh0KCkpICYmICh0TW9kZWwgPT0gbnVsbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgbmV4dCB0TW9kZWwgaW4gbGlzdAotICAgICAgICAgIG5leHRUTW9kZWwgPSAoVE1vZGVsKSB0TW9kZWxJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICBpZiAodmVyYm9zZU9wdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAgICIgICAgICBUTW9kZWwgcmVmZXJlbmNlZCBmcm9tIGJpbmRpbmdUZW1wbGF0ZSAtICIKLSAgICAgICAgICAgICAgICArIFVERElVdGlscy50TW9kZWxUb1N0cmluZyhuZXh0VE1vZGVsKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHdzZGxTcGVjIHRNb2RlbCwgdGhlbiB0aGlzIGlzIHRoZSB0TW9kZWwgd2Ugd2FudAotICAgICAgICAgIGlmIChpc1dzZGxTcGVjKG5leHRUTW9kZWwpKQotICAgICAgICAgICAgdE1vZGVsID0gbmV4dFRNb2RlbDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIFRocm93IFdTSUV4Y2VwdGlvbgotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZ2V0IHRNb2RlbCBkZXRhaWxzLiIsIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgIC8vdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiVURESSBiaW5kaW5nVGVtcGxhdGUgZGlkIG5vdCBjb250YWluIGFueSB0TW9kZWwgcmVmZXJlbmNlcy4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdE1vZGVsOwotICB9Ci0gIAotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB3c2RsU3BlYyB0TW9kZWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXc2RsU3BlYyhUTW9kZWwgdE1vZGVsKQotICB7Ci0gICAgYm9vbGVhbiB0TW9kZWxGb3VuZCA9IGZhbHNlOwotICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gbnVsbDsKLSAgICBJdGVyYXRvciBjYXRlZ29yeUJhZ0l0ZXJhdG9yID0gbnVsbDsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgY2F0ZXRnb3J5QmFnIGNvbnRhaW5zIHdzZGxTcGVjCi0gICAgaWYgKChjYXRlZ29yeUJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBrZXllZCByZWZlcmVuY2VzCi0gICAgICBjYXRlZ29yeUJhZ0l0ZXJhdG9yID0gY2F0ZWdvcnlCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKS5pdGVyYXRvcigpOwotCi0gICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZmVyZW5jZSA9IG51bGw7Ci0KLSAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2Yga2V5ZWQgcmVmZXJlbmNlcwotICAgICAgd2hpbGUgKGNhdGVnb3J5QmFnSXRlcmF0b3IuaGFzTmV4dCgpICYmICEodE1vZGVsRm91bmQpKQotICAgICAgewotICAgICAgICAvLyBHZXQgbmV4dCBrZXllZCByZWZlcmVuY2UKLSAgICAgICAga2V5ZWRSZWZlcmVuY2UgPSAoS2V5ZWRSZWZlcmVuY2UpIGNhdGVnb3J5QmFnSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSB0eXBlcyB0YXhvbm9teSB0TW9kZWwgYW5kIHRoZSB2YWx1ZSBpcyB3c2RsU3BlYywgdGhlbiB0aGlzIGlzIHRoZSB0TW9kZWwgd2Ugd2FudAotICAgICAgICAvLyBSRU1PVkU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgdGhlIGtleSBuYW1lCi0gICAgICAgIC8vaWYgKGtleWVkUmVmZXJlbmNlLmdldFRNb2RlbEtleSgpLmVxdWFsc0lnbm9yZUNhc2UoVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpICYmCi0gICAgICAgIC8vICAgIndzZGxTcGVjIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5VmFsdWUoKSkgJiYKLSAgICAgICAgLy8gICAoInR5cGVzIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5TmFtZSgpKSB8fAotICAgICAgICAvLyAgICAidWRkaS1vcmc6dHlwZXMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlOYW1lKCkpKSkgewotICAgICAgICAvLyAgdE1vZGVsRm91bmQgPSB0cnVlOwotICAgICAgICAvL30KLSAgICAgICAgaWYgKGtleWVkUmVmZXJlbmNlCi0gICAgICAgICAgLmdldFRNb2RlbEtleSgpCi0gICAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpCi0gICAgICAgICAgJiYgIndzZGxTcGVjIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5VmFsdWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB0TW9kZWxGb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdE1vZGVsRm91bmQ7Ci0gIH0KLSAgLyoqCi0gICAqIEdldCBhbiBPdmVydmlld1VSTCBmcm9tIHRNb2RlbC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE92ZXJ2aWV3VVJMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBpZiAodE1vZGVsICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkwoKS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBHZXQgV1NETCBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKQotICB7Ci0gICAgaW50IGluZGV4OwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIG92ZXJ2aWV3VVJMIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllcgotICAgIGlmICgoaW5kZXggPSB3c2RsTG9jYXRpb24uaW5kZXhPZigiIyIpKSA+IC0xKQotICAgIHsKLSAgICAgIHdzZGxMb2NhdGlvbiA9IHdzZGxMb2NhdGlvbi5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbExvY2F0aW9uOwotICB9Ci0gIC8qKgotICAgKiBHZXQgV1NETCBiaW5kaW5nIGZyb20gdGhlIG92ZXJ2aWV3VVJMIGluIHRoZSB0TW9kZWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJpbmRpbmcgZ2V0QmluZGluZyhTdHJpbmcgb3ZlcnZpZXdVUkwsIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gIHsKLSAgICBpbnQgaW5kZXg7Ci0gICAgaW50IG5hbWVJbmRleDsKLQotICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHdzZGxEb2N1bWVudC5nZXRCaW5kaW5ncygpOwotICAgIGlmIChiaW5kaW5ncyA9PSBudWxsIHx8IGJpbmRpbmdzLmxlbmd0aCA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBpZiAob3ZlcnZpZXdVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBDaGVjayBpZiB0aGUgb3ZlcnZpZXdVUkwgY29udGFpbnMgYSBmcmFnbWVudCBpZGVudGlmaWVyCi0gICAgICBpZiAoKGluZGV4ID0gb3ZlcnZpZXdVUkwuaW5kZXhPZigiIyIpKSA+IC0xKQotICAgICAgewotICAgICAgICAvLyBURU1QOiBOZWVkIHRvIHVzZSBhIHJlYWwgWFBhdGggZXZhbHVhdG9yIGxpa2UgWGFsYW4KLSAgICAgICAgU3RyaW5nIG5hbWVBdHRyaWJ1dGUgPSAiQG5hbWU9IjsKLQotICAgICAgICAvLyBMb2NhdGUgbmFtZSByZWZlcmVuY2UKLSAgICAgICAgaWYgKChuYW1lSW5kZXggPQotICAgICAgICAgIG92ZXJ2aWV3VVJMLnN1YnN0cmluZyhpbmRleCArIDEpLmluZGV4T2YobmFtZUF0dHJpYnV0ZSkpCi0gICAgICAgICAgPiAtMSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgd2hpY2ggc2hvdWxkIGJlIGEgcXVvdGUKLSAgICAgICAgICBpbnQgZmlyc3RRdW90ZUluZGV4ID0gaW5kZXggKyAxICsgbmFtZUluZGV4ICsgbmFtZUF0dHJpYnV0ZS5sZW5ndGgoKTsKLSAgICAgICAgICBTdHJpbmcgcXVvdGUgPQotICAgICAgICAgICAgb3ZlcnZpZXdVUkwuc3Vic3RyaW5nKGZpcnN0UXVvdGVJbmRleCwgZmlyc3RRdW90ZUluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAvLyBHZXQgdGhlIHBhcnQgb2YgdGhlIFVSTCB3aGljaCBzaG91bGQgY29udGFpbiB0aGUgYmluZGluZyBuYW1lCi0gICAgICAgICAgU3RyaW5nIHVybFBhcnQgPSBvdmVydmlld1VSTC5zdWJzdHJpbmcoZmlyc3RRdW90ZUluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHF1b3RlCi0gICAgICAgICAgaW50IG5leHRRdW90ZUluZGV4OwotICAgICAgICAgIGlmICgobmV4dFF1b3RlSW5kZXggPSB1cmxQYXJ0LmluZGV4T2YocXVvdGUpKSA+IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9IHVybFBhcnQuc3Vic3RyaW5nKDAsIG5leHRRdW90ZUluZGV4KTsKLSAgICAgICAgICAgIC8vbG9vayBmb3IgYmluZGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKGJpbmRpbmdOYW1lLmVxdWFscyhiaW5kaW5nc1tpXS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZ3NbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdzWzBdOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMzc5ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTWltZVBhcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5NaW1lUGFydHNJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlRpbWVab25lOwotCi0vKioKLSAqIEdlbmVyYWwgc2V0IG9mIHV0aWxpdGllcy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBDUiA9IChieXRlKSAnXHInOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTEYgPSAoYnl0ZSkgJ1xuJzsKLQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgTWFwIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zOwotCi0gIC8qKgotICAgKiBDb21tb24gdGltZXN0YW1wIGZvcm1hdC4KLSAgICovCi0gIC8vCXB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCB0aW1lc3RhbXBGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCAoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IHRpbWVzdGFtcEZvcm1hdCA9Ci0gICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MiKTsKLQotICAvKioKLSAgICogQmFzaWMgZGF0ZSBmb3JtYXQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXBsZURhdGVGb3JtYXQgZGF0ZUZvcm1hdCA9Ci0gICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsKLQotICAvKioKLSAgICogV3JhcHBlciBtZXRob2QgZm9yIGVycm9yIGxvZ2dpbmc7Ci0gICAqIGZvciBub3cgaXQganVzdCBnb2VzIHRvIHN0ZGVyci4KLSAgICogQHBhcmFtIGluRXJyb3IgIGFuIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIGluRXJyb3IpCi0gIHsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiAiICsgaW5FcnJvcik7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldCBleGNlcHRpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0aHJvd2FibGUgIGEgVGhyb3dhYmxlIG9iamVjdC4KLSAgICogQHJldHVybiBleGNlcHRpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBnZXRFeGNlcHRpb25EZXRhaWxzKFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiRXhjZXB0aW9uOiAiKTsKLSAgICB0aHJvd2FibGUucHJpbnRTdGFja1RyYWNlKHB3KTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqIEByZXR1cm4gdXJyZW50IGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUaW1lc3RhbXAoKQotICB7Ci0gICAgLy8gVXNlIEdNVCB0aW1lem9uZQotICAgIC8vdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSk7Ci0gICAgdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldERlZmF1bHQoKSk7Ci0KLSAgICAvLyBSZXR1cm4gdGltZXN0YW1wCi0gICAgcmV0dXJuIHRpbWVzdGFtcEZvcm1hdC5mb3JtYXQobmV3IERhdGUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGN1cnJlbnQgZGF0ZSBmb3IgZGVmYXVsdCB0aW1lIHpvbmUuCi0gICAqIEByZXR1cm4gY3VycmVudCBkYXRlIGZvciBkZWZhdWx0IHRpbWUgem9uZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERhdGUoKQotICB7Ci0gICAgLy8gVXNlIEdNVCB0aW1lem9uZQotICAgIGRhdGVGb3JtYXQuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0RGVmYXVsdCgpKTsKLQotICAgIC8vIFJldHVybiBkYXRlCi0gICAgcmV0dXJuIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBIVFRQIHN0YXR1cyBjb2RlLgotICAgKiBAcGFyYW0gaHR0cEhlYWRlcnMgIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybiBIVFRQIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgc3RhdHVzIGNvZGUgaW4gaHR0cCBoZWFkZXJzIHdhcyBub3QgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIVFRQU3RhdHVzQ29kZShTdHJpbmcgaHR0cEhlYWRlcnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHN0YXR1c0NvZGUgPSBudWxsOwotCi0gICAgaWYgKGh0dHBIZWFkZXJzLnN0YXJ0c1dpdGgoIkhUVFAiKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbG9jYXRpb24gb2Ygc3RhdHVzIGNvZGUKLSAgICAgIGludCBpbmRleCA9IGh0dHBIZWFkZXJzLmluZGV4T2YoIiAiKTsKLSAgICAgIGludCBpbmRleDIgPSBodHRwSGVhZGVycy5pbmRleE9mKCIgIiwgaW5kZXggKyAxKTsKLQotICAgICAgaWYgKChpbmRleCA9PSAtMSkgfHwgKGluZGV4MiA9PSAtMSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHN0YXR1cyBjb2RlIGluIGh0dHAgaGVhZGVyczogWyIgKyBodHRwSGVhZGVycyArICJdLiIpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHN0YXR1c0NvZGUgPSBodHRwSGVhZGVycy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleDIpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQ291bGQgbm90IGZpbmQgc3RhdHVzIGNvZGUgaW4gaHR0cCBoZWFkZXJzOiBbIiArIGh0dHBIZWFkZXJzICsgIl0uIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHN0YXR1cyBjb2RlCi0gICAgcmV0dXJuIHN0YXR1c0NvZGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBIVFRQIGhlYWRlcnMgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhUVFBIZWFkZXJzKFN0cmluZyBmdWxsTWVzc2FnZSkKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLQotICAgIC8vIFRyeSBsb29raW5nIGZvciB0aGUgZG91YmxlIG5ld2xpbmUKLSAgICBpbnQgaW5kZXggPSBmdWxsTWVzc2FnZS5pbmRleE9mKCJcclxuXHJcbiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBpbmRleCArPSA0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgZm9yIGNhc2UgIlxyXHIuLi5cclxuXHJcci4uLlxuIgotICAgICAgLy8gTm90ZSB0aGUgaW5kZXggdGhhdCBpcyByZXR1cm5lZCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciAKLSAgICAgIC8vIGltbWVkaWF0ZWRseSBmb2xsb3dpbmcgdGhlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGUgQ1JMRkNSTEYuIAotICAgICAgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlKTsKLSAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgbG9nRXJyb3IoCi0gICAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBIVFRQIG1lc3NhZ2UgdG8gZmluZCBoZWFkZXJzLiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiAieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIGhlYWRlcnMuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZQotICAgICAgICAgICsgIl0uIjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gSFRUUCBoZWFkZXJzCi0gICAgcmV0dXJuIGZ1bGxNZXNzYWdlLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBTT0FQIG1lc3NhZ2UgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbnRlbnQoU3RyaW5nIGZ1bGxNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKLQotICAgIC8vIEZpbmQgc3RhcnQgb2YgbWVzc2FnZQotICAgIGludCBpbmRleCA9IGZ1bGxNZXNzYWdlLmluZGV4T2YoIlxyXG5cclxuIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGluZGV4ICs9IDQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBmb3IgY2FzZSAiXHJcci4uLlxyXG5cclxyLi4uXG4iCi0gICAgICAvLyBOb3RlIHRoZSBpbmRleCB0aGF0IGlzIHJldHVybmVkIHBvaW50cyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIAotICAgICAgLy8gaW1tZWRpYXRlZGx5IGZvbGxvd2luZyB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSBDUkxGQ1JMRi4gCi0gICAgICBpbmRleCA9IGdldEZpcnN0Q1JMRkNSTEYoZnVsbE1lc3NhZ2UpOwotICAgIH0gICAgCQotCi0gICAgaWYgKGluZGV4IDwgMCkKLSAgICB7Ci0gICAgCS8vIElmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXJzIG9yIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSwgdGhlbiBzaG93IGVycm9yCi0gICAgICBsb2dFcnJvcigKLSAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIHRvIGdldCBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlID0KLSAgICAgICAgIngtV1NJLVRlc3QtVG9vbC1FcnJvcjogQ291bGRuJ3QgZmluZCBtZXNzYWdlIGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZQotICAgICAgICAgICsgIl0uIjsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoLCB0aGVuIHRoZXJlIGlzIG5vIG1lc3NhZ2UgY29udGVudAotICAgIGVsc2UgaWYgKGluZGV4ID49IGZ1bGxNZXNzYWdlLmxlbmd0aCgpKQotICAgIHsKLSAgICAgIG1lc3NhZ2UgPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBFbHNlIGdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG1lc3NhZ2UgPSBmdWxsTWVzc2FnZS5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBTT0FQIG1lc3NhZ2UKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotIAotICAvKioKLSAgICogR2V0IEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBIVFRQIGhlYWRlcnMgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGdldEhUVFBIZWFkZXJzKGJ5dGVbXSBmdWxsTWVzc2FnZSkKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlLCAwKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgewotICAgICAgbG9nRXJyb3IoCi0gICAgICAgICJVbmFibGUgdG8gcGFyc2UgSFRUUCBtZXNzYWdlIHRvIGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogIgotICAgICAgICAgICsgZnVsbE1lc3NhZ2UpOwotICAgICAgcmV0dXJuICgieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIGhlYWRlcnMuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICsgZnVsbE1lc3NhZ2UgKyAiXS4iKS5nZXRCeXRlcygpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBIVFRQIGhlYWRlcnMKLQlieXRlW10gYiA9IG5ldyBieXRlW2luZGV4XTsKLQlTeXN0ZW0uYXJyYXljb3B5KGZ1bGxNZXNzYWdlLCAwLCBiLCAwLCBpbmRleCk7Ci0KLSAgICByZXR1cm4gYjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgSFRUUCBoZWFkZXJzIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SFRUUEhlYWRlcnNBc1N0cmluZyhieXRlW10gZnVsbE1lc3NhZ2UsIFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlLCAwKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgewotICAgICAgbG9nRXJyb3IoCi0gICAgICAgICJVbmFibGUgdG8gcGFyc2UgSFRUUCBtZXNzYWdlIHRvIGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogIgotICAgICAgICAgICsgZnVsbE1lc3NhZ2UpOwotICAgICAgcmV0dXJuICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IENvdWxkbid0IGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgICAgKyBmdWxsTWVzc2FnZSArICJdLiI7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIEhUVFAgaGVhZGVycwotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nKGZ1bGxNZXNzYWdlLCAwLCBpbmRleCwgZW5jb2RpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgICAgbG9nRXJyb3IoCi0gICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIEVuY29kaW5nOiAiICsgZW5jb2RpbmcgKyAiLiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgICAgICAgICArIGZ1bGxNZXNzYWdlKTsKLSAgICAgICAgICAgICAgcmV0dXJuICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IFVuc3VwcG9ydGVkIEVuY29kaW5nIFwiIiArIGVuY29kaW5nICsgIlwiLiAgRnVsbCBtZXNzYWdlOiBbIgotICAgICAgICAgICAgICAgICsgZnVsbE1lc3NhZ2UgKyAiXS4iOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgU09BUCBtZXNzYWdlIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q29udGVudEFzU3RyaW5nKGJ5dGVbXSBtZXNzYWdlKQotICB7Ci0gIAlTdHJpbmcgY29udGVudCA9ICIiOwotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKG1lc3NhZ2UsIDApOwotCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBIVFRQIGhlYWRlcnMgb3IgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGVuIHNob3cgZXJyb3IKLSAgICBpZiAoaW5kZXggPCAwKQotICAgIHsKLSAgICAgIGxvZ0Vycm9yKAotICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgdG8gZ2V0IGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6ICIKLSAgICAgICAgICArIG1lc3NhZ2UpOwotICAgICAgY29udGVudCA9Ci0gICAgICAgICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IENvdWxkbid0IGZpbmQgbWVzc2FnZSBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiBbIgotICAgICAgICAgICsgbWVzc2FnZS50b1N0cmluZygpCi0gICAgICAgICAgKyAiXS4iOwotICAgIH0KLQotICAgIC8vIEVsc2UgZ2V0IHRoZSBtZXNzYWdlIGNvbnRlbnQKLSAgICBlbHNlIGlmIChpbmRleCA8IG1lc3NhZ2UubGVuZ3RoKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBjb250ZW50ID0gbmV3IFN0cmluZyhtZXNzYWdlLCBpbmRleCwgbWVzc2FnZS5sZW5ndGggLSBpbmRleCk7Ci0gICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgCWxvZ0Vycm9yKAotICAgICAgCSAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIHRvIGdldCBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAJICAgICAgICAgICsgbWVzc2FnZSk7Ci0gICAgICAJY29udGVudCA9Ci0gICAgICAJICAgICAgICAieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIG1lc3NhZ2UgY29udGVudC4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgIAkgICAgICAgICAgKyBtZXNzYWdlLnRvU3RyaW5nKCkKLSAgICAgIAkgICAgICAgICAgKyAiXS4iOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBTT0FQIG1lc3NhZ2UKLSAgICByZXR1cm4gY29udGVudDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgU09BUCBtZXNzYWdlIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBieXRlW10gZ2V0Q29udGVudChieXRlW10gbWVzc2FnZSkKLSAgewotICAgIGJ5dGVbXSBjb250ZW50ID0gbmV3IGJ5dGUgWzBdOwotCi0gICAgLy9TdHJpbmcgaHR0cEhlYWRlcnMgPSBudWxsOwotICAgIGludCBpbmRleCA9IGdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSwgMCk7Ci0gCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBIVFRQIGhlYWRlcnMgb3IgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGVuIHNob3cgZXJyb3IKLSAgICBpZiAoaW5kZXggPCAwKQotICAgIHsKLSAgICAgIGxvZ0Vycm9yKAotICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgdG8gZ2V0IGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6ICIKLSAgICAgICAgICArIG1lc3NhZ2UpOwotICAgICAgbWVzc2FnZSA9Ci0gICAgICAgICgieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIG1lc3NhZ2UgY29udGVudC4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgICAgICArIG1lc3NhZ2UudG9TdHJpbmcoKQotICAgICAgICAgICsgIl0uIikuZ2V0Qnl0ZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgaW5kZXggaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGgsIHRoZW4gdGhlcmUgaXMgbm8gbWVzc2FnZSBjb250ZW50Ci0gICAgLy9lbHNlIGlmIChpbmRleCA+PSBmdWxsTWVzc2FnZS5sZW5ndGgoKSkKLSAgICAvL3sKLSAgICAvLyAgbWVzc2FnZSA9ICIiOwotICAgIC8vfQotCi0gICAgLy8gRWxzZSBnZXQgdGhlIG1lc3NhZ2UgY29udGVudAotICAgIGVsc2UgaWYgKGluZGV4IDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgewotICAgIAlieXRlW10gYiA9IG5ldyBieXRlW21lc3NhZ2UubGVuZ3RoIC0gaW5kZXhdOwotICAgIAlTeXN0ZW0uYXJyYXljb3B5KG1lc3NhZ2UsIGluZGV4LCBiLCAwLCBtZXNzYWdlLmxlbmd0aCAtIGluZGV4KTsKLQotICAgICAgICBjb250ZW50ID0gYjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gU09BUCBtZXNzYWdlCi0gICAgcmV0dXJuIGNvbnRlbnQ7Ci0gIH0KLQotICAKLSAgLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEYoYnl0ZVtdIGJ1ZmZlciwgaW50IGluZGV4KSAKLQl7Ci0JCWludCBzaXplID0gYnVmZmVyLmxlbmd0aDsKLQkJaW50IGkgPSBpbmRleDsKLQkJd2hpbGUgKGkgPCBzaXplIC0gMSkgewotCQkJaWYgKGJ1ZmZlcltpXSA9PSBDUiAmJiBidWZmZXJbaSsxXSA9PSBMRikKLQkJCQlyZXR1cm4gaTsKLQkJCWkrKzsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGIGZvbGxvd2VkIGltZWRpYXRlbHkgYnkgYW5vdGhlciBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEZDUkxGKGJ5dGVbXSBidWZmZXIsIGludCBpbmRleCkgCi0JewotCQlpbnQgc2l6ZSA9IGJ1ZmZlci5sZW5ndGg7Ci0JCWludCBpID0gaW5kZXg7Ci0JCXdoaWxlIChpIDwgc2l6ZSAtIDMpIAotCQl7Ci0JCSAgaWYgKGJ1ZmZlcltpXSA9PSBDUiAmJiBidWZmZXJbaSsxXSA9PSBMRiAmJiBidWZmZXJbaSsyXSA9PSBDUikKLQkJICB7Ci0JCQlpZiAoYnVmZmVyW2krM10gPT0gTEYpCi0JCQl7Ci0JCQkgIHJldHVybiBpKzQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkgIGludCBqID0gaSArIDM7Ci0JCQkgIHdoaWxlIChqIDwgYnVmZmVyLmxlbmd0aCAmJiBidWZmZXJbal0gPT0gQ1IpCi0JCQkgIHsKLQkJCQlqKys7Ci0JCQkgIH0KLQkJCSAgaWYgKGogPCBidWZmZXIubGVuZ3RoICYmIGJ1ZmZlcltqXSA9PSBMRikKLQkJCSAgewotCQkJICAJcmV0dXJuIGogKyAxOwotCQkJICB9Ci0JCQl9Ci0JCSAgfQotCQkgIGkrKzsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGIGZvbGxvd2VkIGltZWRpYXRlbHkgYnkgYW5vdGhlciBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEZDUkxGKFN0cmluZyBidWZmZXIpIAotCXsKLQkJaW50IGluZGV4ID0gYnVmZmVyLmluZGV4T2YoIlxyXG5cciIpOwotCQlpZiAoaW5kZXggIT0gLTEpCi0JCXsKLQkJICBpbnQgaSA9IGluZGV4ICszOwotCQkgIHdoaWxlIChpIDwgYnVmZmVyLmxlbmd0aCgpICYmIGJ1ZmZlci5zdGFydHNXaXRoKCJcciIsIGkpKQotCQkgICAgIGkrKzsKLQkJCi0JCSAgaWYgKGkgPCBidWZmZXIubGVuZ3RoKCkgJiYgYnVmZmVyLnN0YXJ0c1dpdGgoIlxuIiwgaSkpCi0JCQlyZXR1cm4gaSsxOwotCQkgIGVsc2UKLQkJCXJldHVybiBnZXRGaXJzdENSTEZDUkxGKGJ1ZmZlci5zdWJzdHJpbmcoaW5kZXggKyAzKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCSAgcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBpbmRpY2VzIHdoaWNoIG1hcmtzIHRoZSBzZXBhcmF0aW9uIG9mIHBhcnRzLgotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgaW50W10gZ2V0Qm91bmRhcnlJbmRpY2VzKGJ5dGVbXSBtZXNzYWdlLCBTdHJpbmcgYm91bmRhcnlTdHIpCi0JewotCSAgaW50W10gaW5kaWNlcyA9IG5ldyBpbnRbMjU2XTsKLQkgIGludCBpbmRpY2VzSW5kZXggPSAwOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGJ5dGVbXSBib3VuZGFyeSA9ICgiXHJcbi0tIiArIGJvdW5kYXJ5U3RyKS5nZXRCeXRlcygiVVMtQVNDSUkiKTsKLQotCSAgICBpbnQgaW5kZXggPSAwOwotCSAgICBpbnQgc3RhcnQgPSAwOwotCSAgICB3aGlsZSAoaW5kZXggIT0gLTEpCi0JICAgIHsKLQkgICAgICBpbmRleCA9IGluZGV4T2YobWVzc2FnZSwgYm91bmRhcnksIHN0YXJ0KTsKLQkgICAgICAKLQkgICAgICBpZiAoaW5kZXggIT0gLTEpIAotCSAgICAgIHsKLQkJICAgIHN0YXJ0ID0gaW5kZXggKyBib3VuZGFyeS5sZW5ndGg7Ci0JICAgIAlpbmRpY2VzW2luZGljZXNJbmRleF0gPSBpbmRleDsKLQkgICAgCWluZGljZXNJbmRleCsrOwotCSAgICAgIH0KLQkgICAgfQotICAgICAgCWludFtdIGIgPSBuZXcgaW50W2luZGljZXNJbmRleF07Ci0gICAgCVN5c3RlbS5hcnJheWNvcHkoaW5kaWNlcywgMCwgYiwgMCwgaW5kaWNlc0luZGV4KTsKLSAgICAJaW5kaWNlcyA9IGI7Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JICB7fQotCSAgcmV0dXJuIGluZGljZXM7Ci0JfQotIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGtleSBpbiB0aGUgYnVmZmVyLgotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgaW50IGluZGV4T2YoYnl0ZVtdIGJ1ZmZlciwgYnl0ZVtdIGtleSwgaW50IHN0YXJ0KQotCXsKLQkJaW50IGJ1ZmZlckxlbiA9IGJ1ZmZlci5sZW5ndGg7Ci0JCWludCBrZXlMZW4gPSBrZXkubGVuZ3RoOwotCQlpbnQgaSxqLGsgPSAwOwotCQkKLQkJaWYgKGtleUxlbiA+IGJ1ZmZlckxlbiAtIHN0YXJ0KQotCQl7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkKLQkJZm9yIChrID0gc3RhcnQgKyBrZXlMZW4gLSAxOyBrIDwgYnVmZmVyTGVuOyBrKyspCi0JCXsKLSAgICAgICAgICAgZm9yIChqID0ga2V5TGVuIC0gMSwgaSA9IGs7IChqID49IDApICYmIChidWZmZXJbaV0gPT0ga2V5W2pdKTsgai0tKSAKLSAgICAgICAgICAgewotICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgaWYgKGogPT0gKC0xKSkgewotICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICB9Ci0JCX0KLQotCQlyZXR1cm4gLTE7Ci0JfQotCS8qKgotICAgKiBHZXQgY29udGVudHMgb2YgYSByZXNvdXJjZSBhbmQgcmV0dXJuIGFzIGEgaW5wdXQgc3RyZWFtLgotICAgKgotICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBnZXQgYW5kIHJldHVybiBhcwotICAgKiAgICAgICAgICAgICAgICAgICAgICBhbiBpbnB1dCBzdHJlYW0uCi0gICAqIEByZXR1cm4gY29udGVudHMgb2YgYSByZXNvdXJjZSBhcyBhbiBpbnB1dCBzdHJlYW0uCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBsb2NhdGVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbShTdHJpbmcgcmVzb3VyY2VOYW1lKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCi0gICAgLy8gSWYgcmVzb3VyY2UgcmVmZXJlbmNlIGlzIGEgVVJMLCB0aGVuIGlucHV0IHN0cmVhbSBmcm9tIFVSTAotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRyeSB0byBjcmVhdGUgVVJMCi0gICAgICBVUkwgdXJsUmVzb3VyY2UgPSBuZXcgVVJMKHJlc291cmNlTmFtZSk7Ci0KLSAgICAgIC8vIElmIHN1Y2Nlc3NmdWwsIHRoZW4gZ2V0IFVSTCBpbnB1dCBzdHJlYW0KLSAgICAgIGlzID0gZ2V0SW5wdXRTdHJlYW0odXJsUmVzb3VyY2UpOwotICAgIH0KLQotICAgIC8vIEVsc2UgdHJ5IHRvIHJlYWQgcmVzb3VyY2UgZGlyZWN0bHkKLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11ZSkKLSAgICB7Ci0gICAgICBib29sZWFuIGJUcnlDbGFzc0xvYWRlciA9IGZhbHNlOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gT3BlbiBmaWxlIGlucHV0IHN0cmVhbQotICAgICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0ocmVzb3VyY2VOYW1lKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCB0cnkgY2xhc3MgbG9hZGVyIGZsYWcKLSAgICAgICAgYlRyeUNsYXNzTG9hZGVyID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBzZSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IHRyeSBjbGFzcyBsb2FkZXIgZmxhZwotICAgICAgICBiVHJ5Q2xhc3NMb2FkZXIgPSB0cnVlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gZ2V0SW5wdXRTdHJlYW0gOiIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0cnkgY2xhc3MgbG9hZGVyLCB0aGVuIHVzZSBpdCB0byBnZXQgaW5wdXQgc3RyZWFtCi0gICAgICBpZiAoYlRyeUNsYXNzTG9hZGVyKQotICAgICAgewotICAgICAgICAvLyBVc2UgY2xhc3MgbG9hZGVyIHRvIGxvYWQgcmVzb3VyY2UKLSAgICAgICAgaXMgPSBDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKHJlc291cmNlTmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBudWxsLCB0aGVuIHRocm93IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vdHJ5IHRoaXMKLSAgICAgIGlzID0KLSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKAotICAgICAgICAgIHJlc291cmNlTmFtZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBudWxsLCB0aGVuIHRocm93IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vdHJ5IHRoaXMKLSAgICAgIFVSTCBhVVJMID0KLSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZSgKLSAgICAgICAgICByZXNvdXJjZU5hbWUpOwotICAgICAgaWYgKGFVUkwgIT0gbnVsbCkKLSAgICAgICAgaXMgPSBnZXRJbnB1dFN0cmVhbShhVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAoaXMgPT0gbnVsbCkKLSAgICAgIC8vIFRocm93IGV4ZWNwdGlvbgotICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgcmVzb3VyY2UgZmlsZTogIiArIHJlc291cmNlTmFtZSk7Ci0KLSAgICAvLyBSZXR1cm4gaW5wdXQgc3RyZWFtCi0gICAgcmV0dXJuIGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5wdXQgc3RyZWFtIGZyb20gYSBVUkwuCi0gICAqIEBwYXJhbSB1cmxGaWxlIHRoZSBVUkwgdG8gZ2V0IHRoZSBpbnB1dCBzdHJlYW0gZnJvbS4KLSAgICogQHJldHVybiB0aGUgaW5wdXQgc3RyZWFtIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFVSTC4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhdHRlbXB0IHRvIG9wZW4gdGhlIGZpbGUgZGVub3RlZCBieSBVUkwgaGFzIGZhaWxlZC4KLSAgICogQHRocm93cyBDb25uZWN0RXhjZXB0aW9uIGlmIHRyb3VibGUgY29ubmVjdGluZyB0byBVUkwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElucHV0U3RyZWFtIGdldElucHV0U3RyZWFtKFVSTCB1cmxGaWxlKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29ubmVjdEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCi0gICAgLy8gQUREOiBob3cgYXJlIFVSTHMgdGhhdCBhcmUgcGFzc3dvcmQgcHJvdGVjdGVkIGhhbmRsZWQ/Pz8/Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBPcGVuIGZpbGUgaW5wdXQgc3RyZWFtCi0gICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHVybEZpbGUub3BlblN0cmVhbSgpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoQ29ubmVjdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFJlLXRocm93IHRoaXMgZXhjcGV0aW9uIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICAgdGhyb3cgbmV3IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgY29ubmVjdCB0byBVUkw6ICIgKyB1cmxGaWxlLnRvRXh0ZXJuYWxGb3JtKCkgKyAiLiIpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBpbnB1dCBzdHJlYW0KLSAgICByZXR1cm4gaXM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGNvbnRlbnRzIG9mIGEgcmVzb3VyY2UgYW5kIHJldHVybiBhcyBhIGlucHV0IHN0cmVhbS4KLSAgICogQHBhcmFtIGZpbGVMb2NhdGlvbiB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUuCi0gICAqIEByZXR1cm4gY29udGVudHMgb2YgYSByZXNvdXJjZSBhcyBhIGlucHV0IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBmaWxlRXhpc3RzKFN0cmluZyBmaWxlTG9jYXRpb24pCi0gIHsKLSAgICBib29sZWFuIGZpbGVFeGlzdHMgPSBmYWxzZTsKLQotICAgIC8vIElmIHJlc291cmNlIHJlZmVyZW5jZSBpcyBhIFVSTCwgdGhlbiBpbnB1dCBzdHJlYW0gZnJvbSBVUkwKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUcnkgdG8gY3JlYXRlIFVSTAotICAgICAgVVJMIHVybCA9IG5ldyBVUkwoZmlsZUxvY2F0aW9uKTsKLQotICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgdGhlbiB0cnkgdG8gb3BlbiBjb25uZWN0aW9uCi0gICAgICB1cmwub3BlblN0cmVhbSgpOwotICAgICAgZmlsZUV4aXN0cyA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gRWxzZSB0cnkgdG8gcmVhZCByZXNvdXJjZSBkaXJlY3RseQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlTG9jYXRpb24pOwotCi0gICAgICAgIGZpbGVFeGlzdHMgPSBmaWxlLmV4aXN0cygpOwotICAgICAgfQotCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgICBmaWxlRXhpc3RzID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBmbmZlKQotICAgIHsKLSAgICAgIGZpbGVFeGlzdHMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmlsZUV4aXN0cyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJldHVybiBmaWxlIGV4aXN0cyBpbmRpY2F0b3IKLSAgICByZXR1cm4gZmlsZUV4aXN0czsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbG9jYWwgaG9zdCBuYW1lLgotICAgKiBAcmV0dXJuIHRoZSBsb2NhbCBob3N0IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2NhbEhvc3ROYW1lKCkKLSAgewotICAgIFN0cmluZyBzTG9jYWxIb3N0TmFtZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBsb2NhbCBob3N0IG5hbWUKLSAgICAgIHNMb2NhbEhvc3ROYW1lID0gSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkuZ2V0SG9zdE5hbWUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsIGhvc3QgbmFtZQotICAgICAgc0xvY2FsSG9zdE5hbWUgPSAiMTI3LjAuMC4xIjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gbG9jYWwgaG9zdCBuYW1lCi0gICAgcmV0dXJuIHNMb2NhbEhvc3ROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkIGEgVVJMIHN0cmluZyBmcm9tIGhvc3RuYW1lLCBwb3J0IGFuZCBVUk4uCi0gICAqCi0gICAqIEBwYXJhbSBob3N0bmFtZSB0aGUgaG9zdG5hbWUuCi0gICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0LgotICAgKiBAcGFyYW0gdXJuIHRoZSBVUk4uCi0gICAqIEByZXR1cm4gZm9ybWF0dGVkIFVSTCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRVUkwoU3RyaW5nIGhvc3RuYW1lLCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVybikKLSAgewotICAgIC8vIEJ1aWxkIFVSTgotICAgIFN0cmluZyBmb3JtYXRVUk4gPSB1cm47Ci0KLSAgICAvLyBJZiBVUk4gZG9lc24ndCBzdGFydCB3aXRoICIvIiwgdGhlbiBhZGQgaXQKLSAgICBpZiAoIShmb3JtYXRVUk4uc3RhcnRzV2l0aCgiLyIpKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgIi8iIHRvIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCi0gICAgICBmb3JtYXRVUk4gPSAiLyIgKyB1cm47Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIFVSTCBzdHJpbmcKLSAgICByZXR1cm4gImh0dHA6Ly8iICsgaG9zdG5hbWUgKyAiOiIgKyBwb3J0ICsgZm9ybWF0VVJOOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVwbGFjZSBhbGwgb2YgdGhlIG9jY3VyYW5jZXMgb2YgYSBzdHJpbmcKLSAgICogd2l0aCBhIHN1YnN0aXR1dGlvbiBzdHJpbmcuCi0gICAqCi0gICAqIEBwYXJhbSBzVGV4dCBTdHJpbmcgdG8gdWRwYXRlLgotICAgKiBAcGFyYW0gc0ZpbmQgU3RyaW5nIHRvIGZpbmQuCi0gICAqIEBwYXJhbSBzUmVwbGFjZSBTdHJpbmcgdG8gdXNlIGZvciBzdWJzdGl0dXRpb24uCi0gICAqIEByZXR1cm4gdXBkYXRlZCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyByZXBsYWNlU3RyaW5nKAotICAgIFN0cmluZyBzVGV4dCwKLSAgICBTdHJpbmcgc0ZpbmQsCi0gICAgU3RyaW5nIHNSZXBsYWNlKQotICB7Ci0gICAgaW50IGlQcmV2SW5kZXggPSAwOwotCi0gICAgaW50IGlGaW5kTGVuID0gc0ZpbmQubGVuZ3RoKCk7Ci0gICAgaW50IGlSZXBsYWNlTGVuID0gc1JlcGxhY2UubGVuZ3RoKCk7Ci0KLSAgICBTdHJpbmcgc1VwZGF0ZWRUZXh0ID0gc1RleHQ7Ci0KLSAgICAvLyBSZXBsYWNlIGFsbCBvY2N1cmFuY2VzIG9mIHRoZSBmaW5kIHN0cmluZwotICAgIGZvciAoaW50IGlJbmRleCA9IHNVcGRhdGVkVGV4dC5pbmRleE9mKHNGaW5kKTsKLSAgICAgIGlJbmRleCA8IChzVXBkYXRlZFRleHQubGVuZ3RoKCkgLSAxKSAmJiBpSW5kZXggIT0gLTE7Ci0gICAgICBpSW5kZXggPSBzVXBkYXRlZFRleHQuaW5kZXhPZihzRmluZCwgaVByZXZJbmRleCArIGlSZXBsYWNlTGVuKSkKLSAgICB7Ci0gICAgICAvLyBTZXQgdXBkYXRlZCB0ZXh0IGZyb20gdGhlIGZyb250IHBvcnRpb24gKyByZXBsYWNlbWVudCB0ZXh0ICsgYmFjayBwb3J0aW9uCi0gICAgICBzVXBkYXRlZFRleHQgPQotICAgICAgICBzVXBkYXRlZFRleHQuc3Vic3RyaW5nKDAsIGlJbmRleCkKLSAgICAgICAgICArIHNSZXBsYWNlCi0gICAgICAgICAgKyBzVXBkYXRlZFRleHQuc3Vic3RyaW5nKGlJbmRleCArIGlGaW5kTGVuKTsKLQotICAgICAgLy8gU2V0IHRoZSBwcmV2aW91cyBpbmRleCBmaWVsZAotICAgICAgaVByZXZJbmRleCA9IGlJbmRleDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdXBkYXRlZCB0ZXh0IHN0cmluZwotICAgIHJldHVybiBzVXBkYXRlZFRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCBzdHJpbmcgdG8gaGV4IHN0cmluZy4KLSAgICogQHBhcmFtIGRhdGEgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHJldHVybiBoZXggc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9IZXhTdHJpbmcoU3RyaW5nIGRhdGEpCi0gIHsKLSAgICBjaGFyW10gSEVYX0NIQVJTID0KLSAgICAgIHsKLSAgICAgICAgJzAnLAotICAgICAgICAnMScsCi0gICAgICAgICcyJywKLSAgICAgICAgJzMnLAotICAgICAgICAnNCcsCi0gICAgICAgICc1JywKLSAgICAgICAgJzYnLAotICAgICAgICAnNycsCi0gICAgICAgICc4JywKLSAgICAgICAgJzknLAotICAgICAgICAnQScsCi0gICAgICAgICdCJywKLSAgICAgICAgJ0MnLAotICAgICAgICAnRCcsCi0gICAgICAgICdFJywKLSAgICAgICAgJ0YnIH07Ci0KLSAgICAvLyBHZXQgc3RyaW5nIGFzIGJ5dGUgYXJyYXkKLSAgICBieXRlW10gYnl0ZURhdGEgPSBkYXRhLmdldEJ5dGVzKCk7Ci0KLSAgICAvLyBHZXQgbGVuZ3RoCi0gICAgaW50IGxlbmd0aCA9IGJ5dGVEYXRhLmxlbmd0aDsKLQotICAgIC8vIENyZWF0ZSBDaGFyIGJ1ZmZlcgotICAgIGNoYXJbXSBjaGFyQnVmZmVyID0gbmV3IGNoYXJbbGVuZ3RoICogMl07Ci0KLSAgICBpbnQgbmV4dDsKLSAgICBmb3IgKGludCBieXRlQ250ID0gMCwgY2hhckNudCA9IDA7IGJ5dGVDbnQgPCBsZW5ndGg7KQotICAgIHsKLSAgICAgIG5leHQgPSBieXRlRGF0YVtieXRlQ250KytdOwotICAgICAgY2hhckJ1ZmZlcltjaGFyQ250KytdID0gSEVYX0NIQVJTWyhuZXh0ID4+PiA0KSAmIDB4MEZdOwotICAgICAgY2hhckJ1ZmZlcltjaGFyQ250KytdID0gSEVYX0NIQVJTW25leHQgJiAweDBGXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFN0cmluZyhjaGFyQnVmZmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGJ5dGUgYnVmZmVyIHRvIGhleCBzdHJpbmcuCi0gICAqIEBwYXJhbSBkYXRhICBhIGJ5dGUgYXJyYXkuCi0gICAqIEByZXR1cm4gaGV4IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvSGV4U3RyaW5nKGJ5dGVbXSBieXRlRGF0YSkKLSAgewotICAgIGNoYXJbXSBIRVhfQ0hBUlMgPQotICAgICAgewotICAgICAgICAnMCcsCi0gICAgICAgICcxJywKLSAgICAgICAgJzInLAotICAgICAgICAnMycsCi0gICAgICAgICc0JywKLSAgICAgICAgJzUnLAotICAgICAgICAnNicsCi0gICAgICAgICc3JywKLSAgICAgICAgJzgnLAotICAgICAgICAnOScsCi0gICAgICAgICdBJywKLSAgICAgICAgJ0InLAotICAgICAgICAnQycsCi0gICAgICAgICdEJywKLSAgICAgICAgJ0UnLAotICAgICAgICAnRicgfTsKLQotCi0gICAgLy8gR2V0IGxlbmd0aAotICAgIGludCBsZW5ndGggPSBieXRlRGF0YS5sZW5ndGg7Ci0KLSAgICAvLyBDcmVhdGUgQ2hhciBidWZmZXIKLSAgICBjaGFyW10gY2hhckJ1ZmZlciA9IG5ldyBjaGFyW2xlbmd0aCAqIDJdOwotCi0gICAgaW50IG5leHQ7Ci0gICAgZm9yIChpbnQgYnl0ZUNudCA9IDAsIGNoYXJDbnQgPSAwOyBieXRlQ250IDwgbGVuZ3RoOykKLSAgICB7Ci0gICAgICBuZXh0ID0gYnl0ZURhdGFbYnl0ZUNudCsrXTsKLSAgICAgIGNoYXJCdWZmZXJbY2hhckNudCsrXSA9IEhFWF9DSEFSU1sobmV4dCA+Pj4gNCkgJiAweDBGXTsKLSAgICAgIGNoYXJCdWZmZXJbY2hhckNudCsrXSA9IEhFWF9DSEFSU1tuZXh0ICYgMHgwRl07Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ldyBTdHJpbmcoY2hhckJ1ZmZlcik7Ci0gIH0KLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBNSU1FIGNoYXJzZXQgZnJvbSBhIEhUVFAgaGVhZGVycy4KLSAgICogQHBhcmFtIGh0dHBIZWFkZXJzIFN0cmluZyBvZiBIVFRQIGhlYWRlci4KLSAgICogQHJldHVybiB0aGUgTUlNRSBjaGFyc2V0IHN0cmluZy4KLSAgICogQGF1dGhvciBLLk5ha2Fnb21lQEJlYWNvbklUIEphcGFuIFNJRyAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhUVFBDaGFyc2V0KFN0cmluZyBodHRwSGVhZGVycykKLSAgewotICAgIFN0cmluZyBtaW1lQ2hhcnNldCA9IG51bGw7Ci0KLSAgICBtaW1lQ2hhcnNldCA9IGh0dHBIZWFkZXJzLnRvVXBwZXJDYXNlKCk7Ci0gICAgaW50W10gaW5kZXggPSB7IC0xLCAtMSwgLTEgfTsKLSAgICBpbnQgaW5kZXhTID0gbWltZUNoYXJzZXQuaW5kZXhPZigiQ0hBUlNFVCIpOwotICAgIGludCBpbmRleEUgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKLSAgICBpZiAoaW5kZXhTIDwgMTcpCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgICBpbmRleFMgPSBtaW1lQ2hhcnNldC5pbmRleE9mKCI9IiwgaW5kZXhTICsgNyk7Ci0gICAgaWYgKGluZGV4UyA9PSAtMSkKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICAgIGluZGV4UysrOwotICAgIGluZGV4WzBdID0gbWltZUNoYXJzZXQuaW5kZXhPZigiJyIsIGluZGV4Uyk7Ci0gICAgaW5kZXhbMV0gPSBtaW1lQ2hhcnNldC5pbmRleE9mKCJcclxuIiwgaW5kZXhTKTsKLSAgICBpbmRleFsyXSA9IG1pbWVDaGFyc2V0LmluZGV4T2YoIlwiIiwgaW5kZXhTKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaW5kZXhbaV0gIT0gLTEgJiBpbmRleEUgPiBpbmRleFtpXSkKLSAgICAgIHsKLSAgICAgICAgaW5kZXhFID0gaW5kZXhbaV07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluZGV4RSAhPSBJbnRlZ2VyLk1BWF9WQUxVRSkKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9IGh0dHBIZWFkZXJzLnN1YnN0cmluZyhpbmRleFMsIGluZGV4RSk7Ci0gICAgICBtaW1lQ2hhcnNldC50cmltKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9ICIiOwotICAgIH0KLSAgICByZXR1cm4gbWltZUNoYXJzZXQ7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbWVzc2FnZSBpcyBhIHNpbXBsZSBTT0FQIG1lc3NhZ2Ugb3Igd2hldGhlciBpdCBpcyBhIFNPQVAgbWVzc2Fnd2Ugd2l0aCBhdHRhY2htZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc011bHRpcGFydFJlbGF0ZWRNZXNzYWdlKFN0cmluZyBodHRwSGVhZGVycykKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICB0cnkgCi0gICAgewotICAgICAgLy8gY2hlY2sgaGVhZGVyIGZvciBtaW1lIHZlcnNpb24gYW5kIGJvdW5kYXJ5Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyB0aGVyZSBpcyBubyBjb250ZW50VHlwZSwgY2hlY2sgaWYgdGhlcmUgaXMgYSBib3VuZGFyeSBhdHRyaWJ1dGUKLSAgICAgICAgU3RyaW5nIGJvdW5kYXJ5ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAiYm91bmRhcnkiKTsKLSAgICAgICAgaWYgKChib3VuZGFyeSAhPSBudWxsKSAmJiAoIWJvdW5kYXJ5LmVxdWFscygiIikpKQotICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJtdWx0aXBhcnQvcmVsYXRlZCIpOwotICAgICAgfQotICAgIH0gCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IGZhbHNlOyAKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEh0dHBIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIGh0dHBIZWFkZXJzLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgeyBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgCXRyeQotICAJewotICAgICByZXN1bHQgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShodHRwSGVhZGVycywgYXR0cmlidXRlTmFtZSk7Ci0gIAl9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IG51bGw7IAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIFN0cmluZyBzdWJBdHRyaWJ1dGVOYW1lKQotICB7IFN0cmluZyByZXN1bHQgPSBudWxsOwotICAJdHJ5Ci0gIAl7Ci0gICAgIHJlc3VsdCA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKGh0dHBIZWFkZXJzLCBhdHRyaWJ1dGVOYW1lLCBzdWJBdHRyaWJ1dGVOYW1lKTsKLSAgCX0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JeyAKLSAgICAJcmVzdWx0ID0gbnVsbDsgCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIG1pbWVIZWFkZXJzLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgeyBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgCXRyeQotICAJewotICAgICByZXN1bHQgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZShtaW1lSGVhZGVycywgYXR0cmlidXRlTmFtZSk7Ci0gIAl9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IG51bGw7IAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBtaW1lSGVhZGVycywgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIFN0cmluZyBzdWJBdHRyaWJ1dGVOYW1lKQotICB7IFN0cmluZyByZXN1bHQgPSBudWxsOwotICAJdHJ5Ci0gIAl7Ci0gICAgIHJlc3VsdCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKG1pbWVIZWFkZXJzLCBhdHRyaWJ1dGVOYW1lLCBzdWJBdHRyaWJ1dGVOYW1lKTsKLSAgCX0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JeyAKLSAgICAJcmVzdWx0ID0gbnVsbDsgCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gfQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBYTUwgZW5jb2RpbmcgZnJvbSBhIFNPQVAgTWVzc2FnZXMuCi0gICAqIEBwYXJhbSBtZXNzYWdlICBTT0FQIE1lc3NhZ2UgU3RyaW5nLiAKLSAgICogQHJldHVybiBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgWE1MLgotICAgKiBAYXV0aG9yIEsuTmFrYWdvbWVAQmVhY29uSVQgSmFwYW4gU0lHIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0WE1MRW5jb2RpbmcoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgeG1sRGVmID0gbnVsbDsKLQotICAgIGludCBpbmRleFMgPSBtZXNzYWdlLmluZGV4T2YoIjw/eG1sIik7Ci0gICAgaW50IGluZGV4RSA9IC0xOwotICAgIGlmIChpbmRleFMgIT0gLTEpCi0gICAgewotICAgICAgaW5kZXhFID0gbWVzc2FnZS5pbmRleE9mKCI/PiIsIGluZGV4Uyk7Ci0gICAgICBpZiAoaW5kZXhFID4gaW5kZXhTKQotICAgICAgewotICAgICAgICB4bWxEZWYgPSBtZXNzYWdlLnN1YnN0cmluZyhpbmRleFMsIGluZGV4RSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhtbERlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGluZGV4UyA9IHhtbERlZi5pbmRleE9mKCJlbmNvZGluZyIpOwotICAgICAgaWYgKGluZGV4UyA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgeG1sRGVmID0gIiI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHhtbERlZiA9IHhtbERlZi5zdWJzdHJpbmcoaW5kZXhTICsgOCk7Ci0gICAgICAgIHhtbERlZiA9IHhtbERlZi50cmltKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgaWYgKHhtbERlZi5sZW5ndGgoKSA+IDMpCi0gICAgewotICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoIj0iKTsKLSAgICAgIGlmIChpbmRleFMgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgeG1sRGVmID0geG1sRGVmLnN1YnN0cmluZygxKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh4bWxEZWYubGVuZ3RoKCkgPiAzKQotICAgIHsKLSAgICAgIFN0cmluZyBlbmQgPSAiXCIiOwotICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoZW5kKTsKLSAgICAgIGlmIChpbmRleFMgIT0gMCkKLSAgICAgIHsKLSAgICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoKGVuZCA9ICInIikpOwotICAgICAgfQotICAgICAgaWYgKGluZGV4UyA9PSAwKQotICAgICAgewotICAgICAgICBpbmRleEUgPSB4bWxEZWYuaW5kZXhPZihlbmQsIDMpOwotICAgICAgICBpZiAoaW5kZXhFICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgeG1sRGVmID0geG1sRGVmLnN1YnN0cmluZygxLCBpbmRleEUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHhtbERlZiA9ICIiOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHhtbERlZiA9ICIiOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geG1sRGVmOwotICB9Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIHByaXZhdGUgc3RhdGljIFJlc291cmNlQnVuZGxlIGphdmFFbmNvZGluZ1Jlc291cmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpBVkFfRU5DT0RJTkdfUkVTT1VSQ0UgPQotICAgICJvcmcud3NpLnRlc3QudXRpbC5KYXZhRW5jb2RpbmciOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9FTkNPRElOR19ERUZBVUxUID0gIlVURi04IjsKLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBKYXZhIFZNIHN1cHBvcnRlZCBjaGFyYWN0ZXIgZW5jb2RpbmcuCi0gICAqIAotICAgKiBAcGFyYW0gbWltZUVuY29kaW5nICBzdHJpbmcgb2YgTUlNRShJQU5BKSBjaGFyYWN0ZXIgZW5jb2RpbmcuIAotICAgKiBAcmV0dXJuIHN0cmluZyBvZiBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IEphdmEgVk0uCi0gICAqIEBhdXRob3IgSy5OYWthZ29tZUBCZWFjb25JVCBKYXBhbiBTSUcgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKYXZhRW5jb2RpbmcoU3RyaW5nIG1pbWVFbmNvZGluZykKLSAgewotICAgIGlmIChtaW1lRW5jb2RpbmcgPT0gbnVsbCB8fCBtaW1lRW5jb2RpbmcubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gSkFWQV9FTkNPRElOR19ERUZBVUxUOwotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoamF2YUVuY29kaW5nUmVzb3VyY2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF2YUVuY29kaW5nUmVzb3VyY2UgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoSkFWQV9FTkNPRElOR19SRVNPVVJDRSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gamF2YUVuY29kaW5nUmVzb3VyY2UuZ2V0U3RyaW5nKG1pbWVFbmNvZGluZyk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gbWltZUVuY29kaW5nOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGFuIGFycmF5IHRvIGEgVmVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGFycmF5ICB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkIC4KLSAgICogQHJldHVybiBjb252ZXJ0ZWQgVmVjdG9yIChudWxsIGlmIGFycmF5IGlzIG51bGwsIGVtcHR5IGlmIGVtcHR5KS4KLSAgICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCBJQk0KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGFycmF5VG9WZWN0b3IoT2JqZWN0W10gYXJyYXkpCi0gIHsKLSAgICBpZiAoYXJyYXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcihhcnJheS5sZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICB2LmFkZChhcnJheVtpXSk7Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLQotICAvKioKLSAgICogRGVzaWduYXRlcyBsZWdhbCB2ZXJzaW9ucyBmb3IgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQKLSAgICogQHBhcmFtIG5hbWUgLSB0aGUgVEFEIG5hbWUKLSAgICogQHBhcmFtIHZlcnNpb24gLSB0aGUgbGVnYWwgdmVyc2lvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVmFsaWRQcm9maWxlVEFEVmVyc2lvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHZlcnNpb24pCi0gIHsKLSAgICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucyA9PSBudWxsKQotICAgICAgICAgIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zLnB1dChuYW1lLCB2ZXJzaW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENoZWNrcyB0byBlbnN1cmUgdGhhdCB2ZXJzaW9uIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIAotICAgKiBkb2N1bWVudCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRvb2xzLgotICAgKiBAcGFyYW0gcHJvZmlsZUFzc2VydGlvbnMgLSBhIHByb2ZpbGUgVEFELgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24KLSAgICogICAgICAgICBkb2N1ZW1lbnQgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkUHJvZmlsZVRBRFZlcnNpb24oUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnMpCi0gIHsKLQotICAgIFN0cmluZyBuYW1lID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFETmFtZSgpOwotICAgIFN0cmluZyB2ZXJzaW9uID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFEVmVyc2lvbigpOwotICAgIAotICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucyA9PSBudWxsKSB7Ci0gICAgICAgU3RyaW5nIHZlcnNpb25zW11bXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRBbGxUQURWZXJzaW9ucygpOwotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVyc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgIHJlZ2lzdGVyVmFsaWRQcm9maWxlVEFEVmVyc2lvbih2ZXJzaW9uc1tpXVswXSwgdmVyc2lvbnNbaV1bMV0pOwotICAgIH0KLQotICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrVmVyc2lvbk51bWJlcigoU3RyaW5nKSB2YWxpZFByb2ZpbGVUQURWZXJzaW9ucy5nZXQobmFtZSksCi0gICAgICAgICAgICAgICAgdmVyc2lvbik7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRvIGVuc3VyZSB0aGF0IHZlcnNpb24gbnVtYmVyIG9mIHRoZSBhY3R1YWwgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbiAKLSAgICogZG9jdW1lbnQgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICogQHBhcmFtIHN1cHBvcnRlZFZlcnNpb24gLSBzdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgb2YgcHJvZmlsZSBUQUQuCi0gICAqIEBwYXJhbSBhY3R1YWxWZXJzaW9uICAgIC0gYWN0dWFsIHZlcnNpb24gbnVtYmVyIG9mIHByb2ZpbGUgVEFELiAKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgYWN0dWFsIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24KLSAgICogICAgICAgICBkb2N1bWVudCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRvb2xzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja1ZlcnNpb25OdW1iZXIoCi0gICAgU3RyaW5nIHN1cHBvcnRlZFZlcnNpb24sCi0gICAgU3RyaW5nIGFjdHVhbFZlcnNpb24pCi0gIHsKLSAgICBib29sZWFuIHZhbGlkVmVyc2lvbiA9IHRydWU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3VwcG9ydGVkVmVyc2lvblRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3VwcG9ydGVkVmVyc2lvbiwgIi4iKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBhY3R1YWxWZXJzaW9uVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihhY3R1YWxWZXJzaW9uLCAiLiIpOwotCi0gICAgICB3aGlsZSAoc3VwcG9ydGVkVmVyc2lvblRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkgJiYgdmFsaWRWZXJzaW9uKQotICAgICAgewotICAgICAgICBpbnQgc3VwcG9ydGVkVmVyc2lvblRva2VuID0KLSAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KHN1cHBvcnRlZFZlcnNpb25Ub2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgICAgICBpZiAoYWN0dWFsVmVyc2lvblRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgYWN0dWFsVmVyc2lvblRva2VuID0KLSAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQoYWN0dWFsVmVyc2lvblRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICAgICAgaWYgKHN1cHBvcnRlZFZlcnNpb25Ub2tlbiA+IGFjdHVhbFZlcnNpb25Ub2tlbikgYnJlYWs7Ci0gICAgICAgICAgZWxzZSB2YWxpZFZlcnNpb24gPSAoc3VwcG9ydGVkVmVyc2lvblRva2VuID49IGFjdHVhbFZlcnNpb25Ub2tlbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHZhbGlkVmVyc2lvbiA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRWZXJzaW9uOwotICB9Ci0gIAotICAvKioKLSAgICogSWRlbnRpZmllcyB0aGUgcm9vdCBwYXJ0IGluIHRoZSBsaXN0IHVzaW5nIHRoZSAic3RhcnQiIGF0dHJpYnV0ZS4KLSAgICogSWYgdGhlICJzdGFydCIgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0IHRoZW4gdGhlIGZpcnN0IHBhcnQgaXMgZGVzaWduYXRlZCB0aGUgcm9vdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnQgZmluZFJvb3RQYXJ0KFN0cmluZyBodHRwSGVhZGVycywgQ29sbGVjdGlvbiBwYXJ0cykKLSAgewotICAJTWltZVBhcnQgcm9vdCA9IG51bGw7Ci0gICAgU3RyaW5nIHN0YXJ0ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAic3RhcnQiKTsKLSAgICBpZiAoIXBhcnRzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBmaXJzdCBwYXJ0IGluIHRoZSBjb2xsZWN0aW9uCi0gICAgICByb290ID0gKE1pbWVQYXJ0KXBhcnRzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIAkKLSAgICAgIGlmICgoc3RhcnQgIT0gbnVsbCkgJiYgKCFzdGFydC5lcXVhbHMoIiIpKSkKLSAgICAgIHsKLSAgICAJSXRlcmF0b3IgaSA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgCWJvb2xlYW4gcm9vdE5vdEZvdW5kID0gdHJ1ZTsKLSAgICAJd2hpbGUgKGkuaGFzTmV4dCgpICYmIHJvb3ROb3RGb3VuZCkKLSAgICAJewotICAgIAkgIE1pbWVQYXJ0IHBhcnQgPSAoTWltZVBhcnQpaS5uZXh0KCk7Ci0gICAgCSAgU3RyaW5nIGhlYWRlcnMgPSBwYXJ0LmdldEhlYWRlcnMoKTsKLSAgICAJICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgIAkgIHsKLSAgICAgICAgICAgIFN0cmluZyBjb250ZW50SWQgPSBVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKGhlYWRlcnMsIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotICAgICAgICAgICAgaWYgKHN0YXJ0LmVxdWFscyhjb250ZW50SWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByb290ID0gcGFydDsKLQkJCSAgcm9vdE5vdEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgCSAgfQotICAgIAl9Ci0gICAgICB9Ci0gICAgfQotICAJcmV0dXJuIHJvb3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBEZWNvZGVzIHRoZSBnaXZlbiBlbmNvZGVkIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGRlY29kZUJhc2U2NChTdHJpbmcgc3RyKQotICB7Ci0gIAl0cnkKLSAgCXsKLSAgICAJc3VuLm1pc2MuQkFTRTY0RGVjb2RlciBkZWNvZGVyID0gIG5ldyBzdW4ubWlzYy5CQVNFNjREZWNvZGVyKCk7Ci0gIAkgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlQnVmZmVyKHN0cik7Ci0gIAl9Ci0gIAljYXRjaCAoRXhjZXB0aW9uIGUpCi0gIAl7Ci0gIAkJcmV0dXJuIG5ldyBieXRlWzBdOwotICAJfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuY29kZXMgdGhlIGdpdmVuIGJ5dGUgYXJyYXkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNvZGVCYXNlNjQoYnl0ZVtdIGJ1ZmZlcikKLSAgeyAgICAKLSAgCXN1bi5taXNjLkJBU0U2NEVuY29kZXIgZW5jb2RlciA9ICBuZXcgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcigpOwotICAJcmV0dXJuIGVuY29kZXIuZW5jb2RlQnVmZmVyKGJ1ZmZlcik7ICAKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnRzIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gIAlieXRlW10gYnVmZmVyID0gbnVsbDsKLSAgCXRyeQotCXsgCi0gIAkgIGJ1ZmZlciA9IG1lc3NhZ2UuZ2V0Qnl0ZXMoZW5jb2RpbmcpOwotCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSkKLQl7Ci0gIAkJcmV0dXJuIG51bGw7Ci0JfQotICAJcmV0dXJuIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoYnVmZmVyLCBodHRwSGVhZGVycywgZW5jb2RpbmcpOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnRzIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoYnl0ZVtdIG1lc3NhZ2UsIFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gICAgTWltZVBhcnRzIG1pbWVQYXJ0cyA9IG5ldyBNaW1lUGFydHNJbXBsKCk7Ci0gICAgU3RyaW5nIGJvdW5kYXJ5ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAiYm91bmRhcnkiKTsKLSAgICBBcnJheUxpc3QgcGFydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgaWYgKGJvdW5kYXJ5ID09IG51bGwpCi0gICAgewotICAgIAkvLyBhc3N1bWUgaXQgaXMgYSBzaW1wbGUgU09BUCBtZXNzYWdlCi0gICAgCXJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHN0YXJ0ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAic3RhcnQiKTsKLSAgICAgIGludFtdIGluZGljZXMgPSBVdGlscy5nZXRCb3VuZGFyeUluZGljZXMobWVzc2FnZSwgYm91bmRhcnkpOwotICAgICAgYm9vbGVhbiByb290Tm90Rm91bmQgPSB0cnVlOwotICAgICAgCi0gICAgICBmb3IgKGludCBpPSBpbmRpY2VzLmxlbmd0aCAtIDI7IGk+PTA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgCXsKLSAgICAgICAgICBNaW1lUGFydCBwYXJ0ID0gbmV3IE1pbWVQYXJ0SW1wbCgpOwotICAgICAgICAgIGludCBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSwgaW5kaWNlc1tpXSk7Ci0gICAgICAgICAgaWYgKChpbmRleCA+IGluZGljZXNbaV0pICYmIChpbmRleCA8IGluZGljZXNbaSsxXSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdGhlIGJvdW5kYXJ5IHN0cmluZyAmIG1pbWUgaGVhZGVycyAoaW5jbHVkZSB0aGUgdHJhaWxpbmcgQ1JMRiBDUkxGKQotICAgICAgICAJU3RyaW5nIHN0ciA9IG5ldyBTdHJpbmcobWVzc2FnZSwgaW5kaWNlc1tpXSwgKGluZGV4IC0gaW5kaWNlc1tpXSksICJVUy1BU0NJSSIpOwotICAgICAgICAJU3RyaW5nIGRlbGltaXRlciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmluZGV4T2YoIlxyXG4iLCAyKSArIDIpOwotCi0gICAgICAgIAlpZiAoaSA9PSBpbmRpY2VzLmxlbmd0aCAtMikKLSAgICAgICAgCXsKLSAgICAgICAgCSAgU3RyaW5nIGVuZERlbGltaXRlciA9IG5ldyBTdHJpbmcobWVzc2FnZSwgaW5kaWNlc1tpICsgMV0sIG1lc3NhZ2UubGVuZ3RoIC0gaW5kaWNlc1tpICsgMV0sICJVUy1BU0NJSSIpOwotICAgICAgICAJICBpbnQgaiA9IHN0ci5pbmRleE9mKCJcclxuIiwgMik7Ci0gICAgICAgIAkgIGlmIChqICE9IC0xKQotICAgICAgICAJICAgIGVuZERlbGltaXRlciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmluZGV4T2YoIlxyXG4iLCAyKSArIDIpOwotICAgICAgICAgICAgICBwYXJ0LnNldEJvdW5kYXJ5U3RyaW5ncyhuZXcgU3RyaW5nW117ZGVsaW1pdGVyLCBlbmREZWxpbWl0ZXJ9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCWVsc2UKLSAgICAgICAgCSAgcGFydC5zZXRCb3VuZGFyeVN0cmluZ3MobmV3IFN0cmluZ1tde2RlbGltaXRlcn0pOwotICAgICAgIAotICAgICAgICAJLy8gdGhlIGhlYWRlcnMKLSAgICAgICAgCVN0cmluZyBoZWFkZXJzID0gc3RyLnN1YnN0cmluZyhkZWxpbWl0ZXIubGVuZ3RoKCkpOwotICAgICAgICAgICAgaWYgKGhlYWRlcnMuc3RhcnRzV2l0aCgiXHJcbiIpKQotICAgICAgICAgICAgewotICAgICAgICAgIAkgIC8vIG5vIGhlYWRlcnMgcHJlc2VudAotICAgICAgICAgIAkgIHBhcnQuc2V0SGVhZGVycygiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgCSAgcGFydC5zZXRIZWFkZXJzKGhlYWRlcnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyB0aGUgY29udGVudAotICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRJZCA9IFV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoaGVhZGVycywgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IGluZGljZXNbaSsxXSAtIChpbmRleCk7Ci0gICAgICAgICAJYnl0ZVtdIGNvbnRlbnQgPSBuZXcgYnl0ZVtzaXplXTsKLSAgICAgIAkgICAgU3lzdGVtLmFycmF5Y29weShtZXNzYWdlLCBpbmRleCwgY29udGVudCwgMCwgc2l6ZSk7Ci0gICAgICAJICAKLSAgICAgICAgICAgIGlmICgocm9vdE5vdEZvdW5kICYmIChpID09IDApKSB8fAotICAgICAgICAgICAgCSgoc3RhcnQgIT0gbnVsbCkgJiYgKCFzdGFydC5lcXVhbHMoIiIpKSAmJiAoc3RhcnQuZXF1YWxzKGNvbnRlbnRJZCkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gcm9vdCBwYXJ0IC0tIGRvIG5vdCBlbmNvZGUKLSAgICAgICAgICAgICAgcGFydC5zZXRDb250ZW50KG5ldyBTdHJpbmcoY29udGVudCwgZW5jb2RpbmcpKTsKLSAgICAgICAgICAgICAgbWltZVBhcnRzLnNldFJvb3RQYXJ0KHBhcnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgdHJhbnNmZXJFbmNvZGluZyA9ICBVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKGhlYWRlcnMsIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcpOwotICAgCi0gICAgICAgICAgICAgIGlmICgodHJhbnNmZXJFbmNvZGluZyAhPSBudWxsKSAmJiB0cmFuc2ZlckVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpKQotICAgICAgICAgICAgICAJcGFydC5zZXRDb250ZW50KG5ldyBTdHJpbmcoY29udGVudCwgZW5jb2RpbmcpKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBhcnQuc2V0Q29udGVudChVdGlscy5lbmNvZGVCYXNlNjQoY29udGVudCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgICAgICB9Ci0gICAgCX0KLSAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIAl7Ci0gICAgCSAgcmV0dXJuIG51bGw7Ci0gICAgCX0KLSAgICAgIH0KLSAgICAgIGludCBzaXplID0gcGFydHMuc2l6ZSgpOwotICAgICAgZm9yIChpbnQgaSA9IHNpemUtMTsgaT49MDsgaS0tKQotICAgICAgICAgbWltZVBhcnRzLmFkZFBhcnQoKE1pbWVQYXJ0KXBhcnRzLmdldChpKSk7Ci0gICAgfQotICAgIHJldHVybiBtaW1lUGFydHM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1hNTFN0cmluZyhNaW1lUGFydHMgbWltZVBhcnRzKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIC8vIEFkZCBtZXNzYWdlIGNvbnRlbnQgd2l0aCBhdHRhY2htZW50cyBlbGVtZW50Ci0gICAgcHcucHJpbnQoIjwiICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMpOwotICAgIHB3LnByaW50KCI+Iik7Ci0KLSAgICBDb2xsZWN0aW9uIHBhcnRMaXN0ID0gbWltZVBhcnRzLmdldFBhcnRzKCk7Ci0gICAgaWYgKCFwYXJ0TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgIAlJdGVyYXRvciBpTWltZVBhcnRzID0gcGFydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpTWltZVBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgCSAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAJICBwdy5wcmludChtaW1lUGFydC50b1hNTFN0cmluZygiIikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMgKyAiPiIpOwotICAgIC8vIFJldHVybiBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKQotICB7Ci0gIAl0cnkKLQl7Ci0gIAkgIEZpbGVJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oImQ6XFxiLnhtbCIpOwotICAJICBpbnQgaSA9IGlucHV0U3RyZWFtLmF2YWlsYWJsZSgpOwotICAJICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbaV07Ci0gIAkgIGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLSAgCSAgU3RyaW5nIG1lc3NhZ2UgPSBuZXcgU3RyaW5nKGJ1ZmZlcik7Ci0gIAkgIG1lc3NhZ2UgPSBYTUxVdGlscy54bWxSZW1vdmVFc2NhcGVkU3RyaW5nKG1lc3NhZ2UpOwotICAJICBTdHJpbmcgaGVhZGVycyA9IFV0aWxzLmdldEhUVFBIZWFkZXJzKG1lc3NhZ2UpOwotICAJICBNaW1lUGFydHMgcGFydHMgPSBVdGlscy5wYXJzZU11bHRpcGFydFJlbGF0ZWRNZXNzYWdlKG1lc3NhZ2UsIGhlYWRlcnMsIFV0aWxzLkpBVkFfRU5DT0RJTkdfREVGQVVMVCk7Ci0gIAkgIFN5c3RlbS5vdXQucHJpbnRsbihVdGlscy50b1hNTFN0cmluZyhwYXJ0cykpOwotCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSl7fQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBBbmFseXplckNvbmZpZyBnZXRBbmFseXplckNvbmZpZyhSZXBvcnRlciByZXBvcnRlcikgCi0gIHsKLQlBbmFseXplckNvbmZpZyByZXN1bHQgPSBudWxsOwotCWlmIChyZXBvcnRlciAhPSBudWxsKQotCXsKLQkgIHRyeQotCSAgewotCQlyZXN1bHQgPSByZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRSZXBvcnRDb250ZXh0KCkuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpOwotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgewotCQlyZXN1bHQgPSBudWxsOwotCSAgfQotCX0KLQlyZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTRExVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTRExVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZGU2YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9XU0RMVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotCi0vKioKLSAqIFRoZSB1dGlsaXR5IGNsYXNzIHRvIGF1dG9tYXRlIFdTREwgcHJvY2Vzc2luZy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETFV0aWwKLXsKLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBleHRyYWN0cyBsaXN0IG9mIHBhcnRzIGZvciB0aGUgZ2l2ZW4gc29hcGJpbmQ6Ym9keSwKLSAgICogYmluZGluZyBvcGVyYXRpb24sIG1lc3NhZ2UsIGFuZCBzdHlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBvcCBhbiBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBtICBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBib2R5IGEgU09BUCBib2R5LgotICAgKiBAcGFyYW0gc3R5bGUgYW4gb3BlcmF0aW9uIHN0eWxlLgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgcGFydHMgZm9yIHRoZSBnaXZlbiBzb2FwYmluZDpib2R5LAotICAgKiAgICAgICAgIGJpbmRpbmcgb3BlcmF0aW9uLCBtZXNzYWdlLCBhbmQgc3R5bGUuCi0gICAqLwotICBzdGF0aWMgcHVibGljIExpc3QgZ2V0UGFydHMoCi0gICAgT3BlcmF0aW9uIG9wLAotICAgIE1lc3NhZ2UgbSwKLSAgICBTT0FQQm9keSBib2R5LAotICAgIFN0cmluZyBzdHlsZSkKLSAgewotICAgIC8vCQlpZiBudWxsLCBnZXQgcGFydHMgZnJvbSBtZXNzYWdlIAotICAgIGlmIChib2R5LmdldFBhcnRzKCkgPT0gbnVsbCkKLSAgICAgIC8vIGlmIHJwYyBzdHlsZSBpcyB1c2VkLCB0cnkgdG8gdXNlIHBhcnRPcmRlciBhdHRyaWJ1dGUgZnJvbSBvcGVyYXRpb24KLSAgICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhzdHlsZSkpCi0gICAgICAgIHJldHVybiBtLmdldE9yZGVyZWRQYXJ0cyhvcC5nZXRQYXJhbWV0ZXJPcmRlcmluZygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG0uZ2V0T3JkZXJlZFBhcnRzKG51bGwpOwotICAgIGVsc2UKLSAgICAgIC8vIGNvbnZlcnNlIHBhcnRzIG5hbWUgdG8gcGFydHMgb2JqZWN0cwotICAgICAgcmV0dXJuIG0uZ2V0T3JkZXJlZFBhcnRzKGJvZHkuZ2V0UGFydHMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBpdGVyYXRlcyBhbGwgaW1wb3J0cyBmcm9tIHRoZSBnaXZlbiBkZWZpbml0aW9uIGFuZCBleHBhbmRzIGFsbAotICAgKiBpbXBvcnRlZCBtZXNzYWdlcywgc2VydmljZSwgcG9ydFR5cGVzLCBhbmQgYmluZGluZ3MgdG8gdGhlIGRlZmluaXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gZGVmIGEgV1NETCBkZWZpbml0aW9uLgotICAgKi8KLSAgc3RhdGljIHB1YmxpYyB2b2lkIGV4cGFuZERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBpZiAoZGVmICE9IG51bGwgJiYgZGVmLmdldEltcG9ydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gZGVmLmdldEltcG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCB2ID0gKExpc3QpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHYuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgICAgICAgIGV4cGFuZERlZmluaXRpb24oZGVmLCAoSW1wb3J0KSBpdDIubmV4dCgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBpbnRlcm5hbCBtZXRob2QgdG8gZXhwYW5kIGRlZmluaXRpb24uCi0gICAqIEBwYXJhbSB0YXJnZXQgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gaW0gaW50ZXJuYWwgbWV0aG9kLgotICAgKi8KLSAgc3RhdGljIHByaXZhdGUgdm9pZCBleHBhbmREZWZpbml0aW9uKERlZmluaXRpb24gdGFyZ2V0LCBJbXBvcnQgaW0sIExpc3QgcHJvY2Vzc2VkRGVmaW5pdGlvbnMpCi0gIHsKLSAgICBpZiAoaW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGQgPSBpbS5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoKGQgIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWREZWZpbml0aW9ucy5jb250YWlucyhkKSkpCi0gICAgICB7Ci0gICAgCXByb2Nlc3NlZERlZmluaXRpb25zLmFkZChkKTsKLQotICAgICAgICBpZiAoZC5nZXRNZXNzYWdlcygpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IGQuZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgICB0YXJnZXQuYWRkTWVzc2FnZSgoTWVzc2FnZSkgaXQubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZC5nZXRQb3J0VHlwZXMoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHRhcmdldC5hZGRQb3J0VHlwZSgoUG9ydFR5cGUpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQuZ2V0QmluZGluZ3MoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgdGFyZ2V0LmFkZEJpbmRpbmcoKEJpbmRpbmcpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQuZ2V0U2VydmljZXMoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgdGFyZ2V0LmFkZFNlcnZpY2UoKFNlcnZpY2UpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciBpdCA9IGQuZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IHYgPSAoTGlzdCkgaXQubmV4dCgpOwotICAgICAgICAgIGlmICh2ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3IgaXQyID0gdi5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGl0Mi5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIGV4cGFuZERlZmluaXRpb24odGFyZ2V0LCAoSW1wb3J0KSBpdDIubmV4dCgpLCBwcm9jZXNzZWREZWZpbml0aW9ucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgZXh0cmFjdHMgcGFydCBmcm9tIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBTT0FQIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJ0IGEgcGFydCBuYW1lLgotICAgKiBAcmV0dXJuIHBhcnQgZnJvbSB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqLwotICBzdGF0aWMgcHVibGljIFBhcnQgZ2V0UGFydChNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBwYXJ0KQotICB7Ci0gICAgUGFydCBtZXNQYXJ0ID0gbnVsbDsKLSAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgbWVzUGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5nZXQoMCk7Ci0gICAgZWxzZQotICAgICAgbWVzUGFydCA9IG1lc3NhZ2UuZ2V0UGFydChwYXJ0KTsKLSAgICByZXR1cm4gbWVzUGFydDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9XU0lQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTSVByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExNDAzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTSVByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7Ci0KLS8qKgotICogVGhlIFdTSSBwcm9wZXJ0aWVzIGNhbiBiZSBkZWZpbmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnMuICAKLSAqCi0gKiAgIDEuIFRoZSB3c2kucHJvcGVydGllcyBmaWxlIHdoaWNoIGNhbiBiZSBsb2NhdGVkIGFueXdoZXJlIGluIHRoZSBjbGFzc3BhdGguCi0gKiAgIDIuIFRoZSBzeXN0ZW0gcHJvcGVydHkgc2V0dGluZ3MuCi0gKiAgIDMuIFRoZSB0aHJlYWQgbG9jYWwgcHJvcGVydHkgc2V0dGluZ3MuCi0gKiAKLSAqIFRoZSBwcm9wZXJ0aWVzIGFyZSBzZXQgYmFzZWQgb24gdGhpcyBvcmRlcmluZy4gIEZvciBleGFtcGxlLCB0aGUgcHJvcGVydGllcyAKLSAqIGZyb20gdGhlIHdzaS5wcm9wZXJ0aWVzIGZpbGUgd2lsbCBiZSByZXBsYWNlZCBieSBwcm9wZXJ0aWVzIGZyb20gdGhlIHN5c3RlbSAKLSAqIHByb3BlcnR5IHNldHRpbmdzLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB0aHJlYWQgbG9jYWwgcHJvcGVydHkgc2V0dGluZ3MuCi0gKgotICogVGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgY2FuIGJlCi0gKiBzcGVjaWZpZWQgYXMgc3lzdGVtIHByb3BlcnRpZXMgb3IgYXMgcHJvcGVydGllcyB0aGF0IGFyZSBzZXQgaW4gYSB0aHJlYWQgCi0gKiBsb2NhbCB2YXJpYWJsZS4gIFN5c3RlbSBwcm9wZXJ0aWVzIHNob3VsZCBiZSB1c2VkIGlmIG9ubHkgb25lIGltcGxlbWVudGF0aW9uCi0gKiBpcyBuZWVkZWQgcGVyIEpWTS4gIElmIHR3byBvciBtb3JlIGltcGxlbWVudGF0aW9ucyBhcmUgbmVlZGVkIHBlciBKVk0sIHRoZW4KLSAqIHRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXQgdXNpbmcgdGhlIHRocmVhZCBsb2NhbCB2YXJpYWJsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvcjogUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NJUHJvcGVydGllcwotewotICAvKioKLSAgICogUHJvcGVydGllcyBvYmplY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFByb3BlcnRpZXMgd3NpUHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9WQUxJREFUT1JfRkFDVE9SWSA9Ci0gICAgIm9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkgPQotICAgICJ3c2kucHJvZmlsZS52YWxpZGF0b3IuZmFjdG9yeSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgZG9jdW1lbnQgZmFjdG9yeSBjbGFzcyBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX0RPQ1VNRU5UX0ZBQ1RPUlkgPQotICAgICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudEZhY3RvcnlJbXBsIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgdGhhdCBjb250YWlucyBkb2N1bWVudCBmYWN0b3J5IGNsYXNzIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0RPQ1VNRU5UX0ZBQ1RPUlkgPSAid3NpLmRvY3VtZW50LmZhY3RvcnkiOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IEpBWFAgWE1MIHBhcnNlciBkb2N1bWVudCBmYWN0b3J5IGJ1aWxkZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfSkFYUF9ET0NVTUVOVF9GQUNUT1JZID0KLSAgICAib3JnLmFwYWNoZS54ZXJjZXMuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgSkFYUCBYTUwgcGFyc2VyIGRvY3VtZW50IGZhY3RvcnkgYnVpbGRlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfSkFYUF9ET0NVTUVOVF9GQUNUT1JZID0KLSAgICAiamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfV1NETF9TQ0hFTUEgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9XU0RMX1NDSEVNQSA9ICJ3c2kuYW5hbHl6ZXIud3NkbC5zY2hlbWEiOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IFdTREwgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfV1NETF9TT0FQX1NDSEVNQSA9Ci0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFdTREwgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1dTRExfU09BUF9TQ0hFTUEgPQotICAgICJ3c2kuYW5hbHl6ZXIud3NkbHNvYXAuc2NoZW1hIjsKLQotICAvKioKLSAgICogRGVmYXVsdCBXU0RMIE1JTUUgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1dTRExfTUlNRV9TQ0hFTUEgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgdGhhdCBjb250YWlucyBXU0RMIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9XU0RMX01JTUVfU0NIRU1BID0KLSAgICAid3NpLmFuYWx5emVyLndzZGxtaW1lLnNjaGVtYSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfU09BUF9TQ0hFTUEgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1NPQVBfU0NIRU1BID0gIndzaS5hbmFseXplci5zb2FwLnNjaGVtYSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfWE1MX1NDSEVNQSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9YTUxfU0NIRU1BID0gIndzaS5hbmFseXplci54bWxzY2hlbWEuc2NoZW1hIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgd2hpY2ggY29udGFpbnMgV1NJX0hPTUUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1dTSV9IT01FID0gIndzaS5ob21lIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgZmlsZSBuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9GSUxFTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC53c2kiOwotCi0gIC8qKgotICAqIFRocmVhZCBsb2NhbCB2YXJpYWJsZS4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkTG9jYWwgdGhyZWFkTG9jYWwgPSBuZXcgVGhyZWFkTG9jYWwoKTsKLQotICAvLyBMb2FkIHByb2ZpbGVzIGZpbGUKLSAgc3RhdGljIHsKLSAgICBsb2FkUHJvcGVydGllc0ZpbGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb2FkIHByb3BlcnRpZXMgZnJvbSB3c2kucHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2FkUHJvcGVydGllc0ZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVHJ5IHRvIGxvYWQgcHJvcGVydGllcyBmcm9tIHdzaS5wcm9wZXJ0aWVzCi0gICAgICAvL0lucHV0U3RyZWFtIGlzID0gVXRpbHMuZ2V0SW5wdXRTdHJlYW0oUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIExvYWQgcHJvcGVydGllcyBmcm9tIGZpbGUKLSAgICAgIC8vd3NpUHJvcGVydGllc0ZpbGUubG9hZChpcyk7Ci0KLSAgICAgIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFBST1BfRklMRU5BTUUpOwotCi0gICAgICBTdHJpbmcgbmV4dEtleTsKLSAgICAgIEVudW1lcmF0aW9uIGVudW1lcmF0aW9uID0gcmVzb3VyY2VCdW5kbGUuZ2V0S2V5cygpOwotICAgICAgd2hpbGUgKGVudW1lcmF0aW9uLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBuZXh0S2V5ID0gKFN0cmluZykgZW51bWVyYXRpb24ubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgd3NpUHJvcGVydGllcy5wdXQobmV4dEtleSwgcmVzb3VyY2VCdW5kbGUuZ2V0U3RyaW5nKG5leHRLZXkpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgIldBUk5JTkc6ICBDb3VsZCBub3QgcmVhZCAiCi0gICAgICAgICAgKyBQUk9QX0ZJTEVOQU1FCi0gICAgICAgICAgKyAiLiAgIgotICAgICAgICAgICsgIlZlcmlmeSB0aGF0IGl0IGlzIGluIHRoZSBDTEFTU1BBVEguIik7Ci0KLSAgICAgIC8vIFNldCB1cCBkZWZhdWx0IHZhbHVlcwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoUFJPUF9WQUxJREFUT1JfRkFDVE9SWSwgREVGX1ZBTElEQVRPUl9GQUNUT1JZKTsKLSAgICAgIHdzaVByb3BlcnRpZXMucHV0KFBST1BfRE9DVU1FTlRfRkFDVE9SWSwgREVGX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoUFJPUF9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlksIERFRl9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoCi0gICAgICAgIFRyYW5zcG9ydEZhY3RvcnkuUFJPUEVSVFlfTkFNRSwKLSAgICAgICAgIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZUF4aXNUcmFuc3BvcnQiKTsKLSAgICB9Ci0gIH0KLQotICAvKiogCi0gICAqIERvIG5vdCBhbGxvdyB0aGlzIG9iamVjdCB0byBiZSBpbnN0YW50aWF0ZWQuCi0gICAqLwotICBwcml2YXRlIFdTSVByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXQgcHJvcGVydGllcyB0aGF0IHdlcmUgc2V0IGZvciB0aGlzIHRocmVhZCBvbmx5LgotICAgICogQHJldHVybiB0aGUgcHJvcGVydGllcyB0aGF0IHdlcmUgc2V0IGZvciB0aGlzIHRocmVhZCBvbmx5LgotICAgICoKLSAgICAqIEBzZWUgI3NldFRocmVhZExvY2FsUHJvcGVydGllcwotICAgICovCi0gIHB1YmxpYyBzdGF0aWMgUHJvcGVydGllcyBnZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMoKQotICB7Ci0gICAgLy8gUmV0dXJuIHByb3BlcnRpZXMKLSAgICByZXR1cm4gKFByb3BlcnRpZXMpIHRocmVhZExvY2FsLmdldCgpOwotICB9Ci0KLSAgLyoqIAotICAgKiBTZXQgcHJvcGVydGllcyBmb3IgdGhpcyB0aHJlYWQgb25seS4KLSAgICogQHBhcmFtIHByb3BzICBhIFByb3BlcnRpZXMgb2JqZWN0LgotICAgKgotICAgKiBAc2VlICNnZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKLSAgewotICAgIC8vIFNhdmUgdGhlIHByb3BlcnRpZXMgYXMgdGhyZWFkIGxvY2FsIHZhcmlhYmxlcwotICAgIHRocmVhZExvY2FsLnNldChwcm9wcyk7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldCB0aGUgcHJvcGVydHkgdmFsdWUgZ2l2ZW4gdGhlIHByb3BlcnR5IG5hbWUuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgIGEgcHJvcGVydHkgbmFtZS4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZS4gSWYgbm90IGZvdW5kIHJldHVybiBudWxsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gbnVsbDsKLSAgICBQcm9wZXJ0aWVzIHRocmVhZExvY2FsUHJvcHMgPSBudWxsOwotCi0gICAgLy8gMS4gTG9vayBpbiB0aHJlYWQgbG9jYWwgcHJvcGVydGllcyBmaXJzdAotICAgIGlmICgodGhyZWFkTG9jYWxQcm9wcyA9IGdldFRocmVhZExvY2FsUHJvcGVydGllcygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VmFsdWUgPSB0aHJlYWRMb2NhbFByb3BzLmdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci0gICAgfQotCi0gICAgLy8gMi4gTmV4dCBsb29rIGluIHN5c3RlbSBwcm9wZXJ0aWVzIAotICAgIGlmIChwcm9wZXJ0eVZhbHVlID09IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlWYWx1ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIDMuIExhc3QgbG9vayBpbiB0aGUgcHJvcGVydGllcyBmaWxlCi0gICAgaWYgKHByb3BlcnR5VmFsdWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVZhbHVlID0gd3NpUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBwcm9wZXJ0eSB2YWx1ZQotICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwotICB9Ci0KLSAgLyoqIAotICAgKiBHZXQgdGhlIHByb3BlcnR5IHZhbHVlIGdpdmVuIHRoZSBwcm9wZXJ0eSBuYW1lLgotICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lICBhIHByb3BlcnR5IG5hbWUuCi0gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlLiBJZiBub3QgZm91bmQgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gbnVsbDsKLQotICAgIC8vIElmIHRoZSBwcm9wZXJ0eVZhbHVlIHdhcyBub3QgZm91bmQsIHRoZW4gcmV0dXJuIGRlZmF1bHQgdmFsdWUKLSAgICBpZiAoKHByb3BlcnR5VmFsdWUgPSBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHByb3BlcnR5IHZhbHVlCi0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1bml0IHRlc3QgdGhpcyBjbGFzcy4KLSAgICogQHBhcmFtIGFyZ3MgIHRoZSBhcmd1bWVudHMgZm9yIG1haW4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2V0IHByb3BlcnR5IGZvciB0aGlzIHRocmVhZAotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5zZXRQcm9wZXJ0eShQUk9QX1ZBTElEQVRPUl9GQUNUT1JZLCAibWFpbiIpOwotICAgICAgV1NJUHJvcGVydGllcy5zZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMocHJvcHMpOwotCi0gICAgICAvLyBTdGFydCBmb3VyIHRocmVhZHMgdG8gdmVyaWZ5IHRoYXQgdGhlIG11bHRpdGhyZWFkZWQgdXNlIG9mIHRyZWFkIGxvY2FsIHZhcnMgd29ya3MKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBDcmVhdGUgbmV3IHRocmVhZAotICAgICAgICAgKG5ldyBUaHJlYWQobmV3IFRocmVhZFRlc3QoInRlc3QiICsgaSkpKS5zdGFydCgpOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2xlZXAKLSAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwKTsKLQotICAgICAgICAgIC8vIERpc3BsYXkgcHJvcGVydGllcywgd2hpY2ggc2hvdWxkIGJlIG1haW4KLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICAgICAiUFJPUF9WQUxJREFUT1JfRkFDVE9SWTogICIKLSAgICAgICAgICAgICAgKyBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIElubmVyIGNsYXNzIHVzZWQgZm9yIHVuaXQgdGVzdC4KLSAgICovCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIFRocmVhZFRlc3QgZXh0ZW5kcyBUaHJlYWQKLSAgewotICAgIFN0cmluZyBuYW1lOwotCi0gICAgVGhyZWFkVGVzdChTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5zZXRQcm9wZXJ0eShQUk9QX1ZBTElEQVRPUl9GQUNUT1JZLCBuYW1lKTsKLSAgICAgIFdTSVByb3BlcnRpZXMuc2V0VGhyZWFkTG9jYWxQcm9wZXJ0aWVzKHByb3BzKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgIlBST1BfVkFMSURBVE9SX0ZBQ1RPUlk6ICAiCi0gICAgICAgICAgKyBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvWE1MSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9YTUxJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjExOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9YTUxJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhNTEluZm8KLXsKLSAgLyoqCi0gICAqIEdldCBhZGR0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBhcyBhbiBYTUwgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gYWRkdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYXMgYW4gWE1MIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC93c2kucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvd3NpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZTQ4ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC93c2kucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSMgLyoqCi0jICAqIDxjb3B5cmlnaHQ+Ci0jICAqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzICBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKiA8L2NvcHlyaWdodD4KLSMgICovCi0jCi0jIFByb3BlcnR5IGZpbGUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBmb3IgQ29uZm9ybWFuY2UgVG9vbHMKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEb2N1bWVudCBmYWN0b3J5LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd3NpLmRvY3VtZW50LmZhY3Rvcnk9b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGwuRG9jdW1lbnRGYWN0b3J5SW1wbAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByb2ZpbGUgdmFsaWRhdGlvbiBmYWN0b3J5LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd3NpLnByb2ZpbGUudmFsaWRhdG9yLmZhY3Rvcnk9b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVmZXJlbmNlIHRvIEpBWFAgZG9jdW1lbnQgYnVpbGRlcgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeT1vcmcuYXBhY2hlLnhlcmNlcy5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsCi0jamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeT1vcmcuZWNsaXBlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyYW5zcG9ydCBjbGFzcyB1c2VkIGJ5IFVEREk0SgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotb3JnLnVkZGk0ai5UcmFuc3BvcnRDbGFzc05hbWU9b3JnLnVkZGk0ai50cmFuc3BvcnQuQXBhY2hlQXhpc1RyYW5zcG9ydAotCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTG9jYXRpb24gb2YgWE1MIHNjaGVtYSBkb2N1bWVudHMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBkaXJlY3RvcnkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdzaS5hbmFseXplci54bWxzY2hlbWEuc2NoZW1hPWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZAotd3NpLmFuYWx5emVyLnNvYXAuc2NoZW1hPWh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvCi13c2kuYW5hbHl6ZXIud3NkbC5zY2hlbWE9aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8KLXdzaS5hbmFseXplci53c2Rsc29hcC5zY2hlbWE9d3NpLmFuYWx5emVyLndzZGxzb2FwLnNjaGVtYQotd3NpLmFuYWx5emVyLndzZGxtaW1lLnNjaGVtYT1odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExEb2N1bWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUwMjkyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZC5JbmxpbmVTY2hlbWFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGludGVyZmFjZSB0byBhIHNpbmdsZSBXU0RMIGRvY3VtZW50LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgV1NETERvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERlZmluaXRpb24gZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogRG9jdW1lbnQgZWxlbWVudAotICAgKi8KLSAgcHJvdGVjdGVkIERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBlbGVtZW50IGxpc3Qgd2l0aCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRWxlbWVudExpc3Qgd3NkbEVsZW1lbnRMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogTWFwIG9mIHRhcmdldE5hbWVzcGFjZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBvZiBzY2hlbWEgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIE1hcCBzY2hlbWFzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBzY2hlbWFzIHZhbGlkYXRpb24gZXJyb3JzLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIC8qKgotICAgKiBSZWFkIFdTREwgZG9jdW1lbnQgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24gaWYgcHJvYmxlbSByZWFkaW5nIFdTREwgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50KFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTsKLSAgICBDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQotICAgIHRyeQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihXU0RMRG9jdW1lbnQuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgIAotCi0gICAgICAvLyBHZXQgdGhlIFdTRExSZWFkZXIKLSAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotCi0gICAgICAvLyBTZXQgZmVhdHVyZXMKLSAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgZmFsc2UpOwotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL3dzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgdHJ1ZSk7Ci0gICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoCi0gICAgICAgIGNvbS5pYm0ud3NkbC5Db25zdGFudHMuRkVBVFVSRV9JTVBPUlRfRE9DVU1FTlRTLAotICAgICAgICB0cnVlKTsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy93c2RsUmVhZGVyLnNldEZlYXR1cmUoY29tLmlibS53c2RsLkNvbnN0YW50cy5GRUFUVVJFX0lNUE9SVF9ET0NVTUVOVFMsdHJ1ZSk7Ci0KLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBkb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MRG9jdW1lbnQoZmlsZU5hbWUpOwotICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHdzZGxSZWFkZXIucmVhZFdTREwoZmlsZU5hbWUsIGRvY3VtZW50KTsKLQotICAgICAgLy8gU2luY2UgaW5saW5lIHNjaGVtYSB2YWxpZGF0b3IgaXMgdXNlZCBieSBzZXZlcmFsIGFzc2VydGlvbnMsIHZhbGlkYXRlIGFsbAotICAgICAgLy8gc2NoZW1hcyByaWdodCBhZnRlciBXU0RMIHZhbGlkYXRpb24KLSAgICAgIHZhbGlkYXRlU2NoZW1hcygpOwotCi0gICAgICAvLyBHZXQgdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIgcmVmZXJlbmNlcwotICAgICAgdGhpcy53c2RsRWxlbWVudExpc3QgPSAoKFdTRExSZWFkZXJJbXBsKSB3c2RsUmVhZGVyKS5nZXRFbGVtZW50TGlzdCgpOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKHdzZGxFbGVtZW50TGlzdC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBjY2UpCi0gICAgewotICAgICAgLy8gU2V0IGVsZW1lbnQgbGlzdCB0byBudWxsCi0gICAgICB0aGlzLndzZGxFbGVtZW50TGlzdCA9IG51bGw7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7IAotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0gICAgfSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgV1NETCBkb2N1bWVudCBmcm9tIGV4aXN0aW5nIERlZmluaXRpb24gb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVOYW1lIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyBEZWZpbml0aW9uIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQoU3RyaW5nIGZpbGVOYW1lLCBEZWZpbml0aW9uIGRlZmluaXRpb25zKQotICB7Ci0gICAgdGhpcy5maWxlTmFtZSA9IGZpbGVOYW1lOwotICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uczsKLSAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKLSAgICBzY2hlbWFzLmNsZWFyKCk7Ci0gICAgc2NoZW1hc1ZhbGlkYXRpb25FcnJvcnMuY2xlYXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gaGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRoZSBkb2N1bWVudCBsb2NhdGlvbgotICAgIHJldHVybiB0aGlzLmZpbGVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZG9jdW1lbnQgZWxlbWVudCBvZiB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkKLSAgewotICAgIGlmIChkb2N1bWVudCA9PSBudWxsICYmIGRlZmluaXRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUxEb2N1bWVudChkZWZpbml0aW9ucy5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3c2llKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbnMoKQotICB7Ci0gICAgLy8gUmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQKLSAgICByZXR1cm4gZGVmaW5pdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFsbCB0aGUgcG9ydFR5cGUgZWxlbWVudHMgZnJvbSB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBwb3J0VHlwZSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVtdIGdldFBvcnRUeXBlcygpCi0gIHsKLSAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBQb3J0VHlwZXMgZnJvbSB0aGUgUG9ydFR5cGUgbWFwIGZvciB0aGlzIERlZmluaXRpb24KLSAgICByZXR1cm4gKFBvcnRUeXBlW10pIGRlZmluaXRpb25zLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLnRvQXJyYXkoCi0gICAgICBuZXcgUG9ydFR5cGVbMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbGwgdGhlIGJpbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBiaW5kaW5nIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdbXSBnZXRCaW5kaW5ncygpCi0gIHsKLSAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBCaW5kaW5ncyBmcm9tIHRoZSBCaW5kaW5nIG1hcCBmb3IgdGhpcyBEZWZpbml0aW9uCi0gICAgcmV0dXJuIChCaW5kaW5nW10pIGRlZmluaXRpb25zLmdldEJpbmRpbmdzKCkudmFsdWVzKCkudG9BcnJheSgKLSAgICAgIG5ldyBCaW5kaW5nWzBdKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYWxsIHRoZSBzZXJ2aWNlIGVsZW1lbnRzIGZyb20gdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2Ygc2VydmljZSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlW10gZ2V0U2VydmljZXMoKQotICB7Ci0gICAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgU2VydmljZXMgZnJvbSB0aGUgU2VydmljZSBtYXAgZm9yIHRoaXMgRGVmaW5pdGlvbgotICAgIHJldHVybiAoU2VydmljZVtdKSBkZWZpbml0aW9ucy5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkoCi0gICAgICBuZXcgU2VydmljZVswXSk7Ci0gIH0KLQotICAvKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIChkZWZpbml0aW9ucyA9PSBudWxsKQotICAgICAgPyAiV1NETCBkZWZpbml0aW9uIGVsZW1lbnQgbm90IGZvdW5kLiIKLSAgICAgIDogZGVmaW5pdGlvbnMudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbGlzdC4KLSAgICogQHJldHVybiB0aGUgZWxlbWVudCBsaXN0LgotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50TGlzdCBnZXRFbGVtZW50TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsRWxlbWVudExpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHNjaGVtYXMgbWFwLgotICAgKiBAcmV0dXJuIGEgbWFwIG9mIHRhcmdldE5hbWVzcGFjZSBhdHRyaWJ1dGUgdmFsdWVzIG9mIHRoZSBzY2hlbWEgZWxlbWVudHMKLSAgICogdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBvYmplY3Qgb2YgdGhhdCBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTWFwIGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIGxpc3Qgb2Ygc2NoZW1hcyB2YWxpZGF0aW9uIGVycm9ycyBjYXVzZWQgYnkgdGhlIHZhbGlkYXRlU2NoZW1hcygpIHByb2NlZHVyZS4KLSAgICogQHJldHVybiBhIGxpc3Qgb2Ygc2NoZW1hcyB2YWxpZGF0aW9uIGVycm9ycy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzKCkKLSAgewotICAgIHJldHVybiBzY2hlbWFzVmFsaWRhdGlvbkVycm9yczsgCi0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBpbnZva2VzIHRoZSBpbmxpbmUgc2NoZW1hIHZhbGlkYXRvciB3aGljaCB2YWxpZGF0ZXMgZXZlcnkgc2NoZW1hIGVsZW1lbnQgb2YgdGhlIFdTREwuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmFsaWRhdGVTY2hlbWFzKCkKLSAgewotICAgIHNjaGVtYXMuY2xlYXIoKTsKLSAgICBzY2hlbWFzVmFsaWRhdGlvbkVycm9ycy5jbGVhcigpOwotCi0gICAgLyogSU5MSU5FIFNDSEVNQSBWQUxJREFUT1IgKi8KLSAgICBpZiAoZGVmaW5pdGlvbnMgIT0gbnVsbAotICAgICAgJiYgZGVmaW5pdGlvbnMuZ2V0VHlwZXMoKSAhPSBudWxsCi0gICAgICAmJiBkZWZpbml0aW9ucy5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSW5saW5lU2NoZW1hVmFsaWRhdG9yIHNjaGVtYVZhbGlkYXRvciA9IG5ldyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IoKTsKLQotICAgICAgLy8gQ29sbGVjdGluZyBzY2hlbWEncyBwYXJlbnQgZWxlbWVudHMKLSAgICAgIExpc3QgcGFyZW50cyA9IG5ldyBBcnJheUxpc3QoMik7Ci0gICAgICBwYXJlbnRzLmFkZChkZWZpbml0aW9ucy5nZXRUeXBlcygpKTsKLSAgICAgIHBhcmVudHMuYWRkKGRlZmluaXRpb25zKTsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBFeHRlbnNpYmlsaXR5RWxlbWVudFMgb2Ygd3NkbDp0eXBlcwotICAgICAgLy8gc2luY2UgdGhleSBhcmUgcG90ZW50aWFsIHNjaGVtYXMKLSAgICAgIC8vIFNlZSBKYXZhIEFQSXMgZm9yIFdTREwgVjEuMCAoSlNSMTEwKSwgc2VjdGlvbiA0Ci0gICAgICBJdGVyYXRvciBpID0gdGhpcy5kZWZpbml0aW9ucy5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGV4dEVsLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFhNTFRhZ3MuRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgewotICAgICAgICAgIE1hcCBtYXAgPSBudWxsOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFZhbGlkYXRpbmcgc2NoZW1hIGVsZW1lbnQKLSAgICAgICAgICAgIG1hcCA9IHNjaGVtYVZhbGlkYXRvci52YWxpZGF0ZShleHRFbCwgcGFyZW50cywgZmlsZU5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQWRkaW5nIGFuIGV4Y2VwdGlvbiB0byB0aGUgZXJyb3JzIGxpc3QKLSAgICAgICAgICAgIHNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzLmFkZChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKG1hcCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFkZGluZyByZXR1cm5lZCBYU01vZGVsIHRvIHNjaGVtYXMgbWFwCi0gICAgICAgICAgICBzY2hlbWFzLnB1dEFsbChtYXApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gICAgCi0gIH0KLQotICAvKioKLSAgICogQ29tbWFuZCBsaW5lIGludGVyZmFjZS4KLSAgICogQHBhcmFtIGFyZ3MgZnJvbSBjb21tYW5kIGxpbmUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQoYXJnc1swXSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4od3NkbERvY3VtZW50LnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnRvU3RyaW5nKCk7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIFN5c3RlbS5leGl0KDApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExFbGVtZW50TGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMRWxlbWVudExpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVhNzdkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExFbGVtZW50TGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBtYWludGFpbnMgYSBXU0RMIGVsZW1lbnQgbGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExFbGVtZW50TGlzdAotewotICAvKioKLSAgICogTGlzdCBvZiBXU0RMIGVsZW1lbnRzIHdpdGggdGhlaXIgbG9jYXRpb24uCi0gICAqLwotICBIYXNoTWFwIHdzZGxFbGVtZW50TGlzdCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgLyoqCi0gICAqIFdTREwgZWxlbWVudCBsb2NhdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50TGlzdCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgZWxlbWVudCB3aXRoIGxvY2F0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgICAgICBhIFdTREwgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGVsZW1lbnRMb2NhdGlvbiAgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVsZW1lbnQoT2JqZWN0IHdzZGxFbGVtZW50LCBFbGVtZW50TG9jYXRpb24gZWxlbWVudExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudExpc3QucHV0KHdzZGxFbGVtZW50LCBlbGVtZW50TG9jYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgIGEgV1NETCBlbGVtZW50IGFydGlmYWN0LgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbihPYmplY3Qgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gKEVsZW1lbnRMb2NhdGlvbikgdGhpcy53c2RsRWxlbWVudExpc3QuZ2V0KHdzZGxFbGVtZW50KTsKLSAgfQotCi0gIC8qIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZyBzdHJpbmcgPSAiV1NETEVsZW1lbnRMaXN0OiBcbiI7Ci0KLSAgICAvLyBHZXQgbGlzdCBlbnRyaWVzICh2YWx1ZXM/KQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdGhpcy53c2RsRWxlbWVudExpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQotICAgIC8vIEFkZCBlYWNoIGVudHJ5IGluIHRoZSBsaXN0IHRvIHRoZSBzdHJpbmcKLSAgICBFbGVtZW50TG9jYXRpb24gd3NkbEVsZW1lbnRMb2NhdGlvbjsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCB3c2RsRWxlbWVudCA9IGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgaWYgKHdzZGxFbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHN0cmluZyArPSAiICAiICsgd3NkbEVsZW1lbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOiAiOwotICAgICAgICBpZiAoKHdzZGxFbGVtZW50TG9jYXRpb24gPQotICAgICAgICAgIChFbGVtZW50TG9jYXRpb24pIHdzZGxFbGVtZW50TGlzdC5nZXQod3NkbEVsZW1lbnQpKQotICAgICAgICAgID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJpbmcgKz0gIm51bGxcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJpbmcgKz0gIiAgIgotICAgICAgICAgICAgKyB3c2RsRWxlbWVudC5nZXRDbGFzcygpLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiOiAiCi0gICAgICAgICAgICArIHdzZGxFbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpCi0gICAgICAgICAgICArICIsICIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnRMb2NhdGlvbi5nZXRDb2x1bW5OdW1iZXIoKQotICAgICAgICAgICAgKyAiXG4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMUmVhZGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMUmVhZGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWY2NWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFJlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5RTmFtZVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5YUGF0aFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYSBzcGVjaWFsaXphdGlvbiBvZiBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsIGluIFdTREw0Si4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWFkZXJJbXBsIGV4dGVuZHMgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbAotewotICAvLyBXU0RMIGVsZW1lbnQgbGlzdC4KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50TGlzdCB3c2RsRWxlbWVudExpc3QgPSBuZXcgV1NETEVsZW1lbnRMaXN0KCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VEZWZpbml0aW9ucyhqYXZhLmxhbmcuU3RyaW5nLCBvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLnV0aWwuTWFwKQotICAgKi8KLSAgcHJvdGVjdGVkIERlZmluaXRpb24gcGFyc2VEZWZpbml0aW9ucygKLSAgICBTdHJpbmcgZG9jdW1lbnRCYXNlVVJJLAotICAgIEVsZW1lbnQgZGVmRWwsCi0gICAgTWFwIGltcG9ydGVkRGVmcykKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0JICBEZWZpbml0aW9uIGRlZiA9IG51bGw7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoV1NETFJlYWRlckltcGwuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCi0gICAgICBkZWYgPQotICAgICAgc3VwZXIucGFyc2VEZWZpbml0aW9ucyhkb2N1bWVudEJhc2VVUkksIGRlZkVsLCBpbXBvcnRlZERlZnMpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGRlZkVsLCBkZWYpOwotCi0KLQl9Ci1jYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotCX0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gIAotICAgIHJldHVybiBkZWY7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUltcG9ydChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24sIGphdmEudXRpbC5NYXApCi0gICAqLwotICBwcm90ZWN0ZWQgSW1wb3J0IHBhcnNlSW1wb3J0KEVsZW1lbnQgZWxlbWVudCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBNYXAgbWFwKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICAvKmJvb2xlYW4gd2FzRXggPSBmYWxzZTsKLSAgICBpZiAoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpIT1udWxsKXsKLSAgICAJRmlsZSBmID0gbmV3IEZpbGUoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAJaWYgKGYuZ2V0UGFyZW50KCkhPW51bGwgJiYgaW1wb3J0RWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbiIpIT1udWxsKXsJCQotICAgIAkgICBmID0gbmV3IEZpbGUoZi5nZXRQYXJlbnQoKSsiLyIraW1wb3J0RWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbiIpKTsKLSAgICAJICAgCi0gICAgCX0KLSAgICB9IGVsc2Ugd2FzRXggPSBmYWxzZTsKLSAgICAgIAotICAgIEltcG9ydCBpbXBvcnREZWYgPSBzdXBlci5wYXJzZUltcG9ydChpbXBvcnRFbCwgZGVmLCBpbXBvcnRlZERlZnMpOwotICAgIAotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChpbXBvcnRFbCwgaW1wb3J0RGVmKTsKLSAgICAKLSAgICByZXR1cm4gaW1wb3J0RGVmOyovCi0KLSAgICAvKkltcG9ydCBpbXBvcnQxID0gZGVmaW5pdGlvbi5jcmVhdGVJbXBvcnQoKTsKLSAgICBTdHJpbmcgcyA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCAibmFtZXNwYWNlIik7Ci0gICAgU3RyaW5nIHMxID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJsb2NhdGlvbiIpOwotICAgIGlmIChzICE9IG51bGwpCi0gICAgCWltcG9ydDEuc2V0TmFtZXNwYWNlVVJJKHMpOwotICAgIGlmIChzMSAhPSBudWxsKSB7Ci0gICAgCWlmIChpbXBvcnREb2N1bWVudHMpIHsKLSAgICAJCVN0cmluZyBzMiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgCQl0cnkgewotICAgIAotICAgIAkJCVVSTCB1cmwxID0gczIgPT0gbnVsbCA/IG51bGwgOiBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgczIpOwotICAgIAkJCVVSTCB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwodXJsMSwgczEpOwotICAgIAkJCUlucHV0U3RyZWFtIGlucHV0c3RyZWFtID0KLSAgICAJCQkJU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzSW5wdXRTdHJlYW0odXJsKTsKLSAgICAJCQlpbnB1dHN0cmVhbS5jbG9zZSgpOwotICAgIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAJCQkvL2ltcG9ydDEuc2V0TG9jYXRpb25VUkkobnVsbCk7Ci0gICAgCQkJYWRkRWxlbWVudFRvTGlzdChlbGVtZW50LCBpbXBvcnQxKTsKLSAgICAJCQlyZXR1cm4gaW1wb3J0MTsKLSAgICAJCX0gY2F0Y2ggKFRocm93YWJsZSBleCkgewotICAgIAkJCXRocm93IG5ldyBXU0RMRXhjZXB0aW9uKAotICAgIAkJCQkiT1RIRVJfRVJST1IiLAotICAgIAkJCQkiVW5hYmxlIHRvIHJlc29sdmUgaW1wb3J0ZWQgZG9jdW1lbnQgYXQgJyIgKyBzMSArICInLiIsCi0gICAgCQkJCWV4KTsKLSAgICAJCX0KLSAgICAKLSAgICAJfQotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0RGVmID0gc3VwZXIucGFyc2VJbXBvcnQoZWxlbWVudCwgZGVmaW5pdGlvbiwgbWFwKTsKLSAgICBhZGRFbGVtZW50VG9MaXN0KGVsZW1lbnQsIGltcG9ydERlZik7Ki8KLSAgICBJbXBvcnQgaW1wb3J0MSA9IGRlZmluaXRpb24uY3JlYXRlSW1wb3J0KCk7Ci0gICAgU3RyaW5nIHMgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoZWxlbWVudCwgIm5hbWVzcGFjZSIpOwotICAgIFN0cmluZyBzMSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCAibG9jYXRpb24iKTsKLSAgICBpZiAocyAhPSBudWxsKQotICAgICAgaW1wb3J0MS5zZXROYW1lc3BhY2VVUkkocyk7Ci0gICAgLy8gQUREOiBjaGVjayAibG9jYXRpb24iIGF0dHJpYnV0ZSBmb3IgZW1wdHkgCi0gICAgLy8gc3RyaW5nIHRvIHByZXZlbnQgc2VsZi1kZWZlbml0aW9uIGFzc2lnbmluZwotICAgIGlmICgoczEgIT0gbnVsbCkgJiYgKHMxLmxlbmd0aCgpID4gMCkpCi0gICAgewotICAgICAgaW1wb3J0MS5zZXRMb2NhdGlvblVSSShzMSk7Ci0gICAgICBpZiAoaW1wb3J0RG9jdW1lbnRzKQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBzMiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uMSA9IG51bGw7Ci0gICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0gPSBudWxsOwotICAgICAgICAgIElucHV0U291cmNlIGlucHV0c291cmNlID0gbnVsbDsKLSAgICAgICAgICBVUkwgdXJsID0gbnVsbDsKLSAgICAgICAgICBpZiAobG9jICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzb3VyY2UgPSBsb2MuZ2V0SW1wb3J0SW5wdXRTb3VyY2UoczIsIHMxKTsKLSAgICAgICAgICAgIFN0cmluZyBzMyA9IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgIGRlZmluaXRpb24xID0gKERlZmluaXRpb24pIG1hcC5nZXQoczMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgVVJMIHVybDEgPSBzMiA9PSBudWxsID8gbnVsbCA6IFN0cmluZ1V0aWxzLmdldFVSTChudWxsLCBzMik7Ci0gICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwodXJsMSwgczEpOwotICAgICAgICAgICAgZGVmaW5pdGlvbjEgPSAoRGVmaW5pdGlvbikgbWFwLmdldCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbjEgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLQotICAgICAgICAgICAgICAgIGlucHV0c3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXgpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvL2ltcG9ydDEuc2V0TG9jYXRpb25VUkkobnVsbCk7Ci0gICAgICAgICAgICAgICAgYWRkRWxlbWVudFRvTGlzdChlbGVtZW50LCBpbXBvcnQxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW1wb3J0MTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoaW5wdXRzdHJlYW0gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBpbnB1dHNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dHN0cmVhbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkZWZpbml0aW9uMSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbnB1dHNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiT1RIRVJfRVJST1IiLAotICAgICAgICAgICAgICAgICJVbmFibGUgdG8gbG9jYXRlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciCi0gICAgICAgICAgICAgICAgICArIHMxCi0gICAgICAgICAgICAgICAgICArICInIgotICAgICAgICAgICAgICAgICAgKyAoczIgIT0gbnVsbCA/ICIsIHJlbGF0aXZlIHRvICciICsgczIgKyAiJy4iIDogIi4iKSk7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudChpbnB1dHNvdXJjZSwgczEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnRUb0xpc3QoZWxlbWVudCwgaW1wb3J0MSk7Ci0gICAgICAgICAgICAgIHJldHVybiBpbXBvcnQxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlucHV0c3RyZWFtICE9IG51bGwpCi0gICAgICAgICAgICAgIGlucHV0c3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMsIGVsZW1lbnQyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9pZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgLy8gIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgLy8gICAgIlJldHJpZXZpbmcgZG9jdW1lbnQgYXQgJyIKLSAgICAgICAgICAgICAgLy8gICAgICArIHMxCi0gICAgICAgICAgICAgIC8vICAgICAgKyAiJyIKLSAgICAgICAgICAgICAgLy8gICAgICArIChzMiAhPSBudWxsID8gIiwgcmVsYXRpdmUgdG8gJyIgKyBzMiArICInLiIgOiAiLiIpKTsKLSAgICAgICAgICAgICAgU3RyaW5nIHM0ID0KLSAgICAgICAgICAgICAgICBsb2MgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgPyB1cmwgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgPyBzMQotICAgICAgICAgICAgICAgICAgOiB1cmwudG9TdHJpbmcoKSA6IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgICAgZGVmaW5pdGlvbjEgPSByZWFkV1NETChzNCwgZWxlbWVudDIsIG1hcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gUU5hbWVVdGlscy5uZXdRTmFtZShlbGVtZW50Mik7Ci0gICAgICAgICAgICAgIGlmIChDb25zdGFudHMuWFNEX1FOQU1FX0xJU1QuY29udGFpbnMocW5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV1NETEZhY3Rvcnkgd3NkbGZhY3RvcnkgPQotICAgICAgICAgICAgICAgICAgZmFjdG9yeUltcGxOYW1lID09IG51bGwKLSAgICAgICAgICAgICAgICAgICAgPyBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0gICAgICAgICAgICAgICAgICAgIDogV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoZmFjdG9yeUltcGxOYW1lKTsKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uMSA9IHdzZGxmYWN0b3J5Lm5ld0RlZmluaXRpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoZXh0UmVnICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICBkZWZpbml0aW9uMS5zZXRFeHRlbnNpb25SZWdpc3RyeShleHRSZWcpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzNSA9Ci0gICAgICAgICAgICAgICAgICBsb2MgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IHVybCA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgID8gczEKLSAgICAgICAgICAgICAgICAgICAgOiB1cmwudG9TdHJpbmcoKSA6IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uMS5zZXREb2N1bWVudEJhc2VVUkkoczUpOwotICAgICAgICAgICAgICAgIC8qIERvbid0IGFkZCB0eXBlcyBlbGVtZW50IHNpbmNlIGl0IGRvZXNuJ3QgZXhpc3QuICBBZGRpbmcgaXQgY2F1c2VzIHByb2JsZW1zCi0gICAgICAgICAgICAgICAgICogc2luY2UgaXQgd2lsbCBhZGQgYSB0eXBlcyBlbGVtZW50IGZvciBwcm9jZXNzaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QuCi0gICAgICAgICAgICAgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uMS5jcmVhdGVUeXBlcygpOwotICAgICAgICAgICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCB1bmtub3duZXh0ZW5zaWJpbGl0eWVsZW1lbnQgPQotICAgICAgICAgICAgICAgIAluZXcgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgdW5rbm93bmV4dGVuc2liaWxpdHllbGVtZW50LnNldEVsZW1lbnQoZWxlbWVudDIpOwotICAgICAgICAgICAgICAgIHR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KAotICAgICAgICAgICAgICAgIAl1bmtub3duZXh0ZW5zaWJpbGl0eWVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGRlZmluaXRpb24xLnNldFR5cGVzKHR5cGVzKTsKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkZWZpbml0aW9uMSAhPSBudWxsKQotICAgICAgICAgICAgaW1wb3J0MS5zZXREZWZpbml0aW9uKGRlZmluaXRpb24xKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiB3c2RsZXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbGV4Y2VwdGlvbi5zZXRMb2NhdGlvbihYUGF0aFV0aWxzLmdldFhQYXRoRXhwckZyb21Ob2RlKGVsZW1lbnQpKTsKLSAgICAgICAgICB0aHJvdyB3c2RsZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdGhyb3dhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oCi0gICAgICAgICAgICAiT1RIRVJfRVJST1IiLAotICAgICAgICAgICAgIlVuYWJsZSB0byByZXNvbHZlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciICsgczEgKyAiJy4iLAotICAgICAgICAgICAgdGhyb3dhYmxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKEVsZW1lbnQgZWxlbWVudDEgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgIGVsZW1lbnQxICE9IG51bGw7Ci0gICAgICBlbGVtZW50MSA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50MSkpCi0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgZWxlbWVudDEpKQotICAgICAgICBpbXBvcnQxLnNldERvY3VtZW50YXRpb25FbGVtZW50KGVsZW1lbnQxKTsKLSAgICAgIGVsc2UKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKGVsZW1lbnQxKTsKLQotICAgIHJldHVybiBpbXBvcnQxOwotCi0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVR5cGVzKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBUeXBlcyBwYXJzZVR5cGVzKEVsZW1lbnQgdHlwZXNFbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFR5cGVzIHR5cGVzID0gc3VwZXIucGFyc2VUeXBlcyh0eXBlc0VsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KHR5cGVzRWwsIHR5cGVzKTsKLQotICAgIHJldHVybiB0eXBlczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlQmluZGluZyhvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZyBwYXJzZUJpbmRpbmcoRWxlbWVudCBiaW5kaW5nRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBzdXBlci5wYXJzZUJpbmRpbmcoYmluZGluZ0VsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGJpbmRpbmdFbCwgYmluZGluZyk7Ci0KLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlQmluZGluZ09wZXJhdGlvbihvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ09wZXJhdGlvbiBwYXJzZUJpbmRpbmdPcGVyYXRpb24oCi0gICAgRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBUaGUgZm9sbG93IHRyeS1jYXRjaCB3YXMgYWRkZWQgdG8gZGV0ZWN0IHdoZW4gYSBkdXBsaWNhdGUgb3BlcmF0aW9uIG5hbWUgd2FzIGRldGVjdGVkCi0gICAgdHJ5Ci0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbiA9Ci0gICAgICAgIHN1cGVyLnBhcnNlQmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uRWwsIHBvcnRUeXBlLCBkZWYpOwotICAgIH0KLQotICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICAgIGlmIChpYWUuZ2V0TWVzc2FnZSgpLnN0YXJ0c1dpdGgoIkR1cGxpY2F0ZSIpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uID0KLSAgICAgICAgICBwYXJzZUJpbmRpbmdPcGVyYXRpb25XaXRoRHVwbGljYXRlTmFtZXMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgICAgIGRlZik7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgaWFlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBhZGRFbGVtZW50VG9MaXN0KGJpbmRpbmdPcGVyYXRpb25FbCwgYmluZGluZ09wZXJhdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdJbnB1dChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0lucHV0IHBhcnNlQmluZGluZ0lucHV0KAotICAgIEVsZW1lbnQgYmluZGluZ0lucHV0RWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBzdXBlci5wYXJzZUJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nSW5wdXRFbCwgYmluZGluZ0lucHV0KTsKLQotICAgIHJldHVybiBiaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdPdXRwdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgcGFyc2VCaW5kaW5nT3V0cHV0KAotICAgIEVsZW1lbnQgYmluZGluZ091dHB1dEVsLAotICAgIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPQotICAgICAgc3VwZXIucGFyc2VCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nT3V0cHV0RWwsIGJpbmRpbmdPdXRwdXQpOwotCi0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdGYXVsdChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0ZhdWx0IHBhcnNlQmluZGluZ0ZhdWx0KAotICAgIEVsZW1lbnQgYmluZGluZ0ZhdWx0RWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBzdXBlci5wYXJzZUJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nRmF1bHRFbCwgYmluZGluZ0ZhdWx0KTsKLQotICAgIHJldHVybiBiaW5kaW5nRmF1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZU1lc3NhZ2Uob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2UgcGFyc2VNZXNzYWdlKEVsZW1lbnQgbXNnRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNZXNzYWdlIG1zZyA9IHN1cGVyLnBhcnNlTWVzc2FnZShtc2dFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChtc2dFbCwgbXNnKTsKLQotICAgIHJldHVybiBtc2c7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVBhcnQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIFBhcnQgcGFyc2VQYXJ0KEVsZW1lbnQgcGFydEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIC8vUGFydCBwYXJ0ID0gc3VwZXIucGFyc2VQYXJ0KHBhcnRFbCwgZGVmKTsKLQotICAgIFBhcnQgcGFydCA9IGRlZi5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocGFydEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIC8vIFdTLUk6IFRoZSB0cnktY2F0Y2ggd2FzIGFkZGVkIGZvciBXU0kyNDE2Ci0gICAgUU5hbWUgZWxlbWVudE5hbWU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9Ci0gICAgICAgIERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICAgIHBhcnRFbCwKLSAgICAgICAgICBDb25zdGFudHMuQVRUUl9FTEVNRU5ULAotICAgICAgICAgIENvbnN0YW50cy5FTEVNX01FU1NBR0UsCi0gICAgICAgICAgZmFsc2UpOwotICAgIH0KLQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICAgIFN0cmluZyBwcmVmaXhlZFZhbHVlID0KLSAgICAgICAgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfRUxFTUVOVCk7Ci0gICAgICBpbnQgaW5kZXggPSBwcmVmaXhlZFZhbHVlLmluZGV4T2YoJzonKTsKLSAgICAgIFN0cmluZyBsb2NhbFBhcnQgPSBwcmVmaXhlZFZhbHVlLnN1YnN0cmluZyhpbmRleCArIDEpOwotCi0gICAgICBlbGVtZW50TmFtZSA9IG5ldyBRTmFtZShsb2NhbFBhcnQpOwotICAgIH0KLQotICAgIFFOYW1lIHR5cGVOYW1lID0KLSAgICAgIERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBwYXJ0RWwsCi0gICAgICAgIENvbnN0YW50cy5BVFRSX1RZUEUsCi0gICAgICAgIENvbnN0YW50cy5FTEVNX01FU1NBR0UsCi0gICAgICAgIGZhbHNlKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcGFydC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0RWxlbWVudE5hbWUoZWxlbWVudE5hbWUpOwotICAgIH0KLQotICAgIGlmICh0eXBlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0VHlwZU5hbWUodHlwZU5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocGFydEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcGFydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgTWFwIGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKTsKLQotICAgIGV4dGVuc2lvbkF0dHJpYnV0ZXMucHV0QWxsKGdldFBhcnRBdHRyaWJ1dGVzKHBhcnRFbCwgZGVmKSk7Ci0KLSAgICAvLyBOZWVkIHRvIGRvIHNvbWV0aGluZyBoZXJlIHRvIGxvY2F0ZSBwYXJ0IGRlZmluaXRpb24uCi0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QocGFydEVsLCBwYXJ0KTsKLQotICAgIHJldHVybiBwYXJ0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VQb3J0VHlwZShvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydFR5cGUgcGFyc2VQb3J0VHlwZShFbGVtZW50IHBvcnRUeXBlRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IHN1cGVyLnBhcnNlUG9ydFR5cGUocG9ydFR5cGVFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChwb3J0VHlwZUVsLCBwb3J0VHlwZSk7Ci0KLSAgICByZXR1cm4gcG9ydFR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZU9wZXJhdGlvbihvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgT3BlcmF0aW9uIHBhcnNlT3BlcmF0aW9uKAotICAgIEVsZW1lbnQgb3BFbCwKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgT3BlcmF0aW9uIG9wID0gc3VwZXIucGFyc2VPcGVyYXRpb24ob3BFbCwgcG9ydFR5cGUsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3Qob3BFbCwgb3ApOwotCi0gICAgcmV0dXJuIG9wOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VTZXJ2aWNlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBTZXJ2aWNlIHBhcnNlU2VydmljZShFbGVtZW50IHNlcnZpY2VFbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFNlcnZpY2Ugc2VydmljZSA9IHN1cGVyLnBhcnNlU2VydmljZShzZXJ2aWNlRWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3Qoc2VydmljZUVsLCBzZXJ2aWNlKTsKLQotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VQb3J0KG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBQb3J0IHBhcnNlUG9ydChFbGVtZW50IHBvcnRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBQb3J0IHBvcnQgPSBzdXBlci5wYXJzZVBvcnQocG9ydEVsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KHBvcnRFbCwgcG9ydCk7Ci0KLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YS5sYW5nLkNsYXNzLCBvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudCgKLSAgICBDbGFzcyBwYXJlbnRUeXBlLAotICAgIEVsZW1lbnQgZWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPQotICAgICAgc3VwZXIucGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJlbnRUeXBlLCBlbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChlbCwgZXh0RWxlbWVudCk7Ci0KLSAgICByZXR1cm4gZXh0RWxlbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlSW5wdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0IHBhcnNlSW5wdXQoRWxlbWVudCBpbnB1dEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBzdXBlci5wYXJzZUlucHV0KGlucHV0RWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QoaW5wdXRFbCwgaW5wdXQpOwotCi0gICAgcmV0dXJuIGlucHV0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VPdXRwdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIE91dHB1dCBwYXJzZU91dHB1dChFbGVtZW50IG91dHB1dEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgT3V0cHV0IG91dHB1dCA9IHN1cGVyLnBhcnNlT3V0cHV0KG91dHB1dEVsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KG91dHB1dEVsLCBvdXRwdXQpOwotCi0gICAgcmV0dXJuIG91dHB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlRmF1bHQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIEZhdWx0IHBhcnNlRmF1bHQoRWxlbWVudCBmYXVsdEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgRmF1bHQgZmF1bHQgPSBzdXBlci5wYXJzZUZhdWx0KGZhdWx0RWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QoZmF1bHRFbCwgZmF1bHQpOwotCi0gICAgcmV0dXJuIGZhdWx0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjZ2V0RG9jdW1lbnQob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwcm90ZWN0ZWQgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsIFN0cmluZyBkZXNjKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLSAgICB0cnkKLQl7Ci0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihXU0RMUmVhZGVySW1wbC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAJCi0JCi0gIAkgIC8vRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0gICAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotICAgICAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQotICAgICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgV1NETEV4Y2VwdGlvbi5QQVJTRVJfRVJST1IsCi0gICAgICAgICJQcm9ibGVtIHBhcnNpbmcgJyIgKyBkZXNjICsgIicuIiwKLSAgICAgICAgdCk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7IAotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0gICAgfSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsaXN0LgotICAgKiBAcmV0dXJuIHRoZSBlbGVtZW50IGxpc3QuCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnRMaXN0IGdldEVsZW1lbnRMaXN0KCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxFbGVtZW50TGlzdDsKLSAgfQotCi0gIC8qKiAKLSAgICogQWRkIFdTREwgZWxlbWVudCB0byBlbGVtZW50IGxpc3QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkRWxlbWVudFRvTGlzdChFbGVtZW50IGVsZW1lbnQsIE9iamVjdCB3c2RsRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2VlIGlmIHRoZSBlbGVtZW50IG9iamVjdCBpcyBhbiBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50SW1wbAotICAgICAgRWxlbWVudEltcGwgZWxlbWVudEltcGwgPSAoRWxlbWVudEltcGwpIGVsZW1lbnQ7Ci0KLSAgICAgIC8vIElmIGl0IGlzLCB0aGVuIGdldCB0aGUgZWxlbWVudCBsb2NhdGlvbiBpbmZvcm1hdGlvbgotICAgICAgZWxlbWVudExvY2F0aW9uID0KLSAgICAgICAgKEVsZW1lbnRMb2NhdGlvbikgZWxlbWVudEltcGwuZ2V0VXNlckRhdGEoKTsKLQotICAgICAgLy8gQWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgICB0aGlzLndzZGxFbGVtZW50TGlzdC5hZGRFbGVtZW50KHdzZGxFbGVtZW50LCBlbGVtZW50TG9jYXRpb24pOwotICAgIH0KLQotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgIHsKLSAgICAgIC8vIEFERDogU2hvdWxkIHdlIGFkZCB0aGUgZWxlbWVudCB3aXRoIGEgbnVsbCBvciB6ZXJvIGxvY2F0aW9uPwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHdoZW4gYSBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIGR1cGxpY2F0ZSBvcGVyYXRpb24gbmFtZXMuCi0gICAqIEl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBwYXJzZUJpbmRpbmdPcGVyYXRpb24gbWV0aG9kLCBleGNlcHQgdGhhdCBpdCB3aWxsCi0gICAqIGp1c3QgZmluZCB0aGUgZmlyc3Qgb3BlcmF0aW9uIHRoYXQgbWF0Y2hlcyBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KLSAgICovCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBwYXJzZUJpbmRpbmdPcGVyYXRpb25XaXRoRHVwbGljYXRlTmFtZXMoCi0gICAgRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGRlZi5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgU3RyaW5nIG5hbWUgPQotICAgICAgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdPcGVyYXRpb25FbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb25FbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lOUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChwYXJzZUJpbmRpbmdJbnB1dCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fT1VUUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQocGFyc2VCaW5kaW5nT3V0cHV0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9GQVVMVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQocGFyc2VCaW5kaW5nRmF1bHQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudCgKLSAgICAgICAgICBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICBTdHJpbmcgaW5wdXROYW1lID0gKGJpbmRpbmdJbnB1dCAhPSBudWxsID8gYmluZGluZ0lucHV0LmdldE5hbWUoKSA6IG51bGwpOwotICAgICAgU3RyaW5nIG91dHB1dE5hbWUgPQotICAgICAgICAoYmluZGluZ091dHB1dCAhPSBudWxsID8gYmluZGluZ091dHB1dC5nZXROYW1lKCkgOiBudWxsKTsKLQotICAgICAgLy9PcGVyYXRpb24gb3AgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb24obmFtZSwgaW5wdXROYW1lLCBvdXRwdXROYW1lKTsKLSAgICAgIC8vIEdldCBhbGwgb3BlcmF0aW9ucywgYW5kIHRoZW4gZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgbWF0Y2hlcwotICAgICAgT3BlcmF0aW9uIG9wID0gbnVsbCwgY2hlY2tPcGVyYXRpb247Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSAmJiBvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIG5leHQgb3BlcmF0aW9uCi0gICAgICAgIGNoZWNrT3BlcmF0aW9uID0gKE9wZXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIC8vIEdldCB0aGUgb3BlcmF0aW9uIG5hbWUsIGlucHV0IG5hbWUsIGFuZCBvdXRwdXQgbmFtZQotICAgICAgICBTdHJpbmcgY2hlY2tOYW1lID0gY2hlY2tPcGVyYXRpb24uZ2V0TmFtZSgpOwotICAgICAgICBTdHJpbmcgY2hlY2tJbnB1dE5hbWUgPQotICAgICAgICAgIChjaGVja09wZXJhdGlvbi5nZXRJbnB1dCgpID09IG51bGwKLSAgICAgICAgICAgID8gbnVsbAotICAgICAgICAgICAgOiBjaGVja09wZXJhdGlvbi5nZXRJbnB1dCgpLmdldE5hbWUoKSk7Ci0gICAgICAgIFN0cmluZyBjaGVja091dHB1dE5hbWUgPQotICAgICAgICAgIChjaGVja09wZXJhdGlvbi5nZXRPdXRwdXQoKSA9PSBudWxsCi0gICAgICAgICAgICA/IG51bGwKLSAgICAgICAgICAgIDogY2hlY2tPcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TmFtZSgpKTsKLQotICAgICAgICAvLyBJZiB0aGUgbmFtZXMgbWF0Y2gsIHRoZW4gdGhhdCBvcGVyYXRpb24KLSAgICAgICAgaWYgKChjaGVja05hbWUgIT0gbnVsbCAmJiBjaGVja05hbWUuZXF1YWxzKG5hbWUpKQotICAgICAgICAgICYmICgoY2hlY2tJbnB1dE5hbWUgIT0gbnVsbCAmJiBjaGVja0lucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgIHx8IChjaGVja0lucHV0TmFtZSA9PSBudWxsICYmIGlucHV0TmFtZSA9PSBudWxsKSkKLSAgICAgICAgICAmJiAoKGNoZWNrT3V0cHV0TmFtZSAhPSBudWxsICYmIGNoZWNrT3V0cHV0TmFtZS5lcXVhbHMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgICB8fCAoY2hlY2tPdXRwdXROYW1lID09IG51bGwgJiYgb3V0cHV0TmFtZSA9PSBudWxsKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBvcCA9IGNoZWNrT3BlcmF0aW9uOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBvcCA9IGRlZi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgICAgb3Auc2V0TmFtZShuYW1lKTsKLSAgICAgICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3ApOwotICAgIH0KLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTdiNjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci0KLS8qKgotICogU2V0IG9mIFhNTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdTRExVdGlscwotewotCi0gIC8qKgotICAgKiBNZXRob2QgaXNScGNMaXRlcmFsLgotICAgKiBAcGFyYW0gYmluZGluZ1N0eWxlIGEgYmluZGluZyBzdHlsZS4KLSAgICogQHBhcmFtIG9wZXJhdGlvbiBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBiaW5kaW5nIGlzIHJwYyBsaXRlcmFsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUnBjTGl0ZXJhbCgKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlLAotICAgIEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIGNoZWNrU3R5bGVBbmRVc2UoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQsCi0gICAgICBiaW5kaW5nU3R5bGUsCi0gICAgICBvcGVyYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0RvY0xpdGVyYWwuCi0gICAqIEBwYXJhbSBiaW5kaW5nU3R5bGUgIHRoZSBiaW5kaW5nIHN0eWxlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIGEgV1NETCBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIGJpbmRpbmcgaXMgZG9jdW1lbnQgbGl0ZXJhbC4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEb2NMaXRlcmFsKAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICByZXR1cm4gY2hlY2tTdHlsZUFuZFVzZSgKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCwKLSAgICAgIGJpbmRpbmdTdHlsZSwKLSAgICAgIG9wZXJhdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGNoZWNrU3R5bGVBbmRVc2UuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNoZWNrU3R5bGVBbmRVc2UoCi0gICAgU3RyaW5nIGNoZWNrU3R5bGUsCi0gICAgU3RyaW5nIGNoZWNrVXNlLAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYm9vbGVhbiBzdHlsZUZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBzdHlsZUFuZFVzZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IGdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXh0IGVsZW1lbnRzLCB0aGVuIGNoZWNrIGFnYWluc3QgYmluZGluZyBzdHlsZQotICAgIGlmICgoc29hcE9wZXJhdGlvbiA9PSBudWxsKSB8fCAoc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpID09IG51bGwpKQotICAgIHsKLSAgICAgIGlmIChjaGVja1N0eWxlLmVxdWFscyhiaW5kaW5nU3R5bGUpKQotICAgICAgICBzdHlsZUZvdW5kID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGNoZWNrU3R5bGUuZXF1YWxzKHNvYXBPcGVyYXRpb24uZ2V0U3R5bGUoKSkpCi0gICAgICAgIHN0eWxlRm91bmQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHN0eWxlIGZvdW5kIHRoZW4gY2hlY2sgdXNlCi0gICAgaWYgKHN0eWxlRm91bmQpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50Ci0gICAgICBTT0FQQm9keSBzb2FwQm9keSA9IGdldElucHV0U29hcEJvZHkoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBzb2FwYmluZDpib2R5LCB0aGVuIGNoZWNrIGFnYWluc3QgZGVmYXVsdCB1c2UgdmFsdWUKLSAgICAgIGlmICgoc29hcEJvZHkgPT0gbnVsbCkgfHwgKHNvYXBCb2R5LmdldFVzZSgpID09IG51bGwpKQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tVc2UuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgICAgICBzdHlsZUFuZFVzZUZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tVc2UuZXF1YWxzKHNvYXBCb2R5LmdldFVzZSgpKSkKLSAgICAgICAgICBzdHlsZUFuZFVzZUZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVBbmRVc2VGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc29hcGJpbmQ6YmluZGluZy4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gc29hcGJpbmQ6YmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUEJpbmRpbmcgZ2V0U29hcEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBudWxsOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIGlmICgoZXh0RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCkgJiYgKHNvYXBCaW5kaW5nID09IG51bGwpOwotICAgICAgICApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIG9iajsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzb2FwQmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc29hcGJpbmQ6b3BlcmF0aW9uLgotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiAgYSBCaW5kaW5nT3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHJldHVybiBzb2FwYmluZDpvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNPQVBPcGVyYXRpb24gZ2V0U29hcE9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBudWxsOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIGlmICgoZXh0RWxlbWVudHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCkgJiYgKHNvYXBPcGVyYXRpb24gPT0gbnVsbCk7Ci0gICAgICAgICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iaiA9IGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgb2JqOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNvYXBPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNvYXBiaW5kOmJvZHkgZnJvbSBpbnB1dCBlbGVtZW50LgotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiAgdGhlIEJpbmRpbmdPcGVyYXRpb24gb2JqZWN0LgotICAgKiBAcmV0dXJuIHNvYXBiaW5kOmJvZHkgZnJvbSBpbnB1dCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQQm9keSBnZXRJbnB1dFNvYXBCb2R5KEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gbnVsbDsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBudWxsOwotCi0gICAgLy8gRmluZCB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50Ci0gICAgaWYgKChleHRFbGVtZW50cyA9Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKQotICAgICAgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgaXRlcmF0b3IuaGFzTmV4dCgpICYmIChzb2FwQm9keSA9PSBudWxsKTsKLSAgICAgICAgKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqID0gaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgewotICAgICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBvYmo7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJvZHk7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCBtZXNzYWdlcyByZWZlcmVuY2VkIGJ5IGEgaGVhZGVyIG9yIGhlYWRlcmZhdWx0LgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiAgYSBEZWZpbml0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gbWVzc2FnZXMgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSGFzaFNldCBmaW5kTWVzc2FnZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0KLSAgICBIYXNoU2V0IHRlbXBNZXNzYWdlcywgYmluZGluZ01lc3NhZ2VzID0gbmV3IEhhc2hTZXQoKTsKLQotICAgIEhhc2hTZXQgcG9ydFR5cGVNZXNzYWdlcyA9IGZpbmRNZXNzYWdlcyhiaW5kaW5nLmdldFBvcnRUeXBlKCkpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIG9wZXJhdGlvbgotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHRoZW4gdGhlIG91dHB1dAotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGVtcE1lc3NhZ2VzID0KLSAgICAgICAgICBmaW5kTWVzc2FnZXMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nSW5wdXQoKQotICAgICAgICAgICAgICAuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICAgICAgICAgICAgLml0ZXJhdG9yKCksCi0gICAgICAgICAgICBwb3J0VHlwZU1lc3NhZ2VzLAotICAgICAgICAgICAgZGVmaW5pdGlvbik7Ci0KLSAgICAgICAgLy8gQWRkIG1lc3NhZ2VzIHRvIGJpbmRpbmcgbWVzc2FnZSBzZXQKLSAgICAgICAgYmluZGluZ01lc3NhZ2VzLmFkZEFsbCh0ZW1wTWVzc2FnZXMpOwotICAgICAgfQotCi0gICAgICAvLyBQcm9jZXNzIG91dHB1dAotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRlbXBNZXNzYWdlcyA9Ci0gICAgICAgICAgZmluZE1lc3NhZ2VzKAotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbgotICAgICAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpCi0gICAgICAgICAgICAgIC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgICAgICAgICAgICAuaXRlcmF0b3IoKSwKLSAgICAgICAgICAgIHBvcnRUeXBlTWVzc2FnZXMsCi0gICAgICAgICAgICBkZWZpbml0aW9uKTsKLQotICAgICAgICAvLyBBZGQgbWVzc2FnZXMgdG8gYmluZGluZyBtZXNzYWdlIHNldAotICAgICAgICBiaW5kaW5nTWVzc2FnZXMuYWRkQWxsKHRlbXBNZXNzYWdlcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdNZXNzYWdlczsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5kIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IGEgaGVhZGVyIG9yIGhlYWRlcmZhdWx0LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgYSBQb3J0VHlwZSBvYmplY3QuCi0gICAqIEByZXR1cm4gaGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSGFzaFNldCBmaW5kTWVzc2FnZXMoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgb3BlcmF0aW9uIHRvIHByb2Nlc3MKLSAgICAgIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gR2V0IGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZQotICAgICAgaWYgKG9wZXJhdGlvbi5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wZXJhdGlvbi5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBpZiAob3BlcmF0aW9uLmdldE91dHB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wZXJhdGlvbi5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICAvLyBQcm9jZXNzIGFueSBmYXVsdHMKLSAgICAgIEl0ZXJhdG9yIGZhdWx0cyA9IG9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKCgoRmF1bHQpIGZhdWx0cy5uZXh0KCkpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lc3NhZ2VTZXQ7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICogQHBhcmFtIGV4dEVsZW1lbnRMaXN0IGEgbGlzdCBvZiBleHRlcm5hbCBlbGVtZW50cy4KLSAgICogQHBhcmFtIG1lc3NhZ2VTZXQgYSBzZXQgb2YgbWVzc2FnZXMuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgYSBoZWFkZXIgb3IgaGVhZGVyZmF1bHQuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIEhhc2hTZXQgZmluZE1lc3NhZ2VzKAotICAgIEl0ZXJhdG9yIGV4dEVsZW1lbnRMaXN0LAotICAgIEhhc2hTZXQgbWVzc2FnZVNldCwKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBIYXNoU2V0IHJldHVyblNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudDsKLSAgICBNZXNzYWdlIHNhdmVNZXNzYWdlID0gbnVsbDsKLQotICAgIHdoaWxlIChleHRFbGVtZW50TGlzdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IGV4dC4gZWxlbWVudAotICAgICAgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudExpc3QubmV4dCgpOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWU7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0KLSAgICAgIC8vIElmIHRoaXMgaXMgYSBzb2FwOmhlYWRlciBlbGVtZW50LCB0aGVuIGNoZWNrIGZvciBtZXNzYWdlIHJlZmVyZW5jZQotICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgZXh0RWxlbWVudDsKLSAgICAgICAgaWYgKChtZXNzYWdlUU5hbWUgPSBzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIG1lc3NhZ2Ugbm90IGZvdW5kLCB0aGVuIGNyZWF0ZSBhIGR1bW15IG1lc3NhZ2UgZWxlbWVudAotICAgICAgICAgIGlmICgobWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VW5kZWZpbmVkKHRydWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghbWVzc2FnZVNldC5jb250YWlucyhtZXNzYWdlKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm5TZXQuYWRkKG1lc3NhZ2UpOwotICAgICAgICAgICAgc2F2ZU1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFByb2Nlc3MgYW55IGhlYWRlciBmYXVsdHMgd2l0aGluIHRoaXMgaGVhZGVyCi0gICAgICAgIEl0ZXJhdG9yIGhlYWRlckZhdWx0TGlzdCA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChoZWFkZXJGYXVsdExpc3QuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHNvYXAgaGVhZGVyIGZhdWx0Ci0gICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9Ci0gICAgICAgICAgICAoU09BUEhlYWRlckZhdWx0KSBoZWFkZXJGYXVsdExpc3QubmV4dCgpOwotICAgICAgICAgIGlmICgobWVzc2FnZVFOYW1lID0gc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBtZXNzYWdlIG5vdCBmb3VuZCwgdGhlbiBjcmVhdGUgYSBkdW1teSBtZXNzYWdlIGVsZW1lbnQKLSAgICAgICAgICAgIGlmICgobWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpKSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzYWdlID0gZGVmaW5pdGlvbi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICAgICAgICAgICAgbWVzc2FnZS5zZXRVbmRlZmluZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIG1lc3NhZ2Ugbm90IGluIG1lc3NhZ2Ugc2V0IGFuZCByZXR1cm4gc2V0LCB0aGVuIGFkZCBpdCAgCi0gICAgICAgICAgICBpZiAoIW1lc3NhZ2VTZXQuY29udGFpbnMobWVzc2FnZSkKLSAgICAgICAgICAgICAgJiYgKChzYXZlTWVzc2FnZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHx8IChzYXZlTWVzc2FnZSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAmJiAhc2F2ZU1lc3NhZ2UuZ2V0UU5hbWUoKS5lcXVhbHMobWVzc2FnZS5nZXRRTmFtZSgpKSkpKQotICAgICAgICAgICAgICByZXR1cm5TZXQuYWRkKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5TZXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NPQVAxMldTREwoV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JaWYgKHdzZGxEb2N1bWVudCAhPSBudWxsKQotCXsKLQkgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHdzZGxEb2N1bWVudC5nZXRCaW5kaW5ncygpOwotCSAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBpZiAoYmluZGluZ3MgIT0gbnVsbCkKLQkgIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLQkJCWV4dGVuc2liaWxpdHlFbGVtZW50TGlzdC5hZGRBbGwoYmluZGluZ3NbaV0uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IGV4dGVuc2liaWxpdHlFbGVtZW50TGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSAKLQkJewotCQkgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmIChXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUDEyLmVxdWFscyhlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCkpKQotCQkJewotCQkJICByZXN1bHQgPSB0cnVlOwotCQkJICBicmVhazsKLQkJCX0KLQkJfQotCSAgfQotCX0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9WaXNpdG9yQWRhcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvVmlzaXRvckFkYXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5MDkzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9WaXNpdG9yQWRhcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Qcm94eTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGNsYXNzIGFkYXB0cyB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGltcGxlbWVudGVkCi0gKiA8Y29kZT5XU0RMVmlzaXRvcjwvY29kZT4gbWV0aG9kcy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgY2xhc3MgVmlzaXRvckFkYXB0b3IgaW1wbGVtZW50cyBJbnZvY2F0aW9uSGFuZGxlcgotewotCi0gIC8vIG9wdGltaXphdGlvbiBoaW50Ci0gIHN0YXRpYyBmaW5hbCBwcml2YXRlIENsYXNzW10gdmlzaXRvckNsYXNzID0gbmV3IENsYXNzW10geyBXU0RMVmlzaXRvci5jbGFzcyB9OwotCi0gIC8qKgotICAgKiBUaGUgYXJyYXkgaXMgdXNlZCBmb3IgZGV0ZXJtaW5hdGlvbiBvZiBhY3R1YWwgamF2YXgud3NkbCBjbGFzcwotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSB3c2RsID0KLSAgICBuZXcgQ2xhc3NbXSB7Ci0gICAgICBQYXJ0LmNsYXNzLAotICAgICAgU2VydmljZS5jbGFzcywKLSAgICAgIFR5cGVzLmNsYXNzLAotICAgICAgT3BlcmF0aW9uLmNsYXNzLAotICAgICAgSW5wdXQuY2xhc3MsCi0gICAgICBPdXRwdXQuY2xhc3MsCi0gICAgICBGYXVsdC5jbGFzcywKLSAgICAgIEJpbmRpbmcuY2xhc3MsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLAotICAgICAgQmluZGluZ0lucHV0LmNsYXNzLAotICAgICAgQmluZGluZ091dHB1dC5jbGFzcywKLSAgICAgIEJpbmRpbmdGYXVsdC5jbGFzcywKLSAgICAgIEltcG9ydC5jbGFzcywKLSAgICAgIEVsZW1lbnQuY2xhc3MsCi0gICAgICBNZXNzYWdlLmNsYXNzLAotICAgICAgUG9ydC5jbGFzcywKLSAgICAgIFBvcnRUeXBlLmNsYXNzLAotICAgICAgRGVmaW5pdGlvbi5jbGFzcywKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLAotICAgICAgU09BUEJpbmRpbmcuY2xhc3MsCi0gICAgICBTT0FQQm9keS5jbGFzcywKLSAgICAgIFNPQVBIZWFkZXIuY2xhc3MsCi0gICAgICBTT0FQSGVhZGVyRmF1bHQuY2xhc3MsCi0gICAgICBTT0FQRmF1bHQuY2xhc3MsCi0gICAgICBTT0FQT3BlcmF0aW9uLmNsYXNzIH07Ci0KLSAgZmluYWwgcHJpdmF0ZSBPYmplY3QgdmlzaXRvcjsKLQotICBwcml2YXRlIE1hcCBtZXRob2RzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBvICBhIHZpc2l0b3Igb2JqZWN0LgotICAgKi8KLSAgcHJpdmF0ZSBWaXNpdG9yQWRhcHRvcihPYmplY3QgbykKLSAgewotICAgIHRoaXMudmlzaXRvciA9IG87Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyBtZXRob2QgdG8gbWV0aG9kIGJpbmRpbmcuCi0gICAqIEBwYXJhbSB3c2RsTWV0aG9kICAgIGEgV1NETCBtZXRob2QuCi0gICAqIEBwYXJhbSB0YXJnZXRNZXRob2QgIGEgIHRhcmdldCBtZXRob2QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkTWV0aG9kQmluZGluZyhNZXRob2Qgd3NkbE1ldGhvZCwgTWV0aG9kIHRhcmdldE1ldGhvZCkKLSAgewotICAgIG1ldGhvZHMucHV0KHdzZGxNZXRob2QsIHRhcmdldE1ldGhvZCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBwcm94aWVzIGFsbCAidmlzaXQoWFhYKSIgbWV0aG9kcyB0byB0aGUgY29ycmVzcG9uZGluZwotICAgKiAidmlzaXQoWFhYKSIgbWV0aG9kcyBvZiB0aGUgdGFyZ2V0IHZpc2l0b3Igb2JqZWN0LiAKLSAgICogQHNlZSBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uSGFuZGxlciNpbnZva2UoT2JqZWN0LCBNZXRob2QsIE9iamVjdFtdKQotICAgKi8KLSAgcHVibGljIE9iamVjdCBpbnZva2UoT2JqZWN0IHByb3h5LCBNZXRob2QgbSwgT2JqZWN0W10gcGFyYW1zKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTWV0aG9kIHRhcmdldCA9IChNZXRob2QpIG1ldGhvZHMuZ2V0KG0pOwotICAgICAgLy8gYXNzZXJ0IHRhcmdldCAhPSBudWxsCi0gICAgICByZXR1cm4gdGFyZ2V0Lmludm9rZSh2aXNpdG9yLCBwYXJhbXMpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBleHRyYWN0IHRoZSBzaG9ydCBjbGFzcyBuYW1lLiAKLSAgICogQHBhcmFtIGMgIGEgY2xhc3MuCi0gICAqIEByZXR1cm4gdGhlIHNob3J0IGNsYXNzIG5hbWUuCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZShDbGFzcyBjKQotICB7Ci0gICAgaWYgKGMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGMuZ2V0TmFtZSgpOwotICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKG5hbWUubGFzdEluZGV4T2YoIi4iKSArIDEpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGdlbmVyYXRlcyBwcm94eSBmb3IgdGhlIGdpdmVuIHZpc2l0b3IuCi0gICAqIFByb3h5IHJlZGlyZWN0cyBhbGwgdmlzaXQoWFhYKSBjYWxsYmFjayB0byB0aGUgaW1wbGVtZW50ZWQgaW4gdmlzaXRvcgotICAgKiBvYmplY3QuCi0gICAqIEBwYXJhbSB2aXNpdG9yICBhIHZpc3RvciBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBwcm94eSBmb3IgdGhlIGdpdmVuIHZpc2l0b3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExUcmF2ZXJzYWwgYWRhcHQoT2JqZWN0IHZpc2l0b3IpCi0gIHsKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0KLSAgICBpZiAodmlzaXRvciA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVmlzaXRvciBvYmplY3QgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLSAgICBWaXNpdG9yQWRhcHRvciBhZGFwdG9yID0gbmV3IFZpc2l0b3JBZGFwdG9yKHZpc2l0b3IpOwotCi0gICAgLy8gY2hlY2sgd2hldGhlciBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAotICAgIC8vIGdldCByZWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAgICBDbGFzcyBjID0gdmlzaXRvci5nZXRDbGFzcygpOwotICAgIC8vIGl0ZXJhdGVzIHRocm91Z2ggd3NkbCBhcnRpZmFjdHMgYW5kIGxvb2tpbmcgZm9yCi0gICAgLy8gdm9pZCB2aXNpdChYWFgpIGltcGxlbWVudGVkIG1ldGhvZHMuICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGwubGVuZ3RoOyBpKyspCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgbWV0aG9kIGlzIG5vdCBmb3VuZCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duCi0gICAgICAgIE1ldGhvZCBtID0KLSAgICAgICAgICBjLmdldE1ldGhvZCgKLSAgICAgICAgICAgICJ2aXNpdCIsCi0gICAgICAgICAgICBuZXcgQ2xhc3NbXSB7IHdzZGxbaV0sIE9iamVjdC5jbGFzcywgV1NETFRyYXZlcnNhbENvbnRleHQuY2xhc3MgfSk7Ci0gICAgICAgIC8vIHJlZ2lzdGVyIGJpbmRpbmcgV1NETFZpc2l0b3IgbWV0aG9kIC0+IHRhcmdldCB2aXNpdG9yIG1ldGhvZAotICAgICAgICBhZGFwdG9yLmFkZE1ldGhvZEJpbmRpbmcoCi0gICAgICAgICAgV1NETFZpc2l0b3IuY2xhc3MuZ2V0TWV0aG9kKAotICAgICAgICAgICAgInZpc2l0IiwKLSAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgd3NkbFtpXSwgT2JqZWN0LmNsYXNzLCBXU0RMVHJhdmVyc2FsQ29udGV4dC5jbGFzcyB9KSwKLSAgICAgICAgICBtKTsKLSAgICAgICAgLy8gcmVnaXN0ZXIgdmlzaXRYWFggaW4gV1NETFRyYXZlcnNhbEJ1aWxkZXIKLSAgICAgICAgbSA9Ci0gICAgICAgICAgV1NETFRyYXZlcnNhbC5jbGFzcy5nZXRNZXRob2QoCi0gICAgICAgICAgICAidmlzaXQiICsgZ2V0TmFtZSh3c2RsW2ldKSwKLSAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgYm9vbGVhbi5jbGFzcyB9KTsKLSAgICAgICAgbS5pbnZva2UodHJhdmVyc2FsLCBuZXcgT2JqZWN0W10geyBCb29sZWFuLlRSVUUgfSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAvLyBjb25zdHJ1Y3QgdGhlIFdTRExWaXNpdG9yIGJ5IHVzaW5nIGphdmEubGFuZy5yZWZsZWN0LlByb3h5Ci0gICAgQ2xhc3NMb2FkZXIgbG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLSAgICBXU0RMVmlzaXRvciB3c2RsVmlzaXRvciA9Ci0gICAgICAoV1NETFZpc2l0b3IpIFByb3h5Lm5ld1Byb3h5SW5zdGFuY2UobG9hZGVyLCB2aXNpdG9yQ2xhc3MsIGFkYXB0b3IpOwotICAgIC8vIHRyYXZlcnNlIFdTREwgZG9jdW1lbnQKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih3c2RsVmlzaXRvcik7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFRyYXZlcnNhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFRyYXZlcnNhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWJjMmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHBsYWluIHRyYXZlcnNlIG92ZXIgV1NETCBhcnRpZmFjdHMuCi0gKiBXU0RMVHJhdmVyc2FsIGlzIGNvbnRleHQtZHJpdmVuIHRyYXZlcnNhbC4gCi0gKiAKLSAqIEBhdXRob3IgQW5kcmV5IEt1bGlrCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVHJhdmVyc2FsCi17Ci0KLSAgLyoqCi0gICAqIEN1cnJlbnQgV1NETCB2aXNpdG9yIChjYWxsYmFjaykuCi0gICAqLwotICBwcml2YXRlIFdTRExWaXNpdG9yIHZpc2l0b3I7Ci0KLSAgLyoqCi0gICAqIEZsYWdzIHdoaWNoIHNwZWNpZnkgd2hldGhlciB0cmF2ZXJzYWwgd2lsbCB0cmF2ZXJzIGZyb20gb25lIFdTREwgYXJ0aWZhY3QKLSAgICogdG8gYW5vdGhlci4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyQmluZGluZ09wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nMlBvcnRUeXBlID0gdHJ1ZTsgLy8gcmVmZXJlbmNlCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nT3V0cHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uID0gdHJ1ZTsgLy8gcmVmZXJlbmNlICAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ091dHB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMkltcG9ydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yTWVzc2FnZSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yUG9ydFR5cGUgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMlNlcnZpY2UgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlRmF1bHQyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUZhdWx0Mk1lc3NhZ2UgPSB0cnVlOyAvLyByZWZlcmVuY2UgCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUltcG9ydDJEZWZpbml0aW9uID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlSW1wb3J0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VJbnB1dDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlSW5wdXQyTWVzc2FnZSA9IHRydWU7IC8vIHJlZmVyZW5jZSAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlTWVzc2FnZTJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlTWVzc2FnZTJQYXJ0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24yRmF1bHQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24ySW5wdXQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPdXRwdXQyTWVzc2FnZSA9IHRydWU7IC8vIHJlZmVyZW5jZSAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUG9ydDJCaW5kaW5nID0gdHJ1ZTsgLy8gcmVmZXJlbmNlIAotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VQb3J0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUG9ydFR5cGUyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVBvcnRUeXBlMk9wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNlcnZpY2UyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VTZXJ2aWNlMlBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VUeXBlczJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlVHlwZXMyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICAvL3ByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNPQVBCb2R5MlBhcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyU09BUEJpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMlNPQVBPcGVyYXRpb24gPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEhlYWRlciA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nRmF1bHQyU09BUEZhdWx0ID0gdHJ1ZTsKLQotICAvKioKLSAgICogRmxhZ3Mgd2hpY2ggc3BlY2lmeSB3aGV0aGVyIHRyYXZlcnNhbCB3aWxsIHZpc2l0IGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBhcnRpZmFjdC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmcgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0QmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmdJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0RGVmaW5pdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRFbGVtZW50ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEltcG9ydCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRNZXNzYWdlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdE9wZXJhdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0UGFydCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRQb3J0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFBvcnRUeXBlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNlcnZpY2UgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0VHlwZXMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEJpbmRpbmcgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEJvZHkgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNPQVBPcGVyYXRpb24gPSBmYWxzZTsKLQotICBMaXN0IGFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9uczsKLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwoKQotICB7Ci0JYWxyZWFkeVRyYXZlcnNlZERlZmluaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2Qgc3BlY2lmaWVzIHRoYXQgdHJhdmVyc2FsIHdpbGwgaWdub3JlIGluZGlyZWN0IHJlZmVyZW5jZXMgYmV0d2VlbgotICAgKiBXU0RMIGFydGlmYWN0cy4gRm9yIGV4YW1wbGU6Ci0gICAqIDxvbD4KLSAgICogICA8bGk+YmluZGluZyB0byBwb3J0IHR5cGU8L2xpPgotICAgKiAgIDxsaT5iaW5kaW5nIG9wZXJhdGlvbiB0byBvcGVyYXRpb248L2xpPgotICAgKiAgIDxsaT5mYXVsdCB0byBtZXNzYWdlPC9saT4KLSAgICogICA8bGk+aW5wdXQgdG8gbWVzc2FnZTwvbGk+Ci0gICAqICAgPGxpPm91dHB1dCB0byBtZXNzYWdlPC9saT4KLSAgICogICA8bGk+cG9ydCB0byBiaW5kaW5nPC9saT4KLSAgICogPC9vbD4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGlnbm9yZVJlZmVyZW5jZXMoKQotICB7Ci0gICAgaWdub3JlQmluZGluZzJQb3J0VHlwZSgpOwotICAgIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKCk7Ci0gICAgaWdub3JlRmF1bHQyTWVzc2FnZSgpOwotICAgIGlnbm9yZUlucHV0Mk1lc3NhZ2UoKTsKLSAgICBpZ25vcmVPdXRwdXQyTWVzc2FnZSgpOwotICAgIGlnbm9yZVBvcnQyQmluZGluZygpOwotICAgIC8vaWdub3JlU09BUEJvZHkyUGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2Qgc2V0cyB2aXNpdG9yLgotICAgKiBAcGFyYW0gdmlzaXRvciAgYSBXU0RMIHZpc2l0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFdTRExWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgICB0aGlzLnZpc2l0b3IgPSB2aXNpdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyU09BUEJpbmRpbmcoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMlNPQVBCaW5kaW5nID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yU09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yU09BUE9wZXJhdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nSW5wdXQyU09BUEhlYWRlcigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQSGVhZGVyID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdJbnB1dDJTT0FQQm9keSgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dDJTT0FQQm9keSgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJTT0FQRmF1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEhlYWRlcjJTT0FQSGVhZGVyRmF1bHQoKQotICB7Ci0gICAgdHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZzJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyUG9ydFR5cGUoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMlBvcnRUeXBlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdGYXVsdDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdJbnB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0lucHV0MkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nRmF1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdJbnB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPdXRwdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24yQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVEZWZpbml0aW9uMkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJJbXBvcnQoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkltcG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVEZWZpbml0aW9uMk1lc3NhZ2UoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMk1lc3NhZ2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJQb3J0VHlwZSgpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yUG9ydFR5cGUgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJTZXJ2aWNlKCkKLSAgewotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJTZXJ2aWNlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24yVHlwZXMoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VGYXVsdDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0Mk1lc3NhZ2UoKQotICB7Ci0gICAgdHJhdmVyc2VGYXVsdDJNZXNzYWdlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUltcG9ydDJEZWZpbml0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW1wb3J0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVJbnB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVJbnB1dDJNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlSW5wdXQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVNZXNzYWdlMkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VNZXNzYWdlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlTWVzc2FnZTJQYXJ0KCkKLSAgewotICAgIHRyYXZlcnNlTWVzc2FnZTJQYXJ0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbjJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlT3BlcmF0aW9uMkZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbjJJbnB1dCgpCi0gIHsKLSAgICB0cmF2ZXJzZU9wZXJhdGlvbjJJbnB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPcGVyYXRpb24yT3V0cHV0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMk91dHB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPdXRwdXQyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZU91dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU91dHB1dDJNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlT3V0cHV0Mk1lc3NhZ2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUGFydDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVBvcnQyQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnQyQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVQb3J0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VQb3J0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydDJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydFR5cGUyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnRUeXBlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydFR5cGUyT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlUG9ydFR5cGUyT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNlcnZpY2UyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlU2VydmljZTJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTZXJ2aWNlMlBvcnQoKQotICB7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMlBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlVHlwZXMyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVR5cGVzMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4uLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVUeXBlczJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVR5cGVzMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRTT0FQQmluZGluZyhib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTT0FQQmluZGluZyA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBCb2R5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBCb2R5ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0U09BUEZhdWx0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBGYXVsdCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBIZWFkZXIoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0U09BUEhlYWRlciA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBIZWFkZXJGYXVsdChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTT0FQSGVhZGVyRmF1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRTT0FQT3BlcmF0aW9uKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBPcGVyYXRpb24gPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRCaW5kaW5nKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEJpbmRpbmcgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRCaW5kaW5nRmF1bHQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ0ZhdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0QmluZGluZ0lucHV0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEJpbmRpbmdJbnB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbiA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEJpbmRpbmdPdXRwdXQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ091dHB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdERlZmluaXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RGVmaW5pdGlvbiA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEVsZW1lbnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RWxlbWVudCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0RmF1bHQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RmF1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRJbXBvcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0SW1wb3J0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0SW5wdXQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0SW5wdXQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRNZXNzYWdlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdE1lc3NhZ2UgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRPcGVyYXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0T3BlcmF0aW9uID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0T3V0cHV0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdE91dHB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBhcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0UGFydCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBvcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0UG9ydCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBvcnRUeXBlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFBvcnRUeXBlID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0U2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTZXJ2aWNlID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0VHlwZXMoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0VHlwZXMgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkJpbmRpbmcgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZVBvcnQyQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0lucHV0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nSW5wdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ091dHB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24oKQotICB7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRGVmaW5pdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlUG9ydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUZhdWx0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZU91dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZU1lc3NhZ2UyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0VHlwZTJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VUeXBlczJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nRmF1bHQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlVHlwZXMyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmcyU09BUEJpbmRpbmcgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJTT0FQT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEJvZHkoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQSGVhZGVyKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNPQVBIZWFkZXIyU09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW1wb3J0KCkKLSAgewotICAgIHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24gPSBmYWxzZTsgLy8gZml4Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW5wdXQoKQotICB7Ci0gICAgdHJhdmVyc2VPcGVyYXRpb24ySW5wdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlRmF1bHQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJNZXNzYWdlID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VJbnB1dDJNZXNzYWdlID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VPdXRwdXQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0VHlwZTJPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPdXRwdXQoKQotICB7Ci0gICAgdHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUGFydCgpCi0gIHsKLSAgICB0cmF2ZXJzZU1lc3NhZ2UyUGFydCA9IGZhbHNlOwotICAgIC8vdHJhdmVyc2VTT0FQQm9keTJQYXJ0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNlcnZpY2UyUG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVBvcnRUeXBlKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJQb3J0VHlwZSA9IGZhbHNlOwotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJQb3J0VHlwZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNlcnZpY2UoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMlNlcnZpY2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVUeXBlcygpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yVHlwZXMgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVzZVhYWCB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIHRoZSB2aXNpdFhYWCB2YXJpYWJsZXMKLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGp1c3QoKQotICB7Ci0gICAgYWRqdXN0UGFydCgpOwotICAgIGFkanVzdFNlcnZpY2UoKTsKLSAgICBhZGp1c3RUeXBlcygpOwotICAgIGFkanVzdE9wZXJhdGlvbigpOwotICAgIGFkanVzdElucHV0KCk7Ci0gICAgYWRqdXN0T3V0cHV0KCk7Ci0gICAgYWRqdXN0RmF1bHQoKTsKLSAgICBhZGp1c3RCaW5kaW5nKCk7Ci0gICAgYWRqdXN0QmluZGluZ09wZXJhdGlvbigpOwotICAgIGFkanVzdEJpbmRpbmdJbnB1dCgpOwotICAgIGFkanVzdEJpbmRpbmdPdXRwdXQoKTsKLSAgICBhZGp1c3RCaW5kaW5nRmF1bHQoKTsKLSAgICBhZGp1c3RJbXBvcnQoKTsKLSAgICBhZGp1c3RFbGVtZW50KCk7Ci0gICAgYWRqdXN0TWVzc2FnZSgpOwotICAgIGFkanVzdFBvcnQoKTsKLSAgICBhZGp1c3RQb3J0VHlwZSgpOwotICAgIGFkanVzdERlZmluaXRpb24oKTsKLSAgICBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIGFkanVzdFNPQVBCaW5kaW5nKCk7Ci0gICAgYWRqdXN0U09BUEJvZHkoKTsKLSAgICBhZGp1c3RTT0FQSGVhZGVyKCk7Ci0gICAgYWRqdXN0U09BUEhlYWRlckZhdWx0KCk7Ci0gICAgYWRqdXN0U09BUEZhdWx0KCk7Ci0gICAgYWRqdXN0U09BUE9wZXJhdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPSB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UGFydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRQYXJ0IHx8ICh0cmF2ZXJzZVBhcnQyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQYXJ0KCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RTT0FQSGVhZGVyKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRTT0FQSGVhZGVyCi0gICAgICAgIHx8ICh0cmF2ZXJzZVNPQVBIZWFkZXIyU09BUEhlYWRlckZhdWx0ICYmIGFkanVzdFNPQVBIZWFkZXJGYXVsdCgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlU09BUEhlYWRlcigpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ091dHB1dCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ091dHB1dAotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ091dHB1dDJTT0FQQm9keQotICAgICAgICAgICYmIGFkanVzdFNPQVBCb2R5KCkKLSAgICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIgJiYgYWRqdXN0U09BUEhlYWRlcigpKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEVsZW1lbnQoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0RWxlbWVudDsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlRWxlbWVudCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0VHlwZXMoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdFR5cGVzCi0gICAgICAgIHx8ICh0cmF2ZXJzZVR5cGVzMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VUeXBlczJFeHRlbnNpYmlsaXR5RWxlbWVudCAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlVHlwZXMoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdFNPQVBCaW5kaW5nKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPSB2aXNpdFNPQVBCaW5kaW5nOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQQmluZGluZygpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UG9ydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0UG9ydAotICAgICAgICB8fCAodHJhdmVyc2VQb3J0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZVBvcnQyQmluZGluZyAmJiBhZGp1c3RCaW5kaW5nKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQb3J0KCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RPcGVyYXRpb24oKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdE9wZXJhdGlvbgotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZU9wZXJhdGlvbjJJbnB1dCAmJiBhZGp1c3RJbnB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ICYmIGFkanVzdE91dHB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yRmF1bHQgJiYgYWRqdXN0RmF1bHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZU9wZXJhdGlvbigpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbgotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdGYXVsdCAmJiBhZGp1c3RCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nT3V0cHV0ICYmIGFkanVzdEJpbmRpbmdPdXRwdXQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJPcGVyYXRpb24gJiYgYWRqdXN0T3BlcmF0aW9uKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0ICYmIGFkanVzdEJpbmRpbmdJbnB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJTT0FQT3BlcmF0aW9uICYmIGFkanVzdFNPQVBPcGVyYXRpb24oKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdElucHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRJbnB1dAotICAgICAgICB8fCAodHJhdmVyc2VJbnB1dDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlSW5wdXQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVJbnB1dCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZygpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZwotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24gJiYgYWRqdXN0QmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmcyUG9ydFR5cGUgJiYgYWRqdXN0UG9ydFR5cGUoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZzJTT0FQQmluZGluZyAmJiBhZGp1c3RTT0FQQmluZGluZygpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlQmluZGluZygpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U09BUEJvZHkoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0U09BUEJvZHk7Ci0gICAgLyogfHwgCi0gICAgCQkodHJhdmVyc2VTT0FQQm9keTJQYXJ0ICYmIGFkanVzdFBhcnQoKSk7Ki8KLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlU09BUEJvZHkoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdFNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRTT0FQSGVhZGVyRmF1bHQ7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ0lucHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRCaW5kaW5nSW5wdXQKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICAgICAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkKLSAgICAgICAgICAmJiBhZGp1c3RTT0FQQm9keSgpCi0gICAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgJiYgYWRqdXN0U09BUEhlYWRlcigpKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdJbnB1dCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0T3V0cHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRPdXRwdXQKLSAgICAgICAgfHwgKHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPdXRwdXQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVPdXRwdXQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ0ZhdWx0Ci0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCAmJiBhZGp1c3RTT0FQRmF1bHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRTT0FQT3BlcmF0aW9uOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQT3BlcmF0aW9uKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3REZWZpbml0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXREZWZpbml0aW9uCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24ySW1wb3J0ICYmIGFkanVzdEltcG9ydCgpKQotICAgICAgICB8fCAodHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzICYmIGFkanVzdFR5cGVzKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICAgICAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VEZWZpbml0aW9uMlBvcnRUeXBlICYmIGFkanVzdFBvcnRUeXBlKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyAmJiBhZGp1c3RCaW5kaW5nKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yU2VydmljZSAmJiBhZGp1c3RTZXJ2aWNlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVEZWZpbml0aW9uKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RTT0FQRmF1bHQoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0U09BUEZhdWx0OwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQRmF1bHQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEltcG9ydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRJbXBvcnQgfHwgKHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24KLSAgICAvKiAmJiBhZGp1c3REZWZpbml0aW9uKCkqLwotICAgICAgKQotICAgIHx8IC8vIGF2b2lkIGN5Y2xpbmcgcHJvYmxlbS4gVGh1cywgeW91IHNob3VsZCBjYWxsIGlnbm9yZUltcG9ydCBtYW51YWxseSAgCi0gICAodHJhdmVyc2VJbXBvcnQyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVJbXBvcnQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEZhdWx0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRGYXVsdAotICAgICAgICB8fCAodHJhdmVyc2VGYXVsdDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlRmF1bHQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UG9ydFR5cGUoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdFBvcnRUeXBlCi0gICAgICAgIHx8ICh0cmF2ZXJzZVBvcnRUeXBlMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VQb3J0VHlwZTJPcGVyYXRpb24gJiYgYWRqdXN0T3BlcmF0aW9uKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQb3J0VHlwZSgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U2VydmljZSgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0U2VydmljZQotICAgICAgICB8fCAodHJhdmVyc2VTZXJ2aWNlMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZVNlcnZpY2UyUG9ydCAmJiBhZGp1c3RQb3J0KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTZXJ2aWNlKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RNZXNzYWdlKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRNZXNzYWdlCi0gICAgICAgIHx8ICh0cmF2ZXJzZU1lc3NhZ2UyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZU1lc3NhZ2UyUGFydCAmJiBhZGp1c3RQYXJ0KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVNZXNzYWdlKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpFeHRlbnNpYmlsaXR5RWxlbWVudCAgYSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG9iakV4dGVuc2liaWxpdHlFbGVtZW50LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRFeHRlbnNpYmlsaXR5RWxlbWVudChvYmpFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgaWYgKHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9iakV4dGVuc2liaWxpdHlFbGVtZW50LCBwYXJlbnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwYXJ0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialBhcnQgIHRoZSBXU0RMIHBhcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKFBhcnQgb2JqUGFydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVBhcnRQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldFBhcnQob2JqUGFydCk7Ci0gICAgaWYgKHZpc2l0UGFydCkKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialBhcnQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQYXJ0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialBhcnQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VQYXJ0MkVsZW1lbnQpCi0gICAgICB0cmF2ZXJzZShvYmpQYXJ0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9ialBhcnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGhlYWRlciBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEhlYWRlciAgYSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgU09BUEhlYWRlciBvYmpTT0FQSGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVNPQVBIZWFkZXJQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldFNPQVBIZWFkZXIob2JqU09BUEhlYWRlcik7Ci0gICAgaWYgKHZpc2l0U09BUEhlYWRlcikKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBIZWFkZXIsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NTT0FQSGVhZGVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialNPQVBIZWFkZXIgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdAotICAgICAgJiYgb2JqU09BUEhlYWRlci5nZXRTT0FQSGVhZGVyRmF1bHRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialNPQVBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoU09BUEhlYWRlckZhdWx0KSBpdC5uZXh0KCksIG9ialNPQVBIZWFkZXIsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NTT0FQSGVhZGVyKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqRWxlbWVudCAgYSBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEVsZW1lbnQgb2JqRWxlbWVudCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRFbGVtZW50KG9iakVsZW1lbnQpOwotICAgIGlmICh2aXNpdEVsZW1lbnQpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9iakVsZW1lbnQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialR5cGVzICBhIFdTREwgdHlwZXMgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgcGFyZW50IG9mIHRoZSBXU0RMIHR5cGVzIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFR5cGVzIG9ialR5cGVzLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVR5cGVzUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRUeXBlcyhvYmpUeXBlcyk7Ci0gICAgaWYgKHZpc2l0VHlwZXMpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpUeXBlcywgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1R5cGVzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialR5cGVzID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlVHlwZXMyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpUeXBlcy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpUeXBlcywgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NUeXBlcygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVR5cGVzMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpUeXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqVHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpUeXBlcywgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1R5cGVzKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEJpbmRpbmcgIGEgV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTT0FQQmluZGluZyBvYmpTT0FQQmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRTT0FQQmluZGluZyhvYmpTT0FQQmluZGluZyk7Ci0gICAgaWYgKHZpc2l0U09BUEJpbmRpbmcpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBCaW5kaW5nLCBwYXJlbnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBkZWZpbml0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpEZWZpbml0aW9uICBhIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBkZWZpbml0aW9uIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgRGVmaW5pdGlvbiBvYmpEZWZpbml0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0JaWYgKChvYmpEZWZpbml0aW9uID09IG51bGwpIHx8ICh0aGlzLmFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9ucy5jb250YWlucyhvYmpEZWZpbml0aW9uKSkpCi0JewotCSAgcmV0dXJuOwkKLQl9Ci0JdGhpcy5hbHJlYWR5VHJhdmVyc2VkRGVmaW5pdGlvbnMuYWRkKG9iakRlZmluaXRpb24pOwotICAgIGN0eC5yZXN1bWVEZWZpbml0aW9uUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXREZWZpbml0aW9uKG9iakRlZmluaXRpb24pOwotCi0gICAgaWYgKHZpc2l0RGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9iakRlZmluaXRpb24sIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NEZWZpbml0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJJbXBvcnQgJiYgb2JqRGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBWZWN0b3IgdiA9IChWZWN0b3IpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHYuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cmF2ZXJzZSgoSW1wb3J0KSBpdDIubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VEZWZpbml0aW9uMkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqRGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakRlZmluaXRpb24uZ2V0VHlwZXMoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NEZWZpbml0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJNZXNzYWdlICYmIG9iakRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqRGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoTWVzc2FnZSkgaXQubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzRGVmaW5pdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJQb3J0VHlwZSAmJiBvYmpEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUG9ydFR5cGUpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyAmJiBvYmpEZWZpbml0aW9uLmdldEJpbmRpbmdzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEJpbmRpbmcpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yU2VydmljZSAmJiBvYmpEZWZpbml0aW9uLmdldFNlcnZpY2VzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKFNlcnZpY2UpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9iakRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzRGVmaW5pdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwb3J0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialBvcnQgIGEgV1NETCBwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgcGFyZW50IG9mIHRoZSBXU0RMIHBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZShQb3J0IG9ialBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVQb3J0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRQb3J0KG9ialBvcnQpOwotICAgIGlmICh2aXNpdFBvcnQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpQb3J0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzUG9ydCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpQb3J0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlUG9ydDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9ialBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqUG9ydCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlUG9ydDJCaW5kaW5nKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9ialBvcnQuZ2V0QmluZGluZygpLCBvYmpQb3J0LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqUG9ydCwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iak9wZXJhdGlvbiAgYSBXU0RMIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIG9wZXJhdGlvbiBhcnRpZmFjdHQuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE9wZXJhdGlvbiBvYmpPcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRPcGVyYXRpb24ob2JqT3BlcmF0aW9uKTsKLSAgICBpZiAodmlzaXRPcGVyYXRpb24pCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpPcGVyYXRpb24sIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqT3BlcmF0aW9uID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24ySW5wdXQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3BlcmF0aW9uLmdldElucHV0KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iak9wZXJhdGlvbi5nZXRPdXRwdXQoKSwgb2JqT3BlcmF0aW9uLCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlvbjJGYXVsdCAmJiBvYmpPcGVyYXRpb24uZ2V0RmF1bHRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iak9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEZhdWx0KSBpdC5uZXh0KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc09wZXJhdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpJbnB1dCAgYSBXU0RMIGlucHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgIHBhcmVudCBvZiB0aGUgV1NETCBpbnB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBJbnB1dCBvYmpJbnB1dCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVJbnB1dFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0SW5wdXQob2JqSW5wdXQpOwotICAgIGlmICh2aXNpdElucHV0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqSW5wdXQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NJbnB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpJbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUlucHV0MkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqSW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqSW5wdXQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW5wdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VJbnB1dDJNZXNzYWdlKQotICAgICAgdHJhdmVyc2Uob2JqSW5wdXQuZ2V0TWVzc2FnZSgpLCBvYmpJbnB1dCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEJvZHkgIGEgV1NETCBTT0FQIGJvZHkgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTT0FQQm9keSBvYmpTT0FQQm9keSwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vICAJY3R4LnJlc3VtZVNPQVBCb2R5UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRTT0FQQm9keShvYmpTT0FQQm9keSk7Ci0gICAgaWYgKHZpc2l0U09BUEJvZHkpCi0gICAgICAvLwl7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBCb2R5LCBwYXJlbnQsIGN0eCk7Ci0gICAgLyoJICBpZiAoIWN0eC5wcm9jZXNzU09BUEJvZHkoKSkKLSAgICAJCXJldHVybjsKLSAgICAJfQotICAgIAlpZiAob2JqU09BUEJvZHkgPT0gbnVsbCkKLSAgICAJCXJldHVybjsKLSAgICAJaWYgKHRyYXZlcnNlU09BUEJvZHkyUGFydCAmJiBvYmpTT0FQQm9keS5nZXRQYXJ0cygpICE9IG51bGwpIHsKLSAgICAJICBpZiAoY3R4KQotICAgIAkgIEl0ZXJhdG9yIGl0ID0gb2JqU09BUEJvZHkuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgIAkgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAJICAJCi0gICAgCQl0cmF2ZXJzZSgoUGFydClpdC5uZXh0KCksIG9ialNPQVBCb2R5LCBjdHgpOwotICAgIAkJaWYgKCFjdHgucHJvY2Vzc1NPQVBCb2R5KCkpCi0gICAgCQkgIHJldHVybjsKLSAgICAJICB9Ci0gICAgCX0KLSAgICAqLwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNPQVBIZWFkZXJGYXVsdCAgYSBXU0RMIFNPQVAgaGVhZGVyIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBIZWFkZXJGYXVsdCBvYmpTT0FQSGVhZGVyRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHguc2V0U09BUEhlYWRlckZhdWx0KG9ialNPQVBIZWFkZXJGYXVsdCk7Ci0gICAgaWYgKHZpc2l0U09BUEhlYWRlckZhdWx0KQotICAgICAgdmlzaXRvci52aXNpdChvYmpTT0FQSGVhZGVyRmF1bHQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpPdXRwdXQgIGEgV1NETCBvdXRwdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogQHBhcmFtIGN0eAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE91dHB1dCBvYmpPdXRwdXQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lT3V0cHV0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRPdXRwdXQob2JqT3V0cHV0KTsKLSAgICBpZiAodmlzaXRPdXRwdXQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpPdXRwdXQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPdXRwdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqT3V0cHV0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iak91dHB1dCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPdXRwdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPdXRwdXQyTWVzc2FnZSkKLSAgICAgIHRyYXZlcnNlKG9iak91dHB1dC5nZXRNZXNzYWdlKCksIG9iak91dHB1dCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSAKLSAgICogc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdGYXVsdCAgYSBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nRmF1bHQgb2JqQmluZGluZ0ZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUJpbmRpbmdGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ0ZhdWx0KG9iakJpbmRpbmdGYXVsdCk7Ci0gICAgaWYgKHZpc2l0QmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ0ZhdWx0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakJpbmRpbmdGYXVsdCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdGYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdAotICAgICAgJiYgb2JqQmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNPQVBGYXVsdCkKLSAgICAgICAgICB0cmF2ZXJzZSgoU09BUEZhdWx0KSBvLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgJiYgb2JqQmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNPQVBPcGVyYXRpb24gIGEgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBPcGVyYXRpb24gb2JqU09BUE9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRTT0FQT3BlcmF0aW9uKG9ialNPQVBPcGVyYXRpb24pOwotICAgIGlmICh2aXNpdFNPQVBPcGVyYXRpb24pCi0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBPcGVyYXRpb24sIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdJbnB1dCAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIGlucHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nSW5wdXQgb2JqQmluZGluZ0lucHV0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUJpbmRpbmdJbnB1dFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ0lucHV0KG9iakJpbmRpbmdJbnB1dCk7Ci0gICAgaWYgKHZpc2l0QmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ0lucHV0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakJpbmRpbmdJbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdJbnB1dDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdJbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpCaW5kaW5nSW5wdXQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCh0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSB8fCB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQSGVhZGVyKQotICAgICAgJiYgb2JqQmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAodHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkgJiYgKG8gaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCb2R5KSBvLCBvYmpCaW5kaW5nSW5wdXQsIGN0eCk7Ci0gICAgICAgIGVsc2UgaWYgKHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgJiYgKG8gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKSkKLSAgICAgICAgICB0cmF2ZXJzZSgoU09BUEhlYWRlcikgbywgb2JqQmluZGluZ0lucHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9iakJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ0lucHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byAKLSAgICogdGhlIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpCaW5kaW5nT3BlcmF0aW9uICBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9iakJpbmRpbmdPcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ09wZXJhdGlvbihvYmpCaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBpZiAodmlzaXRCaW5kaW5nT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ09wZXJhdGlvbiwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqQmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZSgKLSAgICAgICAgb2JqQmluZGluZ09wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLAotICAgICAgICBvYmpCaW5kaW5nT3BlcmF0aW9uLAotICAgICAgICBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMlNPQVBPcGVyYXRpb24KLSAgICAgICYmIG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBPcGVyYXRpb24pIG8sIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nT3BlcmF0aW9uKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ09wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCksIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCksIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZSgKLSAgICAgICAgb2JqQmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCksCi0gICAgICAgIG9iakJpbmRpbmdPcGVyYXRpb24sCi0gICAgICAgIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0Ci0gICAgICAmJiBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChCaW5kaW5nRmF1bHQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ09wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEZhdWx0ICBhIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBGYXVsdCBvYmpTT0FQRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHguc2V0U09BUEZhdWx0KG9ialNPQVBGYXVsdCk7Ci0gICAgaWYgKHZpc2l0U09BUEZhdWx0KQotICAgICAgdmlzaXRvci52aXNpdChvYmpTT0FQRmF1bHQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqQmluZGluZyAgYSBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEJpbmRpbmcgb2JqQmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRCaW5kaW5nKG9iakJpbmRpbmcpOwotICAgIGlmICh2aXNpdEJpbmRpbmcpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpCaW5kaW5nLCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpCaW5kaW5nID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqQmluZGluZywgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJTT0FQQmluZGluZwotICAgICAgJiYgb2JqQmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCaW5kaW5nKSBvLCBvYmpCaW5kaW5nLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJQb3J0VHlwZSkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpCaW5kaW5nLmdldFBvcnRUeXBlKCksIG9iakJpbmRpbmcsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmcyQmluZGluZ09wZXJhdGlvbgotICAgICAgJiYgb2JqQmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChCaW5kaW5nT3BlcmF0aW9uKSBpdC5uZXh0KCksIG9iakJpbmRpbmcsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpCaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZywgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmcoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqRmF1bHQgIGEgV1NETCBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICBwYXJlbnQgb2YgdGhlIFdTREwgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgRmF1bHQgb2JqRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lRmF1bHRQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldEZhdWx0KG9iakZhdWx0KTsKLSAgICBpZiAodmlzaXRGYXVsdCkKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9iakZhdWx0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzRmF1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqRmF1bHQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VGYXVsdDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iakZhdWx0LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRmF1bHQyTWVzc2FnZSkKLSAgICAgIHRyYXZlcnNlKG9iakZhdWx0LmdldE1lc3NhZ2UoKSwgb2JqRmF1bHQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBzZXJ2aWNlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNlcnZpY2UgIGEgV1NETCBzZXJ2aWNlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIHNlcnZpY2UgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTZXJ2aWNlIG9ialNlcnZpY2UsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lU2VydmljZVByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0U2VydmljZShvYmpTZXJ2aWNlKTsKLSAgICBpZiAodmlzaXRTZXJ2aWNlKQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqU2VydmljZSwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1NlcnZpY2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqU2VydmljZSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpTZXJ2aWNlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9ialNlcnZpY2UsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVNlcnZpY2UyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9ialNlcnZpY2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialNlcnZpY2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpTZXJ2aWNlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlU2VydmljZTJQb3J0ICYmIG9ialNlcnZpY2UuZ2V0UG9ydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqU2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUG9ydCkgaXQubmV4dCgpLCBvYmpTZXJ2aWNlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbXBvcnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqSW1wb3J0ICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICBwYXJlbnQgb2YgdGhlIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBJbXBvcnQgb2JqSW1wb3J0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUltcG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0SW1wb3J0KG9iakltcG9ydCk7Ci0gICAgaWYgKHZpc2l0SW1wb3J0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqSW1wb3J0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW1wb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakltcG9ydCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUltcG9ydDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpJbXBvcnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW1wb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24pCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9iakltcG9ydC5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIGlmICgoZGVmaW5pdGlvbiAhPSBudWxsKSAmJiAoIWFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9ucy5jb250YWlucyhkZWZpbml0aW9uKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBhbHJlYWR5VHJhdmVyc2VkRGVmaW5pdGlvbnMuYWRkKGRlZmluaXRpb24pOwotICAgICAgICAgIHRyYXZlcnNlKG9iakltcG9ydC5nZXREZWZpbml0aW9uKCksIG9iakltcG9ydCwgY3R4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXt9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSAKLSAgICogc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdPdXRwdXQgIGEgV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEJpbmRpbmdPdXRwdXQgb2JqQmluZGluZ091dHB1dCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVCaW5kaW5nT3V0cHV0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRCaW5kaW5nT3V0cHV0KG9iakJpbmRpbmdPdXRwdXQpOwotICAgIGlmICh2aXNpdEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpCaW5kaW5nT3V0cHV0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpCaW5kaW5nT3V0cHV0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKAotICAgICAgICBvYmpCaW5kaW5nT3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksCi0gICAgICAgIG9iakJpbmRpbmdPdXRwdXQsCi0gICAgICAgIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgodHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBCb2R5IHx8IHRyYXZlcnNlQmluZGluZ091dHB1dDJTT0FQSGVhZGVyKQotICAgICAgJiYgb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgJiYgKG8gaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCb2R5KSBvLCBvYmpCaW5kaW5nT3V0cHV0LCBjdHgpOwotICAgICAgICBlbHNlIGlmICh0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciAmJiAobyBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpKQotICAgICAgICAgIHRyYXZlcnNlKChTT0FQSGVhZGVyKSBvLCBvYmpCaW5kaW5nT3V0cHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ091dHB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgJiYgb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCksIG9iakJpbmRpbmdPdXRwdXQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nT3V0cHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpQb3J0VHlwZSAgYSBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFBvcnRUeXBlIG9ialBvcnRUeXBlLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVBvcnRUeXBlUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRQb3J0VHlwZShvYmpQb3J0VHlwZSk7Ci0gICAgaWYgKHZpc2l0UG9ydFR5cGUpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpQb3J0VHlwZSwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnRUeXBlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialBvcnRUeXBlID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlUG9ydFR5cGUyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpQb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpQb3J0VHlwZSwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQb3J0VHlwZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVBvcnRUeXBlMk9wZXJhdGlvbiAmJiBvYmpQb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKE9wZXJhdGlvbikgaXQubmV4dCgpLCBvYmpQb3J0VHlwZSwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnRUeXBlKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG1lc3NhZ2UgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqTWVzc2FnZSAgYSBXU0RMIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE1lc3NhZ2Ugb2JqTWVzc2FnZSwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVNZXNzYWdlUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRNZXNzYWdlKG9iak1lc3NhZ2UpOwotICAgIGlmICh2aXNpdE1lc3NhZ2UpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpNZXNzYWdlLCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzTWVzc2FnZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpNZXNzYWdlID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlTWVzc2FnZTJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iak1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqTWVzc2FnZSwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NNZXNzYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlTWVzc2FnZTJQYXJ0ICYmIG9iak1lc3NhZ2UuZ2V0UGFydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqTWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUGFydCkgaXQubmV4dCgpLCBvYmpNZXNzYWdlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzTWVzc2FnZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwYXJ0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFBhcnQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgc2VydmljZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHNlcnZpY2UgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTZXJ2aWNlIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhIFdTREwgdHlwZXMgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShUeXBlcyBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShPcGVyYXRpb24gYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgaW5wdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBpbnB1dCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKElucHV0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIG91dHB1dCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE91dHB1dCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGZhdWx0IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoQmluZGluZ09wZXJhdGlvbiBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIGlucHV0IGFydGlmYWN0IGFjY29yZGluZyB0byAKLSAgICogdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nSW5wdXQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nT3V0cHV0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgYSBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgaW1wb3J0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoSW1wb3J0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBlbGVtZW50IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRWxlbWVudCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBtZXNzYWdlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgbWVzc2FnZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE1lc3NhZ2UgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgcG9ydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHBvcnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShQb3J0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFBvcnRUeXBlIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGRlZmluaXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBkZWZpbml0aW9uIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRGVmaW5pdGlvbiBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBleHRlbnNpYmlsaXR5IGVsbWVudCBhcnRpZmFjdCBhY2NvcmRpbmcgCi0gICAqIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFeHRlbnNpYmlsaXR5RWxlbWVudCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBiaW5kaW5nIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJpbmRpbmcgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBib2R5IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBib2R5IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJvZHkgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBTT0FQIGhlYWRlciBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBIZWFkZXIgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQSGVhZGVyRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIFNPQVAgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQT3BlcmF0aW9uIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgcGFydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoUGFydCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBzZXJ2aWNlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBzZXJ2aWNlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTZXJ2aWNlIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCB0eXBlcyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoVHlwZXMgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE9wZXJhdGlvbiBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKElucHV0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShPdXRwdXQgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShGYXVsdCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBiaW5kaW5nIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyAKLSAgICogdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKEJpbmRpbmdPcGVyYXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgCi0gICAqIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKEJpbmRpbmdJbnB1dCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gCi0gICAqIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGJpbmRpbmcgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nT3V0cHV0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBiaW5kaW5nIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoQmluZGluZ0ZhdWx0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGltcG9ydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoSW1wb3J0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFbGVtZW50IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG1lc3NhZ2UgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShNZXNzYWdlIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIHBvcnQuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShQb3J0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgcG9ydCB0eXBlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoUG9ydFR5cGUgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKERlZmluaXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFeHRlbnNpYmlsaXR5RWxlbWVudCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBCaW5kaW5nIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgU09BUCBib2R5IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJvZHkgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEhlYWRlciBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBoZWFyZGVyIGZhdWx0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIGhlYWRlciBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBIZWFkZXJGYXVsdCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGZhdWx0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEZhdWx0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBPcGVyYXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWxDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVHJhdmVyc2FsQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDRkYmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWxDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyBydW50aW1lIGNvbnRleHQgZm9yIHRoZSB0cmF2ZXJzYWwgcHJvY2Vzcy4KLSAqIENvbnRleHQgc3RvcmVzIGFydGlmYWN0cyBiZWluZyBwcm9jZXNzZWQuCi0gKiAKLSAqIEBhdXRob3IgQW5kcmV5IEt1bGlrCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVHJhdmVyc2FsQ29udGV4dAotewotICAvKioKLSAgICogRmxhZ3Mgd2hpY2ggaW5kaWNhdGUgd2hldGhlciBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkCi0gICAqIG9yIG5vdC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzUGFydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU2VydmljZSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzVHlwZXMgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc09wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzSW5wdXQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc091dHB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRmF1bHQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24gPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmdJbnB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzQmluZGluZ091dHB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0ZhdWx0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NJbXBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0VsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1BvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1BvcnRUeXBlID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NEZWZpbml0aW9uID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU09BUEJpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXIgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU09BUEZhdWx0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTT0FQT3BlcmF0aW9uID0gdHJ1ZTsKLQotICAvKioKLSAgICogTGFzdCBwcm9jZXNzZWQgV1NETCBlbGVtZW50cy4gCi0gICAqLwotICBwcml2YXRlIFBhcnQgYWN0aXZlUGFydCA9IG51bGw7Ci0gIHByaXZhdGUgU2VydmljZSBhY3RpdmVTZXJ2aWNlID0gbnVsbDsKLSAgcHJpdmF0ZSBUeXBlcyBhY3RpdmVUeXBlcyA9IG51bGw7Ci0gIHByaXZhdGUgT3BlcmF0aW9uIGFjdGl2ZU9wZXJhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgSW5wdXQgYWN0aXZlSW5wdXQgPSBudWxsOwotICBwcml2YXRlIE91dHB1dCBhY3RpdmVPdXRwdXQgPSBudWxsOwotICBwcml2YXRlIEZhdWx0IGFjdGl2ZUZhdWx0ID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nIGFjdGl2ZUJpbmRpbmcgPSBudWxsOwotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYWN0aXZlQmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ0lucHV0IGFjdGl2ZUJpbmRpbmdJbnB1dCA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ091dHB1dCBhY3RpdmVCaW5kaW5nT3V0cHV0ID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nRmF1bHQgYWN0aXZlQmluZGluZ0ZhdWx0ID0gbnVsbDsKLSAgcHJpdmF0ZSBJbXBvcnQgYWN0aXZlSW1wb3J0ID0gbnVsbDsKLSAgcHJpdmF0ZSBFbGVtZW50IGFjdGl2ZUVsZW1lbnQgPSBudWxsOwotICBwcml2YXRlIE1lc3NhZ2UgYWN0aXZlTWVzc2FnZSA9IG51bGw7Ci0gIHByaXZhdGUgUG9ydCBhY3RpdmVQb3J0ID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0VHlwZSBhY3RpdmVQb3J0VHlwZSA9IG51bGw7Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBhY3RpdmVEZWZpbml0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudCBhY3RpdmVFeHRlbnNpYmlsaXR5RWxlbWVudCA9IG51bGw7Ci0gIHByaXZhdGUgU09BUEJpbmRpbmcgYWN0aXZlU09BUEJpbmRpbmcgPSBudWxsOwotICBwcml2YXRlIFNPQVBCb2R5IGFjdGl2ZVNPQVBCb2R5ID0gbnVsbDsKLSAgcHJpdmF0ZSBTT0FQSGVhZGVyIGFjdGl2ZVNPQVBIZWFkZXIgPSBudWxsOwotICBwcml2YXRlIFNPQVBIZWFkZXJGYXVsdCBhY3RpdmVTT0FQSGVhZGVyRmF1bHQgPSBudWxsOwotICBwcml2YXRlIFNPQVBGYXVsdCBhY3RpdmVTT0FQRmF1bHQgPSBudWxsOwotICBwcml2YXRlIFNPQVBPcGVyYXRpb24gYWN0aXZlU09BUE9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFBhcmFtZXRlcnMgbWFwCi0gICAqLwotICBNYXAgcGFyYW1zID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogQWN0aXZlIHRyYXZlcnNhbC4KLSAgICovCi0gIGZpbmFsIHByaXZhdGUgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gdHJhdmVyc2FsCi0gICAqLwotICBXU0RMVHJhdmVyc2FsQ29udGV4dChXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCkKLSAgewotICAgIHRoaXMudHJhdmVyc2FsID0gdHJhdmVyc2FsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGFjdGl2ZSB0cmF2ZXJzYWwuCi0gICAqIEByZXR1cm4gdGhhIGFjdGl2ZSB0cmF2ZXJzYWwuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBnZXRUcmF2ZXJzYWwoKQotICB7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHBhcmFtZXRlciBmcm9tIGNvbnRleHQgYnkgdGhlIGdpdmVuIGtleS4gCi0gICAqIEBwYXJhbSBrZXkgIGEga2V5IHZhbHVlLgotICAgKiBAcmV0dXJuIGEgcGFyYW1ldGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UGFyYW1ldGVyKE9iamVjdCBrZXkpCi0gIHsKLSAgICByZXR1cm4gcGFyYW1zLmdldChrZXkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgcGFyYW1ldGVyIGludG8gY29udGV4dCB3aXRoIHRoZSBnaXZlbiBrZXkuCi0gICAqIEBwYXJhbSBrZXkgICAgdGhlIGtleS4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgcGFyYW1zLnB1dChrZXksIHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmVzIHRoZSBwYXJhbWV0ZXIgZnJvbSBjb250ZXh0IGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEBwYXJhbSBrZXkgIGEga2V5IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUGFyYW1ldGVyKE9iamVjdCBrZXkpCi0gIHsKLSAgICBwYXJhbXMucmVtb3ZlKGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxQYXJ0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUGFydCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFNlcnZpY2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTZXJ2aWNlID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHR5cGVzLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFR5cGVzUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzVHlwZXMgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbE9wZXJhdGlvblByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc09wZXJhdGlvbiA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbnB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0lucHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG91dHB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NPdXRwdXQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NGYXVsdCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgaW5wdXQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzQmluZGluZ0lucHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3V0cHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsQmluZGluZ0ZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzQmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGltcG9ydC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxJbXBvcnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NJbXBvcnQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRWxlbWVudCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBtZXNzYWdlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NNZXNzYWdlID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBvcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsUG9ydFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc1BvcnQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFBvcnRUeXBlUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUG9ydFR5cGUgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZGVmaW5pdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxEZWZpbml0aW9uUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRGVmaW5pdGlvbiA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsRXh0ZW5zaWJpbGl0eUVsZW1lbnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGJpbmRpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsU09BUEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQQmluZGluZyA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGhlYWRlci4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQSGVhZGVyUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUEhlYWRlciA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQSGVhZGVyRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQSGVhZGVyRmF1bHQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQRmF1bHQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFNPQVBPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQT3BlcmF0aW9uID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2FuY2VscyBXU0RMIGVsZW1lbnRzIHByb2Nlc3NpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsUHJvY2Vzc2luZygpCi0gIHsKLSAgICBjYW5jZWxQYXJ0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNlcnZpY2VQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsVHlwZXNQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbElucHV0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbE91dHB1dFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsQmluZGluZ0ZhdWx0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEltcG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsUG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxQb3J0VHlwZVByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxEZWZpbml0aW9uUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBIZWFkZXJQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsU09BUEhlYWRlckZhdWx0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxTT0FQT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBhcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lUGFydFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc1BhcnQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVNlcnZpY2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTZXJ2aWNlID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lVHlwZXNQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NUeXBlcyA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NPcGVyYXRpb24gPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbnB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0lucHV0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZU91dHB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc091dHB1dCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGZhdWx0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBvcGVyYXRpb24uIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24gPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGlucHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0JpbmRpbmdJbnB1dCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3V0cHV0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVCaW5kaW5nRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbXBvcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lSW1wb3J0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzSW1wb3J0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRWxlbWVudCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG1lc3NhZ2UuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lTWVzc2FnZVByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc01lc3NhZ2UgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwb3J0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVBvcnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NQb3J0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVBvcnRUeXBlUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUG9ydFR5cGUgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBkZWZpbml0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZURlZmluaXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NEZWZpbml0aW9uID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGJpbmRpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lU09BUEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQQmluZGluZyA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgaGVhZGVyLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVNPQVBIZWFkZXJQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQSGVhZGVyID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lU09BUEhlYWRlckZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUEhlYWRlckZhdWx0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVTT0FQRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIG9wZXJhdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVTT0FQT3BlcmF0aW9uUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUE9wZXJhdGlvbiA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwYXJ0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFydCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1BhcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgc2VydmljZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NlcnZpY2U7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1R5cGVzOwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBvcGVyYXRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgaW5wdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgaW5wdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG91dHB1dCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBvdXRwdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NPdXRwdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0ZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NCaW5kaW5nOwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBpbnB1dCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGlucHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0lucHV0KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzQmluZGluZ0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0JpbmRpbmdPdXRwdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBmYXVsdCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGZhdWx0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzQmluZGluZ0ZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGltcG9ydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbXBvcnQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NJbXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NJbXBvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0VsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgbWVzc2FnZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBtZXNzYWdlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc01lc3NhZ2U7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwb3J0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1BvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBvcnQgdHlwZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzUG9ydFR5cGU7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZGVmaW5pdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBkZWZpbml0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0RlZmluaXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0V4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBiaW5kaW5nIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgYmluZGluZyBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzU09BUEJpbmRpbmc7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgc2hvdWxkIGJlIHByb2Nlc3NlZC5uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzU09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NPQVBIZWFkZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BIGhlYWRlciBmYXVsdCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdDsKLSAgfQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGZhdWx0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NTT0FQRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NTT0FQT3BlcmF0aW9uOwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgcGFydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgcGFydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFBhcnQoUGFydCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVBhcnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIHBhcnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgcGFydC4KLSAgICovCi0gIHB1YmxpYyBQYXJ0IGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVBhcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBzZXJ2aWNlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBzZXJ2aWNlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0U2VydmljZShTZXJ2aWNlIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU2VydmljZSA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgc2VydmljZS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBzZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU2VydmljZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIHR5cGVzIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCB0eXBlcyB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFR5cGVzKFR5cGVzIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlVHlwZXMgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIHR5cGVzLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIHR5cGVzLgotICAgKi8KLSAgcHVibGljIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVUeXBlczsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgb3BlcmF0aW9uIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0T3BlcmF0aW9uKE9wZXJhdGlvbiB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZU9wZXJhdGlvbiA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBpbnB1dCB0byBiZSBwcm9jZXNzZWQKLSAgICogQHBhcmFtIHRoZSBXU0RMIGlucHV0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0SW5wdXQoSW5wdXQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVJbnB1dCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgaW5wdXQuCi0gICAqIEByZXR1cm4gbGFzdCBwcm9jZXNzZWQgV1NETCBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBJbnB1dCBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlSW5wdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBvdXRwdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIG91dHB1dCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldE91dHB1dChPdXRwdXQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVPdXRwdXQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIG91dHB1dC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGdldE91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlT3V0cHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZmF1bHQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGZhdWx0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0RmF1bHQoRmF1bHQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVGYXVsdCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZmF1bHQuCi0gICAqLwotICBwdWJsaWMgRmF1bHQgZ2V0RmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgYmluZGluZyB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmcoQmluZGluZyB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUJpbmRpbmcgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUJpbmRpbmc7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFNETCBiaW5kaW5nIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUJpbmRpbmdPcGVyYXRpb24gPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlQmluZGluZ09wZXJhdGlvbjsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGJpbmRpbmcgaW5wdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGJpbmRpbmcgaW5wdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlQmluZGluZ0lucHV0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBiaW5kaW5nIGlucHV0LgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgaW5wdXQuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlQmluZGluZ0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyBvdXRwdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGJpbmRpbmcgb3V0cHV0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlQmluZGluZ091dHB1dCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBvdXRwdXQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBnZXRCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVCaW5kaW5nT3V0cHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyBmYXVsdCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgYmluZGluZyBmYXVsdCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVCaW5kaW5nRmF1bHQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nRmF1bHQgZ2V0QmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVCaW5kaW5nRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBpbXBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGltcG9ydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEltcG9ydChJbXBvcnQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVJbXBvcnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGltcG9ydC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBpbXBvcnQuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGdldEltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlSW1wb3J0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUVsZW1lbnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0TWVzc2FnZShNZXNzYWdlIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlTWVzc2FnZSA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlTWVzc2FnZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIHBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIHBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRQb3J0KFBvcnQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVQb3J0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBwb3J0LgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIHBvcnQuCi0gICAqLwotICBwdWJsaWMgUG9ydCBnZXRQb3J0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVQb3J0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgcG9ydCB0eXBlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBwb3J0IHR5cGUgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRQb3J0VHlwZShQb3J0VHlwZSB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVBvcnRUeXBlID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBwb3J0IHR5cGUuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgcG9ydCB0eXBlLgotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVQb3J0VHlwZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGRlZmluaXRpb24gdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGRlZmluaXRpb24gdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVEZWZpbml0aW9uID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGRlZmluaXRpb24uCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVEZWZpbml0aW9uOwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUV4dGVuc2liaWxpdHlFbGVtZW50ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVFeHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRTT0FQQmluZGluZyhTT0FQQmluZGluZyB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBCaW5kaW5nID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBiaW5kaW5nLgotICAgKi8KLSAgcHVibGljIFNPQVBCaW5kaW5nIGdldFNPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQQmluZGluZzsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFNPQVBCb2R5KFNPQVBCb2R5IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUEJvZHkgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgYm9keS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGJvZHkuCi0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgZ2V0U09BUEJvZHkoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNPQVBCb2R5OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFNPQVBIZWFkZXIoU09BUEhlYWRlciB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBIZWFkZXIgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgaGVhZGVyLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgaGVhZGVyLgotICAgKi8KLSAgcHVibGljIFNPQVBIZWFkZXIgZ2V0U09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU09BUEhlYWRlcjsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRTT0FQSGVhZGVyRmF1bHQoU09BUEhlYWRlckZhdWx0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUEhlYWRlckZhdWx0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBTT0FQSGVhZGVyRmF1bHQgZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQSGVhZGVyRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0U09BUEZhdWx0KFNPQVBGYXVsdCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBGYXVsdCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGZhdWx0LgotICAgKi8KLSAgcHVibGljIFNPQVBGYXVsdCBnZXRTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNPQVBGYXVsdDsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZVdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQKLSAgICovCi0gIHZvaWQgc2V0U09BUE9wZXJhdGlvbihTT0FQT3BlcmF0aW9uIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUE9wZXJhdGlvbiA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU09BUE9wZXJhdGlvbiBnZXRTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQT3BlcmF0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI5NWQ3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZGVmaW5lcyBjYWxsYmFjayBtZXRob2RzIGR1cmluZyB0cmF2ZXJzZSBXU0RMLgotICogV1NETFZpc2l0b3IgY291bGQgY2FuY2VsIGFydGlmYWN0IHByb2Nlc3NpbmcgYnkgdXNpbmcgdHJhdmVyc2FsIGNvbnRleHQKLSAqIDxjb2RlPmNhbmNlbFhYWFByb2Nlc3Npbmc8L2NvZGU+IG1ldGhvZHMuCi0gKiAKLSAqIEBhdXRob3IgS3VsaWsKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMVmlzaXRvcgotewotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIHBhcnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgc2VydmljZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTZXJ2aWNlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCB0eXBlcyBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgaW5wdXQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW5wdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIG91dHB1dCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGZhdWx0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBiaW5kaW5nIG9iamVjdC4KLSAgICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdPcGVyYXRpb24gb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBiaW5kaW5nIGlucHV0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmdJbnB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgYmluZGluZyBvdXRwdXQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZ091dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgYmluZGluZyBmYXVsdCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGltcG9ydCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGVsZW1lbnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgbWVzc2FnZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBwb3J0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIHBvcnQgdHlwZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0VHlwZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgZGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBTT0FQIGJpbmRpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIFNPQVAgYm9keSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBoZWFkZXIgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IG9iaiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBmYXVsdCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIFNPQVAgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuLgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQT3BlcmF0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWZiZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBFbnRpdHkgcmVzb2x2ZSB0byByZXNvbHZlIGZpbGUgZW50aXRpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlRW50aXR5UmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2UuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgU3RyaW5nIHVybCA9IHN5c3RlbUlkOwotICAgIGlmKHVybCA9PSBudWxsKQotICAgIHsKLSAgICAgIHVybCA9IHB1YmxpY0lkOwotICAgIH0KLSAgICBpZih1cmwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSByZXNvdXJjZS5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgaWYodXJsICE9IG51bGwpCi0gICAgewotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKHVybCk7Ci0gICAgICByZXR1cm4gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCBzeXN0ZW1JZCwgc3lzdGVtSWQsIGlzLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlMmQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIEdlbmVyYXRlIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc2NoZW1hIGZvciBhbiBpbmxpbmUgc2NoZW1hLiBXaWxsIGFkZCBpbXBvcnRzIGZvciB1bnJlc29sdmVkCi0gKiBuYW1lc3BhY2VzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTT0FQX0VOQ09ESU5HX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgWE1MTlMgPSAieG1sbnMiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFRBUkdFVE5BTUVTUEFDRSA9ICJ0YXJnZXROYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIE5BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIElNUE9SVCA9ICJpbXBvcnQiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIElOQ0xVREUgPSAiaW5jbHVkZSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0NIRU1BID0gInNjaGVtYSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0NIRU1BTE9DQVRJT04gPSAic2NoZW1hTG9jYXRpb24iOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFRZUEUgPSAidHlwZSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZ1tdIGlnbm9yZU5hbWVzcGFjZXMgPQotICAgIHsgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSB9OwotCi0gIHByb3RlY3RlZCBzdGF0aWMgSW5saW5lU2NoZW1hR2VuZXJhdG9yIGluc3RhbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lU2NoZW1hR2VuZXJhdG9yKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlIElubGluZVNjaGVtYUdlbmVyYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGluc3RhbmNlIG9mIHRoZSBpbmxpbmUgc2NoZW1hIGdlbmVyYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgSW5saW5lU2NoZW1hR2VuZXJhdG9yIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IElubGluZVNjaGVtYUdlbmVyYXRvcigpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEgZnJvbSB0aGUgZWxlbWVudCBwcm92aWRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGVsZW1lbnRzIEEgbGlzdCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZyhFbGVtZW50IGVsZW1lbnQsIExpc3QgZWxlbWVudHMsIFN0cmluZyBmaWxlbG9jYXRpb24pCi0gIHsKLSAgICByZXR1cm4gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBlbGVtZW50cywgZmlsZWxvY2F0aW9uLCBuZXcgSGFzaHRhYmxlKCkpOwotICB9Ci0gIAotICAvKioKLSAgCSogQ3JlYXRlcyBhIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNjaGVtYSBtb2RlbCB3aXRoIHRoZSByb290IGVsZW1lbnQgb2YKLSAgCSogZXh0RWxlbS4gQ2FsbHMgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkgdG8gdGFrZSBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBTdHJpbmcKLSAgCSogYWZ0ZXIgaXQgb2J0YWlucyB0aGUgRWxlbWVudCBmcm9tIHRoZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuCi0gIAkqIAotICAJKiBAcGFyYW0gZWxlbWVudCBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gIAkqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gY29udGFpbiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgCSogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhlIHNjaGVtYSBpcyBsb2NhdGVkIGluLgotICAJKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHBhcmVudCBuYW1lc3BhY2VzIHRvIHVzZWQgdG8gcmVzb2x2ZSBwcmVmaXhlcy4KLSAgCSogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hIHdpdGggdGhlIHJvb3QgZWxlbWVudCAnZWxlbWVudCcuCi0gIAkqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVYU0RTdHJpbmcoRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzLCBTdHJpbmcgZmlsZWxvY2F0aW9uLCBIYXNodGFibGUgcGFyZW50TlNzKQotICB7Ci0gICAgSW5saW5lU2NoZW1hR2VuZXJhdG9yIHNjaGVtYUdlbmVyYXRvciA9IElubGluZVNjaGVtYUdlbmVyYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIEhhc2h0YWJsZSBuc1Jlc29sdmVyID0gc2NoZW1hR2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIoZWxlbWVudCk7Ci0gICAgTGlzdCByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5nZXRSZXF1aXJlZE5hbWVzcGFjZXMoZWxlbWVudCk7Ci0gICAgSGFzaHRhYmxlIHJlcU5TRGVjbCA9IHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL0hhc2h0YWJsZSByZXFOU0RlY2wgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0UmVxdWlyZWROU0RlY2xhcmF0aW9ucyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICBMaXN0IGltcG9ydE5TID0gc2NoZW1hR2VuZXJhdG9yLmdldEltcG9ydE5hbWVzcGFjZXMoZWxlbWVudCk7Ci0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IucmVtb3ZlSW1wb3J0cyhyZXFucywgaW1wb3J0TlMpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhyZXFucywgZWxlbWVudCk7Ci0gICAgcmV0dXJuIHNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShlbGVtZW50LCBlbGVtZW50cywgcmVxbnMsIHJlcU5TRGVjbCwgZmlsZWxvY2F0aW9uKTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBwYXJlbnROU3MgQSBoYXNodGFibGUgb2YgdGhlIHBhcmVudCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNvYXAgZW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzb2FwRW5jb2RpbmdSZXF1aXJlZE5vdEltcG9ydGVkKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGZpbGVsb2NhdGlvbiwgSGFzaHRhYmxlIHBhcmVudE5TcykKLSAgewotICAgIElubGluZVNjaGVtYUdlbmVyYXRvciBzY2hlbWFHZW5lcmF0b3IgPSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgICBIYXNodGFibGUgbnNSZXNvbHZlciA9IHNjaGVtYUdlbmVyYXRvci5nZXROU1Jlc29sdmVyKGVsZW1lbnQpOwotICAgIExpc3QgcmVxbnMgPSBudWxsOwotCi0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0UmVxdWlyZWROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL3NjaGVtYUdlbmVyYXRvci5yZXNvbHZlVW5kZWNsYXJlZE5hbWVzcGFjZXMocmVxbnMsIHBhcmVudE5Tcyk7Ci0gICAgTGlzdCBpbXBvcnROUyA9IHNjaGVtYUdlbmVyYXRvci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZW1vdmVMb2NhbE5hbWVzcGFjZXMocmVxbnMsIGVsZW1lbnQpOwotCi0gICAgcmV0dXJuIHNjaGVtYUdlbmVyYXRvci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKHJlcW5zKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIHJlY3Vyc2l2ZSBtZXRob2QgY3JlYXRlcyB0aGUgc2NoZW1hIFN0cmluZyBmcm9tIHRoZSByb290IEVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gYmUgY3JlYXRlZCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgICogQHBhcmFtIHJlcXVpcmVkTmFtZXNwYWNlcyBBIGxpc3Qgb2YgcmVxdWlyZWQgbmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIHJlcU5TRGVjbCBBIGhhc2h0YWJsZSBvZiByZXF1aXJlZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSB1cmkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNjaGVtYS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoCi0gICAgRWxlbWVudCBlbGVtLAotICAgIExpc3QgZWxlbWVudHMsCi0gICAgTGlzdCByZXF1aXJlZE5hbWVzcGFjZXMsCi0gICAgSGFzaHRhYmxlIHJlcU5TRGVjbCwKLSAgICBTdHJpbmcgZmlsZWxvY2F0aW9uKQotICB7Ci0gICAgaWYgKGVsZW0gPT0gbnVsbCkKLSAgICAgIHJldHVybiAiIjsgLy8ganVzdCBpbiBjYXNlCi0KLSAgICBlbGVtZW50cy5hZGQoZWxlbSk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgeHNkU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGVsZW0uZ2V0VGFnTmFtZSgpOwotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwiKS5hcHBlbmQoZWxlbWVudE5hbWUpOwotCi0gICAgYm9vbGVhbiBmb3VuZFNjaGVtYUxvY2F0aW9uID0gZmFsc2U7IC8vIGZsYWcgaWYgc2NoZW1hbG9jYXRpb24gaXMgZGVmaW5lZAotICAgIFN0cmluZyBuYW1lc3BhY2UgPSAiIjsgLy8gdGhlIG5hbWVzcGFjZSBpZiB3ZSdyZSBjaGVja2luZyBhbiBpbXBvcnQgb3IgaW5jbHVkZQotICAgIFN0cmluZyBuYW1lUHJlZml4ID0gIiI7IC8vIHRoZSB4bWxucyBwcmVmaXggdXNlZCBmb3IgdGhlIGVsZW1lbnRzCi0gICAgLy8gR2V0IGFsbCBvZiB0aGUgYXR0cmlidXRlcyBmb3IgdGhpcyBlbGVtZW50IGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgeHNkU3RyaW5nCi0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKG4uZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKTsKLSAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgIGlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFNDSEVNQUxPQ0FUSU9OKSAmJiBmaWxlbG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm91bmRTY2hlbWFMb2NhdGlvbiA9IHRydWU7Ci0gICAgICAgIFN0cmluZyByZWxhdGl2ZVBhdGggPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKHJlbGF0aXZlUGF0aCkuYXBwZW5kKCJcIiIpOyAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVzcGFjZSA9IG5vZGVWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBnZXQgdGhlIG5hbWUgcHJlZml4IGZvciB0aGlzIHNjaGVtYSB0byB1c2UgaW4gZ2VuZXJhdGluZyBpbXBvcnQgc3RhdGVtZW50cwotICAgICAgICBlbHNlIGlmIChub2RlTmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgICAgewotCi0gICAgICAgICAgaWYgKG5vZGVWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLSAgICAgICAgICAgIGlmIChuYW1lUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UoWE1MTlMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lUHJlZml4ID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5hbWVQcmVmaXggPSBuYW1lUHJlZml4LnN1YnN0cmluZyg2KSArICI6IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUmVwbGFjZSBvbGQgc2NoZW1hIG5hbWVzcGFjZXMgd2l0aCB0aGUgbmV3IHNjaGVtYSBuYW1lc3BhY2UuCi0gICAgICAgIGlmKG5vZGVWYWx1ZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgbm9kZVZhbHVlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBub2RlVmFsdWUgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQobm9kZVZhbHVlKS5hcHBlbmQoIlwiIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbXBvcnQiKSAmJiAhZm91bmRTY2hlbWFMb2NhdGlvbikKLSAgICB7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKFNDSEVNQUxPQ0FUSU9OKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChuYW1lc3BhY2UpLmFwcGVuZCgiXCIiKTsKLSAgICB9Ci0gICAgLy8gYWRkIGluIGFueSByZXF1aXJlZCBOUyBkZWNsYXJhdGlvbnMgZnJvbSBwYXJlbnQgZWxlbWVudHMKLSAgICBpZiAocmVxTlNEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgRW51bWVyYXRpb24ga2V5cyA9IHJlcU5TRGVjbC5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBTdHJpbmcgZGVjbE5TID0gKFN0cmluZylyZXFOU0RlY2wuZ2V0KGtleSk7Ci0gICAgICAgIGlmKGRlY2xOUy5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgZGVjbE5TLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBkZWNsTlMgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQoIiAiKS5hcHBlbmQoa2V5KS5hcHBlbmQoIj1cIiIpLmFwcGVuZChkZWNsTlMpLmFwcGVuZCgiXCIiKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI+Iik7Ci0gICAgaWYgKHJlcXVpcmVkTmFtZXNwYWNlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGlSZXF1aXJlZE5hbWVzcGFjZXMgPSByZXF1aXJlZE5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpUmVxdWlyZWROYW1lc3BhY2VzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZylpUmVxdWlyZWROYW1lc3BhY2VzLm5leHQoKTsKLQotICAgICAgICB4c2RTdHJpbmcKLSAgICAgICAgICAuYXBwZW5kKCI8IikKLSAgICAgICAgICAuYXBwZW5kKG5hbWVQcmVmaXgpCi0gICAgICAgICAgLmFwcGVuZChJTVBPUlQpCi0gICAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgICAgLmFwcGVuZChOQU1FU1BBQ0UpCi0gICAgICAgICAgLmFwcGVuZCgiPVwiIikKLSAgICAgICAgICAuYXBwZW5kKG5zKQotICAgICAgICAgIC5hcHBlbmQoIlwiICIpCi0gICAgICAgICAgLmFwcGVuZChTQ0hFTUFMT0NBVElPTikKLSAgICAgICAgICAuYXBwZW5kKCI9XCIiKQotICAgICAgICAgIC5hcHBlbmQobnMpCi0gICAgICAgICAgLmFwcGVuZCgiXCIvPiIpOwotICAgICAgfQotCi0gICAgfQotICAgIHhzZFN0cmluZy5hcHBlbmQoIlxuIik7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZXRob2QgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZChjcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShjaGlsZCwgZWxlbWVudHMsIG51bGwsIG51bGwsIGZpbGVsb2NhdGlvbikpOwotICAgICAgfQotICAgIH0KLQotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwvIikuYXBwZW5kKGVsZW0uZ2V0VGFnTmFtZSgpKS5hcHBlbmQoIj4iKTsKLQotICAgIHJldHVybiB4c2RTdHJpbmcudG9TdHJpbmcoKTsKLQotICB9Ci0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlcyB0aGF0IGFyZSB1c2VkIGZvciBlbGVtZW50cyBvciB0eXBlcyBpbiB0aGUgc2NoZW1hLgotICAgKiBUaGVzZSBhcmUgdGhlIHJlcXVpcmVkIG5hbWVzcGFjZXMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBlbG1lbnRzIGFyZSB2YWxpZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtIFRoZSBlbGVtZW50IHRvIGNoZWNrIGZvciByZXF1aXJlZCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiByZXF1aXJlZCBuYW1lc3BhY2VzIGZvciB0aGUgZWxlbWVudCBhbmQgYWxsIGl0cyBjaGlsZHJlbi4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldFJlcXVpcmVkTmFtZXNwYWNlcyhFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBMaXN0IG5hbWVzcGFjZSA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgLy8gcmVnaXN0ZXIgYWxsIHRoZSBjaGlsZCB0eXBlcyBmaXJzdAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotICAgIC8vIFRPRE86IHdoeSBpcyB0aGVyZSBhIDwgNSBjb25kaXRpb24/Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DaGlsZHJlbiAvKnx8IGkgPCA1Ki87IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAvLyB3ZSBvbmx5IHdhbnQgbm9kZXMgdGhhdCBhcmUgRWxlbWVudHMKLSAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KW47Ci0gICAgICAgIExpc3QgY2hpbGRucyA9IGdldFJlcXVpcmVkTmFtZXNwYWNlcyhjaGlsZCk7Ci0gICAgICAgIGZvciAoaW50IGogPSBjaGlsZG5zLnNpemUoKSAtIDE7IGogPj0gMDsgai0tKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZyljaGlsZG5zLmdldChqKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhucykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlLmFkZChucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIEFkZCB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQKLSAgICBTdHJpbmcgZWxlbU5TID0gZWxlbS5nZXRQcmVmaXgoKTsKLSAgICAvLyBpZiB0aGVyZSBpcyBubyBuYW1lc3BhY2UgcHJlZml4IHNldCBpdCB0byB0aGUgZW1wdHkgcHJlZml4LgotICAgIGlmKGVsZW1OUyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVsZW1OUyA9ICIiOwotICAgIH0KLSAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhlbGVtTlMuaW50ZXJuKCkpKQotICAgICB7Ci0gICAgICBuYW1lc3BhY2UuYWRkKGVsZW1OUy5pbnRlcm4oKSk7Ci0gICAgfQotICAgIC8vIG5vdyBhZGQgYWxsIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQncyBuYW1lc3BhY2VzCi0gICAgLy8gZG9uJ3QgaW5jbHVkZSBpbXBvcnQgYW5kIHNjaGVtYSBlbGVtZW50cwotICAgIFN0cmluZyBsb2NhbG5hbWUgPSBlbGVtLmdldExvY2FsTmFtZSgpOwotICAgIGlmICghbG9jYWxuYW1lLmVxdWFscyhJTVBPUlQpICYmICFsb2NhbG5hbWUuZXF1YWxzKElOQ0xVREUpICYmICFsb2NhbG5hbWUuZXF1YWxzKFNDSEVNQSkpCi0gICAgewotICAgICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0KLSAgICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgICAvLyByZW1vdmVkIHJlc3RyaWN0aW9uIHRoYXQgd2UncmUgb25seSBsb29raW5nIGF0IHR5cGVzCi0gICAgICAgIC8vCQlpZiAobm9kZU5hbWUuZXF1YWxzSWdub3JlQ2FzZShUWVBFKSkKLSAgICAgICAgLy8JCXsKLSAgICAgICAgLy8gZG9uJ3QgdGFrZSBuYW1lc3BhY2UgaW5mbyBmcm9tIGF0dHJpYnV0ZXMgZGVmaW5pbmcgbmFtZXNwYWNlcy4KLSAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB4bWxucywgdGFyZ2V0TmFtZXNwYWNlCi0gICAgICAgIC8vIGRvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBuYW1lIGF0dHJpYnV0ZXMKLSAgICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xIHx8IG5vZGVOYW1lLmVxdWFscyhUQVJHRVROQU1FU1BBQ0UpIHx8IG5vZGVOYW1lLmVxdWFscyhOQU1FKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGludCBjb2xvbkluZGV4ID0gbm9kZVZhbHVlLmluZGV4T2YoIjoiKTsKLSAgICAgICAgLy8gRG9uJ3QgdGFrZSBuYW1lc3BhY2UgaW5mbyBmcm9tIGF0dHJpYnV0ZXMgd2l0aCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHRoYXQgaXMgYXR0cmlidXRlcwotICAgICAgICAvLyB0aGF0IGFyZSBub3QgcHJlZml4ZWQuIChjb2xvbkluZGV4ID09IC0xKQotICAgICAgICAvLyBJZiB0aGUgY29sb25JbmRleCBpcyBmb2xsb3dlZCBieSBhIC8gdGhlbiBpdCBpcyBhIFVSSSBhbmQgbm90Ci0gICAgICAgIC8vIG5hbWVzcGFjZSBxdWFsaWZpZWQuCi0gICAgICAgIGlmIChjb2xvbkluZGV4ID09IC0xIHx8IG5vZGVWYWx1ZS5jaGFyQXQoY29sb25JbmRleCArIDEpID09ICcvJykKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGhlcmUgd2UgaGF2ZSBmb3VuZCBhIGNvbG9uIGRlbGltaXRlciBzbyB3ZSBuZWVkIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBoZXJlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG5vZGVWYWx1ZSA9IG5vZGVWYWx1ZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobm9kZVZhbHVlLmludGVybigpKSkKLSAgICAgICAgewotCi0gICAgICAgICAgbmFtZXNwYWNlLmFkZChub2RlVmFsdWUuaW50ZXJuKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vCQl9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2VzIHRoYXQgaGF2ZSBhbiBpbXBvcnQgc3RhdGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZXMgdGhhdCBhcmUgaW1wb3J0ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRJbXBvcnROYW1lc3BhY2VzKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIExpc3QgbmFtZXNwYWNlID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICAvLyByZWdpc3RlciBhbGwgdGhlIGNoaWxkIHR5cGVzIGZpcnN0Ci0gICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW0uZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpIHx8IGkgPCA1OyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICBMaXN0IGNoaWxkbnMgPSBnZXRJbXBvcnROYW1lc3BhY2VzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gaWYgdGhpcyBpcyBhbiBpbXBvcnQgZWxlbWVudCBnZXQgdGhlIG5hbWVzcGFjZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShJTVBPUlQpKQotICAgIHsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5vZGVWYWx1ZS5pbnRlcm4oKSkpCi0gICAgICAgICAgewotCi0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5vZGVWYWx1ZS5pbnRlcm4oKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIEhhc2h0YWJsZSB3aXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcyBrZXlzIGZyb20gdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCBuYW1lc3BhY2UgcHJlZml4ZXMgbWFwcGVkIHRvIG5hbWVzcGFjZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGdldE5TUmVzb2x2ZXIoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xKQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgU3RyaW5nIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLQotICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVQcmVmaXggPSAiIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNik7Ci0gICAgICAgIH0KLSAgICAgICAgbnNSZXNvbHZlci5wdXQobmFtZVByZWZpeCwgbm9kZVZhbHVlKTsKLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNSZXNvbHZlcjsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIG5hbWVzcGFjZXMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZXMgbGlzdCB3aXRoIHRoZSB0d28gbmFtZXNwYWNlCi0gICAqIHJlc29sdmVyIGhhc2h0YWJsZXMgcHJvdmlkZWQuIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2UgdGhhdCBuZWVkCi0gICAqIHRvIGJlIGRlY2xhcmVkLgotICAgKiBGaXJzdCByZXNvbHZlIGFnYWluc3QgdGhlIGxvY2FsIG5hbWVzcGFjZXMgd2l0aCBuc1Jlc29sdmVyLgotICAgKiBOZXh0IHJlc29sdmUgYWdhaW5zdCB0aGUgcGFyZW50IG5hbWVzcGFjZSB3aXRoIHBhcmVudE5TUmVzb2x2ZXIuCi0gICAqIEEgc2lkZSBhZmZlY3Qgb2YgdGhpcyBtZXRob2QgaXMgdGhlIG5hbWVzcGFjZXMgbGlzdCBpcyBsZWZ0IHdpdGggb25seSB0aG9zZSAKLSAgICogbmFtZXNwYWNlcyB0aGF0IGFyZSByZXNvbHZlZCBhbmQgdGhlIHJlc29sdmVkIGVudGl0aWVzIGFyZSBwbGFjZWQgaW4gdGhlIAotICAgKiBsaXN0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGVudHJpZXMuCi0gICAqIEZvciBleC4gSWYgeW91IHByb3ZpZGUgYSBsaXN0IHN1Y2ggYXMge3hzZCwgaW50Zn0gYW5kIG9ubHkgeHNkIGNhbiBiZSByZXNvbHZlZAotICAgKiB5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgbGlzdCB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9Ci0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIHJlc29sdmUuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgbG9jYWwgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBwYXJlbnROU1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgcGFyZW50IG5hbWVzcGFjZSByZXNvbHZlci4KLSAgICogQHJldHVybiBBIEhhc2h0YWJsZSBvZiBuYW1lc3BhY2VzIHRoYXQgbXVzdCBiZSBkZWNsYXJlZC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpCi0gIHsKLSAgCUhhc2h0YWJsZSByZXFOU0RlY2wgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhbmFtZXNwYWNlcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSBuYW1lc3BhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgewotICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKW5hbWVzcGFjZXMuZ2V0KGkpOwotICAgICAgICAvLyBSZW1vdmUgdGhlIG5hbWVzcGFjZSBmcm9tIHRoZSBsaXN0LgotICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShpKTsKLSAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgYWdhaW5zdCB0aGUgbG9jYWwgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBpZiAobnNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgcmVzb2x2ZWROUyA9IG5zUmVzb2x2ZXIuZ2V0KG5zKTsKLSAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgaWYoIW5hbWVzcGFjZXMuY29udGFpbnMocmVzb2x2ZWROUykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTmV4dCB0cnkgdG8gcmVzb2x2ZSBhZ2FpbnN0IHRoZSBwYXJlbnQgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWlmIChucy5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TICsgIjoiICsgbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyZW50TlNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCByZXNvbHZlZE5TID0gcGFyZW50TlNSZXNvbHZlci5nZXQobnMpOwotICAgICAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIGlmKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHJlc29sdmVkTlMpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgcmVzb2x2ZWROUyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gU3RpbGwgbmVlZCB0byBkZWNsYXJlIHRoZSBuYW1lc3BhY2UgdGhvdWdoLgotICAgICAgICAgICAgICByZXFOU0RlY2wucHV0KG5zLCByZXNvbHZlZE5TKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXFOU0RlY2w7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIGFueSBuYW1lc3BhY2UgZnJvbSB0aGUgbmFtZXNwYWNlcyBsaXN0IGlmIGl0IGlzIGluIHRoZSBpbXBvcnQgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIFRoZSBuYW1lc3BhY2VzIGxpc3QuCi0gICAqIEBwYXJhbSBpbXBvcnRlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIGltcG9ydGVkIG5hbWVzcGFjZXMuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRob3V0IHRoZSBpbXBvcnRlZCBuYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgcmVtb3ZlSW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIExpc3QgaW1wb3J0ZWROYW1lc3BhY2VzKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiBpbXBvcnRlZE5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhaW1wb3J0ZWROYW1lc3BhY2VzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpSW1wb3J0ZWROUyA9IGltcG9ydGVkTmFtZXNwYWNlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlJbXBvcnRlZE5TLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlOUyA9IChTdHJpbmcpaUltcG9ydGVkTlMubmV4dCgpOwotCi0gICAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKGlOUyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgc2NoZW1hIGFuZCB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhlIGlnbm9yZU5hbWVzcGFjZXMKLSAgICogbGlzdCBmcm9tIHRoZSBuYW1lc3BhY2VzIGxpc3QgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBsb2NhbCBuYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRoIHRoZSBsb2NhbCBuYW1lc3BhY2VzIHJlbW92ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlcyAhPSBudWxsICYmIGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnMgPSBlbGVtLmdldEF0dHJpYnV0ZShUQVJHRVROQU1FU1BBQ0UpOwotICAgICAgbmFtZXNwYWNlcy5yZW1vdmUobnMpOwotCi0gICAgICBmb3IgKGludCBpID0gaWdub3JlTmFtZXNwYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgLy8ga2VlcCByZW1vdmluZyB0aGUgbmFtZXNwYWNlIHVudGlsIGl0IGlzIG5vdCBpbiB0aGUgbGlzdAotICAgICAgICBpZiAobmFtZXNwYWNlcy5yZW1vdmUoaWdub3JlTmFtZXNwYWNlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIGlzIGluIHRoZSBsaXN0IG9mIHJlcXVpcmVkIG5hbWVzcGFjZXMsCi0gICAqIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEBwYXJhbSByZXFucyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIGNoZWNrIGZvciB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2VzIGlzIGluIHRoZSBsaXN0LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKExpc3QgcmVxbnMpCi0gIHsKLSAgICBpZiAocmVxbnMuY29udGFpbnMoU09BUF9FTkNPRElOR19VUkkpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVNjaGVtYVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzA1YmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFBsdWdpbiB2YWxpZGF0b3IgZm9yIHRoZSBXU0RMIFZhbGlkYXRpb24gZnJhbWV3b3JrLiBWYWxpZGF0ZXMgaW5saW5lIHNjaGVtYSBmb3VuZCBpbiBhIFdTREwgZG9jdW1lbnQuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IKLXsKLSAgTGlzdCBlbGVtZW50cyA9IG51bGw7Ci0KLQotICBwdWJsaWMgTWFwIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gIAllbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1lbnQ7Ci0gICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpOwotICAgIC8vIEFkZCBpbiB0aGUgbmFtZXNwYWNlcyBkZWZpbmVkIGluIHRoZSBkb2MgYWxyZWFkeSB0aGF0IGFyZW4ndCBkZWZpbmVkIGxvY2FsbHkgaW4gdGhpcyBzY2hlbWEuCi0gICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgbmFtZXNwYWNlcyBvdGhlciB0aGVuIGluIHRoZSBkZWZpbnRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhcwotICAgIC8vIGlubGluZSBzY2hlbWEgY2FuIG5vdCBoYXZlIGFueSBvdGhlciBwYXJlbnRzIGFuZCBtdXN0IGhhdmUgdGhlcmUgdHdvIHBhcmVudHMuCi0gICAgLy8gRmlyc3QgdGFrZSBjYXJlIG9mIHRoZSBkZWZpbml0aW9ucyBlbGVtZW50Ci0KLSAgICAvLyBjcmVhdGUgdGhlIGlubGluZSBzY2hlbWEgc3RyaW5nCi0JRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbix3M2NlbGVtZW50KTsKLQlTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gdzNjZWxlbWVudC5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7Ci0JLy8gaWYgdGhlIHRhcmdldE5hbWVzcGFjZSBoYXNuJ3QgYmVlbiBkZWZpbmVkIGZvciB0aGUgc2NoZW1hIHVzZSB0aGUgCi0JLy8gdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBkZWZpbml0aW9ucyBlbGVtZW50Ci0JLyppZih0YXJnZXROYW1lc3BhY2UgPT0gbnVsbCB8fCB0YXJnZXROYW1lc3BhY2UuZXF1YWxzKCIiKSkKLQkgewotCSAgdGFyZ2V0TmFtZXNwYWNlID0gd3NkbERlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JICB3M2NlbGVtZW50LnNldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFLHRhcmdldE5hbWVzcGFjZSk7Ci0JfSovCi0KLQlTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyh3M2NlbGVtZW50LCBlbGVtZW50cywgZmlsZW5hbWUsIHBhcmVudG5hbWVzcGFjZXMpOwotCi0gICAgLy8gSWYgdGhlIG5hbWVzcGFjZSBnaXZlbiBpcyBvbmUgb2YgdGhlIG9sZCBzY2hlbWEgbmFtZXNwYWNlcyBwcm9kdWNlIGEgd2FybmluZy4KLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gdzNjZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICBpZihuYW1lc3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IG5hbWVzcGFjZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgewotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQW4gb2xkIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLiIpOwotICAgIH0KLQotICAgIC8vIG5vdyBjcmVhdGUgYW5kIGNhbGwgdGhlIHZhbGlkYXRvciBmb3IgdGhlIGlubGluZSBzY2hlbWEKLSAgICBYU0RWYWxpZGF0b3Igc2NoZW1hdiA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLQotICAgIC8vU3RyaW5nIGZpbGVMb2NhdGlvbiA9IG5ldyBVUkwodmFsaWRhdG9ybWFuYWdlci5nZXRGaWxlbmFtZSgpKS5nZXRQYXRoKCk7Ci0gICAgSW5saW5lWFNEUmVzb2x2ZXIgaW5saW5lRW50aXR5UmVzb2x2ZXIgPQotICAgICAgZ2V0RW50aXR5UmVzb2x2ZXIod3NkbERlZmluaXRpb24sIChUeXBlcykgcGFyZW50cy5nZXQoMCksIGZpbGVuYW1lLCB0YXJnZXROYW1lc3BhY2UpOwotICAgIC8vCWFkZCBpbiB0aGUgZXh0ZXJuYWwgWFNEIENhdGFsb2cgdG8gcmVzb2x2ZSBzY2hlbWFzIG9mZmxpbmUKLSAgICBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGVudGl0eVJlc29sdmVyQ2hhaW4gPSBuZXcgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbigpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIoaW5saW5lRW50aXR5UmVzb2x2ZXIpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIobmV3IEZpbGVFbnRpdHlSZXNvbHZlcigpKTsKLSAgICBlbnRpdHlSZXNvbHZlckNoYWluLmFkZEVudGl0eVJlc29sdmVyKFhNTENhdGFsb2dSZXNvbHZlci5nZXRJbnN0YW5jZSgpKTsKLSAgICBzY2hlbWF2LnZhbGlkYXRlSW5saW5lU2NoZW1hKHhzZCwgdGFyZ2V0TmFtZXNwYWNlLCBmaWxlbmFtZSwgZW50aXR5UmVzb2x2ZXJDaGFpbiwgaW5saW5lRW50aXR5UmVzb2x2ZXIpOwotCi0gICAgLy8gY2hlY2sgaWYgdGhlIFNPQVAgRW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQKLSAgICBpZiAoSW5saW5lU2NoZW1hR2VuZXJhdG9yLnNvYXBFbmNvZGluZ1JlcXVpcmVkTm90SW1wb3J0ZWQoZWxlbS5nZXRFbGVtZW50KCksIGZpbGVuYW1lLHBhcmVudG5hbWVzcGFjZXMpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZSBpbmxpbmUgc2NoZW1hIHVzZXMgYW4gZWxlbWVudCBvciB0eXBlIGZyb20gIgotICAgICAgICArICJ0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgYnV0IHRoZSBuYW1lc3BhY2UgaGFzIG5vdCBiZWVuIGltcG9ydGVkLiAiCi0gICAgICAgICsgIlRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBzaG91bGQgYmUgaW1wb3J0ZWQgd2l0aCBhbiBpbXBvcnQgIgotICAgICAgICArICJzdGF0ZW1lbnQgYmVmb3JlIGl0IGlzIHVzZWQuIik7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHNjaGVtYSBpc24ndCB2YWxpZAotICAgIGlmICghc2NoZW1hdi5pc1ZhbGlkKCkpCi0gICAgewotICAgICAgLy8gR2F0aGVyaW5nIGFsbCB0aGUgZXJyb3JzCi0gICAgICBTdHJpbmdCdWZmZXIgZXhjZXB0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgSXRlcmF0b3IgaSA9IHNjaGVtYXYuZ2V0RXJyb3JzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgZXhjZXB0aW9uLmFwcGVuZChpLm5leHQoKSkuYXBwZW5kKCdcbicpOwotICAgICAgfQotICAgICAgLy8gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGV4Y2VwdGlvbi50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgLy8gaWYgdGhlIHNjaGVtYSBpcyB2YWxpZAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBNYXAgbWFwID0gbmV3IEhhc2hNYXAoMSk7Ci0gICAgICBtYXAucHV0KHRhcmdldE5hbWVzcGFjZSwgc2NoZW1hdi5nZXRYU01vZGVsKCkpOwotICAgICAgcmV0dXJuIG1hcDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFuIGVudGl0eSByZXNvbHZlciB0aGF0IHdpbGwgcmVzb2x2ZSBpbmxpbmUgc2NoZW1hcy4gIEV2ZXJ5IGlubGluZSBzY2hlbWEgaXMgcHJlcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHRoZSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcGFyYW0gdHlwZXMgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VMb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQW4gZW50aXR5IHJlc29sdmVyIHRoYXQgY2FuIHJlc29sdmUgaW5saW5lIHNjaGVtYXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lWFNEUmVzb2x2ZXIgZ2V0RW50aXR5UmVzb2x2ZXIoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgVHlwZXMgdHlwZXMsIFN0cmluZyByZWZlcmVuY2VMb2NhdGlvbiwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIElubGluZVhTRFJlc29sdmVyIGVudGl0eVJlc29sdmVyID0gbmV3IElubGluZVhTRFJlc29sdmVyKCk7Ci0vLyAgICBlbnRpdHlSZXNvbHZlci5zZXRSZWZlcmVuY2VMb2NhdGlvbihyZWZlcmVuY2VMb2NhdGlvbik7Ci0gICAgTGlzdCBzY2hlbWFzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKHNjaGVtYXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpU2NoZW1hcyA9IHNjaGVtYXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpU2NoZW1hcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgaVNjaGVtYXMubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGhpc05hbWVzcGFjZSA9IGV4dEVsZW0uZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKHRoaXNOYW1lc3BhY2UgIT0gbnVsbCAmJiAhdGhpc05hbWVzcGFjZS5lcXVhbHNJZ25vcmVDYXNlKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLQotICAgICAgICAJRWxlbWVudCBlbGVtZW50ID0gZXh0RWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkKLS8vCQkJY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCQkJIC8vRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkgSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLQkJCSBTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBlbGVtZW50cywgcmVmZXJlbmNlTG9jYXRpb24sIHBhcmVudG5hbWVzcGFjZXMpOwotICAgICAgICAJLy9hZGROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLSAgICAgICAgICBlbnRpdHlSZXNvbHZlci5hZGQodGhpc05hbWVzcGFjZSwgeHNkKTsKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlbnRpdHlSZXNvbHZlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcyBpbiB0aGUgZm9ybSAKLSAgICogeG1sbnM9InNvbWVuYW1lc3BhY2UiCi0gICAqIGZyb20gdGhlIGRlZmluaXRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhbmQgYWRkIHRoZW0gdG8gdGhlIHNjaGVtYSBlbGVtZW50IHNvIHRoZSBzY2hlbWEgCi0gICAqIHZhbGlkYXRvciB3aWxsIGhhdmUgYWNjZXNzIHRvIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCB0aGUgbmFtZXNwYWNlIGVsZW1lbnRzIGZyb20gdGhlIGVsZW1lbnRzIHByb3ZpZGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgCUhhc2h0YWJsZSBuc3MgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSXRlcmF0b3IgbmFtZVNwYWNlcyA9IHdzZGxEZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotCi0gICAgU3RyaW5nIFhNTE5TID0gQ29uc3RhbnRzLkFUVFJfWE1MTlM7Ci0gICAgCi0gICAgd2hpbGUgKG5hbWVTcGFjZXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc3ByZWZpeCA9IFhNTE5TOwotICAgICAgU3RyaW5nIG5zID0gKFN0cmluZykgbmFtZVNwYWNlcy5uZXh0KCk7Ci0gICAgICBpZiAoIW5zLmVxdWFsc0lnbm9yZUNhc2UoIiIpKQotICAgICAgewotICAgICAgICBuc3ByZWZpeCArPSAiOiI7Ci0gICAgICB9Ci0gICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5zcHJlZml4ICsgbnMpKQotICAgICAgewotICAgICAgCW5zcy5wdXQobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0vLyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgLy8gTmV4dCBoYW5kbGUgdGhlIHBhcmVudCB0eXBlcyBlbGVtZW50Ci0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGF0dHNsZW5ndGggPSBhdHRzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0c2xlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgdGVtcG5vZGUgPSBhdHRzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbm9kZW5hbWUgPSB0ZW1wbm9kZS5nZXROb2RlTmFtZSgpOwotICAgICAgLy8gaWYgdGhpcyBpcyBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUKLSAgICAgIGlmIChub2RlbmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgIHsKLQkJbnNzLnB1dChub2RlbmFtZSwgIHRlbXBub2RlLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgLy9lbGVtZW50LnNldEF0dHJpYnV0ZShub2RlbmFtZSwgdGVtcG5vZGUuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNzOwotICB9Ci0gIAotICAvKioKLSAgICogR2l2ZW4gYSBsaW5lIG51bWJlciBmb3IgdGhlIHNjaGVtYSByZXR1cm5zIHRoZSBlbGVtZW50IGZvdW5kIG9uIHRoYXQgbGluZS4gCi0gICAqIFVzZWZ1bCBmb3Igb2J0YWluaW5nIGVsZW1lbnRzIGZyb20gc2NoZW1hIFN0cmluZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBudW1iZXIgZm9yIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIG9iamVjdCBsb2NhdGVkIGF0IHRoZSBsaW5lIG9yIGF0IGxpbmUgMCBpZiB0aGUgbGluZSBpcyBpbnZhbGlkLgotICAgKi8KLSAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0QXRMaW5lKGludCBsaW5lKQotICAgewotICAgCWlmKGxpbmUgPCAwIHx8IGxpbmUgPj0gZWxlbWVudHMuc2l6ZSgpKQotICAgCXsKLSAgIAkgIGxpbmUgPSAwOwotICAgCX0KLQlyZXR1cm4gZWxlbWVudHMuZ2V0KGxpbmUpOwotICAgfQotICAgCi0gIC8qKgotICAgKiBSZXBsYWNlIGFueSBpbnN0YW5jZSBvZiB0aGUgMjAwMSBzY2hlbWEgbmFtZXNwYWNlIGluIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGgKLSAgICogdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIG5hbWVzcGFjZSBpbi4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHVzZWQgZm9yIHJlcGxhY2VtZW50LgotICAgKiBAcmV0dXJuIFRoZSBtZXNzYWdlIHdpdGggdGhlIDIwMDEgc2NoZW1hIG5hbWVzcGFjZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKi8KLSAvLyBwcml2YXRlIFN0cmluZyByZXBsYWNlTmFtZXNwYWNlKFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgbmFtZXNwYWNlKQotIC8vICB7Ci0gLy8gICAgU3RyaW5nIHhzZDIwMDEgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotIC8vICAgIGludCBzdGFydCA9IG1lc3NhZ2UuaW5kZXhPZih4c2QyMDAxKTsKLSAvLyAgICBpbnQgZW5kID0gc3RhcnQgKyB4c2QyMDAxLmxlbmd0aCgpOwotIC8vICAgIGlmKHN0YXJ0IDwgMCkKLSAvLyAgICB7Ci0gLy8gICAgICByZXR1cm4gbWVzc2FnZTsKLSAvLyAgICB9Ci0gLy8gICAgU3RyaW5nIHN0YXJ0U3RyaW5nID0gbWVzc2FnZS5zdWJzdHJpbmcoMCxzdGFydCk7Ci0gLy8gICAgU3RyaW5nIGVuZFN0cmluZyA9IG1lc3NhZ2Uuc3Vic3RyaW5nKGVuZCxtZXNzYWdlLmxlbmd0aCgpKTsKLSAvLyAgICByZXR1cm4gc3RhcnRTdHJpbmcgKyBuYW1lc3BhY2UgKyBlbmRTdHJpbmc7Ci0gLy8gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVYU0RSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWQ1YTc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBYTUxFbnRpdHlSZXNvbHZlciB0aGF0IGFsbG93cyBpbmxpbmUgc2NoZW1hcyB0byByZXNvbHZlIGVhY2ggb3RoZXIgdGhyb3VnaCBpbXBvcnRzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lWFNEUmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGVudGl0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICBwcm90ZWN0ZWQgWE1MSW5wdXRTb3VyY2UgcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0dWN0b3IuCi0gICAqLwotICBwdWJsaWMgSW5saW5lWFNEUmVzb2x2ZXIoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKQotCQkgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCVN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0JU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0JU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JU3RyaW5nIHNjaGVtYSA9IG51bGw7Ci0JaWYgKHN5c3RlbUlkID09IG51bGwpCi0JewotCSAgaWYocHVibGljSWQgPT0gbnVsbCkKLQkgIHsKLQkgIAlpZihuYW1lc3BhY2UgPT0gbnVsbCkKLQkgIAl7CQotCSAgICAgIHJldHVybiBudWxsOwotCSAgCX0KLQkgIAllbHNlCi0JICAJewotCSAgCQlzeXN0ZW1JZCA9IG5hbWVzcGFjZTsKLQkgIAl9Ci0JICB9Ci0JICBlbHNlCi0JICB7CQotCSAgICBzeXN0ZW1JZCA9IHB1YmxpY0lkOwotCSAgfQotCX0KLQkgIAotCWlmKHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSAhPSBudWxsICYmIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZS5lcXVhbHMoc3lzdGVtSWQpKQotCXsKLQkJaWYocmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UhPW51bGwpCi0JCXsKLQkJCXJldHVybiByZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZTsKLQkJfQotCX0KLQllbHNlIGlmICgoc2NoZW1hID0gKFN0cmluZykgZW50aXRpZXMuZ2V0KHN5c3RlbUlkKSkgIT0gbnVsbCAmJiAhc2NoZW1hLmVxdWFscygiIikpCi0JewotCQlpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgc3lzdGVtSWQsIHN5c3RlbUlkLG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKSxudWxsKTsKLQl9Ci0JCi0gICAgLy9pZihpcyA9PSBudWxsKQotICAgIC8vewotICAgIC8vCXRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwotICAgIC8vfQotCXJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgLSB0aGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hCi0gICAqIEBwYXJhbSBzY2hlbWEgLSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgU3RyaW5nIHNjaGVtYSkKLSAgewotICAgIGVudGl0aWVzLnB1dCh0YXJnZXROYW1lc3BhY2UsIHNjaGVtYSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgdGhlIHJlZmVycmluZyBpbmxpbmUgc2NoZW1hLiAKLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICogQHBhcmFtIG5hbWVzcGFjZSAtIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFJlZmVycmluZ1NjaGVtYShYTUxJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gaW5wdXRTb3VyY2U7Ci0gICAgcmVmZXJyaW5nU2NoZW1hTmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0xhenlVUkxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmUyYTkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0xhenlVUkxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGFsbG93cyBJbnB1dFN0cmVhbXMgdG8gYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQgdG8geGVyY2VzIHdpdGhvdXQKLSAqIGFjdHVhbGx5IG9wZW5pbmcgZmlsZSBoYW5kbGVzIG9yIG5ldHdvcmsgY29ubmVjdGlvbnMgdW50aWwgaXQgaXMgYWJzb2x1dGVseQotICogbmVjY2Vzc2FyeS4KLSAqLwotcHVibGljIGNsYXNzIExhenlVUkxJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtCi17ICAKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgPSAwOyAKLSAgcHJvdGVjdGVkIElucHV0U3RyZWFtIGlubmVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIHVybDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXJyb3I7Ci0gIGJvb2xlYW4gaGFzTWFya3M7Ci0gIGJvb2xlYW4gcHJldGVuZEZpbGVJc1N0aWxsT3BlbjsKLQotICBwdWJsaWMgTGF6eVVSTElucHV0U3RyZWFtKFN0cmluZyB1cmwpCi0gIHsKLSAgICB0aGlzLnVybCA9IHVybDsKLQlpbm5lciA9IG51bGw7Ci0JcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGlubmVyID09IG51bGwgJiYgIWVycm9yKQotICAgIHsKLSAgICAgIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQrKzsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBzdHJlYW0gKCIgKyBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50ICsgIiktLSAiICsgdXJsKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpbm5lciA9IG5ldyBVUkwodXJsKS5vcGVuU3RyZWFtKCk7Ci0JCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSBmYWxzZTsKLQkJaGFzTWFya3MgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkgCi0gICAgICB7Ci0gICAgICAgIGlmIChpbm5lciA9PSBudWxsKQotICAgICAgICB7ICAKLSAgICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCXByb3RlY3RlZCB2b2lkIGNsb3NlU3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGlubmVyICE9IG51bGwgJiYgIXByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHsKLQkJCWlubmVyLmNsb3NlKCk7Ci0JCQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gdHJ1ZTsKLQkJfQotICAJfQotCi0gIHB1YmxpYyBpbnQgYXZhaWxhYmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIDA7Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlyZXR1cm4gaW5uZXIuYXZhaWxhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHsKLQkJLy8gU3RvcCBiZWhhdmluZyBhcyBpZiB0aGUgc3RyZWFtIHdlcmUgc3RpbGwgb3Blbi4KLQkJcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCWlmIChpbm5lciAhPSBudWxsKSB7Ci0JCQlkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50LS07Ci0JCSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDbG9zaW5nIHN0cmVhbSAoIiArIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgKyAiKSAtLSAiICsgdXJsKTsKLQkJCWlubmVyLmNsb3NlKCk7Ci0JCX0KLQl9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtYXJrKGludCByZWFkbGltaXQpCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuOwotCWhhc01hcmtzID0gdHJ1ZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaW5uZXIubWFyayhyZWFkbGltaXQpOwotCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiBmYWxzZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaWYgKGlubmVyID09IG51bGwpIHJldHVybiBmYWxzZTsKLQkJcmV0dXJuIGlubmVyLm1hcmtTdXBwb3J0ZWQoKTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIC0xOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JaW50IGJ5dGVzUmVhZCA9IGlubmVyLnJlYWQoKTsKLQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQlyZXR1cm4gYnl0ZXNSZWFkOwotICB9Ci0KLQotCXB1YmxpYyBpbnQgcmVhZChieXRlW10gYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQkJY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKGIpOwotCQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQkJcmV0dXJuIGJ5dGVzUmVhZDsKLQl9Ci0KLSAgcHVibGljIGludCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgeyAgICAKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIC0xOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JaW50IGJ5dGVzUmVhZCA9IGlubmVyLnJlYWQoYiwgb2ZmLCBsZW4pOwotCWlmIChieXRlc1JlYWQgPT0gLTEgJiYgIWhhc01hcmtzKSBjbG9zZVN0cmVhbSgpOwotCXJldHVybiBieXRlc1JlYWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybjsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWlubmVyLnJlc2V0KCk7Ci0gIH0KLQotICBwdWJsaWMgbG9uZyBza2lwKGxvbmcgbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsgICAKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIDA7Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlyZXR1cm4gaW5uZXIuc2tpcChuKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvU2NoZW1hQXR0cmlidXRlVGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OTc2MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvU2NoZW1hQXR0cmlidXRlVGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLnhzLlNjaGVtYVN5bWJvbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5TeW1ib2xUYWJsZTsKLS8qKgotICogVGhpcyBjbGFzcyB3aWxsIGFsbG93IHRoZSBjYWxsaW5nIGNvZGUgdG8gc2VlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBpbiBzY2hlbWEuCi0gKiBUaGlzIHNlcnZlcyBhcyBzY2hlbWEgZm9yIHNjaGVtYS4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFNjaGVtYUF0dHJpYnV0ZVRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlVGFibGUoKQotICB7Ci0gICAgLy8gYWRkIGFsbCBvZiB0aGUgc3lib2xzIHRvIHRoZSB0YWJsZS4gU2NoZW1hU3ltYm9scyBwcm9iYWJseSBzaG91bGQgaGF2ZQotICAgIC8vIGEgU3ltYm9sVGFibGUgZm9yIHRoZXNlIGJ1dCBpdCBkb2Vzbid0Ci0KLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRBTlkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VORExPQ0FMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRPVEhFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5EVEFSR0VUTlMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QT1VOREFMTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0ZBTFNFXzApOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UUlVFXzEpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9BTllTSU1QTEVUWVBFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQU5ZVFlQRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0FOWVVSSSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JBU0U2NEJJTkFSWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JPT0xFQU4pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9CWVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQ09MTEFQU0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREFURVRJTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ERUNJTUFMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRE9VQkxFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRFVSQVRJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9FTlRJVFkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9FTlRJVElFUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VYVEVOU0lPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0ZBTFNFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkxPQVQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9IRVhCSU5BUlkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lEUkVGKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSURSRUZTKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSU5UKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xBTkdVQUdFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTEFYKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTElTVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xPTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OQU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTkVHQVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTU9OVEgpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9NT05USERBWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05DTkFNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05NVE9LRU4pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OTVRPS0VOUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PTk5FR0FUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PTlBPU0lUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PUk1BTElaRURTVFJJTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT1RBVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX09QVElPTkFMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUE9TSVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUFJFU0VSVkUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QUk9ISUJJVEVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUU5BTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9RVUFMSUZJRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVBMQUNFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUkVRVUlSRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVNUUklDVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NIT1JUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU0tJUCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NUUklDVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NUUklORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NVQlNUSVRVVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RJTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UT0tFTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RSVUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTkJPVU5ERUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTklPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOUVVBTElGSUVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURCWVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURJTlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRExPTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRFNIT1JUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfWUVBUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1lFQVJNT05USCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9WYWxpZGF0ZUVycm9ySGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2E3M2ZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uOwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFhNTEVycm9ySGFuZGxlciB0aGF0IGNhcHR1cmVzIGVycm9yIGZyb20gWGVyY2VzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVFcnJvckhhbmRsZXIgaW1wbGVtZW50cyBYTUxFcnJvckhhbmRsZXIKLXsKLSAgQXJyYXlMaXN0IGVycm9yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogR2V0IHRoZSBlcnJvciBtZXNzYWdlcyBjcmVhdGVkIGJ5IFhlcmNlcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVycm9ycyBsaXN0LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVycm9yKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSwgWE1MUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBlcnJvckxpc3QuYWRkKCJFcnJvcjogIiArIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZmF0YWxFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEsIFhNTFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgZXJyb3JMaXN0LmFkZCgiRmF0YWwgZXJyb3I6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyI3dhcm5pbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdhcm5pbmcoU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxLCBYTUxQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIGVycm9yTGlzdC5hZGQoIldhcm5pbmc6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRhZmI1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLS8qKgotICogWE1MQ2F0YWxvZwotICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byByZWdpc3Rlciwgb2J0YWluIGFuZCBkZWxldGUgYW4gaW5zdGFuY2Ugb2YgYW4gCi0gKiBYTUwgY2F0YWxvZy4gTWV0aG9kIGRlZmluaXRpb25zIGFyZSBwcm92aWRlZCBmb3IgdGhlIGNhdGFsb2cgdG8gc2V0Ci0gKiBhIGxvY2F0aW9uIGluIHRoZSBjYXRhbG9nIGFuZCByZXNvbHZlIGFuIGVudGl0eSBmcm9tIHRoZSBjYXRhbG9nLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MQ2F0YWxvZwotewotICBwcml2YXRlIHN0YXRpYyBYTUxDYXRhbG9nIGluc3RhbmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3MgeG1sY2F0YWxvZ2NsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZy4gSWYgbm8gaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCwKLSAgICogcmV0dXJucyBhIGRlZmF1bHQgaW5zdGFuY2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWE1MQ2F0YWxvZyBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoeG1sY2F0YWxvZ2NsYXNzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW5zdGFuY2UgPSAoWE1MQ2F0YWxvZyl4bWxjYXRhbG9nY2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBYTUxDYXRhbG9nSW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGluc3RhbmNlID0gbmV3IFhNTENhdGFsb2dJbXBsKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGNsYXNzIG9mIHRoZSBYTUwgY2F0YWxvZyB0byBiZSB1c2VkLgotICAgKiAKLSAgICogQHBhcmFtIHhtbGNhdGFsb2cgLSB0aGUgY2xhc3Mgb2YgdGhlIFhNTCBjYXRhbG9nIHRvIGJlIHVzZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRYTUxDYXRhbG9nKENsYXNzIHhtbGNhdGFsb2cpCi0gIHsKLSAgICB4bWxjYXRhbG9nY2xhc3MgPSB4bWxjYXRhbG9nOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc2V0cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIFhNTCBjYXRhbG9nIHRvIG51bGwuIEFsbG93cyBzd2l0Y2hpbmcgWE1MIGNhdGFsb2dzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCkKLSAgewotICAgIGluc3RhbmNlID0gbnVsbDsKLSAgICB4bWxjYXRhbG9nY2xhc3MgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhIHB1YmxpYyBpZCBhbmQgYSBsb2NhdGlvbiB0byB0aGUgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCAtIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudHJ5Ci0gICAqIEBwYXJhbSBzeXN0ZW1JZCAtIHRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudHJ5Ci0gICAqLwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhZGRFbnRyeVRvQ2F0YWxvZyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCk7Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIGxvY2F0aW9uIG9mIGFuIGVudGl0eSBnaXZlbiBwdWJsaWMgYW5kIHN5c3RlbSBpZHMuCi0gICAqIAotICAgKiBAcGFyYW0gcHVibGljSWQgLSB0aGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkgdG8gYmUgcmVzb2x2ZWQKLSAgICogQHBhcmFtIHN5c3RlbUlkIC0gdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5IHRvIGJlIHJlc29sdmVkCi0gICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBlbnRpdHkKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MQ2F0YWxvZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdjNDBlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBYTUwgQ2F0YWxvZy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dJbXBsIGV4dGVuZHMgWE1MQ2F0YWxvZwotewotICBwcm90ZWN0ZWQgTWFwIGNhdGFsb2cgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUueG1sY29uZm9ybWFuY2UuWE1MQ2F0YWxvZyNhZGRFbnRyeVRvQ2F0YWxvZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnlUb0NhdGFsb2coU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICBjYXRhbG9nLnB1dChwdWJsaWNJZCwgc3lzdGVtSWQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUueG1sY29uZm9ybWFuY2UuWE1MQ2F0YWxvZyNyZXNvbHZlRW50aXR5TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gIAkvLyBpZiB0aGVyZSdzIG5vIHN5c3RlbSBpZCB1c2UgdGhlIHB1YmxpYyBpZAotICAgIGlmIChzeXN0ZW1JZCA9PSBudWxsIHx8IHN5c3RlbUlkLmVxdWFscygiIikpCi0gICAgewotICAgICAgc3lzdGVtSWQgPSBwdWJsaWNJZDsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcpY2F0YWxvZy5nZXQoc3lzdGVtSWQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2VmZGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci0KLS8qKgotICogQSByZXNvbHZlciB0byByZXNvbHZlIGVudGl0aWVzIGZyb20gdGhlIFhNTCBjYXRhbG9nLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ1Jlc29sdmVyIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBYTUxDYXRhbG9nUmVzb2x2ZXIgeG1sQ2F0YWxvZzsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZ1Jlc29sdmVyKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhpcyByZXNvbHZlci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoaXMgcmVzb2x2ZXIKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWE1MQ2F0YWxvZ1Jlc29sdmVyIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmICh4bWxDYXRhbG9nID09IG51bGwpCi0gICAgewotICAgICAgeG1sQ2F0YWxvZyA9IG5ldyBYTUxDYXRhbG9nUmVzb2x2ZXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHhtbENhdGFsb2c7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0gICAgU3RyaW5nIHN5c3RlbUlkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldEV4cGFuZGVkU3lzdGVtSWQoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCkucmVzb2x2ZUVudGl0eUxvY2F0aW9uKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgaWYgKGxvY2F0aW9uID09IG51bGwpCi0gICAgewotICAgICAgWE1MSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgWE1MSW5wdXRTb3VyY2UocHVibGljSWQsIHN5c3RlbUlkLCBzeXN0ZW1JZCwgbmV3IFN0cmluZ1JlYWRlcihsb2NhdGlvbiksIG51bGwpOwotICAgICAgcmV0dXJuIGlucHV0U291cmNlOwotICAgIH0KLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIG51bGwgdG8gdGVsbCB0aGUgcGFyc2VyIHRvIGxvY2F0ZSB0aGUgc3lzdGVtSWQgYXMgYSBVUkkKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzFmODAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTEVudGl0eVJlc29sdmVyQ2hhaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotCi0vKioKLSAqIEhhbmRsZSBhIGNoYWluIG9mIGVudGl0eSByZXNvbHZlcnMuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJpdmF0ZSBMaXN0IGVudGl0eVJlc29sdmVycyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHhtbFJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFhNTElucHV0U291cmNlIGlzID0gbnVsbDsKLSAgICBJdGVyYXRvciBlbnRpdHlSZXNvbHZlckl0ZXIgPSBlbnRpdHlSZXNvbHZlcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZW50aXR5UmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IChYTUxFbnRpdHlSZXNvbHZlcillbnRpdHlSZXNvbHZlckl0ZXIubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlzID0gZW50aXR5UmVzb2x2ZXIucmVzb2x2ZUVudGl0eSh4bWxSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFhOSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRocm93IGFuZCBJT0V4Y2VwdGlvbiBpZiB0aGUgZmlsZSBpc24ndCBmb3VuZAotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlIik7Ci0gICAgfQotICAgIHJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gZW50aXR5IHJlc29sdmVyIHRvIHRoaXMgY2hhaW4uCi0gICAqIAotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgVGhlIHJlc29sdmVyIHRvIGFkZCB0byB0aGUgY2hhaW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRpdHlSZXNvbHZlcihYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIGVudGl0eVJlc29sdmVycy5hZGQoZW50aXR5UmVzb2x2ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YU0RWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hTRFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWQzYzcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hTRFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlhNTEdyYW1tYXJQcmVwYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhTR3JhbW1hcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLQotCi0vKioKLSAqIFZhbGlkYXRlIHNjaGVtYXMgZnJvbSBmaWxlcyBvciBTdHJpbmcuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBYU01vZGVsIHhzTW9kZWw7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1ZhbGlkWFNEOwotICBwcml2YXRlIExpc3QgZXJyb3JzOwotICBwcml2YXRlIFN0cmluZyBmaWxlbG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhTRFZhbGlkYXRvcigpCi0gIHsKLSAgICB4c01vZGVsID0gbnVsbDsKLSAgICBpc1ZhbGlkWFNEID0gZmFsc2U7Ci0gICAgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiBpbmxpbmUgc2NoZW1hLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBBIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlSW5saW5lU2NoZW1hKFN0cmluZyBzY2hlbWEsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFN0cmluZyBmaWxlbG9jKQotICB7Ci0gICAgdmFsaWRhdGVJbmxpbmVTY2hlbWEoc2NoZW1hLCB0YXJnZXROYW1lc3BhY2UsIGZpbGVsb2MsIG51bGwsIG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFuIGlubGluZSBzY2hlbWEgYW5kIHNwZWNpZnkgYW4gZW50aXR5IHJlc29sdmVyLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGlzIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlckNoYWluIFRoZSBlbnRpdHkgcmVzb2x2ZXIgY2hhaW4uCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIHJlc29sdmVyIGZvciB0aGlzIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlSW5saW5lU2NoZW1hKAotICAgIFN0cmluZyBzY2hlbWEsCi0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwKLSAgICBTdHJpbmcgZmlsZWxvYywKLSAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlckNoYWluLAotICAgIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKQotICB7Ci0gICAgZmlsZWxvY2F0aW9uID0gZmlsZWxvYzsKLQotICAgIHZhbGlkYXRlWFNEKHNjaGVtYSwgdHJ1ZSwgZW50aXR5UmVzb2x2ZXJDaGFpbix0YXJnZXROYW1lc3BhY2UsIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZSBsb2NhdGVkIGF0IHRoZSB1cmkgc3BlY2lmaWVkIHdpdGggdGhlIGdpdmVuIGVudGl0eSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgQW4gYWJzb2x1dGUgdXJpIGZvciB0aGUgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgQW4gZW50aXR5IHJlc29sdmVyIHRvIGJlIHVzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShTdHJpbmcgdXJpLCBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIHZhbGlkYXRlWFNEKHVyaSwgZmFsc2UsIGVudGl0eVJlc29sdmVyLCBudWxsLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgc2NoZW1hLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGUgc2NoZW1hIG9yIGl0J3MgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBpbmxpbmVYU0QgVHJ1ZSBpZiBhbiBpbmxpbmUgc2NoZW1hLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlciBBbiBlbnRpdHkgcmVzb2x2ZXIgdG8gdXNlLgotICAgKiBAcGFyYW0gdGFyZ2V0TmFtZXNwYWNlIFRoZSB0YXJnZXQgbmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEgYmVpbmcgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIgQW4gaW5saW5lIHNjaGVtYSBlbnRpdHkgcmVzb2x2ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVhTRChTdHJpbmcgc2NoZW1hLCBib29sZWFuIGlubGluZVhTRCwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKQotICB7Ci0gICAgVmFsaWRhdGVFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyID0gbmV3IFZhbGlkYXRlRXJyb3JIYW5kbGVyKCk7Ci0gICAgZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZXMoKS5jbGVhcigpOwotICAgIHRyeQotICAgIHsKLQkJWE1MR3JhbW1hclByZXBhcnNlciBncmFtbWFyUHJlcGFyc2VyID0gbmV3IFhNTEdyYW1tYXJQcmVwYXJzZXIoKTsKLQkJWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSBuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCk7Ci0JCWdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wpOwotCSAKLSAgICAgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcik7Ci0gICAgICBpZiAoZW50aXR5UmVzb2x2ZXIgIT0gbnVsbCkKLSAgICAgIHsKLQkJZ3JhbW1hclByZXBhcnNlci5zZXRFbnRpdHlSZXNvbHZlcihlbnRpdHlSZXNvbHZlcik7Ci0gICAgICB9Ci0KLSAgICAgIHRyeQotICAgICAgewotCQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0gICAgICAgIC8vIHRoaXMgYWxsb3dzIHN1cHBvcnQgZm9yIHRoZSBpbmxpbmUgc2NoZW1hIGluIFdTREwgZG9jdW1lbnRzCi0gICAgICAgIGlmIChpbmxpbmVYU0QpCi0gICAgICAgIHsKLSAgICAgICAgCQotICAgICAgICAJUmVhZGVyIHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKTsKLQkJCWlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsZmlsZWxvY2F0aW9uLGZpbGVsb2NhdGlvbixyZWFkZXIsbnVsbCk7Ci0JCQkKLQkJCSgoSW5saW5lWFNEUmVzb2x2ZXIpaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIpLmFkZFJlZmVycmluZ1NjaGVtYShpcyx0YXJnZXROYW1lc3BhY2UpOwotCi0gICAgICAgIH0KLSAgICAgICAgLy8gZ2V0IHRoZSBpbnB1dCBzb3VyY2UgZm9yIGFuIGV4dGVybmFsIHNjaGVtYSBmaWxlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsc2NoZW1hLHNjaGVtYSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGdyYW1tYXJQcmVwYXJzZXIucmVnaXN0ZXJQcmVwYXJzZXIoWE1MR3JhbW1hckRlc2NyaXB0aW9uLlhNTF9TQ0hFTUEsbnVsbC8qc2NoZW1hTG9hZGVyKi8pOwotICAgICAgICBncmFtbWFyUHJlcGFyc2VyLmdldExvYWRlcihYTUxHcmFtbWFyRGVzY3JpcHRpb24uWE1MX1NDSEVNQSk7Ci0KLQkJWFNHcmFtbWFyIGdyYW1tYXIgPSAoWFNHcmFtbWFyKWdyYW1tYXJQcmVwYXJzZXIucHJlcGFyc2VHcmFtbWFyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLGlzKTsKLQkJeHNNb2RlbCA9IGdyYW1tYXIudG9YU01vZGVsKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vcGFyc2VyIHdpbGwgcmV0dXJuIG51bGwgcG9pbnRlciBleGNlcHRpb24gaWYgdGhlIGRvY3VtZW50IGlzIHN0cnVjdHVyYWxseSBpbnZhbGlkCi0gICAgICAgIGVycm9ycy5hZGQoIlNjaGVtYSBpcyBzdHJ1Y3R1cmFsbHkgaW52YWxpZC4iKTsKLSAgICAgIH0KLQotICAgICAgZXJyb3JzLmFkZEFsbChlcnJvckhhbmRsZXIuZ2V0RXJyb3JNZXNzYWdlcygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgICBpZiAoZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBpc1ZhbGlkWFNEID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKi8KLQotICBwdWJsaWMgWFNNb2RlbCBnZXRYU01vZGVsKCkKLSAgewotICAJcmV0dXJuIHhzTW9kZWw7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2NoZW1hIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNjaGVtYSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaXNWYWxpZFhTRDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGVycm9yIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBlcnJvciBmcm9tIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTENvbnZlcnRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTENvbnZlcnRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmIxMzRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxDb252ZXJ0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtU291cmNlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udmVydHMgYSBYTUwgZG9jdW1lbnQgdXNpbmcgYW4gWFNMIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxDb252ZXJ0b3IKLXsKLQotICAvKioKLSAgICogVHJhbnNmb3JtcyBhbiBYTUwgZG9jdW1lbnQgdXNpbmcgYW4gWFNMIGZpbGUuCi0gICAqIEBwYXJhbSBhcmdzICBhcmd1bWVudHMgZm9yIG1haW4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykKLSAgICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICJVc2FnZTogWE1MQ29udmVydG9yIDx4c2xGaWxlPiA8aW5YTUxGaWxlPiA8b3V0RmlsZT4iKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBHZXQgdHJhbnNmb3JtZXIgCi0gICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0KLSAgICAgICAgICBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigKLSAgICAgICAgICAgIG5ldyBTdHJlYW1Tb3VyY2UoYXJnc1swXSkpOwotCi0gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgWE1MIGRvY3VtZW50IHVzaW5nIHRoZSBzcGVjaWZpY2VkIFhTTCBmaWxlCi0gICAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSgKLSAgICAgICAgICBuZXcgU3RyZWFtU291cmNlKGFyZ3NbMV0pLAotICAgICAgICAgIG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oYXJnc1syXSkpKTsKLQotICAgICAgICAvLyBEaXNwbGF5IHJlc3VsdHMKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICJDcmVhdGVkICIgKyBhcmdzWzJdICsgIiBmcm9tICIgKyBhcmdzWzBdICsgIiBhbmQgIiArIGFyZ3NbMV0gKyAiLiIpOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIFN5c3RlbS5leGl0KDApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwODc1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjcmVhdGVzIGEgSGFzaE1hcCB0byBjYWNoZSBYTUwgZG9jdW1lbnRzLgotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFhNTERvY3VtZW50Q2FjaGUgZXh0ZW5kcyBIYXNoTWFwCi17Ci0Jc3RhdGljIFhNTERvY3VtZW50Q2FjaGUgaW5zdGFuY2U7Ci0KLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODM0MDI4MDQzNzA5NjU3NDAxTDsKLQotCS8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgWE1MRG9jdW1lbnRDYWNoZS4KLSAgICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSAgdGhlIGluaXRpYWwgY2FwYWNpdHkuCi0gICAqIEBwYXJhbSBsb2FkRmFjdG9yICAgICAgIHRoZSBsb2FkIGZhY3Rvci4gCi0gICAqLwotICBwdWJsaWMgWE1MRG9jdW1lbnRDYWNoZShpbnQgaW5pdGlhbENhcGFjaXR5LCBmbG9hdCBsb2FkRmFjdG9yKQotICB7Ci0gICAgc3VwZXIoaW5pdGlhbENhcGFjaXR5LCBsb2FkRmFjdG9yKTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTERvY3VtZW50Q2FjaGUuCi0gICAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgIHRoZSBpbml0aWFsIGNhcGFjaXR5LgotICAgKi8KLSAgcHVibGljIFhNTERvY3VtZW50Q2FjaGUoaW50IGluaXRpYWxDYXBhY2l0eSkKLSAgewotICAgIHN1cGVyKGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxEb2N1bWVudENhY2hlLgotICAgKi8KLSAgcHVibGljIFhNTERvY3VtZW50Q2FjaGUoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTERvY3VtZW50Q2FjaGUuCi0gICAqIEBwYXJhbSB0ICB0aGUgbWFwIHdob3NlIG1hcHBpbmdzIGFyZSB0byBiZSBwbGFjZWQgaW4gdGhpcyBtYXAuCi0gICAqLwotICBwdWJsaWMgWE1MRG9jdW1lbnRDYWNoZShNYXAgdCkKLSAgewotICAgIHN1cGVyKHQpOwotICAgIGluc3RhbmNlID0gdGhpczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgWE1MRG9jdW1lbnRDYWNoZSBpbnN0YW5jZSgpCi0gIHsKLQkgIGlmIChpbnN0YW5jZSA9PSBudWxsKSAKLQkJICBpbnN0YW5jZSA9IG5ldyBYTUxEb2N1bWVudENhY2hlKCk7Ci0JICAKLQkgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGVVc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZVVzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUwZjA3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZVVzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mIGNhY2hlZCBYTUwgZG9jdW1lbnRzLgotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MRG9jdW1lbnRDYWNoZVVzZXIKLXsKLSAgLyoqCi0gICAqIEdldCBkb2N1bWVudCBmcm9tIGNhY2hlLgotICAgKiBAc2VlICNzZXREb2N1bWVudAotICAgKgotICAgKiBAcGFyYW0ga2V5ICBhIFN0cmluZy4gCi0gICAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUga2V5LgotICAgKi8KLSAgcHJvdGVjdGVkIERvY3VtZW50IGdldERvY3VtZW50KFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gKERvY3VtZW50KSBYTUxEb2N1bWVudENhY2hlLmluc3RhbmNlKCkuZ2V0KGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogUHV0IGRvY3VtZW50IHdpdGggY29ycmVzcG9uZGluZyBrZXkgaW4gY2FjaGUuCi0gICAqIEBzZWUgI2dldERvY3VtZW50Ci0gICAqCi0gICAqIEBwYXJhbSBrZXkgICAgICAgYSBTdHJpbmcgdXNlZCBhcyBhIGtleSB0byBpZGVudGlmeSBzcGVjaWZpZWQgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkb2N1bWVudCAgYSBkb2N1bWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldERvY3VtZW50KFN0cmluZyBrZXksIE9iamVjdCBkb2N1bWVudCkKLSAgewotCSAgWE1MRG9jdW1lbnRDYWNoZS5pbnN0YW5jZSgpLnB1dChrZXksIGRvY3VtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZG9jdW1lbnQgbGlzdC4KLSAgICogQHJldHVybiBhIFhNTERvY3VtZW50Q2FjaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZG9jdW1lbnQgbGlzdCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBYTUxEb2N1bWVudENhY2hlIGdldERvY3VtZW50TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gWE1MRG9jdW1lbnRDYWNoZS5pbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIFhNTCBkb2N1bWVudC4KLSAgICogQHBhcmFtIHVybFN0cmluZyAgYSBTdHJpbmcgbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICogQHBhcmFtIGJhc2VVUkkgICAgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZG9jdW1lbnQgY2Fubm90IGJlIHBhcnNlZC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKFN0cmluZyB1cmxTdHJpbmcsIFN0cmluZyBiYXNlVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBwYXJzZVhNTERvY3VtZW50VVJMKHVybFN0cmluZywgYmFzZVVSSSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgWE1MIGRvY3VtZW50IGFuZCB2YWxpZGF0ZSB3aXRoIGEgc2NoZW1hIGRvY3VtZW50LgotICAgKiBAcGFyYW0gdXJsU3RyaW5nICBhIFN0cmluZyBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotICAgKiBAcGFyYW0gYmFzZVVSSSAgICBhIGJhc2UgdXJsIHRvIGFzc2lzdCBpbiBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotICAgKiBAcGFyYW0gc2NoZW1hICAgICBhIFN0cmluZyBpZGVudGlmeWluZyByZWxhdGVkIHNjaGVtYSBkb2N1bWVudC4KLSAgICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZG9jdW1lbnQgY2Fubm90IGJlIHBhcnNlZC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKAotICAgIFN0cmluZyB1cmxTdHJpbmcsCi0gICAgU3RyaW5nIGJhc2VVUkksCi0gICAgU3RyaW5nIHNjaGVtYSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgVVJMIHJlZmVyZW5jZSB0byBkb2N1bWVudAotICAgICAgVVJMIHVybCA9IFhNTFV0aWxzLmNyZWF0ZVVSTCh1cmxTdHJpbmcsIGJhc2VVUkkpOwotICAgICAgICAgICAgICAgCi0gICAgICAvLyBUT0RPOiBBZGQgc2NoZW1hIHRvIHRoZSB4bWwgZG9jdW1lbnQgY2FjaGUsIHNvIHRoYXQgeW91IGNhbiBkZXRlY3Qgd2hlbiBpdCBoYXMgYWxyZWFkeSAKLSAgICAgIC8vICBiZWVuIHBhcnNlZCB1c2luZyBhIHNwZWNpZmljIHNjaGVtYSBkZWZpbml0aW9uIAotCi0gICAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaXMgbm90IGluIHRoZSBjYWNoZSwgdGhlbiByZWFkIGFuZCBwYXJzZSBpdAotICAgCSAgaWYgKChkb2N1bWVudCA9IGdldERvY3VtZW50KHVybFN0cmluZykpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUxEb2N1bWVudFVSTCh1cmwsIHNjaGVtYSk7Ci0gICAgICAgIC8vIEFkZCBkb2N1bWVudCB0byBjYWNoZQotICAgICAgICBzZXREb2N1bWVudCh1cmxTdHJpbmcsIGRvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRvY3VtZW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVGFncy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRhZ3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyZDA0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVGFncy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBpbmZvcm1hdGlvbiBvbiBYTUwgdGFncy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGludGVyZmFjZSBYTUxUYWdzCi17Ci0gIC8qKgotICAgKiBOYW1lc3BhY2VzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hTSSA9Ci0gICAgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hNTE5TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhTRF9TQ0hFTUFMT0NBVElPTiA9Ci0gICAgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCI7Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllZCBuYW1lcyBvZiBYU0QgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0FOTk9UQVRJT04gPQotICAgIG5ldyBRTmFtZShOU19VUklfWFNELCAiYW5ub3RhdGlvbiIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0lNUE9SVCA9IG5ldyBRTmFtZShOU19VUklfWFNELCAiaW1wb3J0Iik7ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9JTkNMVURFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJpbmNsdWRlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9YU0RfU0NIRU1BID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJzY2hlbWEiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9FTEVNRU5UID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJlbGVtZW50Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9YU0RfQVRUUklCVVRFID0KLSAgICBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImF0dHJpYnV0ZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0NPTVBMRVhUWVBFID0KLSAgICBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImNvbXBsZXhUeXBlIik7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTSV9UWVBFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0ksICJ0eXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0lfTklMID0gbmV3IFFOYW1lKE5TX1VSSV9YU0ksICJuaWwiKTsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX05BTUUgPSBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgIm5hbWUiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9UWVBFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJ0eXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0RfQkFTRSA9IG5ldyBRTmFtZShOU19VUklfWFNELCAiYmFzZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX05BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJuYW1lc3BhY2UiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTiA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJzY2hlbWFMb2NhdGlvbiIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX1RBUkdFVE5BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJ0YXJnZXROYW1lc3BhY2UiKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRyYXZlcnNhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRyYXZlcnNhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjIzM2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxUcmF2ZXJzYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQ29tbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudFR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbnRpdHk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vdGF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0vKioKLSAqIFdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBub2RlIHNvdXJjZSBjb2RlLCBzbyB0aGlzIGRvZXMKLSAqIG91ciBkb3VibGUtZGlzcGF0Y2ggdGhlIGhhcmQgd2F5LgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MVHJhdmVyc2FsIGV4dGVuZHMgWE1MVmlzaXRvcgotewotICAvKioKLSAgICAgKiBSZXR1cm5pbmcgZmFsc2UgZnJvbSBhY3Rpb24gd291bGQgdGVybWluYXRlcyB0cmF2ZXJzYWwuCi0gICAgICogSG93ZXZlciwgdGhpcyBhbHdheXMgcmV0dXJucyB0cnVlLiAtLSBhIG5vLW9wLgotICAgICAqIEBwYXJhbSBuIC0gYW4gWE1MIG5vZGUuCi0gICAgICogQHJldHVybiBhbHdheXMgdHJ1ZS4KLSAgICAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWN0aW9uKE5vZGUgbikKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoQ0RBVEFTZWN0aW9uIHMpCi0gIHsKLSAgICBhY3Rpb24ocyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChEb2N1bWVudCBlKQotICB7Ci0gICAgaWYgKGFjdGlvbihlKSkKLSAgICB7Ci0gICAgICAvLyBUaGlzIGRvZXMgdmlzaXQgRG9jdW1lbnRUeXBlLCB3aGljaCBpcyBjb25zaWRlcmVkIGEgY2hpbGQgTm9kZS4KLSAgICAgIGZvciAoTm9kZSBuID0gZS5nZXRGaXJzdENoaWxkKCk7IG4gIT0gbnVsbDsgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgZG9WaXNpdChuKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChEb2N1bWVudFR5cGUgdHlwZSkKLSAgewotICAgIGlmIChhY3Rpb24odHlwZSkpCi0gICAgewotICAgICAgdmlzaXQodHlwZS5nZXRFbnRpdGllcygpKTsKLSAgICAgIHZpc2l0KHR5cGUuZ2V0Tm90YXRpb25zKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEF0dHIgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgbm9kZSkKLSAgewotICAgIGlmIChhY3Rpb24obm9kZSkpCi0gICAgewotICAgICAgdmlzaXQobm9kZS5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgZm9yIChOb2RlIG4gPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsgbiAhPSBudWxsOyBuID0gbi5nZXROZXh0U2libGluZygpKQotICAgICAgewotICAgICAgICBkb1Zpc2l0KG4pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KENvbW1lbnQgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFRleHQgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVudGl0eVJlZmVyZW5jZSBlKQotICB7Ci0gICAgYWN0aW9uKGUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoRW50aXR5IGUpCi0gIHsKLSAgICBhY3Rpb24oZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChOb3RhdGlvbiBuKQotICB7Ci0gICAgYWN0aW9uKG4pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoUHJvY2Vzc2luZ0luc3RydWN0aW9uIGkpCi0gIHsKLSAgICBhY3Rpb24oaSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChOYW1lZE5vZGVNYXAgbWFwKQotICB7Ci0gICAgaWYgKG1hcCAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwLmdldExlbmd0aCgpOyArK2kpCi0gICAgICB7Ci0gICAgICAgIGRvVmlzaXQobWFwLml0ZW0oaSkpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vLyBFTkQgT0YgRklMRQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYyMjcyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZS5PdXRwdXRGb3JtYXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWwuc2VyaWFsaXplLlhNTFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk51bGxVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogU2V0IG9mIFhNTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgWE1MVXRpbHMKLXsKLQkvKioKLQkgKiBTb21lIHNheCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgc2V0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2UtcHJlZml4ZXMiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfTkFNRVNQQUNFUyA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9WQUxJREFUSU9OX1NDSEVNQSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpBWFBfU0NIRU1BX0xBTkdVQUdFID0gImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFMYW5ndWFnZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVzNDX1hNTF9TQ0hFTUEgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFczQ19TT0FQXzEyX1NDSEVNQSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFYUF9TQ0hFTUFfU09VUkNFID0gImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFTb3VyY2UiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0VYVEVSTkFMX1NDSEVNQV9MT0NBVElPTiA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvcHJvcGVydGllcy9zY2hlbWEvZXh0ZXJuYWwtc2NoZW1hTG9jYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0VOVkVMT1BFID0gIkVudmVsb3BlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fSEVBREVSID0gIkhlYWRlciI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0JPRFkgPSAiQm9keSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0ZBVUxUID0gIkZhdWx0IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fRkFVTFRfQ09ERSA9ICJmYXVsdGNvZGUiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9GQVVMVF9TVFJJTkcgPSAiZmF1bHRzdHJpbmciOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9GQVVMVF9ERVRBSUwgPSAiZGV0YWlsIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fRkFVTFRfQUNUT1IgPSAiZmF1bHRhY3RvciI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BVFRSX01VU1RfVU5ERVJTVEFORCA9ICJtdXN0VW5kZXJzdGFuZCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BVFRSX0FDVE9SID0gImFjdG9yIjsKLQotCS8qKgotCSAqIEdldCBYTUxSZWFkZXIuCi0JICogCi0JICogQHJldHVybiB0aGUgWE1MUmVhZGVyIHZhbHVlCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgYXJlIHByb2JsZW1zIGdldHRpbmcgdGhlIFhNTFJlYWRlcgotCSAqICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhNTFJlYWRlciBnZXRYTUxSZWFkZXIoKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJWE1MUmVhZGVyIHhtbFJlYWRlciA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCXhtbFJlYWRlciA9IChuZXcgb3JnLmFwYWNoZS54ZXJjZXMuamF4cC5TQVhQYXJzZXJGYWN0b3J5SW1wbCgpKQotCQkJCQkubmV3U0FYUGFyc2VyKCkuZ2V0WE1MUmVhZGVyKCk7Ci0KLQkJCS8vIFNldCBuYW1lc3BhY2UgYXdhcmUKLQkJCXhtbFJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTLCB0cnVlKTsKLQkJCXhtbFJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfTkFNRVNQQUNFUywgdHJ1ZSk7Ci0JCX0KLQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgWE1MUmVhZGVyIGltcGxlbWVudGF0aW9uLiIsIGUpOwotCQl9Ci0KLQkJcmV0dXJuIHhtbFJlYWRlcjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0ZXh0IHN0cmluZyBhcyBhbiBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcGFyYW0gdmFsaWRhdGUgdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgd2lsbCBiZSB2YWxpZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQsIGJvb2xlYW4gdmFsaWRhdGUpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHZhbGlkYXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0ZXh0IHN0cmluZyBhcyBhbiBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHVyaSB0aGUgbG9jYXRpb24gb2YgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9mIHNvbWUgc29ydCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50KFN0cmluZyB1cmkpIAotCXRocm93cyBXU0lFeGNlcHRpb24sIElPRXhjZXB0aW9uIAotCXsKLQkJcmV0dXJuIHBhcnNlWE1MRG9jdW1lbnQodXJpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHVyaSB0aGUgbG9jYXRpb24gb2YgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFuIEkvTyBleGNlcHRpb24gb2Ygc29tZSBzb3J0IGhhcyBvY2N1cnJlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIHNjaGVtYSkKLQl0aHJvd3MgV1NJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAKLQl7Ci0JICAgICAgVVJMIHVybCA9IFN0cmluZ1V0aWxzLmdldFVSTChudWxsLCB1cmkpOwotCSAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gKElucHV0U3RyZWFtKXVybC5nZXRDb250ZW50KCk7Ci0JICAgICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoaW5wdXRTdHJlYW0pOwotCSAgICAgIGlucHV0U291cmNlLnNldFN5c3RlbUlkKHVybC50b1N0cmluZygpKTsKLQkgICAgICAKLQkgICAgICBpZiAoc2NoZW1hID09IG51bGwpCi0JICAgICAgCXJldHVybiBwYXJzZVhNTChpbnB1dFNvdXJjZSwgZmFsc2UpOwotCSAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVhNTChpbnB1dFNvdXJjZSwgc2NoZW1hKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsIGEgU3RyaW5nIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIHNjaGVtYSBhIFN0cmluZyBpZGVudGlmeWluZyByZWxhdGVkIHNjaGVtYSBkb2N1bWVudC4KLQkgKiBAcGFyYW0gYmFzZVVSSSBhIGJhc2UgdXJsIHRvIGFzc2lzdCBpbiBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEByZXR1cm4gRG9jdW1lbnQuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnRVUkwoU3RyaW5nIHVybCwgU3RyaW5nIHNjaGVtYSwKLQkJCVN0cmluZyBiYXNlVVJJKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJdHJ5Ci0JCXsKLQkJICBwYXJzZVhNTERvY3VtZW50VVJMKGNyZWF0ZVVSTCh1cmwsIGJhc2VVUkkpLCBzY2hlbWEpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCi0JCXJldHVybiBwYXJzZVhNTERvY3VtZW50VVJMKHVybCwgc2NoZW1hKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsIGEgVVJMIG9iamVjdCBpZGVudGlmeWluZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBEb2N1bWVudC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTChVUkwgdXJsLCBTdHJpbmcgc2NoZW1hKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXRyeQotCQl7Ci0JICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSAoSW5wdXRTdHJlYW0pdXJsLmdldENvbnRlbnQoKTsKLQkgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dFN0cmVhbSk7Ci0JICAgICAgaW5wdXRTb3VyY2Uuc2V0U3lzdGVtSWQodXJsLnRvU3RyaW5nKCkpOwotCi0JCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCi0JCQlpZiAoc2NoZW1hID09IG51bGwpCi0JCQkJZG9jID0gcGFyc2VYTUwoaW5wdXRTb3VyY2UpOwotCQkJZWxzZQotCQkJCWRvYyA9IHBhcnNlWE1MKGlucHV0U291cmNlLCBzY2hlbWEpOwotCi0JCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJcmV0dXJuIGRvYzsKLQkJfQotCi0JCWNhdGNoIChXU0lFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgZTsKLQkJfQotCi0JCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsU3RyaW5nIGEgU3RyaW5nIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTChTdHJpbmcgdXJsU3RyaW5nLCBTdHJpbmcgYmFzZVVSSSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBjcmVhdGVVUkwodXJsU3RyaW5nLCBiYXNlVVJJKTsKLQotCQkJZG9jdW1lbnQgPSBwYXJzZVhNTERvY3VtZW50VVJMKHVybCk7Ci0JCX0KLQotCQljYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotCQl7Ci0JCQl0aHJvdyB3ZTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCX0KLQotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm5zIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBvYmplY3QgaWRlbnRpZnlpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIERvY3VtZW50LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKFVSTCB1cmwpIHRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIodXJsLm9wZW5TdHJlYW0oKSk7Ci0JCQlJbnB1dFNvdXJjZSBzb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLQkJCXNvdXJjZS5zZXRTeXN0ZW1JZCh1cmwudG9TdHJpbmcoKSk7Ci0JCQlkb2N1bWVudCA9IHBhcnNlWE1MKHNvdXJjZSk7Ci0KLQkJCXJlYWRlci5jbG9zZSgpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCi0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IG51bGw7Ci0KLQkvKioKLQkgKiBQYXJzZSBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHJlYWRlciBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0JICogQHBhcmFtIHZhbGlkYXRlIHRydWUgaWYgdGhlIGRvY3VtZW50IHdpbGwgYmUgdmFsaWRhdGUsIGZhbHNlIG90aGVyd2lzZQotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKElucHV0U291cmNlIHNvdXJjZSwgYm9vbGVhbiB2YWxpZGF0ZSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQotICAgIAkgIGlmIChidWlsZGVyID09IG51bGwpCi0gICAgCSAgewotICAJCSAgICAvLyBHZXQgdGhlIGRvY3VtZW50IGZhY3RvcnkKLQkJICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgICAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkgICAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgICAgLy8gQUREOiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBzY2hlbWEKLQkJICAgIC8vIGRvY3VtZW50Ci0JCSAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCi0JCSAgICBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAJICB9Ci0JCSAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShzb3VyY2UpOwotCQkgIC8vIHdvcmthcm91bmQgZm9yIGNvbXBhdGliaWxpdHkgWGVyY2VzIDIuMi4xIHdpdGggWGVyY2VzIDIuNi4yLAotCQkgIC8vIFhlcmNlcyAyLjYuMiBzdXBwb3J0ZWQgWE1MIDEuMSBidXQgV1NJLXRvb2wgYW5kIFhlcmNlcyAyLjIuMQotCQkgIC8vIHN1cHBvcnRlZCBvbmx5IFhNTCAxLjAKLQkJICBpZiAoZG9jIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkKLQkJICB7Ci0JCQlpZiAoKChvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsKSBkb2MpLmdldFhtbFZlcnNpb24oKS5lcXVhbHMoCi0JCQkJCQkiMS4xIikpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiRmF0YWwgRXJyb3I6IFhNTCB2ZXJzaW9uICZxdW90OzEuMSZxdW90OyAiCi0JCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLQkgKiBAcGFyYW0gdmFsaWRhdGUgdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgd2lsbCBiZSB2YWxpZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIHJlYWRlciwgYm9vbGVhbiB2YWxpZGF0ZSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLQkJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQkJCi0JCSAgLy8gQ3JlYXRlIGlucHV0IHNvdXJjZQotCQkgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0KLQkJICBpZiAoYnVpbGRlciA9PSBudWxsKQotCQkgIHsKLQkJICAgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgICAvLyBTZXQgbmFtZXNwYWNlIGF3YXJlLCBidXQgZm9yIG5vdyBkbyBub3QgdmFsaWRhdGUKLQkJICAgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgICAvLyBBREQ6IFRoaXMgc2hvdWxkIGJlIHNldCB0byB0cnVlIHdoZW4gd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNjaGVtYQotCQkgICAgLy8gZG9jdW1lbnQKLQkJICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0KLQkJICAgIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkgIH0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBkb2MgPSBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQkgICAJICAvLyB3b3JrYXJvdW5kIGZvciBjb21wYXRpYmlsaXR5IFhlcmNlcyAyLjIuMSB3aXRoIFhlcmNlcyAyLjYuMiwKLQkJICAvLyBYZXJjZXMgMi42LjIgc3VwcG9ydGVkIFhNTCAxLjEgYnV0IFdTSS10b29sIGFuZCBYZXJjZXMgMi4yLjEKLQkJICAvLyBzdXBwb3J0ZWQgb25seSBYTUwgMS4wCi0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpCi0JCSAgewotCQkJaWYgKCgob3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkgZG9jKS5nZXRYbWxWZXJzaW9uKCkuZXF1YWxzKAotCQkJCQkJIjEuMSIpKQotCQkJewotCQkJICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJGYXRhbCBFcnJvcjogWE1MIHZlcnNpb24gJnF1b3Q7MS4xJnF1b3Q7ICIKLQkJCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCSAgICAgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgaW5wdXQgc291cmNlIGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gc291cmNlIGEgSW5wdXRTb3VyY2Ugb2JqZWN0LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKFJlYWRlciByZWFkZXIpIHRocm93cyBXU0lFeGNlcHRpb24gewotCQlyZXR1cm4gcGFyc2VYTUwocmVhZGVyLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBpbnB1dCBzb3VyY2UgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgb2JqZWN0LgotCSAqIAotCSAqIEBwYXJhbSBzb3VyY2UgYSBJbnB1dFNvdXJjZSBvYmplY3QuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoSW5wdXRTb3VyY2Ugc291cmNlKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKHNvdXJjZSwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRleHQgc3RyaW5nIGFzIGFuIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IFhNTCBkb2N1bWVudCB0ZXh0LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQsIFN0cmluZyBzY2hlbWEpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHNjaGVtYSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGV4dCBzdHJpbmcgYXMgYW4gWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHRleHQgWE1MIGRvY3VtZW50IHRleHQuCi0JICogQHBhcmFtIHNjaGVtYXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50cy4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCwgQ29sbGVjdGlvbiBzY2hlbWFzKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpLCBzY2hlbWFzKTsKLQl9Ci0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcGFyYW0gc2NoZW1hU3RyaW5nIGEgU3RyaW5nUmVhZGVyIG9iamVjdC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9mIHNvbWUgc29ydCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCwgU3RyaW5nUmVhZGVyIHNjaGVtYVN0cmluZykKLQkJCXRocm93cyBXU0lFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHNjaGVtYVN0cmluZyk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGhlIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSByZWFkZXIgYSBSZWFkZXIgb2JqZWN0LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIHJlYWRlciwgU3RyaW5nIHNjaGVtYSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQkJICAvLyBDcmVhdGUgaW5wdXQgc291cmNlCi0JCSAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLQotCQkgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgIHRyeQotCQkgIHsKLQkJICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotIAkJICB9Ci0gICAJCSAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCVN0cmluZyBlcnJNZXNzYWdlID0gIkVycm9yOiBKQVhQIERvY3VtZW50QnVpbGRlckZhY3RvcnkgYXR0cmlidXRlIG5vdCByZWNvZ25pemVkOiAiCi0JCQkJCSsgSkFYUF9TQ0hFTUFfTEFOR1VBR0UKLQkJCQkJKyAiXG4iCi0JCQkJCSsgIkNoZWNrIHRvIHNlZSBpZiBwYXJzZXIgY29uZm9ybXMgdG8gSkFYUCAxLjIgc3BlYy4iOwotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlcnJNZXNzYWdlLCBlKTsKLQkJICB9Ci0JCSAgZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfU09VUkNFLCBuZXcgSW5wdXRTb3VyY2Uoc2NoZW1hKSk7Ci0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCSAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVyckhhbmRsZXIoKSk7Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0KLQkJICAvLyB3b3JrYXJvdW5kIGZvciBjb21wYXRpYmlsaXR5IFhlcmNlcyAyLjIuMSB3aXRoIFhlcmNlcyAyLjYuMiwKLQkJICAvLyBYZXJjZXMgMi42LjIgc3VwcG9ydGVkIFhNTCAxLjEgYnV0IFdTSS10b29sIGFuZCBYZXJjZXMgMi4yLjEKLQkJICAvLyBzdXBwb3J0ZWQgb25seSBYTUwgMS4wCi0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpCi0JCSAgewotCQkJaWYgKCgob3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkgZG9jKS5nZXRYbWxWZXJzaW9uKCkuZXF1YWxzKCIxLjEiKSkKLQkJCXsKLQkJIAkgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkZhdGFsIEVycm9yOiBYTUwgdmVyc2lvbiAmcXVvdDsxLjEmcXVvdDsgIgotCQkJCQkJCSsgImlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgWE1MIDEuMCBpcyBzdXBwb3J0ZWQuIik7Ci0JCQl9Ci0JCSAgfQotCSAgICB9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHBhcnNlIFhNTCBkb2N1bWVudC4iLCBlKTsKLQkJfQotCSAgICBmaW5hbGx5Ci0JICAgIHsgCi0JICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0JICAgIH0gICAgCi0JCS8vIFJldHVybiBkb2N1bWVudAotICAgIAlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKElucHV0U291cmNlIHNvdXJjZSwgU3RyaW5nIHNjaGVtYSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLSAJCSAgLy8gR2V0IHRoZSBkb2N1bWVudCBmYWN0b3J5Ci0JCSAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQkJICB0cnkKLQkJICB7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotCQkgIH0KLQotCQkgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLQkJICB7Ci0JCQlTdHJpbmcgZXJyTWVzc2FnZSA9ICJFcnJvcjogSkFYUCBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGF0dHJpYnV0ZSBub3QgcmVjb2duaXplZDogIgotCQkJCQkrIEpBWFBfU0NIRU1BX0xBTkdVQUdFCi0JCQkJCSsgIlxuIgotCQkJCQkrICJDaGVjayB0byBzZWUgaWYgcGFyc2VyIGNvbmZvcm1zIHRvIEpBWFAgMS4yIHNwZWMuIjsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZXJyTWVzc2FnZSwgZSk7Ci0JCSAgfQotCQkgIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX1NPVVJDRSwgbmV3IElucHV0U291cmNlKHNjaGVtYSkpOwotCi0gICAgICAgICAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkgIGJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBFcnJIYW5kbGVyKCkpOwotCQkgIGRvYyA9IGJ1aWxkZXIucGFyc2Uoc291cmNlKTsKLQotCQkgIC8vIHdvcmthcm91bmQgZm9yIGNvbXBhdGliaWxpdHkgWGVyY2VzIDIuMi4xIHdpdGggWGVyY2VzIDIuNi4yLAotCQkgIC8vIFhlcmNlcyAyLjYuMiBzdXBwb3J0ZWQgWE1MIDEuMSBidXQgV1NJLXRvb2wgYW5kIFhlcmNlcyAyLjIuMQotCQkgIC8vIHN1cHBvcnRlZCBvbmx5IFhNTCAxLjAKLQkJICBpZiAoZG9jIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkKLQkJICB7Ci0JCQlpZiAoKChvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsKSBkb2MpLmdldFhtbFZlcnNpb24oKS5lcXVhbHMoCi0JCQkJCQkiMS4xIikpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiRmF0YWwgRXJyb3I6IFhNTCB2ZXJzaW9uICZxdW90OzEuMSZxdW90OyAiCi0JCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCi0JfQotCi0JLyoqCi0JICogUGFyc2UgdGhlIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZSBhIFJlYWRlciBvYmplY3QuCi0JICogQHBhcmFtIHNjaGVtYVN0cmluZyBhIFN0cmluZ1JlYWRlciBvYmplY3QuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIGZpbGVuYW1lLCBTdHJpbmdSZWFkZXIgc2NoZW1hU3RyaW5nKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0KLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JCXRyeQotCQl7Ci0gICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0KLQkJICAvLyBDcmVhdGUgaW5wdXQgc291cmNlCi0JCSAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoZmlsZW5hbWUpOwotCi0JCSAgLy8gR2V0IHRoZSBkb2N1bWVudCBmYWN0b3J5Ci0JCSAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQkJICB0cnkKLQkJICB7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotCQkgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCVN0cmluZyBlcnJNZXNzYWdlID0gIkVycm9yOiBKQVhQIERvY3VtZW50QnVpbGRlckZhY3RvcnkgYXR0cmlidXRlIG5vdCByZWNvZ25pemVkOiAiCi0JCQkJCSsgSkFYUF9TQ0hFTUFfTEFOR1VBR0UKLQkJCQkJKyAiXG4iCi0JCQkJCSsgIkNoZWNrIHRvIHNlZSBpZiBwYXJzZXIgY29uZm9ybXMgdG8gSkFYUCAxLjIgc3BlYy4iOwotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlcnJNZXNzYWdlLCBlKTsKLQkJICB9Ci0JCSAgZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfU09VUkNFLCBuZXcgSW5wdXRTb3VyY2Uoc2NoZW1hU3RyaW5nKSk7Ci0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCSAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVyckhhbmRsZXIoKSk7Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgWE1MIGRvY3VtZW50LiIsIGUpOwotCQl9Ci0JICAgIGZpbmFsbHkKLQkgICAgeyAKLQkgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLQkgICAgfSAgICAKLQotCQkvLyBSZXR1cm4gZG9jdW1lbnQKLQkJcmV0dXJuIGRvYzsKLQotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUgYSBSZWFkZXIgb2JqZWN0Ci0JICogQHBhcmFtIHNjaGVtYVN0cmluZ3MgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50cy4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChSZWFkZXIgZmlsZW5hbWUsIENvbGxlY3Rpb24gc2NoZW1hU3RyaW5ncykKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCi0JCURvY3VtZW50IGRvYyA9IG51bGw7Ci0JCUNsYXNzTG9hZGVyIGN1cnJlbnRMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOyAgIAotCQl0cnkKLQkJewotICAgIAkgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFhNTFV0aWxzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOyAgIAotCi0JCSAgLy8gQ3JlYXRlIGlucHV0IHNvdXJjZQotCQkgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKGZpbGVuYW1lKTsKLQotCQkgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfTEFOR1VBR0UsIFczQ19YTUxfU0NIRU1BKTsKLQkJICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLQkJICB7Ci0JCSAgICBTdHJpbmcgZXJyTWVzc2FnZSA9ICJFcnJvcjogSkFYUCBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGF0dHJpYnV0ZSBub3QgcmVjb2duaXplZDogIgotCQkJCQkrIEpBWFBfU0NIRU1BX0xBTkdVQUdFCi0JCQkJCSsgIlxuIgotCQkJCQkrICJDaGVjayB0byBzZWUgaWYgcGFyc2VyIGNvbmZvcm1zIHRvIEpBWFAgMS4yIHNwZWMuIjsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZXJyTWVzc2FnZSwgZSk7Ci0JCSAgfQotCQkgIC8vIGNvbnZlcnQgc2NoZW1hIHN0cmluZ3MgdG8gYXJyYXkgb2YgSW5wdXRTb3VyY2VzCi0JCSAgSXRlcmF0b3IgaSA9IHNjaGVtYVN0cmluZ3MuaXRlcmF0b3IoKTsKLQkJICBWZWN0b3IgcmVhZGVycyA9IG5ldyBWZWN0b3IoKTsKLQkJICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCSAgewotCQkJU3RyaW5nIG5leHRTY2hlbWEgPSAoU3RyaW5nKSBpLm5leHQoKTsKLQkJCXJlYWRlcnMuYWRkKG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKG5leHRTY2hlbWEpKSk7Ci0JCSAgfQotCQkgIElucHV0U291cmNlW10gaW5wdXRTb3VyY2VzID0gKElucHV0U291cmNlW10pIHJlYWRlcnMKLQkJCQkudG9BcnJheShuZXcgSW5wdXRTb3VyY2VbXXt9KTsKLQkJICAvLyBwYXNzIGFuIGFycmF5IG9mIHNjaGVtYSBzdHJpbmdzIChlYWNoIG9mIHdoaWNoIGNvbnRhaW5zIGEgc2NoZW1hKQotCQkgIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX1NPVVJDRSwgaW5wdXRTb3VyY2VzKTsKLQotCQkgIC8vIFBhcnNlIHRoZSBkb2N1bWVudAotCQkgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJICBidWlsZGVyLnNldEVycm9ySGFuZGxlcihuZXcgRXJySGFuZGxlcigpKTsKLQkJICBkb2MgPSBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCi0JfQotCi0JLyoqCi0JICogR2V0IGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGRlZmluZWQgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gYXR0ck5hbWUgYSBuYW1lIG9mIGFuIGF0dHJpYnV0ZQotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyTmFtZSkgewotCQlTdHJpbmcgYXR0clZhbHVlID0gbnVsbDsKLQkJQXR0ciBhdHRyID0gbnVsbDsKLQotCQkvLyBHZXQgdGhlIGF0dHJpYnV0ZSB1c2luZyBpdHMgbmFtZQotCQlpZiAoKGF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoYXR0ck5hbWUpKSAhPSBudWxsKQotCQl7Ci0JCQlhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCkudHJpbSgpOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZQotCQlyZXR1cm4gYXR0clZhbHVlOwotCX0KLQotCS8qKgotCSAqIEdldCBhdHRyaWJ1dGUgdmFsdWUuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUKLQkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUuCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlIHZhbHVlIGlmIGZvdW5kLiBPdGhlcndpc2UgdGhlIHNwZWNpZmllZCBkZWZhdWx0Ci0JICogICAgICAgICB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyTmFtZSwKLQkJCVN0cmluZyBkZWZhdWx0VmFsdWUpIHsKLQkJU3RyaW5nIHJldHVyblZhbHVlID0gZGVmYXVsdFZhbHVlOwotCQlTdHJpbmcgYXR0clZhbHVlID0gbnVsbDsKLQotCQlpZiAoKGF0dHJWYWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIGF0dHJOYW1lKSkgIT0gbnVsbCkKLQkJCXJldHVyblZhbHVlID0gYXR0clZhbHVlOwotCi0JCXJldHVybiByZXR1cm5WYWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYXR0cmlidXRlIHZhbHVlLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBuYW1lc3BhY2UgYSBuYW1lc3BhY2UuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUKLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWVOUyhFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lc3BhY2UsCi0JCQlTdHJpbmcgYXR0ck5hbWUpIHsKLQkJU3RyaW5nIGF0dHJWYWx1ZSA9IG51bGw7Ci0JCUF0dHIgYXR0ciA9IG51bGw7Ci0KLQkJLy8gR2V0IHRoZSBhdHRyaWJ1dGUgdXNpbmcgaXRzIG5hbWUKLQkJaWYgKChhdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNwYWNlLCBhdHRyTmFtZSkpICE9IG51bGwpCi0JCXsKLQkJCWF0dHJWYWx1ZSA9IGF0dHIuZ2V0VmFsdWUoKS50cmltKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYXR0cmlidXRlIHZhbHVlCi0JCXJldHVybiBhdHRyVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IGZyb20gdGhlIGlucHV0IGVsbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdGNoaWxkIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGdldEZpcnN0Q2hpbGQoRWxlbWVudCBlbGVtZW50KSB7Ci0JCS8vIFJldHVybiB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudAotCQlyZXR1cm4gZmluZE5leHRTaWJsaW5nKGVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5leHQgc2libGluZyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IC0gYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHJldHVybiB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGdldE5leHRTaWJsaW5nKEVsZW1lbnQgZWxlbWVudCkgewotCQkvLyBSZXR1cm4gbmV4dCBzaWJsaW5nIGVsZW1lbnQKLQkJcmV0dXJuIGZpbmROZXh0U2libGluZyhlbGVtZW50LmdldE5leHRTaWJsaW5nKCkpOwotCX0KLQotCS8qKgotCSAqIEZpbmQgdGhlIG5leHQgc2libGluZyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBzdGFydE5vZGUgWE1MIHN0YXJ0IG5vZGUuCi0JICogQHJldHVybiB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBFbGVtZW50IGZpbmROZXh0U2libGluZyhOb2RlIHN0YXJ0Tm9kZSkgewotCQlOb2RlIG5vZGUgPSBudWxsOwotCQlFbGVtZW50IHJldHVybkVsZW1lbnQgPSBudWxsOwotCi0JCS8vIEZpbmQgdGhlIG5leHQgc2libGluZyBlbGVtZW50Ci0JCWZvciAobm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAhPSBudWxsICYmIHJldHVybkVsZW1lbnQgPT0gbnVsbDsgbm9kZSA9IG5vZGUKLQkJCQkuZ2V0TmV4dFNpYmxpbmcoKSkKLQkJewotCQkJLy8gSWYgdGhpcyBub2RlIGlzIGFuIGVsZW1lbnQgbm9kZSwgdGhlbiByZXR1cm4gaXQKLQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0JCQl7Ci0JCQkJcmV0dXJuRWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotCQkJfQotCQl9Ci0KLQkJLy8gUmV0dXJuIG5leHQgc2libGluZyBlbGVtZW50Ci0JCXJldHVybiAoRWxlbWVudCkgcmV0dXJuRWxlbWVudDsKLQl9Ci0KLQkvKioKLQkgKiBGaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHN0YXJ0Tm9kZSBYTUwgc3RhcnQgbm9kZS4KLQkgKiBAcmV0dXJuIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGZpbmRQcmV2aW91c1NpYmxpbmcoTm9kZSBzdGFydE5vZGUpIHsKLQkJaWYgKHN0YXJ0Tm9kZSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJd2hpbGUgKHN0YXJ0Tm9kZSAhPSBudWxsKQotCQl7Ci0JCQlzdGFydE5vZGUgPSBzdGFydE5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKCk7Ci0JCQlpZiAoc3RhcnROb2RlID09IG51bGwpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpZiAoc3RhcnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0JCQkJcmV0dXJuIChFbGVtZW50KSBzdGFydE5vZGU7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHRleHQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEByZXR1cm4gdGhlIHRleHQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRleHQoRWxlbWVudCBlbGVtZW50KSB7Ci0JCVN0cmluZyB0ZXh0ID0gbnVsbDsKLQotCQkvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotCQlOb2RlIG5vZGUgPSBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkvLyBOb2RlTGlzdCBub2RlTGlzdCA9IGVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCi0JCS8vIGludCBsZW5ndGggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsKLQotCQkvLyBQcm9jZXNzIHdoaWxlIHRoZXJlIGFyZSBub2RlcyBhbmQgdGhlIHRleHQgaGFzbid0IGJlZW4gZm91bmQKLQkJd2hpbGUgKChub2RlICE9IG51bGwpICYmICh0ZXh0ID09IG51bGwpKQotCQl7Ci0JCQkvLyBJZiBhIHRleHQgbm9kZSBvciBjZGF0YSBzZWN0aW9uIGlzIGZvdW5kLCB0aGVuIGdldCB0ZXh0Ci0JCQlpZiAoKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKLQkJCQkJfHwgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERSkpCi0JCQl7Ci0JCQkJdGV4dCA9ICgoQ2hhcmFjdGVyRGF0YSkgbm9kZSkuZ2V0RGF0YSgpOwotCQkJfQotCi0JCQkvLyBHZXQgbmV4dCBzaWJsaW5nCi0JCQlub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQkJaWYgKHRleHQgIT0gbnVsbCkKLQkJCXRleHQgPSB0ZXh0LnRyaW0oKTsKLQotCQlyZXR1cm4gdGV4dDsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSB0aGUgUU5hbWUuCi0JICogCi0JICogQHBhcmFtIHFuYW1lIGEgUU5hbWUgb2JqZWN0LgotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBRTmFtZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKFFOYW1lIHFuYW1lLCBFbGVtZW50IGVsZW1lbnQpIHsKLQkJYm9vbGVhbiBlcXVhbHMgPSBmYWxzZTsKLQotCQkvLyBJZiBib3RoIHRoZSBuYW1lc3BhY2UgVVJJIGFuZCBsb2NhbCBuYW1lIGFyZSB0aGUgc2FtZSwgdGhlbiB0aGV5IGFyZQotCQkvLyBlcXVhbAotCQlpZiAoKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLQkJCQkmJiAocW5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpKSkKLQkJewotCQkJZXF1YWxzID0gdHJ1ZTsKLQkJfQotCi0JCXJldHVybiBlcXVhbHM7Ci0JfQotCi0JLyoqCi0JICogWE1MIGVuY29kZSBhIHRleHQgc3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IC0gYSBTdHJpbmcuCi0JICogQHJldHVybiBhbiBYTUwgZW5jb2RlZCB0ZXh0IHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB4bWxFc2NhcGVkU3RyaW5nKFN0cmluZyB0ZXh0KSAKLQl7Ci0JICBpZiAodGV4dCA9PSBudWxsKSByZXR1cm4gdGV4dDsKLQkgIGVsc2UKLQkgIHsKLQkgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcih0ZXh0Lmxlbmd0aCgpKjIpOwotCSAgICBpbnQgc2l6ZSA9IHRleHQubGVuZ3RoKCk7Ci0JICAgIGZvciAoaW50IGk9MDsgaTxzaXplOyBpKyspCi0JICAgIHsKLQkgICAgICBjaGFyIGMgPSB0ZXh0LmNoYXJBdChpKTsKLQkgICAgICBzd2l0Y2ggKGMpCi0JCSAgewotICAgICAgICAgICAgIGNhc2UgJzwnOiAKLSAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiJmx0OyIpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnPic6IAotICAgICAgICAgICAgIAlzYi5hcHBlbmQoIiZndDsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICcmJzogCi0gICAgICAgICAgICAgCXNiLmFwcGVuZCgiJmFtcDsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICciJzogCi0gICAgICAgICAgICAgCXNiLmFwcGVuZCgiJnF1b3Q7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnXCcnOiAKLSAgICAgICAgICAgICAJc2IuYXBwZW5kKCImYXBvczsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICdccic6IAotICAgICAgICAgICAgIAlzYi5hcHBlbmQoIiYjeGQ7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAJc2IuYXBwZW5kKGMpOwotCQkgIH0KLQkJfQotCSAgICByZXR1cm4gIHNiLnRvU3RyaW5nKCk7Ci0JICB9Ci0JfQotCi0JLyoqCi0JICogWE1MIGVuY29kZSBhIHRleHQgc3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IC0gYSBTdHJpbmcuCi0JICogQHJldHVybiBhbiBYTUwgZW5jb2RlZCB0ZXh0IHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB4bWxSZW1vdmVFc2NhcGVkU3RyaW5nKFN0cmluZyB0ZXh0KSAKLQl7Ci0JICBpZiAodGV4dCA9PSBudWxsKSByZXR1cm4gdGV4dDsKLQkgIGVsc2UKLQkgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcih0ZXh0KTsKLSAgICAgIAotCSAgICBpbnQgaSA9IHNiLmluZGV4T2YoIiYjeGQ7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNSwgIlxyIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiYjeGQ7Iik7Ci0JICAgIH0KLQkgICAgCi0JICAgIGkgPSBzYi5pbmRleE9mKCImbHQ7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNCwgIjwiKTsKLQkgICAgICBpID0gc2IuaW5kZXhPZigiJmx0OyIpOwotCSAgICB9Ci0KLQkgICAgaSA9IHNiLmluZGV4T2YoIiZndDsiKTsKLQkgICAgd2hpbGUoaSAhPSAtMSkKLQkgICAgewotCSAgICAgIHNiLnJlcGxhY2UoaSwgaSs0LCAiPiIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImZ3Q7Iik7Ci0JICAgIH0KLQotCSAgICBpID0gc2IuaW5kZXhPZigiJnF1b3Q7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNiwgIlwiIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiZxdW90OyIpOwotCSAgICB9Ci0KLQkgICAgaSA9IHNiLmluZGV4T2YoIiZhcG9zOyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzYsICJcJyIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImYXBvczsiKTsKLQkgICAgfQotCi0JICAgIGkgPSBzYi5pbmRleE9mKCImYW1wOyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzUsICImIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiZhbXA7Iik7Ci0JICAgIH0KLSAJICAgIHJldHVybiAgc2IudG9TdHJpbmcoKTsKLQkgIH0KLQl9Ci0JLyoqCi0JICogR2V0IHRoZSBzcGVjaWZpZWQgZWxlbWVudCBmcm9tIGEgcGFyZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBlbGVtZW50IHRhZyB0byBzZXJhY2ggZm9yLgotCSAqIEBwYXJhbSBwYXJlbnRFbGVtZW50IHRoZSBwYXJlbnQgZWxlbWVudC4KLQkgKiBAcmV0dXJuIGFuIGVsZW1lbnQgZ2l2ZW4gdGhlIG5hbWUgYW5kIHRoZSBwYXJlbnQgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEVsZW1lbnQgZ2V0RWxlbWVudChTdHJpbmcgZWxlbWVudE5hbWUsIEVsZW1lbnQgcGFyZW50RWxlbWVudCkgewotCQlFbGVtZW50IHJldHVybkVsZW1lbnQgPSBudWxsOwotCQlOb2RlTGlzdCBubDsKLQotCQkvLyBHZXQgdGhlIGxpc3Qgb2YgZWxlbWVudHMKLQkJaWYgKChubCA9IHBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZWxlbWVudE5hbWUpKSAhPSBudWxsKQotCQl7Ci0JCQkvLyBSZXR1cm4gZmlyc3QgZWxlbWVudCBmb3VuZAotCQkJcmV0dXJuRWxlbWVudCA9IChFbGVtZW50KSBubC5pdGVtKDApOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGVsZW1lbnQKLQkJcmV0dXJuIHJldHVybkVsZW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBzcGVjaWZpZWQKLQkgKiBuYW1lc3BhY2UuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIG5hbWVzcGFjZVVSSSBhIG5hbWVzcGFjZS4KLQkgKiBAcGFyYW0gbG9jYWxOYW1lIGEgbG9jYWwgbmFtZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBlbGVtZW50IG1hdGNoZXMgc3BlY2lmaWVkIGxvY2FsIG5hbWUgaW4gdGhlIHNwZWNpZmllZAotCSAqICAgICAgICAgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlVVJJLAotCQkJU3RyaW5nIGxvY2FsTmFtZSkgewotCQlib29sZWFuIGlzRWxlbWVudCA9IGZhbHNlOwotCi0JCWlmIChlbGVtZW50ICE9IG51bGwpCi0JCXsKLQkJCS8vIENoZWNrIGlzCi0JCQlpZiAoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMobmFtZXNwYWNlVVJJKQotCQkJCQkmJiBlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhsb2NhbE5hbWUpKQotCQkJewotCQkJCWlzRWxlbWVudCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gaXNFbGVtZW50OwotCX0KLQotCS8qKgotCSAqIERldGVybWluZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgc3BlY2lmaWVkCi0JICogbmFtZXNwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBuYW1lc3BhY2VVUklzIGEgbGlzdCBvZiB2YWxpZCBuYW1lc3BhY2VzLgotCSAqIEBwYXJhbSBsb2NhbE5hbWUgYSBsb2NhbCBuYW1lLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgc3BlY2lmaWVkCi0JICogICAgICAgICBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRWxlbWVudChFbGVtZW50IGVsZW1lbnQsIExpc3QgbmFtZXNwYWNlVVJJcywKLQkJCVN0cmluZyBsb2NhbE5hbWUpIHsKLQkJYm9vbGVhbiBpc0VsZW1lbnQgPSBmYWxzZTsKLQotCQlpZiAoZWxlbWVudCAhPSBudWxsKQotCQl7Ci0JCQkvLyBDaGVjayBpcwotCQkJaWYgKG5hbWVzcGFjZVVSSXMuY29udGFpbnMoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSkKLQkJCQkJJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobG9jYWxOYW1lKSkKLQkJCXsKLQkJCQlpc0VsZW1lbnQgPSB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGlzRWxlbWVudDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgZWxlbWVudCB0ZXh0IGFzIGEgYm9vbGVhbi4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGEgYm9vbGVhbiB0byBiZSB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KLQkgKiBAcmV0dXJuIGVsZW1lbnQgdGV4dCBhcyBhIGJvb2xlYW4gdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGdldEJvb2xlYW5WYWx1ZShFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7Ci0JCWJvb2xlYW4gcmV0dXJuVmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0JCVN0cmluZyBib29sZWFuVmFsdWUgPSBudWxsOwotCi0JCS8vIEdldCB2YWx1ZSBhcyBhIHN0cmluZwotCQlpZiAoKGJvb2xlYW5WYWx1ZSA9IFhNTFV0aWxzLmdldFRleHQoZWxlbWVudCkpICE9IG51bGwpCi0JCXsKLQkJCXJldHVyblZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKGJvb2xlYW5WYWx1ZSkuYm9vbGVhblZhbHVlKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYm9vbGVhbgotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogR2V0IGF0dHJpYnV0ZSB2YWx1ZSBhcyBhIGJvb2xlYW4uCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUuCi0JICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBhIGJvb2xlYW4gdG8gYmUgdXNlZCBhcyBhIGRlZmF1bHQgdmFsdWUuCi0JICogQHJldHVybiBhdHRyaWJ1dGUgdmFsdWUgYXMgYSBib29sZWFuLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRCb29sZWFuVmFsdWUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0ck5hbWUsCi0JCQlib29sZWFuIGRlZmF1bHRWYWx1ZSkgewotCQlib29sZWFuIHJldHVyblZhbHVlID0gZGVmYXVsdFZhbHVlOwotCQlTdHJpbmcgYm9vbGVhblZhbHVlID0gbnVsbDsKLQotCQkvLyBHZXQgdmFsdWUgYXMgYSBzdHJpbmcKLQkJaWYgKChib29sZWFuVmFsdWUgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBhdHRyTmFtZSkpICE9IG51bGwpCi0JCXsKLQkJCXJldHVyblZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKGJvb2xlYW5WYWx1ZSkuYm9vbGVhblZhbHVlKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYm9vbGVhbgotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIFFOYW1lLgotCSAqIAotCSAqIEBwYXJhbSBxbmFtZVN0cmluZyBhIHF1YWxpZmllZCBuYW1lLgotCSAqIEByZXR1cm4gYSBRTmFtZSBvYmplY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBRTmFtZSBjcmVhdGVRTmFtZShTdHJpbmcgcW5hbWVTdHJpbmcpIHsKLQkJUU5hbWUgcW5hbWUgPSBudWxsOwotCi0JCS8vIExvY2F0ZSBsb2NhbCBwYXJ0Ci0JCWludCBpbmRleCA9IHFuYW1lU3RyaW5nLmxhc3RJbmRleE9mKCI6Iik7Ci0KLQkJLy8gQ3JlYXRlIG5ldyBRTmFtZQotCQlpZiAoaW5kZXggIT0gLTEpCi0JCXsKLQkJCXFuYW1lID0gbmV3IFFOYW1lKHFuYW1lU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCksIHFuYW1lU3RyaW5nCi0JCQkJCS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0JCX0KLQotCQllbHNlCi0JCXsKLQkJCXFuYW1lID0gbmV3IFFOYW1lKHFuYW1lU3RyaW5nKTsKLQkJfQotCi0JCXJldHVybiBxbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBFcnJvciBIYW5kbGVyCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRXJySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlcgotCXsKLQkJLyoqCi0JCSAqIFdhcm5pbmcKLQkJICovCi0JCXB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIldhcm5pbmc6ICIgKyBzcGUuZ2V0TWVzc2FnZSgpOwotCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihtZXNzYWdlKTsKLQkJfQotCi0JCS8qKgotCQkgKiBFcnJvcgotCQkgKi8KLQkJcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIkVycm9yOiAiICsgc3BlLmdldE1lc3NhZ2UoKTsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24obWVzc2FnZSk7Ci0JCX0KLQotCQkvKioKLQkJICogRmF0YWwgRXJyb3IKLQkJICovCi0JCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIkZhdGFsIEVycm9yOiAiICsgc3BlLmdldE1lc3NhZ2UoKTsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24obWVzc2FnZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgdGhlIHN0cmluZyBpcyBhIE5NVE9LRU4gZGF0YSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IGEgc3RyaW5nIHZhbHVlLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgTk1UT0tFTiBkYXRhIHR5cGUuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm10b2tlbihTdHJpbmcgdGV4dCkgewotCQlib29sZWFuIG5tdG9rZW4gPSB0cnVlOwotCi0JCS8vIEFERDogTmVlZCB0byBmaW5kIGEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhpcyBvciB3cml0ZSBpdCBmcm9tCi0JCS8vIHNjcmF0Y2gKLQotCQlyZXR1cm4gbm10b2tlbjsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIHRoZSBmaXJzdCBkaXJlY3QgZGVzY2VuZGFudCBlbGVtZW50IHdpdGggdGhlIGdpdmVuCi0JICogcW5hbWUuCi0JICogCi0JICogQHBhcmFtIHBhcmVudCBwYXJlbnQgRE9NIGVsZW1lbnQuCi0JICogQHBhcmFtIGVsZW1lbnROYW1lIFFOYW1lIG9mIHRoZSBlbGVtZW50IHRvIGJlIHNlYXJjaGVkLgotCSAqIEByZXR1cm4gRE9NIGVsZW1lbnQgaWYgdGhlIHJlcXVpcmVkIGVsZW1lbnQgZm91bmQsIGFuZCBudWxsIG90aGVyd2lzZS4KLQkgKi8KLQlzdGF0aWMgcHVibGljIEVsZW1lbnQgZmluZENoaWxkRWxlbWVudChFbGVtZW50IHBhcmVudCwgUU5hbWUgZWxlbWVudE5hbWUpIHsKLQkJaWYgKHBhcmVudCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGFyZW50IGVsZW1lbnQgY2FuIG5vdCBiZSBOVUxMIik7Ci0JCWlmIChlbGVtZW50TmFtZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlpZiAoZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCkgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0JCQkJCSJMb2NhbCBwYXJ0IG9mIHRoZSBlbGVtZW50IG5hbWUgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLQkJTm9kZSBuID0gcGFyZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJU3RyaW5nIGxvY2FsID0gZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0JCVN0cmluZyBucyA9IGVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCQl3aGlsZSAobiAhPSBudWxsKQotCQl7Ci0JCQlpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0JCQkJCSYmIGxvY2FsLmVxdWFscyhuLmdldExvY2FsTmFtZSgpKQotCQkJCQkmJiBOdWxsVXRpbC5lcXVhbHMobnMsIG4uZ2V0TmFtZXNwYWNlVVJJKCkpKQotCQkJCXJldHVybiAoRWxlbWVudCkgbjsKLQkJCW4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIHRoZSBmaXJzdCBzaWJsaW5nIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gcW5hbWUuCi0JICogCi0JICogQHBhcmFtIGFjdGl2ZSBET00gZWxlbWVudC4KLQkgKiBAcGFyYW0gZWxlbWVudE5hbWUgUU5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gYmUgc2VhcmNoZWQuCi0JICogQHJldHVybiBET00gZWxlbWVudCBpZiB0aGUgcmVxdWlyZWQgZWxlbWVudCBmb3VuZCwgYW5kIG51bGwgb3RoZXJ3aXNlLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgRWxlbWVudCBmaW5kRWxlbWVudChFbGVtZW50IGFjdGl2ZSwgUU5hbWUgZWxlbWVudE5hbWUpIHsKLQkJaWYgKGFjdGl2ZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWN0aXZlIGVsZW1lbnQgY2FuIG5vdCBiZSBOVUxMIik7Ci0JCWlmIChlbGVtZW50TmFtZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlpZiAoZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCkgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0JCQkJCSJMb2NhbCBwYXJ0IG9mIHRoZSBlbGVtZW50IG5hbWUgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLQkJTm9kZSBuID0gYWN0aXZlLmdldE5leHRTaWJsaW5nKCk7Ci0JCVN0cmluZyBsb2NhbCA9IGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpOwotCQlTdHJpbmcgbnMgPSBlbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJd2hpbGUgKG4gIT0gbnVsbCkKLQkJewotCQkJaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKQotCQkJCQkmJiBsb2NhbC5lcXVhbHMobi5nZXRMb2NhbE5hbWUoKSkKLQkJCQkJJiYgTnVsbFV0aWwuZXF1YWxzKG5zLCBuLmdldE5hbWVzcGFjZVVSSSgpKSkKLQkJCQlyZXR1cm4gKEVsZW1lbnQpIG47Ci0JCQluID0gbi5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVGhlIG1ldGhvZCByZXR1cm5zIGF0dHJpYnV0ZSBub2RlIGJ5IHRoZSBnaXZlbiBxbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gZWwgb3duZXIgZWxlbWVudC4KLQkgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBRTmFtZSBvZiB0aGUgYXR0cmlidXRlIG5vZGUgdG8gYmUgc2VhcmNoZWQuCi0JICogQHJldHVybiBhdHRyaWJ1dGUgbm9kZSBieSB0aGUgZ2l2ZW4gcW5hbWUuCi0JICovCi0Jc3RhdGljIHB1YmxpYyBBdHRyIGdldEF0dHJpYnV0ZShFbGVtZW50IGVsLCBRTmFtZSBhdHRyaWJ1dGVOYW1lKSB7Ci0JCWlmIChlbCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjYW4gbm90IGJlIE5VTEwiKTsKLQkJaWYgKGF0dHJpYnV0ZU5hbWUgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkF0dHJpYnV0ZSBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlTdHJpbmcgbnNVUkkgPSBhdHRyaWJ1dGVOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCQlTdHJpbmcgbG9jYWxQYXJ0ID0gYXR0cmlidXRlTmFtZS5nZXRMb2NhbFBhcnQoKTsKLQkJaWYgKGxvY2FsUGFydCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLQkJCQkJIkxvY2FsIHBhcnQgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCi0JCUF0dHIgYSA9IGVsLmdldEF0dHJpYnV0ZU5vZGVOUyhuc1VSSSwKLQkJCQlsb2NhbFBhcnQpOwotCQlpZiAoYSA9PSBudWxsKQotCQkJLy8gdHJ5IHRvIGdldCB3aXRoIG51bGwgbmFtZXNwYWNlCi0JCQlhID0gZWwuZ2V0QXR0cmlidXRlTm9kZU5TKG51bGwsIGxvY2FsUGFydCk7Ci0JCXJldHVybiBhOwotCX0KLQotCS8qKgotCSAqIFRoZSBtZXRob2QgY29tcGFyZXMgbm9kZSdzIG5hbWUgdG8gdGhlIGdpdmVuIHFuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBuIGEgbm9kZS4KLQkgKiBAcGFyYW0gbmFtZSBhIFFOYW1lIG9iamVjdC4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5vZGUncyBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBnaXZlbiBxbmFtZS4KLQkgKi8KLQlzdGF0aWMgcHVibGljIGJvb2xlYW4gZXF1YWxzKE5vZGUgbiwgUU5hbWUgbmFtZSkgewotCQlpZiAobiA9PSBudWxsIHx8IG5hbWUgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIChOdWxsVXRpbC5lcXVhbHMobmFtZS5nZXRMb2NhbFBhcnQoKSwgbi5nZXRMb2NhbE5hbWUoKSkgJiYgTnVsbFV0aWwKLQkJCQkuZXF1YWxzKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIG4uZ2V0TmFtZXNwYWNlVVJJKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIG5hbWVzcGFjZSBVUkkgZm9yIHRoZSBnaXZlbiBwcmVmaXguIFRoZSBzZWFyY2hpbmcKLQkgKiBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSAiWE1MIE5hbWVzcGFjZXMgcmVzb2x1dGlvbiIKLQkgKiBhbGdvcml0aG0gKCdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLQotCSAqIENvcmUtMjAwMzAyMjYvbmFtZXNwYWNlcy1hbGdvcml0aG1zLmh0bWwnKS4KLQkgKiAKLQkgKiBAcGFyYW0gbiBhIG5vZGUuCi0JICogQHBhcmFtIHByZWZpeCBhIHByZWZpeC4KLQkgKiBAcmV0dXJuIHRoZSBuYW1lc3BhY2UgVVJJIGZvciB0aGUgZ2l2ZW4gcHJlZml4LgotCSAqLwotCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGZpbmROYW1lc3BhY2VVUkkoTm9kZSBuLCBTdHJpbmcgcHJlZml4KSB7Ci0JCWlmIChwcmVmaXggPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXdoaWxlIChuICE9IG51bGwpCi0JCXsKLQkJCWlmIChwcmVmaXguZXF1YWxzKG4uZ2V0UHJlZml4KCkpKQotCQkJCXJldHVybiBuLmdldE5hbWVzcGFjZVVSSSgpOwotCi0JCQlpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotCQkJewotCQkJCU5hbWVkTm9kZU1hcCBtID0gbi5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQkJaWYgKG0gIT0gbnVsbCkKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtLmdldExlbmd0aCgpOyBpKyspCi0JCQkJCXsKLQkJCQkJCU5vZGUgYSA9IG0uaXRlbShpKTsKLQkJCQkJCWlmIChXU0lUYWcuTlNfVVJJX1hNTE5TLmVxdWFscyhhLmdldE5hbWVzcGFjZVVSSSgpKQotCQkJCQkJCQkmJiBwcmVmaXguZXF1YWxzKGEuZ2V0TG9jYWxOYW1lKCkpKQotCQkJCQkJCXJldHVybiBhLmdldE5vZGVWYWx1ZSgpOwotCQkJCQl9Ci0JCQl9Ci0KLQkJCW4gPSBuLmdldFBhcmVudE5vZGUoKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFNlcmlhbGl6ZXMgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gbiBhIERPTSBlbGVtZW50LgotCSAqIEByZXR1cm4gdGhlIHNlcmlhbGl6ZWQgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBzZXJpYWxpemUoRWxlbWVudCBuKSB7Ci0JCVN0cmluZyB2YWx1ZSA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmdXcml0ZXIgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJWE1MU2VyaWFsaXplciBzID0gbmV3IFhNTFNlcmlhbGl6ZXIod3JpdGVyLCBuZXcgT3V0cHV0Rm9ybWF0KCJ4bWwiLAotCQkJCQkiVVRGLTgiLCB0cnVlKSk7Ci0JCQlzLnNlcmlhbGl6ZShuKTsKLQkJCXZhbHVlID0gd3JpdGVyLnRvU3RyaW5nKCk7Ci0JCQl3cml0ZXIuY2xvc2UoKTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpCi0JCXsKLQkJCS8vIG5vdGhpbmcKLQkJCXZhbHVlID0gIkVYQ0VQVElPTiA6ICIgKyB0LmdldE1lc3NhZ2UoKTsKLQkJfQotCi0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHJldHVybiBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnQgYW4gb3JnLnczYy5kb20uRWxlbWVudCBvYmplY3QuCi0JICogQHJldHVybiBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgVmVjdG9yIGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQpIHsKLQkJaWYgKHBhcmVudCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjYW4gbm90IGJlIE5VTEwiKTsKLQotCQlWZWN0b3IgdmVjdCA9IG5ldyBWZWN0b3IoKTsKLQkJRWxlbWVudCBlbGVtID0gZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotCQl3aGlsZSAoZWxlbSAhPSBudWxsKQotCQl7Ci0JCQl2ZWN0LmFkZChlbGVtKTsKLQkJCWVsZW0gPSBnZXROZXh0U2libGluZyhlbGVtKTsKLQkJfQotCQlyZXR1cm4gdmVjdDsKLQl9Ci0KLQkvKioKLQkgKiBTZXJpYWxpemVzIGRvY3VtZW50LgotCSAqIAotCSAqIEBwYXJhbSBkb2MgYW4gb3JnLnczYy5kb20uRG9jdW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSB3cml0ZXIgYSBqYXZhLmlvLldyaXRlciBvYmplY3QuCi0JICogQHRocm93cyBFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHNlcmlhbGl6ZSB0aGUgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZURvYyhEb2N1bWVudCBkb2MsIFdyaXRlciB3cml0ZXIpCi0JCQl0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7Ci0JCVhNTFNlcmlhbGl6ZXIgcyA9IG5ldyBYTUxTZXJpYWxpemVyKHdyaXRlciwgbmV3IE91dHB1dEZvcm1hdCgieG1sIiwKLQkJCQkiVVRGLTgiLCB0cnVlKSk7Ci0JCXMuc2VyaWFsaXplKGRvYyk7Ci0JfQotCi0JLyoqCi0JICogU2VyZWFsaXplcyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtIGFuIG9yZy53M2MuZG9tLkVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSB3cml0ZXIgYSBqYXZhLmlvLldyaXRlciBvYmplY3QuCi0JICogQHRocm93cyBFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHNlcmlhbGl6ZSB0aGUgRE9NIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUVsZW1lbnQoRWxlbWVudCBlbGVtLCBXcml0ZXIgd3JpdGVyKQotCQkJdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewotCQlYTUxTZXJpYWxpemVyIHMgPSBuZXcgWE1MU2VyaWFsaXplcih3cml0ZXIsIG5ldyBPdXRwdXRGb3JtYXQoInhtbCIsCi0JCQkJIlVURi04IiwgdHJ1ZSkpOwotCQlzLnNlcmlhbGl6ZShlbGVtKTsKLQl9Ci0KLQkvKioKLQkgKiBSZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gbGlzdCB3aXRob3V0IG5hbWVzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gdmVjdCBhIGxpc3Qgb2YgZWxlbWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUFsbEVsZW1lbnRzV2l0aG91dE5TKFZlY3RvciB2ZWN0KSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdmVjdC5zaXplKCk7KQotCQl7Ci0JCQlpZiAoKChFbGVtZW50KSB2ZWN0LmdldChpKSkuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbAotCQkJCQl8fCAoKEVsZW1lbnQpIHZlY3QuZ2V0KGkpKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoIiIpKQotCQkJCXZlY3QucmVtb3ZlKGkpOwotCQkJZWxzZQotCQkJCWkrKzsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBVUkwgdXNpbmcgYmFzZSBVUkkuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBzdHJpbmcuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCBzdHJpbmcgdG8gYXNzaXN0IGluIGNyZWF0aW5nIGEgVVJMLgotCSAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBVUkwuCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gaWYgYSBtYWxmb3JtZWQgVVJMIGhhcyBvY2N1cnJlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVSTCBjcmVhdGVVUkwoU3RyaW5nIHVybCwgU3RyaW5nIGJhc2VVUkkpCi0JCQl0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIHsKLQkJVVJMIHJldHVyblVSTCA9IG51bGw7Ci0JCVVSSSB1cmkgPSBudWxsOwotCQl0cnkKLQkJewotICAgICAgICAgICAgcmV0dXJuVVJMID0gbmV3IFVSTCh1cmwpOwotCQkJdXJpID0gbmV3IFVSSSh1cmwpOwotCQkJdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkJcmV0dXJuVVJMID0gIG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBtdWUpCi0JCXsKLQkJCWludCBpID0gYmFzZVVSSS5sYXN0SW5kZXhPZignLycpOwotCQkJaW50IGogPSBiYXNlVVJJLmxhc3RJbmRleE9mKCdcXCcpOwotCQkJaWYgKGogPiBpKQotCQkJCWkgPSBqOwotCQkJdHJ5Ci0JCQl7Ci0JCQkgIHVyaSA9IG5ldyBVUkkoYmFzZVVSSS5zdWJzdHJpbmcoMCwgaSArIDEpICsgdXJsKTsKLQkJCSAgdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkJICByZXR1cm5VUkwgPSB1cmkudG9VUkwoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJCXsKLQkJCSAgcmV0dXJuIG5ldyBVUkwoYmFzZVVSSS5zdWJzdHJpbmcoMCwgaSArIDEpICsgdXJsKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmV0dXJuVVJMOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBVUkwgdXNpbmcgYmFzZSBVUkkuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBzdHJpbmcuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCBzdHJpbmcgdG8gYXNzaXN0IGluIGNyZWF0aW5nIGEgVVJMLgotCSAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBVUkwgc3RyaW5nLgotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGlmIGEgbWFsZm9ybWVkIFVSTCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlVVJMU3RyaW5nKFN0cmluZyB1cmwsIFN0cmluZyBiYXNlVVJJKQotCQkJdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBjcmVhdGVVUkwodXJsLCBiYXNlVVJJKS50b0V4dGVybmFsRm9ybSgpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgb25seSBmb3IgdW5pdCB0ZXN0aW5nLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzIGFyZ3VtZW50cyBmb3IgbWFpbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCXRyeQotCQl7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJGaWxlbmFtZTogIiArIGFyZ3NbMF0gKyAiLCBzY2hlbWE6ICIgKyBhcmdzWzFdKTsKLQkJICBwYXJzZVhNTERvY3VtZW50KGFyZ3NbMF0sIGFyZ3NbMV0pOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZS4iKTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJU3lzdGVtLmVyci5wcmludGxuKGUudG9TdHJpbmcoKSk7Ci0JCX0KLQotCQlTeXN0ZW0uZXhpdCgwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM5ZWEzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Db21tZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50VHlwZTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVudGl0eTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbnRpdHlSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vdGF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0vKioKLSAqIFdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBub2RlIHNvdXJjZSBjb2RlLCBzbyB0aGlzIGRvZXMKLSAqIG91ciBkb3VibGUtZGlzcGF0Y2ggdGhlIGhhcmQgd2F5LgotICovCi1wdWJsaWMgY2xhc3MgWE1MVmlzaXRvcgotewotICAvKioKLSAgKiBWaXNpdCBYTUwgQ0RBVEFTZWN0aW9uIG5vZGUuCi0gICogQHBhcmFtIHMgIGFuIFhNTCBDREFUQVNlY3Rpb24gbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQ0RBVEFTZWN0aW9uIHMpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBEb2N1bWVudCBub2RlLgotICAqIEBwYXJhbSBlICBhbiBYTUwgRG9jdW1lbnQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRG9jdW1lbnQgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogVmlzaXQgWE1MIERvY3VtZW50VHlwZSBub2RlLgotICAqIEBwYXJhbSBlICBhbiBNTCBEb2N1bWVudFR5cGUgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRG9jdW1lbnRUeXBlIGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBBdHRyaWJ1dGUgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIEF0cnJpYnV0ZSBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChBdHRyIGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBFbGVtZW50IG5vZGUuCi0gICogQHBhcmFtIGUgIGFuIFhNTCBFbGVtZW50IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogVmlzaXQgWE1MIENvbW1lbnQgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIENvbW1lbnQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQ29tbWVudCBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIFRleHQgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIFRleHQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoVGV4dCBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIEVudGl0eVJlZmVyZW5jZSBub2RlLiAKLSAgKiBAcGFyYW0gZSAgYW4gWE1MIEVudGl0eVJlZmVyZW5jZSBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChFbnRpdHlSZWZlcmVuY2UgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBFbnRpdHkgbm9kZS4gCi0gICogQHBhcmFtIGUgIGFuIFhNTCBFbnRpdHkgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRW50aXR5IGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBWaXNpdCBYTUwgTm90YXRpb24gbm9kZS4gCi0gICogQHBhcmFtIG4gIGFuIFhNTCBOb3RhdGlvbiBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChOb3RhdGlvbiBuKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBub2RlLiAKLSAgKiBAcGFyYW0gaSAgYW4gWE1MIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gaSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBOYW1lZE5vZGVNYXAgbm9kZS4gCi0gICogQHBhcmFtIGkgIGFuIFhNTCBOYW1lZE5vZGVNYXAgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTmFtZWROb2RlTWFwIGkpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBWaXNpdCBYTUwgbm9kZS4gCi0gICogQHBhcmFtIG5vZGUgIGFuIFhNTCBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCBkb1Zpc2l0KE9iamVjdCBub2RlKQotICB7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgIHsKLSAgICAgIHZpc2l0KChFbGVtZW50KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENvbW1lbnQpCi0gICAgewotICAgICAgdmlzaXQoKENvbW1lbnQpIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQ0RBVEFTZWN0aW9uKQotICAgIHsKLSAgICAgIC8vIENEQVRBU2VjdGlvbiBleHRlbmRzIFRleHQsIHNvIGl0IG11c3QgY29tZSBmaXJzdAotICAgICAgdmlzaXQoKENEQVRBU2VjdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXh0KQotICAgIHsKLSAgICAgIHZpc2l0KChUZXh0KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0gICAgewotICAgICAgdmlzaXQoKEF0dHIpIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQpCi0gICAgewotICAgICAgdmlzaXQoKERvY3VtZW50KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEVudGl0eVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRW50aXR5UmVmZXJlbmNlKSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEVudGl0eSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRW50aXR5KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIERvY3VtZW50VHlwZSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRG9jdW1lbnRUeXBlKSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIE5vdGF0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0KChOb3RhdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCi0gICAgewotICAgICAgdmlzaXQoKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApCi0gICAgewotICAgICAgdmlzaXQoKE5hbWVkTm9kZU1hcCkgbm9kZSk7Ci0gICAgfQotICB9Ci19Ci0KLS8vIEVORCBPRiBGSUxFCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0RPTVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9ET01QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVlMDM2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0RPTVBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb207Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxMb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHNwZWNpYWxpemVzIG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgRE9NUGFyc2VyIGV4dGVuZHMgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXIKLXsKLSAgLyoqCi0gICAqIExvY2F0b3IuCi0gICAqLwotICBYTUxMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MRG9jdW1lbnRIYW5kbGVyI3N0YXJ0RG9jdW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTExvY2F0b3IsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5OYW1lc3BhY2VDb250ZXh0LCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9ucykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoCi0gICAgWE1MTG9jYXRvciBsb2NhdG9yLAotICAgIFN0cmluZyBlbmNvZGluZywKLSAgICBOYW1lc3BhY2VDb250ZXh0IGNvbnRleHQsCi0gICAgQXVnbWVudGF0aW9ucyBhdWdzKQotICAgIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIHRoaXMubG9jYXRvciA9IGxvY2F0b3I7Ci0gICAgc3VwZXIuc3RhcnREb2N1bWVudChsb2NhdG9yLCBlbmNvZGluZywgY29udGV4dCwgYXVncyk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTERvY3VtZW50SGFuZGxlciNzdGFydEVsZW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MQXR0cmlidXRlcywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnMpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoCi0gICAgUU5hbWUgcW5hbWUsCi0gICAgWE1MQXR0cmlidXRlcyBhdHRyaWJ1dGVzLAotICAgIEF1Z21lbnRhdGlvbnMgYXVncykKLSAgICB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQ7Ci0gICAgRWxlbWVudEltcGwgZWxlbWVudEltcGw7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiMS1saW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLQotICAgIHN1cGVyLnN0YXJ0RWxlbWVudChxbmFtZSwgYXR0cmlidXRlcywgYXVncyk7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiMi1saW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsgICAgCi0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBlbGVtZW50ID0gKEVsZW1lbnQpIGdldFByb3BlcnR5KENVUlJFTlRfRUxFTUVOVF9OT0RFKTsKLQotICAgICAgZWxlbWVudEltcGwgPSAoRWxlbWVudEltcGwpIGVsZW1lbnQ7Ci0gICAgICAvLyBTZXR0aW5nIHRoZSB1c2VyIGRhdGEgd2l0aCBhbiBpZGVudGlmaWVyIHN1Y2ggYXMgRWxlbWVudExvY2F0aW9uLktFWV9OQU1FCi0gICAgICAvLyBtYXkgYmUgYSBsb25nIHRlcm0gZ29vZCBpZGVhLiBUaGUgc2V0VXNlckRhdGEgbWV0aG9kIHdpdGggbm8gaWQgaXMgdXNlZCAKLSAgICAgIC8vIHRvIHN1cHBvcnQgSlZNcyB3aXRoIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiBYZXJjZXMuCi0gICAgICBlbGVtZW50SW1wbC5zZXRVc2VyRGF0YShuZXcgRWxlbWVudExvY2F0aW9uKGxvY2F0b3IuZ2V0TGluZU51bWJlcigpLCBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKSk7Ci0gICAgfQotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBzbnNlKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oc25zZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gc25yZSkKLSAgICB7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0VsZW1lbnRMb2NhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9FbGVtZW50TG9jYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5MDUzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0VsZW1lbnRMb2NhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy54bWwuc2F4LkxvY2F0b3I7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGEgbm9kZSB3aXRoaW4gYW4gWE1MIGRvY3VtZW50LgotICogIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVsZW1lbnRMb2NhdGlvbgotewotICAvKioKLSAgICogTGluZSBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfTkFNRSA9IEVsZW1lbnRMb2NhdGlvbi5jbGFzcy5nZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIExpbmUgbnVtYmVyLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBsaW5lTnVtYmVyID0gMDsKLQotICAvKioKLSAgICogQ29sdW1uIG51bWJlci4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgY29sdW1uTnVtYmVyID0gMDsKLQotICAvKioKLSAgICogRWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgICAgYSBsaW5lIG51bWJlci4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciAgYSBjb2x1bW4gbnVtYmVyLgotICAgKi8KLSAgcHVibGljIEVsZW1lbnRMb2NhdGlvbihpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKLSAgewotICAgIHRoaXMubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogRWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvY2F0b3IgIGEgTG9jYXRvciBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uKExvY2F0b3IgbG9jYXRvcikKLSAgewotICAgIHRoaXMubGluZU51bWJlciA9IGxvY2F0b3IuZ2V0TGluZU51bWJlcigpOwotICAgIHRoaXMuY29sdW1uTnVtYmVyID0gbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGxpbmUgbnVtYmVyLgotICAgKiBAcmV0dXJuIGFuIGludCByZXByZXNlbnRpbmcgdGhlIGxpbmUgbnVtYmVyIHZhbHVlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLSAgewotICAgIHJldHVybiB0aGlzLmxpbmVOdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBjb2x1bW4gbnVtYmVyLgotICAgKiBAcmV0dXJuIGFuIGludCByZXByZXNlbnRpbmcgdGhlIGNvbHVtbiBudW1iZXIgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jb2x1bW5OdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuICJFbGVtZW50IExvY2F0aW9uOlxuIgotICAgICAgKyAiICAiCi0gICAgICArIFdTSUNvbnN0YW50cy5BVFRSX0xJTkVfTlVNQkVSCi0gICAgICArICI9IgotICAgICAgKyB0aGlzLmxpbmVOdW1iZXIKLSAgICAgICsgIlxuIjsKLSAgICAvLysgIiAgIiArIFdTSUNvbnN0YW50cy5BVFRSX0NPTFVNTl9OVU1CRVIgKyAiPSIgKyB0aGlzLmNvbHVtbk51bWJlciArICJcbiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmVjNWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBkZWZpbmVzIGEgZmFjdG9yeSBBUEkgdGhhdCBlbmFibGVzIHVzIHRvIG9idGFpbiBhIHBhcnNlciB0aGF0Ci0gKiBwcm9kdWNlcyBET00gb2JqZWN0IHRyZWVzIGZyb20gWE1MIGRvY3VtZW50cy4gTm90ZSB0aGlzIGNsYXNzIHNwZWNpYWxpemVzIAotICogamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS4KLSAqIAotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCBleHRlbmRzIERvY3VtZW50QnVpbGRlckZhY3RvcnkKLXsKLQotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGF0dHJpYnV0ZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBEb2N1bWVudEJ1aWxkZXIgdXNpbmcgdGhlIGN1cnJlbnRseSAKLSAgICogY29uZmlndXJlZCBwYXJhbWV0ZXJzLgotICAgKiAKLSAgICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50QnVpbGRlci4gCi0gICAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBpZiBhIERvY3VtZW50QnVpbGRlciBjYW5ub3QKLSAgICogICAgICAgICBiZSBjcmVhdGVkIHdoaWNoIHNhdGlzZmllcyB0aGUgY29uZmlndXJhdGlvbiByZXF1ZXN0ZWQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRCdWlsZGVyIG5ld0RvY3VtZW50QnVpbGRlcigpCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50QnVpbGRlciBkb2N1bWVudEJ1aWxkZXIgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZG9jdW1lbnRCdWlsZGVyID0gbmV3IERvY3VtZW50QnVpbGRlckltcGwodGhpcywgYXR0cmlidXRlcyk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG9jdW1lbnRCdWlsZGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsbG93cyB0aGUgdXNlciB0byByZXRyaWV2ZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIAotICAgKiBpbXBsZW1lbnRhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lICB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLiAKLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gCi0gICAqICAgICAgICAgZG9lc24ndCByZWNvZ25pemUgdGhlIGF0dHJpYnV0ZS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKFN0cmluZyBuYW1lKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gYXR0cmlidXRlcy5nZXQobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3dzIHRoZSB1c2VyIHRvIHNldCBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIAotICAgKiBpbXBsZW1lbnRhdGlvbi4gCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZSAgIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIAotICAgKiAgICAgICAgIGRvZXNuJ3QgcmVjb2duaXplIHRoZSBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkKLSAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICBhdHRyaWJ1dGVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEZlYXR1cmUoU3RyaW5nIGFyZzAsIGJvb2xlYW4gYXJnMSkgCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgewotICAgIC8vIGN1cnJlbnRseSB3ZSBkbyBub3Qgc3VwcG9ydCBzZXR0aW5nIGFueSBmZWF0dXJlCi0JLy8gYXMgcGVyIHNwZWMsIHdlIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24KLQl0aHJvdyBuZXcgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihhcmcwICsgIiBOb3Qgc3VwcG9ydGVkIik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRGZWF0dXJlKFN0cmluZyBhcmcwKSAKLSAgICB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0JLy8gYXMgcGVyIHNwZWMsIHdlIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24KLQl0aHJvdyBuZXcgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihhcmcwICsgIiBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1OGRkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRE9NSW1wbGVtZW50YXRpb25JbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5ET01QYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NSW1wbGVtZW50YXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIFVzaW5nIHRoaXMgY2xhc3MsIHdlIGNhbiBvYnRhaW4gYSBEb2N1bWVudCBmcm9tIFhNTC4gVGhpcyBjbGFzcyBpcyBhIAotICogc3BlY2lhbGl6YXRpb24gb2YgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyLgotICogCi0gKiBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSAKLSAqIERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyIG1ldGhvZC4gT25jZSBhbiBpbnN0YW5jZSAKLSAqIG9mIHRoaXMgY2xhc3MgaXMgb2J0YWluZWQsIFhNTCBjYW4gYmUgcGFyc2VkIGZyb20gYSB2YXJpZXR5IG9mIGlucHV0IAotICogc291cmNlcy4gVGhlc2UgaW5wdXQgc291cmNlcyBhcmUgSW5wdXRTdHJlYW1zLCBGaWxlcywgVVJMcywgYW5kIFNBWCAKLSAqIElucHV0U291cmNlcy4KLQotVGhpcyBjbGFzcyB3aWxsIGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3RvcnkuLi4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50QnVpbGRlckltcGwgZXh0ZW5kcyBEb2N1bWVudEJ1aWxkZXIKLXsKLSAgcHJvdGVjdGVkIERPTVBhcnNlciBkb21QYXJzZXIgPSBudWxsOwotCi0gIHByb3RlY3RlZCBFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyID0gbmV3IERlZmF1bHRIYW5kbGVyKCk7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFU19GRUFUVVJFID0KLSAgICBDb25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLk5BTUVTUEFDRVNfRkVBVFVSRTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVElPTl9GRUFUVVJFID0KLSAgICBDb25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLlZBTElEQVRJT05fRkVBVFVSRTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIERvY3VtZW50QnVpbGRlckltcGwyLgotICAgKgotICAgKiBAcGFyYW0gZGJGYWN0b3J5ICBhIERvY3VtZW50QnVpbGRlckZhY3Rvcnkgb2JqZWN0LgotICAgKiBAdGhyb3dzIFNBWEV4Y2VwdGlvbiBpZiBhbnkgcGFyc2UgZXJyb3JzIG9jY3VyLiAKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEJ1aWxkZXJJbXBsKERvY3VtZW50QnVpbGRlckZhY3RvcnkgZGJGYWN0b3J5LCBIYXNodGFibGUgYXR0cmlidXRlcykKLSAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgcGFyc2VyCi0gICAgZG9tUGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwotCi0gICAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZQotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKE5BTUVTUEFDRVNfRkVBVFVSRSwgZGJGYWN0b3J5LmlzTmFtZXNwYWNlQXdhcmUoKSk7Ci0KLSAgICAvLyBTZXQgdmFsaWRhdGluZwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKFZBTElEQVRJT05fRkVBVFVSRSwgZGJGYWN0b3J5LmlzVmFsaWRhdGluZygpKTsKLSAgICBpZiAoZGJGYWN0b3J5LmlzVmFsaWRhdGluZygpKSBkb21QYXJzZXIuc2V0RmVhdHVyZShYTUxVdGlscy5GRUFUVVJFX1ZBTElEQVRJT05fU0NIRU1BLCB0cnVlKTsKLQotICAgIC8vIERvIG5vdCBkZWZlciBub2RlIGV4cGFuc2lvbgotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5ERUZFUl9OT0RFX0VYUEFOU0lPTl9GRUFUVVJFLAotICAgICAgZmFsc2UpOwotCi0gICAgLy8gU2V0IG90aGVyIGZlYXR1cmVzIGZyb20gdGhlIGRvY3VtZW50IGZhY3RvcnkgYnVpbGRlcgotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5JTkNMVURFX0lHTk9SQUJMRV9XSElURVNQQUNFLAotICAgICAgIWRiRmFjdG9yeS5pc0lnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKCkpOwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWAotICAgICAgICArIENvbnN0YW50cy5DUkVBVEVfRU5USVRZX1JFRl9OT0RFU19GRUFUVVJFLAotICAgICAgIWRiRmFjdG9yeS5pc0V4cGFuZEVudGl0eVJlZmVyZW5jZXMoKSk7Ci0gICAgZG9tUGFyc2VyLnNldEZlYXR1cmUoCi0gICAgICBDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLklOQ0xVREVfQ09NTUVOVFNfRkVBVFVSRSwKLSAgICAgICFkYkZhY3RvcnkuaXNJZ25vcmluZ0NvbW1lbnRzKCkpOwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5DUkVBVEVfQ0RBVEFfTk9ERVNfRkVBVFVSRSwKLSAgICAgICFkYkZhY3RvcnkuaXNDb2FsZXNjaW5nKCkpOwotICAgCi0gICAgLy8gc2V0IGZlYXR1cmVzIGFuZCBwcm9wZXJ0aWVzIHNwZWNpZmllZCBhdCBmYWN0b3J5IGxldmVsCi0gICAgaWYgKGF0dHJpYnV0ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEVudW1lcmF0aW9uIGk9YXR0cmlidXRlcy5rZXlzKCk7IGkuaGFzTW9yZUVsZW1lbnRzKCk7KQotICAgICAgewotICAgICAgICBTdHJpbmcgYXR0cmlidXRlID0gKFN0cmluZylpLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGUuZXF1YWxzKFhNTFV0aWxzLkpBWFBfU0NIRU1BX1NPVVJDRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBmb3IgbXVsdGlwbGUgc2NoZW1hIHZhbGlkYXRpb24gbWF5IGJlIGFycmF5IG9mIElucHV0U291cmNlIAotICAgICAgICAgIGlmKGF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkgaW5zdGFuY2VvZiBJbnB1dFNvdXJjZVtdKQotICAgICAgICAgICAgZG9tUGFyc2VyLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgKElucHV0U291cmNlW10pYXR0cmlidXRlcy5nZXQoYXR0cmlidXRlKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9tUGFyc2VyLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgKElucHV0U291cmNlKWF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGRvbVBhcnNlci5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBjb250ZW50IG9mIHRoZSBnaXZlbiBpbnB1dCBzb3VyY2UgYXMgYW4gWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gYSBuZXcgRE9NLgotICAgKiBAcGFyYW0gaXMgIElucHV0U3RyZWFtIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgdG8gYmUgcGFyc2VkLiAKLSAgICogQHRocm93cyBTQVhFeGNlcHRpb24gaWYgYW55IHBhcnNlIGVycm9ycyBvY2N1ci4gCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW55IElPIGVycm9ycyBvY2N1ci4gCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgcGFyc2UoSW5wdXRTb3VyY2UgaXMpIHRocm93cyBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQl0cnkKLQl7Ci0JICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLSAJCi0gICAgICAvLyBTZXQgZW50aXR5IHJlc29sdmVyCi0gICAgICBpZiAodGhpcy5lbnRpdHlSZXNvbHZlciAhPSBudWxsKQotICAgICAgICBkb21QYXJzZXIuc2V0RW50aXR5UmVzb2x2ZXIodGhpcy5lbnRpdHlSZXNvbHZlcik7Ci0KLSAgICAgIC8vIFNldCBlcnJvciBoYW5kbGVyICAgIAotICAgICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyICE9IG51bGwpCi0gICAgICAgIGRvbVBhcnNlci5zZXRFcnJvckhhbmRsZXIodGhpcy5lcnJvckhhbmRsZXIpOwotCi0gICAgICAvLyBQYXJzZSBpbnB1dCBzb3VyY2UKLSAgICAgIGRvbVBhcnNlci5wYXJzZShpcyk7Ci0KLSAgICAgIC8vIFJldHVybiB0aGUgZG9jdW1lbnQgdGhhdCB3YXMgY3JlYXRlZAotICAgICAgcmV0dXJuIGRvbVBhcnNlci5nZXREb2N1bWVudCgpOwotCX0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gICAgCi0gIH0KLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyc2VyIGlzIGNvbmZpZ3VyZWQgdG8gdW5kZXJzdGFuZCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBwYXJzZXIgaXMgY29uZmlndXJlZCB0byB1bmRlcnN0YW5kIG5hbWVzcGFjZXM7IGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTmFtZXNwYWNlQXdhcmUoKQotICB7Ci0gICAgYm9vbGVhbiBuYW1lc3BhY2VBd2FyZSA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgbmFtZXNwYWNlQXdhcmUgPSBkb21QYXJzZXIuZ2V0RmVhdHVyZShOQU1FU1BBQ0VTX0ZFQVRVUkUpOwotICAgIH0KLQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gc2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZUF3YXJlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcnNlciBpcyBjb25maWd1cmVkIHRvIHZhbGlkYXRlIFhNTCBkb2N1bWVudHMuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHBhcnNlciBpcyBjb25maWd1cmVkIHRvIHZhbGlkYXRlIFhNTCBkb2N1bWVudHM7IGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRhdGluZygpCi0gIHsKLSAgICBib29sZWFuIHZhbGlkYXRpbmcgPSBmYWxzZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIHZhbGlkYXRpbmcgPSBkb21QYXJzZXIuZ2V0RmVhdHVyZShWQUxJREFUSU9OX0ZFQVRVUkUpOwotICAgIH0KLQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gc2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogU3BlY2lmeSB0aGUgRW50aXR5UmVzb2x2ZXIgdG8gYmUgdXNlZCB0byByZXNvbHZlIGVudGl0aWVzIHByZXNlbnQgCi0gICAqIGluIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLiBTZXR0aW5nIHRoaXMgdG8gbnVsbCB3aWxsIHJlc3VsdCAKLSAgICogaW4gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdXNpbmcgaXQncyBvd24gZGVmYXVsdCAKLSAgICogaW1wbGVtZW50YXRpb24gYW5kIGJlaGF2aW9yLgotICAgKiAKLSAgICogQHBhcmFtIGVyICB0aGUgRW50aXR5UmVzb2x2ZXIgdG8gYmUgdXNlZCB0byByZXNvbHZlIGVudGl0aWVzIAotICAgKiAgICAgICAgICAgIHByZXNlbnQgaW4gdGhlIFhNTCBkb2N1bWVudCB0byBiZSBwYXJzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlSZXNvbHZlcihFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIHRoaXMuZW50aXR5UmVzb2x2ZXIgPSBlbnRpdHlSZXNvbHZlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTcGVjaWZ5IHRoZSBFcnJvckhhbmRsZXIgdG8gYmUgdXNlZCB0byByZXBvcnQgZXJyb3JzIHByZXNlbnQgaW4gCi0gICAqIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLiBTZXR0aW5nIHRoaXMgdG8gbnVsbCB3aWxsIHJlc3VsdCAKLSAgICogaW4gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdXNpbmcgaXQncyBvd24gZGVmYXVsdCAKLSAgICogaW1wbGVtZW50YXRpb24gYW5kIGJlaGF2aW9yLiAKLSAgICogCi0gICAqIHBhcmFtIGVoICB0aGUgRXJyb3JIYW5kbGVyIHRvIGJlIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBwcmVzZW50IGluIAotICAgKiAgICAgICAgICAgdGhlIFhNTCBkb2N1bWVudCB0byBiZSBwYXJzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvckhhbmRsZXIoRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlcikKLSAgewotICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIE9idGFpbiBhIG5ldyBpbnN0YW5jZSBvZiBhIERPTSBEb2N1bWVudCBvYmplY3QgdG8gYnVpbGQgYSBET00gCi0gICAqIHRyZWUgd2l0aC4gQW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGNyZWF0ZSBhIERPTSBEb2N1bWVudCBvYmplY3QgCi0gICAqIGlzIHRvIHVzZSB0aGUgZ2V0RE9NSW1wbGVtZW50YXRpb24gbWV0aG9kIHRvIGdldCBhIERPTSBMZXZlbCAyIAotICAgKiBET01JbXBsZW1lbnRhdGlvbiBvYmplY3QgYW5kIHRoZW4gdXNlIERPTSBMZXZlbCAyIG1ldGhvZHMgb24gCi0gICAqIHRoYXQgb2JqZWN0IHRvIGNyZWF0ZSBhIERPTSBEb2N1bWVudCBvYmplY3QuCi0gICAqIAotICAgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgRE9NIERvY3VtZW50IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBuZXdEb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IERvY3VtZW50SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIE9idGFpbiBhbiBpbnN0YW5jZSBvZiBhIERPTUltcGxlbWVudGF0aW9uIG9iamVjdC4gCi0gICAqIEByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBET01JbXBsZW1lbnRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBET01JbXBsZW1lbnRhdGlvbiBnZXRET01JbXBsZW1lbnRhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbmV3IERPTUltcGxlbWVudGF0aW9uSW1wbCgpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9zY2hlbWEvVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1RhcmdldE5hbWVzcGFjZVByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGMyNDM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9zY2hlbWEvVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm9jZXNzZXMgdGFyZ2V0IG5hbWVzcGFjZXMuIE5vdGUgdGhpcyBjbGFzcyBpcyBhIHNwZWNpYWxpemF0aW9uCi0gKiBvZiBvcmcud3NpLnhtbC5zY2hlbWEuWE1MU2NoZW1hUHJvY2Vzc29yLgotICogCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXJnZXROYW1lc3BhY2VQcm9jZXNzb3IgZXh0ZW5kcyBYTUxTY2hlbWFQcm9jZXNzb3IKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFRhcmdldE5hbWVzcGFjZVByb2Nlc3MuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dAotICAgKiAgICAgICAgICAgIGRvY3VtZW50IGNvbnRleHQKLSAgICogQHBhcmFtIGRvY3VtZW50TGlzdAotICAgKiAgICAgICAgICAgIGNhY2hlIG9mIHByZXZpb3VzbHkgcGFyc2VkIGRvY3VtZW50cwotICAgKi8KLSAgcHVibGljIFRhcmdldE5hbWVzcGFjZVByb2Nlc3NvcihTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHN1cGVyKGNvbnRleHQsIGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NTY2hlbWEoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHRucyA9IG51bGw7Ci0gICAgQXR0ciBhdHRyID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJfWFNEX1RBUkdFVE5BTUVTUEFDRSk7Ci0KLSAgICAvLyBJZiB0aGUgYXR0cmlidXRlIHdhcyBmb3VuZCBhbmQgdmFsdWUgaXMgbm90IG51bGwsIHRoZW4gYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKChhdHRyICE9IG51bGwpICYmICgodG5zID0gYXR0ci5nZXRWYWx1ZSgpKSAhPSBudWxsKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgdGhlIHRhcmdldE5hbWVzcGFjZSB0byB0aGUgcmV0dXJuIGxpc3QKLSAgICAgIHJldHVybkxpc3QuYWRkKHRucyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcwotICAgKiB0aGVtLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgICBub2RlLgotICAgKiBAcmV0dXJuIGEgbGlzdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICogICAgICAgICAgICAgaWYgdGhlIFhNTCBzY2hlbWEgZmlsZSBpcyBub3QgZm91bmQgb3IgaWYgaXQgaXMgbm90IGZvcm1hdHRlZAotICAgKiAgICAgICAgICAgICBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgTGlzdCBwcm9jZXNzQWxsU2NoZW1hKE5vZGUgbm9kZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NBbGxTY2hlbWEobm9kZSwgY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VhcmNoIGZvciBhbGwgc2NoZW1hIGVsZW1lbnRzLCBsb2FkIHRoZSB4c2QgZG9jdW1lbnRzLCBhbmQgdGhlbiBwcm9jZXNzCi0gICAqIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICAgIG5vZGUuCi0gICAqIEByZXR1cm4gYSBsaXN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbgotICAgKiAgICAgICAgICAgICBpZiB0aGUgWE1MIHNjaGVtYSBmaWxlIGlzIG5vdCBmb3VuZCBvciBpZiBpdCBpcyBub3QgZm9ybWF0dGVkCi0gICAqICAgICAgICAgICAgIGNvcnJlY3RseS4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBwcm9jZXNzQWxsU2NoZW1hKE5vZGUgbm9kZSwgU3RyaW5nIGN0eCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCi0gICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgIHsKLSAgICAgICAgcHJvY2Vzc1NjaGVtYSgoRWxlbWVudCkgbm9kZSk7Ci0KLSAgICAgICAgTm9kZSBuID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotCi0gICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gICAgICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAJICBpZiAoIXNjaGVtYUxvY2F0aW9ucy5jb250YWlucyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKSkKLSAgICAgICAgICAJICB7Ci0gICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb25zLmFkZChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBSZWFkIGFuZCBwUGFyc2UgdGhlIFhNTCBzY2hlbWEgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gcGFyc2VYTUxEb2N1bWVudFVSTChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgsIFRlc3RVdGlscy5nZXRYTUxTY2hlbWFMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICAgIHByb2Nlc3NBbGxTY2hlbWEoZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCksIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvLyBOT1RFOiBBbiBleGNlcHRpb24gd2lsbCBvY2N1ciBpZiB0aGUgWE1MIHNjaGVtYSBmaWxlIGlzIG5vdAotICAJCQkgICAgIC8vIGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgIH0KLSAgICAgfQotCi0gICAgIC8vIFJldHVybiBsaXN0IGNyZWF0ZWQgYnkgdGhlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGlzIGNsYXNzCi0gICAgIHJldHVybiByZXR1cm5MaXN0OwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gICAgCi19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVByb2Nlc3Nvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZlNTJlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MRG9jdW1lbnRDYWNoZVVzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhpcyBhYnN0cmFjdCBjbGFzcyBpcyB1c2VkIHRvIHByb2Nlc3MgYW4gWE1MIFNjaGVtYS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhNTFNjaGVtYVByb2Nlc3NvcgotICBleHRlbmRzIFhNTERvY3VtZW50Q2FjaGVVc2VyCi0gIGltcGxlbWVudHMgWE1MVGFncwotewotICBwcm90ZWN0ZWQgTGlzdCByZXR1cm5MaXN0ID0gbmV3IFZlY3RvcigpOwotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbnRleHQ7Ci0gIHByb3RlY3RlZCBib29sZWFuIHRocm93RXhjZXB0aW9uID0gdHJ1ZTsKLSAgcHJvdGVjdGVkIExpc3Qgc2NoZW1hTG9jYXRpb25zID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgWE1MU2NoZW1hUHJvY2Vzc29yLgotICAgKiBAcGFyYW0gY29udGV4dCAgICAgICBkb2N1bWVudCBjb250ZXh0LiAKLSAgICogQHBhcmFtIGRvY3VtZW50TGlzdCAgY2FjaGUgb2YgcHJldmlvdXNseSBwYXJzZWQgZG9jdW1lbnRzLgotICAgKi8KLSAgcHVibGljIFhNTFNjaGVtYVByb2Nlc3NvcihTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHRoaXMoY29udGV4dCwgdHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTFNjaGVtYVByb2Nlc3Nvci4KLSAgICogQHBhcmFtIGNvbnRleHQgICAgICAgIGRvY3VtZW50IGNvbnRleHQuIAotICAgKiBAcGFyYW0gZG9jdW1lbnRMaXN0ICAgY2FjaGUgb2YgcHJldmlvdXNseSBwYXJzZWQgZG9jdW1lbnRzLgotICAgKiBAcGFyYW0gdGhyb3dFeGNlcHRpb24gaW5kaWNhdGVzIGlmIGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIGlmIHRoZXJlIGlzIGEgcGFyc2luZyBwcm9ibGVtLgotICAgKi8KLSAgcHVibGljIFhNTFNjaGVtYVByb2Nlc3NvcigKLSAgICBTdHJpbmcgY29udGV4dCwKLSAgICBib29sZWFuIHRocm93RXhjZXB0aW9uKQotICB7Ci0gICAgc3VwZXIoKTsKLQotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy50aHJvd0V4Y2VwdGlvbiA9IHRocm93RXhjZXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcyB0aGVtLgotICAgKiBAcGFyYW0gbm9kZSAgbm9kZS4KLSAgICogQHJldHVybiBhIGxpc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBYTUwgc2NoZW1hIGZpbGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5LgotICAgKi8KLSAgcHVibGljIExpc3QgcHJvY2Vzc0FsbFNjaGVtYShOb2RlIG5vZGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBwcm9jZXNzQWxsU2NoZW1hKG5vZGUsIGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcyB0aGVtLgotICAgKiBAcGFyYW0gbm9kZSAgbm9kZS4KLSAgICogQHJldHVybiBhIGxpc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBYTUwgc2NoZW1hIGZpbGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5LgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IHByb2Nlc3NBbGxTY2hlbWEoTm9kZSBub2RlLCBTdHJpbmcgY3R4KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQl0cnkKLQl7Ci0gICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxTY2hlbWFQcm9jZXNzb3IuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0gICAgICAvLyBQcm9jZXNzIGFsbCBub2RlcwotICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBlbGVtZW50IG5vZGUsIHRoZW4gY29udGludWUKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKChFbGVtZW50KSBub2RlKTsKLQotICAgICAgICAgICAgLy8gUHJvY2VzcyBhbGwgY2hpbGRyZW4gb2YgdGhlIHNjaGVtYSBlbGVtZW50Ci0gICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKG5vZGUuZ2V0Rmlyc3RDaGlsZCgpLCBjdHgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIGlmIHhzZDppbXBvcnQgZWxlbWVudCBpcyBmb3VuZCAtPiBsb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBlbHNlIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIEF0dHIgc2NoZW1hTG9jYXRpb24gPQotICAgICAgICAgICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIG5vZGUsIEFUVFJfWFNEX1NDSEVNQUxPQ0FUSU9OKTsKLQotICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAgICAgICAgICAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgIAkgIGlmICghc2NoZW1hTG9jYXRpb25zLmNvbnRhaW5zKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkpKQotICAgICAgICAgIAkgIHsKLSAgICAgICAgICAJCXNjaGVtYUxvY2F0aW9ucy5hZGQoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gUmVhZCBhbmQgcFBhcnNlIHRoZSBYTUwgc2NoZW1hIGRvY3VtZW50Ci0gICAgICAgICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgVGVzdFV0aWxzLmdldFhNTFNjaGVtYUxvY2F0aW9uKCkpOwotCi0gICAgICAgICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpLAotICAgICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gTk9URTogQW4gZXhjZXB0aW9uIHdpbGwgb2NjdXIgaWYgdGhlIFhNTCBzY2hlbWEgZmlsZSBpcyBub3QgZm91bmQgb3IgaWYgaXQgaXMgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHkKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGVsc2UgaXRlcmF0ZSBlbGVtZW50IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKG5vZGUuZ2V0Rmlyc3RDaGlsZCgpLCBjdHgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCBuZXh0IHNpYmlsaW5nCi0gICAgICAgIG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLSAgICB9ICAgIAotCi0KLSAgICAvLyBSZXR1cm4gbGlzdCBjcmVhdGVkIGJ5IHRoZSBjbGFzcyB0aGF0IGV4dGVuZHMgdGhpcyBjbGFzcwotICAgIHJldHVybiByZXR1cm5MaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcHJvY2Vzc1NjaGVtYShFbGVtZW50IGVsZW1lbnQpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZjYTEzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NMldyaXRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdmFsaWRhdGUgYW4gWE1MIFNjaGVtYS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFhNTFNjaGVtYVZhbGlkYXRvciBleHRlbmRzIFhNTFNjaGVtYVByb2Nlc3NvcgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MTlNfUFJFRklYID0gInhtbG5zOiI7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxTY2hlbWFWYWxpZGF0b3IuCi0gICAqIEBwYXJhbSBjb250ZXh0ICAgICAgIGRvY3VtZW50IGNvbnRleHQuIAotICAgKiBAcGFyYW0gZG9jdW1lbnRMaXN0ICBjYWNoZSBvZiBwcmV2aW91c2x5IHBhcnNlZCBkb2N1bWVudHMuCi0gICAqLwotICBwdWJsaWMgWE1MU2NoZW1hVmFsaWRhdG9yKFN0cmluZyBjb250ZXh0KQotICB7Ci0gICAgc3VwZXIoY29udGV4dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzU2NoZW1hKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIE5hbWVkTm9kZU1hcCBhdHRyTGlzdDsKLQotICAgIEhhc2hNYXAgZWxlbWVudE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgSGFzaE1hcCBuc01hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgc2NoZW1hIGNvbnRlbnQgYXMgYSBzdHJpbmcKLSAgICAgIFN0cmluZyBzY2hlbWEgPSBET00yV3JpdGVyLm5vZGVUb1N0cmluZyhlbGVtZW50KTsKLQotICAgICAgLy8gR2V0IGxpc3Qgb2YgZWxlbWVudCBuYW1lc3BhY2VzCi0gICAgICBpZiAoKGF0dHJMaXN0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGFkZE5hbWVzcGFjZXMoYXR0ckxpc3QsIGVsZW1lbnRNYXAsIG51bGwpOwotICAgICAgfQotCi0gICAgICAvLyBJZiBlbGVtZW50TWFwIGRvZXMgbm90IGNvbnRhaW4gZW50cnkgZm9yIGl0J3Mgb3duIG5hbWVzcGFjZSwgdGhlbiBhZGQgaXQKLSAgICAgIGlmIChlbGVtZW50TWFwLmdldChYTUxOU19QUkVGSVggKyBlbGVtZW50LmdldFByZWZpeCgpKSA9PSBudWxsKQotICAgICAgewotICAgICAgICBlbGVtZW50TWFwLnB1dCgKLSAgICAgICAgICBYTUxOU19QUkVGSVggKyBlbGVtZW50LmdldFByZWZpeCgpLAotICAgICAgICAgIGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgZmlyc3QgcGFyZW50IG5vZGUgYW5kIHRoZW4gcHJvY2VzcyBhbGwgb2YgdGhlbSB1bnRpbCB5b3UgaGl0IHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50Ci0gICAgICBOb2RlIHBhcmVudE5vZGUgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLSAgICAgIHdoaWxlIChwYXJlbnROb2RlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIE9ubHkgcHJvY2VzcyBFbGVtZW50IG5vZGVzCi0gICAgICAgIGlmIChwYXJlbnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBmb3IgdGhlIHBhcmVudCBub2RlCi0gICAgICAgICAgYXR0ckxpc3QgPSBwYXJlbnROb2RlLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhdHRyaWJ1dGVzLCBsb29rIGZvciB0aGUgeG1sbnM6IGF0dHJpYnV0ZXMKLSAgICAgICAgICBpZiAoYXR0ckxpc3QgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhZGROYW1lc3BhY2VzKGF0dHJMaXN0LCBuc01hcCwgZWxlbWVudE1hcCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgfQotCi0gICAgICAvLyBCdWlsZCBuYW1lc3BhY2UgbGlzdAotICAgICAgaWYgKG5zTWFwLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBhdHRyOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlTGlzdCA9ICIiOwotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IG5zTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBhdHRyID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIG5hbWVzcGFjZUxpc3QgKz0gIiAiICsgYXR0ciArICI9XCIiICsgbnNNYXAuZ2V0KGF0dHIpICsgIlwiIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFkZCBuYW1lc3BhY2Ugc2V0dGluZ3MsIHNpbmNlIHRoZSBET00yV3JpdGVyIHdpbGwgbWlzcyBhbnkgdGhhdCBhcmUgdXNlZCBhcyBhdHRyaWJ1dGUgdmFsdWVzCi0gICAgICAgIGludCBpbmRleCA9IHNjaGVtYS5pbmRleE9mKCI+Iik7Ci0gICAgICAgIGlmIChpbmRleCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc3RhcnQgPSBzY2hlbWEuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICAgICAgICBTdHJpbmcgZW5kID0gc2NoZW1hLnN1YnN0cmluZyhpbmRleCk7Ci0KLSAgICAgICAgICBzY2hlbWEgPSBzdGFydCArIG5hbWVzcGFjZUxpc3QgKyBlbmQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gU2NoZW1hIHZhbGlkYXRlIHRoZSBYTUwgc2NoZW1hIGRvY3VtZW50Ci0gICAgICBYTUxVdGlscy5wYXJzZVhNTChzY2hlbWEsIFRlc3RVdGlscy5nZXRYTUxTY2hlbWFMb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICAgIFRocm93YWJsZSB0ID0gd2UuZ2V0VGFyZ2V0RXhjZXB0aW9uKCk7Ci0gICAgICBpZiAodCAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5MaXN0LmFkZCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZE5hbWVzcGFjZXMoTmFtZWROb2RlTWFwIGF0dHJMaXN0LCBNYXAgbnNNYXAsIE1hcCBlbGVtZW50TWFwKQotICB7Ci0gICAgTm9kZSBhdHRyOwotICAgIFN0cmluZyBub2RlTmFtZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ckxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBhdHRyID0gYXR0ckxpc3QuaXRlbShpKTsKLQotICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGUgbm9kZSBuYW1lCi0gICAgICBub2RlTmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQotICAgICAgLy8gSWYgaXQgc3RhcnRzIHdpdGggeG1sbnM6LCB0aGVuIGRldGVybWluZSBpZiBpdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyAKLSAgICAgIGlmIChub2RlTmFtZS5zdGFydHNXaXRoKFhNTE5TX1BSRUZJWCkKLSAgICAgICAgJiYgKChlbGVtZW50TWFwID09IG51bGwKLSAgICAgICAgICB8fCAoZWxlbWVudE1hcCAhPSBudWxsICYmIGVsZW1lbnRNYXAuZ2V0KG5vZGVOYW1lKSA9PSBudWxsKSkpKQotICAgICAgewotICAgICAgICBpZiAobnNNYXAuZ2V0KG5vZGVOYW1lKSA9PSBudWxsKQotICAgICAgICAgIG5zTWFwLnB1dChub2RlTmFtZSwgYXR0ci5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvZG9jdW1lbnQvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGM0YmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmRvY3VtZW50OwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0Lk51bGxSZXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LlJlcG9ydE5vV3JpdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5TaW1wbGVSZXBvcnRlcjsKLQotLyoqCi0gKiBEb2N1bWVudEZhY3RvcnlJbXBsCi0gKiAKLSAqIEV4dGVuZHMgdGhlIFdTLUkgVGVzdCBUb29scyBkb2N1bWVudCBmYWN0b3J5IHRvIHNwZWNpZnkgc3BlY2lmaWMgUmVwb3J0Ci0gKiBhbmQgUmVwb3J0V3JpdGVyIGNsYXNzZXMgbmVlZGVkIGZvciBpbmNsdXNpb24gb2YgdGhlIHRvb2xzIGluIFdTQUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudEZhY3RvcnlJbXBsIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGwuRG9jdW1lbnRGYWN0b3J5SW1wbAotewotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgRG9jdW1lbnRGYWN0b3J5SW1wbC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRXcml0ZXIuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0V3JpdGVyIG5ld1JlcG9ydFdyaXRlcigpCi0gIHsKLSAgICAvLyBSZXR1cm4gaW1wbGVtZW50YXRpb24KLSAgICByZXR1cm4gbmV3IFJlcG9ydE5vV3JpdGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSByZXBvcnQuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnQuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IG5ld1JlcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IE51bGxSZXBvcnRJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgcmVwb3J0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnRlci4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRlciBuZXdSZXBvcnRlcihSZXBvcnQgcmVwb3J0LCBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvQXNzZXJ0aW9uRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvQXNzZXJ0aW9uRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwZWM4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L0Fzc2VydGlvbkVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi0vKioKLSAqIEFzc2VydGlvbkVycm9yCi0gKiAKLSAqIE9iamVjdCB0byBob2xkIGFuIGFzc2VydGlvbiBlcnJvciBnZW5lcmF0ZWQgYnkgdGhlIFdTLUkgVGVzdCBUb29scy4KLSAqIFByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciBpbmNsdWRpbmcgdGhlCi0gKiBpZCwgbWVzc2FnZSBhbmQgbG9jYXRpb24gaW4gdGhlIGZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25FcnJvcgotewotCi0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBhc3NlcnRpb25pZDsKLSAgcHJvdGVjdGVkIGludCBjb2x1bW47Ci0gIHByb3RlY3RlZCBpbnQgbGluZTsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25FcnJvci4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25FcnJvcigpCi0gIHsKLSAgICBtZXNzYWdlID0gYXNzZXJ0aW9uaWQgPSAiIjsKLSAgICBsaW5lID0gY29sdW1uID0gMDsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXJyb3IuCi0gICAqIEBwYXJhbSBpZCBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgZXJyb3IgbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmUgYSBsaW5lIG51bWJlci4KLSAgICogQHBhcmFtIGNvbHVtbiBhIGNvbHVtbiBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uRXJyb3IoU3RyaW5nIGlkLCBTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvbmlkID0gaWQ7Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB0aGlzLmxpbmUgPSBsaW5lOwotICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBzZXRBc3NlcnRpb25JRC4KLSAgICogQHBhcmFtIGlkIGFzc2VydGlvbiBpZC4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbklEKFN0cmluZyBpZCkKLSAgewotICAgIGFzc2VydGlvbmlkID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEFzc2VydGlvbklELgotICAgKiBAcmV0dXJuIGFzc2VyaW9uIGlkLgotICAgKiBAc2VlICNzZXRBc3NlcnRpb25JRAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBc3NlcnRpb25JRCgpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9uaWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIHNldEVycm9yTWVzc2FnZS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBlcnJvciBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRFcnJvck1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEVycm9yTWVzc2FnZS4KLSAgICogQHJldHVybiBlcnJvciBtZXNzYWdlLgotICAgKiBAc2VlICNzZXRFcnJvck1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBzZXRMaW5lLgotICAgKiBAcGFyYW0gbGluZSBsaW5lIG51bWJlci4KLSAgICogQHNlZSAjZ2V0TGluZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGluZShpbnQgbGluZSkKLSAgewotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExpbmUuCi0gICAqIEByZXR1cm4gbGluZSBudW1iZXIuCi0gICAqIEBzZWUgI3NldExpbmUKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2Qgc2V0Q29sdW1uLgotICAgKiBAcGFyYW0gY29sdW1uIGNvbHVtbiBudW1iZXIuCi0gICAqIEBzZWUgI2dldENvbHVtbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29sdW1uKGludCBjb2x1bW4pCi0gIHsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0Q29sdW1uLgotICAgKiBAcmV0dXJuIGNvbHVtbiBudW1iZXIuCi0gICAqIEBzZWUgI3NldENvbHVtbgotICAgKi8KLSAgcHVibGljIGludCBnZXRDb2x1bW4oKQotICB7Ci0gICAgcmV0dXJuIGNvbHVtbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L051bGxSZXBvcnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L051bGxSZXBvcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YWU5OGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9OdWxsUmVwb3J0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLlJlcG9ydEltcGw7Ci0KLS8qKgotICogTnVsbCByZXBvcnQuCi0gKgotICogQGF1dGhvciBKZWZmcmV5IExpdSAoamVmZmxpdUBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTnVsbFJlcG9ydEltcGwgZXh0ZW5kcyBSZXBvcnRJbXBsIGltcGxlbWVudHMgUmVwb3J0Ci17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRTdGFydFhNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRFbmRYTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldEVycm9yWE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lLCBTdHJpbmcgZXJyb3JEZXRhaWwpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9SZXBvcnROb1dyaXRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvUmVwb3J0Tm9Xcml0ZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMzcyNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9SZXBvcnROb1dyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogV1MtSSBjb25mb3JtYW5jZSB0ZXN0IFJlcG9ydFdyaXRlciBmb3Igd3NpIHBsdWdpbi4KLSAqIFRoaXMgUmVwb3J0V3JpdGVyIHdyaXRlcyBub3RoaW5nIHNvIG5vIHJlcG9ydCBmaWxlIHdpbGwgYmUgY3JlYXRlZC4KLSAqLwotcHVibGljIGNsYXNzIFJlcG9ydE5vV3JpdGVySW1wbCBpbXBsZW1lbnRzIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyCi17Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIFJlcG9ydE5vV3JpdGVySW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjZ2V0RG9jdW1lbnQoKQotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjc2V0V3JpdGVyKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyLCBXcml0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShSZWFkZXIgcmVhZGVyLCBXcml0ZXIgd3JpdGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydFdyaXRlciN3cml0ZShSZXBvcnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShSZXBvcnQgcmVwb3J0KSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydFdyaXRlciN3cml0ZShSZXBvcnQsIFdyaXRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQsIFdyaXRlciB3cml0ZXIpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjY2xvc2UoKQotICAgKi8KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgV1NJRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24KLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L1NpbXBsZVJlcG9ydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L1NpbXBsZVJlcG9ydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNjVlNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9TaW1wbGVSZXBvcnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLQotLyoqCi0gKiBUaGlzIHJlcG9ydGVyIGRvZXMgbm90IHdyaXRlIGFydGlmYWN0cyBhbmQgYXNzZXJ0aW9ucwotICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVwb3J0ZXIgZXh0ZW5kcyBEZWZhdWx0UmVwb3J0ZXIKLXsKLSAgcHVibGljIFNpbXBsZVJlcG9ydGVyKFJlcG9ydCByZXBvcnQsIFJlcG9ydFdyaXRlciByZXBvcnRXcml0ZXIpCi0gIHsKLSAgICBzdXBlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBcnRpZmFjdFJlZmVyZW5jZShvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0LmFkZEFydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2FkZEFzc2VydGlvblJlc3VsdChvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFzc2VydGlvblJlc3VsdChBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlcG9ydC5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC92YWxpZGF0ZS93c2RsL1dTRExWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC92YWxpZGF0ZS93c2RsL1dTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhN2NiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvdmFsaWRhdGUvd3NkbC9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklXU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbkluZm9JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZXhjZXB0aW9uLlZhbGlkYXRlV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRpb25JbmZvSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETFJlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLldTRExBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLldTSUFuYWx5emVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuQXNzZXJ0aW9uRXJyb3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTSSB2YWxpZGF0b3IgcGx1Z3MgaW50byB0aGUgV1NETCB2YWxpZGF0b3IgdG8gcHJvdmlkZQotICogdmFsaWRhdGlvbiBmb3IgYSBXU0RMIGRvY3VtZW50IHdpdGggcmVzcGVjdCB0byB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIChjdXJyZW50bHkgMS4wKS4KLSAqIFRoaXMgY2xhc3MgYWN0cyBhcyBhbiBicmlkZ2UgYmV0d2VlbiB0aGUgV1MtSSB0b29scyBhbmQgdGhlIFdTREwgVmFsaWRhdG9yLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICogQGF1dGhvciBXYWppaGEgUmVobWFuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTRExWYWxpZGF0b3IKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVhDX1VOQUJMRV9UT19WQUxJREFURV9XU0kgPSAiX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfV1NJIjsKLQotICAvLyBpbmRpY2F0aW9ucyBmb3IgdHlwZXMgb2YgZXJyb3JzCi0gIHByb3RlY3RlZCBmaW5hbCBpbnQgRVJST1IgPSAyOwotICBwcm90ZWN0ZWQgZmluYWwgaW50IFdBUk5JTkcgPSAxOwotICAKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHJlc291cmNlYnVuZGxlID0gbnVsbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gd3NpVmFsaWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETFZhbGlkYXRvcigpCi0gIHsKLQlyZXNvdXJjZWJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgid3NpdmFsaWRhdGUiLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLklXU0RMVmFsaWRhdG9yI3ZhbGlkYXRlKG9yZy53M2MuZG9tLkRvY3VtZW50LCBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLlZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoRG9jdW1lbnQgZG9tTW9kZWwsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gIHsKLQlib29sZWFuIHdpdGhBdHRhY2htZW50cyA9IGZhbHNlOwotCWJvb2xlYW4gd2l0aEJhc2ljID0gZmFsc2U7Ci0JT2JqZWN0IGF0dFZhbHVlID0gdmFsSW5mby5nZXRBdHRyaWJ1dGUoImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9CYXNpY1dpdGhBdHRhY2htZW50cy9Db21wbGlhbmNlTGV2ZWwiKTsKLQlpZihhdHRWYWx1ZSA9PSBudWxsKQotCXsKLQkgIGF0dFZhbHVlID0gdmFsSW5mby5nZXRBdHRyaWJ1dGUoImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9CYXNpYy9Db21wbGlhbmNlTGV2ZWwiKTsKLSAgIAkgIGlmKGF0dFZhbHVlICE9IG51bGwpCi0JICB7Ci0JICAgIHdpdGhCYXNpYyA9IHRydWU7Ci0JICB9Ci0JfQotCWVsc2UKLQl7Ci0JICB3aXRoQXR0YWNobWVudHMgPSB0cnVlOwotCX0KLQlTdHJpbmcgd3NpTGV2ZWwgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSTsKLQlXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlID0gbnVsbDsKLQlTdHJpbmcgdXJpID0gdmFsSW5mby5nZXRGaWxlVVJJKCk7Ci0JaWYoYXR0VmFsdWUgIT0gbnVsbCkKLQl7Ci0JICBTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKWF0dFZhbHVlOwotCSAgaWYodmFsdWUuZXF1YWxzKCJJR05PUkUiKSkKLQkgIHsKLQkgIAl3c2lMZXZlbCA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuSUdOT1JFX05PTl9XU0k7Ci0JICB9Ci0JICBlbHNlIGlmKHZhbHVlLmVxdWFscygiUkVRVUlSRSIpKQotCSAgewotCSAgIAl3c2lMZXZlbCA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJOwotCSAgfQotCX0KLQllbHNlIAotCXsKLQkgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLQkgIHsKLQkJd3NpUHJlZmVyZW5jZSA9IFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXModXJpKTsKLQkJd3NpTGV2ZWwgPSB3c2lQcmVmZXJlbmNlLmdldENvbXBsaWFuY2VMZXZlbCgpOwotCSAgfQotCSAgZWxzZQotCSAgewotCQl3c2lQcmVmZXJlbmNlID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5jaGVja1dTSVByZWZlcmVuY2VzKHVyaSk7Ci0JCXdzaUxldmVsID0gd3NpUHJlZmVyZW5jZS5nZXRDb21wbGlhbmNlTGV2ZWwoKTsKLQkgIH0KLQl9Ci0JLy8gSWYgd2UgYXJlIGlnbm9yaW5nIFdTLUkgdGhlbiBkb24ndCBydW4gdGhlIHRlc3RzLgotCWlmKHdzaUxldmVsLmVxdWFscyhXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLklHTk9SRV9OT05fV1NJKSkKLQl7Ci0JICByZXR1cm47Ci0JfQotCSAgICAKLSAgCXdzaVZhbGlkID0gdHJ1ZTsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0JYm9vbGVhbiBoYXNBbmFseXplckNvbmZpZyA9IGZhbHNlOwotICAJdHJ5Ci0gIAl7Ci0gICAgICAvL1dTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotIAkgIFZhbGlkYXRpb25JbmZvSW1wbCB2YWxpID0gbmV3IFZhbGlkYXRpb25JbmZvSW1wbCh2YWxJbmZvLmdldEZpbGVVUkkoKSwgbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmVzb3VyY2VidW5kbGUpKTsKLSAgCSAgdmFsaS5zZXRVUklSZXNvbHZlcigoVVJJUmVzb2x2ZXIpdmFsSW5mby5nZXRVUklSZXNvbHZlcigpKTsKLSAgICAgIFdTRExSZWFkZXJJbXBsIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbChuZXcgV1NETDExVmFsaWRhdGlvbkluZm9JbXBsKHZhbGkpKTsKLSAgICAgIFdTRExEb2N1bWVudFtdIGRvY3MgPSByZWFkZXIucmVhZFdTREwodXJpLCBkb21Nb2RlbCk7Ci0gICAgICBpbnQgbnVtZG9jcyA9IGRvY3MubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWRvY3M7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IHRlbXBEb2MgPSBkb2NzW2ldOwotCQlpZih0ZW1wRG9jLmdldERlZmluaXRpb24oKS5nZXREb2N1bWVudEJhc2VVUkkoKS5lcXVhbHModmFsSW5mby5nZXRGaWxlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmaW5pdGlvbiA9IHRlbXBEb2MuZ2V0RGVmaW5pdGlvbigpOyAgCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgCX0KLSAgCWNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgCXsKLSAgCSAgdGhyb3cgbmV3IFZhbGlkYXRlV1NETEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdChyZXNvdXJjZWJ1bmRsZS5nZXRTdHJpbmcoX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfV1NJKSwgbmV3IE9iamVjdFtdIHsgdXJpIH0pKTsKLSAgCX0KLQkgICAgCi0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCAmJiB2YWxJbmZvICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgICAgIC8vIGdldCBhbGwgdGhlIGNvbGxlY3Rpb25zIHdlIG1heSBuZWVkIHRvIHZhbGlkYXRlCi0gICAgICBDb2xsZWN0aW9uIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpOwotICAgICAgQ29sbGVjdGlvbiBiaW5kaW5ncyA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKTsKLSAgICAgIENvbGxlY3Rpb24gcG9ydFR5cGVzID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS52YWx1ZXMoKTsKLSAgICAgIENvbGxlY3Rpb24gbWVzc2FnZXMgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkudmFsdWVzKCk7Ci0KLSAgICAgIFdTRExBbmFseXplciB3c2RsQW5hbHl6ZXI7Ci0JICBpZih3aXRoQXR0YWNobWVudHMpCi0JICB7Ci0JICAJV1NJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLSAgIAkgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKHdzaUxldmVsKTsKLQkgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLkFQX0FTU0VSVElPTl9GSUxFKTsKLQkgICAgd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmksIHByZWZlcmVuY2VzKTsKLQkgIH0KLQkgIGVsc2UgaWYod2l0aEJhc2ljKQotCSAgewotCSAgCVdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0JCXByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCh3c2lMZXZlbCk7CQotCSAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1NCUF9BU1NFUlRJT05fRklMRSk7Ci0JICAgIHdzZGxBbmFseXplciA9IG5ldyBXU0RMQW5hbHl6ZXIodXJpLCBwcmVmZXJlbmNlcyk7Ci0JICB9Ci0JICBlbHNlIGlmKHdzaVByZWZlcmVuY2UgIT0gbnVsbCkKLQkgIHsKLQkJd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmksIHdzaVByZWZlcmVuY2UpOwotCSAgfQotCSAgZWxzZSB7Ci0JCS8vIGRlZmF1bHQgcHJlZmVyZW5jZSBzZXR0aW5nCi0JICAJd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmkpOwotCSAgfQotCi0JICAvLyBUaGUgV1MtSSBjb25mb3JtYW5jZSB0b29scyByZXF1aXJlIHRoYXQgZWFjaCBzZXJ2aWNlIGJlIGFuYWx5emVkIHNlcGFyYXRlbHkuCi0JICAvLyBHZXQgYWxsIHRoZSBzZXJ2aWNlcyBhbmQgYW5hbHl6ZSB0aGVtLgotCSAgaWYgKHNlcnZpY2VzICE9IG51bGwgJiYgIXNlcnZpY2VzLmlzRW1wdHkoKSkKLQkgIHsKLQkgICAgSXRlcmF0b3Igc2VydmljZUl0ZXJhdG9yID0gc2VydmljZXMuaXRlcmF0b3IoKTsKLQotCSAgICB3aGlsZSAoc2VydmljZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBzZXJ2aWNlSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgU3RyaW5nIHNlcnZpY2VuYW1lID0gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0gICAgICAgICAgQ29sbGVjdGlvbiBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAocG9ydHMgIT0gbnVsbCAmJiAhcG9ydHMuaXNFbXB0eSgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSBXUy1JIHRvb2xzIG11c3QgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcG9ydCB3aXRoaW4gZWFjaCBzZXJ2aWNlLgotICAgICAgICAgICAgSXRlcmF0b3IgcG9ydEl0ZXJhdG9yID0gcG9ydHMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChwb3J0SXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgcG9ydEl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdzZGxBbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KHNlcnZpY2VuYW1lLCBuYW1lc3BhY2UsIHBvcnQuZ2V0TmFtZSgpLCBXU0RMQW5hbHl6ZXIuUE9SVCk7Ci0JCQkJaGFzQW5hbHl6ZXJDb25maWcgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhdGNoIChXU0lBbmFseXplckV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleGNlcHRpb24gIiArIGUpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIHZhbGlkYXRlIGF0IHRoZSBiaW5kaW5nIGxldmVsIC0gY2hlY2sgZm9yIGV2ZXJ5IGJpbmRpbmcKLSAgICAgIGVsc2UgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgIWJpbmRpbmdzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgYmluZGluZ0l0ZXJhdG9yID0gYmluZGluZ3MuaXRlcmF0b3IoKTsKLQotICAgICAgICB3aGlsZSAoYmluZGluZ0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBiaW5kaW5nSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgU3RyaW5nIGJpbmRpbmduYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdzZGxBbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KG51bGwsIG5hbWVzcGFjZSwgYmluZGluZ25hbWUsIFdTRExBbmFseXplci5CSU5ESU5HKTsKLQkJCWhhc0FuYWx5emVyQ29uZmlnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgcG9ydFR5cGUgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgcG9ydFR5cGUKLSAgICAgIGVsc2UgaWYgKHBvcnRUeXBlcyAhPSBudWxsICYmICFwb3J0VHlwZXMuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBwb3J0VHlwZUl0ZXJhdG9yID0gcG9ydFR5cGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwb3J0VHlwZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBwb3J0VHlwZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgcG9ydFR5cGVuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3c2RsQW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIHBvcnRUeXBlbmFtZSwgV1NETEFuYWx5emVyLlBPUlRUWVBFKTsKLQkJCWhhc0FuYWx5emVyQ29uZmlnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgbWVzc2FnZSBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBtZXNzYWdlCi0gICAgICBlbHNlIGlmIChtZXNzYWdlcyAhPSBudWxsICYmICFtZXNzYWdlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIG1lc3NhZ2VJdGVyYXRvciA9IG1lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgd2hpbGUgKG1lc3NhZ2VJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgbWVzc2FnZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZW5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbEFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QobnVsbCwgbmFtZXNwYWNlLCBtZXNzYWdlbmFtZSwgV1NETEFuYWx5emVyLk1FU1NBR0UpOwotCQkJaGFzQW5hbHl6ZXJDb25maWcgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoV1NJQW5hbHl6ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBBZGQgY29kZSB0byBsb2cgZXJyb3IgCi0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBvbmx5IHJ1biB0aGUgYW5hbHl6ZXIgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGNoZWNrCi0JCWlmKGhhc0FuYWx5emVyQ29uZmlnKQotCQl7Ci0JCSAgLy8gcnVuIHRoZSBjb25mb3JtYW5jZSBjaGVjayBhbmQgYWRkIGVycm9ycyBhbmQgd2FybmluZ3MgYXMgbmVlZGVkCi0JCSAgd3NkbEFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLQkJCSAgCi0JCSAgLy8gSWYgdGhlIGxldmVsIGlzIHN1Z2dlc3QgYWxsIGVycm9ycyBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgd2FybmluZ3MuCi0JCSAgaWYod3NkbEFuYWx5emVyLmdldFdTSVByZWZlcmVuY2VzKCkuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuV0FSTl9OT05fV1NJKSkKLQkJICB7Ci0JCSAgICBhZGRXYXJuaW5ncyh3c2RsQW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIHZhbEluZm8pOwotCQkgIH0KLQkJICBlbHNlCi0JCSAgewotCQkgICAgYWRkRXJyb3JzKHdzZGxBbmFseXplci5nZXRBc3NlcnRpb25FcnJvcnMoKSwgdmFsSW5mbyk7Ci0JCSAgfQotCQkgIGFkZFdhcm5pbmdzKHdzZGxBbmFseXplci5nZXRBc3NlcnRpb25XYXJuaW5ncygpLCB2YWxJbmZvKTsKLQkJfQotICAgICAgfQotCSAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0JICB7Ci0JCS8vIFRPRE86IEFkZCBjb2RlIHRvIGxvZyBlcnJvciAKLQkgICAgdmFsSW5mby5hZGRXYXJuaW5nKFdTSUNvbnN0YW50cy5XU0lfUFJFRklYICsgIkEgcHJvYmxlbSBvY2N1cmVkIHdoaWxlIHJ1bm5pbmcgdGhlIFdTLUkgV1NETCBjb25mb3JtYW5jZSBjaGVjazogIiArIGUsIDEsIDAsIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLQkgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGVycm9yIG1lc3NhZ2VzIHRvIHRoZSB2YWxpZGF0aW9uY29udHJvbGxlci4KLSAgICogCi0gICAqIEBwYXJhbSBlcnJvcnMgVGhlIGxpc3Qgb2YgZXJyb3JzIHRvIGFkZC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSB2YWxpZGF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRXJyb3JzKExpc3QgZXJyb3JzLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIHJlcG9ydFByb2JsZW1zKGVycm9ycywgdmFsSW5mbywgRVJST1IpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB3YXJuaW5nIG1lc3NhZ2VzIHRvIHRoZSB2YWxpZGF0aW9uY29udHJvbGxlci4KLSAgICogCi0gICAqIEBwYXJhbSB3YXJuaW5ncyBUaGUgbGlzdCBvZiB3YXJuaW5ncyB0byBhZGQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFdhcm5pbmdzKExpc3Qgd2FybmluZ3MsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgcmVwb3J0UHJvYmxlbXMod2FybmluZ3MsIHZhbEluZm8sIFdBUk5JTkcpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCB0aGUgcHJvYmxlbXMgc3BlY2lmaWVkIGZvciB0aGUgZ2l2ZW4gdHlwZSB0byB0aGUgdmFsaWRhdGlvbmNvbnRyb2xsZXIuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvYmxlbXMgVGhlIHByb2JsZW1zIHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIG9iamVjdCB0byByZXBvcnQgdGhlIHByb2JsZW1zIHRvLgotICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBtZXNzYWdlcyB0byBhZGQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZXBvcnRQcm9ibGVtcyhMaXN0IHByb2JsZW1zLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbywgaW50IHR5cGUpCi0gIHsKLSAgICAvLyBpZiB0aGVyZSB3ZXJlIG5vIHByb2JsZW1zIGp1c3QgcmV0dXJuCi0gICAgaWYgKHByb2JsZW1zID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICAKLSAgICBJdGVyYXRvciBwcm9ibGVtc0l0ZXJhdG9yID0gcHJvYmxlbXMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAocHJvYmxlbXNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgQXNzZXJ0aW9uRXJyb3IgYXNzZXJ0aW9uZXJyb3IgPSAoQXNzZXJ0aW9uRXJyb3IpIHByb2JsZW1zSXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKHR5cGUgPT0gRVJST1IpCi0gICAgICB7Ci0JCXdzaVZhbGlkID0gZmFsc2U7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIAkJV1NJQ29uc3RhbnRzLldTSV9QUkVGSVggKyAiKCIgKyBhc3NlcnRpb25lcnJvci5nZXRBc3NlcnRpb25JRCgpKyAiKSAiICsgYXNzZXJ0aW9uZXJyb3IuZ2V0RXJyb3JNZXNzYWdlKCksCi0gICAgICAgICAgYXNzZXJ0aW9uZXJyb3IuZ2V0TGluZSgpLAotICAgICAgICAgIGFzc2VydGlvbmVycm9yLmdldENvbHVtbigpLAotICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLQotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSBXQVJOSU5HKQotICAgICAgewotICAgICAgICB2YWxJbmZvLmFkZFdhcm5pbmcoCi0gICAgICAgIAkJV1NJQ29uc3RhbnRzLldTSV9QUkVGSVggKyAiKCIgKyBhc3NlcnRpb25lcnJvci5nZXRBc3NlcnRpb25JRCgpKyAiKSAiICsgYXNzZXJ0aW9uZXJyb3IuZ2V0RXJyb3JNZXNzYWdlKCksCi0gICAgICAgICAgYXNzZXJ0aW9uZXJyb3IuZ2V0TGluZSgpLAotICAgICAgICAgIGFzc2VydGlvbmVycm9yLmdldENvbHVtbigpLAotICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLmNvbnRyb2xsZXIuSVdTRExWYWxpZGF0b3IjaXNWYWxpZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLSAgewotICAgIHJldHVybiB3c2lWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKSB7Ci0JLy8gTm90IHVzZWQuCi0JCi0gIH0KLSAgCi0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL3dzaXZhbGlkYXRlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL3dzaXZhbGlkYXRlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOTA2YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy93c2l2YWxpZGF0ZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoKLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotCi1fRVhDX1VOQUJMRV9UT19WQUxJREFURV9XU0kgPSBVbmFibGUgdG8gdmFsaWRhdGUgV1MtSSBjb25mb3JtYW5jZS4gIEFuIGVycm9yIG9jY3VyZWQgcmVhZGluZyB0aGUgV1NETCBkb2N1bWVudCB7MH0uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzQ1NzlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZmVhYmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWJhOGI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08Y29udGV4dHM+Ci0KLTwhLS1XZWJTZXJ2aWNlQXhpc1Byb3h5UGFnZS5qYXZhLS0+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAwMSI+Ci08IS0tV1NETCB0byBKYXZhIEJpbmRpbmdzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBXZWIgc2VydmljZSBjbGllbnQgd2lsbCBiZSBjcmVhdGVkLiBUaGUgSmF2YSBiZWFuIGNsaWVudCBwcm94eSB0aGF0IGlzIGdlbmVyYXRlZCBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAwMyI+Ci08IS0tRm9sZGVyIGZpZWxkIG9mIHRoZSBXU0RMIHRvIEphdmEgQmluZGluZ3MgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgcHJvamVjdCBhbmQgZm9sZGVyIGluIHdoaWNoIHRoZSBXZWIgc2VydmljZSBjbGllbnQgd2lsbCBiZSBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAwOSI+Ci08IS0tSW5kaWNhdGVzIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBwcm94eSBvciBub3QtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggSmF2YSBiZWFuIGNsaWVudCBwcm94eSB0byB0aGUgV2ViIHNlcnZpY2UuIFRoZSBKYXZhIGJlYW4gY2xpZW50IHByb3h5IHRoYXQgaXMgZ2VuZXJhdGVkIHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXSkIwMDE2Ij4KLTwhLS1TaG93IE1hcHBpbmdzIGNoZWNrYm94IG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBjdXN0b21pemUgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGFja2FnZXMgYW5kIG5hbWVzcGFjZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVdlYlNlcnZpY2VBeGlzTWFwcGluZ3NQYWdlLmphdmEtLT4KLQotPGNvbnRleHQgaWQ9IlBXSk0wMDAxIj4KLTwhLS1XU0RMIHRvIEphdmEgTWFwcGluZ3MgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhbmVsIHRvIGFkZCBjdXN0b21pemVkIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1BeGlzRW1pdHRlclByZWZlcmVuY2VQYWdlLmphdmEtLT4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDAxIj4KLTwhLS1BeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHdpemFyZHMgd2hlbiBnZW5lcmF0aW5nIEF4aXMgV2ViIHNlcnZpY2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwMiI+Ci08IS0tR2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzLS0+Ci08ZGVzY3JpcHRpb24+QnkgZGVmYXVsdCwgV1NETDJKYXZhIG9ubHkgZ2VuZXJhdGVzIGNvZGUgZm9yIHRob3NlIGVsZW1lbnRzIGluIHRoZSBXU0RMIGZpbGUgdGhhdCBhcmUgcmVmZXJlbmNlZC4gU2VsZWN0aW5nIHRoaXMgY2hlY2tib3ggd2lsbCBnZW5lcmF0ZSBjb2RlIGZvciBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGFyZSByZWZlcmVuY2VkLiBCeSBkZWZhdWx0LCB0aGUgc2NvcGUgaXMgYWxsIFdTREwgZmlsZXM7IGlmIGdlbmVyYXRlSW1wb3J0cyhmYWxzZSksIHRoZW4gdGhlIHNjb3BlIGlzIG9ubHkgdGhlIGltbWVkaWF0ZSBXU0RMIGZpbGUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDAzIj4KLTwhLS1FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YWRhdGEtLT4KLTxkZXNjcmlwdGlvbj5JZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uIFdTREwySmF2YSB3aWxsIGNyZWF0ZSBhIHNlcGFyYXRlIGhlbHBlciBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBtZXRhZGF0YSByYXRoZXIgdGhhbiBpbmNsdWRpbmcgaXQgaW4gdGhlIHNrZWxldG9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwNCI+Ci08IS0tUHJlZmVycyBidWlsZGluZyBiZWFucyB0byBzdHJhaWdodCBhcnJheXMgZm9yIHdyYXBwZWQgWE1MIGFycmF5IHR5cGVzLS0+Ci08ZGVzY3JpcHRpb24+SWYgeW91IHdvdWxkIHJhdGhlciBhIHNwZWNpZmljIEphdmFCZWFuIGNsYXNzIChBcnJheU9mU3RyaW5nKSBiZSBnZW5lcmF0ZWQgZm9yIHRoZXNlIHR5cGVzIG9mIHNjaGVtYXMsIHNlbGVjdCB0aGlzIG9wdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDUiPgotPCEtLUFkZCBzY29wZSB0byBkZXBsb3kud3NkZC0tPgotPGRlc2NyaXB0aW9uPlRoaXMgaW5kaWNhdGVzIGhvdyB0byBkZXBsb3kgdGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbi4gCi1BcHBsaWNhdGlvbiB1c2VzIG9uZSBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGFsbCByZXF1ZXN0cy4gCi1SZXF1ZXN0IGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBlYWNoIHJlcXVlc3QuIAotU2Vzc2lvbiBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCBzZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwNiI+Ci08IS0tVGltZW91dC0tPgotPGRlc2NyaXB0aW9uPlRoZSBkZWZhdWx0IGlzIDQ1IHNlY29uZHMuIFVzZSAtMSB0byBkaXNhYmxlIHRoZSB0aW1lb3V0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwNyI+Ci08IS0tTG9vayBmb3IgYWxsb3dlZCBtZXRob2RzIGluIGluaGVyaXRlZCBjbGFzcy0tPgotPGRlc2NyaXB0aW9uPklmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIEphdmEyV1NETCBwYXJzZXIgd2lsbCBsb29rIGludG8gZXh0ZW5kZWQgY2xhc3NlcyB0byBkZXRlcm1pbmUgdGhlIGxpc3Qgb2YgbWV0aG9kcyB0byBleHBvcnQgaW50byB0aGUgV1NETCBmaWxlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwOCI+Ci08IS0tTG9vayBmb3IgYWxsb3dlZCBtZXRob2RzIGluIGluaGVyaXRlZCBjbGFzcy0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSB3aXphcmRzIHdoZW4gZ2VuZXJhdGluZyBBeGlzIFdlYiBzZXJ2aWNlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDkiPgotPCEtLUxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3MtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgd2l6YXJkcyB3aGVuIGdlbmVyYXRpbmcgQXhpcyBXZWIgc2VydmljZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDEwIj4KLTwhLS12YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQy0tPgotPGRlc2NyaXB0aW9uPklmIHNlbGVjdGVkLCB0aGUgdG9vbHMgd2lsbCBleGFtaW5lIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgYW5kIGl0cyB2YWx1ZSB0eXBlcyB0byBkZXRlcm1pbmUgaWYgaXQgc2F0aXNmaWVzIGltcG9ydGFudCByZXF1aXJlbWVudHMgb2YgdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08L2NvbnRleHRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjA5OTc4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08Y29udGV4dHM+Ci0KLTwhLS1XZWJTZXJ2aWNlQXhpc0JlYW5Db25maWdQYWdlLmphdmEtLT4KLTxjb250ZXh0IGlkPSJQQkNGMDAwMSI+Ci08IS0tQmVhbiBJZGVudGl0eSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+T24gdGhpcyBwYWdlIHlvdSBjYW4gc2VsZWN0IHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHRoZSBtZXRob2RzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgV2ViIHNlcnZpY2UuIFlvdSBjYW4gYWxzbyBzZWxlY3QgdGhlIGVuY29kaW5nIHN0eWxlLiBSUEMvRW5jb2RlZCBpcyB0aGUgcmVjb21tZW5kZWQgZW5jb2Rpbmcgc3R5bGUgZm9yIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFRoaXMgZW5jb2RpbmcgbWV0aG9kIGlzIG5vdCBXUy1JIGNvbXBsaWFudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUEJDRjAwMDYiPgotPCEtLVdTREwgRm9sZGVyIGZpZWxkIGluIHRoZSBCZWFuIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBmaWVsZCBsaXN0cyB0aGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZmlsZSBiZWluZyBnZW5lcmF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQkNGMDAwNyI+Ci08IS0tV1NETCBGaWxlIGZpZWxkIG9mIHRoZSBCZWFuIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBmaWVsZCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQuIEFjY2VwdCB0aGUgZGVmYXVsdCBvciBlbnRlciBhIG5ldyBuYW1lLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQkNGMDAxNiI+Ci08IS0tU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gY3VzdG9taXplIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIHBhY2thZ2VzIGFuZCBuYW1lc3BhY2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQk1FMDAwMiI+Ci08IS0tTWV0aG9kcyB0cmVlIG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBmcm9tIHRoZSBhdmFpbGFibGUgSmF2YSBiZWFuIG1ldGhvZHMgd2hpY2ggb25lcyB0byBpbmNsdWRlIGluIHlvdXIgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQk1FMDAxMCI+Ci08IS0tU2VsZWN0IEFsbCBidXR0b24gb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyBidXR0b24gdG8gaW5jbHVkZSBhbGwgbGlzdGVkIG1ldGhvZHMgaW4geW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCTUUwMDExIj4KLTwhLS1EZXNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRoaXMgYnV0dG9uIHRvIHJlbW92ZSBhbGwgbGlzdGVkIG1ldGhvZHMgZnJvbSB5b3VyIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotCi08IS0tV2ViU2VydmljZVNrZWxldG9uQXhpc0NvbmZpZ1BhZ2UuamF2YS0tPgotCi08Y29udGV4dCBpZD0iUEJTQzAwMDEiPgotPCEtLVNrZWxldG9uIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzcGVjaWZ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBKYXZhIGJlYW4gc2tlbGV0b24gYmVpbmcgY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCU0MwMDA0Ij4KLTwhLS1Ta2VsZXRvbiBGb2xkZXIgZmllbGQgb2YgdGhlIFNrZWxldG9uIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBKYXZhIGJlYW4gc2tlbGV0b24gd2lsbCBiZSBjcmVhdGVkLCBvciBhY2NlcHQgdGhlIGRlZmF1bHQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQlNDMDAxNiI+Ci08IS0tU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gY3VzdG9taXplIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIG5hbWVzcGFjZXMgYW5kIHBhY2thZ2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwvY29udGV4dHM+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGRlZjUyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBheGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICBheGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCi1nZW5lcmF0ZVNvdXJjZUJ1bmRsZT1mYWxzZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTUwYmFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AKLXBsdWdpbk5hbWUgICAgID0gV2ViIHNlcnZpY2VzIEF4aXMgY29udGV4dCBzZW5zaXRpdmUgaGVscAotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1M2Q2YzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+Ci0JCTxjb250ZXh0cyBmaWxlPSJheGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aSIvPgotCQk8Y29udGV4dHMgZmlsZT0iYXhpc2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxMTkzZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyXzEuMC4wLmphcgotYmFrCi10ZW1wCi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzVhYTk5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNGY1YmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQkyMDA4LTAxLTA5IEthdGUgUHJpY2UgPGthdGVwQGNhLmlibS5jb20+Ci0JLSBtb2RpZmllZCBmb3IgbmV3IERJVEEtT1QgdmVyc2lvbgotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIzLjAuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3NheGlzYnVpbGRfdG9jLmRpdGFtYXAiIC8+ICAgCi0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249IiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWRlOGQzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4xLjAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGEzZDQ2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3NheGlzYnVpbGRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICB0b3BpY3MvLFwKLSAgICAgICAgICAgICAgIHdzYXhpc19yZWx0YWJsZV90b2MueG1sCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotICAgICAgICAgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YSxcCi0gICAgICAgICAgICAgICB0b3BpY3MvLFwKLSAgICAgICAgICAgICAgIHdzYXhpc19yZWx0YWJsZV90b2MueG1sLFwKLSAgICAgICAgICAgICAgIHdzYXhpc2J1aWxkX3RvYy54bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbCxcCi0gICAgICAgICAgICAgICB0b3BpY3MvKi5kaXRhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9fMi5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L18yLmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlODQwMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L18yLmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MjMyNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjBlMzFmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMjo0OSBFRFQgMjAwNw0KLW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyXG4xLjAuMzAwLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzg3ZTY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEyOjQ5IEVEVCAyMDA3DQotbHVjZW5lPTEuNC4xMDMudjIwMDYwNjAxDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjIuMC52MjAwNjA2MDE/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3Yjk4ODQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEyOjQ5IEVEVCAyMDA3DQotL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2NvbmNlcHRzL2NheGlzdG92ZXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R0b21jYXRzZXJ2Lmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2UzNjgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotCQk8dG9jIGZpbGU9IndzYXhpc2J1aWxkX3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLm1hcGxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLm1hcGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDM4MjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3c2F4aXNidWlsZF90b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c2F4aXNidWlsZF90b2MuZGl0YW1hcCIvPgotICA8L2xpbms+Ci08L21hcGxpc3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4MjhjMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxpbmRleD4KLSAgPGVudHJ5IGtleXdvcmQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL2NheGlzdG92ZXIuaHRtbCNheGlzb3ZlcnZpZXciIHRpdGxlPSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90dG9tY2F0c2Vydi5odG1sI2NyZWF0aW5nYW5hcGFjaGV0b21jYXRzZXJ2ZXIiIHRpdGxlPSJDcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3QiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJza2VsZXRvbiBXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90c2tsd3NkbGEuaHRtbCN0c2tsd3NkbGEiIHRpdGxlPSJDcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZSBjbGllbnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHNhbXBhcHBhLmh0bWwjdHNhbXBhcHBhIiB0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jYXhpc3RvdmVyLmh0bWwjYXhpc292ZXJ2aWV3IiB0aXRsZT0iQ3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgYSBXZWIgc2VydmljZSI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHdzYmVhbmEuaHRtbCN0d3NiZWFuYSIgdGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ic2tlbGV0b24gV2ViIHNlcnZpY2VzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90c2tsd3NkbGEuaHRtbCN0c2tsd3NkbGEiIHRpdGxlPSJDcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2UgY2xpZW50cyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHNhbXBhcHBhLmh0bWwjdHNhbXBhcHBhIiB0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwjY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgdGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJUb21jYXQgc2VydmVyIj4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgc2VydmVycyBmb3IgV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHRvbWNhdHNlcnYuaHRtbCNjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIiB0aXRsZT0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9IkphdmEgYmVhbnMiPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R3c2JlYW5hLmh0bWwjdHdzYmVhbmEiIHRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODZmYjg3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSA9IEF4aXMgV2ViIHNlcnZpY2VzIGRvY3VtZW50YXRpb24KLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NlMzY4MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0JCTx0b2MgZmlsZT0id3NheGlzYnVpbGRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS5sdWNlbmVTZWFyY2hQYXJ0aWNpcGFudHMiPgotICAgICAgPGJpbmRpbmcgcGFydGljaXBhbnRJZD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLnhodG1sIi8+Ci0gICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyOTZhYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy9jYXhpc3RvdmVyLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iDQotICJjb25jZXB0LmR0ZCI+DQotPGNvbmNlcHQgaWQ9ImF4aXNvdmVydmlldyIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+Q3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50PC90aXRsZT4NCi08c2hvcnRkZXNjPlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3INCi10aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5BcGFjaGUgQXhpczEgT3ZlcnZpZXc8L3RpdGxlPjxwPkF4aXMgaXMgdGhlIHRoaXJkIGdlbmVyYXRpb24NCi1vZiB0aGUgQXBhY2hlIFNPQVAgaW1wbGVtZW50YXRpb24uIEl0IGV2b2x2ZWQgZnJvbSBBcGFjaGUgU09BUCB0byBtYWtlIHRoZQ0KLVNPQVAgZW5naW5lIG1vcmUgZmxleGlibGUsIGNvbmZpZ3VyYWJsZSwgYW5kIGFibGUgdG8gaGFuZGxlIGJvdGggU09BUCBhbmQNCi10aGUgdXBjb21pbmcgWE1MIFByb3RvY29sIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIG9wZW4tc291cmNlIGVmZm9ydC4gQXhpcw0KLWlzIGJhc2VkIG9uIEpTUiAxMDEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQVBJcyBmb3IgWE1MIGJhc2VkIFJQQyAoYWxzbyBrbm93bg0KLWFzIEpBWC1SUEMpLiBKU1IgMTAxIHByb3ZpZGVzIGEgc2luZ2xlIGludGVyZmFjZSB0byBhbnkgWE1MLWJhc2VkIFJQQyBtZWNoYW5pc20sDQotaW5jbHVkaW5nIFNPQVAuPC9wPjxwPldlYiBzZXJ2aWNlcyBhcHBsaWNhdGlvbiBzZXJ2ZXIgdXNlcyBBeGlzIHdpdGhpbiBhIHNlcnZsZXQNCi10byBwcm9jZXNzIHRoZSBpbmNvbWluZyBtZXNzYWdlLCBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20gdGhlIG1lc3NhZ2UgaGVhZGVycywNCi1hbmQgcGF5bG9hZHMsIGFzIHdlbGwgYXMgY29uZm9ybWluZyB0byB0aGUgcGFydGljdWxhciBSUEMgc2VtYW50aWNzLiA8L3A+PC9zZWN0aW9uPg0KLTwvY29uYm9keT4NCi08cmVsYXRlZC1saW5rcz4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5XZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5KQVgtUlBDPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ1NzU4Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgb3ZlcnZpZXciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgb3ZlcnZpZXciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHRvbWNhdHNlcnYuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3R3c2JlYW5hLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90c2tsd3NkbGEuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RzYW1wYXBwYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImF4aXNvdmVydmlldyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iYXhpc292ZXJ2aWV3Ij48YSBuYW1lPSJheGlzb3ZlcnZpZXciPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IKLXRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkFwYWNoZSBBeGlzMSBPdmVydmlldzwvaDQ+PHA+QXhpcyBpcyB0aGUgdGhpcmQgZ2VuZXJhdGlvbgotb2YgdGhlIEFwYWNoZSBTT0FQIGltcGxlbWVudGF0aW9uLiBJdCBldm9sdmVkIGZyb20gQXBhY2hlIFNPQVAgdG8gbWFrZSB0aGUKLVNPQVAgZW5naW5lIG1vcmUgZmxleGlibGUsIGNvbmZpZ3VyYWJsZSwgYW5kIGFibGUgdG8gaGFuZGxlIGJvdGggU09BUCBhbmQKLXRoZSB1cGNvbWluZyBYTUwgUHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBXM0Mgb3Blbi1zb3VyY2UgZWZmb3J0LiBBeGlzCi1pcyBiYXNlZCBvbiBKU1IgMTAxIEphdmHihKIgQVBJcyBmb3IgWE1MIGJhc2VkIFJQQyAoYWxzbyBrbm93bgotYXMgSkFYLVJQQykuIEpTUiAxMDEgcHJvdmlkZXMgYSBzaW5nbGUgaW50ZXJmYWNlIHRvIGFueSBYTUwtYmFzZWQgUlBDIG1lY2hhbmlzbSwKLWluY2x1ZGluZyBTT0FQLjwvcD4KLTxwPldlYiBzZXJ2aWNlcyBhcHBsaWNhdGlvbiBzZXJ2ZXIgdXNlcyBBeGlzIHdpdGhpbiBhIHNlcnZsZXQKLXRvIHByb2Nlc3MgdGhlIGluY29taW5nIG1lc3NhZ2UsIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbWVzc2FnZSBoZWFkZXJzLAotYW5kIHBheWxvYWRzLCBhcyB3ZWxsIGFzIGNvbmZvcm1pbmcgdG8gdGhlIHBhcnRpY3VsYXIgUlBDIHNlbWFudGljcy4gPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L3N0cm9uZz48YnIgLz4KLUlmIHlvdSBwbGFuIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIHRoYXQgdXNlcyBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdHdzYmVhbmEuaHRtbCI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UsIGNvbmZpZ3VyaW5nIGl0IGZvciBkZXBsb3ltZW50LCBhbmQgZGVwbG95aW5nIHRoZSBXZWIgc2VydmljZSB0byBhIHNlcnZlci4gT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlIGNsaWVudCBwcm94eSBhbmQgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLiBXaGVuIHlvdSBoYXZlIGNvbXBsZXRlZCB0ZXN0aW5nLCB5b3UgY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3Rza2x3c2RsYS5odG1sIj5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbiBmcm9tIGFuIGV4aXN0aW5nIFdTREwgZG9jdW1lbnQuIFRoZSBza2VsZXRvbiBiZWFuIGNvbnRhaW5zIGEgc2V0IG9mIG1ldGhvZHMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBvcGVyYXRpb25zIGRlc2NyaWJlZCBpbiB0aGUgV1NETCBkb2N1bWVudC4gV2hlbiB0aGUgYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UgYnkgZWRpdGluZyB0aGUgYmVhbi48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdHNhbXBhcHBhLmh0bWwiPkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YSBiZWFuIHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIGEgcHJveHkgZmlsZS48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuaHRtbCI+SkFYLVJQQzwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2FtcGFwcGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkzMzBkOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2FtcGFwcGEuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRzYW1wYXBwYSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+R2VuZXJhdGluZyBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24NCi1mcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+R2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tDQotYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+VGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIg0KLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4NCi1wcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cNCi10byBjb2RlIGEgcHJveHkgZmlsZS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlIGNsaWVudHM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5XZWIgc2VydmljZQ0KLWNsaWVudHM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8L3A+PG9sPg0KLTxsaSBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvY3JlYXRldG9tY2F0bGluayI+PC9saT4NCi08bGk+RGlzY292ZXIgYW5kIGltcG9ydCBhIFdTREwgZG9jdW1lbnQgaW50byB0aGUgV2ViIHByb2plY3QuIFlvdSBjYW4gb25seQ0KLXVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+DQotPC9vbD48L3ByZXJlcT4NCi08Y29udGV4dD5UbyBnZW5lcmF0ZSBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24NCi1mcm9tIGEgZGlzY292ZXJlZCBXU0RMIGRvY3VtZW50OjwvY29udGV4dD4NCi08c3RlcHM+DQotPHN0ZXA+PGNtZD5Td2l0Y2ggdG8gdGhlIEoyRUUgcGVyc3BlY3RpdmUgKDx1aWNvbnRyb2w+V2luZG93ID4gT3BlbiBQZXJzcGVjdGl2ZQ0KLT4gSjJFRTwvdWljb250cm9sPikuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIE5hdmlnYXRvciB2aWV3LCBzZWxlY3QgdGhlIFdlYiBwcm9qZWN0IGluIHdoaWNoIHlvdSB3YW50DQotdG8gZ2VuZXJhdGUgYSBzYW1wbGUgYXBwbGljYXRpb24uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmlsZSA+IE5ldyA+IE90aGVyPC91aWNvbnRyb2w+LiBTZWxlY3QgIDx1aWNvbnRyb2w+V2ViDQotU2VydmljZXM8L3VpY29udHJvbD4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLg0KLVNlbGVjdCB0aGUgIDx1aWNvbnRyb2w+V2ViIFNlcnZpY2UgQ2xpZW50PC91aWNvbnRyb2w+IHdpemFyZC4gQ2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZXMgcGFnZTogPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+RW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VkDQotdG8gZ2VuZXJhdGUgdGhlIGNsaWVudC48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgdGhlIHR5cGUgb2YgcHJveHkgdG8gYmUgZ2VuZXJhdGVkPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQNCi10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOjwvY21kPjxpbmZvPjx1bD4NCi08bGk+RGV2ZWxvcDogdGhpcyB3aWxsIGRldmVsb3AgdGhlIFdTREwgZGVmaW5pdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlDQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4NCi10aGUgZ2VuZXJhdGVkIGNvZGUgYW5kIEphdmEgZmlsZXMsIGFzIHdlbGwgYXMgY29weWluZyB0aGUgQXhpcyBKQVJzLi48L2xpPg0KLTxsaT5Bc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQNCi1nZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIuPC9saT4NCi08bGk+RGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBzZXJ2aWNlLjwvbGk+DQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlDQotdGFyZ2V0IHNlcnZlci48L2xpPg0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQNCi1vbiBpdC4gVGhlIHNlcnZlci1jb25maWcud3NkZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLjwvbGk+DQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaA0KLWFzIHVzaW5nIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBvciBzYW1wbGUgSlNQcy48L2xpPg0KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91DQotd2FudCB0byBkZXBsb3kgeW91ciBjbGllbnQgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkNCi1hIGRpZmZlcmVudCBzZXJ2ZXIuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQ0KLXdhbnQgdG8gZGVwbG95IHlvdXIgY2xpZW50IHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQ0KLWEgZGlmZmVyZW50IHJ1bnRpbWUuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSBjbGllbnQgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdA0KLXNlbGVjdGVkIGluIHlvdXIgd29ya3NwYWNlIGlzIGRpc3BsYXllZC4gVG8gc2VsZWN0IGEgZGlmZmVyZW50IHByb2plY3QgYW5kDQotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9jbWQ+PGluZm8+RW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc2VsZWN0ZWQNCi1hcyB0aGUgQ2xpZW50IFdlYiBQcm9qZWN0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBTZXJ2aWNlIFdlYiBQcm9qZWN0LCBvciB0aGUNCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9pbmZvPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPk1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgc2VuZCB0aGUgV2ViIHNlcnZpY2UgdHJhZmZpYw0KLXRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLCB3aGljaCBhbGxvd3MgeW91IHRvIHdhdGNoIHRoZSBTT0FQIHRyYWZmaWMgZ2VuZXJhdGVkDQotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQ0KLXlvdSBjYW4gbWFudWFsbHkgc2V0IHVwIGEgVENQL0lQIG1vbml0b3IgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuZGl0YSINCi1zY29wZT0icGVlciI+VXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC94cmVmPjwvY21kPjwvc3Vic3RlcD4NCi08L3N1YnN0ZXBzPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IFRoaXMgcGFuZWwgc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4NCi1JdCBsaXN0cyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBwcm94eSB3aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHlvdSBjYW4gb3B0aW9uYWxseQ0KLWNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzIGFuZCBwYWNrYWdlcy48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBOYW1lc3BhY2UgdG8gUGFja2FnZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQNCi0gPHVpY29udHJvbD5EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIG5hbWVzcGFjZSB0byBwYWNrYWdlPC91aWNvbnRyb2w+IG9uDQotdGhlIHByZXZpb3VzIHBhZ2UsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhZ2UgYnkNCi1jbGlja2luZyAgPHVpY29udHJvbD5BZGQ8L3VpY29udHJvbD4uIEFsdGVybmF0ZWx5LCB5b3UgY2FuIGNsaWNrICA8Yj5JbXBvcnQ8L2I+IHRvDQotaW1wb3J0IGN1c3RvbSBtYXBwaW5nIHBhaXJzIGZyb20gYSAgPHN5c3RlbW91dHB1dD4ucHJvcGVydGllczwvc3lzdGVtb3V0cHV0PiBmaWxlLg0KLVRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0ICA8Y29kZXBoPjx2YXJuYW1lPm5hbWVzcGFjZT1wYWNrYWdlPC92YXJuYW1lPjwvY29kZXBoPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBUaGlzIHBhZ2UgZGlzcGxheXMgaWYgeW91IHNlbGVjdGVkDQotdG8gdGVzdCB5b3VyIGNsaWVudC4gU2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IHRoYXQgeW91IHdpbGwgdXNlIHRvIHRlc3QgdGhlDQotcHJveHksIGFuZCB0aGUgbWV0aG9kcyB0aGF0IHlvdSB3YW50IGluY2x1ZGVkIGluIHRoZSBwcm94eS4gTm90ZSB0aGF0IHRoZQ0KLVVuaXZlcnNhbCBUZXN0IENsaWVudCAoVVRDKSBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBXZWIgc2VydmljZSBjbGllbnRzIGRlcGxveWVkDQotb24gPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXZWJTcGhlcmUiPldlYlNwaGVyZTwvdG0+IHNlcnZlcnMuPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LiBJZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0DQotdGhlIHByb3h5LCB0aGUgdGVzdCBjbGllbnQgd2lsbCBvcGVuIGluIGEgYnJvd3NlciB3aW5kb3cuPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHJlc3VsdD48cD5UaGUgZ2VuZXJhdGVkIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlDQotY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMNCi1ob3cgdG8gY29kZSB0aGUgcHJveHkgZmlsZS48L3A+PHA+T25jZSB5b3UgaGF2ZSBnZW5lcmF0ZWQgeW91ciA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGllbnQNCi1wcm94eSwgeW91IG1heSB0ZXN0IHRoZSBtZXRob2RzIG9mIHRoZSBXZWIgc2VydmljZSB0aHJvdWdoIHRoZSBwcm94eSB1c2luZw0KLVdlYiBTZXJ2aWNlcyBzYW1wbGUgSlNQcyBvciB0aGUgVW5pdmVyc2FsIHRlc3QgY2xpZW50LjwvcD48dWwgb3V0cHV0Y2xhc3M9IndzY2xpZW50dGVzdG9wdGlvbnMiPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywNCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogPGNvZGVwaD5odHRwOi8vbG9jYWxob3N0OiA8dmFybmFtZT5wb3J0PC92YXJuYW1lPi8gPHZhcm5hbWU+V2ViUHJvamVjdDwvdmFybmFtZT5DbGllbnQvc2FtcGxlPGkNCi0+QmVhbk5hbWU8L2k+LyA8dmFybmFtZT5XZWJTZXJ2aWNlTmFtZTwvdmFybmFtZT4vVGVzdENsaWVudC5qc3A8L2NvZGVwaD4gWW91DQotY2FuIHVzZSB0aGlzIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSBieSBzZWxlY3RpbmcgYSBtZXRob2QsDQotZW50ZXJpbmcgYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8dWljb250cm9sPkludm9rZTwvdWljb250cm9sPi4NCi1UaGUgcmVzdWx0IG9mIHRoZSBtZXRob2Qgd2lsbCBkaXNwbGF5IGluIHRoZSByZXN1bHRzIHBhbmUuPC9saT4NCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwNCi10aGUgRXhwbG9yZXIgd2lsbCBvcGVuLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3Ugd2FudCB0byB0ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQNCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8Yj5HbzwvYj4uIFRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS48L2xpPg0KLTwvdWw+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbg0KLWRldmVsb3BtZW50IGRvY3VtZW50YXRpb24uPC9wPjwvcmVzdWx0Pg0KLTwvdGFza2JvZHk+DQotPHJlbGF0ZWQtbGlua3M+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4NCi08L2xpbmtsaXN0Pg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiDQotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3RzYW1wYXBwYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NWNiYWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YSBiZWFuIHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIGEgcHJveHkgZmlsZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyBhIEphdmEgYmVhbiBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cgdG8gY29kZSBhIHByb3h5IGZpbGUuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZSBjbGllbnRzLCBXZWIgc2VydmljZXMsIFdlYiBzZXJ2aWNlIGNsaWVudHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlIGNsaWVudHMsIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2UgY2xpZW50cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHNhbXBhcHBhIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+R2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tCi1hIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHNhbXBhcHBhIj48YSBuYW1lPSJ0c2FtcGFwcGEiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24KLWZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YeKEoiBiZWFuCi1wcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cKLXRvIGNvZGUgYSBwcm94eSBmaWxlLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHA+UHJlcmVxdWlzaXRlczo8L3A+Ci08b2w+Ci08bGk+SWYgeW91IGFyZSB1c2luZyB0aGUgQXBhY2hlIEpha2FydGEgVG9tY2F0IHNlcnZsZXQKLWNvbnRhaW5lciBhcyB5b3VyIHNlcnZlciwgeW91IG11c3QgaW5zdGFsbCBpdCwgY29uZmlndXJlIGFuIGluc3RhbmNlIG9mIGl0LAotYW5kIGNyZWF0ZSBhIFdlYiBwcm9qZWN0IHRhcmdldGVkIHRvIGl0IGFzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSJ0dG9tY2F0c2Vydi5odG1sIj5DcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3Q8L2E+PC9saT4KLQotPGxpPkRpc2NvdmVyIGFuZCBpbXBvcnQgYSBXU0RMIGRvY3VtZW50IGludG8gdGhlIFdlYiBwcm9qZWN0LiBZb3UgY2FuIG9ubHkKLXVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gZ2VuZXJhdGUgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24KLWZyb20gYSBkaXNjb3ZlcmVkIFdTREwgZG9jdW1lbnQ6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5Td2l0Y2ggdG8gdGhlIEoyRUUgcGVyc3BlY3RpdmUgKDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdyAmZ3Q7IE9wZW4gUGVyc3BlY3RpdmUKLSZndDsgSjJFRTwvc3Bhbj4pLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIE5hdmlnYXRvciB2aWV3LCBzZWxlY3QgdGhlIFdlYiBwcm9qZWN0IGluIHdoaWNoIHlvdSB3YW50Ci10byBnZW5lcmF0ZSBhIHNhbXBsZSBhcHBsaWNhdGlvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlICZndDsgTmV3ICZndDsgT3RoZXI8L3NwYW4+LiBTZWxlY3QgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYgotU2VydmljZXM8L3NwYW4+IGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHZhcmlvdXMgV2ViIHNlcnZpY2Ugd2l6YXJkcy4KLVNlbGVjdCB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlIENsaWVudDwvc3Bhbj4gd2l6YXJkLiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlcyBwYWdlOiA8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPkVudGVyIHRoZSBVUkkgdG8gdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZmlsZSB0aGF0IHdpbGwgYmUgdXNlZAotdG8gZ2VuZXJhdGUgdGhlIGNsaWVudC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHR5cGUgb2YgcHJveHkgdG8gYmUgZ2VuZXJhdGVkPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQKLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6PC9zcGFuPiA8dWw+Ci08bGk+RGV2ZWxvcDogdGhpcyB3aWxsIGRldmVsb3AgdGhlIFdTREwgZGVmaW5pdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlCi1XZWIgc2VydmljZS4gVGhpcyBpbmNsdWRlcyBzdWNoIHRhc2tzIGFzIGNyZWF0aW5nIHRoZSBtb2R1bGVzIHdoaWNoIHdpbGwgY29udGFpbgotdGhlIGdlbmVyYXRlZCBjb2RlIGFuZCBKYXZhIGZpbGVzLCBhcyB3ZWxsIGFzIGNvcHlpbmcgdGhlIEF4aXMgSkFScy4uPC9saT4KLQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudAotZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyLjwvbGk+Ci0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4KLQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlCi10YXJnZXQgc2VydmVyLjwvbGk+Ci0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQKLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4KLQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaAotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIGNsaWVudCB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgc2VydmVyLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHJ1bnRpbWU6IHRoZSBkZWZhdWx0IHJ1bnRpbWUgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgY2xpZW50IHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgcnVudGltZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIGNsaWVudCBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9zcGFuPiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5Nb25pdG9yIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIHNlbmQgdGhlIFdlYiBzZXJ2aWNlIHRyYWZmaWMKLXRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLCB3aGljaCBhbGxvd3MgeW91IHRvIHdhdGNoIHRoZSBTT0FQIHRyYWZmaWMgZ2VuZXJhdGVkCi1ieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuIEFsdGVybmF0ZWx5Ci15b3UgY2FuIG1hbnVhbGx5IHNldCB1cCBhIFRDUC9JUCBtb25pdG9yIGFzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwiPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvYT48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IFRoaXMgcGFuZWwgc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4KLUl0IGxpc3RzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIHByb3h5IHdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5Ci1jcmVhdGUgY3VzdG9tIG1hcHBpbmdzIGJldHdlZW4gbmFtZXNwYWNlcyBhbmQgcGFja2FnZXMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZSBOYW1lc3BhY2UgdG8gUGFja2FnZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIG5hbWVzcGFjZSB0byBwYWNrYWdlPC9zcGFuPiBvbgotdGhlIHByZXZpb3VzIHBhZ2UsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhZ2UgYnkKLWNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPHN0cm9uZz5JbXBvcnQ8L3N0cm9uZz4gdG8KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDx0dCBjbGFzcz0ic3lzb3V0Ij4ucHJvcGVydGllczwvdHQ+IGZpbGUuCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPHNhbXAgY2xhc3M9ImNvZGVwaCI+PHZhciBjbGFzcz0idmFybmFtZSI+bmFtZXNwYWNlPXBhY2thZ2U8L3Zhcj48L3NhbXA+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBUaGlzIHBhZ2UgZGlzcGxheXMgaWYgeW91IHNlbGVjdGVkCi10byB0ZXN0IHlvdXIgY2xpZW50LiBTZWxlY3QgdGhlIHRlc3QgZmFjaWxpdHkgdGhhdCB5b3Ugd2lsbCB1c2UgdG8gdGVzdCB0aGUKLXByb3h5LCBhbmQgdGhlIG1ldGhvZHMgdGhhdCB5b3Ugd2FudCBpbmNsdWRlZCBpbiB0aGUgcHJveHkuIE5vdGUgdGhhdCB0aGUKLVVuaXZlcnNhbCBUZXN0IENsaWVudCAoVVRDKSBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBXZWIgc2VydmljZSBjbGllbnRzIGRlcGxveWVkCi1vbiBXZWJTcGhlcmU8c3VwPsKuPC9zdXA+IHNlcnZlcnMuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+LiBJZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0Ci10aGUgcHJveHksIHRoZSB0ZXN0IGNsaWVudCB3aWxsIG9wZW4gaW4gYSBicm93c2VyIHdpbmRvdy48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIGdlbmVyYXRlZCBKYXZhIGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlCi1jYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcwotaG93IHRvIGNvZGUgdGhlIHByb3h5IGZpbGUuPC9wPgotPHA+T25jZSB5b3UgaGF2ZSBnZW5lcmF0ZWQgeW91ciBKYXZhIGNsaWVudAotcHJveHksIHlvdSBtYXkgdGVzdCB0aGUgbWV0aG9kcyBvZiB0aGUgV2ViIHNlcnZpY2UgdGhyb3VnaCB0aGUgcHJveHkgdXNpbmcKLVdlYiBTZXJ2aWNlcyBzYW1wbGUgSlNQcyBvciB0aGUgVW5pdmVyc2FsIHRlc3QgY2xpZW50LjwvcD4KLTx1bCBjbGFzcz0id3NjbGllbnR0ZXN0b3B0aW9ucyI+Ci08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5IHVzaW5nIFdlYiBzZXJ2aWNlIEpTUHMsCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL2xvY2FsaG9zdDogPHZhciBjbGFzcz0idmFybmFtZSI+cG9ydDwvdmFyPi8gPHZhciBjbGFzcz0idmFybmFtZSI+V2ViUHJvamVjdDwvdmFyPkNsaWVudC9zYW1wbGU8ZW0+QmVhbk5hbWU8L2VtPi8gPHZhciBjbGFzcz0idmFybmFtZSI+V2ViU2VydmljZU5hbWU8L3Zhcj4vVGVzdENsaWVudC5qc3A8L3NhbXA+IFlvdQotY2FuIHVzZSB0aGlzIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSBieSBzZWxlY3RpbmcgYSBtZXRob2QsCi1lbnRlcmluZyBhIHZhbHVlIGZvciB0aGUgbWV0aG9kLCBhbmQgY2xpY2tpbmcgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkludm9rZTwvc3Bhbj4uCi1UaGUgcmVzdWx0IG9mIHRoZSBtZXRob2Qgd2lsbCBkaXNwbGF5IGluIHRoZSByZXN1bHRzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsCi10aGUgRXhwbG9yZXIgd2lsbCBvcGVuLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3Ugd2FudCB0byB0ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQKLWluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4uIFRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS48L2xpPgotCi08L3VsPgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbgotZGV2ZWxvcG1lbnQgZG9jdW1lbnRhdGlvbi48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2NheGlzdG92ZXIuaHRtbCIgdGl0bGU9IlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IgdGhlIG9wZW4gQXBhY2hlIEF4aXMgcGxhdGZvcm0uIj5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIj5XU0RMIGRvY3VtZW50czwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNrbHdzZGxhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3ODgzNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICIuLi8uLi9kdGQvdGFzay5kdGQiPg0KLTx0YXNrIGlkPSJ0c2tsd3NkbGEiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlDQotQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+Q3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlDQotQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIHNrZWxldG9uIGJlYW4NCi1mcm9tIGFuIGV4aXN0aW5nIFdTREwgZG9jdW1lbnQuIFRoZSBza2VsZXRvbiBiZWFuIGNvbnRhaW5zIGEgc2V0IG9mIG1ldGhvZHMNCi10aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQ0KLWJlYW4gaXMgY3JlYXRlZCwgZWFjaCBtZXRob2QgaGFzIGEgdHJpdmlhbCBpbXBsZW1lbnRhdGlvbiB0aGF0IHlvdSByZXBsYWNlDQotYnkgZWRpdGluZyB0aGUgYmVhbi48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPnNrZWxldG9uIFdlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPnNrZWxldG9uDQotV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keT4NCi08cHJlcmVxPjxwPlByZXJlcXVpc2l0ZXM6PC9wPjxvbD4NCi08bGkgY29ucmVmPSJ0d3NiZWFuYS5kaXRhI3R3c2JlYW5hL2NyZWF0ZXRvbWNhdGxpbmsiPjwvbGk+DQotPGxpPkNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUgaW50byB0aGUgV2ViIENvbnRlbnQgZm9sZGVyIG9mIHRoZSBXZWIgcHJvamVjdC4NCi1Zb3UgY2FuIG9ubHkgdXNlIGEgV1NETCBmaWxlIHRoYXQgY29udGFpbnMgYSBzZXJ2aWNlIGVsZW1lbnQuPC9saT4NCi08L29sPjwvcHJlcmVxPg0KLTxjb250ZXh0PlRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUgdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lDQotZW52aXJvbm1lbnQ6PC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPlN3aXRjaCB0byB0aGUgSjJFRSBwZXJzcGVjdGl2ZSAoPHVpY29udHJvbD5XaW5kb3cgPiBPcGVuIFBlcnNwZWN0aXZlDQotPiBKMkVFPC91aWNvbnRyb2w+KS48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LCBzZWxlY3QgdGhlIFdTREwgZmlsZSB0aGF0IHlvdSBjcmVhdGVkDQotb3IgaW1wb3J0ZWQgaW50byB0aGUgV2ViIENvbnRlbnQgZm9sZGVyIG9mIHlvdXIgV2ViIHByb2plY3QuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmlsZSA+IE5ldyA+IE90aGVyPC91aWNvbnRyb2w+LiBTZWxlY3QgIDx1aWNvbnRyb2w+V2ViDQotU2VydmljZXM8L3VpY29udHJvbD4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLg0KLVNlbGVjdCB0aGUgIDx1aWNvbnRyb2w+V2ViIFNlcnZpY2U8L3VpY29udHJvbD4gd2l6YXJkLiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBwYWdlOiBzZWxlY3QgIDx1aWNvbnRyb2w+VG9wIGRvd24gSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC91aWNvbnRyb2w+IGFzDQoteW91ciBXZWIgc2VydmljZSB0eXBlLCBhbmQgc2VsZWN0IHRoZSBhcnRpZmFjdCBmcm9tIHdoaWNoIHRoZSBzZXJ2aWNlIHdpbGwNCi1iZSBjcmVhdGVkLjwvY21kPg0KLTxzdWJzdGVwcyBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvY3JlYXRlc3RlcDR1bCI+DQotPHN1YnN0ZXA+PGNtZD48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZXMgU2tlbGV0b24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQmVhbiBDb25maWd1cmF0aW9uIHBhZ2U6IFNlbGVjdCB0aGUNCi1mb2xkZXIgd2hlcmUgdGhlIGdlbmVyYXRlZCA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiB3aWxsIGJlIHN0b3JlZC4gSWYgeW91IHdhbnQgdG8gcmV2aWV3DQotb3IgZWRpdCB0aGUgbWFwcGluZ3MgYmV0d2VlbiBwYWNrYWdlcyBhbmQgbmFtZXNwYWNlcywgc2VsZWN0IHRoZSAgPHVpY29udHJvbD5EZWZpbmUNCi1jdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2U8L3VpY29udHJvbD4gY2hlY2sgYm94LiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZA0KLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3VpY29udHJvbD4gb24NCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsDQotYnkgY2xpY2tpbmcgIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPGI+SW1wb3J0PC9iPiB0bw0KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDxzeXN0ZW1vdXRwdXQ+LnByb3BlcnRpZXM8L3N5c3RlbW91dHB1dD4gZmlsZS4NCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPGNvZGVwaD48dmFybmFtZT5uYW1lc3BhY2U9cGFja2FnZTwvdmFybmFtZT48L2NvZGVwaD4uDQotQ2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBUZXN0IHBhZ2U6IElmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSwNCi1zZWxlY3QgdGhlIHRlc3QgZmFjaWxpdHkgZm9yIHRoZSBnZW5lcmF0ZWQgV2ViIHNlcnZpY2UuIFRoaXMgd2lsbCBvcGVuIHRoZQ0KLVdlYiBzZXJ2aWNlIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvDQotdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uDQotVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksDQotdGhpcyBwYWdlIHNob3dzIHRoZSBvcHRpb25zIGZvciB0aGUgcHJveHkuIEl0IGxpc3RzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIHByb3h5DQotd2lsbCBiZSBnZW5lcmF0ZWQsIGFuZCB5b3UgY2FuIG9wdGlvbmFsbHkgY3JlYXRlIGN1c3RvbSBtYXBwaW5ncyBiZXR3ZWVuIG5hbWVzcGFjZXMNCi1hbmQgcGFja2FnZXMuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgQ2xpZW50IFRlc3QgcGFnZTogVXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGZvbGxvd2luZw0KLW9wdGlvbnM6IDwvY21kPg0KLTxzdWJzdGVwcz4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB5b3VyIHRlc3QgZmFjaWxpdHkuIFlvdSBjYW4gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5DQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L2NtZD4NCi08L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5JZiB5b3Ugc2VsZWN0ZWQgdG8gdGVzdCB0aGUgcHJveHkgdGhyb3VnaCBhIEpTUCwgeW91IGNhbiBzZWxlY3QNCi10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdA0KLXdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEpTUC48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgIDx1aWNvbnRyb2w+UnVuIHRlc3Qgb24gc2VydmVyPC91aWNvbnRyb2w+IHRvIHN0YXJ0IHRoZQ0KLXNlcnZlciBmb3IgeW91IGF1dG9tYXRpY2FsbHkuPC9jbWQ+PC9zdWJzdGVwPg0KLTwvc3Vic3RlcHM+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgUHVibGljYXRpb24gcGFnZTogSWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcHVibGlzaCB5b3VyDQotV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB1c2UgdGhpcyBwYWdlIHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyDQotYW5kIHNlbGVjdCB0aGUgVURESSByZWdpc3RyeSB0byB3aGljaCB0aGUgV2ViIHNlcnZpY2Ugd2lsbCBiZSBwdWJsaXNoZWQuIENsaWNrDQotIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxyZXN1bHQgY29ucmVmPSJ0d3NiZWFuYS5kaXRhI3R3c2JlYW5hL2F4aXN3c2NyZWF0ZXJlc3VsdCI+QWZ0ZXIgdGhlIFdlYiBzZXJ2aWNlDQotaGFzIGJlZW4gY3JlYXRlZCwgdGhlIGZvbGxvd2luZyBtYXkgb2NjdXIgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zIHlvdSBzZWxlY3RlZDogPHVsPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywNCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogPGNvZGVwaD5odHRwOi8vbG9jYWxob3N0OiA8dmFybmFtZT5wb3J0PC92YXJuYW1lPi8gPHZhcm5hbWU+V2ViUHJvamVjdDwvdmFybmFtZT5DbGllbnQvc2FtcGxlPGkNCi0+QmVhbk5hbWU8L2k+Lzx2YXJuYW1lPldlYlNlcnZpY2VOYW1lPC92YXJuYW1lPi9UZXN0Q2xpZW50LmpzcDwvY29kZXBoPiBZb3UNCi1jYW4gdXNlIHRoaXMgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJ5IHNlbGVjdGluZyBhIG1ldGhvZCwNCi1lbnRlcmluZyBhIHZhbHVlIGZvciB0aGUgbWV0aG9kLCBhbmQgY2xpY2tpbmcgIDx1aWNvbnRyb2w+SW52b2tlPC91aWNvbnRyb2w+Lg0KLVRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZCB3aWxsIGRpc3BsYXkgaW4gdGhlIHJlc3VsdHMgcGFuZS48L2xpPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLA0KLXRoZSBFeHBsb3JlciB3aWxsIG9wZW4uIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvIHRlc3QsIGVudGVyIHRoZSByZXF1aXJlZA0KLWluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLjwvbGk+DQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyDQotaXMgbGF1bmNoZWQgZGlzcGxheWluZyB0aGUgcGFnZSByZXF1aXJlZCB0byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UuIEZvbGxvdw0KLXRoZSBpbnN0cnVjdGlvbnMgaW4gPHZhcm5hbWU+UHVibGlzaGluZyB0aGUgV2ViIHNlcnZpY2U8L3Zhcm5hbWU+IHRvIGNvbXBsZXRlDQotdGhpcyB0YXNrLjwvbGk+DQotPC91bD48L3Jlc3VsdD4NCi08L3Rhc2tib2R5Pg0KLTxyZWxhdGVkLWxpbmtzPg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiDQotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3Rza2x3c2RsYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNrbHdzZGxhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MjJlNGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNrbHdzZGxhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXZWIgc2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBza2VsZXRvbiBiZWFuIGZyb20gYW4gZXhpc3RpbmcgV1NETCBkb2N1bWVudC4gVGhlIHNrZWxldG9uIGJlYW4gY29udGFpbnMgYSBzZXQgb2YgbWV0aG9kcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZSBiZWFuIGlzIGNyZWF0ZWQsIGVhY2ggbWV0aG9kIGhhcyBhIHRyaXZpYWwgaW1wbGVtZW50YXRpb24gdGhhdCB5b3UgcmVwbGFjZSBieSBlZGl0aW5nIHRoZSBiZWFuLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbiBmcm9tIGFuIGV4aXN0aW5nIFdTREwgZG9jdW1lbnQuIFRoZSBza2VsZXRvbiBiZWFuIGNvbnRhaW5zIGEgc2V0IG9mIG1ldGhvZHMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBvcGVyYXRpb25zIGRlc2NyaWJlZCBpbiB0aGUgV1NETCBkb2N1bWVudC4gV2hlbiB0aGUgYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UgYnkgZWRpdGluZyB0aGUgYmVhbi4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHNrZWxldG9uIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBza2VsZXRvbiBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHNrZWxldG9uIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBza2VsZXRvbiBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2F4aXN0b3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRza2x3c2RsYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgSmF2YSBiZWFuIHNrZWxldG9uIGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZQotQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRza2x3c2RsYSI+PGEgbmFtZT0idHNrbHdzZGxhIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlCi1BeGlzMSBydW50aW1lIGVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbgotZnJvbSBhbiBleGlzdGluZyBXU0RMIGRvY3VtZW50LiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzCi10aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQotYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UKLWJ5IGVkaXRpbmcgdGhlIGJlYW4uPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48cD5QcmVyZXF1aXNpdGVzOjwvcD4KLTxvbD4KLTxsaT5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldAotY29udGFpbmVyIGFzIHlvdXIgc2VydmVyLCB5b3UgbXVzdCBpbnN0YWxsIGl0LCBjb25maWd1cmUgYW4gaW5zdGFuY2Ugb2YgaXQsCi1hbmQgY3JlYXRlIGEgV2ViIHByb2plY3QgdGFyZ2V0ZWQgdG8gaXQgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9InR0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L2xpPgotCi08bGk+Q3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZSBpbnRvIHRoZSBXZWIgQ29udGVudCBmb2xkZXIgb2YgdGhlIFdlYiBwcm9qZWN0LgotWW91IGNhbiBvbmx5IHVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZSB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUKLWVudmlyb25tZW50OjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+U3dpdGNoIHRvIHRoZSBKMkVFIHBlcnNwZWN0aXZlICg8c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3cgJmd0OyBPcGVuIFBlcnNwZWN0aXZlCi0mZ3Q7IEoyRUU8L3NwYW4+KS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcsIHNlbGVjdCB0aGUgV1NETCBmaWxlIHRoYXQgeW91IGNyZWF0ZWQKLW9yIGltcG9ydGVkIGludG8gdGhlIFdlYiBDb250ZW50IGZvbGRlciBvZiB5b3VyIFdlYiBwcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgJmd0OyBOZXcgJmd0OyBPdGhlcjwvc3Bhbj4uIFNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1TZXJ2aWNlczwvc3Bhbj4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLgotU2VsZWN0IHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2U8L3NwYW4+IHdpemFyZC4gQ2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZXMgcGFnZTogc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Ub3AgZG93biBKYXZhIGJlYW4gV2ViIHNlcnZpY2U8L3NwYW4+IGFzCi15b3VyIFdlYiBzZXJ2aWNlIHR5cGUsIGFuZCBzZWxlY3QgdGhlIGFydGlmYWN0IGZyb20gd2hpY2ggdGhlIHNlcnZpY2Ugd2lsbAotYmUgY3JlYXRlZC48L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOjwvc3Bhbj4gPHVsPgotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4KLXRoZSBnZW5lcmF0ZWQgY29kZSwgV1NETCBmaWxlcywgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgYW5kIEphdmEgZmlsZXMgd2hlbgotYXBwcm9wcmlhdGUuPC9saT4KLQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudAotZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyLjwvbGk+Ci0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4KLQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlCi10YXJnZXQgc2VydmVyLjwvbGk+Ci0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQKLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4KLQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaAotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHNlcnZlci48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBydW50aW1lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9zcGFuPiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBjbGllbnQsIHNlbGVjdCB0aGUgdHlwZSBvZiBwcm94eSB0bwotYmUgZ2VuZXJhdGVkIGFuZCByZXBlYXQgdGhlIGFib3ZlIHN0ZXBzIGZvciB0aGUgY2xpZW50Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L2E+PC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZXMgU2tlbGV0b24gSmF2YeKEoiBCZWFuIENvbmZpZ3VyYXRpb24gcGFnZTogU2VsZWN0IHRoZQotZm9sZGVyIHdoZXJlIHRoZSBnZW5lcmF0ZWQgSmF2YSB3aWxsIGJlIHN0b3JlZC4gSWYgeW91IHdhbnQgdG8gcmV2aWV3Ci1vciBlZGl0IHRoZSBtYXBwaW5ncyBiZXR3ZWVuIHBhY2thZ2VzIGFuZCBuYW1lc3BhY2VzLCBzZWxlY3QgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZWZpbmUKLWN1c3RvbSBtYXBwaW5nIGZvciBuYW1lc3BhY2UgdG8gcGFja2FnZTwvc3Bhbj4gY2hlY2sgYm94LiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZAotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3NwYW4+IG9uCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsCi1ieSBjbGlja2luZyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IHRvCi1pbXBvcnQgY3VzdG9tIG1hcHBpbmcgcGFpcnMgZnJvbSBhICA8dHQgY2xhc3M9InN5c291dCI+LnByb3BlcnRpZXM8L3R0PiBmaWxlLgotVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjx2YXIgY2xhc3M9InZhcm5hbWUiPm5hbWVzcGFjZT1wYWNrYWdlPC92YXI+PC9zYW1wPi4KLUNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFRlc3QgcGFnZTogSWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLAotc2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGZvciB0aGUgZ2VuZXJhdGVkIFdlYiBzZXJ2aWNlLiBUaGlzIHdpbGwgb3BlbiB0aGUKLVdlYiBzZXJ2aWNlIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvCi10ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+LgotVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksCi10aGlzIHBhZ2Ugc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4gSXQgbGlzdHMgdGhlIGZvbGRlciB3aGVyZSB0aGUgcHJveHkKLXdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5IGNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzCi1hbmQgcGFja2FnZXMuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIENsaWVudCBUZXN0IHBhZ2U6IFVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5TZWxlY3QgeW91ciB0ZXN0IGZhY2lsaXR5LiBZb3UgY2FuIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIHByb3h5IHRocm91Z2ggYSBKU1AsIHlvdSBjYW4gc2VsZWN0Ci10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdAotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3NwYW4+IHRvIHN0YXJ0IHRoZQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggeW91cgotV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB1c2UgdGhpcyBwYWdlIHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1hbmQgc2VsZWN0IHRoZSBVRERJIHJlZ2lzdHJ5IHRvIHdoaWNoIHRoZSBXZWIgc2VydmljZSB3aWxsIGJlIHB1Ymxpc2hlZC4gQ2xpY2sKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48ZGl2IGNsYXNzPSJwIj5BZnRlciB0aGUgV2ViIHNlcnZpY2UgaGFzIGJlZW4gY3JlYXRlZCwKLXRoZSBmb2xsb3dpbmcgbWF5IG9jY3VyIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyB5b3Ugc2VsZWN0ZWQ6IDx1bD4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywKLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vbG9jYWxob3N0OiA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5wb3J0PC92YXI+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJQcm9qZWN0PC92YXI+Q2xpZW50L3NhbXBsZTxlbT5CZWFuTmFtZTwvZW0+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJTZXJ2aWNlTmFtZTwvdmFyPi9UZXN0Q2xpZW50LmpzcCBZb3UgY2FuIHVzZQotdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLCBlbnRlcmluZwotYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnZva2U8L3NwYW4+LiBUaGUgcmVzdWx0Ci1vZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+Ci0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGluICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5QdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZTwvdmFyPiB0byBjb21wbGV0ZQotdGhpcyB0YXNrLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvY2F4aXN0b3Zlci5odG1sIiB0aXRsZT0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiPiBVc2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCI+V1NETCBkb2N1bWVudHM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWE1OGJlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICIuLi8uLi9kdGQvdGFzay5kdGQiPg0KLTx0YXNrIGlkPSJjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3Q8L3RpdGxlPg0KLTxzaG9ydGRlc2M+SWYgeW91IHBsYW4gdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgdGhhdCB1c2VzIEFwYWNoZSBKYWthcnRhIFRvbWNhdA0KLWFzIGl0cyBzZXJ2ZXIsIFRvbWNhdCBtdXN0IGJlIGluc3RhbGxlZCBhbmQgYSBzZXJ2ZXIgY3JlYXRlZCBiZWZvcmUgeW91IGJlZ2luDQotY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPmNyZWF0aW5nIGFuIEFwYWNoZQ0KLVRvbWNhdCBzZXJ2ZXI8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPlRvbWNhdCBzZXJ2ZXI8aW5kZXh0ZXJtPmNyZWF0aW5nDQotc2VydmVycyBmb3IgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nDQotYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXI8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+SW5zdGFsbCBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgZnJvbSB0aGlzIFVSTDogPHhyZWYgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90b21jYXQiDQotc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3RvbWNhdDwveHJlZj48L3ByZXJlcT4NCi08Y29udGV4dD5PbmNlIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgc2VydmVyLCBjcmVhdGUgYSBUb21jYXQgc2VydmVyIGluIHRoZQ0KLXdvcmtiZW5jaCBieSBkb2luZyB0aGUgZm9sbG93aW5nOiA8L2NvbnRleHQ+DQotPHN0ZXBzPg0KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgRmlsZSBtZW51LCBzZWxlY3QgPHVpY29udHJvbD5OZXcgPiBPdGhlciA+IFNlcnZlciA+IFNlcnZlcg0KLT4gTmV4dDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5TZWxlY3QgVG9tY2F0IHYgMy54LCA0LngsIHY1LngsIG9yIDYueCBhcyB0aGUgc2VydmVyIHR5cGUsIGVsZWN0aW5nDQotdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBUb21jYXQgZm9yIHlvdXIgaW5zdGFsbCwgYW5kIGNsaWNrIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbiB0aGUgVG9tY2F0IHNlcnZlciBwYWdlOjwvY21kPg0KLTxzdWJzdGVwcz4NCi08c3Vic3RlcD48Y21kPkVudGVyIGEgc2VydmVyIG5hbWUuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U3BlY2lmeSB3aGVyZSBUb21jYXQgaXMgaW5zdGFsbGVkLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+SW5zdGFsbGVkIEpSRXM8L3VpY29udHJvbD4sIGNsaWNrIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LA0KLWFuZCBlbnRlciB0aGUgYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24gZm9yIHRoZSBKREsgeW91IHBsYW4gdG8gdXNlIGZvciBUb21jYXQuDQotRm9yIGV4YW1wbGUsIGZvciBUb21jYXQgdjUuMCB0aGUgSlJFIG5hbWUgd291bGQgYmUgamRrMTQxIGFuZCB0aGUgSlJFIGhvbWUNCi13b3VsZCBiZSB0aGUgaG9tZSBkaXJlY3RvcnkgZm9yIEpESyAxLjQuMS4gQ2xpY2sgPHVpY29udHJvbD5PSzwvdWljb250cm9sPiB0d2ljZQ0KLW9uY2UgeW91IGhhdmUgZW50ZXJlZCB0aGlzIGluZm9ybWF0aW9uLiBFbnN1cmUgdGhhdCB0aGUgbmV3bHkgYWRkZWQgSkRLIGlzDQotbm93IHNlbGVjdGVkIGluIHRoZSBKUkUgZmllbGQgb2YgdGhlIFRvbWNhdCBzZXJ2ZXIgcGFnZS4gTm90ZSB0aGF0IGlmIHlvdQ0KLXBvaW50IHRoZSBzZXJ2ZXIgYXQgYSBKUkUgcmF0aGVyIHRoYW4gYSBKREsgdGhlIEpTUHMgd2lsbCBub3QgcHJvcGVybHkgY29tcGlsZQ0KLWFuZCB3aWxsIG5vdCBiZSBhYmxlIHRvIHJ1biBvbiB0aGUgVG9tY2F0IHNlcnZlci48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NtZD48c3RlcHJlc3VsdD4gVG8gc2VlIHRoZQ0KLXNlcnZlciB5b3UgaGF2ZSBjcmVhdGVkIGluIHRoZSB3b3Jrc3BhY2UsIGZyb20gdGhlIFdpbmRvdyBtZW51IHNlbGVjdCA8dWljb250cm9sPlNob3cNCi12aWV3ID4gT3RoZXIgPiBTZXJ2ZXIgPiBTZXJ2ZXJzID4gT2suPC91aWNvbnRyb2w+IDwvc3RlcHJlc3VsdD48L3N0ZXA+DQotPC9zdGVwcz4NCi08ZXhhbXBsZT48cD5UbyBidWlsZCBhIGR5bmFtaWMgV2ViIHByb2plY3QgdGhhdCBwb2ludHMgdG8gdGhlIFRvbWNhdCBzZXJ2ZXINCi10aGF0IHlvdSBoYXZlIGNyZWF0ZWQ6PC9wPjxvbD4NCi08bGk+Q3JlYXRlIHRoZSBzZXJ2aWNlIFdlYiBwcm9qZWN0IGJ5IHNlbGVjdGluZyA8dWljb250cm9sPk5ldyA+IER5bmFtaWMgV2ViDQotcHJvamVjdDwvdWljb250cm9sPi4gRW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjogPHVsPg0KLTxsaT5Qcm9qZWN0IE5hbWU6IGVudGVyIGEgcHJvamVjdCBuYW1lPC9saT4NCi08bGk+VGFyZ2V0IHJ1bnRpbWU6IFRvbWNhdCBzZXJ2ZXIgdjMueCwgNC54LCA1LngsIG9yIDYuMCBkZXBlbmRpbmcgb24gdGhlDQotdmVyc2lvbiB5b3UgaW5zdGFsbGVkLiBJZiBpdCBpcyBub3QgbGlzdGVkLCBjbGljayBOZXcgYW5kIGJyb3dzZSB0byB0aGUgbG9jYXRpb24NCi13aGVyZSBpdCBpcyBpbnN0YWxsZWQuPC9saT4NCi08bGk+RW5zdXJlIHRoYXQgPHVpY29udHJvbD5BZGQgcHJvamVjdCB0byBhbiBFQVI8L3VpY29udHJvbD4gaXMgPGk+bm90PC9pPiBzZWxlY3RlZC48L2xpPg0KLTwvdWw+PC9saT4NCi08bGk+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9saT4NCi08bGk+VG8gYXNzb2NpYXRlIHRoZSBwcm9qZWN0IHdpdGggdGhlIHNlcnZlciwgcmlnaHQtY2xpY2sgdGhlIFRvbWNhdCBzZXJ2ZXINCi15b3UgY3JlYXRlZCBpbiB0aGUgU2VydmVyIHZpZXcgYW5kIHNlbGVjdCA8dWljb250cm9sPkFkZCBhbmQgcmVtb3ZlIHByb2plY3RzPC91aWNvbnRyb2w+Lg0KLVNlbGVjdCB0aGUgc2VydmljZSBhbmQgY2xpZW50IHByb2plY3RzIGZyb20gdGhlIEF2YWlsYWJsZSBwcm9qZWN0cyBsaXN0IGFuZA0KLWNsaWNrIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LiA8L2xpPg0KLTwvb2w+PC9leGFtcGxlPg0KLTwvdGFza2JvZHk+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzkyYmVkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IklmIHlvdSBwbGFuIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIHRoYXQgdXNlcyBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSWYgeW91IHBsYW4gdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgdGhhdCB1c2VzIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBhcyBpdHMgc2VydmVyLCBUb21jYXQgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGEgc2VydmVyIGNyZWF0ZWQgYmVmb3JlIHlvdSBiZWdpbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIsIFRvbWNhdCBzZXJ2ZXIsIGNyZWF0aW5nIHNlcnZlcnMgZm9yIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIsIFRvbWNhdCBzZXJ2ZXIsIGNyZWF0aW5nIHNlcnZlcnMgZm9yIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciI+PGEgbmFtZT0iY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC9oMT4KLQotCi0KLTxkaXY+PHA+SWYgeW91IHBsYW4gdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgdGhhdCB1c2VzIEFwYWNoZSBKYWthcnRhIFRvbWNhdAotYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4KLWNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5JbnN0YWxsIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBmcm9tIHRoaXMgVVJMOiA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3RvbWNhdCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvdG9tY2F0PC9hPjwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5PbmNlIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgc2VydmVyLCBjcmVhdGUgYSBUb21jYXQgc2VydmVyIGluIHRoZQotd29ya2JlbmNoIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6IDwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkZyb20gdGhlIEZpbGUgbWVudSwgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldyAmZ3Q7IE90aGVyICZndDsgU2VydmVyICZndDsgU2VydmVyCi0mZ3Q7IE5leHQ8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCBUb21jYXQgdiAzLngsIDQueCwgdjUueCwgb3IgNi54IGFzIHRoZSBzZXJ2ZXIgdHlwZSwgZWxlY3RpbmcKLXRoZSBjb3JyZWN0IHZlcnNpb24gb2YgVG9tY2F0IGZvciB5b3VyIGluc3RhbGwsIGFuZCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPk9uIHRoZSBUb21jYXQgc2VydmVyIHBhZ2U6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkVudGVyIGEgc2VydmVyIG5hbWUuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TcGVjaWZ5IHdoZXJlIFRvbWNhdCBpcyBpbnN0YWxsZWQuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnN0YWxsZWQgSlJFczwvc3Bhbj4sIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4sCi1hbmQgZW50ZXIgdGhlIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uIGZvciB0aGUgSkRLIHlvdSBwbGFuIHRvIHVzZSBmb3IgVG9tY2F0LgotRm9yIGV4YW1wbGUsIGZvciBUb21jYXQgdjUuMCB0aGUgSlJFIG5hbWUgd291bGQgYmUgamRrMTQxIGFuZCB0aGUgSlJFIGhvbWUKLXdvdWxkIGJlIHRoZSBob21lIGRpcmVjdG9yeSBmb3IgSkRLIDEuNC4xLiBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4gdHdpY2UKLW9uY2UgeW91IGhhdmUgZW50ZXJlZCB0aGlzIGluZm9ybWF0aW9uLiBFbnN1cmUgdGhhdCB0aGUgbmV3bHkgYWRkZWQgSkRLIGlzCi1ub3cgc2VsZWN0ZWQgaW4gdGhlIEpSRSBmaWVsZCBvZiB0aGUgVG9tY2F0IHNlcnZlciBwYWdlLiBOb3RlIHRoYXQgaWYgeW91Ci1wb2ludCB0aGUgc2VydmVyIGF0IGEgSlJFIHJhdGhlciB0aGFuIGEgSkRLIHRoZSBKU1BzIHdpbGwgbm90IHByb3Blcmx5IGNvbXBpbGUKLWFuZCB3aWxsIG5vdCBiZSBhYmxlIHRvIHJ1biBvbiB0aGUgVG9tY2F0IHNlcnZlci48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj4gIFRvIHNlZSB0aGUKLXNlcnZlciB5b3UgaGF2ZSBjcmVhdGVkIGluIHRoZSB3b3Jrc3BhY2UsIGZyb20gdGhlIFdpbmRvdyBtZW51IHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaG93Ci12aWV3ICZndDsgT3RoZXIgJmd0OyBTZXJ2ZXIgJmd0OyBTZXJ2ZXJzICZndDsgT2suPC9zcGFuPiA8L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj48cD5UbyBidWlsZCBhIGR5bmFtaWMgV2ViIHByb2plY3QgdGhhdCBwb2ludHMgdG8gdGhlIFRvbWNhdCBzZXJ2ZXIKLXRoYXQgeW91IGhhdmUgY3JlYXRlZDo8L3A+Ci08b2w+Ci08bGk+Q3JlYXRlIHRoZSBzZXJ2aWNlIFdlYiBwcm9qZWN0IGJ5IHNlbGVjdGluZyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXcgJmd0OyBEeW5hbWljIFdlYgotcHJvamVjdDwvc3Bhbj4uIEVudGVyIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246IDx1bD4KLTxsaT5Qcm9qZWN0IE5hbWU6IGVudGVyIGEgcHJvamVjdCBuYW1lPC9saT4KLQotPGxpPlRhcmdldCBydW50aW1lOiBUb21jYXQgc2VydmVyIHYzLngsIDQueCwgNS54LCBvciA2LjAgZGVwZW5kaW5nIG9uIHRoZQotdmVyc2lvbiB5b3UgaW5zdGFsbGVkLiBJZiBpdCBpcyBub3QgbGlzdGVkLCBjbGljayBOZXcgYW5kIGJyb3dzZSB0byB0aGUgbG9jYXRpb24KLXdoZXJlIGl0IGlzIGluc3RhbGxlZC48L2xpPgotCi08bGk+RW5zdXJlIHRoYXQgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIHByb2plY3QgdG8gYW4gRUFSPC9zcGFuPiBpcyA8ZW0+bm90PC9lbT4gc2VsZWN0ZWQuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+LjwvbGk+Ci0KLTxsaT5UbyBhc3NvY2lhdGUgdGhlIHByb2plY3Qgd2l0aCB0aGUgc2VydmVyLCByaWdodC1jbGljayB0aGUgVG9tY2F0IHNlcnZlcgoteW91IGNyZWF0ZWQgaW4gdGhlIFNlcnZlciB2aWV3IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIGFuZCByZW1vdmUgcHJvamVjdHM8L3NwYW4+LgotU2VsZWN0IHRoZSBzZXJ2aWNlIGFuZCBjbGllbnQgcHJvamVjdHMgZnJvbSB0aGUgQXZhaWxhYmxlIHByb2plY3RzIGxpc3QgYW5kCi1jbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+LiA8L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHdzYmVhbmEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhMmVmMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gIi4uLy4uL2R0ZC90YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InR3c2JlYW5hIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZQ0KLWVudmlyb25tZW50PC90aXRsZT4NCi08dGl0bGVhbHRzPg0KLTxzZWFyY2h0aXRsZT5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzMQ0KLXJ1bnRpbWUgZW52aXJvbm1lbnQ8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+VGhlIFdlYiBTZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIG5ldyBXZWIgc2VydmljZSwNCi1jb25maWd1cmluZyBpdCBmb3IgZGVwbG95bWVudCwgYW5kIGRlcGxveWluZyB0aGUgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIuDQotT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlDQotY2xpZW50IHByb3h5IGFuZCBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UuIFdoZW4geW91IGhhdmUNCi1jb21wbGV0ZWQgdGVzdGluZywgeW91IGNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5DQotdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+QXhpczEgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5KYXZhDQotYmVhbnM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcw0KLXJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPmNyZWF0aW5nIGEgV2ViIHNlcnZpY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8b2w+DQotPGxpIGlkPSJjcmVhdGV0b21jYXRsaW5rIj5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldA0KLWNvbnRhaW5lciBhcyB5b3VyIHNlcnZlciwgeW91IG11c3QgaW5zdGFsbCBpdCwgY29uZmlndXJlIGFuIGluc3RhbmNlIG9mIGl0LA0KLWFuZCBjcmVhdGUgYSBXZWIgcHJvamVjdCB0YXJnZXRlZCB0byBpdCBhcyBkZXNjcmliZWQgaW4gPHhyZWYgaHJlZj0idHRvbWNhdHNlcnYuZGl0YSINCi1zY29wZT0ibG9jYWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwveHJlZj48L2xpPg0KLTxsaT5DcmVhdGUgb3IgaW1wb3J0IGEgYmVhbiBpbnRvIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBzb3VyY2UgZm9sZGVyIG9mIHRoZSBXZWIgcHJvamVjdC4gVG8NCi1pbXBvcnQsIHNlbGVjdCB0aGUgPGI+SmF2YSBSZXNvdXJjZXM6IHNyYzwvYj4gZm9sZGVyLCBhbmQgZnJvbSB0aGUgZmlsZSBtZW51DQotc2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPkltcG9ydDwvdWljb250cm9sPjx1aWNvbnRyb2w+R2VuZXJhbDwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+RmlsZSBTeXN0ZW08L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQgYnJvd3NlIHRvIHdoZXJlIHlvdXINCi1wYWNrYWdlIGlzLjwvbGk+DQotPC9vbD48L3A+PC9wcmVyZXE+DQotPGNvbnRleHQ+VG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSBhIGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lDQotZW52aXJvbm1lbnQ6PC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPlN3aXRjaCB0byB0aGUgSmF2YSBFRSBwZXJzcGVjdGl2ZSAoPHVpY29udHJvbD5XaW5kb3cgPiBPcGVuIFBlcnNwZWN0aXZlDQotPiBKYXZhIEVFPC91aWNvbnRyb2w+KS48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LCBzZWxlY3QgdGhlIGJlYW4gdGhhdCB5b3UgY3JlYXRlZA0KLW9yIGltcG9ydGVkIGludG8gdGhlIHNvdXJjZSBmb2xkZXIgb2YgeW91ciBXZWIgcHJvamVjdC48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5GaWxlID4gTmV3ID4gT3RoZXI8L3VpY29udHJvbD4uPC9jbWQ+PGluZm8+U2VsZWN0PHVpY29udHJvbD5XZWINCi1TZXJ2aWNlczwvdWljb250cm9sPiBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSB2YXJpb3VzIFdlYiBzZXJ2aWNlIHdpemFyZHMuDQotU2VsZWN0IHRoZSAgPHVpY29udHJvbD5XZWIgU2VydmljZTwvdWljb250cm9sPiB3aXphcmQuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9pbmZvPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBwYWdlOiBzZWxlY3QgIDx1aWNvbnRyb2w+Qm90dG9tIHVwIEphdmEgYmVhbiBXZWIgc2VydmljZTwvdWljb250cm9sPiBhcw0KLXlvdXIgV2ViIHNlcnZpY2UgdHlwZSwgYW5kIGVudGVyIHRoZSBVUkkgdG8gdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZmlsZSB0aGF0DQotd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzZXJ2aWNlLjwvY21kPg0KLTxzdWJzdGVwcyBpZD0iY3JlYXRlc3RlcDR1bCI+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudA0KLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6PC9jbWQ+PGluZm8+PHVsPg0KLTxsaT5EZXZlbG9wOiB0aGlzIHdpbGwgZGV2ZWxvcCB0aGUgV1NETCBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUNCi1XZWIgc2VydmljZS4gVGhpcyBpbmNsdWRlcyBzdWNoIHRhc2tzIGFzIGNyZWF0aW5nIHRoZSBtb2R1bGVzIHdoaWNoIHdpbGwgY29udGFpbg0KLXRoZSBnZW5lcmF0ZWQgY29kZSwgV1NETCBmaWxlcywgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgYW5kIEphdmEgZmlsZXMgd2hlbg0KLWFwcHJvcHJpYXRlLjwvbGk+DQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudA0KLWdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlci48L2xpPg0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4NCi08bGk+SW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgV2ViIG1vZHVsZSBhbmQgRUFScyBvbiB0aGUNCi10YXJnZXQgc2VydmVyLjwvbGk+DQotPGxpPlN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZA0KLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4NCi08bGk+VGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlLCBzdWNoDQotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+DQotPC91bD48L2luZm8+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3UNCi13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkNCi1hIGRpZmZlcmVudCBzZXJ2ZXIuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQ0KLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBydW50aW1lIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkNCi1hIGRpZmZlcmVudCBydW50aW1lLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0DQotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQNCi1FQVIgY2xpY2sgb24gdGhlIHByb2plY3QgbGluay48L2NtZD48aW5mbz5FbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZA0KLWFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZQ0KLXNlcnZpY2Ugd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50J3MgZ2VuZXJhdGVkIGFydGlmYWN0cy48L2luZm8+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+SWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgY2xpZW50LCBzZWxlY3QgdGhlIHR5cGUgb2YgcHJveHkgdG8NCi1iZSBnZW5lcmF0ZWQgYW5kIHJlcGVhdCB0aGUgYWJvdmUgc3RlcHMgZm9yIHRoZSBjbGllbnQuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+UHVibGlzaCB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcg0KLXRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljDQotdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IsIHdoaWNoIGFsbG93cyB5b3UgdG8gd2F0Y2ggdGhlIFNPQVAgdHJhZmZpYyBnZW5lcmF0ZWQNCi1ieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuIEFsdGVybmF0ZWx5DQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPHhyZWYgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhIg0KLXNjb3BlPSJwZWVyIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L3hyZWY+PC9jbWQ+PC9zdWJzdGVwPg0KLTwvc3Vic3RlcHM+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQmVhbiBJZGVudGl0eSBwYWdlOiB0aGUgV2ViIHNlcnZpY2UNCi1XU0RMIG5hbWUgd2lsbCBiZSBsaXN0ZWQuPC9jbWQ+PGluZm8+WW91IGhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zOjx1bD4NCi08bGk+U2VsZWN0IHRoZSBtZXRob2RzIHRvIGV4cG9zZS48L2xpPg0KLTxsaT5TZWxlY3QgdGhlIGVuY29kaW5nIHN0eWxlLiBSUEMvRW5jb2RlZCBpcyB0aGUgcmVjb21tZW5kZWQgZW5jb2Rpbmcgc3R5bGUNCi1mb3IgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4gVGhpcyBlbmNvZGluZyBtZXRob2QgaXMgbm90IFdTLUkgY29tcGxpYW50LjwvbGk+DQotPGxpPlNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvbGk+DQotPC91bD5DbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+PC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFBhY2thZ2UgdG8gTmFtZXNwYWNlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZA0KLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3VpY29udHJvbD4gb24NCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsDQotYnkgY2xpY2tpbmcgIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPGI+SW1wb3J0PC9iPiB0bw0KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDxzeXN0ZW1vdXRwdXQ+LnByb3BlcnRpZXM8L3N5c3RlbW91dHB1dD4gZmlsZS4NCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPGNvZGVwaD48dmFybmFtZT5wYWNrYWdlPW5hbWVzcGFjZTwvdmFybmFtZT48L2NvZGVwaD4uPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgVGVzdCBwYWdlOiBJZiB5b3Ugc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UsDQotc2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGZvciB0aGUgZ2VuZXJhdGVkIFdlYiBzZXJ2aWNlLjwvY21kPjxpbmZvPlRoaXMgd2lsbA0KLW9wZW4gdGhlIFdlYiBzZXJ2aWNlIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdQ0KLXdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2s8dWljb250cm9sPkdvPC91aWNvbnRyb2w+Lg0KLVRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS4gQ2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2luZm8+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogaWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gZ2VuZXJhdGUgYSBwcm94eSwNCi1zZWxlY3QgaWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBwYWNrYWdlIHRvIG5hbWVzcGFjZSBtYXBwaW5ncy48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBVc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZm9sbG93aW5nDQotb3B0aW9uczogPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgdGVzdCBmYWNpbGl0eS4gWW91IGNhbiB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkNCi1pbiB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIsIG9yIHlvdSBjYW4gZ2VuZXJhdGUgYSBzYW1wbGUgV2ViIHNlcnZpY2UgSlNQLjwvY21kPg0KLTwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPklmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBwcm94eSB0aHJvdWdoIGEgSlNQLCB5b3UgY2FuIHNlbGVjdA0KLXRoZSBmb2xkZXIgd2hlcmUgdGhlIEpTUCB3aWxsIGJlIGxvY2F0ZWQsIGFuZCB5b3UgY2FuIHNlbGVjdCB0aGUgbWV0aG9kcyB0aGF0DQotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCAgPHVpY29udHJvbD5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3VpY29udHJvbD4gdG8gc3RhcnQgdGhlDQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlOiBTZWxlY3Qgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8NCi1wdWJsaXNoIHRoaXMgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LiBDbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi4mbmJzcDs8L2NtZD4NCi08aW5mbz5Ob3RlOiB5b3UgbWF5IHNlZSBhIHdhcm5pbmcgc3RhdGluZyA8Y29kZXBoPkVycm9yIGluIGdlbmVyYXRpbmcgV1NETA0KLWZyb20gSmF2YS4gQ2xhc3NOb3RGb3VuZDogJmx0O2JlYW4gbmFtZT48L2NvZGVwaD4uIFRoaXMgZXJyb3IgY2FuIGJlIHNhZmVseQ0KLWlnbm9yZWQuPC9pbmZvPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxyZXN1bHQgaWQ9ImF4aXN3c2NyZWF0ZXJlc3VsdCI+PHA+QWZ0ZXIgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQsDQotdGhlIGZvbGxvd2luZyBtYXkgb2NjdXIgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zIHlvdSBzZWxlY3RlZDogPHVsPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywNCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2xvY2FsaG9zdDogPHZhcm5hbWU+cG9ydDwvdmFybmFtZT4vIDx2YXJuYW1lPldlYlByb2plY3Q8L3Zhcm5hbWU+Q2xpZW50L3NhbXBsZTxpDQotPkJlYW5OYW1lPC9pPi8gPHZhcm5hbWU+V2ViU2VydmljZU5hbWU8L3Zhcm5hbWU+L1Rlc3RDbGllbnQuanNwIFlvdSBjYW4gdXNlDQotdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLCBlbnRlcmluZw0KLWEgdmFsdWUgZm9yIHRoZSBtZXRob2QsIGFuZCBjbGlja2luZyAgPHVpY29udHJvbD5JbnZva2U8L3VpY29udHJvbD4uIFRoZSByZXN1bHQNCi1vZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+DQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsDQotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkDQotaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPGI+R288L2I+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4NCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcHVibGlzaCB0aGUgV2ViIHNlcnZpY2UsIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXINCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93DQotdGhlIGluc3RydWN0aW9ucyBpbiAgPHZhcm5hbWU+UHVibGlzaGluZyB0aGUgV2ViIHNlcnZpY2U8L3Zhcm5hbWU+IHRvIGNvbXBsZXRlDQotdGhpcyB0YXNrLjwvbGk+DQotPC91bD48L3A+PC9yZXN1bHQ+DQotPHBvc3RyZXE+PHA+IDx1aWNvbnRyb2w+SW1wb3J0YW50OjwvdWljb250cm9sPiBJZiB5b3VyIG1ldGhvZHMgY29udGFpbiB0eXBlcywNCi1ub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzYW1wbGUsIHN1Y2ggYXMgYXJyYXlzLCBpbmRleGVkIHByb3BlcnRpZXMsIGFuZCBjb2xsZWN0aW9ucywNCi10aGUgbWV0aG9kcyB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgc2FtcGxlIGFuZCB5b3Ugd2lsbCByZWNlaXZlIGEgd2FybmluZw0KLW1lc3NhZ2UuPC9wPjwvcG9zdHJlcT4NCi08L3Rhc2tib2R5Pg0KLTxyZWxhdGVkLWxpbmtzPg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiDQotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R3c2JlYW5hLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWVmYWRlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R3c2JlYW5hLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLCBjb25maWd1cmluZyBpdCBmb3IgZGVwbG95bWVudCwgYW5kIGRlcGxveWluZyB0aGUgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIuIE9uY2UgeW91ciBXZWIgc2VydmljZSBpcyBkZXBsb3llZCwgdGhlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIHRoZSBjbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZSBjb21wbGV0ZWQgdGVzdGluZywgeW91IGNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLCBjb25maWd1cmluZyBpdCBmb3IgZGVwbG95bWVudCwgYW5kIGRlcGxveWluZyB0aGUgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIuIE9uY2UgeW91ciBXZWIgc2VydmljZSBpcyBkZXBsb3llZCwgdGhlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIHRoZSBjbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZSBjb21wbGV0ZWQgdGVzdGluZywgeW91IGNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgSmF2YSBiZWFucywgQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBKYXZhIGJlYW5zLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2F4aXN0b3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2JlYW5hIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEKLXJ1bnRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2JlYW5hIj48YSBuYW1lPSJ0d3NiZWFuYSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZQotZW52aXJvbm1lbnQ8L2gxPgotCi0KLQotCi08ZGl2PjxwPlRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UsCi1jb25maWd1cmluZyBpdCBmb3IgZGVwbG95bWVudCwgYW5kIGRlcGxveWluZyB0aGUgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIuCi1PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaXMgZGVwbG95ZWQsIHRoZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyB0aGUKLWNsaWVudCBwcm94eSBhbmQgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLiBXaGVuIHlvdSBoYXZlCi1jb21wbGV0ZWQgdGVzdGluZywgeW91IGNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5Ci11c2luZyB0aGUgRXhwb3J0IHdpemFyZC48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPjxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpIGlkPSJ0d3NiZWFuYV9fY3JlYXRldG9tY2F0bGluayI+PGEgbmFtZT0idHdzYmVhbmFfX2NyZWF0ZXRvbWNhdGxpbmsiPjwhLS0gLS0+PC9hPklmIHlvdSBhcmUgdXNpbmcgdGhlIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBzZXJ2bGV0Ci1jb250YWluZXIgYXMgeW91ciBzZXJ2ZXIsIHlvdSBtdXN0IGluc3RhbGwgaXQsIGNvbmZpZ3VyZSBhbiBpbnN0YW5jZSBvZiBpdCwKLWFuZCBjcmVhdGUgYSBXZWIgcHJvamVjdCB0YXJnZXRlZCB0byBpdCBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0idHRvbWNhdHNlcnYuaHRtbCI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC9hPjwvbGk+Ci0KLTxsaT5DcmVhdGUgb3IgaW1wb3J0IGEgYmVhbiBpbnRvIHRoZSBKYXZh4oSiIHNvdXJjZSBmb2xkZXIgb2YgdGhlIFdlYiBwcm9qZWN0LiBUbwotaW1wb3J0LCBzZWxlY3QgdGhlIDxzdHJvbmc+SmF2YSBSZXNvdXJjZXM6IHNyYzwvc3Ryb25nPiBmb2xkZXIsIGFuZCBmcm9tIHRoZSBmaWxlIG1lbnUKLXNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydDwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPgotICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZSBTeXN0ZW08L3NwYW4+PC9zcGFuPiBhbmQgYnJvd3NlIHRvIHdoZXJlIHlvdXIKLXBhY2thZ2UgaXMuPC9saT4KLQotPC9vbD4KLTwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIGZyb20gYSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZQotZW52aXJvbm1lbnQ6PC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U3dpdGNoIHRvIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlICg8c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3cgJmd0OyBPcGVuIFBlcnNwZWN0aXZlCi0mZ3Q7IEphdmEgRUU8L3NwYW4+KS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LCBzZWxlY3QgdGhlIGJlYW4gdGhhdCB5b3UgY3JlYXRlZAotb3IgaW1wb3J0ZWQgaW50byB0aGUgc291cmNlIGZvbGRlciBvZiB5b3VyIFdlYiBwcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlICZndDsgTmV3ICZndDsgT3RoZXI8L3NwYW4+Ljwvc3Bhbj4gU2VsZWN0PHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1TZXJ2aWNlczwvc3Bhbj4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLgotU2VsZWN0IHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2U8L3NwYW4+IHdpemFyZC4gQ2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+LgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZXMgcGFnZTogc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Cb3R0b20gdXAgSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC9zcGFuPiBhcwoteW91ciBXZWIgc2VydmljZSB0eXBlLCBhbmQgZW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQKLXdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc2VydmljZS48L3NwYW4+Ci08YSBuYW1lPSJ0d3NiZWFuYV9fY3JlYXRlc3RlcDR1bCI+PCEtLSAtLT48L2E+PG9sIHR5cGU9ImEiIGlkPSJ0d3NiZWFuYV9fY3JlYXRlc3RlcDR1bCI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOjwvc3Bhbj4gPHVsPgotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4KLXRoZSBnZW5lcmF0ZWQgY29kZSwgV1NETCBmaWxlcywgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgYW5kIEphdmEgZmlsZXMgd2hlbgotYXBwcm9wcmlhdGUuPC9saT4KLQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudAotZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyLjwvbGk+Ci0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4KLQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlCi10YXJnZXQgc2VydmVyLjwvbGk+Ci0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQKLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4KLQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaAotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHNlcnZlci48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBydW50aW1lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9zcGFuPiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBjbGllbnQsIHNlbGVjdCB0aGUgdHlwZSBvZiBwcm94eSB0bwotYmUgZ2VuZXJhdGVkIGFuZCByZXBlYXQgdGhlIGFib3ZlIHN0ZXBzIGZvciB0aGUgY2xpZW50Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L2E+PC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgSmF2YSBCZWFuIElkZW50aXR5IHBhZ2U6IHRoZSBXZWIgc2VydmljZQotV1NETCBuYW1lIHdpbGwgYmUgbGlzdGVkLjwvc3Bhbj4gWW91IGhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zOjx1bD4KLTxsaT5TZWxlY3QgdGhlIG1ldGhvZHMgdG8gZXhwb3NlLjwvbGk+Ci0KLTxsaT5TZWxlY3QgdGhlIGVuY29kaW5nIHN0eWxlLiBSUEMvRW5jb2RlZCBpcyB0aGUgcmVjb21tZW5kZWQgZW5jb2Rpbmcgc3R5bGUKLWZvciB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGlzIGVuY29kaW5nIG1ldGhvZCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9saT4KLQotPGxpPlNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvbGk+Ci0KLTwvdWw+Ci1DbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIFBhY2thZ2UgdG8gTmFtZXNwYWNlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZAotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3NwYW4+IG9uCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsCi1ieSBjbGlja2luZyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IHRvCi1pbXBvcnQgY3VzdG9tIG1hcHBpbmcgcGFpcnMgZnJvbSBhICA8dHQgY2xhc3M9InN5c291dCI+LnByb3BlcnRpZXM8L3R0PiBmaWxlLgotVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjx2YXIgY2xhc3M9InZhcm5hbWUiPnBhY2thZ2U9bmFtZXNwYWNlPC92YXI+PC9zYW1wPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIFRlc3QgcGFnZTogSWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLAotc2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGZvciB0aGUgZ2VuZXJhdGVkIFdlYiBzZXJ2aWNlLjwvc3Bhbj4gVGhpcyB3aWxsCi1vcGVuIHRoZSBXZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3UKLXdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2s8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uCi1UaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogaWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gZ2VuZXJhdGUgYSBwcm94eSwKLXNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIENsaWVudCBUZXN0IHBhZ2U6IFVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5TZWxlY3QgeW91ciB0ZXN0IGZhY2lsaXR5LiBZb3UgY2FuIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIHByb3h5IHRocm91Z2ggYSBKU1AsIHlvdSBjYW4gc2VsZWN0Ci10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdAotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3NwYW4+IHRvIHN0YXJ0IHRoZQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlOiBTZWxlY3Qgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8KLXB1Ymxpc2ggdGhpcyBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuIENsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uwqA8L3NwYW4+Ci0gTm90ZTogeW91IG1heSBzZWUgYSB3YXJuaW5nIHN0YXRpbmcgPHNhbXAgY2xhc3M9ImNvZGVwaCI+RXJyb3IgaW4gZ2VuZXJhdGluZyBXU0RMCi1mcm9tIEphdmEuIENsYXNzTm90Rm91bmQ6ICZsdDtiZWFuIG5hbWUmZ3Q7PC9zYW1wPi4gVGhpcyBlcnJvciBjYW4gYmUgc2FmZWx5Ci1pZ25vcmVkLjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJ0d3NiZWFuYV9fYXhpc3dzY3JlYXRlcmVzdWx0Ij48YSBuYW1lPSJ0d3NiZWFuYV9fYXhpc3dzY3JlYXRlcmVzdWx0Ij48IS0tIC0tPjwvYT48ZGl2IGNsYXNzPSJwIj5BZnRlciB0aGUgV2ViIHNlcnZpY2UgaGFzIGJlZW4gY3JlYXRlZCwKLXRoZSBmb2xsb3dpbmcgbWF5IG9jY3VyIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyB5b3Ugc2VsZWN0ZWQ6IDx1bD4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywKLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vbG9jYWxob3N0OiA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5wb3J0PC92YXI+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJQcm9qZWN0PC92YXI+Q2xpZW50L3NhbXBsZTxlbT5CZWFuTmFtZTwvZW0+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJTZXJ2aWNlTmFtZTwvdmFyPi9UZXN0Q2xpZW50LmpzcCBZb3UgY2FuIHVzZQotdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLCBlbnRlcmluZwotYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnZva2U8L3NwYW4+LiBUaGUgcmVzdWx0Ci1vZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+Ci0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGluICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5QdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZTwvdmFyPiB0byBjb21wbGV0ZQotdGhpcyB0YXNrLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW1wb3J0YW50Ojwvc3Bhbj4gSWYgeW91ciBtZXRob2RzIGNvbnRhaW4gdHlwZXMsCi1ub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzYW1wbGUsIHN1Y2ggYXMgYXJyYXlzLCBpbmRleGVkIHByb3BlcnRpZXMsIGFuZCBjb2xsZWN0aW9ucywKLXRoZSBtZXRob2RzIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBzYW1wbGUgYW5kIHlvdSB3aWxsIHJlY2VpdmUgYSB3YXJuaW5nCi1tZXNzYWdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvY2F4aXN0b3Zlci5odG1sIiB0aXRsZT0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiPiBVc2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCI+V1NETCBkb2N1bWVudHM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzX3JlbHRhYmxlX3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNfcmVsdGFibGVfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZjliN2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNfcmVsdGFibGVfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIg0KLSAibWFwLmR0ZCI+DQotPG1hcCB0aXRsZT0iUmVsdGFibGUgZm9yIEF4aXMgV2ViIHNlcnZpY2VzIGRvY3MiPg0KLTxyZWx0YWJsZT4NCi08cmVsaGVhZGVyPg0KLTxyZWxjb2xzcGVjIHR5cGU9ImNvbmNlcHQiPjwvcmVsY29sc3BlYz4NCi08cmVsY29sc3BlYyB0eXBlPSJ0YXNrIj48L3JlbGNvbHNwZWM+DQotPHJlbGNvbHNwZWMgdHlwZT0icmVmZXJlbmNlIj48L3JlbGNvbHNwZWM+DQotPC9yZWxoZWFkZXI+DQotPHJlbHJvdz4NCi08cmVsY2VsbCBjb2xsZWN0aW9uLXR5cGU9ImZhbWlseSI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9jYXhpc3RvdmVyLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudHMiPg0KLTwvdG9waWNyZWY+DQotPC9yZWxjZWxsPg0KLTxyZWxjZWxsPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdHdzYmVhbmEuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIGFuIEF4aXMxIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4iPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90c2tsd3NkbGEuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIGFuIEF4aXMxIFdlYiBzZXJ2aWNlIGZyb20gV1NETCI+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3RzYW1wYXBwYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYW4gQXhpczEgV2ViIHNlcnZpY2UgY2xpZW50Ij4NCi08L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08cmVsY2VsbD48L3JlbGNlbGw+DQotPC9yZWxyb3c+DQotPC9yZWx0YWJsZT4NCi08L21hcD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc19yZWx0YWJsZV90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNfcmVsdGFibGVfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE1MjBkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc19yZWx0YWJsZV90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxhYmVsPSJSZWx0YWJsZSBmb3IgQXhpcyBXZWIgc2VydmljZXMgZG9jcyIvPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NTM0ZTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIgotICJtYXAuZHRkIj4KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd3NjcmVhdGlvbnQxX3RvYy5kaXRhbWFwI3dzYXhpcyIKLWlkPSJ3c2F4aXMiIHRpdGxlPSJ3c2F4aXMiPgotPHRvcGljcmVmIGhyZWY9InRvcGljcy9jYXhpc3RvdmVyLmRpdGEiIG5hdnRpdGxlPSJBcGFjaGUgQXhpczEgcnVudGltZSIgdG9jPSJubyI+Ci08dG9waWNyZWYgaHJlZj0idG9waWNzL3R0b21jYXRzZXJ2LmRpdGEiIG5hdnRpdGxlPSJJbnN0YWxsaW5nIGFuZCBjb25maWd1cmluZyBBcGFjaGUgVG9tY2F0Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3c2JlYW5hLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4iPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdHNrbHdzZGxhLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhIEphdmEgU2tlbGV0b24gZnJvbSBXU0RMIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idG9waWNzL3RzYW1wYXBwYS5kaXRhIiBuYXZ0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGZyb20gYSBXU0RMIGRvY3VtZW50Ij4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC9tYXA+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZjM3ZTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93c2NyZWF0aW9udDFfdG9jLnhtbCN3c2F4aXMiIGxhYmVsPSJ3c2F4aXMiIHRvcGljPSJ0b3BpY3MvY2F4aXN0b3Zlci5odG1sIi8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQwYmRhMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjYWRkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDU3ZWMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgd3NjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCi1nZW5lcmF0ZVNvdXJjZUJ1bmRsZT1mYWxzZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk3N2IyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSEgUGx1Zy1pbiBwcm9wZXJ0aWVzCi1wbHVnaW5OYW1lICAgICA9IFdlYiBzZXJ2aWNlcyBVSQotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1NmNjYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9IndzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLz4KLQkJPGNvbnRleHRzIGZpbGU9IndzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3Avd3Njb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYzljZWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxjb250ZXh0cz4KLQotPCEtLVRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UuamF2YS0tPgotCi08Y29udGV4dCBpZD0iUFBUUDAwMDEiPgotPCEtLVBUUFAwMDAxIGZvciB0aGUgVG9wb2xvZ3kgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhlc2UgdGFibGVzIHJlc3ByZXNlbnRzIHRoZSB0aGUgdHlwZXMgb2YgcHJvamVjdHMgYXZhaWxhYmxlIGludG8gd2hpY2ggeW91IGNhbiBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIG9yIGNsaWVudC4gCi1Zb3UgY2Fubm90IGFkZCBvciByZW1vdmUgcHJvamVjdCB0eXBlcywgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgY3JlYXRpbmcgc2V2ZXJhbCBXZWIgc2VydmljZXMgdGhhdCB1c2UgdGhlIHNhbWUgdHlwZSBvZiBzZXJ2aWNlIG9yIGNsaWVudCBwcm9qZWN0IGJlY2F1c2UgeW91IGNhbiBzZXQgdGhhdCBzZXJ2aWNlIG9yIGNsaWVudCBwcm9qZWN0IHR5cGUgYXMgdGhlIGRlZmF1bHQuIAotVG8gY2hhbmdlIHRoZSBvcmRlciwgc2VsZWN0IGEgcHJvamVjdCB0eXBlIGFuZCB1c2UgdGhlIHVwIGFuZCBkb3duIGFycm93cyB0byBtb3ZlIGl0IHdpdGhpbiB0aGUgbGlzdC4gQ2hhbmdpbmcgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGRvZXMgbm90IHJlc3RyaWN0IHlvdXIgYWJpbGl0eSB0byBzZWxlY3QgYW55IG9mIHRoZSBvcHRpb25zLgotSWYgeW91IHNlbGVjdCB0aGUgY2hlY2sgYm94LCBieSBkZWZhdWx0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkIHdpbGwgZ2VuZXJhdGUgdGhlIFdlYiBzZXJ2aWNlcyBzZXJ2ZXIgYW5kIGNsaWVudCBjb2RlIGludG8gZGlmZmVyZW50IEVBUnMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGVuYWJsZSB0aGlzIGZlYXR1cmUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tIFNlcnZlciBhbmQgUnVudGltZSBQcmVmZXJlbmNlIHBhZ2UtLT4KLTxjb250ZXh0IGlkPSJTUlBGMDAwMSI+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBkZWZhdWx0IFdlYiBzZXJ2ZXIgdG8gYmUgdXNlZCBmb3IgV2ViIHNlcnZpY2UgY3JlYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJTUlBGMDAwMiI+Ci08IS0tcnVudGltZSBwcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIgcnVudGltZSBwcmVmZXJlbmNlIHBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIGRlZmF1bHQgc2VydmVyIHJ1bi10aW1lIGVudmlyb25tZW50IHRvIGJlIHVzZWQgZm9yIFdlYiBzZXJ2aWNlIGNyZWF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS0gU3RhcnQgc2VydmVyIHBhZ2UtLT4KLTxjb250ZXh0IGlkPSJTU1dQMDAwMSI+Ci08ZGVzY3JpcHRpb24+SWYgeW91IGhhdmUgY2hvc2VuIHRvIGluc3RhbGwsIHN0YXJ0LCBvciBkZXBsb3kgdGhlIFdlYiBzZXJ2aWNlLCB0aGUgc2VydmVyIG5lZWRzIHRvIGJlIHN0YXJ0ZWQgYmVmb3JlIHRoZSB3aXphcmQgY2FuIHByb2NlZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLSBFSkIgc2VsZWN0aW9uIHdpZGdldC0tPgotPGNvbnRleHQgaWQ9IlBFQkQwMDAxIj4KLTwhLS0gRUFSIFByb2plY3RzIGRyb3AtZG93biBib3ggLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IGZyb20gdGhlIGxpc3RlZCBFQVIgcHJvamVjdHMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBFQkQwMDAyIj4KLTwhLS0gVGFibGUgY29udGFpbmluZyBhbGwgb2YgdGhlIGJlYW4gbmFtZXMgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IGZyb20gdGhlIGxpc3RlZCBKYXZhIGJlYW5zLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1XZWJTZXJ2aWNlVFBCZWFuQ2xhc3NQYWdlLmphdmEtLT4KLTxjb250ZXh0IGlkPSJQQkNMMDAwMSI+Ci08IS0tUEJDTDAwMDEgZm9yIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIEphdmEgYmVhbiBvciBjbGFzcyB1c2VkIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQkNMMDAwMiI+Ci08IS0tUEJDTDAwMDIgZm9yIHRoZSBCZWFuIFNlbGVjdGlvbiBmaWVsZCBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBuYW1lIG9mIHRoZSBKYXZhIGJlYW4gdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLiBEZWZhdWx0cyB0byB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuLiBDbGljayBCcm93c2UgY2xhc3NlcyB0byB2aWV3IHRoZSBiZWFuIGNsYXNzIG9mIHRoZSBzZWxlY3RlZCBKYXZhIGJlYW4uIFRoZSBiZWFuIGNsYXNzIGlzIGEgbW9kZWwgb3IgdGVtcGxhdGUgKGFuIGFic3RyYWN0IGRhdGEgdHlwZSkgdGhhdCBjYW4gYmUgaW5zdGFudGlhdGVkIHRvIGNyZWF0ZSBvYmplY3RzIHdpdGggYSBjb21tb24gZGVmaW5pdGlvbiBhbmQgdGhlcmVmb3JlLCBjb21tb24gcHJvcGVydGllcywgb3BlcmF0aW9ucywgYW5kIGJlaGF2aW9yLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJDTDAwMDMiPgotPCEtLVBCQ0wwMDAzIGZvciB0aGUgQmVhbiBDbGFzcyBCcm93c2UgYnV0dG9uIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gdmlldyB0aGUgYmVhbiBjbGFzcyBvZiB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJDTDAwMDQiPgotPCEtLVBCQ0wwMDA0IGZvciB0aGUgQmVhbiBSZXNvdXJjZSBCcm93c2UgYnV0dG9uIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+QnJvd3NlIHRvIHRoZSBjb3JyZWN0IEphdmEgYmVhbiB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08IS0tV1NETFNlbGVjdGlvbldpZGdldC5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUENPTjAwMDEiPgotPCEtLSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZG9jdW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZS4gQnkgZGVmYXVsdCBXU0RMIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQuIFlvdSBjYW4gZW5hYmxlIGl0IHRocm91Z2ggUHJlZmVyZW5jZXMgPiBXZWIgU2VydmljZXMgPiBXaXphcmQgVmFsaWRhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUENPTjAwMDIiPgotPCEtLSBXU0RMIERvY3VtZW50IHRleHQgZmllbGQgb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgcGF0aCB0byBhIFdTREwsIFdTSUwsIG9yIEhUTUwgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBDT04wMDAzIj4KLTwhLS0gV1NETCBSZXNvdXJjZSBCcm93c2UgYnV0dG9uIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+QnJvd3NlIHRvIHRoZSBsb2NhdGlvbiBvZiBhIFdTREwsIFdTSUwsIG9yIEhUTUwgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBDT04wMDA0Ij4KLTwhLS0gIGZvciB0aGUgV2l6YXJkIFdTREwgVmFsaWRhdGlvbiB0YWJsZSBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgdGFibGUgbGlzdHMgYW55IGlzc3VlcyB0aGUgV1NETCB2YWxpZGF0b3IgbWF5IGhhdmUgZW5jb3VudGVyZWQgd2hpbGUgZXhhbWluaW5nIHRoZSBzcGVjaWZpZWQgV1NETCBmaWxlLiBCeSBkZWZhdWx0IFdTREwgdmFsaWRhdGlvbiBpcyBkaXNhYmxlZC4gWW91IGNhbiBlbmFibGUgaXQgdGhyb3VnaCBQcmVmZXJlbmNlcyA+IFdlYiBTZXJ2aWNlcyA+IFdpemFyZCBWYWxpZGF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQ09OMDAwNSI+Ci08IS0tICBXaXphcmQgV1NETCBWYWxpZGF0aW9uIHN1bW1hcnkgbWVzc2FnZSBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgdGFibGUgbGlzdHMgYW55IGlzc3VlcyB0aGUgV1NETCB2YWxpZGF0b3IgbWF5IGhhdmUgZW5jb3VudGVyZWQgd2hpbGUgZXhhbWluaW5nIHRoZSBzcGVjaWZpZWQgV1NETCBmaWxlLiBCeSBkZWZhdWx0IFdTREwgdmFsaWRhdGlvbiBpcyBkaXNhYmxlZC4gWW91IGNhbiBlbmFibGUgaXQgdGhyb3VnaCBQcmVmZXJlbmNlcyA+IFdlYiBTZXJ2aWNlcyA+IFdpemFyZCBWYWxpZGF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQ09OMDAwNiI+Ci08IS0tICBTdG9wIFdpemFyZCBXU0RMIFZhbGlkYXRpb24gYnV0dG9uIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyBidXR0b24gdG8gc3RvcCB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgc2VsZWN0ZWQgV1NETCBmaWxlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1SdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nLmphdmEtLT4KLTxjb250ZXh0IGlkPSJQV1JTMDAwMSI+Ci08IS0tICBSdW4tdGltZS9zZXJ2ZXJzIGluIHRoZSBXZWIgU2VydmljZSB0eXBlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBzY2VuYXJpbyBjb25maWd1cmF0aW9uIGZvciBydW50aW1lIGVudmlyb25tZW50cywgc2VydmVycywgYW5kIHByb2plY3RzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwMiI+Ci08IS0tICBzZXJ2aWNlLXNpZGUgcnVuLXRpbWUgZW52aXJvbm1lbnQgc2VsZWN0aW9uIG9mIHRoZSBydW4tdGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgaXMgdGhlIHNlcnZlci1zaWRlIHJ1bnRpbWUgZW52aXJvbm1lbnQgd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIHdpbGwgdXNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwMyI+Ci08IS0tIHNlcnZpY2Utc2lkZSBzZXJ2ZXIgc2VsZWN0aW9uIG9mIHRoZSBydW4tdGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgaXMgdGhlIHNlcnZlci1zaWRlIHNlcnZlciBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2Ugd2lsbCBydW4uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDA1Ij4KLTwhLS0gIHJ1bnRpbWUgdmlldyByYWRpbyBidXR0b24tLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyB2aWV3IHRvIHNlZSBydW50aW1lL3NlcnZlciBjb21iaW5hdGlvbnMgc29ydGVkIGJ5IHJ1bnRpbWUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDA2Ij4KLTwhLS1zZXJ2ZXIgdmlldyByYWRpbyBidXR0b24tLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyB2aWV3IHRvIHNlZSBydW50aW1lL3NlcnZlciBjb21iaW5hdGlvbnMgc29ydGVkIGJ5IHNlcnZlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDciPgotPCEtLSAgY2V4cGxvcmUgdmlldyByYWRpbyBidXR0b24tLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyB2aWV3IHRvIGV4cGxvcmUgYXZhaWxhYmxlIHJ1bnRpbWUvc2VydmVyIGNvbWJpbmF0aW9ucy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTwhLS1Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEtLT4KLTxjb250ZXh0IGlkPSJQV1JTMDAxNiI+Ci08IS0tICBzZXJ2aWNlLXNpZGUgV2ViIHByb2plY3QgY29tYm8gYm94IG9mIHRoZSBydW4tdGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgcHJvamVjdCBpbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHdpbGwgYmUgY3JlYXRlZC4gVGhlIHdpemFyZCB3aWxsIGdlbmVyYXRlIHRoaXMgcHJvamVjdCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAxOCI+Ci08IS0tIGNsaWVudCB0eXBlIGNvbWJvIGJveCAgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IGZyb20gdGhlIGxpc3RlZCBwcm9qZWN0IHR5cGVzIHRoZSB0eXBlIG9mIHByb2plY3QgdGhhdCB5b3Ugd2FudCBjcmVhdGVkIHRvIGNvbnRhaW4geW91ciBXZWIgc2VydmljZSBjbGllbnQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDIwIj4KLTwhLS0gc2VydmljZSBwcm9qZWN0IHR5cGUgY29tYm8gYm94IC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBmcm9tIHRoZSBsaXN0ZWQgcHJvamVjdCB0eXBlcyB0aGUgdHlwZSBvZiBwcm9qZWN0IHRoYXQgeW91IHdhbnQgY3JlYXRlZCB0byBjb250YWluIHlvdXIgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08Y29udGV4dCBpZD0iUFdTTTAwMDEiPgotPCEtLSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5UaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93IHRvIGNvZGUgdGhlIHByb3h5IGZpbGUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDAyIj4KLTwhLS0gVGVzdCBjaGVjayBib3ggb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPklmIHNlbGVjdGVkIHdpbGwgbGF1bmNoIHRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGluIHRoZSBXZWIgYnJvd3Nlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDMiPgotPCEtLSBUZXN0IFR5cGUgQ29tYm8gYm94IG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5UaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93IHRvIGNvZGUgdGhlIHByb3h5IGZpbGUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDA2Ij4KLTwhLS0gU2VsZWN0IEFsbCBidXR0b24gb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRoaXMgYnV0dG9uIHRvIGFkZCBhbGwgdGhlIGF2YWlsYWJsZSBtZXRob2RzIHRvIHRoZSBXZWIgc2VydmljZSBzYW1wbGUgcHJveHkuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDA3Ij4KLTwhLS0gRGVzZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyBidXR0b24gdG8gcmVtb3ZlIGFsbCB0aGUgYXZhaWxhYmxlIG1ldGhvZHMgdG8gdGhlIFdlYiBzZXJ2aWNlIHNhbXBsZSBwcm94eS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDgiPgotPCEtLSBKU1AgRm9sZGVyIGZpZWxkIG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5Gb2xkZXIgaW50byB3aGljaCB5b3VyIFdlYiBzZXJ2aWNlIEpTUHMgYXJlIGRlcG9zaXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDkiPgotPCEtLSBKU1AgRm9sZGVyIEJyb3dzZSBidXR0b24gb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRvIGZpbmQgdGhlIGZvbGRlciBpbnRvIHdoaWNoIHlvdXIgV2ViIHNlcnZpY2UgSlNQcyBhcmUgZGVwb3NpdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAxMCI+Ci08IS0tIFByb2plY3QgY29tYm8gYm94IG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgYW4gZXhpc3RpbmcgcHJvamVjdCBpbnRvIHdoaWNoIHlvdXIgc2FtcGxlIHdpbGwgYmUgZ2VuZXJhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAxNCI+Ci08IS0tIEZvbGRlciBmaWVsZCBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Rm9sZGVyIGludG8gd2hpY2ggdGhlIGZ1bGx5IHF1YWxpZmllZCBwcm94eSBpcyBnZW5lcmF0ZWQuIERlZmF1bHRzIHRvIHRoZSBzb3VyY2UgZm9sZGVyIGluc2lkZSBvZiB5b3VyIFdlYiBwcm9qZWN0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAxNSI+Ci08IS0tIFJ1biB0ZXN0IGNoZWNrIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIHJ1biB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uIG9uIHRoZSBzZXJ2ZXIuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDE2Ij4KLTwhLS0gRUFSIGNvbWJvIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBFQVIgaW4gd2hpY2ggeW91IHdhbnQgeW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tIGhhbmRsZXIgd2l6YXJkLS0+Ci08Y29udGV4dCBpZD0iQUhETDAwMDEiPgotPCEtLUhhbmRsZXIgY29uZmlnIHBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyB3aXphcmQgdG8gYWRkIGFuZCByZW1vdmUgaGFuZGxlcnMgZm9yIGEgV2ViIHNlcnZpY2UuIFRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBsaXN0ZWQgcmVwcmVzZW50cyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGhhbmRsZXJzIHdpbGwgYmUgYWN0ZWQgdXBvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IkFIREwwMDAyIj4KLTwhLS1IYW5kbGVyIGNvbmZpZyBwYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgd2l6YXJkIHRvIGFkZCBhbmQgcmVtb3ZlIGhhbmRsZXJzIGZvciBhIFdlYiBzZXJ2aWNlLiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgbGlzdGVkIHJlcHJlc2VudHMgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBoYW5kbGVycyB3aWxsIGJlIGFjdGVkIHVwb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJBSERMMDAwMyI+Ci08IS0tSGFuZGxlciBjb25maWcgcGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHdpemFyZCB0byBhZGQgYW5kIHJlbW92ZSBoYW5kbGVycyBmb3IgYSBXZWIgc2VydmljZS4gVGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZCByZXByZXNlbnRzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgaGFuZGxlcnMgd2lsbCBiZSBhY3RlZCB1cG9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotCi08IS0tV2ViU2VydmljZVdpek5ld0ZpcnN0UGFnZS0tPgotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDAxIj4KLTwhLS0gRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPk9uIHRoaXMgcGFnZSBzZWxlY3QgdGhlIGFydGlmYWN0IGZyb20gd2hpY2ggeW91ciBXZWIgY2xpZW50IHdpbGwgYmUgY3JlYXRlZCwgYW5kIHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQKLXRvIGNvbXBsZXRlOgotLSBEZXZlbG9wOiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBjbGllbnQgY29kZQotLSBBc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIGNsaWVudCBnZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIKLS0gRGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBjbGllbnQKLS0gSW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgdGhlIGNsaWVudCBvbiB0aGUgY2hvc2VuIHNlcnZlcgotLSBTdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgY2xpZW50IGhhcyBiZWVuIGluc3RhbGxlZCBvbiBpdAotLSBUZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIGNsaWVudAotU2VsZWN0IHRoZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgZm9yIHlvdXIgV2ViIGNsaWVudCwgYW5kIHdoZXRoZXIgb3Igbm90IHlvdSB3YW50IHRvIHB1Ymxpc2ggb3IgbW9uaXRvciB0aGUgc2VydmljZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAxNCI+Ci08IS0tTW9uaXRvciBjaGVja2JveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPk1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgc2VuZCB0aGUgV2ViIHNlcnZpY2UgdHJhZmZpYyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZCBieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDIwIj4KLTwhLS1TZXJ2aWNlIGltcGxlbWVudGF0aW9uIGZpZWxkIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDIyIj4KLTwhLS1TZXJ2ZXIgbGluayBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91IHdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBzZXJ2ZXIuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDIzIj4KLTwhLS1ydW50aW1lIGxpbmsgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBydW50aW1lLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyNCI+Ci08IS0tcHJvamVjdHMgbGluayBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuIEVuc3VyZSB0aGF0IHRoZSBwcm9qZWN0IHNlbGVjdGVkCi1hcyB0aGUgQ2xpZW50IFdlYiBQcm9qZWN0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBTZXJ2aWNlIFdlYiBQcm9qZWN0LCBvciB0aGUKLXNlcnZpY2Ugd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50J3MgZ2VuZXJhdGVkIGFydGlmYWN0cy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjUiPgotPCEtLWNsaWVudCB0eXBlIGNvbWJvIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhlIEphdmEgYmVhbiBjbGllbnQgcHJveHkgdGhhdCBpcyBnZW5lcmF0ZWQgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjYiPgotPCEtLUNsaWVudCBzbGlkZXIgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgY2xpZW50IGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQKLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6Ci0tIERldmVsb3A6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGNsaWVudCBjb2RlCi0tIEFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgY2xpZW50IGdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlcgotLSBEZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIGNsaWVudAotLSBJbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCB0aGUgY2xpZW50IG9uIHRoZSBjaG9zZW4gc2VydmVyCi0tIFN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBjbGllbnQgaGFzIGJlZW4gaW5zdGFsbGVkIG9uIGl0Ci0tIFRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgY2xpZW50Ci08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMzAiPgotPCEtLWZpbGUgb3ZlcndyaXRlIGNoZWNrYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBhbGxvd3MgeW91IHRvIG92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbiB3aGVuIG92ZXJ3cml0aW5nIGZpbGVzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU0lMMDAwMSI+Ci08IS0tICBXU0lMIEltcG9ydCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIHRvIGdlbmVyYXRlIGEgc3RhbmRhcmRpemVkIFdTREwgcmVmZXJlbmNlIChXU0lMKSBkb2N1bWVudCBpbiB5b3VyIHByb2plY3QuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTSUwwMDAyIj4KLTwhLS0gIFdTSUwgVGV4dCBmaWVsZC0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBuYW1lIG9mIHRoZSBXU0lMIGRvY3VtZW50IGJlaW5nIGdlbmVyYXRlZCwgb3IgYWNjZXB0IHRoZSBkZWZhdWx0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU0lMMDAwMyI+Ci08IS0tICBXU0lMIGJyb3dzZSBidXR0b24tLT4KLTxkZXNjcmlwdGlvbj5Ccm93c2UgdG8gdGhlIGxvY2F0aW9uIG9mIGEgV1NETCBvciBXU0lMIGZpbGUgZnJvbSB3aGljaCB0aGUgbmV3IFdTSUwgZG9jdW1lbnQgd2lsbCBiZSBnZW5lcmF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTSUwwMDA0Ij4KLTwhLS0gIFdTSUwgdGFibGUtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGxpc3RzIGFsbCB0aGUgV1NETCBVUklzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgV1NJTCBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDEiPgotPCEtLSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSB0eXBlIG9mIFdlYiBzZXJ2aWNlIHlvdSB3YW50IHRvIGdlbmVyYXRlIGFuZCBhbnkgZmlsZSBhbmQgZm9sZGVyIG9wdGlvbnMgZm9yIHlvdXIgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDAzIj4KLTwhLS1PdmVyd3JpdGUgZmlsZXMgd2l0aG91dCB3YXJuaW5nIChjaGVja2JveCktLT4KLTxkZXNjcmlwdGlvbj5BbGxvd3MgeW91IHRvIG92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbiB3aGVuIG92ZXJ3cml0aW5nIGZpbGVzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwNCI+Ci08IS0tQ3JlYXRlIGZvbGRlcnMgd2hlbiBuZWNlc3NhcnkgKGNoZWNrYm94KS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0byBjcmVhdGUgZm9sZGVycyBhbmQgZm9sZGVyIHN0cnVjdHVyZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDA1Ij4KLTwhLS0gIEdlbmVyYXRlIFByb3h5IGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlRoZSBnZW5lcmF0ZWQgSmF2YSBiZWFuIHByb3h5IHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDA2Ij4KLTwhLS0gIFRlc3QgUHJveHkgY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDkiPgotPCEtLSAgU3RhcnQgV2ViIFByb2plY3QgY2hlY2sgYm94IGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIuIElmIHlvdSBsZWF2ZSB0aGUgYm94IHVuY2hlY2tlZCB5b3Ugd2lsbCBoYXZlIHRvIG1hbnVhbGx5IHN0YXJ0IHRoZSBzZXJ2ZXIuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDEwIj4KLTwhLS0gV2ViIFNlcnZpY2UgVHlwZSBjb21ibyBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHR5cGUgb2YgV2ViIHNlcnZpY2UgeW91IHdhbnQgdG8gYnVpbGQuIFlvdXIgc2VsZWN0aW9uIHdpbGwgYWZmZWN0IHRoZSBmaWxlcyBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTEiPgotPCEtLSAgV2l6YXJkIFNjZW5hcmlvIFNlcnZpY2UgZ3JvdXAgb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHR5cGUgb2YgV2ViIHNlcnZpY2UgeW91IHdhbnQgdG8gYnVpbGQuIFlvdXIgc2VsZWN0aW9uIHdpbGwgYWZmZWN0IHRoZSBmaWxlcyBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTEiPgotPCEtLSAgVGVzdCBzZXJ2aWNlIGNoZWNrYm94IG9mIHRoZSBwcm9qZWN0IHBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGxhdW5jaCB0aGUgV2ViIHNlcnZpY2UgaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBvcmRlciB0byBleGFtaW5lIGl0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMiI+Ci08IS0tICBMYXVuY2ggVURESSBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVja2JveCB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBvcmRlciB0byBwdWJsaXNoIHRoZSBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDEzIj4KLTwhLS0gIFdpemFyZCBTY2VuYXJpbyBDbGllbnQgZ3JvdXAgb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5UaGUgZ2VuZXJhdGVkIEphdmEgYmVhbiBwcm94eSBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxNCI+Ci08IS0tICBXZWIgU2VydmljZSBDbGllbnQgVHlwZSBjb21ibyBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIGNsaWVudCBwcm94eSB0eXBlLiBUaGUgZ2VuZXJhdGVkIEphdmEgYmVhbiBwcm94eSBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxNSI+Ci08IS0tICBDaGVjayBPdXQgRmlsZXMgY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRvIGNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTxjb250ZXh0IGlkPSJQV1BCMDAwMSI+Ci08IS0tICBVRERJIFB1Ymxpc2ggUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gYWxsb3cgeW91IHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BCMDAwMiI+Ci08IS0tICBVRERJIExhdW5jaCBjaGVjayBib3ggb2YgdGhlIFVEREkgUHVibGlzaCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+SWYgc2VsZWN0ZWQgd2lsbCBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBhbGxvdyB5b3UgdG8gcHVibGlzaCB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXV1MwMDAxIj4KLTwhLS0gIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudCB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1dTMDAwMiI+Ci08IS0tICBXU0RMIERvY3VtZW50IHRleHQgZmllbGQgb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgcGF0aCB0byBhIFdTREwsIFdTSUwsIG9yIEhUTUwgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXV1MwMDAzIj4KLTwhLS0gIFdTREwgUmVzb3VyY2UgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkJyb3dzZSB0byB0aGUgbG9jYXRpb24gb2YgYSBXU0RMLCBXU0lMLCBvciBIVE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPGNvbnRleHQgaWQ9IkRCQVMwMDAxIj4KLTwhLS0gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiB1c2VyIG5hbWUgLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIHVzZXIgbmFtZSB1c2VkIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJEQkFTMDAwMiI+Ci08IS0tIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gcGFzc3dvcmQgLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIHBhc3N3b3JkIHVzZWQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi0KLTwvY29udGV4dHM+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3dzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3Avd3NjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWUzNzdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3Avd3NjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxjb250ZXh0cz4KLQotPGNvbnRleHQgaWQ9IlBTVFAwMDAxIj4KLTwhLS0gIFRlc3QgVHlwZSBDb21ibyBib3ggb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGluIHdoaWNoIHlvdSB3b3VsZCBsaWtlIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJlaW5nIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBTVFAwMDAyIj4KLTwhLS0gIExhdW5jaCBidXR0b24gb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyB0byBsYXVuY2ggdGhlIFdlYiBzZXJ2aWNlIGluIGEgYnJvd3NlciB3aW5kb3cgdG8gdGVzdCBpdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tV2ViU2VydmljZVdpek5ld0ZpcnN0UGFnZS0tPgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMDEiPgotPCEtLSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+T24gdGhpcyBwYWdlIHNlbGVjdCB0aGUgYXJ0aWZhY3QgZnJvbSB3aGljaCB5b3VyIFdlYiBzZXJ2aWNlIG9yIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQsIGFuZCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50IHRvIGNvbXBsZXRlOgotLSBEZXZlbG9wOiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBzZXJ2aWNlIGNvZGUKLS0gQXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQgZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyCi0tIERlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgc2VydmljZQotLSBJbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCB0aGUgc2VydmljZSBvbiB0aGUgY2hvc2VuIHNlcnZlcgotLSBTdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQgb24gaXQKLS0gVGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlCi1TZWxlY3QgdGhlIHNlcnZlciBhbmQgcnVudGltZSBmb3IgeW91ciBXZWIgc2VydmljZSBvciBjbGllbnQsIGFuZCB3aGV0aGVyIG9yIG5vdCB5b3Ugd2FudCB0byBwdWJsaXNoIG9yIG1vbml0b3IgdGhlIHNlcnZpY2UuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMTAiPgotPCEtLVdlYiBzZXJ2aWNlIHR5cGUgY29tYm8gYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSB0eXBlIG9mIFdlYiBzZXJ2aWNlIHlvdSB3YW50IHRvIGNyZWF0ZS4gQSBib3R0b20tdXAgc2VydmljZSBjcmVhdGVzIGEgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIEVKQiwgd2hpbGUgYSB0b3AtZG93biBzZXJ2aWNlIHdpbGwgY3JlYXRlIGEgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlIGFuZCB0aGVuIGNyZWF0ZSBhIHNrZWxldG9uIEphdmEgYmVhbiBvciBFSkIgZm9yIHlvdSB0byBpbXBsZW1lbnQgbGF0ZXIuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDE0Ij4KLTwhLS1Nb25pdG9yIGNoZWNrYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLCB3aGljaCBhbGxvd3MgeW91IHRvIHdhdGNoIHRoZSBTT0FQIHRyYWZmaWMgZ2VuZXJhdGVkIGJ5IHRoZSBXZWIgc2VydmljZSBhbmQgdG8gdGVzdCB0aGlzIHRyYWZmaWMgZm9yIFdTLUkgY29tcGxpYW5jZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMTIiPgotPCEtLUxhdW5jaCBVRERJIGNoZWNrIGJveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjAiPgotPCEtLVNlcnZpY2UgaW1wbGVtZW50YXRpb24gZmllbGQgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgVVJJIHRvIHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjEiPgotPCEtLVNlcnZpY2Ugc2xpZGVyIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQgdG8gY29tcGxldGUgdXNpbmcgdGhlIHNsaWRlcjoKLS0gRGV2ZWxvcDogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgc2VydmljZSBjb2RlCi0tIEFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50IGdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlcgotLSBEZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UKLS0gSW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgdGhlIHNlcnZpY2Ugb24gdGhlIGNob3NlbiBzZXJ2ZXIKLS0gU3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIHNlcnZpY2UgaGFzIGJlZW4gaW5zdGFsbGVkIG9uIGl0Ci0tIFRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZQotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDIyIj4KLTwhLS1TZXJ2ZXIgbGluayBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91IHdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBzZXJ2ZXIuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDIzIj4KLTwhLS1ydW50aW1lIGxpbmsgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91IHdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBydW50aW1lIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgcnVudGltZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjQiPgotPCEtLXByb2plY3RzIGxpbmsgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHNlcnZpY2UgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdCBzZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZCBFQVIgY2xpY2sgb24gdGhlIHByb2plY3QgbGluay4gRW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc2VsZWN0ZWQgYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlIHNlcnZpY2Ugd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50J3MgZ2VuZXJhdGVkIGFydGlmYWN0cy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMzAiPgotPCEtLWZpbGUgb3ZlcndyaXRlIGNoZWNrYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBhbGxvd3MgeW91IHRvIG92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbiB3aGVuIG92ZXJ3cml0aW5nIGZpbGVzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwvY29udGV4dHM+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU0MGZiMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJfMS4wLjAuamFyCi1iYWsKLXRlbXAKLURpdGFMaW5rLmNhdAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjNkY2IxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2E1MTNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjEuNS4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iLi4iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWE0YTY5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViZDQwMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c2NvbnN1bXB0aW9uYnVpbGRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICB3c2NvbnN1bXB0aW9udF90b2MueG1sLFwKLSAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGltYWdlcy8sXAotICAgICAgICAgICAgICAgY29uY2VwdHMvKi5odG0qLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouaHRtKixcCi0gICAgICAgICAgICAgICByZWYvKi5odG0qLFwKLSAgICAgICAgICAgICAgIGluZGV4LyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMsXAotCQkgICAgICAgKi5tYXBsaXN0LFwKLSAgICAgICAgICAgICAgICouZGl0YW1hcCxcCi0JCSAgICAgICBjb25jZXB0cy8qLmRpdGEsXAotICAgICAgICAgICAgICAgdGFza3MvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHJlZi8qLmRpdGEKLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFhYmIzOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN1ZGRpIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24KLWRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPC9pbmRleHRlcm0+PGluZGV4dGVybT5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwKLWFuZCBJbnRlZ3JhdGlvbiA8L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+VURESTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPlVEREkgaGFzIHR3byBmdW5jdGlvbnM6IDx1bD4KLTxsaT5JdCBpcyBhIFNPQVAtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGhvdyBjbGllbnRzIGNvbW11bmljYXRlIHdpdGgKLVVEREkgcmVnaXN0cmllcy48L2xpPgotPGxpPkl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsIHJlcGxpY2F0ZWQgcmVnaXN0cmllcy48L2xpPgotPC91bD48L3A+Ci08cD5VRERJIGluY2x1ZGVzIGFuIFhNTCBzY2hlbWEgZm9yIFNPQVAgbWVzc2FnZXMgdGhhdCBkZWZpbmVzIGEgc2V0IG9mIGRvY3VtZW50cwotdG8gZGVzY3JpYmUgYnVzaW5lc3MgYW5kIHNlcnZpY2VzIGluZm9ybWF0aW9uLCBhIGNvbW1vbiBzZXQgb2YgQVBJcyBmb3IgcXVlcnlpbmcKLWFuZCBwdWJsaXNoaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBkaXJlY3RvcmllcywgYW5kIGFuIEFQSSBmb3IgcmVwbGljYXRpbmcKLWRpcmVjdG9yeSBlbnRyaWVzIGJldHdlZW4gcGVlciBVRERJIG5vZGVzLjwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREkgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZyIKLXNjb3BlPSJleHRlcm5hbCI+d3d3LnVkZGkub3JnPC94cmVmPjwvcD4KLTxzZWN0aW9uPjx0aXRsZT5VRERJIHJlZ2lzdHJpZXM8L3RpdGxlPjxwPlVEREkgbWFuYWdlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYgotc2VydmljZXMgYnkgcmVseWluZyBvbiBhIGRpc3RyaWJ1dGVkIHJlZ2lzdHJ5IG9mIGJ1c2luZXNzZXMgYW5kIHRoZWlyIHNlcnZpY2UKLWRlc2NyaXB0aW9ucyBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbiBYTUwgZm9ybWF0LiBCZWZvcmUgeW91IGNhbiBwdWJsaXNoIHlvdXIKLWJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBwdWJsaWMgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyCi15b3VyIGJ1c2luZXNzIGVudGl0eSB3aXRoIGEgVURESSByZWdpc3RyeS48L3A+PHA+VURESSByZWdpc3RyaWVzIGNvbWUgaW4gdHdvCi1mb3JtczogcHVibGljIGFuZCBwcml2YXRlLiZuYnNwOyBCb3RoIHR5cGVzIGNvbXBseSB0byB0aGUgc2FtZSBzcGVjaWZpY2F0aW9ucy4mbmJzcDsKLUEgcHJpdmF0ZSByZWdpc3RyeSBlbmFibGVzIHlvdSB0byBwdWJsaXNoIGFuZCB0ZXN0IHlvdXIgaW50ZXJuYWwgZS1idXNpbmVzcwotYXBwbGljYXRpb25zIGluJm5ic3A7YSBzZWN1cmUsIHByaXZhdGUgZW52aXJvbm1lbnQuPC9wPjxwPkEgcHVibGljIHJlZ2lzdHJ5Ci1pcyBhIGNvbGxlY3Rpb24gb2YgcGVlciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgYnVzaW5lc3NlcwotYW5kIHNlcnZpY2VzLiBJdCBsb2NhdGVzIHNlcnZpY2VzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgYXQgb25lIG9mIGl0cyBwZWVyIG5vZGVzCi1hbmQgZmFjaWxpdGF0ZXMgdGhlIGRpc2NvdmVyeSBvZiBwdWJsaXNoZWQgV2ViIHNlcnZpY2VzLiBEYXRhIGlzIHJlcGxpY2F0ZWQKLWF0IGVhY2ggb2YgdGhlIHJlZ2lzdHJpZXMgb24gYSByZWd1bGFyIGJhc2lzLiBUaGlzIGVuc3VyZXMgY29uc2lzdGVuY3kgaW4KLXNlcnZpY2UgZGVzY3JpcHRpb24gZm9ybWF0cyBhbmQgbWFrZXMgaXQgZWFzeSB0byB0cmFjayBjaGFuZ2VzIGFzIHRoZXkgb2NjdXIuIDx0bQotdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gbWFpbnRhaW5zCi10d28gcHVibGljIHJlZ2lzdHJpZXMgY2FsbGVkIHRoZSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgYW5kIHRoZSA8dG0gdG1jbGFzcz0iaWJtIgotdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IFVEREkgVGVzdAotUmVnaXN0cnkuIFRoZSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gVURESQotVGVzdCBSZWdpc3RyeSBhbGxvd3MgeW91IHRvIGRldmVsb3AgeW91ciBXZWIgc2VydmljZSBhbmQgZXhwZXJpZW5jZSB0aGUgVURESQotcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2l0aG91dCBwbGFjaW5nIHlvdXIgV2ViIHNlcnZpY2UgaW4gYW4gb2ZmaWNpYWwgcmVnaXN0cnkuJm5ic3A7Ci1Vc2UgdGhlIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJCi1UZXN0IFJlZ2lzdHJ5IHRvIGV4cGVyaW1lbnQgd2l0aCBVRERJLCBhbmQgdG8gdGVzdCBhbmQgdmFsaWRhdGUgeW91ciBXZWIgc2VydmljZS4mbmJzcDsKLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBJQk0ncyBwdWJsaWMgcmVnaXN0cmllcywgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly91ZGRpLmlibS5jb20iIHNjb3BlPSJleHRlcm5hbCI+aHR0cDovL3VkZGkuaWJtLmNvbTwveHJlZj4gRm9yCi1hIGxpc3Qgb2YgcHVibGljIHJlZ2lzdHJpZXMsIHJlZmVyIHRvICA8eHJlZiBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly93d3cudWRkaS5vcmcvcmVnaXN0ZXIuaHRtbDwveHJlZj48L3A+PHA+QSBwcml2YXRlCi1yZWdpc3RyeSBhbGxvd3MgeW91IHRvIHB1Ymxpc2ggYW5kIHRlc3QgeW91ciBpbnRlcm5hbCBhcHBsaWNhdGlvbnMgaW4gYSBzZWN1cmUsCi1wcml2YXRlIGVudmlyb25tZW50LjwvcD48cD5UaGUgVURESSBCdXNpbmVzcyBSZWdpc3RyeSBhY3RzIGFzIGEgQjJCIGRpcmVjdG9yeQotbGlua2luZyBtYXJrZXRwbGFjZXMsIGJ1eWVycywgYW5kIHNlbGxlcnMuIFRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiB0aGUKLXJlZ2lzdHJ5IGNvbnNpc3RzIG9mIHRocmVlIGNvbXBvbmVudHM6IHdoaXRlIHBhZ2VzLCB5ZWxsb3cgcGFnZXMsIGFuZCBncmVlbgotcGFnZXMuIFdoaXRlIHBhZ2VzIGluY2x1ZGUgdGhlIGJ1c2luZXNzIG5hbWUsIGNvbnRhY3QgaW5mb3JtYXRpb24sIGFuZCBhIHRleHQKLWRlc2NyaXB0aW9uIG9mIHRoZSBidXNpbmVzcydzIHNlcnZpY2VzLiBZZWxsb3cgcGFnZXMgaW5jbHVkZSBpbmR1c3RyaWFsIGNhdGVnb3JpemF0aW9ucwotYmFzZWQgb24gc3RhbmRhcmQgdGF4b25vbWllcyBzdWNoIGFzIE5BSUNTLCBJU08gMzE2NiwgYW5kIFVOU1BTQy4gR3JlZW4gcGFnZXMKLWluY2x1ZGUgcmVmZXJlbmNlcyB0byBzcGVjaWZpY2F0aW9ucyBmb3IgV2ViIHNlcnZpY2VzIGFuZCBwb2ludGVycyB0byB2YXJpb3VzCi1maWxlIGFuZCBVUkwtYmFzZWQgZGlzY292ZXJ5IG1lY2hhbmlzbXMuIFRoaXMgbWFrZXMgaXQgZWFzeSBmb3IgYnVzaW5lc3NlcwotdG8gaW50ZWdyYXRlIGFjcm9zcyBtYXJrZXRwbGFjZXMuIEJlY2F1c2UgaXQgaXMgcmVnaXN0ZXJlZCwgaW5mb3JtYXRpb24gaXMKLW1hZGUgYXZhaWxhYmxlIGFjcm9zcyBhbGwgYXBwbGljYXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQUlDUyByZWZlcgotdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5uYWljcy5jb20iIHNjb3BlPSJleHRlcm5hbCI+d3d3Lm5haWNzLmNvbTwveHJlZj4gRm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIFVOU1BTQyByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LnVuc3BzYy5vcmciCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy51bnNwc2Mub3JnPC94cmVmPiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBJU08gMzE2NiByZWZlcgotdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9lbi9wcm9kcy1zZXJ2aWNlcy9pc28zMTY2bWEvaW5kZXguaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+aHR0cDovL3d3dy5pc28ub3JnL2lzby9lbi9wcm9kcy1zZXJ2aWNlcy9pc28zMTY2bWEvaW5kZXguaHRtbDwveHJlZj48L3A+PHA+QnVzaW5lc3NlcwotcG9wdWxhdGUgdGhlIHJlZ2lzdHJ5IHdpdGggZGVzY3JpcHRpb25zIG9mIHRoZSBzZXJ2aWNlcyB0aGF0IHRoZXkgc3VwcG9ydC4KLVVEREkgYXNzaWducyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRvIGVhY2ggc2VydmljZSBkZXNjcmlwdGlvbiBhbmQgYnVzaW5lc3MKLXJlZ2lzdHJhdGlvbi4gVGhlc2UgYmVjb21lIHRoZSBzZXJ2aWNlIGFuZCBidXNpbmVzcyBrZXlzIHJlc3BlY3RpdmVseS4gU2VhcmNoCi1lbmdpbmVzLCBhbmQgYXBwbGljYXRpb25zIHF1ZXJ5IHRoZSByZWdpc3RyeSB0byBkaXNjb3ZlciBzZXJ2aWNlcy4gVURESSBzZXJ2ZXJzCi1hcmUgYSBkaXJlY3Rvcnkgb2YgYXZhaWxhYmxlIHNlcnZpY2VzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycy48L3A+PC9zZWN0aW9uPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSJjd3NkbHVkLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbHVkLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMTJlNDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24sIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24sIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzZGx1ZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjdWRkaSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjdWRkaSI+PGEgbmFtZT0iY3VkZGkiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9oMT4KLQotCi0KLQotPGRpdj48cD5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uCi1kZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlVEREkgaGFzIHR3byBmdW5jdGlvbnM6IDx1bD4KLTxsaT5JdCBpcyBhIFNPQVAtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGhvdyBjbGllbnRzIGNvbW11bmljYXRlIHdpdGgKLVVEREkgcmVnaXN0cmllcy48L2xpPgotCi08bGk+SXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWwgcmVwbGljYXRlZCByZWdpc3RyaWVzLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPHA+VURESSBpbmNsdWRlcyBhbiBYTUwgc2NoZW1hIGZvciBTT0FQIG1lc3NhZ2VzIHRoYXQgZGVmaW5lcyBhIHNldCBvZiBkb2N1bWVudHMKLXRvIGRlc2NyaWJlIGJ1c2luZXNzIGFuZCBzZXJ2aWNlcyBpbmZvcm1hdGlvbiwgYSBjb21tb24gc2V0IG9mIEFQSXMgZm9yIHF1ZXJ5aW5nCi1hbmQgcHVibGlzaGluZyBpbmZvcm1hdGlvbiB0byB0aGUgZGlyZWN0b3JpZXMsIGFuZCBhbiBBUEkgZm9yIHJlcGxpY2F0aW5nCi1kaXJlY3RvcnkgZW50cmllcyBiZXR3ZWVuIHBlZXIgVURESSBub2Rlcy48L3A+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREkgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmciIHRhcmdldD0iX2JsYW5rIj53d3cudWRkaS5vcmc8L2E+PC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+VURESSByZWdpc3RyaWVzPC9oND48cD5VRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIKLXNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC4gQmVmb3JlIHlvdSBjYW4gcHVibGlzaCB5b3VyCi1idXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgcHVibGljIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlcgoteW91ciBidXNpbmVzcyBlbnRpdHkgd2l0aCBhIFVEREkgcmVnaXN0cnkuPC9wPgotPHA+VURESSByZWdpc3RyaWVzIGNvbWUgaW4gdHdvCi1mb3JtczogcHVibGljIGFuZCBwcml2YXRlLsKgIEJvdGggdHlwZXMgY29tcGx5IHRvIHRoZSBzYW1lIHNwZWNpZmljYXRpb25zLsKgCi1BIHByaXZhdGUgcmVnaXN0cnkgZW5hYmxlcyB5b3UgdG8gcHVibGlzaCBhbmQgdGVzdCB5b3VyIGludGVybmFsIGUtYnVzaW5lc3MKLWFwcGxpY2F0aW9ucyBpbsKgYSBzZWN1cmUsIHByaXZhdGUgZW52aXJvbm1lbnQuPC9wPgotPHA+QSBwdWJsaWMgcmVnaXN0cnkKLWlzIGEgY29sbGVjdGlvbiBvZiBwZWVyIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBidXNpbmVzc2VzCi1hbmQgc2VydmljZXMuIEl0IGxvY2F0ZXMgc2VydmljZXMgdGhhdCBhcmUgcmVnaXN0ZXJlZCBhdCBvbmUgb2YgaXRzIHBlZXIgbm9kZXMKLWFuZCBmYWNpbGl0YXRlcyB0aGUgZGlzY292ZXJ5IG9mIHB1Ymxpc2hlZCBXZWIgc2VydmljZXMuIERhdGEgaXMgcmVwbGljYXRlZAotYXQgZWFjaCBvZiB0aGUgcmVnaXN0cmllcyBvbiBhIHJlZ3VsYXIgYmFzaXMuIFRoaXMgZW5zdXJlcyBjb25zaXN0ZW5jeSBpbgotc2VydmljZSBkZXNjcmlwdGlvbiBmb3JtYXRzIGFuZCBtYWtlcyBpdCBlYXN5IHRvIHRyYWNrIGNoYW5nZXMgYXMgdGhleSBvY2N1ci4gSUJNPHN1cD7Crjwvc3VwPiBtYWludGFpbnMKLXR3byBwdWJsaWMgcmVnaXN0cmllcyBjYWxsZWQgdGhlIElCTSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IGFuZCB0aGUgSUJNIFVEREkgVGVzdAotUmVnaXN0cnkuIFRoZSBJQk0gVURESQotVGVzdCBSZWdpc3RyeSBhbGxvd3MgeW91IHRvIGRldmVsb3AgeW91ciBXZWIgc2VydmljZSBhbmQgZXhwZXJpZW5jZSB0aGUgVURESQotcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2l0aG91dCBwbGFjaW5nIHlvdXIgV2ViIHNlcnZpY2UgaW4gYW4gb2ZmaWNpYWwgcmVnaXN0cnkuwqAKLVVzZSB0aGUgSUJNIFVEREkKLVRlc3QgUmVnaXN0cnkgdG8gZXhwZXJpbWVudCB3aXRoIFVEREksIGFuZCB0byB0ZXN0IGFuZCB2YWxpZGF0ZSB5b3VyIFdlYiBzZXJ2aWNlLsKgCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgSUJNJ3MgcHVibGljIHJlZ2lzdHJpZXMsIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vdWRkaS5pYm0uY29tIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3VkZGkuaWJtLmNvbTwvYT4gRm9yCi1hIGxpc3Qgb2YgcHVibGljIHJlZ2lzdHJpZXMsIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWw8L2E+PC9wPgotPHA+QSBwcml2YXRlCi1yZWdpc3RyeSBhbGxvd3MgeW91IHRvIHB1Ymxpc2ggYW5kIHRlc3QgeW91ciBpbnRlcm5hbCBhcHBsaWNhdGlvbnMgaW4gYSBzZWN1cmUsCi1wcml2YXRlIGVudmlyb25tZW50LjwvcD4KLTxwPlRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IGFjdHMgYXMgYSBCMkIgZGlyZWN0b3J5Ci1saW5raW5nIG1hcmtldHBsYWNlcywgYnV5ZXJzLCBhbmQgc2VsbGVycy4gVGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoZQotcmVnaXN0cnkgY29uc2lzdHMgb2YgdGhyZWUgY29tcG9uZW50czogd2hpdGUgcGFnZXMsIHllbGxvdyBwYWdlcywgYW5kIGdyZWVuCi1wYWdlcy4gV2hpdGUgcGFnZXMgaW5jbHVkZSB0aGUgYnVzaW5lc3MgbmFtZSwgY29udGFjdCBpbmZvcm1hdGlvbiwgYW5kIGEgdGV4dAotZGVzY3JpcHRpb24gb2YgdGhlIGJ1c2luZXNzJ3Mgc2VydmljZXMuIFllbGxvdyBwYWdlcyBpbmNsdWRlIGluZHVzdHJpYWwgY2F0ZWdvcml6YXRpb25zCi1iYXNlZCBvbiBzdGFuZGFyZCB0YXhvbm9taWVzIHN1Y2ggYXMgTkFJQ1MsIElTTyAzMTY2LCBhbmQgVU5TUFNDLiBHcmVlbiBwYWdlcwotaW5jbHVkZSByZWZlcmVuY2VzIHRvIHNwZWNpZmljYXRpb25zIGZvciBXZWIgc2VydmljZXMgYW5kIHBvaW50ZXJzIHRvIHZhcmlvdXMKLWZpbGUgYW5kIFVSTC1iYXNlZCBkaXNjb3ZlcnkgbWVjaGFuaXNtcy4gVGhpcyBtYWtlcyBpdCBlYXN5IGZvciBidXNpbmVzc2VzCi10byBpbnRlZ3JhdGUgYWNyb3NzIG1hcmtldHBsYWNlcy4gQmVjYXVzZSBpdCBpcyByZWdpc3RlcmVkLCBpbmZvcm1hdGlvbiBpcwotbWFkZSBhdmFpbGFibGUgYWNyb3NzIGFsbCBhcHBsaWNhdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BSUNTIHJlZmVyCi10byAgPGEgaHJlZj0iaHR0cDovL3d3dy5uYWljcy5jb20iIHRhcmdldD0iX2JsYW5rIj53d3cubmFpY3MuY29tPC9hPiBGb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gVU5TUFNDIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnVuc3BzYy5vcmciIHRhcmdldD0iX2JsYW5rIj53d3cudW5zcHNjLm9yZzwvYT4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gSVNPIDMxNjYgcmVmZXIKLXRvICA8YSBocmVmPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2VuL3Byb2RzLXNlcnZpY2VzL2lzbzMxNjZtYS9pbmRleC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5pc28ub3JnL2lzby9lbi9wcm9kcy1zZXJ2aWNlcy9pc28zMTY2bWEvaW5kZXguaHRtbDwvYT48L3A+Ci08cD5CdXNpbmVzc2VzCi1wb3B1bGF0ZSB0aGUgcmVnaXN0cnkgd2l0aCBkZXNjcmlwdGlvbnMgb2YgdGhlIHNlcnZpY2VzIHRoYXQgdGhleSBzdXBwb3J0LgotVURESSBhc3NpZ25zIGEgdW5pcXVlIGlkZW50aWZpZXIgdG8gZWFjaCBzZXJ2aWNlIGRlc2NyaXB0aW9uIGFuZCBidXNpbmVzcwotcmVnaXN0cmF0aW9uLiBUaGVzZSBiZWNvbWUgdGhlIHNlcnZpY2UgYW5kIGJ1c2luZXNzIGtleXMgcmVzcGVjdGl2ZWx5LiBTZWFyY2gKLWVuZ2luZXMsIGFuZCBhcHBsaWNhdGlvbnMgcXVlcnkgdGhlIHJlZ2lzdHJ5IHRvIGRpc2NvdmVyIHNlcnZpY2VzLiBVRERJIHNlcnZlcnMKLWFyZSBhIGRpcmVjdG9yeSBvZiBhdmFpbGFibGUgc2VydmljZXMgYW5kIHNlcnZpY2UgcHJvdmlkZXJzLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzZGx1ZC5odG1sIiB0aXRsZT0iVGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIFVEREkgaGFzIHR3byBmdW5jdGlvbnM6ICgxKSBpdCBpcyBhIFNPQVAtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGhvdyBVRERJIGNsaWVudHMgY29tbXVuaWNhdGUgd2l0aCByZWdpc3RyaWVzLCBhbmQgKDIpIGl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsbHkgcmVwbGljYXRlZCByZWdpc3RyaWVzLiI+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbCI+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjYmY0NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN3c2RsdWQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETDwvdGl0bGU+Ci08c2hvcnRkZXNjPlRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uCi1kZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4gVURESQotaGFzIHR3byBmdW5jdGlvbnM6ICgxKSBpdCBpcyBhIFNPQVAtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGhvdyBVRERJIGNsaWVudHMKLWNvbW11bmljYXRlIHdpdGggcmVnaXN0cmllcywgYW5kICgyKSBpdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbGx5IHJlcGxpY2F0ZWQKLXJlZ2lzdHJpZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnJlbGF0aW9uc2hpcCB3aXRoIFdTREw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+cmVsYXRpb25zaGlwIHdpdGggVURESTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5SZWdpc3RlcmluZyBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOjwvcD4KLTx1bD4KLTxsaT5UaGUgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NFbnRpdHk8L3N5c3RlbW91dHB1dD4gZGF0YSB0eXBlIGNvbnRhaW5zIGluZm9ybWF0aW9uCi1hYm91dCB0aGUgYnVzaW5lc3MgdGhhdCBoYXMgYSBwdWJsaXNoZWQgc2VydmljZS48L2xpPgotPGxpPlRoZSAgPHN5c3RlbW91dHB1dD5idXNpbmVzc1NlcnZpY2U8L3N5c3RlbW91dHB1dD4gZGF0YSB0eXBlIGlzIGEgZGVzY3JpcHRpb24KLW9mIGEgV2ViIHNlcnZpY2UuPC9saT4KLTxsaT5UaGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IGRhdGEgdHlwZSBjb250YWlucyB0ZWNobmljYWwKLWluZm9ybWF0aW9uIGZvciBkZXRlcm1pbmluZyB0aGUgZW50cnkgcG9pbnQgYW5kIGNvbnN0cnVjdGlvbiBzcGVjaWZpY2F0aW9ucwotZm9yIGludm9raW5nIGEgV2ViIHNlcnZpY2UuPC9saT4KLTxsaT5UaGUgIDxzeXN0ZW1vdXRwdXQ+dE1vZGVsPC9zeXN0ZW1vdXRwdXQ+IGRhdGEgdHlwZSBwcm92aWRlcyBhIHJlZmVyZW5jZQotc3lzdGVtIHRvIGFzc2lzdCBpbiB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBhbmQgYWN0cyBhcyBhIHRlY2huaWNhbAotc3BlY2lmaWNhdGlvbiBmb3IgYSBXZWIgc2VydmljZS48L2xpPgotPC91bD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBVRERJIGRhdGEgdHlwZXMsIHJlZmVyIHRvIHRoZSByZWxhdGVkIHJlZmVyZW5jZQotdG9waWNzIGF0IHRoZSBlbmQgb2YgdGhpcyB0b3BpYy48L3A+Ci08cD5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGlzIGFuIFhNTC1iYXNlZCBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uCi1mb3IgZGVzY3JpYmluZyBXZWIgc2VydmljZXMuIFdTREwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBkZXNjcmliaW5nIG5ldHdvcmsKLXNlcnZpY2VzIGFzIGEgc2V0IG9mIGVuZHBvaW50cyB0aGF0IG9wZXJhdGUgb24gbWVzc2FnZXMgdGhhdCBjb250YWluIGVpdGhlcgotZG9jdW1lbnQtb3JpZW50ZWQgb3IgcHJvY2VkdXJlLW9yaWVudGVkIGluZm9ybWF0aW9uLjwvcD4KLTxwPlRoZSBXU0RMIHNlcnZpY2UgZGVzY3JpcHRpb24gY2FuIGJlIHN0cnVjdHVyZWQgaW4gbWFueSB3YXlzLiBIb3dldmVyLCB0bwotYXNzaXN0IHdpdGggcHVibGlzaGluZyBhbmQgZmluZGluZyBXU0RMIHNlcnZpY2UgZGVzY3JpcHRpb25zIGluIGEgVURESSByZWdpc3RyeSwKLVdTREwgZG9jdW1lbnRzIGNvbnNpc3Qgb2YgdHdvIG1haW4gcGFydHM6Jm5ic3A7PC9wPgotPHVsPgotPGxpPlRoZSBzZXJ2aWNlIGludGVyZmFjZSBkZWZpbml0aW9uIGRlc2NyaWJlcyB0aGUgYWJzdHJhY3QgdHlwZSBpbnRlcmZhY2UKLWFuZCBpdHMgcHJvdG9jb2wgYmluZGluZywga25vd24gYXMgdGhlIFdTREwgYmluZGluZyBkb2N1bWVudDwvbGk+Ci08bGk+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVmaW5pdGlvbiBkZXNjcmliZXMgdGhlIHNlcnZpY2UgYWNjZXNzIGxvY2F0aW9uCi1pbmZvcm1hdGlvbiwga25vd24gYXMgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudDwvbGk+Ci08L3VsPgotPHA+V2hlbiBjcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQsIHRoZQotV2ViIHNlcnZpY2VzIHRvb2xzIGNyZWF0ZSBhIHNpbmdsZSBXU0RMIGRvY3VtZW50IHdoZW4gZ2VuZXJhdGluZyBXZWIgc2VydmljZXMKLWZyb20gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW5zCi1vciBFSkJzLiBUaGlzIFdTREwgZG9jdW1lbnQgY29udGFpbnMgYm90aCB0aGUgc2VydmljZSBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGF0aW9uCi1kb2N1bWVudHMuPC9wPgotPHA+QSBzZXJ2aWNlIGludGVyZmFjZSBpcyBkZXNjcmliZWQgYnkgYSBXU0RMIGRvY3VtZW50IHRoYXQgY29udGFpbnMgdGhlIHR5cGVzLAotaW1wb3J0LCBtZXNzYWdlLCBwb3J0VHlwZSwgYW5kIGJpbmRpbmcgZWxlbWVudHMuIEEgc2VydmljZSBpbnRlcmZhY2UgY29udGFpbnMKLXRoZSBXU0RMIHNlcnZpY2UgZGVmaW5pdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBpbXBsZW1lbnQgb25lIG9yIG1vcmUgc2VydmljZXMuCi1JdCBpcyBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGEgV2ViIHNlcnZpY2UsIGFuZCBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgc3BlY2lmaWMKLXR5cGUgb2Ygc2VydmljZS4gVGhpcyBkb2N1bWVudCBjYW4gcmVmZXJlbmNlIGFub3RoZXIgc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQKLXVzaW5nIGFuIGltcG9ydCBlbGVtZW50LiBUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGluIHRoaXMgcHJvZHVjdCBnZW5lcmF0ZSBhCi1zZXJ2aWNlIGludGVyZmFjZSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1lc3NhZ2UgYW5kIHBvcnRUeXBlIGVsZW1lbnRzCi10aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBiaW5kaW5nIGRvY3VtZW50IHRoYXQgY29udGFpbnMgb25seSBiaW5kaW5ncyBmb3IKLXRoZSBwb3J0VHlwZS48L3A+Ci08cD5UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBjb250YWlucyB0aGUgc2VydmljZSBlbGVtZW50cy4gQSBzZXJ2aWNlCi1pbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIGEgc2VydmljZSB0aGF0IGltcGxlbWVudHMKLWEgc2VydmljZSBpbnRlcmZhY2UuIEF0IGxlYXN0IG9uZSBvZiB0aGUgaW1wb3J0IGVsZW1lbnRzIHdpbGwgY29udGFpbiBhIHJlZmVyZW5jZQotdG8gdGhlIFdTREwgc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQ7IGhvd2V2ZXIgbW9ub2xpdGhpYyBXU0RMIHN1Y2ggYXMgdGhhdAotY3JlYXRlZCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBoYXZlIGltcG9ydHMuIEEgc2VydmljZQotaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY2FuIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBtb3JlIHRoYW4gb25lIHNlcnZpY2UgaW50ZXJmYWNlCi1kb2N1bWVudC48L3A+Ci08cD5BIHNlcnZpY2UgcHJvdmlkZXIgaG9zdHMgYSBXZWIgc2VydmljZSBhbmQgbWFrZXMgaXQgYWNjZXNzaWJsZSB1c2luZyBwcm90b2NvbHMKLXN1Y2ggYXMgU09BUC9IVFRQIGFuZCBTT0FQL0pNUy4gVGhlIFdlYiBzZXJ2aWNlIGlzIGRlc2NyaWJlZCBieSB0aGUgV1NETCBkb2N1bWVudHMKLXRoYXQgYXJlIHN0b3JlZCBvbiB0aGUgcHJvdmlkZXIncyBzZXJ2ZXIgb3IgaW4gYSBzcGVjaWFsIHJlcG9zaXRvcnkuIFRoZSBXU0RMCi1kb2N1bWVudHMgYXJlIHJlZmVyZW5jZWQgYnkgVURESSBidXNpbmVzcyBzZXJ2aWNlcyAoc2VydmljZSBkb2N1bWVudHMpIGFuZAotdE1vZGVscyAoYmluZGluZyBkb2N1bWVudHMpLiBUaGVzZSBwb2ludGVycyBlbmFibGUgZGlzY292ZXJ5IG9mIGEgV2ViIHNlcnZpY2UKLWJ5IGEgc2VydmljZSByZXF1ZXN0b3IuPC9wPgotPHA+RmlndXJlIDEuIFJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwuPC9wPgotPHA+IDxpbWFnZSBhbHQ9IklsbHVzdHJhdGlvbiBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETC4iIGhyZWY9Ii4uL2ltYWdlcy93c2RsdWRkaS5naWYiPgotPC9pbWFnZT4gPC9wPgotPHA+RmlndXJlIDEgaWxsdXN0cmF0ZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwuIFRoZSBXU0RMIHNlcnZpY2UKLWVsZW1lbnQgcmVmZXJlbmNlcyB0aGUgV1NETCBiaW5kaW5nIGVsZW1lbnQuIFRoZSBVUkwgb2YgdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcKLXRoZSBXU0RMIGJpbmRpbmcgZWxlbWVudCBpcyBwdWJsaXNoZWQgdG8gdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYXMgYSB0TW9kZWwuCi1UaGUgVVJMIG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBXU0RMIHNlcnZpY2UgZWxlbWVudCBpcyBwdWJsaXNoZWQgdG8KLXRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFzIGEgYnVzaW5lc3NTZXJ2aWNlIGFuZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotdGhlIGJpbmRpbmdUZW1wbGF0ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVURESSByZWdpc3RyeSBkYXRhIHN0cnVjdHVyZQotdHlwZXMsIHJlZmVyIHRvIHRoZSByZWxhdGVkIHJlZmVyZW5jZSBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudC4KLU5vdGUgdGhhdCB0aGUgaW1wb3J0IHBvcnRpb24gb2YgdGhlIGRpYWdyYW0gaXMgb3B0aW9uYWwgZGVwZW5kaW5nIG9uIHRoZSBydW4tdGltZQotZW52aXJvbm1lbnQ7IG1vbm9saXRoaWMgV1NETCBzdWNoIGFzIHRoYXQgY3JlYXRlZCB1c2luZyB0aGUgQXhpcyBydW4tdGltZQotZW52aXJvbm1lbnQgZG9lcyBub3QgaGF2ZSBpbXBvcnRzLjwvcD4KLTxwPlRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlc2NyaWJlcyBhbiBpbnN0YW5jZSBvZiBhIHNlcnZpY2UuIFRoZSBpbnN0YW5jZQotaXMgZGVmaW5lZCB1c2luZyBhIFdTREwgc2VydmljZSBlbGVtZW50LiBUaGUgc2VydmljZSBlbGVtZW50IGluIGEgc2VydmljZQotaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgaXMgdXNlZCB0byBwdWJsaXNoIGEgVURESSBidXNpbmVzc1NlcnZpY2UuIFdoZW4gcHVibGlzaGluZwotYSBXU0RMIHNlcnZpY2UgZGVzY3JpcHRpb24sIGEgc2VydmljZSBpbnRlcmZhY2UgbXVzdCBiZSBwdWJsaXNoZWQgYXMgYSB0TW9kZWwKLWJlZm9yZSBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gaXMgcHVibGlzaGVkIGFzIGEgYnVzaW5lc3NTZXJ2aWNlLjwvcD4KLTxwPkEgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBpcyBwdWJsaXNoZWQgaW4gYSBVRERJIHJlZ2lzdHJ5IGFzIHBhcnQgb2YgYSBidXNpbmVzc1NlcnZpY2UKLXdpdGggb25lIG9yIG1vcmUgYmluZGluZ1RlbXBsYXRlIGVsZW1lbnRzLiBUaGUgYnVzaW5lc3NTZXJ2aWNlIGlzIHB1Ymxpc2hlZAotYnkgdGhlIHNlcnZpY2UgcHJvdmlkZXIuIEEgbmV3IGJ1c2luZXNzU2VydmljZSBpcyBjcmVhdGVkIGZvciBhIHNlcnZpY2UgZWxlbWVudAotdGhhdCBpcyBkZWZpbmVkIGluIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRvY3VtZW50LiBBIG5ldyBiaW5kaW5nVGVtcGxhdGUKLWVsZW1lbnQgaXMgY3JlYXRlZCB3aXRoaW4gYSBidXNpbmVzc1NlcnZpY2UgZm9yIGVhY2ggcG9ydCBlbGVtZW50IHRoYXQgaXMKLWRlZmluZWQgd2l0aGluIGEgc2VydmljZSBlbGVtZW50LjwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBXU0RMIGFuZCBVRERJIHJlZmVyIHRvCi0gPHhyZWYgaHJlZj0iaHR0cDovL3VkZGkub3JnL2Jlc3RwcmFjdGljZXMuaHRtbCIgc2NvcGU9ImV4dGVybmFsIj51ZGRpLm9yZy9iZXN0cHJhY3RpY2VzLmh0bWw8L3hyZWY+LjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN1ZGRpLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYmY1N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIFVEREkgaGFzIHR3byBmdW5jdGlvbnM6ICgxKSBpdCBpcyBhIFNPQVAtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGhvdyBVRERJIGNsaWVudHMgY29tbXVuaWNhdGUgd2l0aCByZWdpc3RyaWVzLCBhbmQgKDIpIGl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsbHkgcmVwbGljYXRlZCByZWdpc3RyaWVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4gVURESSBoYXMgdHdvIGZ1bmN0aW9uczogKDEpIGl0IGlzIGEgU09BUC1iYXNlZCBwcm90b2NvbCB0aGF0IGRlZmluZXMgaG93IFVEREkgY2xpZW50cyBjb21tdW5pY2F0ZSB3aXRoIHJlZ2lzdHJpZXMsIGFuZCAoMikgaXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWxseSByZXBsaWNhdGVkIHJlZ2lzdHJpZXMuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVsYXRpb25zaGlwIHdpdGggV1NETCwgV1NETCwgcmVsYXRpb25zaGlwIHdpdGggVURESSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIHJlbGF0aW9uc2hpcCB3aXRoIFdTREwsIFdTREwsIHJlbGF0aW9uc2hpcCB3aXRoIFVEREkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NkbHVkIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3dzZGx1ZCI+PGEgbmFtZT0iY3dzZGx1ZCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETDwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uCi1kZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4gVURESQotaGFzIHR3byBmdW5jdGlvbnM6ICgxKSBpdCBpcyBhIFNPQVAtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGhvdyBVRERJIGNsaWVudHMKLWNvbW11bmljYXRlIHdpdGggcmVnaXN0cmllcywgYW5kICgyKSBpdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbGx5IHJlcGxpY2F0ZWQKLXJlZ2lzdHJpZXMuPC9wPgotCi08cD5SZWdpc3RlcmluZyBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOjwvcD4KLQotPHVsPgotPGxpPlRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzRW50aXR5PC90dD4gZGF0YSB0eXBlIGNvbnRhaW5zIGluZm9ybWF0aW9uCi1hYm91dCB0aGUgYnVzaW5lc3MgdGhhdCBoYXMgYSBwdWJsaXNoZWQgc2VydmljZS48L2xpPgotCi08bGk+VGhlICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NTZXJ2aWNlPC90dD4gZGF0YSB0eXBlIGlzIGEgZGVzY3JpcHRpb24KLW9mIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPlRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IGRhdGEgdHlwZSBjb250YWlucyB0ZWNobmljYWwKLWluZm9ybWF0aW9uIGZvciBkZXRlcm1pbmluZyB0aGUgZW50cnkgcG9pbnQgYW5kIGNvbnN0cnVjdGlvbiBzcGVjaWZpY2F0aW9ucwotZm9yIGludm9raW5nIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPlRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPnRNb2RlbDwvdHQ+IGRhdGEgdHlwZSBwcm92aWRlcyBhIHJlZmVyZW5jZQotc3lzdGVtIHRvIGFzc2lzdCBpbiB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBhbmQgYWN0cyBhcyBhIHRlY2huaWNhbAotc3BlY2lmaWNhdGlvbiBmb3IgYSBXZWIgc2VydmljZS48L2xpPgotCi08L3VsPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgVURESSBkYXRhIHR5cGVzLCByZWZlciB0byB0aGUgcmVsYXRlZCByZWZlcmVuY2UKLXRvcGljcyBhdCB0aGUgZW5kIG9mIHRoaXMgdG9waWMuPC9wPgotCi08cD5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGlzIGFuIFhNTC1iYXNlZCBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uCi1mb3IgZGVzY3JpYmluZyBXZWIgc2VydmljZXMuIFdTREwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBkZXNjcmliaW5nIG5ldHdvcmsKLXNlcnZpY2VzIGFzIGEgc2V0IG9mIGVuZHBvaW50cyB0aGF0IG9wZXJhdGUgb24gbWVzc2FnZXMgdGhhdCBjb250YWluIGVpdGhlcgotZG9jdW1lbnQtb3JpZW50ZWQgb3IgcHJvY2VkdXJlLW9yaWVudGVkIGluZm9ybWF0aW9uLjwvcD4KLQotPHA+VGhlIFdTREwgc2VydmljZSBkZXNjcmlwdGlvbiBjYW4gYmUgc3RydWN0dXJlZCBpbiBtYW55IHdheXMuIEhvd2V2ZXIsIHRvCi1hc3Npc3Qgd2l0aCBwdWJsaXNoaW5nIGFuZCBmaW5kaW5nIFdTREwgc2VydmljZSBkZXNjcmlwdGlvbnMgaW4gYSBVRERJIHJlZ2lzdHJ5LAotV1NETCBkb2N1bWVudHMgY29uc2lzdCBvZiB0d28gbWFpbiBwYXJ0czrCoDwvcD4KLQotPHVsPgotPGxpPlRoZSBzZXJ2aWNlIGludGVyZmFjZSBkZWZpbml0aW9uIGRlc2NyaWJlcyB0aGUgYWJzdHJhY3QgdHlwZSBpbnRlcmZhY2UKLWFuZCBpdHMgcHJvdG9jb2wgYmluZGluZywga25vd24gYXMgdGhlIFdTREwgYmluZGluZyBkb2N1bWVudDwvbGk+Ci0KLTxsaT5UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkZWZpbml0aW9uIGRlc2NyaWJlcyB0aGUgc2VydmljZSBhY2Nlc3MgbG9jYXRpb24KLWluZm9ybWF0aW9uLCBrbm93biBhcyB0aGUgV1NETCBzZXJ2aWNlIGRvY3VtZW50PC9saT4KLQotPC91bD4KLQotPHA+V2hlbiBjcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQsIHRoZQotV2ViIHNlcnZpY2VzIHRvb2xzIGNyZWF0ZSBhIHNpbmdsZSBXU0RMIGRvY3VtZW50IHdoZW4gZ2VuZXJhdGluZyBXZWIgc2VydmljZXMKLWZyb20gSmF2YeKEoiBiZWFucwotb3IgRUpCcy4gVGhpcyBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIGJvdGggdGhlIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbgotZG9jdW1lbnRzLjwvcD4KLQotPHA+QSBzZXJ2aWNlIGludGVyZmFjZSBpcyBkZXNjcmliZWQgYnkgYSBXU0RMIGRvY3VtZW50IHRoYXQgY29udGFpbnMgdGhlIHR5cGVzLAotaW1wb3J0LCBtZXNzYWdlLCBwb3J0VHlwZSwgYW5kIGJpbmRpbmcgZWxlbWVudHMuIEEgc2VydmljZSBpbnRlcmZhY2UgY29udGFpbnMKLXRoZSBXU0RMIHNlcnZpY2UgZGVmaW5pdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBpbXBsZW1lbnQgb25lIG9yIG1vcmUgc2VydmljZXMuCi1JdCBpcyBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGEgV2ViIHNlcnZpY2UsIGFuZCBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgc3BlY2lmaWMKLXR5cGUgb2Ygc2VydmljZS4gVGhpcyBkb2N1bWVudCBjYW4gcmVmZXJlbmNlIGFub3RoZXIgc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQKLXVzaW5nIGFuIGltcG9ydCBlbGVtZW50LiBUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGluIHRoaXMgcHJvZHVjdCBnZW5lcmF0ZSBhCi1zZXJ2aWNlIGludGVyZmFjZSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1lc3NhZ2UgYW5kIHBvcnRUeXBlIGVsZW1lbnRzCi10aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBiaW5kaW5nIGRvY3VtZW50IHRoYXQgY29udGFpbnMgb25seSBiaW5kaW5ncyBmb3IKLXRoZSBwb3J0VHlwZS48L3A+Ci0KLTxwPlRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRvY3VtZW50IGNvbnRhaW5zIHRoZSBzZXJ2aWNlIGVsZW1lbnRzLiBBIHNlcnZpY2UKLWltcGxlbWVudGF0aW9uIGRvY3VtZW50IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgYSBzZXJ2aWNlIHRoYXQgaW1wbGVtZW50cwotYSBzZXJ2aWNlIGludGVyZmFjZS4gQXQgbGVhc3Qgb25lIG9mIHRoZSBpbXBvcnQgZWxlbWVudHMgd2lsbCBjb250YWluIGEgcmVmZXJlbmNlCi10byB0aGUgV1NETCBzZXJ2aWNlIGludGVyZmFjZSBkb2N1bWVudDsgaG93ZXZlciBtb25vbGl0aGljIFdTREwgc3VjaCBhcyB0aGF0Ci1jcmVhdGVkIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50IGRvZXMgbm90IGhhdmUgaW1wb3J0cy4gQSBzZXJ2aWNlCi1pbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBjYW4gY29udGFpbiByZWZlcmVuY2VzIHRvIG1vcmUgdGhhbiBvbmUgc2VydmljZSBpbnRlcmZhY2UKLWRvY3VtZW50LjwvcD4KLQotPHA+QSBzZXJ2aWNlIHByb3ZpZGVyIGhvc3RzIGEgV2ViIHNlcnZpY2UgYW5kIG1ha2VzIGl0IGFjY2Vzc2libGUgdXNpbmcgcHJvdG9jb2xzCi1zdWNoIGFzIFNPQVAvSFRUUCBhbmQgU09BUC9KTVMuIFRoZSBXZWIgc2VydmljZSBpcyBkZXNjcmliZWQgYnkgdGhlIFdTREwgZG9jdW1lbnRzCi10aGF0IGFyZSBzdG9yZWQgb24gdGhlIHByb3ZpZGVyJ3Mgc2VydmVyIG9yIGluIGEgc3BlY2lhbCByZXBvc2l0b3J5LiBUaGUgV1NETAotZG9jdW1lbnRzIGFyZSByZWZlcmVuY2VkIGJ5IFVEREkgYnVzaW5lc3Mgc2VydmljZXMgKHNlcnZpY2UgZG9jdW1lbnRzKSBhbmQKLXRNb2RlbHMgKGJpbmRpbmcgZG9jdW1lbnRzKS4gVGhlc2UgcG9pbnRlcnMgZW5hYmxlIGRpc2NvdmVyeSBvZiBhIFdlYiBzZXJ2aWNlCi1ieSBhIHNlcnZpY2UgcmVxdWVzdG9yLjwvcD4KLQotPHA+RmlndXJlIDEuIFJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwuPC9wPgotCi08cD4gPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsdWRkaS5naWYiIGFsdD0iSWxsdXN0cmF0aW9uIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLiIgLz4gPC9wPgotCi08cD5GaWd1cmUgMSBpbGx1c3RyYXRlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETC4gVGhlIFdTREwgc2VydmljZQotZWxlbWVudCByZWZlcmVuY2VzIHRoZSBXU0RMIGJpbmRpbmcgZWxlbWVudC4gVGhlIFVSTCBvZiB0aGUgZG9jdW1lbnQgY29udGFpbmluZwotdGhlIFdTREwgYmluZGluZyBlbGVtZW50IGlzIHB1Ymxpc2hlZCB0byB0aGUgVURESSBidXNpbmVzcyByZWdpc3RyeSBhcyBhIHRNb2RlbC4KLVRoZSBVUkwgb2YgdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcgdGhlIFdTREwgc2VydmljZSBlbGVtZW50IGlzIHB1Ymxpc2hlZCB0bwotdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYXMgYSBidXNpbmVzc1NlcnZpY2UgYW5kIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci10aGUgYmluZGluZ1RlbXBsYXRlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJIHJlZ2lzdHJ5IGRhdGEgc3RydWN0dXJlCi10eXBlcywgcmVmZXIgdG8gdGhlIHJlbGF0ZWQgcmVmZXJlbmNlIHNlY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGlzIGRvY3VtZW50LgotTm90ZSB0aGF0IHRoZSBpbXBvcnQgcG9ydGlvbiBvZiB0aGUgZGlhZ3JhbSBpcyBvcHRpb25hbCBkZXBlbmRpbmcgb24gdGhlIHJ1bi10aW1lCi1lbnZpcm9ubWVudDsgbW9ub2xpdGhpYyBXU0RMIHN1Y2ggYXMgdGhhdCBjcmVhdGVkIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lCi1lbnZpcm9ubWVudCBkb2VzIG5vdCBoYXZlIGltcG9ydHMuPC9wPgotCi08cD5UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkZXNjcmliZXMgYW4gaW5zdGFuY2Ugb2YgYSBzZXJ2aWNlLiBUaGUgaW5zdGFuY2UKLWlzIGRlZmluZWQgdXNpbmcgYSBXU0RMIHNlcnZpY2UgZWxlbWVudC4gVGhlIHNlcnZpY2UgZWxlbWVudCBpbiBhIHNlcnZpY2UKLWltcGxlbWVudGF0aW9uIGRvY3VtZW50IGlzIHVzZWQgdG8gcHVibGlzaCBhIFVEREkgYnVzaW5lc3NTZXJ2aWNlLiBXaGVuIHB1Ymxpc2hpbmcKLWEgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9uLCBhIHNlcnZpY2UgaW50ZXJmYWNlIG11c3QgYmUgcHVibGlzaGVkIGFzIGEgdE1vZGVsCi1iZWZvcmUgYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGlzIHB1Ymxpc2hlZCBhcyBhIGJ1c2luZXNzU2VydmljZS48L3A+Ci0KLTxwPkEgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBpcyBwdWJsaXNoZWQgaW4gYSBVRERJIHJlZ2lzdHJ5IGFzIHBhcnQgb2YgYSBidXNpbmVzc1NlcnZpY2UKLXdpdGggb25lIG9yIG1vcmUgYmluZGluZ1RlbXBsYXRlIGVsZW1lbnRzLiBUaGUgYnVzaW5lc3NTZXJ2aWNlIGlzIHB1Ymxpc2hlZAotYnkgdGhlIHNlcnZpY2UgcHJvdmlkZXIuIEEgbmV3IGJ1c2luZXNzU2VydmljZSBpcyBjcmVhdGVkIGZvciBhIHNlcnZpY2UgZWxlbWVudAotdGhhdCBpcyBkZWZpbmVkIGluIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRvY3VtZW50LiBBIG5ldyBiaW5kaW5nVGVtcGxhdGUKLWVsZW1lbnQgaXMgY3JlYXRlZCB3aXRoaW4gYSBidXNpbmVzc1NlcnZpY2UgZm9yIGVhY2ggcG9ydCBlbGVtZW50IHRoYXQgaXMKLWRlZmluZWQgd2l0aGluIGEgc2VydmljZSBlbGVtZW50LjwvcD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFdTREwgYW5kIFVEREkgcmVmZXIgdG8KLSA8YSBocmVmPSJodHRwOi8vdWRkaS5vcmcvYmVzdHByYWN0aWNlcy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+dWRkaS5vcmcvYmVzdHByYWN0aWNlcy5odG1sPC9hPi48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZGZhdi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYWRkZmF2LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4OTVmNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYWRkZmF2LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9hZGR1ZGRpLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9hZGR1ZGRpLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM5OWJiMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYWRkdWRkaS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYmVhbmluZm9qc3AuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2JlYW5pbmZvanNwLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiZTQwYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYmVhbmluZm9qc3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2JpbmRub2RlLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iaW5kbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZjVkMDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2JpbmRub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9icm93c2VidXR0b24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Jyb3dzZWJ1dHRvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NGE1YmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Jyb3dzZWJ1dHRvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYnVzYXNzdC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYnVzYXNzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGNiYjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2J1c2Fzc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zhdi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZmF2LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViZmFiZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZmF2LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9maW5kLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9maW5kLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjM2ViZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZmluZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZnN3c2RsaWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZnN3c2RsaWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjBlNTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zzd3NkbGljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ2luLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzN2JkZDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ2luLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbmljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ2luaWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTEwY2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ2luaWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9nb3V0aWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9nb3V0aWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NzA5Y2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ291dGljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL21wdHdzZGxpY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNWU2NTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL21wdHdzZGxpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9uZXdqc3AuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL25ld2pzcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNGI1MDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL25ld2pzcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvb3Bub2RlLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9vcG5vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGViMzQ5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9vcG5vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3Byb3h5b25qc3AuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3Byb3h5b25qc3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTJlNGVhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wcm94eW9uanNwLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wdWJsaXNoMi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHVibGlzaDIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGExMWE1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wdWJsaXNoMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHVic2Vydi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHVic2Vydi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZDM2YjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1YnNlcnYuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3JlZnNlcnYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3JlZnNlcnYuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWMwMTViLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9yZWZzZXJ2LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9ydW5qc2YuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3J1bmpzZi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlODg0ZDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3J1bmpzZi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2NlbmFyaW83LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zY2VuYXJpbzcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzY1MzFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zY2VuYXJpbzcuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NlcnZub2RlLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zZXJ2bm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MTIzM2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NlcnZub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zb2FwdWR3cy5jZHIgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuY2RyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWVkYWViLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zb2FwdWR3cy5jZHIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaS5jZHIgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaS5jZHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNTJmMDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGkuY2RyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGkuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTAyYzA5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpcmVmLmNkciBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpcmVmLmNkcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkYTMyYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXJlZi5jZHIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXJlZi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXJlZi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMTQ4YTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGl2aWV3LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpdmlldy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MDFiYzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGl2aWV3LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsYm5kZGV0bC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDIyNjJmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsYm5kZGV0bC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGRldGFpbC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGRldGFpbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNTQ1NjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxkZXRhaWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxkdGxpY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZHRsaWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZWU2N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxkdGxpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZXhwLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZXhwLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlZjEwYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGV4cC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGZhdmljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxmYXZpY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhY2MzZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGZhdmljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxpY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsaWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZWMzMjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsbm9kZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG5vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjc1MjFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODdkZDRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wcmV0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4M2UzNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wcmV0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3ByZXR4LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3ByZXR4LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1ZDU3Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wcmV0eC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHBhZ2UuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxwYWdlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM3YzFjMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHBhZ2UuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxzZXJ2ZGV0LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc2VydmRldC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4N2NiODUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxzZXJ2ZGV0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc3RhdHguZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxzdGF0eC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYmE3ODcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxzdGF0eC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHRlbXAuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx0ZW1wLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTliZDIwNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHRlbXAuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx1ZGRpLmNkciBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdWRkaS5jZHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NDkwOTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx1ZGRpLmNkcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdWRkaS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWJiN2Q1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdWRkaS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbHBhZ2UuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaWxwYWdlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVlNmUwMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbHBhZ2UuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaWx2aWV3LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lsdmlldy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OWQ2ODkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaWx2aWV3LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2luanNwLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2luanNwLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1ZDVmMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbmpzcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3N3aXppY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c3dpemljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjE3YWE3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c3dpemljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvX2suY2ZzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvX2suY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTU2NTJjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L19rLmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyMzI0Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYzI2MGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMzoxNiBFRFQgMjAwNw0KLW9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcj1vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJcbjEuMC4zMDAucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlZjdiYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTM6MTYgRURUIDIwMDcNCi1sdWNlbmU9MS40LjEwMy52MjAwNjA2MDENCi1hbmFseXplcj1vcmcuZWNsaXBzZS5oZWxwLmJhc2VcIzMuMi4wLnYyMDA2MDYwMT9sb2NhbGVcPWVuDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDFhYWUzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjE2IEVEVCAyMDA3DQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVwZGF0ZS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90c3RydGV4cC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YjVkMGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMWZiMTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotCQk8dG9jIGZpbGU9IndzY29uc3VtcHRpb25idWlsZF90b2MueG1sIi8+Ci0JCTx0b2MgZmlsZT0id3Njb25zdW1wdGlvbnRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0JPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLm1hcGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzA0YjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLm1hcGxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3c2NvbnN1bXB0aW9uYnVpbGRfdG9jLmRpdGFtYXAiLz4KLSAgICA8bWFwIGZpbGU9IndzY29uc3VtcHRpb250X3RvYy5kaXRhbWFwIi8+Ci0gIDwvbmF2PgotICA8bGluaz4KLSAgICA8bWFwIGZpbGU9IndzY29uc3VtcHRpb250X3RvYy5kaXRhbWFwIi8+Ci0gICAgPG1hcCBmaWxlPSJ3c2NvbnN1bXB0aW9uYnVpbGRfdG9jLmRpdGFtYXAiLz4KLSAgPC9saW5rPgotPC9tYXBsaXN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNTI3YTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGh0bWwKLSAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9InNlY3VyaXR5IiBjb250ZW50PSJwdWJsaWMiIC8+Ci08bWV0YSBuYW1lPSJSb2JvdHMiIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgbmFtZT0iREMuRm9ybWF0IiBjb250ZW50PSJYSFRNTCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9pYm1kaXRhLmNzcyIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiAvPgotPHRpdGxlPkluZGV4PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPkluZGV4PC9oMT4KLTxhIG5hbWU9IklEWDBfNDIiIGhyZWY9IiNJRFgxXzQyIj5CPC9hPgotPGEgbmFtZT0iSURYMF80NCIgaHJlZj0iI0lEWDFfNDQiPkQ8L2E+Ci08YSBuYW1lPSJJRFgwXzUyIiBocmVmPSIjSURYMV81MiI+UjwvYT4KLTxhIG5hbWU9IklEWDBfNTMiIGhyZWY9IiNJRFgxXzUzIj5TPC9hPgotPGEgbmFtZT0iSURYMF81NSIgaHJlZj0iI0lEWDFfNTUiPlU8L2E+Ci08YSBuYW1lPSJJRFgwXzU3IiBocmVmPSIjSURYMV81NyI+VzwvYT4KLTxocj48L2hyPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzQyIiBocmVmPSIjSURYMF80MiI+QjwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5idXNpbmVzcyBlbnRpdGllcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwjdHVkZGlleHAiPnB1Ymxpc2hpbmc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50Ij5wdWJsaXNoaW5nIHRvIFVEREk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiI+cmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1cGRhdGUuaHRtbCN0dXBkYXRlIj51cGRhdGluZyBpbiBhIFVEREkgcmVnaXN0cnk8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzQ0IiBocmVmPSIjSURYMF80NCI+RDwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5kYXRhIHN0cnVjdHVyZSB0eXBlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InJlZi9ydWRkaS5odG1sI3J1ZGRpIj5VRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81MiIgaHJlZj0iI0lEWDBfNTIiPlI8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+cmVnaXN0cmllcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIj5hZGRpbmcgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTMiIGhyZWY9IiNJRFgwXzUzIj5TPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnNlcnZpY2UgaW50ZXJmYWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiI+cmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1cGRhdGUuaHRtbCN0dXBkYXRlIj51cGRhdGluZyBVRERJIHJlZ2lzdHJpZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzU1IiBocmVmPSIjSURYMF81NSI+VTwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIj5VRERJPC9hPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InJlZi9ydWRkaS5odG1sI3J1ZGRpIj5kYXRhIHN0cnVjdHVyZSB0eXBlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiPmRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGxvZ2V4cC5odG1sI3Rsb2dleHAiPmxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YXNzZXJ0Lmh0bWwjdGFzc2VydCI+bWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RidXNwcm9qLmh0bWwjdGJ1c3Byb2oiPm1hbmFnaW5nIHNlcnZpY2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cHViZW50Lmh0bWwjdHB1YmVudCI+cHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHB1Ymxpc2guaHRtbCN0cHVibGlzaCI+cHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cmVnLmh0bWwjdHJlZyI+cmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NkbHVkLmh0bWwjY3dzZGx1ZCI+cmVsYXRpb25zaGlwIHdpdGggV1NETDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHVucHViLmh0bWwjdHVucHViIj5yZW1vdmluZyBzZXJ2aWNlcyBmcm9tIGEgcmVnaXN0cnk8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbjwvYT4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzU3IiBocmVmPSIjSURYMF81NyI+VzwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5XZWIgU2VydmljZSBFeHBsb3JlcgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayI+YWRkaW5nIEZhdm9yaXRlczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XZWIgc2VydmljZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkcmVnLmh0bWwjdGFkZHJlZyI+YWRkaW5nIGEgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiPmRpc2NvdmVyaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NkbGV4cC5odG1sI3R3c2RsZXhwIj5leHBsb3JpbmcgV1NETDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGdlbndzaWwuaHRtbCN0Z2Vud3NpbCI+Z2VuZXJhdGluZyBXU0lMPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sI3RidXNwcm9qIj5tYW5hZ2luZyBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiPnB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwjdHB1Ymxpc2giPnB1Ymxpc2hpbmcgdG8gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cmVnLmh0bWwjdHJlZyI+cmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiI+cmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5odG1sI3R0ZXN0d3NkbCI+dGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmh0bWwjY3VkZGkiPlVEREk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1cGRhdGUuaHRtbCN0dXBkYXRlIj51cGRhdGluZyBVRERJIHJlZ2lzdHJpZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V2ViIFNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+cHVibGlzaGluZwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwjdHVkZGlleHAiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V2ViIFNlcnZpY2VzIEV4cGxvcmVyCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciPmFkZGluZyBhIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90c3RydGV4cC5odG1sI3RzdHJ0ZXhwIj5sYXVuY2hpbmc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3Rsb2dleHAuaHRtbCN0bG9nZXhwIj5sb2dnaW5nIGludG8gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIj5wdWJsaXNoaW5nIFdlYiBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0RMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIj5hZGRpbmcgdG8gRmF2b3JpdGVzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NkbGV4cC5odG1sI3R3c2RsZXhwIj5leHBsb3Jpbmc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuaHRtbCNjd3NkbHVkIj5yZWxhdGlvbnNoaXAgd2l0aCBVRERJPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dGVzdHdzZGwuaHRtbCN0dGVzdHdzZGwiPnRlc3Rpbmcgd2l0aCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldTSUwKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YmttcmsuaHRtbCN0YmttcmsiPmFkZGluZyB0byBGYXZvcml0ZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292Ij5kaXNjb3ZlcmluZyBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RnZW53c2lsLmh0bWwjdGdlbndzaWwiPmdlbmVyYXRpbmc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4LnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ3NGU3ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxpbmRleD4KLSAgPGVudHJ5IGtleXdvcmQ9IlVEREkiPgotICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiLz4KLSAgICA8ZW50cnkga2V5d29yZD0icmVsYXRpb25zaGlwIHdpdGggV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzZGx1ZC5odG1sI2N3c2RsdWQiIHRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZGlzY292ZXJpbmcgV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90ZGlzY292Lmh0bWwjdGRpc2NvdiIgdGl0bGU9IkRpc2NvdmVyaW5nIFdlYiBTZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHJlZy5odG1sI3RyZWciIHRpdGxlPSJSZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwjdGxvZ2V4cCIgdGl0bGU9IkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiIHRpdGxlPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90cHVibGlzaC5odG1sI3RwdWJsaXNoIiB0aXRsZT0iUHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZGF0YSBzdHJ1Y3R1cmUgdHlwZXMiPgotICAgICAgPHRvcGljIGhyZWY9InJlZi9ydWRkaS5odG1sI3J1ZGRpIiB0aXRsZT0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icmVtb3Zpbmcgc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiIHRpdGxlPSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1hbmFnaW5nIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sI3RidXNwcm9qIiB0aXRsZT0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YXNzZXJ0Lmh0bWwjdGFzc2VydCIgdGl0bGU9Ik1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24iPgotICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiLz4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IlVEREkiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmh0bWwjY3VkZGkiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRpc2NvdmVyaW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90ZGlzY292Lmh0bWwjdGRpc2NvdiIgdGl0bGU9IkRpc2NvdmVyaW5nIFdlYiBTZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImV4cGxvcmluZyBXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NkbGV4cC5odG1sI3R3c2RsZXhwIiB0aXRsZT0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHRlc3R3c2RsLmh0bWwjdHRlc3R3c2RsIiB0aXRsZT0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RyZWcuaHRtbCN0cmVnIiB0aXRsZT0iUmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkcmVnLmh0bWwjdGFkZHJlZyIgdGl0bGU9IkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJwdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90cHViZW50Lmh0bWwjdHB1YmVudCIgdGl0bGU9IlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJwdWJsaXNoaW5nIHRvIGEgVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1Ymxpc2guaHRtbCN0cHVibGlzaCIgdGl0bGU9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InVwZGF0aW5nIFVEREkgcmVnaXN0cmllcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVwZGF0ZS5odG1sI3R1cGRhdGUiIHRpdGxlPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiIgdGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibWFuYWdpbmcgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RidXNwcm9qLmh0bWwjdGJ1c3Byb2oiIHRpdGxlPSJNYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZ2VuZXJhdGluZyBXU0lMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Z2Vud3NpbC5odG1sI3RnZW53c2lsIiB0aXRsZT0iR2VuZXJhdGluZyBhIFdTSUwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXU0RMIj4KLSAgICA8ZW50cnkga2V5d29yZD0icmVsYXRpb25zaGlwIHdpdGggVURESSI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzZGx1ZC5odG1sI2N3c2RsdWQiIHRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZXhwbG9yaW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NkbGV4cC5odG1sI3R3c2RsZXhwIiB0aXRsZT0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHRlc3R3c2RsLmh0bWwjdHRlc3R3c2RsIiB0aXRsZT0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIHRvIEZhdm9yaXRlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIiB0aXRsZT0iQWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NJTCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiIHRpdGxlPSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgdG8gRmF2b3JpdGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YmttcmsuaHRtbCN0YmttcmsiIHRpdGxlPSJBZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImdlbmVyYXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RnZW53c2lsLmh0bWwjdGdlbndzaWwiIHRpdGxlPSJHZW5lcmF0aW5nIGEgV1NJTCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBTZXJ2aWNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmciPgotICAgICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwjdHVkZGlleHAiIHRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImJ1c2luZXNzIGVudGl0aWVzIj4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVkZGlleHAuaHRtbCN0dWRkaWV4cCIgdGl0bGU9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgdG8gVURESSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiIHRpdGxlPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSIgdGl0bGU9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJyZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVucHViLmh0bWwjdHVucHViIiB0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyBXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwjdHVkZGlleHAiIHRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJsYXVuY2hpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RzdHJ0ZXhwLmh0bWwjdHN0cnRleHAiIHRpdGxlPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImxvZ2dpbmcgaW50byBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Rsb2dleHAuaHRtbCN0bG9nZXhwIiB0aXRsZT0iTG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgYSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciIHRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9InJlZ2lzdHJpZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciIHRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImRhdGEgc3RydWN0dXJlIHR5cGVzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmL3J1ZGRpLmh0bWwjcnVkZGkiIHRpdGxlPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0ic2VydmljZSBpbnRlcmZhY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0idXBkYXRpbmcgVURESSByZWdpc3RyaWVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSIgdGl0bGU9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJyZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVucHViLmh0bWwjdHVucHViIiB0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIFNlcnZpY2UgRXhwbG9yZXIiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgRmF2b3JpdGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YmttcmsuaHRtbCN0YmttcmsiIHRpdGxlPSJBZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZjQ2NzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSA9IFdlYiBzZXJ2aWNlIGNvbnN1bXB0aW9uIGRvY3VtZW50YXRpb24KLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzFmYjE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0JCTx0b2MgZmlsZT0id3Njb25zdW1wdGlvbmJ1aWxkX3RvYy54bWwiLz4KLQkJPHRvYyBmaWxlPSJ3c2NvbnN1bXB0aW9udF90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLQk8L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9yZWYvcnVkZGkuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3NmZlZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9yZWYvcnVkZGkuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIgotICJyZWZlcmVuY2UuZHRkIj4KLTxyZWZlcmVuY2UgaWQ9InJ1ZGRpIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvdGl0bGU+Ci08c2hvcnRkZXNjPk9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQKLXlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlCi1pbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLAotYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4KLVRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+VURESTxpbmRleHRlcm0+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXM8aW5kZXh0ZXJtPlVEREkgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHJlZmJvZHk+Ci08c2VjdGlvbj48bHE+IDxwPiA8dWljb250cm9sPkJ1c2luZXNzIGluZm9ybWF0aW9uLjwvdWljb250cm9sPiBJbmZvcm1hdGlvbgotdGhhdCBpcyBjb250YWluZWQgaW4gYSAgPHN5c3RlbW91dHB1dD5idXNpbmVzc0VudGl0eTwvc3lzdGVtb3V0cHV0PiBzdHJ1Y3R1cmUuCi1UaGUgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NFbnRpdHk8L3N5c3RlbW91dHB1dD4gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgdGhlIHNlcnZpY2UsIHN1Y2ggYXMgYnVzaW5lc3MgbmFtZSwgZGVzY3JpcHRpb24sCi1jb250YWN0cyBhbmQgaWRlbnRpZmllcnMuPC9wPiA8cD4gPHVpY29udHJvbD5TZXJ2aWNlIGluZm9ybWF0aW9uLjwvdWljb250cm9sPiBJbmZvcm1hdGlvbgotdGhhdCBkZXNjcmliZXMgYSBncm91cCBvZiBXZWIgc2VydmljZXMuIEl0IGlzIGNvbnRhaW5lZCBpbiBhICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzU2VydmljZTwvc3lzdGVtb3V0cHV0PiBzdHJ1Y3R1cmUuCi1UaGUgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci1mYW1pbGllcyBvZiB0ZWNobmljYWwgc2VydmljZXMuJm5ic3A7IEl0IGdyb3VwcyBhIHNldCBvZiBXZWIgc2VydmljZXMgcmVsYXRlZAotdG8gZWl0aGVyIGEgYnVzaW5lc3MgcHJvY2VzcyBvciBncm91cCBvZiBzZXJ2aWNlcy48L3A+IDxwPiA8dWljb250cm9sPkJpbmRpbmcKLWluZm9ybWF0aW9uLjwvdWljb250cm9sPiBJbmZvcm1hdGlvbiByZXByZXNlbnRlZCBieSB0aGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IHN0cnVjdHVyZS4KLVRoZSAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gaG9sZHMgdGVjaG5pY2FsIGluZm9ybWF0aW9uCi1mb3IgZGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50IGFuZCBjb25zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbnMgZm9yIGludm9raW5nCi1hIFdlYiBzZXJ2aWNlLiZuYnNwOyBUaGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IHByb3ZpZGVzCi10aGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zIHJlbGV2YW50IGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRoYXQgd2FudAotdG8gZmluZCBhbmQgaW52b2tlIGEgV2ViIHNlcnZpY2UuJm5ic3A7IFRoZSAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gcG9pbnRzCi10byBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVzY3JpcHRpb25zLCBmb3IgZXhhbXBsZSB2aWEgYSBVUkwuPC9wPiA8cD4gPHVpY29udHJvbD5JbmZvcm1hdGlvbgotZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLjwvdWljb250cm9sPiBNZXRhZGF0YSBhYm91dCB0aGUKLXZhcmlvdXMgc3BlY2lmaWNhdGlvbnMgaW1wbGVtZW50ZWQgYnkgYSBnaXZlbiBXZWIgc2VydmljZSByZXByZXNlbnRlZCBieSB0aGUKLSA8c3lzdGVtb3V0cHV0PnRNb2RlbDwvc3lzdGVtb3V0cHV0Pi4gVGhlICA8c3lzdGVtb3V0cHV0PnRNb2RlbDwvc3lzdGVtb3V0cHV0PiBwcm92aWRlcwotYSByZWZlcmVuY2Ugc3lzdGVtIHRvIGFzc2lzdCBpbiB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy48L3A+IDwvbHE+PHA+RmlndXJlCi0xLiBSZWxhdGlvbnNoaXAgYmV0d2VlbiBkYXRhIHR5cGVzLjwvcD48cD4gPGltYWdlIGFsdD0iRmlndXJlIDEgaWxsdXN0cmF0ZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIGJpbmRpbmcgdGVtcGxhdGUsIGFuZCB0bW9kZWwuIgotaHJlZj0iLi4vaW1hZ2VzL3VkZGkuZ2lmIj48L2ltYWdlPiA8L3A+PHA+RWFjaCBjaGlsZCBzdHJ1Y3R1cmUgaGFzIGEgdW5pcXVlCi1wYXJlbnQgc3RydWN0dXJlLiBUaGlzIG1lYW5zIHRoYXQgZWFjaCAgPHN5c3RlbW91dHB1dD5idXNpbmVzc1NlcnZpY2U8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlCi1pcyBvd25lZCBieSBhIHNwZWNpZmljICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzRW50aXR5PC9zeXN0ZW1vdXRwdXQ+LiBJbiB0dXJuLAotZWFjaCAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gaXMgb3duZWQgYnkgYSBzcGVjaWZpYwotIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+LiBFYWNoICA8c3lzdGVtb3V0cHV0PmJpbmRpbmdUZW1wbGF0ZTwvc3lzdGVtb3V0cHV0PiBzdHJ1Y3R1cmUKLXJlZmVyZW5jZXMgdG8gdW5pcXVlIGluc3RhbmNlcyBvZiAgPHN5c3RlbW91dHB1dD50TW9kZWw8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlczsKLWhvd2V2ZXIsIHNpbmNlIHJlZmVyZW5jZXMgY2FuIGJlIHJlcGVhdGVkIHdpdGhpbiBzZXZlcmFsIHBhcmVudCBzdHJ1Y3R1cmVzLAotdGhlcmUgY2FuIGJlIG1hbnkgcmVmZXJlbmNlcyB0byAgPHN5c3RlbW91dHB1dD50TW9kZWxzPC9zeXN0ZW1vdXRwdXQ+IGZyb20KLWRpZmZlcmVudCBFbnRpdHktU2VydmljZS1UZW1wbGF0ZSBwYXJlbnRzLCBhcyBzZWVuIGluIEZpZ3VyZSAyLjwvcD48cD5GaWd1cmUKLTIuIFJlZmVyZW5jZXMgdG8gdE1vZGVsLjwvcD48cD4gPGltYWdlIGFsdD0iRmlndXJlIDIgaWxsdXN0cmF0ZXMgdGhlIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gYSB0TW9kZWwuIgotaHJlZj0iLi4vaW1hZ2VzL3VkZGlyZWYuZ2lmIj48L2ltYWdlPiA8L3A+PC9zZWN0aW9uPgotPHNlY3Rpb24+PHRpdGxlPlB1Ymxpc2hlciBhc3NlcnRpb25zPC90aXRsZT48cD5BIHB1Ymxpc2hlciBhc3NlcnRpb24gaXMgYQotd2F5IGluIFVEREkgdG8gYXNzb2NpYXRlIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIFRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uCi1kZWZpbmVzIGEgZ3JvdXAgb2YgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gTWFueSBidXNpbmVzc2VzIGFyZSBub3QgZWZmZWN0aXZlbHkKLXJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGJ1c2luZXNzRW50aXR5LiBBIHB1Ymxpc2hlciBhc3NlcnRpb24gYWxsb3dzIGZvciB0aGUKLWFzc29jaWF0aW9uIGJldHdlZW4gYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gRm9yIGV4YW1wbGUsIGEgbGFyZ2UgY29tcGFueQotbWF5IGhhdmUgc2V2ZXJhbCBzdWJzaWRpYXJpZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBkZXNjcmlwdGlvbnMgYnV0IGFyZSBzdGlsbAotY2xvc2VseSBjb3VwbGVkIGFuZCB3YW50IHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwcyB2aXNpYmxlIGluIFVEREkgcmVnaXN0cmllcy48L3A+PC9zZWN0aW9uPgotPHNlY3Rpb24+PHRpdGxlPlNlcnZpY2UgcHJvamVjdGlvbnM8L3RpdGxlPjxwPkEgc2VydmljZSBwcm9qZWN0aW9uIGVuYWJsZXMKLWEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UgdGhhdCB3YXMgcHVibGlzaGVkIGJ5IGFub3RoZXIgYnVzaW5lc3MKLWVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZSBzdHJ1Y3R1cmUgYXMgYSBwcm9qZWN0aW9uIHRvIGFuIGFscmVhZHkKLXB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMgY2FuIHNoYXJlIG9yIHJldXNlIHNlcnZpY2VzLiBTZXJ2aWNlCi1wcm9qZWN0aW9ucyBhcmUgbWFuYWdlZCBjZW50cmFsbHkgYXMgcGFydCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkuCi1UaGlzIG1lYW5zIHRoYXQgYW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYnVzaW5lc3NTZXJ2aWNlIGJ5IGFueSBvZiB0aGUgcmVmZXJlbmNpbmcKLWJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMgYXJlIHZhbGlkIGZvciBhbGwgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5Ci1zdHJ1Y3R1cmVzLjwvcD48L3NlY3Rpb24+Ci08L3JlZmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdHVkZGlleHAuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9yZWYvcnVkZGkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMxYzY4My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9yZWYvcnVkZGkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgZGF0YSBzdHJ1Y3R1cmUgdHlwZXMsIFVEREkgcmVnaXN0cnkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBkYXRhIHN0cnVjdHVyZSB0eXBlcywgVURESSByZWdpc3RyeSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0icnVkZGkiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InJ1ZGRpIj48YSBuYW1lPSJydWRkaSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9oMT4KLQotCi0KLTxkaXY+PHA+T25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdAoteW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UKLWludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sCi1iaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLgotVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcyBpbmZvcm1hdGlvbi48L3NwYW4+IEluZm9ybWF0aW9uCi10aGF0IGlzIGNvbnRhaW5lZCBpbiBhICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NFbnRpdHk8L3R0PiBzdHJ1Y3R1cmUuCi1UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc0VudGl0eTwvdHQ+IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci10aGUgYnVzaW5lc3MgdGhhdCBoYXMgcHVibGlzaGVkIHRoZSBzZXJ2aWNlLCBzdWNoIGFzIGJ1c2luZXNzIG5hbWUsIGRlc2NyaXB0aW9uLAotY29udGFjdHMgYW5kIGlkZW50aWZpZXJzLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2VydmljZSBpbmZvcm1hdGlvbi48L3NwYW4+IEluZm9ybWF0aW9uCi10aGF0IGRlc2NyaWJlcyBhIGdyb3VwIG9mIFdlYiBzZXJ2aWNlcy4gSXQgaXMgY29udGFpbmVkIGluIGEgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0PiBzdHJ1Y3R1cmUuCi1UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0PiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotZmFtaWxpZXMgb2YgdGVjaG5pY2FsIHNlcnZpY2VzLsKgIEl0IGdyb3VwcyBhIHNldCBvZiBXZWIgc2VydmljZXMgcmVsYXRlZAotdG8gZWl0aGVyIGEgYnVzaW5lc3MgcHJvY2VzcyBvciBncm91cCBvZiBzZXJ2aWNlcy48L3A+Ci0gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJpbmRpbmcKLWluZm9ybWF0aW9uLjwvc3Bhbj4gSW5mb3JtYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gc3RydWN0dXJlLgotVGhlICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gaG9sZHMgdGVjaG5pY2FsIGluZm9ybWF0aW9uCi1mb3IgZGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50IGFuZCBjb25zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbnMgZm9yIGludm9raW5nCi1hIFdlYiBzZXJ2aWNlLsKgIFRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IHByb3ZpZGVzCi10aGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zIHJlbGV2YW50IGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRoYXQgd2FudAotdG8gZmluZCBhbmQgaW52b2tlIGEgV2ViIHNlcnZpY2UuwqAgVGhlICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gcG9pbnRzCi10byBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVzY3JpcHRpb25zLCBmb3IgZXhhbXBsZSB2aWEgYSBVUkwuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbmZvcm1hdGlvbgotZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLjwvc3Bhbj4gTWV0YWRhdGEgYWJvdXQgdGhlCi12YXJpb3VzIHNwZWNpZmljYXRpb25zIGltcGxlbWVudGVkIGJ5IGEgZ2l2ZW4gV2ViIHNlcnZpY2UgcmVwcmVzZW50ZWQgYnkgdGhlCi0gPHR0IGNsYXNzPSJzeXNvdXQiPnRNb2RlbDwvdHQ+LiBUaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij50TW9kZWw8L3R0PiBwcm92aWRlcwotYSByZWZlcmVuY2Ugc3lzdGVtIHRvIGFzc2lzdCBpbiB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy48L3A+Ci0gPC9ibG9ja3F1b3RlPgotPHA+RmlndXJlCi0xLiBSZWxhdGlvbnNoaXAgYmV0d2VlbiBkYXRhIHR5cGVzLjwvcD4KLTxwPiA8aW1nIHNyYz0iLi4vaW1hZ2VzL3VkZGkuZ2lmIiBhbHQ9IkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBiaW5kaW5nIHRlbXBsYXRlLCBhbmQgdG1vZGVsLiIgLz4gPC9wPgotPHA+RWFjaCBjaGlsZCBzdHJ1Y3R1cmUgaGFzIGEgdW5pcXVlCi1wYXJlbnQgc3RydWN0dXJlLiBUaGlzIG1lYW5zIHRoYXQgZWFjaCAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzU2VydmljZTwvdHQ+IHN0cnVjdHVyZQotaXMgb3duZWQgYnkgYSBzcGVjaWZpYyAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzRW50aXR5PC90dD4uIEluIHR1cm4sCi1lYWNoICA8dHQgY2xhc3M9InN5c291dCI+YmluZGluZ1RlbXBsYXRlPC90dD4gaXMgb3duZWQgYnkgYSBzcGVjaWZpYwotIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0Pi4gRWFjaCAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IHN0cnVjdHVyZQotcmVmZXJlbmNlcyB0byB1bmlxdWUgaW5zdGFuY2VzIG9mICA8dHQgY2xhc3M9InN5c291dCI+dE1vZGVsPC90dD4gc3RydWN0dXJlczsKLWhvd2V2ZXIsIHNpbmNlIHJlZmVyZW5jZXMgY2FuIGJlIHJlcGVhdGVkIHdpdGhpbiBzZXZlcmFsIHBhcmVudCBzdHJ1Y3R1cmVzLAotdGhlcmUgY2FuIGJlIG1hbnkgcmVmZXJlbmNlcyB0byAgPHR0IGNsYXNzPSJzeXNvdXQiPnRNb2RlbHM8L3R0PiBmcm9tCi1kaWZmZXJlbnQgRW50aXR5LVNlcnZpY2UtVGVtcGxhdGUgcGFyZW50cywgYXMgc2VlbiBpbiBGaWd1cmUgMi48L3A+Ci08cD5GaWd1cmUKLTIuIFJlZmVyZW5jZXMgdG8gdE1vZGVsLjwvcD4KLTxwPiA8aW1nIHNyYz0iLi4vaW1hZ2VzL3VkZGlyZWYuZ2lmIiBhbHQ9IkZpZ3VyZSAyIGlsbHVzdHJhdGVzIHRoZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgdE1vZGVsLiIgLz4gPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QdWJsaXNoZXIgYXNzZXJ0aW9uczwvaDQ+PHA+QSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGlzIGEKLXdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBUaGUgcHVibGlzaGVyIGFzc2VydGlvbgotZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5Ci1yZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgdGhlCi1hc3NvY2lhdGlvbiBiZXR3ZWVuIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkKLW1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwKLWNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5TZXJ2aWNlIHByb2plY3Rpb25zPC9oND48cD5BIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzCi1hIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlIHRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzCi1lbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2Ugc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5Ci1wdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzIGNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy4gU2VydmljZQotcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5IGFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5LgotVGhpcyBtZWFucyB0aGF0IGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJ1c2luZXNzU2VydmljZSBieSBhbnkgb2YgdGhlIHJlZmVyZW5jaW5nCi1idXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzIGFyZSB2YWxpZCBmb3IgYWxsIG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YWRkcmVnLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YWRkcmVnLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTVlY2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRyZWciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPkFsdGhvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgY29tZXMgcG9wdWxhdGVkIHdpdGggc2V2ZXJhbAotcmVnaXN0cmllcywgeW91IGNhbiBhbHNvIGFkZCBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViIFNlcnZpY2VzIEV4cGxvcmVyPGluZGV4dGVybT5hZGRpbmcKLWEgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPnJlZ2lzdHJpZXM8aW5kZXh0ZXJtPmFkZGluZyB0bwotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT48cD5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48eHJlZiBocmVmPSJ0cmVnLmRpdGEiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L29sPjwvcD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPldoZW4geW91IGFyZSByZWFkeSB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSwKLWFkZCBhIHByb2R1Y3Rpb24gcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4gSW4gb3JkZXIgdG8gcHVibGlzaAoteW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgcHJvZHVjdGlvbiByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QKLXJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5LiBUaGUgcmVnaXN0cnkgd2lsbCBwcm92aWRlIGluc3RydWN0aW9ucyBmb3IgcmVnaXN0ZXJpbmcuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiByZWdpc3RyaWVzLCByZWZlciB0byAgPHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlcmluZwotd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPi48L3A+PHA+VGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgaXMgYSBzZXQgb2YgZ2xvYmFsCi1yZXBsaWNhdGVkIHJlZ2lzdHJpZXMuIEZvciBhIGxpc3Qgb2YgcHVibGljIHJlZ2lzdHJpZXMgcmVmZXIgdG8gIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cuVURESS5vcmcvcmVnaXN0ZXIuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+d3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWw8L3hyZWY+PC9wPjxwPlRoZSA8dG0gdG1jbGFzcz0iaWJtIgotdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IFVEREkgQnVzaW5lc3MKLVJlZ2lzdHJ5IGlzIGEgcHVibGljIHByb2R1Y3Rpb24gcmVnaXN0cnkgbWFpbnRhaW5lZCBieSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgPHRtIHRtY2xhc3M9ImlibSIKLXRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJIEJ1c2luZXNzCi1SZWdpc3RyeSByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vdWRkaS5pYm0uY29tIiBzY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly91ZGRpLmlibS5jb208L3hyZWY+PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+VG8gYWRkIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIEZhdm9yaXRlcywKLWRvIHRoZSBmb2xsb3dpbmc6PC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPkNsaWNrIHRoZSAgPHVpY29udHJvbD5GYXZvcml0ZXM8L3VpY29udHJvbD4gaWNvbiAgPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgRmF2b3JpdGVzIGljb24uIgotaHJlZj0iLi4vaW1hZ2VzL2Zhdi5naWYiPjwvaW1hZ2U+IGluIHRoZSBtYWluIHRvb2xiYXIuPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5FeHBhbmQgIDx1aWNvbnRyb2w+RmF2b3JpdGUgVURESSBSZWdpc3RyaWVzPC91aWNvbnRyb2w+LjwvY21kPgotPC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgYSByZWdpc3RyeSB0aGVuIGNsaWNrIHRoZSAgPHVpY29udHJvbD5BZGQgdG8gVURESSBQYWdlPC91aWNvbnRyb2w+IGljb24KLSA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBBZGQgdG8gVURESSBQYWdlIGljb24uIiBocmVmPSIuLi9pbWFnZXMvYWRkdWRkaS5naWYiPgotPC9pbWFnZT4gaW4gdGhlIEFjdGlvbnMgcGFuZS48L2NtZD48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBhZGQgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG1hbnVhbGx5LCBkbyB0aGUKLWZvbGxvd2luZzo8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+SW4gdGhlIFVEREkgTmF2aWdhdG9yIHBhbmUsIGNsaWNrIHRoZSAgPHVpY29udHJvbD5VRERJIE1haW48L3VpY29udHJvbD4gbm9kZS48L2NtZD4KLTwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSwgZW50ZXIgdGhlIFJlZ2lzdHJ5IG5hbWUgYW5kIElucXVpcnkgVVJMCi1vZiB0aGUgcmVnaXN0cnkgeW91IHdhbnQgdG8gYWRkLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uPC9jbWQ+PC9zdWJzdGVwPgotPC9zdWJzdGVwcz4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YWRkcmVnLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YWRkcmVnLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YjIyZDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQWx0aG91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBjb21lcyBwb3B1bGF0ZWQgd2l0aCBzZXZlcmFsIHJlZ2lzdHJpZXMsIHlvdSBjYW4gYWxzbyBhZGQgYWRkaXRpb25hbCByZWdpc3RyaWVzIHRvIHlvdXIgbGlzdCBvZiBmYXZvcml0ZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFsdGhvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgY29tZXMgcG9wdWxhdGVkIHdpdGggc2V2ZXJhbCByZWdpc3RyaWVzLCB5b3UgY2FuIGFsc28gYWRkIGFkZGl0aW9uYWwgcmVnaXN0cmllcyB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIGEgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBhZGRpbmcgYSByZWdpc3RyeSwgcmVnaXN0cmllcywgYWRkaW5nIHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgYWRkaW5nIGEgcmVnaXN0cnksIHJlZ2lzdHJpZXMsIGFkZGluZyB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHJlZy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkcmVnIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGFkZHJlZyI+PGEgbmFtZT0idGFkZHJlZyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+QWx0aG91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBjb21lcyBwb3B1bGF0ZWQgd2l0aCBzZXZlcmFsCi1yZWdpc3RyaWVzLCB5b3UgY2FuIGFsc28gYWRkIGFkZGl0aW9uYWwgcmVnaXN0cmllcyB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5XaGVuIHlvdSBhcmUgcmVhZHkgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UsCi1hZGQgYSBwcm9kdWN0aW9uIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIEluIG9yZGVyIHRvIHB1Ymxpc2gKLXlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIHByb2R1Y3Rpb24gcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0Ci1yZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeS4gVGhlIHJlZ2lzdHJ5IHdpbGwgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIHJlZ2lzdGVyaW5nLgotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcmVnaXN0cmllcywgcmVmZXIgdG8gIDxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5PC9hPi48L3A+Ci08cD5UaGUgVURESSBCdXNpbmVzcyBSZWdpc3RyeSBpcyBhIHNldCBvZiBnbG9iYWwKLXJlcGxpY2F0ZWQgcmVnaXN0cmllcy4gRm9yIGEgbGlzdCBvZiBwdWJsaWMgcmVnaXN0cmllcyByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy5VRERJLm9yZy9yZWdpc3Rlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWw8L2E+PC9wPgotPHA+VGhlIElCTTxzdXA+wq48L3N1cD4gVURESSBCdXNpbmVzcwotUmVnaXN0cnkgaXMgYSBwdWJsaWMgcHJvZHVjdGlvbiByZWdpc3RyeSBtYWludGFpbmVkIGJ5IElCTS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIElCTSBVRERJIEJ1c2luZXNzCi1SZWdpc3RyeSByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3VkZGkuaWJtLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly91ZGRpLmlibS5jb208L2E+PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5UbyBhZGQgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gRmF2b3JpdGVzLAotZG8gdGhlIGZvbGxvd2luZzo8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+Q2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GYXZvcml0ZXM8L3NwYW4+IGljb24gIDxpbWcgc3JjPSIuLi9pbWFnZXMvZmF2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBGYXZvcml0ZXMgaWNvbi4iIC8+IGluIHRoZSBtYWluIHRvb2xiYXIuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FeHBhbmQgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZhdm9yaXRlIFVEREkgUmVnaXN0cmllczwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCBhIHJlZ2lzdHJ5IHRoZW4gY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgdG8gVURESSBQYWdlPC9zcGFuPiBpY29uCi0gPGltZyBzcmM9Ii4uL2ltYWdlcy9hZGR1ZGRpLmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBBZGQgdG8gVURESSBQYWdlIGljb24uIiAvPiBpbiB0aGUgQWN0aW9ucyBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGk+PHNwYW4+VG8gYWRkIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBtYW51YWxseSwgZG8gdGhlCi1mb2xsb3dpbmc6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkluIHRoZSBVRERJIE5hdmlnYXRvciBwYW5lLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlVEREkgTWFpbjwvc3Bhbj4gbm9kZS48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSwgZW50ZXIgdGhlIFJlZ2lzdHJ5IG5hbWUgYW5kIElucXVpcnkgVVJMCi1vZiB0aGUgcmVnaXN0cnkgeW91IHdhbnQgdG8gYWRkLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdvPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDk4ZGE3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YXNzZXJ0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPk1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zPC90aXRsZT4KLTxzaG9ydGRlc2M+QSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGlzIGEgd2F5IGluIFVEREkgdG8gYXNzb2NpYXRlIGJ1c2luZXNzRW50aXR5Ci1zdHJ1Y3R1cmVzLiZuYnNwOyBUaGUgcHVibGlzaGVyIGFzc2VydGlvbiBkZWZpbmVzIGEgZ3JvdXAgb2YgYnVzaW5lc3NFbnRpdHkKLXN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5IHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGJ1c2luZXNzRW50aXR5LgotQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgYXNzb2NpYXRpb25zIHRvIGJlIGZvcm1lZCBiZXR3ZWVuIHNldmVyYWwKLWJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkgbWF5IGhhdmUgc2V2ZXJhbCBzdWJzaWRpYXJpZXMKLXRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwgY2xvc2VseSBjb3VwbGVkIGFuZCB3YW50IHRvCi1tYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPm1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRhZGRyZWcuZGl0YSI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L29sPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcHVibGlzaGVyIGFzc2VydGlvbnMsIHJlZmVyIHRvIHRoZSAgPHhyZWYKLWhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIiBzY29wZT0iZXh0ZXJuYWwiPlVEREkgVmVyc2lvbgotMi4wIFByb2dyYW1tZXIncyBBUEkgU3BlY2lmaWNhdGlvbjwveHJlZj4gYW5kIHRoZSAgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPlVEREkgVmVyc2lvbiAyLjAgRGF0YSBTdHJ1Y3R1cmUgU3BlY2lmaWNhdGlvbjwveHJlZj4uPC9wPjxwPlRvCi1tYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnMsIGRvIHRoZSBmb2xsb3dpbmc6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSBmb3Igd2hpY2ggeW91Ci13YW50IHRvIG1hbmFnZSByZWZlcmVuY2VkIGJ1c2luZXNzZXMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHVpY29udHJvbD5NYW5hZ2UgUHVibGlzaGVyCi1Bc3NlcnRpb25zPC91aWNvbnRyb2w+IGljb24gIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIE1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBpY29uLiIKLWhyZWY9Ii4uL2ltYWdlcy9idXNhc3N0LmdpZiI+PC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5PbiB0aGUgTWFuYWdlIFB1Ymxpc2hlciBBc3NlcnRpb25zIHBhZ2UgeW91IGNhbiBhZGQsIHJlbW92ZSwgYW5kCi1tYWludGFpbiByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgYnVzaW5lc3MgZW50aXRpZXMuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+IDx1aWNvbnRyb2w+SW1wb3J0YW50OjwvdWljb250cm9sPiBBIGJ1c2luZXNzIGVudGl0eSB0aGF0IGlzIHJlZmVyZW5jZWQKLWJ5IGFub3RoZXIgYnVzaW5lc3MgZW50aXR5IG11c3QgaW4gdHVybiByZWZlcmVuY2UgdGhhdCBidXNpbmVzcyBlbnRpdHkgaW4KLW9yZGVyIHRvIG1ha2UgdGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gcHVibGljLiBBIG9uZS13YXkgcmVmZXJlbmNlIGlzIGNvbnNpZGVyZWQKLWFuIGluY29tcGxldGUgcHVibGlzaGVyIGFzc2VydGlvbiBhbmQgaXMgdmlzaWJsZSBvbmx5IHRvIHRoZSBvd25lciBvZiB0aGUKLWJ1c2luZXNzIGVudGl0eS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YXNzZXJ0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YXNzZXJ0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWIxNzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGlzIGEgd2F5IGluIFVEREkgdG8gYXNzb2NpYXRlIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuwqAgVGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5IHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGJ1c2luZXNzRW50aXR5LiBBIHB1Ymxpc2hlciBhc3NlcnRpb24gYWxsb3dzIGZvciBhc3NvY2lhdGlvbnMgdG8gYmUgZm9ybWVkIGJldHdlZW4gc2V2ZXJhbCBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBGb3IgZXhhbXBsZSwgYSBsYXJnZSBjb21wYW55IG1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwgY2xvc2VseSBjb3VwbGVkIGFuZCB3YW50IHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwcyB2aXNpYmxlIGluIFVEREkgcmVnaXN0cmllcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGlzIGEgd2F5IGluIFVEREkgdG8gYXNzb2NpYXRlIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuwqAgVGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5IHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGJ1c2luZXNzRW50aXR5LiBBIHB1Ymxpc2hlciBhc3NlcnRpb24gYWxsb3dzIGZvciBhc3NvY2lhdGlvbnMgdG8gYmUgZm9ybWVkIGJldHdlZW4gc2V2ZXJhbCBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBGb3IgZXhhbXBsZSwgYSBsYXJnZSBjb21wYW55IG1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwgY2xvc2VseSBjb3VwbGVkIGFuZCB3YW50IHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwcyB2aXNpYmxlIGluIFVEREkgcmVnaXN0cmllcy4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBtYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIG1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHJlZy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNzZXJ0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+TWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhc3NlcnQiPjxhIG5hbWU9InRhc3NlcnQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPk1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zPC9oMT4KLQotCi0KLTxkaXY+PHA+QSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGlzIGEgd2F5IGluIFVEREkgdG8gYXNzb2NpYXRlIGJ1c2luZXNzRW50aXR5Ci1zdHJ1Y3R1cmVzLsKgIFRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGRlZmluZXMgYSBncm91cCBvZiBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy4gTWFueSBidXNpbmVzc2VzIGFyZSBub3QgZWZmZWN0aXZlbHkgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgYnVzaW5lc3NFbnRpdHkuCi1BIHB1Ymxpc2hlciBhc3NlcnRpb24gYWxsb3dzIGZvciBhc3NvY2lhdGlvbnMgdG8gYmUgZm9ybWVkIGJldHdlZW4gc2V2ZXJhbAotYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gRm9yIGV4YW1wbGUsIGEgbGFyZ2UgY29tcGFueSBtYXkgaGF2ZSBzZXZlcmFsIHN1YnNpZGlhcmllcwotdGhhdCBoYXZlIGRpZmZlcmVudCBkZXNjcmlwdGlvbnMgYnV0IGFyZSBzdGlsbCBjbG9zZWx5IGNvdXBsZWQgYW5kIHdhbnQgdG8KLW1ha2UgdGhlaXIgcmVsYXRpb25zaGlwcyB2aXNpYmxlIGluIFVEREkgcmVnaXN0cmllcy48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwdWJsaXNoZXIgYXNzZXJ0aW9ucywgcmVmZXIgdG8gdGhlICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlVEREkgVmVyc2lvbiAyLjAgUHJvZ3JhbW1lcidzIEFQSSBTcGVjaWZpY2F0aW9uPC9hPiBhbmQgdGhlICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlVEREkgVmVyc2lvbiAyLjAgRGF0YSBTdHJ1Y3R1cmUgU3BlY2lmaWNhdGlvbjwvYT4uPC9wPgotPHA+VG8KLW1hbmFnZSBwdWJsaXNoZXIgYXNzZXJ0aW9ucywgZG8gdGhlIGZvbGxvd2luZzo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoIHlvdQotd2FudCB0byBtYW5hZ2UgcmVmZXJlbmNlZCBidXNpbmVzc2VzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk1hbmFnZSBQdWJsaXNoZXIKLUFzc2VydGlvbnM8L3NwYW4+IGljb24gIDxpbWcgc3JjPSIuLi9pbWFnZXMvYnVzYXNzdC5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgTWFuYWdlIFB1Ymxpc2hlciBBc3NlcnRpb25zIGljb24uIiAvPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPk9uIHRoZSBNYW5hZ2UgUHVibGlzaGVyIEFzc2VydGlvbnMgcGFnZSB5b3UgY2FuIGFkZCwgcmVtb3ZlLCBhbmQKLW1haW50YWluIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBidXNpbmVzcyBlbnRpdGllcy48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydGFudDo8L3NwYW4+IEEgYnVzaW5lc3MgZW50aXR5IHRoYXQgaXMgcmVmZXJlbmNlZAotYnkgYW5vdGhlciBidXNpbmVzcyBlbnRpdHkgbXVzdCBpbiB0dXJuIHJlZmVyZW5jZSB0aGF0IGJ1c2luZXNzIGVudGl0eSBpbgotb3JkZXIgdG8gbWFrZSB0aGUgcHVibGlzaGVyIGFzc2VydGlvbiBwdWJsaWMuIEEgb25lLXdheSByZWZlcmVuY2UgaXMgY29uc2lkZXJlZAotYW4gaW5jb21wbGV0ZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFuZCBpcyB2aXNpYmxlIG9ubHkgdG8gdGhlIG93bmVyIG9mIHRoZQotYnVzaW5lc3MgZW50aXR5LjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWRjNjkwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRia21yayIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwKLVdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5BZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlCi1pbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXM8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPllvdSBjYW4gYWRkIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZQotaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIEZhdm9yaXRlcyBpZgoteW91IHBsYW4gdG8gYWNjZXNzIHRoZW0gaW4gdGhlIGZ1dHVyZS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIFNlcnZpY2UgRXhwbG9yZXI8aW5kZXh0ZXJtPmFkZGluZyBGYXZvcml0ZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+YWRkaW5nIHRvIEZhdm9yaXRlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+YWRkaW5nCi10byBGYXZvcml0ZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlOiAgPHVsPgotPGxpPjx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L3VsPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+VG8gYWRkIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLAotV1NJTCwgb3IgV1NETCB0byBGYXZvcml0ZXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5OYXZpZ2F0ZSB0aHJvdWdoIHRoZSByZWdpc3RyeSBoaWVyYXJjaHkgdG8gZmluZCB0aGUgcmVnaXN0cnksIGJ1c2luZXNzCi1lbnRpdHksIFdlYiBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSBvciB0aGUgV1NJTCBwYWdlIHRvIGZpbmQgdGhlIFdTSUwgb3IKLVdTREwgc2VydmljZSB5b3Ugd2FudCB0byBhZGQgdG8gRmF2b3JpdGVzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwKLW9yIFdTREwgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIGljb24gYmFyLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+QWRkIHRvIGZhdm9yaXRlczwvdWljb250cm9sPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgQWRkIHRvIGZhdm9yaXRlcyBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL2FkZGZhdi5naWYiPgotPC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+QW55IGZhdm9yaXRlcyB0aGF0IHlvdSBhZGQgYXJlIHNhdmVkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvJm5ic3A7PC9wPjxwPiA8dmFybmFtZT5YPC92YXJuYW1lPjpcd29ya3NwYWNlXC5tZXRhZGF0YVwucGx1Z2luc1xjb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyXGZhdm9yaXRlcy53c2lsPC9wPjxwPldoZXJlCi0gPHZhcm5hbWU+WDwvdmFybmFtZT4gaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB5b3VyIHdvcmtzcGFjZSBmb2xkZXIgaXMgbG9jYXRlZC4KLUlmIHlvdSBhcmUgbWlncmF0aW5nIGZyb20gYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoZSBwcm9kdWN0LCB5b3VyIGZhdm9yaXRlcwotd2lsbCBiZSBhdXRvbWF0aWNhbGx5IG1pZ3JhdGVkIHRvIHRoaXMgbG9jYXRpb24uPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0NmNmMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IllvdSBjYW4gYWRkIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgRmF2b3JpdGVzIGlmIHlvdSBwbGFuIHRvIGFjY2VzcyB0aGVtIGluIHRoZSBmdXR1cmUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gYWRkIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgRmF2b3JpdGVzIGlmIHlvdSBwbGFuIHRvIGFjY2VzcyB0aGVtIGluIHRoZSBmdXR1cmUuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIFNlcnZpY2UgRXhwbG9yZXIsIGFkZGluZyBGYXZvcml0ZXMsIFdTSUwsIGFkZGluZyB0byBGYXZvcml0ZXMsIFdTREwsIGFkZGluZyB0byBGYXZvcml0ZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZSBFeHBsb3JlciwgYWRkaW5nIEZhdm9yaXRlcywgV1NJTCwgYWRkaW5nIHRvIEZhdm9yaXRlcywgV1NETCwgYWRkaW5nIHRvIEZhdm9yaXRlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGJrbXJrIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZQotaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YmttcmsiPjxhIG5hbWU9InRia21yayI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsCi1XU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9oMT4KLQotCi0KLQotPGRpdj48cD5Zb3UgY2FuIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UKLWludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBGYXZvcml0ZXMgaWYKLXlvdSBwbGFuIHRvIGFjY2VzcyB0aGVtIGluIHRoZSBmdXR1cmUuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGU6ICA8dWw+Ci08bGk+PGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBhZGQgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsCi1XU0lMLCBvciBXU0RMIHRvIEZhdm9yaXRlcyB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIHJlZ2lzdHJ5LCBidXNpbmVzcwotZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2Ugb3IgdGhlIFdTSUwgcGFnZSB0byBmaW5kIHRoZSBXU0lMIG9yCi1XU0RMIHNlcnZpY2UgeW91IHdhbnQgdG8gYWRkIHRvIEZhdm9yaXRlcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsCi1vciBXU0RMIHNlcnZpY2UuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBpY29uIGJhciwgY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgdG8gZmF2b3JpdGVzPC9zcGFuPiBpY29uCi0gPGltZyBzcmM9Ii4uL2ltYWdlcy9hZGRmYXYuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIEFkZCB0byBmYXZvcml0ZXMgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5BbnkgZmF2b3JpdGVzIHRoYXQgeW91IGFkZCBhcmUgc2F2ZWQgYnkgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotdG/CoDwvcD4KLTxwPiA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5YPC92YXI+Olx3b3Jrc3BhY2VcLm1ldGFkYXRhXC5wbHVnaW5zXGNvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXJcZmF2b3JpdGVzLndzaWw8L3A+Ci08cD5XaGVyZQotIDx2YXIgY2xhc3M9InZhcm5hbWUiPlg8L3Zhcj4gaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB5b3VyIHdvcmtzcGFjZSBmb2xkZXIgaXMgbG9jYXRlZC4KLUlmIHlvdSBhcmUgbWlncmF0aW5nIGZyb20gYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoZSBwcm9kdWN0LCB5b3VyIGZhdm9yaXRlcwotd2lsbCBiZSBhdXRvbWF0aWNhbGx5IG1pZ3JhdGVkIHRvIHRoaXMgbG9jYXRpb24uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGM1ZDU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGJ1c3Byb2oiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlczwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgc2VydmljZSBwcm9qZWN0aW9uIGVuYWJsZXMgYSBidXNpbmVzcyBlbnRpdHkgdG8gcmVmZXJlbmNlIGEgc2VydmljZQotdGhhdCB3YXMgcHVibGlzaGVkIGJ5IGFub3RoZXIgYnVzaW5lc3MgZW50aXR5LiBCeSB1c2luZyB0aGUgYnVzaW5lc3NTZXJ2aWNlCi1zdHJ1Y3R1cmUgYXMgYSBwcm9qZWN0aW9uIHRvIGFuIGFscmVhZHkgcHVibGlzaGVkIGJ1c2luZXNzU2VydmljZSwgYnVzaW5lc3NlcwotY2FuIHNoYXJlIG9yIHJldXNlIHNlcnZpY2VzLiZuYnNwOyBTZXJ2aWNlIHByb2plY3Rpb25zIGFyZSBtYW5hZ2VkIGNlbnRyYWxseQotYXMgcGFydCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+bWFuYWdpbmcgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+VURESTxpbmRleHRlcm0+bWFuYWdpbmcgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRhZGRyZWcuZGl0YSI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L29sPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcmVmZXJlbmNlZCBzZXJ2aWNlcywgcmVmZXIgdG8gdGhlICA8eHJlZgotaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiIHNjb3BlPSJleHRlcm5hbCI+VURESSBWZXJzaW9uCi0yLjAgUHJvZ3JhbW1lcidzIEFQSSBTcGVjaWZpY2F0aW9uPC94cmVmPiBhbmQgdGhlICA8eHJlZiBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+VURESSBWZXJzaW9uIDIuMCBEYXRhIFN0cnVjdHVyZSBTcGVjaWZpY2F0aW9uPC94cmVmPi48L3A+PHA+VG8KLW1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzLCBkbyB0aGUgZm9sbG93aW5nOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoIHlvdQotd2FudCB0byBtYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlcy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8dWljb250cm9sPk1hbmFnZSBSZWZlcmVuY2VkCi1TZXJ2aWNlczwvdWljb250cm9sPiBpY29uICA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBNYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcyBpY29uLiIKLWhyZWY9Ii4uL2ltYWdlcy9yZWZzZXJ2LmdpZiI+PC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5PbiB0aGUgTWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMgcGFnZSB5b3UgY2FuIGFkZCwgcmVtb3ZlLCBhbmQKLW1haW50YWluIHNlcnZpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGJ1c2luZXNzIGVudGl0eS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMjQwZTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBzZXJ2aWNlIHByb2plY3Rpb24gZW5hYmxlcyBhIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlIHRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZSBzdHJ1Y3R1cmUgYXMgYSBwcm9qZWN0aW9uIHRvIGFuIGFscmVhZHkgcHVibGlzaGVkIGJ1c2luZXNzU2VydmljZSwgYnVzaW5lc3NlcyBjYW4gc2hhcmUgb3IgcmV1c2Ugc2VydmljZXMuwqAgU2VydmljZSBwcm9qZWN0aW9ucyBhcmUgbWFuYWdlZCBjZW50cmFsbHkgYXMgcGFydCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgc2VydmljZSBwcm9qZWN0aW9uIGVuYWJsZXMgYSBidXNpbmVzcyBlbnRpdHkgdG8gcmVmZXJlbmNlIGEgc2VydmljZSB0aGF0IHdhcyBwdWJsaXNoZWQgYnkgYW5vdGhlciBidXNpbmVzcyBlbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2Ugc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5IHB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMgY2FuIHNoYXJlIG9yIHJldXNlIHNlcnZpY2VzLsKgIFNlcnZpY2UgcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5IGFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5LiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgbWFuYWdpbmcgc2VydmljZXMsIFVEREkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIG1hbmFnaW5nIHNlcnZpY2VzLCBVRERJIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHJlZy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YnVzcHJvaiIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPk1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRidXNwcm9qIj48YSBuYW1lPSJ0YnVzcHJvaiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+TWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlczwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgc2VydmljZSBwcm9qZWN0aW9uIGVuYWJsZXMgYSBidXNpbmVzcyBlbnRpdHkgdG8gcmVmZXJlbmNlIGEgc2VydmljZQotdGhhdCB3YXMgcHVibGlzaGVkIGJ5IGFub3RoZXIgYnVzaW5lc3MgZW50aXR5LiBCeSB1c2luZyB0aGUgYnVzaW5lc3NTZXJ2aWNlCi1zdHJ1Y3R1cmUgYXMgYSBwcm9qZWN0aW9uIHRvIGFuIGFscmVhZHkgcHVibGlzaGVkIGJ1c2luZXNzU2VydmljZSwgYnVzaW5lc3NlcwotY2FuIHNoYXJlIG9yIHJldXNlIHNlcnZpY2VzLsKgIFNlcnZpY2UgcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5Ci1hcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eS48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiByZWZlcmVuY2VkIHNlcnZpY2VzLCByZWZlciB0byB0aGUgIDxhIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIiB0YXJnZXQ9Il9ibGFuayI+VURESSBWZXJzaW9uIDIuMCBQcm9ncmFtbWVyJ3MgQVBJIFNwZWNpZmljYXRpb248L2E+IGFuZCB0aGUgIDxhIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIiB0YXJnZXQ9Il9ibGFuayI+VURESSBWZXJzaW9uIDIuMCBEYXRhIFN0cnVjdHVyZSBTcGVjaWZpY2F0aW9uPC9hPi48L3A+Ci08cD5UbwotbWFuYWdlIHJlZmVyZW5jZWQgc2VydmljZXMsIGRvIHRoZSBmb2xsb3dpbmc6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5IGZvciB3aGljaCB5b3UKLXdhbnQgdG8gbWFuYWdlIHJlZmVyZW5jZWQgc2VydmljZXMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TWFuYWdlIFJlZmVyZW5jZWQKLVNlcnZpY2VzPC9zcGFuPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3JlZnNlcnYuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIE1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzIGljb24uIiAvPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPk9uIHRoZSBNYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcyBwYWdlIHlvdSBjYW4gYWRkLCByZW1vdmUsIGFuZAotbWFpbnRhaW4gc2VydmljZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NTlmN2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0ZGlzY292IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkRpc2NvdmVyaW5nIFdlYiBTZXJ2aWNlczwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkRpc2NvdmVyaW5nIGFuZCBpbXBvcnRpbmcgV2ViIHNlcnZpY2VzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5XZWIgc2VydmljZXMgY2FuIGJlIGxvY2F0ZWQgdGhyb3VnaCBhIHB1YmxpYyBidXNpbmVzcyByZWdpc3RyeSwKLWEgcHJpdmF0ZSBidXNpbmVzcyByZWdpc3RyeSwgb3IgYSBXU0lMIGRvY3VtZW50LiBVRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeQotb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpcgotc2VydmljZSBkZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5kaXNjb3ZlcmluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5VRERJPGluZGV4dGVybT5kaXNjb3ZlcmluZyBXZWIgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+ZGlzY292ZXJpbmcgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRhZGRyZWcuZGl0YSI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L29sPjwvcD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBhbGxvd3MgeW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcwotaXQgcHJvdmlkZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZQotc3BlY2lmaWNhdGlvbiwgcmVmZXIgdG8gIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sIgotc2NvcGU9ImV4dGVybmFsIj4gd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC94cmVmPi4KLSAuPC9wPjxwPllvdSBjYW4gZGlzY292ZXIgYSBXZWIgc2VydmljZSBpbiB0d28gd2F5cyB1c2luZyB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjo8L3A+PC9jb250ZXh0PgotPHJlc3VsdD48dWw+Ci08bGk+IDx4cmVmIGhyZWY9IiN0ZGlzY292L2Rpc2NvdmVyX2Zyb21fdWRkaSI+RGlzY292ZXJpbmcgYSBXZWIgc2VydmljZSBmcm9tCi1hIFVEREkgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9IiN0ZGlzY292L2Rpc2NvdmVyX2Zyb21fd3NpbCI+RGlzY292ZXJpbmcgYSBXZWIgc2VydmljZSBmcm9tCi1hIFdTSUwgZG9jdW1lbnQ8L3hyZWY+IDwvbGk+Ci08L3VsPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJkaXNjb3Zlcl9mcm9tX3VkZGkiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+IERpc2NvdmVyaW5nIGEgV2ViIFNlcnZpY2UgZnJvbSBhIFVEREkgUmVnaXN0cnk8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIFVSTCByZWZlcmVuY2VzIHRvIFdlYiBzZXJ2aWNlIFdTREwgZG9jdW1lbnRzLgotSW4gb3JkZXIgdG8gZGlzY292ZXIgYSBXZWIgc2VydmljZSB0aGUgVVJMIHRvIHRoZSBXZWIgc2VydmljZSBXU0RMIGRvY3VtZW50Ci1tdXN0IGJlIHJlc29sdmFibGUuIFRvIGxvY2F0ZSBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+VURESSBNYWluPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSBzZWxlY3QgYSByZWdpc3RyeSBmcm9tIHRoZSBkcm9wLWRvd24gbGlzdCBhbmQKLWNsaWNrIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIgY2xpY2sgdGhlICA8Yj5GaW5kPC9iPiBpY29uICA8aW1hZ2UKLWFsdD0iQSBwaWN0dXJlIG9mIHRoZSBGaW5kIGljb24uIiBocmVmPSIuLi9pbWFnZXMvZmluZC5naWYiPjwvaW1hZ2U+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lLCBlbnRlciB0aGUgbmFtZSBvZiB0aGUgcXVlcnksIHdoYXQgeW91IGFyZQotc2VhcmNoaW5nIGZvciwgdGhlIHR5cGUgb2Ygc2VhcmNoIHRoYXQgeW91IHdhbnQgdG8gcGVyZm9ybSwgYW5kIGFueSBxdWVyeQotaW5mb3JtYXRpb246IDwvY21kPgotPHN1YnN0ZXBzPgotPHN1YnN0ZXA+PGNtZD4gPGI+U2VhcmNoIGZvcjwvYj4mbmJzcDsgVGhpcyBsaXN0IGFsbG93cyB5b3UgdG8gc2VhcmNoIGZvcgotYnVzaW5lc3Nlcywgc2VydmljZXMsIG9yIHNlcnZpY2UgaW50ZXJmYWNlcy4gPC9jbWQ+PGluZm8+PHVsPgotPGxpPiA8Yj5CdXNpbmVzc2VzPC9iPiBPbmNlIHlvdSBsb2NhdGUgYSBidXNpbmVzcyBpbiB0aGUgcmVnaXN0cnksIHVzZSB0aGUKLWljb25zIGluIHRoZSBBY3Rpb24gcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6PHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgYnVzaW5lc3MgZGV0YWlsczwvbGk+Ci08bGk+R2V0IHRoZSBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBidXNpbmVzczwvbGk+Ci08bGk+UHVibGlzaCBhIHNlcnZpY2U8L2xpPgotPGxpPk1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzPC9saT4KLTxsaT5NYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnM8L2xpPgotPGxpPkFkZCB0aGUgYnVzaW5lc3MgdG8gRmF2b3JpdGVzPC9saT4KLTxsaT5VbnB1Ymxpc2ggdGhlIGJ1c2luZXNzPC9saT4KLTwvdWw+PC9saT4KLTxsaT4gPGI+U2VydmljZXM8L2I+IE9uY2UgeW91IGxvY2F0ZSBhIHNlcnZpY2UgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlIGljb25zCi1pbiB0aGUgQWN0aW9uIHBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOiA8dWw+Ci08bGk+VmlldyBhbmQgZWRpdCBzZXJ2aWNlIGRldGFpbHM8L2xpPgotPGxpPkdldCB0aGUgYnVzaW5lc3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZTwvbGk+Ci08bGk+R2V0IHRoZSBzZXJ2aWNlIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZTwvbGk+Ci08bGk+SW1wb3J0IHRoZSBzZXJ2aWNlIFdTREwgZmlsZSB0byB0aGUgRWNsaXBzZSB3b3JrYmVuY2g8L2xpPgotPGxpPkltcG9ydCB0aGUgc2VydmljZSBXU0RMIGZpbGUgdG8gdGhlIGZpbGUgc3lzdGVtPC9saT4KLTxsaT5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIHdpemFyZHM8L2xpPgotPGxpPkFkZCB0aGUgc2VydmljZSB0byBGYXZvcml0ZXM8L2xpPgotPGxpPlVucHVibGlzaCB0aGUgc2VydmljZTwvbGk+Ci08L3VsPjwvbGk+Ci08bGk+IDxiPlNlcnZpY2UgaW50ZXJmYWNlczwvYj4gT25jZSB5b3UgbG9jYXRlIGEgc2VydmljZSBpbnRlcmZhY2UgaW4gdGhlCi1yZWdpc3RyeSwgdXNlIHRoZSBpY29ucyBpbiB0aGUgQWN0aW9uIHBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOiA8dWw+Ci08bGk+VmlldyBhbmQgZWRpdCBpbnRlcmZhY2UgZGV0YWlsczwvbGk+Ci08bGk+R2V0IHRoZSBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzZXJ2aWNlIGludGVyZmFjZTwvbGk+Ci08bGk+R2V0IHRoZSBidXNpbmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2UgaW50ZXJmYWNlPC9saT4KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIFdTREwgZmlsZSB0byB0aGUgRWNsaXBzZSB3b3JrYmVuY2g8L2xpPgotPGxpPkltcG9ydCB0aGUgc2VydmljZSBpbnRlcmZhY2UgV1NETCBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbTwvbGk+Ci08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSB3aXphcmRzPC9saT4KLTxsaT5BZGQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIHRvIEZhdm9yaXRlczwvbGk+Ci08bGk+VW5wdWJsaXNoIHRoZSBzZXJ2aWNlIGludGVyZmFjZTwvbGk+Ci08L3VsPjwvbGk+Ci08L3VsPjwvaW5mbz48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPiA8Yj5UeXBlIG9mIHNlYXJjaDwvYj4mbmJzcDsgVGhlc2UgcmFkaW8gYnV0dG9ucyBhbGxvdyB5b3UgdG8KLXNwZWNpZnkgYSBzaW1wbGUgb3IgYWR2YW5jZWQgc2VhcmNoLCBvciBhIHNlYXJjaCBieSBhIFVuaXZlcnNhbCBVbmlxdWUgSWRlbnRpZmllcgotKFVVSUQpLiA8L2NtZD48aW5mbz48ZGw+PGRsZW50cnk+Ci08ZHQ+U2ltcGxlPC9kdD4KLTxkZD5UeXBlIHRoZSBuYW1lIG9mIHRoZSBidXNpbmVzc2VzLCBzZXJ2aWNlcywgb3Igc2VydmljZSBpbnRlcmZhY2VzIGZvciB3aGljaAoteW91IGFyZSBzZWFyY2hpbmcuICA8Yj5Ob3RlOjwvYj4gVGhlIHNlYXJjaCBzZXQgc2l6ZSBpcyBzZXQgdG8gMTAwIGFuZCB0aGUKLW1heGltdW0gbnVtYmVyIG9mIHJldHVybmVkIHJlc3VsdHMgaXMgc2V0IHRvIDEwIGJ5IGRlZmF1bHQuJm5ic3A7IElmIHlvdSB3b3VsZAotbGlrZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMsIHVzZSB0aGUgQWR2YW5jZWQgc2VhcmNoLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnk+Ci08ZHQ+QWR2YW5jZWQgPC9kdD4KLTxkZD5BbGxvd3MgeW91IHRvIGVudGVyIG1vcmUgc2VhcmNoIG9wdGlvbnMgdG8gZm9jdXMgdGhlIHNjb3BlIG9mIHlvdXIgc2VhcmNoLgotU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHNlYXJjaCBmb3IgbXVsdGlwbGUgYnVzaW5lc3NlcyBvcgotc2VydmljZXMuPC9kZD4KLTwvZGxlbnRyeT48ZGxlbnRyeT4KLTxkdD5VVUlEIDwvZHQ+Ci08ZGQ+QWxsb3cgeW91IHRvIGVudGVyIHRoZSBVVUlEIGtleS4gVGhlIFVVSUQga2V5IGlzIHRoZSBpZGVudGlmaWVyIHRoYXQgaXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcHVibGlzaGVkIG9iamVjdC48L2RkPgotPC9kbGVudHJ5PjwvZGw+PC9pbmZvPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPk9uY2UgeW91IGhhdmUgc2VhcmNoZWQgYW5kIGRpc2NvdmVyZWQgdGhlIGJ1c2luZXNzIHNlcnZpY2UgZGVzY3JpcHRpb24KLXlvdSBkZXNpcmVkLCBzZWxlY3QgdGhlIHNlcnZpY2Ugb3IgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBjbGljayB0aGUgIDxiPkltcG9ydDwvYj4gaWNvbgotdG86IDwvY21kPgotPGNob2ljZXM+Ci08Y2hvaWNlPmltcG9ydCB0aGUgV1NETCBkb2N1bWVudCBpbnRvIHlvdXIgV2ViIHByb2plY3Q8L2Nob2ljZT4KLTxjaG9pY2U+aW1wb3J0IHRoZSBXU0RMIGRvY3VtZW50IGludG8gdGhlIFdTREwgRXhwbG9yZXIgZm9yIHRlc3Rpbmc8L2Nob2ljZT4KLTxjaG9pY2U+bGF1bmNoIHRoZSBXZWIgU2VydmljZSBTa2VsZXRvbiBDcmVhdGlvbiB3aXphcmQgb3IgV2ViIFNlcnZpY2UgQ2xpZW50Ci13aXphcmQgZGlyZWN0bHkgZnJvbSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvY2hvaWNlPgotPC9jaG9pY2VzPgotPC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZGlzY292ZXJfZnJvbV93c2lsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPiBEaXNjb3ZlcmluZyBhIFdlYiBTZXJ2aWNlIGZyb20gYSBXU0lMIERvY3VtZW50PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxvY2F0ZSBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvb2xiYXIsIGNsaWNrIHRoZSAgPGI+V1NJTCBQYWdlPC9iPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgV1NJTCBQYWdlIGljb24uIiBocmVmPSIuLi9pbWFnZXMvd3NpbHZpZXcuZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIE5hdmlnYXRvciBwYW5lLCBjbGljayAgPGI+V1NJTCBNYWluPC9iPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSAgPGI+VVJMIHRvIGRvY3VtZW50PC9iPiBmaWVsZCBvZiB0aGUgQWN0aW9ucyBwYW5lIGVudGVyCi10aGUgVVJMIHRvIHRoZSBXU0lMIGRvY3VtZW50IG9yIEhUVFAgZG9jdW1lbnQgdGhhdCBjb250YWlucyBsaW5rcyB0byBhIFdTSUwKLWRvY3VtZW50LiBEZXRhaWxzIG9uIGhvdyBhbiBIVFRQIGZpbGUgY2FuIGNvbnRhaW4gbGlua3MgdG8gV1NJTCBjYW4gYmUgZm91bmQKLWhlcmU6IGh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWw8L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+T25jZSB5b3UgaGF2ZSBsb2NhdGVkIHRoZSBXU0lMIGRvY3VtZW50LCB1c2UgdGhlIGljb25zIGluIHRoZSBBY3Rpb24KLXBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOjwvY21kPgotPGNob2ljZXM+Ci08Y2hvaWNlPlZpZXcgV1NJTCBkb2N1bWVudCBkZXRhaWxzPC9jaG9pY2U+Ci08Y2hvaWNlPkxpc3QgYWxsIG9mIHRoZSBXU0RMIHNlcnZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2Nob2ljZT4KLTxjaG9pY2U+TGlzdCBhbGwgb2YgdGhlIFVEREkgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvY2hvaWNlPgotPGNob2ljZT5MaXN0IGFsbCBvZiB0aGUgVURESSBidXNpbmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2Nob2ljZT4KLTxjaG9pY2U+TGlzdCBhbGwgb2YgdGhlIFdTSUwgbGlua3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvY2hvaWNlPgotPGNob2ljZT5JbXBvcnQgdGhlIFdTSUwgZG9jdW1lbnQgdG8gdGhlIGZpbGUgc3lzdGVtPC9jaG9pY2U+Ci08Y2hvaWNlPkFkZCB0aGUgV1NJTCBkb2N1bWVudCB0byBGYXZvcml0ZXM8L2Nob2ljZT4KLTwvY2hvaWNlcz4KLTxpbmZvPjxiPkltcG9ydGFudDo8L2I+IElmIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZG9lcyBub3QgZGlzcGxheSB0aGUKLXByb2plY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBpbXBvcnQgeW91ciBXU0RMIGZpbGUgdG8sIGVuc3VyZSB0aGF0IHlvdSBoYXZlCi1jcmVhdGVkIHRoZSBwcm9qZWN0IGFuZC9vciBjbGljayB0aGUgIDxiPlJlZnJlc2g8L2I+IGljb24uPC9pbmZvPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YSIgcHJvZHVjdD0iIgotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDYxZWJiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iV2ViIHNlcnZpY2VzIGNhbiBiZSBsb2NhdGVkIHRocm91Z2ggYSBwdWJsaWMgYnVzaW5lc3MgcmVnaXN0cnksIGEgcHJpdmF0ZSBidXNpbmVzcyByZWdpc3RyeSwgb3IgYSBXU0lMIGRvY3VtZW50LiBVRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYnkgcmVseWluZyBvbiBhIGRpc3RyaWJ1dGVkIHJlZ2lzdHJ5IG9mIGJ1c2luZXNzZXMgYW5kIHRoZWlyIHNlcnZpY2UgZGVzY3JpcHRpb25zIGltcGxlbWVudGVkIGluIGEgY29tbW9uIFhNTCBmb3JtYXQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgbG9jYXRlZCB0aHJvdWdoIGEgcHVibGljIGJ1c2luZXNzIHJlZ2lzdHJ5LCBhIHByaXZhdGUgYnVzaW5lc3MgcmVnaXN0cnksIG9yIGEgV1NJTCBkb2N1bWVudC4gVURESSBtYW5hZ2VzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbiBYTUwgZm9ybWF0LiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgZGlzY292ZXJpbmcsIFVEREksIGRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlcywgV1NJTCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgZGlzY292ZXJpbmcsIFVEREksIGRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlcywgV1NJTCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGRpc2NvdiIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkRpc2NvdmVyaW5nIGFuZCBpbXBvcnRpbmcgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0ZGlzY292Ij48YSBuYW1lPSJ0ZGlzY292Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5EaXNjb3ZlcmluZyBXZWIgU2VydmljZXM8L2gxPgotCi0KLQotCi08ZGl2PjxwPldlYiBzZXJ2aWNlcyBjYW4gYmUgbG9jYXRlZCB0aHJvdWdoIGEgcHVibGljIGJ1c2luZXNzIHJlZ2lzdHJ5LAotYSBwcml2YXRlIGJ1c2luZXNzIHJlZ2lzdHJ5LCBvciBhIFdTSUwgZG9jdW1lbnQuIFVEREkgbWFuYWdlcyB0aGUgZGlzY292ZXJ5Ci1vZiBXZWIgc2VydmljZXMgYnkgcmVseWluZyBvbiBhIGRpc3RyaWJ1dGVkIHJlZ2lzdHJ5IG9mIGJ1c2luZXNzZXMgYW5kIHRoZWlyCi1zZXJ2aWNlIGRlc2NyaXB0aW9ucyBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbiBYTUwgZm9ybWF0LjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0YWRkcmVnLmh0bWwiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08L29sPgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGlzIGEgc2VydmljZSBkaXNjb3ZlcnkKLW1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuCi1XU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzCi1pdCBwcm92aWRlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlCi1zcGVjaWZpY2F0aW9uLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWwiIHRhcmdldD0iX2JsYW5rIj53d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWw8L2E+LgotIC48L3A+Ci08cD5Zb3UgY2FuIGRpc2NvdmVyIGEgV2ViIHNlcnZpY2UgaW4gdHdvIHdheXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI6PC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjx1bD4KLTxsaT4gPGEgaHJlZj0iI3RkaXNjb3ZfX2Rpc2NvdmVyX2Zyb21fdWRkaSI+RGlzY292ZXJpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgVURESSByZWdpc3RyeTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSIjdGRpc2Nvdl9fZGlzY292ZXJfZnJvbV93c2lsIj5EaXNjb3ZlcmluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0lMIGRvY3VtZW50PC9hPiA8L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkaXNjb3Zlcl9mcm9tX3VkZGkiPjxhIG5hbWU9ImRpc2NvdmVyX2Zyb21fdWRkaSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj4gRGlzY292ZXJpbmcgYSBXZWIgU2VydmljZSBmcm9tIGEgVURESSBSZWdpc3RyeTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgcmVnaXN0cnkgY29udGFpbnMgVVJMIHJlZmVyZW5jZXMgdG8gV2ViIHNlcnZpY2UgV1NETCBkb2N1bWVudHMuCi1JbiBvcmRlciB0byBkaXNjb3ZlciBhIFdlYiBzZXJ2aWNlIHRoZSBVUkwgdG8gdGhlIFdlYiBzZXJ2aWNlIFdTREwgZG9jdW1lbnQKLW11c3QgYmUgcmVzb2x2YWJsZS4gVG8gbG9jYXRlIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9uczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5VRERJIE1haW48L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSBzZWxlY3QgYSByZWdpc3RyeSBmcm9tIHRoZSBkcm9wLWRvd24gbGlzdCBhbmQKLWNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdvPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciBjbGljayB0aGUgIDxzdHJvbmc+RmluZDwvc3Ryb25nPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2ZpbmQuZ2lmIiBhbHQ9IkEgcGljdHVyZSBvZiB0aGUgRmluZCBpY29uLiIgLz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUsIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBxdWVyeSwgd2hhdCB5b3UgYXJlCi1zZWFyY2hpbmcgZm9yLCB0aGUgdHlwZSBvZiBzZWFyY2ggdGhhdCB5b3Ugd2FudCB0byBwZXJmb3JtLCBhbmQgYW55IHF1ZXJ5Ci1pbmZvcm1hdGlvbjogPC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj4gPHN0cm9uZz5TZWFyY2ggZm9yPC9zdHJvbmc+wqAgVGhpcyBsaXN0IGFsbG93cyB5b3UgdG8gc2VhcmNoIGZvcgotYnVzaW5lc3Nlcywgc2VydmljZXMsIG9yIHNlcnZpY2UgaW50ZXJmYWNlcy4gPC9zcGFuPiA8dWw+Ci08bGk+IDxzdHJvbmc+QnVzaW5lc3Nlczwvc3Ryb25nPiBPbmNlIHlvdSBsb2NhdGUgYSBidXNpbmVzcyBpbiB0aGUgcmVnaXN0cnksIHVzZSB0aGUKLWljb25zIGluIHRoZSBBY3Rpb24gcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6PHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgYnVzaW5lc3MgZGV0YWlsczwvbGk+Ci0KLTxsaT5HZXQgdGhlIHNlcnZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGJ1c2luZXNzPC9saT4KLQotPGxpPlB1Ymxpc2ggYSBzZXJ2aWNlPC9saT4KLQotPGxpPk1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzPC9saT4KLQotPGxpPk1hbmFnZSBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvbGk+Ci0KLTxsaT5BZGQgdGhlIGJ1c2luZXNzIHRvIEZhdm9yaXRlczwvbGk+Ci0KLTxsaT5VbnB1Ymxpc2ggdGhlIGJ1c2luZXNzPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5TZXJ2aWNlczwvc3Ryb25nPiBPbmNlIHlvdSBsb2NhdGUgYSBzZXJ2aWNlIGluIHRoZSByZWdpc3RyeSwgdXNlIHRoZSBpY29ucwotaW4gdGhlIEFjdGlvbiBwYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzogPHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgc2VydmljZSBkZXRhaWxzPC9saT4KLQotPGxpPkdldCB0aGUgYnVzaW5lc3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZTwvbGk+Ci0KLTxsaT5HZXQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzZXJ2aWNlPC9saT4KLQotPGxpPkltcG9ydCB0aGUgc2VydmljZSBXU0RMIGZpbGUgdG8gdGhlIEVjbGlwc2Ugd29ya2JlbmNoPC9saT4KLQotPGxpPkltcG9ydCB0aGUgc2VydmljZSBXU0RMIGZpbGUgdG8gdGhlIGZpbGUgc3lzdGVtPC9saT4KLQotPGxpPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkczwvbGk+Ci0KLTxsaT5BZGQgdGhlIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9saT4KLQotPGxpPlVucHVibGlzaCB0aGUgc2VydmljZTwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+IDxzdHJvbmc+U2VydmljZSBpbnRlcmZhY2VzPC9zdHJvbmc+IE9uY2UgeW91IGxvY2F0ZSBhIHNlcnZpY2UgaW50ZXJmYWNlIGluIHRoZQotcmVnaXN0cnksIHVzZSB0aGUgaWNvbnMgaW4gdGhlIEFjdGlvbiBwYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzogPHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgaW50ZXJmYWNlIGRldGFpbHM8L2xpPgotCi08bGk+R2V0IHRoZSBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzZXJ2aWNlIGludGVyZmFjZTwvbGk+Ci0KLTxsaT5HZXQgdGhlIGJ1c2luZXNzZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotCi08bGk+SW1wb3J0IHRoZSBzZXJ2aWNlIGludGVyZmFjZSBXU0RMIGZpbGUgdG8gdGhlIEVjbGlwc2Ugd29ya2JlbmNoPC9saT4KLQotPGxpPkltcG9ydCB0aGUgc2VydmljZSBpbnRlcmZhY2UgV1NETCBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbTwvbGk+Ci0KLTxsaT5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIHdpemFyZHM8L2xpPgotCi08bGk+QWRkIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0byBGYXZvcml0ZXM8L2xpPgotCi08bGk+VW5wdWJsaXNoIHRoZSBzZXJ2aWNlIGludGVyZmFjZTwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj4gPHN0cm9uZz5UeXBlIG9mIHNlYXJjaDwvc3Ryb25nPsKgIFRoZXNlIHJhZGlvIGJ1dHRvbnMgYWxsb3cgeW91IHRvCi1zcGVjaWZ5IGEgc2ltcGxlIG9yIGFkdmFuY2VkIHNlYXJjaCwgb3IgYSBzZWFyY2ggYnkgYSBVbml2ZXJzYWwgVW5pcXVlIElkZW50aWZpZXIKLShVVUlEKS4gPC9zcGFuPiA8ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2ltcGxlPC9kdD4KLQotPGRkPlR5cGUgdGhlIG5hbWUgb2YgdGhlIGJ1c2luZXNzZXMsIHNlcnZpY2VzLCBvciBzZXJ2aWNlIGludGVyZmFjZXMgZm9yIHdoaWNoCi15b3UgYXJlIHNlYXJjaGluZy4gIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIHNlYXJjaCBzZXQgc2l6ZSBpcyBzZXQgdG8gMTAwIGFuZCB0aGUKLW1heGltdW0gbnVtYmVyIG9mIHJldHVybmVkIHJlc3VsdHMgaXMgc2V0IHRvIDEwIGJ5IGRlZmF1bHQuwqAgSWYgeW91IHdvdWxkCi1saWtlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cywgdXNlIHRoZSBBZHZhbmNlZCBzZWFyY2guPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+QWR2YW5jZWQgPC9kdD4KLQotPGRkPkFsbG93cyB5b3UgdG8gZW50ZXIgbW9yZSBzZWFyY2ggb3B0aW9ucyB0byBmb2N1cyB0aGUgc2NvcGUgb2YgeW91ciBzZWFyY2guCi1TZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdvdWxkIGxpa2UgdG8gc2VhcmNoIGZvciBtdWx0aXBsZSBidXNpbmVzc2VzIG9yCi1zZXJ2aWNlcy48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5VVUlEIDwvZHQ+Ci0KLTxkZD5BbGxvdyB5b3UgdG8gZW50ZXIgdGhlIFVVSUQga2V5LiBUaGUgVVVJRCBrZXkgaXMgdGhlIGlkZW50aWZpZXIgdGhhdCBpcwotYXNzb2NpYXRlZCB3aXRoIHRoZSBwdWJsaXNoZWQgb2JqZWN0LjwvZGQ+Ci0KLTwvZGw+Ci08L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGk+PHNwYW4+T25jZSB5b3UgaGF2ZSBzZWFyY2hlZCBhbmQgZGlzY292ZXJlZCB0aGUgYnVzaW5lc3Mgc2VydmljZSBkZXNjcmlwdGlvbgoteW91IGRlc2lyZWQsIHNlbGVjdCB0aGUgc2VydmljZSBvciB0aGUgc2VydmljZSBpbnRlcmZhY2UgYW5kIGNsaWNrIHRoZSAgPHN0cm9uZz5JbXBvcnQ8L3N0cm9uZz4gaWNvbgotdG86IDwvc3Bhbj4KLTx1bD4KLTxsaT5pbXBvcnQgdGhlIFdTREwgZG9jdW1lbnQgaW50byB5b3VyIFdlYiBwcm9qZWN0PC9saT4KLQotPGxpPmltcG9ydCB0aGUgV1NETCBkb2N1bWVudCBpbnRvIHRoZSBXU0RMIEV4cGxvcmVyIGZvciB0ZXN0aW5nPC9saT4KLQotPGxpPmxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgU2tlbGV0b24gQ3JlYXRpb24gd2l6YXJkIG9yIFdlYiBTZXJ2aWNlIENsaWVudAotd2l6YXJkIGRpcmVjdGx5IGZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2xpPgotCi08L3VsPgotCi08L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImRpc2NvdmVyX2Zyb21fd3NpbCI+PGEgbmFtZT0iZGlzY292ZXJfZnJvbV93c2lsIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPiBEaXNjb3ZlcmluZyBhIFdlYiBTZXJ2aWNlIGZyb20gYSBXU0lMIERvY3VtZW50PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxvY2F0ZSBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RnJvbSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHN0cm9uZz5XU0lMIFBhZ2U8L3N0cm9uZz4gaWNvbgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NpbHZpZXcuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFdTSUwgUGFnZSBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIE5hdmlnYXRvciBwYW5lLCBjbGljayAgPHN0cm9uZz5XU0lMIE1haW48L3N0cm9uZz4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlICA8c3Ryb25nPlVSTCB0byBkb2N1bWVudDwvc3Ryb25nPiBmaWVsZCBvZiB0aGUgQWN0aW9ucyBwYW5lIGVudGVyCi10aGUgVVJMIHRvIHRoZSBXU0lMIGRvY3VtZW50IG9yIEhUVFAgZG9jdW1lbnQgdGhhdCBjb250YWlucyBsaW5rcyB0byBhIFdTSUwKLWRvY3VtZW50LiBEZXRhaWxzIG9uIGhvdyBhbiBIVFRQIGZpbGUgY2FuIGNvbnRhaW4gbGlua3MgdG8gV1NJTCBjYW4gYmUgZm91bmQKLWhlcmU6IGh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWw8L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPk9uY2UgeW91IGhhdmUgbG9jYXRlZCB0aGUgV1NJTCBkb2N1bWVudCwgdXNlIHRoZSBpY29ucyBpbiB0aGUgQWN0aW9uCi1wYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzo8L3NwYW4+Ci08dWw+Ci08bGk+VmlldyBXU0lMIGRvY3VtZW50IGRldGFpbHM8L2xpPgotCi08bGk+TGlzdCBhbGwgb2YgdGhlIFdTREwgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvbGk+Ci0KLTxsaT5MaXN0IGFsbCBvZiB0aGUgVURESSBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBXU0lMIGRvY3VtZW50PC9saT4KLQotPGxpPkxpc3QgYWxsIG9mIHRoZSBVRERJIGJ1c2luZXNzZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvbGk+Ci0KLTxsaT5MaXN0IGFsbCBvZiB0aGUgV1NJTCBsaW5rcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBXU0lMIGRvY3VtZW50PC9saT4KLQotPGxpPkltcG9ydCB0aGUgV1NJTCBkb2N1bWVudCB0byB0aGUgZmlsZSBzeXN0ZW08L2xpPgotCi08bGk+QWRkIHRoZSBXU0lMIGRvY3VtZW50IHRvIEZhdm9yaXRlczwvbGk+Ci0KLTwvdWw+Ci0KLSA8c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gSWYgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBkb2VzIG5vdCBkaXNwbGF5IHRoZQotcHJvamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGltcG9ydCB5b3VyIFdTREwgZmlsZSB0bywgZW5zdXJlIHRoYXQgeW91IGhhdmUKLWNyZWF0ZWQgdGhlIHByb2plY3QgYW5kL29yIGNsaWNrIHRoZSAgPHN0cm9uZz5SZWZyZXNoPC9zdHJvbmc+IGljb24uPC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZDMyZjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0Z2Vud3NpbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5HZW5lcmF0aW5nIGEgV1NJTCBmaWxlPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZTwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGlzIGEgc2VydmljZSBkaXNjb3ZlcnkKLW1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuCi1XU0lMIGNhbiBiZSBnZW5lcmF0ZWQgYXQgYW55IHBvaW50IGluIHRoZSBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBjeWNsZSBvbmNlCi10aGUgV1NETCBmaWxlIGZvciB0aGUgV2ViIHNlcnZpY2UgaGFzIGJlZW4gY3JlYXRlZC48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5nZW5lcmF0aW5nIFdTSUw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+Z2VuZXJhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT48Yj5QcmVyZXF1aXNpdGVzOjwvYj4gSW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBXU0lMIGZpbGUsIHlvdSBuZWVkIHRvCi1rbm93IHRoZSBVUkwgdG8gYSBXU0RMIGZpbGUuPC9wcmVyZXE+Ci08Y29udGV4dD48cD5XU0lMIGhlbHBzIHN5bmNocm9uaXplIHRoaXMgcHJvY2VzcyBieSBtYWludGFpbmluZyByZWZlcmVuY2VzCi10byBXU0RMIFVSTHMuIFdlYiBzZXJ2aWNlcyB0b29scyB0aGF0IHByb2Nlc3MgV1NETCBkb2N1bWVudHMgLSBzdWNoIGFzIHRoZQotV2ViIFNlcnZpY2UgQ2xpZW50IGFuZCBDcmVhdGlvbiB3aXphcmRzIC0gd2lsbCBhY2NlcHQgYSBXU0lMIGRvY3VtZW50IGFzIGEKLXN1YnN0aXR1dGUgZm9yIFdTREwuIFRoaXMgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBzdGFuZGFyZGl6ZWQgV1NETCByZWZlcmVuY2UKLShXU0lMKSBkb2N1bWVudCBpbiB5b3VyIHByb2plY3QgZHVyaW5nIFdlYiBzZXJ2aWNlIGNsaWVudCBnZW5lcmF0aW9uLCB0aGVuCi1hdCBhIGxhdGVyIHRpbWUgZWFzaWx5IHJlZ2VuZXJhdGUgdGhlIGNsaWVudCBmcm9tIHRoYXQgcmVmZXJlbmNlIGRvY3VtZW50LgotTm8gY29waWVzIG9mIHRoZSBXU0RMIG9yIFdTREwgVVJMcyBhcmUgcmVxdWlyZWQuPC9wPjxwPllvdSBjYW4gZ2VuZXJhdGUgYQotV1NJTCBmaWxlIGZyb20gYSBwcmUtZXhpc3RpbmcgV1NETCBmaWxlIG9yIGR1cmluZyBXZWIgc2VydmljZSBjcmVhdGlvbiBvcgotY29uc3VtcHRpb24uPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZDBlMjciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZSB0aG91Z2ggdGhlIGltcG9ydCB1dGlsaXR5PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIHRocm91Z2ggdGhlIGltcG9ydCB1dGlsaXR5OjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9wdGlvbmFsOiBTZWxlY3QgdGhlIFdTREwgZG9jdW1lbnQgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNyZWF0ZQotYSBXU0lMIGZpbGUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Gcm9tIHRoZSAgPGI+RmlsZTwvYj4gbWVudSwgc2VsZWN0ICA8Yj5JbXBvcnQ8L2I+ID4gIDxiPldTSUwgPgotTmV4dDwvYj4uIFRoZSBXU0lMIEltcG9ydCB3aW5kb3cgb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byBwZXJmb3JtIHN0ZXAgMSwgdGhlIFdTSUwgVVJJIGZpZWxkIHNob3VsZAotYmUgcHJlZmlsbGVkIHdpdGggdGhlIG5hbWUgb2YgeW91ciBXU0RMIGZpbGUsIHdoZXJlIHRoZSBleHRlbnNpb24gaGFzIGJlZW4KLWNoYW5nZWQgZnJvbSAgPHN5c3RlbW91dHB1dD4ud3NkbDwvc3lzdGVtb3V0cHV0PiB0byAgPHN5c3RlbW91dHB1dD4ud3NpbDwvc3lzdGVtb3V0cHV0Pi4KLVRoZSBXU0RMIHNlY3Rpb24gc2hvdWxkIGNvbnRhaW4gdGhlIFVSTHMgdG8gdGhlIHNlbGVjdGVkIFdTREwgZmlsZXMuIFlvdSBjYW4KLWFsc28gZW50ZXIgYWRkaXRpb25hbCBXU0RMIFVSTHMuIEFsdGVybmF0ZWx5LCB5b3UgY2FuIGJyb3dzZSB0byB0aGUgbG9jYXRpb24KLW9mIGEgV1NJTCBmaWxlLCBvciBtYW51YWxseSBlbnRlciB0aGUgbG9jYXRpb24gb2YgdGhlIFdTSUwgYW5kIFdTREwgZmlsZXMKLWluIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayBGaW5pc2guIEEgV1NJTCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGU2MiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5HZW5lcmF0aW5nIGEgV1NJTCBmaWxlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBnZW5lcmF0ZSBhIFdTSUwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+T3BlbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+T3BlbiB0aGUgV1NETCBFeHBsb3JlciBieSBjbGlja2luZyB0aGlzIGljb246ICA8aW1hZ2UgYWx0PSJpY29uIHVzZWQgdG8gbGF1bmNoIHRoZSB3ZWIgc2VydmljZXMgZXhwbG9yZXIiCi1ocmVmPSIuLi9pbWFnZXMvd3NkbGljb24uZ2lmIj48L2ltYWdlPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+T3BlbiBhIFdTREwgZmlsZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgV1NETCBmaWxlIHRoYXQgeW91IGhhdmUgb3BlbmVkIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSwKLWFuZCBmcm9tIHRoZSBhdmFpbGFibGUgYWN0aW9ucywgY2hvb3NlIHRvIGltcG9ydCBhIFdTREwgZmlsZSB0byB0aGUgd29ya2JlbmNoCi1ieSBjbGlja2luZyB0aGlzIGljb246ICA8aW1hZ2UgYWx0PSJpY29uIHVzZWQgdG8gaW1wb3J0IGEgZmlsZSIgaHJlZj0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiI+Ci08L2ltYWdlPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0ICA8Yj5JbXBvcnQgYXMgYSBzZXJ2aWNlIHJlZmVyZW5jZSB0byBhIFdTSUwgZG9jdW1lbnQ8L2I+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5FbnRlciBhIG5hbWUgZm9yIHRoZSBXU0lMIGZpbGUgdGhhdCB5b3Ugd2FudCB0byBnZW5lcmF0ZSwgYW5kIGNsaWNrCi0gPGI+R288L2I+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTE0YTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJHZW5lcmF0aW5nIGEgV1NJTCBmaWxlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5IG1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuIFdTSUwgY2FuIGJlIGdlbmVyYXRlZCBhdCBhbnkgcG9pbnQgaW4gdGhlIFdlYiBzZXJ2aWNlIGRldmVsb3BtZW50IGN5Y2xlIG9uY2UgdGhlIFdTREwgZmlsZSBmb3IgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5IG1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuIFdTSUwgY2FuIGJlIGdlbmVyYXRlZCBhdCBhbnkgcG9pbnQgaW4gdGhlIFdlYiBzZXJ2aWNlIGRldmVsb3BtZW50IGN5Y2xlIG9uY2UgdGhlIFdTREwgZmlsZSBmb3IgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBnZW5lcmF0aW5nIFdTSUwsIFdTSUwsIGdlbmVyYXRpbmciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGdlbmVyYXRpbmcgV1NJTCwgV1NJTCwgZ2VuZXJhdGluZyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGdlbndzaWwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5HZW5lcmF0aW5nIGEgV1NJTCBmaWxlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0Z2Vud3NpbCI+PGEgbmFtZT0idGdlbndzaWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGU8L2gxPgotCi0KLQotCi08ZGl2PjxwPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBjYW4gYmUgZ2VuZXJhdGVkIGF0IGFueSBwb2ludCBpbiB0aGUgV2ViIHNlcnZpY2UgZGV2ZWxvcG1lbnQgY3ljbGUgb25jZQotdGhlIFdTREwgZmlsZSBmb3IgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48c3Ryb25nPlByZXJlcXVpc2l0ZXM6PC9zdHJvbmc+IEluIG9yZGVyIHRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlLCB5b3UgbmVlZCB0bwota25vdyB0aGUgVVJMIHRvIGEgV1NETCBmaWxlLjwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5XU0lMIGhlbHBzIHN5bmNocm9uaXplIHRoaXMgcHJvY2VzcyBieSBtYWludGFpbmluZyByZWZlcmVuY2VzCi10byBXU0RMIFVSTHMuIFdlYiBzZXJ2aWNlcyB0b29scyB0aGF0IHByb2Nlc3MgV1NETCBkb2N1bWVudHMgLSBzdWNoIGFzIHRoZQotV2ViIFNlcnZpY2UgQ2xpZW50IGFuZCBDcmVhdGlvbiB3aXphcmRzIC0gd2lsbCBhY2NlcHQgYSBXU0lMIGRvY3VtZW50IGFzIGEKLXN1YnN0aXR1dGUgZm9yIFdTREwuIFRoaXMgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBzdGFuZGFyZGl6ZWQgV1NETCByZWZlcmVuY2UKLShXU0lMKSBkb2N1bWVudCBpbiB5b3VyIHByb2plY3QgZHVyaW5nIFdlYiBzZXJ2aWNlIGNsaWVudCBnZW5lcmF0aW9uLCB0aGVuCi1hdCBhIGxhdGVyIHRpbWUgZWFzaWx5IHJlZ2VuZXJhdGUgdGhlIGNsaWVudCBmcm9tIHRoYXQgcmVmZXJlbmNlIGRvY3VtZW50LgotTm8gY29waWVzIG9mIHRoZSBXU0RMIG9yIFdTREwgVVJMcyBhcmUgcmVxdWlyZWQuPC9wPgotPHA+WW91IGNhbiBnZW5lcmF0ZSBhCi1XU0lMIGZpbGUgZnJvbSBhIHByZS1leGlzdGluZyBXU0RMIGZpbGUgb3IgZHVyaW5nIFdlYiBzZXJ2aWNlIGNyZWF0aW9uIG9yCi1jb25zdW1wdGlvbi48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTI3Ij48YSBuYW1lPSJkMGUyNyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5HZW5lcmF0aW5nIGEgV1NJTCBmaWxlIHRob3VnaCB0aGUgaW1wb3J0IHV0aWxpdHk8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gZ2VuZXJhdGUgYSBXU0lMIGZpbGUgdGhyb3VnaCB0aGUgaW1wb3J0IHV0aWxpdHk6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5PcHRpb25hbDogU2VsZWN0IHRoZSBXU0RMIGRvY3VtZW50IGZvciB3aGljaCB5b3Ugd2FudCB0byBjcmVhdGUKLWEgV1NJTCBmaWxlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RnJvbSB0aGUgIDxzdHJvbmc+RmlsZTwvc3Ryb25nPiBtZW51LCBzZWxlY3QgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+ICZndDsgIDxzdHJvbmc+V1NJTCAmZ3Q7Ci1OZXh0PC9zdHJvbmc+LiBUaGUgV1NJTCBJbXBvcnQgd2luZG93IG9wZW5zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcGVyZm9ybSBzdGVwIDEsIHRoZSBXU0lMIFVSSSBmaWVsZCBzaG91bGQKLWJlIHByZWZpbGxlZCB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgV1NETCBmaWxlLCB3aGVyZSB0aGUgZXh0ZW5zaW9uIGhhcyBiZWVuCi1jaGFuZ2VkIGZyb20gIDx0dCBjbGFzcz0ic3lzb3V0Ij4ud3NkbDwvdHQ+IHRvICA8dHQgY2xhc3M9InN5c291dCI+LndzaWw8L3R0Pi4KLVRoZSBXU0RMIHNlY3Rpb24gc2hvdWxkIGNvbnRhaW4gdGhlIFVSTHMgdG8gdGhlIHNlbGVjdGVkIFdTREwgZmlsZXMuIFlvdSBjYW4KLWFsc28gZW50ZXIgYWRkaXRpb25hbCBXU0RMIFVSTHMuIEFsdGVybmF0ZWx5LCB5b3UgY2FuIGJyb3dzZSB0byB0aGUgbG9jYXRpb24KLW9mIGEgV1NJTCBmaWxlLCBvciBtYW51YWxseSBlbnRlciB0aGUgbG9jYXRpb24gb2YgdGhlIFdTSUwgYW5kIFdTREwgZmlsZXMKLWluIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayBGaW5pc2guIEEgV1NJTCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU2MiI+PGEgbmFtZT0iZDBlNjIiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+R2VuZXJhdGluZyBhIFdTSUwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gZ2VuZXJhdGUgYSBXU0lMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+T3BlbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+T3BlbiB0aGUgV1NETCBFeHBsb3JlciBieSBjbGlja2luZyB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiIgYWx0PSJpY29uIHVzZWQgdG8gbGF1bmNoIHRoZSB3ZWIgc2VydmljZXMgZXhwbG9yZXIiIC8+PC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5PcGVuIGEgV1NETCBmaWxlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSBXU0RMIGZpbGUgdGhhdCB5b3UgaGF2ZSBvcGVuZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLAotYW5kIGZyb20gdGhlIGF2YWlsYWJsZSBhY3Rpb25zLCBjaG9vc2UgdG8gaW1wb3J0IGEgV1NETCBmaWxlIHRvIHRoZSB3b3JrYmVuY2gKLWJ5IGNsaWNraW5nIHRoaXMgaWNvbjogIDxpbWcgc3JjPSIuLi9pbWFnZXMvbXB0d3NkbGljb24uZ2lmIiBhbHQ9Imljb24gdXNlZCB0byBpbXBvcnQgYSBmaWxlIiAvPjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3Ryb25nPkltcG9ydCBhcyBhIHNlcnZpY2UgcmVmZXJlbmNlIHRvIGEgV1NJTCBkb2N1bWVudDwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+RW50ZXIgYSBuYW1lIGZvciB0aGUgV1NJTCBmaWxlIHRoYXQgeW91IHdhbnQgdG8gZ2VuZXJhdGUsIGFuZCBjbGljawotIDxzdHJvbmc+R288L3N0cm9uZz4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGxvZ2V4cC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGxvZ2V4cC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDBmMGU3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0bG9nZXhwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5PC90aXRsZT4KLTxzaG9ydGRlc2M+SWYgeW91IGhhdmUgcHVibGlzaGVkIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5IHlvdSBjYW4KLWxvZyBpbnRvIHRoZSByZWdpc3RyeSBhbmQgbWFuYWdlIHRoZSBzZXJ2aWNlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+VURESTxpbmRleHRlcm0+bG9nZ2luZyBpbnRvIGEgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIFNlcnZpY2VzIEV4cGxvcmVyPGluZGV4dGVybT5sb2dnaW5nIGludG8gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPlRvIExvZyBpbiB0byB0aGUgcmVnaXN0cnk6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+T25jZSB5b3UgaGF2ZSBzZWxlY3RlZCBhIHJlZ2lzdHJ5LCB5b3UgY2FuIHNjcm9sbCB0byB0aGUgPHVpY29udHJvbD5PdGhlcgotQWN0aW9uczwvdWljb250cm9sPiBzZWN0aW9uIG9mIHRoZSBwYWdlIGFuZCBzZWxlY3QgPHVpY29udHJvbD5Mb2dpbjwvdWljb250cm9sPiwKLW9yIHVzZSB0aGUgbG9naW4gYnV0dG9uIGF0IHRoZSB0b3Agb2YgdGhlIEV4cGxvcmVyOiA8aW1hZ2UgaHJlZj0iLi4vaW1hZ2VzL2xvZ2luaWNvbi5naWYiPgotPGFsdD5zY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9naW4gaWNvbjwvYWx0PjwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgdGhlIFVSTCAoaWYgaXQgaGFzIG5vdCBiZWVuIHByZWZpbGxlZCBmb3IgeW91KSwgdGhlIHVzZXIKLUlELCBhbmQgdGhlIHBhc3N3b3JkIGZvciB0aGUgcmVnaXN0cnkgYW5kIGNsaWNrIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBTdW1tYXJ5IG9mIEJ1c2luZXNzIHBhZ2UgZGlzcGxheXMuIEl0IGxpc3RzIGFsbCB0aGUgYnVzaW5lc3NlcwotYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyeS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5XaGVuIHlvdSBoYXZlIHN1Y2Nlc3NmdWxseSBsb2dnZWQgaW4sIHRoZSBTdGF0dXMgcGFuZSBkaXNwbGF5cwotYSBtZXNzYWdlIGluZGljYXRpbmcgeW91IHdlcmUgc3VjY2Vzc2Z1bC48L3A+PC9yZXN1bHQ+Ci08cG9zdHJlcT5UbyBsb2cgb3V0IG9mIHRoZSByZWdpc3RyeSBjbGljayB0aGUgTG9nb3V0IGJ1dHRvbjogPGltYWdlIGhyZWY9Ii4uL2ltYWdlcy9sb2dvdXRpY29uLmdpZiI+Ci08YWx0PnNjcmVlbiBjYXB0dXJlIG9mIHRoZSBsb2dvdXQgaWNvbjwvYWx0PjwvaW1hZ2U+LjwvcG9zdHJlcT4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA2ZWQzZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJMb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgaGF2ZSBwdWJsaXNoZWQgeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkgeW91IGNhbiBsb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSB5b3UgY2FuIGxvZyBpbnRvIHRoZSByZWdpc3RyeSBhbmQgbWFuYWdlIHRoZSBzZXJ2aWNlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBsb2dnaW5nIGludG8gYSByZWdpc3RyeSwgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBsb2dnaW5nIGludG8gYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgbG9nZ2luZyBpbnRvIGEgcmVnaXN0cnksIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgbG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGxvZ2V4cCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0bG9nZXhwIj48YSBuYW1lPSJ0bG9nZXhwIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvaDE+Ci0KLQotCi08ZGl2PjxwPklmIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSB5b3UgY2FuCi1sb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBMb2cgaW4gdG8gdGhlIHJlZ2lzdHJ5OjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+T25jZSB5b3UgaGF2ZSBzZWxlY3RlZCBhIHJlZ2lzdHJ5LCB5b3UgY2FuIHNjcm9sbCB0byB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T3RoZXIKLUFjdGlvbnM8L3NwYW4+IHNlY3Rpb24gb2YgdGhlIHBhZ2UgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Mb2dpbjwvc3Bhbj4sCi1vciB1c2UgdGhlIGxvZ2luIGJ1dHRvbiBhdCB0aGUgdG9wIG9mIHRoZSBFeHBsb3JlcjogPGltZyBzcmM9Ii4uL2ltYWdlcy9sb2dpbmljb24uZ2lmIiBhbHQ9InNjcmVlbiBjYXB0dXJlIG9mIHRoZSBsb2dpbiBpY29uIiAvPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkVudGVyIHRoZSBVUkwgKGlmIGl0IGhhcyBub3QgYmVlbiBwcmVmaWxsZWQgZm9yIHlvdSksIHRoZSB1c2VyCi1JRCwgYW5kIHRoZSBwYXNzd29yZCBmb3IgdGhlIHJlZ2lzdHJ5IGFuZCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlRoZSBTdW1tYXJ5IG9mIEJ1c2luZXNzIHBhZ2UgZGlzcGxheXMuIEl0IGxpc3RzIGFsbCB0aGUgYnVzaW5lc3NlcwotYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyeS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V2hlbiB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgbG9nZ2VkIGluLCB0aGUgU3RhdHVzIHBhbmUgZGlzcGxheXMKLWEgbWVzc2FnZSBpbmRpY2F0aW5nIHlvdSB3ZXJlIHN1Y2Nlc3NmdWwuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIGxvZyBvdXQgb2YgdGhlIHJlZ2lzdHJ5IGNsaWNrIHRoZSBMb2dvdXQgYnV0dG9uOiA8aW1nIHNyYz0iLi4vaW1hZ2VzL2xvZ291dGljb24uZ2lmIiBhbHQ9InNjcmVlbiBjYXB0dXJlIG9mIHRoZSBsb2dvdXQgaWNvbiIgLz4uPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGFmZGMxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJlbnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHB1YmVudCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC90aXRsZT4KLTxzaG9ydGRlc2M+QSBidXNpbmVzcyBlbnRpdHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQKLWhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLiZuYnNwOyBCZWZvcmUgeW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSwKLXlvdSBtdXN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5wdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmJ1c2luZXNzIGVudGl0aWVzPGluZGV4dGVybT5wdWJsaXNoaW5nIHRvIFVEREk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48eHJlZiBocmVmPSJ0cmVnLmRpdGEiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5Zb3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdHdvIGRpZmZlcmVudCBwdWJsaWNhdGlvbgotZm9ybWF0czogc2ltcGxlIGFuZCBhZHZhbmNlZC48L3A+PGxxPiA8cD4gPHVpY29udHJvbD5TaW1wbGU8L3VpY29udHJvbD4gQWxsb3dzCi15b3UgdG8gZW50ZXIgdGhlIG1pbmltYWwgYW1vdW50IG9mIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcwotZW50aXR5LiZuYnNwOyBBIHNpbXBsZSBwdWJsaXNoIG9ubHkgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IG9ubHkgb25lIG5hbWUgYW5kCi1vbmUgYnVzaW5lc3MgZGVzY3JpcHRpb24uPC9wPjxwPiA8dWljb250cm9sPkFkdmFuY2VkIDwvdWljb250cm9sPiBBbGxvd3MgeW91Ci10byBlbnRlciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgYnVzaW5lc3MgZW50aXR5LiBBbiBhZHZhbmNlZCBwdWJsaXNoCi1hbGxvd3MgeW91IHRvIHNwZWNpZnkgbXVsdGlwbGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucyBmb3IgbXVsdGktbGluZ3VhbCBzdXBwb3J0LjwvcD4gPC9scT48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTc0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb248L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBzZWxlY3QgVURESSBNYWluIGFuZCBzZWxlY3QgdGhlIHJlZ2lzdHJ5Ci10byB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUmbmJzcDtOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoCi15b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxiPlB1Ymxpc2g8L2I+IGljb24gIDxpbWFnZQotYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoICBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL3B1Ymxpc2gyLmdpZiI+PC9pbWFnZT4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgIDxiPlNpbXBsZTwvYj4gcmFkaW8gYnV0dG9uLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBXU0RMIFVSTCwgYnVzaW5lc3MKLW5hbWUsIGFuZCBidXNpbmVzcyBkZXNjcmlwdGlvbiBpbiB0aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+R288L2I+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBXZWIKLVNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLgotVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZgotdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cgZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGUxMTMiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUmbmJzcDsgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPGI+UHVibGlzaCBTZXJ2aWNlPC9iPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCBTZXJ2aWNlIGljb24uIiBocmVmPSIuLi9pbWFnZXMvcHVic2Vydi5naWYiPgotPC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlICA8Yj5BZHZhbmNlZDwvYj4gcmFkaW8gYnV0dG9uLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBhbmQgV1NETCBVUkwgaW4KLXRoZSByZXNwZWN0aXZlIGZpZWxkcy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5BZGQ8L2I+IHRvIGNyZWF0ZSBidXNpbmVzcyBuYW1lcy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5BZGQ8L2I+IHRvIGNyZWF0ZSBidXNpbmVzcyBkZXNjcmlwdGlvbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkFkZDwvdWljb250cm9sPiB0byBjcmVhdGUgYW4gaWRlbnRpZmllci4gRm9yIGV4YW1wbGUsCi1hbiBpZGVudGlmaWVyIGZvciB5b3VyIGJ1c2luZXNzIGVudGl0eSBtYXkgYmUgeW91ciBidXNpbmVzcyBwaG9uZSBudW1iZXIuCi1UaGUga2V5IG5hbWUgd291bGQgYmUgIlBob25lIE51bWJlciIgYW5kIHRoZSBrZXkgdmFsdWUgd291bGQgYmUgeW91ciBidXNpbmVzcwotdGVsZXBob25lIG51bWJlci4gPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBjYXRlZ29yaWVzLgotU2VsZWN0IGEgY2F0ZWdvcnkgdHlwZSBmcm9tIHRoZSBkcm9wIGRvd24gbGlzdC4gQ2xpY2sgIDxiPkJyb3dzZTwvYj4gdG8gb3BlbgotdGhlIENhdGVnb3JpZXMgcGFuZS4gTmF2aWdhdGUgdGhyb3VnaCB0aGUgaGllcmFyY2hpY2FsIHRheG9ub215IGFuZCBzZWxlY3QKLXRoZSBhcHByb3ByaWF0ZSBjbGFzc2lmaWNhdGlvbiBmb3IgeW91ciBidXNpbmVzcyBzZXJ2aWNlLCB0aGVuIGV4aXQgdGhlIENhdGVnb3JpZXMKLXBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+R288L2I+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZAotV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0byB0aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UKLWRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93IGRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aAoteW91ciBXZWIgc2VydmljZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTViYTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBidXNpbmVzcyBlbnRpdHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIHB1Ymxpc2hlZCBhIHNlcnZpY2UuwqAgQmVmb3JlIHlvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UsIHlvdSBtdXN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIHB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlcywgYnVzaW5lc3MgZW50aXRpZXMsIHB1Ymxpc2hpbmcgdG8gVURESSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIHB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlcywgYnVzaW5lc3MgZW50aXRpZXMsIHB1Ymxpc2hpbmcgdG8gVURESSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHB1YmVudCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRwdWJlbnQiPjxhIG5hbWU9InRwdWJlbnQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L2gxPgotCi0KLQotPGRpdj48cD5BIGJ1c2luZXNzIGVudGl0eSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVzaW5lc3MgdGhhdAotaGFzIHB1Ymxpc2hlZCBhIHNlcnZpY2UuwqAgQmVmb3JlIHlvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UsCi15b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0YWRkcmVnLmh0bWwiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0d28gZGlmZmVyZW50IHB1YmxpY2F0aW9uCi1mb3JtYXRzOiBzaW1wbGUgYW5kIGFkdmFuY2VkLjwvcD4KLTxibG9ja3F1b3RlPiA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2ltcGxlPC9zcGFuPiBBbGxvd3MKLXlvdSB0byBlbnRlciB0aGUgbWluaW1hbCBhbW91bnQgb2YgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzCi1lbnRpdHkuwqAgQSBzaW1wbGUgcHVibGlzaCBvbmx5IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBvbmx5IG9uZSBuYW1lIGFuZAotb25lIGJ1c2luZXNzIGRlc2NyaXB0aW9uLjwvcD4KLTxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZHZhbmNlZCA8L3NwYW4+IEFsbG93cyB5b3UKLXRvIGVudGVyIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBidXNpbmVzcyBlbnRpdHkuIEFuIGFkdmFuY2VkIHB1Ymxpc2gKLWFsbG93cyB5b3UgdG8gc3BlY2lmeSBtdWx0aXBsZSBuYW1lcyBhbmQgZGVzY3JpcHRpb25zIGZvciBtdWx0aS1saW5ndWFsIHN1cHBvcnQuPC9wPgotIDwvYmxvY2txdW90ZT4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNzQiPjxhIG5hbWU9ImQwZTc0Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb248L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIHNlbGVjdCBVRERJIE1haW4gYW5kIHNlbGVjdCB0aGUgcmVnaXN0cnkKLXRvIHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZcKgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5IGZvciB3aGljaAoteW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8c3Ryb25nPlB1Ymxpc2g8L3N0cm9uZz4gaWNvbiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9wdWJsaXNoMi5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCAgaWNvbi4iIC8+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlICA8c3Ryb25nPlNpbXBsZTwvc3Ryb25nPiByYWRpbyBidXR0b24uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgcGFzc3dvcmQsIFdTREwgVVJMLCBidXNpbmVzcwotbmFtZSwgYW5kIGJ1c2luZXNzIGRlc2NyaXB0aW9uIGluIHRoZSByZXNwZWN0aXZlIGZpZWxkcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBJQk08c3VwPsKuPC9zdXA+IFdlYgotU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGggeW91ciBwdWJsaXNoZWQgV2ViIHNlcnZpY2UuCi1UaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8gdGhlIFVSTCBvZiB0aGUgV1NETCBzZXJ2aWNlIGRvY3VtZW50IG9mCi10aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdyBkaXNjb3ZlciBhbmQgaW50ZWdyYXRlIHdpdGggeW91ciBXZWIgc2VydmljZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMTMiPjxhIG5hbWU9ImQwZTExMyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHRoZSBhZHZhbmNlZCBvcHRpb248L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlwqAgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHN0cm9uZz5QdWJsaXNoIFNlcnZpY2U8L3N0cm9uZz4gaWNvbgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvcHVic2Vydi5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCBTZXJ2aWNlIGljb24uIiAvPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgIDxzdHJvbmc+QWR2YW5jZWQ8L3N0cm9uZz4gcmFkaW8gYnV0dG9uLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBhbmQgV1NETCBVUkwgaW4KLXRoZSByZXNwZWN0aXZlIGZpZWxkcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgYnVzaW5lc3MgbmFtZXMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5BZGQ8L3N0cm9uZz4gdG8gY3JlYXRlIGJ1c2luZXNzIGRlc2NyaXB0aW9ucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4gdG8gY3JlYXRlIGFuIGlkZW50aWZpZXIuIEZvciBleGFtcGxlLAotYW4gaWRlbnRpZmllciBmb3IgeW91ciBidXNpbmVzcyBlbnRpdHkgbWF5IGJlIHlvdXIgYnVzaW5lc3MgcGhvbmUgbnVtYmVyLgotVGhlIGtleSBuYW1lIHdvdWxkIGJlICJQaG9uZSBOdW1iZXIiIGFuZCB0aGUga2V5IHZhbHVlIHdvdWxkIGJlIHlvdXIgYnVzaW5lc3MKLXRlbGVwaG9uZSBudW1iZXIuIDwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBjYXRlZ29yaWVzLiBFbnRlciB5b3VyIGJ1c2luZXNzIGNhdGVnb3JpZXMuCi1TZWxlY3QgYSBjYXRlZ29yeSB0eXBlIGZyb20gdGhlIGRyb3AgZG93biBsaXN0LiBDbGljayAgPHN0cm9uZz5Ccm93c2U8L3N0cm9uZz4gdG8gb3BlbgotdGhlIENhdGVnb3JpZXMgcGFuZS4gTmF2aWdhdGUgdGhyb3VnaCB0aGUgaGllcmFyY2hpY2FsIHRheG9ub215IGFuZCBzZWxlY3QKLXRoZSBhcHByb3ByaWF0ZSBjbGFzc2lmaWNhdGlvbiBmb3IgeW91ciBidXNpbmVzcyBzZXJ2aWNlLCB0aGVuIGV4aXQgdGhlIENhdGVnb3JpZXMKLXBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkCi1XZWIgc2VydmljZS4gVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZQotZG9jdW1lbnQgb2YgdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cgZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoCi15b3VyIFdlYiBzZXJ2aWNlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjA0MTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHB1Ymxpc2giIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+UHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5UaGUgV2ViIHNlcnZpY2UsIGFsc28ga25vd24gYXMgdGhlIGJ1c2luZXNzIHNlcnZpY2UsIGRlc2NyaWJlcwotYSBXZWIgc2VydmljZSdzIGVuZHBvaW50IGFuZCB3aGVyZSBpdHMgV1NETCBmaWxlIHJlc2lkZXMuIFRoZSBXU0RMIGZpbGUgbGlzdHMKLXRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+VURESTxpbmRleHRlcm0+cHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+cHVibGlzaGluZyB0byBhIFVEREkgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT4gPHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj4uPC9saT4KLTxsaT5DcmVhdGUgYSBXZWIgc2VydmljZS48L2xpPgotPGxpPkRlcGxveSB0aGUgV2ViIHNlcnZpY2UuPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1YmVudC5kaXRhIj5QdWJsaXNoIGEgQnVzaW5lc3MgRW50aXR5PC94cmVmPi48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxyZXN1bHQ+PHA+WW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0d28gZGlmZmVyZW50IHB1YmxpY2F0aW9uCi1mb3JtYXRzOiBzaW1wbGUgYW5kIGFkdmFuY2VkLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZDBlNzQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb248L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gcHVibGlzaCBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8Yj5QdWJsaXNoIFNlcnZpY2U8L2I+IGljb24KLSA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoIFNlcnZpY2UgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9wdWJzZXJ2LmdpZiI+Ci08L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgIDxiPlNpbXBsZTwvYj4gcmFkaW8gYnV0dG9uLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBXU0RMIFVSTCwgYnVzaW5lc3MKLW5hbWUsIGFuZCBidXNpbmVzcyBkZXNjcmlwdGlvbiBpbiB0aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+R288L2I+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+IDxiPkltcG9ydGFudDo8L2I+IEVuc3VyZSB0aGF0IHlvdSBzZWxlY3QgdGhlIHNlcnZpY2UgZG9jdW1lbnQsCi1zaW5jZSB0aGUgc2VydmljZSBlbGVtZW50IGlzIHRoZSBiYXNpcyBmb3IgdGhlIEJ1c2luZXNzIFNlcnZpY2UgdGhhdCB5b3Ugd2lsbAotcHVibGlzaC4gWW91IGNhbm5vdCBwdWJsaXNoIGEgQnVzaW5lc3MgU2VydmljZSB1c2luZyBhIFdTREwgZG9jdW1lbnQgdGhhdAotZG9lcyBub3QgaGF2ZSBzZXJ2aWNlIGVsZW1lbnRzLjwvcD48cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkKLXVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZCBXZWIgc2VydmljZS4gVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvCi10aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQgb2YgdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cKLWRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aCB5b3VyIFdlYiBzZXJ2aWNlLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlMTEzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHVzaW5nIHRoZSBhZHZhbmNlZCBvcHRpb248L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gcHVibGlzaCBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBhZHZhbmNlZCBvcHRpb246PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxiPlB1Ymxpc2ggU2VydmljZTwvYj4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSAgPGI+QWR2YW5jZWQ8L2I+IHJhZGlvIGJ1dHRvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgYW5kIFdTREwgVVJMIGluCi10aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+R2V0PC9iPiBvciA8dWljb250cm9sPkZpbmQ8L3VpY29udHJvbD4gdG8gYXNzb2NpYXRlIHRoZQotc2VydmljZSB3aXRoIGEgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdldDwvYj4gb3IgPHVpY29udHJvbD5GaW5kPC91aWNvbnRyb2w+IHRvIGFzc29jaWF0ZSBhCi1zcGVjaWZpYyBzZXJ2aWNlIGludGVyZmFjZSB3aXRoIHRoZSBzZXJ2aWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkFkZDwvYj4gdG8gY3JlYXRlIGJ1c2luZXNzIHNlcnZpY2UgbmFtZXMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgYnVzaW5lc3Mgc2VydmljZSBkZXNjcmlwdGlvbnMuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5BZGQ8L2I+IHRvIGNyZWF0ZSBjYXRlZ29yaWVzLiBFbnRlciB5b3VyIGJ1c2luZXNzIHNlcnZpY2UKLWNhdGVnb3JpZXMuIFNlbGVjdCBhIGNhdGVnb3J5IHR5cGUgZnJvbSB0aGUgZHJvcCBkb3duIGxpc3QuIENsaWNrICA8Yj5Ccm93c2U8L2I+IHRvCi1vcGVuIHRoZSBDYXRlZ29yaWVzIHBhbmUuJm5ic3A7IE5hdmlnYXRlIHRocm91Z2ggdGhlIGhpZXJhcmNoaWNhbCB0YXhvbm9teQotYW5kIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgY2xhc3NpZmljYXRpb24gZm9yIHlvdXIgYnVzaW5lc3Mgc2VydmljZSwgdGhlbgotZXhpdCB0aGUgQ2F0ZWdvcmllcyBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5JbXBvcnRhbnQ6PC9iPiBFbnN1cmUgdGhhdCB5b3Ugc2VsZWN0IHRoZSBzZXJ2aWNlIGRvY3VtZW50LAotc2luY2UgdGhlIHNlcnZpY2UgZWxlbWVudCBpcyB0aGUgYmFzaXMgZm9yIHRoZSBCdXNpbmVzcyBTZXJ2aWNlIHRoYXQgeW91IHdpbGwKLXB1Ymxpc2guJm5ic3A7IFlvdSBjYW5ub3QgcHVibGlzaCBhIEJ1c2luZXNzIFNlcnZpY2UgdXNpbmcgYSBXU0RMIGRvY3VtZW50Ci10aGF0IGRvZXMgbm90IGhhdmUgc2VydmljZSBlbGVtZW50cy48L3A+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5Ci11cGRhdGVkIHdpdGggeW91ciBwdWJsaXNoZWQgV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0bwotdGhlIFVSTCBvZiB0aGUgV1NETCBzZXJ2aWNlIGRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93Ci1kaXNjb3ZlciBhbmQgaW50ZWdyYXRlIHdpdGggeW91ciBXZWIgc2VydmljZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHVibGlzaC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg2Y2ZiNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHVibGlzaC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2UsIGFsc28ga25vd24gYXMgdGhlIGJ1c2luZXNzIHNlcnZpY2UsIGRlc2NyaWJlcyBhIFdlYiBzZXJ2aWNlJ3MgZW5kcG9pbnQgYW5kIHdoZXJlIGl0cyBXU0RMIGZpbGUgcmVzaWRlcy4gVGhlIFdTREwgZmlsZSBsaXN0cyB0aGUgb3BlcmF0aW9ucyB0aGF0IHNlcnZpY2UgcHJvdmlkZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzIGEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzIHRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBwdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UsIFdlYiBzZXJ2aWNlcywgcHVibGlzaGluZyB0byBhIFVEREkgcmVnaXN0cnkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBwdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UsIFdlYiBzZXJ2aWNlcywgcHVibGlzaGluZyB0byBhIFVEREkgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRwdWJsaXNoIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0cHVibGlzaCI+PGEgbmFtZT0idHB1Ymxpc2giPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+VGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMKLWEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzCi10aGUgb3BlcmF0aW9ucyB0aGF0IHNlcnZpY2UgcHJvdmlkZXMuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT4gPGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+LjwvbGk+Ci0KLTxsaT5DcmVhdGUgYSBXZWIgc2VydmljZS48L2xpPgotCi08bGk+RGVwbG95IHRoZSBXZWIgc2VydmljZS48L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJlbnQuaHRtbCI+UHVibGlzaCBhIEJ1c2luZXNzIEVudGl0eTwvYT4uPC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Zb3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHVzaW5nIHR3byBkaWZmZXJlbnQgcHVibGljYXRpb24KLWZvcm1hdHM6IHNpbXBsZSBhbmQgYWR2YW5jZWQuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU3NCI+PGEgbmFtZT0iZDBlNzQiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb248L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gcHVibGlzaCBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+UHVibGlzaCBTZXJ2aWNlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlICA8c3Ryb25nPlNpbXBsZTwvc3Ryb25nPiByYWRpbyBidXR0b24uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgcGFzc3dvcmQsIFdTREwgVVJMLCBidXNpbmVzcwotbmFtZSwgYW5kIGJ1c2luZXNzIGRlc2NyaXB0aW9uIGluIHRoZSByZXNwZWN0aXZlIGZpZWxkcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gRW5zdXJlIHRoYXQgeW91IHNlbGVjdCB0aGUgc2VydmljZSBkb2N1bWVudCwKLXNpbmNlIHRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgdGhlIGJhc2lzIGZvciB0aGUgQnVzaW5lc3MgU2VydmljZSB0aGF0IHlvdSB3aWxsCi1wdWJsaXNoLiBZb3UgY2Fubm90IHB1Ymxpc2ggYSBCdXNpbmVzcyBTZXJ2aWNlIHVzaW5nIGEgV1NETCBkb2N1bWVudCB0aGF0Ci1kb2VzIG5vdCBoYXZlIHNlcnZpY2UgZWxlbWVudHMuPC9wPgotPHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5Ci11cGRhdGVkIHdpdGggeW91ciBwdWJsaXNoZWQgV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0bwotdGhlIFVSTCBvZiB0aGUgV1NETCBzZXJ2aWNlIGRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93Ci1kaXNjb3ZlciBhbmQgaW50ZWdyYXRlIHdpdGggeW91ciBXZWIgc2VydmljZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMTMiPjxhIG5hbWU9ImQwZTExMyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5QdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+UHVibGlzaCBTZXJ2aWNlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlICA8c3Ryb25nPkFkdmFuY2VkPC9zdHJvbmc+IHJhZGlvIGJ1dHRvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgYW5kIFdTREwgVVJMIGluCi10aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5HZXQ8L3N0cm9uZz4gb3IgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluZDwvc3Bhbj4gdG8gYXNzb2NpYXRlIHRoZQotc2VydmljZSB3aXRoIGEgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R2V0PC9zdHJvbmc+IG9yIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmQ8L3NwYW4+IHRvIGFzc29jaWF0ZSBhCi1zcGVjaWZpYyBzZXJ2aWNlIGludGVyZmFjZSB3aXRoIHRoZSBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBidXNpbmVzcyBzZXJ2aWNlIG5hbWVzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBidXNpbmVzcyBzZXJ2aWNlIGRlc2NyaXB0aW9ucy48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBjYXRlZ29yaWVzLiBFbnRlciB5b3VyIGJ1c2luZXNzIHNlcnZpY2UKLWNhdGVnb3JpZXMuIFNlbGVjdCBhIGNhdGVnb3J5IHR5cGUgZnJvbSB0aGUgZHJvcCBkb3duIGxpc3QuIENsaWNrICA8c3Ryb25nPkJyb3dzZTwvc3Ryb25nPiB0bwotb3BlbiB0aGUgQ2F0ZWdvcmllcyBwYW5lLsKgIE5hdmlnYXRlIHRocm91Z2ggdGhlIGhpZXJhcmNoaWNhbCB0YXhvbm9teQotYW5kIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgY2xhc3NpZmljYXRpb24gZm9yIHlvdXIgYnVzaW5lc3Mgc2VydmljZSwgdGhlbgotZXhpdCB0aGUgQ2F0ZWdvcmllcyBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBFbnN1cmUgdGhhdCB5b3Ugc2VsZWN0IHRoZSBzZXJ2aWNlIGRvY3VtZW50LAotc2luY2UgdGhlIHNlcnZpY2UgZWxlbWVudCBpcyB0aGUgYmFzaXMgZm9yIHRoZSBCdXNpbmVzcyBTZXJ2aWNlIHRoYXQgeW91IHdpbGwKLXB1Ymxpc2guwqAgWW91IGNhbm5vdCBwdWJsaXNoIGEgQnVzaW5lc3MgU2VydmljZSB1c2luZyBhIFdTREwgZG9jdW1lbnQKLXRoYXQgZG9lcyBub3QgaGF2ZSBzZXJ2aWNlIGVsZW1lbnRzLjwvcD4KLTxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseQotdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8KLXRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdwotZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjZhYmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRyZWciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5SZWdpc3RlcmluZyB3aXRoIGEgVURESSBSZWdpc3RyeTwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+SW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJCi1yZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBwcml2YXRlIHJlZ2lzdHJpZXMgd2l0aCB3aGljaCB5b3UgY2FuCi1yZWdpc3Rlci4gU2luY2UgZWFjaCByZWdpc3RyeSBpcyBkaWZmZXJlbnQsIHRoZSByZWdpc3RyeSBwcm92aWRlciB3aWxsIGdpdmUKLXlvdSBpbnN0cnVjdGlvbnMgZm9yIHJlZ2lzdGVyaW5nLjwvcD48cD5UaGUgZm9sbG93aW5nIHJlZ2lzdHJpZXMgYXJlIGF1dG9tYXRpY2FsbHkKLWFkZGVkIHRvIEZhdm9yaXRlczo8L3A+PHVsPgotPGxpPlNBUCBVRERJIFJlZ2lzdHJ5PC9saT4KLTxsaT5TQVAgVURESSBUZXN0IFJlZ2lzdHJ5PC9saT4KLTxsaT5YTWV0aG9kcyBSZWdpc3RyeTwvbGk+Ci08bGk+TlRUIENvbW11bmljYXRpb25zIFJlZ2lzdHJ5PC9saT4KLTwvdWw+PHA+WW91IGNhbiB1c2UgYW55IG9mIHRoZXNlIHJlZ2lzdHJpZXMgYnkgc2VsZWN0aW5nIHRoZSBGYXZvcml0ZXMgaWNvbgotaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLiBBbGwgb2YgdGhlc2UgcmVnaXN0cmllcyBhcmUgYmFzZWQgb24KLXRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IFZlcnNpb24gMi4gVGhlIGRldGFpbHMgcGFnZSBvZiBlYWNoIHJlZ2lzdHJ5IHdpbGwKLWhhdmUgcmVnaXN0cmF0aW9uIGluc3RydWN0aW9ucy48L3A+PHA+VGhlIHB1YmxpYyBwcm9kdWN0aW9uIHJlZ2lzdHJpZXMgYXJlCi1saXN0ZWQgdW5kZXIgRmF2b3JpdGVzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGRvZXMgbm90IHByZWxvYWQgYW55IHJlZ2lzdHJpZXMKLWJ5IGRlZmF1bHQuJm5ic3A7IFlvdSBjYW4gcHJlbG9hZCByZWdpc3RyaWVzIGZyb20gdGhlIGZhdm9yaXRlcyBzZWN0aW9uIG9mCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9yIGJ5IHVzaW5nIHRoZSBVbml0IFRlc3QgVURESSB3aXphcmQuIFlvdSBjYW4gYWxzbwotcHJlbG9hZCBhbmQgY29uZmlndXJlIHByaXZhdGUgcmVnaXN0cmllcyB1c2luZyB0aGUgVW5pdCBUZXN0IFVEREkgd2l6YXJkLgotT24gdGhlIE9wZW4gUmVnaXN0cnkgcGFnZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCB5b3UgY2FuIHNlbGVjdCBmcm9tCi1wdWJsaWMgcmVnaXN0cmllcyBhbmQgcmVnaXN0cmllcyBsaXN0ZWQgaW4geW91ciBmYXZvcml0ZXMgdG8gYXV0b21hdGljYWxseQotZmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gb3BlbiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cmVnLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyN2EwZDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iUmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnksIFdlYiBzZXJ2aWNlcywgcmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnksIFdlYiBzZXJ2aWNlcywgcmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0cmVnIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgUmVnaXN0cnk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRyZWciPjxhIG5hbWU9InRyZWciPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9oMT4KLQotCi0KLQotPGRpdj48cD5JbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkKLXJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBwcml2YXRlIHJlZ2lzdHJpZXMgd2l0aCB3aGljaCB5b3UgY2FuCi1yZWdpc3Rlci4gU2luY2UgZWFjaCByZWdpc3RyeSBpcyBkaWZmZXJlbnQsIHRoZSByZWdpc3RyeSBwcm92aWRlciB3aWxsIGdpdmUKLXlvdSBpbnN0cnVjdGlvbnMgZm9yIHJlZ2lzdGVyaW5nLjwvcD4KLTxwPlRoZSBmb2xsb3dpbmcgcmVnaXN0cmllcyBhcmUgYXV0b21hdGljYWxseQotYWRkZWQgdG8gRmF2b3JpdGVzOjwvcD4KLTx1bD4KLTxsaT5TQVAgVURESSBSZWdpc3RyeTwvbGk+Ci0KLTxsaT5TQVAgVURESSBUZXN0IFJlZ2lzdHJ5PC9saT4KLQotPGxpPlhNZXRob2RzIFJlZ2lzdHJ5PC9saT4KLQotPGxpPk5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeTwvbGk+Ci0KLTwvdWw+Ci08cD5Zb3UgY2FuIHVzZSBhbnkgb2YgdGhlc2UgcmVnaXN0cmllcyBieSBzZWxlY3RpbmcgdGhlIEZhdm9yaXRlcyBpY29uCi1pbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvb2xiYXIuIEFsbCBvZiB0aGVzZSByZWdpc3RyaWVzIGFyZSBiYXNlZCBvbgotdGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgVmVyc2lvbiAyLiBUaGUgZGV0YWlscyBwYWdlIG9mIGVhY2ggcmVnaXN0cnkgd2lsbAotaGF2ZSByZWdpc3RyYXRpb24gaW5zdHJ1Y3Rpb25zLjwvcD4KLTxwPlRoZSBwdWJsaWMgcHJvZHVjdGlvbiByZWdpc3RyaWVzIGFyZQotbGlzdGVkIHVuZGVyIEZhdm9yaXRlcy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBkb2VzIG5vdCBwcmVsb2FkIGFueSByZWdpc3RyaWVzCi1ieSBkZWZhdWx0LsKgIFlvdSBjYW4gcHJlbG9hZCByZWdpc3RyaWVzIGZyb20gdGhlIGZhdm9yaXRlcyBzZWN0aW9uIG9mCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9yIGJ5IHVzaW5nIHRoZSBVbml0IFRlc3QgVURESSB3aXphcmQuIFlvdSBjYW4gYWxzbwotcHJlbG9hZCBhbmQgY29uZmlndXJlIHByaXZhdGUgcmVnaXN0cmllcyB1c2luZyB0aGUgVW5pdCBUZXN0IFVEREkgd2l6YXJkLgotT24gdGhlIE9wZW4gUmVnaXN0cnkgcGFnZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCB5b3UgY2FuIHNlbGVjdCBmcm9tCi1wdWJsaWMgcmVnaXN0cmllcyBhbmQgcmVnaXN0cmllcyBsaXN0ZWQgaW4geW91ciBmYXZvcml0ZXMgdG8gYXV0b21hdGljYWxseQotZmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gb3BlbiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90c3RydGV4cC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkYzEwNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90c3RydGV4cC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0c3RydGV4cCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5UaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLWluIHNldmVyYWwgd2F5cy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIFNlcnZpY2VzIEV4cGxvcmVyPGluZGV4dGVybT5sYXVuY2hpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHVsPgotPGxpPkZyb20gdGhlIG1haW4gdG9vbGJhciBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZS48L2xpPgotPGxpPkJ5IHVzaW5nIHRoZSBXZWIgc2VydmljZSB3aXphcmRzLjwvbGk+Ci08bGk+QnkgdXNpbmcgdGhlIEltcG9ydCB3aXphcmQuPC9saT4KLTxsaT5CeSB1c2luZyB0aGUgRXhwb3J0IHdpemFyZC48L2xpPgotPGxpPkZyb20gdGhlIFJ1biBtZW51IGluIHRoZSBKMkVFIHBlcnNwZWN0aXZlLjwvbGk+Ci08bGk+RnJvbSBhIFdTREwgZmlsZS48L2xpPgotPC91bD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTM4IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gdGhlIG1haW4gdG9vbGJhcjwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIHRvb2xiYXIsIGVuc3VyZQotdGhhdCB5b3UgYXJlIGluIHRoZSBKMkVFIHBlcnNwZWN0aXZlIGFuZCBjbGljayB0aGUgIDxiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlcjwvYj4gaWNvbiAgPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgTGF1bmNoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpY29uLiIKLWhyZWY9Ii4uL2ltYWdlcy91ZGRpdmlldy5naWYiPjwvaW1hZ2U+LiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zIHdpdGhvdXQKLWFueSByZWdpc3RyaWVzIGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuIFlvdSBjYW4gbm93ICA8eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPmFkZAotYSByZWdpc3RyeTwveHJlZj4gdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGU1MCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIFdpemFyZDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBXZWIgU2VydmljZXMgV2l6YXJkLAotc2VsZWN0IHRoZSAgPGI+VGVzdCB0aGUgV2ViIFNlcnZpY2U8L2I+IGNoZWNrIGJveCBpbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUKLVdlYiBTZXJ2aWNlcyBXaXphcmQuIFByb2NlZWQgd2l0aCB0aGUgd2l6YXJkIGFuZCB0aGVuIGluIHRoZSBXZWIgU2VydmljZSBUZXN0Ci1QYWdlLCBjaG9vc2UgIDxiPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYj4gYXMgdGhlIHRlc3QgZmFjaWxpdHkgYW5kIGNsaWNrCi1vbiB0aGUgIDxiPkxhdW5jaDwvYj4gYnV0dG9uLiBJZiB5b3UgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcKLXRoaXMgbWV0aG9kLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlbG9hZCB0aGUgV1NETCAoYW5kIGl0cyBjaGlsZCBub2RlcykKLWluIHRoZSBXU0RMIHBhZ2UuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNjMiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEltcG9ydCB3aXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEltcG9ydCB3aXphcmQsIGRvCi10aGUgZm9sbG93aW5nOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkZyb20gdGhlIG1haW4gbWVudSwgY2xpY2sgIDxiPkZpbGUgPiBJbXBvcnQ8L2I+LiBUaGUgSW1wb3J0IHdpemFyZAotb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgIDxiPldlYiBTZXJ2aWNlPC9iPiBhbmQgY2xpY2sgIDxiPk5leHQ8L2I+LiBUaGUgV2ViIHNlcnZpY2UKLWltcG9ydCB3aXphcmQgb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+RmluaXNoPC9iPi48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLiBJZiB5b3Ugc2VsZWN0ZWQgYSByZWdpc3RyeSBvbgotdGhlIFdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBzZXJ2aWNlIEltcG9ydCB3aXphcmQsIHlvdSB3aWxsCi1zZWUgdGhlIHJlZ2lzdHJ5IGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGU5NSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgRXhwb3J0IHdpemFyZDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgRXhwb3J0IHdpemFyZCwgZG8KLXRoZSBmb2xsb3dpbmc6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgbWFpbiBtZW51LCBjbGljayAgPGI+RmlsZSA+IEV4cG9ydDwvYj4uIFRoZSBFeHBvcnQgd2l6YXJkCi1vcGVucy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCAgPGI+V2ViIFNlcnZpY2U8L2I+IGFuZCBjbGljayAgPGI+TmV4dDwvYj4uIFRoZSBXZWIgU2VydmljZQotRXhwb3J0IHdpemFyZCBvcGVucy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5GaW5pc2g8L2I+LiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuJm5ic3A7IElmIHlvdSBzZWxlY3RlZCBhIHJlZ2lzdHJ5Ci1vbiB0aGUgV2ViIFNlcnZpY2UgUHVibGljYXRpb24gcGFnZSBvZiB0aGUgV2ViIFNlcnZpY2UgRXhwb3J0IHdpemFyZCwgeW91Ci13aWxsIHNlZSB0aGUgcmVnaXN0cnkgZGlzcGxheWVkIGluIHRoZSBOYXZpZ2F0b3IgcGFuZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTEyNyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBSdW4gbWVudTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIG1lbnUsIGVuc3VyZQotdGhhdCB5b3UgYXJlIGluIHRoZSBKMkVFIHBlcnNwZWN0aXZlIGFuZCBjbGljayAgPGI+UnVuID4gTGF1bmNoIHRoZSBXZWIgU2VydmljZXMKLUV4cGxvcmVyPC9iPi4gVGhlIEltcG9ydCB3aXphcmQgb3BlbnMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuJm5ic3A7Ci1UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zIHdpdGhvdXQgYW55IHJlZ2lzdHJpZXMgZGlzcGxheWVkIGluIHRoZSBOYXZpZ2F0b3IKLXBhbmUuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlMTM0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gYSBXU0RMIGZpbGU8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSBhIFdTREwgZmlsZSwgc2VsZWN0IHRoZQotV1NETCBmaWxlIGFuZCByaWdodC1jbGljayBhbmQgY2hvb3NlICA8Yj5XZWIgU2VydmljZXMgPiBUZXN0IHdpdGggV2ViIFNlcnZpY2VzCi1FeHBsb3JlcjwvYj4gb3IgIDxiPlB1Ymxpc2ggV1NETCBmaWxlPC9iPi4mbmJzcDsgVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcgotb3BlbnMuIFRoZSAgPGI+VGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYj4gYWN0aW9uIHdpbGwgcHJlbG9hZCB0aGUKLVdTREwgaW4gdGhlIFdTREwgcGFnZS48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYjAyMzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBFeHBsb3JlciwgbGF1bmNoaW5nIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBsYXVuY2hpbmciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRzdHJ0ZXhwIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRzdHJ0ZXhwIj48YSBuYW1lPSJ0c3RydGV4cCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2gxPgotCi0KLQotCi08ZGl2PjxwPlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotaW4gc2V2ZXJhbCB3YXlzLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHVsPgotPGxpPkZyb20gdGhlIG1haW4gdG9vbGJhciBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZS48L2xpPgotCi08bGk+QnkgdXNpbmcgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZHMuPC9saT4KLQotPGxpPkJ5IHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLjwvbGk+Ci0KLTxsaT5CeSB1c2luZyB0aGUgRXhwb3J0IHdpemFyZC48L2xpPgotCi08bGk+RnJvbSB0aGUgUnVuIG1lbnUgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUuPC9saT4KLQotPGxpPkZyb20gYSBXU0RMIGZpbGUuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMzgiPjxhIG5hbWU9ImQwZTM4Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gdGhlIG1haW4gdG9vbGJhcjwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIHRvb2xiYXIsIGVuc3VyZQotdGhhdCB5b3UgYXJlIGluIHRoZSBKMkVFIHBlcnNwZWN0aXZlIGFuZCBjbGljayB0aGUgIDxzdHJvbmc+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMKLUV4cGxvcmVyPC9zdHJvbmc+IGljb24gIDxpbWcgc3JjPSIuLi9pbWFnZXMvdWRkaXZpZXcuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIExhdW5jaCBXZWIgU2VydmljZXMgRXhwbG9yZXIgaWNvbi4iIC8+LiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zIHdpdGhvdXQKLWFueSByZWdpc3RyaWVzIGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuIFlvdSBjYW4gbm93ICA8YSBocmVmPSJ0YWRkcmVnLmh0bWwiPmFkZCBhIHJlZ2lzdHJ5PC9hPiB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTUwIj48YSBuYW1lPSJkMGU1MCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIFdpemFyZDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBXZWIgU2VydmljZXMgV2l6YXJkLAotc2VsZWN0IHRoZSAgPHN0cm9uZz5UZXN0IHRoZSBXZWIgU2VydmljZTwvc3Ryb25nPiBjaGVjayBib3ggaW4gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlCi1XZWIgU2VydmljZXMgV2l6YXJkLiBQcm9jZWVkIHdpdGggdGhlIHdpemFyZCBhbmQgdGhlbiBpbiB0aGUgV2ViIFNlcnZpY2UgVGVzdAotUGFnZSwgY2hvb3NlICA8c3Ryb25nPldlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc3Ryb25nPiBhcyB0aGUgdGVzdCBmYWNpbGl0eSBhbmQgY2xpY2sKLW9uIHRoZSAgPHN0cm9uZz5MYXVuY2g8L3N0cm9uZz4gYnV0dG9uLiBJZiB5b3UgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcKLXRoaXMgbWV0aG9kLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlbG9hZCB0aGUgV1NETCAoYW5kIGl0cyBjaGlsZCBub2RlcykKLWluIHRoZSBXU0RMIHBhZ2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNjMiPjxhIG5hbWU9ImQwZTYzIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLCBkbwotdGhlIGZvbGxvd2luZzo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkZyb20gdGhlIG1haW4gbWVudSwgY2xpY2sgIDxzdHJvbmc+RmlsZSAmZ3Q7IEltcG9ydDwvc3Ryb25nPi4gVGhlIEltcG9ydCB3aXphcmQKLW9wZW5zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3Ryb25nPldlYiBTZXJ2aWNlPC9zdHJvbmc+IGFuZCBjbGljayAgPHN0cm9uZz5OZXh0PC9zdHJvbmc+LiBUaGUgV2ViIHNlcnZpY2UKLWltcG9ydCB3aXphcmQgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5GaW5pc2g8L3N0cm9uZz4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuIElmIHlvdSBzZWxlY3RlZCBhIHJlZ2lzdHJ5IG9uCi10aGUgV2ViIFNlcnZpY2UgUHVibGljYXRpb24gcGFnZSBvZiB0aGUgV2ViIHNlcnZpY2UgSW1wb3J0IHdpemFyZCwgeW91IHdpbGwKLXNlZSB0aGUgcmVnaXN0cnkgZGlzcGxheWVkIGluIHRoZSBOYXZpZ2F0b3IgcGFuZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU5NSI+PGEgbmFtZT0iZDBlOTUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQ8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQsIGRvCi10aGUgZm9sbG93aW5nOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+RnJvbSB0aGUgbWFpbiBtZW51LCBjbGljayAgPHN0cm9uZz5GaWxlICZndDsgRXhwb3J0PC9zdHJvbmc+LiBUaGUgRXhwb3J0IHdpemFyZAotb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgIDxzdHJvbmc+V2ViIFNlcnZpY2U8L3N0cm9uZz4gYW5kIGNsaWNrICA8c3Ryb25nPk5leHQ8L3N0cm9uZz4uIFRoZSBXZWIgU2VydmljZQotRXhwb3J0IHdpemFyZCBvcGVucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkZpbmlzaDwvc3Ryb25nPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy7CoCBJZiB5b3Ugc2VsZWN0ZWQgYSByZWdpc3RyeQotb24gdGhlIFdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlIEV4cG9ydCB3aXphcmQsIHlvdQotd2lsbCBzZWUgdGhlIHJlZ2lzdHJ5IGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTI3Ij48YSBuYW1lPSJkMGUxMjciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgUnVuIG1lbnU8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiBtZW51LCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgIDxzdHJvbmc+UnVuICZndDsgTGF1bmNoIHRoZSBXZWIgU2VydmljZXMKLUV4cGxvcmVyPC9zdHJvbmc+LiBUaGUgSW1wb3J0IHdpemFyZCBvcGVucy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy7CoAotVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0IGFueSByZWdpc3RyaWVzIGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yCi1wYW5lLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTEzNCI+PGEgbmFtZT0iZDBlMTM0Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gYSBXU0RMIGZpbGU8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSBhIFdTREwgZmlsZSwgc2VsZWN0IHRoZQotV1NETCBmaWxlIGFuZCByaWdodC1jbGljayBhbmQgY2hvb3NlICA8c3Ryb25nPldlYiBTZXJ2aWNlcyAmZ3Q7IFRlc3Qgd2l0aCBXZWIgU2VydmljZXMKLUV4cGxvcmVyPC9zdHJvbmc+IG9yICA8c3Ryb25nPlB1Ymxpc2ggV1NETCBmaWxlPC9zdHJvbmc+LsKgIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLW9wZW5zLiBUaGUgIDxzdHJvbmc+VGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc3Ryb25nPiBhY3Rpb24gd2lsbCBwcmVsb2FkIHRoZQotV1NETCBpbiB0aGUgV1NETCBwYWdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI1MDMxYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHRlc3R3c2RsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlcjwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5XU0RMIGRvY3VtZW50cyBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4cG9zZSB0aGVpciBhcHBsaWNhdGlvbnMgYXMKLW5ldHdvcmstYWNjZXNzaWJsZSBzZXJ2aWNlcyBvbiB0aGUgSW50ZXJuZXQuIFRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIKLWFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zCi1vciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MgeW91Ci10byBleHBsb3JlLCBpbXBvcnQsIGFuZCB0ZXN0IFdTREwgZG9jdW1lbnRzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT50ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnRlc3Rpbmcgd2l0aCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczogVG8gdXNlIHRoZSBXU0RMIEV4cGxvcmVyOjx1bD4KLTxsaT5Zb3UgbXVzdCBoYXZlIGEgdmFsaWQgVVJMIGZvciBhIFdTREwgZG9jdW1lbnQuPC9saT4KLTxsaT5Zb3UgbXVzdCBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjogPHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L3VsPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+VGhlIFdTREwgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBleHBsb3JlLCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGV4cGxvcmluZyBXU0RMIGRvY3VtZW50cyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciwKLXJlZmVyIHRvIDx4cmVmIGhyZWY9InR3c2RsZXhwLmRpdGEiPlVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC94cmVmPiAuPC9wPjxwPlRvCi10ZXN0IGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+VG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvY21kPgotPHN1YnN0ZXBzPgotPHN1YnN0ZXA+PGNtZD5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBzd2l0Y2ggdG8gdGhlIFdTREwgRXhwbG9yZXIgYnkKLWNsaWNraW5nIHRoZSBpY29uIGluIHRoZSB1cHBlciByaWdodC1oYW5kIGNvcm5lciAgPGltYWdlIGFsdD0iSWNvbiB0byBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIiCi1ocmVmPSIuLi9pbWFnZXMvd3NkbGljb24uZ2lmIj48L2ltYWdlPi4gPC9jbWQ+PC9zdWJzdGVwPgotPC9zdWJzdGVwcz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IFdTREwgTWFpbiBpbiB0aGUgTmF2aWdhdG9yIHBhbmUsIGVudGVyIG9yIGJyb3dzZSB0byBhbiBleGlzdGluZwotV1NETCBVUkwgaW4gdGhlIHJpZ2h0LWhhbmQgcGFuZSwgYW5kIGNsaWNrICA8Yj5HbzwvYj4uIEZvciB0aGlzIGV4YW1wbGUgdGhlCi1XU0RMIGJlaW5nIHVzZWQgaXMgYSBXZWIgU2VydmljZSB3aGljaCBjb252ZXJ0cyB0ZW1wZXJhdHVyZSBmcm9tIENlbHNpdXMgdG8KLUZhaHJlbmhlaXQgb3IgRmFocmVuaGVpdCB0byBDZWxzaXVzLiAgIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHRoZSBXU0RMIE1haW4gcGFuZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGx0ZW1wLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gIFRoZSBmb2xsb3dpbmcgbm9kZXMKLXdpbGwgYmUgYWRkZWQgdG8gdGhlIFdTREwgdHJlZTogPC9jbWQ+PGluZm8+PHVsPgotPGxpPlRoZSBXU0RMIG5vZGU6ICA8aW1hZ2UgYWx0PSJXU0RMIG5vZGUgaWNvbiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxub2RlLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08bGk+VGhlIHNlcnZpY2Ugbm9kZSAod2hpY2ggcmVwcmVzZW50cyBhIHNlcnZpY2UgZWxlbWVudCB3aXRoaW4gdGhlIFdTREwgZmlsZSk6Ci0gPGltYWdlIGFsdD0iU2VydmljZSBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9zZXJ2bm9kZS5naWYiPjwvaW1hZ2U+PC9saT4KLTxsaT5UaGUgYmluZGluZyBub2RlOiAgPGltYWdlIGFsdD0iQmluZGluZyBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9iaW5kbm9kZS5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPlRoZSBvcGVyYXRpb24gbm9kZTogIDxpbWFnZSBhbHQ9Ik9wZXJhdGlvbiBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9vcG5vZGUuZ2lmIj4KLTwvaW1hZ2U+PC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFdTREwgQmluZGluZyBEZXRhaWxzIHBhbmUsIGNsaWNrIHRoZSBvcGVyYXRpb24gKGluIHRoaXMKLWV4YW1wbGUgdGhlICA8c3lzdGVtb3V0cHV0PkN0b0Y8L3N5c3RlbW91dHB1dD4gb3BlcmF0aW9uKSB0byBkaXNwbGF5OiA8L2NtZD4KLTxpbmZvPjx1bD4KLTxsaT5BIGRyb3AtZG93biBsaXN0IHdpdGggdGhlIGVuZHBvaW50cyBhdmFpbGFibGUgZm9yIHRoaXMgb3BlcmF0aW9uPC9saT4KLTxsaT5GaWVsZHMgZm9yIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMgb2YgdGhpcyBvcGVyYXRpb24gKGluIHRoaXMgZXhhbXBsZSB0aGUKLSA8c3lzdGVtb3V0cHV0PnRlbXA8L3N5c3RlbW91dHB1dD4gcGFyYW1ldGVyKSBhbmQgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24KLXRoZSBwYXJhbWV0ZXIgaXMgbG9va2luZyBmb3IgKGluIHRoaXMgZXhhbXBsZSAgPHN5c3RlbW91dHB1dD50ZW1wPC9zeXN0ZW1vdXRwdXQ+IGlzCi1yZXF1ZXN0aW5nIGFuIGludGVnZXIpLjxpbWFnZSBhbHQ9Ikludm9rZSBhIFdTREwgT3BlcmF0aW9uIHBhbmUgb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIKLWhyZWY9Ii4uL2ltYWdlcy93c2Rsb3AuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPiAgVGhlIEZvcm0gdmlldyBhbGxvd3MKLXlvdSB0byBlbnRlciB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIFdlYiBzZXJ2aWNlIG9wZXJhdGlvbiBjYWxsLiBQYXJhbWV0ZXJzCi1uYW1lcyBhcmUgZGlzcGxheWVkIGFzIGxpbmtzIHdob3NlIGFjdGlvbiBpcyB0byBkaXNwbGF5IGEgZGlhbG9nIGRlc2NyaWJpbmcKLWVtYmVkZGVkIFhNTCBTY2hlbWEgRGVmaW5pdGlvbiBMYW5ndWFnZSAoWFNEKSBpbmZvcm1hdGlvbi4gTW9yZSBpbmZvcm1hdGlvbgotYWJvdXQgWFNEIGNhbiBiZSBmb3VuZCBoZXJlOiAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3hzZC8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcveHNkLzwveHJlZj4gCi0gPGltYWdlIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgdGhlIFhTRCBJbmZvcm1hdGlvbiBEaWFsb2ciIGhyZWY9Ii4uL2ltYWdlcy9zY2VuYXJpbzcuZ2lmIgotcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gJm5ic3A7PC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgeW91ciBpbnRlZ2VyIGFuZCBjbGljayAgPGI+R288L2I+LiBUaGUgcmVzdWx0IGlzIHJldHVybmVkCi1pbiB0aGUgU3RhdHVzIHBhbmUuICAgPGltYWdlIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgYW4gaW52b2tlZCBXU0RMIG9wZXJhdGlvbiBzaG93aW5nIHRoZSByZXN1bHQgaW4gdGhlIFN0YXR1cyBwYW5lIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxvcHJldC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICZuYnNwOzwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IGFyZSB1c2luZyBTT0FQIGFzIHlvdXIgYmluZGluZyBtZXRob2QsIGNsaWNraW5nIFNvdXJjZSBvcgotRm9ybSBpbiB0aGUgdXBwZXIgcmlnaHQtaGFuZCBjb3JuZXIgd2lsbCB0b2dnbGUgdGhlIGRpc3BsYXkgYmV0d2VlbiB0aGUgRm9ybQotdmlldyAoc2hvd24gYWJvdmUpIGFuZCB0aGUgU291cmNlIHZpZXcsIHdoaWNoIGRpc3BsYXlzIHRoZSBTT0FQIG1lc3NhZ2UgaW4KLXRoZSBYTUwgZm9ybWF0LiBZb3UgY2FuIGFsc28gZW50ZXIgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgaW4gdGhlIGZvcm0sIG9ubHkKLWluIFhNTCBmb3JtYXQgKHRoaXMgaXMgc3VnZ2VzdGVkIGZvciBhZHZhbmNlZCB1c2VycyBvbmx5KS4gVGhlIEV4cGxvcmVyIGRvZXMKLXZhbGlkYXRlIHRoZSBYTUwgaWYgeW91IG1vZGlmeSBpdCwgYnV0IG5vdCB0aGUgcGFyYW1ldGVyIHZhbHVlcyB5b3UgZW50ZXIuCi0gPGltYWdlIGFsdD0iU291cmNlIHZpZXcgb2YgdGhlIEludm9rZSBhIFdTREwgT3BlcmF0aW9uIHBhbmUuIiBocmVmPSIuLi9pbWFnZXMvd3NkbG9wcmV0eC5naWYiCi1wbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IGFyZSB1c2luZyBTT0FQIGFzIHlvdXIgYmluZGluZyB0eXBlLCB5b3Ugd2lsbCBhbHNvIGhhdmUKLXRoZSBvcHRpb24gb2YgdG9nZ2xpbmcgdGhlIFN0YXR1cyBwYW5lIGJldHdlZW4gdGhlIFNvdXJjZSBhbmQgRm9ybSB2aWV3cy4KLVRoZSBTb3VyY2UgdmlldyBzaG93cyB0aGUgU09BUCByZXF1ZXN0IGFuZCByZXNwb25zZSBlbnZlbG9wZXMsIGluY2x1ZGluZyB0aGUKLXBhcmFtZXRlcnMgeW91IGhhdmUgZW50ZXJlZCB0byB0ZXN0IHRoZSBzZXJ2aWNlIGFuZCB0aGUgcmV0dXJuZWQgdmFsdWUuICAgPGltYWdlCi1hbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHRoZSBzb3VyY2UgdmlldyBvZiB0aGUgU09BUCByZXF1ZXN0IGFuZCByZXNwb25zZSBlbnZlbG9wZXMiCi1ocmVmPSIuLi9pbWFnZXMvd3NkbHN0YXR4LmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MjFiOGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDYiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldTREwgZG9jdW1lbnRzIGFsbG93IGRldmVsb3BlcnMgdG8gZXhwb3NlIHRoZWlyIGFwcGxpY2F0aW9ucyBhcyBuZXR3b3JrLWFjY2Vzc2libGUgc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgaW1wb3J0LCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV1NETCBkb2N1bWVudHMgYWxsb3cgZGV2ZWxvcGVycyB0byBleHBvc2UgdGhlaXIgYXBwbGljYXRpb25zIGFzIG5ldHdvcmstYWNjZXNzaWJsZSBzZXJ2aWNlcyBvbiB0aGUgSW50ZXJuZXQuIFRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBleHBsb3JlLCBpbXBvcnQsIGFuZCB0ZXN0IFdTREwgZG9jdW1lbnRzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIHRlc3Rpbmcgd2l0aCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCB0ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0dGVzdHdzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Vc2luZyB0aGUgV1NETCBFeHBsb3JlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHRlc3R3c2RsIj48YSBuYW1lPSJ0dGVzdHdzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlcjwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+V1NETCBkb2N1bWVudHMgYWxsb3cgZGV2ZWxvcGVycyB0byBleHBvc2UgdGhlaXIgYXBwbGljYXRpb25zIGFzCi1uZXR3b3JrLWFjY2Vzc2libGUgc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyCi1hcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucwotb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzIHlvdQotdG8gZXhwbG9yZSwgaW1wb3J0LCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6IFRvIHVzZSB0aGUgV1NETCBFeHBsb3Jlcjo8dWw+Ci08bGk+WW91IG11c3QgaGF2ZSBhIHZhbGlkIFVSTCBmb3IgYSBXU0RMIGRvY3VtZW50LjwvbGk+Ci0KLTxsaT5Zb3UgbXVzdCBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjogPGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgV1NETCBFeHBsb3JlciBhbGxvd3MgeW91IHRvIGV4cGxvcmUsIGFuZCB0ZXN0IFdTREwgZG9jdW1lbnRzLgotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZXhwbG9yaW5nIFdTREwgZG9jdW1lbnRzIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyLAotcmVmZXIgdG8gPGEgaHJlZj0idHdzZGxleHAuaHRtbCI+VXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2E+IC48L3A+Ci08cD5UbwotdGVzdCBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlciwgc3dpdGNoIHRvIHRoZSBXU0RMIEV4cGxvcmVyIGJ5Ci1jbGlja2luZyB0aGUgaWNvbiBpbiB0aGUgdXBwZXIgcmlnaHQtaGFuZCBjb3JuZXIgIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGljb24uZ2lmIiBhbHQ9Ikljb24gdG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyIiAvPi4gPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IFdTREwgTWFpbiBpbiB0aGUgTmF2aWdhdG9yIHBhbmUsIGVudGVyIG9yIGJyb3dzZSB0byBhbiBleGlzdGluZwotV1NETCBVUkwgaW4gdGhlIHJpZ2h0LWhhbmQgcGFuZSwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBGb3IgdGhpcyBleGFtcGxlIHRoZQotV1NETCBiZWluZyB1c2VkIGlzIGEgV2ViIFNlcnZpY2Ugd2hpY2ggY29udmVydHMgdGVtcGVyYXR1cmUgZnJvbSBDZWxzaXVzIHRvCi1GYWhyZW5oZWl0IG9yIEZhaHJlbmhlaXQgdG8gQ2Vsc2l1cy4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGx0ZW1wLmdpZiIgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgV1NETCBNYWluIHBhbmUgb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgLz48YnIgLz4gIFRoZSBmb2xsb3dpbmcgbm9kZXMKLXdpbGwgYmUgYWRkZWQgdG8gdGhlIFdTREwgdHJlZTogPC9zcGFuPiA8dWw+Ci08bGk+VGhlIFdTREwgbm9kZTogIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbG5vZGUuZ2lmIiBhbHQ9IldTREwgbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTxsaT5UaGUgc2VydmljZSBub2RlICh3aGljaCByZXByZXNlbnRzIGEgc2VydmljZSBlbGVtZW50IHdpdGhpbiB0aGUgV1NETCBmaWxlKToKLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3NlcnZub2RlLmdpZiIgYWx0PSJTZXJ2aWNlIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIGJpbmRpbmcgbm9kZTogIDxpbWcgc3JjPSIuLi9pbWFnZXMvYmluZG5vZGUuZ2lmIiBhbHQ9IkJpbmRpbmcgbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTxsaT5UaGUgb3BlcmF0aW9uIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL29wbm9kZS5naWYiIGFsdD0iT3BlcmF0aW9uIG5vZGUgaWNvbiIgLz48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgV1NETCBCaW5kaW5nIERldGFpbHMgcGFuZSwgY2xpY2sgdGhlIG9wZXJhdGlvbiAoaW4gdGhpcwotZXhhbXBsZSB0aGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5DdG9GPC90dD4gb3BlcmF0aW9uKSB0byBkaXNwbGF5OiA8L3NwYW4+Ci0gPHVsPgotPGxpPkEgZHJvcC1kb3duIGxpc3Qgd2l0aCB0aGUgZW5kcG9pbnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBvcGVyYXRpb248L2xpPgotCi08bGk+RmllbGRzIGZvciBlYWNoIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgb3BlcmF0aW9uIChpbiB0aGlzIGV4YW1wbGUgdGhlCi0gPHR0IGNsYXNzPSJzeXNvdXQiPnRlbXA8L3R0PiBwYXJhbWV0ZXIpIGFuZCB0aGUgdHlwZSBvZiBpbmZvcm1hdGlvbgotdGhlIHBhcmFtZXRlciBpcyBsb29raW5nIGZvciAoaW4gdGhpcyBleGFtcGxlICA8dHQgY2xhc3M9InN5c291dCI+dGVtcDwvdHQ+IGlzCi1yZXF1ZXN0aW5nIGFuIGludGVnZXIpLjxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbG9wLmdpZiIgYWx0PSJJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+PGJyIC8+ICBUaGUgRm9ybSB2aWV3IGFsbG93cwoteW91IHRvIGVudGVyIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgV2ViIHNlcnZpY2Ugb3BlcmF0aW9uIGNhbGwuIFBhcmFtZXRlcnMKLW5hbWVzIGFyZSBkaXNwbGF5ZWQgYXMgbGlua3Mgd2hvc2UgYWN0aW9uIGlzIHRvIGRpc3BsYXkgYSBkaWFsb2cgZGVzY3JpYmluZwotZW1iZWRkZWQgWE1MIFNjaGVtYSBEZWZpbml0aW9uIExhbmd1YWdlIChYU0QpIGluZm9ybWF0aW9uLiBNb3JlIGluZm9ybWF0aW9uCi1hYm91dCBYU0QgY2FuIGJlIGZvdW5kIGhlcmU6ICA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3hzZC8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcveHNkLzwvYT4gCi0gPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy9zY2VuYXJpbzcuZ2lmIiBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHRoZSBYU0QgSW5mb3JtYXRpb24gRGlhbG9nIiAvPjxiciAvPiDCoDwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkVudGVyIHlvdXIgaW50ZWdlciBhbmQgY2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4uIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQKLWluIHRoZSBTdGF0dXMgcGFuZS4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxvcHJldC5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgYW4gaW52b2tlZCBXU0RMIG9wZXJhdGlvbiBzaG93aW5nIHRoZSByZXN1bHQgaW4gdGhlIFN0YXR1cyBwYW5lIiAvPjxiciAvPiDCoDwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPklmIHlvdSBhcmUgdXNpbmcgU09BUCBhcyB5b3VyIGJpbmRpbmcgbWV0aG9kLCBjbGlja2luZyBTb3VyY2Ugb3IKLUZvcm0gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQgY29ybmVyIHdpbGwgdG9nZ2xlIHRoZSBkaXNwbGF5IGJldHdlZW4gdGhlIEZvcm0KLXZpZXcgKHNob3duIGFib3ZlKSBhbmQgdGhlIFNvdXJjZSB2aWV3LCB3aGljaCBkaXNwbGF5cyB0aGUgU09BUCBtZXNzYWdlIGluCi10aGUgWE1MIGZvcm1hdC4gWW91IGNhbiBhbHNvIGVudGVyIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIGluIHRoZSBmb3JtLCBvbmx5Ci1pbiBYTUwgZm9ybWF0ICh0aGlzIGlzIHN1Z2dlc3RlZCBmb3IgYWR2YW5jZWQgdXNlcnMgb25seSkuIFRoZSBFeHBsb3JlciBkb2VzCi12YWxpZGF0ZSB0aGUgWE1MIGlmIHlvdSBtb2RpZnkgaXQsIGJ1dCBub3QgdGhlIHBhcmFtZXRlciB2YWx1ZXMgeW91IGVudGVyLgotIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbG9wcmV0eC5naWYiIGFsdD0iU291cmNlIHZpZXcgb2YgdGhlIEludm9rZSBhIFdTREwgT3BlcmF0aW9uIHBhbmUuIiAvPjxiciAvPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPklmIHlvdSBhcmUgdXNpbmcgU09BUCBhcyB5b3VyIGJpbmRpbmcgdHlwZSwgeW91IHdpbGwgYWxzbyBoYXZlCi10aGUgb3B0aW9uIG9mIHRvZ2dsaW5nIHRoZSBTdGF0dXMgcGFuZSBiZXR3ZWVuIHRoZSBTb3VyY2UgYW5kIEZvcm0gdmlld3MuCi1UaGUgU291cmNlIHZpZXcgc2hvd3MgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZW52ZWxvcGVzLCBpbmNsdWRpbmcgdGhlCi1wYXJhbWV0ZXJzIHlvdSBoYXZlIGVudGVyZWQgdG8gdGVzdCB0aGUgc2VydmljZSBhbmQgdGhlIHJldHVybmVkIHZhbHVlLiAgIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbHN0YXR4LmdpZiIgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgc291cmNlIHZpZXcgb2YgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZW52ZWxvcGVzIiAvPjxiciAvPiA8L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDhiZDM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR1ZGRpZXhwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllcyB3aXRoIHRoZSBXZWIgU2VydmljZXMKLUV4cGxvcmVyPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5UaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMKLWFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4gPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBTZXJ2aWNlczxpbmRleHRlcm0+cHVibGlzaGluZzxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+YnVzaW5lc3MgZW50aXRpZXM8aW5kZXh0ZXJtPnB1Ymxpc2hpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIFNlcnZpY2VzIEV4cGxvcmVyPGluZGV4dGVybT5wdWJsaXNoaW5nIFdlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5VRERJIGVuYWJsZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYnkgcHJvdmlkaW5nIGEgZGlzdHJpYnV0ZWQKLXJlZ2lzdHJ5IG9mIGJ1c2luZXNzZXMgYW5kIHRoZWlyIHNlcnZpY2UgZGVzY3JpcHRpb25zLCBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbgotWE1MIGZvcm1hdC4mbmJzcDsgSW4gb3JkZXIgZm9yIGEgc2VydmljZSByZXF1ZXN0b3IgdG8gZGlzY292ZXIgYSBzZXJ2aWNlLAotYSBzZXJ2aWNlIHByb3ZpZGVyIG11c3QgZmlyc3QgcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSBhbmQgYXQgbGVhc3Qgb25lIGJ1c2luZXNzCi1zZXJ2aWNlLCBhbmQgc2VydmljZSBpbnRlcmZhY2UgaW4gYSBVRERJIHJlZ2lzdHJ5LiZuYnNwOyBUaGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlciBpcyBhIFdlYiBhcHBsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIHRoZSBwdWJsaWNhdGlvbiwgZGlzY292ZXJ5LCBhbmQKLW1haW50ZW5hbmNlIG9mIGJ1c2luZXNzIGVudGl0aWVzLCBidXNpbmVzcyBzZXJ2aWNlcywgYW5kIHNlcnZpY2UgaW50ZXJmYWNlcy48L3A+PHA+V1NJTAotZW5hYmxlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlIHByb3ZpZGVyJ3MKLXBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yIGF2YWlsYWJsZSBXZWIKLXNlcnZpY2VzLiZuYnNwOyBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uIGRlZmluZXMgdGhlIGxvY2F0aW9ucyBvbiBhIFdlYiBzaXRlCi13aGVyZSB5b3UgY2FuIGxvb2sgZm9yIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucy4mbmJzcDtTaW5jZSBXU0lMIGZvY3VzZXMgb24KLWRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uIGNvbXBsZW1lbnRzIFVEREkgYnkKLWZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiBXZWIgc2l0ZXMgdGhhdAotbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MKLXlvdSB0byBnZW5lcmF0ZSBhbmQgZXhwbG9yZSBXU0lMIGRvY3VtZW50cy48L3A+PHA+VGhlIGZhdm9yaXRlcyBwYWdlIG9mIHRoZQotV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gc3RvcmUgdGhlIGxvY2F0aW9uIG9mIFVEREkgcmVnaXN0cmllcywKLWJ1c2luZXNzIGVudGl0aWVzLCBXZWIgc2VydmljZXMsIHNlcnZpY2UgaW50ZXJmYWNlcywgYXMgd2VsbCBhcyBXU0lMIGFuZCBXU0RMCi1kb2N1bWVudHMuPC9wPjxwPlVzZSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGRvIGFueSBvZiB0aGUgZm9sbG93aW5nCi10YXNrczo8L3A+PHVsPgotPGxpPiA8eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRia21yay5kaXRhIj5BZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcwotc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXM8L3hyZWY+IDwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idGxvZ2V4cC5kaXRhIj48L3hyZWY+PC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idGRpc2Nvdi5kaXRhIj5EaXNjb3ZlciBhIFdlYiBzZXJ2aWNlPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0cHViZW50LmRpdGEiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdG8gYSByZWdpc3RyeTwveHJlZj4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1Ymxpc2guZGl0YSI+UHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdG8gYSByZWdpc3RyeTwveHJlZj4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHVucHViLmRpdGEiPlJlbW92ZSBhIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwKLW9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeTwveHJlZj4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHVwZGF0ZS5kaXRhIj5VcGRhdGUgYSBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsCi1vciBzZXJ2aWNlIGludGVyZmFjZTwveHJlZj4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idGJ1c3Byb2ouZGl0YSI+TWFuYWdlIHJlZmVyZW5jZWQgc2VydmljZXM8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRhc3NlcnQuZGl0YSI+TWFuYWdlIHB1Ymxpc2hlciBhc3NlcnRpb25zPC94cmVmPiA8L2xpPgotPC91bD48cD5QcmVyZXF1aXNpdGVzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHBlcmZvcm0gYW55IG9mCi10aGVzZSBmdW5jdGlvbnMsIHlvdSBtdXN0ICA8eHJlZiBocmVmPSJ0cmVnLmRpdGEiPnJlZ2lzdGVyIHdpdGggYSBwdWJsaWMgcmVnaXN0cnk8L3hyZWY+LiZuYnNwOwotVGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IHJlZ2lzdHJpZXMgd2l0aCB3aGljaCB5b3UgY2FuIHJlZ2lzdGVyLjwvY21kPjxpbmZvPjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+RW5zdXJlIHRoYXQgeW91IGFyZSB1c2luZyBhIHN1cHBvcnRlZCBXZWIgYnJvd3Nlci48L2NtZD48aW5mbz5UaGUKLWZvbGxvd2luZyBXZWIgYnJvd3NlcnMgYW5kIHZlcnNpb25zIGFyZSBzdXBwb3J0ZWQ6PHVsPgotPGxpPkludGVybmV0IEV4cGxvcmVyOiA2LjAgYW5kIHVwPC9saT4KLTxsaT5Nb3ppbGxhOiAxLjIuMSBhbmQgdXA8L2xpPgotPC91bD48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD4gPHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+PGI+S25vd24gbGltaXRhdGlvbnMgb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L2I+PHVsPgotPGxpPlRoZSB0YXhvbm9teSBjYXRlZ29yaWVzIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYXJlIG5vdCB0cmFuc2xhdGVkCi1zaW5jZSB0aGV5IG11c3QgbWF0Y2ggdGhvc2UgaW4gdGhlIHN0YW5kYXJkcyBhZGhlcmVkIHRvIGJ5IFVEREkgKElTTywgVU5TUFNDCi03LjMsIE5BSUNTKS48L2xpPgotPGxpPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgd2lsbCBsYXVuY2ggd2l0aG91dCB0aGUgYnJvd3NlciB0b29sYmFyIHdoaWNoCi1zaG93cywgYW1vbmdzdCBvdGhlciB0aGluZ3MsIHRoZSBVUkwgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbi4gVGhpcyBVUkwgc2hvdWxkCi1vbmx5IGJlIHVzZWQgYnkgdXNlcnMgd2l0aCBhY2Nlc3NpYmlsaXR5IG5lZWRzLiBUaGUgVVJMIHRvIHRoZSBXZWIgU2VydmljZXMKLUV4cGxvcmVyIFdlYiBhcHBsaWNhdGlvbiBjYW4gYmUgb2J0YWluZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0ZXBzOjxvbD4KLTxsaT5Gcm9tIHRoZSBXaW5kb3cgbWVudSwgc2VsZWN0IFByZWZlcmVuY2VzLjwvbGk+Ci08bGk+SW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZywgc2VsZWN0IDx1aWNvbnRyb2w+V2ViIEJyb3dzZXI8L3VpY29udHJvbD4gaW4KLXRoZSBsZWZ0IHBhbmUuPC9saT4KLTxsaT5PbiB0aGUgcmlnaHQsIHNlbGVjdCA8dWljb250cm9sPlVzZSBleHRlcm5hbCBXZWIgQnJvd3NlcjwvdWljb250cm9sPi48L2xpPgotPGxpPkluIHRoZSA8dWljb250cm9sPkxvY2F0aW9uOiB0ZXh0PC91aWNvbnRyb2w+IGZpZWxkLCBicm93c2Ugb3IgdHlwZSBpbgotdGhlIGZ1bGwgcGF0aCBvZiB0aGUgSW50ZXJuZXQgRXhwbG9yZXIgZXhlY3V0YWJsZS4gKGZvciBleGFtcGxlLCBDOlxQcm9ncmFtCi1GaWxlc1xJbnRlcm5ldCBFeHBsb3JlclxpZXhwbG9yZS5leGUpLjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5BcHBseTwvdWljb250cm9sPiBmb2xsb3dlZCBieSA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvbGk+Ci08L29sPiBOb3RlIHRoYXQgdGhpcyBwcmVmZXJlbmNlIHdpbGwgbm93IGFwcGx5IHRvIGFueSBicm93c2VyIHdpbmRvd3MgdGhhdAotYXJlIGxhdW5jaGVkIGJ5IHRoZSB1c2VyIG9yIGJ5IHRoZSB0b29scyB0aGVtc2VsdmVzIChzdWNoIGFzIHRoZSBVbml2ZXJzYWwKLVRlc3QgQ2xpZW50KS4gIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgd2lsbCBub3cgbGF1bmNoIGluIGFuIGV4dGVybmFsIGJyb3dzZXIKLWFuZCBpdHMgVVJMIHNob3VsZCBiZSBpbiB0aGUgQWRkcmVzcyBmaWVsZC4gVGhpcyBjYW4gdGhlbiBiZSBwYXN0ZWQgb3Igb3BlbmVkCi11c2luZyBhbSBhY2Nlc3NpYmlsaXR5IGFzc2lzdGluZyBicm93c2VyLjwvbGk+Ci08bGk+V2hlbiBwZXJmb3JtaW5nIGFuIGFkdmFuY2VkIGZpbmQgb3IgcHVibGlzaCBpbiB0aGUgVURESSBwYWdlIG9mIHRoZSBXZWIKLVNlcnZpY2VzIEV4cGxvcmVyLCB0aGUgaXRlbXMgaW4gdGhlIGRyb3AgZG93biBsaXN0IGZvciBwaWNraW5nIGEgbGFuZ3VhZ2UKLWluIGNvbmp1bmN0aW9uIHdpdGggYSBuYW1lIG9yIGRlc2NyaXB0aW9uIGlzIHNvcnRlZCAgYWNjb3JkaW5nIHRvIHRoZSBvcGVyYXRpbmcKLXN5c3RlbSdzIGxvY2FsZSBzZXR0aW5ncy4gT24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9Ik1pY3Jvc29mdCBDb3Jwb3JhdGlvbiIKLXRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldpbmRvd3MiPldpbmRvd3M8L3RtPiwgdGhpcyBvcmRlciBtYXkgYmUgbWFuYWdlZCB0aHJvdWdoCi10aGUgQ29udHJvbCBQYW5lbC4gVG8gZG8gdGhpczo8b2w+Ci08bGk+T3BlbiB0aGUgQ29udHJvbCBQYW5lbC48L2xpPgotPGxpPkxhdW5jaCB0aGUgUmVnaW9uYWwgT3B0aW9ucyBjb250cm9sIHBhbmVsIGFwcGxldC48L2xpPgotPGxpPkluIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUgcmVzdWx0aW5nIGRpYWxvZywgdGhlcmUgbWF5IGJlIGEgIlNvcnRpbmcgb3JkZXIiCi1kcm9wLWRvd24gbGlzdC4gSWYgc28sIHBpY2sgYSBzb3J0aW5nIG9yZGVyIGFuZCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+QXBwbHk8L3VpY29udHJvbD4gZm9sbG93ZWQKLWJ5IDx1aWNvbnRyb2w+T0s8L3VpY29udHJvbD4uPC9saT4KLTxsaT5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCB0aGUgbmV3IHNvcnRpbmcgb3JkZXIgY29tZXMgaW50byBlZmZlY3QKLW9uY2UgdGhlIHBhZ2UgcmVsb2Fkcy4gVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IHByZXNzaW5nIHRoZSBiYWNrIGFycm93Ci1mb2xsb3dlZCBieSB0aGUgZm9yd2FyZCBhcnJvdyBpbiB0aGUgbWFpbiB0b29sYmFyLjwvbGk+Ci08L29sPk5vdGU6IFRoZSBpbnN0cnVjdGlvbnMgYWJvdmUgYXBwbHkgdG8gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9Ik1pY3Jvc29mdCBDb3Jwb3JhdGlvbiIKLXRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldpbmRvd3MiPldpbmRvd3M8L3RtPiAyMDAwLiBPbiA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9Ik1pY3Jvc29mdCBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iV2luZG93cyI+V2luZG93czwvdG0+IFhQLAotdGhlIHRhYiBtZW50aW9uZWQgaW4gc3RlcCAzIGlzIGNhbGxlZCAiUmVnaW9uYWwgT3B0aW9ucyIuIEJlc2lkZSB0aGUgbGFuZ3VhZ2UKLWRyb3AtZG93biwgdGhlcmUgaXMgYSA8dWljb250cm9sPkN1c3RvbWl6ZTwvdWljb250cm9sPiBidXR0b24uIFdoZW4gdGhpcyBpcwotY2xpY2tlZCwgYSBuZXcgZGlhbG9nIGFwcGVhcnMuIEEgc29ydGluZyB0YWIgd2lsbCBhbGxvdyB1c2VycyB0byBwaWNrIHRoZQotc29ydGluZyBtZXRob2QgaWYgYXBwbGljYWJsZS48L2xpPgotPC91bD48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InR3c2RsZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYTFhMjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMsIHB1Ymxpc2hpbmcsIG92ZXJ2aWV3LCBidXNpbmVzcyBlbnRpdGllcywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBwdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcywgcHVibGlzaGluZywgb3ZlcnZpZXcsIGJ1c2luZXNzIGVudGl0aWVzLCBXZWIgU2VydmljZXMgRXhwbG9yZXIsIHB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHdzZGxleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHVkZGlleHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMgd2l0aCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHVkZGlleHAiPjxhIG5hbWU9InR1ZGRpZXhwIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2gxPgotCi0KLQotCi08ZGl2PjxwPlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cwotYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiA8L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlVEREkgZW5hYmxlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBieSBwcm92aWRpbmcgYSBkaXN0cmlidXRlZAotcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIgc2VydmljZSBkZXNjcmlwdGlvbnMsIGltcGxlbWVudGVkIGluIGEgY29tbW9uCi1YTUwgZm9ybWF0LsKgIEluIG9yZGVyIGZvciBhIHNlcnZpY2UgcmVxdWVzdG9yIHRvIGRpc2NvdmVyIGEgc2VydmljZSwKLWEgc2VydmljZSBwcm92aWRlciBtdXN0IGZpcnN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgYW5kIGF0IGxlYXN0IG9uZSBidXNpbmVzcwotc2VydmljZSwgYW5kIHNlcnZpY2UgaW50ZXJmYWNlIGluIGEgVURESSByZWdpc3RyeS7CoCBUaGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlciBpcyBhIFdlYiBhcHBsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIHRoZSBwdWJsaWNhdGlvbiwgZGlzY292ZXJ5LCBhbmQKLW1haW50ZW5hbmNlIG9mIGJ1c2luZXNzIGVudGl0aWVzLCBidXNpbmVzcyBzZXJ2aWNlcywgYW5kIHNlcnZpY2UgaW50ZXJmYWNlcy48L3A+Ci08cD5XU0lMCi1lbmFibGVzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IGRlZmluaW5nIGEgZGlzdHJpYnV0ZWQgc2VydmljZSBkaXNjb3ZlcnkKLW1ldGhvZCB0aGF0IHN1cHBsaWVzIHJlZmVyZW5jZXMgdG8gc2VydmljZSBkZXNjcmlwdGlvbnMgYXQgdGhlIHNlcnZpY2UgcHJvdmlkZXIncwotcG9pbnQtb2Ytb2ZmZXJpbmcsIGJ5IHNwZWNpZnlpbmcgaG93IHRvIGluc3BlY3QgYSBXZWIgc2l0ZSBmb3IgYXZhaWxhYmxlIFdlYgotc2VydmljZXMuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIgc2l0ZQotd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuwqBTaW5jZSBXU0lMIGZvY3VzZXMgb24KLWRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uIGNvbXBsZW1lbnRzIFVEREkgYnkKLWZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiBXZWIgc2l0ZXMgdGhhdAotbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MKLXlvdSB0byBnZW5lcmF0ZSBhbmQgZXhwbG9yZSBXU0lMIGRvY3VtZW50cy48L3A+Ci08cD5UaGUgZmF2b3JpdGVzIHBhZ2Ugb2YgdGhlCi1XZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBzdG9yZSB0aGUgbG9jYXRpb24gb2YgVURESSByZWdpc3RyaWVzLAotYnVzaW5lc3MgZW50aXRpZXMsIFdlYiBzZXJ2aWNlcywgc2VydmljZSBpbnRlcmZhY2VzLCBhcyB3ZWxsIGFzIFdTSUwgYW5kIFdTREwKLWRvY3VtZW50cy48L3A+Ci08cD5Vc2UgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZwotdGFza3M6PC9wPgotPHVsPgotPGxpPiA8YSBocmVmPSJ0YWRkcmVnLmh0bWwiPkFkZCBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGJrbXJrLmh0bWwiPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9hPiA8L2xpPgotCi08bGk+PGEgaHJlZj0idGxvZ2V4cC5odG1sIiB0aXRsZT0iSWYgeW91IGhhdmUgcHVibGlzaGVkIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5IHlvdSBjYW4mIzEwO2xvZyBpbnRvIHRoZSByZWdpc3RyeSBhbmQgbWFuYWdlIHRoZSBzZXJ2aWNlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iPkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGRpc2Nvdi5odG1sIj5EaXNjb3ZlciBhIFdlYiBzZXJ2aWNlPC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJlbnQuaHRtbCI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB0byBhIHJlZ2lzdHJ5PC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJsaXNoLmh0bWwiPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHRvIGEgcmVnaXN0cnk8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHVucHViLmh0bWwiPlJlbW92ZSBhIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5PC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InR1cGRhdGUuaHRtbCI+VXBkYXRlIGEgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0YnVzcHJvai5odG1sIj5NYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlczwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0YXNzZXJ0Lmh0bWwiPk1hbmFnZSBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvYT4gPC9saT4KLQotPC91bD4KLTxwPlByZXJlcXVpc2l0ZXM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+QmVmb3JlIHlvdSBjYW4gdXNlIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gcGVyZm9ybSBhbnkgb2YKLXRoZXNlIGZ1bmN0aW9ucywgeW91IG11c3QgIDxhIGhyZWY9InRyZWcuaHRtbCI+cmVnaXN0ZXIgd2l0aCBhIHB1YmxpYyByZWdpc3RyeTwvYT4uwqAKLVRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbiByZWdpc3Rlci48L3NwYW4+IAotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FbnN1cmUgdGhhdCB5b3UgYXJlIHVzaW5nIGEgc3VwcG9ydGVkIFdlYiBicm93c2VyLjwvc3Bhbj4gVGhlCi1mb2xsb3dpbmcgV2ViIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucyBhcmUgc3VwcG9ydGVkOjx1bD4KLTxsaT5JbnRlcm5ldCBFeHBsb3JlcjogNi4wIGFuZCB1cDwvbGk+Ci0KLTxsaT5Nb3ppbGxhOiAxLjIuMSBhbmQgdXA8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj4gPGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9InAiPjxzdHJvbmc+S25vd24gbGltaXRhdGlvbnMgb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3N0cm9uZz48dWw+Ci08bGk+VGhlIHRheG9ub215IGNhdGVnb3JpZXMgaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhcmUgbm90IHRyYW5zbGF0ZWQKLXNpbmNlIHRoZXkgbXVzdCBtYXRjaCB0aG9zZSBpbiB0aGUgc3RhbmRhcmRzIGFkaGVyZWQgdG8gYnkgVURESSAoSVNPLCBVTlNQU0MKLTcuMywgTkFJQ1MpLjwvbGk+Ci0KLTxsaT5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdpbGwgbGF1bmNoIHdpdGhvdXQgdGhlIGJyb3dzZXIgdG9vbGJhciB3aGljaAotc2hvd3MsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLCB0aGUgVVJMIHRvIHRoZSBXZWIgYXBwbGljYXRpb24uIFRoaXMgVVJMIHNob3VsZAotb25seSBiZSB1c2VkIGJ5IHVzZXJzIHdpdGggYWNjZXNzaWJpbGl0eSBuZWVkcy4gVGhlIFVSTCB0byB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlciBXZWIgYXBwbGljYXRpb24gY2FuIGJlIG9idGFpbmVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczo8b2w+Ci08bGk+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCBQcmVmZXJlbmNlcy48L2xpPgotCi08bGk+SW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZywgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBCcm93c2VyPC9zcGFuPiBpbgotdGhlIGxlZnQgcGFuZS48L2xpPgotCi08bGk+T24gdGhlIHJpZ2h0LCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VXNlIGV4dGVybmFsIFdlYiBCcm93c2VyPC9zcGFuPi48L2xpPgotCi08bGk+SW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkxvY2F0aW9uOiB0ZXh0PC9zcGFuPiBmaWVsZCwgYnJvd3NlIG9yIHR5cGUgaW4KLXRoZSBmdWxsIHBhdGggb2YgdGhlIEludGVybmV0IEV4cGxvcmVyIGV4ZWN1dGFibGUuIChmb3IgZXhhbXBsZSwgQzpcUHJvZ3JhbQotRmlsZXNcSW50ZXJuZXQgRXhwbG9yZXJcaWV4cGxvcmUuZXhlKS48L2xpPgotCi08bGk+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QXBwbHk8L3NwYW4+IGZvbGxvd2VkIGJ5IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L2xpPgotCi08L29sPgotIE5vdGUgdGhhdCB0aGlzIHByZWZlcmVuY2Ugd2lsbCBub3cgYXBwbHkgdG8gYW55IGJyb3dzZXIgd2luZG93cyB0aGF0Ci1hcmUgbGF1bmNoZWQgYnkgdGhlIHVzZXIgb3IgYnkgdGhlIHRvb2xzIHRoZW1zZWx2ZXMgKHN1Y2ggYXMgdGhlIFVuaXZlcnNhbAotVGVzdCBDbGllbnQpLiAgVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3aWxsIG5vdyBsYXVuY2ggaW4gYW4gZXh0ZXJuYWwgYnJvd3NlcgotYW5kIGl0cyBVUkwgc2hvdWxkIGJlIGluIHRoZSBBZGRyZXNzIGZpZWxkLiBUaGlzIGNhbiB0aGVuIGJlIHBhc3RlZCBvciBvcGVuZWQKLXVzaW5nIGFtIGFjY2Vzc2liaWxpdHkgYXNzaXN0aW5nIGJyb3dzZXIuPC9saT4KLQotPGxpPldoZW4gcGVyZm9ybWluZyBhbiBhZHZhbmNlZCBmaW5kIG9yIHB1Ymxpc2ggaW4gdGhlIFVEREkgcGFnZSBvZiB0aGUgV2ViCi1TZXJ2aWNlcyBFeHBsb3JlciwgdGhlIGl0ZW1zIGluIHRoZSBkcm9wIGRvd24gbGlzdCBmb3IgcGlja2luZyBhIGxhbmd1YWdlCi1pbiBjb25qdW5jdGlvbiB3aXRoIGEgbmFtZSBvciBkZXNjcmlwdGlvbiBpcyBzb3J0ZWQgIGFjY29yZGluZyB0byB0aGUgb3BlcmF0aW5nCi1zeXN0ZW0ncyBsb2NhbGUgc2V0dGluZ3MuIE9uIFdpbmRvd3M8c3VwPsKuPC9zdXA+LCB0aGlzIG9yZGVyIG1heSBiZSBtYW5hZ2VkIHRocm91Z2gKLXRoZSBDb250cm9sIFBhbmVsLiBUbyBkbyB0aGlzOjxvbD4KLTxsaT5PcGVuIHRoZSBDb250cm9sIFBhbmVsLjwvbGk+Ci0KLTxsaT5MYXVuY2ggdGhlIFJlZ2lvbmFsIE9wdGlvbnMgY29udHJvbCBwYW5lbCBhcHBsZXQuPC9saT4KLQotPGxpPkluIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUgcmVzdWx0aW5nIGRpYWxvZywgdGhlcmUgbWF5IGJlIGEgIlNvcnRpbmcgb3JkZXIiCi1kcm9wLWRvd24gbGlzdC4gSWYgc28sIHBpY2sgYSBzb3J0aW5nIG9yZGVyIGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFwcGx5PC9zcGFuPiBmb2xsb3dlZAotYnkgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T0s8L3NwYW4+LjwvbGk+Ci0KLTxsaT5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCB0aGUgbmV3IHNvcnRpbmcgb3JkZXIgY29tZXMgaW50byBlZmZlY3QKLW9uY2UgdGhlIHBhZ2UgcmVsb2Fkcy4gVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IHByZXNzaW5nIHRoZSBiYWNrIGFycm93Ci1mb2xsb3dlZCBieSB0aGUgZm9yd2FyZCBhcnJvdyBpbiB0aGUgbWFpbiB0b29sYmFyLjwvbGk+Ci0KLTwvb2w+Ci1Ob3RlOiBUaGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIGFwcGx5IHRvIFdpbmRvd3MgMjAwMC4gT24gV2luZG93cyBYUCwKLXRoZSB0YWIgbWVudGlvbmVkIGluIHN0ZXAgMyBpcyBjYWxsZWQgIlJlZ2lvbmFsIE9wdGlvbnMiLiBCZXNpZGUgdGhlIGxhbmd1YWdlCi1kcm9wLWRvd24sIHRoZXJlIGlzIGEgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q3VzdG9taXplPC9zcGFuPiBidXR0b24uIFdoZW4gdGhpcyBpcwotY2xpY2tlZCwgYSBuZXcgZGlhbG9nIGFwcGVhcnMuIEEgc29ydGluZyB0YWIgd2lsbCBhbGxvdyB1c2VycyB0byBwaWNrIHRoZQotc29ydGluZyBtZXRob2QgaWYgYXBwbGljYWJsZS48L2xpPgotCi08L3VsPgotPC9kaXY+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0d3NkbGV4cC5odG1sIiB0aXRsZT0iIj5FeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVucHViLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMWQ2YjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVucHViLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHVucHViIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbQotYSByZWdpc3RyeTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UKLWZyb20gYSByZWdpc3RyeTwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+QWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZQotaW50ZXJmYWNlLCB5b3UgY2FuIHJlbW92ZSBvciB1bnB1Ymxpc2ggaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPnNlcnZpY2UgaW50ZXJmYWNlczxpbmRleHRlcm0+cmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+YnVzaW5lc3MgZW50aXRpZXM8aW5kZXh0ZXJtPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnJlbW92aW5nIHNlcnZpY2VzIGZyb20gYSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPiA8eHJlZiBocmVmPSJ0cHViZW50LmRpdGEiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHk8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJsaXNoLmRpdGEiPlB1Ymxpc2ggYSBXZWIgc2VydmljZTwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1Ymxpc2guZGl0YSI+UHVibGlzaCBhIHNlcnZpY2UgaW50ZXJmYWNlPC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj4uPC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08Y29udGV4dD5UbyB1bnB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZQotdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSBidXNpbmVzcyBlbnRpdHksCi1XZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgeW91IHdhbnQgdG8gdW5wdWJsaXNoLiBTZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIGljb24gYmFyLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+VW5wdWJsaXNoPC91aWNvbnRyb2w+IGljb24uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBhbmQgcGFzc3dvcmQsIGlmIG5lY2Vzc2FyeSwKLXRoZW4gY2xpY2sgIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGlzIHJlbW92ZWQKLWZyb20gdGhlIHJlZ2lzdHJ5IGFuZCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoCi15b3VyIGNoYW5nZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRwdWJlbnQuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHB1Ymxpc2guZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHVucHViLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InR1cGRhdGUuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmQ4NWQ2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLCB5b3UgY2FuIHJlbW92ZSBvciB1bnB1Ymxpc2ggaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIHJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5LCBzZXJ2aWNlIGludGVyZmFjZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBVRERJLCByZW1vdmluZyBzZXJ2aWNlcyBmcm9tIGEgcmVnaXN0cnkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIHJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5LCBzZXJ2aWNlIGludGVyZmFjZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBVRERJLCByZW1vdmluZyBzZXJ2aWNlcyBmcm9tIGEgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cHViZW50Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRwdWJsaXNoLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1bnB1Yi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dXBkYXRlLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR1bnB1YiIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UKLWZyb20gYSByZWdpc3RyeTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHVucHViIj48YSBuYW1lPSJ0dW5wdWIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbQotYSByZWdpc3RyeTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+QWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZQotaW50ZXJmYWNlLCB5b3UgY2FuIHJlbW92ZSBvciB1bnB1Ymxpc2ggaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDxhIGhyZWY9InRwdWJlbnQuaHRtbCI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHVibGlzaC5odG1sIj5QdWJsaXNoIGEgV2ViIHNlcnZpY2U8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHB1Ymxpc2guaHRtbCI+UHVibGlzaCBhIHNlcnZpY2UgaW50ZXJmYWNlPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIHVucHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlCi11c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIGJ1c2luZXNzIGVudGl0eSwKLVdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSB5b3Ugd2FudCB0byB1bnB1Ymxpc2guIFNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VW5wdWJsaXNoPC9zcGFuPiBpY29uLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgYW5kIHBhc3N3b3JkLCBpZiBuZWNlc3NhcnksCi10aGVuIGNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyByZW1vdmVkCi1mcm9tIHRoZSByZWdpc3RyeSBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aAoteW91ciBjaGFuZ2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHB1YmVudC5odG1sIiB0aXRsZT0iQSBidXNpbmVzcyBlbnRpdHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIHB1Ymxpc2hlZCBhIHNlcnZpY2UuwqAgQmVmb3JlIHlvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UsIHlvdSBtdXN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuIj5QdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cHVibGlzaC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMgYSBXZWIgc2VydmljZSdzIGVuZHBvaW50IGFuZCB3aGVyZSBpdHMgV1NETCBmaWxlIHJlc2lkZXMuIFRoZSBXU0RMIGZpbGUgbGlzdHMgdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLiI+UHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0dW5wdWIuaHRtbCIgdGl0bGU9IkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLCB5b3UgY2FuIHJlbW92ZSBvciB1bnB1Ymxpc2ggaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiI+UmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnk8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InR1cGRhdGUuaHRtbCIgdGl0bGU9IkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLCB5b3UgY2FuIHVwZGF0ZSBpdCB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIj5VcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1cGRhdGUuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1cGRhdGUuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRmZGQyNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHVwZGF0ZSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5VcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlPC90aXRsZT4KLTxzaG9ydGRlc2M+QWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZQotaW50ZXJmYWNlLCB5b3UgY2FuIHVwZGF0ZSBpdCB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPmJ1c2luZXNzIGVudGl0aWVzPGluZGV4dGVybT51cGRhdGluZyBpbiBhIFVEREkgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT51cGRhdGluZyBVRERJIHJlZ2lzdHJpZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+c2VydmljZSBpbnRlcmZhY2VzPGluZGV4dGVybT51cGRhdGluZyBVRERJIHJlZ2lzdHJpZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT4gPHhyZWYgaHJlZj0idHB1YmVudC5kaXRhIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5PC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0cHVibGlzaC5kaXRhIj5QdWJsaXNoIGEgV2ViIHNlcnZpY2U8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJsaXNoLmRpdGEiPlB1Ymxpc2ggYSBzZXJ2aWNlIGludGVyZmFjZTwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvbGk+Ci08L29sPjwvcHJlcmVxPgotPGNvbnRleHQ+VG8gdXBkYXRlIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgdXNpbmcKLXRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5OYXZpZ2F0ZSB0aHJvdWdoIHRoZSByZWdpc3RyeSBoaWVyYXJjaHkgdG8gZmluZCB0aGUgYnVzaW5lc3MgZW50aXR5LAotV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIHlvdSB3YW50IHRvIHVwZGF0ZS4gU2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBpY29uIGJhciwgY2xpY2sgdGhlICA8dWljb250cm9sPkRldGFpbHM8L3VpY29udHJvbD4gaWNvbi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+TWFrZSBhbnkgbmVjZXNzYXJ5IGNoYW5nZXMgYW5kIGVudGVyIHlvdXIgcHVibGlzaCBVUkwsIHlvdXIgdXNlcgotSUQsIGFuZCBwYXNzd29yZCwgaWYgbmVjZXNzYXJ5LCB0aGVuIGNsaWNrICA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGlzIHVwZGF0ZWQKLWluIHRoZSByZWdpc3RyeSBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aAoteW91ciBjaGFuZ2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cHViZW50LmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRwdWJsaXNoLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InR1bnB1Yi5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1cGRhdGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1cGRhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMxNzk1OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLCB5b3UgY2FuIHVwZGF0ZSBpdCB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLCB5b3UgY2FuIHVwZGF0ZSBpdCB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIiAvPgotPG1ldGEgY29udGVudD0iYnVzaW5lc3MgZW50aXRpZXMsIHVwZGF0aW5nIGluIGEgVURESSByZWdpc3RyeSwgV2ViIHNlcnZpY2VzLCB1cGRhdGluZyBVRERJIHJlZ2lzdHJpZXMsIHNlcnZpY2UgaW50ZXJmYWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImJ1c2luZXNzIGVudGl0aWVzLCB1cGRhdGluZyBpbiBhIFVEREkgcmVnaXN0cnksIFdlYiBzZXJ2aWNlcywgdXBkYXRpbmcgVURESSByZWdpc3RyaWVzLCBzZXJ2aWNlIGludGVyZmFjZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cHViZW50Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRwdWJsaXNoLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1bnB1Yi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0dXBkYXRlIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHVwZGF0ZSI+PGEgbmFtZT0idHVwZGF0ZSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvaDE+Ci0KLQotCi08ZGl2PjxwPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDxhIGhyZWY9InRwdWJlbnQuaHRtbCI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHVibGlzaC5odG1sIj5QdWJsaXNoIGEgV2ViIHNlcnZpY2U8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHB1Ymxpc2guaHRtbCI+UHVibGlzaCBhIHNlcnZpY2UgaW50ZXJmYWNlPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIHVwZGF0ZSBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIHVzaW5nCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIGJ1c2luZXNzIGVudGl0eSwKLVdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSB5b3Ugd2FudCB0byB1cGRhdGUuIFNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGV0YWlsczwvc3Bhbj4gaWNvbi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+TWFrZSBhbnkgbmVjZXNzYXJ5IGNoYW5nZXMgYW5kIGVudGVyIHlvdXIgcHVibGlzaCBVUkwsIHlvdXIgdXNlcgotSUQsIGFuZCBwYXNzd29yZCwgaWYgbmVjZXNzYXJ5LCB0aGVuIGNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGlzIHVwZGF0ZWQKLWluIHRoZSByZWdpc3RyeSBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aAoteW91ciBjaGFuZ2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHB1YmVudC5odG1sIiB0aXRsZT0iQSBidXNpbmVzcyBlbnRpdHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIHB1Ymxpc2hlZCBhIHNlcnZpY2UuwqAgQmVmb3JlIHlvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UsIHlvdSBtdXN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuIj5QdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cHVibGlzaC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMgYSBXZWIgc2VydmljZSdzIGVuZHBvaW50IGFuZCB3aGVyZSBpdHMgV1NETCBmaWxlIHJlc2lkZXMuIFRoZSBXU0RMIGZpbGUgbGlzdHMgdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLiI+UHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0dW5wdWIuaHRtbCIgdGl0bGU9IkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLCB5b3UgY2FuIHJlbW92ZSBvciB1bnB1Ymxpc2ggaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiI+UmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0OTRjODkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHdzZGxleHAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3RpdGxlPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5leHBsb3Jpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYgotc2VydmljZXM8aW5kZXh0ZXJtPmV4cGxvcmluZyBXU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6IFRvIHVzZSB0aGUgV1NETCBFeHBsb3JlciwgeW91IG11c3QgaGF2ZSBhIHZhbGlkIFVSTAotZm9yIGEgV1NETCBkb2N1bWVudC48L3ByZXJlcT4KLTxjb250ZXh0PlRoZSBXU0RMIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuCi1UaGUgZm9sbG93aW5nIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgV1NETCBFeHBsb3Jlcjo8dWw+Ci08bGk+U2hvdyBXU0RMIGRldGFpbHM6ICA8aW1hZ2UgYWx0PSJXU0RMIERldGFpbHMgaWNvbiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxkdGxpY29uLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08bGk+SW1wb3J0IFdTREwgdG8gdGhlIFdvcmtiZW5jaDogIDxpbWFnZSBhbHQ9IkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2ggaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiPjwvaW1hZ2U+PC9saT4KLTxsaT5JbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtOiAgPGltYWdlIGFsdD0iSW1wb3J0IFdTREwgdG8geW91ciBmaWxlIHN5c3RlbSBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL2Zzd3NkbGljb24uZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQ6ICA8aW1hZ2UgYWx0PSJMYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFdpemFyZCBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL3dzd2l6aWNvbi5naWYiPjwvaW1hZ2U+PC9saT4KLTxsaT5BZGQgV1NETCB0byBGYXZvcml0ZXM6ICA8aW1hZ2UgYWx0PSJBZGQgV1NETCB0byBGYXZvcml0ZXMgaWNvbiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxmYXZpY29uLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08L3VsPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZDBlNDciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD4gPHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5Td2l0Y2ggdG8gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhlIGljb24gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQKLWNvcm5lciAgPGltYWdlIGFsdD0iSWNvbiB0byBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIiIGhyZWY9Ii4uL2ltYWdlcy93c2RsaWNvbi5naWYiPgotPC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNjQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+SW1wb3J0aW5nIGEgV1NETCBmaWxlIHRvIHlvdXIgd29ya3NwYWNlPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGltcG9ydCB0aGUgV1NETCBmaWxlIHRvIHRoZSBXb3JrYmVuY2g6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+Q2xpY2sgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iSW1wb3J0IFdTREwgdG8gdGhlIFdvcmtiZW5jaCBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiI+PC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIHByb2plY3QgaW50byB3aGljaCB5b3Ugd2FudCB0byBpbXBvcnQgdGhlIFdTREwuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSB3YW50IHRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIGZyb20gdGhlIFdTREwsIHNlbGVjdCAgPGI+SW1wb3J0Ci1hcyBhIHNlcnZpY2UgcmVmZXJlbmNlIHRvIGEgV1NJTCBkb2N1bWVudDwvYj4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+R288L2I+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTkwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkltcG9ydGluZyBhIFdTREwgZmlsZSB0byB5b3VyIGZpbGUgc3lzdGVtPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGltcG9ydCB0aGUgV1NETCBmaWxlIHRvIHlvdXIgZmlsZSBzeXN0ZW0sIGNsaWNrIHRoaXMgaWNvbjoKLSA8aW1hZ2UgYWx0PSJJbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9mc3dzZGxpY29uLmdpZiI+Ci08L2ltYWdlPi4gU3BlY2lmeSB3aGVyZSB5b3Ugd2FudCB0aGUgV1NETCBmaWxlIHNhdmVkIG9uIHlvdXIgc3lzdGVtLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTk2IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFdpemFyZCwgY2xpY2sgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iTGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQgaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy93c3dpemljb24uZ2lmIj48L2ltYWdlPi4gWW91IGNhbiBzZWxlY3QgaWYgeW91IHdhbnQgdG8gY3JlYXRlCi1hIFdlYiBzZXJ2aWNlIGNsaWVudCBvciBhIFNrZWxldG9uIFdlYiBzZXJ2aWNlIGZyb20gdGhlIFdTREwgZmlsZS4gQ2xpY2sgIDxiPkdvPC9iPiB0bwotbGF1bmNoIHRoZSB3aXphcmQuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlMTA1IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIFdTREwgZmlsZSB0byB5b3VyIGZhdm9yaXRlczwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBhZGQgdGhlIFdTREwgZmlsZSB0byBGYXZvcml0ZXMsIGNsaWNrIHRoaXMgaWNvbjogIDxpbWFnZSBhbHQ9IkFkZCBXU0RMIHRvIEZhdm9yaXRlcyBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxmYXZpY29uLmdpZiI+PC9pbWFnZT48L3A+PHA+LiBUaGUgU3RhdHVzIHBhbmUgZGlzcGxheXMKLXRoYXQgdGhlIFdTREwgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLiA8L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGUxMTAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RXhwbG9yaW5nIFdTREwgZG9jdW1lbnRzIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyOjwvdGl0bGU+Ci08dGFza2JvZHk+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlNlbGVjdCBXU0RMIE1haW4gaW4gdGhlIE5hdmlnYXRvciBwYW5lLCBlbnRlciBvciBicm93c2UgdG8gYW4gZXhpc3RpbmcKLVdTREwgVVJMIGluIHRoZSByaWdodC1oYW5kIHBhbmUsIGFuZCBjbGljayAgPGI+R288L2I+LiBOb3RlIHRoYXQgdGhlIEV4cGxvcmVyCi13aWxsIG9ubHkgYWxsb3cgeW91IHRvIGJyb3dzZSBmb3IgV1NETCBmaWxlcyB0aGF0IHJlc2lkZSBpbiB0aGUgPGNvZGVwaD5XZWJDb250ZW50L1dTREw8L2NvZGVwaD4gZm9sZGVyCi1vZiBhIHByb2plY3QuIFRvIGV4cGxvcmUgV1NETCBmaWxlcyBzdG9yZWQgaW4gb3RoZXIgbG9jYXRpb25zIHdpdGhpbiB5b3VyCi13b3Jrc3BhY2UsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBzZWxlY3QgdGhlIGZpbGUgaW4gdGhlIHdvcmtzcGFjZSwKLXJpZ2h0LWNsaWNrIGFuZCBzZWxlY3QgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+V2ViIFNlcnZpY2VzIDwvdWljb250cm9sPjx1aWNvbnRyb2w+IExhdW5jaAotV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uIEZvciB0aGlzIGV4YW1wbGUgdGhlIFdTREwKLWJlaW5nIHVzZWQgaXMgYSBXZWIgU2VydmljZSB3aGljaCByZXR1cm5zIGEgdGVtcGVyYXR1cmUgZm9yIGFueSBlbnRlcmVkIHppcAotY29kZS4gICA8aW1hZ2UgYWx0PSIiIGhyZWY9Ii4uL2ltYWdlcy93c2RsZXhwLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gCi1UaGUgZm9sbG93aW5nIG5vZGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIFdTREwgdHJlZTogPC9jbWQ+PGluZm8+PHVsPgotPGxpPlRoZSBXU0RMIG5vZGU6ICA8aW1hZ2UgYWx0PSJXU0RMIG5vZGUgaWNvbiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxub2RlLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08bGk+VGhlIHNlcnZpY2Ugbm9kZSAod2hpY2ggcmVwcmVzZW50cyBhIHNlcnZpY2UgZWxlbWVudCB3aXRoaW4gdGhlIFdTREwgZmlsZSk6Ci0gPGltYWdlIGFsdD0iU2VydmljZSBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9zZXJ2bm9kZS5naWYiPjwvaW1hZ2U+PC9saT4KLTxsaT5UaGUgYmluZGluZyBub2RlOiAgPGltYWdlIGFsdD0iQmluZGluZyBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9iaW5kbm9kZS5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPlRoZSBvcGVyYXRpb24gbm9kZTogIDxpbWFnZSBhbHQ9Ik9wZXJhdGlvbiBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy9vcG5vZGUuZ2lmIj4KLTwvaW1hZ2U+PC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2tpbmcgdGhlIFNlcnZpY2Ugbm9kZSBpbiB0aGUgTmF2aWdhdG9yIHBhbmUgKGluIHRoaXMgZXhhbXBsZQotdGhpcyB3b3VsZCBiZSB0aGUgIDxzeXN0ZW1vdXRwdXQ+VGVtcGVyYXR1cmVTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+IG5vZGUpIGRpc3BsYXlzCi1hbGwgdGhlIGJpbmRpbmdzIGZvciB0aGlzIHNlcnZpY2UsIGFzIHdlbGwgYXMgdGhlaXIgdHlwZSBhbmQgYSBicmllZiBkZXNjcmlwdGlvbgotb2YgdGhlIGJpbmRpbmcgaWYgdGhlIFdTREwgcHJvdmlkZXIgaGFzIGluY2x1ZGVkIG9uZSBpbiB0aGUgQWN0aW9ucyBwYW5lLgotVGhyZWUgdHlwZXMgb2YgYmluZGluZ3MgYXJlIHN1cHBvcnRlZDogU09BUCwgSFRUUCBHZXQsIGFuZCBIVFRQIFBvc3QuICAgPGltYWdlCi1hbHQ9IiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxzZXJ2ZGV0LmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gIFRoZSBXU0RMCi11c2VkIGluIHRoaXMgZXhhbXBsZSBvbmx5IGhhcyBvbmUgYmluZGluZywgIDxzeXN0ZW1vdXRwdXQ+VGVtcGVyYXR1cmVCaW5kaW5nPC9zeXN0ZW1vdXRwdXQ+LAotd2hpY2ggaXMgcmVwcmVzZW50ZWQgYXMgdGhlICA8c3lzdGVtb3V0cHV0PlRlbXBlcmF0dXJlUG9ydFR5cGU8L3N5c3RlbW91dHB1dD4gbm9kZQotaW4gdGhlIFdTREwgdHJlZSBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGlja2luZyBhIGRpc3BsYXllZCBiaW5kaW5nIG9yIGl0cyBub2RlIGRpc3BsYXlzIHRoZSBXU0RMIGJpbmRpbmcKLWRldGFpbHMgaW4gdGhlIEFjdGlvbnMgcGFuZS4gVGhpcyBpbmNsdWRlcyB0aGUgb3BlcmF0aW9ucyBhbmQgZW5kcG9pbnRzIGF2YWlsYWJsZQotZm9yIHRoaXMgc2VydmljZS4gICA8aW1hZ2UgYWx0PSIiIGhyZWY9Ii4uL2ltYWdlcy93c2RsYm5kZGV0bC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPgotPC9pbWFnZT4gIEluIHRoaXMgdmlldyB5b3UgY2FuIGFkZCBvciByZW1vdmUgZW5kcG9pbnRzIGZvciB0aGUgc2VydmljZS4gVG8KLWFkZCBhbiBlbmRwb2ludCwgY2xpY2sgIDxiPkFkZDwvYj4sIGVudGVyIHRoZSBVUkwgZm9yIHRoZSBlbmRwb2ludCwgYW5kIGNsaWNrCi0gPGI+R288L2I+LiBUaGUgU3RhdHVzIHBhbmUgc2hvdWxkIHNheSB0aGF0IHRoZSBlbmRwb2ludHMgd2VyZSBzdWNjZXNzZnVsbHkKLXVwZGF0ZWQuIFRvIHJlbW92ZSBhbiBlbmRwb2ludCwgc2VsZWN0IGl0cyBjaGVja2JveCwgYW5kIGNsaWNrICA8Yj5SZW1vdmU8L2I+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxwb3N0cmVxPjxub3RlPjxkcmFmdC1jb21tZW50PjI4MjQxMyAocmVmIDI3OTIwOSk8L2RyYWZ0LWNvbW1lbnQ+V2hlbiB0aGUKLVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBsb2FkcyBXU0RMIGZpbGVzIHRoYXQgdXNlIG11bHRpcGxlIGlubGluZSBzY2hlbWFzLCB3YXJuaW5nCi1tZXNzYWdlcyB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdHlwZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBhY3Jvc3MgdGhlc2Ugc2NoZW1hcy4KLVRoZSB3YXJuaW5nIG1lc3NhZ2Ugd2lsbCBiZSBzaW1pbGFyIHRvOiA8Y29kZXBoPlJlZmVyZW5jZSBvZiB0eXBlICZsdDs8aT5xdWFsaWZpZWRfdHlwZV9uYW1lPC9pPj4KLWlzbid0IHJlc29sdmVkLjwvY29kZXBoPjwvbm90ZT48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkMzllMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgZXhwbG9yaW5nLCBXZWIgc2VydmljZXMsIGV4cGxvcmluZyBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgZXhwbG9yaW5nLCBXZWIgc2VydmljZXMsIGV4cGxvcmluZyBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0d3NkbGV4cCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0d3NkbGV4cCI+PGEgbmFtZT0idHdzZGxleHAiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9oMT4KLQotCi08ZGl2PgotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczogVG8gdXNlIHRoZSBXU0RMIEV4cGxvcmVyLCB5b3UgbXVzdCBoYXZlIGEgdmFsaWQgVVJMCi1mb3IgYSBXU0RMIGRvY3VtZW50LjwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UaGUgV1NETCBFeHBsb3JlciBhbGxvd3MgeW91IHRvIGV4cGxvcmUsIGFuZCB0ZXN0IFdTREwgZG9jdW1lbnRzLgotVGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIFdTREwgRXhwbG9yZXI6PHVsPgotPGxpPlNob3cgV1NETCBkZXRhaWxzOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsZHRsaWNvbi5naWYiIGFsdD0iV1NETCBEZXRhaWxzIGljb24iIC8+PC9saT4KLQotPGxpPkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2g6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiIgYWx0PSJJbXBvcnQgV1NETCB0byB0aGUgV29ya2JlbmNoIGljb24iIC8+PC9saT4KLQotPGxpPkltcG9ydCBXU0RMIHRvIHlvdXIgZmlsZSBzeXN0ZW06ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2Zzd3NkbGljb24uZ2lmIiBhbHQ9IkltcG9ydCBXU0RMIHRvIHlvdXIgZmlsZSBzeXN0ZW0gaWNvbiIgLz48L2xpPgotCi08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQ6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzd2l6aWNvbi5naWYiIGFsdD0iTGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQgaWNvbiIgLz48L2xpPgotCi08bGk+QWRkIFdTREwgdG8gRmF2b3JpdGVzOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsZmF2aWNvbi5naWYiIGFsdD0iQWRkIFdTREwgdG8gRmF2b3JpdGVzIGljb24iIC8+PC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNDciPjxhIG5hbWU9ImQwZTQ3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV1NETCBFeHBsb3JlcjwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj4gPGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5Td2l0Y2ggdG8gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhlIGljb24gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQKLWNvcm5lciAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsaWNvbi5naWYiIGFsdD0iSWNvbiB0byBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIiIC8+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTY0Ij48YSBuYW1lPSJkMGU2NCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciB3b3Jrc3BhY2U8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gaW1wb3J0IHRoZSBXU0RMIGZpbGUgdG8gdGhlIFdvcmtiZW5jaDo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkNsaWNrIHRoaXMgaWNvbjogIDxpbWcgc3JjPSIuLi9pbWFnZXMvbXB0d3NkbGljb24uZ2lmIiBhbHQ9IkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2ggaWNvbiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlIHByb2plY3QgaW50byB3aGljaCB5b3Ugd2FudCB0byBpbXBvcnQgdGhlIFdTREwuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPklmIHlvdSB3YW50IHRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIGZyb20gdGhlIFdTREwsIHNlbGVjdCAgPHN0cm9uZz5JbXBvcnQKLWFzIGEgc2VydmljZSByZWZlcmVuY2UgdG8gYSBXU0lMIGRvY3VtZW50PC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlOTAiPjxhIG5hbWU9ImQwZTkwIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkltcG9ydGluZyBhIFdTREwgZmlsZSB0byB5b3VyIGZpbGUgc3lzdGVtPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGltcG9ydCB0aGUgV1NETCBmaWxlIHRvIHlvdXIgZmlsZSBzeXN0ZW0sIGNsaWNrIHRoaXMgaWNvbjoKLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL2Zzd3NkbGljb24uZ2lmIiBhbHQ9IkltcG9ydCBXU0RMIHRvIHlvdXIgZmlsZSBzeXN0ZW0gaWNvbiIgLz4uIFNwZWNpZnkgd2hlcmUgeW91IHdhbnQgdGhlIFdTREwgZmlsZSBzYXZlZCBvbiB5b3VyIHN5c3RlbS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU5NiI+PGEgbmFtZT0iZDBlOTYiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+TGF1bmNoaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkLCBjbGljayB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzd2l6aWNvbi5naWYiIGFsdD0iTGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQgaWNvbiIgLz4uIFlvdSBjYW4gc2VsZWN0IGlmIHlvdSB3YW50IHRvIGNyZWF0ZQotYSBXZWIgc2VydmljZSBjbGllbnQgb3IgYSBTa2VsZXRvbiBXZWIgc2VydmljZSBmcm9tIHRoZSBXU0RMIGZpbGUuIENsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvCi1sYXVuY2ggdGhlIHdpemFyZC48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMDUiPjxhIG5hbWU9ImQwZTEwNSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5BZGRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciBmYXZvcml0ZXM8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gYWRkIHRoZSBXU0RMIGZpbGUgdG8gRmF2b3JpdGVzLCBjbGljayB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxmYXZpY29uLmdpZiIgYWx0PSJBZGQgV1NETCB0byBGYXZvcml0ZXMgaWNvbiIgLz48L3A+Ci08cD4uIFRoZSBTdGF0dXMgcGFuZSBkaXNwbGF5cwotdGhhdCB0aGUgV1NETCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHlvdXIgbGlzdCBvZiBmYXZvcml0ZXMuIDwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTExMCI+PGEgbmFtZT0iZDBlMTEwIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkV4cGxvcmluZyBXU0RMIGRvY3VtZW50cyB1c2luZyB0aGUgV1NETCBFeHBsb3Jlcjo8L2gyPgotCi08ZGl2PgotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgV1NETCBNYWluIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgZW50ZXIgb3IgYnJvd3NlIHRvIGFuIGV4aXN0aW5nCi1XU0RMIFVSTCBpbiB0aGUgcmlnaHQtaGFuZCBwYW5lLCBhbmQgY2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4uIE5vdGUgdGhhdCB0aGUgRXhwbG9yZXIKLXdpbGwgb25seSBhbGxvdyB5b3UgdG8gYnJvd3NlIGZvciBXU0RMIGZpbGVzIHRoYXQgcmVzaWRlIGluIHRoZSA8c2FtcCBjbGFzcz0iY29kZXBoIj5XZWJDb250ZW50L1dTREw8L3NhbXA+IGZvbGRlcgotb2YgYSBwcm9qZWN0LiBUbyBleHBsb3JlIFdTREwgZmlsZXMgc3RvcmVkIGluIG90aGVyIGxvY2F0aW9ucyB3aXRoaW4geW91cgotd29ya3NwYWNlLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3Igc2VsZWN0IHRoZSBmaWxlIGluIHRoZSB3b3Jrc3BhY2UsCi1yaWdodC1jbGljayBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2VzIDwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj4gTGF1bmNoCi1XZWIgU2VydmljZXMgRXhwbG9yZXI8L3NwYW4+PC9zcGFuPi4gRm9yIHRoaXMgZXhhbXBsZSB0aGUgV1NETAotYmVpbmcgdXNlZCBpcyBhIFdlYiBTZXJ2aWNlIHdoaWNoIHJldHVybnMgYSB0ZW1wZXJhdHVyZSBmb3IgYW55IGVudGVyZWQgemlwCi1jb2RlLiAgIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGV4cC5naWYiIGFsdD0iIiAvPjxiciAvPiAKLVRoZSBmb2xsb3dpbmcgbm9kZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgV1NETCB0cmVlOiA8L3NwYW4+IDx1bD4KLTxsaT5UaGUgV1NETCBub2RlOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2Rsbm9kZS5naWYiIGFsdD0iV1NETCBub2RlIGljb24iIC8+PC9saT4KLQotPGxpPlRoZSBzZXJ2aWNlIG5vZGUgKHdoaWNoIHJlcHJlc2VudHMgYSBzZXJ2aWNlIGVsZW1lbnQgd2l0aGluIHRoZSBXU0RMIGZpbGUpOgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvc2Vydm5vZGUuZ2lmIiBhbHQ9IlNlcnZpY2Ugbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTxsaT5UaGUgYmluZGluZyBub2RlOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9iaW5kbm9kZS5naWYiIGFsdD0iQmluZGluZyBub2RlIGljb24iIC8+PC9saT4KLQotPGxpPlRoZSBvcGVyYXRpb24gbm9kZTogIDxpbWcgc3JjPSIuLi9pbWFnZXMvb3Bub2RlLmdpZiIgYWx0PSJPcGVyYXRpb24gbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNraW5nIHRoZSBTZXJ2aWNlIG5vZGUgaW4gdGhlIE5hdmlnYXRvciBwYW5lIChpbiB0aGlzIGV4YW1wbGUKLXRoaXMgd291bGQgYmUgdGhlICA8dHQgY2xhc3M9InN5c291dCI+VGVtcGVyYXR1cmVTZXJ2aWNlPC90dD4gbm9kZSkgZGlzcGxheXMKLWFsbCB0aGUgYmluZGluZ3MgZm9yIHRoaXMgc2VydmljZSwgYXMgd2VsbCBhcyB0aGVpciB0eXBlIGFuZCBhIGJyaWVmIGRlc2NyaXB0aW9uCi1vZiB0aGUgYmluZGluZyBpZiB0aGUgV1NETCBwcm92aWRlciBoYXMgaW5jbHVkZWQgb25lIGluIHRoZSBBY3Rpb25zIHBhbmUuCi1UaHJlZSB0eXBlcyBvZiBiaW5kaW5ncyBhcmUgc3VwcG9ydGVkOiBTT0FQLCBIVFRQIEdldCwgYW5kIEhUVFAgUG9zdC4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxzZXJ2ZGV0LmdpZiIgYWx0PSIiIC8+PGJyIC8+ICBUaGUgV1NETAotdXNlZCBpbiB0aGlzIGV4YW1wbGUgb25seSBoYXMgb25lIGJpbmRpbmcsICA8dHQgY2xhc3M9InN5c291dCI+VGVtcGVyYXR1cmVCaW5kaW5nPC90dD4sCi13aGljaCBpcyByZXByZXNlbnRlZCBhcyB0aGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5UZW1wZXJhdHVyZVBvcnRUeXBlPC90dD4gbm9kZQotaW4gdGhlIFdTREwgdHJlZSBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2tpbmcgYSBkaXNwbGF5ZWQgYmluZGluZyBvciBpdHMgbm9kZSBkaXNwbGF5cyB0aGUgV1NETCBiaW5kaW5nCi1kZXRhaWxzIGluIHRoZSBBY3Rpb25zIHBhbmUuIFRoaXMgaW5jbHVkZXMgdGhlIG9wZXJhdGlvbnMgYW5kIGVuZHBvaW50cyBhdmFpbGFibGUKLWZvciB0aGlzIHNlcnZpY2UuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsYm5kZGV0bC5naWYiIGFsdD0iIiAvPjxiciAvPiAgSW4gdGhpcyB2aWV3IHlvdSBjYW4gYWRkIG9yIHJlbW92ZSBlbmRwb2ludHMgZm9yIHRoZSBzZXJ2aWNlLiBUbwotYWRkIGFuIGVuZHBvaW50LCBjbGljayAgPHN0cm9uZz5BZGQ8L3N0cm9uZz4sIGVudGVyIHRoZSBVUkwgZm9yIHRoZSBlbmRwb2ludCwgYW5kIGNsaWNrCi0gPHN0cm9uZz5Hbzwvc3Ryb25nPi4gVGhlIFN0YXR1cyBwYW5lIHNob3VsZCBzYXkgdGhhdCB0aGUgZW5kcG9pbnRzIHdlcmUgc3VjY2Vzc2Z1bGx5Ci11cGRhdGVkLiBUbyByZW1vdmUgYW4gZW5kcG9pbnQsIHNlbGVjdCBpdHMgY2hlY2tib3gsIGFuZCBjbGljayAgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IFdoZW4gdGhlCi1XZWIgU2VydmljZXMgRXhwbG9yZXIgbG9hZHMgV1NETCBmaWxlcyB0aGF0IHVzZSBtdWx0aXBsZSBpbmxpbmUgc2NoZW1hcywgd2FybmluZwotbWVzc2FnZXMgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHR5cGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYWNyb3NzIHRoZXNlIHNjaGVtYXMuCi1UaGUgd2FybmluZyBtZXNzYWdlIHdpbGwgYmUgc2ltaWxhciB0bzogPHNhbXAgY2xhc3M9ImNvZGVwaCI+UmVmZXJlbmNlIG9mIHR5cGUgJmx0OzxlbT5xdWFsaWZpZWRfdHlwZV9uYW1lPC9lbT4mZ3Q7Ci1pc24ndCByZXNvbHZlZC48L3NhbXA+PC9kaXY+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDkyYzJjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIgotICJtYXAuZHRkIj4KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCN3c2NvbnN1bXB0aW9udCIKLXRpdGxlPSJ3c2NvbnN1bXB0aW9udCI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3VkZGkuZGl0YSIgbmF2dGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzZGx1ZC5kaXRhIiBuYXZ0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RkaXNjb3YuZGl0YSIgbmF2dGl0bGU9IkRpc2NvdmVyaW5nIGFuZCBpbXBvcnRpbmcgYSBXZWIgc2VydmljZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R3c2RsZXhwLmRpdGEiIG5hdnRpdGxlPSJFeHBsb3JpbmcgYW5kIHRlc3RpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlciI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5kaXRhIiBuYXZ0aXRsZT0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHdpdGggdGhlIFdTREwgRXhwbG9yZXIiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90dWRkaWV4cC5kaXRhIiBuYXZ0aXRsZT0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90c3RydGV4cC5kaXRhIiBuYXZ0aXRsZT0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90cmVnLmRpdGEiIG5hdnRpdGxlPSJSZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnkiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGxvZ2V4cC5kaXRhIiBuYXZ0aXRsZT0iTG9nZ2luZyBpbnRvIGEgcmVnaXN0cnkiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZHJlZy5kaXRhIiBuYXZ0aXRsZT0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RwdWJlbnQuZGl0YSIgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90cHVibGlzaC5kaXRhIiBuYXZ0aXRsZT0iUHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlIj4KLTx0b3BpY3JlZiBocmVmPSJyZWYvcnVkZGkuZGl0YSIgbmF2dGl0bGU9IkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KSI+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90dXBkYXRlLmRpdGEiIG5hdnRpdGxlPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHVucHViLmRpdGEiIG5hdnRpdGxlPSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RidXNwcm9qLmRpdGEiIG5hdnRpdGxlPSJNYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFzc2VydC5kaXRhIiBuYXZ0aXRsZT0iTWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YmttcmsuZGl0YSIgbmF2dGl0bGU9IkFkZGluZyB0byBGYXZvcml0ZXMiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGdlbndzaWwuZGl0YSIgbmF2dGl0bGU9IkdlbmVyYXRpbmcgV1NJTCI+PC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08L21hcD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNTc0MGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3Njb25zdW1wdGlvbnQiIGxhYmVsPSJ3c2NvbnN1bXB0aW9udCIgdG9waWM9ImNvbmNlcHRzL2N1ZGRpLmh0bWwiPgotPHRvcGljIGxhYmVsPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSIgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIiBocmVmPSJjb25jZXB0cy9jd3NkbHVkLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iRGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzIiBocmVmPSJ0YXNrcy90ZGlzY292Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIiIGhyZWY9InRhc2tzL3R3c2RsZXhwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIiBocmVmPSJ0YXNrcy90dGVzdHdzZGwuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwiPgotPHRvcGljIGxhYmVsPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0idGFza3MvdHN0cnRleHAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJSZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeSIgaHJlZj0idGFza3MvdHJlZy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5IiBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwiPgotPHRvcGljIGxhYmVsPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiIGhyZWY9InJlZi9ydWRkaS5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIiBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sIi8+Ci08dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiIGhyZWY9InRhc2tzL3RidXNwcm9qLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiIGhyZWY9InRhc2tzL3Rhc3NlcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlcyIgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iR2VuZXJhdGluZyBhIFdTSUwgZmlsZSIgaHJlZj0idGFza3MvdGdlbndzaWwuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyYzg1Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIgotICJtYXAuZHRkIj4KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCN3c2NvbnN1bXB0aW9udCIKLXRpdGxlPSJ3c2NvbnN1bXB0aW9udCI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHVkZGlleHAuZGl0YSIgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllcyI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHN0cnRleHAuZGl0YSIgbmF2dGl0bGU9IkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHJlZy5kaXRhIiBuYXZ0aXRsZT0iUmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5Ij48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Rsb2dleHAuZGl0YSIgbmF2dGl0bGU9IkxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5Ij48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRyZWcuZGl0YSIgbmF2dGl0bGU9IkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90cHViZW50LmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHB1Ymxpc2guZGl0YSIgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSI+Ci08dG9waWNyZWYgaHJlZj0icmVmL3J1ZGRpLmRpdGEiIG5hdnRpdGxlPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHVwZGF0ZS5kaXRhIiBuYXZ0aXRsZT0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1bnB1Yi5kaXRhIiBuYXZ0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YnVzcHJvai5kaXRhIiBuYXZ0aXRsZT0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Rhc3NlcnQuZGl0YSIgbmF2dGl0bGU9Ik1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGJrbXJrLmRpdGEiIG5hdnRpdGxlPSJBZGRpbmcgdG8gRmF2b3JpdGVzIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZTYwYjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGlua190bz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbCN3c2NvbnN1bXB0aW9udCIgbGFiZWw9IndzY29uc3VtcHRpb250IiB0b3BpYz0idGFza3MvdHVkZGlleHAuaHRtbCI+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllcyIgaHJlZj0idGFza3MvdHVkZGlleHAuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBocmVmPSJ0YXNrcy90c3RydGV4cC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5IiBocmVmPSJ0YXNrcy90cmVnLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iTG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnkiIGhyZWY9InRhc2tzL3Rsb2dleHAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBocmVmPSJ0YXNrcy90YWRkcmVnLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSIgaHJlZj0idGFza3MvdHB1YmVudC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSIgaHJlZj0idGFza3MvdHB1Ymxpc2guaHRtbCI+Ci08dG9waWMgbGFiZWw9IkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KSIgaHJlZj0icmVmL3J1ZGRpLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiIGhyZWY9InRhc2tzL3R1cGRhdGUuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSIgaHJlZj0idGFza3MvdHVucHViLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyIgaHJlZj0idGFza3MvdGJ1c3Byb2ouaHRtbCIvPgotPHRvcGljIGxhYmVsPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIgaHJlZj0idGFza3MvdGFzc2VydC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzIiBocmVmPSJ0YXNrcy90YmttcmsuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YTdiMjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyXzEuMC4wLmphcgotYmFrCi10ZW1wCi1idWlsZC54bWwKLW91dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwY2ZlZjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9Eb2NCdWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMDVjMzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvRG9jQnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIAotCi0JVGhpcyBzY3JpcHQgYnVpbGQgdGhlIEhlbHAgcGx1Zy1pbiBieSB0cmFuc2Zvcm1pbmcgdGhlIERJVEEgc291cmNlIGZpbGVzIGludG8gSFRNTC4KLQkKLQlUbyB1c2UgdGhpcyBzY3JpcHQsIHlvdSBtdXN0IGluc3RhbGwgRElUQS1PVCBvbiB5b3VyIG1hY2hpbmUgaW4gdGhlIGRpcmVjdG9yeQotCWRlZmluZWQgYnkgdGhlIGRpdGEub3QuZGlyIHByb3BlcnR5LgotCQotCVJ1biB0aGUgZGVmYXVsdCB0YXJnZXQgYWZ0ZXIgeW91IGVkaXQgdGhlIERJVEEgc291cmNlIGZpbGVzIHRvIHJlZ2VuZXJhdGUgdGhlIEhUTUwuCi0JCi0JVG8gY3VzdG9taXplIHRoaXMgc2NyaXB0IGZvciBvdGhlciBIZWxwIHBsdWctaW5zLCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBhcmdzLmlucHV0IHByb3BlcnR5Ci0JdG8gYmUgdGhlIERJVEEgbWFwIGZpbGUgZm9yIHRoZSBwbHVnLWluLgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBsaW5rcyB0byBzaWJsaW5nIEhlbHAgcGx1Zy1pbnMgaGF2ZSBzY29wZT0icGVlciIsIG90aGVyd2lzZSB0aGUKLQlvdXRwdXQgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aWxsIGJlIHNoaWZ0ZWQgaW5jb3JyZWN0bHkuCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IHlvdSBoYW5kIGNvZGUgeW91ciBwbHVnaW4ueG1sIGZpbGUgaW4gbXlwbHVnaW4ueG1sLiBUaGlzIGZpbGUKLQl3aWxsIGJlIGNvcGllZCBvdmVyIHRoZSBnZW5lcmF0ZWQgcGx1Z2luLnhtbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGJlaW5nIGdlbmVyYXRlZCBjb3JyZWN0bHkKLQlieSBESVRBLU9ULgotCQotCUNoYW5nZUxvZzoKLQkyMDA2LTA0LTA1IEFydGh1ciBSeW1hbiA8cnltYW5AY2EuaWJtLmNvbT4KLQktIENyZWF0ZWQuCi0JMjAwOC0wMS0wOSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgZm9yIG5ldyBESVRBLU9UIHZlcnNpb24KLS0tPgotPHByb2plY3QgbmFtZT0iZWNsaXBzZWhlbHAiIGRlZmF1bHQ9ImFsbCI+Ci0KLQk8cHJvcGVydHkgbmFtZT0iZGl0YS5vdC5kaXIiIGxvY2F0aW9uPSJDOi9ESVRBLU9UMS4yLjIiIC8+Ci0KLQk8cGF0aCBpZD0iZG9zdC5jbGFzcy5wYXRoIj4KLQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9bGliJHtmaWxlLnNlcGFyYXRvcn1kb3N0LmphciIgLz4KLQk8L3BhdGg+Ci0KLQk8dGFza2RlZiBuYW1lPSJpbnRlZ3JhdGUiIGNsYXNzbmFtZT0ib3JnLmRpdGEuZG9zdC5wbGF0Zm9ybS5JbnRlZ3JhdG9yVGFzayI+Ci0JCTxjbGFzc3BhdGggcmVmaWQ9ImRvc3QuY2xhc3MucGF0aCIgLz4KLQk8L3Rhc2tkZWY+Ci0JPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImludGVncmF0ZSwgZWNsaXBzZWhlbHAiPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iaW50ZWdyYXRlIj4KLQkJPGludGVncmF0ZSBkaXRhZGlyPSIke2RpdGEub3QuZGlyfSIgLz4KLQk8L3RhcmdldD4KLQotCTwhLS0gcmV2aXNlIGJlbG93IGhlcmUgLS0+Ci0JPHRhcmdldCBuYW1lPSJlY2xpcHNlaGVscCI+Ci0JCTxhbnQgYW50ZmlsZT0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWNvbmR1Y3Rvci54bWwiIHRhcmdldD0iaW5pdCIgZGlyPSIke2RpdGEub3QuZGlyfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jb3B5Y3NzIiB2YWx1ZT0ibm8iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jc3NwYXRoIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS5wcm92aWRlciIgdmFsdWU9IkVjbGlwc2Uub3JnIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS52ZXJzaW9uIiB2YWx1ZT0iMy4zLjAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5pbnB1dCIgbG9jYXRpb249IndlYnNlcnZpY2VfdG9jLmRpdGFtYXAiIC8+IAotCQkJPHByb3BlcnR5IG5hbWU9ImNsZWFuLnRlbXAiIHZhbHVlPSJ0cnVlIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEuZXh0bmFtZSIgdmFsdWU9Ii5kaXRhIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEudGVtcC5kaXIiIGxvY2F0aW9uPSJ0ZW1wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC5kaXIiIGxvY2F0aW9uPSIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjM2MGM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzk1ZTU3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdlYnNlcnZpY2VfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgcmVmLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YSxcCi0gICAgICAgICAgICAgICByZWYvKi5kaXRhCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2I1YjI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjamF4cnBjIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkpBWC1SUEM8L3RpdGxlPgotPHNob3J0ZGVzYz5KQVgtUlBDIHN0YW5kcyBmb3IgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMKLUpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMKLShBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0Ci11c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gdG8KLVdTREwgYW5kIFdTREwgdG8gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcKLVdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkCi1jbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMKLW9uIG90aGVyIHN5c3RlbXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkpBWC1SUEM8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkpBWC1SUEM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5UaGUgY3VycmVudCByZWxlYXNlIG9mIEpBWC1SUEMgcmVxdWlyZXMgdGhlIHN1cHBvcnQgb2YgU09BUCBvdmVyIEhUVFAgZm9yCi1pbnRlcm9wZXJhYmlsaXR5IHB1cnBvc2VzLiBUaGUgU09BUCBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWVzc2FnZSBzdHJ1Y3R1cmUsCi1lbmNvZGluZyBydWxlcywgYW5kIGNvbnZlbnRpb25zIGZvciBleGNoYW5naW5nIGluZm9ybWF0aW9uIGluIHRoZSBSUEMgcHJvZ3JhbW1pbmcKLW1vZGVsLiBUaGVzZSBjYWxscyBhbmQgcmVzcG9uc2VzIGFyZSB0cmFuc21pdHRlZCBhcyBTT0FQIG1lc3NhZ2VzIG92ZXIgSFRUUC4KLUluIHRoaXMgcmVsZWFzZSwgSkFYLVJQQyBzdXBwb3J0cyBTT0FQIDEuMSBhbmQgSFRUUCAxLjEuIEZvciBtb3JlIGluZm9ybWF0aW9uCi1vbiBTT0FQLCByZWZlciB0byA8eHJlZiBocmVmPSJjc29hcC5kaXRhIiBzY29wZT0ibG9jYWwiPjwveHJlZj4uPC9wPgotPHA+QWx0aG91Z2ggdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgbWVjaGFuaXNtcyAoZm9yIGV4YW1wbGUsIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gdG8KLVdTREwgc2VyaWFsaXphdGlvbiwgV1NETCB0byA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGRlc2VyaWFsaXphdGlvbiwgcHJvdG9jb2wgYW5kIHRyYW5zcG9ydCkKLWFyZSB2ZXJ5IGNvbXBsZXgsIHRoZSBBUEkgaGlkZXMgdGhpcyBjb21wbGV4aXR5IGZyb20gdGhlIGFwcGxpY2F0aW9uIGRldmVsb3Blci4KLU9uIHRoZSBzZXJ2ZXIgc2lkZSwgdGhlIGRldmVsb3BlciBjYW4gcHJvdmlkZSBhIFNlcnZpY2UgRW5kcG9pbnQgSW50ZXJmYWNlCi0oU0VJKTsgYWx0ZXJuYXRlbHkgYW4gU0VJIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6cmRzLiBBbgotU0VJIGlzIGFuIGludGVyZmFjZSB3cml0dGVuIGluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgc3BlY2lmaWVzCi10aGUgcmVtb3RlIHByb2NlZHVyZXMgb2YgYSBXZWIgc2VydmljZS4gVGhlIGRldmVsb3BlciBhbHNvIHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbgotb2YgYSBXZWIgc2VydmljZSwgaW4gdGhlIGZvcm0gb2Ygb25lIG9yIG1vcmUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IG1ldGhvZHMgb2YgdGhlCi1zYW1lIHNpZ25hdHVyZSBhcyB0aG9zZSBvbiB0aGUgU0VJLiBDbGllbnQgcHJvZ3JhbXMgYXJlIGFsc28gZWFzeSB0byBjb2RlLgotQSBjbGllbnQgY3JlYXRlcyBhIHByb3h5LCBhIGxvY2FsIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24KLWFuZCB0aGUgU0VJLCBhbmQgdGhlbiBzaW1wbHkgaW52b2tlcyBtZXRob2RzIG9uIHRoZSBwcm94eS48L3A+Ci08cD5KQVgtUlBDIGlzIGhpZ2hseSBpbnRlcm9wZXJhYmxlOiBhIEpBWC1SUEMgY2xpZW50IGNhbiBhY2Nlc3MgYSBXZWIgc2VydmljZQotdGhhdCBpcyBub3QgcnVubmluZyBvbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwbGF0Zm9ybSBhbmQgdmljZSB2ZXJzYS4gVGhpcyBmbGV4aWJpbGl0eQotaXMgcG9zc2libGUgYmVjYXVzZSBKQVgtUlBDIHVzZXMgU09BUCBvdmVyIEhUVFAsIGFuZCB0aGUgV2ViIFNlcnZpY2UgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKS4gSkFYLVJQQyB3YXMgZGVzaWduZWQgdG8gc3VwcG9ydCBXUy1JLjwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEpBWC1SUEMsIHJlZmVyIHRvIHRoZSAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDEiCi1zY29wZT0iZXh0ZXJuYWwiPm9mZmljaWFsIEpTUiAxMDEgc3BlY2lmaWNhdGlvbnM8L3hyZWY+LjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjanNyMTA5LmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMzk1ZTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSkFYLVJQQyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJKQVgtUlBDIHN0YW5kcyBmb3IgSmF2YSBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMgSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIEphdmEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcyAoQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdCB1c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8gV1NETCBhbmQgV1NETCB0byBKYXZhIG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIEphdmEgcGxhdGZvcm0uIE9mdGVuIHVzZWQgaW4gYSBkaXN0cmlidXRlZCBjbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMgb24gb3RoZXIgc3lzdGVtcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSkFYLVJQQyBzdGFuZHMgZm9yIEphdmEgQVBJIGZvciBYTUwtYmFzZWQgUlBDLCBhbHNvIGtub3duIGFzIEpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBKYXZhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMgKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQgdXNlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgKFJQQykgYW5kIFhNTC4gSXQgc3RhbmRhcmRpemVzIHRoZSBKYXZhIHRvIFdTREwgYW5kIFdTREwgdG8gSmF2YSBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLiBPZnRlbiB1c2VkIGluIGEgZGlzdHJpYnV0ZWQgY2xpZW50L3NlcnZlciBtb2RlbCwgYW4gUlBDIG1lY2hhbmlzbSBlbmFibGVzIGNsaWVudHMgdG8gZXhlY3V0ZSBwcm9jZWR1cmVzIG9uIG90aGVyIHN5c3RlbXMuIiAvPgotPG1ldGEgY29udGVudD0iSkFYLVJQQywgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSkFYLVJQQywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjanNyMTA5Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjamF4cnBjIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+SkFYLVJQQzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY2pheHJwYyI+PGEgbmFtZT0iY2pheHJwYyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+SkFYLVJQQzwvaDE+Ci0KLQotCi08ZGl2PjxwPkpBWC1SUEMgc3RhbmRzIGZvciBKYXZh4oSiIEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcwotSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIEphdmEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcwotKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQKLXVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgSmF2YSB0bwotV1NETCBhbmQgV1NETCB0byBKYXZhIG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZwotV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLiBPZnRlbiB1c2VkIGluIGEgZGlzdHJpYnV0ZWQKLWNsaWVudC9zZXJ2ZXIgbW9kZWwsIGFuIFJQQyBtZWNoYW5pc20gZW5hYmxlcyBjbGllbnRzIHRvIGV4ZWN1dGUgcHJvY2VkdXJlcwotb24gb3RoZXIgc3lzdGVtcy48L3A+Ci0KLTxwPlRoZSBjdXJyZW50IHJlbGVhc2Ugb2YgSkFYLVJQQyByZXF1aXJlcyB0aGUgc3VwcG9ydCBvZiBTT0FQIG92ZXIgSFRUUCBmb3IKLWludGVyb3BlcmFiaWxpdHkgcHVycG9zZXMuIFRoZSBTT0FQIHNwZWNpZmljYXRpb24gZGVmaW5lcyBtZXNzYWdlIHN0cnVjdHVyZSwKLWVuY29kaW5nIHJ1bGVzLCBhbmQgY29udmVudGlvbnMgZm9yIGV4Y2hhbmdpbmcgaW5mb3JtYXRpb24gaW4gdGhlIFJQQyBwcm9ncmFtbWluZwotbW9kZWwuIFRoZXNlIGNhbGxzIGFuZCByZXNwb25zZXMgYXJlIHRyYW5zbWl0dGVkIGFzIFNPQVAgbWVzc2FnZXMgb3ZlciBIVFRQLgotSW4gdGhpcyByZWxlYXNlLCBKQVgtUlBDIHN1cHBvcnRzIFNPQVAgMS4xIGFuZCBIVFRQIDEuMS4gRm9yIG1vcmUgaW5mb3JtYXRpb24KLW9uIFNPQVAsIHJlZmVyIHRvIDxhIGhyZWY9ImNzb2FwLmh0bWwiIHRpdGxlPSJTT0FQIChmb3JtZXJseSBrbm93biBhcyBTaW1wbGUgT2JqZWN0IEFjY2VzcyBQcm90b2NvbCkgaXMgYSBsaWdodHdlaWdodCYjMTA7cHJvdG9jb2wgZm9yIHRoZSBleGNoYW5nZSBvZiBpbmZvcm1hdGlvbiBpbiBhIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiYjMTA7QSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLiYjMTA7U09BUCBtZXNzYWdlcyBjYW4gYmUgY29tYmluZWQgdG8gcGVyZm9ybSByZXF1ZXN0L3Jlc3BvbnNlIHBhdHRlcm5zLiAiPlNPQVA8L2E+LjwvcD4KLQotPHA+QWx0aG91Z2ggdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgbWVjaGFuaXNtcyAoZm9yIGV4YW1wbGUsIEphdmEgdG8KLVdTREwgc2VyaWFsaXphdGlvbiwgV1NETCB0byBKYXZhIGRlc2VyaWFsaXphdGlvbiwgcHJvdG9jb2wgYW5kIHRyYW5zcG9ydCkKLWFyZSB2ZXJ5IGNvbXBsZXgsIHRoZSBBUEkgaGlkZXMgdGhpcyBjb21wbGV4aXR5IGZyb20gdGhlIGFwcGxpY2F0aW9uIGRldmVsb3Blci4KLU9uIHRoZSBzZXJ2ZXIgc2lkZSwgdGhlIGRldmVsb3BlciBjYW4gcHJvdmlkZSBhIFNlcnZpY2UgRW5kcG9pbnQgSW50ZXJmYWNlCi0oU0VJKTsgYWx0ZXJuYXRlbHkgYW4gU0VJIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6cmRzLiBBbgotU0VJIGlzIGFuIGludGVyZmFjZSB3cml0dGVuIGluIHRoZSBKYXZhIHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgc3BlY2lmaWVzCi10aGUgcmVtb3RlIHByb2NlZHVyZXMgb2YgYSBXZWIgc2VydmljZS4gVGhlIGRldmVsb3BlciBhbHNvIHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbgotb2YgYSBXZWIgc2VydmljZSwgaW4gdGhlIGZvcm0gb2Ygb25lIG9yIG1vcmUgSmF2YSBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IG1ldGhvZHMgb2YgdGhlCi1zYW1lIHNpZ25hdHVyZSBhcyB0aG9zZSBvbiB0aGUgU0VJLiBDbGllbnQgcHJvZ3JhbXMgYXJlIGFsc28gZWFzeSB0byBjb2RlLgotQSBjbGllbnQgY3JlYXRlcyBhIHByb3h5LCBhIGxvY2FsIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24KLWFuZCB0aGUgU0VJLCBhbmQgdGhlbiBzaW1wbHkgaW52b2tlcyBtZXRob2RzIG9uIHRoZSBwcm94eS48L3A+Ci0KLTxwPkpBWC1SUEMgaXMgaGlnaGx5IGludGVyb3BlcmFibGU6IGEgSkFYLVJQQyBjbGllbnQgY2FuIGFjY2VzcyBhIFdlYiBzZXJ2aWNlCi10aGF0IGlzIG5vdCBydW5uaW5nIG9uIHRoZSBKYXZhIHBsYXRmb3JtIGFuZCB2aWNlIHZlcnNhLiBUaGlzIGZsZXhpYmlsaXR5Ci1pcyBwb3NzaWJsZSBiZWNhdXNlIEpBWC1SUEMgdXNlcyBTT0FQIG92ZXIgSFRUUCwgYW5kIHRoZSBXZWIgU2VydmljZSBEZXNjcmlwdGlvbgotTGFuZ3VhZ2UgKFdTREwpLiBKQVgtUlBDIHdhcyBkZXNpZ25lZCB0byBzdXBwb3J0IFdTLUkuPC9wPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBKQVgtUlBDLCByZWZlciB0byB0aGUgIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwMSIgdGFyZ2V0PSJfYmxhbmsiPm9mZmljaWFsIEpTUiAxMDEgc3BlY2lmaWNhdGlvbnM8L2E+LjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY2pzcjEwOS5odG1sIiB0aXRsZT0iSlNSIDEwOSAoSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzKSBkZWZpbmVzIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlIEphdmEgRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24gY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJyBpbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLiI+SlNSIDEwOSAtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGIwYmE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nqc3IxMDkuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjanNyMTA5IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5KU1IgMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nCi1tb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlCi1KYXZhIEVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQgQ2xpZW50IEFwcGxpY2F0aW9uCi1jb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkpTUiAxMDkgSmF2YSBzcGVjaWZpY2F0aW9uPC9pbmRleHRlcm0+PGluZGV4dGVybT5KU1IKLTkyMSBKYXZhIHNwZWNpZmljYXRpb248L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+SmF2YSBzcGVjaWZpY2F0aW9uCi1yZXF1ZXN0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5KU1IgMTA5IGJ1aWxkcyBvbiB0b3Agb2YgSkFYLVJQQyB0byBjb3ZlciB0aGUgdXNlIG9mIEpBWC1SUEMgaW4gYSBKYXZhCi1FRSBlbnZpcm9ubWVudCwgYXMgd2VsbCBhcyB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGRlcGxveW1lbnQgb2YgV2ViIHNlcnZpY2VzCi10byBhIEphdmEgRUUgYXBwbGljYXRpb24gc2VydmVyLiBKU1IgMTA5IGRlZmluZXMgYSBzZXQgb2YgWE1MLWJhc2VkIGRlcGxveW1lbnQKLWRlc2NyaXB0b3JzIHRvIHN0YW5kYXJkaXplIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50IGRlcGxveW1lbnRzCi1pbiB0aGUgSjJFRSBlbnZpcm9ubWVudC4gSlNSIDkyMSB3YXMgYSBtYWludGVuYW5jZSByZXZpc2lvbiBvZiBKU1IgMTA5LCBhbmQKLWhhcyBzaW5jZSBiZWVuIHJlcGxhY2VkIGJ5IHRoZSB1cGRhdGVkIHZlcnNpb24gb2YgSlNSIDEwOS48L3A+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG86ICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwOSIKLXNjb3BlPSJleHRlcm5hbCI+SlNSIDEwOSwgIkltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlczwveHJlZj4gYW5kIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHNjb3BlPSJleHRlcm5hbCI+SlNSIDkyMTogSW1wbGVtZW50aW5nCi1FbnRlcnByaXNlIFdlYiBTZXJ2aWNlcyAxLjE8L3hyZWY+LjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjamF4cnBjLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NDUwMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSlNSIDEwOSAtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJKU1IgMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUgSmF2YSBFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkpTUiAxMDkgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lcyB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwgYW5kIHJ1bi10aW1lIGFyY2hpdGVjdHVyZSB0byBkZXBsb3kgYW5kIGxvb2sgdXAgV2ViIHNlcnZpY2VzIGluIHRoZSBKYXZhIEVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQgQ2xpZW50IEFwcGxpY2F0aW9uIGNvbnRhaW5lcnMuIE9uZSBvZiBpdHMgbWFpbiBnb2FscyBpcyB0byBlbnN1cmUgdmVuZG9ycycgaW1wbGVtZW50YXRpb25zIGludGVyb3BlcmF0ZS4iIC8+Ci08bWV0YSBjb250ZW50PSJKU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbiwgSlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb24sIFdlYiBzZXJ2aWNlcywgSmF2YSBzcGVjaWZpY2F0aW9uIHJlcXVlc3RzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSlNSIDEwOSBKYXZhIHNwZWNpZmljYXRpb24sIEpTUiA5MjEgSmF2YSBzcGVjaWZpY2F0aW9uLCBXZWIgc2VydmljZXMsIEphdmEgc3BlY2lmaWNhdGlvbiByZXF1ZXN0cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY2pheHJwYy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2pzcjEwOSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNqc3IxMDkiPjxhIG5hbWU9ImNqc3IxMDkiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L2gxPgotCi0KLQotPGRpdj48cD5KU1IgMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nCi1tb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlCi1KYXZhIEVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQgQ2xpZW50IEFwcGxpY2F0aW9uCi1jb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuPC9wPgotCi08cD5KU1IgMTA5IGJ1aWxkcyBvbiB0b3Agb2YgSkFYLVJQQyB0byBjb3ZlciB0aGUgdXNlIG9mIEpBWC1SUEMgaW4gYSBKYXZhCi1FRSBlbnZpcm9ubWVudCwgYXMgd2VsbCBhcyB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGRlcGxveW1lbnQgb2YgV2ViIHNlcnZpY2VzCi10byBhIEphdmEgRUUgYXBwbGljYXRpb24gc2VydmVyLiBKU1IgMTA5IGRlZmluZXMgYSBzZXQgb2YgWE1MLWJhc2VkIGRlcGxveW1lbnQKLWRlc2NyaXB0b3JzIHRvIHN0YW5kYXJkaXplIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50IGRlcGxveW1lbnRzCi1pbiB0aGUgSjJFRSBlbnZpcm9ubWVudC4gSlNSIDkyMSB3YXMgYSBtYWludGVuYW5jZSByZXZpc2lvbiBvZiBKU1IgMTA5LCBhbmQKLWhhcyBzaW5jZSBiZWVuIHJlcGxhY2VkIGJ5IHRoZSB1cGRhdGVkIHZlcnNpb24gb2YgSlNSIDEwOS48L3A+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwOSIgdGFyZ2V0PSJfYmxhbmsiPkpTUiAxMDksICJJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXM8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHRhcmdldD0iX2JsYW5rIj5KU1IgOTIxOiBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMgMS4xPC9hPi48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImNqYXhycGMuaHRtbCIgdGl0bGU9IkpBWC1SUEMgc3RhbmRzIGZvciBKYXZhIEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcyBKU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgSmF2YSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzIChBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0IHVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgSmF2YSB0byBXU0RMIGFuZCBXU0RMIHRvIEphdmEgbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgSmF2YSBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkIGNsaWVudC9zZXJ2ZXIgbW9kZWwsIGFuIFJQQyBtZWNoYW5pc20gZW5hYmxlcyBjbGllbnRzIHRvIGV4ZWN1dGUgcHJvY2VkdXJlcyBvbiBvdGhlciBzeXN0ZW1zLiI+SkFYLVJQQzwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzdjMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3NvYXAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U09BUDwvdGl0bGU+Ci08c2hvcnRkZXNjPlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0Ci1wcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuCi1BIFNPQVAgbWVzc2FnZSBpcyBhIHRyYW5zbWlzc2lvbiBvZiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VuZGVyIHRvIGEgcmVjZWl2ZXIuCi1TT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIDwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5TT0FQPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPlNPQVA8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5TT0FQIGlzIHRyYW5zcG9ydCBpbmRlcGVuZGVudCBidXQgaXMgbW9zdCBjb21tb25seSBjYXJyaWVkIG92ZXIgSFRUUCBpbgotb3JkZXIgdG8gcnVuIHdpdGggdGhlIGV4aXN0aW5nIEludGVybmV0IGluZnJhc3RydWN0dXJlLiZuYnNwOyBTT0FQIGVuYWJsZXMKLXRoZSBiaW5kaW5nIGFuZCB1c2FnZSBvZiBkaXNjb3ZlcmVkIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIG1lc3NhZ2UgcGF0aAotZm9yIHJvdXRpbmcgbWVzc2FnZXMuIFNPQVAgaXMgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIgc2VydmljZXMuIFRoZSB3b3JrYmVuY2gKLXN1cHBvcnRzIFNPQVAgMS4xLjwvcD4KLTxwPlNPQVAgaXMgYW4gWE1MLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyB0aHJlZSBwYXJ0cyB0byBldmVyeSBtZXNzYWdlOjwvcD4KLTx1bD4KLTxsaT4gPHVpY29udHJvbD5FbnZlbG9wZS48L3VpY29udHJvbD4mbmJzcDsgVGhlIGVudmVsb3BlIGRlZmluZXMgYSBmcmFtZXdvcmsKLWZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlIGFuZCBob3cgdG8gcHJvY2VzcyBpdC4mbmJzcDsgQSBTT0FQIG1lc3NhZ2UKLWlzIGFuIGVudmVsb3BlIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIGhlYWRlcnMgYW5kIGV4YWN0bHkgb25lIGJvZHkuJm5ic3A7Ci1UaGUgZW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQsIHByb3ZpZGluZyBhIGNvbnRhaW5lcgotZm9yIGNvbnRyb2wgaW5mb3JtYXRpb24sIHRoZSBhZGRyZXNzIG9mIGEgbWVzc2FnZSwgYW5kIHRoZSBtZXNzYWdlIGl0c2VsZi4mbmJzcDsKLUhlYWRlcnMgdHJhbnNwb3J0IGFueSBjb250cm9sIGluZm9ybWF0aW9uIHN1Y2ggYXMgcXVhbGl0eS1vZi1zZXJ2aWNlIGF0dHJpYnV0ZXMuJm5ic3A7Ci1UaGUgYm9keSBjb250YWlucyB0aGUgbWVzc2FnZSBpZGVudGlmaWNhdGlvbiBhbmQgaXRzIHBhcmFtZXRlcnMuJm5ic3A7IEJvdGgKLXRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keSBhcmUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RW5jb2RpbmcgcnVsZXMuPC91aWNvbnRyb2w+Jm5ic3A7IFRoZSBzZXQgb2YgZW5jb2RpbmcgcnVsZXMKLWV4cHJlc3NlcyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZCBkYXRhIHR5cGVzLiBFbmNvZGluZyBydWxlcyBkZWZpbmUKLWEgc2VyaWFsaXphdGlvbiBtZWNoYW5pc20gdGhhdCBjYW4gYmUgdXNlZCB0byBleGNoYW5nZSBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy4gU09BUCBkZWZpbmVzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGF0YSB0eXBlIHNjaGVtZQotYmFzZWQgb24gWFNEIHBsdXMgZW5jb2RpbmcgcnVsZXMgZm9yIGFsbCBkYXRhIHR5cGVzIGRlZmluZWQgYWNjb3JkaW5nIHRvIHRoaXMKLW1vZGVsLiBTT0FQIGVuY29kaW5nIGlzIG5vdCBXUy1JIGNvbXBsaWFudCBhbmQgdGh1cyB0aGUgTGl0ZXJhbCB1c2UgKHdoaWNoCi1pcyBubyBlbmNvZGluZykgaXMgc3VnZ2VzdGVkIGZvciBpbnRlcm9wZXJhYmxlIFdlYiBzZXJ2aWNlcyBhbmQgcmVxdWlyZWQgZm9yCi1XUy1JIGNvbXBsaWFuY2UuPC9saT4KLTxsaT4gPHVpY29udHJvbD5Db21tdW5pY2F0aW9uIHN0eWxlcy48L3VpY29udHJvbD4gQ29tbXVuaWNhdGlvbnMgY2FuIGZvbGxvdwotYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgKFJQQykgb3IgbWVzc2FnZS1vcmllbnRlZCAoRG9jdW1lbnQpIGZvcm1hdC4mbmJzcDsKLVRoZXNlIGFyZSBkaXNjdXNzZWQgYmVsb3cuPC9saT4KLTwvdWw+Ci08c2VjdGlvbj48dGl0bGU+QmluZGluZyBzdHlsZXM8L3RpdGxlPjxwPlNPQVAgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCBjb21tdW5pY2F0aW9uCi1zdHlsZXM6PC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+UmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpOjwvdWljb250cm9sPiZuYnNwOwotSW52b2NhdGlvbiBvZiBhbiBvcGVyYXRpb24gcmV0dXJuaW5nIGEgcmVzdWx0LiBUeXBpY2FsbHkgdXNlZCB3aXRoIFNPQVAgZW5jb2RpbmcsCi13aGljaCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPjxwPiA8dWljb250cm9sPkRvY3VtZW50IFN0eWxlOjwvdWljb250cm9sPiZuYnNwOwotQWxzbyBrbm93biBhcyBkb2N1bWVudC1vcmllbnRlZCBvciBtZXNzYWdlLW9yaWVudGVkIHN0eWxlLiZuYnNwOyBUaGlzIHN0eWxlCi1wcm92aWRlcyBhIGxvd2VyIGxheWVyIG9mIGFic3RyYWN0aW9uLCBhbmQgcmVxdWlyZXMgbW9yZSBwcm9ncmFtbWluZyB3b3JrLjwvcD4gPC9scT48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+RW5jb2Rpbmcgc3R5bGVzPC90aXRsZT48cD5JbiBkaXN0cmlidXRlZCBjb21wdXRpbmcgZW52aXJvbm1lbnRzLAotZW5jb2Rpbmcgc3R5bGVzIGRlZmluZSBob3cgZGF0YSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gY2FuIGJlIHRyYW5zbGF0ZWQKLXRvIGFuZCBmcm9tIGEgcGFydGljdWxhciBwcm90b2NvbCBmb3JtYXQuJm5ic3A7IFRoZSB0cmFuc2xhdGlvbiBwcm9jZXNzIGlzCi1rbm93IGFzIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi48L3A+PHA+VGhlIFNPQVAgc3BlY2lmaWNhdGlvbiBkZWZpbmVzCi10aGUgU09BUCBlbmNvZGluZyBzdHlsZTo8L3A+PGxxPiA8cD4gPHVpY29udHJvbD5TT0FQIGVuY29kaW5nOjwvdWljb250cm9sPiZuYnNwOwotVGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGUgYWxsb3dzIHlvdSB0byBzZXJpYWxpemUvZGVzZXJpYWxpemUgdmFsdWVzIG9mIGRhdGEKLXR5cGVzIGZyb20gdGhlIFNPQVAgZGF0YSBtb2RlbC4mbmJzcDsgVGhpcyBlbmNvZGluZyBzdHlsZSBpcyBkZWZpbmVkIGluIHRoZQotU09BUCAxLjEgc3RhbmRhcmQsIGFuZCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPiA8L2xxPjxwPldTREwgZGVmaW5lcyB0aGUKLUxpdGVyYWwgWE1MIGVuY29kaW5nIHN0eWxlOjwvcD48bHE+IDxwPiA8dWljb250cm9sPkxpdGVyYWwgWE1MOjwvdWljb250cm9sPiZuYnNwOwotTGl0ZXJhbCByZWZlcnMgdG8gdGhlIGZhY3QgdGhhdCB0aGUgZG9jdW1lbnQgc2hvdWxkIGJlIHJlYWQgYXMtaXMsIG9yIHVuZW5jb2RlZC4KLVRoZSBkb2N1bWVudCBpcyBzZXJpYWxpemVkIGFzIFhNSSwgbWVhbmluZyB0aGF0IHRoZSBtZXNzYWdlIFhNTCBjb21wbGllcyB3aXRoCi10aGUgU2NoZW1hIGluIHRoZSBXU0RMLiBXaGVuIHVzaW5nIExpdGVyYWwgZW5jb2RpbmcsIGVhY2ggbWVzc2FnZSBwYXJ0IHJlZmVyZW5jZXMKLWEgY29uY3JldGUgc2NoZW1hIGRlZmluaXRpb24uIExpdGVyYWwgZW5jb2RpbmcgaXMgV1MtSSBjb21wbGlhbnQuPC9wPiA8L2xxPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5EYXRhIG1vZGVsPC90aXRsZT48cD5UaGUgcHVycG9zZSBvZiB0aGUgU09BUCBkYXRhIG1vZGVsIGlzCi10byBwcm92aWRlIGEgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgYWJzdHJhY3Rpb24gZm9yIGRhdGEgdHlwZXMgdXNlZCBieSBjb21tb24KLXByb2dyYW1taW5nIGxhbmd1YWdlIHR5cGVzLiZuYnNwO0l0IGNvbnNpc3RzIG9mOjwvcD48dWw+Ci08bGk+IDx1aWNvbnRyb2w+U2ltcGxlIFhTRCB0eXBlcy48L3VpY29udHJvbD4mbmJzcDsgRm9yIGV4YW1wbGUgaW50LCBzdHJpbmcsCi1hbmQgZGF0ZS48L2xpPgotPGxpPiA8dWljb250cm9sPkNvbXBvdW5kIHR5cGVzLjwvdWljb250cm9sPiZuYnNwOyBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGNvbXBvdW5kCi10eXBlcywgIDx2YXJuYW1lPnN0cnVjdHM8L3Zhcm5hbWU+IGFuZCAgPHZhcm5hbWU+YXJyYXlzPC92YXJuYW1lPi4mbmJzcDsgU3RydWN0cwotYXJlIG5hbWVkIGFnZ3JlZ2F0ZSB0eXBlcyBpbiB3aGljaCBlYWNoIGVsZW1lbnQgaGFzIGEgdW5pcXVlIG5hbWUgb3IgWE1MIHRhZy4mbmJzcDsKLUFycmF5cyBoYXZlIGVsZW1lbnRzIHRoYXQgYXJlIGlkZW50aWZpZWQgYnkgcG9zaXRpb24sIG5vdCBieSBuYW1lLjwvbGk+Ci08L3VsPjxwPkFsbCBlbGVtZW50cyBhbmQgaWRlbnRpZmllcnMgY29tcHJpc2luZyB0aGUgU09BUCBkYXRhIG1vZGVsIGFyZSBkZWZpbmVkCi1pbiB0aGUgbmFtZXNwYWNlIFVSSS4mbmJzcDsgVGhlIFNPQVAgc3RhbmRhcmQgZGVmaW5lcyB0aGUgcnVsZXMgZm9yIGhvdyBkYXRhCi10eXBlcyBjYW4gYmUgY29uc3RydWN0ZWQuIEEgcHJvamVjdCBzcGVjaWZpYyBYTUwgc2NoZW1hIG11c3QgZGVmaW5lIHRoZSBhY3R1YWwKLWRhdGEgdHlwZXMuIFRoZSBlbGVtZW50cyBvZiB0aGUgU09BUCBzcGVjaWZpY2F0aW9uIGFyZSBkZWZpbmVkIGluICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLzwveHJlZj4gYW5kCi0gPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLzwveHJlZj48L3A+PC9zZWN0aW9uPgotPHNlY3Rpb24+PHRpdGxlPlNPQVAgaW1wbGVtZW50YXRpb25zPC90aXRsZT48cD5EaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mCi10aGUgU09BUCBwcm90b2NvbCBhcmUgYXZhaWxhYmxlIHRvZGF5LiZuYnNwOyBGb3IgZXhhbXBsZSwgdGhlIEFwYWNoZSBGb3VuZGF0aW9uCi1wcm92aWRlcyBBcGFjaGUgU09BUCwgd2hpY2ggZ3JldyBvdXQgb2YgYW4gPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIgotdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBwcm9qZWN0IGNhbGxlZCBTT0FQNEosIGFzIHdlbGwgYXMgQXBhY2hlCi1BeGlzIGFuZCB0aGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IDx0bQotdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldlYlNwaGVyZSI+V2ViU3BoZXJlPC90bT4gcnVuLXRpbWUKLWVudmlyb25tZW50LiBUaGUgcHJvdmlkZWQgV2ViIHNlcnZpY2VzIHRvb2xzIHN1cHBvcnQgQXBhY2hlIFNPQVAgMi4zLCBBeGlzCi0xLjMsIGFuZCA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gPHRtCi10bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iV2ViU3BoZXJlIj5XZWJTcGhlcmU8L3RtPiBpbXBsZW1lbnRhdGlvbnMuPC9wPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5NYXBwaW5nczwvdGl0bGU+PHA+QSBtYXBwaW5nIGRlZmluZXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbgotYSBxdWFsaWZpZWQgWE1MIGVsZW1lbnQgbmFtZSwgYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsYXNzIG5hbWUsIGFuZCBhbiBlbmNvZGluZyBzdHlsZS4mbmJzcDsKLVRoZSBtYXBwaW5nIHNwZWNpZmllcyBob3csIHVuZGVyIHRoZSBnaXZlbiBlbmNvZGluZywgYW4gaW5jb21pbmcgWE1MIGVsZW1lbnQKLXdpdGggYSBmdWxseSBxdWFsaWZpZWQgbmFtZSBpcyBjb252ZXJ0ZWQgdG8gYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsYXNzIGFuZCB2aWNlIHZlcnNhLjwvcD48cD5Gb3IgbW9yZQotaW5mb3JtYXRpb24gb24gQXBhY2hlIFNPQVAsIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy9zb2FwIgotc2NvcGU9ImV4dGVybmFsIj54bWwuYXBhY2hlLm9yZy9zb2FwPC94cmVmPiZuYnNwOyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgotU09BUCByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TT0FQIiBzY29wZT0iZXh0ZXJuYWwiPnd3dy53My5vcmcvVFIvU09BUDwveHJlZj4gPC9wPjwvc2VjdGlvbj4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48bGlua3RleHQ+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+Ci08L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTBiMDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJTT0FQIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0IHByb3RvY29sIGZvciB0aGUgZXhjaGFuZ2Ugb2YgaW5mb3JtYXRpb24gaW4gYSBkZWNlbnRyYWxpemVkLCBkaXN0cmlidXRlZCBlbnZpcm9ubWVudC4gQSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLiBTT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0IHByb3RvY29sIGZvciB0aGUgZXhjaGFuZ2Ugb2YgaW5mb3JtYXRpb24gaW4gYSBkZWNlbnRyYWxpemVkLCBkaXN0cmlidXRlZCBlbnZpcm9ubWVudC4gQSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLiBTT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIiAvPgotPG1ldGEgY29udGVudD0iU09BUCwgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlNPQVAsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjc29hcCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlNPQVA8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNzb2FwIj48YSBuYW1lPSJjc29hcCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+U09BUDwvaDE+Ci0KLQotCi08ZGl2PjxwPlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0Ci1wcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuCi1BIFNPQVAgbWVzc2FnZSBpcyBhIHRyYW5zbWlzc2lvbiBvZiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VuZGVyIHRvIGEgcmVjZWl2ZXIuCi1TT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIDwvcD4KLQotPHA+U09BUCBpcyB0cmFuc3BvcnQgaW5kZXBlbmRlbnQgYnV0IGlzIG1vc3QgY29tbW9ubHkgY2FycmllZCBvdmVyIEhUVFAgaW4KLW9yZGVyIHRvIHJ1biB3aXRoIHRoZSBleGlzdGluZyBJbnRlcm5ldCBpbmZyYXN0cnVjdHVyZS7CoCBTT0FQIGVuYWJsZXMKLXRoZSBiaW5kaW5nIGFuZCB1c2FnZSBvZiBkaXNjb3ZlcmVkIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIG1lc3NhZ2UgcGF0aAotZm9yIHJvdXRpbmcgbWVzc2FnZXMuIFNPQVAgaXMgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIgc2VydmljZXMuIFRoZSB3b3JrYmVuY2gKLXN1cHBvcnRzIFNPQVAgMS4xLjwvcD4KLQotPHA+U09BUCBpcyBhbiBYTUwtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIHRocmVlIHBhcnRzIHRvIGV2ZXJ5IG1lc3NhZ2U6PC9wPgotCi08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkVudmVsb3BlLjwvc3Bhbj7CoCBUaGUgZW52ZWxvcGUgZGVmaW5lcyBhIGZyYW1ld29yawotZm9yIGRlc2NyaWJpbmcgd2hhdCBpcyBpbiBhIG1lc3NhZ2UgYW5kIGhvdyB0byBwcm9jZXNzIGl0LsKgIEEgU09BUCBtZXNzYWdlCi1pcyBhbiBlbnZlbG9wZSBjb250YWluaW5nIHplcm8gb3IgbW9yZSBoZWFkZXJzIGFuZCBleGFjdGx5IG9uZSBib2R5LsKgCi1UaGUgZW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQsIHByb3ZpZGluZyBhIGNvbnRhaW5lcgotZm9yIGNvbnRyb2wgaW5mb3JtYXRpb24sIHRoZSBhZGRyZXNzIG9mIGEgbWVzc2FnZSwgYW5kIHRoZSBtZXNzYWdlIGl0c2VsZi7CoAotSGVhZGVycyB0cmFuc3BvcnQgYW55IGNvbnRyb2wgaW5mb3JtYXRpb24gc3VjaCBhcyBxdWFsaXR5LW9mLXNlcnZpY2UgYXR0cmlidXRlcy7CoAotVGhlIGJvZHkgY29udGFpbnMgdGhlIG1lc3NhZ2UgaWRlbnRpZmljYXRpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLsKgIEJvdGgKLXRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keSBhcmUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RW5jb2RpbmcgcnVsZXMuPC9zcGFuPsKgIFRoZSBzZXQgb2YgZW5jb2RpbmcgcnVsZXMKLWV4cHJlc3NlcyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZCBkYXRhIHR5cGVzLiBFbmNvZGluZyBydWxlcyBkZWZpbmUKLWEgc2VyaWFsaXphdGlvbiBtZWNoYW5pc20gdGhhdCBjYW4gYmUgdXNlZCB0byBleGNoYW5nZSBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy4gU09BUCBkZWZpbmVzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGF0YSB0eXBlIHNjaGVtZQotYmFzZWQgb24gWFNEIHBsdXMgZW5jb2RpbmcgcnVsZXMgZm9yIGFsbCBkYXRhIHR5cGVzIGRlZmluZWQgYWNjb3JkaW5nIHRvIHRoaXMKLW1vZGVsLiBTT0FQIGVuY29kaW5nIGlzIG5vdCBXUy1JIGNvbXBsaWFudCBhbmQgdGh1cyB0aGUgTGl0ZXJhbCB1c2UgKHdoaWNoCi1pcyBubyBlbmNvZGluZykgaXMgc3VnZ2VzdGVkIGZvciBpbnRlcm9wZXJhYmxlIFdlYiBzZXJ2aWNlcyBhbmQgcmVxdWlyZWQgZm9yCi1XUy1JIGNvbXBsaWFuY2UuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db21tdW5pY2F0aW9uIHN0eWxlcy48L3NwYW4+IENvbW11bmljYXRpb25zIGNhbiBmb2xsb3cKLWEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpIG9yIG1lc3NhZ2Utb3JpZW50ZWQgKERvY3VtZW50KSBmb3JtYXQuwqAKLVRoZXNlIGFyZSBkaXNjdXNzZWQgYmVsb3cuPC9saT4KLQotPC91bD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkJpbmRpbmcgc3R5bGVzPC9oND48cD5TT0FQIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgY29tbXVuaWNhdGlvbgotc3R5bGVzOjwvcD4KLTxibG9ja3F1b3RlPiA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpOjwvc3Bhbj7CoAotSW52b2NhdGlvbiBvZiBhbiBvcGVyYXRpb24gcmV0dXJuaW5nIGEgcmVzdWx0LiBUeXBpY2FsbHkgdXNlZCB3aXRoIFNPQVAgZW5jb2RpbmcsCi13aGljaCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPgotPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRvY3VtZW50IFN0eWxlOjwvc3Bhbj7CoAotQWxzbyBrbm93biBhcyBkb2N1bWVudC1vcmllbnRlZCBvciBtZXNzYWdlLW9yaWVudGVkIHN0eWxlLsKgIFRoaXMgc3R5bGUKLXByb3ZpZGVzIGEgbG93ZXIgbGF5ZXIgb2YgYWJzdHJhY3Rpb24sIGFuZCByZXF1aXJlcyBtb3JlIHByb2dyYW1taW5nIHdvcmsuPC9wPgotIDwvYmxvY2txdW90ZT4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+RW5jb2Rpbmcgc3R5bGVzPC9oND48cD5JbiBkaXN0cmlidXRlZCBjb21wdXRpbmcgZW52aXJvbm1lbnRzLAotZW5jb2Rpbmcgc3R5bGVzIGRlZmluZSBob3cgZGF0YSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gY2FuIGJlIHRyYW5zbGF0ZWQKLXRvIGFuZCBmcm9tIGEgcGFydGljdWxhciBwcm90b2NvbCBmb3JtYXQuwqAgVGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MgaXMKLWtub3cgYXMgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLjwvcD4KLTxwPlRoZSBTT0FQIHNwZWNpZmljYXRpb24gZGVmaW5lcwotdGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGU6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TT0FQIGVuY29kaW5nOjwvc3Bhbj7CoAotVGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGUgYWxsb3dzIHlvdSB0byBzZXJpYWxpemUvZGVzZXJpYWxpemUgdmFsdWVzIG9mIGRhdGEKLXR5cGVzIGZyb20gdGhlIFNPQVAgZGF0YSBtb2RlbC7CoCBUaGlzIGVuY29kaW5nIHN0eWxlIGlzIGRlZmluZWQgaW4gdGhlCi1TT0FQIDEuMSBzdGFuZGFyZCwgYW5kIGlzIG5vdCBXUy1JIGNvbXBsaWFudC48L3A+Ci0gPC9ibG9ja3F1b3RlPgotPHA+V1NETCBkZWZpbmVzIHRoZQotTGl0ZXJhbCBYTUwgZW5jb2Rpbmcgc3R5bGU6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5MaXRlcmFsIFhNTDo8L3NwYW4+wqAKLUxpdGVyYWwgcmVmZXJzIHRvIHRoZSBmYWN0IHRoYXQgdGhlIGRvY3VtZW50IHNob3VsZCBiZSByZWFkIGFzLWlzLCBvciB1bmVuY29kZWQuCi1UaGUgZG9jdW1lbnQgaXMgc2VyaWFsaXplZCBhcyBYTUksIG1lYW5pbmcgdGhhdCB0aGUgbWVzc2FnZSBYTUwgY29tcGxpZXMgd2l0aAotdGhlIFNjaGVtYSBpbiB0aGUgV1NETC4gV2hlbiB1c2luZyBMaXRlcmFsIGVuY29kaW5nLCBlYWNoIG1lc3NhZ2UgcGFydCByZWZlcmVuY2VzCi1hIGNvbmNyZXRlIHNjaGVtYSBkZWZpbml0aW9uLiBMaXRlcmFsIGVuY29kaW5nIGlzIFdTLUkgY29tcGxpYW50LjwvcD4KLSA8L2Jsb2NrcXVvdGU+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkRhdGEgbW9kZWw8L2g0PjxwPlRoZSBwdXJwb3NlIG9mIHRoZSBTT0FQIGRhdGEgbW9kZWwgaXMKLXRvIHByb3ZpZGUgYSBsYW5ndWFnZS1pbmRlcGVuZGVudCBhYnN0cmFjdGlvbiBmb3IgZGF0YSB0eXBlcyB1c2VkIGJ5IGNvbW1vbgotcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdHlwZXMuwqBJdCBjb25zaXN0cyBvZjo8L3A+Ci08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNpbXBsZSBYU0QgdHlwZXMuPC9zcGFuPsKgIEZvciBleGFtcGxlIGludCwgc3RyaW5nLAotYW5kIGRhdGUuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db21wb3VuZCB0eXBlcy48L3NwYW4+wqAgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBjb21wb3VuZAotdHlwZXMsICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5zdHJ1Y3RzPC92YXI+IGFuZCAgPHZhciBjbGFzcz0idmFybmFtZSI+YXJyYXlzPC92YXI+LsKgIFN0cnVjdHMKLWFyZSBuYW1lZCBhZ2dyZWdhdGUgdHlwZXMgaW4gd2hpY2ggZWFjaCBlbGVtZW50IGhhcyBhIHVuaXF1ZSBuYW1lIG9yIFhNTCB0YWcuwqAKLUFycmF5cyBoYXZlIGVsZW1lbnRzIHRoYXQgYXJlIGlkZW50aWZpZWQgYnkgcG9zaXRpb24sIG5vdCBieSBuYW1lLjwvbGk+Ci0KLTwvdWw+Ci08cD5BbGwgZWxlbWVudHMgYW5kIGlkZW50aWZpZXJzIGNvbXByaXNpbmcgdGhlIFNPQVAgZGF0YSBtb2RlbCBhcmUgZGVmaW5lZAotaW4gdGhlIG5hbWVzcGFjZSBVUkkuwqAgVGhlIFNPQVAgc3RhbmRhcmQgZGVmaW5lcyB0aGUgcnVsZXMgZm9yIGhvdyBkYXRhCi10eXBlcyBjYW4gYmUgY29uc3RydWN0ZWQuIEEgcHJvamVjdCBzcGVjaWZpYyBYTUwgc2NoZW1hIG11c3QgZGVmaW5lIHRoZSBhY3R1YWwKLWRhdGEgdHlwZXMuIFRoZSBlbGVtZW50cyBvZiB0aGUgU09BUCBzcGVjaWZpY2F0aW9uIGFyZSBkZWZpbmVkIGluICA8YSBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvPC9hPiBhbmQKLSA8YSBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvPC9hPjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U09BUCBpbXBsZW1lbnRhdGlvbnM8L2g0PjxwPkRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YKLXRoZSBTT0FQIHByb3RvY29sIGFyZSBhdmFpbGFibGUgdG9kYXkuwqAgRm9yIGV4YW1wbGUsIHRoZSBBcGFjaGUgRm91bmRhdGlvbgotcHJvdmlkZXMgQXBhY2hlIFNPQVAsIHdoaWNoIGdyZXcgb3V0IG9mIGFuIElCTTxzdXA+wq48L3N1cD4gcHJvamVjdCBjYWxsZWQgU09BUDRKLCBhcyB3ZWxsIGFzIEFwYWNoZQotQXhpcyBhbmQgdGhlIElCTSBXZWJTcGhlcmU8c3VwPsKuPC9zdXA+IHJ1bi10aW1lCi1lbnZpcm9ubWVudC4gVGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlcyB0b29scyBzdXBwb3J0IEFwYWNoZSBTT0FQIDIuMywgQXhpcwotMS4zLCBhbmQgSUJNIFdlYlNwaGVyZSBpbXBsZW1lbnRhdGlvbnMuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5NYXBwaW5nczwvaDQ+PHA+QSBtYXBwaW5nIGRlZmluZXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbgotYSBxdWFsaWZpZWQgWE1MIGVsZW1lbnQgbmFtZSwgYSBKYXZh4oSiIGNsYXNzIG5hbWUsIGFuZCBhbiBlbmNvZGluZyBzdHlsZS7CoAotVGhlIG1hcHBpbmcgc3BlY2lmaWVzIGhvdywgdW5kZXIgdGhlIGdpdmVuIGVuY29kaW5nLCBhbiBpbmNvbWluZyBYTUwgZWxlbWVudAotd2l0aCBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGlzIGNvbnZlcnRlZCB0byBhIEphdmEgY2xhc3MgYW5kIHZpY2UgdmVyc2EuPC9wPgotPHA+Rm9yIG1vcmUKLWluZm9ybWF0aW9uIG9uIEFwYWNoZSBTT0FQLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3NvYXAiIHRhcmdldD0iX2JsYW5rIj54bWwuYXBhY2hlLm9yZy9zb2FwPC9hPsKgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uCi1TT0FQIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TT0FQIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnczLm9yZy9UUi9TT0FQPC9hPiA8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBlNjI4Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3MiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC90aXRsZT4KLTxzaG9ydGRlc2M+QSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbgotYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseQotbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuCi1XZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoCi1vdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwKLWh1bWFuIGludGVyYWN0aW9uLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZCwgc2VsZi1kZXNjcmliaW5nIG1vZHVsYXIgYXBwbGljYXRpb25zIHRoYXQKLWNhbiBiZSBwdWJsaXNoZWQsIGxvY2F0ZWQsIGFuZCBpbnZva2VkIGFjcm9zcyB0aGUgV2ViLjwvcD4KLTxscT4gPHA+IDx1aWNvbnRyb2w+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZC48L3VpY29udHJvbD4gT24gdGhlIGNsaWVudAotc2lkZSwgbm8gYWRkaXRpb25hbCBzb2Z0d2FyZSBpcyByZXF1aXJlZC4mbmJzcDsgQSBwcm9ncmFtbWluZyBsYW5ndWFnZSB3aXRoCi1YTUwgYW5kIEhUVFAgY2xpZW50IHN1cHBvcnQgaXMgZW5vdWdoIHRvIGdldCB5b3Ugc3RhcnRlZC4mbmJzcDsgT24gdGhlIHNlcnZlcgotc2lkZSwgYSBXZWIgc2VydmVyIGFuZCBzZXJ2bGV0IGVuZ2luZSBhcmUgcmVxdWlyZWQuJm5ic3A7IFRoZSBjbGllbnQgYW5kIHNlcnZlcgotY2FuIGJlIGltcGxlbWVudGVkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuJm5ic3A7IEl0IGlzIHBvc3NpYmxlIHRvIFdlYgotc2VydmljZSBlbmFibGUgYW4gZXhpc3RpbmcgYXBwbGljYXRpb24gd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS48L3A+IDxwPiA8dWljb250cm9sPldlYgotc2VydmljZXMgYXJlIHNlbGYtZGVzY3JpYmluZy48L3VpY29udHJvbD4gVGhlIGNsaWVudCBhbmQgc2VydmVyIG5lZWQgdG8gcmVjb2duaXplCi1vbmx5IHRoZSBmb3JtYXQgYW5kIGNvbnRlbnQgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMuJm5ic3A7IFRoZSBkZWZpbml0aW9uCi1vZiB0aGUgbWVzc2FnZSBmb3JtYXQgdHJhdmVscyB3aXRoIHRoZSBtZXNzYWdlOyBubyBleHRlcm5hbCBtZXRhZGF0YSByZXBvc2l0b3JpZXMKLW9yIGNvZGUgZ2VuZXJhdGlvbiB0b29scyBhcmUgcmVxdWlyZWQuPC9wPiA8cD4gPHVpY29udHJvbD5XZWIgc2VydmljZXMgYXJlCi1tb2R1bGFyLjwvdWljb250cm9sPiBTaW1wbGUgV2ViIHNlcnZpY2VzIGNhbiBiZSBhZ2dyZWdhdGVkIHRvIGZvcm0gbW9yZSBjb21wbGV4Ci1XZWIgc2VydmljZXMgZWl0aGVyIGJ5IHVzaW5nIHdvcmtmbG93IHRlY2huaXF1ZXMgb3IgYnkgY2FsbGluZyBsb3dlciBsYXllcgotV2ViIHNlcnZpY2VzIGZyb20gYSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbi48L3A+PHA+PHVpY29udHJvbD5XZWIgU2VydmljZXMKLWFyZSBwbGF0Zm9ybSBpbmRlcGVuZGVudC48L3VpY29udHJvbD4gV2ViIHNlcnZpY2VzIGFyZSBiYXNlZCBvbiBhIGNvbmNpc2UKLXNldCBvZiBvcGVuLCBYTUwtYmFzZWQgc3RhbmRhcmRzIGRlc2lnbmVkIHRvIHByb21vdGUgaW50ZXJvcGVyYWJpbGl0eSBiZXR3ZWVuCi1hIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnRzIGFjcm9zcyBhIHZhcmlldHkgb2YgY29tcHV0aW5nIHBsYXRmb3JtcyBhbmQgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlcy48L3A+IDwvbHE+Ci08cD5XZWIgc2VydmljZXMgbWlnaHQgYmUgYW55dGhpbmcsIGZvciBleGFtcGxlLCB0aGVhdHJlIHJldmlldyBhcnRpY2xlcywgd2VhdGhlcgotcmVwb3J0cywgY3JlZGl0IGNoZWNrcywgc3RvY2sgcXVvdGF0aW9ucywgdHJhdmVsIGFkdmlzb3JpZXMsIG9yIGFpcmxpbmUgdHJhdmVsCi1yZXNlcnZhdGlvbiBwcm9jZXNzZXMuIEVhY2ggb2YgdGhlc2Ugc2VsZi1jb250YWluZWQgYnVzaW5lc3Mgc2VydmljZXMgaXMgYW4KLWFwcGxpY2F0aW9uIHRoYXQgY2FuIGVhc2lseSBpbnRlZ3JhdGUgd2l0aCBvdGhlciBzZXJ2aWNlcywgZnJvbSB0aGUgc2FtZSBvcgotZGlmZmVyZW50IGNvbXBhbmllcywgdG8gY3JlYXRlIGEgY29tcGxldGUgYnVzaW5lc3MgcHJvY2Vzcy4gVGhpcyBpbnRlcm9wZXJhYmlsaXR5Ci1hbGxvd3MgYnVzaW5lc3NlcyB0byBkeW5hbWljYWxseSBwdWJsaXNoLCBkaXNjb3ZlciwgYW5kIGJpbmQgYSByYW5nZSBvZiBXZWIKLXNlcnZpY2VzIHRocm91Z2ggdGhlIEludGVybmV0LjwvcD4KLTxzZWN0aW9uPjx0aXRsZT5DYXRlZ29yaWVzIG9mIFdlYiBzZXJ2aWNlczwvdGl0bGU+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBncm91cGVkCi1pbnRvIHRocmVlIGNhdGVnb3JpZXM6PC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+QnVzaW5lc3MgaW5mb3JtYXRpb24uPC91aWNvbnRyb2w+IEEKLWJ1c2luZXNzIHNoYXJlcyBpbmZvcm1hdGlvbiB3aXRoIGNvbnN1bWVycyBvciBvdGhlciBidXNpbmVzc2VzLiBJbiB0aGlzIGNhc2UsCi10aGUgYnVzaW5lc3MgaXMgdXNpbmcgV2ViIHNlcnZpY2VzIHRvIGV4cGFuZCBpdHMgc2NvcGUuIEV4YW1wbGVzIG9mIGJ1c2luZXNzCi1pbmZvcm1hdGlvbmFsIFdlYiBzZXJ2aWNlcyBhcmUgbmV3cyBzdHJlYW1zLCB3ZWF0aGVyIHJlcG9ydHMsIG9yIHN0b2NrIHF1b3RhdGlvbnMuPC9wPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcwotaW50ZWdyYXRpb24uPC91aWNvbnRyb2w+IEEgYnVzaW5lc3MgcHJvdmlkZXMgdHJhbnNhY3Rpb25hbCwgImZvciBmZWUiIHNlcnZpY2VzCi10byBpdHMgY3VzdG9tZXJzLiBJbiB0aGlzIGNhc2UsIHRoZSBidXNpbmVzcyBiZWNvbWVzIHBhcnQgb2YgYSBnbG9iYWwgbmV0d29yawotb2YgdmFsdWUtYWRkZWQgc3VwcGxpZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZHVjdCBjb21tZXJjZS4gRXhhbXBsZXMgb2YKLWJ1c2luZXNzIGludGVncmF0aW9uIFdlYiBzZXJ2aWNlcyBpbmNsdWRlIGJpZCBhbmQgYXVjdGlvbiBlLW1hcmtldHBsYWNlcywKLXJlc2VydmF0aW9uIHN5c3RlbXMsIGFuZCBjcmVkaXQgY2hlY2tpbmcuPC9wPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcyBwcm9jZXNzCi1leHRlcm5hbGl6YXRpb24uPC91aWNvbnRyb2w+IEEgYnVzaW5lc3MgZGlmZmVyZW50aWF0ZXMgaXRzZWxmIGZyb20gaXRzIGNvbXBldGl0aW9uCi10aHJvdWdoIHRoZSBjcmVhdGlvbiBvZiBhIGdsb2JhbCB2YWx1ZSBjaGFpbi4gSW4gdGhpcyBjYXNlLCB0aGUgYnVzaW5lc3MgdXNlcwotV2ViIHNlcnZpY2VzIHRvIGR5bmFtaWNhbGx5IGludGVncmF0ZSBpdHMgcHJvY2Vzc2VzLiBBbiBleGFtcGxlIG9mIGJ1c2luZXNzCi1wcm9jZXNzIGV4dGVybmFsaXphdGlvbiBXZWIgc2VydmljZXMgaXMgdGhlIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudAotY29tcGFuaWVzIHRvIGNvbWJpbmUgbWFudWZhY3R1cmluZywgYXNzZW1ibHksIHdob2xlc2FsZSBkaXN0cmlidXRpb24sIGFuZAotcmV0YWlsIHNhbGVzIG9mIGEgcGFydGljdWxhciBwcm9kdWN0LjwvcD4gPC9scT48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+U2VydmljZSByb2xlcyBhbmQgaW50ZXJhY3Rpb25zPC90aXRsZT48cD5BIG5ldHdvcmsgY29tcG9uZW50Ci1pbiBhIFdlYiBTZXJ2aWNlcyBhcmNoaXRlY3R1cmUgY2FuIHBsYXkgb25lIG9yIG1vcmUgZnVuZGFtZW50YWwgcm9sZXM6IHNlcnZpY2UKLXByb3ZpZGVyLCBzZXJ2aWNlIGJyb2tlciwgYW5kIHNlcnZpY2UgY2xpZW50LjwvcD48dWw+Ci08bGk+U2VydmljZSBwcm92aWRlcnMgY3JlYXRlIGFuZCBkZXBsb3kgdGhlaXIgV2ViIHNlcnZpY2VzIGFuZCBjYW4gcHVibGlzaAotdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVpciBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlcyB0aHJvdWdoIGEgc2VydmljZSByZWdpc3RyeSwKLXN1Y2ggYXMgYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5LjwvbGk+Ci08bGk+U2VydmljZSBicm9rZXJzIHJlZ2lzdGVyIGFuZCBjYXRlZ29yaXplIHB1Ymxpc2hlZCBzZXJ2aWNlcyBhbmQgcHJvdmlkZQotc2VhcmNoIHNlcnZpY2VzLiBGb3IgZXhhbXBsZSwgVURESSBhY3RzIGFzIGEgc2VydmljZSBicm9rZXIgZm9yIFdTREwtZGVzY3JpYmVkCi1XZWIgc2VydmljZXMuPC9saT4KLTxsaT5TZXJ2aWNlIGNsaWVudHMgdXNlIGJyb2tlciBzZXJ2aWNlcyBzdWNoIGFzIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5Ci10byBkaXNjb3ZlciBhIG5lZWRlZCBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlIGFuZCB0aGVuIGJpbmQgdG8gYW5kIGNhbGwgdGhlCi1zZXJ2aWNlIHByb3ZpZGVyLjwvbGk+Ci08L3VsPjxwPkJpbmRpbmcgaW52b2x2ZXMgZXN0YWJsaXNoaW5nIGFsbCBlbnZpcm9ubWVudGFsIHByZXJlcXVpc2l0ZXMgdGhhdAotYXJlIG5lY2Vzc2FyeSB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIHNlcnZpY2VzLiBFeGFtcGxlcyBvZiBlbnZpcm9ubWVudGFsCi1wcmVyZXF1aXNpdGVzIGluY2x1ZGUgc2VjdXJpdHksIHRyYW5zYWN0aW9uIG1vbml0b3JpbmcsIGFuZCBIVFRQIGF2YWlsYWJpbGl0eS4KLVRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Ugcm9sZXMgYXJlIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L3A+PHA+RmlndXJlCi0xLiBTZXJ2aWNlIHJvbGVzIGFuZCBpbnRlcmFjdGlvbnMuPC9wPjxwPiA8aW1hZ2UgYWx0PSJGaWd1cmUgMSBpbGx1c3RyYXRlcyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHNlcnZpY2UgYnJva2VyLCBzZXJ2aWNlIHByb3ZpZGVyLCBhbmQgc2VydmljZSByZXF1ZXN0b3IuIgotaHJlZj0iLi4vaW1hZ2VzL3JvbGVzLmdpZiI+PC9pbWFnZT4gPC9wPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdlYiBzZXJ2aWNlcywKLXJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcyIKLXNjb3BlPSJleHRlcm5hbCI+d3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXM8L3hyZWY+PC9wPjwvc2VjdGlvbj4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD4KLTwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c3N0YW5kYXJkcy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9saW5rdGV4dD4KLTwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgzOWM2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJXZWIgc2VydmljZXMgb3ZlcnZpZXciIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIG92ZXJ2aWV3IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBvdmVydmlldyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3MiPjxhIG5hbWU9ImN3cyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9oMT4KLQotCi0KLTxkaXY+PHA+QSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbgotYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseQotbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuCi1XZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoCi1vdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwKLWh1bWFuIGludGVyYWN0aW9uLjwvcD4KLQotPHA+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZCwgc2VsZi1kZXNjcmliaW5nIG1vZHVsYXIgYXBwbGljYXRpb25zIHRoYXQKLWNhbiBiZSBwdWJsaXNoZWQsIGxvY2F0ZWQsIGFuZCBpbnZva2VkIGFjcm9zcyB0aGUgV2ViLjwvcD4KLQotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgc2VydmljZXMgYXJlIHNlbGYtY29udGFpbmVkLjwvc3Bhbj4gT24gdGhlIGNsaWVudAotc2lkZSwgbm8gYWRkaXRpb25hbCBzb2Z0d2FyZSBpcyByZXF1aXJlZC7CoCBBIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGgKLVhNTCBhbmQgSFRUUCBjbGllbnQgc3VwcG9ydCBpcyBlbm91Z2ggdG8gZ2V0IHlvdSBzdGFydGVkLsKgIE9uIHRoZSBzZXJ2ZXIKLXNpZGUsIGEgV2ViIHNlcnZlciBhbmQgc2VydmxldCBlbmdpbmUgYXJlIHJlcXVpcmVkLsKgIFRoZSBjbGllbnQgYW5kIHNlcnZlcgotY2FuIGJlIGltcGxlbWVudGVkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuwqAgSXQgaXMgcG9zc2libGUgdG8gV2ViCi1zZXJ2aWNlIGVuYWJsZSBhbiBleGlzdGluZyBhcHBsaWNhdGlvbiB3aXRob3V0IHdyaXRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1zZXJ2aWNlcyBhcmUgc2VsZi1kZXNjcmliaW5nLjwvc3Bhbj4gVGhlIGNsaWVudCBhbmQgc2VydmVyIG5lZWQgdG8gcmVjb2duaXplCi1vbmx5IHRoZSBmb3JtYXQgYW5kIGNvbnRlbnQgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMuwqAgVGhlIGRlZmluaXRpb24KLW9mIHRoZSBtZXNzYWdlIGZvcm1hdCB0cmF2ZWxzIHdpdGggdGhlIG1lc3NhZ2U7IG5vIGV4dGVybmFsIG1ldGFkYXRhIHJlcG9zaXRvcmllcwotb3IgY29kZSBnZW5lcmF0aW9uIHRvb2xzIGFyZSByZXF1aXJlZC48L3A+Ci0gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBzZXJ2aWNlcyBhcmUKLW1vZHVsYXIuPC9zcGFuPiBTaW1wbGUgV2ViIHNlcnZpY2VzIGNhbiBiZSBhZ2dyZWdhdGVkIHRvIGZvcm0gbW9yZSBjb21wbGV4Ci1XZWIgc2VydmljZXMgZWl0aGVyIGJ5IHVzaW5nIHdvcmtmbG93IHRlY2huaXF1ZXMgb3IgYnkgY2FsbGluZyBsb3dlciBsYXllcgotV2ViIHNlcnZpY2VzIGZyb20gYSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbi48L3A+Ci08cD48c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgU2VydmljZXMKLWFyZSBwbGF0Zm9ybSBpbmRlcGVuZGVudC48L3NwYW4+IFdlYiBzZXJ2aWNlcyBhcmUgYmFzZWQgb24gYSBjb25jaXNlCi1zZXQgb2Ygb3BlbiwgWE1MLWJhc2VkIHN0YW5kYXJkcyBkZXNpZ25lZCB0byBwcm9tb3RlIGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbgotYSBXZWIgc2VydmljZSBhbmQgY2xpZW50cyBhY3Jvc3MgYSB2YXJpZXR5IG9mIGNvbXB1dGluZyBwbGF0Zm9ybXMgYW5kIHByb2dyYW1taW5nCi1sYW5ndWFnZXMuPC9wPgotIDwvYmxvY2txdW90ZT4KLQotPHA+V2ViIHNlcnZpY2VzIG1pZ2h0IGJlIGFueXRoaW5nLCBmb3IgZXhhbXBsZSwgdGhlYXRyZSByZXZpZXcgYXJ0aWNsZXMsIHdlYXRoZXIKLXJlcG9ydHMsIGNyZWRpdCBjaGVja3MsIHN0b2NrIHF1b3RhdGlvbnMsIHRyYXZlbCBhZHZpc29yaWVzLCBvciBhaXJsaW5lIHRyYXZlbAotcmVzZXJ2YXRpb24gcHJvY2Vzc2VzLiBFYWNoIG9mIHRoZXNlIHNlbGYtY29udGFpbmVkIGJ1c2luZXNzIHNlcnZpY2VzIGlzIGFuCi1hcHBsaWNhdGlvbiB0aGF0IGNhbiBlYXNpbHkgaW50ZWdyYXRlIHdpdGggb3RoZXIgc2VydmljZXMsIGZyb20gdGhlIHNhbWUgb3IKLWRpZmZlcmVudCBjb21wYW5pZXMsIHRvIGNyZWF0ZSBhIGNvbXBsZXRlIGJ1c2luZXNzIHByb2Nlc3MuIFRoaXMgaW50ZXJvcGVyYWJpbGl0eQotYWxsb3dzIGJ1c2luZXNzZXMgdG8gZHluYW1pY2FsbHkgcHVibGlzaCwgZGlzY292ZXIsIGFuZCBiaW5kIGEgcmFuZ2Ugb2YgV2ViCi1zZXJ2aWNlcyB0aHJvdWdoIHRoZSBJbnRlcm5ldC48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5DYXRlZ29yaWVzIG9mIFdlYiBzZXJ2aWNlczwvaDQ+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBncm91cGVkCi1pbnRvIHRocmVlIGNhdGVnb3JpZXM6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcyBpbmZvcm1hdGlvbi48L3NwYW4+IEEKLWJ1c2luZXNzIHNoYXJlcyBpbmZvcm1hdGlvbiB3aXRoIGNvbnN1bWVycyBvciBvdGhlciBidXNpbmVzc2VzLiBJbiB0aGlzIGNhc2UsCi10aGUgYnVzaW5lc3MgaXMgdXNpbmcgV2ViIHNlcnZpY2VzIHRvIGV4cGFuZCBpdHMgc2NvcGUuIEV4YW1wbGVzIG9mIGJ1c2luZXNzCi1pbmZvcm1hdGlvbmFsIFdlYiBzZXJ2aWNlcyBhcmUgbmV3cyBzdHJlYW1zLCB3ZWF0aGVyIHJlcG9ydHMsIG9yIHN0b2NrIHF1b3RhdGlvbnMuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcwotaW50ZWdyYXRpb24uPC9zcGFuPiBBIGJ1c2luZXNzIHByb3ZpZGVzIHRyYW5zYWN0aW9uYWwsICJmb3IgZmVlIiBzZXJ2aWNlcwotdG8gaXRzIGN1c3RvbWVycy4gSW4gdGhpcyBjYXNlLCB0aGUgYnVzaW5lc3MgYmVjb21lcyBwYXJ0IG9mIGEgZ2xvYmFsIG5ldHdvcmsKLW9mIHZhbHVlLWFkZGVkIHN1cHBsaWVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmR1Y3QgY29tbWVyY2UuIEV4YW1wbGVzIG9mCi1idXNpbmVzcyBpbnRlZ3JhdGlvbiBXZWIgc2VydmljZXMgaW5jbHVkZSBiaWQgYW5kIGF1Y3Rpb24gZS1tYXJrZXRwbGFjZXMsCi1yZXNlcnZhdGlvbiBzeXN0ZW1zLCBhbmQgY3JlZGl0IGNoZWNraW5nLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnVzaW5lc3MgcHJvY2VzcwotZXh0ZXJuYWxpemF0aW9uLjwvc3Bhbj4gQSBidXNpbmVzcyBkaWZmZXJlbnRpYXRlcyBpdHNlbGYgZnJvbSBpdHMgY29tcGV0aXRpb24KLXRocm91Z2ggdGhlIGNyZWF0aW9uIG9mIGEgZ2xvYmFsIHZhbHVlIGNoYWluLiBJbiB0aGlzIGNhc2UsIHRoZSBidXNpbmVzcyB1c2VzCi1XZWIgc2VydmljZXMgdG8gZHluYW1pY2FsbHkgaW50ZWdyYXRlIGl0cyBwcm9jZXNzZXMuIEFuIGV4YW1wbGUgb2YgYnVzaW5lc3MKLXByb2Nlc3MgZXh0ZXJuYWxpemF0aW9uIFdlYiBzZXJ2aWNlcyBpcyB0aGUgYXNzb2NpYXRpb25zIGJldHdlZW4gZGlmZmVyZW50Ci1jb21wYW5pZXMgdG8gY29tYmluZSBtYW51ZmFjdHVyaW5nLCBhc3NlbWJseSwgd2hvbGVzYWxlIGRpc3RyaWJ1dGlvbiwgYW5kCi1yZXRhaWwgc2FsZXMgb2YgYSBwYXJ0aWN1bGFyIHByb2R1Y3QuPC9wPgotIDwvYmxvY2txdW90ZT4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U2VydmljZSByb2xlcyBhbmQgaW50ZXJhY3Rpb25zPC9oND48cD5BIG5ldHdvcmsgY29tcG9uZW50Ci1pbiBhIFdlYiBTZXJ2aWNlcyBhcmNoaXRlY3R1cmUgY2FuIHBsYXkgb25lIG9yIG1vcmUgZnVuZGFtZW50YWwgcm9sZXM6IHNlcnZpY2UKLXByb3ZpZGVyLCBzZXJ2aWNlIGJyb2tlciwgYW5kIHNlcnZpY2UgY2xpZW50LjwvcD4KLTx1bD4KLTxsaT5TZXJ2aWNlIHByb3ZpZGVycyBjcmVhdGUgYW5kIGRlcGxveSB0aGVpciBXZWIgc2VydmljZXMgYW5kIGNhbiBwdWJsaXNoCi10aGUgYXZhaWxhYmlsaXR5IG9mIHRoZWlyIFdTREwtZGVzY3JpYmVkIHNlcnZpY2VzIHRocm91Z2ggYSBzZXJ2aWNlIHJlZ2lzdHJ5LAotc3VjaCBhcyBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkuPC9saT4KLQotPGxpPlNlcnZpY2UgYnJva2VycyByZWdpc3RlciBhbmQgY2F0ZWdvcml6ZSBwdWJsaXNoZWQgc2VydmljZXMgYW5kIHByb3ZpZGUKLXNlYXJjaCBzZXJ2aWNlcy4gRm9yIGV4YW1wbGUsIFVEREkgYWN0cyBhcyBhIHNlcnZpY2UgYnJva2VyIGZvciBXU0RMLWRlc2NyaWJlZAotV2ViIHNlcnZpY2VzLjwvbGk+Ci0KLTxsaT5TZXJ2aWNlIGNsaWVudHMgdXNlIGJyb2tlciBzZXJ2aWNlcyBzdWNoIGFzIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5Ci10byBkaXNjb3ZlciBhIG5lZWRlZCBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlIGFuZCB0aGVuIGJpbmQgdG8gYW5kIGNhbGwgdGhlCi1zZXJ2aWNlIHByb3ZpZGVyLjwvbGk+Ci0KLTwvdWw+Ci08cD5CaW5kaW5nIGludm9sdmVzIGVzdGFibGlzaGluZyBhbGwgZW52aXJvbm1lbnRhbCBwcmVyZXF1aXNpdGVzIHRoYXQKLWFyZSBuZWNlc3NhcnkgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSBzZXJ2aWNlcy4gRXhhbXBsZXMgb2YgZW52aXJvbm1lbnRhbAotcHJlcmVxdWlzaXRlcyBpbmNsdWRlIHNlY3VyaXR5LCB0cmFuc2FjdGlvbiBtb25pdG9yaW5nLCBhbmQgSFRUUCBhdmFpbGFiaWxpdHkuCi1UaGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIHJvbGVzIGFyZSBkZXNjcmliZWQgaW4gRmlndXJlIDEuPC9wPgotPHA+RmlndXJlCi0xLiBTZXJ2aWNlIHJvbGVzIGFuZCBpbnRlcmFjdGlvbnMuPC9wPgotPHA+IDxpbWcgc3JjPSIuLi9pbWFnZXMvcm9sZXMuZ2lmIiBhbHQ9IkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgc2VydmljZSBicm9rZXIsIHNlcnZpY2UgcHJvdmlkZXIsIGFuZCBzZXJ2aWNlIHJlcXVlc3Rvci4iIC8+IDwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdlYiBzZXJ2aWNlcywKLXJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMiIHRhcmdldD0iX2JsYW5rIj53d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlczwvYT48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCI+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvYT48L3N0cm9uZz48YnIgLz4KLU9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cyBvbiBwcm90b2NvbHMgYW5kIG5vdCBvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZSBJbnRlcm5ldCBpcyBjb21wb3NlZCBvZiBoZXRlcm9nZW5lb3VzIHRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzIHByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBwcmVzZXJ2aW5nIHRoZSBpbnRlcm9wZXJhYmlsaXR5IG9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCI+Q3JlYXRpbmcgdG9wLWRvd24gV2ViIHNlcnZpY2VzPC9hPjwvc3Ryb25nPjxiciAvPgotV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiPkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1XZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzYnRtdXAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxOGY3ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzYnRtdXAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5XZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50Ci1hbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nCi1hIFdlYiBzZXJ2aWNlIGZyb20gYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5ib3R0b20tdXAgV2ViIHNlcnZpY2VzPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmJvdHRvbS11cDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuPC9wPgotPHA+V2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIGEgYm90dG9tLXVwIGFwcHJvYWNoLCBmaXJzdCB5b3UgY3JlYXRlCi1hIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFuCi1vciBFSkIgYmVhbiBhbmQgdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlIHRoZSBXU0RMIGZpbGUgYW5kCi1XZWIgc2VydmljZS48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PgotPC9saW5rPgotPGxpbmsgaHJlZj0iY3dzdG9wZG93bi5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5DcmVhdGluZyB0b3AtZG93biBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NidG11cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTMzOWM0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi4iIC8+Ci08bWV0YSBjb250ZW50PSJib3R0b20tdXAgV2ViIHNlcnZpY2VzLCBvdmVydmlldywgV2ViIHNlcnZpY2VzLCBib3R0b20tdXAiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJib3R0b20tdXAgV2ViIHNlcnZpY2VzLCBvdmVydmlldywgV2ViIHNlcnZpY2VzLCBib3R0b20tdXAiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c3RvcGRvd24uaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNyZWF0aW5nYm90dG9tLXVwd2Vic2VydmljZXMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj48YSBuYW1lPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudAotYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZwotYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YeKEoiBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi48L3A+Ci0KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuPC9wPgotCi08cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgYSBib3R0b20tdXAgYXBwcm9hY2gsIGZpcnN0IHlvdSBjcmVhdGUKLWEgSmF2YSBiZWFuCi1vciBFSkIgYmVhbiBhbmQgdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlIHRoZSBXU0RMIGZpbGUgYW5kCi1XZWIgc2VydmljZS48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3N0b3Bkb3duLmh0bWwiIHRpdGxlPSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIj5DcmVhdGluZyB0b3AtZG93biBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjODllOWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC90aXRsZT4KLTxzaG9ydGRlc2M+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24KLWZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yCi1zZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMKLXJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5XU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPldTREwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBkZXNjcmliaW5nIG5ldHdvcmsgc2VydmljZXMgYXMgYSBzZXQgb2YKLSA8dmFybmFtZT5lbmRwb2ludHM8L3Zhcm5hbWU+IHRoYXQgb3BlcmF0ZSBvbiBtZXNzYWdlcyB0aGF0IGNvbnRhaW4gZWl0aGVyCi1kb2N1bWVudC1vcmllbnRlZCBvciBwcm9jZWR1cmUtb3JpZW50ZWQgaW5mb3JtYXRpb24uIFRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcwotYXJlIGZpcnN0IGRlc2NyaWJlZCBhYnN0cmFjdGx5IGFuZCB0aGVuIGJvdW5kIHRvIGEgY29uY3JldGUgbmV0d29yayBwcm90b2NvbAotYW5kIG1lc3NhZ2UgZm9ybWF0IGluIG9yZGVyIHRvIGRlZmluZSBhbiBlbmRwb2ludC4gUmVsYXRlZCBjb25jcmV0ZSBlbmRwb2ludHMKLWFyZSBjb21iaW5lZCBpbnRvIGFic3RyYWN0IGVuZHBvaW50cyAoc2VydmljZXMpLiBXU0RMIGlzIGV4dGVuc2libGUgdG8gYWxsb3cKLWRlc2NyaXB0aW9uIG9mIGVuZHBvaW50cyBhbmQgdGhlaXIgbWVzc2FnZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggbWVzc2FnZSBmb3JtYXRzCi1vciBuZXR3b3JrIHByb3RvY29scyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZS4gVGhpcyBtZWFucyB0aGF0IGludGVyZmFjZXMgYXJlCi1kZWZpbmVkIGFic3RyYWN0bHkgdXNpbmcgWE1MIHNjaGVtYSBhbmQgdGhlbiBib3VuZCB0byBjb25jcmV0ZSByZXByZXNlbnRhdGlvbnMKLXRoYXQgYXJlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvdG9jb2wuPC9wPgotPHA+V1NETCBhbGxvd3MgYSBzZXJ2aWNlIHByb3ZpZGVyIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJpc3RpY3MKLW9mIGEgV2ViIHNlcnZpY2U6PC9wPgotPHVsPgotPGxpPlRoZSBuYW1lIG9mIHRoZSBXZWIgc2VydmljZSBhbmQgYWRkcmVzc2luZyBpbmZvcm1hdGlvbjwvbGk+Ci08bGk+VGhlIHByb3RvY29sIGFuZCBlbmNvZGluZyBzdHlsZSB0byBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIHRoZSBwdWJsaWMgb3BlcmF0aW9ucwotb2YgdGhlIFdlYiBzZXJ2aWNlPC9saT4KLTxsaT5UaGUgdHlwZSBpbmZvcm1hdGlvbiBzdWNoIGFzIG9wZXJhdGlvbnMsIHBhcmFtZXRlcnMsIGFuZCBkYXRhIHR5cGVzIGNvbXByaXNpbmcKLXRoZSBpbnRlcmZhY2Ugb2YgdGhlIFdlYiBzZXJ2aWNlPC9saT4KLTwvdWw+Ci08cD5XU0RMIGRvY3VtZW50cyBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4cG9zZSB0aGVpciBhcHBsaWNhdGlvbnMgYXMgbmV0d29yay1hY2Nlc3NpYmxlCi1zZXJ2aWNlcyBvbiB0aGUgSW50ZXJuZXQuIFRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlcgotV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIKLWJ1c2luZXNzIHByb2Nlc3Nlcy48L3A+Ci08cD5UaGlzIGRldmVsb3BtZW50IHBsYXRmb3JtIHN1cHBvcnRzIGFuZCBlbmNvdXJhZ2VzIHRoZSBkZXZlbG9wbWVudCBhbmQgdXNlCi1vZiBXUy1JIGNvbXBsaWFudCBXU0RMLiBCdXNpbmVzcyBzZXJ2aWNlIHByb3ZpZGVycyBjYW4gZGVwbG95IDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbnMKLWFuZCBlbnRlcnByaXNlIGJlYW5zIGFzIGEgV2ViIHNlcnZpY2UgYW5kIGdlbmVyYXRlIGEgV1NETCBkb2N1bWVudCB0aGF0IGRlc2NyaWJlcwotdGhlIHNlcnZpY2UuIFRoZXkgY2FuIGFsc28gZ2VuZXJhdGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBhbmQgZW50ZXJwcmlzZSBiZWFuIHNrZWxldG9ucyBmcm9tCi1hbiBleGlzdGluZyBXU0RMIGZpbGUuIEEgYnVzaW5lc3Mgc2VydmljZSBjbGllbnQgY2FuIGdlbmVyYXRlIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwcm94eQotZnJvbSBhIFdTREwgZG9jdW1lbnQsIHRoZXJlYnkgcHJvdmlkaW5nIGFuIGVhc3ktdG8tdXNlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gaW50ZXJmYWNlCi10byB0aGUgV2ViIHNlcnZpY2UuIFRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGludGVyZmFjZSBoaWRlcyB0aGUgbmV0d29yayBjb21tdW5pY2F0aW9ucwotZGV0YWlscyBmcm9tIHRoZSBjbGllbnQgZW5hYmxpbmcgdGhlIGJ1c2luZXNzIHNlcnZpY2UgcHJvdmlkZXIgdG8gZm9jdXMgb24KLWJ1c2luZXNzIGFuZCBwcm9jZXNzIHBvcnRpb25zIG9mIHRoZSBhcHBsaWNhdGlvbi48L3A+Ci08cD5JbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgdG9vbHMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcywgdGhlIHdvcmtiZW5jaCBwcm92aWRlcwotYSBXU0RMIGVkaXRvciB0aGF0IGFsbG93cyB5b3UgdG8gY3JlYXRlIFdTREwgZmlsZXMgdXNpbmcgYSBncmFwaGljYWwgaW50ZXJmYWNlLAotYSBXU0RMIHZhbGlkYXRvciB0aGF0IGVuc3VyZXMgdGhhdCB5b3VyIFdTREwgZmlsZSBpcyBzZW1hbnRpY2FsbHkgY29ycmVjdAotYW5kIG9wdGlvbmFsbHkgY2hlY2tzIGZvciBXUy1JIGNvbXBsaWFuY2UsIGFuZCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdoaWNoCi1hbGxvd3MgeW91IHRvIGR5bmFtaWNhbGx5IHRlc3QgV2ViIHNlcnZpY2VzIHdpdGhvdXQgcmVxdWlyaW5nIHlvdSB0byBnZW5lcmF0ZQotYSBwcm94eS48L3A+Ci08cD5UaGUgd29ya2JlbmNoIHN1cHBvcnRzIFdTREwgMS4xLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uLAotcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgc2NvcGU9ImV4dGVybmFsIj53d3cudzMub3JnL1RSL3dzZGw8L3hyZWY+PC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD4KLTwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxYTYyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Igc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uIGZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yIHNlcnZpY2UgcHJvdmlkZXJzIHRvIGRlc2NyaWJlIHRoZSBiYXNpYyBmb3JtYXQgb2YgcmVxdWVzdHMgdG8gdGhlaXIgc3lzdGVtcyByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIGltcGxlbWVudGF0aW9uLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBvdmVydmlldywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3dzZGwiPjxhIG5hbWU9ImN3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9oMT4KLQotCi0KLTxkaXY+PHA+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24KLWZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yCi1zZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMKLXJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uPC9wPgotCi08cD5XU0RMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBuZXR3b3JrIHNlcnZpY2VzIGFzIGEgc2V0IG9mCi0gPHZhciBjbGFzcz0idmFybmFtZSI+ZW5kcG9pbnRzPC92YXI+IHRoYXQgb3BlcmF0ZSBvbiBtZXNzYWdlcyB0aGF0IGNvbnRhaW4gZWl0aGVyCi1kb2N1bWVudC1vcmllbnRlZCBvciBwcm9jZWR1cmUtb3JpZW50ZWQgaW5mb3JtYXRpb24uIFRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcwotYXJlIGZpcnN0IGRlc2NyaWJlZCBhYnN0cmFjdGx5IGFuZCB0aGVuIGJvdW5kIHRvIGEgY29uY3JldGUgbmV0d29yayBwcm90b2NvbAotYW5kIG1lc3NhZ2UgZm9ybWF0IGluIG9yZGVyIHRvIGRlZmluZSBhbiBlbmRwb2ludC4gUmVsYXRlZCBjb25jcmV0ZSBlbmRwb2ludHMKLWFyZSBjb21iaW5lZCBpbnRvIGFic3RyYWN0IGVuZHBvaW50cyAoc2VydmljZXMpLiBXU0RMIGlzIGV4dGVuc2libGUgdG8gYWxsb3cKLWRlc2NyaXB0aW9uIG9mIGVuZHBvaW50cyBhbmQgdGhlaXIgbWVzc2FnZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggbWVzc2FnZSBmb3JtYXRzCi1vciBuZXR3b3JrIHByb3RvY29scyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZS4gVGhpcyBtZWFucyB0aGF0IGludGVyZmFjZXMgYXJlCi1kZWZpbmVkIGFic3RyYWN0bHkgdXNpbmcgWE1MIHNjaGVtYSBhbmQgdGhlbiBib3VuZCB0byBjb25jcmV0ZSByZXByZXNlbnRhdGlvbnMKLXRoYXQgYXJlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvdG9jb2wuPC9wPgotCi08cD5XU0RMIGFsbG93cyBhIHNlcnZpY2UgcHJvdmlkZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcmlzdGljcwotb2YgYSBXZWIgc2VydmljZTo8L3A+Ci0KLTx1bD4KLTxsaT5UaGUgbmFtZSBvZiB0aGUgV2ViIHNlcnZpY2UgYW5kIGFkZHJlc3NpbmcgaW5mb3JtYXRpb248L2xpPgotCi08bGk+VGhlIHByb3RvY29sIGFuZCBlbmNvZGluZyBzdHlsZSB0byBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIHRoZSBwdWJsaWMgb3BlcmF0aW9ucwotb2YgdGhlIFdlYiBzZXJ2aWNlPC9saT4KLQotPGxpPlRoZSB0eXBlIGluZm9ybWF0aW9uIHN1Y2ggYXMgb3BlcmF0aW9ucywgcGFyYW1ldGVycywgYW5kIGRhdGEgdHlwZXMgY29tcHJpc2luZwotdGhlIGludGVyZmFjZSBvZiB0aGUgV2ViIHNlcnZpY2U8L2xpPgotCi08L3VsPgotCi08cD5XU0RMIGRvY3VtZW50cyBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4cG9zZSB0aGVpciBhcHBsaWNhdGlvbnMgYXMgbmV0d29yay1hY2Nlc3NpYmxlCi1zZXJ2aWNlcyBvbiB0aGUgSW50ZXJuZXQuIFRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlcgotV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIKLWJ1c2luZXNzIHByb2Nlc3Nlcy48L3A+Ci0KLTxwPlRoaXMgZGV2ZWxvcG1lbnQgcGxhdGZvcm0gc3VwcG9ydHMgYW5kIGVuY291cmFnZXMgdGhlIGRldmVsb3BtZW50IGFuZCB1c2UKLW9mIFdTLUkgY29tcGxpYW50IFdTREwuIEJ1c2luZXNzIHNlcnZpY2UgcHJvdmlkZXJzIGNhbiBkZXBsb3kgSmF2YeKEoiBiZWFucwotYW5kIGVudGVycHJpc2UgYmVhbnMgYXMgYSBXZWIgc2VydmljZSBhbmQgZ2VuZXJhdGUgYSBXU0RMIGRvY3VtZW50IHRoYXQgZGVzY3JpYmVzCi10aGUgc2VydmljZS4gVGhleSBjYW4gYWxzbyBnZW5lcmF0ZSBKYXZhIGFuZCBlbnRlcnByaXNlIGJlYW4gc2tlbGV0b25zIGZyb20KLWFuIGV4aXN0aW5nIFdTREwgZmlsZS4gQSBidXNpbmVzcyBzZXJ2aWNlIGNsaWVudCBjYW4gZ2VuZXJhdGUgYSBKYXZhIHByb3h5Ci1mcm9tIGEgV1NETCBkb2N1bWVudCwgdGhlcmVieSBwcm92aWRpbmcgYW4gZWFzeS10by11c2UgSmF2YSBpbnRlcmZhY2UKLXRvIHRoZSBXZWIgc2VydmljZS4gVGhlIEphdmEgaW50ZXJmYWNlIGhpZGVzIHRoZSBuZXR3b3JrIGNvbW11bmljYXRpb25zCi1kZXRhaWxzIGZyb20gdGhlIGNsaWVudCBlbmFibGluZyB0aGUgYnVzaW5lc3Mgc2VydmljZSBwcm92aWRlciB0byBmb2N1cyBvbgotYnVzaW5lc3MgYW5kIHByb2Nlc3MgcG9ydGlvbnMgb2YgdGhlIGFwcGxpY2F0aW9uLjwvcD4KLQotPHA+SW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIHRvb2xzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMsIHRoZSB3b3JrYmVuY2ggcHJvdmlkZXMKLWEgV1NETCBlZGl0b3IgdGhhdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBXU0RMIGZpbGVzIHVzaW5nIGEgZ3JhcGhpY2FsIGludGVyZmFjZSwKLWEgV1NETCB2YWxpZGF0b3IgdGhhdCBlbnN1cmVzIHRoYXQgeW91ciBXU0RMIGZpbGUgaXMgc2VtYW50aWNhbGx5IGNvcnJlY3QKLWFuZCBvcHRpb25hbGx5IGNoZWNrcyBmb3IgV1MtSSBjb21wbGlhbmNlLCBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3aGljaAotYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSB0ZXN0IFdlYiBzZXJ2aWNlcyB3aXRob3V0IHJlcXVpcmluZyB5b3UgdG8gZ2VuZXJhdGUKLWEgcHJveHkuPC9wPgotCi08cD5UaGUgd29ya2JlbmNoIHN1cHBvcnRzIFdTREwgMS4xLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uLAotcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHRhcmdldD0iX2JsYW5rIj53d3cudzMub3JnL1RSL3dzZGw8L2E+PC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3JlZi9yd3NkbC5odG1sIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvYT48L3N0cm9uZz48YnIgLz4KLUEgV1NETCBkb2N1bWVudCBkZWZpbmVzIHNlcnZpY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG5ldHdvcmsgZW5kcG9pbnRzLCBvciBwb3J0cy4gSW4gV1NETCwgdGhlIGFic3RyYWN0IGRlZmluaXRpb24gb2YgZW5kcG9pbnRzIGFuZCBtZXNzYWdlcyBpcyBzZXBhcmF0ZWQgZnJvbSB0aGVpciBjb25jcmV0ZSBuZXR3b3JrIGRlcGxveW1lbnQgb3IgZGF0YSBmb3JtYXQgYmluZGluZ3MuIFRoaXMgYWxsb3dzIHRoZSByZXVzZSBvZiBhYnN0cmFjdCBkZWZpbml0aW9uczogbWVzc2FnZXMsIHdoaWNoIGFyZSBhYnN0cmFjdCBkZXNjcmlwdGlvbnMgb2YgdGhlIGRhdGEgYmVpbmcgZXhjaGFuZ2VkLCBhbmQgcG9ydCB0eXBlcyB3aGljaCBhcmUgYWJzdHJhY3QgY29sbGVjdGlvbnMgb2Ygb3BlcmF0aW9ucy48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjEwZjIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzaWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC90aXRsZT4KLTxzaG9ydGRlc2M+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGlzIGEgc2VydmljZSBkaXNjb3ZlcnkKLW1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuCi1XaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS4mbmJzcDsKLVdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LiZuYnNwOyBXU0lMIGFsbG93cwoteW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcyBpdCBwcm92aWRlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYgotc2VydmljZXM8aW5kZXh0ZXJtPldTSUw8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+PHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IGFuZAotTWljcm9zb2Z0J3MgcHJvcG9zYWwgZm9yIHRoZSBXU0lMIHNwZWNpZmljYXRpb24gaXMgZGVzaWduZWQgYXJvdW5kIGFuIFhNTC1iYXNlZAotbW9kZWwgZm9yIGJ1aWxkaW5nIGFuIGFnZ3JlZ2F0aW9uIG9mIHJlZmVyZW5jZXMgdG8gZXhpc3RpbmcgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLAotdGhhdCBhcmUgZXhwb3NlZCB1c2luZyBzdGFuZGFyZCBXZWIgc2VydmVyIHRlY2hub2xvZ3kuPC9wPgotPHA+V1NJTCBwcm92aWRlcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5IG1ldGhvZCB0aGF0IHN1cHBsaWVzIHJlZmVyZW5jZXMKLXRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlIHByb3ZpZGVyJ3MgcG9pbnQtb2Ytb2ZmZXJpbmcsIGJ5IHNwZWNpZnlpbmcKLWhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yIGF2YWlsYWJsZSBXZWIgc2VydmljZXMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24KLWRlZmluZXMgdGhlIGxvY2F0aW9ucyBvbiBhIFdlYiBzaXRlIHdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLjwvcD4KLTxwPlNpbmNlIFdTSUwgZm9jdXNlcyBvbiBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotY29tcGxlbWVudHMgVURESSBieSBmYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUKLW9uIFdlYiBzaXRlcyB0aGF0IG1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIEEgc2VwYXJhdGUgdG9waWMKLWluIHRoaXMgZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8eHJlZiBocmVmPSJjd3NpbHVkLmRpdGEiPlJlbGF0aW9uc2hpcAotYmV0d2VlbiBVRERJIGFuZCBXU0lMPC94cmVmPi48L3A+Ci08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGRlZmluZSBhIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2UuJm5ic3A7Ci1XU0lMIGRvY3VtZW50cyBwcm92aWRlIGEgbWV0aG9kIGZvciBhZ2dyZWdhdGluZyBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VydmljZQotZGVzY3JpcHRpb25zLiZuYnNwOyBXaXRoaW4gYSBXU0lMIGRvY3VtZW50LCBhIHNpbmdsZSBzZXJ2aWNlIGNhbiBoYXZlIG1vcmUKLXRoYW4gb25lIHJlZmVyZW5jZSB0byBhIHNlcnZpY2UgZGVzY3JpcHRpb24uJm5ic3A7IEZvciBleGFtcGxlLCBhIHNpbmdsZSBXZWIKLXNlcnZpY2UgbWlnaHQgYmUgcmVmZXJlbmNlZCB0d2ljZSBpbiBhIFdTSUwgZG9jdW1lbnQ6IG9uY2UgZGlyZWN0bHkgdmlhIGl0cwotV1NETCwgYW5kIGFnYWluIHZpYSBpdHMgYnVzaW5lc3NTZXJ2aWNlIGVudHJ5IGluIGEgVURESSByZWdpc3RyeS4gUmVmZXJlbmNlcwotdG8gdGhlc2UgdHdvIHNlcnZpY2UgZGVzY3JpcHRpb25zIHNob3VsZCBiZSBwdXQgaW50byBhIFdTSUwgZG9jdW1lbnQuJm5ic3A7Ci1JZiBtdWx0aXBsZSByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUsIGl0IGlzIGJlbmVmaWNpYWwgdG8gcHV0IGFsbCBvZiB0aGVtCi1pbiB0aGUgV1NJTCBkb2N1bWVudCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIGRvY3VtZW50IGNhbiBzZWxlY3QKLXRoZSB0eXBlIG9mIHNlcnZpY2UgZGVzY3JpcHRpb24gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYW5kIHByZWZlcnJlZCBieSB0aGF0Ci1hcHBsaWNhdGlvbi48L3A+Ci08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIHNlcnZlcyB0d28gcHJpbWFyeSBmdW5jdGlvbnM6PC9wPgotPHVsPgotPGxpPldTSUwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBsaXN0aW5nIHJlZmVyZW5jZXMgdG8gZXhpc3Rpbmcgc2VydmljZQotZGVzY3JpcHRpb25zLiBUaGVzZSBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBhbnkgZm9ybWF0LCBzdWNoCi1hcyBXU0RMLCBVRERJLCBvciBwbGFpbiBIVE1MLiZuYnNwOyBBIFdTSUwgZG9jdW1lbnQgaXMgZ2VuZXJhbGx5IG1hZGUgYXZhaWxhYmxlCi1hdCB0aGUgcG9pbnQtb2Ytb2ZmZXJpbmcgZm9yIHRoZSBzZXJ2aWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIHdpdGhpbiB0aGUgZG9jdW1lbnQuCi1BIFdTSUwgZG9jdW1lbnQgY2FuIGNvbnRhaW4gYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VydmljZSBkZXNjcmlwdGlvbnMsCi1hcyB3ZWxsIGFzIHJlZmVyZW5jZXMgdG8gb3RoZXIgV1NJTCBkb2N1bWVudHMuICA8cD5UaGUgYWJpbGl0eSB0byBsaW5rIGEgV1NJTAotZG9jdW1lbnQgdG8gb25lIG9yIG1vcmUgZGlmZmVyZW50IFdTSUwgZG9jdW1lbnRzIGFsbG93cyB5b3UgdG8gbWFuYWdlIHNlcnZpY2UKLWRlc2NyaXB0aW9uIHJlZmVyZW5jZXMgYnkgZ3JvdXBpbmcgdGhlbSBpbnRvIGRpZmZlcmVudCBkb2N1bWVudHMgYW5kIHRvIGJ1aWxkCi1hIGhpZXJhcmNoeSBvZiBXU0lMIGRvY3VtZW50cy4mbmJzcDsgRm9yIGV4YW1wbGUsIHNlcGFyYXRlIFdTSUwgZG9jdW1lbnRzCi1jYW4gYmUgY3JlYXRlZCBmb3IgZGlmZmVyZW50IGNhdGVnb3JpZXMgb2Ygc2VydmljZXMsIGFuZCBvbmUgcHJpbWFyeSBXU0lMCi1kb2N1bWVudCBjYW4gbGluayBhbGwgb2YgdGhlbSB0b2dldGhlci48L3A+PC9saT4KLTxsaT5XU0lMIGRlZmluZXMgYSBzZXQgb2YgY29udmVudGlvbnMgc28gdGhhdCBpdCBpcyBlYXN5IHRvIGxvY2F0ZSBvdGhlciBXU0lMCi1kb2N1bWVudHMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZG9lcyBub3QgbGltaXQgdGhlIHR5cGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbnMKLXRoYXQgY2FuIGJlIHJlZmVyZW5jZWQuJm5ic3A7IFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHNldCBvZiBzdGFuZGFyZAotZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgYm90aCBXU0RMIGFuZCBVRERJLiZuYnNwOyBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1pcyB0aGUgZGVmaW5pdGlvbiBvZiBsb2NhdGlvbnMgd2hlcmUgeW91IGNhbiBhY2Nlc3MgV1NJTCBkb2N1bWVudHMuPC9saT4KLTxsaT4gVHdvIGNvbnZlbnRpb25zIG1ha2UgdGhlIGxvY2F0aW9uIGFuZCByZXRyaWV2YWwgb2YgV1NJTCBkb2N1bWVudHMgZWFzeTogPHVsPgotPGxpPiA8dWljb250cm9sPkZpeGVkLW5hbWUgV1NJTCBkb2N1bWVudHMuPC91aWNvbnRyb2w+IFRoZSBmaXhlZCBuYW1lIGZvcgotV1NJTCBkb2N1bWVudHMgaXMgaW5zcGVjdGlvbi53c2lsLiZuYnNwOyBUaGUgaW5zcGVjdGlvbi53c2lsIGZpbGUgaXMgcGxhY2VkCi1hdCBjb21tb24gZW50cnkgcG9pbnRzIGZvciBhIFdlYiBzaXRlLiZuYnNwOyBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbW1vbiBlbnRyeQotcG9pbnQgaXMgaHR0cDovL2VudHJ5cG9pbnQuY29tIHRoZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGRvY3VtZW50IHdvdWxkCi1iZSBodHRwOi8vZW50cnlwb2ludC5jb20vaW5zcGVjdGlvbi53c2lsPC9saT4KLTxsaT4gPHVpY29udHJvbD5MaW5rZWQgV1NJTCBkb2N1bWVudHMuPC91aWNvbnRyb2w+IFJlZmVyZW5jZXMgdG8gV1NJTCBkb2N1bWVudHMKLWNhbiBhbHNvIGFwcGVhciB3aXRoaW4gZGlmZmVyZW50IGNvbnRlbnQgZG9jdW1lbnRzLCBzdWNoIGFzIEhUTUwgcGFnZXMuPC9saT4KLTwvdWw+IDwvbGk+Ci08L3VsPgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIHNwZWNpZmljYXRpb24sCi1yZWZlciB0byAgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPiB3d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWw8L3hyZWY+PC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD4KLTwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQzMWMxNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTSUwsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0lMLCBvdmVydmlldywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lsdWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NpbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3dzaWwiPjxhIG5hbWU9ImN3c2lsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCk8L2gxPgotCi0KLQotPGRpdj48cD5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeQotbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4KLVdoZW4geW91IGRpc2NvdmVyIFdlYiBzZXJ2aWNlcyB3aXRoIFVEREksIHlvdSBnbyB0byBhIGNlbnRyYWxpemVkIHJlZ2lzdHJ5LsKgCi1XU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cwoteW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcyBpdCBwcm92aWRlcy48L3A+Ci0KLTxwPklCTTxzdXA+wq48L3N1cD4gYW5kCi1NaWNyb3NvZnQncyBwcm9wb3NhbCBmb3IgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBpcyBkZXNpZ25lZCBhcm91bmQgYW4gWE1MLWJhc2VkCi1tb2RlbCBmb3IgYnVpbGRpbmcgYW4gYWdncmVnYXRpb24gb2YgcmVmZXJlbmNlcyB0byBleGlzdGluZyBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMsCi10aGF0IGFyZSBleHBvc2VkIHVzaW5nIHN0YW5kYXJkIFdlYiBzZXJ2ZXIgdGVjaG5vbG9neS48L3A+Ci0KLTxwPldTSUwgcHJvdmlkZXMgYSBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSBtZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzCi10byBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBhdCB0aGUgc2VydmljZSBwcm92aWRlcidzIHBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nCi1ob3cgdG8gaW5zcGVjdCBhIFdlYiBzaXRlIGZvciBhdmFpbGFibGUgV2ViIHNlcnZpY2VzLiBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1kZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIgc2l0ZSB3aGVyZSB5b3UgY2FuIGxvb2sgZm9yIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucy48L3A+Ci0KLTxwPlNpbmNlIFdTSUwgZm9jdXNlcyBvbiBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotY29tcGxlbWVudHMgVURESSBieSBmYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUKLW9uIFdlYiBzaXRlcyB0aGF0IG1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIEEgc2VwYXJhdGUgdG9waWMKLWluIHRoaXMgZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8YSBocmVmPSJjd3NpbHVkLmh0bWwiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2E+LjwvcD4KLQotPHA+VGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBkZWZpbmUgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlLsKgCi1XU0lMIGRvY3VtZW50cyBwcm92aWRlIGEgbWV0aG9kIGZvciBhZ2dyZWdhdGluZyBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VydmljZQotZGVzY3JpcHRpb25zLsKgIFdpdGhpbiBhIFdTSUwgZG9jdW1lbnQsIGEgc2luZ2xlIHNlcnZpY2UgY2FuIGhhdmUgbW9yZQotdGhhbiBvbmUgcmVmZXJlbmNlIHRvIGEgc2VydmljZSBkZXNjcmlwdGlvbi7CoCBGb3IgZXhhbXBsZSwgYSBzaW5nbGUgV2ViCi1zZXJ2aWNlIG1pZ2h0IGJlIHJlZmVyZW5jZWQgdHdpY2UgaW4gYSBXU0lMIGRvY3VtZW50OiBvbmNlIGRpcmVjdGx5IHZpYSBpdHMKLVdTREwsIGFuZCBhZ2FpbiB2aWEgaXRzIGJ1c2luZXNzU2VydmljZSBlbnRyeSBpbiBhIFVEREkgcmVnaXN0cnkuIFJlZmVyZW5jZXMKLXRvIHRoZXNlIHR3byBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBzaG91bGQgYmUgcHV0IGludG8gYSBXU0lMIGRvY3VtZW50LsKgCi1JZiBtdWx0aXBsZSByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUsIGl0IGlzIGJlbmVmaWNpYWwgdG8gcHV0IGFsbCBvZiB0aGVtCi1pbiB0aGUgV1NJTCBkb2N1bWVudCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIGRvY3VtZW50IGNhbiBzZWxlY3QKLXRoZSB0eXBlIG9mIHNlcnZpY2UgZGVzY3JpcHRpb24gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYW5kIHByZWZlcnJlZCBieSB0aGF0Ci1hcHBsaWNhdGlvbi48L3A+Ci0KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gc2VydmVzIHR3byBwcmltYXJ5IGZ1bmN0aW9uczo8L3A+Ci0KLTx1bD4KLTxsaT5XU0lMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgbGlzdGluZyByZWZlcmVuY2VzIHRvIGV4aXN0aW5nIHNlcnZpY2UKLWRlc2NyaXB0aW9ucy4gVGhlc2Ugc2VydmljZSBkZXNjcmlwdGlvbnMgY2FuIGJlIGRlZmluZWQgaW4gYW55IGZvcm1hdCwgc3VjaAotYXMgV1NETCwgVURESSwgb3IgcGxhaW4gSFRNTC7CoCBBIFdTSUwgZG9jdW1lbnQgaXMgZ2VuZXJhbGx5IG1hZGUgYXZhaWxhYmxlCi1hdCB0aGUgcG9pbnQtb2Ytb2ZmZXJpbmcgZm9yIHRoZSBzZXJ2aWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIHdpdGhpbiB0aGUgZG9jdW1lbnQuCi1BIFdTSUwgZG9jdW1lbnQgY2FuIGNvbnRhaW4gYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VydmljZSBkZXNjcmlwdGlvbnMsCi1hcyB3ZWxsIGFzIHJlZmVyZW5jZXMgdG8gb3RoZXIgV1NJTCBkb2N1bWVudHMuICA8cD5UaGUgYWJpbGl0eSB0byBsaW5rIGEgV1NJTAotZG9jdW1lbnQgdG8gb25lIG9yIG1vcmUgZGlmZmVyZW50IFdTSUwgZG9jdW1lbnRzIGFsbG93cyB5b3UgdG8gbWFuYWdlIHNlcnZpY2UKLWRlc2NyaXB0aW9uIHJlZmVyZW5jZXMgYnkgZ3JvdXBpbmcgdGhlbSBpbnRvIGRpZmZlcmVudCBkb2N1bWVudHMgYW5kIHRvIGJ1aWxkCi1hIGhpZXJhcmNoeSBvZiBXU0lMIGRvY3VtZW50cy7CoCBGb3IgZXhhbXBsZSwgc2VwYXJhdGUgV1NJTCBkb2N1bWVudHMKLWNhbiBiZSBjcmVhdGVkIGZvciBkaWZmZXJlbnQgY2F0ZWdvcmllcyBvZiBzZXJ2aWNlcywgYW5kIG9uZSBwcmltYXJ5IFdTSUwKLWRvY3VtZW50IGNhbiBsaW5rIGFsbCBvZiB0aGVtIHRvZ2V0aGVyLjwvcD4KLTwvbGk+Ci0KLTxsaT5XU0lMIGRlZmluZXMgYSBzZXQgb2YgY29udmVudGlvbnMgc28gdGhhdCBpdCBpcyBlYXN5IHRvIGxvY2F0ZSBvdGhlciBXU0lMCi1kb2N1bWVudHMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZG9lcyBub3QgbGltaXQgdGhlIHR5cGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbnMKLXRoYXQgY2FuIGJlIHJlZmVyZW5jZWQuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgc2V0IG9mIHN0YW5kYXJkCi1leHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBib3RoIFdTREwgYW5kIFVEREkuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotaXMgdGhlIGRlZmluaXRpb24gb2YgbG9jYXRpb25zIHdoZXJlIHlvdSBjYW4gYWNjZXNzIFdTSUwgZG9jdW1lbnRzLjwvbGk+Ci0KLTxsaT4gVHdvIGNvbnZlbnRpb25zIG1ha2UgdGhlIGxvY2F0aW9uIGFuZCByZXRyaWV2YWwgb2YgV1NJTCBkb2N1bWVudHMgZWFzeTogPHVsPgotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaXhlZC1uYW1lIFdTSUwgZG9jdW1lbnRzLjwvc3Bhbj4gVGhlIGZpeGVkIG5hbWUgZm9yCi1XU0lMIGRvY3VtZW50cyBpcyBpbnNwZWN0aW9uLndzaWwuwqAgVGhlIGluc3BlY3Rpb24ud3NpbCBmaWxlIGlzIHBsYWNlZAotYXQgY29tbW9uIGVudHJ5IHBvaW50cyBmb3IgYSBXZWIgc2l0ZS7CoCBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbW1vbiBlbnRyeQotcG9pbnQgaXMgaHR0cDovL2VudHJ5cG9pbnQuY29tIHRoZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGRvY3VtZW50IHdvdWxkCi1iZSBodHRwOi8vZW50cnlwb2ludC5jb20vaW5zcGVjdGlvbi53c2lsPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5MaW5rZWQgV1NJTCBkb2N1bWVudHMuPC9zcGFuPiBSZWZlcmVuY2VzIHRvIFdTSUwgZG9jdW1lbnRzCi1jYW4gYWxzbyBhcHBlYXIgd2l0aGluIGRpZmZlcmVudCBjb250ZW50IGRvY3VtZW50cywgc3VjaCBhcyBIVE1MIHBhZ2VzLjwvbGk+Ci0KLTwvdWw+Ci0gPC9saT4KLQotPC91bD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIHNwZWNpZmljYXRpb24sCi1yZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWwiIHRhcmdldD0iX2JsYW5rIj53d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWw8L2E+PC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2lsdWQuaHRtbCI+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTDwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgYW5kIHRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzLsKgIFRoZSB0d28gc3BlY2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgc2VwYXJhdGVseSBvciBqb2ludGx5OyBzZWFyY2hpbmcgd2l0aCBXU0lMIGNhbiByZXN1bHQgaW4gZmluZGluZyBpdGVtcyBpbiBVRERJLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTU4YTBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NpbHVkIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLAotRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gYm90aCBhZGRyZXNzIGlzc3VlcyByZWxhdGVkCi10byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuJm5ic3A7IEhvd2V2ZXIsIGVhY2ggc3BlY2lmaWNhdGlvbiB0YWtlcyBhIGRpZmZlcmVudAotYXBwcm9hY2ggdG8gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMuJm5ic3A7IFRoZSB0d28gc3BlY2lmaWNhdGlvbnMgY2FuCi1iZSB1c2VkIHNlcGFyYXRlbHkgb3Igam9pbnRseTsgc2VhcmNoaW5nIHdpdGggV1NJTCBjYW4gcmVzdWx0IGluIGZpbmRpbmcgaXRlbXMKLWluIFVEREkuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnJlbGF0aW9uc2hpcCB3aXRoIFdTSUw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+cmVsYXRpb25zaGlwIHdpdGggVURESTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5UaGUgVURESSBzcGVjaWZpY2F0aW9uIGFkZHJlc3NlcyBXZWIgc2VydmljZSBkaXNjb3ZlcnkgdGhyb3VnaCB0aGUgdXNlCi1vZiBhIGNlbnRyYWxpemVkIG1vZGVsLiZuYnNwOyBPbmUgb3IgbW9yZSByZXBvc2l0b3JpZXMgYXJlIGNyZWF0ZWQgdG8gaG91c2UKLWluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMgYW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG9mZmVyLiZuYnNwOyBSZXF1ZXN0cyBhbmQKLXVwZGF0ZXMgcGVydGFpbmluZyB0byB0aGUgc2VydmljZSBhbmQgYnVzaW5lc3MgcmVsYXRlZCBpbmZvcm1hdGlvbiBhcmUgaXNzdWVkCi1kaXJlY3RseSBhZ2FpbnN0IHRoZSByZXBvc2l0b3JpZXMuJm5ic3A7IEluIGFkZGl0aW9uLCBVRERJIHByZXNjcmliZXMgYSBzcGVjaWZpYwotZm9ybWF0IGZvciBhIHBvcnRpb24gb2YgdGhlIHN0b3JlZCBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiBhbmQsIHRvIGZhY2lsaXRhdGUKLWFkdmFuY2VkIChmb2N1c2VkKSBzZWFyY2hpbmcsIGFzc3VtZXMgdGhhdCBvdGhlciBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiB3aWxsCi1iZSBzdG9yZWQgYW5kIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBzeXN0ZW0gYXMgd2VsbC48L3A+Ci08cD5VRERJIHN5c3RlbXMgZmFjaWxpdGF0ZSBmb2N1c2VkIGRpc2NvdmVyeSBwYXR0ZXJucyBzaW5jZSB0aGVzZSBzeXN0ZW1zCi1hcmUgYmFzZWQgb24gb3JnYW5pemVkIHJlcG9zaXRvcmllcyB0aGF0IHByb3ZpZGUgYWR2YW5jZWQgc2VhcmNoaW5nIGNhcGFiaWxpdGllcy4mbmJzcDsKLVRoaXMgaGVscHMgcmVxdWVzdG9ycyBsb2NhdGUgcG90ZW50aWFsIGNvbW11bmljYXRpb24gcGFydG5lcnMuJm5ic3A7IEluIG9yZGVyCi10byBwcm92aWRlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHksIGhvd2V2ZXIsIFVEREkgcmVxdWlyZXMgdGhlIGRlcGxveW1lbnQgYW5kCi1tYWludGVuYW5jZSBvZiBhIGNlcnRhaW4gYW1vdW50IG9mIGluZnJhc3RydWN0dXJlLCB0aHVzIGluY3JlYXNpbmcgdGhlIGNvc3QKLW9mIG9wZXJhdGlvbi4mbmJzcDsgSW4gYWRkaXRpb24sIHVubGVzcyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbnMgYXJlIHN0b3JlZAotb25seSB3aXRoaW4gVURESSwgdGhlcmUgaXMgYSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBrZWVwaW5nIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMKLXN5bmNocm9uaXplZC48L3A+Ci08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIHJlbGllcyBvbiBhIGNvbXBsZXRlbHkgZGlzdHJpYnV0ZWQgbW9kZWwgZm9yIHByb3ZpZGluZwotc2VydmljZS1yZWxhdGVkIGluZm9ybWF0aW9uLiZuYnNwOyBUaGUgc2VydmljZSBkZXNjcmlwdGlvbnMgY2FuIGJlIHN0b3JlZAotYXQgYW55IGxvY2F0aW9uLCBhbmQgcmVxdWVzdHMgdG8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGFyZSBnZW5lcmFsbHkgbWFkZQotZGlyZWN0bHkgdG8gdGhlIGVudGl0aWVzIHRoYXQgYXJlIG9mZmVyaW5nIHRoZSBzZXJ2aWNlcy4mbmJzcDsgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotZG9lcyBub3Qgc3RpcHVsYXRlIGFueSBwYXJ0aWN1bGFyIGZvcm1hdCBmb3IgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24uJm5ic3A7Ci1JdCByZWxpZXMgb24gb3RoZXIgc3RhbmRhcmRzLCBpbmNsdWRpbmcgVURESSwgdG8gZGVmaW5lIHRoZSBkZXNjcmlwdGlvbiBmb3JtYXRzLiZuYnNwOwotVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBhbHNvIHJlbGllcyBvbiBleGlzdGluZyBXZWIgdGVjaG5vbG9naWVzIGFuZCBpbmZyYXN0cnVjdHVyZQotdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBwdWJsaXNoaW5nIGFuZCByZXRyaWV2aW5nIGl0cyBkb2N1bWVudHMuPC9wPgotPHA+V1NJTCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNzZW1pbmF0ZSBzZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gdGhyb3VnaAotZXhpc3RpbmcgcHJvdG9jb2xzIGRpcmVjdGx5IGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGJlaW5nIG9mZmVyZWQuJm5ic3A7Ci1UaGlzIGVuYWJsZXMgZm9jdXNlZCBkaXNjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkIG9uIGEgc2luZ2xlIHRhcmdldDsgaG93ZXZlciwKLWJlY2F1c2Ugb2YgaXRzIGRlY2VudHJhbGl6ZWQgYW5kIGRpc3RyaWJ1dGVkIG1vZGVsLCBXU0lMIGlzIG5vdCBhIGdvb2QgbWVjaGFuaXNtCi1mb3IgZXhlY3V0aW5nIGZvY3VzZWQgZGlzY292ZXJ5IGlmIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIgaXMgdW5rbm93bi48L3A+Ci08cD5UaGUgVURESSBhbmQgV1NJTCBzcGVjaWZpY2F0aW9ucyBzaG91bGQgYmUgdmlld2VkIGFzIGNvbXBsZW1lbnRhcnkgdGVjaG5vbG9naWVzCi10byBiZSB1c2VkIGVpdGhlciB0b2dldGhlciBvciBzZXBhcmF0ZWx5IGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLiZuYnNwOwotRm9yIGV4YW1wbGUsIGEgVURESSByZXBvc2l0b3J5IGNvdWxkIGJlIHBvcHVsYXRlZCBiYXNlZCBvbiB0aGUgcmVzdWx0cyBmb3VuZAotd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoIGZvciBXU0lMIGRvY3VtZW50cy4mbmJzcDsgTGlrZXdpc2UsIGEgVURESSByZXBvc2l0b3J5Ci1tYXkgaXRzZWxmIGJlIGRpc2NvdmVyZWQgd2hlbiBhIHJlcXVlc3RlciByZXRyaWV2ZXMgYSBXU0lMIGRvY3VtZW50IHRoYXQgcmVmZXJlbmNlcwotYW4gZW50cnkgaW4gdGhlIHJlcG9zaXRvcnkuJm5ic3A7IEluIGVudmlyb25tZW50cyB3aGVyZSB0aGUgYWR2YW5jZWQgZnVuY3Rpb25hbGl0eQotYWZmb3JkZWQgYnkgVURESSBpcyBub3QgcmVxdWlyZWQgYW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvIG5vdCBhbGxvdyBmb3IgaXRzCi1kZXBsb3ltZW50LCB0aGUgV1NJTCBtZWNoYW5pc20gbWF5IHByb3ZpZGUgYWxsIG9mIHRoZSBjYXBhYmlsaXRpZXMgdGhhdCBhcmUKLW5lZWRlZC4mbmJzcDsgSW4gc2l0dWF0aW9ucyB3aGVyZSBkYXRhIG5lZWRzIHRvIGJlIGNlbnRyYWxseSBtYW5hZ2VkLCBhIFVEREkKLXNvbHV0aW9uIGFsb25lIG1heSBwcm92aWRlIHRoZSBiZXN0IGZpdC4mbmJzcDsgVGhlIFVEREkgYW5kIFdTSUwgc3BlY2lmaWNhdGlvbnMKLXNob3VsZCBub3QgYmUgdmlld2VkIGFzIG11dHVhbGx5IGV4Y2x1c2l2ZS48L3A+Ci08bm90ZT5Cb3RoIFVEREkgYW5kIFdTSUwgY29udGFpbiBvbmx5IHJlZmVyZW5jZXMgdG8gV1NETCAtIHRoZXkgZG8gbm90IGNvbnRhaW4KLXRoZSBXU0RMIGRvY3VtZW50cyB0aGVtc2VsdmVzLjwvbm90ZT4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbC5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2Y2OWUwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgYW5kIHRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzLsKgIFRoZSB0d28gc3BlY2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgc2VwYXJhdGVseSBvciBqb2ludGx5OyBzZWFyY2hpbmcgd2l0aCBXU0lMIGNhbiByZXN1bHQgaW4gZmluZGluZyBpdGVtcyBpbiBVRERJLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBib3RoIGFkZHJlc3MgaXNzdWVzIHJlbGF0ZWQgdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIEhvd2V2ZXIsIGVhY2ggc3BlY2lmaWNhdGlvbiB0YWtlcyBhIGRpZmZlcmVudCBhcHByb2FjaCB0byB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy7CoCBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkgb3Igam9pbnRseTsgc2VhcmNoaW5nIHdpdGggV1NJTCBjYW4gcmVzdWx0IGluIGZpbmRpbmcgaXRlbXMgaW4gVURESS4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWxhdGlvbnNoaXAgd2l0aCBXU0lMLCBXU0lMLCByZWxhdGlvbnNoaXAgd2l0aCBVRERJIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVsYXRpb25zaGlwIHdpdGggV1NJTCwgV1NJTCwgcmVsYXRpb25zaGlwIHdpdGggVURESSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzaWx1ZCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2lsdWQiPjxhIG5hbWU9ImN3c2lsdWQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLAotRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gYm90aCBhZGRyZXNzIGlzc3VlcyByZWxhdGVkCi10byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50Ci1hcHByb2FjaCB0byB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy7CoCBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbgotYmUgdXNlZCBzZXBhcmF0ZWx5IG9yIGpvaW50bHk7IHNlYXJjaGluZyB3aXRoIFdTSUwgY2FuIHJlc3VsdCBpbiBmaW5kaW5nIGl0ZW1zCi1pbiBVRERJLjwvcD4KLQotPHA+VGhlIFVEREkgc3BlY2lmaWNhdGlvbiBhZGRyZXNzZXMgV2ViIHNlcnZpY2UgZGlzY292ZXJ5IHRocm91Z2ggdGhlIHVzZQotb2YgYSBjZW50cmFsaXplZCBtb2RlbC7CoCBPbmUgb3IgbW9yZSByZXBvc2l0b3JpZXMgYXJlIGNyZWF0ZWQgdG8gaG91c2UKLWluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMgYW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG9mZmVyLsKgIFJlcXVlc3RzIGFuZAotdXBkYXRlcyBwZXJ0YWluaW5nIHRvIHRoZSBzZXJ2aWNlIGFuZCBidXNpbmVzcyByZWxhdGVkIGluZm9ybWF0aW9uIGFyZSBpc3N1ZWQKLWRpcmVjdGx5IGFnYWluc3QgdGhlIHJlcG9zaXRvcmllcy7CoCBJbiBhZGRpdGlvbiwgVURESSBwcmVzY3JpYmVzIGEgc3BlY2lmaWMKLWZvcm1hdCBmb3IgYSBwb3J0aW9uIG9mIHRoZSBzdG9yZWQgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gYW5kLCB0byBmYWNpbGl0YXRlCi1hZHZhbmNlZCAoZm9jdXNlZCkgc2VhcmNoaW5nLCBhc3N1bWVzIHRoYXQgb3RoZXIgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gd2lsbAotYmUgc3RvcmVkIGFuZCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgc3lzdGVtIGFzIHdlbGwuPC9wPgotCi08cD5VRERJIHN5c3RlbXMgZmFjaWxpdGF0ZSBmb2N1c2VkIGRpc2NvdmVyeSBwYXR0ZXJucyBzaW5jZSB0aGVzZSBzeXN0ZW1zCi1hcmUgYmFzZWQgb24gb3JnYW5pemVkIHJlcG9zaXRvcmllcyB0aGF0IHByb3ZpZGUgYWR2YW5jZWQgc2VhcmNoaW5nIGNhcGFiaWxpdGllcy7CoAotVGhpcyBoZWxwcyByZXF1ZXN0b3JzIGxvY2F0ZSBwb3RlbnRpYWwgY29tbXVuaWNhdGlvbiBwYXJ0bmVycy7CoCBJbiBvcmRlcgotdG8gcHJvdmlkZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5LCBob3dldmVyLCBVRERJIHJlcXVpcmVzIHRoZSBkZXBsb3ltZW50IGFuZAotbWFpbnRlbmFuY2Ugb2YgYSBjZXJ0YWluIGFtb3VudCBvZiBpbmZyYXN0cnVjdHVyZSwgdGh1cyBpbmNyZWFzaW5nIHRoZSBjb3N0Ci1vZiBvcGVyYXRpb24uwqAgSW4gYWRkaXRpb24sIHVubGVzcyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbnMgYXJlIHN0b3JlZAotb25seSB3aXRoaW4gVURESSwgdGhlcmUgaXMgYSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBrZWVwaW5nIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMKLXN5bmNocm9uaXplZC48L3A+Ci0KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gcmVsaWVzIG9uIGEgY29tcGxldGVseSBkaXN0cmlidXRlZCBtb2RlbCBmb3IgcHJvdmlkaW5nCi1zZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24uwqAgVGhlIHNlcnZpY2UgZGVzY3JpcHRpb25zIGNhbiBiZSBzdG9yZWQKLWF0IGFueSBsb2NhdGlvbiwgYW5kIHJlcXVlc3RzIHRvIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBhcmUgZ2VuZXJhbGx5IG1hZGUKLWRpcmVjdGx5IHRvIHRoZSBlbnRpdGllcyB0aGF0IGFyZSBvZmZlcmluZyB0aGUgc2VydmljZXMuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotZG9lcyBub3Qgc3RpcHVsYXRlIGFueSBwYXJ0aWN1bGFyIGZvcm1hdCBmb3IgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24uwqAKLUl0IHJlbGllcyBvbiBvdGhlciBzdGFuZGFyZHMsIGluY2x1ZGluZyBVRERJLCB0byBkZWZpbmUgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdHMuwqAKLVRoZSBXU0lMIHNwZWNpZmljYXRpb24gYWxzbyByZWxpZXMgb24gZXhpc3RpbmcgV2ViIHRlY2hub2xvZ2llcyBhbmQgaW5mcmFzdHJ1Y3R1cmUKLXRvIHByb3ZpZGUgbWVjaGFuaXNtcyBmb3IgcHVibGlzaGluZyBhbmQgcmV0cmlldmluZyBpdHMgZG9jdW1lbnRzLjwvcD4KLQotPHA+V1NJTCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNzZW1pbmF0ZSBzZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gdGhyb3VnaAotZXhpc3RpbmcgcHJvdG9jb2xzIGRpcmVjdGx5IGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGJlaW5nIG9mZmVyZWQuwqAKLVRoaXMgZW5hYmxlcyBmb2N1c2VkIGRpc2NvdmVyeSB0byBiZSBwZXJmb3JtZWQgb24gYSBzaW5nbGUgdGFyZ2V0OyBob3dldmVyLAotYmVjYXVzZSBvZiBpdHMgZGVjZW50cmFsaXplZCBhbmQgZGlzdHJpYnV0ZWQgbW9kZWwsIFdTSUwgaXMgbm90IGEgZ29vZCBtZWNoYW5pc20KLWZvciBleGVjdXRpbmcgZm9jdXNlZCBkaXNjb3ZlcnkgaWYgdGhlIGNvbW11bmljYXRpb24gcGFydG5lciBpcyB1bmtub3duLjwvcD4KLQotPHA+VGhlIFVEREkgYW5kIFdTSUwgc3BlY2lmaWNhdGlvbnMgc2hvdWxkIGJlIHZpZXdlZCBhcyBjb21wbGVtZW50YXJ5IHRlY2hub2xvZ2llcwotdG8gYmUgdXNlZCBlaXRoZXIgdG9nZXRoZXIgb3Igc2VwYXJhdGVseSBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi7CoAotRm9yIGV4YW1wbGUsIGEgVURESSByZXBvc2l0b3J5IGNvdWxkIGJlIHBvcHVsYXRlZCBiYXNlZCBvbiB0aGUgcmVzdWx0cyBmb3VuZAotd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoIGZvciBXU0lMIGRvY3VtZW50cy7CoCBMaWtld2lzZSwgYSBVRERJIHJlcG9zaXRvcnkKLW1heSBpdHNlbGYgYmUgZGlzY292ZXJlZCB3aGVuIGEgcmVxdWVzdGVyIHJldHJpZXZlcyBhIFdTSUwgZG9jdW1lbnQgdGhhdCByZWZlcmVuY2VzCi1hbiBlbnRyeSBpbiB0aGUgcmVwb3NpdG9yeS7CoCBJbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHkKLWFmZm9yZGVkIGJ5IFVEREkgaXMgbm90IHJlcXVpcmVkIGFuZCB3aGVyZSBjb25zdHJhaW50cyBkbyBub3QgYWxsb3cgZm9yIGl0cwotZGVwbG95bWVudCwgdGhlIFdTSUwgbWVjaGFuaXNtIG1heSBwcm92aWRlIGFsbCBvZiB0aGUgY2FwYWJpbGl0aWVzIHRoYXQgYXJlCi1uZWVkZWQuwqAgSW4gc2l0dWF0aW9ucyB3aGVyZSBkYXRhIG5lZWRzIHRvIGJlIGNlbnRyYWxseSBtYW5hZ2VkLCBhIFVEREkKLXNvbHV0aW9uIGFsb25lIG1heSBwcm92aWRlIHRoZSBiZXN0IGZpdC7CoCBUaGUgVURESSBhbmQgV1NJTCBzcGVjaWZpY2F0aW9ucwotc2hvdWxkIG5vdCBiZSB2aWV3ZWQgYXMgbXV0dWFsbHkgZXhjbHVzaXZlLjwvcD4KLQotPGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IEJvdGggVURESSBhbmQgV1NJTCBjb250YWluIG9ubHkgcmVmZXJlbmNlcyB0byBXU0RMIC0gdGhleSBkbyBub3QgY29udGFpbgotdGhlIFdTREwgZG9jdW1lbnRzIHRoZW1zZWx2ZXMuPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2lsLmh0bWwiIHRpdGxlPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiI+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lsLmh0bWwiIHRpdGxlPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiI+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkMGExOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN3c2lud3NhIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L3RpdGxlPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnRvb2xzIG92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+VG9vbHMgYXJlIHByb3ZpZGVkIHRvIGFzc2lzdCB3aXRoIHRoZSBmb2xsb3dpbmcgYXNwZWN0cyBvZiBXZWIgc2VydmljZXMKLWRldmVsb3BtZW50OjwvcD4KLTx1bD4KLTxsaT4gPHVpY29udHJvbD5EaXNjb3ZlcjwvdWljb250cm9sPi4gQnJvd3NlIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJpZXMKLW9yIFdTSUwgZG9jdW1lbnRzIHRvIGxvY2F0ZSBleGlzdGluZyBXZWIgc2VydmljZXMgZm9yIGludGVncmF0aW9uLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+Q3JlYXRlIG9yIFRyYW5zZm9ybTwvdWljb250cm9sPi4gQ3JlYXRlIGJvdHRvbS11cCBXZWIgc2VydmljZXMKLWZyb20gZXhpc3RpbmcgYXJ0aWZhY3RzLCBzdWNoIGFzIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbnMgYW5kIGVudGVycHJpc2UgYmVhbnMuIENyZWF0ZQotdG9wLWRvd24gV2ViIHNlcnZpY2VzIGZyb20gV1NETCBkaXNjb3ZlcmVkIGZyb20gb3RoZXJzIG9yIGNyZWF0ZWQgdXNpbmcgdGhlCi1XU0RMIEVkaXRvci48L2xpPgotPGxpPiA8dWljb250cm9sPkJ1aWxkPC91aWNvbnRyb2w+LiBXcmFwIGV4aXN0aW5nIGFydGlmYWN0cyBhcyBTT0FQIGFjY2Vzc2libGUKLXNlcnZpY2VzIGFuZCBkZXNjcmliZSB0aGVtIGluIFdTREwuIFRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBhc3Npc3QgeW91IGluCi1nZW5lcmF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGllbnQgcHJveHkgdG8gV2ViIHNlcnZpY2VzIGRlc2NyaWJlZCBpbiBXU0RMCi1hbmQgaW4gZ2VuZXJhdGluZyA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIKLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gc2tlbGV0b25zIGZyb20gV1NETC48L2xpPgotPGxpPiA8dWljb250cm9sPkRlcGxveTwvdWljb250cm9sPi4gRGVwbG95IFdlYiBzZXJ2aWNlcyBpbnRvIGEgdmFyaWV0eSBvZgotdGVzdCBlbnZpcm9ubWVudHMuPC9saT4KLTxsaT4gPHVpY29udHJvbD5UZXN0PC91aWNvbnRyb2w+LiBUZXN0IFdlYiBzZXJ2aWNlcyBydW5uaW5nIGxvY2FsbHkgb3IgcmVtb3RlbHkKLWluIG9yZGVyIHRvIGdldCBpbnN0YW50IGZlZWRiYWNrLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RGV2ZWxvcDwvdWljb250cm9sPi4gR2VuZXJhdGUgc2FtcGxlIGFwcGxpY2F0aW9ucyB0byBhc3Npc3QKLXlvdSBpbiBjcmVhdGluZyB5b3VyIG93biBXZWIgc2VydmljZSBjbGllbnQgYXBwbGljYXRpb24uPC9saT4KLTxsaT4gPHVpY29udHJvbD5QdWJsaXNoPC91aWNvbnRyb2w+LiBQdWJsaXNoIFdlYiBzZXJ2aWNlcyB0byBhIFVEREkgdjIgb3IKLXYzIEJ1c2luZXNzIFJlZ2lzdHJ5LCBhZHZlcnRpc2luZyB5b3VyIFdlYiBzZXJ2aWNlcyBzbyB0aGF0IG90aGVyIGJ1c2luZXNzZXMKLWFuZCBjbGllbnRzIGNhbiBhY2Nlc3MgdGhlbS48L2xpPgotPC91bD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjg1ZjI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCB0b29scyBvdmVydmlldyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgdG9vbHMgb3ZlcnZpZXciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NpbndzYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2lud3NhIj48YSBuYW1lPSJjd3NpbndzYSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvaDE+Ci0KLQotPGRpdj4KLTxwPlRvb2xzIGFyZSBwcm92aWRlZCB0byBhc3Npc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGFzcGVjdHMgb2YgV2ViIHNlcnZpY2VzCi1kZXZlbG9wbWVudDo8L3A+Ci0KLTx1bD4KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGlzY292ZXI8L3NwYW4+LiBCcm93c2UgdGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cmllcwotb3IgV1NJTCBkb2N1bWVudHMgdG8gbG9jYXRlIGV4aXN0aW5nIFdlYiBzZXJ2aWNlcyBmb3IgaW50ZWdyYXRpb24uPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DcmVhdGUgb3IgVHJhbnNmb3JtPC9zcGFuPi4gQ3JlYXRlIGJvdHRvbS11cCBXZWIgc2VydmljZXMKLWZyb20gZXhpc3RpbmcgYXJ0aWZhY3RzLCBzdWNoIGFzIEphdmHihKIgYmVhbnMgYW5kIGVudGVycHJpc2UgYmVhbnMuIENyZWF0ZQotdG9wLWRvd24gV2ViIHNlcnZpY2VzIGZyb20gV1NETCBkaXNjb3ZlcmVkIGZyb20gb3RoZXJzIG9yIGNyZWF0ZWQgdXNpbmcgdGhlCi1XU0RMIEVkaXRvci48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJ1aWxkPC9zcGFuPi4gV3JhcCBleGlzdGluZyBhcnRpZmFjdHMgYXMgU09BUCBhY2Nlc3NpYmxlCi1zZXJ2aWNlcyBhbmQgZGVzY3JpYmUgdGhlbSBpbiBXU0RMLiBUaGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgYXNzaXN0IHlvdSBpbgotZ2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IHRvIFdlYiBzZXJ2aWNlcyBkZXNjcmliZWQgaW4gV1NETAotYW5kIGluIGdlbmVyYXRpbmcgSmF2YSBiZWFuIHNrZWxldG9ucyBmcm9tIFdTREwuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZXBsb3k8L3NwYW4+LiBEZXBsb3kgV2ViIHNlcnZpY2VzIGludG8gYSB2YXJpZXR5IG9mCi10ZXN0IGVudmlyb25tZW50cy48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRlc3Q8L3NwYW4+LiBUZXN0IFdlYiBzZXJ2aWNlcyBydW5uaW5nIGxvY2FsbHkgb3IgcmVtb3RlbHkKLWluIG9yZGVyIHRvIGdldCBpbnN0YW50IGZlZWRiYWNrLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGV2ZWxvcDwvc3Bhbj4uIEdlbmVyYXRlIHNhbXBsZSBhcHBsaWNhdGlvbnMgdG8gYXNzaXN0Ci15b3UgaW4gY3JlYXRpbmcgeW91ciBvd24gV2ViIHNlcnZpY2UgY2xpZW50IGFwcGxpY2F0aW9uLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHVibGlzaDwvc3Bhbj4uIFB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRvIGEgVURESSB2MiBvcgotdjMgQnVzaW5lc3MgUmVnaXN0cnksIGFkdmVydGlzaW5nIHlvdXIgV2ViIHNlcnZpY2VzIHNvIHRoYXQgb3RoZXIgYnVzaW5lc3NlcwotYW5kIGNsaWVudHMgY2FuIGFjY2VzcyB0aGVtLjwvbGk+Ci0KLTwvdWw+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YTgzNzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3Npb3ZlciIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSk8L3RpdGxlPgotPHNob3J0ZGVzYz5XUy1JIGlzIGFuIG9yZ2FuaXphdGlvbiBkZXNpZ25lZCB0byBwcm9tb3RlIFdlYiBzZXJ2aWNlIGludGVyb3BlcmFiaWxpdHkKLWFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eTxpbmRleHRlcm0+dHJhZmZpYyBjb21wbGlhbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmludGVyb3BlcmFiaWxpdHk8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTLUksIHJlZmVyIHRvIHRoZWlyIFdlYiBzaXRlOiAgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3d3dy53cy1pLm9yZy8iIHNjb3BlPSJleHRlcm5hbCI+aHR0cDovL3d3dy53cy1pLm9yZy88L3hyZWY+LgotVGhpcyBzaXRlIGNvbnRhaW5zIHJlc291cmNlcyBzdWNoIGFzIGFuIG92ZXJ2aWV3IG9mIFdlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LAotdXNhZ2Ugc2NlbmFyaW9zLCBhbmQgc3BlY2lmaWNhdGlvbnMuPC9wPgotPHA+V1MtSSBCYXNpYyBQcm9maWxlIGlzIGEgb3V0bGluZSBvZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UKLXByb3RvY29sIChTT0FQL0hUVFApIHRyYWZmaWMgbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4KLVRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIGN1cnJlbnRseSBzdXBwb3J0IFdTLUkgU2ltcGxlIFNPQVAKLUJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCkgd2hpY2ggYnVpbGRzIG9uIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUsIGFuZAotdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIKLXRvIHRoZSBXUy1JIFdlYiBzaXRlLCBhbmQgdW5kZXIgIDx1aWNvbnRyb2w+RGVsaXZlcmFibGVzPC91aWNvbnRyb2w+IHNlbGVjdAotIDx1aWNvbnRyb2w+QmFzaWMgUHJvZmlsZTwvdWljb250cm9sPi48L3A+Ci08cD5EZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgV2ViIHNlcnZpY2UgYmVpbmcgY3JlYXRlZCwgeW91IG1heSBvciBtYXkgbm90Ci13YW50IHlvdXIgV2ViIHNlcnZpY2UgdG8gY29tcGx5IHdpdGggdGhlIFdTLUkgcHJvZmlsZXMuIFRoZSBkZWZhdWx0IGxldmVsCi1vZiBjb21wbGlhbmNlIGlzIHRvIGdlbmVyYXRlIGEgd2FybmluZyBpZiBhIG5vbiBXUy1JIFNTQlAgY29tcGxhaW50IFdlYiBzZXJ2aWNlCi1vcHRpb24gaXMgc2VsZWN0ZWQgYW5kIHRvIGlnbm9yZSBhbnkgbm9uIFdTLUkgQVAgY29tcGxpYW50IHNlbGVjdGlvbnMuIFlvdQotY2FuIHNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGF0IHRoZSB3b3Jrc3BhY2Ugb3IgcHJvamVjdCBsZXZlbC4gVGhlCi1XZWIgc2VydmljZXMgd2l6YXJkcywgdGhlIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciCi10cmFkZW1hcms9IldlYlNwaGVyZSI+V2ViU3BoZXJlPC90bT4gcnVuLXRpbWUgZW52aXJvbm1lbnRzLCB0aGUgV1NETCBlZGl0b3IsCi1hbmQgb3RoZXIgV2ViIHNlcnZpY2VzIHRvb2xzIHByb3ZpZGVkIHN1cHBvcnQgYW5kIGVuY291cmFnZSB0aGUgZGV2ZWxvcG1lbnQKLW9mIFdTLUkgY29tcGxpYW5jZSBzZXJ2aWNlcy48L3A+Ci08L2NvbmJvZHk+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkMTEwYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kIHByb2dyYW1taW5nIGxhbmd1YWdlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV1MtSSBpcyBhbiBvcmdhbml6YXRpb24gZGVzaWduZWQgdG8gcHJvbW90ZSBXZWIgc2VydmljZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LCB0cmFmZmljIGNvbXBsaWFuY2UsIGludGVyb3BlcmFiaWxpdHksIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LCB0cmFmZmljIGNvbXBsaWFuY2UsIGludGVyb3BlcmFiaWxpdHksIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2lvdmVyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3Npb3ZlciI+PGEgbmFtZT0iY3dzaW92ZXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKTwvaDE+Ci0KLQotCi08ZGl2PjxwPldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eQotYWNyb3NzIHBsYXRmb3Jtcywgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuPC9wPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXUy1JLCByZWZlciB0byB0aGVpciBXZWIgc2l0ZTogIDxhIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy53cy1pLm9yZy88L2E+LgotVGhpcyBzaXRlIGNvbnRhaW5zIHJlc291cmNlcyBzdWNoIGFzIGFuIG92ZXJ2aWV3IG9mIFdlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LAotdXNhZ2Ugc2NlbmFyaW9zLCBhbmQgc3BlY2lmaWNhdGlvbnMuPC9wPgotCi08cD5XUy1JIEJhc2ljIFByb2ZpbGUgaXMgYSBvdXRsaW5lIG9mIHJlcXVpcmVtZW50cyB0byB3aGljaCBXU0RMIGFuZCBXZWIgc2VydmljZQotcHJvdG9jb2wgKFNPQVAvSFRUUCkgdHJhZmZpYyBtdXN0IGNvbXBseSBpbiBvcmRlciB0byBjbGFpbSBXUy1JIGNvbmZvcm1hbmNlLgotVGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgY3VycmVudGx5IHN1cHBvcnQgV1MtSSBTaW1wbGUgU09BUAotQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSB3aGljaCBidWlsZHMgb24gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSwgYW5kCi10aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFRvIHZpZXcgdGhlIHNwZWNpZmljYXRpb25zLCByZWZlcgotdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZCB1bmRlciAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGVsaXZlcmFibGVzPC9zcGFuPiBzZWxlY3QKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CYXNpYyBQcm9maWxlPC9zcGFuPi48L3A+Ci0KLTxwPkRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSBiZWluZyBjcmVhdGVkLCB5b3UgbWF5IG9yIG1heSBub3QKLXdhbnQgeW91ciBXZWIgc2VydmljZSB0byBjb21wbHkgd2l0aCB0aGUgV1MtSSBwcm9maWxlcy4gVGhlIGRlZmF1bHQgbGV2ZWwKLW9mIGNvbXBsaWFuY2UgaXMgdG8gZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIGEgbm9uIFdTLUkgU1NCUCBjb21wbGFpbnQgV2ViIHNlcnZpY2UKLW9wdGlvbiBpcyBzZWxlY3RlZCBhbmQgdG8gaWdub3JlIGFueSBub24gV1MtSSBBUCBjb21wbGlhbnQgc2VsZWN0aW9ucy4gWW91Ci1jYW4gc2V0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgYXQgdGhlIHdvcmtzcGFjZSBvciBwcm9qZWN0IGxldmVsLiBUaGUKLVdlYiBzZXJ2aWNlcyB3aXphcmRzLCB0aGUgV2ViU3BoZXJlPHN1cD7Crjwvc3VwPiBydW4tdGltZSBlbnZpcm9ubWVudHMsIHRoZSBXU0RMIGVkaXRvciwKLWFuZCBvdGhlciBXZWIgc2VydmljZXMgdG9vbHMgcHJvdmlkZWQgc3VwcG9ydCBhbmQgZW5jb3VyYWdlIHRoZSBkZXZlbG9wbWVudAotb2YgV1MtSSBjb21wbGlhbmNlIHNlcnZpY2VzLjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliNDE3NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0id2Vic2VydmljZXNzdGFuZGFyZHMiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvdGl0bGU+Ci08c2hvcnRkZXNjPk9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cwotb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cwotdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMKLXByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuCi1Tb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eQotb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+c3RhbmRhcmRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+VGhlIGZvbGxvd2luZyBzdGFuZGFyZHMgcGxheSBrZXkgcm9sZXMgaW4gV2ViIHNlcnZpY2VzOiBVbml2ZXJzYWwgRGVzY3JpcHRpb24sCi1EaXNjb3ZlcnkgYW5kIEludGVncmF0aW9uIChVRERJKSwgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSwKLVdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSwgU09BUCwgYW5kIFdlYiBTZXJ2aWNlcyBJbnRlcm9wZXJhYmlsaXR5Ci0oV1MtSSkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdGFuZGFyZHMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAyLjwvcD4KLTxwPlRoZSBVRERJIHNwZWNpZmljYXRpb24gZGVmaW5lcyBvcGVuLCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzdGFuZGFyZHMgdGhhdAotZW5hYmxlIGJ1c2luZXNzZXMgdG8gc2hhcmUgaW5mb3JtYXRpb24gaW4gYSBnbG9iYWwgYnVzaW5lc3MgcmVnaXN0cnksIGRpc2NvdmVyCi1zZXJ2aWNlcyBvbiB0aGUgcmVnaXN0cnksIGFuZCBkZWZpbmUgaG93IHRoZXkgaW50ZXJhY3Qgb3ZlciB0aGUgSW50ZXJuZXQuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJLCByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIgotc2NvcGU9ImV4dGVybmFsIj53d3cudWRkaS5vcmc8L3hyZWY+PC9wPgotPHA+V1NJTCBpcyBhbiBYTUwtYmFzZWQgb3BlbiBzcGVjaWZpY2F0aW9uIHRoYXQgZGVmaW5lcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UKLWRpc2NvdmVyeSBtZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlCi1wcm92aWRlcidzIHBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yCi1hdmFpbGFibGUgV2ViIHNlcnZpY2VzLiZuYnNwOyBBIFdTSUwgZG9jdW1lbnQgZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9uIGEgV2ViCi1zaXRlIHdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLiZuYnNwO1NpbmNlIFdTSUwgZm9jdXNlcwotb24gZGlzdHJpYnV0ZWQgc2VydmljZSBkaXNjb3ZlcnksIHRoZSBXU0lMIHNwZWNpZmljYXRpb24gY29tcGxlbWVudHMgVURESQotYnkgZmFjaWxpdGF0aW5nIHRoZSBkaXNjb3Zlcnkgb2Ygc2VydmljZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIFdlYiBzaXRlcwotdGhhdCBtYXkgbm90IGJlIGxpc3RlZCB5ZXQgaW4gYSBVRERJIHJlZ2lzdHJ5LiZuYnNwO0Egc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8eHJlZiBocmVmPSJjd3NpbHVkLmRpdGEiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuCi1VRERJIGFuZCBXU0lMPC94cmVmPi4mbmJzcDsgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1NJTCwgcmVmZXIgdG8gIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+IHd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwveHJlZj48L3A+Ci08cD5XU0RMIGlzIGFuIFhNTC1iYXNlZCBvcGVuIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgdGhlIGludGVyZmFjZXMgdG8KLWFuZCBpbnN0YW5jZXMgb2YgV2ViIHNlcnZpY2VzIG9uIHRoZSBuZXR3b3JrLiBJdCBpcyBleHRlbnNpYmxlLCBzbyBlbmRwb2ludHMKLWNhbiBiZSBkZXNjcmliZWQgcmVnYXJkbGVzcyBvZiB0aGUgbWVzc2FnZSBmb3JtYXRzIG9yIG5ldHdvcmsgcHJvdG9jb2xzIHRoYXQKLWFyZSB1c2VkIHRvIGNvbW11bmljYXRlLiBCdXNpbmVzc2VzIGNhbiBtYWtlIHRoZSBXU0RMIGRvY3VtZW50cyBmb3IgdGhlaXIKLVdlYiBzZXJ2aWNlcyBhdmFpbGFibGUgdGhvdWdoIFVEREksIFdTSUwsIG9yIGJ5IGJyb2FkY2FzdGluZyB0aGUgVVJMcyB0byB0aGVpcgotV1NETCB2aWEgZW1haWwgb3IgV2ViIHNpdGVzLiBXU0RMIGlzIGRlc2NyaWJlZCBhcyBhIHNlcGFyYXRlIHRvcGljIGluIHRoaXMKLWRvY3VtZW50YXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTREwsIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiBzY29wZT0iZXh0ZXJuYWwiPnd3dy53My5vcmcvVFIvd3NkbDwveHJlZj48L3A+Ci08cD5TT0FQIGlzIGFuIFhNTC1iYXNlZCBzdGFuZGFyZCBmb3IgbWVzc2FnaW5nIG92ZXIgSFRUUCBhbmQgb3RoZXIgSW50ZXJuZXQKLXByb3RvY29scy4gSXQgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluCi1hIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJdCBpcyBiYXNlZCBvbiBYTUwgYW5kIGNvbnNpc3RzCi1vZiB0aHJlZSBwYXJ0czo8dWw+Ci08bGk+QW4gZW52ZWxvcGUgdGhhdCBkZWZpbmVzIGEgZnJhbWV3b3JrIGZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlCi1hbmQgaG93IHRvIHByb2Nlc3MgaXQuPC9saT4KLTxsaT5BIHNldCBvZiBlbmNvZGluZyBydWxlcyBmb3IgZXhwcmVzc2luZyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy48L2xpPgotPGxpPkEgY29udmVudGlvbiBmb3IgcmVwcmVzZW50aW5nIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgYW5kIHJlc3BvbnNlcy48L2xpPgotPC91bD5TT0FQIGVuYWJsZXMgdGhlIGJpbmRpbmcgYW5kIHVzYWdlIG9mIGRpc2NvdmVyZWQgV2ViIHNlcnZpY2VzIGJ5IGRlZmluaW5nCi1hIG1lc3NhZ2UgcGF0aCBmb3Igcm91dGluZyBtZXNzYWdlcy4gU09BUCBtYXkgYmUgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIKLXNlcnZpY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTT0FQIDEuMSAoU09BUCAxLjIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKLVdlYiBzZXJ2aWNlcyB0b29scyksIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NPQVAiCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy53My5vcmcvVFIvU09BUDwveHJlZj48L3A+Ci08cD5GaWd1cmUgMi4gUmVsYXRpb25zaGlwcyBiZXR3ZWVuIFNPQVAsIFVEREksIFdTSUwgYW5kIFdTREwuPC9wPgotPHA+IDxpbWFnZSBhbHQ9IkZpZ3VyZSAyIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gU09BUCwgVURESSwgV1NJTCwgYW5kIFdTREwuIgotaHJlZj0iLi4vaW1hZ2VzL3NvYXB1ZHdzLmdpZiI+PC9pbWFnZT4gPC9wPgotPHA+QSBzZXJ2aWNlIHByb3ZpZGVyIGhvc3RzIGEgV2ViIHNlcnZpY2UgYW5kIG1ha2VzIGl0IGFjY2Vzc2libGUgdXNpbmcgcHJvdG9jb2xzCi1zdWNoIGFzIFNPQVAvSFRUUCBvciBTT0FQL0pNUy4gVGhlIFdlYiBzZXJ2aWNlIGlzIGRlc2NyaWJlZCBieSBhIFdTREwgZG9jdW1lbnQKLXRoYXQgaXMgc3RvcmVkIG9uIHRoZSBwcm92aWRlcidzIHNlcnZlciBvciBpbiBhIHNwZWNpYWwgcmVwb3NpdG9yeS4gVGhlIFdTREwKLWRvY3VtZW50IG1heSBiZSByZWZlcmVuY2VkIGJ5IHRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFuZCBXU0lMIGRvY3VtZW50cy4KLVRoZXNlIGNvbnRhaW4gcG9pbnRlcnMgdG8gdGhlIFdlYiBzZXJ2aWNlJ3MgV1NETCBmaWxlcy48L3A+Ci08cD5UaGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgYW5kIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSBhcmUgb3V0bGluZXMKLW9mIHJlcXVpcmVtZW50cyB0byB3aGljaCBXU0RMIGFuZCBXZWIgc2VydmljZSBwcm90b2NvbCAoU09BUC9IVFRQKSB0cmFmZmljCi1tdXN0IGNvbXBseSBpbiBvcmRlciB0byBjbGFpbSBXUy1JIGNvbmZvcm1hbmNlLiBUaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbgotdG9vbHMgY3VycmVudGx5IHN1cHBvcnQgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wIGFuZCB0aGUgQXR0YWNobWVudAotUHJvZmlsZSAxLjAuIFRvIHZpZXcgdGhlIHNwZWNpZmljYXRpb25zLCByZWZlciB0byB0aGUgV1MtSSBXZWIgc2l0ZSwgYW5kIHVuZGVyCi0gPHVpY29udHJvbD5SZXNvdXJjZXM8L3VpY29udHJvbD4gc2VsZWN0ICA8dWljb250cm9sPkRvY3VtZW50YXRpb248L3VpY29udHJvbD46IDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LndzLWkub3JnIiBzY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly93d3cud3MtaS5vcmc8L3hyZWY+PC9wPgotPHA+U2V2ZXJhbCBuZXcgV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZlbG9wbWVudAotZW52aXJvbm1lbnQuIFRoZXNlIGluY2x1ZGU6PGRsPjxkbGVudHJ5PgotPGR0PkpBWC1SUEM8L2R0PgotPGRkPkpBWC1SUEMgc3RhbmRzIGZvciA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcwotSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcwotKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQKLXVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiB0bwotV1NETCBhbmQgV1NETCB0byA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIKLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZwotYW5kIGRlcGxveWluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcGxhdGZvcm0uCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byB0aGUgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTAxIgotc2NvcGU9ImV4dGVybmFsIj5vZmZpY2lhbCBzcGVjaWZpY2F0aW9uczwveHJlZj4uPC9kZD4KLTwvZGxlbnRyeT48ZGxlbnRyeT4KLTxkdD5KU1ItMTA5PC9kdD4KLTxkZD5KU1ItMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nCi1tb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlCi1KYXZhIEVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQgQ2xpZW50IEFwcGxpY2F0aW9uCi1jb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIG9mZmljaWFsIHNwZWNpZmljYXRpb25zOiA8dWw+Ci08bGk+PHhyZWYgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTA5IiBzY29wZT0iZXh0ZXJuYWwiCi10eXBlPSJodG1sIj5KU1ItMTA5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9OTIxIiBzY29wZT0iZXh0ZXJuYWwiCi10eXBlPSJodG1sIj5KU1ItOTIxPC94cmVmPjwvbGk+Ci08L3VsPjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnk+Ci08ZHQ+V1MtUzwvZHQ+Ci08ZGQ+VGhlc2UgdG9vbHMgc3VwcG9ydCB0aGUgT0FTSVMgV2ViIFNlcnZpY2VzIFNlY3VyaXR5IDEuMCBzdGFuZGFyZC4gRm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhpcyBzdGFuZGFyZCwgcmVmZXIgdG86PHVsPgotPGxpPjx4cmVmIGhyZWY9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtc29hcC1tZXNzYWdlLXNlY3VyaXR5LTEuMC5wZGYiCi1zY29wZT0iZXh0ZXJuYWwiIHR5cGU9Imh0bWwiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogU09BUCBNZXNzYWdlIFNlY3VyaXR5Ci1WMS4wPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXVzZXJuYW1lLXRva2VuLXByb2ZpbGUtMS4wLnBkZiIKLXNjb3BlPSJleHRlcm5hbCIgdHlwZT0iaHRtbCI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBVc2VybmFtZSBUb2tlbiBQcm9maWxlCi1WMS4wPC94cmVmPjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMC5wZGYiCi1zY29wZT0iZXh0ZXJuYWwiIHR5cGU9Imh0bWwiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogWC41MDkgVG9rZW4gUHJvZmlsZSBWMS4wPC94cmVmPjwvbGk+Ci08L3VsPjwvZGQ+Ci08L2RsZW50cnk+PC9kbD48L3A+Ci08cD5XZWIgc2VydmljZXMgdG9vbGluZyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHNwZWNpZmljYXRpb25zOjwvcD4KLTx0YWJsZT4KLTx0Z3JvdXAgY29scz0iMiI+PGNvbHNwZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9Ijk1KiIvPjxjb2xzcGVjIGNvbG5hbWU9ImNvbDIiCi1jb2x3aWR0aD0iMTA0KiIvPgotPHRoZWFkPgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIiB2YWxpZ249InRvcCI+VGVjaG5vbG9neSBvciBzcGVjaWZpY2F0aW9uPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIiB2YWxpZ249InRvcCI+VmVyc2lvbiBvciBsZXZlbCBzdXBwb3J0ZWQ8L2VudHJ5PgotPC9yb3c+Ci08L3RoZWFkPgotPHRib2R5PgotPHJvdz4KLTxlbnRyeSBuYW1lZW5kPSJjb2wyIiBuYW1lc3Q9ImNvbDEiPjxiPlRyYW5zcG9ydHM8L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5IVFRQL0hUVFBTPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52MS4wIGFuZCB2MS4xPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5KTVM8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgbmFtZWVuZD0iY29sMiIgbmFtZXN0PSJjb2wxIj48Yj5NZXNzYWdpbmc8L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5TT0FQIHNwZWNpZmljYXRpb248L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPnYxLjE8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPlNPQVAgQXR0YWNoZW1lbnRzPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IG5hbWVlbmQ9ImNvbDIiIG5hbWVzdD0iY29sMSI+PGI+RGVzY3JpcHRpb248L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5VRERJPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52Mi4wPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XU0RMPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52MS4xPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XU0lMPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52MS4wPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBuYW1lZW5kPSJjb2wyIiBuYW1lc3Q9ImNvbDEiPjxiPlNlY3VyaXR5PC9iPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+V1MtU2VjdXJpdHk8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPk9BU0lTIFN0YW5kYXJkIDEuMDwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgbmFtZWVuZD0iY29sMiIgbmFtZXN0PSJjb2wxIj48Yj5JbmVyb3BlcmFiaWxpdHk8L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XUy1JIEJhc2ljIFByb2ZpbGU8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjEuMS4yPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZTwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+MS4wLjM8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPldTLUkgQXR0YWNobWVudHMgUHJvZmlsZTwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+MS4wPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj48Yj5PdGhlciBTdGFuZGFyZHM8L2I+PC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkpBWC1SUEM8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPnYxLjAgZm9yIEoyRUUgMS4zLCB2MS4xIGZvciBKMkVFIDEuNCBhbmQgSmF2YSBFRSAxLjU8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkpTUiAxMDk8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjwvZW50cnk+Ci08L3Jvdz4KLTwvdGJvZHk+Ci08L3Rncm91cD4KLTwvdGFibGU+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9saW5rdGV4dD4KLTwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMKLWRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSJjd3Npb3Zlci5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eQotKFdTLUkpPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzdhMGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBzdGFuZGFyZHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIHN0YW5kYXJkcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jc29hcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzaWwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY2pheHJwYy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9janNyMTA5Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3Npb3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0id2Vic2VydmljZXNzdGFuZGFyZHMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ3ZWJzZXJ2aWNlc3N0YW5kYXJkcyI+PGEgbmFtZT0id2Vic2VydmljZXNzdGFuZGFyZHMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2gxPgotCi0KLQotPGRpdj48cD5PbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMKLW9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMKLXRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzCi1wcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbgotU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkKLW9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLjwvcD4KLQotPHA+VGhlIGZvbGxvd2luZyBzdGFuZGFyZHMgcGxheSBrZXkgcm9sZXMgaW4gV2ViIHNlcnZpY2VzOiBVbml2ZXJzYWwgRGVzY3JpcHRpb24sCi1EaXNjb3ZlcnkgYW5kIEludGVncmF0aW9uIChVRERJKSwgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSwKLVdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSwgU09BUCwgYW5kIFdlYiBTZXJ2aWNlcyBJbnRlcm9wZXJhYmlsaXR5Ci0oV1MtSSkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdGFuZGFyZHMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAyLjwvcD4KLQotPHA+VGhlIFVEREkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIG9wZW4sIHBsYXRmb3JtLWluZGVwZW5kZW50IHN0YW5kYXJkcyB0aGF0Ci1lbmFibGUgYnVzaW5lc3NlcyB0byBzaGFyZSBpbmZvcm1hdGlvbiBpbiBhIGdsb2JhbCBidXNpbmVzcyByZWdpc3RyeSwgZGlzY292ZXIKLXNlcnZpY2VzIG9uIHRoZSByZWdpc3RyeSwgYW5kIGRlZmluZSBob3cgdGhleSBpbnRlcmFjdCBvdmVyIHRoZSBJbnRlcm5ldC4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREksIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVkZGkub3JnPC9hPjwvcD4KLQotPHA+V1NJTCBpcyBhbiBYTUwtYmFzZWQgb3BlbiBzcGVjaWZpY2F0aW9uIHRoYXQgZGVmaW5lcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UKLWRpc2NvdmVyeSBtZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlCi1wcm92aWRlcidzIHBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yCi1hdmFpbGFibGUgV2ViIHNlcnZpY2VzLsKgIEEgV1NJTCBkb2N1bWVudCBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIKLXNpdGUgd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuwqBTaW5jZSBXU0lMIGZvY3VzZXMKLW9uIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uIGNvbXBsZW1lbnRzIFVEREkKLWJ5IGZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiBXZWIgc2l0ZXMKLXRoYXQgbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS7CoEEgc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8YSBocmVmPSJjd3NpbHVkLmh0bWwiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2E+LsKgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTSUwsIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwvYT48L3A+Ci0KLTxwPldTREwgaXMgYW4gWE1MLWJhc2VkIG9wZW4gc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlcyB0bwotYW5kIGluc3RhbmNlcyBvZiBXZWIgc2VydmljZXMgb24gdGhlIG5ldHdvcmsuIEl0IGlzIGV4dGVuc2libGUsIHNvIGVuZHBvaW50cwotY2FuIGJlIGRlc2NyaWJlZCByZWdhcmRsZXNzIG9mIHRoZSBtZXNzYWdlIGZvcm1hdHMgb3IgbmV0d29yayBwcm90b2NvbHMgdGhhdAotYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUuIEJ1c2luZXNzZXMgY2FuIG1ha2UgdGhlIFdTREwgZG9jdW1lbnRzIGZvciB0aGVpcgotV2ViIHNlcnZpY2VzIGF2YWlsYWJsZSB0aG91Z2ggVURESSwgV1NJTCwgb3IgYnkgYnJvYWRjYXN0aW5nIHRoZSBVUkxzIHRvIHRoZWlyCi1XU0RMIHZpYSBlbWFpbCBvciBXZWIgc2l0ZXMuIFdTREwgaXMgZGVzY3JpYmVkIGFzIGEgc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1NETCwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHRhcmdldD0iX2JsYW5rIj53d3cudzMub3JnL1RSL3dzZGw8L2E+PC9wPgotCi08ZGl2IGNsYXNzPSJwIj5TT0FQIGlzIGFuIFhNTC1iYXNlZCBzdGFuZGFyZCBmb3IgbWVzc2FnaW5nIG92ZXIgSFRUUCBhbmQgb3RoZXIgSW50ZXJuZXQKLXByb3RvY29scy4gSXQgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluCi1hIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJdCBpcyBiYXNlZCBvbiBYTUwgYW5kIGNvbnNpc3RzCi1vZiB0aHJlZSBwYXJ0czo8dWw+Ci08bGk+QW4gZW52ZWxvcGUgdGhhdCBkZWZpbmVzIGEgZnJhbWV3b3JrIGZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlCi1hbmQgaG93IHRvIHByb2Nlc3MgaXQuPC9saT4KLQotPGxpPkEgc2V0IG9mIGVuY29kaW5nIHJ1bGVzIGZvciBleHByZXNzaW5nIGluc3RhbmNlcyBvZiBhcHBsaWNhdGlvbi1kZWZpbmVkCi1kYXRhIHR5cGVzLjwvbGk+Ci0KLTxsaT5BIGNvbnZlbnRpb24gZm9yIHJlcHJlc2VudGluZyByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIGFuZCByZXNwb25zZXMuPC9saT4KLQotPC91bD4KLVNPQVAgZW5hYmxlcyB0aGUgYmluZGluZyBhbmQgdXNhZ2Ugb2YgZGlzY292ZXJlZCBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcKLWEgbWVzc2FnZSBwYXRoIGZvciByb3V0aW5nIG1lc3NhZ2VzLiBTT0FQIG1heSBiZSB1c2VkIHRvIHF1ZXJ5IFVEREkgZm9yIFdlYgotc2VydmljZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFNPQVAgMS4xIChTT0FQIDEuMiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQotV2ViIHNlcnZpY2VzIHRvb2xzKSwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NPQVAiIHRhcmdldD0iX2JsYW5rIj53d3cudzMub3JnL1RSL1NPQVA8L2E+PC9kaXY+Ci0KLTxwPkZpZ3VyZSAyLiBSZWxhdGlvbnNoaXBzIGJldHdlZW4gU09BUCwgVURESSwgV1NJTCBhbmQgV1NETC48L3A+Ci0KLTxwPiA8aW1nIHNyYz0iLi4vaW1hZ2VzL3NvYXB1ZHdzLmdpZiIgYWx0PSJGaWd1cmUgMiBpbGx1c3RyYXRlcyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIFNPQVAsIFVEREksIFdTSUwsIGFuZCBXU0RMLiIgLz4gPC9wPgotCi08cD5BIHNlcnZpY2UgcHJvdmlkZXIgaG9zdHMgYSBXZWIgc2VydmljZSBhbmQgbWFrZXMgaXQgYWNjZXNzaWJsZSB1c2luZyBwcm90b2NvbHMKLXN1Y2ggYXMgU09BUC9IVFRQIG9yIFNPQVAvSk1TLiBUaGUgV2ViIHNlcnZpY2UgaXMgZGVzY3JpYmVkIGJ5IGEgV1NETCBkb2N1bWVudAotdGhhdCBpcyBzdG9yZWQgb24gdGhlIHByb3ZpZGVyJ3Mgc2VydmVyIG9yIGluIGEgc3BlY2lhbCByZXBvc2l0b3J5LiBUaGUgV1NETAotZG9jdW1lbnQgbWF5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYW5kIFdTSUwgZG9jdW1lbnRzLgotVGhlc2UgY29udGFpbiBwb2ludGVycyB0byB0aGUgV2ViIHNlcnZpY2UncyBXU0RMIGZpbGVzLjwvcD4KLQotPHA+VGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIGFuZCBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgYXJlIG91dGxpbmVzCi1vZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UgcHJvdG9jb2wgKFNPQVAvSFRUUCkgdHJhZmZpYwotbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4gVGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24KLXRvb2xzIGN1cnJlbnRseSBzdXBwb3J0IFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCBhbmQgdGhlIEF0dGFjaG1lbnQKLVByb2ZpbGUgMS4wLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIgdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZCB1bmRlcgotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJlc291cmNlczwvc3Bhbj4gc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Eb2N1bWVudGF0aW9uPC9zcGFuPjogPGEgaHJlZj0iaHR0cDovL3d3dy53cy1pLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cud3MtaS5vcmc8L2E+PC9wPgotCi08ZGl2IGNsYXNzPSJwIj5TZXZlcmFsIG5ldyBXZWIgc2VydmljZXMgc3RhbmRhcmRzIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIGRldmVsb3BtZW50Ci1lbnZpcm9ubWVudC4gVGhlc2UgaW5jbHVkZTo8ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+SkFYLVJQQzwvZHQ+Ci0KLTxkZD5KQVgtUlBDIHN0YW5kcyBmb3IgSmF2YeKEoiBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMKLUpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBKYXZhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMKLShBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0Ci11c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8KLVdTREwgYW5kIFdTREwgdG8gSmF2YSBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcKLWFuZCBkZXBsb3lpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLgotRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwMSIgdGFyZ2V0PSJfYmxhbmsiPm9mZmljaWFsIHNwZWNpZmljYXRpb25zPC9hPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5KU1ItMTA5PC9kdD4KLQotPGRkPkpTUi0xMDkgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lcyB0aGUgcHJvZ3JhbW1pbmcKLW1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUKLUphdmEgRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24KLWNvbnRhaW5lcnMuIE9uZSBvZiBpdHMgbWFpbiBnb2FscyBpcyB0byBlbnN1cmUgdmVuZG9ycycgaW1wbGVtZW50YXRpb25zIGludGVyb3BlcmF0ZS4KLUZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgb2ZmaWNpYWwgc3BlY2lmaWNhdGlvbnM6IDx1bD4KLTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDkiIHRhcmdldD0iX2JsYW5rIj5KU1ItMTA5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHRhcmdldD0iX2JsYW5rIj5KU1ItOTIxPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5XUy1TPC9kdD4KLQotPGRkPlRoZXNlIHRvb2xzIHN1cHBvcnQgdGhlIE9BU0lTIFdlYiBTZXJ2aWNlcyBTZWN1cml0eSAxLjAgc3RhbmRhcmQuIEZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjb21wb25lbnRzIG9mIHRoaXMgc3RhbmRhcmQsIHJlZmVyIHRvOjx1bD4KLTxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAucGRmIiB0YXJnZXQ9Il9ibGFuayI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBTT0FQIE1lc3NhZ2UgU2VjdXJpdHkgVjEuMDwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXVzZXJuYW1lLXRva2VuLXByb2ZpbGUtMS4wLnBkZiIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogVXNlcm5hbWUgVG9rZW4gUHJvZmlsZSBWMS4wPC9hPjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wLnBkZiIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogWC41MDkgVG9rZW4gUHJvZmlsZSBWMS4wPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTxwPldlYiBzZXJ2aWNlcyB0b29saW5nIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNhdGlvbnM6PC9wPgotCi0KLTxkaXYgY2xhc3M9InRhYmxlbm9ib3JkZXIiPjx0YWJsZSBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgZnJhbWU9ImJvcmRlciIgYm9yZGVyPSIxIiBydWxlcz0iYWxsIj4KLTx0aGVhZCBhbGlnbj0ibGVmdCI+Ci08dHI+Ci08dGggdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGlkPSJOMTAxQjQiPlRlY2hub2xvZ3kgb3Igc3BlY2lmaWNhdGlvbjwvdGg+Ci0KLTx0aCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaWQ9Ik4xMDFCQyI+VmVyc2lvbiBvciBsZXZlbCBzdXBwb3J0ZWQ8L3RoPgotCi08L3RyPgotCi08L3RoZWFkPgotCi08dGJvZHk+Ci08dHI+Ci08dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDFCNCBOMTAxQkMgIj48c3Ryb25nPlRyYW5zcG9ydHM8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkhUVFAvSFRUUFM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjAgYW5kIHYxLjE8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpNUzwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+Jm5ic3A7PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxQjQgTjEwMUJDICI+PHN0cm9uZz5NZXNzYWdpbmc8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPlNPQVAgc3BlY2lmaWNhdGlvbjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+djEuMTwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+U09BUCBBdHRhY2hlbWVudHM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPiZuYnNwOzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCBjb2xzcGFuPSIyIiB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMUI0IE4xMDFCQyAiPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPlVEREk8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYyLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTREw8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjE8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTSUw8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDFCNCBOMTAxQkMgIj48c3Ryb25nPlNlY3VyaXR5PC9zdHJvbmc+PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDcuNzM4NjkzNDY3MzM2NjklIiBoZWFkZXJzPSJOMTAxQjQgIj5XUy1TZWN1cml0eTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+T0FTSVMgU3RhbmRhcmQgMS4wPC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxQjQgTjEwMUJDICI+PHN0cm9uZz5JbmVyb3BlcmFiaWxpdHk8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTLUkgQmFzaWMgUHJvZmlsZTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+MS4xLjI8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4xLjAuMzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+V1MtSSBBdHRhY2htZW50cyBQcm9maWxlPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4xLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPjxzdHJvbmc+T3RoZXIgU3RhbmRhcmRzPC9zdHJvbmc+PC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4mbmJzcDs8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpBWC1SUEM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjAgZm9yIEoyRUUgMS4zLCB2MS4xIGZvciBKMkVFIDEuNCBhbmQgSmF2YSBFRSAxLjU8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpTUiAxMDk8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPiZuYnNwOzwvdGQ+Ci0KLTwvdHI+Ci0KLTwvdGJvZHk+Ci0KLTwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9hPjwvc3Ryb25nPjxiciAvPgotV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Igc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3NvYXAuaHRtbCI+U09BUDwvYT48L3N0cm9uZz48YnIgLz4KLVNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0IHByb3RvY29sIGZvciB0aGUgZXhjaGFuZ2Ugb2YgaW5mb3JtYXRpb24gaW4gYSBkZWNlbnRyYWxpemVkLCBkaXN0cmlidXRlZCBlbnZpcm9ubWVudC4gQSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLiBTT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwiPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvc3Ryb25nPjxiciAvPgotPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaWwuaHRtbCI+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC9hPjwvc3Ryb25nPjxiciAvPgotV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGlzIGEgc2VydmljZSBkaXNjb3ZlcnkgbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4gV2hlbiB5b3UgZGlzY292ZXIgV2ViIHNlcnZpY2VzIHdpdGggVURESSwgeW91IGdvIHRvIGEgY2VudHJhbGl6ZWQgcmVnaXN0cnkuwqAgV1NJTCBpcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgV1NJTCBhbGxvd3MgeW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcyBpdCBwcm92aWRlcy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jamF4cnBjLmh0bWwiPkpBWC1SUEM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1KQVgtUlBDIHN0YW5kcyBmb3IgSmF2YSBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMgSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIEphdmEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcyAoQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdCB1c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8gV1NETCBhbmQgV1NETCB0byBKYXZhIG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIEphdmEgcGxhdGZvcm0uIE9mdGVuIHVzZWQgaW4gYSBkaXN0cmlidXRlZCBjbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMgb24gb3RoZXIgc3lzdGVtcy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9janNyMTA5Lmh0bWwiPkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1KU1IgMTA5IChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZXMgdGhlIHByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUgSmF2YSBFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW92ZXIuaHRtbCI+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpPC9hPjwvc3Ryb25nPjxiciAvPgotV1MtSSBpcyBhbiBvcmdhbml6YXRpb24gZGVzaWduZWQgdG8gcHJvbW90ZSBXZWIgc2VydmljZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMKLWRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3Npb3Zlci5odG1sIiB0aXRsZT0iV1MtSSBpcyBhbiBvcmdhbml6YXRpb24gZGVzaWduZWQgdG8gcHJvbW90ZSBXZWIgc2VydmljZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiI+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkKLShXUy1JKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgdGl0bGU9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxNjc2ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3N0b3Bkb3duLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3JlYXRpbmd0b3AtZG93bndlYnNlcnZpY2VzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08c2hvcnRkZXNjPldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQKLWFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZwotYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT50b3AtZG93biBXZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+dG9wLWRvd248L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCwgZmlyc3QgeW91IGRlc2lnbgotdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXZWIgc2VydmljZSBieSBjcmVhdGluZyBhIFdTREwgZmlsZS4gWW91IGNhbiBkbwotdGhpcyB1c2luZyB0aGUgV1NETCBFZGl0b3IuIFlvdSBjYW4gdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlCi10aGUgV2ViIHNlcnZpY2UgYW5kIHNrZWxldG9uIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gY2xhc3NlcyB0byB3aGljaCB5b3UgY2FuIGFkZCB0aGUgcmVxdWlyZWQKLWNvZGUuPC9wPgotPHA+QWx0aG91Z2ggYm90dG9tLXVwIFdlYiBzZXJ2aWNlIGRldmVsb3BtZW50IG1heSBiZSBmYXN0ZXIgYW5kIGVhc2llciwgZXNwZWNpYWxseQotaWYgeW91IGFyZSBuZXcgdG8gV2ViIHNlcnZpY2VzLCB0aGUgdG9wLWRvd24gYXBwcm9hY2ggaXMgdGhlIHJlY29tbWVuZGVkIHdheQotb2YgY3JlYXRpbmcgYSBXZWIgc2VydmljZS4gQnkgY3JlYXRpbmcgdGhlIFdTREwgZmlsZSBmaXJzdCB5b3Ugd2lsbCB1bHRpbWF0ZWx5Ci1oYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBXZWIgc2VydmljZSwgYW5kIGNhbiBlbGltaW5hdGUgaW50ZXJvcGVyYWJpbGl0eQotaXNzdWVzIHRoYXQgbWF5IGFyaXNlIHdoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgYm90dG9tLXVwIG1ldGhvZC48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzYnRtdXAuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5M2NkZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIiAvPgotPG1ldGEgY29udGVudD0idG9wLWRvd24gV2ViIHNlcnZpY2VzLCBjcmVhdGluZywgV2ViIHNlcnZpY2VzLCB0b3AtZG93biIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRvcC1kb3duIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcsIFdlYiBzZXJ2aWNlcywgdG9wLWRvd24iIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2J0bXVwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyI+PGEgbmFtZT0iY3JlYXRpbmd0b3AtZG93bndlYnNlcnZpY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXM8L2gxPgotCi0KLQotPGRpdj48cD5XZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50Ci1hbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcKLWEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZS48L3A+Ci0KLTxwPldoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoLCBmaXJzdCB5b3UgZGVzaWduCi10aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdlYiBzZXJ2aWNlIGJ5IGNyZWF0aW5nIGEgV1NETCBmaWxlLiBZb3UgY2FuIGRvCi10aGlzIHVzaW5nIHRoZSBXU0RMIEVkaXRvci4gWW91IGNhbiB0aGVuIHVzZSB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB0byBjcmVhdGUKLXRoZSBXZWIgc2VydmljZSBhbmQgc2tlbGV0b24gSmF2YeKEoiBjbGFzc2VzIHRvIHdoaWNoIHlvdSBjYW4gYWRkIHRoZSByZXF1aXJlZAotY29kZS48L3A+Ci0KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuIEJ5IGNyZWF0aW5nIHRoZSBXU0RMIGZpbGUgZmlyc3QgeW91IHdpbGwgdWx0aW1hdGVseQotaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgV2ViIHNlcnZpY2UsIGFuZCBjYW4gZWxpbWluYXRlIGludGVyb3BlcmFiaWxpdHkKLWlzc3VlcyB0aGF0IG1heSBhcmlzZSB3aGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIGJvdHRvbS11cCBtZXRob2QuPC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzYnRtdXAuaHRtbCIgdGl0bGU9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLiI+Q3JlYXRpbmcgYm90dG9tLXVwIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgdGl0bGU9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9yb2xlcy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbWFnZXMvcm9sZXMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWU5OTg3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9yb2xlcy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW1hZ2VzL3NvYXB1ZHdzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZiNDJmNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvX3cuY2ZzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvX3cuY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGViNmZiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L193LmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyMzI0Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhODdkOGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMzozNyBFRFQgMjAwNw0KLW9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcj1vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJcbjEuMC4zMDAucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJmZTQxZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTM6MzcgRURUIDIwMDcNCi1sdWNlbmU9MS40LjEwMy52MjAwNjA2MDENCi1hbmFseXplcj1vcmcuZWNsaXBzZS5oZWxwLmJhc2VcIzMuMi4wLnYyMDA2MDYwMT9sb2NhbGVcPWVuDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjlmOGZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjM3IEVEVCAyMDA3DQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NidG11cC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R0b21jYXRzZXJ2Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c3ByZWYuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3Rza2x3c2RsYS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHNhbXBhcHBhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2NvbmNlcHRzL2NheGlzdG92ZXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHdzYmVhbmEuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbHVkLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9zZWdtZW50cyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvbXlwbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFmYWI4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4zIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgICAgPHRvYyBmaWxlPSJ3ZWJzZXJ2aWNlX3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgPC9leHRlbnNpb24+Ci0gICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwiLz4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLmx1Y2VuZVNlYXJjaFBhcnRpY2lwYW50cyI+Ci0gICAgICA8YmluZGluZyBwYXJ0aWNpcGFudElkPSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UueGh0bWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLm1hcGxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIubWFwbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2Njk5MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIubWFwbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPgotICA8bmF2PgotICAgIDxtYXAgZmlsZT0id2Vic2VydmljZV90b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjk1MDVlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBodG1sCi0gIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iKEMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwNyIgLz4KLTxtZXRhIG5hbWU9InNlY3VyaXR5IiBjb250ZW50PSJwdWJsaWMiIC8+Ci08bWV0YSBuYW1lPSJSb2JvdHMiIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgbmFtZT0iREMuRm9ybWF0IiBjb250ZW50PSJYSFRNTCIgLz4KLTwhLS0gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTGljZW5zZWQgTWF0ZXJpYWxzIFByb3BlcnR5IG9mIElCTSAtLT4KLTwhLS0gVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtLT4KLTwhLS0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlIHJlc3RyaWN0ZWQgYnkgLS0+Ci08IS0tIEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4gLS0+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJpYm1kaXRhLmNzcyIgLz4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5JbmRleDwvaDE+Ci08YSBuYW1lPSJJRFgwXzQyIiBocmVmPSIjSURYMV80MiI+QjwvYT4KLTxhIG5hbWU9IklEWDBfNDkiIGhyZWY9IiNJRFgxXzQ5Ij5JPC9hPgotPGEgbmFtZT0iSURYMF80QSIgaHJlZj0iI0lEWDFfNEEiPko8L2E+Ci08YSBuYW1lPSJJRFgwXzUwIiBocmVmPSIjSURYMV81MCI+UDwvYT4KLTxhIG5hbWU9IklEWDBfNTMiIGhyZWY9IiNJRFgxXzUzIj5TPC9hPgotPGEgbmFtZT0iSURYMF81NCIgaHJlZj0iI0lEWDFfNTQiPlQ8L2E+Ci08YSBuYW1lPSJJRFgwXzU1IiBocmVmPSIjSURYMV81NSI+VTwvYT4KLTxhIG5hbWU9IklEWDBfNTciIGhyZWY9IiNJRFgxXzU3Ij5XPC9hPgotPGhyPjwvaHI+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNDIiIGhyZWY9IiNJRFgwXzQyIj5CPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPmJvdHRvbS11cCBXZWIgc2VydmljZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NidG11cC5odG1sI2NyZWF0aW5nYm90dG9tLXVwd2Vic2VydmljZXMiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80OSIgaHJlZj0iI0lEWDBfNDkiPkk8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+aW50ZXJvcGVyYWJpbGl0eQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwjY3dzaW92ZXIiPldlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNEEiIGhyZWY9IiNJRFgwXzRBIj5KPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPkpBWC1SUEMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jamF4cnBjLmh0bWwjY2pheHJwYyI+V2ViIHNlcnZpY2VzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5Ij5KU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbjwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY2pzcjEwOS5odG1sI2Nqc3IxMDkiPkpTUiA5MjEgSmF2YSBzcGVjaWZpY2F0aW9uPC9hPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTAiIGhyZWY9IiNJRFgwXzUwIj5QPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnByZWZlcmVuY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0icmVmL3J3c3ByZWYuaHRtbCNyd3NwcmVmIj5XZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzUzIiBocmVmPSIjSURYMF81MyI+UzwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5TT0FQCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3NvYXAuaHRtbCNjc29hcCI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzU0IiBocmVmPSIjSURYMF81NCI+VDwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT50b3AtZG93biBXZWIgc2VydmljZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwjY3JlYXRpbmd0b3AtZG93bndlYnNlcnZpY2VzIj5jcmVhdGluZzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTUiIGhyZWY9IiNJRFgwXzU1Ij5VPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPlVEREkKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NpbHVkLmh0bWwjY3dzaWx1ZCI+cmVsYXRpb25zaGlwIHdpdGggV1NJTDwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTciIGhyZWY9IiNJRFgwXzU3Ij5XPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPldlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyI+Ym90dG9tLXVwPC9hPgotPC9saT4KLTxsaT5jcmVhdGluZwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3RvdmVyd3MuaHRtbCN0b3ZlcndzIj5vdmVydmlldzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NpY29tcGx5Lmh0bWwjdHdzaWNvbXBseSI+aW50ZXJvcGVyYWJpbGl0eSBjb21wbGlhbmNlPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSI+SmF2YSBzcGVjaWZpY2F0aW9uIHJlcXVlc3RzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jamF4cnBjLmh0bWwjY2pheHJwYyI+SkFYLVJQQzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzLmh0bWwjY3dzIj5vdmVydmlldzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0icmVmL3J3c3ByZWYuaHRtbCNyd3NwcmVmIj5wcmVmZXJlbmNlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3NvYXAuaHRtbCNjc29hcCI+U09BUDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwjd2Vic2VydmljZXNzdGFuZGFyZHMiPnN0YW5kYXJkczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaW53c2EuaHRtbCNjd3NpbndzYSI+dG9vbHMgb3ZlcnZpZXc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCNjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiPnRvcC1kb3duPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NkbC5odG1sI2N3c2RsIj5XU0RMPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJyZWYvcndzZGwuaHRtbCNyd3NkbCI+V1NETCByZWZlcmVuY2U8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lsLmh0bWwjY3dzaWwiPldTSUw8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3Npb3Zlci5odG1sI2N3c2lvdmVyIj50cmFmZmljIGNvbXBsaWFuY2U8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NETAotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2RsLmh0bWwjY3dzZGwiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJyZWYvcndzZGwuaHRtbCNyd3NkbCI+cmVmZXJlbmNlPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldTSQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2ljb21wbHkuaHRtbCN0d3NpY29tcGx5Ij5zZXR0aW5nIGNvbXBsaWFuY2U8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NJTAotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lsLmh0bWwjY3dzaWwiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NpbHVkLmh0bWwjY3dzaWx1ZCI+cmVsYXRpb25zaGlwIHdpdGggVURESTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDg2ZmM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGluZGV4PgotICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3cy5odG1sI2N3cyIgdGl0bGU9IldlYiBzZXJ2aWNlcyBvdmVydmlldyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InN0YW5kYXJkcyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwjd2Vic2VydmljZXNzdGFuZGFyZHMiIHRpdGxlPSJXZWIgc2VydmljZXMgc3RhbmRhcmRzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzZGwuaHRtbCNjd3NkbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXU0RMIHJlZmVyZW5jZSI+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmL3J3c2RsLmh0bWwjcndzZGwiIHRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IlNPQVAiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nzb2FwLmh0bWwjY3NvYXAiIHRpdGxlPSJTT0FQIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iV1NJTCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IkpBWC1SUEMiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIiB0aXRsZT0iSkFYLVJQQyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IkphdmEgc3BlY2lmaWNhdGlvbiByZXF1ZXN0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY2pzcjEwOS5odG1sI2Nqc3IxMDkiIHRpdGxlPSJKU1IgMTA5IC0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idG9wLWRvd24iPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCNjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiIHRpdGxlPSJDcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJib3R0b20tdXAiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0b29scyBvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaW53c2EuaHRtbCNjd3NpbndzYSIgdGl0bGU9IlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJwcmVmZXJlbmNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzcHJlZi5odG1sI3NldHRpbmd3ZWJzZXJ2aWNlc3ByZWZlcmVuY2VzIiB0aXRsZT0iU2V0dGluZyBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdG92ZXJ3cy5odG1sI3RvdmVyd3MiIHRpdGxlPSJEZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NkbC5odG1sI2N3c2RsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlZmVyZW5jZSI+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmL3J3c2RsLmh0bWwjcndzZGwiIHRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJTT0FQIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nzb2FwLmh0bWwjY3NvYXAiIHRpdGxlPSJTT0FQIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldTSUwiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICA8ZW50cnkga2V5d29yZD0icmVsYXRpb25zaGlwIHdpdGggV1NJTCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaWx1ZC5odG1sI2N3c2lsdWQiIHRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkpBWC1SUEMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIiB0aXRsZT0iSkFYLVJQQyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJKU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbiI+Ci0gICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5IiB0aXRsZT0iSlNSIDEwOSAtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlcyIvPgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iSlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb24iPgotICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSIgdGl0bGU9IkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXMiLz4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5Ij4KLSAgICA8ZW50cnkga2V5d29yZD0idHJhZmZpYyBjb21wbGlhbmNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3Npb3Zlci5odG1sI2N3c2lvdmVyIiB0aXRsZT0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImludGVyb3BlcmFiaWxpdHkiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwjY3dzaW92ZXIiIHRpdGxlPSJXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0idG9wLWRvd24gV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCNjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiIHRpdGxlPSJDcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iYm90dG9tLXVwIFdlYiBzZXJ2aWNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NidG11cC5odG1sI2NyZWF0aW5nYm90dG9tLXVwd2Vic2VydmljZXMiIHRpdGxlPSJDcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9InByZWZlcmVuY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NwcmVmLmh0bWwjc2V0dGluZ3dlYnNlcnZpY2VzcHJlZmVyZW5jZXMiIHRpdGxlPSJTZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3Y2M3YWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXZWIgU2VydmljZXMgVUkKLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFmYWI4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMyI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotICAKLSAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgICAgIDx0b2MgZmlsZT0id2Vic2VydmljZV90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXgueG1sIi8+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS5sdWNlbmVTZWFyY2hQYXJ0aWNpcGFudHMiPgotICAgICAgPGJpbmRpbmcgcGFydGljaXBhbnRJZD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLnhodG1sIi8+Ci0gICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yYXhpc3ByZWYuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yYXhpc3ByZWYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlMDJhYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcmF4aXNwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0iYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+QXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzPC90aXRsZT4NCi08c2hvcnRkZXNjPlRoZSBBeGlzIEVtaXR0ZXIgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nDQotcHJlZmVyZW5jZXMgdXNlZCB3aGVuIGNyZWF0aW5nIG9yIGNvbnN1bWluZyBBeGlzIFdlYiBzZXJ2aWNlcy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5wcmVmZXJlbmNlczxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnByZWZlcmVuY2VzPGluZGV4dGVybT5BeGlzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxyZWZib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5XU0RMMkphdmE8L3RpdGxlPjxkbD48ZGxlbnRyeT4NCi08ZHQ+R2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzOjwvZHQ+DQotPGRkPkJ5IGRlZmF1bHQsIFdTREwySmF2YSBvbmx5IGdlbmVyYXRlcyBjb2RlIGZvciB0aG9zZSBlbGVtZW50cyBpbiB0aGUgV1NETA0KLWZpbGUgdGhhdCBhcmUgcmVmZXJlbmNlZC4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGhvdyByZWZlcmVuY2luZw0KLXdvcmtzIHJlZmVyIHRvIHRoZSBBeGlzIHJlZmVyZW5jZSBndWlkZTogPHhyZWYgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpcy9qYXZhL3JlZmVyZW5jZS5odG1sIg0KLXNjb3BlPSJleHRlcm5hbCI+PC94cmVmPjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YWRhdGE6PC9kdD4NCi08ZGQ+SWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiBXU0RMMkphdmEgd2lsbCBjcmVhdGUgYSBzZXBhcmF0ZSBoZWxwZXIgY2xhc3MNCi10aGF0IGNvbnRhaW5zIHRoZSBtZXRhZGF0YSByYXRoZXIgdGhhbiBpbmNsdWRpbmcgaXQgaW4gdGhlIHNrZWxldG9uLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5QcmVmZXJzIGJ1aWxkaW5nIGJlYW5zIHRvIHN0cmFpZ2h0IGFycmF5cyBmb3Igd3JhcHBlZCBYTUwgYXJyYXkgdHlwZXM6PC9kdD4NCi08ZGQ+VGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbWFwIHRoaXMgWE1MIGNvbnN0cnVjdDogPGNvZGVibG9jaz4mbHQ7ZWxlbWVudCBuYW1lPSJhcnJheSI+DQotICZsdDtjb21wbGV4VHlwZT4NCi0gICZsdDtzZXF1ZW5jZT4NCi0gICAmbHQ7ZWxlbWVudCBuYW1lPSJpdGVtIiB0eXBlPSJ4czpzdHJpbmciLz4NCi0gICZsdDsvc2VxdWVuY2U+DQotICZsdDsvY29tcGxleFR5cGU+DQotJmx0Oy9lbGVtZW50PjwvY29kZWJsb2NrPnRvIGEgSmF2YSBTdHJpbmcgYXJyYXkgKFN0cmluZ1tdKS4gSWYgeW91IHdvdWxkIHJhdGhlcg0KLWEgc3BlY2lmaWMgSmF2YUJlYW4gY2xhc3MgKEFycmF5T2ZTdHJpbmcpIGJlIGdlbmVyYXRlZCBmb3IgdGhlc2UgdHlwZXMgb2YNCi1zY2hlbWFzLCBzZWxlY3QgdGhpcyBvcHRpb24uIDwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQ6PC9kdD4NCi08ZGQ+VGhpcyBpbmRpY2F0ZXMgaG93IHRvIGRlcGxveSB0aGUgc2VydmVyIGltcGxlbWVudGF0aW9uLiBBcHBsaWNhdGlvbiB1c2VzDQotb25lIGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYWxsIHJlcXVlc3RzLiBSZXF1ZXN0IGNyZWF0ZXMNCi1hIG5ldyBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggcmVxdWVzdC4gU2Vzc2lvbiBjcmVhdGVzDQotYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBlYWNoIHNlc3Npb24uPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0PlRpbWVvdXQgaW4gc2Vjb25kczo8L2R0Pg0KLTxkZD5UaGUgZGVmYXVsdCBpcyA0NS4gVXNlIC0xIHRvIGRpc2FibGUgdGhlIHRpbWVvdXQuPC9kZD4NCi08L2RsZW50cnk+PC9kbD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPkphdmEyV1NETDwvdGl0bGU+PGRsPjxkbGVudHJ5Pg0KLTxkdD5Mb29rIGZvciBhbGxvd2VkIG1ldGhvZHMgaW4gaW5oZXJpdGVkIGNsYXNzOjwvZHQ+DQotPGRkPklmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIEphdmEyV1NETCBwYXJzZXIgd2lsbCBsb29rIGludG8gZXh0ZW5kZWQNCi1jbGFzc2VzIHRvIGRldGVybWluZSB0aGUgbGlzdCBvZiBtZXRob2RzIHRvIGV4cG9ydCBpbnRvIHRoZSBXU0RMIGZpbGUuIDwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5BbmFseXplIHRoZSBzZXJ2aWNlIGNsYXNzIGZvciBjb21wbGlhbmNlIHRvIEpBWC1SUEMgYmVmb3JlIGdlbmVyYXRpbmcNCi1jb2RlOjwvZHQ+DQotPGRkPklmIHNlbGVjdGVkLCB0aGUgdG9vbHMgd2lsbCBleGFtaW5lIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgYW5kIGl0cyB2YWx1ZQ0KLXR5cGVzIHRvIGRldGVybWluZSBpZiBpdCBzYXRpc2ZpZXMgaW1wb3J0YW50IHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLjwvZGQ+DQotPC9kbGVudHJ5PjwvZGw+PC9zZWN0aW9uPg0KLTwvcmVmYm9keT4NCi08L3JlZmVyZW5jZT4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcmF4aXNwcmVmLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcmF4aXNwcmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMzFhYjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3JheGlzcHJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBBeGlzIEVtaXR0ZXIgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2VzIHVzZWQgd2hlbiBjcmVhdGluZyBvciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBBeGlzIEVtaXR0ZXIgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2VzIHVzZWQgd2hlbiBjcmVhdGluZyBvciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuIiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcywgQXhpcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InByZWZlcmVuY2VzLCBXZWIgc2VydmljZXMsIEF4aXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90d3NwcmVmLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkF4aXMgZW1pdHRlciBwcmVmZXJlbmNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyI+PGEgbmFtZT0iYXhpc2VtaXR0ZXJwcmVmZXJlbmNlcyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIEF4aXMgRW1pdHRlciBwcmVmZXJlbmNlcyBwYWdlIGFsbG93cyB5b3UgdG8gc2V0IHRoZSBmb2xsb3dpbmcKLXByZWZlcmVuY2VzIHVzZWQgd2hlbiBjcmVhdGluZyBvciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+V1NETDJKYXZhPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+R2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzOjwvZHQ+Ci0KLTxkZD5CeSBkZWZhdWx0LCBXU0RMMkphdmEgb25seSBnZW5lcmF0ZXMgY29kZSBmb3IgdGhvc2UgZWxlbWVudHMgaW4gdGhlIFdTREwKLWZpbGUgdGhhdCBhcmUgcmVmZXJlbmNlZC4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGhvdyByZWZlcmVuY2luZwotd29ya3MgcmVmZXIgdG8gdGhlIEF4aXMgcmVmZXJlbmNlIGd1aWRlOiA8YSBocmVmPSJodHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzL2phdmEvcmVmZXJlbmNlLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzL2phdmEvcmVmZXJlbmNlLmh0bWw8L2E+PC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+RW1pdHMgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGFkYXRhOjwvZHQ+Ci0KLTxkZD5JZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uIFdTREwySmF2YSB3aWxsIGNyZWF0ZSBhIHNlcGFyYXRlIGhlbHBlciBjbGFzcwotdGhhdCBjb250YWlucyB0aGUgbWV0YWRhdGEgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIGl0IGluIHRoZSBza2VsZXRvbi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5QcmVmZXJzIGJ1aWxkaW5nIGJlYW5zIHRvIHN0cmFpZ2h0IGFycmF5cyBmb3Igd3JhcHBlZCBYTUwgYXJyYXkgdHlwZXM6PC9kdD4KLQotPGRkPlRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1hcCB0aGlzIFhNTCBjb25zdHJ1Y3Q6IDxwcmU+Jmx0O2VsZW1lbnQgbmFtZT0iYXJyYXkiJmd0OwotICZsdDtjb21wbGV4VHlwZSZndDsKLSAgJmx0O3NlcXVlbmNlJmd0OwotICAgJmx0O2VsZW1lbnQgbmFtZT0iaXRlbSIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICZsdDsvc2VxdWVuY2UmZ3Q7Ci0gJmx0Oy9jb21wbGV4VHlwZSZndDsKLSZsdDsvZWxlbWVudCZndDs8L3ByZT4KLXRvIGEgSmF2YSBTdHJpbmcgYXJyYXkgKFN0cmluZ1tdKS4gSWYgeW91IHdvdWxkIHJhdGhlcgotYSBzcGVjaWZpYyBKYXZhQmVhbiBjbGFzcyAoQXJyYXlPZlN0cmluZykgYmUgZ2VuZXJhdGVkIGZvciB0aGVzZSB0eXBlcyBvZgotc2NoZW1hcywgc2VsZWN0IHRoaXMgb3B0aW9uLiA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQ6PC9kdD4KLQotPGRkPlRoaXMgaW5kaWNhdGVzIGhvdyB0byBkZXBsb3kgdGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbi4gQXBwbGljYXRpb24gdXNlcwotb25lIGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYWxsIHJlcXVlc3RzLiBSZXF1ZXN0IGNyZWF0ZXMKLWEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCByZXF1ZXN0LiBTZXNzaW9uIGNyZWF0ZXMKLWEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCBzZXNzaW9uLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlRpbWVvdXQgaW4gc2Vjb25kczo8L2R0PgotCi08ZGQ+VGhlIGRlZmF1bHQgaXMgNDUuIFVzZSAtMSB0byBkaXNhYmxlIHRoZSB0aW1lb3V0LjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkphdmEyV1NETDwvaDQ+PGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPkxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3M6PC9kdD4KLQotPGRkPklmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIEphdmEyV1NETCBwYXJzZXIgd2lsbCBsb29rIGludG8gZXh0ZW5kZWQKLWNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gZXhwb3J0IGludG8gdGhlIFdTREwgZmlsZS4gPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+QW5hbHl6ZSB0aGUgc2VydmljZSBjbGFzcyBmb3IgY29tcGxpYW5jZSB0byBKQVgtUlBDIGJlZm9yZSBnZW5lcmF0aW5nCi1jb2RlOjwvZHQ+Ci0KLTxkZD5JZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMgdmFsdWUKLXR5cGVzIHRvIGRldGVybWluZSBpZiBpdCBzYXRpc2ZpZXMgaW1wb3J0YW50IHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHdzcHJlZi5odG1sIiB0aXRsZT0iQmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBvciBjbGllbnRzLCB5b3UgY2FuIG9wdGltaXplIHRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy4iPlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5Mzc2My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcnNlcnZwb2xwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0ic2VydmljZXBvbGljaWVzcHJlZmVyZW5jZXMiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlczwvdGl0bGU+DQotPHNob3J0ZGVzYz5UaGUgU2VydmljZSBwb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHlvdXINCi1sZXZlbCBvZiBjb21wbGlhbmNlIHdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIChTU0JQKSBhbmQgV1MtSQ0KLUF0dGFjaGVtZW50IFByb2ZpbGUgKEFQKS4gVGhleSBjYW4gYmUgZm91bmQgb24gdGhlIFNlcnZpY2UgUG9saWNpZXMgcHJlZmVyZW5jZXMNCi1wYWdlLjwvc2hvcnRkZXNjPg0KLTxwcm9sb2c+PG1ldGFkYXRhPg0KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPnByZWZlcmVuY2VzPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPldTLUk8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+cHJlZmVyZW5jZXM8aW5kZXh0ZXJtPldTLUk8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPldTLUk8aW5kZXh0ZXJtPnByZWZlcmVuY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxyZWZib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5TZXR0aW5nIFdTLUkgcHJlZmVyZW5jZXM8L3RpdGxlPjxwPldTLUkgQmFzaWMgUHJvZmlsZSBpcyBhDQotb3V0bGluZSBvZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UgcHJvdG9jb2wgKFNPQVAvSFRUUCkNCi10cmFmZmljIG11c3QgY29tcGx5IGluIG9yZGVyIHRvIGNsYWltIFdTLUkgY29uZm9ybWFuY2UuIFRoZSBXZWIgc2VydmljZXMgV1MtSQ0KLXZhbGlkYXRpb24gdG9vbHMgY3VycmVudGx5IHN1cHBvcnQgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wIChXUy1JDQotU1NCUCkgd2hpY2ggYnVpbGRzIG9uIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUsIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlDQotMS4wIChXUy1JIEFQKS4gVG8gdmlldyB0aGUgc3BlY2lmaWNhdGlvbnMsIHJlZmVyIHRvIHRoZSBXUy1JIFdlYiBzaXRlLCBhbmQNCi11bmRlciAgPHVpY29udHJvbD5EZWxpdmVyYWJsZXM8L3VpY29udHJvbD4gc2VsZWN0ICA8dWljb250cm9sPkJhc2ljIFByb2ZpbGU8L3VpY29udHJvbD4uPC9wPjxwPkZvcg0KLW1vcmUgaW5mb3JtYXRpb24gb24gV1MtSSwgcmVmZXIgdG86IDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIiBzY29wZT0iZXh0ZXJuYWwiPjwveHJlZj48L3A+PHA+V1MtSQ0KLXByZWZlcmVuY2VzIGNhbiBiZSBzZXQgYXQgdGhlIHdvcmtzcGFjZSBsZXZlbCBieSBvcGVuaW5nIHRoZSBQcmVmZXJlbmNlcyBub3RlYm9vaywNCi1vciBhdCB0aGUgcHJvamVjdCBsZXZlbCBieSByaWdodC1jbGlja2luZyBvbiBhIHByb2plY3QgYW5kIHNlbGVjdGluZyBQcmVmZXJlbmNlcy48L3A+PHA+WW91DQotY2FuIHNlbGVjdCB0aGUgV1MtSSBBUCAxLjAgb3IgV1MtSSBCUCAxLjEgKyBTU0JQIDEuMCBwcm9maWxlcyBhbmQgY2hvb3NlIGZvcg0KLXRoZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gaWdub3JlLCBzdWdnZXN0LCBvciByZXF1aXJlIGNvbXBsaWFuY2UuIFN1Z2dlc3QNCi13aWxsIGdlbmVyYXRlIGEgd2FybmluZyBpZiB5b3UgYXR0ZW1wdCB0byBnZW5lcmF0ZSBub24tY29tcGxpYW50IGNvZGUsIHdoZXJlYXMNCi1yZXF1aXJlIHdpbGwgcHJldmVudCB5b3UgZnJvbSBnZW5lcmF0aW5nIG5vbi1jb21wbGlhbnQgY29kZS48L3A+PG5vdGU+SWYgeW91DQotY2hhbmdlIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugd2hpbGUgV1MtSSBpbmNvbXBsaWFuY2VzIGFyZSBsaXN0ZWQgaW4NCi10aGUgVGFzayB2aWV3LCB0aGUgVGFzayB2aWV3IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlZC4gVGhlIHdvcmtzcGFjZQ0KLW11c3QgYmUgcmV2YWxpZGF0ZWQgYmVmb3JlIHRoZSB3YXJuaW5ncyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgVGFzayB2aWV3Ljwvbm90ZT48L3NlY3Rpb24+DQotPC9yZWZib2R5Pg0KLTwvcmVmZXJlbmNlPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yc2VydnBvbHByZWYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4MmNlMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcnNlcnZwb2xwcmVmLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgU2VydmljZSBwb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHlvdXIgbGV2ZWwgb2YgY29tcGxpYW5jZSB3aXRoIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAoU1NCUCkgYW5kIFdTLUkgQXR0YWNoZW1lbnQgUHJvZmlsZSAoQVApLiBUaGV5IGNhbiBiZSBmb3VuZCBvbiB0aGUgU2VydmljZSBQb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgU2VydmljZSBwb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHlvdXIgbGV2ZWwgb2YgY29tcGxpYW5jZSB3aXRoIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAoU1NCUCkgYW5kIFdTLUkgQXR0YWNoZW1lbnQgUHJvZmlsZSAoQVApLiBUaGV5IGNhbiBiZSBmb3VuZCBvbiB0aGUgU2VydmljZSBQb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9InByZWZlcmVuY2VzLCBXZWIgc2VydmljZXMsIFdTLUkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJwcmVmZXJlbmNlcywgV2ViIHNlcnZpY2VzLCBXUy1JIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdHdzcHJlZi5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InNlcnZpY2Vwb2xpY2llc3ByZWZlcmVuY2VzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V1MtSSBjb21wbGlhbmNlIHByZWZlcmVuY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJzZXJ2aWNlcG9saWNpZXNwcmVmZXJlbmNlcyI+PGEgbmFtZT0ic2VydmljZXBvbGljaWVzcHJlZmVyZW5jZXMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlczwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBTZXJ2aWNlIHBvbGljaWVzIHByZWZlcmVuY2VzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZWxlY3QgeW91cgotbGV2ZWwgb2YgY29tcGxpYW5jZSB3aXRoIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAoU1NCUCkgYW5kIFdTLUkKLUF0dGFjaGVtZW50IFByb2ZpbGUgKEFQKS4gVGhleSBjYW4gYmUgZm91bmQgb24gdGhlIFNlcnZpY2UgUG9saWNpZXMgcHJlZmVyZW5jZXMKLXBhZ2UuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U2V0dGluZyBXUy1JIHByZWZlcmVuY2VzPC9oND48cD5XUy1JIEJhc2ljIFByb2ZpbGUgaXMgYQotb3V0bGluZSBvZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UgcHJvdG9jb2wgKFNPQVAvSFRUUCkKLXRyYWZmaWMgbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4gVGhlIFdlYiBzZXJ2aWNlcyBXUy1JCi12YWxpZGF0aW9uIHRvb2xzIGN1cnJlbnRseSBzdXBwb3J0IFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSQotU1NCUCkgd2hpY2ggYnVpbGRzIG9uIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUsIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlCi0xLjAgKFdTLUkgQVApLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIgdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZAotdW5kZXIgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlbGl2ZXJhYmxlczwvc3Bhbj4gc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CYXNpYyBQcm9maWxlPC9zcGFuPi48L3A+Ci08cD5Gb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gV1MtSSwgcmVmZXIgdG86IDxhIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy53cy1pLm9yZy88L2E+PC9wPgotPHA+V1MtSQotcHJlZmVyZW5jZXMgY2FuIGJlIHNldCBhdCB0aGUgd29ya3NwYWNlIGxldmVsIGJ5IG9wZW5pbmcgdGhlIFByZWZlcmVuY2VzIG5vdGVib29rLAotb3IgYXQgdGhlIHByb2plY3QgbGV2ZWwgYnkgcmlnaHQtY2xpY2tpbmcgb24gYSBwcm9qZWN0IGFuZCBzZWxlY3RpbmcgUHJlZmVyZW5jZXMuPC9wPgotPHA+WW91Ci1jYW4gc2VsZWN0IHRoZSBXUy1JIEFQIDEuMCBvciBXUy1JIEJQIDEuMSArIFNTQlAgMS4wIHByb2ZpbGVzIGFuZCBjaG9vc2UgZm9yCi10aGUgV2ViIHNlcnZpY2VzIHRvb2xzIHRvIGlnbm9yZSwgc3VnZ2VzdCwgb3IgcmVxdWlyZSBjb21wbGlhbmNlLiBTdWdnZXN0Ci13aWxsIGdlbmVyYXRlIGEgd2FybmluZyBpZiB5b3UgYXR0ZW1wdCB0byBnZW5lcmF0ZSBub24tY29tcGxpYW50IGNvZGUsIHdoZXJlYXMKLXJlcXVpcmUgd2lsbCBwcmV2ZW50IHlvdSBmcm9tIGdlbmVyYXRpbmcgbm9uLWNvbXBsaWFudCBjb2RlLjwvcD4KLTxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBJZiB5b3UKLWNoYW5nZSB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIHdoaWxlIFdTLUkgaW5jb21wbGlhbmNlcyBhcmUgbGlzdGVkIGluCi10aGUgVGFzayB2aWV3LCB0aGUgVGFzayB2aWV3IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlZC4gVGhlIHdvcmtzcGFjZQotbXVzdCBiZSByZXZhbGlkYXRlZCBiZWZvcmUgdGhlIHdhcm5pbmdzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBUYXNrIHZpZXcuPC9kaXY+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHdzcHJlZi5odG1sIiB0aXRsZT0iQmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBvciBjbGllbnRzLCB5b3UgY2FuIG9wdGltaXplIHRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy4iPlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMDg2MGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiIKLSAicmVmZXJlbmNlLmR0ZCI+Ci08cmVmZXJlbmNlIGlkPSJyd3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgV1NETCBkb2N1bWVudCBkZWZpbmVzIHNlcnZpY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG5ldHdvcmsgZW5kcG9pbnRzLAotb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkCi1mcm9tIHRoZWlyIGNvbmNyZXRlIG5ldHdvcmsgZGVwbG95bWVudCBvciBkYXRhIGZvcm1hdCBiaW5kaW5ncy4gVGhpcyBhbGxvd3MKLXRoZSByZXVzZSBvZiBhYnN0cmFjdCBkZWZpbml0aW9uczogbWVzc2FnZXMsIHdoaWNoIGFyZSBhYnN0cmFjdCBkZXNjcmlwdGlvbnMKLW9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zCi1vZiBvcGVyYXRpb25zLiA8L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+cmVmZXJlbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5XU0RMIHJlZmVyZW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHJlZmJvZHk+Ci08c2VjdGlvbj48cD5UaGUgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zIGZvciBhIHBhcnRpY3VsYXIKLXBvcnQgdHlwZSBjb25zdGl0dXRlcyBhIHJldXNhYmxlIGJpbmRpbmcuIEEgcG9ydCBpcyBkZWZpbmVkIGJ5IGFzc29jaWF0aW5nCi1hIG5ldHdvcmsgYWRkcmVzcyB3aXRoIGEgcmV1c2FibGUgYmluZGluZywgYW5kIGEgY29sbGVjdGlvbiBvZiBwb3J0cyBkZWZpbmUKLWEgc2VydmljZS4gSGVuY2UsIGEgV1NETCBkb2N1bWVudCB1c2VzIHRoZSBmb2xsb3dpbmcgZWxlbWVudHMgaW4gdGhlIGRlZmluaXRpb24KLW9mIG5ldHdvcmsgc2VydmljZXM6PC9wPjx1bD4KLTxsaT4gPHVpY29udHJvbD5UeXBlczwvdWljb250cm9sPjogYSBjb250YWluZXIgZm9yIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2luZwotc29tZSB0eXBlIHN5c3RlbSAoc3VjaCBhcyBYU0QpLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+TWVzc2FnZTwvdWljb250cm9sPjogYW4gYWJzdHJhY3QsIHR5cGVkIGRlZmluaXRpb24gb2YgdGhlCi1kYXRhIGJlaW5nIGNvbW11bmljYXRlZC48L2xpPgotPGxpPiA8dWljb250cm9sPk9wZXJhdGlvbjwvdWljb250cm9sPjogYW4gYWJzdHJhY3QgZGVzY3JpcHRpb24gb2YgYW4gYWN0aW9uCi1zdXBwb3J0ZWQgYnkgdGhlIHNlcnZpY2UuPC9saT4KLTxsaT4gPHVpY29udHJvbD5Qb3J0IFR5cGU8L3VpY29udHJvbD46IGFuIGFic3RyYWN0IHNldCBvZiBvcGVyYXRpb25zIHN1cHBvcnRlZAotYnkgb25lIG9yIG1vcmUgZW5kcG9pbnRzLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+QmluZGluZzwvdWljb250cm9sPjogYSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbgotZm9yIGEgcGFydGljdWxhciBwb3J0IHR5cGUuIFRoZSBiaW5kaW5nIGlzIHVzdWFsbHkgU09BUCBhbmQgdGhlIGVuY29kaW5nIGFuZAotZGF0YSBmb3JtYXR0aW5nIHJlZ3VsYXRpb25zIHVzZWQgKGFsc28ga25vd24gYXMgdGhlIHN0eWxlKSBpcyB1c3VhbGx5IGxpdGVyYWwKLSh0aGlzIGluY2x1ZGVzIGRvY3VtZW50L2xpdGVyYWwsIGFuZCBzb21ldGltZXMgcnBjL2xpdGVyYWwpLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+UG9ydDwvdWljb250cm9sPjogYSBzaW5nbGUgZW5kcG9pbnQgZGVmaW5lZCBhcyBhIGNvbWJpbmF0aW9uCi1vZiBhIGJpbmRpbmcgYW5kIGEgbmV0d29yayBhZGRyZXNzLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+U2VydmljZTwvdWljb250cm9sPjogYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZW5kcG9pbnRzLjwvbGk+Ci08L3VsPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTREwsIHJlZmVyIHRvICA8L3A+PHA+PHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgc2NvcGU9ImV4dGVybmFsIj53d3cudzMub3JnL1RSL3dzZGw8L3hyZWY+PC9wPjxwPlRoZQotdmFyaW91cyBXU0RMIGVsZW1lbnRzIGNhbiBiZSBzdHJ1Y3R1cmVkIGluIG1hbnkgd2F5cy4gSXQgY2FuIGJlIGluIG9uZSBzaW5nbGUKLVdTREwgZmlsZSBvciBpbiBtdWx0aXBsZSBXU0RMIGZpbGVzLjwvcD48L3NlY3Rpb24+Ci08L3JlZmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3MuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGwuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiCi1zY29wZT0icGVlciI+PGxpbmt0ZXh0PiBVc2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9yZWZlcmVuY2U+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmRmNWMxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIFdTREwgZG9jdW1lbnQgZGVmaW5lcyBzZXJ2aWNlcyBhcyBjb2xsZWN0aW9ucyBvZiBuZXR3b3JrIGVuZHBvaW50cywgb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkIGZyb20gdGhlaXIgY29uY3JldGUgbmV0d29yayBkZXBsb3ltZW50IG9yIGRhdGEgZm9ybWF0IGJpbmRpbmdzLiBUaGlzIGFsbG93cyB0aGUgcmV1c2Ugb2YgYWJzdHJhY3QgZGVmaW5pdGlvbnM6IG1lc3NhZ2VzLCB3aGljaCBhcmUgYWJzdHJhY3QgZGVzY3JpcHRpb25zIG9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zIG9mIG9wZXJhdGlvbnMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgV1NETCBkb2N1bWVudCBkZWZpbmVzIHNlcnZpY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG5ldHdvcmsgZW5kcG9pbnRzLCBvciBwb3J0cy4gSW4gV1NETCwgdGhlIGFic3RyYWN0IGRlZmluaXRpb24gb2YgZW5kcG9pbnRzIGFuZCBtZXNzYWdlcyBpcyBzZXBhcmF0ZWQgZnJvbSB0aGVpciBjb25jcmV0ZSBuZXR3b3JrIGRlcGxveW1lbnQgb3IgZGF0YSBmb3JtYXQgYmluZGluZ3MuIFRoaXMgYWxsb3dzIHRoZSByZXVzZSBvZiBhYnN0cmFjdCBkZWZpbml0aW9uczogbWVzc2FnZXMsIHdoaWNoIGFyZSBhYnN0cmFjdCBkZXNjcmlwdGlvbnMgb2YgdGhlIGRhdGEgYmVpbmcgZXhjaGFuZ2VkLCBhbmQgcG9ydCB0eXBlcyB3aGljaCBhcmUgYWJzdHJhY3QgY29sbGVjdGlvbnMgb2Ygb3BlcmF0aW9ucy4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCByZWZlcmVuY2UsIFdlYiBzZXJ2aWNlcywgV1NETCByZWZlcmVuY2UiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCByZWZlcmVuY2UsIFdlYiBzZXJ2aWNlcywgV1NETCByZWZlcmVuY2UiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJyd3NkbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJyd3NkbCI+PGEgbmFtZT0icndzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlPC9oMT4KLQotCi0KLTxkaXY+PHA+QSBXU0RMIGRvY3VtZW50IGRlZmluZXMgc2VydmljZXMgYXMgY29sbGVjdGlvbnMgb2YgbmV0d29yayBlbmRwb2ludHMsCi1vciBwb3J0cy4gSW4gV1NETCwgdGhlIGFic3RyYWN0IGRlZmluaXRpb24gb2YgZW5kcG9pbnRzIGFuZCBtZXNzYWdlcyBpcyBzZXBhcmF0ZWQKLWZyb20gdGhlaXIgY29uY3JldGUgbmV0d29yayBkZXBsb3ltZW50IG9yIGRhdGEgZm9ybWF0IGJpbmRpbmdzLiBUaGlzIGFsbG93cwotdGhlIHJldXNlIG9mIGFic3RyYWN0IGRlZmluaXRpb25zOiBtZXNzYWdlcywgd2hpY2ggYXJlIGFic3RyYWN0IGRlc2NyaXB0aW9ucwotb2YgdGhlIGRhdGEgYmVpbmcgZXhjaGFuZ2VkLCBhbmQgcG9ydCB0eXBlcyB3aGljaCBhcmUgYWJzdHJhY3QgY29sbGVjdGlvbnMKLW9mIG9wZXJhdGlvbnMuIDwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyCi1wb3J0IHR5cGUgY29uc3RpdHV0ZXMgYSByZXVzYWJsZSBiaW5kaW5nLiBBIHBvcnQgaXMgZGVmaW5lZCBieSBhc3NvY2lhdGluZwotYSBuZXR3b3JrIGFkZHJlc3Mgd2l0aCBhIHJldXNhYmxlIGJpbmRpbmcsIGFuZCBhIGNvbGxlY3Rpb24gb2YgcG9ydHMgZGVmaW5lCi1hIHNlcnZpY2UuIEhlbmNlLCBhIFdTREwgZG9jdW1lbnQgdXNlcyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzIGluIHRoZSBkZWZpbml0aW9uCi1vZiBuZXR3b3JrIHNlcnZpY2VzOjwvcD4KLTx1bD4KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VHlwZXM8L3NwYW4+OiBhIGNvbnRhaW5lciBmb3IgZGF0YSB0eXBlIGRlZmluaXRpb25zIHVzaW5nCi1zb21lIHR5cGUgc3lzdGVtIChzdWNoIGFzIFhTRCkuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5NZXNzYWdlPC9zcGFuPjogYW4gYWJzdHJhY3QsIHR5cGVkIGRlZmluaXRpb24gb2YgdGhlCi1kYXRhIGJlaW5nIGNvbW11bmljYXRlZC48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9wZXJhdGlvbjwvc3Bhbj46IGFuIGFic3RyYWN0IGRlc2NyaXB0aW9uIG9mIGFuIGFjdGlvbgotc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UG9ydCBUeXBlPC9zcGFuPjogYW4gYWJzdHJhY3Qgc2V0IG9mIG9wZXJhdGlvbnMgc3VwcG9ydGVkCi1ieSBvbmUgb3IgbW9yZSBlbmRwb2ludHMuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CaW5kaW5nPC9zcGFuPjogYSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbgotZm9yIGEgcGFydGljdWxhciBwb3J0IHR5cGUuIFRoZSBiaW5kaW5nIGlzIHVzdWFsbHkgU09BUCBhbmQgdGhlIGVuY29kaW5nIGFuZAotZGF0YSBmb3JtYXR0aW5nIHJlZ3VsYXRpb25zIHVzZWQgKGFsc28ga25vd24gYXMgdGhlIHN0eWxlKSBpcyB1c3VhbGx5IGxpdGVyYWwKLSh0aGlzIGluY2x1ZGVzIGRvY3VtZW50L2xpdGVyYWwsIGFuZCBzb21ldGltZXMgcnBjL2xpdGVyYWwpLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UG9ydDwvc3Bhbj46IGEgc2luZ2xlIGVuZHBvaW50IGRlZmluZWQgYXMgYSBjb21iaW5hdGlvbgotb2YgYSBiaW5kaW5nIGFuZCBhIG5ldHdvcmsgYWRkcmVzcy48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNlcnZpY2U8L3NwYW4+OiBhIGNvbGxlY3Rpb24gb2YgcmVsYXRlZCBlbmRwb2ludHMuPC9saT4KLQotPC91bD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTREwsIHJlZmVyIHRvICA8L3A+Ci08cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnczLm9yZy9UUi93c2RsPC9hPjwvcD4KLTxwPlRoZQotdmFyaW91cyBXU0RMIGVsZW1lbnRzIGNhbiBiZSBzdHJ1Y3R1cmVkIGluIG1hbnkgd2F5cy4gSXQgY2FuIGJlIGluIG9uZSBzaW5nbGUKLVdTREwgZmlsZSBvciBpbiBtdWx0aXBsZSBXU0RMIGZpbGVzLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Igc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsLmh0bWwiIHRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGlzIGEgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbiBmb3IgZGVzY3JpYmluZyBuZXR3b3JrZWQsIFhNTC1iYXNlZCBzZXJ2aWNlcy4gSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IGZvciBzZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBydW4tdGltZSBpbXBsZW1lbnRhdGlvbi4iPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIj4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RscHJlZi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RscHJlZi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDZmN2E0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbHByZWYuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iDQotICJyZWZlcmVuY2UuZHRkIj4NCi08cmVmZXJlbmNlIGlkPSJ3c2RsZmlsZXNwcmVmZXJlbmNlcyIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+V1NETCBmaWxlIHByZWZlcmVuY2VzPC90aXRsZT4NCi08c2hvcnRkZXNjPlVzZSB0aGUgV1NETCBGaWxlcyBwcmVmZXJlbmNlcyBwYWdlIHRvIHNldCB0aGUgZGVmYXVsdCBiZWhhdmlvcg0KLXdoZW4gY3JlYXRpbmcgb3Igc2F2aW5nIFdTREwgZmlsZXMuPC9zaG9ydGRlc2M+DQotPHByb2xvZz48bWV0YWRhdGE+DQotPGtleXdvcmRzPjxpbmRleHRlcm0+cHJlZmVyZW5jZXM8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+V1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5wcmVmZXJlbmNlczxpbmRleHRlcm0+V1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08cmVmYm9keT4NCi08c2VjdGlvbj48ZGw+PGRsZW50cnk+DQotPGR0PkRlZmF1bHQgdGFyZ2V0IG5hbWVzcGFjZTo8L2R0Pg0KLTxkZD5XaGVuIGNyZWF0aW5nIGEgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvciwgeW91IGNhbiBzZXQgdGhlIGRlZmF1bHQNCi10YXJnZXQgbmFtZXNwYWNlLiBJZiB5b3UgZG8gbm90IHNlbGVjdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQsIHlvdXIgV1NETCBmaWxlDQotd2lsbCBoYXZlIGh0dHA6Ly90ZW1wdXJpLm9yZyBhcyBpdHMgdGFyZ2V0IG5hbWVzcGFjZS48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+UmVnZW5lcmF0ZSBCaW5kaW5nIG9uIHNhdmU8L2R0Pg0KLTxkZD5TZWxlY3QgdGhpcyB0byBhdXRvbWF0aWNhbGx5IHJlZ2VuZXJhdGUgdGhlIGJpbmRpbmcgZXZlcnkgdGltZSB5b3Ugc2F2ZQ0KLWEgV1NETCBmaWxlLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5Qcm9tcHQgUmVnZW5lcmF0ZSBCaW5kaW5nIG9uIHNhdmU8L2R0Pg0KLTxkZD5TZWxlY3QgdGhpcyB0byBiZSBhc2tlZCBpZiB5b3Ugd2FudCB0byByZWdlbmVyYXRlIHRoZSBiaW5kaW5nIGV2ZXJ5IHRpbWUNCi15b3Ugc2F2ZSBhIFdTREwgZmlsZS48L2RkPg0KLTwvZGxlbnRyeT48L2RsPjwvc2VjdGlvbj4NCi08L3JlZmJvZHk+DQotPC9yZWZlcmVuY2U+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RscHJlZi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RscHJlZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzBiMzIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbHByZWYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV1NETCBmaWxlIHByZWZlcmVuY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlVzZSB0aGUgV1NETCBGaWxlcyBwcmVmZXJlbmNlcyBwYWdlIHRvIHNldCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIGNyZWF0aW5nIG9yIHNhdmluZyBXU0RMIGZpbGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2UgdGhlIFdTREwgRmlsZXMgcHJlZmVyZW5jZXMgcGFnZSB0byBzZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBjcmVhdGluZyBvciBzYXZpbmcgV1NETCBmaWxlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJwcmVmZXJlbmNlcywgV2ViIHNlcnZpY2VzLCBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcywgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3R3c3ByZWYuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ3c2RsZmlsZXNwcmVmZXJlbmNlcyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPldTREwgZmlsZSBwcmVmZXJlbmNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0id3NkbGZpbGVzcHJlZmVyZW5jZXMiPjxhIG5hbWU9IndzZGxmaWxlc3ByZWZlcmVuY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XU0RMIGZpbGUgcHJlZmVyZW5jZXM8L2gxPgotCi0KLQotPGRpdj48cD5Vc2UgdGhlIFdTREwgRmlsZXMgcHJlZmVyZW5jZXMgcGFnZSB0byBzZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IKLXdoZW4gY3JlYXRpbmcgb3Igc2F2aW5nIFdTREwgZmlsZXMuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+RGVmYXVsdCB0YXJnZXQgbmFtZXNwYWNlOjwvZHQ+Ci0KLTxkZD5XaGVuIGNyZWF0aW5nIGEgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvciwgeW91IGNhbiBzZXQgdGhlIGRlZmF1bHQKLXRhcmdldCBuYW1lc3BhY2UuIElmIHlvdSBkbyBub3Qgc2VsZWN0IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCwgeW91ciBXU0RMIGZpbGUKLXdpbGwgaGF2ZSBodHRwOi8vdGVtcHVyaS5vcmcgYXMgaXRzIHRhcmdldCBuYW1lc3BhY2UuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+UmVnZW5lcmF0ZSBCaW5kaW5nIG9uIHNhdmU8L2R0PgotCi08ZGQ+U2VsZWN0IHRoaXMgdG8gYXV0b21hdGljYWxseSByZWdlbmVyYXRlIHRoZSBiaW5kaW5nIGV2ZXJ5IHRpbWUgeW91IHNhdmUKLWEgV1NETCBmaWxlLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlByb21wdCBSZWdlbmVyYXRlIEJpbmRpbmcgb24gc2F2ZTwvZHQ+Ci0KLTxkZD5TZWxlY3QgdGhpcyB0byBiZSBhc2tlZCBpZiB5b3Ugd2FudCB0byByZWdlbmVyYXRlIHRoZSBiaW5kaW5nIGV2ZXJ5IHRpbWUKLXlvdSBzYXZlIGEgV1NETCBmaWxlLjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHdzcHJlZi5odG1sIiB0aXRsZT0iQmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBvciBjbGllbnRzLCB5b3UgY2FuIG9wdGltaXplIHRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy4iPlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3N3aXpwcmVmLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzd2l6cHJlZi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU0MzFjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3N3aXpwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0id2Vic2VydmljZXN3aXphcmRzYmFzaWNwcmVmZXJlbmNlcyIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+V2ViIHNlcnZpY2VzIHdpemFyZHMgYmFzaWMgcHJlZmVyZW5jZXM8L3RpdGxlPg0KLTxzaG9ydGRlc2M+VGhlIGRlZmF1bHQgYmVoYXZpb3JzIG9mIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBjYW4gYmUgc2V0IHVzaW5nDQotdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlIHBhbmVscy4gQWxsIHByZWZlcmVuY2VzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZQ0KLXdpemFyZC48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5wcmVmZXJlbmNlczxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT53aXphcmRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnByZWZlcmVuY2VzPGluZGV4dGVybT53aXphcmRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxyZWZib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5Qb3B1cCBEaWFsb2cgU2VsZWN0aW9uPC90aXRsZT48cD5UaGUgZGlhbG9nIHByZWZlcmVuY2VzIGVuYWJsZQ0KLXlvdSB0byBkZXRlcm1pbmUgd2hpY2ggZGlhbG9nIGJveGVzIHRoYXQgeW91IHdhbnQgdG8gc2VlIHdoZW4gcnVubmluZyBwb3B1cA0KLWFjdGlvbnMuIElmIHlvdSBoYXZlIGRpc2FibGVkIGFueSBvZiB0aGUgZGlhbG9ncyBieSBzZWxlY3RpbmcgIkRvIG5vdCBzaG93DQotdGhpcyBkaWFsb2cgYWdhaW4iIG9uIHRoZSBmaXJzdCBwYWdlIG9mIGEgV2ViIHNlcnZpY2VzIHdpemFyZCwgeW91IGNhbiB1bmRvDQoteW91ciBjaGFuZ2UgYnkgY2xlYXJpbmcgdGhlIGNoZWNrIGJveCBiZXNpZGUgdGhlIGRpYWxvZyB0aGF0IHlvdSBoYXZlIGNob3Nlbg0KLXRvIGhpZGUuPC9wPjwvc2VjdGlvbj4NCi08c2VjdGlvbj48dGl0bGU+UHJvamVjdCBUb3BvbG9neTwvdGl0bGU+PGRsPjxkbGVudHJ5Pg0KLTxkdD5TZXJ2aWNlIHByb2plY3QgdHlwZXM6PC9kdD4NCi08ZGQ+U2VsZWN0IHRoZSBkZWZhdWx0IHNlcnZpY2UgcHJvamVjdCB0eXBlIHRoYXQgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzDQotd2lsbCBjcmVhdGUgd2hlbiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UuIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG9yZGVyIGluIHdoaWNoDQotdGhlIHByb2plY3QgdHlwZXMgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlIHdpemFyZC4gTm90ZSB0aGF0IHRoaXMgc2VsZWN0aW9uIGlzDQotc2ltcGx5IGEgZGVmYXVsdCBhbmQgYW4gYWx0ZXJuYXRlIHByb2plY3QgdHlwZSBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIHdpemFyZC48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+Q2xpZW50IHByb2plY3QgdHlwZXM6PC9kdD4NCi08ZGQ+U2VsZWN0IHRoZSBkZWZhdWx0IGNsaWVudCBwcm9qZWN0IHR5cGUgdGhhdCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgd2lsbA0KLWNyZWF0ZSB3aGVuIGdlbmVyYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQuIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG9yZGVyIGluDQotd2hpY2ggdGhlIGNsaWVudCBwcm9qZWN0IHR5cGVzIHdpbGwgYmUgbGlzdGVkIGluIHRoZSB3aXphcmQuIE5vdGUgdGhhdCB0aGlzDQotc2VsZWN0aW9uIGlzIHNpbXBseSBhIGRlZmF1bHQgYW5kIGFuIGFsdGVybmF0ZSBwcm9qZWN0IHR5cGUgY2FuIGJlIHNlbGVjdGVkDQotaW4gdGhlIHdpemFyZC48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+R2VuZXJhdGUgV2ViIHNlcnZpY2UgYW5kIHRoZSBXZWIgc2VydmljZSBjbGllbnQgaW4gZGlmZmVyZW50IEVBUiBwcm9qZWN0czo8L2R0Pg0KLTxkZD5HZW5lcmF0aW5nIHRoZSBzZXJ2aWNlIGFuZCBjbGllbnQgaW50byBkaWZmZXJlbnQgRUFSIHByb2plY3RzIGNhbiByZWR1Y2UNCi10aGUgY2hhbmNlIG9mIGNvbmZsaWN0cyB0aGF0IG9jY3VyIHdoZW4gYm90aCBleGlzdCBpbiBhIHNpbmdsZSBFQVIgcHJvamVjdCwNCi1idXQgdXNlcyBtb3JlIHN5c3RlbSByZXNvdXJjZXMuPC9kZD4NCi08L2RsZW50cnk+PC9kbD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPlJlc291cmNlIE1hbmFnZW1lbnQ8L3RpdGxlPjxwPlRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IHByZWZlcmVuY2VzDQotZW5hYmxlIHlvdSB0byBkZXRlcm1pbmUgdGhlIGZpbGUgYW5kIGZvbGRlciBjcmVhdGlvbiBhbmQgb3ZlcndyaXRpbmcgZGVmYXVsdHMNCi10aGF0IHlvdSB3YW50IHRvIHVzZSB3aGVuIGNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuPGRsPjxkbGVudHJ5Pg0KLTxkdD5PdmVyd3JpdGUgZmlsZXMgd2l0aG91dCB3YXJuaW5nOjwvZHQ+DQotPGRkPlNlbGVjdGluZyB0aGlzIHdpbGwgYWxsb3cgdGhlIHdpemFyZHMgdG8gb3ZlcndyaXRlIGFueSBleGlzdGluZyBmaWxlcw0KLWluIHRoZSB3b3Jrc3BhY2Ugd2l0aG91dCBwcm9tcHRpbmcuIElmIGl0IGlzIG5vdCBzZWxlY3RlZCB5b3Ugd2lsbCBiZSBwcm9tcHRlZA0KLWVhY2ggdGltZSBhIGZpbGUgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4uPC9kZD4NCi08L2RsZW50cnk+PGRsZW50cnk+DQotPGR0PkNyZWF0ZSBmb2xkZXJzIHdoZW4gbmVjZXNzYXJ5OjwvZHQ+DQotPGRkPlNlbGVjdGluZyB0aGlzIGVuYWJsZXMgdGhlIHdpemFyZHMgdG8gY3JlYXRlIGFueSByZXF1aXJlZCBmb2xkZXJzLjwvZGQ+DQotPC9kbGVudHJ5PjxkbGVudHJ5Pg0KLTxkdD5DaGVjayBvdXQgZmlsZXMgd2l0aG91dCB3YXJuaW5nOjwvZHQ+DQotPGRkPlNlbGVjdCB0byBjaGVjayBvdXQgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvcg0KLWNvbmZpcm1hdGlvbi48L2RkPg0KLTwvZGxlbnRyeT48ZGxlbnRyeT4NCi08ZHQ+TWVyZ2UgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGU6PC9kdD4NCi08ZGQ+VGhpcyBjaGVjayBib3ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIElmIHRoaXMgY2hlY2sgYm94IGlzIGVuYWJsZWQsDQotd2hlbiBhIHNrZWxldG9uIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLCB0aGUNCi1uZXdseSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZSB3aWxsIG1lcmdlIHdpdGggdGhlIGV4aXN0aW5nIHNrZWxldG9uIGZpbGUuDQotIEVuYWJsZSB0aGlzIHRvIHByZXNlcnZlIGNvZGUgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IG1vZGlmaWVkIGluIHRoZSBleGlzdGluZw0KLXNrZWxldG9uIGZpbGVzLjxub3RlPldoZW4gdGhpcyBwcmVmZXJlbmNlIGlzIGVuYWJsZWQsIGlmIHlvdSBjaGFuZ2UgdGhlIHJldHVybg0KLXR5cGUgb2YgYW4gaW50ZXJmYWNlLCB0aGUgcmVzdWx0aW5nIHNrZWxldG9uIGZpbGUgd2lsbCBoYXZlIGEgbWV0aG9kIHJldHVybmluZw0KLXRoZSB0eXBlIGFzIGRlZmluZWQgaW4gdGhlIG5ldyBpbnRlcmZhY2UgYnV0IHdvdWxkIGhhdmUgYSBtZXRob2QgYm9keSBmcm9tDQotdGhlIG9yaWdpbmFsIHNrZWxldG9uIGZpbGUgKHdoaWNoIHdvdWxkIGJlIHJldHVybmluZyBhIGRpZmZlcmVudCB0eXBlKS4gIFRoaXMNCi13aWxsIHJlc3VsdCBpbiBhbiBjb21waWxhdGlvbiBlcnJvciB0aGF0IHRoZSB5b3Ugd2lsbCBoYXZlIHRvIGNvcnJlY3QgbWFudWFsbHkuPC9ub3RlPjwvZGQ+DQotPC9kbGVudHJ5PjwvZGw+PC9wPjwvc2VjdGlvbj4NCi08c2VjdGlvbj48dGl0bGU+U2NlbmFyaW8gRGVmYXVsdHM8L3RpdGxlPjxwPlRoZSBTY2VuYXJpbyBEZWZhdWx0cyBwcmVmZXJlbmNlcw0KLWVuYWJsZSB5b3UgdG8gc2V0IHRoZSBmb2xsb3dpbmcgc2NlbmFyaW8gZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbg0KLWNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2U6PHVsPg0KLTxsaT53aGljaCB0eXBlIG9mIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnQgeW91IHdhbnQgdG8gYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC48L2xpPg0KLTxsaT53aGljaCBwaGFzZXMgb2YgdGhlIFdlYiBzZXJ2aWNlIGxpZmVjeWNsZSB5b3Ugd2FudCB0byBjb21wbGV0ZSBpbiB0aGUNCi13aXphcmQuPC9saT4NCi08bGk+aWYgeW91IHdhbnQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBsYXVuY2ggYnkgZGVmYXVsdCBzbyB0aGF0IHlvdQ0KLWNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LjwvbGk+DQotPGxpPmlmIHlvdSB3YW50IHRoZSBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgcm91dGVkIHRocm91Z2ggYSBUQ1AvSVAgbW9uaXRvcg0KLXNvIHRoYXQgeW91IGNhbiBtb25pdG9yIHRoZSBTT0FQIHBhY2tldHMgYW5kIG9wdGlvbmFsbHkgdGVzdCB0aGVtIGZvciBXUy1JDQotY29tcGxpYW5jZS48L2xpPg0KLTwvdWw+PC9wPjwvc2VjdGlvbj4NCi08c2VjdGlvbj48dGl0bGU+U2VydmVyIGFuZCBSdW50aW1lPC90aXRsZT48cD5TZWxlY3QgdGhlIHNlcnZlciBhbmQgV2ViIHNlcnZpY2UNCi1ydW50aW1lIGVudmlyb25tZW50IHRoYXQgeW91IHdhbnQgc2VsZWN0ZWQgYnkgZGVmYXVsdCBpbiB0aGUgV2ViIHNlcnZpY2VzDQotd2l6YXJkLjwvcD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPlRlc3QgRmFjaWxpdHkgRGVmYXVsdHM8L3RpdGxlPjxwPllvdSBjYW4gc2VsZWN0IHdoZXRoZXIgdG8NCi1oYXZlIHRoZSB3aXphcmQgYXV0b21hdGljYWxseSBsYXVuY2ggYSB0ZXN0IGZhY2lsaXR5LCBhbmQgeW91IGNhbiBzZWxlY3QgeW91cg0KLXByZWZlcnJlZCB0eXBlIG9mIHRlc3QgZmFjaWxpdHkuPC9wPjwvc2VjdGlvbj4NCi08c2VjdGlvbj48dGl0bGU+V2l6YXJkIHZhbGlkYXRpb248L3RpdGxlPjxwPlRoZSBXaXphcmQgVmFsaWRhdGlvbiBwcmVmZXJlbmNlcw0KLXBhZ2UgYWxsb3dzIHlvdSB0byBzZWxlY3Qgd2hlbiBXU0RMIHZhbGlkYXRpb24gaXMgcnVuIGFnYWluc3QgV1NETCBmaWxlcyBjb25zdW1lZA0KLWJ5IHdpemFyZHMuIFlvdSBjYW4gc2VsZWN0IHRvIHR1cm4gb2ZmIHZhbGlkaWF0aW9uLCBvciB0byBlbmFibGUgaXQgZm9yIGxvY2FsDQotb3IgbG9jYWwgYW5kIHJlbW90ZSBXU0RMIGZpbGVzLjwvcD48L3NlY3Rpb24+DQotPC9yZWZib2R5Pg0KLTwvcmVmZXJlbmNlPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3N3aXpwcmVmLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzd2l6cHJlZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njk3NTZjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3N3aXpwcmVmLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJXZWIgc2VydmljZXMgd2l6YXJkcyBiYXNpYyBwcmVmZXJlbmNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgZGVmYXVsdCBiZWhhdmlvcnMgb2YgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlIHBhbmVscy4gQWxsIHByZWZlcmVuY2VzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSB3aXphcmQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBkZWZhdWx0IGJlaGF2aW9ycyBvZiB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgY2FuIGJlIHNldCB1c2luZyB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2UgcGFuZWxzLiBBbGwgcHJlZmVyZW5jZXMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIHdpemFyZC4iIC8+Ci08bWV0YSBjb250ZW50PSJwcmVmZXJlbmNlcywgV2ViIHNlcnZpY2VzLCB3aXphcmRzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0icHJlZmVyZW5jZXMsIFdlYiBzZXJ2aWNlcywgd2l6YXJkcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3R3c3ByZWYuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ3ZWJzZXJ2aWNlc3dpemFyZHNiYXNpY3ByZWZlcmVuY2VzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIHdpemFyZHMgYmFzaWMgcHJlZmVyZW5jZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9IndlYnNlcnZpY2Vzd2l6YXJkc2Jhc2ljcHJlZmVyZW5jZXMiPjxhIG5hbWU9IndlYnNlcnZpY2Vzd2l6YXJkc2Jhc2ljcHJlZmVyZW5jZXMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBzZXJ2aWNlcyB3aXphcmRzIGJhc2ljIHByZWZlcmVuY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIGRlZmF1bHQgYmVoYXZpb3JzIG9mIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBjYW4gYmUgc2V0IHVzaW5nCi10aGUgZm9sbG93aW5nIHByZWZlcmVuY2UgcGFuZWxzLiBBbGwgcHJlZmVyZW5jZXMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlCi13aXphcmQuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+UG9wdXAgRGlhbG9nIFNlbGVjdGlvbjwvaDQ+PHA+VGhlIGRpYWxvZyBwcmVmZXJlbmNlcyBlbmFibGUKLXlvdSB0byBkZXRlcm1pbmUgd2hpY2ggZGlhbG9nIGJveGVzIHRoYXQgeW91IHdhbnQgdG8gc2VlIHdoZW4gcnVubmluZyBwb3B1cAotYWN0aW9ucy4gSWYgeW91IGhhdmUgZGlzYWJsZWQgYW55IG9mIHRoZSBkaWFsb2dzIGJ5IHNlbGVjdGluZyAiRG8gbm90IHNob3cKLXRoaXMgZGlhbG9nIGFnYWluIiBvbiB0aGUgZmlyc3QgcGFnZSBvZiBhIFdlYiBzZXJ2aWNlcyB3aXphcmQsIHlvdSBjYW4gdW5kbwoteW91ciBjaGFuZ2UgYnkgY2xlYXJpbmcgdGhlIGNoZWNrIGJveCBiZXNpZGUgdGhlIGRpYWxvZyB0aGF0IHlvdSBoYXZlIGNob3NlbgotdG8gaGlkZS48L3A+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlByb2plY3QgVG9wb2xvZ3k8L2g0PjxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlIHByb2plY3QgdHlwZXM6PC9kdD4KLQotPGRkPlNlbGVjdCB0aGUgZGVmYXVsdCBzZXJ2aWNlIHByb2plY3QgdHlwZSB0aGF0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcwotd2lsbCBjcmVhdGUgd2hlbiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UuIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG9yZGVyIGluIHdoaWNoCi10aGUgcHJvamVjdCB0eXBlcyB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgd2l6YXJkLiBOb3RlIHRoYXQgdGhpcyBzZWxlY3Rpb24gaXMKLXNpbXBseSBhIGRlZmF1bHQgYW5kIGFuIGFsdGVybmF0ZSBwcm9qZWN0IHR5cGUgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSB3aXphcmQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2xpZW50IHByb2plY3QgdHlwZXM6PC9kdD4KLQotPGRkPlNlbGVjdCB0aGUgZGVmYXVsdCBjbGllbnQgcHJvamVjdCB0eXBlIHRoYXQgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIHdpbGwKLWNyZWF0ZSB3aGVuIGdlbmVyYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQuIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG9yZGVyIGluCi13aGljaCB0aGUgY2xpZW50IHByb2plY3QgdHlwZXMgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlIHdpemFyZC4gTm90ZSB0aGF0IHRoaXMKLXNlbGVjdGlvbiBpcyBzaW1wbHkgYSBkZWZhdWx0IGFuZCBhbiBhbHRlcm5hdGUgcHJvamVjdCB0eXBlIGNhbiBiZSBzZWxlY3RlZAotaW4gdGhlIHdpemFyZC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5HZW5lcmF0ZSBXZWIgc2VydmljZSBhbmQgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCBpbiBkaWZmZXJlbnQgRUFSIHByb2plY3RzOjwvZHQ+Ci0KLTxkZD5HZW5lcmF0aW5nIHRoZSBzZXJ2aWNlIGFuZCBjbGllbnQgaW50byBkaWZmZXJlbnQgRUFSIHByb2plY3RzIGNhbiByZWR1Y2UKLXRoZSBjaGFuY2Ugb2YgY29uZmxpY3RzIHRoYXQgb2NjdXIgd2hlbiBib3RoIGV4aXN0IGluIGEgc2luZ2xlIEVBUiBwcm9qZWN0LAotYnV0IHVzZXMgbW9yZSBzeXN0ZW0gcmVzb3VyY2VzLjwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlJlc291cmNlIE1hbmFnZW1lbnQ8L2g0PjxkaXYgY2xhc3M9InAiPlRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IHByZWZlcmVuY2VzCi1lbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZmlsZSBhbmQgZm9sZGVyIGNyZWF0aW9uIGFuZCBvdmVyd3JpdGluZyBkZWZhdWx0cwotdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLjxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj5PdmVyd3JpdGUgZmlsZXMgd2l0aG91dCB3YXJuaW5nOjwvZHQ+Ci0KLTxkZD5TZWxlY3RpbmcgdGhpcyB3aWxsIGFsbG93IHRoZSB3aXphcmRzIHRvIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgZmlsZXMKLWluIHRoZSB3b3Jrc3BhY2Ugd2l0aG91dCBwcm9tcHRpbmcuIElmIGl0IGlzIG5vdCBzZWxlY3RlZCB5b3Ugd2lsbCBiZSBwcm9tcHRlZAotZWFjaCB0aW1lIGEgZmlsZSBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeTo8L2R0PgotCi08ZGQ+U2VsZWN0aW5nIHRoaXMgZW5hYmxlcyB0aGUgd2l6YXJkcyB0byBjcmVhdGUgYW55IHJlcXVpcmVkIGZvbGRlcnMuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgd2FybmluZzo8L2R0PgotCi08ZGQ+U2VsZWN0IHRvIGNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yCi1jb25maXJtYXRpb24uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWVyZ2UgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGU6PC9kdD4KLQotPGRkPlRoaXMgY2hlY2sgYm94IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBJZiB0aGlzIGNoZWNrIGJveCBpcyBlbmFibGVkLAotd2hlbiBhIHNrZWxldG9uIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLCB0aGUKLW5ld2x5IGdlbmVyYXRlZCBza2VsZXRvbiBmaWxlIHdpbGwgbWVyZ2Ugd2l0aCB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZS4KLSBFbmFibGUgdGhpcyB0byBwcmVzZXJ2ZSBjb2RlIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBtb2RpZmllZCBpbiB0aGUgZXhpc3RpbmcKLXNrZWxldG9uIGZpbGVzLjxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBXaGVuIHRoaXMgcHJlZmVyZW5jZSBpcyBlbmFibGVkLCBpZiB5b3UgY2hhbmdlIHRoZSByZXR1cm4KLXR5cGUgb2YgYW4gaW50ZXJmYWNlLCB0aGUgcmVzdWx0aW5nIHNrZWxldG9uIGZpbGUgd2lsbCBoYXZlIGEgbWV0aG9kIHJldHVybmluZwotdGhlIHR5cGUgYXMgZGVmaW5lZCBpbiB0aGUgbmV3IGludGVyZmFjZSBidXQgd291bGQgaGF2ZSBhIG1ldGhvZCBib2R5IGZyb20KLXRoZSBvcmlnaW5hbCBza2VsZXRvbiBmaWxlICh3aGljaCB3b3VsZCBiZSByZXR1cm5pbmcgYSBkaWZmZXJlbnQgdHlwZSkuICBUaGlzCi13aWxsIHJlc3VsdCBpbiBhbiBjb21waWxhdGlvbiBlcnJvciB0aGF0IHRoZSB5b3Ugd2lsbCBoYXZlIHRvIGNvcnJlY3QgbWFudWFsbHkuPC9kaXY+Ci08L2RkPgotCi08L2RsPgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlNjZW5hcmlvIERlZmF1bHRzPC9oND48ZGl2IGNsYXNzPSJwIj5UaGUgU2NlbmFyaW8gRGVmYXVsdHMgcHJlZmVyZW5jZXMKLWVuYWJsZSB5b3UgdG8gc2V0IHRoZSBmb2xsb3dpbmcgc2NlbmFyaW8gZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbgotY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZTo8dWw+Ci08bGk+d2hpY2ggdHlwZSBvZiBXZWIgc2VydmljZSBhbmQgY2xpZW50IHlvdSB3YW50IHRvIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQuPC9saT4KLQotPGxpPndoaWNoIHBoYXNlcyBvZiB0aGUgV2ViIHNlcnZpY2UgbGlmZWN5Y2xlIHlvdSB3YW50IHRvIGNvbXBsZXRlIGluIHRoZQotd2l6YXJkLjwvbGk+Ci0KLTxsaT5pZiB5b3Ugd2FudCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGxhdW5jaCBieSBkZWZhdWx0IHNvIHRoYXQgeW91Ci1jYW4gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L2xpPgotCi08bGk+aWYgeW91IHdhbnQgdGhlIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyByb3V0ZWQgdGhyb3VnaCBhIFRDUC9JUCBtb25pdG9yCi1zbyB0aGF0IHlvdSBjYW4gbW9uaXRvciB0aGUgU09BUCBwYWNrZXRzIGFuZCBvcHRpb25hbGx5IHRlc3QgdGhlbSBmb3IgV1MtSQotY29tcGxpYW5jZS48L2xpPgotCi08L3VsPgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlNlcnZlciBhbmQgUnVudGltZTwvaDQ+PHA+U2VsZWN0IHRoZSBzZXJ2ZXIgYW5kIFdlYiBzZXJ2aWNlCi1ydW50aW1lIGVudmlyb25tZW50IHRoYXQgeW91IHdhbnQgc2VsZWN0ZWQgYnkgZGVmYXVsdCBpbiB0aGUgV2ViIHNlcnZpY2VzCi13aXphcmQuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5UZXN0IEZhY2lsaXR5IERlZmF1bHRzPC9oND48cD5Zb3UgY2FuIHNlbGVjdCB3aGV0aGVyIHRvCi1oYXZlIHRoZSB3aXphcmQgYXV0b21hdGljYWxseSBsYXVuY2ggYSB0ZXN0IGZhY2lsaXR5LCBhbmQgeW91IGNhbiBzZWxlY3QgeW91cgotcHJlZmVycmVkIHR5cGUgb2YgdGVzdCBmYWNpbGl0eS48L3A+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPldpemFyZCB2YWxpZGF0aW9uPC9oND48cD5UaGUgV2l6YXJkIFZhbGlkYXRpb24gcHJlZmVyZW5jZXMKLXBhZ2UgYWxsb3dzIHlvdSB0byBzZWxlY3Qgd2hlbiBXU0RMIHZhbGlkYXRpb24gaXMgcnVuIGFnYWluc3QgV1NETCBmaWxlcyBjb25zdW1lZAotYnkgd2l6YXJkcy4gWW91IGNhbiBzZWxlY3QgdG8gdHVybiBvZmYgdmFsaWRpYXRpb24sIG9yIHRvIGVuYWJsZSBpdCBmb3IgbG9jYWwKLW9yIGxvY2FsIGFuZCByZW1vdGUgV1NETCBmaWxlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdGFza3MvdHdzcHJlZi5odG1sIiB0aXRsZT0iQmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBvciBjbGllbnRzLCB5b3UgY2FuIG9wdGltaXplIHRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy4iPlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwNDVmNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idG92ZXJ3cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5EZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08c2hvcnRkZXNjPlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzCi10aGF0IGFyZSBjcmVhdGVkIGZyb20gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFucywgZW50ZXJwcmlzZSBiZWFucywgYW5kIFdTREwgZmlsZXMuCi1Zb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGgKLWEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4KLW9yIEVKQikuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmc8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPkluIHRoaXMgcmVsZWFzZSwgdGhlIGRldmVsb3BtZW50IHBhdGggdGhhdCB5b3Ugd291bGQgdHlwaWNhbGx5Ci1mb2xsb3cgdG8gY3JlYXRlIGFuZCBwdWJsaXNoIGEgV2ViIHNlcnZpY2UgaXMgYXMgZm9sbG93czo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5DcmVhdGUgYSBXZWIgcHJvamVjdC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNyZWF0ZSBvciBpbXBvcnQgYW4gYXJ0aWZhY3QgdG8gYmUgdHVybmVkIGludG8gYSBXZWIgc2VydmljZS48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+Q3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+UHVibGlzaCBhIFdlYiBzZXJ2aWNlLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPkZvciBpbnN0cnVjdGlvbnMgb24gcGVyZm9ybWluZyB0aGVzZSB0YXNrcywgcmVmZXIgdG8gdGhlIGxpc3Qgb2YKLXJlbGF0ZWQgdG9waWNzIGF0IHRoZSBlbmQgb2YgdGhpcyB0b3BpYy48L3A+PHA+V2ViIHRvb2xzIGFzc2lzdCB5b3UgaW4gZGV2ZWxvcGluZwotV2ViIGFwcGxpY2F0aW9ucyB0aGF0IHlvdSBjYW4gY29uZmlndXJlIGFzIGEgV2ViIHNlcnZpY2UuIFdlYiBhcHBsaWNhdGlvbnMKLWFyZSBkZXZlbG9wZWQgaW4gYSBXZWIgcHJvamVjdCwgYW5kIFNlcnZlciB0b29scyBhbGxvdyB5b3UgdG8gdXNlIHRoZSBzZXJ2ZXIKLXRlc3QgZW52aXJvbm1lbnQgdG8gdGVzdCBhbmQgZGVwbG95IHlvdXIgV2ViIHNlcnZpY2VzLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9saW5rdGV4dD4KLTwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIKLXNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NidG11cC5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5DcmVhdGluZyBib3R0b20tdXAKLVdlYiBzZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzdG9wZG93bi5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5DcmVhdGluZwotdG9wLWRvd24gV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhIgotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2xpbmt0ZXh0PgotPC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkxNzA5OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJEZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJVc2UgV2ViIHNlcnZpY2VzIHRvb2xzIHRvIGRpc2NvdmVyLCBjcmVhdGUsIGFuZCBwdWJsaXNoIFdlYiBzZXJ2aWNlcyB0aGF0IGFyZSBjcmVhdGVkIGZyb20gSmF2YSBiZWFucywgZW50ZXJwcmlzZSBiZWFucywgYW5kIFdTREwgZmlsZXMuIFlvdSBjYW4gY3JlYXRlIG9mIFdlYiBzZXJ2aWNlcyB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIFdTREwgZmlsZSkgb3IgYSBib3R0b20tdXAgYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgSmF2YSBiZWFuIG9yIEVKQikuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGNyZWF0aW5nLCBvdmVydmlldyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgY3JlYXRpbmcsIG92ZXJ2aWV3IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idG92ZXJ3cyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkRldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0b3ZlcndzIj48YSBuYW1lPSJ0b3ZlcndzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5EZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvaDE+Ci0KLQotCi08ZGl2PjxwPlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzCi10aGF0IGFyZSBjcmVhdGVkIGZyb20gSmF2YeKEoiBiZWFucywgZW50ZXJwcmlzZSBiZWFucywgYW5kIFdTREwgZmlsZXMuCi1Zb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGgKLWEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4KLW9yIEVKQikuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5JbiB0aGlzIHJlbGVhc2UsIHRoZSBkZXZlbG9wbWVudCBwYXRoIHRoYXQgeW91IHdvdWxkIHR5cGljYWxseQotZm9sbG93IHRvIGNyZWF0ZSBhbmQgcHVibGlzaCBhIFdlYiBzZXJ2aWNlIGlzIGFzIGZvbGxvd3M6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5DcmVhdGUgYSBXZWIgcHJvamVjdC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNyZWF0ZSBvciBpbXBvcnQgYW4gYXJ0aWZhY3QgdG8gYmUgdHVybmVkIGludG8gYSBXZWIgc2VydmljZS48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+Q3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+UHVibGlzaCBhIFdlYiBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Gb3IgaW5zdHJ1Y3Rpb25zIG9uIHBlcmZvcm1pbmcgdGhlc2UgdGFza3MsIHJlZmVyIHRvIHRoZSBsaXN0IG9mCi1yZWxhdGVkIHRvcGljcyBhdCB0aGUgZW5kIG9mIHRoaXMgdG9waWMuPC9wPgotPHA+V2ViIHRvb2xzIGFzc2lzdCB5b3UgaW4gZGV2ZWxvcGluZwotV2ViIGFwcGxpY2F0aW9ucyB0aGF0IHlvdSBjYW4gY29uZmlndXJlIGFzIGEgV2ViIHNlcnZpY2UuIFdlYiBhcHBsaWNhdGlvbnMKLWFyZSBkZXZlbG9wZWQgaW4gYSBXZWIgcHJvamVjdCwgYW5kIFNlcnZlciB0b29scyBhbGxvdyB5b3UgdG8gdXNlIHRoZSBzZXJ2ZXIKLXRlc3QgZW52aXJvbm1lbnQgdG8gdGVzdCBhbmQgZGVwbG95IHlvdXIgV2ViIHNlcnZpY2VzLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIKLXNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NidG11cC5odG1sIiB0aXRsZT0iV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiBvciBlbnRlcnByaXNlIGJlYW4uIj5DcmVhdGluZyBib3R0b20tdXAKLVdlYiBzZXJ2aWNlczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzdG9wZG93bi5odG1sIiB0aXRsZT0iV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLiI+Q3JlYXRpbmcKLXRvcC1kb3duIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzcHJlZi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzcHJlZi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzVjZmMwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c3ByZWYuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0ic2V0dGluZ3dlYnNlcnZpY2VzcHJlZmVyZW5jZXMiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC90aXRsZT4NCi08c2hvcnRkZXNjPkJlZm9yZSB5b3UgYmVnaW4gZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgb3IgY2xpZW50cywgeW91IGNhbiBvcHRpbWl6ZQ0KLXRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5wcmVmZXJlbmNlczxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnByZWZlcmVuY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keT4NCi08Y29udGV4dD5UbyBzZXQgYW55IG9mIHRoZSBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMsIGZvbGxvdyB0aGVzZSBzdGVwczo8L2NvbnRleHQ+DQotPHN0ZXBzPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+V2luZG93ID4gUHJlZmVyZW5jZXM8L3VpY29udHJvbD4gdG8gb3BlbiB0aGUNCi1QcmVmZXJlbmNlcyBub3RlYm9vay48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5FeHBhbmQgIDx1aWNvbnRyb2w+V2ViIHNlcnZpY2VzPC91aWNvbnRyb2w+IG9yIDx1aWNvbnRyb2w+U2VydmljZQ0KLXBvbGljaWVzPC91aWNvbnRyb2w+LCBhbmQgY2xpY2sgdGhlIHByZWZlcmVuY2UgY2F0ZWdvcnkgdGhhdCB5b3Ugd2FudCB0byBzZXQuPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBjaGVjayBib3hlcyB0aGF0IHlvdSB3YW50IHRvIHNldCBhcyB0aGUgZGVmYXVsdCB3aGVuDQotY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L2NtZD48aW5mbz5JZiB5b3UgcmVxdWlyZSBtb3JlIGluZm9ybWF0aW9uIG9uIGFueQ0KLW9mIHRoZSBvcHRpb25zLCBzZWxlY3QgdGhlIG9wdGlvbiBhbmQgcHJlc3MgIDx1aWNvbnRyb2w+RjE8L3VpY29udHJvbD4uPC9pbmZvPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+IHRvIGFwcGx5IHRoZSBjaGFuZ2VzIGFuZCBjbG9zZQ0KLXRoZSBQcmVmZXJlbmNlcyBub3RlYm9vay48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cG9zdHJlcT5Gb3IgaW5mb3JtYXRpb24gb24gaW5kaXZpZHVhbCBwcmVmZXJlbmNlcywgcmVmZXIgdG8gdGhlIGZvbGxvd2luZzo8dWw+DQotPGxpPjx4cmVmIGhyZWY9Ii4uL3JlZi9yYXhpc3ByZWYuZGl0YSI+PC94cmVmPjwvbGk+DQotPGxpPjx4cmVmIGhyZWY9Ii4uL3JlZi9yd3N3aXpwcmVmLmRpdGEiPjwveHJlZj48L2xpPg0KLTxsaT48eHJlZiBocmVmPSIuLi9yZWYvcndzZGxwcmVmLmRpdGEiPjwveHJlZj48L2xpPg0KLTxsaT48eHJlZiBocmVmPSIuLi9yZWYvcnNlcnZwb2xwcmVmLmRpdGEiPjwveHJlZj48L2xpPg0KLTwvdWw+PC9wb3N0cmVxPg0KLTwvdGFza2JvZHk+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c3ByZWYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c3ByZWYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZjMTEwNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NwcmVmLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJTZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJCZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUgdGhlIHdvcmtiZW5jaCBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGJ5IHNldHRpbmcgYSB2YXJpZXR5IG9mIHByZWZlcmVuY2VzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJCZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUgdGhlIHdvcmtiZW5jaCBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGJ5IHNldHRpbmcgYSB2YXJpZXR5IG9mIHByZWZlcmVuY2VzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9InByZWZlcmVuY2VzLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJwcmVmZXJlbmNlcywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9yYXhpc3ByZWYuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J3c3dpenByZWYuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J3c2RscHJlZi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnNlcnZwb2xwcmVmLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0ic2V0dGluZ3dlYnNlcnZpY2VzcHJlZmVyZW5jZXMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0ic2V0dGluZ3dlYnNlcnZpY2VzcHJlZmVyZW5jZXMiPjxhIG5hbWU9InNldHRpbmd3ZWJzZXJ2aWNlc3ByZWZlcmVuY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5TZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlczwvaDE+Ci0KLQotCi08ZGl2PjxwPkJlZm9yZSB5b3UgYmVnaW4gZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgb3IgY2xpZW50cywgeW91IGNhbiBvcHRpbWl6ZQotdGhlIHdvcmtiZW5jaCBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGJ5IHNldHRpbmcgYSB2YXJpZXR5IG9mIHByZWZlcmVuY2VzLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gc2V0IGFueSBvZiB0aGUgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdyAmZ3Q7IFByZWZlcmVuY2VzPC9zcGFuPiB0byBvcGVuIHRoZQotUHJlZmVyZW5jZXMgbm90ZWJvb2suPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RXhwYW5kICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgc2VydmljZXM8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNlcnZpY2UKLXBvbGljaWVzPC9zcGFuPiwgYW5kIGNsaWNrIHRoZSBwcmVmZXJlbmNlIGNhdGVnb3J5IHRoYXQgeW91IHdhbnQgdG8gc2V0Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSBjaGVjayBib3hlcyB0aGF0IHlvdSB3YW50IHRvIHNldCBhcyB0aGUgZGVmYXVsdCB3aGVuCi1jcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLjwvc3Bhbj4gSWYgeW91IHJlcXVpcmUgbW9yZSBpbmZvcm1hdGlvbiBvbiBhbnkKLW9mIHRoZSBvcHRpb25zLCBzZWxlY3QgdGhlIG9wdGlvbiBhbmQgcHJlc3MgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkYxPC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPiB0byBhcHBseSB0aGUgY2hhbmdlcyBhbmQgY2xvc2UKLXRoZSBQcmVmZXJlbmNlcyBub3RlYm9vay48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+Rm9yIGluZm9ybWF0aW9uIG9uIGluZGl2aWR1YWwgcHJlZmVyZW5jZXMsIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmc6PHVsPgotPGxpPjxhIGhyZWY9Ii4uL3JlZi9yYXhpc3ByZWYuaHRtbCIgdGl0bGU9IlRoZSBBeGlzIEVtaXR0ZXIgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nJiMxMDtwcmVmZXJlbmNlcyB1c2VkIHdoZW4gY3JlYXRpbmcgb3IgY29uc3VtaW5nIEF4aXMgV2ViIHNlcnZpY2VzLiI+QXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSIuLi9yZWYvcndzd2l6cHJlZi5odG1sIiB0aXRsZT0iVGhlIGRlZmF1bHQgYmVoYXZpb3JzIG9mIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBjYW4gYmUgc2V0IHVzaW5nJiMxMDt0aGUgZm9sbG93aW5nIHByZWZlcmVuY2UgcGFuZWxzLiBBbGwgcHJlZmVyZW5jZXMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlJiMxMDt3aXphcmQuIj5XZWIgc2VydmljZXMgd2l6YXJkcyBiYXNpYyBwcmVmZXJlbmNlczwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0iLi4vcmVmL3J3c2RscHJlZi5odG1sIiB0aXRsZT0iVXNlIHRoZSBXU0RMIEZpbGVzIHByZWZlcmVuY2VzIHBhZ2UgdG8gc2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yJiMxMDt3aGVuIGNyZWF0aW5nIG9yIHNhdmluZyBXU0RMIGZpbGVzLiI+V1NETCBmaWxlIHByZWZlcmVuY2VzPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSIuLi9yZWYvcnNlcnZwb2xwcmVmLmh0bWwiIHRpdGxlPSJUaGUgU2VydmljZSBwb2xpY2llcyBwcmVmZXJlbmNlcyBwYWdlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHlvdXImIzEwO2xldmVsIG9mIGNvbXBsaWFuY2Ugd2l0aCB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgKFNTQlApIGFuZCBXUy1JJiMxMDtBdHRhY2hlbWVudCBQcm9maWxlIChBUCkuIFRoZXkgY2FuIGJlIGZvdW5kIG9uIHRoZSBTZXJ2aWNlIFBvbGljaWVzIHByZWZlcmVuY2VzJiMxMDtwYWdlLiI+V1MtSSBjb21wbGlhbmNlIHByZWZlcmVuY2VzPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9yZWYvcmF4aXNwcmVmLmh0bWwiPkF4aXMgZW1pdHRlciBwcmVmZXJlbmNlczwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBBeGlzIEVtaXR0ZXIgcHJlZmVyZW5jZXMgcGFnZSBhbGxvd3MgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2VzIHVzZWQgd2hlbiBjcmVhdGluZyBvciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vcmVmL3J3c3dpenByZWYuaHRtbCI+V2ViIHNlcnZpY2VzIHdpemFyZHMgYmFzaWMgcHJlZmVyZW5jZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgZGVmYXVsdCBiZWhhdmlvcnMgb2YgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlIHBhbmVscy4gQWxsIHByZWZlcmVuY2VzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSB3aXphcmQuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vcmVmL3J3c2RscHJlZi5odG1sIj5XU0RMIGZpbGUgcHJlZmVyZW5jZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1Vc2UgdGhlIFdTREwgRmlsZXMgcHJlZmVyZW5jZXMgcGFnZSB0byBzZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBjcmVhdGluZyBvciBzYXZpbmcgV1NETCBmaWxlcy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9yZWYvcnNlcnZwb2xwcmVmLmh0bWwiPldTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlczwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBTZXJ2aWNlIHBvbGljaWVzIHByZWZlcmVuY2VzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZWxlY3QgeW91ciBsZXZlbCBvZiBjb21wbGlhbmNlIHdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIChTU0JQKSBhbmQgV1MtSSBBdHRhY2hlbWVudCBQcm9maWxlIChBUCkuIFRoZXkgY2FuIGJlIGZvdW5kIG9uIHRoZSBTZXJ2aWNlIFBvbGljaWVzIHByZWZlcmVuY2VzIHBhZ2UuPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZDZhMWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIgotICJtYXAuZHRkIj4KLTxtYXAgaWQ9IndzbWFpbnRvYyIgdGl0bGU9IndzbWFpbnRvYyI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzLmRpdGEiIG5hdnRpdGxlPSJXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c3N0YW5kYXJkcy5kaXRhIiBuYXZ0aXRsZT0iV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyIKLXNjb3BlPSJsb2NhbCI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzZGwuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkiPgotPHRvcGljcmVmIGhyZWY9InJlZi9yd3NkbC5kaXRhIiBuYXZ0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2UiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3NvYXAuZGl0YSIgbmF2dGl0bGU9IlNPQVAiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmRpdGEiCi1uYXZ0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiIHNjb3BlPSJwZWVyIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5kaXRhIgotbmF2dGl0bGU9IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwiIHNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NpbC5kaXRhIiBuYXZ0aXRsZT0iV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NpbHVkLmRpdGEiIG5hdnRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuZGl0YSIgbmF2dGl0bGU9IkpBWC1SUEMiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY2pzcjEwOS5kaXRhIiBuYXZ0aXRsZT0iSlNSIDEwOSBhbmQgSlNSIDkyMSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBuYXZ0aXRsZT0iV1MtSSBjb21wbGlhbmNlIiBzY29wZT0ibG9jYWwiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5kaXRhIiBuYXZ0aXRsZT0iVG9wLWRvd24gV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50Igotc2NvcGU9ImxvY2FsIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmRpdGEiIG5hdnRpdGxlPSJCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50Igotc2NvcGU9ImxvY2FsIj48L3RvcGljcmVmPgotPHRvcGljcmVmIG5hdnRpdGxlPSJXb3Jrc3BhY2UgYW5kIHRvb2xzIj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NpbndzYS5kaXRhIiBuYXZ0aXRsZT0iVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIKLXNjb3BlPSJsb2NhbCI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBuYXZ0aXRsZT0iQ29uZmlndXJpbmcgeW91ciB3b3Jrc3BhY2UiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R3c3ByZWYuZGl0YSIgbmF2dGl0bGU9IlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzIgotc2NvcGU9ImxvY2FsIj4KLTx0b3BpY3JlZiBocmVmPSJyZWYvcmF4aXNwcmVmLmRpdGEiIG5hdnRpdGxlPSJBeGlzIGVtaXR0ZXIgcHJlZmVyZW5jZXMiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0icmVmL3J3c3dpenByZWYuZGl0YSIgbmF2dGl0bGU9IldlYiBzZXJ2aWNlcyB3aXphcmRzIGJhc2ljIHByZWZlcmVuY2VzIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0icmVmL3J3c2RscHJlZi5kaXRhIiBuYXZ0aXRsZT0iV1NETCBmaWxlIHByZWZlcmVuY2VzIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InJlZi9yc2VydnBvbHByZWYuZGl0YSIgbmF2dGl0bGU9IlNlcnZpY2UgcG9saWNpZXMgcHJlZmVyZW5jZXMiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2LmRpdGEiCi1uYXZ0aXRsZT0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kICBXZWIgcHJvamVjdCIgc2NvcGU9InBlZXIiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBuYXZ0aXRsZT0iSW1wb3J0aW5nIGFuZCBjcmVhdGluZyByZXNvdXJjZXMgdXNlZCBieSBXZWIgc2VydmljZXMiPgotPG5hdnJlZiBtYXByZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAiLz4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5kaXRhIgotbmF2dGl0bGU9IkRpc2NvdmVyaW5nIGFuZCBpbXBvcnRpbmcgYSBXZWIgc2VydmljZSIgc2NvcGU9InBlZXIiPjwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RvdmVyd3MuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyI+Ci08bmF2cmVmIG1hcHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLmRpdGFtYXAiLz4KLTxuYXZyZWYgbWFwcmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpczIudWkuZG9jLnVzZXIvd3NheGlzMmJ1aWxkX3RvYy5kaXRhbWFwIi8+Ci08bmF2cmVmIG1hcHJlZj0iLi4vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MuZGl0YW1hcCIvPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBuYXZ0aXRsZT0iVGVzdGluZyBhbmQgdmFsaWRhdGluZyBXZWIgc2VydmljZXMiPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuZGl0YSIKLW5hdnRpdGxlPSJUZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgd2l0aCB0aGUgV1NETCBFeHBsb3JlciIKLXNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuZGl0YSIgbmF2dGl0bGU9IlZhbGlkYXRpbmcgV1NETCIKLXNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuZGl0YSIgbmF2dGl0bGU9IlRlc3RpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIFRDUC9JUCBNb25pdG9yIgotc2NvcGU9InBlZXIiPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5kaXRhIiBuYXZ0aXRsZT0iVmFsaWRhdGluZyBXUy1JIGNvbXBsaWFuY2Ugb2YgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIgotc2NvcGU9InBlZXIiPjwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBuYXZ0aXRsZT0iUHVibGlzaGluZyBXZWIgc2VydmljZXMiPgotPG5hdnJlZiBtYXByZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCIvPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90Z2Vud3NpbC5kaXRhIgotbmF2dGl0bGU9IkdlbmVyYXRpbmcgV1NJTCIgc2NvcGU9InBlZXIiPjwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC9tYXA+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMmJlYTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsYWJlbD0id3NtYWludG9jIiB0b3BpYz0iY29uY2VwdHMvY3dzLmh0bWwiPgotPHRvcGljIGxhYmVsPSJXZWIgc2VydmljZXMgb3ZlcnZpZXciIGhyZWY9ImNvbmNlcHRzL2N3cy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyIgaHJlZj0iY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiPgotPHRvcGljIGxhYmVsPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIiBocmVmPSJjb25jZXB0cy9jd3NkbC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2UiIGhyZWY9InJlZi9yd3NkbC5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJTT0FQIiBocmVmPSJjb25jZXB0cy9jc29hcC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuaHRtbCI+Ci08dG9waWMgbGFiZWw9IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSIgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUwiIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iSkFYLVJQQyIgaHJlZj0iY29uY2VwdHMvY2pheHJwYy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkpTUiAxMDkgLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXMiIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSkiIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlcyIgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXMiIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iV29ya3NwYWNlIGFuZCB0b29scyI+Ci08dG9waWMgbGFiZWw9IlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQiIGhyZWY9ImNvbmNlcHRzL2N3c2lud3NhLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ29uZmlndXJpbmcgeW91ciB3b3Jrc3BhY2UiPgotPHRvcGljIGxhYmVsPSJTZXR0aW5nIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcyIgaHJlZj0idGFza3MvdHdzcHJlZi5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQXhpcyBlbWl0dGVyIHByZWZlcmVuY2VzIiBocmVmPSJyZWYvcmF4aXNwcmVmLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIHdpemFyZHMgYmFzaWMgcHJlZmVyZW5jZXMiIGhyZWY9InJlZi9yd3N3aXpwcmVmLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iV1NETCBmaWxlIHByZWZlcmVuY2VzIiBocmVmPSJyZWYvcndzZGxwcmVmLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iV1MtSSBjb21wbGlhbmNlIHByZWZlcmVuY2VzIiBocmVmPSJyZWYvcnNlcnZwb2xwcmVmLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvcGljPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iSW1wb3J0aW5nIGFuZCBjcmVhdGluZyByZXNvdXJjZXMgdXNlZCBieSBXZWIgc2VydmljZXMiPgotPGxpbmsgdG9jPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy54bWwiLz4KLTx0b3BpYyBsYWJlbD0iRGlzY292ZXJpbmcgYW5kIGltcG9ydGluZyBhIFdlYiBzZXJ2aWNlIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJEZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyIgaHJlZj0idGFza3MvdG92ZXJ3cy5odG1sIj4KLTxsaW5rIHRvYz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLnhtbCIvPgotPGxpbmsgdG9jPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpczIudWkuZG9jLnVzZXIvd3NheGlzMmJ1aWxkX3RvYy54bWwiLz4KLTxsaW5rIHRvYz0iLi4vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MueG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJUZXN0aW5nIGFuZCB2YWxpZGF0aW5nIFdlYiBzZXJ2aWNlcyI+Ci08dG9waWMgbGFiZWw9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBXU0RMIEV4cGxvcmVyIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVmFsaWRhdGluZyBXU0RMIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVGVzdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgVENQL0lQIE1vbml0b3IiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbCI+Ci08dG9waWMgbGFiZWw9IlZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIG9mIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyIgaHJlZj0iLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyI+Ci08bGluayB0b2M9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MueG1sIi8+Ci08dG9waWMgbGFiZWw9IkdlbmVyYXRpbmcgV1NJTCIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmI1ZDY5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDlkODYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2Y0YjY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLWdlbmVyYXRlU291cmNlQnVuZGxlPWZhbHNlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MTFhZmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IFdlYiBzZXJ2aWNlcyBVSQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM2NjQzOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPgotCQk8Y29udGV4dHMgZmlsZT0id2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sIiBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy51aSIvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3dlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThlNzJkZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3dlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPGNvbnRleHRzPgotCi08IS0tRFJFUzogUmVzb3VyY2UgU2VsZWN0aW9uIERpYWxvZy0tPgotPGNvbnRleHQgaWQ9IkRSRVMwMDAxIj4KLTwhLS1SZXNvdXJjZSBUeXBlIGRyb3AgZG93bi0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBhIHJlc291cmNlIGZyb20gd2hpY2ggdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJEUkVTMDAwMiI+Ci08IS0tUmVzb3VyY2UgdHJlZS0tPgotPGRlc2NyaXB0aW9uPkxpc3RzIHRoZSByZXNvdXJjZXMgdGhhdCBjYW4gYmUgdHVybmVkIGludG8gYSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tUFBSTTogUmVzb3VyY2UgTWFuYWdlbWVudCBQcmVmZXJlbmNlIHBhZ2UtLT4KLQotPGNvbnRleHQgaWQ9IlBQUk0wMDAxIj4KLTwhLS1tYWluIHBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGUgUmVzb3VyY2UgTWFuYWdlbWVudCBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUFJNMDAwMiI+Ci08IS0tRmlsZSBvdmVyd3JpdGUgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBjaGVja2JveCBhbGxvd3MgeW91IHRvIG92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbiB3aGVuIG92ZXJ3cml0aW5nIGZpbGVzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBSTTAwMDMiPgotPCEtLUNyZWF0ZSBmb2xkZXJzIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrYm94IHRvIGNyZWF0ZSBmb2xkZXJzIGFuZCBmb2xkZXIgc3RydWN0dXJlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQUk0wMDA0Ij4KLTwhLS1DaGVjayBvdXQgZmlsZXMgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2tib3ggdG8gY2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUFJNMDAwNSI+Ci08IS0tU2tlbGV0b24gbWVyZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGNoZWNrIGJveCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBJZiB0aGlzIGNoZWNrIGJveCBpcyBlbmFibGVkLCB3aGVuIGEgc2tlbGV0b24gZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB3b3Jrc3BhY2UsIHRoZSBuZXdseSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZSB3aWxsIG1lcmdlIHdpdGggdGhlIGV4aXN0aW5nIHNrZWxldG9uIGZpbGUuICBFbmFibGUgdGhpcyB0byBwcmVzZXJ2ZSBjb2RlIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBtb2RpZmllZCBpbiB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZXMuICAKLQotTm90ZSB0aGF0IHdoZW4gdGhpcyBwcmVmZXJlbmNlIGlzIGVuYWJsZWQsIGlmIHlvdSBjaGFuZ2UgdGhlIHJldHVybiB0eXBlIG9mIGFuIGludGVyZmFjZSwgdGhlIHJlc3VsdGluZyBza2VsZXRvbiBmaWxlIHdpbGwgaGF2ZSBhIG1ldGhvZCByZXR1cm5pbmcgdGhlIHR5cGUgYXMgZGVmaW5lZCBpbiB0aGUgbmV3IGludGVyZmFjZSBidXQgd291bGQgaGF2ZSBhIG1ldGhvZCBib2R5IGZyb20gdGhlIG9yaWdpbmFsIHNrZWxldG9uIGZpbGUgKHdoaWNoIHdvdWxkIGJlIHJldHVybmluZyBhIGRpZmZlcmVudCB0eXBlKS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gY29tcGlsYXRpb24gZXJyb3IgdGhhdCB0aGUgeW91IHdpbGwgaGF2ZSB0byBjb3JyZWN0IG1hbnVhbGx5LgotCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tUFBTRDogU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBwYWdlLS0+Ci0KLTwhLS1TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YS0tPgotPGNvbnRleHQgaWQ9IlBQU0QwMDAxIj4KLTwhLS1QUFNEMDAwMSBmb3IgdGhlIFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQU0QwMDAyIj4KLTwhLS1QUFNEMDAwMiBmb3IgdGhlIGxhdW5jaCBzYW1wbGUgY2hlY2sgYm94IG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGUgU2NlbmFyaW8gRGVmYXVsdHMgcHJlZmVyZW5jZXMgZW5hYmxlIHlvdSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHRzIHRoYXQgeW91IHdhbnQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS4gCi0KLVRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cgdG8gY29kZSB0aGUgcHJveHkgZmlsZS4gU2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGxhdW5jaCBzYW1wbGUgYXBwbGljYXRpb24gYWZ0ZXIgaXQgaXMgY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQU0QwMDA0Ij4KLTwhLS1QUFNEMDAwNCBmb3IgdGhlIHNhbXBsZSBKU1AgdHlwZSBjb21ibyBib3ggb24gdGhlIFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBzYW1wbGUgSlNQIHRvIGJlIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFNEMDAwMyI+Ci08IS0tUFBTRDAwMDMgZm9yIHRoZSB3ZWIgZXhwbG9yZXIgdHlwZSBjb21ibyBib3ggb24gdGhlIFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoZSBTY2VuYXJpbyBEZWZhdWx0cyBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLiBTZWxlY3QgZnJvbSB0aGUgYXZhaWxhYmxlIFdlYiBzZXJ2aWNlcyBleHBsb3JlcnMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFNEMDAwNSI+Ci08IS0tUFBTRDAwMDUgZm9yIHRoZSBVc2VyLWRlZmluZWQgVURESSBDYXRlZ29yeSBEYXRhIENvbHVtbiBEZWxpbWl0ZXIgdGV4dCBmaWVsZCBvbiB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIGNoYXJhY3RlciB5b3Ugd2FudCB0byB1c2UgYXMgYSBjb2x1bW4gZGVsaW1pdGVyIGZvciB1c2VyLWRlZmluZWQgVURESSBDYXRlZ29yeSBkYXRhLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDYiPgotPCEtLVBQU0QwMDA2IGZvciB0aGUgVXNlci1kZWZpbmVkIFVEREkgQ2F0ZWdvcnkgRGF0YSBTdHJpbmcgRGVsaW1pdGVyIHRleHQgZmllbGQgb24gdGhlIFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBjaGFyYWN0ZXIgeW91IHdhbnQgdG8gdXNlIGFzIGEgc3RyaW5nIGRlbGltaXRlciBmb3IgdXNlci1kZWZpbmVkIFVEREkgQ2F0ZWdvcnkgZGF0YS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTxjb250ZXh0IGlkPSJQUEFEMDAwNCI+Ci08IS0tICBIaWRlIGdlbmVyYXRlIGNsaWVudCBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gaGlkZSB0aGUgb3B0aW9uIG9mIGdlbmVyYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgd2hlbiB5b3UgcmlnaHQtY2xpY2sgYSBmaWxlIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIG9yIE5hdmlnYXRvci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRDAwMDUiPgotPCEtLSAgSGlkZSBnZW5lcmF0ZSBzYW1wbGUgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGhpZGUgdGhlIG9wdGlvbiBvZiBnZW5lcmF0aW5nIHNhbXBsZSBKU1AgY29kZSBmb3IgdGhlIFdlYiBzZXJ2aWNlIHdoZW4geW91IHJpZ2h0LWNsaWNrIGEgZmlsZSBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciBvciBOYXZpZ2F0b3IuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDA2Ij4KLTwhLS0gIGNyZWF0ZSB3ZWIgc2VydmljZSBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gaGlkZSB0aGUgb3B0aW9uIG9mIGdlbmVyYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgd2hlbiB5b3UgcmlnaHQtY2xpY2sgYSBmaWxlIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIG9yIE5hdmlnYXRvci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRDAwMDgiPgotPCEtLSAgZ2VuZXJhdGUgc2tlbGV0b24gY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGhpZGUgdGhlIG9wdGlvbiBvZiBnZW5lcmF0aW5nIHNrZWxldG9uIEphdmEgY2xhc3NlcyB3aGVuIHlvdSByaWdodC1jbGljayBhIGZpbGUgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgb3IgTmF2aWdhdG9yLiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgb3BlcmF0aW9ucyBkZXNjcmliZWQgaW4gdGhlIFdTREwgZG9jdW1lbnQuIFdoZW4gdGhlIGJlYW4gaXMgY3JlYXRlZCwgZWFjaCBtZXRob2QgaGFzIGEgdHJpdmlhbCBpbXBsZW1lbnRhdGlvbiB0aGF0IHlvdSByZXBsYWNlIGJ5IGVkaXRpbmcgdGhlIGJlYW4uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDA5Ij4KLTwhLS0gIHB1Ymxpc2ggV1NETCBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gaGlkZSB0aGUgb3B0aW9uIG9mIHB1Ymxpc2hpbmcgdGhlIFdlYiBzZXJ2aWNlJ3MgV1NETCBmaWxlIHRvIGEgVURESSByZWdpc3RyeSB3aGVuIHlvdSByaWdodC1jbGljayBhIGZpbGUgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgb3IgTmF2aWdhdG9yLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPC9jb250ZXh0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiODNmZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhMDg4ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMTY2NzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3N0LWNvbW1hbmQtZjEueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcwotZ2VuZXJhdGVTb3VyY2VCdW5kbGU9ZmFsc2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlZWY2Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0hIHBsdWctaW4gcHJvcGVydGllcwotcGx1Z2luTmFtZSAgICAgPSBXZWIgc2VydmljZXMgVUkKLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzBjMDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPgotCQk8Y29udGV4dHMgZmlsZT0id3N0LWNvbW1hbmQtZjEueG1sIiBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSIvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC93c3QtY29tbWFuZC1mMS54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3dzdC1jb21tYW5kLWYxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2M2M2NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3dzdC1jb21tYW5kLWYxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08Y29udGV4dHM+Ci0KLTwhLS1vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWktLT4KLTxjb250ZXh0IGlkPSJQUEFEMDAwMSI+Ci08IS0tQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+WW91IGNhbiB1c2UgdGhpcyBwYWdlIHRvIGNob29zZSB3aGljaCBXZWIgc2VydmljZXMgcG9wdXAgYWN0aW9ucyBhcmUgZGlzcGxheWVkIG9yIGhpZGRlbi4gV2hlbiB1c2luZyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgbGF1bmNlZCBmcm9tIGEgcG9wdXAgbWVudSB5b3UgbWF5IHNlZSBhIGNoZWNrIGJveCB0aGF0IGdpdmVzIHlvdSB0aGUgb3B0aW9uIG9mIGhpZGluZyB0aGUgcG9wdXAgYWN0aW9uIHRoYXQgeW91IGhhdmUganVzdCBwZXJmb3JtZWQuIElmIHlvdSBzZWxlY3QgdGhhdCBjaGVja2JveCBpdCB3aWxsIHNlbGVjdCB0aGUgcmVzcGVjdGl2ZSBjaGVja2JveCBvbiB0aGlzIHByZWZlcmVuY2UgcGFnZS4gSWYgeW91IGhhdmUgY2hvc2VuIHRvIGhpZGUgYSBwb3B1cCBhY3Rpb24gdGhhdCB5b3Ugd2FudCB0byBkaXNwbGF5IHVzZSB0aGlzIHBhZ2UgdG8gbWFrZSB0aGUgcG9wdXAgYWN0aW9uIHZpc2libGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRDAwMDIiPgotPCEtLXNob3cgYWxsIGNoZWNrIGJveCBvbiB0aGUgQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Qnkgc2VsZWN0aW5nIHRoaXMgY2hlY2tib3gsIGFsbCB2YWxpZCBXZWIgc2VydmljZXMgcG9wdXAgYWN0aW9ucyB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIHlvdSBzZWxlY3QgYSBmaWxlIGluIHlvdXIgd29ya3NwYWNlIGFuZCByaWdodC1jbGljayBpdC4gQWx0ZXJuYXRlbHkgeW91IGNhbiBzZWxlY3QgdG8gZGlzcGxheSBvciBoaWRlIGluZGl2aWR1YWwgcG9wdXAgYWN0aW9ucy4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwMyI+Ci08IS0taGlkZSBhbGwgY2hlY2sgYm94IG9uIHRoZSBBY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5CeSBzZWxlY3RpbmcgdGhpcyBjaGVja2JveCwgYWxsIFdlYiBzZXJ2aWNlcyBwb3B1cCBhY3Rpb25zIHdpbGwgYmUgaGlkZGVuIHdoZW4geW91IHNlbGVjdCBhIGZpbGUgaW4geW91ciB3b3Jrc3BhY2UgYW5kIHJpZ2h0LWNsaWNrIGl0LiBBbHRlcm5hdGVseSB5b3UgY2FuIHNlbGVjdCB0byBkaXNwbGF5IG9yIGhpZGUgaW5kaXZpZHVhbCBwb3B1cCBhY3Rpb25zLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlRXUDAwMDEiPgotPCEtLXNob3cvaGlkZSBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5XaGVuIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBsYXVuY2VkIGZyb20gYSBwb3B1cCBtZW51LCB0aGlzIGNoZWNrIGJveCB0aGF0IGdpdmVzIHlvdSB0aGUgb3B0aW9uIG9mIGhpZGluZyB0aGUgcG9wdXAgYWN0aW9uIHRoYXQgeW91IGhhdmUganVzdCBwZXJmb3JtZWQuIElmIHlvdSBzZWxlY3QgdGhlIGNoZWNrYm94IGl0IHdpbGwgc2VsZWN0IHRoZSByZXNwZWN0aXZlIGNoZWNrYm94IG9uIHRoZSBXZWIgc2VydmljZXMgPiBQb3B1cCBEaWFsb2cgU2VsZWN0aW9uIHByZWZlcmVuY2UgcGFnZS4gSWYgeW91IGhhdmUgY2hvc2VuIHRvIGhpZGUgYSBwb3B1cCBhY3Rpb24gdGhhdCB5b3Ugd2FudCB0byBkaXNwbGF5LCBnbyB0byBXaW5kb3cgPiBQcmVmZXJlbmNlcyA+IFdlYiBzZXJ2aWNlcyA+IFBvcHVwIERpYWxvZyBTZWxlY3Rpb24sIGFuZCB1c2UgdGhpcyBwYWdlIHRvIG1ha2UgdGhlIHBvcHVwIGFjdGlvbiB2aXNpYmxlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPC9jb250ZXh0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3NTAxZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiMjM4MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MWMzMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcwotZ2VuZXJhdGVTb3VyY2VCdW5kbGU9ZmFsc2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYzYjU3Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcGx1Z2luTmFtZSAgID0gV2ViIFNlcnZpY2VzIFVJCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3ZTcxZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiID8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+Ci0JCTxjb250ZXh0cyBmaWxlPSJ3ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzLnVpIi8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3dlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3Avd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDc3OGRiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3Avd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci0KLTxjb250ZXh0cz4KLQotPCEtLVdTSVBhZ2UuamF2YS0tPgotPGNvbnRleHQgaWQ9IlBXU0kwMDAxIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+VGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgc3VwcG9ydCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIG91dGxpbmVkIGluIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUgMS4xLCB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wIChXUy1JIFNTQlApLCBhbmQgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBZb3UgY2FuIGNob29zZSB0byBtYWtlIHlvdXIgV2ViIHNlcnZpY2UgY29tcGxpYW50IG9yIG5vbi1jb21wbGlhbnQsIGRlcGVuZGluZyBvbiB5b3VyIG5lZWRzLiBGb3IgZXhhbXBsZSwgZW5jb2RlZCBzdHlsZSAoUlBDL2VuY29kZWQpLCBTT0FQIG92ZXIgSk1TIHByb3RvY29scywgYW5kIHNlY3VyZWQgV2ViIHNlcnZpY2VzLCBhcmUgbm90IFdTLUkgY29tcGxpYW50LgotCi1Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgY29tcGxpYW5jZSBmb3IgZWl0aGVyIHRoZSBCYXNpYyBQcm9maWxlIGFuZCB0aGUgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlLCBvciBmb3IgdGhlIEF0dGFjaG1lbnRzIFByb2ZpbGUuIFlvdSBjYW4gc2VsZWN0IGZyb20gdGhyZWUgbGV2ZWxzIG9mIGNvbXBsaWFuY2Ugd2l0aCBXUy1JIHNwZWNpZmljYXRpb25zOgotLSBSZXF1aXJlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgcHJldmVudHMgeW91IGZyb20gY3JlYXRpbmcgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLgotLSBTdWdnZXN0IFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLCBidXQgcHJvdmlkZXMgYSB2aXNpYmxlIHdhcm5pbmcgc3RhdGluZyBob3cgdGhlIHNlcnZpY2UgaXMgbm9uLWNvbXBsaWFudC4KLS0gSWdub3JlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlIGFuZCBkb2VzIG5vdCBub3RpZnkgeW91IG9mIG5vbi1jb21wbGlhbmNlLgotCi1Zb3UgY2FuIGFsc28gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotCi1JZiB5b3Ugc2VsZWN0IHRvIHdhaXQgZm9yIFdTREwgdmFsaWRhdGlvbiB0byBjb21wbGV0ZSwgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIHdpbGwgcHJldmVudCB5b3UgZnJvbSBnb2luZyBmb3J3YXJkIGFuZCBjb21wbGV0aW5nIGFkZGl0aW9uYWwgd2l6YXJkIHBhZ2VzIG9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgeW91ciBXU0RMIGZpbGUgdW50aWwgdGhhdCBXU0RMIGZpbGUgaGFzIGJlZW4gdmFsaWRhdGVkLiBJZiB0aGUgV1NETCBmaWxlIGlzIG5vdCB2YWxpZCwgeW91IHdpbGwgYmUgZ2l2ZW4gdGhlIG9wdGlvbiBvZiBleGl0aW5nIHRoZSB3aXphcmQgb3IgY29udGludWluZyB3aXRoIHRoZSBpbnZhbGlkIFdTREwgZmlsZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NJMDAwNCI+Ci08ZGVzY3JpcHRpb24+VGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgc3VwcG9ydCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIG91dGxpbmVkIGluIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUgMS4xLCB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wIChXUy1JIFNTQlApLCBhbmQgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBZb3UgY2FuIGNob29zZSB0byBtYWtlIHlvdXIgV2ViIHNlcnZpY2UgY29tcGxpYW50IG9yIG5vbi1jb21wbGlhbnQsIGRlcGVuZGluZyBvbiB5b3VyIG5lZWRzLiBGb3IgZXhhbXBsZSwgZW5jb2RlZCBzdHlsZSAoUlBDL2VuY29kZWQpLCBTT0FQIG92ZXIgSk1TIHByb3RvY29scywgYW5kIHNlY3VyZWQgV2ViIHNlcnZpY2VzLCBhcmUgbm90IFdTLUkgY29tcGxpYW50LgotWW91IGNhbiBzZXQgdGhlIGxldmVsIG9mIGNvbXBsaWFuY2UgZm9yIGVpdGhlciB0aGUgQmFzaWMgUHJvZmlsZSBhbmQgdGhlIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSwgb3IgZm9yIHRoZSBBdHRhY2htZW50cyBQcm9maWxlLiBZb3UgY2FuIHNlbGVjdCBmcm9tIHRocmVlIGxldmVscyBvZiBjb21wbGlhbmNlIHdpdGggV1MtSSBzcGVjaWZpY2F0aW9uczoKLS0gUmVxdWlyZSBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIHByZXZlbnRzIHlvdSBmcm9tIGNyZWF0aW5nIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZS4KLS0gU3VnZ2VzdCBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZSwgYnV0IHByb3ZpZGVzIGEgdmlzaWJsZSB3YXJuaW5nIHN0YXRpbmcgaG93IHRoZSBzZXJ2aWNlIGlzIG5vbi1jb21wbGlhbnQuCi0tIElnbm9yZSBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZSBhbmQgZG9lcyBub3Qgbm90aWZ5IHlvdSBvZiBub24tY29tcGxpYW5jZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NJMDAwOCI+Ci08ZGVzY3JpcHRpb24+VGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgc3VwcG9ydCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIG91dGxpbmVkIGluIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUgMS4xLCB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wIChXUy1JIFNTQlApLCBhbmQgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBZb3UgY2FuIGNob29zZSB0byBtYWtlIHlvdXIgV2ViIHNlcnZpY2UgY29tcGxpYW50IG9yIG5vbi1jb21wbGlhbnQsIGRlcGVuZGluZyBvbiB5b3VyIG5lZWRzLiBGb3IgZXhhbXBsZSwgZW5jb2RlZCBzdHlsZSAoUlBDL2VuY29kZWQpLCBTT0FQIG92ZXIgSk1TIHByb3RvY29scywgYW5kIHNlY3VyZWQgV2ViIHNlcnZpY2VzLCBhcmUgbm90IFdTLUkgY29tcGxpYW50LgotWW91IGNhbiBzZXQgdGhlIGxldmVsIG9mIGNvbXBsaWFuY2UgZm9yIGVpdGhlciB0aGUgQmFzaWMgUHJvZmlsZSBhbmQgdGhlIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSwgb3IgZm9yIHRoZSBBdHRhY2htZW50cyBQcm9maWxlLiBZb3UgY2FuIHNlbGVjdCBmcm9tIHRocmVlIGxldmVscyBvZiBjb21wbGlhbmNlIHdpdGggV1MtSSBzcGVjaWZpY2F0aW9uczoKLS0gUmVxdWlyZSBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIHByZXZlbnRzIHlvdSBmcm9tIGNyZWF0aW5nIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZS4KLS0gU3VnZ2VzdCBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZSwgYnV0IHByb3ZpZGVzIGEgdmlzaWJsZSB3YXJuaW5nIHN0YXRpbmcgaG93IHRoZSBzZXJ2aWNlIGlzIG5vbi1jb21wbGlhbnQuCi0tIElnbm9yZSBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZSBhbmQgZG9lcyBub3Qgbm90aWZ5IHlvdSBvZiBub24tY29tcGxpYW5jZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NJMDAwOSI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTSTAwMDEwIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1Zb3UgY2FuIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NJMDAwMTEiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDAxMiI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotSWYgeW91IHNlbGVjdCB0byB3YWl0IGZvciBXU0RMIHZhbGlkYXRpb24gdG8gY29tcGxldGUsIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyB3aWxsIHByZXZlbnQgeW91IGZyb20gZ29pbmcgZm9yd2FyZCBhbmQgY29tcGxldGluZyBhZGRpdGlvbmFsIHdpemFyZCBwYWdlcyBvbmNlIHlvdSBoYXZlIHNlbGVjdGVkIHlvdXIgV1NETCBmaWxlIHVudGlsIHRoYXQgV1NETCBmaWxlIGhhcyBiZWVuIHZhbGlkYXRlZC4gSWYgdGhlIFdTREwgZmlsZSBpcyBub3QgdmFsaWQsIHlvdSB3aWxsIGJlIGdpdmVuIHRoZSBvcHRpb24gb2YgZXhpdGluZyB0aGUgd2l6YXJkIG9yIGNvbnRpbnVpbmcgd2l0aCB0aGUgaW52YWxpZCBXU0RMIGZpbGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDkiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDAxMCI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMTEiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDEyIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1Zb3UgY2FuIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPC9jb250ZXh0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YWRmOTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcl8xLjAuMC5qYXIKLWJ1aWxkLnhtbAotYmFrCi10ZW1wCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc4NTEwMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWMyNjQ3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIEFwciAxNiAxODowMToyNSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZWM1ZDguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI1N1biBBcHIgMTYgMTg6MDE6MzIgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDUyZjlkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIAotCi0JVGhpcyBzY3JpcHQgYnVpbGQgdGhlIEhlbHAgcGx1Zy1pbiBieSB0cmFuc2Zvcm1pbmcgdGhlIERJVEEgc291cmNlIGZpbGVzIGludG8gSFRNTC4KLQkKLQlUbyB1c2UgdGhpcyBzY3JpcHQsIHlvdSBtdXN0IGluc3RhbGwgRElUQS1PVCBvbiB5b3VyIG1hY2hpbmUgaW4gdGhlIGRpcmVjdG9yeQotCWRlZmluZWQgYnkgdGhlIGRpdGEub3QuZGlyIHByb3BlcnR5LgotCQotCVJ1biB0aGUgZGVmYXVsdCB0YXJnZXQgYWZ0ZXIgeW91IGVkaXQgdGhlIERJVEEgc291cmNlIGZpbGVzIHRvIHJlZ2VuZXJhdGUgdGhlIEhUTUwuCi0JCi0JVG8gY3VzdG9taXplIHRoaXMgc2NyaXB0IGZvciBvdGhlciBIZWxwIHBsdWctaW5zLCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBhcmdzLmlucHV0IHByb3BlcnR5Ci0JdG8gYmUgdGhlIERJVEEgbWFwIGZpbGUgZm9yIHRoZSBwbHVnLWluLgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBsaW5rcyB0byBzaWJsaW5nIEhlbHAgcGx1Zy1pbnMgaGF2ZSBzY29wZT0icGVlciIsIG90aGVyd2lzZSB0aGUKLQlvdXRwdXQgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aWxsIGJlIHNoaWZ0ZWQgaW5jb3JyZWN0bHkuCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IHlvdSBoYW5kIGNvZGUgeW91ciBwbHVnaW4ueG1sIGZpbGUgaW4gbXlwbHVnaW4ueG1sLiBUaGlzIGZpbGUKLQl3aWxsIGJlIGNvcGllZCBvdmVyIHRoZSBnZW5lcmF0ZWQgcGx1Z2luLnhtbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGJlaW5nIGdlbmVyYXRlZCBjb3JyZWN0bHkKLQlieSBESVRBLU9ULgotCQotCUNoYW5nZUxvZzoKLQkyMDA2LTA0LTA1IEFydGh1ciBSeW1hbiA8cnltYW5AY2EuaWJtLmNvbT4KLQktIENyZWF0ZWQuCi0JMjAwOC0wMS0wOSBLYXRlIFByaWNlIDxrYXRlcEBjYS5pYm0uY29tPgotCS0gbW9kaWZpZWQgZm9yIG5ldyBESVRBLU9UIHZlcnNpb24KLQkKLS0tPgotPHByb2plY3QgbmFtZT0iZWNsaXBzZWhlbHAiIGRlZmF1bHQ9ImFsbCI+Ci0KLQk8cHJvcGVydHkgbmFtZT0iZGl0YS5vdC5kaXIiIGxvY2F0aW9uPSJDOi9ESVRBLU9UMS4yLjIiIC8+Ci0KLQk8cGF0aCBpZD0iZG9zdC5jbGFzcy5wYXRoIj4KLQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9bGliJHtmaWxlLnNlcGFyYXRvcn1kb3N0LmphciIgLz4KLQk8L3BhdGg+Ci0KLQk8dGFza2RlZiBuYW1lPSJpbnRlZ3JhdGUiIGNsYXNzbmFtZT0ib3JnLmRpdGEuZG9zdC5wbGF0Zm9ybS5JbnRlZ3JhdG9yVGFzayI+Ci0JCTxjbGFzc3BhdGggcmVmaWQ9ImRvc3QuY2xhc3MucGF0aCIgLz4KLQk8L3Rhc2tkZWY+Ci0JPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImludGVncmF0ZSwgZWNsaXBzZWhlbHAiPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iaW50ZWdyYXRlIj4KLQkJPGludGVncmF0ZSBkaXRhZGlyPSIke2RpdGEub3QuZGlyfSIgLz4KLQk8L3RhcmdldD4KLQotCTwhLS0gcmV2aXNlIGJlbG93IGhlcmUgLS0+Ci0JPHRhcmdldCBuYW1lPSJlY2xpcHNlaGVscCI+Ci0JCTxhbnQgYW50ZmlsZT0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWNvbmR1Y3Rvci54bWwiIHRhcmdldD0iaW5pdCIgZGlyPSIke2RpdGEub3QuZGlyfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jb3B5Y3NzIiB2YWx1ZT0ibm8iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jc3NwYXRoIiB2YWx1ZT0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS5wcm92aWRlciIgdmFsdWU9IkVjbGlwc2Uub3JnIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS52ZXJzaW9uIiB2YWx1ZT0iMy4wLjAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5pbnB1dCIgbG9jYXRpb249Indzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAiIC8+ICAgIAkJCi0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249IiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk3YzQ0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwMTY4Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSB3c3dzZGxlZGl0b3JjX3RvYy54bWwsXAotICAgICAgICAgICAgICAgd3N3c2RsZWRpdG9ydF90b2MueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgaW1hZ2VzLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLQkJCSAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcyxcCi0JCSAgICAgICAqLm1hcGxpc3QsXAotICAgICAgICAgICAgICAgKi5kaXRhbWFwLFwKLQkJICAgICAgIGNvbmNlcHRzLyouZGl0YSxcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmRpdGEKLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGExYmU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN3c2RsZWQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgZWRpdG9yPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5UaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LAotdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuPC9zaG9ydGRlc2M+Ci08Y29uYm9keT4KLTxwPlVzaW5nIHRoZSBXU0RMIGVkaXRvciwgeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nOjwvcD4KLTx1bD4KLTxsaT5DcmVhdGUgbmV3IFdTREwgZmlsZXM8L2xpPgotPGxpPlZhbGlkYXRlIGFuZCBlZGl0IFdTREwgZmlsZXM8L2xpPgotPGxpPkNyZWF0ZSBhbmQgZGVsZXRlOiAgPHVsPgotPGxpPlNlcnZpY2VzOiB1c2VkIHRvIGFnZ3JlZ2F0ZSBhIHNldCBvZiByZWxhdGVkIHBvcnRzLiBUaGVzZSBhcmUgdGhlIHJvb3QKLWVsZW1lbnRzIG9mIGFsbCBXU0RMIGZpbGVzLjwvbGk+Ci08bGk+UG9ydHM6IHNwZWNpZnkgYW4gYWRkcmVzcyBmb3IgYSBiaW5kaW5nLCB0aHVzIGRlZmluaW5nIGEgc2luZ2xlIGNvbW11bmljYXRpb24KLWVuZHBvaW50LjwvbGk+Ci08bGk+QmluZGluZ3M6IHNwZWNpZnkgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zIGZvcgotdGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS48L2xpPgotPGxpPlBvcnQgdHlwZXM6IGEgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgdGhhdCBlYWNoIHJlZmVyIHRvIGFuIGlucHV0IG1lc3NhZ2UKLWFuZCBvdXRwdXQgbWVzc2FnZXMuPC9saT4KLTxsaT5PcGVyYXRpb25zOiBpbnB1dCBhbmQgb3V0cHV0IG1lc3NhZ2VzLjwvbGk+Ci08bGk+TWVzc2FnZXM6IHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLgotQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbgotd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uPC9saT4KLTxsaT5QYXJ0czogYSBmbGV4aWJsZSBtZWNoYW5pc20gZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudAotb2YgYSBtZXNzYWdlLjw/UHViIENhcmV0Pz48L2xpPgotPGxpPlR5cGVzOiBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvbGk+Ci08bGk+SW1wb3J0IHN0YXRlbWVudHM6IHVzZWQgdG8gYXNzb2NpYXRlIGEgbmFtZXNwYWNlIHdpdGggYSBkb2N1bWVudCBsb2NhdGlvbi4gPC9saT4KLTwvdWw+PC9saT4KLTxsaT5JbXBvcnQgZXhpc3RpbmcgV1NETCBmaWxlcyBmb3Igc3RydWN0dXJlZCB2aWV3aW5nPC9saT4KLTxsaT5HZW5lcmF0ZSBkb2N1bWVudGF0aW9uIGZyb20gYSBXU0RMIGRvY3VtZW50LjwvbGk+Ci08L3VsPgotPHA+VGhlIFdTREwgc3VwcG9ydCBpbiB0aGUgV1NETCBlZGl0b3IgaXMgYmFzZWQgb24gdGhlIFczQyA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiBzY29wZT0iZXh0ZXJuYWwiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbgotTGFuZ3VhZ2UgKFdTREwpIDEuMTwveHJlZj4uIFRoZSBXU0RMIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIFdlYiBzaXRlIGlzCi1hbHNvIHVzZWQgZm9yIHZhbGlkYXRpb24uJm5ic3A7IDwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1NETDwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KLTw/UHViICowMDAwMDAyNTM0Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYWFhNDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJFZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3IiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzZGxlZCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIGVkaXRvcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3dzZGxlZCI+PGEgbmFtZT0iY3dzZGxlZCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwKLXZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLjwvcD4KLQotPHA+VXNpbmcgdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6PC9wPgotCi08dWw+Ci08bGk+Q3JlYXRlIG5ldyBXU0RMIGZpbGVzPC9saT4KLQotPGxpPlZhbGlkYXRlIGFuZCBlZGl0IFdTREwgZmlsZXM8L2xpPgotCi08bGk+Q3JlYXRlIGFuZCBkZWxldGU6ICA8dWw+Ci08bGk+U2VydmljZXM6IHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuIFRoZXNlIGFyZSB0aGUgcm9vdAotZWxlbWVudHMgb2YgYWxsIFdTREwgZmlsZXMuPC9saT4KLQotPGxpPlBvcnRzOiBzcGVjaWZ5IGFuIGFkZHJlc3MgZm9yIGEgYmluZGluZywgdGh1cyBkZWZpbmluZyBhIHNpbmdsZSBjb21tdW5pY2F0aW9uCi1lbmRwb2ludC48L2xpPgotCi08bGk+QmluZGluZ3M6IHNwZWNpZnkgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zIGZvcgotdGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS48L2xpPgotCi08bGk+UG9ydCB0eXBlczogYSBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyB0aGF0IGVhY2ggcmVmZXIgdG8gYW4gaW5wdXQgbWVzc2FnZQotYW5kIG91dHB1dCBtZXNzYWdlcy48L2xpPgotCi08bGk+T3BlcmF0aW9uczogaW5wdXQgYW5kIG91dHB1dCBtZXNzYWdlcy48L2xpPgotCi08bGk+TWVzc2FnZXM6IHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLgotQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbgotd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uPC9saT4KLQotPGxpPlBhcnRzOiBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50Ci1vZiBhIG1lc3NhZ2UuPC9saT4KLQotPGxpPlR5cGVzOiBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvbGk+Ci0KLTxsaT5JbXBvcnQgc3RhdGVtZW50czogdXNlZCB0byBhc3NvY2lhdGUgYSBuYW1lc3BhY2Ugd2l0aCBhIGRvY3VtZW50IGxvY2F0aW9uLiA8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkltcG9ydCBleGlzdGluZyBXU0RMIGZpbGVzIGZvciBzdHJ1Y3R1cmVkIHZpZXdpbmc8L2xpPgotCi08bGk+R2VuZXJhdGUgZG9jdW1lbnRhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudC48L2xpPgotCi08L3VsPgotCi08cD5UaGUgV1NETCBzdXBwb3J0IGluIHRoZSBXU0RMIGVkaXRvciBpcyBiYXNlZCBvbiB0aGUgVzNDIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHRhcmdldD0iX2JsYW5rIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIDEuMTwvYT4uIFRoZSBXU0RMIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIFdlYiBzaXRlIGlzCi1hbHNvIHVzZWQgZm9yIHZhbGlkYXRpb24uwqAgPC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi90YXNrcy90ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL2h0dHBza2VsLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL2h0dHBza2VsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJlNjY4Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9odHRwc2tlbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zaG93LWhpZGUtYmluZGluZy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zaG93LWhpZGUtYmluZGluZy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTliNTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc2hvdy1oaWRlLWJpbmRpbmcuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc29hcHNrZWwuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc29hcHNrZWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQyNzM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXBza2VsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvd3NkbGVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYmUzYjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvd3NkbGVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L19mLmNmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvX2YuY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgwMThhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvX2YuY2ZzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyMzI0Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZGU2OGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjE1OjM4IEVEVCAyMDA3DQotb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXI9b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJcbjEuMC4zMDAucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNDg2OGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTU6MzggRURUIDIwMDcNCi1sdWNlbmU9MS40LjEwMy52MjAwNjA2MDENCi1hbmFseXplcj1vcmcuZWNsaXBzZS5oZWxwLmJhc2VcIzMuMi4wLnYyMDA2MDYwMT9sb2NhbGVcPWVuDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYxMjg4OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjE1OjM4IEVEVCAyMDA3DQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0aW1wdC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwb3J0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNWQwYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdlNDM2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzZGxlZGl0b3J0X3RvYy54bWwiLz4gICAKLSAgICA8dG9jIGZpbGU9Indzd3NkbGVkaXRvcmNfdG9jLnhtbCIvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLSAgICAgIAotPC9leHRlbnNpb24+Ci08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci0KLQotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGViOTlmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIubWFwbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxtYXBsaXN0IHZlcnNpb249IjMuNi4yIj4KLSAgPG5hdj4KLSAgICA8bWFwIGZpbGU9Indzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAiLz4KLSAgICA8bWFwIGZpbGU9Indzd3NkbGVkaXRvcmNfdG9jLmRpdGFtYXAiLz4KLSAgPC9uYXY+Ci0gIDxsaW5rPgotICAgIDxtYXAgZmlsZT0id3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcCIvPgotICAgIDxtYXAgZmlsZT0id3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcCIvPgotICA8L2xpbms+Ci08L21hcGxpc3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTA2OTdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBodG1sCi0gIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iKEMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwNyIgLz4KLTxtZXRhIG5hbWU9InNlY3VyaXR5IiBjb250ZW50PSJwdWJsaWMiIC8+Ci08bWV0YSBuYW1lPSJSb2JvdHMiIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgbmFtZT0iREMuRm9ybWF0IiBjb250ZW50PSJYSFRNTCIgLz4KLTwhLS0gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTGljZW5zZWQgTWF0ZXJpYWxzIFByb3BlcnR5IG9mIElCTSAtLT4KLTwhLS0gVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtLT4KLTwhLS0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlIHJlc3RyaWN0ZWQgYnkgLS0+Ci08IS0tIEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4gLS0+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJpYm1kaXRhLmNzcyIgLz4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5JbmRleDwvaDE+Ci08YSBuYW1lPSJJRFgwXzU3IiBocmVmPSIjSURYMV81NyI+VzwvYT4KLTxocj48L2hyPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzU3IiBocmVmPSIjSURYMF81NyI+VzwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5XZWIgc2VydmljZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkc3J2Yy5odG1sI3RhZGRzcnZjIj5hZGRpbmcgc2VydmljZXMgdG8gV1NETDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGNydGltcHQuaHRtbCN0Y3J0aW1wdCI+YWRkaW5nIFdTREwgaW1wb3J0IHN0YXRlbWVudHM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwjdGFkZHBhcnQiPmFkZGluZyBXU0RMIG1lc3NhZ2UgcGFydHM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRtZXNzLmh0bWwjdGFkZG1lc3MiPmFkZGluZyBXU0RMIG1lc3NhZ2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sI3RhZGRvcGVyIj5hZGRpbmcgV1NETCBvcGVyYXRpb25zPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkcG9ydC5odG1sI3RhZGRwb3J0Ij5hZGRpbmcgV1NETCBwb3J0czwvYT4KLTwvbGk+Ci08bGk+YmluZGluZ3MKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIj5jcmVhdGluZzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sI3RjcnR3c2RsIj5jcmVhdGluZyBXU0RMPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sI3RjcnR0eXBlIj5jcmVhdGluZyBXU0RMIHR5cGVzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90ZWR0d3NkbC5odG1sI3RlZHR3c2RsIj5lZGl0aW5nIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwjdGltcHdzZGwiPmltcG9ydGluZyBXU0RMPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sI3RzZXRwcnR0Ij5zZXR0aW5nIHBvcnQgdHlwZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RzZXRiaW5kLmh0bWwjdHNldGJpbmQiPnNldHRpbmcgV1NETCBiaW5kaW5nczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0RMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCN0c2V0YmluZCI+YmluZGluZ3M8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RjcnR3c2RsLmh0bWwjdGNydHdzZGwiPmNyZWF0aW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90ZWR0d3NkbC5odG1sI3RlZHR3c2RsIj5lZGl0aW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sI3RjcnRpbXB0Ij5pbXBvcnQgc3RhdGVtZW50czwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGltcHdzZGwuaHRtbCN0aW1wd3NkbCI+aW1wb3J0aW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkcGFydC5odG1sI3RhZGRwYXJ0Ij5tZXNzYWdlIHBhcnRzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkbWVzcy5odG1sI3RhZGRtZXNzIj5tZXNzYWdlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZG9wZXIuaHRtbCN0YWRkb3BlciI+b3BlcmF0aW9uczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCN0YWRkcG9ydCI+cG9ydHM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRzcnZjLmh0bWwjdGFkZHNydmMiPnNlcnZpY2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sI3RzZXRwcnR0Ij5zZXR0aW5nIHBvcnQgdHlwZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RjcnR0eXBlLmh0bWwjdGNydHR5cGUiPnR5cGVzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlmMmY1Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxpbmRleD4KLSAgPGVudHJ5IGtleXdvcmQ9IldTREwiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbXBvcnRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwjdGltcHdzZGwiIHRpdGxlPSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGNydHdzZGwuaHRtbCN0Y3J0d3NkbCIgdGl0bGU9IkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImVkaXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RlZHR3c2RsLmh0bWwjdGVkdHdzZGwiIHRpdGxlPSJFZGl0aW5nIFdTREwgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCN0YWRkc3J2YyIgdGl0bGU9IkFkZGluZyBhIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJwb3J0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCN0YWRkcG9ydCIgdGl0bGU9IkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2V0dGluZyBwb3J0IHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sI3RzZXRwcnR0IiB0aXRsZT0iU2V0dGluZyBhIHBvcnQgdHlwZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImJpbmRpbmdzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIiB0aXRsZT0iU2V0dGluZyBhIGJpbmRpbmciLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJvcGVyYXRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sI3RhZGRvcGVyIiB0aXRsZT0iQWRkaW5nIGFuIG9wZXJhdGlvbiIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1lc3NhZ2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkbWVzcy5odG1sI3RhZGRtZXNzIiB0aXRsZT0iQWRkaW5nIGEgbWVzc2FnZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1lc3NhZ2UgcGFydHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwjdGFkZHBhcnQiIHRpdGxlPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImltcG9ydCBzdGF0ZW1lbnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sI3RjcnRpbXB0IiB0aXRsZT0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sI3RjcnR0eXBlIiB0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iaW1wb3J0aW5nIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwjdGltcHdzZGwiIHRpdGxlPSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sI3RjcnR3c2RsIiB0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZWRpdGluZyBXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90ZWR0d3NkbC5odG1sI3RlZHR3c2RsIiB0aXRsZT0iRWRpdGluZyBXU0RMIGZpbGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIHNlcnZpY2VzIHRvIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRzcnZjLmh0bWwjdGFkZHNydmMiIHRpdGxlPSJBZGRpbmcgYSBzZXJ2aWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIFdTREwgcG9ydHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRwb3J0Lmh0bWwjdGFkZHBvcnQiIHRpdGxlPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNldHRpbmcgcG9ydCB0eXBlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNldHBydHQuaHRtbCN0c2V0cHJ0dCIgdGl0bGU9IlNldHRpbmcgYSBwb3J0IHR5cGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJiaW5kaW5ncyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmciPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCN0c2V0YmluZCIgdGl0bGU9IlNldHRpbmcgYSBiaW5kaW5nIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNldHRpbmcgV1NETCBiaW5kaW5ncyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCN0c2V0YmluZCIgdGl0bGU9IlNldHRpbmcgYSBiaW5kaW5nIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIFdTREwgb3BlcmF0aW9ucyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZG9wZXIuaHRtbCN0YWRkb3BlciIgdGl0bGU9IkFkZGluZyBhbiBvcGVyYXRpb24iLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBtZXNzYWdlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZG1lc3MuaHRtbCN0YWRkbWVzcyIgdGl0bGU9IkFkZGluZyBhIG1lc3NhZ2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBtZXNzYWdlIHBhcnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkcGFydC5odG1sI3RhZGRwYXJ0IiB0aXRsZT0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBpbXBvcnQgc3RhdGVtZW50cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGNydGltcHQuaHRtbCN0Y3J0aW1wdCIgdGl0bGU9IkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBXU0RMIHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sI3RjcnR0eXBlIiB0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxNjQyMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi0KLXBsdWdpbk5hbWUgICAgID0gV1NETCBFZGl0b3IgRG9jdW1lbnRhdGlvbgotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2U0MzY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzZGxlZGl0b3J0X3RvYy54bWwiLz4gICAKLSAgICA8dG9jIGZpbGU9Indzd3NkbGVkaXRvcmNfdG9jLnhtbCIvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLSAgICAgIAotPC9leHRlbnNpb24+Ci08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci0KLQotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWE0Mjk0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0iYWRkaW5nYW1lc3NhZ2UiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08c2hvcnRkZXNjPk1lc3NhZ2VzIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLgotQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbgotd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IGVsZW1lbnRzICh3aXRoaW4gYSBwb3J0IHR5cGUpLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIG1lc3NhZ2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPm1lc3NhZ2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+WW91IGNhbiBjcmVhdGUgYSBtZXNzYWdlIHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcgYnkgcmlnaHQtY2xpY2tpbmcKLXRoZSA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyIGFuZCBjbGlja2luZyA8Yj5BZGQgTWVzc2FnZTwvYj4uPC9wPjxwPlRvIGNyZWF0ZQotYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudAotYW5kIGNsaWNrIDxiPlNldCBNZXNzYWdlID4gTmV3IE1lc3NhZ2UuPC9iPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBpbiB0aGUgPHVpY29udHJvbD5HZW5lcmFsPC91aWNvbnRyb2w+IHBhbmUKLW9mIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9jbWQ+PGluZm8+VGhpcyBuYW1lIHNob3VsZCBiZSBhIHVuaXF1ZSBhbW9uZ3N0IGFsbAotbWVzc2FnZXMgZGVmaW5lZCB3aXRoaW4gdGhlIGVuY2xvc2luZyBXU0RMIGRvY3VtZW50LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBuZXcgbWVzc2FnZSB3aWxsIGFwcGVhciBpbiB0aGUgRGVzaWduIHZpZXcgd2l0aGluIHRoZSBwb3J0Ci10eXBlLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cG9zdHJlcT48cD4gPGI+Tm90ZTwvYj46IE1lc3NhZ2VzIGFyZSByZWZlcmVuY2VkIHdpdGhpbiBhIHBvcnQgdHlwZSAoc3BlY2lmaWNhbGx5Ci1ieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBvYmplY3RzKS4gVGhlIGlucHV0LCBvdXRwdXQgYW5kCi1mYXVsdCBvYmplY3RzIHdpdGhpbiBhIGJpbmRpbmcgZG8gbm90IHJlZmVyZW5jZSBtZXNzYWdlcy4gSGVuY2UgeW91IGNhbm5vdAotY3JlYXRlIGEgbmV3IG1lc3NhZ2UgYnkgcmlnaHQgY2xpY2tpbmcgb24gYSBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCB3aXRoaW4KLWEgYmluZGluZyAodGhlc2UgYXJlIGFsc28ga25vd24gYXMgYmluZGluZyBpbnB1dCwgYmluZGluZyBvdXRwdXQgYW5kIGJpbmRpbmcKLWZhdWx0cykuPC9wPjxub3RlIHR5cGU9InRpcCI+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LAotb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFVuZGVyIHRoZSAgPGI+UG9ydCBUeXBlczwvYj4gZm9sZGVyLAotcmlnaHQtY2xpY2sgeW91ciBlbGVtZW50IGFuZCBjbGljayA8Yj5TZXQgTWVzc2FnZSA+IEFkZCBNZXNzYWdlPC9iPi4gWW91cgotbWVzc2FnZSB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSB2aWV3IHVuZGVyIHRoZSA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyLjwvbm90ZT48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9InJldXNpbmdhbWVzc2FnZSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5SZXVzaW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlRvIHJldXNlIGEgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50LCBjb21wbGV0ZQotdGhlIGZvbGxvd2luZyBzdGVwczo8L3ByZXJlcT4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQKLWFuZCBjbGljayAgPGI+U2V0IE1lc3NhZ2UgPiBFeGlzdGluZyBNZXNzYWdlLjwvYj48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcgdG8gZmlsdGVyIHRoZSBsaXN0Ci1vciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGw8L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdSBjYW4gY2hhbmdlIHRoZSBzY29wZSBvZiB0aGUgbGlzdCBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6PC9jbWQ+PGluZm8+PHVsPgotPGxpPjxiPldvcmtzcGFjZTwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLTxsaT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci08bGk+PGI+Q3VycmVudCBSZXNvdXJjZTwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50Ci1maWxlLjwvbGk+Ci08bGk+PGI+V29ya2luZyBTZXRzPC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBzZXQgb2YKLWZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VGhlIGV4aXN0aW5nIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayAgPGI+T0s8L2I+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxwb3N0cmVxPjwvcG9zdHJlcT4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iaW1wb3J0aW5nYW1lc3NhZ2UiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+SW1wb3J0aW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08cHJlcmVxPklmIHlvdSB3YW50IHRvIGltcG9ydCBhbiBleGlzdGluZyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsCi1vciBmYXVsdCBlbGVtZW50LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9wcmVyZXE+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxiPlNldCBNZXNzYWdlID4gRXhpc3RpbmcgTWVzc2FnZS48L2I+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBpbXBvcnQgYSBtZXNzYWdlIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvY21kPgotPGluZm8+PHVsPgotPGxpPjxiPldvcmtzcGFjZTwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLTxsaT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci08bGk+PGI+V29ya2luZyBTZXRzPC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBzZXQgb2YKLWZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VGhlIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPHBvc3RyZXE+WW91IGNhbiBub3cgYWRkIHBhcnRzIHRvIHlvdXIgbWVzc2FnZS4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtCi1mb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCi1zZWUgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSIuLi90YXNrcy90YWRkcGFydC5kaXRhIiBzY29wZT0icGVlciI+QWRkaW5nCi1hIHBhcnQgdG8gYSBtZXNzYWdlPC94cmVmPi48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjU2MmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkFkZGluZyBhIG1lc3NhZ2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iTWVzc2FnZXMgcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24gd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgZWxlbWVudHMgKHdpdGhpbiBhIHBvcnQgdHlwZSkuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik1lc3NhZ2VzIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLiBBIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uIHdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLiBXU0RMIG1lc3NhZ2VzIGFyZSB0b3AgbGV2ZWwgb2JqZWN0cyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IGVsZW1lbnRzICh3aXRoaW4gYSBwb3J0IHR5cGUpLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgbWVzc2FnZXMsIFdTREwsIG1lc3NhZ2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlcywgV1NETCwgbWVzc2FnZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImFkZGluZ2FtZXNzYWdlIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iYWRkaW5nYW1lc3NhZ2UiPjxhIG5hbWU9ImFkZGluZ2FtZXNzYWdlIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5BZGRpbmcgYSBtZXNzYWdlPC9oMT4KLQotCi0KLTxkaXY+PHA+TWVzc2FnZXMgcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuCi1BIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uCi13aXRoaW4gc29tZSB0eXBlIHN5c3RlbS4gV1NETCBtZXNzYWdlcyBhcmUgdG9wIGxldmVsIG9iamVjdHMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZAotYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgZWxlbWVudHMgKHdpdGhpbiBhIHBvcnQgdHlwZSkuPC9wPgotCi08ZGl2IGNsYXNzPSJwIiAvPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Zb3UgY2FuIGNyZWF0ZSBhIG1lc3NhZ2UgdXNpbmcgdGhlIE91dGxpbmUgdmlldyBieSByaWdodC1jbGlja2luZwotdGhlIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyIGFuZCBjbGlja2luZyA8c3Ryb25nPkFkZCBNZXNzYWdlPC9zdHJvbmc+LjwvcD4KLTxwPlRvIGNyZWF0ZQotYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudAotYW5kIGNsaWNrIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBOZXcgTWVzc2FnZS48L3N0cm9uZz48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIHRoZSBuYW1lIG9mIHRoZSBtZXNzYWdlIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPiBwYW5lCi1vZiB0aGUgUHJvcGVydGllcyB2aWV3Ljwvc3Bhbj4gVGhpcyBuYW1lIHNob3VsZCBiZSBhIHVuaXF1ZSBhbW9uZ3N0IGFsbAotbWVzc2FnZXMgZGVmaW5lZCB3aXRoaW4gdGhlIGVuY2xvc2luZyBXU0RMIGRvY3VtZW50LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VGhlIG5ldyBtZXNzYWdlIHdpbGwgYXBwZWFyIGluIHRoZSBEZXNpZ24gdmlldyB3aXRoaW4gdGhlIHBvcnQKLXR5cGUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPk5vdGU8L3N0cm9uZz46IE1lc3NhZ2VzIGFyZSByZWZlcmVuY2VkIHdpdGhpbiBhIHBvcnQgdHlwZSAoc3BlY2lmaWNhbGx5Ci1ieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBvYmplY3RzKS4gVGhlIGlucHV0LCBvdXRwdXQgYW5kCi1mYXVsdCBvYmplY3RzIHdpdGhpbiBhIGJpbmRpbmcgZG8gbm90IHJlZmVyZW5jZSBtZXNzYWdlcy4gSGVuY2UgeW91IGNhbm5vdAotY3JlYXRlIGEgbmV3IG1lc3NhZ2UgYnkgcmlnaHQgY2xpY2tpbmcgb24gYSBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCB3aXRoaW4KLWEgYmluZGluZyAodGhlc2UgYXJlIGFsc28ga25vd24gYXMgYmluZGluZyBpbnB1dCwgYmluZGluZyBvdXRwdXQgYW5kIGJpbmRpbmcKLWZhdWx0cykuPC9wPgotPGRpdiBjbGFzcz0idGlwIj48c3BhbiBjbGFzcz0idGlwdGl0bGUiPlRpcDo8L3NwYW4+IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwKLW91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBVbmRlciB0aGUgIDxzdHJvbmc+UG9ydCBUeXBlczwvc3Ryb25nPiBmb2xkZXIsCi1yaWdodC1jbGljayB5b3VyIGVsZW1lbnQgYW5kIGNsaWNrIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBBZGQgTWVzc2FnZTwvc3Ryb25nPi4gWW91cgotbWVzc2FnZSB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSB2aWV3IHVuZGVyIHRoZSA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+IGZvbGRlci48L2Rpdj4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0icmV1c2luZ2FtZXNzYWdlIj48YSBuYW1lPSJyZXVzaW5nYW1lc3NhZ2UiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UmV1c2luZyBhIG1lc3NhZ2U8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0icCI+VG8gcmV1c2UgYSBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQsIGNvbXBsZXRlCi10aGUgZm9sbG93aW5nIHN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBFeGlzdGluZyBNZXNzYWdlLjwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L3NwYW4+IDx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+Q3VycmVudCBSZXNvdXJjZTwvc3Ryb25nPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQKLWZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+V29ya2luZyBTZXRzPC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldCBvZgotZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRoZSBleGlzdGluZyBtZXNzYWdlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiIgLz4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJpbXBvcnRpbmdhbWVzc2FnZSI+PGEgbmFtZT0iaW1wb3J0aW5nYW1lc3NhZ2UiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0aW5nIGEgbWVzc2FnZTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJwIj5JZiB5b3Ugd2FudCB0byBpbXBvcnQgYW4gZXhpc3RpbmcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwgb3V0cHV0LAotb3IgZmF1bHQgZWxlbWVudCwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBFeGlzdGluZyBNZXNzYWdlLjwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPllvdSBjYW4gaW1wb3J0IGEgbWVzc2FnZSBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L3NwYW4+Ci0gPHVsPgotPGxpPjxzdHJvbmc+V29ya3NwYWNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkVuY2xvc2luZyBQcm9qZWN0PC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0IG9mCi1maWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VGhlIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPllvdSBjYW4gbm93IGFkZCBwYXJ0cyB0byB5b3VyIG1lc3NhZ2UuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbQotZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLAotc2VlIDxhIGhyZWY9Ii4uL3Rhc2tzL3RhZGRwYXJ0LmRpdGEiPkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlPC9hPi48L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmRiOWFjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkb3BlciIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYW4gb3BlcmF0aW9uPC90aXRsZT4KLTxzaG9ydGRlc2M+QW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMKLWFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQKLWRlc2NyaWJlcyBhbnkgZXJyb3IgZGF0YSB0aGUgb3BlcmF0aW9uIG1heSByZXR1cm4uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIFdTREwgb3BlcmF0aW9uczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5vcGVyYXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD5Vc2luZyB0aGVzZSwgeW91IGNhbiBkZWNsYXJlIGZvdXIgdHJhbnNtaXNzaW9uIHByaW1pdGl2ZXMgdGhhdCBhbgotZW5kcG9pbnQgY2FuIHN1cHBvcnQ6PHVsPgotPGxpPiA8Yj5PbmUtd2F5PC9iPjogdGhlIGVuZHBvaW50IHJlY2VpdmVzIGEgbWVzc2FnZS48L2xpPgotPGxpPiA8Yj5SZXF1ZXN0LXJlc3BvbnNlPC9iPjogdGhlIGVuZHBvaW50IHJlY2VpdmVzIGEgbWVzc2FnZSwgYW5kIHNlbmRzIGEKLWNvcnJlbGF0ZWQgbWVzc2FnZS48L2xpPgotPGxpPiA8Yj5Tb2xpY2l0LXJlc3BvbnNlPC9iPjogdGhlIGVuZHBvaW50IHNlbmRzIGEgbWVzc2FnZSwgYW5kIHJlY2VpdmVzIGEKLWNvcnJlbGF0ZWQgbWVzc2FnZS48L2xpPgotPGxpPiA8Yj5Ob3RpZmljYXRpb248L2I+OiB0aGUgZW5kcG9pbnQgc2VuZHMgYSBtZXNzYWdlLjwvbGk+Ci08L3VsPjxwPllvdSBjYW4gYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSBvciBhIHBvcnQgYmluZGluZy48L3A+PHA+VG8KLWFkZCBhbiBvcGVyYXRpb24gdG8gYSBwb3J0IHR5cGUsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgdHlwZS48L2NtZD48aW5mbz5DbGljayA8Yj5BZGQKLU9wZXJhdGlvbjwvYj4uIFRvIHNlbGVjdCB0aGUgbmV3IG9wZXJhdGlvbiwgY2xpY2sgdGhlIG9wZXJhdGlvbiBpbiB0aGUgcG9ydAotdHlwZSBvYmplY3QuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxiPkdlbmVyYWw8L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+UmlnaHQgY2xpY2sgb24gdGhlIG9wZXJhdGlvbiB0byBhZGQgaW5wdXQsIG91dHB1dCBvciBmYXVsdCBvYmplY3RzLjwvY21kPgotPGluZm8+RGVwZW5kaW5nIG9uIGFuIG9wZXJhdGlvbidzIGlucHV0cyBhbmQgb3V0cHV0cyBpdCBjYW4gYmUgY2xhc3NpZmllZAotYXMgZm9sbG93czo8dWw+Ci08bGk+PGI+T25lIHdheSBvcGVyYXRpb248L2I+OiBpbnB1dCA8L2xpPgotPGxpPjxiPlJlcXVlc3QgcmVzcG9uc2Ugb3BlcmF0aW9uPC9iPjogaW5wdXQsIG91dHB1dCA8L2xpPgotPGxpPjxiPiBTb2xpY2l0IHJlc3BvbnNlIG9wZXJhdGlvbjwvYj46IG91dHB1dCwgaW5wdXQgPC9saT4KLTxsaT48Yj5Ob3RpZmljYXRpb24gb3BlcmF0aW9uPC9iPjogb3V0cHV0PC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wZXJhdGlvbgoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+IDxiPlRpcDwvYj46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgb3BlcmF0aW9uIGZvciB5b3VyIHBvcnQKLXR5cGUgdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gUmlnaHQgY2xpY2sgb24gYSBwb3J0IHR5cGUgaW4gdGhlIDx1aWNvbnRyb2w+UG9ydAotVHlwZTwvdWljb250cm9sPiBmb2xkZXIgYW5kIHNlbGVjdCA8dWljb250cm9sPkFkZCBPcGVyYXRpb248P1B1YiBDYXJldD8+PC91aWNvbnRyb2w+LjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAyNzI3Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBlMGE3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQWRkaW5nIGFuIG9wZXJhdGlvbiIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBbiBvcGVyYXRpb24gbmFtZXMgdGhlIG9wZXJhdGlvbiBhbmQgbGlzdHMgdGhlIGV4cGVjdGVkIGlucHV0cyBhbmQgb3V0cHV0cy4gVGhlIG9wZXJhdGlvbiBlbGVtZW50IG1heSBhbHNvIGNvbnRhaW4gYSBmYXVsdCBzdWItZWxlbWVudCB0aGF0IGRlc2NyaWJlcyBhbnkgZXJyb3IgZGF0YSB0aGUgb3BlcmF0aW9uIG1heSByZXR1cm4uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFuIG9wZXJhdGlvbiBuYW1lcyB0aGUgb3BlcmF0aW9uIGFuZCBsaXN0cyB0aGUgZXhwZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQgZGVzY3JpYmVzIGFueSBlcnJvciBkYXRhIHRoZSBvcGVyYXRpb24gbWF5IHJldHVybi4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIG9wZXJhdGlvbnMsIFdTREwsIG9wZXJhdGlvbnMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIG9wZXJhdGlvbnMsIFdTREwsIG9wZXJhdGlvbnMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGFkZG9wZXIiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5BZGRpbmcgYW4gb3BlcmF0aW9uPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YWRkb3BlciI+PGEgbmFtZT0idGFkZG9wZXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhbiBvcGVyYXRpb248L2gxPgotCi0KLQotPGRpdj48cD5BbiBvcGVyYXRpb24gbmFtZXMgdGhlIG9wZXJhdGlvbiBhbmQgbGlzdHMgdGhlIGV4cGVjdGVkIGlucHV0cwotYW5kIG91dHB1dHMuIFRoZSBvcGVyYXRpb24gZWxlbWVudCBtYXkgYWxzbyBjb250YWluIGEgZmF1bHQgc3ViLWVsZW1lbnQgdGhhdAotZGVzY3JpYmVzIGFueSBlcnJvciBkYXRhIHRoZSBvcGVyYXRpb24gbWF5IHJldHVybi48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlVzaW5nIHRoZXNlLCB5b3UgY2FuIGRlY2xhcmUgZm91ciB0cmFuc21pc3Npb24gcHJpbWl0aXZlcyB0aGF0IGFuCi1lbmRwb2ludCBjYW4gc3VwcG9ydDo8dWw+Ci08bGk+IDxzdHJvbmc+T25lLXdheTwvc3Ryb25nPjogdGhlIGVuZHBvaW50IHJlY2VpdmVzIGEgbWVzc2FnZS48L2xpPgotCi08bGk+IDxzdHJvbmc+UmVxdWVzdC1yZXNwb25zZTwvc3Ryb25nPjogdGhlIGVuZHBvaW50IHJlY2VpdmVzIGEgbWVzc2FnZSwgYW5kIHNlbmRzIGEKLWNvcnJlbGF0ZWQgbWVzc2FnZS48L2xpPgotCi08bGk+IDxzdHJvbmc+U29saWNpdC1yZXNwb25zZTwvc3Ryb25nPjogdGhlIGVuZHBvaW50IHNlbmRzIGEgbWVzc2FnZSwgYW5kIHJlY2VpdmVzIGEKLWNvcnJlbGF0ZWQgbWVzc2FnZS48L2xpPgotCi08bGk+IDxzdHJvbmc+Tm90aWZpY2F0aW9uPC9zdHJvbmc+OiB0aGUgZW5kcG9pbnQgc2VuZHMgYSBtZXNzYWdlLjwvbGk+Ci0KLTwvdWw+Ci08cD5Zb3UgY2FuIGFkZCBhbiBvcGVyYXRpb24gdG8gYSBwb3J0IHR5cGUgb3IgYSBwb3J0IGJpbmRpbmcuPC9wPgotPHA+VG8KLWFkZCBhbiBvcGVyYXRpb24gdG8gYSBwb3J0IHR5cGUsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgdHlwZS48L3NwYW4+IENsaWNrIDxzdHJvbmc+QWRkCi1PcGVyYXRpb248L3N0cm9uZz4uIFRvIHNlbGVjdCB0aGUgbmV3IG9wZXJhdGlvbiwgY2xpY2sgdGhlIG9wZXJhdGlvbiBpbiB0aGUgcG9ydAotdHlwZSBvYmplY3QuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+UmlnaHQgY2xpY2sgb24gdGhlIG9wZXJhdGlvbiB0byBhZGQgaW5wdXQsIG91dHB1dCBvciBmYXVsdCBvYmplY3RzLjwvc3Bhbj4KLSBEZXBlbmRpbmcgb24gYW4gb3BlcmF0aW9uJ3MgaW5wdXRzIGFuZCBvdXRwdXRzIGl0IGNhbiBiZSBjbGFzc2lmaWVkCi1hcyBmb2xsb3dzOjx1bD4KLTxsaT48c3Ryb25nPk9uZSB3YXkgb3BlcmF0aW9uPC9zdHJvbmc+OiBpbnB1dCA8L2xpPgotCi08bGk+PHN0cm9uZz5SZXF1ZXN0IHJlc3BvbnNlIG9wZXJhdGlvbjwvc3Ryb25nPjogaW5wdXQsIG91dHB1dCA8L2xpPgotCi08bGk+PHN0cm9uZz4gU29saWNpdCByZXNwb25zZSBvcGVyYXRpb248L3N0cm9uZz46IG91dHB1dCwgaW5wdXQgPC9saT4KLQotPGxpPjxzdHJvbmc+Tm90aWZpY2F0aW9uIG9wZXJhdGlvbjwvc3Ryb25nPjogb3V0cHV0PC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wZXJhdGlvbgoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHN0cm9uZz5UaXA8L3N0cm9uZz46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgb3BlcmF0aW9uIGZvciB5b3VyIHBvcnQKLXR5cGUgdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gUmlnaHQgY2xpY2sgb24gYSBwb3J0IHR5cGUgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnQKLVR5cGU8L3NwYW4+IGZvbGRlciBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZCBPcGVyYXRpb248L3NwYW4+LjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1NGUwMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGFkZHBhcnQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2U8L3RpdGxlPgotPHNob3J0ZGVzYz5BbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtCi1mb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gVGhlIG1lc3NhZ2UgZGVmaW5pdGlvbgotYXNzb2NpYXRlcyBlYWNoIHBhcnQgd2l0aCBhIHR5cGUgdXNpbmcgYSBtZXNzYWdlLXR5cGluZyBhdHRyaWJ1dGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIFdTREwgbWVzc2FnZSBwYXJ0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5tZXNzYWdlIHBhcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBhZGQgYSBwYXJ0IHRvIGEgbWVzc2FnZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgYW4gaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgb2JqZWN0IGFuZAotY2xpY2sgPGI+QWRkIFBhcnQ8L2I+LjwvY21kPjxzdGVwcmVzdWx0PlRoZSBwYXJ0IGlzIGFkZGVkIHRvIHRoZSBpbnB1dCwgb3V0cHV0LAotb3IgZmF1bHQncyBtZXNzYWdlIHJlZmVyZW5jZS4gVG8gc2VsZWN0IHRoZSBwYXJ0LCBjbGljayB0aGUgcGFydCBpbiB0aGUgcG9ydAotdHlwZSBvYmplY3QuPC9zdGVwcmVzdWx0Pjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxiPkdlbmVyYWw8L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIHBhcnQuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Zb3VyIHBhcnQgY2FuIHJlZmVyIHRvIGVpdGhlciBhIDxiPlR5cGU8L2I+IG9yIGFuIDxiPkVsZW1lbnQ8L2I+LjwvY21kPgotPGluZm8+U2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gYXMgdGhlIDxiPlJlZmVyZW5jZSBLaW5kPC9iPiAuPC9pbmZvPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JZiB5b3Ugc2VsZWN0ZWQgPGI+VHlwZTwvYj4sIHlvdSBub3cgaGF2ZSB0aGUgb3B0aW9uIG9mIHNlbGVjdGluZwotYW4gWE1MIHNjaGVtYSBkYXRhIHR5cGUgZnJvbSB0aGUgPGI+VHlwZTwvYj4gZHJvcCBkb3duIGxpc3QuPC9jbWQ+PGluZm8+VGhlCi1saXN0IG9mIHR5cGVzIGNvbWVzIGZyb20gYW55IGF2YWlsYWJsZSByZWZlcmVuY2VkIFhNTCBzY2hlbWFzLjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBzZWxlY3RlZCA8Yj5FbGVtZW50PC9iPiAsIHlvdSBub3cgaGF2ZSB0aGUgb3B0aW9uIG9mIHNlbGVjdGluZwotYW4gWE1MIHNjaGVtYSBlbGVtZW50IGZyb20gdGhlICA8Yj5FbGVtZW50PC9iPiBkcm9wIGRvd24gbGlzdC48L2NtZD48aW5mbz5UaGUKLWxpc3Qgb2YgZWxlbWVudHMgY29tZXMgZnJvbSBhbnkgYXZhaWxhYmxlIHJlZmVyZW5jZWQgWE1MIHNjaGVtYXMuPC9pbmZvPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0Pjxub3RlIHR5cGU9InRpcCI+IDw/UHViIENhcmV0Pz5Zb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IHBhcnQgZm9yCi15b3VyIG1lc3NhZ2UgdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gVW5kZXIgdGhlICA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyLCByaWdodC1jbGljawoteW91ciBlbGVtZW50IGFuZCBjbGljayA8Yj5BZGQgUGFydDwvYj4uIFlvdXIgcGFydCB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwZWFyCi1pbiB0aGUgT3V0bGluZSB2aWV3ICh1bmRlciB0aGUgPGI+TWVzc2FnZXM8L2I+IGZvbGRlciksIGJ1dCBpdCB3aWxsIG9ubHkgYXBwZWFyCi1pbiB0aGUgRGVzaWduIHZpZXcgaWYgdGhlIG1lc3NhZ2UgeW91IGFkZGVkIGl0IHRvIGN1cnJlbnRseSBkb2VzLjwvbm90ZT48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAyNTc4Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3ZWQ5OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uIGFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uIGFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgbWVzc2FnZSBwYXJ0cywgV1NETCwgbWVzc2FnZSBwYXJ0cyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgbWVzc2FnZSBwYXJ0cywgV1NETCwgbWVzc2FnZSBwYXJ0cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkcGFydCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YWRkcGFydCI+PGEgbmFtZT0idGFkZHBhcnQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlPC9oMT4KLQotCi0KLTxkaXY+PHA+QWxsIG1lc3NhZ2VzIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFydHMuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbQotZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIGRlZmluaXRpb24KLWFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gYWRkIGEgcGFydCB0byBhIG1lc3NhZ2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIGFuIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IG9iamVjdCBhbmQKLWNsaWNrIDxzdHJvbmc+QWRkIFBhcnQ8L3N0cm9uZz4uPC9zcGFuPiBUaGUgcGFydCBpcyBhZGRlZCB0byB0aGUgaW5wdXQsIG91dHB1dCwKLW9yIGZhdWx0J3MgbWVzc2FnZSByZWZlcmVuY2UuIFRvIHNlbGVjdCB0aGUgcGFydCwgY2xpY2sgdGhlIHBhcnQgaW4gdGhlIHBvcnQKLXR5cGUgb2JqZWN0LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxzdHJvbmc+R2VuZXJhbDwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIHBhcnQuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+WW91ciBwYXJ0IGNhbiByZWZlciB0byBlaXRoZXIgYSA8c3Ryb25nPlR5cGU8L3N0cm9uZz4gb3IgYW4gPHN0cm9uZz5FbGVtZW50PC9zdHJvbmc+Ljwvc3Bhbj4KLSBTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBhcyB0aGUgPHN0cm9uZz5SZWZlcmVuY2UgS2luZDwvc3Ryb25nPiAuCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPklmIHlvdSBzZWxlY3RlZCA8c3Ryb25nPlR5cGU8L3N0cm9uZz4sIHlvdSBub3cgaGF2ZSB0aGUgb3B0aW9uIG9mIHNlbGVjdGluZwotYW4gWE1MIHNjaGVtYSBkYXRhIHR5cGUgZnJvbSB0aGUgPHN0cm9uZz5UeXBlPC9zdHJvbmc+IGRyb3AgZG93biBsaXN0Ljwvc3Bhbj4gVGhlCi1saXN0IG9mIHR5cGVzIGNvbWVzIGZyb20gYW55IGF2YWlsYWJsZSByZWZlcmVuY2VkIFhNTCBzY2hlbWFzLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SWYgeW91IHNlbGVjdGVkIDxzdHJvbmc+RWxlbWVudDwvc3Ryb25nPiAsIHlvdSBub3cgaGF2ZSB0aGUgb3B0aW9uIG9mIHNlbGVjdGluZwotYW4gWE1MIHNjaGVtYSBlbGVtZW50IGZyb20gdGhlICA8c3Ryb25nPkVsZW1lbnQ8L3N0cm9uZz4gZHJvcCBkb3duIGxpc3QuPC9zcGFuPiBUaGUKLWxpc3Qgb2YgZWxlbWVudHMgY29tZXMgZnJvbSBhbnkgYXZhaWxhYmxlIHJlZmVyZW5jZWQgWE1MIHNjaGVtYXMuPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGRpdiBjbGFzcz0idGlwIj48c3BhbiBjbGFzcz0idGlwdGl0bGUiPlRpcDo8L3NwYW4+ICBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IHBhcnQgZm9yCi15b3VyIG1lc3NhZ2UgdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gVW5kZXIgdGhlICA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+IGZvbGRlciwgcmlnaHQtY2xpY2sKLXlvdXIgZWxlbWVudCBhbmQgY2xpY2sgPHN0cm9uZz5BZGQgUGFydDwvc3Ryb25nPi4gWW91ciBwYXJ0IHdpbGwgYXV0b21hdGljYWxseSBhcHBlYXIKLWluIHRoZSBPdXRsaW5lIHZpZXcgKHVuZGVyIHRoZSA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+IGZvbGRlciksIGJ1dCBpdCB3aWxsIG9ubHkgYXBwZWFyCi1pbiB0aGUgRGVzaWduIHZpZXcgaWYgdGhlIG1lc3NhZ2UgeW91IGFkZGVkIGl0IHRvIGN1cnJlbnRseSBkb2VzLjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzM3Y2Y1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkcG9ydCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzCi1mb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZwotYW5kIGFuIGFkZHJlc3MgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGVuZHBvaW50Ljwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIHBvcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPnBvcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5TZXJ2aWNlcyBhcmUgdXNlZCB0byBncm91cCBzZXRzIG9mIHJlbGF0ZWQgcG9ydHMgdG9nZXRoZXIuIFBvcnRzCi13aXRoaW4gYSBzZXJ2aWNlIGhhdmUgdGhlIGZvbGxvd2luZyByZWxhdGlvbnNoaXA6PC9wPjx1bD4KLTxsaT5Ob25lIG9mIHRoZSBwb3J0cyBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgKGZvciBleGFtcGxlLCB0aGUgb3V0cHV0Ci1vZiBvbmUgcG9ydCBpcyBub3QgdGhlIGlucHV0IG9mIGFub3RoZXIpLjwvbGk+Ci08bGk+SWYgYSBzZXJ2aWNlIGhhcyBzZXZlcmFsIHBvcnRzIHRoYXQgc2hhcmUgYSBwb3J0IHR5cGUsIGJ1dCBlbXBsb3kgZGlmZmVyZW50Ci1iaW5kaW5ncyBvciBhZGRyZXNzZXMsIHRoZSBwb3J0cyBhcmUgYWx0ZXJuYXRpdmVzLiBFYWNoIHBvcnQgcHJvdmlkZXMgc2VtYW50aWNhbGx5Ci1lcXVpdmFsZW50IGJlaGF2aW9yICh3aXRoaW4gdGhlIHRyYW5zcG9ydCBhbmQgbWVzc2FnZSBmb3JtYXQgbGltaXRhdGlvbnMgaW1wb3NlZAotYnkgZWFjaCBiaW5kaW5nKS48L2xpPgotPGxpPllvdSBjYW4gZGV0ZXJtaW5lIGEgc2VydmljZSdzIHBvcnQgdHlwZXMgYnkgZXhhbWluaW5nIGl0cyBwb3J0cy4gVXNpbmcKLXRoaXMgaW5mb3JtYXRpb24sIGEgdXNlciBjYW4gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gbWFjaGluZSBzdXBwb3J0cyBhbGwgdGhlCi1vcGVyYXRpb25zIG5lZWRlZCB0byBjb21wbGV0ZSBhIGdpdmVuIHRhc2suPC9saT4KLTwvdWw+PHA+VG8gYWRkIGEgcG9ydCB0byBhIHNlcnZpY2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB0aGUgc2VydmljZSB5b3Ugd2FudCB0byBhZGQgYSBwb3J0Ci10bywgdGhlbiBjbGljayA8Yj5BZGQgUG9ydC48L2I+IDwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RmlsbCBpbiB0aGUgPGI+TmFtZTwvYj4gZm9yIHRoZSBwb3J0LjwvY21kPjxpbmZvPlRoZSBuYW1lIG9mIHRoZQotcG9ydCBzaG91bGQgcHJvdmlkZSBpdCB3aXRoIGEgdW5pcXVlIG5hbWUgYW1vbmdzdCBhbGwgdGhlIHBvcnRzIGRlZmluZWQgd2l0aGluCi10aGUgc2VydmljZS48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgYSA8Yj5CaW5kaW5nPC9iPiBhbmQgPHVpY29udHJvbD5Qcm90b2NvbDwvdWljb250cm9sPiBmb3IKLXRoZSBwb3J0LCBhbmQgZW50ZXIgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvcnQgaW50byB0aGUgPHVpY29udHJvbD5BZGRyZXNzPC91aWNvbnRyb2w+IGZpZWxkLgotQ2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PGluZm8+VG8gc2VsZWN0IHRoZSBuZXcgcG9ydCwgY2xpY2sKLXRoZSBwb3J0IGluIHRoZSBzZXJ2aWNlIG9iamVjdC4gWW91IGNhbiBjaGFuZ2UgdGhlIGluZm9ybWF0aW9uIHlvdSBlbnRlcmVkCi1hYm91dCB0aGlzIHBvcnQgYW55IHRpbWUgaW4gdGhlIDx1aWNvbnRyb2w+R2VuZXJhbDwvdWljb250cm9sPiBwYW5lLjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZCBpbgotdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUgb2YgdGhlIFByb3BlcnRpZXMgdmllPD9QdWIgQ2FyZXQ/PncuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBtYW5hZ2UgZXh0ZW5zaW9ucywgY2xpY2sgdGhlIDxiPkV4dGVuc2lvbnM8L2I+IHBhbmUuIFlvdSBjYW4KLWVpdGhlciBhZGQsIHNvcnQsIG9yIHJlbW92ZSBleHRlbnNpb25zLiA8ZHJhZnQtY29tbWVudD5SZWZlciB0byB0aGUgcmVsYXRlZAotdGFza3MgZm9yIG1vcmUgZGV0YWlscy4gQWRkIGxpbmsgdG8gWFNEIEVkaXRvciBpbiByZWxhdGVkIHRhc2tzIHNlY3Rpb24uPC9kcmFmdC1jb21tZW50PjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+WW91IGNhbiBjcmVhdGUgYSBuZXcgYmluZGluZyBmb3IgeW91ciBwb3J0LCByZS11c2UgYW4gZXhpc3RpbmcKLW9uZSwgb3IgaW1wb3J0IG9uZS4gQSA8Yj5CaW5kaW5nPC9iPiBkZWZpbmVzIHRoZSBtZXNzYWdlIGZvcm1hdCBhbmQgcHJvdG9jb2wKLWRldGFpbHMgZm9yIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS4gRm9yCi1tb3JlIGluZm9ybWF0aW9uLCBzZWUgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSIuLi90YXNrcy90c2V0YmluZC5kaXRhIiBzY29wZT0icGVlciI+U2V0dGluZwotYSBiaW5kaW5nPC94cmVmPiAuPC9wPjxwPllvdSBjYW4gYWxzbyBjcmVhdGUgYSBwb3J0IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcKLWJ5IHJpZ2h0LWNsaWNraW5nIHlvdXIgc2VydmljZSB1bmRlciB0aGUgPGI+U2VydmljZXM8L2I+IGZvbGRlciBhbmQgY2xpY2tpbmcgPGI+QWRkCi1Qb3J0PC9iPi4gWW91ciBwb3J0IChyZWdhcmRsZXNzIG9mIHdoaWNoIHZpZXcgeW91IGNyZWF0ZSBpdCBpbikgd2lsbCBhcHBlYXIKLWluIGJvdGggdGhlIERlc2lnbiB2aWV3IGFuZCB0aGUgT3V0bGluZSB2aWV3LjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAzNTYyPz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUxNDExMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwb3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBwb3J0IGRlZmluZXMgYW4gaW5kaXZpZHVhbCBlbmRwb2ludCBieSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGFkZHJlc3MgZm9yIGEgYmluZGluZy4gVGhlIHBvcnQgY29udGFpbnMgYSAnYmluZGluZycgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcyBhIGJpbmRpbmcgYW5kIGFuIGFkZHJlc3MgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGVuZHBvaW50LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZyBhbmQgYW4gYWRkcmVzcyBlbGVtZW50IHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZW5kcG9pbnQuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBwb3J0cywgV1NETCwgcG9ydHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIHBvcnRzLCBXU0RMLCBwb3J0cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkcG9ydCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YWRkcG9ydCI+PGEgbmFtZT0idGFkZHBvcnQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlPC9oMT4KLQotCi0KLTxkaXY+PHA+QSBwb3J0IGRlZmluZXMgYW4gaW5kaXZpZHVhbCBlbmRwb2ludCBieSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGFkZHJlc3MKLWZvciBhIGJpbmRpbmcuIFRoZSBwb3J0IGNvbnRhaW5zIGEgJ2JpbmRpbmcnIGF0dHJpYnV0ZSB0aGF0IHJlZmVyZW5jZXMgYSBiaW5kaW5nCi1hbmQgYW4gYWRkcmVzcyBlbGVtZW50IHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZW5kcG9pbnQuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5TZXJ2aWNlcyBhcmUgdXNlZCB0byBncm91cCBzZXRzIG9mIHJlbGF0ZWQgcG9ydHMgdG9nZXRoZXIuIFBvcnRzCi13aXRoaW4gYSBzZXJ2aWNlIGhhdmUgdGhlIGZvbGxvd2luZyByZWxhdGlvbnNoaXA6PC9wPgotPHVsPgotPGxpPk5vbmUgb2YgdGhlIHBvcnRzIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciAoZm9yIGV4YW1wbGUsIHRoZSBvdXRwdXQKLW9mIG9uZSBwb3J0IGlzIG5vdCB0aGUgaW5wdXQgb2YgYW5vdGhlcikuPC9saT4KLQotPGxpPklmIGEgc2VydmljZSBoYXMgc2V2ZXJhbCBwb3J0cyB0aGF0IHNoYXJlIGEgcG9ydCB0eXBlLCBidXQgZW1wbG95IGRpZmZlcmVudAotYmluZGluZ3Mgb3IgYWRkcmVzc2VzLCB0aGUgcG9ydHMgYXJlIGFsdGVybmF0aXZlcy4gRWFjaCBwb3J0IHByb3ZpZGVzIHNlbWFudGljYWxseQotZXF1aXZhbGVudCBiZWhhdmlvciAod2l0aGluIHRoZSB0cmFuc3BvcnQgYW5kIG1lc3NhZ2UgZm9ybWF0IGxpbWl0YXRpb25zIGltcG9zZWQKLWJ5IGVhY2ggYmluZGluZykuPC9saT4KLQotPGxpPllvdSBjYW4gZGV0ZXJtaW5lIGEgc2VydmljZSdzIHBvcnQgdHlwZXMgYnkgZXhhbWluaW5nIGl0cyBwb3J0cy4gVXNpbmcKLXRoaXMgaW5mb3JtYXRpb24sIGEgdXNlciBjYW4gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gbWFjaGluZSBzdXBwb3J0cyBhbGwgdGhlCi1vcGVyYXRpb25zIG5lZWRlZCB0byBjb21wbGV0ZSBhIGdpdmVuIHRhc2suPC9saT4KLQotPC91bD4KLTxwPlRvIGFkZCBhIHBvcnQgdG8gYSBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgdGhlIHNlcnZpY2UgeW91IHdhbnQgdG8gYWRkIGEgcG9ydAotdG8sIHRoZW4gY2xpY2sgPHN0cm9uZz5BZGQgUG9ydC48L3N0cm9uZz4gPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RmlsbCBpbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZvciB0aGUgcG9ydC48L3NwYW4+IFRoZSBuYW1lIG9mIHRoZQotcG9ydCBzaG91bGQgcHJvdmlkZSBpdCB3aXRoIGEgdW5pcXVlIG5hbWUgYW1vbmdzdCBhbGwgdGhlIHBvcnRzIGRlZmluZWQgd2l0aGluCi10aGUgc2VydmljZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCBhIDxzdHJvbmc+QmluZGluZzwvc3Ryb25nPiBhbmQgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvdG9jb2w8L3NwYW4+IGZvcgotdGhlIHBvcnQsIGFuZCBlbnRlciB0aGUgYWRkcmVzcyBvZiB0aGUgcG9ydCBpbnRvIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGRyZXNzPC9zcGFuPiBmaWVsZC4KLUNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9zcGFuPiBUbyBzZWxlY3QgdGhlIG5ldyBwb3J0LCBjbGljawotdGhlIHBvcnQgaW4gdGhlIHNlcnZpY2Ugb2JqZWN0LiBZb3UgY2FuIGNoYW5nZSB0aGUgaW5mb3JtYXRpb24geW91IGVudGVyZWQKLWFib3V0IHRoaXMgcG9ydCBhbnkgdGltZSBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhbDwvc3Bhbj4gcGFuZS4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZCBpbgotdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lIG9mIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VG8gbWFuYWdlIGV4dGVuc2lvbnMsIGNsaWNrIHRoZSA8c3Ryb25nPkV4dGVuc2lvbnM8L3N0cm9uZz4gcGFuZS4gWW91IGNhbgotZWl0aGVyIGFkZCwgc29ydCwgb3IgcmVtb3ZlIGV4dGVuc2lvbnMuIDwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgbmV3IGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgcmUtdXNlIGFuIGV4aXN0aW5nCi1vbmUsIG9yIGltcG9ydCBvbmUuIEEgPHN0cm9uZz5CaW5kaW5nPC9zdHJvbmc+IGRlZmluZXMgdGhlIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbAotZGV0YWlscyBmb3Igb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBGb3IKLW1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSIuLi90YXNrcy90c2V0YmluZC5kaXRhIj5TZXR0aW5nIGEgYmluZGluZzwvYT4gLjwvcD4KLTxwPllvdSBjYW4gYWxzbyBjcmVhdGUgYSBwb3J0IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcKLWJ5IHJpZ2h0LWNsaWNraW5nIHlvdXIgc2VydmljZSB1bmRlciB0aGUgPHN0cm9uZz5TZXJ2aWNlczwvc3Ryb25nPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxzdHJvbmc+QWRkCi1Qb3J0PC9zdHJvbmc+LiBZb3VyIHBvcnQgKHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmlldyB5b3UgY3JlYXRlIGl0IGluKSB3aWxsIGFwcGVhcgotaW4gYm90aCB0aGUgRGVzaWduIHZpZXcgYW5kIHRoZSBPdXRsaW5lIHZpZXcuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmM5YWY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkc3J2YyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBzZXJ2aWNlPC90aXRsZT4KLTxzaG9ydGRlc2M+VGhlICA8c3lzdGVtb3V0cHV0PnNlcnZpY2U8L3N5c3RlbW91dHB1dD4gZWxlbWVudCBpcyBhIGNvbGxlY3Rpb24KLW9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIHNlcnZpY2VzIHRvIFdTREw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+c2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhIG5ldyBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgaW4gYW55IGJsYW5rIHNwYWNlIGFuZCBjbGljayA8Yj5BZGQKLVNlcnZpY2U8L2I+LiBUbyBzZWxlY3QgdGhlIG5ldyBzZXJ2aWNlLCBjbGljayB0aGUgc2VydmljZSBvYmplY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS4gSW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLAotdHlwZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZS48L2NtZD48aW5mbz5UaGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm92aWRlcwotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBzZXJ2aWNlcyBkZWZpbmVkIHdpdGhpbiBpbiB0aGUgZW5jbG9zaW5nCi1XU0RMIGRvY3VtZW50LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gbWFuYWdlIGV4dGVuc2lvbnMsIGNsaWNrIHRoZSA8Yj5FeHRlbnNpb25zPD9QdWIgQ2FyZXQ/PjwvYj4gcGFuZS4KLVlvdSBjYW4gZWl0aGVyIGFkZCwgc29ydCwgb3IgcmVtb3ZlIGV4dGVuc2lvbnMuPGRyYWZ0LWNvbW1lbnQ+IFJlZmVyIHRvIHRoZQotcmVsYXRlZCB0YXNrcyBmb3IgbW9yZSBkZXRhaWxzLiBBZGQgbGluayB0byB0aGUgWFNEIEVkaXRvciBwbHVnaW4gdG9waWMgZm9yCi0iQWRkaW5nIGV4dGVuc2lvbiBjb21wb25lbnRzIjwvZHJhZnQtY29tbWVudD48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD4gPGI+VGlwPC9iPjogWW91IGNhbiBhbHNvIGNyZWF0ZSBhIHNlcnZpY2UgdXNpbmcgdGhlIE91dGxpbmUgdmlldwotYnkgcmlnaHQtY2xpY2tpbmcgdGhlIDxiPlNlcnZpY2VzPC9iPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxiPkFkZCBTZXJ2aWNlPC9iPi48L3A+PHA+WW91Ci1jYW4gbm93IGFkZCBhIHBvcnQgdG8geW91ciBzZXJ2aWNlLiBBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50Ci1ieSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGFkZHJlc3MgZm9yIGEgYmluZGluZy48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08P1B1YiAqMDAwMDAwMjE1Nj8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YjZmNzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQWRkaW5nIGEgc2VydmljZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgc2VydmljZSBlbGVtZW50IGlzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHBvcnRzIGFuZCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzZXJ2aWNlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgc2VydmljZSBlbGVtZW50IGlzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHBvcnRzIGFuZCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzZXJ2aWNlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIHNlcnZpY2VzIHRvIFdTREwsIFdTREwsIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgc2VydmljZXMgdG8gV1NETCwgV1NETCwgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGFkZHNydmMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5BZGRpbmcgYSBzZXJ2aWNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YWRkc3J2YyI+PGEgbmFtZT0idGFkZHNydmMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIHNlcnZpY2U8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5zZXJ2aWNlPC90dD4gZWxlbWVudCBpcyBhIGNvbGxlY3Rpb24KLW9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBjcmVhdGUgYSBuZXcgc2VydmljZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIGluIGFueSBibGFuayBzcGFjZSBhbmQgY2xpY2sgPHN0cm9uZz5BZGQKLVNlcnZpY2U8L3N0cm9uZz4uIFRvIHNlbGVjdCB0aGUgbmV3IHNlcnZpY2UsIGNsaWNrIHRoZSBzZXJ2aWNlIG9iamVjdC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuIEluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsCi10eXBlIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlLjwvc3Bhbj4gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgcHJvdmlkZXMKLWl0IHdpdGggYSB1bmlxdWUgbmFtZSBhbW9uZ3N0IGFsbCB0aGUgc2VydmljZXMgZGVmaW5lZCB3aXRoaW4gaW4gdGhlIGVuY2xvc2luZwotV1NETCBkb2N1bWVudC48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBtYW5hZ2UgZXh0ZW5zaW9ucywgY2xpY2sgdGhlIDxzdHJvbmc+RXh0ZW5zaW9uczwvc3Ryb25nPiBwYW5lLgotWW91IGNhbiBlaXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+VGlwPC9zdHJvbmc+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgc2VydmljZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3Ci1ieSByaWdodC1jbGlja2luZyB0aGUgPHN0cm9uZz5TZXJ2aWNlczwvc3Ryb25nPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxzdHJvbmc+QWRkIFNlcnZpY2U8L3N0cm9uZz4uPC9wPgotPHA+WW91Ci1jYW4gbm93IGFkZCBhIHBvcnQgdG8geW91ciBzZXJ2aWNlLiBBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50Ci1ieSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGFkZHJlc3MgZm9yIGEgYmluZGluZy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZmEyMGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0aW1wdC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRjcnRpbXB0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQ8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgaW1wb3J0IHN0YXRlbWVudCBpcyB1c2VkIHRvIGltcG9ydCBvdGhlciBXU0RMIGRvY3VtZW50cyBvcgotWE1MIHNjaGVtYXMgaW50byB5b3VyIFdTREwgZG9jdW1lbnQuIFRoaXMgZW5hYmxlcyB5b3UgdG8gaGF2ZSBtb3JlIG1vZHVsYXIKLVdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSA8Yj5pbXBvcnQ8L2I+IHN0YXRlbWVudCBhbGxvd3MgdGhlIHNlcGFyYXRpb24KLW9mIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgb2YgYSBzZXJ2aWNlIGRlZmluaXRpb24gaW50byBpbmRlcGVuZGVudCBkb2N1bWVudHMsCi13aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlcgotc2VydmljZSBkZWZpbml0aW9ucywgYnkgc2VwYXJhdGluZyB0aGUgZGVmaW5pdGlvbnMgYWNjb3JkaW5nIHRvIHRoZWlyIGxldmVsCi1vZiBhYnN0cmFjdGlvbi48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgV1NETCBpbXBvcnQgc3RhdGVtZW50czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5pbXBvcnQgc3RhdGVtZW50czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gY3JlYXRlIGFuIGltcG9ydCBzdGF0ZW1lbnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIE91dGxpbmUgdmlldywgcmlnaHQtY2xpY2sgdGhlIDxiPkltcG9ydHM8L2I+IGZvbGRlciBhbmQKLWNsaWNrIDxiPkFkZCBJbXBvcnQuPC9iPiBTZWxlY3QgeW91ciBuZXcgaW1wb3J0IHN0YXRlbWVudC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8Yj5HZW5lcmFsPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgdGhlIGljb24gdG8gdGhlIHJpZ2h0IG9mIHRoZSA8Yj5Mb2NhdGlvbjwvYj4gZmllbGQgdG8gb3BlbgotdGhlIFNlbGVjdCBGaWxlIHdpbmRvdy48dWljb250cm9sPjwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCBhIFdTREwgZmlsZSBvciBYTUwgU2NoZW1hIHRvIGltcG9ydCBieSBkb2luZyBvbmUgb2YgdGhlCi1mb2xsb3dpbmc6PC9jbWQ+PGluZm8+PHVsPgotPGxpPlNlbGVjdCBhIGZpbGUgZnJvbSBhbm90aGVyIHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZSBpbiB0aGUgPHVpY29udHJvbD5Xb3Jrc3BhY2UKLUZpbGVzPC91aWNvbnRyb2w+IHNlY3Rpb24uPC9saT4KLTxsaT5DbGljayA8dWljb250cm9sPkltcG9ydCBGaWxlczwvdWljb250cm9sPiBhbmQgdGhlbiA8dWljb250cm9sPkJyb3dzZTwvdWljb250cm9sPiB0bwotZmluZCBhbmQgc2VsZWN0IGZpbGVzIG91dHNpZGUgdGhlIHdvcmtzcGFjZS4gQ2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4gYWZ0ZXIKLWNvbXBsZXRpbmcgdGhpcyBJbXBvcnQgd2l6YXJkLjw/UHViIENhcmV0Pz48L2xpPgotPC91bD5DbGljayA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbXBvcnQgc3RhdGVtZW50IHlvdSB3YW50IHRoZSB1c2VyCi10byByZWFkIGluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0Pk9uY2UgeW91IHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudCB5b3Ugd2lzaCB0byBpbXBvcnQsCi10aGUgaW1wb3J0IG9iamVjdCdzIGxhYmVsIGNoYW5nZXMgdG8gcmVmbGVjdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiBJbXBvcnRlZAotV1NETCBjb21wb25lbnRzIG1heSBub3cgYmUgdmlzaWJsZSB3aXRoaW4gdGhlIGVkaXRvci48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAyNTg0Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0Mjg2YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yIFhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyIFdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlciBzZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yIFhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyIFdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlciBzZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBpbXBvcnQgc3RhdGVtZW50cywgV1NETCwgaW1wb3J0IHN0YXRlbWVudHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzLCBXU0RMLCBpbXBvcnQgc3RhdGVtZW50cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0Y3J0aW1wdCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjcnRpbXB0Ij48YSBuYW1lPSJ0Y3J0aW1wdCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudDwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yCi1YTUwgc2NoZW1hcyBpbnRvIHlvdXIgV1NETCBkb2N1bWVudC4gVGhpcyBlbmFibGVzIHlvdSB0byBoYXZlIG1vcmUgbW9kdWxhcgotV1NETCBkb2N1bWVudHMuIFRoZSB1c2Ugb2YgdGhlIDxzdHJvbmc+aW1wb3J0PC9zdHJvbmc+IHN0YXRlbWVudCBhbGxvd3MgdGhlIHNlcGFyYXRpb24KLW9mIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgb2YgYSBzZXJ2aWNlIGRlZmluaXRpb24gaW50byBpbmRlcGVuZGVudCBkb2N1bWVudHMsCi13aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlcgotc2VydmljZSBkZWZpbml0aW9ucywgYnkgc2VwYXJhdGluZyB0aGUgZGVmaW5pdGlvbnMgYWNjb3JkaW5nIHRvIHRoZWlyIGxldmVsCi1vZiBhYnN0cmFjdGlvbi48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhbiBpbXBvcnQgc3RhdGVtZW50LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBPdXRsaW5lIHZpZXcsIHJpZ2h0LWNsaWNrIHRoZSA8c3Ryb25nPkltcG9ydHM8L3N0cm9uZz4gZm9sZGVyIGFuZAotY2xpY2sgPHN0cm9uZz5BZGQgSW1wb3J0Ljwvc3Ryb25nPiBTZWxlY3QgeW91ciBuZXcgaW1wb3J0IHN0YXRlbWVudC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgdGhlIGljb24gdG8gdGhlIHJpZ2h0IG9mIHRoZSA8c3Ryb25nPkxvY2F0aW9uPC9zdHJvbmc+IGZpZWxkIHRvIG9wZW4KLXRoZSBTZWxlY3QgRmlsZSB3aW5kb3cuPHNwYW4gY2xhc3M9InVpY29udHJvbCIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IGEgV1NETCBmaWxlIG9yIFhNTCBTY2hlbWEgdG8gaW1wb3J0IGJ5IGRvaW5nIG9uZSBvZiB0aGUKLWZvbGxvd2luZzo8L3NwYW4+IDx1bD4KLTxsaT5TZWxlY3QgYSBmaWxlIGZyb20gYW5vdGhlciBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldvcmtzcGFjZQotRmlsZXM8L3NwYW4+IHNlY3Rpb24uPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydCBGaWxlczwvc3Bhbj4gYW5kIHRoZW4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnJvd3NlPC9zcGFuPiB0bwotZmluZCBhbmQgc2VsZWN0IGZpbGVzIG91dHNpZGUgdGhlIHdvcmtzcGFjZS4gQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPiBhZnRlcgotY29tcGxldGluZyB0aGlzIEltcG9ydCB3aXphcmQuPC9saT4KLQotPC91bD4KLUNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbXBvcnQgc3RhdGVtZW50IHlvdSB3YW50IHRoZSB1c2VyCi10byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+T25jZSB5b3Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50IHlvdSB3aXNoIHRvIGltcG9ydCwKLXRoZSBpbXBvcnQgb2JqZWN0J3MgbGFiZWwgY2hhbmdlcyB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIEltcG9ydGVkCi1XU0RMIGNvbXBvbmVudHMgbWF5IG5vdyBiZSB2aXNpYmxlIHdpdGhpbiB0aGUgZWRpdG9yLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkZDY2My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydHR5cGUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGU8L3RpdGxlPgotPHNob3J0ZGVzYz5UeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nIFdTREwgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+dHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPldTREwgYWxsb3dzIHR5cGUgc3lzdGVtcyB0byBiZSBhZGRlZCB2aWEgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLUFuIGV4dGVuc2liaWxpdHkgZWxlbWVudCBtYXkgYXBwZWFyIHVuZGVyIHRoZSAgPGI+dHlwZXM8L2I+IGVsZW1lbnQgdG8gaWRlbnRpZnkKLXRoZSB0eXBlIGRlZmluaXRpb24gc3lzdGVtIGJlaW5nIHVzZWQgYW5kIHRvIHByb3ZpZGUgYW4gWE1MIGNvbnRhaW5lciBlbGVtZW50Ci1mb3IgdGhlIHR5cGUgZGVmaW5pdGlvbnMuPC9wPjxwPlRvIGFkZCBhbiBYU0QgdHlwZSBvciBlbGVtZW50IHRvIHlvdXIgV1NETAotZmlsZTogPC9wPjwvY29udGV4dD4KLTxzdGVwcy11bm9yZGVyZWQ+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIGFycm93IGljb24gdG8gdGhlIHJpZ2h0IG9mIHRoZSBwb3J0Ci10eXBlIG9iamVjdCB0byBvcGVuIHRoYXQgb3BlcmF0aW9uIGluIHRoZSBYTUwgPD9QdWIgQ2FyZXQ/PnNjaGVtYSBlZGl0b3IuPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzLXVub3JkZXJlZD4KLTxyZXN1bHQ+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgWE1MIHNjaGVtYXMsIHNlZSB0aGUgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iLy4uLy4uL29yZy5lY2xpcHNlLndzdC54c2RlZGl0b3IuZG9jLnVzZXIvdG9waWNzL2N4bWxzY2VkLmRpdGEiIHNjb3BlPSJwZWVyIj5YTUwKLXNjaGVtYSBlZGl0b3IgZG9jdW1lbnRhdGlvbjwveHJlZj4gZm9yIGxpbmtzIHRvIG9ubGluZSByZXNvdXJjZXMuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDE3Nzc/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDIwZmFkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlR5cGVzIGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLiBXU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlIFczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4gV1NETCBpcyBub3QgdGllZCBleGNsdXNpdmVseSB0byBhIHNwZWNpZmljIHR5cGluZyBzeXN0ZW0sIGJ1dCBpdCB1c2VzIHRoZSBXM0MgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uIGFzIGl0cyBkZWZhdWx0IGNob2ljZS4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGNyZWF0aW5nIFdTREwgdHlwZXMsIFdTREwsIHR5cGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBXU0RMIHR5cGVzLCBXU0RMLCB0eXBlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0Y3J0dHlwZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0Y3J0dHlwZSI+PGEgbmFtZT0idGNydHR5cGUiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlPC9oMT4KLQotCi0KLTxkaXY+PHA+VHlwZXMgZGVzY3JpYmUgYWxsIHRoZSBkYXRhIHR5cGVzIHVzZWQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuCi1XU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlCi1XM0MgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uIGFzIGl0cyBkZWZhdWx0IGNob2ljZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldTREwgYWxsb3dzIHR5cGUgc3lzdGVtcyB0byBiZSBhZGRlZCB2aWEgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLUFuIGV4dGVuc2liaWxpdHkgZWxlbWVudCBtYXkgYXBwZWFyIHVuZGVyIHRoZSAgPHN0cm9uZz50eXBlczwvc3Ryb25nPiBlbGVtZW50IHRvIGlkZW50aWZ5Ci10aGUgdHlwZSBkZWZpbml0aW9uIHN5c3RlbSBiZWluZyB1c2VkIGFuZCB0byBwcm92aWRlIGFuIFhNTCBjb250YWluZXIgZWxlbWVudAotZm9yIHRoZSB0eXBlIGRlZmluaXRpb25zLjwvcD4KLTxwPlRvIGFkZCBhbiBYU0QgdHlwZSBvciBlbGVtZW50IHRvIHlvdXIgV1NETAotZmlsZTogPC9wPgotPC9kaXY+Ci0KLQotPGRpdiBjbGFzcz0icCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCBjbGljayB0aGUgYXJyb3cgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlIHBvcnQKLXR5cGUgb2JqZWN0IHRvIG9wZW4gdGhhdCBvcGVyYXRpb24gaW4gdGhlIFhNTCBzY2hlbWEgZWRpdG9yLjwvc3Bhbj4KLTwvZGl2PgotCi0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFhNTCBzY2hlbWFzLCBzZWUgdGhlIDxhIGhyZWY9Ii8uLi8uLi9vcmcuZWNsaXBzZS53c3QueHNkZWRpdG9yLmRvYy51c2VyL3RvcGljcy9jeG1sc2NlZC5kaXRhIj5YTUwgc2NoZW1hIGVkaXRvciBkb2N1bWVudGF0aW9uPC9hPiBmb3IgbGlua3MgdG8gb25saW5lIHJlc291cmNlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMjg4ZGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRjcnR3c2RsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvdGl0bGU+Ci08c2hvcnRkZXNjPllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETAotZWRpdG9yLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5jcmVhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gY3JlYXRlIGEgV1NETCBmaWxlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkNyZWF0ZSBhIHByb2plY3QgdG8gY29udGFpbiB0aGUgV1NETCBkb2N1bWVudC48L2NtZD48aW5mbz5JdCBkb2VzCi1ub3QgbWF0dGVyIHdoYXQga2luZCBvZiBwcm9qZWN0IHlvdSBjcmVhdGUuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIHdvcmtiZW5jaCwgY2xpY2sgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPgotPHVpY29udHJvbD5OZXc8L3VpY29udHJvbD48dWljb250cm9sPk90aGVyPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4gYW5kIHNlbGVjdCA8bWVudWNhc2NhZGU+Ci08dWljb250cm9sPldlYiBTZXJ2aWNlczwvdWljb250cm9sPjx1aWNvbnRyb2w+V1NETDwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+LjwvY21kPgotPGluZm8+Q2xpY2sgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgcHJvamVjdCBvciBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFdTREwgZmlsZS48L2NtZD4KLTxpbmZvPkluIHRoZSAgPHVpY29udHJvbD5GaWxlIG5hbWU8L3VpY29udHJvbD4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlCi1XU0RMIGZpbGUuIFRoZSBuYW1lIG9mIHlvdXIgWE1MIGZpbGUgbXVzdCBlbmQgaW4gIDxzeXN0ZW1vdXRwdXQ+LndzZGw8L3N5c3RlbW91dHB1dD48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4gYW5kIGVudGVyIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24KLW9uIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHdpemFyZDo8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+QSA8dWljb250cm9sPlRhcmdldCBuYW1lc3BhY2U8L3VpY29udHJvbD4gZm9yIHRoZSBXU0RMIGZpbGUKLW9yIGFjY2VwdCB0aGUgZGVmYXVsdCAoPGNvZGVwaD5odHRwOi8vd3d3LmV4YW1wbGUub3JnLzxpPk15V1NETEZpbGU8L2k+LzwvY29kZXBoPikuPC9jbWQ+Ci08aW5mbz5UaGUgdGFyZ2V0IG5hbWVzcGFjZSBpcyB1c2VkIGZvciB0aGUgbmFtZXMgb2YgbWVzc2FnZXMgYW5kIHRoZSBwb3J0Ci10eXBlLCBiaW5kaW5nIGFuZCBzZXJ2aWNlIGRlZmluZWQgaW4gdGhlIFdTREwgZmlsZS4gVGhlIHZhbHVlIG11c3QgdGFrZSB0aGUKLWZvcm0gb2YgYSB2YWxpZCBVUkkgKGZvciBleGFtcGxlLCA8Y29kZXBoPmh0dHA6Ly93d3cubXljb21wYW55LmNvbS9teXNlcnZpY2UvPC9jb2RlcGg+KTwvaW5mbz4KLTwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+VGhlIDx1aWNvbnRyb2w+UHJlZml4PC91aWNvbnRyb2w+IGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0Ci1uYW1lc3BhY2UuPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgPHVpY29udHJvbD5DcmVhdGUgV1NETCBTa2VsZXRvbjwvdWljb250cm9sPiBpZiB5b3Ugd2FudAotdGhlIHdpemFyZCB0byBjcmVhdGUgdGhlIHNrZWxldG9uIG9mIHRoZSBXU0RMIGZpbGUuPC9jbWQ+PGluZm8+VGhpcyB3aWxsIGdlbmVyYXRlCi10aGUgV1NETCBlbGVtZW50cyByZXF1aXJlZCBmb3IgeW91ciBzZXJ2aWNlLCBpbmNsdWRpbmcgYmluZGluZ3MsIHBvcnRzIGFuZAotbWVzc2FnZXMuIFlvdSBjYW4gdGhlbiBtb2RpZnkgdGhlc2UgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHlvdXIgV2ViIHNlcnZpY2UKLS48L2luZm8+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5JZiB5b3UgaGF2ZSBjaG9zZW4gdG8gY3JlYXRlIGEgV1NETCBza2VsZXRvbiwgc2VsZWN0IHRoZSBiaW5kaW5nCi1vcHRpb25zIHlvdSB3YW50IHRvIHVzZSBpbiB0aGUgPHVpY29udHJvbD5Qcm90b2NvbDwvdWljb250cm9sPiBkcm9wIGRvd24uCi1UaGUgb3B0aW9ucyBhcmUgU09BUCBhbmQgSFRUUC4gVXNlIHRoZSBTT0FQIHByb3RvY29sIHdoZW4geW91IHdhbnQgdG8gZXhjaGFuZ2UKLXN0cnVjdHVyZWQgYW5kIHR5cGVkIGluZm9ybWF0aW9uLiBVc2UgdGhlIEhUVFAgcHJvdG9jb2wgd2hlbiB5b3Ugd2FudCB5b3VyCi1hcHBsaWNhdGlvbiBjbGllbnQgdG8ganVzdCByZXF1ZXN0IG9yIHVwZGF0ZSBpbmZvcm1hdGlvbi48L2NtZD48L3N1YnN0ZXA+PD9QdWIgQ2FyZXQxPz4KLTxzdWJzdGVwPjxjbWQ+PC9jbWQ+PGluZm8+SWYgeW91IHNlbGVjdCBTT0FQIHlvdSBjYW4gdGhlbiBzZWxlY3QgdGhlIGVuY29kaW5nCi1zdHlsZSB5b3Ugd2FudCB0byB1c2U6PHVsPgotPGxpPjx1aWNvbnRyb2w+ZG9jdW1lbnQgbGl0ZXJhbDwvdWljb250cm9sPi4gRG9jdW1lbnQgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwKLWVuY29kaW5nLiBVc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc2VuZCBTT0FQIG1lc3NhZ2VzIHRoYXQKLWNhbiBiZSB2YWxpZGF0ZWQgYnkgYW4gWE1MIHZhbGlkYXRvci4gIEFsbCB0aGUgZGF0YSB0eXBlcyBpbiB0aGUgU09BUCBtZXNzYWdlCi1ib2R5IGFyZSBkZWZpbmVkIGluIGEgc2NoZW1hLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIHNjaGVtYSBlbGVtZW50cy4gPC9saT4KLTxsaT48dWljb250cm9sPnJwYyBsaXRlcmFsPC91aWNvbnRyb2w+LiBSUEMgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwgZW5jb2RpbmcuCi1Vc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgb3BlcmF0aW9uIG1ldGhvZCBuYW1lcwotaW4geW91ciBTT0FQIG1lc3NhZ2VzIHNvIGEgc2VydmVyIGNhbiBkaXNwYXRjaCB0aGUgc3BlY2lmaWVkIG1ldGhvZHMuICBEYXRhCi10eXBlcyBtdXN0IGJlIGRlZmluZWQsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gWFNEIHR5cGVzLjwvbGk+Ci08bGk+PHVpY29udHJvbD5ycGMgZW5jb2RlZDwvdWljb250cm9sPi4gUlBDIHN0eWxlIG1lc3NhZ2VzIGFuZCBTT0FQIGVuY29kaW5nLgotVXNlIHRoaXMgc3R5bGUgb2YgYmluZGluZyB3aGVuIHlvdSB3YW50IHRvIGVuY29kZSBkYXRhIGdyYXBocyBpbiB5b3VyIFNPQVAKLW1lc3NhZ2VzIHNvIGEgc2VydmVyIGNhbiBkZXNlcmlhbGl6ZSB0aGUgb2JqZWN0IGRhdGEuICBEYXRhIHR5cGVzIG11c3QgYmUKLWRlZmluZWQsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gWFNEIHR5cGVzLjwvbGk+Ci08L3VsPjwvaW5mbz48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPjwvY21kPjxpbmZvPklmIHlvdSBzZWxlY3QgSFRUUCB5b3UgY2FuIHNlbGVjdCB3aGV0aGVyIHRvIGNyZWF0ZQotYW4gSFRUUCBnZXR0ZXIgb3Igc2V0dGVyLjx1bD4KLTxsaT48dWljb250cm9sPkhUVFAgR0VUPC91aWNvbnRyb2w+LiBBIEdFVCByZXF1ZXN0IGZldGNoZXMgZGF0YSBmcm9tIGEgV2ViCi1zZXJ2ZXIgYmFzZWQgb24gYW4gVVJMIHZhbHVlIGFuZCBhIHNldCBvZiBIVFRQIGhlYWRlcnMuIFVzZSB0aGlzIG1ldGhvZCB3aGVuCi15b3Ugd2FudCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QuIDwvbGk+Ci08bGk+PHVpY29udHJvbD5IVFRQIFBPU1Q8L3VpY29udHJvbD4uIEEgUE9TVCByZXF1ZXN0IHNlbmRzIGFkZGl0aW9uYWwgZGF0YQotdG8gdGhlIHNlcnZlciwgc3BlY2lmaWVkIGFmdGVyIHRoZSBVUkwgYW5kIHRoZSBoZWFkZXJzLiBVc2UgdGhpcyBtZXRob2Qgd2hlbgoteW91IHdhbnQgdG8gc2VuZCBkYXRhIGVuY2xvc2VkIGluIHRoZSBib2R5IG9mIHRoZSByZXF1ZXN0LjwvbGk+Ci08L3VsPjwvaW5mbz48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9jbWQ+PGluZm8+VGhlIFdTREwgZmlsZQotb3BlbnMgaW4gdGhlIFdTREwgZWRpdG9yLjwvaW5mbz48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5JZiB5b3UgY3JlYXRlZCBhIFdTREwgZmlsZSB3aXRoIGEgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncywKLWl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzo8L3A+PHA+PGltYWdlIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIFNPQVAgYmluZGluZ3MiCi1ocmVmPSIuLi9pbWFnZXMvc29hcHNrZWwuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvcD48cD5JZiB5b3UgY3JlYXRlZAotYSBXU0RMIGZpbGUgd2l0aCBhIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MsIGl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8KLXRoZSBmb2xsb3dpbmc6PC9wPjxwPjxpbWFnZSBhbHQ9IkltYWdlIG9mIGEgV1NETCBza2VsZXRvbiB1c2luZyBIVFRQIGJpbmRpbmdzIgotaHJlZj0iLi4vaW1hZ2VzL2h0dHBza2VsLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0aW1wd3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDA1MzYzPz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcxYTc2Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgY3JlYXRpbmcsIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGNyZWF0aW5nLCBXZWIgc2VydmljZXMsIGNyZWF0aW5nIFdTREwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0aW1wd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRjcnR3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0Y3J0d3NkbCI+PGEgbmFtZT0idGNydHdzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvaDE+Ci0KLQotCi08ZGl2PjxwPllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETAotZWRpdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gY3JlYXRlIGEgV1NETCBmaWxlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNyZWF0ZSBhIHByb2plY3QgdG8gY29udGFpbiB0aGUgV1NETCBkb2N1bWVudC48L3NwYW4+IEl0IGRvZXMKLW5vdCBtYXR0ZXIgd2hhdCBraW5kIG9mIHByb2plY3QgeW91IGNyZWF0ZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSB3b3JrYmVuY2gsIGNsaWNrIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdGhlcjwvc3Bhbj48L3NwYW4+IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj4KLTxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlczwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XU0RMPC9zcGFuPjwvc3Bhbj4uPC9zcGFuPgotIENsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgV1NETCBmaWxlLjwvc3Bhbj4KLSBJbiB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgbmFtZTwvc3Bhbj4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlCi1XU0RMIGZpbGUuIFRoZSBuYW1lIG9mIHlvdXIgWE1MIGZpbGUgbXVzdCBlbmQgaW4gIDx0dCBjbGFzcz0ic3lzb3V0Ij4ud3NkbDwvdHQ+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPiBhbmQgZW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbgotb24gdGhlIG5leHQgcGFnZSBvZiB0aGUgd2l6YXJkOjwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+QSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5UYXJnZXQgbmFtZXNwYWNlPC9zcGFuPiBmb3IgdGhlIFdTREwgZmlsZQotb3IgYWNjZXB0IHRoZSBkZWZhdWx0ICg8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwOi8vd3d3LmV4YW1wbGUub3JnLzxlbT5NeVdTRExGaWxlPC9lbT4vPC9zYW1wPikuPC9zcGFuPgotIFRoZSB0YXJnZXQgbmFtZXNwYWNlIGlzIHVzZWQgZm9yIHRoZSBuYW1lcyBvZiBtZXNzYWdlcyBhbmQgdGhlIHBvcnQKLXR5cGUsIGJpbmRpbmcgYW5kIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETCBmaWxlLiBUaGUgdmFsdWUgbXVzdCB0YWtlIHRoZQotZm9ybSBvZiBhIHZhbGlkIFVSSSAoZm9yIGV4YW1wbGUsIDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHA6Ly93d3cubXljb21wYW55LmNvbS9teXNlcnZpY2UvPC9zYW1wPikKLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+VGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByZWZpeDwvc3Bhbj4gYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQKLW5hbWVzcGFjZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q3JlYXRlIFdTREwgU2tlbGV0b248L3NwYW4+IGlmIHlvdSB3YW50Ci10aGUgd2l6YXJkIHRvIGNyZWF0ZSB0aGUgc2tlbGV0b24gb2YgdGhlIFdTREwgZmlsZS48L3NwYW4+IFRoaXMgd2lsbCBnZW5lcmF0ZQotdGhlIFdTREwgZWxlbWVudHMgcmVxdWlyZWQgZm9yIHlvdXIgc2VydmljZSwgaW5jbHVkaW5nIGJpbmRpbmdzLCBwb3J0cyBhbmQKLW1lc3NhZ2VzLiBZb3UgY2FuIHRoZW4gbW9kaWZ5IHRoZXNlIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiB5b3VyIFdlYiBzZXJ2aWNlCi0uPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgaGF2ZSBjaG9zZW4gdG8gY3JlYXRlIGEgV1NETCBza2VsZXRvbiwgc2VsZWN0IHRoZSBiaW5kaW5nCi1vcHRpb25zIHlvdSB3YW50IHRvIHVzZSBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJvdG9jb2w8L3NwYW4+IGRyb3AgZG93bi4KLVRoZSBvcHRpb25zIGFyZSBTT0FQIGFuZCBIVFRQLiBVc2UgdGhlIFNPQVAgcHJvdG9jb2wgd2hlbiB5b3Ugd2FudCB0byBleGNoYW5nZQotc3RydWN0dXJlZCBhbmQgdHlwZWQgaW5mb3JtYXRpb24uIFVzZSB0aGUgSFRUUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHlvdXIKLWFwcGxpY2F0aW9uIGNsaWVudCB0byBqdXN0IHJlcXVlc3Qgb3IgdXBkYXRlIGluZm9ybWF0aW9uLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuIC8+IElmIHlvdSBzZWxlY3QgU09BUCB5b3UgY2FuIHRoZW4gc2VsZWN0IHRoZSBlbmNvZGluZwotc3R5bGUgeW91IHdhbnQgdG8gdXNlOjx1bD4KLTxsaT48c3BhbiBjbGFzcz0idWljb250cm9sIj5kb2N1bWVudCBsaXRlcmFsPC9zcGFuPi4gRG9jdW1lbnQgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwKLWVuY29kaW5nLiBVc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc2VuZCBTT0FQIG1lc3NhZ2VzIHRoYXQKLWNhbiBiZSB2YWxpZGF0ZWQgYnkgYW4gWE1MIHZhbGlkYXRvci4gIEFsbCB0aGUgZGF0YSB0eXBlcyBpbiB0aGUgU09BUCBtZXNzYWdlCi1ib2R5IGFyZSBkZWZpbmVkIGluIGEgc2NoZW1hLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIHNjaGVtYSBlbGVtZW50cy4gPC9saT4KLQotPGxpPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPnJwYyBsaXRlcmFsPC9zcGFuPi4gUlBDIHN0eWxlIG1lc3NhZ2VzLCBsaXRlcmFsIGVuY29kaW5nLgotVXNlIHRoaXMgc3R5bGUgb2YgYmluZGluZyB3aGVuIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIG9wZXJhdGlvbiBtZXRob2QgbmFtZXMKLWluIHlvdXIgU09BUCBtZXNzYWdlcyBzbyBhIHNlcnZlciBjYW4gZGlzcGF0Y2ggdGhlIHNwZWNpZmllZCBtZXRob2RzLiAgRGF0YQotdHlwZXMgbXVzdCBiZSBkZWZpbmVkLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIFhTRCB0eXBlcy48L2xpPgotCi08bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+cnBjIGVuY29kZWQ8L3NwYW4+LiBSUEMgc3R5bGUgbWVzc2FnZXMgYW5kIFNPQVAgZW5jb2RpbmcuCi1Vc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gZW5jb2RlIGRhdGEgZ3JhcGhzIGluIHlvdXIgU09BUAotbWVzc2FnZXMgc28gYSBzZXJ2ZXIgY2FuIGRlc2VyaWFsaXplIHRoZSBvYmplY3QgZGF0YS4gIERhdGEgdHlwZXMgbXVzdCBiZQotZGVmaW5lZCwgc28gdGhlIFdTREwgcGFydHMgbXVzdCBwb2ludCB0byBYU0QgdHlwZXMuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4gLz4gSWYgeW91IHNlbGVjdCBIVFRQIHlvdSBjYW4gc2VsZWN0IHdoZXRoZXIgdG8gY3JlYXRlCi1hbiBIVFRQIGdldHRlciBvciBzZXR0ZXIuPHVsPgotPGxpPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkhUVFAgR0VUPC9zcGFuPi4gQSBHRVQgcmVxdWVzdCBmZXRjaGVzIGRhdGEgZnJvbSBhIFdlYgotc2VydmVyIGJhc2VkIG9uIGFuIFVSTCB2YWx1ZSBhbmQgYSBzZXQgb2YgSFRUUCBoZWFkZXJzLiBVc2UgdGhpcyBtZXRob2Qgd2hlbgoteW91IHdhbnQgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0LiA8L2xpPgotCi08bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+SFRUUCBQT1NUPC9zcGFuPi4gQSBQT1NUIHJlcXVlc3Qgc2VuZHMgYWRkaXRpb25hbCBkYXRhCi10byB0aGUgc2VydmVyLCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIFVSTCBhbmQgdGhlIGhlYWRlcnMuIFVzZSB0aGlzIG1ldGhvZCB3aGVuCi15b3Ugd2FudCB0byBzZW5kIGRhdGEgZW5jbG9zZWQgaW4gdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9zcGFuPiBUaGUgV1NETCBmaWxlCi1vcGVucyBpbiB0aGUgV1NETCBlZGl0b3IuPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IGNyZWF0ZWQgYSBXU0RMIGZpbGUgd2l0aCBhIHNrZWxldG9uIHVzaW5nIFNPQVAgYmluZGluZ3MsCi1pdCBzaG91bGQgbG9vayBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmc6PC9wPgotPHA+PGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy9zb2Fwc2tlbC5naWYiIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIFNPQVAgYmluZGluZ3MiIC8+PGJyIC8+PC9wPgotPHA+SWYgeW91IGNyZWF0ZWQKLWEgV1NETCBmaWxlIHdpdGggYSBza2VsZXRvbiB1c2luZyBIVFRQIGJpbmRpbmdzLCBpdCBzaG91bGQgbG9vayBzaW1pbGFyIHRvCi10aGUgZm9sbG93aW5nOjwvcD4KLTxwPjxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvaHR0cHNrZWwuZ2lmIiBhbHQ9IkltYWdlIG9mIGEgV1NETCBza2VsZXRvbiB1c2luZyBIVFRQIGJpbmRpbmdzIiAvPjxiciAvPjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0aW1wd3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkgdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLiI+SW1wb3J0aW5nIGEgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhN2U3MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RlZHR3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRlZHR3c2RsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkVkaXRpbmcgV1NETCBmaWxlczwvdGl0bGU+Ci08c2hvcnRkZXNjPk9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMCi1lZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaAotYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPmVkaXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYgotc2VydmljZXM8aW5kZXh0ZXJtPmVkaXRpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gb3BlbiBhIFdTREwgZmlsZSBpbiB0aGUgV1NETCBlZGl0b3IsIGRvdWJsZS1jbGljayBpdCBpbiB0aGUKLU5hdmlnYXRvciB2aWV3IG9yIHJpZ2h0LWNsaWNrIGl0IGFuZCBjbGljayAgPGI+T3BlbiBXaXRoID4gV1NETCBFZGl0b3IuPC9iPjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImVkaXRpc291cmNldmlldyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgU291cmNlIHZpZXc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+VG8gZWRpdCBhIFdTREwgZmlsZSBpbiB0aGUgU291cmNlIHZpZXcsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5PcGVuIHlvdXIgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvci48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIHRoZSAgPHVpY29udHJvbD5Tb3VyY2U8L3VpY29udHJvbD4gdGFiLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBzb3VyY2UgY29kZSB5b3Ugd2FudCB0byBlZGl0LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPkF0IGFueSB0aW1lLCB5b3UgY2FuIHN3aXRjaCB0byB0aGUgU291cmNlIHZpZXcgdG8gcmV2aWV3IHRoZSBzb3VyY2UKLWNvZGUgb2YgdGhlIFdTREwgZmlsZS4gWW91IGNhbiBhbHNvIGVkaXQgeW91ciBXU0RMIGZpbGUgZGlyZWN0bHkgaW4gdGhlIFNvdXJjZQotdmlldy48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImVkaXRlZGl0dmlldyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgRGVzaWduIHZpZXc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VGhlIERlc2lnbiB2aWV3IHByb3ZpZGVzIGEgZ3JhcGhpY2FsIHdheSB0byBicm93c2UgYW5kIGVkaXQgeW91cgotV1NETCBmaWxlLiBFYWNoIHR5cGUgb2YgdG9wIGxldmVsIFdTREwgb2JqZWN0IGlzIHNob3duIHdpdGhpbiBhIHRhYnVsYXIgdmlldwotKGZvciBleGFtcGxlLCBzZXJ2aWNlLCBiaW5kaW5nLCBwb3J0IHR5cGUpLiBFYWNoIHRhYnVsYXIgdmlldyBjb250YWlucyBvbmUKLW9yIG1vcmUgcm93cyB0aGF0IHJlcHJlc2VudCB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QuIFRoZSBzZXJ2aWNlLCBiaW5kaW5nLAotYW5kIHBvcnQgdHlwZSBvYmplY3RzIGFyZSAnbGlua2VkJy4gQSBsaW5lIGRpc3BsYXlzIHRvIGRlbm90ZSBhIHJlZmVyZW5jZQotKG9yIGFzc29jaWF0aW9uKSBiZXR3ZWVuIHRoZXNlIG9iamVjdHMuPC9wPjxwPiA8aW1hZ2UgYWx0PSJJbWFnZSBvZiBhIFdTREwgZmlsZSBvcGVuIGluIHRoZSBXU0RMIGVkaXRvciIKLWhyZWY9Ii4uL2ltYWdlcy93c2RsZWRpdG9yLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJlZGl0cHJvcGVydGllc3ZpZXciPgotPHRpdGxlPkVkaXRpbmcgaW4gdGhlIFByb3BlcnRpZXMgdmlldzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGUgUHJvcGVydGllcyB2aWV3IGRpc3BsYXlzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIGFuZCBlZGl0YWJsZQotYXR0cmlidXRlIHZhbHVlcyBvZiBhIHNlbGVjdGVkIFdTREwgb2JqZWN0IGFuZCBjb250YWlucyB0aGUgZm9sbG93aW5nIHBhbmVzCi10byBlZGl0OjwvcD48dWw+Ci08bGk+IDx1aWNvbnRyb2w+R2VuZXJhbDwvdWljb250cm9sPiBwYW5lLCB3aGljaCBkaXNwbGF5cyBhIGxpc3Qgb2Ygb2JqZWN0Ci1hdHRyaWJ1dGVzLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RG9jdW1lbnRhdGlvbjwvdWljb250cm9sPiBwYW5lLCB3aGljaCBzcGVjaWZpZXMgdGhlIGluZm9ybWF0aW9uCi15b3Ugd2FudCB0aGUgdXNlciB0byByZWFkLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RXh0ZW5zaW9uczwvdWljb250cm9sPiBwYW5lLCB3aGljaCBpcyB1c2VkIHRvIGFkZCBleHRlbnNpb24KLWNvbXBvbmVudHMuPC9saT4KLTwvdWw+PGRyYWZ0LWNvbW1lbnQ+IFtMZWdhY3kgVGl0bGVdIFNob3dpbmcgQmluZGluZ3MgaW4gdGhlIERlc2lnbiBbTGVnYWN5Ci1Db250ZXh0XUJ5IGRlZmF1bHQgYmluZGluZ3MgYXJlIHNob3duIGluIHRoZSBEZXNpZ24gVmlldy4gU2VsZWN0IHRoZSBzaG93L2hpZGUKLWJpbmRpbmcgYnV0dG9uIGF0IHRoZSB0b3AgbGVmdCBvZiB0aGUgRGVzaWduIFZpZXcgdG8gaGlkZSB0aGUgYmluZGluZ3MuIFdpdGgKLXRoZSBiaW5kaW5ncyBoaWRkZW4gYSBzZXJ2aWNlIGNhbiBiZSBicm93c2VkIGZyb20gYSBwdXJlbHkgYWJzdHJhY3QgbGV2ZWwKLXdpdGhvdXQgc2hvd2luZyBiaW5kaW5nIGluZm9ybWF0aW9uLiBXaGVuIHRoZSBuZWVkIGFyaXNlcyB0byB1bmRlcnN0YW5kIHRoZQotY29uY3JldGUgZGV0YWlscyByZXByZXNlbnRlZCBieSB0aGUgYmluZGluZywgc2VsZWN0IHRoZSBzaG93L2hpZGUgYmluZGluZwotYnV0dG9uIGFnYWluIHRvIG1ha2UgdGhlbSB2aXNpYmxlLiB2aWV3IFtXcml0ZXIgY29tbWVudHNdIFJlbW92ZSB0b3BpYyAiU2hvd2luZwotYmluZGluZ3MuLi4iIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2hvdy9oaWRlIGJpbmRpbmcgZnVuY3Rpb24gaW4gdGhlIG5ldyBHVUk8L2RyYWZ0LWNvbW1lbnQ+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJlZGl0b3V0bGluZXZpZXciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgT3V0bGluZSB2aWV3PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSBPdXRsaW5lIHZpZXcgd2lsbCBzaG93IHlvdSBhbGwgdGhlIGl0ZW1zIGluIHlvdXIgV1NETCBmaWxlCi1hcyB5b3UgYWRkIHRoZW0uIEluIHRoaXMgdmlldywgeW91IGNhbiBib3RoIGNyZWF0ZSBhbmQgZGVsZXRlIFdTREwgY29tcG9uZW50cy48L3A+PHA+VGhlCi1PdXRsaW5lIHZpZXcgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmb2xkZXJzIHlvdSBjYW4gdXNlIChieSByaWdodC1jbGlja2luZwotYW5kIHNlbGVjdGluZyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uKSB0byBlZGl0IHlvdXIgV1NETCBmaWxlOjwvcD48dWw+Ci08bGk+IDxiPkltcG9ydHM8L2I+Jm5ic3A7c3RhdGVtZW50cywgd2hpY2ggYXJlIHVzZWQgdG8gYXNzb2NpYXRlIGEgbmFtZXNwYWNlCi13aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24uPC9saT4KLTxsaT4gPGI+VHlwZXM8L2I+LCB3aGljaCBwcm92aWRlIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2VkIHRvIGRlc2NyaWJlIHRoZQotbWVzc2FnZXMgZXhjaGFuZ2VkLiBZb3UgY2Fubm90IGVkaXQgYW55IHR5cGVzIGRpcmVjdGx5IHVzaW5nIHRoaXMgZm9sZGVyLjwvbGk+Ci08bGk+IDxiPlNlcnZpY2VzPC9iPiwgd2hpY2ggYXJlIHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuPC9saT4KLTxsaT4gPGI+QmluZGluZ3M8L2I+LCB3aGljaCBzcGVjaWZ5IGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucwotZm9yIHRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuPC9saT4KLTxsaT4gPGI+UG9ydCBUeXBlPC9iPiwgd2hpY2ggaXMgPD9QdWIgQ2FyZXQ/PmEgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMuCi1FYWNoIG9wZXJhdGlvbiByZWZlcnMgdG8gYW4gaW5wdXQgbWVzc2FnZSBhbmQgb3V0cHV0IG1lc3NhZ2VzLiA8L2xpPgotPGxpPiA8Yj5NZXNzYWdlczwvYj4sIHdoaWNoIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nCi10cmFuc21pdHRlZC4gQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZAotd2l0aCBhIGRlZmluaXRpb24gd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uPC9saT4KLTwvdWw+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1NETDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0aW1wd3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+Ci08P1B1YiAqMDAwMDAwNDk2OT8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RlZHR3c2RsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RlZHR3c2RsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOWYwMTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkVkaXRpbmcgV1NETCBmaWxlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgZWRpdGluZywgV2ViIHNlcnZpY2VzLCBlZGl0aW5nIFdTREwiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBlZGl0aW5nLCBXZWIgc2VydmljZXMsIGVkaXRpbmcgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGVkdHdzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRlZHR3c2RsIj48YSBuYW1lPSJ0ZWR0d3NkbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RWRpdGluZyBXU0RMIGZpbGVzPC9oMT4KLQotCi0KLTxkaXY+PHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwKLWVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoCi1hbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIG9wZW4gYSBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLCBkb3VibGUtY2xpY2sgaXQgaW4gdGhlCi1OYXZpZ2F0b3IgdmlldyBvciByaWdodC1jbGljayBpdCBhbmQgY2xpY2sgIDxzdHJvbmc+T3BlbiBXaXRoICZndDsgV1NETCBFZGl0b3IuPC9zdHJvbmc+PC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iZWRpdGlzb3VyY2V2aWV3Ij48YSBuYW1lPSJlZGl0aXNvdXJjZXZpZXciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+RWRpdGluZyBpbiB0aGUgU291cmNlIHZpZXc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gZWRpdCBhIFdTREwgZmlsZSBpbiB0aGUgU291cmNlIHZpZXcsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5PcGVuIHlvdXIgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvci48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U291cmNlPC9zcGFuPiB0YWIuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlIHNvdXJjZSBjb2RlIHlvdSB3YW50IHRvIGVkaXQuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkF0IGFueSB0aW1lLCB5b3UgY2FuIHN3aXRjaCB0byB0aGUgU291cmNlIHZpZXcgdG8gcmV2aWV3IHRoZSBzb3VyY2UKLWNvZGUgb2YgdGhlIFdTREwgZmlsZS4gWW91IGNhbiBhbHNvIGVkaXQgeW91ciBXU0RMIGZpbGUgZGlyZWN0bHkgaW4gdGhlIFNvdXJjZQotdmlldy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iZWRpdGVkaXR2aWV3Ij48YSBuYW1lPSJlZGl0ZWRpdHZpZXciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+RWRpdGluZyBpbiB0aGUgRGVzaWduIHZpZXc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIERlc2lnbiB2aWV3IHByb3ZpZGVzIGEgZ3JhcGhpY2FsIHdheSB0byBicm93c2UgYW5kIGVkaXQgeW91cgotV1NETCBmaWxlLiBFYWNoIHR5cGUgb2YgdG9wIGxldmVsIFdTREwgb2JqZWN0IGlzIHNob3duIHdpdGhpbiBhIHRhYnVsYXIgdmlldwotKGZvciBleGFtcGxlLCBzZXJ2aWNlLCBiaW5kaW5nLCBwb3J0IHR5cGUpLiBFYWNoIHRhYnVsYXIgdmlldyBjb250YWlucyBvbmUKLW9yIG1vcmUgcm93cyB0aGF0IHJlcHJlc2VudCB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QuIFRoZSBzZXJ2aWNlLCBiaW5kaW5nLAotYW5kIHBvcnQgdHlwZSBvYmplY3RzIGFyZSAnbGlua2VkJy4gQSBsaW5lIGRpc3BsYXlzIHRvIGRlbm90ZSBhIHJlZmVyZW5jZQotKG9yIGFzc29jaWF0aW9uKSBiZXR3ZWVuIHRoZXNlIG9iamVjdHMuPC9wPgotPHA+IDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGVkaXRvci5naWYiIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIGZpbGUgb3BlbiBpbiB0aGUgV1NETCBlZGl0b3IiIC8+PGJyIC8+PC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImVkaXRwcm9wZXJ0aWVzdmlldyI+PGEgbmFtZT0iZWRpdHByb3BlcnRpZXN2aWV3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkVkaXRpbmcgaW4gdGhlIFByb3BlcnRpZXMgdmlldzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgUHJvcGVydGllcyB2aWV3IGRpc3BsYXlzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIGFuZCBlZGl0YWJsZQotYXR0cmlidXRlIHZhbHVlcyBvZiBhIHNlbGVjdGVkIFdTREwgb2JqZWN0IGFuZCBjb250YWlucyB0aGUgZm9sbG93aW5nIHBhbmVzCi10byBlZGl0OjwvcD4KLTx1bD4KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhbDwvc3Bhbj4gcGFuZSwgd2hpY2ggZGlzcGxheXMgYSBsaXN0IG9mIG9iamVjdAotYXR0cmlidXRlcy48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRvY3VtZW50YXRpb248L3NwYW4+IHBhbmUsIHdoaWNoIHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24KLXlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5FeHRlbnNpb25zPC9zcGFuPiBwYW5lLCB3aGljaCBpcyB1c2VkIHRvIGFkZCBleHRlbnNpb24KLWNvbXBvbmVudHMuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImVkaXRvdXRsaW5ldmlldyI+PGEgbmFtZT0iZWRpdG91dGxpbmV2aWV3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkVkaXRpbmcgaW4gdGhlIE91dGxpbmUgdmlldzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgT3V0bGluZSB2aWV3IHdpbGwgc2hvdyB5b3UgYWxsIHRoZSBpdGVtcyBpbiB5b3VyIFdTREwgZmlsZQotYXMgeW91IGFkZCB0aGVtLiBJbiB0aGlzIHZpZXcsIHlvdSBjYW4gYm90aCBjcmVhdGUgYW5kIGRlbGV0ZSBXU0RMIGNvbXBvbmVudHMuPC9wPgotPHA+VGhlCi1PdXRsaW5lIHZpZXcgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmb2xkZXJzIHlvdSBjYW4gdXNlIChieSByaWdodC1jbGlja2luZwotYW5kIHNlbGVjdGluZyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uKSB0byBlZGl0IHlvdXIgV1NETCBmaWxlOjwvcD4KLTx1bD4KLTxsaT4gPHN0cm9uZz5JbXBvcnRzPC9zdHJvbmc+wqBzdGF0ZW1lbnRzLCB3aGljaCBhcmUgdXNlZCB0byBhc3NvY2lhdGUgYSBuYW1lc3BhY2UKLXdpdGggYSBkb2N1bWVudCBsb2NhdGlvbi48L2xpPgotCi08bGk+IDxzdHJvbmc+VHlwZXM8L3N0cm9uZz4sIHdoaWNoIHByb3ZpZGUgZGF0YSB0eXBlIGRlZmluaXRpb25zIHVzZWQgdG8gZGVzY3JpYmUgdGhlCi1tZXNzYWdlcyBleGNoYW5nZWQuIFlvdSBjYW5ub3QgZWRpdCBhbnkgdHlwZXMgZGlyZWN0bHkgdXNpbmcgdGhpcyBmb2xkZXIuPC9saT4KLQotPGxpPiA8c3Ryb25nPlNlcnZpY2VzPC9zdHJvbmc+LCB3aGljaCBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cy48L2xpPgotCi08bGk+IDxzdHJvbmc+QmluZGluZ3M8L3N0cm9uZz4sIHdoaWNoIHNwZWNpZnkgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zCi1mb3IgdGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS48L2xpPgotCi08bGk+IDxzdHJvbmc+UG9ydCBUeXBlPC9zdHJvbmc+LCB3aGljaCBpcyBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zLgotRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gPC9saT4KLQotPGxpPiA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+LCB3aGljaCByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZwotdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQKLXdpdGggYSBkZWZpbml0aW9uIHdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldTREw8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRpbXB3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eSB0byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGU8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZTFhMjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRpbXB3c2RsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkltcG9ydGluZyBhIFdTREwgZmlsZTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkltcG9ydGluZyBXU0RMIGZpbGVzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5Zb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZQotV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkKLXRvIGhhdmUgYSBzdHJ1Y3R1cmVkIHZpZXdpbmcgb2YgdGhlIFdTREwgZmlsZS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+aW1wb3J0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5pbXBvcnRpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VGhlIFdlYiBTZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIG5ldyBXZWIgc2VydmljZQotZnJvbSBhIFdTREwgZmlsZS4gWW91IG11c3QgZmlyc3QgY3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZS4gQSBXU0RMIGZpbGUKLWNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXU0RMIGVkaXRvci4gVGhpcyBpcyBkZXNjcmliZWQgaW46ICA8eHJlZiBocmVmPSIuLi90YXNrcy90Y3J0d3NkbC5kaXRhIgotc2NvcGU9InBlZXIiPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwveHJlZj4uIFRvIGltcG9ydCBhIFdTREwgZmlsZSBmb2xsb3cKLXRoZSBpbnN0cnVjdGlvbnMgYmVsb3cuPC9wPjxwPiA8dWljb250cm9sPlByZXJlcXVpc2l0ZTo8L3VpY29udHJvbD4gQ3JlYXRlCi1hIHByb2plY3QuIEl0IGlzIHJlY29tbWVuZCB0aGF0IHlvdSBjcmVhdGUgYSBXZWIgcHJvamVjdCBzbyB0aGF0IHRoZSBXU0RMCi1jYW4gYmUgZWFzaWx5IHVzZWQgdG8gZ2VuZXJhdGUgYWRkaXRpb25hbCBhcnRpZmFjdHMgYW5kIGRlcGxveWVkLjwvcD48cD5Gb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudAotZG9jdW1lbnRhdGlvbi48L3A+PHA+VG8gaW1wb3J0IGEgV1NETCBmaWxlIHRvIHlvdXIgV2ViIHByb2plY3QsIGNvbXBsZXRlIHRoZQotZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlNlbGVjdCB5b3VyIHByb2plY3QgaW4gdGhlIEphdmEgRUUgTmF2aWdhdG9yIHBhbmUsIGFuZCBmcm9tIHRoZSA8dWljb250cm9sPkZpbGU8L3VpY29udHJvbD4gbWVudSwKLXNlbGVjdCA8dWljb250cm9sPkltcG9ydDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5HZW5lcmFsPC91aWNvbnRyb2w+PHVpY29udHJvbD5GaWxlCi1TeXN0ZW08L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQgY2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5Ccm93c2U8L3VpY29udHJvbD4gb24gdGhlIG5leHQgcGFnZSBvZiB0aGUgd2l6YXJkCi10byBzZWxlY3QgdGhlIGRpcmVjdG9yaWVzIGZyb20gd2hpY2ggeW91IHdvdWxkIGxpa2UgdG8gYWRkIHRoZSBXU0RMLjwvY21kPgotPC9zdGVwPjw/UHViIENhcmV0Pz4KLTxzdGVwPjxjbWQ+SW4gdGhlIGltcG9ydCBzZWxlY3Rpb24gcGFuZXMsIHVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgdG8gc2VsZWN0Ci1leGFjdGx5IHRoZSByZXNvdXJjZXMgeW91IHdhbnQgdG8gYWRkOiAgPC9jbWQ+PGluZm8+PHVsPgotPGxpPkV4cGFuZCB0aGUgaGllcmFyY2hpZXMgaW4gdGhlIGxlZnQgcGFuZSBhbmQgc2VsZWN0IG9yIGNsZWFyIHRoZSBjaGVja2JveGVzCi10aGF0IHJlcHJlc2VudCB0aGUgZm9sZGVycyBpbiB0aGUgc2VsZWN0ZWQgZGlyZWN0b3J5LiBUaGVuIGluIHRoZSByaWdodCBwYW5lLAotc2VsZWN0IG9yIGNsZWFyIGNoZWNrIGJveGVzIGZvciBpbmRpdmlkdWFsIGZpbGVzLjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5GaWx0ZXIgVHlwZXM8L3VpY29udHJvbD4gdG8gZmlsdGVyIHRoZSBjdXJyZW50IHNlbGVjdGlvbgotZm9yIGZpbGVzIG9mIGEgc3BlY2lmaWMgdHlwZS48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+U2VsZWN0IEFsbDwvdWljb250cm9sPiB0byBzZWxlY3QgYWxsIHJlc291cmNlcyBpbiB0aGUKLWRpcmVjdG9yeSwgdGhlbiBnbyB0aHJvdWdoIGFuZCBkZXNlbGVjdCB0aGUgb25lcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0byBhZGQuPC9saT4KLTxsaT5DbGljayA8dWljb250cm9sPkRlc2VsZWN0IEFsbDwvdWljb250cm9sPiB0byBkZXNlbGVjdCBhbGwgcmVzb3VyY2VzIGluCi10aGUgZGlyZWN0b3J5LCB0aGVuIGdvIHRocm91Z2ggYW5kIGNob29zZSBpbmRpdmlkdWFsIHJlc291cmNlcyB0byBhZGQuPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U3BlY2lmeSB0aGUgV29ya2JlbmNoIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgd2lsbCBiZSB0aGUgaW1wb3J0Ci1kZXN0aW5hdGlvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPldoZW4geW91IGhhdmUgZmluaXNoZWQgc3BlY2lmeWluZyB5b3VyIGltcG9ydCBvcHRpb25zLCBjbGljayA8dWljb250cm9sPkZpbmlzaC48L3VpY29udHJvbD48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPkFsdGVybmF0ZWx5LCB5b3UgY2FuIGltcG9ydCBhIFdTREwgZmlsZSB1c2luZyB0aGUgV1NETCBFeHBsb3Jlci4KLUZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDx4cmVmIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5kaXRhIgotc2NvcGU9InBlZXIiPiBVc2luZyB0aGUgV1NETCBFeHBsb3JlcjwveHJlZj4uICA8L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAzNjc4Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiNzcxYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSW1wb3J0aW5nIGEgV1NETCBmaWxlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiBPcGVuaW5nIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yIHByb3ZpZGVzIHlvdSB3aXRoIGFuIG9wcG9ydHVuaXR5IHRvIGhhdmUgYSBzdHJ1Y3R1cmVkIHZpZXdpbmcgb2YgdGhlIFdTREwgZmlsZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkgdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGltcG9ydGluZywgV2ViIHNlcnZpY2VzLCBpbXBvcnRpbmcgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGltcG9ydGluZywgV2ViIHNlcnZpY2VzLCBpbXBvcnRpbmcgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGltcHdzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5JbXBvcnRpbmcgV1NETCBmaWxlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGltcHdzZGwiPjxhIG5hbWU9InRpbXB3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGU8L2gxPgotCi0KLQotCi08ZGl2PjxwPllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlCi1XU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eQotdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdlYiBTZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIG5ldyBXZWIgc2VydmljZQotZnJvbSBhIFdTREwgZmlsZS4gWW91IG11c3QgZmlyc3QgY3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZS4gQSBXU0RMIGZpbGUKLWNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXU0RMIGVkaXRvci4gVGhpcyBpcyBkZXNjcmliZWQgaW46ICA8YSBocmVmPSIuLi90YXNrcy90Y3J0d3NkbC5odG1sIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+LiBUbyBpbXBvcnQgYSBXU0RMIGZpbGUgZm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGJlbG93LjwvcD4KLTxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5QcmVyZXF1aXNpdGU6PC9zcGFuPiBDcmVhdGUKLWEgcHJvamVjdC4gSXQgaXMgcmVjb21tZW5kIHRoYXQgeW91IGNyZWF0ZSBhIFdlYiBwcm9qZWN0IHNvIHRoYXQgdGhlIFdTREwKLWNhbiBiZSBlYXNpbHkgdXNlZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGFydGlmYWN0cyBhbmQgZGVwbG95ZWQuPC9wPgotPHA+Rm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGEgV2ViIHByb2plY3QsIHJlZmVyIHRvIHRoZSBXZWIgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQKLWRvY3VtZW50YXRpb24uPC9wPgotPHA+VG8gaW1wb3J0IGEgV1NETCBmaWxlIHRvIHlvdXIgV2ViIHByb2plY3QsIGNvbXBsZXRlIHRoZQotZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHByb2plY3QgaW4gdGhlIEphdmEgRUUgTmF2aWdhdG9yIHBhbmUsIGFuZCBmcm9tIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPiBtZW51LAotc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydDwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhbDwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlCi1TeXN0ZW08L3NwYW4+PC9zcGFuPiBhbmQgY2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnJvd3NlPC9zcGFuPiBvbiB0aGUgbmV4dCBwYWdlIG9mIHRoZSB3aXphcmQKLXRvIHNlbGVjdCB0aGUgZGlyZWN0b3JpZXMgZnJvbSB3aGljaCB5b3Ugd291bGQgbGlrZSB0byBhZGQgdGhlIFdTREwuPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgaW1wb3J0IHNlbGVjdGlvbiBwYW5lcywgdXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBzZWxlY3QKLWV4YWN0bHkgdGhlIHJlc291cmNlcyB5b3Ugd2FudCB0byBhZGQ6ICA8L3NwYW4+IDx1bD4KLTxsaT5FeHBhbmQgdGhlIGhpZXJhcmNoaWVzIGluIHRoZSBsZWZ0IHBhbmUgYW5kIHNlbGVjdCBvciBjbGVhciB0aGUgY2hlY2tib3hlcwotdGhhdCByZXByZXNlbnQgdGhlIGZvbGRlcnMgaW4gdGhlIHNlbGVjdGVkIGRpcmVjdG9yeS4gVGhlbiBpbiB0aGUgcmlnaHQgcGFuZSwKLXNlbGVjdCBvciBjbGVhciBjaGVjayBib3hlcyBmb3IgaW5kaXZpZHVhbCBmaWxlcy48L2xpPgotCi08bGk+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsdGVyIFR5cGVzPC9zcGFuPiB0byBmaWx0ZXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCi1mb3IgZmlsZXMgb2YgYSBzcGVjaWZpYyB0eXBlLjwvbGk+Ci0KLTxsaT5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TZWxlY3QgQWxsPC9zcGFuPiB0byBzZWxlY3QgYWxsIHJlc291cmNlcyBpbiB0aGUKLWRpcmVjdG9yeSwgdGhlbiBnbyB0aHJvdWdoIGFuZCBkZXNlbGVjdCB0aGUgb25lcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0byBhZGQuPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlc2VsZWN0IEFsbDwvc3Bhbj4gdG8gZGVzZWxlY3QgYWxsIHJlc291cmNlcyBpbgotdGhlIGRpcmVjdG9yeSwgdGhlbiBnbyB0aHJvdWdoIGFuZCBjaG9vc2UgaW5kaXZpZHVhbCByZXNvdXJjZXMgdG8gYWRkLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNwZWNpZnkgdGhlIFdvcmtiZW5jaCBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IHdpbGwgYmUgdGhlIGltcG9ydAotZGVzdGluYXRpb24uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBzcGVjaWZ5aW5nIHlvdXIgaW1wb3J0IG9wdGlvbnMsIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaC48L3NwYW4+PC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+QWx0ZXJuYXRlbHksIHlvdSBjYW4gaW1wb3J0IGEgV1NETCBmaWxlIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyLgotRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvOiAgPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWwiPlVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9hPi4gIDwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZTU1ODUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0c2V0YmluZCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5TZXR0aW5nIGEgYmluZGluZzwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgYmluZGluZyBpcyBhIHRvcCBsZXZlbCBXU0RMIG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgY29uY3JldGUgc3BlY2lmaWNhdGlvbgotcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgbWVzc2FnZXMgdG8gYW5kIGZyb20gYSB3ZWIgc2VydmljZS4gQSBiaW5kaW5nCi1yZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gVGhlIHN0cnVjdHVyZSBvZiBhIGJpbmRpbmcgY29ycmVzcG9uZHMgdmVyeQotY2xvc2VseSB0byB0aGF0IG9mIHRoZSBwb3J0IHR5cGUuIFRoZSBiaW5kaW5nIGNvbnRhaW5zIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLShmb3IgZXhhbXBsZSwgU09BUCwgaHR0cCwgYW5kIG1pbWUpIHRoYXQgc3BlY2lmeSBwcm90b2NvbCBzcGVjaWZpYyBkZXRhaWxzLgotRWFjaCBwb3J0IHdpdGhpbiBhIHNlcnZpY2UgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBiaW5kaW5nLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmJpbmRpbmdzPGluZGV4dGVybT5jcmVhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+c2V0dGluZwotV1NETCBiaW5kaW5nczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+YmluZGluZ3M8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+WW91IGNhbiBjcmVhdGUgYSBiaW5kaW5nIGJ5IHJpZ2h0IGNsaWNraW5nIGluIGFueSBibGFuayBzcGFjZQotaW4gdGhlIERlc2lnbiB2aWV3IGFuZCBzZWxlY3RpbmcgPHVpY29udHJvbD5BZGQgQmluZGluZzwvdWljb250cm9sPi4gWW91IGNhbgotY3JlYXRlIGEgbmV3IGJpbmRpbmcsIHJldXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS4gPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iY3JlYXRlbmV3YmluZCI+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgYmluZGluZzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBjcmVhdGUgYSBuZXcgYmluZGluZyBmb3IgeW91ciBwb3J0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgPGI+U2V0IEJpbmRpbmcKLT4gTmV3IEJpbmRpbmc8L2I+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBiaW5kaW5nLjwvY21kPjxpbmZvPlRoZQotbmFtZSBzaG91bGQgYmUgdW5pcXVlIGFtb25nIGFsbCBiaW5kaW5ncyBkZWZpbmVkIHdpdGhpbiB0aGUgZW5jbG9zaW5nIFdTREwKLWRvY3VtZW50LiBDbGljayA8Yj5PSy48L2I+IFRvIHNlbGVjdCB0aGUgbmV3IGJpbmRpbmcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5kaW5nIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0Pjxub3RlPkEgPGI+UG9ydFR5cGU8L2I+IGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kCi10aGUgYWJzdHJhY3QgbWVzc2FnZXMgaW52b2x2ZWQuIFlvdSBjYW4gZWl0aGVyIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yCi15b3VyIGJpbmRpbmcsIHJldXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCi1zZWUgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSIuLi90YXNrcy90c2V0cHJ0dC5kaXRhIiBzY29wZT0icGVlciI+U2V0dGluZwotYSBQb3J0IFR5cGU8L3hyZWY+Ljwvbm90ZT48bm90ZSB0eXBlPSJ0aXAiPllvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgYmluZGluZwotZm9yIHlvdXIgcG9ydCB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBSaWdodCBjbGljayBvbiB0aGUgPHVpY29udHJvbD5CaW5kaW5nczwvdWljb250cm9sPiBmb2xkZXIKLWFuZCBzZWxlY3QgPHVpY29udHJvbD5BZGQgQmluZGluZzwvdWljb250cm9sPi48L25vdGU+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9InJldXNlYmluZGluZyI+Ci08dGl0bGU+UmV1c2luZyBhIGJpbmRpbmcgZm9yIGEgcG9ydDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyByZXVzZSBhIGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHNlbGVjdCB5b3VyIHBvcnQuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkZyb20gdGhlIDxiPkJpbmRpbmc8L2I+IGRyb3AgZG93biBsaXN0LCBzZWxlY3QgdGhlIGJpbmRpbmcgeW91Ci13YW50IHRvIHVzZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJyZWdlbmVyYXRpbmdhYmluZGluZyI+Ci08dGl0bGU+UmVnZW5lcmF0aW5nIGEgYmluZGluZzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD5UbyByZWdlbmVyYXRlIGEgYmluZGluZywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlJpZ2h0LWNsaWNrIHRoZSBiaW5kaW5nIHlvdSB3YW50IHRvIHJlZ2VuZXJhdGUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgPHVpY29udHJvbD5HZW5lcmF0ZSBCaW5kaW5nIENvbnRlbnQ8L3VpY29udHJvbD4uPC9jbWQ+PD9QdWIgQ2FyZXQxPz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+U3BlY2lmeSB0aGUgcmVxdWlyZWQgYmluZGluZyBpbmZvcm1hdGlvbi4gSWYgeW91IGFyZSBtb2RpZnlpbmcKLWFuIGV4aXN0aW5nIGJpbmRpbmcsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5PdmVyd3JpdGUgZXhpc3RpbmcgYmluZGluZyBpbmZvcm1hdGlvbjwvdWljb250cm9sPiBjaGVjawotYm94LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImltcGJpbmRpbmciPgotPHRpdGxlPkltcG9ydCBhbiBleGlzdGluZyBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PlRvIGltcG9ydCBhbiBleGlzdGluZyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgYW5kIGNsaWNrICA8Yj5TZXQgQmluZGluZwotPiBFeGlzdGluZyBCaW5kaW5nLjwvYj48L2NtZD48L3N0ZXA+Ci08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBpbXBvcnQgYSBiaW5kaW5nIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvY21kPgotPGNob2ljZXM+Ci08Y2hvaWNlPjxiPldvcmtzcGFjZTwvYj46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPjogbGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkN1cnJlbnQgUmVzb3VyY2U8L2I+OiBsaXN0cyB0aGUgYmluZGluZyB0eXBlcyBhdmFpbGFibGUgaW4geW91cgotY3VycmVudCBmaWxlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5Xb3JraW5nIFNldHM8L2I+OiBsaXN0cyB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldAotb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPGI+Q2hvb3NlPC9iPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxiPk9LPC9iPi48L2Nob2ljZT4KLTwvY2hvaWNlcz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VGhlIGJpbmRpbmdzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uIEluCi10aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5kaW5nCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+Ci08P1B1YiAqMDAwMDAwNTE3ND8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYjViMDguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlNldHRpbmcgYSBiaW5kaW5nIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgYmluZGluZyBpcyBhIHRvcCBsZXZlbCBXU0RMIG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgY29uY3JldGUgc3BlY2lmaWNhdGlvbiByZWdhcmRpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZiBtZXNzYWdlcyB0byBhbmQgZnJvbSBhIHdlYiBzZXJ2aWNlLiBBIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFRoZSBzdHJ1Y3R1cmUgb2YgYSBiaW5kaW5nIGNvcnJlc3BvbmRzIHZlcnkgY2xvc2VseSB0byB0aGF0IG9mIHRoZSBwb3J0IHR5cGUuIFRoZSBiaW5kaW5nIGNvbnRhaW5zIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgKGZvciBleGFtcGxlLCBTT0FQLCBodHRwLCBhbmQgbWltZSkgdGhhdCBzcGVjaWZ5IHByb3RvY29sIHNwZWNpZmljIGRldGFpbHMuIEVhY2ggcG9ydCB3aXRoaW4gYSBzZXJ2aWNlIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgYmluZGluZy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBiaW5kaW5nIGlzIGEgdG9wIGxldmVsIFdTREwgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBjb25jcmV0ZSBzcGVjaWZpY2F0aW9uIHJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gVGhlIHN0cnVjdHVyZSBvZiBhIGJpbmRpbmcgY29ycmVzcG9uZHMgdmVyeSBjbG9zZWx5IHRvIHRoYXQgb2YgdGhlIHBvcnQgdHlwZS4gVGhlIGJpbmRpbmcgY29udGFpbnMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyAoZm9yIGV4YW1wbGUsIFNPQVAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4gRWFjaCBwb3J0IHdpdGhpbiBhIHNlcnZpY2UgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBiaW5kaW5nLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYmluZGluZ3MsIGNyZWF0aW5nLCBzZXR0aW5nIFdTREwgYmluZGluZ3MsIFdTREwiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGJpbmRpbmdzLCBjcmVhdGluZywgc2V0dGluZyBXU0RMIGJpbmRpbmdzLCBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0c2V0YmluZCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlNldHRpbmcgYSBiaW5kaW5nPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0c2V0YmluZCI+PGEgbmFtZT0idHNldGJpbmQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlNldHRpbmcgYSBiaW5kaW5nPC9oMT4KLQotCi0KLTxkaXY+PHA+QSBiaW5kaW5nIGlzIGEgdG9wIGxldmVsIFdTREwgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBjb25jcmV0ZSBzcGVjaWZpY2F0aW9uCi1yZWdhcmRpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZiBtZXNzYWdlcyB0byBhbmQgZnJvbSBhIHdlYiBzZXJ2aWNlLiBBIGJpbmRpbmcKLXJlZmVyZW5jZXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiBUaGUgc3RydWN0dXJlIG9mIGEgYmluZGluZyBjb3JyZXNwb25kcyB2ZXJ5Ci1jbG9zZWx5IHRvIHRoYXQgb2YgdGhlIHBvcnQgdHlwZS4gVGhlIGJpbmRpbmcgY29udGFpbnMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotKGZvciBleGFtcGxlLCBTT0FQLCBodHRwLCBhbmQgbWltZSkgdGhhdCBzcGVjaWZ5IHByb3RvY29sIHNwZWNpZmljIGRldGFpbHMuCi1FYWNoIHBvcnQgd2l0aGluIGEgc2VydmljZSByZWZlcmVuY2VzIGV4YWN0bHkgb25lIGJpbmRpbmcuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Zb3UgY2FuIGNyZWF0ZSBhIGJpbmRpbmcgYnkgcmlnaHQgY2xpY2tpbmcgaW4gYW55IGJsYW5rIHNwYWNlCi1pbiB0aGUgRGVzaWduIHZpZXcgYW5kIHNlbGVjdGluZyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgQmluZGluZzwvc3Bhbj4uIFlvdSBjYW4KLWNyZWF0ZSBhIG5ldyBiaW5kaW5nLCByZXVzZSBhbiBleGlzdGluZyBvbmUsIG9yIGltcG9ydCBvbmUuIDwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImNyZWF0ZW5ld2JpbmQiPjxhIG5hbWU9ImNyZWF0ZW5ld2JpbmQiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+Q3JlYXRpbmcgYSBuZXcgYmluZGluZzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBjcmVhdGUgYSBuZXcgYmluZGluZyBmb3IgeW91ciBwb3J0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgPHN0cm9uZz5TZXQgQmluZGluZwotJmd0OyBOZXcgQmluZGluZzwvc3Ryb25nPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBiaW5kaW5nLjwvc3Bhbj4gVGhlCi1uYW1lIHNob3VsZCBiZSB1bmlxdWUgYW1vbmcgYWxsIGJpbmRpbmdzIGRlZmluZWQgd2l0aGluIHRoZSBlbmNsb3NpbmcgV1NETAotZG9jdW1lbnQuIENsaWNrIDxzdHJvbmc+T0suPC9zdHJvbmc+IFRvIHNlbGVjdCB0aGUgbmV3IGJpbmRpbmcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpbmRpbmcgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZAotaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48ZGl2IGNsYXNzPSJub3RlIj48c3BhbiBjbGFzcz0ibm90ZXRpdGxlIj5Ob3RlOjwvc3Bhbj4gQSA8c3Ryb25nPlBvcnRUeXBlPC9zdHJvbmc+IGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kCi10aGUgYWJzdHJhY3QgbWVzc2FnZXMgaW52b2x2ZWQuIFlvdSBjYW4gZWl0aGVyIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yCi15b3VyIGJpbmRpbmcsIHJldXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCi1zZWUgPGEgaHJlZj0iLi4vdGFza3MvdHNldHBydHQuZGl0YSI+U2V0dGluZyBhIFBvcnQgVHlwZTwvYT4uPC9kaXY+Ci08ZGl2IGNsYXNzPSJ0aXAiPjxzcGFuIGNsYXNzPSJ0aXB0aXRsZSI+VGlwOjwvc3Bhbj4gWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nCi1mb3IgeW91ciBwb3J0IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFJpZ2h0IGNsaWNrIG9uIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CaW5kaW5nczwvc3Bhbj4gZm9sZGVyCi1hbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZCBCaW5kaW5nPC9zcGFuPi48L2Rpdj4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJyZXVzZWJpbmRpbmciPjxhIG5hbWU9InJldXNlYmluZGluZyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5SZXVzaW5nIGEgYmluZGluZyBmb3IgYSBwb3J0PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHJldXNlIGEgYmluZGluZyBmb3IgeW91ciBwb3J0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCBzZWxlY3QgeW91ciBwb3J0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxzdHJvbmc+R2VuZXJhbDwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RnJvbSB0aGUgPHN0cm9uZz5CaW5kaW5nPC9zdHJvbmc+IGRyb3AgZG93biBsaXN0LCBzZWxlY3QgdGhlIGJpbmRpbmcgeW91Ci13YW50IHRvIHVzZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0icmVnZW5lcmF0aW5nYWJpbmRpbmciPjxhIG5hbWU9InJlZ2VuZXJhdGluZ2FiaW5kaW5nIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlJlZ2VuZXJhdGluZyBhIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gcmVnZW5lcmF0ZSBhIGJpbmRpbmcsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5SaWdodC1jbGljayB0aGUgYmluZGluZyB5b3Ugd2FudCB0byByZWdlbmVyYXRlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdlbmVyYXRlIEJpbmRpbmcgQ29udGVudDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNwZWNpZnkgdGhlIHJlcXVpcmVkIGJpbmRpbmcgaW5mb3JtYXRpb24uIElmIHlvdSBhcmUgbW9kaWZ5aW5nCi1hbiBleGlzdGluZyBiaW5kaW5nLCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk92ZXJ3cml0ZSBleGlzdGluZyBiaW5kaW5nIGluZm9ybWF0aW9uPC9zcGFuPiBjaGVjawotYm94Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJpbXBiaW5kaW5nIj48YSBuYW1lPSJpbXBiaW5kaW5nIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkltcG9ydCBhbiBleGlzdGluZyBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIGltcG9ydCBhbiBleGlzdGluZyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgYW5kIGNsaWNrICA8c3Ryb25nPlNldCBCaW5kaW5nCi0mZ3Q7IEV4aXN0aW5nIEJpbmRpbmcuPC9zdHJvbmc+PC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZwotdG8gZmlsdGVyIHRoZSBsaXN0IG9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPllvdSBjYW4gaW1wb3J0IGEgYmluZGluZyBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L3NwYW4+Ci08dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLQotPGxpPjxzdHJvbmc+RW5jbG9zaW5nIFByb2plY3Q8L3N0cm9uZz46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkN1cnJlbnQgUmVzb3VyY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBiaW5kaW5nIHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyCi1jdXJyZW50IGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+V29ya2luZyBTZXRzPC9zdHJvbmc+OiBsaXN0cyB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldAotb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgYmluZGluZ3Mgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uIEluCi10aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5kaW5nCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDk4OGQ3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHNldHBydHQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U2V0dGluZyBhIHBvcnQgdHlwZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdAotbWVzc2FnZXMgaW52b2x2ZWQuIEVhY2ggb3BlcmF0aW9uIHJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuCi1BIHBvcnQgdHlwZSBpcyByZWZlcmVuY2VkIGJ5IGEgYmluZGluZyBvYmplY3QuIEVhY2ggYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkKLW9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcwotZXhhY3RseSBvbmUgcG9ydCB0eXBlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5zZXR0aW5nIHBvcnQgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5zZXR0aW5nIHBvcnQgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+WW91IGNhbiBjcmVhdGUgYSBwb3J0IHR5cGUgYnkgcmlnaHQgY2xpY2tpbmcgaW4gYW55IGJsYW5rIHNwYWNlCi1pbiB0aGUgRGVzaWduIHZpZXcgYW5kIHNlbGVjdGluZyA8dWljb250cm9sPkFkZCBQb3J0VHlwZTwvdWljb250cm9sPi4gQXMgYQotY29udmVuaWVuY2UgeW91IGNhbiBhbHNvIGFkZCBhIHBvcnQgdHlwZSB2aWEgYSBiaW5kaW5nLiBUaGlzIGFsbG93cyB5b3UgdG8KLWNyZWF0ZSBhIHBvcnQgdHlwZSBhbmQgbW9kaWZ5IHRoZSBiaW5kaW5nIHRvIHJlZmVyZW5jZSB0aGUgbmV3IHBvcnQgdHlwZSBpbgotb25lIGFjdGlvbi4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCByZS11c2UKLWFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJjcmVhdGVwb3J0dHlwZSI+Ci08dGl0bGU+Q3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgY29tcGxldGUKLXRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgPGI+U2V0IFBvcnRUeXBlID4gTmV3IFBvcnRUeXBlPC9iPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgcG9ydCB0eXBlIGluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCBhbmQgY2xpY2sgPGI+T0s8L2I+LjwvY21kPgotPGluZm8+VGhlIG5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBuYW1lIGFtb25nIGFsbCBwb3J0IHR5cGVzIGRlZmluZWQgd2l0aGluIGluCi10aGUgZW5jbG9zaW5nIFdTREwgZG9jdW1lbnQuIFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQgdHlwZSwgY2xpY2sgdGhlIHBvcnQgdHlwZQotb2JqZWN0LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3J0IHR5cGUKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+IDxub3RlIHR5cGU9InRpcCI+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZwotdXNpbmcgdGhlIE91dGxpbmUgdmlldy48L25vdGU+PHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgcG9ydCB0eXBlLCB5b3UgY2FuCi1hZGQgb3BlcmF0aW9ucyB0byBpdCwgd2hpY2ggY2FuIHNlbmQgYW5kIHJlY2VpdmUgbWVzc2FnZXMuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJyZXVzZXBvcnR0eXBlIj4KLTx0aXRsZT5SZXVzZSBhIHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPklmIHlvdSB3YW50IHRvIHJldXNlIGEgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsIGNvbXBsZXRlIHRoZQotZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgb24gYSBiaW5kaW5nIG9iamVjdCAobm90ZSB0aGF0Ci1wb3J0IG11c3QgcmVmZXJlbmNlIGEgYmluZGluZykgYW5kIGNsaWNrICA8Yj5TZXQgUG9ydCBUeXBlID4gRXhpc3RpbmcgUG9ydFR5cGU8L2I+LjwvY21kPgotPC9zdGVwPgotPHN0ZXAgaW1wb3J0YW5jZT0ib3B0aW9uYWwiPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZwotdG8gZmlsdGVyIHRoZSBsaXN0IG9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdSBjYW4gY2hhbmdlIHRoZSBzY29wZSBvZiB0aGUgbGlzdCBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6PC9jbWQ+Ci08Y2hvaWNlcz4KLTxjaG9pY2U+PGI+V29ya3NwYWNlPC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkN1cnJlbnQgUmVzb3VyY2U8L2I+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50Ci1maWxlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5Xb3JraW5nIFNldHM8L2I+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQKLXNldCBvZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UgY2FuIHNlbGVjdAotZmlsZXMgZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUKLXNlbGVjdGVkIHRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvY2hvaWNlPgotPC9jaG9pY2VzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgZXhpc3RpbmcgcG9ydCB0eXBlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPGI+T0s8L2I+LjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iaW1wb3J0cG9ydHR5cGUiPgotPHRpdGxlPkltcG9ydCBhIHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPklmIHlvdSB3YW50IHRvIGltcG9ydCBhbiBleGlzdGluZyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywKLWNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgIDxiPlNldCBQb3J0IFR5cGUgPiBFeGlzdGluZyBQb3J0VHlwZS48L2I+PC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBpbXBvcnQgYSBwb3J0IHR5cGUgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9jbWQ+Ci08Y2hvaWNlcz4KLTxjaG9pY2U+PGI+V29ya3NwYWNlPC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj46PD9QdWIgQ2FyZXQ/PiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4KLWEgc3BlY2lmaWVkIHNldCBvZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UKLWNhbiBzZWxlY3QgZmlsZXMgZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuCi1PbmNlIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvY2hvaWNlPgotPC9jaG9pY2VzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgcG9ydCB0eXBlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPGI+T0s8L2I+LgotSW4gdGhlIERlc2lnbiB2aWV3LCBjbGljayB0aGUgcG9ydCB0eXBlIG9iamVjdC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3J0IHR5cGUKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDA1Mzg5Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I1YTg3NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iU2V0dGluZyBhIHBvcnQgdHlwZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIHBvcnQgdHlwZSBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUgYWJzdHJhY3QgbWVzc2FnZXMgaW52b2x2ZWQuIEVhY2ggb3BlcmF0aW9uIHJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuIEEgcG9ydCB0eXBlIGlzIHJlZmVyZW5jZWQgYnkgYSBiaW5kaW5nIG9iamVjdC4gRWFjaCBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiBTaW5jZSBlYWNoIHBvcnQgcmVmZXJzIHRvIGV4YWN0bHkgb25lIGJpbmRpbmcsIGVhY2ggcG9ydCBoYXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIHBvcnQgdHlwZSBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUgYWJzdHJhY3QgbWVzc2FnZXMgaW52b2x2ZWQuIEVhY2ggb3BlcmF0aW9uIHJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuIEEgcG9ydCB0eXBlIGlzIHJlZmVyZW5jZWQgYnkgYSBiaW5kaW5nIG9iamVjdC4gRWFjaCBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiBTaW5jZSBlYWNoIHBvcnQgcmVmZXJzIHRvIGV4YWN0bHkgb25lIGJpbmRpbmcsIGVhY2ggcG9ydCBoYXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIHNldHRpbmcgcG9ydCB0eXBlcywgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgc2V0dGluZyBwb3J0IHR5cGVzLCBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRzZXRwcnR0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+U2V0dGluZyBhIHBvcnQgdHlwZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHNldHBydHQiPjxhIG5hbWU9InRzZXRwcnR0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5TZXR0aW5nIGEgcG9ydCB0eXBlPC9oMT4KLQotCi0KLTxkaXY+PHA+QSBwb3J0IHR5cGUgaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQgdGhlIGFic3RyYWN0Ci1tZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4KLUEgcG9ydCB0eXBlIGlzIHJlZmVyZW5jZWQgYnkgYSBiaW5kaW5nIG9iamVjdC4gRWFjaCBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseQotb25lIHBvcnQgdHlwZS4gU2luY2UgZWFjaCBwb3J0IHJlZmVycyB0byBleGFjdGx5IG9uZSBiaW5kaW5nLCBlYWNoIHBvcnQgaGFzCi1leGFjdGx5IG9uZSBwb3J0IHR5cGUuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Zb3UgY2FuIGNyZWF0ZSBhIHBvcnQgdHlwZSBieSByaWdodCBjbGlja2luZyBpbiBhbnkgYmxhbmsgc3BhY2UKLWluIHRoZSBEZXNpZ24gdmlldyBhbmQgc2VsZWN0aW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZCBQb3J0VHlwZTwvc3Bhbj4uIEFzIGEKLWNvbnZlbmllbmNlIHlvdSBjYW4gYWxzbyBhZGQgYSBwb3J0IHR5cGUgdmlhIGEgYmluZGluZy4gVGhpcyBhbGxvd3MgeW91IHRvCi1jcmVhdGUgYSBwb3J0IHR5cGUgYW5kIG1vZGlmeSB0aGUgYmluZGluZyB0byByZWZlcmVuY2UgdGhlIG5ldyBwb3J0IHR5cGUgaW4KLW9uZSBhY3Rpb24uIFlvdSBjYW4gZWl0aGVyIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgcmUtdXNlCi1hbiBleGlzdGluZyBvbmUsIG9yIGltcG9ydCBvbmUuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iY3JlYXRlcG9ydHR5cGUiPjxhIG5hbWU9ImNyZWF0ZXBvcnR0eXBlIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIGEgYmluZGluZzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsIGNvbXBsZXRlCi10aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgb24gYSBiaW5kaW5nIG9iamVjdCAobm90ZSB0aGF0Ci1wb3J0IG11c3QgcmVmZXJlbmNlIGEgYmluZGluZykgYW5kIGNsaWNrIDxzdHJvbmc+U2V0IFBvcnRUeXBlICZndDsgTmV3IFBvcnRUeXBlPC9zdHJvbmc+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHlwZSB0aGUgbmFtZSBvZiB0aGUgcG9ydCB0eXBlIGluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9zcGFuPgotIFRoZSBuYW1lIHNob3VsZCBiZSB1bmlxdWUgbmFtZSBhbW9uZyBhbGwgcG9ydCB0eXBlcyBkZWZpbmVkIHdpdGhpbiBpbgotdGhlIGVuY2xvc2luZyBXU0RMIGRvY3VtZW50LiBUbyBzZWxlY3QgdGhlIG5ldyBwb3J0IHR5cGUsIGNsaWNrIHRoZSBwb3J0IHR5cGUKLW9iamVjdC48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3J0IHR5cGUKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj4gPGRpdiBjbGFzcz0idGlwIj48c3BhbiBjbGFzcz0idGlwdGl0bGUiPlRpcDo8L3NwYW4+IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcKLXVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuPC9kaXY+Ci08cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBwb3J0IHR5cGUsIHlvdSBjYW4KLWFkZCBvcGVyYXRpb25zIHRvIGl0LCB3aGljaCBjYW4gc2VuZCBhbmQgcmVjZWl2ZSBtZXNzYWdlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0icmV1c2Vwb3J0dHlwZSI+PGEgbmFtZT0icmV1c2Vwb3J0dHlwZSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5SZXVzZSBhIHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPklmIHlvdSB3YW50IHRvIHJldXNlIGEgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsIGNvbXBsZXRlIHRoZQotZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgIDxzdHJvbmc+U2V0IFBvcnQgVHlwZSAmZ3Q7IEV4aXN0aW5nIFBvcnRUeXBlPC9zdHJvbmc+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Ryb25nPk9wdGlvbmFsOiA8L3N0cm9uZz48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZwotdG8gZmlsdGVyIHRoZSBsaXN0IG9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPllvdSBjYW4gY2hhbmdlIHRoZSBzY29wZSBvZiB0aGUgbGlzdCBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6PC9zcGFuPgotPHVsPgotPGxpPjxzdHJvbmc+V29ya3NwYWNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLQotPGxpPjxzdHJvbmc+RW5jbG9zaW5nIFByb2plY3Q8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+Q3VycmVudCBSZXNvdXJjZTwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudAotZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZAotc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxzdHJvbmc+Q2hvb3NlPC9zdHJvbmc+LiBZb3UgY2FuIHNlbGVjdAotZmlsZXMgZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUKLXNlbGVjdGVkIHRoZSBmaWxlcywgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L2xpPgotCi08L3VsPgotCi08L2xpPgotCi08bGk+PHNwYW4+VGhlIGV4aXN0aW5nIHBvcnQgdHlwZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iaW1wb3J0cG9ydHR5cGUiPjxhIG5hbWU9ImltcG9ydHBvcnR0eXBlIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkltcG9ydCBhIHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPklmIHlvdSB3YW50IHRvIGltcG9ydCBhbiBleGlzdGluZyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywKLWNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayAgPHN0cm9uZz5TZXQgUG9ydCBUeXBlICZndDsgRXhpc3RpbmcgUG9ydFR5cGUuPC9zdHJvbmc+PC9zcGFuPgotPC9saT4KLQotPGxpPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+WW91IGNhbiBpbXBvcnQgYSBwb3J0IHR5cGUgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9zcGFuPgotPHVsPgotPGxpPjxzdHJvbmc+V29ya3NwYWNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLQotPGxpPjxzdHJvbmc+RW5jbG9zaW5nIFByb2plY3Q8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+V29ya2luZyBTZXRzPC9zdHJvbmc+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4KLWEgc3BlY2lmaWVkIHNldCBvZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91Ci1jYW4gc2VsZWN0IGZpbGVzIGZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LgotT25jZSB5b3UgaGF2ZSBzZWxlY3RlZCB0aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLQotPC9saT4KLQotPGxpPjxzcGFuPlRoZSBwb3J0IHR5cGVzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LgotSW4gdGhlIERlc2lnbiB2aWV3LCBjbGljayB0aGUgcG9ydCB0eXBlIG9iamVjdC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3J0IHR5cGUKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcmNfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcmNfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZTYwYWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy5kaXRhbWFwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIgIm1hcC5kdGQiPgotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzd3NkbGVkaXRvcmMiCi1pZD0id3N3c2RsZWRpdG9yYyIgdGl0bGU9Indzd3NkbGVkaXRvcmMiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgZWRpdG9yIj4KLTwvdG9waWNyZWY+Ci08L21hcD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhODI2YjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGlua190bz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbCN3c3dzZGxlZGl0b3JjIiBsYWJlbD0id3N3c2RsZWRpdG9yYyIgdG9waWM9ImNvbmNlcHRzL2N3c2RsZWQuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvciIgaHJlZj0iY29uY2VwdHMvY3dzZGxlZC5odG1sIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MGE1Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3N3c2RsZWRpdG9ydCIKLWlkPSJ3c3dzZGxlZGl0b3J0IiB0aXRsZT0id3N3c2RsZWRpdG9ydCI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGltcHdzZGwuZGl0YSIgbmF2dGl0bGU9IkltcG9ydGluZyBXU0RMIGZpbGVzIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnR3c2RsLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBXU0RMIGZpbGVzIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgZWRpdG9yIj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90ZWR0d3NkbC5kaXRhIiBuYXZ0aXRsZT0iRWRpdGluZyBXU0RMIGZpbGVzIj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkc3J2Yy5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgc2VydmljZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRwb3J0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzZXRwcnR0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJTZXR0aW5nIGEgcG9ydCB0eXBlIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHNldGJpbmQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IlNldHRpbmcgYSBiaW5kaW5nIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZG9wZXIuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhbiBvcGVyYXRpb24iPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkbWVzcy5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgbWVzc2FnZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRwYXJ0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnRpbXB0LmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGNydHR5cGUuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YSIKLW5hdnRpdGxlPSJFeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBzY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTwvbWFwPgotPD9QdWIgKjAwMDAwMDE3MTM/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk4NGUwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGlua190bz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbCN3c3dzZGxlZGl0b3J0IiBsYWJlbD0id3N3c2RsZWRpdG9ydCIgdG9waWM9InRhc2tzL3RpbXB3c2RsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvciIgaHJlZj0iY29uY2VwdHMvY3dzZGxlZC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRWRpdGluZyBXU0RMIGZpbGVzIiBocmVmPSJ0YXNrcy90ZWR0d3NkbC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgc2VydmljZSIgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJTZXR0aW5nIGEgcG9ydCB0eXBlIiBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlNldHRpbmcgYSBiaW5kaW5nIiBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhbiBvcGVyYXRpb24iIGhyZWY9InRhc2tzL3RhZGRvcGVyLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgbWVzc2FnZSIgaHJlZj0idGFza3MvdGFkZG1lc3MuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIgaHJlZj0idGFza3MvdGFkZHBhcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IiBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sIi8+Ci08L3RvcGljPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWwiLz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg1YTY5Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcl8xLjAuMC5qYXIKLWJhawotdGVtcApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDdjNDZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTczN2M5YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIE1heSAwNyAyMzowOToxMCBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZiYjdiMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIAotCi0JVGhpcyBzY3JpcHQgYnVpbGQgdGhlIEhlbHAgcGx1Zy1pbiBieSB0cmFuc2Zvcm1pbmcgdGhlIERJVEEgc291cmNlIGZpbGVzIGludG8gSFRNTC4KLQkKLQlUbyB1c2UgdGhpcyBzY3JpcHQsIHlvdSBtdXN0IGluc3RhbGwgRElUQS1PVCBvbiB5b3VyIG1hY2hpbmUgaW4gdGhlIGRpcmVjdG9yeQotCWRlZmluZWQgYnkgdGhlIGRpdGEub3QuZGlyIHByb3BlcnR5LgotCQotCVJ1biB0aGUgZGVmYXVsdCB0YXJnZXQgYWZ0ZXIgeW91IGVkaXQgdGhlIERJVEEgc291cmNlIGZpbGVzIHRvIHJlZ2VuZXJhdGUgdGhlIEhUTUwuCi0JCi0JVG8gY3VzdG9taXplIHRoaXMgc2NyaXB0IGZvciBvdGhlciBIZWxwIHBsdWctaW5zLCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBhcmdzLmlucHV0IHByb3BlcnR5Ci0JdG8gYmUgdGhlIERJVEEgbWFwIGZpbGUgZm9yIHRoZSBwbHVnLWluLgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBsaW5rcyB0byBzaWJsaW5nIEhlbHAgcGx1Zy1pbnMgaGF2ZSBzY29wZT0icGVlciIsIG90aGVyd2lzZSB0aGUKLQlvdXRwdXQgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aWxsIGJlIHNoaWZ0ZWQgaW5jb3JyZWN0bHkuCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IHlvdSBoYW5kIGNvZGUgeW91ciBwbHVnaW4ueG1sIGZpbGUgaW4gbXlwbHVnaW4ueG1sLiBUaGlzIGZpbGUKLQl3aWxsIGJlIGNvcGllZCBvdmVyIHRoZSBnZW5lcmF0ZWQgcGx1Z2luLnhtbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGJlaW5nIGdlbmVyYXRlZCBjb3JyZWN0bHkKLQlieSBESVRBLU9ULgotCQotCUNoYW5nZUxvZzoKLQkyMDA2LTA0LTA1IEFydGh1ciBSeW1hbiA8cnltYW5AY2EuaWJtLmNvbT4KLQktIENyZWF0ZWQuCi0KLS0tPgotPHByb2plY3QgbmFtZT0iZWNsaXBzZWhlbHAiIGRlZmF1bHQ9ImFsbCI+Ci0KLQk8cHJvcGVydHkgbmFtZT0iZGl0YS5vdC5kaXIiIGxvY2F0aW9uPSJDOi9ESVRBLU9UMS4yLjIiIC8+Ci0KLQk8cGF0aCBpZD0iZG9zdC5jbGFzcy5wYXRoIj4KLQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9bGliJHtmaWxlLnNlcGFyYXRvcn1kb3N0LmphciIgLz4KLQk8L3BhdGg+Ci0KLQk8dGFza2RlZiBuYW1lPSJpbnRlZ3JhdGUiIGNsYXNzbmFtZT0ib3JnLmRpdGEuZG9zdC5wbGF0Zm9ybS5JbnRlZ3JhdG9yVGFzayI+Ci0JCTxjbGFzc3BhdGggcmVmaWQ9ImRvc3QuY2xhc3MucGF0aCIgLz4KLQk8L3Rhc2tkZWY+Ci0JPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImludGVncmF0ZSwgZWNsaXBzZWhlbHAiPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0iaW50ZWdyYXRlIj4KLQkJPGludGVncmF0ZSBkaXRhZGlyPSIke2RpdGEub3QuZGlyfSIgLz4KLQk8L3RhcmdldD4KLQotCTwhLS0gcmV2aXNlIGJlbG93IGhlcmUgLS0+Ci0JPHRhcmdldCBuYW1lPSJlY2xpcHNlaGVscCI+Ci0JCTxhbnQgYW50ZmlsZT0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWNvbmR1Y3Rvci54bWwiIHRhcmdldD0iaW5pdCIgZGlyPSIke2RpdGEub3QuZGlyfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jb3B5Y3NzIiB2YWx1ZT0ibm8iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5jc3NwYXRoIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS5wcm92aWRlciIgdmFsdWU9IkVjbGlwc2Uub3JnIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuZWNsaXBzZS52ZXJzaW9uIiB2YWx1ZT0iMS41LjAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5pbnB1dCIgbG9jYXRpb249Indzd3NpdGVzdF90b2MuZGl0YW1hcCIgLz4gICAgCQkKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iLi4iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZmUwMmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMy5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmViMTdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGFza3MvKi5odG0qLFwKLSAgICAgICAgICAgICAgIHdzd3NpdGVzdF90b2MueG1sLFwKLSAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGluZGV4LyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcyxcCi0JCSAgICAgICAqLm1hcGxpc3QsXAotICAgICAgICAgICAgICAgKi5kaXRhbWFwLFwKLQkJICAgICAgdGFza3MvKi5kaXRhCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy90cmFmZmljLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbWFnZXMvdHJhZmZpYy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMWVhNGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy90cmFmZmljLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbWFnZXMvd3NpdmFsaWNvLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbWFnZXMvd3NpdmFsaWNvLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjYWQ4NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3dzaXZhbGljby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvXzMuY2ZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L18zLmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE3ODZiNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvXzMuY2ZzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MjMyNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mzg1YjI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjE1OjUyIEVEVCAyMDA3DQotb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcj1vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyXG4xLjAuMjAyLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3OTE1MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjE1OjUyIEVEVCAyMDA3DQotbHVjZW5lPTEuNC4xMDMudjIwMDYwNjAxDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjIuMC52MjAwNjA2MDE/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGZjNmE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjE1OjUyIEVEVCAyMDA3DQotL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YjVkMGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyY2YzYmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzaXRlc3RfdG9jLnhtbCIvPiAKLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+ICAKLTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci5tYXBsaXN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIubWFwbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q1OGEyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzaXRlc3RfdG9jLmRpdGFtYXAiLz4KLSAgPC9uYXY+Ci0gIDxsaW5rPgotICAgIDxtYXAgZmlsZT0id3N3c2l0ZXN0X3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzllZmQ0Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGh0bWwKLSAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9InNlY3VyaXR5IiBjb250ZW50PSJwdWJsaWMiIC8+Ci08bWV0YSBuYW1lPSJSb2JvdHMiIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgbmFtZT0iREMuRm9ybWF0IiBjb250ZW50PSJYSFRNTCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9pYm1kaXRhLmNzcyIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiAvPgotPHRpdGxlPkluZGV4PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPkluZGV4PC9oMT4KLTxzdHJvbmc+VDwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPlRDUC9JUCBNb25pdG9yCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciI+dGVzdGluZyBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz5XPC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+V2ViIHNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciI+bW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciI+dGVzdGluZyB0cmFmZmljPC9hPgotPC9saT4KLTxsaT52YWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIj5pbnRlcm9wZXJhYmlsaXR5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NpdmFsLmh0bWwjdHdzaXZhbCI+dmFsaWRhdGluZzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NkbHZhbC5odG1sI3R3c2RsdmFsIj52YWxpZGF0aW5nIFdTREw8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1MtSQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIj52YWxpZGF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldTREwKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NkbHZhbC5odG1sI3R3c2RsdmFsIj52YWxpZGF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU0N2I0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxpbmRleD4KLSAgPGVudHJ5IGtleXdvcmQ9IldTREwiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJ2YWxpZGF0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NkbHZhbC5odG1sI3R3c2RsdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXU0RMIGZpbGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmcgV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzZGx2YWwuaHRtbCN0d3NkbHZhbCIgdGl0bGU9IlZhbGlkYXRpbmcgV1NETCBmaWxlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InRlc3RpbmcgdHJhZmZpYyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciIgdGl0bGU9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1vbml0b3JpbmcgVENQL0lQIHRyYWZmaWMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Rtb25pdG9yLmh0bWwjdG1vbml0b3IiIHRpdGxlPSJVc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ2YWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZSI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0idmFsaWRhdGluZyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NpdmFsLmh0bWwjdHdzaXZhbCIgdGl0bGU9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iaW50ZXJvcGVyYWJpbGl0eSI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NpdmFsLmh0bWwjdHdzaXZhbCIgdGl0bGU9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IlRDUC9JUCBNb25pdG9yIj4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyBXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Rtb25pdG9yLmh0bWwjdG1vbml0b3IiIHRpdGxlPSJVc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1MtSSI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkzNmZlYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXUy1JIFZhbGlkYXRpb24gRG9jdW1lbnRhdGlvbgotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxOWRhYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUaGlzIGlzIHRoZSBwbHVnaW4gZm9yIGRlY2xhcmluZyB0aGUgaGVscCAgICAgICAgIC0tPgotPCEtLSBjb250cmlidXRpb25zIGZvciB1c2luZyB0aGUgdG9vbC4gICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgPHRvYyBmaWxlPSJ3c3dzaXRlc3RfdG9jLnhtbCIvPiAgCi0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPiAKLTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzk1YjI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRtb25pdG9yIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgb3IgU09BUCBtb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSBhbmQgV2ViIHNlcnZpY2UgY2xpZW50LAoteW91IGNhbiBtb25pdG9yIHRoZSBXZWIgc2VydmljZSdzIFNPQVAgdHJhZmZpYyB1c2luZyB0aGUgVENQL0lQIE1vbml0b3IuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlRDUC9JUCBNb25pdG9yPGluZGV4dGVybT50ZXN0aW5nIFdlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnRlc3RpbmcgdHJhZmZpYzwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+bW9uaXRvcmluZwotVENQL0lQIHRyYWZmaWM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PHA+IFByZXJlcXVpc2l0ZXM6IDwvcD48dWw+Ci08bGk+R2VuZXJhdGUgYSBXZWIgc2VydmljZTwvbGk+Ci08bGk+R2VuZXJhdGUgYSBQcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb248L2xpPgotPC91bD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPldoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIHNlcnZpY2Ugb3IgV2ViIHNlcnZpY2UKLWNsaWVudCB3aXphcmRzLCB5b3UgY2FuIHNlbGVjdCB0byBzZXQgdXAgYW5kIHJ1biB0aGUgVENQL0lQIE1vbml0b3IgYXV0b21hdGljYWxseS4KLUFsdGVybmF0ZWx5LCB5b3UgY2FuIHNldCB1cCB0aGUgVENQL0lQIE1vbml0b3IgbWFudWFsbHkgYnkgY29tcGxldGluZyB0aGUKLWZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uLCBpbnZva2UgdGhlIGdldEVuZFBvaW50IG1ldGhvZC4gUmVjb3JkCi10aGlzIGVuZHBvaW50LiBUaGUgZGVmYXVsdCBlbmRwb2ludCBmb3IgYSBXZWIgc2VydmljZSBpczogaHR0cDovL2xvY2FsaG9zdDombHQ7cG9ydD4vJmx0O3dlYgotbW9kdWxlIGNvbnRleHQgcm9vdD4vc2VydmljZXMvJmx0O3BvcnQ+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DcmVhdGUgYSBzZXJ2ZXIgdG8gYWN0IGFzIHRoZSBUQ1AvSVAgTW9uaXRvcjo8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCA8dWljb250cm9sPlByZWZlcmVuY2VzPC91aWNvbnRyb2w+LiA8L2NtZD4KLTwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+SW4gdGhlIFByZWZlcmVuY2VzIHdpbmRvdywgZXhwYW5kIDx1aWNvbnRyb2w+UnVuL0RlYnVnPC91aWNvbnRyb2w+LAotYW5kIHRoZW4gc2VsZWN0IDx1aWNvbnRyb2w+VENQL0lQIE1vbml0b3I8L3VpY29udHJvbD4uIDwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSA8dWljb250cm9sPlNob3cgVENQL0lQIE1vbml0b3IgVmlldyB3aGVuIHRoZXJlIGlzCi1hY3Rpdml0eTwvdWljb250cm9sPiBjaGVjayBib3guIDwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+VW5kZXIgdGhlIFRDUC9JUCBNb25pdG9ycyBsaXN0cywgY2xpY2sgPHVpY29udHJvbD5BZGQ8L3VpY29udHJvbD4uCi1BIE5ldyBNb25pdG9yIGRpYWxvZyBvcGVucy48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNwZWNpZnkgdGhlIGZvbGxvd2luZyBzZXR0aW5nczogPC9jbWQ+PC9zdWJzdGVwPgotPC9zdWJzdGVwcz4KLTxjaG9pY2V0YWJsZT4KLTxjaGhlYWQ+PGNob3B0aW9uaGQ+T3B0aW9uPC9jaG9wdGlvbmhkPjxjaGRlc2NoZD5EZXNjcmlwdGlvbjwvY2hkZXNjaGQ+PC9jaGhlYWQ+Ci08Y2hyb3c+PGNob3B0aW9uPkxvY2FsIG1vbml0b3JpbmcgcG9ydDwvY2hvcHRpb24+PGNoZGVzYz5TcGVjaWZ5IGEgdW5pcXVlCi1wb3J0IG51bWJlciBvbiB5b3VyIGxvY2FsIG1hY2hpbmUuPC9jaGRlc2M+PC9jaHJvdz4KLTxjaHJvdz48Y2hvcHRpb24+SG9zdCBuYW1lPC9jaG9wdGlvbj48Y2hkZXNjPlNwZWNpZnkgdGhlIGhvc3QgbmFtZSBvciBJUCBhZGRyZXNzCi1vZiB0aGUgbWFjaGluZSB3aGVyZSB0aGUgc2VydmVyIGlzIHJ1bm5pbmcuPC9jaGRlc2M+PC9jaHJvdz4KLTxjaHJvdz48Y2hvcHRpb24+UG9ydDwvY2hvcHRpb24+PGNoZGVzYz5TcGVjaWZ5IHRoZSBwb3J0IG51bWJlciBvZiB0aGUgcmVtb3RlCi1zZXJ2ZXIuPC9jaGRlc2M+PC9jaHJvdz4KLTxjaHJvdz48Y2hvcHRpb24+VHlwZTwvY2hvcHRpb24+PGNoZGVzYz5TcGVjaWZ5IHdoZXRoZXIgdGhlIHJlcXVlc3QgdHlwZSBmcm9tCi10aGUgV2ViIGJyb3dzZXIgYXJlIHNlbnQgYnkgSFRUUCBvciBUQ1AvSVAuIElmIHRoZSBIVFRQIG9wdGlvbiBpcyBzZWxlY3RlZAotdGhlIHJlcXVlc3RzIGZyb20gdGhlIFdlYiBicm93c2VyIGFyZSBtb2RpZmllZCBzbyB0aGF0IHRoZSBIVFRQIGhlYWRlciBwb2ludHMKLXRvIHRoZSByZW1vdGUgbWFjaGluZSBhbmQgc2VwYXJhdGVkIGlmIG11bHRpcGxlIEhUVFAgcmVxdWVzdHMgYXJlIHJlY2VpdmVkCi1pbiB0aGUgc2FtZSBjb25uZWN0aW9uLiBJZiB0aGUgVENQL0lQIG9wdGlvbiBpcyBzZWxlY3RlZCwgYWxsIHRoZSByZXF1ZXN0cwotYXJlIHNlbnQgYnl0ZSBmb3IgYnl0ZS4gPC9jaGRlc2M+PC9jaHJvdz4KLTwvY2hvaWNldGFibGU+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkluIG9yZGVyIHRvIHJvdXRlIHRoZSBXZWIgc2VydmljZSB0aHJvdWdoIHRoZSBtb25pdG9yLCB0aGUgZW5kcG9pbnQKLW9mIHRoZSBXZWIgc2VydmljZSBjbGllbnQgbmVlZHMgdG8gYmUgY2hhbmdlZC4gVGhlIFRDUC9JUCBNb25pdG9yIGxpc3RlbnMKLW9uIHBvcnQgOTA4MS4gSW4gdGhlIFdlYiBicm93c2VyIHdpbmRvdyB1c2VkIGluIHN0ZXAgMSwgaW52b2tlIHRoZSBzZXRFbmRQb2ludAotbWV0aG9kLCBhbmQgY2hhbmdlIHRoZSBlbmRwb2ludCBzbyB0aGF0IGl0IGRpcmVjdHMgdG8gcG9ydCA5MDgxLiBGb3IgZXhhbXBsZSwKLXRoZSBkZWZhdWx0IHdvdWxkIGJlOiA8Y29kZXBoPmh0dHA6Ly9sb2NhbGhvc3Q6OTA4MS93ZWJfbW9kdWxlX2NvbnRleHRfcm9vdC9zZXJ2bGV0L3JwY3JvdXRlcjwvY29kZXBoPiBJbnZva2UKLXRoZSBnZXRFbmRQb2ludCBtZXRob2QgYWdhaW4gdG8gZW5zdXJlIHRoYXQgeW91ciBjaGFuZ2UgaGFzIGJlZW4gaW1wbGVtZW50ZWQuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCBhIFdlYiBzZXJ2aWNlIG1ldGhvZCBpbiB0aGUgTWV0aG9kcyBwYW5lLiBJbnZva2UgdGhpcyBtZXRob2QuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNoYW5nZSB0byB0aGUgVENQL0lQIE1vbml0b3IgdmlldyBieSBzZWxlY3RpbmcgdGhlIFRDUC9JUCBNb25pdG9yCi10YWIgaW4gdGhlIFNlcnZlcnMgdmlldy4gVGhpcyB3aWxsIGRpc3BsYXkgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGFpcnMgdGhhdAotYXJlIGJlaW5nIHJvdXRlZCB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci4gSXQgd2lsbCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZwotcGljdHVyZTogIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRyYWZmaWMiIGhyZWY9Ii4uL2ltYWdlcy90cmFmZmljLmdpZiIKLXBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBlbnN1cmUgdGhhdCB5b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwKLXlvdSBjYW4gZ2VuZXJhdGUgYSBsb2cgZmlsZSBieSBjbGlja2luZyB0aGUgIDxpbWFnZSBhbHQ9IldTLUkgdmFsaWRhdGlvbiBpY29uIgotaHJlZj0iLi4vaW1hZ2VzL3dzaXZhbGljby5naWYiPjwvaW1hZ2U+IGljb24uIEluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsCi1zZWxlY3QgYSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgYW5kIHNwZWNpZnkgd2hlcmUgeW91IHdhbnQgaXQgdG8gYmUgc3RvcmVkLiA8L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PlRoaXMgbG9nIGZpbGUgd2lsbCBiZSB2YWxpZGF0ZWQgZm9yIFdTLUkgY29tcGxpYW5jZS4gWW91IGNhbiBvcGVuCi10aGUgbG9nIGZpbGUgaW4gYW4gWE1MIGVkaXRvciB0byBleGFtaW5lIGl0cyBjb250ZW50cy48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlNPQVA8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1MtSTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY3ZWE4ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJVc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCwgeW91IGNhbiBtb25pdG9yIHRoZSBXZWIgc2VydmljZSdzIFNPQVAgdHJhZmZpYyB1c2luZyB0aGUgVENQL0lQIE1vbml0b3IuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQsIHlvdSBjYW4gbW9uaXRvciB0aGUgV2ViIHNlcnZpY2UncyBTT0FQIHRyYWZmaWMgdXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlRDUC9JUCBNb25pdG9yLCB0ZXN0aW5nIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCB0ZXN0aW5nIHRyYWZmaWMsIG1vbml0b3JpbmcgVENQL0lQIHRyYWZmaWMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJUQ1AvSVAgTW9uaXRvciwgdGVzdGluZyBXZWIgc2VydmljZXMsIFdlYiBzZXJ2aWNlcywgdGVzdGluZyB0cmFmZmljLCBtb25pdG9yaW5nIFRDUC9JUCB0cmFmZmljIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRtb25pdG9yIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VXNpbmcgdGhlIFRDUC9JUCBvciBTT0FQIG1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRtb25pdG9yIj48YSBuYW1lPSJ0bW9uaXRvciI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC9oMT4KLQotCi0KLQotPGRpdj48cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSBhbmQgV2ViIHNlcnZpY2UgY2xpZW50LAoteW91IGNhbiBtb25pdG9yIHRoZSBXZWIgc2VydmljZSdzIFNPQVAgdHJhZmZpYyB1c2luZyB0aGUgVENQL0lQIE1vbml0b3IuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48cD4gUHJlcmVxdWlzaXRlczogPC9wPgotPHVsPgotPGxpPkdlbmVyYXRlIGEgV2ViIHNlcnZpY2U8L2xpPgotCi08bGk+R2VuZXJhdGUgYSBQcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb248L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIHNlcnZpY2Ugb3IgV2ViIHNlcnZpY2UKLWNsaWVudCB3aXphcmRzLCB5b3UgY2FuIHNlbGVjdCB0byBzZXQgdXAgYW5kIHJ1biB0aGUgVENQL0lQIE1vbml0b3IgYXV0b21hdGljYWxseS4KLUFsdGVybmF0ZWx5LCB5b3UgY2FuIHNldCB1cCB0aGUgVENQL0lQIE1vbml0b3IgbWFudWFsbHkgYnkgY29tcGxldGluZyB0aGUKLWZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBzYW1wbGUgYXBwbGljYXRpb24sIGludm9rZSB0aGUgZ2V0RW5kUG9pbnQgbWV0aG9kLiBSZWNvcmQKLXRoaXMgZW5kcG9pbnQuIFRoZSBkZWZhdWx0IGVuZHBvaW50IGZvciBhIFdlYiBzZXJ2aWNlIGlzOiBodHRwOi8vbG9jYWxob3N0OiZsdDtwb3J0Jmd0Oy8mbHQ7d2ViCi1tb2R1bGUgY29udGV4dCByb290Jmd0Oy9zZXJ2aWNlcy8mbHQ7cG9ydCZndDs8L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNyZWF0ZSBhIHNlcnZlciB0byBhY3QgYXMgdGhlIFRDUC9JUCBNb25pdG9yOjwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5Gcm9tIHRoZSBXaW5kb3cgbWVudSwgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByZWZlcmVuY2VzPC9zcGFuPi4gPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcmVmZXJlbmNlcyB3aW5kb3csIGV4cGFuZCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4vRGVidWc8L3NwYW4+LAotYW5kIHRoZW4gc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRDUC9JUCBNb25pdG9yPC9zcGFuPi4gPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNob3cgVENQL0lQIE1vbml0b3IgVmlldyB3aGVuIHRoZXJlIGlzCi1hY3Rpdml0eTwvc3Bhbj4gY2hlY2sgYm94LiA8L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlVuZGVyIHRoZSBUQ1AvSVAgTW9uaXRvcnMgbGlzdHMsIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4uCi1BIE5ldyBNb25pdG9yIGRpYWxvZyBvcGVucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNwZWNpZnkgdGhlIGZvbGxvd2luZyBzZXR0aW5nczogPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLQotPHRhYmxlIGNsYXNzPSJjaG9pY2V0YWJsZWJvcmRlciIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiIHJ1bGVzPSJyb3dzIiBmcmFtZT0iaHNpZGVzIiBib3JkZXI9IjEiPgotPHRoZWFkPjx0cj48dGggdmFsaWduPSJib3R0b20iIGlkPSJOMTAwRTktb3B0aW9uIj5PcHRpb248L3RoPgotPHRoIHZhbGlnbj0iYm90dG9tIiBpZD0iTjEwMEU5LWRlc2MiPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+Ci08dGJvZHk+Ci0KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBFOS1vcHRpb24iIGlkPSJOMTAxMDIiPjxzdHJvbmc+TG9jYWwgbW9uaXRvcmluZyBwb3J0PC9zdHJvbmc+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEU5LWRlc2MgTjEwMTAyIj5TcGVjaWZ5IGEgdW5pcXVlCi1wb3J0IG51bWJlciBvbiB5b3VyIGxvY2FsIG1hY2hpbmUuPC90ZD4KLTwvdHI+Ci0KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBFOS1vcHRpb24iIGlkPSJOMTAxMTEiPjxzdHJvbmc+SG9zdCBuYW1lPC9zdHJvbmc+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEU5LWRlc2MgTjEwMTExIj5TcGVjaWZ5IHRoZSBob3N0IG5hbWUgb3IgSVAgYWRkcmVzcwotb2YgdGhlIG1hY2hpbmUgd2hlcmUgdGhlIHNlcnZlciBpcyBydW5uaW5nLjwvdGQ+Ci08L3RyPgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRTktb3B0aW9uIiBpZD0iTjEwMTIwIj48c3Ryb25nPlBvcnQ8L3N0cm9uZz48L3RkPgotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRTktZGVzYyBOMTAxMjAiPlNwZWNpZnkgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSByZW1vdGUKLXNlcnZlci48L3RkPgotPC90cj4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEU5LW9wdGlvbiIgaWQ9Ik4xMDEyRiI+PHN0cm9uZz5UeXBlPC9zdHJvbmc+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEU5LWRlc2MgTjEwMTJGIj5TcGVjaWZ5IHdoZXRoZXIgdGhlIHJlcXVlc3QgdHlwZSBmcm9tCi10aGUgV2ViIGJyb3dzZXIgYXJlIHNlbnQgYnkgSFRUUCBvciBUQ1AvSVAuIElmIHRoZSBIVFRQIG9wdGlvbiBpcyBzZWxlY3RlZAotdGhlIHJlcXVlc3RzIGZyb20gdGhlIFdlYiBicm93c2VyIGFyZSBtb2RpZmllZCBzbyB0aGF0IHRoZSBIVFRQIGhlYWRlciBwb2ludHMKLXRvIHRoZSByZW1vdGUgbWFjaGluZSBhbmQgc2VwYXJhdGVkIGlmIG11bHRpcGxlIEhUVFAgcmVxdWVzdHMgYXJlIHJlY2VpdmVkCi1pbiB0aGUgc2FtZSBjb25uZWN0aW9uLiBJZiB0aGUgVENQL0lQIG9wdGlvbiBpcyBzZWxlY3RlZCwgYWxsIHRoZSByZXF1ZXN0cwotYXJlIHNlbnQgYnl0ZSBmb3IgYnl0ZS4gPC90ZD4KLTwvdHI+Ci0KLTwvdGJvZHk+PC90YWJsZT4KLQotPC9saT4KLQotPGxpPjxzcGFuPkluIG9yZGVyIHRvIHJvdXRlIHRoZSBXZWIgc2VydmljZSB0aHJvdWdoIHRoZSBtb25pdG9yLCB0aGUgZW5kcG9pbnQKLW9mIHRoZSBXZWIgc2VydmljZSBjbGllbnQgbmVlZHMgdG8gYmUgY2hhbmdlZC4gVGhlIFRDUC9JUCBNb25pdG9yIGxpc3RlbnMKLW9uIHBvcnQgOTA4MS4gSW4gdGhlIFdlYiBicm93c2VyIHdpbmRvdyB1c2VkIGluIHN0ZXAgMSwgaW52b2tlIHRoZSBzZXRFbmRQb2ludAotbWV0aG9kLCBhbmQgY2hhbmdlIHRoZSBlbmRwb2ludCBzbyB0aGF0IGl0IGRpcmVjdHMgdG8gcG9ydCA5MDgxLiBGb3IgZXhhbXBsZSwKLXRoZSBkZWZhdWx0IHdvdWxkIGJlOiA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwOi8vbG9jYWxob3N0OjkwODEvd2ViX21vZHVsZV9jb250ZXh0X3Jvb3Qvc2VydmxldC9ycGNyb3V0ZXI8L3NhbXA+IEludm9rZQotdGhlIGdldEVuZFBvaW50IG1ldGhvZCBhZ2FpbiB0byBlbnN1cmUgdGhhdCB5b3VyIGNoYW5nZSBoYXMgYmVlbiBpbXBsZW1lbnRlZC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IGEgV2ViIHNlcnZpY2UgbWV0aG9kIGluIHRoZSBNZXRob2RzIHBhbmUuIEludm9rZSB0aGlzIG1ldGhvZC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+Q2hhbmdlIHRvIHRoZSBUQ1AvSVAgTW9uaXRvciB2aWV3IGJ5IHNlbGVjdGluZyB0aGUgVENQL0lQIE1vbml0b3IKLXRhYiBpbiB0aGUgU2VydmVycyB2aWV3LiBUaGlzIHdpbGwgZGlzcGxheSByZXF1ZXN0IGFuZCByZXNwb25zZSBwYWlycyB0aGF0Ci1hcmUgYmVpbmcgcm91dGVkIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLiBJdCB3aWxsIGxvb2sgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nCi1waWN0dXJlOiAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy90cmFmZmljLmdpZiIgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiByZXF1ZXN0IGFuZCByZXNwb25zZSB0cmFmZmljIiAvPjxiciAvPjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+VG8gZW5zdXJlIHRoYXQgeW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsCi15b3UgY2FuIGdlbmVyYXRlIGEgbG9nIGZpbGUgYnkgY2xpY2tpbmcgdGhlICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzaXZhbGljby5naWYiIGFsdD0iV1MtSSB2YWxpZGF0aW9uIGljb24iIC8+IGljb24uIEluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsCi1zZWxlY3QgYSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgYW5kIHNwZWNpZnkgd2hlcmUgeW91IHdhbnQgaXQgdG8gYmUgc3RvcmVkLiA8L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UaGlzIGxvZyBmaWxlIHdpbGwgYmUgdmFsaWRhdGVkIGZvciBXUy1JIGNvbXBsaWFuY2UuIFlvdSBjYW4gb3BlbgotdGhlIGxvZyBmaWxlIGluIGFuIFhNTCBlZGl0b3IgdG8gZXhhbWluZSBpdHMgY29udGVudHMuPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5odG1sIj5TT0FQPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCI+V1MtSTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiPlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5ZGM3YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0d3NkbHZhbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5WYWxpZGF0aW5nIFdTREwgZmlsZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5WYWxpZGF0aW5nIFdTREwgZmlsZXM8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPklmIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZAotdGhlIFdTREwgdGhhdCBpcyBnZW5lcmF0ZWQgc2hvdWxkIGJlIHZhbGlkLiBIb3dldmVyLCBpZiB5b3UgaGF2ZSBpbXBvcnRlZAotYSBXU0RMIGZpbGUsIG9yIGlmIHlvdSBhcmUgY3JlYXRpbmcgYSBXU0RMIGZpbGUsIHlvdSBzaG91bGQgdmFsaWRhdGUgdGhlIFdTREwKLXRvIGVuc3VyZSBpdCBpcyB2YWxpZC48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+dmFsaWRhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+dmFsaWRhdGluZyBXU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5JZiB5b3UgaGF2ZSBzZWxlY3RlZCBSZXF1aXJlIG9yIFN1Z2dlc3QgV1MtSSBDb21wbGlhbmNlIG9uIHRoZQotV1MtSSBDb21wbGlhbmNlIHByZWZlcmVuY2UgcGFnZSwgdGhlIHZhbGlkYXRpb24gYWxzbyBjaGVja3MgV1MtSSBjb21wbGlhbmNlLgotSWYgeW91IGhhdmUgc2VsZWN0ZWQgSWdub3JlIFdTLUkgQ29tcGxpYW5jZSB0aGUgdmFsaWRhdG9yIHdpbGwgb25seSBjaGVjawotdGhlIHZhbGlkaXR5IG9mIHRoZSBXU0RMLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIFdTLUkgY29tcGxpYW5jZQotbGV2ZWxzLCByZWZlciB0bzogIDx4cmVmIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5LmRpdGEiCi1zY29wZT0icGVlciI+IFNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwveHJlZj4uPC9wPjxwPlRoZSBXU0RMCi1WYWxpZGF0b3IgY29tcGFyZXMgdGhlIFdTREwgZmlsZSBpbiB5b3VyIHByb2plY3QgdG8gdGhlIFczQyAgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgc2NvcGU9ImV4dGVybmFsIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKSAxLjE8L3hyZWY+IHNwZWNpZmljYXRpb25zLCBhbmQgdGhlIFdTLUkgY29tcGxpYW5jZSBzZXR0aW5ncwotdGhhdCB5b3UgaGF2ZSBzZWxlY3RlZC48L3A+PHA+VG8gdmFsaWRhdGUgeW91ciBXU0RMLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5TZWxlY3QgYSBXU0RMIGZpbGUgaW4gdGhlICA8Yj5Qcm9qZWN0IE5hdmlnYXRvcjwvYj4gdmlldy48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+UmlnaHQtY2xpY2sgdGhlIFdTREwgZmlsZSwgYW5kIHNlbGVjdCAgPGI+VmFsaWRhdGU8L2I+PC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+QW55IHByb2JsZW1zIGVuY291bnRlcmVkIHdoaWxlIHZhbGlkYXRpbmcgdGhlIGZpbGUgd2lsbCBiZSBzaG93biBpbgotdGhlICA8Yj5UYXNrczwvYj4gdmlldy48cD5XaGVuIHlvdSByZWJ1aWxkIGEgcHJvamVjdCBvciBzYXZlIGEgcmVzb3VyY2UsIHRoZQotV1NETCBWYWxpZGF0b3IgY2FuIGJlIHNldCB0byBydW4gYXV0b21hdGljYWxseS4gVG8gZG8gdGhpcywgZnJvbSB0aGUgV2luZG93Ci1tZW51LCBzZWxlY3QgIDxiPlByZWZlcmVuY2VzPC9iPiA+ICA8Yj5WYWxpZGF0aW9uPC9iPi4gRW5zdXJlIHRoYXQgdGhlIFdTREwKLVZhbGlkYXRvciBjaGVjayBib3ggaW4gdGhlIEJ1aWxkIGNvbHVtbiBpcyBzZWxlY3RlZC48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTLUk8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlNldHRpbmcgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkNDgzYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlZhbGlkYXRpbmcgV1NETCBmaWxlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdGhlIFdTREwgdGhhdCBpcyBnZW5lcmF0ZWQgc2hvdWxkIGJlIHZhbGlkLiBIb3dldmVyLCBpZiB5b3UgaGF2ZSBpbXBvcnRlZCBhIFdTREwgZmlsZSwgb3IgaWYgeW91IGFyZSBjcmVhdGluZyBhIFdTREwgZmlsZSwgeW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgV1NETCB0byBlbnN1cmUgaXQgaXMgdmFsaWQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB0aGUgV1NETCB0aGF0IGlzIGdlbmVyYXRlZCBzaG91bGQgYmUgdmFsaWQuIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGltcG9ydGVkIGEgV1NETCBmaWxlLCBvciBpZiB5b3UgYXJlIGNyZWF0aW5nIGEgV1NETCBmaWxlLCB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSBXU0RMIHRvIGVuc3VyZSBpdCBpcyB2YWxpZC4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIHZhbGlkYXRpbmcsIFdlYiBzZXJ2aWNlcywgdmFsaWRhdGluZyBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2RsdmFsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0d3NkbHZhbCI+PGEgbmFtZT0idHdzZGx2YWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlZhbGlkYXRpbmcgV1NETCBmaWxlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+SWYgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkCi10aGUgV1NETCB0aGF0IGlzIGdlbmVyYXRlZCBzaG91bGQgYmUgdmFsaWQuIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGltcG9ydGVkCi1hIFdTREwgZmlsZSwgb3IgaWYgeW91IGFyZSBjcmVhdGluZyBhIFdTREwgZmlsZSwgeW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgV1NETAotdG8gZW5zdXJlIGl0IGlzIHZhbGlkLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IGhhdmUgc2VsZWN0ZWQgUmVxdWlyZSBvciBTdWdnZXN0IFdTLUkgQ29tcGxpYW5jZSBvbiB0aGUKLVdTLUkgQ29tcGxpYW5jZSBwcmVmZXJlbmNlIHBhZ2UsIHRoZSB2YWxpZGF0aW9uIGFsc28gY2hlY2tzIFdTLUkgY29tcGxpYW5jZS4KLUlmIHlvdSBoYXZlIHNlbGVjdGVkIElnbm9yZSBXUy1JIENvbXBsaWFuY2UgdGhlIHZhbGlkYXRvciB3aWxsIG9ubHkgY2hlY2sKLXRoZSB2YWxpZGl0eSBvZiB0aGUgV1NETC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyBXUy1JIGNvbXBsaWFuY2UKLWxldmVscywgcmVmZXIgdG86ICA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIj5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2E+LjwvcD4KLTxwPlRoZSBXU0RMCi1WYWxpZGF0b3IgY29tcGFyZXMgdGhlIFdTREwgZmlsZSBpbiB5b3VyIHByb2plY3QgdG8gdGhlIFczQyAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgMS4xPC9hPiBzcGVjaWZpY2F0aW9ucywgYW5kIHRoZSBXUy1JIGNvbXBsaWFuY2Ugc2V0dGluZ3MKLXRoYXQgeW91IGhhdmUgc2VsZWN0ZWQuPC9wPgotPHA+VG8gdmFsaWRhdGUgeW91ciBXU0RMLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nCi1zdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPlNlbGVjdCBhIFdTREwgZmlsZSBpbiB0aGUgIDxzdHJvbmc+UHJvamVjdCBOYXZpZ2F0b3I8L3N0cm9uZz4gdmlldy48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+UmlnaHQtY2xpY2sgdGhlIFdTREwgZmlsZSwgYW5kIHNlbGVjdCAgPHN0cm9uZz5WYWxpZGF0ZTwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5BbnkgcHJvYmxlbXMgZW5jb3VudGVyZWQgd2hpbGUgdmFsaWRhdGluZyB0aGUgZmlsZSB3aWxsIGJlIHNob3duIGluCi10aGUgIDxzdHJvbmc+VGFza3M8L3N0cm9uZz4gdmlldy48cD5XaGVuIHlvdSByZWJ1aWxkIGEgcHJvamVjdCBvciBzYXZlIGEgcmVzb3VyY2UsIHRoZQotV1NETCBWYWxpZGF0b3IgY2FuIGJlIHNldCB0byBydW4gYXV0b21hdGljYWxseS4gVG8gZG8gdGhpcywgZnJvbSB0aGUgV2luZG93Ci1tZW51LCBzZWxlY3QgIDxzdHJvbmc+UHJlZmVyZW5jZXM8L3N0cm9uZz4gJmd0OyAgPHN0cm9uZz5WYWxpZGF0aW9uPC9zdHJvbmc+LiBFbnN1cmUgdGhhdCB0aGUgV1NETAotVmFsaWRhdG9yIGNoZWNrIGJveCBpbiB0aGUgQnVpbGQgY29sdW1uIGlzIHNlbGVjdGVkLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiPldTLUk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIj5TZXR0aW5nIFdTLUkgY29tcGxpYW5jZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzOWIxOGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0d3NpdmFsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5WYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5BcyB3ZWxsIGFzIHNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBkdXJpbmcgV2ViIHNlcnZpY2VzCi1jcmVhdGlvbiwgeW91IGNhbiB2YWxpZGF0ZSBXUy1JIGNvbXBsaWFuY2Ugb2YgdGhlIFNPQVAgdHJhZmZpYyBhIFdlYiBzZXJ2aWNlCi1wcm9kdWNlcyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1MtSTxpbmRleHRlcm0+dmFsaWRhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+dmFsaWRhdGluZyBXUy1JIGNvbXBsaWFuY2U8aW5kZXh0ZXJtPmludGVyb3BlcmFiaWxpdHk8aW5kZXh0ZXJtPnZhbGlkYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT4gUHJlcmVxdWlzaXRlczogQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSB2YWxpZGF0aW9uIHRvb2wgdG8gZW5zdXJlIHRoYXQKLXlvdXIgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIGlzIFdTLUkgY29tcGxpYW50LCB5b3UgbXVzdCBoYXZlIGNvbXBsZXRlZCB0aGUKLWZvbGxvd2luZyBzdGVwczo8dWw+Ci08bGk+R2VuZXJhdGUgYSBXZWIgc2VydmljZS48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0d3NkbHZhbC5kaXRhIj5WYWxpZGF0ZSB0aGUgV1NETCB0aGF0IGlzIHByb2R1Y2VkLjwveHJlZj4gPC9saT4KLTxsaT5HZW5lcmF0ZSBhIFByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idG1vbml0b3IuZGl0YSI+U2V0IHVwIHRoZSBUQ1AvSVAgTW9uaXRvci48L3hyZWY+IEVuc3VyZSB0aGF0Ci15b3VyIFdlYiBzZXJ2aWNlIHNhbXBsZSBhcHBsaWNhdGlvbiB0cmFmZmljIGlzIGRpcmVjdGVkIHRocm91Z2ggdGhlIFRDUC9JUAotTW9uaXRvci48L2xpPgotPC91bD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPlRvIHZhbGlkYXRlIHlvdXIgV2ViIHNlcnZpY2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW52b2tlIGEgbWV0aG9kIGluIHlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIHRvIGdlbmVyYXRlCi10cmFmZmljIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gZW5zdXJlIHRoYXQgeW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsCi15b3UgY2FuIGdlbmVyYXRlIGEgbG9nIGZpbGUgYnkgY2xpY2tpbmcgdGhlICA8aW1hZ2UgYWx0PSJWYWxpZGF0ZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvd3NpdmFsaWNvLmdpZiI+Ci08L2ltYWdlPiBpY29uLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIGRpYWxvZyBib3ggdGhhdCBvcGVucywgc2VsZWN0IGEgbmFtZSBmb3IgdGhlIGxvZyBmaWxlIGFuZAotc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCBpdCB0byBiZSBzdG9yZWQuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+IFRoaXMgbG9nIGZpbGUgd2lsbCBzaG93IHdoZXRoZXIgb3Igbm90IG1lc3NhZ2VzIHNlbnQgdG8gYW5kIGZyb20KLXlvdXIgV2ViIHNlcnZpY2UgYXJlIFdTLUkgY29tcGxpYW50LCBhbmQgbGlzdCBhbnkgbm9uLWNvbXBsaWFudCBlbGVtZW50cy4KLVlvdSBjYW4gb3BlbiB0aGUgbG9nIGZpbGUgaW4gYW4gWE1MIGVkaXRvciB0byBleGFtaW5lIGl0cyBjb250ZW50cy48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTLUk8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTcxY2IyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJWYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFzIHdlbGwgYXMgc2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGR1cmluZyBXZWIgc2VydmljZXMgY3JlYXRpb24sIHlvdSBjYW4gdmFsaWRhdGUgV1MtSSBjb21wbGlhbmNlIG9mIHRoZSBTT0FQIHRyYWZmaWMgYSBXZWIgc2VydmljZSBwcm9kdWNlcyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXMgd2VsbCBhcyBzZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZHVyaW5nIFdlYiBzZXJ2aWNlcyBjcmVhdGlvbiwgeW91IGNhbiB2YWxpZGF0ZSBXUy1JIGNvbXBsaWFuY2Ugb2YgdGhlIFNPQVAgdHJhZmZpYyBhIFdlYiBzZXJ2aWNlIHByb2R1Y2VzIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTLUksIHZhbGlkYXRpbmcsIFdlYiBzZXJ2aWNlcywgdmFsaWRhdGluZyBXUy1JIGNvbXBsaWFuY2UsIGludGVyb3BlcmFiaWxpdHkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXUy1JLCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlLCBpbnRlcm9wZXJhYmlsaXR5IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHdzaXZhbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2l2YWwiPjxhIG5hbWU9InR3c2l2YWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L2gxPgotCi0KLQotCi08ZGl2PjxwPkFzIHdlbGwgYXMgc2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGR1cmluZyBXZWIgc2VydmljZXMKLWNyZWF0aW9uLCB5b3UgY2FuIHZhbGlkYXRlIFdTLUkgY29tcGxpYW5jZSBvZiB0aGUgU09BUCB0cmFmZmljIGEgV2ViIHNlcnZpY2UKLXByb2R1Y2VzIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+IFByZXJlcXVpc2l0ZXM6IEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgdmFsaWRhdGlvbiB0b29sIHRvIGVuc3VyZSB0aGF0Ci15b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwgeW91IG11c3QgaGF2ZSBjb21wbGV0ZWQgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PHVsPgotPGxpPkdlbmVyYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0d3NkbHZhbC5odG1sIj5WYWxpZGF0ZSB0aGUgV1NETCB0aGF0IGlzIHByb2R1Y2VkLjwvYT4gPC9saT4KLQotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRtb25pdG9yLmh0bWwiPlNldCB1cCB0aGUgVENQL0lQIE1vbml0b3IuPC9hPiBFbnN1cmUgdGhhdAoteW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gdHJhZmZpYyBpcyBkaXJlY3RlZCB0aHJvdWdoIHRoZSBUQ1AvSVAKLU1vbml0b3IuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyB2YWxpZGF0ZSB5b3VyIFdlYiBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW52b2tlIGEgbWV0aG9kIGluIHlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIHRvIGdlbmVyYXRlCi10cmFmZmljIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+VG8gZW5zdXJlIHRoYXQgeW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsCi15b3UgY2FuIGdlbmVyYXRlIGEgbG9nIGZpbGUgYnkgY2xpY2tpbmcgdGhlICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzaXZhbGljby5naWYiIGFsdD0iVmFsaWRhdGUgaWNvbiIgLz4gaWNvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdCBhIG5hbWUgZm9yIHRoZSBsb2cgZmlsZSBhbmQKLXNwZWNpZnkgd2hlcmUgeW91IHdhbnQgaXQgdG8gYmUgc3RvcmVkLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj4gVGhpcyBsb2cgZmlsZSB3aWxsIHNob3cgd2hldGhlciBvciBub3QgbWVzc2FnZXMgc2VudCB0byBhbmQgZnJvbQoteW91ciBXZWIgc2VydmljZSBhcmUgV1MtSSBjb21wbGlhbnQsIGFuZCBsaXN0IGFueSBub24tY29tcGxpYW50IGVsZW1lbnRzLgotWW91IGNhbiBvcGVuIHRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCI+V1MtSTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiPlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTgyYzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIiAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3N3c2l0ZXN0IgotaWQ9Indzd3NpdGVzdCIgdGl0bGU9Indzd3NpdGVzdCI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHdzZGx2YWwuZGl0YSIgbmF2dGl0bGU9IlZhbGlkYXRpbmcgV1NETCI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90bW9uaXRvci5kaXRhIiBuYXZ0aXRsZT0iVGVzdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgVENQL0lQIE1vbml0b3IiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NpdmFsLmRpdGEiIG5hdnRpdGxlPSJWYWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZSBvZiBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMiPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTAyMGFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzd3NpdGVzdCIgbGFiZWw9Indzd3NpdGVzdCIgdG9waWM9InRhc2tzL3R3c2RsdmFsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJWYWxpZGF0aW5nIFdTREwgZmlsZXMiIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIiBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCIvPgotPC90b2M+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVmZmE3OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY0NDgwYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5YmUzMC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgQ29yZQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBXZWIgU2VydmljZXMgY29yZS4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZWYzODIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjMuMC4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUiIHZlcnNpb249IjEuMC4xMDIiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlIiB2ZXJzaW9uPSIxLjAuMTAyIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlIiB2ZXJzaW9uPSIxLjAuMTAxIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIiIHZlcnNpb249IjEuMC4xMDAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIgdmVyc2lvbj0iMi4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0iamF2YXgud3NkbCIgdmVyc2lvbj0iMS40LjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIgdmVyc2lvbj0iMS4wLjEwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQiIHZlcnNpb249IjEuMC4xMDAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pIiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS54c2QiIHZlcnNpb249IjIuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIiIHZlcnNpb249IjEuMS4zMDEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIgdmVyc2lvbj0iMi4yLjAiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS54c2QiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUueGVyY2VzIiB2ZXJzaW9uPSIyLjguMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJjb20uaWJtLmljdSIgdmVyc2lvbj0iMy40LjQiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuNi41IiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uIiB2ZXJzaW9uPSIxLjIuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cyIgdmVyc2lvbj0iMS4wLjEwMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJqYXZheC54bWwuc29hcCIgdmVyc2lvbj0iMS4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0iamF2YXguc2VydmxldCIgdmVyc2lvbj0iMi40LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uub3NnaSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImphdmF4LndzZGwiIHZlcnNpb249IjEuNS4xIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nIiB2ZXJzaW9uPSIxLjAuNCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIiB2ZXJzaW9uPSIzLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgIDwvcmVxdWlyZXM+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjEuMC40LnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUubG9nNGoiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS4yLjEzLnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUud3NpbDRqIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLnVkZGk0aiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5kaXNjb3ZlcnkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmF4LnhtbC5ycGMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmF4LnhtbC5zb2FwIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLmF4aXMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmF4Lm1haWwiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJqYXZheC5hY3RpdmF0aW9uIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhYmZiNC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0OWU5Zi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9XAotZXBsLXYxMC5odG1sLFwKLWVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotZmVhdHVyZS54bWwsXAotZmVhdHVyZS5wcm9wZXJ0aWVzLFwKLWxpY2Vuc2UuaHRtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyYWQyOS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYTk0ZDUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdTIENvcmUgRGV2ZWxvcGVyIFJlc291cmNlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIHppcHMgZm9yIFdTVCBXUyBjb3JlLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzRhNDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgotPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Ci08cD5KdW5lIDA2LCAyMDA3PC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLSAgIAotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAotICAgCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKLSAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgotICAgCi08dWw+Ci0JPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KLQk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+Ci0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCi0gICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KLQk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KLTwvdWw+ICAgCi0gCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0JPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQkJCi08cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCi0JPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLQk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLSAgIAotPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTE2ZGYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLQotPHA+SnVuZSAwNiwgMjAwNzwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08aDM+U291cmNlIENvZGU8L2gzPgotPHA+VGhpcyBwbHVnLWluIGNvbnRhaW5zIHNvdXJjZSBjb2RlIHppcCBmaWxlcyAoJnF1b3Q7U291cmNlIFppcHMmcXVvdDspIHRoYXQgY29ycmVzcG9uZCB0byBiaW5hcnkgY29udGVudCBpbiBvdGhlciBwbHVnLWlucy4gVGhlc2UgU291cmNlIFppcHMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlCi1hZ3JlZW1lbnRzIGFuZC9vciBub3RpY2VzLiBEZXRhaWxzIGFib3V0IHRoZXNlIGxpY2Vuc2UgYWdyZWVtZW50cyBhbmQgbm90aWNlcyBhcmUgY29udGFpbmVkIGluICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgZmlsZXMgKCZxdW90O0Fib3V0cyZxdW90OykgbG9jYXRlZCBpbiBzdWItZGlyZWN0b3JpZXMgaW4gdGhlCi1zcmMvIGRpcmVjdG9yeSBvZiB0aGlzIHBsdWctaW4uIFN1Y2ggQWJvdXRzIGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgU291cmNlIFppcHMgaW4gdGhhdCBkaXJlY3RvcnksIG5vdCB0aGUgRVBMLjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgYWJvdXQuaW5pCi0jIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmVhdHVyZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyAiJWtleSIgYXJlIGV4dGVybmFsaXplZCBzdHJpbmdzIGRlZmluZWQgaW4gYWJvdXQucHJvcGVydGllcwotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0jIFByb3BlcnR5ICJhYm91dFRleHQiIGNvbnRhaW5zIGJsdXJiIGZvciAiQWJvdXQiIGRpYWxvZyAodHJhbnNsYXRlZCkKLWFib3V0VGV4dD0lYmx1cmIKLQotIyBQcm9wZXJ0eSAid2luZG93SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2luZG93IGljb24gKDE2eDE2KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJmZWF0dXJlSW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gZmVhdHVyZSBpbWFnZSAoMzJ4MzIpCi1mZWF0dXJlSW1hZ2U9d3RwX3Byb2QzMi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotCi0KLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZmI3MzUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncw0KLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMNCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpDQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLg0KLQ0KLTA9QGJ1aWxkQA0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwZGE4NS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgQ29yZVxuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHQgRWNsaXBzZSBjb250cmlidXRvcnMgYW5kIG90aGVycyAyMDA1LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWQ1MTJkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCwgYWJvdXQuaW5pLCBhYm91dC5tYXBwaW5ncywgYWJvdXQucHJvcGVydGllcywgd3RwX3Byb2QzMi5wbmcsIHBsdWdpbi5wcm9wZXJ0aWVzLCBwbHVnaW4ueG1sLCBzcmMvKiosIE1FVEEtSU5GLwotc291cmNlUGx1Z2luID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzlkMGYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1wbHVnaW5OYW1lPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIENvcmUgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2NjcxZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYnVpbGQueG1sCi1mZWF0dXJlcwotcGx1Z2lucwotb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlXzEuMC4wLmJpbi5kaXN0LnppcApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2ViZWU3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNmY4MGYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKLQotZ2VuZXJhdGUuZmVhdHVyZUBvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS5zb3VyY2U9b3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUsIGZlYXR1cmVAb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS5zb3VyY2UKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzA1YzI2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIFBsdWctaW4gRGV2ZWxvcGVyIFJlc291cmNlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIHppcHMgZm9yIHRoZSBXU1QgV2ViIHNlcnZpY2VzIHRvb2xzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiODZjMC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4wLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS5zb3VyY2UiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJkNTZlNC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlXzEuMC4wLmJpbi5kaXN0LnppcApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FlMjM1NC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYjMzYWQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MThlNjhhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgVGVzdHMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XU1QgV2ViIHNlcnZpY2VzIHRlc3RzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZGQ1YzkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDQ1OTguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDNhOGIwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0NzY5NC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjAwZTAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdlYiBTZXJ2aWNlcyBVSQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdlYiBTZXJ2aWNlcyBVSSB0b29scy4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlkMGFhZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5oZWxwLmFwcHNlcnZlciIgdmVyc2lvbj0iMy4xLjEwMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIgdmVyc2lvbj0iMi4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS54c2QiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIgdmVyc2lvbj0iMS4wLjEwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSIgdmVyc2lvbj0iMS4wLjEwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkiIHZlcnNpb249IjEuMC4xMDEiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MiIHZlcnNpb249IjEuMC4xMDAiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyIiB2ZXJzaW9uPSIxLjAuMTAwIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJqYXZheC53c2RsIiB2ZXJzaW9uPSIxLjQuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuYXBhY2hlLndzaWw0aiIgdmVyc2lvbj0iMS4wLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLnVkZGk0aiIgdmVyc2lvbj0iMi4wLjQiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmFwYWNoZS5heGlzIiB2ZXJzaW9uPSIxLjQuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy51aSIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudCIgdmVyc2lvbj0iMS4wLjEwMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJjb20uaWJtLmljdSIgdmVyc2lvbj0iMy40LjQiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzLnVpIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuamV0dHkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lcXVpbm94LmpzcC5qYXNwZXIucmVnaXN0cnkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJqYXZheC5zZXJ2bGV0Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlcyIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLmlkZSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZ2VmIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZmFjZSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamZhY2UudGV4dCIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkudmlld3MiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5zc2UudWkiIHZlcnNpb249IjEuMC4xMDEiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54bWwudWkiIHZlcnNpb249IjEuMC4xMDAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpIiB2ZXJzaW9uPSIxLjIuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWRpdCIgdmVyc2lvbj0iMi4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVkaXQudWkiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZyIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuYXBhY2hlLnhlcmNlcyIgdmVyc2lvbj0iMi44LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIgdmVyc2lvbj0iMS4wLjEwMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MudWkiIHZlcnNpb249IjEuMC4xMDEiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zZWFyY2giIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIgdmVyc2lvbj0iMS4wLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtIiB2ZXJzaW9uPSIxLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kiIHZlcnNpb249IjEuMC4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2kiIHZlcnNpb249IjEuMC4xMDEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZSIgdmVyc2lvbj0iMS4wLjEwMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aSIgdmVyc2lvbj0iMS4wLjEwMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIgdmVyc2lvbj0iMS4wLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3d0IiB2ZXJzaW9uPSIzLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZmFjZSIgdmVyc2lvbj0iMy4zLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIiB2ZXJzaW9uPSIzLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zIiB2ZXJzaW9uPSIzLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5mb3JtcyIgdmVyc2lvbj0iMy4zLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzIiB2ZXJzaW9uPSIxLjAuMTAxIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgPC9yZXF1aXJlcz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYzIyOTIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID1cCi1lcGwtdjEwLmh0bWwsXAotZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi1mZWF0dXJlLnhtbCxcCi1mZWF0dXJlLnByb3BlcnRpZXMsXAotbGljZW5zZS5odG1sCi0KLWdlbmVyYXRlLmZlYXR1cmVAb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS5zb3VyY2UgPSBvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyYWQyOS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNTMyMjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXUyBVSSBEZXZlbG9wZXIgUmVzb3VyY2VzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgemlwcyBmb3IgV1NUIFdTIFVJLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNGE0OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgotPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Ci08cD5KdW5lIDA2LCAyMDA3PC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLSAgIAotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAotICAgCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKLSAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgotICAgCi08dWw+Ci0JPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KLQk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+Ci0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCi0gICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KLQk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KLTwvdWw+ICAgCi0gCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0JPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQkJCi08cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCi0JPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLQk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLSAgIAotPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5MTZkZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLQotPHA+SnVuZSAwNiwgMjAwNzwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08aDM+U291cmNlIENvZGU8L2gzPgotPHA+VGhpcyBwbHVnLWluIGNvbnRhaW5zIHNvdXJjZSBjb2RlIHppcCBmaWxlcyAoJnF1b3Q7U291cmNlIFppcHMmcXVvdDspIHRoYXQgY29ycmVzcG9uZCB0byBiaW5hcnkgY29udGVudCBpbiBvdGhlciBwbHVnLWlucy4gVGhlc2UgU291cmNlIFppcHMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlCi1hZ3JlZW1lbnRzIGFuZC9vciBub3RpY2VzLiBEZXRhaWxzIGFib3V0IHRoZXNlIGxpY2Vuc2UgYWdyZWVtZW50cyBhbmQgbm90aWNlcyBhcmUgY29udGFpbmVkIGluICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgZmlsZXMgKCZxdW90O0Fib3V0cyZxdW90OykgbG9jYXRlZCBpbiBzdWItZGlyZWN0b3JpZXMgaW4gdGhlCi1zcmMvIGRpcmVjdG9yeSBvZiB0aGlzIHBsdWctaW4uIFN1Y2ggQWJvdXRzIGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgU291cmNlIFppcHMgaW4gdGhhdCBkaXJlY3RvcnksIG5vdCB0aGUgRVBMLjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgYWJvdXQuaW5pCi0jIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmVhdHVyZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyAiJWtleSIgYXJlIGV4dGVybmFsaXplZCBzdHJpbmdzIGRlZmluZWQgaW4gYWJvdXQucHJvcGVydGllcwotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0jIFByb3BlcnR5ICJhYm91dFRleHQiIGNvbnRhaW5zIGJsdXJiIGZvciAiQWJvdXQiIGRpYWxvZyAodHJhbnNsYXRlZCkKLWFib3V0VGV4dD0lYmx1cmIKLQotIyBQcm9wZXJ0eSAid2luZG93SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2luZG93IGljb24gKDE2eDE2KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJmZWF0dXJlSW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gZmVhdHVyZSBpbWFnZSAoMzJ4MzIpCi1mZWF0dXJlSW1hZ2U9d3RwX3Byb2QzMi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotCi0KLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmYjczNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncw0KLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMNCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpDQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLg0KLQ0KLTA9QGJ1aWxkQA0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzk3ODdhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgVUlcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0IEVjbGlwc2UgY29udHJpYnV0b3JzIGFuZCBvdGhlcnMgMjAwNS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1WaXNpdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGE1NzVjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCwgYWJvdXQuaW5pLCBhYm91dC5tYXBwaW5ncywgYWJvdXQucHJvcGVydGllcywgd3RwX3Byb2QzMi5wbmcsIHBsdWdpbi5wcm9wZXJ0aWVzLCBwbHVnaW4ueG1sLCBzcmMvKiosIE1FVEEtSU5GLwotc291cmNlUGx1Z2luID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhNjU0NS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1wbHVnaW5OYW1lPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIFVJIFNvdXJjZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VlZmY1Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZV8xLjAuMC5qYXIKLW9yZy5lY2xpcHNlLndzdC54bWxfdXNlcmRvYy5mZWF0dXJlXzEuMC4wLmphcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNTY3NWUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDc2OTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2E1ODVjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdlYiBTZXJ2aWNlcyBVc2VyIERvY3VtZW50YXRpb24KLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XU1QgV2ViIHNlcnZpY2VzIHVzZXIgZG9jdW1lbnRhdGlvbgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFmNmIyYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjA1MGM4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTM4NmY3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gRGVjIDE3IDE3OjM2OjU5IEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTAyNjAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWFjMmViLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU0RMIDEuNSBGZWF0dXJlCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249V1NETCAxLjUgRmVhdHVyZQotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lLCAyMDA4XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNGExMjIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjEuNS4xLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiICAgICAgCi0gICAgICBwbHVnaW49Im9yZy5lY2xpcHNlLndzdCIKLSAgICAgIGltYWdlPSJlY2xpcHNlX3VwZGF0ZV8xMjAuanBnIj4KLSAgIAotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotICAgCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgud3NkbCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIxLjUuMS5xdWFsaWZpZXIiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmFiZmI0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5OGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3NjNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAyZTdjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2RiMTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotI1RodSBNYXkgMzEgMTQ6Mjg6MzMgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnN0YW5jZS9vcmcuZWNsaXBzZS5jb3JlLm5ldC9vcmcuZWNsaXBzZS5jb3JlLm5ldC5oYXNNaWdyYXRlZD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3MDQwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozOSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTA3MzM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAyLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5qZHQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2UuanN0LndzLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUNsYXNzUGF0aDogdGVzdC5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlYWMzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGRhdGEvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3QuamFyCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB0ZXN0Lmphcgotb3V0cHV0LnRlc3QuamFyID0gYmluLwotc291cmNlLnRlc3QuamFyID0gdGVzdHMvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VQcm94eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlUHJveHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3YTQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VQcm94eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQXJlYVNlcnZpY2VQcm94eSBpbXBsZW1lbnRzIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIHsKLSAgcHJpdmF0ZSBTdHJpbmcgX2VuZHBvaW50ID0gbnVsbDsKLSAgcHJpdmF0ZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSBhcmVhU2VydmljZV9Qb3J0VHlwZSA9IG51bGw7Ci0gIAotICBwdWJsaWMgQXJlYVNlcnZpY2VQcm94eSgpIHsKLSAgICBfaW5pdEFyZWFTZXJ2aWNlUHJveHkoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIF9pbml0QXJlYVNlcnZpY2VQcm94eSgpIHsKLSAgICB0cnkgewotICAgICAgYXJlYVNlcnZpY2VfUG9ydFR5cGUgPSAobmV3IG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yKCkpLmdldEFyZWFTZXJ2aWNlU09BUCgpOwotICAgICAgaWYgKGFyZWFTZXJ2aWNlX1BvcnRUeXBlICE9IG51bGwpIHsKLSAgICAgICAgaWYgKF9lbmRwb2ludCAhPSBudWxsKQotICAgICAgICAgICgoamF2YXgueG1sLnJwYy5TdHViKWFyZWFTZXJ2aWNlX1BvcnRUeXBlKS5fc2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIiwgX2VuZHBvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIF9lbmRwb2ludCA9IChTdHJpbmcpKChqYXZheC54bWwucnBjLlN0dWIpYXJlYVNlcnZpY2VfUG9ydFR5cGUpLl9nZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiKTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHNlcnZpY2VFeGNlcHRpb24pIHt9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kcG9pbnQoKSB7Ci0gICAgcmV0dXJuIF9lbmRwb2ludDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50KSB7Ci0gICAgX2VuZHBvaW50ID0gZW5kcG9pbnQ7Ci0gICAgaWYgKGFyZWFTZXJ2aWNlX1BvcnRUeXBlICE9IG51bGwpCi0gICAgICAoKGphdmF4LnhtbC5ycGMuU3R1YilhcmVhU2VydmljZV9Qb3J0VHlwZSkuX3NldFByb3BlcnR5KCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzcyIsIF9lbmRwb2ludCk7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSBnZXRBcmVhU2VydmljZV9Qb3J0VHlwZSgpIHsKLSAgICBpZiAoYXJlYVNlcnZpY2VfUG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIF9pbml0QXJlYVNlcnZpY2VQcm94eSgpOwotICAgIHJldHVybiBhcmVhU2VydmljZV9Qb3J0VHlwZTsKLSAgfQotICAKLSAgcHVibGljIGZsb2F0IGNhbGN1bGF0ZVJlY3RBcmVhKG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkRpbWVuc2lvbnMgcGFyYW1ldGVycykgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbnsKLSAgICBpZiAoYXJlYVNlcnZpY2VfUG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIF9pbml0QXJlYVNlcnZpY2VQcm94eSgpOwotICAgIHJldHVybiBhcmVhU2VydmljZV9Qb3J0VHlwZS5jYWxjdWxhdGVSZWN0QXJlYShwYXJhbWV0ZXJzKTsKLSAgfQotICAKLSAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlU09BUFN0dWIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVNPQVBTdHViLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZWI5MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlU09BUFN0dWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQXJlYVNlcnZpY2VTT0FQU3R1Yi5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZTsKLQotcHVibGljIGNsYXNzIEFyZWFTZXJ2aWNlU09BUFN0dWIgZXh0ZW5kcyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlN0dWIgaW1wbGVtZW50cyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSB7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlckNsYXNzZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWRTZXJRTmFtZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWRTZXJGYWN0b3JpZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWREZXNlckZhY3RvcmllcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0KLSAgICBzdGF0aWMgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MgW10gX29wZXJhdGlvbnM7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBfb3BlcmF0aW9ucyA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzY1sxXTsKLSAgICAgICAgX2luaXRPcGVyYXRpb25EZXNjMSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgX2luaXRPcGVyYXRpb25EZXNjMSgpewotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYyBvcGVyOwotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYyBwYXJhbTsKLSAgICAgICAgb3BlciA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYygpOwotICAgICAgICBvcGVyLnNldE5hbWUoIkNhbGN1bGF0ZVJlY3RBcmVhIik7Ci0gICAgICAgIHBhcmFtID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgInBhcmFtZXRlcnMiKSwgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MuSU4sIG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgImRpbWVuc2lvbnMiKSwgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuRGltZW5zaW9ucy5jbGFzcywgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgb3Blci5hZGRQYXJhbWV0ZXIocGFyYW0pOwotICAgICAgICBvcGVyLnNldFJldHVyblR5cGUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IikpOwotICAgICAgICBvcGVyLnNldFJldHVybkNsYXNzKGZsb2F0LmNsYXNzKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5RTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJhcmVhIikpOwotICAgICAgICBvcGVyLnNldFN0eWxlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuU3R5bGUuRE9DVU1FTlQpOwotICAgICAgICBvcGVyLnNldFVzZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlVzZS5MSVRFUkFMKTsKLSAgICAgICAgX29wZXJhdGlvbnNbMF0gPSBvcGVyOwotCi0gICAgfQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlU09BUFN0dWIoKSB0aHJvd3Mgb3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCB7Ci0gICAgICAgICB0aGlzKG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBBcmVhU2VydmljZVNPQVBTdHViKGphdmEubmV0LlVSTCBlbmRwb2ludFVSTCwgamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgIHRoaXMoc2VydmljZSk7Ci0gICAgICAgICBzdXBlci5jYWNoZWRFbmRwb2ludCA9IGVuZHBvaW50VVJMOwotICAgIH0KLQotICAgIHB1YmxpYyBBcmVhU2VydmljZVNPQVBTdHViKGphdmF4LnhtbC5ycGMuU2VydmljZSBzZXJ2aWNlKSB0aHJvd3Mgb3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCB7Ci0gICAgICAgIGlmIChzZXJ2aWNlID09IG51bGwpIHsKLSAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdXBlci5zZXJ2aWNlID0gc2VydmljZTsKLSAgICAgICAgfQotICAgICAgICAoKG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU2VydmljZSlzdXBlci5zZXJ2aWNlKS5zZXRUeXBlTWFwcGluZ1ZlcnNpb24oIjEuMiIpOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGNsczsKLSAgICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcU5hbWU7Ci0gICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHFOYW1lMjsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBiZWFuc2YgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkJlYW5TZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBiZWFuZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkJlYW5EZXNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGVudW1zZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuRW51bVNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGVudW1kZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuRW51bURlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgYXJyYXlzZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQXJyYXlTZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBhcnJheWRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5BcnJheURlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlc2YgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLlNpbXBsZVNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIHNpbXBsZWRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5TaW1wbGVEZXNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIHNpbXBsZWxpc3RzZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuU2ltcGxlTGlzdFNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIHNpbXBsZWxpc3RkZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuU2ltcGxlTGlzdERlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBxTmFtZSA9IG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgImRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIGNhY2hlZFNlclFOYW1lcy5hZGQocU5hbWUpOwotICAgICAgICAgICAgY2xzID0gb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuRGltZW5zaW9ucy5jbGFzczsKLSAgICAgICAgICAgIGNhY2hlZFNlckNsYXNzZXMuYWRkKGNscyk7Ci0gICAgICAgICAgICBjYWNoZWRTZXJGYWN0b3JpZXMuYWRkKGJlYW5zZik7Ci0gICAgICAgICAgICBjYWNoZWREZXNlckZhY3Rvcmllcy5hZGQoYmVhbmRmKTsKLQotICAgIH0KLQotICAgIHByb3RlY3RlZCBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgY3JlYXRlQ2FsbCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIF9jYWxsID0gc3VwZXIuX2NyZWF0ZUNhbGwoKTsKLSAgICAgICAgICAgIGlmIChzdXBlci5tYWludGFpblNlc3Npb25TZXQpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRNYWludGFpblNlc3Npb24oc3VwZXIubWFpbnRhaW5TZXNzaW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRVc2VybmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VXNlcm5hbWUoc3VwZXIuY2FjaGVkVXNlcm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFBhc3N3b3JkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQYXNzd29yZChzdXBlci5jYWNoZWRQYXNzd29yZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkRW5kcG9pbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFRhcmdldEVuZHBvaW50QWRkcmVzcyhzdXBlci5jYWNoZWRFbmRwb2ludCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkVGltZW91dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VGltZW91dChzdXBlci5jYWNoZWRUaW1lb3V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRQb3J0TmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UG9ydE5hbWUoc3VwZXIuY2FjaGVkUG9ydE5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgamF2YS51dGlsLkVudW1lcmF0aW9uIGtleXMgPSBzdXBlci5jYWNoZWRQcm9wZXJ0aWVzLmtleXMoKTsKLSAgICAgICAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBrZXkgPSAoamF2YS5sYW5nLlN0cmluZykga2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgIF9jYWxsLnNldFByb3BlcnR5KGtleSwgc3VwZXIuY2FjaGVkUHJvcGVydGllcy5nZXQoa2V5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBBbGwgdGhlIHR5cGUgbWFwcGluZyBpbmZvcm1hdGlvbiBpcyByZWdpc3RlcmVkCi0gICAgICAgICAgICAvLyB3aGVuIHRoZSBmaXJzdCBjYWxsIGlzIG1hZGUuCi0gICAgICAgICAgICAvLyBUaGUgdHlwZSBtYXBwaW5nIGluZm9ybWF0aW9uIGlzIGFjdHVhbGx5IHJlZ2lzdGVyZWQgaW4KLSAgICAgICAgICAgIC8vIHRoZSBUeXBlTWFwcGluZ1JlZ2lzdHJ5IG9mIHRoZSBzZXJ2aWNlLCB3aGljaAotICAgICAgICAgICAgLy8gaXMgdGhlIHJlYXNvbiB3aHkgcmVnaXN0cmF0aW9uIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgZmlyc3QgY2FsbC4KLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgICAgIGlmIChmaXJzdENhbGwoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IHNldCBlbmNvZGluZyBzdHlsZSBiZWZvcmUgcmVnaXN0ZXJpbmcgc2VyaWFsaXplcnMKLSAgICAgICAgICAgICAgICAgICAgX2NhbGwuc2V0RW5jb2RpbmdTdHlsZShudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWNoZWRTZXJGYWN0b3JpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBjbHMgPSAoamF2YS5sYW5nLkNsYXNzKSBjYWNoZWRTZXJDbGFzc2VzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcU5hbWUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkgY2FjaGVkU2VyUU5hbWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3QgeCA9IGNhY2hlZFNlckZhY3Rvcmllcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIENsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIHNmID0gKGphdmEubGFuZy5DbGFzcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZFNlckZhY3Rvcmllcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGRmID0gKGphdmEubGFuZy5DbGFzcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZERlc2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FsbC5yZWdpc3RlclR5cGVNYXBwaW5nKGNscywgcU5hbWUsIHNmLCBkZiwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeCBpbnN0YW5jZW9mIGphdmF4LnhtbC5ycGMuZW5jb2RpbmcuU2VyaWFsaXplckZhY3RvcnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuU2VyaWFsaXplckZhY3Rvcnkgc2YgPSAob3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLlNlcmlhbGl6ZXJGYWN0b3J5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkU2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuRGVzZXJpYWxpemVyRmFjdG9yeSBkZiA9IChvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuRGVzZXJpYWxpemVyRmFjdG9yeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZERlc2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FsbC5yZWdpc3RlclR5cGVNYXBwaW5nKGNscywgcU5hbWUsIHNmLCBkZiwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIF9jYWxsOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChqYXZhLmxhbmcuVGhyb3dhYmxlIF90KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgb3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCgiRmFpbHVyZSB0cnlpbmcgdG8gZ2V0IHRoZSBDYWxsIG9iamVjdCIsIF90KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBmbG9hdCBjYWxjdWxhdGVSZWN0QXJlYShvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zIHBhcmFtZXRlcnMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICBpZiAoc3VwZXIuY2FjaGVkRW5kcG9pbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5Ob0VuZFBvaW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIF9jYWxsID0gY3JlYXRlQ2FsbCgpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb24oX29wZXJhdGlvbnNbMF0pOwotICAgICAgICBfY2FsbC5zZXRVc2VTT0FQQWN0aW9uKHRydWUpOwotICAgICAgICBfY2FsbC5zZXRTT0FQQWN0aW9uVVJJKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvTmV3T3BlcmF0aW9uIik7Ci0gICAgICAgIF9jYWxsLnNldEVuY29kaW5nU3R5bGUobnVsbCk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbC5TRU5EX1RZUEVfQVRUUiwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5BeGlzRW5naW5lLlBST1BfRE9NVUxUSVJFRlMsIEJvb2xlYW4uRkFMU0UpOwotICAgICAgICBfY2FsbC5zZXRTT0FQVmVyc2lvbihvcmcuYXBhY2hlLmF4aXMuc29hcC5TT0FQQ29uc3RhbnRzLlNPQVAxMV9DT05TVEFOVFMpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb25OYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCIiLCAiQ2FsY3VsYXRlUmVjdEFyZWEiKSk7Ci0KLSAgICAgICAgc2V0UmVxdWVzdEhlYWRlcnMoX2NhbGwpOwotICAgICAgICBzZXRBdHRhY2htZW50cyhfY2FsbCk7Ci0gdHJ5IHsgICAgICAgIGphdmEubGFuZy5PYmplY3QgX3Jlc3AgPSBfY2FsbC5pbnZva2UobmV3IGphdmEubGFuZy5PYmplY3RbXSB7cGFyYW1ldGVyc30pOwotCi0gICAgICAgIGlmIChfcmVzcCBpbnN0YW5jZW9mIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbikgewotICAgICAgICAgICAgdGhyb3cgKGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbilfcmVzcDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGV4dHJhY3RBdHRhY2htZW50cyhfY2FsbCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJldHVybiAoKGphdmEubGFuZy5GbG9hdCkgX3Jlc3ApLmZsb2F0VmFsdWUoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gX2V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgIHJldHVybiAoKGphdmEubGFuZy5GbG9hdCkgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkphdmFVdGlscy5jb252ZXJ0KF9yZXNwLCBmbG9hdC5jbGFzcykpLmZsb2F0VmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICB9IGNhdGNoIChvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IGF4aXNGYXVsdEV4Y2VwdGlvbikgewotICB0aHJvdyBheGlzRmF1bHRFeGNlcHRpb247Ci19Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfUG9ydFR5cGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9Qb3J0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTY1ZjY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9Qb3J0VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIEFyZWFTZXJ2aWNlX1BvcnRUeXBlLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgaW50ZXJmYWNlIEFyZWFTZXJ2aWNlX1BvcnRUeXBlIGV4dGVuZHMgamF2YS5ybWkuUmVtb3RlIHsKLSAgICBwdWJsaWMgZmxvYXQgY2FsY3VsYXRlUmVjdEFyZWEob3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuRGltZW5zaW9ucyBwYXJhbWV0ZXJzKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9TZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MDkzMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBBcmVhU2VydmljZV9TZXJ2aWNlLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgaW50ZXJmYWNlIEFyZWFTZXJ2aWNlX1NlcnZpY2UgZXh0ZW5kcyBqYXZheC54bWwucnBjLlNlcnZpY2UgewotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEFyZWFTZXJ2aWNlU09BUEFkZHJlc3MoKTsKLQotICAgIHB1YmxpYyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSBnZXRBcmVhU2VydmljZVNPQVAoKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uOwotCi0gICAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlU09BUChqYXZhLm5ldC5VUkwgcG9ydEFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2RmYzBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvci5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZTsKLQotcHVibGljIGNsYXNzIEFyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yIGV4dGVuZHMgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlIGltcGxlbWVudHMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfU2VydmljZSB7Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IoKSB7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3Iob3JnLmFwYWNoZS5heGlzLkVuZ2luZUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIHN1cGVyKGNvbmZpZyk7Ci0gICAgfQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yKGphdmEubGFuZy5TdHJpbmcgd3NkbExvYywgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBzTmFtZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHN1cGVyKHdzZGxMb2MsIHNOYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBVc2UgdG8gZ2V0IGEgcHJveHkgY2xhc3MgZm9yIEFyZWFTZXJ2aWNlU09BUAotICAgIHByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBBcmVhU2VydmljZVNPQVBfYWRkcmVzcyA9ICJodHRwOi8vbG9jYWxob3N0OjgwODAvQXJlYVByb2ovc2VydmljZXMvQXJlYVNlcnZpY2VTT0FQIjsKLQotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEFyZWFTZXJ2aWNlU09BUEFkZHJlc3MoKSB7Ci0gICAgICAgIHJldHVybiBBcmVhU2VydmljZVNPQVBfYWRkcmVzczsKLSAgICB9Ci0KLSAgICAvLyBUaGUgV1NERCBzZXJ2aWNlIG5hbWUgZGVmYXVsdHMgdG8gdGhlIHBvcnQgbmFtZS4KLSAgICBwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgQXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lID0gIkFyZWFTZXJ2aWNlU09BUCI7Ci0KLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgewotICAgICAgICBBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSBnZXRBcmVhU2VydmljZVNPQVAoKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICBqYXZhLm5ldC5VUkwgZW5kcG9pbnQ7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBlbmRwb2ludCA9IG5ldyBqYXZhLm5ldC5VUkwoQXJlYVNlcnZpY2VTT0FQX2FkZHJlc3MpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZ2V0QXJlYVNlcnZpY2VTT0FQKGVuZHBvaW50KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgZ2V0QXJlYVNlcnZpY2VTT0FQKGphdmEubmV0LlVSTCBwb3J0QWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZVNPQVBTdHViIF9zdHViID0gbmV3IG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlU09BUFN0dWIocG9ydEFkZHJlc3MsIHRoaXMpOwotICAgICAgICAgICAgX3N0dWIuc2V0UG9ydE5hbWUoZ2V0QXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lKCkpOwotICAgICAgICAgICAgcmV0dXJuIF9zdHViOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IGUpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QXJlYVNlcnZpY2VTT0FQRW5kcG9pbnRBZGRyZXNzKGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgewotICAgICAgICBBcmVhU2VydmljZVNPQVBfYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UsIGdldCB0aGUgc3R1YiBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKiBJZiB0aGlzIHNlcnZpY2UgaGFzIG5vIHBvcnQgZm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UsCi0gICAgICogdGhlbiBTZXJ2aWNlRXhjZXB0aW9uIGlzIHRocm93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgamF2YS5ybWkuUmVtb3RlIGdldFBvcnQoQ2xhc3Mgc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkpIHsKLSAgICAgICAgICAgICAgICBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZVNPQVBTdHViIF9zdHViID0gbmV3IG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlU09BUFN0dWIobmV3IGphdmEubmV0LlVSTChBcmVhU2VydmljZVNPQVBfYWRkcmVzcyksIHRoaXMpOwotICAgICAgICAgICAgICAgIF9zdHViLnNldFBvcnROYW1lKGdldEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbih0KTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBzdHViIGltcGxlbWVudGF0aW9uIGZvciB0aGUgaW50ZXJmYWNlOiAgIiArIChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UgPT0gbnVsbCA/ICJudWxsIiA6IHNlcnZpY2VFbmRwb2ludEludGVyZmFjZS5nZXROYW1lKCkpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdGhlIGdpdmVuIGludGVyZmFjZSwgZ2V0IHRoZSBzdHViIGltcGxlbWVudGF0aW9uLgotICAgICAqIElmIHRoaXMgc2VydmljZSBoYXMgbm8gcG9ydCBmb3IgdGhlIGdpdmVuIGludGVyZmFjZSwKLSAgICAgKiB0aGVuIFNlcnZpY2VFeGNlcHRpb24gaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBqYXZhLnJtaS5SZW1vdGUgZ2V0UG9ydChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBDbGFzcyBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBpZiAocG9ydE5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFBvcnQoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKLSAgICAgICAgfQotICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGlucHV0UG9ydE5hbWUgPSBwb3J0TmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgaWYgKCJBcmVhU2VydmljZVNPQVAiLmVxdWFscyhpbnB1dFBvcnROYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIGdldEFyZWFTZXJ2aWNlU09BUCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgIHsKLSAgICAgICAgICAgIGphdmEucm1pLlJlbW90ZSBfc3R1YiA9IGdldFBvcnQoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKLSAgICAgICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViKSBfc3R1Yikuc2V0UG9ydE5hbWUocG9ydE5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIF9zdHViOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgZ2V0U2VydmljZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJBcmVhU2VydmljZSIpOwotICAgIH0KLQotICAgIHByaXZhdGUgamF2YS51dGlsLkhhc2hTZXQgcG9ydHMgPSBudWxsOwotCi0gICAgcHVibGljIGphdmEudXRpbC5JdGVyYXRvciBnZXRQb3J0cygpIHsKLSAgICAgICAgaWYgKHBvcnRzID09IG51bGwpIHsKLSAgICAgICAgICAgIHBvcnRzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7Ci0gICAgICAgICAgICBwb3J0cy5hZGQobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiQXJlYVNlcnZpY2VTT0FQIikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwb3J0cy5pdGVyYXRvcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0IHRoZSBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQgbmFtZS4KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50QWRkcmVzcyhqYXZhLmxhbmcuU3RyaW5nIHBvcnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICAKLWlmICgiQXJlYVNlcnZpY2VTT0FQIi5lcXVhbHMocG9ydE5hbWUpKSB7Ci0gICAgICAgICAgICBzZXRBcmVhU2VydmljZVNPQVBFbmRwb2ludEFkZHJlc3MoYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAKLXsgLy8gVW5rbm93biBQb3J0IE5hbWUKLSAgICAgICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24oIiBDYW5ub3Qgc2V0IEVuZHBvaW50IEFkZHJlc3MgZm9yIFVua25vd24gUG9ydCIgKyBwb3J0TmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldCB0aGUgZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIHNwZWNpZmllZCBwb3J0IG5hbWUuCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludEFkZHJlc3MoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBwb3J0TmFtZSwgamF2YS5sYW5nLlN0cmluZyBhZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgc2V0RW5kcG9pbnRBZGRyZXNzKHBvcnROYW1lLmdldExvY2FsUGFydCgpLCBhZGRyZXNzKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9EaW1lbnNpb25zLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvRGltZW5zaW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzEwZjk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9EaW1lbnNpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIERpbWVuc2lvbnMuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBEaW1lbnNpb25zICBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICBwcml2YXRlIGZsb2F0IHdpZHRoOwotICAgIHByaXZhdGUgZmxvYXQgaGVpZ2h0OwotCi0gICAgcHVibGljIERpbWVuc2lvbnMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIERpbWVuc2lvbnMoCi0gICAgICAgICAgIGZsb2F0IHdpZHRoLAotICAgICAgICAgICBmbG9hdCBoZWlnaHQpIHsKLSAgICAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHdpZHRoIHZhbHVlIGZvciB0aGlzIERpbWVuc2lvbnMuCi0gICAgICogCi0gICAgICogQHJldHVybiB3aWR0aAotICAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBnZXRXaWR0aCgpIHsKLSAgICAgICAgcmV0dXJuIHdpZHRoOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgd2lkdGggdmFsdWUgZm9yIHRoaXMgRGltZW5zaW9ucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gd2lkdGgKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgewotICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBoZWlnaHQgdmFsdWUgZm9yIHRoaXMgRGltZW5zaW9ucy4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIGhlaWdodAotICAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBnZXRIZWlnaHQoKSB7Ci0gICAgICAgIHJldHVybiBoZWlnaHQ7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBoZWlnaHQgdmFsdWUgZm9yIHRoaXMgRGltZW5zaW9ucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gaGVpZ2h0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SGVpZ2h0KGZsb2F0IGhlaWdodCkgewotICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGphdmEubGFuZy5PYmplY3QgX19lcXVhbHNDYWxjID0gbnVsbDsKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGJvb2xlYW4gZXF1YWxzKGphdmEubGFuZy5PYmplY3Qgb2JqKSB7Ci0gICAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIERpbWVuc2lvbnMpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIERpbWVuc2lvbnMgb3RoZXIgPSAoRGltZW5zaW9ucykgb2JqOwotICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHRoaXMgPT0gb2JqKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKF9fZXF1YWxzQ2FsYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gKF9fZXF1YWxzQ2FsYyA9PSBvYmopOwotICAgICAgICB9Ci0gICAgICAgIF9fZXF1YWxzQ2FsYyA9IG9iajsKLSAgICAgICAgYm9vbGVhbiBfZXF1YWxzOwotICAgICAgICBfZXF1YWxzID0gdHJ1ZSAmJiAKLSAgICAgICAgICAgIHRoaXMud2lkdGggPT0gb3RoZXIuZ2V0V2lkdGgoKSAmJgotICAgICAgICAgICAgdGhpcy5oZWlnaHQgPT0gb3RoZXIuZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIF9fZXF1YWxzQ2FsYyA9IG51bGw7Ci0gICAgICAgIHJldHVybiBfZXF1YWxzOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBfX2hhc2hDb2RlQ2FsYyA9IGZhbHNlOwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGhhc2hDb2RlKCkgewotICAgICAgICBpZiAoX19oYXNoQ29kZUNhbGMpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIF9faGFzaENvZGVDYWxjID0gdHJ1ZTsKLSAgICAgICAgaW50IF9oYXNoQ29kZSA9IDE7Ci0gICAgICAgIF9oYXNoQ29kZSArPSBuZXcgRmxvYXQoZ2V0V2lkdGgoKSkuaGFzaENvZGUoKTsKLSAgICAgICAgX2hhc2hDb2RlICs9IG5ldyBGbG9hdChnZXRIZWlnaHQoKSkuaGFzaENvZGUoKTsKLSAgICAgICAgX19oYXNoQ29kZUNhbGMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIF9oYXNoQ29kZTsKLSAgICB9Ci0KLSAgICAvLyBUeXBlIG1ldGFkYXRhCi0gICAgcHJpdmF0ZSBzdGF0aWMgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlR5cGVEZXNjIHR5cGVEZXNjID0KLSAgICAgICAgbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5UeXBlRGVzYyhEaW1lbnNpb25zLmNsYXNzLCB0cnVlKTsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIHR5cGVEZXNjLnNldFhtbFR5cGUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiZGltZW5zaW9ucyIpKTsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLkVsZW1lbnREZXNjIGVsZW1GaWVsZCA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uRWxlbWVudERlc2MoKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldEZpZWxkTmFtZSgid2lkdGgiKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldFhtbE5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoIiIsICJ3aWR0aCIpKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldFhtbFR5cGUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IikpOwotICAgICAgICBlbGVtRmllbGQuc2V0TmlsbGFibGUoZmFsc2UpOwotICAgICAgICB0eXBlRGVzYy5hZGRGaWVsZERlc2MoZWxlbUZpZWxkKTsKLSAgICAgICAgZWxlbUZpZWxkID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5FbGVtZW50RGVzYygpOwotICAgICAgICBlbGVtRmllbGQuc2V0RmllbGROYW1lKCJoZWlnaHQiKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldFhtbE5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoIiIsICJoZWlnaHQiKSk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXRYbWxUeXBlKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldE5pbGxhYmxlKGZhbHNlKTsKLSAgICAgICAgdHlwZURlc2MuYWRkRmllbGREZXNjKGVsZW1GaWVsZCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHR5cGUgbWV0YWRhdGEgb2JqZWN0Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uVHlwZURlc2MgZ2V0VHlwZURlc2MoKSB7Ci0gICAgICAgIHJldHVybiB0eXBlRGVzYzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgQ3VzdG9tIFNlcmlhbGl6ZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5TZXJpYWxpemVyIGdldFNlcmlhbGl6ZXIoCi0gICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgbWVjaFR5cGUsIAotICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgX2phdmFUeXBlLCAgCi0gICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgX3htbFR5cGUpIHsKLSAgICAgICAgcmV0dXJuIAotICAgICAgICAgIG5ldyAgb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5CZWFuU2VyaWFsaXplcigKLSAgICAgICAgICAgIF9qYXZhVHlwZSwgX3htbFR5cGUsIHR5cGVEZXNjKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgQ3VzdG9tIERlc2VyaWFsaXplcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLkRlc2VyaWFsaXplciBnZXREZXNlcmlhbGl6ZXIoCi0gICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgbWVjaFR5cGUsIAotICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgX2phdmFUeXBlLCAgCi0gICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgX3htbFR5cGUpIHsKLSAgICAgICAgcmV0dXJuIAotICAgICAgICAgIG5ldyAgb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5CZWFuRGVzZXJpYWxpemVyKAotICAgICAgICAgICAgX2phdmFUeXBlLCBfeG1sVHlwZSwgdHlwZURlc2MpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYTdkNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBDb252ZXJ0ZXIuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugd3RwOwotCi1wdWJsaWMgaW50ZXJmYWNlIENvbnZlcnRlciBleHRlbmRzIGphdmEucm1pLlJlbW90ZSB7Ci0gICAgcHVibGljIGZsb2F0IGNlbHNpdXNUb0ZhcmVuaGVpdChmbG9hdCBjZWxzaXVzKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIHB1YmxpYyBmbG9hdCBmYXJlbmhlaXRUb0NlbHNpdXMoZmxvYXQgZmFyZW5oZWl0KSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJQcm94eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJQcm94eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWE3YzQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyUHJveHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSB3dHA7Ci0KLXB1YmxpYyBjbGFzcyBDb252ZXJ0ZXJQcm94eSBpbXBsZW1lbnRzIHd0cC5Db252ZXJ0ZXIgewotICBwcml2YXRlIFN0cmluZyBfZW5kcG9pbnQgPSBudWxsOwotICBwcml2YXRlIHd0cC5Db252ZXJ0ZXIgY29udmVydGVyID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBDb252ZXJ0ZXJQcm94eSgpIHsKLSAgICBfaW5pdENvbnZlcnRlclByb3h5KCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBfaW5pdENvbnZlcnRlclByb3h5KCkgewotICAgIHRyeSB7Ci0gICAgICBjb252ZXJ0ZXIgPSAobmV3IHd0cC5Db252ZXJ0ZXJTZXJ2aWNlTG9jYXRvcigpKS5nZXRDb252ZXJ0ZXIoKTsKLSAgICAgIGlmIChjb252ZXJ0ZXIgIT0gbnVsbCkgewotICAgICAgICBpZiAoX2VuZHBvaW50ICE9IG51bGwpCi0gICAgICAgICAgKChqYXZheC54bWwucnBjLlN0dWIpY29udmVydGVyKS5fc2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIiwgX2VuZHBvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIF9lbmRwb2ludCA9IChTdHJpbmcpKChqYXZheC54bWwucnBjLlN0dWIpY29udmVydGVyKS5fZ2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIik7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiBzZXJ2aWNlRXhjZXB0aW9uKSB7fQotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEVuZHBvaW50KCkgewotICAgIHJldHVybiBfZW5kcG9pbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkgewotICAgIF9lbmRwb2ludCA9IGVuZHBvaW50OwotICAgIGlmIChjb252ZXJ0ZXIgIT0gbnVsbCkKLSAgICAgICgoamF2YXgueG1sLnJwYy5TdHViKWNvbnZlcnRlcikuX3NldFByb3BlcnR5KCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzcyIsIF9lbmRwb2ludCk7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcigpIHsKLSAgICBpZiAoY29udmVydGVyID09IG51bGwpCi0gICAgICBfaW5pdENvbnZlcnRlclByb3h5KCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlcjsKLSAgfQotICAKLSAgcHVibGljIGZsb2F0IGNlbHNpdXNUb0ZhcmVuaGVpdChmbG9hdCBjZWxzaXVzKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uewotICAgIGlmIChjb252ZXJ0ZXIgPT0gbnVsbCkKLSAgICAgIF9pbml0Q29udmVydGVyUHJveHkoKTsKLSAgICByZXR1cm4gY29udmVydGVyLmNlbHNpdXNUb0ZhcmVuaGVpdChjZWxzaXVzKTsKLSAgfQotICAKLSAgcHVibGljIGZsb2F0IGZhcmVuaGVpdFRvQ2Vsc2l1cyhmbG9hdCBmYXJlbmhlaXQpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb257Ci0gICAgaWYgKGNvbnZlcnRlciA9PSBudWxsKQotICAgICAgX2luaXRDb252ZXJ0ZXJQcm94eSgpOwotICAgIHJldHVybiBjb252ZXJ0ZXIuZmFyZW5oZWl0VG9DZWxzaXVzKGZhcmVuaGVpdCk7Ci0gIH0KLSAgCi0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYWFmZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQ29udmVydGVyU2VydmljZS5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSB3dHA7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ29udmVydGVyU2VydmljZSBleHRlbmRzIGphdmF4LnhtbC5ycGMuU2VydmljZSB7Ci0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q29udmVydGVyQWRkcmVzcygpOwotCi0gICAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKCkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcihqYXZhLm5ldC5VUkwgcG9ydEFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2VMb2NhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2VMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZjVjZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBDb252ZXJ0ZXJTZXJ2aWNlTG9jYXRvci5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSB3dHA7Ci0KLXB1YmxpYyBjbGFzcyBDb252ZXJ0ZXJTZXJ2aWNlTG9jYXRvciBleHRlbmRzIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU2VydmljZSBpbXBsZW1lbnRzIHd0cC5Db252ZXJ0ZXJTZXJ2aWNlIHsKLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTZXJ2aWNlTG9jYXRvcigpIHsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTZXJ2aWNlTG9jYXRvcihvcmcuYXBhY2hlLmF4aXMuRW5naW5lQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgc3VwZXIoY29uZmlnKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU2VydmljZUxvY2F0b3IoamF2YS5sYW5nLlN0cmluZyB3c2RsTG9jLCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHNOYW1lKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIod3NkbExvYywgc05hbWUpOwotICAgIH0KLQotICAgIC8vIFVzZSB0byBnZXQgYSBwcm94eSBjbGFzcyBmb3IgQ29udmVydGVyCi0gICAgcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIENvbnZlcnRlcl9hZGRyZXNzID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciI7Ci0KLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDb252ZXJ0ZXJBZGRyZXNzKCkgewotICAgICAgICByZXR1cm4gQ29udmVydGVyX2FkZHJlc3M7Ci0gICAgfQotCi0gICAgLy8gVGhlIFdTREQgc2VydmljZSBuYW1lIGRlZmF1bHRzIHRvIHRoZSBwb3J0IG5hbWUuCi0gICAgcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSA9ICJDb252ZXJ0ZXIiOwotCi0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q29udmVydGVyV1NERFNlcnZpY2VOYW1lKCkgewotICAgICAgICByZXR1cm4gQ29udmVydGVyV1NERFNlcnZpY2VOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgQ29udmVydGVyV1NERFNlcnZpY2VOYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgd3RwLkNvbnZlcnRlciBnZXRDb252ZXJ0ZXIoKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICBqYXZhLm5ldC5VUkwgZW5kcG9pbnQ7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBlbmRwb2ludCA9IG5ldyBqYXZhLm5ldC5VUkwoQ29udmVydGVyX2FkZHJlc3MpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZ2V0Q29udmVydGVyKGVuZHBvaW50KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgd3RwLkNvbnZlcnRlciBnZXRDb252ZXJ0ZXIoamF2YS5uZXQuVVJMIHBvcnRBZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHd0cC5Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIgX3N0dWIgPSBuZXcgd3RwLkNvbnZlcnRlclNvYXBCaW5kaW5nU3R1Yihwb3J0QWRkcmVzcywgdGhpcyk7Ci0gICAgICAgICAgICBfc3R1Yi5zZXRQb3J0TmFtZShnZXRDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgZSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb252ZXJ0ZXJFbmRwb2ludEFkZHJlc3MoamF2YS5sYW5nLlN0cmluZyBhZGRyZXNzKSB7Ci0gICAgICAgIENvbnZlcnRlcl9hZGRyZXNzID0gYWRkcmVzczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdGhlIGdpdmVuIGludGVyZmFjZSwgZ2V0IHRoZSBzdHViIGltcGxlbWVudGF0aW9uLgotICAgICAqIElmIHRoaXMgc2VydmljZSBoYXMgbm8gcG9ydCBmb3IgdGhlIGdpdmVuIGludGVyZmFjZSwKLSAgICAgKiB0aGVuIFNlcnZpY2VFeGNlcHRpb24gaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBqYXZhLnJtaS5SZW1vdGUgZ2V0UG9ydChDbGFzcyBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKHd0cC5Db252ZXJ0ZXIuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpKSB7Ci0gICAgICAgICAgICAgICAgd3RwLkNvbnZlcnRlclNvYXBCaW5kaW5nU3R1YiBfc3R1YiA9IG5ldyB3dHAuQ29udmVydGVyU29hcEJpbmRpbmdTdHViKG5ldyBqYXZhLm5ldC5VUkwoQ29udmVydGVyX2FkZHJlc3MpLCB0aGlzKTsKLSAgICAgICAgICAgICAgICBfc3R1Yi5zZXRQb3J0TmFtZShnZXRDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zdHViOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChqYXZhLmxhbmcuVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24odCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbigiVGhlcmUgaXMgbm8gc3R1YiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGludGVyZmFjZTogICIgKyAoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlID09IG51bGwgPyAibnVsbCIgOiBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UuZ2V0TmFtZSgpKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UsIGdldCB0aGUgc3R1YiBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKiBJZiB0aGlzIHNlcnZpY2UgaGFzIG5vIHBvcnQgZm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UsCi0gICAgICogdGhlbiBTZXJ2aWNlRXhjZXB0aW9uIGlzIHRocm93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgamF2YS5ybWkuUmVtb3RlIGdldFBvcnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBwb3J0TmFtZSwgQ2xhc3Mgc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHBvcnROYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRQb3J0KHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgamF2YS5sYW5nLlN0cmluZyBpbnB1dFBvcnROYW1lID0gcG9ydE5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIGlmICgiQ29udmVydGVyIi5lcXVhbHMoaW5wdXRQb3J0TmFtZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRDb252ZXJ0ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlICB7Ci0gICAgICAgICAgICBqYXZhLnJtaS5SZW1vdGUgX3N0dWIgPSBnZXRQb3J0KHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSk7Ci0gICAgICAgICAgICAoKG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1YikgX3N0dWIpLnNldFBvcnROYW1lKHBvcnROYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIGdldFNlcnZpY2VOYW1lKCkgewotICAgICAgICByZXR1cm4gbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiQ29udmVydGVyU2VydmljZSIpOwotICAgIH0KLQotICAgIHByaXZhdGUgamF2YS51dGlsLkhhc2hTZXQgcG9ydHMgPSBudWxsOwotCi0gICAgcHVibGljIGphdmEudXRpbC5JdGVyYXRvciBnZXRQb3J0cygpIHsKLSAgICAgICAgaWYgKHBvcnRzID09IG51bGwpIHsKLSAgICAgICAgICAgIHBvcnRzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7Ci0gICAgICAgICAgICBwb3J0cy5hZGQobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiQ29udmVydGVyIikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwb3J0cy5pdGVyYXRvcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0IHRoZSBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQgbmFtZS4KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50QWRkcmVzcyhqYXZhLmxhbmcuU3RyaW5nIHBvcnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICAKLWlmICgiQ29udmVydGVyIi5lcXVhbHMocG9ydE5hbWUpKSB7Ci0gICAgICAgICAgICBzZXRDb252ZXJ0ZXJFbmRwb2ludEFkZHJlc3MoYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAKLXsgLy8gVW5rbm93biBQb3J0IE5hbWUKLSAgICAgICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24oIiBDYW5ub3Qgc2V0IEVuZHBvaW50IEFkZHJlc3MgZm9yIFVua25vd24gUG9ydCIgKyBwb3J0TmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldCB0aGUgZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIHNwZWNpZmllZCBwb3J0IG5hbWUuCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludEFkZHJlc3MoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBwb3J0TmFtZSwgamF2YS5sYW5nLlN0cmluZyBhZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgc2V0RW5kcG9pbnRBZGRyZXNzKHBvcnROYW1lLmdldExvY2FsUGFydCgpLCBhZGRyZXNzKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU29hcEJpbmRpbmdTdHViLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNvYXBCaW5kaW5nU3R1Yi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzk3YWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU29hcEJpbmRpbmdTdHViLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIENvbnZlcnRlclNvYXBCaW5kaW5nU3R1Yi5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSB3dHA7Ci0KLXB1YmxpYyBjbGFzcyBDb252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIgZXh0ZW5kcyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlN0dWIgaW1wbGVtZW50cyB3dHAuQ29udmVydGVyIHsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyQ2xhc3NlcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlclFOYW1lcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlckZhY3RvcmllcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZERlc2VyRmFjdG9yaWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLQotICAgIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYyBbXSBfb3BlcmF0aW9uczsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIF9vcGVyYXRpb25zID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjWzJdOwotICAgICAgICBfaW5pdE9wZXJhdGlvbkRlc2MxKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBfaW5pdE9wZXJhdGlvbkRlc2MxKCl7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjIG9wZXI7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjIHBhcmFtOwotICAgICAgICBvcGVyID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjKCk7Ci0gICAgICAgIG9wZXIuc2V0TmFtZSgiY2Vsc2l1c1RvRmFyZW5oZWl0Iik7Ci0gICAgICAgIHBhcmFtID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImNlbHNpdXMiKSwgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MuSU4sIG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpLCBmbG9hdC5jbGFzcywgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgb3Blci5hZGRQYXJhbWV0ZXIocGFyYW0pOwotICAgICAgICBvcGVyLnNldFJldHVyblR5cGUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IikpOwotICAgICAgICBvcGVyLnNldFJldHVybkNsYXNzKGZsb2F0LmNsYXNzKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5RTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4iKSk7Ci0gICAgICAgIG9wZXIuc2V0U3R5bGUob3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5TdHlsZS5XUkFQUEVEKTsKLSAgICAgICAgb3Blci5zZXRVc2Uob3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5Vc2UuTElURVJBTCk7Ci0gICAgICAgIF9vcGVyYXRpb25zWzBdID0gb3BlcjsKLQotICAgICAgICBvcGVyID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjKCk7Ci0gICAgICAgIG9wZXIuc2V0TmFtZSgiZmFyZW5oZWl0VG9DZWxzaXVzIik7Ci0gICAgICAgIHBhcmFtID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImZhcmVuaGVpdCIpLCBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYy5JTiwgbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IiksIGZsb2F0LmNsYXNzLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBvcGVyLmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuQ2xhc3MoZmxvYXQuY2xhc3MpOwotICAgICAgICBvcGVyLnNldFJldHVyblFOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImZhcmVuaGVpdFRvQ2Vsc2l1c1JldHVybiIpKTsKLSAgICAgICAgb3Blci5zZXRTdHlsZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlN0eWxlLldSQVBQRUQpOwotICAgICAgICBvcGVyLnNldFVzZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlVzZS5MSVRFUkFMKTsKLSAgICAgICAgX29wZXJhdGlvbnNbMV0gPSBvcGVyOwotCi0gICAgfQotCi0gICAgcHVibGljIENvbnZlcnRlclNvYXBCaW5kaW5nU3R1YigpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgIHRoaXMobnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIENvbnZlcnRlclNvYXBCaW5kaW5nU3R1YihqYXZhLm5ldC5VUkwgZW5kcG9pbnRVUkwsIGphdmF4LnhtbC5ycGMuU2VydmljZSBzZXJ2aWNlKSB0aHJvd3Mgb3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCB7Ci0gICAgICAgICB0aGlzKHNlcnZpY2UpOwotICAgICAgICAgc3VwZXIuY2FjaGVkRW5kcG9pbnQgPSBlbmRwb2ludFVSTDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU29hcEJpbmRpbmdTdHViKGphdmF4LnhtbC5ycGMuU2VydmljZSBzZXJ2aWNlKSB0aHJvd3Mgb3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCB7Ci0gICAgICAgIGlmIChzZXJ2aWNlID09IG51bGwpIHsKLSAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdXBlci5zZXJ2aWNlID0gc2VydmljZTsKLSAgICAgICAgfQotICAgICAgICAoKG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU2VydmljZSlzdXBlci5zZXJ2aWNlKS5zZXRUeXBlTWFwcGluZ1ZlcnNpb24oIjEuMiIpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgY3JlYXRlQ2FsbCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIF9jYWxsID0gc3VwZXIuX2NyZWF0ZUNhbGwoKTsKLSAgICAgICAgICAgIGlmIChzdXBlci5tYWludGFpblNlc3Npb25TZXQpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRNYWludGFpblNlc3Npb24oc3VwZXIubWFpbnRhaW5TZXNzaW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRVc2VybmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VXNlcm5hbWUoc3VwZXIuY2FjaGVkVXNlcm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFBhc3N3b3JkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQYXNzd29yZChzdXBlci5jYWNoZWRQYXNzd29yZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkRW5kcG9pbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFRhcmdldEVuZHBvaW50QWRkcmVzcyhzdXBlci5jYWNoZWRFbmRwb2ludCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkVGltZW91dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VGltZW91dChzdXBlci5jYWNoZWRUaW1lb3V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRQb3J0TmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UG9ydE5hbWUoc3VwZXIuY2FjaGVkUG9ydE5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgamF2YS51dGlsLkVudW1lcmF0aW9uIGtleXMgPSBzdXBlci5jYWNoZWRQcm9wZXJ0aWVzLmtleXMoKTsKLSAgICAgICAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBrZXkgPSAoamF2YS5sYW5nLlN0cmluZykga2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgIF9jYWxsLnNldFByb3BlcnR5KGtleSwgc3VwZXIuY2FjaGVkUHJvcGVydGllcy5nZXQoa2V5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gX2NhbGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgX3QpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0KCJGYWlsdXJlIHRyeWluZyB0byBnZXQgdGhlIENhbGwgb2JqZWN0IiwgX3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGNlbHNpdXNUb0ZhcmVuaGVpdChmbG9hdCBjZWxzaXVzKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHN1cGVyLmNhY2hlZEVuZHBvaW50ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuTm9FbmRQb2ludEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBfY2FsbCA9IGNyZWF0ZUNhbGwoKTsKLSAgICAgICAgX2NhbGwuc2V0T3BlcmF0aW9uKF9vcGVyYXRpb25zWzBdKTsKLSAgICAgICAgX2NhbGwuc2V0VXNlU09BUEFjdGlvbih0cnVlKTsKLSAgICAgICAgX2NhbGwuc2V0U09BUEFjdGlvblVSSSgiIik7Ci0gICAgICAgIF9jYWxsLnNldEVuY29kaW5nU3R5bGUobnVsbCk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbC5TRU5EX1RZUEVfQVRUUiwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5BeGlzRW5naW5lLlBST1BfRE9NVUxUSVJFRlMsIEJvb2xlYW4uRkFMU0UpOwotICAgICAgICBfY2FsbC5zZXRTT0FQVmVyc2lvbihvcmcuYXBhY2hlLmF4aXMuc29hcC5TT0FQQ29uc3RhbnRzLlNPQVAxMV9DT05TVEFOVFMpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb25OYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImNlbHNpdXNUb0ZhcmVuaGVpdCIpKTsKLQotICAgICAgICBzZXRSZXF1ZXN0SGVhZGVycyhfY2FsbCk7Ci0gICAgICAgIHNldEF0dGFjaG1lbnRzKF9jYWxsKTsKLSB0cnkgeyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBfcmVzcCA9IF9jYWxsLmludm9rZShuZXcgamF2YS5sYW5nLk9iamVjdFtdIHtuZXcgamF2YS5sYW5nLkZsb2F0KGNlbHNpdXMpfSk7Ci0KLSAgICAgICAgaWYgKF9yZXNwIGluc3RhbmNlb2YgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyAoamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKV9yZXNwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZXh0cmFjdEF0dGFjaG1lbnRzKF9jYWxsKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBfcmVzcCkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBfZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBvcmcuYXBhY2hlLmF4aXMudXRpbHMuSmF2YVV0aWxzLmNvbnZlcnQoX3Jlc3AsIGZsb2F0LmNsYXNzKSkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gIH0gY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgYXhpc0ZhdWx0RXhjZXB0aW9uKSB7Ci0gIHRocm93IGF4aXNGYXVsdEV4Y2VwdGlvbjsKLX0KLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgZmFyZW5oZWl0VG9DZWxzaXVzKGZsb2F0IGZhcmVuaGVpdCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgb3JnLmFwYWNoZS5heGlzLk5vRW5kUG9pbnRFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBjcmVhdGVDYWxsKCk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbihfb3BlcmF0aW9uc1sxXSk7Ci0gICAgICAgIF9jYWxsLnNldFVzZVNPQVBBY3Rpb24odHJ1ZSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBBY3Rpb25VUkkoIiIpOwotICAgICAgICBfY2FsbC5zZXRFbmNvZGluZ1N0eWxlKG51bGwpOwotICAgICAgICBfY2FsbC5zZXRQcm9wZXJ0eShvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwuU0VORF9UWVBFX0FUVFIsIEJvb2xlYW4uRkFMU0UpOwotICAgICAgICBfY2FsbC5zZXRQcm9wZXJ0eShvcmcuYXBhY2hlLmF4aXMuQXhpc0VuZ2luZS5QUk9QX0RPTVVMVElSRUZTLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0U09BUFZlcnNpb24ob3JnLmFwYWNoZS5heGlzLnNvYXAuU09BUENvbnN0YW50cy5TT0FQMTFfQ09OU1RBTlRTKTsKLSAgICAgICAgX2NhbGwuc2V0T3BlcmF0aW9uTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJmYXJlbmhlaXRUb0NlbHNpdXMiKSk7Ci0KLSAgICAgICAgc2V0UmVxdWVzdEhlYWRlcnMoX2NhbGwpOwotICAgICAgICBzZXRBdHRhY2htZW50cyhfY2FsbCk7Ci0gdHJ5IHsgICAgICAgIGphdmEubGFuZy5PYmplY3QgX3Jlc3AgPSBfY2FsbC5pbnZva2UobmV3IGphdmEubGFuZy5PYmplY3RbXSB7bmV3IGphdmEubGFuZy5GbG9hdChmYXJlbmhlaXQpfSk7Ci0KLSAgICAgICAgaWYgKF9yZXNwIGluc3RhbmNlb2YgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyAoamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKV9yZXNwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZXh0cmFjdEF0dGFjaG1lbnRzKF9jYWxsKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBfcmVzcCkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBfZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBvcmcuYXBhY2hlLmF4aXMudXRpbHMuSmF2YVV0aWxzLmNvbnZlcnQoX3Jlc3AsIGZsb2F0LmNsYXNzKSkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gIH0gY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgYXhpc0ZhdWx0RXhjZXB0aW9uKSB7Ci0gIHRocm93IGF4aXNGYXVsdEV4Y2VwdGlvbjsKLX0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmVmNmM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA0MjQgICAxMzgwNjAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9SlNUIFdlYiBTZXJ2aWNlcyBBeGlzIENvbnN1bXB0aW9uIENvcmUgVGVzdAotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdW5pdHRlc3QvTG9jYXRvclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdW5pdHRlc3QvTG9jYXRvclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjN2E2MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3VuaXR0ZXN0L0xvY2F0b3JUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWwuSmF2YUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWwuU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbC5VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV2ViU2VydmljZUZpbmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW5mbzsKLQotcHVibGljIGNsYXNzIExvY2F0b3JUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlICgpCi0JewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShMb2NhdG9yVGVzdHMuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfQXhpc0NsaWVudExvY2F0b3IgKCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQkVHSU4gdGVzdF9BeGlzQ2xpZW50TG9jYXRvciIpOwotCQl0cnkKLQkJewotCQkJU3RyaW5nW10gcHJvamVjdE5hbWVzID0gbmV3IFN0cmluZ1tdIHsiSmF2YTEiLCJKYXZhMiIsIkphdmEzIn07Ci0JCQlJUHJvamVjdFtdIHByb2plY3RzID0gbmV3IElQcm9qZWN0W3Byb2plY3ROYW1lcy5sZW5ndGhdOwotCQkJZm9yIChpbnQgeD0wOyB4PHByb2plY3ROYW1lcy5sZW5ndGg7IHgrKykKLQkJCXsKLQkJCQlwcm9qZWN0c1t4XSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbeF0pOwotCQkJfQotCQkJVXRpbC5pbml0KCk7Ci0JCQl0cnkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGk8cHJvamVjdHMubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBVdGlsLmNyZWF0ZUphdmFQcm9qZWN0KHByb2plY3ROYW1lc1tpXSk7Ci0JCQkJCVV0aWwuYWRkUmVxdWlyZWRKYXJzVG9KYXZhUHJvamVjdChqYXZhUHJvamVjdCk7Ci0JCQkJCVV0aWwuY29weUV4YW1wbGVzVG9KYXZhUHJvamVjdChqYXZhUHJvamVjdCxuZXcgSmF2YUZpbHRlcigpKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoVGhyb3dhYmxlIHQpCi0JCQl7Ci0JCQkJdC5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQlmYWlsKCJGYWlsZWQgdG8gYWNjZXNzIG9yIGNyZWF0ZSBwcmVyZXF1aXNpdGUgcHJvamVjdHMiKTsKLQkJCX0KLQkJCVdlYlNlcnZpY2VGaW5kZXIgZmluZGVyID0gV2ViU2VydmljZUZpbmRlci5pbnN0YW5jZSgpOwotCQkJU3RyaW5nW10gY2F0ZWdvcnlJZHMgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNhdGVnb3J5SWRzKCk7Ci0JCQlpbnQgbiA9IC0xOwotCQkJSVByb2dyZXNzTW9uaXRvciBtb25pdG9yID0gbmV3IFN0ZG91dFByb2dyZXNzTW9uaXRvcigpOwotCQkJZm9yIChpbnQgaT0wOyBpPGNhdGVnb3J5SWRzLmxlbmd0aDsgaSsrKQotCQkJewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2F0ZWdvcnkgSUQgPSBbIitjYXRlZ29yeUlkc1tpXSsiXSIpOwotCQkJCWlmIChjYXRlZ29yeUlkc1tpXS5lcXVhbHMoIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvci5jYXRlZ29yeS5heGlzIikpCi0JCQkJewotCQkJCQluID0gaTsKLQkJCQkJSXRlcmF0b3IgaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsNik7Ci0JCQkJCWl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0scHJvamVjdHMsbW9uaXRvcik7Ci0JCQkJCWFzc2VydEZvdW5kQ2xpZW50cyhpdGVyLDYpOwotCQkJCQlpdGVyID0gZmluZGVyLmdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWRzW2ldLG5ldyBJUHJvamVjdFtdIHtwcm9qZWN0c1swXX0sbW9uaXRvcik7Ci0JCQkJCWFzc2VydEZvdW5kQ2xpZW50cyhpdGVyLDIpOwotCQkJCQlpdGVyID0gZmluZGVyLmdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWRzW2ldLG5ldyBJUHJvamVjdFtdIHtwcm9qZWN0c1sxXSxwcm9qZWN0c1syXX0sbW9uaXRvcik7Ci0JCQkJCWFzc2VydEZvdW5kQ2xpZW50cyhpdGVyLDQpOwotCQkJCQlJUHJvamVjdCBub1N1Y2hQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJub1N1Y2hQcm9qZWN0Iik7Ci0JCQkJCWl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0sbmV3IElQcm9qZWN0W10ge25vU3VjaFByb2plY3R9LG1vbml0b3IpOwotCQkJCQlhc3NlcnRGb3VuZENsaWVudHMoaXRlciwwKTsKLQkJCQl9Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJBeGlzIGxvY2F0b3IgZXh0ZW5zaW9uIG1pc3NpbmcuIixuID49IDApOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFTkRFRCB0ZXN0X0F4aXNDbGllbnRMb2NhdG9yIik7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEZvdW5kQ2xpZW50cyAoIEl0ZXJhdG9yIGl0ZXIsIGludCB4ICkKLQl7Ci0JCWludCBwID0gMDsKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotCQl7Ci0JCQlPYmplY3Qgb2JqID0gaXRlci5uZXh0KCk7Ci0JCQlhc3NlcnRUcnVlKCJGaW5kZXIgcmV0dXJuZWQgYSAiK29iai5nZXRDbGFzcygpLmdldE5hbWUoKSsiIGluc3RlYWQgb2YgYSBXZWJTZXJ2aWNlQ2xpZW50SW5mby4iLG9iaiBpbnN0YW5jZW9mIFdlYlNlcnZpY2VDbGllbnRJbmZvKTsKLQkJCXArKzsKLQkJCVdlYlNlcnZpY2VDbGllbnRJbmZvIHdzY0luZm8gPSAoV2ViU2VydmljZUNsaWVudEluZm8pb2JqOwotCQkJU3RyaW5nIHByb3h5Q2xhc3NVUkwgPSB3c2NJbmZvLmdldEltcGxVUkwoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQXhpcyBjbGllbnQgcHJveHkgY2xhc3MgPSBbIitwcm94eUNsYXNzVVJMKyJdIik7Ci0JCQlpZiAod3NjSW5mbyBpbnN0YW5jZW9mIFdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbykKLQkJCXsKLQkJCQlXZWJTZXJ2aWNlSmF2YUNsaWVudEluZm8gd3NjSkluZm8gPSAoV2ViU2VydmljZUphdmFDbGllbnRJbmZvKXdzY0luZm87Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiRm91bmQgYW4gdW5leHBlY3RlZCBudWxsIElUeXBlIix3c2NKSW5mby5nZXRUeXBlKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQXhpcyBjbGllbnQgcHJveHkgSVR5cGUgPSBbIit3c2NKSW5mby5nZXRUeXBlKCkrIl0iKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJGb3VuZCAiK3ArIiBwcm94aWVzIGluc3RlYWQgb2YgdGhlIGV4cGVjdGVkICIreCsiLiIscCA9PSB4KTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9GaWx0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0ZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTZjMDQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0ZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcxMSAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbDsKLQotcHVibGljIGludGVyZmFjZSBGaWx0ZXIKLXsKLQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQgKCBPYmplY3Qgb2JqZWN0ICk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9KYXZhRmlsdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9KYXZhRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NjIwNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvSmF2YUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcxMSAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbDsKLQotcHVibGljIGNsYXNzIEphdmFGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIgewotCi0JcHVibGljIGJvb2xlYW4gYWNjZXB0ICggT2JqZWN0IG9iamVjdCApCi0JewotCQlyZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCkuZW5kc1dpdGgoIi5qYXZhIik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9TdGRvdXRQcm9ncmVzc01vbml0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1N0ZG91dFByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTg4YjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1N0ZG91dFByb2dyZXNzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci0KLXB1YmxpYyBjbGFzcyBTdGRvdXRQcm9ncmVzc01vbml0b3IgZXh0ZW5kcyBOdWxsUHJvZ3Jlc3NNb25pdG9yCi17Ci0KLQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gIituYW1lKyIsICIrdG90YWxXb3JrKyIgdW5pdChzKSByZW1haW5pbmcpLiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvbmUoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJbUHJvZ3Jlc3NdIERvbmUuIik7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGFza05hbWUoU3RyaW5nIG5hbWUpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gIituYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJbUHJvZ3Jlc3NdICIrbmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJbUHJvZ3Jlc3NdICIrd29yaysiIHVuaXQocykgY29tcGxldGVkLiIpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1V0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1V0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5MDI2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9VdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MTIxMSAgIDE2MjI4OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd29ya3NwYWNlIHBhdGhzIHdpdGggc3BhY2VzIGJyZWFrIEphdmEgRWRpdG9yIExhdW5jaAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJRW5jb2RlcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgVXRpbAotewotCS8qKgotCSAqIEluaXRpYWxpemVzIHRoaXMgdGVzdHN1aXRlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBpbml0ICgpCi0JewotCQlTdHJpbmcgd29ya3NwYWNlT1NQYXRoID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiV29ya3NwYWNlID0gWyIrd29ya3NwYWNlT1NQYXRoKyJdIik7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZSBhIEphdmEgcHJvamVjdCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCi0JICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdG8gY3JlYXRlLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgcHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElKYXZhUHJvamVjdCBjcmVhdGVKYXZhUHJvamVjdCAoIFN0cmluZyBuYW1lICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgcHJvamVjdCBbIituYW1lKyJdIik7Ci0JCQlwcm9qZWN0LmNyZWF0ZShudWxsKTsKLQkJCXByb2plY3Qub3BlbihudWxsKTsKLQkgICAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKTsKLQkgICAgICAgIGRlc2Muc2V0TmF0dXJlSWRzKG5ldyBTdHJpbmdbXSB7SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JICAgICAgICBJQ29tbWFuZCBjbWQgPSBkZXNjLm5ld0NvbW1hbmQoKTsKLQkgICAgICAgIGNtZC5zZXRCdWlsZGVyTmFtZShKYXZhQ29yZS5CVUlMREVSX0lEKTsKLQkgICAgICAgIGRlc2Muc2V0QnVpbGRTcGVjKG5ldyBJQ29tbWFuZFtdIHtjbWR9KTsKLQkgICAgICAgIHByb2plY3Quc2V0RGVzY3JpcHRpb24oZGVzYyxudWxsKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIEphdmEgcHJvamVjdCBbIituYW1lKyJdIik7Ci0JCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJamF2YVByb2plY3Qub3BlbihudWxsKTsKLQkJcmV0dXJuIGphdmFQcm9qZWN0OwotCX0KLQkKLQkvKioKLQkgKiBBZGRzIEF4aXMgamFycyBhbmQgdGhlIEpSRSB0byB0aGUgY2xhc3NwYXRoIG9mIHRoZSBnaXZlbiBwcm9qZWN0LgotCSAqIEBwYXJhbSBqYXZhUHJvamVjdCBUaGUgcHJvamVjdCB0byBhZGQgYXhpcy5qYXIgdG8uCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIGphciBjb3VsZCBub3QgYmUgYWRkZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZFJlcXVpcmVkSmFyc1RvSmF2YVByb2plY3QgKCBJSmF2YVByb2plY3QgamF2YVByb2plY3QgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQkvLyBHZXQgdGhlIGN1cnJlbnQgY2xhc3NwYXRoIGFzIGEgbGlzdC4KLQkJSUNsYXNzcGF0aEVudHJ5W10gY2xhc3NwYXRoID0gamF2YVByb2plY3QuZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCUxpc3QgbGlzdCA9IG5ldyBMaW5rZWRMaXN0KGphdmEudXRpbC5BcnJheXMuYXNMaXN0KGNsYXNzcGF0aCkpOwotCQkKLQkJLy8gQWRkIHRoZSBKUkUgdG8gdGhlIGxpc3QuCi0JCUlDbGFzc3BhdGhFbnRyeSBjb24gPSBKYXZhQ29yZS5uZXdDb250YWluZXJFbnRyeShuZXcgUGF0aCgib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIikpOwotCQlsaXN0LmFkZChjb24pOwotCQkKLQkJLy8gQWRkIHRoZSBBeGlzIGphcnMgdG8gdGhlIGxpc3QuCi0JCVN0cmluZ1tdIGphcnMgPSBuZXcgU3RyaW5nW10gewotCQkJCSJvcmcuYXBhY2hlLmF4aXMiLCJheGlzLmphciIsCi0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsImNvbW1vbnMtZGlzY292ZXJ5LTAuMi5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmNvbW1vbnNfbG9nZ2luZyIsImNvbW1vbnMtbG9nZ2luZy0xLjAuNC5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmF4aXMiLCJqYXhycGMuamFyIiwKLQkJCQkib3JnLmFwYWNoZS5qYWthcnRhX2xvZzRqIiwibG9nNGotMS4yLjguamFyIiwKLQkJCQkib3JnLmFwYWNoZS5heGlzIiwic2Fhai5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmF4aXMiLCJ3c2RsNGotMS41LjEuamFyIgotCQl9OwotCQkKLQkJZm9yIChpbnQgaT0wOyBpPGphcnMubGVuZ3RoOyBpKz0yKQotCQl7Ci0JCQlJUGF0aCBqYXIgPSBnZXRBeGlzUGx1Z2luSmFyUGF0aChqYXJzW2ldLGphcnNbaSsxXSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGluZyBqYXIgWyIramFyLnRvU3RyaW5nKCkrIl0iKTsKLQkJCUlDbGFzc3BhdGhFbnRyeSBqYXJFbnRyeSA9IEphdmFDb3JlLm5ld0xpYnJhcnlFbnRyeShqYXIsbnVsbCxudWxsKTsKLQkJCWxpc3QuYWRkKGphckVudHJ5KTsKLQkJfQotCQkKLQkJLy8gVXBkYXRlIHRoZSBjdXJyZW50IGNsYXNzcGF0aCBmcm9tIHRoZSBsaXN0LgotCQlJQ2xhc3NwYXRoRW50cnlbXSBuZXdDbGFzc3BhdGggPSAoSUNsYXNzcGF0aEVudHJ5W10pbGlzdC50b0FycmF5KG5ldyBJQ2xhc3NwYXRoRW50cnlbMF0pOwotCQlqYXZhUHJvamVjdC5zZXRSYXdDbGFzc3BhdGgobmV3Q2xhc3NwYXRoLG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIG5hbWVkIGphciBpbiB0aGUgQXhpcyBwbHVnaW4uCi0JICogQHJldHVybiBUaGUgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBuYW1lZCBqYXIgaW4gdGhlIEF4aXMgcGx1Z2luLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgcGF0aCBjb3VsZCBub3QgYmUgY29tcHV0ZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRBeGlzUGx1Z2luSmFyUGF0aCAoIFN0cmluZyBwbHVnaW5OYW1lLCBTdHJpbmcgamFyTmFtZSApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUocGx1Z2luTmFtZSk7Ci0JCWlmIChidW5kbGUgPT0gbnVsbCkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIlVuYWJsZSB0byBsb2NhdGUgcGx1Z2luIG9yZy5hcGFjaGUuYXhpcyIsbnVsbCkpOwotCQl9Ci0JCVVSTCBheGlzVVJMID0gRmlsZUxvY2F0b3IuZmluZChidW5kbGUsbmV3IFBhdGgoImxpYi8iK2phck5hbWUpLG51bGwpOwotCQl0cnkKLQkJewotCQkJVVJMIGxvY2FsQXhpc1VSTCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTChheGlzVVJMKTsKLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKG5ldyBVUkkoVVJJRW5jb2Rlci5lbmNvZGUobG9jYWxBeGlzVVJMLnRvU3RyaW5nKCksICJVVEYtOCIpKSk7Ci0JCQlyZXR1cm4gbmV3IFBhdGgoZmlsZS50b1N0cmluZygpKTsKLQkJfQotCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZWUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gZW5jb2RlIGphciBwYXRoIGZvciBwbHVnaW4gb3JnLmFwYWNoZS5heGlzIix1ZWUpKTsJCQkKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnaW4gb3JnLmFwYWNoZS5heGlzIixpb2UpKTsKLQkJfQotCQljYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIHVzZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIlVuYWJsZSB0byBsb2NhdGUgcGx1Z2luIG9yZy5hcGFjaGUuYXhpcyIsdXNlKSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ29waWVzIGV4YW1wbGVzIHRvIHRoZSBnaXZlbiBKYXZhIHByb2plY3QuCi0JICogQHBhcmFtIGphdmFQcm9qZWN0IFRoZSBwcm9qZWN0IHRvIGNvcHkgdGhlIGV4YW1wbGVzIHRvLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RXhhbXBsZXNUb0phdmFQcm9qZWN0ICggSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0LCBGaWx0ZXIgZmlsdGVyICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJSVByb2plY3QgcHJvamVjdCA9IGphdmFQcm9qZWN0LmdldFByb2plY3QoKTsKLQkJU3RyaW5nIHNvdXJjZVBhdGggPSBwcm9qZWN0LmdldE5hbWUoKTsKLQkJY29weUV4YW1wbGUoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMiLCJkYXRhL2F4aXNTb3VyY2UxIixzb3VyY2VQYXRoLGZpbHRlcik7Ci0JCWNvcHlFeGFtcGxlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzIiwiZGF0YS9heGlzU291cmNlMiIsc291cmNlUGF0aCxmaWx0ZXIpOwotCQlwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuRlVMTF9CVUlMRCxudWxsKTsKLQkJdHJ5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgYnVpbGQgdG8gY29tcGxldGUiKTsKLQkJCVBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCxudWxsKTsKLQkJfQotCQljYXRjaCAoVGhyb3dhYmxlIHQpCi0JCXsKLQkJCS8vRG8gbm90aGluZy4KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBSZWN1cnNpdmVseSBjb3BpZXMgZmlsZXMgZnJvbSBhIHBsdWdpbiB0byB0aGUgd29ya3NwYWNlLgotCSAqIEBwYXJhbSBzb3VyY2VQbHVnaW4gVGhlIHBsdWdpbiB0byBjb3B5IGZyb20uCi0JICogQHBhcmFtIHNvdXJjZVJvb3QgVGhlIHBsdWdpbi1yZWxhdGVkIHBhdGggdG8gY29weSBmcm9tLgotCSAqIEBwYXJhbSB0YXJnZXRXb3Jrc3BhY2VQYXRoIFRoZSB3b3Jrc3BhY2UgcGF0aCB0byBjb3B5IHRvLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RXhhbXBsZSAoIFN0cmluZyBzb3VyY2VQbHVnaW4sIFN0cmluZyBzb3VyY2VSb290LCBTdHJpbmcgdGFyZ2V0V29ya3NwYWNlUGF0aCwgRmlsdGVyIGZpbHRlciApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoc291cmNlUGx1Z2luKTsKLQkJaWYgKGJ1bmRsZSA9PSBudWxsKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnaW4gIitzb3VyY2VQbHVnaW4sbnVsbCkpOwotCQl9Ci0JCUVudW1lcmF0aW9uIGUgPSBidW5kbGUuZ2V0RW50cnlQYXRocyhzb3VyY2VSb290KTsKLQkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0JCXsKLQkJCVN0cmluZyBwYXRoID0gZS5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1bmRsZSBwYXRoID0gWyIrcGF0aCsiXSIpOwotCQkJY29weUV4YW1wbGVGaWxlKGJ1bmRsZSxwYXRoLG5ldyBQYXRoKHNvdXJjZVJvb3QpLnNlZ21lbnRDb3VudCgpLHRhcmdldFdvcmtzcGFjZVBhdGgsZmlsdGVyKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUV4YW1wbGVGaWxlICggQnVuZGxlIGJ1bmRsZSwgU3RyaW5nIHBhdGgsIGludCBvZmZzZXQsIFN0cmluZyB0YXJnZXRXb3Jrc3BhY2VQYXRoLCBGaWx0ZXIgZmlsdGVyICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJSVBhdGggcmVkdWNlZFBhdGggPSBuZXcgUGF0aChwYXRoKS5yZW1vdmVGaXJzdFNlZ21lbnRzKG9mZnNldCk7Ci0JCUlQYXRoIHRhcmdldFBhdGggPSBuZXcgUGF0aCh0YXJnZXRXb3Jrc3BhY2VQYXRoKS5hcHBlbmQocmVkdWNlZFBhdGgpOwotCQlpZiAocGF0aC5lbmRzV2l0aCgiLyIpKQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvbGRlciA9IFsiK3BhdGgrIl0gVGFyZ2V0ID0gWyIrdGFyZ2V0UGF0aCsiXSIpOwotCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcih0YXJnZXRQYXRoKTsKLQkJCWlmICghZm9sZGVyLmV4aXN0cygpKQotCQkJewotCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSx0cnVlLG51bGwpOwotCQkJfQotCQkJRW51bWVyYXRpb24gZSA9IGJ1bmRsZS5nZXRFbnRyeVBhdGhzKHBhdGgpOwotCQkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0JCQl7Ci0JCQkJU3RyaW5nIHN1YnBhdGggPSBlLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCQljb3B5RXhhbXBsZUZpbGUoYnVuZGxlLHN1YnBhdGgsb2Zmc2V0LHRhcmdldFdvcmtzcGFjZVBhdGgsZmlsdGVyKTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmlsZSA9IFsiK3BhdGgrIl0gVGFyZ2V0ID0gWyIrdGFyZ2V0UGF0aCsiXSIpOwotCQkJaWYgKGZpbHRlci5hY2NlcHQocGF0aCkpCi0JCQl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3BpZWQgWyIrcGF0aCsiXSIpOwotCQkJCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkocGF0aCk7Ci0JCQkJY29weUZpbGUodXJsLHRhcmdldFBhdGgpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RmlsZSAoIFVSTCB1cmwsIElQYXRoIHRhcmdldFBhdGggKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHRhcmdldFBhdGgpOwotCQl0cnkKLQkJewotCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLQkJCWZpbGUuY3JlYXRlKHN0cmVhbSx0cnVlLG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJJT0V4Y2VwdGlvbiBjb3B5aW5nIGZpbGUiLGlvZSkpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0ZTg2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQ4MTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLWF4aXNQZXJmbXNyLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODhlMWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2ZThlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotI1RodSBNYXkgMzEgMTQ6Mjg6MDUgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnN0YW5jZS9vcmcuZWNsaXBzZS5jb3JlLm5ldC9vcmcuZWNsaXBzZS5jb3JlLm5ldC5oYXNNaWdyYXRlZD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ2M2NkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjU0IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzFkN2E4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAyLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogcGVyZnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnBsdWdpbi5QZXJmb3JtYW5jZVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzMi50b21jYXQudjU1LnBlcmZtc3IsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS5wbHVnaW4sCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qc3Qud3MsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLAotIG9yZy5lY2xpcHNlLmplbS51dGlsLAotIG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24sCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpczIuY29yZQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg0ODRkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHBlcmZ0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgYmluLwotamFycy5jb21waWxlLm9yZGVyID0gcGVyZnRlc3RzLmphcgotc291cmNlLnBlcmZ0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQucGVyZnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlkODliYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA0MjQgICAxMzgwNjAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9SlNUIFdlYiBTZXJ2aWNlcyBQZXJmb3JtYW5jZSBQbHVnLWluCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNGMxYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1IAotICogMjAwNzA1MDkgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAuV1NXaXphcmRUb21jYXQ1MFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwuUGVyZm9ybWFuY2VKVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5XU0pVbml0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlTWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQm90dG9tIHVwIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFBlcmZtc3JCVUphdmFBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQkvLyBDb25zdGFudHMKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTOyAKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLkJVX1BST0pFQ1RfTkFNRTsKLSAgICAKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCQotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3JrIHNwYWNlIAotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkgICAgCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgSVBhdGggZGVzdFBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSUZvbGRlciBmb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShkZXN0UGF0aCk7CQkKLQkJSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIkJVSmF2YS9zcmMiLGZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBmb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiZm9vL0VjaG8uamF2YSIpKTsKLQkJLy8gRW5zdXJlIHRoYXQgRWNoby5jbGFzcyBpcyBidWlsdCBpbjoKLQkJLy8gPFdlYiBQcm9qZWN0Pi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy9mb28vRWNoby5jbGFzcwotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQkJCi0JfQotCQotICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAod2ViUHJvamVjdD09bnVsbCB8fCAhd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0gICAgICAgICAgSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSwgU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS4wCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1MCk7CQotCQlKVW5pdFV0aWxzLnNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RCVUphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICAJSVN0YXR1c1tdIHN0YXR1czsKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICBKVW5pdFV0aWxzLmRpc2FibGVXU0lEaWFsb2cod2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCSAgICBKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIik7Ci0KLQkgICAgCi0JICAgIFBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkgICAgUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0JPVFRPTV9VUCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5jb21taXQoKTsKLQkgICAgICBwZXJmLmFzc2VydFBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlTWV0ZXIpOwotCSAgICB9Ci0JICAgIGZpbmFsbHkgewotCSAgICAJaWYgKHBlcmZvcm1hbmNlTWV0ZXI9PW51bGwpCi0JICAgIAkJcGVyZm9ybWFuY2VNZXRlci5kaXNwb3NlKCk7Ci0JIAl9Ci0JCQotCSAgICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQkJCi0JfQotCQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOyAgICAKLQkJSUZvbGRlciB3ZWJDb250ZW50Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0gICAgCi0gICAgICAgIElGb2xkZXIgd3NkbEZvbGRlciA9IHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJ3c2RsIik7Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JCWFzc2VydFRydWUod2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKS5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0gICAgCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvL3Nob3cgZXJyb3JzCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJVSmF2YSBFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOwotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gUmVtb3ZlIHRoZSBFQVIgZnJvbSB0aGUgc2VydmVyLgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCS8vSlVuaXRVdGlscy5yZW1vdmVNb2R1bGVGcm9tU2VydmVyKHNlcnZlcl8sd2ViUHJvamVjdCxlbnZfKTsKLQkJCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHdlYlByb2plY3QuZXhpc3RzKCkpOwotCQkKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckNsaWVudEF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQ2xpZW50QXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0NDVlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQ2xpZW50QXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgCi0gKiAyMDA3MDUwOSAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBDbGllbnQgcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzIGFuZCBUb21jYXQgdjUuMAotICovCi1wdWJsaWMgY2xhc3MgUGVyZm1zckNsaWVudEF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMgPSBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTOwotICAKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTElFTlRfUFJPSkVDVF9OQU1FID0gV1NKVW5pdENvbnN0YW50cy5DTElFTlRfUFJPSkVDVF9OQU1FOwotCQotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0gICAgICAgICAgSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoQ0xJRU5UX1BST0pFQ1RfTkFNRSwgQ0xJRU5UX1BST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLFNFUlZFUlRZUEVJRF9UQzUwLCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgCi0JLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgIElGb2xkZXIgZGVzdEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgICAgICBKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiVERKYXZhIixkZXN0Rm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGRlc3RGb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiRWNoby53c2RsIikpOwkJCi0KLQkJSlVuaXRVdGlscy5kaXNhYmxlVmFsaWRhdGlvbih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JCQotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IDUuMCAgICAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsKLQkJSlVuaXRVdGlscy5zZXRDbGllbnRTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbGllbnRBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24KLQl7CQotCSAgCUlTdGF0dXNbXSBzdGF0dXM7Ci0JICAJCi0JCUpVbml0VXRpbHMuZW5hYmxlUHJveHlHZW5lcmF0aW9uKHRydWUpOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLQkJSlVuaXRVdGlscy5zZXRSdW50aW1lUHJlZmVyZW5jZSgib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIpOwotCQotCQlQZXJmb3JtYW5jZSBwZXJmPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JCVBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmYuZ2V0RGVmYXVsdFNjZW5hcmlvSWQodGhpcykpOwkgICAgCi0JICAgIHRyeSB7Ci0gICAgCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotCSAgICAgIHN0YXR1cyA9IFBlcmZvcm1hbmNlSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9DTElFTlQsU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkgICAgCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0KLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgIAotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIHNyY0ZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsKLSAgICAKLQkJLy9JRm9sZGVyIHNyY0ZvbGRlciA9IEpVbml0VXRpbHMuZ2V0U291cmNlRm9sZGVyRm9yV2ViUHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLQkJSUZvbGRlciBmb2xkZXIgPSBzcmNGb2xkZXIuZ2V0Rm9sZGVyKCJmb28iKTsKLQkJYXNzZXJ0VHJ1ZShmb2xkZXIuZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JCQotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy8KLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsgICAgICAgCi0KLQl9Ci0JCi0gIC8qKgotICAgKiBSZW1vdmUgd29ya3NwYWNlIGlmIG5lY2Vzc2FyeQotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JUREphdmFBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zclRESmF2YUF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMzgzMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zclRESmF2YUF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBUb3AgZG93biBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmbXNyVERKYXZhQXhpc1RDNTAgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDUwVGVzdCB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMgPSBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gV1NKVW5pdENvbnN0YW50cy5URF9QUk9KRUNUX05BTUU7Ci0gIAotICBwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLQkgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShQUk9KRUNUX05BTUUsIFBST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLCBTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JICAgIH0KLQkgIH0KLQkgIAotCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwkJCi0JCUlGb2xkZXIgZGVzdEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiVERKYXZhIixkZXN0Rm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGRlc3RGb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiRWNoby53c2RsIikpOwotCQkKLQkJSlVuaXRVdGlscy5kaXNhYmxlVmFsaWRhdGlvbih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCB2NS4wIHNlcnZlcgotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwkKLQkJSlVuaXRVdGlscy5zZXRTZXJ2aWNlU2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0KLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0VERKYXZhQXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgIAotCSAgICBJU3RhdHVzW10gc3RhdHVzOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLQkJSlVuaXRVdGlscy5zZXRSdW50aW1lUHJlZmVyZW5jZSgib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIpOwotCQkKLQkJUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCQlQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfVE9QX0RPV04sU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkgICAgCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0KLQl9Ci0KLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0gICAgICAgIElGb2xkZXIgd2ViQ29udGVudEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOyAgICAKLSAgICAKLQkJCi0JCUlGb2xkZXIgd3NkbEZvbGRlciA9IHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJ3c2RsIik7Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0KLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRESmF2YSBFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOwotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiByZXF1aXJlZAotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjU1L1dTV2l6YXJkVG9tY2F0NTVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTUvV1NXaXphcmRUb21jYXQ1NVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk2NzM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTUvV1NXaXphcmRUb21jYXQ1NVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1NTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzMi5jb3JlLmNvbnRleHQuQXhpczJFbWl0dGVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpczIuY29yZS5wbHVnaW4uV2ViU2VydmljZUF4aXMyQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuV1NXaXphcmRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU1dpemFyZFRvbWNhdDU1VGVzdCBleHRlbmRzIFdTV2l6YXJkVGVzdCB7Ci0gIAotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTUiKTsKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFJVTlRJTUVfSU5TVEFMTF9QQVRIID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3QucnVudGltZS5heGlzMiIpOwotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzU1ID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTUiOwotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNTUgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTUiOwotCSAgCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2Uud2FzLnRlc3RzLldTV2l6YXJkVGVzdCNpbnN0YWxsU2VydmVyUnVudGltZSgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsU2VydmVyUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JLy8gY3JlYXRlIHNlcnZlciBydW50aW1lCi0gICAgc2VydmVyUnVudGltZV8gPSBKVW5pdFV0aWxzLmNyZWF0ZVNlcnZlclJ1bnRpbWUoUlVOVElNRVRZUEVJRF9UQzU1LCBTRVJWRVJfSU5TVEFMTF9QQVRIKTsKLSAgICAKLSAgICAvLyBzZXQgaW5zdGFsbCBsb2NhdGlvbnMKLSAgICBBeGlzMkVtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpczJDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRBeGlzRW1pdHRlckNvbnRleHQoKTsKLSAgICBpZiAoY29udGV4dC5nZXRBeGlzMlJ1bnRpbWVMb2NhdGlvbigpPT1udWxsIHx8IGNvbnRleHQuZ2V0QXhpczJSdW50aW1lTG9jYXRpb24oKS5lcXVhbHMoIiIpKXsKLSAgICAJU3RyaW5nIHJ1bnRpbWVQYXRoID0gUlVOVElNRV9JTlNUQUxMX1BBVEg7Ci0gICAgCWlmIChydW50aW1lUGF0aCE9bnVsbCkgewotICAgIAkJIGNvbnRleHQuc2V0QXhpczJSdW50aW1lTG9jYXRpb24ocnVudGltZVBhdGgpOwotICAgIAl9ICAgICAgICAKLSAgICB9Ci0gIH0KLQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLndhcy50ZXN0cy5XU1dpemFyZFRlc3QjaW5zdGFsbFNlcnZlcigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICBzZXJ2ZXJfID0gSlVuaXRVdGlscy5jcmVhdGVTZXJ2ZXIoIkFwYWNoZSBUb21jYXQgdjU1IiwgU0VSVkVSVFlQRUlEX1RDNTUsIHNlcnZlclJ1bnRpbWVfLCBlbnZfLCBudWxsICk7Ci0gIH0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpczJUQzU1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXMyVEM1NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTNmNDY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpczJUQzU1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzMi50b21jYXQudjU1LnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjU1LldTV2l6YXJkVG9tY2F0NTVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIEJvdHRvbSB1cCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMyIGFuZCBUb21jYXQgdjUuNQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGVyZm1zckJVSmF2YUF4aXMyVEM1NSBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTVUZXN0IHsKLQkvLyBDb25zdGFudHMKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTMjsgCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIkJVQXhpczJXZWIiOwotICAgIAotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgSVBhdGggZGVzdFBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSUZvbGRlciBmb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShkZXN0UGF0aCk7CQkKLQkJSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIkJVSmF2YS9zcmMiLGZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBmb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiZm9vL0VjaG8uamF2YSIpKTsKLQkJLy8gRW5zdXJlIHRoYXQgRWNoby5jbGFzcyBpcyBidWlsdCBpbjoKLQkJLy8gPFdlYiBQcm9qZWN0Pi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy9mb28vRWNoby5jbGFzcwotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQkJLy9hc3NlcnRUcnVlKEpVbml0VXRpbHMuZ2V0Q2xhc3Nlc0ZvbGRlckZvcldlYlByb2plY3QoV0VCX1BST0pFQ1RfTkFNRSkuZ2V0RmlsZShuZXcgUGF0aCgiZm9vL0VjaG8uY2xhc3MiKSkuZXhpc3RzKCkpOwotCQkKLQkJCi0JfQotCQotICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAod2ViUHJvamVjdD09bnVsbCB8fCAhd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0gICAgICAgICAgSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSwgU0VSVkVSVFlQRUlEX1RDNTUsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpczIgYW5kIFRvbWNhdCA1LjUKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzU1KTsJCQotCQlKVW5pdFV0aWxzLnNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RCVUphdmFBeGlzMlRDNTUoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCSAgCUlTdGF0dXNbXSBzdGF0dXM7Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgSlVuaXRVdGlscy5kaXNhYmxlV1NJRGlhbG9nKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLQkgICAgSlVuaXRVdGlscy5zZXRSdW50aW1lUHJlZmVyZW5jZShXU19BWElTMl9SVU5USU1FKTsKLQotCSAgICAKLQkgICAgUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCSAgICBQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQk9UVE9NX1VQLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0KLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkJCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCQkKLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotCQlJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAKLSAgICAgICAgSUZvbGRlciB3ZWJJbmZGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigiV0VCLUlORiIpOwotICAgICAgICBJRm9sZGVyIHNlcnZpY2VzRm9sZGVyID0gd2ViSW5mRm9sZGVyLmdldEZvbGRlcigic2VydmljZXMiKTsKLQkJYXNzZXJ0VHJ1ZShzZXJ2aWNlc0ZvbGRlci5leGlzdHMoKSk7Ci0JCUlGb2xkZXIgd3NGb2xkZXIgPSBzZXJ2aWNlc0ZvbGRlci5nZXRGb2xkZXIoIkVjaG8iKTsKLQkJYXNzZXJ0VHJ1ZSh3c0ZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUod3NGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotICAgIAotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy9zaG93IGVycm9ycwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJCVUphdmEgRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFJlbW92ZSB0aGUgRUFSIGZyb20gdGhlIHNlcnZlci4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkvL0pVbml0VXRpbHMucmVtb3ZlTW9kdWxlRnJvbVNlcnZlcihzZXJ2ZXJfLHdlYlByb2plY3QsZW52Xyk7Ci0JCQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotICAgICAgICBhc3NlcnRGYWxzZSh3ZWJQcm9qZWN0LmV4aXN0cygpKTsKLQkJCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzMlRDNTUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyQ2xpZW50QXhpczJUQzU1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YWMzZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzMlRDNTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTUuV1NXaXphcmRUb21jYXQ1NVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwuUGVyZm9ybWFuY2VKVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5XU0pVbml0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlTWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQ2xpZW50IHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpczIgYW5kIFRvbWNhdCB2NS41Ci0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmbXNyQ2xpZW50QXhpczJUQzU1IGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1NVRlc3QgewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMgPSBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTMjsKLSAgCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xJRU5UX1BST0pFQ1RfTkFNRSA9ICJDbGllbnRBeGlzMldlYiI7Ci0JCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQotICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShDTElFTlRfUFJPSkVDVF9OQU1FLCBDTElFTlRfUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksU0VSVkVSVFlQRUlEX1RDNTUsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLQkvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0gICAgICAgIEpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7CQotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQkJCi0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS41ICAgCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1NSk7Ci0JCUpVbml0VXRpbHMuc2V0Q2xpZW50U2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xpZW50QXhpczJUQzU1KCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsJCi0JICAJSVN0YXR1c1tdIHN0YXR1czsKLQkgIAkKLQkJSlVuaXRVdGlscy5lbmFibGVQcm94eUdlbmVyYXRpb24odHJ1ZSk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCQlKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKFdTX0FYSVMyX1JVTlRJTUUpOwotCi0JCQotCQlQZXJmb3JtYW5jZSBwZXJmPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JCVBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmYuZ2V0RGVmYXVsdFNjZW5hcmlvSWQodGhpcykpOwkgICAgCi0JICAgIHRyeSB7Ci0gICAgCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotCSAgICAgIHN0YXR1cyA9IFBlcmZvcm1hbmNlSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9DTElFTlQsU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkgICAgCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0KLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgIAotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIHNyY0ZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsKLSAgICAKLQkJLy9JRm9sZGVyIHNyY0ZvbGRlciA9IEpVbml0VXRpbHMuZ2V0U291cmNlRm9sZGVyRm9yV2ViUHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLQkJSUZvbGRlciBmb2xkZXIgPSBzcmNGb2xkZXIuZ2V0Rm9sZGVyKCJmb28iKTsKLQkJYXNzZXJ0VHJ1ZShmb2xkZXIuZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JCQotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy8KLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsgICAgICAgCi0KLQl9Ci0JCi0gIC8qKgotICAgKiBSZW1vdmUgd29ya3NwYWNlIGlmIG5lY2Vzc2FyeQotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpczJUQzU1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zclRESmF2YUF4aXMyVEM1NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzMyZDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpczJUQzU1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzMi50b21jYXQudjU1LnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1NS5XU1dpemFyZFRvbWNhdDU1VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBUb3AgZG93biBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMyIGFuZCBUb21jYXQgdjUuNQotICovCi1wdWJsaWMgY2xhc3MgUGVyZm1zclRESmF2YUF4aXMyVEM1NSBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTVUZXN0IHsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVMyOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlREQXhpczJXZWIiOwotICAKLSAgcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0JICAgIAlKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShQUk9KRUNUX05BTUUsIFBST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLCBTRVJWRVJUWVBFSURfVEM1NSwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JICAgIH0KLQkgIH0KLQkgIAkgIAotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsJCQotCQlJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsKLQkJSlVuaXRVdGlscy5kaXNhYmxlVmFsaWRhdGlvbih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCB2NS41IHNlcnZlcgotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTUpOwkKLQkJSlVuaXRVdGlscy5zZXRTZXJ2aWNlU2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0KLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0VERKYXZhQXhpczJUQzU1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAKLQkgICAgSVN0YXR1c1tdIHN0YXR1czsKLQkJSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0JCUpVbml0VXRpbHMuc2V0UnVudGltZVByZWZlcmVuY2UoV1NfQVhJUzJfUlVOVElNRSk7Ci0KLQkJCi0JCVBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkJUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX1RPUF9ET1dOLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5jb21taXQoKTsKLQkgICAgICBwZXJmLmFzc2VydFBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlTWV0ZXIpOwotCSAgICB9Ci0JICAgIGZpbmFsbHkgewotCSAgICAJaWYgKHBlcmZvcm1hbmNlTWV0ZXI9PW51bGwpCi0JICAgIAkJcGVyZm9ybWFuY2VNZXRlci5kaXNwb3NlKCk7Ci0JIAl9Ci0JICAgIAotCSAgICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQotCi0JfQotCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotCQlJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAKLSAgICAgICAgSUZvbGRlciB3ZWJJbmZGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigiV0VCLUlORiIpOwotICAgICAgICBJRm9sZGVyIHNlcnZpY2VzRm9sZGVyID0gd2ViSW5mRm9sZGVyLmdldEZvbGRlcigic2VydmljZXMiKTsKLQkJYXNzZXJ0VHJ1ZShzZXJ2aWNlc0ZvbGRlci5leGlzdHMoKSk7Ci0JCUlGb2xkZXIgd3NGb2xkZXIgPSBzZXJ2aWNlc0ZvbGRlci5nZXRGb2xkZXIoIkVjaG9TZXJ2aWNlIik7Ci0JCWFzc2VydFRydWUod3NGb2xkZXIuZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKHdzRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy8KLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVERKYXZhIEVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUocy5sZW5ndGggPT0gMCk7Ci0JfQotCQotICAvKioKLSAgICogQ2xlYXIgd29ya3NwYWNlIGlmIHJlcXVpcmVkCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSxudWxsKTsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9BbGxQZXJmb3JtYW5jZVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9BbGxQZXJmb3JtYW5jZVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMjY5MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvQWxsUGVyZm9ybWFuY2VUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpczIudG9tY2F0LnY1NS5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzMlRDNTU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpczJUQzU1OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzMi50b21jYXQudjU1LnBlcmZtc3IuUGVyZm1zclRESmF2YUF4aXMyVEM1NTsKLQotcHVibGljIGNsYXNzIEFsbFBlcmZvcm1hbmNlVGVzdHMgewotCQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0gICAgCi0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlIik7Ci0gICAgLy8kSlVuaXQtQkVHSU4kCi0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIFRvbWNhdCA1LjAgc2VydmVyCi0JU3RyaW5nIHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0JaWYgKHM9PW51bGwpewotCQlzID0gU3lzdGVtLmdldFByb3BlcnR5KCJ0b21jYXQ1MERpciIpOwotCX0KLQotCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBlcmZtc3JCVUphdmFBeGlzVEM1MC5jbGFzcyk7Ci0JICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQZXJmbXNyVERKYXZhQXhpc1RDNTAuY2xhc3MpOwotCSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyZm1zckNsaWVudEF4aXNUQzUwLmNsYXNzKTsKLQl9IGVsc2UgewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIldhcm5pbmc6IFRvbWNhdCA1LjAgbm90IGZvdW5kIC0gcGVyZm9ybWFuY2UgdGVzdHMgc2tpcHBlZCIpOwotCX0KLQotCS8vIENoZWNrIGZvciBUb21jYXQgNS41IHNlcnZlcgotCXMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1Iik7Ci0JaWYgKHM9PW51bGwpewotCQlzID0gU3lzdGVtLmdldFByb3BlcnR5KCJ0b21jYXQ1NURpciIpOwotCX0KLQkKLQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0JICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQZXJmbXNyQlVKYXZhQXhpczJUQzU1LmNsYXNzKTsKLQkgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBlcmZtc3JUREphdmFBeGlzMlRDNTUuY2xhc3MpOwotCSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyZm1zckNsaWVudEF4aXMyVEM1NS5jbGFzcyk7Ci0JfSBlbHNlIHsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJXYXJuaW5nOiBUb21jYXQgNS41IG5vdCBmb3VuZCAtIHBlcmZvcm1hbmNlIHRlc3RzIHNraXBwZWQiKTsKLQl9Ci0JCi0gICAgLy8kSlVuaXQtRU5EJAotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvcGx1Z2luL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9wbHVnaW4vUGVyZm9ybWFuY2VQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyNjJiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9wbHVnaW4vUGVyZm9ybWFuY2VQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwMiAgMTg1MjA4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFBlcmZvcm1hbmNlUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFBlcmZvcm1hbmNlUGx1Z2luIHBsdWdpbjsKLQotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgUGVyZm9ybWFuY2VQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUGVyZm9ybWFuY2VQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvRWNsaXBzZVBlcmZvcm1hbmNlTG9nLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS91dGlsL0VjbGlwc2VQZXJmb3JtYW5jZUxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDhmMWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvRWNsaXBzZVBlcmZvcm1hbmNlTG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlTWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLXB1YmxpYyBjbGFzcyBFY2xpcHNlUGVyZm9ybWFuY2VMb2cgaW1wbGVtZW50cyBJTG9nIHsKLQotICBwcml2YXRlIGJvb2xlYW4gcnVuU3RhdGUgPSBmYWxzZTsKLSAgUGVyZm9ybWFuY2UgcGVyZiA9IG51bGw7ICAgICAgCi0gIFBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gbnVsbDsgIAotICAKLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoU3RyaW5nIG9wdGlvbikgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2coaW50IHNldmVyaXR5LCBTdHJpbmcgb3B0aW9uLCBpbnQgbWVzc2FnZU51bSwgT2JqZWN0IGNhbGxlciwgU3RyaW5nIG1ldGhvZCwgVGhyb3dhYmxlIHRocm93YWJsZSkgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIElTdGF0dXMgc3RhdHVzKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2coaW50IHNldmVyaXR5LCBTdHJpbmcgb3B0aW9uLCBpbnQgbWVzc2FnZU51bSwgT2JqZWN0IGNhbGxlciwgU3RyaW5nIG1ldGhvZCwgSVN0YXR1cyBzdGF0dXMpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBPYmplY3Qgb2JqZWN0KSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2coaW50IHNldmVyaXR5LCBTdHJpbmcgb3B0aW9uLCBpbnQgbWVzc2FnZU51bSwgT2JqZWN0IGNhbGxlciwgU3RyaW5nIG1ldGhvZCwgT2JqZWN0IG9iamVjdCkgewotICAgIAotICAgIGlmIChtZXRob2QuZXF1YWxzKCJydW5Db21tYW5kIikpIHsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgaWYgKCFydW5TdGF0ZSkgewotICAgICAgICAgIC8vIGJlZ2luIHBlcmZvcm1hbmNlIHJlY29yZGluZwotICAgICAgICAgIHBlcmYgPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7ICAgICAgCi0gICAgICAgICAgcGVyZm9ybWFuY2VNZXRlciA9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcigoKFN0cmluZylvYmplY3QpLnRvU3RyaW5nKCkpOyAgICAgICAgICAKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0gICAgICAgICAgcnVuU3RhdGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIC8vIGVuZCBwZXJmb3JtYW5jZSByZWNvcmRpbmcKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotICAgICAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0gICAgICAgICAgcGVyZm9ybWFuY2VNZXRlci5kaXNwb3NlKCk7Ci0gICAgICAgICAgcnVuU3RhdGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gaGFuZGxlIGV4Y2VwdGlvbgotICAgICAgfSAgICAgICAgCi0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS91dGlsL1BlcmZvcm1hbmNlSlVuaXRVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGQzODFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMjEgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwOSAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5EeW5hbWljUG9wdXBKVW5pdFdpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0KLXB1YmxpYyBjbGFzcyBQZXJmb3JtYW5jZUpVbml0VXRpbHMgewotICAKLQlwcml2YXRlIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoV2l6YXJkKFN0cmluZyBwbHVnaW5OUyxTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcigpOwotCi0gICAgICAgIER5bmFtaWNQb3B1cEpVbml0V2l6YXJkIHdpemFyZCA9IG5ldyBEeW5hbWljUG9wdXBKVW5pdFdpemFyZChzdGF0dXNIYW5kbGVyKTsKLSAgICAgICAgd2l6YXJkLnNldEluaXRpYWxEYXRhKHdpemFyZElkKTsKLSAgICAgICAgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIG1vbml0b3IgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgIAl3aXphcmQucnVuSGVhZExlc3MoaW5pdGlhbFNlbGVjdGlvbiwgbW9uaXRvcik7Ci0gICAgICAgIH0gCi0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSl7Ci0gICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gc3RhdHVzSGFuZGxlci5nZXRBbGxSZXBvcnRzKCk7Ci0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoQ3JlYXRpb25XaXphcmQoU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsYXVuY2hXaXphcmQoIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIsd2l6YXJkSWQsb2JqZWN0Q2xhc3NJZCxpbml0aWFsU2VsZWN0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoQ29uc3VtcHRpb25XaXphcmQoU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsYXVuY2hXaXphcmQoIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aSIsd2l6YXJkSWQsb2JqZWN0Q2xhc3NJZCxpbml0aWFsU2VsZWN0aW9uKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGJhYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InBlcmZvcm1hbmNlIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSAgPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0JCi0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwZXJmLXRlc3RzLWZpbGUiIHZhbHVlPSIke3Rlc3REaXJ9L3BlcmZvcm1hbmNlLXRlc3RzLnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZV93c19wZXJmb3JtYW5jZSIvPgotICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSItRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwPSR7dGVzdERpcn0vJHt0b21jYXQ1MERpcn0iLz4KLSAgICAgIAotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZV9zdWl0ZSI+Ci0gIAkKLSAgCTwhLS0gSXRlcmF0aW9uIDEgLS0+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQlVKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zclRESmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+ICAJCi0gIAkKLSAgCTwhLS0gSXRlcmF0aW9uIDIgLS0+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQlVKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zclRESmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+ICAJCi0KLSAgCTwhLS0gSXRlcmF0aW9uIDMgLS0+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQlVKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zclRESmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+ICAJCi0KLSAgCTwhLS0gSXRlcmF0aW9uIDQgLS0+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQlVKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zclRESmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+ICAJCi0KLSAgCTwhLS0gSXRlcmF0aW9uIDUgLS0+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQlVKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zclRESmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+ICAJCi0gIAkKLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAKLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiIGRlcGVuZHM9ImluaXQscGVyZm9ybWFuY2Vfc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyM2ZiYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InRlc3RzIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzc2M2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTgwZDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY5NDBhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotI1RodSBNYXkgMzEgMTQ6Mjc6MzkgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnN0YW5jZS9vcmcuZWNsaXBzZS5jb3JlLm5ldC9vcmcuZWNsaXBzZS5jb3JlLm5ldC5oYXNNaWdyYXRlZD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhMmExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjU4IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzhhMzljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDEucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cywKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4sCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZSwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbCwKLSBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZSwKLSBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLAotIG9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aSwKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjU3NmVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICByZWFkbWUudHh0LFwKLSAgICAgICAgICAgICAgIHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBiaW4vCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB0ZXN0cy5qYXIKLXNvdXJjZS50ZXN0cy5qYXIgPSB0ZXN0cy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9CVUphdmEvY2xpZW50L0VjaG9Qcm94eVRlc3QuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL2NsaWVudC9FY2hvUHJveHlUZXN0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IwZTNiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9CVUphdmEvY2xpZW50L0VjaG9Qcm94eVRlc3QuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJqYXZhLmlvLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImVjaG9Qcm94eSIgY2xhc3M9ImZvby5FY2hvUHJveHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08aHRtbD4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiL291dHB1dEZpbGVQYXRoLmpzcGYiICU+Ci08JQotICAgLy8gSFRUUC9QT1NUIHBhcmFtZXRlcjoKLSAgIC8vIHRlc3RJbnB1dCAtIHRoZSBTdHJpbmcgYXJndW1lbnQgdG8gY2FsbCB0aGUgcHJveHkgd2l0aC4KLSAgIFN0cmluZyB0ZXN0SW5wdXQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGVzdElucHV0Iik7Ci0gICAKLSAgIC8vIEV4ZWN1dGUgdGhlIFdlYiBzZXJ2aWNlLgotICAgU3RyaW5nIHJlc3VsdCA9IGVjaG9Qcm94eS5lY2hvU3RyaW5nKHRlc3RJbnB1dCk7Ci0gICAKLSAgIC8vIFdyaXRlIHRoZSByZXN1bHQgdG8gdGhlIG91dHB1dEZpbGVQYXRoLgotICAgUHJpbnRXcml0ZXIgcHcgPSBudWxsOwotICAgdHJ5Ci0gICB7Ci0gICAgIHB3ID0gbmV3IFByaW50V3JpdGVyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dHB1dEZpbGVQYXRoKSk7Ci0gICAgIHB3LnByaW50KHJlc3VsdCk7Ci0gICAgIHB3LmZsdXNoKCk7Ci0gICB9ICAgCi0gICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICB7Ci0gICB9Ci0gICBmaW5hbGx5Ci0gICB7Ci0gICAgIGlmIChwdyAhPSBudWxsKQotICAgICAgIHB3LmNsb3NlKCk7Ci0gICB9Ci0lPgotPC9ib2R5PgotPHA+Ci10ZXN0SW5wdXQ6IDwlPXRlc3RJbnB1dCU+Ci08cD4KLW91dHB1dEZpbGVQYXRoOiA8JT1vdXRwdXRGaWxlUGF0aCU+Ci08cD4KLVRoZSByZXN1bHQgaXMgPCU9cmVzdWx0JT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9CVUphdmEvc3JjL2Zvby9FY2hvLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9CVUphdmEvc3JjL2Zvby9FY2hvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlODkzZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL3NyYy9mb28vRWNoby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1wYWNrYWdlIGZvbzsKLQotcHVibGljIGNsYXNzIEVjaG8KLXsKLQlwdWJsaWMgU3RyaW5nIGVjaG9TdHJpbmcoU3RyaW5nIGlucHV0KQotCXsKLQkJcmV0dXJuIGlucHV0OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9UREphdmEvRWNoby53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvVERKYXZhL0VjaG8ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZkZjMyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9UREphdmEvRWNoby53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2ZvbyIgeG1sbnM6aW1wbD0iaHR0cDovL2ZvbyIgeG1sbnM6aW50Zj0iaHR0cDovL2ZvbyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp3c2k9Imh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9iYXNpYy8xLjEveHNkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSA8d3NkbDp0eXBlcz4KLSAgPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9mb28iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6aW1wbD0iaHR0cDovL2ZvbyIgeG1sbnM6aW50Zj0iaHR0cDovL2ZvbyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iZWNob1N0cmluZ1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImVjaG9TdHJpbmdSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImVjaG9TdHJpbmciPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5wdXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgPC9zY2hlbWE+Ci0gPC93c2RsOnR5cGVzPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdSZXNwb25zZSI+Ci0KLSAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW1wbDplY2hvU3RyaW5nUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ1JlcXVlc3QiPgotCi0gICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImltcGw6ZWNob1N0cmluZyIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iRWNobyI+Ci0KLSAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLQotICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0iaW1wbDplY2hvU3RyaW5nUmVxdWVzdCIgbmFtZT0iZWNob1N0cmluZ1JlcXVlc3QiLz4KLQotICAgICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImltcGw6ZWNob1N0cmluZ1Jlc3BvbnNlIiBuYW1lPSJlY2hvU3RyaW5nUmVzcG9uc2UiLz4KLQotICAgICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICAgPC93c2RsOnBvcnRUeXBlPgotCi0gICA8d3NkbDpiaW5kaW5nIG5hbWU9IkVjaG9Tb2FwQmluZGluZyIgdHlwZT0iaW1wbDpFY2hvIj4KLQotICAgICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotCi0gICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0KLSAgICAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0KLSAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImVjaG9TdHJpbmdSZXF1ZXN0Ij4KLQotICAgICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImVjaG9TdHJpbmdSZXNwb25zZSI+Ci0KLSAgICAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICAgICA8L3dzZGw6b3V0cHV0PgotCi0gICAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gICA8L3dzZGw6YmluZGluZz4KLQotICAgPHdzZGw6c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0KLSAgICAgIDx3c2RsOnBvcnQgYmluZGluZz0iaW1wbDpFY2hvU29hcEJpbmRpbmciIG5hbWU9IkVjaG8iPgotCi0gICAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1Rlc3RXZWIvc2VydmljZXMvRWNobyIvPgotCi0gICAgICA8L3dzZGw6cG9ydD4KLQotICAgPC93c2RsOnNlcnZpY2U+Ci0KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTUGVyZlByb2plY3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTUGVyZlByb2plY3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkODFmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1BlcmZQcm9qZWN0cy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1Rlc3RQcm9qZWN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1Rlc3RQcm9qZWN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMmU5ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NUZXN0UHJvamVjdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvd2ViY2xpZW50L291dHB1dEZpbGVQYXRoLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS93ZWJjbGllbnQvb3V0cHV0RmlsZVBhdGguanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhhN2FlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS93ZWJjbGllbnQvb3V0cHV0RmlsZVBhdGguanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4gIAotPCUKLSAgIFN0cmluZyBvdXRwdXRGaWxlUGF0aCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJvdXRwdXRGaWxlUGF0aCIpOwotJT4gICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMzk0NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNDI0ICAgMTM4MDYwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPUphdmEgV2ViIFNlcnZpY2VzIFRvb2xzIFRlc3RzCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotUE9QVVBfVEVTVF9XU0RMPVRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXIKLUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OPUdlbmVyYXRlIEphdmEgYmVhbiBza2VsZXRvbgotQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFk9R2VuZXJhdGUgQ2xpZW50Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNDU1OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCSAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotICAgICAgICAKLSAgICAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICAgICAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hY3Rpb24uV1NETEZpbGVNZW51Ij4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfVEVTVF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgIAotICAgICAgPC9leHRlbnNpb24+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdGVycyI+Ci0gICAgICAgICA8ZmFjdG9yeSAKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5IiAKLSAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayI+Ci0gICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIvPgotICAgICAgICAgPC9mYWN0b3J5PgotICAgICAgPC9leHRlbnNpb24+Ci0KLSAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdGVycyI+Ci0gICAgICAgICA8ZmFjdG9yeSAKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5IiAKLSAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayI+Ci0gICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIi8+Ci0gICAgICAgICA8L2ZhY3Rvcnk+Ci0gICAgICA8L2V4dGVuc2lvbj4gIAotICAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcmVhZG1lLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzI5NTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1UaGUgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCBpbiBhcmU6IAotCi0tRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwPUU6XFxUb21jYXRcXFRvbWNhdDUuMAotCi0sIHdoZXJlICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIgaXMgdGhlIGluc3RhbGwgZGlyZWN0b3J5IG9mIHlvdXIgVG9tY2F0IHY1LjAgc2VydmVyLgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2U0YzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9Ii1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9JHt0ZXN0RGlyfS8ke3RvbWNhdDUwRGlyfSIvPgotCQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJqc3Qtd3MtZm9sZGVyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2pzdF93c19mb2xkZXIiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHtqc3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2pzdC13cy1mb2xkZXJ9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5BbGxXU0pVbml0VGVzdHMiIC8+Ci0gICAJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgCQotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9XU1dpemFyZFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvV1NXaXphcmRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YjhlMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9XU1dpemFyZFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMjE3ICAxODcyODAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDIwNyAgMjE3MzQ2IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU1dpemFyZFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHMKLXsKLQlwcm90ZWN0ZWQgSUVudmlyb25tZW50IGVudl87Ci0JcHJvdGVjdGVkIElSdW50aW1lIHNlcnZlclJ1bnRpbWVfOwotCXByb3RlY3RlZCBJU2VydmVyIHNlcnZlcl87Ci0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb25fOwotICAKLSAgcHVibGljIFN0cmluZyBkZWZhdWx0VVJMXyA9ICJodHRwOi8vbG9jYWxob3N0OjgwODAvIjsKLQkKLQkvKioKLQkgKiBTZXQgdXAgdGhlIHdvcmtzcGFjZSBmb3IgdGhlIFdlYiBTZXJ2aWNlIFdpemFyZCBKVW5pdCB0ZXN0LiBTZXR1cCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOgotCSAqIDEpIE9idGFpbiBhbiBpbnN0YW5jZSBvZiB0aGUgZW52aXJvbm1lbnQuCi0JICogMikgSW5zdGFsbCB0aGUgc2VydmVyIHJ1bnRpbWUuCi0JICogMykgSW5zdGFsbCB0aGUgaW5wdXQgZGF0YS4gVGhpcyBtYXkgaW5jbHVkZSBwcm9qZWN0cywgc291cmNlIGZpbGVzIGV0Yy4KLQkgKiA0KSBJbnN0YWxsIGFuIGluc3RhbmNlIG9mIHRoZSBzZXJ2ZXIgaWYgcmVxdWlyZWQuIFRoaXMgbWF5IGFsc28gaW5jbHVkZSBjb25maWd1cmF0aW9uIG9mIHRoZSBpbnB1dCBkYXRhIG9uIHRoZSBzZXJ2ZXIuCi0JICogNSkgSW5pdGlhbGl6ZSB0aGUgSjJFRSwgV2ViIFNlcnZpY2UgUnVudGltZSBhbmQgU2VydmVyIHR5cGUgZGVmYXVsdHMgZm9yIHRoZSBXZWIgU2VydmljZSB3aXphcmQgdG8gdXNlLgotCSAqIDYpIEluaXRpYWxpemUgdGhlIGluaXRpYWwgc2VsZWN0aW9uIG9iamVjdCB0byBzZXQgdGhlIGNvbnRleHQgZm9yIHRoZSBXZWIgU2VydmljZSB3aXphcmQuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIEdldCBhbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCB3aXRoIHRoZSBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciB0byBtaW5pbWl6ZSBVSSBkaWFsb2cgYmxvY2tzLgotCSAgCVBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJRWNsaXBzZVN0YXR1c0hhbmRsZXIgICAgICAgaGFuZGxlciAgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0JCUVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgIGVudmlyb25tZW50ICAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIHJlc291cmNlQ29udGV4dCwgaGFuZGxlciApOwotCSAgCi0JCWVudl8gPSBlbnZpcm9ubWVudDsgCi0JCWFzc2VydFRydWUoZW52XyAhPSBudWxsKTsKLQkJCi0JCXNlcnZlcl8gPSBudWxsOwotCQlKVW5pdFV0aWxzLmhpZGVBY3Rpb25EaWFsb2dzKCk7Ci0JCWluc3RhbGxTZXJ2ZXJSdW50aW1lKCk7Ci0JCWluc3RhbGxTZXJ2ZXIoKTsKLQkJCi0JCS8vIHVuemlwIHByZS1jb25maWd1cmVkIHdvcmtzcGFjZSBwcm9qZWN0cwotCQkvL2lmICghUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFdTSlVuaXRDb25zdGFudHMuQlVfUFJPSkVDVF9OQU1FKS5leGlzdHMoKSkKLQkJCWNyZWF0ZVByb2plY3RzKCk7CQkKLQkJCi0JCWluc3RhbGxJbnB1dERhdGEoKTsKLQkJaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpOwotCQlpbml0SW5pdGlhbFNlbGVjdGlvbigpOwotCX0KLQkKLQkvKioKLQkgKiBJbnN0YWxsIHRoZSBzZXJ2ZXIgcnVudGltZS4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluc3RhbGxTZXJ2ZXJSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBJbnN0YWxscyB0aGUgaW5wdXQgZGF0YSBmcm9tIGFuIGFnZ3JlZ2F0b3IuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlbnZpcm9ubWVudCwgcnVudGltZQotCSAqIGFuZCBzZXJ2ZXIgYXJlIGNvcnJlY3RseSBzZXQgb24gdGhlIGFnZ3JlZ2F0ZSBzaW5jZSBpdHMgbGlmZWN5Y2xlIG1ldGhvZHMgYXJlIG5vdCBuZWNlc3NhcmlseQotCSAqIGNhbGxlZC4KLQkgKiBAcGFyYW0gZW52Ci0JICogQHBhcmFtIHNlcnZlclJ1bnRpbWUKLQkgKiBAcGFyYW0gc2VydmVyCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBpbnN0YWxsSW5wdXREYXRhKElFbnZpcm9ubWVudCBlbnYsSVJ1bnRpbWUgc2VydmVyUnVudGltZSxJU2VydmVyIHNlcnZlcikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJZW52XyA9IGVudjsKLQkJc2VydmVyUnVudGltZV8gPSBzZXJ2ZXJSdW50aW1lOwotCQlzZXJ2ZXJfID0gc2VydmVyOwotCQkvL2luc3RhbGxJbnB1dERhdGEoKTsKLQl9Ci0JCi0JLy8gQ3JlYXRlcyBwcm9qZWN0cyBmcm9tIHRoZSBwcm92aWRlZCBaSVAgZmlsZS4KLS8vCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjcmVhdGVQcm9qZWN0cygpIHsKLS8vCQlJUGF0aCBsb2NhbFppcFBhdGggPSBnZXRMb2NhbFBhdGgoKTsKLS8vCQlQcm9qZWN0VW56aXBVdGlsIHV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbChsb2NhbFppcFBhdGgsIHBlcmZfcHJvamVjdE5hbWVzKTsKLS8vCQlyZXR1cm4gdXRpbC5jcmVhdGVQcm9qZWN0cygpOwotLy8JfQotCQotLy8JcHJpdmF0ZSBzdGF0aWMgSVBhdGggZ2V0TG9jYWxQYXRoKCkgewotLy8JCVVSTCB1cmwgPSBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZmluZChwZXJmX3ppcEZpbGVQYXRoKTsKLS8vCQl0cnkgewotLy8JCQl1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHVybCk7Ci0vLwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQlyZXR1cm4gbmV3IFBhdGgodXJsLmdldFBhdGgoKSk7Ci0vLwl9CQotCQotICAgIC8qKgotICAgICAqIENyZWF0ZSB0aGUgbmVjZXNzYXJ5IHByb2plY3RzIGZvciB0aGUgdGVzdHMuICBUaGlzIGNvdWxkIGJlIFdlYiwgSmF2YSwgb3Igb3RoZXIgSjJFRSBwcm9qZWN0cy4KLSAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgICAqLwotICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBJbnN0YWxsIHRoZSBpbnB1dCBkYXRhIGZvciB0aGUgdGVzdC4gVGhpcyBtYXkgaW5jbHVkZSBwcm9qZWN0cywgc291cmNlIGZpbGVzIGV0Yy4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluc3RhbGwgYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZlci4gVGhpcyBtYXkgYWxzbyBjb25maWd1cmUgaW5wdXQgZGF0YSBvbiB0aGUgc2VydmVyLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5zdGFsbFNlcnZlcigpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZSB0aGUgSjJFRSBsZXZlbCwgV2ViIFNlcnZpY2UgcnVudGltZSB0eXBlIGFuZCBTZXJ2ZXIgZGVmYXVsdHMgZm9yIHRoZSB0ZXN0IGNhc2UuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBJbml0aWFsaXplIHRoZSBpbml0aWFsIHNlbGVjdGlvbiB3aGljaCBkcml2ZXMgdGhlIFdlYiBTZXJ2aWNlIHdpemFyZC4gVGhpcyBjb3VsZCBpbmNsdWRlIHNvdXJjZSBKYXZhIGZpbGVzLAotCSAqIFdTREwgVVJMcyBhbmQgZXZlbiBFSkJzLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIENsZWFuIHVwIHRoZSB3b3Jrc3BhY2UuIENsZWFudXAgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczoKLQkgKiAxKSBEZWxldGUgdGhlIGlucHV0IGRhdGEuIFRoaXMgc2hvdWxkIGluY2x1ZGUgcmVtb3ZhbCBvZiBjb25maWd1cmF0aW9uIGRhdGEgb24gdGhlIHNlcnZlciBpZiBuZWNlc3NhcnkuCi0JICogMikgU3RvcCB0aGUgc2VydmVyLgotCSAqIDMpIERlbGV0ZSB0aGUgc2VydmVyLgotCSAqIDQpIERlbGV0ZSB0aGUgc2VydmVyIHJ1bnRpbWUuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlzdG9wU2VydmVyKCk7Ci0vLwkJZGVsZXRlU2VydmVyKCk7Ci0vLyAgICAgIGRlbGV0ZUlucHV0RGF0YSgpOwotLy8JCWRlbGV0ZVNlcnZlclJ1bnRpbWUoKTsKLQl9Ci0JCi0JLyoqCi0JICogRGVsZXRlIHRoZSBpbnB1dCBkYXRhLiBUaGlzIHNob3VsZCBpbmNsdWRlIHJlbW92YWwgb2YgcHJvamVjdHMsIHNyYyBmaWxlcyBldGMuIGFzIHdlbGwgYXMgcmVtb3ZhbCBvZiBhbnkgc2VydmVyIGNvbmZpZ3VyZWQgZGF0YS4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogU3RvcCB0aGUgc2VydmVyIGlmIGl0IGlzIHJ1bm5pbmcuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzdG9wU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaWYgKHNlcnZlcl8gIT0gbnVsbCAmJiBzZXJ2ZXJfLmdldFNlcnZlclN0YXRlKCkgPT0gSVNlcnZlci5TVEFURV9TVEFSVEVEKQotCQkJc2VydmVyXy5zdG9wKHRydWUpOwotCQlhc3NlcnRUcnVlKHNlcnZlcl8uZ2V0U2VydmVyU3RhdGUoKSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQRUQpOwotCX0KLQkKLQkvKioKLQkgKiBEZWxldGUgdGhlIHNlcnZlci4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZVNlcnZlcigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWlmIChzZXJ2ZXJfICE9IG51bGwpCi0JCQlzZXJ2ZXJfLmRlbGV0ZSgpOwotCX0KLQkKLQkvKioKLQkgKiBEZWxldGUgdGhlIHNlcnZlciBydW50aW1lLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlU2VydmVyUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWlmIChzZXJ2ZXJSdW50aW1lXyAhPSBudWxsKQotCQkJc2VydmVyUnVudGltZV8uZGVsZXRlKCk7Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgZGVmYXVsdCBVUkwgaW4gdGhlIGZvcm0gb2Y6IGh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC88Y29udGV4dFJvb3Q+LzxwYXRoPgotCSAqIEBwYXJhbSBwYXRoIC0gYSBmaWxlIG9yIFVSTCByZWxhdGl2ZSBwYXRoLgotCSAqIEBwYXJhbSBjb250ZXh0Um9vdCAtIHRoZSBjb250ZXh0IHJvb3Qgb2YgdGhlIFdlYiBtb2R1bGUgZm9yIHRoaXMgVVJMLgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERlZmF1bHRVUkwoU3RyaW5nIHBhdGgsU3RyaW5nIGNvbnRleHRSb290KQotCXsKLQkJU3RyaW5nQnVmZmVyIHVybCA9IG5ldyBTdHJpbmdCdWZmZXIoZGVmYXVsdFVSTF8pOwotCQl1cmwuYXBwZW5kKGNvbnRleHRSb290KTsKLQkJdXJsLmFwcGVuZCgnLycpOwotCQl1cmwuYXBwZW5kKHBhdGgpOwotCQlyZXR1cm4gdXJsLnRvU3RyaW5nKCk7Ci0JfQkKLQkKLQlwcm90ZWN0ZWQgdm9pZCBsb2dCYWRTdGF0dXMoSVN0YXR1cyBzdGF0dXMpCi0JewotCQlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKFN0YXR1c1V0aWxzLmluZm9TdGF0dXMoIioqKiBKU1QuV1MgSlVOSVQgRVJST1IgKFNUQVJUKSAqKioiKSk7Ci0JCVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coc3RhdHVzKTsKLQkJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhTdGF0dXNVdGlscy5pbmZvU3RhdHVzKCIqKiogSlNULldTIEpVTklUIEVSUk9SIChFTkQpICoqKiIpKTsKLQl9Ci0JCi0JLyoqCi0JICogU3BpbiB0aGUgZXZlbnQgbG9vcCBmb3IgYXdoaWxlIHRvIGdpdmUgYmFja2dyb3VuZCBhY3Rpdml0eSBhIGNoYW5jZSB0bwotCSAqIGRpZSBkb3duLiBUaGlzIGRlY3JlYXNlcyB0aGUgY2hhbmNlIHRoYXQgdW5yZWxhdGVkIGJhY2tncm91bmQgd29yayB3aWxsCi0JICogYWZmZWN0IHJlc3VsdHMgZm9yIHRoZSBzY2VuYXJpbyBiZWluZyB0ZXN0ZWQuCi0JICogCi0JICogQHBhcmFtIGR1cmF0aW9uCi0JICogICAgICAgICAgICBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BpbiB0aGUgZXZlbnQgbG9vcC4KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBydW5FdmVudExvb3AoZmluYWwgaW50IGR1cmF0aW9uKSB7Ci0JCWZpbmFsIERpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotCQlSdW5uYWJsZSB1cGRhdGUgPSBuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJCXdoaWxlIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0IDwgZHVyYXRpb24pIHsKLQkJCQkJaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKQotCQkJCQkJZGlzcGxheS5zbGVlcCgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpID09IG51bGwpCi0JCQlkaXNwbGF5LnN5bmNFeGVjKHVwZGF0ZSk7Ci0JCWVsc2UKLQkJCXVwZGF0ZS5ydW4oKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9XU1dpemFyZFRvbWNhdDUwVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvV1NXaXphcmRUb21jYXQ1MFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2MjZiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9XU1dpemFyZFRvbWNhdDUwVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuV1NXaXphcmRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IGV4dGVuZHMgV1NXaXphcmRUZXN0IHsKLSAgCi0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOwotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTAiOwotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwotCSAgCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2Uud2FzLnRlc3RzLldTV2l6YXJkVGVzdCNpbnN0YWxsU2VydmVyUnVudGltZSgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsU2VydmVyUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgc2VydmVyUnVudGltZV8gPSBKVW5pdFV0aWxzLmNyZWF0ZVNlcnZlclJ1bnRpbWUoUlVOVElNRVRZUEVJRF9UQzUwLCBTRVJWRVJfSU5TVEFMTF9QQVRIKTsKLSAgfQotCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2Uud2FzLnRlc3RzLldTV2l6YXJkVGVzdCNpbnN0YWxsU2VydmVyKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluc3RhbGxTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgIHNlcnZlcl8gPSBKVW5pdFV0aWxzLmNyZWF0ZVNlcnZlcigiQXBhY2hlIFRvbWNhdCB2NTAiLCBTRVJWRVJUWVBFSURfVEM1MCwgc2VydmVyUnVudGltZV8sIGVudl8sIG51bGwgKTsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BsdWdpbi9UZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzJjN2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbjsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luIik7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFmNTJkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzAzMTQgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTAzMCAgMjA4MTI0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTAzMSAgMjA4MTI0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTExNiAgMjA4MTI0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFJlc3VsdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRvIHJ1biBhbGwgdGhlIHVuaXR0ZXN0IHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsV1NKVW5pdFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzCi17Ci0gIC8qKgotICAgKiBNZXRob2QgcGFyc2VBcmdzLgotICAgKiAKLSAgICogQHBhcmFtIGFyZ3MKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZUFyZ3MoT2JqZWN0IGFyZ3MpCi0gIHsKLSAgICAvLyB0eXBpY2lhbGx5IGFyZ3MgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywKLSAgICAvLyBub3Qgc3VyZSB3aGVuIGl0IHdvdWxkbid0IGJlLgotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIG5ldyBBbGxXU0pVbml0VGVzdHMoKS5ydW5NYWluKGFyZ3MpOwotICB9Ci0KLSAgCi0gIHB1YmxpYyBPYmplY3QgcnVuTWFpbihPYmplY3QgYXJncykKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIFRlc3RSdW5uZXIgdGVzdFJ1bm5lciA9IG51bGw7Ci0KLSAgICAgIHBhcnNlQXJncyhhcmdzKTsKLQotICAgICAgdGVzdFJ1bm5lciA9IG5ldyBUZXN0UnVubmVyKFN5c3RlbS5vdXQpOwotCi0gICAgICBUZXN0IHN1aXRlID0gc3VpdGUoKTsKLSAgICAgIFRlc3RSZXN1bHQgdGVzdFJlc3VsdCA9IHRlc3RSdW5uZXIuZG9SdW4oc3VpdGUsIGZhbHNlKTsKLSAgICAgIHByaW50SGVhZGVyKHRlc3RSZXN1bHQpOyAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIEpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotICAgIAotICAgIFRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIENvbXBvbmVudENyZWF0aW9uVGVzdHMuc3VpdGUoKSApOwotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBKMkVFVXRpbHNUZXN0cy5zdWl0ZSgpICk7Ci0gICAKLSAgICAvLyBUZXN0cyB3aGljaCByZXF1aXJlIGEgVG9tY2F0IHNlcnZlcgotICAgIFN0cmluZyBzID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOwotICAgIGlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLSAgICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBCVUphdmFBeGlzVEM1MC5zdWl0ZSgpICk7Ci0gICAgICB0ZXN0U3VpdGUuYWRkVGVzdCggVERKYXZhQXhpc1RDNTAuc3VpdGUoKSApOwotICAgICAgdGVzdFN1aXRlLmFkZFRlc3QoIENsaWVudEF4aXNUQzUwLnN1aXRlKCkgKTsKLSAgICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBTZXJ2ZXJDcmVhdGlvblRlc3RzLnN1aXRlKCkpOwotCi0gICAgfQotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBSZXNvdXJjZVV0aWxzVGVzdHMuc3VpdGUoKSApOwotCi0gICAgcmV0dXJuIHRlc3RTdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludHMgdGhlIGhlYWRlciBvZiB0aGUgcmVwb3J0Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcmludEhlYWRlcihUZXN0UmVzdWx0IHJlc3VsdCkKLSAgewotICAgIGlmIChyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgU3lzdGVtLm91dC5wcmludCgiT0siKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICgiICsgcmVzdWx0LnJ1bkNvdW50KCkgKyAiIHRlc3RzKSIpOwotCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTFVSRVMhISEiKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgIlRlc3RzIHJ1bjogIgotICAgICAgICAgICsgcmVzdWx0LnJ1bkNvdW50KCkKLSAgICAgICAgICArICIsICBGYWlsdXJlczogIgotICAgICAgICAgICsgcmVzdWx0LmZhaWx1cmVDb3VudCgpCi0gICAgICAgICAgKyAiLCAgRXJyb3JzOiAiCi0gICAgICAgICAgKyByZXN1bHQuZXJyb3JDb3VudCgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQlVKYXZhQXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQlVKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1NTZlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0JVSmF2YUF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA1MDkgICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTExNiAgIDIwODEyNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMjE3ICAgMTg3MjgwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAyMDcgICAyMTczNDYgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIEJvdHRvbSB1cCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBCVUphdmFBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQkvLyBDb25zdGFudHMKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTOyAKLQlwcml2YXRlIFN0cmluZyBQUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLkJVX1BST0pFQ1RfTkFNRTsKLSAgICAKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCQotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShCVUphdmFBeGlzVEM1MC5jbGFzcyk7Ci0JfQotCQotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsJCQotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsZm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotCQkvLyBFbnN1cmUgdGhhdCBFY2hvLmNsYXNzIGlzIGJ1aWx0IGluOgotCQkvLyA8V2ViIFByb2plY3Q+L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzL2Zvby9FY2hvLmNsYXNzCi0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkvL2Fzc2VydFRydWUoSlVuaXRVdGlscy5nZXRDbGFzc2VzRm9sZGVyRm9yV2ViUHJvamVjdChXRUJfUFJPSkVDVF9OQU1FKS5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5jbGFzcyIpKS5leGlzdHMoKSk7Ci0JCQotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksIFNFUlZFUlRZUEVJRF9UQzUwLCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgICAgfQotICAgICAgfQotCQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsKLQkJSlVuaXRVdGlscy5zZXRTZXJ2aWNlU2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCX0KLQkKLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0QlVKYXZhQXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIEpVbml0VXRpbHMuZGlzYWJsZVdTSURpYWxvZyh3ZWJQcm9qZWN0KTsKLQotCSAgICBJU3RhdHVzW10gc3RhdHVzID0gSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9CT1RUT01fVVAsU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQotICAgICAgICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQotCQkKLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotCQlJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAKLSAgICAgICAgSUZvbGRlciB3c2RsRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKTsKLSAgICAgICAgaWYgKCF3c2RsRm9sZGVyLmV4aXN0cygpKXsKLSAgICAgICAgCXJ1bkV2ZW50TG9vcCgzMDAwKTsKLSAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBldmVudCBsb29wLi4iKTsKLSAgICAgICAgfQotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJVIHdzZGwgZm9sZGVyIGV4aXN0cz8gPSAiK3dzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQkKLQkJaWYgKCEod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCkpewotCQkJcnVuRXZlbnRMb29wKDMwMDApOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3AuLiIpOwotCQl9Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQlUgd3NkbCBmaWxlIGV4aXN0cz8gPSAiICsgKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKTsKLSAgICAKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlsb2dCYWRTdGF0dXMoc1tpXSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRFcXVhbHMoIkJVIFVuZXhwZWN0ZWQgbnVtYmVyIG9mIGNsaWVudCBlcnJvciByZXBvcnRzIiwgMCwgcy5sZW5ndGgpOwotCi0JfQotCQotICAvKioKLSAgICogQ2xlYXIgd29ya3NwYWNlIGlmIG5lY2Vzc2FyeQotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkvLyBSZW1vdmUgdGhlIEVBUiBmcm9tIHRoZSBzZXJ2ZXIuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJLy9KVW5pdFV0aWxzLnJlbW92ZU1vZHVsZUZyb21TZXJ2ZXIoc2VydmVyXyx3ZWJQcm9qZWN0LGVudl8pOwotCQkKLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLCBudWxsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2Uod2ViUHJvamVjdC5leGlzdHMoKSk7Ci0JCQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ2xpZW50QXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ2xpZW50QXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFlNDExOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NsaWVudEF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA1MDkgICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTExNiAgIDIwODEyNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMjE3ICAgMTg3MjgwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAyMDcgICAyMTczNDYgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIENsaWVudCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBDbGllbnRBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsKLSAgCi0JcHJpdmF0ZSBTdHJpbmcgQ0xJRU5UX1BST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuQ0xJRU5UX1BST0pFQ1RfTkFNRTsKLQkKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCi0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKENsaWVudEF4aXNUQzUwLmNsYXNzKTsKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKENMSUVOVF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSxTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotCS8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsJCQotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQkJCi0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS4wICAgIAotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwotCQlKVW5pdFV0aWxzLnNldENsaWVudFNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHVibGljIHZvaWQgdGVzdENsaWVudEF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsJCi0JICAJCi0JCUpVbml0VXRpbHMuZW5hYmxlUHJveHlHZW5lcmF0aW9uKHRydWUpOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLSAgICAgICAgCi0JCUlTdGF0dXNbXSBzdGF0dXMgPSBKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0NMSUVOVCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0KLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAKLSAgICAgICAgSVBhdGggZGVzdFBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSUZvbGRlciBzcmNGb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShkZXN0UGF0aCk7Ci0gICAgCi0JCS8vSUZvbGRlciBzcmNGb2xkZXIgPSBKVW5pdFV0aWxzLmdldFNvdXJjZUZvbGRlckZvcldlYlByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCUlGb2xkZXIgZm9sZGVyID0gc3JjRm9sZGVyLmdldEZvbGRlcigiZm9vIik7Ci0JCWlmICghZm9sZGVyLmV4aXN0cygpKXsKLQkJCXJ1bkV2ZW50TG9vcCgzMDAwKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBldmVudCBsb29wLi4iKTsKLQkJfQotCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50IGphdmEgcGFja2FnZSBleGlzdHM/ID0gIitmb2xkZXIuZXhpc3RzKCkpOwotCQkKLQkJaWYgKCEoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKSl7Ci0JCQlydW5FdmVudExvb3AoMzAwMCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgZXZlbnQgbG9vcC4uIik7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQgSmF2YSBmaWxlcyBleGlzdHM/ID0gIisoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKSk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCi0JCS8vIENoZWNrIHN0YXR1cyBoYW5kbGVyIGZvciBlcnJvcnMKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlsb2dCYWRTdGF0dXMoc1tpXSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfSAgICAKLQkJYXNzZXJ0RXF1YWxzKCJDbGllbnQgVW5leHBlY3RlZCBudW1iZXIgb2YgY2xpZW50IGVycm9yIHJlcG9ydHMiLCAwLCBzLmxlbmd0aCk7Ci0KLQl9Ci0JCi0gIC8qKgotICAgKiBSZW1vdmUgd29ya3NwYWNlIGlmIG5lY2Vzc2FyeQotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9Db21wb25lbnRDcmVhdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMmI3NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9Db21wb25lbnRDcmVhdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZXRvb2xzLmNvbW1vbi50ZXN0LmFwaXRvb2xzLlByb2plY3RVbnppcFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLQotLyoqCi0gKiBUZXN0cyB0aGUgdmFyaW91cyBDb21wb25lbnQgY3JlYXRpb24gY29tbWFuZHMKLSAqLwotcHVibGljIGNsYXNzIENvbXBvbmVudENyZWF0aW9uVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKENvbXBvbmVudENyZWF0aW9uVGVzdHMuY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0V2ViQ29tcG9uZW50Q3JlYXRpb24oKXsKLQotICAgICAgICBjcmVhdGVTZXJ2ZXJSdW50aW1lKCk7Ci0gICAgICAgIGNyZWF0ZUR5bmFtaWNXZWJNb2R1bGUocHJvamVjdE5hbWVzKTsKLSAgICAgICAgLy9jcmVhdGVQcm9qZWN0cygpOwotICAgICAgICAvL2NyZWF0ZVdlYk1vZHVsZShwcm9qZWN0TmFtZSwgcHJvamVjdE5hbWUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKTsKLSAgICAgICAgLy9jcmVhdGVXZWJNb2R1bGUocHJvamVjdDJOYW1lLCBwcm9qZWN0Mk5hbWUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKTsKLQotCX0KLSAgCi0JLy8gQ3JlYXRlcyBwcm9qZWN0cyBmcm9tIHRoZSBwcm92aWRlZCBaSVAgZmlsZS4KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY3JlYXRlUHJvamVjdHMoKSB7Ci0JCUlQYXRoIGxvY2FsWmlwUGF0aCA9IGdldExvY2FsUGF0aCgpOwotCQlQcm9qZWN0VW56aXBVdGlsIHV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbChsb2NhbFppcFBhdGgsIHByb2plY3ROYW1lcyk7Ci0JCXJldHVybiB1dGlsLmNyZWF0ZVByb2plY3RzKCk7Ci0JfQotCQotCi0JcHJpdmF0ZSBzdGF0aWMgSVBhdGggZ2V0TG9jYWxQYXRoKCkgewotCQlVUkwgdXJsID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmZpbmQoemlwRmlsZVBhdGgpOwotCQl0cnkgewotCQkJdXJsID0gUGxhdGZvcm0uYXNMb2NhbFVSTCh1cmwpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXcgUGF0aCh1cmwuZ2V0UGF0aCgpKTsKLQl9CQotICAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVTZXJ2ZXJSdW50aW1lKCl7Ci0gICAgICAKLSAgICAgIHRyeSB7Ci0gICAgICAgIEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfSAgICAgIAotICAgICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUR5bmFtaWNXZWJNb2R1bGUoU3RyaW5nW10gcHJvamVjdE5hbWVzKXsKLSAgICAJCi0gICAgICBmb3IgKGludCBpPTA7aTxwcm9qZWN0TmFtZXMubGVuZ3RoO2krKykgewotICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKHByb2plY3ROYW1lc1tpXSwgcHJvamVjdE5hbWVzW2ldLCBudWxsLCBTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgbnVsbCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkgICAgICBJUHJvamVjdCBwID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCSAgICAgIGFzc2VydFRydWUocC5leGlzdHMoKSk7Ci0gICAgICB9Ci0gICAgfQotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvSjJFRVV0aWxzVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvSjJFRVV0aWxzVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE4OTE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0oyRUVVdGlsc1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotLyoqCi0gKiBAYXV0aG9yIHNlbmdwbAotICoKLSAqLwotcHVibGljIGNsYXNzIEoyRUVVdGlsc1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzewotCi0gICAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0MSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0MiA9IG51bGw7Ci0gICAgcHJpdmF0ZSBJUHJvamVjdCBlamJQcm9qZWN0ID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIFN0cmluZyBjb21wMSA9IHdlYkNvbXBvbmVudE5hbWU7Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJCi0JCS8vIFByb2plY3QgYW5kIGNvbXBvbmVudCBuYW1lcyBpbml0aWFsaXplZCBoZXJlIQotCQlwcm9qZWN0MSA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCWFzc2VydE5vdE51bGwocHJvamVjdDEpOwotCQkKLQkJcHJvamVjdDIgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdDJOYW1lKTsKLQkJYXNzZXJ0Tm90TnVsbChwcm9qZWN0Mik7Ci0gICAgCi0gICAgICAgIGVqYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWpiUHJvamVjdE5hbWUpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGVqYlByb2plY3QpOwotCQkKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQkvLyBUT0RPIENsZWFyIHRoZSB3b3Jrc3BhY2UKLQkJCi0JfQotCi0JIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0JICB7Ci0JICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKEoyRUVVdGlsc1Rlc3RzLmNsYXNzKTsKLQkgIH0KLQkgCi0JICBwdWJsaWMgdm9pZCB0ZXN0Q29tcG9uZW50c0V4aXN0KCl7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0Q29tcG9uZW50RXhpc3RzIC4uLiIpOwotCQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjMSA9IEoyRUVVdGlscy5nZXRWaXJ0dWFsQ29tcG9uZW50KHByb2plY3QxKTsKLQkJICBJVmlydHVhbENvbXBvbmVudCB2YzIgPSBKMkVFVXRpbHMuZ2V0VmlydHVhbENvbXBvbmVudChwcm9qZWN0Mi5nZXROYW1lKCkpOwotCQkgIAotCQkgIGFzc2VydFRydWUodmMxLmV4aXN0cygpKTsKLQkJICBhc3NlcnRUcnVlKEoyRUVVdGlscy5leGlzdHMocHJvamVjdDEpKTsKLQkJICBhc3NlcnRUcnVlKHZjMi5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShKMkVFVXRpbHMuZXhpc3RzKHByb2plY3QyLmdldE5hbWUoKSwgcHJvamVjdDJOYW1lKSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdENvbXBvbmVudEV4aXN0cyAuLi4iKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdGVzdExvY2F0aW9uR2V0dGVyTWV0aG9kcygpewotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdExvY2F0aW9uR2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkJICBJUGF0aCBsb2MxID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QxKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYkNvbnRlbnRQYXRoIG9mIHByb2plY3QxID0gIitsb2MxKTsKLQkJICBJUmVzb3VyY2UgcmVzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihsb2MxKTsKLQkJICBhc3NlcnRUcnVlKHJlcy5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMudG9TdHJpbmcoKS5lbmRzV2l0aCgiV2ViQ29udGVudCIpKTsKLQkJICAKLQkJICBJUGF0aCBsb2MyID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QyKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYkNvbnRlbnRQYXRoIG9mIHByb2plY3QyID0gIitsb2MyKTsKLQkJICBJUmVzb3VyY2UgcmVzMiA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIobG9jMik7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMyLmV4aXN0cygpKTsKLQkJICBhc3NlcnRUcnVlKHJlczIudG9TdHJpbmcoKS5lbmRzV2l0aCgiV2ViQ29udGVudCIpKTsJCSAgCi0JCSAgCi0JCSAgSVBhdGggbG9jMyA9IEoyRUVVdGlscy5nZXRXZWJJbmZQYXRoKHByb2plY3QxKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYi1JTkYgcGF0aCA9ICIrbG9jMyk7Ci0JCSAgSVJlc291cmNlIHJlczMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGxvYzMpOwotCQkgIGFzc2VydFRydWUocmVzMy5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMzLnRvU3RyaW5nKCkuZW5kc1dpdGgoIldFQi1JTkYiKSk7Ci0JCSAgCi0JCSAgSUNvbnRhaW5lciBjb250YWluZXIgPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcihwcm9qZWN0Mik7Ci0JCSAgSVJlc291cmNlIHJlczQgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGNvbnRhaW5lci5nZXRGdWxsUGF0aCgpKTsKLQkJICBhc3NlcnRFcXVhbHMocmVzMiwgcmVzNCk7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdExvY2F0aW9uR2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkJICAKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdGVzdEoyRUVWZXJzaW9uTWV0aG9kcygpewotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdEoyRUVWZXJzaW9uTWV0aG9kcyAuLi4iKTsKLQkgIAkJICAKLQkJICBTdHJpbmcgajMgPSBKMkVFVXRpbHMuZ2V0SjJFRVZlcnNpb25Bc1N0cmluZyhwcm9qZWN0MSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJKMkVFVmVyc2lvbiBwMSBhcyBTdHJpbmc6ICIrajMpOwotCQkgIGFzc2VydEVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfNF9URVhULCBqMyk7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnQgdmMyID0gSjJFRVV0aWxzLmdldFZpcnR1YWxDb21wb25lbnQocHJvamVjdDIpOwotCQkgIGludCBqMiA9IEoyRUVVdGlscy5nZXRKMkVFVmVyc2lvbih2YzIpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiSjJFRVZlcnNpb25zIHAxOiAiK2oyKTsJCSAgCi0JCSAgYXNzZXJ0RXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlNFUlZMRVRfMl80LCBqMik7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdEoyRUVWZXJzaW9uTWV0aG9kcyAuLi4iKTsKLQkgIH0KLQotCSAgcHVibGljIHZvaWQgdGVzdENvbXBvbmVudEdldHRlck1ldGhvZHMoKXsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RDb21wb25lbnRHZXR0ZXJNZXRob2RzIC4uLiIpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50W10gdmNzID0gSjJFRVV0aWxzLmdldEFsbENvbXBvbmVudHMoKTsKLQkJICBjaGVja1ZpcnR1YWxDb21wb25lbnRzRXhpc3RzKHZjcyk7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MyID0gSjJFRVV0aWxzLmdldEFsbEVBUkNvbXBvbmVudHMoKTsKLQkJICBjaGVja1ZpcnR1YWxDb21wb25lbnRzRXhpc3RzKHZjczIpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50W10gdmNzMyA9IEoyRUVVdGlscy5nZXRBbGxXZWJDb21wb25lbnRzKCk7Ci0JCSAgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyh2Y3MzKTsKLQkJICAKLQkJICBJVmlydHVhbENvbXBvbmVudFtdIHZjczQgPSBKMkVFVXRpbHMuZ2V0V2ViQ29tcG9uZW50cyhwcm9qZWN0MSk7Ci0JCSAgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyh2Y3M0KTsKLQkJICAKLQkJICBTdHJpbmdbXSBuYW1lcyA9IEoyRUVVdGlscy5nZXRXZWJDb21wb25lbnROYW1lcyhwcm9qZWN0Mik7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lcyk7Ci0JCSAgCi0JCSAgU3RyaW5nW10gbmFtZXMyID0gSjJFRVV0aWxzLnRvQ29tcG9uZW50TmFtZXNBcnJheShKMkVFVXRpbHMuZ2V0Q29tcG9uZW50c0J5VHlwZShwcm9qZWN0MSwgSjJFRVV0aWxzLldFQiB8IEoyRUVVdGlscy5FSkIpKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzMik7Ci0JCSAgCi0JCSAgSVByb2plY3RbXSBwcm9qZWN0cyA9IEoyRUVVdGlscy5nZXRBbGxGbGV4aWJsZVByb2plY3RzKCk7Ci0JCSAgZm9yIChpbnQgaT0wO2k8cHJvamVjdHMubGVuZ3RoO2krKyl7Ci0JCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiRmxleCBwcm9qZWN0ICIraSsiID0gIitwcm9qZWN0c1tpXSk7Ci0JCSAgfQotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RDb21wb25lbnRHZXR0ZXJNZXRob2RzIC4uLiIpOwotCSAgfQotCSAgCi0JICBwcml2YXRlIHZvaWQgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyhJVmlydHVhbENvbXBvbmVudFtdIHZjcyl7Ci0JCSAgZm9yIChpbnQgaT0wOyBpPHZjcy5sZW5ndGg7aSsrKXsKLQkJCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSB2Y3NbaV07Ci0JCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiVkM6IFByb2plY3QgPSAiK3ZjLmdldFByb2plY3QoKSsiIE5hbWUgPSAiK3ZjLmdldE5hbWUoKSk7Ci0JCQkgIGFzc2VydFRydWUodmMuZXhpc3RzKCkpOwotCQkJICAKLQkJICB9Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgdm9pZCBwcmludE5hbWVTdHJpbmdzKFN0cmluZ1tdIG5hbWVzKXsKLQkJICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKXsKLQkJCSAgU3lzdGVtLm91dC5wcmludGxuKCJOYW1lIitpKyIgPSAiK25hbWVzW2ldKTsKLQkJICB9Ci0JICB9Ci0JICAKLSAgICAgIHB1YmxpYyB2b2lkIGR0ZXN0QXNzb2NpYXRlQ29tcG9uZW50Q29tbWFuZCgpewotICAgICAgICAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0QXNzb2NpYXRlQ29tcG9uZW50Q29tbWFuZCAuLi4iKTsKLSAgICAgICAgCi0gICAgICAgIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kIGFtd2UgPSBuZXcgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQoKTsKLSAgICAgICAgYW13ZS5zZXRFYXIoZWFyQ29tcE5hbWUpOwotICAgICAgICBhbXdlLnNldEVBUlByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBhbXdlLnNldE1vZHVsZShjb21wMSk7Ci0gICAgICAgIGFtd2Uuc2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIGFtd2UuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICAgICAgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RBc3NvY2lhdGVDb21wb25lbnRDb21tYW5kIC4uLiIpOyAgICAgCi0gICAgICB9Ci0gICAgCi0JICBwdWJsaWMgdm9pZCBkdGVzdFJlZmVyZW5jaW5nR2V0dGVyTWV0aG9kcygpewotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdFJlZmVyZW5jaW5nR2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oImlzQ29tcG9uZW50QXNzb2NpYXRlZCAuLiIpOwotCQkgIEoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQocHJvamVjdDEsIHByb2plY3QxKTsKLQkJCi0JCSAgU3RyaW5nW10gbmFtZXMgPSBKMkVFVXRpbHMudG9Db21wb25lbnROYW1lc0FycmF5KEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ0VBUkNvbXBvbmVudHMocHJvamVjdDEpKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzKTsKLQkJICBTdHJpbmdbXSBuYW1lczIgPSBKMkVFVXRpbHMudG9Db21wb25lbnROYW1lc0FycmF5KEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ0VBUkNvbXBvbmVudHMocHJvamVjdDIpKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzMik7Ci0JCSAgCi0JCSAgU3RyaW5nW10gbmFtZXMzID0gSjJFRVV0aWxzLnRvQ29tcG9uZW50TmFtZXNBcnJheShKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdXZWJDb21wb25lbnRzRnJvbUVBUihwcm9qZWN0MSkpOwotCQkgIHByaW50TmFtZVN0cmluZ3MobmFtZXMzKTsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0UmVmZXJlbmNpbmdHZXR0ZXJNZXRob2RzIC4uLiIpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBkdGVzdElzQ29tcG9uZW50TWV0aG9kcygpewotCQkKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RJc0NvbXBvbmVudE1ldGhvZHMgLi4uIik7Ci0JCSAgCi0JCSAgLy9hc3NlcnRGYWxzZShKMkVFVXRpbHMuaXNFSkIyMENvbXBvbmVudChlamJQcm9qZWN0LCBlamJDb21wb25lbnROYW1lKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShKMkVFVXRpbHMuaXNFSkIyMENvbXBvbmVudChlamJQcm9qZWN0KSk7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdElzQ29tcG9uZW50TWV0aG9kcyAuLi4iKTsKLQkgIH0KLQkgIAotCi0JICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMmY2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZTsKLQotLyoqCi0gKiBNaW5pbWFsIGFwcCB0byBydW4gYXMgRWNsaXBzZSAiYXBwbGljYXRpb24iCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hUZXN0IGltcGxlbWVudHMgSVBsYXRmb3JtUnVubmFibGUKLXsKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlI3J1bihPYmplY3QpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHJ1bihPYmplY3QgYXJncykgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0KLSAgICBPYmplY3QgcmVzdWx0ID0gbmV3IEFsbFdTSlVuaXRUZXN0cygpLnJ1bk1haW4oYXJncyk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFRocm93YWJsZSkKLSAgICAgIHsKLSAgICAgICAgKChUaHJvd2FibGUpIHJlc3VsdCkucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdHMgZGlkbid0IHJldHVybiAnb2snIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gSVBsYXRmb3JtUnVubmFibGUuRVhJVF9PSzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9SZXNvdXJjZVV0aWxzVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVzb3VyY2VVdGlsc1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjhlZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9SZXNvdXJjZVV0aWxzVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5JTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLS8qKgotICogSlVuaXQgdGVzdHMgZm9yIHNlbGVjdGl2ZSBSZXNvdXJjZVV0aWxzIG1ldGhvZHMuICBDYWxscyB3aGljaCByZXR1cm4gYSBzaW1wbGUgU3RyaW5nIG9yIHJlbHkgb24gYSBJUmVzb3VyY2UKLSAqIEFQSSBuZWVkIG5vdCBiZSB0ZXN0ZWQuICBUaGUgZm9jdXMgaXMgbWFpbmx5IHRvIGV4ZXJjaXNlIENvbXBvbmVudCBhbmQgRmxleGlibGUgcHJvamVjdCBBUElzLiAKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VVdGlsc1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzewotCi0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoUmVzb3VyY2VVdGlsc1Rlc3RzLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbXBvbmVudFR5cGUoKXsKLQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCVN0cmluZyBjb21wb25lbnRUeXBlID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRUeXBlKHByb2plY3QpOwotCQlhc3NlcnRFcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSwgY29tcG9uZW50VHlwZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRPZigpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgSVBhdGggZGVzdFBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbihwcm9qZWN0KTsKLSAgICAgICAgSUZvbGRlciBmb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShkZXN0UGF0aCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgICAgICAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLSAgICAgICAgICAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgIGVudiAgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIgKTsKLQotICAgICAgICAgICAgSUZpbGUgZmlsZSA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotICAgICAgICAgICAgaWYgKCFmaWxlLmV4aXN0cygpKSB7Ci0gICAgICAgICAgICAgIEpVbml0VXRpbHMuY29weVRlc3REYXRhKCJCVUphdmEvc3JjIiwgZm9sZGVyLCBlbnYsIG51bGwgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgCWV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgSVBhdGggamF2YUZpbGVQYXRoID0gZm9sZGVyLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmphdmEiKSkuZ2V0RnVsbFBhdGgoKTsKLSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKGphdmFGaWxlUGF0aCk7Ci0gICAgICAgIGFzc2VydFRydWUodmMuZXhpc3RzKCkpOwotICAgICAgICAKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKYXZhU291cmNlTG9jYXRpb24oKXsKLQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCVN0cmluZyBqYXZhU291cmNlTG9jID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24ocHJvamVjdCkudG9TdHJpbmcoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJKYXZhIHNvdXJjZSBsb2NhdGlvbiA9ICIramF2YVNvdXJjZUxvYyk7Ci0JCWFzc2VydFRydWUoamF2YVNvdXJjZUxvYy5lbmRzV2l0aCgic3JjIikpOwotCQkKLQkJLy8gZ2V0IGFsbCB0aGUgSmF2YVNvdXJjZUxvY2F0aW9ucyB2aWEgdGhlIFZpcnR1YWxDb21wb25lbnQKLQkJSVZpcnR1YWxDb21wb25lbnQgdmMxID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IHZjMiA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlJVmlydHVhbENvbXBvbmVudFtdIHZjcyA9IG5ldyBJVmlydHVhbENvbXBvbmVudFtde3ZjMSwgdmMyfTsKLQkJSVBhdGhbXSBwYXRocyA9IFJlc291cmNlVXRpbHMuZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyh2Y3MpOwotCQkKLQkJLy8gdmVyaWZ5IGZpcnN0IGZvbGRlciBleGlzdHMKLQkJSVBhdGggcGF0aDEgPSAoSVBhdGgpcGF0aHNbMF07Ci0JCUlSZXNvdXJjZSByZXNvdXJjZSAgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShwYXRoMSk7Ci0JCWlmIChyZXNvdXJjZS5leGlzdHMoKSl7Ci0JCQlhc3NlcnRFcXVhbHMoSVJlc291cmNlLkZPTERFUiwgcmVzb3VyY2UuZ2V0VHlwZSgpKTsKLQkJfQotCi0JCS8vIHZlcmlmeSBzZWNvbmQgZm9sZGVyIGV4aXN0cwotCQlJUGF0aCBwYXRoMiA9IChJUGF0aClwYXRoc1sxXTsKLQkJSVJlc291cmNlIHJlc291cmNlMiAgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShwYXRoMik7Ci0JCWlmIChyZXNvdXJjZTIuZXhpc3RzKCkpewotCQkJYXNzZXJ0RXF1YWxzKElSZXNvdXJjZS5GT0xERVIsIHJlc291cmNlMi5nZXRUeXBlKCkpOwotCQl9CQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdlYkNvbXBvbmVudFNlcnZlclJvb3QoKSB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlVXRpbHMuZ2V0V2ViQ29tcG9uZW50U2VydmVyUm9vdChwcm9qZWN0KTsKLQkJYXNzZXJ0VHJ1ZShmb2xkZXIuZXhpc3RzKCkpOwotCQotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvU2VydmVyQ3JlYXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9TZXJ2ZXJDcmVhdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlM2QwNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9TZXJ2ZXJDcmVhdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0aW9uRmFpbGVkRXJyb3I7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyQ3JlYXRpb25UZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50c3sKLQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFNlcnZlckNyZWF0aW9uVGVzdHMuY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBpbml0KCl7Ci0JICAgIHRyeSB7Ci0gICAgICAgICAgYXNzZXJ0Tm90TnVsbChTRVJWRVJfSU5TVEFMTF9QQVRIKTsgICAgICAgICAgCi0JICAgICAgSlVuaXRVdGlscy5jcmVhdGVTZXJ2ZXJSdW50aW1lKFJVTlRJTUVUWVBFSURfVEM1MCwgU0VSVkVSX0lOU1RBTExfUEFUSCk7Ci0JICAgIH0KLQkgICAgY2F0Y2goRXhjZXB0aW9uIGUpewotCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0gCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVUb21jYXR2NVNlcnZlcigpewotCQlpbml0KCk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFRvbWNhdCB2NSBzZXJ2ZXIuIik7Ci0JCUNyZWF0ZVNlcnZlckNvbW1hbmQgY3NjID0gbmV3IENyZWF0ZVNlcnZlckNvbW1hbmQoKTsKLQkJY3NjLnNldFNlcnZlckZhY3RvcnlpZChTRVJWRVJUWVBFSURfVEM1MCk7Ci0JCWNzYy5leGVjdXRlKG51bGwsIG51bGwgKTsKLQkJCi0JCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJU3RyaW5nIGluc3RJZCA9IGNzYy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyIGluc3RhbmNlIElkID0gIitpbnN0SWQpOwotCQlpZiAoaW5zdElkIT1udWxsKXsKLQkJICBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoaW5zdElkKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKHNlcnZlcik7Ci0JCQotCQl0cnkgewotCQkJc2VydmVyLmRlbGV0ZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCW5ldyBBc3NlcnRpb25GYWlsZWRFcnJvcigpOwotCQl9Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgY3JlYXRpbmcgVG9tY2F0IHY1IHNlcnZlci4iKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlYXR0ZW1wdENyZWF0ZVRvbWNhdHY1U2VydmVyKCl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQXR0ZW1wdGluZyB0byBjcmVhdGUgMm5kIFRvbWNhdCB2NSBzZXJ2ZXIuIik7Ci0JCUNyZWF0ZVNlcnZlckNvbW1hbmQgY3NjID0gbmV3IENyZWF0ZVNlcnZlckNvbW1hbmQoKTsKLQkJY3NjLnNldFNlcnZlckZhY3RvcnlpZChTRVJWRVJUWVBFSURfVEM1MCk7Ci0JCWNzYy5leGVjdXRlKG51bGwsIG51bGwgKTsKLQkJCi0JCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJU3RyaW5nIGluc3RJZCA9IGNzYy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JCWlmIChpbnN0SWQhPW51bGwpIHsKLQkJICBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoaW5zdElkKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKHNlcnZlcik7Ci0JCQotCQl0cnkgewotCQkJc2VydmVyLmRlbGV0ZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCW5ldyBBc3NlcnRpb25GYWlsZWRFcnJvcigpOwotCQl9Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgYXR0ZW1wdGluZyAybmQgVG9tY2F0IHY1IHNlcnZlciBjcmVhdGlvbi4iKTsJCQotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvVERKYXZhQXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvVERKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBjMWQxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1RESmF2YUF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA1MDkgICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTExNiAgIDIwODEyNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMjE3ICAgMTg3MjgwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAyMDcgICAyMTczNDYgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAuV1NXaXphcmRUb21jYXQ1MFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBUb3AgZG93biBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBUREphdmFBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7Ci0gIAotICBwcml2YXRlIFN0cmluZyBQUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLlREX1BST0pFQ1RfTkFNRTsKLSAgCi0gIHByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0JCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShUREphdmFBeGlzVEM1MC5jbGFzcyk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotCSAgICAJSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSwgU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwkgICAgCQotCSAgICB9Ci0JICB9Ci0JICAKLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7CQkKLQkJSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgdjUuMCBzZXJ2ZXIKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsJCi0JCUpVbml0VXRpbHMuc2V0U2VydmljZVNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCi0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLyAgCi0JcHVibGljIHZvaWQgdGVzdFRESmF2YUF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAKLQkgIElTdGF0dXNbXSBzdGF0dXMgPSBKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX1RPUF9ET1dOLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQotCX0KLQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOyAgICAKLSAgICAgICAgSUZvbGRlciB3ZWJDb250ZW50Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7ICAgIAotICAgIAotCQkKLQkJSUZvbGRlciB3c2RsRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKTsKLSAgICAgICAgaWYgKCF3c2RsRm9sZGVyLmV4aXN0cygpKXsKLSAgICAgICAgCXJ1bkV2ZW50TG9vcCgzMDAwKTsKLSAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBldmVudCBsb29wLi4iKTsKLSAgICAgICAgfQotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlREIHdzZGwgZm9sZGVyIGV4aXN0cz8gPSAiK3dzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQkKLQkJaWYgKCEod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCkpewotCQkJcnVuRXZlbnRMb29wKDMwMDApOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3AuLiIpOwotCQl9Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEQgd3NkbCBmaWxlIGV4aXN0cz8gPSAiICsgKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKTsKLQotCQkvLyBDaGVjayBzdGF0dXMgaGFuZGxlciBmb3IgZXJyb3JzCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJbG9nQmFkU3RhdHVzKHNbaV0pOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0gCi0JCWFzc2VydEVxdWFscygiVEQgVW5leHBlY3RlZCBudW1iZXIgb2YgY2xpZW50IGVycm9yIHJlcG9ydHMiLCAwLCBzLmxlbmd0aCk7Ci0JCQotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiByZXF1aXJlZAotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc2MjRiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAKLSAqIDIwMDcxMTE2ICAyMDgxMjQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci0KLQotcHVibGljIGludGVyZmFjZSBXU0pVbml0Q29uc3RhbnRzIHsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUzIgPSAib3JnLmVjbGlwc2UuanN0LndzLnJ1bnRpbWUuYXhpczIiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19BWElTMl9SVU5USU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzMi5jcmVhdGlvbi5heGlzMldlYlNlcnZpY2VSVCI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViUHJvamVjdE5hbWUgPSAiV2ViUHJvamVjdCI7Ci0gIAotICAvLyBmbGV4aWJsZSBwcm9qZWN0IHN0cnVjdHVyZSAxCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgcHJvamVjdE5hbWUgPSAiRmxleFByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXBvbmVudE5hbWUgPSAid2ViQ29tcG9uZW50IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wb25lbnQyTmFtZSA9ICJ3ZWJDb21wMiI7Ci0KLSAgLy8gZmxleGlibGUgcHJvamVjdCBzdHJ1Y3R1cmUgMgotICBwdWJsaWMgZmluYWwgU3RyaW5nIHByb2plY3QyTmFtZSA9ICJGbGV4UHJvamVjdDIiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXAzTmFtZSA9ICJ3ZWJDb21wMyI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcDROYW1lID0gIndlYkNvbXA0IjsKLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlamJQcm9qZWN0TmFtZSA9ICJGbGV4RUpCUHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWpiQ29tcG9uZW50TmFtZSA9ICJlamJDb21wb25lbnQiOwotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXBwQ2xpZW50UHJvamVjdE5hbWUgPSAiRmxleEFwcENsaWVudFByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGFwcENsaWVudENvbXBOYW1lID0gImFwcENsaWVudENvbXBvbmVudCI7ICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWFyQ29tcE5hbWUgPSAiRUFSQ29tcG9uZW50IjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBQYXRoIHppcEZpbGVQYXRoID0gbmV3IFBhdGgoIi9kYXRhL1dTVGVzdFByb2plY3RzLnppcCIpOwotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gcHJvamVjdE5hbWVzID0gbmV3IFN0cmluZ1tde3Byb2plY3ROYW1lLCBwcm9qZWN0Mk5hbWV9OwotICAKLSAgLy8gcGVyZm9ybWFuY2UgY29uc3RhbnRzCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgQlVfUFJPSkVDVF9OQU1FID0gIlRlc3RXZWIiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIFREX1BST0pFQ1RfTkFNRSA9ICJUZXN0VERQcm9qZWN0IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBDTElFTlRfUFJPSkVDVF9OQU1FID0gIlRlc3RXZWJDbGllbnQiOwotICAKLSAgcHVibGljIGZpbmFsIFBhdGggcGVyZl96aXBGaWxlUGF0aCA9IG5ldyBQYXRoKCIvZGF0YS9XU1BlcmZQcm9qZWN0cy56aXAiKTsKLSAgcHVibGljIGZpbmFsIFN0cmluZ1tdIHBlcmZfcHJvamVjdE5hbWVzID0gbmV3IFN0cmluZ1tde0JVX1BST0pFQ1RfTkFNRSwgVERfUFJPSkVDVF9OQU1FLCBDTElFTlRfUFJPSkVDVF9OQU1FfTsKLSAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZVJ1bnRpbWVUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlUnVudGltZVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYWMwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlUnVudGltZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE4ICAgMTI3MTg5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkuanJlcy5KUkVzVXBkYXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLklWTUluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5JVk1JbnN0YWxsMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLklWTUluc3RhbGxUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSmF2YVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5WTVN0YW5kaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnBsdWdpbi5JSjJFRU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuRmFjZXRVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwuSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGUuVmFsaWRhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuRmFjZXRNYXRjaENhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLS8qKgotICogV2ViU2VydmljZVJ1bnRpbWVUZXN0cyBjb250YWlucyB0aGUgSlVuaXQgdGVzdHMgd2hpY2ggY292ZXIgcHJvamVjdAotICogY3JlYXRpb24sIHByb2plY3QgZmlsdGVyaW5nLCBhbmQgcHJvamVjdCB0eXBlIGZpbHRlcmluZyBmb3IgdGhlIEF4aXMKLSAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIEluIG9yZGVyIGZvciB0aGUgdGVzdCB0byBydW4gc3VjY2Vzc2Z1bGx5OgotICogPG9sPgotICogPGxpPlRoZSBFY2xpcHNlIHRlc3QgZW52aXJvbm1lbnQgbXVzdCBiZSBsYXVuY2hlZCB3aXRoIEpESzEuNC4yPC9saT4KLSAqIDxsaT5UaGUgZm9sbG93aW5nIFZNIGFyZ3VtZW50cyBtdXN0IGJlIHNwZWNpZmllZDoKLSAqIDx1bD4KLSAqICAgPGxpPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1OiB0aGUgaW5zdGFsbCBsb2NhdGlvbiBvZiBhIFRvbWNhdCA1LjUgc2VydmVyLDxicj4gCi0gKiAgIGZvciBleGFtcGxlLCB1c2UgLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NT1kOlxqYWthcnRhLXRvbWNhdC01LjUuOQotICogICA8bGk+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA6IHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIGEgVG9tY2F0IDUuMCBzZXJ2ZXIsPGJyPgotICogICBmb3IgZXhhbXBsZSwgdXNlIC1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9ZDpcamFrYXJ0YS10b21jYXQtNS4wLjI4ICAgCi0gKiAgIDxsaT5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MTogdGhlIGluc3RhbGwgbG9jYXRpb24gb2YgYSBUb21jYXQgNC4xIHNlcnZlciw8YnI+Ci0gKiAgIGZvciBleGFtcGxlLCB1c2UgLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MT1kOlxqYWthcnRhLXRvbWNhdC00LjEuMjkKLSAqICAgPGxpPmphdmEuMTUuaW5zdGFsbC5wYXRoOiB0aGUgaW5zdGFsbCBsb2NhdGlvbiBvZiBhIEphdmEgMS41IEpESyw8YnI+Ci0gKiAgIGZvciBleGFtcGxlLCB1c2UgLURqYXZhLjE1Lmluc3RhbGwucGF0aD1kOlxqZGsxLjUuMF8wMgotICogPC91bD48L2xpPgotICogPC9vbD4KLSAqIAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUnVudGltZVRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgCi0gIC8vU2VydmVyIGluc3RhbGwgcGF0aHMKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzU1ID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSIpOyAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1MCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNDEgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxIik7Ci0gIAotICAvL0pESyAxLjUgaW5zdGFsbCBpbmZvCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEpBVkExNV9WTV9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuMTUuaW5zdGFsbC5wYXRoIik7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEpBVkExNV9WTV9JTlNUQUxMX1RZUEUgPSAib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSkFWQTE1X1ZNX0lOU1RBTExfTkFNRSA9ICJKYXZhMTUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBMTVfVk1fSU5TVEFMTF9KQVZBRE9DID0gImh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjUuMC9kb2NzL2FwaS8iOwotICAKLSAgLy9SdW50aW1lIHR5cGUgaWRzIGFucyBzZXJ2ZXIgdHlwZSBpZHMKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzU1ID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1NSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjUwIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNDEgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS40MSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzQxID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxIjsgIAotICAKLSAgLy9SdW50aW1lIGlkcyBmb3IgcnVudGltZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRUlEX1RDNTUgPSAiVG9tY2F0NTVSdW50aW1lIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRUlEX1RDNTAgPSAiVG9tY2F0NTBSdW50aW1lIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRUlEX1RDNDEgPSAiVG9tY2F0NDFSdW50aW1lIjsKLSAgCi0gIC8vV2ViIHNlcnZpY2UgcnVudGltZSBleHRlbnNpb24gaWRzIGZvciBBeGlzCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFYSVNfUlVOVElNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVklDRV9JTVBMX0pBVkEgPSAib3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5qYXZhIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQVhJU19TRVJWSUNFX1JVTlRJTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uamF2YSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENMSUVOVF9JTVBMX0pBVkEgPSAib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBWElTX0NMSUVOVF9SVU5USU1FX1dFQiA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi53ZWIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uamF2YSI7Ci0gIAotICAvL1ZhcmlvdXMgY29uc3RhbnRzIHVzZWQgYnkgdGhlIHRlc3QgY2FzZSBmb3IgaWRlbnRpZnlpbmcgc2VydmljZS9jbGllbnQgc2lkZSBhbmQgCi0gIC8vZm9yIHNldHRpbmcgbmFtZXMgb24gY3JlYXRlZCBwcm9qZWN0cy4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVklDRV9TSURFID0gInMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDTElFTlRfU0lERSA9ICJjIjsgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUVfUFJFRklYID0gInRjIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FX1NVRkZJWCA9ICJwcm9qZWN0IjsKLSAgCi0gIC8vSVByb2plY3RGYWNldFZlcnNpb25zIHVzZWQgaW4gdGhlIGV4cGVjdGVkIHJlc3VsdHMKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBXRUIyMyA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSkuZ2V0VmVyc2lvbihKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfM19URVhUKTsKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBXRUIyNCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSkuZ2V0VmVyc2lvbihKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfNF9URVhUKTsKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBKQVZBMTQgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0pBVkEpLmdldFZlcnNpb24oSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCk7Ci0gIHByaXZhdGUgZmluYWwgSVByb2plY3RGYWNldFZlcnNpb24gSkFWQTUwID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9KQVZBKS5nZXRWZXJzaW9uKCI1LjAiKTsKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBVVElMSVRZMTAgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfTU9EVUxFKS5nZXRWZXJzaW9uKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8wX1RFWFQpOyAgCi0gIAotICBwcml2YXRlIGZpbmFsIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIFRFTVBMQVRFX1dFQiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfVEVNUExBVEUpOwotICBwcml2YXRlIGZpbmFsIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIFRFTVBMQVRFX1VUSUxJVFkgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZShJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9URU1QTEFURSk7Ci0gIAotICBwcml2YXRlIGludCBtdWx0aXBsZXNGb3JQcm9qZWN0Q3JlYXRpb247Ci0gIAotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV2ViU2VydmljZVJ1bnRpbWVUZXN0cy5jbGFzcyk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBpbml0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGFzc2VydE5vdE51bGwoU0VSVkVSX0lOU1RBTExfUEFUSF9UQzU1KTsKLSAgICAgIGFzc2VydE5vdE51bGwoU0VSVkVSX0lOU1RBTExfUEFUSF9UQzUwKTsKLSAgICAgIGFzc2VydE5vdE51bGwoU0VSVkVSX0lOU1RBTExfUEFUSF9UQzQxKTsKLSAgICAgIGFzc2VydE5vdE51bGwoSkFWQTE1X1ZNX0lOU1RBTExfUEFUSCk7Ci0gICAgICAKLSAgICAgIC8vQ3JlYXRlIGEgc2VydmVyIHJ1bnRpbWU6IFRvbWNhdCA0LjEgd2l0aCBKREsgMS40LjIKLSAgICAgIGNyZWF0ZVRvbWNhdFNlcnZlclJ1bnRpbWUoUlVOVElNRUlEX1RDNDEsIFJVTlRJTUVUWVBFSURfVEM0MSwgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzQxKTsKLSAgICAgIAotICAgICAgLy9DcmVhdGUgYSBzZXJ2ZXIgcnVudGltZTogVG9tY2F0IDUuMCB3aXRoIEpESyAxLjQuMgotICAgICAgY3JlYXRlVG9tY2F0U2VydmVyUnVudGltZShSVU5USU1FSURfVEM1MCwgUlVOVElNRVRZUEVJRF9UQzUwLCBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTApOwotICAgICAgCi0gICAgICAvL0NyZWF0ZSBhIHNlcnZlciBydW50aW1lOiBUb21jYXQgNS41IHdpdGggSkRLIDEuNQotICAgICAgY3JlYXRlVG9tY2F0U2VydmVyUnVudGltZShSVU5USU1FSURfVEM1NSwgUlVOVElNRVRZUEVJRF9UQzU1LCBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTUpOwotICAgICAgCi0gICAgICAKLSAgICAgIAotICAgICAgU3RyaW5nIG11bHRpcGxlcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibXVsdGlwbGVzIik7IC8vdGhpcyBpcyBhbiBvcHRpb25hbCBwcm9wZXJ5IC0gZGVmYXVsdGVkIHRvIDEKLSAgICAgIGlmIChtdWx0aXBsZXMgIT0gbnVsbCAmJiAoSW50ZWdlci5wYXJzZUludChtdWx0aXBsZXMpID4gMCkpCi0gICAgICB7Ci0gICAgICAgIG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbiA9IEludGVnZXIucGFyc2VJbnQobXVsdGlwbGVzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbXVsdGlwbGVzRm9yUHJvamVjdENyZWF0aW9uID0gMTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotICB9ICAKLSAgCi0gIHByaXZhdGUgSVJ1bnRpbWUgY3JlYXRlVG9tY2F0U2VydmVyUnVudGltZShTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgcnVudGltZVR5cGVJZCwgU3RyaW5nIHNlcnZlckluc3RhbGxQYXRoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBJUnVudGltZVR5cGUgcnQgPSBTZXJ2ZXJDb3JlLmZpbmRSdW50aW1lVHlwZShydW50aW1lVHlwZUlkKTsKLSAgICBJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gcnQuY3JlYXRlUnVudGltZShydW50aW1lSWQsIG51bGwpOwotICAgIHdjLnNldExvY2F0aW9uKG5ldyBQYXRoKHNlcnZlckluc3RhbGxQYXRoKSk7Ci0gICAgSVJ1bnRpbWUgcnVudGltZSA9IHdjLnNhdmUodHJ1ZSwgbnVsbCk7Ci0gICAgCi0gICAgaWYgKHJ1bnRpbWVUeXBlSWQuZXF1YWxzKFJVTlRJTUVUWVBFSURfVEM1NSkpCi0gICAgewotICAgICAgLy9DcmVhdGUgYSBuZXcgSVZNSW5zdGFsbAotICAgICAgSVZNSW5zdGFsbFR5cGUgdHlwZSA9IEphdmFSdW50aW1lLmdldFZNSW5zdGFsbFR5cGUoSkFWQTE1X1ZNX0lOU1RBTExfVFlQRSk7Ci0gICAgICBJVk1JbnN0YWxsIG5ld1ZNID0gbmV3IFZNU3RhbmRpbih0eXBlLCBjcmVhdGVVbmlxdWVJZCh0eXBlKSk7IAotICAgICAgbmV3Vk0uc2V0SW5zdGFsbExvY2F0aW9uKG5ldyBGaWxlKEpBVkExNV9WTV9JTlNUQUxMX1BBVEgpLmdldEFic29sdXRlRmlsZSgpKTsKLSAgICAgIG5ld1ZNLnNldE5hbWUoSkFWQTE1X1ZNX0lOU1RBTExfTkFNRSk7Ci0gICAgICBuZXdWTS5zZXRKYXZhZG9jTG9jYXRpb24obmV3IFVSTChKQVZBMTVfVk1fSU5TVEFMTF9KQVZBRE9DKSk7Ci0gICAgICBpZiAobmV3Vk0gaW5zdGFuY2VvZiBJVk1JbnN0YWxsMikKLSAgICAgIHsKLSAgICAgICAgSVZNSW5zdGFsbDIgbmV3Vk0yID0gKElWTUluc3RhbGwyKSBuZXdWTTsKLSAgICAgICAgbmV3Vk0yLnNldFZNQXJncyhudWxsKTsKLSAgICAgIH0KLSAgICAgIG5ld1ZNLnNldExpYnJhcnlMb2NhdGlvbnMobnVsbCk7ICAgICAgCi0KLSAgICAgIC8vQWRkIHRoZSBuZXcgSVZNSW5zdGFsbCB0byB0aGUgbWFzdGVyIGxpc3QuCi0gICAgICBJVk1JbnN0YWxsW10gdm1zID0gbmV3IElWTUluc3RhbGxbXXtuZXdWTX07Ci0gICAgICAvL1RPRE8gUmVwbGFjZSB1c2Ugb2YgdGhlIGludGVybmFsIGNsYXNzIG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5qcmVzLkpSRXNVcGRhdGVyCi0gICAgICAvL3dpdGggc29tZXRoaW5nIHB1YmxpYy4gTm90IHN1cmUgaWYgc29tZXRoaW5nIHB1YmxpYyBpcyBhdmFpbGFibGUgYXQgdGhpcyB0aW1lLiBOZWVkIHRvIGNoZWNrLgotICAgICAgSlJFc1VwZGF0ZXIgdXBkYXRlciA9IG5ldyBKUkVzVXBkYXRlcigpOwotICAgICAgSVZNSW5zdGFsbCBkZWZhdWx0Vk0gPSBKYXZhUnVudGltZS5nZXREZWZhdWx0Vk1JbnN0YWxsKCk7Ci0gICAgICB1cGRhdGVyLnVwZGF0ZUpSRVNldHRpbmdzKHZtcywgZGVmYXVsdFZNKTsKLSAgICAgIAotICAgICAgLy9HZXQgdGhlIG5ldyBJVk1JbnN0YWxsCi0gICAgICBJVk1JbnN0YWxsVHlwZSB2bVR5cGUgPSBKYXZhUnVudGltZS5nZXRWTUluc3RhbGxUeXBlKEpBVkExNV9WTV9JTlNUQUxMX1RZUEUpOwotICAgICAgSVZNSW5zdGFsbCBqYXZhMTVWTSA9IHZtVHlwZS5maW5kVk1JbnN0YWxsQnlOYW1lKEpBVkExNV9WTV9JTlNUQUxMX05BTUUpOwotICAgIAotICAgICAgLy9TZXQgdGhlIHRvbWNhdCBydW50aW1lIHRvIHVzZSB0aGUgbmV3IEphdmEgMTUgSkRLLgotICAgICAgSVJ1bnRpbWVXb3JraW5nQ29weSB3YzIgPSBydW50aW1lLmNyZWF0ZVdvcmtpbmdDb3B5KCk7Ci0gICAgICAvL1RPRE8gUmVwbGFjZSB1c2Ugb2YgdGhlIGludGVybmFsIGNsYXNzIAotICAgICAgLy9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLmludGVybmFsLklUb21jYXRSdW50aW1lV29ya2luZ0NvcHkKLSAgICAgIC8vd2l0aCBzb21ldGhpbmcgcHVibGljLiBFbmhhbmNlbWVudCAxMjc4ODQgaGFzIGJlZW4gb3BlbmVkIHRvIHJlcXVlc3QgQVBJCi0gICAgICAvL2ZvciB0aGlzLgotICAgICAgSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weSB0Y3djID0gKElUb21jYXRSdW50aW1lV29ya2luZ0NvcHkpd2MyLmxvYWRBZGFwdGVyKElUb21jYXRSdW50aW1lV29ya2luZ0NvcHkuY2xhc3MsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgdGN3Yy5zZXRWTUluc3RhbGwoamF2YTE1Vk0pOwotICAgICAgd2MyLnNhdmUodHJ1ZSwgbnVsbCk7ICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBTZXJ2ZXJDb3JlLmZpbmRSdW50aW1lKHJ1bnRpbWVJZCk7Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlVW5pcXVlSWQoSVZNSW5zdGFsbFR5cGUgdm1UeXBlKQotICB7Ci0gICAgU3RyaW5nIGlkID0gbnVsbDsKLSAgICBkbwotICAgIHsKLSAgICAgIGlkID0gU3RyaW5nLnZhbHVlT2YoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwotICAgIH0gd2hpbGUgKHZtVHlwZS5maW5kVk1JbnN0YWxsKGlkKSAhPSBudWxsKTsKLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0cyBwcm9qZWN0IGNyZWF0aW9uIGFuZCBmaWx0ZXJpbmcgZm9yIHRoZSBBeGlzIFdlYiBzZXJ2aWNlCi0gICAqIHJ1bnRpbWUuIFRlc3RzIGNvdmVyIGFsbCB2YWxpZCBjb21iaW5hdGlvbnMgb2YgU2VydmljZVJ1bnRpbWVzLCAKLSAgICogVG9tY2F0IHNlcnZlcnMsIGFuZCBKMkVFIHByb2plY3QgdHlwZXMgYW5kIHdlbGwgYXMgYWxsIHZhbGlkICAKLSAgICogY29tYmluYXRpb25zIG9mIENsaWVudFJ1bnRpbWVzLCBUb21jYXQgc2VydmVycywgYW5kIEoyRUUgcHJvamVjdCB0eXBlcy4KLSAgICovICAKLSAgcHVibGljIHZvaWQgdGVzdFByb2plY3RDcmVhdGlvbkFuZEZpbHRlcmluZygpCi0gIHsKLSAgICBpbml0KCk7Ci0gICAgCi0gICAgU3RyaW5nW10gdGVtcGxhdGVJZHMgPSBuZXcgU3RyaW5nW117SUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9URU1QTEFURX07Ci0gICAgU3RyaW5nW10gc2NlbmFyaW9zID0gbmV3IFN0cmluZ1tde1NFUlZJQ0VfU0lERSwKLSAgICAgICAgU0VSVklDRV9TSURFLAotICAgICAgICBTRVJWSUNFX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREV9OwotICAgIFN0cmluZ1tdIHNlcnZpY2VDbGllbnRSdW50aW1lSWRzID0gbmV3IFN0cmluZ1tde0FYSVNfU0VSVklDRV9SVU5USU1FLAotICAgICAgICBBWElTX1NFUlZJQ0VfUlVOVElNRSwKLSAgICAgICAgQVhJU19TRVJWSUNFX1JVTlRJTUUsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX1dFQiwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9XRUIsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQSwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9KQVZBLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX0pBVkF9OwotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVzID0gbmV3IFN0cmluZ1tde1NFUlZFUlRZUEVJRF9UQzQxLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1MCwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTUsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzQxLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1MCwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTUsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzQxLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1MCwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNTV9OwotICAgIAotICAgIAotICAgIC8vRXhwZWN0ZWQgUmVzdWx0czoKLSAgICAKLSAgICBJUHJvamVjdEZhY2V0VmVyc2lvbltdW10gZXhwZWN0ZWRGYWNldHMgPSBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXVtdeyBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyMywgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjQsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjI0LCBKQVZBNTB9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyMywgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjQsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjI0LCBKQVZBNTB9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtVVElMSVRZMTAsIEpBVkExNH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1VUSUxJVFkxMCwgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117VVRJTElUWTEwLCBKQVZBNTB9LAotICAgIH07Ci0gICAgCi0gICAgU3RyaW5nW10gZXhwZWN0ZWRSdW50aW1lcyA9IG5ldyBTdHJpbmdbXSB7UlVOVElNRUlEX1RDNDEsCi0gICAgICAgIFJVTlRJTUVJRF9UQzUwLAotICAgICAgICBSVU5USU1FSURfVEM1NSwKLSAgICAgICAgUlVOVElNRUlEX1RDNDEsCi0gICAgICAgIFJVTlRJTUVJRF9UQzUwLAotICAgICAgICBSVU5USU1FSURfVEM1NSwKLSAgICAgICAgUlVOVElNRUlEX1RDNDEsCi0gICAgICAgIFJVTlRJTUVJRF9UQzUwLAotICAgICAgICBSVU5USU1FSURfVEM1NSAgICAgICAgCi0gICAgfTsKLSAgICAKLSAgICBTdHJpbmcgYmlnUHJlZml4ID0gUFJPSkVDVF9OQU1FX1BSRUZJWCsiMCIrUFJPSkVDVF9OQU1FX1NVRkZJWDsKLSAgICBTdHJpbmdbXSBleHBlY3RlZFByb2plY3RzRm9yQXhpc1NlcnZpY2UgPSBuZXcgU3RyaW5nW10geyBiaWdQcmVmaXgrIjAiLCAKLSAgICAgICAgYmlnUHJlZml4KyIxIiwKLSAgICAgICAgYmlnUHJlZml4KyIyIiwKLSAgICAgICAgYmlnUHJlZml4KyIzIiwKLSAgICAgICAgYmlnUHJlZml4KyI0IiwKLSAgICAgICAgYmlnUHJlZml4KyI1IiAgICAgICAgCi0gICAgfTsKLSAgICAKLSAgICBTdHJpbmdbXSBleHBlY3RlZFByb2plY3RzRm9yQXhpc0NsaWVudCA9IG5ldyBTdHJpbmdbXSB7IGJpZ1ByZWZpeCsiMCIsIAotICAgICAgICBiaWdQcmVmaXgrIjEiLAotICAgICAgICBiaWdQcmVmaXgrIjIiLAotICAgICAgICBiaWdQcmVmaXgrIjMiLAotICAgICAgICBiaWdQcmVmaXgrIjQiLAotICAgICAgICBiaWdQcmVmaXgrIjUiLAotICAgICAgICBiaWdQcmVmaXgrIjYiLAotICAgICAgICBiaWdQcmVmaXgrIjciLAotICAgICAgICBiaWdQcmVmaXgrIjgiLAotICAgIH07Ci0gICAgCi0gICAgYm9vbGVhbltdIGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzU2VydmljZSA9IG5ldyBib29sZWFuW10ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwotICAgIGJvb2xlYW5bXSBleHBlY3RlZEJvb2xlYW5zRm9yQXhpc0NsaWVudFdlYiA9IG5ldyBib29sZWFuW10ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwotICAgIGJvb2xlYW5bXSBleHBlY3RlZEJvb2xlYW5zRm9yQXhpc0NsaWVudEphdmEgPSBuZXcgYm9vbGVhbltdIHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlfTsKLSAgICAKLSAgICAKLSAgICAvL1R1cm4gYXV0by1idWlsZCBvZmYKLSAgICBWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gbmV3IFZhbGlkYXRpb25NYW5hZ2VyKCk7Ci0gICAgbWFuYWdlci5kaXNhYmxlQXV0b0J1aWxkKCk7Ci0gICAgCi0gICAgLy9DcmVhdGUgdGhlIHByb2plY3RzCi0gICAgZm9yIChpbnQgaT0wOyBpPG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbjsgaSsrKQotICAgIHsKLSAgICAgIGNyZWF0ZVByb2plY3RzKHRlbXBsYXRlSWRzLCBzY2VuYXJpb3MsIHNlcnZpY2VDbGllbnRSdW50aW1lSWRzLCBzZXJ2ZXJUeXBlcywgUFJPSkVDVF9OQU1FX1BSRUZJWCtpKTsKLSAgICB9ICAKLSAgICAKLSAgICAvL1Jlc3RvcmUgYXV0by1idWlsZAotICAgIG1hbmFnZXIucmVzdG9yZUF1dG9CdWlsZCgpOwotICAgIAotICAgIC8vQ2hlY2sgRXhwZWN0ZWQgUmVzdWx0czoKLSAgICAKLSAgICAvL0NoZWNrIGZhY2V0cyBhbmQgcnVudGltZSBvbiB0aGUgZmlyc3QgIjAidGggc2V0IG9mIGNyZWF0ZWQgcHJvamVjdHMuIElnbm9yZSBoaWdoZXIgbXVsdGlwbGVzIHNpbmNlIHRoZXkKLSAgICAvL2FyZSBkdXBsaWNhdGVzLiAgICAKLSAgICBmb3IgKGludCBqPTA7IGo8ZXhwZWN0ZWRGYWNldHMubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gYmlnUHJlZml4K2o7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwocHJvamVjdCk7Ci0gICAgICBhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChmUHJvamVjdCk7Ci0KLSAgICAgICAgLy9DaGVjayBmYWNldHMKLSAgICAgICAgLy9iZWdpbiBkZWJ1ZwotICAgICAgICBJdGVyYXRvciBwZmFjZXRzID0gZlByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwZmFjZXRzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAJSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKXBmYWNldHMubmV4dCgpOwotICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJmYWNldD0iK3Bmdi5nZXRQcm9qZWN0RmFjZXQoKS5nZXRJZCgpKyIsIHZlcnNpb249IitwZnYuZ2V0VmVyc2lvblN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaz0wOyBrPGV4cGVjdGVkRmFjZXRzW2pdLmxlbmd0aDsgaysrKQotICAgICAgICB7Ci0gICAgICAgICAgYXNzZXJ0VHJ1ZShmUHJvamVjdC5oYXNQcm9qZWN0RmFjZXQoZXhwZWN0ZWRGYWNldHNbal1ba10pKTsKLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy9DaGVjayBydW50aW1lCi0gICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSBmUHJvamVjdC5nZXRSdW50aW1lKCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZlJ1bnRpbWUpOwotICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChzUnVudGltZSk7Ci0gICAgICAgIGFzc2VydFRydWUoc1J1bnRpbWUuZ2V0SWQoKS5lcXVhbHMoZXhwZWN0ZWRSdW50aW1lc1tqXSkpOwotICAgICAgICAKLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICAgIGZhaWwoKTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0NoZWNrIHRoYXQgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JTZXJ2aWNlVHlwZUFuZFJ1bnRpbWUoLi4pIHJldHVybnMKLSAgICAvL3RoZSByaWdodCBzZXQgb2YgcHJvamVjdHMKLSAgICBTdHJpbmcgc2VydmljZVR5cGUgPSBTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApICsgIi8iICsgU0VSVklDRV9JTVBMX0pBVkE7Ci0gICAgU3RyaW5nW10gcHJvamVjdHNGb3JBeGlzU2VydmljZSA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yU2VydmljZVR5cGVBbmRSdW50aW1lKHNlcnZpY2VUeXBlLCBBWElTX1JVTlRJTUUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFByb2plY3RzRm9yQXhpc1NlcnZpY2UubGVuZ3RoLCBwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlLmxlbmd0aCk7Ci0gICAgTGlzdCBwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8cHJvamVjdHNGb3JBeGlzU2VydmljZS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlTGlzdC5hZGQocHJvamVjdHNGb3JBeGlzU2VydmljZVtpXSk7ICAgICAgCi0gICAgfQotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFByb2plY3RzRm9yQXhpc1NlcnZpY2UubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXNzZXJ0VHJ1ZShwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlTGlzdC5jb250YWlucyhleHBlY3RlZFByb2plY3RzRm9yQXhpc1NlcnZpY2VbaV0pKTsKLSAgICB9Ci0gICAgCi0gICAgLy9DaGVjayB0aGF0IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yQ2xpZW50VHlwZUFuZFJ1bnRpbWUoLi4pIHJldHVybnMKLSAgICAvL3RoZSByaWdodCBzZXQgb2YgcHJvamVjdHMgICAgCi0gICAgU3RyaW5nW10gcHJvamVjdHNGb3JBeGlzQ2xpZW50ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JDbGllbnRUeXBlQW5kUnVudGltZShDTElFTlRfSU1QTF9KQVZBLCBBWElTX1JVTlRJTUUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFByb2plY3RzRm9yQXhpc0NsaWVudC5sZW5ndGgsIHByb2plY3RzRm9yQXhpc0NsaWVudC5sZW5ndGgpOwotICAgIExpc3QgcHJvamVjdHNGb3JBeGlzQ2xpZW50TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8cHJvamVjdHNGb3JBeGlzQ2xpZW50Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHByb2plY3RzRm9yQXhpc0NsaWVudExpc3QuYWRkKHByb2plY3RzRm9yQXhpc0NsaWVudFtpXSk7ICAgICAgCi0gICAgfQotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFByb2plY3RzRm9yQXhpc0NsaWVudC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHByb2plY3RzRm9yQXhpc0NsaWVudExpc3QuY29udGFpbnMoZXhwZWN0ZWRQcm9qZWN0c0ZvckF4aXNDbGllbnRbaV0pKTsKLSAgICB9ICAgIAotICAgIAotICAgIC8vQ2hlY2sgdGhhdCB0aGUgQXhpcyBzZXJ2aWNlIGFuZCBjbGllbnQgcnVudGltZXMnIHByb2plY3QgY29tcGF0aWJpbGl0eSBjaGVja2luZyBpcyB3b3JraW5nCi0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzU2VydmljZS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBiaWdQcmVmaXgraTsgICAgICAKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEJvb2xlYW5zRm9yQXhpc1NlcnZpY2VbaV0sIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRQcm9qZWN0KEFYSVNfU0VSVklDRV9SVU5USU1FLCBwcm9qZWN0TmFtZSkpOyAgICAKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEJvb2xlYW5zRm9yQXhpc0NsaWVudFdlYltpXSwgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0UHJvamVjdChBWElTX0NMSUVOVF9SVU5USU1FX1dFQiwgcHJvamVjdE5hbWUpKTsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEJvb2xlYW5zRm9yQXhpc0NsaWVudEphdmFbaV0sIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFByb2plY3QoQVhJU19DTElFTlRfUlVOVElNRV9KQVZBLCBwcm9qZWN0TmFtZSkpOwotICAgIH0gCi0gICAgCi0gICAgLy9UdXJuIGF1dG8tYnVpbGQgb2ZmCi0gICAgbWFuYWdlci5kaXNhYmxlQXV0b0J1aWxkKCk7Ci0gICAgICAgIAotICAgIC8vRGVsZXRlIHRoZSBwcm9qZWN0cwotICAgIGZvciAoaW50IGk9MDsgaTxtdWx0aXBsZXNGb3JQcm9qZWN0Q3JlYXRpb247IGkrKykKLSAgICB7Ci0gICAgICBkZWxldGVQcm9qZWN0cyh0ZW1wbGF0ZUlkcy5sZW5ndGgsIFBST0pFQ1RfTkFNRV9QUkVGSVgraSk7Ci0gICAgfSAgICAgIAotCi0gICAgLy9SZXN0b3JlIGF1dG8tYnVpbGQKLSAgICBtYW5hZ2VyLnJlc3RvcmVBdXRvQnVpbGQoKTsgICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVByb2plY3RzKGludCBuLCBTdHJpbmcgbmFtZVByZWZpeCkKLSAgewotICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lUHJlZml4ICsgUFJPSkVDVF9OQU1FX1NVRkZJWCArIGk7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KG5hbWUpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICAgIC8vRG9uJ3QgZmFpbCB0aGUgdGVzdCBjYXNlIGlmIHByb2plY3QgZGVsZXRpb24gZmFpbHMuCi0gICAgICB9Ci0gICAgfQotICB9ICAKLSAgCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0cyhTdHJpbmdbXSB0ZW1wbGF0ZUlkcywgU3RyaW5nW10gc2NlbmFyaW9zLCBTdHJpbmdbXSBzZXJ2aWNlQ2xpZW50UnVudGltZUlkcywgU3RyaW5nW10gc2VydmVyVHlwZXMsIFN0cmluZyBuYW1lUHJlZml4ICkKLSAgewotICAgIGludCBuID0gdGVtcGxhdGVJZHMubGVuZ3RoOwotICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lUHJlZml4ICsgUFJPSkVDVF9OQU1FX1NVRkZJWCArIGk7Ci0gICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdnMgPSBudWxsOwotICAgICAgaWYgKHNjZW5hcmlvc1tpXS5lcXVhbHMoQ0xJRU5UX1NJREUpKQotICAgICAgewotCi0gICAgICAgICAgcmZ2cyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlQ2xpZW50UnVudGltZUlkc1tpXSkuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoc2NlbmFyaW9zW2ldLmVxdWFscyhTRVJWSUNFX1NJREUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmZ2cyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZUNsaWVudFJ1bnRpbWVJZHNbaV0pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJmdnMgPSBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bMF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0gICAgICBjb21tYW5kLnNldFByb2plY3ROYW1lKG5hbWUpOwotICAgICAgY29tbWFuZC5zZXRUZW1wbGF0ZUlkKHRlbXBsYXRlSWRzW2ldKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAgY29tbWFuZC5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMocmZ2cyk7ICAgICAgICAgICAKLSAgICAgIGNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeUlkKHNlcnZlclR5cGVzW2ldKTsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCBudWxsICk7ICAgIAotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgIHsKLSAgICAgICAgZmFpbCgpOwotICAgICAgfQotICAgICAgCi0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KG5hbWUpOwotICAgICAgRmFjZXRVdGlscy5hZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChwcm9qZWN0LCByZnZzLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICB9ICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBUZXN0cyBwcm9qZWN0IHR5cGUgZmlsdGVyaW5nIGZvciB0aGUgQXhpcyBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBUZXN0cyBjb3ZlciBhbGwgU2VydmljZVJ1bnRpbWVzIGFuZCBDbGllbnRSdW50aW1lcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQcm9qZWN0VHlwZUZpbHRlcmluZygpCi0gIHsgIAotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10gZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzU2VydmljZSA9IG5ldyBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZVtdIHtURU1QTEFURV9XRUJ9OwotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10gZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViID0gbmV3IElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10ge1RFTVBMQVRFX1dFQn07Ci0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSBleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhID0gbmV3IElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10ge1RFTVBMQVRFX1VUSUxJVFl9OwotICAgIAotICAgIFNldCB0ZW1wbGF0ZXNGb3JBeGlzU2VydmljZSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKEFYSVNfU0VSVklDRV9SVU5USU1FKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzU2VydmljZS5sZW5ndGgsdGVtcGxhdGVzRm9yQXhpc1NlcnZpY2Uuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzU2VydmljZS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlLmNvbnRhaW5zKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc1NlcnZpY2VbaV0pKTsKLSAgICB9Ci0gICAgU2V0IHRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JDbGllbnRSdW50aW1lKEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViLmxlbmd0aCwgdGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYi5zaXplKCkpOwotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXNzZXJ0VHJ1ZSh0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViLmNvbnRhaW5zKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYltpXSkpOwotICAgIH0gICAgCi0gICAgU2V0IHRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGVzRm9yQ2xpZW50UnVudGltZShBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhLmxlbmd0aCwgdGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhLmNvbnRhaW5zKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmFbaV0pKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0R5bmFtaWNQb3B1cEpVbml0V2l6YXJkLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvRHluYW1pY1BvcHVwSlVuaXRXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE3MmY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvRHluYW1pY1BvcHVwSlVuaXRXaXphcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwOSAgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuSUVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLXB1YmxpYyBjbGFzcyBEeW5hbWljUG9wdXBKVW5pdFdpemFyZCBleHRlbmRzIER5bmFtaWNQb3B1cFdpemFyZCB7Ci0JcHJpdmF0ZSBJRWNsaXBzZVN0YXR1c0hhbmRsZXIgaGFuZGxlcl87Ci0gICAgcHJpdmF0ZSBJTG9nIGxvZ187Ci0JcHVibGljIER5bmFtaWNQb3B1cEpVbml0V2l6YXJkKElFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyKQotCXsKLQkJaGFuZGxlcl8gPSBoYW5kbGVyOwotCX0KLSAgCi0gICAgcHVibGljIER5bmFtaWNQb3B1cEpVbml0V2l6YXJkKElFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyLCBJTG9nIGxvZykKLSAgICB7Ci0gICAgICAgIGhhbmRsZXJfID0gaGFuZGxlcjsKLSAgICAgICAgbG9nXyA9IGxvZzsKLSAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgcnVuSGVhZExlc3MoSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uLElSdW5uYWJsZUNvbnRleHQgY29udGV4dCkgewotCQkKLQkJUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCQlFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgICBlbnZpcm9ubWVudCAgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXJfICk7Ci0JCWlmIChsb2dfIT1udWxsKQotICAgICAgICAgIGVudmlyb25tZW50LnNldExvZyhsb2dfKTsKLSAgICAKLQkJRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgICAgZGF0YVJlZ2lzdHJ5XyAgID0gbmV3IERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsKCk7CSAgICAKLQkJRGF0YUZsb3dNYW5hZ2VyICAgICAgICAgICAgZGF0YU1hbmFnZXIgICAgID0gbmV3IERhdGFGbG93TWFuYWdlciggZGF0YVJlZ2lzdHJ5XywgZW52aXJvbm1lbnQgKTsKLQkJU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXIgbWFuYWdlciAgICAgICAgID0gbmV3IFNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyKGVudmlyb25tZW50LCBkYXRhTWFuYWdlcik7Ci0JCSAgCi0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgY29tbWFuZFdpZGdldEJpbmRpbmdfID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKXdpemFyZEVsZW1lbnRfLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsKLQkgICAgfQotCSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotCSAgICB7Ci0JICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JICAgIAotCQljb21tYW5kV2lkZ2V0QmluZGluZ18ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeV8gKTsKLQkJCi0JCUNvbW1hbmRGcmFnbWVudCAgICAgICAgICAgIHJvb3RGcmFnbWVudCAgICA9IGdldFJvb3RGcmFnbWVudCggc2VsZWN0aW9uLCBudWxsICk7Ci0JCW1hbmFnZXIuc2V0Um9vdEZyYWdtZW50KCByb290RnJhZ21lbnQgKTsKLQkJbWFuYWdlci5ydW5Gb3J3YXJkVG9OZXh0U3RvcCggY29udGV4dCApOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9KVW5pdFV0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvSlVuaXRVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmY0MDQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9KVW5pdFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDMxNCAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDUwOSAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAKLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MTExNiAgMjA4MTI0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5QZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5XYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlcy5BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FbnZpcm9ubWVudFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVdvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuVmFsaWRhdG9yTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotCi1wdWJsaWMgY2xhc3MgSlVuaXRVdGlscyB7Ci0JLy8gQmVnaW4gU2VydmVyIFV0aWxpdGllcwotCXB1YmxpYyBzdGF0aWMgSVJ1bnRpbWUgY3JlYXRlU2VydmVyUnVudGltZShTdHJpbmcgcnVudGltZVR5cGVJZCxTdHJpbmcgc2VydmVySW5zdGFsbFBhdGgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUlSdW50aW1lVHlwZSBydCA9IFNlcnZlckNvcmUuZmluZFJ1bnRpbWVUeXBlKHJ1bnRpbWVUeXBlSWQpOwotCQlTdHJpbmcgdGN2ZXJzaW9uID0gcnVudGltZVR5cGVJZC5zdWJzdHJpbmcocnVudGltZVR5cGVJZC5sYXN0SW5kZXhPZigiLiIpKzEpOwotCQlJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gcnQuY3JlYXRlUnVudGltZSh0Y3ZlcnNpb24rIlJ1bnRpbWUiLCBudWxsKTsKLQkJd2Muc2V0TG9jYXRpb24obmV3IFBhdGgoc2VydmVySW5zdGFsbFBhdGgpKTsKLQkJCi0JCXJldHVybiB3Yy5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoU3RyaW5nIG5hbWUsU3RyaW5nIHNlcnZlclR5cGVJZCxJUnVudGltZSBydW50aW1lLElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWQpOwotICAgICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsgCi0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2ZXJzLmxlbmd0aDtpKyspewotICAgICAgICBpZihzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpLmVxdWFscyhzZXJ2ZXJUeXBlLmdldElkKCkpKXsKLSAgICAgICAgICByZXR1cm4gc2VydmVyc1tpXTsgIAotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIElTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXYyA9IHNlcnZlclR5cGUuY3JlYXRlU2VydmVyKHNlcnZlclR5cGVJZCxudWxsLCBtb25pdG9yICk7Ci0JICBzZXJ2ZXJXYy5zZXROYW1lKG5hbWUpOwotCSAgc2VydmVyV2Muc2V0UnVudGltZShydW50aW1lKTsKLSAgICAgIElTZXJ2ZXIgc2VydmVyID0gc2VydmVyV2Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yICk7Ci0gICAgICByZXR1cm4gc2VydmVyOwotCX0JCi0JCi0JLyoqCi0JICogY3JlYXRlU2VydmVyIGFuZCBpbnN0YWxsIEpSRSBmb3IgU2VydmVycyByZXF1aXJpbmcgYSBzcGVjaWZpYyBKUkUKLQkgKiBAcGFyYW0gamF2YVJ1bnRpbWVQYXRoIEpSRSBpbnN0YWxsIGxvY2F0aW9uOyBpLmUuIEU6XFxKYXZhMTQxCi0JICogQHBhcmFtIGpyZUlEIEpSRSBpZDsgaS5lLiBqYXZhMTQxCi0JICogQHBhcmFtIG5hbWUgc2VydmVyIG5hbWUKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkIHNlcnZlciB0eXBlIGlkCi0JICogQHBhcmFtIHJ1bnRpbWUgSVJ1bnRpbWUKLQkgKiBAcGFyYW0gZW52IElFbnZpcm9ubWVudAotCSAqIEByZXR1cm4gIHNlcnZlciBJU2VydmVyCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoU3RyaW5nIGphdmFSdW50aW1lUGF0aCwgU3RyaW5nIGpyZUlELCBTdHJpbmcgbmFtZSxTdHJpbmcgc2VydmVyVHlwZUlkLElSdW50aW1lIHJ1bnRpbWUsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLSAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOyAKLSAgICBmb3IgKGludCBpPTA7aTxzZXJ2ZXJzLmxlbmd0aDtpKyspewotICAgICAgaWYoc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHMoc2VydmVyVHlwZS5nZXRJZCgpKSl7Ci0gICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOyAgCi0gICAgICB9Ci0gICAgfQotCi0JCUlTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXYyA9IHNlcnZlclR5cGUuY3JlYXRlU2VydmVyKHNlcnZlclR5cGVJZCxudWxsLCBtb25pdG9yICk7Ci0JCXNlcnZlcldjLnNldE5hbWUobmFtZSk7Ci0JCXNlcnZlcldjLnNldFJ1bnRpbWUocnVudGltZSk7Ci0JCQotCQlJU2VydmVyIHNlcnZlciA9IHNlcnZlcldjLnNhdmVBbGwodHJ1ZSwgbW9uaXRvciApOwotCQkKLQkJcmV0dXJuIHNlcnZlcjsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHN0YXJ0U2VydmVyKElTZXJ2ZXIgc2VydmVyLElFbnZpcm9ubWVudCBlbnYpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWZpbmFsIElTZXJ2ZXIgY3VycmVudFNlcnZlciA9IHNlcnZlcjsKLQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkgIGN1cnJlbnRTZXJ2ZXIuc3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUsIG1vbml0b3IgKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUludGVycnVwdGVkRXhjZXB0aW9uIHdyYXBwZXIgPSBuZXcgSW50ZXJydXB0ZWRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQkJCQl3cmFwcGVyLnNldFN0YWNrVHJhY2UoZS5nZXRTdGFja1RyYWNlKCkpOwotCQkJCQl0aHJvdyB3cmFwcGVyOwotCQkJCX0KLQkJCX0KLQkJfTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSxmYWxzZSxydW5uYWJsZSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZW1vdmVFQVJGcm9tU2VydmVyKElTZXJ2ZXIgc2VydmVyLElQcm9qZWN0IGVhclByb2plY3QsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW50IG51bWJlck9mTW9kdWxlcyA9IHNlcnZlci5nZXRNb2R1bGVzKCkubGVuZ3RoOwotCQlpZiAoc2VydmVyICE9IG51bGwpCi0JCXsKLSAgICAgIGZpbmFsIElNb2R1bGUgZWFyUHJvamVjdE1vZHVsZSA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlKGVhclByb2plY3QpOwotICAgICAgZmluYWwgSU1vZHVsZVtdIG1vZHVsZXMgPSB7ZWFyUHJvamVjdE1vZHVsZX07Ci0JCQluZXcgU2VydmVyVXRpbHMoKS5tb2RpZnlNb2R1bGVzKGVudiwgc2VydmVyLGVhclByb2plY3RNb2R1bGUsZmFsc2UsIG1vbml0b3IgKTsKLQkJICAJZmluYWwgSVNlcnZlciBjdXJyZW50U2VydmVyID0gc2VydmVyOwotCQkgIAlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkJCXsKLQkJICAJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJCXsKLQkJICAJCSAgCWZvciAoaW50IGk9MDtpPDEwMDA7aSsrKQotCQkgIAkJICAJewotCQkgIAkJICAJCWludCBtb2R1bGVTdGF0ZSA9IGN1cnJlbnRTZXJ2ZXIuZ2V0TW9kdWxlU3RhdGUobW9kdWxlcyk7Ci0JCSAgCQkgIAkJaWYgKG1vZHVsZVN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCB8fCBtb2R1bGVTdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQSU5HKQotCQkgIAkJICAJCXsKLQkJICAJCSAgCQkgIHRyeQotCQkgIAkJCQkgIHsKLQkJICAJCSAgCQkgICAgVGhyZWFkLnNsZWVwKDMwMCk7Ci0JCSAgCQkJCSAgfQotCQkgIAkJICAJCSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCSAgCQkJCSAgewotCQkgIAkJICAJCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotCQkgIAkJCQkgIH0KLQkJICAJCSAgCQl9Ci0JCSAgCQkgIAkJZWxzZQotCQkgIAkJICAJCQlicmVhazsKLQkJICAJCSAgCX0gIAkJCSAgCQkJCi0JCQkJfSAgCQkKLQkJCX07Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLGZhbHNlLHJ1bm5hYmxlKTsKLQkJCXJldHVybiAoc2VydmVyLmdldE1vZHVsZXMoKS5sZW5ndGggPT0gKG51bWJlck9mTW9kdWxlcy0xKSk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVtb3ZlTW9kdWxlRnJvbVNlcnZlcihJU2VydmVyIHNlcnZlciwgSVByb2plY3Qgd2ViUHJvamVjdCwgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAKLQkgIGludCBudW1iZXJPZk1vZHVsZXMgPSBzZXJ2ZXIuZ2V0TW9kdWxlcygpLmxlbmd0aDsKLQkJaWYgKHNlcnZlciAhPSBudWxsKQotCQl7Ci0gICAgICBmaW5hbCBJTW9kdWxlIHdlYlByb2plY3RNb2R1bGUgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZSh3ZWJQcm9qZWN0KTsKLSAgICAgIGZpbmFsIElNb2R1bGVbXSBtb2R1bGVzID0ge3dlYlByb2plY3RNb2R1bGV9OwotCi0JCQluZXcgU2VydmVyVXRpbHMoKS5tb2RpZnlNb2R1bGVzKGVudiwgc2VydmVyLHdlYlByb2plY3RNb2R1bGUsZmFsc2UsIG1vbml0b3IgKTsKLQkJICAJZmluYWwgSVNlcnZlciBjdXJyZW50U2VydmVyID0gc2VydmVyOwotCQkgIAlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkJCXsKLQkJICAJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJCXsKLQkJICAJCSAgCWZvciAoaW50IGk9MDtpPDEwMDA7aSsrKQotCQkgIAkJICAJewotCQkgIAkJICAJCWludCBtb2R1bGVTdGF0ZSA9IGN1cnJlbnRTZXJ2ZXIuZ2V0TW9kdWxlU3RhdGUobW9kdWxlcyk7Ci0JCSAgCQkgIAkJaWYgKG1vZHVsZVN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCB8fCBtb2R1bGVTdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQSU5HKQotCQkgIAkJICAJCXsKLQkJICAJCSAgCQkgIHRyeQotCQkgIAkJCQkgIHsKLQkJICAJCSAgCQkgICAgVGhyZWFkLnNsZWVwKDMwMCk7Ci0JCSAgCQkJCSAgfQotCQkgIAkJICAJCSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCSAgCQkJCSAgewotCQkgIAkJICAJCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotCQkgIAkJCQkgIH0KLQkJICAJCSAgCQl9Ci0JCSAgCQkgIAkJZWxzZQotCQkgIAkJICAJCQlicmVhazsKLQkJICAJCSAgCX0gIAkJCSAgCQkJCi0JCQkJfSAgCQkKLQkJCX07Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLGZhbHNlLHJ1bm5hYmxlKTsKLQkJCS8vVGhyZWFkLnNsZWVwKDYwMDApOwotCQkJcmV0dXJuIChzZXJ2ZXIuZ2V0TW9kdWxlcygpLmxlbmd0aCA9PSAobnVtYmVyT2ZNb2R1bGVzLTEpKTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCS8vIEJlZ2luOiBHZW5lcmFsIEVjbGlwc2UgVXRpbGl0aWVzCi0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHN5bmNCdWlsZFByb2plY3QoSVByb2plY3QgcHJvamVjdCxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuRlVMTF9CVUlMRCwgbW9uaXRvciApOwotCQlXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCBjbWQgPSBuZXcgV2FpdEZvckF1dG9CdWlsZENvbW1hbmQoKTsKLSAgICBjbWQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCQljbWQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHlUZXN0RmlsZXMoU3RyaW5nIHBhdGhTdHJpbmcsaW50IHJvb3RTZWdtZW50TGVuZ3RoLElGb2xkZXIgZGVzdEZvbGRlcixJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlFbnVtZXJhdGlvbiBlID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocGF0aFN0cmluZyk7Ci0JCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotCQl7Ci0JCQlTdHJpbmcgZmlsZVBhdGggPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLQkJCWlmIChmaWxlUGF0aC5lbmRzV2l0aCgiLyIpKQotCQkJCWNvcHlUZXN0RmlsZXMoZmlsZVBhdGgscm9vdFNlZ21lbnRMZW5ndGgsZGVzdEZvbGRlcixlbnYsIG1vbml0b3IgKTsKLQkJCWVsc2UKLQkJCXsKLQkJCQlJUGF0aCBmaWxlSVBhdGggPSBuZXcgUGF0aChmaWxlUGF0aCk7Ci0JCQkJRmlsZVJlc291cmNlVXRpbHMuY29weUZpbGUoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCksCi0JCQkJCQkJCQkJICAgZmlsZUlQYXRoLnJlbW92ZUxhc3RTZWdtZW50cyhmaWxlSVBhdGguc2VnbWVudENvdW50KCktcm9vdFNlZ21lbnRMZW5ndGgpLCAvLyAvZGF0YS88c3ViZGlyPgotCQkJCQkJCQkJCSAgIChuZXcgUGF0aChmaWxlUGF0aCkpLnJlbW92ZUZpcnN0U2VnbWVudHMocm9vdFNlZ21lbnRMZW5ndGgpLCAvLyBmaWxlcyBhZnRlciAvZGF0YS88c3ViZGlyPgotCQkJCQkJCQkJCSAgIGRlc3RGb2xkZXIuZ2V0RnVsbFBhdGgoKSwKLQkJCQkJCQkJCQkgICBtb25pdG9yLAotCQkJCQkJCQkJCSAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5VGVzdERhdGEoU3RyaW5nIGRhdGFTdWJkaXJlY3RvcnksSUZvbGRlciBkZXN0Rm9sZGVyLElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBwYXRoU3RyaW5nID0gIi9kYXRhLyIrZGF0YVN1YmRpcmVjdG9yeTsKLQkJY29weVRlc3RGaWxlcyhwYXRoU3RyaW5nLG5ldyBQYXRoKHBhdGhTdHJpbmcpLnNlZ21lbnRDb3VudCgpLGRlc3RGb2xkZXIsZW52LCBtb25pdG9yKTsKLQkJCi0JfQotCQotCS8vIEJlZ2luOiBXZWIgU2VydmljZXMgVXRpbGl0aWVzCi0JcHVibGljIHN0YXRpYyB2b2lkIGhpZGVBY3Rpb25EaWFsb2dzKCkKLQl7Ci0JCVBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBhY3Rpb25EaWFsb2dzQ3R4ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0JCUFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10gYWN0aW9uRGlhbG9nUHJlZnMgID0gYWN0aW9uRGlhbG9nc0N0eC5nZXREaWFsb2dzKCk7Ci0JCWZvciAoaW50IGk9MDtpPGFjdGlvbkRpYWxvZ1ByZWZzLmxlbmd0aDtpKyspCi0JCQlhY3Rpb25EaWFsb2dzQ3R4LnNldEFjdGlvbkRpYWxvZ0VuYWJsZWQoYWN0aW9uRGlhbG9nUHJlZnNbaV0uZ2V0SWQoKSx0cnVlKTsJCQotCX0KLQkKLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlbmFibGVQcm94eUdlbmVyYXRpb24oYm9vbGVhbiBlbmFibGUpCi0JewotCQlTY2VuYXJpb0NvbnRleHQgY3R4ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCQlib29sZWFuIHByZXZpb3VzU2V0dGluZyA9IGN0eC5nZXRHZW5lcmF0ZVByb3h5KCk7Ci0JCWN0eC5zZXRHZW5lcmF0ZVByb3h5KGVuYWJsZSk7Ci0JCXJldHVybiBwcmV2aW91c1NldHRpbmc7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlbmFibGVPdmVyd3JpdGUoYm9vbGVhbiBlbmFibGUpCi0JewotCQlSZXNvdXJjZUNvbnRleHQgY3R4ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotCQlib29sZWFuIHByZXZpb3VzU2V0dGluZyA9IGN0eC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpOwotCQljdHguc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGVuYWJsZSk7Ci0JCXJldHVybiBwcmV2aW91c1NldHRpbmc7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRSdW50aW1lUHJlZmVyZW5jZShTdHJpbmcgcnQpewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkJY29udGV4dC5zZXRSdW50aW1lSWQocnQpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVdTSURpYWxvZyhJUHJvamVjdCBwcm9qZWN0KXsKLQkgIAotCSAgUGVyc2lzdGVudFdTSUNvbnRleHQgY3R4ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKTsKLQkgIGN0eC51cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMocHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgCi0JICBQZXJzaXN0ZW50V1NJQ29udGV4dCBjdHgyID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpOwotCSAgY3R4Mi51cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMocHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRXU1J1bnRpbWVTZXJ2ZXIoU3RyaW5nIHdzUnVudGltZUlkLFN0cmluZyBzZXJ2ZXJUeXBlSWQpCi0JewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgc2VydmVyUnVudGltZUN0eCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkJc2VydmVyUnVudGltZUN0eC5zZXRSdW50aW1lSWQod3NSdW50aW1lSWQpOwotCQlzZXJ2ZXJSdW50aW1lQ3R4LnNldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJUeXBlSWQpOwkJCi0JfQotCQotCi0JcHJpdmF0ZSBzdGF0aWMgSVN0YXR1c1tdIGxhdW5jaFdpemFyZChTdHJpbmcgcGx1Z2luTlMsU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoKTsKLQotICAgICAgICBEeW5hbWljUG9wdXBKVW5pdFdpemFyZCB3aXphcmQgPSBuZXcgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQoc3RhdHVzSGFuZGxlcik7Ci0gICAgICAgIHdpemFyZC5zZXRJbml0aWFsRGF0YSh3aXphcmRJZCk7Ci0gICAgICAgIFByb2dyZXNzTW9uaXRvckRpYWxvZyBtb25pdG9yID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotICAgICAgICB0cnkgewotICAgICAgICAJd2l6YXJkLnJ1bkhlYWRMZXNzKGluaXRpYWxTZWxlY3Rpb24sIG1vbml0b3IpOwotICAgICAgICB9IAotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpewotICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgCXJldHVybiBuZXcgSVN0YXR1c1tde1N0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGUpfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RhdHVzSGFuZGxlci5nZXRBbGxSZXBvcnRzKCk7Ci0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoQ3JlYXRpb25XaXphcmQoU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsYXVuY2hXaXphcmQoIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIsd2l6YXJkSWQsb2JqZWN0Q2xhc3NJZCxpbml0aWFsU2VsZWN0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoQ29uc3VtcHRpb25XaXphcmQoU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsYXVuY2hXaXphcmQoIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aSIsd2l6YXJkSWQsb2JqZWN0Q2xhc3NJZCxpbml0aWFsU2VsZWN0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIGNyZWF0ZVdlYk1vZHVsZShTdHJpbmcgd2ViUHJvamVjdE5hbWUsIFN0cmluZyBtb2R1bGVOYW1lLCBTdHJpbmcgc2VydmVySW5zdGFuY2VJRCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgU3RyaW5nIGoyZWVWZXJzaW9uLCBJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKXsKLQotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgdHJ5ewotCSAgICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY3JlYXRlV2ViID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotCSAgICBjcmVhdGVXZWIuc2V0UHJvamVjdE5hbWUod2ViUHJvamVjdE5hbWUpOwotICAgICAgICBjcmVhdGVXZWIuc2V0UHJvamVjdE5hbWUobW9kdWxlTmFtZSk7Ci0gICAgICAgIGNyZWF0ZVdlYi5zZXRUZW1wbGF0ZUlkKCJ0ZW1wbGF0ZS5qc3Qud2ViIik7Ci0JICAgIGNyZWF0ZVdlYi5zZXRTZXJ2ZXJGYWN0b3J5SWQoc2VydmVyRmFjdG9yeUlkKTsKLQkgICAgY3JlYXRlV2ViLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVySW5zdGFuY2VJRCk7Ci0JICAgIGNyZWF0ZVdlYi5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMobmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uWzBdKTsKLSAgICAgICAgY3JlYXRlV2ViLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgICAgcmV0dXJuIGNyZWF0ZVdlYi5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpewotCSAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZSApOwotCSAgfQotCSAgcmV0dXJuIHN0YXR1czsKLQkgIAotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGlzYWJsZVZhbGlkYXRpb24oSVByb2plY3QgcHJvamVjdCl7Ci0JCQotICAgIAkvLyBkaXNhYmxlIHZhbGlkYXRvcnMgZm9yIHByb2plY3QKLQkJdHJ5Ci0JCXsKLQkJCVZhbGlkYXRvck1hbmFnZXIgdm0gPSBWYWxpZGF0b3JNYW5hZ2VyLmdldE1hbmFnZXIoKTsKLQkJCXZtLmRpc2FibGVBbGxWYWxpZGF0b3JzKHByb2plY3QsIG51bGwpOwkJCQotCQkJCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCB0byBzZXQgVmFsaWRhdG9ycy4uLiIpOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKSB7Ci0JCVBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IChQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KVdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLQkgICAgICBjb250ZXh0LnNldEdlbmVyYXRlUHJveHkoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRJbnN0YWxsV2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldEluc3RhbGxDbGllbnQoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldE1vbml0b3JXZWJTZXJ2aWNlKGZhbHNlKTsKLQkgICAgICBjb250ZXh0LnNldEdlbmVyYXRlV2ViU2VydmljZShTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUCk7ICAgIAotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q2xpZW50U2NlbmFyaW9EZWZhdWx0KCkgewotCQlQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSAoUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dClXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0JICAgICAgY29udGV4dC5zZXRHZW5lcmF0ZVByb3h5KCB0cnVlICk7Ci0JICAgICAgY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRJbnN0YWxsV2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldEluc3RhbGxDbGllbnQoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGZhbHNlICk7Ci0JICAgICAgY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldE1vbml0b3JXZWJTZXJ2aWNlKGZhbHNlKTsKLQkgICAgICBjb250ZXh0LnNldEdlbmVyYXRlQ2xpZW50KFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvU2NlbmFyaW9Db25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9TY2VuYXJpb0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTllNWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9TY2VuYXJpb0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsOwotCi1wdWJsaWMgY2xhc3MgU2NlbmFyaW9Db25zdGFudHMgewotCS8vIEJvdHRvbSB1cCBKYXZhIG9yIEVKQiB0byBXZWIgU2VydmljZSB3aXphcmQgSUQuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0laQVJESURfQk9UVE9NX1VQID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIjsKLQkKLQkvLyBUb3AgZG93biBXU0RMIHRvIFNrZWxldG9uIFdlYiBTZXJ2aWNlIHdpemFyZCBJRC4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSVpBUkRJRF9UT1BfRE9XTiA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI7Ci0JCi0JLy8gV2ViIFNlcnZpY2UgY2xpZW50IHdpemFyZCBJRC4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSVpBUkRJRF9DTElFTlQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIjsJCi0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvcjoKLQkvLyAxKSBKYXZhIHNvdXJjZSAoYm90dG9tLXVwKQotCS8vIDIpIFdTREwgb3IgV1NJTCAodG9wLWRvd24gb3IgY2xpZW50KS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfSUZJTEUgPSAib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgSmF2YSBjb21waWxhdGlvbiB1bml0cyAoaS5lLiBKYXZhIGNsYXNzZXMgc2VsZWN0ZWQgaW4gdGhlIEphdmEgcGVyc3BlY3RpdmUpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9DT01QSUxBVElPTlVOSVQgPSAib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuQ29tcGlsYXRpb25Vbml0IjsKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yIGEgc2VydmljZSBzZWxlY3RlZCBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSAodG9wLWRvd24gb3IgY2xpZW50KS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfU0VSVklDRUlNUEwgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIFdTRExSZXNvdXJjZUltcGwgKHRvcC1kb3duIG9yIGNsaWVudCkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX1dTRExTRVJWSUNFSU1QTCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUltcGwiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBTZXJ2aWNlUmVmICh0b3AtZG93biBvciBjbGllbnQpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9TRVJWSUNFUkVGID0gIm9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIFNlcnZpY2VJbXBsQmVhbiAoYm90dG9tLXVwKS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfU0VSVklDRUlNUExCRUFOID0gIm9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW4iOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBCZWFuTGluayAoYm90dG9tLXVwKS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfQkVBTkxJTksgPSAib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkJlYW5MaW5rIjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvV1NDdXN0b21BZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWI4NGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci0KLS8qKgotICogVGhlIFdTQ3VzdG9tQWRhcHRlckZhY3RvcnkgaXMgYW4gQWRhcHRlckZhY3Rvcnkgc2ltaWxhciB0byBvbmUgYW4gYWRvcHRlciB3b3VsZCBwcm92aWRlIHRvIGFkYXB0IGEgY3VzdG9tIG9iamVjdCAKLSAqIHRvIGEgV1NETCB1cmkgdGhhdCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgd291bGQgdGFrZSBhcyBpbnB1dC4gIFRoZSBTZXJ2bGV0IExpbmssIAotICogcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHVuZGVyIHRoZSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggb2YgdGhlIEoyRUUgUHJvamVjdCBFeHBsb3JlciwgaXMgCi0gKiB1c2VkIGFzIHRoZSAiY3VzdG9tIG9iamVjdCIgaW4gdGhpcyB0ZXN0LgotICoKLSAqLwotcHVibGljIGNsYXNzIFdTQ3VzdG9tQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBJQWRhcHRlckZhY3RvcnkgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3NbXSB0eXBlcyA9IHsKLQkJSUZpbGUuY2xhc3MsIFN0cmluZy5jbGFzcwotCX07Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5DbGFzcykKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKLQkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZsZXRMaW5rICYmICgoYWRhcHRlclR5cGUgPT0gSUZpbGUuY2xhc3MgKSB8fCAoYWRhcHRlclR5cGUgPT0gU3RyaW5nLmNsYXNzKSkpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0QWRhcHRlciBvbiAiK2FkYXB0YWJsZU9iamVjdC50b1N0cmluZygpKTsKLQkJCVNlcnZsZXRMaW5rIGJlYW5MaW5rID0gKFNlcnZsZXRMaW5rKSBhZGFwdGFibGVPYmplY3Q7Ci0KLQkJCUlGaWxlIHdzZGxGaWxlID0gZ2V0V1NETEZpbGUoYmVhbkxpbmspOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJ3c2RsRmlsZSA9ICIrd3NkbEZpbGUpOwotCQkJaWYgKGFkYXB0ZXJUeXBlID09IElGaWxlLmNsYXNzKSB7Ci0JCQkJcmV0dXJuIHdzZGxGaWxlOwotCQkJfSBlbHNlIAotCQkJCWlmIChhZGFwdGVyVHlwZSA9PSBTdHJpbmcuY2xhc3MpIHsKLQkJCQkJVVJJIHdzZGxVcmkgPSB3c2RsRmlsZS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQlTdHJpbmcgd3NkbEZpbGVTdHJpbmcgPSBudWxsOwotCQkJCQlpZiAod3NkbFVyaSAhPSBudWxsKSB7Ci0JCQkJCQl3c2RsRmlsZVN0cmluZyA9IHdzZGxVcmkudG9TdHJpbmcoKTsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigid3NkbEZpbGVTdHJpbmcgPSAiK3dzZGxGaWxlU3RyaW5nKTsKLQkJCQkJfQotCQkJCQlyZXR1cm4gd3NkbEZpbGVTdHJpbmc7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXJMaXN0KCkKLQkgKi8KLQlwdWJsaWMgQ2xhc3NbXSBnZXRBZGFwdGVyTGlzdCgpIHsKLQkJcmV0dXJuIHR5cGVzOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gYmVhbiBUaGUgU2VydmljZUltcGxCZWFuCi0JICogQHJldHVybiBUaGUgSUZpbGUgcmVwcmVzZW50aW5nIHRoZSBXU0RMIGZpbGUgZm9yIHRoaXMgU2VydmljZUltcGxCZWFuLgotCSAqLwotCXByaXZhdGUgSUZpbGUgZ2V0V1NETEZpbGUoU2VydmljZUltcGxCZWFuIGJlYW4pIHsKLQkJICBFT2JqZWN0IGVPYmplY3QgPSBiZWFuLmVDb250YWluZXIoKTsKLQkJICBpZiAoZU9iamVjdCA9PSBudWxsKQotCQkJICByZXR1cm4gbnVsbDsKLQkgICAgICAgICAgCi0JCSAgZU9iamVjdCA9IGVPYmplY3QuZUNvbnRhaW5lcigpOwotCSAgICAgIAotCQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgV2ViU2VydmljZURlc2NyaXB0aW9uKSB7Ci0JCQkgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c2QgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKSBlT2JqZWN0OwotCQkJICAKLQkJCSAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh3c2QpOyAgICAJICAKLQkgICAgCSAgCi0JCQkgIElQYXRoIHBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7ICAgIAkgCi0JCQkgIHBhdGggPSBwYXRoLmFwcGVuZCh3c2QuZ2V0V3NkbEZpbGUoKSk7IAotCQkJICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShwYXRoKTsgCSAgCi0JCQkgICAgICAJICAgIAotCQkgIH0KLQkJICByZXR1cm4gbnVsbDsKLQkgIH0KLQkgIAotCSAgLyoqCi0JICogQHBhcmFtIGxpbmsgVGhlIFNlcnZsZXRMaW5rCi0JICogQHJldHVybiBUaGUgSUZpbGUgcmVwcmVzZW50aW5nIHRoZSBXU0RMIGZpbGUgZm9yIHRoaXMgU2VydmxldExpbmsKLQkgKi8KLQlwcml2YXRlIElGaWxlIGdldFdTRExGaWxlKFNlcnZsZXRMaW5rIGxpbmspIHsKLQkJICBFT2JqZWN0IGVPYmplY3QgPSBsaW5rLmVDb250YWluZXIoKTsKLQkJICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLQkJCSAgcmV0dXJuIGdldFdTRExGaWxlKChTZXJ2aWNlSW1wbEJlYW4pIGVPYmplY3QpOwotCQkgIHJldHVybiBudWxsOwotCSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcyZWUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0Ly5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiM2UxYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTU2YTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0NCwKLSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3ksCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLAotIG9yZy5lY2xpcHNlLnVpCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlkM2RhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwKLXNyYy5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHNyYy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjI5MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1TZXJ2aWNlIHBvbGljeQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUyMTgzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0gIAotICA8IS0tIFdlIG5lZWQgdGhpcyBwbHVnaW4gdG8gYmUgbG9hZGVkIGF0IHN0YXJ0dXAgdGltZSBzbyB0aGF0IHRoZQotICAgICAgIFNlcnZpY2VQb2xpY3lQcm9wZXJ0eVRlc3RlciBjbGFzcyB3aWxsIGFsd2F5cyBiZSBsb2FkZWQuICBJZiB0aGlzIGlzCi0gICAgICAgbm90IGRvbmUgdGhlbiB0aGUgU2VydmljZSBQb2xpY3kgcHJvamVjdCBwcm9wZXJ0eSBwYWdlIHdpbGwgYXBwZWFyCi0gICAgICAgb24gYWxsIHByb2plY3QgcHJvcGVydHkgcGFnZXMgdW50aWwgdGhlIHBsdWdpbiBoYXMgYmVlbiBsb2FkZWQuIAotICAgICAgIC0tPgotICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIi8+Ci0gIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5wcm9wZXJ0eVRlc3RlcnMiPgotICAgIDxwcm9wZXJ0eVRlc3RlcgotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LnNlcnZpY2Uud3Muc2VydmljZS5wb2xpY3kuZm9vIgotICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiCi0gICAgICBuYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LnNlcnZpY2Uud3Muc2VydmljZS5wb2xpY3kuZm9vIgotICAgICAgcHJvcGVydGllcz0icHJvamVjdEhhc0ZPT2ZpbGVzIgotICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmludGVybmFsLnByb3BlcnRpZXMuRk9PRmlsZVByb3BlcnR5VGVzdGVyIj4KLSAgICA8L3Byb3BlcnR5VGVzdGVyPgotIAk8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5zZXJ2aWNlcG9saWN5Ij4KLSAgICAgPHNlcnZpY2VQb2xpY3k+Ci0gICAgICA8ZW5hYmxlbWVudD4KLSAgICAgICAgIDx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5zZXJ2aWNlLndzLnNlcnZpY2UucG9saWN5LmZvby5wcm9qZWN0SGFzRk9PZmlsZXMiLz4KLSAgICAgICA8L2VuYWJsZW1lbnQ+IAotICAgICAgIDxwb2xpY3kgcGFyZW50UG9saWN5SWQ9InNvbWVwYXJlbnQiIGlkPSJpZDEiIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIiBtdXRhYmxlPSJ0cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQxIHNob3J0TmFtZSIgZGVzY3JpcHRpb249ImlkMSBkZXNjcmlwdGlvbiIvPgotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4gb3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQyIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiBvcmcuZWNsaXBzZS53c3QuZXJyb3IiLz4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQzIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiIvPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDQiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5lcnJvciIvPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDIyIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybjIgb3JnLmVjbGlwc2Uud3N0LmVycm9yMiIvPgotICAJCQk8dGFyZ2V0UG9saWN5IGlkPSJpZF9ib29sZWFuMiIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0LmZhbHNlIi8+ICAKLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPgotICAgICAgICAgCi0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3QuaWdub3JlIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQzIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiBvcmcuZWNsaXBzZS53c3QuZXJyb3IiLz4KLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9InNvbWVwYXJlbnQiPgotICAgICAgICAgPGRlc2NyaXB0b3IgbG9uZ05hbWU9InBhcmVudCBsb25nbmFtZSIgLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZDIiIHBhcmVudFBvbGljeUlkPSJzb21lcGFyZW50IiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4iCi0gICAgICAgICAgICAgICAgICAgICAgICBtdXRhYmxlPSJ0cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQyIHNob3J0bmFtZSIgY29udGV4dEhlbHBJZD0ic29tZWNvbnRleHRpZC5BMDAxIi8+Ci0gICAgICAgICA8c3RhdGUga2V5PSJpZDJfa2V5IiB2YWx1ZT0iaWQyX3ZhbHVlIiAvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkMyIgcGFyZW50UG9saWN5SWQ9ImlkMiIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMyBzaG9ydCBuYW1lIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0iaWQ1IiBwYXJlbnRQb2xpY3lJZD0iaWQzIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQ1IHNob3J0IG5hbWUiLz4KLSAgICAgICAgIDxyZWxhdGlvbnNoaXAgZW51bUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQyIiAKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZSIvPgotICAgICAgICAgPC9yZWxhdGlvbnNoaXA+ICAKLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDYiIHBhcmVudFBvbGljeUlkPSJpZDUiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDYgc2hvcnQgbmFtZSIvPgotICAgICAgIDwvcG9saWN5PgotCi0gICAgICAgPHBvbGljeSBpZD0iaWQxMCIgcGFyZW50UG9saWN5SWQ9ImlkMjIiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDEwIHNob3J0IG5hbWUiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDExIiBwYXJlbnRQb2xpY3lJZD0iaWQxMCIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMTEgc2hvcnQgbmFtZSIvPgotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4iPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDIiIAotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3QuaWdub3JlIi8+Ci0gICAgICAgICA8L3JlbGF0aW9uc2hpcD4gIAotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9ImlkMTIiIHBhcmVudFBvbGljeUlkPSJpZDExIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQxMiBzaG9ydCBuYW1lIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWQ3IiBwYXJlbnRQb2xpY3lJZD0iaWQyIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQ3IHNob3J0IG5hbWUiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDgiIHBhcmVudFBvbGljeUlkPSJpZDciIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDggc2hvcnQgbmFtZSIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9ImlkOSIgcGFyZW50UG9saWN5SWQ9ImlkOCIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkOSBzaG9ydCBuYW1lIi8+Ci0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiI+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkMiIgCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiLz4KLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPiAgCi0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWQ0IiBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkNCBzaG9ydCBuYW1lIiBsb25nTmFtZT0iaWQ0IGxvbmcgbmFtZSIgLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZDIyIiBwYXJlbnRQb2xpY3lJZD0ic29tZXBhcmVudCIgCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bTIiCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3Qud2FybjIiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDIyIHNob3J0bmFtZSIgY29udGV4dEhlbHBJZD0ic29tZWNvbnRleHRpZC5BMDAxIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWRfYm9vbGVhbjEiIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5ib29sZWFuRW51bSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LnRydWUiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJib29sZWFuMSBzaG9ydCBuYW1lIiBsb25nTmFtZT0iYm9vbGVhbjEgbG9uZyBuYW1lIiAvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkX2Jvb2xlYW4yIiBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuYm9vbGVhbkVudW0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC50cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iYm9vbGVhbjIgc2hvcnQgbmFtZSIgbG9uZ05hbWU9ImJvb2xlYW4yIGxvbmcgbmFtZSIgLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtMiIgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUyIj4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3QuaWdub3JlMiIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iSUdOT1JFIFNIT1JUTkFNRTIiIGxvbmdOYW1lPSJJR05PUkUgTE9OR05BTUUyIiAvPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC53YXJuMiIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iV0FSTiBTSE9SVE5BTUUyIiBsb25nTmFtZT0iV0FSTiBMT05HTkFNRTIiIC8+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yMiIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iRVJST1IgU0hPUlROQU1FMiIgbG9uZ05hbWU9IkVSUk9SIExPTkdOQU1FMiIgLz4KLSAgICAgICA8L2VudW1lcmF0aW9uPiAKLSAgICAgICAKLSAgICAgPC9zZXJ2aWNlUG9saWN5PiAgICAgIAotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9saWN5dWkiPgotICAgICA8c2VydmljZVBvbGljeVVJPiAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLm9wZXJhdGlvbjEiIGRlZmF1bHRkYXRhPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkM3xpZDIiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5MSBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5MSBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIi8+Ci0gICAgICAgICA8ZW5hYmxlZCBtdWx0aXNlbGVjdD0idHJ1ZSIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkub3BlcmF0aW9uMiIgZGVmYXVsdGRhdGE9InRydWUiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWRcZC4qIiA+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTIgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTIgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIvPgotICAgICAgICAgPGVuYWJsZWQgbXVsdGlzZWxlY3Q9ImZhbHNlIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+IAotICAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkub3BlcmF0aW9uMyIgZGVmYXVsdGRhdGE9ImZhbHNlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkNCIgPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3kzIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3kzIGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLm9wZXJhdGlvbjQiIGRlZmF1bHRkYXRhPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkMXxpZDJ8aWQzIiA+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTQgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTQgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLm9wZXJhdGlvbjUiIGRlZmF1bHRkYXRhPSJmYWxzZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJpZDIyIiB3b3Jrc3BhY2VPbmx5PSJ0cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5NSBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5NSBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtMiIvPgotICAgICAgIDwvb3BlcmF0aW9uPiAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkuYm9vbGVhbi5vcGVyYXRpb24xIiBkZWZhdWx0ZGF0YT0iZmFsc2UiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWRfYm9vbC4qIiB3b3Jrc3BhY2VPbmx5PSJ0cnVlIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5MmIgYm9vbCBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5MmIgYm9vbCBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8c2VsZWN0aW9uLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLmJvb2xlYW4ub3BlcmF0aW9uMiIgZGVmYXVsdGRhdGE9InRydWUiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWRfYm9vbGVhbjIiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5MyBib29sIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3kzIGJvb2wgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPHNlbGVjdGlvbiBpY29uPSJ0cnVlIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5jb21wbGV4Lm9wZXJhdGlvbjEiIGRlZmF1bHRkYXRhPSJmYWxzZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJzb21lcGFyZW50fCBpZDQiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5NCBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5NCBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8Y29tcGxleCBsYXVuY2hDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuVGVzdExhdW5jaENsYXNzIi8+Ci0gICAgICAgICA8ZW5hYmxlZCBtdWx0aXNlbGVjdD0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgIGVuYWJsZWRDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuVGVzdEVuYWJsZWRDbGFzcyIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAgIAotICAgICAgIDxxdWlja0ZpeCBwbHVnaW5JZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QiCi0gICAgICAgICAgICAgICAgIGNvZGU9IjEiPgotICAgICAgICAgIDxhY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmFjdGlvbjEiPgotICAgICAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0icXVpY2sgZml4IDEgZm9yIGNvZGUgMSIvPgotICAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgIDxhY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmFjdGlvbjIiPgotICAgICAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0icXVpY2sgZml4IDIgZm9yIGNvZGUgMSIvPgotICAgICAgICAgIDwvYWN0aW9uPgotICAgICAgIDwvcXVpY2tGaXg+Ci0gICAgICAgCi0gICAgICAgPHF1aWNrRml4IHBsdWdpbklkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdCIKLSAgICAgICAgICAgICAgICAgY29kZT0iMiI+Ci0gICAgICAgICAgPGFjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuYWN0aW9uMyI+Ci0gICAgICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJxdWljayBmaXggMSBmb3IgY29kZSAyIi8+Ci0gICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgPC9xdWlja0ZpeD4KLSAgICAgPC9zZXJ2aWNlUG9saWN5VUk+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L01haW5UZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiOTAzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUFQQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lSZWxhdGlvbnNoaXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyOwotCi1AU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKSAvLyROT04tTkxTLTEkCi1wdWJsaWMgY2xhc3MgTWFpblRlc3RlciBleHRlbmRzIFRlc3RDYXNlCi17ICAKLSAgIAotICAgcHVibGljIHZvaWQgdGVzdEV4dGVuc2lvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgcG9saWN5TGlzdCA9IHBsYXRmb3JtLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIG51bGwgKTsKLSAgICAgCi0gICAgIGZvciggSVNlcnZpY2VQb2xpY3kgcG9saWN5IDogcG9saWN5TGlzdCApCi0gICAgIHsKLSAgICAgICBkaXNwbGF5UG9saWN5Tm9kZSggcG9saWN5ICk7Ci0gICAgIH0gICAKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09IEVudW1lcmF0aW9uczoiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlcnJvcldhcm5FbnVtID0gcGxhdGZvcm0uZ2V0U3RhdGVFbnVtZXJhdGlvbiggIm9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJFbnVtIGlkOiAiICsgIm9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIiApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgCi0gICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gOiBlcnJvcldhcm5FbnVtICkKLSAgICAgewotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgaWQ6ICIgKyBpdGVtLmdldElkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgc2hvcnRuYW1lOiAiICsgaXRlbS5nZXRTaG9ydE5hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBsb25nbmFtZTogIiArIGl0ZW0uZ2V0TG9uZ05hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBpc0RlZmF1bHQ6ICIgKyBpdGVtLmlzRGVmYXVsdCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgZGlzcGxheVBvbGljeU5vZGUoIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gICB7Ci0gICAgIElTZXJ2aWNlUG9saWN5IHBhcmVudFBvbGljeSA9IHBvbGljeS5nZXRQYXJlbnRQb2xpY3koKTsKLSAgICAgSURlc2NyaXB0b3IgICAgIGRlc2NyaXB0b3IgICA9IHBvbGljeS5nZXREZXNjcmlwdG9yKCk7Ci0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJGb3VuZCBwb2xpY3k6ICIgKyBwb2xpY3kuZ2V0SWQoKSArICIgcGFyZW50aWQ6IiArIChwYXJlbnRQb2xpY3kgPT0gbnVsbCA/ICJudWxsIiA6IHBhcmVudFBvbGljeS5nZXRJZCgpKSApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAKLSAgICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IHBvbGljeS5nZXRDaGlsZHJlbigpICkKLSAgICAgewotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgY2hpbGQgaWQ6ICIgKyBjaGlsZC5nZXRJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgICAKLSAgICAgTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiByZWxhdGlvbnNoaXBzID0gcG9saWN5LmdldFJlbGF0aW9uc2hpcHMoKTsKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggICIgIHJlbGF0aW9uc2hpcHM6IiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBmb3IoIElQb2xpY3lSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwIDogcmVsYXRpb25zaGlwcyApCi0gICAgIHsKLSAgICAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHNvdXJjZUxpc3QgICAgID0gcmVsYXRpb25zaGlwLmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpOwotICAgICAgIExpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gdGFyZ2V0TGlzdCAgICAgPSByZWxhdGlvbnNoaXAuZ2V0UmVsYXRlZFBvbGljaWVzKCk7Ci0gICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+ICBzb3VyY2VFbnVtTGlzdCA9IHNvdXJjZUxpc3QuZ2V0RW51bWVyYXRpb25MaXN0KCk7Ci0gICAgICAgCi0gICAgICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbSA6IHNvdXJjZUVudW1MaXN0ICkKLSAgICAgICB7Ci0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgIiArIGl0ZW0uZ2V0SWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgfQotICAgICAgIAotICAgICAgIGZvciggSVBvbGljeUVudW1lcmF0aW9uTGlzdCBwb2xpY3lFbnVtTGlzdCA6IHRhcmdldExpc3QgKQotICAgICAgIHsKLSAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lJZCAgICAgICA9IHBvbGljeUVudW1MaXN0LmdldFBvbGljeSgpLmdldElkKCk7Ci0gICAgICAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gdGFyZ2V0RW51bUxpc3QgPSBwb2xpY3lFbnVtTGlzdC5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLSAgICAgICAgIAotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgIHBvbGljeSBpZDogIiArIHBvbGljeUlkICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIAotICAgICAgICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gdGFyZ2V0SXRlbSA6IHRhcmdldEVudW1MaXN0ICkKLSAgICAgICAgIHsKLSAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgdGFyZ2V0IGVudW0gaWQ6ICIgKyB0YXJnZXRJdGVtLmdldElkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgfQotICAgICAgIH0KLSAgICAgfQotICAgICAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkRlc2NyaXB0b3I6IiApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgc2hvcnQgbmFtZTogIiArIGRlc2NyaXB0b3IuZ2V0U2hvcnROYW1lKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGxvbmcgbmFtZTogIiArIGRlc2NyaXB0b3IuZ2V0TG9uZ05hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgZGVzY3JpcHRpb246ICIgKyBkZXNjcmlwdG9yLmdldERlc2NyaXB0aW9uKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGNvbnRleHQgaGVscDogIiArIGRlc2NyaXB0b3IuZ2V0Q29udGV4dEhlbHBJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBpY29uIHBhdGg6ICIgKyBkZXNjcmlwdG9yLmdldEljb25QYXRoKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGljb24gcGF0aCBidW5kbGUgaWQ6ICIgKyBkZXNjcmlwdG9yLmdldEljb25CdW5kbGVJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiPT09IiApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IHBvbGljeS5nZXRDaGlsZHJlbigpICkKLSAgICAgewotICAgICAgIGRpc3BsYXlQb2xpY3lOb2RlKCBjaGlsZCApOwotICAgICB9ICAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RFbnVtZXJhdGlvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBpZDEgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQxIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBpZDIgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQyIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBpZDMgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQzIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lTdGF0ZUVudW0gICAgICBzdGF0ZTEgICAgPSBpZDEuZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gICAgIElQb2xpY3lTdGF0ZUVudW0gICAgICBzdGF0ZTIgICAgPSBpZDIuZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gICAgIElQb2xpY3lTdGF0ZUVudW0gICAgICBzdGF0ZTMgICAgPSBpZDMuZ2V0UG9saWN5U3RhdGVFbnVtKCk7Ci0gICAgIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtMSAgICAgPSBzdGF0ZTEuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0yICAgICA9IHN0YXRlMi5nZXRDdXJyZW50SXRlbSgpOwotICAgICBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbTMgICAgID0gc3RhdGUzLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiVW5leHBlY3RlZCBzaG9ydG5hbWU6IiArIGl0ZW0xLmdldFNob3J0TmFtZSgpLCBpdGVtMS5nZXRTaG9ydE5hbWUoKS5lcXVhbHMoICJpZ25vcmUiKSApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgYXNzZXJ0VHJ1ZSggIlVuZXhwZWN0ZWQgc2hvcnRuYW1lOiIgKyBpdGVtMi5nZXRTaG9ydE5hbWUoKSwgaXRlbTIuZ2V0U2hvcnROYW1lKCkuZXF1YWxzKCAid2FybiIpICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICBhc3NlcnRUcnVlKCAiVW5leHBlY3RlZCBzaG9ydG5hbWU6IiArIGl0ZW0zLmdldFNob3J0TmFtZSgpLCBpdGVtMy5nZXRTaG9ydE5hbWUoKS5lcXVhbHMoICJlcnJvciIpICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJpZDEgdmFsdWU6IiArIGl0ZW0xLmdldFNob3J0TmFtZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiaWQyIHZhbHVlOiIgKyBpdGVtMi5nZXRTaG9ydE5hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RQb2xpY3lTdGF0ZSgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIGlkMSAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeVN0YXRlRW51bSAgICAgIGVudW1TdGF0ZSA9IGlkMS5nZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgICAgSVN0YXRlRW51bWVyYXRpb25JdGVtIGVudW1JdGVtICA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICBTdHJpbmcgICAgICAgICAgICAgICAgaWdub3JlSWQgID0gIm9yZy5lY2xpcHNlLndzdC5pZ25vcmUiOyAvLyROT04tTkxTLTEkCi0gICAgIFN0cmluZyAgICAgICAgICAgICAgICB3YXJuSWQgICAgPSAib3JnLmVjbGlwc2Uud3N0Lndhcm4iOyAvLyROT04tTkxTLTEkCi0gICAgIFN0cmluZyAgICAgICAgICAgICAgICBlcnJvcklkICAgPSAib3JnLmVjbGlwc2Uud3N0LmVycm9yIjsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkRlZmF1bHQgZW51bSBub3Q6IiArIGlnbm9yZUlkLCBlbnVtSXRlbS5nZXRJZCgpLmVxdWFscyggaWdub3JlSWQgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBlbnVtU3RhdGUuc2V0Q3VycmVudEl0ZW0oIHdhcm5JZCApOwotICAgICBlbnVtSXRlbSA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIlVwZGF0ZWQgZW51bSBub3Q6IiArIHdhcm5JZCwgZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMoIHdhcm5JZCApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBsYXRmb3JtLmRpc2NhcmRDaGFuZ2VzKCk7Ci0gICAgIGVudW1JdGVtID0gZW51bVN0YXRlLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiRGlzY2FyZCBlbnVtIG5vdDoiICsgaWdub3JlSWQsIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBpZ25vcmVJZCApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGVudW1TdGF0ZS5zZXRDdXJyZW50SXRlbSggZXJyb3JJZCApOwotICAgICBlbnVtSXRlbSA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICBhc3NlcnRUcnVlKCAiRXJyb3IgZW51bSBub3Q6IiArIGVycm9ySWQsIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBlcnJvcklkICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcygpOwotICAgICBlbnVtSXRlbSA9IGVudW1TdGF0ZS5nZXRDdXJyZW50SXRlbSgpOwotICAgICBhc3NlcnRUcnVlKCAiRXJyb3IgZW51bSBub3Q6IiArIGVycm9ySWQsIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBlcnJvcklkICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcm9qZWN0UHJlZmVyZW5jZXMgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7Ci0gICAgIAotICAgICB0cnkKLSAgICAgewotICAgICAgIFN0cmluZ1tdICAgICAgICAgICAga2V5cyAgICAgICAgICAgICAgID0gcHJvamVjdFByZWZlcmVuY2VzLmtleXMoKTsKLSAgICAgCi0gICAgICAgZm9yKCBTdHJpbmcga2V5IDoga2V5cyApCi0gICAgICAgewotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiS2V5PSIgKyBrZXkgKyAiIHZhbHVlPSIgKyBwcm9qZWN0UHJlZmVyZW5jZXMuZ2V0KCBrZXksICIiICkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgIH0KLSAgICAgfQotICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgIHsKLSAgICAgICBhc3NlcnRUcnVlKCAiRXhjZXB0aW9uIHRocm93biIgKyBleGMuZ2V0TWVzc2FnZSgpLCBmYWxzZSApOyAvLyROT04tTkxTLTEkCi0gICAgIH0KLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdFVuaXF1ZUlkcygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIHBvbGljeSAgICA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJzb21laWQiLCBudWxsLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWVpZCIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwb2xpY3kgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAic29tZWlkIiwgbnVsbCwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWVpZDEiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWVpZCIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21laWQyIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBvbGljeSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJzb21laWQxIiwgbnVsbCwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWVpZDMiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWU1NWlkNSIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21lNTVpZDUiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWU1NWlkNSIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCBwb2xpY3kuZ2V0SWQoKS5lcXVhbHMoICJzb21lNTVpZDEiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgfQotIAotICAgCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHZvaWQgdGVzdE9sZFdTSUNvbnRleHQoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgcGxhdGZvcm0gICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgIGFwUG9saWN5ICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lhcCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5U3RhdGVFbnVtICAgICAgICAgYXBTdGF0ZSAgICAgPSBhcFBvbGljeS5nZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgIHNzYnBQb2xpY3kgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwIiApOyAvLyROT04tTkxTLTEkCi0gICAgIFBlcnNpc3RlbnRXU0lBUENvbnRleHQgICBhcENvbnRleHQgICA9IG5ldyBQZXJzaXN0ZW50V1NJQVBDb250ZXh0KCk7Ci0gICAgIFBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dCBzc2JwQ29udGV4dCA9IG5ldyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQoKTsKLSAgICAgSVdvcmtzcGFjZVJvb3QgICAgICAgICAgIHJvb3QgICAgICAgID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgSVByb2plY3QgICAgICAgICAgICAgICAgIHByb2plY3QgICAgID0gcm9vdC5nZXRQcm9qZWN0KCJUZXN0UHJvamVjdCIpOyAvLyROT04tTkxTLTEkCi0gICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICBpdGVtICAgICAgICA9IG51bGw7Ci0gICAgIAotICAgICB0cnkKLSAgICAgewotICAgICAgIHByb2plY3QuY3JlYXRlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICB9Ci0gICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgIHsKLSAgICAgICBhc3NlcnRUcnVlKCAiQ29yZSBleGNlcHRpb246IiArIGV4Yy5nZXRNZXNzYWdlKCksIGZhbHNlICk7ICAgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICAgIAotICAgICBJUG9saWN5U3RhdGVFbnVtICBhcFByb2pTdGF0ZSAgID0gYXBQb2xpY3kuZ2V0UG9saWN5U3RhdGVFbnVtKCBwcm9qZWN0ICk7Ci0gICAgIElQb2xpY3lTdGF0ZUVudW0gIHNzYnBQcm9qU3RhdGUgPSBzc2JwUG9saWN5LmdldFBvbGljeVN0YXRlRW51bSggcHJvamVjdCApOwotICAgICAKLSAgICAgLy8gRW5zdXJlIHRoYXQgcHJvamVjdCBwcmVmZXJlbmNlcyBhcmUgZ290dGVuIGZyb20gdGhlIHdvcmtzcGFjZQotICAgICBhcFN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcygpOwotICAgICBhcFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBpdGVtID0gYXBQcm9qU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKS5nZXRJZCgpOwotICAgICBhc3NlcnRUcnVlKCAiQXAgdmFsdWUgbm90IGlnbm9yZSwgYnV0IGdvdCAiICsgaXRlbSwgaXRlbS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgCi0gICAgIGFwU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcygpOwotICAgICBhcFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIiApOyAvLyROT04tTkxTLTEkCi0gICAgIGl0ZW0gPSBhcFByb2pTdGF0ZS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0gICAgIGFzc2VydFRydWUoICJBcCB2YWx1ZSBub3QgcmVxdWlyZSwgYnV0IGdvdCAiICsgaXRlbSwgaXRlbS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIAotICAgICBwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBwcm9qZWN0ICwgdHJ1ZSApOwotICAgICBpdGVtID0gYXBQcm9qU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKS5nZXRJZCgpOwotICAgICBhc3NlcnRUcnVlKCAiQXAgdmFsdWUgbm90IGluZ29yZSwgYnV0IGdvdCAiICsgaXRlbSwgaXRlbS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgCi0gICAgIHBsYXRmb3JtLmNvbW1pdENoYW5nZXMoIHByb2plY3QgKTsKLSAgICAgaXRlbSA9IGFwUHJvalN0YXRlLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIHZhbHVlIG5vdCBpbmdvcmUsIGJ1dCBnb3QgIiArIGl0ZW0sIGl0ZW0uZXF1YWxzKCJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIAotICAgICBTdHJpbmcgYXBDb250ZXh0VmFsdWUgPSBhcENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IGlnbm9yZSwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGFwU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcygpOwotICAgICBhcENvbnRleHRWYWx1ZSA9IGFwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICBhc3NlcnRUcnVlKCAiQXAgY29udGV4dCBub3QgaWdub3JlLCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggcHJvamVjdCwgZmFsc2UgKTsKLSAgICAgYXBDb250ZXh0VmFsdWUgPSBhcENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IGlnbm9yZSwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBhcFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBwbGF0Zm9ybS5jb21taXRDaGFuZ2VzKCBwcm9qZWN0ICk7Ci0gICAgIGFwQ29udGV4dFZhbHVlID0gYXBDb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKCBwcm9qZWN0ICk7Ci0gICAgIGFzc2VydFRydWUoICJBcCBjb250ZXh0IG5vdCBzdWdnZXN0LCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIHByb2plY3QsIHRydWUgKTsKLSAgICAgYXBDb250ZXh0VmFsdWUgPSBhcENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IHJlcXVpcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgc3NicFByb2pTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgU3RyaW5nIHNzYnBDb250ZXh0VmFsdWUgPSBzc2JwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IHJlcXVpcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiU1NCUCBjb250ZXh0IG5vdCBzdWdnZXN0LCBidXQgIiArIHNzYnBDb250ZXh0VmFsdWUsIHNzYnBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBzc2JwUHJvalN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBzc2JwQ29udGV4dFZhbHVlID0gc3NicENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IHJlcXVpcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiU1NCUCBjb250ZXh0IG5vdCByZXF1aXJlLCBidXQgIiArIHNzYnBDb250ZXh0VmFsdWUsIHNzYnBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0TXV0YWJsZSgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICBwbGF0Zm9ybSAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgYXBQb2xpY3kgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaWFwIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICBzc2JwUG9saWN5ICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3Npc3NicCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgd3NpUG9saWN5ICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiUm9vdCB3c2kgcG9saWN5IGlzIG11dGFibGUiLCAhd3NpUG9saWN5LmdldFBvbGljeVN0YXRlKCkuaXNNdXRhYmxlKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiQXAgcG9saWN5IGlzIG5vdCBtdXRhYmxlIiwgYXBQb2xpY3kuZ2V0UG9saWN5U3RhdGUoKS5pc011dGFibGUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoICJTU0JQIHBvbGljeSBpcyBub3QgbXV0YWJsZSIsIHNzYnBQb2xpY3kuZ2V0UG9saWN5U3RhdGUoKS5pc011dGFibGUoKSApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RDaGlsZENoYW5nZUxpc3RlbmVycygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBDaGlsZENoYW5nZUxpc3RlbmVyICAgbGlzdGVuZXIgPSBuZXcgQ2hpbGRDaGFuZ2VMaXN0ZW5lcigpOwotICAgICAKLSAgICAgcGxhdGZvcm0uYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lciwgZmFsc2UgKTsKLSAgICAgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgPSBmYWxzZTsKLSAgICAgbGlzdGVuZXIuaXNBZGRlZCA9IGZhbHNlOwotICAgICAKLSAgICAgSVNlcnZpY2VQb2xpY3kgcGFyZW50ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInBhcmVudF9pZDEiLCBudWxsLCBudWxsICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGNhbGxlZCIsIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgYWRkZWQiLCBsaXN0ZW5lci5pc0FkZGVkICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gZmFsc2U7Ci0gICAgIElTZXJ2aWNlUG9saWN5IGNoaWxkMSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIHBhcmVudCwgInBhcmVudF9pZDEiLCBudWxsLCBudWxsICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGNhbGxlZCIsIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgYWRkZWQiLCBsaXN0ZW5lci5pc0FkZGVkICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gZmFsc2U7Ci0gICAgIGxpc3RlbmVyLmNvdW50ICAgPSAwOwotICAgICBJU2VydmljZVBvbGljeSBjaGlsZDIgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBjaGlsZDEsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICBJU2VydmljZVBvbGljeSBjaGlsZDMgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBjaGlsZDIsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBjYWxsZWQiLCBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGFkZGVkIiwgbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY291bnQgbm90IDIiLCBsaXN0ZW5lci5jb3VudCA9PSAyICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gdHJ1ZTsKLSAgICAgbGlzdGVuZXIuY291bnQgICA9IDA7Ci0gICAgIAotICAgICBjaGlsZDIucmVtb3ZlQ2hpbGQoIGNoaWxkMyApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBjYWxsZWQiLCBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IHJlbW92ZWQiLCAhbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY291bnQgbm90IDEiLCBsaXN0ZW5lci5jb3VudCA9PSAxICk7Ci0gICAgIAotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOyAgIAotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gdHJ1ZTsKLSAgICAgbGlzdGVuZXIuY291bnQgICA9IDA7Ci0gICAgIAotICAgICAvLyBTaG91bGQgcmVtb3ZlIHBhcmVudCwgY2hpbGQxLCBhbmQgY2hpbGQyCi0gICAgIHBsYXRmb3JtLnJlbW92ZVNlcnZpY2VQb2xpY3koIHBhcmVudCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBjYWxsZWQiLCBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IHJlbW92ZWQiLCAhbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY291bnQgbm90IDMiLCBsaXN0ZW5lci5jb3VudCA9PSAzICk7Ci0gICAgIAotICAgICBwbGF0Zm9ybS5yZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyKCBsaXN0ZW5lciwgZmFsc2UgKTsKLSAgICAgCi0gICAgIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkID0gZmFsc2U7ICAgCi0gICAgIGxpc3RlbmVyLmlzQWRkZWQgPSB0cnVlOwotICAgICBsaXN0ZW5lci5jb3VudCAgID0gMDsKLSAgICAgCi0gICAgIHBhcmVudCA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICBjaGlsZDEgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBwYXJlbnQsICJwYXJlbnRfaWQxIiwgbnVsbCwgbnVsbCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIGNhbGxlZCIsICFsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgaXNhZGRlZCBjaGFuZ2VkIiwgbGlzdGVuZXIuaXNBZGRlZCApOwotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY291bnQgbm90IDAiLCBsaXN0ZW5lci5jb3VudCA9PSAwICk7Ci0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RTdGF0ZSgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgaWQyICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQyIiApOwotICAgICBTdHJpbmcgICAgICAgICAgICAgICAgdmFsdWUgICAgPSBpZDIuZ2V0UG9saWN5U3RhdGUoKS5nZXRWYWx1ZSggImlkMl9rZXkiICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiRXhwZWN0ZWQgc3RhdGUgdmFsdWUgdG8gYmUgaWQyX3ZhbHVlLiIsIHZhbHVlLmVxdWFscyggImlkMl92YWx1ZSIgKSApOwotICAgfQotICAgCi0gICBwcml2YXRlIGNsYXNzIENoaWxkQ2hhbmdlTGlzdGVuZXIgaW1wbGVtZW50cyBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcgotICAgewotICAgICBwdWJsaWMgYm9vbGVhbiBjaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOwotICAgICBwdWJsaWMgYm9vbGVhbiBpc0FkZGVkID0gZmFsc2U7Ci0gICAgIHB1YmxpYyBpbnQgICAgIGNvdW50ID0gMDs7Ci0gICAgIAotICAgICBwdWJsaWMgdm9pZCBjaGlsZENoYW5nZShMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGlsZExpc3QsIExpc3Q8Qm9vbGVhbj4gYWRkZWRMaXN0KQotICAgICB7Ci0gICAgICAgY2hpbGRFdmVudE9jY3VyZWQgPSB0cnVlOwotICAgICAgIGlzQWRkZWQgPSBhZGRlZExpc3QuZ2V0KDApOwotICAgICAgIGNvdW50Kys7Ci0gICAgIH0KLSAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9NYWluVUlUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9NYWluVUlUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JhZTU1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblVJVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUG9saWN5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlscy5BY3Rpdml0eVV0aWxzOwotCi1wdWJsaWMgY2xhc3MgTWFpblVJVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UKLXsgIAotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9ucygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIHBsYXRmb3JtVUkgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gIG9wZXJhdGlvbnMgICA9IHBsYXRmb3JtVUkuZ2V0QWxsT3BlcmF0aW9ucygpOwotICAgICAKLSAgICAgZm9yKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMgKQotICAgICB7Ci0gICAgICAgZGlzcGxheU9wZXJhdGlvbiggb3BlcmF0aW9uICk7Ci0gICAgIH0gIAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0T3BlcmF0aW9uQ2FjaGUoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICBwbGF0Zm9ybSAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIHBsYXRmb3JtVUkgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDEgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDIgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDMgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDQgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDFfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDFfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQxICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMSwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDJfaWQ0ICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkNCwgInNlcnZpY2UudWkub3BlcmF0aW9uMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDNfaWQ0ICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkNCwgInNlcnZpY2UudWkub3BlcmF0aW9uMyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQxICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMSwgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQyICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMiwgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDRfaWQzICAgID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb24oIGlkMywgInNlcnZpY2UudWkub3BlcmF0aW9uNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBsaXN0MSA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyggaWQxLCB0cnVlICk7Ci0gICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gbGlzdDIgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnMoIGlkMiwgdHJ1ZSApOwotICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGxpc3QzID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zKCBpZDMsIHRydWUgKTsKLSAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBsaXN0NCA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyggaWQ0LCB0cnVlICk7Ci0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcbkRpc3BsYXkgbGlzdHMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgZGlzcGxheUxpc3QoICJMaXN0MSIsIGxpc3QxICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgZGlzcGxheUxpc3QoICJMaXN0MiIsIGxpc3QyICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgZGlzcGxheUxpc3QoICJMaXN0MyIsIGxpc3QzICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgZGlzcGxheUxpc3QoICJMaXN0NCIsIGxpc3Q0ICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGNoZWNrQ29udGVudHMoICJMaXN0MSIsIGxpc3QxLCBuZXcgSVBvbGljeU9wZXJhdGlvbltdeyBvcDJfaWQxLCBvcDRfaWQxIH0gKTsgLy8kTk9OLU5MUy0xJAotICAgICBjaGVja0NvbnRlbnRzKCAiTGlzdDIiLCBsaXN0MiwgbmV3IElQb2xpY3lPcGVyYXRpb25bXXsgb3AxX2lkMiwgb3AyX2lkMiwgb3A0X2lkMiB9ICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgY2hlY2tDb250ZW50cyggIkxpc3QzIiwgbGlzdDMsIG5ldyBJUG9saWN5T3BlcmF0aW9uW117IG9wMV9pZDMsIG9wMl9pZDMsIG9wNF9pZDMgfSApOyAvLyROT04tTkxTLTEkCi0gICAgIGNoZWNrQ29udGVudHMoICJMaXN0NCIsIGxpc3Q0LCBuZXcgSVBvbGljeU9wZXJhdGlvbltdeyBvcDJfaWQ0LCBvcDNfaWQ0IH0gKTsgLy8kTk9OLU5MUy0xJAotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0RW5hYmxlZE9wZXJhdGlvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICBwbGF0Zm9ybSAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSBwbGF0Zm9ybVVJICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMSAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDIgICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQzICAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQzIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkNCAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkNCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICBwb2xpY3lMaXN0MSA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIHBvbGljeUxpc3QyID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AxICAgICAgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQ0LCAic2VydmljZS51aS5vcGVyYXRpb24zIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwb2xpY3lMaXN0MS5hZGQoIGlkMSApOwotICAgICBwb2xpY3lMaXN0MS5hZGQoIGlkMiApOwotICAgICBwb2xpY3lMaXN0MS5hZGQoIGlkMyApOwotICAgICBwb2xpY3lMaXN0MS5hZGQoIGlkNCApOwotICAgICBwb2xpY3lMaXN0Mi5hZGQoIGlkNCApOwotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkV4cGVjdGVkIG9wZXJhdGlvbiB0byBub3QgYmUgZW5hYmxlZCIsICFvcDEuaXNFbmFibGVkKCBwb2xpY3lMaXN0MSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggIkV4cGVjdGVkIG9wZXJhdGlvbiB0byBiZSBlbmFibGVkIiwgb3AxLmlzRW5hYmxlZCggcG9saWN5TGlzdDIgKSApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RRdWlja0ZpeEFjdGlvbnMoKQotICAgewotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gICAgICBwbGF0Zm9ybSAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSAgICBwbGF0Zm9ybVVJICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICAgIGlkMSAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU3RhdHVzICAgICAgICAgICAgICAgICAgICBzdGF0dXMxICAgICA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdCIsIDEsICJzb21lIGVycm9yIiwgbnVsbCApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgSVN0YXR1cyAgICAgICAgICAgICAgICAgICAgc3RhdHVzMiAgICAgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QiLCAyLCAic29tZSBlcnJvciIsIG51bGwgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gIGZpeExpc3QxICAgID0gcGxhdGZvcm1VSS5nZXRRdWlja0ZpeGVzKCBzdGF0dXMxICk7Ci0gICAgIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gIGZpeExpc3QyICAgID0gcGxhdGZvcm1VSS5nZXRRdWlja0ZpeGVzKCBzdGF0dXMyICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiRXhwZWN0aW5nIHR3byBxdWljayBmaXhlcyIsIGZpeExpc3QxLnNpemUoKSA9PSAyICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggIkV4cGVjdGlvbiBvbmUgcXVpY2sgZml4IiwgZml4TGlzdDIuc2l6ZSgpID09IDEgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZm9yKCBJUXVpY2tGaXhBY3Rpb25JbmZvIGFjdGlvbkluZm8gOiBmaXhMaXN0MSApCi0gICAgIHsKLSAgICAgICBJUXVpY2tGaXhBY3Rpb24gYWN0aW9uID0gYWN0aW9uSW5mby5nZXRBY3Rpb24oKTsKLSAgICAgICBpZDEuc2V0U3RhdHVzKCBzdGF0dXMxICk7Ci0gICAgICAgCi0gICAgICAgYXNzZXJ0VHJ1ZSggIlN0YXR1cyBpcyBub3QgT0siLCAhaWQxLmdldFN0YXR1cygpLmlzT0soKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgYWN0aW9uLmFjdGlvbiggaWQxICk7Ci0gICAgICAgYXNzZXJ0VHJ1ZSggIlN0YXR1cyBpcyBPayAiLCBpZDEuZ2V0U3RhdHVzKCkuaXNPSygpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgICAKLSAgICAgZm9yKCBJUXVpY2tGaXhBY3Rpb25JbmZvIGFjdGlvbkluZm8gOiBmaXhMaXN0MiApCi0gICAgIHsKLSAgICAgICBJUXVpY2tGaXhBY3Rpb24gYWN0aW9uID0gYWN0aW9uSW5mby5nZXRBY3Rpb24oKTsKLSAgICAgICBpZDEuc2V0U3RhdHVzKCBzdGF0dXMyICk7Ci0gICAgICAgCi0gICAgICAgYXNzZXJ0VHJ1ZSggIlN0YXR1cyBpcyBub3QgT0siLCAhaWQxLmdldFN0YXR1cygpLmlzT0soKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgYWN0aW9uLmFjdGlvbiggaWQxICk7Ci0gICAgICAgYXNzZXJ0VHJ1ZSggIlN0YXR1cyBpcyBPayAiLCBpZDEuZ2V0U3RhdHVzKCkuaXNPSygpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0QWN0aXZpdGllc0ZpbHRlcigpCi0gICB7Ci0gICAgIElGaWx0ZXIgICAgICAgICAgICAgICAgICAgIGFjdGl2aXRpZXNGaWx0ZXIgPSBBY3Rpdml0eVV0aWxzLmdldEN1cnJlbnRBY3Rpdml0aWVzRmlsdGVyKCk7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICAgIHBsYXRmb3JtICAgICAgICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgICAgcG9saWN5TGlzdCAgICAgICA9IHBsYXRmb3JtLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIGFjdGl2aXRpZXNGaWx0ZXIgKTsKLSAgICAgICAgIAotICAgICBkaXNwbGF5UG9saWNpZXMoIHBvbGljeUxpc3QgKTsKLSAgIH0KLSAgIAotICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRPcGVyYXRpb25zTGlzdCgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgIHBsYXRmb3JtICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgcGxhdGZvcm1VSSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMSAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQxIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMiAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQyIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMyAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQzIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkNCAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQ0IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMV9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb24xIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMV9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb24xIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDEgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQxLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDQgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQ0LCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wM19pZDQgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQ0LCAic2VydmljZS51aS5vcGVyYXRpb24zIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDEgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQxLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIGlkTGlzdDEgICAgPSBudWxsOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICBpZExpc3QyICAgID0gbnVsbDsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgaWRMaXN0MyAgICA9IG51bGw7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIGlkTGlzdDQgICAgPSBudWxsOwotICAgICAKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBjaGVja0xpc3QxID0gbnVsbDsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBjaGVja0xpc3QyID0gbnVsbDsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBjaGVja0xpc3QzID0gbnVsbDsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBjaGVja0xpc3Q0ID0gbnVsbDsKLSAgICAgCi0gICAgIGNoZWNrTGlzdDEgPSBsbCggbChvcDJfaWQxKSwgbChvcDRfaWQxKSApOwotICAgICBjaGVja0xpc3QyID0gbGwoIGwob3AxX2lkMiksIGwob3AyX2lkMSwgb3AyX2lkMiksIGwob3A0X2lkMSwgb3A0X2lkMikgKTsKLSAgICAgY2hlY2tMaXN0MyA9IGxsKCBsKG9wMV9pZDIsIG9wMV9pZDMpLCBsKG9wMl9pZDEsIG9wMl9pZDIsIG9wMl9pZDMpLCBsKG9wNF9pZDEsIG9wNF9pZDIsIG9wNF9pZDMpICk7Ci0gICAgIGNoZWNrTGlzdDQgPSBsbCggbChvcDFfaWQyLCBvcDFfaWQzKSwgbChvcDJfaWQxLCBvcDJfaWQyLCBvcDJfaWQzLCBvcDJfaWQ0KSwgbChvcDNfaWQ0KSwgbChvcDRfaWQxLCBvcDRfaWQyLCBvcDRfaWQzKSApOwotICAgICAKLSAgICAgaWRMaXN0MSA9IEFycmF5cy5hc0xpc3QoIG5ldyBJU2VydmljZVBvbGljeVtdeyBpZDEgfSApOwotICAgICBpZExpc3QyID0gQXJyYXlzLmFzTGlzdCggbmV3IElTZXJ2aWNlUG9saWN5W117IGlkMSwgaWQyIH0gKTsKLSAgICAgaWRMaXN0MyA9IEFycmF5cy5hc0xpc3QoIG5ldyBJU2VydmljZVBvbGljeVtdeyBpZDEsIGlkMiwgaWQzIH0gKTsKLSAgICAgaWRMaXN0NCA9IEFycmF5cy5hc0xpc3QoIG5ldyBJU2VydmljZVBvbGljeVtdeyBpZDEsIGlkMiwgaWQzLCBpZDQgfSApOwotICAgICAKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBvcExpc3QxID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zTGlzdCggaWRMaXN0MSwgdHJ1ZSApOwotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IG9wTGlzdDIgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnNMaXN0KCBpZExpc3QyLCB0cnVlICk7Ci0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gb3BMaXN0MyA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0xpc3QoIGlkTGlzdDMsIHRydWUgKTsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBvcExpc3Q0ID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zTGlzdCggaWRMaXN0NCwgdHJ1ZSApOwotICAgICAKLSAgICAgdmVyaWZ5TGlzdHMoICJMaXN0MSIsIG9wTGlzdDEsIGNoZWNrTGlzdDEgKTsKLSAgICAgdmVyaWZ5TGlzdHMoICJMaXN0MiIsIG9wTGlzdDIsIGNoZWNrTGlzdDIgKTsKLSAgICAgdmVyaWZ5TGlzdHMoICJMaXN0MyIsIG9wTGlzdDMsIGNoZWNrTGlzdDMgKTsKLSAgICAgdmVyaWZ5TGlzdHMoICJMaXN0NCIsIG9wTGlzdDQsIGNoZWNrTGlzdDQgKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGxsKCBMaXN0PElQb2xpY3lPcGVyYXRpb24+Li4uIG9wTGlzdCApCi0gICB7Ci0gICAgIHJldHVybiBBcnJheXMuYXNMaXN0KCBvcExpc3QgKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGwoIElQb2xpY3lPcGVyYXRpb24uLi4gb3BMaXN0ICkKLSAgIHsKLSAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoIG9wTGlzdCApOwotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgdmVyaWZ5TGlzdHMoIFN0cmluZyBsaXN0TmFtZSwgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBsaXN0MSwgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBsaXN0MiApCi0gICB7Ci0gICAgIGFzc2VydFRydWUoIGxpc3ROYW1lICsgIiBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHNpemUuIiwgbGlzdDEuc2l6ZSgpID09IGxpc3QyLnNpemUoKSApOwotICAgICAgICAgICAgIAotICAgICBmb3IoIGludCBsaXN0SW5kZXggPSAwIDsgbGlzdEluZGV4IDwgbGlzdDEuc2l6ZSgpOyBsaXN0SW5kZXgrKyApCi0gICAgIHsKLSAgICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeUxpc3QxID0gbGlzdDEuZ2V0KCBsaXN0SW5kZXggKTsKLSAgICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeUxpc3QyID0gZmluZExpc3QoIHBvbGljeUxpc3QxLmdldCgwKS5nZXRJZCgpLCBsaXN0MiApOwotICAgICAgIAotICAgICAgIGFzc2VydFRydWUoIGxpc3ROYW1lICsgIiBuZXN0ZWQgbGlzdCBhdCBpbmRleCAiICsgbGlzdEluZGV4ICsgIiBpcyBub3QgdGhlIHNhbWUgc2l6ZS4iLCBwb2xpY3lMaXN0MS5zaXplKCkgPT0gcG9saWN5TGlzdDIuc2l6ZSgpICk7Ci0gICAgICAgCi0gICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBvbGljeUxpc3QxLnNpemUoKTsgaW5kZXgrKyApCi0gICAgICAgewotICAgICAgICAgSVBvbGljeU9wZXJhdGlvbiBvcDEgPSBwb2xpY3lMaXN0MS5nZXQoIGluZGV4ICk7Ci0gICAgICAgICAKLSAgICAgICAgIGFzc2VydFRydWUoIGxpc3ROYW1lICsgIiBvcGVyYXRpb24gbm90IGZvdW5kIiwgZmluZE9wKCBvcDEsIHBvbGljeUxpc3QyICkgKTsKLSAgICAgICB9Ci0gICAgIH0gIAotICAgfQotICAKLSAgIHByaXZhdGUgYm9vbGVhbiBmaW5kT3AoIElQb2xpY3lPcGVyYXRpb24gb3AsIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gbGlzdCApCi0gICB7Ci0gICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgIAotICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gZm91bmRPcCA6IGxpc3QgKQotICAgICB7Ci0gICAgICAgaWYoIG9wID09IGZvdW5kT3AgKQotICAgICAgIHsKLSAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICBicmVhazsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgCi0gICAgIHJldHVybiByZXN1bHQ7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBmaW5kTGlzdCggU3RyaW5nIGlkLCBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IHNlYXJjaExpc3QgKQotICAgewotICAgICBmb3IoIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5TGlzdCA6IHNlYXJjaExpc3QgKQotICAgICB7Ci0gICAgICAgaWYoIHBvbGljeUxpc3QuZ2V0KDApLmdldElkKCkuZXF1YWxzKCBpZCApICkKLSAgICAgICB7Ci0gICAgICAgICByZXR1cm4gcG9saWN5TGlzdDsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJMaXN0IG5vdCBmb3VuZCBmb3IgaWQiICsgaWQsIGZhbHNlICk7Ci0gICAgIHJldHVybiBudWxsOwotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgZGlzcGxheVBvbGljaWVzKCBMaXN0PElTZXJ2aWNlUG9saWN5PiBwb2xpY3lMaXN0ICkKLSAgIHsKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiTGlzdGluZyBzZXJ2aWNlIHBvbGljaWVzOiIgKTsKLSAgICAgZm9yKCBJU2VydmljZVBvbGljeSBwb2xpY3kgOiBwb2xpY3lMaXN0ICkKLSAgICAgewotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgIiArIHBvbGljeS5nZXRJZCgpICk7Ci0gICAgIH0KLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIGRpc3BsYXlMaXN0KCBTdHJpbmcgc2V0TmFtZSwgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBvcGVyYXRpb25MaXN0ICkKLSAgIHsKLSAgICAgU3lzdGVtLm91dC5wcmludCggc2V0TmFtZSArICI6ICIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZm9yKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiA6IG9wZXJhdGlvbkxpc3QgKQotICAgICB7Ci0gICAgICAgU3lzdGVtLm91dC5wcmludCggb3BlcmF0aW9uLmdldElkKCkgKyAiLCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICAgIAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIiICk7IC8vJE5PTi1OTFMtMSQKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIGNoZWNrQ29udGVudHMoIFN0cmluZyBzZXROYW1lLCBMaXN0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvblNldCwgSVBvbGljeU9wZXJhdGlvbltdIG9wZXJhdGlvbkFycmF5ICkKLSAgIHsKLSAgICAgYXNzZXJ0VHJ1ZSggIlNldCBhbmQgYXJyYXkgc2l6ZXMgZG9uJ3QgbWF0Y2ggZm9yICIgKyBzZXROYW1lICsgIi4iLCBvcGVyYXRpb25TZXQuc2l6ZSgpID09IG9wZXJhdGlvbkFycmF5Lmxlbmd0aCApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogb3BlcmF0aW9uQXJyYXkgKQotICAgICB7Ci0gICAgICAgYXNzZXJ0VHJ1ZSggc2V0TmFtZSArICIgZG9lcyBub3QgY29udGFpbiBvcGVyYXRpb24gIiArIG9wZXJhdGlvbi5nZXRJZCgpICsgIi4iLCBvcGVyYXRpb25TZXQuY29udGFpbnMoIG9wZXJhdGlvbiApICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICB9Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBkaXNwbGF5T3BlcmF0aW9uKCBJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbiApCi0gICB7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHplcm9Qb2xpY2llcyA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+IG1hbnlQb2xpY2llcyA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpLmdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIG51bGwgKTsKLSAgICAgSURlc2NyaXB0b3IgICAgICAgICAgIGRlc2NyaXB0b3IgICA9IG9wZXJhdGlvbi5nZXREZXNjcmlwdG9yKCk7Ci0gICAgIFN0cmluZyAgICAgICAgICAgICAgIHNob3J0TmFtZSAgICA9IGRlc2NyaXB0b3IuZ2V0U2hvcnROYW1lKCk7Ci0gICAgIFN0cmluZyAgICAgICAgICAgICAgIGxvbmdOYW1lICAgICA9IGRlc2NyaXB0b3IuZ2V0TG9uZ05hbWUoKTsKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIk9wZXJhdGlvbiBpZDogIiArIG9wZXJhdGlvbi5nZXRJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIHNob3J0IG5hbWU6ICIgKyBzaG9ydE5hbWUgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgbG9uZyBuYW1lOiAiICsgbG9uZ05hbWUgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgcGF0dGVybjogIiArIG9wZXJhdGlvbi5nZXRQb2xpY3lJZFBhdHRlcm4oKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBpc0VuYWJsZWQgemVybzogIiArIG9wZXJhdGlvbi5pc0VuYWJsZWQoIHplcm9Qb2xpY2llcyApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIGlzRW5hYmxlZCBtYW55OiAiICsgb3BlcmF0aW9uLmlzRW5hYmxlZCggbWFueVBvbGljaWVzICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgc3dpdGNoKCBvcGVyYXRpb24uZ2V0T3BlcmF0aW9uS2luZCgpICkKLSAgICAgewotICAgICAgIGNhc2Ugc2VsZWN0aW9uOgotICAgICAgIHsKLSAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBzZWxlY3Rpb246IHRydWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgfQotICAgICAgIAotICAgICAgIGNhc2UgaWNvblNlbGVjdGlvbjoKLSAgICAgICB7Ci0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgc2VsZWN0aW9uIGljb246IHRydWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgfQotICAgICAgIAotICAgICAgIGNhc2UgZW51bWVyYXRpb246Ci0gICAgICAgeyAgICAgIAotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIGVudW1lcmF0aW9uIGlkOiAiICsgb3BlcmF0aW9uLmdldEVudW1lcmF0aW9uSWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICBicmVhazsgIAotICAgICAgIH0KLSAgICAgICAKLSAgICAgICBjYXNlIGNvbXBsZXg6Ci0gICAgICAgewotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIGNvbXBsZXg6IHRydWUiICk7ICAvLyROT04tTkxTLTEkCi0gICAgICAgICBvcGVyYXRpb24ubGF1bmNoT3BlcmF0aW9uKCB6ZXJvUG9saWNpZXMgKTsKLSAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWZjZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1NlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiBpbXBsZW1lbnRzIElTdGFydHVwIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS50ZXN0IjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIFNlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvciBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIFNlcnZpY2VQb2xpY3l0VGVzdEFjdGl2YXRvcigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCQotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCBtZXNzYWdlLCBleGMgKTsKLSAgICAKLSAgICBnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpCi0gIHsKLSAgICAvLyBETyBub3RoaW5nLiAgQWxsIHdlIHdhbnQgdG8gZG8gaXMgZ2V0IHRoZSBwbHVnaW4gbG9hZGVkIGF0IFVJIHN0YXJ0IHRpbWUuCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0RW5hYmxlZENsYXNzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvVGVzdEVuYWJsZWRDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmI4ZDMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0RW5hYmxlZENsYXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklFbmFibGVPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0RW5hYmxlZENsYXNzIGltcGxlbWVudHMgSUVuYWJsZU9wZXJhdGlvbgotewotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZChMaXN0PElTZXJ2aWNlUG9saWN5PiBzZWxlY3RlZFBvbGljaWVzKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIElzIGVuYWJsZWQgb3BlcmF0aW9uIGNhbGxlZC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1Rlc3RMYXVuY2hDbGFzcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1Rlc3RMYXVuY2hDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Nzk0NWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0TGF1bmNoQ2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUxhdW5jaE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RMYXVuY2hDbGFzcyBpbXBsZW1lbnRzIElMYXVuY2hPcGVyYXRpb24KLXsKLQotICBwdWJsaWMgdm9pZCBsYXVuY2goTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcykKLSAgewotICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBMYXVuY2ggY2xhc3MgY2FsbGVkLiIgKTsgLy8kTk9OLU5MUy0xJAotICB9ICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24xLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGMzNGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24xLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgYWN0aW9uMSBpbXBsZW1lbnRzIElRdWlja0ZpeEFjdGlvbgotewotCi0gIHB1YmxpYyB2b2lkIGFjdGlvbihJU2VydmljZVBvbGljeSBwb2xpY3kpCi0gIHsKLSAgICBwb2xpY3kuc2V0U3RhdHVzKCBTdGF0dXMuT0tfU1RBVFVTICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTNlODU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgYWN0aW9uMiBpbXBsZW1lbnRzIElRdWlja0ZpeEFjdGlvbgotewotCi0gIHB1YmxpYyB2b2lkIGFjdGlvbihJU2VydmljZVBvbGljeSBwb2xpY3kpCi0gIHsKLSAgICBwb2xpY3kuc2V0U3RhdHVzKCBTdGF0dXMuT0tfU1RBVFVTICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24zLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvYWN0aW9uMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQ5NzdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgYWN0aW9uMyBpbXBsZW1lbnRzIElRdWlja0ZpeEFjdGlvbgotewotCi0gIHB1YmxpYyB2b2lkIGFjdGlvbihJU2VydmljZVBvbGljeSBwb2xpY3kpCi0gIHsKLSAgICBwb2xpY3kuc2V0U3RhdHVzKCBTdGF0dXMuT0tfU1RBVFVTICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9pbnRlcm5hbC9wcm9wZXJ0aWVzL0ZPT0ZpbGVQcm9wZXJ0eVRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2ludGVybmFsL3Byb3BlcnRpZXMvRk9PRmlsZVByb3BlcnR5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ODNlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2ludGVybmFsL3Byb3BlcnRpZXMvRk9PRmlsZVByb3BlcnR5VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LmludGVybmFsLnByb3BlcnRpZXM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuUHJvcGVydHlUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBGT09GaWxlUHJvcGVydHlUZXN0ZXIgZXh0ZW5kcyBQcm9wZXJ0eVRlc3RlcgotewotICBwdWJsaWMgYm9vbGVhbiB0ZXN0KE9iamVjdCByZWNlaXZlciwgU3RyaW5nIHByb3BlcnR5LCBPYmplY3RbXSBhcmdzLCBPYmplY3QgZXhwZWN0ZWRWYWx1ZSkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYoIHJlY2VpdmVyIGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLSAgICB7Ci0gICAgICByZXN1bHQgPSBoYXNGT09maWxlKCAoSUNvbnRhaW5lcikgcmVjZWl2ZXIgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0ZPT2ZpbGUoIElDb250YWluZXIgY29udGFpbmVyICkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ICAgPSBmYWxzZTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2VbXSBjaGlsZHJlbiA9IGNvbnRhaW5lci5tZW1iZXJzKCk7Ci0gICAgICAKLSAgICAgIGZvciggSVJlc291cmNlIGNoaWxkIDogY2hpbGRyZW4gKQotICAgICAgewotICAgICAgICBpZiggY2hpbGQgaW5zdGFuY2VvZiBJQ29udGFpbmVyICkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGhhc0ZPT2ZpbGUoIChJQ29udGFpbmVyKSBjaGlsZCApOwotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIGNoaWxkIGluc3RhbmNlb2YgSUZpbGUgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gY2hpbGQuZ2V0RmlsZUV4dGVuc2lvbigpLmVxdWFsc0lnbm9yZUNhc2UoICJmb28iICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGZvdW5kIGEgc2luZ2xlIGZvbyBmaWxlIHdlIHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgotICAgICAgICBpZiggcmVzdWx0ICkgYnJlYWs7Ci0gICAgICB9ICAgIAotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIC8vIElnbm9yZSBleGNlcHRpb24gYW5kIHJldHVybiBmYWxzZS4gIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5OGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc5NjhiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi10ZXN0cy5qYXIKLWphdmFDb21waWxlci50ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWYyYmNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53cy50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZkMTA0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mjk6MTQgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllODdhOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jTW9uIEFwciAyNCAxMDoyNzo1NCBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MQotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxZGQ3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMS5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLAotIG9yZy5lY2xpcHNlLmplbS51dGlsLAotIG9yZy5lY2xpcHNlLmpmYWNlLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC53cy51aSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudCwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cCwKLSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMuZGF0YSwKLSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMucGx1Z2luLAotIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdCwKLSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHMKLUJ1bmRsZS1DbGFzc1BhdGg6IHRlc3RzLmphcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMWI5MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBkYXRhLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHJlYWRtZS50eHQsXAotICAgICAgICAgICAgICAgdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB0ZXN0cy5qYXIKLXNvdXJjZS50ZXN0cy5qYXIgPSB0ZXN0cy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS9sb2NhdG9yL3Rlc3Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL2xvY2F0b3IvdGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmQzMWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL2xvY2F0b3IvdGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkFyZWFTZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDpmbG9hdCIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InRuczpkaW1lbnNpb25zIi8+Ci0gICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImRpbWVuc2lvbnMiPgotICAgICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ3aWR0aCIgdHlwZT0ieHNkOmZsb2F0Ij48L3hzZDplbGVtZW50PgotICAgICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iaGVpZ2h0IiB0eXBlPSJ4c2Q6ZmxvYXQiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IkNhbGN1bGF0ZVJlY3RBcmVhUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOmFyZWEiIG5hbWU9ImFyZWEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iQ2FsY3VsYXRlUmVjdEFyZWFSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpwYXJhbWV0ZXJzIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBcmVhU2VydmljZSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9IkNhbGN1bGF0ZVJlY3RBcmVhIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpDYWxjdWxhdGVSZWN0QXJlYVJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Q2FsY3VsYXRlUmVjdEFyZWFSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBcmVhU2VydmljZVNPQVAiIHR5cGU9InRuczpBcmVhU2VydmljZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9IkNhbGN1bGF0ZVJlY3RBcmVhIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQXJlYVNlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkFyZWFTZXJ2aWNlU09BUCIgbmFtZT0iQXJlYVNlcnZpY2VTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yLzMvdGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzIvMy90ZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZDYyYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzIvMy90ZXN0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6dGVzdD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0LyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0eHNkPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QiCi0JeG1sbnM6dHhzZDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZDIiPgotCi0JPHdzZGw6dHlwZXM+Ci0JCTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAJCSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkMiIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vLi4vMmEvdGVzdC54c2QiIC8+Ci0JCQk8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkIgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi8uLi8uLi90ZXN0LnhzZCIgLz4KLQkJPC9zY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iaW5wdXQiIGVsZW1lbnQ9InR4c2Q6VGVzdFN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ib3V0cHV0IiBlbGVtZW50PSJ0eHNkMjpUZXN0U3RyaW5nMiI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iVGVzdFBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0ZXN0Ok5ld09wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0ZXN0Ok5ld09wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9Ik5ld0JpbmRpbmciIHR5cGU9InRlc3Q6VGVzdFBvcnRUeXBlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3QvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3N0YXJ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvc3RhcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2MjdiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvc3RhcnQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucwotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zdGFydC8iCQkKLQl4bWxuczp0ZXN0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3QvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCSAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0KLQk8d3NkbDppbXBvcnQgbG9jYXRpb249Ii4uLzIvMy90ZXN0LndzZGwiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0LyIvPgotCQotCTx3c2RsOnR5cGVzPgotCQk8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkIgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi8uLi90ZXN0LnhzZCIgLz4KLQkJPC9zY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCQotCTx3c2RsOnNlcnZpY2UgbmFtZT0iU3RhcnQiPgotCQk8d3NkbDpwb3J0IG5hbWU9Ik5ld1BvcnQiIGJpbmRpbmc9InRlc3Q6TmV3QmluZGluZyI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyI+PC9zb2FwOmFkZHJlc3M+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotCQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3Rlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3Rlc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjZmZmUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS90ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgCi0JeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkMiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iVGVzdFN0cmluZzIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyL3Rlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci90ZXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFlNjQ2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyL3Rlc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSAKLQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QiIAotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8ZWxlbWVudCBuYW1lPSJUZXN0U3RyaW5nIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyMGZiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzM2VjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA0MjQgICAxMzgwNjAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V1NUIFdlYiBTZXJ2aWNlcyBUZXN0Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTI5YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLmNvbnRyaWJ1dGlvbjEiPgotICAgICAgICAgPG1lbnUKLSAgICAgICAgICAgICAgIGxhYmVsPSJQb3B1cCB0ZXN0IG1lbnUiCi0gICAgICAgICAgICAgICBwYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAubWVudTEiPgotICAgICAgICAgICAgPHNlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgbmFtZT0iZ3JvdXAxIj4KLSAgICAgICAgICAgIDwvc2VwYXJhdG9yPgotICAgICAgICAgPC9tZW51PgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IlBvcHVwIHRlc3QgYWN0aW9uIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLk5ld0FjdGlvbiIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5tZW51MS9ncm91cDEiCi0gICAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLm5ld0FjdGlvbiI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+Ci0gICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9yZWFkbWUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZGUwMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLUN1cnJlbnRseSBubyBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIGluLiAgU2VlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cyBmb3IgYWRkaW5nCi1hcmd1bWVudHMgd2hlbiBydW5uaW5nIHRlc3Qgc3VpdGUgKGkuZS4gc2VydmVyIGluc3RhbGwgbG9jYXRpb24uLi4pCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOTFhY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPCEtLSBjb21tZW50ZWQgZm9yIG5vdyB1bnRpbCBzdWNoIGEgdGltZSBhcyB3ZSBuZWVkIHRvIGNhbGwgYSBzZXJ2ZXIgZm9yIHdzdCB0ZXN0cyAtLT4KLSAgPCEtLTxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9Ii1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9JHt0ZXN0RGlyfS8ke3RvbWNhdDUwRGlyfSIvPiAtLT4KLQkKLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICA8ZGVsZXRlPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0id3N0LXdzLWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3Rfd3NfZm9sZGVyIi8+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d3N0LWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3Qtd3MtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3QuQWxsV1NKVW5pdFRlc3RzIiAvPgotICAgCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLTwhLS0gICAJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAJLS0+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3QvcG9wdXAvTmV3QWN0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3QvcG9wdXAvTmV3QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTFiZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0L3BvcHVwL05ld0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JT2JqZWN0QWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBOZXdBY3Rpb24gaW1wbGVtZW50cyBJT2JqZWN0QWN0aW9uRGVsZWdhdGUgewotCi0gIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKLSAgCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFjdGlvbjEuCi0JICovCi0JcHVibGljIE5ld0FjdGlvbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElPYmplY3RBY3Rpb25EZWxlZ2F0ZSNzZXRBY3RpdmVQYXJ0KElBY3Rpb24sIElXb3JrYmVuY2hQYXJ0KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZVBhcnQoSUFjdGlvbiBhY3Rpb24sIElXb3JrYmVuY2hQYXJ0IHRhcmdldFBhcnQpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElBY3Rpb25EZWxlZ2F0ZSNydW4oSUFjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIAotCXsKLQkgIER5bmFtaWNXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNXaXphcmQoKTsKLQkgIFdpemFyZERpYWxvZyAgZGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyggbnVsbCwgd2l6YXJkICk7Ci0JICAKLQkgIHRyeQotCSAgewotCSAgICBCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCAib3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzIiApOwotCSAgICB3aXphcmQuc2V0SW5pdGlhbERhdGEoICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCIsIGJ1bmRsZSwgImljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmciLCAiUGV0ZXIgdGl0bGUiICk7Ci0JICAgIHdpemFyZC5pbml0KCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLCBzZWxlY3Rpb24gKTsKLQkgICAgCi0JICAgIGRpYWxvZy5vcGVuKCk7Ci0JICB9Ci0JICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotCSAgewotCSAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uLCBJU2VsZWN0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSAKLQl7Ci0JICBpZiggc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gKQotICAgIHsKLSAgICAgIHRoaXMuc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkgc2VsZWN0aW9uOwotICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvZGF0YS9Mb2NhdG9yV29ya3NwYWNlU2V0dXAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvZGF0YS9Mb2NhdG9yV29ya3NwYWNlU2V0dXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ1NWZhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL2RhdGEvTG9jYXRvcldvcmtzcGFjZVNldHVwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMuZGF0YTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRyby5JSW50cm9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludHJvLklJbnRyb1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqICBTZXRzIHVwIGxvY2F0b3IgdGVzdCBkYXRhIC0gdXNlcyBzYW1lIGRhdGEgZmlsZSBidXQgcmVuYW1lcyBpdCBmb3IgZWFjaCB1c2UKLSAqICBXb3Jrc3BhY2Ugc3RydWN0dXJlIGNyZWF0ZWQgbG9va3MgbGlrZSB0aGlzOgotICogIAotICogIHJvb3QKLSAqICAtLXByb2plY3QxCi0gKiAgICB8LS0tLWZvbGRlcjEKLSAqICAgICAgICAgfC0tLS0tZm9sZGVyMgotICogICAgICAgICAgICAgICB8LS0tLS0tb25lLndzZGwKLSAqICAgICAgICAgfC0tLS0tdHdvLndzZGwKLSAqICAgIHwtLS0tZm9sZGVyMwotICogICAgICAgICB8LS0tLS10aHJlZS53c2RsCi0gKiAgICAgICAgIHwtLS0tLWZvdXIud3NkbCAKLSAqICAtLXByb2plY3QyCi0gKiAgICB8LS0tLWZpdmUud3NkbAotICogICAgfC0tLS1mb2xkZXI0Ci0gKiAgICB8LS0tLWZvbGRlcjUKLSAqICAgICAgICAgfC0tLS0tc2l4LndzZGwKLSAqICAtLXByb2plY3QzCi0gKiAgICB8LS0tLW9uZS54bWwKLSAqLwotCi1wdWJsaWMgY2xhc3MgTG9jYXRvcldvcmtzcGFjZVNldHVwIGV4dGVuZHMgVGVzdENhc2UgewotCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9KRUNUMV9OQU1FID0gIlByb2plY3QxIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjFfTkFNRSA9ICJGb2xkZXIxIjsgIC8vY29udGFpbnMgV1NETCBmaWxlIGFuZCBvbmUgZm9sZGVyIAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSMl9OQU1FID0gIkZvbGRlcjIiOyAgLy9uZXN0ZWQgaW4gZm9sZGVyIDEgYW5kIGNvbnRhaW5zIFdTREwgZmlsZQotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSM19OQU1FID0gIkZvbGRlcjMiOyAgLy9jb250YWlucyB0d28gV1NETCBmaWxlcwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPSkVDVDJfTkFNRSA9ICJQcm9qZWN0MiI7IC8vY29udGFpbnMgV1NETCBmaWxlIGFuZCB0d28gZm9sZGVycwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSNF9OQU1FID0gIkZvbGRlcjQiOyAgLy9jb250YWlucyBubyBXU0RMCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVI1X05BTUUgPSAiRm9sZGVyNSI7ICAvL2NvbnRhaW5zIG9uZSBXU0RMIGZpbGUKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0pFQ1QzX05BTUUgPSAiUHJvamVjdDMiOyAgLy9jb250YWlucyBubyBXU0RMIGZpbGVzIGJ1dCBvbmUgWE1MIGZpbGUKLQkgIAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETEZJTEVfT05FID0gIm9uZS53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX1RXTyA9ICJ0d28ud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9USFJFRSA9ICJ0aHJlZS53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX0ZPVVIgPSAiZm91ci53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX0ZJVkUgPSAiZml2ZS53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX1NJWCA9ICJzaXgud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBYTUxGSUxFX09ORSA9ICJvbmUuWE1MIjsKLQkgIAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQUNUVUFMX1RFU1RGSUxFUEFUSCA9ICJkYXRhL2xvY2F0b3IvdGVzdC53c2RsIjsKLQkgIAkgIAotCSAgcHJpdmF0ZSBJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkgIAotCSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLQkgIHsKLQkgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoTG9jYXRvcldvcmtzcGFjZVNldHVwLmNsYXNzLCAiTG9jYXRvcldvcmtzcGFjZVNldHVwIik7Ci0JICB9Ci0KLQkgIHByb3RlY3RlZCB2b2lkIGNsb3NlSW50cm8oKQotCSAgewotCSAgICBJSW50cm9NYW5hZ2VyIGludHJvTWFuYWdlciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SW50cm9NYW5hZ2VyKCk7Ci0JICAgIElJbnRyb1BhcnQgaW50cm9QYXJ0ID0gaW50cm9NYW5hZ2VyLmdldEludHJvKCk7Ci0JICAgIGlmIChpbnRyb1BhcnQgIT0gbnVsbCkKLQkgICAgICBpbnRyb01hbmFnZXIuY2xvc2VJbnRybyhpbnRyb1BhcnQpOwotCSAgfQotCi0JICBwcm90ZWN0ZWQgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgIHsKLQkgICAgSVByb2plY3Qgc2ltcGxlUHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkgICAgc2ltcGxlUHJvamVjdC5jcmVhdGUobnVsbCk7Ci0JICAgIHNpbXBsZVByb2plY3Qub3BlbihudWxsKTsKLQkgICAgcmV0dXJuIHNpbXBsZVByb2plY3Q7Ci0JICB9Ci0KLQkgIHByb3RlY3RlZCBJRm9sZGVyIGNyZWF0ZUZvbGRlcihJQ29udGFpbmVyIHBhcmVudCwgU3RyaW5nIGZvbGRlck5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICB7Ci0JCUlGb2xkZXIgZm9sZGVyMSA9IHBhcmVudC5nZXRGb2xkZXIobmV3IFBhdGgoZm9sZGVyTmFtZSkpOwotICAgICAgICBmb2xkZXIxLmNyZWF0ZShmYWxzZSwgdHJ1ZSwgbnVsbCk7Ci0JICAgIHJldHVybiBmb2xkZXIxOwotCSAgfQotCi0JICAKLQkgIHByb3RlY3RlZCB2b2lkIGNvcHlGaWxlKElDb250YWluZXIgcHJvamVjdCwgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGRlc3QpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotCSAgewotCQkgIAotCSAgICBJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKG5ldyBQYXRoKGRlc3QpKTsKLQkgICAgZmlsZS5jcmVhdGUoVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KHNvdXJjZSkub3BlblN0cmVhbSgpLCB0cnVlLCBudWxsKTsKLQkgICAgQXNzZXJ0LmFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0JICB9Ci0KLQkgIHByb3RlY3RlZCB2b2lkIGpvaW5BdXRvQnVpbGQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgewotCSAgICBib29sZWFuIGludGVycnVwdGVkID0gdHJ1ZTsKLQkgICAgd2hpbGUgKGludGVycnVwdGVkKQotCSAgICB7Ci0JICAgICAgdHJ5Ci0JICAgICAgewotCSAgICAgICAgUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBudWxsKTsKLQkgICAgICAgIGludGVycnVwdGVkID0gZmFsc2U7Ci0JICAgICAgfQotCSAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotCSAgICAgIHsKLQkgICAgICAgIGludGVycnVwdGVkID0gdHJ1ZTsKLQkgICAgICB9Ci0JICAgIH0KLQkgIH0KLQotCSAgcHVibGljIHZvaWQgdGVzdFNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCSAgewotCQkgIHRyeXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0gbG9jYXRvciBkYXRhIHNldHVwIHN0YXJ0aW5nIik7Ci0JICAgIGNsb3NlSW50cm8oKTsKLQotCSAgICBJUHJvamVjdCBwcm9qZWN0MSA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVDFfTkFNRSk7Ci0JICAgIElGb2xkZXIgZm9sZGVyMSA9IGNyZWF0ZUZvbGRlcihwcm9qZWN0MSwgRk9MREVSMV9OQU1FKTsKLQkgICAgY29weUZpbGUoZm9sZGVyMSwgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfVFdPKTsKLQkgICAgSUZvbGRlciBmb2xkZXIyID0gY3JlYXRlRm9sZGVyKGZvbGRlcjEsIEZPTERFUjJfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKGZvbGRlcjIsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX09ORSk7Ci0JICAgIElGb2xkZXIgZm9sZGVyMyA9IGNyZWF0ZUZvbGRlcihwcm9qZWN0MSwgRk9MREVSM19OQU1FKTsKLQkgICAgY29weUZpbGUoZm9sZGVyMywgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfVEhSRUUpOwotCSAgICBjb3B5RmlsZShmb2xkZXIzLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9GT1VSKTsKLQkgICAgCi0JICAgIElQcm9qZWN0IHByb2plY3QyID0gY3JlYXRlU2ltcGxlUHJvamVjdChQUk9KRUNUMl9OQU1FKTsKLQkgICAgY29weUZpbGUocHJvamVjdDIsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX0ZJVkUpOwotCSAgICBjcmVhdGVGb2xkZXIocHJvamVjdDIsIEZPTERFUjRfTkFNRSk7ICAvL2ZvbGRlciB3aXRoIG5vIGNvbnRlbnQKLQkgICAgSUZvbGRlciBmb2xkZXI1ID0gY3JlYXRlRm9sZGVyKHByb2plY3QyLCBGT0xERVI1X05BTUUpOwotCSAgICBjb3B5RmlsZShmb2xkZXI1LCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9TSVgpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0MyA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVDNfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKHByb2plY3QzLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBYTUxGSUxFX09ORSk7Ci0JCSAgfQotCQkgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCSAgfQotCSAKLQkJLy9jb2RlIHRvIGNoZWNrIHdvcmtzcGFjZSBzZXQgdXAgLSBkZWJ1ZwotCQkvKkRhdGFSZXNvdXJjZVZpc2l0b3IgdmlzaXRvciA9IG5ldyBEYXRhUmVzb3VyY2VWaXNpdG9yKCk7Ci0JICAgIHJvb3QuYWNjZXB0KHZpc2l0b3IpOwotCSAgICB2aXNpdG9yLnZpc2l0KHJvb3QpOyovCi0JICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLSBsb2NhdG9yIGRhdGEgc2V0dXAgY29tcGxldGUiKTsKLQkgIH0KLQkKLQlwcm90ZWN0ZWQgY2xhc3MgRGF0YVJlc291cmNlVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZVZpc2l0b3IKLQl7Ci0gICAgCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZSByZXNvdXJjZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotICAgIAkJaWYgKChyZXNvdXJjZSBpbnN0YW5jZW9mIElQcm9qZWN0KSB8fCAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyKSkKLSAgICAJCXsKLSAgICAJCSAgU3lzdGVtLm91dC5wcmludGxuKCJ2aXNpdGluZyAiICsgcmVzb3VyY2UuZ2V0TmFtZSgpKTsgICAgCQkgIAotICAgIAkJfQotICAgIAkJZWxzZSBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAJCXsKLSAgICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oImZvdW5kIGZpbGUgIiArIHJlc291cmNlLmdldE5hbWUoKSk7ICAgIAkJCQotICAgIAkJfQotICAgIAkJcmV0dXJuIHRydWU7Ci0gICAgCX0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3BsdWdpbi9UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NmI2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3BsdWdpbi9UZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMucGx1Z2luOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgVGVzdHNQbHVnaW4gcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkY2NkYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLmRhdGEuTG9jYXRvcldvcmtzcGFjZVNldHVwOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0UmVzdWx0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB0byBydW4gYWxsIHRoZSB1bml0dGVzdCB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFdTSlVuaXRUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIC8qKgotICAgKiBNZXRob2QgcGFyc2VBcmdzLgotICAgKiAKLSAgICogQHBhcmFtIGFyZ3MKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZUFyZ3MoT2JqZWN0IGFyZ3MpCi0gIHsKLSAgICAvLyB0eXBpY2lhbGx5IGFyZ3MgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywKLSAgICAvLyBub3Qgc3VyZSB3aGVuIGl0IHdvdWxkbid0IGJlLgotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIG5ldyBBbGxXU0pVbml0VGVzdHMoKS5ydW5NYWluKGFyZ3MpOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBydW5NYWluKE9iamVjdCBhcmdzKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVGVzdFJ1bm5lciB0ZXN0UnVubmVyID0gbnVsbDsKLQotICAgICAgcGFyc2VBcmdzKGFyZ3MpOwotCi0gICAgICB0ZXN0UnVubmVyID0gbmV3IFRlc3RSdW5uZXIoU3lzdGVtLm91dCk7Ci0gCi0KLSAgICAgIFRlc3Qgc3VpdGUgPSBzdWl0ZSgpOwotICAgICAgVGVzdFJlc3VsdCB0ZXN0UmVzdWx0ID0gdGVzdFJ1bm5lci5kb1J1bihzdWl0ZSwgZmFsc2UpOwotICAgICAgcHJpbnRIZWFkZXIodGVzdFJlc3VsdCk7ICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLSAvL2FkZCB1bml0IHRlc3RzIHRvIHN1aXRlIGhlcmUuLi4KLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggTG9jYXRvcldvcmtzcGFjZVNldHVwLnN1aXRlKCkpOwotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBXZWJTZXJ2aWNlRmluZGVyVGVzdHMuc3VpdGUoKSk7Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIFdTRExDb3BpZXJUZXN0cy5zdWl0ZSgpKTsKLSAgICByZXR1cm4gdGVzdFN1aXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50cyB0aGUgaGVhZGVyIG9mIHRoZSByZXBvcnQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByaW50SGVhZGVyKFRlc3RSZXN1bHQgcmVzdWx0KQotICB7Ci0gICAgaWYgKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KCJPSyIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgKCIgKyByZXN1bHQucnVuQ291bnQoKSArICIgdGVzdHMpIik7Ci0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMVVJFUyEhISIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAiVGVzdHMgcnVuOiAiCi0gICAgICAgICAgKyByZXN1bHQucnVuQ291bnQoKQotICAgICAgICAgICsgIiwgIEZhaWx1cmVzOiAiCi0gICAgICAgICAgKyByZXN1bHQuZmFpbHVyZUNvdW50KCkKLSAgICAgICAgICArICIsICBFcnJvcnM6ICIKLSAgICAgICAgICArIHJlc3VsdC5lcnJvckNvdW50KCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E2ZWZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlOwotCi0vKioKLSAqIE1pbmltYWwgYXBwIHRvIHJ1biBhcyBFY2xpcHNlICJhcHBsaWNhdGlvbiIKLSAqLwotcHVibGljIGNsYXNzIExhdW5jaFRlc3QgaW1wbGVtZW50cyBJUGxhdGZvcm1SdW5uYWJsZQotewotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGUjcnVuKE9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgcnVuKE9iamVjdCBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLQotICAgIE9iamVjdCByZXN1bHQgPSBuZXcgQWxsV1NKVW5pdFRlc3RzKCkucnVuTWFpbihhcmdzKTsKLQotICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVGhyb3dhYmxlKQotICAgICAgewotICAgICAgICAoKFRocm93YWJsZSkgcmVzdWx0KS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0cyBkaWRuJ3QgcmV0dXJuICdvayciKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBJUGxhdGZvcm1SdW5uYWJsZS5FWElUX09LOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1JlZ2lzdHJ5VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVnaXN0cnlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWEzNmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVnaXN0cnlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5SZWdpc3RyeVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlVERElSZWdpc3RyeVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUgKCkKLQl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFJlZ2lzdHJ5VGVzdHMuY2xhc3MpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgVGF4b25vbXkgbW9kZWwgYW5kIHBhc3NlcyBpdCB0bwotCSAqIDxjb2RlPlJlZ2lzdHJ5U2VydmljZS5zYXZlVGF4b25vbXkoKTwvY29kZT4KLQkgKiB3aGVyZSB0aGUgbW9kZWwgaXMgcGVyc2lzdGVkIHRvIGEgcGxhdGZvcm0KLQkgKiBzcGVjaWZpZWQgdGVtcG9yYXJ5IGZpbGVzeXN0ZW0gbG9jYXRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVRheG9ub215ICgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUSU5HIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVUYXhvbm9teSIpOwotCQl0cnkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBSZWdpc3RyeVNlcnZpY2UgYW5kIFRheG9ub215Iik7Ci0JCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7CQkJCi0JCQlUYXhvbm9teSB0YXhvbm9teSA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkaW5nIGEgc2ltcGxlIFRheG9ub215IG1vZGVsIik7Ci0JCQl0YXhvbm9teS5zZXRJZCgibXkudGF4b25vbXkiKTsKLQkJCXRheG9ub215LnNldE5hbWUoIk15IFRheG9ub215Iik7Ci0JCQlFTGlzdCBsaXN0ID0gdGF4b25vbXkuZ2V0Q2F0ZWdvcnkoKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MSA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5MS5zZXROYW1lKCJNeSBmaXJzdCBjYXRlZ29yeSIpOwotCQkJY2F0ZWdvcnkxLnNldENvZGUoIjEiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MiA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5Mi5zZXROYW1lKCJNeSBzZWNvbmQgY2F0ZWdvcnkiKTsKLQkJCWNhdGVnb3J5Mi5zZXRDb2RlKCIyIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTMgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTMuc2V0TmFtZSgiTXkgdGhpcmQgY2F0ZWdvcnkiKTsKLQkJCWNhdGVnb3J5My5zZXRDb2RlKCIyLjEiKTsKLQkJCWNhdGVnb3J5Mi5nZXRDYXRlZ29yeSgpLmFkZChjYXRlZ29yeTMpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnkxKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5Mik7Ci0KLQkJCUZpbGUgZmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoInRheG9ub215LiIsIi54bWwiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2F2aW5nIHRoZSBUYXhvbm9teSBtb2RlbCB0byAiK2ZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKLQkJCXJlZ2lzdHJ5U2VydmljZS5zYXZlVGF4b25vbXkoZmlsZS50b1VSTCgpLHRheG9ub215KTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4YykKLQkJewotCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkJZmFpbCgiVW5leHBlY3RlZCBUaHJvd2FibGUgWyIrZXhjLmdldE1lc3NhZ2UoKSsiXSIpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0hFRCB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlVGF4b25vbXlcbiIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBVRERJIFJlZ2lzdHJ5IG1vZGVsIGFuZCBwYXNzZXMgaXQgdG8KLQkgKiA8Y29kZT5SZWdpc3RyeVNlcnZpY2Uuc2F2ZVJlZ2lzdHJ5KCk8L2NvZGU+Ci0JICogd2hlcmUgdGhlIG1vZGVsIGlzIHBlcnNpc3RlZCB0byBhIHBsYXRmb3JtCi0JICogc3BlY2lmaWVkIHRlbXBvcmFyeSBmaWxlc3lzdGVtIGxvY2F0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVSZWdpc3RyeSAoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVElORyB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlUmVnaXN0cnkiKTsKLQkJdHJ5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgUmVnaXN0cnlTZXJ2aWNlLCBVRERJUmVnaXN0cnlTZXJ2aWNlIGFuZCBSZWdpc3RyeSIpOwotCQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQkJVURESVJlZ2lzdHJ5U2VydmljZSB1ZGRpUmVnaXN0cnlTZXJ2aWNlID0gVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwkJCQotCQkJVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IHVkZGlSZWdpc3RyeVNlcnZpY2UubmV3VURESVJlZ2lzdHJ5KCk7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRpbmcgYSBzaW1wbGUgUmVnaXN0cnkgbW9kZWwiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRJZCgibXkucmVnaXN0cnkiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRWZXJzaW9uKCIyLjAiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXREaXNjb3ZlcnlVUkwoImh0dHA6Ly9zb21lLmRpc2NvdmVyeS51cmwiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRQdWJsaWNhdGlvblVSTCgiaHR0cDovL3NvbWUucHVibGljYXRpb24udXJsIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0RGVmYXVsdExvZ2luKCJob2NrZXlmYW5hdGljIik7Ci0JCQlOYW1lIG5hbWUgPSBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5hbWUoKTsKLQkJCW5hbWUuc2V0VmFsdWUoIk15IFJlZ2lzdHJ5Iik7Ci0JCQl1ZGRpUmVnaXN0cnkuZ2V0TmFtZSgpLmFkZChuYW1lKTsKLQkJCVRheG9ub215IHRheG9ub215UmVmID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215KCk7Ci0JCQl0YXhvbm9teVJlZi5zZXRSZWYoIm15LnRheG9ub215Iik7Ci0JCQlUYXhvbm9taWVzIHQgPSB1ZGRpUmVnaXN0cnkuZ2V0VGF4b25vbWllcygpOwotCQkJaWYgKHQgPT0gbnVsbCkKLQkJCXsKLQkJCQl0ID0gVURESVJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVGF4b25vbWllcygpOwotCQkJCXVkZGlSZWdpc3RyeS5zZXRUYXhvbm9taWVzKHQpOwotCQkJfQotCQkJRUxpc3QgZSA9IHQuZ2V0VGF4b25vbXkoKTsKLQkJCWUuYWRkKHRheG9ub215UmVmKTsKLQotCQkJRmlsZSBmaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgicmVnaXN0cnkuIiwiLnhtbCIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTYXZpbmcgdGhlIFJlZ2lzdHJ5IG1vZGVsIHRvICIrZmlsZS5nZXRDYW5vbmljYWxQYXRoKCkpOwotCQkJcmVnaXN0cnlTZXJ2aWNlLnNhdmVSZWdpc3RyeShmaWxlLnRvVVJMKCksdWRkaVJlZ2lzdHJ5KTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4YykKLQkJewotCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkJZmFpbCgiVW5leHBlY3RlZCBUaHJvd2FibGUgWyIrZXhjLmdldE1lc3NhZ2UoKSsiXSIpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0hFRCB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlUmVnaXN0cnlcbiIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBVRERJIFJlZ2lzdHJ5IG1vZGVsIGFuZCBhIG5ldyBUYXhvbm9teQotCSAqIG1vZGVsLCBhc3NvY2lhdGVzIHRoZSBsYXR0ZXIgd2l0aCB0aGUgZm9ybWVyLCBhbmQKLQkgKiBkcml2ZXMgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlci5zYXZlUmVnaXN0cnkoKTwvY29kZT4KLQkgKiB0byBzYXZlIHRoZSBtb2RlbHMgYW5kIHRoZSBpbmRleCBkb2N1bWVudCB0byB0aGUKLQkgKiBwcmVmZXJyZWQgbG9jYXRpb24gb2YgdGhlIGRlZmF1bHQgcmVnaXN0cnkgbWFuYWdlci4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9zYXZlUmVnaXN0cnkoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVElORyB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9zYXZlUmVnaXN0cnkiKTsKLQkJdHJ5IHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgUmVnaXN0cnlTZXJ2aWNlIGFuZCBHZXR0aW5nIFJlZ2lzdHJ5TWFuYWdlciIpOwkKLQkJCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCi0JCQlJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdpc3RyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaGUgbG9jYXRpb24gb2YgdGhlIGRlZmF1bHQgaW5kZXggaXMgIiArIHJlZ01hbmFnZXIuZ2V0VVJMKCkpOwotCi0JCQkvL2J1aWxkIHRoZSBob2NrZXkgdGF4b25vbXkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRpbmcgdGhlIGhvY2tleSBUYXhvbm9teSBtb2RlbCIpOwotCQkJVGF4b25vbXkgaG9ja2V5VGF4b25vbXkgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXkoKTsKLQkJCWhvY2tleVRheG9ub215LnNldElkKCJob2NrZXkudGF4b25vbXkiKTsKLQkJCWhvY2tleVRheG9ub215LnNldE5hbWUoImhvY2tleSBUYXhvbm9teSIpOwotCQkJRUxpc3QgbGlzdCA9IGhvY2tleVRheG9ub215LmdldENhdGVnb3J5KCk7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTEgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTQgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTQuc2V0TmFtZSgiUHJvIik7Ci0JCQljYXRlZ29yeTQuc2V0Q29kZSgiNCIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnk1ID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnk1LnNldE5hbWUoIkFITCIpOwotCQkJY2F0ZWdvcnk1LnNldENvZGUoIjQuMSIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnk2ID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnk2LnNldE5hbWUoIk5ITCIpOwotCQkJY2F0ZWdvcnk2LnNldENvZGUoIjQuMiIpOwotCQkJY2F0ZWdvcnkxLnNldE5hbWUoIkp1bmlvciIpOwotCQkJY2F0ZWdvcnkxLnNldENvZGUoIjEiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MiA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5Mi5zZXROYW1lKCJNaWRnZXQiKTsKLQkJCWNhdGVnb3J5Mi5zZXRDb2RlKCIyIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTMgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTMuc2V0TmFtZSgiQmFudGFtIik7Ci0JCQljYXRlZ29yeTMuc2V0Q29kZSgiMyIpOwotCQkJY2F0ZWdvcnk0LmdldENhdGVnb3J5KCkuYWRkKGNhdGVnb3J5NSk7Ci0JCQljYXRlZ29yeTQuZ2V0Q2F0ZWdvcnkoKS5hZGQoY2F0ZWdvcnk2KTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5MSk7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTIpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnkzKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5NCk7Ci0JCQkKLQkJCS8vc2F2ZSB0aGUgaG9ja2V5IHRheG9ub215Ci0JCQlUYXhvbm9teSBob2NrZXlUYXhvbm9teVJlZiA9IHJlZ01hbmFnZXIuc2F2ZVRheG9ub215KGhvY2tleVRheG9ub215KTsKLQotCQkJLy9tYWtlIHRoZSBob2NrZXkgcmVnaXN0cnkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRpbmcgdGhlIGhvY2tleSBSZWdpc3RyeSBtb2RlbCIpOwotCQkJVURESVJlZ2lzdHJ5U2VydmljZSB1ZGRpUmVnaXN0cnlTZXJ2aWNlID0gVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwkJCQotCQkJVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IHVkZGlSZWdpc3RyeVNlcnZpY2UubmV3VURESVJlZ2lzdHJ5KCk7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0SWQoImhvY2tleS5yZWdpc3RyeSIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldFZlcnNpb24oIjIuMCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldERlZmF1bHRMb2dpbigiaG9ja2V5ZmFuYXRpYyIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldERpc2NvdmVyeVVSTCgiaHR0cDovL3NvbWUuZGlzY292ZXJ5LnVybCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldFB1YmxpY2F0aW9uVVJMKCJodHRwOi8vc29tZS5wdWJsaWNhdGlvbi51cmwiKTsKLQkJCU5hbWUgbmFtZSA9IFJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTmFtZSgpOwotCQkJbmFtZS5zZXRWYWx1ZSgiSG9ja2V5IFJlZ2lzdHJ5Iik7Ci0JCQl1ZGRpUmVnaXN0cnkuZ2V0TmFtZSgpLmFkZChuYW1lKTsKLQotCQkJLy8gQWRkIHRoZSByZWZlcmVuY2UgdG8gdGhlIHRheG9ub215IChzYXZlZCBhYm92ZSkgdG8gdGhlIHJlZ2lzdHJ5LiAgCi0JCQl1ZGRpUmVnaXN0cnlTZXJ2aWNlLmFkZFRheG9ub215KHVkZGlSZWdpc3RyeSxob2NrZXlUYXhvbm9teVJlZik7Ci0KLQkJCS8qCi0JCQlVRERJVGF4b25vbXlGaW5kZXIgVUlURmluZGVyID0gbmV3IFVERElUYXhvbm9teUZpbmRlcigpOwotCQkJcmVnTWFuYWdlci5hZGRUYXhvbm9teUZpbmRlcih1ZGRpUmVnaXN0cnkuZ2V0Q2xhc3MoKS5nZXROYW1lKCksVUlURmluZGVyKTsKLQkJCSovCi0JCQkvLyBTYXZlIHRoZSB0aGluZy4KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2F2aW5nIHRoZSBob2NrZXkgUmVnaXN0cnkgbW9kZWwiKTsKLQkJCXJlZ01hbmFnZXIuc2F2ZVJlZ2lzdHJ5KHVkZGlSZWdpc3RyeSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCXsKLQkJCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWZhaWwoIlVuZXhwZWN0ZWQgVGhyb3dhYmxlIFsiK2V4Yy5nZXRNZXNzYWdlKCkrIl0iKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIRUQgdGVzdF9SZWdpc3RyeU1hbmFnZXJfc2F2ZVJlZ2lzdHJ5XG4iKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIExvYWRzIHRoZSByZWdpc3RyeSBhbmQgdGF4b25vbXkgaW4gdGhlIGluZGV4IGNyZWF0ZWQgaW4KLQkgKiB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9zYXZlUmVnaXN0cnksIHRoZW4gYXNzZXJ0cyB0aGF0IHRoZQotCSAqIGNvbnRlbnQgb2YgdGhlIG1vZGVsIGlzIHdoYXQgd2UgZXhwZWN0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX2xvYWRSZWdpc3RyeSgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUSU5HIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX2xvYWRSZWdpc3RyeSIpOwotCQl0cnkgewotCQkJLy8gU2V0dXAKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgUmVnaXN0cnlTZXJ2aWNlIGFuZCBHZXR0aW5nIFJlZ2lzdHJ5TWFuYWdlciIpOwkKLQkJCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCi0JCQlJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdpc3RyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCQkJCi0JCQkvLyBHZXQgdGhlIG9uZSByZWdpc3RyeSBVUkkgd2UgZXhwZWN0LCBhbmQgbG9hZCB0aGUgcmVnaXN0cnkuCi0JCQlTdHJpbmdbXSByZWdpc3RyaWVzID0gcmVnTWFuYWdlci5nZXRSZWdpc3RyeVVSSXMoKTsKLQkJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBudW1iZXIgb2YgcmVnaXN0cmllcyAiK3JlZ2lzdHJpZXMubGVuZ3RoLHJlZ2lzdHJpZXMubGVuZ3RoLDEpOwotCQkJU3RyaW5nIHVyaSA9IHJlZ2lzdHJpZXNbMF07Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRpbmcgcmVnaXN0cnkgIiArIHVyaSk7Ci0JCQlSZWdpc3RyeSByZWdpc3RyeSA9IHJlZ01hbmFnZXIubG9hZFJlZ2lzdHJ5KHVyaSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIHJlZ2lzdHJ5ICIgKyByZWdpc3RyeS5nZXRJZCgpKTsKLQkJCWFzc2VydEVxdWFscygiRGlkIG5vdCBmaW5kIGhvY2tleSByZWdpc3RyeSIsImhvY2tleS5yZWdpc3RyeSIscmVnaXN0cnkuZ2V0SWQoKSk7Ci0JCQkKLQkJCS8vIEl0J3Mgc3VwcG9zZWQgdG8gYmUgYSBVRERJIHJlZ2lzdHJ5LiBWZXJpZnkgaXQgYW5kIGNoZWNrIGl0cyB2YWx1ZXMuCi0JCQlhc3NlcnRUcnVlKCJSZWdpc3RyeSBpcyBub3QgYSBVRERJUmVnaXN0cnkiLChyZWdpc3RyeSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeSkpOwotCQkJVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IChVRERJUmVnaXN0cnkpcmVnaXN0cnk7Ci0JCQlhc3NlcnRFcXVhbHModWRkaVJlZ2lzdHJ5LmdldFZlcnNpb24oKSwiMi4wIik7Ci0JCQlhc3NlcnRFcXVhbHModWRkaVJlZ2lzdHJ5LmdldERlZmF1bHRMb2dpbigpLCJob2NrZXlmYW5hdGljIik7Ci0JCQlhc3NlcnRFcXVhbHModWRkaVJlZ2lzdHJ5LmdldERpc2NvdmVyeVVSTCgpLCJodHRwOi8vc29tZS5kaXNjb3ZlcnkudXJsIik7Ci0JCQlhc3NlcnRFcXVhbHModWRkaVJlZ2lzdHJ5LmdldFB1YmxpY2F0aW9uVVJMKCksImh0dHA6Ly9zb21lLnB1YmxpY2F0aW9uLnVybCIpOwotCQkJCi0JCQkvLyBMb2FkIHRoZSB0YXhvbm9taWVzIHVzZWQgdGhlIFVEREkgcmVnaXN0cnkuCi0JCQlVRERJUmVnaXN0cnlTZXJ2aWNlIHVkZGlSZWdpc3RyeVNlcnZpY2UgPSBVRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCQlUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKHVkZGlSZWdpc3RyeVNlcnZpY2UuZ2V0VGF4b25vbXlVUklzKHVkZGlSZWdpc3RyeSkpOwotCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG51bWJlciBvZiB0YXhvbm9taWVzICIrdGF4b25vbWllcy5sZW5ndGgsdGF4b25vbWllcy5sZW5ndGgsMSk7Ci0JCQlUYXhvbm9teSB0YXhvbm9teSA9IHRheG9ub21pZXNbMF07Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIHRheG9ub215ICIgKyB0YXhvbm9teS5nZXRJZCgpKTsKLQkJCUFzc2VydC5hc3NlcnRFcXVhbHMoIkRpZCBub3QgZmluZCBob2NrZXkgdGF4b25vbXkiLCJob2NrZXkudGF4b25vbXkiLHRheG9ub215LmdldElkKCkpOwotCQkJCi0JCQkvLyBEdW1wIG91dCB0aGUgdmFsdWVzIChubyBhc3NlcnRpb25zIGhlcmUpLgotCQkJRUxpc3QgY0xpc3QgPSB0YXhvbm9teS5nZXRDYXRlZ29yeSgpOwotCQkJZm9yKGludCBpID0gMDtpPGNMaXN0LnNpemUoKTtpKyspewotCQkJCUNhdGVnb3J5IGNhdGVnb3J5ID0gKENhdGVnb3J5KWNMaXN0LmdldChpKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIGNhdGVnb3J5ICIgKyBjYXRlZ29yeS5nZXROYW1lKCkpOwotCQkJCUVMaXN0IGMyTGlzdCA9IGNhdGVnb3J5LmdldENhdGVnb3J5KCk7Ci0JCQkJZm9yKGludCBqID0gMDtqPGMyTGlzdC5zaXplKCk7aisrKXsKLQkJCQkJQ2F0ZWdvcnkgaUNhdGVnb3J5ID0gKENhdGVnb3J5KWMyTGlzdC5nZXQoaik7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgc3ViY2F0ZWdvcnkgIiArIGlDYXRlZ29yeS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCX0JCQkJCQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiB0KQotCQl7Ci0JCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQkJZmFpbCgiVW5leHBlY3RlZCBUaHJvd2FibGUgWyIrdC5nZXRNZXNzYWdlKCkrIl0iKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIRUQgdGVzdF9SZWdpc3RyeU1hbmFnZXJfbG9hZFJlZ2lzdHJ5XG4iKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvVGVzdEJ1bmRsZVV0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Rlc3RCdW5kbGVVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODIyYTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvVGVzdEJ1bmRsZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uQnVuZGxlVXRpbHM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLlZlcnNpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0QnVuZGxlVXRpbHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VmVyc2lvbigpIHsKLQkJVmVyc2lvbiB2ZXJzaW9uID0gQnVuZGxlVXRpbHMuZ2V0VmVyc2lvbigib3JnLmVjbGlwc2Uud3N0LndzIik7Ci0JCWFzc2VydE5vdE51bGwoInZlcnNpb24gc2hvdWxkIG5ldmVyIGJlIG51bGwiLCB2ZXJzaW9uKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NETENvcGllclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTRExDb3BpZXJUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTVlN2E3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NETENvcGllclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTI2ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgcHVibGljIHV0aWxpdHkgbWV0aG9kIGZvciBjb3B5aW5nIFdTREwgZmlsZXMKLSAqIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIHV0aWxpdHkgc2hvdWxkIGNyZWF0ZSB0YXJnZXQgZm9sZGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWwuV1NETENvcGllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luOwotCi0vKioKLSAqIEpVbml0IHRlc3RzIGZvciBXU0RMQ29waWVyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29waWVyVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFfRElSICAgICA9ICJkYXRhL3dzZGxjb3BpZXIvIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9GT0xERVIxID0gIndzZGwxIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9GT0xERVIyID0gIndzZGwyIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9GT0xERVIzID0gIndzZGwzIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9GT0xERVI0ID0gIndzZGw0IjsKLQkKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0KLQkvKioKLQkgKiBSZXR1cm4gc3VpdGUgb2YgdGVzdHMgdG8gcnVuLgotCSAqIAotCSAqIEByZXR1cm4gQSBUZXN0U3VpdGUuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJXU0RMQ29waWVyVGVzdHMiKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTEiKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2UyIikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlMyIpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTQiKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2U1IikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlNiIpKTsKLQkJcmV0dXJuIHN1aXRlOwotCX0KLQkJCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIG5hbWUgVGVzdCBtZXRob2QgbmFtZS4KLQkgKi8KLQlwdWJsaWMgV1NETENvcGllclRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoIldTRExDb3BpZXJUZXN0cyIpOwotCSAgICAKLQkgICAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKQotCSAgICAJcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0JICAgIAkKLQkgICAgaWYgKCFwcm9qZWN0LmlzT3BlbigpKQotCSAgICAJcHJvamVjdC5vcGVuKG51bGwpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhIGZvbGRlci4KLQkgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIGZvbGRlci4KLQkgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIGZvbGRlci4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgSUZvbGRlciBjcmVhdGVGb2xkZXIoU3RyaW5nIG5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZvbGRlciBmb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcihuZXcgUGF0aChuYW1lKSk7Ci0gICAgICAgIGZvbGRlci5jcmVhdGUoZmFsc2UsIHRydWUsIG51bGwpOwotCSAgICByZXR1cm4gZm9sZGVyOwotCX0KLQkKLQkvKgotCSAqIFZhbGlkYXRlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHRoZSB0YXJnZXQgZm9sZGVyIGFmdGVyIGNvcHlpbmcuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKElGb2xkZXIgZm9sZGVyLCBTdHJpbmcgZmlsZW5hbWUpIHsJCQotCQlhc3NlcnROb3ROdWxsKGZvbGRlci5maW5kTWVtYmVyKCIxLzIvMy90ZXN0LndzZGwiKSk7Ci0JCWFzc2VydE5vdE51bGwoZm9sZGVyLmZpbmRNZW1iZXIoIjEvMmEvIiArIGZpbGVuYW1lKSk7Ci0JCWFzc2VydE5vdE51bGwoZm9sZGVyLmZpbmRNZW1iZXIoIjEvMmEvdGVzdC54c2QiKSk7Ci0JCWFzc2VydE5vdE51bGwoZm9sZGVyLmZpbmRNZW1iZXIoInRlc3QueHNkIikpOwkJCi0JfQotCQotCS8qCi0JICogVmFsaWRhdGUgdGhlIHRpbWVzdGFtcHMgb2YgdGhlIGZpbGVzIGhhdmUgbm90IGNoYW5nZWQuCi0JICovCi0JcHJpdmF0ZSBsb25nW10gdmFsaWRhdGVUaW1lc3RhbXBzKElGb2xkZXIgZm9sZGVyLCBsb25nW10gb2xkVGltZXN0YW1wcykgewotCQkKLQkJbG9uZ1tdIGN1cnJlbnRUaW1lc3RhbXBzID0gbmV3IGxvbmdbM107Ci0JCQotCQljdXJyZW50VGltZXN0YW1wc1swXSA9IGZvbGRlci5maW5kTWVtYmVyKCIxLzIvMy90ZXN0LndzZGwiKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlpZiAob2xkVGltZXN0YW1wcyAhPSBudWxsKSBhc3NlcnRFcXVhbHMoY3VycmVudFRpbWVzdGFtcHNbMF0sIG9sZFRpbWVzdGFtcHNbMF0pOwotCi0JCWN1cnJlbnRUaW1lc3RhbXBzWzFdID0gZm9sZGVyLmZpbmRNZW1iZXIoIjEvMmEvdGVzdC54c2QiKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlpZiAob2xkVGltZXN0YW1wcyAhPSBudWxsKSBhc3NlcnRFcXVhbHMoY3VycmVudFRpbWVzdGFtcHNbMV0sIG9sZFRpbWVzdGFtcHNbMV0pOwotCQkKLQkJY3VycmVudFRpbWVzdGFtcHNbMl0gPSBmb2xkZXIuZmluZE1lbWJlcigidGVzdC54c2QiKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlpZiAob2xkVGltZXN0YW1wcyAhPSBudWxsKSBhc3NlcnRFcXVhbHMoY3VycmVudFRpbWVzdGFtcHNbMl0sIG9sZFRpbWVzdGFtcHNbMl0pOwotCQkKLQkJcmV0dXJuIGN1cnJlbnRUaW1lc3RhbXBzOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGNhc2UgIzEKLQkgKiAtIGNvcGllcyB3c2RsIGZyb20gdGVzdCBkYXRhIGRpcmVjdG9yeSB1c2luZyBmaWxlOi8gVVJJIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlMSgpIHsKLQkJdHJ5IHsKLQkJCVVSTCB1cmwgPSBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoREFUQV9ESVIgKyAiMS8yYS9zdGFydC53c2RsIik7CQkJCQotCQkJdXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQkKLQkJCUlGb2xkZXIgZm9sZGVyID0gY3JlYXRlRm9sZGVyKFdTRExfRk9MREVSMSk7Ci0JCQlTdHJpbmcgZm9sZGVyVVJJID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyBmb2xkZXIuZ2V0RnVsbFBhdGgoKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206ICIgKyB1cmwpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHVybC50b1N0cmluZygpKTsKLQkJCWNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyVVJJKTsKLQkJCQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQotCQkJdmFsaWRhdGUoZm9sZGVyLCAic3RhcnQud3NkbCIpOwotCQkJYXNzZXJ0RXF1YWxzKGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKS50b1N0cmluZygpLCAiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3QgY2FzZSAjMgotCSAqIC0gY29waWVzIHdzZGwgZnJvbSBvbmUgZm9sZGVyIHRvIGFub3RoZXIgdXNpbmcgcGxhdGZvcm06L3Jlc291cmNlIFVSSQotCSAqIC0gYWxzbyBjaGFuZ2VzIHRoZSB0YXJnZXQgZmlsZW5hbWUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTIoKSB7Ci0JCXRyeSB7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBwcm9qZWN0LmdldEZvbGRlcihXU0RMX0ZPTERFUjEpLmZpbmRNZW1iZXIoIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJSUZvbGRlciBmb2xkZXIgPSBjcmVhdGVGb2xkZXIoV1NETF9GT0xERVIyKTsJCQkKLQkJCQotCQkJU3RyaW5nIHBhdGggPSAicGxhdGZvcm06L3Jlc291cmNlIiArIHJlc291cmNlLmdldEZ1bGxQYXRoKCk7IAkJCQkJCQkJCQotCQkJU3RyaW5nIGZvbGRlclVSSSA9IGZvbGRlci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgcGF0aCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRTb3VyY2VVUkkocGF0aCk7CQkJCi0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7Ci0JCQljb3BpZXIuc2V0VGFyZ2V0RmlsZW5hbWUoIm5ld25hbWUud3NkbCIpOwotCQkJCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCi0JCQl2YWxpZGF0ZShmb2xkZXIsICJuZXduYW1lLndzZGwiKTsKLQkJCWFzc2VydEVxdWFscyhjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkudG9TdHJpbmcoKSwgIjEvMmEvbmV3bmFtZS53c2RsIik7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGNhc2UgIzMKLQkgKiAtIHJ1bnMgdGhlIFdTRExDb3BpZXIgd2l0aG91dCBzcGVjaWZ5aW5nIGEgc291cmNlIFVSSSAob3BlcmF0aW9uIHNob3VsZCBmYWlsKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlMygpIHsKLQkJdHJ5IHsJCQkKLQkJCUlGb2xkZXIgZm9sZGVyID0gY3JlYXRlRm9sZGVyKFdTRExfRk9MREVSMyk7Ci0JCQkKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSBmb2xkZXIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogTi9BIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyVVJJKTsJCQkKLQkJCQotCQkJdHJ5IHsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgaGVyZSIsIGZhbHNlKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGNlKTsKLQkJCX0KLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwotCQl9Ci0JfQkKLQotCS8qKgotCSAqIFRlc3QgY2FzZSAjNAotCSAqIC0gcnVucyB0aGUgV1NETENvcGllciB3aXRob3V0IGNyZWF0aW5nIGEgdGFyZ2V0IGZvbGRlcgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlNCgpIHsKLQkJdHJ5IHsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSMSkuZmluZE1lbWJlcigiMS8yYS9zdGFydC53c2RsIik7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSNCk7Ci0JCQkJCQkKLQkJCVN0cmluZyBwYXRoID0gcmVzb3VyY2UuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIGZvbGRlclVSSSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiICsgZm9sZGVyLmdldEZ1bGxQYXRoKCk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgcGF0aCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQlhc3NlcnRUcnVlKCFmb2xkZXIuZXhpc3RzKCkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHBhdGgpOwotCQkJY29waWVyLnNldFRhcmdldEZvbGRlclVSSShmb2xkZXJVUkkpOwotCQkJCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCi0JCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCQl2YWxpZGF0ZShmb2xkZXIsICJzdGFydC53c2RsIik7Ci0JCQlhc3NlcnRFcXVhbHMoY29waWVyLmdldFJlbGF0aXZlUGF0aCgpLnRvU3RyaW5nKCksICIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwkJCQotCQl9Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgY2FzZSAjNQotCSAqIC0gcnVucyB0aGUgV1NETENvcGllciB3aXRob3V0IHNwZWNpZnlpbmcgYSB0YXJnZXQgZm9sZGVyIChvcGVyYXRpb24gc2hvdWxkIGZhaWwpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhc2U1KCkgewotCQl0cnkgewotCQkJSVJlc291cmNlIHJlc291cmNlID0gcHJvamVjdC5nZXRGb2xkZXIoV1NETF9GT0xERVIxKS5maW5kTWVtYmVyKCIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCQotCQkJU3RyaW5nIHBhdGggPSAicGxhdGZvcm06L3Jlc291cmNlIiArIHJlc291cmNlLmdldEZ1bGxQYXRoKCk7IAkJCQkJCQkJCQkJCQkJCQotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHBhdGgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgIE4vQSIpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHBhdGgpOwkJCQotCQkJCi0JCQl0cnkgewotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBoZXJlIiwgZmFsc2UpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2UpOwotCQkJfQotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7CQkJCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBjYXNlICM2Ci0JICogLSBjb3BpZXMgd3NkbCBmcm9tIG9uZSBmb2xkZXIgb250byBpdHNlbGYgdXNpbmcgcGxhdGZvcm06L3Jlc291cmNlIFVSSQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlNigpIHsKLQkJdHJ5IHsKLQkJCUlGb2xkZXIgZm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoV1NETF9GT0xERVIxKTsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IGZvbGRlci5maW5kTWVtYmVyKCIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCQotCQkJU3RyaW5nIHBhdGggPSAicGxhdGZvcm06L3Jlc291cmNlIiArIHJlc291cmNlLmdldEZ1bGxQYXRoKCk7IAkJCQkJCQotCQkJU3RyaW5nIGZvbGRlclVSSSA9IGZvbGRlci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQkJCQkJCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgcGF0aCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRTb3VyY2VVUkkocGF0aCk7CQkJCi0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7CQkJCi0KLQkJCWxvbmdbXSBvbGRUaW1lc3RhbXBzID0gdmFsaWRhdGVUaW1lc3RhbXBzKGZvbGRlciwgbnVsbCk7Ci0JCQkKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkKLQkJCXZhbGlkYXRlKGZvbGRlciwgInN0YXJ0LndzZGwiKTsKLQkJCXZhbGlkYXRlVGltZXN0YW1wcyhmb2xkZXIsIG9sZFRpbWVzdGFtcHMpOwotCQkJYXNzZXJ0RXF1YWxzKGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKS50b1N0cmluZygpLCAiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0JCX0KLQl9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZTVmZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIFdTSlVuaXRDb25zdGFudHMgewotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjUwIjsKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIm9yZy5lY2xpcHNlLmpzdC53cy5ydW50aW1lLmF4aXMxMSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViUHJvamVjdE5hbWUgPSAiV1AiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYlByb2plY3QyTmFtZSA9ICJXUDIiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXBvbmVudE5hbWUgPSAid2ViQ29tcG9uZW50IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wb25lbnQyTmFtZSA9ICJ3ZWJDb21wMiI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcDNOYW1lID0gIndlYkNvbXAzIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wNE5hbWUgPSAid2ViQ29tcDQiOwotICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWpiUHJvamVjdE5hbWUgPSAiRUpCUHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWpiQ29tcG9uZW50TmFtZSA9ICJlamJDb21wb25lbnQiOwotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXBwQ2xpZW50UHJvamVjdE5hbWUgPSAiQXBwQ2xpZW50UHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXBwQ2xpZW50Q29tcE5hbWUgPSAiYXBwQ2xpZW50Q29tcG9uZW50IjsgIAotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlYXJDb21wTmFtZSA9ICJFQVJDb21wb25lbnQiOwotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZUZpbmRlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VGaW5kZXJUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDFmMTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZUZpbmRlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlRmluZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUZpbmRlclRlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShXZWJTZXJ2aWNlRmluZGVyVGVzdHMuY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0V1NGaW5kZXIoKXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGluZyB3ZWIgc2VydmljZSBmaW5kZXIiKTsKLQkJV2ViU2VydmljZUZpbmRlciB3c2YgPSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oImF0dGVtcHRpbmcgdG8gbG9jYXRlIGFsbCB3ZWIgc2VydmljZXMgaW4gd29ya3NwYWNlIik7Ci0JCUl0ZXJhdG9yIHdzSXRlcmF0b3IgPSB3c2YuZ2V0V2ViU2VydmljZXMobnVsbCk7Ci0JCXdoaWxlICh3c0l0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJV2ViU2VydmljZUluZm8gd3NJbmZvID0gKFdlYlNlcnZpY2VJbmZvKSB3c0l0ZXJhdG9yLm5leHQoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigid2ViU2VydmljZSBVUkw6ICIgKyB3c0luZm8uZ2V0V3NkbFVSTCgpKTsKLQkJfQotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJmaW5pc2hlZCBmaW5kaW5nIGFsbCB3ZWJzZXJ2aWNlcyIpOwotCQkgCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0J1aWxkQ2xhc3NwYXRoLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0J1aWxkQ2xhc3NwYXRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkOTYyM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9CdWlsZENsYXNzcGF0aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTWFuaWZlc3RFbGVtZW50OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkNvbnN0YW50czsKLQotLyoqCi0gKiBUaGlzIHByb2dyYW0gd2lsbCBnZW5lcmF0ZSBhIGNsYXNzcGF0aCB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkIHRoZSB3c2V4cGxvcmVyLndhciBmaWxlLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWlsZENsYXNzcGF0aCBpbXBsZW1lbnRzIElQbGF0Zm9ybVJ1bm5hYmxlCi17Ci0gICAgcHVibGljIE9iamVjdCBydW4oT2JqZWN0IGFyZ3MpIHRocm93cyBFeGNlcHRpb24gCi0gICAgeyAgICAgICAgCi0gICAgICBSZXNvdXJjZUJ1bmRsZSBwbHVnaW5SZXF1aXJlcyA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSggIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5wcm9wZXJ0eS50b29scy5FeHBsb3JlclJlcXVpcmVzIiApOwotICAgICAgRW51bWVyYXRpb24gICAgcmVxdWlyZUtleXMgICA9IHBsdWdpblJlcXVpcmVzLmdldEtleXMoKTsKLSAgICAgIAotICAgICAgd2hpbGUoIHJlcXVpcmVLZXlzLmhhc01vcmVFbGVtZW50cygpICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpcmVxdWlyZUtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgYnVpbGRDbGFzc3BhdGgoIHBsdWdpblJlcXVpcmVzLmdldFN0cmluZyhrZXkpICk7Ci0gICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgIHJldHVybiBJUGxhdGZvcm1SdW5uYWJsZS5FWElUX09LOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgYnVpbGRDbGFzc3BhdGgoIFN0cmluZyBwbHVnaW5JZCApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICBCdW5kbGUgYnVuZGxlICAgID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCBwbHVnaW5JZCApOwotICAgICAgU3RyaW5nIGNsYXNzcGF0aCA9IChTdHJpbmcpYnVuZGxlLmdldEhlYWRlcnMoKS5nZXQoIENvbnN0YW50cy5CVU5ETEVfQ0xBU1NQQVRIICk7Ci0gICAgICBTdHJpbmcgbG9jYXRpb24gID0gYnVuZGxlLmdldExvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgIAotICAgICAgLy8gQWRkIGNsYXNzcGF0aCB0byBsaXN0Ci0gICAgICBNYW5pZmVzdEVsZW1lbnRbXSBjbGFzc3BhdGhzID0gTWFuaWZlc3RFbGVtZW50LnBhcnNlSGVhZGVyKENvbnN0YW50cy5CVU5ETEVfQ0xBU1NQQVRILCBjbGFzc3BhdGgpOwotICAgICAgCi0gICAgICBpZiggY2xhc3NwYXRocyAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNsYXNzcGF0aHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBuZXdQYXRoID0gbnVsbDsKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBXZSBoYXZlIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgU1dUIHBsdWdpbiBzaW5jZSBpdAotICAgICAgICAgIGlmKCBsb2NhdGlvbi5pbmRleE9mKCAib3JnLmVjbGlwc2Uuc3d0IiApICE9IC0xICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEJ1bmRsZVtdIGJ1bmRsZXMgICAgID0gUGxhdGZvcm0uZ2V0RnJhZ21lbnRzKCBidW5kbGUgKTsgIAotICAgICAgICAgICAgICBTdHJpbmcgICBuZXdMb2NhdGlvbiA9IGJ1bmRsZXNbMF0uZ2V0TG9jYXRpb24oKS5zdWJzdHJpbmcoOCk7Ci0gICAgICAgICAgICAgIFN0cmluZyAgIHBhdGggICAgICAgID0gY2xhc3NwYXRoc1tpbmRleF0uZ2V0VmFsdWUoKS5yZXBsYWNlRmlyc3QoICJcXCR3c1xcJCIsICJ3cy93aW4zMiIpOwotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgbmV3UGF0aCA9IG5ld0xvY2F0aW9uICsgcGF0aDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiggbG9jYXRpb24uc3RhcnRzV2l0aCggInVwZGF0ZSIgKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgICBuZXdQYXRoID0gbG9jYXRpb24uc3Vic3RyaW5nKDgpICsgY2xhc3NwYXRoc1tpbmRleF0uZ2V0VmFsdWUoKTsgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoIGxvY2F0aW9uLnN0YXJ0c1dpdGgoICJpbml0aWFsIiApKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmV3UGF0aCA9IGxvY2F0aW9uLnN1YnN0cmluZygyMykgKyBjbGFzc3BhdGhzW2luZGV4XS5nZXRWYWx1ZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmKCBsb2NhdGlvbi5zdGFydHNXaXRoKCAiU3lzdGVtIiApKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YWxsTG9jYXRpb24oKS5nZXRVUkwoKS50b1N0cmluZygpLnN1YnN0cmluZyg2KTsKLSAgICAgICAgICAgICAgbmV3UGF0aCA9IHBsYXRmb3JtTG9jYXRpb24gKyAicGx1Z2lucy9vcmcuZWNsaXBzZS5vc2dpXzMuMC4xLyIgKyBjbGFzc3BhdGhzW2luZGV4XS5nZXRWYWx1ZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBuZXdQYXRoICsgJzsnKTsgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0NvcHlQcm9wZXJ0eUZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0NvcHlQcm9wZXJ0eUZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZWU1MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9Db3B5UHJvcGVydHlGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIENvcHlQcm9wZXJ0eUZpbGVzIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaWxlICAgICAgICBzdGFydFBhdGggICAgID0gbmV3IEZpbGUoIGFyZ3NbMF0gKTsKLSAgICBTdHJpbmdbXSAgICBwbHVnaW5GaWxlcyAgID0gVXRpbHMucmVhZExpbmVzKCBhcmdzWzFdICk7Ci0gICAgU3RyaW5nICAgICAgbmV3UGF0aCAgICAgICA9IGFyZ3NbMl07Ci0gICAgU3RyaW5nICAgICAgcGF0aFJlbGF0aXZlVG89IGFyZ3NbM107Ci0gICAgVmVjdG9yICAgICAgcHJvcGVydHlGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcGx1Z2luRmlsZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcGx1Z2luRGlyICAgICA9IFV0aWxzLmdldEZpbGUoIHN0YXJ0UGF0aCwgcGx1Z2luRmlsZXNbaW5kZXhdICk7Ci0gICAgICAKLSAgICAgIGlmKCBwbHVnaW5EaXIgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIFV0aWxzLmdldEZpbGVzKCBwbHVnaW5EaXIsIHByb3BlcnR5RmlsZXMsICJwcm9wZXJ0aWVzIiwgbmV3IFN0cmluZ1tdeyAiYmluIiwgImJ1aWxkLnByb3BlcnRpZXMiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgZmlsZQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wZXJ0eUZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHByb3BGaWxlICAgID0gKEZpbGUpcHJvcGVydHlGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgU3RyaW5nIHByb3BOYW1lICAgID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgcGx1Z2luSW5kZXggPSBwcm9wTmFtZS5pbmRleE9mKCBwYXRoUmVsYXRpdmVUbyApOwotICAgICAgaW50ICAgIGZpcnN0U2xhc2ggID0gcHJvcE5hbWUuaW5kZXhPZiggIlxcIiwgcGx1Z2luSW5kZXggKTsKLSAgICAgIGludCAgICBuZXh0U2xhc2ggICA9IHByb3BOYW1lLmluZGV4T2YoICJcXCIsIGZpcnN0U2xhc2grMSApOwotICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBmaXJzdFNsYXNoICsgMSwgbmV4dFNsYXNoICk7Ci0gICAgICBpbnQgICAgdW5kZXJJbmRleCAgPSBwbHVnaW5OYW1lLmluZGV4T2YoICdfJyApOwotICAgICAgCi0gICAgICBpZiggdW5kZXJJbmRleCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIHBsdWdpbk5hbWUgPSBwbHVnaW5OYW1lLnN1YnN0cmluZyggMCwgdW5kZXJJbmRleCApOwotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmcgbmV3TmFtZSA9IG5ld1BhdGggKyBGaWxlLnNlcGFyYXRvciArICJwbHVnaW5zIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZS5zZXBhcmF0b3IgKyBwbHVnaW5OYW1lICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICsgcHJvcE5hbWUuc3Vic3RyaW5nKCBuZXh0U2xhc2grMSwgcHJvcE5hbWUubGVuZ3RoKCkgKTsKLSAgICAgIAotICAgICAgRmlsZSAgICAgICAgbmV3RmlsZSA9IG5ldyBGaWxlKCBuZXdOYW1lICk7Ci0gICAgICBGaWxlICAgICAgICBwYXJlbnQgID0gbmV3IEZpbGUoIG5ld0ZpbGUuZ2V0UGFyZW50KCkgKTsKLSAgICAgIFByaW50V3JpdGVyIHdyaXRlciAgPSBudWxsOwotICAgICAgCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50Lm1rZGlycygpOwotICAgICAgICAKLSAgICAgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggbmV3RmlsZSApKTsKLSAgICAgICAgU3RyaW5nW10gbGluZXMgPSBVdGlscy5yZWFkTGluZXMoIHByb3BGaWxlICk7Ci0gICAgICAgIAotICAgICAgICBmb3IoIGludCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBsaW5lcy5sZW5ndGg7IGxpbmVJbmRleCsrICkKLSAgICAgICAgewotICAgICAgICAgIHdyaXRlci5wcmludGxuKCBsaW5lc1tsaW5lSW5kZXhdICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGlmKCB3cml0ZXIgIT0gbnVsbCApIHdyaXRlci5jbG9zZSgpOyAKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZENvbnRleHRJZHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZENvbnRleHRJZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZiNjMwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRDb250ZXh0SWRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGZpbmQgQ29udGV4dCBJRHMgaW4gc291cmNlIGZpbGVzLgotICogYXJnc1swXSA9IFRoZSByb290IGRpcmVjdG9yeSB3aGVyZSBwbHVnaW5zIHNvdXJjZSBkaXJlY3RvcmllcyB3aWxsIGJlIHNlYXJjaGVkLgotICogYXJnc1sxXSA9IEEgZmlsZSBjb250YWluaW5nIHBsdWdpbiBzb3VyY2UgZGlyZWN0b3JpZXMuICBFYWNoIGxpbmUgc2hvdWxkIGNvbnRhaW4KLSAqICAgICAgICAgICBhIHBhdGggdG8gYSBzb3VyY2UgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBhcmdzWzBdIHBhcmFtZXRlci4KLSAqIGFyZ3NbMl0gPSBUaGUgb3V0cHV0IGZpbGUgbmFtZS4KLSAqLwotcHVibGljIGNsYXNzIEZpbmRDb250ZXh0SWRzIAotewotICBwdWJsaWMgdm9pZCBmaW5kSWRzKCBTdHJpbmcgcm9vdERpcmVjdG9yeSwgU3RyaW5nIHNvdXJjZURpcmVjdG9yeU5hbWUsIFN0cmluZyBvdXRwdXRGaWxlTmFtZSApCi0gIHsKLQlGaWxlICAgICAgICBzb3VyY2VEaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoIHNvdXJjZURpcmVjdG9yeU5hbWUgKTsKLQlTdHJpbmdbXSAgICBzcmNEaXJMaW5lcyAgICAgICAgID0gVXRpbHMucmVhZExpbmVzKCBzb3VyY2VEaXJlY3RvcnlGaWxlICk7Ci0JUHJpbnRXcml0ZXIgb3V0cHV0RmlsZSAgICAgICAgICA9IG51bGw7Ci0JCQotCXRyeQotCXsKLQkgIG91dHB1dEZpbGUgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBvdXRwdXRGaWxlTmFtZSApICk7Ci0JCi0JICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3JjRGlyTGluZXMubGVuZ3RoOyBpbmRleCsrICkKLQkgIHsKLQkJU3RyaW5nIHNvdXJjZURpck5hbWUgICA9IHNyY0RpckxpbmVzW2luZGV4XTsKLQkgICAgRmlsZSAgIHNvdXJjZURpcmVjdG9yeSA9IG5ldyBGaWxlKCByb290RGlyZWN0b3J5LCBzb3VyY2VEaXJOYW1lICk7Ci0JICAKLQkgICAgb3V0cHV0RmlsZS5wcmludGxuKCAiPT09PT09PkNvbnRleHQgSURzIGZvciBwbHVnaW4gZGlyZWN0b3J5OiAiICsgc291cmNlRGlyTmFtZSApOwotCSAgICAKLQkgICAgZmluZElkc0ZvcmFEaXJlY3RvcnkoIHNvdXJjZURpcmVjdG9yeSwgb3V0cHV0RmlsZSApOwotCSAgfQotCX0KLQljYXRjaCggRXhjZXB0aW9uIGV4YyApCi0JewotCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlmaW5hbGx5Ci0JewotCSAgaWYoIG91dHB1dEZpbGUgIT0gbnVsbCApCi0JICB7Ci0JICAgIG91dHB1dEZpbGUuY2xvc2UoKTsKLQkgIH0KLQl9Ci0gIH0KLSAgCi0gIHN0YXRpYyBwdWJsaWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbmRDb250ZXh0SWRzIGZpbmRJZHMgPSBuZXcgRmluZENvbnRleHRJZHMoKTsKLSAgICAKLSAgICBpZiggYXJncy5sZW5ndGggIT0gMyApCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRXJyb3I6IGV4cGVjdGluZyBhIHJvb3QgZGlyZWN0b3J5LCB0aGUgc291cmNlIGRpcmVjdG9yeSBmaWxlIG5hbWUsIGFuZCBhbiBvdXRwdXQgZmlsZSBhcyBwYXJhbWV0ZXJzLiIgKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgZmluZElkcy5maW5kSWRzKCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBmaW5kSWRzRm9yYURpcmVjdG9yeSggRmlsZSBzb3VyY2VEaXJlY3RvcnksIFByaW50V3JpdGVyIG91dHB1dEZpbGUgKQotICB7Ci0JVmVjdG9yICBmaWxlcyA9IG5ldyBWZWN0b3IoKTsKLQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCi0gICAgVXRpbHMuZ2V0RmlsZXMoIHNvdXJjZURpcmVjdG9yeSwgZmlsZXMsICJqYXZhIiwgbmV3IFN0cmluZ1swXSApOwotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGZpbGUuCi0gICAgZm9yKCBpbnQgZmlsZUluZGV4ID0gMDsgZmlsZUluZGV4IDwgZmlsZXMuc2l6ZSgpOyBmaWxlSW5kZXgrKyApCi0gICAgewotICAgICAgU3RyaW5nW10gbGluZXMgPSBVdGlscy5yZWFkTGluZXMoIChGaWxlKWZpbGVzLmVsZW1lbnRBdChmaWxlSW5kZXgpICk7CQotICAgICAgCi0gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBsaW5lIGluIHRoZSBmaWxlLgotICAgICAgZm9yKCBpbnQgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgbGluZXMubGVuZ3RoOyBsaW5lSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBsaW5lID0gbGluZXNbbGluZUluZGV4XTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBsaW5lLmluZGV4T2YoIkNPTlRFWFRfSUQiKSAhPSAtMSApCi0gICAgICAgIHsKLSAgICAgICAgICBvdXRwdXRGaWxlLnByaW50bG4oIGxpbmUgKTsKLSAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZvdW5kOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmREdXBsaWNhdGVLZXlzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmREdXBsaWNhdGVLZXlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMmZmZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kRHVwbGljYXRlS2V5cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBGaW5kRHVwbGljYXRlS2V5cyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSAgICAgICAgc3RhcnRQYXRoICAgICA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luRmlsZXMgICA9IFV0aWxzLnJlYWRMaW5lcyggYXJnc1sxXSApOwotICAgIFZlY3RvciAgICAgIHByb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgSGFzaHRhYmxlICAga2V5cyAgICAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBQcmludFdyaXRlciB3cml0ZXIgICAgICAgID0gbnVsbDsKLSAgICBIYXNodGFibGUgICBzcmNLZXlzICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIFZlY3RvciAgICAgIHNyY0ZpbGVzICAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yICAgICAgcHJvcE5hbWVzICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgICAgICBwbHVnaW5OYW1lcyAgID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZ1tdICAgIHBsdWdpbkFycmF5ICAgPSBudWxsOwotICAgIEhhc2h0YWJsZSAgIHNyY1BsdWdpbk1hcCAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggYXJnc1syXSApKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBsdWdpbkZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHBsdWdpbkRpciAgICAgPSBVdGlscy5nZXRGaWxlKCBzdGFydFBhdGgsIHBsdWdpbkZpbGVzW2luZGV4XSApOwotICAgICAgCi0gICAgICBVdGlscy5nZXRGaWxlcyggcGx1Z2luRGlyLCBwcm9wZXJ0eUZpbGVzLCAicHJvcGVydGllcyIsIG5ldyBTdHJpbmdbXXsgImJpbiIsICJidWlsZC5wcm9wZXJ0aWVzIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndzZXhwbG9yZXIucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVkZGkucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndzZGwucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndzaWwucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhdm9yaXRlcy5wcm9wZXJ0aWVzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgICBVdGlscy5nZXRGaWxlcyggcGx1Z2luRGlyLCBzcmNGaWxlcywgImphdmEiLCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgfQotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGZpbGUKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcHJvcGVydHlGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwcm9wRmlsZSA9IChGaWxlKXByb3BlcnR5RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIEZpbGUgICBwYXJlbnQgICA9IG5ldyBGaWxlKCBwcm9wRmlsZS5nZXRQYXJlbnQoKSApOwotICAgICAgCi0gICAgICAvLyBTa2lwIHByb3BlcnRpZXMgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHBsdWdpbiBkaXJlY3RvcnkuCi0gICAgICBpZiggVXRpbHMuc3RyaW5nSW5BcnJheSggcGFyZW50LmdldE5hbWUoKSwgcGx1Z2luRmlsZXMgKSApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmcgcHJvcE5hbWUgPSBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgIGludCAgICBzcmNTdGFydCA9IHByb3BOYW1lLmluZGV4T2YoICJzcmMiICk7Ci0gICAgICAKLSAgICAgIGlmKCBzcmNTdGFydCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIGludCBsYXN0U2xhc2ggPSBwcm9wTmFtZS5sYXN0SW5kZXhPZiggJ1xcJyApOwotICAgICAgICBpbnQgbGFzdERvdCAgID0gcHJvcE5hbWUubGFzdEluZGV4T2YoICcuJyApOwotICAgICAgICBTdHJpbmcgbmFtZSAgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBzcmNTdGFydCArIDQsIGxhc3RTbGFzaCApOwotICAgICAgICBTdHJpbmcgbmFtZTIgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBzcmNTdGFydCArIDQsIGxhc3REb3QgKTsKLSAgICAgICAgbmFtZSAgPSBuYW1lLnJlcGxhY2UoICdcXCcsICcuJyApOyAKLSAgICAgICAgbmFtZTIgPSBuYW1lMi5yZXBsYWNlKCAnXFwnLCAnLicgKTsKLSAgICAgICAgCi0gICAgICAgIHBsdWdpbk5hbWVzLmFkZCggbmFtZSApOwotICAgICAgICBwbHVnaW5OYW1lcy5hZGQoIG5hbWUyICk7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCBwcm9wTmFtZSArICI+PiIgKyBuYW1lICsgIj4+IiArIG5hbWUyICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHBsdWdpbkFycmF5ID0gKFN0cmluZ1tdKXBsdWdpbk5hbWVzLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgICAKLSAgICAvLyBGaW5kIGFsbCB0aGUgamF2YSBzdHJpbmdzLgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcmNGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICAgIHNyY0ZpbGUgICAgID0gKEZpbGUpc3JjRmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFZlY3RvciAgIGZpbGVTcmNLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gbGluZXMgICAgICAgPSBVdGlscy5yZWFkTGluZXMoc3JjRmlsZSApOwotICAgICAgCi0gICAgICBmb3IoIGludCBzcmNJbmRleCA9IDA7IHNyY0luZGV4IDwgbGluZXMubGVuZ3RoOyBzcmNJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgVXRpbHMuZmluZEphdmFTdHJpbmdzKCBsaW5lc1tzcmNJbmRleF0sIGZpbGVTcmNLZXlzICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGZvciggaW50IGtleXNJbmRleCA9IDA7IGtleXNJbmRleCA8IGZpbGVTcmNLZXlzLnNpemUoKTsga2V5c0luZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgIGtleSAgICAgPSAoU3RyaW5nKWZpbGVTcmNLZXlzLmVsZW1lbnRBdCgga2V5c0luZGV4ICk7Ci0gICAgICAgIEhhc2hTZXQgZmlsZVNldCA9IChIYXNoU2V0KXNyY0tleXMuZ2V0KCBrZXkgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBmaWxlU2V0ID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgZmlsZVNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgc3JjS2V5cy5wdXQoIGtleSwgZmlsZVNldCApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggVXRpbHMuc3RyaW5nSW5BcnJheSgga2V5LCBwbHVnaW5BcnJheSApICkKLSAgICAgICAgewotICAgICAgICAgIEhhc2hTZXQgbmFtZXMgPSAoSGFzaFNldClzcmNQbHVnaW5NYXAuZ2V0KCBzcmNGaWxlICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIG5hbWVzID09IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICAgIHNyY1BsdWdpbk1hcC5wdXQoIHNyY0ZpbGUsIG5hbWVzICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIG5hbWVzLmFkZCgga2V5ICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZpbGVTZXQuYWRkKCBzcmNGaWxlICk7Ci0gICAgICB9Ci0gICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaW50IGNvdW50ID0gMTsKLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBmaWxlCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnR5RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcHJvcEZpbGUgPSAoRmlsZSlwcm9wZXJ0eUZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBWZWN0b3IgcHJvcEtleXMgPSBVdGlscy5nZXRQcm9wZXJ0eUtleXMoIHByb3BGaWxlICk7ICAKLSAgICAgIEZpbGUgICBwYXJlbnQgICA9IG5ldyBGaWxlKCBwcm9wRmlsZS5nZXRQYXJlbnQoKSApOwotICAgICAgCi0gICAgICAvLyBTa2lwIHByb3BlcnRpZXMgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHBsdWdpbiBkaXJlY3RvcnkuCi0gICAgICBpZiggVXRpbHMuc3RyaW5nSW5BcnJheSggcGFyZW50LmdldE5hbWUoKSwgcGx1Z2luRmlsZXMgKSApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IHByb3BJbmRleCA9IDA7IHByb3BJbmRleCA8IHByb3BLZXlzLnNpemUoKTsgcHJvcEluZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgcHJvcEtleSA9IChTdHJpbmcpcHJvcEtleXMuZWxlbWVudEF0KCBwcm9wSW5kZXggKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBrZXlzLmNvbnRhaW5zS2V5KHByb3BLZXkpICYmICFwcm9wS2V5LnN0YXJ0c1dpdGgoICJQTFVHSU4iICkpCi0gICAgICAgIHsKLSAgICAgICAgICBGaWxlIG9yaWdGaWxlID0gKEZpbGUpa2V5cy5nZXQoIHByb3BLZXkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBTdHJpbmcgb3JpZ05hbWUgPSBvcmlnRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgICAgICBTdHJpbmcgcHJvcE5hbWUgPSBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgICAgICAKLSAgICAgICAgICBvcmlnTmFtZSA9IG9yaWdOYW1lLnN1YnN0cmluZyggYXJnc1swXS5sZW5ndGgoKSwgb3JpZ05hbWUubGVuZ3RoKCkgKTsKLSAgICAgICAgICBwcm9wTmFtZSA9IHByb3BOYW1lLnN1YnN0cmluZyggYXJnc1swXS5sZW5ndGgoKSwgcHJvcE5hbWUubGVuZ3RoKCkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBIYXNoU2V0IGZpbGVTZXQgPSAoSGFzaFNldClzcmNLZXlzLmdldCggcHJvcEtleSApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBmaWxlU2V0ICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCBjb3VudCArICIgUHJvcGVydHk6ICIgKyBwcm9wS2V5ICsgIiBpcyBpbiBib3RoICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnTmFtZSArICIgYW5kICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BOYW1lICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBmaWxlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHdoaWxlKCBpdGVyLmhhc05leHQoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZpbGUgZmlsZSA9IChGaWxlKWl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbiggIiAgPiIgKyBmaWxlLmdldEFic29sdXRlUGF0aCgpICk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBIYXNoU2V0ICBuYW1lcyA9IChIYXNoU2V0KXNyY1BsdWdpbk1hcC5nZXQoIGZpbGUgKTsKLSAgICAgICAgICAgICAgSXRlcmF0b3IgbmFtZUl0ZXIgPSBuYW1lcy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgd2hpbGUoIG5hbWVJdGVyLmhhc05leHQoKSApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbiggIiAgICA+IiArIG5hbWVJdGVyLm5leHQoKSApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGtleXMucHV0KCBwcm9wS2V5LCBwcm9wRmlsZSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCB3cml0ZXIgIT0gbnVsbCApIHdyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRQZXJjZW50U3RyaW5nLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRQZXJjZW50U3RyaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZGVmOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUGVyY2VudFN0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIEZpbmRQZXJjZW50U3RyaW5nIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaWxlICAgICAgICBzdGFydFBhdGggICAgID0gbmV3IEZpbGUoIGFyZ3NbMF0gKTsKLSAgICBTdHJpbmdbXSAgICBwbHVnaW5GaWxlcyAgID0gVXRpbHMucmVhZExpbmVzKCBhcmdzWzFdICk7Ci0gICAgUHJpbnRXcml0ZXIgd3JpdGVyICAgICAgICA9IG51bGw7Ci0gICAgVmVjdG9yICAgICAgc3JjRmlsZXMgICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBhcmdzWzJdICkpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcGx1Z2luRmlsZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcGx1Z2luRGlyICAgICA9IFV0aWxzLmdldEZpbGUoIHN0YXJ0UGF0aCwgcGx1Z2luRmlsZXNbaW5kZXhdICk7Ci0gICAgICAKLSAgICAgIGlmKCBwbHVnaW5EaXIgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIFV0aWxzLmdldEZpbGVzKCBwbHVnaW5EaXIsIHNyY0ZpbGVzLCAiamF2YSIsIG5ldyBTdHJpbmdbMF0gKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAgICAgCi0gICAgLy8gRmluZCBhbGwgdGhlIGphdmEgc3RyaW5ncy4KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3JjRmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgICBzcmNGaWxlICAgICA9IChGaWxlKXNyY0ZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBWZWN0b3IgICBmaWxlU3JjS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIGxpbmVzICAgICAgID0gVXRpbHMucmVhZExpbmVzKHNyY0ZpbGUgKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgc3JjSW5kZXggPSAwOyBzcmNJbmRleCA8IGxpbmVzLmxlbmd0aDsgc3JjSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFV0aWxzLmZpbmRKYXZhU3RyaW5ncyggbGluZXNbc3JjSW5kZXhdLCBmaWxlU3JjS2V5cyApOwotICAgICAgfQotICAgICAgCi0gICAgICBmb3IoIGludCBrZXlzSW5kZXggPSAwOyBrZXlzSW5kZXggPCBmaWxlU3JjS2V5cy5zaXplKCk7IGtleXNJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nICBrZXkgPSAoU3RyaW5nKWZpbGVTcmNLZXlzLmVsZW1lbnRBdCgga2V5c0luZGV4ICk7Ci0gICAgICAgIAotICAgICAgICBpZigga2V5LnN0YXJ0c1dpdGgoIiUiICkgKQotICAgICAgICB7Ci0gICAgICAgICAgd3JpdGVyLnByaW50bG4oIGtleSArICIgPj4gIiArIHNyY0ZpbGUuZ2V0TmFtZSgpICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYoIHdyaXRlciAhPSBudWxsICkgd3JpdGVyLmNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9ICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZFByb3BlcnR5TW92ZW1lbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZFByb3BlcnR5TW92ZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE2NjM2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRQcm9wZXJ0eU1vdmVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydHlSZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBGaW5kUHJvcGVydHlNb3ZlbWVudCAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmlsZSBvbGRQYXRoICAgID0gbmV3IEZpbGUoIGFyZ3NbMF0gKTsKLSAgICBGaWxlIG5ld1BhdGggICAgPSBuZXcgRmlsZSggYXJnc1sxXSApOwotICAgIEZpbGUgb3V0cHV0RmlsZSA9IG5ldyBGaWxlKCBhcmdzWzJdICk7Ci0gICAKLSAgICBWZWN0b3IgICAgb2xkUHJvcGVydHlGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgICAgbmV3UHJvcGVydHlGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBIYXNodGFibGUgb2xkS2V5TWFwICAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBIYXNodGFibGUgbmV3S2V5TWFwICAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKLSAgICBVdGlscy5nZXRGaWxlcyggb2xkUGF0aCwgb2xkUHJvcGVydHlGaWxlcywgInByb3BlcnRpZXMiLCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgVXRpbHMuZ2V0RmlsZXMoIG5ld1BhdGgsIG5ld1Byb3BlcnR5RmlsZXMsICJwcm9wZXJ0aWVzIiwgbmV3IFN0cmluZ1swXSApOwotCi0gICAgYnVpbGRNYXAoIG9sZFByb3BlcnR5RmlsZXMsIG9sZEtleU1hcCApOwotICAgIGJ1aWxkTWFwKCBuZXdQcm9wZXJ0eUZpbGVzLCBuZXdLZXlNYXAgKTsKLSAgICAKLSAgICBTZXQgICAgICAgICBuZXdLZXlTZXQgPSBuZXdLZXlNYXAuZW50cnlTZXQoKTsKLSAgICBJdGVyYXRvciAgICBpdGVyICAgICAgPSBuZXdLZXlTZXQuaXRlcmF0b3IoKTsKLSAgICBQcmludFdyaXRlciB3cml0ZXIgICAgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIG91dHB1dEZpbGUgKSk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIAotICAgIHdoaWxlKCBpdGVyLmhhc05leHQoKSAmJiB3cml0ZXIgIT0gbnVsbCApCi0gICAgewotICAgICAgTWFwLkVudHJ5IGVudHJ5ICAgICAgID0gKE1hcC5FbnRyeSlpdGVyLm5leHQoKTsKLSAgICAgIFN0cmluZyAgICBwcm9wZXJ0eSAgICA9IChTdHJpbmcpZW50cnkuZ2V0S2V5KCk7Ci0gICAgICBTdHJpbmcgICAgbmV3RmlsZU5hbWUgPSAoU3RyaW5nKWVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICBTdHJpbmcgICAgb2xkRmlsZU5hbWUgPSAoU3RyaW5nKW9sZEtleU1hcC5nZXQoIHByb3BlcnR5ICk7Ci0gICAgICAKLSAgICAgIGlmKCBvbGRGaWxlTmFtZSA9PSBudWxsIHx8IG5ld0ZpbGVOYW1lLmVxdWFscyggb2xkRmlsZU5hbWUgKSApCi0gICAgICB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuICBFaXRoZXIgdGhpcyBrZXkgZGlkbid0IGV4aXN0IGluIHRoZSBvbGQgcHJvcGVydHkKLSAgICAgICAgLy8gZmlsZXMgb3IgdGhpcyBrZXkgaXMgc3RpbGwgaW4gdGhlIHNhbWUgcHJvcGVydHkgZmlsZS4KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgd3JpdGVyLnByaW50bG4oIHByb3BlcnR5ICsgIiAiICsgb2xkRmlsZU5hbWUgKyAiICIgKyBuZXdGaWxlTmFtZSApOyAKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYoIHdyaXRlciAhPSBudWxsICkgd3JpdGVyLmNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIGJ1aWxkTWFwKCBWZWN0b3IgaW5wdXRGaWxlcywgSGFzaHRhYmxlIGtleU1hcCApCi0gIHsKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgaW5wdXRGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICAgICAgIHByb3BGaWxlICAgID0gKEZpbGUpaW5wdXRGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgU3RyaW5nICAgICAgcHJvcE5hbWUgICAgPSBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgIGludCAgICAgICAgIHBsdWdpbkluZGV4ID0gcHJvcE5hbWUuaW5kZXhPZiggInBsdWdpbnMiICk7Ci0gICAgICBTdHJpbmcgICAgICBwcm9wU3RyaW5nICA9IHByb3BOYW1lLnN1YnN0cmluZyggcGx1Z2luSW5kZXgsIHByb3BOYW1lLmxlbmd0aCgpICk7ICAgICAgCi0gICAgICBJbnB1dFN0cmVhbSBzdHJlYW0gICAgICA9IG51bGw7Ci0gICAgICAKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBzdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBwcm9wRmlsZSApOwotICAgICAgICBQcm9wZXJ0eVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IG5ldyBQcm9wZXJ0eVJlc291cmNlQnVuZGxlKCBzdHJlYW0gKTsKLSAgICAgICAgCi0gICAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBidW5kbGUuZ2V0S2V5cygpOwotICAgICAgICAKLSAgICAgICAgd2hpbGUoIGtleXMuaGFzTW9yZUVsZW1lbnRzKCkgKQotICAgICAgICB7Ci0gICAgICAgICAga2V5TWFwLnB1dCgga2V5cy5uZXh0RWxlbWVudCgpLCBwcm9wU3RyaW5nICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGlmKCBzdHJlYW0gIT0gbnVsbCApIHN0cmVhbS5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgICAgewotICAgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvR2VuUGx1Z2luUHJvcGVydGllc0Zyb21QbHVnaW5YbWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvR2VuUGx1Z2luUHJvcGVydGllc0Zyb21QbHVnaW5YbWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2ZGRmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0dlblBsdWdpblByb3BlcnRpZXNGcm9tUGx1Z2luWG1sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLQotcHVibGljIGNsYXNzIEdlblBsdWdpblByb3BlcnRpZXNGcm9tUGx1Z2luWG1sIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaWxlICAgICBzdGFydFBhdGggPSBuZXcgRmlsZSggYXJnc1swXSApOwotICAgIFN0cmluZ1tdIHBsdWdpbkZpbGVzID0gVXRpbHMucmVhZExpbmVzKCBhcmdzWzFdICk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBsdWdpbkZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgU3RyaW5nIGZpbGVuYW1lID0gcGx1Z2luRmlsZXNbaW5kZXhdOwotICAgICAgCi0gICAgICBIYXNoU2V0IGtleXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgRmlsZSAgICBkaXIgID0gVXRpbHMuZ2V0RmlsZSggc3RhcnRQYXRoLCBmaWxlbmFtZSApOwotICAgICAgRmlsZSAgICBmaWxlID0gVXRpbHMuZ2V0RmlsZSggZGlyLCAicGx1Z2luLnhtbCIgKTsKLQotICAgICAgaWYoIGZpbGUgPT0gbnVsbCApIGNvbnRpbnVlOwotICAgICAgCi0gICAgICBVdGlscy5nZXRQbHVnaW5YTUxLZXlzKCBmaWxlLCBrZXlzICk7Ci0KLSAgICAgIEZpbGUgcHJvcGZpbGUgPSBVdGlscy5nZXRGaWxlKCBkaXIsICJwbHVnaW4ucHJvcGVydGllcyIgKTsKLSAgICAgIAotICAgICAgaWYoIGtleXMuc2l6ZSgpID4gMCAmJiBwcm9wZmlsZSA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJObyBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGZvcjoiICsgZmlsZSApOwotICAgICAgICAgIHByb3BmaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSggInByZWZpeCIsICJzdWZmaXgiICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBrZXlzLnNpemUoKSA9PSAwICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgIEZpbGUgICAgICAgICAgIG91dHB1dEZpbGUgPSBuZXcgRmlsZSggZGlyLmdldEFic29sdXRlUGF0aCgpICsgRmlsZS5zZXBhcmF0b3IgKyAicGx1Z2luLnByb3BlcnRpZXMubmV3IiApOwotICAgICAgRmlsZSAgICAgICAgICAgZGVsRmlsZSA9IG5ldyBGaWxlKCBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkgKyBGaWxlLnNlcGFyYXRvciArICJwbHVnaW4ucHJvcGVydGllcy5kZWwiICk7Ci0gICAgICBQcmludFdyaXRlciB3cml0ZXIgICAgID0gbnVsbDsKLSAgICAgIFByaW50V3JpdGVyIGRlbFdyaXRlciAgPSBudWxsOwotICAgICAgCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggb3V0cHV0RmlsZSApICk7Ci0gICAgICAgIGRlbFdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIGRlbEZpbGUgKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkdlbmVyYXRpbmcgb3V0cHV0IHRvOiIgKyBvdXRwdXRGaWxlICk7Ci0gICAgICAgIFV0aWxzLmNyZWF0ZU91dHB1dEZpbGUoIGtleXMsIHByb3BmaWxlLCB3cml0ZXIsIGRlbFdyaXRlciApOwotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7IAotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGlmKCB3cml0ZXIgIT0gbnVsbCApIHdyaXRlci5jbG9zZSgpOwotICAgICAgICAgIGlmKCBkZWxXcml0ZXIgIT0gbnVsbCApIGRlbFdyaXRlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgICAgewotICAgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgfSAgICAgIAotICAgIH0KLSAgfSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0xpc3RQcm9wZXJ0eUZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0xpc3RQcm9wZXJ0eUZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMGE2YzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9MaXN0UHJvcGVydHlGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIExpc3RQcm9wZXJ0eUZpbGVzIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaWxlICAgICAgICBzdGFydFBhdGggICAgID0gbmV3IEZpbGUoIGFyZ3NbMF0gKTsKLSAgICBWZWN0b3IgICAgICBwcm9wZXJ0eUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIFV0aWxzLmdldEZpbGVzKCBzdGFydFBhdGgsIHByb3BlcnR5RmlsZXMsICJiYWNrdXAiLCBuZXcgU3RyaW5nW117ICJiaW4iLCAiYnVpbGQucHJvcGVydGllcyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGZpbGUKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcHJvcGVydHlGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwcm9wRmlsZSAgICA9IChGaWxlKXByb3BlcnR5RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFN0cmluZyBwcm9wTmFtZSAgICA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgaW50ICAgIHBsdWdpbkluZGV4ID0gcHJvcE5hbWUuaW5kZXhPZiggInBsdWdpbnMiICk7Ci0gICAgICBpbnQgICAgZmlyc3RTbGFzaCAgPSBwcm9wTmFtZS5pbmRleE9mKCAiXFwiLCBwbHVnaW5JbmRleCApOwotICAgICAgaW50ICAgIG5leHRTbGFzaCAgID0gcHJvcE5hbWUuaW5kZXhPZiggIlxcIiwgZmlyc3RTbGFzaCsxICk7Ci0gICAgICBTdHJpbmcgcGx1Z2luTmFtZSAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIGZpcnN0U2xhc2ggKyAxLCBuZXh0U2xhc2ggKTsKLSAgICAgIGludCAgICB1bmRlckluZGV4ICA9IHBsdWdpbk5hbWUuaW5kZXhPZiggJ18nICk7Ci0gICAgICAKLSAgICAgIGlmKCB1bmRlckluZGV4ICE9IC0xICkKLSAgICAgIHsKLSAgICAgICAgcGx1Z2luTmFtZSA9IHBsdWdpbk5hbWUuc3Vic3RyaW5nKCAwLCB1bmRlckluZGV4ICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFN0cmluZyBuZXdOYW1lID0gImRlbCAgcGx1Z2lucyIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgRmlsZS5zZXBhcmF0b3IgKyBwbHVnaW5OYW1lICsKLSAgICAgICAgICAgICAgICAgICAgICAgRmlsZS5zZXBhcmF0b3IgKyBwcm9wTmFtZS5zdWJzdHJpbmcoIG5leHRTbGFzaCsxLCBwcm9wTmFtZS5sZW5ndGgoKSApOwotCi0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIG5ld05hbWUgKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvUmVtb3ZlQnJhY2tldHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvUmVtb3ZlQnJhY2tldHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM1NjgyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1JlbW92ZUJyYWNrZXRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuYXd0LkJ1dHRvbjsKLWltcG9ydCBqYXZhLmF3dC5FdmVudDsKLWltcG9ydCBqYXZhLmF3dC5GcmFtZTsKLWltcG9ydCBqYXZhLmF3dC5HcmlkTGF5b3V0OwotaW1wb3J0IGphdmEuYXd0LlRleHRBcmVhOwotaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OwotaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkxpc3RlbmVyOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlQnJhY2tldHMgZXh0ZW5kcyBGcmFtZSAKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzNjE3MjkyMzIwMjk5ODI0MTc2TDsKLSAgcHJpdmF0ZSBUZXh0QXJlYSBpbnB1dEFyZWFfOwotICBwcml2YXRlIFRleHRBcmVhIG91dHB1dEFyZWFfOwotICBwcml2YXRlIEJ1dHRvbiAgIGJ1dHRvbl87Ci0gIAotICBwdWJsaWMgUmVtb3ZlQnJhY2tldHMoKQotICB7Ci0gIAlzdXBlciggIkNvbnZlcnQgSFRNTCBicmFja2V0cyIgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgCi0gIHsKLSAgCVJlbW92ZUJyYWNrZXRzIGNvbnZlcnQgPSBuZXcgUmVtb3ZlQnJhY2tldHMoKTsKLSAgCQotICAJY29udmVydC5idWlsZFVJKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBidWlsZFVJKCkKLSAgewotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMywxKTsKLSAgICAvL2xheW91dC5zZXRDb2x1bW5zKDEpOwotICAgIHNldExheW91dCggbGF5b3V0ICk7Ci0gICAgCi0gICAgaW5wdXRBcmVhXyAgPSBuZXcgVGV4dEFyZWEoIDEwLCA1MCApOwotICAgIG91dHB1dEFyZWFfID0gbmV3IFRleHRBcmVhKCAxMCwgNTAgKTsKLSAgICBidXR0b25fICAgICA9IG5ldyBCdXR0b24oICJQcmVzcyBoZXJlIHRvIGNvbnZlcnQgdG8gSFRNTCIgKTsKLSAgICAKLSAgICBpbnB1dEFyZWFfLnNldEVkaXRhYmxlKCB0cnVlICk7Ci0gICAgb3V0cHV0QXJlYV8uc2V0RWRpdGFibGUoIHRydWUgKTsKLSAgICBidXR0b25fLmFkZEFjdGlvbkxpc3RlbmVyKCBuZXcgQWN0aW9uTGlzdGVuZXIoKQotICAgIAkJICAgICAgICAgICAgICAgICAgIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZCggQWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAJICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRleHQoKTsKLSAgICAJICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAJCSAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAKLSAgICBhZGQoIGlucHV0QXJlYV8gKTsKLSAgICBhZGQoIGJ1dHRvbl8gKTsKLSAgICBhZGQoIG91dHB1dEFyZWFfICk7Ci0gICAgLy9zZXRTaXplKCAxMDAsIDEwMCApOwotICAgIHBhY2soKTsKLSAgICBzaG93KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGhhbmRsZUV2ZW50KCBFdmVudCBldnQgKQotICB7Ci0gICAgaWYoIGV2dC5pZCA9PSBFdmVudC5XSU5ET1dfREVTVFJPWSApCi0gICAgewotICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgY29udmVydFRleHQoKQotICB7Ci0gIAlTdHJpbmcgaW5wdXRTdHJpbmcgPSBpbnB1dEFyZWFfLmdldFRleHQoKTsKLSAgCVN0cmluZyBvdXRwdXRTdHJpbmcgPSBpbnB1dFN0cmluZy5yZXBsYWNlQWxsKCAiPCIsICImbHQ7Iik7Ci0gIAkKLSAgCW91dHB1dFN0cmluZyA9IG91dHB1dFN0cmluZy5yZXBsYWNlQWxsKCAiPiIsICImZ3Q7IiApOwotICAJCi0gIAlvdXRwdXRBcmVhXy5zZXRUZXh0KCBvdXRwdXRTdHJpbmcgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVVbnVzZWRLZXlzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1JlbW92ZVVudXNlZEtleXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJlYTg2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1JlbW92ZVVudXNlZEtleXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBSZW1vdmVVbnVzZWRLZXlzIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaWxlICAgICAgICBzdGFydFBhdGggICAgID0gbmV3IEZpbGUoIGFyZ3NbMF0gKTsKLSAgICBTdHJpbmdbXSAgICBwbHVnaW5GaWxlcyAgID0gVXRpbHMucmVhZExpbmVzKCBhcmdzWzFdICk7Ci0gICAgVmVjdG9yICAgICAgcHJvcGVydHlGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBIYXNodGFibGUgICBrZXlzICAgICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIEhhc2h0YWJsZSAgIHNyY0tleXMgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgVmVjdG9yICAgICAgc3JjRmlsZXMgICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgICAgICBwcm9wTmFtZXMgICAgID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciAgICAgIHBsdWdpbk5hbWVzICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luQXJyYXkgICA9IG51bGw7Ci0gICAgSGFzaHRhYmxlICAgc3JjUGx1Z2luTWFwICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKLSAgICAKLSAgICAvLyBGaW5kIGFsbCB0aGUgcHJvcGVydHkgZmlsZXMuCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBsdWdpbkZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHBsdWdpbkRpciAgICAgPSBVdGlscy5nZXRGaWxlKCBzdGFydFBhdGgsIHBsdWdpbkZpbGVzW2luZGV4XSApOwotICAgICAgCi0gICAgICBpZiggcGx1Z2luRGlyID09IG51bGwgKQotICAgICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJQbHVnaW46ICIgKyBwbHVnaW5GaWxlc1tpbmRleF0gKyAiIG5vdCBmb3VuZCEiICk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBVdGlscy5nZXRGaWxlcyggcGx1Z2luRGlyLCBwcm9wZXJ0eUZpbGVzLCAicHJvcGVydGllcyIsIG5ldyBTdHJpbmdbXXsgImJpbiIsICJidWlsZC5wcm9wZXJ0aWVzIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndzZXhwbG9yZXIucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVkZGkucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndzZGwucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndzaWwucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhdm9yaXRlcy5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV3cHJvcHMucHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbHByb3BzLnByb3BlcnRpZXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgc3JjRmlsZXMsICJqYXZhIiwgbmV3IFN0cmluZ1swXSApOwotICAgIH0KLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBmaWxlCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnR5RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcHJvcEZpbGUgPSAoRmlsZSlwcm9wZXJ0eUZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBGaWxlICAgcGFyZW50ICAgPSBuZXcgRmlsZSggcHJvcEZpbGUuZ2V0UGFyZW50KCkgKTsKLSAgICAgIAotICAgICAgLy8gU2tpcCBwcm9wZXJ0aWVzIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBwbHVnaW4gZGlyZWN0b3J5LgotICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIHBhcmVudC5nZXROYW1lKCksIHBsdWdpbkZpbGVzICkgKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nIHByb3BOYW1lID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgc3JjU3RhcnQgPSBwcm9wTmFtZS5pbmRleE9mKCAic3JjIiApOwotICAgICAgCi0gICAgICBpZiggc3JjU3RhcnQgIT0gLTEgKQotICAgICAgewotICAgICAgICBpbnQgbGFzdFNsYXNoID0gcHJvcE5hbWUubGFzdEluZGV4T2YoICdcXCcgKTsKLSAgICAgICAgaW50IGxhc3REb3QgICA9IHByb3BOYW1lLmxhc3RJbmRleE9mKCAnLicgKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgICA9IHByb3BOYW1lLnN1YnN0cmluZyggc3JjU3RhcnQgKyA0LCBsYXN0U2xhc2ggKTsKLSAgICAgICAgU3RyaW5nIG5hbWUyICA9IHByb3BOYW1lLnN1YnN0cmluZyggc3JjU3RhcnQgKyA0LCBsYXN0RG90ICk7Ci0gICAgICAgIG5hbWUgID0gbmFtZS5yZXBsYWNlKCAnXFwnLCAnLicgKTsgCi0gICAgICAgIG5hbWUyID0gbmFtZTIucmVwbGFjZSggJ1xcJywgJy4nICk7Ci0gICAgICAgIAotICAgICAgICBwbHVnaW5OYW1lcy5hZGQoIG5hbWUgKTsKLSAgICAgICAgcGx1Z2luTmFtZXMuYWRkKCBuYW1lMiApOwotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbiggcHJvcE5hbWUgKyAiPj4iICsgbmFtZSArICI+PiIgKyBuYW1lMiApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwbHVnaW5BcnJheSA9IChTdHJpbmdbXSlwbHVnaW5OYW1lcy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgCi0gICAgLy8gRmluZCBhbGwgdGhlIGphdmEgc3RyaW5ncy4KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc3JjRmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgICBzcmNGaWxlICAgICA9IChGaWxlKXNyY0ZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBWZWN0b3IgICBmaWxlU3JjS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIGxpbmVzICAgICAgID0gVXRpbHMucmVhZExpbmVzKHNyY0ZpbGUgKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgc3JjSW5kZXggPSAwOyBzcmNJbmRleCA8IGxpbmVzLmxlbmd0aDsgc3JjSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFV0aWxzLmZpbmRKYXZhU3RyaW5ncyggbGluZXNbc3JjSW5kZXhdLCBmaWxlU3JjS2V5cyApOwotICAgICAgfQotICAgICAgCi0gICAgICBmb3IoIGludCBrZXlzSW5kZXggPSAwOyBrZXlzSW5kZXggPCBmaWxlU3JjS2V5cy5zaXplKCk7IGtleXNJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nICBrZXkgICAgID0gKFN0cmluZylmaWxlU3JjS2V5cy5lbGVtZW50QXQoIGtleXNJbmRleCApOwotICAgICAgICBIYXNoU2V0IGZpbGVTZXQgPSAoSGFzaFNldClzcmNLZXlzLmdldCgga2V5ICk7Ci0gICAgICAgIAotICAgICAgICBpZiggZmlsZVNldCA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGZpbGVTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgIHNyY0tleXMucHV0KCBrZXksIGZpbGVTZXQgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIGtleSwgcGx1Z2luQXJyYXkgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBIYXNoU2V0IG5hbWVzID0gKEhhc2hTZXQpc3JjUGx1Z2luTWFwLmdldCggc3JjRmlsZSApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBuYW1lcyA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgICBzcmNQbHVnaW5NYXAucHV0KCBzcmNGaWxlLCBuYW1lcyApOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBuYW1lcy5hZGQoIGtleSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaWxlU2V0LmFkZCggc3JjRmlsZSApOwotICAgICAgfQotICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGludCBjb3VudCA9IDE7Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgZmlsZQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wZXJ0eUZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHByb3BGaWxlID0gKEZpbGUpcHJvcGVydHlGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgVmVjdG9yIHByb3BLZXlzID0gVXRpbHMuZ2V0UHJvcGVydHlLZXlzKCBwcm9wRmlsZSApOyAgCi0gICAgICBGaWxlICAgcGFyZW50ICAgPSBuZXcgRmlsZSggcHJvcEZpbGUuZ2V0UGFyZW50KCkgKTsKLSAgICAgIAotICAgICAgLy8gU2tpcCBwcm9wZXJ0aWVzIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBwbHVnaW4gZGlyZWN0b3J5LgotICAgICAgaWYoIFV0aWxzLnN0cmluZ0luQXJyYXkoIHBhcmVudC5nZXROYW1lKCksIHBsdWdpbkZpbGVzICkgKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgU3RyaW5nIHByb3BOYW1lICAgPSBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgIGludCAgICBzcmNTdGFydCAgID0gcHJvcE5hbWUuaW5kZXhPZiggInNyYyIgKTsKLSAgICAgIFN0cmluZyBmb2xkZXJOYW1lID0gIiI7Ci0gICAgICBTdHJpbmcgcGtnTmFtZSAgPSAiIjsKLSAgICAgIAotICAgICAgaWYoIHNyY1N0YXJ0ICE9IC0xICkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RTbGFzaCA9IHByb3BOYW1lLmxhc3RJbmRleE9mKCAnXFwnICk7Ci0gICAgICAgIFN0cmluZyBuYW1lICAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHNyY1N0YXJ0ICsgNCwgbGFzdFNsYXNoICk7Ci0gICAgICAgIG5hbWUgID0gbmFtZS5yZXBsYWNlKCAnXFwnLCAnLicgKTsgCi0gICAgICAgIAotICAgICAgICBwa2dOYW1lICAgID0gbmFtZTsKLSAgICAgICAgZm9sZGVyTmFtZSA9IHByb3BOYW1lLnN1YnN0cmluZyggMCwgbGFzdFNsYXNoICsgMSApOyAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKLSAgICAgIAotICAgICAgU3RyaW5nIG5ld1Byb3BOYW1lID0gZm9sZGVyTmFtZSArICJuZXdwcm9wcy5wcm9wZXJ0aWVzIjsKLSAgICAgIFN0cmluZyBkZWxQcm9wTmFtZSA9IGZvbGRlck5hbWUgKyAiZGVscHJvcHMucHJvcGVydGllcyI7Ci0gICAgICAKLSAgICAgIFByaW50V3JpdGVyIG5ld1Byb3BlcnR5RmlsZSA9IG51bGw7Ci0gICAgICBQcmludFdyaXRlciBkZWxQcm9wZXJ0eUZpbGUgPSBudWxsOwotICAgICAgICAKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBuZXdQcm9wZXJ0eUZpbGUgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBuZXdQcm9wTmFtZSApKTsKLSAgICAgICAgZGVsUHJvcGVydHlGaWxlID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggZGVsUHJvcE5hbWUgKSk7Ci0gICAgICAgIAotICAgICAgICBVdGlscy5jcmVhdGVPdXRwdXRGaWxlKCBzcmNLZXlzLmtleVNldCgpLCBwcm9wRmlsZSwgbmV3UHJvcGVydHlGaWxlLCBkZWxQcm9wZXJ0eUZpbGUgKTsKLSAgICAgICAgCi0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOyAKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYoIG5ld1Byb3BlcnR5RmlsZSAhPSBudWxsICkgbmV3UHJvcGVydHlGaWxlLmNsb3NlKCk7Ci0gICAgICAgIGlmKCBkZWxQcm9wZXJ0eUZpbGUgIT0gbnVsbCApIGRlbFByb3BlcnR5RmlsZS5jbG9zZSgpOwotICAgICAgfSAgICAgCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1VwZGF0ZUZlYXR1cmVYTUxGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VcGRhdGVGZWF0dXJlWE1MRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmYWVlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1VwZGF0ZUZlYXR1cmVYTUxGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIFVwZGF0ZUZlYXR1cmVYTUxGaWxlcyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gIAlTdHJpbmcgcm9vdFBhdGggICAgID0gYXJnc1swXTsKLSAgCUZpbGUgICByb290RmlsZSAgICAgPSBuZXcgRmlsZSggcm9vdFBhdGggKTsKLSAgCVZlY3RvciBmZWF0dXJlRmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIAkKLSAgCWdldEZpbGVzKCBmZWF0dXJlRmlsZXMsIHJvb3RGaWxlICk7Ci0gIAkKLSAgCWludCBzaXplID0gZmVhdHVyZUZpbGVzLnNpemUoKTsKLSAgCQotICAJZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7IGluZGV4KysgKQotICAJewotICAJICBGaWxlICAgICBmaWxlICAgICAgPSAoRmlsZSlmZWF0dXJlRmlsZXMuZWxlbWVudEF0KCBpbmRleCApOwotICAJICBTdHJpbmcgICBmaWxlTmFtZSAgPSBmaWxlLmdldE5hbWUoKTsKLSAgCSAgaW50ICAgICAgbGFuZ0luZGV4ID0gZmlsZU5hbWUuaW5kZXhPZiggImZlYXR1cmVfIiApOwotICAJICBpbnQgICAgICBkb3RJbmRleCAgPSBmaWxlTmFtZS5pbmRleE9mKCAnLicsIGxhbmdJbmRleCApOwotICAJICBTdHJpbmcgICBsYW5nICAgICAgPSBmaWxlTmFtZS5zdWJzdHJpbmcoIGxhbmdJbmRleCArIDgsIGRvdEluZGV4ICk7Ci0gIAkgIFN0cmluZ1tdIGxpbmVzICAgICA9IFV0aWxzLnJlYWRMaW5lcyggZmlsZSApOwotICAJICAKLQkgIFByaW50V3JpdGVyIHdyaXRlciAgICAgPSBudWxsOwotICAJICBGaWxlV3JpdGVyICBmaWxlV3JpdGVyID0gbnVsbDsKLSAgCSAgCi0gIAkgIHRyeQotCSAgewotCSAgICBmaWxlV3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoIGZpbGUgKTsKLSAgCSAgICB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIGZpbGVXcml0ZXIgKTsKLSAgCSAgICAKLSAgCSAgICBmb3IoIGludCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBsaW5lcy5sZW5ndGg7IGxpbmVJbmRleCsrICkKLSAgCSAgICB7Ci0gIAkgIAkgIFN0cmluZyBsaW5lID0gbGluZXNbbGluZUluZGV4XTsKLSAgCSAgCQotICAJICAJICBpZiggbGluZS5pbmRleE9mKCAibGljZW5zZVVSTCIgKSAhPSAtMSApCi0gIAkgIAkgIHsKLSAgCSAgCQl3cml0ZXIucHJpbnRsbiggImxpY2Vuc2VVUkw9bGljZW5zZV8iICsgbGFuZyArICIuaHRtbCIgKTsKLSAgCSAgCSAgfQotICAJICAJICBlbHNlCi0gIAkgIAkgIHsKLSAgCSAgCQl3cml0ZXIucHJpbnRsbiggbGluZSApOwotICAJICAJICB9Ci0gIAkgICAgfQotCSAgfQotICAJICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0JICB7Ci0gIAkgIAlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9Ci0gIAkgIGZpbmFsbHkKLQkgIHsKLSAgCSAgCXRyeQotCQl7Ci0gIAkgIAkgIHdyaXRlci5jbG9zZSgpOwotICAJICAJICBmaWxlV3JpdGVyLmNsb3NlKCk7Ci0JCX0KLSAgCSAgCWNhdGNoKCBFeGNlcHRpb24gZXhjICkKLQkJewotICAJICAJICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkgIH0KLSAgCX0KLSAgfQotICAKLSAgc3RhdGljIHByaXZhdGUgdm9pZCBnZXRGaWxlcyggVmVjdG9yIGZpbGVzLCBGaWxlIHBhdGggKQotICB7Ci0gICAgaWYoIHBhdGguaXNEaXJlY3RvcnkoKSApCi0gICAgewotICAgICAgRmlsZVtdIGNoaWxkcmVuID0gcGF0aC5saXN0RmlsZXMoKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAJZ2V0RmlsZXMoIGZpbGVzLCBjaGlsZHJlbltpbmRleF0gKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBwYXRoTmFtZSA9IHBhdGguZ2V0TmFtZSgpOwotICAgICAgICAgICAgCi0gICAgICBpbnQgICAgaW5kZXggICAgPSBwYXRoTmFtZS5pbmRleE9mKCAiZmVhdHVyZV8iICk7Ci0gICAgICAKLSAgICAgIGlmKCBpbmRleCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAJZmlsZXMuYWRkKCBwYXRoICk7Ci0gICAgICB9Ci0gICAgfSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvVXRpbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyMGRiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydHlSZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgVXRpbHMgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVPdXRwdXRGaWxlKCBDb2xsZWN0aW9uIGtleXMsIEZpbGUgcHJvcHNGaWxlLCBQcmludFdyaXRlciBvdXRwdXRGaWxlLCBQcmludFdyaXRlciBkZWxldGVGaWxlICkKLSAgewotICAgIFN0cmluZ1tdIGxpbmVzICAgICAgICA9IHJlYWRMaW5lcyggcHJvcHNGaWxlICk7Ci0gICAgYm9vbGVhbiAgY29udGludWVMaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiAgZGVsZXRlS2V5ICAgID0gZmFsc2U7Ci0gICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZyAgIGxpbmUgPSBsaW5lc1tpbmRleF0udHJpbSgpOwotICAgICAgCi0gICAgICBpZiggY29udGludWVMaW5lICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWVMaW5lID0gbGluZS5lbmRzV2l0aCggIlxcIiApOwotICAgICAgICAKLSAgICAgICAgaWYoICFkZWxldGVLZXkgKQotICAgICAgICB7Ci0gICAgICAgICAgb3V0cHV0RmlsZS5wcmludGxuKCBsaW5lICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZGVsZXRlRmlsZS5wcmludGxuKCBsaW5lICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBjb250aW51ZUxpbmUgPSBsaW5lLmVuZHNXaXRoKCAiXFwiICk7Ci0gICAgICAKLSAgICAgIGJvb2xlYW4gIHZhbGlkS2V5ICAgICA9IGlzTGluZUtleSgga2V5cywgbGluZSApOwotICAgICAgYm9vbGVhbiAgaGFzS2V5ICAgICAgID0gbGluZS5pbmRleE9mKCAnPScgKSAhPSAtMTsKLSAgICAgIAotICAgICAgaWYoIHZhbGlkS2V5ICkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0RmlsZS5wcmludGxuKCBsaW5lICk7Ci0gICAgICAgIGRlbGV0ZUtleSA9IGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZSBpZiggaGFzS2V5ICkKLSAgICAgIHsKLSAgICAgICAgZGVsZXRlS2V5ID0gdHJ1ZTsKLSAgICAgICAgZGVsZXRlRmlsZS5wcmludGxuKCBsaW5lICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG91dHB1dEZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTGluZUtleSggQ29sbGVjdGlvbiBrZXlzLCBTdHJpbmcgbGluZSApCi0gIHsKLSAgICBib29sZWFuICByZXN1bHQgPSBmYWxzZTsKLSAgICBJdGVyYXRvciBpdGVyICAgPSBrZXlzLml0ZXJhdG9yKCk7Ci0gICAgaW50ICAgICAgZXF1YWxJbmRleCA9IGxpbmUuaW5kZXhPZiggJz0nICk7Ci0gICAgU3RyaW5nICAga2V5ICAgICAgICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIGVxdWFsSW5kZXggIT0gLTEgJiYgIWxpbmUuc3RhcnRzV2l0aCggIiMiICkpCi0gICAgewotICAgICAga2V5ID0gbGluZS5zdWJzdHJpbmcoIDAsIGVxdWFsSW5kZXggKTsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUoIGl0ZXIuaGFzTmV4dCgpICYmIGtleSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBTdHJpbmcgY29sbGVjdGlvbktleSA9IChTdHJpbmcpaXRlci5uZXh0KCk7Ci0gICAgICBpZigga2V5LmVxdWFscyggY29sbGVjdGlvbktleSApIHx8IGNvbGxlY3Rpb25LZXkuZXF1YWxzKCAnJScgKyBrZXkgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgZ2V0UGx1Z2luWE1MS2V5cyggRmlsZSBmaWxlLCBIYXNoU2V0IGtleXMgKQotICB7Ci0gICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKCBmaWxlICkgKTsKLSAgICAgIAotICAgICAgU3RyaW5nIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgIAotICAgICAgd2hpbGUoIGxpbmUgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIFZlY3RvciBsaW5la2V5cyA9IGZpbmRLZXlzKCBsaW5lICk7Ci0gICAgICAgIGtleXMuYWRkQWxsKCBsaW5la2V5cyApOwotICAgICAgICBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYoIHJlYWRlciAhPSBudWxsICkgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgRmlsZSBnZXRGaWxlKCBGaWxlIGJhc2UsIGZpbmFsIFN0cmluZyBjaGlsZCApCi0gIHsKLSAgICBGaWxlW10gZmlsZSA9IGJhc2UubGlzdEZpbGVzKCBuZXcgRmlsZW5hbWVGaWx0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdCggRmlsZSBmaWxlLCBTdHJpbmcgbmFtZSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IG5hbWUuaW5kZXhPZiggJ18nICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggaW5kZXggIT0gLTEgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKCAwLCBpbmRleCApOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lLmVuZHNXaXRoKCBjaGlsZCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICByZXR1cm4gZmlsZS5sZW5ndGggPT0gMCA/IG51bGwgOiBmaWxlWzBdOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFZlY3RvciBmaW5kS2V5cyggU3RyaW5nIGxpbmUgKQotICB7Ci0gICAgVmVjdG9yIGtleXMgICAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaW50ICAgIHF1b3Rlc3RhcnQgPSBsaW5lLmluZGV4T2YoICciJyApOwotICAgIGludCAgICBxdW90ZWVuZCAgID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3Rlc3RhcnQgKyAxICk7Ci0gICAgCi0gICAgd2hpbGUoIHF1b3Rlc3RhcnQgIT0gLTEgJiYgcXVvdGVlbmQgIT0gLTEgJiYgcXVvdGVzdGFydCA8IHF1b3RlZW5kICkKLSAgICB7Ci0gICAgICBTdHJpbmcga2V5ID0gbGluZS5zdWJzdHJpbmcoIHF1b3Rlc3RhcnQrMSwgcXVvdGVlbmQgKTsKLSAgICAgIAotICAgICAgaWYoIGtleS5zdGFydHNXaXRoKCAiJSIpICkKLSAgICAgIHsKLSAgICAgICAga2V5cy5hZGQoIGtleS5zdWJzdHJpbmcoMSwga2V5Lmxlbmd0aCgpICkgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcXVvdGVzdGFydCA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZWVuZCsxICk7Ci0gICAgICBxdW90ZWVuZCAgID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3Rlc3RhcnQrMSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4ga2V5czsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGZpbmRKYXZhU3RyaW5ncyggU3RyaW5nIGxpbmUsIFZlY3RvciBrZXlzICkKLSAgewotICAgIGludCAgICBxdW90ZXN0YXJ0ID0gbGluZS5pbmRleE9mKCAnIicgKTsKLSAgICBpbnQgICAgcXVvdGVlbmQgICA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZXN0YXJ0ICsgMSApOwotICAgIAotICAgIHdoaWxlKCBxdW90ZXN0YXJ0ICE9IC0xICYmIHF1b3RlZW5kICE9IC0xICYmIHF1b3Rlc3RhcnQgPCBxdW90ZWVuZCApCi0gICAgewotICAgICAgLy8gRmluZCBsYXN0IHJlYWwgZW5kaW5nIHF1b3RlLgotICAgICAgd2hpbGUoIHF1b3Rlc3RhcnQgIT0gLTEgJiYgcXVvdGVlbmQgIT0gLTEgJiYgbGluZS5jaGFyQXQoIHF1b3RlZW5kLTEgKSA9PSAnXFwnICkKLSAgICAgIHsKLSAgICAgICAgcXVvdGVlbmQgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVlbmQgKyAxICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmKCBxdW90ZXN0YXJ0ID09IC0xIHx8IHF1b3RlZW5kID09IC0xIHx8IHF1b3Rlc3RhcnQgPiBxdW90ZWVuZCApIGJyZWFrOwotICAgICAgCi0gICAgICBTdHJpbmcga2V5ID0gbGluZS5zdWJzdHJpbmcoIHF1b3Rlc3RhcnQrMSwgcXVvdGVlbmQgKTsKLSAgICAgIAotICAgICAga2V5cy5hZGQoIGtleSApOwotICAgICAgCi0gICAgICBxdW90ZXN0YXJ0ID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3RlZW5kKzEgKTsKLSAgICAgIHF1b3RlZW5kICAgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVzdGFydCsxICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIHJlYWRMaW5lcyggRmlsZSBmaWxlICkKLSAgewotICAgIFZlY3RvciBmaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoIGZpbGUgKSApOwotICAgICAgCi0gICAgICBTdHJpbmcgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgCi0gICAgICB3aGlsZSggbGluZSAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZmlsZXMuYWRkKCBsaW5lICk7Ci0gICAgICAgIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlByb2JsZW0gb3BlbmluZyBmaWxlOiIgKyBmaWxlICk7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYoIHJlYWRlciAhPSBudWxsICkgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlmaWxlcy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gcmVhZExpbmVzKCBTdHJpbmcgZmlsZSApCi0gIHsKLSAgICByZXR1cm4gcmVhZExpbmVzKCBuZXcgRmlsZSggZmlsZSApICk7Ci0gIH0KLSAgICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGdldEZpbGVzKCBGaWxlIGZpbGUsIFZlY3RvciBmaWxlcywgU3RyaW5nIGZpbGVTdWZmaXgsIFN0cmluZ1tdIGV4Y2x1ZGVGaWxlcyApCi0gIHsKLSAgICBpZiggc3RyaW5nSW5BcnJheSggZmlsZS5nZXROYW1lKCksIGV4Y2x1ZGVGaWxlcyApICkKLSAgICB7Ci0gICAgICAvLyBkbyBub3RoaW5nCi0gICAgfQotICAgIGVsc2UgaWYoIGZpbGUuaXNEaXJlY3RvcnkoKSApCi0gICAgewotICAgICAgRmlsZVtdIGRpcmZpbGVzID0gZmlsZS5saXN0RmlsZXMoKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGRpcmZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIGdldEZpbGVzKCBkaXJmaWxlc1tpbmRleF0sIGZpbGVzLCBmaWxlU3VmZml4LCBleGNsdWRlRmlsZXMgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiggZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIGZpbGVTdWZmaXggKSApCi0gICAgewotICAgICAgZmlsZXMuYWRkKCBmaWxlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc3RyaW5nSW5BcnJheSggU3RyaW5nIG5hbWUsIFN0cmluZ1tdIG5hbWVzICkKLSAgewotICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbmFtZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBpZiggbmFtZS5lcXVhbHMoIG5hbWVzW2luZGV4XSApKQotICAgICAgewotICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZm91bmQ7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBWZWN0b3IgZ2V0UHJvcGVydHlLZXlzKCBGaWxlIGZpbGUgKQotICB7Ci0gICAgVmVjdG9yICAgICAga2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBJbnB1dFN0cmVhbSBzdHJlYW0gPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIGZpbGUgKTsKLSAgICAgIAotICAgICAgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgID0gbmV3IFByb3BlcnR5UmVzb3VyY2VCdW5kbGUoIHN0cmVhbSApOwotICAgICAgRW51bWVyYXRpb24gICAgICAgICAgICBrZXlFbnVtID0gYnVuZGxlLmdldEtleXMoKTsKLSAgICAgIAotICAgICAgd2hpbGUoIGtleUVudW0uaGFzTW9yZUVsZW1lbnRzKCkgKQotICAgICAgewotICAgICAgICBrZXlzLmFkZCgga2V5RW51bS5uZXh0RWxlbWVudCgpICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYoIHN0cmVhbSAhPSBudWxsICkgc3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGtleXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTY4ZDBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwZXJmb3JtYW5jZSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC8qKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lDb250ZXh0Ii8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTQ1NmQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotcGVyZm9ybWFuY2UuamFyCi1qYXZhQ29tcGlsZXIucGVyZm9ybWFuY2UuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNmU4NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4JCi0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLSAgICAgCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IyYzUwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNXZWQgU2VwIDI2IDA2OjMxOjEyIEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1ZmFmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNTdW4gSnVuIDAzIDAwOjQxOjQ0IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjlhODRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEKLUJ1bmRsZS1DbGFzc1BhdGg6IHBlcmZvcm1hbmNlLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW4KLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Ci1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS50ZXN0LAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cy5wZXJmb3JtYW5jZSwKLSBvcmcuZWNsaXBzZS50ZXN0LAotIG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWIzYzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLnBlcmZvcm1hbmNlLmphciA9IHBlcmZvcm1hbmNlLwotb3V0cHV0LnBlcmZvcm1hbmNlLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBlcmZvcm1hbmNlLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBkYXRhLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjYyMjc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIGxvY2F0aW9uPSJzYW1wbGU4OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTY2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgbG9jYXRpb249Ii5cc2FtcGxlNDU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2M3OGFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249InNhbXBsZTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSIuXHNhbXBsZTM3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjdlMTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSJzYW1wbGUzMDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTg2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgbG9jYXRpb249Ii5cc2FtcGxlMTQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlOTNmYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgbG9jYXRpb249InNhbXBsZTY4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgbG9jYXRpb249Ii5cc2FtcGxlMTc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTNlMGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSJzYW1wbGU3ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIGxvY2F0aW9uPSIuL3NhbXBsZTc5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgbG9jYXRpb249Ii5cc2FtcGxlODU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTVlNDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIGxvY2F0aW9uPSJzYW1wbGUxOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIGxvY2F0aW9uPSIuL3NhbXBsZTMzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgbG9jYXRpb249Ii5cc2FtcGxlNDg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjQ2N2FjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIGxvY2F0aW9uPSJzYW1wbGU1MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSIuL3NhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgbG9jYXRpb249Ii5cc2FtcGxlOTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWVjYjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIGxvY2F0aW9uPSJzYW1wbGUxOTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249Ii4vc2FtcGxlNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIGxvY2F0aW9uPSIuXHNhbXBsZTE5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcxYjYzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0ic2FtcGxlNTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiIGxvY2F0aW9uPSIuXHNhbXBsZTgxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4OTE5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiBsb2NhdGlvbj0ic2FtcGxlNDA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiBsb2NhdGlvbj0iLi9zYW1wbGU3OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIGxvY2F0aW9uPSIuXHNhbXBsZTI3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlhZDdmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiBsb2NhdGlvbj0ic2FtcGxlMTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiBsb2NhdGlvbj0iLi9zYW1wbGU0MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIGxvY2F0aW9uPSIuXHNhbXBsZTkyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZkNjAyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiBsb2NhdGlvbj0ic2FtcGxlNDMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIGxvY2F0aW9uPSIuXHNhbXBsZTIwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFiY2E3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiBsb2NhdGlvbj0ic2FtcGxlNjQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuXHNhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZmFkM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgbG9jYXRpb249InNhbXBsZTU5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgbG9jYXRpb249Ii4vc2FtcGxlMzE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlmZTI2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiBsb2NhdGlvbj0ic2FtcGxlNTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVmYTlkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiBsb2NhdGlvbj0ic2FtcGxlODUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249Ii5cc2FtcGxlMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNGFhMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgbG9jYXRpb249InNhbXBsZTc5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMjkwNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgbG9jYXRpb249InNhbXBsZTU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgbG9jYXRpb249Ii4vc2FtcGxlOTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMTcwNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgbG9jYXRpb249InNhbXBsZTM1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgbG9jYXRpb249Ii4vc2FtcGxlODQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNWViYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgbG9jYXRpb249InNhbXBsZTE0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiBsb2NhdGlvbj0iLi9zYW1wbGU1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgbG9jYXRpb249Ii5cc2FtcGxlMTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjk2MWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIGxvY2F0aW9uPSJzYW1wbGU2MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIGxvY2F0aW9uPSIuL3NhbXBsZTI5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgbG9jYXRpb249Ii5cc2FtcGxlNTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWIyMDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIGxvY2F0aW9uPSJzYW1wbGU5NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5NTRiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiBsb2NhdGlvbj0ic2FtcGxlODQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTkyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMwYzgwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiBsb2NhdGlvbj0ic2FtcGxlMTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiOWI3NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgbG9jYXRpb249InNhbXBsZTUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgbG9jYXRpb249Ii4vc2FtcGxlMzQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdiN2NhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiBsb2NhdGlvbj0ic2FtcGxlNDYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIGxvY2F0aW9uPSIuXHNhbXBsZTg5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRmYWNiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiBsb2NhdGlvbj0ic2FtcGxlMTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii5cc2FtcGxlODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NWEyNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgbG9jYXRpb249InNhbXBsZTQ1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSIgbG9jYXRpb249Ii4vc2FtcGxlODMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NGY0OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgbG9jYXRpb249InNhbXBsZTM0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgbG9jYXRpb249Ii5cc2FtcGxlNjIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDcwZWRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIGxvY2F0aW9uPSJzYW1wbGUyMDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0iLlxzYW1wbGUzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2NmI1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIGxvY2F0aW9uPSJzYW1wbGU5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiBsb2NhdGlvbj0iLi9zYW1wbGUzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgbG9jYXRpb249Ii5cc2FtcGxlODExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTdmMWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249InNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1ZmFlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiBsb2NhdGlvbj0ic2FtcGxlMjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiBsb2NhdGlvbj0iLi9zYW1wbGU0Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTYwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVlMDIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiBsb2NhdGlvbj0ic2FtcGxlOTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiBsb2NhdGlvbj0iLi9zYW1wbGU4MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIGxvY2F0aW9uPSIuXHNhbXBsZTY1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJjOGJhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiBsb2NhdGlvbj0ic2FtcGxlMTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIGxvY2F0aW9uPSIuXHNhbXBsZTgxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZGY5ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgbG9jYXRpb249InNhbXBsZTYzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgbG9jYXRpb249Ii4vc2FtcGxlNDgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiBsb2NhdGlvbj0iLlxzYW1wbGU4NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVkNzU0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiBsb2NhdGlvbj0ic2FtcGxlOTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMxODI3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiBsb2NhdGlvbj0ic2FtcGxlMjg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiBsb2NhdGlvbj0iLi9zYW1wbGUyODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTM5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZmNzI3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiBsb2NhdGlvbj0ic2FtcGxlODU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZkMDgxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiBsb2NhdGlvbj0ic2FtcGxlMTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiBsb2NhdGlvbj0iLlxzYW1wbGU1MjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYzZmMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgbG9jYXRpb249InNhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgbG9jYXRpb249Ii4vc2FtcGxlNzQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiBsb2NhdGlvbj0iLlxzYW1wbGU0Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YzE2NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgbG9jYXRpb249InNhbXBsZTM3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249Ii4vc2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OTc5YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgbG9jYXRpb249InNhbXBsZTk2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgbG9jYXRpb249Ii4vc2FtcGxlMTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNmU0ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgbG9jYXRpb249InNhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiBsb2NhdGlvbj0iLi9zYW1wbGUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgbG9jYXRpb249Ii5cc2FtcGxlMzkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjI2YjA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciIGxvY2F0aW9uPSJzYW1wbGU3Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249Ii5cc2FtcGxlOTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTMzZGMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgbG9jYXRpb249InNhbXBsZTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiBsb2NhdGlvbj0iLi9zYW1wbGU3Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIGxvY2F0aW9uPSIuXHNhbXBsZTE4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYjRhNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgbG9jYXRpb249InNhbXBsZTQ5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgbG9jYXRpb249Ii4vc2FtcGxlMTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5ZTI2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0ic2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTQwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyZjk3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIGxvY2F0aW9uPSJzYW1wbGUxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgbG9jYXRpb249Ii4vc2FtcGxlNjA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZjcxZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgbG9jYXRpb249InNhbXBsZTk1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgbG9jYXRpb249Ii4vc2FtcGxlNTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiBsb2NhdGlvbj0iLlxzYW1wbGUzNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjIzZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgbG9jYXRpb249InNhbXBsZTYwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgbG9jYXRpb249Ii4vc2FtcGxlNTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSIuXHNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGY1ZWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIGxvY2F0aW9uPSJzYW1wbGU2NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTQwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgbG9jYXRpb249Ii5cc2FtcGxlNzMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWMwYmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIGxvY2F0aW9uPSJzYW1wbGU5ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIGxvY2F0aW9uPSIuL3NhbXBsZTkyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgbG9jYXRpb249Ii5cc2FtcGxlNTg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTQ4NzFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIGxvY2F0aW9uPSJzYW1wbGU5NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIGxvY2F0aW9uPSIuL3NhbXBsZTE2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgbG9jYXRpb249Ii5cc2FtcGxlNDg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWE0MDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIGxvY2F0aW9uPSJzYW1wbGU0OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiIGxvY2F0aW9uPSIuL3NhbXBsZTU4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgbG9jYXRpb249Ii5cc2FtcGxlNjczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTA1YzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIGxvY2F0aW9uPSJzYW1wbGUyMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIGxvY2F0aW9uPSIuL3NhbXBsZTU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgbG9jYXRpb249Ii5cc2FtcGxlNjUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzNjOGZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIGxvY2F0aW9uPSJzYW1wbGUyMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIGxvY2F0aW9uPSIuL3NhbXBsZTY0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249Ii5cc2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1Zjc4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiBsb2NhdGlvbj0ic2FtcGxlNjU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTkwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjAwMjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIGxvY2F0aW9uPSJzYW1wbGU5OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTY2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgbG9jYXRpb249Ii5cc2FtcGxlMjk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWZmNThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249InNhbXBsZTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiBsb2NhdGlvbj0iLlxzYW1wbGU3Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YmM1NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgbG9jYXRpb249InNhbXBsZTg0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgbG9jYXRpb249Ii4vc2FtcGxlNzY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YjFmZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCIgbG9jYXRpb249InNhbXBsZTUxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgbG9jYXRpb249Ii4vc2FtcGxlNzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiBsb2NhdGlvbj0iLlxzYW1wbGUyMjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NTI5MDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgbG9jYXRpb249InNhbXBsZTQxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249Ii4vc2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTNlZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgbG9jYXRpb249InNhbXBsZTY1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgbG9jYXRpb249Ii4vc2FtcGxlOTA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiBsb2NhdGlvbj0iLlxzYW1wbGUyODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGVlZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSIgbG9jYXRpb249InNhbXBsZTIyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249Ii4vc2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0iLlxzYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MWNjMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0ic2FtcGxlNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIGxvY2F0aW9uPSIuL3NhbXBsZTY3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgbG9jYXRpb249Ii5cc2FtcGxlOTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTRkMzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIGxvY2F0aW9uPSJzYW1wbGUzMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIGxvY2F0aW9uPSIuL3NhbXBsZTE3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgbG9jYXRpb249Ii5cc2FtcGxlNjMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzQ4MWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIGxvY2F0aW9uPSJzYW1wbGUzNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIGxvY2F0aW9uPSIuL3NhbXBsZTQxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgbG9jYXRpb249Ii5cc2FtcGxlMzM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1MTVlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIGxvY2F0aW9uPSJzYW1wbGUxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgbG9jYXRpb249Ii5cc2FtcGxlOTMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNzQ0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgbG9jYXRpb249InNhbXBsZTExMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgbG9jYXRpb249Ii4vc2FtcGxlODUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiBsb2NhdGlvbj0iLlxzYW1wbGU3MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkN2I5YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgbG9jYXRpb249InNhbXBsZTEyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgbG9jYXRpb249Ii4vc2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiBsb2NhdGlvbj0iLlxzYW1wbGUzOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhOTVjY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgbG9jYXRpb249InNhbXBsZTMyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgbG9jYXRpb249Ii4vc2FtcGxlNTM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YzA0YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgbG9jYXRpb249InNhbXBsZTk0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiBsb2NhdGlvbj0iLi9zYW1wbGU3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249Ii5cc2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzRkNjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIGxvY2F0aW9uPSJzYW1wbGU4NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTQxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgbG9jYXRpb249Ii5cc2FtcGxlMTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTFiMmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIGxvY2F0aW9uPSJzYW1wbGU5MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIGxvY2F0aW9uPSIuL3NhbXBsZTk3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgbG9jYXRpb249Ii5cc2FtcGxlMzQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWIwNGU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIGxvY2F0aW9uPSJzYW1wbGU4OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIGxvY2F0aW9uPSIuL3NhbXBsZTI1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiBsb2NhdGlvbj0iLlxzYW1wbGU3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTViYmZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiBsb2NhdGlvbj0ic2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiBsb2NhdGlvbj0iLi9zYW1wbGU4MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIGxvY2F0aW9uPSIuXHNhbXBsZTYzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU0Y2U2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiBsb2NhdGlvbj0ic2FtcGxlNjk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTQwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ2NzBlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiBsb2NhdGlvbj0ic2FtcGxlMzM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiBsb2NhdGlvbj0iLi9zYW1wbGU1MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3N2JmOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgbG9jYXRpb249InNhbXBsZTg1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgbG9jYXRpb249Ii4vc2FtcGxlMzU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiBsb2NhdGlvbj0iLlxzYW1wbGU5Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNGFhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiBsb2NhdGlvbj0ic2FtcGxlNjQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiBsb2NhdGlvbj0iLi9zYW1wbGU4NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhYmE4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIGxvY2F0aW9uPSJzYW1wbGUyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgbG9jYXRpb249Ii4vc2FtcGxlMTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiM2FmODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgbG9jYXRpb249InNhbXBsZTQ3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgbG9jYXRpb249Ii4vc2FtcGxlNTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5IiBsb2NhdGlvbj0iLlxzYW1wbGU3Nzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ODVhYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgbG9jYXRpb249InNhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiBsb2NhdGlvbj0iLi9zYW1wbGUzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgbG9jYXRpb249Ii5cc2FtcGxlMzk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzIzMTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIGxvY2F0aW9uPSJzYW1wbGU1MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgbG9jYXRpb249Ii5cc2FtcGxlNTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmQ1YTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIGxvY2F0aW9uPSJzYW1wbGU1OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIGxvY2F0aW9uPSIuL3NhbXBsZTgwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgbG9jYXRpb249Ii5cc2FtcGxlMzA0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmFiYmRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIGxvY2F0aW9uPSJzYW1wbGU2MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIGxvY2F0aW9uPSIuL3NhbXBsZTE5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgbG9jYXRpb249Ii5cc2FtcGxlODA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGI5Y2Q0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIGxvY2F0aW9uPSJzYW1wbGUyNDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgbG9jYXRpb249Ii5cc2FtcGxlMTQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWU5MWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgbG9jYXRpb249InNhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIGxvY2F0aW9uPSIuXHNhbXBsZTc2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc5MmZhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiBsb2NhdGlvbj0ic2FtcGxlODYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTU3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YWZjOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgbG9jYXRpb249InNhbXBsZTk2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgbG9jYXRpb249Ii4vc2FtcGxlNzc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM3MTAxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4IiBsb2NhdGlvbj0ic2FtcGxlNDg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiBsb2NhdGlvbj0iLi9zYW1wbGU1OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM4YjMxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4IiBsb2NhdGlvbj0ic2FtcGxlNTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiBsb2NhdGlvbj0iLi9zYW1wbGU5NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSIuXHNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjY2I4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiBsb2NhdGlvbj0ic2FtcGxlODk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiBsb2NhdGlvbj0iLi9zYW1wbGU5NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTczMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiNWQ1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiBsb2NhdGlvbj0ic2FtcGxlOTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4ZjJmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSJzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgbG9jYXRpb249Ii4vc2FtcGxlMzgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDkxNGE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIGxvY2F0aW9uPSJzYW1wbGU5NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIGxvY2F0aW9uPSIuL3NhbXBsZTgyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwNWFkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiBsb2NhdGlvbj0ic2FtcGxlODM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTYwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRkYjIzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSJzYW1wbGU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgbG9jYXRpb249Ii4vc2FtcGxlNDUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4IiBsb2NhdGlvbj0iLlxzYW1wbGU5Njgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MTAzZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgbG9jYXRpb249InNhbXBsZTcyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgbG9jYXRpb249Ii4vc2FtcGxlMjg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiBsb2NhdGlvbj0iLlxzYW1wbGUzMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZjIyZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgbG9jYXRpb249InNhbXBsZTYzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgbG9jYXRpb249Ii5cc2FtcGxlNzY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzYTVhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiBsb2NhdGlvbj0ic2FtcGxlMzcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiBsb2NhdGlvbj0iLi9zYW1wbGUyNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii5cc2FtcGxlODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5Y2MwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiBsb2NhdGlvbj0ic2FtcGxlNTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiBsb2NhdGlvbj0iLi9zYW1wbGU0NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTgzNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYwM2YwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiBsb2NhdGlvbj0ic2FtcGxlMjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiBsb2NhdGlvbj0iLi9zYW1wbGU1NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIGxvY2F0aW9uPSIuXHNhbXBsZTM5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY0ZDYxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiBsb2NhdGlvbj0ic2FtcGxlNTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiBsb2NhdGlvbj0iLi9zYW1wbGU1MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIGxvY2F0aW9uPSIuXHNhbXBsZTk1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3ZWQ3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiBsb2NhdGlvbj0ic2FtcGxlOTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTIxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBkNmUzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1IiBsb2NhdGlvbj0ic2FtcGxlNDI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIGxvY2F0aW9uPSIuXHNhbXBsZTI5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0MGEwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIGxvY2F0aW9uPSJzYW1wbGUzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgbG9jYXRpb249Ii4vc2FtcGxlNjcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNmZkODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgbG9jYXRpb249InNhbXBsZTczNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgbG9jYXRpb249Ii4vc2FtcGxlOTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIGxvY2F0aW9uPSIuXHNhbXBsZTQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGY0ZjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIGxvY2F0aW9uPSJzYW1wbGUxOTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiIGxvY2F0aW9uPSIuL3NhbXBsZTM4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgbG9jYXRpb249Ii5cc2FtcGxlODQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTQ0NWQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIGxvY2F0aW9uPSJzYW1wbGU0MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgbG9jYXRpb249Ii5cc2FtcGxlNjcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmMxODU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIGxvY2F0aW9uPSJzYW1wbGU3NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTUzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgbG9jYXRpb249Ii5cc2FtcGxlODc3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NTdhMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249InNhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgbG9jYXRpb249Ii4vc2FtcGxlODQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwNzIwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiBsb2NhdGlvbj0ic2FtcGxlNzU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTc3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzJhMTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIGxvY2F0aW9uPSJzYW1wbGU0NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgbG9jYXRpb249Ii5cc2FtcGxlNjczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTFlN2E2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIGxvY2F0aW9uPSJzYW1wbGU1MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTUwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgbG9jYXRpb249Ii5cc2FtcGxlMTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTI4ZjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIGxvY2F0aW9uPSJzYW1wbGUxMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTcwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgbG9jYXRpb249Ii5cc2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDEyM2U5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiBsb2NhdGlvbj0ic2FtcGxlOTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIGxvY2F0aW9uPSIuXHNhbXBsZTM0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2MGNjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiBsb2NhdGlvbj0ic2FtcGxlMjAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTczNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzMzJlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiBsb2NhdGlvbj0ic2FtcGxlNDAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLi9zYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciIGxvY2F0aW9uPSIuXHNhbXBsZTYwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2NzE5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiBsb2NhdGlvbj0ic2FtcGxlOTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0iLi9zYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIGxvY2F0aW9uPSIuXHNhbXBsZTE0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ0MGU1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiBsb2NhdGlvbj0ic2FtcGxlNjU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiBsb2NhdGlvbj0iLi9zYW1wbGU0ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIGxvY2F0aW9uPSIuXHNhbXBsZTM1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhNGVjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiBsb2NhdGlvbj0ic2FtcGxlOTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiBsb2NhdGlvbj0iLi9zYW1wbGU3NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIGxvY2F0aW9uPSIuXHNhbXBsZTE5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFmMjViNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiBsb2NhdGlvbj0ic2FtcGxlMzMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiBsb2NhdGlvbj0iLi9zYW1wbGUxODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIGxvY2F0aW9uPSIuXHNhbXBsZTQxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MjU1MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgbG9jYXRpb249InNhbXBsZTk4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgbG9jYXRpb249Ii4vc2FtcGxlMTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiBsb2NhdGlvbj0iLlxzYW1wbGUzMjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMzZTRlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0ic2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIGxvY2F0aW9uPSIuXHNhbXBsZTI3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ3MzljMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiBsb2NhdGlvbj0ic2FtcGxlNzA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTcwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU1NDE2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiBsb2NhdGlvbj0ic2FtcGxlODU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVmMjAzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIGxvY2F0aW9uPSJzYW1wbGUzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgbG9jYXRpb249Ii4vc2FtcGxlMjUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NjQzYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgbG9jYXRpb249InNhbXBsZTI2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSIgbG9jYXRpb249Ii4vc2FtcGxlMzA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU5NDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMjI3NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgbG9jYXRpb249InNhbXBsZTQwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuL3NhbXBsZTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmZhYTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIGxvY2F0aW9uPSJzYW1wbGU4MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIGxvY2F0aW9uPSIuL3NhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgbG9jYXRpb249Ii5cc2FtcGxlMTU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWMyYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIGxvY2F0aW9uPSJzYW1wbGU5NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIGxvY2F0aW9uPSIuL3NhbXBsZTcwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgbG9jYXRpb249Ii5cc2FtcGxlNzQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2IyYmRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIGxvY2F0aW9uPSJzYW1wbGUzMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIGxvY2F0aW9uPSIuL3NhbXBsZTM5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgbG9jYXRpb249Ii5cc2FtcGxlMzEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODY4MWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIGxvY2F0aW9uPSJzYW1wbGU4OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIGxvY2F0aW9uPSIuL3NhbXBsZTEwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgbG9jYXRpb249Ii5cc2FtcGxlNTE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2ZGY1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiBsb2NhdGlvbj0ic2FtcGxlNjQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIGxvY2F0aW9uPSIuXHNhbXBsZTkzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTUxM2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIGxvY2F0aW9uPSJzYW1wbGU4NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIGxvY2F0aW9uPSIuL3NhbXBsZTcxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgbG9jYXRpb249Ii5cc2FtcGxlNjYzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzg5Yjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIGxvY2F0aW9uPSJzYW1wbGUyMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIGxvY2F0aW9uPSIuL3NhbXBsZTk3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgbG9jYXRpb249Ii5cc2FtcGxlNjgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWY1NzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIGxvY2F0aW9uPSJzYW1wbGU0MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuL3NhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgbG9jYXRpb249Ii5cc2FtcGxlODM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njc5ODE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIGxvY2F0aW9uPSJzYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIGxvY2F0aW9uPSIuL3NhbXBsZTM3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgbG9jYXRpb249Ii5cc2FtcGxlMzc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTJjMjVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIGxvY2F0aW9uPSJzYW1wbGU5NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIGxvY2F0aW9uPSIuL3NhbXBsZTM3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiBsb2NhdGlvbj0iLlxzYW1wbGU5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0MDY4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiBsb2NhdGlvbj0ic2FtcGxlMjIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY5YmYzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiBsb2NhdGlvbj0ic2FtcGxlNzc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiBsb2NhdGlvbj0iLi9zYW1wbGU0Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgbG9jYXRpb249Ii5cc2FtcGxlOTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZDI0ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgbG9jYXRpb249InNhbXBsZTM5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgbG9jYXRpb249Ii4vc2FtcGxlOTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZGJjMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgbG9jYXRpb249InNhbXBsZTQzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgbG9jYXRpb249Ii4vc2FtcGxlNzQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZTJlYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgbG9jYXRpb249InNhbXBsZTQ2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgbG9jYXRpb249Ii4vc2FtcGxlNTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmJlMTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIGxvY2F0aW9uPSJzYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLi9zYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgyNGQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIiBsb2NhdGlvbj0ic2FtcGxlNjkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1IiBsb2NhdGlvbj0iLi9zYW1wbGU2MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgbG9jYXRpb249Ii5cc2FtcGxlMTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlOTMyNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgbG9jYXRpb249InNhbXBsZTgzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCIgbG9jYXRpb249Ii4vc2FtcGxlMzE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NzJmZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgbG9jYXRpb249InNhbXBsZTYzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii4vc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiBsb2NhdGlvbj0iLlxzYW1wbGU4MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNDRjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgbG9jYXRpb249InNhbXBsZTc0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0iLi9zYW1wbGUyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgbG9jYXRpb249Ii5cc2FtcGxlNDQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2QwZmM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgbG9jYXRpb249InNhbXBsZTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiBsb2NhdGlvbj0iLi9zYW1wbGU1NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIGxvY2F0aW9uPSIuXHNhbXBsZTg1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE0Njg1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIGxvY2F0aW9uPSJzYW1wbGU0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgbG9jYXRpb249Ii4vc2FtcGxlOTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiBsb2NhdGlvbj0iLlxzYW1wbGU4OTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4N2JlNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgbG9jYXRpb249InNhbXBsZTM4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OGM4YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgbG9jYXRpb249InNhbXBsZTI2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgbG9jYXRpb249Ii4vc2FtcGxlNzgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiBsb2NhdGlvbj0iLlxzYW1wbGU1Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNTExODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgbG9jYXRpb249InNhbXBsZTYzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgbG9jYXRpb249Ii4vc2FtcGxlMTUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiBsb2NhdGlvbj0iLlxzYW1wbGU4NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTU5MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgbG9jYXRpb249InNhbXBsZTY3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgbG9jYXRpb249Ii4vc2FtcGxlODAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTFiYzA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSJzYW1wbGUzNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIGxvY2F0aW9uPSIuL3NhbXBsZTIwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgbG9jYXRpb249Ii5cc2FtcGxlOTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YmRjN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgbG9jYXRpb249InNhbXBsZTk4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCIgbG9jYXRpb249Ii4vc2FtcGxlNTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiBsb2NhdGlvbj0iLlxzYW1wbGUyNjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTQ2N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgbG9jYXRpb249InNhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgbG9jYXRpb249Ii5cc2FtcGxlMTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTk4Y2UxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIGxvY2F0aW9uPSJzYW1wbGU2MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIGxvY2F0aW9uPSIuL3NhbXBsZTg3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgbG9jYXRpb249Ii5cc2FtcGxlMTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGFiZjU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIGxvY2F0aW9uPSJzYW1wbGU1MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIGxvY2F0aW9uPSIuL3NhbXBsZTMzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgbG9jYXRpb249Ii5cc2FtcGxlNDA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjk0MDkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIGxvY2F0aW9uPSJzYW1wbGUzNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgbG9jYXRpb249Ii4vc2FtcGxlMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIGxvY2F0aW9uPSIuXHNhbXBsZTEyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkyYWQ0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiBsb2NhdGlvbj0ic2FtcGxlNjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIGxvY2F0aW9uPSIuXHNhbXBsZTM2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5ZGY1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIGxvY2F0aW9uPSJzYW1wbGU3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgbG9jYXRpb249Ii4vc2FtcGxlMzU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMDQxMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgbG9jYXRpb249InNhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgbG9jYXRpb249Ii4vc2FtcGxlMjk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOGYxY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249InNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgbG9jYXRpb249Ii4vc2FtcGxlMTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSIuXHNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmQwYzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIGxvY2F0aW9uPSJzYW1wbGU0MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIGxvY2F0aW9uPSIuL3NhbXBsZTczMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgbG9jYXRpb249Ii5cc2FtcGxlOTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3YWFjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiBsb2NhdGlvbj0ic2FtcGxlMzk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjFjODRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIGxvY2F0aW9uPSJzYW1wbGUzNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIGxvY2F0aW9uPSIuL3NhbXBsZTY5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgbG9jYXRpb249Ii5cc2FtcGxlNDk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmI5NWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249InNhbXBsZTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiBsb2NhdGlvbj0iLi9zYW1wbGU1NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JlMTFlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0ic2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiBsb2NhdGlvbj0iLi9zYW1wbGU0NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIGxvY2F0aW9uPSIuXHNhbXBsZTM4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiNTU5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiBsb2NhdGlvbj0ic2FtcGxlNTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSIuXHNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTdkNDk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIGxvY2F0aW9uPSJzYW1wbGUzNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIGxvY2F0aW9uPSIuL3NhbXBsZTE5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgbG9jYXRpb249Ii5cc2FtcGxlOTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmIyMmJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIGxvY2F0aW9uPSJzYW1wbGU1MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTYyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249Ii5cc2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE2YTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIGxvY2F0aW9uPSJzYW1wbGU5Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIGxvY2F0aW9uPSIuL3NhbXBsZTU3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgbG9jYXRpb249Ii5cc2FtcGxlMzI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzQ1NTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIGxvY2F0aW9uPSJzYW1wbGUxMDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTYxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgbG9jYXRpb249Ii5cc2FtcGxlOTk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjZlMjkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIGxvY2F0aW9uPSJzYW1wbGUzMDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgbG9jYXRpb249Ii5cc2FtcGxlNjAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDU3NTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSJzYW1wbGUyMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTM1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCIgbG9jYXRpb249Ii5cc2FtcGxlMjk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU5YWQyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiBsb2NhdGlvbj0ic2FtcGxlOTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiBsb2NhdGlvbj0iLi9zYW1wbGU0NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzgzYzNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgbG9jYXRpb249InNhbXBsZTI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiBsb2NhdGlvbj0iLi9zYW1wbGU2ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk4NGUxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiBsb2NhdGlvbj0ic2FtcGxlMjI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIGxvY2F0aW9uPSIuXHNhbXBsZTI1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDczMTY1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSJzYW1wbGU1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgbG9jYXRpb249Ii5cc2FtcGxlNzUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTczODZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSJzYW1wbGU5MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTg0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgbG9jYXRpb249Ii5cc2FtcGxlMTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTIxNGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIGxvY2F0aW9uPSJzYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIGxvY2F0aW9uPSIuL3NhbXBsZTM0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgbG9jYXRpb249Ii5cc2FtcGxlMTAxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTMzZjBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0ic2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0iLi9zYW1wbGU1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgbG9jYXRpb249Ii5cc2FtcGxlOTY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODA0NTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIGxvY2F0aW9uPSJzYW1wbGUyMDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIGxvY2F0aW9uPSIuL3NhbXBsZTQxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgbG9jYXRpb249Ii5cc2FtcGxlNjQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWJkMDRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIGxvY2F0aW9uPSJzYW1wbGU1NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTM1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgbG9jYXRpb249Ii5cc2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjY5OTBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIGxvY2F0aW9uPSJzYW1wbGU2OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249Ii4vc2FtcGxlMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRkZTdlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiBsb2NhdGlvbj0ic2FtcGxlNTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNWUxYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgbG9jYXRpb249InNhbXBsZTk4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgbG9jYXRpb249Ii4vc2FtcGxlOTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiBsb2NhdGlvbj0iLlxzYW1wbGUzOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmMTc4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiBsb2NhdGlvbj0ic2FtcGxlOTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIGxvY2F0aW9uPSIuL3NhbXBsZTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTBhNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgbG9jYXRpb249InNhbXBsZTc5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgbG9jYXRpb249Ii4vc2FtcGxlMjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZTQwZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgbG9jYXRpb249InNhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii4vc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiBsb2NhdGlvbj0iLlxzYW1wbGUxMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhOWQ0NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgbG9jYXRpb249InNhbXBsZTg5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgbG9jYXRpb249Ii4vc2FtcGxlOTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiBsb2NhdGlvbj0iLlxzYW1wbGU0MzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjY2U5ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgbG9jYXRpb249InNhbXBsZTQ5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgbG9jYXRpb249Ii4vc2FtcGxlMjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIGxvY2F0aW9uPSIuXHNhbXBsZTI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTYzZTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIGxvY2F0aW9uPSJzYW1wbGU1MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIGxvY2F0aW9uPSIuL3NhbXBsZTc0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgbG9jYXRpb249Ii5cc2FtcGxlODk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjg2MmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIGxvY2F0aW9uPSJzYW1wbGU1NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTM3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgbG9jYXRpb249Ii5cc2FtcGxlNDU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWY0YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIGxvY2F0aW9uPSJzYW1wbGUyMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSIuL3NhbXBsZTEwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU1MTIwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiBsb2NhdGlvbj0ic2FtcGxlMzgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTY2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFlOGJiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiBsb2NhdGlvbj0ic2FtcGxlNDIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiBsb2NhdGlvbj0iLi9zYW1wbGU3NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIGxvY2F0aW9uPSIuXHNhbXBsZTg2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNzg1NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgbG9jYXRpb249InNhbXBsZTM2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgbG9jYXRpb249Ii4vc2FtcGxlMjU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmNDA1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiBsb2NhdGlvbj0ic2FtcGxlMzYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIGxvY2F0aW9uPSIuXHNhbXBsZTkxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RmNWZhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0ic2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTk2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2ZjQ1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiBsb2NhdGlvbj0ic2FtcGxlNjE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyOWRlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiBsb2NhdGlvbj0ic2FtcGxlMTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTIzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3NDQzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiBsb2NhdGlvbj0ic2FtcGxlNDY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTk2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIwYzYyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249InNhbXBsZTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuL3NhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgbG9jYXRpb249Ii5cc2FtcGxlNjA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjVkNDE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIGxvY2F0aW9uPSJzYW1wbGUyMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTkxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgbG9jYXRpb249Ii5cc2FtcGxlNjU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTBhZjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgbG9jYXRpb249InNhbXBsZTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiBsb2NhdGlvbj0iLi9zYW1wbGU5MjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTIzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjNTdlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiBsb2NhdGlvbj0ic2FtcGxlMTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuL3NhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MGVhMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgbG9jYXRpb249InNhbXBsZTY4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCIgbG9jYXRpb249Ii4vc2FtcGxlODM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzAwOTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSJzYW1wbGUyOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNmE3NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgbG9jYXRpb249InNhbXBsZTgzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgbG9jYXRpb249Ii4vc2FtcGxlODc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIGxvY2F0aW9uPSIuXHNhbXBsZTI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTI1M2E5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIGxvY2F0aW9uPSJzYW1wbGUzMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIGxvY2F0aW9uPSIuL3NhbXBsZTY3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgbG9jYXRpb249Ii5cc2FtcGxlNjU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmIwY2I3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIGxvY2F0aW9uPSJzYW1wbGU5OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIGxvY2F0aW9uPSIuL3NhbXBsZTEwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgbG9jYXRpb249Ii5cc2FtcGxlMTcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDIwYjZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIGxvY2F0aW9uPSJzYW1wbGUxMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249Ii4vc2FtcGxlNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIGxvY2F0aW9uPSIuXHNhbXBsZTE4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5OTc4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiBsb2NhdGlvbj0ic2FtcGxlNzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiBsb2NhdGlvbj0iLi9zYW1wbGU0ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTczMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzNDdjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSJzYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgbG9jYXRpb249Ii4vc2FtcGxlNTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiBsb2NhdGlvbj0iLlxzYW1wbGU0NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODdjZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiBsb2NhdGlvbj0ic2FtcGxlMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTc4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgbG9jYXRpb249Ii5cc2FtcGxlNjQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzY1MWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIGxvY2F0aW9uPSJzYW1wbGUzNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIGxvY2F0aW9uPSIuL3NhbXBsZTg5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgbG9jYXRpb249Ii5cc2FtcGxlMjc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzc5MzIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIGxvY2F0aW9uPSJzYW1wbGU0OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgbG9jYXRpb249Ii5cc2FtcGxlNDQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmMxMjU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIGxvY2F0aW9uPSJzYW1wbGU0MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgbG9jYXRpb249Ii5cc2FtcGxlNjQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTI5YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgbG9jYXRpb249InNhbXBsZTIxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249Ii4vc2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiZWIzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiBsb2NhdGlvbj0ic2FtcGxlMTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiBsb2NhdGlvbj0iLi9zYW1wbGUzOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIGxvY2F0aW9uPSIuXHNhbXBsZTE4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjYwYWVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIGxvY2F0aW9uPSJzYW1wbGUxMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIGxvY2F0aW9uPSIuL3NhbXBsZTM0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIyYWE1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0ic2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiBsb2NhdGlvbj0iLlxzYW1wbGU1ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NTcyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgbG9jYXRpb249InNhbXBsZTU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZmM4NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgbG9jYXRpb249InNhbXBsZTE1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgbG9jYXRpb249Ii4vc2FtcGxlNDk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZWIyOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgbG9jYXRpb249InNhbXBsZTE4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgbG9jYXRpb249Ii4vc2FtcGxlOTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjJkODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgbG9jYXRpb249InNhbXBsZTkzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgbG9jYXRpb249Ii4vc2FtcGxlMTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzQ4ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgbG9jYXRpb249InNhbXBsZTgzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgbG9jYXRpb249Ii4vc2FtcGxlOTk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NzE4ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgbG9jYXRpb249InNhbXBsZTkwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgbG9jYXRpb249Ii4vc2FtcGxlMzczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1YmJjZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgbG9jYXRpb249InNhbXBsZTY0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgbG9jYXRpb249Ii4vc2FtcGxlOTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YzZmOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgbG9jYXRpb249InNhbXBsZTM2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgbG9jYXRpb249Ii4vc2FtcGxlNDAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiBsb2NhdGlvbj0iLlxzYW1wbGUxNTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGUxNjU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIGxvY2F0aW9uPSJzYW1wbGU2MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTg3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgbG9jYXRpb249Ii5cc2FtcGxlNDEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMDE2MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgbG9jYXRpb249InNhbXBsZTkzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgbG9jYXRpb249Ii4vc2FtcGxlMTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIGxvY2F0aW9uPSIuXHNhbXBsZTY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjk5OWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIGxvY2F0aW9uPSJzYW1wbGUzNDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIGxvY2F0aW9uPSIuL3NhbXBsZTExNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249Ii5cc2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDFlODM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIGxvY2F0aW9uPSJzYW1wbGU1MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIGxvY2F0aW9uPSIuL3NhbXBsZTE1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgbG9jYXRpb249Ii5cc2FtcGxlOTMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQ1NzdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgbG9jYXRpb249InNhbXBsZTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiBsb2NhdGlvbj0iLi9zYW1wbGUyNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIGxvY2F0aW9uPSIuXHNhbXBsZTY0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzExNWEwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiBsb2NhdGlvbj0ic2FtcGxlODY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiBsb2NhdGlvbj0iLi9zYW1wbGU0MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIGxvY2F0aW9uPSIuXHNhbXBsZTIwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3NjZjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIGxvY2F0aW9uPSJzYW1wbGU2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgbG9jYXRpb249Ii4vc2FtcGxlMTkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZmUxM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgbG9jYXRpb249InNhbXBsZTEwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgbG9jYXRpb249Ii4vc2FtcGxlMzY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZDc2MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgbG9jYXRpb249InNhbXBsZTQ2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgbG9jYXRpb249Ii4vc2FtcGxlOTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiBsb2NhdGlvbj0iLlxzYW1wbGU3NjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNjAzN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgbG9jYXRpb249InNhbXBsZTEzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249Ii4vc2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjhkZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgbG9jYXRpb249InNhbXBsZTQzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgbG9jYXRpb249Ii4vc2FtcGxlOTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiBsb2NhdGlvbj0iLlxzYW1wbGU5OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmE4ZmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249InNhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIGxvY2F0aW9uPSIuXHNhbXBsZTU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmQ1ZDYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIGxvY2F0aW9uPSJzYW1wbGUxMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTY1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI4ZWU5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIiBsb2NhdGlvbj0ic2FtcGxlNTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiBsb2NhdGlvbj0iLi9zYW1wbGUyMDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIGxvY2F0aW9uPSIuXHNhbXBsZTg4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg0MzY4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIGxvY2F0aW9uPSJzYW1wbGU5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLi9zYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgbG9jYXRpb249Ii5cc2FtcGxlNjYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2EzYzRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIGxvY2F0aW9uPSJzYW1wbGU0Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTgyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgbG9jYXRpb249Ii5cc2FtcGxlNTA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWU2YjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIGxvY2F0aW9uPSJzYW1wbGUzNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgbG9jYXRpb249Ii5cc2FtcGxlMTc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWJjOTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIGxvY2F0aW9uPSJzYW1wbGUzMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgbG9jYXRpb249Ii4vc2FtcGxlODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIGxvY2F0aW9uPSIuXHNhbXBsZTExNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUxZDc3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiBsb2NhdGlvbj0ic2FtcGxlNzY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIGxvY2F0aW9uPSIuXHNhbXBsZTIwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJhNGM1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiBsb2NhdGlvbj0ic2FtcGxlNTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIGxvY2F0aW9uPSIuXHNhbXBsZTI4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwNmJkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiBsb2NhdGlvbj0ic2FtcGxlOTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiBsb2NhdGlvbj0iLi9zYW1wbGU2Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTExOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE1ZDkyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiBsb2NhdGlvbj0ic2FtcGxlODkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiBsb2NhdGlvbj0iLi9zYW1wbGUzNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MGJkNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgbG9jYXRpb249InNhbXBsZTI3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgbG9jYXRpb249Ii4vc2FtcGxlNzE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZWY1YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgbG9jYXRpb249InNhbXBsZTY1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgbG9jYXRpb249Ii4vc2FtcGxlODgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2N2YxZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgbG9jYXRpb249InNhbXBsZTE0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0iLi9zYW1wbGUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgbG9jYXRpb249Ii5cc2FtcGxlMzIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDdkYjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIGxvY2F0aW9uPSJzYW1wbGU4NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgbG9jYXRpb249Ii5cc2FtcGxlNDY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTNkZjYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIGxvY2F0aW9uPSJzYW1wbGU3Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIGxvY2F0aW9uPSIuL3NhbXBsZTIwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgbG9jYXRpb249Ii5cc2FtcGxlNTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODA3MDEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIGxvY2F0aW9uPSJzYW1wbGU1ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgbG9jYXRpb249Ii4vc2FtcGxlMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIGxvY2F0aW9uPSIuXHNhbXBsZTI4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA5ZjhkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiBsb2NhdGlvbj0ic2FtcGxlOTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIGxvY2F0aW9uPSIuXHNhbXBsZTc1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY3Y2Q0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIGxvY2F0aW9uPSJzYW1wbGU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgbG9jYXRpb249Ii4vc2FtcGxlOTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiBsb2NhdGlvbj0iLlxzYW1wbGU5NzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMjk3MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgbG9jYXRpb249InNhbXBsZTMxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgbG9jYXRpb249Ii4vc2FtcGxlNjU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiBsb2NhdGlvbj0iLlxzYW1wbGUzMzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNmViY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgbG9jYXRpb249InNhbXBsZTE3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgbG9jYXRpb249Ii4vc2FtcGxlNDE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNWJiZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgbG9jYXRpb249InNhbXBsZTEyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuL3NhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZWNiODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgbG9jYXRpb249InNhbXBsZTQzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgbG9jYXRpb249Ii4vc2FtcGxlMzQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1IiBsb2NhdGlvbj0iLlxzYW1wbGUzMzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0NjNjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiBsb2NhdGlvbj0ic2FtcGxlNjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTM5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxNDRmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiBsb2NhdGlvbj0ic2FtcGxlNzgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMxM2ZhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiBsb2NhdGlvbj0ic2FtcGxlNzgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiBsb2NhdGlvbj0iLi9zYW1wbGUxODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTY0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2NDNhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiBsb2NhdGlvbj0ic2FtcGxlMjUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZWFlMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249InNhbXBsZTQxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgbG9jYXRpb249InNhbXBsZTY3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgbG9jYXRpb249Ii4vc2FtcGxlMzkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMzEzZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgbG9jYXRpb249InNhbXBsZTI1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgbG9jYXRpb249Ii4vc2FtcGxlMTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiBsb2NhdGlvbj0iLlxzYW1wbGU4NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NGNkMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0ic2FtcGxlNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIGxvY2F0aW9uPSIuL3NhbXBsZTExNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgbG9jYXRpb249Ii5cc2FtcGxlNDI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDJhOWE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIGxvY2F0aW9uPSJzYW1wbGUyNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgbG9jYXRpb249Ii5cc2FtcGxlNjc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTRmOWYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgbG9jYXRpb249InNhbXBsZTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiBsb2NhdGlvbj0iLi9zYW1wbGU5OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiIGxvY2F0aW9uPSIuXHNhbXBsZTM4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwODcwNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249InNhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCIgbG9jYXRpb249Ii4vc2FtcGxlNTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiBsb2NhdGlvbj0iLlxzYW1wbGU5NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE2ZTkwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiBsb2NhdGlvbj0ic2FtcGxlNjYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIGxvY2F0aW9uPSIuXHNhbXBsZTQyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmNGJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiBsb2NhdGlvbj0ic2FtcGxlNDU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiBsb2NhdGlvbj0iLi9zYW1wbGUxOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIGxvY2F0aW9uPSIuXHNhbXBsZTE2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3ZjI4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiBsb2NhdGlvbj0ic2FtcGxlMzM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZkN2Q3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiBsb2NhdGlvbj0ic2FtcGxlMTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249Ii5cc2FtcGxlMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMGVlZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgbG9jYXRpb249InNhbXBsZTI0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgbG9jYXRpb249Ii4vc2FtcGxlNjEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkY2I0NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0ic2FtcGxlNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTkwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgbG9jYXRpb249Ii5cc2FtcGxlODIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmRlMWY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIGxvY2F0aW9uPSJzYW1wbGUyNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIGxvY2F0aW9uPSIuL3NhbXBsZTM2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgbG9jYXRpb249Ii5cc2FtcGxlODQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzhiYWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIGxvY2F0aW9uPSJzYW1wbGU4NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTcwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyIgbG9jYXRpb249Ii5cc2FtcGxlMTk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmIxY2U5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIGxvY2F0aW9uPSJzYW1wbGUxNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTc0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgbG9jYXRpb249Ii5cc2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2RjOTA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIGxvY2F0aW9uPSJzYW1wbGU4MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIGxvY2F0aW9uPSIuL3NhbXBsZTg4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgbG9jYXRpb249Ii5cc2FtcGxlMjIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxMmNjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiBsb2NhdGlvbj0ic2FtcGxlNzc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiBsb2NhdGlvbj0iLi9zYW1wbGU2Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIGxvY2F0aW9uPSIuXHNhbXBsZTM3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2JhMGUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIGxvY2F0aW9uPSJzYW1wbGUzMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIGxvY2F0aW9uPSIuL3NhbXBsZTE4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgbG9jYXRpb249Ii5cc2FtcGxlMTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzBiMDBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIGxvY2F0aW9uPSJzYW1wbGU4NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIGxvY2F0aW9uPSIuL3NhbXBsZTgwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgbG9jYXRpb249Ii5cc2FtcGxlMzY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGY0N2RlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIGxvY2F0aW9uPSJzYW1wbGU0MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii4vc2FtcGxlODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgbG9jYXRpb249Ii5cc2FtcGxlNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYzI0MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgbG9jYXRpb249InNhbXBsZTQ0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249Ii4vc2FtcGxlNjQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NmFiZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0ic2FtcGxlNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTU0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQwNjY0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249InNhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIGxvY2F0aW9uPSIuL3NhbXBsZTE3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgbG9jYXRpb249Ii5cc2FtcGxlMjc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTllNzkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIGxvY2F0aW9uPSJzYW1wbGU0MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTE1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgbG9jYXRpb249Ii5cc2FtcGxlNDY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzIyZjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIGxvY2F0aW9uPSJzYW1wbGUyNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTcwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgbG9jYXRpb249Ii5cc2FtcGxlNzA0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjU4OTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIGxvY2F0aW9uPSJzYW1wbGU2NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIGxvY2F0aW9uPSIuL3NhbXBsZTM3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgbG9jYXRpb249Ii5cc2FtcGxlNDg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTU0Y2U3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIGxvY2F0aW9uPSJzYW1wbGUyNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSIuL3NhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgbG9jYXRpb249Ii5cc2FtcGxlMjkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNhZWMwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249InNhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIGxvY2F0aW9uPSIuL3NhbXBsZTIzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgbG9jYXRpb249Ii5cc2FtcGxlMTgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYzAzYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgbG9jYXRpb249InNhbXBsZTg1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiIgbG9jYXRpb249Ii4vc2FtcGxlNzcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSIuXHNhbXBsZTUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjYxYWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249InNhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIGxvY2F0aW9uPSIuXHNhbXBsZTM4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhNTM2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiBsb2NhdGlvbj0ic2FtcGxlMTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiBsb2NhdGlvbj0iLi9zYW1wbGU0NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii5cc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MjZlODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgbG9jYXRpb249InNhbXBsZTQ5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgbG9jYXRpb249Ii4vc2FtcGxlOTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0iLlxzYW1wbGUyODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTUzZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgbG9jYXRpb249InNhbXBsZTYwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgbG9jYXRpb249Ii4vc2FtcGxlNzgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZGNkOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgbG9jYXRpb249InNhbXBsZTYxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgbG9jYXRpb249Ii4vc2FtcGxlODc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1Zjc2MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgbG9jYXRpb249InNhbXBsZTk5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgbG9jYXRpb249Ii4vc2FtcGxlMjI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0iLlxzYW1wbGUyMzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYTAzMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249InNhbXBsZTQ3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgbG9jYXRpb249Ii4vc2FtcGxlODg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMzlmM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgbG9jYXRpb249InNhbXBsZTY1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgbG9jYXRpb249Ii4vc2FtcGxlODM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiBsb2NhdGlvbj0iLlxzYW1wbGUyNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkM2JlM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiBsb2NhdGlvbj0ic2FtcGxlNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgbG9jYXRpb249Ii5cc2FtcGxlODQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU4MGY0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiBsb2NhdGlvbj0ic2FtcGxlOTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIGxvY2F0aW9uPSIuXHNhbXBsZTU5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTY5MDFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgbG9jYXRpb249InNhbXBsZTk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIGxvY2F0aW9uPSIuXHNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljN2Q0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiBsb2NhdGlvbj0ic2FtcGxlMTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzNjdiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiBsb2NhdGlvbj0ic2FtcGxlMjQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTY3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM3ZjUyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiBsb2NhdGlvbj0ic2FtcGxlNTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyZmU4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiBsb2NhdGlvbj0ic2FtcGxlNDQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiBsb2NhdGlvbj0iLi9zYW1wbGUzMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249Ii5cc2FtcGxlOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmN2QwYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgbG9jYXRpb249InNhbXBsZTIzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgbG9jYXRpb249Ii4vc2FtcGxlOTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYjljY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgbG9jYXRpb249InNhbXBsZTE4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgbG9jYXRpb249Ii4vc2FtcGxlMjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MjQ0MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgbG9jYXRpb249InNhbXBsZTE5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgbG9jYXRpb249Ii4vc2FtcGxlMTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiBsb2NhdGlvbj0iLlxzYW1wbGUyNjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOGFjNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgbG9jYXRpb249InNhbXBsZTY1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgbG9jYXRpb249Ii4vc2FtcGxlMzIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiBsb2NhdGlvbj0iLlxzYW1wbGU4MzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YjcwNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgbG9jYXRpb249InNhbXBsZTM3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgbG9jYXRpb249Ii4vc2FtcGxlNjE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiBsb2NhdGlvbj0iLlxzYW1wbGU5MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmEyZTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIGxvY2F0aW9uPSJzYW1wbGU4MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIGxvY2F0aW9uPSIuL3NhbXBsZTExMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgbG9jYXRpb249Ii5cc2FtcGxlNzI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MzYyNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgbG9jYXRpb249InNhbXBsZTM4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgbG9jYXRpb249Ii4vc2FtcGxlNjczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiBsb2NhdGlvbj0iLlxzYW1wbGUzNjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOGMxOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgbG9jYXRpb249InNhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgbG9jYXRpb249Ii4vc2FtcGxlMzcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNzJjMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgbG9jYXRpb249InNhbXBsZTI3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgbG9jYXRpb249Ii5cc2FtcGxlNjU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjgwNDliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIGxvY2F0aW9uPSJzYW1wbGUyMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTY0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuXHNhbXBsZTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YjZkMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiBsb2NhdGlvbj0ic2FtcGxlNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIGxvY2F0aW9uPSIuL3NhbXBsZTEyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0iLlxzYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyZWFjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiBsb2NhdGlvbj0ic2FtcGxlNjE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIGxvY2F0aW9uPSIuXHNhbXBsZTg2MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA3YTc2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiBsb2NhdGlvbj0ic2FtcGxlODg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2ZmQ4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSJzYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIGxvY2F0aW9uPSIuL3NhbXBsZTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3MDFhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiBsb2NhdGlvbj0ic2FtcGxlOTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiBsb2NhdGlvbj0iLi9zYW1wbGU3MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIGxvY2F0aW9uPSIuXHNhbXBsZTM4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmYWVhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSJzYW1wbGUzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgbG9jYXRpb249Ii4vc2FtcGxlNDk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0iLlxzYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgwMDczOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIGxvY2F0aW9uPSJzYW1wbGU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgbG9jYXRpb249Ii4vc2FtcGxlNjIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiBsb2NhdGlvbj0iLlxzYW1wbGUyMjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliYzM1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiBsb2NhdGlvbj0ic2FtcGxlOTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiBsb2NhdGlvbj0iLi9zYW1wbGU3NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIGxvY2F0aW9uPSIuXHNhbXBsZTM1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjg1NmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIGxvY2F0aW9uPSJzYW1wbGU3MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSIuL3NhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgbG9jYXRpb249Ii5cc2FtcGxlOTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGQ0YTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249InNhbXBsZTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTg4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdjOTgzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiBsb2NhdGlvbj0ic2FtcGxlODU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiBsb2NhdGlvbj0iLi9zYW1wbGU2MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIGxvY2F0aW9uPSIuXHNhbXBsZTcyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVjNjUyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiBsb2NhdGlvbj0ic2FtcGxlOTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiBsb2NhdGlvbj0iLi9zYW1wbGUzMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIGxvY2F0aW9uPSIuXHNhbXBsZTY1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IwMGQwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIGxvY2F0aW9uPSJzYW1wbGU0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgbG9jYXRpb249Ii4vc2FtcGxlOTk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZjU5OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249InNhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgbG9jYXRpb249Ii4vc2FtcGxlMTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiBsb2NhdGlvbj0iLlxzYW1wbGU0NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOWJiYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgbG9jYXRpb249InNhbXBsZTI2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgbG9jYXRpb249Ii4vc2FtcGxlOTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiBsb2NhdGlvbj0iLlxzYW1wbGUzMzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkODlmMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgbG9jYXRpb249InNhbXBsZTE4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgbG9jYXRpb249Ii4vc2FtcGxlNDAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYmQ2MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgbG9jYXRpb249InNhbXBsZTMzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgbG9jYXRpb249Ii4vc2FtcGxlNjEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjNlMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgbG9jYXRpb249InNhbXBsZTUwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgbG9jYXRpb249Ii4vc2FtcGxlOTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTg4ZDc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIGxvY2F0aW9uPSJzYW1wbGU2MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTIxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgbG9jYXRpb249Ii5cc2FtcGxlOTE4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMTcwNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiBsb2NhdGlvbj0ic2FtcGxlMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTcyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgbG9jYXRpb249Ii5cc2FtcGxlNTE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTY4N2U4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIGxvY2F0aW9uPSJzYW1wbGU1OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgbG9jYXRpb249Ii5cc2FtcGxlNDY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjFlZDI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIGxvY2F0aW9uPSJzYW1wbGU5NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgbG9jYXRpb249Ii4vc2FtcGxlNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTYwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc2N2IxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiBsb2NhdGlvbj0ic2FtcGxlOTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YjhkOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgbG9jYXRpb249InNhbXBsZTQ0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgbG9jYXRpb249Ii4vc2FtcGxlOTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MWYwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgbG9jYXRpb249InNhbXBsZTc5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgbG9jYXRpb249Ii5cc2FtcGxlNDQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTIyMzExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIGxvY2F0aW9uPSJzYW1wbGU2MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIGxvY2F0aW9uPSIuL3NhbXBsZTEzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgbG9jYXRpb249Ii5cc2FtcGxlNzAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjM2YWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIGxvY2F0aW9uPSJzYW1wbGUxNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIGxvY2F0aW9uPSIuL3NhbXBsZTMxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgbG9jYXRpb249Ii5cc2FtcGxlNjMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI3MjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIGxvY2F0aW9uPSJzYW1wbGU0MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIGxvY2F0aW9uPSIuL3NhbXBsZTM3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgbG9jYXRpb249Ii5cc2FtcGxlNDA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmQyOTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIGxvY2F0aW9uPSJzYW1wbGU0NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii4vc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIGxvY2F0aW9uPSIuXHNhbXBsZTQ1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNjc4YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0ic2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTYwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgbG9jYXRpb249Ii5cc2FtcGxlMzU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NTM5OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiBsb2NhdGlvbj0ic2FtcGxlMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIGxvY2F0aW9uPSIuL3NhbXBsZTk5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgbG9jYXRpb249Ii5cc2FtcGxlNzE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTUwMzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIGxvY2F0aW9uPSJzYW1wbGU1OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiBsb2NhdGlvbj0iLi9zYW1wbGUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiBsb2NhdGlvbj0iLlxzYW1wbGU0Nzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjBmMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgbG9jYXRpb249InNhbXBsZTg5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgbG9jYXRpb249Ii4vc2FtcGxlODY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiBsb2NhdGlvbj0iLlxzYW1wbGUyMjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NzcxM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgbG9jYXRpb249InNhbXBsZTUwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgbG9jYXRpb249Ii4vc2FtcGxlOTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1IiBsb2NhdGlvbj0iLlxzYW1wbGU2OTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTkxYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgbG9jYXRpb249InNhbXBsZTc3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgbG9jYXRpb249Ii4vc2FtcGxlODU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0iLlxzYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNzcwMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgbG9jYXRpb249InNhbXBsZTI0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgbG9jYXRpb249Ii4vc2FtcGxlOTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiBsb2NhdGlvbj0iLlxzYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDljNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0ic2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgbG9jYXRpb249Ii5cc2FtcGxlODI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDBmNjQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIGxvY2F0aW9uPSJzYW1wbGU5NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIGxvY2F0aW9uPSIuL3NhbXBsZTMzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiIgbG9jYXRpb249Ii5cc2FtcGxlMzU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjQ0NmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249InNhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiBsb2NhdGlvbj0iLi9zYW1wbGU4OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTE5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRkZDliNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSJzYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgbG9jYXRpb249Ii4vc2FtcGxlNjAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTk4OTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIGxvY2F0aW9uPSJzYW1wbGUxNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTk3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgbG9jYXRpb249Ii5cc2FtcGxlNDA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNmUyOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgbG9jYXRpb249InNhbXBsZTYzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgbG9jYXRpb249Ii4vc2FtcGxlODUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgbG9jYXRpb249Ii5cc2FtcGxlNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc5NmQ3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiBsb2NhdGlvbj0ic2FtcGxlNDA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhM2Q0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiBsb2NhdGlvbj0ic2FtcGxlOTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiBsb2NhdGlvbj0iLi9zYW1wbGU2NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTU4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZjYzdlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiBsb2NhdGlvbj0ic2FtcGxlODI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIiBsb2NhdGlvbj0iLi9zYW1wbGUxOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIGxvY2F0aW9uPSIuXHNhbXBsZTYxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhYjliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiBsb2NhdGlvbj0ic2FtcGxlNzAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiBsb2NhdGlvbj0iLi9zYW1wbGUxNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTczMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAxYmVkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiBsb2NhdGlvbj0ic2FtcGxlMzgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiBsb2NhdGlvbj0iLi9zYW1wbGU4Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIGxvY2F0aW9uPSIuXHNhbXBsZTkyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q0YjVkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiBsb2NhdGlvbj0ic2FtcGxlNTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiBsb2NhdGlvbj0iLi9zYW1wbGU0NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTUzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E0MzhmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiBsb2NhdGlvbj0ic2FtcGxlMjE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiBsb2NhdGlvbj0iLi9zYW1wbGU2MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIGxvY2F0aW9uPSIuXHNhbXBsZTE2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmODhlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiBsb2NhdGlvbj0ic2FtcGxlNDE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249Ii5cc2FtcGxlMTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1OWRiODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgbG9jYXRpb249InNhbXBsZTQyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgbG9jYXRpb249Ii4vc2FtcGxlNDYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiBsb2NhdGlvbj0iLlxzYW1wbGU5NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWMyMjM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIGxvY2F0aW9uPSJzYW1wbGUzNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIGxvY2F0aW9uPSIuL3NhbXBsZTEwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyIgbG9jYXRpb249Ii5cc2FtcGxlNDI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlN2E0NjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgbG9jYXRpb249InNhbXBsZTE2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiBsb2NhdGlvbj0iLlxzYW1wbGUzMTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNzllMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgbG9jYXRpb249InNhbXBsZTg2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgbG9jYXRpb249Ii4vc2FtcGxlMTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiBsb2NhdGlvbj0iLlxzYW1wbGUyNjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzN2JlZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgbG9jYXRpb249InNhbXBsZTY4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgbG9jYXRpb249Ii4vc2FtcGxlNDA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiBsb2NhdGlvbj0iLlxzYW1wbGU5Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNzEyYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgbG9jYXRpb249InNhbXBsZTc4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgbG9jYXRpb249Ii4vc2FtcGxlODU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIGxvY2F0aW9uPSIuXHNhbXBsZTMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODQyMWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIGxvY2F0aW9uPSJzYW1wbGU5NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgbG9jYXRpb249Ii5cc2FtcGxlMjUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDQ2ZjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIGxvY2F0aW9uPSJzYW1wbGU4NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTc4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgbG9jYXRpb249Ii5cc2FtcGxlOTA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJkODM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIGxvY2F0aW9uPSJzYW1wbGUxNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSIuL3NhbXBsZTkwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgbG9jYXRpb249Ii5cc2FtcGxlODk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODk1Mjg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIGxvY2F0aW9uPSJzYW1wbGUyNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIGxvY2F0aW9uPSIuL3NhbXBsZTIwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgbG9jYXRpb249Ii5cc2FtcGxlNzA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmFiNmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSJzYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIGxvY2F0aW9uPSIuL3NhbXBsZTg5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgbG9jYXRpb249Ii5cc2FtcGxlOTMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzZmY2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIGxvY2F0aW9uPSJzYW1wbGU4NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIGxvY2F0aW9uPSIuL3NhbXBsZTE0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgbG9jYXRpb249Ii5cc2FtcGxlNTQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzOGI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiBsb2NhdGlvbj0ic2FtcGxlNzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjY5NjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIGxvY2F0aW9uPSJzYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTk0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgbG9jYXRpb249Ii5cc2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWY1MTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIGxvY2F0aW9uPSJzYW1wbGUxMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249Ii5cc2FtcGxlODI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2NkMTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIGxvY2F0aW9uPSJzYW1wbGU1ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiIGxvY2F0aW9uPSIuL3NhbXBsZTc5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgbG9jYXRpb249Ii5cc2FtcGxlMzIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDQ3ZjY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIGxvY2F0aW9uPSJzYW1wbGU3ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgbG9jYXRpb249Ii5cc2FtcGxlMTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWQ3MTllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgbG9jYXRpb249InNhbXBsZTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0iLi9zYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTYyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFmY2JlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiBsb2NhdGlvbj0ic2FtcGxlODQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii5cc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4OTQ1MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgbG9jYXRpb249InNhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiBsb2NhdGlvbj0iLi9zYW1wbGU4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgbG9jYXRpb249Ii5cc2FtcGxlODk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTEyNmJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIGxvY2F0aW9uPSJzYW1wbGU0NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTgyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgbG9jYXRpb249Ii5cc2FtcGxlNDgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWE5N2M3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIGxvY2F0aW9uPSJzYW1wbGU3NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIGxvY2F0aW9uPSIuL3NhbXBsZTE3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgbG9jYXRpb249Ii5cc2FtcGxlMjQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGI2Y2Y3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIGxvY2F0aW9uPSJzYW1wbGU2Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgbG9jYXRpb249Ii4vc2FtcGxlODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTY2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjA2OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgbG9jYXRpb249InNhbXBsZTI1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgbG9jYXRpb249Ii4vc2FtcGxlMTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMxNzgxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiBsb2NhdGlvbj0ic2FtcGxlMzcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YzQzNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgbG9jYXRpb249InNhbXBsZTg4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgbG9jYXRpb249Ii4vc2FtcGxlNzg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiBsb2NhdGlvbj0iLlxzYW1wbGU1NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2N2U4NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgbG9jYXRpb249InNhbXBsZTg2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgbG9jYXRpb249Ii4vc2FtcGxlNzg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNWYwNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgbG9jYXRpb249InNhbXBsZTg0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgbG9jYXRpb249Ii4vc2FtcGxlNTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwN2E3NTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgbG9jYXRpb249InNhbXBsZTI5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgbG9jYXRpb249Ii4vc2FtcGxlNTAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmM2U4NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgbG9jYXRpb249InNhbXBsZTUwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249Ii4vc2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZWU1NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgbG9jYXRpb249InNhbXBsZTEwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgbG9jYXRpb249Ii4vc2FtcGxlNzQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhM2FmMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgbG9jYXRpb249InNhbXBsZTM3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgbG9jYXRpb249Ii4vc2FtcGxlNTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiBsb2NhdGlvbj0iLlxzYW1wbGUxMTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Y2VhNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgbG9jYXRpb249InNhbXBsZTMyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgbG9jYXRpb249Ii4vc2FtcGxlNTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YjU4NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSIgbG9jYXRpb249InNhbXBsZTMzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIGxvY2F0aW9uPSIuXHNhbXBsZTExNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZTEwODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgbG9jYXRpb249InNhbXBsZTQwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgbG9jYXRpb249Ii4vc2FtcGxlMzQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZhNzg4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiBsb2NhdGlvbj0ic2FtcGxlNTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTMyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1ODFmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiBsb2NhdGlvbj0ic2FtcGxlNjA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIGxvY2F0aW9uPSIuXHNhbXBsZTEwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdjYTNhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiBsb2NhdGlvbj0ic2FtcGxlNTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLi9zYW1wbGUxODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTI5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwYTA1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiBsb2NhdGlvbj0ic2FtcGxlNTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIGxvY2F0aW9uPSIuXHNhbXBsZTY0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwOWQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0ic2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIGxvY2F0aW9uPSIuXHNhbXBsZTc4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEzZTIwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIGxvY2F0aW9uPSJzYW1wbGU0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii4vc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiBsb2NhdGlvbj0iLlxzYW1wbGUyMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMDM2NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgbG9jYXRpb249InNhbXBsZTI2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgbG9jYXRpb249Ii4vc2FtcGxlOTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiBsb2NhdGlvbj0iLlxzYW1wbGU1MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNWIwN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgbG9jYXRpb249InNhbXBsZTE2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgbG9jYXRpb249Ii4vc2FtcGxlMjQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIGxvY2F0aW9uPSIuXHNhbXBsZTExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQxYTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIGxvY2F0aW9uPSJzYW1wbGU3ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTM1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgbG9jYXRpb249Ii5cc2FtcGxlNjEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTViMmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIGxvY2F0aW9uPSJzYW1wbGU5MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIGxvY2F0aW9uPSIuL3NhbXBsZTIxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgbG9jYXRpb249Ii5cc2FtcGxlODc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhNjQzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSJzYW1wbGU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgbG9jYXRpb249Ii4vc2FtcGxlOTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM3MmRmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIGxvY2F0aW9uPSJzYW1wbGU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgbG9jYXRpb249Ii4vc2FtcGxlODMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODM1YWUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIGxvY2F0aW9uPSJzYW1wbGU0NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiIGxvY2F0aW9uPSIuL3NhbXBsZTc5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgbG9jYXRpb249Ii5cc2FtcGxlOTczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDViNzJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIGxvY2F0aW9uPSJzYW1wbGU0OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIGxvY2F0aW9uPSIuL3NhbXBsZTc1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249Ii5cc2FtcGxlOTc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njc2YzgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIGxvY2F0aW9uPSJzYW1wbGUxMDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTY3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgbG9jYXRpb249Ii5cc2FtcGxlODI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjI3OGUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIGxvY2F0aW9uPSJzYW1wbGU2NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgbG9jYXRpb249Ii5cc2FtcGxlMzU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTAyMDg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgbG9jYXRpb249InNhbXBsZTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIGxvY2F0aW9uPSIuXHNhbXBsZTI4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4ZTUwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSJzYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyIgbG9jYXRpb249Ii4vc2FtcGxlMTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiBsb2NhdGlvbj0iLlxzYW1wbGUzODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYTZhYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgbG9jYXRpb249InNhbXBsZTQ3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgbG9jYXRpb249Ii4vc2FtcGxlODkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiBsb2NhdGlvbj0iLlxzYW1wbGU0NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YmQ0YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgbG9jYXRpb249InNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgbG9jYXRpb249Ii4vc2FtcGxlNTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzZmZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgbG9jYXRpb249InNhbXBsZTQyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgbG9jYXRpb249Ii4vc2FtcGxlNDI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiBsb2NhdGlvbj0iLlxzYW1wbGU1OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWFmYmFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSJzYW1wbGUyODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIGxvY2F0aW9uPSIuL3NhbXBsZTc4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgbG9jYXRpb249Ii5cc2FtcGxlNTYzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NzcyN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgbG9jYXRpb249InNhbXBsZTkyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgbG9jYXRpb249Ii4vc2FtcGxlNTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZmRhZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgbG9jYXRpb249InNhbXBsZTE1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249Ii4vc2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiBsb2NhdGlvbj0iLlxzYW1wbGU0ODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZWMxMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgbG9jYXRpb249InNhbXBsZTExMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgbG9jYXRpb249Ii4vc2FtcGxlMjg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWI4OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgbG9jYXRpb249InNhbXBsZTUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgbG9jYXRpb249Ii4vc2FtcGxlNTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNWRlZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249InNhbXBsZTcwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgbG9jYXRpb249Ii4vc2FtcGxlNTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiBsb2NhdGlvbj0iLlxzYW1wbGU5OTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYzgzNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgbG9jYXRpb249InNhbXBsZTk4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgbG9jYXRpb249Ii4vc2FtcGxlNzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZDRlYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgbG9jYXRpb249InNhbXBsZTU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgbG9jYXRpb249Ii4vc2FtcGxlMzA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYWY5ODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249InNhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249Ii4vc2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiBsb2NhdGlvbj0iLlxzYW1wbGU1NDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjY2IxZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgbG9jYXRpb249InNhbXBsZTU4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgbG9jYXRpb249Ii4vc2FtcGxlODIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MzNiNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgbG9jYXRpb249InNhbXBsZTY0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgbG9jYXRpb249Ii4vc2FtcGxlNTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiBsb2NhdGlvbj0iLlxzYW1wbGU5MDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRkYThlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiBsb2NhdGlvbj0ic2FtcGxlMjIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiBsb2NhdGlvbj0iLi9zYW1wbGU0MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIGxvY2F0aW9uPSIuXHNhbXBsZTI3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODk5MGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIGxvY2F0aW9uPSJzYW1wbGU0NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249Ii5cc2FtcGxlODI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOGFmMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgbG9jYXRpb249InNhbXBsZTk1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgbG9jYXRpb249Ii4vc2FtcGxlMzc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiBsb2NhdGlvbj0iLlxzYW1wbGUyMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNTcyOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgbG9jYXRpb249InNhbXBsZTc1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgbG9jYXRpb249Ii4vc2FtcGxlOTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MjVlNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgbG9jYXRpb249InNhbXBsZTY3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgbG9jYXRpb249Ii4vc2FtcGxlNjcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSIuXHNhbXBsZTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTg4Y2E5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSJzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIGxvY2F0aW9uPSIuL3NhbXBsZTM5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgbG9jYXRpb249Ii5cc2FtcGxlNDA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWMyNTI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIGxvY2F0aW9uPSJzYW1wbGUzNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIGxvY2F0aW9uPSIuL3NhbXBsZTYwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEyZDVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiBsb2NhdGlvbj0ic2FtcGxlNjAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiBsb2NhdGlvbj0iLi9zYW1wbGU2NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkZmNlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiBsb2NhdGlvbj0ic2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiBsb2NhdGlvbj0iLi9zYW1wbGUxODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIGxvY2F0aW9uPSIuXHNhbXBsZTM3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZmMTZhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiBsb2NhdGlvbj0ic2FtcGxlMjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiBsb2NhdGlvbj0iLi9zYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTc0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE4NzIyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiBsb2NhdGlvbj0ic2FtcGxlNzU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSIuL3NhbXBsZTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNmUwMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgbG9jYXRpb249InNhbXBsZTU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgbG9jYXRpb249Ii4vc2FtcGxlMjEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiBsb2NhdGlvbj0iLlxzYW1wbGU0OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTg2ZGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIGxvY2F0aW9uPSJzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIGxvY2F0aW9uPSIuL3NhbXBsZTQzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgbG9jYXRpb249Ii5cc2FtcGxlMjUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NDQ0ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgbG9jYXRpb249InNhbXBsZTg5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgbG9jYXRpb249Ii4vc2FtcGxlNDYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1Nzk3MmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgbG9jYXRpb249InNhbXBsZTE3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgbG9jYXRpb249Ii5cc2FtcGxlMzQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTQyODZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIGxvY2F0aW9uPSJzYW1wbGU5NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTc2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgbG9jYXRpb249Ii5cc2FtcGxlNTUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjRlNDA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIGxvY2F0aW9uPSJzYW1wbGU1MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTk0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgbG9jYXRpb249Ii5cc2FtcGxlMjkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZkNDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIGxvY2F0aW9uPSJzYW1wbGU3ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIGxvY2F0aW9uPSIuL3NhbXBsZTI5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgbG9jYXRpb249Ii5cc2FtcGxlMzUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGE2YzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIGxvY2F0aW9uPSJzYW1wbGU4MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzViZTJjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiBsb2NhdGlvbj0ic2FtcGxlODAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSIuXHNhbXBsZTM2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFjYjYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiBsb2NhdGlvbj0ic2FtcGxlNDU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLi9zYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIGxvY2F0aW9uPSIuXHNhbXBsZTU0OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ0NzRiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0ic2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTUyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk1N2I1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiBsb2NhdGlvbj0ic2FtcGxlODU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIGxvY2F0aW9uPSIuXHNhbXBsZTE4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOGVjNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgbG9jYXRpb249InNhbXBsZTExOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgbG9jYXRpb249Ii4vc2FtcGxlNDk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBlMzdjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiBsb2NhdGlvbj0ic2FtcGxlOTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiBsb2NhdGlvbj0iLi9zYW1wbGU5MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIGxvY2F0aW9uPSIuXHNhbXBsZTI4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhMTNkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiBsb2NhdGlvbj0ic2FtcGxlMzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M0ODJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0ic2FtcGxlMTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM5NjMzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0ic2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciIGxvY2F0aW9uPSIuXHNhbXBsZTY5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I0MWEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIGxvY2F0aW9uPSJzYW1wbGU3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0iLi9zYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgbG9jYXRpb249Ii5cc2FtcGxlNTMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZThiNDZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIGxvY2F0aW9uPSJzYW1wbGUzOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIGxvY2F0aW9uPSIuL3NhbXBsZTcwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgbG9jYXRpb249Ii5cc2FtcGxlNjMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTY1NTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSJzYW1wbGUyMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiIGxvY2F0aW9uPSIuL3NhbXBsZTE4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgbG9jYXRpb249Ii5cc2FtcGxlNzAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2U2ZDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIGxvY2F0aW9uPSJzYW1wbGUyODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgbG9jYXRpb249Ii5cc2FtcGxlNzQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjA5MmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIGxvY2F0aW9uPSJzYW1wbGUzODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIGxvY2F0aW9uPSIuL3NhbXBsZTE0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgbG9jYXRpb249Ii5cc2FtcGxlNTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjE3YjAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIGxvY2F0aW9uPSJzYW1wbGU2NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIGxvY2F0aW9uPSIuL3NhbXBsZTk3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgbG9jYXRpb249Ii5cc2FtcGxlMjk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhmM2U3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0ic2FtcGxlNDk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTUzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGEyMGNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSJzYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIGxvY2F0aW9uPSIuL3NhbXBsZTcxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgbG9jYXRpb249Ii5cc2FtcGxlNjc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWIzODI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIGxvY2F0aW9uPSJzYW1wbGU4ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIGxvY2F0aW9uPSIuL3NhbXBsZTIxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZhMmIyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiBsb2NhdGlvbj0ic2FtcGxlMjY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTU3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNiYWE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiBsb2NhdGlvbj0ic2FtcGxlNDAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiBsb2NhdGlvbj0iLi9zYW1wbGUzODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgbG9jYXRpb249Ii5cc2FtcGxlNTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MTBhNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgbG9jYXRpb249InNhbXBsZTkwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgbG9jYXRpb249Ii4vc2FtcGxlMzk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNmNmZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgbG9jYXRpb249InNhbXBsZTMwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgbG9jYXRpb249Ii4vc2FtcGxlOTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiBsb2NhdGlvbj0iLlxzYW1wbGU0MTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZGVmMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgbG9jYXRpb249InNhbXBsZTQ4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgbG9jYXRpb249Ii4vc2FtcGxlNTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249Ii5cc2FtcGxlNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyMmM0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiBsb2NhdGlvbj0ic2FtcGxlNzkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiBsb2NhdGlvbj0iLi9zYW1wbGU4NTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTY3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlmYWYzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiBsb2NhdGlvbj0ic2FtcGxlMjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIGxvY2F0aW9uPSIuXHNhbXBsZTM1My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhMWE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiBsb2NhdGlvbj0ic2FtcGxlNzAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiBsb2NhdGlvbj0iLi9zYW1wbGU3MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249Ii5cc2FtcGxlMjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzQwYTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIGxvY2F0aW9uPSJzYW1wbGU2Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIGxvY2F0aW9uPSIuL3NhbXBsZTI0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgbG9jYXRpb249Ii5cc2FtcGxlNTc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMmI2NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgbG9jYXRpb249InNhbXBsZTczMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgbG9jYXRpb249Ii4vc2FtcGxlNTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YzU5ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgbG9jYXRpb249InNhbXBsZTIzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgbG9jYXRpb249Ii4vc2FtcGxlMjIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYjQ2OTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgbG9jYXRpb249InNhbXBsZTQzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgbG9jYXRpb249Ii4vc2FtcGxlNDgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiBsb2NhdGlvbj0iLlxzYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkN2MwMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgbG9jYXRpb249InNhbXBsZTQ1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgbG9jYXRpb249Ii4vc2FtcGxlNzk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiBsb2NhdGlvbj0iLlxzYW1wbGU1MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZjlmNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgbG9jYXRpb249InNhbXBsZTU4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgbG9jYXRpb249Ii4vc2FtcGxlODIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiBsb2NhdGlvbj0iLlxzYW1wbGU1NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNzllY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249InNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgbG9jYXRpb249Ii4vc2FtcGxlNzM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhOTk4ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgbG9jYXRpb249InNhbXBsZTIwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgbG9jYXRpb249Ii4vc2FtcGxlNzg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGRiMjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIGxvY2F0aW9uPSJzYW1wbGU0NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIGxvY2F0aW9uPSIuL3NhbXBsZTIxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgbG9jYXRpb249Ii5cc2FtcGxlNDA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGQwNGRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249InNhbXBsZTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiBsb2NhdGlvbj0iLi9zYW1wbGU2ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIGxvY2F0aW9uPSIuXHNhbXBsZTg3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyNzlmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiBsb2NhdGlvbj0ic2FtcGxlMzIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiBsb2NhdGlvbj0iLi9zYW1wbGU3Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIGxvY2F0aW9uPSIuXHNhbXBsZTYxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhM2JhZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgbG9jYXRpb249InNhbXBsZTE1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgbG9jYXRpb249Ii4vc2FtcGxlMjc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiMmJkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiBsb2NhdGlvbj0ic2FtcGxlOTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIiBsb2NhdGlvbj0iLi9zYW1wbGUxNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIGxvY2F0aW9uPSIuXHNhbXBsZTY2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5ZDNjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiBsb2NhdGlvbj0ic2FtcGxlMjg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSIuXHNhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdhZWFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiBsb2NhdGlvbj0ic2FtcGxlODEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAzMGQ1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSJzYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgbG9jYXRpb249Ii4vc2FtcGxlNjUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YjFlYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgbG9jYXRpb249InNhbXBsZTMzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgbG9jYXRpb249Ii4vc2FtcGxlMTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiBsb2NhdGlvbj0iLlxzYW1wbGUzOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MjQyY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgbG9jYXRpb249InNhbXBsZTE3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgbG9jYXRpb249Ii4vc2FtcGxlMzM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiBsb2NhdGlvbj0iLlxzYW1wbGUxNjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZDk4MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgbG9jYXRpb249InNhbXBsZTQ5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgbG9jYXRpb249Ii4vc2FtcGxlODExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiBsb2NhdGlvbj0iLlxzYW1wbGU5ODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNmVkNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgbG9jYXRpb249InNhbXBsZTU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgbG9jYXRpb249Ii4vc2FtcGxlNTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIiBsb2NhdGlvbj0iLlxzYW1wbGUxMjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMDEwYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgbG9jYXRpb249InNhbXBsZTMwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgbG9jYXRpb249Ii4vc2FtcGxlMjcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MjBlZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgbG9jYXRpb249InNhbXBsZTM0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgbG9jYXRpb249Ii4vc2FtcGxlNTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiBsb2NhdGlvbj0iLlxzYW1wbGU5MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmM4ODY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249InNhbXBsZTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIGxvY2F0aW9uPSIuXHNhbXBsZTUxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mjg0MTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIGxvY2F0aW9uPSJzYW1wbGU2MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLi9zYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NjAyMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgbG9jYXRpb249InNhbXBsZTIyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiBsb2NhdGlvbj0iLi9zYW1wbGUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgbG9jYXRpb249Ii5cc2FtcGxlNzE4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDAxNDg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIGxvY2F0aW9uPSJzYW1wbGU2MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIGxvY2F0aW9uPSIuL3NhbXBsZTMzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgbG9jYXRpb249Ii5cc2FtcGxlNDYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDQ4MmZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIGxvY2F0aW9uPSJzYW1wbGU0MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgbG9jYXRpb249Ii4vc2FtcGxlNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIGxvY2F0aW9uPSIuXHNhbXBsZTE0OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYxZWQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0ic2FtcGxlNTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiBsb2NhdGlvbj0iLi9zYW1wbGU2OTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIGxvY2F0aW9uPSIuXHNhbXBsZTI3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QwZGI1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiBsb2NhdGlvbj0ic2FtcGxlNTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiBsb2NhdGlvbj0iLi9zYW1wbGUyNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTgzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiM2QzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiBsb2NhdGlvbj0ic2FtcGxlNzMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuL3NhbXBsZTgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiBsb2NhdGlvbj0iLlxzYW1wbGU3OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjY3OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgbG9jYXRpb249InNhbXBsZTc2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgbG9jYXRpb249Ii4vc2FtcGxlOTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU3NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YmM0ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgbG9jYXRpb249InNhbXBsZTI3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgbG9jYXRpb249Ii4vc2FtcGxlNTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiBsb2NhdGlvbj0iLlxzYW1wbGU4OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNWEwNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgbG9jYXRpb249InNhbXBsZTExMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgbG9jYXRpb249Ii4vc2FtcGxlNDYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiBsb2NhdGlvbj0iLlxzYW1wbGU1OTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzgyY2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIGxvY2F0aW9uPSJzYW1wbGU0NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIGxvY2F0aW9uPSIuL3NhbXBsZTI1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgbG9jYXRpb249Ii5cc2FtcGxlNDMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNTU4OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgbG9jYXRpb249InNhbXBsZTQxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgbG9jYXRpb249Ii4vc2FtcGxlMzg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ODhlYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgbG9jYXRpb249InNhbXBsZTk4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiIgbG9jYXRpb249Ii4vc2FtcGxlOTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZGE4NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249InNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgbG9jYXRpb249Ii4vc2FtcGxlNjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Y2RmMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiIgbG9jYXRpb249InNhbXBsZTc1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgbG9jYXRpb249Ii4vc2FtcGxlMjYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiBsb2NhdGlvbj0iLlxzYW1wbGU4NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NGIyMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgbG9jYXRpb249InNhbXBsZTE1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgbG9jYXRpb249Ii4vc2FtcGxlNTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3Mzk1YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgbG9jYXRpb249InNhbXBsZTEzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgbG9jYXRpb249Ii5cc2FtcGxlMjU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWY0MWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIGxvY2F0aW9uPSJzYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIGxvY2F0aW9uPSIuL3NhbXBsZTY2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSIgbG9jYXRpb249Ii5cc2FtcGxlODMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGFjZTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIGxvY2F0aW9uPSJzYW1wbGUyODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIGxvY2F0aW9uPSIuL3NhbXBsZTk5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgbG9jYXRpb249Ii5cc2FtcGxlNjE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjE2NGNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIGxvY2F0aW9uPSJzYW1wbGUxMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIGxvY2F0aW9uPSIuL3NhbXBsZTUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MzM2RiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiBsb2NhdGlvbj0ic2FtcGxlOTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIGxvY2F0aW9uPSIuXHNhbXBsZTY3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYWE2MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgbG9jYXRpb249InNhbXBsZTg1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgbG9jYXRpb249Ii4vc2FtcGxlMjQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiBsb2NhdGlvbj0iLlxzYW1wbGU3NDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM5NzliNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiBsb2NhdGlvbj0ic2FtcGxlNzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIGxvY2F0aW9uPSIuXHNhbXBsZTM4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3ZmY2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiBsb2NhdGlvbj0ic2FtcGxlNDQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0iLi9zYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTMxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4MmVkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiBsb2NhdGlvbj0ic2FtcGxlNzgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiBsb2NhdGlvbj0iLi9zYW1wbGUxOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgbG9jYXRpb249Ii5cc2FtcGxlNjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3N2RlMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgbG9jYXRpb249InNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgbG9jYXRpb249Ii4vc2FtcGxlNzAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiBsb2NhdGlvbj0iLlxzYW1wbGUxMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZjhiOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgbG9jYXRpb249InNhbXBsZTI0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgbG9jYXRpb249Ii4vc2FtcGxlNjE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuXHNhbXBsZTIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2FjNGU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIGxvY2F0aW9uPSJzYW1wbGU2MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIGxvY2F0aW9uPSIuL3NhbXBsZTY3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgbG9jYXRpb249Ii5cc2FtcGxlMzE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2M4NTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIGxvY2F0aW9uPSJzYW1wbGU1MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgbG9jYXRpb249Ii5cc2FtcGxlNjMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGMyYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIGxvY2F0aW9uPSJzYW1wbGU0NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIGxvY2F0aW9uPSIuL3NhbXBsZTIwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgbG9jYXRpb249Ii5cc2FtcGxlMjYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGUxZTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIGxvY2F0aW9uPSJzYW1wbGU3MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIGxvY2F0aW9uPSIuL3NhbXBsZTgyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgbG9jYXRpb249Ii5cc2FtcGxlNzg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmMwODc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIGxvY2F0aW9uPSJzYW1wbGU3MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTQzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgbG9jYXRpb249Ii5cc2FtcGxlNDI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QzMjc4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiBsb2NhdGlvbj0ic2FtcGxlMzI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiBsb2NhdGlvbj0iLi9zYW1wbGUyODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSIuXHNhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTBiMTdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgbG9jYXRpb249InNhbXBsZTQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiBsb2NhdGlvbj0iLi9zYW1wbGU2NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIGxvY2F0aW9uPSIuXHNhbXBsZTMzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ2OWJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiBsb2NhdGlvbj0ic2FtcGxlMzU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIGxvY2F0aW9uPSIuXHNhbXBsZTk0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyOGRlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIGxvY2F0aW9uPSJzYW1wbGU3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgbG9jYXRpb249Ii4vc2FtcGxlODg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxY2VlNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgbG9jYXRpb249InNhbXBsZTMxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyIgbG9jYXRpb249Ii4vc2FtcGxlNDA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZWJhYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgbG9jYXRpb249InNhbXBsZTk2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgbG9jYXRpb249Ii4vc2FtcGxlOTM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiBsb2NhdGlvbj0iLlxzYW1wbGUyMDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwODQ0NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgbG9jYXRpb249InNhbXBsZTIyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgbG9jYXRpb249Ii4vc2FtcGxlNjg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZWJlYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgbG9jYXRpb249InNhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgbG9jYXRpb249Ii4vc2FtcGxlNzE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiBsb2NhdGlvbj0iLlxzYW1wbGU0OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NWI0ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgbG9jYXRpb249InNhbXBsZTkzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgbG9jYXRpb249Ii4vc2FtcGxlNDM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiBsb2NhdGlvbj0iLlxzYW1wbGU5ODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NDBkNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgbG9jYXRpb249InNhbXBsZTQ4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgbG9jYXRpb249Ii4vc2FtcGxlNjI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZGY3NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgbG9jYXRpb249InNhbXBsZTczNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0iLi9zYW1wbGU3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgbG9jYXRpb249Ii5cc2FtcGxlMTMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NGJmYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249InNhbXBsZTM0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgbG9jYXRpb249Ii4vc2FtcGxlMjQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiBsb2NhdGlvbj0iLlxzYW1wbGUzNTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwNWI0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiBsb2NhdGlvbj0ic2FtcGxlOTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiBsb2NhdGlvbj0iLi9zYW1wbGUxODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIGxvY2F0aW9uPSIuXHNhbXBsZTMxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjM2NzVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiIGxvY2F0aW9uPSJzYW1wbGU2NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiIGxvY2F0aW9uPSIuL3NhbXBsZTU1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgbG9jYXRpb249Ii5cc2FtcGxlOTEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzM2NTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgbG9jYXRpb249InNhbXBsZTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiBsb2NhdGlvbj0iLi9zYW1wbGUzNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgbG9jYXRpb249Ii5cc2FtcGxlODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNzZjZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249InNhbXBsZTQ3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgbG9jYXRpb249Ii4vc2FtcGxlMTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmOTA1ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgbG9jYXRpb249InNhbXBsZTU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgbG9jYXRpb249Ii4vc2FtcGxlOTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNjJjMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgbG9jYXRpb249InNhbXBsZTI2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgbG9jYXRpb249Ii4vc2FtcGxlODczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NjY2MmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgbG9jYXRpb249InNhbXBsZTEyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyIgbG9jYXRpb249Ii4vc2FtcGxlNTk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NThkNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0ic2FtcGxlODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTc0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgbG9jYXRpb249Ii5cc2FtcGxlODAzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTBhMzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIGxvY2F0aW9uPSJzYW1wbGU3NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgbG9jYXRpb249Ii4vc2FtcGxlNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249Ii5cc2FtcGxlMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMmRiZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgbG9jYXRpb249InNhbXBsZTg2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgbG9jYXRpb249Ii4vc2FtcGxlODAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiBsb2NhdGlvbj0iLlxzYW1wbGU5MjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1OWQ5MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiBsb2NhdGlvbj0ic2FtcGxlMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTM3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOTVkZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgbG9jYXRpb249InNhbXBsZTU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgbG9jYXRpb249Ii4vc2FtcGxlMjY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0iLlxzYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYwZWQ0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSJzYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgbG9jYXRpb249Ii4vc2FtcGxlMzc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiBsb2NhdGlvbj0iLlxzYW1wbGU4NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZTNhYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgbG9jYXRpb249InNhbXBsZTEyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgbG9jYXRpb249Ii4vc2FtcGxlOTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSIuXHNhbXBsZTEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmJiYmYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIGxvY2F0aW9uPSJzYW1wbGU0NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIGxvY2F0aW9uPSIuL3NhbXBsZTE3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgbG9jYXRpb249Ii5cc2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWM4NWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIGxvY2F0aW9uPSJzYW1wbGU4OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii4vc2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiIGxvY2F0aW9uPSIuXHNhbXBsZTE4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRjMmJlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiBsb2NhdGlvbj0ic2FtcGxlMzc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZWVmZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSJzYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTU1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjMmI1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSIgbG9jYXRpb249Ii4vc2FtcGxlMjMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIiBsb2NhdGlvbj0iLlxzYW1wbGUzNjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNjUwODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgbG9jYXRpb249InNhbXBsZTczMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgbG9jYXRpb249Ii4vc2FtcGxlNDY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiBsb2NhdGlvbj0iLlxzYW1wbGU2NTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNTNmNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiBsb2NhdGlvbj0ic2FtcGxlMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiZjBlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiBsb2NhdGlvbj0ic2FtcGxlMzUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiBsb2NhdGlvbj0iLi9zYW1wbGU1ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMTQxZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgbG9jYXRpb249InNhbXBsZTI5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgbG9jYXRpb249Ii4vc2FtcGxlNDg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiBsb2NhdGlvbj0iLlxzYW1wbGU5OTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2YmRiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiBsb2NhdGlvbj0ic2FtcGxlNTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIGxvY2F0aW9uPSIuXHNhbXBsZTEwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc4NDY3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249InNhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLi9zYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiBsb2NhdGlvbj0iLlxzYW1wbGUxODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZGQwMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgbG9jYXRpb249InNhbXBsZTQ3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgbG9jYXRpb249Ii4vc2FtcGxlMzI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMDRlY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgbG9jYXRpb249InNhbXBsZTc4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249Ii4vc2FtcGxlMTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiBsb2NhdGlvbj0iLlxzYW1wbGU2MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYzIzMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgbG9jYXRpb249InNhbXBsZTIzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgbG9jYXRpb249Ii4vc2FtcGxlMzk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTc2ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgbG9jYXRpb249InNhbXBsZTIxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii4vc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSIuXHNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTg3OGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIGxvY2F0aW9uPSJzYW1wbGU2ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgbG9jYXRpb249Ii5cc2FtcGxlMjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZDM0ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgbG9jYXRpb249InNhbXBsZTY4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgbG9jYXRpb249Ii4vc2FtcGxlNTE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiBsb2NhdGlvbj0iLlxzYW1wbGU1Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YWMxYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgbG9jYXRpb249InNhbXBsZTk0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249Ii4vc2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0iLlxzYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NGFhOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgbG9jYXRpb249InNhbXBsZTU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgbG9jYXRpb249Ii4vc2FtcGxlNzE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiBsb2NhdGlvbj0iLlxzYW1wbGU4NDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDdjNTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIGxvY2F0aW9uPSJzYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSIuL3NhbXBsZTY1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgbG9jYXRpb249Ii5cc2FtcGxlMzM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NDQ1MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgbG9jYXRpb249InNhbXBsZTI5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiBsb2NhdGlvbj0iLi9zYW1wbGUzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgbG9jYXRpb249Ii5cc2FtcGxlNjY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTI3ZWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgbG9jYXRpb249InNhbXBsZTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiBsb2NhdGlvbj0iLi9zYW1wbGU2ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTUwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc5NzA5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiBsb2NhdGlvbj0ic2FtcGxlNTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU1ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTE5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBiNTVkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiBsb2NhdGlvbj0ic2FtcGxlMzU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTU1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ1MDA1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiBsb2NhdGlvbj0ic2FtcGxlNDcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIGxvY2F0aW9uPSIuXHNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjZWMzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIiBsb2NhdGlvbj0ic2FtcGxlNzEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii5cc2FtcGxlODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MzZmZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgbG9jYXRpb249InNhbXBsZTI4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgbG9jYXRpb249Ii4vc2FtcGxlOTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU3NDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZTFjMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgbG9jYXRpb249InNhbXBsZTUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgbG9jYXRpb249Ii4vc2FtcGxlOTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiBsb2NhdGlvbj0iLlxzYW1wbGU5NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ODJjMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgbG9jYXRpb249InNhbXBsZTM2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgbG9jYXRpb249Ii4vc2FtcGxlMTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NmM1N2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgbG9jYXRpb249InNhbXBsZTY5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgbG9jYXRpb249Ii4vc2FtcGxlMzA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ5YjhhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiBsb2NhdGlvbj0ic2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiBsb2NhdGlvbj0iLi9zYW1wbGU1OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTY1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWY2MjA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSJzYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTc0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyIgbG9jYXRpb249Ii5cc2FtcGxlMTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjhlNWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIGxvY2F0aW9uPSJzYW1wbGUxMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIGxvY2F0aW9uPSIuL3NhbXBsZTczMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdiMDRmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiBsb2NhdGlvbj0ic2FtcGxlNzQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249Ii5cc2FtcGxlMjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1M2UxYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgbG9jYXRpb249InNhbXBsZTg2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgbG9jYXRpb249Ii4vc2FtcGxlNzI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiBsb2NhdGlvbj0iLlxzYW1wbGU3NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNDk5MDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgbG9jYXRpb249InNhbXBsZTY2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgbG9jYXRpb249Ii4vc2FtcGxlNDcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiBsb2NhdGlvbj0iLlxzYW1wbGUxODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTcxNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgbG9jYXRpb249InNhbXBsZTE1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgbG9jYXRpb249Ii4vc2FtcGxlNjU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiBsb2NhdGlvbj0iLlxzYW1wbGU1ODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZjJjNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgbG9jYXRpb249InNhbXBsZTgyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgbG9jYXRpb249Ii4vc2FtcGxlMTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiBsb2NhdGlvbj0iLlxzYW1wbGU5MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MDZkNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgbG9jYXRpb249InNhbXBsZTE2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgbG9jYXRpb249Ii4vc2FtcGxlMTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiBsb2NhdGlvbj0iLlxzYW1wbGU0NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YzM0Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgbG9jYXRpb249InNhbXBsZTg5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgbG9jYXRpb249Ii4vc2FtcGxlMjUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTJiNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0ic2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCIgbG9jYXRpb249Ii5cc2FtcGxlNDEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZlOTMzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiBsb2NhdGlvbj0ic2FtcGxlMzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmUxYTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIGxvY2F0aW9uPSJzYW1wbGU5MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249Ii4vc2FtcGxlMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTk3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU0NDY4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3IiBsb2NhdGlvbj0ic2FtcGxlMzE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiBsb2NhdGlvbj0iLi9zYW1wbGUxMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTMzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhhMzUzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiBsb2NhdGlvbj0ic2FtcGxlOTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249Ii5cc2FtcGxlNDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0Y2RjOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgbG9jYXRpb249InNhbXBsZTQ1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgbG9jYXRpb249Ii4vc2FtcGxlMTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU3NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNjUzYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0ic2FtcGxlMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTYyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgbG9jYXRpb249Ii5cc2FtcGxlODI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmNmYzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIGxvY2F0aW9uPSJzYW1wbGU4ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIGxvY2F0aW9uPSIuL3NhbXBsZTE5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgbG9jYXRpb249Ii5cc2FtcGxlNDQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmYxOWQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIGxvY2F0aW9uPSJzYW1wbGUxNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIGxvY2F0aW9uPSIuL3NhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSIgbG9jYXRpb249Ii5cc2FtcGxlMTYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNiYTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIGxvY2F0aW9uPSJzYW1wbGU2Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgbG9jYXRpb249Ii4vc2FtcGxlNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIGxvY2F0aW9uPSIuXHNhbXBsZTc1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiMDRjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0ic2FtcGxlNDA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSIuXHNhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwZWQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiBsb2NhdGlvbj0ic2FtcGxlNDQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTM1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMGNjNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgbG9jYXRpb249InNhbXBsZTE1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgbG9jYXRpb249Ii4vc2FtcGxlNDQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiBsb2NhdGlvbj0iLlxzYW1wbGU0MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjMWJjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiBsb2NhdGlvbj0ic2FtcGxlMTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiBsb2NhdGlvbj0iLi9zYW1wbGU4ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTQzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDViMWM4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiBsb2NhdGlvbj0ic2FtcGxlODEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiBsb2NhdGlvbj0iLi9zYW1wbGU1ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxMmExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiBsb2NhdGlvbj0ic2FtcGxlMTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIGxvY2F0aW9uPSIuXHNhbXBsZTUxMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNiZGNjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiBsb2NhdGlvbj0ic2FtcGxlNTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiBsb2NhdGlvbj0iLi9zYW1wbGU0NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc3NzlkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiBsb2NhdGlvbj0ic2FtcGxlNTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI4MzY2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiBsb2NhdGlvbj0ic2FtcGxlMjczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuL3NhbXBsZTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzA4NTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgbG9jYXRpb249InNhbXBsZTQ3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgbG9jYXRpb249Ii4vc2FtcGxlMjQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODlmYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiBsb2NhdGlvbj0ic2FtcGxlNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIGxvY2F0aW9uPSIuL3NhbXBsZTI4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgbG9jYXRpb249Ii5cc2FtcGxlODU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGFkYzYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiIGxvY2F0aW9uPSJzYW1wbGUyODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgbG9jYXRpb249Ii5cc2FtcGxlMzg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjcxYTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIGxvY2F0aW9uPSJzYW1wbGUyNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSIuXHNhbXBsZTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTZjZmRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIGxvY2F0aW9uPSJzYW1wbGUzNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIGxvY2F0aW9uPSIuL3NhbXBsZTc4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgbG9jYXRpb249Ii5cc2FtcGxlNTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTFhMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSIgbG9jYXRpb249InNhbXBsZTcxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSIuL3NhbXBsZTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIGxvY2F0aW9uPSIuXHNhbXBsZTIzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzNjA0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiBsb2NhdGlvbj0ic2FtcGxlOTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlNjU5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiBsb2NhdGlvbj0ic2FtcGxlOTI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA1ZDI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSJzYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgbG9jYXRpb249Ii4vc2FtcGxlMzcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NTdmNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgbG9jYXRpb249InNhbXBsZTcyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgbG9jYXRpb249Ii4vc2FtcGxlNjYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYjExYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgbG9jYXRpb249InNhbXBsZTU5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgbG9jYXRpb249Ii4vc2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIGxvY2F0aW9uPSIuXHNhbXBsZTMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODU3MjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgbG9jYXRpb249InNhbXBsZTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii4vc2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgbG9jYXRpb249Ii5cc2FtcGxlODkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmI2Mzk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIGxvY2F0aW9uPSJzYW1wbGUxMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIGxvY2F0aW9uPSIuL3NhbXBsZTE5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgbG9jYXRpb249Ii5cc2FtcGxlNzg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjYyOTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSJzYW1wbGUyOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIGxvY2F0aW9uPSIuL3NhbXBsZTk1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgbG9jYXRpb249Ii5cc2FtcGxlODcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzViNWUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIGxvY2F0aW9uPSJzYW1wbGU5NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTQwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249Ii5cc2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFkYTAzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiBsb2NhdGlvbj0ic2FtcGxlMzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiBsb2NhdGlvbj0iLi9zYW1wbGU0Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTczMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmI1NzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIGxvY2F0aW9uPSJzYW1wbGU0MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgbG9jYXRpb249Ii4vc2FtcGxlNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249Ii5cc2FtcGxlOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjllZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgbG9jYXRpb249InNhbXBsZTM2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgbG9jYXRpb249Ii4vc2FtcGxlNzUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYTVhMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249InNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgbG9jYXRpb249Ii4vc2FtcGxlMzYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiBsb2NhdGlvbj0iLlxzYW1wbGU2Mjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjE3ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgbG9jYXRpb249InNhbXBsZTUyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgbG9jYXRpb249Ii4vc2FtcGxlOTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYTNkODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgbG9jYXRpb249InNhbXBsZTQ4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgbG9jYXRpb249Ii4vc2FtcGxlOTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YTRlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgbG9jYXRpb249InNhbXBsZTIwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgbG9jYXRpb249Ii4vc2FtcGxlMTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NDQ4MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgbG9jYXRpb249InNhbXBsZTEzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgbG9jYXRpb249Ii4vc2FtcGxlNjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzI2N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgbG9jYXRpb249InNhbXBsZTU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgbG9jYXRpb249Ii4vc2FtcGxlNjE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MmY0M2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgbG9jYXRpb249InNhbXBsZTk1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgbG9jYXRpb249Ii4vc2FtcGxlMjI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2IiBsb2NhdGlvbj0iLlxzYW1wbGU5NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYzY3OGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgbG9jYXRpb249InNhbXBsZTgxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgbG9jYXRpb249Ii4vc2FtcGxlNTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiBsb2NhdGlvbj0iLlxzYW1wbGU0NDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzRjZWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIGxvY2F0aW9uPSJzYW1wbGUzMDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIGxvY2F0aW9uPSIuL3NhbXBsZTQxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgbG9jYXRpb249Ii5cc2FtcGxlNTIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMDkxM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiBsb2NhdGlvbj0ic2FtcGxlODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiIGxvY2F0aW9uPSIuL3NhbXBsZTU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgbG9jYXRpb249Ii5cc2FtcGxlNDQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGI4MDY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSJzYW1wbGUyODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiIGxvY2F0aW9uPSIuL3NhbXBsZTI4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgbG9jYXRpb249Ii5cc2FtcGxlNDUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGJhYzA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIGxvY2F0aW9uPSJzYW1wbGUxMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii4vc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTUzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5ZjVjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiBsb2NhdGlvbj0ic2FtcGxlMzE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249Ii5cc2FtcGxlOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IwNzNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiBsb2NhdGlvbj0ic2FtcGxlOTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIGxvY2F0aW9uPSIuXHNhbXBsZTk0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QxMWQ1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiBsb2NhdGlvbj0ic2FtcGxlNjM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiBsb2NhdGlvbj0iLi9zYW1wbGUzMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiIGxvY2F0aW9uPSIuXHNhbXBsZTU4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc1OGJhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiBsb2NhdGlvbj0ic2FtcGxlMjk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIGxvY2F0aW9uPSIuXHNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUyNTk3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiBsb2NhdGlvbj0ic2FtcGxlNTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiBsb2NhdGlvbj0iLi9zYW1wbGUyNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIGxvY2F0aW9uPSIuXHNhbXBsZTE2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmNWQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiBsb2NhdGlvbj0ic2FtcGxlNDI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIGxvY2F0aW9uPSIuXHNhbXBsZTM3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM2YjEwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiBsb2NhdGlvbj0ic2FtcGxlMjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiBsb2NhdGlvbj0iLi9zYW1wbGU1NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIGxvY2F0aW9uPSIuXHNhbXBsZTU0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDE4ZGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIGxvY2F0aW9uPSJzYW1wbGU4ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiIGxvY2F0aW9uPSIuL3NhbXBsZTMyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgbG9jYXRpb249Ii5cc2FtcGxlNDk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNjI3ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgbG9jYXRpb249InNhbXBsZTU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgbG9jYXRpb249Ii4vc2FtcGxlNTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiBsb2NhdGlvbj0iLlxzYW1wbGU2Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyY2M1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiBsb2NhdGlvbj0ic2FtcGxlNDY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIGxvY2F0aW9uPSIuXHNhbXBsZTE4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlmMjA5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIiBsb2NhdGlvbj0ic2FtcGxlNTkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIiBsb2NhdGlvbj0iLi9zYW1wbGUxMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuXHNhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ1NzU2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiBsb2NhdGlvbj0ic2FtcGxlMTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiBsb2NhdGlvbj0iLi9zYW1wbGUyODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTQwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNlNDUzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiBsb2NhdGlvbj0ic2FtcGxlODU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTk0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwZGJlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSJzYW1wbGU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgbG9jYXRpb249Ii4vc2FtcGxlMzc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MDdlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgbG9jYXRpb249InNhbXBsZTQ0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgbG9jYXRpb249Ii4vc2FtcGxlNTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiBsb2NhdGlvbj0iLlxzYW1wbGU5Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMjlhYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiIgbG9jYXRpb249InNhbXBsZTMwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgbG9jYXRpb249Ii4vc2FtcGxlNjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIiBsb2NhdGlvbj0iLlxzYW1wbGU4ODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTEyMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgbG9jYXRpb249InNhbXBsZTY3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgbG9jYXRpb249Ii4vc2FtcGxlOTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiBsb2NhdGlvbj0iLlxzYW1wbGU5NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZjIzYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSIgbG9jYXRpb249InNhbXBsZTY0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgbG9jYXRpb249Ii4vc2FtcGxlNjE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMzUyODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgbG9jYXRpb249InNhbXBsZTE3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgbG9jYXRpb249Ii4vc2FtcGxlNjc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiBsb2NhdGlvbj0iLlxzYW1wbGU2MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWZkMmUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIGxvY2F0aW9uPSJzYW1wbGUzNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTMzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgbG9jYXRpb249Ii5cc2FtcGxlNTAxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDRhMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgbG9jYXRpb249InNhbXBsZTE2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgbG9jYXRpb249Ii4vc2FtcGxlNzA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiBsb2NhdGlvbj0iLlxzYW1wbGU3NjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMjk3YjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249InNhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgbG9jYXRpb249Ii4vc2FtcGxlODA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiBsb2NhdGlvbj0iLlxzYW1wbGUxMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmIzODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgbG9jYXRpb249InNhbXBsZTQ1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgbG9jYXRpb249Ii4vc2FtcGxlNjg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4M2E1M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgbG9jYXRpb249InNhbXBsZTg2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249Ii4vc2FtcGxlNTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiBsb2NhdGlvbj0iLlxzYW1wbGU3MTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDdmMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgbG9jYXRpb249InNhbXBsZTY1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgbG9jYXRpb249Ii4vc2FtcGxlOTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZTlkNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgbG9jYXRpb249InNhbXBsZTc1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgbG9jYXRpb249Ii4vc2FtcGxlNjc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiBsb2NhdGlvbj0iLlxzYW1wbGU1MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNjMyMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgbG9jYXRpb249InNhbXBsZTE5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgbG9jYXRpb249Ii4vc2FtcGxlNDMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MTFhMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgbG9jYXRpb249InNhbXBsZTM4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgbG9jYXRpb249Ii4vc2FtcGxlNDM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIGxvY2F0aW9uPSIuXHNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzliODc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIGxvY2F0aW9uPSJzYW1wbGUxNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgbG9jYXRpb249Ii5cc2FtcGxlNTk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDFkZmQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIGxvY2F0aW9uPSJzYW1wbGU3Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgbG9jYXRpb249Ii5cc2FtcGxlMjg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYxNGFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiBsb2NhdGlvbj0ic2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTU5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzJkNDk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIGxvY2F0aW9uPSJzYW1wbGU0MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTczOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgbG9jYXRpb249Ii5cc2FtcGxlMTEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTI0Zjc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSJzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIGxvY2F0aW9uPSIuL3NhbXBsZTM2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgbG9jYXRpb249Ii5cc2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTRiYTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249InNhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiBsb2NhdGlvbj0iLi9zYW1wbGU0NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgbG9jYXRpb249Ii5cc2FtcGxlNTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MGIxZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSJzYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiBsb2NhdGlvbj0iLi9zYW1wbGU2OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIGxvY2F0aW9uPSIuXHNhbXBsZTYzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkOGJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIiBsb2NhdGlvbj0ic2FtcGxlMTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiBsb2NhdGlvbj0iLi9zYW1wbGU0NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY4NDZhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiBsb2NhdGlvbj0ic2FtcGxlMzc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIGxvY2F0aW9uPSIuXHNhbXBsZTI4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQxMzYxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2IiBsb2NhdGlvbj0ic2FtcGxlNzE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiBsb2NhdGlvbj0iLi9zYW1wbGUyNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIGxvY2F0aW9uPSIuXHNhbXBsZTY3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI4ODNkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiBsb2NhdGlvbj0ic2FtcGxlOTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIGxvY2F0aW9uPSIuXHNhbXBsZTg5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiMGEzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0ic2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiBsb2NhdGlvbj0iLi9zYW1wbGU2Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTIyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRiNzcwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiBsb2NhdGlvbj0ic2FtcGxlOTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiBsb2NhdGlvbj0iLi9zYW1wbGU3ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLlxzYW1wbGUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJmYjZkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIGxvY2F0aW9uPSJzYW1wbGU4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgbG9jYXRpb249Ii4vc2FtcGxlODU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVkY2JmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiBsb2NhdGlvbj0ic2FtcGxlNjQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIGxvY2F0aW9uPSIuXHNhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2NzM3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiBsb2NhdGlvbj0ic2FtcGxlNjkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0iLi9zYW1wbGUyODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIGxvY2F0aW9uPSIuXHNhbXBsZTIxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNjZmViMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSJzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgbG9jYXRpb249Ii4vc2FtcGxlOTI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiBsb2NhdGlvbj0iLlxzYW1wbGU1MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YTk2ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgbG9jYXRpb249InNhbXBsZTE3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249Ii4vc2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNTQ0YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgbG9jYXRpb249InNhbXBsZTY4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgbG9jYXRpb249Ii4vc2FtcGxlMjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU3NDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjYzNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiBsb2NhdGlvbj0ic2FtcGxlNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgbG9jYXRpb249Ii5cc2FtcGxlOTAxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTc2NjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIGxvY2F0aW9uPSJzYW1wbGUzOTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgbG9jYXRpb249Ii5cc2FtcGxlMzUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTFjZTJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIGxvY2F0aW9uPSJzYW1wbGU4NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIGxvY2F0aW9uPSIuL3NhbXBsZTU3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249Ii5cc2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDkxNjg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIGxvY2F0aW9uPSJzYW1wbGU5MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiIGxvY2F0aW9uPSIuL3NhbXBsZTU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgbG9jYXRpb249Ii5cc2FtcGxlMTA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWZhZjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIGxvY2F0aW9uPSJzYW1wbGUxNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTc2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249Ii5cc2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI0Y2UyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiBsb2NhdGlvbj0ic2FtcGxlMjg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiBsb2NhdGlvbj0iLi9zYW1wbGU0MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTkzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTI2YjkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIGxvY2F0aW9uPSJzYW1wbGU0MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgbG9jYXRpb249Ii4vc2FtcGxlNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwNjFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiBsb2NhdGlvbj0ic2FtcGxlNTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIGxvY2F0aW9uPSIuXHNhbXBsZTY0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjYTk0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiBsb2NhdGlvbj0ic2FtcGxlMjQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiBsb2NhdGlvbj0iLi9zYW1wbGU5MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTQxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiNGQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiBsb2NhdGlvbj0ic2FtcGxlMTAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTk5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWExZGY4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiBsb2NhdGlvbj0ic2FtcGxlNzY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTg1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJmNzg1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiBsb2NhdGlvbj0ic2FtcGxlODY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTI0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRhMjg3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiBsb2NhdGlvbj0ic2FtcGxlMzI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIGxvY2F0aW9uPSIuXHNhbXBsZTY5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkxMWE0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSJzYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgbG9jYXRpb249Ii4vc2FtcGxlMTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjIzZTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIGxvY2F0aW9uPSJzYW1wbGUzMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIGxvY2F0aW9uPSIuL3NhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgbG9jYXRpb249Ii5cc2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmRlMmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIGxvY2F0aW9uPSJzYW1wbGU0NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIGxvY2F0aW9uPSIuL3NhbXBsZTI3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiBsb2NhdGlvbj0iLlxzYW1wbGU1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzBkZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgbG9jYXRpb249InNhbXBsZTg4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgbG9jYXRpb249Ii4vc2FtcGxlODU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiBsb2NhdGlvbj0iLlxzYW1wbGU5Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiMTM0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiBsb2NhdGlvbj0ic2FtcGxlNjU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDUwMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgbG9jYXRpb249InNhbXBsZTUxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgbG9jYXRpb249Ii4vc2FtcGxlMzczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiBsb2NhdGlvbj0iLlxzYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYTgxMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgbG9jYXRpb249InNhbXBsZTY5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgbG9jYXRpb249Ii4vc2FtcGxlODQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiBsb2NhdGlvbj0iLlxzYW1wbGU5NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZmZiYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgbG9jYXRpb249InNhbXBsZTYzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgbG9jYXRpb249Ii4vc2FtcGxlODkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiBsb2NhdGlvbj0iLlxzYW1wbGU4NTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NjhmZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiBsb2NhdGlvbj0ic2FtcGxlMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTQyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgbG9jYXRpb249Ii5cc2FtcGxlNTY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWUxMzU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIGxvY2F0aW9uPSJzYW1wbGU5Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTkzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgbG9jYXRpb249Ii5cc2FtcGxlNTQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTRhYjAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSJzYW1wbGUyMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIGxvY2F0aW9uPSIuXHNhbXBsZTQyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZmNGRiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiBsb2NhdGlvbj0ic2FtcGxlNzI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgbG9jYXRpb249Ii5cc2FtcGxlNzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzhkOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgbG9jYXRpb249InNhbXBsZTQ4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgbG9jYXRpb249Ii4vc2FtcGxlMzI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuXHNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGU4YWM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIGxvY2F0aW9uPSJzYW1wbGU5NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgbG9jYXRpb249Ii5cc2FtcGxlNDM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA1MTJlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIGxvY2F0aW9uPSJzYW1wbGU4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgbG9jYXRpb249Ii4vc2FtcGxlODk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiBsb2NhdGlvbj0iLlxzYW1wbGUzNjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4ZWUxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiBsb2NhdGlvbj0ic2FtcGxlNTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiBsb2NhdGlvbj0iLi9zYW1wbGU4ODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIGxvY2F0aW9uPSIuXHNhbXBsZTc1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhZTY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiBsb2NhdGlvbj0ic2FtcGxlOTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIGxvY2F0aW9uPSIuXHNhbXBsZTkyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhmODVjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiBsb2NhdGlvbj0ic2FtcGxlMzc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTg0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2MjViOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiBsb2NhdGlvbj0ic2FtcGxlOTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiBsb2NhdGlvbj0iLi9zYW1wbGUyNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIGxvY2F0aW9uPSIuXHNhbXBsZTIzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk2NDkxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiBsb2NhdGlvbj0ic2FtcGxlNzIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiBsb2NhdGlvbj0iLi9zYW1wbGUyOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIGxvY2F0aW9uPSIuXHNhbXBsZTEzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdlMmNkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiBsb2NhdGlvbj0ic2FtcGxlNzE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiBsb2NhdGlvbj0iLi9zYW1wbGU3NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDExMDViNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiBsb2NhdGlvbj0ic2FtcGxlODUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0iLi9zYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIGxvY2F0aW9uPSIuXHNhbXBsZTkyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM3NDIwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiBsb2NhdGlvbj0ic2FtcGxlNzEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiBsb2NhdGlvbj0iLi9zYW1wbGU5MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIGxvY2F0aW9uPSIuXHNhbXBsZTcyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIzN2RlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiBsb2NhdGlvbj0ic2FtcGxlNjAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NWQ3ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgbG9jYXRpb249InNhbXBsZTc2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii4vc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiBsb2NhdGlvbj0iLlxzYW1wbGUxOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmNlNWIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIGxvY2F0aW9uPSJzYW1wbGU2MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTk0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgbG9jYXRpb249Ii5cc2FtcGxlODg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZGU1NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0ic2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIGxvY2F0aW9uPSIuL3NhbXBsZTY3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgbG9jYXRpb249Ii5cc2FtcGxlMjI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmYxNjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIGxvY2F0aW9uPSJzYW1wbGU5MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLi9zYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiBsb2NhdGlvbj0iLlxzYW1wbGU2Njgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZWVhYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgbG9jYXRpb249InNhbXBsZTQ2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLi9zYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0iLlxzYW1wbGUyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyMTU2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiBsb2NhdGlvbj0ic2FtcGxlNTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIiBsb2NhdGlvbj0iLi9zYW1wbGU4ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIGxvY2F0aW9uPSIuXHNhbXBsZTQzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjZDU4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiBsb2NhdGlvbj0ic2FtcGxlNzM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiBsb2NhdGlvbj0iLi9zYW1wbGU0MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTIxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIwMGE4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0ic2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiBsb2NhdGlvbj0iLi9zYW1wbGU0ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgbG9jYXRpb249Ii5cc2FtcGxlMTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NzE2M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgbG9jYXRpb249InNhbXBsZTgxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249Ii4vc2FtcGxlOTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIGxvY2F0aW9uPSIuXHNhbXBsZTcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjE5ZmY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIGxvY2F0aW9uPSJzYW1wbGUxMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249Ii4vc2FtcGxlNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM2Nzc1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiBsb2NhdGlvbj0ic2FtcGxlNzk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiBsb2NhdGlvbj0iLi9zYW1wbGU1NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIGxvY2F0aW9uPSIuXHNhbXBsZTEwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUzZTUzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiBsb2NhdGlvbj0ic2FtcGxlMzY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgbG9jYXRpb249Ii5cc2FtcGxlMjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGQ5ZjE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIGxvY2F0aW9uPSJzYW1wbGUxNDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTYxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii5cc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMzUxOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgbG9jYXRpb249InNhbXBsZTU4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiBsb2NhdGlvbj0iLi9zYW1wbGU2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249Ii5cc2FtcGxlOTc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2FmMWUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIGxvY2F0aW9uPSJzYW1wbGU2NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTk4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgbG9jYXRpb249Ii5cc2FtcGxlNjc3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzMxNDE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSJzYW1wbGUzOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgbG9jYXRpb249Ii5cc2FtcGxlOTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjBjNzgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249InNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIGxvY2F0aW9uPSIuXHNhbXBsZTgxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE0NjRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiBsb2NhdGlvbj0ic2FtcGxlMjIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIGxvY2F0aW9uPSIuXHNhbXBsZTkxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI0ZDk4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIGxvY2F0aW9uPSJzYW1wbGU3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiBsb2NhdGlvbj0iLi9zYW1wbGU3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCIgbG9jYXRpb249Ii5cc2FtcGxlNjgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzc4MjYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIGxvY2F0aW9uPSJzYW1wbGU5MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIGxvY2F0aW9uPSIuL3NhbXBsZTgwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgbG9jYXRpb249Ii5cc2FtcGxlNzY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDhmN2Y0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIGxvY2F0aW9uPSJzYW1wbGU0MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIGxvY2F0aW9uPSIuL3NhbXBsZTE3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0iLlxzYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU4NWNhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiBsb2NhdGlvbj0ic2FtcGxlNzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIGxvY2F0aW9uPSIuXHNhbXBsZTgwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI0MmIzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIiBsb2NhdGlvbj0ic2FtcGxlMjExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZTRlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgbG9jYXRpb249InNhbXBsZTM3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgbG9jYXRpb249Ii4vc2FtcGxlNDMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiBsb2NhdGlvbj0iLlxzYW1wbGU0MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwYzA0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiBsb2NhdGlvbj0ic2FtcGxlMTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIGxvY2F0aW9uPSIuXHNhbXBsZTM2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE1MDhlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiBsb2NhdGlvbj0ic2FtcGxlODc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiBsb2NhdGlvbj0iLi9zYW1wbGU4NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIGxvY2F0aW9uPSIuXHNhbXBsZTM0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNlMzFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0ic2FtcGxlNTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiBsb2NhdGlvbj0iLi9zYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIGxvY2F0aW9uPSIuXHNhbXBsZTE4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhMjM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiBsb2NhdGlvbj0ic2FtcGxlNzc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiBsb2NhdGlvbj0iLi9zYW1wbGU5MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIGxvY2F0aW9uPSIuXHNhbXBsZTQ3Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2ZDc4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiBsb2NhdGlvbj0ic2FtcGxlNzQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1Njk1NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSIgbG9jYXRpb249InNhbXBsZTY5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgbG9jYXRpb249Ii4vc2FtcGxlMzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiBsb2NhdGlvbj0iLlxzYW1wbGU5ODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjE2OTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgbG9jYXRpb249InNhbXBsZTg0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgbG9jYXRpb249Ii4vc2FtcGxlMzk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MTM2NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgbG9jYXRpb249InNhbXBsZTkxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgbG9jYXRpb249Ii5cc2FtcGxlNjA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE1NWViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIGxvY2F0aW9uPSJzYW1wbGU5Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgbG9jYXRpb249Ii5cc2FtcGxlMzE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjJjYmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSJzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTg2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWIwNDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIGxvY2F0aW9uPSJzYW1wbGU1MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIGxvY2F0aW9uPSIuL3NhbXBsZTM1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgbG9jYXRpb249Ii5cc2FtcGxlNjExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OWUxOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgbG9jYXRpb249InNhbXBsZTQ0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgbG9jYXRpb249Ii4vc2FtcGxlMTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNDRjNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgbG9jYXRpb249InNhbXBsZTY4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgbG9jYXRpb249Ii4vc2FtcGxlNjU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIGxvY2F0aW9uPSIuXHNhbXBsZTc3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjE1ZDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIGxvY2F0aW9uPSJzYW1wbGU5NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTQyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgbG9jYXRpb249Ii5cc2FtcGxlOTU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTkzNTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIGxvY2F0aW9uPSJzYW1wbGU5MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIGxvY2F0aW9uPSIuL3NhbXBsZTc1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgbG9jYXRpb249Ii5cc2FtcGxlMTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTYzNjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIGxvY2F0aW9uPSJzYW1wbGU3NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIGxvY2F0aW9uPSIuL3NhbXBsZTcwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgbG9jYXRpb249Ii5cc2FtcGxlNzU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTI1NzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIGxvY2F0aW9uPSJzYW1wbGU0MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIGxvY2F0aW9uPSIuL3NhbXBsZTUyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgbG9jYXRpb249Ii5cc2FtcGxlMzA0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDIyM2E2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIGxvY2F0aW9uPSJzYW1wbGU2Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIGxvY2F0aW9uPSIuL3NhbXBsZTY4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ2OWIyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiBsb2NhdGlvbj0ic2FtcGxlODIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiBsb2NhdGlvbj0iLi9zYW1wbGU2MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiIGxvY2F0aW9uPSIuXHNhbXBsZTk4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdkMzNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2IiBsb2NhdGlvbj0ic2FtcGxlMjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTY2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc4MzZkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiBsb2NhdGlvbj0ic2FtcGxlNTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSIuL3NhbXBsZTk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZjNiNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgbG9jYXRpb249InNhbXBsZTQ3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgbG9jYXRpb249Ii4vc2FtcGxlNzAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGU4YzNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIGxvY2F0aW9uPSJzYW1wbGU2ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgbG9jYXRpb249Ii5cc2FtcGxlMjMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YjhhYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249InNhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgbG9jYXRpb249Ii4vc2FtcGxlNTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiBsb2NhdGlvbj0iLlxzYW1wbGU5NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZmM1NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiBsb2NhdGlvbj0ic2FtcGxlOTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgbG9jYXRpb249Ii5cc2FtcGxlMzk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjM3ZmZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSJzYW1wbGUzNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIGxvY2F0aW9uPSIuL3NhbXBsZTExMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgbG9jYXRpb249Ii5cc2FtcGxlODEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDU4ZTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIGxvY2F0aW9uPSJzYW1wbGUzOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSIuL3NhbXBsZTE0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgbG9jYXRpb249Ii5cc2FtcGxlOTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjI4NTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiIGxvY2F0aW9uPSJzYW1wbGU2OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIGxvY2F0aW9uPSIuL3NhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0iLlxzYW1wbGU3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4YzA0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiBsb2NhdGlvbj0ic2FtcGxlNDMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTk5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3MzBmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0ic2FtcGxlNTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIiBsb2NhdGlvbj0iLi9zYW1wbGUxNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTYxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFmMDg1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiBsb2NhdGlvbj0ic2FtcGxlNDkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiBsb2NhdGlvbj0iLi9zYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIGxvY2F0aW9uPSIuXHNhbXBsZTk2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3ODdlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiBsb2NhdGlvbj0ic2FtcGxlNjQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiBsb2NhdGlvbj0iLi9zYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIGxvY2F0aW9uPSIuXHNhbXBsZTI0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRmMzYxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiBsb2NhdGlvbj0ic2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTgyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwODZjZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgbG9jYXRpb249InNhbXBsZTQzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249Ii4vc2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii5cc2FtcGxlNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWI0M2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIGxvY2F0aW9uPSJzYW1wbGU5MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgbG9jYXRpb249Ii4vc2FtcGxlMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhjZTg4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiBsb2NhdGlvbj0ic2FtcGxlMTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiBsb2NhdGlvbj0iLi9zYW1wbGUzOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciIGxvY2F0aW9uPSIuXHNhbXBsZTI2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwYjQ3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiBsb2NhdGlvbj0ic2FtcGxlODY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiBsb2NhdGlvbj0iLi9zYW1wbGU1MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwY2U1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiBsb2NhdGlvbj0ic2FtcGxlNDMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjMjkxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiBsb2NhdGlvbj0ic2FtcGxlNzA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIGxvY2F0aW9uPSIuXHNhbXBsZTgzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QzN2IwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiBsb2NhdGlvbj0ic2FtcGxlNTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTMyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJmODU2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiBsb2NhdGlvbj0ic2FtcGxlODkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiBsb2NhdGlvbj0iLi9zYW1wbGU0ODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTkwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNmZmIzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiBsb2NhdGlvbj0ic2FtcGxlNDcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiBsb2NhdGlvbj0iLi9zYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIGxvY2F0aW9uPSIuXHNhbXBsZTI3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQzNTYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiBsb2NhdGlvbj0ic2FtcGxlNzU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiBsb2NhdGlvbj0iLi9zYW1wbGUyMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIGxvY2F0aW9uPSIuXHNhbXBsZTE3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFlYWY4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiBsb2NhdGlvbj0ic2FtcGxlNjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIGxvY2F0aW9uPSIuXHNhbXBsZTE5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwY2M2ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiBsb2NhdGlvbj0ic2FtcGxlNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTcyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgbG9jYXRpb249Ii5cc2FtcGxlNTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ODM2NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgbG9jYXRpb249InNhbXBsZTMyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgbG9jYXRpb249Ii4vc2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0iLlxzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNDBmYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgbG9jYXRpb249InNhbXBsZTU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgbG9jYXRpb249Ii4vc2FtcGxlMTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0NDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OGFkOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgbG9jYXRpb249InNhbXBsZTY0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgbG9jYXRpb249Ii4vc2FtcGxlNTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiBsb2NhdGlvbj0iLlxzYW1wbGU0MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYWIwNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgbG9jYXRpb249InNhbXBsZTM0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgbG9jYXRpb249Ii4vc2FtcGxlNzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiBsb2NhdGlvbj0iLlxzYW1wbGU4Nzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNjUxZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgbG9jYXRpb249InNhbXBsZTgyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgbG9jYXRpb249Ii4vc2FtcGxlNjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDlkZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgbG9jYXRpb249InNhbXBsZTcyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgbG9jYXRpb249Ii4vc2FtcGxlMzEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjBiODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgbG9jYXRpb249InNhbXBsZTg3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyIgbG9jYXRpb249Ii4vc2FtcGxlNDA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiBsb2NhdGlvbj0iLlxzYW1wbGU3NzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MDRhMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiIgbG9jYXRpb249InNhbXBsZTI3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgbG9jYXRpb249Ii4vc2FtcGxlNTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YTgzYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgbG9jYXRpb249InNhbXBsZTE0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgbG9jYXRpb249Ii4vc2FtcGxlMjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZmJlZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249InNhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgbG9jYXRpb249Ii4vc2FtcGxlNjgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1YTI0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiBsb2NhdGlvbj0ic2FtcGxlODQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTY3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGIyNTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSJzYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIGxvY2F0aW9uPSIuL3NhbXBsZTkwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgbG9jYXRpb249Ii5cc2FtcGxlNjgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzVmMzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIGxvY2F0aW9uPSJzYW1wbGUyNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiIgbG9jYXRpb249Ii5cc2FtcGxlNzU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjFkOTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIGxvY2F0aW9uPSJzYW1wbGU4NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIGxvY2F0aW9uPSIuL3NhbXBsZTE4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgbG9jYXRpb249Ii5cc2FtcGxlNDExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmUxYmExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIGxvY2F0aW9uPSJzYW1wbGUzMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTE2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249Ii5cc2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWRjZjg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIGxvY2F0aW9uPSJzYW1wbGUyODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIGxvY2F0aW9uPSIuL3NhbXBsZTk0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgbG9jYXRpb249Ii5cc2FtcGxlMjQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTIzYjA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIGxvY2F0aW9uPSJzYW1wbGUxNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTUxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDM1MGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIGxvY2F0aW9uPSJzYW1wbGU3NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgbG9jYXRpb249Ii5cc2FtcGxlNjgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODUyYWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249InNhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiBsb2NhdGlvbj0iLi9zYW1wbGU5OTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIGxvY2F0aW9uPSIuXHNhbXBsZTMyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQyMjBlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiBsb2NhdGlvbj0ic2FtcGxlMTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiBsb2NhdGlvbj0iLi9zYW1wbGU0MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgbG9jYXRpb249Ii5cc2FtcGxlOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjN2YxYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgbG9jYXRpb249InNhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgbG9jYXRpb249Ii4vc2FtcGxlNDkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2IiBsb2NhdGlvbj0iLlxzYW1wbGU0NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGRlYmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIGxvY2F0aW9uPSJzYW1wbGU5Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIGxvY2F0aW9uPSIuL3NhbXBsZTM5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgbG9jYXRpb249Ii5cc2FtcGxlNzE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZDkyMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0ic2FtcGxlNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTc2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgbG9jYXRpb249Ii5cc2FtcGxlODE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGJiMDQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249InNhbXBsZTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTMzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RkN2Y3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0ic2FtcGxlMjkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiBsb2NhdGlvbj0iLi9zYW1wbGUzODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIGxvY2F0aW9uPSIuXHNhbXBsZTIwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE3NmY5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIiBsb2NhdGlvbj0ic2FtcGxlNzQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIGxvY2F0aW9uPSIuXHNhbXBsZTE3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYzMzM5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiBsb2NhdGlvbj0ic2FtcGxlMjk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQzZjcxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiBsb2NhdGlvbj0ic2FtcGxlNjI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiBsb2NhdGlvbj0iLi9zYW1wbGU4NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTY4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE0NmVhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiBsb2NhdGlvbj0ic2FtcGxlODExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIGxvY2F0aW9uPSIuXHNhbXBsZTkxOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkNjExMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiBsb2NhdGlvbj0ic2FtcGxlMjQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIGxvY2F0aW9uPSIuXHNhbXBsZTc5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjYWE0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiBsb2NhdGlvbj0ic2FtcGxlOTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjExM2EzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIGxvY2F0aW9uPSJzYW1wbGU4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgbG9jYXRpb249Ii4vc2FtcGxlMTA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZhODRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIGxvY2F0aW9uPSJzYW1wbGU1NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0iLlxzYW1wbGUxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDQzYTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIGxvY2F0aW9uPSJzYW1wbGU0MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIGxvY2F0aW9uPSIuL3NhbXBsZTI5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiBsb2NhdGlvbj0iLlxzYW1wbGUyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhZTc3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiBsb2NhdGlvbj0ic2FtcGxlMzk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiBsb2NhdGlvbj0iLi9zYW1wbGU3MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIGxvY2F0aW9uPSIuXHNhbXBsZTk0OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3YzFjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiBsb2NhdGlvbj0ic2FtcGxlMjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSIuL3NhbXBsZTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNzFmOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0ic2FtcGxlMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgbG9jYXRpb249Ii4vc2FtcGxlNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTk4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc4MWZiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiBsb2NhdGlvbj0ic2FtcGxlMTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIGxvY2F0aW9uPSIuL3NhbXBsZTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNWJhMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgbG9jYXRpb249InNhbXBsZTg2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249Ii4vc2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuXHNhbXBsZTcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDk2NzM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiIGxvY2F0aW9uPSJzYW1wbGU5OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgbG9jYXRpb249Ii5cc2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODg0OGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIGxvY2F0aW9uPSJzYW1wbGU0Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgbG9jYXRpb249Ii5cc2FtcGxlOTM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmUxZDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIGxvY2F0aW9uPSJzYW1wbGU2NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTYyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgbG9jYXRpb249Ii5cc2FtcGxlODc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGVkMjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSJzYW1wbGU3MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgbG9jYXRpb249Ii5cc2FtcGxlNzgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiMzA4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiBsb2NhdGlvbj0ic2FtcGxlNjQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiBsb2NhdGlvbj0iLi9zYW1wbGUyNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIGxvY2F0aW9uPSIuXHNhbXBsZTY5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2RiMTc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIGxvY2F0aW9uPSJzYW1wbGU0Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIGxvY2F0aW9uPSIuL3NhbXBsZTM4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgbG9jYXRpb249Ii5cc2FtcGxlNTMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmNmMTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIGxvY2F0aW9uPSJzYW1wbGUyNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIGxvY2F0aW9uPSIuL3NhbXBsZTc0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249Ii5cc2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjk2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIGxvY2F0aW9uPSJzYW1wbGU0MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIGxvY2F0aW9uPSIuL3NhbXBsZTI3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgbG9jYXRpb249Ii5cc2FtcGxlMTAxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWE1NjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIGxvY2F0aW9uPSJzYW1wbGU4NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgbG9jYXRpb249Ii5cc2FtcGxlNDc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTQxY2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIGxvY2F0aW9uPSJzYW1wbGU4MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgbG9jYXRpb249Ii5cc2FtcGxlODg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjY5OTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSJzYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIGxvY2F0aW9uPSIuL3NhbXBsZTE2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgbG9jYXRpb249Ii5cc2FtcGxlNzMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllZmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIGxvY2F0aW9uPSJzYW1wbGU3MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiIgbG9jYXRpb249Ii5cc2FtcGxlNDI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjYxNjk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249InNhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiBsb2NhdGlvbj0iLi9zYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNlMmNjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiBsb2NhdGlvbj0ic2FtcGxlNzkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiIGxvY2F0aW9uPSIuXHNhbXBsZTY2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhhYmQxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIGxvY2F0aW9uPSJzYW1wbGU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgbG9jYXRpb249Ii4vc2FtcGxlNjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiBsb2NhdGlvbj0iLlxzYW1wbGU1NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMyMzRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIGxvY2F0aW9uPSJzYW1wbGU3OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTY1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249Ii5cc2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZWZjMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCIgbG9jYXRpb249InNhbXBsZTg4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgbG9jYXRpb249Ii4vc2FtcGxlNTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiBsb2NhdGlvbj0iLlxzYW1wbGU1ODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZjYyY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgbG9jYXRpb249InNhbXBsZTQzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgbG9jYXRpb249Ii4vc2FtcGxlMjA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMGFlMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgbG9jYXRpb249InNhbXBsZTQzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgbG9jYXRpb249Ii4vc2FtcGxlNTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YTE5NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgbG9jYXRpb249InNhbXBsZTgzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgbG9jYXRpb249Ii4vc2FtcGxlNzA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiBsb2NhdGlvbj0iLlxzYW1wbGUyODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwY2VhZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgbG9jYXRpb249InNhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249Ii4vc2FtcGxlNzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NGE3NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgbG9jYXRpb249InNhbXBsZTUzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMjE3MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0ic2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgbG9jYXRpb249Ii4vc2FtcGxlODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSIuXHNhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFjMThmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiBsb2NhdGlvbj0ic2FtcGxlNTAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIGxvY2F0aW9uPSIuXHNhbXBsZTE2MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFiOWQ2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiBsb2NhdGlvbj0ic2FtcGxlNTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMyYzk1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0ic2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiBsb2NhdGlvbj0iLi9zYW1wbGU5MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NTI0OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgbG9jYXRpb249InNhbXBsZTgzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgbG9jYXRpb249Ii4vc2FtcGxlNTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiBsb2NhdGlvbj0iLlxzYW1wbGU4NDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZkN2IyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIiBsb2NhdGlvbj0ic2FtcGxlMTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiBsb2NhdGlvbj0iLi9zYW1wbGU0MjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTc3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIyZjYwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiBsb2NhdGlvbj0ic2FtcGxlOTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIGxvY2F0aW9uPSIuXHNhbXBsZTE1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIzYjlhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiBsb2NhdGlvbj0ic2FtcGxlMzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiBsb2NhdGlvbj0iLi9zYW1wbGU3NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIGxvY2F0aW9uPSIuXHNhbXBsZTgwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI3MmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiBsb2NhdGlvbj0ic2FtcGxlMTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiBsb2NhdGlvbj0iLi9zYW1wbGU1NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTczNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNkYzQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiBsb2NhdGlvbj0ic2FtcGxlMTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiBsb2NhdGlvbj0iLi9zYW1wbGU3NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJhYmUyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0ic2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiBsb2NhdGlvbj0iLi9zYW1wbGU3NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTg3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYzZjQ0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiBsb2NhdGlvbj0ic2FtcGxlODY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiBsb2NhdGlvbj0iLi9zYW1wbGU1MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMjc5NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgbG9jYXRpb249InNhbXBsZTM3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgbG9jYXRpb249Ii4vc2FtcGxlMTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NjY4MDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgbG9jYXRpb249InNhbXBsZTUwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgbG9jYXRpb249Ii4vc2FtcGxlOTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiY2Q3ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgbG9jYXRpb249InNhbXBsZTkwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgbG9jYXRpb249Ii4vc2FtcGxlNjUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJiODRhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiBsb2NhdGlvbj0ic2FtcGxlMzc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiBsb2NhdGlvbj0iLi9zYW1wbGUxMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWZiZmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIGxvY2F0aW9uPSJzYW1wbGU0ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTIxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgbG9jYXRpb249Ii5cc2FtcGxlNzM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxM2YxOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgbG9jYXRpb249InNhbXBsZTkxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgbG9jYXRpb249Ii4vc2FtcGxlODM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMTc1ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgbG9jYXRpb249InNhbXBsZTE5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgbG9jYXRpb249Ii4vc2FtcGxlMzgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOWNlMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgbG9jYXRpb249InNhbXBsZTY3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgbG9jYXRpb249Ii4vc2FtcGxlOTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiBsb2NhdGlvbj0iLlxzYW1wbGU3NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YzU0YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249InNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgbG9jYXRpb249Ii5cc2FtcGxlNTY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDYwOTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIGxvY2F0aW9uPSJzYW1wbGU5NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgbG9jYXRpb249Ii4vc2FtcGxlMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSIuXHNhbXBsZTE0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEwMzc1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiBsb2NhdGlvbj0ic2FtcGxlOTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTczNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMwMTdmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiBsb2NhdGlvbj0ic2FtcGxlNTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiBsb2NhdGlvbj0iLi9zYW1wbGUyODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIGxvY2F0aW9uPSIuXHNhbXBsZTU1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNmMDBhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiBsb2NhdGlvbj0ic2FtcGxlOTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiBsb2NhdGlvbj0iLlxzYW1wbGU1NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YzgyMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgbG9jYXRpb249InNhbXBsZTc4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgbG9jYXRpb249Ii4vc2FtcGxlNzE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiBsb2NhdGlvbj0iLlxzYW1wbGU1MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOThhYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgbG9jYXRpb249InNhbXBsZTc0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgbG9jYXRpb249Ii4vc2FtcGxlODQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIzNDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIGxvY2F0aW9uPSJzYW1wbGU1OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgbG9jYXRpb249Ii5cc2FtcGxlODgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlY2Q1NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgbG9jYXRpb249InNhbXBsZTYzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgbG9jYXRpb249Ii4vc2FtcGxlNjAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiBsb2NhdGlvbj0iLlxzYW1wbGUzNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZDMwYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgbG9jYXRpb249InNhbXBsZTUwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgbG9jYXRpb249Ii4vc2FtcGxlNzYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiBsb2NhdGlvbj0iLlxzYW1wbGUyODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2OWE1Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgbG9jYXRpb249InNhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgbG9jYXRpb249Ii4vc2FtcGxlNjY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuXHNhbXBsZTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjY3ZGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIGxvY2F0aW9uPSJzYW1wbGUyMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTgyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgbG9jYXRpb249Ii5cc2FtcGxlNTgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjc4Y2RlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIGxvY2F0aW9uPSJzYW1wbGU3MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTgwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgbG9jYXRpb249Ii5cc2FtcGxlOTU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjdjY2U1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIGxvY2F0aW9uPSJzYW1wbGU4OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgbG9jYXRpb249Ii5cc2FtcGxlNTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDgzYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIGxvY2F0aW9uPSJzYW1wbGU3MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIGxvY2F0aW9uPSIuL3NhbXBsZTE1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgbG9jYXRpb249Ii5cc2FtcGxlMTA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmNmODE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249InNhbXBsZTE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2RjYzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIGxvY2F0aW9uPSJzYW1wbGUyODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgbG9jYXRpb249Ii4vc2FtcGxlMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiIGxvY2F0aW9uPSIuXHNhbXBsZTMxMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEwYTMyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiBsb2NhdGlvbj0ic2FtcGxlNzI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIiBsb2NhdGlvbj0iLi9zYW1wbGUzNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIGxvY2F0aW9uPSIuXHNhbXBsZTg0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNTY0MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgbG9jYXRpb249InNhbXBsZTM2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiBsb2NhdGlvbj0iLlxzYW1wbGU5Mzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJiMDlhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiBsb2NhdGlvbj0ic2FtcGxlMjc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiBsb2NhdGlvbj0iLi9zYW1wbGU3Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4OTJmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiBsb2NhdGlvbj0ic2FtcGxlOTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiBsb2NhdGlvbj0iLi9zYW1wbGU0MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIGxvY2F0aW9uPSIuXHNhbXBsZTUzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdjMTQ1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSJzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgbG9jYXRpb249Ii4vc2FtcGxlNTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiBsb2NhdGlvbj0iLlxzYW1wbGU3Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNTJjZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgbG9jYXRpb249InNhbXBsZTc2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgbG9jYXRpb249Ii4vc2FtcGxlMjU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MTI3NzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIGxvY2F0aW9uPSJzYW1wbGUxMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLi9zYW1wbGU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiBsb2NhdGlvbj0iLlxzYW1wbGUzMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OWU1NDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgbG9jYXRpb249InNhbXBsZTM4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgbG9jYXRpb249Ii4vc2FtcGxlMTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiBsb2NhdGlvbj0iLlxzYW1wbGUxMTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MjljMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgbG9jYXRpb249InNhbXBsZTQwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgbG9jYXRpb249Ii4vc2FtcGxlNjYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiBsb2NhdGlvbj0iLlxzYW1wbGU3NzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MmY5ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgbG9jYXRpb249InNhbXBsZTI1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgbG9jYXRpb249Ii4vc2FtcGxlODYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiBsb2NhdGlvbj0iLlxzYW1wbGU3MzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNWFhNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgbG9jYXRpb249InNhbXBsZTQ4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgbG9jYXRpb249Ii4vc2FtcGxlOTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSIuXHNhbXBsZTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDlmM2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIGxvY2F0aW9uPSJzYW1wbGU2OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTkxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgbG9jYXRpb249Ii5cc2FtcGxlNzQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU5OWI5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiBsb2NhdGlvbj0ic2FtcGxlMzEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIGxvY2F0aW9uPSIuXHNhbXBsZTMwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTQyZDA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgbG9jYXRpb249InNhbXBsZTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIGxvY2F0aW9uPSIuL3NhbXBsZTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU5NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhY2UyOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgbG9jYXRpb249InNhbXBsZTU4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgbG9jYXRpb249Ii4vc2FtcGxlMTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiBsb2NhdGlvbj0iLlxzYW1wbGUyMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNjY5MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgbG9jYXRpb249InNhbXBsZTY5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgbG9jYXRpb249Ii4vc2FtcGxlMTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiBsb2NhdGlvbj0iLlxzYW1wbGUzNTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZDk3NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgbG9jYXRpb249InNhbXBsZTkzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgbG9jYXRpb249Ii4vc2FtcGxlNTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii5cc2FtcGxlNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhNDNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiBsb2NhdGlvbj0ic2FtcGxlMzE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIGxvY2F0aW9uPSIuXHNhbXBsZTIzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM0ODc3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiBsb2NhdGlvbj0ic2FtcGxlODIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiBsb2NhdGlvbj0iLi9zYW1wbGU0MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIGxvY2F0aW9uPSIuXHNhbXBsZTIwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU3ZTI2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiBsb2NhdGlvbj0ic2FtcGxlOTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTg3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA0OWM3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiBsb2NhdGlvbj0ic2FtcGxlNjc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIGxvY2F0aW9uPSIuXHNhbXBsZTI4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE2YTBhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4IiBsb2NhdGlvbj0ic2FtcGxlNTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIGxvY2F0aW9uPSIuXHNhbXBsZTQzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZkNjg2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiBsb2NhdGlvbj0ic2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljN2JjYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgbG9jYXRpb249InNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgbG9jYXRpb249Ii4vc2FtcGxlNTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuXHNhbXBsZTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMGFmMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0ic2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIGxvY2F0aW9uPSIuL3NhbXBsZTM1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgbG9jYXRpb249Ii5cc2FtcGxlODAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjZkZjNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIGxvY2F0aW9uPSJzYW1wbGUyMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIGxvY2F0aW9uPSIuL3NhbXBsZTEyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgbG9jYXRpb249Ii5cc2FtcGxlMjE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2U5OTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIGxvY2F0aW9uPSJzYW1wbGU0ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIGxvY2F0aW9uPSIuL3NhbXBsZTMyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgbG9jYXRpb249Ii5cc2FtcGxlOTUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjU4ZjEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIGxvY2F0aW9uPSJzYW1wbGU4ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSIuL3NhbXBsZTM2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgbG9jYXRpb249Ii5cc2FtcGxlODM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2VkYzEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIGxvY2F0aW9uPSJzYW1wbGU5MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIGxvY2F0aW9uPSIuL3NhbXBsZTI2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgbG9jYXRpb249Ii5cc2FtcGxlNjE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGI3ZWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIGxvY2F0aW9uPSJzYW1wbGU5Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTk4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiIgbG9jYXRpb249Ii5cc2FtcGxlNDI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDI1MzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIGxvY2F0aW9uPSJzYW1wbGUzMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiBsb2NhdGlvbj0iLlxzYW1wbGU4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJmYjRjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiBsb2NhdGlvbj0ic2FtcGxlMjMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiBsb2NhdGlvbj0iLi9zYW1wbGUxOTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTE5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RlMzRlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiBsb2NhdGlvbj0ic2FtcGxlMjM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTgyOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgbG9jYXRpb249InNhbXBsZTk1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiIgbG9jYXRpb249Ii4vc2FtcGxlNTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmQ2OTg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIGxvY2F0aW9uPSJzYW1wbGUxNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgbG9jYXRpb249Ii5cc2FtcGxlOTQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhYjI3ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiBsb2NhdGlvbj0ic2FtcGxlNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTc2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgbG9jYXRpb249Ii5cc2FtcGxlMzQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTkzNGY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIGxvY2F0aW9uPSJzYW1wbGUxMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIGxvY2F0aW9uPSIuL3NhbXBsZTEwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgbG9jYXRpb249Ii5cc2FtcGxlMjA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjIxMGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIGxvY2F0aW9uPSJzYW1wbGUyNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIGxvY2F0aW9uPSIuL3NhbXBsZTU1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgbG9jYXRpb249Ii5cc2FtcGxlMzA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDRjMmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIGxvY2F0aW9uPSJzYW1wbGU2Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgbG9jYXRpb249Ii5cc2FtcGxlOTc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTM1ODUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIGxvY2F0aW9uPSJzYW1wbGU0NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTgyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0iLlxzYW1wbGU3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVhNmViMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiBsb2NhdGlvbj0ic2FtcGxlMTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk1MTJjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiBsb2NhdGlvbj0ic2FtcGxlNzUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiBsb2NhdGlvbj0iLi9zYW1wbGU2MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIGxvY2F0aW9uPSIuXHNhbXBsZTUwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlMzMwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiBsb2NhdGlvbj0ic2FtcGxlMTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiBsb2NhdGlvbj0iLi9zYW1wbGU2ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3ZTNjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiBsb2NhdGlvbj0ic2FtcGxlNTA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTE5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiMWM5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSJzYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgbG9jYXRpb249Ii4vc2FtcGxlNDM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzU2MzNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIGxvY2F0aW9uPSJzYW1wbGU0MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTk5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZWZkMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgbG9jYXRpb249InNhbXBsZTYyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgbG9jYXRpb249Ii4vc2FtcGxlNzM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiBsb2NhdGlvbj0iLlxzYW1wbGU0MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjOWRjZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgbG9jYXRpb249InNhbXBsZTYxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiBsb2NhdGlvbj0iLlxzYW1wbGUyNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZjNmNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249InNhbXBsZTIxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgbG9jYXRpb249Ii4vc2FtcGxlMjEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQ2Y2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249InNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU2NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIGxvY2F0aW9uPSIuXHNhbXBsZTg3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2OWQwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiBsb2NhdGlvbj0ic2FtcGxlNzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIiBsb2NhdGlvbj0iLi9zYW1wbGU3NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTY4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3ZjBlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiBsb2NhdGlvbj0ic2FtcGxlMjI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0iLi9zYW1wbGUyMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIGxvY2F0aW9uPSIuXHNhbXBsZTM2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0ZGE1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiBsb2NhdGlvbj0ic2FtcGxlMjAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIGxvY2F0aW9uPSIuL3NhbXBsZTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiBsb2NhdGlvbj0iLlxzYW1wbGU4MTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliN2E0YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgbG9jYXRpb249InNhbXBsZTU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249Ii4vc2FtcGxlODM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiBsb2NhdGlvbj0iLlxzYW1wbGU5ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZWViYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgbG9jYXRpb249InNhbXBsZTkzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0iLi9zYW1wbGU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgbG9jYXRpb249Ii5cc2FtcGxlNzc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTI3MDQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIGxvY2F0aW9uPSJzYW1wbGU5MjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii4vc2FtcGxlODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTMyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTdhYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgbG9jYXRpb249InNhbXBsZTUxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgbG9jYXRpb249Ii4vc2FtcGxlMzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NDRmYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgbG9jYXRpb249InNhbXBsZTMyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgbG9jYXRpb249Ii4vc2FtcGxlMzEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNTAxNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgbG9jYXRpb249InNhbXBsZTY4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgbG9jYXRpb249Ii4vc2FtcGxlOTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Mzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOWY5YWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgbG9jYXRpb249InNhbXBsZTYxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgbG9jYXRpb249Ii5cc2FtcGxlODE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWNjODFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0ic2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgbG9jYXRpb249Ii4vc2FtcGxlNjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiBsb2NhdGlvbj0iLlxzYW1wbGU3ODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDU4MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgbG9jYXRpb249InNhbXBsZTg3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgbG9jYXRpb249Ii4vc2FtcGxlNjUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiBsb2NhdGlvbj0iLlxzYW1wbGUxODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OGJiZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgbG9jYXRpb249InNhbXBsZTU5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgbG9jYXRpb249Ii4vc2FtcGxlNzU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlOTI5N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgbG9jYXRpb249InNhbXBsZTQ0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgbG9jYXRpb249Ii4vc2FtcGxlNTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NTgzMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgbG9jYXRpb249InNhbXBsZTc0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgbG9jYXRpb249Ii4vc2FtcGxlNzMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU1NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDZkNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgbG9jYXRpb249InNhbXBsZTU0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgbG9jYXRpb249Ii4vc2FtcGxlODE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiBsb2NhdGlvbj0iLlxzYW1wbGUxNzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjhjNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiBsb2NhdGlvbj0ic2FtcGxlMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIGxvY2F0aW9uPSIuL3NhbXBsZTg1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgbG9jYXRpb249Ii5cc2FtcGxlNjYzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEzNWZkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiBsb2NhdGlvbj0ic2FtcGxlNzg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIGxvY2F0aW9uPSIuXHNhbXBsZTExMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjgzM2EwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIGxvY2F0aW9uPSJzYW1wbGUyOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTcxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgbG9jYXRpb249Ii5cc2FtcGxlMjkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODA4YjYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIGxvY2F0aW9uPSJzYW1wbGU4NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTUzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgbG9jYXRpb249Ii5cc2FtcGxlNDExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGRjNGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIGxvY2F0aW9uPSJzYW1wbGU4OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTk0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgbG9jYXRpb249Ii5cc2FtcGxlNTMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjUzYWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0ic2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgbG9jYXRpb249Ii4vc2FtcGxlOTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiBsb2NhdGlvbj0iLlxzYW1wbGU0OTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyODVhZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgbG9jYXRpb249InNhbXBsZTE5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgbG9jYXRpb249Ii4vc2FtcGxlOTAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0iLlxzYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZmZmMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSIgbG9jYXRpb249InNhbXBsZTkyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgbG9jYXRpb249Ii4vc2FtcGxlMzIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOTY4YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgbG9jYXRpb249InNhbXBsZTk0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgbG9jYXRpb249Ii4vc2FtcGxlNTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiBsb2NhdGlvbj0iLlxzYW1wbGUyMTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NDI4OWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgbG9jYXRpb249InNhbXBsZTI0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgbG9jYXRpb249Ii4vc2FtcGxlNzk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMTI2NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgbG9jYXRpb249InNhbXBsZTMxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgbG9jYXRpb249Ii5cc2FtcGxlMTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWRhY2VjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIGxvY2F0aW9uPSJzYW1wbGU2MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgbG9jYXRpb249Ii5cc2FtcGxlNzY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMyM2FhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiBsb2NhdGlvbj0ic2FtcGxlMzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249Ii5cc2FtcGxlMjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIxNmM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiBsb2NhdGlvbj0ic2FtcGxlNjYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIGxvY2F0aW9uPSIuXHNhbXBsZTExNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzMzU5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIGxvY2F0aW9uPSJzYW1wbGU3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgbG9jYXRpb249Ii4vc2FtcGxlODI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjQ0MzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgbG9jYXRpb249InNhbXBsZTMwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgbG9jYXRpb249Ii4vc2FtcGxlMTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYTQzMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgbG9jYXRpb249InNhbXBsZTQ5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgbG9jYXRpb249Ii4vc2FtcGxlNDEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDlhYWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIGxvY2F0aW9uPSJzYW1wbGU2OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIGxvY2F0aW9uPSIuL3NhbXBsZTI4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgbG9jYXRpb249Ii5cc2FtcGxlMTM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDIwNjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIGxvY2F0aW9uPSJzYW1wbGUxNDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTkzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0iLlxzYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhNTRlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiBsb2NhdGlvbj0ic2FtcGxlMjA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIGxvY2F0aW9uPSIuXHNhbXBsZTc1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFkMDg4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiBsb2NhdGlvbj0ic2FtcGxlMTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiBsb2NhdGlvbj0iLi9zYW1wbGUxNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTc3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ0NTYxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiBsb2NhdGlvbj0ic2FtcGxlODc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIGxvY2F0aW9uPSIuXHNhbXBsZTMwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3OGVkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0ic2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTcyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDA5ZmU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmM2VlYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWIzOWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE5ZmYwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWNhMzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNzYzMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhNjhmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDg4YzFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZGE2NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdiMzEzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzAyOTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMzQ4NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAzZTQwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgzYWVkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NDRlMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc1ZGRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTE1ZmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NzFjNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ2MDgzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDNlOGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NGI5OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlOWY5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTNhYjE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMjZlMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZGZiMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjA1ZTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NTQ0MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlkYzkwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWM5ZTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OTlkZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAwMDJkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDFhYmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNWVjYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IxZTBkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzY1NGE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjc3MTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3NzE3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTYwODkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMzE2MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4NThkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzhjMDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYWE1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBlMjJmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBjMzkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MzU4ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY2NWRjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc1N2EwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmODU0MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIwMGVjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTdhMGRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNjBkNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEwYmFjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTI4OGJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjhjYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ5OTcwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjc5NTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YjNkZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMzgwZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2I5MzkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NDdlMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhYWZkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTk1ZDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOWFmOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBlYTg3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2I2NTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5OGFiZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA1NWZjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGNiMzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjZiMTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkxYjRlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGQ5NWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMDU0ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcyZjMxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjlhMzQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNjg1ZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMzOWY2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjcwOGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YmM5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZjNTQ2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVhNjkyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODRmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRjNmQ1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzYwODRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiODZkNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEwZWM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWU0Y2Y2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YjIxOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjZjg2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDgyNzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZWNkMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMDFhOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDg0MjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMzQ3ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0NzFhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmU3YTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MGJlNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkYzM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjRjMDVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwN2U2NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlNWRjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWI1ZWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQxODUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZjODc4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjRjZTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Mzk0ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmYmZmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGYyY2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NGY1N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5ZWE0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzliZDkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YjFmZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VmODcxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDRmM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzFiMTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVjMmM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmZmOWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ODFiMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzZTdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmI3MzA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlOGY2MjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU4MTY4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTk2YWUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxODdjOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZmMDUxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI5YjcwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNzAwMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNhYjU1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDYzMzZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MDg5MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhZDI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGUxYmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MTIwM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzM2VmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzE3ZmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZWU1MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNjRkNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkNjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMmNiYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmNzIxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjljOWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZWJkODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkyZTliOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzZiZDc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YmQ1MjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYwYjQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjM3NzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmFkYmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwOWZjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTU1MWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMDk3YjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmOTkwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzcwZDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYmRiNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA1OWMxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTBmNmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYjJhMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwMzIwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk2Yjc3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NWYyMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4ZTczMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWNhM2FjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNzY5ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNlMGEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzFjNTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZjVkYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI5YThmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmEyZDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YWQ3NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNTYzMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmI2MDYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ODAzMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNTgxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGRjZTgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkOWUzYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyMjdiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmRlZWZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhN2E1MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyYWI1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDU4MTU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQzYWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyMjhiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDJjMTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNDU1YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhNmNjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTJjZTc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YjVlZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg0MWZhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjIwMWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiM2JlMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIyYTcxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE1MzA4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NGI1MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU3ZWI2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDI3ZGQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiOTE0YjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFmY2FjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDEyYWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ZWY4YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkwZjkzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjI4MDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyN2ZmNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NTI4MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjE2Y2Y2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NzQwODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxYWRlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTQ4ZjU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YTgzZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFhMzY1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmVkZWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4Yzk4ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYxYTA3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzg1ZDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDQ0NjY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0OWU0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjcyODgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODM1NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIzMTQ0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTU2ODg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZTVlYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNhM2QyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODNhOGIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZGIxYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlkOTE5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTFjYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzZlMzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhZmJjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODk3MjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZDdiY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNiZDA2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWViMDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMmIwYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVmNDJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjZiMmRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Y2YxNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmOGU1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk4MzI1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZjE1MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRiMjUzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGQ3ZTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYmNlYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAwNjI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjdiOTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMzg2ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlMzVlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzA5ZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NzkwOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWYxMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjNiMjYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYTVlZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE4MWNkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWY0NTkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMDJjOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiMGQ1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWI3ZWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2OTBiNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlNGZhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjBjNzBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2VkMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwZTZhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjY5OWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ODA2NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM4ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjk2MzIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExN2YzODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMwZTkzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjJlMGNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNzNlNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyYzRiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNjY4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxODg3MDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY0MWRhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjFmZmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YjM1YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjOTI5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODNiZjc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYWRhYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRhYzQ4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTM0N2I3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NzM0M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NTU3ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGVlMWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MGQ0ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZlMjM4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTg5YTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYjEyNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY5MjY0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTVjYmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NWNjM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwNmNjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmQ0ZTY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWNkMWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjViYjUxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2YwZGViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMzhjYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlmZmMxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjg5MzNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhY2U3ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1MzRhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2QwNjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYjA2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBjNmVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlNDFlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZmFhNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhYjJhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGMzODUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNDg3ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3Mjg1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjRlYTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZjI3MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkNzE2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzdmMTk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YzcwZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZWMwZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTUxY2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYjVkZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjNTZjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDUwMzk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYzNiOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1ZTE4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTVkOTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNDFlNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjZDU2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjYwOWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTEwNWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkxOGM1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2QxYTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZjQwZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzOWYyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmFjMGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhODRhMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3MGZhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM0MjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTgwZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRkZjFmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOGMwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTA4OWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM2MmYxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzZmZjA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhODRlNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRmNTFmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjdkYzA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYmM1YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU0OWFkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODBhYzVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MmY3ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ4ZWFkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUxNzM1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ODUwOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc2NmVmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWQ3MjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZDk4NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhlMDcwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTA1N2FhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZDU4ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFmYjI4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWYzMDUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMTQ3MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NzA0MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTFlZDI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MDBmZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ3MTEzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjYxZWM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNDU5ZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgzNGZmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjU2ODJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMzQ3MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ1NjM2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjIwZTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzliNDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1MmRmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzQ3ZTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YzdjNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkNjdlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmNmNjQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3N2Y5Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEzYjg0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWQ2Y2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0OTI5OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc5OWZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3MDUwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZGM5NTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3YTZiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjNkZjg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YmM4NzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExNWJiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODliNzI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NTVkNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTliMjFhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmM4MjU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYTgxMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMzQ5NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTA1N2U2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMjdkZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI2MTA2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTQ4ZjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYmFjMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U2ZmViMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTgzY2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMDQ3ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU2MDQ1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjg1YWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQwN2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAxOTc3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzJjNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YWM4OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMzODliNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTQwNmY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNWVkZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3NTlhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTI4ZjkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMmZlNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYyNWQ1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBjMTBmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZDA2ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2M2UzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmEzMmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NGQyMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkZjYwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2ZlNDAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NDU5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZkMjQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmE4ODVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNmM0ZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMTQzNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWJiZjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZjViMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU5ZmVlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmQwYWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhODRjY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIyZTA5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTRhYzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YTZkNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzZmU5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTMyYmE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOThmZjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJmM2UwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTk5OGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMTNkYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI2NDY5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTVhOTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OWVhZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhN2I2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmIyNDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyOWY0ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU4ZDliOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMTg1NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njg4MTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAyY2E4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODRlMGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMmEyZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEyMDJiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTQ0YWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4N2U3MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2MGZiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWI2ZWMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjNkY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQwOTNmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVlMmE1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxY2JlNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE4N2RkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjkzMTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMzg5MjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRmNDBjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzg0MzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMDJjMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJhZGYxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjhmY2Y4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NWVjMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZTI1ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2U1MmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MzA1NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZhOWFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2IyOGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNjU3NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZlN2E0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNThjZmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MmE4MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhMTlmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2FiNTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTUxMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhNzI4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmU2NmNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkOWEzYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk4ZTcxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQ2NjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDU4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk4Yzg4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDU1NTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1Y2Q0MmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI1NzRiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQwZjc4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NzRjNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZhNzRkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTM0NzIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODhkOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmOWM2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTg4MzdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YjA2MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxNTMzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDY1NWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNTNhNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYWZjNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWY5MzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOWNkNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhOWYwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWZkNmQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NzhjNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTljNGJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzFjMzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzU2MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiYzM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGIxMjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTNiMzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyMzE4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTliZjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjFhNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlMzFiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWZkM2FhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MTgzNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIyZDMzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmQ4ZjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZmM5YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM1NzQwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVkMDc3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2Y2E1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2ZGMwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWRjNmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMTE1MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzMmI4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODBkODFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MzlmODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyNWE3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODA2YzdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YTEzOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZTUxZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTFiY2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMGJiN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhZTE4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzA4OGRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZDRjMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFkMGRmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjAzNTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNGMwMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzYTg2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTdiZDFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNThiNTVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwNTA1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2JiZGM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDRkY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM1YjczNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmI0YzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYzY3YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUwN2NiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2I1M2Q0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YjIwOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFjOGQ1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MjJkMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzY2MDA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwZjI0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjEyMTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YTFiYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZkYTFkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDJhODk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NjczYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyNGY1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmQyZGRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Zjk0YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc0YWE5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxYTRkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0OGI2OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2MGE5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmZjYTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxM2EyYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThhYWNjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTM4NDMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNzAxNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ5N2VmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2E1ZGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZjY0NDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OTBhNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzhmMGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMGNmNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkyN2Q1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODViZTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmOTkzMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4NDkwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDE0ZjFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYTQyYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg5NTQ2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTk0N2UwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDc3MmQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI2YzZlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODU2NDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZDI2YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE3ZjU3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDdmNjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMWJiMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxNmEwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGFmYmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YjVkOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMxNWE2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1NGU5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMGU5OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFjNGQ3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWI1ODJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYmQ2M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5Njk1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmI0ZTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxODA2NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjMjdlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzUzNDZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZjdhZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NjgyYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzNjM2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlODVmYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzMjY0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDJiYTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NmE2NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI4ZmU3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWQ3ZTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMWQ0NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNlMDU5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjdjOWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTQwMDQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdiNDIwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDA3OTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZmYyMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE4MzRjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjZjZjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3OGYwNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYzZTk5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTIyMDJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTA5MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNjMTFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhiOWU2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwODc3OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxYWNmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWFhYTdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YzhlNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVhNzhjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjI3ZGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZDIxYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UwZTZiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTE4NjVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0YWEzYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYjMwOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDY1MmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNDY3NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZlMDg2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTA0MTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNGJjY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4NGM1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGRlYzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZjZiZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0OTg4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGU5MDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTQzMTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU5ODA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTAyZmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NTY3MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ4MjRhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTE1Yzk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMTJlN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkOTQ0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWU1MWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYmJkZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UwZWM1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjBhNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTk1MDJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhMWYzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTA2ZTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1Mjk2NzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhMzFhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGU3NmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MzljNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA3M2ZmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk5YmM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MTJlMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMzYjJhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzNzBlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYmI1NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFjNjllNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTRmZjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMDZjNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3OGQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjE1ZTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExY2RlYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWExOWM5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmFlNTlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOWI3ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjN2YzNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmY5MGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZjViNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY2YjI0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODVlZjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOTU2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5ZWJlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2ZhYWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MGFlMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZmODA0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDBmZTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGQ2ZGE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3OTdmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjM2YzkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNzBiMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzOWU1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzk5ZTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZDg4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkYzJiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGI0NWYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZWQ2Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkwYmQxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwMzVkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ODlhNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU5MTVkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDZjMDgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZjM0ZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3ODgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWExN2ZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTZmNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM4NDU0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmI4ODVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYzBkMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYTVmOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFiZWVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNDU1YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlNjA0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmZmMjkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNjhkNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmMjE0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGVhYTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZjcyYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzNzIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDEyZGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGY1YmU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlMGM3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjA0MDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNWE5MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUwMzk2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWFhYzIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNDljYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q3ZGNiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2ExZmI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMGEwMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA5YTlmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUxZjYyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZjZlY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFiZTA1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODU4NTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhODdmMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEyMjMwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGEwZjMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZDZiZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyYTZmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjg5Yjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYWRhNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmOTdkOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGI2Y2U3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZWEzODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg0OTA4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmFhNDY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjcxNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE4YjJlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjRkYjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZGRiOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk3MWRlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjIwNWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg3M2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2MjZjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGNhYTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMTA0MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNjMDBmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWE2ZmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MzhmOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU1NGFjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGZjNGE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMzAzMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxMGZlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNzFiMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE4MmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExNzZjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2E0YjA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YTU0NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRkMTk3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDc2NDBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1N2Y4ZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRjZDY4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzA5NWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNDExZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IwMDJiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljNmJlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZjEwN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAyYzMzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTIwMzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNTk1ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUwNzUzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjg2ODRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5Y2JjMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkYWM1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2U0M2MyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYzAyYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYWRkNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmNmZDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMGZjZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI2NzQyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjE3ZDA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZjE0MjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhZDk1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2JjMDBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NGM1MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyNTc5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWI5MjZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWVjOTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBhYjczNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWRjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NTM2YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIwZDgzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTRhZGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNTE4MTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwNTJkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTgyMWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyM2ExNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQxNTUzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNlZDYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OTZiOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyYjUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjU0MmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYzQ3OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5NTE3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNiMWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmODk1Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUwOGUwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzYxMjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MmEzOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDkyN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjExOTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxN2U5M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzNDQwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTZmNzM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YjQwN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E1NjM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjNmZDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjEzMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUyMjNmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzg1MDA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTFkMDdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhNWM4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTk4MmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YTBiZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyYTUzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzQ1MjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNWM3YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxNTZkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODg4YjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOTk2YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk3MmMwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3YjM1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYmYwMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEwZDUzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWFkYTRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjMyNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNiZGNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmRjNjM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNmZkZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAzMThjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTMyNDllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjEyMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzM2RjMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTAxNGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNGYyYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZmYjdmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzU5MjkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZGE1NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzYjUwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmYwYmE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMGM4OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1MmY4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjNjZDcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWYyMmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM4NDQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzY3NTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZTJkMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiNzM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODI4YWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMjE1MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0NWJjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzZkMWJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMjEzMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE4Yjc5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmY2RhMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjc4NTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViOTZhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjJkZDAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MDQ4MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA1MDk5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWUwODBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNDI1NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzYWJjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiZjMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZDI4ZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI5OGU5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MwZTQzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOTcyNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4MTA4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQxNGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4N2I2NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxNDU1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWUzZjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YmJmMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM1MTg1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTk3NDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZDVlOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNDM4YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGM2Y2VkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3OGNlMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5ZDYyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjVhMmQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZjc5NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhMjhjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWUzZjk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMzBhZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiY2RiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzdiYzZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2VkZTI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYzYWQ5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzI2YjRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YTUxYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0NGQ0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjM2YTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMjQ4ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjZDc3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzk5ZDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmY2JkMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMwM2ZlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjYzE2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZTA2NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU4Y2FmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTMwMGFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYTc0YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU3OTZkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTkzZTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNzVjOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY4ZGQ3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDExZGYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMGZhYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOWE3ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTY1ODkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZjI1ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwODMwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGU5ZWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYTFlNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0OGYwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzI1Y2FjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYzNhMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1ZDI2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmM0OGRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDM2NDgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZmZjE0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGUzNWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4Yzg5ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU5MGVlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2NiMjdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0Njk4MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdlMjAzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzE0ZGQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTc5YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4MWIyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJjZDM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YmVlZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhMmEwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGY3MWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNzQ4MzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA0ZGYwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmU3YTQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMmQwZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3NzE0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA5YmZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNWQ5NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NjQ2ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjk0MTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MWNiYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNhNDg5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzFjYmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNDAxZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4ZTgxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzVmNjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNmQ3N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY0MmMxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWI0OWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzRiYTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZjZjdkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDRhMzQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNmNiMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTczZTA1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTcwNGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMWU5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlmMzEwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDJmMzZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MzBiNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgxODZhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIyYTZjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhM2ZjMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjcwN2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiYjg4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM3YjcxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGNmODkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThhYWIyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJmMmZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwODE4MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzIyNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQwYjJiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGRmZmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MzJhMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2N2ViNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNjNWQ5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjdiZDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmU5OWNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZTQ4YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkzZjQ1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGZhN2QyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODQ0MGQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MzZjYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOTQ0OGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYjU5OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UzMDQzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5NDljYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjczODY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2N2E3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMDE2ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyZDcyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNDdkYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxYmFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGFkZDM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5M2UxNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzc5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxNGM3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzAwN2Q3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNjYwMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGExZThjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTllMTkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMxZDZmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTdjYmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzNiYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhjZjc1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDk3ODg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YWM2MmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjZjVlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzg0NzRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjQzY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3NzBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWU5NjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3Njc5MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhN2Q0ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIxMTUxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGY2Yjk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMDBhZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYzNjA4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGY1OGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZDkzNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkyMTdhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDQzNjlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ODVlZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFiYjEzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGI2YmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2NhM2MzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0M2UwNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGFmYWM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNWQ1MjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MTk5NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYxYzA2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTlmM2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzkzN2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODYxMzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MDMzNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkNTc3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk4ZDM5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc2MDJiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjg0M2NhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NmE1ZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRhZGQ1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzE2NDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDY1YjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NzkzYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA0Y2YyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzFhOTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzIxMDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNzZkNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjczZjBkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0ZDMzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDEyMDcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVmNmE2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmQ2N2Q5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNjIyYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4YWYzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjVmNjZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYTc2Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJiMmU1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjFmYWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MTVhZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA3MTliZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVjNDE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDBjNTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY2MzVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZjNTYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjhmNDhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNGIzYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjZDNiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjA0ZjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZmMyNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEwYjNiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjhjMjQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YjQxNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNzIyMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjljNWMxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNjczNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzZDBmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDIyZGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NTU2M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUzYWRiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjgzNTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZmZiYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNWZmNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ2ZmQxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTVmOWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhkNmY3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOGEyZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUxMzA1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODUxYzFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE5MjRhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzA3NGE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZjRjMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIxNWE4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGQ4OWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOGZmYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNlMTZhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGQzNzRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NTYzMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2ZTQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UyZjkwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2FkNTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE0M2M2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWZmYzg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTE3ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5Y2Y2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjg0YmM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWJkMDA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NmFkM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYzYxYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3OGIwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc5ODRhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZlNWY0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTUzNTIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NzI1NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFlNzAzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmZiNWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNjcyYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MwOTU1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmM5YWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZmZlYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FmOWYzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTVhYTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMWQwMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZDkyYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E1N2E1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDA0OGQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYTNlM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYyN2IzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjdiZjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZDY2YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmZmY3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGY4MzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZDhmOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyOWJjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzhiMzZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2M2NzUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMDY1MjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTQ0N2MxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2N2UxOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlNmIzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjQyNTllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjQ3MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5MzljOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2VlMjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NjcyOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM0YjA4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTg5ZmNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhOWExNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTgwMjljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5NS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdjY2Y1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmNmNmJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjYwNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQwMmQ5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZkYjVjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTUyNWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Zjk0YjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYzdmMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2YzYzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTE1MTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjIzYjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZTM2OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkzMWU3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDBjZDY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZjg1NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkZmNjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDJlMjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YzJmNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU0ZWI5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWIyZWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMWIzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNkMWQxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4MGRiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTE1MTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYzNDRmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjliM2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMzU2NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M0YmQ5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzUxMmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YzAwNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVlOTc1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2VjODFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNjMyOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyODJjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzYTkwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTljMmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNmYWM2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjVkZTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MzlmNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyNWI2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmE4NDI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzM0NDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYjk1NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhNmFhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDZkOTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMjdiOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MjdlMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg2MTVhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxODU5ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIwYTUwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjUxOTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYmY0NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M1YjU1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjZhNjFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmUwMWUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZTQ4YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAxODhjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzYwYzU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNzc1NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmYwZTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDUyZGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ZjRiODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWMyYzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMDY3NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI1ZjExNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTljZTgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjE4MjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY5MDAzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODE5ZDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYjQ0OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiODI3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2E5MzA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjQ2YjA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMzJmMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTY1ZmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZmExOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQxZjUxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDM2YTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NGIwMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxZWM5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMxNGMxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjc0ODY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZmNhZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIxZjc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmMTU1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjJlYzExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhODVkNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEyYzk5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGMwZTBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZmM5MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MjY0ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxNmQ1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTM5ZTAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMThlODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiZmYyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDRmZDExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmE4MDgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZThiYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjM3NmZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjM5NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhOWFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2QxNmExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwY2U3ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZkNzgyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGQxM2M4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNzA3YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNWI0NDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk3YWM5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY2ZmE4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmE5OGM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ2ZDRlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmNkODRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGM2Y2Y1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1Y2U5YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA4MGQzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGIxYWQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZTU3ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI4YWY3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWZhYzJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWMyNTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI5ODZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZWNiZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWFiYzc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MTI1MDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgzNDUxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzdmZmQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YjUxNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZWY3ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU0NjcwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGNhZDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjA4NmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3OTk0OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZjJlOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNiZWI4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYTVlMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzNGVmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjVkNzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmVhNmRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YTg1YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFiOTgwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmIxNGE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNjUzY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZmZkMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiNjgzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzYzA3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTMyODFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0MjM5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2Q3ZjllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZGZkNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4NzY4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2RmZWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYzg4N2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMWM2MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhZWJlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDBiOTIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMDY0ZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZDRjNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1ZGRkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NmUxMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY3ZDMzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTE2NDllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViN2ZjZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU3YmVjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWNkNzZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZTA3NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MjAxMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M3N2NlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjYyZDE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDM2OTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNzI5YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMmM3YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0ZjFhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1ZDQyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmE4ZWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyOGFlN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNWZiYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0YzgwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTMxNTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmM2U4YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMxMTQxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNmM2MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdhYjYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2M2MTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MDE1NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFmMmExYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTc0NzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMTU5NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNDViZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNjYWRiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjMxNDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiOWJkYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5YTA5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDU2NjZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjODJmN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYTc2MjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0ZTdiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMmI4ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAwYjg2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDBkMmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDE2N2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4OTFhYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwNDcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTllYjA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDM1ODlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNmRkZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxZjVmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEzZTdjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDhkOGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4NS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y5ZWIyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjQ1MmYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMTcwMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2MjI5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdiMTdlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDhjNTkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMTBlOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU3YjJjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWQ3ZGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzQyNmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTNkMzAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOTMxYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjc2OGQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjEwNGI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWU2MTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNWFmODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4YTE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWU2OTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzOTFiNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdmNjVjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzk4ZTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOTEwNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMDMzYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViZWE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjN2QzY2NiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWY0OGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjN2I4NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNWU2ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ5ZGVhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWY5YWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTNhNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkZWM0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjdiOGRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNGM5ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZGE3NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNDdhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2OTQ4ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYzN2U4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDU5NmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NzQ5MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg4YWY1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTkyNzAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzQwM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0OGQ4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTRmMmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZmY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MDlmZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhZDc1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTk0ODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNDQzYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjODc4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzBkYmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWMxZDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODVjMTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZjEyODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMxYTEyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTQ1NDY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFkNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYTc2MTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA1ZjUyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNTkzNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA1ZDA5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTFjNTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MjRhOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkwMjliNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlmODZhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjViZjA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmODQzZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyYjMyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDg3NDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGI1NTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYTY1ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmE1NDZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMjg4NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4ODQxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhNTkyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTAzNWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjFmZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNiY2NjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMwM2FkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EyMThhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTJjOThmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTVmYmJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNjU4MWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTc0ZWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMzE2NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlM2E1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjYzYWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MjM3NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQyODRhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTA4MzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxY2RlMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIwZTUzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjM1ZTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIyMjdhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NzdlODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRlM2ZjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGY2ODAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNlMWRkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDYwY2M3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NThhZmZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1N2U4ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYwMzAwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGU2ODVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwOGNmM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlN2U5YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Y2Q0MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5M2QzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0NzM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTRiYzRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYWI0ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVlYTlhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2NjYjEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYjE3OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhOTBlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njc0YmM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MmU5ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZGY4MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZlMGYxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDM4ODY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTljMThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYWQ3MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmZkNTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzOGNmZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRkYjIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjljMWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZWE3ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZDE2YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ5NTljNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjg1ODRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzkxZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM4MWUxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcwYzVlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE5YmFlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ODJmYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgyM2YxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTM2OTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMTdkNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE0ZWY1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2Y3NDY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YzkxODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ2ZjZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhNzEwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODdhNTlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODcxNDk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYzc3ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTJiMDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZmYzMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA3YjAzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDBjZWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkOWNiMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmMTFiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGRlZjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZDcxZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEzZjI5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTI4MDZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGVlMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MzllODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjI4ZDJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NDk3NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMwN2NkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNmY2MyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzdhY2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5M2ZmZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNjMzZlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTI2Y2EyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZjk1ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MzMxNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4Y2E2ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0N2JhNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNmMmM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZWMxNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIwZjMwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjdhZTVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzVjNTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZDI0YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk5MTlhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmZiZTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MDc0MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAyZGVmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NkNzQ5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4MmNmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTM0M2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNGNjMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RmZmM3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGU4MDBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1M2M2YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2OTVlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWNhMzQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNmUyMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM0ZmUxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzRiOWQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2Q1N2NhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhODZkYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTAxNmYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZTkyYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhjZTkwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzQzMzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMWY1YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFjOGI3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2IyM2ZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMjIxZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFkYjYxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTFjYjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjE2ZTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGQyZDg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMwY2JiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTJmOTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZTYxMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTViMGE5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjQ4NDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZWQ3YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMDAwOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzNWZhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZhYjNkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGIxY2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE4NWIxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMTIwYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTRhYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY0MDUzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYzljYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkYmUzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWRkOTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMjg4OGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzZTc3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjhlYTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTg1OGQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwODQ3YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI2NDkyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzI1OWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTBjMzk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYWEyMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDg5N2FlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTZmNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4ODg0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWU0N2FlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2ZhYjllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMGNmYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0NDkzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGVmYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYzZmYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjNzY5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBhMGY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkMWMxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmNlMWYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZjBkNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMmYwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWI2MTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiY2E0ZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwNzBmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTA3NTc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YmJkNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQyNThmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzMzMDIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTVjMzE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxM2NlYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA5NDczNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGU1YWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YTg1MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlYjcyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmVhNmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0OTk2YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDViNzE1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjllYmY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwY2I5OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdmMDZhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViNDc5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDlhZTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYxNzBhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGMxZTRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NmMzYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM4MTc3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjkxMmEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1Y2ViODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc4ZjRmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2E3NDYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNmZmNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjZjY3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJjYmIxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWI2OGViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0NS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1MDRmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmE0MWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMzYzM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmZmYyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDgwZGI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYjgzMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ5NWJhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIwYjFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODAxZTc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiM2Q3MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZjkzNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhlMmJkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTczLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTc1MDlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmY2RjOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRiMmZiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEyMTEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM4YmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkN2ZkN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBlY2NlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzNlY2M2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNWQxODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkMGVhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjYmQxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDAxZDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllYWNmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWI4OWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZjUxYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMzYWEzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTYwNjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWNhODM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMjU2ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5MDlhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGU4ZDQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NzMwOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMGJjZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIxZWI3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDk0OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM1OTQ2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGE5OTY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMTgwZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk1NjA1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWQxNDkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjODAwYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA1MDk2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDFiZjgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWMyZmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGU5ZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNWM1M2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzI4NmJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMDMwZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlN2NkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI3NmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MWU3OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI5MmU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGM2Njc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NDdiMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIxMWM0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGM3YTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYTdiMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWM3NjlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZWNjYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkzMDcxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NzY4ZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkYzJhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWY0OTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0OGJlNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZWZhMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZmVjODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVhMzIxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzdhMTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OGRlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE4MTZmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYzNzI2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmE5YTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGQzYzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMTBjYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjODMyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2VhMjMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZmNmNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RkYWFmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3NzNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTk1NWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MmUxODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmMDYxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5NTkxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTA1YzBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEyNDUxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmQwZDMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMjhiZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhMGMxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWFjMGIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYmI4YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5MjlmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzNkZDI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YWViMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzY2NhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgzMTkxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBmYmNkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNDQyODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQwOTE2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjdjOWRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTcxMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdmZjE2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTM0ZjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjVkZDJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYTg5NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4ZDViOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODVkNzY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2IyMWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ODdkMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTg2YzVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZTE4NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwZTg1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjdhNmMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYjFmNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZiNjIzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2YyNjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZTQ2ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWU0MzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcwODdjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIzMTI5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yzk5MTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ExOTE5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTRlNmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MjUxMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I4MDZmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDZjZmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMTY1M2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI5YzFhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjU2NWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZjk1MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1ZDU2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTljNzk1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGYyZTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmNTI0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEwOTNhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2IwN2E2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmI3MGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZmRhOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2ZmNlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGVkN2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTM4OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY0MzM0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDAxYmU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTExZTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3Y2Y2OGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGM5OWE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNmMwMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIyNTEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGM2NzU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNTJkZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzN2M5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzZhM2ZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZGQ4MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNlNjkwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjNlOGQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWQyNzRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MzRlN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiMzM4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmY2OTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MzY4ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYwNTNmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDAyOTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZjI0YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkyOTMwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDU2NjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZGRlZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YjE4OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNjRhZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQwOWI3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMTU5N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZThhZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExYmFlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWExYTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NTlkOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlhZmU0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUyZTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNjEwZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY1ZmYxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzc1NzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlhMDc1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YzBlY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2ZDJkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTc3ZTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3NjcxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzViYjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ODRlNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgwNjk0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2MyMTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzllNTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMGY2M2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUwMmUxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjU5NGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2IxNTdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzEwZWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3M2U3MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4NzFkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTIxZTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZTQyYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlYjRlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2M2NWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZWQ3ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxZmE4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTdhNzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NDU1ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhNjdmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4NjJjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiY2NmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMjBjMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU0NmQ2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGRkMTg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNWQxNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EzYTFjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGU4ZDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1Mjg4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJhNjE5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGRjZGE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YjBkN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMjJkZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5N2UwNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTczLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzZlNTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOGExNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1YTI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmM2M2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYWU3MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U1ZDBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2FiMGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjg5M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1MjA3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzZjNDg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzIzMjAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNDFkOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWVlMTdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMzdhMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI2NDdkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWQyYTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5OGUzMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg5MmRiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTY4ZTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDk2ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlkMzc5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWRjYWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDBkZGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZWM1ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTIyMDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiN2I2ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4YjRmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjQ2MjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNWVlODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZkOWEzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTNkZDlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZThmYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmMTA3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDdhNDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmY0ODAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OThkYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlNDZlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODZlYzk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWY1N2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZjQ5YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNiY2NiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmZhMTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3OTljNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRiNjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIwMjcwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2NlN2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyZWFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGE1MjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNjdmYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIxZmVkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDc0NGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MDgzMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI2ODA3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGRmN2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmN2E3YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0ZTJkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmNiNDE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjY4NTkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTg4Zjg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyODI3NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTRmNjU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNWNjZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IxOGE4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjM2NjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlODIzMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRjYzc4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDU1ZGFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ODllNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1OWNiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmViY2EzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTcyYzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWEyMDYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzJjODcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNWM1NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk5YTI3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjM1MmY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYjI2ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4NDRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTk5MDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyY2E2N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg5ODVhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGNkN2ZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NGUyNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWY1NTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ZDYxNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA4NDhlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmYwYjEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4Nzc1NDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyMmMyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGM2MzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWJjNTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZjhjNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNlNTQ4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExMzlkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODAzOTI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYjNjZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNjFjZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEzN2EyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjc4MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTczYTg2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzdhZjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDE0ZTMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNzE3MmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0MjczYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGM5YWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MWQyMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2MWFjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmFlYWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDg4ZDgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZDZiNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTMyYTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZjlkNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIxODFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmMzY2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzJlNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzM2IyMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2ZmU0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTVhZTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNWNkZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ4NTU5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMyNTA0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjc2ZTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxODY5YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0NzQzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTZhMmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmNjZDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwY2I2YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3NjMwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njg4MmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWNiYzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMTU1OGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlMjg0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxNTA5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTA2NDk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOWI1ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwZjI3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTE2NzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZjcxNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjYTIyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTFiMmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5M2ZmNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ2ZWM4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmZhYmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NDY1NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDRlNGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOTJlMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgxMDk1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMThlMTk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZjFhYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlMzNkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDEwMjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NGFhOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2MWIzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGJmYTIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYjJiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ1MGM4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNkNTZkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTE0OTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ5ZmE3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTM4NzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMDU0NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1ZDJhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmU2ZmNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YTIwMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYzY4YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRiZjNiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2I1NmVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNWExODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNWMzY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNGJjMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJiZGIyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGViZjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYjEyNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVjZTY0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDNmMjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYWI5MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyMmQwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmIzYWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMjkyYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMxMTM3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIwMzBjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzhkODI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzYWEwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzE1NTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ODQxZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4NmYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzQ0NTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNzdiYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3NGQyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDQ5N2NkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWEyZDc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZDg5ODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZWJhZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE3OWQxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMGI3ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU1YmQwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzM4N2Y1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YWYyZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRhZTM2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjhmYzRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMTJhYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU0NzMxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY3OTliNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzcwM2FhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMEtCLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMEtCLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MDQ3YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBLQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzEwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRGVmaW5pdGlvbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMCIgbmFtZT0iSW5wdXQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTAiIG5hbWU9Ik91dHB1dDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzAiIHR5cGU9InRuczpQb3J0VHlwZTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MCIgYmluZGluZz0idG5zOkJpbmRpbmcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEiIG5hbWU9IklucHV0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxIiBuYW1lPSJPdXRwdXQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyIiBuYW1lPSJJbnB1dDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMiIgbmFtZT0iT3V0cHV0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMiIgdHlwZT0idG5zOlBvcnRUeXBlMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMyIgbmFtZT0iSW5wdXQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMiIG5hbWU9Ik91dHB1dDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMiIHR5cGU9InRuczpQb3J0VHlwZTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MyIgYmluZGluZz0idG5zOkJpbmRpbmczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQiIG5hbWU9IklucHV0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0IiBuYW1lPSJPdXRwdXQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1IiBuYW1lPSJJbnB1dDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNSIgbmFtZT0iT3V0cHV0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNSIgdHlwZT0idG5zOlBvcnRUeXBlNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNiIgbmFtZT0iSW5wdXQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYiIG5hbWU9Ik91dHB1dDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYiIHR5cGU9InRuczpQb3J0VHlwZTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NiIgYmluZGluZz0idG5zOkJpbmRpbmc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTciIG5hbWU9IklucHV0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3IiBuYW1lPSJPdXRwdXQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDciIGJpbmRpbmc9InRuczpCaW5kaW5nNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4IiBuYW1lPSJJbnB1dDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOCIgbmFtZT0iT3V0cHV0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOCIgdHlwZT0idG5zOlBvcnRUeXBlOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOSIgbmFtZT0iSW5wdXQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkiIG5hbWU9Ik91dHB1dDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkiIHR5cGU9InRuczpQb3J0VHlwZTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OSIgYmluZGluZz0idG5zOkJpbmRpbmc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwIiBuYW1lPSJJbnB1dDEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwIiBuYW1lPSJPdXRwdXQxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAiIHR5cGU9InRuczpQb3J0VHlwZTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExIiBuYW1lPSJJbnB1dDExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExIiBuYW1lPSJPdXRwdXQxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEiIHR5cGU9InRuczpQb3J0VHlwZTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyIiBuYW1lPSJJbnB1dDEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyIiBuYW1lPSJPdXRwdXQxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIiIHR5cGU9InRuczpQb3J0VHlwZTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzIiBuYW1lPSJJbnB1dDEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzIiBuYW1lPSJPdXRwdXQxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMiIHR5cGU9InRuczpQb3J0VHlwZTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0IiBuYW1lPSJJbnB1dDE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0IiBuYW1lPSJPdXRwdXQxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQiIHR5cGU9InRuczpQb3J0VHlwZTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1IiBuYW1lPSJJbnB1dDE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1IiBuYW1lPSJPdXRwdXQxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUiIHR5cGU9InRuczpQb3J0VHlwZTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2IiBuYW1lPSJJbnB1dDE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2IiBuYW1lPSJPdXRwdXQxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYiIHR5cGU9InRuczpQb3J0VHlwZTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3IiBuYW1lPSJJbnB1dDE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3IiBuYW1lPSJPdXRwdXQxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTciIHR5cGU9InRuczpQb3J0VHlwZTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4IiBuYW1lPSJJbnB1dDE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4IiBuYW1lPSJPdXRwdXQxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgiIHR5cGU9InRuczpQb3J0VHlwZTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5IiBuYW1lPSJJbnB1dDE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5IiBuYW1lPSJPdXRwdXQxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkiIHR5cGU9InRuczpQb3J0VHlwZTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwIiBuYW1lPSJJbnB1dDIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwIiBuYW1lPSJPdXRwdXQyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAiIHR5cGU9InRuczpQb3J0VHlwZTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxIiBuYW1lPSJJbnB1dDIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxIiBuYW1lPSJPdXRwdXQyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEiIHR5cGU9InRuczpQb3J0VHlwZTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyIiBuYW1lPSJJbnB1dDIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyIiBuYW1lPSJPdXRwdXQyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIiIHR5cGU9InRuczpQb3J0VHlwZTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzIiBuYW1lPSJJbnB1dDIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzIiBuYW1lPSJPdXRwdXQyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMiIHR5cGU9InRuczpQb3J0VHlwZTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0IiBuYW1lPSJJbnB1dDI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0IiBuYW1lPSJPdXRwdXQyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQiIHR5cGU9InRuczpQb3J0VHlwZTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1IiBuYW1lPSJJbnB1dDI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1IiBuYW1lPSJPdXRwdXQyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUiIHR5cGU9InRuczpQb3J0VHlwZTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2IiBuYW1lPSJJbnB1dDI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2IiBuYW1lPSJPdXRwdXQyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYiIHR5cGU9InRuczpQb3J0VHlwZTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3IiBuYW1lPSJJbnB1dDI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3IiBuYW1lPSJPdXRwdXQyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjciIHR5cGU9InRuczpQb3J0VHlwZTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4IiBuYW1lPSJJbnB1dDI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4IiBuYW1lPSJPdXRwdXQyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgiIHR5cGU9InRuczpQb3J0VHlwZTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5IiBuYW1lPSJJbnB1dDI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5IiBuYW1lPSJPdXRwdXQyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkiIHR5cGU9InRuczpQb3J0VHlwZTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwIiBuYW1lPSJJbnB1dDMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwIiBuYW1lPSJPdXRwdXQzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAiIHR5cGU9InRuczpQb3J0VHlwZTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxIiBuYW1lPSJJbnB1dDMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxIiBuYW1lPSJPdXRwdXQzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEiIHR5cGU9InRuczpQb3J0VHlwZTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyIiBuYW1lPSJJbnB1dDMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyIiBuYW1lPSJPdXRwdXQzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIiIHR5cGU9InRuczpQb3J0VHlwZTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzIiBuYW1lPSJJbnB1dDMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzIiBuYW1lPSJPdXRwdXQzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMiIHR5cGU9InRuczpQb3J0VHlwZTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0IiBuYW1lPSJJbnB1dDM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0IiBuYW1lPSJPdXRwdXQzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQiIHR5cGU9InRuczpQb3J0VHlwZTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1IiBuYW1lPSJJbnB1dDM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1IiBuYW1lPSJPdXRwdXQzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUiIHR5cGU9InRuczpQb3J0VHlwZTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2IiBuYW1lPSJJbnB1dDM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2IiBuYW1lPSJPdXRwdXQzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYiIHR5cGU9InRuczpQb3J0VHlwZTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3IiBuYW1lPSJJbnB1dDM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3IiBuYW1lPSJPdXRwdXQzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzciIHR5cGU9InRuczpQb3J0VHlwZTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4IiBuYW1lPSJJbnB1dDM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4IiBuYW1lPSJPdXRwdXQzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgiIHR5cGU9InRuczpQb3J0VHlwZTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5IiBuYW1lPSJJbnB1dDM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5IiBuYW1lPSJPdXRwdXQzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkiIHR5cGU9InRuczpQb3J0VHlwZTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwIiBuYW1lPSJJbnB1dDQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwIiBuYW1lPSJPdXRwdXQ0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAiIHR5cGU9InRuczpQb3J0VHlwZTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxIiBuYW1lPSJJbnB1dDQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxIiBuYW1lPSJPdXRwdXQ0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEiIHR5cGU9InRuczpQb3J0VHlwZTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyIiBuYW1lPSJJbnB1dDQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyIiBuYW1lPSJPdXRwdXQ0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIiIHR5cGU9InRuczpQb3J0VHlwZTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzIiBuYW1lPSJJbnB1dDQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzIiBuYW1lPSJPdXRwdXQ0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMiIHR5cGU9InRuczpQb3J0VHlwZTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0IiBuYW1lPSJJbnB1dDQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0IiBuYW1lPSJPdXRwdXQ0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQiIHR5cGU9InRuczpQb3J0VHlwZTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1IiBuYW1lPSJJbnB1dDQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1IiBuYW1lPSJPdXRwdXQ0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUiIHR5cGU9InRuczpQb3J0VHlwZTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2IiBuYW1lPSJJbnB1dDQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2IiBuYW1lPSJPdXRwdXQ0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYiIHR5cGU9InRuczpQb3J0VHlwZTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3IiBuYW1lPSJJbnB1dDQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3IiBuYW1lPSJPdXRwdXQ0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDciIHR5cGU9InRuczpQb3J0VHlwZTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4IiBuYW1lPSJJbnB1dDQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4IiBuYW1lPSJPdXRwdXQ0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgiIHR5cGU9InRuczpQb3J0VHlwZTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5IiBuYW1lPSJJbnB1dDQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5IiBuYW1lPSJPdXRwdXQ0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkiIHR5cGU9InRuczpQb3J0VHlwZTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwIiBuYW1lPSJJbnB1dDUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwIiBuYW1lPSJPdXRwdXQ1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAiIHR5cGU9InRuczpQb3J0VHlwZTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxIiBuYW1lPSJJbnB1dDUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxIiBuYW1lPSJPdXRwdXQ1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEiIHR5cGU9InRuczpQb3J0VHlwZTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyIiBuYW1lPSJJbnB1dDUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyIiBuYW1lPSJPdXRwdXQ1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIiIHR5cGU9InRuczpQb3J0VHlwZTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzIiBuYW1lPSJJbnB1dDUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzIiBuYW1lPSJPdXRwdXQ1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMiIHR5cGU9InRuczpQb3J0VHlwZTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0IiBuYW1lPSJJbnB1dDU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0IiBuYW1lPSJPdXRwdXQ1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQiIHR5cGU9InRuczpQb3J0VHlwZTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1IiBuYW1lPSJJbnB1dDU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1IiBuYW1lPSJPdXRwdXQ1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUiIHR5cGU9InRuczpQb3J0VHlwZTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2IiBuYW1lPSJJbnB1dDU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2IiBuYW1lPSJPdXRwdXQ1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYiIHR5cGU9InRuczpQb3J0VHlwZTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3IiBuYW1lPSJJbnB1dDU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3IiBuYW1lPSJPdXRwdXQ1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTciIHR5cGU9InRuczpQb3J0VHlwZTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4IiBuYW1lPSJJbnB1dDU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4IiBuYW1lPSJPdXRwdXQ1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgiIHR5cGU9InRuczpQb3J0VHlwZTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5IiBuYW1lPSJJbnB1dDU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5IiBuYW1lPSJPdXRwdXQ1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkiIHR5cGU9InRuczpQb3J0VHlwZTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwIiBuYW1lPSJJbnB1dDYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwIiBuYW1lPSJPdXRwdXQ2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAiIHR5cGU9InRuczpQb3J0VHlwZTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxIiBuYW1lPSJJbnB1dDYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxIiBuYW1lPSJPdXRwdXQ2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjEiIHR5cGU9InRuczpQb3J0VHlwZTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyIiBuYW1lPSJJbnB1dDYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyIiBuYW1lPSJPdXRwdXQ2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIiIHR5cGU9InRuczpQb3J0VHlwZTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzIiBuYW1lPSJJbnB1dDYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzIiBuYW1lPSJPdXRwdXQ2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMiIHR5cGU9InRuczpQb3J0VHlwZTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0IiBuYW1lPSJJbnB1dDY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0IiBuYW1lPSJPdXRwdXQ2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQiIHR5cGU9InRuczpQb3J0VHlwZTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1IiBuYW1lPSJJbnB1dDY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1IiBuYW1lPSJPdXRwdXQ2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUiIHR5cGU9InRuczpQb3J0VHlwZTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2IiBuYW1lPSJJbnB1dDY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2IiBuYW1lPSJPdXRwdXQ2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYiIHR5cGU9InRuczpQb3J0VHlwZTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3IiBuYW1lPSJJbnB1dDY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3IiBuYW1lPSJPdXRwdXQ2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjciIHR5cGU9InRuczpQb3J0VHlwZTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4IiBuYW1lPSJJbnB1dDY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4IiBuYW1lPSJPdXRwdXQ2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgiIHR5cGU9InRuczpQb3J0VHlwZTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5IiBuYW1lPSJJbnB1dDY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5IiBuYW1lPSJPdXRwdXQ2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkiIHR5cGU9InRuczpQb3J0VHlwZTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwIiBuYW1lPSJJbnB1dDcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwIiBuYW1lPSJPdXRwdXQ3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAiIHR5cGU9InRuczpQb3J0VHlwZTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxIiBuYW1lPSJJbnB1dDcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxIiBuYW1lPSJPdXRwdXQ3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEiIHR5cGU9InRuczpQb3J0VHlwZTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyIiBuYW1lPSJJbnB1dDcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyIiBuYW1lPSJPdXRwdXQ3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIiIHR5cGU9InRuczpQb3J0VHlwZTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczIiBuYW1lPSJJbnB1dDczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczIiBuYW1lPSJPdXRwdXQ3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMiIHR5cGU9InRuczpQb3J0VHlwZTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0IiBuYW1lPSJJbnB1dDc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0IiBuYW1lPSJPdXRwdXQ3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQiIHR5cGU9InRuczpQb3J0VHlwZTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1IiBuYW1lPSJJbnB1dDc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1IiBuYW1lPSJPdXRwdXQ3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUiIHR5cGU9InRuczpQb3J0VHlwZTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2IiBuYW1lPSJJbnB1dDc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2IiBuYW1lPSJPdXRwdXQ3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYiIHR5cGU9InRuczpQb3J0VHlwZTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3IiBuYW1lPSJJbnB1dDc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3IiBuYW1lPSJPdXRwdXQ3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzciIHR5cGU9InRuczpQb3J0VHlwZTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4IiBuYW1lPSJJbnB1dDc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4IiBuYW1lPSJPdXRwdXQ3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgiIHR5cGU9InRuczpQb3J0VHlwZTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5IiBuYW1lPSJJbnB1dDc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5IiBuYW1lPSJPdXRwdXQ3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkiIHR5cGU9InRuczpQb3J0VHlwZTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwIiBuYW1lPSJJbnB1dDgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwIiBuYW1lPSJPdXRwdXQ4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAiIHR5cGU9InRuczpQb3J0VHlwZTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxIiBuYW1lPSJJbnB1dDgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxIiBuYW1lPSJPdXRwdXQ4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEiIHR5cGU9InRuczpQb3J0VHlwZTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyIiBuYW1lPSJJbnB1dDgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyIiBuYW1lPSJPdXRwdXQ4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIiIHR5cGU9InRuczpQb3J0VHlwZTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzIiBuYW1lPSJJbnB1dDgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzIiBuYW1lPSJPdXRwdXQ4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMiIHR5cGU9InRuczpQb3J0VHlwZTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0IiBuYW1lPSJJbnB1dDg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0IiBuYW1lPSJPdXRwdXQ4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQiIHR5cGU9InRuczpQb3J0VHlwZTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1IiBuYW1lPSJJbnB1dDg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1IiBuYW1lPSJPdXRwdXQ4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUiIHR5cGU9InRuczpQb3J0VHlwZTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2IiBuYW1lPSJJbnB1dDg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2IiBuYW1lPSJPdXRwdXQ4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYiIHR5cGU9InRuczpQb3J0VHlwZTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3IiBuYW1lPSJJbnB1dDg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3IiBuYW1lPSJPdXRwdXQ4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODciIHR5cGU9InRuczpQb3J0VHlwZTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4IiBuYW1lPSJJbnB1dDg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4IiBuYW1lPSJPdXRwdXQ4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgiIHR5cGU9InRuczpQb3J0VHlwZTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5IiBuYW1lPSJJbnB1dDg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5IiBuYW1lPSJPdXRwdXQ4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkiIHR5cGU9InRuczpQb3J0VHlwZTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwIiBuYW1lPSJJbnB1dDkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwIiBuYW1lPSJPdXRwdXQ5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAiIHR5cGU9InRuczpQb3J0VHlwZTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxIiBuYW1lPSJJbnB1dDkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxIiBuYW1lPSJPdXRwdXQ5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTEiIHR5cGU9InRuczpQb3J0VHlwZTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyIiBuYW1lPSJJbnB1dDkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyIiBuYW1lPSJPdXRwdXQ5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIiIHR5cGU9InRuczpQb3J0VHlwZTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzIiBuYW1lPSJJbnB1dDkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzIiBuYW1lPSJPdXRwdXQ5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMiIHR5cGU9InRuczpQb3J0VHlwZTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0IiBuYW1lPSJJbnB1dDk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0IiBuYW1lPSJPdXRwdXQ5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQiIHR5cGU9InRuczpQb3J0VHlwZTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1IiBuYW1lPSJJbnB1dDk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1IiBuYW1lPSJPdXRwdXQ5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUiIHR5cGU9InRuczpQb3J0VHlwZTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2IiBuYW1lPSJJbnB1dDk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2IiBuYW1lPSJPdXRwdXQ5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYiIHR5cGU9InRuczpQb3J0VHlwZTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3IiBuYW1lPSJJbnB1dDk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3IiBuYW1lPSJPdXRwdXQ5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTciIHR5cGU9InRuczpQb3J0VHlwZTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4IiBuYW1lPSJJbnB1dDk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4IiBuYW1lPSJPdXRwdXQ5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgiIHR5cGU9InRuczpQb3J0VHlwZTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5IiBuYW1lPSJJbnB1dDk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5IiBuYW1lPSJPdXRwdXQ5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkiIHR5cGU9InRuczpQb3J0VHlwZTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDhhMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSJzYW1wbGU2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiBsb2NhdGlvbj0iLi9zYW1wbGU4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0iLlxzYW1wbGUxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMmEyYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIGxvY2F0aW9uPSJzYW1wbGUyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuXHNhbXBsZTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YzQyZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIGxvY2F0aW9uPSJzYW1wbGUxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0iLi9zYW1wbGUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOGRkZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSJzYW1wbGUxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIGxvY2F0aW9uPSIuXHNhbXBsZTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTg5MDUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiBsb2NhdGlvbj0ic2FtcGxlMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgbG9jYXRpb249Ii5cc2FtcGxlMzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDZkZTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSJzYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIGxvY2F0aW9uPSIuXHNhbXBsZTMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg1NzIyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgbG9jYXRpb249InNhbXBsZTk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSIuL3NhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVjZWZiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgbG9jYXRpb249InNhbXBsZTkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuXHNhbXBsZTIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE4YWZlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0ic2FtcGxlOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuXHNhbXBsZTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzIzNGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0ic2FtcGxlNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgbG9jYXRpb249Ii4vc2FtcGxlMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii5cc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGFiZjA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0ic2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249Ii4vc2FtcGxlMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgbG9jYXRpb249Ii5cc2FtcGxlNjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGIzODA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiBsb2NhdGlvbj0ic2FtcGxlNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgbG9jYXRpb249Ii4vc2FtcGxlNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2ODUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249InNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIGxvY2F0aW9uPSIuL3NhbXBsZTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDhlYmI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiBsb2NhdGlvbj0ic2FtcGxlNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii4vc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249Ii5cc2FtcGxlOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWIwMzE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0ic2FtcGxlODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgbG9jYXRpb249Ii4vc2FtcGxlODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLlxzYW1wbGUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJiMDgxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249InNhbXBsZTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249Ii5cc2FtcGxlNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NDEwMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSJzYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0iLlxzYW1wbGU2MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMGMxN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIGxvY2F0aW9uPSJzYW1wbGU4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiBsb2NhdGlvbj0iLi9zYW1wbGU3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMWJhYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIGxvY2F0aW9uPSJzYW1wbGUxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZTk1N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIGxvY2F0aW9uPSJzYW1wbGU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiBsb2NhdGlvbj0iLi9zYW1wbGU1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZTdiNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSJzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiBsb2NhdGlvbj0iLlxzYW1wbGU0OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMjM4OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSJzYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiBsb2NhdGlvbj0iLi9zYW1wbGUxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiBsb2NhdGlvbj0iLlxzYW1wbGUzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNGViZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSJzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuXHNhbXBsZTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmNzM4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249InNhbXBsZTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249Ii4vc2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY4ZWFjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249InNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSIuL3NhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii5cc2FtcGxlMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlN2I4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIGxvY2F0aW9uPSJzYW1wbGUyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiBsb2NhdGlvbj0iLi9zYW1wbGU5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSIuXHNhbXBsZTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGYzOGM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSJzYW1wbGU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIGxvY2F0aW9uPSIuL3NhbXBsZTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIGxvY2F0aW9uPSIuXHNhbXBsZTc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc3ZDFjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgbG9jYXRpb249InNhbXBsZTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSIuL3NhbXBsZTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSIuXHNhbXBsZTY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4OTdmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249InNhbXBsZTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIGxvY2F0aW9uPSIuL3NhbXBsZTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuXHNhbXBsZTY4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyMWZjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgbG9jYXRpb249InNhbXBsZTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuXHNhbXBsZTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4NjdkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249InNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii4vc2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiBsb2NhdGlvbj0iLlxzYW1wbGU3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZGVhNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSJzYW1wbGU1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuXHNhbXBsZTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2E3NjkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSJzYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSIuL3NhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIGxvY2F0aW9uPSIuXHNhbXBsZTc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlN2E4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgbG9jYXRpb249InNhbXBsZTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249Ii4vc2FtcGxlOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiBsb2NhdGlvbj0iLlxzYW1wbGU1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzM0OWVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0ic2FtcGxlMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249Ii5cc2FtcGxlMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzFlYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSJzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0iLlxzYW1wbGUxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNjI4YmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249InNhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLi9zYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuXHNhbXBsZTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIzM2IzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgbG9jYXRpb249InNhbXBsZTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuL3NhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2YzMyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgbG9jYXRpb249InNhbXBsZTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSIuL3NhbXBsZTk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSIuXHNhbXBsZTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3MzJmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuL3NhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuXHNhbXBsZTcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FlY2E2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249InNhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIGxvY2F0aW9uPSIuL3NhbXBsZTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIGxvY2F0aW9uPSIuXHNhbXBsZTg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg2Nzk0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249InNhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2NGRhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249InNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSIuL3NhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U2NzNiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgbG9jYXRpb249InNhbXBsZTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIGxvY2F0aW9uPSIuXHNhbXBsZTUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EwYzczNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249InNhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii4vc2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiBsb2NhdGlvbj0iLlxzYW1wbGU5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWE2MGE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0ic2FtcGxlNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii4vc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgbG9jYXRpb249Ii5cc2FtcGxlMzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNTE2MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSJzYW1wbGU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiBsb2NhdGlvbj0iLlxzYW1wbGU4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YWZjOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSJzYW1wbGU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiBsb2NhdGlvbj0iLi9zYW1wbGUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1OTI3ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIGxvY2F0aW9uPSJzYW1wbGU3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YTkzYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSJzYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiBsb2NhdGlvbj0iLlxzYW1wbGU1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmY2RiOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIGxvY2F0aW9uPSJzYW1wbGU4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiBsb2NhdGlvbj0iLlxzYW1wbGU1My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MzkyNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIGxvY2F0aW9uPSJzYW1wbGU3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiBsb2NhdGlvbj0iLi9zYW1wbGU3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuXHNhbXBsZTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWU5YzFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiBsb2NhdGlvbj0ic2FtcGxlMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgbG9jYXRpb249Ii4vc2FtcGxlNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmYmQ3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgbG9jYXRpb249InNhbXBsZTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMxN2E0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249InNhbXBsZTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249Ii4vc2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiBsb2NhdGlvbj0iLlxzYW1wbGU3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZDRhN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIGxvY2F0aW9uPSJzYW1wbGU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuL3NhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgbG9jYXRpb249Ii5cc2FtcGxlNjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3YzJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgbG9jYXRpb249InNhbXBsZTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGY5MjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiBsb2NhdGlvbj0ic2FtcGxlOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgbG9jYXRpb249Ii5cc2FtcGxlNDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDhhODVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiBsb2NhdGlvbj0ic2FtcGxlMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249Ii4vc2FtcGxlMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLlxzYW1wbGU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JkZjRhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgbG9jYXRpb249InNhbXBsZTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIGxvY2F0aW9uPSIuXHNhbXBsZTIxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQxZjI3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgbG9jYXRpb249InNhbXBsZTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249Ii4vc2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiBsb2NhdGlvbj0iLlxzYW1wbGUxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYTIyNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIGxvY2F0aW9uPSJzYW1wbGUzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiBsb2NhdGlvbj0iLi9zYW1wbGU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiBsb2NhdGlvbj0iLlxzYW1wbGUyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYTA5N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249InNhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249Ii4vc2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgbG9jYXRpb249Ii5cc2FtcGxlODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjYxMzJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0ic2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgbG9jYXRpb249Ii4vc2FtcGxlMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249Ii5cc2FtcGxlMTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yzk4MDY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSJzYW1wbGU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSIuL3NhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuXHNhbXBsZTgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA4NjIxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0ic2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0iLi9zYW1wbGU5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuXHNhbXBsZTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDg3ZGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiBsb2NhdGlvbj0ic2FtcGxlMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249Ii5cc2FtcGxlNzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNhY2U0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249InNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSIuXHNhbXBsZTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGY5Yzc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0ic2FtcGxlMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249Ii4vc2FtcGxlMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgbG9jYXRpb249Ii5cc2FtcGxlNjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzRiNmU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiBsb2NhdGlvbj0ic2FtcGxlMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgbG9jYXRpb249Ii4vc2FtcGxlNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjEzMDAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiBsb2NhdGlvbj0ic2FtcGxlOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLi9zYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIGxvY2F0aW9uPSIuXHNhbXBsZTU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM4ZjY2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgbG9jYXRpb249InNhbXBsZTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIGxvY2F0aW9uPSIuL3NhbXBsZTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIGxvY2F0aW9uPSIuXHNhbXBsZTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRiOTk5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgbG9jYXRpb249InNhbXBsZTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIGxvY2F0aW9uPSIuL3NhbXBsZTUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4YzI3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249InNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii4vc2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0iLlxzYW1wbGUxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YjYzZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSJzYW1wbGUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiBsb2NhdGlvbj0iLi9zYW1wbGU4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZmFlM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249InNhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii4vc2FtcGxlODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjBjNDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0ic2FtcGxlNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249Ii4vc2FtcGxlODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgbG9jYXRpb249Ii5cc2FtcGxlNTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGI2ZWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSJzYW1wbGU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIGxvY2F0aW9uPSIuL3NhbXBsZTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMjU2NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIGxvY2F0aW9uPSJzYW1wbGU0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiBsb2NhdGlvbj0iLlxzYW1wbGU4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc2NzgwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0ic2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiBsb2NhdGlvbj0iLi9zYW1wbGU5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLlxzYW1wbGU2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOTk4ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIGxvY2F0aW9uPSJzYW1wbGU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuL3NhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249Ii5cc2FtcGxlNjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjhhZDUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiBsb2NhdGlvbj0ic2FtcGxlOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiBsb2NhdGlvbj0iLi9zYW1wbGUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIGxvY2F0aW9uPSIuXHNhbXBsZTkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc5Y2YyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgbG9jYXRpb249InNhbXBsZTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuL3NhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSIuXHNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IwMjM5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249InNhbXBsZTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSIuXHNhbXBsZTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkyYThkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249InNhbXBsZTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuL3NhbXBsZTgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIGxvY2F0aW9uPSIuXHNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YzOWM3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249InNhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuL3NhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIGxvY2F0aW9uPSIuXHNhbXBsZTg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg0YjNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249InNhbXBsZTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSIuXHNhbXBsZTEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI3ZDJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249InNhbXBsZTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii4vc2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YjFjNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSJzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLi9zYW1wbGU0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiBsb2NhdGlvbj0iLlxzYW1wbGU0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmM2MmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiBsb2NhdGlvbj0ic2FtcGxlMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii4vc2FtcGxlODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzdjZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSJzYW1wbGU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiBsb2NhdGlvbj0iLi9zYW1wbGU1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNmE2MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIGxvY2F0aW9uPSJzYW1wbGU5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0iLi9zYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiBsb2NhdGlvbj0iLlxzYW1wbGU1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MWYwMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSJzYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiBsb2NhdGlvbj0iLlxzYW1wbGUyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMWIyOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIGxvY2F0aW9uPSJzYW1wbGU1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiBsb2NhdGlvbj0iLlxzYW1wbGU5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMmZlMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSJzYW1wbGU0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0iLi9zYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0iLlxzYW1wbGU2MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YzUwN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSJzYW1wbGU1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YTgzZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIGxvY2F0aW9uPSJzYW1wbGUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiBsb2NhdGlvbj0iLlxzYW1wbGUzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNTZhYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSJzYW1wbGU1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0iLlxzYW1wbGU3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlY2JlNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIGxvY2F0aW9uPSJzYW1wbGUxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiBsb2NhdGlvbj0iLi9zYW1wbGU2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYjQzODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSJzYW1wbGU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0iLi9zYW1wbGUyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuXHNhbXBsZTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwOWZlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjNlZWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzliMzlmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODNhZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZGZiMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY3NzE1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzU3YTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMzgwZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY2YjExZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWE2OTI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMDFhOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRkMTg1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwNGYzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMWIxMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI5YjcwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjY0ZDY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYWRiZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk2Yjc3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTU2MzA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDNhZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE1MzA4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjUyODFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNDQ2NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTFjYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzZlMzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ODMyNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxZjEzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2VkMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzY2OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc1NTc4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWNkMWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZTQxZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlYzBlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTEwNWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZThjMGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEwODllNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTE3MzVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NzA0MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5YjQyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTcwNTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMzQ5NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0MDdiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGMxMGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMTQzNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4ZmY1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxODU2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODgxMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVlMmE1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2UyNWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNTEyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQwZjc4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGFmYzQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5M2IzMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVkMDc3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWU1MWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1OGI1NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MjJkMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzY2MDA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWE0ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5MGE1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDc3MmQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNTRlOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2ODJjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTQwMDQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YjllNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWViMzA5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTQzMTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDYwYTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5NTAyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM3MGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjN2YzNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkNmRhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjAzNWQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYTVmOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThmNWJlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTFmNjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmOTdkOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4NzNiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3MWIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTgyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljNmJlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWFkZDYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZWM5ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNlZDYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQ5MjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMWQwN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3YjM1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzNkYzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZjIyZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmY2RhMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjc4NTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMGU0MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0MzhhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2VkZTI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Y2MxNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY5YTdkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDM2NDgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyY2QzOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2NDZkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzRiYTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZDQxYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTEyZGMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliMzI3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZDE0NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4OGZmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJkOGQyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiOWI3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTEzNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2Y0NWU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNmMxMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc1MGIxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTEwY2FiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTY4N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFjMDVhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGJiMGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTY1Y2IwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGU2YmNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNWVhYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MGY0YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwMDIyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNmI4ODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRlYTBiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODMwM2ZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYjU3NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2OGFhZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDcyMjgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTgxNjcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMjZhMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxYTRjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjYxYWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NTIxZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllZGJiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDEwZDQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNTYxOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNTE2N2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUxNWQyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NzNjY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM4MGJlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhZjdhNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBjMDY0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU0M2IwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGM5ZjM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNTA4NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDVkYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI4NjFmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDRiNTRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc3ODJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OWE1ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMwNmE0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDZjYTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NWQyMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OTlhMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzOWIzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGE3ZGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MDA2NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FmZjQ5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2NS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTRiMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYzAzMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE3Y2QzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzJhMjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ODIyMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg4YzJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGRhODI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyM2YzY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMzMTA5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2UyMWQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTczLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMGFkMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiZjgxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOGI1MzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGRlOGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2M2MTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMmZkMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNDMwOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU5MzRiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFjMGUzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTcxODE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NzUyNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk2MDY5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWNmZDY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZTFkNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U3YjAwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTcwMmZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODJjM2VkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NDAxZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc0YmY0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDE1Nzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMzk0ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0MDRkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTBlMDY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNDQxYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMWFjMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWY4OGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjBhOWIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MjE3MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGEyMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdmYzIyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IxMDMyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWE5NDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmU0MTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYjM0MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzllNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDllMzNlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjNmVhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGNkYjk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOTFlYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQxNzkwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDgwYjgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZmU4M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkYzMzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTFlYWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmU1OWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YmNmMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZGU0MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTZiOWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjRhNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhZGNkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBiNGQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiZGExMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzIwMmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYzhiMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgwYzEyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTFkMzgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYjEwODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxNzdmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjdhZmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MzUwN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllYmQyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzg3NzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NWU4NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVjODRhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDI3NzRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MjQzOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZTZiMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI3ODYyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YWIyYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTFiMjcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwN2FkYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5ODA1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODQ4Nzc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZDMxODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI4OTlmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg0NzAzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWQyOGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MDg5YWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA4YzA1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzFjMDRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MzNmOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMwMWQ5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWNiNGY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGY4MDYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNzVmYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiOGFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjhiM2I4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYmU1MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJhZGFhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGE3M2YzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGEwOGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1YzdmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE5ODBiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWZjOTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiY2FhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZiZDRiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzUzODkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMzU0ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU1MWUyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTE2MTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmODUwMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjYzYyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGVlOTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZjBmMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU2MWM4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzlkYjg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTQ3NjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTlhNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVkNGRiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDg0N2RkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZjFkZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxZjVjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWNlYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmE5NDA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MTRjNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOWUxNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxNDc3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWRhZWNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjdjNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhlMmU3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjQzNWUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MGMzYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMWI5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNlMDYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWJiNGRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGM5MTdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YWQ0MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmZGU3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY1MjM4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDk5MzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNzA2OGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUxODVhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmE1ZDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWQxNTMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMEtCLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEwZGJjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwS0Iud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRGVmaW5pdGlvbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMCIgbmFtZT0iSW5wdXQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTAiIG5hbWU9Ik91dHB1dDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzAiIHR5cGU9InRuczpQb3J0VHlwZTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MCIgYmluZGluZz0idG5zOkJpbmRpbmcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEiIG5hbWU9IklucHV0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxIiBuYW1lPSJPdXRwdXQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyIiBuYW1lPSJJbnB1dDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMiIgbmFtZT0iT3V0cHV0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMiIgdHlwZT0idG5zOlBvcnRUeXBlMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMyIgbmFtZT0iSW5wdXQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMiIG5hbWU9Ik91dHB1dDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMiIHR5cGU9InRuczpQb3J0VHlwZTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MyIgYmluZGluZz0idG5zOkJpbmRpbmczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQiIG5hbWU9IklucHV0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0IiBuYW1lPSJPdXRwdXQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1IiBuYW1lPSJJbnB1dDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNSIgbmFtZT0iT3V0cHV0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNSIgdHlwZT0idG5zOlBvcnRUeXBlNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNiIgbmFtZT0iSW5wdXQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYiIG5hbWU9Ik91dHB1dDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYiIHR5cGU9InRuczpQb3J0VHlwZTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NiIgYmluZGluZz0idG5zOkJpbmRpbmc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTciIG5hbWU9IklucHV0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3IiBuYW1lPSJPdXRwdXQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDciIGJpbmRpbmc9InRuczpCaW5kaW5nNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4IiBuYW1lPSJJbnB1dDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOCIgbmFtZT0iT3V0cHV0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOCIgdHlwZT0idG5zOlBvcnRUeXBlOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOSIgbmFtZT0iSW5wdXQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkiIG5hbWU9Ik91dHB1dDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkiIHR5cGU9InRuczpQb3J0VHlwZTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OSIgYmluZGluZz0idG5zOkJpbmRpbmc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzM2OThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249InNhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0iLi9zYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249Ii5cc2FtcGxlNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWMzMjk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249InNhbXBsZTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLi9zYW1wbGU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii5cc2FtcGxlOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWM5MjcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249InNhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0iLi9zYW1wbGU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii5cc2FtcGxlNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjIxZThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249InNhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0iLi9zYW1wbGU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii5cc2FtcGxlNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmRjMWM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249InNhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiBsb2NhdGlvbj0iLi9zYW1wbGUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii5cc2FtcGxlNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGFlMzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249InNhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLi9zYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii5cc2FtcGxlOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWNiZTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgbG9jYXRpb249InNhbXBsZTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLi9zYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii5cc2FtcGxlMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODMxZmYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249InNhbXBsZTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLi9zYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgbG9jYXRpb249Ii5cc2FtcGxlNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGUyZTg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249InNhbXBsZTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0iLi9zYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgbG9jYXRpb249Ii5cc2FtcGxlNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmE4ZjcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249InNhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLi9zYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgbG9jYXRpb249Ii5cc2FtcGxlMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDA5ZmU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmM2VlYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwNGYzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODkxY2M2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOGMwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxODU2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjIyZDMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjBhNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3MWIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNkYTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk2YWM5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNjBjZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNGFmYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2FlMWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRhZWU1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQwMjYzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyNjE1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNzVhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NTlmYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNGM1YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNzI4MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDdhNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDAxYzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA0ZTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRiYjU2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmOGVmZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMjgxYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOTcyNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGNiZjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDZjZjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmRlZTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yjk1OTBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkZWQ0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjJiNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMmQ1YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTFhZGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJmMmNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk2ZDIzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwY2Q0ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMjNjM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZTI5NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNzAxN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYmE3ZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMWM0MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1N2FjOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYWYzMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NDBmM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YTcxYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOTZjNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWRhZGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk2MmZiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OTRhNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExZjNlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU1NGIwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU0M2U3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJjZTVjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM3ODFjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxNTAzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTczLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEwNjczNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FkNTY5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTczLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmM2MyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMzU2YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZGJmOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MDQ0YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYjk5OTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhY2IxZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NGM0MjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyOGIxYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDI3OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YmMyZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2ZmNjkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTc4OGFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTc3NDg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NkOGZkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBkMTM2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNiZWFhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIyZTcxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0Yjk1N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YmIxMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDNhOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjk1NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzFjODM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWE3ZmM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGUyMDZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjVhZGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcyOTJkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2ZGEwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZWVkNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNDcwZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MTQ4YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YzRmNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NThlYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjE1NjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI0NDUzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiN2Q3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTczLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU0ZGM3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NTA5YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzA4N2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTNjM2JhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTcxMWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMzMDg5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZGM1MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzY2Y1YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjN2ExYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYThmOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YWM4NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NTA2YjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNmUwZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MzA0NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGQ3NTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGY5YjQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI5MzI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEzNThiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAyZWY4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkOGMzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczNzNlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNzdhNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNzkyNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTc1ZGIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkYWQzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMUtCLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYTdjOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xS0Iud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlIiBuYW1lPSJJbnB1dCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UiIG5hbWU9Ik91dHB1dCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nIiB0eXBlPSJ0bnM6UG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0IiBiaW5kaW5nPSJ0bnM6QmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFNQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xTUIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2YmM0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFNQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzEwMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkRlZmluaXRpb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTAiIG5hbWU9IklucHV0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UwIiBuYW1lPSJPdXRwdXQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24wIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxIiBuYW1lPSJJbnB1dDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMSIgbmFtZT0iT3V0cHV0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMSIgdHlwZT0idG5zOlBvcnRUeXBlMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMiIgbmFtZT0iSW5wdXQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIiIG5hbWU9Ik91dHB1dDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIiIHR5cGU9InRuczpQb3J0VHlwZTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MiIgYmluZGluZz0idG5zOkJpbmRpbmcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMiIG5hbWU9IklucHV0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzIiBuYW1lPSJPdXRwdXQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0IiBuYW1lPSJJbnB1dDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNCIgbmFtZT0iT3V0cHV0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNCIgdHlwZT0idG5zOlBvcnRUeXBlNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNSIgbmFtZT0iSW5wdXQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUiIG5hbWU9Ik91dHB1dDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUiIHR5cGU9InRuczpQb3J0VHlwZTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NSIgYmluZGluZz0idG5zOkJpbmRpbmc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYiIG5hbWU9IklucHV0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2IiBuYW1lPSJPdXRwdXQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3IiBuYW1lPSJJbnB1dDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNyIgbmFtZT0iT3V0cHV0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNyIgdHlwZT0idG5zOlBvcnRUeXBlNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOCIgbmFtZT0iSW5wdXQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgiIG5hbWU9Ik91dHB1dDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgiIHR5cGU9InRuczpQb3J0VHlwZTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OCIgYmluZGluZz0idG5zOkJpbmRpbmc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkiIG5hbWU9IklucHV0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5IiBuYW1lPSJPdXRwdXQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMCIgbmFtZT0iSW5wdXQxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMCIgbmFtZT0iT3V0cHV0MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMSIgbmFtZT0iSW5wdXQxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMSIgbmFtZT0iT3V0cHV0MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMiIgbmFtZT0iSW5wdXQxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMiIgbmFtZT0iT3V0cHV0MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMyIgbmFtZT0iSW5wdXQxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMyIgbmFtZT0iT3V0cHV0MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNCIgbmFtZT0iSW5wdXQxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNCIgbmFtZT0iT3V0cHV0MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNCIgYmluZGluZz0idG5zOkJpbmRpbmcxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNSIgbmFtZT0iSW5wdXQxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNSIgbmFtZT0iT3V0cHV0MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNSIgYmluZGluZz0idG5zOkJpbmRpbmcxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNiIgbmFtZT0iSW5wdXQxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNiIgbmFtZT0iT3V0cHV0MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNiIgYmluZGluZz0idG5zOkJpbmRpbmcxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNyIgbmFtZT0iSW5wdXQxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNyIgbmFtZT0iT3V0cHV0MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNyIgYmluZGluZz0idG5zOkJpbmRpbmcxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOCIgbmFtZT0iSW5wdXQxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOCIgbmFtZT0iT3V0cHV0MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOCIgYmluZGluZz0idG5zOkJpbmRpbmcxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOSIgbmFtZT0iSW5wdXQxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOSIgbmFtZT0iT3V0cHV0MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOSIgYmluZGluZz0idG5zOkJpbmRpbmcxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMCIgbmFtZT0iSW5wdXQyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMCIgbmFtZT0iT3V0cHV0MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMSIgbmFtZT0iSW5wdXQyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMSIgbmFtZT0iT3V0cHV0MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMiIgbmFtZT0iSW5wdXQyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMiIgbmFtZT0iT3V0cHV0MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMyIgbmFtZT0iSW5wdXQyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMyIgbmFtZT0iT3V0cHV0MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNCIgbmFtZT0iSW5wdXQyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNCIgbmFtZT0iT3V0cHV0MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNCIgYmluZGluZz0idG5zOkJpbmRpbmcyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNSIgbmFtZT0iSW5wdXQyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNSIgbmFtZT0iT3V0cHV0MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNSIgYmluZGluZz0idG5zOkJpbmRpbmcyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNiIgbmFtZT0iSW5wdXQyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNiIgbmFtZT0iT3V0cHV0MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNiIgYmluZGluZz0idG5zOkJpbmRpbmcyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNyIgbmFtZT0iSW5wdXQyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNyIgbmFtZT0iT3V0cHV0MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNyIgYmluZGluZz0idG5zOkJpbmRpbmcyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOCIgbmFtZT0iSW5wdXQyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOCIgbmFtZT0iT3V0cHV0MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOCIgYmluZGluZz0idG5zOkJpbmRpbmcyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOSIgbmFtZT0iSW5wdXQyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOSIgbmFtZT0iT3V0cHV0MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOSIgYmluZGluZz0idG5zOkJpbmRpbmcyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMCIgbmFtZT0iSW5wdXQzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMCIgbmFtZT0iT3V0cHV0MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMCIgYmluZGluZz0idG5zOkJpbmRpbmczMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMSIgbmFtZT0iSW5wdXQzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMSIgbmFtZT0iT3V0cHV0MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMSIgYmluZGluZz0idG5zOkJpbmRpbmczMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMiIgbmFtZT0iSW5wdXQzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMiIgbmFtZT0iT3V0cHV0MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMiIgYmluZGluZz0idG5zOkJpbmRpbmczMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMyIgbmFtZT0iSW5wdXQzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMyIgbmFtZT0iT3V0cHV0MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMyIgYmluZGluZz0idG5zOkJpbmRpbmczMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNCIgbmFtZT0iSW5wdXQzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNCIgbmFtZT0iT3V0cHV0MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNCIgYmluZGluZz0idG5zOkJpbmRpbmczNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNSIgbmFtZT0iSW5wdXQzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNSIgbmFtZT0iT3V0cHV0MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNSIgYmluZGluZz0idG5zOkJpbmRpbmczNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNiIgbmFtZT0iSW5wdXQzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNiIgbmFtZT0iT3V0cHV0MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNiIgYmluZGluZz0idG5zOkJpbmRpbmczNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNyIgbmFtZT0iSW5wdXQzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNyIgbmFtZT0iT3V0cHV0MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNyIgYmluZGluZz0idG5zOkJpbmRpbmczNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOCIgbmFtZT0iSW5wdXQzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOCIgbmFtZT0iT3V0cHV0MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOCIgYmluZGluZz0idG5zOkJpbmRpbmczOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOSIgbmFtZT0iSW5wdXQzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOSIgbmFtZT0iT3V0cHV0MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOSIgYmluZGluZz0idG5zOkJpbmRpbmczOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MCIgbmFtZT0iSW5wdXQ0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MCIgbmFtZT0iT3V0cHV0NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MCIgYmluZGluZz0idG5zOkJpbmRpbmc0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MSIgbmFtZT0iSW5wdXQ0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MSIgbmFtZT0iT3V0cHV0NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MSIgYmluZGluZz0idG5zOkJpbmRpbmc0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MiIgbmFtZT0iSW5wdXQ0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MiIgbmFtZT0iT3V0cHV0NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MiIgYmluZGluZz0idG5zOkJpbmRpbmc0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MyIgbmFtZT0iSW5wdXQ0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MyIgbmFtZT0iT3V0cHV0NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MyIgYmluZGluZz0idG5zOkJpbmRpbmc0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NCIgbmFtZT0iSW5wdXQ0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NCIgbmFtZT0iT3V0cHV0NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NSIgbmFtZT0iSW5wdXQ0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NSIgbmFtZT0iT3V0cHV0NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NiIgbmFtZT0iSW5wdXQ0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NiIgbmFtZT0iT3V0cHV0NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NyIgbmFtZT0iSW5wdXQ0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NyIgbmFtZT0iT3V0cHV0NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OCIgbmFtZT0iSW5wdXQ0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OCIgbmFtZT0iT3V0cHV0NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OCIgYmluZGluZz0idG5zOkJpbmRpbmc0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OSIgbmFtZT0iSW5wdXQ0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OSIgbmFtZT0iT3V0cHV0NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OSIgYmluZGluZz0idG5zOkJpbmRpbmc0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MCIgbmFtZT0iSW5wdXQ1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MCIgbmFtZT0iT3V0cHV0NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MCIgYmluZGluZz0idG5zOkJpbmRpbmc1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MSIgbmFtZT0iSW5wdXQ1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MSIgbmFtZT0iT3V0cHV0NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MSIgYmluZGluZz0idG5zOkJpbmRpbmc1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MiIgbmFtZT0iSW5wdXQ1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MiIgbmFtZT0iT3V0cHV0NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MiIgYmluZGluZz0idG5zOkJpbmRpbmc1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MyIgbmFtZT0iSW5wdXQ1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MyIgbmFtZT0iT3V0cHV0NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MyIgYmluZGluZz0idG5zOkJpbmRpbmc1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NCIgbmFtZT0iSW5wdXQ1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NCIgbmFtZT0iT3V0cHV0NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NSIgbmFtZT0iSW5wdXQ1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NSIgbmFtZT0iT3V0cHV0NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NiIgbmFtZT0iSW5wdXQ1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NiIgbmFtZT0iT3V0cHV0NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NyIgbmFtZT0iSW5wdXQ1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NyIgbmFtZT0iT3V0cHV0NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OCIgbmFtZT0iSW5wdXQ1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OCIgbmFtZT0iT3V0cHV0NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OCIgYmluZGluZz0idG5zOkJpbmRpbmc1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OSIgbmFtZT0iSW5wdXQ1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OSIgbmFtZT0iT3V0cHV0NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OSIgYmluZGluZz0idG5zOkJpbmRpbmc1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MCIgbmFtZT0iSW5wdXQ2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MCIgbmFtZT0iT3V0cHV0NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MCIgYmluZGluZz0idG5zOkJpbmRpbmc2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MSIgbmFtZT0iSW5wdXQ2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MSIgbmFtZT0iT3V0cHV0NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MSIgYmluZGluZz0idG5zOkJpbmRpbmc2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MiIgbmFtZT0iSW5wdXQ2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MiIgbmFtZT0iT3V0cHV0NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MiIgYmluZGluZz0idG5zOkJpbmRpbmc2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MyIgbmFtZT0iSW5wdXQ2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MyIgbmFtZT0iT3V0cHV0NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MyIgYmluZGluZz0idG5zOkJpbmRpbmc2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NCIgbmFtZT0iSW5wdXQ2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NCIgbmFtZT0iT3V0cHV0NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NSIgbmFtZT0iSW5wdXQ2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NSIgbmFtZT0iT3V0cHV0NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NiIgbmFtZT0iSW5wdXQ2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NiIgbmFtZT0iT3V0cHV0NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NyIgbmFtZT0iSW5wdXQ2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NyIgbmFtZT0iT3V0cHV0NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OCIgbmFtZT0iSW5wdXQ2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OCIgbmFtZT0iT3V0cHV0NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OCIgYmluZGluZz0idG5zOkJpbmRpbmc2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OSIgbmFtZT0iSW5wdXQ2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OSIgbmFtZT0iT3V0cHV0NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OSIgYmluZGluZz0idG5zOkJpbmRpbmc2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MCIgbmFtZT0iSW5wdXQ3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MCIgbmFtZT0iT3V0cHV0NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MCIgYmluZGluZz0idG5zOkJpbmRpbmc3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MSIgbmFtZT0iSW5wdXQ3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MSIgbmFtZT0iT3V0cHV0NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MSIgYmluZGluZz0idG5zOkJpbmRpbmc3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MiIgbmFtZT0iSW5wdXQ3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MiIgbmFtZT0iT3V0cHV0NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MiIgYmluZGluZz0idG5zOkJpbmRpbmc3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MyIgbmFtZT0iSW5wdXQ3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MyIgbmFtZT0iT3V0cHV0NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MyIgYmluZGluZz0idG5zOkJpbmRpbmc3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NCIgbmFtZT0iSW5wdXQ3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NCIgbmFtZT0iT3V0cHV0NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NSIgbmFtZT0iSW5wdXQ3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NSIgbmFtZT0iT3V0cHV0NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NiIgbmFtZT0iSW5wdXQ3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NiIgbmFtZT0iT3V0cHV0NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NyIgbmFtZT0iSW5wdXQ3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NyIgbmFtZT0iT3V0cHV0NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OCIgbmFtZT0iSW5wdXQ3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OCIgbmFtZT0iT3V0cHV0NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OCIgYmluZGluZz0idG5zOkJpbmRpbmc3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OSIgbmFtZT0iSW5wdXQ3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OSIgbmFtZT0iT3V0cHV0NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OSIgYmluZGluZz0idG5zOkJpbmRpbmc3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MCIgbmFtZT0iSW5wdXQ4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MCIgbmFtZT0iT3V0cHV0ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MCIgYmluZGluZz0idG5zOkJpbmRpbmc4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MSIgbmFtZT0iSW5wdXQ4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MSIgbmFtZT0iT3V0cHV0ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MSIgYmluZGluZz0idG5zOkJpbmRpbmc4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MiIgbmFtZT0iSW5wdXQ4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MiIgbmFtZT0iT3V0cHV0ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MiIgYmluZGluZz0idG5zOkJpbmRpbmc4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MyIgbmFtZT0iSW5wdXQ4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MyIgbmFtZT0iT3V0cHV0ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MyIgYmluZGluZz0idG5zOkJpbmRpbmc4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NCIgbmFtZT0iSW5wdXQ4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NCIgbmFtZT0iT3V0cHV0ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NSIgbmFtZT0iSW5wdXQ4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NSIgbmFtZT0iT3V0cHV0ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NiIgbmFtZT0iSW5wdXQ4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NiIgbmFtZT0iT3V0cHV0ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NyIgbmFtZT0iSW5wdXQ4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NyIgbmFtZT0iT3V0cHV0ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OCIgbmFtZT0iSW5wdXQ4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OCIgbmFtZT0iT3V0cHV0ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OCIgYmluZGluZz0idG5zOkJpbmRpbmc4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OSIgbmFtZT0iSW5wdXQ4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OSIgbmFtZT0iT3V0cHV0ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OSIgYmluZGluZz0idG5zOkJpbmRpbmc4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MCIgbmFtZT0iSW5wdXQ5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MCIgbmFtZT0iT3V0cHV0OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MCIgYmluZGluZz0idG5zOkJpbmRpbmc5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MSIgbmFtZT0iSW5wdXQ5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MSIgbmFtZT0iT3V0cHV0OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MSIgYmluZGluZz0idG5zOkJpbmRpbmc5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MiIgbmFtZT0iSW5wdXQ5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MiIgbmFtZT0iT3V0cHV0OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MiIgYmluZGluZz0idG5zOkJpbmRpbmc5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MyIgbmFtZT0iSW5wdXQ5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MyIgbmFtZT0iT3V0cHV0OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MyIgYmluZGluZz0idG5zOkJpbmRpbmc5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NCIgbmFtZT0iSW5wdXQ5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NCIgbmFtZT0iT3V0cHV0OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NSIgbmFtZT0iSW5wdXQ5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NSIgbmFtZT0iT3V0cHV0OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NiIgbmFtZT0iSW5wdXQ5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NiIgbmFtZT0iT3V0cHV0OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NyIgbmFtZT0iSW5wdXQ5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NyIgbmFtZT0iT3V0cHV0OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OCIgbmFtZT0iSW5wdXQ5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OCIgbmFtZT0iT3V0cHV0OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OCIgYmluZGluZz0idG5zOkJpbmRpbmc5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OSIgbmFtZT0iSW5wdXQ5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OSIgbmFtZT0iT3V0cHV0OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OSIgYmluZGluZz0idG5zOkJpbmRpbmc5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDAiIG5hbWU9IklucHV0MTAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMCIgbmFtZT0iT3V0cHV0MTAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDAiIHR5cGU9InRuczpQb3J0VHlwZTEwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMSIgbmFtZT0iSW5wdXQxMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAxIiBuYW1lPSJPdXRwdXQxMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMSIgdHlwZT0idG5zOlBvcnRUeXBlMTAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAyIiBuYW1lPSJJbnB1dDEwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDIiIG5hbWU9Ik91dHB1dDEwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDMiIG5hbWU9IklucHV0MTAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMyIgbmFtZT0iT3V0cHV0MTAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDMiIHR5cGU9InRuczpQb3J0VHlwZTEwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNCIgbmFtZT0iSW5wdXQxMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA0IiBuYW1lPSJPdXRwdXQxMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNCIgdHlwZT0idG5zOlBvcnRUeXBlMTA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA1IiBuYW1lPSJJbnB1dDEwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDUiIG5hbWU9Ik91dHB1dDEwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDYiIG5hbWU9IklucHV0MTA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNiIgbmFtZT0iT3V0cHV0MTA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDYiIHR5cGU9InRuczpQb3J0VHlwZTEwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNyIgbmFtZT0iSW5wdXQxMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA3IiBuYW1lPSJPdXRwdXQxMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNyIgdHlwZT0idG5zOlBvcnRUeXBlMTA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA4IiBuYW1lPSJJbnB1dDEwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDgiIG5hbWU9Ik91dHB1dDEwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDkiIG5hbWU9IklucHV0MTA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwOSIgbmFtZT0iT3V0cHV0MTA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDkiIHR5cGU9InRuczpQb3J0VHlwZTEwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMCIgbmFtZT0iSW5wdXQxMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEwIiBuYW1lPSJPdXRwdXQxMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMCIgdHlwZT0idG5zOlBvcnRUeXBlMTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTExIiBuYW1lPSJJbnB1dDExMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTEiIG5hbWU9Ik91dHB1dDExMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTIiIG5hbWU9IklucHV0MTEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMiIgbmFtZT0iT3V0cHV0MTEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTIiIHR5cGU9InRuczpQb3J0VHlwZTExMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMyIgbmFtZT0iSW5wdXQxMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEzIiBuYW1lPSJPdXRwdXQxMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMyIgdHlwZT0idG5zOlBvcnRUeXBlMTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE0IiBuYW1lPSJJbnB1dDExNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTQiIG5hbWU9Ik91dHB1dDExNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTUiIG5hbWU9IklucHV0MTE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNSIgbmFtZT0iT3V0cHV0MTE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTUiIHR5cGU9InRuczpQb3J0VHlwZTExNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNiIgbmFtZT0iSW5wdXQxMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE2IiBuYW1lPSJPdXRwdXQxMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNiIgdHlwZT0idG5zOlBvcnRUeXBlMTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE3IiBuYW1lPSJJbnB1dDExNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTciIG5hbWU9Ik91dHB1dDExNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTgiIG5hbWU9IklucHV0MTE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExOCIgbmFtZT0iT3V0cHV0MTE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTgiIHR5cGU9InRuczpQb3J0VHlwZTExOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExOSIgbmFtZT0iSW5wdXQxMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE5IiBuYW1lPSJPdXRwdXQxMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExOSIgdHlwZT0idG5zOlBvcnRUeXBlMTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIwIiBuYW1lPSJJbnB1dDEyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjAiIG5hbWU9Ik91dHB1dDEyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjEiIG5hbWU9IklucHV0MTIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMSIgbmFtZT0iT3V0cHV0MTIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjEiIHR5cGU9InRuczpQb3J0VHlwZTEyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMiIgbmFtZT0iSW5wdXQxMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIyIiBuYW1lPSJPdXRwdXQxMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIzIiBuYW1lPSJJbnB1dDEyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjMiIG5hbWU9Ik91dHB1dDEyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjQiIG5hbWU9IklucHV0MTI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNCIgbmFtZT0iT3V0cHV0MTI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjQiIHR5cGU9InRuczpQb3J0VHlwZTEyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNSIgbmFtZT0iSW5wdXQxMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI1IiBuYW1lPSJPdXRwdXQxMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNSIgdHlwZT0idG5zOlBvcnRUeXBlMTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI2IiBuYW1lPSJJbnB1dDEyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjYiIG5hbWU9Ik91dHB1dDEyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjciIG5hbWU9IklucHV0MTI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNyIgbmFtZT0iT3V0cHV0MTI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjciIHR5cGU9InRuczpQb3J0VHlwZTEyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMTI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyOCIgbmFtZT0iSW5wdXQxMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI4IiBuYW1lPSJPdXRwdXQxMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyOCIgdHlwZT0idG5zOlBvcnRUeXBlMTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI5IiBuYW1lPSJJbnB1dDEyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjkiIG5hbWU9Ik91dHB1dDEyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzAiIG5hbWU9IklucHV0MTMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMCIgbmFtZT0iT3V0cHV0MTMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzAiIHR5cGU9InRuczpQb3J0VHlwZTEzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMSIgbmFtZT0iSW5wdXQxMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMxIiBuYW1lPSJPdXRwdXQxMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMSIgdHlwZT0idG5zOlBvcnRUeXBlMTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMyIiBuYW1lPSJJbnB1dDEzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzIiIG5hbWU9Ik91dHB1dDEzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzMiIG5hbWU9IklucHV0MTMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMyIgbmFtZT0iT3V0cHV0MTMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzMiIHR5cGU9InRuczpQb3J0VHlwZTEzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNCIgbmFtZT0iSW5wdXQxMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM0IiBuYW1lPSJPdXRwdXQxMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNCIgdHlwZT0idG5zOlBvcnRUeXBlMTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM1IiBuYW1lPSJJbnB1dDEzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzUiIG5hbWU9Ik91dHB1dDEzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzYiIG5hbWU9IklucHV0MTM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNiIgbmFtZT0iT3V0cHV0MTM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzYiIHR5cGU9InRuczpQb3J0VHlwZTEzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNyIgbmFtZT0iSW5wdXQxMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM3IiBuYW1lPSJPdXRwdXQxMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNyIgdHlwZT0idG5zOlBvcnRUeXBlMTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM4IiBuYW1lPSJJbnB1dDEzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzgiIG5hbWU9Ik91dHB1dDEzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzkiIG5hbWU9IklucHV0MTM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzOSIgbmFtZT0iT3V0cHV0MTM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzkiIHR5cGU9InRuczpQb3J0VHlwZTEzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MCIgbmFtZT0iSW5wdXQxNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQwIiBuYW1lPSJPdXRwdXQxNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MCIgdHlwZT0idG5zOlBvcnRUeXBlMTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQxIiBuYW1lPSJJbnB1dDE0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDEiIG5hbWU9Ik91dHB1dDE0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDIiIG5hbWU9IklucHV0MTQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MiIgbmFtZT0iT3V0cHV0MTQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDIiIHR5cGU9InRuczpQb3J0VHlwZTE0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MyIgbmFtZT0iSW5wdXQxNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQzIiBuYW1lPSJPdXRwdXQxNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MyIgdHlwZT0idG5zOlBvcnRUeXBlMTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ0IiBuYW1lPSJJbnB1dDE0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDQiIG5hbWU9Ik91dHB1dDE0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDUiIG5hbWU9IklucHV0MTQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NSIgbmFtZT0iT3V0cHV0MTQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDUiIHR5cGU9InRuczpQb3J0VHlwZTE0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NiIgbmFtZT0iSW5wdXQxNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ2IiBuYW1lPSJPdXRwdXQxNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NiIgdHlwZT0idG5zOlBvcnRUeXBlMTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ3IiBuYW1lPSJJbnB1dDE0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDciIG5hbWU9Ik91dHB1dDE0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDgiIG5hbWU9IklucHV0MTQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0OCIgbmFtZT0iT3V0cHV0MTQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDgiIHR5cGU9InRuczpQb3J0VHlwZTE0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0OSIgbmFtZT0iSW5wdXQxNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ5IiBuYW1lPSJPdXRwdXQxNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0OSIgdHlwZT0idG5zOlBvcnRUeXBlMTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUwIiBuYW1lPSJJbnB1dDE1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTAiIG5hbWU9Ik91dHB1dDE1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTEiIG5hbWU9IklucHV0MTUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MSIgbmFtZT0iT3V0cHV0MTUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTEiIHR5cGU9InRuczpQb3J0VHlwZTE1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MiIgbmFtZT0iSW5wdXQxNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUyIiBuYW1lPSJPdXRwdXQxNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MiIgdHlwZT0idG5zOlBvcnRUeXBlMTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUzIiBuYW1lPSJJbnB1dDE1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTMiIG5hbWU9Ik91dHB1dDE1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTQiIG5hbWU9IklucHV0MTU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NCIgbmFtZT0iT3V0cHV0MTU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTQiIHR5cGU9InRuczpQb3J0VHlwZTE1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NSIgbmFtZT0iSW5wdXQxNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU1IiBuYW1lPSJPdXRwdXQxNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NSIgdHlwZT0idG5zOlBvcnRUeXBlMTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU2IiBuYW1lPSJJbnB1dDE1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTYiIG5hbWU9Ik91dHB1dDE1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTciIG5hbWU9IklucHV0MTU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NyIgbmFtZT0iT3V0cHV0MTU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTciIHR5cGU9InRuczpQb3J0VHlwZTE1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1OCIgbmFtZT0iSW5wdXQxNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU4IiBuYW1lPSJPdXRwdXQxNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1OCIgdHlwZT0idG5zOlBvcnRUeXBlMTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU5IiBuYW1lPSJJbnB1dDE1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTkiIG5hbWU9Ik91dHB1dDE1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjAiIG5hbWU9IklucHV0MTYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MCIgbmFtZT0iT3V0cHV0MTYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjAiIHR5cGU9InRuczpQb3J0VHlwZTE2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MSIgbmFtZT0iSW5wdXQxNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYxIiBuYW1lPSJPdXRwdXQxNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MSIgdHlwZT0idG5zOlBvcnRUeXBlMTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYyIiBuYW1lPSJJbnB1dDE2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjIiIG5hbWU9Ik91dHB1dDE2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjMiIG5hbWU9IklucHV0MTYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MyIgbmFtZT0iT3V0cHV0MTYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjMiIHR5cGU9InRuczpQb3J0VHlwZTE2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NCIgbmFtZT0iSW5wdXQxNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY0IiBuYW1lPSJPdXRwdXQxNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NCIgdHlwZT0idG5zOlBvcnRUeXBlMTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY1IiBuYW1lPSJJbnB1dDE2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjUiIG5hbWU9Ik91dHB1dDE2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjYiIG5hbWU9IklucHV0MTY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NiIgbmFtZT0iT3V0cHV0MTY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjYiIHR5cGU9InRuczpQb3J0VHlwZTE2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NyIgbmFtZT0iSW5wdXQxNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY3IiBuYW1lPSJPdXRwdXQxNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NyIgdHlwZT0idG5zOlBvcnRUeXBlMTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY4IiBuYW1lPSJJbnB1dDE2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjgiIG5hbWU9Ik91dHB1dDE2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjkiIG5hbWU9IklucHV0MTY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2OSIgbmFtZT0iT3V0cHV0MTY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjkiIHR5cGU9InRuczpQb3J0VHlwZTE2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MCIgbmFtZT0iSW5wdXQxNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcwIiBuYW1lPSJPdXRwdXQxNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MCIgdHlwZT0idG5zOlBvcnRUeXBlMTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcxIiBuYW1lPSJJbnB1dDE3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzEiIG5hbWU9Ik91dHB1dDE3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzIiIG5hbWU9IklucHV0MTcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MiIgbmFtZT0iT3V0cHV0MTcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzIiIHR5cGU9InRuczpQb3J0VHlwZTE3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MyIgbmFtZT0iSW5wdXQxNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTczIiBuYW1lPSJPdXRwdXQxNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MyIgdHlwZT0idG5zOlBvcnRUeXBlMTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc0IiBuYW1lPSJJbnB1dDE3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzQiIG5hbWU9Ik91dHB1dDE3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzUiIG5hbWU9IklucHV0MTc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NSIgbmFtZT0iT3V0cHV0MTc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzUiIHR5cGU9InRuczpQb3J0VHlwZTE3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NiIgbmFtZT0iSW5wdXQxNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc2IiBuYW1lPSJPdXRwdXQxNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NiIgdHlwZT0idG5zOlBvcnRUeXBlMTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc3IiBuYW1lPSJJbnB1dDE3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzciIG5hbWU9Ik91dHB1dDE3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzgiIG5hbWU9IklucHV0MTc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3OCIgbmFtZT0iT3V0cHV0MTc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzgiIHR5cGU9InRuczpQb3J0VHlwZTE3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3OSIgbmFtZT0iSW5wdXQxNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc5IiBuYW1lPSJPdXRwdXQxNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3OSIgdHlwZT0idG5zOlBvcnRUeXBlMTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgwIiBuYW1lPSJJbnB1dDE4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODAiIG5hbWU9Ik91dHB1dDE4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODEiIG5hbWU9IklucHV0MTgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MSIgbmFtZT0iT3V0cHV0MTgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODEiIHR5cGU9InRuczpQb3J0VHlwZTE4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MiIgbmFtZT0iSW5wdXQxODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgyIiBuYW1lPSJPdXRwdXQxODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MiIgdHlwZT0idG5zOlBvcnRUeXBlMTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MiIgYmluZGluZz0idG5zOkJpbmRpbmcxODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgzIiBuYW1lPSJJbnB1dDE4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODMiIG5hbWU9Ik91dHB1dDE4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODQiIG5hbWU9IklucHV0MTg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NCIgbmFtZT0iT3V0cHV0MTg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODQiIHR5cGU9InRuczpQb3J0VHlwZTE4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NSIgbmFtZT0iSW5wdXQxODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg1IiBuYW1lPSJPdXRwdXQxODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NSIgdHlwZT0idG5zOlBvcnRUeXBlMTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NSIgYmluZGluZz0idG5zOkJpbmRpbmcxODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg2IiBuYW1lPSJJbnB1dDE4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODYiIG5hbWU9Ik91dHB1dDE4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODciIG5hbWU9IklucHV0MTg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NyIgbmFtZT0iT3V0cHV0MTg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODciIHR5cGU9InRuczpQb3J0VHlwZTE4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODciIGJpbmRpbmc9InRuczpCaW5kaW5nMTg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4OCIgbmFtZT0iSW5wdXQxODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg4IiBuYW1lPSJPdXRwdXQxODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4OCIgdHlwZT0idG5zOlBvcnRUeXBlMTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4OCIgYmluZGluZz0idG5zOkJpbmRpbmcxODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg5IiBuYW1lPSJJbnB1dDE4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODkiIG5hbWU9Ik91dHB1dDE4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTAiIG5hbWU9IklucHV0MTkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MCIgbmFtZT0iT3V0cHV0MTkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTAiIHR5cGU9InRuczpQb3J0VHlwZTE5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MSIgbmFtZT0iSW5wdXQxOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkxIiBuYW1lPSJPdXRwdXQxOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MSIgdHlwZT0idG5zOlBvcnRUeXBlMTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkyIiBuYW1lPSJJbnB1dDE5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTIiIG5hbWU9Ik91dHB1dDE5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTMiIG5hbWU9IklucHV0MTkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MyIgbmFtZT0iT3V0cHV0MTkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTMiIHR5cGU9InRuczpQb3J0VHlwZTE5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NCIgbmFtZT0iSW5wdXQxOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk0IiBuYW1lPSJPdXRwdXQxOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NCIgdHlwZT0idG5zOlBvcnRUeXBlMTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk1IiBuYW1lPSJJbnB1dDE5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTUiIG5hbWU9Ik91dHB1dDE5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTYiIG5hbWU9IklucHV0MTk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NiIgbmFtZT0iT3V0cHV0MTk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTYiIHR5cGU9InRuczpQb3J0VHlwZTE5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NyIgbmFtZT0iSW5wdXQxOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk3IiBuYW1lPSJPdXRwdXQxOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NyIgdHlwZT0idG5zOlBvcnRUeXBlMTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NyIgYmluZGluZz0idG5zOkJpbmRpbmcxOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk4IiBuYW1lPSJJbnB1dDE5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTgiIG5hbWU9Ik91dHB1dDE5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTkiIG5hbWU9IklucHV0MTk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5OSIgbmFtZT0iT3V0cHV0MTk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTkiIHR5cGU9InRuczpQb3J0VHlwZTE5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMCIgbmFtZT0iSW5wdXQyMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAwIiBuYW1lPSJPdXRwdXQyMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMCIgdHlwZT0idG5zOlBvcnRUeXBlMjAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAxIiBuYW1lPSJJbnB1dDIwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDEiIG5hbWU9Ik91dHB1dDIwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDIiIG5hbWU9IklucHV0MjAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMiIgbmFtZT0iT3V0cHV0MjAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDIiIHR5cGU9InRuczpQb3J0VHlwZTIwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMyIgbmFtZT0iSW5wdXQyMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAzIiBuYW1lPSJPdXRwdXQyMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMyIgdHlwZT0idG5zOlBvcnRUeXBlMjAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA0IiBuYW1lPSJJbnB1dDIwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDQiIG5hbWU9Ik91dHB1dDIwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDUiIG5hbWU9IklucHV0MjA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNSIgbmFtZT0iT3V0cHV0MjA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDUiIHR5cGU9InRuczpQb3J0VHlwZTIwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNiIgbmFtZT0iSW5wdXQyMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA2IiBuYW1lPSJPdXRwdXQyMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNiIgdHlwZT0idG5zOlBvcnRUeXBlMjA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA3IiBuYW1lPSJJbnB1dDIwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDciIG5hbWU9Ik91dHB1dDIwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDgiIG5hbWU9IklucHV0MjA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwOCIgbmFtZT0iT3V0cHV0MjA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDgiIHR5cGU9InRuczpQb3J0VHlwZTIwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwOSIgbmFtZT0iSW5wdXQyMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA5IiBuYW1lPSJPdXRwdXQyMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwOSIgdHlwZT0idG5zOlBvcnRUeXBlMjA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEwIiBuYW1lPSJJbnB1dDIxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTAiIG5hbWU9Ik91dHB1dDIxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTEiIG5hbWU9IklucHV0MjExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMSIgbmFtZT0iT3V0cHV0MjExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTEiIHR5cGU9InRuczpQb3J0VHlwZTIxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMiIgbmFtZT0iSW5wdXQyMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEyIiBuYW1lPSJPdXRwdXQyMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMiIgdHlwZT0idG5zOlBvcnRUeXBlMjEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEzIiBuYW1lPSJJbnB1dDIxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTMiIG5hbWU9Ik91dHB1dDIxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTQiIG5hbWU9IklucHV0MjE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNCIgbmFtZT0iT3V0cHV0MjE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTQiIHR5cGU9InRuczpQb3J0VHlwZTIxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNSIgbmFtZT0iSW5wdXQyMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE1IiBuYW1lPSJPdXRwdXQyMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNSIgdHlwZT0idG5zOlBvcnRUeXBlMjE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE2IiBuYW1lPSJJbnB1dDIxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTYiIG5hbWU9Ik91dHB1dDIxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTciIG5hbWU9IklucHV0MjE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNyIgbmFtZT0iT3V0cHV0MjE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTciIHR5cGU9InRuczpQb3J0VHlwZTIxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMjE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxOCIgbmFtZT0iSW5wdXQyMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE4IiBuYW1lPSJPdXRwdXQyMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxOCIgdHlwZT0idG5zOlBvcnRUeXBlMjE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE5IiBuYW1lPSJJbnB1dDIxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTkiIG5hbWU9Ik91dHB1dDIxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjAiIG5hbWU9IklucHV0MjIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMCIgbmFtZT0iT3V0cHV0MjIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjAiIHR5cGU9InRuczpQb3J0VHlwZTIyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMSIgbmFtZT0iSW5wdXQyMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIxIiBuYW1lPSJPdXRwdXQyMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMSIgdHlwZT0idG5zOlBvcnRUeXBlMjIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIyIiBuYW1lPSJJbnB1dDIyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjIiIG5hbWU9Ik91dHB1dDIyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjMiIG5hbWU9IklucHV0MjIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMyIgbmFtZT0iT3V0cHV0MjIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjMiIHR5cGU9InRuczpQb3J0VHlwZTIyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNCIgbmFtZT0iSW5wdXQyMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI0IiBuYW1lPSJPdXRwdXQyMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNCIgdHlwZT0idG5zOlBvcnRUeXBlMjI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI1IiBuYW1lPSJJbnB1dDIyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjUiIG5hbWU9Ik91dHB1dDIyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjYiIG5hbWU9IklucHV0MjI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNiIgbmFtZT0iT3V0cHV0MjI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjYiIHR5cGU9InRuczpQb3J0VHlwZTIyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNyIgbmFtZT0iSW5wdXQyMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI3IiBuYW1lPSJPdXRwdXQyMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNyIgdHlwZT0idG5zOlBvcnRUeXBlMjI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI4IiBuYW1lPSJJbnB1dDIyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjgiIG5hbWU9Ik91dHB1dDIyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjkiIG5hbWU9IklucHV0MjI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyOSIgbmFtZT0iT3V0cHV0MjI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjkiIHR5cGU9InRuczpQb3J0VHlwZTIyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMCIgbmFtZT0iSW5wdXQyMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMwIiBuYW1lPSJPdXRwdXQyMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMCIgdHlwZT0idG5zOlBvcnRUeXBlMjMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMxIiBuYW1lPSJJbnB1dDIzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzEiIG5hbWU9Ik91dHB1dDIzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzIiIG5hbWU9IklucHV0MjMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMiIgbmFtZT0iT3V0cHV0MjMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzIiIHR5cGU9InRuczpQb3J0VHlwZTIzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMyIgbmFtZT0iSW5wdXQyMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMzIiBuYW1lPSJPdXRwdXQyMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMyIgdHlwZT0idG5zOlBvcnRUeXBlMjMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM0IiBuYW1lPSJJbnB1dDIzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzQiIG5hbWU9Ik91dHB1dDIzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzUiIG5hbWU9IklucHV0MjM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNSIgbmFtZT0iT3V0cHV0MjM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzUiIHR5cGU9InRuczpQb3J0VHlwZTIzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNiIgbmFtZT0iSW5wdXQyMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM2IiBuYW1lPSJPdXRwdXQyMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNiIgdHlwZT0idG5zOlBvcnRUeXBlMjM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM3IiBuYW1lPSJJbnB1dDIzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzciIG5hbWU9Ik91dHB1dDIzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzgiIG5hbWU9IklucHV0MjM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzOCIgbmFtZT0iT3V0cHV0MjM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzgiIHR5cGU9InRuczpQb3J0VHlwZTIzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzOSIgbmFtZT0iSW5wdXQyMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM5IiBuYW1lPSJPdXRwdXQyMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzOSIgdHlwZT0idG5zOlBvcnRUeXBlMjM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQwIiBuYW1lPSJJbnB1dDI0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDAiIG5hbWU9Ik91dHB1dDI0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDEiIG5hbWU9IklucHV0MjQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MSIgbmFtZT0iT3V0cHV0MjQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDEiIHR5cGU9InRuczpQb3J0VHlwZTI0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MiIgbmFtZT0iSW5wdXQyNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQyIiBuYW1lPSJPdXRwdXQyNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MiIgdHlwZT0idG5zOlBvcnRUeXBlMjQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQzIiBuYW1lPSJJbnB1dDI0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDMiIG5hbWU9Ik91dHB1dDI0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDQiIG5hbWU9IklucHV0MjQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NCIgbmFtZT0iT3V0cHV0MjQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDQiIHR5cGU9InRuczpQb3J0VHlwZTI0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NSIgbmFtZT0iSW5wdXQyNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ1IiBuYW1lPSJPdXRwdXQyNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NSIgdHlwZT0idG5zOlBvcnRUeXBlMjQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ2IiBuYW1lPSJJbnB1dDI0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDYiIG5hbWU9Ik91dHB1dDI0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDciIG5hbWU9IklucHV0MjQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NyIgbmFtZT0iT3V0cHV0MjQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDciIHR5cGU9InRuczpQb3J0VHlwZTI0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0OCIgbmFtZT0iSW5wdXQyNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ4IiBuYW1lPSJPdXRwdXQyNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0OCIgdHlwZT0idG5zOlBvcnRUeXBlMjQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ5IiBuYW1lPSJJbnB1dDI0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDkiIG5hbWU9Ik91dHB1dDI0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTAiIG5hbWU9IklucHV0MjUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MCIgbmFtZT0iT3V0cHV0MjUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTAiIHR5cGU9InRuczpQb3J0VHlwZTI1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MSIgbmFtZT0iSW5wdXQyNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUxIiBuYW1lPSJPdXRwdXQyNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MSIgdHlwZT0idG5zOlBvcnRUeXBlMjUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUyIiBuYW1lPSJJbnB1dDI1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTIiIG5hbWU9Ik91dHB1dDI1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTMiIG5hbWU9IklucHV0MjUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MyIgbmFtZT0iT3V0cHV0MjUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTMiIHR5cGU9InRuczpQb3J0VHlwZTI1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NCIgbmFtZT0iSW5wdXQyNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU0IiBuYW1lPSJPdXRwdXQyNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NCIgdHlwZT0idG5zOlBvcnRUeXBlMjU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU1IiBuYW1lPSJJbnB1dDI1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTUiIG5hbWU9Ik91dHB1dDI1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTYiIG5hbWU9IklucHV0MjU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NiIgbmFtZT0iT3V0cHV0MjU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTYiIHR5cGU9InRuczpQb3J0VHlwZTI1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NyIgbmFtZT0iSW5wdXQyNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU3IiBuYW1lPSJPdXRwdXQyNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NyIgdHlwZT0idG5zOlBvcnRUeXBlMjU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU4IiBuYW1lPSJJbnB1dDI1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTgiIG5hbWU9Ik91dHB1dDI1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTkiIG5hbWU9IklucHV0MjU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1OSIgbmFtZT0iT3V0cHV0MjU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTkiIHR5cGU9InRuczpQb3J0VHlwZTI1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MCIgbmFtZT0iSW5wdXQyNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYwIiBuYW1lPSJPdXRwdXQyNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MCIgdHlwZT0idG5zOlBvcnRUeXBlMjYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYxIiBuYW1lPSJJbnB1dDI2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjEiIG5hbWU9Ik91dHB1dDI2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjIiIG5hbWU9IklucHV0MjYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MiIgbmFtZT0iT3V0cHV0MjYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjIiIHR5cGU9InRuczpQb3J0VHlwZTI2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MyIgbmFtZT0iSW5wdXQyNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYzIiBuYW1lPSJPdXRwdXQyNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MyIgdHlwZT0idG5zOlBvcnRUeXBlMjYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY0IiBuYW1lPSJJbnB1dDI2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjQiIG5hbWU9Ik91dHB1dDI2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjUiIG5hbWU9IklucHV0MjY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NSIgbmFtZT0iT3V0cHV0MjY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjUiIHR5cGU9InRuczpQb3J0VHlwZTI2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NiIgbmFtZT0iSW5wdXQyNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY2IiBuYW1lPSJPdXRwdXQyNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NiIgdHlwZT0idG5zOlBvcnRUeXBlMjY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY3IiBuYW1lPSJJbnB1dDI2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjciIG5hbWU9Ik91dHB1dDI2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjgiIG5hbWU9IklucHV0MjY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2OCIgbmFtZT0iT3V0cHV0MjY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjgiIHR5cGU9InRuczpQb3J0VHlwZTI2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2OSIgbmFtZT0iSW5wdXQyNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY5IiBuYW1lPSJPdXRwdXQyNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2OSIgdHlwZT0idG5zOlBvcnRUeXBlMjY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjcwIiBuYW1lPSJJbnB1dDI3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzAiIG5hbWU9Ik91dHB1dDI3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzEiIG5hbWU9IklucHV0MjcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MSIgbmFtZT0iT3V0cHV0MjcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzEiIHR5cGU9InRuczpQb3J0VHlwZTI3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MiIgbmFtZT0iSW5wdXQyNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjcyIiBuYW1lPSJPdXRwdXQyNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MiIgdHlwZT0idG5zOlBvcnRUeXBlMjcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjczIiBuYW1lPSJJbnB1dDI3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzMiIG5hbWU9Ik91dHB1dDI3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjczIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzQiIG5hbWU9IklucHV0Mjc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NCIgbmFtZT0iT3V0cHV0Mjc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzQiIHR5cGU9InRuczpQb3J0VHlwZTI3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NSIgbmFtZT0iSW5wdXQyNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc1IiBuYW1lPSJPdXRwdXQyNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NSIgdHlwZT0idG5zOlBvcnRUeXBlMjc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc2IiBuYW1lPSJJbnB1dDI3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzYiIG5hbWU9Ik91dHB1dDI3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzciIG5hbWU9IklucHV0Mjc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NyIgbmFtZT0iT3V0cHV0Mjc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzciIHR5cGU9InRuczpQb3J0VHlwZTI3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMjc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3OCIgbmFtZT0iSW5wdXQyNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc4IiBuYW1lPSJPdXRwdXQyNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3OCIgdHlwZT0idG5zOlBvcnRUeXBlMjc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc5IiBuYW1lPSJJbnB1dDI3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzkiIG5hbWU9Ik91dHB1dDI3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODAiIG5hbWU9IklucHV0MjgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MCIgbmFtZT0iT3V0cHV0MjgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODAiIHR5cGU9InRuczpQb3J0VHlwZTI4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MSIgbmFtZT0iSW5wdXQyODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgxIiBuYW1lPSJPdXRwdXQyODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MSIgdHlwZT0idG5zOlBvcnRUeXBlMjgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MSIgYmluZGluZz0idG5zOkJpbmRpbmcyODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgyIiBuYW1lPSJJbnB1dDI4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODIiIG5hbWU9Ik91dHB1dDI4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODMiIG5hbWU9IklucHV0MjgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MyIgbmFtZT0iT3V0cHV0MjgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODMiIHR5cGU9InRuczpQb3J0VHlwZTI4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NCIgbmFtZT0iSW5wdXQyODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg0IiBuYW1lPSJPdXRwdXQyODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NCIgdHlwZT0idG5zOlBvcnRUeXBlMjg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NCIgYmluZGluZz0idG5zOkJpbmRpbmcyODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg1IiBuYW1lPSJJbnB1dDI4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODUiIG5hbWU9Ik91dHB1dDI4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODYiIG5hbWU9IklucHV0Mjg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NiIgbmFtZT0iT3V0cHV0Mjg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODYiIHR5cGU9InRuczpQb3J0VHlwZTI4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NyIgbmFtZT0iSW5wdXQyODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg3IiBuYW1lPSJPdXRwdXQyODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NyIgdHlwZT0idG5zOlBvcnRUeXBlMjg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NyIgYmluZGluZz0idG5zOkJpbmRpbmcyODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg4IiBuYW1lPSJJbnB1dDI4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODgiIG5hbWU9Ik91dHB1dDI4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODkiIG5hbWU9IklucHV0Mjg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4OSIgbmFtZT0iT3V0cHV0Mjg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODkiIHR5cGU9InRuczpQb3J0VHlwZTI4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MCIgbmFtZT0iSW5wdXQyOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkwIiBuYW1lPSJPdXRwdXQyOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MCIgdHlwZT0idG5zOlBvcnRUeXBlMjkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MCIgYmluZGluZz0idG5zOkJpbmRpbmcyOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkxIiBuYW1lPSJJbnB1dDI5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTEiIG5hbWU9Ik91dHB1dDI5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTIiIG5hbWU9IklucHV0MjkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MiIgbmFtZT0iT3V0cHV0MjkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTIiIHR5cGU9InRuczpQb3J0VHlwZTI5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MyIgbmFtZT0iSW5wdXQyOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkzIiBuYW1lPSJPdXRwdXQyOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MyIgdHlwZT0idG5zOlBvcnRUeXBlMjkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MyIgYmluZGluZz0idG5zOkJpbmRpbmcyOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk0IiBuYW1lPSJJbnB1dDI5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTQiIG5hbWU9Ik91dHB1dDI5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTUiIG5hbWU9IklucHV0Mjk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NSIgbmFtZT0iT3V0cHV0Mjk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTUiIHR5cGU9InRuczpQb3J0VHlwZTI5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NiIgbmFtZT0iSW5wdXQyOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk2IiBuYW1lPSJPdXRwdXQyOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NiIgdHlwZT0idG5zOlBvcnRUeXBlMjk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NiIgYmluZGluZz0idG5zOkJpbmRpbmcyOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk3IiBuYW1lPSJJbnB1dDI5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTciIG5hbWU9Ik91dHB1dDI5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTgiIG5hbWU9IklucHV0Mjk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5OCIgbmFtZT0iT3V0cHV0Mjk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTgiIHR5cGU9InRuczpQb3J0VHlwZTI5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5OSIgbmFtZT0iSW5wdXQyOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk5IiBuYW1lPSJPdXRwdXQyOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5OSIgdHlwZT0idG5zOlBvcnRUeXBlMjk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5OSIgYmluZGluZz0idG5zOkJpbmRpbmcyOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAwIiBuYW1lPSJJbnB1dDMwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDAiIG5hbWU9Ik91dHB1dDMwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDEiIG5hbWU9IklucHV0MzAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMSIgbmFtZT0iT3V0cHV0MzAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDEiIHR5cGU9InRuczpQb3J0VHlwZTMwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMiIgbmFtZT0iSW5wdXQzMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAyIiBuYW1lPSJPdXRwdXQzMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMiIgdHlwZT0idG5zOlBvcnRUeXBlMzAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMiIgYmluZGluZz0idG5zOkJpbmRpbmczMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAzIiBuYW1lPSJJbnB1dDMwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDMiIG5hbWU9Ik91dHB1dDMwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDQiIG5hbWU9IklucHV0MzA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNCIgbmFtZT0iT3V0cHV0MzA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDQiIHR5cGU9InRuczpQb3J0VHlwZTMwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNSIgbmFtZT0iSW5wdXQzMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA1IiBuYW1lPSJPdXRwdXQzMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNSIgdHlwZT0idG5zOlBvcnRUeXBlMzA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNSIgYmluZGluZz0idG5zOkJpbmRpbmczMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA2IiBuYW1lPSJJbnB1dDMwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDYiIG5hbWU9Ik91dHB1dDMwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDciIG5hbWU9IklucHV0MzA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNyIgbmFtZT0iT3V0cHV0MzA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDciIHR5cGU9InRuczpQb3J0VHlwZTMwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMzA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwOCIgbmFtZT0iSW5wdXQzMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA4IiBuYW1lPSJPdXRwdXQzMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwOCIgdHlwZT0idG5zOlBvcnRUeXBlMzA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwOCIgYmluZGluZz0idG5zOkJpbmRpbmczMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA5IiBuYW1lPSJJbnB1dDMwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDkiIG5hbWU9Ik91dHB1dDMwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTAiIG5hbWU9IklucHV0MzEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMCIgbmFtZT0iT3V0cHV0MzEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTAiIHR5cGU9InRuczpQb3J0VHlwZTMxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMSIgbmFtZT0iSW5wdXQzMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzExIiBuYW1lPSJPdXRwdXQzMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMSIgdHlwZT0idG5zOlBvcnRUeXBlMzExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMSIgYmluZGluZz0idG5zOkJpbmRpbmczMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEyIiBuYW1lPSJJbnB1dDMxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTIiIG5hbWU9Ik91dHB1dDMxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTMiIG5hbWU9IklucHV0MzEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMyIgbmFtZT0iT3V0cHV0MzEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTMiIHR5cGU9InRuczpQb3J0VHlwZTMxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNCIgbmFtZT0iSW5wdXQzMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE0IiBuYW1lPSJPdXRwdXQzMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNCIgdHlwZT0idG5zOlBvcnRUeXBlMzE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNCIgYmluZGluZz0idG5zOkJpbmRpbmczMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE1IiBuYW1lPSJJbnB1dDMxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTUiIG5hbWU9Ik91dHB1dDMxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTYiIG5hbWU9IklucHV0MzE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNiIgbmFtZT0iT3V0cHV0MzE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTYiIHR5cGU9InRuczpQb3J0VHlwZTMxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNyIgbmFtZT0iSW5wdXQzMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE3IiBuYW1lPSJPdXRwdXQzMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNyIgdHlwZT0idG5zOlBvcnRUeXBlMzE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNyIgYmluZGluZz0idG5zOkJpbmRpbmczMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE4IiBuYW1lPSJJbnB1dDMxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTgiIG5hbWU9Ik91dHB1dDMxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTkiIG5hbWU9IklucHV0MzE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxOSIgbmFtZT0iT3V0cHV0MzE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTkiIHR5cGU9InRuczpQb3J0VHlwZTMxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMCIgbmFtZT0iSW5wdXQzMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIwIiBuYW1lPSJPdXRwdXQzMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMCIgdHlwZT0idG5zOlBvcnRUeXBlMzIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMCIgYmluZGluZz0idG5zOkJpbmRpbmczMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIxIiBuYW1lPSJJbnB1dDMyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjEiIG5hbWU9Ik91dHB1dDMyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjIiIG5hbWU9IklucHV0MzIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMiIgbmFtZT0iT3V0cHV0MzIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjIiIHR5cGU9InRuczpQb3J0VHlwZTMyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMyIgbmFtZT0iSW5wdXQzMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIzIiBuYW1lPSJPdXRwdXQzMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMyIgdHlwZT0idG5zOlBvcnRUeXBlMzIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMyIgYmluZGluZz0idG5zOkJpbmRpbmczMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI0IiBuYW1lPSJJbnB1dDMyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjQiIG5hbWU9Ik91dHB1dDMyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjUiIG5hbWU9IklucHV0MzI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNSIgbmFtZT0iT3V0cHV0MzI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjUiIHR5cGU9InRuczpQb3J0VHlwZTMyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNiIgbmFtZT0iSW5wdXQzMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI2IiBuYW1lPSJPdXRwdXQzMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNiIgdHlwZT0idG5zOlBvcnRUeXBlMzI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNiIgYmluZGluZz0idG5zOkJpbmRpbmczMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI3IiBuYW1lPSJJbnB1dDMyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjciIG5hbWU9Ik91dHB1dDMyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjgiIG5hbWU9IklucHV0MzI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyOCIgbmFtZT0iT3V0cHV0MzI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjgiIHR5cGU9InRuczpQb3J0VHlwZTMyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyOSIgbmFtZT0iSW5wdXQzMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI5IiBuYW1lPSJPdXRwdXQzMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyOSIgdHlwZT0idG5zOlBvcnRUeXBlMzI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyOSIgYmluZGluZz0idG5zOkJpbmRpbmczMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMwIiBuYW1lPSJJbnB1dDMzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzAiIG5hbWU9Ik91dHB1dDMzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzEiIG5hbWU9IklucHV0MzMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMSIgbmFtZT0iT3V0cHV0MzMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzEiIHR5cGU9InRuczpQb3J0VHlwZTMzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMiIgbmFtZT0iSW5wdXQzMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMyIiBuYW1lPSJPdXRwdXQzMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMiIgdHlwZT0idG5zOlBvcnRUeXBlMzMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMiIgYmluZGluZz0idG5zOkJpbmRpbmczMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMzIiBuYW1lPSJJbnB1dDMzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzMiIG5hbWU9Ik91dHB1dDMzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzQiIG5hbWU9IklucHV0MzM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNCIgbmFtZT0iT3V0cHV0MzM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzQiIHR5cGU9InRuczpQb3J0VHlwZTMzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNSIgbmFtZT0iSW5wdXQzMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM1IiBuYW1lPSJPdXRwdXQzMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNSIgdHlwZT0idG5zOlBvcnRUeXBlMzM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNSIgYmluZGluZz0idG5zOkJpbmRpbmczMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM2IiBuYW1lPSJJbnB1dDMzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzYiIG5hbWU9Ik91dHB1dDMzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzciIG5hbWU9IklucHV0MzM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNyIgbmFtZT0iT3V0cHV0MzM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzciIHR5cGU9InRuczpQb3J0VHlwZTMzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzOCIgbmFtZT0iSW5wdXQzMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM4IiBuYW1lPSJPdXRwdXQzMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzOCIgdHlwZT0idG5zOlBvcnRUeXBlMzM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzOCIgYmluZGluZz0idG5zOkJpbmRpbmczMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM5IiBuYW1lPSJJbnB1dDMzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzkiIG5hbWU9Ik91dHB1dDMzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDAiIG5hbWU9IklucHV0MzQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MCIgbmFtZT0iT3V0cHV0MzQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDAiIHR5cGU9InRuczpQb3J0VHlwZTM0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MSIgbmFtZT0iSW5wdXQzNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQxIiBuYW1lPSJPdXRwdXQzNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MSIgdHlwZT0idG5zOlBvcnRUeXBlMzQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MSIgYmluZGluZz0idG5zOkJpbmRpbmczNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQyIiBuYW1lPSJJbnB1dDM0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDIiIG5hbWU9Ik91dHB1dDM0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDMiIG5hbWU9IklucHV0MzQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MyIgbmFtZT0iT3V0cHV0MzQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDMiIHR5cGU9InRuczpQb3J0VHlwZTM0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NCIgbmFtZT0iSW5wdXQzNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ0IiBuYW1lPSJPdXRwdXQzNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NCIgdHlwZT0idG5zOlBvcnRUeXBlMzQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NCIgYmluZGluZz0idG5zOkJpbmRpbmczNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ1IiBuYW1lPSJJbnB1dDM0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDUiIG5hbWU9Ik91dHB1dDM0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDYiIG5hbWU9IklucHV0MzQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NiIgbmFtZT0iT3V0cHV0MzQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDYiIHR5cGU9InRuczpQb3J0VHlwZTM0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NyIgbmFtZT0iSW5wdXQzNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ3IiBuYW1lPSJPdXRwdXQzNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NyIgdHlwZT0idG5zOlBvcnRUeXBlMzQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NyIgYmluZGluZz0idG5zOkJpbmRpbmczNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ4IiBuYW1lPSJJbnB1dDM0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDgiIG5hbWU9Ik91dHB1dDM0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDkiIG5hbWU9IklucHV0MzQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0OSIgbmFtZT0iT3V0cHV0MzQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDkiIHR5cGU9InRuczpQb3J0VHlwZTM0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MCIgbmFtZT0iSW5wdXQzNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUwIiBuYW1lPSJPdXRwdXQzNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MCIgdHlwZT0idG5zOlBvcnRUeXBlMzUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MCIgYmluZGluZz0idG5zOkJpbmRpbmczNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUxIiBuYW1lPSJJbnB1dDM1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTEiIG5hbWU9Ik91dHB1dDM1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTIiIG5hbWU9IklucHV0MzUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MiIgbmFtZT0iT3V0cHV0MzUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTIiIHR5cGU9InRuczpQb3J0VHlwZTM1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MyIgbmFtZT0iSW5wdXQzNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUzIiBuYW1lPSJPdXRwdXQzNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MyIgdHlwZT0idG5zOlBvcnRUeXBlMzUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MyIgYmluZGluZz0idG5zOkJpbmRpbmczNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU0IiBuYW1lPSJJbnB1dDM1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTQiIG5hbWU9Ik91dHB1dDM1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTUiIG5hbWU9IklucHV0MzU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NSIgbmFtZT0iT3V0cHV0MzU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTUiIHR5cGU9InRuczpQb3J0VHlwZTM1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NiIgbmFtZT0iSW5wdXQzNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU2IiBuYW1lPSJPdXRwdXQzNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NiIgdHlwZT0idG5zOlBvcnRUeXBlMzU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NiIgYmluZGluZz0idG5zOkJpbmRpbmczNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU3IiBuYW1lPSJJbnB1dDM1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTciIG5hbWU9Ik91dHB1dDM1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTgiIG5hbWU9IklucHV0MzU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1OCIgbmFtZT0iT3V0cHV0MzU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTgiIHR5cGU9InRuczpQb3J0VHlwZTM1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1OSIgbmFtZT0iSW5wdXQzNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU5IiBuYW1lPSJPdXRwdXQzNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1OSIgdHlwZT0idG5zOlBvcnRUeXBlMzU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1OSIgYmluZGluZz0idG5zOkJpbmRpbmczNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYwIiBuYW1lPSJJbnB1dDM2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjAiIG5hbWU9Ik91dHB1dDM2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjEiIG5hbWU9IklucHV0MzYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MSIgbmFtZT0iT3V0cHV0MzYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjEiIHR5cGU9InRuczpQb3J0VHlwZTM2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MiIgbmFtZT0iSW5wdXQzNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYyIiBuYW1lPSJPdXRwdXQzNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MiIgdHlwZT0idG5zOlBvcnRUeXBlMzYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MiIgYmluZGluZz0idG5zOkJpbmRpbmczNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYzIiBuYW1lPSJJbnB1dDM2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjMiIG5hbWU9Ik91dHB1dDM2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjQiIG5hbWU9IklucHV0MzY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NCIgbmFtZT0iT3V0cHV0MzY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjQiIHR5cGU9InRuczpQb3J0VHlwZTM2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NSIgbmFtZT0iSW5wdXQzNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY1IiBuYW1lPSJPdXRwdXQzNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NSIgdHlwZT0idG5zOlBvcnRUeXBlMzY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NSIgYmluZGluZz0idG5zOkJpbmRpbmczNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY2IiBuYW1lPSJJbnB1dDM2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjYiIG5hbWU9Ik91dHB1dDM2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjciIG5hbWU9IklucHV0MzY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NyIgbmFtZT0iT3V0cHV0MzY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjciIHR5cGU9InRuczpQb3J0VHlwZTM2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMzY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2OCIgbmFtZT0iSW5wdXQzNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY4IiBuYW1lPSJPdXRwdXQzNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2OCIgdHlwZT0idG5zOlBvcnRUeXBlMzY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2OCIgYmluZGluZz0idG5zOkJpbmRpbmczNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY5IiBuYW1lPSJJbnB1dDM2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjkiIG5hbWU9Ik91dHB1dDM2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzAiIG5hbWU9IklucHV0MzcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MCIgbmFtZT0iT3V0cHV0MzcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzAiIHR5cGU9InRuczpQb3J0VHlwZTM3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MSIgbmFtZT0iSW5wdXQzNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzcxIiBuYW1lPSJPdXRwdXQzNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MSIgdHlwZT0idG5zOlBvcnRUeXBlMzcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MSIgYmluZGluZz0idG5zOkJpbmRpbmczNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzcyIiBuYW1lPSJJbnB1dDM3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzIiIG5hbWU9Ik91dHB1dDM3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzMiIG5hbWU9IklucHV0MzczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MyIgbmFtZT0iT3V0cHV0MzczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzMiIHR5cGU9InRuczpQb3J0VHlwZTM3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NCIgbmFtZT0iSW5wdXQzNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc0IiBuYW1lPSJPdXRwdXQzNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NCIgdHlwZT0idG5zOlBvcnRUeXBlMzc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NCIgYmluZGluZz0idG5zOkJpbmRpbmczNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc1IiBuYW1lPSJJbnB1dDM3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzUiIG5hbWU9Ik91dHB1dDM3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzYiIG5hbWU9IklucHV0Mzc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NiIgbmFtZT0iT3V0cHV0Mzc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzYiIHR5cGU9InRuczpQb3J0VHlwZTM3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NyIgbmFtZT0iSW5wdXQzNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc3IiBuYW1lPSJPdXRwdXQzNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NyIgdHlwZT0idG5zOlBvcnRUeXBlMzc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NyIgYmluZGluZz0idG5zOkJpbmRpbmczNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc4IiBuYW1lPSJJbnB1dDM3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzgiIG5hbWU9Ik91dHB1dDM3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzkiIG5hbWU9IklucHV0Mzc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3OSIgbmFtZT0iT3V0cHV0Mzc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzkiIHR5cGU9InRuczpQb3J0VHlwZTM3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MCIgbmFtZT0iSW5wdXQzODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgwIiBuYW1lPSJPdXRwdXQzODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MCIgdHlwZT0idG5zOlBvcnRUeXBlMzgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MCIgYmluZGluZz0idG5zOkJpbmRpbmczODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgxIiBuYW1lPSJJbnB1dDM4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODEiIG5hbWU9Ik91dHB1dDM4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODIiIG5hbWU9IklucHV0MzgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MiIgbmFtZT0iT3V0cHV0MzgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODIiIHR5cGU9InRuczpQb3J0VHlwZTM4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MyIgbmFtZT0iSW5wdXQzODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgzIiBuYW1lPSJPdXRwdXQzODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MyIgdHlwZT0idG5zOlBvcnRUeXBlMzgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MyIgYmluZGluZz0idG5zOkJpbmRpbmczODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg0IiBuYW1lPSJJbnB1dDM4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODQiIG5hbWU9Ik91dHB1dDM4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODUiIG5hbWU9IklucHV0Mzg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NSIgbmFtZT0iT3V0cHV0Mzg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODUiIHR5cGU9InRuczpQb3J0VHlwZTM4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NiIgbmFtZT0iSW5wdXQzODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg2IiBuYW1lPSJPdXRwdXQzODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NiIgdHlwZT0idG5zOlBvcnRUeXBlMzg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NiIgYmluZGluZz0idG5zOkJpbmRpbmczODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg3IiBuYW1lPSJJbnB1dDM4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODciIG5hbWU9Ik91dHB1dDM4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODgiIG5hbWU9IklucHV0Mzg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4OCIgbmFtZT0iT3V0cHV0Mzg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODgiIHR5cGU9InRuczpQb3J0VHlwZTM4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4OSIgbmFtZT0iSW5wdXQzODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg5IiBuYW1lPSJPdXRwdXQzODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4OSIgdHlwZT0idG5zOlBvcnRUeXBlMzg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4OSIgYmluZGluZz0idG5zOkJpbmRpbmczODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkwIiBuYW1lPSJJbnB1dDM5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTAiIG5hbWU9Ik91dHB1dDM5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTEiIG5hbWU9IklucHV0MzkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MSIgbmFtZT0iT3V0cHV0MzkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTEiIHR5cGU9InRuczpQb3J0VHlwZTM5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MiIgbmFtZT0iSW5wdXQzOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkyIiBuYW1lPSJPdXRwdXQzOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MiIgdHlwZT0idG5zOlBvcnRUeXBlMzkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MiIgYmluZGluZz0idG5zOkJpbmRpbmczOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkzIiBuYW1lPSJJbnB1dDM5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTMiIG5hbWU9Ik91dHB1dDM5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTQiIG5hbWU9IklucHV0Mzk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NCIgbmFtZT0iT3V0cHV0Mzk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTQiIHR5cGU9InRuczpQb3J0VHlwZTM5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NSIgbmFtZT0iSW5wdXQzOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk1IiBuYW1lPSJPdXRwdXQzOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NSIgdHlwZT0idG5zOlBvcnRUeXBlMzk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NSIgYmluZGluZz0idG5zOkJpbmRpbmczOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk2IiBuYW1lPSJJbnB1dDM5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTYiIG5hbWU9Ik91dHB1dDM5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTciIG5hbWU9IklucHV0Mzk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NyIgbmFtZT0iT3V0cHV0Mzk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTciIHR5cGU9InRuczpQb3J0VHlwZTM5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMzk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5OCIgbmFtZT0iSW5wdXQzOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk4IiBuYW1lPSJPdXRwdXQzOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5OCIgdHlwZT0idG5zOlBvcnRUeXBlMzk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5OCIgYmluZGluZz0idG5zOkJpbmRpbmczOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk5IiBuYW1lPSJJbnB1dDM5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTkiIG5hbWU9Ik91dHB1dDM5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDAiIG5hbWU9IklucHV0NDAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMCIgbmFtZT0iT3V0cHV0NDAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDAiIHR5cGU9InRuczpQb3J0VHlwZTQwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMSIgbmFtZT0iSW5wdXQ0MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAxIiBuYW1lPSJPdXRwdXQ0MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMSIgdHlwZT0idG5zOlBvcnRUeXBlNDAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAyIiBuYW1lPSJJbnB1dDQwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDIiIG5hbWU9Ik91dHB1dDQwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDMiIG5hbWU9IklucHV0NDAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMyIgbmFtZT0iT3V0cHV0NDAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDMiIHR5cGU9InRuczpQb3J0VHlwZTQwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNCIgbmFtZT0iSW5wdXQ0MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA0IiBuYW1lPSJPdXRwdXQ0MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNCIgdHlwZT0idG5zOlBvcnRUeXBlNDA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA1IiBuYW1lPSJJbnB1dDQwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDUiIG5hbWU9Ik91dHB1dDQwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDYiIG5hbWU9IklucHV0NDA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNiIgbmFtZT0iT3V0cHV0NDA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDYiIHR5cGU9InRuczpQb3J0VHlwZTQwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNyIgbmFtZT0iSW5wdXQ0MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA3IiBuYW1lPSJPdXRwdXQ0MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNyIgdHlwZT0idG5zOlBvcnRUeXBlNDA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA4IiBuYW1lPSJJbnB1dDQwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDgiIG5hbWU9Ik91dHB1dDQwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDkiIG5hbWU9IklucHV0NDA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwOSIgbmFtZT0iT3V0cHV0NDA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDkiIHR5cGU9InRuczpQb3J0VHlwZTQwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMCIgbmFtZT0iSW5wdXQ0MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEwIiBuYW1lPSJPdXRwdXQ0MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMCIgdHlwZT0idG5zOlBvcnRUeXBlNDEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDExIiBuYW1lPSJJbnB1dDQxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTEiIG5hbWU9Ik91dHB1dDQxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDExIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTIiIG5hbWU9IklucHV0NDEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMiIgbmFtZT0iT3V0cHV0NDEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTIiIHR5cGU9InRuczpQb3J0VHlwZTQxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMyIgbmFtZT0iSW5wdXQ0MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEzIiBuYW1lPSJPdXRwdXQ0MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMyIgdHlwZT0idG5zOlBvcnRUeXBlNDEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE0IiBuYW1lPSJJbnB1dDQxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTQiIG5hbWU9Ik91dHB1dDQxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTUiIG5hbWU9IklucHV0NDE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNSIgbmFtZT0iT3V0cHV0NDE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTUiIHR5cGU9InRuczpQb3J0VHlwZTQxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNiIgbmFtZT0iSW5wdXQ0MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE2IiBuYW1lPSJPdXRwdXQ0MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNiIgdHlwZT0idG5zOlBvcnRUeXBlNDE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE3IiBuYW1lPSJJbnB1dDQxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTciIG5hbWU9Ik91dHB1dDQxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTgiIG5hbWU9IklucHV0NDE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxOCIgbmFtZT0iT3V0cHV0NDE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTgiIHR5cGU9InRuczpQb3J0VHlwZTQxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxOSIgbmFtZT0iSW5wdXQ0MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE5IiBuYW1lPSJPdXRwdXQ0MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxOSIgdHlwZT0idG5zOlBvcnRUeXBlNDE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIwIiBuYW1lPSJJbnB1dDQyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjAiIG5hbWU9Ik91dHB1dDQyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjEiIG5hbWU9IklucHV0NDIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMSIgbmFtZT0iT3V0cHV0NDIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjEiIHR5cGU9InRuczpQb3J0VHlwZTQyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMiIgbmFtZT0iSW5wdXQ0MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIyIiBuYW1lPSJPdXRwdXQ0MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMiIgdHlwZT0idG5zOlBvcnRUeXBlNDIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIzIiBuYW1lPSJJbnB1dDQyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjMiIG5hbWU9Ik91dHB1dDQyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjQiIG5hbWU9IklucHV0NDI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNCIgbmFtZT0iT3V0cHV0NDI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjQiIHR5cGU9InRuczpQb3J0VHlwZTQyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNSIgbmFtZT0iSW5wdXQ0MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI1IiBuYW1lPSJPdXRwdXQ0MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNSIgdHlwZT0idG5zOlBvcnRUeXBlNDI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI2IiBuYW1lPSJJbnB1dDQyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjYiIG5hbWU9Ik91dHB1dDQyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjciIG5hbWU9IklucHV0NDI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNyIgbmFtZT0iT3V0cHV0NDI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjciIHR5cGU9InRuczpQb3J0VHlwZTQyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjciIGJpbmRpbmc9InRuczpCaW5kaW5nNDI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyOCIgbmFtZT0iSW5wdXQ0MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI4IiBuYW1lPSJPdXRwdXQ0MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyOCIgdHlwZT0idG5zOlBvcnRUeXBlNDI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI5IiBuYW1lPSJJbnB1dDQyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjkiIG5hbWU9Ik91dHB1dDQyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzAiIG5hbWU9IklucHV0NDMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMCIgbmFtZT0iT3V0cHV0NDMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzAiIHR5cGU9InRuczpQb3J0VHlwZTQzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMSIgbmFtZT0iSW5wdXQ0MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMxIiBuYW1lPSJPdXRwdXQ0MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMSIgdHlwZT0idG5zOlBvcnRUeXBlNDMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMyIiBuYW1lPSJJbnB1dDQzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzIiIG5hbWU9Ik91dHB1dDQzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzMiIG5hbWU9IklucHV0NDMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMyIgbmFtZT0iT3V0cHV0NDMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzMiIHR5cGU9InRuczpQb3J0VHlwZTQzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNCIgbmFtZT0iSW5wdXQ0MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM0IiBuYW1lPSJPdXRwdXQ0MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNCIgdHlwZT0idG5zOlBvcnRUeXBlNDM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM1IiBuYW1lPSJJbnB1dDQzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzUiIG5hbWU9Ik91dHB1dDQzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzYiIG5hbWU9IklucHV0NDM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNiIgbmFtZT0iT3V0cHV0NDM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzYiIHR5cGU9InRuczpQb3J0VHlwZTQzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNyIgbmFtZT0iSW5wdXQ0MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM3IiBuYW1lPSJPdXRwdXQ0MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNyIgdHlwZT0idG5zOlBvcnRUeXBlNDM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM4IiBuYW1lPSJJbnB1dDQzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzgiIG5hbWU9Ik91dHB1dDQzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzkiIG5hbWU9IklucHV0NDM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzOSIgbmFtZT0iT3V0cHV0NDM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzkiIHR5cGU9InRuczpQb3J0VHlwZTQzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MCIgbmFtZT0iSW5wdXQ0NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQwIiBuYW1lPSJPdXRwdXQ0NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MCIgdHlwZT0idG5zOlBvcnRUeXBlNDQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQxIiBuYW1lPSJJbnB1dDQ0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDEiIG5hbWU9Ik91dHB1dDQ0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDIiIG5hbWU9IklucHV0NDQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MiIgbmFtZT0iT3V0cHV0NDQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDIiIHR5cGU9InRuczpQb3J0VHlwZTQ0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MyIgbmFtZT0iSW5wdXQ0NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQzIiBuYW1lPSJPdXRwdXQ0NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MyIgdHlwZT0idG5zOlBvcnRUeXBlNDQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ0IiBuYW1lPSJJbnB1dDQ0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDQiIG5hbWU9Ik91dHB1dDQ0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDUiIG5hbWU9IklucHV0NDQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NSIgbmFtZT0iT3V0cHV0NDQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDUiIHR5cGU9InRuczpQb3J0VHlwZTQ0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NiIgbmFtZT0iSW5wdXQ0NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ2IiBuYW1lPSJPdXRwdXQ0NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NiIgdHlwZT0idG5zOlBvcnRUeXBlNDQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ3IiBuYW1lPSJJbnB1dDQ0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDciIG5hbWU9Ik91dHB1dDQ0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDgiIG5hbWU9IklucHV0NDQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0OCIgbmFtZT0iT3V0cHV0NDQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDgiIHR5cGU9InRuczpQb3J0VHlwZTQ0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0OSIgbmFtZT0iSW5wdXQ0NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ5IiBuYW1lPSJPdXRwdXQ0NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0OSIgdHlwZT0idG5zOlBvcnRUeXBlNDQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUwIiBuYW1lPSJJbnB1dDQ1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTAiIG5hbWU9Ik91dHB1dDQ1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTEiIG5hbWU9IklucHV0NDUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MSIgbmFtZT0iT3V0cHV0NDUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTEiIHR5cGU9InRuczpQb3J0VHlwZTQ1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MiIgbmFtZT0iSW5wdXQ0NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUyIiBuYW1lPSJPdXRwdXQ0NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MiIgdHlwZT0idG5zOlBvcnRUeXBlNDUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUzIiBuYW1lPSJJbnB1dDQ1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTMiIG5hbWU9Ik91dHB1dDQ1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTQiIG5hbWU9IklucHV0NDU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NCIgbmFtZT0iT3V0cHV0NDU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTQiIHR5cGU9InRuczpQb3J0VHlwZTQ1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NSIgbmFtZT0iSW5wdXQ0NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU1IiBuYW1lPSJPdXRwdXQ0NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NSIgdHlwZT0idG5zOlBvcnRUeXBlNDU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU2IiBuYW1lPSJJbnB1dDQ1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTYiIG5hbWU9Ik91dHB1dDQ1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTciIG5hbWU9IklucHV0NDU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NyIgbmFtZT0iT3V0cHV0NDU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTciIHR5cGU9InRuczpQb3J0VHlwZTQ1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNDU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1OCIgbmFtZT0iSW5wdXQ0NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU4IiBuYW1lPSJPdXRwdXQ0NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1OCIgdHlwZT0idG5zOlBvcnRUeXBlNDU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU5IiBuYW1lPSJJbnB1dDQ1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTkiIG5hbWU9Ik91dHB1dDQ1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjAiIG5hbWU9IklucHV0NDYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MCIgbmFtZT0iT3V0cHV0NDYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjAiIHR5cGU9InRuczpQb3J0VHlwZTQ2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MSIgbmFtZT0iSW5wdXQ0NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYxIiBuYW1lPSJPdXRwdXQ0NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MSIgdHlwZT0idG5zOlBvcnRUeXBlNDYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYyIiBuYW1lPSJJbnB1dDQ2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjIiIG5hbWU9Ik91dHB1dDQ2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjMiIG5hbWU9IklucHV0NDYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MyIgbmFtZT0iT3V0cHV0NDYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjMiIHR5cGU9InRuczpQb3J0VHlwZTQ2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NCIgbmFtZT0iSW5wdXQ0NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY0IiBuYW1lPSJPdXRwdXQ0NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NCIgdHlwZT0idG5zOlBvcnRUeXBlNDY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY1IiBuYW1lPSJJbnB1dDQ2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjUiIG5hbWU9Ik91dHB1dDQ2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjYiIG5hbWU9IklucHV0NDY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NiIgbmFtZT0iT3V0cHV0NDY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjYiIHR5cGU9InRuczpQb3J0VHlwZTQ2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NyIgbmFtZT0iSW5wdXQ0NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY3IiBuYW1lPSJPdXRwdXQ0NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NyIgdHlwZT0idG5zOlBvcnRUeXBlNDY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY4IiBuYW1lPSJJbnB1dDQ2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjgiIG5hbWU9Ik91dHB1dDQ2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjkiIG5hbWU9IklucHV0NDY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2OSIgbmFtZT0iT3V0cHV0NDY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjkiIHR5cGU9InRuczpQb3J0VHlwZTQ2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MCIgbmFtZT0iSW5wdXQ0NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDcwIiBuYW1lPSJPdXRwdXQ0NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MCIgdHlwZT0idG5zOlBvcnRUeXBlNDcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDcxIiBuYW1lPSJJbnB1dDQ3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzEiIG5hbWU9Ik91dHB1dDQ3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzIiIG5hbWU9IklucHV0NDcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MiIgbmFtZT0iT3V0cHV0NDcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzIiIHR5cGU9InRuczpQb3J0VHlwZTQ3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MyIgbmFtZT0iSW5wdXQ0NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDczIiBuYW1lPSJPdXRwdXQ0NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MyIgdHlwZT0idG5zOlBvcnRUeXBlNDczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc0IiBuYW1lPSJJbnB1dDQ3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzQiIG5hbWU9Ik91dHB1dDQ3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzUiIG5hbWU9IklucHV0NDc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NSIgbmFtZT0iT3V0cHV0NDc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzUiIHR5cGU9InRuczpQb3J0VHlwZTQ3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NiIgbmFtZT0iSW5wdXQ0NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc2IiBuYW1lPSJPdXRwdXQ0NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NiIgdHlwZT0idG5zOlBvcnRUeXBlNDc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc3IiBuYW1lPSJJbnB1dDQ3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzciIG5hbWU9Ik91dHB1dDQ3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzgiIG5hbWU9IklucHV0NDc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3OCIgbmFtZT0iT3V0cHV0NDc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzgiIHR5cGU9InRuczpQb3J0VHlwZTQ3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3OSIgbmFtZT0iSW5wdXQ0NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc5IiBuYW1lPSJPdXRwdXQ0NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3OSIgdHlwZT0idG5zOlBvcnRUeXBlNDc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgwIiBuYW1lPSJJbnB1dDQ4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODAiIG5hbWU9Ik91dHB1dDQ4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODEiIG5hbWU9IklucHV0NDgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MSIgbmFtZT0iT3V0cHV0NDgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODEiIHR5cGU9InRuczpQb3J0VHlwZTQ4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MiIgbmFtZT0iSW5wdXQ0ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgyIiBuYW1lPSJPdXRwdXQ0ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MiIgdHlwZT0idG5zOlBvcnRUeXBlNDgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MiIgYmluZGluZz0idG5zOkJpbmRpbmc0ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgzIiBuYW1lPSJJbnB1dDQ4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODMiIG5hbWU9Ik91dHB1dDQ4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODQiIG5hbWU9IklucHV0NDg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NCIgbmFtZT0iT3V0cHV0NDg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODQiIHR5cGU9InRuczpQb3J0VHlwZTQ4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NSIgbmFtZT0iSW5wdXQ0ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg1IiBuYW1lPSJPdXRwdXQ0ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NSIgdHlwZT0idG5zOlBvcnRUeXBlNDg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NSIgYmluZGluZz0idG5zOkJpbmRpbmc0ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg2IiBuYW1lPSJJbnB1dDQ4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODYiIG5hbWU9Ik91dHB1dDQ4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODciIG5hbWU9IklucHV0NDg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NyIgbmFtZT0iT3V0cHV0NDg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODciIHR5cGU9InRuczpQb3J0VHlwZTQ4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODciIGJpbmRpbmc9InRuczpCaW5kaW5nNDg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4OCIgbmFtZT0iSW5wdXQ0ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg4IiBuYW1lPSJPdXRwdXQ0ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4OCIgdHlwZT0idG5zOlBvcnRUeXBlNDg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4OCIgYmluZGluZz0idG5zOkJpbmRpbmc0ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg5IiBuYW1lPSJJbnB1dDQ4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODkiIG5hbWU9Ik91dHB1dDQ4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTAiIG5hbWU9IklucHV0NDkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MCIgbmFtZT0iT3V0cHV0NDkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTAiIHR5cGU9InRuczpQb3J0VHlwZTQ5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MSIgbmFtZT0iSW5wdXQ0OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkxIiBuYW1lPSJPdXRwdXQ0OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MSIgdHlwZT0idG5zOlBvcnRUeXBlNDkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MSIgYmluZGluZz0idG5zOkJpbmRpbmc0OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkyIiBuYW1lPSJJbnB1dDQ5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTIiIG5hbWU9Ik91dHB1dDQ5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTMiIG5hbWU9IklucHV0NDkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MyIgbmFtZT0iT3V0cHV0NDkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTMiIHR5cGU9InRuczpQb3J0VHlwZTQ5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NCIgbmFtZT0iSW5wdXQ0OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk0IiBuYW1lPSJPdXRwdXQ0OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NCIgdHlwZT0idG5zOlBvcnRUeXBlNDk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NCIgYmluZGluZz0idG5zOkJpbmRpbmc0OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk1IiBuYW1lPSJJbnB1dDQ5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTUiIG5hbWU9Ik91dHB1dDQ5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTYiIG5hbWU9IklucHV0NDk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NiIgbmFtZT0iT3V0cHV0NDk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTYiIHR5cGU9InRuczpQb3J0VHlwZTQ5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NyIgbmFtZT0iSW5wdXQ0OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk3IiBuYW1lPSJPdXRwdXQ0OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NyIgdHlwZT0idG5zOlBvcnRUeXBlNDk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NyIgYmluZGluZz0idG5zOkJpbmRpbmc0OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk4IiBuYW1lPSJJbnB1dDQ5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTgiIG5hbWU9Ik91dHB1dDQ5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTkiIG5hbWU9IklucHV0NDk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5OSIgbmFtZT0iT3V0cHV0NDk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTkiIHR5cGU9InRuczpQb3J0VHlwZTQ5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwMCIgbmFtZT0iSW5wdXQ1MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAwIiBuYW1lPSJPdXRwdXQ1MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwMCIgdHlwZT0idG5zOlBvcnRUeXBlNTAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwMCIgYmluZGluZz0idG5zOkJpbmRpbmc1MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAxIiBuYW1lPSJJbnB1dDUwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDEiIG5hbWU9Ik91dHB1dDUwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDIiIG5hbWU9IklucHV0NTAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwMiIgbmFtZT0iT3V0cHV0NTAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDIiIHR5cGU9InRuczpQb3J0VHlwZTUwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwMyIgbmFtZT0iSW5wdXQ1MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAzIiBuYW1lPSJPdXRwdXQ1MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwMyIgdHlwZT0idG5zOlBvcnRUeXBlNTAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwMyIgYmluZGluZz0idG5zOkJpbmRpbmc1MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTA0IiBuYW1lPSJJbnB1dDUwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDQiIG5hbWU9Ik91dHB1dDUwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDUiIG5hbWU9IklucHV0NTA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwNSIgbmFtZT0iT3V0cHV0NTA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDUiIHR5cGU9InRuczpQb3J0VHlwZTUwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwNiIgbmFtZT0iSW5wdXQ1MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTA2IiBuYW1lPSJPdXRwdXQ1MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwNiIgdHlwZT0idG5zOlBvcnRUeXBlNTA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwNiIgYmluZGluZz0idG5zOkJpbmRpbmc1MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTA3IiBuYW1lPSJJbnB1dDUwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDciIG5hbWU9Ik91dHB1dDUwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDgiIG5hbWU9IklucHV0NTA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwOCIgbmFtZT0iT3V0cHV0NTA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDgiIHR5cGU9InRuczpQb3J0VHlwZTUwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwOSIgbmFtZT0iSW5wdXQ1MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTA5IiBuYW1lPSJPdXRwdXQ1MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwOSIgdHlwZT0idG5zOlBvcnRUeXBlNTA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwOSIgYmluZGluZz0idG5zOkJpbmRpbmc1MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEwIiBuYW1lPSJJbnB1dDUxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTAiIG5hbWU9Ik91dHB1dDUxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTEiIG5hbWU9IklucHV0NTExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxMSIgbmFtZT0iT3V0cHV0NTExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTEiIHR5cGU9InRuczpQb3J0VHlwZTUxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxMiIgbmFtZT0iSW5wdXQ1MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEyIiBuYW1lPSJPdXRwdXQ1MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxMiIgdHlwZT0idG5zOlBvcnRUeXBlNTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxMiIgYmluZGluZz0idG5zOkJpbmRpbmc1MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEzIiBuYW1lPSJJbnB1dDUxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTMiIG5hbWU9Ik91dHB1dDUxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTQiIG5hbWU9IklucHV0NTE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxNCIgbmFtZT0iT3V0cHV0NTE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTQiIHR5cGU9InRuczpQb3J0VHlwZTUxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxNSIgbmFtZT0iSW5wdXQ1MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTE1IiBuYW1lPSJPdXRwdXQ1MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxNSIgdHlwZT0idG5zOlBvcnRUeXBlNTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxNSIgYmluZGluZz0idG5zOkJpbmRpbmc1MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTE2IiBuYW1lPSJJbnB1dDUxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTYiIG5hbWU9Ik91dHB1dDUxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTciIG5hbWU9IklucHV0NTE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxNyIgbmFtZT0iT3V0cHV0NTE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTciIHR5cGU9InRuczpQb3J0VHlwZTUxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxOCIgbmFtZT0iSW5wdXQ1MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTE4IiBuYW1lPSJPdXRwdXQ1MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxOCIgdHlwZT0idG5zOlBvcnRUeXBlNTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxOCIgYmluZGluZz0idG5zOkJpbmRpbmc1MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTE5IiBuYW1lPSJJbnB1dDUxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTkiIG5hbWU9Ik91dHB1dDUxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjAiIG5hbWU9IklucHV0NTIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyMCIgbmFtZT0iT3V0cHV0NTIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjAiIHR5cGU9InRuczpQb3J0VHlwZTUyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyMSIgbmFtZT0iSW5wdXQ1MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIxIiBuYW1lPSJPdXRwdXQ1MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyMSIgdHlwZT0idG5zOlBvcnRUeXBlNTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyMSIgYmluZGluZz0idG5zOkJpbmRpbmc1MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIyIiBuYW1lPSJJbnB1dDUyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjIiIG5hbWU9Ik91dHB1dDUyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjMiIG5hbWU9IklucHV0NTIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyMyIgbmFtZT0iT3V0cHV0NTIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjMiIHR5cGU9InRuczpQb3J0VHlwZTUyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyNCIgbmFtZT0iSW5wdXQ1MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTI0IiBuYW1lPSJPdXRwdXQ1MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyNCIgdHlwZT0idG5zOlBvcnRUeXBlNTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyNCIgYmluZGluZz0idG5zOkJpbmRpbmc1MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTI1IiBuYW1lPSJJbnB1dDUyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjUiIG5hbWU9Ik91dHB1dDUyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjYiIG5hbWU9IklucHV0NTI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyNiIgbmFtZT0iT3V0cHV0NTI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjYiIHR5cGU9InRuczpQb3J0VHlwZTUyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyNyIgbmFtZT0iSW5wdXQ1MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTI3IiBuYW1lPSJPdXRwdXQ1MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyNyIgdHlwZT0idG5zOlBvcnRUeXBlNTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyNyIgYmluZGluZz0idG5zOkJpbmRpbmc1MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTI4IiBuYW1lPSJJbnB1dDUyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjgiIG5hbWU9Ik91dHB1dDUyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjkiIG5hbWU9IklucHV0NTI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyOSIgbmFtZT0iT3V0cHV0NTI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjkiIHR5cGU9InRuczpQb3J0VHlwZTUyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzMCIgbmFtZT0iSW5wdXQ1MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMwIiBuYW1lPSJPdXRwdXQ1MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzMCIgdHlwZT0idG5zOlBvcnRUeXBlNTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzMCIgYmluZGluZz0idG5zOkJpbmRpbmc1MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMxIiBuYW1lPSJJbnB1dDUzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzEiIG5hbWU9Ik91dHB1dDUzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzIiIG5hbWU9IklucHV0NTMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzMiIgbmFtZT0iT3V0cHV0NTMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzIiIHR5cGU9InRuczpQb3J0VHlwZTUzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzMyIgbmFtZT0iSW5wdXQ1MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMzIiBuYW1lPSJPdXRwdXQ1MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzMyIgdHlwZT0idG5zOlBvcnRUeXBlNTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzMyIgYmluZGluZz0idG5zOkJpbmRpbmc1MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTM0IiBuYW1lPSJJbnB1dDUzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzQiIG5hbWU9Ik91dHB1dDUzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzUiIG5hbWU9IklucHV0NTM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzNSIgbmFtZT0iT3V0cHV0NTM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzUiIHR5cGU9InRuczpQb3J0VHlwZTUzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzNiIgbmFtZT0iSW5wdXQ1MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTM2IiBuYW1lPSJPdXRwdXQ1MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzNiIgdHlwZT0idG5zOlBvcnRUeXBlNTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzNiIgYmluZGluZz0idG5zOkJpbmRpbmc1MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTM3IiBuYW1lPSJJbnB1dDUzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzciIG5hbWU9Ik91dHB1dDUzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzgiIG5hbWU9IklucHV0NTM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzOCIgbmFtZT0iT3V0cHV0NTM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzgiIHR5cGU9InRuczpQb3J0VHlwZTUzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzOSIgbmFtZT0iSW5wdXQ1MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTM5IiBuYW1lPSJPdXRwdXQ1MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzOSIgdHlwZT0idG5zOlBvcnRUeXBlNTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzOSIgYmluZGluZz0idG5zOkJpbmRpbmc1MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQwIiBuYW1lPSJJbnB1dDU0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDAiIG5hbWU9Ik91dHB1dDU0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDEiIG5hbWU9IklucHV0NTQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0MSIgbmFtZT0iT3V0cHV0NTQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDEiIHR5cGU9InRuczpQb3J0VHlwZTU0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0MiIgbmFtZT0iSW5wdXQ1NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQyIiBuYW1lPSJPdXRwdXQ1NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0MiIgdHlwZT0idG5zOlBvcnRUeXBlNTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0MiIgYmluZGluZz0idG5zOkJpbmRpbmc1NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQzIiBuYW1lPSJJbnB1dDU0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDMiIG5hbWU9Ik91dHB1dDU0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDQiIG5hbWU9IklucHV0NTQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0NCIgbmFtZT0iT3V0cHV0NTQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDQiIHR5cGU9InRuczpQb3J0VHlwZTU0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0NSIgbmFtZT0iSW5wdXQ1NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQ1IiBuYW1lPSJPdXRwdXQ1NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0NSIgdHlwZT0idG5zOlBvcnRUeXBlNTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQ2IiBuYW1lPSJJbnB1dDU0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDYiIG5hbWU9Ik91dHB1dDU0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDciIG5hbWU9IklucHV0NTQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0NyIgbmFtZT0iT3V0cHV0NTQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDciIHR5cGU9InRuczpQb3J0VHlwZTU0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNTQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0OCIgbmFtZT0iSW5wdXQ1NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQ4IiBuYW1lPSJPdXRwdXQ1NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0OCIgdHlwZT0idG5zOlBvcnRUeXBlNTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0OCIgYmluZGluZz0idG5zOkJpbmRpbmc1NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQ5IiBuYW1lPSJJbnB1dDU0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDkiIG5hbWU9Ik91dHB1dDU0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTAiIG5hbWU9IklucHV0NTUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1MCIgbmFtZT0iT3V0cHV0NTUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTAiIHR5cGU9InRuczpQb3J0VHlwZTU1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1MSIgbmFtZT0iSW5wdXQ1NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUxIiBuYW1lPSJPdXRwdXQ1NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1MSIgdHlwZT0idG5zOlBvcnRUeXBlNTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1MSIgYmluZGluZz0idG5zOkJpbmRpbmc1NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUyIiBuYW1lPSJJbnB1dDU1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTIiIG5hbWU9Ik91dHB1dDU1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTMiIG5hbWU9IklucHV0NTUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1MyIgbmFtZT0iT3V0cHV0NTUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTMiIHR5cGU9InRuczpQb3J0VHlwZTU1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1NCIgbmFtZT0iSW5wdXQ1NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTU0IiBuYW1lPSJPdXRwdXQ1NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1NCIgdHlwZT0idG5zOlBvcnRUeXBlNTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTU1IiBuYW1lPSJJbnB1dDU1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTUiIG5hbWU9Ik91dHB1dDU1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTYiIG5hbWU9IklucHV0NTU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1NiIgbmFtZT0iT3V0cHV0NTU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTYiIHR5cGU9InRuczpQb3J0VHlwZTU1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1NyIgbmFtZT0iSW5wdXQ1NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTU3IiBuYW1lPSJPdXRwdXQ1NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1NyIgdHlwZT0idG5zOlBvcnRUeXBlNTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTU4IiBuYW1lPSJJbnB1dDU1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTgiIG5hbWU9Ik91dHB1dDU1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTkiIG5hbWU9IklucHV0NTU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1OSIgbmFtZT0iT3V0cHV0NTU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTkiIHR5cGU9InRuczpQb3J0VHlwZTU1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2MCIgbmFtZT0iSW5wdXQ1NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYwIiBuYW1lPSJPdXRwdXQ1NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2MCIgdHlwZT0idG5zOlBvcnRUeXBlNTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2MCIgYmluZGluZz0idG5zOkJpbmRpbmc1NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYxIiBuYW1lPSJJbnB1dDU2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjEiIG5hbWU9Ik91dHB1dDU2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjIiIG5hbWU9IklucHV0NTYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2MiIgbmFtZT0iT3V0cHV0NTYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjIiIHR5cGU9InRuczpQb3J0VHlwZTU2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2MyIgbmFtZT0iSW5wdXQ1NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYzIiBuYW1lPSJPdXRwdXQ1NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2MyIgdHlwZT0idG5zOlBvcnRUeXBlNTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2MyIgYmluZGluZz0idG5zOkJpbmRpbmc1NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTY0IiBuYW1lPSJJbnB1dDU2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjQiIG5hbWU9Ik91dHB1dDU2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjUiIG5hbWU9IklucHV0NTY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2NSIgbmFtZT0iT3V0cHV0NTY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjUiIHR5cGU9InRuczpQb3J0VHlwZTU2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2NiIgbmFtZT0iSW5wdXQ1NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTY2IiBuYW1lPSJPdXRwdXQ1NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2NiIgdHlwZT0idG5zOlBvcnRUeXBlNTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTY3IiBuYW1lPSJJbnB1dDU2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjciIG5hbWU9Ik91dHB1dDU2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjgiIG5hbWU9IklucHV0NTY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2OCIgbmFtZT0iT3V0cHV0NTY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjgiIHR5cGU9InRuczpQb3J0VHlwZTU2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2OSIgbmFtZT0iSW5wdXQ1NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTY5IiBuYW1lPSJPdXRwdXQ1NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2OSIgdHlwZT0idG5zOlBvcnRUeXBlNTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2OSIgYmluZGluZz0idG5zOkJpbmRpbmc1NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTcwIiBuYW1lPSJJbnB1dDU3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzAiIG5hbWU9Ik91dHB1dDU3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzEiIG5hbWU9IklucHV0NTcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3MSIgbmFtZT0iT3V0cHV0NTcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzEiIHR5cGU9InRuczpQb3J0VHlwZTU3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3MiIgbmFtZT0iSW5wdXQ1NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTcyIiBuYW1lPSJPdXRwdXQ1NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3MiIgdHlwZT0idG5zOlBvcnRUeXBlNTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3MiIgYmluZGluZz0idG5zOkJpbmRpbmc1NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTczIiBuYW1lPSJJbnB1dDU3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzMiIG5hbWU9Ik91dHB1dDU3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTczIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzQiIG5hbWU9IklucHV0NTc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3NCIgbmFtZT0iT3V0cHV0NTc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzQiIHR5cGU9InRuczpQb3J0VHlwZTU3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3NSIgbmFtZT0iSW5wdXQ1NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTc1IiBuYW1lPSJPdXRwdXQ1NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3NSIgdHlwZT0idG5zOlBvcnRUeXBlNTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTc2IiBuYW1lPSJJbnB1dDU3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzYiIG5hbWU9Ik91dHB1dDU3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzciIG5hbWU9IklucHV0NTc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3NyIgbmFtZT0iT3V0cHV0NTc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzciIHR5cGU9InRuczpQb3J0VHlwZTU3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNTc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3OCIgbmFtZT0iSW5wdXQ1NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTc4IiBuYW1lPSJPdXRwdXQ1NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3OCIgdHlwZT0idG5zOlBvcnRUeXBlNTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3OCIgYmluZGluZz0idG5zOkJpbmRpbmc1NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTc5IiBuYW1lPSJJbnB1dDU3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzkiIG5hbWU9Ik91dHB1dDU3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODAiIG5hbWU9IklucHV0NTgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4MCIgbmFtZT0iT3V0cHV0NTgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODAiIHR5cGU9InRuczpQb3J0VHlwZTU4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4MSIgbmFtZT0iSW5wdXQ1ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgxIiBuYW1lPSJPdXRwdXQ1ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4MSIgdHlwZT0idG5zOlBvcnRUeXBlNTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4MSIgYmluZGluZz0idG5zOkJpbmRpbmc1ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgyIiBuYW1lPSJJbnB1dDU4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODIiIG5hbWU9Ik91dHB1dDU4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODMiIG5hbWU9IklucHV0NTgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4MyIgbmFtZT0iT3V0cHV0NTgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODMiIHR5cGU9InRuczpQb3J0VHlwZTU4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4NCIgbmFtZT0iSW5wdXQ1ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTg0IiBuYW1lPSJPdXRwdXQ1ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4NCIgdHlwZT0idG5zOlBvcnRUeXBlNTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4NCIgYmluZGluZz0idG5zOkJpbmRpbmc1ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTg1IiBuYW1lPSJJbnB1dDU4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODUiIG5hbWU9Ik91dHB1dDU4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODYiIG5hbWU9IklucHV0NTg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4NiIgbmFtZT0iT3V0cHV0NTg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODYiIHR5cGU9InRuczpQb3J0VHlwZTU4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4NyIgbmFtZT0iSW5wdXQ1ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTg3IiBuYW1lPSJPdXRwdXQ1ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4NyIgdHlwZT0idG5zOlBvcnRUeXBlNTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4NyIgYmluZGluZz0idG5zOkJpbmRpbmc1ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTg4IiBuYW1lPSJJbnB1dDU4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODgiIG5hbWU9Ik91dHB1dDU4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODkiIG5hbWU9IklucHV0NTg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4OSIgbmFtZT0iT3V0cHV0NTg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODkiIHR5cGU9InRuczpQb3J0VHlwZTU4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5MCIgbmFtZT0iSW5wdXQ1OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkwIiBuYW1lPSJPdXRwdXQ1OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5MCIgdHlwZT0idG5zOlBvcnRUeXBlNTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5MCIgYmluZGluZz0idG5zOkJpbmRpbmc1OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkxIiBuYW1lPSJJbnB1dDU5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTEiIG5hbWU9Ik91dHB1dDU5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTIiIG5hbWU9IklucHV0NTkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5MiIgbmFtZT0iT3V0cHV0NTkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTIiIHR5cGU9InRuczpQb3J0VHlwZTU5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5MyIgbmFtZT0iSW5wdXQ1OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkzIiBuYW1lPSJPdXRwdXQ1OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5MyIgdHlwZT0idG5zOlBvcnRUeXBlNTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5MyIgYmluZGluZz0idG5zOkJpbmRpbmc1OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTk0IiBuYW1lPSJJbnB1dDU5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTQiIG5hbWU9Ik91dHB1dDU5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTUiIG5hbWU9IklucHV0NTk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5NSIgbmFtZT0iT3V0cHV0NTk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTUiIHR5cGU9InRuczpQb3J0VHlwZTU5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5NiIgbmFtZT0iSW5wdXQ1OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTk2IiBuYW1lPSJPdXRwdXQ1OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5NiIgdHlwZT0idG5zOlBvcnRUeXBlNTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5NiIgYmluZGluZz0idG5zOkJpbmRpbmc1OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTk3IiBuYW1lPSJJbnB1dDU5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTciIG5hbWU9Ik91dHB1dDU5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTgiIG5hbWU9IklucHV0NTk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5OCIgbmFtZT0iT3V0cHV0NTk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTgiIHR5cGU9InRuczpQb3J0VHlwZTU5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5OSIgbmFtZT0iSW5wdXQ1OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTk5IiBuYW1lPSJPdXRwdXQ1OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5OSIgdHlwZT0idG5zOlBvcnRUeXBlNTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5OSIgYmluZGluZz0idG5zOkJpbmRpbmc1OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAwIiBuYW1lPSJJbnB1dDYwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDAiIG5hbWU9Ik91dHB1dDYwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDEiIG5hbWU9IklucHV0NjAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwMSIgbmFtZT0iT3V0cHV0NjAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDEiIHR5cGU9InRuczpQb3J0VHlwZTYwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwMiIgbmFtZT0iSW5wdXQ2MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAyIiBuYW1lPSJPdXRwdXQ2MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwMiIgdHlwZT0idG5zOlBvcnRUeXBlNjAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwMiIgYmluZGluZz0idG5zOkJpbmRpbmc2MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAzIiBuYW1lPSJJbnB1dDYwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDMiIG5hbWU9Ik91dHB1dDYwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDQiIG5hbWU9IklucHV0NjA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwNCIgbmFtZT0iT3V0cHV0NjA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDQiIHR5cGU9InRuczpQb3J0VHlwZTYwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwNSIgbmFtZT0iSW5wdXQ2MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjA1IiBuYW1lPSJPdXRwdXQ2MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwNSIgdHlwZT0idG5zOlBvcnRUeXBlNjA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwNSIgYmluZGluZz0idG5zOkJpbmRpbmc2MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjA2IiBuYW1lPSJJbnB1dDYwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDYiIG5hbWU9Ik91dHB1dDYwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDciIG5hbWU9IklucHV0NjA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwNyIgbmFtZT0iT3V0cHV0NjA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDciIHR5cGU9InRuczpQb3J0VHlwZTYwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDciIGJpbmRpbmc9InRuczpCaW5kaW5nNjA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwOCIgbmFtZT0iSW5wdXQ2MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjA4IiBuYW1lPSJPdXRwdXQ2MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwOCIgdHlwZT0idG5zOlBvcnRUeXBlNjA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwOCIgYmluZGluZz0idG5zOkJpbmRpbmc2MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjA5IiBuYW1lPSJJbnB1dDYwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDkiIG5hbWU9Ik91dHB1dDYwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTAiIG5hbWU9IklucHV0NjEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxMCIgbmFtZT0iT3V0cHV0NjEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTAiIHR5cGU9InRuczpQb3J0VHlwZTYxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxMSIgbmFtZT0iSW5wdXQ2MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjExIiBuYW1lPSJPdXRwdXQ2MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxMSIgdHlwZT0idG5zOlBvcnRUeXBlNjExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxMSIgYmluZGluZz0idG5zOkJpbmRpbmc2MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEyIiBuYW1lPSJJbnB1dDYxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTIiIG5hbWU9Ik91dHB1dDYxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTMiIG5hbWU9IklucHV0NjEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxMyIgbmFtZT0iT3V0cHV0NjEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTMiIHR5cGU9InRuczpQb3J0VHlwZTYxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxNCIgbmFtZT0iSW5wdXQ2MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjE0IiBuYW1lPSJPdXRwdXQ2MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxNCIgdHlwZT0idG5zOlBvcnRUeXBlNjE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxNCIgYmluZGluZz0idG5zOkJpbmRpbmc2MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjE1IiBuYW1lPSJJbnB1dDYxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTUiIG5hbWU9Ik91dHB1dDYxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTYiIG5hbWU9IklucHV0NjE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxNiIgbmFtZT0iT3V0cHV0NjE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTYiIHR5cGU9InRuczpQb3J0VHlwZTYxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxNyIgbmFtZT0iSW5wdXQ2MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjE3IiBuYW1lPSJPdXRwdXQ2MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxNyIgdHlwZT0idG5zOlBvcnRUeXBlNjE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxNyIgYmluZGluZz0idG5zOkJpbmRpbmc2MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjE4IiBuYW1lPSJJbnB1dDYxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTgiIG5hbWU9Ik91dHB1dDYxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTkiIG5hbWU9IklucHV0NjE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxOSIgbmFtZT0iT3V0cHV0NjE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTkiIHR5cGU9InRuczpQb3J0VHlwZTYxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyMCIgbmFtZT0iSW5wdXQ2MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIwIiBuYW1lPSJPdXRwdXQ2MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyMCIgdHlwZT0idG5zOlBvcnRUeXBlNjIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyMCIgYmluZGluZz0idG5zOkJpbmRpbmc2MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIxIiBuYW1lPSJJbnB1dDYyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjEiIG5hbWU9Ik91dHB1dDYyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjIiIG5hbWU9IklucHV0NjIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyMiIgbmFtZT0iT3V0cHV0NjIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjIiIHR5cGU9InRuczpQb3J0VHlwZTYyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyMyIgbmFtZT0iSW5wdXQ2MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIzIiBuYW1lPSJPdXRwdXQ2MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyMyIgdHlwZT0idG5zOlBvcnRUeXBlNjIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyMyIgYmluZGluZz0idG5zOkJpbmRpbmc2MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjI0IiBuYW1lPSJJbnB1dDYyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjQiIG5hbWU9Ik91dHB1dDYyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjUiIG5hbWU9IklucHV0NjI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyNSIgbmFtZT0iT3V0cHV0NjI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjUiIHR5cGU9InRuczpQb3J0VHlwZTYyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyNiIgbmFtZT0iSW5wdXQ2MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjI2IiBuYW1lPSJPdXRwdXQ2MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyNiIgdHlwZT0idG5zOlBvcnRUeXBlNjI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyNiIgYmluZGluZz0idG5zOkJpbmRpbmc2MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjI3IiBuYW1lPSJJbnB1dDYyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjciIG5hbWU9Ik91dHB1dDYyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjgiIG5hbWU9IklucHV0NjI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyOCIgbmFtZT0iT3V0cHV0NjI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjgiIHR5cGU9InRuczpQb3J0VHlwZTYyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyOSIgbmFtZT0iSW5wdXQ2MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjI5IiBuYW1lPSJPdXRwdXQ2MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyOSIgdHlwZT0idG5zOlBvcnRUeXBlNjI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyOSIgYmluZGluZz0idG5zOkJpbmRpbmc2MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMwIiBuYW1lPSJJbnB1dDYzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzAiIG5hbWU9Ik91dHB1dDYzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzEiIG5hbWU9IklucHV0NjMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzMSIgbmFtZT0iT3V0cHV0NjMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzEiIHR5cGU9InRuczpQb3J0VHlwZTYzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzMiIgbmFtZT0iSW5wdXQ2MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMyIiBuYW1lPSJPdXRwdXQ2MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzMiIgdHlwZT0idG5zOlBvcnRUeXBlNjMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzMiIgYmluZGluZz0idG5zOkJpbmRpbmc2MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMzIiBuYW1lPSJJbnB1dDYzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzMiIG5hbWU9Ik91dHB1dDYzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzQiIG5hbWU9IklucHV0NjM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzNCIgbmFtZT0iT3V0cHV0NjM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzQiIHR5cGU9InRuczpQb3J0VHlwZTYzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzNSIgbmFtZT0iSW5wdXQ2MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjM1IiBuYW1lPSJPdXRwdXQ2MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzNSIgdHlwZT0idG5zOlBvcnRUeXBlNjM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzNSIgYmluZGluZz0idG5zOkJpbmRpbmc2MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjM2IiBuYW1lPSJJbnB1dDYzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzYiIG5hbWU9Ik91dHB1dDYzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzciIG5hbWU9IklucHV0NjM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzNyIgbmFtZT0iT3V0cHV0NjM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzciIHR5cGU9InRuczpQb3J0VHlwZTYzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzciIGJpbmRpbmc9InRuczpCaW5kaW5nNjM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzOCIgbmFtZT0iSW5wdXQ2MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjM4IiBuYW1lPSJPdXRwdXQ2MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzOCIgdHlwZT0idG5zOlBvcnRUeXBlNjM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzOCIgYmluZGluZz0idG5zOkJpbmRpbmc2MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjM5IiBuYW1lPSJJbnB1dDYzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzkiIG5hbWU9Ik91dHB1dDYzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDAiIG5hbWU9IklucHV0NjQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0MCIgbmFtZT0iT3V0cHV0NjQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDAiIHR5cGU9InRuczpQb3J0VHlwZTY0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0MSIgbmFtZT0iSW5wdXQ2NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQxIiBuYW1lPSJPdXRwdXQ2NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0MSIgdHlwZT0idG5zOlBvcnRUeXBlNjQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0MSIgYmluZGluZz0idG5zOkJpbmRpbmc2NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQyIiBuYW1lPSJJbnB1dDY0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDIiIG5hbWU9Ik91dHB1dDY0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDMiIG5hbWU9IklucHV0NjQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0MyIgbmFtZT0iT3V0cHV0NjQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDMiIHR5cGU9InRuczpQb3J0VHlwZTY0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0NCIgbmFtZT0iSW5wdXQ2NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQ0IiBuYW1lPSJPdXRwdXQ2NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0NCIgdHlwZT0idG5zOlBvcnRUeXBlNjQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQ1IiBuYW1lPSJJbnB1dDY0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDUiIG5hbWU9Ik91dHB1dDY0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDYiIG5hbWU9IklucHV0NjQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0NiIgbmFtZT0iT3V0cHV0NjQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDYiIHR5cGU9InRuczpQb3J0VHlwZTY0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0NyIgbmFtZT0iSW5wdXQ2NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQ3IiBuYW1lPSJPdXRwdXQ2NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0NyIgdHlwZT0idG5zOlBvcnRUeXBlNjQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQ4IiBuYW1lPSJJbnB1dDY0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDgiIG5hbWU9Ik91dHB1dDY0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDkiIG5hbWU9IklucHV0NjQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0OSIgbmFtZT0iT3V0cHV0NjQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDkiIHR5cGU9InRuczpQb3J0VHlwZTY0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1MCIgbmFtZT0iSW5wdXQ2NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUwIiBuYW1lPSJPdXRwdXQ2NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1MCIgdHlwZT0idG5zOlBvcnRUeXBlNjUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1MCIgYmluZGluZz0idG5zOkJpbmRpbmc2NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUxIiBuYW1lPSJJbnB1dDY1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTEiIG5hbWU9Ik91dHB1dDY1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTIiIG5hbWU9IklucHV0NjUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1MiIgbmFtZT0iT3V0cHV0NjUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTIiIHR5cGU9InRuczpQb3J0VHlwZTY1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1MyIgbmFtZT0iSW5wdXQ2NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUzIiBuYW1lPSJPdXRwdXQ2NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1MyIgdHlwZT0idG5zOlBvcnRUeXBlNjUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1MyIgYmluZGluZz0idG5zOkJpbmRpbmc2NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjU0IiBuYW1lPSJJbnB1dDY1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTQiIG5hbWU9Ik91dHB1dDY1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTUiIG5hbWU9IklucHV0NjU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1NSIgbmFtZT0iT3V0cHV0NjU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTUiIHR5cGU9InRuczpQb3J0VHlwZTY1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1NiIgbmFtZT0iSW5wdXQ2NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjU2IiBuYW1lPSJPdXRwdXQ2NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1NiIgdHlwZT0idG5zOlBvcnRUeXBlNjU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjU3IiBuYW1lPSJJbnB1dDY1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTciIG5hbWU9Ik91dHB1dDY1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTgiIG5hbWU9IklucHV0NjU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1OCIgbmFtZT0iT3V0cHV0NjU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTgiIHR5cGU9InRuczpQb3J0VHlwZTY1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1OSIgbmFtZT0iSW5wdXQ2NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjU5IiBuYW1lPSJPdXRwdXQ2NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1OSIgdHlwZT0idG5zOlBvcnRUeXBlNjU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1OSIgYmluZGluZz0idG5zOkJpbmRpbmc2NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYwIiBuYW1lPSJJbnB1dDY2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjAiIG5hbWU9Ik91dHB1dDY2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjEiIG5hbWU9IklucHV0NjYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2MSIgbmFtZT0iT3V0cHV0NjYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjEiIHR5cGU9InRuczpQb3J0VHlwZTY2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2MiIgbmFtZT0iSW5wdXQ2NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYyIiBuYW1lPSJPdXRwdXQ2NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2MiIgdHlwZT0idG5zOlBvcnRUeXBlNjYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2MiIgYmluZGluZz0idG5zOkJpbmRpbmc2NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYzIiBuYW1lPSJJbnB1dDY2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjMiIG5hbWU9Ik91dHB1dDY2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjQiIG5hbWU9IklucHV0NjY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2NCIgbmFtZT0iT3V0cHV0NjY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjQiIHR5cGU9InRuczpQb3J0VHlwZTY2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2NSIgbmFtZT0iSW5wdXQ2NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjY1IiBuYW1lPSJPdXRwdXQ2NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2NSIgdHlwZT0idG5zOlBvcnRUeXBlNjY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjY2IiBuYW1lPSJJbnB1dDY2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjYiIG5hbWU9Ik91dHB1dDY2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjciIG5hbWU9IklucHV0NjY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2NyIgbmFtZT0iT3V0cHV0NjY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjciIHR5cGU9InRuczpQb3J0VHlwZTY2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2OCIgbmFtZT0iSW5wdXQ2NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjY4IiBuYW1lPSJPdXRwdXQ2NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2OCIgdHlwZT0idG5zOlBvcnRUeXBlNjY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2OCIgYmluZGluZz0idG5zOkJpbmRpbmc2NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjY5IiBuYW1lPSJJbnB1dDY2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjkiIG5hbWU9Ik91dHB1dDY2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzAiIG5hbWU9IklucHV0NjcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3MCIgbmFtZT0iT3V0cHV0NjcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzAiIHR5cGU9InRuczpQb3J0VHlwZTY3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3MSIgbmFtZT0iSW5wdXQ2NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjcxIiBuYW1lPSJPdXRwdXQ2NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3MSIgdHlwZT0idG5zOlBvcnRUeXBlNjcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3MSIgYmluZGluZz0idG5zOkJpbmRpbmc2NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjcyIiBuYW1lPSJJbnB1dDY3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzIiIG5hbWU9Ik91dHB1dDY3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzMiIG5hbWU9IklucHV0NjczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3MyIgbmFtZT0iT3V0cHV0NjczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzMiIHR5cGU9InRuczpQb3J0VHlwZTY3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3NCIgbmFtZT0iSW5wdXQ2NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjc0IiBuYW1lPSJPdXRwdXQ2NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3NCIgdHlwZT0idG5zOlBvcnRUeXBlNjc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjc1IiBuYW1lPSJJbnB1dDY3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzUiIG5hbWU9Ik91dHB1dDY3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzYiIG5hbWU9IklucHV0Njc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3NiIgbmFtZT0iT3V0cHV0Njc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzYiIHR5cGU9InRuczpQb3J0VHlwZTY3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3NyIgbmFtZT0iSW5wdXQ2NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjc3IiBuYW1lPSJPdXRwdXQ2NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3NyIgdHlwZT0idG5zOlBvcnRUeXBlNjc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjc4IiBuYW1lPSJJbnB1dDY3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzgiIG5hbWU9Ik91dHB1dDY3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzkiIG5hbWU9IklucHV0Njc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3OSIgbmFtZT0iT3V0cHV0Njc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzkiIHR5cGU9InRuczpQb3J0VHlwZTY3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4MCIgbmFtZT0iSW5wdXQ2ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgwIiBuYW1lPSJPdXRwdXQ2ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4MCIgdHlwZT0idG5zOlBvcnRUeXBlNjgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4MCIgYmluZGluZz0idG5zOkJpbmRpbmc2ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgxIiBuYW1lPSJJbnB1dDY4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODEiIG5hbWU9Ik91dHB1dDY4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODIiIG5hbWU9IklucHV0NjgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4MiIgbmFtZT0iT3V0cHV0NjgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODIiIHR5cGU9InRuczpQb3J0VHlwZTY4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4MyIgbmFtZT0iSW5wdXQ2ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgzIiBuYW1lPSJPdXRwdXQ2ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4MyIgdHlwZT0idG5zOlBvcnRUeXBlNjgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4MyIgYmluZGluZz0idG5zOkJpbmRpbmc2ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjg0IiBuYW1lPSJJbnB1dDY4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODQiIG5hbWU9Ik91dHB1dDY4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODUiIG5hbWU9IklucHV0Njg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4NSIgbmFtZT0iT3V0cHV0Njg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODUiIHR5cGU9InRuczpQb3J0VHlwZTY4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4NiIgbmFtZT0iSW5wdXQ2ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjg2IiBuYW1lPSJPdXRwdXQ2ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4NiIgdHlwZT0idG5zOlBvcnRUeXBlNjg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4NiIgYmluZGluZz0idG5zOkJpbmRpbmc2ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjg3IiBuYW1lPSJJbnB1dDY4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODciIG5hbWU9Ik91dHB1dDY4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODgiIG5hbWU9IklucHV0Njg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4OCIgbmFtZT0iT3V0cHV0Njg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODgiIHR5cGU9InRuczpQb3J0VHlwZTY4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4OSIgbmFtZT0iSW5wdXQ2ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjg5IiBuYW1lPSJPdXRwdXQ2ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4OSIgdHlwZT0idG5zOlBvcnRUeXBlNjg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4OSIgYmluZGluZz0idG5zOkJpbmRpbmc2ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkwIiBuYW1lPSJJbnB1dDY5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTAiIG5hbWU9Ik91dHB1dDY5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTEiIG5hbWU9IklucHV0NjkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5MSIgbmFtZT0iT3V0cHV0NjkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTEiIHR5cGU9InRuczpQb3J0VHlwZTY5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5MiIgbmFtZT0iSW5wdXQ2OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkyIiBuYW1lPSJPdXRwdXQ2OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5MiIgdHlwZT0idG5zOlBvcnRUeXBlNjkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5MiIgYmluZGluZz0idG5zOkJpbmRpbmc2OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkzIiBuYW1lPSJJbnB1dDY5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTMiIG5hbWU9Ik91dHB1dDY5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTQiIG5hbWU9IklucHV0Njk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5NCIgbmFtZT0iT3V0cHV0Njk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTQiIHR5cGU9InRuczpQb3J0VHlwZTY5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5NSIgbmFtZT0iSW5wdXQ2OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjk1IiBuYW1lPSJPdXRwdXQ2OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5NSIgdHlwZT0idG5zOlBvcnRUeXBlNjk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5NSIgYmluZGluZz0idG5zOkJpbmRpbmc2OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjk2IiBuYW1lPSJJbnB1dDY5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTYiIG5hbWU9Ik91dHB1dDY5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTciIG5hbWU9IklucHV0Njk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5NyIgbmFtZT0iT3V0cHV0Njk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTciIHR5cGU9InRuczpQb3J0VHlwZTY5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTciIGJpbmRpbmc9InRuczpCaW5kaW5nNjk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5OCIgbmFtZT0iSW5wdXQ2OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjk4IiBuYW1lPSJPdXRwdXQ2OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5OCIgdHlwZT0idG5zOlBvcnRUeXBlNjk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5OCIgYmluZGluZz0idG5zOkJpbmRpbmc2OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjk5IiBuYW1lPSJJbnB1dDY5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTkiIG5hbWU9Ik91dHB1dDY5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDAiIG5hbWU9IklucHV0NzAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwMCIgbmFtZT0iT3V0cHV0NzAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDAiIHR5cGU9InRuczpQb3J0VHlwZTcwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwMSIgbmFtZT0iSW5wdXQ3MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAxIiBuYW1lPSJPdXRwdXQ3MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwMSIgdHlwZT0idG5zOlBvcnRUeXBlNzAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwMSIgYmluZGluZz0idG5zOkJpbmRpbmc3MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAyIiBuYW1lPSJJbnB1dDcwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDIiIG5hbWU9Ik91dHB1dDcwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDMiIG5hbWU9IklucHV0NzAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwMyIgbmFtZT0iT3V0cHV0NzAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDMiIHR5cGU9InRuczpQb3J0VHlwZTcwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwNCIgbmFtZT0iSW5wdXQ3MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzA0IiBuYW1lPSJPdXRwdXQ3MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwNCIgdHlwZT0idG5zOlBvcnRUeXBlNzA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwNCIgYmluZGluZz0idG5zOkJpbmRpbmc3MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzA1IiBuYW1lPSJJbnB1dDcwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDUiIG5hbWU9Ik91dHB1dDcwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDYiIG5hbWU9IklucHV0NzA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwNiIgbmFtZT0iT3V0cHV0NzA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDYiIHR5cGU9InRuczpQb3J0VHlwZTcwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwNyIgbmFtZT0iSW5wdXQ3MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzA3IiBuYW1lPSJPdXRwdXQ3MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwNyIgdHlwZT0idG5zOlBvcnRUeXBlNzA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwNyIgYmluZGluZz0idG5zOkJpbmRpbmc3MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzA4IiBuYW1lPSJJbnB1dDcwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDgiIG5hbWU9Ik91dHB1dDcwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDkiIG5hbWU9IklucHV0NzA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwOSIgbmFtZT0iT3V0cHV0NzA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDkiIHR5cGU9InRuczpQb3J0VHlwZTcwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxMCIgbmFtZT0iSW5wdXQ3MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEwIiBuYW1lPSJPdXRwdXQ3MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxMCIgdHlwZT0idG5zOlBvcnRUeXBlNzEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxMCIgYmluZGluZz0idG5zOkJpbmRpbmc3MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzExIiBuYW1lPSJJbnB1dDcxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTEiIG5hbWU9Ik91dHB1dDcxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzExIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTIiIG5hbWU9IklucHV0NzEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxMiIgbmFtZT0iT3V0cHV0NzEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTIiIHR5cGU9InRuczpQb3J0VHlwZTcxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxMyIgbmFtZT0iSW5wdXQ3MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEzIiBuYW1lPSJPdXRwdXQ3MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxMyIgdHlwZT0idG5zOlBvcnRUeXBlNzEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxMyIgYmluZGluZz0idG5zOkJpbmRpbmc3MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzE0IiBuYW1lPSJJbnB1dDcxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTQiIG5hbWU9Ik91dHB1dDcxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTUiIG5hbWU9IklucHV0NzE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxNSIgbmFtZT0iT3V0cHV0NzE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTUiIHR5cGU9InRuczpQb3J0VHlwZTcxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxNiIgbmFtZT0iSW5wdXQ3MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzE2IiBuYW1lPSJPdXRwdXQ3MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxNiIgdHlwZT0idG5zOlBvcnRUeXBlNzE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxNiIgYmluZGluZz0idG5zOkJpbmRpbmc3MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzE3IiBuYW1lPSJJbnB1dDcxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTciIG5hbWU9Ik91dHB1dDcxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTgiIG5hbWU9IklucHV0NzE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxOCIgbmFtZT0iT3V0cHV0NzE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTgiIHR5cGU9InRuczpQb3J0VHlwZTcxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxOSIgbmFtZT0iSW5wdXQ3MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzE5IiBuYW1lPSJPdXRwdXQ3MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxOSIgdHlwZT0idG5zOlBvcnRUeXBlNzE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxOSIgYmluZGluZz0idG5zOkJpbmRpbmc3MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIwIiBuYW1lPSJJbnB1dDcyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjAiIG5hbWU9Ik91dHB1dDcyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjEiIG5hbWU9IklucHV0NzIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyMSIgbmFtZT0iT3V0cHV0NzIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjEiIHR5cGU9InRuczpQb3J0VHlwZTcyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyMiIgbmFtZT0iSW5wdXQ3MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIyIiBuYW1lPSJPdXRwdXQ3MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyMiIgdHlwZT0idG5zOlBvcnRUeXBlNzIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyMiIgYmluZGluZz0idG5zOkJpbmRpbmc3MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIzIiBuYW1lPSJJbnB1dDcyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjMiIG5hbWU9Ik91dHB1dDcyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjQiIG5hbWU9IklucHV0NzI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyNCIgbmFtZT0iT3V0cHV0NzI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjQiIHR5cGU9InRuczpQb3J0VHlwZTcyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyNSIgbmFtZT0iSW5wdXQ3MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzI1IiBuYW1lPSJPdXRwdXQ3MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyNSIgdHlwZT0idG5zOlBvcnRUeXBlNzI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyNSIgYmluZGluZz0idG5zOkJpbmRpbmc3MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzI2IiBuYW1lPSJJbnB1dDcyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjYiIG5hbWU9Ik91dHB1dDcyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjciIG5hbWU9IklucHV0NzI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyNyIgbmFtZT0iT3V0cHV0NzI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjciIHR5cGU9InRuczpQb3J0VHlwZTcyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjciIGJpbmRpbmc9InRuczpCaW5kaW5nNzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyOCIgbmFtZT0iSW5wdXQ3MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzI4IiBuYW1lPSJPdXRwdXQ3MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyOCIgdHlwZT0idG5zOlBvcnRUeXBlNzI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyOCIgYmluZGluZz0idG5zOkJpbmRpbmc3MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzI5IiBuYW1lPSJJbnB1dDcyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjkiIG5hbWU9Ik91dHB1dDcyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzAiIG5hbWU9IklucHV0NzMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczMCIgbmFtZT0iT3V0cHV0NzMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzAiIHR5cGU9InRuczpQb3J0VHlwZTczMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczMSIgbmFtZT0iSW5wdXQ3MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMxIiBuYW1lPSJPdXRwdXQ3MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczMSIgdHlwZT0idG5zOlBvcnRUeXBlNzMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczMSIgYmluZGluZz0idG5zOkJpbmRpbmc3MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMyIiBuYW1lPSJJbnB1dDczMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzIiIG5hbWU9Ik91dHB1dDczMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzMiIG5hbWU9IklucHV0NzMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczMyIgbmFtZT0iT3V0cHV0NzMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzMiIHR5cGU9InRuczpQb3J0VHlwZTczMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczNCIgbmFtZT0iSW5wdXQ3MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzM0IiBuYW1lPSJPdXRwdXQ3MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczNCIgdHlwZT0idG5zOlBvcnRUeXBlNzM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczNCIgYmluZGluZz0idG5zOkJpbmRpbmc3MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzM1IiBuYW1lPSJJbnB1dDczNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzUiIG5hbWU9Ik91dHB1dDczNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzczNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzYiIG5hbWU9IklucHV0NzM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczNiIgbmFtZT0iT3V0cHV0NzM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzYiIHR5cGU9InRuczpQb3J0VHlwZTczNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczNyIgbmFtZT0iSW5wdXQ3MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzM3IiBuYW1lPSJPdXRwdXQ3MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczNyIgdHlwZT0idG5zOlBvcnRUeXBlNzM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczNyIgYmluZGluZz0idG5zOkJpbmRpbmc3MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzM4IiBuYW1lPSJJbnB1dDczOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzgiIG5hbWU9Ik91dHB1dDczOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzczOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzkiIG5hbWU9IklucHV0NzM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczOSIgbmFtZT0iT3V0cHV0NzM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzkiIHR5cGU9InRuczpQb3J0VHlwZTczOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0MCIgbmFtZT0iSW5wdXQ3NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQwIiBuYW1lPSJPdXRwdXQ3NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0MCIgdHlwZT0idG5zOlBvcnRUeXBlNzQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0MCIgYmluZGluZz0idG5zOkJpbmRpbmc3NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQxIiBuYW1lPSJJbnB1dDc0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDEiIG5hbWU9Ik91dHB1dDc0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDIiIG5hbWU9IklucHV0NzQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0MiIgbmFtZT0iT3V0cHV0NzQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDIiIHR5cGU9InRuczpQb3J0VHlwZTc0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0MyIgbmFtZT0iSW5wdXQ3NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQzIiBuYW1lPSJPdXRwdXQ3NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0MyIgdHlwZT0idG5zOlBvcnRUeXBlNzQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0MyIgYmluZGluZz0idG5zOkJpbmRpbmc3NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQ0IiBuYW1lPSJJbnB1dDc0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDQiIG5hbWU9Ik91dHB1dDc0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDUiIG5hbWU9IklucHV0NzQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0NSIgbmFtZT0iT3V0cHV0NzQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDUiIHR5cGU9InRuczpQb3J0VHlwZTc0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0NiIgbmFtZT0iSW5wdXQ3NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQ2IiBuYW1lPSJPdXRwdXQ3NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0NiIgdHlwZT0idG5zOlBvcnRUeXBlNzQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQ3IiBuYW1lPSJJbnB1dDc0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDciIG5hbWU9Ik91dHB1dDc0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDgiIG5hbWU9IklucHV0NzQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0OCIgbmFtZT0iT3V0cHV0NzQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDgiIHR5cGU9InRuczpQb3J0VHlwZTc0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0OSIgbmFtZT0iSW5wdXQ3NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQ5IiBuYW1lPSJPdXRwdXQ3NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0OSIgdHlwZT0idG5zOlBvcnRUeXBlNzQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0OSIgYmluZGluZz0idG5zOkJpbmRpbmc3NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUwIiBuYW1lPSJJbnB1dDc1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTAiIG5hbWU9Ik91dHB1dDc1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTEiIG5hbWU9IklucHV0NzUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1MSIgbmFtZT0iT3V0cHV0NzUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTEiIHR5cGU9InRuczpQb3J0VHlwZTc1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1MiIgbmFtZT0iSW5wdXQ3NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUyIiBuYW1lPSJPdXRwdXQ3NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1MiIgdHlwZT0idG5zOlBvcnRUeXBlNzUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1MiIgYmluZGluZz0idG5zOkJpbmRpbmc3NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUzIiBuYW1lPSJJbnB1dDc1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTMiIG5hbWU9Ik91dHB1dDc1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTQiIG5hbWU9IklucHV0NzU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1NCIgbmFtZT0iT3V0cHV0NzU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTQiIHR5cGU9InRuczpQb3J0VHlwZTc1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1NSIgbmFtZT0iSW5wdXQ3NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzU1IiBuYW1lPSJPdXRwdXQ3NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1NSIgdHlwZT0idG5zOlBvcnRUeXBlNzU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzU2IiBuYW1lPSJJbnB1dDc1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTYiIG5hbWU9Ik91dHB1dDc1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTciIG5hbWU9IklucHV0NzU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1NyIgbmFtZT0iT3V0cHV0NzU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTciIHR5cGU9InRuczpQb3J0VHlwZTc1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1OCIgbmFtZT0iSW5wdXQ3NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzU4IiBuYW1lPSJPdXRwdXQ3NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1OCIgdHlwZT0idG5zOlBvcnRUeXBlNzU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1OCIgYmluZGluZz0idG5zOkJpbmRpbmc3NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzU5IiBuYW1lPSJJbnB1dDc1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTkiIG5hbWU9Ik91dHB1dDc1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjAiIG5hbWU9IklucHV0NzYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2MCIgbmFtZT0iT3V0cHV0NzYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjAiIHR5cGU9InRuczpQb3J0VHlwZTc2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2MSIgbmFtZT0iSW5wdXQ3NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYxIiBuYW1lPSJPdXRwdXQ3NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2MSIgdHlwZT0idG5zOlBvcnRUeXBlNzYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2MSIgYmluZGluZz0idG5zOkJpbmRpbmc3NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYyIiBuYW1lPSJJbnB1dDc2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjIiIG5hbWU9Ik91dHB1dDc2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjMiIG5hbWU9IklucHV0NzYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2MyIgbmFtZT0iT3V0cHV0NzYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjMiIHR5cGU9InRuczpQb3J0VHlwZTc2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2NCIgbmFtZT0iSW5wdXQ3NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzY0IiBuYW1lPSJPdXRwdXQ3NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2NCIgdHlwZT0idG5zOlBvcnRUeXBlNzY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzY1IiBuYW1lPSJJbnB1dDc2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjUiIG5hbWU9Ik91dHB1dDc2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjYiIG5hbWU9IklucHV0NzY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2NiIgbmFtZT0iT3V0cHV0NzY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjYiIHR5cGU9InRuczpQb3J0VHlwZTc2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2NyIgbmFtZT0iSW5wdXQ3NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzY3IiBuYW1lPSJPdXRwdXQ3NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2NyIgdHlwZT0idG5zOlBvcnRUeXBlNzY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzY4IiBuYW1lPSJJbnB1dDc2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjgiIG5hbWU9Ik91dHB1dDc2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjkiIG5hbWU9IklucHV0NzY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2OSIgbmFtZT0iT3V0cHV0NzY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjkiIHR5cGU9InRuczpQb3J0VHlwZTc2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3MCIgbmFtZT0iSW5wdXQ3NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzcwIiBuYW1lPSJPdXRwdXQ3NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3MCIgdHlwZT0idG5zOlBvcnRUeXBlNzcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3MCIgYmluZGluZz0idG5zOkJpbmRpbmc3NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzcxIiBuYW1lPSJJbnB1dDc3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzEiIG5hbWU9Ik91dHB1dDc3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzIiIG5hbWU9IklucHV0NzcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3MiIgbmFtZT0iT3V0cHV0NzcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzIiIHR5cGU9InRuczpQb3J0VHlwZTc3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3MyIgbmFtZT0iSW5wdXQ3NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzczIiBuYW1lPSJPdXRwdXQ3NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3MyIgdHlwZT0idG5zOlBvcnRUeXBlNzczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3MyIgYmluZGluZz0idG5zOkJpbmRpbmc3NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzc0IiBuYW1lPSJJbnB1dDc3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzQiIG5hbWU9Ik91dHB1dDc3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzUiIG5hbWU9IklucHV0Nzc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3NSIgbmFtZT0iT3V0cHV0Nzc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzUiIHR5cGU9InRuczpQb3J0VHlwZTc3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3NiIgbmFtZT0iSW5wdXQ3NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzc2IiBuYW1lPSJPdXRwdXQ3NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3NiIgdHlwZT0idG5zOlBvcnRUeXBlNzc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzc3IiBuYW1lPSJJbnB1dDc3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzciIG5hbWU9Ik91dHB1dDc3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzgiIG5hbWU9IklucHV0Nzc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3OCIgbmFtZT0iT3V0cHV0Nzc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzgiIHR5cGU9InRuczpQb3J0VHlwZTc3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3OSIgbmFtZT0iSW5wdXQ3NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzc5IiBuYW1lPSJPdXRwdXQ3NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3OSIgdHlwZT0idG5zOlBvcnRUeXBlNzc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3OSIgYmluZGluZz0idG5zOkJpbmRpbmc3NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgwIiBuYW1lPSJJbnB1dDc4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODAiIG5hbWU9Ik91dHB1dDc4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODEiIG5hbWU9IklucHV0NzgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4MSIgbmFtZT0iT3V0cHV0NzgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODEiIHR5cGU9InRuczpQb3J0VHlwZTc4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4MiIgbmFtZT0iSW5wdXQ3ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgyIiBuYW1lPSJPdXRwdXQ3ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4MiIgdHlwZT0idG5zOlBvcnRUeXBlNzgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4MiIgYmluZGluZz0idG5zOkJpbmRpbmc3ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgzIiBuYW1lPSJJbnB1dDc4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODMiIG5hbWU9Ik91dHB1dDc4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODQiIG5hbWU9IklucHV0Nzg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4NCIgbmFtZT0iT3V0cHV0Nzg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODQiIHR5cGU9InRuczpQb3J0VHlwZTc4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4NSIgbmFtZT0iSW5wdXQ3ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzg1IiBuYW1lPSJPdXRwdXQ3ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4NSIgdHlwZT0idG5zOlBvcnRUeXBlNzg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4NSIgYmluZGluZz0idG5zOkJpbmRpbmc3ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzg2IiBuYW1lPSJJbnB1dDc4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODYiIG5hbWU9Ik91dHB1dDc4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODciIG5hbWU9IklucHV0Nzg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4NyIgbmFtZT0iT3V0cHV0Nzg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODciIHR5cGU9InRuczpQb3J0VHlwZTc4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODciIGJpbmRpbmc9InRuczpCaW5kaW5nNzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4OCIgbmFtZT0iSW5wdXQ3ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzg4IiBuYW1lPSJPdXRwdXQ3ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4OCIgdHlwZT0idG5zOlBvcnRUeXBlNzg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4OCIgYmluZGluZz0idG5zOkJpbmRpbmc3ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzg5IiBuYW1lPSJJbnB1dDc4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODkiIG5hbWU9Ik91dHB1dDc4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTAiIG5hbWU9IklucHV0NzkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5MCIgbmFtZT0iT3V0cHV0NzkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTAiIHR5cGU9InRuczpQb3J0VHlwZTc5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5MSIgbmFtZT0iSW5wdXQ3OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkxIiBuYW1lPSJPdXRwdXQ3OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5MSIgdHlwZT0idG5zOlBvcnRUeXBlNzkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5MSIgYmluZGluZz0idG5zOkJpbmRpbmc3OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkyIiBuYW1lPSJJbnB1dDc5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTIiIG5hbWU9Ik91dHB1dDc5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTMiIG5hbWU9IklucHV0NzkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5MyIgbmFtZT0iT3V0cHV0NzkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTMiIHR5cGU9InRuczpQb3J0VHlwZTc5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5NCIgbmFtZT0iSW5wdXQ3OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzk0IiBuYW1lPSJPdXRwdXQ3OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5NCIgdHlwZT0idG5zOlBvcnRUeXBlNzk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5NCIgYmluZGluZz0idG5zOkJpbmRpbmc3OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzk1IiBuYW1lPSJJbnB1dDc5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTUiIG5hbWU9Ik91dHB1dDc5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTYiIG5hbWU9IklucHV0Nzk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5NiIgbmFtZT0iT3V0cHV0Nzk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTYiIHR5cGU9InRuczpQb3J0VHlwZTc5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5NyIgbmFtZT0iSW5wdXQ3OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzk3IiBuYW1lPSJPdXRwdXQ3OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5NyIgdHlwZT0idG5zOlBvcnRUeXBlNzk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5NyIgYmluZGluZz0idG5zOkJpbmRpbmc3OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzk4IiBuYW1lPSJJbnB1dDc5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTgiIG5hbWU9Ik91dHB1dDc5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTkiIG5hbWU9IklucHV0Nzk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5OSIgbmFtZT0iT3V0cHV0Nzk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTkiIHR5cGU9InRuczpQb3J0VHlwZTc5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwMCIgbmFtZT0iSW5wdXQ4MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAwIiBuYW1lPSJPdXRwdXQ4MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwMCIgdHlwZT0idG5zOlBvcnRUeXBlODAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwMCIgYmluZGluZz0idG5zOkJpbmRpbmc4MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAxIiBuYW1lPSJJbnB1dDgwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDEiIG5hbWU9Ik91dHB1dDgwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDIiIG5hbWU9IklucHV0ODAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwMiIgbmFtZT0iT3V0cHV0ODAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDIiIHR5cGU9InRuczpQb3J0VHlwZTgwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nODAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwMyIgbmFtZT0iSW5wdXQ4MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAzIiBuYW1lPSJPdXRwdXQ4MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwMyIgdHlwZT0idG5zOlBvcnRUeXBlODAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwMyIgYmluZGluZz0idG5zOkJpbmRpbmc4MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODA0IiBuYW1lPSJJbnB1dDgwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDQiIG5hbWU9Ik91dHB1dDgwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDUiIG5hbWU9IklucHV0ODA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwNSIgbmFtZT0iT3V0cHV0ODA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDUiIHR5cGU9InRuczpQb3J0VHlwZTgwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nODA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwNiIgbmFtZT0iSW5wdXQ4MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODA2IiBuYW1lPSJPdXRwdXQ4MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwNiIgdHlwZT0idG5zOlBvcnRUeXBlODA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwNiIgYmluZGluZz0idG5zOkJpbmRpbmc4MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODA3IiBuYW1lPSJJbnB1dDgwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDciIG5hbWU9Ik91dHB1dDgwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDgiIG5hbWU9IklucHV0ODA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwOCIgbmFtZT0iT3V0cHV0ODA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDgiIHR5cGU9InRuczpQb3J0VHlwZTgwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nODA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwOSIgbmFtZT0iSW5wdXQ4MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODA5IiBuYW1lPSJPdXRwdXQ4MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwOSIgdHlwZT0idG5zOlBvcnRUeXBlODA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwOSIgYmluZGluZz0idG5zOkJpbmRpbmc4MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEwIiBuYW1lPSJJbnB1dDgxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTAiIG5hbWU9Ik91dHB1dDgxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTEiIG5hbWU9IklucHV0ODExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxMSIgbmFtZT0iT3V0cHV0ODExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTEiIHR5cGU9InRuczpQb3J0VHlwZTgxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nODExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxMiIgbmFtZT0iSW5wdXQ4MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEyIiBuYW1lPSJPdXRwdXQ4MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxMiIgdHlwZT0idG5zOlBvcnRUeXBlODEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxMiIgYmluZGluZz0idG5zOkJpbmRpbmc4MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEzIiBuYW1lPSJJbnB1dDgxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTMiIG5hbWU9Ik91dHB1dDgxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTQiIG5hbWU9IklucHV0ODE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxNCIgbmFtZT0iT3V0cHV0ODE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTQiIHR5cGU9InRuczpQb3J0VHlwZTgxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nODE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxNSIgbmFtZT0iSW5wdXQ4MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODE1IiBuYW1lPSJPdXRwdXQ4MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxNSIgdHlwZT0idG5zOlBvcnRUeXBlODE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxNSIgYmluZGluZz0idG5zOkJpbmRpbmc4MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODE2IiBuYW1lPSJJbnB1dDgxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTYiIG5hbWU9Ik91dHB1dDgxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTciIG5hbWU9IklucHV0ODE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxNyIgbmFtZT0iT3V0cHV0ODE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTciIHR5cGU9InRuczpQb3J0VHlwZTgxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTciIGJpbmRpbmc9InRuczpCaW5kaW5nODE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxOCIgbmFtZT0iSW5wdXQ4MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODE4IiBuYW1lPSJPdXRwdXQ4MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxOCIgdHlwZT0idG5zOlBvcnRUeXBlODE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxOCIgYmluZGluZz0idG5zOkJpbmRpbmc4MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODE5IiBuYW1lPSJJbnB1dDgxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTkiIG5hbWU9Ik91dHB1dDgxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjAiIG5hbWU9IklucHV0ODIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyMCIgbmFtZT0iT3V0cHV0ODIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjAiIHR5cGU9InRuczpQb3J0VHlwZTgyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nODIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyMSIgbmFtZT0iSW5wdXQ4MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIxIiBuYW1lPSJPdXRwdXQ4MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyMSIgdHlwZT0idG5zOlBvcnRUeXBlODIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyMSIgYmluZGluZz0idG5zOkJpbmRpbmc4MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIyIiBuYW1lPSJJbnB1dDgyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjIiIG5hbWU9Ik91dHB1dDgyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjMiIG5hbWU9IklucHV0ODIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyMyIgbmFtZT0iT3V0cHV0ODIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjMiIHR5cGU9InRuczpQb3J0VHlwZTgyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nODIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyNCIgbmFtZT0iSW5wdXQ4MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODI0IiBuYW1lPSJPdXRwdXQ4MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyNCIgdHlwZT0idG5zOlBvcnRUeXBlODI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyNCIgYmluZGluZz0idG5zOkJpbmRpbmc4MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODI1IiBuYW1lPSJJbnB1dDgyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjUiIG5hbWU9Ik91dHB1dDgyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjYiIG5hbWU9IklucHV0ODI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyNiIgbmFtZT0iT3V0cHV0ODI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjYiIHR5cGU9InRuczpQb3J0VHlwZTgyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nODI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyNyIgbmFtZT0iSW5wdXQ4MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODI3IiBuYW1lPSJPdXRwdXQ4MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyNyIgdHlwZT0idG5zOlBvcnRUeXBlODI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyNyIgYmluZGluZz0idG5zOkJpbmRpbmc4MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODI4IiBuYW1lPSJJbnB1dDgyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjgiIG5hbWU9Ik91dHB1dDgyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjkiIG5hbWU9IklucHV0ODI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyOSIgbmFtZT0iT3V0cHV0ODI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjkiIHR5cGU9InRuczpQb3J0VHlwZTgyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nODI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzMCIgbmFtZT0iSW5wdXQ4MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMwIiBuYW1lPSJPdXRwdXQ4MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzMCIgdHlwZT0idG5zOlBvcnRUeXBlODMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzMCIgYmluZGluZz0idG5zOkJpbmRpbmc4MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMxIiBuYW1lPSJJbnB1dDgzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzEiIG5hbWU9Ik91dHB1dDgzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzIiIG5hbWU9IklucHV0ODMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzMiIgbmFtZT0iT3V0cHV0ODMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzIiIHR5cGU9InRuczpQb3J0VHlwZTgzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nODMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzMyIgbmFtZT0iSW5wdXQ4MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMzIiBuYW1lPSJPdXRwdXQ4MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzMyIgdHlwZT0idG5zOlBvcnRUeXBlODMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzMyIgYmluZGluZz0idG5zOkJpbmRpbmc4MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODM0IiBuYW1lPSJJbnB1dDgzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzQiIG5hbWU9Ik91dHB1dDgzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzUiIG5hbWU9IklucHV0ODM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzNSIgbmFtZT0iT3V0cHV0ODM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzUiIHR5cGU9InRuczpQb3J0VHlwZTgzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nODM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzNiIgbmFtZT0iSW5wdXQ4MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODM2IiBuYW1lPSJPdXRwdXQ4MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzNiIgdHlwZT0idG5zOlBvcnRUeXBlODM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzNiIgYmluZGluZz0idG5zOkJpbmRpbmc4MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODM3IiBuYW1lPSJJbnB1dDgzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzciIG5hbWU9Ik91dHB1dDgzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzgiIG5hbWU9IklucHV0ODM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzOCIgbmFtZT0iT3V0cHV0ODM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzgiIHR5cGU9InRuczpQb3J0VHlwZTgzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nODM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzOSIgbmFtZT0iSW5wdXQ4MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODM5IiBuYW1lPSJPdXRwdXQ4MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzOSIgdHlwZT0idG5zOlBvcnRUeXBlODM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzOSIgYmluZGluZz0idG5zOkJpbmRpbmc4MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQwIiBuYW1lPSJJbnB1dDg0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDAiIG5hbWU9Ik91dHB1dDg0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDEiIG5hbWU9IklucHV0ODQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0MSIgbmFtZT0iT3V0cHV0ODQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDEiIHR5cGU9InRuczpQb3J0VHlwZTg0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nODQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0MiIgbmFtZT0iSW5wdXQ4NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQyIiBuYW1lPSJPdXRwdXQ4NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0MiIgdHlwZT0idG5zOlBvcnRUeXBlODQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0MiIgYmluZGluZz0idG5zOkJpbmRpbmc4NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQzIiBuYW1lPSJJbnB1dDg0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDMiIG5hbWU9Ik91dHB1dDg0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDQiIG5hbWU9IklucHV0ODQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0NCIgbmFtZT0iT3V0cHV0ODQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDQiIHR5cGU9InRuczpQb3J0VHlwZTg0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nODQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0NSIgbmFtZT0iSW5wdXQ4NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQ1IiBuYW1lPSJPdXRwdXQ4NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0NSIgdHlwZT0idG5zOlBvcnRUeXBlODQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQ2IiBuYW1lPSJJbnB1dDg0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDYiIG5hbWU9Ik91dHB1dDg0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDciIG5hbWU9IklucHV0ODQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0NyIgbmFtZT0iT3V0cHV0ODQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDciIHR5cGU9InRuczpQb3J0VHlwZTg0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDciIGJpbmRpbmc9InRuczpCaW5kaW5nODQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0OCIgbmFtZT0iSW5wdXQ4NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQ4IiBuYW1lPSJPdXRwdXQ4NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0OCIgdHlwZT0idG5zOlBvcnRUeXBlODQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0OCIgYmluZGluZz0idG5zOkJpbmRpbmc4NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQ5IiBuYW1lPSJJbnB1dDg0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDkiIG5hbWU9Ik91dHB1dDg0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTAiIG5hbWU9IklucHV0ODUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1MCIgbmFtZT0iT3V0cHV0ODUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTAiIHR5cGU9InRuczpQb3J0VHlwZTg1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nODUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1MSIgbmFtZT0iSW5wdXQ4NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUxIiBuYW1lPSJPdXRwdXQ4NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1MSIgdHlwZT0idG5zOlBvcnRUeXBlODUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1MSIgYmluZGluZz0idG5zOkJpbmRpbmc4NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUyIiBuYW1lPSJJbnB1dDg1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTIiIG5hbWU9Ik91dHB1dDg1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTMiIG5hbWU9IklucHV0ODUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1MyIgbmFtZT0iT3V0cHV0ODUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTMiIHR5cGU9InRuczpQb3J0VHlwZTg1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nODUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1NCIgbmFtZT0iSW5wdXQ4NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODU0IiBuYW1lPSJPdXRwdXQ4NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1NCIgdHlwZT0idG5zOlBvcnRUeXBlODU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODU1IiBuYW1lPSJJbnB1dDg1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTUiIG5hbWU9Ik91dHB1dDg1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTYiIG5hbWU9IklucHV0ODU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1NiIgbmFtZT0iT3V0cHV0ODU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTYiIHR5cGU9InRuczpQb3J0VHlwZTg1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nODU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1NyIgbmFtZT0iSW5wdXQ4NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODU3IiBuYW1lPSJPdXRwdXQ4NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1NyIgdHlwZT0idG5zOlBvcnRUeXBlODU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODU4IiBuYW1lPSJJbnB1dDg1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTgiIG5hbWU9Ik91dHB1dDg1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTkiIG5hbWU9IklucHV0ODU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1OSIgbmFtZT0iT3V0cHV0ODU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTkiIHR5cGU9InRuczpQb3J0VHlwZTg1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nODU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2MCIgbmFtZT0iSW5wdXQ4NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYwIiBuYW1lPSJPdXRwdXQ4NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2MCIgdHlwZT0idG5zOlBvcnRUeXBlODYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2MCIgYmluZGluZz0idG5zOkJpbmRpbmc4NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYxIiBuYW1lPSJJbnB1dDg2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjEiIG5hbWU9Ik91dHB1dDg2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjIiIG5hbWU9IklucHV0ODYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2MiIgbmFtZT0iT3V0cHV0ODYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjIiIHR5cGU9InRuczpQb3J0VHlwZTg2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nODYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2MyIgbmFtZT0iSW5wdXQ4NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYzIiBuYW1lPSJPdXRwdXQ4NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2MyIgdHlwZT0idG5zOlBvcnRUeXBlODYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2MyIgYmluZGluZz0idG5zOkJpbmRpbmc4NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODY0IiBuYW1lPSJJbnB1dDg2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjQiIG5hbWU9Ik91dHB1dDg2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjUiIG5hbWU9IklucHV0ODY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2NSIgbmFtZT0iT3V0cHV0ODY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjUiIHR5cGU9InRuczpQb3J0VHlwZTg2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nODY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2NiIgbmFtZT0iSW5wdXQ4NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODY2IiBuYW1lPSJPdXRwdXQ4NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2NiIgdHlwZT0idG5zOlBvcnRUeXBlODY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODY3IiBuYW1lPSJJbnB1dDg2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjciIG5hbWU9Ik91dHB1dDg2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjgiIG5hbWU9IklucHV0ODY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2OCIgbmFtZT0iT3V0cHV0ODY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjgiIHR5cGU9InRuczpQb3J0VHlwZTg2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nODY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2OSIgbmFtZT0iSW5wdXQ4NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODY5IiBuYW1lPSJPdXRwdXQ4NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2OSIgdHlwZT0idG5zOlBvcnRUeXBlODY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2OSIgYmluZGluZz0idG5zOkJpbmRpbmc4NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODcwIiBuYW1lPSJJbnB1dDg3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzAiIG5hbWU9Ik91dHB1dDg3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzEiIG5hbWU9IklucHV0ODcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3MSIgbmFtZT0iT3V0cHV0ODcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzEiIHR5cGU9InRuczpQb3J0VHlwZTg3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nODcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3MiIgbmFtZT0iSW5wdXQ4NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODcyIiBuYW1lPSJPdXRwdXQ4NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3MiIgdHlwZT0idG5zOlBvcnRUeXBlODcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3MiIgYmluZGluZz0idG5zOkJpbmRpbmc4NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODczIiBuYW1lPSJJbnB1dDg3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzMiIG5hbWU9Ik91dHB1dDg3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODczIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzQiIG5hbWU9IklucHV0ODc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3NCIgbmFtZT0iT3V0cHV0ODc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzQiIHR5cGU9InRuczpQb3J0VHlwZTg3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nODc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3NSIgbmFtZT0iSW5wdXQ4NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODc1IiBuYW1lPSJPdXRwdXQ4NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3NSIgdHlwZT0idG5zOlBvcnRUeXBlODc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODc2IiBuYW1lPSJJbnB1dDg3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzYiIG5hbWU9Ik91dHB1dDg3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzciIG5hbWU9IklucHV0ODc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3NyIgbmFtZT0iT3V0cHV0ODc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzciIHR5cGU9InRuczpQb3J0VHlwZTg3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzciIGJpbmRpbmc9InRuczpCaW5kaW5nODc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3OCIgbmFtZT0iSW5wdXQ4NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODc4IiBuYW1lPSJPdXRwdXQ4NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3OCIgdHlwZT0idG5zOlBvcnRUeXBlODc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3OCIgYmluZGluZz0idG5zOkJpbmRpbmc4NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODc5IiBuYW1lPSJJbnB1dDg3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzkiIG5hbWU9Ik91dHB1dDg3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODAiIG5hbWU9IklucHV0ODgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4MCIgbmFtZT0iT3V0cHV0ODgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODAiIHR5cGU9InRuczpQb3J0VHlwZTg4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nODgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4MSIgbmFtZT0iSW5wdXQ4ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgxIiBuYW1lPSJPdXRwdXQ4ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4MSIgdHlwZT0idG5zOlBvcnRUeXBlODgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4MSIgYmluZGluZz0idG5zOkJpbmRpbmc4ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgyIiBuYW1lPSJJbnB1dDg4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODIiIG5hbWU9Ik91dHB1dDg4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODMiIG5hbWU9IklucHV0ODgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4MyIgbmFtZT0iT3V0cHV0ODgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODMiIHR5cGU9InRuczpQb3J0VHlwZTg4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nODgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4NCIgbmFtZT0iSW5wdXQ4ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODg0IiBuYW1lPSJPdXRwdXQ4ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4NCIgdHlwZT0idG5zOlBvcnRUeXBlODg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4NCIgYmluZGluZz0idG5zOkJpbmRpbmc4ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODg1IiBuYW1lPSJJbnB1dDg4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODUiIG5hbWU9Ik91dHB1dDg4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODYiIG5hbWU9IklucHV0ODg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4NiIgbmFtZT0iT3V0cHV0ODg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODYiIHR5cGU9InRuczpQb3J0VHlwZTg4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nODg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4NyIgbmFtZT0iSW5wdXQ4ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODg3IiBuYW1lPSJPdXRwdXQ4ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4NyIgdHlwZT0idG5zOlBvcnRUeXBlODg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4NyIgYmluZGluZz0idG5zOkJpbmRpbmc4ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODg4IiBuYW1lPSJJbnB1dDg4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODgiIG5hbWU9Ik91dHB1dDg4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODkiIG5hbWU9IklucHV0ODg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4OSIgbmFtZT0iT3V0cHV0ODg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODkiIHR5cGU9InRuczpQb3J0VHlwZTg4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nODg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5MCIgbmFtZT0iSW5wdXQ4OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkwIiBuYW1lPSJPdXRwdXQ4OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5MCIgdHlwZT0idG5zOlBvcnRUeXBlODkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5MCIgYmluZGluZz0idG5zOkJpbmRpbmc4OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkxIiBuYW1lPSJJbnB1dDg5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTEiIG5hbWU9Ik91dHB1dDg5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTIiIG5hbWU9IklucHV0ODkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5MiIgbmFtZT0iT3V0cHV0ODkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTIiIHR5cGU9InRuczpQb3J0VHlwZTg5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nODkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5MyIgbmFtZT0iSW5wdXQ4OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkzIiBuYW1lPSJPdXRwdXQ4OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5MyIgdHlwZT0idG5zOlBvcnRUeXBlODkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5MyIgYmluZGluZz0idG5zOkJpbmRpbmc4OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODk0IiBuYW1lPSJJbnB1dDg5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTQiIG5hbWU9Ik91dHB1dDg5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTUiIG5hbWU9IklucHV0ODk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5NSIgbmFtZT0iT3V0cHV0ODk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTUiIHR5cGU9InRuczpQb3J0VHlwZTg5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nODk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5NiIgbmFtZT0iSW5wdXQ4OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODk2IiBuYW1lPSJPdXRwdXQ4OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5NiIgdHlwZT0idG5zOlBvcnRUeXBlODk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5NiIgYmluZGluZz0idG5zOkJpbmRpbmc4OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODk3IiBuYW1lPSJJbnB1dDg5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTciIG5hbWU9Ik91dHB1dDg5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTgiIG5hbWU9IklucHV0ODk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5OCIgbmFtZT0iT3V0cHV0ODk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTgiIHR5cGU9InRuczpQb3J0VHlwZTg5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nODk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5OSIgbmFtZT0iSW5wdXQ4OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODk5IiBuYW1lPSJPdXRwdXQ4OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5OSIgdHlwZT0idG5zOlBvcnRUeXBlODk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5OSIgYmluZGluZz0idG5zOkJpbmRpbmc4OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAwIiBuYW1lPSJJbnB1dDkwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDAiIG5hbWU9Ik91dHB1dDkwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDEiIG5hbWU9IklucHV0OTAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwMSIgbmFtZT0iT3V0cHV0OTAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDEiIHR5cGU9InRuczpQb3J0VHlwZTkwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwMiIgbmFtZT0iSW5wdXQ5MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAyIiBuYW1lPSJPdXRwdXQ5MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwMiIgdHlwZT0idG5zOlBvcnRUeXBlOTAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwMiIgYmluZGluZz0idG5zOkJpbmRpbmc5MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAzIiBuYW1lPSJJbnB1dDkwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDMiIG5hbWU9Ik91dHB1dDkwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDQiIG5hbWU9IklucHV0OTA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwNCIgbmFtZT0iT3V0cHV0OTA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDQiIHR5cGU9InRuczpQb3J0VHlwZTkwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwNSIgbmFtZT0iSW5wdXQ5MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTA1IiBuYW1lPSJPdXRwdXQ5MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwNSIgdHlwZT0idG5zOlBvcnRUeXBlOTA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwNSIgYmluZGluZz0idG5zOkJpbmRpbmc5MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTA2IiBuYW1lPSJJbnB1dDkwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDYiIG5hbWU9Ik91dHB1dDkwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDciIG5hbWU9IklucHV0OTA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwNyIgbmFtZT0iT3V0cHV0OTA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDciIHR5cGU9InRuczpQb3J0VHlwZTkwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDciIGJpbmRpbmc9InRuczpCaW5kaW5nOTA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwOCIgbmFtZT0iSW5wdXQ5MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTA4IiBuYW1lPSJPdXRwdXQ5MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwOCIgdHlwZT0idG5zOlBvcnRUeXBlOTA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwOCIgYmluZGluZz0idG5zOkJpbmRpbmc5MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTA5IiBuYW1lPSJJbnB1dDkwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDkiIG5hbWU9Ik91dHB1dDkwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTAiIG5hbWU9IklucHV0OTEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxMCIgbmFtZT0iT3V0cHV0OTEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTAiIHR5cGU9InRuczpQb3J0VHlwZTkxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxMSIgbmFtZT0iSW5wdXQ5MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTExIiBuYW1lPSJPdXRwdXQ5MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxMSIgdHlwZT0idG5zOlBvcnRUeXBlOTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxMSIgYmluZGluZz0idG5zOkJpbmRpbmc5MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEyIiBuYW1lPSJJbnB1dDkxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTIiIG5hbWU9Ik91dHB1dDkxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTMiIG5hbWU9IklucHV0OTEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxMyIgbmFtZT0iT3V0cHV0OTEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTMiIHR5cGU9InRuczpQb3J0VHlwZTkxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxNCIgbmFtZT0iSW5wdXQ5MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTE0IiBuYW1lPSJPdXRwdXQ5MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxNCIgdHlwZT0idG5zOlBvcnRUeXBlOTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxNCIgYmluZGluZz0idG5zOkJpbmRpbmc5MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTE1IiBuYW1lPSJJbnB1dDkxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTUiIG5hbWU9Ik91dHB1dDkxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTYiIG5hbWU9IklucHV0OTE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxNiIgbmFtZT0iT3V0cHV0OTE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTYiIHR5cGU9InRuczpQb3J0VHlwZTkxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxNyIgbmFtZT0iSW5wdXQ5MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTE3IiBuYW1lPSJPdXRwdXQ5MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxNyIgdHlwZT0idG5zOlBvcnRUeXBlOTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxNyIgYmluZGluZz0idG5zOkJpbmRpbmc5MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTE4IiBuYW1lPSJJbnB1dDkxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTgiIG5hbWU9Ik91dHB1dDkxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTkiIG5hbWU9IklucHV0OTE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxOSIgbmFtZT0iT3V0cHV0OTE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTkiIHR5cGU9InRuczpQb3J0VHlwZTkxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyMCIgbmFtZT0iSW5wdXQ5MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIwIiBuYW1lPSJPdXRwdXQ5MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyMCIgdHlwZT0idG5zOlBvcnRUeXBlOTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyMCIgYmluZGluZz0idG5zOkJpbmRpbmc5MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIxIiBuYW1lPSJJbnB1dDkyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjEiIG5hbWU9Ik91dHB1dDkyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjIiIG5hbWU9IklucHV0OTIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyMiIgbmFtZT0iT3V0cHV0OTIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjIiIHR5cGU9InRuczpQb3J0VHlwZTkyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyMyIgbmFtZT0iSW5wdXQ5MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIzIiBuYW1lPSJPdXRwdXQ5MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyMyIgdHlwZT0idG5zOlBvcnRUeXBlOTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyMyIgYmluZGluZz0idG5zOkJpbmRpbmc5MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTI0IiBuYW1lPSJJbnB1dDkyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjQiIG5hbWU9Ik91dHB1dDkyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjUiIG5hbWU9IklucHV0OTI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyNSIgbmFtZT0iT3V0cHV0OTI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjUiIHR5cGU9InRuczpQb3J0VHlwZTkyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyNiIgbmFtZT0iSW5wdXQ5MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTI2IiBuYW1lPSJPdXRwdXQ5MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyNiIgdHlwZT0idG5zOlBvcnRUeXBlOTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyNiIgYmluZGluZz0idG5zOkJpbmRpbmc5MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTI3IiBuYW1lPSJJbnB1dDkyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjciIG5hbWU9Ik91dHB1dDkyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjgiIG5hbWU9IklucHV0OTI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyOCIgbmFtZT0iT3V0cHV0OTI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjgiIHR5cGU9InRuczpQb3J0VHlwZTkyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyOSIgbmFtZT0iSW5wdXQ5MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTI5IiBuYW1lPSJPdXRwdXQ5MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyOSIgdHlwZT0idG5zOlBvcnRUeXBlOTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyOSIgYmluZGluZz0idG5zOkJpbmRpbmc5MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMwIiBuYW1lPSJJbnB1dDkzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzAiIG5hbWU9Ik91dHB1dDkzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzEiIG5hbWU9IklucHV0OTMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzMSIgbmFtZT0iT3V0cHV0OTMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzEiIHR5cGU9InRuczpQb3J0VHlwZTkzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzMiIgbmFtZT0iSW5wdXQ5MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMyIiBuYW1lPSJPdXRwdXQ5MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzMiIgdHlwZT0idG5zOlBvcnRUeXBlOTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzMiIgYmluZGluZz0idG5zOkJpbmRpbmc5MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMzIiBuYW1lPSJJbnB1dDkzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzMiIG5hbWU9Ik91dHB1dDkzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzQiIG5hbWU9IklucHV0OTM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzNCIgbmFtZT0iT3V0cHV0OTM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzQiIHR5cGU9InRuczpQb3J0VHlwZTkzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzNSIgbmFtZT0iSW5wdXQ5MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTM1IiBuYW1lPSJPdXRwdXQ5MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzNSIgdHlwZT0idG5zOlBvcnRUeXBlOTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzNSIgYmluZGluZz0idG5zOkJpbmRpbmc5MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTM2IiBuYW1lPSJJbnB1dDkzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzYiIG5hbWU9Ik91dHB1dDkzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzciIG5hbWU9IklucHV0OTM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzNyIgbmFtZT0iT3V0cHV0OTM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzciIHR5cGU9InRuczpQb3J0VHlwZTkzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzciIGJpbmRpbmc9InRuczpCaW5kaW5nOTM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzOCIgbmFtZT0iSW5wdXQ5MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTM4IiBuYW1lPSJPdXRwdXQ5MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzOCIgdHlwZT0idG5zOlBvcnRUeXBlOTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzOCIgYmluZGluZz0idG5zOkJpbmRpbmc5MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTM5IiBuYW1lPSJJbnB1dDkzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzkiIG5hbWU9Ik91dHB1dDkzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDAiIG5hbWU9IklucHV0OTQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0MCIgbmFtZT0iT3V0cHV0OTQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDAiIHR5cGU9InRuczpQb3J0VHlwZTk0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0MSIgbmFtZT0iSW5wdXQ5NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQxIiBuYW1lPSJPdXRwdXQ5NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0MSIgdHlwZT0idG5zOlBvcnRUeXBlOTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0MSIgYmluZGluZz0idG5zOkJpbmRpbmc5NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQyIiBuYW1lPSJJbnB1dDk0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDIiIG5hbWU9Ik91dHB1dDk0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDMiIG5hbWU9IklucHV0OTQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0MyIgbmFtZT0iT3V0cHV0OTQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDMiIHR5cGU9InRuczpQb3J0VHlwZTk0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0NCIgbmFtZT0iSW5wdXQ5NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQ0IiBuYW1lPSJPdXRwdXQ5NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0NCIgdHlwZT0idG5zOlBvcnRUeXBlOTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQ1IiBuYW1lPSJJbnB1dDk0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDUiIG5hbWU9Ik91dHB1dDk0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDYiIG5hbWU9IklucHV0OTQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0NiIgbmFtZT0iT3V0cHV0OTQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDYiIHR5cGU9InRuczpQb3J0VHlwZTk0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0NyIgbmFtZT0iSW5wdXQ5NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQ3IiBuYW1lPSJPdXRwdXQ5NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0NyIgdHlwZT0idG5zOlBvcnRUeXBlOTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQ4IiBuYW1lPSJJbnB1dDk0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDgiIG5hbWU9Ik91dHB1dDk0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDkiIG5hbWU9IklucHV0OTQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0OSIgbmFtZT0iT3V0cHV0OTQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDkiIHR5cGU9InRuczpQb3J0VHlwZTk0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1MCIgbmFtZT0iSW5wdXQ5NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUwIiBuYW1lPSJPdXRwdXQ5NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1MCIgdHlwZT0idG5zOlBvcnRUeXBlOTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1MCIgYmluZGluZz0idG5zOkJpbmRpbmc5NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUxIiBuYW1lPSJJbnB1dDk1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTEiIG5hbWU9Ik91dHB1dDk1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTIiIG5hbWU9IklucHV0OTUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1MiIgbmFtZT0iT3V0cHV0OTUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTIiIHR5cGU9InRuczpQb3J0VHlwZTk1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1MyIgbmFtZT0iSW5wdXQ5NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUzIiBuYW1lPSJPdXRwdXQ5NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1MyIgdHlwZT0idG5zOlBvcnRUeXBlOTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1MyIgYmluZGluZz0idG5zOkJpbmRpbmc5NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTU0IiBuYW1lPSJJbnB1dDk1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTQiIG5hbWU9Ik91dHB1dDk1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTUiIG5hbWU9IklucHV0OTU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1NSIgbmFtZT0iT3V0cHV0OTU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTUiIHR5cGU9InRuczpQb3J0VHlwZTk1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1NiIgbmFtZT0iSW5wdXQ5NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTU2IiBuYW1lPSJPdXRwdXQ5NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1NiIgdHlwZT0idG5zOlBvcnRUeXBlOTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTU3IiBuYW1lPSJJbnB1dDk1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTciIG5hbWU9Ik91dHB1dDk1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTgiIG5hbWU9IklucHV0OTU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1OCIgbmFtZT0iT3V0cHV0OTU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTgiIHR5cGU9InRuczpQb3J0VHlwZTk1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1OSIgbmFtZT0iSW5wdXQ5NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTU5IiBuYW1lPSJPdXRwdXQ5NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1OSIgdHlwZT0idG5zOlBvcnRUeXBlOTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1OSIgYmluZGluZz0idG5zOkJpbmRpbmc5NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYwIiBuYW1lPSJJbnB1dDk2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjAiIG5hbWU9Ik91dHB1dDk2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjEiIG5hbWU9IklucHV0OTYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2MSIgbmFtZT0iT3V0cHV0OTYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjEiIHR5cGU9InRuczpQb3J0VHlwZTk2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2MiIgbmFtZT0iSW5wdXQ5NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYyIiBuYW1lPSJPdXRwdXQ5NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2MiIgdHlwZT0idG5zOlBvcnRUeXBlOTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2MiIgYmluZGluZz0idG5zOkJpbmRpbmc5NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYzIiBuYW1lPSJJbnB1dDk2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjMiIG5hbWU9Ik91dHB1dDk2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjQiIG5hbWU9IklucHV0OTY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2NCIgbmFtZT0iT3V0cHV0OTY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjQiIHR5cGU9InRuczpQb3J0VHlwZTk2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2NSIgbmFtZT0iSW5wdXQ5NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTY1IiBuYW1lPSJPdXRwdXQ5NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2NSIgdHlwZT0idG5zOlBvcnRUeXBlOTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTY2IiBuYW1lPSJJbnB1dDk2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjYiIG5hbWU9Ik91dHB1dDk2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjciIG5hbWU9IklucHV0OTY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2NyIgbmFtZT0iT3V0cHV0OTY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjciIHR5cGU9InRuczpQb3J0VHlwZTk2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjciIGJpbmRpbmc9InRuczpCaW5kaW5nOTY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2OCIgbmFtZT0iSW5wdXQ5NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTY4IiBuYW1lPSJPdXRwdXQ5NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2OCIgdHlwZT0idG5zOlBvcnRUeXBlOTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2OCIgYmluZGluZz0idG5zOkJpbmRpbmc5NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTY5IiBuYW1lPSJJbnB1dDk2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjkiIG5hbWU9Ik91dHB1dDk2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzAiIG5hbWU9IklucHV0OTcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3MCIgbmFtZT0iT3V0cHV0OTcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzAiIHR5cGU9InRuczpQb3J0VHlwZTk3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3MSIgbmFtZT0iSW5wdXQ5NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTcxIiBuYW1lPSJPdXRwdXQ5NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3MSIgdHlwZT0idG5zOlBvcnRUeXBlOTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3MSIgYmluZGluZz0idG5zOkJpbmRpbmc5NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTcyIiBuYW1lPSJJbnB1dDk3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzIiIG5hbWU9Ik91dHB1dDk3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzMiIG5hbWU9IklucHV0OTczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3MyIgbmFtZT0iT3V0cHV0OTczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzMiIHR5cGU9InRuczpQb3J0VHlwZTk3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3NCIgbmFtZT0iSW5wdXQ5NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTc0IiBuYW1lPSJPdXRwdXQ5NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3NCIgdHlwZT0idG5zOlBvcnRUeXBlOTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTc1IiBuYW1lPSJJbnB1dDk3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzUiIG5hbWU9Ik91dHB1dDk3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzYiIG5hbWU9IklucHV0OTc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3NiIgbmFtZT0iT3V0cHV0OTc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzYiIHR5cGU9InRuczpQb3J0VHlwZTk3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3NyIgbmFtZT0iSW5wdXQ5NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTc3IiBuYW1lPSJPdXRwdXQ5NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3NyIgdHlwZT0idG5zOlBvcnRUeXBlOTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTc4IiBuYW1lPSJJbnB1dDk3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzgiIG5hbWU9Ik91dHB1dDk3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzkiIG5hbWU9IklucHV0OTc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3OSIgbmFtZT0iT3V0cHV0OTc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzkiIHR5cGU9InRuczpQb3J0VHlwZTk3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4MCIgbmFtZT0iSW5wdXQ5ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgwIiBuYW1lPSJPdXRwdXQ5ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4MCIgdHlwZT0idG5zOlBvcnRUeXBlOTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4MCIgYmluZGluZz0idG5zOkJpbmRpbmc5ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgxIiBuYW1lPSJJbnB1dDk4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODEiIG5hbWU9Ik91dHB1dDk4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODIiIG5hbWU9IklucHV0OTgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4MiIgbmFtZT0iT3V0cHV0OTgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODIiIHR5cGU9InRuczpQb3J0VHlwZTk4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4MyIgbmFtZT0iSW5wdXQ5ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgzIiBuYW1lPSJPdXRwdXQ5ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4MyIgdHlwZT0idG5zOlBvcnRUeXBlOTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4MyIgYmluZGluZz0idG5zOkJpbmRpbmc5ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTg0IiBuYW1lPSJJbnB1dDk4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODQiIG5hbWU9Ik91dHB1dDk4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODUiIG5hbWU9IklucHV0OTg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4NSIgbmFtZT0iT3V0cHV0OTg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODUiIHR5cGU9InRuczpQb3J0VHlwZTk4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4NiIgbmFtZT0iSW5wdXQ5ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTg2IiBuYW1lPSJPdXRwdXQ5ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4NiIgdHlwZT0idG5zOlBvcnRUeXBlOTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4NiIgYmluZGluZz0idG5zOkJpbmRpbmc5ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTg3IiBuYW1lPSJJbnB1dDk4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODciIG5hbWU9Ik91dHB1dDk4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODgiIG5hbWU9IklucHV0OTg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4OCIgbmFtZT0iT3V0cHV0OTg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODgiIHR5cGU9InRuczpQb3J0VHlwZTk4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4OSIgbmFtZT0iSW5wdXQ5ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTg5IiBuYW1lPSJPdXRwdXQ5ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4OSIgdHlwZT0idG5zOlBvcnRUeXBlOTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4OSIgYmluZGluZz0idG5zOkJpbmRpbmc5ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkwIiBuYW1lPSJJbnB1dDk5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTAiIG5hbWU9Ik91dHB1dDk5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTEiIG5hbWU9IklucHV0OTkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5MSIgbmFtZT0iT3V0cHV0OTkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTEiIHR5cGU9InRuczpQb3J0VHlwZTk5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5MiIgbmFtZT0iSW5wdXQ5OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkyIiBuYW1lPSJPdXRwdXQ5OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5MiIgdHlwZT0idG5zOlBvcnRUeXBlOTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5MiIgYmluZGluZz0idG5zOkJpbmRpbmc5OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkzIiBuYW1lPSJJbnB1dDk5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTMiIG5hbWU9Ik91dHB1dDk5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTQiIG5hbWU9IklucHV0OTk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5NCIgbmFtZT0iT3V0cHV0OTk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTQiIHR5cGU9InRuczpQb3J0VHlwZTk5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5NSIgbmFtZT0iSW5wdXQ5OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTk1IiBuYW1lPSJPdXRwdXQ5OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5NSIgdHlwZT0idG5zOlBvcnRUeXBlOTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5NSIgYmluZGluZz0idG5zOkJpbmRpbmc5OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTk2IiBuYW1lPSJJbnB1dDk5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTYiIG5hbWU9Ik91dHB1dDk5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTciIG5hbWU9IklucHV0OTk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5NyIgbmFtZT0iT3V0cHV0OTk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTciIHR5cGU9InRuczpQb3J0VHlwZTk5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5OCIgbmFtZT0iSW5wdXQ5OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTk4IiBuYW1lPSJPdXRwdXQ5OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5OCIgdHlwZT0idG5zOlBvcnRUeXBlOTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5OCIgYmluZGluZz0idG5zOkJpbmRpbmc5OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTk5IiBuYW1lPSJJbnB1dDk5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTkiIG5hbWU9Ik91dHB1dDk5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzIwMEtCLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzIwMEtCLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZDM3MDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8yMDBLQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjIwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRGVmaW5pdGlvbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UwIiBuYW1lPSJJbnB1dDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMCIgbmFtZT0iT3V0cHV0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMCIgdHlwZT0idG5zOlBvcnRUeXBlMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMSIgbmFtZT0iSW5wdXQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEiIG5hbWU9Ik91dHB1dDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEiIHR5cGU9InRuczpQb3J0VHlwZTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIiIG5hbWU9IklucHV0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyIiBuYW1lPSJPdXRwdXQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzIiBuYW1lPSJJbnB1dDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMyIgbmFtZT0iT3V0cHV0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMyIgdHlwZT0idG5zOlBvcnRUeXBlMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNCIgbmFtZT0iSW5wdXQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQiIG5hbWU9Ik91dHB1dDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQiIHR5cGU9InRuczpQb3J0VHlwZTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUiIG5hbWU9IklucHV0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1IiBuYW1lPSJPdXRwdXQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2IiBuYW1lPSJJbnB1dDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNiIgbmFtZT0iT3V0cHV0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNiIgdHlwZT0idG5zOlBvcnRUeXBlNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNyIgbmFtZT0iSW5wdXQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTciIG5hbWU9Ik91dHB1dDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzciIHR5cGU9InRuczpQb3J0VHlwZTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgiIG5hbWU9IklucHV0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4IiBuYW1lPSJPdXRwdXQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5IiBuYW1lPSJJbnB1dDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOSIgbmFtZT0iT3V0cHV0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOSIgdHlwZT0idG5zOlBvcnRUeXBlOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAiIG5hbWU9IklucHV0MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAiIG5hbWU9Ik91dHB1dDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEiIG5hbWU9IklucHV0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEiIG5hbWU9Ik91dHB1dDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMSIgdHlwZT0idG5zOlBvcnRUeXBlMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIiIG5hbWU9IklucHV0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIiIG5hbWU9Ik91dHB1dDEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMiIG5hbWU9IklucHV0MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMiIG5hbWU9Ik91dHB1dDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQiIG5hbWU9IklucHV0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQiIG5hbWU9Ik91dHB1dDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNCIgdHlwZT0idG5zOlBvcnRUeXBlMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUiIG5hbWU9IklucHV0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUiIG5hbWU9Ik91dHB1dDE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNSIgdHlwZT0idG5zOlBvcnRUeXBlMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYiIG5hbWU9IklucHV0MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYiIG5hbWU9Ik91dHB1dDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNiIgdHlwZT0idG5zOlBvcnRUeXBlMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTciIG5hbWU9IklucHV0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTciIG5hbWU9Ik91dHB1dDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNyIgdHlwZT0idG5zOlBvcnRUeXBlMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgiIG5hbWU9IklucHV0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgiIG5hbWU9Ik91dHB1dDE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOCIgdHlwZT0idG5zOlBvcnRUeXBlMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkiIG5hbWU9IklucHV0MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkiIG5hbWU9Ik91dHB1dDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOSIgdHlwZT0idG5zOlBvcnRUeXBlMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAiIG5hbWU9IklucHV0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAiIG5hbWU9Ik91dHB1dDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEiIG5hbWU9IklucHV0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEiIG5hbWU9Ik91dHB1dDIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMSIgdHlwZT0idG5zOlBvcnRUeXBlMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIiIG5hbWU9IklucHV0MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIiIG5hbWU9Ik91dHB1dDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMiIG5hbWU9IklucHV0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMiIG5hbWU9Ik91dHB1dDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQiIG5hbWU9IklucHV0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQiIG5hbWU9Ik91dHB1dDI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNCIgdHlwZT0idG5zOlBvcnRUeXBlMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUiIG5hbWU9IklucHV0MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUiIG5hbWU9Ik91dHB1dDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYiIG5hbWU9IklucHV0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYiIG5hbWU9Ik91dHB1dDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjciIG5hbWU9IklucHV0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjciIG5hbWU9Ik91dHB1dDI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNyIgdHlwZT0idG5zOlBvcnRUeXBlMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgiIG5hbWU9IklucHV0MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgiIG5hbWU9Ik91dHB1dDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkiIG5hbWU9IklucHV0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkiIG5hbWU9Ik91dHB1dDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAiIG5hbWU9IklucHV0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAiIG5hbWU9Ik91dHB1dDMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEiIG5hbWU9IklucHV0MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEiIG5hbWU9Ik91dHB1dDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMSIgdHlwZT0idG5zOlBvcnRUeXBlMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIiIG5hbWU9IklucHV0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIiIG5hbWU9Ik91dHB1dDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMiIG5hbWU9IklucHV0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMiIG5hbWU9Ik91dHB1dDMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQiIG5hbWU9IklucHV0MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQiIG5hbWU9Ik91dHB1dDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNCIgdHlwZT0idG5zOlBvcnRUeXBlMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUiIG5hbWU9IklucHV0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUiIG5hbWU9Ik91dHB1dDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNSIgdHlwZT0idG5zOlBvcnRUeXBlMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYiIG5hbWU9IklucHV0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYiIG5hbWU9Ik91dHB1dDM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNiIgdHlwZT0idG5zOlBvcnRUeXBlMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzciIG5hbWU9IklucHV0MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzciIG5hbWU9Ik91dHB1dDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNyIgdHlwZT0idG5zOlBvcnRUeXBlMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgiIG5hbWU9IklucHV0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgiIG5hbWU9Ik91dHB1dDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOCIgdHlwZT0idG5zOlBvcnRUeXBlMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkiIG5hbWU9IklucHV0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkiIG5hbWU9Ik91dHB1dDM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOSIgdHlwZT0idG5zOlBvcnRUeXBlMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAiIG5hbWU9IklucHV0NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAiIG5hbWU9Ik91dHB1dDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MCIgdHlwZT0idG5zOlBvcnRUeXBlNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEiIG5hbWU9IklucHV0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEiIG5hbWU9Ik91dHB1dDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIiIG5hbWU9IklucHV0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIiIG5hbWU9Ik91dHB1dDQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMiIG5hbWU9IklucHV0NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMiIG5hbWU9Ik91dHB1dDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MyIgdHlwZT0idG5zOlBvcnRUeXBlNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQiIG5hbWU9IklucHV0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQiIG5hbWU9Ik91dHB1dDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUiIG5hbWU9IklucHV0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUiIG5hbWU9Ik91dHB1dDQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYiIG5hbWU9IklucHV0NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYiIG5hbWU9Ik91dHB1dDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NiIgdHlwZT0idG5zOlBvcnRUeXBlNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDciIG5hbWU9IklucHV0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDciIG5hbWU9Ik91dHB1dDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgiIG5hbWU9IklucHV0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgiIG5hbWU9Ik91dHB1dDQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkiIG5hbWU9IklucHV0NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkiIG5hbWU9Ik91dHB1dDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OSIgdHlwZT0idG5zOlBvcnRUeXBlNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAiIG5hbWU9IklucHV0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAiIG5hbWU9Ik91dHB1dDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MCIgdHlwZT0idG5zOlBvcnRUeXBlNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEiIG5hbWU9IklucHV0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEiIG5hbWU9Ik91dHB1dDUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MSIgdHlwZT0idG5zOlBvcnRUeXBlNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIiIG5hbWU9IklucHV0NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIiIG5hbWU9Ik91dHB1dDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MiIgdHlwZT0idG5zOlBvcnRUeXBlNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMiIG5hbWU9IklucHV0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMiIG5hbWU9Ik91dHB1dDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MyIgdHlwZT0idG5zOlBvcnRUeXBlNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQiIG5hbWU9IklucHV0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQiIG5hbWU9Ik91dHB1dDU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NCIgdHlwZT0idG5zOlBvcnRUeXBlNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUiIG5hbWU9IklucHV0NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUiIG5hbWU9Ik91dHB1dDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NSIgdHlwZT0idG5zOlBvcnRUeXBlNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYiIG5hbWU9IklucHV0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYiIG5hbWU9Ik91dHB1dDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NiIgdHlwZT0idG5zOlBvcnRUeXBlNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTciIG5hbWU9IklucHV0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTciIG5hbWU9Ik91dHB1dDU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NyIgdHlwZT0idG5zOlBvcnRUeXBlNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgiIG5hbWU9IklucHV0NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgiIG5hbWU9Ik91dHB1dDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OCIgdHlwZT0idG5zOlBvcnRUeXBlNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkiIG5hbWU9IklucHV0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkiIG5hbWU9Ik91dHB1dDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OSIgdHlwZT0idG5zOlBvcnRUeXBlNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAiIG5hbWU9IklucHV0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAiIG5hbWU9Ik91dHB1dDYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MCIgdHlwZT0idG5zOlBvcnRUeXBlNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEiIG5hbWU9IklucHV0NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEiIG5hbWU9Ik91dHB1dDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MSIgdHlwZT0idG5zOlBvcnRUeXBlNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIiIG5hbWU9IklucHV0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIiIG5hbWU9Ik91dHB1dDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MiIgdHlwZT0idG5zOlBvcnRUeXBlNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMiIG5hbWU9IklucHV0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMiIG5hbWU9Ik91dHB1dDYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MyIgdHlwZT0idG5zOlBvcnRUeXBlNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQiIG5hbWU9IklucHV0NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQiIG5hbWU9Ik91dHB1dDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NCIgdHlwZT0idG5zOlBvcnRUeXBlNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUiIG5hbWU9IklucHV0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUiIG5hbWU9Ik91dHB1dDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NSIgdHlwZT0idG5zOlBvcnRUeXBlNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYiIG5hbWU9IklucHV0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYiIG5hbWU9Ik91dHB1dDY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NiIgdHlwZT0idG5zOlBvcnRUeXBlNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjciIG5hbWU9IklucHV0NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjciIG5hbWU9Ik91dHB1dDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NyIgdHlwZT0idG5zOlBvcnRUeXBlNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgiIG5hbWU9IklucHV0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgiIG5hbWU9Ik91dHB1dDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OCIgdHlwZT0idG5zOlBvcnRUeXBlNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkiIG5hbWU9IklucHV0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkiIG5hbWU9Ik91dHB1dDY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OSIgdHlwZT0idG5zOlBvcnRUeXBlNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAiIG5hbWU9IklucHV0NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAiIG5hbWU9Ik91dHB1dDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MCIgdHlwZT0idG5zOlBvcnRUeXBlNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEiIG5hbWU9IklucHV0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEiIG5hbWU9Ik91dHB1dDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MSIgdHlwZT0idG5zOlBvcnRUeXBlNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIiIG5hbWU9IklucHV0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIiIG5hbWU9Ik91dHB1dDcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MiIgdHlwZT0idG5zOlBvcnRUeXBlNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMiIG5hbWU9IklucHV0NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMiIG5hbWU9Ik91dHB1dDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MyIgdHlwZT0idG5zOlBvcnRUeXBlNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQiIG5hbWU9IklucHV0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQiIG5hbWU9Ik91dHB1dDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NCIgdHlwZT0idG5zOlBvcnRUeXBlNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUiIG5hbWU9IklucHV0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUiIG5hbWU9Ik91dHB1dDc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NSIgdHlwZT0idG5zOlBvcnRUeXBlNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYiIG5hbWU9IklucHV0NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYiIG5hbWU9Ik91dHB1dDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NiIgdHlwZT0idG5zOlBvcnRUeXBlNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzciIG5hbWU9IklucHV0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzciIG5hbWU9Ik91dHB1dDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NyIgdHlwZT0idG5zOlBvcnRUeXBlNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgiIG5hbWU9IklucHV0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgiIG5hbWU9Ik91dHB1dDc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OCIgdHlwZT0idG5zOlBvcnRUeXBlNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkiIG5hbWU9IklucHV0NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkiIG5hbWU9Ik91dHB1dDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OSIgdHlwZT0idG5zOlBvcnRUeXBlNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAiIG5hbWU9IklucHV0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAiIG5hbWU9Ik91dHB1dDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MCIgdHlwZT0idG5zOlBvcnRUeXBlODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEiIG5hbWU9IklucHV0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEiIG5hbWU9Ik91dHB1dDgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MSIgdHlwZT0idG5zOlBvcnRUeXBlODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIiIG5hbWU9IklucHV0ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIiIG5hbWU9Ik91dHB1dDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MiIgdHlwZT0idG5zOlBvcnRUeXBlODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMiIG5hbWU9IklucHV0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMiIG5hbWU9Ik91dHB1dDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MyIgdHlwZT0idG5zOlBvcnRUeXBlODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQiIG5hbWU9IklucHV0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQiIG5hbWU9Ik91dHB1dDg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NCIgdHlwZT0idG5zOlBvcnRUeXBlODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUiIG5hbWU9IklucHV0ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUiIG5hbWU9Ik91dHB1dDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NSIgdHlwZT0idG5zOlBvcnRUeXBlODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYiIG5hbWU9IklucHV0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYiIG5hbWU9Ik91dHB1dDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NiIgdHlwZT0idG5zOlBvcnRUeXBlODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODciIG5hbWU9IklucHV0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODciIG5hbWU9Ik91dHB1dDg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NyIgdHlwZT0idG5zOlBvcnRUeXBlODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODciIGJpbmRpbmc9InRuczpCaW5kaW5nODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgiIG5hbWU9IklucHV0ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgiIG5hbWU9Ik91dHB1dDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OCIgdHlwZT0idG5zOlBvcnRUeXBlODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkiIG5hbWU9IklucHV0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkiIG5hbWU9Ik91dHB1dDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OSIgdHlwZT0idG5zOlBvcnRUeXBlODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAiIG5hbWU9IklucHV0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAiIG5hbWU9Ik91dHB1dDkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MCIgdHlwZT0idG5zOlBvcnRUeXBlOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEiIG5hbWU9IklucHV0OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEiIG5hbWU9Ik91dHB1dDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MSIgdHlwZT0idG5zOlBvcnRUeXBlOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIiIG5hbWU9IklucHV0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIiIG5hbWU9Ik91dHB1dDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MiIgdHlwZT0idG5zOlBvcnRUeXBlOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMiIG5hbWU9IklucHV0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMiIG5hbWU9Ik91dHB1dDkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MyIgdHlwZT0idG5zOlBvcnRUeXBlOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQiIG5hbWU9IklucHV0OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQiIG5hbWU9Ik91dHB1dDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NCIgdHlwZT0idG5zOlBvcnRUeXBlOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUiIG5hbWU9IklucHV0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUiIG5hbWU9Ik91dHB1dDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NSIgdHlwZT0idG5zOlBvcnRUeXBlOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYiIG5hbWU9IklucHV0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYiIG5hbWU9Ik91dHB1dDk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NiIgdHlwZT0idG5zOlBvcnRUeXBlOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTciIG5hbWU9IklucHV0OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTciIG5hbWU9Ik91dHB1dDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NyIgdHlwZT0idG5zOlBvcnRUeXBlOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgiIG5hbWU9IklucHV0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgiIG5hbWU9Ik91dHB1dDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OCIgdHlwZT0idG5zOlBvcnRUeXBlOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkiIG5hbWU9IklucHV0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkiIG5hbWU9Ik91dHB1dDk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OSIgdHlwZT0idG5zOlBvcnRUeXBlOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAwIiBuYW1lPSJJbnB1dDEwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDAiIG5hbWU9Ik91dHB1dDEwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDEiIG5hbWU9IklucHV0MTAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMSIgbmFtZT0iT3V0cHV0MTAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDEiIHR5cGU9InRuczpQb3J0VHlwZTEwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMiIgbmFtZT0iSW5wdXQxMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAyIiBuYW1lPSJPdXRwdXQxMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMiIgdHlwZT0idG5zOlBvcnRUeXBlMTAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAzIiBuYW1lPSJJbnB1dDEwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDMiIG5hbWU9Ik91dHB1dDEwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDQiIG5hbWU9IklucHV0MTA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNCIgbmFtZT0iT3V0cHV0MTA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDQiIHR5cGU9InRuczpQb3J0VHlwZTEwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNSIgbmFtZT0iSW5wdXQxMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA1IiBuYW1lPSJPdXRwdXQxMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNSIgdHlwZT0idG5zOlBvcnRUeXBlMTA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA2IiBuYW1lPSJJbnB1dDEwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDYiIG5hbWU9Ik91dHB1dDEwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDciIG5hbWU9IklucHV0MTA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNyIgbmFtZT0iT3V0cHV0MTA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDciIHR5cGU9InRuczpQb3J0VHlwZTEwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMTA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwOCIgbmFtZT0iSW5wdXQxMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA4IiBuYW1lPSJPdXRwdXQxMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwOCIgdHlwZT0idG5zOlBvcnRUeXBlMTA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA5IiBuYW1lPSJJbnB1dDEwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDkiIG5hbWU9Ik91dHB1dDEwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTAiIG5hbWU9IklucHV0MTEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMCIgbmFtZT0iT3V0cHV0MTEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTAiIHR5cGU9InRuczpQb3J0VHlwZTExMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMSIgbmFtZT0iSW5wdXQxMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTExIiBuYW1lPSJPdXRwdXQxMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMSIgdHlwZT0idG5zOlBvcnRUeXBlMTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEyIiBuYW1lPSJJbnB1dDExMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTIiIG5hbWU9Ik91dHB1dDExMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTMiIG5hbWU9IklucHV0MTEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMyIgbmFtZT0iT3V0cHV0MTEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTMiIHR5cGU9InRuczpQb3J0VHlwZTExMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNCIgbmFtZT0iSW5wdXQxMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE0IiBuYW1lPSJPdXRwdXQxMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNCIgdHlwZT0idG5zOlBvcnRUeXBlMTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE1IiBuYW1lPSJJbnB1dDExNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTUiIG5hbWU9Ik91dHB1dDExNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTYiIG5hbWU9IklucHV0MTE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNiIgbmFtZT0iT3V0cHV0MTE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTYiIHR5cGU9InRuczpQb3J0VHlwZTExNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNyIgbmFtZT0iSW5wdXQxMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE3IiBuYW1lPSJPdXRwdXQxMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNyIgdHlwZT0idG5zOlBvcnRUeXBlMTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE4IiBuYW1lPSJJbnB1dDExOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTgiIG5hbWU9Ik91dHB1dDExOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTkiIG5hbWU9IklucHV0MTE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExOSIgbmFtZT0iT3V0cHV0MTE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTkiIHR5cGU9InRuczpQb3J0VHlwZTExOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMCIgbmFtZT0iSW5wdXQxMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIwIiBuYW1lPSJPdXRwdXQxMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMCIgdHlwZT0idG5zOlBvcnRUeXBlMTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIxIiBuYW1lPSJJbnB1dDEyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjEiIG5hbWU9Ik91dHB1dDEyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjIiIG5hbWU9IklucHV0MTIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMiIgbmFtZT0iT3V0cHV0MTIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjIiIHR5cGU9InRuczpQb3J0VHlwZTEyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMyIgbmFtZT0iSW5wdXQxMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIzIiBuYW1lPSJPdXRwdXQxMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMyIgdHlwZT0idG5zOlBvcnRUeXBlMTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI0IiBuYW1lPSJJbnB1dDEyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjQiIG5hbWU9Ik91dHB1dDEyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjUiIG5hbWU9IklucHV0MTI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNSIgbmFtZT0iT3V0cHV0MTI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjUiIHR5cGU9InRuczpQb3J0VHlwZTEyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNiIgbmFtZT0iSW5wdXQxMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI2IiBuYW1lPSJPdXRwdXQxMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNiIgdHlwZT0idG5zOlBvcnRUeXBlMTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI3IiBuYW1lPSJJbnB1dDEyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjciIG5hbWU9Ik91dHB1dDEyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjgiIG5hbWU9IklucHV0MTI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyOCIgbmFtZT0iT3V0cHV0MTI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjgiIHR5cGU9InRuczpQb3J0VHlwZTEyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyOSIgbmFtZT0iSW5wdXQxMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI5IiBuYW1lPSJPdXRwdXQxMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyOSIgdHlwZT0idG5zOlBvcnRUeXBlMTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMwIiBuYW1lPSJJbnB1dDEzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzAiIG5hbWU9Ik91dHB1dDEzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzEiIG5hbWU9IklucHV0MTMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMSIgbmFtZT0iT3V0cHV0MTMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzEiIHR5cGU9InRuczpQb3J0VHlwZTEzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMiIgbmFtZT0iSW5wdXQxMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMyIiBuYW1lPSJPdXRwdXQxMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMiIgdHlwZT0idG5zOlBvcnRUeXBlMTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMzIiBuYW1lPSJJbnB1dDEzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzMiIG5hbWU9Ik91dHB1dDEzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzQiIG5hbWU9IklucHV0MTM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNCIgbmFtZT0iT3V0cHV0MTM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzQiIHR5cGU9InRuczpQb3J0VHlwZTEzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNSIgbmFtZT0iSW5wdXQxMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM1IiBuYW1lPSJPdXRwdXQxMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNSIgdHlwZT0idG5zOlBvcnRUeXBlMTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM2IiBuYW1lPSJJbnB1dDEzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzYiIG5hbWU9Ik91dHB1dDEzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzciIG5hbWU9IklucHV0MTM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNyIgbmFtZT0iT3V0cHV0MTM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzciIHR5cGU9InRuczpQb3J0VHlwZTEzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMTM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzOCIgbmFtZT0iSW5wdXQxMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM4IiBuYW1lPSJPdXRwdXQxMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzOCIgdHlwZT0idG5zOlBvcnRUeXBlMTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM5IiBuYW1lPSJJbnB1dDEzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzkiIG5hbWU9Ik91dHB1dDEzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDAiIG5hbWU9IklucHV0MTQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MCIgbmFtZT0iT3V0cHV0MTQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDAiIHR5cGU9InRuczpQb3J0VHlwZTE0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MSIgbmFtZT0iSW5wdXQxNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQxIiBuYW1lPSJPdXRwdXQxNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MSIgdHlwZT0idG5zOlBvcnRUeXBlMTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQyIiBuYW1lPSJJbnB1dDE0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDIiIG5hbWU9Ik91dHB1dDE0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDMiIG5hbWU9IklucHV0MTQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MyIgbmFtZT0iT3V0cHV0MTQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDMiIHR5cGU9InRuczpQb3J0VHlwZTE0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NCIgbmFtZT0iSW5wdXQxNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ0IiBuYW1lPSJPdXRwdXQxNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NCIgdHlwZT0idG5zOlBvcnRUeXBlMTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ1IiBuYW1lPSJJbnB1dDE0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDUiIG5hbWU9Ik91dHB1dDE0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDYiIG5hbWU9IklucHV0MTQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NiIgbmFtZT0iT3V0cHV0MTQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDYiIHR5cGU9InRuczpQb3J0VHlwZTE0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NyIgbmFtZT0iSW5wdXQxNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ3IiBuYW1lPSJPdXRwdXQxNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NyIgdHlwZT0idG5zOlBvcnRUeXBlMTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ4IiBuYW1lPSJJbnB1dDE0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDgiIG5hbWU9Ik91dHB1dDE0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDkiIG5hbWU9IklucHV0MTQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0OSIgbmFtZT0iT3V0cHV0MTQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDkiIHR5cGU9InRuczpQb3J0VHlwZTE0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MCIgbmFtZT0iSW5wdXQxNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUwIiBuYW1lPSJPdXRwdXQxNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MCIgdHlwZT0idG5zOlBvcnRUeXBlMTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUxIiBuYW1lPSJJbnB1dDE1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTEiIG5hbWU9Ik91dHB1dDE1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTIiIG5hbWU9IklucHV0MTUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MiIgbmFtZT0iT3V0cHV0MTUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTIiIHR5cGU9InRuczpQb3J0VHlwZTE1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MyIgbmFtZT0iSW5wdXQxNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUzIiBuYW1lPSJPdXRwdXQxNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MyIgdHlwZT0idG5zOlBvcnRUeXBlMTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU0IiBuYW1lPSJJbnB1dDE1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTQiIG5hbWU9Ik91dHB1dDE1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTUiIG5hbWU9IklucHV0MTU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NSIgbmFtZT0iT3V0cHV0MTU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTUiIHR5cGU9InRuczpQb3J0VHlwZTE1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NiIgbmFtZT0iSW5wdXQxNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU2IiBuYW1lPSJPdXRwdXQxNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NiIgdHlwZT0idG5zOlBvcnRUeXBlMTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU3IiBuYW1lPSJJbnB1dDE1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTciIG5hbWU9Ik91dHB1dDE1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTgiIG5hbWU9IklucHV0MTU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1OCIgbmFtZT0iT3V0cHV0MTU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTgiIHR5cGU9InRuczpQb3J0VHlwZTE1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1OSIgbmFtZT0iSW5wdXQxNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU5IiBuYW1lPSJPdXRwdXQxNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1OSIgdHlwZT0idG5zOlBvcnRUeXBlMTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYwIiBuYW1lPSJJbnB1dDE2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjAiIG5hbWU9Ik91dHB1dDE2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjEiIG5hbWU9IklucHV0MTYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MSIgbmFtZT0iT3V0cHV0MTYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjEiIHR5cGU9InRuczpQb3J0VHlwZTE2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MiIgbmFtZT0iSW5wdXQxNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYyIiBuYW1lPSJPdXRwdXQxNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MiIgdHlwZT0idG5zOlBvcnRUeXBlMTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYzIiBuYW1lPSJJbnB1dDE2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjMiIG5hbWU9Ik91dHB1dDE2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjQiIG5hbWU9IklucHV0MTY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NCIgbmFtZT0iT3V0cHV0MTY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjQiIHR5cGU9InRuczpQb3J0VHlwZTE2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NSIgbmFtZT0iSW5wdXQxNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY1IiBuYW1lPSJPdXRwdXQxNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NSIgdHlwZT0idG5zOlBvcnRUeXBlMTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY2IiBuYW1lPSJJbnB1dDE2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjYiIG5hbWU9Ik91dHB1dDE2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjciIG5hbWU9IklucHV0MTY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NyIgbmFtZT0iT3V0cHV0MTY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjciIHR5cGU9InRuczpQb3J0VHlwZTE2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMTY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2OCIgbmFtZT0iSW5wdXQxNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY4IiBuYW1lPSJPdXRwdXQxNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2OCIgdHlwZT0idG5zOlBvcnRUeXBlMTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY5IiBuYW1lPSJJbnB1dDE2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjkiIG5hbWU9Ik91dHB1dDE2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzAiIG5hbWU9IklucHV0MTcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MCIgbmFtZT0iT3V0cHV0MTcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzAiIHR5cGU9InRuczpQb3J0VHlwZTE3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MSIgbmFtZT0iSW5wdXQxNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcxIiBuYW1lPSJPdXRwdXQxNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MSIgdHlwZT0idG5zOlBvcnRUeXBlMTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcyIiBuYW1lPSJJbnB1dDE3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzIiIG5hbWU9Ik91dHB1dDE3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzMiIG5hbWU9IklucHV0MTczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MyIgbmFtZT0iT3V0cHV0MTczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzMiIHR5cGU9InRuczpQb3J0VHlwZTE3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NCIgbmFtZT0iSW5wdXQxNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc0IiBuYW1lPSJPdXRwdXQxNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NCIgdHlwZT0idG5zOlBvcnRUeXBlMTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc1IiBuYW1lPSJJbnB1dDE3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzUiIG5hbWU9Ik91dHB1dDE3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzYiIG5hbWU9IklucHV0MTc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NiIgbmFtZT0iT3V0cHV0MTc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzYiIHR5cGU9InRuczpQb3J0VHlwZTE3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NyIgbmFtZT0iSW5wdXQxNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc3IiBuYW1lPSJPdXRwdXQxNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NyIgdHlwZT0idG5zOlBvcnRUeXBlMTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc4IiBuYW1lPSJJbnB1dDE3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzgiIG5hbWU9Ik91dHB1dDE3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzkiIG5hbWU9IklucHV0MTc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3OSIgbmFtZT0iT3V0cHV0MTc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzkiIHR5cGU9InRuczpQb3J0VHlwZTE3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MCIgbmFtZT0iSW5wdXQxODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgwIiBuYW1lPSJPdXRwdXQxODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MCIgdHlwZT0idG5zOlBvcnRUeXBlMTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MCIgYmluZGluZz0idG5zOkJpbmRpbmcxODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgxIiBuYW1lPSJJbnB1dDE4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODEiIG5hbWU9Ik91dHB1dDE4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODIiIG5hbWU9IklucHV0MTgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MiIgbmFtZT0iT3V0cHV0MTgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODIiIHR5cGU9InRuczpQb3J0VHlwZTE4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MyIgbmFtZT0iSW5wdXQxODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgzIiBuYW1lPSJPdXRwdXQxODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MyIgdHlwZT0idG5zOlBvcnRUeXBlMTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MyIgYmluZGluZz0idG5zOkJpbmRpbmcxODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg0IiBuYW1lPSJJbnB1dDE4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODQiIG5hbWU9Ik91dHB1dDE4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODUiIG5hbWU9IklucHV0MTg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NSIgbmFtZT0iT3V0cHV0MTg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODUiIHR5cGU9InRuczpQb3J0VHlwZTE4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NiIgbmFtZT0iSW5wdXQxODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg2IiBuYW1lPSJPdXRwdXQxODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NiIgdHlwZT0idG5zOlBvcnRUeXBlMTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NiIgYmluZGluZz0idG5zOkJpbmRpbmcxODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg3IiBuYW1lPSJJbnB1dDE4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODciIG5hbWU9Ik91dHB1dDE4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODgiIG5hbWU9IklucHV0MTg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4OCIgbmFtZT0iT3V0cHV0MTg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODgiIHR5cGU9InRuczpQb3J0VHlwZTE4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4OSIgbmFtZT0iSW5wdXQxODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg5IiBuYW1lPSJPdXRwdXQxODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4OSIgdHlwZT0idG5zOlBvcnRUeXBlMTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4OSIgYmluZGluZz0idG5zOkJpbmRpbmcxODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkwIiBuYW1lPSJJbnB1dDE5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTAiIG5hbWU9Ik91dHB1dDE5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTEiIG5hbWU9IklucHV0MTkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MSIgbmFtZT0iT3V0cHV0MTkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTEiIHR5cGU9InRuczpQb3J0VHlwZTE5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MiIgbmFtZT0iSW5wdXQxOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkyIiBuYW1lPSJPdXRwdXQxOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MiIgdHlwZT0idG5zOlBvcnRUeXBlMTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MiIgYmluZGluZz0idG5zOkJpbmRpbmcxOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkzIiBuYW1lPSJJbnB1dDE5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTMiIG5hbWU9Ik91dHB1dDE5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTQiIG5hbWU9IklucHV0MTk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NCIgbmFtZT0iT3V0cHV0MTk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTQiIHR5cGU9InRuczpQb3J0VHlwZTE5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NSIgbmFtZT0iSW5wdXQxOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk1IiBuYW1lPSJPdXRwdXQxOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NSIgdHlwZT0idG5zOlBvcnRUeXBlMTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk2IiBuYW1lPSJJbnB1dDE5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTYiIG5hbWU9Ik91dHB1dDE5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTciIG5hbWU9IklucHV0MTk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NyIgbmFtZT0iT3V0cHV0MTk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTciIHR5cGU9InRuczpQb3J0VHlwZTE5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5OCIgbmFtZT0iSW5wdXQxOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk4IiBuYW1lPSJPdXRwdXQxOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5OCIgdHlwZT0idG5zOlBvcnRUeXBlMTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5OCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk5IiBuYW1lPSJJbnB1dDE5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTkiIG5hbWU9Ik91dHB1dDE5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzUwMEtCLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzUwMEtCLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYWI4MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS81MDBLQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTU1MDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkRlZmluaXRpb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMCIgbmFtZT0iSW5wdXQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTAiIG5hbWU9Ik91dHB1dDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzAiIHR5cGU9InRuczpQb3J0VHlwZTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MCIgYmluZGluZz0idG5zOkJpbmRpbmcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEiIG5hbWU9IklucHV0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxIiBuYW1lPSJPdXRwdXQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyIiBuYW1lPSJJbnB1dDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMiIgbmFtZT0iT3V0cHV0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMiIgdHlwZT0idG5zOlBvcnRUeXBlMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMyIgbmFtZT0iSW5wdXQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMiIG5hbWU9Ik91dHB1dDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMiIHR5cGU9InRuczpQb3J0VHlwZTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MyIgYmluZGluZz0idG5zOkJpbmRpbmczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQiIG5hbWU9IklucHV0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0IiBuYW1lPSJPdXRwdXQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1IiBuYW1lPSJJbnB1dDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNSIgbmFtZT0iT3V0cHV0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNSIgdHlwZT0idG5zOlBvcnRUeXBlNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNiIgbmFtZT0iSW5wdXQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYiIG5hbWU9Ik91dHB1dDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYiIHR5cGU9InRuczpQb3J0VHlwZTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NiIgYmluZGluZz0idG5zOkJpbmRpbmc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTciIG5hbWU9IklucHV0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3IiBuYW1lPSJPdXRwdXQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDciIGJpbmRpbmc9InRuczpCaW5kaW5nNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4IiBuYW1lPSJJbnB1dDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOCIgbmFtZT0iT3V0cHV0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOCIgdHlwZT0idG5zOlBvcnRUeXBlOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOSIgbmFtZT0iSW5wdXQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkiIG5hbWU9Ik91dHB1dDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkiIHR5cGU9InRuczpQb3J0VHlwZTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OSIgYmluZGluZz0idG5zOkJpbmRpbmc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwIiBuYW1lPSJJbnB1dDEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwIiBuYW1lPSJPdXRwdXQxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAiIHR5cGU9InRuczpQb3J0VHlwZTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExIiBuYW1lPSJJbnB1dDExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExIiBuYW1lPSJPdXRwdXQxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEiIHR5cGU9InRuczpQb3J0VHlwZTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyIiBuYW1lPSJJbnB1dDEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyIiBuYW1lPSJPdXRwdXQxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIiIHR5cGU9InRuczpQb3J0VHlwZTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzIiBuYW1lPSJJbnB1dDEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzIiBuYW1lPSJPdXRwdXQxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMiIHR5cGU9InRuczpQb3J0VHlwZTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0IiBuYW1lPSJJbnB1dDE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0IiBuYW1lPSJPdXRwdXQxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQiIHR5cGU9InRuczpQb3J0VHlwZTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1IiBuYW1lPSJJbnB1dDE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1IiBuYW1lPSJPdXRwdXQxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUiIHR5cGU9InRuczpQb3J0VHlwZTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2IiBuYW1lPSJJbnB1dDE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2IiBuYW1lPSJPdXRwdXQxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYiIHR5cGU9InRuczpQb3J0VHlwZTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3IiBuYW1lPSJJbnB1dDE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3IiBuYW1lPSJPdXRwdXQxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTciIHR5cGU9InRuczpQb3J0VHlwZTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4IiBuYW1lPSJJbnB1dDE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4IiBuYW1lPSJPdXRwdXQxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgiIHR5cGU9InRuczpQb3J0VHlwZTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5IiBuYW1lPSJJbnB1dDE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5IiBuYW1lPSJPdXRwdXQxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkiIHR5cGU9InRuczpQb3J0VHlwZTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwIiBuYW1lPSJJbnB1dDIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwIiBuYW1lPSJPdXRwdXQyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAiIHR5cGU9InRuczpQb3J0VHlwZTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxIiBuYW1lPSJJbnB1dDIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxIiBuYW1lPSJPdXRwdXQyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEiIHR5cGU9InRuczpQb3J0VHlwZTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyIiBuYW1lPSJJbnB1dDIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyIiBuYW1lPSJPdXRwdXQyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIiIHR5cGU9InRuczpQb3J0VHlwZTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzIiBuYW1lPSJJbnB1dDIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzIiBuYW1lPSJPdXRwdXQyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMiIHR5cGU9InRuczpQb3J0VHlwZTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0IiBuYW1lPSJJbnB1dDI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0IiBuYW1lPSJPdXRwdXQyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQiIHR5cGU9InRuczpQb3J0VHlwZTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1IiBuYW1lPSJJbnB1dDI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1IiBuYW1lPSJPdXRwdXQyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUiIHR5cGU9InRuczpQb3J0VHlwZTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2IiBuYW1lPSJJbnB1dDI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2IiBuYW1lPSJPdXRwdXQyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYiIHR5cGU9InRuczpQb3J0VHlwZTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3IiBuYW1lPSJJbnB1dDI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3IiBuYW1lPSJPdXRwdXQyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjciIHR5cGU9InRuczpQb3J0VHlwZTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4IiBuYW1lPSJJbnB1dDI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4IiBuYW1lPSJPdXRwdXQyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgiIHR5cGU9InRuczpQb3J0VHlwZTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5IiBuYW1lPSJJbnB1dDI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5IiBuYW1lPSJPdXRwdXQyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkiIHR5cGU9InRuczpQb3J0VHlwZTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwIiBuYW1lPSJJbnB1dDMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwIiBuYW1lPSJPdXRwdXQzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAiIHR5cGU9InRuczpQb3J0VHlwZTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxIiBuYW1lPSJJbnB1dDMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxIiBuYW1lPSJPdXRwdXQzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEiIHR5cGU9InRuczpQb3J0VHlwZTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyIiBuYW1lPSJJbnB1dDMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyIiBuYW1lPSJPdXRwdXQzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIiIHR5cGU9InRuczpQb3J0VHlwZTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzIiBuYW1lPSJJbnB1dDMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzIiBuYW1lPSJPdXRwdXQzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMiIHR5cGU9InRuczpQb3J0VHlwZTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0IiBuYW1lPSJJbnB1dDM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0IiBuYW1lPSJPdXRwdXQzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQiIHR5cGU9InRuczpQb3J0VHlwZTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1IiBuYW1lPSJJbnB1dDM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1IiBuYW1lPSJPdXRwdXQzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUiIHR5cGU9InRuczpQb3J0VHlwZTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2IiBuYW1lPSJJbnB1dDM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2IiBuYW1lPSJPdXRwdXQzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYiIHR5cGU9InRuczpQb3J0VHlwZTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3IiBuYW1lPSJJbnB1dDM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3IiBuYW1lPSJPdXRwdXQzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzciIHR5cGU9InRuczpQb3J0VHlwZTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4IiBuYW1lPSJJbnB1dDM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4IiBuYW1lPSJPdXRwdXQzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgiIHR5cGU9InRuczpQb3J0VHlwZTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5IiBuYW1lPSJJbnB1dDM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5IiBuYW1lPSJPdXRwdXQzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkiIHR5cGU9InRuczpQb3J0VHlwZTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwIiBuYW1lPSJJbnB1dDQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwIiBuYW1lPSJPdXRwdXQ0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAiIHR5cGU9InRuczpQb3J0VHlwZTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxIiBuYW1lPSJJbnB1dDQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxIiBuYW1lPSJPdXRwdXQ0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEiIHR5cGU9InRuczpQb3J0VHlwZTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyIiBuYW1lPSJJbnB1dDQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyIiBuYW1lPSJPdXRwdXQ0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIiIHR5cGU9InRuczpQb3J0VHlwZTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzIiBuYW1lPSJJbnB1dDQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzIiBuYW1lPSJPdXRwdXQ0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMiIHR5cGU9InRuczpQb3J0VHlwZTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0IiBuYW1lPSJJbnB1dDQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0IiBuYW1lPSJPdXRwdXQ0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQiIHR5cGU9InRuczpQb3J0VHlwZTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1IiBuYW1lPSJJbnB1dDQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1IiBuYW1lPSJPdXRwdXQ0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUiIHR5cGU9InRuczpQb3J0VHlwZTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2IiBuYW1lPSJJbnB1dDQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2IiBuYW1lPSJPdXRwdXQ0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYiIHR5cGU9InRuczpQb3J0VHlwZTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3IiBuYW1lPSJJbnB1dDQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3IiBuYW1lPSJPdXRwdXQ0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDciIHR5cGU9InRuczpQb3J0VHlwZTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4IiBuYW1lPSJJbnB1dDQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4IiBuYW1lPSJPdXRwdXQ0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgiIHR5cGU9InRuczpQb3J0VHlwZTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5IiBuYW1lPSJJbnB1dDQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5IiBuYW1lPSJPdXRwdXQ0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkiIHR5cGU9InRuczpQb3J0VHlwZTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwIiBuYW1lPSJJbnB1dDUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwIiBuYW1lPSJPdXRwdXQ1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAiIHR5cGU9InRuczpQb3J0VHlwZTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxIiBuYW1lPSJJbnB1dDUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxIiBuYW1lPSJPdXRwdXQ1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEiIHR5cGU9InRuczpQb3J0VHlwZTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyIiBuYW1lPSJJbnB1dDUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyIiBuYW1lPSJPdXRwdXQ1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIiIHR5cGU9InRuczpQb3J0VHlwZTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzIiBuYW1lPSJJbnB1dDUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzIiBuYW1lPSJPdXRwdXQ1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMiIHR5cGU9InRuczpQb3J0VHlwZTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0IiBuYW1lPSJJbnB1dDU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0IiBuYW1lPSJPdXRwdXQ1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQiIHR5cGU9InRuczpQb3J0VHlwZTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1IiBuYW1lPSJJbnB1dDU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1IiBuYW1lPSJPdXRwdXQ1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUiIHR5cGU9InRuczpQb3J0VHlwZTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2IiBuYW1lPSJJbnB1dDU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2IiBuYW1lPSJPdXRwdXQ1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYiIHR5cGU9InRuczpQb3J0VHlwZTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3IiBuYW1lPSJJbnB1dDU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3IiBuYW1lPSJPdXRwdXQ1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTciIHR5cGU9InRuczpQb3J0VHlwZTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4IiBuYW1lPSJJbnB1dDU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4IiBuYW1lPSJPdXRwdXQ1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgiIHR5cGU9InRuczpQb3J0VHlwZTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5IiBuYW1lPSJJbnB1dDU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5IiBuYW1lPSJPdXRwdXQ1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkiIHR5cGU9InRuczpQb3J0VHlwZTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwIiBuYW1lPSJJbnB1dDYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwIiBuYW1lPSJPdXRwdXQ2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAiIHR5cGU9InRuczpQb3J0VHlwZTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxIiBuYW1lPSJJbnB1dDYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxIiBuYW1lPSJPdXRwdXQ2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjEiIHR5cGU9InRuczpQb3J0VHlwZTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyIiBuYW1lPSJJbnB1dDYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyIiBuYW1lPSJPdXRwdXQ2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIiIHR5cGU9InRuczpQb3J0VHlwZTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzIiBuYW1lPSJJbnB1dDYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzIiBuYW1lPSJPdXRwdXQ2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMiIHR5cGU9InRuczpQb3J0VHlwZTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0IiBuYW1lPSJJbnB1dDY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0IiBuYW1lPSJPdXRwdXQ2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQiIHR5cGU9InRuczpQb3J0VHlwZTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1IiBuYW1lPSJJbnB1dDY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1IiBuYW1lPSJPdXRwdXQ2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUiIHR5cGU9InRuczpQb3J0VHlwZTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2IiBuYW1lPSJJbnB1dDY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2IiBuYW1lPSJPdXRwdXQ2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYiIHR5cGU9InRuczpQb3J0VHlwZTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3IiBuYW1lPSJJbnB1dDY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3IiBuYW1lPSJPdXRwdXQ2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjciIHR5cGU9InRuczpQb3J0VHlwZTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4IiBuYW1lPSJJbnB1dDY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4IiBuYW1lPSJPdXRwdXQ2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgiIHR5cGU9InRuczpQb3J0VHlwZTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5IiBuYW1lPSJJbnB1dDY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5IiBuYW1lPSJPdXRwdXQ2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkiIHR5cGU9InRuczpQb3J0VHlwZTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwIiBuYW1lPSJJbnB1dDcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwIiBuYW1lPSJPdXRwdXQ3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAiIHR5cGU9InRuczpQb3J0VHlwZTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxIiBuYW1lPSJJbnB1dDcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxIiBuYW1lPSJPdXRwdXQ3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEiIHR5cGU9InRuczpQb3J0VHlwZTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyIiBuYW1lPSJJbnB1dDcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyIiBuYW1lPSJPdXRwdXQ3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIiIHR5cGU9InRuczpQb3J0VHlwZTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczIiBuYW1lPSJJbnB1dDczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczIiBuYW1lPSJPdXRwdXQ3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMiIHR5cGU9InRuczpQb3J0VHlwZTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0IiBuYW1lPSJJbnB1dDc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0IiBuYW1lPSJPdXRwdXQ3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQiIHR5cGU9InRuczpQb3J0VHlwZTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1IiBuYW1lPSJJbnB1dDc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1IiBuYW1lPSJPdXRwdXQ3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUiIHR5cGU9InRuczpQb3J0VHlwZTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2IiBuYW1lPSJJbnB1dDc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2IiBuYW1lPSJPdXRwdXQ3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYiIHR5cGU9InRuczpQb3J0VHlwZTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3IiBuYW1lPSJJbnB1dDc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3IiBuYW1lPSJPdXRwdXQ3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzciIHR5cGU9InRuczpQb3J0VHlwZTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4IiBuYW1lPSJJbnB1dDc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4IiBuYW1lPSJPdXRwdXQ3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgiIHR5cGU9InRuczpQb3J0VHlwZTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5IiBuYW1lPSJJbnB1dDc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5IiBuYW1lPSJPdXRwdXQ3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkiIHR5cGU9InRuczpQb3J0VHlwZTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwIiBuYW1lPSJJbnB1dDgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwIiBuYW1lPSJPdXRwdXQ4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAiIHR5cGU9InRuczpQb3J0VHlwZTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxIiBuYW1lPSJJbnB1dDgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxIiBuYW1lPSJPdXRwdXQ4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEiIHR5cGU9InRuczpQb3J0VHlwZTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyIiBuYW1lPSJJbnB1dDgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyIiBuYW1lPSJPdXRwdXQ4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIiIHR5cGU9InRuczpQb3J0VHlwZTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzIiBuYW1lPSJJbnB1dDgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzIiBuYW1lPSJPdXRwdXQ4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMiIHR5cGU9InRuczpQb3J0VHlwZTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0IiBuYW1lPSJJbnB1dDg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0IiBuYW1lPSJPdXRwdXQ4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQiIHR5cGU9InRuczpQb3J0VHlwZTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1IiBuYW1lPSJJbnB1dDg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1IiBuYW1lPSJPdXRwdXQ4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUiIHR5cGU9InRuczpQb3J0VHlwZTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2IiBuYW1lPSJJbnB1dDg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2IiBuYW1lPSJPdXRwdXQ4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYiIHR5cGU9InRuczpQb3J0VHlwZTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3IiBuYW1lPSJJbnB1dDg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3IiBuYW1lPSJPdXRwdXQ4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODciIHR5cGU9InRuczpQb3J0VHlwZTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4IiBuYW1lPSJJbnB1dDg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4IiBuYW1lPSJPdXRwdXQ4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgiIHR5cGU9InRuczpQb3J0VHlwZTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5IiBuYW1lPSJJbnB1dDg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5IiBuYW1lPSJPdXRwdXQ4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkiIHR5cGU9InRuczpQb3J0VHlwZTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwIiBuYW1lPSJJbnB1dDkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwIiBuYW1lPSJPdXRwdXQ5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAiIHR5cGU9InRuczpQb3J0VHlwZTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxIiBuYW1lPSJJbnB1dDkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxIiBuYW1lPSJPdXRwdXQ5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTEiIHR5cGU9InRuczpQb3J0VHlwZTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyIiBuYW1lPSJJbnB1dDkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyIiBuYW1lPSJPdXRwdXQ5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIiIHR5cGU9InRuczpQb3J0VHlwZTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzIiBuYW1lPSJJbnB1dDkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzIiBuYW1lPSJPdXRwdXQ5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMiIHR5cGU9InRuczpQb3J0VHlwZTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0IiBuYW1lPSJJbnB1dDk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0IiBuYW1lPSJPdXRwdXQ5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQiIHR5cGU9InRuczpQb3J0VHlwZTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1IiBuYW1lPSJJbnB1dDk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1IiBuYW1lPSJPdXRwdXQ5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUiIHR5cGU9InRuczpQb3J0VHlwZTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2IiBuYW1lPSJJbnB1dDk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2IiBuYW1lPSJPdXRwdXQ5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYiIHR5cGU9InRuczpQb3J0VHlwZTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3IiBuYW1lPSJJbnB1dDk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3IiBuYW1lPSJPdXRwdXQ5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTciIHR5cGU9InRuczpQb3J0VHlwZTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4IiBuYW1lPSJJbnB1dDk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4IiBuYW1lPSJPdXRwdXQ5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgiIHR5cGU9InRuczpQb3J0VHlwZTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5IiBuYW1lPSJJbnB1dDk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5IiBuYW1lPSJPdXRwdXQ5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkiIHR5cGU9InRuczpQb3J0VHlwZTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMCIgbmFtZT0iSW5wdXQxMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAwIiBuYW1lPSJPdXRwdXQxMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAxIiBuYW1lPSJJbnB1dDEwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDEiIG5hbWU9Ik91dHB1dDEwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDIiIG5hbWU9IklucHV0MTAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMiIgbmFtZT0iT3V0cHV0MTAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDIiIHR5cGU9InRuczpQb3J0VHlwZTEwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMyIgbmFtZT0iSW5wdXQxMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAzIiBuYW1lPSJPdXRwdXQxMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMyIgdHlwZT0idG5zOlBvcnRUeXBlMTAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA0IiBuYW1lPSJJbnB1dDEwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDQiIG5hbWU9Ik91dHB1dDEwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDUiIG5hbWU9IklucHV0MTA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNSIgbmFtZT0iT3V0cHV0MTA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDUiIHR5cGU9InRuczpQb3J0VHlwZTEwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNiIgbmFtZT0iSW5wdXQxMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA2IiBuYW1lPSJPdXRwdXQxMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNiIgdHlwZT0idG5zOlBvcnRUeXBlMTA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA3IiBuYW1lPSJJbnB1dDEwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDciIG5hbWU9Ik91dHB1dDEwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDgiIG5hbWU9IklucHV0MTA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwOCIgbmFtZT0iT3V0cHV0MTA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDgiIHR5cGU9InRuczpQb3J0VHlwZTEwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwOSIgbmFtZT0iSW5wdXQxMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA5IiBuYW1lPSJPdXRwdXQxMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwOSIgdHlwZT0idG5zOlBvcnRUeXBlMTA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEwIiBuYW1lPSJJbnB1dDExMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTAiIG5hbWU9Ik91dHB1dDExMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTEiIG5hbWU9IklucHV0MTExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMSIgbmFtZT0iT3V0cHV0MTExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTEiIHR5cGU9InRuczpQb3J0VHlwZTExMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMiIgbmFtZT0iSW5wdXQxMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEyIiBuYW1lPSJPdXRwdXQxMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMiIgdHlwZT0idG5zOlBvcnRUeXBlMTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEzIiBuYW1lPSJJbnB1dDExMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTMiIG5hbWU9Ik91dHB1dDExMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTQiIG5hbWU9IklucHV0MTE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNCIgbmFtZT0iT3V0cHV0MTE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTQiIHR5cGU9InRuczpQb3J0VHlwZTExNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNSIgbmFtZT0iSW5wdXQxMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE1IiBuYW1lPSJPdXRwdXQxMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNSIgdHlwZT0idG5zOlBvcnRUeXBlMTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE2IiBuYW1lPSJJbnB1dDExNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTYiIG5hbWU9Ik91dHB1dDExNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTciIG5hbWU9IklucHV0MTE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNyIgbmFtZT0iT3V0cHV0MTE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTciIHR5cGU9InRuczpQb3J0VHlwZTExNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExOCIgbmFtZT0iSW5wdXQxMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE4IiBuYW1lPSJPdXRwdXQxMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExOCIgdHlwZT0idG5zOlBvcnRUeXBlMTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE5IiBuYW1lPSJJbnB1dDExOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTkiIG5hbWU9Ik91dHB1dDExOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjAiIG5hbWU9IklucHV0MTIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMCIgbmFtZT0iT3V0cHV0MTIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjAiIHR5cGU9InRuczpQb3J0VHlwZTEyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMSIgbmFtZT0iSW5wdXQxMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIxIiBuYW1lPSJPdXRwdXQxMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMSIgdHlwZT0idG5zOlBvcnRUeXBlMTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIyIiBuYW1lPSJJbnB1dDEyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjIiIG5hbWU9Ik91dHB1dDEyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjMiIG5hbWU9IklucHV0MTIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMyIgbmFtZT0iT3V0cHV0MTIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjMiIHR5cGU9InRuczpQb3J0VHlwZTEyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNCIgbmFtZT0iSW5wdXQxMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI0IiBuYW1lPSJPdXRwdXQxMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNCIgdHlwZT0idG5zOlBvcnRUeXBlMTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI1IiBuYW1lPSJJbnB1dDEyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjUiIG5hbWU9Ik91dHB1dDEyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjYiIG5hbWU9IklucHV0MTI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNiIgbmFtZT0iT3V0cHV0MTI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjYiIHR5cGU9InRuczpQb3J0VHlwZTEyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNyIgbmFtZT0iSW5wdXQxMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI3IiBuYW1lPSJPdXRwdXQxMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNyIgdHlwZT0idG5zOlBvcnRUeXBlMTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI4IiBuYW1lPSJJbnB1dDEyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjgiIG5hbWU9Ik91dHB1dDEyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjkiIG5hbWU9IklucHV0MTI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyOSIgbmFtZT0iT3V0cHV0MTI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjkiIHR5cGU9InRuczpQb3J0VHlwZTEyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMCIgbmFtZT0iSW5wdXQxMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMwIiBuYW1lPSJPdXRwdXQxMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMCIgdHlwZT0idG5zOlBvcnRUeXBlMTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMxIiBuYW1lPSJJbnB1dDEzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzEiIG5hbWU9Ik91dHB1dDEzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzIiIG5hbWU9IklucHV0MTMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMiIgbmFtZT0iT3V0cHV0MTMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzIiIHR5cGU9InRuczpQb3J0VHlwZTEzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMyIgbmFtZT0iSW5wdXQxMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMzIiBuYW1lPSJPdXRwdXQxMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM0IiBuYW1lPSJJbnB1dDEzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzQiIG5hbWU9Ik91dHB1dDEzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzUiIG5hbWU9IklucHV0MTM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNSIgbmFtZT0iT3V0cHV0MTM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzUiIHR5cGU9InRuczpQb3J0VHlwZTEzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNiIgbmFtZT0iSW5wdXQxMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM2IiBuYW1lPSJPdXRwdXQxMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNiIgdHlwZT0idG5zOlBvcnRUeXBlMTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM3IiBuYW1lPSJJbnB1dDEzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzciIG5hbWU9Ik91dHB1dDEzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzgiIG5hbWU9IklucHV0MTM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzOCIgbmFtZT0iT3V0cHV0MTM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzgiIHR5cGU9InRuczpQb3J0VHlwZTEzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzOSIgbmFtZT0iSW5wdXQxMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM5IiBuYW1lPSJPdXRwdXQxMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzOSIgdHlwZT0idG5zOlBvcnRUeXBlMTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQwIiBuYW1lPSJJbnB1dDE0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDAiIG5hbWU9Ik91dHB1dDE0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDEiIG5hbWU9IklucHV0MTQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MSIgbmFtZT0iT3V0cHV0MTQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDEiIHR5cGU9InRuczpQb3J0VHlwZTE0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MiIgbmFtZT0iSW5wdXQxNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQyIiBuYW1lPSJPdXRwdXQxNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MiIgdHlwZT0idG5zOlBvcnRUeXBlMTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQzIiBuYW1lPSJJbnB1dDE0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDMiIG5hbWU9Ik91dHB1dDE0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDQiIG5hbWU9IklucHV0MTQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NCIgbmFtZT0iT3V0cHV0MTQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDQiIHR5cGU9InRuczpQb3J0VHlwZTE0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NSIgbmFtZT0iSW5wdXQxNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ1IiBuYW1lPSJPdXRwdXQxNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NSIgdHlwZT0idG5zOlBvcnRUeXBlMTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ2IiBuYW1lPSJJbnB1dDE0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDYiIG5hbWU9Ik91dHB1dDE0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDciIG5hbWU9IklucHV0MTQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NyIgbmFtZT0iT3V0cHV0MTQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDciIHR5cGU9InRuczpQb3J0VHlwZTE0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0OCIgbmFtZT0iSW5wdXQxNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ4IiBuYW1lPSJPdXRwdXQxNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0OCIgdHlwZT0idG5zOlBvcnRUeXBlMTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ5IiBuYW1lPSJJbnB1dDE0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDkiIG5hbWU9Ik91dHB1dDE0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTAiIG5hbWU9IklucHV0MTUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MCIgbmFtZT0iT3V0cHV0MTUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTAiIHR5cGU9InRuczpQb3J0VHlwZTE1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MSIgbmFtZT0iSW5wdXQxNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUxIiBuYW1lPSJPdXRwdXQxNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MSIgdHlwZT0idG5zOlBvcnRUeXBlMTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUyIiBuYW1lPSJJbnB1dDE1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTIiIG5hbWU9Ik91dHB1dDE1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTMiIG5hbWU9IklucHV0MTUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MyIgbmFtZT0iT3V0cHV0MTUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTMiIHR5cGU9InRuczpQb3J0VHlwZTE1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NCIgbmFtZT0iSW5wdXQxNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU0IiBuYW1lPSJPdXRwdXQxNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NCIgdHlwZT0idG5zOlBvcnRUeXBlMTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU1IiBuYW1lPSJJbnB1dDE1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTUiIG5hbWU9Ik91dHB1dDE1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTYiIG5hbWU9IklucHV0MTU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NiIgbmFtZT0iT3V0cHV0MTU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTYiIHR5cGU9InRuczpQb3J0VHlwZTE1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NyIgbmFtZT0iSW5wdXQxNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU3IiBuYW1lPSJPdXRwdXQxNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NyIgdHlwZT0idG5zOlBvcnRUeXBlMTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU4IiBuYW1lPSJJbnB1dDE1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTgiIG5hbWU9Ik91dHB1dDE1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTkiIG5hbWU9IklucHV0MTU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1OSIgbmFtZT0iT3V0cHV0MTU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTkiIHR5cGU9InRuczpQb3J0VHlwZTE1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MCIgbmFtZT0iSW5wdXQxNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYwIiBuYW1lPSJPdXRwdXQxNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MCIgdHlwZT0idG5zOlBvcnRUeXBlMTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYxIiBuYW1lPSJJbnB1dDE2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjEiIG5hbWU9Ik91dHB1dDE2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjIiIG5hbWU9IklucHV0MTYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MiIgbmFtZT0iT3V0cHV0MTYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjIiIHR5cGU9InRuczpQb3J0VHlwZTE2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MyIgbmFtZT0iSW5wdXQxNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYzIiBuYW1lPSJPdXRwdXQxNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MyIgdHlwZT0idG5zOlBvcnRUeXBlMTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY0IiBuYW1lPSJJbnB1dDE2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjQiIG5hbWU9Ik91dHB1dDE2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjUiIG5hbWU9IklucHV0MTY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NSIgbmFtZT0iT3V0cHV0MTY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjUiIHR5cGU9InRuczpQb3J0VHlwZTE2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NiIgbmFtZT0iSW5wdXQxNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY2IiBuYW1lPSJPdXRwdXQxNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NiIgdHlwZT0idG5zOlBvcnRUeXBlMTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY3IiBuYW1lPSJJbnB1dDE2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjciIG5hbWU9Ik91dHB1dDE2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjgiIG5hbWU9IklucHV0MTY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2OCIgbmFtZT0iT3V0cHV0MTY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjgiIHR5cGU9InRuczpQb3J0VHlwZTE2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2OSIgbmFtZT0iSW5wdXQxNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY5IiBuYW1lPSJPdXRwdXQxNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2OSIgdHlwZT0idG5zOlBvcnRUeXBlMTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcwIiBuYW1lPSJJbnB1dDE3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzAiIG5hbWU9Ik91dHB1dDE3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzEiIG5hbWU9IklucHV0MTcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MSIgbmFtZT0iT3V0cHV0MTcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzEiIHR5cGU9InRuczpQb3J0VHlwZTE3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MiIgbmFtZT0iSW5wdXQxNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcyIiBuYW1lPSJPdXRwdXQxNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MiIgdHlwZT0idG5zOlBvcnRUeXBlMTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTczIiBuYW1lPSJJbnB1dDE3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzMiIG5hbWU9Ik91dHB1dDE3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTczIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzQiIG5hbWU9IklucHV0MTc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NCIgbmFtZT0iT3V0cHV0MTc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzQiIHR5cGU9InRuczpQb3J0VHlwZTE3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NSIgbmFtZT0iSW5wdXQxNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc1IiBuYW1lPSJPdXRwdXQxNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NSIgdHlwZT0idG5zOlBvcnRUeXBlMTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc2IiBuYW1lPSJJbnB1dDE3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzYiIG5hbWU9Ik91dHB1dDE3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzciIG5hbWU9IklucHV0MTc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NyIgbmFtZT0iT3V0cHV0MTc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzciIHR5cGU9InRuczpQb3J0VHlwZTE3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMTc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3OCIgbmFtZT0iSW5wdXQxNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc4IiBuYW1lPSJPdXRwdXQxNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3OCIgdHlwZT0idG5zOlBvcnRUeXBlMTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc5IiBuYW1lPSJJbnB1dDE3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzkiIG5hbWU9Ik91dHB1dDE3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODAiIG5hbWU9IklucHV0MTgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MCIgbmFtZT0iT3V0cHV0MTgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODAiIHR5cGU9InRuczpQb3J0VHlwZTE4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MSIgbmFtZT0iSW5wdXQxODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgxIiBuYW1lPSJPdXRwdXQxODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MSIgdHlwZT0idG5zOlBvcnRUeXBlMTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MSIgYmluZGluZz0idG5zOkJpbmRpbmcxODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgyIiBuYW1lPSJJbnB1dDE4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODIiIG5hbWU9Ik91dHB1dDE4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODMiIG5hbWU9IklucHV0MTgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MyIgbmFtZT0iT3V0cHV0MTgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODMiIHR5cGU9InRuczpQb3J0VHlwZTE4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NCIgbmFtZT0iSW5wdXQxODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg0IiBuYW1lPSJPdXRwdXQxODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NCIgdHlwZT0idG5zOlBvcnRUeXBlMTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NCIgYmluZGluZz0idG5zOkJpbmRpbmcxODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg1IiBuYW1lPSJJbnB1dDE4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODUiIG5hbWU9Ik91dHB1dDE4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODYiIG5hbWU9IklucHV0MTg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NiIgbmFtZT0iT3V0cHV0MTg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODYiIHR5cGU9InRuczpQb3J0VHlwZTE4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NyIgbmFtZT0iSW5wdXQxODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg3IiBuYW1lPSJPdXRwdXQxODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NyIgdHlwZT0idG5zOlBvcnRUeXBlMTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NyIgYmluZGluZz0idG5zOkJpbmRpbmcxODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg4IiBuYW1lPSJJbnB1dDE4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODgiIG5hbWU9Ik91dHB1dDE4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODkiIG5hbWU9IklucHV0MTg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4OSIgbmFtZT0iT3V0cHV0MTg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODkiIHR5cGU9InRuczpQb3J0VHlwZTE4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MCIgbmFtZT0iSW5wdXQxOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkwIiBuYW1lPSJPdXRwdXQxOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MCIgdHlwZT0idG5zOlBvcnRUeXBlMTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkxIiBuYW1lPSJJbnB1dDE5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTEiIG5hbWU9Ik91dHB1dDE5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTIiIG5hbWU9IklucHV0MTkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MiIgbmFtZT0iT3V0cHV0MTkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTIiIHR5cGU9InRuczpQb3J0VHlwZTE5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MyIgbmFtZT0iSW5wdXQxOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkzIiBuYW1lPSJPdXRwdXQxOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MyIgdHlwZT0idG5zOlBvcnRUeXBlMTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MyIgYmluZGluZz0idG5zOkJpbmRpbmcxOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk0IiBuYW1lPSJJbnB1dDE5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTQiIG5hbWU9Ik91dHB1dDE5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTUiIG5hbWU9IklucHV0MTk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NSIgbmFtZT0iT3V0cHV0MTk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTUiIHR5cGU9InRuczpQb3J0VHlwZTE5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NiIgbmFtZT0iSW5wdXQxOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk2IiBuYW1lPSJPdXRwdXQxOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NiIgdHlwZT0idG5zOlBvcnRUeXBlMTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NiIgYmluZGluZz0idG5zOkJpbmRpbmcxOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk3IiBuYW1lPSJJbnB1dDE5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTciIG5hbWU9Ik91dHB1dDE5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTgiIG5hbWU9IklucHV0MTk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5OCIgbmFtZT0iT3V0cHV0MTk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTgiIHR5cGU9InRuczpQb3J0VHlwZTE5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5OSIgbmFtZT0iSW5wdXQxOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk5IiBuYW1lPSJPdXRwdXQxOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5OSIgdHlwZT0idG5zOlBvcnRUeXBlMTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5OSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAwIiBuYW1lPSJJbnB1dDIwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDAiIG5hbWU9Ik91dHB1dDIwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDEiIG5hbWU9IklucHV0MjAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMSIgbmFtZT0iT3V0cHV0MjAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDEiIHR5cGU9InRuczpQb3J0VHlwZTIwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMiIgbmFtZT0iSW5wdXQyMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAyIiBuYW1lPSJPdXRwdXQyMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMiIgdHlwZT0idG5zOlBvcnRUeXBlMjAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAzIiBuYW1lPSJJbnB1dDIwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDMiIG5hbWU9Ik91dHB1dDIwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDQiIG5hbWU9IklucHV0MjA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNCIgbmFtZT0iT3V0cHV0MjA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDQiIHR5cGU9InRuczpQb3J0VHlwZTIwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNSIgbmFtZT0iSW5wdXQyMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA1IiBuYW1lPSJPdXRwdXQyMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNSIgdHlwZT0idG5zOlBvcnRUeXBlMjA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA2IiBuYW1lPSJJbnB1dDIwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDYiIG5hbWU9Ik91dHB1dDIwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDciIG5hbWU9IklucHV0MjA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNyIgbmFtZT0iT3V0cHV0MjA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDciIHR5cGU9InRuczpQb3J0VHlwZTIwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMjA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwOCIgbmFtZT0iSW5wdXQyMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA4IiBuYW1lPSJPdXRwdXQyMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwOCIgdHlwZT0idG5zOlBvcnRUeXBlMjA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA5IiBuYW1lPSJJbnB1dDIwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDkiIG5hbWU9Ik91dHB1dDIwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTAiIG5hbWU9IklucHV0MjEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMCIgbmFtZT0iT3V0cHV0MjEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTAiIHR5cGU9InRuczpQb3J0VHlwZTIxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMSIgbmFtZT0iSW5wdXQyMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjExIiBuYW1lPSJPdXRwdXQyMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMSIgdHlwZT0idG5zOlBvcnRUeXBlMjExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEyIiBuYW1lPSJJbnB1dDIxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTIiIG5hbWU9Ik91dHB1dDIxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTMiIG5hbWU9IklucHV0MjEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMyIgbmFtZT0iT3V0cHV0MjEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTMiIHR5cGU9InRuczpQb3J0VHlwZTIxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNCIgbmFtZT0iSW5wdXQyMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE0IiBuYW1lPSJPdXRwdXQyMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNCIgdHlwZT0idG5zOlBvcnRUeXBlMjE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE1IiBuYW1lPSJJbnB1dDIxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTUiIG5hbWU9Ik91dHB1dDIxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTYiIG5hbWU9IklucHV0MjE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNiIgbmFtZT0iT3V0cHV0MjE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTYiIHR5cGU9InRuczpQb3J0VHlwZTIxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNyIgbmFtZT0iSW5wdXQyMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE3IiBuYW1lPSJPdXRwdXQyMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNyIgdHlwZT0idG5zOlBvcnRUeXBlMjE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE4IiBuYW1lPSJJbnB1dDIxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTgiIG5hbWU9Ik91dHB1dDIxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTkiIG5hbWU9IklucHV0MjE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxOSIgbmFtZT0iT3V0cHV0MjE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTkiIHR5cGU9InRuczpQb3J0VHlwZTIxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMCIgbmFtZT0iSW5wdXQyMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIwIiBuYW1lPSJPdXRwdXQyMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIxIiBuYW1lPSJJbnB1dDIyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjEiIG5hbWU9Ik91dHB1dDIyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjIiIG5hbWU9IklucHV0MjIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMiIgbmFtZT0iT3V0cHV0MjIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjIiIHR5cGU9InRuczpQb3J0VHlwZTIyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMyIgbmFtZT0iSW5wdXQyMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIzIiBuYW1lPSJPdXRwdXQyMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI0IiBuYW1lPSJJbnB1dDIyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjQiIG5hbWU9Ik91dHB1dDIyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjUiIG5hbWU9IklucHV0MjI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNSIgbmFtZT0iT3V0cHV0MjI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjUiIHR5cGU9InRuczpQb3J0VHlwZTIyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNiIgbmFtZT0iSW5wdXQyMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI2IiBuYW1lPSJPdXRwdXQyMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI3IiBuYW1lPSJJbnB1dDIyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjciIG5hbWU9Ik91dHB1dDIyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjgiIG5hbWU9IklucHV0MjI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyOCIgbmFtZT0iT3V0cHV0MjI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjgiIHR5cGU9InRuczpQb3J0VHlwZTIyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyOSIgbmFtZT0iSW5wdXQyMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI5IiBuYW1lPSJPdXRwdXQyMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMwIiBuYW1lPSJJbnB1dDIzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzAiIG5hbWU9Ik91dHB1dDIzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzEiIG5hbWU9IklucHV0MjMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMSIgbmFtZT0iT3V0cHV0MjMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzEiIHR5cGU9InRuczpQb3J0VHlwZTIzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMiIgbmFtZT0iSW5wdXQyMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMyIiBuYW1lPSJPdXRwdXQyMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMiIgdHlwZT0idG5zOlBvcnRUeXBlMjMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMzIiBuYW1lPSJJbnB1dDIzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzMiIG5hbWU9Ik91dHB1dDIzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzQiIG5hbWU9IklucHV0MjM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNCIgbmFtZT0iT3V0cHV0MjM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzQiIHR5cGU9InRuczpQb3J0VHlwZTIzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNSIgbmFtZT0iSW5wdXQyMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM1IiBuYW1lPSJPdXRwdXQyMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNSIgdHlwZT0idG5zOlBvcnRUeXBlMjM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM2IiBuYW1lPSJJbnB1dDIzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzYiIG5hbWU9Ik91dHB1dDIzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzciIG5hbWU9IklucHV0MjM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNyIgbmFtZT0iT3V0cHV0MjM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzciIHR5cGU9InRuczpQb3J0VHlwZTIzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMjM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzOCIgbmFtZT0iSW5wdXQyMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM4IiBuYW1lPSJPdXRwdXQyMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzOCIgdHlwZT0idG5zOlBvcnRUeXBlMjM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM5IiBuYW1lPSJJbnB1dDIzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzkiIG5hbWU9Ik91dHB1dDIzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDAiIG5hbWU9IklucHV0MjQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MCIgbmFtZT0iT3V0cHV0MjQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDAiIHR5cGU9InRuczpQb3J0VHlwZTI0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MSIgbmFtZT0iSW5wdXQyNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQxIiBuYW1lPSJPdXRwdXQyNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MSIgdHlwZT0idG5zOlBvcnRUeXBlMjQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQyIiBuYW1lPSJJbnB1dDI0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDIiIG5hbWU9Ik91dHB1dDI0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDMiIG5hbWU9IklucHV0MjQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MyIgbmFtZT0iT3V0cHV0MjQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDMiIHR5cGU9InRuczpQb3J0VHlwZTI0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NCIgbmFtZT0iSW5wdXQyNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ0IiBuYW1lPSJPdXRwdXQyNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NCIgdHlwZT0idG5zOlBvcnRUeXBlMjQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ1IiBuYW1lPSJJbnB1dDI0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDUiIG5hbWU9Ik91dHB1dDI0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDYiIG5hbWU9IklucHV0MjQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NiIgbmFtZT0iT3V0cHV0MjQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDYiIHR5cGU9InRuczpQb3J0VHlwZTI0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NyIgbmFtZT0iSW5wdXQyNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ3IiBuYW1lPSJPdXRwdXQyNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NyIgdHlwZT0idG5zOlBvcnRUeXBlMjQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ4IiBuYW1lPSJJbnB1dDI0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDgiIG5hbWU9Ik91dHB1dDI0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDkiIG5hbWU9IklucHV0MjQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0OSIgbmFtZT0iT3V0cHV0MjQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDkiIHR5cGU9InRuczpQb3J0VHlwZTI0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MCIgbmFtZT0iSW5wdXQyNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUwIiBuYW1lPSJPdXRwdXQyNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MCIgdHlwZT0idG5zOlBvcnRUeXBlMjUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUxIiBuYW1lPSJJbnB1dDI1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTEiIG5hbWU9Ik91dHB1dDI1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTIiIG5hbWU9IklucHV0MjUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MiIgbmFtZT0iT3V0cHV0MjUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTIiIHR5cGU9InRuczpQb3J0VHlwZTI1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MyIgbmFtZT0iSW5wdXQyNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUzIiBuYW1lPSJPdXRwdXQyNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MyIgdHlwZT0idG5zOlBvcnRUeXBlMjUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU0IiBuYW1lPSJJbnB1dDI1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTQiIG5hbWU9Ik91dHB1dDI1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTUiIG5hbWU9IklucHV0MjU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NSIgbmFtZT0iT3V0cHV0MjU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTUiIHR5cGU9InRuczpQb3J0VHlwZTI1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NiIgbmFtZT0iSW5wdXQyNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU2IiBuYW1lPSJPdXRwdXQyNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NiIgdHlwZT0idG5zOlBvcnRUeXBlMjU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU3IiBuYW1lPSJJbnB1dDI1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTciIG5hbWU9Ik91dHB1dDI1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTgiIG5hbWU9IklucHV0MjU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1OCIgbmFtZT0iT3V0cHV0MjU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTgiIHR5cGU9InRuczpQb3J0VHlwZTI1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1OSIgbmFtZT0iSW5wdXQyNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU5IiBuYW1lPSJPdXRwdXQyNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1OSIgdHlwZT0idG5zOlBvcnRUeXBlMjU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYwIiBuYW1lPSJJbnB1dDI2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjAiIG5hbWU9Ik91dHB1dDI2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjEiIG5hbWU9IklucHV0MjYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MSIgbmFtZT0iT3V0cHV0MjYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjEiIHR5cGU9InRuczpQb3J0VHlwZTI2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MiIgbmFtZT0iSW5wdXQyNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYyIiBuYW1lPSJPdXRwdXQyNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MiIgdHlwZT0idG5zOlBvcnRUeXBlMjYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYzIiBuYW1lPSJJbnB1dDI2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjMiIG5hbWU9Ik91dHB1dDI2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjQiIG5hbWU9IklucHV0MjY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NCIgbmFtZT0iT3V0cHV0MjY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjQiIHR5cGU9InRuczpQb3J0VHlwZTI2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NSIgbmFtZT0iSW5wdXQyNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY1IiBuYW1lPSJPdXRwdXQyNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NSIgdHlwZT0idG5zOlBvcnRUeXBlMjY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY2IiBuYW1lPSJJbnB1dDI2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjYiIG5hbWU9Ik91dHB1dDI2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjciIG5hbWU9IklucHV0MjY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NyIgbmFtZT0iT3V0cHV0MjY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjciIHR5cGU9InRuczpQb3J0VHlwZTI2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2OCIgbmFtZT0iSW5wdXQyNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY4IiBuYW1lPSJPdXRwdXQyNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2OCIgdHlwZT0idG5zOlBvcnRUeXBlMjY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY5IiBuYW1lPSJJbnB1dDI2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjkiIG5hbWU9Ik91dHB1dDI2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzAiIG5hbWU9IklucHV0MjcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MCIgbmFtZT0iT3V0cHV0MjcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzAiIHR5cGU9InRuczpQb3J0VHlwZTI3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MSIgbmFtZT0iSW5wdXQyNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjcxIiBuYW1lPSJPdXRwdXQyNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MSIgdHlwZT0idG5zOlBvcnRUeXBlMjcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjcyIiBuYW1lPSJJbnB1dDI3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzIiIG5hbWU9Ik91dHB1dDI3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzMiIG5hbWU9IklucHV0MjczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MyIgbmFtZT0iT3V0cHV0MjczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzMiIHR5cGU9InRuczpQb3J0VHlwZTI3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NCIgbmFtZT0iSW5wdXQyNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc0IiBuYW1lPSJPdXRwdXQyNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NCIgdHlwZT0idG5zOlBvcnRUeXBlMjc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc1IiBuYW1lPSJJbnB1dDI3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzUiIG5hbWU9Ik91dHB1dDI3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzYiIG5hbWU9IklucHV0Mjc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NiIgbmFtZT0iT3V0cHV0Mjc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzYiIHR5cGU9InRuczpQb3J0VHlwZTI3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NyIgbmFtZT0iSW5wdXQyNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc3IiBuYW1lPSJPdXRwdXQyNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NyIgdHlwZT0idG5zOlBvcnRUeXBlMjc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc4IiBuYW1lPSJJbnB1dDI3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzgiIG5hbWU9Ik91dHB1dDI3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzkiIG5hbWU9IklucHV0Mjc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3OSIgbmFtZT0iT3V0cHV0Mjc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzkiIHR5cGU9InRuczpQb3J0VHlwZTI3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MCIgbmFtZT0iSW5wdXQyODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgwIiBuYW1lPSJPdXRwdXQyODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MCIgdHlwZT0idG5zOlBvcnRUeXBlMjgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MCIgYmluZGluZz0idG5zOkJpbmRpbmcyODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgxIiBuYW1lPSJJbnB1dDI4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODEiIG5hbWU9Ik91dHB1dDI4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODIiIG5hbWU9IklucHV0MjgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MiIgbmFtZT0iT3V0cHV0MjgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODIiIHR5cGU9InRuczpQb3J0VHlwZTI4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MyIgbmFtZT0iSW5wdXQyODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgzIiBuYW1lPSJPdXRwdXQyODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MyIgdHlwZT0idG5zOlBvcnRUeXBlMjgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MyIgYmluZGluZz0idG5zOkJpbmRpbmcyODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg0IiBuYW1lPSJJbnB1dDI4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODQiIG5hbWU9Ik91dHB1dDI4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODUiIG5hbWU9IklucHV0Mjg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NSIgbmFtZT0iT3V0cHV0Mjg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODUiIHR5cGU9InRuczpQb3J0VHlwZTI4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NiIgbmFtZT0iSW5wdXQyODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg2IiBuYW1lPSJPdXRwdXQyODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NiIgdHlwZT0idG5zOlBvcnRUeXBlMjg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NiIgYmluZGluZz0idG5zOkJpbmRpbmcyODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg3IiBuYW1lPSJJbnB1dDI4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODciIG5hbWU9Ik91dHB1dDI4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODgiIG5hbWU9IklucHV0Mjg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4OCIgbmFtZT0iT3V0cHV0Mjg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODgiIHR5cGU9InRuczpQb3J0VHlwZTI4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4OSIgbmFtZT0iSW5wdXQyODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg5IiBuYW1lPSJPdXRwdXQyODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4OSIgdHlwZT0idG5zOlBvcnRUeXBlMjg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4OSIgYmluZGluZz0idG5zOkJpbmRpbmcyODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkwIiBuYW1lPSJJbnB1dDI5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTAiIG5hbWU9Ik91dHB1dDI5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTEiIG5hbWU9IklucHV0MjkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MSIgbmFtZT0iT3V0cHV0MjkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTEiIHR5cGU9InRuczpQb3J0VHlwZTI5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MiIgbmFtZT0iSW5wdXQyOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkyIiBuYW1lPSJPdXRwdXQyOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MiIgdHlwZT0idG5zOlBvcnRUeXBlMjkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MiIgYmluZGluZz0idG5zOkJpbmRpbmcyOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkzIiBuYW1lPSJJbnB1dDI5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTMiIG5hbWU9Ik91dHB1dDI5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTQiIG5hbWU9IklucHV0Mjk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NCIgbmFtZT0iT3V0cHV0Mjk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTQiIHR5cGU9InRuczpQb3J0VHlwZTI5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NSIgbmFtZT0iSW5wdXQyOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk1IiBuYW1lPSJPdXRwdXQyOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NSIgdHlwZT0idG5zOlBvcnRUeXBlMjk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NSIgYmluZGluZz0idG5zOkJpbmRpbmcyOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk2IiBuYW1lPSJJbnB1dDI5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTYiIG5hbWU9Ik91dHB1dDI5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTciIG5hbWU9IklucHV0Mjk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NyIgbmFtZT0iT3V0cHV0Mjk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTciIHR5cGU9InRuczpQb3J0VHlwZTI5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMjk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5OCIgbmFtZT0iSW5wdXQyOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk4IiBuYW1lPSJPdXRwdXQyOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5OCIgdHlwZT0idG5zOlBvcnRUeXBlMjk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5OCIgYmluZGluZz0idG5zOkJpbmRpbmcyOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk5IiBuYW1lPSJJbnB1dDI5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTkiIG5hbWU9Ik91dHB1dDI5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDAiIG5hbWU9IklucHV0MzAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMCIgbmFtZT0iT3V0cHV0MzAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDAiIHR5cGU9InRuczpQb3J0VHlwZTMwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMSIgbmFtZT0iSW5wdXQzMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAxIiBuYW1lPSJPdXRwdXQzMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMSIgdHlwZT0idG5zOlBvcnRUeXBlMzAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMSIgYmluZGluZz0idG5zOkJpbmRpbmczMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAyIiBuYW1lPSJJbnB1dDMwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDIiIG5hbWU9Ik91dHB1dDMwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDMiIG5hbWU9IklucHV0MzAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMyIgbmFtZT0iT3V0cHV0MzAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDMiIHR5cGU9InRuczpQb3J0VHlwZTMwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNCIgbmFtZT0iSW5wdXQzMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA0IiBuYW1lPSJPdXRwdXQzMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNCIgdHlwZT0idG5zOlBvcnRUeXBlMzA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNCIgYmluZGluZz0idG5zOkJpbmRpbmczMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA1IiBuYW1lPSJJbnB1dDMwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDUiIG5hbWU9Ik91dHB1dDMwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDYiIG5hbWU9IklucHV0MzA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNiIgbmFtZT0iT3V0cHV0MzA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDYiIHR5cGU9InRuczpQb3J0VHlwZTMwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNyIgbmFtZT0iSW5wdXQzMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA3IiBuYW1lPSJPdXRwdXQzMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNyIgdHlwZT0idG5zOlBvcnRUeXBlMzA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNyIgYmluZGluZz0idG5zOkJpbmRpbmczMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA4IiBuYW1lPSJJbnB1dDMwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDgiIG5hbWU9Ik91dHB1dDMwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDkiIG5hbWU9IklucHV0MzA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwOSIgbmFtZT0iT3V0cHV0MzA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDkiIHR5cGU9InRuczpQb3J0VHlwZTMwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMCIgbmFtZT0iSW5wdXQzMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEwIiBuYW1lPSJPdXRwdXQzMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMCIgdHlwZT0idG5zOlBvcnRUeXBlMzEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMCIgYmluZGluZz0idG5zOkJpbmRpbmczMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzExIiBuYW1lPSJJbnB1dDMxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTEiIG5hbWU9Ik91dHB1dDMxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzExIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTIiIG5hbWU9IklucHV0MzEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMiIgbmFtZT0iT3V0cHV0MzEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTIiIHR5cGU9InRuczpQb3J0VHlwZTMxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMyIgbmFtZT0iSW5wdXQzMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEzIiBuYW1lPSJPdXRwdXQzMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMyIgdHlwZT0idG5zOlBvcnRUeXBlMzEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMyIgYmluZGluZz0idG5zOkJpbmRpbmczMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE0IiBuYW1lPSJJbnB1dDMxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTQiIG5hbWU9Ik91dHB1dDMxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTUiIG5hbWU9IklucHV0MzE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNSIgbmFtZT0iT3V0cHV0MzE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTUiIHR5cGU9InRuczpQb3J0VHlwZTMxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNiIgbmFtZT0iSW5wdXQzMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE2IiBuYW1lPSJPdXRwdXQzMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNiIgdHlwZT0idG5zOlBvcnRUeXBlMzE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNiIgYmluZGluZz0idG5zOkJpbmRpbmczMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE3IiBuYW1lPSJJbnB1dDMxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTciIG5hbWU9Ik91dHB1dDMxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTgiIG5hbWU9IklucHV0MzE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxOCIgbmFtZT0iT3V0cHV0MzE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTgiIHR5cGU9InRuczpQb3J0VHlwZTMxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxOSIgbmFtZT0iSW5wdXQzMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE5IiBuYW1lPSJPdXRwdXQzMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxOSIgdHlwZT0idG5zOlBvcnRUeXBlMzE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxOSIgYmluZGluZz0idG5zOkJpbmRpbmczMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIwIiBuYW1lPSJJbnB1dDMyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjAiIG5hbWU9Ik91dHB1dDMyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjEiIG5hbWU9IklucHV0MzIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMSIgbmFtZT0iT3V0cHV0MzIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjEiIHR5cGU9InRuczpQb3J0VHlwZTMyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMiIgbmFtZT0iSW5wdXQzMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIyIiBuYW1lPSJPdXRwdXQzMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMiIgYmluZGluZz0idG5zOkJpbmRpbmczMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIzIiBuYW1lPSJJbnB1dDMyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjMiIG5hbWU9Ik91dHB1dDMyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjQiIG5hbWU9IklucHV0MzI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNCIgbmFtZT0iT3V0cHV0MzI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjQiIHR5cGU9InRuczpQb3J0VHlwZTMyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNSIgbmFtZT0iSW5wdXQzMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI1IiBuYW1lPSJPdXRwdXQzMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNSIgdHlwZT0idG5zOlBvcnRUeXBlMzI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNSIgYmluZGluZz0idG5zOkJpbmRpbmczMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI2IiBuYW1lPSJJbnB1dDMyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjYiIG5hbWU9Ik91dHB1dDMyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjciIG5hbWU9IklucHV0MzI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNyIgbmFtZT0iT3V0cHV0MzI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjciIHR5cGU9InRuczpQb3J0VHlwZTMyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyOCIgbmFtZT0iSW5wdXQzMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI4IiBuYW1lPSJPdXRwdXQzMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyOCIgdHlwZT0idG5zOlBvcnRUeXBlMzI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyOCIgYmluZGluZz0idG5zOkJpbmRpbmczMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI5IiBuYW1lPSJJbnB1dDMyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjkiIG5hbWU9Ik91dHB1dDMyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzAiIG5hbWU9IklucHV0MzMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMCIgbmFtZT0iT3V0cHV0MzMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzAiIHR5cGU9InRuczpQb3J0VHlwZTMzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMSIgbmFtZT0iSW5wdXQzMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMxIiBuYW1lPSJPdXRwdXQzMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMSIgdHlwZT0idG5zOlBvcnRUeXBlMzMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMSIgYmluZGluZz0idG5zOkJpbmRpbmczMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMyIiBuYW1lPSJJbnB1dDMzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzIiIG5hbWU9Ik91dHB1dDMzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzMiIG5hbWU9IklucHV0MzMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMyIgbmFtZT0iT3V0cHV0MzMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzMiIHR5cGU9InRuczpQb3J0VHlwZTMzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNCIgbmFtZT0iSW5wdXQzMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM0IiBuYW1lPSJPdXRwdXQzMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNCIgdHlwZT0idG5zOlBvcnRUeXBlMzM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNCIgYmluZGluZz0idG5zOkJpbmRpbmczMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM1IiBuYW1lPSJJbnB1dDMzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzUiIG5hbWU9Ik91dHB1dDMzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzYiIG5hbWU9IklucHV0MzM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNiIgbmFtZT0iT3V0cHV0MzM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzYiIHR5cGU9InRuczpQb3J0VHlwZTMzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNyIgbmFtZT0iSW5wdXQzMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM3IiBuYW1lPSJPdXRwdXQzMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNyIgdHlwZT0idG5zOlBvcnRUeXBlMzM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNyIgYmluZGluZz0idG5zOkJpbmRpbmczMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM4IiBuYW1lPSJJbnB1dDMzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzgiIG5hbWU9Ik91dHB1dDMzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzkiIG5hbWU9IklucHV0MzM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzOSIgbmFtZT0iT3V0cHV0MzM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzkiIHR5cGU9InRuczpQb3J0VHlwZTMzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MCIgbmFtZT0iSW5wdXQzNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQwIiBuYW1lPSJPdXRwdXQzNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MCIgdHlwZT0idG5zOlBvcnRUeXBlMzQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MCIgYmluZGluZz0idG5zOkJpbmRpbmczNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQxIiBuYW1lPSJJbnB1dDM0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDEiIG5hbWU9Ik91dHB1dDM0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDIiIG5hbWU9IklucHV0MzQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MiIgbmFtZT0iT3V0cHV0MzQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDIiIHR5cGU9InRuczpQb3J0VHlwZTM0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MyIgbmFtZT0iSW5wdXQzNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQzIiBuYW1lPSJPdXRwdXQzNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MyIgdHlwZT0idG5zOlBvcnRUeXBlMzQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MyIgYmluZGluZz0idG5zOkJpbmRpbmczNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ0IiBuYW1lPSJJbnB1dDM0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDQiIG5hbWU9Ik91dHB1dDM0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDUiIG5hbWU9IklucHV0MzQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NSIgbmFtZT0iT3V0cHV0MzQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDUiIHR5cGU9InRuczpQb3J0VHlwZTM0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NiIgbmFtZT0iSW5wdXQzNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ2IiBuYW1lPSJPdXRwdXQzNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NiIgdHlwZT0idG5zOlBvcnRUeXBlMzQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NiIgYmluZGluZz0idG5zOkJpbmRpbmczNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ3IiBuYW1lPSJJbnB1dDM0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDciIG5hbWU9Ik91dHB1dDM0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDgiIG5hbWU9IklucHV0MzQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0OCIgbmFtZT0iT3V0cHV0MzQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDgiIHR5cGU9InRuczpQb3J0VHlwZTM0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0OSIgbmFtZT0iSW5wdXQzNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ5IiBuYW1lPSJPdXRwdXQzNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0OSIgdHlwZT0idG5zOlBvcnRUeXBlMzQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0OSIgYmluZGluZz0idG5zOkJpbmRpbmczNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUwIiBuYW1lPSJJbnB1dDM1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTAiIG5hbWU9Ik91dHB1dDM1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTEiIG5hbWU9IklucHV0MzUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MSIgbmFtZT0iT3V0cHV0MzUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTEiIHR5cGU9InRuczpQb3J0VHlwZTM1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MiIgbmFtZT0iSW5wdXQzNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUyIiBuYW1lPSJPdXRwdXQzNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MiIgdHlwZT0idG5zOlBvcnRUeXBlMzUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MiIgYmluZGluZz0idG5zOkJpbmRpbmczNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUzIiBuYW1lPSJJbnB1dDM1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTMiIG5hbWU9Ik91dHB1dDM1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTQiIG5hbWU9IklucHV0MzU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NCIgbmFtZT0iT3V0cHV0MzU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTQiIHR5cGU9InRuczpQb3J0VHlwZTM1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NSIgbmFtZT0iSW5wdXQzNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU1IiBuYW1lPSJPdXRwdXQzNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NSIgdHlwZT0idG5zOlBvcnRUeXBlMzU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NSIgYmluZGluZz0idG5zOkJpbmRpbmczNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU2IiBuYW1lPSJJbnB1dDM1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTYiIG5hbWU9Ik91dHB1dDM1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTciIG5hbWU9IklucHV0MzU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NyIgbmFtZT0iT3V0cHV0MzU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTciIHR5cGU9InRuczpQb3J0VHlwZTM1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1OCIgbmFtZT0iSW5wdXQzNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU4IiBuYW1lPSJPdXRwdXQzNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1OCIgdHlwZT0idG5zOlBvcnRUeXBlMzU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1OCIgYmluZGluZz0idG5zOkJpbmRpbmczNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU5IiBuYW1lPSJJbnB1dDM1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTkiIG5hbWU9Ik91dHB1dDM1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjAiIG5hbWU9IklucHV0MzYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MCIgbmFtZT0iT3V0cHV0MzYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjAiIHR5cGU9InRuczpQb3J0VHlwZTM2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MSIgbmFtZT0iSW5wdXQzNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYxIiBuYW1lPSJPdXRwdXQzNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MSIgdHlwZT0idG5zOlBvcnRUeXBlMzYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MSIgYmluZGluZz0idG5zOkJpbmRpbmczNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYyIiBuYW1lPSJJbnB1dDM2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjIiIG5hbWU9Ik91dHB1dDM2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjMiIG5hbWU9IklucHV0MzYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MyIgbmFtZT0iT3V0cHV0MzYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjMiIHR5cGU9InRuczpQb3J0VHlwZTM2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NCIgbmFtZT0iSW5wdXQzNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY0IiBuYW1lPSJPdXRwdXQzNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NCIgdHlwZT0idG5zOlBvcnRUeXBlMzY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NCIgYmluZGluZz0idG5zOkJpbmRpbmczNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY1IiBuYW1lPSJJbnB1dDM2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjUiIG5hbWU9Ik91dHB1dDM2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjYiIG5hbWU9IklucHV0MzY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NiIgbmFtZT0iT3V0cHV0MzY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjYiIHR5cGU9InRuczpQb3J0VHlwZTM2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NyIgbmFtZT0iSW5wdXQzNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY3IiBuYW1lPSJPdXRwdXQzNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NyIgdHlwZT0idG5zOlBvcnRUeXBlMzY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NyIgYmluZGluZz0idG5zOkJpbmRpbmczNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY4IiBuYW1lPSJJbnB1dDM2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjgiIG5hbWU9Ik91dHB1dDM2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjkiIG5hbWU9IklucHV0MzY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2OSIgbmFtZT0iT3V0cHV0MzY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjkiIHR5cGU9InRuczpQb3J0VHlwZTM2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MCIgbmFtZT0iSW5wdXQzNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzcwIiBuYW1lPSJPdXRwdXQzNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MCIgdHlwZT0idG5zOlBvcnRUeXBlMzcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MCIgYmluZGluZz0idG5zOkJpbmRpbmczNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzcxIiBuYW1lPSJJbnB1dDM3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzEiIG5hbWU9Ik91dHB1dDM3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzIiIG5hbWU9IklucHV0MzcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MiIgbmFtZT0iT3V0cHV0MzcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzIiIHR5cGU9InRuczpQb3J0VHlwZTM3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MyIgbmFtZT0iSW5wdXQzNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzczIiBuYW1lPSJPdXRwdXQzNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MyIgdHlwZT0idG5zOlBvcnRUeXBlMzczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MyIgYmluZGluZz0idG5zOkJpbmRpbmczNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc0IiBuYW1lPSJJbnB1dDM3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzQiIG5hbWU9Ik91dHB1dDM3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzUiIG5hbWU9IklucHV0Mzc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NSIgbmFtZT0iT3V0cHV0Mzc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzUiIHR5cGU9InRuczpQb3J0VHlwZTM3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NiIgbmFtZT0iSW5wdXQzNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc2IiBuYW1lPSJPdXRwdXQzNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NiIgdHlwZT0idG5zOlBvcnRUeXBlMzc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NiIgYmluZGluZz0idG5zOkJpbmRpbmczNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc3IiBuYW1lPSJJbnB1dDM3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzciIG5hbWU9Ik91dHB1dDM3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzgiIG5hbWU9IklucHV0Mzc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3OCIgbmFtZT0iT3V0cHV0Mzc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzgiIHR5cGU9InRuczpQb3J0VHlwZTM3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3OSIgbmFtZT0iSW5wdXQzNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc5IiBuYW1lPSJPdXRwdXQzNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3OSIgdHlwZT0idG5zOlBvcnRUeXBlMzc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3OSIgYmluZGluZz0idG5zOkJpbmRpbmczNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgwIiBuYW1lPSJJbnB1dDM4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODAiIG5hbWU9Ik91dHB1dDM4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODEiIG5hbWU9IklucHV0MzgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MSIgbmFtZT0iT3V0cHV0MzgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODEiIHR5cGU9InRuczpQb3J0VHlwZTM4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MiIgbmFtZT0iSW5wdXQzODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgyIiBuYW1lPSJPdXRwdXQzODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MiIgdHlwZT0idG5zOlBvcnRUeXBlMzgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MiIgYmluZGluZz0idG5zOkJpbmRpbmczODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgzIiBuYW1lPSJJbnB1dDM4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODMiIG5hbWU9Ik91dHB1dDM4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODQiIG5hbWU9IklucHV0Mzg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NCIgbmFtZT0iT3V0cHV0Mzg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODQiIHR5cGU9InRuczpQb3J0VHlwZTM4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NSIgbmFtZT0iSW5wdXQzODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg1IiBuYW1lPSJPdXRwdXQzODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NSIgdHlwZT0idG5zOlBvcnRUeXBlMzg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NSIgYmluZGluZz0idG5zOkJpbmRpbmczODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg2IiBuYW1lPSJJbnB1dDM4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODYiIG5hbWU9Ik91dHB1dDM4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODciIG5hbWU9IklucHV0Mzg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NyIgbmFtZT0iT3V0cHV0Mzg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODciIHR5cGU9InRuczpQb3J0VHlwZTM4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODciIGJpbmRpbmc9InRuczpCaW5kaW5nMzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4OCIgbmFtZT0iSW5wdXQzODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg4IiBuYW1lPSJPdXRwdXQzODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4OCIgdHlwZT0idG5zOlBvcnRUeXBlMzg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4OCIgYmluZGluZz0idG5zOkJpbmRpbmczODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg5IiBuYW1lPSJJbnB1dDM4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODkiIG5hbWU9Ik91dHB1dDM4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTAiIG5hbWU9IklucHV0MzkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MCIgbmFtZT0iT3V0cHV0MzkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTAiIHR5cGU9InRuczpQb3J0VHlwZTM5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MSIgbmFtZT0iSW5wdXQzOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkxIiBuYW1lPSJPdXRwdXQzOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MSIgdHlwZT0idG5zOlBvcnRUeXBlMzkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MSIgYmluZGluZz0idG5zOkJpbmRpbmczOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkyIiBuYW1lPSJJbnB1dDM5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTIiIG5hbWU9Ik91dHB1dDM5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTMiIG5hbWU9IklucHV0MzkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MyIgbmFtZT0iT3V0cHV0MzkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTMiIHR5cGU9InRuczpQb3J0VHlwZTM5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NCIgbmFtZT0iSW5wdXQzOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk0IiBuYW1lPSJPdXRwdXQzOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NCIgdHlwZT0idG5zOlBvcnRUeXBlMzk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NCIgYmluZGluZz0idG5zOkJpbmRpbmczOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk1IiBuYW1lPSJJbnB1dDM5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTUiIG5hbWU9Ik91dHB1dDM5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTYiIG5hbWU9IklucHV0Mzk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NiIgbmFtZT0iT3V0cHV0Mzk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTYiIHR5cGU9InRuczpQb3J0VHlwZTM5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NyIgbmFtZT0iSW5wdXQzOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk3IiBuYW1lPSJPdXRwdXQzOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NyIgdHlwZT0idG5zOlBvcnRUeXBlMzk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NyIgYmluZGluZz0idG5zOkJpbmRpbmczOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk4IiBuYW1lPSJJbnB1dDM5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTgiIG5hbWU9Ik91dHB1dDM5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTkiIG5hbWU9IklucHV0Mzk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5OSIgbmFtZT0iT3V0cHV0Mzk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTkiIHR5cGU9InRuczpQb3J0VHlwZTM5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMCIgbmFtZT0iSW5wdXQ0MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAwIiBuYW1lPSJPdXRwdXQ0MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMCIgdHlwZT0idG5zOlBvcnRUeXBlNDAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAxIiBuYW1lPSJJbnB1dDQwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDEiIG5hbWU9Ik91dHB1dDQwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDIiIG5hbWU9IklucHV0NDAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMiIgbmFtZT0iT3V0cHV0NDAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDIiIHR5cGU9InRuczpQb3J0VHlwZTQwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMyIgbmFtZT0iSW5wdXQ0MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAzIiBuYW1lPSJPdXRwdXQ0MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMyIgdHlwZT0idG5zOlBvcnRUeXBlNDAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA0IiBuYW1lPSJJbnB1dDQwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDQiIG5hbWU9Ik91dHB1dDQwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDUiIG5hbWU9IklucHV0NDA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNSIgbmFtZT0iT3V0cHV0NDA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDUiIHR5cGU9InRuczpQb3J0VHlwZTQwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNiIgbmFtZT0iSW5wdXQ0MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA2IiBuYW1lPSJPdXRwdXQ0MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNiIgdHlwZT0idG5zOlBvcnRUeXBlNDA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA3IiBuYW1lPSJJbnB1dDQwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDciIG5hbWU9Ik91dHB1dDQwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDgiIG5hbWU9IklucHV0NDA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwOCIgbmFtZT0iT3V0cHV0NDA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDgiIHR5cGU9InRuczpQb3J0VHlwZTQwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwOSIgbmFtZT0iSW5wdXQ0MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA5IiBuYW1lPSJPdXRwdXQ0MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwOSIgdHlwZT0idG5zOlBvcnRUeXBlNDA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEwIiBuYW1lPSJJbnB1dDQxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTAiIG5hbWU9Ik91dHB1dDQxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTEiIG5hbWU9IklucHV0NDExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMSIgbmFtZT0iT3V0cHV0NDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTEiIHR5cGU9InRuczpQb3J0VHlwZTQxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMiIgbmFtZT0iSW5wdXQ0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEyIiBuYW1lPSJPdXRwdXQ0MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMiIgdHlwZT0idG5zOlBvcnRUeXBlNDEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEzIiBuYW1lPSJJbnB1dDQxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTMiIG5hbWU9Ik91dHB1dDQxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTQiIG5hbWU9IklucHV0NDE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNCIgbmFtZT0iT3V0cHV0NDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTQiIHR5cGU9InRuczpQb3J0VHlwZTQxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNSIgbmFtZT0iSW5wdXQ0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE1IiBuYW1lPSJPdXRwdXQ0MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNSIgdHlwZT0idG5zOlBvcnRUeXBlNDE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE2IiBuYW1lPSJJbnB1dDQxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTYiIG5hbWU9Ik91dHB1dDQxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTciIG5hbWU9IklucHV0NDE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNyIgbmFtZT0iT3V0cHV0NDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTciIHR5cGU9InRuczpQb3J0VHlwZTQxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nNDE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxOCIgbmFtZT0iSW5wdXQ0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE4IiBuYW1lPSJPdXRwdXQ0MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxOCIgdHlwZT0idG5zOlBvcnRUeXBlNDE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE5IiBuYW1lPSJJbnB1dDQxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTkiIG5hbWU9Ik91dHB1dDQxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjAiIG5hbWU9IklucHV0NDIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMCIgbmFtZT0iT3V0cHV0NDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjAiIHR5cGU9InRuczpQb3J0VHlwZTQyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMSIgbmFtZT0iSW5wdXQ0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIxIiBuYW1lPSJPdXRwdXQ0MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMSIgdHlwZT0idG5zOlBvcnRUeXBlNDIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIyIiBuYW1lPSJJbnB1dDQyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjIiIG5hbWU9Ik91dHB1dDQyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjMiIG5hbWU9IklucHV0NDIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMyIgbmFtZT0iT3V0cHV0NDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjMiIHR5cGU9InRuczpQb3J0VHlwZTQyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNCIgbmFtZT0iSW5wdXQ0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI0IiBuYW1lPSJPdXRwdXQ0MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNCIgdHlwZT0idG5zOlBvcnRUeXBlNDI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI1IiBuYW1lPSJJbnB1dDQyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjUiIG5hbWU9Ik91dHB1dDQyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjYiIG5hbWU9IklucHV0NDI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNiIgbmFtZT0iT3V0cHV0NDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjYiIHR5cGU9InRuczpQb3J0VHlwZTQyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNyIgbmFtZT0iSW5wdXQ0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI3IiBuYW1lPSJPdXRwdXQ0MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNyIgdHlwZT0idG5zOlBvcnRUeXBlNDI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI4IiBuYW1lPSJJbnB1dDQyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjgiIG5hbWU9Ik91dHB1dDQyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjkiIG5hbWU9IklucHV0NDI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyOSIgbmFtZT0iT3V0cHV0NDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjkiIHR5cGU9InRuczpQb3J0VHlwZTQyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMCIgbmFtZT0iSW5wdXQ0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMwIiBuYW1lPSJPdXRwdXQ0MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMCIgdHlwZT0idG5zOlBvcnRUeXBlNDMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMxIiBuYW1lPSJJbnB1dDQzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzEiIG5hbWU9Ik91dHB1dDQzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzIiIG5hbWU9IklucHV0NDMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMiIgbmFtZT0iT3V0cHV0NDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzIiIHR5cGU9InRuczpQb3J0VHlwZTQzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMyIgbmFtZT0iSW5wdXQ0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMzIiBuYW1lPSJPdXRwdXQ0MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMyIgdHlwZT0idG5zOlBvcnRUeXBlNDMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM0IiBuYW1lPSJJbnB1dDQzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzQiIG5hbWU9Ik91dHB1dDQzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzUiIG5hbWU9IklucHV0NDM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNSIgbmFtZT0iT3V0cHV0NDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzUiIHR5cGU9InRuczpQb3J0VHlwZTQzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNiIgbmFtZT0iSW5wdXQ0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM2IiBuYW1lPSJPdXRwdXQ0MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNiIgdHlwZT0idG5zOlBvcnRUeXBlNDM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM3IiBuYW1lPSJJbnB1dDQzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzciIG5hbWU9Ik91dHB1dDQzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzgiIG5hbWU9IklucHV0NDM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzOCIgbmFtZT0iT3V0cHV0NDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzgiIHR5cGU9InRuczpQb3J0VHlwZTQzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzOSIgbmFtZT0iSW5wdXQ0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM5IiBuYW1lPSJPdXRwdXQ0MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzOSIgdHlwZT0idG5zOlBvcnRUeXBlNDM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQwIiBuYW1lPSJJbnB1dDQ0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDAiIG5hbWU9Ik91dHB1dDQ0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDEiIG5hbWU9IklucHV0NDQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MSIgbmFtZT0iT3V0cHV0NDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDEiIHR5cGU9InRuczpQb3J0VHlwZTQ0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MiIgbmFtZT0iSW5wdXQ0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQyIiBuYW1lPSJPdXRwdXQ0NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQzIiBuYW1lPSJJbnB1dDQ0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDMiIG5hbWU9Ik91dHB1dDQ0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDQiIG5hbWU9IklucHV0NDQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NCIgbmFtZT0iT3V0cHV0NDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDQiIHR5cGU9InRuczpQb3J0VHlwZTQ0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NSIgbmFtZT0iSW5wdXQ0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ1IiBuYW1lPSJPdXRwdXQ0NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ2IiBuYW1lPSJJbnB1dDQ0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDYiIG5hbWU9Ik91dHB1dDQ0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDciIG5hbWU9IklucHV0NDQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NyIgbmFtZT0iT3V0cHV0NDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDciIHR5cGU9InRuczpQb3J0VHlwZTQ0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0OCIgbmFtZT0iSW5wdXQ0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ4IiBuYW1lPSJPdXRwdXQ0NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ5IiBuYW1lPSJJbnB1dDQ0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDkiIG5hbWU9Ik91dHB1dDQ0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTAiIG5hbWU9IklucHV0NDUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MCIgbmFtZT0iT3V0cHV0NDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTAiIHR5cGU9InRuczpQb3J0VHlwZTQ1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MSIgbmFtZT0iSW5wdXQ0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUxIiBuYW1lPSJPdXRwdXQ0NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MSIgdHlwZT0idG5zOlBvcnRUeXBlNDUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUyIiBuYW1lPSJJbnB1dDQ1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTIiIG5hbWU9Ik91dHB1dDQ1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTMiIG5hbWU9IklucHV0NDUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MyIgbmFtZT0iT3V0cHV0NDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTMiIHR5cGU9InRuczpQb3J0VHlwZTQ1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NCIgbmFtZT0iSW5wdXQ0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU0IiBuYW1lPSJPdXRwdXQ0NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NCIgdHlwZT0idG5zOlBvcnRUeXBlNDU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU1IiBuYW1lPSJJbnB1dDQ1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTUiIG5hbWU9Ik91dHB1dDQ1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTYiIG5hbWU9IklucHV0NDU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NiIgbmFtZT0iT3V0cHV0NDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTYiIHR5cGU9InRuczpQb3J0VHlwZTQ1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NyIgbmFtZT0iSW5wdXQ0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU3IiBuYW1lPSJPdXRwdXQ0NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NyIgdHlwZT0idG5zOlBvcnRUeXBlNDU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU4IiBuYW1lPSJJbnB1dDQ1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTgiIG5hbWU9Ik91dHB1dDQ1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTkiIG5hbWU9IklucHV0NDU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1OSIgbmFtZT0iT3V0cHV0NDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTkiIHR5cGU9InRuczpQb3J0VHlwZTQ1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MCIgbmFtZT0iSW5wdXQ0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYwIiBuYW1lPSJPdXRwdXQ0NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MCIgdHlwZT0idG5zOlBvcnRUeXBlNDYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYxIiBuYW1lPSJJbnB1dDQ2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjEiIG5hbWU9Ik91dHB1dDQ2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjIiIG5hbWU9IklucHV0NDYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MiIgbmFtZT0iT3V0cHV0NDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjIiIHR5cGU9InRuczpQb3J0VHlwZTQ2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MyIgbmFtZT0iSW5wdXQ0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYzIiBuYW1lPSJPdXRwdXQ0NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MyIgdHlwZT0idG5zOlBvcnRUeXBlNDYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY0IiBuYW1lPSJJbnB1dDQ2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjQiIG5hbWU9Ik91dHB1dDQ2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjUiIG5hbWU9IklucHV0NDY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NSIgbmFtZT0iT3V0cHV0NDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjUiIHR5cGU9InRuczpQb3J0VHlwZTQ2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NiIgbmFtZT0iSW5wdXQ0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY2IiBuYW1lPSJPdXRwdXQ0NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NiIgdHlwZT0idG5zOlBvcnRUeXBlNDY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY3IiBuYW1lPSJJbnB1dDQ2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjciIG5hbWU9Ik91dHB1dDQ2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjgiIG5hbWU9IklucHV0NDY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2OCIgbmFtZT0iT3V0cHV0NDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjgiIHR5cGU9InRuczpQb3J0VHlwZTQ2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2OSIgbmFtZT0iSW5wdXQ0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY5IiBuYW1lPSJPdXRwdXQ0NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2OSIgdHlwZT0idG5zOlBvcnRUeXBlNDY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDcwIiBuYW1lPSJJbnB1dDQ3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzAiIG5hbWU9Ik91dHB1dDQ3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzEiIG5hbWU9IklucHV0NDcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MSIgbmFtZT0iT3V0cHV0NDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzEiIHR5cGU9InRuczpQb3J0VHlwZTQ3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MiIgbmFtZT0iSW5wdXQ0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDcyIiBuYW1lPSJPdXRwdXQ0NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MiIgdHlwZT0idG5zOlBvcnRUeXBlNDcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDczIiBuYW1lPSJJbnB1dDQ3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzMiIG5hbWU9Ik91dHB1dDQ3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDczIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzQiIG5hbWU9IklucHV0NDc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NCIgbmFtZT0iT3V0cHV0NDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzQiIHR5cGU9InRuczpQb3J0VHlwZTQ3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NSIgbmFtZT0iSW5wdXQ0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc1IiBuYW1lPSJPdXRwdXQ0NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NSIgdHlwZT0idG5zOlBvcnRUeXBlNDc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc2IiBuYW1lPSJJbnB1dDQ3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzYiIG5hbWU9Ik91dHB1dDQ3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzciIG5hbWU9IklucHV0NDc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NyIgbmFtZT0iT3V0cHV0NDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzciIHR5cGU9InRuczpQb3J0VHlwZTQ3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNDc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3OCIgbmFtZT0iSW5wdXQ0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc4IiBuYW1lPSJPdXRwdXQ0NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3OCIgdHlwZT0idG5zOlBvcnRUeXBlNDc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc5IiBuYW1lPSJJbnB1dDQ3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzkiIG5hbWU9Ik91dHB1dDQ3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODAiIG5hbWU9IklucHV0NDgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MCIgbmFtZT0iT3V0cHV0NDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODAiIHR5cGU9InRuczpQb3J0VHlwZTQ4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MSIgbmFtZT0iSW5wdXQ0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgxIiBuYW1lPSJPdXRwdXQ0ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MSIgdHlwZT0idG5zOlBvcnRUeXBlNDgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MSIgYmluZGluZz0idG5zOkJpbmRpbmc0ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgyIiBuYW1lPSJJbnB1dDQ4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODIiIG5hbWU9Ik91dHB1dDQ4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODMiIG5hbWU9IklucHV0NDgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MyIgbmFtZT0iT3V0cHV0NDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODMiIHR5cGU9InRuczpQb3J0VHlwZTQ4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NCIgbmFtZT0iSW5wdXQ0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg0IiBuYW1lPSJPdXRwdXQ0ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NCIgdHlwZT0idG5zOlBvcnRUeXBlNDg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NCIgYmluZGluZz0idG5zOkJpbmRpbmc0ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg1IiBuYW1lPSJJbnB1dDQ4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODUiIG5hbWU9Ik91dHB1dDQ4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODYiIG5hbWU9IklucHV0NDg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NiIgbmFtZT0iT3V0cHV0NDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODYiIHR5cGU9InRuczpQb3J0VHlwZTQ4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NyIgbmFtZT0iSW5wdXQ0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg3IiBuYW1lPSJPdXRwdXQ0ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NyIgdHlwZT0idG5zOlBvcnRUeXBlNDg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NyIgYmluZGluZz0idG5zOkJpbmRpbmc0ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg4IiBuYW1lPSJJbnB1dDQ4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODgiIG5hbWU9Ik91dHB1dDQ4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODkiIG5hbWU9IklucHV0NDg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4OSIgbmFtZT0iT3V0cHV0NDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODkiIHR5cGU9InRuczpQb3J0VHlwZTQ4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MCIgbmFtZT0iSW5wdXQ0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkwIiBuYW1lPSJPdXRwdXQ0OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MCIgdHlwZT0idG5zOlBvcnRUeXBlNDkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MCIgYmluZGluZz0idG5zOkJpbmRpbmc0OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkxIiBuYW1lPSJJbnB1dDQ5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTEiIG5hbWU9Ik91dHB1dDQ5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTIiIG5hbWU9IklucHV0NDkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MiIgbmFtZT0iT3V0cHV0NDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTIiIHR5cGU9InRuczpQb3J0VHlwZTQ5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MyIgbmFtZT0iSW5wdXQ0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkzIiBuYW1lPSJPdXRwdXQ0OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MyIgdHlwZT0idG5zOlBvcnRUeXBlNDkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MyIgYmluZGluZz0idG5zOkJpbmRpbmc0OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk0IiBuYW1lPSJJbnB1dDQ5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTQiIG5hbWU9Ik91dHB1dDQ5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTUiIG5hbWU9IklucHV0NDk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NSIgbmFtZT0iT3V0cHV0NDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTUiIHR5cGU9InRuczpQb3J0VHlwZTQ5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NiIgbmFtZT0iSW5wdXQ0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk2IiBuYW1lPSJPdXRwdXQ0OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NiIgdHlwZT0idG5zOlBvcnRUeXBlNDk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NiIgYmluZGluZz0idG5zOkJpbmRpbmc0OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk3IiBuYW1lPSJJbnB1dDQ5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTciIG5hbWU9Ik91dHB1dDQ5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTgiIG5hbWU9IklucHV0NDk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5OCIgbmFtZT0iT3V0cHV0NDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTgiIHR5cGU9InRuczpQb3J0VHlwZTQ5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5OSIgbmFtZT0iSW5wdXQ0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk5IiBuYW1lPSJPdXRwdXQ0OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5OSIgdHlwZT0idG5zOlBvcnRUeXBlNDk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5OSIgYmluZGluZz0idG5zOkJpbmRpbmc0OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYmY5NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvU3RvY2tRdW90ZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJTdG9ja1F1b3RlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TdG9ja1F1b3RlLyI+DQotICA8d3NkbDp0eXBlcz4NCi0gICAgPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU3RvY2tRdW90ZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJnZXRRdW90ZVJlc3BvbnNlIj4NCi0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+DQotICAgICAgICAgIDx4c2Q6YWxsPg0KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ0aWNrZXJTeW1ib2wiIHR5cGU9InhzZDpzdHJpbmciLz4NCi0gICAgICAgICAgPC94c2Q6YWxsPg0KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQotICAgICAgPC94c2Q6ZWxlbWVudD4NCi0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZ2V0UXVvdGVSZXF1ZXN0Ij4NCi0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+DQotICAgICAgICAgIDx4c2Q6YWxsPg0KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwcmljZSIgdHlwZT0ieHNkOmZsb2F0Ii8+DQotICAgICAgICAgIDwveHNkOmFsbD4NCi0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgIDwveHNkOmVsZW1lbnQ+DQotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkhlYWRlcnMiPg0KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCi0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCi0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaGVhZGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4NCi0gICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+DQotICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQotICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciLz4NCi0gICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idmFsdWUiIHR5cGU9InhzZDpzdHJpbmciLz4NCi0gICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+DQotICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCi0gICAgICAgICAgICA8L3hzZDplbGVtZW50Pg0KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCi0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgIDwveHNkOmVsZW1lbnQ+DQotICAgIDwveHNkOnNjaGVtYT4NCi0gIDwvd3NkbDp0eXBlcz4NCi0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0UXVvdGVSZXNwb25zZSI+DQotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOmdldFF1b3RlUmVzcG9uc2UiIG5hbWU9ImdldFF1b3RlUmVzcG9uc2UiLz4NCi0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6SGVhZGVycyIgbmFtZT0iaGVhZGVycyIvPg0KLSAgPC93c2RsOm1lc3NhZ2U+DQotICA8d3NkbDptZXNzYWdlIG5hbWU9ImdldFF1b3RlUmVxdWVzdCI+DQotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOmdldFF1b3RlUmVxdWVzdCIgbmFtZT0iZ2V0UXVvdGVSZXF1ZXN0Ii8+DQotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOkhlYWRlcnMiIG5hbWU9ImhlYWRlcnMiLz4NCi0gIDwvd3NkbDptZXNzYWdlPg0KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU3RvY2tRdW90ZSI+DQotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJnZXRRdW90ZSI+DQotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOmdldFF1b3RlUmVxdWVzdCIvPg0KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Z2V0UXVvdGVSZXNwb25zZSIvPg0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPg0KLSAgPC93c2RsOnBvcnRUeXBlPg0KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJTdG9ja1F1b3RlU09BUCIgdHlwZT0idG5zOlN0b2NrUXVvdGUiPg0KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4NCi0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdldFF1b3RlIj4NCi0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL1N0b2NrUXVvdGUvZ2V0UXVvdGUiLz4NCi0gICAgICA8d3NkbDppbnB1dD4NCi0gICAgICAgIDxzb2FwOmJvZHkgcGFydHM9ImdldFF1b3RlUmVxdWVzdCIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgICA8c29hcDpoZWFkZXIgbWVzc2FnZT0idG5zOmdldFF1b3RlUmVxdWVzdCIgcGFydD0iaGVhZGVycyIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC93c2RsOmlucHV0Pg0KLSAgICAgIDx3c2RsOm91dHB1dD4NCi0gICAgICAgIDxzb2FwOmJvZHkgcGFydHM9ImdldFF1b3RlUmVzcG9uc2UiIHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgICAgPHNvYXA6aGVhZGVyIG1lc3NhZ2U9InRuczpnZXRRdW90ZVJlc3BvbnNlIiBwYXJ0PSJoZWFkZXJzIiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L3dzZGw6b3V0cHV0Pg0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPg0KLSAgPC93c2RsOmJpbmRpbmc+DQotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlN0b2NrUXVvdGUiPg0KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpTdG9ja1F1b3RlU09BUCIgbmFtZT0iU3RvY2tRdW90ZVNPQVAiPg0KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZyIvPg0KLSAgICA8L3dzZGw6cG9ydD4NCi0gIDwvd3NkbDpzZXJ2aWNlPg0KLTwvd3NkbDpkZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg4YjljYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9BbGxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIKAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuV1NETFNjYWxhYmlsaXR5VGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHMKLXsKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlRlc3QgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlIik7Ci0gICAgLy8kSlVuaXQtQkVHSU4kCi0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW5TdG9ja1F1b3RlV1NETFNldHVwLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3QoV1NETFNjYWxhYmlsaXR5VGVzdHMuc3VpdGUoKSk7Ci0gICAgLy8kSlVuaXQtRU5EJAotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBiMTE2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlUHJveHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlUHJveHlWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotCi1wdWJsaWMgY2xhc3MgT3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwdWJsaWMgdm9pZCB0ZXN0UmVhZFdTREwoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBvYWdpczgwRGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJvYWdpczgwRGlyIik7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwob2FnaXM4MERpcik7Ci0gICAgaWYgKCFvYWdpczgwRGlyLmVuZHNXaXRoKCIvIikgJiYgIW9hZ2lzODBEaXIuZW5kc1dpdGgoIlxcIikpCi0gICAgICBvYWdpczgwRGlyID0gb2FnaXM4MERpciArICIvIjsKLSAgICBGaWxlIGRpciA9IG5ldyBGaWxlKG9hZ2lzODBEaXIgKyAiT0FHSVM4LjAiKTsKLSAgICBpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoInNwIik7Ci0gICAgICBwcm9qZWN0LmNyZWF0ZShudWxsKTsKLSAgICAgIHByb2plY3Qub3BlbihudWxsKTsKLSAgICAgIGNvcHkoZGlyLCBwcm9qZWN0KTsKLSAgICAgIGpvaW5CYWNrZ3JvdW5kSm9icygpOwotICAgICAgZmluYWwgTGlzdCB3c2RscyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIHByb2plY3QuYWNjZXB0Ci0gICAgICAoCi0gICAgICAgIG5ldyBJUmVzb3VyY2VQcm94eVZpc2l0b3IoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlUHJveHkgcHJveHkpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb3h5LmdldE5hbWUoKS5lbmRzV2l0aCgiLndzZGwiKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgd3NkbHMuYWRkKHByb3h5LnJlcXVlc3RSZXNvdXJjZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgSUNvbnRhaW5lci5JTkNMVURFX1BIQU5UT01TCi0gICAgICApOwotICAgICAgdGFnQXNTdW1tYXJ5KCJPcGVuIE9BR0lTIFdTREwiLCBuZXcgRGltZW5zaW9uW10ge0RpbWVuc2lvbi5FTEFQU0VEX1BST0NFU1MsIERpbWVuc2lvbi5XT1JLSU5HX1NFVH0pOwotICAgICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c2Rscy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICBvcGVuV1NETCgoSUZpbGUpaXQubmV4dCgpKTsKLSAgICAgIHN0b3BNZWFzdXJpbmcoKTsKLSAgICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOwotICAgICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgZmFpbChkaXIudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29weShGaWxlIHNyYywgSUNvbnRhaW5lciBkZXN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCi0gIHsKLSAgICBGaWxlW10gY2hpbGRyZW4gPSBzcmMubGlzdEZpbGVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGNoaWxkcmVuW2ldLmdldE5hbWUoKTsKLSAgICAgIGlmIChjaGlsZHJlbltpXS5pc0RpcmVjdG9yeSgpKQotICAgICAgewotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IGRlc3QuZ2V0Rm9sZGVyKG5ldyBQYXRoKG5hbWUpKTsKLSAgICAgICAgZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLSAgICAgICAgY29weShjaGlsZHJlbltpXSwgZm9sZGVyKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG5hbWUuZW5kc1dpdGgoIi53c2RsIikgfHwgbmFtZS5lbmRzV2l0aCgiLnhzZCIpKQotICAgICAgewotICAgICAgICBJRmlsZSBmaWxlID0gZGVzdC5nZXRGaWxlKG5ldyBQYXRoKG5hbWUpKTsKLSAgICAgICAgZmlsZS5jcmVhdGUobmV3IEZpbGVJbnB1dFN0cmVhbShjaGlsZHJlbltpXSksIHRydWUsIG51bGwpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBqb2luQmFja2dyb3VuZEpvYnMoKQotICB7Ci0gICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgIERpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotICAgICAgICB3aGlsZSAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCA8IDUwMDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZGlzcGxheS5zbGVlcCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG9wZW5XU0RMKElGaWxlIGZpbGUpIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbgotICB7Ci0gICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCkub3BlbkVkaXRvcihuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpLCBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX0VESVRPUl9JRCwgdHJ1ZSk7Ci0gICAgd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5jbG9zZUVkaXRvcihlZGl0b3IsIGZhbHNlKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5TdG9ja1F1b3RlV1NETFNldHVwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDVhYjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5TdG9ja1F1b3RlV1NETFNldHVwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludHJvLklJbnRyb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50cm8uSUludHJvUGFydDsKLQotcHVibGljIGNsYXNzIE9wZW5TdG9ja1F1b3RlV1NETFNldHVwIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlByb2plY3QiOwotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShPcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5jbGFzcywgIk9wZW5TdG9ja1F1b3RlV1NETFNldHVwIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjbG9zZUludHJvKCkKLSAgewotICAgIElJbnRyb01hbmFnZXIgaW50cm9NYW5hZ2VyID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRJbnRyb01hbmFnZXIoKTsKLSAgICBJSW50cm9QYXJ0IGludHJvUGFydCA9IGludHJvTWFuYWdlci5nZXRJbnRybygpOwotICAgIGlmIChpbnRyb1BhcnQgIT0gbnVsbCkKLSAgICAgIGludHJvTWFuYWdlci5jbG9zZUludHJvKGludHJvUGFydCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIElQcm9qZWN0IHNpbXBsZVByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0gICAgc2ltcGxlUHJvamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgc2ltcGxlUHJvamVjdC5vcGVuKG51bGwpOwotICAgIHJldHVybiBzaW1wbGVQcm9qZWN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY29weUZpbGUoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGRlc3QpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSUZpbGUgZmlsZSA9IHByb2plY3QuZ2V0RmlsZShkZXN0KTsKLSAgICBmaWxlLmNyZWF0ZShQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoc291cmNlKS5vcGVuU3RyZWFtKCksIHRydWUsIG51bGwpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgam9pbkF1dG9CdWlsZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBib29sZWFuIGludGVycnVwdGVkID0gdHJ1ZTsKLSAgICB3aGlsZSAoaW50ZXJydXB0ZWQpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0gICAgICAgIGludGVycnVwdGVkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgaW50ZXJydXB0ZWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXR1cCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIGNsb3NlSW50cm8oKTsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlU2ltcGxlUHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgIGNvcHlGaWxlKHByb2plY3QsICJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIiwgIlN0b2NrUXVvdGUud3NkbCIpOwotICAgIGpvaW5BdXRvQnVpbGQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYmU1YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLQotcHVibGljIGNsYXNzIE9wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UuY2xhc3MsICJPcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIElQcm9qZWN0IGdldFByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLSAgICBwcm9qZWN0Lm9wZW4obnVsbCk7Ci0gICAgcHJvamVjdC5yZWZyZXNoTG9jYWwoSVByb2plY3QuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotICAgIGpvaW5BdXRvQnVpbGQoKTsKLSAgICByZXR1cm4gcHJvamVjdDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGpvaW5BdXRvQnVpbGQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0gICAgd2hpbGUgKGludGVycnVwdGVkKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotICAgICAgICBpbnRlcnJ1cHRlZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGludGVycnVwdGVkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgSUVkaXRvclBhcnQgb3BlbkVkaXRvcihJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQsIFN0cmluZyBlZGl0b3JpZCkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uCi0gIHsKLSAgICBJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgcmV0dXJuIHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCkub3BlbkVkaXRvcihlZGl0b3JJbnB1dCwgZWRpdG9yaWQsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2xvc2VFZGl0b3IoSUVkaXRvclBhcnQgZWRpdG9yKQotICB7Ci0gICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgIHJldHVybiB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLmNsb3NlRWRpdG9yKGVkaXRvciwgZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5TdG9ja1F1b3RlV1NETCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KE9wZW5TdG9ja1F1b3RlV1NETFNldHVwLlBST0pFQ1RfTkFNRSk7Ci0gICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gbmV3IEZpbGVFZGl0b3JJbnB1dCgoSUZpbGUpcHJvamVjdC5maW5kTWVtYmVyKCJTdG9ja1F1b3RlLndzZGwiKSk7Ci0gICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gb3BlbkVkaXRvcihlZGl0b3JJbnB1dCwgUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9FRElUT1JfSUQpOwotICAgIHN0b3BNZWFzdXJpbmcoKTsKLSAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICBhc3NlcnRQZXJmb3JtYW5jZSgpOwotICAgIGNsb3NlRWRpdG9yKGVkaXRvclBhcnQpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU2OGQ1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFBlcmZvcm1hbmNlUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgUGVyZm9ybWFuY2VQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLSAgLy8gVE9ETzogVGhlc2UgdHdvIGNvbnN0YW50cyBzaG91bGQgcmVhbGx5IGJlIHB1bGxlZCBmcm9tIHRoZSBwbHVnaW4gd2hpY2ggZGVjbGFyZXMgaXQuCi0gIC8vIFRoaXMgd2lsbCBhdm9pZCAibWFnaWMgc3RyaW5nIiBkZXBlbmRlbmNpZXMgd2hpY2ggY2FuIGJlIGVhc2lseSBicm9rZW4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRURJVE9SX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfVkFMSURBVE9SX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMRGVsZWdhdGluZ1ZhbGlkYXRvciI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSI7CS8vJE5PTi1OTFMtMSQKLQkKLSAgLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBQZXJmb3JtYW5jZVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUGVyZm9ybWFuY2VQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFBlcmZvcm1hbmNlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJdHJ5IHsKLQkJCWlmIChyZXNvdXJjZUJ1bmRsZSA9PSBudWxsKQotCQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpblJlc291cmNlcyIpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkT0FHSVNXU0RMVGVzdGNhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRPQUdJU1dTRExUZXN0Y2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzY5NjgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRPQUdJU1dTRExUZXN0Y2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExSZWFkZXJJbXBsOwotCi1wdWJsaWMgY2xhc3MgUmVhZE9BR0lTV1NETFRlc3RjYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwcml2YXRlIExpc3QgZGVmcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVhZFdTREwoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgb2FnaXM4MERpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib2FnaXM4MERpciIpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKG9hZ2lzODBEaXIpOwotICAgIGlmICghb2FnaXM4MERpci5lbmRzV2l0aCgiLyIpICYmICFvYWdpczgwRGlyLmVuZHNXaXRoKCJcXCIpKQotICAgICAgb2FnaXM4MERpciA9IG9hZ2lzODBEaXIgKyAiLyI7Ci0gICAgRmlsZSBkaXIgPSBuZXcgRmlsZShvYWdpczgwRGlyICsgIk9BR0lTOC4wL3dzL3dzZGwiKTsKLSAgICBpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIEZpbGVbXSB3c2RscyA9IGRpci5saXN0RmlsZXMKLSAgICAgICgKLSAgICAgICAgbmV3IEZpbGVGaWx0ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lLmdldE5hbWUoKS5lbmRzV2l0aCgiLndzZGwiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICk7Ci0gICAgICB0YWdBc1N1bW1hcnkoIlJlYWQgT0FHSVMgV1NETCIsIG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLldPUktJTkdfU0VUfSk7Ci0gICAgICBzdGFydE1lYXN1cmluZygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2Rscy5sZW5ndGg7IGkrKykKLSAgICAgICAgcmVhZFdTREwod3NkbHNbaV0udG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgIHN0b3BNZWFzdXJpbmcoKTsKLSAgICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOwotICAgICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgZmFpbChkaXIudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVhZFdTREwoU3RyaW5nIGxvY2F0aW9uKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgV1NETFJlYWRlckltcGwgcmVhZGVyID0gbmV3IFdTRExSZWFkZXJJbXBsKCk7Ci0gICAgZGVmcy5hZGQocmVhZGVyLnJlYWRXU0RMKGxvY2F0aW9uKSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5OGExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotCi1wdWJsaWMgY2xhc3MgUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZS5jbGFzcywgIlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIik7Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgdGVzdFJlYWRTdG9ja1F1b3RlV1NETF9FTUYoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdGFydE1lYXN1cmluZygpOwotICAgIFVSTCB3c2RsID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIik7Ci0gICAgCi0JUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgV1NETFJlc291cmNlSW1wbCByZXNvdXJjZSA9IChXU0RMUmVzb3VyY2VJbXBsKXJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioud3NkbCIpKTsKLQlyZXNvdXJjZS5zZXRVUkkoVVJJLmNyZWF0ZVVSSSh3c2RsLnRvU3RyaW5nKCkpKTsKLSAgICBqYXZhLnV0aWwuTWFwIG1hcCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBtYXAucHV0KFdTRExSZXNvdXJjZUltcGwuQ09OVElOVUVfT05fTE9BRF9FUlJPUixCb29sZWFuLnZhbHVlT2YodHJ1ZSkpOwotICAgIG1hcC5wdXQoV1NETFJlc291cmNlSW1wbC5VU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyxCb29sZWFuLnZhbHVlT2YodHJ1ZSkpOwotCXJlc291cmNlLmxvYWQobWFwKTsgCi0JRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gcmVzb3VyY2UuZ2V0RGVmaW5pdGlvbigpOwotCWRlZmluaXRpb24uZ2V0UU5hbWUoKTsKLQkKLQlzdG9wTWVhc3VyaW5nKCk7Ci0JY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0JYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMGQwOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGouV1NETEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi1wdWJsaWMgY2xhc3MgUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5jbGFzcywgIlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkU3RvY2tRdW90ZVdTREwoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdGFydE1lYXN1cmluZygpOwotICAgIFVSTCB3c2RsID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIik7Ci0gICAgV1NETEZhY3RvcnlJbXBsIGZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0gICAgV1NETFJlYWRlciByZWFkZXIgPSBmYWN0b3J5Lm5ld1dTRExSZWFkZXIoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSByZWFkZXIucmVhZFdTREwod3NkbC50b1N0cmluZygpLCBuZXcgSW5wdXRTb3VyY2Uod3NkbC5vcGVuU3RyZWFtKCkpKTsKLSAgICBkZWZpbml0aW9uLmdldFFOYW1lKCk7Ci0gICAgc3RvcE1lYXN1cmluZygpOwotCWNvbW1pdE1lYXN1cmVtZW50cygpOwotCWFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBmYzdmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwotCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwcml2YXRlIFdTRExWYWxpZGF0b3IgdmFsaWRhdG9yOwotCSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgICAvLyBTZXQgdGhlIFdTLUkgcHJlZmVyZW5jZSB0byBpZ25vcmUgc28gb25seSBXU0RMIGVycm9ycyB3aWxsIGJlIHRlc3RlZC4KLSAgICBXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lTU0JQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICB9IAotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVdTREwoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgb2FnaXM4MERpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib2FnaXM4MERpciIpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKG9hZ2lzODBEaXIpOwotICAgIGlmICghb2FnaXM4MERpci5lbmRzV2l0aCgiLyIpICYmICFvYWdpczgwRGlyLmVuZHNXaXRoKCJcXCIpKQotICAgICAgb2FnaXM4MERpciA9IG9hZ2lzODBEaXIgKyAiLyI7Ci0gICAgRmlsZSBkaXIgPSBuZXcgRmlsZShvYWdpczgwRGlyICsgIk9BR0lTOC4wL3dzL3dzZGwiKTsKLSAgICBpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIEZpbGVbXSB3c2RscyA9IGRpci5saXN0RmlsZXMKLSAgICAgICgKLSAgICAgICAgbmV3IEZpbGVGaWx0ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lLmdldE5hbWUoKS5lbmRzV2l0aCgiLndzZGwiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICk7Ci0gICAgICB0YWdBc1N1bW1hcnkoIlZhbGlkYXRlIE9BR0lTIFdTREwiLCBuZXcgRGltZW5zaW9uW10ge0RpbWVuc2lvbi5FTEFQU0VEX1BST0NFU1MsIERpbWVuc2lvbi5XT1JLSU5HX1NFVH0pOwotCSAgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotCSAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHZhbGlkYXRlV1NETCh3c2Rsc1tpXS50b1VSTCgpLnRvU3RyaW5nKCkpOwotICAgICAgc3RvcE1lYXN1cmluZygpOwotICAgICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRQZXJmb3JtYW5jZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBmYWlsKGRpci50b1N0cmluZygpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2YWxpZGF0ZVdTREwoU3RyaW5nIGxvY2F0aW9uKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdmFsaWRhdG9yLnZhbGlkYXRlKGxvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJlYWFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgV1NETFZhbGlkYXRvciB2YWxpZGF0b3I7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgLy8gU2V0IHRoZSBXUy1JIHByZWZlcmVuY2UgdG8gaWdub3JlIHNvIG9ubHkgV1NETCBlcnJvcnMgd2lsbCBiZSB0ZXN0ZWQuCi0gICAgV1NQbHVnaW4gd3N1aSA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gICAgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJQVBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICB9IAotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVdTREwoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgb2FnaXM4MERpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib2FnaXM4MERpciIpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKG9hZ2lzODBEaXIpOwotICAgIGlmICghb2FnaXM4MERpci5lbmRzV2l0aCgiLyIpICYmICFvYWdpczgwRGlyLmVuZHNXaXRoKCJcXCIpKQotICAgICAgb2FnaXM4MERpciA9IG9hZ2lzODBEaXIgKyAiLyI7Ci0gICAgRmlsZSBkaXIgPSBuZXcgRmlsZShvYWdpczgwRGlyICsgIk9BR0lTOC4wL3dzL3dzZGwiKTsKLSAgICBpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIEZpbGVbXSB3c2RscyA9IGRpci5saXN0RmlsZXMKLSAgICAgICgKLSAgICAgICAgbmV3IEZpbGVGaWx0ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lLmdldE5hbWUoKS5lbmRzV2l0aCgiLndzZGwiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICk7Ci0gICAgICB0YWdBc1N1bW1hcnkoIlZhbGlkYXRlIE9BR0lTIFdTREwgd2l0aCBXUy1JIiwgbmV3IERpbWVuc2lvbltdIHtEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uV09SS0lOR19TRVR9KTsKLQkgIHZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQkgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxzLmxlbmd0aDsgaSsrKQotICAgICAgICB2YWxpZGF0ZVdTREwod3NkbHNbaV0udG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgIHN0b3BNZWFzdXJpbmcoKTsKLSAgICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOwotICAgICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgZmFpbChkaXIudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmFsaWRhdGVXU0RMKFN0cmluZyBsb2NhdGlvbikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRvci52YWxpZGF0ZShsb2NhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMDJjN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBXU0RMVmFsaWRhdG9yIHZhbGlkYXRvcjsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgICAvLyBTZXQgdGhlIFdTLUkgcHJlZmVyZW5jZSB0byBpZ25vcmUgc28gb25seSBXU0RMIGVycm9ycyB3aWxsIGJlIHRlc3RlZC4KLSAgICBXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lTU0JQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICB9ICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UuY2xhc3MsICJWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UiKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlU3RvY2tRdW90ZVdTREwoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gICAgVVJMIHdzZGwgPSBQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoImRhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwiKTsKLSAgICBTdHJpbmcgcGF0aCA9IHdzZGwudG9TdHJpbmcoKTsKLQotICAgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgdmFsaWRhdG9yLnZhbGlkYXRlKHBhdGgpOwotICAgIHN0b3BNZWFzdXJpbmcoKTsKLSAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICBhc3NlcnRQZXJmb3JtYW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVkNWZhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBXU0RMVmFsaWRhdG9yIHZhbGlkYXRvcjsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgICAvLyBTZXQgdGhlIFdTLUkgcHJlZmVyZW5jZSB0byBpZ25vcmUgc28gb25seSBXU0RMIGVycm9ycyB3aWxsIGJlIHRlc3RlZC4KLSAgICBXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lTU0JQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgICB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gIH0gIAotICAKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlLmNsYXNzLCAiVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UiKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlU3RvY2tRdW90ZVdTSSgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgICBVUkwgd3NkbCA9IFBlcmZvcm1hbmNlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCIpOwotICAgIFN0cmluZyBwYXRoID0gd3NkbC50b1N0cmluZygpOwotCi0gICAgc3RhcnRNZWFzdXJpbmcoKTsJCi0gICAgdmFsaWRhdG9yLnZhbGlkYXRlKHBhdGgpOwotICAgIHN0b3BNZWFzdXJpbmcoKTsKLSAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICBhc3NlcnRQZXJmb3JtYW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQyNWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLk9uZVZhbGlkYXRvck9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotLyoqCi0gKiBUZXN0IGZvciB2YWxpZGF0aW9uIG9mIDUwIFdTREwgZmlsZXMgaW4gdGhlIHNhbXBsZSB3b3Jrc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgS2lodXAgQm9vLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UgewotCQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZS5jbGFzcywgIlRlc3QiKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgc3VwZXIuc2V0VXAoKTsKLQkJLy8gU2V0IHRoZSBXUy1JIHByZWZlcmVuY2UgdG8gaWdub3JlIHNvIFdTLUkgdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBydW4uCi0JCVdTUGx1Z2luIHdzdWkgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpOwotCQlQZXJzaXN0ZW50V1NJQ29udGV4dCB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lTU0JQQ29udGV4dCgpOwotCQl3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0V1NETFByb2plY3RWYWxpZGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBwcm9qZWN0RGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJwcm9qZWN0RGlyIik7Ci0JCUFzc2VydC5hc3NlcnROb3ROdWxsKHByb2plY3REaXIpOwotCQlpZiAoIXByb2plY3REaXIuZW5kc1dpdGgoIi8iKSAmJiAhcHJvamVjdERpci5lbmRzV2l0aCgiXFwiKSkKLQkJCXByb2plY3REaXIgPSBwcm9qZWN0RGlyICsgIi8iOwotCQlGaWxlIGRpciA9IG5ldyBGaWxlKHByb2plY3REaXIpOwotCQlpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJXU0RMUHJvamVjdCIpOwotCQkJcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0JCQlwcm9qZWN0Lm9wZW4obnVsbCk7Ci0JCQljb3B5KGRpciwgcHJvamVjdCk7Ci0JCQlqb2luQmFja2dyb3VuZEpvYnMoKTsKLQotCQkJSVdvcmtzcGFjZVJ1bm5hYmxlIG15UnVubmFibGUgPSBuZXcgT25lVmFsaWRhdG9yT3BlcmF0aW9uKAotCQkJCQlwcm9qZWN0LAotICAgICAgICAgIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfVkFMSURBVE9SX0lELAotCQkJCQl0cnVlLCAKLQkJCQkJZmFsc2UpOwotCQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0KLQkJCXRhZ0FzU3VtbWFyeSgiVmFsaWRhdGUgV1NETCBQcm9qZWN0IiwgbmV3IERpbWVuc2lvbltdIHtEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uV09SS0lOR19TRVQgfSk7Ci0JCQlzdGFydE1lYXN1cmluZygpOwotCQkJd29ya3NwYWNlLnJ1bihteVJ1bm5hYmxlLCBudWxsKTsKLQkJCS8vIHByb2plY3QuYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5DTEVBTl9CVUlMRCxudWxsKTsKLQkJCXN0b3BNZWFzdXJpbmcoKTsKLQkJCWNvbW1pdE1lYXN1cmVtZW50cygpOwotCQkJYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLQkJfSBlbHNlCi0JCQlmYWlsKGRpci50b1N0cmluZygpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY29weShGaWxlIHNyYywgSUNvbnRhaW5lciBkZXN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwKLQkJCUZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCUZpbGVbXSBjaGlsZHJlbiA9IHNyYy5saXN0RmlsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIG5hbWUgPSBjaGlsZHJlbltpXS5nZXROYW1lKCk7Ci0JCQlpZiAoY2hpbGRyZW5baV0uaXNEaXJlY3RvcnkoKSkgewotCQkJCUlGb2xkZXIgZm9sZGVyID0gZGVzdC5nZXRGb2xkZXIobmV3IFBhdGgobmFtZSkpOwotCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJY29weShjaGlsZHJlbltpXSwgZm9sZGVyKTsKLQkJCX0gZWxzZSB7Ci0JCQkJSUZpbGUgZmlsZSA9IGRlc3QuZ2V0RmlsZShuZXcgUGF0aChuYW1lKSk7Ci0JCQkJZmlsZS5jcmVhdGUobmV3IEZpbGVJbnB1dFN0cmVhbShjaGlsZHJlbltpXSksIHRydWUsIG51bGwpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGpvaW5CYWNrZ3JvdW5kSm9icygpIHsKLQkJRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCXRyeSB7Ci0JCQkJCVBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKAotCQkJCQkJCVJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0JCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCX0KLQkJCQlsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQkJRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0JCQkJd2hpbGUgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQgPCA1MDAwKSB7Ci0JCQkJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgewotCQkJCQkJZGlzcGxheS5zbGVlcCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9KTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDc2MzgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIE9wZW4xMDBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMTAwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjEwMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFmZjEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgT3BlbjEwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzEwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjEwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTY2ZTRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuMUtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjFLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMU1CRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMU1CRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNzRjNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFNQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIE9wZW4xTUJGaWxlVGVzdENhc2UgZXh0ZW5kcyBPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzFNQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMU1CRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4yMDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjIwMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzI2OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjIwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgT3BlbjIwMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8yMDBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMjAwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuNTAwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJiNDE0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuNTAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuNTAwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzUwMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW41MDBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuV1NETEVkaXRvclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuV1NETEVkaXRvclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNDEzZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbldTRExFZGl0b3JUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMucGVyZm9ybWFuY2UuaW50ZXJuYWwuc2NhbGFiaWxpdHkuT3BlbkVkaXRvclRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlUGx1Z2luOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgT3BlbldTRExFZGl0b3JUZXN0Q2FzZSBleHRlbmRzIE9wZW5FZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEVkaXRvcklkKCkKLSAgewotICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX0VESVRPUl9JRDsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QnVuZGxlSWQoKQotICB7Ci0gICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLkJVTkRMRV9JRDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGIzYzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAxMDA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbngxMDAoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDZlZGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMTA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbngxMCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2M4YTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbngxKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3NWE3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDI1OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54MjUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTE3Mjk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gNTA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3Blbng1MCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ODY1ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiA3NTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVueDc1KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTUyNjNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLnBlcmZvcm1hbmNlLmludGVybmFsLnNjYWxhYmlsaXR5LlJlcGVhdE9wZW5FZGl0b3JUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRFZGl0b3JJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9FRElUT1JfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJ1bmRsZUlkKCkKLSAgewotICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5CVU5ETEVfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMDBLQi53c2RsIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjNTRkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSoKLSogQ29udHJpYnV0b3JzOgotKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cy5wZXJmb3JtYW5jZS5pbnRlcm5hbC5zY2FsYWJpbGl0eS5SZXBlYXRSdW5WYWxpZGF0b3JUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdFJ1blZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0VmFsaWRhdG9ySWQoKQotICB7Ci0gICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfVkFMSURBVE9SX0lEOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRCdW5kbGVJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uQlVORExFX0lEOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMTAwS0Iud3NkbCI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NTU0ZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAxMDA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGV4MTAwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGI3YmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDEwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDEwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyMTE2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZXgxKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc3ZDY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDI1OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDI1KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGJkMTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDUwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDUwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2NiYjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDc1OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDc1KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI3NGRiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSoKLSogQ29udHJpYnV0b3JzOgotKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cy5wZXJmb3JtYW5jZS5pbnRlcm5hbC5zY2FsYWJpbGl0eS5SdW5WYWxpZGF0b3JUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZSBleHRlbmRzIFJ1blZhbGlkYXRvclRlc3RDYXNlCi17Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRWYWxpZGF0b3JJZCgpCi0gIHsKLSAgICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX1ZBTElEQVRPUl9JRDsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QnVuZGxlSWQoKQotICB7Ci0gICAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uQlVORExFX0lEOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UyMDc2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDAwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxZWU4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDAwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzQzMjg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NWQ4MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzEwMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xMDBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzM3YzM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ5Y2MzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U1MzdhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQyMjM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzEwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjEwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZjgwNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxZjkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYTI5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMFdTRExzWFNERGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZTM4MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzFLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMUtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTg3Nzk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xTUIud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjFNQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmODUxZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8yMDBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMjAwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTJjYjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvNTAwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjUwMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1dTRExTY2FsYWJpbGl0eVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9XU0RMU2NhbGFiaWxpdHlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjY3YTllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1dTRExTY2FsYWJpbGl0eVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4goCBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0goCoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgV1NETFNjYWxhYmlsaXR5VGVzdHMKLXsKLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkiKTsKLSAgICAvLyRKVW5pdC1CRUdJTiQKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW4yMDBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0vLyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjFNQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW4xMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjFLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW4xMDBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW41MDBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotLy8gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0vLyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIC8vJEpVbml0LUVORCQKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhkMGZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UKLUJ1bmRsZS1OYW1lLjAgPSBXU0RMIFBlcmZvcm1hbmNlIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDNlZjQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InBlcmZvcm1hbmNlIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9InBlcmYtdGVzdHMtZmlsZSIgdmFsdWU9IiR7dGVzdERpcn0vcGVyZm9ybWFuY2UtdGVzdHMueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9Ii1Eb2FnaXM4MERpcj0ke3Rlc3REaXJ9IC1EcHJvamVjdERpcj0ke3Rlc3REaXJ9L09BR0lTOC4wIC1YbXg1MTJNIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlX3dzZGxfcGVyZm9ybWFuY2UiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZV93c2RsX3BlcmZvcm1hbmNlIi8+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICA8ZGVsZXRlPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotICAKLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSBwZXJmb3JtYW5jZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZV9zdWl0ZSI+Ci0KLSAgICA8YW50Y2FsbCB0YXJnZXQ9InJlYWRPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAgIDxhbnRjYWxsIHRhcmdldD0icmVhZE9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJyZWFkT0FHSVNXU0RMVGVzdGNhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZSIvPgotICAJCi0gICAgPGFudGNhbGwgdGFyZ2V0PSJvcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9Im9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAgIDxhbnRjYWxsIHRhcmdldD0ib3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlIi8+Ci0KLSAgICA8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAgIDxhbnRjYWxsIHRhcmdldD0iUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuU3RvY2tRdW90ZVdTRExTZXR1cCIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuU3RvY2tRdW90ZVdTRExTZXR1cCIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuU3RvY2tRdW90ZVdTRExTZXR1cCIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjFLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMUtCRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjEwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjEwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjEwS0JGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xMDBLQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4yMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMjAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW41MDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuNTAwS0JGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMU1CRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xTUJGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjFNQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZSIvPgotCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UiLz4KLQkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlIi8+Ci0KLQk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlIi8+Ci0gIAotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZSIvPgotIAotICAJPCEtLQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSIvPgotICAJLS0+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLTwhLS0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLS0tPiAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJCi0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0icmVhZE9BR0lTV1NETFRlc3RjYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlJlYWRPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5WYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQkKLSAgPHRhcmdldCBuYW1lPSJvcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLk9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5SZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5WYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJPcGVuU3RvY2tRdW90ZVdTRExTZXR1cCI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAiLz4KLSAgICA8L2FudD4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLQkgIDx0YXJnZXQgbmFtZT0iT3BlbjFLQkZpbGVUZXN0Q2FzZSI+Ci0JICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5PcGVuMUtCRmlsZVRlc3RDYXNlIi8+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkgICAgPC9hbnQ+Ci0JICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjEwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5PcGVuMTBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9Ik9wZW4xMDBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW4xMDBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9Ik9wZW4yMDBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW4yMDBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9Ik9wZW41MDBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW41MDBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9Ik9wZW4xTUJGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5PcGVuMU1CRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0JCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0JCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0JCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgPC90YXJnZXQ+Ci0gIAotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSIgZGVwZW5kcz0iaW5pdCxwZXJmb3JtYW5jZV9zdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNTA4YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13c2RsLnRlc3RzLnVpLmphcgotamF2YUNvbXBpbGVyLndzZGwudGVzdHMudWkuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZmI3OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNWUwZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jU3VuIEp1biAwMyAwMDo0NzowNSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1YjIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFdTREwgTW9kZWwgVUkgU2FtcGxlcwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDEucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiB3c2RsLnRlc3RzLnVpLmphcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC53c2RsLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMTU4ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uud3NkbC50ZXN0cy51aS5qYXIgPSBzcmMvCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgd3NkbC50ZXN0cy51aS5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI1ZjExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwbHVnaW4+Ci0KLSAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkub2JqZWN0X2NvbnRyaWJ1dGlvbiI+Ci0gICAgICAgICA8IS0tCi0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgbGFiZWw9IkdlbmVyYXRlIFdTREwgU2FtcGxlIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5HZW5lcmF0ZVdTRExBY3Rpb25EZWxlZ2F0ZSIKLSAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5nZW5lcmF0ZV93c2RsX2FjdGlvbiI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgIC0tPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgIGxhYmVsPSJDb252ZXJ0IHRvIFdTREwgMi4wIERvY3VtZW50IgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5Db252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUiCi0gICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkuY29udmVydF93c2RsX2FjdGlvbiI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvQ29udmVydFdTREwyMEFjdGlvbkRlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvQ29udmVydFdTREwyMEFjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYWVmZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3VpL0NvbnZlcnRXU0RMMjBBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLldTRExDb252ZXJ0ZXI7Ci0KLQotCi1wdWJsaWMgY2xhc3MgQ29udmVydFdTREwyMEFjdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSUFjdGlvbkRlbGVnYXRlCi17Ci0gIHByaXZhdGUgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBudWxsOwotCi0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLSAgewotICAgIElGaWxlIGlmaWxlID0gbnVsbDsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgewotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWN0dXJlZFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotICAgICAgT2JqZWN0IGVsZW1lbnQgPSBzdHJ1Y3R1cmVkU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCi0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgewotICAgICAgCWlmaWxlID0gKElGaWxlKSBlbGVtZW50OwotICAgICAgICBJUGF0aCBwYXRoID0gaWZpbGUuZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgSVBhdGggcGF0aDIgPSBwYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKTsKLSAgICAgICAgU3RyaW5nIG91dHB1dCA9IHBhdGgyLnRvU3RyaW5nKCkgKyAiLyIgKyBnZXROZXdOYW1lKGlmaWxlKTsKLSAgICAgICAgCi0gICAgICAgIHRyeQotCQkgICAgeyAgCi0gICAgICAgICAgICBEZWZpbml0aW9uIGRlZiA9IERlZmluaXRpb25Mb2FkZXIubG9hZCgiZmlsZTovIiArIHBhdGgudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBXU0RMQ29udmVydGVyIGNvbnZlcnRlciA9IG5ldyBXU0RMQ29udmVydGVyKGRlZik7Ci0gICAgICAgICAgICBjb252ZXJ0ZXIuZ2VuZXJhdGUyMChvdXRwdXQpOwotICAgICAgICAgICAgSUNvbnRhaW5lciBmb2xkZXIgPSBpZmlsZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgICAgIGZvbGRlci5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX09ORSxudWxsKTsKLQkJICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQkgICAgewotICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCSAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXROZXdOYW1lKElGaWxlIGlmaWxlKQotICB7Ci0gICAgLy8gQXNzZXJ0IGN1cnJlbnROYW1lIGhhcyBhIGZpbGUgZXh0ZW5zaW9uLCBlLmcuIGZvby53c2RsLgotICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gZm9vVjIwLndzZGwuCi0gICAgU3RyaW5nIGN1cnJlbnROYW1lID0gaWZpbGUuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBuYW1lID0gY3VycmVudE5hbWUuc3Vic3RyaW5nKDAsY3VycmVudE5hbWUuaW5kZXhPZigiLiIpKTsKLSAgICBTdHJpbmcgZXh0ZW5zaW9uID0gY3VycmVudE5hbWUuc3Vic3RyaW5nKGN1cnJlbnROYW1lLmluZGV4T2YoIi4iKSk7Ci0gICAgU3RyaW5nIG5ld05hbWUgPSBuYW1lICsgIlYyMCIgKyBleHRlbnNpb247Ci0gICAgcmV0dXJuIG5ld05hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3VpL0dlbmVyYXRlV1NETEFjdGlvbkRlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvR2VuZXJhdGVXU0RMQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5NTExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvR2VuZXJhdGVXU0RMQWN0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLldTRExHZW5lcmF0aW9uVGVzdDsKLQotcHVibGljIGNsYXNzIEdlbmVyYXRlV1NETEFjdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSUFjdGlvbkRlbGVnYXRlCi17Ci0gIHByaXZhdGUgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBudWxsOwotCi0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLSAgewotICAgIElGaWxlIGlmaWxlID0gbnVsbDsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgewotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWN0dXJlZFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotICAgICAgT2JqZWN0IGVsZW1lbnQgPSBzdHJ1Y3R1cmVkU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCi0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgewotICAgICAgCWlmaWxlID0gKElGaWxlKSBlbGVtZW50OwotICAgICAgICBJUGF0aCBwYXRoID0gaWZpbGUuZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgcGF0aCA9IHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOwotICAgICAgICBTdHJpbmcgb3V0cHV0ID0gcGF0aC50b1N0cmluZygpICsgIi9NeVNhbXBsZS53c2RsIjsKLSAgICAgICAgCi0gICAgICAgIHRyeQotCQl7Ci0gICAgICAgICAgKG5ldyBXU0RMR2VuZXJhdGlvblRlc3QoKSkuZ2VuZXJhdGVUZW1wZXJhdHVyZVNlcnZpY2Uob3V0cHV0KTsKLQkJfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLSAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNWMxYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJqYXZheC94bWwvWE1MQ29uc3RhbnRzIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3NkbC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGJhOTllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NkbC50ZXN0cy5qYXIKLWphdmFDb21waWxlci53c2RsLnRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODEzYTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDUwMzM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBTZXAgMjYgMDU6NDQ6NTQgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDZiYmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0jU3VuIEFwciAxNSAwMjozNDoyMiBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYmluYXJ5X2V4cHJlc3Npb249MjAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MjAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249MzYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2VudW1fY29uc3RhbnRzPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tdWx0aXBsZV9maWVsZHM9MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zZWxlY3Rvcl9pbl9tZXRob2RfaW52b2NhdGlvbj0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MzYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj02OAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj04NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249ODQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9pbXBvcnRzPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9wYWNrYWdlPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmllbGQ9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maXJzdF9jbGFzc19ib2R5X2RlY2xhcmF0aW9uPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfaW1wb3J0cz0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21lbWJlcl90eXBlPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWV0aG9kPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbmV3X2NodW5rPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfcGFja2FnZT0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl9pbXBvcnRfZ3JvdXBzPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX3R5cGVfZGVjbGFyYXRpb25zPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1uZXh0X2xpbmVfc2hpZnRlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2tfaW5fY2FzZT1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfY29uc3RydWN0b3JfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX21ldGhvZF9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5fYmxvY2tfY29tbWVudD1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfamF2YWRvY19jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2xpbmVfY29tbWVudHM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3BhcmFtZXRlcl9kZXNjcmlwdGlvbj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcm9vdF90YWdzPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9iZWZvcmVfcm9vdF90YWdzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2Zvcl9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5saW5lX2xlbmd0aD04MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfZ3VhcmRpYW5fY2xhdXNlX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N3aXRjaHN0YXRlbWVudHNfY29tcGFyZV90b19zd2l0Y2g9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudGF0aW9uLnNpemU9NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jYXRjaF9pbl90cnlfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2ZpbmFsbHlfaW5fdHJ5X3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5ub3RhdGlvbl9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2VsbGlwc2lzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9zZW1pY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2NvbnN0YW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9tZXRob2RfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3N3aXRjaD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3JldHVybj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl90aHJvdz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2JyYWNrZXRzX2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFjZXNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNrZXRzX2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTE0MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj1zcGFjZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT0yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX3RhYnNfb25seV9mb3JfbGVhZGluZ19pbmRlbnRhdGlvbnM9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTA1YzMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaHUgTWFyIDA4IDEwOjIzOjM1IEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZm9ybWF0dGVyX3Byb2ZpbGU9X0VNRkNvZGVGb3JtYXR0ZXIucHJvZmlsZQotZm9ybWF0dGVyX3NldHRpbmdzX3ZlcnNpb249MTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZhMjUwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaHUgQXByIDEyIDAwOjA3OjA5IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotcmVzb2x2ZS5yZXF1aXJlYnVuZGxlPWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmYyYjlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTA0LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuYXBhY2hlLnhlcmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLnhzZCwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHdzZGwudGVzdHMuamFyCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZTAwYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB3c2RsLnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBzYW1wbGVzLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc291cmNlLndzZGwudGVzdHMuamFyID0gc3JjLwotamF2YWNXYXJuaW5ncy53c2RsLnRlc3RzLmphcj0tZGlzY291cmFnZWQKLXNvdXJjZS53c2RsLnRlc3RzLmphciA9IHNyYy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOGFkMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXBsdWdpbk5hbWUgPSBXU0RMIEpVbml0IFRlc3QKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZDRjMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdGYXVsdFJlY29uY2lsaWF0aW9uL0JpbmRpbmdGYXVsdFNhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nRmF1bHRSZWNvbmNpbGlhdGlvbi9CaW5kaW5nRmF1bHRTYW1wbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmY2EwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdGYXVsdFJlY29uY2lsaWF0aW9uL0JpbmRpbmdGYXVsdFNhbXBsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iDQotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nRmF1bHRTYW1wbGUvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQluYW1lPSJCaW5kaW5nRmF1bHRTYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nRmF1bHRTYW1wbGUvIj4NCi0JPHdzZGw6dHlwZXM+DQotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ZhdWx0U2FtcGxlLyINCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMSI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24xUmVzcG9uc2UiPg0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjFGYXVsdCI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yIj4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotDQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50Pg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJSZXNwb25zZSI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yRmF1bHQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50Pg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiPg0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJPC94c2Q6c2NoZW1hPg0KLQk8L3dzZGw6dHlwZXM+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMVJlcXVlc3QiPg0KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMSIgbmFtZT0icGFyYW1ldGVycyIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMVJlc3BvbnNlIj4NCi0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk9wZXJhdGlvbjFSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMUZhdWx0Ij4NCi0JCTx3c2RsOnBhcnQgbmFtZT0iRmF1bHQiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24xRmF1bHQiIC8+DQotCTwvd3NkbDptZXNzYWdlPg0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik9wZXJhdGlvbjJSZXF1ZXN0Ij4NCi0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjIiPjwvd3NkbDpwYXJ0Pg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24yUmVzcG9uc2UiPg0KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMlJlc3BvbnNlIj48L3dzZGw6cGFydD4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSI+DQotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24yRmF1bHQxIj48L3dzZGw6cGFydD4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiI+DQotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24yRmF1bHQyIj48L3dzZGw6cGFydD4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlNhbXBsZVBvcnQiPg0KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPg0KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpPcGVyYXRpb24xUmVxdWVzdCIgLz4NCi0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjFSZXNwb25zZSIgLz4NCi0JCTwvd3NkbDpvcGVyYXRpb24+DQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+DQotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjJSZXF1ZXN0IiAvPg0KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6T3BlcmF0aW9uMlJlc3BvbnNlIiAvPg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiIG1lc3NhZ2U9InRuczpPcGVyYXRpb24yRmF1bHQxIiAvPg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiIG1lc3NhZ2U9InRuczpPcGVyYXRpb24yRmF1bHQyIiAvPg0KLQkJPC93c2RsOm9wZXJhdGlvbj4NCi0JPC93c2RsOnBvcnRUeXBlPg0KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlNhbXBsZVBvcnRTT0FQQmluZGluZyIgdHlwZT0idG5zOlNhbXBsZVBvcnQiPg0KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPg0KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPg0KLQkJCTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS9PcGVyYXRpb24xIiAvPg0KLQkJCTx3c2RsOmlucHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L3dzZGw6aW5wdXQ+DQotCQkJPHdzZGw6b3V0cHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L3dzZGw6b3V0cHV0Pg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjFGYXVsdCI+DQotCQkJCTxzb2FwOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjFGYXVsdCIgLz4NCi0JCQk8L3dzZGw6ZmF1bHQ+DQotCQk8L3dzZGw6b3BlcmF0aW9uPg0KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPg0KLQkJCTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS9PcGVyYXRpb24yIiAvPg0KLQkJCTx3c2RsOmlucHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L3dzZGw6aW5wdXQ+DQotCQkJPHdzZGw6b3V0cHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L3dzZGw6b3V0cHV0Pg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiPg0KLQkJCQk8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiIC8+DQotCQkJPC93c2RsOmZhdWx0Pg0KLQkJCTx3c2RsOmZhdWx0IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiPg0KLQkJCQk8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDIiIC8+DQotCQkJPC93c2RsOmZhdWx0Pg0KLQkJPC93c2RsOm9wZXJhdGlvbj4NCi0JPC93c2RsOmJpbmRpbmc+DQotCTx3c2RsOnNlcnZpY2UgbmFtZT0iU2FtcGxlU2VydmljZSI+DQotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpTYW1wbGVQb3J0U09BUEJpbmRpbmciIG5hbWU9IlNhbXBsZVBvcnQiPg0KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPg0KLQkJPC93c2RsOnBvcnQ+DQotCTwvd3NkbDpzZXJ2aWNlPg0KLTwvd3NkbDpkZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjMwMjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JbmFtZT0iQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QyIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZTIiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdDMiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlMyI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24yIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0MiIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UyIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uMyI+Ci0JCQk8d3NkbDppbnB1dCBuYW1lPSJJbnB1dDMiIG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0MyIgLz4KLQkJCTx3c2RsOm91dHB1dCBuYW1lPSJPdXRwdXQzIiBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UzIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQotCTx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uU09BUCIKLQkJdHlwZT0idG5zOkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbiI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uMiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi9OZXdPcGVyYXRpb24yIiAvPgotCQkJPHdzZGw6aW5wdXQgbmFtZT0iSW5wdXQyIj4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBuYW1lPSJPdXRwdXQyIj4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24zIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL05ld09wZXJhdGlvbjMiIC8+Ci0JCQk8d3NkbDppbnB1dCBuYW1lPSJJbnB1dDMiPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG5hbWU9Ik91dHB1dDMiPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbiI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvblNPQVAiCi0JCQluYW1lPSJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb25TT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvRHVwbGljYXRlU0FYRXhjZXB0aW9uL1NBWEV4Y2VwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9EdXBsaWNhdGVTQVhFeGNlcHRpb24vU0FYRXhjZXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZjQzMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9EdXBsaWNhdGVTQVhFeGNlcHRpb24vU0FYRXhjZXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucwotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VQcmVmaXhOb3RCb3VuZC8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJOYW1lc3BhY2VQcmVmaXhOb3RCb3VuZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlUHJlZml4Tm90Qm91bmQvIj4KLQk8dW5kZWZpbmVkOnRlc3QgLz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvRnVsbEVsZW1lbnRFeHRlbnNpYmlsaXR5L0V4dGVuZGVkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvRXh0ZW5kZWRXU0RMLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YmRmNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvRXh0ZW5kZWRXU0RMLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuZGVkV1NETC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iRXh0ZW5kZWRXU0RMIgotCXhtbG5zOmV4dD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbnNpb25zLyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5kZWRXU0RMLyI+Ci0KLQk8d3NkbDppbXBvcnQgbG9jYXRpb249IkltcG9ydGVkLndzZGwiCi0JCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iPgotCQk8ZXh0OmltcG9ydCAvPgotCTwvd3NkbDppbXBvcnQ+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9ImV4dGVuZGVkTWVzc2FnZSI+Ci0JCTxleHQ6bWVzc2FnZSAvPgotCQk8d3NkbDpwYXJ0IG5hbWU9ImV4dGVuZGVkUGFydCI+Ci0JCQk8ZXh0OnBhcnQgLz4KLQkJPC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJleHRlbmRlZFBvcnRUeXBlIj4KLQkJPGV4dDpwb3J0VHlwZSAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iZXh0ZW5kZWRPcGVyYXRpb24iPgotCQkJPGV4dDpvcGVyYXRpb24gLz4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9ImV4dGVuZGVkTWVzc2FnZSI+Ci0JCQkJPGV4dDppbnB1dCAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImV4dGVuZGVkTWVzc2FnZSI+Ci0JCQkJPGV4dDpvdXRwdXQgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCQk8d3NkbDpmYXVsdCBuYW1lPSJleHRlbmRlZEZhdWx0IiBtZXNzYWdlPSJleHRlbmRlZE1lc3NhZ2UiPgotCQkJCTxleHQ6ZmF1bHQgLz4KLQkJCTwvd3NkbDpmYXVsdD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvSW1wb3J0ZWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvRnVsbEVsZW1lbnRFeHRlbnNpYmlsaXR5L0ltcG9ydGVkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYzAwMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvSW1wb3J0ZWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0ZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSW1wb3J0ZWQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iSW1wb3J0ZWRTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0ZWQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iSW1wb3J0ZWQiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkltcG9ydGVkU09BUCIgbmFtZT0iSW1wb3J0ZWRTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9IYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzL0RvY3VtZW50ZWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSGFuZGxlc0RvY3VtZW50YXRpb25FbGVtZW50cy9Eb2N1bWVudGVkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMzExMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9IYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzL0RvY3VtZW50ZWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudGVkLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJEb2N1bWVudGVkIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudGVkLyI+Ci0JPHdzZGw6ZG9jdW1lbnRhdGlvbj5EZWZpbml0aW9ucyBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRlZC8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPk1lc3NhZ2UgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJEb2N1bWVudGVkIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCVBvcnQgdHlwZSBkb2N1bWVudGF0aW9uLgotCQk8L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCU9wZXJhdGlvbiBkb2N1bWVudGF0aW9uLgotCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJEb2N1bWVudGVkU09BUCIgdHlwZT0idG5zOkRvY3VtZW50ZWQiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPkJpbmRpbmcgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50ZWQvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iRG9jdW1lbnRlZCI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+U2VydmljZSBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpEb2N1bWVudGVkU09BUCIgbmFtZT0iRG9jdW1lbnRlZFNPQVAiPgotCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5Qb3J0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0lubGluZVR5cGVzRnJvbUltcG9ydHNBcmVWaXNpYmxlL0Eud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGQ2MjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOmI9Imh0dHA6Ly9CIgotCXhtbG5zOnRucz0iaHR0cDovL0EiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JbmFtZT0iQSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9BIj4JCQotCTx3c2RsOmltcG9ydCBsb2NhdGlvbj0iQi53c2RsIiBuYW1lc3BhY2U9Imh0dHA6Ly9CIi8+CQkJCQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0ibWVzc2FnZSI+CQotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImI6QlR5cGUiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+CQotCTx3c2RsOnBvcnRUeXBlIG5hbWU9InBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Im9wIj4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6bWVzc2FnZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0lubGluZVR5cGVzRnJvbUltcG9ydHNBcmVWaXNpYmxlL0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2U4NjQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotCW5hbWU9IkIiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQiI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9CIj4KLQkJCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQlR5cGUiPgotCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCTwveHNkOnNjaGVtYT4JCi0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9NaXNzaW5nTmFtZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9NaXNzaW5nTmFtZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZThjOTk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vTWlzc2luZ05hbWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+DQotPC93c2RsOmRlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vV2l0aE5hbWUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vV2l0aE5hbWUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkwOWI1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL1dpdGhOYW1lLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIG5hbWU9IldTRExGaWxlIj4NCi08L3dzZGw6ZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODI5YjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/Pg0KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1NpbXBsZS8iDQotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJTaW1wbGUiDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1NpbXBsZS8iPg0KLQ0KLQk8d3NkbDp0eXBlcz4NCi0NCi0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiDQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU2ltcGxlLyI+DQotDQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbklucHV0Ij4NCi0NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZTEiDQotCQkJCQkJCXR5cGU9InhzZDpzdHJpbmciIC8+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZTIiDQotCQkJCQkJCXR5cGU9InhzZDpzdHJpbmciIC8+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uT3V0cHV0Ij4NCi0NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZTEiDQotCQkJCQkJCXR5cGU9InhzZDpzdHJpbmciIC8+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZTIiDQotCQkJCQkJCXR5cGU9InhzZDpzdHJpbmciIC8+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCTwveHNkOnNjaGVtYT4NCi0JPC93c2RsOnR5cGVzPg0KLQ0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Im15T3BlcmF0aW9uUmVzcG9uc2UiPg0KLQkJPHdzZGw6cGFydCBuYW1lPSJteU9wZXJhdGlvblJlc3BvbnNlIg0KLQkJCWVsZW1lbnQ9InRuczpPcGVyYXRpb25PdXRwdXQiIC8+DQotCTwvd3NkbDptZXNzYWdlPg0KLQ0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Im15T3BlcmF0aW9uUmVxdWVzdCI+DQotCQk8d3NkbDpwYXJ0IHhtbG5zOnBhcnR0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TaW1wbGUvIg0KLQkJCW5hbWU9Im15T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0icGFydHRuczpPcGVyYXRpb25JbnB1dCIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotDQotCTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik15UG9ydFR5cGUiPg0KLQ0KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Im15T3BlcmF0aW9uIj4NCi0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6bXlPcGVyYXRpb25SZXF1ZXN0IiAvPg0KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6bXlPcGVyYXRpb25SZXNwb25zZSIgLz4NCi0JCTwvd3NkbDpvcGVyYXRpb24+DQotCTwvd3NkbDpwb3J0VHlwZT4NCi0JDQotPC93c2RsOmRlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2UyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGIyZWUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2UyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9leGFtcGxlLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJleGFtcGxlIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9leGFtcGxlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9leGFtcGxlLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJleGFtcGxlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQkJbmFtZT0iZXhhbXBsZVNPQVAiIHR5cGU9InRuczpleGFtcGxlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2V4YW1wbGUvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iZXhhbXBsZSI+Ci0JCTx3c2RsOnBvcnQgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JCQliaW5kaW5nPSJ0bnM6ZXhhbXBsZVNPQVAiIG5hbWU9ImV4YW1wbGVTT0FQIj4KLQkJCTxhZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbmZpcm1hdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29uZmlybWF0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM0MDg3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29uZmlybWF0aW9uLnhzZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db250YWN0SW5mby54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm8ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzdkOGFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db250YWN0SW5mby54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9InBob25lTnVtYmVyIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9ImFyZWFDb2RlIiB0eXBlPSJ4c2Q6aW50IiAvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImFkZHJlc3NUeXBlIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdHJlZXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iY2l0eSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTA5YzU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db250YWN0SW5mb1NlcnZpY2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJDb250YWN0SW5mb1NlcnZpY2UiCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczpjb250YWN0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Db250YWN0SW5mb1NlcnZpY2UiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSI+Ci0KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Db250YWN0SW5mb1NlcnZpY2UiCi0JCQl4bWxuczpjb250YWN0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvIgotCQkJeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvIgotCQkJCXNjaGVtYUxvY2F0aW9uPSJDb250YWN0SW5mby54c2QiIC8+Ci0JCQk8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iQ29uZmlybWF0aW9uLnhzZCIgLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0idXBkYXRlUGhvbmVOdW1iZXJSZXF1ZXN0TXNnIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJjb250YWN0OnBob25lTnVtYmVyIiBuYW1lPSJpbnB1dDEiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVQaG9uZU51bWJlclJlc3BvbnNlTXNnIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJDb25maXJtYXRpb24iIG5hbWU9Im91dHB1dDEiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVBZGRyZXNzUmVxdWVzdE1zZyI+Ci0JCTx3c2RsOnBhcnQgdHlwZT0iY29udGFjdDphZGRyZXNzVHlwZSIgbmFtZT0iaW5wdXQyIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0idXBkYXRlQWRkcmVzc1Jlc3BvbnNlTXNnIj4KLQkJPHdzZGw6cGFydCB0eXBlPSJDb25maXJtYXRpb25UeXBlIiBuYW1lPSJvdXRwdXQyIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0idGVzdFBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9InVwZGF0ZVBob25lTnVtYmVyIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczp1cGRhdGVQaG9uZU51bWJlclJlcXVlc3RNc2ciIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOnVwZGF0ZVBob25lTnVtYmVyUmVzcG9uc2VNc2ciIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJ1cGRhdGVBZGRyZXNzIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczp1cGRhdGVBZGRyZXNzUmVxdWVzdE1zZyIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6dXBkYXRlQWRkcmVzc1Jlc3BvbnNlTXNnIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL09wZXJhdGlvblN0eWxlL09wZXJhdGlvblN0eWxlVGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9PcGVyYXRpb25TdHlsZS9PcGVyYXRpb25TdHlsZVRlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2YWVjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL09wZXJhdGlvblN0eWxlL09wZXJhdGlvblN0eWxlVGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPGRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5vcmciDQotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIG5hbWU9Ik9wZXJhdGlvblN0eWxlVGVzdCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5vcmciPg0KLQ0KLQk8amF4d3M6YmluZGluZ3MgeG1sbnM6amF4d3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4NCi0JCTxqYXh3czplbmFibGVXcmFwcGVyU3R5bGU+dHJ1ZTwvamF4d3M6ZW5hYmxlV3JhcHBlclN0eWxlPg0KLQkJPGpheHdzOmVuYWJsZUFzeW5jTWFwcGluZz5mYWxzZTwvamF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPg0KLQk8L2pheHdzOmJpbmRpbmdzPg0KLQ0KLQk8dHlwZXM+DQotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLm9yZyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSINCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5vcmciPg0KLQ0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJxdW90ZVJlcXVlc3QiIHR5cGU9InRuczpxdW90ZVJlcXVlc3RUeXBlIiAvPg0KLQ0KLQkJCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icXVvdGVSZXF1ZXN0VHlwZSI+DQotCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ic3RvY2tTeW1ib2wiIHR5cGU9InhzZDppbnQiIC8+DQotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0idHJhbnNhY3Rpb25EYXRlIiB0eXBlPSJ4c2Q6ZGF0ZSIgLz4NCi0JCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotDQotCQkJPHhzZDplbGVtZW50IG5hbWU9InF1b3RlUmVzcG9uc2UiIHR5cGU9InRuczpxdW90ZVJlc3BvbnNlVHlwZSIgLz4NCi0NCi0JCQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InF1b3RlUmVzcG9uc2VUeXBlIj4NCi0JCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmRvdWJsZSIgLz4NCi0JCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotDQotCQkJPHhzZDplbGVtZW50IG5hbWU9InF1b3RlRXJyb3IiIHR5cGU9InhzZDpzdHJpbmciIC8+DQotDQotCQk8L3hzZDpzY2hlbWE+DQotCTwvdHlwZXM+DQotDQotCTxtZXNzYWdlIG5hbWU9IlF1b3RlIj4NCi0JCTxwYXJ0IG5hbWU9InBhcmFtcyIgZWxlbWVudD0idG5zOnF1b3RlUmVxdWVzdCIgLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLQk8bWVzc2FnZSBuYW1lPSJRdW90ZVJlc3BvbnNlIj4NCi0JCTxwYXJ0IG5hbWU9InJlc3VsdCIgZWxlbWVudD0idG5zOnF1b3RlUmVzcG9uc2UiIC8+DQotCTwvbWVzc2FnZT4NCi0NCi0JPG1lc3NhZ2UgbmFtZT0iUXVvdGVFcnJvciI+DQotCQk8cGFydCBuYW1lPSJlcnJvciIgZWxlbWVudD0idG5zOnF1b3RlRXJyb3IiIC8+DQotCTwvbWVzc2FnZT4NCi0NCi0JPHBvcnRUeXBlIG5hbWU9IlF1b3RlUG9ydFR5cGUiPg0KLQ0KLQkJPGpheHdzOmJpbmRpbmdzIHhtbG5zOmpheHdzPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+DQotCQkJPGpheHdzOmNsYXNzIG5hbWU9IlF1b3RlUHJvdmlkZXJJbXBsIiAvPg0KLQkJCTxqYXh3czplbmFibGVXcmFwcGVyU3R5bGU+dHJ1ZTwvamF4d3M6ZW5hYmxlV3JhcHBlclN0eWxlPg0KLQkJCTxqYXh3czplbmFibGVBc3luY01hcHBpbmc+ZmFsc2U8L2pheHdzOmVuYWJsZUFzeW5jTWFwcGluZz4NCi0JCTwvamF4d3M6YmluZGluZ3M+DQotDQotCQk8b3BlcmF0aW9uIG5hbWU9IkdldFF1b3RlIj4NCi0NCi0JCQk8amF4d3M6YmluZGluZ3MgeG1sbnM6amF4d3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIg0KLQkJCQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+DQotCQkJCTxqYXh3czptZXRob2QgbmFtZT0iZ2V0UXVvdGUiIC8+DQotCQkJCTxqYXh3czpwYXJhbWV0ZXIgcGFydD0id3NkbDpkZWZpbml0aW9ucy93c2RsOm1lc3NhZ2VbQG5hbWU9J1F1b3RlJ10vd3NkbDpwYXJ0W0BuYW1lPSdwYXJhbXMnXSINCi0JCQkJCWNoaWxkRWxlbWVudE5hbWU9InRuczpzdG9ja1N5bWJvbCIgbmFtZT0ic3ltYm9sIiAvPg0KLQkJCQk8amF4d3M6cGFyYW1ldGVyIHBhcnQ9IndzZGw6ZGVmaW5pdGlvbnMvd3NkbDptZXNzYWdlW0BuYW1lPSdRdW90ZSddL3dzZGw6cGFydFtAbmFtZT0ncGFyYW1zJ10iDQotCQkJCQljaGlsZEVsZW1lbnROYW1lPSJ0bnM6dHJhbnNhY3Rpb25EYXRlIiBuYW1lPSJkYXRlIiAvPg0KLQkJCQk8amF4d3M6ZW5hYmxlV3JhcHBlclN0eWxlPnRydWU8L2pheHdzOmVuYWJsZVdyYXBwZXJTdHlsZT4NCi0JCQkJPGpheHdzOmVuYWJsZUFzeW5jTWFwcGluZz5mYWxzZTwvamF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPg0KLQkJCTwvamF4d3M6YmluZGluZ3M+DQotDQotCQkJPGlucHV0IG1lc3NhZ2U9InRuczpRdW90ZSIgLz4NCi0NCi0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpRdW90ZVJlc3BvbnNlIiAvPg0KLQ0KLQkJCTxmYXVsdCBuYW1lPSJRdW90ZUVycm9yIiBtZXNzYWdlPSJ0bnM6UXVvdGVFcnJvciI+DQotDQotCQkJCTxqYXh3czpiaW5kaW5ncyB4bWxuczpqYXh3cz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPg0KLQkJCQkJPGpheHdzOmNsYXNzIG5hbWU9IlF1b3RlRXhjZXB0aW9uIiAvPg0KLQkJCQk8L2pheHdzOmJpbmRpbmdzPg0KLQ0KLQkJCTwvZmF1bHQ+DQotCQk8L29wZXJhdGlvbj4NCi0JPC9wb3J0VHlwZT4NCi0NCi0JPGJpbmRpbmcgbmFtZT0iUXVvdGVCaW5kaW5nIiB0eXBlPSJ0bnM6UXVvdGVQb3J0VHlwZSI+DQotDQotCQk8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0iZG9jdW1lbnQiIC8+DQotDQotCQk8b3BlcmF0aW9uIG5hbWU9IkdldFF1b3RlIj4NCi0JCQk8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIiAvPg0KLQkJCTxpbnB1dD4NCi0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+DQotCQkJPC9pbnB1dD4NCi0JCQk8b3V0cHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L291dHB1dD4NCi0JCQk8ZmF1bHQgbmFtZT0iUXVvdGVFcnJvciI+DQotCQkJCTxzb2FwOmZhdWx0IG5hbWU9IlF1b3RlRXJyb3IiIHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L2ZhdWx0Pg0KLQkJPC9vcGVyYXRpb24+DQotDQotCTwvYmluZGluZz4NCi0NCi0JPHNlcnZpY2UgbmFtZT0iUXVvdGVTZXJ2aWNlIj4NCi0NCi0JCTxqYXh3czpiaW5kaW5ncyB4bWxuczpqYXh3cz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPg0KLQkJCTxqYXh3czpjbGFzcyBuYW1lPSJRdW90YXRpb25TZXJ2aWNlIiAvPg0KLQkJPC9qYXh3czpiaW5kaW5ncz4NCi0NCi0JCTxwb3J0IG5hbWU9IlF1b3RlUG9ydCIgYmluZGluZz0idG5zOlF1b3RlQmluZGluZyI+DQotDQotCQkJPGpheHdzOmJpbmRpbmdzIHhtbG5zOmpheHdzPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+DQotCQkJCTxqYXh3czptZXRob2QgbmFtZT0iZ2V0UXVvdGF0aW9uU2VydmljZSIgLz4NCi0JCQk8L2pheHdzOmJpbmRpbmdzPg0KLQ0KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9xdW90ZSIgLz4NCi0NCi0JCTwvcG9ydD4NCi0NCi0JPC9zZXJ2aWNlPg0KLQ0KLTwvZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UYXJnZXROYW1lc3BhY2UvVGFyZ2V0TmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1RhcmdldE5hbWVzcGFjZS9UYXJnZXROYW1lc3BhY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRmZDliYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1RhcmdldE5hbWVzcGFjZS9UYXJnZXROYW1lc3BhY2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJUYXJnZXROYW1lc3BhY2UiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1RhcmdldE5hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVGFyZ2V0TmFtZXNwYWNlLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9UYXJnZXROYW1lc3BhY2UvIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJUYXJnZXROYW1lc3BhY2UiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJUYXJnZXROYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6VGFyZ2V0TmFtZXNwYWNlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9UYXJnZXROYW1lc3BhY2UvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iVGFyZ2V0TmFtZXNwYWNlIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6VGFyZ2V0TmFtZXNwYWNlU09BUCIgbmFtZT0iVGFyZ2V0TmFtZXNwYWNlU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGRlODhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPGRlZmluaXRpb25zIG5hbWU9IlRlc3RTZXJ2aWNlIg0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0Lm9yZy9TZXJ2aWNlLyINCi0JeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KLQl4bWxuczp0bnM9Imh0dHA6Ly90ZXN0Lm9yZy9TZXJ2aWNlLyINCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSINCi0JeG1sbnM6dGVzdD0iaHR0cDovL3Rlc3Qub3JnLyI+DQotCTx0eXBlcz4NCi0JCTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCi0JCQk8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3Qub3JnLyINCi0JCQkJc2NoZW1hTG9jYXRpb249IlRlc3QxLnhzZCIgLz4NCi0JCTwveHM6c2NoZW1hPg0KLQkJPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KLQkJCTx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVzdC5vcmcvIg0KLQkJCQlzY2hlbWFMb2NhdGlvbj0iVGVzdDIueHNkIiAvPg0KLQkJPC94czpzY2hlbWE+DQotCTwvdHlwZXM+DQotCTxtZXNzYWdlIG5hbWU9InRlc3RSZXF1ZXN0Ij4NCi0JCTxwYXJ0IG5hbWU9InJlcXVlc3RQYXJ0IiB0eXBlPSJ0ZXN0Ok15VHlwZSIgLz4NCi0JPC9tZXNzYWdlPg0KLQk8bWVzc2FnZSBuYW1lPSJ0ZXN0UmVzcG9uc2UiPg0KLQkJPHBhcnQgbmFtZT0icmVzcG9uc2VQYXJ0IiBlbGVtZW50PSJ0ZXN0Ok15RWxlbWVudCIgLz4NCi0JPC9tZXNzYWdlPg0KLQk8cG9ydFR5cGUgbmFtZT0iVGVzdFBvcnQiPg0KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4NCi0JCQk8aW5wdXQgbWVzc2FnZT0idG5zOnRlc3RSZXF1ZXN0IiBuYW1lPSJ0ZXN0UmVxdWVzdCIgLz4NCi0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczp0ZXN0UmVzcG9uc2UiIG5hbWU9InRlc3RSZXNwb25zZSIgLz4NCi0JCTwvb3BlcmF0aW9uPg0KLQ0KLQk8L3BvcnRUeXBlPg0KLTwvZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmMzNmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3QxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSINCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVzdC5vcmcvIg0KLQl4bWxuczp0bnM9Imh0dHA6Ly90ZXN0Lm9yZy8iPg0KLTwvc2NoZW1hPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3QyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3QyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI4MWExOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0Lm9yZy8iDQotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3Qub3JnLyI+DQotCQ0KLQk8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pg0KLQ0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNeVR5cGUiPg0KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+PC9yZXN0cmljdGlvbj4NCi0JPC9zaW1wbGVUeXBlPg0KLQ0KLTwvc2NoZW1hPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVHlwZXNFeHRlbnNpYmlsaXR5L1R5cGVzRXh0ZW5zaWJpbGl0eS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlc0V4dGVuc2liaWxpdHkvVHlwZXNFeHRlbnNpYmlsaXR5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNTY2OGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlc0V4dGVuc2liaWxpdHkvVHlwZXNFeHRlbnNpYmlsaXR5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1R5cGVzRXh0ZW5zaWJpbGl0eS8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iVHlwZXNFeHRlbnNpYmlsaXR5IgotCXhtbG5zOnR5cGVFeD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9PdGhlclR5cGVzLyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHlwZXNFeHRlbnNpYmlsaXR5LyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx0eXBlRXg6dHlwZURlZiAvPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1R5cGVzLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0idGVzdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJPC94c2Q6c2NoZW1hPgotCQk8dHlwZUV4OnR5cGVEZWYgLz4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9maXJzdGxldmVsLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9maXJzdGxldmVsLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYjhkYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vZmlyc3RsZXZlbC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4NCi0gICAgPGltcG9ydCBsb2NhdGlvbj0ic2Vjb25kbGV2ZWwud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIi8+DQotCTxtZXNzYWdlIG5hbWU9InRlc3RJTlBVVG1lc3NhZ2UiPg0KLQkJPHBhcnQgbmFtZT0idGVzdElOcGFydCIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLQk8L21lc3NhZ2U+DQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9tYWluLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9tYWluLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYTQyYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vbWFpbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiANCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiANCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4NCi0gICAgDQotICAgIDxpbXBvcnQgbG9jYXRpb249ImZpcnN0bGV2ZWwud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIi8+DQotICAgIA0KLSAgICA8cG9ydFR5cGUgbmFtZT0iVGVzdFBvcnRUeXBlIj4NCi0NCi0gICAgCTxvcGVyYXRpb24gbmFtZT0iVGVzdE9wZXJhdGlvbiI+DQotDQotICAgIAkJPCEtLSBUaGlzIGlzIGxvY2F0ZWQgaW4gdGhlIGZpcnN0IGxldmVsIGltcG9ydCAtLT4NCi0NCi0gICAgCQk8aW5wdXQgbWVzc2FnZT0idG5zOnRlc3RJTlBVVG1lc3NhZ2UiLz4NCi0NCi0gICAgCQk8IS0tIFRoaXMgaXMgbG9jYXRlZCBpbiB0aGUgc2Vjb25kIGxldmVsIGltcG9ydCAtLT4NCi0NCi0gICAgCQk8b3V0cHV0IG1lc3NhZ2U9InRuczp0ZXN0T1VUUFVUbWVzc2FnZSIvPg0KLQ0KLSAgICAJPC9vcGVyYXRpb24+DQotDQotICAgIDwvcG9ydFR5cGU+DQotICAgIA0KLTwvZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vc2Vjb25kbGV2ZWwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL3NlY29uZGxldmVsLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMmVmZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vc2Vjb25kbGV2ZWwud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPGRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgDQotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgDQotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIA0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPg0KLQ0KLQk8IS0tIEhlcmUgdG8gZm9yY2UgYSBjeWNsaWMgaW1wb3J0IHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBkb2VzIG5vdCBnbyBpbnRvIGFuIGluZmluaXRlIHJlY3Vyc2lvbi4gLS0+DQotCQ0KLSAgICA8aW1wb3J0IGxvY2F0aW9uPSJtYWluLndzZGwiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPg0KLQ0KLQk8bWVzc2FnZSBuYW1lPSJ0ZXN0T1VUUFVUbWVzc2FnZSI+DQotCQk8cGFydCBuYW1lPSJ0ZXN0T1VUcGFydCIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLQk8L21lc3NhZ2U+DQotDQotCTwhLS0gRHVwbGljYXRlZCBoZXJlIHRvIGFsbG93IHRlc3RpbmcgdGhlIGltcG9ydHMgdHJlZSB0cmF2ZXJzYWwgb3JkZXIuDQotCVRoaXMgbWVzc2FnZSB3aWxsIGJlICJtYXNrZWQiIGJ5IHRoZSBvbmUgZGVjbGFyZWQgaW4gdGhlIGZpcnN0bGV2ZWwud3NkbCAtLT4NCi0NCi0JPG1lc3NhZ2UgbmFtZT0idGVzdElOUFVUbWVzc2FnZSI+DQotCQk8cGFydCBuYW1lPSJ0ZXN0SU5wYXJ0IiB0eXBlPSJ4c2Q6aW50Ii8+DQotCTwvbWVzc2FnZT4NCi0NCi08L2RlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQRXhhbXBsZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWE0Yjc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIKLQl4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9IVFRQRXhhbXBsZS8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSFRUUEV4YW1wbGUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0hUVFBFeGFtcGxlLyI+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkhUVFBFeGFtcGxlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iSFRUUEV4YW1wbGVIVFRQIiB0eXBlPSJ0bnM6SFRUUEV4YW1wbGUiPgotCQk8aHR0cDpiaW5kaW5nIHZlcmI9IkdFVCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8aHR0cDpvcGVyYXRpb24gbG9jYXRpb249Ii9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8aHR0cDp1cmxFbmNvZGVkIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPG1pbWU6Y29udGVudCB0eXBlPSJ0ZXh0L3htbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJIVFRQRXhhbXBsZSI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkhUVFBFeGFtcGxlSFRUUCIKLQkJCW5hbWU9IkhUVFBFeGFtcGxlSFRUUCI+Ci0JCQk8aHR0cDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUFRlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyMTFlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRUV4YW1wbGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVFeGFtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzM2Q0NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRUV4YW1wbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRUV4YW1wbGUiPgotCTx0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJYTUxEYXRhIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQxIiB0eXBlPSJ4c2Q6aW50Ij48L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3R5cGVzPgotCTxtZXNzYWdlIG5hbWU9IlJlcXVlc3RNc2ciPgotCQk8cGFydCBuYW1lPSJyZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdCIgLz4KLQk8L21lc3NhZ2U+Ci0JPG1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNc2ciPgotCQk8cGFydCBuYW1lPSJyZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlIiAvPgotCQk8cGFydCBuYW1lPSJyZXNwb25zZURhdGEiIHR5cGU9InhzZDpiYXNlNjRCaW5hcnkiIC8+Ci0JCTxwYXJ0IG5hbWU9InhtbERhdGEiIGVsZW1lbnQ9InRuczpYTUxEYXRhIiAvPgotCTwvbWVzc2FnZT4KLQk8cG9ydFR5cGUgbmFtZT0iTUlNRUV4YW1wbGVQb3J0VHlwZSI+Ci0JCTxvcGVyYXRpb24gbmFtZT0idGVzdE9wZXJhdGlvbiI+Ci0JCQk8aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNc2ciIC8+Ci0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1zZyIgLz4KLQkJPC9vcGVyYXRpb24+Ci0JPC9wb3J0VHlwZT4KLQk8YmluZGluZyBuYW1lPSJNSU1FRXhhbXBsZUJpbmRpbmciIHR5cGU9InRuczpNSU1FRXhhbXBsZVBvcnRUeXBlIj4KLQkJPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIKLQkJCXN0eWxlPSJkb2N1bWVudCIgLz4KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRUV4YW1wbGUvdGVzdE9wZXJhdGlvbiIgLz4KLQkJCTxpbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvaW5wdXQ+Ci0JCQk8b3V0cHV0PgotCQkJCTxtaW1lOm11bHRpcGFydFJlbGF0ZWQ+Ci0JCQkJCTxtaW1lOnBhcnQgbmFtZT0icmVzcG9uc2UiPgotCQkJCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQkJCTwvbWltZTpwYXJ0PgotCQkJCQk8bWltZTpwYXJ0IG5hbWU9InJlc3BvbnNlRGF0YSI+Ci0JCQkJCQk8bWltZTpjb250ZW50IHBhcnQ9InJlc3BvbnNlRGF0YSIgdHlwZT0idGV4dC9iaW5hcnkiIC8+Ci0JCQkJCTwvbWltZTpwYXJ0PgotCQkJCTwvbWltZTptdWx0aXBhcnRSZWxhdGVkPgotCQkJCTxtaW1lOm1pbWVYTUwgcGFydD0ieG1sRGF0YSIgLz4KLQkJCTwvb3V0cHV0PgotCQk8L29wZXJhdGlvbj4KLQk8L2JpbmRpbmc+Ci0JPHNlcnZpY2UgbmFtZT0iTUlNRUV4YW1wbGVTZXJ2aWNlIj4KLQkJPHBvcnQgbmFtZT0iTUlNRUV4YW1wbGVQb3J0IiBiaW5kaW5nPSJ0bnM6TUlNRUV4YW1wbGVCaW5kaW5nIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9NSU1FRXhhbXBsZSIgLz4KLQkJPC9wb3J0PgotCTwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRVRlc3Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVUZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzE2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRVRlc3Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FVGVzdCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRVRlc3QiPgotCTx0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FVGVzdCI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJYTUxEYXRhIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQxIiB0eXBlPSJ4c2Q6aW50Ij48L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3R5cGVzPgotCTxtZXNzYWdlIG5hbWU9IlJlcXVlc3RNc2ciPgotCQk8cGFydCBuYW1lPSJyZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdCIgLz4KLQk8L21lc3NhZ2U+Ci0JPG1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNc2ciPgotCQk8cGFydCBuYW1lPSJyZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlIiAvPgotCQk8cGFydCBuYW1lPSJyZXNwb25zZURhdGEiIHR5cGU9InhzZDpiYXNlNjRCaW5hcnkiIC8+Ci0JCTxwYXJ0IG5hbWU9InhtbERhdGEiIGVsZW1lbnQ9InRuczpYTUxEYXRhIiAvPgotCTwvbWVzc2FnZT4KLQk8cG9ydFR5cGUgbmFtZT0iTUlNRVRlc3RQb3J0VHlwZSI+Ci0JCTxvcGVyYXRpb24gbmFtZT0idGVzdE9wZXJhdGlvbiI+Ci0JCQk8aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNc2ciIC8+Ci0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1zZyIgLz4KLQkJPC9vcGVyYXRpb24+Ci0JPC9wb3J0VHlwZT4KLQk8YmluZGluZyBuYW1lPSJNSU1FVGVzdEJpbmRpbmciIHR5cGU9InRuczpNSU1FVGVzdFBvcnRUeXBlIj4KLQkJPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIKLQkJCXN0eWxlPSJkb2N1bWVudCIgLz4KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRVRlc3QvdGVzdE9wZXJhdGlvbiIgLz4KLQkJCTxpbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvaW5wdXQ+Ci0JCQk8b3V0cHV0PgotCQkJPC9vdXRwdXQ+Ci0JCTwvb3BlcmF0aW9uPgotCTwvYmluZGluZz4KLQk8c2VydmljZSBuYW1lPSJNSU1FVGVzdFNlcnZpY2UiPgotCQk8cG9ydCBuYW1lPSJNSU1FVGVzdFBvcnQiIGJpbmRpbmc9InRuczpNSU1FVGVzdEJpbmRpbmciPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL01JTUVUZXN0IiAvPgotCQk8L3BvcnQ+Ci0JPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiODMwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJEb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvIj4KLQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQk8d3NkbDp0eXBlcz4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx4c2Q6c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbkZhdWx0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImZhdWx0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uSGVhZGVyIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImhlYWRlciIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbkhlYWRlckZhdWx0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImhlYWRlckZhdWx0IgotCQkJCQkJCXR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9IlRlc3RNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25IZWFkZXIiIG5hbWU9InRlc3RIZWFkZXIiIC8+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbkhlYWRlckZhdWx0IgotCQkJbmFtZT0idGVzdEhlYWRlckZhdWx0IiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdE1zZyI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+VGVzdCBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IgotCQkJbmFtZT0icGFyYW1ldGVycyI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPC93c2RsOnBhcnQ+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbkhlYWRlciIgbmFtZT0iaGVhZGVyIiAvPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25IZWFkZXJGYXVsdCIKLQkJCW5hbWU9ImhlYWRlckZhdWx0IiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2VNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvbkZhdWx0TXNnIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uRmF1bHQiIG5hbWU9ImZhdWx0IiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdE1zZyI+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZU1zZyI+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9ImZhdWx0IgotCQkJCW1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25GYXVsdE1zZyI+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJPC93c2RsOmZhdWx0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlU09BUCIKLQkJdHlwZT0idG5zOkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50IgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0icGFyYW1ldGVycyIgLz4KLQkJCQk8c29hcDpoZWFkZXIgdXNlPSJsaXRlcmFsIiBwYXJ0PSJoZWFkZXIiCi0JCQkJCW1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIj4KLQkJCQkJPHNvYXA6aGVhZGVyZmF1bHQgdXNlPSJsaXRlcmFsIiBwYXJ0PSJoZWFkZXJGYXVsdCIKLQkJCQkJCW1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIiAvPgotCQkJCTwvc29hcDpoZWFkZXI+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJVGVzdCBkb2N1bWVudGF0aW9uLgotCQkJCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9ImZhdWx0Ij4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iZmF1bHQiIHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpmYXVsdD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlU09BUCIKLQkJCW5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlU09BUCI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENFbmNvZGVkU09BUEV4YW1wbGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzAyYTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJSUENFbmNvZGVkU09BUEV4YW1wbGUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS8iPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJSUENFbmNvZGVkU09BUEV4YW1wbGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJSUENFbmNvZGVkU09BUEV4YW1wbGVTT0FQIgotCQl0eXBlPSJ0bnM6UlBDRW5jb2RlZFNPQVBFeGFtcGxlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0icnBjIgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENFbmNvZGVkU09BUEV4YW1wbGUvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keQotCQkJCQllbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIKLQkJCQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS8iCi0JCQkJCXVzZT0iZW5jb2RlZCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5Ci0JCQkJCWVuY29kaW5nU3R5bGU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIgotCQkJCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLyIKLQkJCQkJdXNlPSJlbmNvZGVkIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZSI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlJQQ0VuY29kZWRTT0FQRXhhbXBsZVNPQVAiCi0JCQluYW1lPSJSUENFbmNvZGVkU09BUEV4YW1wbGVTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYTc3YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCW5hbWU9IlJQQ0xpdGVyYWxTT0FQRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLyI+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uRmF1bHQiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvbkZhdWx0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlJQQ0xpdGVyYWxTT0FQRXhhbXBsZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiIG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25GYXVsdCIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJSUENMaXRlcmFsU09BUEV4YW1wbGVTT0FQIgotCQl0eXBlPSJ0bnM6UlBDTGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0icnBjIgotCQkJdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keQotCQkJCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLyIKLQkJCQkJdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkKLQkJCQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS8iCi0JCQkJCXVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCQk8d3NkbDpmYXVsdCBuYW1lPSJmYXVsdCI+Ci0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iZmF1bHQiCi0JCQkJCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvIgotCQkJCQl1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6ZmF1bHQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJSUENMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpSUENMaXRlcmFsU09BUEV4YW1wbGVTT0FQIgotCQkJbmFtZT0iUlBDTGl0ZXJhbFNPQVBFeGFtcGxlU09BUCI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIgLz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvU09BUFRlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjZWI5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE5MmU4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSoud3NkbC5vdXQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9JbXBvcnRlZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0ltcG9ydGVkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYTgyZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0ltcG9ydGVkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSW1wb3J0ZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnRlZCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRlZFNPQVAiIHR5cGU9InRuczpJbXBvcnRlZCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkltcG9ydGVkIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkltcG9ydGVkU09BUCIgYmluZGluZz0idG5zOkltcG9ydGVkU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWJiMjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvTG9hZEFuZFByaW50VGVzdC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJMb2FkQW5kUHJpbnRUZXN0IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIgeG1sbnM6d3NkbDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iIGxvY2F0aW9uPSJJbXBvcnRlZC53c2RsIj48L3dzZGw6aW1wb3J0PgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uTmV3RmF1bHQiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25OZXdGYXVsdCI+Ci0gIAk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvbk5ld0ZhdWx0IgotICAJCWVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25OZXdGYXVsdCI+Ci0gIAk8L3dzZGw6cGFydD4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkxvYWRBbmRQcmludFRlc3QiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9Ik5ld0ZhdWx0IiBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uTmV3RmF1bHQiPjwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iTG9hZEFuZFByaW50VGVzdFNPQVAiIHR5cGU9InRuczpMb2FkQW5kUHJpbnRUZXN0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvTG9hZEFuZFByaW50VGVzdC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9Ik5ld0ZhdWx0Ij48L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iTG9hZEFuZFByaW50VGVzdCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6TG9hZEFuZFByaW50VGVzdFNPQVAiIG5hbWU9IkxvYWRBbmRQcmludFRlc3RTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9BbGxUZXN0Q2FzZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9BbGxUZXN0Q2FzZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThkY2M0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQWxsVGVzdENhc2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zLkhUVFBFeHRlbnNpb25zVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zLk1JTUVFeHRlbnNpb25zVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zLlNPQVBFeHRlbnNpb25zVGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIEFsbFRlc3RDYXNlcyBleHRlbmRzIFRlc3RDYXNlCi17Ci0KLSAgcHVibGljIEFsbFRlc3RDYXNlcygpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KElubGluZVNjaGVtYVRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChMb2FkQW5kU2VyaWFsaXphdGlvblRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChTZW1hbnRpY1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChXU0RMR2VuZXJhdGlvblRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChXU0RMNEpBUElUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoV1NETEVNRkFQSVRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChVdGlsVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KEJ1Z0ZpeGVzVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KExvY2F0aW9uVHJhY2tpbmdUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoUmVmYWN0b3JpbmdUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoU09BUEV4dGVuc2lvbnNUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoSFRUUEV4dGVuc2lvbnNUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoTUlNRUV4dGVuc2lvbnNUZXN0LnN1aXRlKCkpOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQnVnRml4ZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4Nzg5OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLWltcG9ydCBqYXZheC54bWwuWE1MQ29uc3RhbnRzOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNESW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIENvbnRhaW5zIHVuaXQgdGVzdHMgZm9yIHJlcG9ydGVkIGJ1Z3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHVibGljIEJ1Z0ZpeGVzVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlR5cGVBbmRFbGVtZW50UmVzb2x1dGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0VHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJNSU1FR2V0VHlwZU5hbWUiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFJldHVybnNQcm9wZXJRTmFtZUZvck1JTUVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkltcG9ydHNFbGVtZW50T3JkZXIiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFBsYWNlc0ltcG9ydHNBZnRlclRoZURlZmluaXRpb25FbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJSZXNvbHZlV1NETEVsZW1lbnQiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFJlc29sdmVzRWxlbWVudEluSW1wb3J0cygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiUGFydHNTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTZXJpYWxpemVzUGFydHNJblNPQVBCb2R5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJJbXBvcnRzU2VyaWFsaXphdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U2VyaWFsaXplc0ltcG9ydHNCZWZvcmVUeXBlcygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiTG9jYWxOYW1lc3BhY2VQcmVmaXhlcyIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U3VwcG9ydHNMb2NhbE5hbWVzcGFjZVByZWZpeGVzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJPcGVyYXRpb25FeHRlbnNpb25FbGVtZW50cyIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0VG9sbGVyYXRlc0V4dGVuc2lvbkVsZW1lbnRzRm9yT3BlcmF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJSZWNvbmNpbGVzQmluZGluZ0ZhdWx0cyIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmVjb25jaWxlc0JpbmRpbmdGYXVsdHMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkR1cGxpY2F0ZVNBWEVycm9yRGlhZ25vc3RpY3MiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEF2b2lkRHVwbGljYXRlU0FYRXhjZXB0aW9uRGlhZ25vc3RpY3MoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0QmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJGdWxsRWxlbWVudEV4dGVuc2liaWxpdHkiKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEZ1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eSgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiVHlwZXNFeHRlbnNpYmlsaXR5IikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0VHlwZXNFeHRlbnNpYmlsaXR5KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkFsbG93TnVsbE5hbWVzcGFjZVVSSSIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdEFsbG93TnVsbE5hbWVzcGFjZVVSSSgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJMb2Fkc05hbWVsZXNzRGVmaW5pdGlvbiIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdExvYWRzTmFtZWxlc3NEZWZpbml0aW9uKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkhhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RIYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlN1cHBvcnRzTG9jYWxOU0ZvckV4dGVuc2liaWxpdHlFbGVtZW50cyIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdFN1cHBvcnRzTG9jYWxOU0ZvckV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RJbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiUHJvcGFnYXRlc1RhcmdldE5hbWVzcGFjZUNoYW5nZSIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdFByb3BhZ2F0ZXNUYXJnZXROYW1lc3BhY2VDaGFuZ2UoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzMzMTAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUeXBlQW5kRWxlbWVudFJlc29sdXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIC8vIFRoZXJlIGFyZSB0d28gaW5saW5lIHNjaGVtYXMsIGVhY2ggaW1wb3J0aW5nIGFuIGV4dGVybmFsIHNjaGVtYS4KLSAgICAgIC8vIFRoZSBmaXJzdCBzY2hlbWEgaXMgZW1wdHkgYW5kIHVzZWQganVzdCB0byBzaG93IHRoZSB0eXBlIHJlc29sdXRpb24KLSAgICAgIC8vIG1lY2hhbmlzbSdzIGZhdWx0LgotICAgICAgLy8gVGhlIHNjaGVtYSBjb250YWluaW5nIHRoZSB0eXBlIGFuZCBlbGVtZW50IGRlY2xhcmF0aW9uIHdlJ3JlIGludGVyZXN0ZWQKLSAgICAgIC8vIGluIGlzIHRoZSBzZWNvbmQgc2NoZW1hIGluIHRoZSBjb2xsZWN0aW9uLgotCi0gICAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hID0gKFhTRFNjaGVtYSlkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldFNjaGVtYXMoKS5nZXQoMSk7Ci0KLSAgICAgIC8vIFRoZSBmaXJzdCBhbmQgb25seSBjb21wb25lbnQgaW4gdGhpcyBzY2hlbWEgaXMgYW4gaW1wb3J0LgotCi0gICAgICBYU0RJbXBvcnQgeHNkSW1wb3J0ID0gKFhTREltcG9ydClpbmxpbmVTY2hlbWEuZ2V0Q29udGVudHMoKS5nZXQoMCk7Ci0KLSAgICAgIC8vIFRoZSBpbXBvcnRlZCBzY2hlbWEgd2FzIHJlc29sdmVkIHdoZW4gdGhlIHJlc291cmNlIHdhcyBsb2FkZWQuCi0gICAgICAvLyBUaGlzIGlzIHRoZSBzY2hlbWEgY29udGFpbmluZyBvdXIgdHlwZS9lbGVtZW50LgotCi0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0geHNkSW1wb3J0LmdldFJlc29sdmVkU2NoZW1hKCk7Ci0KLSAgICAgIC8vIE5vdyBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHJlc29sdmVkIHR5cGUvZWxlbWVudCBmb3IgdGhlIG1lc3NhZ2VzIGluCi0gICAgICAvLyB0aGUgV1NETCBkb2N1bWVudAotICAgICAgLy8gYXJlIHRoZSBvbmVzIGluIHRoZSBzY2hlbWEgYW5kIG5vdCBzb21lIGJvZ3VzIG9uZXMuCi0KLSAgICAgIEl0ZXJhdG9yIG1lc3NhZ2VzSXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChtZXNzYWdlc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpbWVzc2FnZXNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICBpZiAobmFtZS5lcXVhbHMoInRlc3RSZXF1ZXN0IikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgb25seSBvbmUgcGFydCBpbiB0aGUgbWVzc2FnZSBhbmQgaXQgcmVmZXJzIHRvIGEKLSAgICAgICAgICAvLyB0eXBlLiBNYWtlIHN1cmUgdGhlIHR5cGUgY2FuIGJlIHJlc29sdmVkLgotCi0gICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpbWVzc2FnZS5nZXRFUGFydHMoKS5nZXQoMCk7Ci0gICAgICAgICAgWFNEVHlwZURlZmluaXRpb24gbXlUeXBlID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgICAgIGFzc2VydEVxdWFscyhzY2hlbWEsIG15VHlwZS5nZXRDb250YWluZXIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobmFtZS5lcXVhbHMoInRlc3RSZXNwb25zZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSBrbm93IHRoZXJlIGlzIG9ubHkgb25lIHBhcnQgaW4gdGhlIG1lc3NhZ2UgYW5kIGl0IHJlZmVycyB0byBhbgotICAgICAgICAgIC8vIGVsZW1lbnQuCi0KLSAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCltZXNzYWdlLmdldEVQYXJ0cygpLmdldCgwKTsKLSAgICAgICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gbXlFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgICAgICBhc3NlcnRFcXVhbHMoc2NoZW1hLCBteUVsZW1lbnQuZ2V0Q29udGFpbmVyKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTMzOTUzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuc1Byb3BlclFOYW1lRm9yTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICBNSU1FRmFjdG9yeSBmYWN0b3J5ID0gTUlNRVBhY2thZ2UuZUlOU1RBTkNFLmdldE1JTUVGYWN0b3J5KCk7Ci0KLSAgICBNSU1FQ29udGVudCBjb250ZW50ID0gZmFjdG9yeS5jcmVhdGVNSU1FQ29udGVudCgpOwotICAgIFFOYW1lIGNvbnRlbnRFbGVtZW50VHlwZSA9IGNvbnRlbnQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkksIGNvbnRlbnRFbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1JTUVDb25zdGFudHMuQ09OVEVOVF9FTEVNRU5UX1RBRywgY29udGVudEVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsKLQotICAgIE1JTUVNaW1lWG1sIG1pbWVYbWwgPSBmYWN0b3J5LmNyZWF0ZU1JTUVNaW1lWG1sKCk7Ci0gICAgUU5hbWUgbWltZVhtbEVsZW1lbnRUeXBlID0gbWltZVhtbC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgbWltZVhtbEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5NSU1FX1hNTF9FTEVNRU5UX1RBRywgbWltZVhtbEVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsKLQotICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG11bHRpcGFydFJlbGF0ZWQgPSBmYWN0b3J5LmNyZWF0ZU1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0gICAgUU5hbWUgbXVsdGlwYXJ0UmVsYXRlZEVsZW1lbnRUeXBlID0gbXVsdGlwYXJ0UmVsYXRlZC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgbXVsdGlwYXJ0UmVsYXRlZEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5NVUxUSVBBUlRfUkVMQVRFRF9FTEVNRU5UX1RBRywgbXVsdGlwYXJ0UmVsYXRlZEVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsKLQotICAgIE1JTUVQYXJ0IHBhcnQgPSBmYWN0b3J5LmNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgUU5hbWUgcGFydEVsZW1lbnRUeXBlID0gcGFydC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgcGFydEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5QQVJUX0VMRU1FTlRfVEFHLCBwYXJ0RWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDQwCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGxhY2VzSW1wb3J0c0FmdGVyVGhlRGVmaW5pdGlvbkVsZW1lbnQoKQotICB7Ci0gICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRXU0RMRmFjdG9yeSgpOwotCi0gICAgU3RyaW5nIG5hbWVzcGFjZSA9ICJ0ZXN0TmFtZXNwYWNlIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZmFjdG9yeS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUobmFtZXNwYWNlLCAidGVzdERlZmluaXRpb24iKSk7IC8vJE5PTi1OTFMtMSQgIAotICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgU2VydmljZSBzZXJ2aWNlID0gZmFjdG9yeS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUobmFtZXNwYWNlLCAidGVzdFNlcnZpY2UiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkZWZpbml0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0KLSAgICBJbXBvcnQgd3NkbEltcG9ydCA9IGZhY3RvcnkuY3JlYXRlSW1wb3J0KCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRJbXBvcnQod3NkbEltcG9ydCk7Ci0KLSAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IHNlcnZpY2UuZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgaW1wb3J0RWxlbWVudCA9IHdzZGxJbXBvcnQuZ2V0RWxlbWVudCgpOwotCi0gICAgTm9kZUxpc3QgZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbiA9IGRlZmluaXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQotICAgIE5vZGUgZmlyc3RDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgwKTsKLQotICAgIGFzc2VydFNhbWUoaW1wb3J0RWxlbWVudCwgZmlyc3RDaGlsZCk7Ci0KLSAgICBOb2RlIHNlY29uZENoaWxkID0gZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbi5pdGVtKDEpOwotCi0gICAgYXNzZXJ0U2FtZShzZXJ2aWNlRWxlbWVudCwgc2Vjb25kQ2hpbGQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODY2Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVzb2x2ZXNFbGVtZW50SW5JbXBvcnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9tYWluLndzZGwiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIC8vIFRoaXMgdGVzdCBhdHRlbXB0cyB0byBsb2NhdGUgYSBtZXNzYWdlIGxvY2F0ZWQgaW4gdGhlIGZpcnN0IGxldmVsCi0gICAgICAvLyBpbXBvcnQuCi0KLSAgICAgIFFOYW1lIGZpcnN0TGV2ZWxNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdElOUFVUbWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLk1lc3NhZ2UgZmlyc3RMZXZlbE1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UoZmlyc3RMZXZlbE1lc3NhZ2VRTmFtZSk7Ci0KLSAgICAgIGFzc2VydE5vdE51bGwoZmlyc3RMZXZlbE1lc3NhZ2UpOwotCi0gICAgICAvLyBUaGlzIHRlc3QgYXR0ZW1wdHMgdG8gbG9jYXRlIGEgbWVzc2FnZSBsb2NhdGVkIGluIHRoZSBzZWNvbmQgbGV2ZWwKLSAgICAgIC8vIGltcG9ydC4KLQotICAgICAgUU5hbWUgc2Vjb25kTGV2ZWxNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdE9VVFBVVG1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5NZXNzYWdlIHNlY29uZExldmVsTWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShzZWNvbmRMZXZlbE1lc3NhZ2VRTmFtZSk7Ci0KLSAgICAgIGFzc2VydE5vdE51bGwoc2Vjb25kTGV2ZWxNZXNzYWdlKTsKLQotICAgICAgLy8gVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZSBkbyBhIGJyZWFkdGggZmlyc3QgdHJhdmVyc2FsIHRvIGtlZXAgdGhpbmdzCi0gICAgICAvLyB3b3JraW5nIGFwcHJveGltYXRpdmVseSBhcyB0aGUgb2xkIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZWQgdG8gY2hlY2sKLSAgICAgIC8vIG9ubHkgdGhlIGRlZmluaXRpb24gYW5kIGl0cyBmaXJzdCBsZXZlbCBpbXBvcnRzLiBUaGUgZmlyc3QgbWVzc2FnZSBpcwotICAgICAgLy8gZGVmaW5lZCBpbiBmaXJzdGxldmVsLndzZGwgYXMgd2VsbCBhcyBzZWNvbmRsZXZlbC53c2RsIGJ1dCB0aGUKLSAgICAgIC8vIGFsZ29yaXRobSBzaG91bGQgZmluZCB0aGUgb25lIGluIGZpcnN0bGV2ZWwud3NkbC4KLQotICAgICAgSW1wb3J0IGZpcnN0TGV2ZWxJbXBvcnQgPSAoSW1wb3J0KWRlZmluaXRpb24uZ2V0SW1wb3J0cyh0YXJnZXROYW1lc3BhY2UpLmdldCgwKTsKLSAgICAgIERlZmluaXRpb24gZmlyc3RMZXZlbERlZmluaXRpb24gPSBmaXJzdExldmVsSW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0KLSAgICAgIGFzc2VydEVxdWFscyhmaXJzdExldmVsRGVmaW5pdGlvbiwgKChNZXNzYWdlKWZpcnN0TGV2ZWxNZXNzYWdlKS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzc5OTAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVzUGFydHNJblNPQVBCb2R5KCkKLSAgewotICAgIC8vIEJ1aWxkIGFuIGluLW1lbW9yeSBXU0RMIGRlZmluaXRpb24uCi0KLSAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFdTRExGYWN0b3J5KCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gInRlc3ROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICBkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOwotICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgInRlc3REZWZpbml0aW9uIikpOyAvLyROT04tTkxTLTEkCi0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInRucyIsIHRhcmdldE5hbWVzcGFjZSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgieHNkIiwgWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJzb2FwIiwgU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOyAvLyROT04tTkxTLTEkCi0KLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYWN0b3J5LmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdE1lc3NhZ2UiKTsKLSAgICBtZXNzYWdlLnNldFFOYW1lKG1lc3NhZ2VRTmFtZSk7Ci0gICAgZGVmaW5pdGlvbi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotCi0gICAgUGFydCBwYXJ0MSA9IGZhY3RvcnkuY3JlYXRlUGFydCgpOwotICAgIFN0cmluZyBwYXJ0MU5hbWUgPSAicGFydDEiOyAvLyROT04tTkxTLTEkIAotICAgIHBhcnQxLnNldE5hbWUocGFydDFOYW1lKTsKLSAgICBwYXJ0MS5zZXRUeXBlTmFtZShuZXcgUU5hbWUoWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIikpOyAvLyROT04tTkxTLTEkCi0gICAgbWVzc2FnZS5hZGRQYXJ0KHBhcnQxKTsKLQotICAgIFBhcnQgcGFydDIgPSBmYWN0b3J5LmNyZWF0ZVBhcnQoKTsKLSAgICBTdHJpbmcgcGFydDJOYW1lID0gInBhcnQyIjsgLy8kTk9OLU5MUy0xJCAKLSAgICBwYXJ0Mi5zZXROYW1lKHBhcnQyTmFtZSk7Ci0gICAgcGFydDIuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFhTRENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSwgInN0cmluZyIpKTsgLy8kTk9OLU5MUy0xJAotICAgIG1lc3NhZ2UuYWRkUGFydChwYXJ0Mik7Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGZhY3RvcnkuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBRTmFtZSBwb3J0UU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdFBvcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIHBvcnRUeXBlLnNldFFOYW1lKHBvcnRRTmFtZSk7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gZmFjdG9yeS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9ICJ0ZXN0T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJCAKLSAgICBvcGVyYXRpb24uc2V0TmFtZShvcGVyYXRpb25OYW1lKTsKLSAgICBwb3J0VHlwZS5hZGRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLQotICAgIElucHV0IGlucHV0ID0gZmFjdG9yeS5jcmVhdGVJbnB1dCgpOwotICAgIGlucHV0LnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgb3BlcmF0aW9uLnNldElucHV0KGlucHV0KTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IGZhY3RvcnkuY3JlYXRlQmluZGluZygpOwotICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0QmluZGluZyIpOyAvLyROT04tTkxTLTEkCi0gICAgYmluZGluZy5zZXRRTmFtZShiaW5kaW5nUU5hbWUpOwotICAgIGJpbmRpbmcuc2V0UG9ydFR5cGUocG9ydFR5cGUpOwotICAgIGRlZmluaXRpb24uYWRkQmluZGluZyhiaW5kaW5nKTsKLQotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0T3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQoYmluZGluZ0lucHV0KTsKLQotICAgIFNPQVBGYWN0b3J5IHNvYXBGYWN0b3J5ID0gU09BUFBhY2thZ2UuZUlOU1RBTkNFLmdldFNPQVBGYWN0b3J5KCk7Ci0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBzb2FwRmFjdG9yeS5jcmVhdGVTT0FQQm9keSgpOwotICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0KLSAgICBkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgIC8vIFRlc3QgdGhlICJubyBwYXJ0cyIgc2NlbmFyaW8uIEluIHRoaXMgY2FzZSB0aGUgcGFydHMgYXR0cmlidXRlIHNob3VsZCBub3QKLSAgICAvLyBiZSBwcmVzZW50LgotCi0gICAgRWxlbWVudCBzb2FwQm9keUVsZW1lbnQgPSBzb2FwQm9keS5nZXRFbGVtZW50KCk7Ci0gICAgQXR0ciBwYXJ0c0F0dHJpYnV0ZU5vZGUgPSBzb2FwQm9keUVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShTT0FQQ29uc3RhbnRzLlBBUlRTX0FUVFJJQlVURSk7Ci0gICAgYXNzZXJ0TnVsbChwYXJ0c0F0dHJpYnV0ZU5vZGUpOwotCi0gICAgLy8gVGVzdCB0aGUgc2NlbmFyaW8gd2hlbiB0aGUgYm9keSBzcGVjaWZpZXMgb25lIHBhcnQuIEluIHRoaXMgY2FzZSB0aGUKLSAgICAvLyBwYXJ0cyBhdHRyaWJ1dGUKLSAgICAvLyBzaG91bGQgYmUgcHJlc2VudCBhbmQgbG9vayBsaWtlIHRoaXMgcGFydHM9InBhcnQxIgotCi0gICAgTGlzdCBwYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwYXJ0cy5hZGQocGFydDEpOwotICAgIHNvYXBCb2R5LnNldFBhcnRzKHBhcnRzKTsKLQotICAgIHNvYXBCb2R5LnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgIHNvYXBCb2R5RWxlbWVudCA9IHNvYXBCb2R5LmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgcGFydHNBdHRyaWJ1dGVWYWx1ZSA9IHNvYXBCb2R5RWxlbWVudC5nZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5QQVJUU19BVFRSSUJVVEUpOwotICAgIGFzc2VydEVxdWFscyhwYXJ0MU5hbWUsIHBhcnRzQXR0cmlidXRlVmFsdWUpOwotCi0gICAgLy8gVGVzdCB0aGUgc2NlbmFyaW8gd2hlbiB0aGUgYm9keSBzcGVjaWZpZXMgdHdvIHBhcnRzLiBJbiB0aGlzIGNhc2UgdGhlCi0gICAgLy8gcGFydHMgYXR0cmlidXRlCi0gICAgLy8gc2hvdWxkIGJlIHByZXNlbnQgYW5kIGxvb2sgbGlrZSB0aGlzIHBhcnRzPSJwYXJ0MSBwYXJ0MiIKLQotICAgIHBhcnRzLmFkZChwYXJ0Mik7Ci0gICAgc29hcEJvZHkuc2V0UGFydHMocGFydHMpOwotCi0gICAgc29hcEJvZHkudXBkYXRlRWxlbWVudCgpOwotCi0gICAgc29hcEJvZHlFbGVtZW50ID0gc29hcEJvZHkuZ2V0RWxlbWVudCgpOwotICAgIHBhcnRzQXR0cmlidXRlVmFsdWUgPSBzb2FwQm9keUVsZW1lbnQuZ2V0QXR0cmlidXRlKFNPQVBDb25zdGFudHMuUEFSVFNfQVRUUklCVVRFKTsKLSAgICBhc3NlcnRFcXVhbHMocGFydDFOYW1lICsgIiAiICsgcGFydDJOYW1lLCBwYXJ0c0F0dHJpYnV0ZVZhbHVlKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MDMzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplc0ltcG9ydHNCZWZvcmVUeXBlcygpCi0gIHsKLSAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFdTRExGYWN0b3J5KCk7Ci0KLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gInRlc3ROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICBkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZShuYW1lc3BhY2UsICJ0ZXN0RGVmaW5pdGlvbiIpKTsgLy8kTk9OLU5MUy0xJCAgCi0gICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICBUeXBlcyB0eXBlcyA9IGZhY3RvcnkuY3JlYXRlVHlwZXMoKTsKLSAgICBkZWZpbml0aW9uLnNldFR5cGVzKHR5cGVzKTsKLQotICAgIEltcG9ydCB3c2RsSW1wb3J0ID0gZmFjdG9yeS5jcmVhdGVJbXBvcnQoKTsKLSAgICBkZWZpbml0aW9uLmFkZEltcG9ydCh3c2RsSW1wb3J0KTsKLQotICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IHR5cGVzRWxlbWVudCA9IHR5cGVzLmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IGltcG9ydEVsZW1lbnQgPSB3c2RsSW1wb3J0LmdldEVsZW1lbnQoKTsKLQotICAgIE5vZGVMaXN0IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4gPSBkZWZpbml0aW9uRWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuLml0ZW0oMCk7Ci0KLSAgICBhc3NlcnRTYW1lKGltcG9ydEVsZW1lbnQsIGZpcnN0Q2hpbGQpOwotCi0gICAgTm9kZSBzZWNvbmRDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgxKTsKLQotICAgIGFzc2VydFNhbWUodHlwZXNFbGVtZW50LCBzZWNvbmRDaGlsZCk7Ci0KLSAgICAvLyBCbG93IGF3YXkgdGhlIGJhY2tpbmcgRE9NLgotCi0gICAgZGVmaW5pdGlvbi5zZXRFbGVtZW50KG51bGwpOwotICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICB0eXBlc0VsZW1lbnQgPSB0eXBlcy5nZXRFbGVtZW50KCk7Ci0gICAgaW1wb3J0RWxlbWVudCA9IHdzZGxJbXBvcnQuZ2V0RWxlbWVudCgpOwotCi0gICAgZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbiA9IGRlZmluaXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZpcnN0Q2hpbGQgPSBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuLml0ZW0oMCk7Ci0KLSAgICBhc3NlcnRTYW1lKGltcG9ydEVsZW1lbnQsIGZpcnN0Q2hpbGQpOwotCi0gICAgc2Vjb25kQ2hpbGQgPSBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuLml0ZW0oMSk7Ci0KLSAgICBhc3NlcnRTYW1lKHR5cGVzRWxlbWVudCwgc2Vjb25kQ2hpbGQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTUzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3VwcG9ydHNMb2NhbE5hbWVzcGFjZVByZWZpeGVzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2Uud3NkbCIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3RlbXB1cmkub3JnL1NpbXBsZS8iOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSByZXNwb25zZSBtZXNzYWdlJ3MgcGFydCBlbGVtZW50IGlzIHJlc29sdmVkIE9LLgotCi0gICAgUU5hbWUgcmVzcG9uc2VNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAibXlPcGVyYXRpb25SZXNwb25zZSIpOyAvLy8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLk1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHJlc3BvbnNlTWVzc2FnZVFOYW1lKTsKLQotICAgIFBhcnQgcmVzcG9uc2VQYXJ0ID0gKFBhcnQpcmVzcG9uc2VNZXNzYWdlLmdldFBhcnQoIm15T3BlcmF0aW9uUmVzcG9uc2UiKTsgLy8vLyROT04tTkxTLTEkCi0KLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzcG9uc2VFbGVtZW50RGVjbGFyYXRpb24gPSByZXNwb25zZVBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0KLSAgICBhc3NlcnROb3ROdWxsKHJlc3BvbnNlRWxlbWVudERlY2xhcmF0aW9uKTsKLSAgICBhc3NlcnROb3ROdWxsKHJlc3BvbnNlRWxlbWVudERlY2xhcmF0aW9uLmdldENvbnRhaW5lcigpKTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlcXVlc3QgbWVzc2FnZSdzIHBhcnQgZWxlbWVudCBpcyByZXNvbHZlZCBPSy4KLSAgICAvLyBUaGlzIHBhcnQgZGVmaW5lcyBhIGxvY2FsIG5hbWVzcGFjZSBwcmVmaXgKLQotICAgIFFOYW1lIHJlcXVlc3RNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAibXlPcGVyYXRpb25SZXF1ZXN0Iik7IC8vLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuTWVzc2FnZSByZXF1ZXN0TWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShyZXF1ZXN0TWVzc2FnZVFOYW1lKTsKLQotICAgIFBhcnQgcmVxdWVzdFBhcnQgPSAoUGFydClyZXF1ZXN0TWVzc2FnZS5nZXRQYXJ0KCJteU9wZXJhdGlvblJlcXVlc3QiKTsgLy8vLyROT04tTkxTLTEkCi0KLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVxdWVzdEVsZW1lbnREZWNsYXJhdGlvbiA9IHJlcXVlc3RQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCi0gICAgYXNzZXJ0Tm90TnVsbChyZXF1ZXN0RWxlbWVudERlY2xhcmF0aW9uKTsKLQotICAgIC8vIE5vdyB0byBtYWtlIHN1cmUgdGhlIERPTSBpcyByZWNvbmNpbGVkIHByb3Blcmx5IGFuZCB1c2VzIHRoZSBsb2NhbCBuYW1lc3BhY2UgcHJlZml4LCAKLSAgICAvLyBsZXQncyB0cnkgdG8gY2hhbmdlIHRoZSBwYXJ0J3MgZWxlbWVudCBkZWNsYXJhdGlvbi4gV2UnbGwgdXNlIHRoZSByZXNwb25zZSBwYXJ0IGVsZW1lbnQKLSAgICAvLyBqdXN0IGJlY2F1c2UgaXQgaXMgY29udmVuaWVudC4KLQotICAgIHJlcXVlc3RQYXJ0LnNldEVsZW1lbnREZWNsYXJhdGlvbihyZXNwb25zZUVsZW1lbnREZWNsYXJhdGlvbik7Ci0KLSAgICBFbGVtZW50IHBhcnRFbGVtZW50ID0gcmVxdWVzdFBhcnQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBlbGVtZW50QXR0cmlidXRlVmFsdWUgPSBwYXJ0RWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoZWxlbWVudEF0dHJpYnV0ZVZhbHVlLCAicGFydHRuczoiICsgcmVzcG9uc2VFbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE1NzEwNwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRvbGxlcmF0ZXNFeHRlbnNpb25FbGVtZW50c0Zvck9wZXJhdGlvbigpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL09wZXJhdGlvblN0eWxlL09wZXJhdGlvblN0eWxlVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuZ2V0KDApOwotICAgIEVMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpOwotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pb3BlcmF0aW9ucy5nZXQoMCk7Ci0gICAgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFLCBvcGVyYXRpb25UeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE2NDU2NQotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlY29uY2lsZXNCaW5kaW5nRmF1bHRzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvQmluZGluZ0ZhdWx0UmVjb25jaWxpYXRpb24vQmluZGluZ0ZhdWx0U2FtcGxlLndzZGwiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBUZXN0IHRoZSBhYm5vcm1hbCBjYXNlIHdoZW4gdGhlIGJpbmRpbmcgb3BlcmF0aW9uIHRyaWVzIHRvIGJpbmQgYSBmYXVsdAotICAgIC8vIGJ1dCB0aGUgZmF1bHQgaXMgbWlzc2luZyBpbiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSB0aGUKLSAgICAvLyBmYXVsdCBvYnRhaW5lZCBmcm9tIHRoZSBiaW5kaW5nIG9wZXJhdGlvbidzIGZhdWx0IHNob3VsZCBiZSBudWxsLgotCi0gICAgTGlzdCBiaW5kaW5ncyA9IGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCk7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpYmluZGluZ3MuZ2V0KDApOwotICAgIExpc3QgYmluZGluZ09wZXJhdGlvbnMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnMuZ2V0KDApOwotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0KCJPcGVyYXRpb24xRmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICAgIEZhdWx0IGZhdWx0ID0gYmluZGluZ0ZhdWx0LmdldEVGYXVsdCgpOwotICAgIGFzc2VydE51bGwoZmF1bHQpOwotCi0gICAgLy8gVGVzdCB0aGUgbm9ybWFsIGNhc2Ugd2hlbiB0aGUgb3BlcmF0aW9uIGFuZCBiaW5kaW5nIG9wZXJhdGlvbiBhcmUgaW4KLSAgICAvLyBzeW5jaC4gSW4gdGhpcyBjYXNlIHRoZSBmYXVsdCBkZWZpbmVkIGluIHRoZSBvcGVyYXRpb24gc2hvdWxkIG1hdGNoCi0gICAgLy8gdGhlIG9uZSBvYnRhaW5lZCBmcm9tIHRoZSBiaW5kaW5nIG9wZXJhdGlvbidzIGZhdWx0LgotCi0gICAgTGlzdCBwb3J0VHlwZXMgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlwb3J0VHlwZXMuZ2V0KDApOwotICAgIEVMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpOwotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pb3BlcmF0aW9ucy5nZXQoMSk7Ci0gICAgamF2YXgud3NkbC5GYXVsdCBleHBlY3RlZEZhdWx0MSA9IG9wZXJhdGlvbi5nZXRGYXVsdCgiT3BlcmF0aW9uMkZhdWx0MSIpOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5GYXVsdCBleHBlY3RlZEZhdWx0MiA9IG9wZXJhdGlvbi5nZXRGYXVsdCgiT3BlcmF0aW9uMkZhdWx0MiIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24yID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnMuZ2V0KDEpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBmYXVsdCBvYnRhaW5lZCBmcm9tIHRoZSBiaW5kaW5nIGZhdWx0IGlzIG5vdCBudWxsIGFuZAotICAgIC8vIG1hdGNoZXMgdGhlIG9uZSBpbiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24uCi0KLSAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0MSA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbjIuZ2V0QmluZGluZ0ZhdWx0KCJPcGVyYXRpb24yRmF1bHQxIik7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLkZhdWx0IGFjdHVhbEZhdWx0MSA9IGJpbmRpbmdGYXVsdDEuZ2V0RUZhdWx0KCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChhY3R1YWxGYXVsdDEpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEZhdWx0MSwgYWN0dWFsRmF1bHQxKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmF1bHQgb2J0YWluZWQgZnJvbSB0aGUgYmluZGluZyBmYXVsdCBpcyBub3QgbnVsbCBhbmQKLSAgICAvLyBtYXRjaGVzIHRoZSBvbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uLgotCi0gICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdDIgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdPcGVyYXRpb24yLmdldEJpbmRpbmdGYXVsdCgiT3BlcmF0aW9uMkZhdWx0MiIpOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5GYXVsdCBhY3R1YWxGYXVsdDIgPSBiaW5kaW5nRmF1bHQyLmdldEVGYXVsdCgpOwotICAgIGFzc2VydE5vdE51bGwoYWN0dWFsRmF1bHQyKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRGYXVsdDIsIGFjdHVhbEZhdWx0Mik7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNjEwNTkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBdm9pZER1cGxpY2F0ZVNBWEV4Y2VwdGlvbkRpYWdub3N0aWNzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBNYWtlIHN1cmUgd2UgdHJhY2sgbG9jYXRpb24gdG8gYWxsb3cgdGhlIFdTRExQYXJzZXIgdG8ga2ljayBpbi4KLQotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0R1cGxpY2F0ZVNBWEV4Y2VwdGlvbi9TQVhFeGNlcHRpb24ud3NkbCIsIHRydWUsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFJlc291cmNlIHJlc291cmNlID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKTsKLSAgICBFTGlzdCBlcnJvcnMgPSByZXNvdXJjZS5nZXRFcnJvcnMoKTsKLSAgICBpbnQgZXhwZWN0ZWRTaXplID0gMTsKLSAgICBpbnQgYWN0dWFsU2l6ZSA9IGVycm9ycy5zaXplKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU2l6ZSwgYWN0dWFsU2l6ZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzI1NzYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEgKLSAgICAgICAgKyAic2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5Qb3J0VHlwZSBwb3J0VHlwZSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0KLSAgICBTdHJpbmcgaW5wdXQzTmFtZSA9ICJJbnB1dDMiOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIG91dHB1dDNOYW1lID0gIk91dHB1dDMiOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBmaXJzdCBvcGVyYXRpb24gLSB3aGljaCBoYXMgbm8gbmFtZWQgaW5wdXQvb3V0cHV0IGlzIGJlaW5nCi0gICAgLy8gZm91bmQuCi0KLSAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9ICJOZXdPcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5PcGVyYXRpb24gb3BlcmF0aW9uMSA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbihvcGVyYXRpb25OYW1lLCBudWxsLCBudWxsKTsKLQotICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb25TT0FQIik7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLkJpbmRpbmcgYmluZGluZyA9IGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24xID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbk5hbWUsIG51bGwsIG51bGwpOwotICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIGFjdHVhbE9wZXJhdGlvbjEgPSBiaW5kaW5nT3BlcmF0aW9uMS5nZXRPcGVyYXRpb24oKTsKLQotICAgIGFzc2VydEVxdWFscyhvcGVyYXRpb24xLCBhY3R1YWxPcGVyYXRpb24xKTsKLQotICAgIC8vIFRoZSBzZWNvbmQgb3BlcmF0aW9uIC0gd2hpY2ggaGFzIG5vIG5hbWVkIGlucHV0L291dHB1dCBpcyBiZWluZyBmb3VuZAotICAgIC8vIHNob3VsZCBub3QgYmUgcmVjb25jaWxlZCBiZWNhdXNlIHRoZSBiaW5kaW5nIHNwZWNpZmllcyB0aGUgaW5wdXQgYW5kCi0gICAgLy8gb3V0cHV0LgotCi0gICAgU3RyaW5nIGlucHV0Mk5hbWUgPSAiSW5wdXQyIjsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBvdXRwdXQyTmFtZSA9ICJPdXRwdXQyIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgU3RyaW5nIG9wZXJhdGlvbjJOYW1lID0gIk5ld09wZXJhdGlvbjIiOyAvLyROT04tTkxTLTEkCi0KLSAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjIgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uMk5hbWUsIGlucHV0Mk5hbWUsIG91dHB1dDJOYW1lKTsKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBhY3R1YWxPcGVyYXRpb24yID0gYmluZGluZ09wZXJhdGlvbjIuZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobnVsbCwgYWN0dWFsT3BlcmF0aW9uMik7Ci0KLSAgICAvLyBUaGUgdGhpcmQgb3BlcmF0aW9uIHNwZWNpZmllcyBhbiBpbnB1dCBhbmQgb3V0cHV0IG5hbWUsIGFuZCB0aGUgYmluZGluZwotICAgIC8vIG9wZXJhdGlvbiB3aWxsIHJlY29uY2lsZSBmaW5lIGJlY2F1c2UgdGhlIGl0IGFsc28gc3BlY2lmaWVzIHRoZSBwcm9wZXIKLSAgICAvLyBpbnB1dCBhbmQgb3V0cHV0IG5hbWUuCi0KLSAgICBTdHJpbmcgb3BlcmF0aW9uM05hbWUgPSAiTmV3T3BlcmF0aW9uMyI7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKG9wZXJhdGlvbjNOYW1lLCBpbnB1dDNOYW1lLCBvdXRwdXQzTmFtZSk7Ci0KLSAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uM05hbWUsIGlucHV0M05hbWUsIG91dHB1dDNOYW1lKTsKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBhY3R1YWxPcGVyYXRpb24zID0gYmluZGluZ09wZXJhdGlvbjMuZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMob3BlcmF0aW9uMywgYWN0dWFsT3BlcmF0aW9uMyk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzc4NTIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RGdWxsRWxlbWVudEV4dGVuc2liaWxpdHkoKQotICB7Ci0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9FeHRlbmRlZFdTREwud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFN0cmluZyBleHRlbnNpb25zTmFtZXNwYWNlVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5zaW9ucy8iOyAvLyROT04tTkxTLTEkIAotICAgIEVMaXN0IGltcG9ydHMgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0RmFsc2UoaW1wb3J0cy5pc0VtcHR5KCkpOwotICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWltcG9ydHMuZ2V0KDApOwotICAgIGNoZWNrRXh0ZW5zaW9uKHRoZUltcG9ydCwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgImltcG9ydCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBFTGlzdCBtZXNzYWdlcyA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCk7Ci0gICAgYXNzZXJ0RmFsc2UobWVzc2FnZXMuaXNFbXB0eSgpKTsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSltZXNzYWdlcy5nZXQoMCk7Ci0gICAgY2hlY2tFeHRlbnNpb24obWVzc2FnZSwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgIm1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgUGFydCBwYXJ0ID0gKFBhcnQpbWVzc2FnZS5nZXRQYXJ0KCJleHRlbmRlZFBhcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFzc2VydE5vdE51bGwocGFydCk7Ci0gICAgY2hlY2tFeHRlbnNpb24ocGFydCwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgInBhcnQiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgRUxpc3QgcG9ydFR5cGVzID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCk7Ci0gICAgYXNzZXJ0RmFsc2UocG9ydFR5cGVzLmlzRW1wdHkoKSk7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpcG9ydFR5cGVzLmdldCgwKTsKLSAgICBjaGVja0V4dGVuc2lvbihwb3J0VHlwZSwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgInBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKXBvcnRUeXBlLmdldE9wZXJhdGlvbigiZXh0ZW5kZWRPcGVyYXRpb24iLCBudWxsLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotICAgIGFzc2VydE5vdE51bGwob3BlcmF0aW9uKTsKLSAgICBjaGVja0V4dGVuc2lvbihvcGVyYXRpb24sIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJvcGVyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChpbnB1dCk7Ci0gICAgY2hlY2tFeHRlbnNpb24oaW5wdXQsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJpbnB1dCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dCk7Ci0gICAgY2hlY2tFeHRlbnNpb24ob3V0cHV0LCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAib3V0cHV0Iik7IC8vJE5PTi1OTFMtMSQKLQotICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KW9wZXJhdGlvbi5nZXRGYXVsdCgiZXh0ZW5kZWRGYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgYXNzZXJ0Tm90TnVsbChmYXVsdCk7Ci0gICAgY2hlY2tFeHRlbnNpb24oZmF1bHQsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJmYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRoZSBnaXZlbiBleHRlbnNpYmxlIGVsZW1lbnQgdG8gbWFrZSBzdXJlIHRoYXQgaXRzIGFzc3VtZWQgb25lIGFuZCBvbmx5IGV4dGVuc2liaWxpdHkgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbiBuYW1lc3BhY2UgYW5kIGxvY2FsIG5hbWUuCi0gICAqIEBwYXJhbSBleHRlbnNpYmxlRWxlbWVudCB0aGUgZXh0ZW5zaWJsZSBlbGVtZW50IHRvIHRlc3QuCi0gICAqIEBwYXJhbSBleHRlbnNpb25zTmFtZXNwYWNlVVJJIHRoZSBleHBlY3RlZCBuYW1lc3BhY2UgVVJJLgotICAgKiBAcGFyYW0gZWxlbWVudE5hbWUgdGhlIGV4cGVjdGVkIGVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja0V4dGVuc2lvbihFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCwgU3RyaW5nIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksIFN0cmluZyBlbGVtZW50TmFtZSkKLSAgewotICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgYXNzZXJ0RmFsc2UoZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmlzRW1wdHkoKSk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICBRTmFtZSBlbGVtZW50VHlwZSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgU3RyaW5nIG5zVVJJID0gZWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgU3RyaW5nIGxvY2FsUGFydCA9IGVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpOwotICAgIGFzc2VydEVxdWFscyhleHRlbnNpb25zTmFtZXNwYWNlVVJJLCBuc1VSSSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGxvY2FsUGFydCwgZWxlbWVudE5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzQzNjEKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0V4dGVuc2liaWxpdHkoKQotICB7Ci0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL1R5cGVzRXh0ZW5zaWJpbGl0eS9UeXBlc0V4dGVuc2liaWxpdHkud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICAKLSAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgCi0gICAgU3RyaW5nIG90aGVyVHlwZXNOYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9PdGhlclR5cGVzLyI7IC8vJE5PTi1OTFMtMSQKLQotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0gICAgUU5hbWUgZWxlbWVudFR5cGUgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhvdGhlclR5cGVzTmFtZXNwYWNlLCBlbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJ0eXBlRGVmIiwgZWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOyAvLyROT04tTkxTLTEkCi0KLSAgICBMaXN0IHNjaGVtYXMgPSB0eXBlcy5nZXRTY2hlbWFzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHNjaGVtYXMuc2l6ZSgpKTsKLSAgICAKLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBzY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDEpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBzY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5nZXRTY2hlbWEoKTsKLSAgICBhc3NlcnROb3ROdWxsKHNjaGVtYSk7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKCJ0ZXN0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnREZWNsYXJhdGlvbik7Ci0gICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50RGVjbGFyYXRpb24uZ2V0Q29udGFpbmVyKCkpOyAgICAKLSAgICAKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDIpOwotICAgIGVsZW1lbnRUeXBlID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICBhc3NlcnRFcXVhbHMob3RoZXJUeXBlc05hbWVzcGFjZSwgZWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscygidHlwZURlZiIsIGVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsgLy8kTk9OLU5MUy0xJCAgICAKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3ODU1NQotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFsbG93TnVsbE5hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gVGhlIGVsZW1lbnQgZGVjbGFyYXRpb24gZm9yIHRoZSBvdXRwdXQgbWVzc2FnZSBwYXJ0IGlzIHNwZWNpZmllZCBpbiBhCi0gICAgLy8gc2NoZW1hIHdpdGggbm8gdGFyZ2V0IG5hbWVzcGFjZS4gSXQgc2hvdWxkIHJlc29sdmUgZmluZSBhbmQgaGF2ZSBhIG51bGwKLSAgICAvLyBuYW1lc3BhY2UgVVJJLgotCi0gICAgUU5hbWUgb3V0cHV0MVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgInVwZGF0ZVBob25lTnVtYmVyUmVzcG9uc2VNc2ciKTsgLy8kTk9OLU5MUy0xJAotICAgIE1lc3NhZ2Ugb3V0cHV0MU1lc3NhZ2UgPSAoTWVzc2FnZSlkZWZpbml0aW9uLmdldE1lc3NhZ2Uob3V0cHV0MVFOYW1lKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDFNZXNzYWdlKTsKLQotICAgIFBhcnQgcGFydDEgPSAoUGFydClvdXRwdXQxTWVzc2FnZS5nZXRQYXJ0KCJvdXRwdXQxIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhc3NlcnROb3ROdWxsKHBhcnQxKTsKLQotICAgIFFOYW1lIG91dHB1dDJFbGVtZW50TmFtZSA9IHBhcnQxLmdldEVsZW1lbnROYW1lKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyRWxlbWVudE5hbWUpOwotICAgIGFzc2VydEVxdWFscyhYTUxDb25zdGFudHMuTlVMTF9OU19VUkksIG91dHB1dDJFbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gb3V0cHV0MkVsZW1lbnREZWNsYXJhdGlvbiA9IHBhcnQxLmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MkVsZW1lbnREZWNsYXJhdGlvbik7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyRWxlbWVudERlY2xhcmF0aW9uLmdldENvbnRhaW5lcigpKTsKLSAgICBhc3NlcnROdWxsKG91dHB1dDJFbGVtZW50RGVjbGFyYXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCi0gICAgLy8gVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIG91dHB1dCBtZXNzYWdlIHBhcnQgaXMgc3BlY2lmaWVkIGluIGEKLSAgICAvLyBzY2hlbWEgd2l0aCBubyB0YXJnZXQgbmFtZXNwYWNlLiBJdCBzaG91bGQgcmVzb2x2ZSBmaW5lIGFuZCBoYXZlIGEgbnVsbAotICAgIC8vIG5hbWVzcGFjZSBVUkkuCi0KLSAgICBRTmFtZSBvdXRwdXQyUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidXBkYXRlQWRkcmVzc1Jlc3BvbnNlTXNnIik7IC8vJE5PTi1OTFMtMSQKLSAgICBNZXNzYWdlIG91dHB1dDJNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG91dHB1dDJRTmFtZSk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyTWVzc2FnZSk7Ci0KLSAgICBQYXJ0IHBhcnQyID0gKFBhcnQpb3V0cHV0Mk1lc3NhZ2UuZ2V0UGFydCgib3V0cHV0MiIpOyAvLyROT04tTkxTLTEkCi0gICAgYXNzZXJ0Tm90TnVsbChwYXJ0MSk7Ci0KLSAgICBRTmFtZSBvdXRwdXQyVHlwZU5hbWUgPSBwYXJ0Mi5nZXRUeXBlTmFtZSgpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MlR5cGVOYW1lKTsKLSAgICBhc3NlcnRFcXVhbHMoWE1MQ29uc3RhbnRzLk5VTExfTlNfVVJJLCBvdXRwdXQyVHlwZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0gICAgWFNEVHlwZURlZmluaXRpb24gb3V0cHV0MlR5cGVEZWZpbml0aW9uID0gcGFydDIuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJUeXBlRGVmaW5pdGlvbik7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyVHlwZURlZmluaXRpb24uZ2V0Q29udGFpbmVyKCkpOwotICAgIGFzc2VydE51bGwob3V0cHV0MlR5cGVEZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMDQ0NTMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2Fkc05hbWVsZXNzRGVmaW5pdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvL1Rlc3Qgd2l0aCBuYW1lbGVzcyBkZWZpbml0aW9uCi0gICAgICAKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL01pc3NpbmdOYW1lLndzZGwiKTsKLSAgICAgIGFzc2VydE51bGwoZGVmaW5pdGlvbi5nZXRRTmFtZSgpKTsKLQotICAgICAgLy9UZXN0IHdpdGggbmFtZWQgZGVmaW5pdGlvbgotICAgICAgCi0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vV2l0aE5hbWUud3NkbCIpOwotICAgICAgYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIFFOYW1lIG5hbWUgPSBkZWZpbml0aW9uLmdldFFOYW1lKCk7IAotICAgICAgYXNzZXJ0Tm90TnVsbChuYW1lKTsKLSAgICAgIGFzc2VydEVxdWFscygiV1NETEZpbGUiLCBuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjc0Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SGFuZGxlc0RvY3VtZW50YXRpb25FbGVtZW50cygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBMb2FkIGEgc2FtcGxlIFdTREwgZG9jdW1lbnQgdGhhdCBoYXMgZG9jdW1lbnRhdGlvbiBlbGVtZW50cyBpbiBhbGwgYWxsb3dlZCBwbGFjZXMuCi0gICAgICAKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0hhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMvRG9jdW1lbnRlZC53c2RsIik7Ci0gICAgICAKLSAgICAgIC8vIE1ha2Ugc3VyZSBpbXBvcnRzIGFyZSBhZGRlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50LgotICAgICAgCi0gICAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFOwotICAgICAgSW1wb3J0IGFuSW1wb3J0ID0gZmFjdG9yeS5jcmVhdGVJbXBvcnQoKTsKLSAgICAgIGFuSW1wb3J0LnNldE5hbWVzcGFjZVVSSSgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOwotICAgICAgZGVmaW5pdGlvbi5hZGRJbXBvcnQoYW5JbXBvcnQpOwotICAgICAgCi0gICAgICBFbGVtZW50IGRlZmluaXRpb25Eb2N1bWVudGF0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICAgIGFzc2VydE5vdE51bGwoZGVmaW5pdGlvbkRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIEVsZW1lbnQgZXhwZWN0ZWRJbXBvcnRFbGVtZW50ID0gZ2V0TmV4dEVsZW1lbnQoZGVmaW5pdGlvbkRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIEVsZW1lbnQgaW1wb3J0RWxlbWVudCA9IGFuSW1wb3J0LmdldEVsZW1lbnQoKTsKLSAgICAgIGFzc2VydEVxdWFscyhpbXBvcnRFbGVtZW50LCBleHBlY3RlZEltcG9ydEVsZW1lbnQpOwotICAgICAgCi0gICAgICAvLyBUaGlzIGlzIGEgYml0IG92ZXJraWxsIHNpbmNlIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzIGFyZSBoYW5kbGVkIGluIHRoZSBiYXNlIGNsYXNzIFdTRExFbGVtZW50SW1wbCBidXQuLi4KLSAgICAgIAotICAgICAgLy8gTWFrZSBzdXJlIG5ldyBtZXNzYWdlIHBhcnRzIGFyZSBhZGRlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGFuZCBhcyB0aGUgbGFzdCBlbGVtZW50LgotCi0gICAgICBNZXNzYWdlIGFNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKS5nZXQoMCk7Ci0gICAgICBQYXJ0IG5ld1BhcnQgPSBmYWN0b3J5LmNyZWF0ZVBhcnQoKTsKLSAgICAgIGFNZXNzYWdlLmFkZFBhcnQobmV3UGFydCk7Ci0KLSAgICAgIEVsZW1lbnQgbWVzc2FnZUVsZW1lbnQgPSBhTWVzc2FnZS5nZXRFbGVtZW50KCk7Ci0KLSAgICAgIEVsZW1lbnQgbWVzc2FnZURvY3VtZW50YXRpb25FbGVtZW50ID0gYU1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICAgIGFzc2VydE5vdE51bGwobWVzc2FnZURvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIEVsZW1lbnQgZmlyc3RDaGlsZEVsZW1lbnQgPSBnZXRGaXJzdENoaWxkRWxlbWVudChtZXNzYWdlRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZURvY3VtZW50YXRpb25FbGVtZW50LCBmaXJzdENoaWxkRWxlbWVudCk7Ci0gICAgICAKLSAgICAgIEVsZW1lbnQgcGFydEVsZW1lbnQgPSBuZXdQYXJ0LmdldEVsZW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgbGFzdENoaWxkRWxlbWVudCA9IGdldExhc3RDaGlsZEVsZW1lbnQobWVzc2FnZUVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKHBhcnRFbGVtZW50LCBsYXN0Q2hpbGRFbGVtZW50KTsKLSAgICAgIAotICAgICAgLy8gTWFrZSBzdXJlIG5ldyBvcGVyYXRpb25zIGFyZSBhZGRlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGFuZCBhcyB0aGUgbGFzdCBlbGVtZW50LgotCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5nZXQoMCk7Ci0gICAgICBPcGVyYXRpb24gbmV3T3BlcmF0aW9uID0gZmFjdG9yeS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihuZXdPcGVyYXRpb24pOwotICAgICAgCi0gICAgICBFbGVtZW50IHBvcnRUeXBlRWxlbWVudCA9IHBvcnRUeXBlLmdldEVsZW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBwb3J0VHlwZURvY3VtZW50YXRpb25FbGVtZW50ID0gcG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICAgIGFzc2VydE5vdE51bGwocG9ydFR5cGVEb2N1bWVudGF0aW9uRWxlbWVudCk7Ci0gICAgICBmaXJzdENoaWxkRWxlbWVudCA9IGdldEZpcnN0Q2hpbGRFbGVtZW50KHBvcnRUeXBlRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMocG9ydFR5cGVEb2N1bWVudGF0aW9uRWxlbWVudCwgZmlyc3RDaGlsZEVsZW1lbnQpOwotICAgICAgCi0gICAgICBFbGVtZW50IG5ld09wZXJhdGlvbkVsZW1lbnQgPSBuZXdPcGVyYXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgbGFzdENoaWxkRWxlbWVudCA9IGdldExhc3RDaGlsZEVsZW1lbnQocG9ydFR5cGVFbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscyhuZXdPcGVyYXRpb25FbGVtZW50LCBsYXN0Q2hpbGRFbGVtZW50KTsKLSAgICAgIAotICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZWxlbWVudCBpcyBhZGRlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGFuZCBhcyB0aGUgbGFzdCBlbGVtZW50LgotICAgICAgCi0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLmdldCgwKTsKLSAgICAgIE91dHB1dCBvdXRwdXQgPSBmYWN0b3J5LmNyZWF0ZU91dHB1dCgpOwotICAgICAgb3BlcmF0aW9uLnNldE91dHB1dChvdXRwdXQpOwotCi0gICAgICBFbGVtZW50IG9wZXJhdGlvbkVsZW1lbnQgPSBvcGVyYXRpb24uZ2V0RWxlbWVudCgpOwotCi0gICAgICBFbGVtZW50IG9wZXJhdGlvbkRvY3VtZW50YXRpb25FbGVtZW50ID0gb3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKG9wZXJhdGlvbkRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIGZpcnN0Q2hpbGRFbGVtZW50ID0gZ2V0Rmlyc3RDaGlsZEVsZW1lbnQob3BlcmF0aW9uRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMob3BlcmF0aW9uRG9jdW1lbnRhdGlvbkVsZW1lbnQsIGZpcnN0Q2hpbGRFbGVtZW50KTsKLSAgICAgIAotICAgICAgRWxlbWVudCBvdXRwdXRFbGVtZW50ID0gb3V0cHV0LmdldEVsZW1lbnQoKTsKLSAgICAgIGxhc3RDaGlsZEVsZW1lbnQgPSBnZXRMYXN0Q2hpbGRFbGVtZW50KG9wZXJhdGlvbkVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKG91dHB1dEVsZW1lbnQsIGxhc3RDaGlsZEVsZW1lbnQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MzkwCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3VwcG9ydHNMb2NhbE5TRm9yRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1cmkgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlMi53c2RsIjsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmNyZWF0ZVdTREw0SkZhY3RvcnkoKTsKLSAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgICAgamF2YXgud3NkbC5EZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUmVhZGVyLnJlYWRXU0RMKHVyaSk7Ci0KLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9leGFtcGxlLyI7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gVGVzdCBhIGxvY2FsIFNPQVAgbmFtZXNwYWNlIHByZWZpeCBkZWNsYXJhdGlvbi4KLQotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgImV4YW1wbGVTT0FQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuQmluZGluZyBiaW5kaW5nID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKGJpbmRpbmcpOwotICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc29hcEJpbmRpbmcgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICAgIGFzc2VydE5vdE51bGwoc29hcEJpbmRpbmcpOwotICAgICAgUU5hbWUgYmluZGluZ0VsZW1lbnRUeXBlID0gc29hcEJpbmRpbmcuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICAgIGFzc2VydE5vdE51bGwoYmluZGluZ0VsZW1lbnRUeXBlKTsKLSAgICAgIFN0cmluZyBsb2NhbFBhcnQgPSBiaW5kaW5nRWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoU09BUENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHLCBsb2NhbFBhcnQpOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGJpbmRpbmdFbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGFzc2VydEVxdWFscyhTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgbmFtZXNwYWNlVVJJKTsKLSAgICAgIGFzc2VydFRydWUoc29hcEJpbmRpbmcgaW5zdGFuY2VvZiBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyk7Ci0KLSAgICAgIC8vIFRlc3QgYSBkZWZhdWx0IFNPQVAgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGF0IHRoZSBwb3J0IGxldmVsLgotCi0gICAgICBRTmFtZSBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiZXhhbXBsZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc2VydmljZSA9IGRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgUG9ydCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KCJleGFtcGxlU09BUCIpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IHNvYXBBZGRyZXNzID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHNvYXBBZGRyZXNzKTsKLSAgICAgIFFOYW1lIHBvcnRFbGVtZW50VHlwZSA9IHNvYXBBZGRyZXNzLmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHBvcnRFbGVtZW50VHlwZSk7Ci0gICAgICBsb2NhbFBhcnQgPSBwb3J0RWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoU09BUENvbnN0YW50cy5BRERSRVNTX0VMRU1FTlRfVEFHLCBsb2NhbFBhcnQpOwotICAgICAgbmFtZXNwYWNlVVJJID0gcG9ydEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBuYW1lc3BhY2VVUkkpOwotICAgICAgYXNzZXJ0VHJ1ZShzb2FwQWRkcmVzcyBpbnN0YW5jZW9mIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBnZXROZXh0RWxlbWVudChFbGVtZW50IGFuRWxlbWVudCkKLSAgewotICAgIE5vZGUgbm9kZSA9IGFuRWxlbWVudC5nZXROZXh0U2libGluZygpOwotICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiAoRWxlbWVudClub2RlOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGdldEZpcnN0Q2hpbGRFbGVtZW50KEVsZW1lbnQgYW5FbGVtZW50KQotICB7Ci0gICAgTm9kZSBub2RlID0gYW5FbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgICByZXR1cm4gKEVsZW1lbnQpbm9kZTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBnZXRMYXN0Q2hpbGRFbGVtZW50KEVsZW1lbnQgYW5FbGVtZW50KQotICB7Ci0gICAgTm9kZSBub2RlID0gYW5FbGVtZW50LmdldExhc3RDaGlsZCgpOwotICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIG5vZGUgPSBub2RlLmdldFByZXZpb3VzU2libGluZygpOwotICAgIH0KLSAgICByZXR1cm4gKEVsZW1lbnQpbm9kZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDg1Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQS53c2RsIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL0EiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAibWVzc2FnZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5NZXNzYWdlIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwobWVzc2FnZSk7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydCltZXNzYWdlLmdldFBhcnQoInBhcmFtZXRlcnMiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0Tm90TnVsbChwYXJ0KTsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWZpbml0aW9uID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgYXNzZXJ0Tm90TnVsbCh0eXBlRGVmaW5pdGlvbik7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gdHlwZURlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9CIiwgbmFtZXNwYWNlKTsKLSAgICAgIGFzc2VydEVxdWFscygiQlR5cGUiLCB0eXBlRGVmaW5pdGlvbi5nZXROYW1lKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9ICAgICAgCi0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xOTQwOTYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQcm9wYWdhdGVzVGFyZ2V0TmFtZXNwYWNlQ2hhbmdlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL1RhcmdldE5hbWVzcGFjZS9UYXJnZXROYW1lc3BhY2Uud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIFN0cmluZyBvbGRUYXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUob2xkVGFyZ2V0TmFtZXNwYWNlLCAiTmV3T3BlcmF0aW9uUmVxdWVzdCIpOwotICAgICAgamF2YXgud3NkbC5NZXNzYWdlIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwobWVzc2FnZSk7Ci0KLSAgICAgIFFOYW1lIHBvcnRUeXBlUU5hbWUgPSBuZXcgUU5hbWUob2xkVGFyZ2V0TmFtZXNwYWNlLCAiVGFyZ2V0TmFtZXNwYWNlIik7Ci0gICAgICBqYXZheC53c2RsLlBvcnRUeXBlIHBvcnRUeXBlID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZShwb3J0VHlwZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwocG9ydFR5cGUpOwotICAgICAgCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUob2xkVGFyZ2V0TmFtZXNwYWNlLCAiVGFyZ2V0TmFtZXNwYWNlU09BUCIpOwotICAgICAgamF2YXgud3NkbC5CaW5kaW5nIGJpbmRpbmcgPSBkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoYmluZGluZyk7Ci0KLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShvbGRUYXJnZXROYW1lc3BhY2UsICJUYXJnZXROYW1lc3BhY2UiKTsKLSAgICAgIGphdmF4LndzZGwuU2VydmljZSBzZXJ2aWNlID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHNlcnZpY2UpOwotCi0gICAgICBTdHJpbmcgbmV3VGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3VGFyZ2V0TmFtZXNwYWNlLyI7IAotICAgICAgZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UobmV3VGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICAgIEF0dHIgdGFyZ2V0TmFtZXNwYWNlTm9kZSA9IGRlZmluaXRpb25FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoV1NETENvbnN0YW50cy5UQVJHRVROQU1FU1BBQ0VfQVRUUklCVVRFKTsKLSAgICAgIGFzc2VydE5vdE51bGwodGFyZ2V0TmFtZXNwYWNlTm9kZSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobmV3VGFyZ2V0TmFtZXNwYWNlLCB0YXJnZXROYW1lc3BhY2VOb2RlLmdldFZhbHVlKCkpOwotICAgICAgCi0gICAgICBtZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUobmV3VGFyZ2V0TmFtZXNwYWNlLCBtZXNzYWdlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgbWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChtZXNzYWdlKTsKLSAgICAgCi0gICAgICBwb3J0VHlwZVFOYW1lID0gbmV3IFFOYW1lKG5ld1RhcmdldE5hbWVzcGFjZSwgcG9ydFR5cGVRTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBwb3J0VHlwZSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHBvcnRUeXBlKTsKLQotICAgICAgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKG5ld1RhcmdldE5hbWVzcGFjZSwgYmluZGluZ1FOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgIGJpbmRpbmcgPSBkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoYmluZGluZyk7Ci0KLSAgICAgIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShuZXdUYXJnZXROYW1lc3BhY2UsIHNlcnZpY2VRTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBzZXJ2aWNlID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHNlcnZpY2UpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9ICAgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9JbmxpbmVTY2hlbWFUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvSW5saW5lU2NoZW1hVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTdmNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9JbmxpbmVTY2hlbWFUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwdWJsaWMgSW5saW5lU2NoZW1hVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBJbmxpbmVTY2hlbWFUZXN0KCJJbmxpbmVTY2hlbWEiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RJbmxpbmVTY2hlbWEoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBJbmxpbmVTY2hlbWFUZXN0KCJJbmxpbmVTY2hlbWFXaXRoV1NETDRKIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SW5saW5lU2NoZW1hV2l0aFdTREw0SigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVTY2hlbWEoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIHRyYXZlcnNlRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVTY2hlbWFXaXRoV1NETDRKKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGxvYWREZWZpbml0aW9uRm9yV1NETDRKKCJzYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gICAgICB0cmF2ZXJzZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZURlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXIgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSW1wb3J0IG15SW1wb3J0ID0gKEltcG9ydClpdGVyLm5leHQoKTsKLSAgICAgIHRyYXZlcnNlSW1wb3J0KG15SW1wb3J0KTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgSW5saW5lIFNjaGVtYQotICAgIFR5cGVzIHR5cGVzID0gKG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzKWRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiPHR5cGVzPiBpcyBudWxsIiwgdHlwZXMpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0U2NoZW1hcygpLml0ZXJhdG9yKCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHR5cGVzPiBkb2VzIG5vdCBoYXZlIGlubGluZSA8c2NoZW1hPnMiLCBpdGVyYXRvci5oYXNOZXh0KCkpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICB0cmF2ZXJzZVNjaGVtYShzY2hlbWEpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZUltcG9ydChJbXBvcnQgbXlJbXBvcnQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG15SW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0gICAgLy8gICAgdHJhdmVyc2VEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlU2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBudWxsOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCJObyA8ZWxlbWVudD5zIGFyZSBmb3VuZCIsIGl0ZXJhdG9yLmhhc05leHQoKSk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBlbGVtZW50RGVjbCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24paXRlcmF0b3IubmV4dCgpOwotCi0gICAgICBpZiAoZWxlbWVudERlY2wuZ2V0TmFtZSgpLmVxdWFscygiTmV3T3BlcmF0aW9uUmVzcG9uc2UiKSkKLSAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbChlbGVtZW50RGVjbCk7Ci0gICAgICBlbHNlIGlmIChlbGVtZW50RGVjbC5nZXROYW1lKCkuZXF1YWxzKCJOZXdPcGVyYXRpb25SZXF1ZXN0IikpCi0gICAgICAgIHRyYXZlcnNlRWxlbWVudERlY2woZWxlbWVudERlY2wpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZUVsZW1lbnREZWNsKFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSBlbGVtZW50RGVjbC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCI8ZWxlbWVudD4gZG9lcyBub3QgaGF2ZSA8c2ltcGxlVHlwZT4iLCB0eXBlIGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pOwotICAgIGlmICh0eXBlLmdldENvbXBsZXhUeXBlKCkgPT0gbnVsbCkgLy8gc2ltcGxlIHR5cGUKLSAgICAgIHJldHVybjsgLy8gVEJEIC0gQ3VycmVudGx5IHRoaXMgYWx3YXlzIHJldHVybnMgYXQgdGhpcyBwb2ludC4KLSAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgY29udGVudCA9IHR5cGUuZ2V0Q29tcGxleFR5cGUoKS5nZXRDb250ZW50KCk7Ci0gICAgdHJhdmVyc2VNb2RlbEdyb3VwKChYU0RNb2RlbEdyb3VwKWNvbnRlbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlTW9kZWxHcm91cChYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXApCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOwotICAgIFhTRFBhcnRpY2xlQ29udGVudCBwYXJ0aWNsZUNvbnRlbnQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgcGFydGljbGVDb250ZW50ID0gKChYU0RQYXJ0aWNsZSlpdGVyYXRvci5uZXh0KCkpLmdldENvbnRlbnQoKTsKLSAgICAgIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGlmICgoKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpLmlzRWxlbWVudERlY2xhcmF0aW9uUmVmZXJlbmNlKCkpCi0gICAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbCgoKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpLmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbCgoWFNERWxlbWVudERlY2xhcmF0aW9uKXBhcnRpY2xlQ29udGVudCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGxvYWREZWZpbml0aW9uRm9yV1NETDRKKFN0cmluZyB3c2RsRmlsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgV1NETFJlYWRlciByZWFkZXIgPSAobmV3IFdTRExGYWN0b3J5SW1wbCgpKS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgU3RyaW5nIHMgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIHdzZGxGaWxlOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKXJlYWRlci5yZWFkV1NETChzLCBuZXcgSW5wdXRTb3VyY2UobmV3IEZpbGVJbnB1dFN0cmVhbShzKSkpOwotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMjdkZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvYWRBbmRTZXJpYWxpemF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuWE1MRGlmZjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBWZWN0b3Igd3NkbEZpbGVzID0gbmV3IFZlY3RvcigpOwotCi0gIHN0YXRpYyBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGVzIGEgc3RhbmQtYWxvbmUgdGVzdC4KLSAgICogQHBhcmFtIG9iamVjdHMgYW4gYXJyYXkgb2YgU3RyaW5ncyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAqIEBzZWUgI3J1bgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgc3VpdGUuYWRkVGVzdChuZXcgTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0KCJMb2FkQW5kU3RvcmUiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RMb2FkQW5kU3RvcmUoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgc3VpdGUuYWRkVGVzdCAvLyB3dHAgYnVnIDc5MzI2Ci0gICAgKG5ldyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QoIkNvbXBhcmUiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb21wYXJlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBMb2FkIGZyb20gdGhlIFdTREwgZGVmaW5pdGlvbnMgZmlsZSBhbmQgc3RvcmUgYmFjayB0byBhIGRpZmZlcmVudCBmaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvYWRBbmRTdG9yZSgpCi0gIHsKLSAgICBTdHJpbmcgVEVTVF9EQVRBX0RJUiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidGVzdERhdGFEaXIiKTsKLSAgICAvL0Fzc2VydC5hc3NlcnROb3ROdWxsKHRlc3REYXRhRGlyKTsKLSAgICBGaWxlIGRpciA9IG51bGw7Ci0gICAgaWYgKFRFU1RfREFUQV9ESVIgIT0gbnVsbCkKLSAgICAgIGRpciA9IG5ldyBGaWxlKFRFU1RfREFUQV9ESVIpOwotICAgIGVsc2UKLSAgICAgIC8vIEtCOiBpZiB5b3UgYXJlIGhlcmUsIGZpeCB0ZXh0LnhtbAotICAgICAgZGlyID0gbmV3IEZpbGUoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlIik7IC8vIGZhbGxiYWNrCi0KLSAgICBpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIGxpc3REYXRhRmlsZXMoZGlyKTsKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEZpbGUgbXlGaWxlID0gbnVsbDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsRmlsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBteUZpbGUgPSAoRmlsZSl3c2RsRmlsZXMuZWxlbWVudEF0KGkpOwotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihteUZpbGUudG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgICAgICBsb2FkKG15RmlsZS50b1N0cmluZygpKTsKLSAgICAgICAgICBwcmludChteUZpbGUudG9TdHJpbmcoKSArICIub3V0Iik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgbGlzdERhdGFGaWxlcyhGaWxlIHNyYykKLSAgewotICAgIGlmICghc3JjLmlzRGlyZWN0b3J5KCkpCi0gICAgICByZXR1cm47IC8vIEFzc2VydGlvbiBmYWlsZWQKLQotICAgIGZpbHRlcldTRExGaWxlcyhzcmMpOyAvLyBBZGQgV1NETCBmaWxlcyBpbiB0aGUgc3JjIGRpcmVjdG9yeQotCi0gICAgRmlsZVtdIGNoaWxkcmVuID0gc3JjLmxpc3RGaWxlcygpOwotICAgIEZpbGUgbXlGaWxlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgbXlGaWxlID0gY2hpbGRyZW5baV07Ci0gICAgICBpZiAobXlGaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgICB7Ci0gICAgICAgIGlmICgiQ1ZTIi5lcXVhbHMobXlGaWxlLmdldE5hbWUoKSkpCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbGlzdERhdGFGaWxlcyhteUZpbGUpOyAvLyBWaXNpdCBzdWItZGlyZWN0b3JpZXMgcmVjdXJzaXZlbHkKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZmlsdGVyV1NETEZpbGVzKEZpbGUgZGlyKQotICB7Ci0gICAgRmlsZVtdIHdzZGxzID0gZGlyLmxpc3RGaWxlcyhuZXcgRmlsZUZpbHRlcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHBhdGhuYW1lLmdldE5hbWUoKS5lbmRzV2l0aCgiLndzZGwiKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxzLmxlbmd0aDsgaisrKQotICAgIHsKLSAgICAgIHdzZGxGaWxlcy5hZGQod3NkbHNbal0pOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIExvYWQgZnJvbSB0aGUgV1NETCBkZWZpbml0aW9ucyBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGxvYWQoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChmaWxlbmFtZSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLQotICAgICAgV1NETFJlc291cmNlSW1wbCB3c2RsUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClkZWZpbml0aW9uLmVSZXNvdXJjZSgpOwotICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwod3NkbFJlc291cmNlKTsKLQotICAgICAgRWxlbWVudCBlbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLSAgICAgIFdTRExSZXNvdXJjZUltcGwuc2VyaWFsaXplKFN5c3RlbS5vdXQsIGVsZW1lbnQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogU3RvcmUgdGhlIFdTREwgZGVmaW5pdGlvbnMgdG8gYSBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByaW50KFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgYXNzb2NpYXRlZCBET00gZWxlbWVudCwgY3JlYXRlcyBhIG5ldyBhc3NvY2lhdGVkIERPTSBlbGVtZW50LCBhbmQgdGhlbiBwcmludHMgaXQuCi0gICAgICAvLyBUaGlzIGlzIGEgZ29vZCB0ZXN0IGZvciBob3cgd2VsbCBzZXJpYWxpemF0aW9uIHdvcmtzIGZvciBhIG1vZGVsIGNyZWF0ZWQgImJvdHRvbSB1cCIuCi0gICAgICAvLwotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudChudWxsKTsKLSAgICAgIGRlZmluaXRpb24uc2V0RWxlbWVudChudWxsKTsKLSAgICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikudXBkYXRlRWxlbWVudCgpOwotCi0gICAgICBEZWZpbml0aW9uTG9hZGVyLnN0b3JlKGRlZmluaXRpb24sIGZpbGVuYW1lKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb21wYXJlIHRoZSBvdXRwdXQgV1NETCBmaWxlIHRvIHRoZSBvcmlnaW5hbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb21wYXJlKCkKLSAgewotICAgIFhNTERpZmYgeG1sZGlmZiA9IG5ldyBYTUxEaWZmKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBteUZpbGUgPSBudWxsOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsRmlsZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG15RmlsZSA9IChGaWxlKXdzZGxGaWxlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHhtbGRpZmYuZGlmZihteUZpbGUudG9TdHJpbmcoKSwgbXlGaWxlLnRvU3RyaW5nKCkgKyAiLm91dCIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvY2F0aW9uVHJhY2tpbmdUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9jYXRpb25UcmFja2luZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UyNDBiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9jYXRpb25UcmFja2luZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogVGVzdCBjbGFzcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBXU0RMIG1vZGVsIHNvdXJjZSBsb2NhdGlvbiB0cmFja2luZwotICogbWVjaGFuaXNtLgotICovCi1wdWJsaWMgY2xhc3MgTG9jYXRpb25UcmFja2luZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgc3VpdGUuYWRkVGVzdChuZXcgTG9jYXRpb25UcmFja2luZ1Rlc3QoKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RUcmFja3NMb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhlIGxvY2F0aW9uIHRyYWNraW5nIG1lY2hhbmlzbSBwcm92aWRlZCBieSB0aGUgV1NETCBtb2RlbCByZXNvdXJjZQotICAgKiBsb2FkZXIuCi0gICAqIAotICAgKiBAc2VlIFdTRExSZXNvdXJjZUltcGwKLSAgICogQHNlZSBXU0RMUGFyc2VyCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VHJhY2tzTG9jYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIGZpbGVOYW1lID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArICIvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChmaWxlTmFtZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLQotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKGRlZmluaXRpb25FbGVtZW50KSk7Ci0KLSAgICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICAgIEVsZW1lbnQgdHlwZXNFbGVtZW50ID0gdHlwZXMuZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDQsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKHR5cGVzRWxlbWVudCkpOwotCi0gICAgICBMaXN0IHR5cGVzRXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgICBhc3NlcnRFcXVhbHMoMSwgdHlwZXNFeHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLQotICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hRXh0ZW5zaW9uID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KXR5cGVzRXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IHNjaGVtYUV4dGVuc2lvbi5nZXRTY2hlbWEoKTsKLQotICAgICAgRWxlbWVudCBzY2hlbWFFbGVtZW50ID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKDUsIFhTRFBhcnNlci5nZXRTdGFydExpbmUoc2NoZW1hRWxlbWVudCkpOwotCi0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVxdWVzdEVsZW1lbnREZWNsYXJhdGlvbiA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKCJOZXdPcGVyYXRpb25SZXF1ZXN0Iik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgRWxlbWVudCByZXF1ZXN0RWxlbWVudCA9IHJlcXVlc3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0RWxlbWVudCgpOwotCi0gICAgICBhc3NlcnRFcXVhbHMoNywgWFNEUGFyc2VyLmdldFN0YXJ0TGluZShyZXF1ZXN0RWxlbWVudCkpOwotCi0gICAgICBMaXN0IHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzZXJ2aWNlcy5zaXplKCkpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZXMuZ2V0KDApOwotCi0gICAgICBFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gc2VydmljZS5nZXRFbGVtZW50KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoNDIsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKHNlcnZpY2VFbGVtZW50KSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9NeVJlc29sdmVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTXlSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTk3NGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9NeVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotCi1wdWJsaWMgY2xhc3MgTXlSZXNvbHZlciBpbXBsZW1lbnRzIEVudGl0eVJlc29sdmVyCi17Ci0gIHB1YmxpYyBJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgaWYgKHN5c3RlbUlkLmVxdWFscygiaHR0cDovL3d3dy5teWhvc3QuY29tL3RvZGF5IikpCi0gICAgewotICAgICAgLy8gcmV0dXJuIGEgc3BlY2lhbCBpbnB1dCBzb3VyY2UKLSAgICAgIC8vTXlSZWFkZXIgcmVhZGVyID0gbmV3IE15UmVhZGVyKCk7Ci0gICAgICAvL3JldHVybiBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLSAgICAgIHJldHVybiBuZXcgSW5wdXRTb3VyY2Uoc3lzdGVtSWQpOyAvLyBUQkQKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1BhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9QYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2N2Y4NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1BhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLQotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0KLSAgcHVibGljIFBhcnNlclRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBQYXJzZXJUZXN0KCJQYXJzZXIiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RQYXJzZXIoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VyKCkKLSAgewotICAgIEVudGl0eVJlc29sdmVyIG15UmVzb2x2ZXIgPSBuZXcgTXlSZXNvbHZlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSgiLi9zYW1wbGVzL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyIG15QnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgIG15QnVpbGRlci5zZXRFbnRpdHlSZXNvbHZlcihteVJlc29sdmVyKTsKLSAgICAgIERvY3VtZW50IGRvYyA9IG15QnVpbGRlci5wYXJzZShpcyk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRG9jdW1lbnQgaXMgbnVsbCIsIGRvYyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1JlZmFjdG9yaW5nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1JlZmFjdG9yaW5nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTc5NDFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9SZWZhY3RvcmluZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLQotCi1wdWJsaWMgY2xhc3MgUmVmYWN0b3JpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHVibGljIFJlZmFjdG9yaW5nVGVzdCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBSZWZhY3RvcmluZ1Rlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3QoIlJlZmFjdG9yaW5nIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmVmYWN0b3JpbmcoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVmYWN0b3JpbmcoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0LCBtb2RpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgV1NETCBmaWxlCi0gICAgICBnZW5lcmF0ZVdTREwoV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArInNhbXBsZXMvZ2VuZXJhdGVkL1JlZmFjdG9yaW5nVGVzdC53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBkZWZlY3QgNjU5NAotICBwdWJsaWMgdm9pZCByZW5hbWVPcGVyYXRpb24oT3BlcmF0aW9uIG9wKQotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcC5nZXRFSW5wdXQoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChpbnB1dCk7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChtZXNzYWdlKTsKLQotICAgIG9wLnNldE5hbWUoIlJlbmFtZWQiICsgb3AuZ2V0TmFtZSgpKTsKLSAgICBRTmFtZSBuZXdRTmFtZSA9IG5ldyBRTmFtZShtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksICJSZW5hbWVkIiArIG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgbWVzc2FnZS5zZXRRTmFtZShuZXdRTmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVdTREwoU3RyaW5nIG91dHB1dEZpbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZUZpbGVVUkkob3V0cHV0RmlsZSkpOwotICAgIHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLmFkZChyZXNvdXJjZSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBEZWZpbml0aW9uIC0gVGVtcGVyYXR1cmUKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCAiVGVtcGVyYXR1cmUiKSk7Ci0gICAgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBUYXJnZXQgbmFtZXNwYWNlIC0gaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20KLSAgICBkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSgiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20iKTsKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgidG5zIiwgImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tIik7Ci0KLSAgICAvLyBPdGhlciBuYW1lc3BhY2VzIC0gd3NkbCwgc29hcCwgeHNkCi0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoIndzZGwiLCBXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInhzZCIsIFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJzb2FwIiwgU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOwotCi0gICAgLy8KLSAgICAvLyBMZXQncyBzdGFydCBidWlsZGluZyB0d28gbWVzc2FnZXMKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFppcENvZGUKLSAgICBQYXJ0IHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiWmlwQ29kZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBpbnB1dE1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZUlucHV0IikpOwotICAgIGlucHV0TWVzc2FnZS5hZGRQYXJ0KHBhcnQpOwotICAgIGRlZmluaXRpb24uYWRkTWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFRlbXBlcmF0dXJlCi0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJUZW1wZXJhdHVyZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgb3V0cHV0TWVzc2FnZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlT3V0cHV0IikpOwotICAgIG91dHB1dE1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Ci0KLSAgICAvLwotICAgIC8vIE5leHQsIGJ1aWxkIGEgUG9ydFR5cGUKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0IC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIElucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQuc2V0TWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE91dHB1dCAtIEdldFRlbXBlcmF0dXJlT3V0cHV0Ci0gICAgT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQuc2V0TWVzc2FnZShvdXRwdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPcGVyYXRpb24gLSBHZXRUZW1wZXJhdHVyZUZvclppcENvZGUKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbi5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUZvclppcENvZGUiKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoaW5wdXQpOwotICAgIG9wZXJhdGlvbi5zZXRPdXRwdXQob3V0cHV0KTsKLQotICAgIC8vIENyZWF0ZSBhIFBvcnRUeXBlCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBwb3J0VHlwZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlSW5mb1NPQVAiKSk7Ci0gICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0KLSAgICAvLwotICAgIC8vIENyZWF0ZSB0aGUgc2Vjb25kIHNldCBvcCBPcGVyYXRpb25zCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhIFBhcnQKLSAgICBwYXJ0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhcnQoKTsKLSAgICBwYXJ0LnNldE5hbWUoIlBhcnQyIik7Ci0gICAgcGFydC5zZXRUeXBlTmFtZShuZXcgUU5hbWUoV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSwgInN0cmluZyIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UKLSAgICBNZXNzYWdlIGlucHV0TWVzc2FnZTIgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIGlucHV0TWVzc2FnZTIuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJJbnB1dE1lc3NhZ2UyIikpOwotICAgIGlucHV0TWVzc2FnZTIuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2UoaW5wdXRNZXNzYWdlMik7Ci0KLSAgICAvLyBDcmVhdGUgYSBQYXJ0Ci0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJQYXJ0MyIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZTIgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIG91dHB1dE1lc3NhZ2UyLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiT3V0cHV0TWVzc2FnZTIiKSk7Ci0gICAgb3V0cHV0TWVzc2FnZTIuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZTIpOwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0Ci0gICAgSW5wdXQgaW5wdXQyID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQyLnNldE1lc3NhZ2UoaW5wdXRNZXNzYWdlMik7Ci0KLSAgICAvLyBDcmVhdGUgYW4gT3V0cHV0IC0gR2V0VGVtcGVyYXR1cmVPdXRwdXQKLSAgICBPdXRwdXQgb3V0cHV0MiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQyLnNldE1lc3NhZ2Uob3V0cHV0TWVzc2FnZTIpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE9wZXJhdGlvbiAtIEdldFRlbXBlcmF0dXJlRm9yWmlwQ29kZQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24yID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbjIuc2V0TmFtZSgiT3BlcmF0aW9uMiIpOwotICAgIG9wZXJhdGlvbjIuc2V0SW5wdXQoaW5wdXQyKTsKLSAgICBvcGVyYXRpb24yLnNldE91dHB1dChvdXRwdXQyKTsKLQotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24yKTsKLQotICAgIHJlbmFtZU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgIHJlbmFtZU9wZXJhdGlvbihvcGVyYXRpb24yKTsKLQotICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9TZW1hbnRpY1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9TZW1hbnRpY1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWM3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvU2VtYW50aWNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0ODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgU2VtYW50aWNUZXN0IGV4dGVuZHMgRGVmaW5pdGlvblZpc2l0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIC8vIEFkZGVkIGZvciBKVW5pdAotICBwdWJsaWMgU2VtYW50aWNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBTZW1hbnRpY1Rlc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc3VwZXIoZGVmaW5pdGlvbik7Ci0gIH0KLQotICAvKiAgCi0gICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICAgewotICAgU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jKTsKLSAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLSAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCJ5ZXMiKTsKLSAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIlVURi04Iik7Ci0gICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCI0Iik7Ci0gICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oZG9tU291cmNlLG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpKSk7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBjcmVhdGVEb2N1bWVudCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gICB7Ci0gICBkb2MgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCkubmV3RG9jdW1lbnQoKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBFbGVtZW50IGNyZWF0ZVdTRExFbGVtZW50KFN0cmluZyBuYW1lKQotICAgewotICAgRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsIixuYW1lKTsKLSAgIGlmICh3c2RsTmFtZXNwYWNlUHJlZml4ICE9IG51bGwpCi0gICBlbGVtZW50LnNldFByZWZpeCh3c2RsTmFtZXNwYWNlUHJlZml4KTsKLSAgIAotICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICB9Ci0gICAqLwotICBwcml2YXRlIHZvaWQgdmlzaXREb2N1bWVudGF0aW9uKEVsZW1lbnQgZG9jRWxlbWVudCkKLSAgewotICAgIGlmIChkb2NFbGVtZW50ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgcHJpbnRsbigiZG9jdW1lbnRhdGlvbjogIiArIGRvY0VsZW1lbnQpOyAvLyBUQkQgLSBzZXJpYWxpemUgZG9jRWxlbWVudAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByaW50bG4oU3RyaW5nIHMpCi0gIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBkZWZpbml0aW9ucy4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBRTmFtZSBxbmFtZSA9IGRlZi5nZXRRTmFtZSgpOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIHFuYW1lLmdldExvY2FsUGFydCgpKTsKLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigidGFyZ2V0TmFtZXNwYWNlOiAiICsgdGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBwcmVmaXggPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgIHByaW50bG4oIm5hbWVzcGFjZSBwcmVmaXg6ICIgKyBwcmVmaXggKyAiLCBuYW1lc3BhY2UgVVJJOiAiICsgbmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgc3VwZXIudmlzaXREZWZpbml0aW9uKGRlZik7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBkZWZpbml0aW9ucy4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBpbXBvcnQuLi4iKTsKLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgPGltcG9ydD4gYSBzY2hlbWEuCi0gICAgaWYgKGltcG9ydGluZ1NjaGVtYSh3c2RsSW1wb3J0KSkKLSAgICB7Ci0gICAgICBwcmludGxuKCI8aW1wb3J0PmluZyBYTUwgU2NoZW1hIik7Ci0KLSAgICAgIC8vICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2Zvby5jb20iIHNjaGVtYUxvY2F0aW9uPSAiYmFyLnhzZCIvPgotICAgICAgcHJpbnRsbigibmFtZXNwYWNlOiAiICsgd3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBwcmludGxuKCJzY2hlbWFMb2NhdGlvbjogIiArIHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICB2aXNpdERvY3VtZW50YXRpb24od3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByaW50bG4oIjxpbXBvcnQ+aW5nIFdTREwiKTsKLSAgICAgIHZpc2l0RG9jdW1lbnRhdGlvbih3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIH0KLSAgICBwcmludGxuKCJMZWF2aW5nIGltcG9ydC4uLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGltcG9ydGluZ1NjaGVtYShJbXBvcnQgbXlJbXBvcnQpCi0gIHsKLSAgICBpZiAobXlJbXBvcnQuZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpIC8vIGl0IGlzIFdTREwgaW1wb3J0Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdFR5cGVzKG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRUeXBlcyhUeXBlcyB0eXBlcykKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIHR5cGVzLi4uIik7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldFNjaGVtYXMoKS5pdGVyYXRvcigpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgc2NoZW1hID0gKFhTRFNjaGVtYSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBwcmludGxuKCJpbi1saW5lIHNjaGVtYTogIiArIHNjaGVtYSk7Ci0gICAgfQotICAgIHByaW50bG4oIkxlYXZpbmcgdHlwZXMuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0UGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIHBhcnQuLi4iKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBwb3J0VHlwZS4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihwb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFFOYW1lIHFuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKTsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICBzdXBlci52aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIHBvcnRUeXBlLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgb3BlcmF0aW9uLi4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBuYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIG5hbWUpOwotCi0gICAgT3BlcmF0aW9uVHlwZSBvcFR5cGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIGRldGVybWluaW5nIE9wZXJhdGlvbiBUeXBlIiwgb3BUeXBlKTsKLQotICAgIGlmIChPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZTogIiArICJpbi1vdXQiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAib3V0LWluIik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT04gPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAib3V0LW9ubHkiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk9ORV9XQVkgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAiaW4tb25seSIpOwotCi0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIG9wZXJhdGlvbi4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbnB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0SW5wdXQoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBpbnB1dC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBuYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgbmFtZSk7Ci0KLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpbnB1dC5nZXRFTWVzc2FnZSgpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbWVzc2FnZSIsIG1lc3NhZ2UpOwotCi0gICAgcHJpbnRsbigiTGVhdmluZyBpbnB1dC4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIG91dHB1dC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihvdXRwdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG91dHB1dC5nZXROYW1lKCk7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBuYW1lKTsKLQotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbWVzc2FnZSIsIG1lc3NhZ2UpOwotCi0gICAgcHJpbnRsbigiTGVhdmluZyBvdXRwdXQuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0RmF1bHQob3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEZhdWx0KEZhdWx0IGZhdWx0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgZmF1bHQuLi4iKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGZhdWx0Li4uIik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEJpbmRpbmcob3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZykKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBiaW5kaW5nLi4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBRTmFtZSBxbmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKTsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIkZhaWxlZCB0byByZXNvbHZlIHRoZSBwb3J0VHlwZSIsIHBvcnRUeXBlKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBCb2R5PiBpcyBtaXNzaW5nIiwgc29hcEJvZHlWaXNpdGVkKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBCaW5kaW5nPiBpcyBtaXNzaW5nIiwgc29hcEJpbmRpbmdWaXNpdGVkKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBPcGVyYXRpb24+IGlzIG1pc3NpbmciLCBzb2FwT3BlcmF0aW9uVmlzaXRlZCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgYmluZGluZyBvcGVyYXRpb24uLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIHRvIHJlc29sdmUgdGhlIG9wZXJhdGlvbiIsIG9wZXJhdGlvbik7Ci0KLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotICAgICAgcHJpbnRsbigibmFtZTogIiArIG9wZXJhdGlvbk5hbWUpOwotICAgIH0KLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGJpbmRpbmcgb3BlcmF0aW9uLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBiaW5kaW5nIGlucHV0Li4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgU3RyaW5nIGlucHV0TmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICBpZiAoaW5wdXROYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgaW5wdXROYW1lKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGJpbmRpbmcgaW5wdXQuLi4iKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGJpbmRpbmcgb3V0cHV0Li4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBvdXRwdXROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLSAgICBpZiAob3V0cHV0TmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIG91dHB1dE5hbWUpOwotCi0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3V0cHV0KG91dHB1dCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nIG91dHB1dC4uLiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgYmluZGluZyBmYXVsdC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihmYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIEVsZW1lbnQgZmF1bHRFbGVtZW50ID0gZmF1bHQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgaWYgKGZhdWx0TmFtZSAhPSBudWxsKQotICAgICAgZmF1bHRFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIGZhdWx0TmFtZSk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmdGYXVsdChmYXVsdCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nIGZhdWx0Li4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgc2VydmljZS4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihzZXJ2aWNlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgUU5hbWUgcW5hbWUgPSBzZXJ2aWNlLmdldFFOYW1lKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIlZhbGlkYXRpb24gRXJyb3I6IHNlcnZpY2UgaXMgbWlzc2luZyB0aGUgbmFtZSBhdHRyaWJ1dGUiLCBxbmFtZSk7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgc3VwZXIudmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHByaW50bG4oIkxlYXZpbmcgc2VydmljZS4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRQb3J0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgcG9ydC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgU3RyaW5nIG5hbWUgPSBwb3J0LmdldE5hbWUoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiVmFsaWRhdGlvbiBFcnJvcjogcG9ydCBpcyBtaXNzaW5nIHRoZSBuYW1lIGF0dHJpYnV0ZSIsIHBvcnQpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgcG9ydC5nZXROYW1lKCkpOwotCi0gICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgYmluZGluZyIsIGJpbmRpbmcpOwotCi0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCI8c29hcEFkZHJlc3M+IGlzIG1pc3NpbmciLCBzb2FwQWRkcmVzc1Zpc2l0ZWQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgcG9ydC4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCwgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2libGVFbGVtZW50IG93bmVyLCBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudC4uLiIpOwotICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgdmlzaXRTT0FQQm9keSgoU09BUEJvZHkpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICB2aXNpdFNPQVBCaW5kaW5nKChTT0FQQmluZGluZylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgIHZpc2l0U09BUEFkZHJlc3MoKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICB2aXNpdFNPQVBPcGVyYXRpb24oKFNPQVBPcGVyYXRpb24pZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50Li4uIik7Ci0gIH0KLQotICAvL05lZWRzIHRvIGltcHJvdmUgdGhpcyBwYXJ0Ci0gIHByaXZhdGUgYm9vbGVhbiBzb2FwT3BlcmF0aW9uVmlzaXRlZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgc29hcE9wZXJhdGlvblZpc2l0ZWQgPSB0cnVlOwotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBPcGVyYXRpb24uLi4iKTsKLSAgICBwcmludGxuKCJzb2FwQWN0aW9uOiAiICsgc29hcE9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUE9wZXJhdGlvbi4uLiIpOwotICB9Ci0KLSAgLy9OZWVkcyB0byBpbXByb3ZlIHRoaXMgcGFydAotICBwcml2YXRlIGJvb2xlYW4gc29hcEJvZHlWaXNpdGVkID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEJvZHkoU09BUEJvZHkgc29hcEJvZHkpCi0gIHsKLSAgICBzb2FwQm9keVZpc2l0ZWQgPSB0cnVlOwotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBCb2R5Li4uIik7Ci0gICAgcHJpbnRsbigidXNlOiAiICsgc29hcEJvZHkuZ2V0VXNlKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJvZHkuLi4iKTsKLSAgfQotCi0gIC8vTmVlZHMgdG8gaW1wcm92ZSB0aGlzIHBhcnQKLSAgcHJpdmF0ZSBib29sZWFuIHNvYXBCaW5kaW5nVmlzaXRlZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nKQotICB7Ci0gICAgc29hcEJpbmRpbmdWaXNpdGVkID0gdHJ1ZTsKLSAgICBwcmludGxuKCJWaXNpdGluZyBTT0FQQmluZGluZy4uLiIpOwotICAgIHByaW50bG4oInN0eWxlOiAiICsgc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSk7Ci0gICAgcHJpbnRsbigidHJhbnNwb3J0OiAiICsgc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJpbmRpbmcuLi4iKTsKLSAgfQotCi0gIC8vIE5lZWRzIHRvIGltcHJvdmUgdGhpcyBwYXJ0Ci0gIHByaXZhdGUgYm9vbGVhbiBzb2FwQWRkcmVzc1Zpc2l0ZWQgPSBmYWxzZTsKLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIHNvYXBBZGRyZXNzVmlzaXRlZCA9IHRydWU7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUEFkZHJlc3MuLi4iKTsKLSAgICBwcmludGxuKCJsb2NhdGlvbjogIiArIHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEFkZHJlc3MuLi4iKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBTZW1hbnRpY1Rlc3QoIk1vZGVsU2VtYW50aWNUZXN0IikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0TW9kZWxTZW1hbnRpYygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TW9kZWxTZW1hbnRpYygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsIiwgdHJ1ZSk7Ci0gICAgICBTZW1hbnRpY1Rlc3QgdGVzdCA9IG5ldyBTZW1hbnRpY1Rlc3QoZGVmKTsKLSAgICAgIHRlc3QudmlzaXQoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1V0aWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvVXRpbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3ODQ1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvVXRpbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBVdGlsVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwdWJsaWMgVXRpbFRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgVXRpbFRlc3QoIldTRExDb25zdGFudHMiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb25zdGFudHMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBVdGlsVGVzdCgiV1NETFJlc291cmNlRmFjdG9yeUltcGwiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFV0aWxUZXN0KCJXU0RMUmVzb3VyY2VJbXBsIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0V1NETFJlc291cmNlSW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBVdGlsVGVzdCgiRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHN1aXRlLmFkZFRlc3QobmV3IFV0aWxUZXN0KCJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgc3RhdGljIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RhbnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGludCB0eXBlID0gV1NETENvbnN0YW50cy5ub2RlVHlwZShXU0RMQ29uc3RhbnRzLlBPUlRfRUxFTUVOVF9UQUcpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIk5vZGUgdHlwZSBpcyBub3QgdGhhdCBvZiBwb3J0IiwgdHlwZSA9PSAxMCk7Ci0KLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZGVmaW5pdGlvbi5lUmVzb3VyY2UoKSBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpOwotCi0gICAgICBpbnQgZGVmaW5pdGlvbk5vZGVUeXBlID0gV1NETENvbnN0YW50cy5ub2RlVHlwZShkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiTm9kZSB0eXBlIGlzIG5vdCB0aGF0IG9mIGRlZmluaXRpb24iLCBkZWZpbml0aW9uTm9kZVR5cGUgPT0gMSk7Ci0KLSAgICAgIGJvb2xlYW4gaXNXU0RMTmFtZXNwYWNlID0gV1NETENvbnN0YW50cy5pc1dTRExOYW1lc3BhY2UoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UoIlRoaXMgc2hvdWxkIG5vdCBiZSB0aGUgV1NETCBOYW1lc3BhY2UiLCBpc1dTRExOYW1lc3BhY2UpOwotCi0gICAgICBib29sZWFuIGlzTWF0Y2hpbmcgPSBXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmciLCAiaHR0cDovL3d3dy5leGFtcGxlLm9yZyIpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoImlzTWF0Y2hpbmdOYW1lc3BhY2UgaXMgaW5jb3JyZWN0IiwgaXNNYXRjaGluZyk7Ci0KLSAgICAgIFN0cmluZyBhdHRyID0gV1NETENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCksICJuYW1lIik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiZ2V0QXR0cmlidXRlIGlzIGluY29ycmVjdCIsIGF0dHIuZXF1YWxzKCJMb2FkQW5kUHJpbnRUZXN0IikpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsIGZhY3RvcnlJbXBsID0gbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCk7Ci0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IGZhY3RvcnlJbXBsLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVGaWxlVVJJKCIuL3NhbXBsZXMvY3JlYXRlUmVzb3VyY2VUZXN0LndzZGwiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiUmVzb3VyY2UgaXMgbm90IG9mIHR5cGUgV1NETFJlc291cmNlSW1wbCIsIHJlc291cmNlIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0V1NETFJlc291cmNlSW1wbCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMUmVzb3VyY2VJbXBsIHJlc291cmNlSW1wbCA9IG5ldyBXU0RMUmVzb3VyY2VJbXBsKFVSSS5jcmVhdGVGaWxlVVJJKCIuL3NhbXBsZXMvY3JlYXRlUmVzb3VyY2VUZXN0LndzZGwiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiUmVzb3VyY2UgaXMgbm90IG9mIHR5cGUgV1NETFJlc291cmNlSW1wbCIsIHJlc291cmNlSW1wbCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpOwotCi0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFdTRExSZXNvdXJjZUltcGwuc2VyaWFsaXplKFN5c3RlbS5vdXQsIGVsZW1lbnQsIG51bGwpOwotICAgICAgfQotCi0gICAgICBpZiAoZG9jdW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgV1NETFJlc291cmNlSW1wbC5zZXJpYWxpemUoU3lzdGVtLm91dCwgZG9jdW1lbnQsIG51bGwpOwotICAgICAgfQotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcmVzb3VyY2VJbXBsLmF0dGFjaGVkKGRlZmluaXRpb24pOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotCi0gICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSk7Ci0gICAgICBpZiAoZmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IGZhY3RvcnkuY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuSEVBREVSX0VMRU1FTlRfVEFHKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlByb2JsZW0gY3JlYXRpbmcgU09BUCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZSBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgVGVzdEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgewotICAgIFN0cmluZyBucywgbmFtZTsKLQotICAgIHB1YmxpYyBUZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5zLCBTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICBzdXBlcigpOwotICAgICAgdGhpcy5ucyA9IG5zOwotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShucywgbmFtZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgV1NETFRlc3RGYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0gIHsKLSAgICBwdWJsaWMgV1NETFRlc3RGYWN0b3J5KCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBUZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQobmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSBmYWN0b3J5UmVnaXN0cnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0gICAgICBmYWN0b3J5UmVnaXN0cnkucmVnaXN0ZXJGYWN0b3J5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiLCBuZXcgV1NETFRlc3RGYWN0b3J5KCkpOwotCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiKTsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gZmFjdG9yeS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIiwgIlRlc3RFbGVtZW50Iik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMS4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZSBpbnN0YW5jZW9mIFRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMi4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpLmVxdWFscygiVGVzdEVsZW1lbnQiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMy4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZS5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygKLSAgICAgICAgImh0dHA6Ly9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cyIpKTsKLQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMNEpBUElUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETDRKQVBJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRhYzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMNEpBUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuV1NETDRKRGVmaW5pdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgV1NETDRKQVBJVGVzdCBleHRlbmRzIFdTREw0SkRlZmluaXRpb25WaXNpdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5jcmVhdGVXU0RMNEpGYWN0b3J5KCk7Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIG5ld0RlZmluaXRpb247Ci0KLSAgcHJpdmF0ZSBNZXNzYWdlIGN1cnJlbnRNZXNzYWdlOwotCi0gIHByaXZhdGUgU2VydmljZSBjdXJyZW50U2VydmljZTsKLQotICBwcml2YXRlIFBvcnRUeXBlIGN1cnJlbnRQb3J0VHlwZTsKLQotICBwcml2YXRlIE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uOwotCi0gIHByaXZhdGUgQmluZGluZyBjdXJyZW50QmluZGluZzsKLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gY3VycmVudEJpbmRpbmdPcGVyYXRpb247Ci0KLSAgLy8gQWRkZWQgZm9yIEpVbml0Ci0gIHB1YmxpYyBXU0RMNEpBUElUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMNEpBUElUZXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHN1cGVyKGRlZmluaXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByaW50bG4oU3RyaW5nIHMpCi0gIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBuZXdEZWZpbml0aW9uID0gZmFjdG9yeS5uZXdEZWZpbml0aW9uKCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRRTmFtZShkZWYuZ2V0UU5hbWUoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldERvY3VtZW50QmFzZVVSSShkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWYuZ2V0TmFtZXNwYWNlcygpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgU3RyaW5nIHByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHByZWZpeCA9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgbmFtZXNwYWNlID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgbmV3RGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIHN1cGVyLnZpc2l0RGVmaW5pdGlvbihkZWYpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICBJbXBvcnQgbXlJbXBvcnQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUltcG9ydCgpOwotICAgIG5ld0RlZmluaXRpb24uYWRkSW1wb3J0KG15SW1wb3J0KTsKLQotICAgIC8vIGUuZy4gPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9mb28uY29tIiBzY2hlbWFMb2NhdGlvbj0gImJhci54c2QiLz4KLSAgICBteUltcG9ydC5zZXROYW1lc3BhY2VVUkkod3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgbXlJbXBvcnQuc2V0TG9jYXRpb25VUkkod3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICBteUltcG9ydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgbXlJbXBvcnQuc2V0RGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBUeXBlcyBteVR5cGVzID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVUeXBlcygpOwotICAgIG15VHlwZXMuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodHlwZXMuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICAvKgotICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdEVsZW1lbnQgPSBudWxsOwotICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICB7Ci0gICAgIGV4dGVuc2liaWxpdEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICBteVR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdEVsZW1lbnQpOwotICAgICB9Ki8KLSAgICBuZXdEZWZpbml0aW9uLnNldFR5cGVzKG15VHlwZXMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIFBhcnQgbXlQYXJ0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVQYXJ0KCk7Ci0gICAgbXlQYXJ0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBhcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQYXJ0LnNldE5hbWUocGFydC5nZXROYW1lKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50TmFtZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIG15UGFydC5zZXRUeXBlTmFtZShwYXJ0LmdldFR5cGVOYW1lKCkpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFFOYW1lIGtleSA9IG51bGw7Ci0gICAgUU5hbWUgdmFsdWUgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAga2V5ID0gKFFOYW1lKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZhbHVlID0gKFFOYW1lKXBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlKGtleSk7Ci0gICAgICBteVBhcnQuc2V0RXh0ZW5zaW9uQXR0cmlidXRlKGtleSwgdmFsdWUpOwotICAgIH0KLSAgICBjdXJyZW50TWVzc2FnZS5hZGRQYXJ0KG15UGFydCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgY3VycmVudE1lc3NhZ2UgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBzdXBlci52aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgY3VycmVudFBvcnRUeXBlID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVQb3J0VHlwZSgpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5zZXREb2N1bWVudGF0aW9uRWxlbWVudChwb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGUuZ2V0UU5hbWUoKSk7Ci0gICAgY3VycmVudFBvcnRUeXBlLnNldFVuZGVmaW5lZChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZFBvcnRUeXBlKGN1cnJlbnRQb3J0VHlwZSk7Ci0KLSAgICBzdXBlci52aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBjdXJyZW50T3BlcmF0aW9uID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldE5hbWUob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRTdHlsZShvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRVbmRlZmluZWQob3BlcmF0aW9uLmlzVW5kZWZpbmVkKCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0UGFyYW1ldGVyT3JkZXJpbmcob3BlcmF0aW9uLmdldFBhcmFtZXRlck9yZGVyaW5nKCkpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5hZGRPcGVyYXRpb24oY3VycmVudE9wZXJhdGlvbik7Ci0KLSAgICBzdXBlci52aXNpdE9wZXJhdGlvbihvcGVyYXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIElucHV0IG15SW5wdXQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUlucHV0KCk7Ci0gICAgbXlJbnB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUlucHV0LnNldE5hbWUoaW5wdXQuZ2V0TmFtZSgpKTsKLSAgICBteUlucHV0LnNldE1lc3NhZ2UoaW5wdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldElucHV0KG15SW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE91dHB1dCBteU91dHB1dCA9IG5ld0RlZmluaXRpb24uY3JlYXRlT3V0cHV0KCk7Ci0gICAgbXlPdXRwdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15T3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgbXlPdXRwdXQuc2V0TWVzc2FnZShvdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldE91dHB1dChteU91dHB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEZhdWx0KEZhdWx0IGZhdWx0KQotICB7Ci0gICAgRmF1bHQgbXlGYXVsdCA9IG5ld0RlZmluaXRpb24uY3JlYXRlRmF1bHQoKTsKLSAgICBteUZhdWx0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15RmF1bHQuc2V0TmFtZShmYXVsdC5nZXROYW1lKCkpOwotICAgIG15RmF1bHQuc2V0TWVzc2FnZShmYXVsdC5nZXRNZXNzYWdlKCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uYWRkRmF1bHQobXlGYXVsdCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmcgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZEJpbmRpbmcoY3VycmVudEJpbmRpbmcpOwotCi0gICAgY3VycmVudEJpbmRpbmcuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoYmluZGluZy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRRTmFtZShiaW5kaW5nLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nLnNldFBvcnRUeXBlKGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0VW5kZWZpbmVkKGJpbmRpbmcuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24gPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldE9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXROYW1lKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBpbnB1dCkKLSAgewotICAgIEJpbmRpbmdJbnB1dCBteUlucHV0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICBteUlucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15SW5wdXQuc2V0TmFtZShpbnB1dC5nZXROYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChteUlucHV0KTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG91dHB1dCkKLSAgewotICAgIEJpbmRpbmdPdXRwdXQgbXlPdXRwdXQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLSAgICBteU91dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChvdXRwdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlPdXRwdXQuc2V0TmFtZShvdXRwdXQuZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nT3V0cHV0KG15T3V0cHV0KTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ091dHB1dChvdXRwdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgQmluZGluZ0ZhdWx0IG15RmF1bHQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIG15RmF1bHQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZmF1bHQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlGYXVsdC5zZXROYW1lKGZhdWx0LmdldE5hbWUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYWRkQmluZGluZ0ZhdWx0KG15RmF1bHQpOwotCi0gICAgc3VwZXIudmlzaXRCaW5kaW5nRmF1bHQoZmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGN1cnJlbnRTZXJ2aWNlID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgY3VycmVudFNlcnZpY2Uuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50U2VydmljZS5zZXRRTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkpOwotICAgIG5ld0RlZmluaXRpb24uYWRkU2VydmljZShjdXJyZW50U2VydmljZSk7Ci0KLSAgICBzdXBlci52aXNpdFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgUG9ydCBteVBvcnQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZVBvcnQoKTsKLSAgICBteVBvcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQocG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteVBvcnQuc2V0TmFtZShwb3J0LmdldE5hbWUoKSk7Ci0gICAgbXlQb3J0LnNldEJpbmRpbmcocG9ydC5nZXRCaW5kaW5nKCkpOwotICAgIGN1cnJlbnRTZXJ2aWNlLmFkZFBvcnQobXlQb3J0KTsKLQotICAgIHN1cGVyLnZpc2l0UG9ydChwb3J0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHZpc2l0U09BUEJvZHkoKFNPQVBCb2R5KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgdmlzaXRTT0FQQmluZGluZygoU09BUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB2aXNpdFNPQVBBZGRyZXNzKChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgdmlzaXRTT0FQT3BlcmF0aW9uKChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUE9wZXJhdGlvbi4uLiIpOwotICAgIHByaW50bG4oInNvYXBBY3Rpb246ICIgKyBzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKSk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBTT0FQT3BlcmF0aW9uLi4uIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQm9keShTT0FQQm9keSBzb2FwQm9keSkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBCb2R5Li4uIik7Ci0gICAgcHJpbnRsbigidXNlOiAiICsgc29hcEJvZHkuZ2V0VXNlKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJvZHkuLi4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUEJpbmRpbmcuLi4iKTsKLSAgICBwcmludGxuKCJzdHlsZTogIiArIHNvYXBCaW5kaW5nLmdldFN0eWxlKCkpOwotICAgIHByaW50bG4oInRyYW5zcG9ydDogIiArIHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBCaW5kaW5nLi4uIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBBZGRyZXNzLi4uIik7Ci0gICAgcHJpbnRsbigibG9jYXRpb246ICIgKyBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBBZGRyZXNzLi4uIik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgV1NETDRKQVBJVGVzdCgiTW9kZWxTZW1hbnRpY1Rlc3QiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNb2RlbFNlbWFudGljKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNb2RlbFNlbWFudGljKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmID0gbG9hZERlZmluaXRpb25Gb3JXU0RMNEooIi4vc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgV1NETDRKQVBJVGVzdCB0ZXN0ID0gbmV3IFdTREw0SkFQSVRlc3QoZGVmKTsKLSAgICAgIHRlc3QudmlzaXQoKTsKLSAgICAgIHNlcmlhbGl6ZSh0ZXN0Lm5ld0RlZmluaXRpb24sICIuL3NhbXBsZXMvQ2xvbmVkTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgQXNzZXJ0LmZhaWwoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGNsb25lZEZpbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIFdTRExXcml0ZXIgd3JpdGVyID0gZmFjdG9yeS5uZXdXU0RMV3JpdGVyKCk7Ci0gICAgLy8gU3RyaW5nIHMgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIGNsb25lZEZpbGU7Ci0gICAgLy8gd3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBuZXcgRmlsZU91dHB1dFN0cmVhbShzKSk7Ci0gIH0KLQotICBwcml2YXRlIERlZmluaXRpb24gbG9hZERlZmluaXRpb25Gb3JXU0RMNEooU3RyaW5nIHdzZGxGaWxlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMUmVhZGVyIHJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgIFN0cmluZyBzID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyB3c2RsRmlsZTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSByZWFkZXIucmVhZFdTREwocywgbmV3IElucHV0U291cmNlKG5ldyBGaWxlSW5wdXRTdHJlYW0ocykpKTsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMRU1GQVBJVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExFTUZBUElUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YWM1YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExFTUZBUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgV1NETEVNRkFQSVRlc3QgZXh0ZW5kcyBEZWZpbml0aW9uVmlzaXRvcgotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFOwotCi0gIERlZmluaXRpb24gbmV3RGVmaW5pdGlvbjsKLQotICBwcml2YXRlIE1lc3NhZ2UgY3VycmVudE1lc3NhZ2U7Ci0KLSAgcHJpdmF0ZSBTZXJ2aWNlIGN1cnJlbnRTZXJ2aWNlOwotCi0gIHByaXZhdGUgUG9ydFR5cGUgY3VycmVudFBvcnRUeXBlOwotCi0gIHByaXZhdGUgT3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb247Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nIGN1cnJlbnRCaW5kaW5nOwotCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBjdXJyZW50QmluZGluZ09wZXJhdGlvbjsKLQotICBwcml2YXRlIEV4dGVuc2libGVFbGVtZW50IGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudDsKLQotICAvLyBBZGRlZCBmb3IgSlVuaXQKLSAgcHVibGljIFdTRExFTUZBUElUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMRU1GQVBJVGVzdChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzdXBlcihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIC8vIFVzZSBXU0RMRWxlbWVudCB0byBpbmNyZWFzZSB0aGUgQVBJIGNvdmVyYWdlIGluIHRoZSByZXBvcnRzCi0gICAgV1NETEVsZW1lbnQgcm9vdCA9IGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIG5ld0RlZmluaXRpb24gPSAoRGVmaW5pdGlvbilyb290OwotCi0gICAgcm9vdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgcm9vdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgIHJvb3Quc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICByb290LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICByb290LmdldENvbnRhaW5lcigpOwotCi0gICAgbmV3RGVmaW5pdGlvbi5zZXRRTmFtZShkZWYuZ2V0UU5hbWUoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldERvY3VtZW50QmFzZVVSSShkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0TG9jYXRpb24oZGVmLmdldExvY2F0aW9uKCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0RW5jb2RpbmcoZGVmLmdldEVuY29kaW5nKCkpOwotCi0gICAgLy8gZ2V0RU5hbWVzcGFjZXMgZG9lcyBub3Qgd29yay4KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGRlZi5nZXRFTmFtZXNwYWNlcygpLml0ZXJhdG9yKCk7Ci0gICAgTmFtZXNwYWNlIG5zID0gbnVsbDsKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBTdHJpbmcgdXJpID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIG5zID0gZmFjdG9yeS5jcmVhdGVOYW1lc3BhY2UoKTsKLSAgICAgIHByZWZpeCA9ICgoTmFtZXNwYWNlKWl0ZXJhdG9yLm5leHQoKSkuZ2V0UHJlZml4KCk7Ci0gICAgICB1cmkgPSAoKE5hbWVzcGFjZSlpdGVyYXRvci5uZXh0KCkpLmdldFVSSSgpOwotICAgICAgbnMuc2V0VVJJKHVyaSk7Ci0gICAgICBucy5zZXRQcmVmaXgocHJlZml4KTsKLSAgICAgIG5ld0RlZmluaXRpb24uZ2V0RU5hbWVzcGFjZXMoKS5hZGQobnMpOwotICAgIH0KLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIHByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHByZWZpeCA9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgbmFtZXNwYWNlID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgbmV3RGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgIH0KLSAgICAvL25ld0RlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gZGVmOwotICAgIHN1cGVyLnZpc2l0RGVmaW5pdGlvbihkZWYpOwotCi0gICAgcm9vdC5zZXRFbGVtZW50KG51bGwpOwotICAgIHJvb3QudXBkYXRlRWxlbWVudCh0cnVlKTsKLSAgICByb290LmdldEVsZW1lbnQoKTsKLSAgICByb290LnNldEVsZW1lbnQobnVsbCk7Ci0gICAgcm9vdC51cGRhdGVFbGVtZW50KCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEltcG9ydChJbXBvcnQgd3NkbEltcG9ydCkKLSAgewotICAgIEltcG9ydCBteUltcG9ydCA9IGZhY3RvcnkuY3JlYXRlSW1wb3J0KCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLmFkZChteUltcG9ydCk7Ci0KLSAgICAvLyBlLmcuIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vZm9vLmNvbSIgc2NoZW1hTG9jYXRpb249ICJiYXIueHNkIi8+Ci0gICAgbXlJbXBvcnQuc2V0TmFtZXNwYWNlVVJJKHdzZGxJbXBvcnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15SW1wb3J0LnNldExvY2F0aW9uVVJJKHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgbXlJbXBvcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQod3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUltcG9ydC5zZXRFRGVmaW5pdGlvbih3c2RsSW1wb3J0LmdldEVEZWZpbml0aW9uKCkpOwotICAgIG15SW1wb3J0LnNldEVTY2hlbWEod3NkbEltcG9ydC5nZXRFU2NoZW1hKCkpOwotICAgIG15SW1wb3J0LnNldFNjaGVtYSh3c2RsSW1wb3J0LmdldFNjaGVtYSgpKTsKLSAgICBteUltcG9ydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG5ld0RlZmluaXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRUeXBlcyhUeXBlcyB0eXBlcykKLSAgewotICAgIFR5cGVzIG15VHlwZXMgPSBmYWN0b3J5LmNyZWF0ZVR5cGVzKCk7Ci0gICAgbXlUeXBlcy5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0eXBlcy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSBudWxsOwotICAgIHR5cGVzLmdldFNjaGVtYXMoImh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gbXlUeXBlczsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoZWUpOwotICAgIH0KLQotICAgIG15VHlwZXMuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICBuZXdEZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgIG5ld0RlZmluaXRpb24uc2V0RVR5cGVzKG15VHlwZXMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIFBhcnQgbXlQYXJ0ID0gZmFjdG9yeS5jcmVhdGVQYXJ0KCk7Ci0gICAgbXlQYXJ0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBhcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQYXJ0LnNldE5hbWUocGFydC5nZXROYW1lKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50TmFtZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIG15UGFydC5zZXRUeXBlTmFtZShwYXJ0LmdldFR5cGVOYW1lKCkpOwotICAgIG15UGFydC5zZXRFTWVzc2FnZShwYXJ0LmdldEVNZXNzYWdlKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24ocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0gICAgbXlQYXJ0LnNldFR5cGVEZWZpbml0aW9uKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgUU5hbWUga2V5ID0gbnVsbDsKLSAgICBRTmFtZSB2YWx1ZSA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBrZXkgPSAoUU5hbWUpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmFsdWUgPSAoUU5hbWUpcGFydC5nZXRFeHRlbnNpb25BdHRyaWJ1dGUoa2V5KTsKLSAgICAgIG15UGFydC5zZXRFeHRlbnNpb25BdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7Ci0gICAgfQotICAgIGN1cnJlbnRNZXNzYWdlLnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE1lc3NhZ2UuYWRkUGFydChteVBhcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGN1cnJlbnRQb3J0VHlwZSA9IGZhY3RvcnkuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQocG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudFBvcnRUeXBlLnNldFFOYW1lKHBvcnRUeXBlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5zZXRVbmRlZmluZWQocG9ydFR5cGUuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICBuZXdEZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5hZGQoY3VycmVudFBvcnRUeXBlKTsKLQotICAgIHN1cGVyLnZpc2l0UG9ydFR5cGUocG9ydFR5cGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIGN1cnJlbnRPcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0TmFtZShvcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldFN0eWxlKG9wZXJhdGlvbi5nZXRTdHlsZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldFVuZGVmaW5lZChvcGVyYXRpb24uaXNVbmRlZmluZWQoKSk7Ci0gICAgb3BlcmF0aW9uLmdldEVQYXJhbWV0ZXJPcmRlcmluZygpOyAvLyBUQkQKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudFBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuYWRkKGN1cnJlbnRPcGVyYXRpb24pOwotCi0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiT3BlcmF0aW9uIFR5cGUgaXM6ICIgKyBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gICAgLy9vcGVyYXRpb24uc2V0U3R5bGUoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiT3BlcmF0aW9uIFR5cGUgaXM6ICIgKyBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgY3VycmVudE1lc3NhZ2UgPSBmYWN0b3J5LmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBjdXJyZW50TWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRNZXNzYWdlLnNldFVuZGVmaW5lZChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpOwotICAgIG5ld0RlZmluaXRpb24uYWRkTWVzc2FnZShjdXJyZW50TWVzc2FnZSk7Ci0KLSAgICBzdXBlci52aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgTWVzc2FnZVJlZmVyZW5jZSBteUlucHV0ID0gZmFjdG9yeS5jcmVhdGVJbnB1dCgpOwotICAgIG15SW5wdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlJbnB1dC5zZXROYW1lKGlucHV0LmdldE5hbWUoKSk7Ci0gICAgbXlJbnB1dC5nZXROYW1lKCk7Ci0gICAgbXlJbnB1dC5zZXRFTWVzc2FnZShpbnB1dC5nZXRFTWVzc2FnZSgpKTsKLSAgICBteUlucHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRFSW5wdXQoKElucHV0KW15SW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE91dHB1dCBteU91dHB1dCA9IGZhY3RvcnkuY3JlYXRlT3V0cHV0KCk7Ci0gICAgbXlPdXRwdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15T3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgbXlPdXRwdXQuc2V0RU1lc3NhZ2Uob3V0cHV0LmdldEVNZXNzYWdlKCkpOwotICAgIG15T3V0cHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRFT3V0cHV0KG15T3V0cHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBGYXVsdCBteUZhdWx0ID0gZmFjdG9yeS5jcmVhdGVGYXVsdCgpOwotICAgIG15RmF1bHQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZmF1bHQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlGYXVsdC5zZXROYW1lKGZhdWx0LmdldE5hbWUoKSk7Ci0gICAgbXlGYXVsdC5zZXRFTWVzc2FnZShmYXVsdC5nZXRFTWVzc2FnZSgpKTsKLSAgICBteUZhdWx0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuYWRkKG15RmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKS5hZGQoY3VycmVudEJpbmRpbmcpOwotCi0gICAgY3VycmVudEJpbmRpbmcuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoYmluZGluZy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRRTmFtZShiaW5kaW5nLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nLnNldEVQb3J0VHlwZShiaW5kaW5nLmdldEVQb3J0VHlwZSgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRVbmRlZmluZWQoYmluZGluZy5pc1VuZGVmaW5lZCgpKTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IGN1cnJlbnRCaW5kaW5nOwotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbiA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KGJpbmRpbmdPcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RU9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5hZGQoY3VycmVudEJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gY3VycmVudEJpbmRpbmdPcGVyYXRpb247Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgQmluZGluZ0lucHV0IG15SW5wdXQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIG15SW5wdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlJbnB1dC5zZXROYW1lKGlucHV0LmdldE5hbWUoKSk7Ci0gICAgbXlJbnB1dC5zZXRJbnB1dChpbnB1dC5nZXRJbnB1dCgpKTsKLSAgICBteUlucHV0LnNldEVJbnB1dChpbnB1dC5nZXRFSW5wdXQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RUJpbmRpbmdJbnB1dChteUlucHV0KTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IG15SW5wdXQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nSW5wdXQoaW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgQmluZGluZ091dHB1dCBteU91dHB1dCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ091dHB1dCgpOwotICAgIG15T3V0cHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteU91dHB1dC5zZXROYW1lKG91dHB1dC5nZXROYW1lKCkpOwotICAgIG15T3V0cHV0LnNldE91dHB1dChvdXRwdXQuZ2V0T3V0cHV0KCkpOwotICAgIG15T3V0cHV0LnNldEVPdXRwdXQob3V0cHV0LmdldEVPdXRwdXQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RUJpbmRpbmdPdXRwdXQobXlPdXRwdXQpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gbXlPdXRwdXQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3V0cHV0KG91dHB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBCaW5kaW5nRmF1bHQgbXlGYXVsdCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0gICAgbXlGYXVsdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChmYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUZhdWx0LnNldE5hbWUoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICBteUZhdWx0LnNldEVGYXVsdChmYXVsdC5nZXRFRmF1bHQoKSk7Ci0gICAgbXlGYXVsdC5zZXRGYXVsdChmYXVsdC5nZXRGYXVsdCgpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLmFkZChteUZhdWx0KTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IG15RmF1bHQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nRmF1bHQoZmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGN1cnJlbnRTZXJ2aWNlID0gZmFjdG9yeS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgY3VycmVudFNlcnZpY2Uuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50U2VydmljZS5zZXRRTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRTZXJ2aWNlLnNldFVuZGVmaW5lZChzZXJ2aWNlLmlzVW5kZWZpbmVkKCkpOwotCi0gICAgbmV3RGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKS5hZGQoY3VycmVudFNlcnZpY2UpOwotCi0gICAgc3VwZXIudmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIFBvcnQgbXlQb3J0ID0gZmFjdG9yeS5jcmVhdGVQb3J0KCk7Ci0gICAgbXlQb3J0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQb3J0LnNldE5hbWUocG9ydC5nZXROYW1lKCkpOwotICAgIG15UG9ydC5zZXRFQmluZGluZyhwb3J0LmdldEVCaW5kaW5nKCkpOwotCi0gICAgY3VycmVudFNlcnZpY2UuZ2V0RVBvcnRzKCkuYWRkKG15UG9ydCk7Ci0KLSAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQgPSBteVBvcnQ7Ci0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmxlRWxlbWVudCBvd25lciwgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICAvLyBUbyBtb3ZlIHVwIHRoZSBBUEkgdGVzdCBjb3ZlcmFnZQotICAgIG93bmVyLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBvd25lci5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBmYWN0b3J5LmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgV1NETFBsdWdpbi5nZXRQbHVnaW4oKTsKLSAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmdldFBsdWdpblJlc291cmNlTG9jYXRvcigpOwotCi0gICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgewotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZWUgPSBudWxsOwotICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCB1ZWUgPSBudWxsOwotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG15RUUgPSBudWxsOwotICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIG15RUUgPSBmYWN0b3J5LmNyZWF0ZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICB4c2VlID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KW15RUU7Ci0gICAgICB4c2VlLnNldFNjaGVtYSgoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50KS5nZXRTY2hlbWEoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBteUVFID0gZmFjdG9yeS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIHVlZSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpbXlFRTsKLSAgICAgIHVlZS5nZXRDaGlsZHJlbigpOyAvLyBUQkQKLSAgICB9Ci0gICAgbXlFRS5zZXRFbGVtZW50VHlwZShleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpKTsKLSAgICBteUVFLnNldFJlcXVpcmVkKGV4dGVuc2liaWxpdHlFbGVtZW50LmdldFJlcXVpcmVkKCkpOwotICAgIG15RUUuc2V0UmVxdWlyZWQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQuaXNSZXF1aXJlZCgpKTsKLSAgICBpZiAoY3VycmVudEV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQobXlFRSk7Ci0KLSAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHZpc2l0U09BUEJvZHkoKFNPQVBCb2R5KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgdmlzaXRTT0FQQmluZGluZygoU09BUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB2aXNpdFNPQVBBZGRyZXNzKChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgdmlzaXRTT0FQT3BlcmF0aW9uKChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBGYXVsdCkKLSAgICAgIHZpc2l0U09BUEZhdWx0KChTT0FQRmF1bHQpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEhlYWRlcikKLSAgICAgIHZpc2l0U09BUEhlYWRlcigoU09BUEhlYWRlcilleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQSGVhZGVyRmF1bHQpCi0gICAgICB2aXNpdFNPQVBIZWFkZXJGYXVsdCgoU09BUEhlYWRlckZhdWx0KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBGYXVsdChTT0FQRmF1bHQgc29hcEZhdWx0KQotICB7Ci0gICAgU09BUEZhdWx0IG15U29hcEZhdWx0ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBGYXVsdCgpOwotICAgIG15U29hcEZhdWx0LnNldEVuY29kaW5nU3R5bGVzKHNvYXBGYXVsdC5nZXRFbmNvZGluZ1N0eWxlcygpKTsKLSAgICBteVNvYXBGYXVsdC5zZXROYW1lKHNvYXBGYXVsdC5nZXROYW1lKCkpOwotICAgIG15U29hcEZhdWx0LnNldE5hbWVzcGFjZVVSSShzb2FwRmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15U29hcEZhdWx0LnNldFVzZShzb2FwRmF1bHQuZ2V0VXNlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEhlYWRlcihTT0FQSGVhZGVyIHNvYXBIZWFkZXIpCi0gIHsKLSAgICAvLyBVc2UgU09BUEhlYWRlckJhc2UgdG8gaW5jcmVhc2UgdGhlIEFQSSBjb3ZlcmFnZSB2YWx1ZXMgaW4gdGhlIHJlcG9ydHMKLQotICAgIFNPQVBIZWFkZXJCYXNlIHlvdXJTb2FwSGVhZGVyID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBIZWFkZXJCYXNlKCk7Ci0gICAgeW91clNvYXBIZWFkZXIuZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLQotICAgIFNPQVBIZWFkZXJCYXNlIG15U29hcEhlYWRlciA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQSGVhZGVyKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldE1lc3NhZ2Uoc29hcEhlYWRlci5nZXRNZXNzYWdlKCkpOwotICAgIG15U29hcEhlYWRlci5nZXRNZXNzYWdlKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldFBhcnQoc29hcEhlYWRlci5nZXRQYXJ0KCkpOwotICAgIG15U29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldE5hbWVzcGFjZVVSSShzb2FwSGVhZGVyLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteVNvYXBIZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldFVzZShzb2FwSGVhZGVyLmdldFVzZSgpKTsKLSAgICBteVNvYXBIZWFkZXIuZ2V0VXNlKCk7Ci0gICAgKChTT0FQSGVhZGVyKXNvYXBIZWFkZXIpLmdldEhlYWRlckZhdWx0cygpOyAvLyBUQkQKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBIZWFkZXJGYXVsdChTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0KQotICB7Ci0gICAgU09BUEhlYWRlckZhdWx0IG15U29hcEhlYWRlckZhdWx0ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIG15U29hcEhlYWRlckZhdWx0LnNldE1lc3NhZ2Uoc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSk7Ci0gICAgbXlTb2FwSGVhZGVyRmF1bHQuc2V0UGFydChzb2FwSGVhZGVyRmF1bHQuZ2V0UGFydCgpKTsKLSAgICBteVNvYXBIZWFkZXJGYXVsdC5zZXROYW1lc3BhY2VVUkkoc29hcEhlYWRlckZhdWx0LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteVNvYXBIZWFkZXJGYXVsdC5zZXRVc2Uoc29hcEhlYWRlckZhdWx0LmdldFVzZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgU09BUE9wZXJhdGlvbiBteVNvYXBPcGVyYXRpb24gPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIG15U29hcE9wZXJhdGlvbi5zZXRTb2FwQWN0aW9uVVJJKHNvYXBPcGVyYXRpb24uZ2V0U29hcEFjdGlvblVSSSgpKTsKLSAgICBteVNvYXBPcGVyYXRpb24uc2V0U3R5bGUoc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCb2R5KFNPQVBCb2R5IHNvYXBCb2R5KQotICB7Ci0gICAgU09BUEJvZHkgbXlTb2FwQm9keSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQm9keSgpOwotICAgIG15U29hcEJvZHkuc2V0RW5jb2RpbmdTdHlsZXMoc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKSk7Ci0gICAgbXlTb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15U29hcEJvZHkuc2V0UGFydHMoc29hcEJvZHkuZ2V0UGFydHMoKSk7Ci0gICAgbXlTb2FwQm9keS5zZXRVc2Uoc29hcEJvZHkuZ2V0VXNlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEJpbmRpbmcoU09BUEJpbmRpbmcgc29hcEJpbmRpbmcpCi0gIHsKLSAgICBTT0FQQmluZGluZyBteVNvYXBCaW5kaW5nID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCaW5kaW5nKCk7Ci0gICAgbXlTb2FwQmluZGluZy5zZXRTdHlsZShzb2FwQmluZGluZy5nZXRTdHlsZSgpKTsKLSAgICBteVNvYXBCaW5kaW5nLnNldFRyYW5zcG9ydFVSSShzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIFNPQVBBZGRyZXNzIG15U29hcEFkZHJlc3MgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICBteVNvYXBBZGRyZXNzLnNldExvY2F0aW9uVVJJKHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFdTRExFTUZBUElUZXN0KCJNb2RlbFNlbWFudGljVGVzdCIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1vZGVsU2VtYW50aWMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1vZGVsU2VtYW50aWMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWYgPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIsIHRydWUpOwotICAgICAgV1NETEVNRkFQSVRlc3QgdGVzdCA9IG5ldyBXU0RMRU1GQVBJVGVzdChkZWYpOwotICAgICAgdGVzdC52aXNpdCgpOwotICAgICAgc2VyaWFsaXplKHRlc3QubmV3RGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgQXNzZXJ0LmZhaWwoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKERlZmluaXRpb24gZGVmKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgid3NkbCIsIG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKLSAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxNYWluUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0gICAgd3NkbE1haW5SZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWYpOwotCi0gICAgSVdvcmtzcGFjZVJvb3QgbXlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICBJUHJvamVjdCBteVdlYlByb2plY3QgPSBteVdvcmtzcGFjZVJvb3QuZ2V0UHJvamVjdCgib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiKTsKLSAgICBpZiAoIW15V2ViUHJvamVjdC5leGlzdHMoKSkKLSAgICAgIG15V2ViUHJvamVjdC5jcmVhdGUobnVsbCk7Ci0KLSAgICBTdHJpbmcgYmFzZURpciA9IG15V2ViUHJvamVjdC5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0KLSAgICBEZWZpbml0aW9uTG9hZGVyLnN0b3JlKGRlZiwgYmFzZURpciArICIvQ2xvbmVkTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETEdlbmVyYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETEdlbmVyYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YTliNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExHZW5lcmF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCb2R5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLQotCi1wdWJsaWMgY2xhc3MgV1NETEdlbmVyYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHVibGljIFdTRExHZW5lcmF0aW9uVGVzdCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBXU0RMR2VuZXJhdGlvblRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMR2VuZXJhdGlvblRlc3QoIlNhbXBsZVdTRExHZW5lcmF0aW9uIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U2FtcGxlV1NETEdlbmVyYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2FtcGxlV1NETEdlbmVyYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZ2VuZXJhdGVUZW1wZXJhdHVyZVNlcnZpY2UoV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArInNhbXBsZXMvZ2VuZXJhdGVkL1RlbXBlcmF0dXJlU2VydmljZS53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVRlbXBlcmF0dXJlU2VydmljZShTdHJpbmcgb3V0cHV0RmlsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlRmlsZVVSSShvdXRwdXRGaWxlKSk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuYWRkKHJlc291cmNlKTsKLQotICAgIC8vIENyZWF0ZSBhIERlZmluaXRpb24gLSBUZW1wZXJhdHVyZQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksICJUZW1wZXJhdHVyZSIpKTsKLSAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLQotICAgIC8vIFRhcmdldCBuYW1lc3BhY2UgLSBodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbQotICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKCJodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbSIpOwotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ0bnMiLCAiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20iKTsKLQotICAgIC8vIE90aGVyIG5hbWVzcGFjZXMgLSB3c2RsLCBzb2FwLCB4c2QKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgid3NkbCIsIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKTsKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgieHNkIiwgV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSk7Ci0gICAgZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCkucHV0KCJzb2FwIiwgU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOwotCi0gICAgLy8KLSAgICAvLyBMZXQncyBzdGFydCBidWlsZGluZyB0d28gbWVzc2FnZXMKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFppcENvZGUKLSAgICBQYXJ0IHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiWmlwQ29kZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBpbnB1dE1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZUlucHV0IikpOwotICAgIGlucHV0TWVzc2FnZS5hZGRQYXJ0KHBhcnQpOwotICAgIGRlZmluaXRpb24uYWRkTWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFRlbXBlcmF0dXJlCi0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJUZW1wZXJhdHVyZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgb3V0cHV0TWVzc2FnZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlT3V0cHV0IikpOwotICAgIG91dHB1dE1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Ci0KLSAgICAvLwotICAgIC8vIE5leHQsIGJ1aWxkIGEgUG9ydFR5cGUKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0IC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIElucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQuc2V0TWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE91dHB1dCAtIEdldFRlbXBlcmF0dXJlT3V0cHV0Ci0gICAgT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQuc2V0TWVzc2FnZShvdXRwdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPcGVyYXRpb24gLSBHZXRUZW1wZXJhdHVyZUZvclppcENvZGUKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbi5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUZvclppcENvZGUiKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoaW5wdXQpOwotICAgIG9wZXJhdGlvbi5zZXRPdXRwdXQob3V0cHV0KTsKLQotICAgIC8vIENyZWF0ZSBhIFBvcnRUeXBlCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBwb3J0VHlwZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlSW5mb1NPQVAiKSk7Ci0gICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0KLSAgICAvLwotICAgIC8vIE5vdywgbGV0J3Mgd29yayBvbiBCaW5kaW5nCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhIEJpbmRpbmcgLSBHZXRUZW1wZXJhdHVyZUluZm9TT0FQCi0gICAgQmluZGluZyBiaW5kaW5nID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICBiaW5kaW5nLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiR2V0VGVtcGVyYXR1cmVJbmZvU09BUCIpKTsKLSAgICBiaW5kaW5nLnNldFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICBkZWZpbml0aW9uLmFkZEJpbmRpbmcoYmluZGluZyk7Ci0KLSAgICAvLyBDcmVhdGUgYSBTT0FQIEJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQmluZGluZygpOwotICAgIHNvYXBCaW5kaW5nLnNldFN0eWxlKCJycGMiKTsKLSAgICBzb2FwQmluZGluZy5zZXRUcmFuc3BvcnRVUkkoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIpOwotICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJpbmRpbmcpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBPcGVyYXRpb24KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZSgiR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlIik7Ci0gICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgLy8gQ3JlYXRlIGEgU09BUCBPcGVyYXRpb24KLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSSgiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20vR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlIik7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLQotICAgIC8vIENyZWF0ZSBhIFNPQVAgQm9keQotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgc29hcEJvZHkuc2V0VXNlKCJlbmNvZGVkIik7Ci0gICAgc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKS5hZGQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIik7Ci0gICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKCJodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbS8iKTsKLQotICAgIC8vIEFkZCBhIHBhcnQgKFRlbXBlcmF0dXJlKSB0byB0aGUgU09BUCBib2R5IChCdWd6aWxsYSAxMDgxNzYpCi0gICAgamF2YS51dGlsLlZlY3RvciB2ID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICB2LmFkZChwYXJ0KTsKLSAgICBzb2FwQm9keS5zZXRQYXJ0cyh2KTsKLSAgICAoKFNPQVBCb2R5SW1wbClzb2FwQm9keSkudXBkYXRlRWxlbWVudCgpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBJbnB1dAotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgYmluZGluZ0lucHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgLy8gQ3JlYXRlIGEgU09BUCBCb2R5Ci0gICAgc29hcEJvZHkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBzb2FwQm9keS5zZXRVc2UoImVuY29kZWQiKTsKLSAgICBzb2FwQm9keS5nZXRFbmNvZGluZ1N0eWxlcygpLmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICBzb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tLyIpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBPdXRwdXQKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgYmluZGluZ091cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQoYmluZGluZ091cHV0KTsKLQotICAgIC8vCi0gICAgLy8gRmluYWxseSwgd2UgYXJlIGJ1aWxkaW5nIGEgU2VydmljZQotICAgIC8vCi0KLSAgICAvLyBDcmVhdGUgYSBTT0FQIEFkZHJlc3MKLSAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQWRkcmVzcygpOwotICAgIHNvYXBBZGRyZXNzLnNldExvY2F0aW9uVVJJKCJodHRwOi8vdG9kby1zb21lLWFkZHJlc3MvIik7Ci0KLSAgICAvLyBDcmVhdGUgYSBQb3J0IC0gR2V0VGVtcGVyYXR1cmVJbmZvU09BUAotICAgIFBvcnQgcG9ydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3J0KCk7Ci0gICAgcG9ydC5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUluZm9TT0FQIik7Ci0gICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotCi0gICAgLy8gQ3JlYXRlIGEgU2VydmljZSAtIFRlbXBlcmF0dXJlU2VydmljZQotICAgIFNlcnZpY2Ugc2VydmljZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIlRlbXBlcmF0dXJlU2VydmljZSIpKTsKLSAgICBzZXJ2aWNlLmFkZFBvcnQocG9ydCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotCi0gICAgLy8KLSAgICAvLyBQaGV3LCB3ZSBhcmUgZG9uZS4gTGV0J3Mgc2VyaWFsaXplIGl0LgotICAgIC8vCi0KLSAgICByZXNvdXJjZS5zYXZlKG51bGwpOwotCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkNDYwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIKAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotCi0vKioKLSAqIFRoZSBtYWluIHBsdWctaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICAvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0gIHByaXZhdGUgc3RhdGljIFdTRExUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLSAgLy9SZXNvdXJjZSBidW5kbGUuCi0gIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExUZXN0c1BsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICAgIHBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gICAgcGx1Z2luID0gbnVsbDsKLSAgICByZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0gICAgcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLSAgICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkKLSAgewotICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFdTRExUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLldTRExUZXN0c1BsdWdpblJlc291cmNlcyIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpCi0gICAgewotICAgICAgcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWctaW4uCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWctaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9IVFRQRXh0ZW5zaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL0hUVFBFeHRlbnNpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzhiOThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL0hUVFBFeHRlbnNpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3IuSFRUUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLQotCi0vKioKLSAqIFRlc3RzIHRoZSBIVFRQIGJpbmRpbmcgZXh0ZW5zaW9ucy4gCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQRXh0ZW5zaW9uc1Rlc3QgZXh0ZW5kcyBXU0RMRXh0ZW5zaW9uc1Rlc3QKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFERFJFU1NfTE9DQVRJT05fVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhUVFBGYWN0b3J5IEhUVFBfRkFDVE9SWSA9IEhUVFBGYWN0b3J5LmVJTlNUQU5DRTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9MT0NBVElPTl9VUkkgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9IVFRQVGVzdC9OZXdPcGVyYXRpb24iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9OQU1FU1BBQ0UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9IVFRQVGVzdC8iOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJfR0VUID0gIkdFVCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSQl9QVVQgPSAiUFVUIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQRXh0ZW5zaW9uc0NyZWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RIVFRQRXh0ZW5zaW9uc0NyZWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJFTUZTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RIVFRQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQQ29udGVudEdlbmVyYXRvciIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SFRUUENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgSFRUUEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SFRUUEV4dGVuc2lvbnNDcmVhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUFRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJIVFRQVGVzdEhUVFAiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUoVEFSR0VUX05BTUVTUEFDRSwgYmluZGluZ05hbWUpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICAgIGFkZEhUVFBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIGFkZEhUVFBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAgICAgYWRkSFRUUEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgICBhZGRIVFRQQWRkcmVzcyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhUVFBFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiSFRUUEV4YW1wbGUiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSFRUUEV4YW1wbGUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgc2VydmljZU5hbWUpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXNlcnZpY2UuZ2V0UG9ydCgiSFRUUEV4YW1wbGVIVFRQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gKEhUVFBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IGh0dHBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiwgbG9jYXRpb25VUkkpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKAotICAgICAgICBodHRwQWRkcmVzcywKLSAgICAgICAgSFRUUENvbnN0YW50cy5MT0NBVElPTl9VUklfQVRUUklCVVRFLAotICAgICAgICAidGVzdCIsCi0gICAgICAgIEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJKTsKLQotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gIkhUVFBFeGFtcGxlSFRUUCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgSFRUUEJpbmRpbmcgaHR0cEJpbmRpbmcgPSAoSFRUUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgU3RyaW5nIHZlcmIgPSBodHRwQmluZGluZy5nZXRWZXJiKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoVkVSQl9HRVQsIHZlcmIpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKGh0dHBCaW5kaW5nLCBIVFRQQ29uc3RhbnRzLlZFUkJfQVRUUklCVVRFLCBWRVJCX1BVVCwgSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9CSU5ESU5HX19WRVJCKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgV1NETCBtb2RlbCB0aGVuIHNhdmVzIGl0IHVzaW5nIHRoZSBkZWZhdWx0IEVNRiBzZXJpYWxpemF0aW9uCi0gICAqIGluc3RlYWQgb2YgdGhlIFdTREwgWE1MIGZvcm1hdCwgdGhlbiBsb2FkcyBpdCBhZ2Fpbi4gVGhlIGludGVudCBpcyB0byBleGVyY2lzZQotICAgKiB0aGUgRU1GIGUqIG1ldGhvZHMgdG8gYWlkIGluIGlkZW50aWZ5aW5nIHJlYWwgY29kZSBjb3ZlcmFnZSBpc3N1ZXMuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL0hUVFBFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhUVFBDb250ZW50R2VuZXJhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgSFRUUENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IChIVFRQQ29udGVudEdlbmVyYXRvcilDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZSgKLSAgICAgICAgIkhUVFAiKTsKLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICJodHRwOi8vdGVzdC5vcmcvZXhhbXBsZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGxvY2F0aW9uVVJJKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0VmVyYihIVFRQQ29udGVudEdlbmVyYXRvci5WRVJCX0dFVCk7Ci0KLSAgICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9ICJIVFRQVGVzdCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCBzZXJ2aWNlTmFtZSk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLQotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0KCJIVFRQVGVzdEhUVFAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDAsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KHBvcnQpOwotCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICAgIGFzc2VydFRydWUoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcyk7Ci0gICAgICBIVFRQQWRkcmVzcyBodHRwQWRkcmVzcyA9IChIVFRQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICAgIGFzc2VydEVxdWFscyhsb2NhdGlvblVSSSwgaHR0cEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKSk7Ci0KLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCAiSFRUUFRlc3RIVFRQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gbmV3IFFOYW1lKFRBUkdFVF9OQU1FU1BBQ0UsICJIVFRQVGVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotCi0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZywgcG9ydFR5cGUpOwotCi0gICAgICAvLyBUT0RPIENvbXBsZXRlIHRoaXMgdGVzdC4KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkSFRUUEFkZHJlc3MoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgSFRUUEFkZHJlc3MgaHR0cEFkZHJlc3MgPSBIVFRQX0ZBQ1RPUlkuY3JlYXRlSFRUUEFkZHJlc3MoKTsKLSAgICBodHRwQWRkcmVzcy5zZXRMb2NhdGlvblVSSShBRERSRVNTX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICBodHRwQWRkcmVzcy50b1N0cmluZygpOwotCi0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gIkhUVFBUZXN0IjsgLy8kTk9OLU5MUy0xJAotICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCBzZXJ2aWNlTmFtZSk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgc2VydmljZS50b1N0cmluZygpOwotCi0gICAgUG9ydCBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0KCJIVFRQVGVzdEhUVFAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEFkZHJlc3MpOwotICAgIHBvcnQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRIVFRQQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBiaW5kaW5nLnRvU3RyaW5nKCk7Ci0KLSAgICBIVFRQQmluZGluZyBodHRwQmluZGluZyA9IEhUVFBfRkFDVE9SWS5jcmVhdGVIVFRQQmluZGluZygpOwotICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEJpbmRpbmcpOwotCi0gICAgaHR0cEJpbmRpbmcuc2V0VmVyYihWRVJCX0dFVCk7Ci0KLSAgICBodHRwQmluZGluZy50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZEhUVFBCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkKLSAgewotICAgIGJpbmRpbmdJbnB1dC50b1N0cmluZygpOwotCi0gICAgSFRUUFVybEVuY29kZWQgaHR0cFVSTEVuY29kZWQgPSBIVFRQX0ZBQ1RPUlkuY3JlYXRlSFRUUFVybEVuY29kZWQoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVSTEVuY29kZWQpOwotCi0gICAgYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0KLSAgICBIVFRQVXJsUmVwbGFjZW1lbnQgaHR0cFVSTFJlcGxhY2VtZW50ID0gSFRUUF9GQUNUT1JZLmNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpOwotICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwVVJMUmVwbGFjZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZEhUVFBPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYmluZGluZ09wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgSFRUUE9wZXJhdGlvbiBodHRwT3BlcmF0aW9uID0gSFRUUF9GQUNUT1JZLmNyZWF0ZUhUVFBPcGVyYXRpb24oKTsKLQotICAgIGh0dHBPcGVyYXRpb24uc2V0TG9jYXRpb25VUkkoSFRUUF9MT0NBVElPTl9VUkkpOwotCi0gICAgaHR0cE9wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwT3BlcmF0aW9uKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL01JTUVFeHRlbnNpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvTUlNRUV4dGVuc2lvbnNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOGEyYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvTUlNRUV4dGVuc2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5XU0RMVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgTUlNRSBiaW5kaW5nIGV4dGVuc2lvbnMuIAotICovCi1wdWJsaWMgY2xhc3MgTUlNRUV4dGVuc2lvbnNUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTUlNRUZhY3RvcnkgTUlNRV9GQUNUT1JZID0gTUlNRUZhY3RvcnkuZUlOU1RBTkNFOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFNPQVBGYWN0b3J5IFNPQVBfRkFDVE9SWSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfTkFNRVNQQUNFID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRVRlc3QiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBNSU1FRXh0ZW5zaW9uc1Rlc3QoIk1JTUVFeHRlbnNpb25zQ3JlYXRpb24iKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1JTUVFeHRlbnNpb25zQ3JlYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBNSU1FRXh0ZW5zaW9uc1Rlc3QoIkVNRlNlcmlhbGl6YXRpb24iKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1JTUVFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgTUlNRUV4dGVuc2lvbnNUZXN0KCJNSU1FRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNSU1FRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIE1JTUVFeHRlbnNpb25zVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFeHRlbnNpb25zQ3JlYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVUZXN0LndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSAiTUlNRVRlc3RCaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKFRBUkdFVF9OQU1FU1BBQ0UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oInRlc3RPcGVyYXRpb24iLCBudWxsLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG11bHRpcGFydCA9IE1JTUVfRkFDVE9SWS5jcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpOwotICAgICAgYmluZGluZ091dHB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChtdWx0aXBhcnQpOwotICAgICAgbXVsdGlwYXJ0LnRvU3RyaW5nKCk7Ci0gICAgICBFbGVtZW50IG11bHRpcGFydEVsZW1lbnQgPSBtdWx0aXBhcnQuZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbChtdWx0aXBhcnRFbGVtZW50KTsKLQotICAgICAgTUlNRVBhcnQgbWltZVBhcnQgPSBNSU1FX0ZBQ1RPUlkuY3JlYXRlTUlNRVBhcnQoKTsKLSAgICAgIG11bHRpcGFydC5hZGRNSU1FUGFydChtaW1lUGFydCk7Ci0gICAgICBFbGVtZW50IG1pbWVQYXJ0RWxlbWVudCA9IG1pbWVQYXJ0LmdldEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IG1pbWVQYXJ0RWxlbWVudHMgPSBtdWx0aXBhcnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkksIE1JTUVDb25zdGFudHMuUEFSVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgbWltZVBhcnRFbGVtZW50cy5nZXRMZW5ndGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWltZVBhcnRFbGVtZW50LCBtaW1lUGFydEVsZW1lbnRzLml0ZW0oMCkpOwotCi0gICAgICBTT0FQQm9keSBzb2FwQm9keSA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQQm9keSgpOwotICAgICAgc29hcEJvZHkuc2V0VXNlKCJsaXRlcmFsIik7Ci0gICAgICBtaW1lUGFydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gICAgICBtaW1lUGFydC50b1N0cmluZygpOwotICAgICAgRWxlbWVudCBzb2FwQm9keUVsZW1lbnQgPSBzb2FwQm9keS5nZXRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUVsZW1lbnRzID0gbWltZVBhcnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuQk9EWV9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgc29hcEJvZHlFbGVtZW50cy5nZXRMZW5ndGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoc29hcEJvZHlFbGVtZW50LCBzb2FwQm9keUVsZW1lbnRzLml0ZW0oMCkpOwotICAgICAgCi0gICAgICBtaW1lUGFydCA9IE1JTUVfRkFDVE9SWS5jcmVhdGVNSU1FUGFydCgpOwotICAgICAgbXVsdGlwYXJ0LmFkZE1JTUVQYXJ0KG1pbWVQYXJ0KTsKLQotICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSBNSU1FX0ZBQ1RPUlkuY3JlYXRlTUlNRUNvbnRlbnQoKTsKLSAgICAgIG1pbWVDb250ZW50LnNldFBhcnQoInJlc3BvbnNlRGF0YSIpOwotICAgICAgbWltZUNvbnRlbnQuc2V0VHlwZSgidGV4dC9iaW5hcnkiKTsKLSAgICAgIG1pbWVDb250ZW50LnRvU3RyaW5nKCk7Ci0gICAgICAKLSAgICAgIG1pbWVQYXJ0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVDb250ZW50KTsKLSAgICAgIAotICAgICAgbWltZVBhcnRFbGVtZW50ID0gbWltZVBhcnQuZ2V0RWxlbWVudCgpOwotICAgICAgbWltZVBhcnRFbGVtZW50cyA9IG11bHRpcGFydEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgTUlNRUNvbnN0YW50cy5QQVJUX0VMRU1FTlRfVEFHKTsKLSAgICAgIGFzc2VydEVxdWFscygyLCBtaW1lUGFydEVsZW1lbnRzLmdldExlbmd0aCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtaW1lUGFydEVsZW1lbnQsIG1pbWVQYXJ0RWxlbWVudHMuaXRlbSgxKSk7Ci0gICAgICAKLSAgICAgIExpc3QgbWltZVBhcnRzID0gbXVsdGlwYXJ0LmdldE1JTUVQYXJ0cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1pbWVQYXJ0cy5zaXplKCkpOwotICAgICAgCi0gICAgICBNSU1FTWltZVhtbCBtaW1lWE1MID0gTUlNRV9GQUNUT1JZLmNyZWF0ZU1JTUVNaW1lWG1sKCk7Ci0gICAgICBiaW5kaW5nT3V0cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVYTUwpOwotICAgICAgbWltZVhNTC5zZXRQYXJ0KCJ4bWxEYXRhIik7Ci0gICAgICBtaW1lWE1MLnRvU3RyaW5nKCk7Ci0gICAgICAKLSAgICAgIERlZmluaXRpb25Mb2FkZXIuc3RvcmUoZGVmaW5pdGlvbiwgInNhbXBsZXMvZ2VuZXJhdGVkL01JTUVUZXN0T3V0LndzZGwiKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVFeGFtcGxlIjsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gIk1JTUVFeGFtcGxlQmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgbG9hZHMgYSBXU0RMIG1vZGVsIHRoZW4gc2F2ZXMgaXQgdXNpbmcgdGhlIGRlZmF1bHQgRU1GIHNlcmlhbGl6YXRpb24KLSAgICogaW5zdGVhZCBvZiB0aGUgV1NETCBYTUwgZm9ybWF0LCB0aGVuIGxvYWRzIGl0IGFnYWluLiBUaGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlCi0gICAqIHRoZSBFTUYgZSogbWV0aG9kcyB0byBhaWQgaW4gaWRlbnRpZnlpbmcgcmVhbCBjb2RlIGNvdmVyYWdlIGlzc3Vlcy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL01JTUVFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1NPQVBFeHRlbnNpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvU09BUEV4dGVuc2lvbnNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNGMyZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvU09BUEV4dGVuc2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgU09BUCBiaW5kaW5nIGV4dGVuc2lvbnMuIAotICovCi1wdWJsaWMgY2xhc3MgU09BUEV4dGVuc2lvbnNUZXN0IGV4dGVuZHMgV1NETEV4dGVuc2lvbnNUZXN0Ci17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1RSQU5TUE9SVF9VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUkkgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BQ1RJT05fVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvTmV3T3BlcmF0aW9uIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTT0FQRmFjdG9yeSBTT0FQX0ZBQ1RPUlkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0RPQ1VNRU5UID0gImRvY3VtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9SUEMgPSAicnBjIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfTElURVJBTCA9ICJsaXRlcmFsIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfRU5DT0RFRCA9ICJlbmNvZGVkIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQRXh0ZW5zaW9uc0NyZWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTT0FQRXh0ZW5zaW9uc0NyZWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJFTUZTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTT0FQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQQ29udGVudEdlbmVyYXRvciIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U09BUENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgU09BUEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U09BUEV4dGVuc2lvbnNDcmVhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvU09BUFRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJTT0FQVGVzdFNPQVAiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgYmluZGluZ05hbWUpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICAgIGFkZFNPQVBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIGFkZFNPQVBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAgICAgYWRkU09BUEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgIGFkZFNPQVBCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXQpOwotCi0gICAgICBTdHJpbmcgZmF1bHROYW1lID0gImZhdWx0IjsgLy8kTk9OLU5MUy0xJAotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoZmF1bHROYW1lKTsKLQotICAgICAgYWRkU09BUEJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHQpOwotCi0gICAgICBhZGRTT0FQQWRkcmVzcyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBDb250ZW50R2VuZXJhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgU09BUENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IChTT0FQQ29udGVudEdlbmVyYXRvcilDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZSgKLSAgICAgICAgIlNPQVAiKTsKLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICJodHRwOi8vdGVzdC5vcmcvZXhhbXBsZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGxvY2F0aW9uVVJJKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0U3R5bGUoU09BUENvbnRlbnRHZW5lcmF0b3IuU1RZTEVfRE9DVU1FTlQpOwotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiU09BUFRlc3QiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvIjsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIHNlcnZpY2VOYW1lKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotCi0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnQoIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMCwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlUG9ydENvbnRlbnQocG9ydCk7Ci0KLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotICAgICAgYXNzZXJ0VHJ1ZShleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKTsKLSAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgICAgYXNzZXJ0RXF1YWxzKGxvY2F0aW9uVVJJLCBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpKTsKLQotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJTT0FQVGVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotCi0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZywgcG9ydFR5cGUpOwotCi0gICAgICAvLyBUT0RPIENvbXBsZXRlIHRoaXMgdGVzdC4KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgV1NETCBtb2RlbCB0aGVuIHNhdmVzIGl0IHVzaW5nIHRoZSBkZWZhdWx0IEVNRiBzZXJpYWxpemF0aW9uCi0gICAqIGluc3RlYWQgb2YgdGhlIFdTREwgWE1MIGZvcm1hdCwgdGhlbiBsb2FkcyBpdCBhZ2Fpbi4gVGhlIGludGVudCBpcyB0byBleGVyY2lzZQotICAgKiB0aGUgRU1GIGUqIG1ldGhvZHMgdG8gYWlkIGluIGlkZW50aWZ5aW5nIHJlYWwgY29kZSBjb3ZlcmFnZSBpc3N1ZXMuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCBmYWxzZSk7Ci0KLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS54bWwiKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCB0cnVlKTsKLQotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENFbmNvZGVkU09BUEV4YW1wbGUud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBmaWxlVVJJID0gVVJJLmNyZWF0ZUZpbGVVUkkoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9nZW5lcmF0ZWQvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLnhtbCIpOwotICAgICAgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOwotICAgICAgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0gICAgICByZXNvdXJjZS5zYXZlKG51bGwpOwotICAgICAgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKGZpbGVVUkksIHRydWUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgc2VydmljZU5hbWUpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXNlcnZpY2UuZ2V0UG9ydCgiRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEFkZHJlc3MsIFNPQVBDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFLCAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJEb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZVNPQVAiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBiaW5kaW5nTmFtZSk7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gKFNPQVBCaW5kaW5nKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFN0cmluZyBzdHlsZSA9IHNvYXBCaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoU1RZTEVfRE9DVU1FTlQsIHN0eWxlKTsKLQotICAgICAgY2hlY2tTdHJpbmdBdHRyaWJ1dGVSZWNvbmNpbGlhdGlvbihzb2FwQmluZGluZywgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIFNUWUxFX1JQQywgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CSU5ESU5HX19TVFlMRSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEJpbmRpbmcsIFNPQVBDb25zdGFudHMuVFJBTlNQT1JUX0FUVFJJQlVURSwgSFRUUF9UUkFOU1BPUlRfVVJJLCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkkpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIHN0eWxlID0gc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFNUWUxFX0RPQ1VNRU5ULCBzdHlsZSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcE9wZXJhdGlvbiwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIFNUWUxFX1JQQywgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9PUEVSQVRJT05fX1NUWUxFKTsKLQotICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IChCaW5kaW5nSW5wdXQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygyLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLQotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgU3RyaW5nIHVzZSA9IHNvYXBCb2R5LmdldFVzZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFVTRV9MSVRFUkFMLCB1c2UpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBCb2R5LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUsIFVTRV9FTkNPREVELCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JPRFlfX1VTRSk7Ci0KLSAgICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMSk7Ci0KLSAgICAgIFN0cmluZyBwYXJ0ID0gc29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImhlYWRlciIsIHBhcnQpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBIZWFkZXIsIFNPQVBDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUsICJ0ZXN0IiwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfQkFTRV9fUEFSVCk7Ci0KLSAgICAgIFFOYW1lIGlucHV0TWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIk5ld09wZXJhdGlvblJlcXVlc3RNc2ciKTsKLSAgICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKGlucHV0TWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoaW5wdXRNZXNzYWdlKTsKLQotICAgICAgUU5hbWUgc29hcEhlYWRlck1lc3NhZ2VRTmFtZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKGlucHV0TWVzc2FnZVFOYW1lLCBzb2FwSGVhZGVyTWVzc2FnZVFOYW1lKTsKLQotICAgICAgRWxlbWVudCBzb2FwSGVhZGVyRWxlbWVudCA9IHNvYXBIZWFkZXIuZ2V0RWxlbWVudCgpOwotICAgICAgQXR0ciBtZXNzYWdlQXR0cmlidXRlID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKTsKLQotICAgICAgUU5hbWUgdGVzdE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJUZXN0TXNnIik7Ci0gICAgICBNZXNzYWdlIHRlc3RNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHRlc3RNZXNzYWdlUU5hbWUpOwotICAgICAgbWVzc2FnZUF0dHJpYnV0ZS5zZXRWYWx1ZSgidG5zOlRlc3RNc2ciKTsKLSAgICAgIGFzc2VydEVxdWFscyh0ZXN0TWVzc2FnZSwgc29hcEhlYWRlci5nZXRFTWVzc2FnZSgpKTsKLQotICAgICAgUU5hbWUgbWVzc2FnZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RNZXNzYWdlUU5hbWUsIG1lc3NhZ2UpOwotCi0gICAgICBzb2FwSGVhZGVyLnNldE1lc3NhZ2UobnVsbCk7Ci0gICAgICBtZXNzYWdlQXR0cmlidXRlID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKTsKLSAgICAgIGFzc2VydE51bGwobWVzc2FnZUF0dHJpYnV0ZSk7Ci0KLSAgICAgIExpc3Qgc29hcEhlYWRlckZhdWx0cyA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNvYXBIZWFkZXJGYXVsdHMuc2l6ZSgpKTsKLSAgICAgIHNvYXBIZWFkZXJGYXVsdHMuY2xlYXIoKTsKLSAgICAgIE5vZGVMaXN0IGhlYWRlckZhdWx0Tm9kZXMgPSBzb2FwSGVhZGVyRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShTT0FQQ29uc3RhbnRzLkhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMCwgaGVhZGVyRmF1bHROb2Rlcy5nZXRMZW5ndGgoKSk7Ci0KLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpOwotICAgICAgRWxlbWVudCBzb2FwSGVhZGVyRmF1bHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBzb2FwSGVhZGVyRWxlbWVudC5hcHBlbmRDaGlsZChzb2FwSGVhZGVyRmF1bHRFbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKS5zaXplKCkpOwotICAgICAgc29hcEhlYWRlckZhdWx0RWxlbWVudC5zZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSwgInRuczpUZXN0TXNnIik7Ci0gICAgICBTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0ID0gKFNPQVBIZWFkZXJGYXVsdClzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKS5nZXQoMCk7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdE1lc3NhZ2VRTmFtZSwgc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdE1lc3NhZ2UsIHNvYXBIZWFkZXJGYXVsdC5nZXRFTWVzc2FnZSgpKTsKLQotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoImZhdWx0Iik7Ci0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBTT0FQRmF1bHQgc29hcEZhdWx0ID0gKFNPQVBGYXVsdClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotCi0gICAgICBTdHJpbmcgbmFtZSA9IHNvYXBGYXVsdC5nZXROYW1lKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImZhdWx0IiwgbmFtZSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEZhdWx0LCBTT0FQQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCAidGVzdCIsIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfRkFVTFRfX05BTUUpOwotCi0gICAgICBzb2FwRmF1bHQuc2V0TmFtZXNwYWNlVVJJKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Rlc3QiKTsKLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEZhdWx0LCBTT0FQQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUsICJ0ZXN0IiwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBBZGRyZXNzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0gICAgc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoTE9DQVRJT05fVVJJKTsKLQotICAgIHNvYXBBZGRyZXNzLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiU09BUFRlc3QiOyAvLyROT04tTkxTLTEkCi0gICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIHNlcnZpY2VOYW1lKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnQoIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgcG9ydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQWRkcmVzcyk7Ci0gICAgcG9ydC50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBCaW5kaW5nKCk7Ci0KLSAgICBzb2FwQmluZGluZy5zZXRTdHlsZShTVFlMRV9ET0NVTUVOVCk7Ci0gICAgc29hcEJpbmRpbmcuc2V0VHJhbnNwb3J0VVJJKEhUVFBfVFJBTlNQT1JUX1VSSSk7Ci0KLSAgICBzb2FwQmluZGluZy50b1N0cmluZygpOwotCi0gICAgYmluZGluZy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQmluZGluZyk7Ci0gICAgYmluZGluZy50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpOwotCi0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQRmF1bHQoKTsKLSAgICBzb2FwRmF1bHQuc2V0TmFtZShmYXVsdE5hbWUpOwotICAgIHNvYXBGYXVsdC50b1N0cmluZygpOwotCi0gICAgc29hcEZhdWx0LnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBiaW5kaW5nRmF1bHQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEZhdWx0KTsKLSAgICBiaW5kaW5nRmF1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQpCi0gIHsKLSAgICBiaW5kaW5nSW5wdXQudG9TdHJpbmcoKTsKLQotICAgIFNPQVBCb2R5IGlucHV0U09BUEJvZHkgPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaW5wdXRTT0FQQm9keSk7Ci0KLSAgICBpbnB1dFNPQVBCb2R5LnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZyBtZXNzYWdlTmFtZSA9ICJOZXdPcGVyYXRpb25SZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotICAgIERlZmluaXRpb24gZW5jbG9zaW5nRGVmaW5pdGlvbiA9IGJpbmRpbmdJbnB1dC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGVuY2xvc2luZ0RlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgbWVzc2FnZU5hbWUpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVuY2xvc2luZ0RlZmluaXRpb247Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgUGFydCBwYXJ0ID0gKFBhcnQpbWVzc2FnZS5nZXRQYXJ0KCJwYXJhbWV0ZXJzIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgaW5wdXRTT0FQQm9keS5zZXRQYXJ0cyhwYXJ0cyk7Ci0gICAgaW5wdXRTT0FQQm9keS50b1N0cmluZygpOwotCi0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBIZWFkZXIoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlcik7Ci0KLSAgICBzb2FwSGVhZGVyLnNldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLQotICAgIFN0cmluZyBoZWFkZXJQYXJ0ID0gImhlYWRlciI7IC8vJE5PTi1OTFMtMSQKLSAgICBzb2FwSGVhZGVyLnNldFBhcnQoaGVhZGVyUGFydCk7Ci0KLSAgICBzb2FwSGVhZGVyLnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBzb2FwSGVhZGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBhZGRTT0FQSGVhZGVyRmF1bHQobWVzc2FnZVFOYW1lLCBzb2FwSGVhZGVyKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICAvLyBFeGVyY2lzZSBzb21lIG9mIHRoZSBSUEMgLyBlbmNvZGVkIHN0dWZmLgotCi0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBzb2FwQm9keS5zZXRVc2UoVVNFX0VOQ09ERUQpOwotCi0gICAgRUxpc3QgZW5jb2RpbmdTdHlsZXMgPSBuZXcgQmFzaWNFTGlzdCgpOwotICAgIGVuY29kaW5nU3R5bGVzLmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICBlbmNvZGluZ1N0eWxlcy5hZGQoInRlc3QiKTsKLSAgICAKLSAgICBzb2FwQm9keS5zZXRFbmNvZGluZ1N0eWxlcyhlbmNvZGluZ1N0eWxlcyk7Ci0gICAgCi0gICAgTGlzdCBlRW5jb2RpbmdTdHlsZXMgPSBzb2FwQm9keS5nZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgZUVuY29kaW5nU3R5bGVzLnNpemUoKSk7Ci0gICAgCi0gICAgc29hcEJvZHkudG9TdHJpbmcoKTsKLQotICAgIGJpbmRpbmdPdXRwdXQudG9TdHJpbmcoKTsKLSAgICBiaW5kaW5nT3V0cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQSGVhZGVyRmF1bHQoUU5hbWUgbWVzc2FnZVFOYW1lLCBTT0FQSGVhZGVyIHNvYXBIZWFkZXIpCi0gIHsKLSAgICBTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0ID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIHNvYXBIZWFkZXIuYWRkU09BUEhlYWRlckZhdWx0KHNvYXBIZWFkZXJGYXVsdCk7Ci0KLSAgICBMaXN0IHNvYXBIZWFkZXJGYXVsdHMgPSBzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgc29hcEhlYWRlckZhdWx0cy5zaXplKCkpOwotICAgIFNPQVBIZWFkZXJGYXVsdCBleHBlY3RlZFNvYXBIZWFkZXJGYXVsdCA9IChTT0FQSGVhZGVyRmF1bHQpc29hcEhlYWRlckZhdWx0cy5nZXQoMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU29hcEhlYWRlckZhdWx0LCBzb2FwSGVhZGVyRmF1bHQpOwotCi0gICAgc29hcEhlYWRlckZhdWx0LnNldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLQotICAgIFN0cmluZyBoZWFkZXJGYXVsdFBhcnQgPSAiaGVhZGVyRmF1bHQxIjsgLy8kTk9OLU5MUy0xJAotICAgIHNvYXBIZWFkZXJGYXVsdC5zZXRQYXJ0KGhlYWRlckZhdWx0UGFydCk7Ci0KLSAgICAvLyBUZXN0IHRoZSByZW1vdmUgcGFydC4KLQotICAgIHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLmNsZWFyKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkU09BUE9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U3R5bGUoU1RZTEVfRE9DVU1FTlQpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSShTT0FQX0FDVElPTl9VUkkpOwotCi0gICAgc29hcE9wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9XU0RMRXh0ZW5zaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1dTRExFeHRlbnNpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjc3OWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1dTRExFeHRlbnNpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLS8qKgotICogQmFzZSBjbGFzcyBmb3IgV1NETCBleHRlbnNpb24gdGVzdHMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMRXh0ZW5zaW9uc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHRlc3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gCi0gICAqIEBwYXJhbSBuYW1lIHRoZSB0ZXN0IG5hbWUuCi0gICAqLwotICBwdWJsaWMgV1NETEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgYSBTdHJpbmcgYXR0cmlidXRlIHJlY29uY2lsaWF0aW9uLiBUaGUgY29kZSBjaGFuZ2VzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgdGhyb3VnaCB0aGUgRE9NIGFuZCBjb21wYXJlcyBpdCB3aXRoIHRoZSB2YWx1ZSBvYnRhaW5lZCBieSBjYWxsaW5nIGVHZXQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCB0aGUgV1NETCBlbGVtZW50IHRvIHRlc3QKLSAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgdGhlIGF0dHJpYnV0ZSBuYW1lCi0gICAqIEBwYXJhbSBleHBlY3RlZFZhbHVlIHRoZSBleHBlY3RlZCB2YWx1ZQotICAgKiBAcGFyYW0gZmVhdHVyZSB0aGUgRU1GIGZlYXR1cmUgb2YgdGhlIGF0dHJpYnV0ZSB0byB0ZXN0LiAKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oCi0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQsCi0gICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsCi0gICAgU3RyaW5nIGV4cGVjdGVkVmFsdWUsCi0gICAgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpCi0gIHsKLSAgICBFT2JqZWN0IGVPYmplY3QgPSAoRU9iamVjdCl3c2RsRWxlbWVudDsKLQotICAgIFN0cmluZyBpbml0aWFsVmFsdWUgPSAoU3RyaW5nKWVPYmplY3QuZUdldChmZWF0dXJlKTsKLSAgICAKLSAgICBFbGVtZW50IGVsZW1lbnQgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgZU9iamVjdC5lVW5zZXQoZmVhdHVyZSk7Ci0gICAgQXR0ciBhdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlTmFtZSk7Ci0gICAgYXNzZXJ0TnVsbChhdHRyaWJ1dGUpOwotCi0gICAgZU9iamVjdC5lU2V0KGZlYXR1cmUsIGluaXRpYWxWYWx1ZSk7Ci0gICAgCi0gICAgYXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZU5hbWUpOwotICAgIGF0dHJpYnV0ZS5zZXRWYWx1ZShleHBlY3RlZFZhbHVlKTsKLQotICAgIFN0cmluZyBhY3R1YWxWYWx1ZSA9IChTdHJpbmcpZU9iamVjdC5lR2V0KGZlYXR1cmUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFZhbHVlLCBhY3R1YWxWYWx1ZSk7Ci0gICAgCi0gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7Ci0gICAgYWN0dWFsVmFsdWUgPSAoU3RyaW5nKWVPYmplY3QuZUdldChmZWF0dXJlKTsKLSAgICBhc3NlcnROdWxsKGFjdHVhbFZhbHVlKTsKLQotICAgIGVPYmplY3QuZVNldChmZWF0dXJlLCBpbml0aWFsVmFsdWUpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvRGVmaW5pdGlvbkxvYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvRGVmaW5pdGlvbkxvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjkwYjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25Mb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbDsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRGVmaW5pdGlvbkxvYWRlcgotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBwcm92aWRlcyBzdGF0aWMgbWV0aG9kcyBvbmx5LgotICAgKi8KLSAgcHJpdmF0ZSBEZWZpbml0aW9uTG9hZGVyKCkKLSAgewotICB9Ci0KLSAgc3RhdGljIHB1YmxpYyBEZWZpbml0aW9uIGxvYWQoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBsb2FkKGZpbGVuYW1lLCBmYWxzZSk7Ci0gIH0KLQotICBzdGF0aWMgcHVibGljIERlZmluaXRpb24gbG9hZChTdHJpbmcgZmlsZW5hbWUsIGJvb2xlYW4gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBsb2FkKGZpbGVuYW1lLCB1c2VFeHRlbnNpb25GYWN0b3JpZXMsIGZhbHNlKTsKLSAgfQotCi0gIHN0YXRpYyBwdWJsaWMgRGVmaW5pdGlvbiBsb2FkKFN0cmluZyBmaWxlbmFtZSwgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMsIGJvb2xlYW4gdHJhY2tMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBmaWxlbmFtZSBpcyBhbiBhYnNvbHV0ZSBwYXRoCi0KLSAgICBVUkkgdXJpID0gbnVsbDsKLSAgICB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlbmFtZSk7Ci0KLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXNvdXJjZVNldC5nZXRBZGFwdGVyRmFjdG9yaWVzKCkuYWRkKG5ldyBXU0RMTW9kZWxMb2NhdG9yQWRhcHRlckZhY3RvcnkoKSk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5KCkpOwotCi0gICAgV1NETFJlc291cmNlSW1wbCB3c2RsTWFpblJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOwotICAgIHdzZGxNYWluUmVzb3VyY2Uuc2V0VVJJKHVyaSk7Ci0gICAgamF2YS51dGlsLk1hcCBtYXAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLkNPTlRJTlVFX09OX0xPQURfRVJST1IsIEJvb2xlYW4udmFsdWVPZih0cnVlKSk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTLCBCb29sZWFuLnZhbHVlT2YodXNlRXh0ZW5zaW9uRmFjdG9yaWVzKSk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLlRSQUNLX0xPQ0FUSU9OLCBCb29sZWFuLnZhbHVlT2YodHJhY2tMb2NhdGlvbikpOwotICAgIHdzZGxNYWluUmVzb3VyY2UubG9hZChtYXApOwotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIHJlc291cmNlcyA9IHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLml0ZXJhdG9yKCk7IHJlc291cmNlcy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCByZXNvdXJjZSA9IHJlc291cmNlcy5uZXh0KCk7Ci0gICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKQotICAgICAgewotICAgICAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxSZXNvdXJjZSA9IChXU0RMUmVzb3VyY2VJbXBsKXJlc291cmNlOwotICAgICAgICBkZWZpbml0aW9uID0gd3NkbFJlc291cmNlLmdldERlZmluaXRpb24oKTsKLSAgICAgICAgcmV0dXJuIGRlZmluaXRpb247Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBzdGF0aWMgcHVibGljIHZvaWQgc3RvcmUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLy8gZmlsZW5hbWUgaXMgYW4gYWJzb2x1dGUgcGF0aAotCi0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSBkZWZpbml0aW9uLmVSZXNvdXJjZSgpOwotICAgIHJlc291cmNlLnNldFVSSShVUkkuY3JlYXRlRmlsZVVSSShmaWxlbmFtZSkpOwotICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25WaXNpdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9EZWZpbml0aW9uVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZhNjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25WaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEZWZpbml0aW9uVmlzaXRvciBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0KLSAgLy8gQWRkZWQgZm9yIEpVbml0Ci0gIHB1YmxpYyBEZWZpbml0aW9uVmlzaXRvcihTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIERlZmluaXRpb25WaXNpdG9yKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLQotICAvLyBtYWluIGVudHJ5Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KCkKLSAgewotICAgIHZpc2l0RGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRJbXBvcnQoKEltcG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgVHlwZXMgdHlwZXMgPSBkZWYuZ2V0RVR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICB2aXNpdFR5cGVzKHR5cGVzKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0TWVzc2FnZSgoTWVzc2FnZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydFR5cGUoKFBvcnRUeXBlKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRFQmluZGluZ3MoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEJpbmRpbmcoKEJpbmRpbmcpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEVTZXJ2aWNlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0U2VydmljZSgoU2VydmljZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoZGVmLCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpOwotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRQYXJ0KChQYXJ0KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KTsKLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0T3BlcmF0aW9uKChPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICB2aXNpdElucHV0KChJbnB1dClpbnB1dCk7Ci0KLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICB2aXNpdE91dHB1dCgoT3V0cHV0KW91dHB1dCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRGYXVsdCgoRmF1bHQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0SW5wdXQoSW5wdXQgaW5wdXQpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoYmluZGluZywgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgIHZpc2l0QmluZGluZ0lucHV0KChCaW5kaW5nSW5wdXQpaW5wdXQpOwotCi0gICAgQmluZGluZ091dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgICB2aXNpdEJpbmRpbmdPdXRwdXQoKEJpbmRpbmdPdXRwdXQpb3V0cHV0KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nRmF1bHQoKEJpbmRpbmdGYXVsdClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBvcGVyYXRpb24uZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQob3BlcmF0aW9uLCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBpbnB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChpbnB1dCwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG91dHB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChvdXRwdXQsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYXVsdC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChmYXVsdCwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydCgoUG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KHNlcnZpY2UsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChwb3J0LCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb3duZXIsIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETDRKRGVmaW5pdGlvblZpc2l0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTREw0SkRlZmluaXRpb25WaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MGJmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETDRKRGVmaW5pdGlvblZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETDRKRGVmaW5pdGlvblZpc2l0b3IgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIC8vIEFkZGVkIGZvciBKVW5pdAotICBwdWJsaWMgV1NETDRKRGVmaW5pdGlvblZpc2l0b3IoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHByb3RlY3RlZCBXU0RMNEpEZWZpbml0aW9uVmlzaXRvcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgLy8gbWFpbiBlbnRyeQotICBwdWJsaWMgdm9pZCB2aXNpdCgpCi0gIHsKLSAgICB2aXNpdERlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBqYXZhLnV0aWwuTWFwIGltcG9ydHMgPSBkZWYuZ2V0SW1wb3J0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gaW1wb3J0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIEltcG9ydCBteUltcG9ydCA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBteUltcG9ydCA9IChJbXBvcnQpKChqYXZhLnV0aWwuQXJyYXlMaXN0KWltcG9ydHMuZ2V0KGl0ZXJhdG9yLm5leHQoKSkpLmdldCgwKTsKLSAgICAgIHZpc2l0SW1wb3J0KG15SW1wb3J0KTsKLSAgICB9Ci0KLSAgICBUeXBlcyB0eXBlcyA9IGRlZi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgdmlzaXRUeXBlcyh0eXBlcyk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0TWVzc2FnZSgoTWVzc2FnZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRQb3J0VHlwZSgoUG9ydFR5cGUpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nKChCaW5kaW5nKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0U2VydmljZSgoU2VydmljZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpOwotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2UuZ2V0UGFydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdFBhcnQoKFBhcnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0UGFydChQYXJ0IHBhcnQpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdE9wZXJhdGlvbigoT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0SW5wdXQoKTsKLSAgICB2aXNpdElucHV0KChJbnB1dClpbnB1dCk7Ci0KLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldE91dHB1dCgpOwotICAgIHZpc2l0T3V0cHV0KChPdXRwdXQpb3V0cHV0KTsKLQotICAgIGphdmEudXRpbC5NYXAgZmF1bHRzID0gb3BlcmF0aW9uLmdldEZhdWx0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZmF1bHRzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgRmF1bHQgZmF1bHQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZmF1bHQgPSAoRmF1bHQpZmF1bHRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgdmlzaXRGYXVsdChmYXVsdCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCk7Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCk7Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCk7Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbilpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgdmlzaXRCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dClpbnB1dCk7Ci0KLSAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgdmlzaXRCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW91dHB1dCk7Ci0KLSAgICBqYXZhLnV0aWwuTWFwIGJpbmRpbmdGYXVsdHMgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZ0ZhdWx0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCliaW5kaW5nRmF1bHRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgdmlzaXRCaW5kaW5nRmF1bHQoYmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0KLSAgICBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGlucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG91dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYXVsdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydCgoUG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETENvbnZlcnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETENvbnZlcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTliMDI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExDb252ZXJ0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIFdTRExDb252ZXJ0ZXIgZXh0ZW5kcyBEZWZpbml0aW9uVmlzaXRvcgotewotICBwcml2YXRlIERvY3VtZW50IGRvYzsKLQotICBwcml2YXRlIEVsZW1lbnQgZGVzY3JpcHRpb247Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRUeXBlczsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudFNlcnZpY2U7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRFbmRwb2ludDsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEludGVyZmFjZTsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudE9wZXJhdGlvbjsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEJpbmRpbmc7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uOwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50QmluZGluZ0lucHV0OwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50QmluZGluZ091dHB1dDsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEJpbmRpbmdGYXVsdDsKLQotICBwcml2YXRlIFN0cmluZyB3c2RsTmFtZXNwYWNlUHJlZml4OwotCi0gIHByaXZhdGUgU3RyaW5nIHhzZE5hbWVzcGFjZVByZWZpeDsKLQotICAvLyBBZGRlZCBmb3IgSlVuaXQKLSAgcHVibGljIFdTRExDb252ZXJ0ZXIoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbgotICAgKi8KLSAgcHVibGljIFdTRExDb252ZXJ0ZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc3VwZXIoZGVmaW5pdGlvbik7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViCi0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZTIwKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgY3JlYXRlRG9jdW1lbnQoKTsKLSAgICB2aXNpdCgpOwotICAgIHNlcmlhbGl6ZShmaWxlbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jKTsKLSAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0gICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLSAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTgiKTsKLSAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiNCIpOwotICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlRG9jdW1lbnQoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgZG9jID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpLm5ld0RvY3VtZW50KCk7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgY3JlYXRlV1NETEVsZW1lbnQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwiLCBuYW1lKTsKLSAgICBpZiAod3NkbE5hbWVzcGFjZVByZWZpeCAhPSBudWxsKQotICAgICAgZWxlbWVudC5zZXRQcmVmaXgod3NkbE5hbWVzcGFjZVByZWZpeCk7Ci0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzRG9jdW1lbnRhdGlvbihFbGVtZW50IGRvY0VsZW1lbnQsIEVsZW1lbnQgcGFyZW50KQotICB7Ci0gICAgaWYgKGRvY0VsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIEVsZW1lbnQgYWRvcHRlZERvY0VsZW1lbnQgPSAoRWxlbWVudClkb2MuaW1wb3J0Tm9kZShkb2NFbGVtZW50LCB0cnVlKTsKLSAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoYWRvcHRlZERvY0VsZW1lbnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgZGVzY3JpcHRpb24gPSBjcmVhdGVXU0RMRWxlbWVudCgiZGVzY3JpcHRpb24iKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgZGVzY3JpcHRpb24pOwotCi0gICAgLy8gVEJEIC0gRGV0ZXJtaW5lIGxhdGVyIGlmIHdlIHdhbnQgdG8gY29udmVydCB0aGUgZG9jdW1lbnQgdG8gdXNlIFNPQVAgMS4yLgotICAgIC8vIEhvd2V2ZXIgYWRkaW5nIHRoZXNlIHR3byBuYW1lc3BhY2VzIG1heSBub3QgYmUgaGFybWZ1bC4KLSAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOnNvYXBlbnYiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMy8wNS9zb2FwLWVudmVsb3AiKTsKLSAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOndzb2FwIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvc29hcDEyIik7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgidGFyZ2V0TmFtZXNwYWNlIiwgdGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICAgIC8qCi0gICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIgotICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiovCi0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBwcmVmaXggPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLQotICAgICAgaWYgKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCkgLy8gbWVhbnQgdG8gYmUgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbCIpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwiKTsKLSAgICAgICAgICB3c2RsTmFtZXNwYWNlUHJlZml4ID0gcHJlZml4OwotICAgICAgICAgIGRlc2NyaXB0aW9uLnNldFByZWZpeCh3c2RsTmFtZXNwYWNlUHJlZml4KTsKLSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gU09BUCAxLjIKLSAgICAgIGlmICgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNPQVAgMS4yCi0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHByZWZpeCwgImh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC1lbnZlbG9wIik7Ci0KLSAgICAgICAgLy8gV1NETCAyLjAgYmluZGluZyBmb3IgU09BUCAxLjIKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCJ4bWxuczp3c29hcCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3NvYXAxMiIpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy9pZiAoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIi5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgIC8vICBjb250aW51ZTsKLQotICAgICAgaWYgKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgIHhzZE5hbWVzcGFjZVByZWZpeCA9IHByZWZpeDsgLy8gV2Ugd2lsbCB1c2UgdGhpcyBpbiB2aXNpdEltcG9ydCgpLgotCi0gICAgICBpZiAocHJlZml4Lmxlbmd0aCgpID09IDApIC8vIG1lYW50IHRvIGJlIGRlZmF1bHQgbmFtZXNwYWNlCi0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnMiICsgcHJlZml4LCBuYW1lc3BhY2UpOwotICAgICAgZWxzZQotICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsIG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgZG9jLmFwcGVuZENoaWxkKGRlc2NyaXB0aW9uKTsKLSAgICBzdXBlci52aXNpdERlZmluaXRpb24oZGVmKTsKLQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgPGltcG9ydD4gYSBzY2hlbWEuCi0gICAgaWYgKGltcG9ydGluZ1NjaGVtYSh3c2RsSW1wb3J0KSkKLSAgICB7Ci0gICAgICBjdXJyZW50VHlwZXMgPSBjcmVhdGVXU0RMRWxlbWVudCgidHlwZXMiKTsKLSAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRUeXBlcyk7Ci0KLSAgICAgIC8vICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2Zvby5jb20iIHNjaGVtYUxvY2F0aW9uPSAiYmFyLnhzZCIvPgotICAgICAgRWxlbWVudCBzY2hlbWFJbXBvcnQgPSBkb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJpbXBvcnQiKTsKLSAgICAgIGlmICh4c2ROYW1lc3BhY2VQcmVmaXggPT0gbnVsbCkgLy8gbmVlZCB0byBhZGQgb25lCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnM6eHMiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLSAgICAgICAgeHNkTmFtZXNwYWNlUHJlZml4ID0gInhzIjsKLSAgICAgICAgc2NoZW1hSW1wb3J0LnNldFByZWZpeCh4c2ROYW1lc3BhY2VQcmVmaXgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoISIiLmVxdWFscyh4c2ROYW1lc3BhY2VQcmVmaXgpKSAvLyBpdCBpcyBub3QgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICAgICAgc2NoZW1hSW1wb3J0LnNldFByZWZpeCh4c2ROYW1lc3BhY2VQcmVmaXgpOwotCi0gICAgICBzY2hlbWFJbXBvcnQuc2V0QXR0cmlidXRlKCJuYW1lc3BhY2UiLCB3c2RsSW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIHNjaGVtYUltcG9ydC5zZXRBdHRyaWJ1dGUoInNjaGVtYUxvY2F0aW9uIiwgd3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHdzZGxJbXBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgc2NoZW1hSW1wb3J0KTsKLSAgICAgIGN1cnJlbnRUeXBlcy5hcHBlbmRDaGlsZChzY2hlbWFJbXBvcnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgRWxlbWVudCBpbXBvcnRFbGVtZW50ID0gd3NkbEltcG9ydC5nZXRFbGVtZW50KCk7Ci0gICAgICBFbGVtZW50IGFkb3B0ZWRJbXBvcnRFbGVtZW50ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoaW1wb3J0RWxlbWVudCwgdHJ1ZSk7Ci0gICAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbih3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGFkb3B0ZWRJbXBvcnRFbGVtZW50KTsKLSAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGFkb3B0ZWRJbXBvcnRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaW1wb3J0aW5nU2NoZW1hKEltcG9ydCBteUltcG9ydCkKLSAgewotICAgIGlmIChteUltcG9ydC5nZXREZWZpbml0aW9uKCkgIT0gbnVsbCkgLy8gaXQgaXMgV1NETCBpbXBvcnQKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0VHlwZXMob3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFR5cGVzKFR5cGVzIHR5cGVzKQotICB7Ci0gICAgLy8gY3VycmVudFR5cGVzIG1heSBoYXZlIGJlZW4gY3JlYXRlZCBpbiB2aXNpdEltcG9ydCgpLgotICAgIGlmIChjdXJyZW50VHlwZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjdXJyZW50VHlwZXMgPSBjcmVhdGVXU0RMRWxlbWVudCgidHlwZXMiKTsKLSAgICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHR5cGVzLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRUeXBlcyk7Ci0gICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZChjdXJyZW50VHlwZXMpOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0U2NoZW1hcygpLml0ZXJhdG9yKCk7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IG51bGw7Ci0gICAgRWxlbWVudCBzY2hlbWFFbGVtZW50ID0gbnVsbDsKLSAgICBFbGVtZW50IGFkb3B0ZWRTY2hlbWFFbGVtZW50ID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOwotICAgICAgc2NoZW1hLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgIHNjaGVtYUVsZW1lbnQgPSBzY2hlbWEuZ2V0RWxlbWVudCgpOwotICAgICAgYWRvcHRlZFNjaGVtYUVsZW1lbnQgPSAoRWxlbWVudClkb2MuaW1wb3J0Tm9kZShzY2hlbWFFbGVtZW50LCB0cnVlKTsKLSAgICAgIGN1cnJlbnRUeXBlcy5hcHBlbmRDaGlsZChhZG9wdGVkU2NoZW1hRWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRQYXJ0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KQotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGN1cnJlbnRJbnRlcmZhY2UgPSBjcmVhdGVXU0RMRWxlbWVudCgiaW50ZXJmYWNlIik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ocG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEludGVyZmFjZSk7Ci0KLSAgICBFbGVtZW50IHBvcnRUeXBlRWxlbWVudCA9IHBvcnRUeXBlLmdldEVsZW1lbnQoKTsKLSAgICBpZiAocG9ydFR5cGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudEludGVyZmFjZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBwb3J0VHlwZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEludGVyZmFjZSk7Ci0gICAgc3VwZXIudmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgY3VycmVudE9wZXJhdGlvbiA9IGNyZWF0ZVdTRExFbGVtZW50KCJvcGVyYXRpb24iKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihvcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudE9wZXJhdGlvbik7Ci0KLSAgICBFbGVtZW50IG9wZXJhdGlvbkVsZW1lbnQgPSBvcGVyYXRpb24uZ2V0RWxlbWVudCgpOwotICAgIGlmIChvcGVyYXRpb25FbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudE9wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBvcGVyYXRpb25FbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIE9wZXJhdGlvblR5cGUgb3BUeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSA9PSBvcFR5cGUpCi0gICAgICBjdXJyZW50T3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicGF0dGVybiIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAzL3dzZGwvaW4tb3V0Iik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFID09IG9wVHlwZSkKLSAgICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0QXR0cmlidXRlKCJwYXR0ZXJuIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDMvd3NkbC9vdXQtaW4iKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTiA9PSBvcFR5cGUpCi0gICAgICBjdXJyZW50T3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicGF0dGVybiIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAzL3dzZGwvb3V0LW9ubHkiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk9ORV9XQVkgPT0gb3BUeXBlKQotICAgICAgY3VycmVudE9wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoInBhdHRlcm4iLCAiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMy93c2RsL2luLW9ubHkiKTsKLQotICAgIGN1cnJlbnRJbnRlcmZhY2UuYXBwZW5kQ2hpbGQoY3VycmVudE9wZXJhdGlvbik7Ci0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0SW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgRWxlbWVudCBjdXJyZW50SW5wdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgiaW5wdXQiKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50SW5wdXQpOwotCi0gICAgRWxlbWVudCBpbnB1dEVsZW1lbnQgPSBpbnB1dC5nZXRFbGVtZW50KCk7Ci0KLSAgICBpZiAoaW5wdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudElucHV0LnNldEF0dHJpYnV0ZSgibWVzc2FnZUxhYmVsIiwgaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIEVsZW1lbnQgcGFydEVsZW1lbnQgPSBnZXRQYXJ0RWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKHBhcnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKQotICAgICAgY3VycmVudElucHV0LnNldEF0dHJpYnV0ZSgiZWxlbWVudCIsIHBhcnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZWxlbWVudCIpKTsKLSAgICAvLyBUQkQgLSB3aGF0IGlmIHRoZSBwYXJ0IHVzZXMgInR5cGUiPwotCi0gICAgY3VycmVudE9wZXJhdGlvbi5hcHBlbmRDaGlsZChjdXJyZW50SW5wdXQpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGdldFBhcnRFbGVtZW50KE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZikKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgLy8gVEJEIC0gZm9yIG5vdywgdGFrZSB0aGUgZmlyc3QgcGFydC4KLSAgICBQYXJ0IHBhcnQgPSAoUGFydClpdGVyYXRvci5uZXh0KCk7Ci0gICAgRWxlbWVudCBwYXJ0RWxlbWVudCA9IHBhcnQuZ2V0RWxlbWVudCgpOwotICAgIHJldHVybiBwYXJ0RWxlbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0T3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBFbGVtZW50IGN1cnJlbnRPdXRwdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgib3V0cHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRPdXRwdXQpOwotCi0gICAgRWxlbWVudCBvdXRwdXRFbGVtZW50ID0gb3V0cHV0LmdldEVsZW1lbnQoKTsKLQotICAgIGlmIChvdXRwdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudE91dHB1dC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2VMYWJlbCIsIG91dHB1dEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgRWxlbWVudCBwYXJ0RWxlbWVudCA9IGdldFBhcnRFbGVtZW50KG91dHB1dCk7Ci0gICAgaWYgKHBhcnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKQotICAgICAgY3VycmVudE91dHB1dC5zZXRBdHRyaWJ1dGUoImVsZW1lbnQiLCBwYXJ0RWxlbWVudC5nZXRBdHRyaWJ1dGUoImVsZW1lbnQiKSk7Ci0gICAgLy8gVEJEIC0gd2hhdCBpZiB0aGUgcGFydCB1c2VzICJ0eXBlIj8KLQotICAgIGN1cnJlbnRPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudE91dHB1dCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEZhdWx0KG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRCaW5kaW5nKG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmcgPSBjcmVhdGVXU0RMRWxlbWVudCgiYmluZGluZyIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEJpbmRpbmcpOwotCi0gICAgRWxlbWVudCBiaW5kaW5nRWxlbWVudCA9IGJpbmRpbmcuZ2V0RWxlbWVudCgpOwotICAgIGlmIChiaW5kaW5nRWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICAgIGN1cnJlbnRCaW5kaW5nLnNldEF0dHJpYnV0ZSgibmFtZSIsIGJpbmRpbmdFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLSAgICBpZiAoYmluZGluZ0VsZW1lbnQuaGFzQXR0cmlidXRlKCJ0eXBlIikpCi0gICAgICBjdXJyZW50QmluZGluZy5zZXRBdHRyaWJ1dGUoImludGVyZmFjZSIsIGJpbmRpbmdFbGVtZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpKTsKLQotICAgIC8vIFRCRCAtIGlzIHRoZSBuZXh0IGxpbmUgZml4ZWQgZm9yIFNPQVA/Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zb2FwMTIiKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRBdHRyaWJ1dGUoIndzb2FwOnByb3RvY29sIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC9iaW5kaW5ncy9IVFRQIik7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0QXR0cmlidXRlKCJ3c29hcDptZXBEZWZhdWx0IiwgImh0dHA6Ly93d3cudzMub3JnLjIwMDMvMDUvc29hcC9tZXAvcmVxdWVzdC1yZXNwb25zZSIpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmcpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uID0gY3JlYXRlV1NETEVsZW1lbnQoIm9wZXJhdGlvbiIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50QmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9IG9wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCkuZ2V0TmFtZSgpOwotCi0gICAgLy8gRGV0ZXJtaW5lIHByZWZpeAotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBpZiAoZGVmICE9IG51bGwpCi0gICAgICB0YXJnZXROYW1lc3BhY2UgPSBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgcHJlZml4ID0gZGVmLmdldFByZWZpeCh0YXJnZXROYW1lc3BhY2UpOwotCi0gICAgaWYgKHByZWZpeCA9PSBudWxsKQotICAgICAgcHJlZml4ID0gIiI7Ci0gICAgZWxzZQotICAgICAgcHJlZml4ICs9ICI6IjsKLQotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicmVmIiwgcHJlZml4ICsgb3BlcmF0aW9uTmFtZSk7Ci0KLSAgICBjdXJyZW50QmluZGluZy5hcHBlbmRDaGlsZChjdXJyZW50QmluZGluZ09wZXJhdGlvbik7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBjdXJyZW50QmluZGluZ0lucHV0ID0gY3JlYXRlV1NETEVsZW1lbnQoImlucHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24oaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEJpbmRpbmdJbnB1dCk7Ci0KLSAgICBFbGVtZW50IGlucHV0RWxlbWVudCA9IGlucHV0LmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5wdXROYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgIGlmIChpbnB1dE5hbWUgIT0gbnVsbCkKLSAgICAgIGlucHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBpbnB1dE5hbWUpOwotCi0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmdJbnB1dCk7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nSW5wdXQoaW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdPdXRwdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgib3V0cHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRCaW5kaW5nT3V0cHV0KTsKLQotICAgIEVsZW1lbnQgb3V0cHV0RWxlbWVudCA9IG91dHB1dC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIG91dHB1dE5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotICAgIGlmIChvdXRwdXROYW1lICE9IG51bGwpCi0gICAgICBvdXRwdXRFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIG91dHB1dE5hbWUpOwotCi0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmdPdXRwdXQpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ091dHB1dChvdXRwdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdGYXVsdCA9IGNyZWF0ZVdTRExFbGVtZW50KCJmYXVsdCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKGZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRCaW5kaW5nRmF1bHQpOwotCi0gICAgRWxlbWVudCBmYXVsdEVsZW1lbnQgPSBmYXVsdC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lICE9IG51bGwpCi0gICAgICBmYXVsdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgZmF1bHROYW1lKTsKLQotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRCaW5kaW5nRmF1bHQpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ0ZhdWx0KGZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBjdXJyZW50U2VydmljZSA9IGNyZWF0ZVdTRExFbGVtZW50KCJzZXJ2aWNlIik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24oc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50U2VydmljZSk7Ci0KLSAgICBFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gc2VydmljZS5nZXRFbGVtZW50KCk7Ci0gICAgaWYgKHNlcnZpY2VFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudFNlcnZpY2Uuc2V0QXR0cmlidXRlKCJuYW1lIiwgc2VydmljZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudFNlcnZpY2UpOwotICAgIHN1cGVyLnZpc2l0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0UG9ydChvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIGN1cnJlbnRFbmRwb2ludCA9IGNyZWF0ZVdTRExFbGVtZW50KCJlbmRwb2ludCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEVuZHBvaW50KTsKLQotICAgIEVsZW1lbnQgcG9ydEVsZW1lbnQgPSBwb3J0LmdldEVsZW1lbnQoKTsKLSAgICBpZiAocG9ydEVsZW1lbnQuaGFzQXR0cmlidXRlKCJuYW1lIikpCi0gICAgICBjdXJyZW50RW5kcG9pbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgcG9ydEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotICAgIGlmIChwb3J0RWxlbWVudC5oYXNBdHRyaWJ1dGUoImJpbmRpbmciKSkKLSAgICAgIGN1cnJlbnRFbmRwb2ludC5zZXRBdHRyaWJ1dGUoImJpbmRpbmciLCBwb3J0RWxlbWVudC5nZXRBdHRyaWJ1dGUoImJpbmRpbmciKSk7Ci0KLSAgICAvLyBBZGQgaW50ZXJmYWNlIHRvIGN1cnJlbnQgc2VydmljZQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKSAvLyBiaW5kaW5nIGNvdWxkIG5vdCBiZSByZXNvbHZlZAotICAgIHsKLSAgICAgIEVsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSBiaW5kaW5nLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChiaW5kaW5nRWxlbWVudC5oYXNBdHRyaWJ1dGUoInR5cGUiKSkKLSAgICAgICAgY3VycmVudFNlcnZpY2Uuc2V0QXR0cmlidXRlKCJpbnRlcmZhY2UiLCBiaW5kaW5nRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSk7Ci0gICAgfQotCi0gICAgY3VycmVudFNlcnZpY2UuYXBwZW5kQ2hpbGQoY3VycmVudEVuZHBvaW50KTsKLSAgICBzdXBlci52aXNpdFBvcnQocG9ydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb3duZXIsIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KQotICB7Ci0gICAgLy8gVEJEIC0gSXQgaXMgbm90IGp1c3QgU09BUCBiaW5kaW5nCi0gICAgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHNvYXBFbGVtZW50ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKHNvYXBFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibG9jYXRpb24iKSkKLSAgICAgICAgY3VycmVudEVuZHBvaW50LnNldEF0dHJpYnV0ZSgiYWRkcmVzcyIsIHNvYXBFbGVtZW50LmdldEF0dHJpYnV0ZSgibG9jYXRpb24iKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBFbGVtZW50IGRvbUVsZW1lbnQgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICBFbGVtZW50IGFkb3B0ZWRET01FbGVtZW50ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoZG9tRWxlbWVudCwgdHJ1ZSk7Ci0KLSAgICAgIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwpCi0gICAgICAgIGRlc2NyaXB0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgZGVzY3JpcHRpb24uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCkKLSAgICAgICAgY3VycmVudFNlcnZpY2UuaW5zZXJ0QmVmb3JlKGFkb3B0ZWRET01FbGVtZW50LCBjdXJyZW50U2VydmljZS5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCkKLSAgICAgICAgY3VycmVudEludGVyZmFjZS5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRJbnRlcmZhY2UuZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsKQotICAgICAgICBjdXJyZW50T3BlcmF0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudE9wZXJhdGlvbi5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZy5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nLmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwpCi0gICAgICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZ0lucHV0Lmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudEJpbmRpbmdJbnB1dC5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPdXRwdXRJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZ091dHB1dC5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nT3V0cHV0LmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ZhdWx0SW1wbCkKLSAgICAgICAgY3VycmVudEJpbmRpbmdGYXVsdC5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nRmF1bHQuZ2V0Rmlyc3RDaGlsZCgpKTsKLQotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFdTRExDb252ZXJ0ZXIoIkNvbnZlcnQiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb252ZXJ0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKCJkOi9lY2xpcHNlMzAxL2VjbGlwc2Uvd29ya3NwYWNlL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL1BUQVRpbWVEaXN0cmlidXRpb24ud3NkbCIpOwotICAgICAgV1NETENvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgV1NETENvbnZlcnRlcihkZWYpOwotICAgICAgY29udmVydGVyLmdlbmVyYXRlMjAoImQ6L2VjbGlwc2UzMDEvZWNsaXBzZS93b3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvUFRBVGltZURpc3RyaWJ1dGlvbjIwLndzZGwiKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgICAvKgotICAgICB0cnkKLSAgICAgewotICAgICBEZWZpbml0aW9uIGRlZiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChhcmdzWzBdKTsKLSAgICAgV1NETENvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgV1NETENvbnZlcnRlcihkZWYpOwotICAgICBjb252ZXJ0ZXIuZ2VuZXJhdGUyMCgidGVzdDIwLndzZGwiKTsKLSAgICAgfQotICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgIHsKLSAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgfSovCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NTdhODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETE1vZGVsTG9jYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIHByb3RlY3RlZCBDdXN0b21XU0RMTW9kZWxMb2NhdG9yIGN1c3RvbVdTRExNb2RlbExvY2F0b3IgPSBuZXcgQ3VzdG9tV1NETE1vZGVsTG9jYXRvcigpOwotCi0gIGNsYXNzIEN1c3RvbVdTRExNb2RlbExvY2F0b3IgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIFdTRExNb2RlbExvY2F0b3IKLSAgewotICAgIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gICAgewotICAgICAgcmV0dXJuIFVSSVJlc29sdmVyUGx1Z2luLmNyZWF0ZVJlc29sdmVyKCkucmVzb2x2ZShiYXNlTG9jYXRpb24sIG5hbWVzcGFjZSwgbG9jYXRpb24pOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQWRhdHBlckZvclR5cGUoT2JqZWN0IHR5cGUpCi0gICAgewotICAgICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAgfQotCi0gIHB1YmxpYyBBZGFwdGVyIGFkYXB0TmV3KE5vdGlmaWVyIHRhcmdldCwgT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gY3VzdG9tV1NETE1vZGVsTG9jYXRvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWE1MRGlmZi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWE1MRGlmZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWNlOTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hNTERpZmYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxEaWZmCi17Ci0gIHByaXZhdGUgUHJpbnRTdHJlYW0gb3V0ID0gU3lzdGVtLm91dDsKLQotICBwcml2YXRlIGJvb2xlYW4gRElGRl9FTEVNRU5UX05PREVfT05MWSA9IGZhbHNlOwotCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoU3RyaW5nIGZpbGUxLCBTdHJpbmcgZmlsZTIpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZGlmZihmaWxlMSwgZmlsZTIsIGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoU3RyaW5nIGZpbGUxLCBTdHJpbmcgZmlsZTIsIGJvb2xlYW4gZWxlbWVudE9ubHkpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudCBkb2MxID0gZ2V0RG9jdW1lbnQoZmlsZTEpOwotICAgIERvY3VtZW50IGRvYzIgPSBnZXREb2N1bWVudChmaWxlMik7Ci0gICAgRElGRl9FTEVNRU5UX05PREVfT05MWSA9IGVsZW1lbnRPbmx5OwotICAgIHJldHVybiBkaWZmKGRvYzEsIGRvYzIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZGlmZihEb2N1bWVudCBkb2MxLCBEb2N1bWVudCBkb2MyKQotICB7Ci0gICAgRWxlbWVudCByb290MSA9IGRvYzEuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCByb290MiA9IGRvYzIuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGNvbXBhcmVOb2Rlcyhyb290MSwgcm9vdDIpOwotICB9Ci0KLSAgcHJpdmF0ZSBEb2N1bWVudCBnZXREb2N1bWVudChTdHJpbmcgdXJpKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZSh1cmkpOwotICAgIHJldHVybiBkb2M7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZU5vZGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpCi0gIHsKLSAgICBpZiAoRElGRl9FTEVNRU5UX05PREVfT05MWSkKLSAgICB7Ci0gICAgICAvLyBDb21wYXJlIG9ubHkgZWxlbWVudCBub2RlcyBpbiB0aGUgY2hpbGRyZW4uCi0gICAgICBmaWx0ZXJOb25FbGVtZW50Tm9kZXMobm9kZTEpOwotICAgICAgZmlsdGVyTm9uRWxlbWVudE5vZGVzKG5vZGUyKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZTEuZ2V0Tm9kZVR5cGUoKSAhPSBub2RlMi5nZXROb2RlVHlwZSgpIHx8IG5vZGUxLmdldE5vZGVOYW1lKCkgIT0gbm9kZTIuZ2V0Tm9kZU5hbWUoKSkKLSAgICB7Ci0gICAgICBwcmludGxuKCJOb2RlIHR5cGUgb3Igbm9kZSBuYW1lIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb21wYXJlQXR0cmlidXRlcyhub2RlMSwgbm9kZTIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTm9kZUxpc3Qgbm9kZUxpc3QxID0gbm9kZTEuZ2V0Q2hpbGROb2RlcygpOwotICAgIE5vZGVMaXN0IG5vZGVMaXN0MiA9IG5vZGUyLmdldENoaWxkTm9kZXMoKTsKLSAgICBpZiAobm9kZUxpc3QxLmdldExlbmd0aCgpICE9IG5vZGVMaXN0Mi5nZXRMZW5ndGgoKSkKLSAgICB7Ci0gICAgICBwcmludGxuKCJUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIC8vcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZUxpc3QxLmdldExlbmd0aCgpKTsKLSAgICAgIC8vcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZUxpc3QyLmdldExlbmd0aCgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGludCBsZW5ndGggPSBub2RlTGlzdDEuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBjb21wYXJlTm9kZXMobm9kZUxpc3QxLml0ZW0oaSksIG5vZGVMaXN0Mi5pdGVtKGkpKTsKLSAgICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGZpbHRlck5vbkVsZW1lbnROb2RlcyhOb2RlIG5vZGUpCi0gIHsKLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoZmlyc3RDaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7Ci0gICAgICBmaXJzdENoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgfQotCi0gICAgTm9kZSBzaWJsaW5nID0gZmlyc3RDaGlsZC5nZXROZXh0U2libGluZygpOwotICAgIE5vZGUgZGVsZXRlTWUgPSBudWxsOwotICAgIHdoaWxlIChzaWJsaW5nICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHNpYmxpbmcuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgZGVsZXRlTWUgPSBzaWJsaW5nOwotICAgICAgICBzaWJsaW5nID0gc2libGluZy5nZXROZXh0U2libGluZygpOwotICAgICAgICBub2RlLnJlbW92ZUNoaWxkKGRlbGV0ZU1lKTsKLSAgICAgIH0KLQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBjb21wYXJlQXR0cmlidXRlcyhOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKQotICB7Ci0gICAgTmFtZWROb2RlTWFwIG5vZGVNYXAxID0gbm9kZTEuZ2V0QXR0cmlidXRlcygpOwotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwMiA9IG5vZGUyLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChub2RlTWFwMSA9PSBudWxsIHx8IG5vZGVNYXAyID09IG51bGwpCi0gICAgewotICAgICAgaWYgKG5vZGVNYXAxID09IG51bGwgJiYgbm9kZU1hcDIgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZU1hcDEuZ2V0TGVuZ3RoKCkgIT0gbm9kZU1hcDIuZ2V0TGVuZ3RoKCkpCi0gICAgewotICAgICAgcHJpbnRsbigiVGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgTm9kZSBhdHRyTm9kZTEgPSBudWxsOwotICAgIE5vZGUgYXR0ck5vZGUyID0gbnVsbDsKLSAgICBpbnQgbGVuZ3RoID0gbm9kZU1hcDEuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhdHRyTm9kZTEgPSBub2RlTWFwMS5pdGVtKGkpOwotICAgICAgYXR0ck5vZGUyID0gbm9kZU1hcDIuZ2V0TmFtZWRJdGVtKGF0dHJOb2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIGlmIChhdHRyTm9kZTIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJpbnRsbigiVGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQgaW4gTm9kZSAyOiAiICsgYXR0ck5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkuZXF1YWxzKGF0dHJOb2RlMi5nZXROb2RlVmFsdWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHByaW50bG4oIlRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQ6Iik7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkgKyAiLCIgKyBhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDI6ICIgKyBub2RlMi5nZXROb2RlTmFtZSgpICsgIiwiICsgYXR0ck5vZGUyLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcmludGxuKFN0cmluZyBzKQotICB7Ci0gICAgb3V0LnByaW50bG4ocyk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTlmYjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXI7Ci0KLQotcHVibGljIGNsYXNzIFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICBwcm90ZWN0ZWQgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwgc2NoZW1hTG9jYXRvciA9IG5ldyBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbCgpOwotCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyLmNsYXNzOwotICB9Ci0KLSAgcHVibGljIEFkYXB0ZXIgYWRhcHROZXcoTm90aWZpZXIgdGFyZ2V0LCBPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiBzY2hlbWFMb2NhdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAyZmVlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0b3I7Ci0KLQotcHVibGljIGNsYXNzIFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJJbXBsIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyCi17Ci0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVNjaGVtYUxvY2F0aW9uKFhTRFNjaGVtYSB4c2RTY2hlbWEsIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBzY2hlbWFMb2NhdGlvblVSSSkKLSAgewotICAgIFN0cmluZyBiYXNlTG9jYXRpb24gPSB4c2RTY2hlbWEuZ2V0U2NoZW1hTG9jYXRpb24oKTsKLSAgICByZXR1cm4gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKS5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbmFtZXNwYWNlVVJJLCBzY2hlbWFMb2NhdGlvblVSSSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0FkYXRwZXJGb3JUeXBlKE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gWFNEU2NoZW1hTG9jYXRvci5jbGFzczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlN2VkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+IC0tPgotCQkKLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0JCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5IG5hbWU9IndzdC1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIvPgotCQk8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICAJPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAJCTxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LWZvbGRlcn0iLz4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLkFsbFRlc3RDYXNlcyIgLz4KLSAgIAkJCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5OTA4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC9wcm92aXNpb25hbC9jb3JlL0lNZXNzYWdlIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZGZlZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGx2YWxpZGF0ZXRlc3RzLmphcgotamF2YUNvbXBpbGVyLndzZGx2YWxpZGF0ZXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhNmRiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDIwZTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIEFwciAxNiAxNzo1NjowNSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTRmYTJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6NDc6MjcgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1NmY1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNGcmkgRmViIDE3IDE0OjIzOjU5IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE2NmQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jU3VuIEFwciAxNiAxNzo1NTowMiBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWI2YzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlX1BMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMwotQnVuZGxlLUNsYXNzUGF0aDogd3NkbHZhbGlkYXRldGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLldTRExWYWxpZGF0b3JUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJV9QUk9WSURFUl9OQU1FCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmFwYWNoZS5hbnQsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5YTY4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLndzZGx2YWxpZGF0ZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC53c2RsdmFsaWRhdGV0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSB3c2RsdmFsaWRhdGV0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjc4ZTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0Ci1fUExVR0lOX05BTUUgICAgICAgPSBXU0RMIFZhbGlkYXRvciBUZXN0cyBQbHVnLWluCi1fUFJPVklERVJfTkFNRSAgICAgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzg0ODZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uSW5mb0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uTWVzc2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogVGVzdCB0aGUgV1NETCB2YWxpZGF0aW9uIGZyYW1ld29yayBWYWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIFZhbGlkYXRvcldyYXBwZXIgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcldyYXBwZXIoKTsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdmFsaWRhdGUgbWV0aG9kLiBUZXN0cyB0byBiZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC48YnIvPgotICAgKiAyLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlKCkKLSAgewotCXRyeQotCXsKLQkgIC8vIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIGFuZCBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotCSAgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQkgIHZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24oY29udGV4dCk7Ci0JICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCSAgU3RyaW5nIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgY29udGV4dCk7Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0KTsKLQkgIFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MiA9IG51bGw7Ci0JICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JICB0cnkKLQkgIHsKLQkgICAgaXMgPSBuZXcgVVJMKHVyaSkub3BlblN0cmVhbSgpOwotCSAgICByZXBvcnQyID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgaXMsIGNvbnRleHQpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dDIgPSBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0Mik7Ci0JICB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLndzZGwiOwotCSAgcmVwb3J0MSA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIGNvbnRleHQyKTsKLQkgIHZhbGlkYXRvci50ZWFyZG93blZhbGlkYXRpb24oY29udGV4dDIpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0Mik7Ci0JICByZXBvcnQyID0gbnVsbDsKLQkgIGlzID0gbnVsbDsKLQkgIHRyeQotCSAgewotCSAgICBpcyA9IG5ldyBVUkwodXJpKS5vcGVuU3RyZWFtKCk7Ci0JICAgIHJlcG9ydDIgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpcywgY29udGV4dDIpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQyKTsKLQkgIGFzc2VydEZhbHNlKCJWYWxpZGF0aW9uIHVzaW5nIGEgVVJJIGRpZCBub3QgcHJvZHVjdCBhbiBpbnZhbGlkIHZhbGlkYXRpb24gcmVzdWx0LiIsIHJlcG9ydDEuaXNWYWxpZCgpKTsKLQkgIGFzc2VydEVxdWFscygiVmFsaWRhdGlvbiB1c2luZyBVUkkgYW5kIHVzaW5nIGlucHV0c3RyZWFtIG9mIHRoZSBzYW1lIGZpbGUgcHJvZHVjZXMgZGlmZmVyZW50IG51bWJlcnMgb2YgZXJyb3JzLiIsIHJlcG9ydDEuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgcGx1Zy1pbiBsb2NhdGlvbjogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QuCi0gICAqIDEuIFRlc3QgdGhhdCBhZnRlciBydW4gZm9yIGEgY29udGV4dCBYTUwgYW5kIFhTRCBncmFtbWFyIHBvb2xzIGV4aXN0IGZvciB0aGUgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXR1cFZhbGlkYXRpb24oKQotICB7Ci0JdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JCi0JTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQlhc3NlcnROdWxsKCJBbiBYTUwgZ3JhbW1hciBwb29sIGFscmVhZHkgZXhpc3RzIGZvciB0aGUgY29udGV4dC4iLCB2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQlhc3NlcnROdWxsKCJBbiBYU0QgZ3JhbW1hciBwb29sIGFscmVhZHkgZXhpc3RzIGZvciB0aGUgY29udGV4dC4iLCB2YWxpZGF0b3IuZ2V0WFNER3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQkKLQl2YWxpZGF0b3Iuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotCQotCWFzc2VydE5vdE51bGwoIkFuIFhNTCBncmFtbWFyIHBvb2wgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCWFzc2VydE5vdE51bGwoIkFuIFhTRCBncmFtbWFyIHBvb2wgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCQotCXZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdGVhcmRvd25WYWxpZGF0aW9uIG1ldGhvZC4KLSAgICogMS4gVGVzdCB0aGF0IGFmdGVyIHJ1biBmb3IgYSBjb250ZXh0IFhNTCBhbmQgWFNEIGdyYW1tYXIgcG9vbHMgZG8gbm90IGV4aXN0IGZvciB0aGUgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUZWFyZG93blZhbGlkYXRpb24oKQotICB7Ci0JdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JCi0JTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQl2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xzTWFwKCkucHV0KGNvbnRleHQsIG5ldyBYTUxHcmFtbWFyUG9vbEltcGwoKSk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLnB1dChjb250ZXh0LCBuZXcgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwoKSk7Ci0JCi0JdmFsaWRhdG9yLnRlYXJkb3duVmFsaWRhdGlvbihjb250ZXh0KTsKLQkKLQlhc3NlcnROdWxsKCJBbiBYTUwgZ3JhbW1hciBwb29sIGV4aXN0cyBhZnRlciB0aGUgdGVhcmRvd25WYWxpZGF0aW9uIG1ldGhvZCBpcyBydW4uIiwgdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sRm9yQ29udGV4dChjb250ZXh0KSk7Ci0JYXNzZXJ0TnVsbCgiQW4gWFNEIGdyYW1tYXIgcG9vbCBleGlzdHMgYWZ0ZXIgdGhlIHRlYXJkb3duVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCQotCXZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBjb252ZXJ0aW5nIGEgbWVzc2FnZS4gVGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgCi0gICAqIG5ldyByZXBvcnQuCi0gICAqIDEuIFRlc3QgdGhhdCBhIHJlZ3VsYXIgbWVzc2FnZSBpcyBhZGRlZCBhcyBpcy4KLSAgICogMi4gVGVzdCB0aGF0IGEgbmVzdGVkIG1lc3NhZ2UgaXMgYWRkZWQgYXMgYSBuZXN0ZWQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0TWVzc2FnZSgpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSByZWd1bGFyIG1lc3NhZ2UgaXMgYWRkZWQgYXMgaXMuCi0JVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIG1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKCJtZXNzYWdlIiwgMSwgMiwgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUiwgImZpbGU6L3NvbWV1cmkiKTsKLQlWYWxpZGF0aW9uSW5mbyByZXBvcnQgPSBuZXcgVmFsaWRhdGlvbkluZm8oImZpbGU6L3NvbWV1cmkiKTsKLQl2YWxpZGF0b3IuY29udmVydE1lc3NhZ2UobWVzc2FnZSwgcmVwb3J0KTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXBvcnQgZG9lcyBub3QgaGF2ZSAxIG1lc3NhZ2UuIiwgMSwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBzdHJpbmcgaXMgaW5jb3JyZWN0LiIsICJtZXNzYWdlIiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE1lc3NhZ2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBsaW5lIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMSwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBjb2x1bW4gbnVtYmVyIGlzIGluY29ycmVjdC4iLCAyLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0Q29sdW1uTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc2V2ZXJpdHkgaXMgaW5jb3JyZWN0LiIsIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRTZXZlcml0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIFVSSSBpcyBpbmNvcnJlY3QuIiwgImZpbGU6L3NvbWV1cmkiLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0VXJpKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgaGFzIGFuIGluY29ycmVjdGx5IHJlZ2lzdHJlZCBuZXN0ZWQgbWVzc2FnZS4iLCAwLCByZXBvcnQuZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhIG5lc3RlZCBtZXNzYWdlIGlzIGFkZGVkIGFzIGEgbmVzdGVkIG1lc3NhZ2UuCi0JVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIG1lc3NhZ2UyID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbCgibWVzc2FnZSIsIDEsIDIsIElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IsICJmaWxlOi9zb21ldXJpMiIpOwotCVZhbGlkYXRpb25JbmZvIHJlcG9ydDIgPSBuZXcgVmFsaWRhdGlvbkluZm8oImZpbGU6L3NvbWV1cmkiKTsKLQl2YWxpZGF0b3IuY29udmVydE1lc3NhZ2UobWVzc2FnZTIsIHJlcG9ydDIpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcG9ydCB3aXRoIHRoZSBuZXN0ZWQgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbWVzc2FnZS4iLCAxLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgY29udGFpbmVyIG1lc3NhZ2UgVVJJIGlzIGluY29ycmVjdC4iLCAiZmlsZTovc29tZXVyaTIiLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBjb250YWluZXIgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2UgVVJJIGlzIGluY29ycmVjdC4iLCAiZmlsZTovc29tZXVyaTIiLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBuZXN0ZWQgbWVzc2FnZSBzdHJpbmcgaXMgaW5jb3JyZWN0LiIsICJtZXNzYWdlIiwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRNZXNzYWdlKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG5lc3RlZCBtZXNzYWdlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCAxLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2UgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMiwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2Ugc2V2ZXJpdHkgaXMgaW5jb3JyZWN0LiIsIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0U2V2ZXJpdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIGEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IGNvbnZlcnRpbmcgYSBXU0RMIHZhbGlkYXRpb24gcmVwb3J0IHRvIGEgWE1MIHZhbGlkYXRpb24gcmVwb3J0LgotICAgKiBUaGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2VzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbmV3IHJlcG9ydC4KLSAgICogMS4gVGVzdCB0aGF0IGEgcmVndWxhciBtZXNzYWdlIGlzIGFkZGVkIGFzIGlzLgotICAgKiAyLiBUZXN0IHRoYXQgYSBuZXN0ZWQgbWVzc2FnZSBpcyBhZGRlZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydCgpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSByZWd1bGFyIG1lc3NhZ2UgaXMgYWRkZWQgYXMgaXMuCi0JVmFsaWRhdGlvbkluZm9JbXBsIHdzZGxyZXBvcnQgPSBuZXcgVmFsaWRhdGlvbkluZm9JbXBsKCJmaWxlOi9zb21ldXJpIiwgbmV3IE1lc3NhZ2VHZW5lcmF0b3IoUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UudmFsaWRhdGV3c2RsIikpKTsKLQl3c2RscmVwb3J0LmFkZEVycm9yKCJtZXNzYWdlIiwgMSwgMiwgImZpbGU6L3NvbWV1cmkiKTsKLQlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCA9IHZhbGlkYXRvci5jb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQod3NkbHJlcG9ydCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVwb3J0IGRvZXMgbm90IGhhdmUgMSBtZXNzYWdlLiIsIDEsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc3RyaW5nIGlzIGluY29ycmVjdC4iLCAibWVzc2FnZSIsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRNZXNzYWdlKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgbGluZSBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIDEsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRMaW5lTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldENvbHVtbk51bWJlcigpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHNldmVyaXR5IGlzIGluY29ycmVjdC4iLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0U2V2ZXJpdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBVUkkgaXMgaW5jb3JyZWN0LiIsICJmaWxlOi9zb21ldXJpIiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGhhcyBhbiBpbmNvcnJlY3RseSByZWdpc3RyZWQgbmVzdGVkIG1lc3NhZ2UuIiwgMCwgcmVwb3J0LmdldE5lc3RlZE1lc3NhZ2VzKCkuc2l6ZSgpKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBuZXN0ZWQgbWVzc2FnZSBpcyBhZGRlZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotCVZhbGlkYXRpb25JbmZvSW1wbCB3c2RscmVwb3J0MiA9IG5ldyBWYWxpZGF0aW9uSW5mb0ltcGwoImZpbGU6L3NvbWV1cmkiLCBuZXcgTWVzc2FnZUdlbmVyYXRvcihSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS52YWxpZGF0ZXdzZGwiKSkpOwotCXdzZGxyZXBvcnQyLmFkZEVycm9yKCJtZXNzYWdlIiwgMSwgMiwgImZpbGU6L3NvbWV1cmkyIik7Ci0JVmFsaWRhdGlvblJlcG9ydCByZXBvcnQyID0gdmFsaWRhdG9yLmNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydCh3c2RscmVwb3J0Mik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVwb3J0IGRvZXMgbm90IGhhdmUgMSBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIFVSSSBpcyBpbmNvcnJlY3QuIiwgImZpbGU6L3NvbWV1cmkyIiwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRVcmkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBVUkkgaXMgaW5jb3JyZWN0LiIsICJmaWxlOi9zb21ldXJpMiIsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0VXJpKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc3RyaW5nIGlzIGluY29ycmVjdC4iLCAibWVzc2FnZSIsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0TWVzc2FnZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCAxLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBjb2x1bW4gbnVtYmVyIGlzIGluY29ycmVjdC4iLCAyLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldENvbHVtbk51bWJlcigpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHNldmVyaXR5IGlzIGluY29ycmVjdC4iLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldFNldmVyaXR5KCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgZG9lcyBub3QgaGF2ZSBhIG5lc3RlZCBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2FkMzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBleHRlbmRzIHZhbGlkYXRvciB0byBleHBvc2UgdGhlIHByb3RlY3RlZCBtZXRob2RzCi0gKiBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvcldyYXBwZXIgZXh0ZW5kcyBWYWxpZGF0b3IgCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvciNhZGRJbmZvVG9NZXNzYWdlKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2UsIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2UpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRJbmZvVG9NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlLCBJTWVzc2FnZSBtZXNzYWdlKSAKLSAgewotCXN1cGVyLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3Ijc2V0dXBWYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldHVwVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3IjdGVhcmRvd25WYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlYXJkb3duVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3IjY29udmVydE1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2UsIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm8pCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb252ZXJ0TWVzc2FnZShJVmFsaWRhdGlvbk1lc3NhZ2UgbWVzc2FnZSwgVmFsaWRhdGlvbkluZm8gY29udmVydGVkUmVwb3J0KSAKLSAgewotCXN1cGVyLmNvbnZlcnRNZXNzYWdlKG1lc3NhZ2UsIGNvbnZlcnRlZFJlcG9ydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvciNjb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCkKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uUmVwb3J0IGNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydChJVmFsaWRhdGlvblJlcG9ydCByZXBvcnQpIAotICB7Ci0JcmV0dXJuIHN1cGVyLmNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydChyZXBvcnQpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBYTUwgZ3JhbW1hciBwb29sIGRlZmluZWQgZm9yIHRoZSBnaXZlbiBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHQKLSAgICogCQlUaGUgY29udGV4dCB0byB1c2UgdG8gcmV0cmlldmUgdGhlIFhNTCBncmFtbWFyIHBvb2wuCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgWE1MIGdyYW1tYXIgcG9vbCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgb3IgbnVsbCBpZiBub25lIGlzIGFzc29jaWF0ZWQuCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0WE1MR3JhbW1hclBvb2xGb3JDb250ZXh0KE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCkKLSAgewotCXJldHVybiAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLmdldChjb250ZXh0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgWFNEIGdyYW1tYXIgcG9vbCBkZWZpbmVkIGZvciB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBjb250ZXh0Ci0gICAqIAkJVGhlIGNvbnRleHQgdG8gdXNlIHRvIHJldHJpZXZlIHRoZSBYU0QgZ3JhbW1hciBwb29sLgotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFhTRCBncmFtbWFyIHBvb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG9yIG51bGwgaWYgbm9uZSBpcyBhc3NvY2lhdGVkLgotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFhTREdyYW1tYXJQb29sRm9yQ29udGV4dChOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpCi0gIHsKLQlyZXR1cm4gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5nZXQoY29udGV4dCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFeHBvc2UgdGhlIFhNTCBncmFtbWFyIHBvb2xzIEhhc2hNYXAgZm9yIHRlc3RpbmcuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFhNTCBncmFtbWFyIHBvb2xzIEhhc2hNYXAuCi0gICAqLwotICBwdWJsaWMgSGFzaE1hcCBnZXRYTUxHcmFtbWFyUG9vbHNNYXAoKQotICB7Ci0JcmV0dXJuIHhtbEdyYW1tYXJQb29sczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEV4cG9zZSB0aGUgWFNEIGdyYW1tYXIgcG9vbHMgSGFzaE1hcCBmb3IgdGVzdGluZy4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgWFNEIGdyYW1tYXIgcG9vbHMgSGFzaE1hcC4KLSAgICovCi0gIHB1YmxpYyBIYXNoTWFwIGdldFhTREdyYW1tYXJQb29sc01hcCgpCi0gIHsKLQlyZXR1cm4geHNkR3JhbW1hclBvb2xzOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDdiODNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBFY2xpcHNlIHNwZWNpZmljIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV1NETFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0byBlbnN1cmUgdGhlIFVSSSByZXNvbHZlciBpcyBub3QgbnVsbCBpbiB0aGUgRWNsaXBzZQotICAgKiBzcGVjaWZpYyBYTUwgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVSSVJlc29sdmVySXNSZWdpc3RlcmVkKCkKLSAgewotCVdTRExWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBXU0RMVmFsaWRhdG9yV3JhcHBlcigpOwotCWFzc2VydE5vdE51bGwoIlRoZSBVUkkgcmVzb2x2ZXIgaXMgbnVsbC4iLCB2YWxpZGF0b3IuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0MjM0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciB0aGUgRWNsaXBzZSBXU0RMIHZhbGlkYXRvciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgV1NETFZhbGlkYXRvciAKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3JXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLQlyZXR1cm4gdXJpUmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS92YWxpZGF0ZXdzZGwucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS92YWxpZGF0ZXdzZGwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE3ZmNlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEdXBsaWNhdGUgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdGluZwotX1JFRl9GSUxFX0VSUk9SX01FU1NBR0UgICAgICAgICAgPSBSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh7MH0pLiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjNjA1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFVSSVJlc29sdmVyIHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBVUklSZXNvbHZlciB1cmlSZXNvbHZlciA9IG51bGw7Ci0gLyoqCi0gICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICogCi0gICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShVUklSZXNvbHZlclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXVyaVJlc29sdmVyID0gbmV3IFVSSVJlc29sdmVyKCk7CQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplQWJzb2x1dGVGaWxlKCkKLSAgewotICAJLy8gU3lzdGVtIGlkIGlzIGFic29sdXRlIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLgotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiZmlsZTovYzovc29tZXBhdGgvbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIGFic29sdXRlIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiIsIHN5c3RlbUlkLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgCQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlKCkKLSAgewotICAJLy8gU3lzdGVtIGlkIGlzIHJlbGF0aXZlIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAibXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIHNpbXBsZSByZWxhdGl2ZSBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU3RhcnRzV2l0aERvdERvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgaXMgcmVsYXRpdmUgd2l0aCAuLi8KLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIi4uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU3RhcnRzV2l0aERvdERvdFR3aWNlKCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBpcyByZWxhdGl2ZSB3aXRoIC4uLy4uLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiLi4vLi4vbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIHJlbGF0aXZlIHdpdGggLi4vLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVTdGFydHNXaXRoRG90KCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBpcyByZWxhdGl2ZSB3aXRoIC4vCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICIuL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVTdGFydHNXaXRoRG90VHdpY2UoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGlzIHJlbGF0aXZlIHdpdGggLi8uLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiLi8uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4vLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZVN0YXJ0c1dpdGhTbGFzaCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgaXMgcmVsYXRpdmUgYmVnaW5uaW5nIHdpdGggLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBiZWdpbm5pbmcgd2l0aCAvIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVEb3REb3RJbk1pZGRsZSgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgLi4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gInNvbWVwYXRoLy4uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBhbmQgY29udGFpbnMgLi4vIGluIHRoZSBtaWRkbGUgYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZUZvdEluTWlkZGxlKCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBjb250YWlucyAuLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lcGF0aC8uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBhbmQgY29udGFpbnMgLi8gaW4gdGhlIG1pZGRsZSBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWxpemVSZWxhdGl2ZUZpbGVEb3REb3RJbk1pZGRsZU9mQmFzZSgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIGNvbnRhaW5zIC4uLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoLy4uL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIGNvbnRhaW5zIC4uLyBpbiB0aGUgbWlkZGxlIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVEb3RJbk1pZGRsZU9mQmFzZSgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIGNvbnRhaW5zIC4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvLi9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAibXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoImJhc2VMb2NhdGlvbiBjb250YWlucyAuLyBpbiB0aGUgbWlkZGxlIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aFNsYXNoRG90RG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLy4uLyAKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovLi4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi8uLi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aFNsYXNoRG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLy4vCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6Ly4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZUJhc2VTdGFydHNXaXRoRG90RG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLi4vIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi4uL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTouLi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aERvdCgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4vIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6c29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU29tZWRpckRvdERvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgc29tZWRpci4uLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lZGlyLi4vbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGhhcyBzb21lZGlyLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9zb21lcGF0aC9zb21lZGlyLi4vbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU29tZWRpckRvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgc29tZWRpci4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gInNvbWVkaXIuL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBoYXMgc29tZWRpci4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9zb21lcGF0aC9zb21lZGlyLi9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVOdWxsU3lzdGVtSWQoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGlzIG51bGwKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gbnVsbDsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCBudWxsLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZU51bGxCYXNlTG9jYXRpb24oKQotICB7Ci0gICAgLy8gQmFzZSBsb2NhdGlvbiBpcyBudWxsCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gbnVsbDsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lZGlyLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCBudWxsLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVN5c3RlbUlkQWJzb2x1dGVOdWxsQmFzZUxvY2F0aW9uKCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gaXMgbnVsbAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJudWxsIjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJmaWxlOi9zb21lZGlyLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCAiZmlsZTovc29tZWRpci4vbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiYzc1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgQW50TG9nZ2VyLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBBbnRMb2dnZXJUZXN0VGFzayB0YXNrID0gbnVsbDsKLQkKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQl0YXNrID0gbmV3IEFudExvZ2dlclRlc3RUYXNrKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXRhc2sgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBlcnJvcnMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dFcnJvcldpdGhUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX0VSUk9SLCBuZXcgVGhyb3dhYmxlKCJUSFJPV0FCTEUiKSk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiV2FybmluZ3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiSW5mb3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiVmVyYm9zZXMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRWZXJib3NlcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyIGVycm9ycyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldEVycm9ycygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldEVycm9ycygpLmdldCgwKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgdGhyb3dhYmxlIHdhcyBub3QgVEhST1dBQkxFLiIsICJqYXZhLmxhbmcuVGhyb3dhYmxlOiBUSFJPV0FCTEUiLCB0YXNrLmdldEVycm9ycygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3Mgd2FybmluZ3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dXYXJuaW5nV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfV0FSTklORywgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB3YXJuaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJJbmZvcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB3YXJuaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0SW5mb3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIlZlcmJvc2VzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0VmVyYm9zZXMoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMiB3YXJuaW5ncyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldFdhcm5pbmdzKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0V2FybmluZ3MoKS5nZXQoMCkpOwotCWFzc2VydEVxdWFscygiVGhlIHRocm93YWJsZSB3YXMgbm90IFRIUk9XQUJMRS4iLCAiamF2YS5sYW5nLlRocm93YWJsZTogVEhST1dBQkxFIiwgdGFzay5nZXRXYXJuaW5ncygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgaW5mb3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dJbmZvV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfSU5GTywgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIldhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGluZm9zIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGluZm9zIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIlZlcmJvc2VzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0VmVyYm9zZXMoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMiBpbmZvcyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldEluZm9zKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0SW5mb3MoKS5nZXQoMCkpOwotCWFzc2VydEVxdWFscygiVGhlIHRocm93YWJsZSB3YXMgbm90IFRIUk9XQUJMRS4iLCAiamF2YS5sYW5nLlRocm93YWJsZTogVEhST1dBQkxFIiwgdGFzay5nZXRJbmZvcygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgdmVyYm9zZXMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dWZXJib3NlV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfVkVSQk9TRSwgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIldhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkluZm9zIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyIHZlcmJvc2VzIHdlcmUgbm90IHJlcG9ydGVkLiIsIDIsIHRhc2suZ2V0VmVyYm9zZXMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRWZXJib3NlcygpLmdldCgwKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgdGhyb3dhYmxlIHdhcyBub3QgVEhST1dBQkxFLiIsICJqYXZhLmxhbmcuVGhyb3dhYmxlOiBUSFJPV0FCTEUiLCB0YXNrLmdldFZlcmJvc2VzKCkuZ2V0KDEpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBlcnJvcnMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dFcnJvcldpdGhvdXRUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX0VSUk9SKTsKLQkKLQlhc3NlcnRUcnVlKCJXYXJuaW5ncyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJJbmZvcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEluZm9zKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJWZXJib3NlcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFZlcmJvc2VzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgZXJyb3Igd2FzIG5vdCByZXBvcnRlZC4iLCAxLCB0YXNrLmdldEVycm9ycygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldEVycm9ycygpLmdldCgwKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3Mgd2FybmluZ3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dXYXJuaW5nV2l0aG91dFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfV0FSTklORyk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHdhcm5pbmdzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkluZm9zIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHdhcm5pbmdzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiVmVyYm9zZXMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRWZXJib3NlcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxIGVycm9yIHdhcyBub3QgcmVwb3J0ZWQuIiwgMSwgdGFzay5nZXRXYXJuaW5ncygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldFdhcm5pbmdzKCkuZ2V0KDApKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBpbmZvcyBjb3JyZWN0bHkuCi0gICAqIDIuIHJlY29yZHMgdGhlIG1lc3NhZ2UgY29ycmVjdGx5LgotICAgKiAzLiByZWNvcmRzIHRoZSB0aHJvd2FibGUgY29ycmVjdGx5LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvZ0luZm9XaXRob3V0VGhyb3dhYmxlKCkKLSAgewotCUFudExvZ2dlciBsb2dnZXIgPSBuZXcgQW50TG9nZ2VyKHRhc2spOwotCWxvZ2dlci5sb2coIk1FU1NBR0UiLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkKLQlhc3NlcnRUcnVlKCJXYXJuaW5ncyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBpbmZvcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBpbmZvcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJWZXJib3NlcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFZlcmJvc2VzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgaW5mbyB3YXMgbm90IHJlcG9ydGVkLiIsIDEsIHRhc2suZ2V0SW5mb3MoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRJbmZvcygpLmdldCgwKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgdmVyYm9zZXMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dWZXJib3NlV2l0aG91dFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfVkVSQk9TRSk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiV2FybmluZ3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEVycm9ycygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiSW5mb3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEluZm9zKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgdmVyYm9zZSB3YXMgbm90IHJlcG9ydGVkLiIsIDEsIHRhc2suZ2V0VmVyYm9zZXMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRWZXJib3NlcygpLmdldCgwKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3RUYXNrLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0VGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzIyNDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3RUYXNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci0KLS8qKgotICogQSBkdW1teSB0YXNrIHRoYXQgd2lsbCBhbGxvdyB0ZXN0aW5nIG9mIHRoZSBhbmQgbG9nZ2VyLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyVGVzdFRhc2sgZXh0ZW5kcyBUYXNrIAotewotICBwcm90ZWN0ZWQgTGlzdCBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IHdhcm5pbmdzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgTGlzdCBpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgdmVyYm9zZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzayNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2csIGludCBtc2dMZXZlbCkgCi0gIHsKLQlpZihtc2dMZXZlbCA9PSBQcm9qZWN0Lk1TR19FUlIpCi0JewotCSAgZXJyb3JzLmFkZChtc2cpOwotCX0KLQllbHNlIGlmKG1zZ0xldmVsID09IFByb2plY3QuTVNHX1dBUk4pCi0JewotCSAgd2FybmluZ3MuYWRkKG1zZyk7Ci0JfQotCWVsc2UgaWYobXNnTGV2ZWwgPT0gUHJvamVjdC5NU0dfSU5GTykKLQl7Ci0JICBpbmZvcy5hZGQobXNnKTsKLQl9Ci0JZWxzZSBpZihtc2dMZXZlbCA9PSBQcm9qZWN0Lk1TR19WRVJCT1NFKQotCXsKLQkgIHZlcmJvc2VzLmFkZChtc2cpOwotCX0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrI2xvZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2cpIAotICB7Ci0JbG9nKG1zZywgUHJvamVjdC5NU0dfSU5GTyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGVycm9ycyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBlcnJvcnMgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9ycygpCi0gIHsKLQlyZXR1cm4gZXJyb3JzOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB3YXJuaW5ncyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB3YXJuaW5ncyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0V2FybmluZ3MoKQotICB7Ci0JcmV0dXJuIHdhcm5pbmdzOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBpbmZvcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBpbmZvcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0SW5mb3MoKQotICB7Ci0JcmV0dXJuIGluZm9zOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2ZXJib3NlcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB2ZXJib3NlcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0VmVyYm9zZXMoKQotICB7Ci0JcmV0dXJuIHZlcmJvc2VzOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUYXNrLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUYXNrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZTEzMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlVGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBleHBvc2UgZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBXU0RMVmFsaWRhdGUgY2xhc3MgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGVUYXNrIGV4dGVuZHMgV1NETFZhbGlkYXRlCi17Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQuV1NETFZhbGlkYXRlI2dldEZpbGVMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEZpbGVMaXN0KCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRGaWxlTGlzdCgpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5Nzc2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLkZpbGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuc2VsZWN0b3JzLkZpbGVuYW1lU2VsZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5CYXNlVGVzdENhc2U7Ci0KLS8qKgotICogV1NETFZhbGlkYXRlIGFudCB0YXNrIHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBCQVNFX0RJUjs7Ci0gIHByaXZhdGUgUHJvamVjdCBwcm9qZWN0OwotCi0gLyoqCi0gICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICogCi0gICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShXU0RMVmFsaWRhdGVUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQkFTRV9ESVIgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSDsKLSAgICAgIEJBU0VfRElSID0gQkFTRV9ESVIucmVwbGFjZSgnLycsIEZpbGUuc2VwYXJhdG9yQ2hhcik7Ci0gICAgICBpZihCQVNFX0RJUi5zdGFydHNXaXRoKCJcXCIpKQotICAgICAgewotICAgICAgICBCQVNFX0RJUiA9IEJBU0VfRElSLnN1YnN0cmluZygxKTsgIAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0gICAgcHJvamVjdCA9IG5ldyBQcm9qZWN0KCk7Ci0gICAgcHJvamVjdC5zZXRCYXNlRGlyKG5ldyBGaWxlKEJBU0VfRElSKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSB3aXRoIGEgcmVsYXRpdmUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVsYXRpdmVTaW5nbGVGaWxlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2MgPSAiZmlsZS53c2RsIjsKLSAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhdGlvbiA9ICgiZmlsZTovLy8iICsgQkFTRV9ESVIgKyBmaWxlTG9jKS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldEZpbGUoZmlsZUxvYyk7Ci0gICAgTGlzdCBmaWxlTGlzdCA9IHdzZGxWYWxpZGF0ZVRhc2suZ2V0RmlsZUxpc3QoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmx5IG9uZSBmaWxlLiIsIDEsIGZpbGVMaXN0LnNpemUoKSk7Ci0gICAgLy8gVGhlIGZpbGUgbG9jYXRpb25zIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZSB0byBhdm9pZCBkcml2ZSBsZXR0ZXIgY2FzZSBkaWZmZXJlbmNlcyBvbiB3aW5kb3dzLiBpZS4gQyB2cyBjLgotICAgIGFzc2VydEVxdWFscygiVGhlIGZpbGUgbG9jYXRpb24gJyIgKyBmaWxlTGlzdC5nZXQoMCkgKyAiJyBpcyBub3QgY29ycmVjdGx5IHJlc29sdmVkIHRvIHRoZSBiYXNlIGxvY2F0aW9uLiIsIHJlc29sdmVkTG9jYXRpb24udG9Mb3dlckNhc2UoKSwgKChTdHJpbmcpZmlsZUxpc3QuZ2V0KDApKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBhIHNpbmdsZSBmaWxlIHdpdGggYW4gYWJzb2x1dGUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWJzb2x1dGVTaW5nbGVGaWxlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2MgPSBCQVNFX0RJUiArICJmaWxlLndzZGwiOwotICAgIFN0cmluZyByZXNvbHZlZExvY2F0aW9uID0gKEZJTEVfUFJPVE9DT0wgKyBmaWxlTG9jKS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldEZpbGUoZmlsZUxvYyk7Ci0gICAgTGlzdCBmaWxlTGlzdCA9IHdzZGxWYWxpZGF0ZVRhc2suZ2V0RmlsZUxpc3QoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmx5IG9uZSBmaWxlLiIsIDEsIGZpbGVMaXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsb2NhdGlvbiAnIiArIGZpbGVMb2MgKyAiJyBpcyBtb2RpZmllZC4iLCByZXNvbHZlZExvY2F0aW9uLnRvTG93ZXJDYXNlKCksICgoU3RyaW5nKWZpbGVMaXN0LmdldCgwKSkudG9Mb3dlckNhc2UoKSk7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSB3aXRoIGFuIGFic29sdXRlLCByZW1vdGUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWJzb2x1dGVTaW5nbGVGaWxlUmVtb3RlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSAiaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIjsKLSAgICBTdHJpbmcgZmlsZUxvYyA9ICJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMy0wNy9DYXRhbG9nLndzZGwiOwotICAgIFdTRExWYWxpZGF0ZVRhc2sgd3NkbFZhbGlkYXRlVGFzayA9IG5ldyBXU0RMVmFsaWRhdGVUYXNrKCk7Ci0gICAgd3NkbFZhbGlkYXRlVGFzay5zZXRQcm9qZWN0KHByb2plY3QpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0RmlsZShmaWxlTG9jKTsKLSAgICBMaXN0IGZpbGVMaXN0ID0gd3NkbFZhbGlkYXRlVGFzay5nZXRGaWxlTGlzdCgpOwotICAgIGFzc2VydEVxdWFscygiVGhlIGZpbGUgbGlzdCBkb2VzIG5vdCBjb250YWluIG9ubHkgb25lIGZpbGUuIiwgMSwgZmlsZUxpc3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxvY2F0aW9uICciICsgZmlsZUxvYyArICInIGlzIG1vZGlmaWVkLiIsIHJlc29sdmVkTG9jYXRpb24udG9Mb3dlckNhc2UoKSwgKChTdHJpbmcpZmlsZUxpc3QuZ2V0KDApKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAKLSAgfQotICAKLS8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSBpbiBhIGZpbGVzZXQgd2l0aCBhIHJlbGF0aXZlIGxvY2F0aW9uIGlzIHJlc29sdmVkIHByb3Blcmx5Ci0gICAqIHdoZW4gbm8gZGlyZWN0b3J5IGlzIHNwZWNpZmllZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWxhdGl2ZVNpbmdsZUZpbGVJbkZpbGVzZXROb0RpclNwZWNpZmllZCgpCi0gIHsKLSAgICBTdHJpbmcgZmlsZUxvYyA9ICJFbXB0eS53c2RsIjsKLSAgICBTdHJpbmcgYmFzZV9kaXIgPSBCQVNFX0RJUiArIFNBTVBMRVNfRElSICsgIldTREwiICsgRmlsZS5zZXBhcmF0b3IgKyAiU2VsZkNvbnRhaW5lZCI7Ci0gICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSAoImZpbGU6Ly8vIiArIGJhc2VfZGlyICsgIi8iICsgZmlsZUxvYykucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgYmFzZV9kaXIgPSBiYXNlX2Rpci5yZXBsYWNlKCcvJywgRmlsZS5zZXBhcmF0b3JDaGFyKTsKLSAgICAKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICAKLSAgICBGaWxlU2V0IGZpbGVzZXQgPSB3c2RsVmFsaWRhdGVUYXNrLmNyZWF0ZUZpbGVzZXQoKTsKLSAgICBmaWxlc2V0LnNldFByb2plY3QocHJvamVjdCk7Ci0gICAgZmlsZXNldC5zZXREaXIobmV3IEZpbGUoYmFzZV9kaXIpKTsKLSAgIAotICAgIEZpbGVuYW1lU2VsZWN0b3IgZmlsZW5hbWVTZWxlY3RvciA9IG5ldyBGaWxlbmFtZVNlbGVjdG9yKCk7Ci0gICAgZmlsZW5hbWVTZWxlY3Rvci5zZXROYW1lKGZpbGVMb2MpOwotICAgIGZpbGVzZXQuYWRkRmlsZW5hbWUoZmlsZW5hbWVTZWxlY3Rvcik7Ci0gICAgLy9maWxlc2V0LnNldEZpbGUobmV3IEZpbGUoZmlsZUxvYykpOwotICAgIAotICAgIExpc3QgZmlsZUxpc3QgPSB3c2RsVmFsaWRhdGVUYXNrLmdldEZpbGVMaXN0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gb25seSBvbmUgZmlsZS4iLCAxLCBmaWxlTGlzdC5zaXplKCkpOwotICAgIC8vIFRoZSBmaWxlIGxvY2F0aW9ucyBhcmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UgdG8gYXZvaWQgZHJpdmUgbGV0dGVyIGNhc2UgZGlmZmVyZW5jZXMgb24gd2luZG93cy4gaWUuIEMgdnMgYy4KLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxvY2F0aW9uICciICsgZmlsZUxpc3QuZ2V0KDApICsgIicgaXMgbm90IGNvcnJlY3RseSByZXNvbHZlZCB0byB0aGUgYmFzZSBsb2NhdGlvbi4iLCByZXNvbHZlZExvY2F0aW9uLnRvTG93ZXJDYXNlKCksICgoU3RyaW5nKWZpbGVMaXN0LmdldCgwKSkudG9Mb3dlckNhc2UoKSk7Ci0gICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjQ1OGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uTWVzc2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0b3JSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuU3RhbmRhcmRMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5CYXNlVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGVUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17CQotCVdTRExWYWxpZGF0ZVdyYXBwZXIgdmFsaWRhdGUgPSBudWxsOwotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotCXsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJdmFsaWRhdGUgPSBuZXcgV1NETFZhbGlkYXRlV3JhcHBlcigpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIAotCXsKLQkJdmFsaWRhdGUgPSBudWxsOwotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IHRoZSB2YWxpZGF0ZUZpbGUgbWV0aG9kLgotCSAqIDEuIEEgdmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIHZhbGlkLgotCSAqIDIuIEFuIGludmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIGludmFsaWQuCi0JICogMy4gQSBmaWxlIHRoYXQgY2FuJ3QgYmUgZm91bmQgc2hvdWxkIHN1Y2NlZWQgYW5kIHJlcG9ydCB0aGF0IGl0J3MgaW52YWxpZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVGaWxlKCkKLQl7Ci0JCVN0cmluZyB2YWxpZEZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJQYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIjsKLQkJaWYoUExVR0lOX0FCU09MVVRFX1BBVEguc3RhcnRzV2l0aCgiLyIpKQotCQl7Ci0JCQl2YWxpZEZpbGUgPSAiZmlsZTovLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwiOwotCQl9Ci0JCVN0cmluZyBpbnZhbGlkRmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJaW52YWxpZEZpbGUgPSAiZmlsZTovLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbCI7Ci0JCX0KLQkJU3RyaW5nIG5vbmV4aXN0YW50RmlsZSA9ICJub25leGlzdGFudGZpbGUud3NkbCI7Ci0JCS8vIDEuIEEgdmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIHZhbGlkLgotCQlJVmFsaWRhdGlvblJlcG9ydCByZXBvcnQgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUodmFsaWRGaWxlKTsKLQkJYXNzZXJ0RmFsc2UoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIGZvciBhIHZhbGlkIGZpbGUuIiwgcmVwb3J0Lmhhc0Vycm9ycygpKTsKLQkJCi0JCS8vIDIuIEFuIGludmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIGludmFsaWQuCi0JCUlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUoaW52YWxpZEZpbGUpOwotCQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSBub3QgcmVwb3J0ZWQgZm9yIGFuIGludmFsaWQgZmlsZS4iLCByZXBvcnQyLmhhc0Vycm9ycygpKTsKLQkJCi0JCS8vIDMuIEEgZmlsZSB0aGF0IGNhbid0IGJlIGZvdW5kIHNob3VsZCBzdWNjZWVkIGFuZCByZXBvcnQgdGhhdCBpdCdzIGludmFsaWQuCi0JCUlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDMgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUobm9uZXhpc3RhbnRGaWxlKTsKLQkJYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgbm90IHJlcG9ydGVkIGZvciBhIG5vbmV4aXN0YW50IGZpbGUuIiwgcmVwb3J0My5oYXNFcnJvcnMoKSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgdGhlIHZhbGlkYXRlIG1ldGhvZC4KLQkgKiAxLiBUaGUgbWV0aG9kIHNob3VsZCBzdWNjZWVkIHdpdGggb25lIGZpbGUgc3BlY2lmaWVkLgotCSAqIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHN1Y2NlZWQgYW5kIHZhbGlkYXRlIDIgZmlsZXMgd2hlbiAyIGFyZSBzcGVjaWZpZWQuCi0JICogMy4gVGhlIG1ldGhvZCBzaG91bGQgb3V0cHV0IHZlcmJvc2UgaW5mb3JtYXRpb24gZm9yIHZhbGlkIGZpbGVzIHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZSgpCi0JewotCQlTdHJpbmcgdmFsaWRGaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJdmFsaWRGaWxlID0gImZpbGU6Ly8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJQYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIjsKLQkJfQotCQlTdHJpbmcgdmFsaWRGaWxlMiA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJdmFsaWRGaWxlMiA9ICJmaWxlOi8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsIjsKLQkJfQotCQlJTG9nZ2VyIGN1cnJlbnRMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCk7Ci0JCVdTRExWYWxpZGF0ZVRlc3RMb2dnZXIgbG9nZ2VyID0gbmV3IFdTRExWYWxpZGF0ZVRlc3RMb2dnZXIoKTsKLQkJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihsb2dnZXIpOwotCSAgCi0JCS8vIDEuIFRoZSBtZXRob2Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCBvbmUgZmlsZSBzcGVjaWZpZWQuCi0JCXZhbGlkYXRlLmdldFdTRExGaWxlcygpLmFkZCh2YWxpZEZpbGUpOwotCQl2YWxpZGF0ZS52YWxpZGF0ZSgpOwotCQlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1ZBTElEQVRJT05fU1VNTUFSWSwgbmV3IE9iamVjdFtde25ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigwKX0pLCBsb2dnZXIuZ2V0SW5mb3MoKS5nZXQoMCkpOwotCQl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5jbGVhcigpOwotCQlsb2dnZXIuZ2V0SW5mb3MoKS5jbGVhcigpOwotCSAgCi0JICAJLy8gMi4gVGhlIG1ldGhvZCBzaG91bGQgc3VjY2VlZCBhbmQgdmFsaWRhdGUgMiBmaWxlcyB3aGVuIDIgYXJlIHNwZWNpZmllZC4KLQkgIAl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5hZGQodmFsaWRGaWxlKTsKLQkgIAl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5hZGQodmFsaWRGaWxlMik7Ci0JICAJdmFsaWRhdGUudmFsaWRhdGUoKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgdHdvIHZhbGlkIGZpbGVzIGZhaWxlZC4iLCBNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfVkFMSURBVElPTl9TVU1NQVJZLCBuZXcgT2JqZWN0W117bmV3IEludGVnZXIoMiksIG5ldyBJbnRlZ2VyKDApfSksIGxvZ2dlci5nZXRJbmZvcygpLmdldCgwKSk7Ci0JICAJdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCkuY2xlYXIoKTsKLQkgIAlsb2dnZXIuZ2V0SW5mb3MoKS5jbGVhcigpOwotCSAgCi0JICAJLy8gMy4gVGhlIG1ldGhvZCBzaG91bGQgb3V0cHV0IHZlcmJvc2UgaW5mb3JtYXRpb24gZm9yIHZhbGlkIGZpbGVzIHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkLgotCSAgCXZhbGlkYXRlLnNldFZlcmJvc2UodHJ1ZSk7Ci0JICAJdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCkuYWRkKHZhbGlkRmlsZSk7Ci0JICAJdmFsaWRhdGUudmFsaWRhdGUoKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0ZJTEVfVkFMSUQsIG5ldyBPYmplY3RbXXt2YWxpZEZpbGV9KSwgbG9nZ2VyLmdldFZlcmJvc2VzKCkuZ2V0KDApKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1ZBTElEQVRJT05fU1VNTUFSWSwgbmV3IE9iamVjdFtde25ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigwKX0pLCBsb2dnZXIuZ2V0SW5mb3MoKS5nZXQoMCkpOwotCSAgCXZhbGlkYXRlLmdldFdTRExGaWxlcygpLmNsZWFyKCk7Ci0JICAJdmFsaWRhdGUuc2V0VmVyYm9zZShmYWxzZSk7Ci0JICAJbG9nZ2VyLmdldEluZm9zKCkuY2xlYXIoKTsKLQkgIAlsb2dnZXIuZ2V0VmVyYm9zZXMoKS5jbGVhcigpOwotCSAgCi0JICAJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihjdXJyZW50TG9nZ2VyKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCB0aGUgZ2V0TWVzc2FnZXMgbWV0aG9kLgotCSAqIDEuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIGVycm9yLgotCSAqIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIHdhcm5pbmcuCi0JICogMy4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgZm9tYXR0ZWQgc3RyaW5nIGZvciAyIG1lc3NhZ2VzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRNZXNzYWdlcygpCi0JewkKLQkJSVZhbGlkYXRpb25NZXNzYWdlIGVycm9yTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIk1FU1NBR0UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SLCAiVVJJIik7Ci0JCUlWYWxpZGF0aW9uTWVzc2FnZSB3YXJuaW5nTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIk1FU1NBR0UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcsICJVUkkiKTsKLQkJLy8gMS4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgZm9ybWF0dGVkIHN0cmluZyBmb3IgYSBzaW5nbGUgZXJyb3IuCi0JCUlWYWxpZGF0aW9uTWVzc2FnZVtdIGVycm9yTWVzc2FnZXMgPSBuZXcgSVZhbGlkYXRpb25NZXNzYWdlW117ZXJyb3JNZXNzYWdlfTsKLQkJU3RyaW5nIG1lc3NhZ2UgPSB2YWxpZGF0ZS5nZXRNZXNzYWdlcyhlcnJvck1lc3NhZ2VzKTsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgZXJyb3IgbWVzc2FnZSB3YXMgbm90IGNvcnJlY3QuIiwgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0VSUk9SX01BUktFUiArICIgMToyIE1FU1NBR0UiLCBtZXNzYWdlKTsKLQkJCi0JCS8vIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIHdhcm5pbmcuCi0JCUlWYWxpZGF0aW9uTWVzc2FnZVtdIHdhcm5pbmdNZXNzYWdlcyA9IG5ldyBJVmFsaWRhdGlvbk1lc3NhZ2VbXXt3YXJuaW5nTWVzc2FnZX07Ci0JCVN0cmluZyBtZXNzYWdlMiA9IHZhbGlkYXRlLmdldE1lc3NhZ2VzKHdhcm5pbmdNZXNzYWdlcyk7Ci0JCWFzc2VydEVxdWFscygiVGhlIHdhcm5pbmcgbWVzc2FnZSB3YXMgbm90IGNvcnJlY3QuIiwgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSICsgIiAxOjIgTUVTU0FHRSIsIG1lc3NhZ2UyKTsKLQkJCi0JCS8vIDMuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvbWF0dGVkIHN0cmluZyBmb3IgMiBtZXNzYWdlcy4KLQkJSVZhbGlkYXRpb25NZXNzYWdlW10gdHdvTWVzc2FnZXMgPSBuZXcgSVZhbGlkYXRpb25NZXNzYWdlW117ZXJyb3JNZXNzYWdlLCB3YXJuaW5nTWVzc2FnZX07Ci0JCVN0cmluZyBtZXNzYWdlMyA9IHZhbGlkYXRlLmdldE1lc3NhZ2VzKHR3b01lc3NhZ2VzKTsKLQkJYXNzZXJ0RXF1YWxzKCJUd28gbWVzc2FnZXMgd2FzIG5vdCBjb3JyZWN0LiIsIFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9FUlJPUl9NQVJLRVIgKyAiIDE6MiBNRVNTQUdFXG4iICsgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSICsgIiAxOjIgTUVTU0FHRSIsIG1lc3NhZ2UzKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCB0aGUgcGFyc2VBcmd1bWVudHMgbWV0aG9kLgotCSAqIDEuIC13c2RsMTF2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCSAqIDIuIC1leHR2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCSAqIDMuIEV4dGVuc2lvbiB2YWxpZGF0b3IgcGFyc2luZyB3aGVyZSBhIHBhcmFtIGlzIG9taXR0ZWQgc3VjY2VlZHMuCi0JICogNC4gLWxvZ2dlciBwYXJzaW5nIHN1Y2NlZWRzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IGxvZ2dlci4KLQkgKiA1LiAtRCAocHJvcGVydHkpIHBhcnNpbmcgc3VjY2VlZHMgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIGNvbmZpZ3VyYXRpb24uCi0JICogNi4gLXYsIC12ZXJib3NlIHBhcnNpbmcgc3VjY2VlZHMgYW5kIHNldHMgdmVyYm9zZSBjb3JyZWN0bHkuCi0JICogNy4gVGhlIHNwZWNpZmllZCBXU0RMIGZpbGVzIGFyZSByZWFkIHByb3Blcmx5LgotCSAqIAotCSAqIE5vdCBjdXJyZW50bHkgdGVzdGVkOgotCSAqIAkJLXNjaGVtYQotCSAqIAkJLXNjaGVtYURpcgotCSAqIAkJLXVyaXJlc29sdmVyCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBhcnNlQXJndW1lbnRzKCkKLQl7Ci0JCS8vIDEuIC13c2RsMTF2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCQlTdHJpbmdbXSBhcmdzMSA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX1dTREwxMVZBTCwgImh0dHA6Ly93c2RsMTF2YWxpZGF0b3IiLCAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cC5IVFRQVmFsaWRhdG9yIn07Ci0JCXZhbGlkYXRlLnBhcnNlQXJndW1lbnRzKGFyZ3MxKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFdTREwgMS4xIHZhbGlkYXRvciB3YXMgbm90IHJlZ2lzdGVyZWQuIiwgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5oYXNSZWdpc3RlcmVkVmFsaWRhdG9yKCJodHRwOi8vd3NkbDExdmFsaWRhdG9yIikpOwotCQkKLQkJLy8gMi4gLWV4dHYgcGFyc2luZyBzdWNjZWVkcyBhbmQgcmVnaXN0ZXJzIHRoZSB2YWxpZGF0b3Igd2l0aCB0aGUgV1NETCB2YWxpZGF0b3IuCi0JCVN0cmluZ1tdIGFyZ3MyID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fRVhUVkFMLCAiaHR0cDovL2V4dHZhbGlkYXRvciIsICJ2YWxpZGF0b3JjbGFzcyJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzMik7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGV4dGVuc2lvbiB2YWxpZGF0b3Igd2FzIG5vdCByZWdpc3RlcmVkLiIsIFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuaGFzUmVnaXN0ZXJlZFZhbGlkYXRvcigiaHR0cDovL2V4dHZhbGlkYXRvciIsIFZhbGlkYXRvclJlZ2lzdHJ5LkVYVF9WQUxJREFUT1IpKTsKLQkJCi0JCS8vIDMuIEV4dGVuc2lvbiB2YWxpZGF0b3IgcGFyc2luZyB3aGVyZSBhIHBhcmFtIGlzIG9taXR0ZWQgc3VjY2VlZHMuCi0JCVN0cmluZ1tdIGFyZ3MzID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fRVhUVkFMLCAiaHR0cDovL2V4dHZhbGlkYXRvcjIiLCAiLWR1bW15cGFyYW0ifTsKLQkJdmFsaWRhdGUucGFyc2VBcmd1bWVudHMoYXJnczMpOwotCQlhc3NlcnRGYWxzZSgiVGhlIFdTREwgZXh0ZW5zaW9uIHZhbGlkYXRvciB3YXMgcmVnaXN0ZXJlZCB3aXRob3V0IGVub3VnaCBpbmZvcm1hdGlvbi4iLCBWYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmhhc1JlZ2lzdGVyZWRWYWxpZGF0b3IoImh0dHA6Ly9leHR2YWxpZGF0b3IyIiwgVmFsaWRhdG9yUmVnaXN0cnkuRVhUX1ZBTElEQVRPUikpOwotCQkKLQkJLy8gNC4gLWxvZ2dlciBwYXJzaW5nIHN1Y2NlZWRzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IGxvZ2dlci4KLQkJSUxvZ2dlciBjdXJyZW50TG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpOwotCQlTdHJpbmdbXSBhcmdzNCA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX0xPR0dFUiwgIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5TdGFuZGFyZExvZ2dlciJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNCk7Ci0JCWFzc2VydFRydWUoIlRoZSByZWdpc3RlcmVkIGxvZ2dlciBpcyBub3QgYSBTdGFuZGFyZExvZ2dlciIsIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKSBpbnN0YW5jZW9mIFN0YW5kYXJkTG9nZ2VyKTsKLQkJYXNzZXJ0RmFsc2UoIlRoZSByZWdpc3RlcmVkIGxvZ2dlciBpcyB0aGUgc2FtZSBhcyBvcmlnaW5hbGx5IHJlZ2lzdGVyZWQuIiwgY3VycmVudExvZ2dlci5lcXVhbHMoTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpKSk7Ci0JCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5zZXRMb2dnZXIoY3VycmVudExvZ2dlcik7Ci0JCQotCQkvLyA1LiAtRCAocHJvcGVydHkpIHBhcnNpbmcgc3VjY2VlZHMgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIGNvbmZpZ3VyYXRpb24uCi0JCVN0cmluZ1tdIGFyZ3M1ID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fUFJPUEVSVFkgKyAiU0FNUExFTkFNRT1TQU1QTEVWQUxVRSJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNSk7Ci0JCWFzc2VydEVxdWFscygiVGhlIHBhcmFtZXRlciB3YXMgbm90IHNldCBjb3JyZWN0bHkuIiwgIlNBTVBMRVZBTFVFIiwgdmFsaWRhdGUuZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KCJTQU1QTEVOQU1FIikpOwotCQkKLQkJLy8gNi4gLXYsIC12ZXJib3NlIHBhcnNpbmcgc3VjY2VlZHMgYW5kIHNldHMgdmVyYm9zZSBjb3JyZWN0bHkuCi0JCVN0cmluZ1tdIGFyZ3M2ID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fVkVSQk9TRX07Ci0JCXZhbGlkYXRlLnNldFZlcmJvc2UoZmFsc2UpOwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNik7Ci0JCWFzc2VydFRydWUoIlZlcmJvc2UgaXMgbm90IHNldCB0byB0cnVlLiIsIHZhbGlkYXRlLmlzVmVyYm9zZSgpKTsKLQkJCi0JCVN0cmluZ1tdIGFyZ3M2YSA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX1ZFUkJPU0VfU0hPUlR9OwotCQl2YWxpZGF0ZS5zZXRWZXJib3NlKGZhbHNlKTsKLQkJdmFsaWRhdGUucGFyc2VBcmd1bWVudHMoYXJnczZhKTsKLQkJYXNzZXJ0VHJ1ZSgiVmVyYm9zZSBpcyBub3Qgc2V0IHRvIHRydWUuIiwgdmFsaWRhdGUuaXNWZXJib3NlKCkpOwotCQkKLQkJLy8gNy4gVGhlIHNwZWNpZmllZCBXU0RMIGZpbGVzIGFyZSByZWFkIHByb3Blcmx5LgotCQlTdHJpbmdbXSBhcmdzNyA9IG5ldyBTdHJpbmdbXXsiZmlsZW5hbWUxLndzZGwiLCAiZm9sZGVyL2ZpbGVuYW1lMi53c2RsIiwgImZvbGRlclxmaWxlbmFtZTMud3NkbCJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNyk7Ci0JCUxpc3Qgd3NkbEZpbGVzID0gdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCk7Ci0JCWFzc2VydEVxdWFscygiVGhlcmUgd2VyZSBub3QgMyBXU0RMIGZpbGVzIGxpc3RlZCB0byB2YWxpZGF0ZS4iLCAzLCB3c2RsRmlsZXMuc2l6ZSgpKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFdTREwgZmlsZSBsaXN0IGRpZCBub3QgaW5jbHVkZSBmaWxlbmFtZTEud3NkbCIsIHdzZGxGaWxlcy5jb250YWlucygiZmlsZW5hbWUxLndzZGwiKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGZpbGUgbGlzdCBkaWQgbm90IGluY2x1ZGUgZm9sZGVyL2ZpbGVuYW1lMi53c2RsIiwgd3NkbEZpbGVzLmNvbnRhaW5zKCJmb2xkZXIvZmlsZW5hbWUyLndzZGwiKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGZpbGUgbGlzdCBkaWQgbm90IGluY2x1ZGUgZm9sZGVyXGZpbGVuYW1lMy53c2RsIiwgd3NkbEZpbGVzLmNvbnRhaW5zKCJmb2xkZXJcZmlsZW5hbWUzLndzZGwiKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3RMb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0TG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNTJhNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3RMb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLQotLyoqCi0gKiBBIGhlbHBlciBjbGFzcyBmb3IgdGVzdGluZyB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIG1lc3NhZ2VzIGxvZ2dlZC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZVRlc3RMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHsKLQotCXByb3RlY3RlZCBMaXN0IGVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCB3YXJuaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCBpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCB2ZXJib3NlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLQl7Ci0JCWlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0VSUk9SKQotCQl7Ci0JCQllcnJvcnMuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQkJewotCQkJd2FybmluZ3MuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfSU5GTykKLQkJewotCQkJaW5mb3MuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfVkVSQk9TRSkKLQkJewotCQkJdmVyYm9zZXMuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlRocm93YWJsZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0JewotCQlsb2cobWVzc2FnZSwgc2V2ZXJpdHkpOwotCQlsb2codGhyb3dhYmxlLnRvU3RyaW5nKCksIHNldmVyaXR5KTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBlcnJvciBsaXN0LgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBlcnJvciBsaXN0LgotCSAqLwotCXB1YmxpYyBMaXN0IGdldEVycm9ycygpCi0JewotCQlyZXR1cm4gZXJyb3JzOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHdhcm5pbmcgbGlzdC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogCQlUaGUgd2FybmluZyBsaXN0LgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdhcm5pbmdzKCkKLQl7Ci0JCXJldHVybiB3YXJuaW5nczsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBpbmZvIGxpc3QuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVGhlIGluZm8gbGlzdC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRJbmZvcygpCi0JewotCQlyZXR1cm4gaW5mb3M7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB2ZXJib3NlIGxpc3QuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVGhlIHZlcmJvc2UgbGlzdC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRWZXJib3NlcygpCi0JewotCQlyZXR1cm4gdmVyYm9zZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVdyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDA3YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0b3I7Ci0KLS8qKgotICogQSB3cmFwcGVyIGNsYXNzIG9mIFdTRExWYWxpZGF0ZSB0aGF0IGV4cG9zZXMgaW50ZXJuYWxzIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlV3JhcHBlciBleHRlbmRzIFdTRExWYWxpZGF0ZSAKLXsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC5XU0RMVmFsaWRhdGUjZ2V0TWVzc2FnZXMob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2VbXSkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VzKElWYWxpZGF0aW9uTWVzc2FnZVtdIG1lc3NhZ2VzKSAKLQl7Ci0JCXJldHVybiBzdXBlci5nZXRNZXNzYWdlcyhtZXNzYWdlcyk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS50ZXh0LldTRExWYWxpZGF0ZSNwYXJzZUFyZ3VtZW50cyhqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JcHVibGljIHZvaWQgcGFyc2VBcmd1bWVudHMoU3RyaW5nW10gYXJncykgCi0JewotCQlzdXBlci5wYXJzZUFyZ3VtZW50cyhhcmdzKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQuV1NETFZhbGlkYXRlI3ZhbGlkYXRlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIAotCXsKLQkJc3VwZXIudmFsaWRhdGUoKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQuV1NETFZhbGlkYXRlI3ZhbGlkYXRlRmlsZShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBJVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZUZpbGUoU3RyaW5nIGZpbGVuYW1lKSAKLQl7Ci0JCXJldHVybiBzdXBlci52YWxpZGF0ZUZpbGUoZmlsZW5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGludGVybmFsIFdTREwgdmFsaWRhdG9yLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBpbnRlcm5hbCBXU0RMIHZhbGlkYXRvci4KLQkgKi8KLQlwdWJsaWMgV1NETFZhbGlkYXRvciBnZXRXU0RMVmFsaWRhdG9yKCkKLQl7Ci0JCXJldHVybiB3c2RsVmFsaWRhdG9yOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIFdTREwgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBXU0RMIHZhbGlkYXRpb24gY29uZmlndXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKQotCXsKLQkJcmV0dXJuIGNvbmZpZ3VyYXRpb247Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBXU0RMIGZpbGVzIHRvIHZhbGlkYXRlLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBsaXN0IG9mIFdTREwgZmlsZXMgdG8gdmFsaWRhdGUuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V1NETEZpbGVzKCkKLQl7Ci0JCXJldHVybiB3c2RsRmlsZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB2ZXJib3NlIGlzIG9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVHJ1ZSBpZiB2ZXJib3NlIGlzIG9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWZXJib3NlKCkKLQl7Ci0JCXJldHVybiB2ZXJib3NlOwotCX0KLQkKLQkvKioKLQkgKiBTZXQgd2hldGhlciByZXBvcnRpbmcgc2hvdWxkIGJlIGRvbmUgaW4gYSB2ZXJib3NlIHdheS4KLQkgKiAKLQkgKiBAcGFyYW0gdmVyYm9zZQotCSAqIAkJSWYgdHJ1ZSByZXBvcnRpbmcgd2lsbCBiZSBkb25lIGluIGEgdmVyYm9zZSB3YXksIG90aGVyd2lzZSBpdCB3aWxsIG5vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWZXJib3NlKGJvb2xlYW4gdmVyYm9zZSkKLQl7Ci0JCXRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBlM2VmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFRlc3RzIGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yLgotICoKLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYUdlbmVyYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBJbmxpbmVTY2hlbWFHZW5lcmF0b3JXcmFwcGVyIGdlbmVyYXRvcjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotCXJldHVybiBuZXcgVGVzdFN1aXRlKElubGluZVNjaGVtYUdlbmVyYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogSlVuaXQgc2V0dXAgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VXAoKQotICB7Ci0JZ2VuZXJhdG9yID0gbmV3IElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKCkKLSAgewotCS8vIFRlc3QgZW1wdHkgbGlzdC4KLQlhc3NlcnRGYWxzZSgiVGhlIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gZmFsc2Ugd2hlbiBnaXZlbiBhbiBlbXB0eSBsaXN0LiIsIGdlbmVyYXRvci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKG5ldyBBcnJheUxpc3QoKSkpOwotCQotCS8vIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIHJldHVybnMgZmFsc2UKLQkvLyB3aGVuIGdpdmVuIGEgbGlzdCB3aXRob3V0IHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZS4KLQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JbGlzdC5hZGQoImh0dHA6Ly9ub3Rzb2FwZW5jb2RpbmduYW1lc3BhY2UiKTsKLQlhc3NlcnRGYWxzZSgiVGhlIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gZmFsc2Ugd2hlbiBnaXZlbiBhIGxpc3Qgd2l0aG91dCB0aGUgU09BUCBlbnZlbG9wZSBuYW1lc3BhY2UuIiwgZ2VuZXJhdG9yLmNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQobGlzdCkpOwotCQotCS8vIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIHJldHVybnMgdHJ1ZQotCS8vIHdoZW4gZ2l2ZW4gYSBsaXN0IHdpdGggdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlLgotCUxpc3QgbGlzdDIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JbGlzdDIuYWRkKElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuU09BUF9FTkNPRElOR19VUkkpOwotCWFzc2VydFRydWUoIlRoZSBtZXRob2QgZG9lcyBub3QgcmV0dXJuIHRydWUgd2hlbiBnaXZlbiBhIGxpc3Qgd2l0aCB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuIiwgZ2VuZXJhdG9yLmNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQobGlzdDIpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRPRE86IEltcGxlbWVudCB0ZXN0cyBmb3IgdGhlIENyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5IG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9DcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseSgpIAotICB7Ci0gIH0KLQotICAvKioKLSAgICogVE9ETzogSW1wbGVtZW50IHRlc3RzIGZvciB0aGUgR2V0SW1wb3J0TmFtZXNwYWNlIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9HZXRJbXBvcnROYW1lc3BhY2VzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgCSogVGVzdCB0aGF0IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlCi0gICAJKiByZXNvbHZlci4KLSAgIAkqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0TlNSZXNvbHZlcigpIAotICB7Ci0gICAgRG9jdW1lbnQgZG9jID0gbmV3IERvY3VtZW50SW1wbCgpOwotCUVsZW1lbnQgcm9vdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJzY2hlbWEiKTsKLQotCS8vIENoZWNrIHRoYXQgdGhlIHJlc29sdmVyIGlzIGVtcHR5LgotCUhhc2h0YWJsZSByZXNvbHZlciA9IGdlbmVyYXRvci5nZXROU1Jlc29sdmVyKHJvb3RFbGVtKTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVzb2x2ZXIgaXMgbm90IGVtcHR5LiIsIHJlc29sdmVyLmlzRW1wdHkoKSk7Ci0JCi0JLy8gQ2hlY2sgdGhlIHJlc29sdmVyIGNvbnRhaW5zIG9uZSB2YWx1ZS4KLQlyb290RWxlbS5zZXRBdHRyaWJ1dGUoInhtbG5zIiwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JcmVzb2x2ZXIgPSBnZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihyb290RWxlbSk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGVtcHR5IG5hbWVzcGFjZS4iLCByZXNvbHZlci5jb250YWluc0tleSgiIikpOwotCWFzc2VydEVxdWFscygiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBlbXB0eSBuYW1lc3BhY2UuIiwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgcmVzb2x2ZXIuZ2V0KCIiKSk7Ci0JCi0JLy8gQ2hlY2sgdGhlIHJlc29sdmVyIGNvbnRhaW5zIHR3byB2YWx1ZXMuCi0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ4bWxuczpvdGhlciIsICJodHRwOi8vb3RoZXJuYW1lc3BhY2UiKTsKLQlyZXNvbHZlciA9IGdlbmVyYXRvci5nZXROU1Jlc29sdmVyKHJvb3RFbGVtKTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVzb2x2ZXIgZG9lcyBub3QgY29udGFpbiB0aGUgb3RoZXIgbmFtZXNwYWNlLiIsIHJlc29sdmVyLmNvbnRhaW5zS2V5KCJvdGhlciIpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXNvbHZlciBkb2VzIG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGUgb3RoZXIgbmFtZXNwYWNlLiIsICJodHRwOi8vb3RoZXJuYW1lc3BhY2UiLCByZXNvbHZlci5nZXQoIm90aGVyIikpOwotCQotCS8vIENoZWNrIHRoZSByZXNvbHZlciBzdGlsbCBjb250YWlucyB0aGUgZW1wdHkgbmFtZXNwYWNlLgotCWFzc2VydFRydWUoIlRoZSByZXNvbHZlciBkb2VzIG5vdCBjb250YWluIHRoZSBlbXB0eSBuYW1lc3BhY2UgYWZ0ZXIgYWRkaW5nIGEgc2Vjb25kIG5hbWVzcGFjZS4iLCByZXNvbHZlci5jb250YWluc0tleSgiIikpOwotCWFzc2VydEVxdWFscygiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBlbXB0eSBuYW1lc3BhY2UgYWZ0ZXIgYWRkaW5nIGEgc2Vjb25kIG5hbWVzcGFjZS4iLCBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCByZXNvbHZlci5nZXQoIiIpKTsKLQkKLQkvLyBDaGVjayB0aGUgcmVzb2x2ZXIgZG9lc24ndCBjb250YWluIG5vbi14bWxucyBhdHRyaWJ1dGUgdmFsdWUuCi0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ0eXBlOm90aGVyMiIsICJvdGhlcjI6dHlwZSIpOwotCXJlc29sdmVyID0gZ2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIocm9vdEVsZW0pOwotCWFzc2VydEZhbHNlKCJUaGUgcmVzb2x2ZXIgY29udGFpbnMgdGhlIG90aGVyMiBuYW1lc3BhY2UuIiwgcmVzb2x2ZXIuY29udGFpbnNLZXkoIm90aGVyMiIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVxdWlyZWQgcHJlZml4ZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0UHJlZml4ZXMoKSAKLSAgewotCS8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbm8gcmVxdWlyZWQgbmFtZXNwYWNlcyBhbmQgbm8gcHJlZml4LgotCURvY3VtZW50IGRvYyA9IG5ldyBEb2N1bWVudEltcGwoKTsKLQlFbGVtZW50IHJvb3RFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAic2NoZW1hIik7Ci0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ4bWxucyIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JLy9kb2MuYXBwZW5kQ2hpbGQocm9vdEVsZW0pOwotCQotCUxpc3QgcmVxTlNzID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIG9uZSBlbXB0eSBzdHJpbmcuIiwgMSwgcmVxTlNzLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmUgZW1wdHkgc3RyaW5nLiIsICIiLCByZXFOU3MuZ2V0KDApKTsKLQkKLQkvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG5vIHJlcXVpcmVkIG5hbWVzcGFjZXMgYW5kIHRoZSB4c2QgcHJlZml4LgotCUVsZW1lbnQgcm9vdEVsZW0yID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOnNjaGVtYSIpOwotCXJvb3RFbGVtMi5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JTGlzdCByZXFOU3MyID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtMik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJy4iLCAxLCByZXFOU3MyLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJy4iLCAieHNkIiwgcmVxTlNzMi5nZXQoMCkpOwotCQotCS8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgYW4gZWxlbWVudCB3aXRoIGEgcmVxdWlyZWQgbmFtZXNwYWNlLgotCUVsZW1lbnQgcm9vdEVsZW00ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOnNjaGVtYSIpOwotCXJvb3RFbGVtMi5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JRWxlbWVudCBkaWZmTlNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL290aGVybmFtZXNwYWNlIiwgIm90aGVyOmVsZW1lbnQiKTsKLQlyb290RWxlbTQuYXBwZW5kQ2hpbGQoZGlmZk5TRWxlbSk7Ci0JTGlzdCByZXFOU3M0ID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtNCk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHByZWZpeCAnb3RoZXInIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgZm9yIGFuIGVsZW1lbnQuIiwgcmVxTlNzNC5jb250YWlucygib3RoZXIiKSk7Ci0JCi0JLy8gQ2hlY2sgZG9jdW1lbnQgdGhhdCBjb250YWlucyBhIHR5cGUgd2l0aCBhIHJlcXVpcmVkIG5hbWVzcGFjZS4KLQlFbGVtZW50IHJvb3RFbGVtNSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDpzY2hlbWEiKTsKLQlyb290RWxlbTUuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotCUVsZW1lbnQgb3RoZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOmVsZW1lbnQiKTsKLQlvdGhlckVsZW0uc2V0QXR0cmlidXRlKCJ0eXBlIiwgIm90aGVyOnR5cGUiKTsKLQlyb290RWxlbTUuYXBwZW5kQ2hpbGQob3RoZXJFbGVtKTsKLQlMaXN0IHJlcU5TczUgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW01KTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiAnb3RoZXInIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgZm9yIGEgdHlwZS4iLCByZXFOU3M1LmNvbnRhaW5zKCJvdGhlciIpKTsKLQkKLQkvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGFuIGltcG9ydC4gSW1wb3J0IGVsZW1lbnRzIHNob3VsZCBiZSBpZ25vcmVkLgotCS8vIFRoaXMgaXMgYSBjb250cml2ZWQgZXhhbXBsZSBhcyBpdCBjb250YWlucyBhIHR5cGUgYXR0cmlidXRlIGZvciB0aGUgaW1wb3J0IGVsZW1lbnQuCi0JRWxlbWVudCByb290RWxlbTYgPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6c2NoZW1hIik7Ci0Jcm9vdEVsZW02LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIixDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlFbGVtZW50IGltcG9ydEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6aW1wb3J0Iik7Ci0JaW1wb3J0RWxlbS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAib3RoZXI6dHlwZSIpOwotCXJvb3RFbGVtNi5hcHBlbmRDaGlsZChpbXBvcnRFbGVtKTsKLQlMaXN0IHJlcU5TczYgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW02KTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBvbmUgc3RyaW5nICd4c2QnIHdoZW4gYW4gaW1wb3J0IGVsZW1lbnQgaXMgdXNlZC4iLCAxLCByZXFOU3M2LnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJyB3aGVuIGFuIGltcG9ydCBlbGVtZW50IGlzIHVzZWQuIiwgInhzZCIsIHJlcU5TczYuZ2V0KDApKTsKLQkKLSAgICAvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGFuIGluY2x1ZGUuIEluY2x1ZGUgZWxlbWVudHMgc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnRyaXZlZCBleGFtcGxlIGFzIGl0IGNvbnRhaW5zIGEgdHlwZSBhdHRyaWJ1dGUgZm9yIHRoZSBpbmNsdWRlIGVsZW1lbnQuCi0JRWxlbWVudCByb290RWxlbTcgPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6c2NoZW1hIik7Ci0Jcm9vdEVsZW03LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIixDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlFbGVtZW50IGluY2x1ZGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOmluY2x1ZGUiKTsKLQlpbmNsdWRlRWxlbS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAib3RoZXI6dHlwZSIpOwotCXJvb3RFbGVtNy5hcHBlbmRDaGlsZChpbmNsdWRlRWxlbSk7Ci0JTGlzdCByZXFOU3M3ID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtNik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJyB3aGVuIGFuIGltcG9ydCBlbGVtZW50IGlzIHVzZWQuIiwgMSwgcmVxTlNzNy5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIG9uZSBzdHJpbmcgJ3hzZCcgd2hlbiBhbiBpbXBvcnQgZWxlbWVudCBpcyB1c2VkLiIsICJ4c2QiLCByZXFOU3M3LmdldCgwKSk7Ci0JCi0JLy8gQ2hlY2sgZG9jdW1lbnQgdGhhdCBjb250YWlucyBhdHRyaWJ1dGUgd2l0aCBhIHJlcXVpcmVkIG5hbWVzcGFjZS4KLQlFbGVtZW50IHJvb3RFbGVtMyA9IGRvYy5jcmVhdGVFbGVtZW50TlMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDpzY2hlbWEiKTsKLQlyb290RWxlbTMuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotCUVsZW1lbnQgd3NkbEF0dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6ZWxlbWVudCIpOwotCXdzZGxBdHRFbGVtLnNldEF0dHJpYnV0ZU5TKENvbnN0YW50cy5OU19VUklfV1NETCwgIndzZGw6YXJyYXlUeXBlIiwgInNvbWV0eXBlW10iKTsKLQlyb290RWxlbTMuYXBwZW5kQ2hpbGQod3NkbEF0dEVsZW0pOwotCUxpc3QgcmVxTlNzMyA9IGdlbmVyYXRvci5nZXROYW1lc3BhY2VQcmVmaXhlcyhyb290RWxlbTMpOwotCWFzc2VydFRydWUoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluICd3c2RsJyB3aGVuIHRoZSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGZvciBhbiBhdHRyaWJ1dGUuIiwgcmVxTlNzMy5jb250YWlucygid3NkbCIpKTsKLQkKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZW1vdmVJbXBvcnRzIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9SZW1vdmVJbXBvcnRzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZW1vdmVMb2NhbE5hbWVzcGFjZSBtZXRob2QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0b2RvUmVtb3ZlTG9jYWxOYW1lc3BhY2VzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZXNvbHZlTmFtZXNwYWNlIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9SZXNvbHZlTmFtZXNwYWNlcygpIAotICB7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVzdHJpY3RJbXBvcnRzKCkgCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzlkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgdG8gYWxsb3cgdGVzdGluZyBwcm90ZWN0ZWQgbWV0aG9kcy4KLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIgZXh0ZW5kcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgCi17Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI2NoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQoamF2YS51dGlsLkxpc3QpCi0JICovCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChMaXN0IHJlcW5zKSAKLQl7Ci0JCXJldHVybiBzdXBlci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKHJlcW5zKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI2NyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuTGlzdCwgamF2YS51dGlsLkhhc2h0YWJsZSwgamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KEVsZW1lbnQgZWxlbSwgTGlzdCBlbGVtZW50cywgTGlzdCByZXF1aXJlZE5hbWVzcGFjZXMsIEhhc2h0YWJsZSByZXFOU0RlY2wsIFN0cmluZyBmaWxlbG9jYXRpb24pIAotCXsKLQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KGVsZW0sIGVsZW1lbnRzLCByZXF1aXJlZE5hbWVzcGFjZXMsCi0JCQkJcmVxTlNEZWNsLCBmaWxlbG9jYXRpb24pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjZ2V0SW1wb3J0TmFtZXNwYWNlcyhvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXByb3RlY3RlZCBMaXN0IGdldEltcG9ydE5hbWVzcGFjZXMoRWxlbWVudCBlbGVtKSAKLQl7Ci0JCXJldHVybiBzdXBlci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjZ2V0TlNSZXNvbHZlcihvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXByb3RlY3RlZCBIYXNodGFibGUgZ2V0TlNSZXNvbHZlcihFbGVtZW50IGVsZW0pIAotCXsKLQkJcmV0dXJuIHN1cGVyLmdldE5TUmVzb2x2ZXIoZWxlbSk7Ci0JfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNnZXROYW1lc3BhY2VQcmVmaXhlcyhvcmcudzNjLmRvbS5FbGVtZW50KQotICAgICAqLwotICAgIHByb3RlY3RlZCBMaXN0IGdldE5hbWVzcGFjZVByZWZpeGVzKEVsZW1lbnQgZWxlbSkgCi0gICAgewotCSAgICByZXR1cm4gc3VwZXIuZ2V0TmFtZXNwYWNlUHJlZml4ZXMoZWxlbSk7Ci0gICAgfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNyZW1vdmVJbXBvcnRzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuTGlzdCkKLQkgKi8KLQlwcm90ZWN0ZWQgTGlzdCByZW1vdmVJbXBvcnRzKExpc3QgbmFtZXNwYWNlcywgTGlzdCBpbXBvcnRlZE5hbWVzcGFjZXMpIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlbW92ZUltcG9ydHMobmFtZXNwYWNlcywgaW1wb3J0ZWROYW1lc3BhY2VzKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI3JlbW92ZUxvY2FsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTGlzdCwgb3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhuYW1lc3BhY2VzLCBlbGVtKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI3Jlc29sdmVOYW1lc3BhY2VzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuSGFzaHRhYmxlLCBqYXZhLnV0aWwuSGFzaHRhYmxlKQotCSAqLwotCXByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlc29sdmVOYW1lc3BhY2VzKG5hbWVzcGFjZXMsIG5zUmVzb2x2ZXIsIHBhcmVudE5TUmVzb2x2ZXIpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjcmVzdHJpY3RJbXBvcnRzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuU2V0KQotCSAqLwotCXByb3RlY3RlZCBMaXN0IHJlc3RyaWN0SW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIFNldCB2YWxpZEltcG9ydE5TcykgCi0JewotCQlyZXR1cm4gc3VwZXIucmVzdHJpY3RJbXBvcnRzKG5hbWVzcGFjZXMsIHZhbGlkSW1wb3J0TlNzKTsKLQl9Ci0gICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjFjZDZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQmFzZVRlc3RDYXNlOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgV1NETCB2YWxpZGF0b3IncyBpbnRlcm5hbCBYTUwgY2F0YWxvZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIENBVEFMT0dfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotCXJldHVybiBuZXcgVGVzdFN1aXRlKFhNTENhdGFsb2dUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JWE1MQ2F0YWxvZy5yZXNldCgpOwotICB9Ci0KLQotCi1wdWJsaWMgdm9pZCB0ZXN0U2NoZW1hRGlyKCkKLSAgewotCVhNTENhdGFsb2cuYWRkU2NoZW1hRGlyKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgQ0FUQUxPR19ESVIpOwotCVN0cmluZyBjYXRhbG9nTG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIENBVEFMT0dfRElSOwotCWNhdGFsb2dMb2NhdGlvbiA9IGNhdGFsb2dMb2NhdGlvbi5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICB3aGlsZShjYXRhbG9nTG9jYXRpb24uc3RhcnRzV2l0aCgiLyIpKQotICAgIHsKLSAgICAJY2F0YWxvZ0xvY2F0aW9uID0gY2F0YWxvZ0xvY2F0aW9uLnN1YnN0cmluZygxKTsKLSAgICB9Ci0gICAgY2F0YWxvZ0xvY2F0aW9uID0gRklMRV9QUk9UT0NPTCArIGNhdGFsb2dMb2NhdGlvbjsKLQlJWE1MQ2F0YWxvZyBjYXRhbG9nID0gWE1MQ2F0YWxvZy5nZXRJbnN0YW5jZSgpOwotCVN0cmluZyByZXNvbHZlZExvY2F0aW9uID0gY2F0YWxvZy5yZXNvbHZlRW50aXR5TG9jYXRpb24oImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMSIsICIiKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXNvbHZlZCBsb2NhdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiIsIGNhdGFsb2dMb2NhdGlvbiArICJzY2hlbWExLnhzZCIsIHJlc29sdmVkTG9jYXRpb24pOwotCXJlc29sdmVkTG9jYXRpb24gPSBjYXRhbG9nLnJlc29sdmVFbnRpdHlMb2NhdGlvbigiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWEyIiwgIiIpOwotCWFzc2VydEVxdWFscygiVGhlIHNlY29uZCByZXNvbHZlZCBsb2NhdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIHJlc29sdmVkIGxvY2F0aW9uLiIsIGNhdGFsb2dMb2NhdGlvbiArICJzY2hlbWEyLnhzZCIsIHJlc29sdmVkTG9jYXRpb24pOwotICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxXU0RMVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsV1NETFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MzUwZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxXU0RMVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50LkFudExvZ2dlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQuV1NETFZhbGlkYXRlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBXU0RMIHZhbGlkYXRvciB0ZXN0IHN1aXRlcy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFdTRExUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFdTRExUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxXU0RMVGVzdHMoKQotICB7Ci0gICAgc3VwZXIoIkFsbFdTRExUZXN0cyIpOwotICAgIGFkZFRlc3QoVmFsaWRhdG9yVGVzdC5zdWl0ZSgpKTsKLSAgICAvL2FkZFRlc3QoV1NETFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoV1NETFRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChQYXRoc1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChVUklSZXNvbHZlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChXU0RMVmFsaWRhdGVUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MQ2F0YWxvZ1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChJbmxpbmVTY2hlbWFHZW5lcmF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoQW50TG9nZ2VyVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC5XU0RMVmFsaWRhdGVUZXN0LmNsYXNzKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzBhN2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlhNTEdyYW1tYXJQb29sSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IAotICBwcm90ZWN0ZWQgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotICBwcm90ZWN0ZWQgU3RyaW5nIFNBTVBMRVNfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBJREVBTF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIExPR19GSUxFX0xPQ0FUSU9OID0gInJlc3VsdHMubG9nIjsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMiOwotICBwcml2YXRlIFdTRExWYWxpZGF0b3IgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotICAKLSAgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBudWxsOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JCi0gICAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOy8vZ2V0UGx1Z2luTG9jYXRpb24oKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIFdTLUkgcHJlZmVyZW5jZSB0byBpZ25vcmUgc28gb25seSBXU0RMIGVycm9ycyB3aWxsIGJlIHRlc3RlZC4KLSAgICBXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lTU0JQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICAgIAotICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0JWE1MR3JhbW1hclBvb2wgeHNkR3JhbW1hclBvb2wgPSBuZXcgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwoKTsKLQlYTUxHcmFtbWFyUG9vbCB4bWxHcmFtbWFyUG9vbCA9IG5ldyBYTUxHcmFtbWFyUG9vbEltcGwoKTsKLQljb25maWd1cmF0aW9uLnNldFByb3BlcnR5KENvbnN0YW50cy5YTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFLCB4c2RHcmFtbWFyUG9vbCk7Ci0gICAgY29uZmlndXJhdGlvbi5zZXRQcm9wZXJ0eShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSwgeG1sR3JhbW1hclBvb2wpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCWNvbmZpZ3VyYXRpb24gPSBudWxsOwotCQotCXN1cGVyLnRlYXJEb3duKCk7Ci0gIH0KLQotLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBsb2cgdGhlIHJlc3VsdHMgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMKLSAgICogd2l0aCB0aGUgaWRlYWwgcmVzdWx0cy4gVGhlIHRlc3Qgd2lsbCBvbmx5IHBhc3MgaWYgdGhlIHR3byBsb2cgZmlsZXMgYXJlIHRoZSBzYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gY3JlYXRlIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGlkZWFsbG9nbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBpZGVhbCBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBTdHJpbmcgbG9nbG9jYXRpb24sIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uKQotICB7Ci0gICAgSVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjcmVhdGVMb2cobG9nbG9jYXRpb24sIHZhbHJlcG9ydCk7Ci0gICAgICBTdHJpbmcgZ2VuZXJhdGVkTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUobG9nbG9jYXRpb24pOwotICAgICAgU3RyaW5nIGlkZWFsTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUoaWRlYWxsb2dsb2NhdGlvbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoaWRlYWxMb2csIGdlbmVyYXRlZExvZyk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiQ291bGQgbm90IGNvbXBhcmUgbG9nIGZpbGVzIik7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZmlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgZmlsZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaWYgc3VjY2Vzc2Z1bC4KLSAgICogQHRocm93cyBFeGNlcHRpb24gVGhyb3duIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YWlvbiBvZiB0aGUgZmlsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ0Zyb21GaWxlKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgaWYoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgCXsKLSAgCSAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoNik7Ci0gIAkgIHdoaWxlKGZpbGVuYW1lLnN0YXJ0c1dpdGgoIlxcIikgfHwgZmlsZW5hbWUuc3RhcnRzV2l0aCgiLyIpKQotICAJICB7Ci0gIAkgIAlmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZygxKTsKLSAgCSAgfQotICAJfQotICAgIFN0cmluZ0J1ZmZlciBmaWxlc3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZnJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZmlsZSk7Ci0gICAgICBidWZyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIocmVhZGVyKTsKLSAgICAgIHdoaWxlIChidWZyZWFkZXIucmVhZHkoKSkKLSAgICAgIHsKLSAgICAgICAgZmlsZXN0cmluZy5hcHBlbmQoYnVmcmVhZGVyLnJlYWRMaW5lKCkgKyAiXG4iKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgfSBmaW5hbGx5Ci0gICAgewotICAgICAgYnVmcmVhZGVyLmNsb3NlKCk7Ci0gICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVzdHJpbmcudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBmaWxlIGZvciBhbiBYU0QgdGVzdC4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9nIGZpbGUgdG8gY3JlYXRlLgotICAgKiBAcGFyYW0gdmFscmVwb3J0IFRoZSB2YWxpZGF0aW9uIHJlcG9ydCBmb3IgdGhpcyBmaWxlLgotICAgKiBAcmV0dXJuIFRoZSBmaWxlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIGlmIHN1Y2Nlc3NmdWwgb3IgbnVsbCBpZiBub3Qgc3VjY2Vzc2Z1bC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZUxvZyhTdHJpbmcgZmlsZW5hbWUsIElWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCkKLSAgewotICAgIGlmKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gIAl7Ci0gIAkgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDYpOwotICAJICB3aGlsZShmaWxlbmFtZS5zdGFydHNXaXRoKCJcXCIpIHx8IGZpbGVuYW1lLnN0YXJ0c1dpdGgoIi8iKSkKLSAgCSAgewotICAJICAJZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMSk7Ci0gIAkgIH0KLSAgCX0KLSAgICAgSVZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsvL3ZhbGlkYXRvci5nZXRFcnJvcnMoKS5zaXplKCkgKyB2YWxpZGF0b3IuZ2V0V2FybmluZ3MoKS5zaXplKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciBlcnJvcnNTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciB3YXJuaW5nc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgaW50IG51bWVycm9ycyA9IDA7Ci0gICAgIGludCBudW13YXJuaW5ncyA9IDA7Ci0gICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgICB7Ci0gICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIHZhbG1lcyA9IHZhbG1lc3NhZ2VzW2ldOwotICAgICAgIGlmKHZhbG1lcy5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgICBudW13YXJuaW5ncysrOwotICAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgYW55IGZpbGUgcmVmZXJlbmNlcyBtYWtlIHRoZW0gcmVsYXRpdmUuCi0gICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiWyhdW14oXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiWyhdIik7Ci0gICAgICAgICB3YXJuaW5nc1N0cmluZy5hcHBlbmQobWVzc2FnZSArICIgWyIgKyB2YWxtZXMuZ2V0TGluZSgpICsiLCAiICsgdmFsbWVzLmdldENvbHVtbigpICsiXVxuIik7Ci0gICAgICAgICB3YXJuaW5nc1N0cmluZy5hcHBlbmQoY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyh2YWxtZXMuZ2V0TmVzdGVkTWVzc2FnZXMoKSkpOwotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotICAgICAgICAgbnVtZXJyb3JzKys7Ci0gICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICIoIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKG1lc3NhZ2UgKyAiIFsiICsgdmFsbWVzLmdldExpbmUoKSArIiwgIiArIHZhbG1lcy5nZXRDb2x1bW4oKSArIl1cbiIpOwotICAgICAgICAgZXJyb3JzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIFN0cmluZ0J1ZmZlciBsb2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGxvZy5hcHBlbmQoIm51bWJlciBvZiBlcnJvcnMgICAgICA6ICIgKyBudW1lcnJvcnMgKyAiXG4iKTsKLSAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIHdhcm5pbmdzICAgIDogIiArIG51bXdhcm5pbmdzICsgIlxuXG4iKTsKLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgICBpZihudW1lcnJvcnMgPT0gMCkKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoIihub25lKVxuIik7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZChlcnJvcnNTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgICBpZihudW13YXJuaW5ncyA9PSAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgiKG5vbmUpXG4iKTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKHdhcm5pbmdzU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICB9Ci0gICAgIGxvZy5hcHBlbmQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgIAotICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBsb2dmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgRmlsZSBwYXJlbnQgPSBsb2dmaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgCWlmICghcGFyZW50LmV4aXN0cygpKSAKLSAgCXsKLSAgCSAgcGFyZW50Lm1rZGlycygpOwotICAJfQotICAgICAgaWYobG9nZmlsZS5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgbG9nZmlsZS5kZWxldGUoKTsKLSAgICAgIH0KLSAgICAgIGxvZ2ZpbGUuY3JlYXRlTmV3RmlsZSgpOwotICAgICAgCi0gICAgICBvdXRTdHJlYW0gPSBuZXcgRGF0YU91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlbmFtZSwgdHJ1ZSkpOwotICAgICAgb3V0U3RyZWFtLndyaXRlQnl0ZXMobG9nLnRvU3RyaW5nKCkpOwotICAgICAgb3V0U3RyZWFtLmNsb3NlKCk7Ci0KLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIElmIHdlIGNhbid0IHdyaXRlIHRoZSBsb2cgdGhlbiBjbGVhciB0aGUgbG9nLgotICAgICAgbG9nLmRlbGV0ZSgwLCBsb2cubGVuZ3RoKCkpOwotICAgIH0KLSAgICByZXR1cm4gbG9nLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFBsdWdpbk5hbWUoKQotICB7Ci0gICAgcmV0dXJuIFBMVUdJTl9OQU1FOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKExpc3QgbmVzdGVkTWVzc2FnZXMpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhuZXN0ZWRNZXNzYWdlcywgMCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcoTGlzdCBuZXN0ZWRNZXNzYWdlcywgaW50IGRlcHRoKQotICB7Ci0gICAgaWYobmVzdGVkTWVzc2FnZXMgIT0gbnVsbCAmJiBuZXN0ZWRNZXNzYWdlcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nID0gIiI7Ci0gICAgICBJdGVyYXRvciBuZXN0ZWRNZXNJdGVyID0gbmVzdGVkTWVzc2FnZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKG5lc3RlZE1lc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJVmFsaWRhdGlvbk1lc3NhZ2UgbmVzdmFsbWVzID0gKElWYWxpZGF0aW9uTWVzc2FnZSluZXN0ZWRNZXNJdGVyLm5leHQoKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICIgIjsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBuZXN2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICJbKF0iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSAoIi0+ICIgKyBtZXNzYWdlICsgIiBbIiArIG5lc3ZhbG1lcy5nZXRMaW5lKCkgKyIsICIgKyBuZXN2YWxtZXMuZ2V0Q29sdW1uKCkgKyJdXG4iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3ZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpLCBkZXB0aCArIDEpOwotICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2VTdHJpbmc7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kCi0gICAqIGFkZCB0aGUgc3BlY2lmaWVkIGZpbGVzIHRvIHRoZSBwcm9qZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIFRoZSBuYW1lIGZvciB0aGUgcHJvamVjdC4KLSAgICogQHBhcmFtIGZpbGVzIEFuIGFycmF5IG9mIGZpbGUgbmFtZXMgaW4gdGhlIGZpbGUgc3lzdGVtIHRoYXQKLSAgICogICAgICAgICAgICAgIHdpbGwgYmUgY29waWVkIGludG8gdGhlIHByb2plY3QuCi0gICAqIEByZXR1cm4gVGhlIGNyZWF0ZWQgcHJvamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nW10gZmlsZXMpCi0gIHsKLSAgICBmaW5hbCBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBmaW5hbCBJUHJvamVjdCBwcm9qZWN0ID0gd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZighcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLQkgIHsKLSAgICAgICAgcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0JICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBjcmVhdGUgcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyBlKTsKLSAgICAgIH0gCi0gICAgfQotICAgIGlmKCFwcm9qZWN0LmlzT3BlbigpKQotICAgIHsKLSAgICAgIHRyeQotCSAgewotICAgICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7Ci0JICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBvcGVuIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgZSk7Ci0JICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gcHJvamVjdERlc2NyaXB0aW9uID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOyAKLSAgICAgIHByb2plY3REZXNjcmlwdGlvbi5zZXROYW1lKHByb2plY3ROYW1lKTsKLSAgICAgIHByb2plY3Quc2V0RGVzY3JpcHRpb24ocHJvamVjdERlc2NyaXB0aW9uLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiVW5hYmxlIHRvIHNldCBwcm9qZWN0IHByb3BlcnRpZXMgZm9yIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgIi4gIiArIGUpOwotICAgIH0KLQotICAgIGlmKGZpbGVzICE9IG51bGwpCi0gICAgewotICAgICAgaW50IG51bWZpbGVzID0gZmlsZXMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWZpbGVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHRyeQotCQl7Ci0gICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZmlsZXNbaV07Ci0gICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICAgICAgICAKLSAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLSAgICAgICAgICBJRmlsZSBpRmlsZSA9IHByb2plY3QuZ2V0RmlsZShmaWxlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgaWYoIWlGaWxlLmV4aXN0cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlGaWxlLmNyZWF0ZShpbiwgdHJ1ZSwgbnVsbCk7Ci0gICAgICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAgIH0KLQkJfQotICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKLQkJewotCQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgZmlsZSAiICsgZmlsZXNbaV0pOwotCQl9IAotICAgICAgfQotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBwcm9qZWN0LnJlZnJlc2hMb2NhbCgtMSwgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHt9Ci0gICAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMjk1MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLS8qKgotICogVGVzdHMgZm9yIGxpbmUgbnVtYmVyIGFkanVzdG1lbnRzIGluIHRoZSBXU0RMIHZhbGlkYXRvcidzCi0gKiBYTUwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgTGluZU51bWJlckFkanVzdG1lbnRzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSID0gIkxpbmVOdW1iZXJBZGp1c3RtZW50cy8iOwotCi0gIC8qKgotICAgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdGN2Y2NvbXBsZXh0eXBlMjMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gImN2Yy1jb21wbGV4LXR5cGUuMi4zIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuMy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi4zLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuMy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RjdmNjb21wbGV4dHlwZTI0YigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkMWUzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdHMgZm9yIGZpbGUgcGF0aHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXRoc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgUEFUSFNfRElSID0gIlBhdGhzLyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShQYXRoc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIERlbGV0ZSB0aGUgc2ltcGxlIHByb2plY3QgZm9yIEltcG9ydGVkU2NoZW1hV2l0aFNjaGVtYUltcG9ydCB0ZXN0Ci0gICAgc3VwZXIudGVhckRvd24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGxhdGZvcm1VUkwoKQotICB7Ci0JU3RyaW5nIHRlc3RuYW1lID0gIm9uZSI7Ci0JU3RyaW5nIHRlc3RmaWxlID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQbGF0Zm9ybVVSTC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotCVN0cmluZyB0ZXN0ZmlsZTIgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBsYXRmb3JtVVJML3R3by53c2RsIjsKLQlTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQbGF0Zm9ybVVSTC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLQlTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGxhdGZvcm1VUkwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0JIAotCWNyZWF0ZVNpbXBsZVByb2plY3QoInRlc3QiLCBuZXcgU3RyaW5nW117dGVzdGZpbGUsdGVzdGZpbGUyfSk7Ci0JCi0JcnVuVGVzdChGSUxFX1BST1RPQ09MICsgdGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2FjODc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvV1NETFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFdTREwgdmFsaWRhdGlvbiB0ZXN0cyBmb3IgdGhlIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFRlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgV1NETF9ESVIgPSAiV1NETC8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV1NETFRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIERlbGV0ZSB0aGUgc2ltcGxlIHByb2plY3QgZm9yIEltcG9ydGVkU2NoZW1hV2l0aFNjaGVtYUltcG9ydCB0ZXN0Ci0gICAgc3VwZXIudGVhckRvd24oKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIElNUE9SVCBURVNUUwotICAgKi8KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnRJbnZhbGlkTlMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdTRExXaXRoV1NETCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0V1NETFdpdGhXU0RMIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0V1NETEltcG9ydGluZ1R5cGVzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJXU0RMSW1wb3J0aW5nVHlwZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydE5vbkV4aXN0YW50RmlsZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Tm9uRXhpc3RhbnRGaWxlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnROb25FeGlzdGFudEZpbGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExOYW1lc3BhY2VBQUEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdTRExOYW1lc3BhY2VBQUEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIldTRExOYW1lc3BhY2VBQUEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbm1wb3J0aW5nU2NoZW1hLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RXU0RMSW1wb3J0aW5nU2NoZW1hSW5tcG9ydGluZ1NjaGVtYSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiV1NETEltcG9ydGluZ1NjaGVtYUltcG9ydGluZ1NjaGVtYSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvSW1wb3J0WE1MSW52YWxpZFdTREwud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFhNTEludmFsaWRXU0RMKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRYTUxJbnZhbGlkV1NETCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvSW1wb3J0T25lQW5kVHdvLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPbmVBbmRUd28oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE9uZUFuZFR3byI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvb25lLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPbmVBbmRUd29fT25lKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJvbmUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T25lQW5kVHdvX1R3bygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAidHdvIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEVtcHR5TG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEVtcHR5TG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL0ltcG9ydEVtcHR5TmFtZXNwYWNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFbXB0eU5hbWVzcGFjZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RW1wdHlOYW1lc3BhY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUltcG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAidGVzdC0xLjAiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L1NpbXBsZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L1NpbXBsZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvU2ltcGxlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDWUNMSUMgVEVTVFMKLSAgICovCi0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UG9ydHR5cGVSZWZNZXNzYWdlMSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydHR5cGVSZWZNZXNzYWdlMSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMi53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UG9ydHR5cGVSZWZNZXNzYWdlMigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydHR5cGVSZWZNZXNzYWdlMiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWZlcmVuY2VJbmxpbmVUeXBlcygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUmVmZXJlbmNlSW5saW5lVHlwZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkVtcHR5IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0RlZmF1bHROYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vRGVmYXVsdE5hbWVzcGFjZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QmluZGluZ0ludmFsaWRTdHlsZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQmluZGluZ0ludmFsaWRTdHlsZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkJpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCaW5kaW5nSW52YWxpZFVzZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQmluZGluZ0ludmFsaWRVc2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXNzYWdlSW52YWxpZEVsZW1lbnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk1lc3NhZ2VJbnZhbGlkRWxlbWVudCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkRWxlbWVudC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1lc3NhZ2VJbnZhbGlkVHlwZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTWVzc2FnZUludmFsaWRUeXBlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIk1lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkSW5wdXQvUG9ydFR5cGVJbnZhbGlkSW5wdXQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBvcnRUeXBlSW52YWxpZElucHV0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQb3J0VHlwZUludmFsaWRJbnB1dCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkSW5wdXQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC9Qb3J0VHlwZUludmFsaWRPdXRwdXQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBvcnRUeXBlSW52YWxpZE91dHB1dCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydFR5cGVJbnZhbGlkT3V0cHV0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2VydmljZUludmFsaWRCaW5kaW5nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZXJ2aWNlSW52YWxpZEJpbmRpbmciOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNlcnZpY2VOb0FkZHJlc3MoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNlcnZpY2VOb0FkZHJlc3MiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZXJ2aWNlRWxlbWVudC9Ob0FkZHJlc3MvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5hbWVzcGFjZURvZXNudFJlc29sdmUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5hbWVzcGFjZURvZXNudFJlc29sdmUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TmFtZXNwYWNlUmVzb2x2ZXNIVE1MKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VSZXNvbHZlc0hUTUwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNpbXBsZWZpbGVTZWxmSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgZmlsZXByZWZpeCA9IEZJTEVfUFJPVE9DT0w7Ci0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhlIFVSTCBvZiB0aGUgdGVzdCBmaWxlIGlzIGFzIGV4cGVjdGVkLgotICAgIGlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLSAgICB7Ci0gICAgICBmaWxlcHJlZml4ID0gZmlsZXByZWZpeC5zdWJzdHJpbmcoMCwgZmlsZXByZWZpeC5sZW5ndGgoKS0xKTsKLSAgICB9Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gZmlsZXByZWZpeCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEZpbGVXaXRoU2VsZkltcG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvU2VsZkltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlRmlsZUludmFsaWRTZWxmSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgZmlsZXByZWZpeCA9IEZJTEVfUFJPVE9DT0w7Ci0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhlIFVSTCBvZiB0aGUgdGVzdCBmaWxlIGlzIGFzIGV4cGVjdGVkLgotICAgIGlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLSAgICB7Ci0gICAgICBmaWxlcHJlZml4ID0gZmlsZXByZWZpeC5zdWJzdHJpbmcoMCwgZmlsZXByZWZpeC5sZW5ndGgoKS0xKTsKLSAgICB9Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gZmlsZXByZWZpeCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvV1NETFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MWVhZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLSAgLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotICBwcml2YXRlIHN0YXRpYyBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4gcGx1Z2luOwotICBwcml2YXRlIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCXBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcGx1Z2luOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZWNjYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBYU0QgdmFsaWRhdGlvbiB0ZXN0cyBmb3IgdGhlIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBYU0RfRElSID0gIlhTRC8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNEVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZUVudGl0aWVzVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIm5vcm1hbGl6ZUVudGl0aWVzVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkVudGl0aWVzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZUVudGl0aWVzSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAibm9ybWFsaXplRW50aXRpZXNJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiRW50aXRpZXMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiRW50aXRpZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJSZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0lubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIklubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIklubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbHVlQ29sb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlZhbHVlQ29sb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJWYWx1ZUNvbG9uLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIlZhbHVlQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJWYWx1ZUNvbG9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbXBvcnROb05TU2NoZW1hL0ltcG9ydE5vTlNTY2hlbWEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE5vTlNTY2hlbWEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE5vTlNTY2hlbWEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb05TU2NoZW1hLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWEvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb05TU2NoZW1hLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbXBvcnROb05TU2NoZW1BbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL05vTlNFbGVtZW50UmVmZXJlbmNlL05vTlNFbGVtZW50UmVmZXJlbmNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb05TRWxlbWVudFJlZmVyZW5jZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTm9OU0VsZW1lbnRSZWZlcmVuY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJOb05TRWxlbWVudFJlZmVyZW5jZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJOb05TRWxlbWVudFJlZmVyZW5jZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk5vTlNFbGVtZW50UmVmZXJlbmNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lU2NoZW1hTm9OYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIklubGluZVNjaGVtYU5vTmFtZXNwYWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDU5ZWUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCi0gIDwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyIvPgotCi0gIDwhLS0gRW5kIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJidnR3b3Jrc3BhY2UiIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UtZm9sZGVyIiB2YWx1ZT0iJHtidnR3b3Jrc3BhY2V9LyR7cGx1Z2luLW5hbWV9Ii8+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICAgPGRlbGV0ZT4KLSAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICA8IS0tIFN0YXJ0IHdpdGggY2xlYW4gZGF0YSB3b3Jrc3BhY2UgLS0+ICAKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLQotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLkFsbFdTRExUZXN0cyIvPgotICAgIDwvYW50PgotCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2VuZXJhdGVkUmVzdWx0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5ODNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS4yLjM6IEVsZW1lbnQgJ3dzZGw6b3BlcmF0aW9uJyBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIgW2NoaWxkcmVuXSwgYmVjYXVzZSB0aGUgdHlwZSdzIGNvbnRlbnQgdHlwZSBpcyBlbGVtZW50LW9ubHkuIFsxNiwgMzddCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzM5MDY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYjogVGhlIGNvbnRlbnQgb2YgZWxlbWVudCAnd3NkbDpvcGVyYXRpb24nIGlzIG5vdCBjb21wbGV0ZS4gT25lIG9mICd7Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjpkb2N1bWVudGF0aW9uLCBXQ1sjI290aGVyOiJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyJdLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOmlucHV0LCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOm91dHB1dH0nIGlzIGV4cGVjdGVkLiBbMTYsIDM3XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGxhdGZvcm1VUkwvb25lLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4YWQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDIKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWN2Yy1lbnVtZXJhdGlvbi12YWxpZDogVmFsdWUgJ0ludmFsaWRTdHlsZScgaXMgbm90IGZhY2V0LXZhbGlkIHdpdGggcmVzcGVjdCB0byBlbnVtZXJhdGlvbiAnW3JwYywgZG9jdW1lbnRdJy4gSXQgbXVzdCBiZSBhIHZhbHVlIGZyb20gdGhlIGVudW1lcmF0aW9uLiBbMjIsIDkwXQotY3ZjLWF0dHJpYnV0ZS4zOiBUaGUgdmFsdWUgJ0ludmFsaWRTdHlsZScgb2YgYXR0cmlidXRlICdzdHlsZScgb24gZWxlbWVudCAnc29hcDpiaW5kaW5nJyBpcyBub3QgdmFsaWQgd2l0aCByZXNwZWN0IHRvIGl0cyB0eXBlLCAndFN0eWxlQ2hvaWNlJy4gWzIyLCA5MF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS9CaW5kaW5nSW52YWxpZFVzZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjU4MmFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAyCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jdmMtZW51bWVyYXRpb24tdmFsaWQ6IFZhbHVlICdJbnZhbGlkVXNlJyBpcyBub3QgZmFjZXQtdmFsaWQgd2l0aCByZXNwZWN0IHRvIGVudW1lcmF0aW9uICdbbGl0ZXJhbCwgZW5jb2RlZF0nLiBJdCBtdXN0IGJlIGEgdmFsdWUgZnJvbSB0aGUgZW51bWVyYXRpb24uIFsyOSwgNDZdCi1jdmMtYXR0cmlidXRlLjM6IFRoZSB2YWx1ZSAnSW52YWxpZFVzZScgb2YgYXR0cmlidXRlICd1c2UnIG9uIGVsZW1lbnQgJ3NvYXA6Ym9keScgaXMgbm90IHZhbGlkIHdpdGggcmVzcGVjdCB0byBpdHMgdHlwZSwgJ3VzZUNob2ljZScuIFsyOSwgNDZdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL29uZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL29uZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy90d28ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhYjYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBpcyBlbXB0eS4gQSBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBmb3IgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZS4gWzcsIDU2XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL0ltcG9ydEVtcHR5TmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA2MGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgJycgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgJ2h0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvJyBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuIFs3LCA1M10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTZlYTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGVtcHR5LiBBIGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGZvciB0aGUgbG9jYXRpb24gYXR0cmlidXRlLiBbNywgNDJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlL0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlNDY3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS40OiBBdHRyaWJ1dGUgJ2xvY2F0aW9uJyBtdXN0IGFwcGVhciBvbiBlbGVtZW50ICd3c2RsOmltcG9ydCcuIFs3LCA0NF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vbkV4aXN0YW50RmlsZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDMwOGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ1RoaXNGaWxlRG9lc250RXhpc3Qud3NkbCcgZG9jdW1lbnQgY291bGQgbm90IGJlIGltcG9ydGVkLiBDaGVjayB0aGF0IHRoZSBkb2N1bWVudCBleGlzdHMgYW5kIHRoYXQgdGhlIGxvY2F0aW9uIGlzIGNvcnJlY3QuIFszLCA4Nl0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxNWU0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgZmlsZSBjYW5ub3QgYmUgaW1wb3J0ZWQgYmVjYXVzZSB0aGUgbmFtZXNwYWNlICdodHRwOi8vaW52YWxpZG5hbWVzcGFjZScgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nIG9mIHRoZSBpbXBvcnRlZCBkb2N1bWVudC4gWzMsIDczXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYmNhNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSAnU0lNUExFV1NETC53c2RsJyBkb2N1bWVudCBjb3VsZCBub3QgYmUgaW1wb3J0ZWQuIENoZWNrIHRoYXQgdGhlIGRvY3VtZW50IGV4aXN0cyBhbmQgdGhhdCB0aGUgbG9jYXRpb24gaXMgY29ycmVjdC4gWzMsIDc4XQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNjJjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgJ2h0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlJyBkb2VzIG5vdCBtYXRjaCB0aGUgdGFyZ2V0IG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvJyBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuIFszLCA3OF0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RML0ltcG9ydFhNTEludmFsaWRXU0RMLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4NjgyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RML0ltcG9ydFhNTEludmFsaWRXU0RMLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvWE1MSW52YWxpZFdTREwud3NkbCkuICBbMSwgMF0KLS0+IEVsZW1lbnQgdHlwZSAid3NkbDpkZWZpbml0aW9ucyIgbXVzdCBiZSBmb2xsb3dlZCBieSBlaXRoZXIgYXR0cmlidXRlIHNwZWNpZmljYXRpb25zLCAiPiIgb3IgIi8+Ii4gWzQsIDNdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRpbmdXU0RMV2l0aEltcG9ydGVkU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRpbmdXU0RMV2l0aEltcG9ydGVkU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1NjaGVtYUltcG9ydGluZ1NjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nVHlwZXMud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZjk5MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICd4c2Q6c3RyaW4nLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAneHNkOnN0cmluJyBpcyBpbiBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsJy4gSWYgdGhpcyBpcyB0aGUgaW5jb3JyZWN0IG5hbWVzcGFjZSwgcGVyaGFwcyB0aGUgcHJlZml4IG9mICd4c2Q6c3RyaW4nIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsJy4gWzE2LCA0N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50L01lc3NhZ2VJbnZhbGlkRWxlbWVudC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlMzM1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgcGFydCAnTmV3T3BlcmF0aW9uUmVzcG9uc2UnIGhhcyBhbiBpbnZhbGlkIHZhbHVlICdJbnZhbGlkRWxlbWVudCcgZGVmaW5lZCBmb3IgaXRzIGVsZW1lbnQuIEVsZW1lbnQgZGVjbGFyYXRpb25zIG11c3QgcmVmZXIgdG8gdmFsaWQgdmFsdWVzIGRlZmluZWQgaW4gYSBzY2hlbWEuIFsxMCwgNzRdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OWZlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIHBhcnQgJ05ld09wZXJhdGlvblJlcXVlc3QnIGhhcyBhbiBpbnZhbGlkIHZhbHVlICdOZXdPcGVyYXRpb25SZXF1ZXN0JyBkZWZpbmVkIGZvciBpdHMgdHlwZS4gVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4gWzEzLCA3NV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML05hbWVzcGFjZURvZXNudFJlc29sdmUvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjA1OGQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgaW5wdXQgZWxlbWVudCBpcyByZWZlcmVuY2luZyBhbiB1bmRlZmluZWQgbWVzc2FnZSAnSW52YWxpZElucHV0Jy4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4gWzE3LCA0N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvUG9ydFR5cGVJbnZhbGlkT3V0cHV0LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxNTkxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvUG9ydFR5cGVJbnZhbGlkT3V0cHV0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgb3V0cHV0IGVsZW1lbnQgaXMgcmVmZXJlbmNpbmcgYW4gdW5kZWZpbmVkIG1lc3NhZ2UgJ0ludmFsaWRPdXRwdXQnLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlIG5hbWUgYW5kIG5hbWVzcGFjZSBhcmUgY29ycmVjdCBhbmQgdGhhdCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBkZWZpbmVkLiBbMTgsIDQ5XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL0VtcHR5LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkL1NlbGZJbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTUzNDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkL1NlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBwYXJ0ICdOZXdPcGVyYXRpb25SZXNwb25zZScgaGFzIGFuIGludmFsaWQgdmFsdWUgJ0ludmFsaWRFbGVtZW50JyBkZWZpbmVkIGZvciBpdHMgZWxlbWVudC4gRWxlbWVudCBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4gWzE0LCA3MF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY0MGU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ1NlcnZpY2VJbnZhbGlkQmluZGluZ1NPQVAnIHBvcnQgaGFzIGFuIGludmFsaWQgYmluZGluZyAtICdJbmNvcnJlY3RCaW5kaW5nUmVmJy4gQ2hlY2sgdGhhdCB0aGUgJ0luY29ycmVjdEJpbmRpbmdSZWYnIGJpbmRpbmcgaXMgZGVmaW5lZC4gWzM0LCA4M10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWFhOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlcnZpY2VFbGVtZW50L05vQWRkcmVzcy9TZXJ2aWNlTm9BZGRyZXNzLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgcG9ydCAnU2VydmljZU5vQWRkcmVzc1NPQVAnIGhhcyBubyBhZGRyZXNzIGRlZmluZWQuIEVhY2ggcG9ydCBtdXN0IGRlZmluZSBvbmUgYWRkcmVzcy4gWzM0LCA3OV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGFmNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgdmFsdWUgb2YgYXR0cmlidXRlICJ2YWx1ZSIgYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSAieHNkOnBhdHRlcm4iIG11c3Qgbm90IGNvbnRhaW4gdGhlICc8JyBjaGFyYWN0ZXIuIFsxMSwgNTVdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9Ob05TRWxlbWVudFJlZmVyZW5jZS9Ob05TRWxlbWVudFJlZmVyZW5jZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9Ob05TRWxlbWVudFJlZmVyZW5jZS9Ob05TRWxlbWVudFJlZmVyZW5jZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MWFkMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICd4c2Q6c3RyaW5nYScuIEl0IHdhcyBkZXRlY3RlZCB0aGF0ICd4c2Q6c3RyaW5nYScgaXMgaW4gbmFtZXNwYWNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYScsIGJ1dCBjb21wb25lbnRzIGZyb20gdGhpcyBuYW1lc3BhY2UgYXJlIG5vdCByZWZlcmVuY2VhYmxlIGZyb20gc2NoZW1hIGRvY3VtZW50ICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbCcuIElmIHRoaXMgaXMgdGhlIGluY29ycmVjdCBuYW1lc3BhY2UsIHBlcmhhcHMgdGhlIHByZWZpeCBvZiAneHNkOnN0cmluZ2EnIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsJy4gWzcsIDYxXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4ODE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDIKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNyYy1yZXNvbHZlLjQuMjogRXJyb3IgcmVzb2x2aW5nIGNvbXBvbmVudCAndHdvOk5ld1NpbXBsZVR5cGUnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAndHdvOk5ld1NpbXBsZVR5cGUnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ3R3bzpOZXdTaW1wbGVUeXBlJyBuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSwgdGhlbiBhbiBhcHByb3ByaWF0ZSAnaW1wb3J0JyB0YWcgc2hvdWxkIGJlIGFkZGVkIHRvICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsJy4gWzEzLCA2N10KLXNyYy1yZXNvbHZlLjQuMjogRXJyb3IgcmVzb2x2aW5nIGNvbXBvbmVudCAnb25lOk5ld1NpbXBsZVR5cGUnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAnb25lOk5ld1NpbXBsZVR5cGUnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ29uZTpOZXdTaW1wbGVUeXBlJyBuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSwgdGhlbiBhbiBhcHByb3ByaWF0ZSAnaW1wb3J0JyB0YWcgc2hvdWxkIGJlIGFkZGVkIHRvICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsJy4gWzI0LCA2N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWJlMzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuMy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjdmMtY29tcGxleC10eXBlLjIuMyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi4zLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuMy8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iTmV3V1NETEZpbGUxIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0iTmV3TWVzc2FnZSI+PC93c2RsOmlucHV0PgotYWFhYQotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5YzUxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik5ld1dTRExGaWxlMSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDI3NWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL29uZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9vbmUvIj4KLTx3c2RsOmltcG9ydAotICBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdHdvLyIKLSAgbG9jYXRpb249InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0L3R3by53c2RsIi8+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC90d28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML3R3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTMwZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML3R3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3R3by8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ0d28iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90d28vIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0NWQzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS9CaW5kaW5nSW52YWxpZFN0eWxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkU3R5bGUvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ludmFsaWRTdHlsZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkU3R5bGUvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZVNPQVAiIHR5cGU9InRuczpCaW5kaW5nSW52YWxpZFN0eWxlIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJJbnZhbGlkU3R5bGUiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFN0eWxlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZVNPQVAiIGJpbmRpbmc9InRuczpCaW5kaW5nSW52YWxpZFN0eWxlU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS9CaW5kaW5nSW52YWxpZFVzZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNGMyNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iQmluZGluZ0ludmFsaWRVc2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFVzZS8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFVzZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkVXNlLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZVNPQVAiIHR5cGU9InRuczpCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkVXNlL05ld09wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0iSW52YWxpZFVzZSIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZVNPQVAiIGJpbmRpbmc9InRuczpCaW5kaW5nSW52YWxpZFVzZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTFjOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkNhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbnMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbnMvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U0YzU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMxLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImN5Y2xpYzEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiB4bWxuczpjeWNsaWMyPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iIGxvY2F0aW9uPSJQb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9ImN5Y2xpYzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0iY3ljbGljMjpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iY3ljbGljMjpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzNTI5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjeWNsaWMyIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMyLyIgeG1sbnM6Y3ljbGljMT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiBsb2NhdGlvbj0iUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsIj48L3dzZGw6aW1wb3J0PgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMyLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJjeWNsaWMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImN5Y2xpYzE6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImN5Y2xpYzE6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzYzYWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCW5hbWU9IkltcG9ydE9uZUFuZFR3byIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9JbXBvcnRPbmVBbmRUd28iIAotCXhtbG5zOndzZGwxPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiCi0JeG1sbnM6d3NkbDI9Imh0dHA6Ly9hdGVtcHVyaS5vcmcvdHdvLndzZGwiPgotCi0JCi08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiIGxvY2F0aW9uPSJvbmUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIgbG9jYXRpb249InR3by53c2RsIi8+Ci0JCi08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvb25lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwZmYxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9vbmUud3NkbCIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiPgotCQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWVzc2FnZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy90d28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGYxNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgbmFtZXNwYWNlIG9mIHRoaXMgZG9jdW1lbnQgc3RhcnQgd2l0aCBhbiBhIGFzIGl0IHNob3VsZAotICAgICBiZSBpbXBvcnRlZCBmaXJzdCBieSBJbXBvcnRPbmVBbmRUd28ud3NkbC4gVGhlIG9yZGVyIG9mIHRoZSBpbXBvcnRzIGlzIGRldGVybWluZWQKLSAgICAgYnkgYWxwaGFiZXRpY2FsIG9yZGVyIG9mIHRoZSBuYW1lc3BhY2VzIGluIHRoaXMgZGVmZWN0LiAtLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgbmFtZT0idHdvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3RlbXB1cmkub3JnL29uZS53c2RsIiB4bWxuczp3c2RsMj0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL29uZS53c2RsIgotCQlsb2NhdGlvbj0ib25lLndzZGwiPgotCTwvd3NkbDppbXBvcnQ+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9IndzZGwxOk1lc3NhZ2UiIG5hbWU9IklucHV0Ii8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0id3NkbDE6TWVzc2FnZSIgbmFtZT0iT3V0cHV0Ii8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlMb2NhdGlvbi9JbXBvcnRFbXB0eUxvY2F0aW9uLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiODk2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSAgICAgICAgICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgICAgICAgICAgbmFtZT0iSW1wb3J0RW1wdHlMb2NhdGlvbiIgCi0gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9JbXBvcnRFbXB0eUxvY2F0aW9uLyI+Ci0gIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9zb21ldXJpIiBsb2NhdGlvbj0iIi8+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ibWVzc2FnZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ibWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS9JbXBvcnRFbXB0eU5hbWVzcGFjZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzllYWY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS9JbXBvcnRFbXB0eU5hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICAgICAgICAgbmFtZT0iSW1wb3J0RW1wdHlOYW1lc3BhY2UiIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2UvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iIiBsb2NhdGlvbj0ic2ltcGxlLndzZGwiLz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL3NpbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2Uvc2ltcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMGYwOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2Uvc2ltcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvIiAKLSAgICAgICAgICAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSAgICAgICAgICAgICAgICAgIG5hbWU9InNpbXBsZSIgCi0gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMzUyMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgICAgICAgIG5hbWU9IkltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24iIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSIiIGxvY2F0aW9uPSIiLz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMDIyNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0gICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgICAgICAgICAgIG5hbWU9IkltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUiIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vc29tZXVyaSIvPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Im1lc3NhZ2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Im1lc3NhZ2UiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnROb25FeGlzdGFudEZpbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc3Njc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnROb25FeGlzdGFudEZpbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydE5vbkV4aXN0YW50RmlsZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnROb25FeGlzdGFudEZpbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydE5vbkV4aXN0YW50RmlsZS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9ub25leGlzdGluZ2ZpbGUiIGxvY2F0aW9uPSJUaGlzRmlsZURvZXNudEV4aXN0LndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhZWViMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LyIgeG1sbnM6c2NoZW1hPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgbG9jYXRpb249InNjaGVtYS54c2QiPjwvd3NkbDppbXBvcnQ+ICAgIAotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld01lc3NhZ2UiPgotICAgIAk8d3NkbDpwYXJ0IG5hbWU9Ik5ld01lc3NhZ2UiIGVsZW1lbnQ9InNjaGVtYTpOZXdHbG9iYWxFbGVtZW50Ij48L3dzZGw6cGFydD4KLSAgICA8L3dzZGw6bWVzc2FnZT4gICAKLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFhMDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnRJbnZhbGlkTlMvIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vaW52YWxpZG5hbWVzcGFjZSIgbG9jYXRpb249InNjaGVtYS54c2QiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzhlMmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0V1NETFdpdGhXU0RMLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydFdTRExXaXRoV1NETCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0V1NETFdpdGhXU0RMLyI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvIiBsb2NhdGlvbj0ic2ltcGxld3NkbC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViYjkzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlIiBsb2NhdGlvbj0iU0lNUExFV1NETC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4MmVhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlIiBsb2NhdGlvbj0ic2ltcGxld3NkbC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDUwMDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9CIj4KLSAgPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUMiIHNjaGVtYUxvY2F0aW9uPSIuXEMueHNkIi8+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmNjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9BQyI+Ci0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNhbXBsZVR5cGUiPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVFbGVtZW50IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTdjMTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL05ld1dTRExGaWxlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Ik5ld1dTRExGaWxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9OZXdXU0RMRmlsZS8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUMiPgotICAJCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iQy54c2QiLz4KLSAgCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9CIiBzY2hlbWFMb2NhdGlvbj0iQi54c2QiLz4KLQkJPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvSW1wb3J0WE1MSW52YWxpZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhNzg4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0WE1MSW52YWxpZFdTREwvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0WE1MSW52YWxpZFdTREwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFhNTEludmFsaWRXU0RMLyI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1hNTEludmFsaWRXU0RMLyIgbG9jYXRpb249IlhNTEludmFsaWRXU0RMLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9YTUxJbnZhbGlkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvWE1MSW52YWxpZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5MmQ4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9YTUxJbnZhbGlkV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGlzbid0IGNsb3NlZC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJYTUxJbnZhbGlkV1NETCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvWE1MSW52YWxpZFdTREwvIgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iWE1MSW52YWxpZFdTREwiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iWE1MSW52YWxpZFdTRExTT0FQIiB0eXBlPSJ0bnM6WE1MSW52YWxpZFdTREwiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJYTUxJbnZhbGlkV1NETCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6WE1MSW52YWxpZFdTRExTT0FQIiBuYW1lPSJYTUxJbnZhbGlkV1NETFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1NjaGVtYU5vdEluRGlyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1NjaGVtYU5vdEluRGlyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZmZmRjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRpbmdTY2hlbWFOb3RJbkRpci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpJbXBvcnRpbmdTY2hlbWFOb3RJbkRpcj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6cGxhaW5zY2hlbWE9Imh0dHA6Ly9wbGFpbnNjaGVtYSI+Ci0JPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9wbGFpbnNjaGVtYSIgc2NoZW1hTG9jYXRpb249InN1YmZvbGRlci9QbGFpblNjaGVtYS54c2QiPjwvaW1wb3J0PgotCTxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InBsYWluc2NoZW1hOk5ld1NpbXBsZVR5cGUiPjwvZWxlbWVudD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjljN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS8iIHhtbG5zOndzZGwxPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEvIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEvIiBsb2NhdGlvbj0ic3ViZm9sZGVyL0ltcG9ydGVkSW1wb3J0aW5nU2NoZW1hLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdNZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdNZXNzYWdlIiBlbGVtZW50PSJ3c2RsMTpOZXdHbG9iYWxFbGVtZW50Ij48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGIxNjVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJOb1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydCIKLQl0YXJnZXROYW1lc3BhY2U9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JeG1sbnM6ZWxtcz0iY29tbW9uLmVsZW1lbnRzIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJjb21tb24uZWxlbWVudHMiCi0JCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPGNvbXBsZXhUeXBlIG5hbWU9Ik15VHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCTwvY29tcGxleFR5cGU+Ci0JCTwvc2NoZW1hPgotCQk8c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJjb21tb24uZWxlbWVudHMiLz4KLQkJCTxlbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJlbG1zOk15VHlwZSIgLz4KLQkJCTxlbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCTwvc2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiCi0JCQluYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IgotCQkJbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NjaGVtYU5hbWVzcGFjZUFBQS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TY2hlbWFOYW1lc3BhY2VBQUEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzUwZDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NjaGVtYU5hbWVzcGFjZUFBQS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUFBIiB4bWxuczpTY2hlbWFOYW1lc3BhY2VBQUE9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L2ltcG9ydC0xLjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC9pbXBvcnQtMS4wLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzNiYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L2ltcG9ydC0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvaW1wb3J0LTEuMC53c2RsIgotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImltcG9ydC0xLjAiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvaW1wb3J0LTEuMC53c2RsIiAvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L3Rlc3QtMS4wLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllMzliNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL3Rlc3QtMS4wLndzZGwiCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idGVzdC0xLjAiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvdGVzdC0xLjAud3NkbCIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL2ltcG9ydC0xLjAud3NkbCI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL2ltcG9ydC0xLjAud3NkbCIKLQkJbG9jYXRpb249ImltcG9ydC0xLjAud3NkbCIgLz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdiZTc4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IldTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICAgICAgICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJJbXBvcnRpbmdTY2hlbWFOb3RJbkRpci54c2QiLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NDM3ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nVHlwZXMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iV1NETEltcG9ydGluZ1R5cGVzIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nVHlwZXMvIiB4bWxuczp3c2RsMT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExPbmx5VHlwZXMvIj4KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvV1NETE9ubHlUeXBlcy8iIGxvY2F0aW9uPSJXU0RMT25seVR5cGVzLndzZGwiPjwvd3NkbDppbXBvcnQ+ICAgIAotICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3TWVzc2FnZSI+Ci0gICAgCTx3c2RsOnBhcnQgbmFtZT0iTmV3TWVzc2FnZSIgZWxlbWVudD0id3NkbDE6TmV3R2xvYmFsRWxlbWVudCI+PC93c2RsOnBhcnQ+Ci0gICAgPC93c2RsOm1lc3NhZ2U+Ci0gICAgCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YzE4ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vQUFBIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iV1NETE5hbWVzcGFjZUFBQSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUFBIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUFBIiBsb2NhdGlvbj0iU2NoZW1hTmFtZXNwYWNlQUFBLnhzZCI+PC93c2RsOmltcG9ydD4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExPbmx5VHlwZXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExPbmx5VHlwZXMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNGY2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMT25seVR5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMT25seVR5cGVzLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IldTRExPbmx5VHlwZXMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExPbmx5VHlwZXMvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvV1NETE9ubHlUeXBlcy8iPgotCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD48L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZWU1MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOnNjaGVtYT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0JPGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NpbXBsZXdzZGwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NpbXBsZXdzZGwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmMzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zaW1wbGV3c2RsLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9zaW1wbGV3c2RsLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbXBsZXdzZGwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvIi8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzJmZDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydGVkSW1wb3J0aW5nU2NoZW1hLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydGVkSW1wb3J0aW5nU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS8iCi0gICAgICAgICAgICB4bWxuczpJbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYT0iaHR0cDovL0ltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hIj4KLQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiIHNjaGVtYUxvY2F0aW9uPSJJbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QiPjwveHNkOmltcG9ydD4KLQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9IkltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hOk5ld1NpbXBsZVR5cGUiPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTAyYzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiIHhtbG5zOkltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiPgotICA8c2ltcGxlVHlwZSBuYW1lPSJOZXdTaW1wbGVUeXBlIj4KLSAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgIDxtaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvUGxhaW5TY2hlbWEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc3ViZm9sZGVyL1BsYWluU2NoZW1hLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VkZTc1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvUGxhaW5TY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3BsYWluc2NoZW1hIiB4bWxuczpQbGFpblNjaGVtYT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0JPHNpbXBsZVR5cGUgbmFtZT0iTmV3U2ltcGxlVHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgPC9yZXN0cmljdGlvbj4KLSAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZGMxNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJGb28iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Zvby8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRm9vLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Zvby8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImIiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ianVuayI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ5IiB0eXBlPSJ4c2Q6c3RyaW4iLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZm9vIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YSIgbmFtZT0iZm9vIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iYmFyIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YiIgbmFtZT0iYmFyIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkZvbyI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJnZXRGb28iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOmJhciIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Zm9vIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50L01lc3NhZ2VJbnZhbGlkRWxlbWVudC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGJlMjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWVzc2FnZUludmFsaWRFbGVtZW50LyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6SW52YWxpZEVsZW1lbnQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9Ik1lc3NhZ2VJbnZhbGlkRWxlbWVudFNPQVAiIHR5cGU9InRuczpNZXNzYWdlSW52YWxpZEVsZW1lbnQiPg0KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPg0KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJNZXNzYWdlSW52YWxpZEVsZW1lbnQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50U09BUCIgYmluZGluZz0idG5zOk1lc3NhZ2VJbnZhbGlkRWxlbWVudFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM0ZWRlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9Ik5ld1dTRExGaWxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OZXdXU0RMRmlsZS8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTmV3V1NETEZpbGUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iTmV3V1NETEZpbGVTT0FQIiB0eXBlPSJ0bnM6TmV3V1NETEZpbGUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iTmV3V1NETEZpbGUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iTmV3V1NETEZpbGVTT0FQIiBiaW5kaW5nPSJ0bnM6TmV3V1NETEZpbGVTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZTc0YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iPgotPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQlUaGlzIFdTREwgZG9jdW1lbnQgdGVzdHMgdGhhdCBhbiBlbGVtZW50IHNwZWNpZmllZCBmb3IgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0JdGhhdCBkb2VzIG5vdCByZXNvbHZlIHRvIGFueSByZXNvdXJjZSB2YWxpZGF0ZXMgY29ycmVjdGx5LgotPC93c2RsOmRvY3VtZW50YXRpb24+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9Ik5hbWVzcGFjZURvZXNudFJlc29sdmVTT0FQIiB0eXBlPSJ0bnM6TmFtZXNwYWNlRG9lc250UmVzb2x2ZSI+Ci08ZXh0OmVsZW1lbnQgeG1sbnM6ZXh0PSJodHRwOi8vc2NoZW1hcy5ub25leGlzdGFudGRvbWFpbi5uZWQvZWxlbWVudCIvPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZURvZXNudFJlc29sdmUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIj4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOk5hbWVzcGFjZURvZXNudFJlc29sdmVTT0FQIiBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMmYzYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZVJlc29sdmVzSFRNTC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvIj4KLTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JVGhpcyBXU0RMIHRlc3RzIHRoYXQgYW4gZXh0ZW5zaW9uIGVsZW1lbnQgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIHRoYXQKLQlyZXNvbHZlcyB0byBhbiBIVE1MIGRvY3VtZW50IChub24tc2NoZW1hIGRvY3VtZW50KSBkb2VzIG5vdCBjYXVzZQotCXZhbGlkYXRpb24gZXJyb3JzLgotPC93c2RsOmRvY3VtZW50YXRpb24+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik5hbWVzcGFjZVJlc29sdmVzSFRNTCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUxTT0FQIiB0eXBlPSJ0bnM6TmFtZXNwYWNlUmVzb2x2ZXNIVE1MIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPGV4dDplbGVtZW50IHhtbG5zOmV4dD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiPgotPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6TmFtZXNwYWNlUmVzb2x2ZXNIVE1MU09BUCIgbmFtZT0iTmFtZXNwYWNlUmVzb2x2ZXNIVE1MU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMDJiMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iUG9ydFR5cGVJbnZhbGlkSW5wdXQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZElucHV0LyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6SW52YWxpZElucHV0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBvcnRUeXBlSW52YWxpZElucHV0U09BUCIgdHlwZT0idG5zOlBvcnRUeXBlSW52YWxpZElucHV0Ij4NCi0gICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4NCi0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dFNPQVAiIGJpbmRpbmc9InRuczpQb3J0VHlwZUludmFsaWRJbnB1dFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC9Qb3J0VHlwZUludmFsaWRPdXRwdXQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkMWI2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZE91dHB1dC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRPdXRwdXQvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRPdXRwdXQvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpJbnZhbGlkT3V0cHV0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dFNPQVAiIHR5cGU9InRuczpQb3J0VHlwZUludmFsaWRPdXRwdXQiPg0KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPg0KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZE91dHB1dC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJQb3J0VHlwZUludmFsaWRPdXRwdXQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydFR5cGVJbnZhbGlkT3V0cHV0U09BUCIgYmluZGluZz0idG5zOlBvcnRUeXBlSW52YWxpZE91dHB1dFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvTm9EZWZhdWx0TmFtZXNwYWNlL05vRGVmYXVsdE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzMzZTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Ob0RlZmF1bHROYW1lc3BhY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iTm9EZWZhdWx0TmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Ob0RlZmF1bHROYW1lc3BhY2UvIj4KLSAgPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLSAgICA8ZWxlbWVudE5vTmFtZXNwYWNlLz4KLSAgPC93c2RsOmRvY3VtZW50YXRpb24+ICAgIAotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9SZWZlcmVuY2VJbmxpbmVUeXBlcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzEzMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJlbmNlSW5saW5lVHlwZXMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iUmVmZXJlbmNlSW5saW5lVHlwZXMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyZW5jZUlubGluZVR5cGVzLyI+Ci0gICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdNZXNzYWdlIj4KLSAgICAJPHdzZGw6cGFydCBuYW1lPSJOZXdNZXNzYWdlIiBlbGVtZW50PSJ0bnM6TmV3R2xvYmFsRWxlbWVudCI+PC93c2RsOnBhcnQ+Ci0gICAgPC93c2RsOm1lc3NhZ2U+Ci0gICAgPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyZW5jZUlubGluZVR5cGVzLyI+Ci0JCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PjwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGViY2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1NPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS8iPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgdXNlPSJlbmNvZGVkIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIHVzZT0iZW5jb2RlZCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZSI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2VTT0FQIiBuYW1lPSJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTQxM2ZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLyI+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6U09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UvIiB1c2U9ImVuY29kZWQiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS8iIHVzZT0iZW5jb2RlZCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlU09BUCIgbmFtZT0iU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTk3OWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUltcG9ydHMgYSBmaWxlIHRoYXQgY29udGFpbnMgYSBzZWxmIGltcG9ydC4KLS0tPgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iIGxvY2F0aW9uPSJTZWxmSW1wb3J0LndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydEZpbGVXaXRoU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnRTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0Ij4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiPgotPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0U09BUCIgbmFtZT0iSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvU2VsZkltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9TZWxmSW1wb3J0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OTFkMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUEgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5MWQzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZS9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUEgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvU2VsZkltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM4YzQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUFuIGludmFsaWQgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpJbnZhbGlkRWxlbWVudCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTM3NmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iU2VydmljZUludmFsaWRCaW5kaW5nIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZUludmFsaWRCaW5kaW5nLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VJbnZhbGlkQmluZGluZy8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VJbnZhbGlkQmluZGluZy8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VydmljZUludmFsaWRCaW5kaW5nIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlNlcnZpY2VJbnZhbGlkQmluZGluZ1NPQVAiIHR5cGU9InRuczpTZXJ2aWNlSW52YWxpZEJpbmRpbmciPgotICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZXJ2aWNlSW52YWxpZEJpbmRpbmcvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2VJbnZhbGlkQmluZGluZyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJTZXJ2aWNlSW52YWxpZEJpbmRpbmdTT0FQIiBiaW5kaW5nPSJ0bnM6SW5jb3JyZWN0QmluZGluZ1JlZiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdhMDdmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlcnZpY2VFbGVtZW50L05vQWRkcmVzcy9TZXJ2aWNlTm9BZGRyZXNzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iU2VydmljZU5vQWRkcmVzcyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VOb0FkZHJlc3MvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZU5vQWRkcmVzcy8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VOb0FkZHJlc3MvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlNlcnZpY2VOb0FkZHJlc3MiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU2VydmljZU5vQWRkcmVzc1NPQVAiIHR5cGU9InRuczpTZXJ2aWNlTm9BZGRyZXNzIj4KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZU5vQWRkcmVzcy9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZU5vQWRkcmVzcyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJTZXJ2aWNlTm9BZGRyZXNzU09BUCIgYmluZGluZz0idG5zOlNlcnZpY2VOb0FkZHJlc3NTT0FQIj4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNzE5NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0NhdGFsb2dTY2hlbWFzL3NjaGVtYTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMSI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NGRmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0NhdGFsb2dTY2hlbWFzL3NjaGVtYTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMiI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNzIyOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gSW52YWxpZCB0ZXN0IGZvciBFY2xpcHNlIGRlZmVjdCA3MDY3MC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibm9ybWFsaXplRW50aXRpZXNJbnZhbGlkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLyI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFTdHJpbmciPiAKLSAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+IAotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iRnw8fD58fnxIfEp8eCIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPiAKLSAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPiAKLSAgICAgICAgICA8L3hzZDplbGVtZW50PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc1ZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzVlYTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc1ZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBWYWxpZCB0ZXN0IGZvciBFY2xpcHNlIGRlZmVjdCA3MDY3MC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGVzVmFsaWQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibm9ybWFsaXplRW50aXRlc1ZhbGlkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGVzVmFsaWQvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm9ybWFsaXplRW50aXRlc1ZhbGlkLyI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFTdHJpbmciPiAKLSAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+IAotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iRnwmbHQ7fCZndDt8fnxIfEp8eCIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPiAKLSAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPiAKLSAgICAgICAgICA8L3hzZDplbGVtZW50PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzODc4MzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGRlZmluaXRpb25zIG5hbWU9IkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlIgotCXhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIKLQl4bWxuczp0bnM9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIKLQl4bWxuczpzY2g9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCi0JPHR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiPgkJCQotCQkJPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWEueHNkIi8+Ci0JCTwveHNkOnNjaGVtYT4KLQkJCQotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIgeG1sbnM6c2NoPSJodHRwOi8vdGVzdC5jb20vc2NoZW1hIj4KLQkJCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3QuY29tL3NjaGVtYSIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkVsZW1lbnQiIHR5cGU9InNjaDpNeVR5cGUiLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvdHlwZXM+CQotCQotCTxtZXNzYWdlIG5hbWU9InJlcXVlc3QiPgotCQk8cGFydCBuYW1lPSJwYXJ0IiBlbGVtZW50PSJ0bnM6RWxlbWVudCIvPgotCTwvbWVzc2FnZT4JCQotCQotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvc2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9zY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTA2ZTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9zY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiIAotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3QuY29tL3NjaGVtYSI+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik15VHlwZSI+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0iYXR0b25lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJhdHR0d28iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCTwvY29tcGxleFR5cGU+Ci0JCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZmViYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL1NpbXBsZS9UZXN0IgoteG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJUZXN0IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vU2ltcGxlL1Rlc3QiPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9TaW1wbGUvVGVzdCIKLXhtbG5zOnRucz0iaHR0cDovL1NpbXBsZS9UZXN0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJOb1Rucy54c2QiLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24xIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImlucHV0MSIgbmlsbGFibGU9InRydWUiIHR5cGU9Ik5vVG5zIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgICA8d3NkbDptZXNzYWdlIG5hbWU9Im9wZXJhdGlvbjFSZXF1ZXN0TXNnIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpvcGVyYXRpb24xIiBuYW1lPSJvcGVyYXRpb24xUGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJUZXN0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6b3BlcmF0aW9uMVJlcXVlc3RNc2ciIG5hbWU9Im9wZXJhdGlvbjFSZXF1ZXN0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hL05vVG5zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hL05vVG5zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5YzJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9Ob1Rucy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOb1RucyI+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWQ3OTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRTY2hlbWFOb05hbWVzcGFjZS8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIj4KLQk8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0ibm9UTlMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydFNjaGVtYU5vTmFtZXNwYWNlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9ub1ROUy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9ub1ROUy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDgwYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvbm9UTlMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA3OWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOb0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlLyIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCI+Ci0JCQk8eHM6Y29tcGxleFR5cGUgbmFtZT0idHlwZVdpdGhNaW5NYXhPY2N1cnMiPgotCQkJCTx4czpzZXF1ZW5jZT4KLQkJCQkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImVsZW0xIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImVsZW0yIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJPC94czpjb21wbGV4VHlwZT4KLQkJCTx4czpjb21wbGV4VHlwZSBuYW1lPSJ0eXBlV2l0aFJlc3RyaWN0aW9uIj4KLQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCTx4czplbGVtZW50IG5hbWU9ImVsZW0zIj4KLQkJCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzb21ldGhpbmciLz4KLQkJCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCQkJPC94czpzaW1wbGVUeXBlPgotCQkJCQk8L3hzOmVsZW1lbnQ+Ci0JCQkJPC94czpzZXF1ZW5jZT4KLQkJCTwveHM6Y29tcGxleFR5cGU+Ci0JCTwveHM6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDEzNzYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hPgotCQotPC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL05vTlNFbGVtZW50UmVmZXJlbmNlL05vTlNFbGVtZW50UmVmZXJlbmNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzMDJkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJOb05TRWxlbWVudFJlZmVyZW5jZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vTlNFbGVtZW50UmVmZXJlbmNlLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vTlNFbGVtZW50UmVmZXJlbmNlLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDpkb2N1bWVudGF0aW9uPgotCVRoaXMgV1NETCBmaWxlIGRlbW9uc3RyYXRlcyBhIG1lc3NhZ2UgcmVmZXJyaW5nIHRvIGFuIGVsZW1lbnQgdGhhdCBpcyBkZWZpbmVkCi0JYnkgYW4gaW5saW5lIHNjaGVtYSB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuCi0gIDwvd3NkbDpkb2N1bWVudGF0aW9uPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MzNkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiB4bWxuczp4c2QxPSJodHRwOi8vdGVtcHVyaS5vcmcvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELzEiIHhtbG5zOnhzZDI9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvMSI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8xIj4KLQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZ2EiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELzIiPgotCQkgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8xIi8+Ci0JCSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+Ci0gICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ4c2QxOk5ld0dsb2JhbEVsZW1lbnQiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjJkOTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIgotICAgICAgICAgICAgeG1sbnM6dHdvPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMi8iPgotICAgICAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvIi8+Ci0gICAgICAgICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5ld1NpbXBsZVR5cGUiPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0JCSAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InR3bzpOZXdTaW1wbGVUeXBlIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvIgotICAgICAgICAgICAgeG1sbnM6b25lPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMS8iPgotCQkgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIi8+Ci0JCSAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5ld1NpbXBsZVR5cGUiPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0JCSAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9Im9uZTpOZXdTaW1wbGVUeXBlIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5OGZkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIgotICAgICAgICAgICAgeG1sbnM6dHdvPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMi8iPgotICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJOZXdTaW1wbGVUeXBlIj4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotCQkgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0d286TmV3U2ltcGxlVHlwZSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9SZWZlclRvQW5vdGhlcklubGluZVR5cGUyLyIKLSAgICAgICAgICAgIHhtbG5zOm9uZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIj4KLQkJICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTmV3U2ltcGxlVHlwZSI+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSIvPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ib25lOk5ld1NpbXBsZVR5cGUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIxNDM3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIj4KLSAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ0aW1lIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IihbMC05XXsyfTpbMC05XXsyfTpbMC05XXsyfSl8KCNlbXB0eSB2YWx1ZSkiLz4gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4gICAgICAgICAgCi0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjZjYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUvIiAKLSAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9zYW1wbGUvIiAKLSAgICAgICAgICAgICB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgCi0gICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQk8dHlwZXM+Ci0JCTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIj4KLQkJCTx4czpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJCQk8eHM6YW5ub3RhdGlvbj4KLQkJCQkJPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQkJCQkJCTxjaG9pY2UgLz4KLQkJCQkJPC94czpkb2N1bWVudGF0aW9uPgotCQkJCTwveHM6YW5ub3RhdGlvbj4KLQkJCTwveHM6Y29tcGxleFR5cGU+Ci0JCTwveHM6c2NoZW1hPgotCTwvdHlwZXM+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk0MzM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvVmFsdWVDb2xvbi8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iVmFsdWVDb2xvbiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9WYWx1ZUNvbG9uLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1ZhbHVlQ29sb24vIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvIHNvdXJjZT0iaHR0cDovL3NhbXBsZS5jb20iPgotCQkJCQkJPHhzZDppbml0aWFsVmFsdWUga2luZD0ic3RyaW5nX3ZhbHVlIiB2YWx1ZT0iOiIvPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiODQ4ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi13c2kudGVzdHMuamFyCi1idWlsZC54bWwKLWphdmFDb21waWxlci53c2kudGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTVkMTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0Yjc5M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gQXByIDE2IDE3OjU5OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MzYwM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIE1heSAzMCAyMzoyNDozNCBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYWE3NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODo0OCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxYzA4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogd3NpLnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbC5XU0lUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzaSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLm9zZ2ksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjMDdmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS53c2kudGVzdHMuamFyID0gc3JjLwotb3V0cHV0LndzaS50ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSB3c2kudGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RSZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyOTE2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cwotQnVuZGxlLU5hbWUuMCA9IFdTSSBKVW5pdCBUZXN0Ci1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZUNvbmZvcm1hbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlQ29uZm9ybWFuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZDliYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlQ29uZm9ybWFuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5Bc3NlcnRpb25FcnJvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgQ29yZUNvbmZvcm1hbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfQ0FTRV9GSUxFID0gInRlc3RjYXNlLnhtbCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFEX0lEX0FQID0gIkFQMTAiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRF9JRF9TU0JQID0gIlNTQlAxMCI7Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIHBsdWdpblVSSSA9IG51bGw7Ci0gICAgcHJvdGVjdGVkIFN0cmluZyB0YWRJRCA9IFRBRF9JRF9BUDsKLQotICAgIHB1YmxpYyBDb3JlQ29uZm9ybWFuY2VUZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgICAgICBwbHVnaW5VUkkgPSBXU0lUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0dXAoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzLgotICAgICAqIEBwYXJhbSBmaWxlbmFtZSAtIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGNhc2UueG1sIGZpbGUuCi0gICAgICogQHJldHVybiB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzLgotICAgICAqLwotICAgIHByb3RlY3RlZCBMaXN0IGdldEV4cGVjdGVkQXNzZXJ0aW9uRmFpbHVyZXMoU3RyaW5nIGZpbGVuYW1lKSB7Ci0gICAgICAgIExpc3QgYXNzZXJ0aW9uRmFpbHVyZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS4KLSAgICAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKGZpbGVuYW1lKTsKLSAgICAgICAgICAgIE5vZGVMaXN0IGxpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFzc2VydGlvbiIpOwotICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KWxpc3QuaXRlbShpKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0YWRJRCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHRhZCAhPSBudWxsKSAmJiB0YWQuZXF1YWxzKHRoaXMudGFkSUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uRmFpbHVyZXMuYWRkKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlcyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFzc2VydGlvbkZhaWx1cmVzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXBhcmUgdGhlIGFjdHVhbCBlcnJvcnMgd2l0aCB0aGUgZXhwZWN0ZWQgZXJyb3JzLgotICAgICAqIEBwYXJhbSBlcnJvcnMgdGhlIGFjdHVhbCBhc3NlcnRpb24gZmFpbHVyZXMKLSAgICAgKiBAcGFyYW0gZXhwZWN0ZWRFcnJvcnMgdGhlIGV4cGVjdGVkIGFzc2VydGlvbiBmYWlsdXJlcwotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGFuYWx5emVSZXN1bHRzKExpc3QgZXJyb3JzLCBMaXN0IGV4cGVjdGVkRXJyb3JzKSB7Ci0gICAgICAgIExpc3QgYWN0dWFsRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBpZiAoKGVycm9ycyAhPSBudWxsKSAmJiAoZXhwZWN0ZWRFcnJvcnMgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSBlcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIEFzc2VydGlvbkVycm9yIGUgPSAoQXNzZXJ0aW9uRXJyb3IpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFzc2VydGlvbklkID0gZS5nZXRBc3NlcnRpb25JRCgpOwotICAgICAgICAgICAgICAgIGFjdHVhbEVycm9ycy5hZGQoYXNzZXJ0aW9uSWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFleHBlY3RlZEVycm9ycy5jb250YWlucyhhc3NlcnRpb25JZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbCgiVW5leHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZTogIiArIGFzc2VydGlvbklkKTsgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpID0gZXhwZWN0ZWRFcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBhc3NlcnRpb25JZCA9IChTdHJpbmcpaS5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbEVycm9ycy5jb250YWlucyhhc3NlcnRpb25JZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmU6ICIgKyBhc3NlcnRpb25JZCk7IAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEVycm9ycy5zaXplKCksIGVycm9ycy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZ2l2ZW4gdGFkLgotICAgICAqIEBwYXJhbSB0aWQgdGhlIHRhZCBpZC4KLSAgICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFkLgotICAgICAqLwotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VEFEVVJJKFN0cmluZyB0aWQpCi0gICAgewotICAgICAgICBpZiAodGlkLmVxdWFscyhUQURfSURfQVApKQotICAgICAgICAgICAgcmV0dXJuIFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuQVBfQVNTRVJUSU9OX0ZJTEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNTQlBfQVNTRVJUSU9OX0ZJTEU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWQ1ZjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLk1lc3NhZ2VBbmFseXplcjsKLQotcHVibGljIGNsYXNzIENvcmVNZXNzYWdlTG9nQ29uZm9ybWFuY2VUZXN0IGV4dGVuZHMgQ29yZUNvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9MT0dfQkFTRV9ESVJFQ1RPUlkgPQotICAgICAgInRlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfTE9HX0VYVEVOU0lPTiA9ICIud3NpbXNnIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9CQVNFX0RJUkVDVE9SWSA9ICJ0ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhURU5TSU9OID0gIi53c2RsIjsKLQotICBwdWJsaWMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QoU3RyaW5nIG5hbWUpIAotICB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBKVW5pdCB0ZXN0OiB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIFdTLUkgUHJvZmlsZS4KLSAgICogQHBhcmFtIHRhZCBoZSBXUy1JIFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50Ci0gICAqIEBwYXJhbSB0ZXN0TmFtZSB0aGUgbmFtZSBvZiB0aGUgdGVzdCBjb250YWluaW5nIHRoZSB3c2RsIGRvY3VtZW50Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIHRlc3ROYW1lLCBTdHJpbmcgdGFkSUQpIHsJCi0gICAgICB0aGlzLnRhZElEID0gdGFkSUQ7Ci0KLSAgICAgIGFzc2VydE5vdE51bGwoIlByb2JsZW1zIGRldGVybWluaW5nIGJhc2UgdXJsIiwgcGx1Z2luVVJJKTsKLSAgICAgIFN0cmluZyB0ZXN0RGlyZWN0b3J5ICA9IHBsdWdpblVSSSArIE1FU1NBR0VfTE9HX0JBU0VfRElSRUNUT1JZICsgIi8iICsKLSAgICAgICAgICAgICAgY2F0ZWdvcnkgKyAiLyIgKyB0ZXN0TmFtZTsKLSAgICAgIFN0cmluZyBtZXNzYWdlTG9nRmlsZSA9ICJmaWxlOi8vIiArIHRlc3REaXJlY3RvcnkgKyAiLyIgKyB0ZXN0TmFtZSArCi0gICAgICAgICAgICAgIE1FU1NBR0VfTE9HX0VYVEVOU0lPTjsKLSAgICAgIFN0cmluZyB0ZXN0Y2FzZUZpbGUgPSB0ZXN0RGlyZWN0b3J5ICsgICIvIiArIFRFU1RfQ0FTRV9GSUxFOwotCi0gICAgICAvLyB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgZG9jdW1lbnQKLSAgICAgIE1lc3NhZ2VBbmFseXplciBhbmFseXplciA9IHZhbGlkYXRlQ29uZm9ybWFuY2UobWVzc2FnZUxvZ0ZpbGUsIHRhZElEKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVua25vd24gcHJvYmxlbXMgZHVyaW5nIHZhbGlkYXRpb24iLCBhbmFseXplcik7Ci0KLSAgICAgIC8vIHJldHJpZXZlIHRoZSBleHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZXMKLSAgICAgIExpc3QgZXhwZWN0ZWRFcnJvcnMgPSBnZXRFeHBlY3RlZEFzc2VydGlvbkZhaWx1cmVzKHRlc3RjYXNlRmlsZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyByZXRyaWV2aW5nIGV4cGVjdGVkIGZhaWx1cmVzIiwgZXhwZWN0ZWRFcnJvcnMpOwotCi0gICAgICAvLyBjb21wYXJlIHRoZSBhY3R1YWwgZXJyb3JzIHdpdGggdGhlIGV4cGVjdGVkIGVycm9ycwotICAgICAgYW5hbHl6ZVJlc3VsdHMoYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIGV4cGVjdGVkRXJyb3JzKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgd3NkbCBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgV1MtSSBQcm9maWxlLgotICAgKiBAcGFyYW0gdGFkICB0aGUgV1MtSSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudAotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICogQHJldHVybiB0aGUgV1NETEFuYWx5emVyIG9iamVjdCBjb250YWluaW5nIHRoZSB2YWxpZGF0aW9uIHJlc3VsdHMKLSAgICovICAKLSAgcHJvdGVjdGVkIE1lc3NhZ2VBbmFseXplciB2YWxpZGF0ZUNvbmZvcm1hbmNlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRhZElEKSB7Ci0gICAgICBNZXNzYWdlQW5hbHl6ZXIgYW5hbHl6ZXIgPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgICBXU0lQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG5ldyBXU0lQcmVmZXJlbmNlcygpOwotICAgICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCggV1NJVGVzdFRvb2xzUHJvcGVydGllcy5TVE9QX05PTl9XU0kpOwotICAgICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoZ2V0VEFEVVJJKHRhZElEKSk7Ci0KLSAgICAgICAgICBhbmFseXplciA9IG5ldyBNZXNzYWdlQW5hbHl6ZXIoZmlsZW5hbWUsIHByZWZlcmVuY2VzKTsKLQotICAgICAgICAgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotICAgICAgICAgIGFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9CQotICAgICAgcmV0dXJuIGFuYWx5emVyOwotICB9Ci0KLSAgCi0gIAotICAvKioKLSAgICogSlVuaXQgdGVzdDogdmFsaWRhdGUgdGhlIG1lc3NhZ2UgbG9nIHdpdGggYSBXU0RMIGZpbGUKLSAgICogQHBhcmFtIHdzZGxGaWxlIFVSSSBvZiB0aGUgV1NETCBmaWxlCi0gICAqIEBwYXJhbSBXU0RhdGEgU3RyaW5nIGFycmF5IGNvbnRhaW5pbmc6IGVsZW1lbnRuYW1lLCBuYW1lc3BhY2UsIHBhcmVudG5hbWUsIHR5cGUKLSAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSBuYW1lIG9mIHRoZSBsb2cgYW5kIHdzZGwgZmlsZSAodGhleSBzaG91bGQgYmUgbG9jYXRlZCBpbiB0aGUgbG9nIGFuZCB3c2RsIHBhdGhzIHJlc3BlY3RpdmVseSkKLSAgICovCi0gIAotICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0V2l0aFdTREwoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgdGVzdE5hbWUsIFN0cmluZ1tdIFdTRGF0YSkgewkKLQotICAgICAgYXNzZXJ0Tm90TnVsbCgiUHJvYmxlbXMgZGV0ZXJtaW5pbmcgYmFzZSB1cmwiLCBwbHVnaW5VUkkpOwotICAgICAgU3RyaW5nIHRlc3REaXJlY3RvcnkgID0gcGx1Z2luVVJJICsgTUVTU0FHRV9MT0dfQkFTRV9ESVJFQ1RPUlkgKyAiLyIgKwotICAgICAgICAgICAgICBjYXRlZ29yeSArICIvIiArIHRlc3ROYW1lOwotICAgICAgU3RyaW5nIG1lc3NhZ2VMb2dGaWxlID0gImZpbGU6Ly8iICsgdGVzdERpcmVjdG9yeSArICIvIiArIHRlc3ROYW1lICsKLSAgICAgICAgICAgICAgTUVTU0FHRV9MT0dfRVhURU5TSU9OOwotICAgICAgU3RyaW5nIHRlc3RjYXNlRmlsZSA9IHRlc3REaXJlY3RvcnkgKyAgIi8iICsgVEVTVF9DQVNFX0ZJTEU7Ci0gICAgICBTdHJpbmcgd3NkbEZpbGUgPSAiZmlsZTovLyIgKyBwbHVnaW5VUkkgKyBXU0RMX0JBU0VfRElSRUNUT1JZICsgIi8iICsgY2F0ZWdvcnkgKyAiLyIgKyB0ZXN0TmFtZSArIFdTRExfRVhURU5TSU9OOwotICAgICAgCi0gICAgICAvLyB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgZG9jdW1lbnQKLSAgICAgIE1lc3NhZ2VBbmFseXplciBhbmFseXplciA9IHZhbGlkYXRlQ29uZm9ybWFuY2VXaXRoV1NETChtZXNzYWdlTG9nRmlsZSwgd3NkbEZpbGUsIFdTRGF0YSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJVbmtub3duIHByb2JsZW1zIGR1cmluZyB2YWxpZGF0aW9uIiwgYW5hbHl6ZXIpOwotCi0gICAgICAvLyByZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzCi0gICAgICBMaXN0IGV4cGVjdGVkRXJyb3JzID0gZ2V0RXhwZWN0ZWRBc3NlcnRpb25GYWlsdXJlcyh0ZXN0Y2FzZUZpbGUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiUHJvYmxlbXMgcmV0cmlldmluZyBleHBlY3RlZCBmYWlsdXJlcyIsIGV4cGVjdGVkRXJyb3JzKTsKLQotICAgICAgLy8gY29tcGFyZSB0aGUgYWN0dWFsIGVycm9ycyB3aXRoIHRoZSBleHBlY3RlZCBlcnJvcnMKLSAgICAgIGFuYWx5emVSZXN1bHRzKGFuYWx5emVyLmdldEFzc2VydGlvbkVycm9ycygpLCBleHBlY3RlZEVycm9ycyk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSBsb2cgd2l0aCBhIFdTREwgZmlsZQotICAgKiBAcGFyYW0gd3NkbEZpbGUgVVJJIG9mIHRoZSBXU0RMIGZpbGUKLSAgICogQHBhcmFtIFdTRGF0YSBTdHJpbmcgYXJyYXkgY29udGFpbmluZzogZWxlbWVudG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50bmFtZSwgdHlwZQotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIG5hbWUgb2YgdGhlIGxvZyBhbmQgd3NkbCBmaWxlICh0aGV5IHNob3VsZCBiZSBsb2NhdGVkIGluIHRoZSBsb2cgYW5kIHdzZGwgcGF0aHMgcmVzcGVjdGl2ZWx5KQotICAgKiBAcmV0dXJuIHRoZSBXU0RMQW5hbHl6ZXIgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZhbGlkYXRpb24gcmVzdWx0cwotICAgKi8gIAotCi0JcHJvdGVjdGVkIE1lc3NhZ2VBbmFseXplciB2YWxpZGF0ZUNvbmZvcm1hbmNlV2l0aFdTREwoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgd3NkbEZpbGUsIFN0cmluZ1tdIFdTRGF0YSkgewotCSAgICBNZXNzYWdlQW5hbHl6ZXIgYW5hbHl6ZXIgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgV1NJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLQkgICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCggV1NJVGVzdFRvb2xzUHJvcGVydGllcy5TVE9QX05PTl9XU0kpOwotCSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShnZXRUQURVUkkodGFkSUQpKTsKLQkKLQkgICAgICAgIGFuYWx5emVyID0gbmV3IE1lc3NhZ2VBbmFseXplcihmaWxlbmFtZSwgd3NkbEZpbGUsIFdTRGF0YVswXSwgIFdTRGF0YVsxXSwgV1NEYXRhWzJdLCBXU0RhdGFbM10sIHByZWZlcmVuY2VzKTsKLQkKLQkgICAgICAgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotCSAgICAgICAgYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgICAgcmV0dXJuIG51bGw7Ci0JICAgIH0JCi0JICAgIHJldHVybiBhbmFseXplcjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZVdTRExDb25mb3JtYW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZVdTRExDb25mb3JtYW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzMzg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0NvcmVXU0RMQ29uZm9ybWFuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5XU0RMQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETFJlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotcHVibGljIGNsYXNzIENvcmVXU0RMQ29uZm9ybWFuY2VUZXN0IGV4dGVuZHMgQ29yZUNvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9CQVNFX0RJUkVDVE9SWSA9ICJ0ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhURU5TSU9OID0gIi53c2RsIjsKLQotICBwdWJsaWMgQ29yZVdTRExDb25mb3JtYW5jZVRlc3QoU3RyaW5nIG5hbWUpIAotICB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBKVW5pdCB0ZXN0OiB2YWxpZGF0ZSB0aGUgd3NkbCBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgV1MtSSBQcm9maWxlLgotICAgKiBAcGFyYW0gdGFkIGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQKLSAgICogQHBhcmFtIHRlc3ROYW1lIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGNvbnRhaW5pbmcgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyB0YWRJRCkKLSAgewkKLQl0aGlzLnRhZElEID0gdGFkSUQ7Ci0KLSAgICBhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyBkZXRlcm1pbmluZyBiYXNlIHVybCIsIHBsdWdpblVSSSk7Ci0gICAgU3RyaW5nIHRlc3REaXJlY3RvcnkgID0gcGx1Z2luVVJJICsgV1NETF9CQVNFX0RJUkVDVE9SWSArICIvIiArIGNhdGVnb3J5ICsgIi8iICsgdGVzdE5hbWU7Ci0gICAgU3RyaW5nIHdzZGxGaWxlID0gImZpbGU6Ly8iICsgdGVzdERpcmVjdG9yeSArICIvIiArIHRlc3ROYW1lICsgV1NETF9FWFRFTlNJT047Ci0gICAgU3RyaW5nIHRlc3RjYXNlRmlsZSA9IHRlc3REaXJlY3RvcnkgKyAgIi8iICsgVEVTVF9DQVNFX0ZJTEU7Ci0gICAgCi0JLy8gdmFsaWRhdGUgdGhlIFdTREwgZG9jdW1lbnQKLSAgICBXU0RMQW5hbHl6ZXIgYW5hbHl6ZXIgPSB2YWxpZGF0ZUNvbmZvcm1hbmNlKHdzZGxGaWxlLCB0YWRJRCk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiVW5rbm93biBwcm9ibGVtcyBkdXJpbmcgdmFsaWRhdGlvbiIsIGFuYWx5emVyKTsKLSAgICAKLQkvLyByZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzCi0JTGlzdCBleHBlY3RlZEVycm9ycyA9IGdldEV4cGVjdGVkQXNzZXJ0aW9uRmFpbHVyZXModGVzdGNhc2VGaWxlKTsKLQlhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyByZXRyaWV2aW5nIGV4cGVjdGVkIGZhaWx1cmVzIiwgZXhwZWN0ZWRFcnJvcnMpOwotCQotCS8vIGNvbXBhcmUgdGhlIGFjdHVhbCBlcnJvcnMgd2l0aCB0aGUgZXhwZWN0ZWQgZXJyb3JzCi0gICAgYW5hbHl6ZVJlc3VsdHMoYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIGV4cGVjdGVkRXJyb3JzKTsKLSAgfSAgICAKLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIHdzZGwgZG9jdW1lbnQgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIFdTLUkgUHJvZmlsZS4KLSAgICogQHBhcmFtIHRhZCAgdGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQKLSAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSB3c2RsIGRvY3VtZW50Ci0gICAqIEByZXR1cm4gdGhlIFdTRExBbmFseXplciBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsaWRhdGlvbiByZXN1bHRzCi0gICAqLyAgCi0gIHByb3RlY3RlZCBXU0RMQW5hbHl6ZXIgdmFsaWRhdGVDb25mb3JtYW5jZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB0YWRJRCkKLSAgewotCVdTRExBbmFseXplciBhbmFseXplciA9IG51bGw7Ci0gICAgdHJ5IAotICAgIHsKLSAgIAkgIFdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0gICAJICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoIFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJKTsKLQkgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoZ2V0VEFEVVJJKHRhZElEKSk7Ci0JCQotCSAgYW5hbHl6ZXIgPSBuZXcgV1NETEFuYWx5emVyKGZpbGVuYW1lLCBwcmVmZXJlbmNlcyk7Ci0JICBzZXRDb25maWd1cmF0aW9ucyhmaWxlbmFtZSwgYW5hbHl6ZXIpOwotCQkKLQkgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotCSAgYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotICAgIH0gICAgCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0JCi0JcmV0dXJuIGFuYWx5emVyOwotICB9Ci0gIAotICAvKioKLSAgICogR2F0aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgV1NETCBmaWxlLgotICAgKiBAcGFyYW0gZmlsZU5hbWUgdGhlIHdzZGwgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBhIFdTRExBbmFseXplciBvYmplY3QgY29udGFpbmcgY29uZmlndXJhdGlvbiBpbmZvLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0Q29uZmlndXJhdGlvbnMoU3RyaW5nIGZpbGVuYW1lLCBXU0RMQW5hbHl6ZXIgYW5hbHl6ZXIpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSBuZXcgV1NETFJlYWRlckltcGwoKTsKLQotICAgICAgLy8gU2V0IGZlYXR1cmVzCi0gICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoY29tLmlibS53c2RsLkNvbnN0YW50cy5GRUFUVVJFX1ZFUkJPU0UsIGZhbHNlKTsKLSAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfSU1QT1JUX0RPQ1VNRU5UUywgdHJ1ZSk7Ci0KLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MRG9jdW1lbnQoZmlsZW5hbWUpOwotCSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETChmaWxlbmFtZSwgZG9jdW1lbnQpOwotICAgICAgLy9EZWZpbml0aW9uIGRlZmluaXRpb24gPSByZWFkZXIucmVhZFdTREwoZmlsZW5hbWUpOwotCi0JICBTdHJpbmcgbmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQotCSAgLy8gZ2V0IGFsbCB0aGUgY29sbGVjdGlvbnMgd2UgbWF5IG5lZWQgdG8gdmFsaWRhdGUKLQkgIENvbGxlY3Rpb24gc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCk7Ci0JICBDb2xsZWN0aW9uIGJpbmRpbmdzID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpLnZhbHVlcygpOwotCSAgQ29sbGVjdGlvbiBwb3J0VHlwZXMgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpOwotCSAgQ29sbGVjdGlvbiBtZXNzYWdlcyA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKTsKLQotCSAgLy8gVGhlIFdTLUkgY29uZm9ybWFuY2UgdG9vbHMgcmVxdWlyZSB0aGF0IGVhY2ggc2VydmljZSBiZSBhbmFseXplZCBzZXBhcmF0ZWx5LgotCSAgLy8gR2V0IGFsbCB0aGUgc2VydmljZXMgYW5kIGFuYWx5emUgdGhlbS4KLQkgIGlmIChzZXJ2aWNlcyAhPSBudWxsICYmICFzZXJ2aWNlcy5pc0VtcHR5KCkpCi0JICB7Ci0JICAgIEl0ZXJhdG9yIHNlcnZpY2VJdGVyYXRvciA9IHNlcnZpY2VzLml0ZXJhdG9yKCk7Ci0KLQkgICAgd2hpbGUgKHNlcnZpY2VJdGVyYXRvci5oYXNOZXh0KCkpCi0JICAgIHsKLQkgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgc2VydmljZUl0ZXJhdG9yLm5leHQoKTsKLQotCSAgICAgIFN0cmluZyBzZXJ2aWNlbmFtZSA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQotCSAgICAgIENvbGxlY3Rpb24gcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCk7Ci0JICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgIXBvcnRzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICAvLyBUaGUgV1MtSSB0b29scyBtdXN0IGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHBvcnQgd2l0aGluIGVhY2ggc2VydmljZS4KLQkgICAgICAgIEl0ZXJhdG9yIHBvcnRJdGVyYXRvciA9IHBvcnRzLml0ZXJhdG9yKCk7Ci0JICAgICAgICB3aGlsZSAocG9ydEl0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRJdGVyYXRvci5uZXh0KCk7Ci0JCQkgIGFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3Qoc2VydmljZW5hbWUsIG5hbWVzcGFjZSwgcG9ydC5nZXROYW1lKCksIFdTRExBbmFseXplci5QT1JUKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIGJpbmRpbmcgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgYmluZGluZwotCSAgICAgIGVsc2UgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgIWJpbmRpbmdzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICBJdGVyYXRvciBiaW5kaW5nSXRlcmF0b3IgPSBiaW5kaW5ncy5pdGVyYXRvcigpOwotCi0JICAgICAgICB3aGlsZSAoYmluZGluZ0l0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGJpbmRpbmdJdGVyYXRvci5uZXh0KCk7Ci0JICAgICAgICAgIFN0cmluZyBiaW5kaW5nbmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIGJpbmRpbmduYW1lLCBXU0RMQW5hbHl6ZXIuQklORElORyk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICAgIC8vIHZhbGlkYXRlIGF0IHRoZSBwb3J0VHlwZSBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBwb3J0VHlwZQotCSAgICAgIGVsc2UgaWYgKHBvcnRUeXBlcyAhPSBudWxsICYmICFwb3J0VHlwZXMuaXNFbXB0eSgpKQotCSAgICAgIHsKLQkgICAgICAgIEl0ZXJhdG9yIHBvcnRUeXBlSXRlcmF0b3IgPSBwb3J0VHlwZXMuaXRlcmF0b3IoKTsKLQkgICAgICAgIHdoaWxlIChwb3J0VHlwZUl0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIHBvcnRUeXBlSXRlcmF0b3IubmV4dCgpOwotCSAgICAgICAgICBTdHJpbmcgcG9ydFR5cGVuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIHBvcnRUeXBlbmFtZSwgV1NETEFuYWx5emVyLlBPUlRUWVBFKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIG1lc3NhZ2UgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgbWVzc2FnZQotCSAgICAgIGVsc2UgaWYgKG1lc3NhZ2VzICE9IG51bGwgJiYgIW1lc3NhZ2VzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXRlcmF0b3IgPSBtZXNzYWdlcy5pdGVyYXRvcigpOwotCSAgICAgICAgd2hpbGUgKG1lc3NhZ2VJdGVyYXRvci5oYXNOZXh0KCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBtZXNzYWdlSXRlcmF0b3IubmV4dCgpOwotCSAgICAgICAgICBTdHJpbmcgbWVzc2FnZW5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgIGFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QobnVsbCwgbmFtZXNwYWNlLCBtZXNzYWdlbmFtZSwgV1NETEFuYWx5emVyLk1FU1NBR0UpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgfQotICAgIH0KLQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotICAgICAgZmFpbCgiVW5leHBlY3RlZCBwcm9ibGVtcyBzZXR0aW5nIGNvbmZpZ3VyYXRpb25zIik7Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VBUFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4ZDM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlQVBUZXN0IGV4dGVuZHMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QgewotCi0gICAgcHVibGljIE1lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzEzMDlfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTMwOS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzEzMDlfMigpIHsgcnVuVGVzdCgiYnAiLCAiMTMwOS0yIiwgVEFEX0lEX0FQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzE2MDBfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTYwMC0xIiwgVEFEX0lEX0FQKTsgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTT0FQMTJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY3NDBlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXIuTWVzc2FnZUFuYWx5emVyOwotCi0KLQotLyoqCi0gKiBKVW5pdCB0ZXN0cyB0aGF0IHRlc3QgbWVzc2FnZSBsb2dzIGFnYWluc3QgdGhlIFdTLUkgQXR0YWNobWVudHMgcHJvZmlsZS4KLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QgZXh0ZW5kcyBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0xPR19GSUxFTkFNRSA9ICJsb2cud3NpbXNnIjsKLQkKLSAgICBwdWJsaWMgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0X1NPQVAoKSB7IHJ1blRlc3RXaXRoV1NETCgiU09BUDEyIiwgIlNpbXBsZUxvZyIsIG5ldyBTdHJpbmdbXSB7IkhlbGxvIiwgImh0dHA6Ly90ZXN0LyIsICJIZWxsb1NlcnZpY2UiLCAicG9ydCJ9KTsgfSAKLQotICAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMzkyN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nCi0gKiBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QgZXh0ZW5kcwotICAgICAgICBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdCB7Ci0KLSAgICBwdWJsaWMgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RfMTMwOV8xKCkgeyBydW5UZXN0KCJicCIsICIxMzA5LTEiLCBUQURfSURfU1NCUCk7IH0gCi0gICAgcHVibGljIHZvaWQgdGVzdF8xMzA5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjEzMDktMiIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzE2MDBfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTYwMC0xIiwgVEFEX0lEX1NTQlApOyB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTZWN1cmVXU1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyM2VjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5NZXNzYWdlQW5hbHl6ZXI7Ci0KLQotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU2VjdXJlV1NUZXN0IGV4dGVuZHMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0dfRklMRU5BTUUgPSAibG9nLndzaW1zZyI7Ci0JCi0gICAgcHVibGljIE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0X1NlY3VyZVdTX05vU2VjdXJpeSgpIHsgcnVuVGVzdFdpdGhXU0RMKCJTZWN1cmVXUyIsICJOb1NlY3VyaXR5IiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9IAotCi0gICAgcHVibGljIHZvaWQgdGVzdF9TZWN1cmVXU19TaWduYXR1cmUoKSB7IHJ1blRlc3RXaXRoV1NETCgiU2VjdXJlV1MiLCAiU2lnbmF0dXJlIiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9IAotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RfU2VjdXJlV1NfRW5jcnlwdGlvbigpIHsgcnVuVGVzdFdpdGhXU0RMKCJTZWN1cmVXUyIsICJFbmNyeXB0aW9uIiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9Ci0gICAgICAgCi0gICAgcHVibGljIHZvaWQgdGVzdF9TZWN1cmVXU19TaWduYXR1cmVBbmRFbmNyeXB0aW9uKCkgeyBydW5UZXN0V2l0aFdTREwoIlNlY3VyZVdTIiwgIlNpZ25hdHVyZUFuZEVuY3J5cHRpb24iLCBuZXcgU3RyaW5nW10geyJXZWJTZXJ2aWNlIiwgImh0dHA6Ly9tYWluIiwgIldlYlNlcnZpY2VTZXJ2aWNlIiwgInBvcnQifSk7IH0gCi0gICAgCi0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1JlZ3Jlc3Npb25CdWNrZXQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvUmVncmVzc2lvbkJ1Y2tldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZmOGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvUmVncmVzc2lvbkJ1Y2tldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgcnVucyBhbGwgb2YgdGhlIHRlc3RzIGltcGxlbWVudGVkIAotICogaW4gdGhpcyBwbHVnaW4uCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgUmVncmVzc2lvbkJ1Y2tldCBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQkgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIAotCSAgewotCSAgICBUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIlJlZ3Jlc3Npb24gQnVja2V0Iik7Ci0JICAgIGlmICh0YWRJc0F2YWlsYWJsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNTQlBfQVNTRVJUSU9OX0ZJTEUpKSB7Ci0gICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFRlc3RTdWl0ZShXU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5jbGFzcykpOwotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QuY2xhc3MpKTsKLSAgICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChuZXcgVGVzdFN1aXRlKE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5jbGFzcykpOwotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdC5jbGFzcykpOwotICAgICAgICB9Ci0JICAgIGlmICh0YWRJc0F2YWlsYWJsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLkFQX0FTU0VSVElPTl9GSUxFKSkgewotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoV1NETENvbmZvcm1hbmNlQVBUZXN0LmNsYXNzKSk7Ci0gICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFRlc3RTdWl0ZShNZXNzYWdlTG9nQ29uZm9ybWFuY2VBUFRlc3QuY2xhc3MpKTsKLSAgICAgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIHN1aXRlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGFkSXNBdmFpbGFibGUoU3RyaW5nIHRhZFVSSSkKLQkgIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCSAgVVJMIHVybCA9IG5ldyBVUkwodGFkVVJJKTsKLQkJICBpcyA9IHVybC5vcGVuU3RyZWFtKCk7Ci0JCSAgaXMuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkgIHJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlQVBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTRExDb25mb3JtYW5jZUFQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWY0NzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlQVBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0qIAotKiBDb250cmlidXRvcnM6Ci0qICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuaW50ZXJuYWw7Ci0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCB3c2RsIGRvY3VtZW50cyBhZ2FpbnN0IAotICogdGhlIFdTLUkgQXR0YWNobWVudHMgcHJvZmlsZS4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29uZm9ybWFuY2VBUFRlc3QgZXh0ZW5kcyBDb3JlV1NETENvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIFdTRExDb25mb3JtYW5jZUFQVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0vL3dzLWkgd3NkbHMKLSAgcHVibGljIHZvaWQgdGVzdF9hZGRyZXNzQm9vaygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rIiwgVEFEX0lEX0FQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0X2FkZHJlc3NCb29rX3JwYygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rLXJwYyIsIFRBRF9JRF9BUCk7IH0KLSAvLyBwdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcENhdGFsb2coKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBDYXRhbG9nIiwgVEFEX0lEX0FQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwTWFudWZhY3R1cmVyKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwTWFudWZhY3R1cmVyIiwgVEFEX0lEX0FQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwV2FyZWhvdXNlKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwV2FyZWhvdXNlIiwgVEFEX0lEX0FQKTsgfSAKLQotICAvLyBicCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTJfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMi0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDEzXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTMtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtNCIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktNCIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yNDA2XzEoKSB7IHJ1blRlc3QoImJwIiwgIjI0MDYtMSIsIFRBRF9JRF9BUCk7IH0KLQotICAvLyBhcCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzI5NDFfMSgpIHsgcnVuVGVzdCgiYXAiLCAiMjk0MS0xIiwgVEFEX0lEX0FQKTsgfSAKLQotICAvLyByZWR1bmRhbnQgdGVzdHMgLS0gYXNzZXJ0aW9ucyBmYWlsdXJlcyBjYXVnaHQgYnkgYmFzZSB3c2RsIHZhbGlkYXRvci4KLSAgcHVibGljIHZvaWQgdGVzdF8yMDEwXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDEwLTEiLCBUQURfSURfQVApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDExXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTIiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTFfMygpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtMyIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS00IiwgVEFEX0lEX0FQKTsgfSAKLSAgLy9wdWJsaWMgdm9pZCB0ZXN0XzIwMTFfNSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtNSIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTIiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfMygpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtMyIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS00IiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzUoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTUiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfNigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtNiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIyXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIyLTEiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjItMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDMyXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDMyLTEiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMzJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMzItMiIsIFRBRF9JRF9BUCk7IH0gCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjBkNTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlU1NCUFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSogCi0qIENvbnRyaWJ1dG9yczoKLSogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLS8qKgotICogSlVuaXQgdGVzdHMgdGhhdCB0ZXN0IHdzZGwgZG9jdW1lbnRzIGFnYWluc3QgCi0gKiB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nIHByb2ZpbGUuCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgV1NETENvbmZvcm1hbmNlU1NCUFRlc3QgZXh0ZW5kcyBDb3JlV1NETENvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIFdTRExDb25mb3JtYW5jZVNTQlBUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLSAgLy8gd3MtaSB3c2RscwotICBwdWJsaWMgdm9pZCB0ZXN0X2FkZHJlc3NCb29rKCkgeyBydW5UZXN0KCJ3c2kiLCAiYWRkcmVzc0Jvb2siLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF9hZGRyZXNzQm9va19ycGMoKSB7IHJ1blRlc3QoIndzaSIsICJhZGRyZXNzQm9vay1ycGMiLCBUQURfSURfU1NCUCk7IH0KLSAgLy9wdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcENhdGFsb2coKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBDYXRhbG9nIiwgVEFEX0lEX1NTQlApOyB9ICAKLSAgcHVibGljIHZvaWQgdGVzdF9zYW1wbGVBcHBNYW51ZmFjdHVyZXIoKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBNYW51ZmFjdHVyZXIiLCBUQURfSURfU1NCUCk7IH0gIAotICBwdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcFdhcmVob3VzZSgpIHsgcnVuVGVzdCgid3NpIiwgInNhbXBsZUFwcFdhcmVob3VzZSIsIFRBRF9JRF9TU0JQKTsgfSAKLQotICAvLyBicCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTJfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMi0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTNfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMy0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxNF8xKCkgeyBydW5UZXN0KCJicCIsICIyMDE0LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTRfMygpIHsgcnVuVGVzdCgiYnAiLCAiMjAxNC0zIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxN18xKCkgeyBydW5UZXN0KCJicCIsICIyMDE3LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMThfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOC0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOF8yKCkgeyBydW5UZXN0KCJicCIsICIyMDE4LTIiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMyIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMThfNCgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOC00IiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOV8xKCkgeyBydW5UZXN0KCJicCIsICIyMDE5LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTlfMygpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOS0zIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOV80KCkgeyBydW5UZXN0KCJicCIsICIyMDE5LTQiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMSIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjBfMigpIHsgcnVuVGVzdCgiYnAiLCAiMjAyMC0yIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjEwNV8xKCkgeyBydW5UZXN0KCJicCIsICIyMTA1LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIxMTdfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjExNy0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjExN18yKCkgeyBydW5UZXN0KCJicCIsICIyMTE3LTIiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMyIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzI0MDZfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjQwNi0xIiwgVEFEX0lEX1NTQlApOyB9Ci0KLSAgLy8gcmVkdW5kYW50IHRlc3RzIC0tIGFzc2VydGlvbnMgZmFpbHVyZXMgY2F1Z2h0IGJ5IGJhc2Ugd3NkbCB2YWxpZGF0b3IuCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMF8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMC0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTFfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtMiIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDExXzMoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTMiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS00IiwgVEFEX0lEX1NTQlApOyB9IAotICAvL3B1YmxpYyB2b2lkIHRlc3RfMjAxMV81KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS01IiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTIiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV8zKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS0zIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfNCgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtNCIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzUoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTUiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV82KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS02IiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMl8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMi0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjItMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMzJfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMzItMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDMyXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDMyLTIiLCBUQURfSURfU1NCUCk7IH0gCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYjk3NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0lUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0gcHJpdmF0ZSBzdGF0aWMgV1NJVGVzdHNQbHVnaW4gcGx1Z2luOwotIHByaXZhdGUgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGUgPSBudWxsOwotCi0gLyoqCi0gICogVGhlIGNvbnN0cnVjdG9yLgotICAqLwotIHB1YmxpYyBXU0lUZXN0c1BsdWdpbigpCi0gewotICAgc3VwZXIoKTsKLSAgIHBsdWdpbiA9IHRoaXM7Ci0gfQotCi0gLyoqCi0gICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICovCi0gcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gewotICAgc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSB9Ci0KLSAvKioKLSAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0gICovCi0gcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSB7Ci0gICBzdXBlci5zdG9wKGNvbnRleHQpOwotIH0KLQotIC8qKgotICAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIFdTSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKQotIHsKLSAgIHJldHVybiBwbHVnaW47Ci0gfQotIAotIC8qKgotICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICogCi0gICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSB7Ci0gICB0cnkKLSAgIHsKLSAgICAgcmV0dXJuIFBsYXRmb3JtLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgIH0KLSAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgewotICAgICByZXR1cm4gbnVsbDsKLSAgIH0KLSB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJlOGFkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0JCQotCQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkgbmFtZT0id3N0LWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIi8+Ci0JCTxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIAk8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3QtZm9sZGVyfSIvPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbC5SZWdyZXNzaW9uQnVja2V0IiAvPgotICAgCQkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TT0FQMTIvU2ltcGxlTG9nL1NpbXBsZUxvZy53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TT0FQMTIvU2ltcGxlTG9nL1NpbXBsZUxvZy53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OWYxMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy9TaW1wbGVMb2cud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA3LTAxLTI0VDEzOjAzOjQwLjUzMiIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0icHdpMzJkZXYtMjAwNjEwMDJhIChTUjMpIi8+Ci0gICAgICA8b3BlcmF0aW5nU3lzdGVtIG5hbWU9IldpbmRvd3MgWFAiIHZlcnNpb249IjUuMSBidWlsZCAyNjAwIFNlcnZpY2UgUGFjayAyIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuNC42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA3LTAxLTI0VDEzOjAyOjU4LjM0MloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC1lbnZlbG9wZSZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXImZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtuczI6aGVsbG8geG1sbnM6bnMyPSZxdW90O2h0dHA6Ly90ZXN0LyZxdW90OyZndDsmbHQ7YXJnMCZndDtnYWJlJmx0Oy9hcmcwJmd0OyZsdDsvbnMyOmhlbGxvJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgxPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPlBPU1QgL3RkMTIvSGVsbG9TZXJ2aWNlIEhUVFAvMS4xJiN4ZDsKLUhvc3Q6IGxvY2FsaG9zdDo5MDgxJiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsbXVsdGlwYXJ0L3JlbGF0ZWQsdGV4dC8qJiN4ZDsKLVVzZXItQWdlbnQ6IElCTSBXZWJTZXJ2aWNlcy8xLjAmI3hkOwotQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUmI3hkOwotUHJhZ21hOiBuby1jYWNoZSYjeGQ7Ci1TT0FQQWN0aW9uOiAmcXVvdDsmcXVvdDsmI3hkOwotQ29ubmVjdGlvbjogS2VlcC1BbGl2ZSYjeGQ7Ci1Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NvYXAreG1sOyBjaGFyc2V0PVVURi04JiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiAyNTgmI3hkOwotRGF0ZTogV2VkLCAyNCBKYW4gMjAwNyAxODowMjo1NyBHTVQmI3hkOwotJiN4ZDsKLTwvaHR0cEhlYWRlcnM+Ci08L21lc3NhZ2VFbnRyeT4KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIyIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVzcG9uc2UiIHRpbWVzdGFtcD0iMjAwNy0wMS0yNFQxMzowMjo1OC40NzJaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7Jmx0O3NvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcGUmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7bnMyOmhlbGxvUmVzcG9uc2UgeG1sbnM6bnMyPSZxdW90O2h0dHA6Ly90ZXN0LyZxdW90OyZndDsmbHQ7cmV0dXJuJmd0O0hlbGxvLCBnYWJlISZsdDsvcmV0dXJuJmd0OyZsdDsvbnMyOmhlbGxvUmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODE8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vc29hcCt4bWw7IGNoYXJzZXQ9VVRGLTgmI3hkOwotQ29udGVudC1MYW5ndWFnZTogZW4tVVMmI3hkOwotU2V0LUNvb2tpZTogSlNFU1NJT05JRD0wMDAwNXpGTVdZVXdHbHRMYS1qTnVOYXh3cTM6LTE7IFBhdGg9LyYjeGQ7Ci1UcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCYjeGQ7Ci1EYXRlOiBXZWQsIDI0IEphbiAyMDA3IDE4OjAyOjU3IEdNVCYjeGQ7Ci1TZXJ2ZXI6IFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIvNi4xJiN4ZDsKLUV4cGlyZXM6IFRodSwgMDEgRGVjIDE5OTQgMTY6MDA6MDAgR01UJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlPSZxdW90O3NldC1jb29raWUsIHNldC1jb29raWUyJnF1b3Q7JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NPQVAxMi9TaW1wbGVMb2cvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjEyZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIG5vIHNlY3VyaXR5LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgCTxhc3NlcnRpb24gaWQ9IkJQMTIwMSIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDE2MDAiIHRhZElEPSJBUDEwIi8+Ci0JCi0JPGFzc2VydGlvbiBpZD0iQlAxMjAxIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTYwMCIgdGFkSUQ9IkFQMTAiLz4KLQkKLQk8YXNzZXJ0aW9uIGlkPSJBUDE5NDUiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iU1NCUDUxMDEiIHRhZElEPSJBUDEwIi8+Ci0KLQk8YXNzZXJ0aW9uIGlkPSJBUDE5NDUiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iU1NCUDUxMDEiIHRhZElEPSJBUDEwIi8+Ci0JCi0KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vRW5jcnlwdGlvbi53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9FbmNyeXB0aW9uL0VuY3J5cHRpb24ud3NpbXNnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTg2MDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vRW5jcnlwdGlvbi53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDctMDEtMTZUMTI6MTU6NTguMzI1IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSJwd2kzMmRldi0yMDA2MTAwMmEgKFNSMykiLz4KLSAgICAgIDxvcGVyYXRpbmdTeXN0ZW0gbmFtZT0iV2luZG93cyBYUCIgdmVyc2lvbj0iNS4xIGJ1aWxkIDI2MDAgU2VydmljZSBQYWNrIDIiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC40LjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDctMDEtMTZUMTA6NDc6MzAuNjUzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0O3NvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyZxdW90OyB4bWxuczpzb2FwZW5jPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvJnF1b3Q7IHhtbG5zOnhzZD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyB4bWxuczp4c2k9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UmcXVvdDsgeG1sbnM6d3NhPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXImZ3Q7Jmx0O3dzc2U6U2VjdXJpdHkgc29hcGVudjptdXN0VW5kZXJzdGFuZD0mcXVvdDsxJnF1b3Q7IHhtbG5zOndzc2U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXNlY2V4dC0xLjAueHNkJnF1b3Q7Jmd0OyZsdDtFbmNyeXB0ZWRLZXkgeG1sbnM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJnF1b3Q7Jmd0OyZsdDtFbmNyeXB0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNyc2EtMV81JnF1b3Q7LyZndDsmbHQ7ZHM6S2V5SW5mbyB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDt3c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0O3dzc2U6S2V5SWRlbnRpZmllciBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDlTdWJqZWN0S2V5SWRlbnRpZmllciZxdW90OyZndDsvNjJ3WE9iRUQ3ejZjMXlYN1Frdk4xdGhRZFk9Jmx0Oy93c3NlOktleUlkZW50aWZpZXImZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDtDaXBoZXJEYXRhJmd0OyZsdDtDaXBoZXJWYWx1ZSZndDtqcWRvZUtFS0txWGdRbnZXekRPL1d5SFBiMzVVWVdSenp3eVhBdlNIRllUaGczTzhZTTdIYmZZRjVKVUF2ODliaWk4SHVULzUyb0VYUnZMT2RBRklQVWxZRTBuUlNIK0pDYi90aW4rM1hEbHFtMEhTYi9wanp4S0cwNzRsbGNIZnR2Unpoc0oyUitDU3pYaTlwQ294R1ZUYkxSOU1oY3NXeDFpL1Z2RFBMWkU9Jmx0Oy9DaXBoZXJWYWx1ZSZndDsmbHQ7L0NpcGhlckRhdGEmZ3Q7Jmx0O1JlZmVyZW5jZUxpc3QmZ3Q7Jmx0O0RhdGFSZWZlcmVuY2UgVVJJPSZxdW90OyN3c3NlY3VyaXR5X2VuY3J5cHRpb25faWRfMCZxdW90Oy8mZ3Q7Jmx0Oy9SZWZlcmVuY2VMaXN0Jmd0OyZsdDsvRW5jcnlwdGVkS2V5Jmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6OTA4Mi9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2luY3JlbWVudCZsdDsvd3NhOkFjdGlvbiZndDsmbHQ7d3NhOk1lc3NhZ2VJRCZndDt1dWlkOjJCOTc1N0NDLTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOk1lc3NhZ2VJRCZndDsmbHQ7L3NvYXBlbnY6SGVhZGVyJmd0OyZsdDtzb2FwZW52OkJvZHkmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzAmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O3ZkVTQyc09vNi9XdjFWM3JvTUlWcGJKdXZnc0lFeDZtT3dsTldEcnI4amdrS3Y2NVZCQ3YyV0lNQVN3SFpWTFpaQXFKNHpnaUVWOXJwQ1hzN1FqKzhHTWZtVlI5VlpZdktLNWo1SEV2MXhiekIwSFBPc2E1QkE9PSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDsvRW5jcnlwdGVkRGF0YSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4Mjwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMTg3MSYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDE1OjQ3OjMwIEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDEwOjQ3OjMxLjA3NFoiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7RW5jcnlwdGVkS2V5IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLTFfNSZxdW90Oy8mZ3Q7Jmx0O2RzOktleUluZm8geG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOktleUlkZW50aWZpZXIgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5U3ViamVjdEtleUlkZW50aWZpZXImcXVvdDsmZ3Q7dHlCVTNxUXVmWVo3MXRKQVU3Z1ZJcWdST3VRPSZsdDsvd3NzZTpLZXlJZGVudGlmaWVyJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7Q2lwaGVyRGF0YSZndDsmbHQ7Q2lwaGVyVmFsdWUmZ3Q7UFZVTzBhZmRBdU9ZRlAxbk12ZXpQNlVxWTRySW84M3hQR0o0clcrczdOa1BPSGRFckQvdG1idGJHOHVYQXllVDRpTFhNL0syK2ZTeWxuaThHRmlKWmt4b3owOGtNRWQxOS82YWVhZmJBMGl6VTlEVkFVS1JNL2VoQ2cyS0NZaTJ3WGhRYWpZZmtRdUZNR3VtQTlWS1Znclk3TmR1N2YvWWMvcG1JV3RRL3NvPSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDtSZWZlcmVuY2VMaXN0Jmd0OyZsdDtEYXRhUmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzEmcXVvdDsvJmd0OyZsdDsvUmVmZXJlbmNlTGlzdCZndDsmbHQ7L0VuY3J5cHRlZEtleSZndDsmbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7Jmx0O3dzYTpUbyZndDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcvYW5vbnltb3VzJmx0Oy93c2E6VG8mZ3Q7Jmx0O3dzYTpBY3Rpb24mZ3Q7aHR0cDovL21haW4vV2ViU2VydmljZS9pbmNyZW1lbnRSZXNwb25zZSZsdDsvd3NhOkFjdGlvbiZndDsmbHQ7d3NhOk1lc3NhZ2VJRCZndDt1dWlkOjJCOTc3Njc4LTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOk1lc3NhZ2VJRCZndDsmbHQ7d3NhOlJlbGF0ZXNUbyZndDt1dWlkOjJCOTc1N0NDLTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOlJlbGF0ZXNUbyZndDsmbHQ7L3NvYXBlbnY6SGVhZGVyJmd0OyZsdDtzb2FwZW52OkJvZHkmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzEmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O1JEU1M5THBrcEl1NWxXT1pyK2hmc0V6Tm91bGpENi9OUklmc1lQSDBYQ3R3cG9tNGFuL2daUzF2bDV1OXI1RFpVdXErV3BTSk9wZThOczltcVpsakNGSnZWbU1MR2Ira0MzaWc3akVKQ3ZicWM3OHFESVFDbWdMUE9yY2wxUTBaU2xoMjVBeDczZGU0SFdXT1BKUWpLUEhaWW9wY1U4TUsmbHQ7L0NpcGhlclZhbHVlJmd0OyZsdDsvQ2lwaGVyRGF0YSZndDsmbHQ7L0VuY3J5cHRlZERhdGEmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgmI3hkOwotQ29udGVudC1MYW5ndWFnZTogZW4tVVMmI3hkOwotQ29udGVudC1MZW5ndGg6IDE5OTQmI3hkOwotRGF0ZTogVHVlLCAxNiBKYW4gMjAwNyAxNTo0NzozMCBHTVQmI3hkOwotU2VydmVyOiBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyLzYuMSYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPC9sb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9FbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTk1ODA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIGVuY3J5cHRpb24uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L05vU2VjdXJpdHkud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvTm9TZWN1cml0eS9Ob1NlY3VyaXR5LndzaW1zZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjOTJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L05vU2VjdXJpdHkud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjE0OjA2LjAwNSIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0icHdpMzJkZXYtMjAwNjEwMDJhIChTUjMpIi8+Ci0gICAgICA8b3BlcmF0aW5nU3lzdGVtIG5hbWU9IldpbmRvd3MgWFAiIHZlcnNpb249IjUuMSBidWlsZCAyNjAwIFNlcnZpY2UgUGFjayAyIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuNC42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjEzOjUyLjgzNloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL2xvY2FsaG9zdDo5MDgyL1dlYlByb2plY3ROb1NlY3VyaXR5L3NlcnZpY2VzL1dlYlNlcnZpY2UmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtpbmNyZW1lbnQmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDMwMUVBNi0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtwNjE5OmluY3JlbWVudCB4bWxuczpwNjE5PSZxdW90O2h0dHA6Ly9tYWluJnF1b3Q7Jmd0OyZsdDt2YWx1ZSZndDsxJmx0Oy92YWx1ZSZndDsmbHQ7L3A2MTk6aW5jcmVtZW50Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPlBPU1QgL1dlYlByb2plY3ROb1NlY3VyaXR5L3NlcnZpY2VzL1dlYlNlcnZpY2UgSFRUUC8xLjEmI3hkOwotSG9zdDogbG9jYWxob3N0OjkwODAmI3hkOwotQWNjZXB0OiBhcHBsaWNhdGlvbi9zb2FwK3htbCxtdWx0aXBhcnQvcmVsYXRlZCx0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogSUJNIFdlYlNlcnZpY2VzLzEuMCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90O2luY3JlbWVudCZxdW90OyYjeGQ7Ci1Db25uZWN0aW9uOiBLZWVwLUFsaXZlJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgmI3hkOwotQ29udGVudC1MZW5ndGg6IDYyMiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjEzOjUyIEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjEzOjUyLjk3NloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91cyZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2h0dHA6Ly9tYWluL1dlYlNlcnZpY2UvaW5jcmVtZW50UmVzcG9uc2UmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDMwMUY1MC0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0O3dzYTpSZWxhdGVzVG8mZ3Q7dXVpZDoyRDMwMUVBNi0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpSZWxhdGVzVG8mZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtwNjE5OmluY3JlbWVudFJlc3BvbnNlIHhtbG5zOnA2MTk9JnF1b3Q7aHR0cDovL21haW4mcXVvdDsmZ3Q7Jmx0O2luY3JlbWVudFJldHVybiZndDsyJmx0Oy9pbmNyZW1lbnRSZXR1cm4mZ3Q7Jmx0Oy9wNjE5OmluY3JlbWVudFJlc3BvbnNlJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPkhUVFAvMS4xIDIwMCBPSyYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUNvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTJiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiA3NDUmI3hkOwotRGF0ZTogVHVlLCAxNiBKYW4gMjAwNyAyMzoxMzo1MiBHTVQmI3hkOwotU2VydmVyOiBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyLzYuMSYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPC9sb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL05vU2VjdXJpdHkvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmVmZGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL05vU2VjdXJpdHkvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIG5vIHNlY3VyaXR5LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlL1NpZ25hdHVyZS53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvU2lnbmF0dXJlLndzaW1zZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkMDVlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvU2lnbmF0dXJlLndzaW1zZworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bG9nIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODowODozOC41MjQiCi0gICAgeG1sbnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iCi0gICAgeG1sbnM6d3NpLW1vbkNvbmZpZz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb25pdG9yIHZlcnNpb249IjEuMCIgcmVsZWFzZURhdGU9IjIwMDMtMDMtMjAiPgotICAgIDxpbXBsZW1lbnRlciBuYW1lPSJJQk0iIGxvY2F0aW9uPSIiLz4KLSAgICA8ZW52aXJvbm1lbnQ+Ci0gICAgICA8cnVudGltZSBuYW1lPSJKYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24iIHZlcnNpb249InB3aTMyZGV2LTIwMDYxMDAyYSAoU1IzKSIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJXaW5kb3dzIFhQIiB2ZXJzaW9uPSI1LjEgYnVpbGQgMjYwMCBTZXJ2aWNlIFBhY2sgMiIvPgotICAgICAgPHhtbFBhcnNlciBuYW1lPSJBcGFjaGUgWGVyY2VzIiB2ZXJzaW9uPSJYTUw0SiA0LjQuNiIvPgotICAgIDwvZW52aXJvbm1lbnQ+Ci0gICAgPHdzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb21tZW50PkNvbW1lbnQ8L3dzaS1tb25Db25maWc6Y29tbWVudD4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0ZpbGUgcmVwbGFjZT0idHJ1ZSIgbG9jYXRpb249IlVSTCI+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzphZGRTdHlsZVNoZWV0IGhyZWY9Im51bGwiIHR5cGU9Im51bGwiIC8+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmxvZ0ZpbGU+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj42MDA8L3dzaS1tb25Db25maWc6bG9nRHVyYXRpb24+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Mzwvd3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICAgIDwvd3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICA8L3dzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgPC9tb25pdG9yPgotCi08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMSIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlcXVlc3QiIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODowODoyNi4wMDZaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnNvYXBlbmM9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyB4bWxuczp3c2E9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nJnF1b3Q7Jmd0OyZsdDtzb2FwZW52OkhlYWRlciZndDsmbHQ7d3NzZTpTZWN1cml0eSBzb2FwZW52Om11c3RVbmRlcnN0YW5kPSZxdW90OzEmcXVvdDsgeG1sbnM6d3NzZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiBFbmNvZGluZ1R5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wI0Jhc2U2NEJpbmFyeSZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsgd3N1OklkPSZxdW90O3g1MDlic3RfMTYmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7TUlJRFFUQ0NBcXFnQXdJQkFnSUNBUVF3RFFZSktvWklodmNOQVFFRkJRQXdUakVMTUFrR0ExVUVCaE1DU2xBeEVUQVBCZ05WQkFnVENFdGhibUZuWVhkaE1Rd3dDZ1lEVlFRS0V3TkpRazB4RERBS0JnTlZCQXNUQTFSU1RERVFNQTRHQTFVRUF4TUhTVzUwSUVOQk1qQWVGdzB3TVRFd01ERXdPVFUwTURaYUZ3MHhNVEV3TURFd09UVTBNRFphTUZReEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVNTUFvR0ExVUVDaE1EU1VKTk1Rd3dDZ1lEVlFRTEV3TlVVa3d4RmpBVUJnTlZCQU1URFZOUFFWQlNaWEYxWlhOMFpYSXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTXkzUGZaMW1QaHJFc0J2WWlPdUlsUFYzVWlzNVl5NmhteG8yWXdZQzJuTkRCUHpLc2xXVWkvUStmSytETmRZNktFSG11RHJjVmNFbWE0OEo5WDFhNWF2Umxrc1FmS3B0S29WbjRlQnlzMmkvd2t3eXpRaERhRmppNzkvTXZuVFJXOEVWeTk5Rk5LdzRQRm5oT29lMXRsRGNOQnVJSC9mSXVHT3o5RWxUVitmQWdNQkFBR2pnZ0VtTUlJQklqQUpCZ05WSFJNRUFqQUFNQXNHQTFVZER3UUVBd0lGNERBc0JnbGdoa2dCaHZoQ0FRMEVIeFlkVDNCbGJsTlRUQ0JIWlc1bGNtRjBaV1FnUTJWeWRHbG1hV05oZEdVd0hRWURWUjBPQkJZRUZJVzNGRDFjWGllNGo0encxZ0FwNGN1T0FaNGxNSUc2QmdOVkhTTUVnYkl3Z2ErQUZMMzVJTlU0K1dSeTA5dmFmOXpPc1A3UXZPOXZvWUdTcElHUE1JR01NUXN3Q1FZRFZRUUdFd0pLVURFUk1BOEdBMVVFQ0JNSVMyRnVZV2RoZDJFeER6QU5CZ05WQkFjVEJsbGhiV0YwYnpFTU1Bb0dBMVVFQ2hNRFNVSk5NUXd3Q2dZRFZRUUxFd05VVWt3eEdUQVhCZ05WQkFNVEVGTlBRVkFnTWk0eElGUmxjM1FnUTBFeElqQWdCZ2txaGtpRzl3MEJDUUVXRTIxaGNuVjVZVzFoUUdwd0xtbGliUzVqYjIyQ0FnRUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSGt0aGRHRGdDdmRJTDkvdlhVbzc0eHBmT1FkL3JyMW93Qm1NZGIxVFdkT3l6d2JPSEM3bGtVbG5LcmtJN1NvZndTTFNEVVA1NzFpaU1YVXgzdFJkbUFWQ29ETU1GdURYaDlWNzIxMmx1WGNjeDBzMVM1S04wRDN4Vzk3TExOZWdRQzAvYithRkQ4WEt3MlU1WnR3Ym5GVFJnczA5N2RtejA5Um9zREtrTGxNJmx0Oy93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4mZ3Q7Jmx0O2RzOlNpZ25hdHVyZSB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDtkczpTaWduZWRJbmZvJmd0OyZsdDtkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3NzZSBkcyAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QmZ3Q7Jmx0O2RzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJnF1b3Q7LyZndDsmbHQ7ZHM6UmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMTUmcXVvdDsmZ3Q7Jmx0O2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOlRyYW5zZm9ybSBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzdSBwNjE5ICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6VHJhbnNmb3JtJmd0OyZsdDsvZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOkRpZ2VzdFZhbHVlJmd0O2RITkNpRWNxeFhZU0RyYkJrM2FoQ2F0endLZz0mbHQ7L2RzOkRpZ2VzdFZhbHVlJmd0OyZsdDsvZHM6UmVmZXJlbmNlJmd0OyZsdDsvZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7TzZtaVE5bDZhbVduYVdpNVZXeG9nd3k2R0pLTVN1ZG1oczQxNy9xR085eVp2QXRjR3hwQUhJckVPV3pFL010L3BGTUgzbFVLbFJXMTNLdkdsbVJVdU1xTXJka3BFaEQ1dGdDUVpBclQwWFdFYVVaZWsrTW1tZk1oQ25COGFBbEVwVElhUmNXcC8wUm5OZEpYb3preWpib1Q3b3VVU0lKTi9LdG1CaE1XbGtnPSZsdDsvZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7Jmx0O2RzOktleUluZm8mZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpSZWZlcmVuY2UgVVJJPSZxdW90OyN4NTA5YnN0XzE2JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90Oy8mZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDsvZHM6U2lnbmF0dXJlJmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6OTA4Mi9XZWJQcm9qZWN0V2l0aFNpZ25hdHVyZS9zZXJ2aWNlcy9XZWJTZXJ2aWNlJmx0Oy93c2E6VG8mZ3Q7Jmx0O3dzYTpBY3Rpb24mZ3Q7aW5jcmVtZW50Jmx0Oy93c2E6QWN0aW9uJmd0OyZsdDt3c2E6TWVzc2FnZUlEJmd0O3V1aWQ6MkQyQjIxQkMtMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6TWVzc2FnZUlEJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSB3c3U6SWQ9JnF1b3Q7d3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMTUmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3A2MTk6aW5jcmVtZW50IHhtbG5zOnA2MTk9JnF1b3Q7aHR0cDovL21haW4mcXVvdDsmZ3Q7Jmx0O3ZhbHVlJmd0OzEmbHQ7L3ZhbHVlJmd0OyZsdDsvcDYxOTppbmNyZW1lbnQmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODA8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+UE9TVCAvV2ViUHJvamVjdFdpdGhTaWduYXR1cmUvc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzY3MiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjA4OjI1IEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjA4OjI2LjEyNloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7d3NzZTpCaW5hcnlTZWN1cml0eVRva2VuIEVuY29kaW5nVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAjQmFzZTY0QmluYXJ5JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90OyB3c3U6SWQ9JnF1b3Q7eDUwOWJzdF8xOCZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDtNSUlEUURDQ0FxbWdBd0lCQWdJQ0FRVXdEUVlKS29aSWh2Y05BUUVGQlFBd1RqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQWdUQ0V0aGJtRm5ZWGRoTVF3d0NnWURWUVFLRXdOSlFrMHhEREFLQmdOVkJBc1RBMVJTVERFUU1BNEdBMVVFQXhNSFNXNTBJRU5CTWpBZUZ3MHdNVEV3TURFeE1EQXdNemxhRncweE1URXdNREV4TURBd016bGFNRk14Q3pBSkJnTlZCQVlUQWtwUU1SRXdEd1lEVlFRSUV3aExZVzVoWjJGM1lURU1NQW9HQTFVRUNoTURTVUpOTVF3d0NnWURWUVFMRXdOVVVrd3hGVEFUQmdOVkJBTVRERk5QUVZCUWNtOTJhV1JsY2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXJhYWtOSjFKemtQVXV2UGRYUnZQT09DbDEybkJ3bXF2dDY1ZGsveCtRenh4YXJETndIK2VXUmJMeXlLY3JBeWQwWEdWK1pidmo2VjNPOURTVkNaVUNKdHR3NmJicXFlWWh3QVAzVjhzMjRzSUQ3N3RrM2dPaFVURUdZeHNsalgyb3JMMjZTTHFGSk1ydm52azJGUlMybXJka1pFQlVHOTdtRDRRV2NsbjRkMENBd0VBQWFPQ0FTWXdnZ0VpTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQ3dHQ1dDR1NBR0crRUlCRFFRZkZoMVBjR1Z1VTFOTUlFZGxibVZ5WVhSbFpDQkRaWEowYVdacFkyRjBaVEFkQmdOVkhRNEVGZ1FVbFhTc3JWUmZaT0xHZEpkakVJd1RidVNUZTRVd2dib0dBMVVkSXdTQnNqQ0JyNEFVdmZrZzFUajVaSExUMjlwLzNNNncvdEM4NzIraGdaS2tnWTh3Z1l3eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVQTUEwR0ExVUVCeE1HV1dGdFlYUnZNUXd3Q2dZRFZRUUtFd05KUWsweEREQUtCZ05WQkFzVEExUlNUREVaTUJjR0ExVUVBeE1RVTA5QlVDQXlMakVnVkdWemRDQkRRVEVpTUNBR0NTcUdTSWIzRFFFSkFSWVRiV0Z5ZFhsaGJXRkFhbkF1YVdKdExtTnZiWUlDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVhFN21FMVJQYjNsWUFZSkZ6QmIzVkFIdmtDV2EvSFF0Q09aZHluaUNIcDNNSjlFYk5UcStRcE9IVjYwWUU4dTArNVNlakN6RlNPSE9weUJnTFBqV296OEpYUW5qVjdWY0FiVGdsdytab09TWXk2NHJmaFJkcjlnaVNzNDdGNEQ2d29Qc0FkMnViZy9ZaE1hWExUU3lHeFBkVjNWcVFzdXR1U2dEVURvcVdDQT0mbHQ7L3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiZndDsmbHQ7ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMmcXVvdDsmZ3Q7Jmx0O2RzOlNpZ25lZEluZm8mZ3Q7Jmx0O2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90OyZndDsmbHQ7ZWM6SW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0PSZxdW90O3hzaSB4c2Qgd3NhIHNvYXBlbnYgc29hcGVuYyB3c3NlIGRzICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCZndDsmbHQ7ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjcnNhLXNoYTEmcXVvdDsvJmd0OyZsdDtkczpSZWZlcmVuY2UgVVJJPSZxdW90OyN3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xNyZxdW90OyZndDsmbHQ7ZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3N1IHA2MTkgJnF1b3Q7IHhtbG5zOmVjPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90Oy8mZ3Q7Jmx0Oy9kczpUcmFuc2Zvcm0mZ3Q7Jmx0Oy9kczpUcmFuc2Zvcm1zJmd0OyZsdDtkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJnF1b3Q7LyZndDsmbHQ7ZHM6RGlnZXN0VmFsdWUmZ3Q7dG9IRDI1bmcrTFU0L1RKVm5YU3c0cXFZZk9nPSZsdDsvZHM6RGlnZXN0VmFsdWUmZ3Q7Jmx0Oy9kczpSZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpTaWduZWRJbmZvJmd0OyZsdDtkczpTaWduYXR1cmVWYWx1ZSZndDtrNlYwSjNyVmFJTjV6a3JrbE5ObHpBc2xMZGJJNHBJSWJCWGg0TDhvaDQ3N1VScElXOWsxUXAzY2NhYUdFb0phemVvZ3lxOFlxV0dsaUpEMGY1cWZaejdvQnE2QlJpMkp4QjYzRXoxSXhmWG0wdUJaUk5SR3g5SVZwZEEweTRpVnlGaUFnVVI1ZTdjSlR5L1h1bjd0THFtTjNYckdIMGR2ZHFGVE9LemkvV3M9Jmx0Oy9kczpTaWduYXR1cmVWYWx1ZSZndDsmbHQ7ZHM6S2V5SW5mbyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOlJlZmVyZW5jZSBVUkk9JnF1b3Q7I3g1MDlic3RfMTgmcXVvdDsgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5JnF1b3Q7LyZndDsmbHQ7L3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7L2RzOktleUluZm8mZ3Q7Jmx0Oy9kczpTaWduYXR1cmUmZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5Jmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91cyZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2h0dHA6Ly9tYWluL1dlYlNlcnZpY2UvaW5jcmVtZW50UmVzcG9uc2UmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDJCMjI3QS0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0O3dzYTpSZWxhdGVzVG8mZ3Q7dXVpZDoyRDJCMjFCQy0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpSZWxhdGVzVG8mZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5IHdzdTpJZD0mcXVvdDt3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xNyZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDsmbHQ7cDYxOTppbmNyZW1lbnRSZXNwb25zZSB4bWxuczpwNjE5PSZxdW90O2h0dHA6Ly9tYWluJnF1b3Q7Jmd0OyZsdDtpbmNyZW1lbnRSZXR1cm4mZ3Q7MiZsdDsvaW5jcmVtZW50UmV0dXJuJmd0OyZsdDsvcDYxOTppbmNyZW1lbnRSZXNwb25zZSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MjwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5IVFRQLzEuMSAyMDAgT0smI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxhbmd1YWdlOiBlbi1VUyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzc5MiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjA4OjI1IEdNVCYjeGQ7Ci1TZXJ2ZXI6IFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIvNi4xJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDhiODhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iRW5jcnlwdGlvbiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgYSBtZXNzYWdlIHdpdGggc2lnbmF0dXJlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzaW1zZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZUFuZEVuY3J5cHRpb24vU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTYzMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzaW1zZworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bG9nIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODoyMDowOS44NzgiCi0gICAgeG1sbnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iCi0gICAgeG1sbnM6d3NpLW1vbkNvbmZpZz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb25pdG9yIHZlcnNpb249IjEuMCIgcmVsZWFzZURhdGU9IjIwMDMtMDMtMjAiPgotICAgIDxpbXBsZW1lbnRlciBuYW1lPSJJQk0iIGxvY2F0aW9uPSIiLz4KLSAgICA8ZW52aXJvbm1lbnQ+Ci0gICAgICA8cnVudGltZSBuYW1lPSJKYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24iIHZlcnNpb249InB3aTMyZGV2LTIwMDYxMDAyYSAoU1IzKSIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJXaW5kb3dzIFhQIiB2ZXJzaW9uPSI1LjEgYnVpbGQgMjYwMCBTZXJ2aWNlIFBhY2sgMiIvPgotICAgICAgPHhtbFBhcnNlciBuYW1lPSJBcGFjaGUgWGVyY2VzIiB2ZXJzaW9uPSJYTUw0SiA0LjQuNiIvPgotICAgIDwvZW52aXJvbm1lbnQ+Ci0gICAgPHdzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb21tZW50PkNvbW1lbnQ8L3dzaS1tb25Db25maWc6Y29tbWVudD4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0ZpbGUgcmVwbGFjZT0idHJ1ZSIgbG9jYXRpb249IlVSTCI+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzphZGRTdHlsZVNoZWV0IGhyZWY9Im51bGwiIHR5cGU9Im51bGwiIC8+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmxvZ0ZpbGU+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj42MDA8L3dzaS1tb25Db25maWc6bG9nRHVyYXRpb24+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Mzwvd3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICAgIDwvd3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICA8L3dzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgPC9tb25pdG9yPgotCi08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMSIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlcXVlc3QiIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODoxOTo1OC4wNjFaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnNvYXBlbmM9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyB4bWxuczp3c2E9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nJnF1b3Q7Jmd0OyZsdDtzb2FwZW52OkhlYWRlciZndDsmbHQ7d3NzZTpTZWN1cml0eSBzb2FwZW52Om11c3RVbmRlcnN0YW5kPSZxdW90OzEmcXVvdDsgeG1sbnM6d3NzZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiBFbmNvZGluZ1R5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wI0Jhc2U2NEJpbmFyeSZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsgd3N1OklkPSZxdW90O3g1MDlic3RfMjAmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7TUlJRFFUQ0NBcXFnQXdJQkFnSUNBUVF3RFFZSktvWklodmNOQVFFRkJRQXdUakVMTUFrR0ExVUVCaE1DU2xBeEVUQVBCZ05WQkFnVENFdGhibUZuWVhkaE1Rd3dDZ1lEVlFRS0V3TkpRazB4RERBS0JnTlZCQXNUQTFSU1RERVFNQTRHQTFVRUF4TUhTVzUwSUVOQk1qQWVGdzB3TVRFd01ERXdPVFUwTURaYUZ3MHhNVEV3TURFd09UVTBNRFphTUZReEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVNTUFvR0ExVUVDaE1EU1VKTk1Rd3dDZ1lEVlFRTEV3TlVVa3d4RmpBVUJnTlZCQU1URFZOUFFWQlNaWEYxWlhOMFpYSXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTXkzUGZaMW1QaHJFc0J2WWlPdUlsUFYzVWlzNVl5NmhteG8yWXdZQzJuTkRCUHpLc2xXVWkvUStmSytETmRZNktFSG11RHJjVmNFbWE0OEo5WDFhNWF2Umxrc1FmS3B0S29WbjRlQnlzMmkvd2t3eXpRaERhRmppNzkvTXZuVFJXOEVWeTk5Rk5LdzRQRm5oT29lMXRsRGNOQnVJSC9mSXVHT3o5RWxUVitmQWdNQkFBR2pnZ0VtTUlJQklqQUpCZ05WSFJNRUFqQUFNQXNHQTFVZER3UUVBd0lGNERBc0JnbGdoa2dCaHZoQ0FRMEVIeFlkVDNCbGJsTlRUQ0JIWlc1bGNtRjBaV1FnUTJWeWRHbG1hV05oZEdVd0hRWURWUjBPQkJZRUZJVzNGRDFjWGllNGo0encxZ0FwNGN1T0FaNGxNSUc2QmdOVkhTTUVnYkl3Z2ErQUZMMzVJTlU0K1dSeTA5dmFmOXpPc1A3UXZPOXZvWUdTcElHUE1JR01NUXN3Q1FZRFZRUUdFd0pLVURFUk1BOEdBMVVFQ0JNSVMyRnVZV2RoZDJFeER6QU5CZ05WQkFjVEJsbGhiV0YwYnpFTU1Bb0dBMVVFQ2hNRFNVSk5NUXd3Q2dZRFZRUUxFd05VVWt3eEdUQVhCZ05WQkFNVEVGTlBRVkFnTWk0eElGUmxjM1FnUTBFeElqQWdCZ2txaGtpRzl3MEJDUUVXRTIxaGNuVjVZVzFoUUdwd0xtbGliUzVqYjIyQ0FnRUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSGt0aGRHRGdDdmRJTDkvdlhVbzc0eHBmT1FkL3JyMW93Qm1NZGIxVFdkT3l6d2JPSEM3bGtVbG5LcmtJN1NvZndTTFNEVVA1NzFpaU1YVXgzdFJkbUFWQ29ETU1GdURYaDlWNzIxMmx1WGNjeDBzMVM1S04wRDN4Vzk3TExOZWdRQzAvYithRkQ4WEt3MlU1WnR3Ym5GVFJnczA5N2RtejA5Um9zREtrTGxNJmx0Oy93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4mZ3Q7Jmx0O0VuY3J5cHRlZEtleSB4bWxucz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3JzYS0xXzUmcXVvdDsvJmd0OyZsdDtkczpLZXlJbmZvIHhtbG5zOmRzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMmcXVvdDsmZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpLZXlJZGVudGlmaWVyIFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOVN1YmplY3RLZXlJZGVudGlmaWVyJnF1b3Q7Jmd0Oy82MndYT2JFRDd6NmMxeVg3UWt2TjF0aFFkWT0mbHQ7L3dzc2U6S2V5SWRlbnRpZmllciZndDsmbHQ7L3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7L2RzOktleUluZm8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O2d1dUFySWdLMjBaUWtsc05rY2oxWHphQ21TdGcrMHJ4NTl0ZXVEMnBFQVhlUnZLYkNUemtmZ2xSdlg4Q24vRGlUQllOZXhiTmh2T2xqWC9zdWU1VUtKQTVKc21oU0Nqc3NHZnN3SmpZWFpuUmNuY0F3Q1R4Zm90dElxYXdXUUYxNjVCYXo4N3VPUjB5WTdhR2ltT0hpcEU3U05rUjVsbC84QWhtd1Y1Z0dXaz0mbHQ7L0NpcGhlclZhbHVlJmd0OyZsdDsvQ2lwaGVyRGF0YSZndDsmbHQ7UmVmZXJlbmNlTGlzdCZndDsmbHQ7RGF0YVJlZmVyZW5jZSBVUkk9JnF1b3Q7I3dzc2VjdXJpdHlfZW5jcnlwdGlvbl9pZF8yMSZxdW90Oy8mZ3Q7Jmx0Oy9SZWZlcmVuY2VMaXN0Jmd0OyZsdDsvRW5jcnlwdGVkS2V5Jmd0OyZsdDtkczpTaWduYXR1cmUgeG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7ZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzc2UgZHMgJnF1b3Q7IHhtbG5zOmVjPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90Oy8mZ3Q7Jmx0Oy9kczpDYW5vbmljYWxpemF0aW9uTWV0aG9kJmd0OyZsdDtkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOlJlZmVyZW5jZSBVUkk9JnF1b3Q7I3dzc2VjdXJpdHlfc2lnbmF0dXJlX2lkXzE5JnF1b3Q7Jmd0OyZsdDtkczpUcmFuc2Zvcm1zJmd0OyZsdDtkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90OyZndDsmbHQ7ZWM6SW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0PSZxdW90O3hzaSB4c2Qgd3NhIHNvYXBlbnYgc29hcGVuYyB3c3UgcDYxOSAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOlRyYW5zZm9ybSZndDsmbHQ7L2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEmcXVvdDsvJmd0OyZsdDtkczpEaWdlc3RWYWx1ZSZndDtPejR6ZzFBUzlkeXBMUmt5bGxZOUlYTnRPQVU9Jmx0Oy9kczpEaWdlc3RWYWx1ZSZndDsmbHQ7L2RzOlJlZmVyZW5jZSZndDsmbHQ7L2RzOlNpZ25lZEluZm8mZ3Q7Jmx0O2RzOlNpZ25hdHVyZVZhbHVlJmd0O0dvUkIyZUNsSGo3a240VnN5QlFZV3ZlTUZseFFGazVhb1hFL1BXRnNCQ1ZtVEd6eVJ3K0lzWm1EeHlNUFAxRXZ0NW16SUlWc2FwdDVmakZYenE1bGtLSkVRcCt0OFR2ZFJXU0lLK1VCL2pYeHVVdGttdCtaU2VLV2pjZWNSdFRadGRHb0x5MEEvMDZ4aitiQVdWNGlHNmZmTHVQMjZZaEc4WXMrcUpCNFpHVT0mbHQ7L2RzOlNpZ25hdHVyZVZhbHVlJmd0OyZsdDtkczpLZXlJbmZvJmd0OyZsdDt3c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0O3dzc2U6UmVmZXJlbmNlIFVSST0mcXVvdDsjeDUwOWJzdF8yMCZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsvJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7L2RzOlNpZ25hdHVyZSZndDsmbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7Jmx0O3dzYTpUbyZndDtodHRwOi8vbG9jYWxob3N0OjkwODIvV2ViUHJvamVjdFdpdGhTaWduYXR1cmVBbmRFbmNyeXB0aW9uL3NlcnZpY2VzL1dlYlNlcnZpY2UmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtpbmNyZW1lbnQmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDM1QjEwOS0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5IHdzdTpJZD0mcXVvdDt3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xOSZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDsmbHQ7RW5jcnlwdGVkRGF0YSBJZD0mcXVvdDt3c3NlY3VyaXR5X2VuY3J5cHRpb25faWRfMjEmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O2RkQWt4dHlhdWZMTGMxM2VQZTF0RFNpQ1F6K2g1SEwyUU4wZ1Y2aGM2UjNpM1dxS281Z1FCendVOEpzWldicDl2UTFWTXJRWW1lMlRZSGpzektuY0NaenhJdlNiakxaN25NT3VXRkY3QWQ4cDY3Y1dtL21QSnc9PSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDsvRW5jcnlwdGVkRGF0YSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4Mjwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9XZWJQcm9qZWN0V2l0aFNpZ25hdHVyZUFuZEVuY3J5cHRpb24vc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogNDc3OSYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjE5OjU3IEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjE5OjU4LjI5MVoiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7d3NzZTpCaW5hcnlTZWN1cml0eVRva2VuIEVuY29kaW5nVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAjQmFzZTY0QmluYXJ5JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90OyB3c3U6SWQ9JnF1b3Q7eDUwOWJzdF8yMyZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDtNSUlEUURDQ0FxbWdBd0lCQWdJQ0FRVXdEUVlKS29aSWh2Y05BUUVGQlFBd1RqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQWdUQ0V0aGJtRm5ZWGRoTVF3d0NnWURWUVFLRXdOSlFrMHhEREFLQmdOVkJBc1RBMVJTVERFUU1BNEdBMVVFQXhNSFNXNTBJRU5CTWpBZUZ3MHdNVEV3TURFeE1EQXdNemxhRncweE1URXdNREV4TURBd016bGFNRk14Q3pBSkJnTlZCQVlUQWtwUU1SRXdEd1lEVlFRSUV3aExZVzVoWjJGM1lURU1NQW9HQTFVRUNoTURTVUpOTVF3d0NnWURWUVFMRXdOVVVrd3hGVEFUQmdOVkJBTVRERk5QUVZCUWNtOTJhV1JsY2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXJhYWtOSjFKemtQVXV2UGRYUnZQT09DbDEybkJ3bXF2dDY1ZGsveCtRenh4YXJETndIK2VXUmJMeXlLY3JBeWQwWEdWK1pidmo2VjNPOURTVkNaVUNKdHR3NmJicXFlWWh3QVAzVjhzMjRzSUQ3N3RrM2dPaFVURUdZeHNsalgyb3JMMjZTTHFGSk1ydm52azJGUlMybXJka1pFQlVHOTdtRDRRV2NsbjRkMENBd0VBQWFPQ0FTWXdnZ0VpTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQ3dHQ1dDR1NBR0crRUlCRFFRZkZoMVBjR1Z1VTFOTUlFZGxibVZ5WVhSbFpDQkRaWEowYVdacFkyRjBaVEFkQmdOVkhRNEVGZ1FVbFhTc3JWUmZaT0xHZEpkakVJd1RidVNUZTRVd2dib0dBMVVkSXdTQnNqQ0JyNEFVdmZrZzFUajVaSExUMjlwLzNNNncvdEM4NzIraGdaS2tnWTh3Z1l3eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVQTUEwR0ExVUVCeE1HV1dGdFlYUnZNUXd3Q2dZRFZRUUtFd05KUWsweEREQUtCZ05WQkFzVEExUlNUREVaTUJjR0ExVUVBeE1RVTA5QlVDQXlMakVnVkdWemRDQkRRVEVpTUNBR0NTcUdTSWIzRFFFSkFSWVRiV0Z5ZFhsaGJXRkFhbkF1YVdKdExtTnZiWUlDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVhFN21FMVJQYjNsWUFZSkZ6QmIzVkFIdmtDV2EvSFF0Q09aZHluaUNIcDNNSjlFYk5UcStRcE9IVjYwWUU4dTArNVNlakN6RlNPSE9weUJnTFBqV296OEpYUW5qVjdWY0FiVGdsdytab09TWXk2NHJmaFJkcjlnaVNzNDdGNEQ2d29Qc0FkMnViZy9ZaE1hWExUU3lHeFBkVjNWcVFzdXR1U2dEVURvcVdDQT0mbHQ7L3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiZndDsmbHQ7RW5jcnlwdGVkS2V5IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLTFfNSZxdW90Oy8mZ3Q7Jmx0O2RzOktleUluZm8geG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOktleUlkZW50aWZpZXIgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5U3ViamVjdEtleUlkZW50aWZpZXImcXVvdDsmZ3Q7dHlCVTNxUXVmWVo3MXRKQVU3Z1ZJcWdST3VRPSZsdDsvd3NzZTpLZXlJZGVudGlmaWVyJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7Q2lwaGVyRGF0YSZndDsmbHQ7Q2lwaGVyVmFsdWUmZ3Q7WTFuSi9jU0h6b1FSbkZROHh5MG9Zd01BWmUrVzJqYmttV0ZNcnFHUy85OEZReHBvbnVLOVRLVlFSYjdOVTFiTXdTb05ZTW1wTmpibjNPRm13UWdWWHhzeGdGdUpIU3c3VVlYZjJjU1djZHE5QUxYTVI3TzRNT0szMktPVjM4R2dtUTRGUkdod2pwWFRwUGptUkovT0s1ZktvTmJSdHdIMmo5ZWlhcmtZd01VPSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDtSZWZlcmVuY2VMaXN0Jmd0OyZsdDtEYXRhUmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzI0JnF1b3Q7LyZndDsmbHQ7L1JlZmVyZW5jZUxpc3QmZ3Q7Jmx0Oy9FbmNyeXB0ZWRLZXkmZ3Q7Jmx0O2RzOlNpZ25hdHVyZSB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDtkczpTaWduZWRJbmZvJmd0OyZsdDtkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3NzZSBkcyAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QmZ3Q7Jmx0O2RzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJnF1b3Q7LyZndDsmbHQ7ZHM6UmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMjImcXVvdDsmZ3Q7Jmx0O2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOlRyYW5zZm9ybSBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzdSBwNjE5ICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6VHJhbnNmb3JtJmd0OyZsdDsvZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOkRpZ2VzdFZhbHVlJmd0O1NydlZ3bEtVdzdoOWd3UVZnWnR3ekhCZGUzWT0mbHQ7L2RzOkRpZ2VzdFZhbHVlJmd0OyZsdDsvZHM6UmVmZXJlbmNlJmd0OyZsdDsvZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7clJ6V3NLRGgrRkR5Rzd4b3llZDdnVUJYYWlyV0cvbk5kdkxFUjR3NS9ZZllRQWNMRlZHTU5jMjRmbDFJc1Z6RXBaZkVyWmx1NGt3WnlIanB0R0VEVlI0Tmg0Y3IrWk9KWFZtcFZPdHhPdmJKTmw0cGpMVTEvTjN3bFF5WUlHMHFCckVtRklMczNSTFdrMStYZUUyTmxLVldBbEpDREdZbU5kRXJyclpoMGtFPSZsdDsvZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7Jmx0O2RzOktleUluZm8mZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpSZWZlcmVuY2UgVVJJPSZxdW90OyN4NTA5YnN0XzIzJnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90Oy8mZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDsvZHM6U2lnbmF0dXJlJmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZy9hbm9ueW1vdXMmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtodHRwOi8vbWFpbi9XZWJTZXJ2aWNlL2luY3JlbWVudFJlc3BvbnNlJmx0Oy93c2E6QWN0aW9uJmd0OyZsdDt3c2E6TWVzc2FnZUlEJmd0O3V1aWQ6MkQzNUIyM0YtMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6TWVzc2FnZUlEJmd0OyZsdDt3c2E6UmVsYXRlc1RvJmd0O3V1aWQ6MkQzNUIxMDktMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6UmVsYXRlc1RvJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSB3c3U6SWQ9JnF1b3Q7d3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMjImcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzI0JnF1b3Q7IFR5cGU9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjQ29udGVudCZxdW90OyB4bWxucz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMmcXVvdDsvJmd0OyZsdDtDaXBoZXJEYXRhJmd0OyZsdDtDaXBoZXJWYWx1ZSZndDs3WWVFSTlDTXRqMERqcEZMeXBqQk1weFJBZ2Rtbm5xM2Q4MzIwa0J2TWhyUXViL0FIeVB3NmsxV2FqYjhJUTVuR0JmTklyQzRtMEZlaHRaWFVFU1h5alBmYlNHRjdzY09qcjF3eHpONFZBUnovdFdudVhTeVpReDZMbUo3S29wTWVxdnltZFAwM2hpaHNpRVpGSzhTTEJJYUdjbWxtQUhpJmx0Oy9DaXBoZXJWYWx1ZSZndDsmbHQ7L0NpcGhlckRhdGEmZ3Q7Jmx0Oy9FbmNyeXB0ZWREYXRhJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPkhUVFAvMS4xIDIwMCBPSyYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUNvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTJiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiA0ODkwJiN4ZDsKLURhdGU6IFR1ZSwgMTYgSmFuIDIwMDcgMjM6MTk6NTcgR01UJiN4ZDsKLVNlcnZlcjogV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlci82LjEmI3hkOwotJiN4ZDsKLTwvaHR0cEhlYWRlcnM+Ci08L21lc3NhZ2VFbnRyeT4KLTwvbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MGNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJFbmNyeXB0aW9uIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBjb250YWlucyBhIG1lc3NhZ2Ugd2l0aCBzaWduYXR1cmUgYW5kIGVuY3J5cHRpb24uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTEvMTMwOS0xLndzaW1zZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS8xMzA5LTEud3NpbXNnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTkzNjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS8xMzA5LTEud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA2LTA0LTEzVDE4OjUyOjMyLjQ4OCIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0iMS40LjIiLz4KLSAgICAgIDxvcGVyYXRpbmdTeXN0ZW0gbmFtZT0iTGludXgiIHZlcnNpb249IjIuNi4xNS4xIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuMy42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA2LTA0LTEzVDE4OjUxOjMwLjE5M1oiPgotPG1lc3NhZ2VDb250ZW50PiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnhzZD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyB4bWxuczp4c2k9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7Y2Vsc2l1c1RvRmFyZW5oZWl0IHhtbG5zPSZxdW90O2h0dHA6Ly93dHAmcXVvdDsmZ3Q7Jmx0O2NlbHNpdXMmZ3Q7MzcuMCZsdDsvY2Vsc2l1cyZndDsmbHQ7L2NlbHNpdXNUb0ZhcmVuaGVpdCZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY2MTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMTMwOS0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBpcyBjb25mb3JtYW50IHRvIHJlcXVpcmVtZW50Ci0gICAgMTAxMS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi8xMzA5LTIud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTMwOS0yLzEzMDktMi53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmODIwYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTMwOS0yLzEzMDktMi53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXQgeG1sbnM9JnF1b3Q7aHR0cDovL3d0cCZxdW90OyZndDsmbHQ7Y2Vsc2l1cyZndDszNy4wJmx0Oy9jZWxzaXVzJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDtzb2FwZW52OmJhZENoaWxkLyZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmY5Yzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjEzMDktMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHdpdGggY2hpbGRyZW4gZm9sbG93aW5nIHRoZQotICAgIHNvYXA6Qm9keSBlbGVtZW50LCB0aHVzIGJyZWFraW5nIHJlcXVpcmVtZW50IDEwMTEuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS8xNjAwLTEud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTYwMC0xLzE2MDAtMS53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YWY2OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTYwMC0xLzE2MDAtMS53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXIgeG1sbnM6dGVzdD0mcXVvdDtodHRwOi8vd3RwL3Rlc3QxNjAwLTEmcXVvdDsmZ3Q7Jmx0O3Rlc3Q6dGVzdEVsZW1lbnQvJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7Y2Vsc2l1c1RvRmFyZW5oZWl0IHhtbG5zPSZxdW90O2h0dHA6Ly93dHAmcXVvdDsmZ3Q7Jmx0O2NlbHNpdXMmZ3Q7MzcuMCZsdDsvY2Vsc2l1cyZndDsmbHQ7L2NlbHNpdXNUb0ZhcmVuaGVpdCZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xNjAwLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTM2ZDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjE2MDAtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgYSBtZXNzYWdlIHdpdGggYQotICAgIGhlYWRlciBlbnRyeSB3aG9zZSBuYW1lc3BhY2UgaXMgZGVmaW5lZCBpbiB0aGUgc29hcDpoZWFkZXIgZWxlbWVudC4gIFRoaXMKLSAgICBpcyBjb25maXJtYW50IHRvIHJlcXVpcmVtZW50IDk5ODAgaW4gdGhlIEJhc2ljIFByb2ZpbGUgYnV0IGlzIGN1cnJlbnRseQotICAgIGZsYWdnZWQgYXMgYSBjb25mb3JtYW5jZSBlcnJvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni8xNDE5NjYud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnVnemlsbGEvMTQxOTY2LzE0MTk2Ni53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDVmYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnVnemlsbGEvMTQxOTY2LzE0MTk2Ni53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXQgeG1sbnM9JnF1b3Q7aHR0cDovL3d0cCZxdW90OyZndDsmbHQ7Y2Vsc2l1cyZndDszNy4wJmx0Oy9jZWxzaXVzJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDtzb2FwZW52OmJhZENoaWxkLyZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMSYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9idWd6aWxsYS8xNDE5NjYvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTI4MWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjE0MTk2NiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgb25seSBhIHJlcXVlc3QgYW5kCi0gICAgYnJlYWtzIHJlcXVpcmVtZW50IDEwMTEuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL0hlbGxvU2VydmljZV9zY2hlbWExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL0hlbGxvU2VydmljZV9zY2hlbWExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0YzllYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NPQVAxMi9IZWxsb1NlcnZpY2Vfc2NoZW1hMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3QvIiB2ZXJzaW9uPSIxLjAiPgotCi0gIDx4czplbGVtZW50IHhtbG5zOm5zMT0iaHR0cDovL3Rlc3QvIiBuYW1lPSJoZWxsbyIgdHlwZT0ibnMxOmhlbGxvIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImhlbGxvIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImFyZzAiIHR5cGU9InhzOnN0cmluZyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmVsZW1lbnQgeG1sbnM6bnMyPSJodHRwOi8vdGVzdC8iIG5hbWU9ImhlbGxvUmVzcG9uc2UiIHR5cGU9Im5zMjpoZWxsb1Jlc3BvbnNlIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImhlbGxvUmVzcG9uc2UiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NPQVAxMi9TaW1wbGVMb2cud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL1NpbXBsZUxvZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWU4MzMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL1NpbXBsZUxvZy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXAxMj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZXN0LyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSGVsbG9TZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LyI+Ci0gIDx0eXBlcz4KLSAgICA8eHNkOnNjaGVtYT4KLSAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3QvIiBzY2hlbWFMb2NhdGlvbj0iSGVsbG9TZXJ2aWNlX3NjaGVtYTEueHNkIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3R5cGVzPgotICA8bWVzc2FnZSBuYW1lPSJoZWxsbyI+Ci0gICAgPHBhcnQgZWxlbWVudD0idG5zOmhlbGxvIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iaGVsbG9SZXNwb25zZSI+Ci0gICAgPHBhcnQgZWxlbWVudD0idG5zOmhlbGxvUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iSGVsbG8iPgotICAgIDxvcGVyYXRpb24gbmFtZT0iaGVsbG8iPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpoZWxsbyIvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6aGVsbG9SZXNwb25zZSIvPgotICAgIDwvb3BlcmF0aW9uPgotICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJIZWxsb1BvcnRCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG8iPgotICAgIDxzb2FwMTI6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3d3dy53My5vcmcvMjAwMy8wNS9zb2FwL2JpbmRpbmdzL0hUVFAvIi8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJoZWxsbyI+Ci0gICAgICA8c29hcDEyOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXAxMjpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwMTI6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotICA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkhlbGxvU2VydmljZSI+Ci0gICAgPHBvcnQgYmluZGluZz0idG5zOkhlbGxvUG9ydEJpbmRpbmciIG5hbWU9IkhlbGxvUG9ydCI+Ci0gICAgICA8c29hcDEyOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MS90ZDEyL0hlbGxvU2VydmljZSIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU2VjdXJlV1MvRW5jcnlwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9FbmNyeXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9FbmNyeXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM6aW1wbD0iaHR0cDovL21haW4iIHhtbG5zOmludGY9Imh0dHA6Ly9tYWluIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmV0dXJuIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50IiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlcXVlc3QiIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiLz4KLQotICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSIvPgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iV2ViU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOldlYlNlcnZpY2UiPgotIDx3c2F3OlVzaW5nQWRkcmVzc2luZyB3c2RsOnJlcXVpcmVkPSJmYWxzZSIgeG1sbnM6d3Nhdz0iaHR0cDovL3d3dy53My5vcmcvMjAwNi8wNS9hZGRyZXNzaW5nL3dzZGwiLz4KLQotICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJpbmNyZW1lbnQiLz4KLQotICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iV2ViU2VydmljZVNlcnZpY2UiPgotICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6V2ViU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1dlYlByb2plY3RXaXRoRW5jcmlwdGlvbi9zZXJ2aWNlcy9XZWJTZXJ2aWNlIi8+Ci0KLSAgICA8L3dzZGw6cG9ydD4KLQotICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9Ob1NlY3VyaXR5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL05vU2VjdXJpdHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL05vU2VjdXJpdHkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9tYWluIiB4bWxuczppbXBsPSJodHRwOi8vbWFpbiIgeG1sbnM6aW50Zj0iaHR0cDovL21haW4iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6d3NpPSJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzaWMvMS4xL3hzZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHdzZGw6dHlwZXM+Ci0gIDxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnRSZXR1cm4iIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50Ij4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgPC9zY2hlbWE+Ci0gPC93c2RsOnR5cGVzPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnQiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iV2ViU2VydmljZSI+Ci0gICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJpbmNyZW1lbnQiPgotICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImludGY6aW5jcmVtZW50UmVxdWVzdCIgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCIvPgotCi0gICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImludGY6aW5jcmVtZW50UmVzcG9uc2UiIG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIi8+Ci0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gIDwvd3NkbDpwb3J0VHlwZT4KLQotICAgPHdzZGw6YmluZGluZyBuYW1lPSJXZWJTZXJ2aWNlU29hcEJpbmRpbmciIHR5cGU9ImludGY6V2ViU2VydmljZSI+Ci0gPHdzYXc6VXNpbmdBZGRyZXNzaW5nIHdzZGw6cmVxdWlyZWQ9ImZhbHNlIiB4bWxuczp3c2F3PSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzA1L2FkZHJlc3Npbmcvd3NkbCIvPgotCi0gICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249ImluY3JlbWVudCIvPgotCi0gICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOmlucHV0PgotCi0gICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICA8L3dzZGw6b3V0cHV0PgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6YmluZGluZz4KLQotICAgPHdzZGw6c2VydmljZSBuYW1lPSJXZWJTZXJ2aWNlU2VydmljZSI+Ci0gICAgIDx3c2RsOnBvcnQgYmluZGluZz0iaW50ZjpXZWJTZXJ2aWNlU29hcEJpbmRpbmciIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwODAvV2ViUHJvamVjdFdpdGhFbmNyaXB0aW9uL3NlcnZpY2VzL1dlYlNlcnZpY2UiLz4KLQotICAgIDwvd3NkbDpwb3J0PgotCi0gIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL1NpZ25hdHVyZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL1NpZ25hdHVyZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zOmltcGw9Imh0dHA6Ly9tYWluIiB4bWxuczppbnRmPSJodHRwOi8vbWFpbiIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp3c2k9Imh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9iYXNpYy8xLjEveHNkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSA8d3NkbDp0eXBlcz4KLSAgPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9tYWluIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudFJldHVybiIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnQiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0idmFsdWUiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NjaGVtYT4KLSA8L3dzZGw6dHlwZXM+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50UmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ij4KLSAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbnRmOmluY3JlbWVudCIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0iaW50ZjppbmNyZW1lbnRSZXF1ZXN0IiBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ii8+Ci0KLSAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiLz4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOnBvcnRUeXBlPgotCi0gICA8d3NkbDpiaW5kaW5nIG5hbWU9IldlYlNlcnZpY2VTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpXZWJTZXJ2aWNlIj4KLSA8d3NhdzpVc2luZ0FkZHJlc3Npbmcgd3NkbDpyZXF1aXJlZD0iZmFsc2UiIHhtbG5zOndzYXc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMDUvYWRkcmVzc2luZy93c2RsIi8+Ci0KLSAgICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotCi0gICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJpbmNyZW1lbnQiPgotICAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaW5jcmVtZW50Ii8+Ci0KLSAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ij4KLSAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICA8L3dzZGw6aW5wdXQ+Ci0KLSAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gIDwvd3NkbDpiaW5kaW5nPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IldlYlNlcnZpY2VTZXJ2aWNlIj4KLSAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbnRmOldlYlNlcnZpY2VTb2FwQmluZGluZyIgbmFtZT0iV2ViU2VydmljZSI+Ci0gICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSIvPgotCi0gICAgPC93c2RsOnBvcnQ+Ci0KLSAgPC93c2RsOnNlcnZpY2U+Ci0KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM6aW1wbD0iaHR0cDovL21haW4iIHhtbG5zOmludGY9Imh0dHA6Ly9tYWluIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmV0dXJuIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50IiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlcXVlc3QiIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiLz4KLQotICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSIvPgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iV2ViU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOldlYlNlcnZpY2UiPgotIDx3c2F3OlVzaW5nQWRkcmVzc2luZyB3c2RsOnJlcXVpcmVkPSJmYWxzZSIgeG1sbnM6d3Nhdz0iaHR0cDovL3d3dy53My5vcmcvMjAwNi8wNS9hZGRyZXNzaW5nL3dzZGwiLz4KLQotICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJpbmNyZW1lbnQiLz4KLQotICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iV2ViU2VydmljZVNlcnZpY2UiPgotICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6V2ViU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1dlYlByb2plY3RXaXRoRW5jcmlwdGlvbi9zZXJ2aWNlcy9XZWJTZXJ2aWNlIi8+Ci0KLSAgICA8L3dzZGw6cG9ydD4KLQotICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9hcC8yOTQxLTEvMjk0MS0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS8yOTQxLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0ZTAwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS8yOTQxLTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmYXVsdE1lc3NhZ2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iZmF1bHQiIGVsZW1lbnQ9ImludGY6ZmF1bHQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiIG1lc3NhZ2U9ImludGY6ZmF1bHRNZXNzYWdlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZhdWx0IiBwYXJ0PSJmYXVsdCIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODM5NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9hcC8yOTQxLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjI5NDEtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgd2l0aCBhIHNvYXA6aGVhZGVyZmF1bHQgZWxlbWVudCB0aGF0Ci0gICAgc2hvdWxkIHBhc3MgdGVzdCBhc3NlcnRpb24gQlAyOTQxLgotICA8L2Rlc2NyaXB0aW9uPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xLzIwMTItMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTEvMjAxMi0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYjkyYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTEvMjAxMi0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVwb3J0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk5hbWUiIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6U3BlY2ltZW4iIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TG90IiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iU2FtcGxlTGlzdCI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIiByZWY9InRuczpSZXBvcnQiIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb3VudCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJMYXN0TW9kaWZpZWQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTG90IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNwZWNpbWVuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczpTYW1wbGVOYW1lIiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOkNvdW50IiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOkxhc3RNb2RpZmllZCIgLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIiByZWY9InRuczpTYW1wbGVQcm92aWRlciIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVOYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZVByb3ZpZGVyIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk5hbWUiIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TnVtYmVyIiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOlNhbXBsZUxpc3QiIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0KLQotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0U2FtcGxlUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ic2FtcGxlSWQiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0U2FtcGxlUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InJlcG9ydCIgZWxlbWVudD0idG5zOlNhbXBsZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2FtcGxlUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ2V0U2FtcGxlIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOmdldFNhbXBsZVJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlNhbXBsZUJpbmRpbmciIHR5cGU9InRuczpTYW1wbGVQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdldFNhbXBsZSI+Ci0JCQk8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2dldFNhbXBsZSIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlNhbXBsZVNlcnZpY2UiPgotCQk8d3NkbDpwb3J0IG5hbWU9IlNhbXBsZVBvcnQiIGJpbmRpbmc9InRuczpTYW1wbGVCaW5kaW5nIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5YjdiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTItMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgZmFpbHMgdGVzdCBhc3NlcnRpb24gQlAyMDEyLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMTIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMTIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvMjAxMi0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMi8yMDEyLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2MTA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMi8yMDEyLTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpQaG9uZU51bWJlciIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZThhZDVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMi0yIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBmYWlscyB0ZXN0IGFzc2VydGlvbiBCUDIwMTIuCi0gICAgCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTMtMS8yMDEzLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xLzIwMTMtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTkxMjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xLzIwMTMtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMzODhkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTMtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTMtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgdXNlZCBpbiB0aGUgV1MtSSAKLSAgICBpbnRlcm9wZXJhYmlsaXR5IGRlbW8uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMyIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMyIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMTIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMTIiIHRhZElEPSJBUDEwIi8+Ci0gICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xLzIwMTQtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTEvMjAxNC0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDAyNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTEvMjAxNC0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nSW4iPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ091dCI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciIC8+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVyczEiIHR5cGU9InM6c3RyaW5nIi8+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVyczIiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPHBvcnRUeXBlIG5hbWU9IkVjaG9Qb3J0VHlwZSI+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiBwYXJhbWV0ZXJPcmRlcj0icGFyYW1ldGVycyBwYXJhbWV0ZXJzMSBwYXJhbWV0ZXJzMiI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ0luIiAvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nT3V0IiAvPgotICAgIDwvb3BlcmF0aW9uPgotICAgPC9wb3J0VHlwZT4KLSAgPGJpbmRpbmcgbmFtZT0iRWNob0JpbmRpbmciIHR5cGU9InMwOkVjaG9Qb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9InJwYyIgLz4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9lY2hvU3RyaW5nIiBzdHlsZT0icnBjIiAvPgotICAgICAgPGlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIi8+Ci0gICAgICA8L2lucHV0PgotICAgICAgPG91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIgLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotIDwvYmluZGluZz4KLSAgPHNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotICAgIDxwb3J0IG5hbWU9IkVjaG9Qb3J0IiBiaW5kaW5nPSJzMDpFY2hvQmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY2NzVmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxNC0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgd3NkbDpvcGVyYXRpb24gCi0gICAgd2l0aCBhIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi8yMDE0LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0yLzIwMTQtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjUzMDY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0yLzIwMTQtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ0luIj4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdPdXQiPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIiAvPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMxIiB0eXBlPSJzOnN0cmluZyIvPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMyIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxwb3J0VHlwZSBuYW1lPSJFY2hvUG9ydFR5cGUiPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyIgcGFyYW1ldGVyT3JkZXI9InBhcmFtZXRlcnMgcGFyYW1ldGVyczEiPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdJbiIgLz4KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ091dCIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgIDwvcG9ydFR5cGU+Ci0gIDxiaW5kaW5nIG5hbWU9IkVjaG9CaW5kaW5nIiB0eXBlPSJzMDpFY2hvUG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJycGMiIC8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvZWNob1N0cmluZyIgc3R5bGU9InJwYyIgLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciIC8+Ci0gICAgICA8L291dHB1dD4KLSAgICA8L29wZXJhdGlvbj4KLSA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLSAgICA8cG9ydCBuYW1lPSJFY2hvUG9ydCIgYmluZGluZz0iczA6RWNob0JpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWI0MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTQtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIHdzZGw6b3BlcmF0aW9uIAotICAgIHdpdGggYSBwYXJhbWV0ZXJPcmRlciBhdHRyaWJ1dGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvMjAxNC0zLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMy8yMDE0LTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlNzkyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMy8yMDE0LTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCi0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzMSIgdHlwZT0iczpzdHJpbmciLz4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzMiIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzcyYzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxNC0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgd3NkbDpvcGVyYXRpb24gCi0gICAgd2l0aCBhIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE0IiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE0IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNy0xLzIwMTctMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvMjAxNy0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzVkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvMjAxNy0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9InJwYyIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZGE5NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE3LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIAotICAgIG11bHRpcGxlIHN0eWxlIHZhbHVlcyB3aXRoaW4gdGhlIHNhbWUgYmluZGluZy4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE3IiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE3IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNy0yLzIwMTctMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvMjAxNy0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiOTBlZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvMjAxNy0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2syIj4KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50IiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nMiIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vazIiPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9InJwYyIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNmUzMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTctMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyAKLSAgICBtdWx0aXBsZSBzdHlsZSB2YWx1ZXMgYnV0IGluIGRpZmZlcmVudCBiaW5kaW5ncy4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtMS8yMDE4LTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xLzIwMTgtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJhZjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xLzIwMTgtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDx0eXBlcy8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGY2NTM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE4LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudGF0aW9uCi0gICAgZWxlbWVudCBwcmVjZWRpbmcgdGhlIHR5cGVzIGVsZW1lbnQuIAotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMTgtMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOC0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0N2I5NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOC0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPGRvY3VtZW50YXRpb24+Ci0gIDwvZG9jdW1lbnRhdGlvbj4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgbG9jYXRpb249IjIwMThhLndzZGwiLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgbG9jYXRpb249IjIwMThiLndzZGwiLz4KLSAgPHR5cGVzLz4KLSAgCi0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMThhLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjZjNTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE4LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudGF0aW9uCi0gICAgZWxlbWVudCBhbmQgMiBpbXBvcnQgZWxlbWVudHMgcHJlY2VkaW5nIHRoZSB0eXBlcyBlbGVtZW50LiAKLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtMy8yMDE4LTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zLzIwMTgtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDBkODViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zLzIwMTgtMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTM0NjRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNC8yMDE4LTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMTgtNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDA1ODkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMTgtNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIGxvY2F0aW9uPSIyMDE4YS53c2RsIi8+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIGxvY2F0aW9uPSIyMDE4Yi53c2RsIi8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMThhLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM1OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNS8yMDE4LTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMTgtNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWI5YTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMTgtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIGxvY2F0aW9uPSIyMDE4YS53c2RsIi8+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThhLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNS8yMDE4YS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGFmNTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThhLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIwMThhIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIGxvY2F0aW9uPSIyMDE4Yi53c2RsIi8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM1OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS8yMDE5LTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0xLzIwMTktMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDc1MmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0xLzIwMTktMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3doZXJlIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYWQ2MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE5LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgZG9jdW1lbnQgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpoZWFkZXIgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yLzIwMTktMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTIvMjAxOS0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjAwZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTIvMjAxOS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm93aGVyZSIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5YWUwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTktMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudCBsaXRlcmFsIGJpbmRpbmcKLSAgICB3aWggYSBuYW1wYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlIHNvYXBiaW5kOmJvZHkgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0zLzIwMTktMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvMjAxOS0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjM5OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvMjAxOS0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL25vd2hlcmUiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2VjMDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOS0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIGRvY3VtZW50IGxpdGVyYWwgYmluZGluZwotICAgIHdpaCBhIG5hbXBhY2UgYXR0cmlidXRlIHNwZWNpZmllZCB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00LzIwMTktNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTQvMjAxOS00LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MjgxZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTQvMjAxOS00LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3doZXJlIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00L3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0OWE1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktNC90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTktNCI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudCBsaXRlcmFsIGJpbmRpbmcKLSAgICB3aWggYSBuYW1wYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnQuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOSIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMS8yMDIwLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xLzIwMjAtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjkwNDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xLzIwMjAtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjY2NiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjAtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgbWlzc2luZyBmcm9tIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIwMjAiIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIwMjAiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMi8yMDIwLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yLzIwMjAtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2ZmNjM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yLzIwMjAtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSIyMDIwLnhzZCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3NDE4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjAtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIGluIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQgdGhhdCBoYXMgYSAKLSAgICB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBhYnNvbHV0ZSBVUkkuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAyMCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAyMCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDUtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTEvMjEwNS0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NDE1Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTEvMjEwNS0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPGRvY3VtZW50YXRpb24+Ci0gIDwvZG9jdW1lbnRhdGlvbj4KLSAgPHR5cGVzLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YSIgbG9jYXRpb249IjIxMDVhLndzZGwiLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YiIgbG9jYXRpb249IjIxMDViLndzZGwiLz4KLQotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nSW4iPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ091dCI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciIC8+Ci0gIDwvbWVzc2FnZT4KLSAgPHBvcnRUeXBlIG5hbWU9IkVjaG9Qb3J0VHlwZSI+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiBwYXJhbWV0ZXJPcmRlcj0icGFyYW1ldGVycyI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ0luIiAvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nT3V0IiAvPgotICAgIDwvb3BlcmF0aW9uPgotICAgPC9wb3J0VHlwZT4KLSAgPGJpbmRpbmcgbmFtZT0iRWNob0JpbmRpbmciIHR5cGU9InMwOkVjaG9Qb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9InJwYyIgLz4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9lY2hvU3RyaW5nIiBzdHlsZT0icnBjIiAvPgotICAgICAgPGlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIi8+Ci0gICAgICA8L2lucHV0PgotICAgICAgPG91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIgLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotIDwvYmluZGluZz4KLSAgPHNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotICAgIDxwb3J0IG5hbWU9IkVjaG9Qb3J0IiBiaW5kaW5nPSJzMDpFY2hvQmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDVhLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS8yMTA1YS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzFlNzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDVhLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDVhIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDViLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS8yMTA1Yi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzA3OWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDViLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDViIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWIiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY3ZmMwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMDUtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSB0eXBlcwotICAgIGVsZW1lbnQgcHJlY2VkaW5nIHRoZSAyIGltcG9ydCBlbGVtZW50cy4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjEwNSIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjEwNSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0yLzIxMDUtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDExNDdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0yLzIxMDUtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWEiIGxvY2F0aW9uPSIyMTA1YS53c2RsIi8+Ci0gIDx0eXBlcy8+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWIiIGxvY2F0aW9uPSIyMTA1Yi53c2RsIi8+Ci0KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ0luIj4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdPdXQiPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIiAvPgotICA8L21lc3NhZ2U+Ci0gIDxwb3J0VHlwZSBuYW1lPSJFY2hvUG9ydFR5cGUiPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyIgcGFyYW1ldGVyT3JkZXI9InBhcmFtZXRlcnMiPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdJbiIgLz4KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ091dCIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgIDwvcG9ydFR5cGU+Ci0gIDxiaW5kaW5nIG5hbWU9IkVjaG9CaW5kaW5nIiB0eXBlPSJzMDpFY2hvUG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJycGMiIC8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvZWNob1N0cmluZyIgc3R5bGU9InJwYyIgLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciIC8+Ci0gICAgICA8L291dHB1dD4KLSAgICA8L29wZXJhdGlvbj4KLSA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLSAgICA8cG9ydCBuYW1lPSJFY2hvUG9ydCIgYmluZGluZz0iczA6RWNob0JpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1YS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvMjEwNWEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxZTc5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1YS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YSIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDVhIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1Yi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvMjEwNWIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwNzliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1Yi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YiIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDViIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNTk5ZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMTA1LTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgdHlwZXMKLSAgICBlbGVtZW50IGJldHdlZW4gdGhlIDIgaW1wb3J0IGVsZW1lbnRzLiAKLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTA1IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTA1IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xLzIxMTctMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTEvMjExNy0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYjhmZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTEvMjExNy0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzN2FjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMTctMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpmYXVsdCBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi8yMTE3LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0yLzIxMTctMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgyMmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0yLzIxMTctMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNDAxZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMTE3LTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgcnBjIGxpdGVyYWwgYmluZGluZwotICAgIHdpaCBhIG5hbXBhY2UgYXR0cmlidXRlIHNwZWNpZmllZCB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTE3IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTE3IiB0YWRJRD0iQVAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjExMyIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjExMyIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zLzIxMTctMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTMvMjExNy0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODhmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTMvMjExNy0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdkMDcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMTctMyI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpoZWFkZXJmYXVsdCBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJBUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTEzIiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTEzIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci0KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvMjQwNi0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzI0MDYtMS8yNDA2LTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyNDg2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzI0MDYtMS8yNDA2LTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPGRlZmluaXRpb25zIG5hbWU9IlNhbXBsZVNlcnZpY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCTxtZXNzYWdlIG5hbWU9ImdldFNhbXBsZVJlcXVlc3QiPgotCQk8cGFydCBuYW1lPSJ6aXBjb2RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC9tZXNzYWdlPgotCTxtZXNzYWdlIG5hbWU9ImdldFNhbXBsZVJlc3BvbnNlIj4KLQkJPHBhcnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4c2Q6ZmxvYXQiLz4KLQk8L21lc3NhZ2U+Ci0JPHBvcnRUeXBlIG5hbWU9IlNhbXBsZVBvcnRUeXBlIj4KLQkJPG9wZXJhdGlvbiBuYW1lPSJnZXRTYW1wbGUiPgotCQkJPGlucHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXF1ZXN0Ii8+Ci0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXNwb25zZSIvPgotCQk8L29wZXJhdGlvbj4KLQk8L3BvcnRUeXBlPgotCTxiaW5kaW5nIG5hbWU9IlNhbXBsZUJpbmRpbmciIHR5cGU9InRuczpTYW1wbGVQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQkJPG9wZXJhdGlvbiBuYW1lPSJnZXRTYW1wbGUiPgotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotCQkJPGlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJlbmNvZGVkIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIGVuY29kaW5nU3R5bGU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIi8+Ci0JCQk8L2lucHV0PgotCQkJPG91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0iZW5jb2RlZCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIvPgotCQkJPC9vdXRwdXQ+Ci0JCTwvb3BlcmF0aW9uPgotCTwvYmluZGluZz4KLQk8c2VydmljZSBuYW1lPSJTYW1wbGVTZXJ2aWNlIj4KLQkJPGRvY3VtZW50YXRpb24+PC9kb2N1bWVudGF0aW9uPgotCQk8cG9ydCBuYW1lPSJTYW1wbGVQb3J0IiBiaW5kaW5nPSJ0bnM6U2FtcGxlQmluZGluZyI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0JCTwvcG9ydD4KLQk8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2EyODdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjQwNi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjQwNi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBmYWlscyB0ZXN0IGFzc2VydGlvbiBCUDI0MDYuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjQwNiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjQwNiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2J1Z3ppbGxhL2VtcHR5U29hcEJvZHkvZW1wdHlTb2FwQm9keS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9idWd6aWxsYS9lbXB0eVNvYXBCb2R5L2VtcHR5U29hcEJvZHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyMDI5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2J1Z3ppbGxhL2VtcHR5U29hcEJvZHkvZW1wdHlTb2FwQm9keS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHR5cGVzPgotICAgIDxzOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLSAgICAgIDxzOmVsZW1lbnQgbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICAgIDxzOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDxzOnNlcXVlbmNlPgotICAgICAgICAgICAgPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmFtZT0iYXJnIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgICAgICAgICA8L3M6c2VxdWVuY2U+Ci0gICAgICAgIDwvczpjb21wbGV4VHlwZT4KLSAgICAgIDwvczplbGVtZW50PgotICAgIDwvczpzY2hlbWE+Ci0gIDwvdHlwZXM+Ci0gIDxtZXNzYWdlIG5hbWU9InNldE1lc3NhZ2VSZXF1ZXN0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJzMDplY2hvU3RyaW5nIiAvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9InNldE1lc3NhZ2VSZXNwb25zZSIvPgotCi0gIDxwb3J0VHlwZSBuYW1lPSJTZXJ2aWNlMVNvYXAiPgotICAgIDxvcGVyYXRpb24gbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6c2V0TWVzc2FnZVJlcXVlc3QiIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOnNldE1lc3NhZ2VSZXNwb25zZSIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgPC9wb3J0VHlwZT4KLQotICA8YmluZGluZyBuYW1lPSJTZXJ2aWNlMVNvYXAiIHR5cGU9InMwOlNlcnZpY2UxU29hcCI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9ImRvY3VtZW50IiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIiBzdHlsZT0iZG9jdW1lbnQiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gIDwvYmluZGluZz4KLQotICA8c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHBvcnQgbmFtZT0iU2VydmljZTFTb2FwIiBiaW5kaW5nPSJzMDpTZXJ2aWNlMVNvYXAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdC9XU0lTZXJ2aWNlL1NlcnZpY2UxLmFzbXgiIC8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTAtMS8yMDEwLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTAtMS8yMDEwLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxM2RhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvMjAxMC0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5YmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDEwLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IGZhaWxzIHRlc3QgYXNzZXJ0aW9uIEJQMjAxMC4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMCIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MzA4Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0xLzIwMTEtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgICA8aW1wb3J0IG5hbWVzcGFjZT0iMjAxMS54c2QiIHNjaGVtYUxvY2F0aW9uPSIyMDExLnhzZCIvPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NTdmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0xLzIwMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSIyMDExLnhzZCIgCi0gICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiAKLSAgICAgICAgIHhtbG5zOmludGY9IjIwMTEtMS54c2QiIAotICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJuZXh0LnhzZCIgc2NoZW1hTG9jYXRpb249Im5leHQueHNkIi8+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS9uZXh0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS9uZXh0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE2ODQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvbmV4dC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSAKLSAgdGFyZ2V0TmFtZXNwYWNlPSJuZXh0LnhzZCIKLSAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgeG1sbnM6cz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIAotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmFubm90YXRpb24+Ci0JICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIAkgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLQk8L3hzOmFubm90YXRpb24+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmI2NzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMS0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG9uZm9ybWFudCB3c2RsLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzMDhjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvMjAxMS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEueHNkIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMTZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvMjAxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMSIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgICAgICB0YXJnZXROYW1lc3BhY2U9IjIwMTEueHNkIiAKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIAotICAgICAgICAgeG1sbnM6aW50Zj0iMjAxMS0xLnhzZCIgCi0gICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzRkMDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjIwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIyMDIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEtMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDMwOGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICAgPGltcG9ydCBuYW1lc3BhY2U9IjIwMTEueHNkIiBzY2hlbWFMb2NhdGlvbj0iMjAxMS54c2QiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODU3ZjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLSA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iMjAxMS54c2QiIAotICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgCi0gICAgICAgICB4bWxuczppbnRmPSIyMDExLTEueHNkIiAKLSAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0ibmV4dC54c2QiIHNjaGVtYUxvY2F0aW9uPSJuZXh0LnhzZCIvPgotICA8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvbmV4dC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvbmV4dC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MGE3N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL25leHQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4xIiBlbmNvZGluZz0idXRmLTgiPz4KLTx4czpzY2hlbWEgCi0gIHRhcmdldE5hbWVzcGFjZT0ibmV4dC54c2QiCi0gIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gIHhtbG5zOnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiAKLSAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTx4czphbm5vdGF0aW9uPgotCSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAJICA8L3hzOmRvY3VtZW50YXRpb24+Ci0JPC94czphbm5vdGF0aW9uPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEwOGJlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDExLTMiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAxMS4KLSAgICBIb3dldmVyIHRoZSBwcmVyZXF1aXNpdGUgQlAyMTAyIGZhaWxzIGJlZm9yZSB3ZSBhY3R1YWxseSBjYW4gZXhlY3V0ZSB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMDIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIyMDIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMDIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzMDhjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvMjAxMS00LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEueHNkIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjODdiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvMjAxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgICAgICB0YXJnZXROYW1lc3BhY2U9IjIwMTEueHNkIiAKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIAotICAgICAgICAgeG1sbnM6aW50Zj0iMjAxMS0xLnhzZCIgCi0gICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjZiMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtNCI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMjIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS01LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS01LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNDU4MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgICA8aW1wb3J0IG5hbWVzcGFjZT0iMjAxMS0xLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEtMS54c2QiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODU3ZjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS8yMDExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLSA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iMjAxMS54c2QiIAotICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgCi0gICAgICAgICB4bWxuczppbnRmPSIyMDExLTEueHNkIiAKLSAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0ibmV4dC54c2QiIHNjaGVtYUxvY2F0aW9uPSJuZXh0LnhzZCIvPgotICA8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvbmV4dC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvbmV4dC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0M2M0NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01L25leHQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSAKLSAgdGFyZ2V0TmFtZXNwYWNlPSJuZXh0LnhzZCIKLSAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgeG1sbnM6cz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIAotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmFubm90YXRpb24+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDljYjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtNSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjIwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMjIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS8yMDIxLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS8yMDIxLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzNjg0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvMjAyMS0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiB0eXBlPSJzdHJpbmciLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpBZGRyZXNzIiAvPgotICA8L3dzZGw6bWVzc2FnZT4gIAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydHM9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2NjdiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCB1c2VzIHBhcnRzIGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvMjAyMS0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvMjAyMS0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NGY1MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0yLzIwMjEtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6QWRkcmVzcyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3YjZhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcGFydCBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zLzIwMjEtMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zLzIwMjEtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjdjZWRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMy8yMDIxLTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3MiIHR5cGU9InN0cmluZyIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOkFkZHJlc3MiIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YjAxNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMS0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjEuCi0gICAgU29hcGJpbmQ6aGVhZGVyZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcGFydCBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00LzIwMjEtNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00LzIwMjEtNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDRhYjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNC8yMDIxLTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIgLz4KLSAgIDwvd3NkbDptZXNzYWdlPiAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydHM9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00L3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1Y2M0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTQiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCB1c2VzIHBhcnRzIGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvMjAyMS01LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvMjAyMS01LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNWQ3ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01LzIwMjEtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIiAvPgotICAgPC93c2RsOm1lc3NhZ2U+IAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YzkyOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMS01Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjEuCi0gICAgU29hcGJpbmQ6aGVhZGVyIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBhcnQgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi8yMDIxLTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi8yMDIxLTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhODU1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTYvMjAyMS02LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTYvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2YxNTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjEtNiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIxLgotICAgIFNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBhcnQgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS8yMDIyLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS8yMDIyLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEzODBjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTEvMjAyMi0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiB0eXBlPSJzdHJpbmciLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpBZGRyZXNzIiAvPgotICA8L3dzZGw6bWVzc2FnZT4gIAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhY2MwMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjIuCi0gICAgU29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi8yMDIyLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi8yMDIyLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkZTFkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTIvMjAyMi0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmE4OTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjItMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIyLgotICAgIFNvYXBiaW5kOmZhdWx0IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIyIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvMjAzMi0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvMjAzMi0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMjIzNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xLzIwMzItMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6QWRkcmVzcyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCBuYW1lPSJmYXVsdDEiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOGIzMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAzMi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjIuCi0gICAgVGhlIG5hbWUgYXR0cmlidXRlIHZhbHVlIG9uIHRoZSBTb2FwYmluZDpmYXVsdCBlbGVtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBuYW1lIAotICAgIGF0dHJpYnV0ZSB2YWx1ZSBzcGVjaWZpZWQgb24gdGhlIHBhcmVudCBlbGVtZW50IHdzZGw6ZmF1bHQgZWxlbWVudC4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvMjAzMi0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvMjAzMi0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MmZhZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0yLzIwMzItMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIiAvPgotICAgPC93c2RsOm1lc3NhZ2U+IAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IG5hbWU9ImZhdWx0MSIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzM0NTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMzItMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIyLgotICAgIFRoZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBvbiB0aGUgU29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgbmFtZSAKLSAgICBhdHRyaWJ1dGUgdmFsdWUgc3BlY2lmaWVkIG9uIHRoZSBwYXJlbnQgZWxlbWVudCB3c2RsOmZhdWx0IGVsZW1lbnQuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMzIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMzIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL2FkZHJlc3NCb29rLXJwYy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL2FkZHJlc3NCb29rLXJwYy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzc3YzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy9hZGRyZXNzQm9vay1ycGMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay1ycGMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWEyZjhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iYWRkcmVzc0Jvb2stcnBjIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCB1c2VkIGluIHRoZSBXUy1JIAotICAgIGludGVyb3BlcmFiaWxpdHkgZGVtby4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay9hZGRyZXNzQm9vay53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2svYWRkcmVzc0Jvb2sud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE0ODJkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay9hZGRyZXNzQm9vay53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YzY4YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2svdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9ImFkZHJlc3NCb29rIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCB1c2VkIGluIHRoZSBXUy1JIAotICAgIGludGVyb3BlcmFiaWxpdHkgZGVtby4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBDYXRhbG9nL3NhbXBsZUFwcENhdGFsb2cud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvc2FtcGxlQXBwQ2F0YWxvZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGMyOTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvc2FtcGxlQXBwQ2F0YWxvZy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIKLSB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotIHhtbG5zOmludGY9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAzLTA3L0NhdGFsb2cud3NkbCIKLSB4bWxuczppbXBsPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMy0wNy9DYXRhbG9nX0ltcGwud3NkbCIKLSB4bWxuczpTT0FQLUVOQz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iCi0geG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIiAKLQlsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIi8+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQ2F0YWxvZ1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQ2F0YWxvZyIgYmluZGluZz0iaW50ZjpDYXRhbG9nU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9DYXRhbG9nU2VydmljZSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBDYXRhbG9nL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzA1M2EyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJzYW1wbGVBcHBDYXRhbG9nIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgdGhlIFdTLUkgU2FtcGxlIEFwcGxpY2F0aW9uIGRlbW9uc3RyYXRpbmcgYXR0YWNobWVudCBzdXBwb3J0LgotICAgIFRoaXMgc2hvdWxkIHZhbGlkYXRlIGFnYWluc3QgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZS4KLSAgICBIb3dldmVyLCB0aGlzIHNob3VsZCBmYWlsIHRvIGNvbmZvcm0gdG8gdGhlIFdTLUkgU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJTU0JQMjQwMyIgdGFkSUQ9IlNTQlAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci9zYW1wbGVBcHBNYW51ZmFjdHVyZXIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci9zYW1wbGVBcHBNYW51ZmFjdHVyZXIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkMDY3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBNYW51ZmFjdHVyZXIvc2FtcGxlQXBwTWFudWZhY3R1cmVyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08d3NkbDpkZWZpbml0aW9ucyAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0JeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6U09BUC1FTkM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLQl4bWxuczppbXBsPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXJfSW1wbC53c2RsIiAKLQl4bWxuczppbnRmPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIgCi0JeG1sbnM6Y3Q9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L0NvbmZpZ3VyYXRpb24ueHNkIiAKLQl4bWxuczpjZmc9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L0NvbmZpZ3VyYXRpb24ud3NkbCIKLQl4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotCi0gICA8d3NkbDppbXBvcnQgbG9jYXRpb249Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIiAKLSAgIAkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIvPgotICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvQ29uZmlndXJhdGlvbi53c2RsIgotCQlsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvQ29uZmlndXJhdGlvbi53c2RsIi8+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iVGVzdFNlcnZpY2UiPgotICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbnRmOk1hbnVmYWN0dXJlclNvYXBCaW5kaW5nIiBuYW1lPSJUZXN0UG9ydCI+Ci0gICAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL1Rlc3RTZXJ2aWNlIi8+Ci0gICAgICA8L3dzZGw6cG9ydD4KLSAgIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzlmMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0ic2FtcGxlQXBwTWFudWZhY3R1cmVyIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgdGhlIFdTLUkgU2FtcGxlIEFwcGxpY2F0aW9uIGV4ZXJjaXNpbmcgdGhlICBNYW51ZmFjdHVyZXIgd3NkbCAKLSAgICBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlLgotICAgIFRoaXMgc2hvdWxkIHZhbGlkYXRlIGFnYWluc3QgdGhlIFdTLUkgU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlLgotICAgIFRoaXMgc2hvdWxkIGFsc28gdmFsaWRhdGUgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS9zYW1wbGVBcHBXYXJlaG91c2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS9zYW1wbGVBcHBXYXJlaG91c2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJlMGQyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2Uvc2FtcGxlQXBwV2FyZWhvdXNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08d3NkbDpkZWZpbml0aW9ucyAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0JeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6aW50Zj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvV2FyZWhvdXNlLndzZGwiIAotCXhtbG5zOm1hbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMTAvTWFudWZhY3R1cmVyLndzZGwiCi0JeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci0KLSAgIDx3c2RsOmltcG9ydCBsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMTAvTWFudWZhY3R1cmVyLndzZGwiIAotICAgCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIi8+Ci0gICA8d3NkbDppbXBvcnQgbG9jYXRpb249Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L1dhcmVob3VzZS53c2RsIiAKLSAgIAkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0wOC9XYXJlaG91c2Uud3NkbCIvPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlRlc3RTZXJ2aWNlIj4KLSAgICAgIDx3c2RsOnBvcnQgYmluZGluZz0iaW50ZjpXYXJlaG91c2VTb2FwQmluZGluZyIgbmFtZT0iVGVzdFBvcnQiPgotICAgICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9UZXN0U2VydmljZSIvPgotICAgICAgPC93c2RsOnBvcnQ+Ci0gICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2UvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwV2FyZWhvdXNlL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMwZGM1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2UvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJzYW1wbGVBcHBXYXJlaG91c2UiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyB0aGUgV1MtSSBTYW1wbGUgQXBwbGljYXRpb24gZXhlcmNpc2luZyB0aGUgIFdhcmVob3VzZSB3c2RsIAotICAgIGluIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUuCi0gICAgVGhpcyBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUuCi0gICAgVGhpcyBzaG91bGQgYWxzbyB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=